gen-pr 3.5.1 → 3.6.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/dist/cli.js CHANGED
@@ -1,4 +1,4 @@
1
- import t,{statSync as e,readdirSync as n,readFileSync as s,writeFile as i}from"node:fs";import u,{resolve as r,dirname as o,normalize as a,join as D,relative as l,extname as c,basename as h}from"node:path";import f from"node:process";import{strictEqual as d,notStrictEqual as p}from"node:assert";import{format as g,inspect as m}from"node:util";import{fileURLToPath as F}from"node:url";import{createRequire as C}from"node:module";import{g as E,l as y,D as b,d as v,e as A,f as B,h as w,i as O,b as j,a as x,n as k,m as _}from"./main-Cn--b2Nr.js";import"node:os";import"node:crypto";import"node:child_process";import"node:buffer";import"node:https";import"node:stream";import"node:http";import"node:punycode";import"node:zlib";import"node:querystring";import"node:net";import"node:tls";import"node:tty";import"node:events";const M={right:function(t,e){t=t.trim();const n=P.stringWidth(t);if(n<e)return" ".repeat(e-n)+t;return t},center:function(t,e){t=t.trim();const n=P.stringWidth(t);if(n>=e)return t;return" ".repeat(e-n>>1)+t}};class S{constructor(t){var e;this.width=t.width,this.wrap=null===(e=t.wrap)||void 0===e||e,this.rows=[]}span(...t){this.div(...t).span=!0}resetOutput(){this.rows=[]}div(...t){if(0===t.length&&this.div(""),this.wrap&&this.shouldApplyLayoutDSL(...t)&&"string"==typeof t[0])return this.applyLayoutDSL(t[0]);const e=t.map(t=>"string"==typeof t?this.colFromString(t):t);return this.rows.push(e),e}shouldApplyLayoutDSL(...t){return 1===t.length&&"string"==typeof t[0]&&/[\t\n]/.test(t[0])}applyLayoutDSL(t){const e=t.split("\n").map(t=>t.split("\t"));let n=0;return e.forEach(t=>{t.length>1&&P.stringWidth(t[0])>n&&(n=Math.min(Math.floor(.5*this.width),P.stringWidth(t[0])))}),e.forEach(t=>{this.div(...t.map((e,s)=>({text:e.trim(),padding:this.measurePadding(e),width:0===s&&t.length>1?n:void 0})))}),this.rows[this.rows.length-1]}colFromString(t){return{text:t,padding:this.measurePadding(t)}}measurePadding(t){const e=P.stripAnsi(t);return[0,e.match(/\s*$/)[0].length,0,e.match(/^\s*/)[0].length]}toString(){const t=[];return this.rows.forEach(e=>{this.rowToString(e,t)}),t.filter(t=>!t.hidden).map(t=>t.text).join("\n")}rowToString(t,e){return this.rasterize(t).forEach((n,s)=>{let i="";n.forEach((n,u)=>{const{width:r}=t[u],o=this.negatePadding(t[u]);let a=n;if(o>P.stringWidth(n)&&(a+=" ".repeat(o-P.stringWidth(n))),t[u].align&&"left"!==t[u].align&&this.wrap){a=(0,M[t[u].align])(a,o),P.stringWidth(a)<o&&(a+=" ".repeat((r||0)-P.stringWidth(a)-1))}const D=t[u].padding||[0,0,0,0];D[3]&&(i+=" ".repeat(D[3])),i+=$(t[u],a,"| "),i+=a,i+=$(t[u],a," |"),D[1]&&(i+=" ".repeat(D[1])),0===s&&e.length>0&&(i=this.renderInline(i,e[e.length-1]))}),e.push({text:i.replace(/ +$/,""),span:t.span})}),e}renderInline(t,e){const n=t.match(/^ */),s=n?n[0].length:0,i=e.text,u=P.stringWidth(i.trimRight());return e.span?this.wrap?s<u?t:(e.hidden=!0,i.trimRight()+" ".repeat(s-u)+t.trimLeft()):(e.hidden=!0,i+t):t}rasterize(t){const e=[],n=this.columnWidths(t);let s;return t.forEach((t,i)=>{t.width=n[i],s=this.wrap?P.wrap(t.text,this.negatePadding(t),{hard:!0}).split("\n"):t.text.split("\n"),t.border&&(s.unshift("."+"-".repeat(this.negatePadding(t)+2)+"."),s.push("'"+"-".repeat(this.negatePadding(t)+2)+"'")),t.padding&&(s.unshift(...new Array(t.padding[0]||0).fill("")),s.push(...new Array(t.padding[2]||0).fill(""))),s.forEach((t,n)=>{e[n]||e.push([]);const s=e[n];for(let t=0;t<i;t++)void 0===s[t]&&s.push("");s.push(t)})}),e}negatePadding(t){let e=t.width||0;return t.padding&&(e-=(t.padding[3]||0)+(t.padding[1]||0)),t.border&&(e-=4),e}columnWidths(t){if(!this.wrap)return t.map(t=>t.width||P.stringWidth(t.text));let e=t.length,n=this.width;const s=t.map(t=>{if(t.width)return e--,n-=t.width,t.width}),i=e?Math.floor(n/e):0;return s.map((e,n)=>void 0===e?Math.max(i,function(t){const e=t.padding||[],n=1+(e[3]||0)+(e[1]||0);if(t.border)return n+4;return n}(t[n])):e)}}function $(t,e,n){return t.border?/[.']-+[.']/.test(e)?"":0!==e.trim().length?n:" ":""}let P;const I=function({onlyFirst:t=!1}={}){const e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(e,t?void 0:"g")}();function N(t){if("string"!=typeof t)throw new TypeError(`Expected a \`string\`, got \`${typeof t}\``);return t.replace(I,"")}function W(t,{ambiguousAsWide:e=!1}={}){return function(t){if(!Number.isSafeInteger(t))throw new TypeError(`Expected a code point, got \`${typeof t}\`.`)}(t),12288===(n=t)||n>=65281&&n<=65376||n>=65504&&n<=65510||function(t){return t>=4352&&t<=4447||8986===t||8987===t||9001===t||9002===t||t>=9193&&t<=9196||9200===t||9203===t||9725===t||9726===t||9748===t||9749===t||t>=9776&&t<=9783||t>=9800&&t<=9811||9855===t||t>=9866&&t<=9871||9875===t||9889===t||9898===t||9899===t||9917===t||9918===t||9924===t||9925===t||9934===t||9940===t||9962===t||9970===t||9971===t||9973===t||9978===t||9981===t||9989===t||9994===t||9995===t||10024===t||10060===t||10062===t||t>=10067&&t<=10069||10071===t||t>=10133&&t<=10135||10160===t||10175===t||11035===t||11036===t||11088===t||11093===t||t>=11904&&t<=11929||t>=11931&&t<=12019||t>=12032&&t<=12245||t>=12272&&t<=12287||t>=12289&&t<=12350||t>=12353&&t<=12438||t>=12441&&t<=12543||t>=12549&&t<=12591||t>=12593&&t<=12686||t>=12688&&t<=12773||t>=12783&&t<=12830||t>=12832&&t<=12871||t>=12880&&t<=42124||t>=42128&&t<=42182||t>=43360&&t<=43388||t>=44032&&t<=55203||t>=63744&&t<=64255||t>=65040&&t<=65049||t>=65072&&t<=65106||t>=65108&&t<=65126||t>=65128&&t<=65131||t>=94176&&t<=94180||94192===t||94193===t||t>=94208&&t<=100343||t>=100352&&t<=101589||t>=101631&&t<=101640||t>=110576&&t<=110579||t>=110581&&t<=110587||110589===t||110590===t||t>=110592&&t<=110882||110898===t||t>=110928&&t<=110930||110933===t||t>=110948&&t<=110951||t>=110960&&t<=111355||t>=119552&&t<=119638||t>=119648&&t<=119670||126980===t||127183===t||127374===t||t>=127377&&t<=127386||t>=127488&&t<=127490||t>=127504&&t<=127547||t>=127552&&t<=127560||127568===t||127569===t||t>=127584&&t<=127589||t>=127744&&t<=127776||t>=127789&&t<=127797||t>=127799&&t<=127868||t>=127870&&t<=127891||t>=127904&&t<=127946||t>=127951&&t<=127955||t>=127968&&t<=127984||127988===t||t>=127992&&t<=128062||128064===t||t>=128066&&t<=128252||t>=128255&&t<=128317||t>=128331&&t<=128334||t>=128336&&t<=128359||128378===t||128405===t||128406===t||128420===t||t>=128507&&t<=128591||t>=128640&&t<=128709||128716===t||t>=128720&&t<=128722||t>=128725&&t<=128727||t>=128732&&t<=128735||128747===t||128748===t||t>=128756&&t<=128764||t>=128992&&t<=129003||129008===t||t>=129292&&t<=129338||t>=129340&&t<=129349||t>=129351&&t<=129535||t>=129648&&t<=129660||t>=129664&&t<=129673||t>=129679&&t<=129734||t>=129742&&t<=129756||t>=129759&&t<=129769||t>=129776&&t<=129784||t>=131072&&t<=196605||t>=196608&&t<=262141}(t)||e&&function(t){return 161===t||164===t||167===t||168===t||170===t||173===t||174===t||t>=176&&t<=180||t>=182&&t<=186||t>=188&&t<=191||198===t||208===t||215===t||216===t||t>=222&&t<=225||230===t||t>=232&&t<=234||236===t||237===t||240===t||242===t||243===t||t>=247&&t<=250||252===t||254===t||257===t||273===t||275===t||283===t||294===t||295===t||299===t||t>=305&&t<=307||312===t||t>=319&&t<=322||324===t||t>=328&&t<=331||333===t||338===t||339===t||358===t||359===t||363===t||462===t||464===t||466===t||468===t||470===t||472===t||474===t||476===t||593===t||609===t||708===t||711===t||t>=713&&t<=715||717===t||720===t||t>=728&&t<=731||733===t||735===t||t>=768&&t<=879||t>=913&&t<=929||t>=931&&t<=937||t>=945&&t<=961||t>=963&&t<=969||1025===t||t>=1040&&t<=1103||1105===t||8208===t||t>=8211&&t<=8214||8216===t||8217===t||8220===t||8221===t||t>=8224&&t<=8226||t>=8228&&t<=8231||8240===t||8242===t||8243===t||8245===t||8251===t||8254===t||8308===t||8319===t||t>=8321&&t<=8324||8364===t||8451===t||8453===t||8457===t||8467===t||8470===t||8481===t||8482===t||8486===t||8491===t||8531===t||8532===t||t>=8539&&t<=8542||t>=8544&&t<=8555||t>=8560&&t<=8569||8585===t||t>=8592&&t<=8601||8632===t||8633===t||8658===t||8660===t||8679===t||8704===t||8706===t||8707===t||8711===t||8712===t||8715===t||8719===t||8721===t||8725===t||8730===t||t>=8733&&t<=8736||8739===t||8741===t||t>=8743&&t<=8748||8750===t||t>=8756&&t<=8759||8764===t||8765===t||8776===t||8780===t||8786===t||8800===t||8801===t||t>=8804&&t<=8807||8810===t||8811===t||8814===t||8815===t||8834===t||8835===t||8838===t||8839===t||8853===t||8857===t||8869===t||8895===t||8978===t||t>=9312&&t<=9449||t>=9451&&t<=9547||t>=9552&&t<=9587||t>=9600&&t<=9615||t>=9618&&t<=9621||9632===t||9633===t||t>=9635&&t<=9641||9650===t||9651===t||9654===t||9655===t||9660===t||9661===t||9664===t||9665===t||t>=9670&&t<=9672||9675===t||t>=9678&&t<=9681||t>=9698&&t<=9701||9711===t||9733===t||9734===t||9737===t||9742===t||9743===t||9756===t||9758===t||9792===t||9794===t||9824===t||9825===t||t>=9827&&t<=9829||t>=9831&&t<=9834||9836===t||9837===t||9839===t||9886===t||9887===t||9919===t||t>=9926&&t<=9933||t>=9935&&t<=9939||t>=9941&&t<=9953||9955===t||9960===t||9961===t||t>=9963&&t<=9969||9972===t||t>=9974&&t<=9977||9979===t||9980===t||9982===t||9983===t||10045===t||t>=10102&&t<=10111||t>=11094&&t<=11097||t>=12872&&t<=12879||t>=57344&&t<=63743||t>=65024&&t<=65039||65533===t||t>=127232&&t<=127242||t>=127248&&t<=127277||t>=127280&&t<=127337||t>=127344&&t<=127373||127375===t||127376===t||t>=127387&&t<=127404||t>=917760&&t<=917999||t>=983040&&t<=1048573||t>=1048576&&t<=1114109}(t)?2:1;var n}var L=()=>/[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE89\uDE8F-\uDEC2\uDEC6\uDECE-\uDEDC\uDEDF-\uDEE9]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g;const z=new Intl.Segmenter,H=/^\p{Default_Ignorable_Code_Point}$/u;function R(t,e={}){if("string"!=typeof t||0===t.length)return 0;const{ambiguousIsNarrow:n=!0,countAnsiEscapeCodes:s=!1}=e;if(s||(t=N(t)),0===t.length)return 0;let i=0;const u={ambiguousAsWide:!n};for(const{segment:e}of z.segment(t)){const t=e.codePointAt(0);t<=31||t>=127&&t<=159||(t>=8203&&t<=8207||65279===t||t>=768&&t<=879||t>=6832&&t<=6911||t>=7616&&t<=7679||t>=8400&&t<=8447||t>=65056&&t<=65071||t>=55296&&t<=57343||t>=65024&&t<=65039||H.test(e)||(L().test(e)?i+=2:i+=W(t,u)))}return i}const T=(t=0)=>e=>`[${e+t}m`,U=(t=0)=>e=>`[${38+t};5;${e}m`,G=(t=0)=>(e,n,s)=>`[${38+t};2;${e};${n};${s}m`,q={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(q.modifier);Object.keys(q.color),Object.keys(q.bgColor);const V=function(){const t=new Map;for(const[e,n]of Object.entries(q)){for(const[e,s]of Object.entries(n))q[e]={open:`[${s[0]}m`,close:`[${s[1]}m`},n[e]=q[e],t.set(s[0],s[1]);Object.defineProperty(q,e,{value:n,enumerable:!1})}return Object.defineProperty(q,"codes",{value:t,enumerable:!1}),q.color.close="",q.bgColor.close="",q.color.ansi=T(),q.color.ansi256=U(),q.color.ansi16m=G(),q.bgColor.ansi=T(10),q.bgColor.ansi256=U(10),q.bgColor.ansi16m=G(10),Object.defineProperties(q,{rgbToAnsi256:{value:(t,e,n)=>t===e&&e===n?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(e/255*5)+Math.round(n/255*5),enumerable:!1},hexToRgb:{value:t=>{const e=/[a-f\d]{6}|[a-f\d]{3}/i.exec(t.toString(16));if(!e)return[0,0,0];let[n]=e;3===n.length&&(n=[...n].map(t=>t+t).join(""));const s=Number.parseInt(n,16);return[s>>16&255,s>>8&255,255&s]},enumerable:!1},hexToAnsi256:{value:t=>q.rgbToAnsi256(...q.hexToRgb(t)),enumerable:!1},ansi256ToAnsi:{value:t=>{if(t<8)return 30+t;if(t<16)return t-8+90;let e,n,s;if(t>=232)e=(10*(t-232)+8)/255,n=e,s=e;else{const i=(t-=16)%36;e=Math.floor(t/36)/5,n=Math.floor(i/6)/5,s=i%6/5}const i=2*Math.max(e,n,s);if(0===i)return 30;let u=30+(Math.round(s)<<2|Math.round(n)<<1|Math.round(e));return 2===i&&(u+=60),u},enumerable:!1},rgbToAnsi:{value:(t,e,n)=>q.ansi256ToAnsi(q.rgbToAnsi256(t,e,n)),enumerable:!1},hexToAnsi:{value:t=>q.ansi256ToAnsi(q.hexToAnsi256(t)),enumerable:!1}}),q}(),Y=new Set(["","›"]),K="]8;;",J=t=>`${Y.values().next().value}[${t}m`,Z=t=>`${Y.values().next().value}${K}${t}`,Q=(t,e,n)=>{const s=[...e];let i=!1,u=!1,r=R(N(t.at(-1)));for(const[e,o]of s.entries()){const a=R(o);if(r+a<=n?t[t.length-1]+=o:(t.push(o),r=0),Y.has(o)){i=!0;u=s.slice(e+1,e+1+4).join("")===K}i?u?""===o&&(i=!1,u=!1):"m"===o&&(i=!1):(r+=a,r===n&&e<s.length-1&&(t.push(""),r=0))}!r&&t.at(-1).length>0&&t.length>1&&(t[t.length-2]+=t.pop())},X=(t,e,n={})=>{if(!1!==n.trim&&""===t.trim())return"";let s,i,u="";const r=(t=>t.split(" ").map(t=>R(t)))(t);let o=[""];for(const[s,i]of t.split(" ").entries()){!1!==n.trim&&(o[o.length-1]=o.at(-1).trimStart());let t=R(o.at(-1));if(0!==s&&(t>=e&&(!1===n.wordWrap||!1===n.trim)&&(o.push(""),t=0),(t>0||!1===n.trim)&&(o[o.length-1]+=" ",t++)),n.hard&&r[s]>e){const n=e-t,u=1+Math.floor((r[s]-n-1)/e);Math.floor((r[s]-1)/e)<u&&o.push(""),Q(o,i,e);continue}if(t+r[s]>e&&t>0&&r[s]>0){if(!1===n.wordWrap&&t<e){Q(o,i,e);continue}o.push("")}t+r[s]>e&&!1===n.wordWrap?Q(o,i,e):o[o.length-1]+=i}!1!==n.trim&&(o=o.map(t=>(t=>{const e=t.split(" ");let n=e.length;for(;n>0&&!(R(e[n-1])>0);)n--;return n===e.length?t:e.slice(0,n).join(" ")+e.slice(n).join("")})(t)));const a=o.join("\n"),D=[...a];let l=0;for(const[t,e]of D.entries()){if(u+=e,Y.has(e)){const{groups:t}=new RegExp(`(?:\\[(?<code>\\d+)m|\\${K}(?<uri>.*))`).exec(a.slice(l))||{groups:{}};if(void 0!==t.code){const e=Number.parseFloat(t.code);s=39===e?void 0:e}else void 0!==t.uri&&(i=0===t.uri.length?void 0:t.uri)}const n=V.codes.get(Number(s));"\n"===D[t+1]?(i&&(u+=Z("")),s&&n&&(u+=J(n))):"\n"===e&&(s&&n&&(u+=J(s)),i&&(u+=Z(i))),l+=e.length}return u};function tt(t,e,n){return String(t).normalize().replaceAll("\r\n","\n").split("\n").map(t=>X(t,e,n)).join("\n")}
1
+ import t,{statSync as e,readdirSync as n,readFileSync as s,writeFile as i}from"node:fs";import u,{resolve as r,dirname as o,normalize as a,join as D,relative as l,extname as c,basename as h}from"node:path";import f from"node:process";import{strictEqual as d,notStrictEqual as p}from"node:assert";import{format as g,inspect as F}from"node:util";import{fileURLToPath as m}from"node:url";import{createRequire as C}from"node:module";import{g as E,l as y,D as b,d as v,e as A,f as B,h as w,i as O,b as j,a as x,n as k,m as _}from"./main-hppu36UF.js";import"node:os";import"node:crypto";import"node:child_process";import"node:buffer";import"node:https";import"node:stream";import"node:http";import"node:punycode";import"node:zlib";import"node:querystring";import"node:net";import"node:tls";import"node:tty";import"node:events";const M={right:function(t,e){t=t.trim();const n=P.stringWidth(t);if(n<e)return" ".repeat(e-n)+t;return t},center:function(t,e){t=t.trim();const n=P.stringWidth(t);if(n>=e)return t;return" ".repeat(e-n>>1)+t}};class S{constructor(t){var e;this.width=t.width,this.wrap=null===(e=t.wrap)||void 0===e||e,this.rows=[]}span(...t){this.div(...t).span=!0}resetOutput(){this.rows=[]}div(...t){if(0===t.length&&this.div(""),this.wrap&&this.shouldApplyLayoutDSL(...t)&&"string"==typeof t[0])return this.applyLayoutDSL(t[0]);const e=t.map(t=>"string"==typeof t?this.colFromString(t):t);return this.rows.push(e),e}shouldApplyLayoutDSL(...t){return 1===t.length&&"string"==typeof t[0]&&/[\t\n]/.test(t[0])}applyLayoutDSL(t){const e=t.split("\n").map(t=>t.split("\t"));let n=0;return e.forEach(t=>{t.length>1&&P.stringWidth(t[0])>n&&(n=Math.min(Math.floor(.5*this.width),P.stringWidth(t[0])))}),e.forEach(t=>{this.div(...t.map((e,s)=>({text:e.trim(),padding:this.measurePadding(e),width:0===s&&t.length>1?n:void 0})))}),this.rows[this.rows.length-1]}colFromString(t){return{text:t,padding:this.measurePadding(t)}}measurePadding(t){const e=P.stripAnsi(t);return[0,e.match(/\s*$/)[0].length,0,e.match(/^\s*/)[0].length]}toString(){const t=[];return this.rows.forEach(e=>{this.rowToString(e,t)}),t.filter(t=>!t.hidden).map(t=>t.text).join("\n")}rowToString(t,e){return this.rasterize(t).forEach((n,s)=>{let i="";n.forEach((n,u)=>{const{width:r}=t[u],o=this.negatePadding(t[u]);let a=n;if(o>P.stringWidth(n)&&(a+=" ".repeat(o-P.stringWidth(n))),t[u].align&&"left"!==t[u].align&&this.wrap){a=(0,M[t[u].align])(a,o),P.stringWidth(a)<o&&(a+=" ".repeat((r||0)-P.stringWidth(a)-1))}const D=t[u].padding||[0,0,0,0];D[3]&&(i+=" ".repeat(D[3])),i+=$(t[u],a,"| "),i+=a,i+=$(t[u],a," |"),D[1]&&(i+=" ".repeat(D[1])),0===s&&e.length>0&&(i=this.renderInline(i,e[e.length-1]))}),e.push({text:i.replace(/ +$/,""),span:t.span})}),e}renderInline(t,e){const n=t.match(/^ */),s=n?n[0].length:0,i=e.text,u=P.stringWidth(i.trimRight());return e.span?this.wrap?s<u?t:(e.hidden=!0,i.trimRight()+" ".repeat(s-u)+t.trimLeft()):(e.hidden=!0,i+t):t}rasterize(t){const e=[],n=this.columnWidths(t);let s;return t.forEach((t,i)=>{t.width=n[i],s=this.wrap?P.wrap(t.text,this.negatePadding(t),{hard:!0}).split("\n"):t.text.split("\n"),t.border&&(s.unshift("."+"-".repeat(this.negatePadding(t)+2)+"."),s.push("'"+"-".repeat(this.negatePadding(t)+2)+"'")),t.padding&&(s.unshift(...new Array(t.padding[0]||0).fill("")),s.push(...new Array(t.padding[2]||0).fill(""))),s.forEach((t,n)=>{e[n]||e.push([]);const s=e[n];for(let t=0;t<i;t++)void 0===s[t]&&s.push("");s.push(t)})}),e}negatePadding(t){let e=t.width||0;return t.padding&&(e-=(t.padding[3]||0)+(t.padding[1]||0)),t.border&&(e-=4),e}columnWidths(t){if(!this.wrap)return t.map(t=>t.width||P.stringWidth(t.text));let e=t.length,n=this.width;const s=t.map(t=>{if(t.width)return e--,n-=t.width,t.width}),i=e?Math.floor(n/e):0;return s.map((e,n)=>void 0===e?Math.max(i,function(t){const e=t.padding||[],n=1+(e[3]||0)+(e[1]||0);if(t.border)return n+4;return n}(t[n])):e)}}function $(t,e,n){return t.border?/[.']-+[.']/.test(e)?"":0!==e.trim().length?n:" ":""}let P;const I=function({onlyFirst:t=!1}={}){return new RegExp("(?:\\u001B\\][\\s\\S]*?(?:\\u0007|\\u001B\\u005C|\\u009C))|[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]",t?void 0:"g")}();function N(t){if("string"!=typeof t)throw new TypeError(`Expected a \`string\`, got \`${typeof t}\``);return t.replace(I,"")}function W(t,{ambiguousAsWide:e=!1}={}){return function(t){if(!Number.isSafeInteger(t))throw new TypeError(`Expected a code point, got \`${typeof t}\`.`)}(t),12288===(n=t)||n>=65281&&n<=65376||n>=65504&&n<=65510||function(t){return t>=4352&&t<=4447||8986===t||8987===t||9001===t||9002===t||t>=9193&&t<=9196||9200===t||9203===t||9725===t||9726===t||9748===t||9749===t||t>=9776&&t<=9783||t>=9800&&t<=9811||9855===t||t>=9866&&t<=9871||9875===t||9889===t||9898===t||9899===t||9917===t||9918===t||9924===t||9925===t||9934===t||9940===t||9962===t||9970===t||9971===t||9973===t||9978===t||9981===t||9989===t||9994===t||9995===t||10024===t||10060===t||10062===t||t>=10067&&t<=10069||10071===t||t>=10133&&t<=10135||10160===t||10175===t||11035===t||11036===t||11088===t||11093===t||t>=11904&&t<=11929||t>=11931&&t<=12019||t>=12032&&t<=12245||t>=12272&&t<=12287||t>=12289&&t<=12350||t>=12353&&t<=12438||t>=12441&&t<=12543||t>=12549&&t<=12591||t>=12593&&t<=12686||t>=12688&&t<=12773||t>=12783&&t<=12830||t>=12832&&t<=12871||t>=12880&&t<=42124||t>=42128&&t<=42182||t>=43360&&t<=43388||t>=44032&&t<=55203||t>=63744&&t<=64255||t>=65040&&t<=65049||t>=65072&&t<=65106||t>=65108&&t<=65126||t>=65128&&t<=65131||t>=94176&&t<=94180||94192===t||94193===t||t>=94208&&t<=100343||t>=100352&&t<=101589||t>=101631&&t<=101640||t>=110576&&t<=110579||t>=110581&&t<=110587||110589===t||110590===t||t>=110592&&t<=110882||110898===t||t>=110928&&t<=110930||110933===t||t>=110948&&t<=110951||t>=110960&&t<=111355||t>=119552&&t<=119638||t>=119648&&t<=119670||126980===t||127183===t||127374===t||t>=127377&&t<=127386||t>=127488&&t<=127490||t>=127504&&t<=127547||t>=127552&&t<=127560||127568===t||127569===t||t>=127584&&t<=127589||t>=127744&&t<=127776||t>=127789&&t<=127797||t>=127799&&t<=127868||t>=127870&&t<=127891||t>=127904&&t<=127946||t>=127951&&t<=127955||t>=127968&&t<=127984||127988===t||t>=127992&&t<=128062||128064===t||t>=128066&&t<=128252||t>=128255&&t<=128317||t>=128331&&t<=128334||t>=128336&&t<=128359||128378===t||128405===t||128406===t||128420===t||t>=128507&&t<=128591||t>=128640&&t<=128709||128716===t||t>=128720&&t<=128722||t>=128725&&t<=128727||t>=128732&&t<=128735||128747===t||128748===t||t>=128756&&t<=128764||t>=128992&&t<=129003||129008===t||t>=129292&&t<=129338||t>=129340&&t<=129349||t>=129351&&t<=129535||t>=129648&&t<=129660||t>=129664&&t<=129673||t>=129679&&t<=129734||t>=129742&&t<=129756||t>=129759&&t<=129769||t>=129776&&t<=129784||t>=131072&&t<=196605||t>=196608&&t<=262141}(t)||e&&function(t){return 161===t||164===t||167===t||168===t||170===t||173===t||174===t||t>=176&&t<=180||t>=182&&t<=186||t>=188&&t<=191||198===t||208===t||215===t||216===t||t>=222&&t<=225||230===t||t>=232&&t<=234||236===t||237===t||240===t||242===t||243===t||t>=247&&t<=250||252===t||254===t||257===t||273===t||275===t||283===t||294===t||295===t||299===t||t>=305&&t<=307||312===t||t>=319&&t<=322||324===t||t>=328&&t<=331||333===t||338===t||339===t||358===t||359===t||363===t||462===t||464===t||466===t||468===t||470===t||472===t||474===t||476===t||593===t||609===t||708===t||711===t||t>=713&&t<=715||717===t||720===t||t>=728&&t<=731||733===t||735===t||t>=768&&t<=879||t>=913&&t<=929||t>=931&&t<=937||t>=945&&t<=961||t>=963&&t<=969||1025===t||t>=1040&&t<=1103||1105===t||8208===t||t>=8211&&t<=8214||8216===t||8217===t||8220===t||8221===t||t>=8224&&t<=8226||t>=8228&&t<=8231||8240===t||8242===t||8243===t||8245===t||8251===t||8254===t||8308===t||8319===t||t>=8321&&t<=8324||8364===t||8451===t||8453===t||8457===t||8467===t||8470===t||8481===t||8482===t||8486===t||8491===t||8531===t||8532===t||t>=8539&&t<=8542||t>=8544&&t<=8555||t>=8560&&t<=8569||8585===t||t>=8592&&t<=8601||8632===t||8633===t||8658===t||8660===t||8679===t||8704===t||8706===t||8707===t||8711===t||8712===t||8715===t||8719===t||8721===t||8725===t||8730===t||t>=8733&&t<=8736||8739===t||8741===t||t>=8743&&t<=8748||8750===t||t>=8756&&t<=8759||8764===t||8765===t||8776===t||8780===t||8786===t||8800===t||8801===t||t>=8804&&t<=8807||8810===t||8811===t||8814===t||8815===t||8834===t||8835===t||8838===t||8839===t||8853===t||8857===t||8869===t||8895===t||8978===t||t>=9312&&t<=9449||t>=9451&&t<=9547||t>=9552&&t<=9587||t>=9600&&t<=9615||t>=9618&&t<=9621||9632===t||9633===t||t>=9635&&t<=9641||9650===t||9651===t||9654===t||9655===t||9660===t||9661===t||9664===t||9665===t||t>=9670&&t<=9672||9675===t||t>=9678&&t<=9681||t>=9698&&t<=9701||9711===t||9733===t||9734===t||9737===t||9742===t||9743===t||9756===t||9758===t||9792===t||9794===t||9824===t||9825===t||t>=9827&&t<=9829||t>=9831&&t<=9834||9836===t||9837===t||9839===t||9886===t||9887===t||9919===t||t>=9926&&t<=9933||t>=9935&&t<=9939||t>=9941&&t<=9953||9955===t||9960===t||9961===t||t>=9963&&t<=9969||9972===t||t>=9974&&t<=9977||9979===t||9980===t||9982===t||9983===t||10045===t||t>=10102&&t<=10111||t>=11094&&t<=11097||t>=12872&&t<=12879||t>=57344&&t<=63743||t>=65024&&t<=65039||65533===t||t>=127232&&t<=127242||t>=127248&&t<=127277||t>=127280&&t<=127337||t>=127344&&t<=127373||127375===t||127376===t||t>=127387&&t<=127404||t>=917760&&t<=917999||t>=983040&&t<=1048573||t>=1048576&&t<=1114109}(t)?2:1;var n}var L=()=>/[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E-\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED8\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])))?))?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3C-\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE8A\uDE8E-\uDEC2\uDEC6\uDEC8\uDECD-\uDEDC\uDEDF-\uDEEA\uDEEF]|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g;const z=new Intl.Segmenter,H=/^\p{Default_Ignorable_Code_Point}$/u;function R(t,e={}){if("string"!=typeof t||0===t.length)return 0;const{ambiguousIsNarrow:n=!0,countAnsiEscapeCodes:s=!1}=e;if(s||(t=N(t)),0===t.length)return 0;let i=0;const u={ambiguousAsWide:!n};for(const{segment:e}of z.segment(t)){const t=e.codePointAt(0);t<=31||t>=127&&t<=159||(t>=8203&&t<=8207||65279===t||t>=768&&t<=879||t>=6832&&t<=6911||t>=7616&&t<=7679||t>=8400&&t<=8447||t>=65056&&t<=65071||t>=55296&&t<=57343||t>=65024&&t<=65039||H.test(e)||(L().test(e)?i+=2:i+=W(t,u)))}return i}const T=(t=0)=>e=>`[${e+t}m`,U=(t=0)=>e=>`[${38+t};5;${e}m`,G=(t=0)=>(e,n,s)=>`[${38+t};2;${e};${n};${s}m`,q={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(q.modifier);Object.keys(q.color),Object.keys(q.bgColor);const V=function(){const t=new Map;for(const[e,n]of Object.entries(q)){for(const[e,s]of Object.entries(n))q[e]={open:`[${s[0]}m`,close:`[${s[1]}m`},n[e]=q[e],t.set(s[0],s[1]);Object.defineProperty(q,e,{value:n,enumerable:!1})}return Object.defineProperty(q,"codes",{value:t,enumerable:!1}),q.color.close="",q.bgColor.close="",q.color.ansi=T(),q.color.ansi256=U(),q.color.ansi16m=G(),q.bgColor.ansi=T(10),q.bgColor.ansi256=U(10),q.bgColor.ansi16m=G(10),Object.defineProperties(q,{rgbToAnsi256:{value:(t,e,n)=>t===e&&e===n?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(e/255*5)+Math.round(n/255*5),enumerable:!1},hexToRgb:{value:t=>{const e=/[a-f\d]{6}|[a-f\d]{3}/i.exec(t.toString(16));if(!e)return[0,0,0];let[n]=e;3===n.length&&(n=[...n].map(t=>t+t).join(""));const s=Number.parseInt(n,16);return[s>>16&255,s>>8&255,255&s]},enumerable:!1},hexToAnsi256:{value:t=>q.rgbToAnsi256(...q.hexToRgb(t)),enumerable:!1},ansi256ToAnsi:{value:t=>{if(t<8)return 30+t;if(t<16)return t-8+90;let e,n,s;if(t>=232)e=(10*(t-232)+8)/255,n=e,s=e;else{const i=(t-=16)%36;e=Math.floor(t/36)/5,n=Math.floor(i/6)/5,s=i%6/5}const i=2*Math.max(e,n,s);if(0===i)return 30;let u=30+(Math.round(s)<<2|Math.round(n)<<1|Math.round(e));return 2===i&&(u+=60),u},enumerable:!1},rgbToAnsi:{value:(t,e,n)=>q.ansi256ToAnsi(q.rgbToAnsi256(t,e,n)),enumerable:!1},hexToAnsi:{value:t=>q.ansi256ToAnsi(q.hexToAnsi256(t)),enumerable:!1}}),q}(),Y=new Set(["","›"]),K="]8;;",J=t=>`${Y.values().next().value}[${t}m`,Q=t=>`${Y.values().next().value}${K}${t}`,Z=(t,e,n)=>{const s=[...e];let i=!1,u=!1,r=R(N(t.at(-1)));for(const[e,o]of s.entries()){const a=R(o);if(r+a<=n?t[t.length-1]+=o:(t.push(o),r=0),Y.has(o)){i=!0;u=s.slice(e+1,e+1+4).join("")===K}i?u?""===o&&(i=!1,u=!1):"m"===o&&(i=!1):(r+=a,r===n&&e<s.length-1&&(t.push(""),r=0))}!r&&t.at(-1).length>0&&t.length>1&&(t[t.length-2]+=t.pop())},X=(t,e,n={})=>{if(!1!==n.trim&&""===t.trim())return"";let s,i,u="";const r=(t=>t.split(" ").map(t=>R(t)))(t);let o=[""];for(const[s,i]of t.split(" ").entries()){!1!==n.trim&&(o[o.length-1]=o.at(-1).trimStart());let t=R(o.at(-1));if(0!==s&&(t>=e&&(!1===n.wordWrap||!1===n.trim)&&(o.push(""),t=0),(t>0||!1===n.trim)&&(o[o.length-1]+=" ",t++)),n.hard&&r[s]>e){const n=e-t,u=1+Math.floor((r[s]-n-1)/e);Math.floor((r[s]-1)/e)<u&&o.push(""),Z(o,i,e);continue}if(t+r[s]>e&&t>0&&r[s]>0){if(!1===n.wordWrap&&t<e){Z(o,i,e);continue}o.push("")}t+r[s]>e&&!1===n.wordWrap?Z(o,i,e):o[o.length-1]+=i}!1!==n.trim&&(o=o.map(t=>(t=>{const e=t.split(" ");let n=e.length;for(;n>0&&!(R(e[n-1])>0);)n--;return n===e.length?t:e.slice(0,n).join(" ")+e.slice(n).join("")})(t)));const a=o.join("\n"),D=[...a];let l=0;for(const[t,e]of D.entries()){if(u+=e,Y.has(e)){const{groups:t}=new RegExp(`(?:\\[(?<code>\\d+)m|\\${K}(?<uri>.*))`).exec(a.slice(l))||{groups:{}};if(void 0!==t.code){const e=Number.parseFloat(t.code);s=39===e?void 0:e}else void 0!==t.uri&&(i=0===t.uri.length?void 0:t.uri)}const n=V.codes.get(Number(s));"\n"===D[t+1]?(i&&(u+=Q("")),s&&n&&(u+=J(n))):"\n"===e&&(s&&n&&(u+=J(s)),i&&(u+=Q(i))),l+=e.length}return u};function tt(t,e,n){return String(t).normalize().replaceAll("\r\n","\n").split("\n").map(t=>X(t,e,n)).join("\n")}
2
2
  /**
3
3
  * @license
4
4
  * Copyright (c) 2016, Contributors
@@ -29,5 +29,5 @@ let ut;!function(t){t.BOOLEAN="boolean",t.STRING="string",t.NUMBER="number",t.AR
29
29
  * Copyright (c) 2016, Contributors
30
30
  * SPDX-License-Identifier: ISC
31
31
  */
32
- var at,Dt,lt;const ct=process&&process.env&&process.env.YARGS_MIN_NODE_VERSION?Number(process.env.YARGS_MIN_NODE_VERSION):20,ht=null!==(Dt=null===(at=null===process||void 0===process?void 0:process.versions)||void 0===at?void 0:at.node)&&void 0!==Dt?Dt:null===(lt=null===process||void 0===process?void 0:process.version)||void 0===lt?void 0:lt.slice(1);if(ht){if(Number(ht.match(/^([^.]+)/)[1])<ct)throw Error(`yargs parser supports a minimum Node.js version of ${ct}. Read our version support policy: https://github.com/yargs/yargs-parser#supported-nodejs-versions`)}const ft=process?process.env:{},dt=C?C(import.meta.url):void 0,pt=new class{constructor(t){ut=t}parse(t,e){const n=Object.assign({alias:void 0,array:void 0,boolean:void 0,config:void 0,configObjects:void 0,configuration:void 0,coerce:void 0,count:void 0,default:void 0,envPrefix:void 0,narg:void 0,normalize:void 0,string:void 0,number:void 0,__:void 0,key:void 0},e),s=function(t){if(Array.isArray(t))return t.map(t=>"string"!=typeof t?t+"":t);t=t.trim();let e=0,n=null,s=null,i=null;const u=[];for(let r=0;r<t.length;r++)n=s,s=t.charAt(r)," "!==s||i?(s===i?i=null:"'"!==s&&'"'!==s||i||(i=s),u[e]||(u[e]=""),u[e]+=s):" "!==n&&e++;return u}(t),i="string"==typeof t,u=function(t){const e=[],n=Object.create(null);let s=!0;Object.keys(t).forEach(function(n){e.push([].concat(t[n],n))});for(;s;){s=!1;for(let t=0;t<e.length;t++)for(let n=t+1;n<e.length;n++){if(e[t].filter(function(t){return-1!==e[n].indexOf(t)}).length){e[t]=e[t].concat(e[n]),e.splice(n,1),s=!0;break}}}return e.forEach(function(t){const e=(t=t.filter(function(t,e,n){return n.indexOf(t)===e})).pop();void 0!==e&&"string"==typeof e&&(n[e]=t)}),n}(Object.assign(Object.create(null),n.alias)),r=Object.assign({"boolean-negation":!0,"camel-case-expansion":!0,"combine-arrays":!1,"dot-notation":!0,"duplicate-arguments-array":!0,"flatten-duplicate-arrays":!0,"greedy-arrays":!0,"halt-at-non-option":!1,"nargs-eats-options":!1,"negation-prefix":"no-","parse-numbers":!0,"parse-positional-numbers":!0,"populate--":!1,"set-placeholder-key":!1,"short-option-groups":!0,"strip-aliased":!1,"strip-dashed":!1,"unknown-options-as-args":!1},n.configuration),o=Object.assign(Object.create(null),n.default),a=n.configObjects||[],D=n.envPrefix,l=r["populate--"],c=l?"--":"_",h=Object.create(null),f=Object.create(null),d=n.__||ut.format,p={aliases:Object.create(null),arrays:Object.create(null),bools:Object.create(null),strings:Object.create(null),numbers:Object.create(null),counts:Object.create(null),normalize:Object.create(null),configs:Object.create(null),nargs:Object.create(null),coercions:Object.create(null),keys:[]},g=/^-([0-9]+(\.[0-9]+)?|\.[0-9]+)$/,m=new RegExp("^--"+r["negation-prefix"]+"(.+)");[].concat(n.array||[]).filter(Boolean).forEach(function(t){const e="object"==typeof t?t.key:t,n=Object.keys(t).map(function(t){return{boolean:"bools",string:"strings",number:"numbers"}[t]}).filter(Boolean).pop();n&&(p[n][e]=!0),p.arrays[e]=!0,p.keys.push(e)}),[].concat(n.boolean||[]).filter(Boolean).forEach(function(t){p.bools[t]=!0,p.keys.push(t)}),[].concat(n.string||[]).filter(Boolean).forEach(function(t){p.strings[t]=!0,p.keys.push(t)}),[].concat(n.number||[]).filter(Boolean).forEach(function(t){p.numbers[t]=!0,p.keys.push(t)}),[].concat(n.count||[]).filter(Boolean).forEach(function(t){p.counts[t]=!0,p.keys.push(t)}),[].concat(n.normalize||[]).filter(Boolean).forEach(function(t){p.normalize[t]=!0,p.keys.push(t)}),"object"==typeof n.narg&&Object.entries(n.narg).forEach(([t,e])=>{"number"==typeof e&&(p.nargs[t]=e,p.keys.push(t))}),"object"==typeof n.coerce&&Object.entries(n.coerce).forEach(([t,e])=>{"function"==typeof e&&(p.coercions[t]=e,p.keys.push(t))}),void 0!==n.config&&(Array.isArray(n.config)||"string"==typeof n.config?[].concat(n.config).filter(Boolean).forEach(function(t){p.configs[t]=!0}):"object"==typeof n.config&&Object.entries(n.config).forEach(([t,e])=>{"boolean"!=typeof e&&"function"!=typeof e||(p.configs[t]=e)})),function(...t){t.forEach(function(t){Object.keys(t||{}).forEach(function(t){p.aliases[t]||(p.aliases[t]=[].concat(u[t]||[]),p.aliases[t].concat(t).forEach(function(e){if(/-/.test(e)&&r["camel-case-expansion"]){const n=et(e);n!==t&&-1===p.aliases[t].indexOf(n)&&(p.aliases[t].push(n),h[n]=!0)}}),p.aliases[t].concat(t).forEach(function(e){if(e.length>1&&/[A-Z]/.test(e)&&r["camel-case-expansion"]){const n=nt(e,"-");n!==t&&-1===p.aliases[t].indexOf(n)&&(p.aliases[t].push(n),h[n]=!0)}}),p.aliases[t].forEach(function(e){p.aliases[e]=[t].concat(p.aliases[t].filter(function(t){return e!==t}))}))})})}(n.key,u,n.default,p.arrays),Object.keys(o).forEach(function(t){(p.aliases[t]||[]).forEach(function(e){o[e]=o[t]})});let F=null;Object.keys(p.counts).find(t=>$(t,p.arrays)?(F=Error(d("Invalid configuration: %s, opts.count excludes opts.array.",t)),!0):!!$(t,p.nargs)&&(F=Error(d("Invalid configuration: %s, opts.count excludes opts.narg.",t)),!0));let C=[];const E=Object.assign(Object.create(null),{_:[]}),y={};for(let t=0;t<s.length;t++){const e=s[t],n=e.replace(/^-{3,}/,"---");let i,u,o,a,D,l;if("--"!==e&&/^-/.test(e)&&I(e))b(e);else{if(n.match(/^---+(=|$)/)){b(e);continue}if(e.match(/^--.+=/)||!r["short-option-groups"]&&e.match(/^-.+=/))a=e.match(/^--?([^=]+)=([\s\S]*)$/),null!==a&&Array.isArray(a)&&a.length>=3&&($(a[1],p.arrays)?t=A(t,a[1],s,a[2]):!1!==$(a[1],p.nargs)?t=v(t,a[1],s,a[2]):B(a[1],a[2],!0));else if(e.match(m)&&r["boolean-negation"])a=e.match(m),null!==a&&Array.isArray(a)&&a.length>=2&&(u=a[1],B(u,!!$(u,p.arrays)&&[!1]));else if(e.match(/^--.+/)||!r["short-option-groups"]&&e.match(/^-[^-]+/))a=e.match(/^--?(.+)/),null!==a&&Array.isArray(a)&&a.length>=2&&(u=a[1],$(u,p.arrays)?t=A(t,u,s):!1!==$(u,p.nargs)?t=v(t,u,s):(D=s[t+1],void 0===D||D.match(/^-/)&&!D.match(g)||$(u,p.bools)||$(u,p.counts)?/^(true|false)$/.test(D)?(B(u,D),t++):B(u,N(u)):(B(u,D),t++)));else if(e.match(/^-.\..+=/))a=e.match(/^-([^=]+)=([\s\S]*)$/),null!==a&&Array.isArray(a)&&a.length>=3&&B(a[1],a[2]);else if(e.match(/^-.\..+/)&&!e.match(g))D=s[t+1],a=e.match(/^-(.\..+)/),null!==a&&Array.isArray(a)&&a.length>=2&&(u=a[1],void 0===D||D.match(/^-/)||$(u,p.bools)||$(u,p.counts)?B(u,N(u)):(B(u,D),t++));else if(e.match(/^-[^-]+/)&&!e.match(g)){o=e.slice(1,-1).split(""),i=!1;for(let n=0;n<o.length;n++){if(D=e.slice(n+2),o[n+1]&&"="===o[n+1]){l=e.slice(n+3),u=o[n],$(u,p.arrays)?t=A(t,u,s,l):!1!==$(u,p.nargs)?t=v(t,u,s,l):B(u,l),i=!0;break}if("-"!==D){if(/[A-Za-z]/.test(o[n])&&/^-?\d+(\.\d*)?(e-?\d+)?$/.test(D)&&!1===$(D,p.bools)){B(o[n],D),i=!0;break}if(o[n+1]&&o[n+1].match(/\W/)){B(o[n],D),i=!0;break}B(o[n],N(o[n]))}else B(o[n],D)}u=e.slice(-1)[0],i||"-"===u||($(u,p.arrays)?t=A(t,u,s):!1!==$(u,p.nargs)?t=v(t,u,s):(D=s[t+1],void 0===D||/^(-|--)[^-]/.test(D)&&!D.match(g)||$(u,p.bools)||$(u,p.counts)?/^(true|false)$/.test(D)?(B(u,D),t++):B(u,N(u)):(B(u,D),t++)))}else if(e.match(/^-[0-9]$/)&&e.match(g)&&$(e.slice(1),p.bools))u=e.slice(1),B(u,N(u));else{if("--"===e){C=s.slice(t+1);break}if(r["halt-at-non-option"]){C=s.slice(t);break}b(e)}}}function b(t){const e=j("_",t);"string"!=typeof e&&"number"!=typeof e||E._.push(e)}function v(t,e,n,s){let i,u=$(e,p.nargs);if(u="number"!=typeof u||isNaN(u)?1:u,0===u)return W(s)||(F=Error(d("Argument unexpected for: %s",e))),B(e,N(e)),t;let o=W(s)?0:1;if(r["nargs-eats-options"])n.length-(t+1)+o<u&&(F=Error(d("Not enough arguments following: %s",e))),o=u;else{for(i=t+1;i<n.length&&(!n[i].match(/^-[^0-9]/)||n[i].match(g)||I(n[i]));i++)o++;o<u&&(F=Error(d("Not enough arguments following: %s",e)))}let a=Math.min(o,u);for(!W(s)&&a>0&&(B(e,s),a--),i=t+1;i<a+t+1;i++)B(e,n[i]);return t+a}function A(t,e,n,s){let u=[],a=s||n[t+1];const D=$(e,p.nargs);if($(e,p.bools)&&!/^(true|false)$/.test(a))u.push(!0);else if(W(a)||W(s)&&/^-/.test(a)&&!g.test(a)&&!I(a)){if(void 0!==o[e]){const t=o[e];u=Array.isArray(t)?t:[t]}}else{W(s)||u.push(O(e,s,!0));for(let s=t+1;s<n.length&&!(!r["greedy-arrays"]&&u.length>0||D&&"number"==typeof D&&u.length>=D)&&(a=n[s],!/^-/.test(a)||g.test(a)||I(a));s++)t=s,u.push(O(e,a,i))}return"number"==typeof D&&(D&&u.length<D||isNaN(D)&&0===u.length)&&(F=Error(d("Not enough arguments following: %s",e))),B(e,u),t}function B(t,e,n=i){if(/-/.test(t)&&r["camel-case-expansion"]){const e=t.split(".").map(function(t){return et(t)}).join(".");w(t,e)}const s=O(t,e,n),u=t.split(".");if(S(E,u,s),p.aliases[t]&&p.aliases[t].forEach(function(t){const e=t.split(".");S(E,e,s)}),u.length>1&&r["dot-notation"]&&(p.aliases[u[0]]||[]).forEach(function(e){let n=e.split(".");const i=[].concat(u);i.shift(),n=n.concat(i),(p.aliases[t]||[]).includes(n.join("."))||S(E,n,s)}),$(t,p.normalize)&&!$(t,p.arrays)){[t].concat(p.aliases[t]||[]).forEach(function(t){Object.defineProperty(y,t,{enumerable:!0,get:()=>e,set(t){e="string"==typeof t?ut.normalize(t):t}})})}}function w(t,e){p.aliases[t]&&p.aliases[t].length||(p.aliases[t]=[e],h[e]=!0),p.aliases[e]&&p.aliases[e].length||w(e,t)}function O(t,e,n){n&&(e=function(t){return"string"!=typeof t||"'"!==t[0]&&'"'!==t[0]||t[t.length-1]!==t[0]?t:t.substring(1,t.length-1)}(e)),($(t,p.bools)||$(t,p.counts))&&"string"==typeof e&&(e="true"===e);let s=Array.isArray(e)?e.map(function(e){return j(t,e)}):j(t,e);return $(t,p.counts)&&(W(s)||"boolean"==typeof s)&&(s=rt()),$(t,p.normalize)&&$(t,p.arrays)&&(s=Array.isArray(e)?e.map(t=>ut.normalize(t)):ut.normalize(e)),s}function j(t,e){if(!r["parse-positional-numbers"]&&"_"===t)return e;if(!$(t,p.strings)&&!$(t,p.bools)&&!Array.isArray(e)){(st(e)&&r["parse-numbers"]&&Number.isSafeInteger(Math.floor(parseFloat(`${e}`)))||!W(e)&&$(t,p.numbers))&&(e=Number(e))}return e}function x(t,e){Object.keys(t).forEach(function(n){const s=t[n],i=e?e+"."+n:n;"object"==typeof s&&null!==s&&!Array.isArray(s)&&r["dot-notation"]?x(s,i):(!M(E,i.split("."))||$(i,p.arrays)&&r["combine-arrays"])&&B(i,s)})}function k(t,e){if(void 0===D)return;const n="string"==typeof D?D:"",s=ut.env();Object.keys(s).forEach(function(i){if(""===n||0===i.lastIndexOf(n,0)){const u=i.split("__").map(function(t,e){return 0===e&&(t=t.substring(n.length)),et(t)});(e&&p.configs[u.join(".")]||!e)&&!M(t,u)&&B(u.join("."),s[i])}})}function _(t,e,n,s=!1){Object.keys(n).forEach(function(i){M(t,i.split("."))||(S(t,i.split("."),n[i]),s&&(f[i]=!0),(e[i]||[]).forEach(function(e){M(t,e.split("."))||S(t,e.split("."),n[i])}))})}function M(t,e){let n=t;r["dot-notation"]||(e=[e.join(".")]),e.slice(0,-1).forEach(function(t){n=n[t]||{}});const s=e[e.length-1];return"object"==typeof n&&s in n}function S(t,e,n){let s=t;r["dot-notation"]||(e=[e.join(".")]),e.slice(0,-1).forEach(function(t){t=ot(t),"object"==typeof s&&void 0===s[t]&&(s[t]={}),"object"!=typeof s[t]||Array.isArray(s[t])?(Array.isArray(s[t])?s[t].push({}):s[t]=[s[t],{}],s=s[t][s[t].length-1]):s=s[t]});const i=ot(e[e.length-1]),u=$(e.join("."),p.arrays),o=Array.isArray(n);let a=r["duplicate-arguments-array"];!a&&$(i,p.nargs)&&(a=!0,(!W(s[i])&&1===p.nargs[i]||Array.isArray(s[i])&&s[i].length===p.nargs[i])&&(s[i]=void 0)),n===rt()?s[i]=rt(s[i]):Array.isArray(s[i])?a&&u&&o?s[i]=r["flatten-duplicate-arrays"]?s[i].concat(n):(Array.isArray(s[i][0])?s[i]:[s[i]]).concat([n]):a||Boolean(u)!==Boolean(o)?s[i]=s[i].concat([n]):s[i]=n:void 0===s[i]&&u?s[i]=o?n:[n]:!a||void 0===s[i]||$(i,p.counts)||$(i,p.bools)?s[i]=n:s[i]=[s[i],n]}function $(t,e){const n=[].concat(p.aliases[t]||[],t),s=Object.keys(e),i=n.find(t=>s.includes(t));return!!i&&e[i]}function P(t){const e=Object.keys(p);return[].concat(e.map(t=>p[t])).some(function(e){return Array.isArray(e)?e.includes(t):e[t]})}function I(t){return r["unknown-options-as-args"]&&function(t){if(t=t.replace(/^-{3,}/,"--"),t.match(g))return!1;if(function(t){if(t.match(g)||!t.match(/^-[^-]+/))return!1;let e,n=!0;const s=t.slice(1).split("");for(let i=0;i<s.length;i++){if(e=t.slice(i+2),!P(s[i])){n=!1;break}if(s[i+1]&&"="===s[i+1]||"-"===e||/[A-Za-z]/.test(s[i])&&/^-?\d+(\.\d*)?(e-?\d+)?$/.test(e)||s[i+1]&&s[i+1].match(/\W/))break}return n}(t))return!1;return!function(t,...e){return[].concat(...e).some(function(e){const n=t.match(e);return n&&P(n[1])})}(t,/^-+([^=]+?)=[\s\S]*$/,m,/^-+([^=]+?)$/,/^-+([^=]+?)-$/,/^-+([^=]+?\d+)$/,/^-+([^=]+?)\W+.*$/)}(t)}function N(t){return $(t,p.bools)||$(t,p.counts)||!(`${t}`in o)?(e=function(t){let e=it.BOOLEAN;return $(t,p.strings)?e=it.STRING:$(t,p.numbers)?e=it.NUMBER:$(t,p.bools)?e=it.BOOLEAN:$(t,p.arrays)&&(e=it.ARRAY),e}(t),{[it.BOOLEAN]:!0,[it.STRING]:"",[it.NUMBER]:void 0,[it.ARRAY]:[]}[e]):o[t];var e}function W(t){return void 0===t}return k(E,!0),k(E,!1),function(t){const e=Object.create(null);_(e,p.aliases,o),Object.keys(p.configs).forEach(function(n){const s=t[n]||e[n];if(s)try{let t=null;const e=ut.resolve(ut.cwd(),s),i=p.configs[n];if("function"==typeof i){try{t=i(e)}catch(e){t=e}if(t instanceof Error)return void(F=t)}else t=ut.require(e);x(t)}catch(e){"PermissionDenied"===e.name?F=e:t[n]&&(F=Error(d("Invalid JSON config file: %s",s)))}})}(E),void 0!==a&&a.forEach(function(t){x(t)}),_(E,p.aliases,o,!0),function(t){let e;const n=new Set;Object.keys(t).forEach(function(s){if(!n.has(s)&&(e=$(s,p.coercions),"function"==typeof e))try{const i=j(s,e(t[s]));[].concat(p.aliases[s]||[],s).forEach(e=>{n.add(e),t[e]=i})}catch(t){F=t}})}(E),r["set-placeholder-key"]&&function(t){p.keys.forEach(e=>{~e.indexOf(".")||void 0===t[e]&&(t[e]=void 0)})}(E),Object.keys(p.counts).forEach(function(t){M(E,t.split("."))||B(t,0)}),l&&C.length&&(E[c]=[]),C.forEach(function(t){E[c].push(t)}),r["camel-case-expansion"]&&r["strip-dashed"]&&Object.keys(E).filter(t=>"--"!==t&&t.includes("-")).forEach(t=>{delete E[t]}),r["strip-aliased"]&&[].concat(...Object.keys(u).map(t=>u[t])).forEach(t=>{r["camel-case-expansion"]&&t.includes("-")&&delete E[t.split(".").map(t=>et(t)).join(".")],delete E[t]}),{aliases:Object.assign({},p.aliases),argv:Object.assign(y,E),configuration:r,defaulted:Object.assign({},f),error:F,newAliases:Object.assign({},h)}}}({cwd:process.cwd,env:()=>ft,format:g,normalize:a,resolve:r,require:t=>{if(void 0!==dt)return dt(t);if(t.match(/\.json$/))return JSON.parse(s(t,"utf8"));throw Error("only .json config files are supported in ESM")}}),gt=function(t,e){return pt.parse(t.slice(),e).argv};function mt(){return process.versions.electron&&!process.defaultApp?0:1}gt.detailed=function(t,e){return pt.parse(t.slice(),e)},gt.camelCase=et,gt.decamelize=nt,gt.looksLikeNumber=st;var Ft={fs:{readFileSync:s,writeFile:i},format:g,resolve:r,exists:t=>{try{return e(t).isFile()}catch(t){return!1}}};let Ct;class Et{constructor(t){t=t||{},this.directory=t.directory||"./locales",this.updateFiles="boolean"!=typeof t.updateFiles||t.updateFiles,this.locale=t.locale||"en",this.fallbackToLanguage="boolean"!=typeof t.fallbackToLanguage||t.fallbackToLanguage,this.cache=Object.create(null),this.writeQueue=[]}__(...t){if("string"!=typeof arguments[0])return this._taggedLiteral(arguments[0],...arguments);const e=t.shift();let n=function(){};return"function"==typeof t[t.length-1]&&(n=t.pop()),n=n||function(){},this.cache[this.locale]||this._readLocaleFile(),!this.cache[this.locale][e]&&this.updateFiles?(this.cache[this.locale][e]=e,this._enqueueWrite({directory:this.directory,locale:this.locale,cb:n})):n(),Ct.format.apply(Ct.format,[this.cache[this.locale][e]||e].concat(t))}__n(){const t=Array.prototype.slice.call(arguments),e=t.shift(),n=t.shift(),s=t.shift();let i=function(){};"function"==typeof t[t.length-1]&&(i=t.pop()),this.cache[this.locale]||this._readLocaleFile();let u=1===s?e:n;if(this.cache[this.locale][e]){u=this.cache[this.locale][e][1===s?"one":"other"]}!this.cache[this.locale][e]&&this.updateFiles?(this.cache[this.locale][e]={one:e,other:n},this._enqueueWrite({directory:this.directory,locale:this.locale,cb:i})):i();const r=[u];return~u.indexOf("%d")&&r.push(s),Ct.format.apply(Ct.format,r.concat(t))}setLocale(t){this.locale=t}getLocale(){return this.locale}updateLocale(t){this.cache[this.locale]||this._readLocaleFile();for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&(this.cache[this.locale][e]=t[e])}_taggedLiteral(t,...e){let n="";return t.forEach(function(t,s){const i=e[s+1];n+=t,void 0!==i&&(n+="%s")}),this.__.apply(this,[n].concat([].slice.call(e,1)))}_enqueueWrite(t){this.writeQueue.push(t),1===this.writeQueue.length&&this._processWriteQueue()}_processWriteQueue(){const t=this,e=this.writeQueue[0],n=e.directory,s=e.locale,i=e.cb,u=this._resolveLocaleFile(n,s),r=JSON.stringify(this.cache[s],null,2);Ct.fs.writeFile(u,r,"utf-8",function(e){t.writeQueue.shift(),t.writeQueue.length>0&&t._processWriteQueue(),i(e)})}_readLocaleFile(){let t={};const e=this._resolveLocaleFile(this.directory,this.locale);try{Ct.fs.readFileSync&&(t=JSON.parse(Ct.fs.readFileSync(e,"utf-8")))}catch(n){if(n instanceof SyntaxError&&(n.message="syntax error in "+e),"ENOENT"!==n.code)throw n;t={}}this.cache[this.locale]=t}_resolveLocaleFile(t,e){let n=Ct.resolve(t,"./",e+".json");if(this.fallbackToLanguage&&!this._fileExistsSync(n)&&~e.lastIndexOf("_")){const s=Ct.resolve(t,"./",e.split("_")[0]+".json");this._fileExistsSync(s)&&(n=s)}return n}_fileExistsSync(t){return Ct.exists(t)}}var yt,bt;var vt=E(bt?yt:(bt=1,yt=function(t){if(void 0===t&&(t=2),t>=Error.stackTraceLimit)throw new TypeError("getCallerFile(position) requires position be less then Error.stackTraceLimit but position was: `"+t+"` and Error.stackTraceLimit was: `"+Error.stackTraceLimit+"`");var e=Error.prepareStackTrace;Error.prepareStackTrace=function(t,e){return e};var n=(new Error).stack;if(Error.prepareStackTrace=e,null!==n&&"object"==typeof n)return n[t]?n[t].getFileName():void 0}));const At=F(import.meta.url),Bt=At.substring(0,At.lastIndexOf("node_modules")),wt=C(import.meta.url);var Ot,jt={assert:{notStrictEqual:p,strictEqual:d},cliui:function(t){return function(t,e){return P=e,new S({width:(null==t?void 0:t.width)||("object"==typeof process&&process.stdout&&process.stdout.columns?process.stdout.columns:80),wrap:null==t?void 0:t.wrap})}(t,{stringWidth:R,stripAnsi:N,wrap:tt})},findUp:function(t,s){let i,u=r(".",t);for(e(u).isDirectory()||(u=o(u));;){if(i=s(u,n(u)),i)return r(u,i);if(u=o(i=u),i===u)break}},getEnv:t=>process.env[t],inspect:m,getProcessArgvBin:function(){return process.argv[mt()]},mainFilename:Bt||process.cwd(),Parser:gt,path:{basename:h,dirname:o,extname:c,relative:l,resolve:r,join:D},process:{argv:()=>process.argv,cwd:process.cwd,emitWarning:(t,e)=>process.emitWarning(t,e),execPath:()=>process.execPath,exit:t=>{process.exit(t)},nextTick:process.nextTick,stdColumns:void 0!==process.stdout.columns?process.stdout.columns:null},readFileSync:s,readdirSync:n,require:wt,getCallerFile:()=>{const t=vt(3);return t.match(/^file:\/\//)?F(t):t},stringWidth:R,y18n:(Ot={directory:r(At,"../../../locales"),updateFiles:!1},function(t,e){Ct=e;const n=new Et(t);return{__:n.__.bind(n),__n:n.__n.bind(n),setLocale:n.setLocale.bind(n),getLocale:n.getLocale.bind(n),updateLocale:n.updateLocale.bind(n),locale:n.locale}}(Ot,Ft))};function xt(t,e,n,s){n.assert.notStrictEqual(t,e,s)}function kt(t,e){e.assert.strictEqual(typeof t,"string")}function _t(t){return Object.keys(t)}function Mt(t){return!!t&&!!t.then&&"function"==typeof t.then}class St extends Error{constructor(t){super(t||"yargs error"),this.name="YError",Error.captureStackTrace&&Error.captureStackTrace(this,St)}}function $t(t){const e=t.replace(/\s{2,}/g," ").split(/\s+(?![^[]*]|[^<]*>)/),n=/\.*[\][<>]/g,s=e.shift();if(!s)throw new Error(`No command found in: ${t}`);const i={cmd:s.replace(n,""),demanded:[],optional:[]};return e.forEach((t,s)=>{let u=!1;t=t.replace(/\s/g,""),/\.+[\]>]/.test(t)&&s===e.length-1&&(u=!0),/^\[/.test(t)?i.optional.push({cmd:t.replace(n,"").split("|"),variadic:u}):i.demanded.push({cmd:t.replace(n,"").split("|"),variadic:u})}),i}const Pt=["first","second","third","fourth","fifth","sixth"];function It(t,e,n){try{let s=0;const[i,u,r]="object"==typeof t?[{demanded:[],optional:[]},t,e]:[$t(`cmd ${t}`),e,n],o=[].slice.call(u);for(;o.length&&void 0===o[o.length-1];)o.pop();const a=r||o.length;if(a<i.demanded.length)throw new St(`Not enough arguments provided. Expected ${i.demanded.length} but received ${o.length}.`);const D=i.demanded.length+i.optional.length;if(a>D)throw new St(`Too many arguments provided. Expected max ${D} but received ${a}.`);i.demanded.forEach(t=>{const e=Nt(o.shift());0===t.cmd.filter(t=>t===e||"*"===t).length&&Wt(e,t.cmd,s),s+=1}),i.optional.forEach(t=>{if(0===o.length)return;const e=Nt(o.shift());0===t.cmd.filter(t=>t===e||"*"===t).length&&Wt(e,t.cmd,s),s+=1})}catch(t){console.warn(t.stack)}}function Nt(t){return Array.isArray(t)?"array":null===t?"null":typeof t}function Wt(t,e,n){throw new St(`Invalid ${Pt[n]||"manyith"} argument. Expected ${e.join(" or ")} but received ${t}.`)}class Lt{constructor(t){this.globalMiddleware=[],this.frozens=[],this.yargs=t}addMiddleware(t,e,n=!0,s=!1){if(It("<array|function> [boolean] [boolean] [boolean]",[t,e,n],arguments.length),Array.isArray(t)){for(let s=0;s<t.length;s++){if("function"!=typeof t[s])throw Error("middleware must be a function");const i=t[s];i.applyBeforeValidation=e,i.global=n}Array.prototype.push.apply(this.globalMiddleware,t)}else if("function"==typeof t){const i=t;i.applyBeforeValidation=e,i.global=n,i.mutates=s,this.globalMiddleware.push(t)}return this.yargs}addCoerceMiddleware(t,e){const n=this.yargs.getAliases();return this.globalMiddleware=this.globalMiddleware.filter(t=>{const s=[...n[e]||[],e];return!t.option||!s.includes(t.option)}),t.option=e,this.addMiddleware(t,!0,!0,!0)}getMiddleware(){return this.globalMiddleware}freeze(){this.frozens.push([...this.globalMiddleware])}unfreeze(){const t=this.frozens.pop();void 0!==t&&(this.globalMiddleware=t)}reset(){this.globalMiddleware=this.globalMiddleware.filter(t=>t.global)}}function zt(t,e,n,s){return n.reduce((t,n)=>{if(n.applyBeforeValidation!==s)return t;if(n.mutates){if(n.applied)return t;n.applied=!0}if(Mt(t))return t.then(t=>Promise.all([t,n(t,e)])).then(([t,e])=>Object.assign(t,e));{const s=n(t,e);return Mt(s)?s.then(e=>Object.assign(t,e)):Object.assign(t,s)}},t)}function Ht(t,e,n=t=>{throw t}){try{const n="function"==typeof t?t():t;return Mt(n)?n.then(t=>e(t)):e(n)}catch(t){return n(t)}}const Rt=/(^\*)|(^\$0)/;class Tt{constructor(t,e,n,s){this.requireCache=new Set,this.handlers={},this.aliasMap={},this.frozens=[],this.shim=s,this.usage=t,this.globalMiddleware=n,this.validation=e}addDirectory(t,e,n,s){s=s||{},this.requireCache.add(n);const i=this.shim.path.resolve(this.shim.path.dirname(n),t),u=this.shim.readdirSync(i,{recursive:!!s.recurse});Array.isArray(s.extensions)||(s.extensions=["js"]);const r="function"==typeof s.visit?s.visit:t=>t;for(const t of u){const n=t.toString();if(s.exclude){let t=!1;if(t="function"==typeof s.exclude?s.exclude(n):s.exclude.test(n),t)continue}if(s.include){let t=!1;if(t="function"==typeof s.include?s.include(n):s.include.test(n),!t)continue}let u=!1;for(const t of s.extensions)n.endsWith(t)&&(u=!0);if(u){const t=this.shim.path.join(i,n),s=e(t),u=Object.create(null,Object.getOwnPropertyDescriptors({...s}));if(r(u,t,n)){if(this.requireCache.has(t))continue;this.requireCache.add(t),u.command||(u.command=this.shim.path.basename(t,this.shim.path.extname(t))),this.addHandler(u)}}}}addHandler(t,e,n,s,i,u){let r=[];const o=function(t){return t?t.map(t=>(t.applyBeforeValidation=!1,t)):[]}(i);if(s=s||(()=>{}),Array.isArray(t))if(function(t){return t.every(t=>"string"==typeof t)}(t))[t,...r]=t;else for(const e of t)this.addHandler(e);else{if(function(t){return"object"==typeof t&&!Array.isArray(t)}(t)){let e=Array.isArray(t.command)||"string"==typeof t.command?t.command:null;if(null===e)throw new Error(`No command name given for module: ${this.shim.inspect(t)}`);return t.aliases&&(e=[].concat(e).concat(t.aliases)),void this.addHandler(e,this.extractDesc(t),t.builder,t.handler,t.middlewares,t.deprecated)}if(Ut(n))return void this.addHandler([t].concat(r),e,n.builder,n.handler,n.middlewares,n.deprecated)}if("string"==typeof t){const i=$t(t);r=r.map(t=>$t(t).cmd);let a=!1;const D=[i.cmd].concat(r).filter(t=>!Rt.test(t)||(a=!0,!1));0===D.length&&a&&D.push("$0"),a&&(i.cmd=D[0],r=D.slice(1),t=t.replace(Rt,i.cmd)),r.forEach(t=>{this.aliasMap[t]=i.cmd}),!1!==e&&this.usage.command(t,e,a,r,u),this.handlers[i.cmd]={original:t,description:e,handler:s,builder:n||{},middlewares:o,deprecated:u,demanded:i.demanded,optional:i.optional},a&&(this.defaultCommand=this.handlers[i.cmd])}}getCommandHandlers(){return this.handlers}getCommands(){return Object.keys(this.handlers).concat(Object.keys(this.aliasMap))}hasDefaultCommand(){return!!this.defaultCommand}runCommand(t,e,n,s,i,u){const r=this.handlers[t]||this.handlers[this.aliasMap[t]]||this.defaultCommand,o=e.getInternalMethods().getContext(),a=o.commands.slice(),D=!t;t&&(o.commands.push(t),o.fullCommands.push(r.original));const l=this.applyBuilderUpdateUsageAndParse(D,r,e,n.aliases,a,s,i,u);return Mt(l)?l.then(t=>this.applyMiddlewareAndGetResult(D,r,t.innerArgv,o,i,t.aliases,e)):this.applyMiddlewareAndGetResult(D,r,l.innerArgv,o,i,l.aliases,e)}applyBuilderUpdateUsageAndParse(t,e,n,s,i,u,r,o){const a=e.builder;let D=n;if(Gt(a)){n.getInternalMethods().getUsageInstance().freeze();const l=a(n.getInternalMethods().reset(s),o);if(Mt(l))return l.then(s=>{var o;return D=(o=s)&&"function"==typeof o.getInternalMethods?s:n,this.parseAndUpdateUsage(t,e,D,i,u,r)})}else(function(t){return"object"==typeof t})(a)&&(n.getInternalMethods().getUsageInstance().freeze(),D=n.getInternalMethods().reset(s),Object.keys(e.builder).forEach(t=>{D.option(t,a[t])}));return this.parseAndUpdateUsage(t,e,D,i,u,r)}parseAndUpdateUsage(t,e,n,s,i,u){t&&n.getInternalMethods().getUsageInstance().unfreeze(!0),this.shouldUpdateUsage(n)&&n.getInternalMethods().getUsageInstance().usage(this.usageFromParentCommandsCommandHandler(s,e),e.description);const r=n.getInternalMethods().runYargsParserAndExecuteCommands(null,void 0,!0,i,u);return Mt(r)?r.then(t=>({aliases:n.parsed.aliases,innerArgv:t})):{aliases:n.parsed.aliases,innerArgv:r}}shouldUpdateUsage(t){return!t.getInternalMethods().getUsageInstance().getUsageDisabled()&&0===t.getInternalMethods().getUsageInstance().getUsage().length}usageFromParentCommandsCommandHandler(t,e){const n=Rt.test(e.original)?e.original.replace(Rt,"").trim():e.original,s=t.filter(t=>!Rt.test(t));return s.push(n),`$0 ${s.join(" ")}`}handleValidationAndGetResult(t,e,n,s,i,u,r,o){if(!u.getInternalMethods().getHasOutput()){const e=u.getInternalMethods().runValidation(i,o,u.parsed.error,t);n=Ht(n,t=>(e(t),t))}if(e.handler&&!u.getInternalMethods().getHasOutput()){u.getInternalMethods().setHasOutput();const s=!!u.getOptions().configuration["populate--"];u.getInternalMethods().postProcess(n,s,!1,!1),n=Ht(n=zt(n,u,r,!1),t=>{const n=e.handler(t);return Mt(n)?n.then(()=>t):t}),t||u.getInternalMethods().getUsageInstance().cacheHelpMessage(),Mt(n)&&!u.getInternalMethods().hasParseCallback()&&n.catch(t=>{try{u.getInternalMethods().getUsageInstance().fail(null,t)}catch(t){}})}return t||(s.commands.pop(),s.fullCommands.pop()),n}applyMiddlewareAndGetResult(t,e,n,s,i,u,r){let o={};if(i)return n;r.getInternalMethods().getHasOutput()||(o=this.populatePositionals(e,n,s,r));const a=this.globalMiddleware.getMiddleware().slice(0).concat(e.middlewares),D=zt(n,r,a,!0);return Mt(D)?D.then(n=>this.handleValidationAndGetResult(t,e,n,s,u,r,a,o)):this.handleValidationAndGetResult(t,e,D,s,u,r,a,o)}populatePositionals(t,e,n,s){e._=e._.slice(n.commands.length);const i=t.demanded.slice(0),u=t.optional.slice(0),r={};for(this.validation.positionalCount(i.length,e._.length);i.length;){const t=i.shift();this.populatePositional(t,e,r)}for(;u.length;){const t=u.shift();this.populatePositional(t,e,r)}return e._=n.commands.concat(e._.map(t=>""+t)),this.postProcessPositionals(e,r,this.cmdToParseOptions(t.original),s),r}populatePositional(t,e,n){const s=t.cmd[0];t.variadic?n[s]=e._.splice(0).map(String):e._.length&&(n[s]=[String(e._.shift())])}cmdToParseOptions(t){const e={array:[],default:{},alias:{},demand:{}},n=$t(t);return n.demanded.forEach(t=>{const[n,...s]=t.cmd;t.variadic&&(e.array.push(n),e.default[n]=[]),e.alias[n]=s,e.demand[n]=!0}),n.optional.forEach(t=>{const[n,...s]=t.cmd;t.variadic&&(e.array.push(n),e.default[n]=[]),e.alias[n]=s}),e}postProcessPositionals(t,e,n,s){const i=Object.assign({},s.getOptions());i.default=Object.assign(n.default,i.default);for(const t of Object.keys(n.alias))i.alias[t]=(i.alias[t]||[]).concat(n.alias[t]);i.array=i.array.concat(n.array),i.config={};const u=[];if(Object.keys(e).forEach(t=>{e[t].map(e=>{i.configuration["unknown-options-as-args"]&&(i.key[t]=!0),u.push(`--${t}`),u.push(e)})}),!u.length)return;const r=Object.assign({},i.configuration,{"populate--":!1}),o=this.shim.Parser.detailed(u,Object.assign({},i,{configuration:r}));if(o.error)s.getInternalMethods().getUsageInstance().fail(o.error.message,o.error);else{const n=Object.keys(e);Object.keys(e).forEach(t=>{n.push(...o.aliases[t])}),Object.keys(o.argv).forEach(i=>{n.includes(i)&&(e[i]||(e[i]=o.argv[i]),!this.isInConfigs(s,i)&&!this.isDefaulted(s,i)&&Object.prototype.hasOwnProperty.call(t,i)&&Object.prototype.hasOwnProperty.call(o.argv,i)&&(Array.isArray(t[i])||Array.isArray(o.argv[i]))?t[i]=[].concat(t[i],o.argv[i]):t[i]=o.argv[i])})}}isDefaulted(t,e){const{default:n}=t.getOptions();return Object.prototype.hasOwnProperty.call(n,e)||Object.prototype.hasOwnProperty.call(n,this.shim.Parser.camelCase(e))}isInConfigs(t,e){const{configObjects:n}=t.getOptions();return n.some(t=>Object.prototype.hasOwnProperty.call(t,e))||n.some(t=>Object.prototype.hasOwnProperty.call(t,this.shim.Parser.camelCase(e)))}runDefaultBuilderOn(t){if(!this.defaultCommand)return;if(this.shouldUpdateUsage(t)){const e=Rt.test(this.defaultCommand.original)?this.defaultCommand.original:this.defaultCommand.original.replace(/^[^[\]<>]*/,"$0 ");t.getInternalMethods().getUsageInstance().usage(e,this.defaultCommand.description)}const e=this.defaultCommand.builder;if(Gt(e))return e(t,!0);Ut(e)||Object.keys(e).forEach(n=>{t.option(n,e[n])})}extractDesc({describe:t,description:e,desc:n}){for(const s of[t,e,n]){if("string"==typeof s||!1===s)return s;xt(s,!0,this.shim)}return!1}freeze(){this.frozens.push({handlers:this.handlers,aliasMap:this.aliasMap,defaultCommand:this.defaultCommand})}unfreeze(){const t=this.frozens.pop();xt(t,void 0,this.shim),({handlers:this.handlers,aliasMap:this.aliasMap,defaultCommand:this.defaultCommand}=t)}reset(){return this.handlers={},this.aliasMap={},this.defaultCommand=void 0,this.requireCache=new Set,this}}function Ut(t){return"object"==typeof t&&!!t.builder&&"function"==typeof t.handler}function Gt(t){return"function"==typeof t}function qt(t={},e=()=>!0){const n={};return _t(t).forEach(s=>{e(s,t[s])&&(n[s]=t[s])}),n}function Vt(t){"undefined"!=typeof process&&[process.stdout,process.stderr].forEach(e=>{const n=e;n._handle&&n.isTTY&&"function"==typeof n._handle.setBlocking&&n._handle.setBlocking(t)})}function Yt(t){return"boolean"==typeof t}function Kt(t,e){const n=e.y18n.__,s={},i=[];s.failFn=function(t){i.push(t)};let u=null,r=null,o=!0;s.showHelpOnFail=function(e=!0,n){const[i,a]="string"==typeof e?[!0,e]:[e,n];return t.getInternalMethods().isGlobalContext()&&(r=a),u=a,o=i,s};let a=!1;s.fail=function(e,n){const D=t.getInternalMethods().getLoggerInstance();if(!i.length){if(t.getExitProcess()&&Vt(!0),!a){a=!0,o&&(t.showHelp("error"),D.error()),(e||n)&&D.error(e||n);const s=u||r;s&&((e||n)&&D.error(""),D.error(s))}if(n=n||new St(e),t.getExitProcess())return t.exit(1);if(t.getInternalMethods().hasParseCallback())return t.exit(1,n);throw n}for(let t=i.length-1;t>=0;--t){const u=i[t];if(Yt(u)){if(n)throw n;if(e)throw Error(e)}else u(e,n,s)}};let D=[],l=!1;s.usage=(t,e)=>null===t?(l=!0,D=[],s):(l=!1,D.push([t,e||""]),s),s.getUsage=()=>D,s.getUsageDisabled=()=>l,s.getPositionalGroupName=()=>n("Positionals:");let c=[];s.example=(t,e)=>{c.push([t,e||""])};let h=[];s.command=function(t,e,n,s,i=!1){n&&(h=h.map(t=>(t[2]=!1,t))),h.push([t,e||"",n,s,i])},s.getCommands=()=>h;let f={};s.describe=function(t,e){Array.isArray(t)?t.forEach(t=>{s.describe(t,e)}):"object"==typeof t?Object.keys(t).forEach(e=>{s.describe(e,t[e])}):f[t]=e},s.getDescriptions=()=>f;let d=[];s.epilog=t=>{d.push(t)};let p,g=!1;s.wrap=t=>{g=!0,p=t},s.getWrap=()=>e.getEnv("YARGS_DISABLE_WRAP")?null:(g||(p=function(){const t=80;return e.process.stdColumns?Math.min(t,e.process.stdColumns):t}(),g=!0),p);const m="__yargsString__:";function F(t,n,s){let i=0;return Array.isArray(t)||(t=Object.values(t).map(t=>[t])),t.forEach(t=>{i=Math.max(e.stringWidth(s?`${s} ${Qt(t[0])}`:Qt(t[0]))+Zt(t[0]),i)}),n&&(i=Math.min(i,parseInt((.5*n).toString(),10))),i}let C;function E(e){return t.getOptions().hiddenOptions.indexOf(e)<0||t.parsed.argv[t.getOptions().showHiddenOpt]}function y(t,e){let s=`[${n("default:")} `;if(void 0===t&&!e)return null;if(e)s+=e;else switch(typeof t){case"string":s+=`"${t}"`;break;case"object":s+=JSON.stringify(t);break;default:s+=t}return`${s}]`}s.deferY18nLookup=t=>m+t,s.help=function(){if(C)return C;!function(){const e=t.getDemandedOptions(),n=t.getOptions();(Object.keys(n.alias)||[]).forEach(i=>{n.alias[i].forEach(u=>{f[u]&&s.describe(i,f[u]),u in e&&t.demandOption(i,e[u]),n.boolean.includes(u)&&t.boolean(i),n.count.includes(u)&&t.count(i),n.string.includes(u)&&t.string(i),n.normalize.includes(u)&&t.normalize(i),n.array.includes(u)&&t.array(i),n.number.includes(u)&&t.number(i)})})}();const i=t.customScriptName?t.$0:e.path.basename(t.$0),u=t.getDemandedOptions(),r=t.getDemandedCommands(),o=t.getDeprecatedOptions(),a=t.getGroups(),p=t.getOptions();let g=[];g=g.concat(Object.keys(f)),g=g.concat(Object.keys(u)),g=g.concat(Object.keys(r)),g=g.concat(Object.keys(p.default)),g=g.filter(E),g=Object.keys(g.reduce((t,e)=>("_"!==e&&(t[e]=!0),t),{}));const b=s.getWrap(),v=e.cliui({width:b,wrap:!!b});if(!l)if(D.length)D.forEach(t=>{v.div({text:`${t[0].replace(/\$0/g,i)}`}),t[1]&&v.div({text:`${t[1]}`,padding:[1,0,0,0]})}),v.div();else if(h.length){let t=null;t=r._?`${i} <${n("command")}>\n`:`${i} [${n("command")}]\n`,v.div(`${t}`)}if(h.length>1||1===h.length&&!h[0][2]){v.div(n("Commands:"));const e=t.getInternalMethods().getContext(),s=e.commands.length?`${e.commands.join(" ")} `:"";!0===t.getInternalMethods().getParserConfiguration()["sort-commands"]&&(h=h.sort((t,e)=>t[0].localeCompare(e[0])));const u=i?`${i} `:"";h.forEach(t=>{const e=`${u}${s}${t[0].replace(/^\$0 ?/,"")}`;v.span({text:e,padding:[0,2,0,2],width:F(h,b,`${i}${s}`)+4},{text:t[1]});const r=[];t[2]&&r.push(`[${n("default")}]`),t[3]&&t[3].length&&r.push(`[${n("aliases:")} ${t[3].join(", ")}]`),t[4]&&("string"==typeof t[4]?r.push(`[${n("deprecated: %s",t[4])}]`):r.push(`[${n("deprecated")}]`)),r.length?v.div({text:r.join(" "),padding:[0,0,0,2],align:"right"}):v.div()}),v.div()}const A=(Object.keys(p.alias)||[]).concat(Object.keys(t.parsed.newAliases)||[]);g=g.filter(e=>!t.parsed.newAliases[e]&&A.every(t=>-1===(p.alias[t]||[]).indexOf(e)));const B=n("Options:");a[B]||(a[B]=[]),function(t,e,n,s){let i=[],u=null;Object.keys(n).forEach(t=>{i=i.concat(n[t])}),t.forEach(t=>{u=[t].concat(e[t]),u.some(t=>-1!==i.indexOf(t))||n[s].push(t)})}(g,p.alias,a,B);const w=t=>/^--/.test(Qt(t)),O=Object.keys(a).filter(t=>a[t].length>0).map(t=>({groupName:t,normalizedKeys:a[t].filter(E).map(t=>{if(A.includes(t))return t;for(let e,n=0;void 0!==(e=A[n]);n++)if((p.alias[e]||[]).includes(t))return e;return t})})).filter(({normalizedKeys:t})=>t.length>0).map(({groupName:t,normalizedKeys:e})=>{const n=e.reduce((e,n)=>(e[n]=[n].concat(p.alias[n]||[]).map(e=>t===s.getPositionalGroupName()?e:(/^[0-9]$/.test(e)?p.boolean.includes(n)?"-":"--":e.length>1?"--":"-")+e).sort((t,e)=>w(t)===w(e)?0:w(t)?1:-1).join(", "),e),{});return{groupName:t,normalizedKeys:e,switches:n}});if(O.filter(({groupName:t})=>t!==s.getPositionalGroupName()).some(({normalizedKeys:t,switches:e})=>!t.every(t=>w(e[t])))&&O.filter(({groupName:t})=>t!==s.getPositionalGroupName()).forEach(({normalizedKeys:t,switches:e})=>{t.forEach(t=>{var n,s;w(e[t])&&(e[t]=(n=e[t],s=4,Jt(n)?{text:n.text,indentation:n.indentation+s}:{text:n,indentation:s}))})}),O.forEach(({groupName:e,normalizedKeys:i,switches:r})=>{v.div(e),i.forEach(e=>{const i=r[e];let a=f[e]||"",D=null;a.includes(m)&&(a=n(a.substring(16))),p.boolean.includes(e)&&(D=`[${n("boolean")}]`),p.count.includes(e)&&(D=`[${n("count")}]`),p.string.includes(e)&&(D=`[${n("string")}]`),p.normalize.includes(e)&&(D=`[${n("string")}]`),p.array.includes(e)&&(D=`[${n("array")}]`),p.number.includes(e)&&(D=`[${n("number")}]`);const l=[e in o?(c=o[e],"string"==typeof c?`[${n("deprecated: %s",c)}]`:`[${n("deprecated")}]`):null,D,e in u?`[${n("required")}]`:null,p.choices&&p.choices[e]?`[${n("choices:")} ${s.stringifiedValues(p.choices[e])}]`:null,y(p.default[e],p.defaultDescription[e])].filter(Boolean).join(" ");var c;v.span({text:Qt(i),padding:[0,2,0,2+Zt(i)],width:F(r,b)+4},a);const h=!0===t.getInternalMethods().getUsageConfiguration()["hide-types"];l&&!h?v.div({text:l,padding:[0,0,0,2],align:"right"}):v.div()}),v.div()}),c.length&&(v.div(n("Examples:")),c.forEach(t=>{t[0]=t[0].replace(/\$0/g,i)}),c.forEach(t=>{""===t[1]?v.div({text:t[0],padding:[0,2,0,2]}):v.div({text:t[0],padding:[0,2,0,2],width:F(c,b)+4},{text:t[1]})}),v.div()),d.length>0){const t=d.map(t=>t.replace(/\$0/g,i)).join("\n");v.div(`${t}\n`)}return v.toString().replace(/\s*$/,"")},s.cacheHelpMessage=function(){C=this.help()},s.clearCachedHelpMessage=function(){C=void 0},s.hasCachedHelpMessage=function(){return!!C},s.showHelp=e=>{const n=t.getInternalMethods().getLoggerInstance();e||(e="error");("function"==typeof e?e:n[e])(s.help())},s.functionDescription=t=>["(",t.name?e.Parser.decamelize(t.name,"-"):n("generated-value"),")"].join(""),s.stringifiedValues=function(t,e){let n="";const s=e||", ",i=[].concat(t);return t&&i.length?(i.forEach(t=>{n.length&&(n+=s),n+=JSON.stringify(t)}),n):n};let b=null;s.version=t=>{b=t},s.showVersion=e=>{const n=t.getInternalMethods().getLoggerInstance();e||(e="error");("function"==typeof e?e:n[e])(b)},s.reset=function(t){return u=null,a=!1,D=[],l=!1,d=[],c=[],h=[],f=qt(f,e=>!t[e]),s};const v=[];return s.freeze=function(){v.push({failMessage:u,failureOutput:a,usages:D,usageDisabled:l,epilogs:d,examples:c,commands:h,descriptions:f})},s.unfreeze=function(t=!1){const e=v.pop();e&&(t?(f={...e.descriptions,...f},h=[...e.commands,...h],D=[...e.usages,...D],c=[...e.examples,...c],d=[...e.epilogs,...d]):({failMessage:u,failureOutput:a,usages:D,usageDisabled:l,epilogs:d,examples:c,commands:h,descriptions:f}=e))},s}function Jt(t){return"object"==typeof t}function Zt(t){return Jt(t)?t.indentation:0}function Qt(t){return Jt(t)?t.text:t}class Xt{constructor(t,e,n,s){var i,u,r;this.yargs=t,this.usage=e,this.command=n,this.shim=s,this.completionKey="get-yargs-completions",this.aliases=null,this.customCompletionFunction=null,this.indexAfterLastReset=0,this.zshShell=null!==(r=(null===(i=this.shim.getEnv("SHELL"))||void 0===i?void 0:i.includes("zsh"))||(null===(u=this.shim.getEnv("ZSH_NAME"))||void 0===u?void 0:u.includes("zsh")))&&void 0!==r&&r}defaultCompletion(t,e,n,s){const i=this.command.getCommandHandlers();for(let e=0,n=t.length;e<n;++e)if(i[t[e]]&&i[t[e]].builder){const n=i[t[e]].builder;if(Gt(n)){this.indexAfterLastReset=e+1;const t=this.yargs.getInternalMethods().reset();return n(t,!0),t.argv}}const u=[];this.commandCompletions(u,t,n),this.optionCompletions(u,t,e,n),this.choicesFromOptionsCompletions(u,t,e,n),this.choicesFromPositionalsCompletions(u,t,e,n),s(null,u)}commandCompletions(t,e,n){const s=this.yargs.getInternalMethods().getContext().commands;n.match(/^-/)||s[s.length-1]===n||this.previousArgHasChoices(e)||this.usage.getCommands().forEach(n=>{const s=$t(n[0]).cmd;if(-1===e.indexOf(s))if(this.zshShell){const e=n[1]||"";t.push(s.replace(/:/g,"\\:")+":"+e)}else t.push(s)})}optionCompletions(t,e,n,s){if((s.match(/^-/)||""===s&&0===t.length)&&!this.previousArgHasChoices(e)){const n=this.yargs.getOptions(),i=this.yargs.getGroups()[this.usage.getPositionalGroupName()]||[];Object.keys(n.key).forEach(u=>{const r=!!n.configuration["boolean-negation"]&&n.boolean.includes(u);i.includes(u)||n.hiddenOptions.includes(u)||this.argsContainKey(e,u,r)||this.completeOptionKey(u,t,s,r&&!!n.default[u])})}}choicesFromOptionsCompletions(t,e,n,s){if(this.previousArgHasChoices(e)){const n=this.getPreviousArgChoices(e);n&&n.length>0&&t.push(...n.map(t=>t.replace(/:/g,"\\:")))}}choicesFromPositionalsCompletions(t,e,n,s){if(""===s&&t.length>0&&this.previousArgHasChoices(e))return;const i=this.yargs.getGroups()[this.usage.getPositionalGroupName()]||[],u=Math.max(this.indexAfterLastReset,this.yargs.getInternalMethods().getContext().commands.length+1),r=i[n._.length-u-1];if(!r)return;const o=this.yargs.getOptions().choices[r]||[];for(const e of o)e.startsWith(s)&&t.push(e.replace(/:/g,"\\:"))}getPreviousArgChoices(t){if(t.length<1)return;let e=t[t.length-1],n="";if(!e.startsWith("-")&&t.length>1&&(n=e,e=t[t.length-2]),!e.startsWith("-"))return;const s=e.replace(/^-+/,""),i=this.yargs.getOptions(),u=[s,...this.yargs.getAliases()[s]||[]];let r;for(const t of u)if(Object.prototype.hasOwnProperty.call(i.key,t)&&Array.isArray(i.choices[t])){r=i.choices[t];break}return r?r.filter(t=>!n||t.startsWith(n)):void 0}previousArgHasChoices(t){const e=this.getPreviousArgChoices(t);return void 0!==e&&e.length>0}argsContainKey(t,e,n){const s=e=>-1!==t.indexOf((/^[^0-9]$/.test(e)?"-":"--")+e);if(s(e))return!0;if(n&&s(`no-${e}`))return!0;if(this.aliases)for(const t of this.aliases[e])if(s(t))return!0;return!1}completeOptionKey(t,e,n,s){var i,u,r,o;let a=t;if(this.zshShell){const e=this.usage.getDescriptions(),n=null===(u=null===(i=null==this?void 0:this.aliases)||void 0===i?void 0:i[t])||void 0===u?void 0:u.find(t=>{const n=e[t];return"string"==typeof n&&n.length>0}),s=n?e[n]:void 0,D=null!==(o=null!==(r=e[t])&&void 0!==r?r:s)&&void 0!==o?o:"";a=`${t.replace(/:/g,"\\:")}:${D.replace("__yargsString__:","").replace(/(\r\n|\n|\r)/gm," ")}`}const D=!/^--/.test(n)&&(t=>/^[^0-9]$/.test(t))(t)?"-":"--";e.push(D+a),s&&e.push(D+"no-"+a)}customCompletion(t,e,n,s){if(xt(this.customCompletionFunction,null,this.shim),this.customCompletionFunction.length<3){const t=this.customCompletionFunction(n,e);return Mt(t)?t.then(t=>{this.shim.process.nextTick(()=>{s(null,t)})}).catch(t=>{this.shim.process.nextTick(()=>{s(t,void 0)})}):s(null,t)}return function(t){return t.length>3}(this.customCompletionFunction)?this.customCompletionFunction(n,e,(i=s)=>this.defaultCompletion(t,e,n,i),t=>{s(null,t)}):this.customCompletionFunction(n,e,t=>{s(null,t)})}getCompletion(t,e){const n=t.length?t[t.length-1]:"",s=this.yargs.parse(t,!0),i=this.customCompletionFunction?s=>this.customCompletion(t,s,n,e):s=>this.defaultCompletion(t,s,n,e);return Mt(s)?s.then(i):i(s)}generateCompletionScript(t,e){let n=this.zshShell?'#compdef {{app_name}}\n###-begin-{{app_name}}-completions-###\n#\n# yargs command completion script\n#\n# Installation: {{app_path}} {{completion_command}} >> ~/.zshrc\n# or {{app_path}} {{completion_command}} >> ~/.zprofile on OSX.\n#\n_{{app_name}}_yargs_completions()\n{\n local reply\n local si=$IFS\n IFS=$\'\n\' reply=($(COMP_CWORD="$((CURRENT-1))" COMP_LINE="$BUFFER" COMP_POINT="$CURSOR" {{app_path}} --get-yargs-completions "${words[@]}"))\n IFS=$si\n if [[ ${#reply} -gt 0 ]]; then\n _describe \'values\' reply\n else\n _default\n fi\n}\nif [[ "\'${zsh_eval_context[-1]}" == "loadautofunc" ]]; then\n _{{app_name}}_yargs_completions "$@"\nelse\n compdef _{{app_name}}_yargs_completions {{app_name}}\nfi\n###-end-{{app_name}}-completions-###\n':'###-begin-{{app_name}}-completions-###\n#\n# yargs command completion script\n#\n# Installation: {{app_path}} {{completion_command}} >> ~/.bashrc\n# or {{app_path}} {{completion_command}} >> ~/.bash_profile on OSX.\n#\n_{{app_name}}_yargs_completions()\n{\n local cur_word args type_list\n\n cur_word="${COMP_WORDS[COMP_CWORD]}"\n args=("${COMP_WORDS[@]}")\n\n # ask yargs to generate completions.\n # see https://stackoverflow.com/a/40944195/7080036 for the spaces-handling awk\n mapfile -t type_list < <({{app_path}} --get-yargs-completions "${args[@]}")\n mapfile -t COMPREPLY < <(compgen -W "$( printf \'%q \' "${type_list[@]}" )" -- "${cur_word}" |\n awk \'/ / { print "\\""$0"\\"" } /^[^ ]+$/ { print $0 }\')\n\n # if no match was found, fall back to filename completion\n if [ ${#COMPREPLY[@]} -eq 0 ]; then\n COMPREPLY=()\n fi\n\n return 0\n}\ncomplete -o bashdefault -o default -F _{{app_name}}_yargs_completions {{app_name}}\n###-end-{{app_name}}-completions-###\n';const s=this.shim.path.basename(t);return t.match(/\.js$/)&&(t=`./${t}`),n=n.replace(/{{app_name}}/g,s),n=n.replace(/{{completion_command}}/g,e),n.replace(/{{app_path}}/g,t)}registerFunction(t){this.customCompletionFunction=t}setParsed(t){this.aliases=t.aliases}}function te(t,e){if(0===t.length)return e.length;if(0===e.length)return t.length;const n=[];let s,i;for(s=0;s<=e.length;s++)n[s]=[s];for(i=0;i<=t.length;i++)n[0][i]=i;for(s=1;s<=e.length;s++)for(i=1;i<=t.length;i++)e.charAt(s-1)===t.charAt(i-1)?n[s][i]=n[s-1][i-1]:s>1&&i>1&&e.charAt(s-2)===t.charAt(i-1)&&e.charAt(s-1)===t.charAt(i-2)?n[s][i]=n[s-2][i-2]+1:n[s][i]=Math.min(n[s-1][i-1]+1,Math.min(n[s][i-1]+1,n[s-1][i]+1));return n[e.length][t.length]}const ee=["$0","--","_"];let ne,se=[];function ie(t,e,n,s){ne=s;let i={};if(Object.prototype.hasOwnProperty.call(t,"extends")){if("string"!=typeof t.extends)return i;const u=/\.json|\..*rc$/.test(t.extends);let r=null;if(u)r=function(t,e){return ne.path.resolve(t,e)}(e,t.extends);else try{r=import.meta.resolve(t.extends)}catch(e){return t}!function(t){if(se.indexOf(t)>-1)throw new St(`Circular extended configurations: '${t}'.`)}(r),se.push(r),i=u?JSON.parse(ne.readFileSync(r,"utf8")):s.require(t.extends),delete t.extends,i=ie(i,ne.path.dirname(r),n,ne)}return se=[],n?ue(i,t):Object.assign({},i,t)}function ue(t,e){const n={};function s(t){return t&&"object"==typeof t&&!Array.isArray(t)}Object.assign(n,t);for(const i of Object.keys(e))s(e[i])&&s(n[i])?n[i]=ue(t[i],e[i]):n[i]=e[i];return n}var re,oe,ae,De,le,ce,he,fe,de,pe,ge,me,Fe,Ce,Ee,ye,be,ve,Ae,Be,we,Oe,je,xe,ke,_e,Me,Se,$e,Pe,Ie,Ne,We,Le,ze,He=function(t,e,n,s,i){if("m"===s)throw new TypeError("Private method is not writable");if("a"===s&&!i)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===s?i.call(t,n):i?i.value=n:e.set(t,n),n},Re=function(t,e,n,s){if("a"===n&&!s)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?s:"a"===n?s.call(t):s?s.value:e.get(t)};const Te=Symbol("copyDoubleDash"),Ue=Symbol("copyDoubleDash"),Ge=Symbol("deleteFromParserHintObject"),qe=Symbol("emitWarning"),Ve=Symbol("freeze"),Ye=Symbol("getDollarZero"),Ke=Symbol("getParserConfiguration"),Je=Symbol("getUsageConfiguration"),Ze=Symbol("guessLocale"),Qe=Symbol("guessVersion"),Xe=Symbol("parsePositionalNumbers"),tn=Symbol("pkgUp"),en=Symbol("populateParserHintArray"),nn=Symbol("populateParserHintSingleValueDictionary"),sn=Symbol("populateParserHintArrayDictionary"),un=Symbol("populateParserHintDictionary"),rn=Symbol("sanitizeKey"),on=Symbol("setKey"),an=Symbol("unfreeze"),Dn=Symbol("validateAsync"),ln=Symbol("getCommandInstance"),cn=Symbol("getContext"),hn=Symbol("getHasOutput"),fn=Symbol("getLoggerInstance"),dn=Symbol("getParseContext"),pn=Symbol("getUsageInstance"),gn=Symbol("getValidationInstance"),mn=Symbol("hasParseCallback"),Fn=Symbol("isGlobalContext"),Cn=Symbol("postProcess"),En=Symbol("rebase"),yn=Symbol("reset"),bn=Symbol("runYargsParserAndExecuteCommands"),vn=Symbol("runValidation"),An=Symbol("setHasOutput"),Bn=Symbol("kTrackManuallySetKeys");class wn{constructor(t=[],e,n,s){this.customScriptName=!1,this.parsed=!1,re.set(this,void 0),oe.set(this,void 0),ae.set(this,{commands:[],fullCommands:[]}),De.set(this,null),le.set(this,null),ce.set(this,"show-hidden"),he.set(this,null),fe.set(this,!0),de.set(this,{}),pe.set(this,!0),ge.set(this,[]),me.set(this,void 0),Fe.set(this,{}),Ce.set(this,!1),Ee.set(this,null),ye.set(this,!0),be.set(this,void 0),ve.set(this,""),Ae.set(this,void 0),Be.set(this,void 0),we.set(this,{}),Oe.set(this,null),je.set(this,null),xe.set(this,{}),ke.set(this,{}),_e.set(this,void 0),Me.set(this,!1),Se.set(this,void 0),$e.set(this,!1),Pe.set(this,!1),Ie.set(this,!1),Ne.set(this,void 0),We.set(this,{}),Le.set(this,null),ze.set(this,void 0),He(this,Se,s,"f"),He(this,_e,t,"f"),He(this,oe,e,"f"),He(this,Be,n,"f"),He(this,me,new Lt(this),"f"),this.$0=this[Ye](),this[yn](),He(this,re,Re(this,re,"f"),"f"),He(this,Ne,Re(this,Ne,"f"),"f"),He(this,ze,Re(this,ze,"f"),"f"),He(this,Ae,Re(this,Ae,"f"),"f"),Re(this,Ae,"f").showHiddenOpt=Re(this,ce,"f"),He(this,be,this[Ue](),"f"),Re(this,Se,"f").y18n.setLocale("en_US")}addHelpOpt(t,e){return It("[string|boolean] [string]",[t,e],arguments.length),Re(this,Ee,"f")&&(this[Ge](Re(this,Ee,"f")),He(this,Ee,null,"f")),!1===t&&void 0===e||(He(this,Ee,"string"==typeof t?t:"help","f"),this.boolean(Re(this,Ee,"f")),this.describe(Re(this,Ee,"f"),e||Re(this,Ne,"f").deferY18nLookup("Show help"))),this}help(t,e){return this.addHelpOpt(t,e)}addShowHiddenOpt(t,e){if(It("[string|boolean] [string]",[t,e],arguments.length),!1===t&&void 0===e)return this;const n="string"==typeof t?t:Re(this,ce,"f");return this.boolean(n),this.describe(n,e||Re(this,Ne,"f").deferY18nLookup("Show hidden options")),Re(this,Ae,"f").showHiddenOpt=n,this}showHidden(t,e){return this.addShowHiddenOpt(t,e)}alias(t,e){return It("<object|string|array> [string|array]",[t,e],arguments.length),this[sn](this.alias.bind(this),"alias",t,e),this}array(t){return It("<array|string>",[t],arguments.length),this[en]("array",t),this[Bn](t),this}boolean(t){return It("<array|string>",[t],arguments.length),this[en]("boolean",t),this[Bn](t),this}check(t,e){return It("<function> [boolean]",[t,e],arguments.length),this.middleware((e,n)=>Ht(()=>t(e,n.getOptions()),n=>(n?("string"==typeof n||n instanceof Error)&&Re(this,Ne,"f").fail(n.toString(),n):Re(this,Ne,"f").fail(Re(this,Se,"f").y18n.__("Argument check failed: %s",t.toString())),e),t=>(Re(this,Ne,"f").fail(t.message?t.message:t.toString(),t),e)),!1,e),this}choices(t,e){return It("<object|string|array> [string|array]",[t,e],arguments.length),this[sn](this.choices.bind(this),"choices",t,e),this}coerce(t,e){if(It("<object|string|array> [function]",[t,e],arguments.length),Array.isArray(t)){if(!e)throw new St("coerce callback must be provided");for(const n of t)this.coerce(n,e);return this}if("object"==typeof t){for(const e of Object.keys(t))this.coerce(e,t[e]);return this}if(!e)throw new St("coerce callback must be provided");const n=t;return Re(this,Ae,"f").key[n]=!0,Re(this,me,"f").addCoerceMiddleware((t,s)=>{var i;const u=null!==(i=s.getAliases()[n])&&void 0!==i?i:[],r=[n,...u].filter(e=>Object.prototype.hasOwnProperty.call(t,e));return 0===r.length?t:Ht(()=>e(t[r[0]]),e=>(r.forEach(n=>{t[n]=e}),t),t=>{throw new St(t.message)})},n),this}conflicts(t,e){return It("<string|object> [string|array]",[t,e],arguments.length),Re(this,ze,"f").conflicts(t,e),this}config(t="config",e,n){return It("[object|string] [string|function] [function]",[t,e,n],arguments.length),"object"!=typeof t||Array.isArray(t)?("function"==typeof e&&(n=e,e=void 0),this.describe(t,e||Re(this,Ne,"f").deferY18nLookup("Path to JSON config file")),(Array.isArray(t)?t:[t]).forEach(t=>{Re(this,Ae,"f").config[t]=n||!0}),this):(t=ie(t,Re(this,oe,"f"),this[Ke]()["deep-merge-config"]||!1,Re(this,Se,"f")),Re(this,Ae,"f").configObjects=(Re(this,Ae,"f").configObjects||[]).concat(t),this)}completion(t,e,n){return It("[string] [string|boolean|function] [function]",[t,e,n],arguments.length),"function"==typeof e&&(n=e,e=void 0),He(this,le,t||Re(this,le,"f")||"completion","f"),e||!1===e||(e="generate completion script"),this.command(Re(this,le,"f"),e),n&&Re(this,De,"f").registerFunction(n),this}command(t,e,n,s,i,u){return It("<string|array|object> [string|boolean] [function|object] [function] [array] [boolean|string]",[t,e,n,s,i,u],arguments.length),Re(this,re,"f").addHandler(t,e,n,s,i,u),this}commands(t,e,n,s,i,u){return this.command(t,e,n,s,i,u)}commandDir(t,e){It("<string> [object]",[t,e],arguments.length);const n=Re(this,Be,"f")||Re(this,Se,"f").require;return Re(this,re,"f").addDirectory(t,n,Re(this,Se,"f").getCallerFile(),e),this}count(t){return It("<array|string>",[t],arguments.length),this[en]("count",t),this[Bn](t),this}default(t,e,n){return It("<object|string|array> [*] [string]",[t,e,n],arguments.length),n&&(kt(t,Re(this,Se,"f")),Re(this,Ae,"f").defaultDescription[t]=n),"function"==typeof e&&(kt(t,Re(this,Se,"f")),Re(this,Ae,"f").defaultDescription[t]||(Re(this,Ae,"f").defaultDescription[t]=Re(this,Ne,"f").functionDescription(e)),e=e.call()),this[nn](this.default.bind(this),"default",t,e),this}defaults(t,e,n){return this.default(t,e,n)}demandCommand(t=1,e,n,s){return It("[number] [number|string] [string|null|undefined] [string|null|undefined]",[t,e,n,s],arguments.length),"number"!=typeof e&&(n=e,e=1/0),this.global("_",!1),Re(this,Ae,"f").demandedCommands._={min:t,max:e,minMsg:n,maxMsg:s},this}demand(t,e,n){return Array.isArray(e)?(e.forEach(t=>{xt(n,!0,Re(this,Se,"f")),this.demandOption(t,n)}),e=1/0):"number"!=typeof e&&(n=e,e=1/0),"number"==typeof t?(xt(n,!0,Re(this,Se,"f")),this.demandCommand(t,e,n,n)):Array.isArray(t)?t.forEach(t=>{xt(n,!0,Re(this,Se,"f")),this.demandOption(t,n)}):"string"==typeof n?this.demandOption(t,n):!0!==n&&void 0!==n||this.demandOption(t),this}demandOption(t,e){return It("<object|string|array> [string]",[t,e],arguments.length),this[nn](this.demandOption.bind(this),"demandedOptions",t,e),this}deprecateOption(t,e){return It("<string> [string|boolean]",[t,e],arguments.length),Re(this,Ae,"f").deprecatedOptions[t]=e,this}describe(t,e){return It("<object|string|array> [string]",[t,e],arguments.length),this[on](t,!0),Re(this,Ne,"f").describe(t,e),this}detectLocale(t){return It("<boolean>",[t],arguments.length),He(this,fe,t,"f"),this}env(t){return It("[string|boolean]",[t],arguments.length),!1===t?delete Re(this,Ae,"f").envPrefix:Re(this,Ae,"f").envPrefix=t||"",this}epilogue(t){return It("<string>",[t],arguments.length),Re(this,Ne,"f").epilog(t),this}epilog(t){return this.epilogue(t)}example(t,e){return It("<string|array> [string]",[t,e],arguments.length),Array.isArray(t)?t.forEach(t=>this.example(...t)):Re(this,Ne,"f").example(t,e),this}exit(t,e){He(this,Ce,!0,"f"),He(this,he,e,"f"),Re(this,pe,"f")&&Re(this,Se,"f").process.exit(t)}exitProcess(t=!0){return It("[boolean]",[t],arguments.length),He(this,pe,t,"f"),this}fail(t){if(It("<function|boolean>",[t],arguments.length),"boolean"==typeof t&&!1!==t)throw new St("Invalid first argument. Expected function or boolean 'false'");return Re(this,Ne,"f").failFn(t),this}getAliases(){return this.parsed?this.parsed.aliases:{}}async getCompletion(t,e){return It("<array> [function]",[t,e],arguments.length),e?Re(this,De,"f").getCompletion(t,e):new Promise((e,n)=>{Re(this,De,"f").getCompletion(t,(t,s)=>{t?n(t):e(s)})})}getDemandedOptions(){return It([],0),Re(this,Ae,"f").demandedOptions}getDemandedCommands(){return It([],0),Re(this,Ae,"f").demandedCommands}getDeprecatedOptions(){return It([],0),Re(this,Ae,"f").deprecatedOptions}getDetectLocale(){return Re(this,fe,"f")}getExitProcess(){return Re(this,pe,"f")}getGroups(){return Object.assign({},Re(this,Fe,"f"),Re(this,ke,"f"))}getHelp(){if(He(this,Ce,!0,"f"),!Re(this,Ne,"f").hasCachedHelpMessage()){if(!this.parsed){const t=this[bn](Re(this,_e,"f"),void 0,void 0,0,!0);if(Mt(t))return t.then(()=>Re(this,Ne,"f").help())}const t=Re(this,re,"f").runDefaultBuilderOn(this);if(Mt(t))return t.then(()=>Re(this,Ne,"f").help())}return Promise.resolve(Re(this,Ne,"f").help())}getOptions(){return Re(this,Ae,"f")}getStrict(){return Re(this,$e,"f")}getStrictCommands(){return Re(this,Pe,"f")}getStrictOptions(){return Re(this,Ie,"f")}global(t,e){return It("<string|array> [boolean]",[t,e],arguments.length),t=[].concat(t),!1!==e?Re(this,Ae,"f").local=Re(this,Ae,"f").local.filter(e=>-1===t.indexOf(e)):t.forEach(t=>{Re(this,Ae,"f").local.includes(t)||Re(this,Ae,"f").local.push(t)}),this}group(t,e){It("<string|array> <string>",[t,e],arguments.length);const n=Re(this,ke,"f")[e]||Re(this,Fe,"f")[e];Re(this,ke,"f")[e]&&delete Re(this,ke,"f")[e];const s={};return Re(this,Fe,"f")[e]=(n||[]).concat(t).filter(t=>!s[t]&&(s[t]=!0)),this}hide(t){return It("<string>",[t],arguments.length),Re(this,Ae,"f").hiddenOptions.push(t),this}implies(t,e){return It("<string|object> [number|string|array]",[t,e],arguments.length),Re(this,ze,"f").implies(t,e),this}locale(t){return It("[string]",[t],arguments.length),void 0===t?(this[Ze](),Re(this,Se,"f").y18n.getLocale()):(He(this,fe,!1,"f"),Re(this,Se,"f").y18n.setLocale(t),this)}middleware(t,e,n){return Re(this,me,"f").addMiddleware(t,!!e,n)}nargs(t,e){return It("<string|object|array> [number]",[t,e],arguments.length),this[nn](this.nargs.bind(this),"narg",t,e),this}normalize(t){return It("<array|string>",[t],arguments.length),this[en]("normalize",t),this}number(t){return It("<array|string>",[t],arguments.length),this[en]("number",t),this[Bn](t),this}option(t,e){if(It("<string|object> [object]",[t,e],arguments.length),"object"==typeof t)Object.keys(t).forEach(e=>{this.options(e,t[e])});else{"object"!=typeof e&&(e={}),this[Bn](t),!Re(this,Le,"f")||"version"!==t&&"version"!==(null==e?void 0:e.alias)||this[qe](['"version" is a reserved word.',"Please do one of the following:",'- Disable version with `yargs.version(false)` if using "version" as an option',"- Use the built-in `yargs.version` method instead (if applicable)","- Use a different option key","https://yargs.js.org/docs/#api-reference-version"].join("\n"),void 0,"versionWarning"),Re(this,Ae,"f").key[t]=!0,e.alias&&this.alias(t,e.alias);const n=e.deprecate||e.deprecated;n&&this.deprecateOption(t,n);const s=e.demand||e.required||e.require;s&&this.demand(t,s),e.demandOption&&this.demandOption(t,"string"==typeof e.demandOption?e.demandOption:void 0),e.conflicts&&this.conflicts(t,e.conflicts),"default"in e&&this.default(t,e.default),void 0!==e.implies&&this.implies(t,e.implies),void 0!==e.nargs&&this.nargs(t,e.nargs),e.config&&this.config(t,e.configParser),e.normalize&&this.normalize(t),e.choices&&this.choices(t,e.choices),e.coerce&&this.coerce(t,e.coerce),e.group&&this.group(t,e.group),(e.boolean||"boolean"===e.type)&&(this.boolean(t),e.alias&&this.boolean(e.alias)),(e.array||"array"===e.type)&&(this.array(t),e.alias&&this.array(e.alias)),(e.number||"number"===e.type)&&(this.number(t),e.alias&&this.number(e.alias)),(e.string||"string"===e.type)&&(this.string(t),e.alias&&this.string(e.alias)),(e.count||"count"===e.type)&&this.count(t),"boolean"==typeof e.global&&this.global(t,e.global),e.defaultDescription&&(Re(this,Ae,"f").defaultDescription[t]=e.defaultDescription),e.skipValidation&&this.skipValidation(t);const i=e.describe||e.description||e.desc,u=Re(this,Ne,"f").getDescriptions();Object.prototype.hasOwnProperty.call(u,t)&&"string"!=typeof i||this.describe(t,i),e.hidden&&this.hide(t),e.requiresArg&&this.requiresArg(t)}return this}options(t,e){return this.option(t,e)}parse(t,e,n){It("[string|array] [function|boolean|object] [function]",[t,e,n],arguments.length),this[Ve](),void 0===t&&(t=Re(this,_e,"f")),"object"==typeof e&&(He(this,je,e,"f"),e=n),"function"==typeof e&&(He(this,Oe,e,"f"),e=!1),e||He(this,_e,t,"f"),Re(this,Oe,"f")&&He(this,pe,!1,"f");const s=this[bn](t,!!e),i=this.parsed;return Re(this,De,"f").setParsed(this.parsed),Mt(s)?s.then(t=>(Re(this,Oe,"f")&&Re(this,Oe,"f").call(this,Re(this,he,"f"),t,Re(this,ve,"f")),t)).catch(t=>{throw Re(this,Oe,"f")&&Re(this,Oe,"f")(t,this.parsed.argv,Re(this,ve,"f")),t}).finally(()=>{this[an](),this.parsed=i}):(Re(this,Oe,"f")&&Re(this,Oe,"f").call(this,Re(this,he,"f"),s,Re(this,ve,"f")),this[an](),this.parsed=i,s)}parseAsync(t,e,n){const s=this.parse(t,e,n);return Mt(s)?s:Promise.resolve(s)}parseSync(t,e,n){const s=this.parse(t,e,n);if(Mt(s))throw new St(".parseSync() must not be used with asynchronous builders, handlers, or middleware");return s}parserConfiguration(t){return It("<object>",[t],arguments.length),He(this,we,t,"f"),this}pkgConf(t,e){It("<string> [string]",[t,e],arguments.length);let n=null;const s=this[tn](e||Re(this,oe,"f"));return s[t]&&"object"==typeof s[t]&&(n=ie(s[t],e||Re(this,oe,"f"),this[Ke]()["deep-merge-config"]||!1,Re(this,Se,"f")),Re(this,Ae,"f").configObjects=(Re(this,Ae,"f").configObjects||[]).concat(n)),this}positional(t,e){It("<string> <object>",[t,e],arguments.length);const n=["default","defaultDescription","implies","normalize","choices","conflicts","coerce","type","describe","desc","description","alias"];e=qt(e,(t,e)=>!("type"===t&&!["string","number","boolean"].includes(e))&&n.includes(t));const s=Re(this,ae,"f").fullCommands[Re(this,ae,"f").fullCommands.length-1],i=s?Re(this,re,"f").cmdToParseOptions(s):{array:[],alias:{},default:{},demand:{}};return _t(i).forEach(n=>{const s=i[n];Array.isArray(s)?-1!==s.indexOf(t)&&(e[n]=!0):s[t]&&!(n in e)&&(e[n]=s[t])}),this.group(t,Re(this,Ne,"f").getPositionalGroupName()),this.option(t,e)}recommendCommands(t=!0){return It("[boolean]",[t],arguments.length),He(this,Me,t,"f"),this}required(t,e,n){return this.demand(t,e,n)}require(t,e,n){return this.demand(t,e,n)}requiresArg(t){return It("<array|string|object> [number]",[t],arguments.length),"string"==typeof t&&Re(this,Ae,"f").narg[t]||this[nn](this.requiresArg.bind(this),"narg",t,NaN),this}showCompletionScript(t,e){return It("[string] [string]",[t,e],arguments.length),t=t||this.$0,Re(this,be,"f").log(Re(this,De,"f").generateCompletionScript(t,e||Re(this,le,"f")||"completion")),this}showHelp(t){if(It("[string|function]",[t],arguments.length),He(this,Ce,!0,"f"),!Re(this,Ne,"f").hasCachedHelpMessage()){if(!this.parsed){const e=this[bn](Re(this,_e,"f"),void 0,void 0,0,!0);if(Mt(e))return e.then(()=>{Re(this,Ne,"f").showHelp(t)}),this}const e=Re(this,re,"f").runDefaultBuilderOn(this);if(Mt(e))return e.then(()=>{Re(this,Ne,"f").showHelp(t)}),this}return Re(this,Ne,"f").showHelp(t),this}scriptName(t){return this.customScriptName=!0,this.$0=t,this}showHelpOnFail(t,e){return It("[boolean|string] [string]",[t,e],arguments.length),Re(this,Ne,"f").showHelpOnFail(t,e),this}showVersion(t){return It("[string|function]",[t],arguments.length),Re(this,Ne,"f").showVersion(t),this}skipValidation(t){return It("<array|string>",[t],arguments.length),this[en]("skipValidation",t),this}strict(t){return It("[boolean]",[t],arguments.length),He(this,$e,!1!==t,"f"),this}strictCommands(t){return It("[boolean]",[t],arguments.length),He(this,Pe,!1!==t,"f"),this}strictOptions(t){return It("[boolean]",[t],arguments.length),He(this,Ie,!1!==t,"f"),this}string(t){return It("<array|string>",[t],arguments.length),this[en]("string",t),this[Bn](t),this}terminalWidth(){return It([],0),Re(this,Se,"f").process.stdColumns}updateLocale(t){return this.updateStrings(t)}updateStrings(t){return It("<object>",[t],arguments.length),He(this,fe,!1,"f"),Re(this,Se,"f").y18n.updateLocale(t),this}usage(t,e,n,s){if(It("<string|null|undefined> [string|boolean] [function|object] [function]",[t,e,n,s],arguments.length),void 0!==e){if(xt(t,null,Re(this,Se,"f")),(t||"").match(/^\$0( |$)/))return this.command(t,e,n,s);throw new St(".usage() description must start with $0 if being used as alias for .command()")}return Re(this,Ne,"f").usage(t),this}usageConfiguration(t){return It("<object>",[t],arguments.length),He(this,We,t,"f"),this}version(t,e,n){const s="version";if(It("[boolean|string] [string] [string]",[t,e,n],arguments.length),Re(this,Le,"f")&&(this[Ge](Re(this,Le,"f")),Re(this,Ne,"f").version(void 0),He(this,Le,null,"f")),0===arguments.length)n=this[Qe](),t=s;else if(1===arguments.length){if(!1===t)return this;n=t,t=s}else 2===arguments.length&&(n=e,e=void 0);return He(this,Le,"string"==typeof t?t:s,"f"),e=e||Re(this,Ne,"f").deferY18nLookup("Show version number"),Re(this,Ne,"f").version(n||void 0),this.boolean(Re(this,Le,"f")),this.describe(Re(this,Le,"f"),e),this}wrap(t){return It("<number|null|undefined>",[t],arguments.length),Re(this,Ne,"f").wrap(t),this}[(re=new WeakMap,oe=new WeakMap,ae=new WeakMap,De=new WeakMap,le=new WeakMap,ce=new WeakMap,he=new WeakMap,fe=new WeakMap,de=new WeakMap,pe=new WeakMap,ge=new WeakMap,me=new WeakMap,Fe=new WeakMap,Ce=new WeakMap,Ee=new WeakMap,ye=new WeakMap,be=new WeakMap,ve=new WeakMap,Ae=new WeakMap,Be=new WeakMap,we=new WeakMap,Oe=new WeakMap,je=new WeakMap,xe=new WeakMap,ke=new WeakMap,_e=new WeakMap,Me=new WeakMap,Se=new WeakMap,$e=new WeakMap,Pe=new WeakMap,Ie=new WeakMap,Ne=new WeakMap,We=new WeakMap,Le=new WeakMap,ze=new WeakMap,Te)](t){if(!t._||!t["--"])return t;t._.push.apply(t._,t["--"]);try{delete t["--"]}catch(t){}return t}[Ue](){return{log:(...t)=>{this[mn]()||console.log(...t),He(this,Ce,!0,"f"),Re(this,ve,"f").length&&He(this,ve,Re(this,ve,"f")+"\n","f"),He(this,ve,Re(this,ve,"f")+t.join(" "),"f")},error:(...t)=>{this[mn]()||console.error(...t),He(this,Ce,!0,"f"),Re(this,ve,"f").length&&He(this,ve,Re(this,ve,"f")+"\n","f"),He(this,ve,Re(this,ve,"f")+t.join(" "),"f")}}}[Ge](t){_t(Re(this,Ae,"f")).forEach(e=>{if("configObjects"===e)return;const n=Re(this,Ae,"f")[e];Array.isArray(n)?n.includes(t)&&n.splice(n.indexOf(t),1):"object"==typeof n&&delete n[t]}),delete Re(this,Ne,"f").getDescriptions()[t]}[qe](t,e,n){Re(this,de,"f")[n]||(Re(this,Se,"f").process.emitWarning(t,e),Re(this,de,"f")[n]=!0)}[Ve](){Re(this,ge,"f").push({options:Re(this,Ae,"f"),configObjects:Re(this,Ae,"f").configObjects.slice(0),exitProcess:Re(this,pe,"f"),groups:Re(this,Fe,"f"),strict:Re(this,$e,"f"),strictCommands:Re(this,Pe,"f"),strictOptions:Re(this,Ie,"f"),completionCommand:Re(this,le,"f"),output:Re(this,ve,"f"),exitError:Re(this,he,"f"),hasOutput:Re(this,Ce,"f"),parsed:this.parsed,parseFn:Re(this,Oe,"f"),parseContext:Re(this,je,"f")}),Re(this,Ne,"f").freeze(),Re(this,ze,"f").freeze(),Re(this,re,"f").freeze(),Re(this,me,"f").freeze()}[Ye](){let t,e="";return t=/\b(node|iojs|electron)(\.exe)?$/.test(Re(this,Se,"f").process.argv()[0])?Re(this,Se,"f").process.argv().slice(1,2):Re(this,Se,"f").process.argv().slice(0,1),e=t.map(t=>{const e=this[En](Re(this,oe,"f"),t);return t.match(/^(\/|([a-zA-Z]:)?\\)/)&&e.length<t.length?e:t}).join(" ").trim(),Re(this,Se,"f").getEnv("_")&&Re(this,Se,"f").getProcessArgvBin()===Re(this,Se,"f").getEnv("_")&&(e=Re(this,Se,"f").getEnv("_").replace(`${Re(this,Se,"f").path.dirname(Re(this,Se,"f").process.execPath())}/`,"")),e}[Ke](){return Re(this,we,"f")}[Je](){return Re(this,We,"f")}[Ze](){if(!Re(this,fe,"f"))return;const t=Re(this,Se,"f").getEnv("LC_ALL")||Re(this,Se,"f").getEnv("LC_MESSAGES")||Re(this,Se,"f").getEnv("LANG")||Re(this,Se,"f").getEnv("LANGUAGE")||"en_US";this.locale(t.replace(/[.:].*/,""))}[Qe](){return this[tn]().version||"unknown"}[Xe](t){const e=t["--"]?t["--"]:t._;for(let t,n=0;void 0!==(t=e[n]);n++)Re(this,Se,"f").Parser.looksLikeNumber(t)&&Number.isSafeInteger(Math.floor(parseFloat(`${t}`)))&&(e[n]=Number(t));return t}[tn](t){const e=t||"*";if(Re(this,xe,"f")[e])return Re(this,xe,"f")[e];let n={};try{let e=t||Re(this,Se,"f").mainFilename;Re(this,Se,"f").path.extname(e)&&(e=Re(this,Se,"f").path.dirname(e));const s=Re(this,Se,"f").findUp(e,(t,e)=>e.includes("package.json")?"package.json":void 0);xt(s,void 0,Re(this,Se,"f")),n=JSON.parse(Re(this,Se,"f").readFileSync(s,"utf8"))}catch(t){}return Re(this,xe,"f")[e]=n||{},Re(this,xe,"f")[e]}[en](t,e){(e=[].concat(e)).forEach(e=>{e=this[rn](e),Re(this,Ae,"f")[t].push(e)})}[nn](t,e,n,s){this[un](t,e,n,s,(t,e,n)=>{Re(this,Ae,"f")[t][e]=n})}[sn](t,e,n,s){this[un](t,e,n,s,(t,e,n)=>{Re(this,Ae,"f")[t][e]=(Re(this,Ae,"f")[t][e]||[]).concat(n)})}[un](t,e,n,s,i){if(Array.isArray(n))n.forEach(e=>{t(e,s)});else if((t=>"object"==typeof t)(n))for(const e of _t(n))t(e,n[e]);else i(e,this[rn](n),s)}[rn](t){return"__proto__"===t?"___proto___":t}[on](t,e){return this[nn](this[on].bind(this),"key",t,e),this}[an](){var t,e,n,s,i,u,r,o,a,D,l,c;const h=Re(this,ge,"f").pop();let f;xt(h,void 0,Re(this,Se,"f")),t=this,e=this,n=this,s=this,i=this,u=this,r=this,o=this,a=this,D=this,l=this,c=this,({options:{set value(e){He(t,Ae,e,"f")}}.value,configObjects:f,exitProcess:{set value(t){He(e,pe,t,"f")}}.value,groups:{set value(t){He(n,Fe,t,"f")}}.value,output:{set value(t){He(s,ve,t,"f")}}.value,exitError:{set value(t){He(i,he,t,"f")}}.value,hasOutput:{set value(t){He(u,Ce,t,"f")}}.value,parsed:this.parsed,strict:{set value(t){He(r,$e,t,"f")}}.value,strictCommands:{set value(t){He(o,Pe,t,"f")}}.value,strictOptions:{set value(t){He(a,Ie,t,"f")}}.value,completionCommand:{set value(t){He(D,le,t,"f")}}.value,parseFn:{set value(t){He(l,Oe,t,"f")}}.value,parseContext:{set value(t){He(c,je,t,"f")}}.value}=h),Re(this,Ae,"f").configObjects=f,Re(this,Ne,"f").unfreeze(),Re(this,ze,"f").unfreeze(),Re(this,re,"f").unfreeze(),Re(this,me,"f").unfreeze()}[Dn](t,e){return Ht(e,e=>(t(e),e))}getInternalMethods(){return{getCommandInstance:this[ln].bind(this),getContext:this[cn].bind(this),getHasOutput:this[hn].bind(this),getLoggerInstance:this[fn].bind(this),getParseContext:this[dn].bind(this),getParserConfiguration:this[Ke].bind(this),getUsageConfiguration:this[Je].bind(this),getUsageInstance:this[pn].bind(this),getValidationInstance:this[gn].bind(this),hasParseCallback:this[mn].bind(this),isGlobalContext:this[Fn].bind(this),postProcess:this[Cn].bind(this),reset:this[yn].bind(this),runValidation:this[vn].bind(this),runYargsParserAndExecuteCommands:this[bn].bind(this),setHasOutput:this[An].bind(this)}}[ln](){return Re(this,re,"f")}[cn](){return Re(this,ae,"f")}[hn](){return Re(this,Ce,"f")}[fn](){return Re(this,be,"f")}[dn](){return Re(this,je,"f")||{}}[pn](){return Re(this,Ne,"f")}[gn](){return Re(this,ze,"f")}[mn](){return!!Re(this,Oe,"f")}[Fn](){return Re(this,ye,"f")}[Cn](t,e,n,s){if(n)return t;if(Mt(t))return t;e||(t=this[Te](t));return(this[Ke]()["parse-positional-numbers"]||void 0===this[Ke]()["parse-positional-numbers"])&&(t=this[Xe](t)),s&&(t=zt(t,this,Re(this,me,"f").getMiddleware(),!1)),t}[yn](t={}){He(this,Ae,Re(this,Ae,"f")||{},"f");const e={};e.local=Re(this,Ae,"f").local||[],e.configObjects=Re(this,Ae,"f").configObjects||[];const n={};e.local.forEach(e=>{n[e]=!0,(t[e]||[]).forEach(t=>{n[t]=!0})}),Object.assign(Re(this,ke,"f"),Object.keys(Re(this,Fe,"f")).reduce((t,e)=>{const s=Re(this,Fe,"f")[e].filter(t=>!(t in n));return s.length>0&&(t[e]=s),t},{})),He(this,Fe,{},"f");return["array","boolean","string","skipValidation","count","normalize","number","hiddenOptions"].forEach(t=>{e[t]=(Re(this,Ae,"f")[t]||[]).filter(t=>!n[t])}),["narg","key","alias","default","defaultDescription","config","choices","demandedOptions","demandedCommands","deprecatedOptions"].forEach(t=>{e[t]=qt(Re(this,Ae,"f")[t],t=>!n[t])}),e.envPrefix=Re(this,Ae,"f").envPrefix,He(this,Ae,e,"f"),He(this,Ne,Re(this,Ne,"f")?Re(this,Ne,"f").reset(n):Kt(this,Re(this,Se,"f")),"f"),He(this,ze,Re(this,ze,"f")?Re(this,ze,"f").reset(n):function(t,e,n){const s=n.y18n.__,i=n.y18n.__n,u={nonOptionCount:function(n){const s=t.getDemandedCommands(),u=n._.length+(n["--"]?n["--"].length:0)-t.getInternalMethods().getContext().commands.length;s._&&(u<s._.min||u>s._.max)&&(u<s._.min?void 0!==s._.minMsg?e.fail(s._.minMsg?s._.minMsg.replace(/\$0/g,u.toString()).replace(/\$1/,s._.min.toString()):null):e.fail(i("Not enough non-option arguments: got %s, need at least %s","Not enough non-option arguments: got %s, need at least %s",u,u.toString(),s._.min.toString())):u>s._.max&&(void 0!==s._.maxMsg?e.fail(s._.maxMsg?s._.maxMsg.replace(/\$0/g,u.toString()).replace(/\$1/,s._.max.toString()):null):e.fail(i("Too many non-option arguments: got %s, maximum of %s","Too many non-option arguments: got %s, maximum of %s",u,u.toString(),s._.max.toString()))))},positionalCount:function(t,n){n<t&&e.fail(i("Not enough non-option arguments: got %s, need at least %s","Not enough non-option arguments: got %s, need at least %s",n,n+"",t+""))},requiredArguments:function(t,n){let s=null;for(const e of Object.keys(n))Object.prototype.hasOwnProperty.call(t,e)&&void 0!==t[e]||(s=s||{},s[e]=n[e]);if(s){const t=[];for(const e of Object.keys(s)){const n=s[e];n&&t.indexOf(n)<0&&t.push(n)}const n=t.length?`\n${t.join("\n")}`:"";e.fail(i("Missing required argument: %s","Missing required arguments: %s",Object.keys(s).length,Object.keys(s).join(", ")+n))}},unknownArguments:function(n,s,r,o,a=!0){var D;const l=t.getInternalMethods().getCommandInstance().getCommands(),c=[],h=t.getInternalMethods().getContext();if(Object.keys(n).forEach(e=>{ee.includes(e)||Object.prototype.hasOwnProperty.call(r,e)||Object.prototype.hasOwnProperty.call(t.getInternalMethods().getParseContext(),e)||u.isValidAndSomeAliasIsNotNew(e,s)||c.push(e)}),a&&(h.commands.length>0||l.length>0||o)&&n._.slice(h.commands.length).forEach(t=>{l.includes(""+t)||c.push(""+t)}),a){const e=(null===(D=t.getDemandedCommands()._)||void 0===D?void 0:D.max)||0,s=h.commands.length+e;s<n._.length&&n._.slice(s).forEach(t=>{t=String(t),h.commands.includes(t)||c.includes(t)||c.push(t)})}c.length&&e.fail(i("Unknown argument: %s","Unknown arguments: %s",c.length,c.map(t=>t.trim()?t:`"${t}"`).join(", ")))},unknownCommands:function(n){const s=t.getInternalMethods().getCommandInstance().getCommands(),u=[],r=t.getInternalMethods().getContext();return(r.commands.length>0||s.length>0)&&n._.slice(r.commands.length).forEach(t=>{s.includes(""+t)||u.push(""+t)}),u.length>0&&(e.fail(i("Unknown command: %s","Unknown commands: %s",u.length,u.join(", "))),!0)},isValidAndSomeAliasIsNotNew:function(e,n){if(!Object.prototype.hasOwnProperty.call(n,e))return!1;const s=t.parsed.newAliases;return[e,...n[e]].some(t=>!Object.prototype.hasOwnProperty.call(s,t)||!s[e])},limitedChoices:function(n){const i=t.getOptions(),u={};if(!Object.keys(i.choices).length)return;Object.keys(n).forEach(t=>{-1===ee.indexOf(t)&&Object.prototype.hasOwnProperty.call(i.choices,t)&&[].concat(n[t]).forEach(e=>{-1===i.choices[t].indexOf(e)&&void 0!==e&&(u[t]=(u[t]||[]).concat(e))})});const r=Object.keys(u);if(!r.length)return;let o=s("Invalid values:");r.forEach(t=>{o+=`\n ${s("Argument: %s, Given: %s, Choices: %s",t,e.stringifiedValues(u[t]),e.stringifiedValues(i.choices[t]))}`}),e.fail(o)}};let r={};function o(t,e){const n=Number(e);return"number"==typeof(e=isNaN(n)?e:n)?e=t._.length>=e:e.match(/^--no-.+/)?(e=e.match(/^--no-(.+)/)[1],e=!Object.prototype.hasOwnProperty.call(t,e)):e=Object.prototype.hasOwnProperty.call(t,e),e}u.implies=function(e,s){It("<string|object> [array|number|string]",[e,s],arguments.length),"object"==typeof e?Object.keys(e).forEach(t=>{u.implies(t,e[t])}):(t.global(e),r[e]||(r[e]=[]),Array.isArray(s)?s.forEach(t=>u.implies(e,t)):(xt(s,void 0,n),r[e].push(s)))},u.getImplied=function(){return r},u.implications=function(t){const n=[];if(Object.keys(r).forEach(e=>{const s=e;(r[e]||[]).forEach(e=>{let i=s;const u=e;i=o(t,i),e=o(t,e),i&&!e&&n.push(` ${s} -> ${u}`)})}),n.length){let t=`${s("Implications failed:")}\n`;n.forEach(e=>{t+=e}),e.fail(t)}};let a={};u.conflicts=function(e,n){It("<string|object> [array|string]",[e,n],arguments.length),"object"==typeof e?Object.keys(e).forEach(t=>{u.conflicts(t,e[t])}):(t.global(e),a[e]||(a[e]=[]),Array.isArray(n)?n.forEach(t=>u.conflicts(e,t)):a[e].push(n))},u.getConflicting=()=>a,u.conflicting=function(i){Object.keys(i).forEach(t=>{a[t]&&a[t].forEach(n=>{n&&void 0!==i[t]&&void 0!==i[n]&&e.fail(s("Arguments %s and %s are mutually exclusive",t,n))})}),t.getInternalMethods().getParserConfiguration()["strip-dashed"]&&Object.keys(a).forEach(t=>{a[t].forEach(u=>{u&&void 0!==i[n.Parser.camelCase(t)]&&void 0!==i[n.Parser.camelCase(u)]&&e.fail(s("Arguments %s and %s are mutually exclusive",t,u))})})},u.recommendCommands=function(t,n){n=n.sort((t,e)=>e.length-t.length);let i=null,u=1/0;for(let e,s=0;void 0!==(e=n[s]);s++){const n=te(t,e);n<=3&&n<u&&(u=n,i=e)}i&&e.fail(s("Did you mean %s?",i))},u.reset=function(t){return r=qt(r,e=>!t[e]),a=qt(a,e=>!t[e]),u};const D=[];return u.freeze=function(){D.push({implied:r,conflicting:a})},u.unfreeze=function(){const t=D.pop();xt(t,void 0,n),({implied:r,conflicting:a}=t)},u}(this,Re(this,Ne,"f"),Re(this,Se,"f")),"f"),He(this,re,Re(this,re,"f")?Re(this,re,"f").reset():function(t,e,n,s){return new Tt(t,e,n,s)}(Re(this,Ne,"f"),Re(this,ze,"f"),Re(this,me,"f"),Re(this,Se,"f")),"f"),Re(this,De,"f")||He(this,De,function(t,e,n,s){return new Xt(t,e,n,s)}(this,Re(this,Ne,"f"),Re(this,re,"f"),Re(this,Se,"f")),"f"),Re(this,me,"f").reset(),He(this,le,null,"f"),He(this,ve,"","f"),He(this,he,null,"f"),He(this,Ce,!1,"f"),this.parsed=!1,this}[En](t,e){return Re(this,Se,"f").path.relative(t,e)}[bn](t,e,n,s=0,i=!1){var u,r,o,a;let D=!!n||i;t=t||Re(this,_e,"f"),Re(this,Ae,"f").__=Re(this,Se,"f").y18n.__,Re(this,Ae,"f").configuration=this[Ke]();const l=!!Re(this,Ae,"f").configuration["populate--"],c=Object.assign({},Re(this,Ae,"f").configuration,{"populate--":!0}),h=Re(this,Se,"f").Parser.detailed(t,Object.assign({},Re(this,Ae,"f"),{configuration:{"parse-positional-numbers":!1,...c}})),f=Object.assign(h.argv,Re(this,je,"f"));let d;const p=h.aliases;let g=!1,m=!1;Object.keys(f).forEach(t=>{t===Re(this,Ee,"f")&&f[t]?g=!0:t===Re(this,Le,"f")&&f[t]&&(m=!0)}),f.$0=this.$0,this.parsed=h,0===s&&Re(this,Ne,"f").clearCachedHelpMessage();try{if(this[Ze](),e)return this[Cn](f,l,!!n,!1);if(Re(this,Ee,"f")){[Re(this,Ee,"f")].concat(p[Re(this,Ee,"f")]||[]).filter(t=>t.length>1).includes(""+f._[f._.length-1])&&(f._.pop(),g=!0)}He(this,ye,!1,"f");const c=Re(this,re,"f").getCommands(),F=!!(null===(u=Re(this,De,"f"))||void 0===u?void 0:u.completionKey)&&[null===(r=Re(this,De,"f"))||void 0===r?void 0:r.completionKey,...null!==(a=this.getAliases()[null===(o=Re(this,De,"f"))||void 0===o?void 0:o.completionKey])&&void 0!==a?a:[]].some(t=>Object.prototype.hasOwnProperty.call(f,t)),C=g||F||i;if(f._.length){if(c.length){let t;for(let e,u=s||0;void 0!==f._[u];u++){if(e=String(f._[u]),c.includes(e)&&e!==Re(this,le,"f")){const t=Re(this,re,"f").runCommand(e,this,h,u+1,i,g||m||i);return this[Cn](t,l,!!n,!1)}if(!t&&e!==Re(this,le,"f")){t=e;break}}!Re(this,re,"f").hasDefaultCommand()&&Re(this,Me,"f")&&t&&!C&&Re(this,ze,"f").recommendCommands(t,c)}Re(this,le,"f")&&f._.includes(Re(this,le,"f"))&&!F&&(Re(this,pe,"f")&&Vt(!0),this.showCompletionScript(),this.exit(0))}if(Re(this,re,"f").hasDefaultCommand()&&!C){const t=Re(this,re,"f").runCommand(null,this,h,0,i,g||m||i);return this[Cn](t,l,!!n,!1)}if(F){Re(this,pe,"f")&&Vt(!0);const e=(t=[].concat(t)).slice(t.indexOf(`--${Re(this,De,"f").completionKey}`)+1);return Re(this,De,"f").getCompletion(e,(t,e)=>{if(t)throw new St(t.message);(e||[]).forEach(t=>{Re(this,be,"f").log(t)}),this.exit(0)}),this[Cn](f,!l,!!n,!1)}if(Re(this,Ce,"f")||(g?(Re(this,pe,"f")&&Vt(!0),D=!0,this.showHelp(t=>{Re(this,be,"f").log(t),this.exit(0)})):m&&(Re(this,pe,"f")&&Vt(!0),D=!0,Re(this,Ne,"f").showVersion("log"),this.exit(0))),!D&&Re(this,Ae,"f").skipValidation.length>0&&(D=Object.keys(f).some(t=>Re(this,Ae,"f").skipValidation.indexOf(t)>=0&&!0===f[t])),!D){if(h.error)throw new St(h.error.message);if(!F){const t=this[vn](p,{},h.error);n||(d=zt(f,this,Re(this,me,"f").getMiddleware(),!0)),d=this[Dn](t,null!=d?d:f),Mt(d)&&!n&&(d=d.then(()=>zt(f,this,Re(this,me,"f").getMiddleware(),!1)))}}}catch(t){if(!(t instanceof St))throw t;Re(this,Ne,"f").fail(t.message,t)}return this[Cn](null!=d?d:f,l,!!n,!0)}[vn](t,e,n,s){const i={...this.getDemandedOptions()};return u=>{if(n)throw new St(n.message);Re(this,ze,"f").nonOptionCount(u),Re(this,ze,"f").requiredArguments(u,i);let r=!1;Re(this,Pe,"f")&&(r=Re(this,ze,"f").unknownCommands(u)),Re(this,$e,"f")&&!r?Re(this,ze,"f").unknownArguments(u,t,e,!!s):Re(this,Ie,"f")&&Re(this,ze,"f").unknownArguments(u,t,{},!1,!1),Re(this,ze,"f").limitedChoices(u),Re(this,ze,"f").implications(u),Re(this,ze,"f").conflicting(u)}}[An](){He(this,Ce,!0,"f")}[Bn](t){if("string"==typeof t)Re(this,Ae,"f").key[t]=!0;else for(const e of t)Re(this,Ae,"f").key[e]=!0}}const On=(jn=jt,(t=[],e=jn.process.cwd(),n)=>{const s=new wn(t,e,n,jn);return Object.defineProperty(s,"argv",{get:()=>s.parse(),enumerable:!0}),s.help(),s.version(),s});var jn;const xn=await On(function(t){return t.slice(mt()+1)}(f.argv)).config(y()).option("issue-number",{alias:"i",description:"GitHub issue number to process",type:"number",demandOption:!0}).option("planning-model",{alias:"m",description:"LLM for planning code changes. Must use llmlite format: provider/model (e.g., openai/gpt-4.1, azure/gpt-4.1, gemini/gemini-2.5-pro, anthropic/claude-4-sonnet-latest, bedrock/us.anthropic.claude-sonnet-4-20250514-v1:0, vertex/gemini-2.5-pro, xai/grok-4)",type:"string"}).option("two-staged-planning",{alias:"p",description:"Enable two-staged planning: first select relevant files, then generate detailed implementation plans (increases LLM cost but improves code quality)",type:"boolean",default:!0}).option("reasoning-effort",{alias:"e",description:"Constrains effort on reasoning for planning models. Supported values are low, medium, and high.",type:"string",choices:["low","medium","high"]}).option("coding-tool",{alias:"c",description:"Coding tool to use for making changes",type:"string",choices:["aider","claude-code","codex-cli","gemini-cli"],default:b}).option("aider-extra-args",{alias:"a",description:'Additional arguments to pass to Aider ("--yes-always --no-check-update --no-show-release-notes" is always applied)',type:"string",default:v}).option("claude-code-extra-args",{description:'Additional arguments to pass to Claude Code ("--dangerously-skip-permissions" is always applied, "--print" is applied only in CI)',type:"string",default:A}).option("codex-extra-args",{description:"Additional arguments to pass to Codex CLI (nothing is always applied)",type:"string",default:B}).option("gemini-extra-args",{description:'Additional arguments to pass to Gemini CLI ("--yolo" is always applied)',type:"string",default:w}).option("repomix-extra-args",{alias:"r",description:"Additional arguments for repomix when generating context",type:"string",default:O}).option("test-command",{alias:"t",description:"Command to run after the coding tool applies changes. If it fails, the assistant will try to fix it.",type:"string"}).option("max-test-attempts",{description:"Maximum number of attempts to fix test failures",type:"number",default:j}).option("dry-run",{alias:"d",description:"Run without making actual changes (no branch creation, no PR)",type:"boolean",default:!1}).option("remove-pattern",{description:"RegExp pattern to remove from issue and PR descriptions",type:"string"}).option("no-branch",{alias:"n",description:"Do not create a new branch, commit changes directly to the base branch",type:"boolean",default:!1}).option("node-runtime",{description:"Node.js runtime to use for running tools",type:"string",choices:["node","bun","npx","bunx"],default:x}).option("working-dir",{alias:"w",description:"Working directory path for commands",type:"string"}).version(function(){let e=import.meta.dir||u.dirname(new URL(import.meta.url).pathname);for(;!t.existsSync(u.join(e,"package.json"));)e=u.dirname(e);return JSON.parse(t.readFileSync(u.join(e,"package.json"),"utf8")).version}()).help().argv;xn["working-dir"]&&(f.chdir(xn["working-dir"]),console.info(`Changed working directory to: ${f.cwd()}`));const kn=k(xn["node-runtime"]);await _({aiderExtraArgs:xn["aider-extra-args"],claudeCodeExtraArgs:xn["claude-code-extra-args"],codexExtraArgs:xn["codex-extra-args"],geminiExtraArgs:xn["gemini-extra-args"],codingTool:xn["coding-tool"],dryRun:xn["dry-run"],noBranch:xn["no-branch"],nodeRuntime:kn,twoStagePlanning:xn["two-staged-planning"],issueNumber:xn["issue-number"],maxTestAttempts:xn["max-test-attempts"],planningModel:xn["planning-model"],reasoningEffort:xn["reasoning-effort"],repomixExtraArgs:xn["repomix-extra-args"],testCommand:xn["test-command"],removePattern:xn["remove-pattern"]});
33
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9ub2RlX21vZHVsZXMvY2xpdWkvYnVpbGQvbGliL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3N0cmlwLWFuc2kvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvYW5zaS1yZWdleC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9nZXQtZWFzdC1hc2lhbi13aWR0aC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9nZXQtZWFzdC1hc2lhbi13aWR0aC9sb29rdXAuanMiLCIuLi9ub2RlX21vZHVsZXMvZW1vamktcmVnZXgvaW5kZXgubWpzIiwiLi4vbm9kZV9tb2R1bGVzL3N0cmluZy13aWR0aC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy93cmFwLWFuc2kvbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dyYXAtYW5zaS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy1wYXJzZXIvYnVpbGQvbGliL3N0cmluZy11dGlscy5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy1wYXJzZXIvYnVpbGQvbGliL3lhcmdzLXBhcnNlci10eXBlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy1wYXJzZXIvYnVpbGQvbGliL3lhcmdzLXBhcnNlci5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy1wYXJzZXIvYnVpbGQvbGliL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzLXBhcnNlci9idWlsZC9saWIvdG9rZW5pemUtYXJnLXN0cmluZy5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvdXRpbHMvcHJvY2Vzcy1hcmd2LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3kxOG4vYnVpbGQvbGliL3BsYXRmb3JtLXNoaW1zL25vZGUuanMiLCIuLi9ub2RlX21vZHVsZXMveTE4bi9idWlsZC9saWIvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvZ2V0LWNhbGxlci1maWxlL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2xpYi9wbGF0Zm9ybS1zaGltcy9lc20ubWpzIiwiLi4vbm9kZV9tb2R1bGVzL3kxOG4vaW5kZXgubWpzIiwiLi4vbm9kZV9tb2R1bGVzL2NsaXVpL2luZGV4Lm1qcyIsIi4uL25vZGVfbW9kdWxlcy9lc2NhbGFkZS9zeW5jL2luZGV4Lm1qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvdHlwaW5ncy9jb21tb24tdHlwZXMuanMiLCIuLi9ub2RlX21vZHVsZXMveWFyZ3MvYnVpbGQvbGliL3V0aWxzL2lzLXByb21pc2UuanMiLCIuLi9ub2RlX21vZHVsZXMveWFyZ3MvYnVpbGQvbGliL3llcnJvci5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvcGFyc2UtY29tbWFuZC5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvYXJnc2VydC5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvbWlkZGxld2FyZS5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvdXRpbHMvbWF5YmUtYXN5bmMtcmVzdWx0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2xpYi9jb21tYW5kLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2xpYi95YXJncy1mYWN0b3J5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2xpYi91dGlscy9vYmotZmlsdGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2xpYi91dGlscy9zZXQtYmxvY2tpbmcuanMiLCIuLi9ub2RlX21vZHVsZXMveWFyZ3MvYnVpbGQvbGliL3VzYWdlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2xpYi9jb21wbGV0aW9uLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2xpYi9jb21wbGV0aW9uLXRlbXBsYXRlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvdXRpbHMvbGV2ZW5zaHRlaW4uanMiLCIuLi9ub2RlX21vZHVsZXMveWFyZ3MvYnVpbGQvbGliL3ZhbGlkYXRpb24uanMiLCIuLi9ub2RlX21vZHVsZXMveWFyZ3MvYnVpbGQvbGliL3V0aWxzL2FwcGx5LWV4dGVuZHMuanMiLCIuLi9ub2RlX21vZHVsZXMveWFyZ3MvaW5kZXgubWpzIiwiLi4vc3JjL2NsaS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5jb25zdCBhbGlnbiA9IHtcbiAgICByaWdodDogYWxpZ25SaWdodCxcbiAgICBjZW50ZXI6IGFsaWduQ2VudGVyXG59O1xuY29uc3QgdG9wID0gMDtcbmNvbnN0IHJpZ2h0ID0gMTtcbmNvbnN0IGJvdHRvbSA9IDI7XG5jb25zdCBsZWZ0ID0gMztcbmV4cG9ydCBjbGFzcyBVSSB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMud2lkdGggPSBvcHRzLndpZHRoO1xuICAgICAgICB0aGlzLndyYXAgPSAoX2EgPSBvcHRzLndyYXApICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRydWU7XG4gICAgICAgIHRoaXMucm93cyA9IFtdO1xuICAgIH1cbiAgICBzcGFuKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgY29scyA9IHRoaXMuZGl2KC4uLmFyZ3MpO1xuICAgICAgICBjb2xzLnNwYW4gPSB0cnVlO1xuICAgIH1cbiAgICByZXNldE91dHB1dCgpIHtcbiAgICAgICAgdGhpcy5yb3dzID0gW107XG4gICAgfVxuICAgIGRpdiguLi5hcmdzKSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5kaXYoJycpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLndyYXAgJiYgdGhpcy5zaG91bGRBcHBseUxheW91dERTTCguLi5hcmdzKSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGx5TGF5b3V0RFNMKGFyZ3NbMF0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbHMgPSBhcmdzLm1hcChhcmcgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sRnJvbVN0cmluZyhhcmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucm93cy5wdXNoKGNvbHMpO1xuICAgICAgICByZXR1cm4gY29scztcbiAgICB9XG4gICAgc2hvdWxkQXBwbHlMYXlvdXREU0woLi4uYXJncykge1xuICAgICAgICByZXR1cm4gYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAvW1xcdFxcbl0vLnRlc3QoYXJnc1swXSk7XG4gICAgfVxuICAgIGFwcGx5TGF5b3V0RFNMKHN0cikge1xuICAgICAgICBjb25zdCByb3dzID0gc3RyLnNwbGl0KCdcXG4nKS5tYXAocm93ID0+IHJvdy5zcGxpdCgnXFx0JykpO1xuICAgICAgICBsZXQgbGVmdENvbHVtbldpZHRoID0gMDtcbiAgICAgICAgLy8gc2ltcGxlIGhldXJpc3RpYyBmb3IgbGF5b3V0LCBtYWtlIHN1cmUgdGhlXG4gICAgICAgIC8vIHNlY29uZCBjb2x1bW4gbGluZXMgdXAgYWxvbmcgdGhlIGxlZnQtaGFuZC5cbiAgICAgICAgLy8gZG9uJ3QgYWxsb3cgdGhlIGZpcnN0IGNvbHVtbiB0byB0YWtlIHVwIG1vcmVcbiAgICAgICAgLy8gdGhhbiA1MCUgb2YgdGhlIHNjcmVlbi5cbiAgICAgICAgcm93cy5mb3JFYWNoKGNvbHVtbnMgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbHVtbnMubGVuZ3RoID4gMSAmJiBtaXhpbi5zdHJpbmdXaWR0aChjb2x1bW5zWzBdKSA+IGxlZnRDb2x1bW5XaWR0aCkge1xuICAgICAgICAgICAgICAgIGxlZnRDb2x1bW5XaWR0aCA9IE1hdGgubWluKE1hdGguZmxvb3IodGhpcy53aWR0aCAqIDAuNSksIG1peGluLnN0cmluZ1dpZHRoKGNvbHVtbnNbMF0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGdlbmVyYXRlIGEgdGFibGU6XG4gICAgICAgIC8vICByZXBsYWNpbmcgJyAnIHdpdGggcGFkZGluZyBjYWxjdWxhdGlvbnMuXG4gICAgICAgIC8vICB1c2luZyB0aGUgYWxnb3JpdGhtaWNhbGx5IGdlbmVyYXRlZCB3aWR0aC5cbiAgICAgICAgcm93cy5mb3JFYWNoKGNvbHVtbnMgPT4ge1xuICAgICAgICAgICAgdGhpcy5kaXYoLi4uY29sdW1ucy5tYXAoKHIsIGkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiByLnRyaW0oKSxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogdGhpcy5tZWFzdXJlUGFkZGluZyhyKSxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IChpID09PSAwICYmIGNvbHVtbnMubGVuZ3RoID4gMSkgPyBsZWZ0Q29sdW1uV2lkdGggOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93c1t0aGlzLnJvd3MubGVuZ3RoIC0gMV07XG4gICAgfVxuICAgIGNvbEZyb21TdHJpbmcodGV4dCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIHBhZGRpbmc6IHRoaXMubWVhc3VyZVBhZGRpbmcodGV4dClcbiAgICAgICAgfTtcbiAgICB9XG4gICAgbWVhc3VyZVBhZGRpbmcoc3RyKSB7XG4gICAgICAgIC8vIG1lYXN1cmUgcGFkZGluZyB3aXRob3V0IGFuc2kgZXNjYXBlIGNvZGVzXG4gICAgICAgIGNvbnN0IG5vQW5zaSA9IG1peGluLnN0cmlwQW5zaShzdHIpO1xuICAgICAgICByZXR1cm4gWzAsIG5vQW5zaS5tYXRjaCgvXFxzKiQvKVswXS5sZW5ndGgsIDAsIG5vQW5zaS5tYXRjaCgvXlxccyovKVswXS5sZW5ndGhdO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgY29uc3QgbGluZXMgPSBbXTtcbiAgICAgICAgdGhpcy5yb3dzLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIHRoaXMucm93VG9TdHJpbmcocm93LCBsaW5lcyk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBkb24ndCBkaXNwbGF5IGFueSBsaW5lcyB3aXRoIHRoZVxuICAgICAgICAvLyBoaWRkZW4gZmxhZyBzZXQuXG4gICAgICAgIHJldHVybiBsaW5lc1xuICAgICAgICAgICAgLmZpbHRlcihsaW5lID0+ICFsaW5lLmhpZGRlbilcbiAgICAgICAgICAgIC5tYXAobGluZSA9PiBsaW5lLnRleHQpXG4gICAgICAgICAgICAuam9pbignXFxuJyk7XG4gICAgfVxuICAgIHJvd1RvU3RyaW5nKHJvdywgbGluZXMpIHtcbiAgICAgICAgdGhpcy5yYXN0ZXJpemUocm93KS5mb3JFYWNoKChycm93LCByKSA9PiB7XG4gICAgICAgICAgICBsZXQgc3RyID0gJyc7XG4gICAgICAgICAgICBycm93LmZvckVhY2goKGNvbCwgYykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgd2lkdGggfSA9IHJvd1tjXTsgLy8gdGhlIHdpZHRoIHdpdGggcGFkZGluZy5cbiAgICAgICAgICAgICAgICBjb25zdCB3cmFwV2lkdGggPSB0aGlzLm5lZ2F0ZVBhZGRpbmcocm93W2NdKTsgLy8gdGhlIHdpZHRoIHdpdGhvdXQgcGFkZGluZy5cbiAgICAgICAgICAgICAgICBsZXQgdHMgPSBjb2w7IC8vIHRlbXBvcmFyeSBzdHJpbmcgdXNlZCBkdXJpbmcgYWxpZ25tZW50L3BhZGRpbmcuXG4gICAgICAgICAgICAgICAgaWYgKHdyYXBXaWR0aCA+IG1peGluLnN0cmluZ1dpZHRoKGNvbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHMgKz0gJyAnLnJlcGVhdCh3cmFwV2lkdGggLSBtaXhpbi5zdHJpbmdXaWR0aChjb2wpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gYWxpZ24gdGhlIHN0cmluZyB3aXRoaW4gaXRzIGNvbHVtbi5cbiAgICAgICAgICAgICAgICBpZiAocm93W2NdLmFsaWduICYmIHJvd1tjXS5hbGlnbiAhPT0gJ2xlZnQnICYmIHRoaXMud3JhcCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmbiA9IGFsaWduW3Jvd1tjXS5hbGlnbl07XG4gICAgICAgICAgICAgICAgICAgIHRzID0gZm4odHMsIHdyYXBXaWR0aCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtaXhpbi5zdHJpbmdXaWR0aCh0cykgPCB3cmFwV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRzICs9ICcgJy5yZXBlYXQoKHdpZHRoIHx8IDApIC0gbWl4aW4uc3RyaW5nV2lkdGgodHMpIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gYXBwbHkgYm9yZGVyIGFuZCBwYWRkaW5nIHRvIHN0cmluZy5cbiAgICAgICAgICAgICAgICBjb25zdCBwYWRkaW5nID0gcm93W2NdLnBhZGRpbmcgfHwgWzAsIDAsIDAsIDBdO1xuICAgICAgICAgICAgICAgIGlmIChwYWRkaW5nW2xlZnRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciArPSAnICcucmVwZWF0KHBhZGRpbmdbbGVmdF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdHIgKz0gYWRkQm9yZGVyKHJvd1tjXSwgdHMsICd8ICcpO1xuICAgICAgICAgICAgICAgIHN0ciArPSB0cztcbiAgICAgICAgICAgICAgICBzdHIgKz0gYWRkQm9yZGVyKHJvd1tjXSwgdHMsICcgfCcpO1xuICAgICAgICAgICAgICAgIGlmIChwYWRkaW5nW3JpZ2h0XSkge1xuICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJyAnLnJlcGVhdChwYWRkaW5nW3JpZ2h0XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGlmIHByaW9yIHJvdyBpcyBzcGFuLCB0cnkgdG8gcmVuZGVyIHRoZVxuICAgICAgICAgICAgICAgIC8vIGN1cnJlbnQgcm93IG9uIHRoZSBwcmlvciBsaW5lLlxuICAgICAgICAgICAgICAgIGlmIChyID09PSAwICYmIGxpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gdGhpcy5yZW5kZXJJbmxpbmUoc3RyLCBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZS5cbiAgICAgICAgICAgIGxpbmVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHRleHQ6IHN0ci5yZXBsYWNlKC8gKyQvLCAnJyksXG4gICAgICAgICAgICAgICAgc3Bhbjogcm93LnNwYW5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGxpbmVzO1xuICAgIH1cbiAgICAvLyBpZiB0aGUgZnVsbCAnc291cmNlJyBjYW4gcmVuZGVyIGluXG4gICAgLy8gdGhlIHRhcmdldCBsaW5lLCBkbyBzby5cbiAgICByZW5kZXJJbmxpbmUoc291cmNlLCBwcmV2aW91c0xpbmUpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBzb3VyY2UubWF0Y2goL14gKi8pO1xuICAgICAgICBjb25zdCBsZWFkaW5nV2hpdGVzcGFjZSA9IG1hdGNoID8gbWF0Y2hbMF0ubGVuZ3RoIDogMDtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gcHJldmlvdXNMaW5lLnRleHQ7XG4gICAgICAgIGNvbnN0IHRhcmdldFRleHRXaWR0aCA9IG1peGluLnN0cmluZ1dpZHRoKHRhcmdldC50cmltUmlnaHQoKSk7XG4gICAgICAgIGlmICghcHJldmlvdXNMaW5lLnNwYW4pIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgd2UncmUgbm90IGFwcGx5aW5nIHdyYXBwaW5nIGxvZ2ljLFxuICAgICAgICAvLyBqdXN0IGFsd2F5cyBhcHBlbmQgdG8gdGhlIHNwYW4uXG4gICAgICAgIGlmICghdGhpcy53cmFwKSB7XG4gICAgICAgICAgICBwcmV2aW91c0xpbmUuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQgKyBzb3VyY2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxlYWRpbmdXaGl0ZXNwYWNlIDwgdGFyZ2V0VGV4dFdpZHRoKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlO1xuICAgICAgICB9XG4gICAgICAgIHByZXZpb3VzTGluZS5oaWRkZW4gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGFyZ2V0LnRyaW1SaWdodCgpICsgJyAnLnJlcGVhdChsZWFkaW5nV2hpdGVzcGFjZSAtIHRhcmdldFRleHRXaWR0aCkgKyBzb3VyY2UudHJpbUxlZnQoKTtcbiAgICB9XG4gICAgcmFzdGVyaXplKHJvdykge1xuICAgICAgICBjb25zdCBycm93cyA9IFtdO1xuICAgICAgICBjb25zdCB3aWR0aHMgPSB0aGlzLmNvbHVtbldpZHRocyhyb3cpO1xuICAgICAgICBsZXQgd3JhcHBlZDtcbiAgICAgICAgLy8gd29yZCB3cmFwIGFsbCBjb2x1bW5zLCBhbmQgY3JlYXRlXG4gICAgICAgIC8vIGEgZGF0YS1zdHJ1Y3R1cmUgdGhhdCBpcyBlYXN5IHRvIHJhc3Rlcml6ZS5cbiAgICAgICAgcm93LmZvckVhY2goKGNvbCwgYykgPT4ge1xuICAgICAgICAgICAgLy8gbGVhdmUgcm9vbSBmb3IgbGVmdCBhbmQgcmlnaHQgcGFkZGluZy5cbiAgICAgICAgICAgIGNvbC53aWR0aCA9IHdpZHRoc1tjXTtcbiAgICAgICAgICAgIGlmICh0aGlzLndyYXApIHtcbiAgICAgICAgICAgICAgICB3cmFwcGVkID0gbWl4aW4ud3JhcChjb2wudGV4dCwgdGhpcy5uZWdhdGVQYWRkaW5nKGNvbCksIHsgaGFyZDogdHJ1ZSB9KS5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB3cmFwcGVkID0gY29sLnRleHQuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbC5ib3JkZXIpIHtcbiAgICAgICAgICAgICAgICB3cmFwcGVkLnVuc2hpZnQoJy4nICsgJy0nLnJlcGVhdCh0aGlzLm5lZ2F0ZVBhZGRpbmcoY29sKSArIDIpICsgJy4nKTtcbiAgICAgICAgICAgICAgICB3cmFwcGVkLnB1c2goXCInXCIgKyAnLScucmVwZWF0KHRoaXMubmVnYXRlUGFkZGluZyhjb2wpICsgMikgKyBcIidcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhZGQgdG9wIGFuZCBib3R0b20gcGFkZGluZy5cbiAgICAgICAgICAgIGlmIChjb2wucGFkZGluZykge1xuICAgICAgICAgICAgICAgIHdyYXBwZWQudW5zaGlmdCguLi5uZXcgQXJyYXkoY29sLnBhZGRpbmdbdG9wXSB8fCAwKS5maWxsKCcnKSk7XG4gICAgICAgICAgICAgICAgd3JhcHBlZC5wdXNoKC4uLm5ldyBBcnJheShjb2wucGFkZGluZ1tib3R0b21dIHx8IDApLmZpbGwoJycpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdyYXBwZWQuZm9yRWFjaCgoc3RyLCByKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFycm93c1tyXSkge1xuICAgICAgICAgICAgICAgICAgICBycm93cy5wdXNoKFtdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcnJvdyA9IHJyb3dzW3JdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYzsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChycm93W2ldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJyb3cucHVzaCgnJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcnJvdy5wdXNoKHN0cik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBycm93cztcbiAgICB9XG4gICAgbmVnYXRlUGFkZGluZyhjb2wpIHtcbiAgICAgICAgbGV0IHdyYXBXaWR0aCA9IGNvbC53aWR0aCB8fCAwO1xuICAgICAgICBpZiAoY29sLnBhZGRpbmcpIHtcbiAgICAgICAgICAgIHdyYXBXaWR0aCAtPSAoY29sLnBhZGRpbmdbbGVmdF0gfHwgMCkgKyAoY29sLnBhZGRpbmdbcmlnaHRdIHx8IDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2wuYm9yZGVyKSB7XG4gICAgICAgICAgICB3cmFwV2lkdGggLT0gNDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd3JhcFdpZHRoO1xuICAgIH1cbiAgICBjb2x1bW5XaWR0aHMocm93KSB7XG4gICAgICAgIGlmICghdGhpcy53cmFwKSB7XG4gICAgICAgICAgICByZXR1cm4gcm93Lm1hcChjb2wgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2wud2lkdGggfHwgbWl4aW4uc3RyaW5nV2lkdGgoY29sLnRleHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHVuc2V0ID0gcm93Lmxlbmd0aDtcbiAgICAgICAgbGV0IHJlbWFpbmluZ1dpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgICAgLy8gY29sdW1uIHdpZHRocyBjYW4gYmUgc2V0IGluIGNvbmZpZy5cbiAgICAgICAgY29uc3Qgd2lkdGhzID0gcm93Lm1hcChjb2wgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbC53aWR0aCkge1xuICAgICAgICAgICAgICAgIHVuc2V0LS07XG4gICAgICAgICAgICAgICAgcmVtYWluaW5nV2lkdGggLT0gY29sLndpZHRoO1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2wud2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gYW55IHVuc2V0IHdpZHRocyBzaG91bGQgYmUgY2FsY3VsYXRlZC5cbiAgICAgICAgY29uc3QgdW5zZXRXaWR0aCA9IHVuc2V0ID8gTWF0aC5mbG9vcihyZW1haW5pbmdXaWR0aCAvIHVuc2V0KSA6IDA7XG4gICAgICAgIHJldHVybiB3aWR0aHMubWFwKCh3LCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAodyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KHVuc2V0V2lkdGgsIF9taW5XaWR0aChyb3dbaV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB3O1xuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiBhZGRCb3JkZXIoY29sLCB0cywgc3R5bGUpIHtcbiAgICBpZiAoY29sLmJvcmRlcikge1xuICAgICAgICBpZiAoL1suJ10tK1suJ10vLnRlc3QodHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRzLnRyaW0oKS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyAgJztcbiAgICB9XG4gICAgcmV0dXJuICcnO1xufVxuLy8gY2FsY3VsYXRlcyB0aGUgbWluaW11bSB3aWR0aCBvZlxuLy8gYSBjb2x1bW4sIGJhc2VkIG9uIHBhZGRpbmcgcHJlZmVyZW5jZXMuXG5mdW5jdGlvbiBfbWluV2lkdGgoY29sKSB7XG4gICAgY29uc3QgcGFkZGluZyA9IGNvbC5wYWRkaW5nIHx8IFtdO1xuICAgIGNvbnN0IG1pbldpZHRoID0gMSArIChwYWRkaW5nW2xlZnRdIHx8IDApICsgKHBhZGRpbmdbcmlnaHRdIHx8IDApO1xuICAgIGlmIChjb2wuYm9yZGVyKSB7XG4gICAgICAgIHJldHVybiBtaW5XaWR0aCArIDQ7XG4gICAgfVxuICAgIHJldHVybiBtaW5XaWR0aDtcbn1cbmZ1bmN0aW9uIGdldFdpbmRvd1dpZHRoKCkge1xuICAgIC8qIGM4IGlnbm9yZSBuZXh0IDU6IGRlcGVuZHMgb24gdGVybWluYWwgKi9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3Muc3Rkb3V0ICYmIHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMpIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnM7XG4gICAgfVxuICAgIHJldHVybiA4MDtcbn1cbmZ1bmN0aW9uIGFsaWduUmlnaHQoc3RyLCB3aWR0aCkge1xuICAgIHN0ciA9IHN0ci50cmltKCk7XG4gICAgY29uc3Qgc3RyV2lkdGggPSBtaXhpbi5zdHJpbmdXaWR0aChzdHIpO1xuICAgIGlmIChzdHJXaWR0aCA8IHdpZHRoKSB7XG4gICAgICAgIHJldHVybiAnICcucmVwZWF0KHdpZHRoIC0gc3RyV2lkdGgpICsgc3RyO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuZnVuY3Rpb24gYWxpZ25DZW50ZXIoc3RyLCB3aWR0aCkge1xuICAgIHN0ciA9IHN0ci50cmltKCk7XG4gICAgY29uc3Qgc3RyV2lkdGggPSBtaXhpbi5zdHJpbmdXaWR0aChzdHIpO1xuICAgIC8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbiAgICBpZiAoc3RyV2lkdGggPj0gd2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgcmV0dXJuICcgJy5yZXBlYXQoKHdpZHRoIC0gc3RyV2lkdGgpID4+IDEpICsgc3RyO1xufVxubGV0IG1peGluO1xuZXhwb3J0IGZ1bmN0aW9uIGNsaXVpKG9wdHMsIF9taXhpbikge1xuICAgIG1peGluID0gX21peGluO1xuICAgIHJldHVybiBuZXcgVUkoe1xuICAgICAgICB3aWR0aDogKG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0cy53aWR0aCkgfHwgZ2V0V2luZG93V2lkdGgoKSxcbiAgICAgICAgd3JhcDogb3B0cyA9PT0gbnVsbCB8fCBvcHRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRzLndyYXBcbiAgICB9KTtcbn1cbiIsImltcG9ydCBhbnNpUmVnZXggZnJvbSAnYW5zaS1yZWdleCc7XG5cbmNvbnN0IHJlZ2V4ID0gYW5zaVJlZ2V4KCk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0cmlwQW5zaShzdHJpbmcpIHtcblx0aWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgYSBcXGBzdHJpbmdcXGAsIGdvdCBcXGAke3R5cGVvZiBzdHJpbmd9XFxgYCk7XG5cdH1cblxuXHQvLyBFdmVuIHRob3VnaCB0aGUgcmVnZXggaXMgZ2xvYmFsLCB3ZSBkb24ndCBuZWVkIHRvIHJlc2V0IHRoZSBgLmxhc3RJbmRleGBcblx0Ly8gYmVjYXVzZSB1bmxpa2UgYC5leGVjKClgIGFuZCBgLnRlc3QoKWAsIGAucmVwbGFjZSgpYCBkb2VzIGl0IGF1dG9tYXRpY2FsbHlcblx0Ly8gYW5kIGRvaW5nIGl0IG1hbnVhbGx5IGhhcyBhIHBlcmZvcm1hbmNlIHBlbmFsdHkuXG5cdHJldHVybiBzdHJpbmcucmVwbGFjZShyZWdleCwgJycpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYW5zaVJlZ2V4KHtvbmx5Rmlyc3QgPSBmYWxzZX0gPSB7fSkge1xuXHQvLyBWYWxpZCBzdHJpbmcgdGVybWluYXRvciBzZXF1ZW5jZXMgYXJlIEJFTCwgRVNDXFwsIGFuZCAweDljXG5cdGNvbnN0IFNUID0gJyg/OlxcXFx1MDAwN3xcXFxcdTAwMUJcXFxcdTAwNUN8XFxcXHUwMDlDKSc7XG5cdGNvbnN0IHBhdHRlcm4gPSBbXG5cdFx0YFtcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopPyR7U1R9KWAsXG5cdFx0Jyg/Oig/OlxcXFxkezEsNH0oPzo7XFxcXGR7MCw0fSkqKT9bXFxcXGRBLVBSLVRaY2YtbnEtdXk9Pjx+XSkpJyxcblx0XS5qb2luKCd8Jyk7XG5cblx0cmV0dXJuIG5ldyBSZWdFeHAocGF0dGVybiwgb25seUZpcnN0ID8gdW5kZWZpbmVkIDogJ2cnKTtcbn1cbiIsImltcG9ydCB7Z2V0Q2F0ZWdvcnksIGlzQW1iaWd1b3VzLCBpc0Z1bGxXaWR0aCwgaXNXaWRlfSBmcm9tICcuL2xvb2t1cC5qcyc7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlKGNvZGVQb2ludCkge1xuXHRpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGNvZGVQb2ludCkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBhIGNvZGUgcG9pbnQsIGdvdCBcXGAke3R5cGVvZiBjb2RlUG9pbnR9XFxgLmApO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlYXN0QXNpYW5XaWR0aFR5cGUoY29kZVBvaW50KSB7XG5cdHZhbGlkYXRlKGNvZGVQb2ludCk7XG5cblx0cmV0dXJuIGdldENhdGVnb3J5KGNvZGVQb2ludCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlYXN0QXNpYW5XaWR0aChjb2RlUG9pbnQsIHthbWJpZ3VvdXNBc1dpZGUgPSBmYWxzZX0gPSB7fSkge1xuXHR2YWxpZGF0ZShjb2RlUG9pbnQpO1xuXG5cdGlmIChcblx0XHRpc0Z1bGxXaWR0aChjb2RlUG9pbnQpXG5cdFx0fHwgaXNXaWRlKGNvZGVQb2ludClcblx0XHR8fCAoYW1iaWd1b3VzQXNXaWRlICYmIGlzQW1iaWd1b3VzKGNvZGVQb2ludCkpXG5cdCkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cblx0cmV0dXJuIDE7XG59XG5cbi8vIEZvciBQcmV0dGllci4gVGhpcyBkb2Vzbid0IGNvdW50IFwiYW1iaWd1b3VzXCIgY2hhcmFjdGVycyBvciBjaGVjayBmb3IgdmFsaWQgaW5wdXQuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2dldC1lYXN0LWFzaWFuLXdpZHRoL3B1bGwvNlxuZXhwb3J0IGNvbnN0IF9pc05hcnJvd1dpZHRoID0gY29kZVBvaW50ID0+ICEoaXNGdWxsV2lkdGgoY29kZVBvaW50KSB8fCBpc1dpZGUoY29kZVBvaW50KSk7XG4iLCIvLyBHZW5lcmF0ZWQgY29kZS5cblxuZnVuY3Rpb24gaXNBbWJpZ3VvdXMoeCkge1xuXHRyZXR1cm4geCA9PT0gMHhBMVxuXHRcdHx8IHggPT09IDB4QTRcblx0XHR8fCB4ID09PSAweEE3XG5cdFx0fHwgeCA9PT0gMHhBOFxuXHRcdHx8IHggPT09IDB4QUFcblx0XHR8fCB4ID09PSAweEFEXG5cdFx0fHwgeCA9PT0gMHhBRVxuXHRcdHx8IHggPj0gMHhCMCAmJiB4IDw9IDB4QjRcblx0XHR8fCB4ID49IDB4QjYgJiYgeCA8PSAweEJBXG5cdFx0fHwgeCA+PSAweEJDICYmIHggPD0gMHhCRlxuXHRcdHx8IHggPT09IDB4QzZcblx0XHR8fCB4ID09PSAweEQwXG5cdFx0fHwgeCA9PT0gMHhEN1xuXHRcdHx8IHggPT09IDB4RDhcblx0XHR8fCB4ID49IDB4REUgJiYgeCA8PSAweEUxXG5cdFx0fHwgeCA9PT0gMHhFNlxuXHRcdHx8IHggPj0gMHhFOCAmJiB4IDw9IDB4RUFcblx0XHR8fCB4ID09PSAweEVDXG5cdFx0fHwgeCA9PT0gMHhFRFxuXHRcdHx8IHggPT09IDB4RjBcblx0XHR8fCB4ID09PSAweEYyXG5cdFx0fHwgeCA9PT0gMHhGM1xuXHRcdHx8IHggPj0gMHhGNyAmJiB4IDw9IDB4RkFcblx0XHR8fCB4ID09PSAweEZDXG5cdFx0fHwgeCA9PT0gMHhGRVxuXHRcdHx8IHggPT09IDB4MTAxXG5cdFx0fHwgeCA9PT0gMHgxMTFcblx0XHR8fCB4ID09PSAweDExM1xuXHRcdHx8IHggPT09IDB4MTFCXG5cdFx0fHwgeCA9PT0gMHgxMjZcblx0XHR8fCB4ID09PSAweDEyN1xuXHRcdHx8IHggPT09IDB4MTJCXG5cdFx0fHwgeCA+PSAweDEzMSAmJiB4IDw9IDB4MTMzXG5cdFx0fHwgeCA9PT0gMHgxMzhcblx0XHR8fCB4ID49IDB4MTNGICYmIHggPD0gMHgxNDJcblx0XHR8fCB4ID09PSAweDE0NFxuXHRcdHx8IHggPj0gMHgxNDggJiYgeCA8PSAweDE0QlxuXHRcdHx8IHggPT09IDB4MTREXG5cdFx0fHwgeCA9PT0gMHgxNTJcblx0XHR8fCB4ID09PSAweDE1M1xuXHRcdHx8IHggPT09IDB4MTY2XG5cdFx0fHwgeCA9PT0gMHgxNjdcblx0XHR8fCB4ID09PSAweDE2QlxuXHRcdHx8IHggPT09IDB4MUNFXG5cdFx0fHwgeCA9PT0gMHgxRDBcblx0XHR8fCB4ID09PSAweDFEMlxuXHRcdHx8IHggPT09IDB4MUQ0XG5cdFx0fHwgeCA9PT0gMHgxRDZcblx0XHR8fCB4ID09PSAweDFEOFxuXHRcdHx8IHggPT09IDB4MURBXG5cdFx0fHwgeCA9PT0gMHgxRENcblx0XHR8fCB4ID09PSAweDI1MVxuXHRcdHx8IHggPT09IDB4MjYxXG5cdFx0fHwgeCA9PT0gMHgyQzRcblx0XHR8fCB4ID09PSAweDJDN1xuXHRcdHx8IHggPj0gMHgyQzkgJiYgeCA8PSAweDJDQlxuXHRcdHx8IHggPT09IDB4MkNEXG5cdFx0fHwgeCA9PT0gMHgyRDBcblx0XHR8fCB4ID49IDB4MkQ4ICYmIHggPD0gMHgyREJcblx0XHR8fCB4ID09PSAweDJERFxuXHRcdHx8IHggPT09IDB4MkRGXG5cdFx0fHwgeCA+PSAweDMwMCAmJiB4IDw9IDB4MzZGXG5cdFx0fHwgeCA+PSAweDM5MSAmJiB4IDw9IDB4M0ExXG5cdFx0fHwgeCA+PSAweDNBMyAmJiB4IDw9IDB4M0E5XG5cdFx0fHwgeCA+PSAweDNCMSAmJiB4IDw9IDB4M0MxXG5cdFx0fHwgeCA+PSAweDNDMyAmJiB4IDw9IDB4M0M5XG5cdFx0fHwgeCA9PT0gMHg0MDFcblx0XHR8fCB4ID49IDB4NDEwICYmIHggPD0gMHg0NEZcblx0XHR8fCB4ID09PSAweDQ1MVxuXHRcdHx8IHggPT09IDB4MjAxMFxuXHRcdHx8IHggPj0gMHgyMDEzICYmIHggPD0gMHgyMDE2XG5cdFx0fHwgeCA9PT0gMHgyMDE4XG5cdFx0fHwgeCA9PT0gMHgyMDE5XG5cdFx0fHwgeCA9PT0gMHgyMDFDXG5cdFx0fHwgeCA9PT0gMHgyMDFEXG5cdFx0fHwgeCA+PSAweDIwMjAgJiYgeCA8PSAweDIwMjJcblx0XHR8fCB4ID49IDB4MjAyNCAmJiB4IDw9IDB4MjAyN1xuXHRcdHx8IHggPT09IDB4MjAzMFxuXHRcdHx8IHggPT09IDB4MjAzMlxuXHRcdHx8IHggPT09IDB4MjAzM1xuXHRcdHx8IHggPT09IDB4MjAzNVxuXHRcdHx8IHggPT09IDB4MjAzQlxuXHRcdHx8IHggPT09IDB4MjAzRVxuXHRcdHx8IHggPT09IDB4MjA3NFxuXHRcdHx8IHggPT09IDB4MjA3RlxuXHRcdHx8IHggPj0gMHgyMDgxICYmIHggPD0gMHgyMDg0XG5cdFx0fHwgeCA9PT0gMHgyMEFDXG5cdFx0fHwgeCA9PT0gMHgyMTAzXG5cdFx0fHwgeCA9PT0gMHgyMTA1XG5cdFx0fHwgeCA9PT0gMHgyMTA5XG5cdFx0fHwgeCA9PT0gMHgyMTEzXG5cdFx0fHwgeCA9PT0gMHgyMTE2XG5cdFx0fHwgeCA9PT0gMHgyMTIxXG5cdFx0fHwgeCA9PT0gMHgyMTIyXG5cdFx0fHwgeCA9PT0gMHgyMTI2XG5cdFx0fHwgeCA9PT0gMHgyMTJCXG5cdFx0fHwgeCA9PT0gMHgyMTUzXG5cdFx0fHwgeCA9PT0gMHgyMTU0XG5cdFx0fHwgeCA+PSAweDIxNUIgJiYgeCA8PSAweDIxNUVcblx0XHR8fCB4ID49IDB4MjE2MCAmJiB4IDw9IDB4MjE2QlxuXHRcdHx8IHggPj0gMHgyMTcwICYmIHggPD0gMHgyMTc5XG5cdFx0fHwgeCA9PT0gMHgyMTg5XG5cdFx0fHwgeCA+PSAweDIxOTAgJiYgeCA8PSAweDIxOTlcblx0XHR8fCB4ID09PSAweDIxQjhcblx0XHR8fCB4ID09PSAweDIxQjlcblx0XHR8fCB4ID09PSAweDIxRDJcblx0XHR8fCB4ID09PSAweDIxRDRcblx0XHR8fCB4ID09PSAweDIxRTdcblx0XHR8fCB4ID09PSAweDIyMDBcblx0XHR8fCB4ID09PSAweDIyMDJcblx0XHR8fCB4ID09PSAweDIyMDNcblx0XHR8fCB4ID09PSAweDIyMDdcblx0XHR8fCB4ID09PSAweDIyMDhcblx0XHR8fCB4ID09PSAweDIyMEJcblx0XHR8fCB4ID09PSAweDIyMEZcblx0XHR8fCB4ID09PSAweDIyMTFcblx0XHR8fCB4ID09PSAweDIyMTVcblx0XHR8fCB4ID09PSAweDIyMUFcblx0XHR8fCB4ID49IDB4MjIxRCAmJiB4IDw9IDB4MjIyMFxuXHRcdHx8IHggPT09IDB4MjIyM1xuXHRcdHx8IHggPT09IDB4MjIyNVxuXHRcdHx8IHggPj0gMHgyMjI3ICYmIHggPD0gMHgyMjJDXG5cdFx0fHwgeCA9PT0gMHgyMjJFXG5cdFx0fHwgeCA+PSAweDIyMzQgJiYgeCA8PSAweDIyMzdcblx0XHR8fCB4ID09PSAweDIyM0Ncblx0XHR8fCB4ID09PSAweDIyM0Rcblx0XHR8fCB4ID09PSAweDIyNDhcblx0XHR8fCB4ID09PSAweDIyNENcblx0XHR8fCB4ID09PSAweDIyNTJcblx0XHR8fCB4ID09PSAweDIyNjBcblx0XHR8fCB4ID09PSAweDIyNjFcblx0XHR8fCB4ID49IDB4MjI2NCAmJiB4IDw9IDB4MjI2N1xuXHRcdHx8IHggPT09IDB4MjI2QVxuXHRcdHx8IHggPT09IDB4MjI2QlxuXHRcdHx8IHggPT09IDB4MjI2RVxuXHRcdHx8IHggPT09IDB4MjI2RlxuXHRcdHx8IHggPT09IDB4MjI4MlxuXHRcdHx8IHggPT09IDB4MjI4M1xuXHRcdHx8IHggPT09IDB4MjI4NlxuXHRcdHx8IHggPT09IDB4MjI4N1xuXHRcdHx8IHggPT09IDB4MjI5NVxuXHRcdHx8IHggPT09IDB4MjI5OVxuXHRcdHx8IHggPT09IDB4MjJBNVxuXHRcdHx8IHggPT09IDB4MjJCRlxuXHRcdHx8IHggPT09IDB4MjMxMlxuXHRcdHx8IHggPj0gMHgyNDYwICYmIHggPD0gMHgyNEU5XG5cdFx0fHwgeCA+PSAweDI0RUIgJiYgeCA8PSAweDI1NEJcblx0XHR8fCB4ID49IDB4MjU1MCAmJiB4IDw9IDB4MjU3M1xuXHRcdHx8IHggPj0gMHgyNTgwICYmIHggPD0gMHgyNThGXG5cdFx0fHwgeCA+PSAweDI1OTIgJiYgeCA8PSAweDI1OTVcblx0XHR8fCB4ID09PSAweDI1QTBcblx0XHR8fCB4ID09PSAweDI1QTFcblx0XHR8fCB4ID49IDB4MjVBMyAmJiB4IDw9IDB4MjVBOVxuXHRcdHx8IHggPT09IDB4MjVCMlxuXHRcdHx8IHggPT09IDB4MjVCM1xuXHRcdHx8IHggPT09IDB4MjVCNlxuXHRcdHx8IHggPT09IDB4MjVCN1xuXHRcdHx8IHggPT09IDB4MjVCQ1xuXHRcdHx8IHggPT09IDB4MjVCRFxuXHRcdHx8IHggPT09IDB4MjVDMFxuXHRcdHx8IHggPT09IDB4MjVDMVxuXHRcdHx8IHggPj0gMHgyNUM2ICYmIHggPD0gMHgyNUM4XG5cdFx0fHwgeCA9PT0gMHgyNUNCXG5cdFx0fHwgeCA+PSAweDI1Q0UgJiYgeCA8PSAweDI1RDFcblx0XHR8fCB4ID49IDB4MjVFMiAmJiB4IDw9IDB4MjVFNVxuXHRcdHx8IHggPT09IDB4MjVFRlxuXHRcdHx8IHggPT09IDB4MjYwNVxuXHRcdHx8IHggPT09IDB4MjYwNlxuXHRcdHx8IHggPT09IDB4MjYwOVxuXHRcdHx8IHggPT09IDB4MjYwRVxuXHRcdHx8IHggPT09IDB4MjYwRlxuXHRcdHx8IHggPT09IDB4MjYxQ1xuXHRcdHx8IHggPT09IDB4MjYxRVxuXHRcdHx8IHggPT09IDB4MjY0MFxuXHRcdHx8IHggPT09IDB4MjY0MlxuXHRcdHx8IHggPT09IDB4MjY2MFxuXHRcdHx8IHggPT09IDB4MjY2MVxuXHRcdHx8IHggPj0gMHgyNjYzICYmIHggPD0gMHgyNjY1XG5cdFx0fHwgeCA+PSAweDI2NjcgJiYgeCA8PSAweDI2NkFcblx0XHR8fCB4ID09PSAweDI2NkNcblx0XHR8fCB4ID09PSAweDI2NkRcblx0XHR8fCB4ID09PSAweDI2NkZcblx0XHR8fCB4ID09PSAweDI2OUVcblx0XHR8fCB4ID09PSAweDI2OUZcblx0XHR8fCB4ID09PSAweDI2QkZcblx0XHR8fCB4ID49IDB4MjZDNiAmJiB4IDw9IDB4MjZDRFxuXHRcdHx8IHggPj0gMHgyNkNGICYmIHggPD0gMHgyNkQzXG5cdFx0fHwgeCA+PSAweDI2RDUgJiYgeCA8PSAweDI2RTFcblx0XHR8fCB4ID09PSAweDI2RTNcblx0XHR8fCB4ID09PSAweDI2RThcblx0XHR8fCB4ID09PSAweDI2RTlcblx0XHR8fCB4ID49IDB4MjZFQiAmJiB4IDw9IDB4MjZGMVxuXHRcdHx8IHggPT09IDB4MjZGNFxuXHRcdHx8IHggPj0gMHgyNkY2ICYmIHggPD0gMHgyNkY5XG5cdFx0fHwgeCA9PT0gMHgyNkZCXG5cdFx0fHwgeCA9PT0gMHgyNkZDXG5cdFx0fHwgeCA9PT0gMHgyNkZFXG5cdFx0fHwgeCA9PT0gMHgyNkZGXG5cdFx0fHwgeCA9PT0gMHgyNzNEXG5cdFx0fHwgeCA+PSAweDI3NzYgJiYgeCA8PSAweDI3N0Zcblx0XHR8fCB4ID49IDB4MkI1NiAmJiB4IDw9IDB4MkI1OVxuXHRcdHx8IHggPj0gMHgzMjQ4ICYmIHggPD0gMHgzMjRGXG5cdFx0fHwgeCA+PSAweEUwMDAgJiYgeCA8PSAweEY4RkZcblx0XHR8fCB4ID49IDB4RkUwMCAmJiB4IDw9IDB4RkUwRlxuXHRcdHx8IHggPT09IDB4RkZGRFxuXHRcdHx8IHggPj0gMHgxRjEwMCAmJiB4IDw9IDB4MUYxMEFcblx0XHR8fCB4ID49IDB4MUYxMTAgJiYgeCA8PSAweDFGMTJEXG5cdFx0fHwgeCA+PSAweDFGMTMwICYmIHggPD0gMHgxRjE2OVxuXHRcdHx8IHggPj0gMHgxRjE3MCAmJiB4IDw9IDB4MUYxOERcblx0XHR8fCB4ID09PSAweDFGMThGXG5cdFx0fHwgeCA9PT0gMHgxRjE5MFxuXHRcdHx8IHggPj0gMHgxRjE5QiAmJiB4IDw9IDB4MUYxQUNcblx0XHR8fCB4ID49IDB4RTAxMDAgJiYgeCA8PSAweEUwMUVGXG5cdFx0fHwgeCA+PSAweEYwMDAwICYmIHggPD0gMHhGRkZGRFxuXHRcdHx8IHggPj0gMHgxMDAwMDAgJiYgeCA8PSAweDEwRkZGRDtcbn1cblxuZnVuY3Rpb24gaXNGdWxsV2lkdGgoeCkge1xuXHRyZXR1cm4geCA9PT0gMHgzMDAwXG5cdFx0fHwgeCA+PSAweEZGMDEgJiYgeCA8PSAweEZGNjBcblx0XHR8fCB4ID49IDB4RkZFMCAmJiB4IDw9IDB4RkZFNjtcbn1cblxuZnVuY3Rpb24gaXNXaWRlKHgpIHtcblx0cmV0dXJuIHggPj0gMHgxMTAwICYmIHggPD0gMHgxMTVGXG5cdFx0fHwgeCA9PT0gMHgyMzFBXG5cdFx0fHwgeCA9PT0gMHgyMzFCXG5cdFx0fHwgeCA9PT0gMHgyMzI5XG5cdFx0fHwgeCA9PT0gMHgyMzJBXG5cdFx0fHwgeCA+PSAweDIzRTkgJiYgeCA8PSAweDIzRUNcblx0XHR8fCB4ID09PSAweDIzRjBcblx0XHR8fCB4ID09PSAweDIzRjNcblx0XHR8fCB4ID09PSAweDI1RkRcblx0XHR8fCB4ID09PSAweDI1RkVcblx0XHR8fCB4ID09PSAweDI2MTRcblx0XHR8fCB4ID09PSAweDI2MTVcblx0XHR8fCB4ID49IDB4MjYzMCAmJiB4IDw9IDB4MjYzN1xuXHRcdHx8IHggPj0gMHgyNjQ4ICYmIHggPD0gMHgyNjUzXG5cdFx0fHwgeCA9PT0gMHgyNjdGXG5cdFx0fHwgeCA+PSAweDI2OEEgJiYgeCA8PSAweDI2OEZcblx0XHR8fCB4ID09PSAweDI2OTNcblx0XHR8fCB4ID09PSAweDI2QTFcblx0XHR8fCB4ID09PSAweDI2QUFcblx0XHR8fCB4ID09PSAweDI2QUJcblx0XHR8fCB4ID09PSAweDI2QkRcblx0XHR8fCB4ID09PSAweDI2QkVcblx0XHR8fCB4ID09PSAweDI2QzRcblx0XHR8fCB4ID09PSAweDI2QzVcblx0XHR8fCB4ID09PSAweDI2Q0Vcblx0XHR8fCB4ID09PSAweDI2RDRcblx0XHR8fCB4ID09PSAweDI2RUFcblx0XHR8fCB4ID09PSAweDI2RjJcblx0XHR8fCB4ID09PSAweDI2RjNcblx0XHR8fCB4ID09PSAweDI2RjVcblx0XHR8fCB4ID09PSAweDI2RkFcblx0XHR8fCB4ID09PSAweDI2RkRcblx0XHR8fCB4ID09PSAweDI3MDVcblx0XHR8fCB4ID09PSAweDI3MEFcblx0XHR8fCB4ID09PSAweDI3MEJcblx0XHR8fCB4ID09PSAweDI3Mjhcblx0XHR8fCB4ID09PSAweDI3NENcblx0XHR8fCB4ID09PSAweDI3NEVcblx0XHR8fCB4ID49IDB4Mjc1MyAmJiB4IDw9IDB4Mjc1NVxuXHRcdHx8IHggPT09IDB4Mjc1N1xuXHRcdHx8IHggPj0gMHgyNzk1ICYmIHggPD0gMHgyNzk3XG5cdFx0fHwgeCA9PT0gMHgyN0IwXG5cdFx0fHwgeCA9PT0gMHgyN0JGXG5cdFx0fHwgeCA9PT0gMHgyQjFCXG5cdFx0fHwgeCA9PT0gMHgyQjFDXG5cdFx0fHwgeCA9PT0gMHgyQjUwXG5cdFx0fHwgeCA9PT0gMHgyQjU1XG5cdFx0fHwgeCA+PSAweDJFODAgJiYgeCA8PSAweDJFOTlcblx0XHR8fCB4ID49IDB4MkU5QiAmJiB4IDw9IDB4MkVGM1xuXHRcdHx8IHggPj0gMHgyRjAwICYmIHggPD0gMHgyRkQ1XG5cdFx0fHwgeCA+PSAweDJGRjAgJiYgeCA8PSAweDJGRkZcblx0XHR8fCB4ID49IDB4MzAwMSAmJiB4IDw9IDB4MzAzRVxuXHRcdHx8IHggPj0gMHgzMDQxICYmIHggPD0gMHgzMDk2XG5cdFx0fHwgeCA+PSAweDMwOTkgJiYgeCA8PSAweDMwRkZcblx0XHR8fCB4ID49IDB4MzEwNSAmJiB4IDw9IDB4MzEyRlxuXHRcdHx8IHggPj0gMHgzMTMxICYmIHggPD0gMHgzMThFXG5cdFx0fHwgeCA+PSAweDMxOTAgJiYgeCA8PSAweDMxRTVcblx0XHR8fCB4ID49IDB4MzFFRiAmJiB4IDw9IDB4MzIxRVxuXHRcdHx8IHggPj0gMHgzMjIwICYmIHggPD0gMHgzMjQ3XG5cdFx0fHwgeCA+PSAweDMyNTAgJiYgeCA8PSAweEE0OENcblx0XHR8fCB4ID49IDB4QTQ5MCAmJiB4IDw9IDB4QTRDNlxuXHRcdHx8IHggPj0gMHhBOTYwICYmIHggPD0gMHhBOTdDXG5cdFx0fHwgeCA+PSAweEFDMDAgJiYgeCA8PSAweEQ3QTNcblx0XHR8fCB4ID49IDB4RjkwMCAmJiB4IDw9IDB4RkFGRlxuXHRcdHx8IHggPj0gMHhGRTEwICYmIHggPD0gMHhGRTE5XG5cdFx0fHwgeCA+PSAweEZFMzAgJiYgeCA8PSAweEZFNTJcblx0XHR8fCB4ID49IDB4RkU1NCAmJiB4IDw9IDB4RkU2NlxuXHRcdHx8IHggPj0gMHhGRTY4ICYmIHggPD0gMHhGRTZCXG5cdFx0fHwgeCA+PSAweDE2RkUwICYmIHggPD0gMHgxNkZFNFxuXHRcdHx8IHggPT09IDB4MTZGRjBcblx0XHR8fCB4ID09PSAweDE2RkYxXG5cdFx0fHwgeCA+PSAweDE3MDAwICYmIHggPD0gMHgxODdGN1xuXHRcdHx8IHggPj0gMHgxODgwMCAmJiB4IDw9IDB4MThDRDVcblx0XHR8fCB4ID49IDB4MThDRkYgJiYgeCA8PSAweDE4RDA4XG5cdFx0fHwgeCA+PSAweDFBRkYwICYmIHggPD0gMHgxQUZGM1xuXHRcdHx8IHggPj0gMHgxQUZGNSAmJiB4IDw9IDB4MUFGRkJcblx0XHR8fCB4ID09PSAweDFBRkZEXG5cdFx0fHwgeCA9PT0gMHgxQUZGRVxuXHRcdHx8IHggPj0gMHgxQjAwMCAmJiB4IDw9IDB4MUIxMjJcblx0XHR8fCB4ID09PSAweDFCMTMyXG5cdFx0fHwgeCA+PSAweDFCMTUwICYmIHggPD0gMHgxQjE1MlxuXHRcdHx8IHggPT09IDB4MUIxNTVcblx0XHR8fCB4ID49IDB4MUIxNjQgJiYgeCA8PSAweDFCMTY3XG5cdFx0fHwgeCA+PSAweDFCMTcwICYmIHggPD0gMHgxQjJGQlxuXHRcdHx8IHggPj0gMHgxRDMwMCAmJiB4IDw9IDB4MUQzNTZcblx0XHR8fCB4ID49IDB4MUQzNjAgJiYgeCA8PSAweDFEMzc2XG5cdFx0fHwgeCA9PT0gMHgxRjAwNFxuXHRcdHx8IHggPT09IDB4MUYwQ0Zcblx0XHR8fCB4ID09PSAweDFGMThFXG5cdFx0fHwgeCA+PSAweDFGMTkxICYmIHggPD0gMHgxRjE5QVxuXHRcdHx8IHggPj0gMHgxRjIwMCAmJiB4IDw9IDB4MUYyMDJcblx0XHR8fCB4ID49IDB4MUYyMTAgJiYgeCA8PSAweDFGMjNCXG5cdFx0fHwgeCA+PSAweDFGMjQwICYmIHggPD0gMHgxRjI0OFxuXHRcdHx8IHggPT09IDB4MUYyNTBcblx0XHR8fCB4ID09PSAweDFGMjUxXG5cdFx0fHwgeCA+PSAweDFGMjYwICYmIHggPD0gMHgxRjI2NVxuXHRcdHx8IHggPj0gMHgxRjMwMCAmJiB4IDw9IDB4MUYzMjBcblx0XHR8fCB4ID49IDB4MUYzMkQgJiYgeCA8PSAweDFGMzM1XG5cdFx0fHwgeCA+PSAweDFGMzM3ICYmIHggPD0gMHgxRjM3Q1xuXHRcdHx8IHggPj0gMHgxRjM3RSAmJiB4IDw9IDB4MUYzOTNcblx0XHR8fCB4ID49IDB4MUYzQTAgJiYgeCA8PSAweDFGM0NBXG5cdFx0fHwgeCA+PSAweDFGM0NGICYmIHggPD0gMHgxRjNEM1xuXHRcdHx8IHggPj0gMHgxRjNFMCAmJiB4IDw9IDB4MUYzRjBcblx0XHR8fCB4ID09PSAweDFGM0Y0XG5cdFx0fHwgeCA+PSAweDFGM0Y4ICYmIHggPD0gMHgxRjQzRVxuXHRcdHx8IHggPT09IDB4MUY0NDBcblx0XHR8fCB4ID49IDB4MUY0NDIgJiYgeCA8PSAweDFGNEZDXG5cdFx0fHwgeCA+PSAweDFGNEZGICYmIHggPD0gMHgxRjUzRFxuXHRcdHx8IHggPj0gMHgxRjU0QiAmJiB4IDw9IDB4MUY1NEVcblx0XHR8fCB4ID49IDB4MUY1NTAgJiYgeCA8PSAweDFGNTY3XG5cdFx0fHwgeCA9PT0gMHgxRjU3QVxuXHRcdHx8IHggPT09IDB4MUY1OTVcblx0XHR8fCB4ID09PSAweDFGNTk2XG5cdFx0fHwgeCA9PT0gMHgxRjVBNFxuXHRcdHx8IHggPj0gMHgxRjVGQiAmJiB4IDw9IDB4MUY2NEZcblx0XHR8fCB4ID49IDB4MUY2ODAgJiYgeCA8PSAweDFGNkM1XG5cdFx0fHwgeCA9PT0gMHgxRjZDQ1xuXHRcdHx8IHggPj0gMHgxRjZEMCAmJiB4IDw9IDB4MUY2RDJcblx0XHR8fCB4ID49IDB4MUY2RDUgJiYgeCA8PSAweDFGNkQ3XG5cdFx0fHwgeCA+PSAweDFGNkRDICYmIHggPD0gMHgxRjZERlxuXHRcdHx8IHggPT09IDB4MUY2RUJcblx0XHR8fCB4ID09PSAweDFGNkVDXG5cdFx0fHwgeCA+PSAweDFGNkY0ICYmIHggPD0gMHgxRjZGQ1xuXHRcdHx8IHggPj0gMHgxRjdFMCAmJiB4IDw9IDB4MUY3RUJcblx0XHR8fCB4ID09PSAweDFGN0YwXG5cdFx0fHwgeCA+PSAweDFGOTBDICYmIHggPD0gMHgxRjkzQVxuXHRcdHx8IHggPj0gMHgxRjkzQyAmJiB4IDw9IDB4MUY5NDVcblx0XHR8fCB4ID49IDB4MUY5NDcgJiYgeCA8PSAweDFGOUZGXG5cdFx0fHwgeCA+PSAweDFGQTcwICYmIHggPD0gMHgxRkE3Q1xuXHRcdHx8IHggPj0gMHgxRkE4MCAmJiB4IDw9IDB4MUZBODlcblx0XHR8fCB4ID49IDB4MUZBOEYgJiYgeCA8PSAweDFGQUM2XG5cdFx0fHwgeCA+PSAweDFGQUNFICYmIHggPD0gMHgxRkFEQ1xuXHRcdHx8IHggPj0gMHgxRkFERiAmJiB4IDw9IDB4MUZBRTlcblx0XHR8fCB4ID49IDB4MUZBRjAgJiYgeCA8PSAweDFGQUY4XG5cdFx0fHwgeCA+PSAweDIwMDAwICYmIHggPD0gMHgyRkZGRFxuXHRcdHx8IHggPj0gMHgzMDAwMCAmJiB4IDw9IDB4M0ZGRkQ7XG59XG5cbmZ1bmN0aW9uIGdldENhdGVnb3J5KHgpIHtcblx0aWYgKGlzQW1iaWd1b3VzKHgpKSByZXR1cm4gJ2FtYmlndW91cyc7XG5cblx0aWYgKGlzRnVsbFdpZHRoKHgpKSByZXR1cm4gJ2Z1bGx3aWR0aCc7XG5cblx0aWYgKFxuXHRcdHggPT09IDB4MjBBOVxuXHRcdHx8IHggPj0gMHhGRjYxICYmIHggPD0gMHhGRkJFXG5cdFx0fHwgeCA+PSAweEZGQzIgJiYgeCA8PSAweEZGQzdcblx0XHR8fCB4ID49IDB4RkZDQSAmJiB4IDw9IDB4RkZDRlxuXHRcdHx8IHggPj0gMHhGRkQyICYmIHggPD0gMHhGRkQ3XG5cdFx0fHwgeCA+PSAweEZGREEgJiYgeCA8PSAweEZGRENcblx0XHR8fCB4ID49IDB4RkZFOCAmJiB4IDw9IDB4RkZFRVxuXHQpIHtcblx0XHRyZXR1cm4gJ2hhbGZ3aWR0aCc7XG5cdH1cblxuXHRpZiAoXG5cdFx0eCA+PSAweDIwICYmIHggPD0gMHg3RVxuXHRcdHx8IHggPT09IDB4QTJcblx0XHR8fCB4ID09PSAweEEzXG5cdFx0fHwgeCA9PT0gMHhBNVxuXHRcdHx8IHggPT09IDB4QTZcblx0XHR8fCB4ID09PSAweEFDXG5cdFx0fHwgeCA9PT0gMHhBRlxuXHRcdHx8IHggPj0gMHgyN0U2ICYmIHggPD0gMHgyN0VEXG5cdFx0fHwgeCA9PT0gMHgyOTg1XG5cdFx0fHwgeCA9PT0gMHgyOTg2XG5cdCkge1xuXHRcdHJldHVybiAnbmFycm93Jztcblx0fVxuXG5cdGlmIChpc1dpZGUoeCkpIHJldHVybiAnd2lkZSc7XG5cblx0cmV0dXJuICduZXV0cmFsJztcbn1cblxuZXhwb3J0IHtpc0FtYmlndW91cywgaXNGdWxsV2lkdGgsIGlzV2lkZSwgZ2V0Q2F0ZWdvcnl9O1xuIiwiZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuXHQvLyBodHRwczovL210aHMuYmUvZW1vamlcblx0cmV0dXJuIC9bIyowLTldXFx1RkUwRj9cXHUyMEUzfFtcXHhBOVxceEFFXFx1MjAzQ1xcdTIwNDlcXHUyMTIyXFx1MjEzOVxcdTIxOTQtXFx1MjE5OVxcdTIxQTlcXHUyMUFBXFx1MjMxQVxcdTIzMUJcXHUyMzI4XFx1MjNDRlxcdTIzRUQtXFx1MjNFRlxcdTIzRjFcXHUyM0YyXFx1MjNGOC1cXHUyM0ZBXFx1MjRDMlxcdTI1QUFcXHUyNUFCXFx1MjVCNlxcdTI1QzBcXHUyNUZCXFx1MjVGQ1xcdTI1RkVcXHUyNjAwLVxcdTI2MDRcXHUyNjBFXFx1MjYxMVxcdTI2MTRcXHUyNjE1XFx1MjYxOFxcdTI2MjBcXHUyNjIyXFx1MjYyM1xcdTI2MjZcXHUyNjJBXFx1MjYyRVxcdTI2MkZcXHUyNjM4LVxcdTI2M0FcXHUyNjQwXFx1MjY0MlxcdTI2NDgtXFx1MjY1M1xcdTI2NUZcXHUyNjYwXFx1MjY2M1xcdTI2NjVcXHUyNjY2XFx1MjY2OFxcdTI2N0JcXHUyNjdFXFx1MjY3RlxcdTI2OTJcXHUyNjk0LVxcdTI2OTdcXHUyNjk5XFx1MjY5QlxcdTI2OUNcXHUyNkEwXFx1MjZBN1xcdTI2QUFcXHUyNkIwXFx1MjZCMVxcdTI2QkRcXHUyNkJFXFx1MjZDNFxcdTI2QzhcXHUyNkNGXFx1MjZEMVxcdTI2RTlcXHUyNkYwLVxcdTI2RjVcXHUyNkY3XFx1MjZGOFxcdTI2RkFcXHUyNzAyXFx1MjcwOFxcdTI3MDlcXHUyNzBGXFx1MjcxMlxcdTI3MTRcXHUyNzE2XFx1MjcxRFxcdTI3MjFcXHUyNzMzXFx1MjczNFxcdTI3NDRcXHUyNzQ3XFx1Mjc1N1xcdTI3NjNcXHUyN0ExXFx1MjkzNFxcdTI5MzVcXHUyQjA1LVxcdTJCMDdcXHUyQjFCXFx1MkIxQ1xcdTJCNTVcXHUzMDMwXFx1MzAzRFxcdTMyOTdcXHUzMjk5XVxcdUZFMEY/fFtcXHUyNjFEXFx1MjcwQ1xcdTI3MERdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUZFMEYpP3xbXFx1MjcwQVxcdTI3MEJdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdTIzRTktXFx1MjNFQ1xcdTIzRjBcXHUyM0YzXFx1MjVGRFxcdTI2OTNcXHUyNkExXFx1MjZBQlxcdTI2QzVcXHUyNkNFXFx1MjZENFxcdTI2RUFcXHUyNkZEXFx1MjcwNVxcdTI3MjhcXHUyNzRDXFx1Mjc0RVxcdTI3NTMtXFx1Mjc1NVxcdTI3OTUtXFx1Mjc5N1xcdTI3QjBcXHUyN0JGXFx1MkI1MF18XFx1MjZEM1xcdUZFMEY/KD86XFx1MjAwRFxcdUQ4M0RcXHVEQ0E1KT98XFx1MjZGOSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVGRTBGKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98XFx1Mjc2NFxcdUZFMEY/KD86XFx1MjAwRCg/OlxcdUQ4M0RcXHVERDI1fFxcdUQ4M0VcXHVERTc5KSk/fFxcdUQ4M0MoPzpbXFx1REMwNFxcdURENzBcXHVERDcxXFx1REQ3RVxcdUREN0ZcXHVERTAyXFx1REUzN1xcdURGMjFcXHVERjI0LVxcdURGMkNcXHVERjM2XFx1REY3RFxcdURGOTZcXHVERjk3XFx1REY5OS1cXHVERjlCXFx1REY5RVxcdURGOUZcXHVERkNEXFx1REZDRVxcdURGRDQtXFx1REZERlxcdURGRjVcXHVERkY3XVxcdUZFMEY/fFtcXHVERjg1XFx1REZDMlxcdURGQzddKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdURGQzRcXHVERkNBXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVERkNCXFx1REZDQ10oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RkUwRik/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVEQ0NGXFx1REQ4RVxcdUREOTEtXFx1REQ5QVxcdURFMDFcXHVERTFBXFx1REUyRlxcdURFMzItXFx1REUzNlxcdURFMzgtXFx1REUzQVxcdURFNTBcXHVERTUxXFx1REYwMC1cXHVERjIwXFx1REYyRC1cXHVERjM1XFx1REYzNy1cXHVERjQzXFx1REY0NS1cXHVERjRBXFx1REY0Qy1cXHVERjdDXFx1REY3RS1cXHVERjg0XFx1REY4Ni1cXHVERjkzXFx1REZBMC1cXHVERkMxXFx1REZDNVxcdURGQzZcXHVERkM4XFx1REZDOVxcdURGQ0YtXFx1REZEM1xcdURGRTAtXFx1REZGMFxcdURGRjgtXFx1REZGRl18XFx1RERFNlxcdUQ4M0NbXFx1RERFOC1cXHVEREVDXFx1RERFRVxcdURERjFcXHVEREYyXFx1RERGNFxcdURERjYtXFx1RERGQVxcdURERkNcXHVEREZEXFx1RERGRl18XFx1RERFN1xcdUQ4M0NbXFx1RERFNlxcdURERTdcXHVEREU5LVxcdURERUZcXHVEREYxLVxcdURERjRcXHVEREY2LVxcdURERjlcXHVEREZCXFx1RERGQ1xcdURERkVcXHVEREZGXXxcXHVEREU4XFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERTlcXHVEREVCLVxcdURERUVcXHVEREYwLVxcdURERjdcXHVEREZBLVxcdURERkZdfFxcdURERTlcXHVEODNDW1xcdURERUFcXHVEREVDXFx1RERFRlxcdURERjBcXHVEREYyXFx1RERGNFxcdURERkZdfFxcdURERUFcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQVxcdURERUNcXHVEREVEXFx1RERGNy1cXHVEREZBXXxcXHVEREVCXFx1RDgzQ1tcXHVEREVFLVxcdURERjBcXHVEREYyXFx1RERGNFxcdURERjddfFxcdURERUNcXHVEODNDW1xcdURERTZcXHVEREU3XFx1RERFOS1cXHVEREVFXFx1RERGMS1cXHVEREYzXFx1RERGNS1cXHVEREZBXFx1RERGQ1xcdURERkVdfFxcdURERURcXHVEODNDW1xcdURERjBcXHVEREYyXFx1RERGM1xcdURERjdcXHVEREY5XFx1RERGQV18XFx1RERFRVxcdUQ4M0NbXFx1RERFOC1cXHVEREVBXFx1RERGMS1cXHVEREY0XFx1RERGNi1cXHVEREY5XXxcXHVEREVGXFx1RDgzQ1tcXHVEREVBXFx1RERGMlxcdURERjRcXHVEREY1XXxcXHVEREYwXFx1RDgzQ1tcXHVEREVBXFx1RERFQy1cXHVEREVFXFx1RERGMlxcdURERjNcXHVEREY1XFx1RERGN1xcdURERkNcXHVEREZFXFx1RERGRl18XFx1RERGMVxcdUQ4M0NbXFx1RERFNi1cXHVEREU4XFx1RERFRVxcdURERjBcXHVEREY3LVxcdURERkJcXHVEREZFXXxcXHVEREYyXFx1RDgzQ1tcXHVEREU2XFx1RERFOC1cXHVEREVEXFx1RERGMC1cXHVEREZGXXxcXHVEREYzXFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUEtXFx1RERFQ1xcdURERUVcXHVEREYxXFx1RERGNFxcdURERjVcXHVEREY3XFx1RERGQVxcdURERkZdfFxcdURERjRcXHVEODNDXFx1RERGMnxcXHVEREY1XFx1RDgzQ1tcXHVEREU2XFx1RERFQS1cXHVEREVEXFx1RERGMC1cXHVEREYzXFx1RERGNy1cXHVEREY5XFx1RERGQ1xcdURERkVdfFxcdURERjZcXHVEODNDXFx1RERFNnxcXHVEREY3XFx1RDgzQ1tcXHVEREVBXFx1RERGNFxcdURERjhcXHVEREZBXFx1RERGQ118XFx1RERGOFxcdUQ4M0NbXFx1RERFNi1cXHVEREVBXFx1RERFQy1cXHVEREY0XFx1RERGNy1cXHVEREY5XFx1RERGQlxcdURERkQtXFx1RERGRl18XFx1RERGOVxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREU5XFx1RERFQi1cXHVEREVEXFx1RERFRi1cXHVEREY0XFx1RERGN1xcdURERjlcXHVEREZCXFx1RERGQ1xcdURERkZdfFxcdURERkFcXHVEODNDW1xcdURERTZcXHVEREVDXFx1RERGMlxcdURERjNcXHVEREY4XFx1RERGRVxcdURERkZdfFxcdURERkJcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQVxcdURERUNcXHVEREVFXFx1RERGM1xcdURERkFdfFxcdURERkNcXHVEODNDW1xcdURERUJcXHVEREY4XXxcXHVEREZEXFx1RDgzQ1xcdURERjB8XFx1RERGRVxcdUQ4M0NbXFx1RERFQVxcdURERjldfFxcdURERkZcXHVEODNDW1xcdURERTZcXHVEREYyXFx1RERGQ118XFx1REY0NCg/OlxcdTIwMERcXHVEODNEXFx1REZFQik/fFxcdURGNEIoPzpcXHUyMDBEXFx1RDgzRFxcdURGRTkpP3xcXHVERkMzKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEKD86W1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFxcdTI3QTFcXHVGRTBGPykpP3xcXHVERkYzXFx1RkUwRj8oPzpcXHUyMDBEKD86XFx1MjZBN1xcdUZFMEY/fFxcdUQ4M0NcXHVERjA4KSk/fFxcdURGRjQoPzpcXHUyMDBEXFx1MjYyMFxcdUZFMEY/fFxcdURCNDBcXHVEQzY3XFx1REI0MFxcdURDNjJcXHVEQjQwKD86XFx1REM2NVxcdURCNDBcXHVEQzZFXFx1REI0MFxcdURDNjd8XFx1REM3M1xcdURCNDBcXHVEQzYzXFx1REI0MFxcdURDNzR8XFx1REM3N1xcdURCNDBcXHVEQzZDXFx1REI0MFxcdURDNzMpXFx1REI0MFxcdURDN0YpPyl8XFx1RDgzRCg/OltcXHVEQzNGXFx1RENGRFxcdURENDlcXHVERDRBXFx1REQ2RlxcdURENzBcXHVERDczXFx1REQ3Ni1cXHVERDc5XFx1REQ4N1xcdUREOEEtXFx1REQ4RFxcdUREQTVcXHVEREE4XFx1RERCMVxcdUREQjJcXHVEREJDXFx1RERDMi1cXHVEREM0XFx1REREMS1cXHVEREQzXFx1REREQy1cXHVERERFXFx1RERFMVxcdURERTNcXHVEREU4XFx1RERFRlxcdURERjNcXHVEREZBXFx1REVDQlxcdURFQ0QtXFx1REVDRlxcdURFRTAtXFx1REVFNVxcdURFRTlcXHVERUYwXFx1REVGM11cXHVGRTBGP3xbXFx1REM0MlxcdURDNDNcXHVEQzQ2LVxcdURDNTBcXHVEQzY2XFx1REM2N1xcdURDNkItXFx1REM2RFxcdURDNzJcXHVEQzc0LVxcdURDNzZcXHVEQzc4XFx1REM3Q1xcdURDODNcXHVEQzg1XFx1REM4RlxcdURDOTFcXHVEQ0FBXFx1REQ3QVxcdUREOTVcXHVERDk2XFx1REU0Q1xcdURFNEZcXHVERUMwXFx1REVDQ10oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1REM2RVxcdURDNzBcXHVEQzcxXFx1REM3M1xcdURDNzdcXHVEQzgxXFx1REM4MlxcdURDODZcXHVEQzg3XFx1REU0NS1cXHVERTQ3XFx1REU0QlxcdURFNERcXHVERTRFXFx1REVBM1xcdURFQjRcXHVERUI1XSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVERDc0XFx1REQ5MF0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RkUwRik/fFtcXHVEQzAwLVxcdURDMDdcXHVEQzA5LVxcdURDMTRcXHVEQzE2LVxcdURDMjVcXHVEQzI3LVxcdURDM0FcXHVEQzNDLVxcdURDM0VcXHVEQzQwXFx1REM0NFxcdURDNDVcXHVEQzUxLVxcdURDNjVcXHVEQzZBXFx1REM3OS1cXHVEQzdCXFx1REM3RC1cXHVEQzgwXFx1REM4NFxcdURDODgtXFx1REM4RVxcdURDOTBcXHVEQzkyLVxcdURDQTlcXHVEQ0FCLVxcdURDRkNcXHVEQ0ZGLVxcdUREM0RcXHVERDRCLVxcdURENEVcXHVERDUwLVxcdURENjdcXHVEREE0XFx1RERGQi1cXHVERTJEXFx1REUyRi1cXHVERTM0XFx1REUzNy1cXHVERTQxXFx1REU0M1xcdURFNDRcXHVERTQ4LVxcdURFNEFcXHVERTgwLVxcdURFQTJcXHVERUE0LVxcdURFQjNcXHVERUI3LVxcdURFQkZcXHVERUMxLVxcdURFQzVcXHVERUQwLVxcdURFRDJcXHVERUQ1LVxcdURFRDdcXHVERURDLVxcdURFREZcXHVERUVCXFx1REVFQ1xcdURFRjQtXFx1REVGQ1xcdURGRTAtXFx1REZFQlxcdURGRjBdfFxcdURDMDgoPzpcXHUyMDBEXFx1MkIxQik/fFxcdURDMTUoPzpcXHUyMDBEXFx1RDgzRVxcdUREQkEpP3xcXHVEQzI2KD86XFx1MjAwRCg/OlxcdTJCMUJ8XFx1RDgzRFxcdUREMjUpKT98XFx1REMzQig/OlxcdTIwMERcXHUyNzQ0XFx1RkUwRj8pP3xcXHVEQzQxXFx1RkUwRj8oPzpcXHUyMDBEXFx1RDgzRFxcdURERThcXHVGRTBGPyk/fFxcdURDNjgoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OHxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEKD86W1xcdURDNjhcXHVEQzY5XVxcdTIwMERcXHVEODNEKD86XFx1REM2Nig/OlxcdTIwMERcXHVEODNEXFx1REM2Nik/fFxcdURDNjcoPzpcXHUyMDBEXFx1RDgzRFtcXHVEQzY2XFx1REM2N10pPyl8W1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1REM2Nig/OlxcdTIwMERcXHVEODNEXFx1REM2Nik/fFxcdURDNjcoPzpcXHUyMDBEXFx1RDgzRFtcXHVEQzY2XFx1REM2N10pPyl8XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdKSl8XFx1RDgzQyg/OlxcdURGRkIoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkMtXFx1REZGRl0pKSk/fFxcdURGRkMoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKSkpP3xcXHVERkZEKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXSkpKT98XFx1REZGRSg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9cXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZEXFx1REZGRl0pKSk/fFxcdURGRkYoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRV0pKSk/KSk/fFxcdURDNjkoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/W1xcdURDNjhcXHVEQzY5XXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEKD86W1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1REM2Nig/OlxcdTIwMERcXHVEODNEXFx1REM2Nik/fFxcdURDNjcoPzpcXHUyMDBEXFx1RDgzRFtcXHVEQzY2XFx1REM2N10pP3xcXHVEQzY5XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzY2KD86XFx1MjAwRFxcdUQ4M0RcXHVEQzY2KT98XFx1REM2Nyg/OlxcdTIwMERcXHVEODNEW1xcdURDNjZcXHVEQzY3XSk/KSl8XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdKSl8XFx1RDgzQyg/OlxcdURGRkIoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV18XFx1REM4QlxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldXFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKSkpP3xcXHVERkZDKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XVxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl0pKSk/fFxcdURGRkQoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV18XFx1REM4QlxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldXFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXSkpKT98XFx1REZGRSg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86W1xcdURDNjhcXHVEQzY5XXxcXHVEQzhCXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdKSkpP3xcXHVERkZGKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XVxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSkpKT8pKT98XFx1REM2Rig/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xcXHVERDc1KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUZFMEYpPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xcXHVERTJFKD86XFx1MjAwRFxcdUQ4M0RcXHVEQ0E4KT98XFx1REUzNSg/OlxcdTIwMERcXHVEODNEXFx1RENBQik/fFxcdURFMzYoPzpcXHUyMDBEXFx1RDgzQ1xcdURGMkJcXHVGRTBGPyk/fFxcdURFNDIoPzpcXHUyMDBEW1xcdTIxOTRcXHUyMTk1XVxcdUZFMEY/KT98XFx1REVCNig/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRCg/OltcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xcXHUyN0ExXFx1RkUwRj8pKT8pfFxcdUQ4M0UoPzpbXFx1REQwQ1xcdUREMEZcXHVERDE4LVxcdUREMUZcXHVERDMwLVxcdUREMzRcXHVERDM2XFx1REQ3N1xcdUREQjVcXHVEREI2XFx1RERCQlxcdURERDJcXHVEREQzXFx1RERENVxcdURFQzMtXFx1REVDNVxcdURFRjBcXHVERUYyLVxcdURFRjhdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdUREMjZcXHVERDM1XFx1REQzNy1cXHVERDM5XFx1REQzRFxcdUREM0VcXHVEREI4XFx1RERCOVxcdUREQ0RcXHVERENGXFx1RERENFxcdURERDYtXFx1RERERF0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xbXFx1RERERVxcdUREREZdKD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVERDBEXFx1REQwRVxcdUREMTAtXFx1REQxN1xcdUREMjAtXFx1REQyNVxcdUREMjctXFx1REQyRlxcdUREM0FcXHVERDNGLVxcdURENDVcXHVERDQ3LVxcdURENzZcXHVERDc4LVxcdUREQjRcXHVEREI3XFx1RERCQVxcdUREQkMtXFx1RERDQ1xcdURERDBcXHVEREUwLVxcdURERkZcXHVERTcwLVxcdURFN0NcXHVERTgwLVxcdURFODlcXHVERThGLVxcdURFQzJcXHVERUM2XFx1REVDRS1cXHVERURDXFx1REVERi1cXHVERUU5XXxcXHVERDNDKD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGP3xcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xcXHVERENFKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEKD86W1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFxcdTI3QTFcXHVGRTBGPykpP3xcXHVEREQxKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMXxcXHVEREQxXFx1MjAwRFxcdUQ4M0VcXHVEREQyKD86XFx1MjAwRFxcdUQ4M0VcXHVEREQyKT98XFx1REREMig/OlxcdTIwMERcXHVEODNFXFx1REREMik/KSl8XFx1RDgzQyg/OlxcdURGRkIoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKSkpP3xcXHVERkZDKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRl0pKSk/fFxcdURGRkQoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSkpKT98XFx1REZGRSg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKSkpP3xcXHVERkZGKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRV18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSkpKT8pKT98XFx1REVGMSg/OlxcdUQ4M0MoPzpcXHVERkZCKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKT98XFx1REZGQyg/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl0pP3xcXHVERkZEKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXSk/fFxcdURGRkUoPzpcXHUyMDBEXFx1RDgzRVxcdURFRjJcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdKT98XFx1REZGRig/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSk/KSk/KS9nO1xufTtcbiIsImltcG9ydCBzdHJpcEFuc2kgZnJvbSAnc3RyaXAtYW5zaSc7XG5pbXBvcnQge2Vhc3RBc2lhbldpZHRofSBmcm9tICdnZXQtZWFzdC1hc2lhbi13aWR0aCc7XG5pbXBvcnQgZW1vamlSZWdleCBmcm9tICdlbW9qaS1yZWdleCc7XG5cbmNvbnN0IHNlZ21lbnRlciA9IG5ldyBJbnRsLlNlZ21lbnRlcigpO1xuXG5jb25zdCBkZWZhdWx0SWdub3JhYmxlQ29kZVBvaW50UmVnZXggPSAvXlxccHtEZWZhdWx0X0lnbm9yYWJsZV9Db2RlX1BvaW50fSQvdTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RyaW5nV2lkdGgoc3RyaW5nLCBvcHRpb25zID0ge30pIHtcblx0aWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnIHx8IHN0cmluZy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGNvbnN0IHtcblx0XHRhbWJpZ3VvdXNJc05hcnJvdyA9IHRydWUsXG5cdFx0Y291bnRBbnNpRXNjYXBlQ29kZXMgPSBmYWxzZSxcblx0fSA9IG9wdGlvbnM7XG5cblx0aWYgKCFjb3VudEFuc2lFc2NhcGVDb2Rlcykge1xuXHRcdHN0cmluZyA9IHN0cmlwQW5zaShzdHJpbmcpO1xuXHR9XG5cblx0aWYgKHN0cmluZy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGxldCB3aWR0aCA9IDA7XG5cdGNvbnN0IGVhc3RBc2lhbldpZHRoT3B0aW9ucyA9IHthbWJpZ3VvdXNBc1dpZGU6ICFhbWJpZ3VvdXNJc05hcnJvd307XG5cblx0Zm9yIChjb25zdCB7c2VnbWVudDogY2hhcmFjdGVyfSBvZiBzZWdtZW50ZXIuc2VnbWVudChzdHJpbmcpKSB7XG5cdFx0Y29uc3QgY29kZVBvaW50ID0gY2hhcmFjdGVyLmNvZGVQb2ludEF0KDApO1xuXG5cdFx0Ly8gSWdub3JlIGNvbnRyb2wgY2hhcmFjdGVyc1xuXHRcdGlmIChjb2RlUG9pbnQgPD0gMHgxRiB8fCAoY29kZVBvaW50ID49IDB4N0YgJiYgY29kZVBvaW50IDw9IDB4OUYpKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHQvLyBJZ25vcmUgemVyby13aWR0aCBjaGFyYWN0ZXJzXG5cdFx0aWYgKFxuXHRcdFx0KGNvZGVQb2ludCA+PSAweDIwXzBCICYmIGNvZGVQb2ludCA8PSAweDIwXzBGKSAvLyBaZXJvLXdpZHRoIHNwYWNlLCBub24tam9pbmVyLCBqb2luZXIsIGxlZnQtdG8tcmlnaHQgbWFyaywgcmlnaHQtdG8tbGVmdCBtYXJrXG5cdFx0XHR8fCBjb2RlUG9pbnQgPT09IDB4RkVfRkYgLy8gWmVyby13aWR0aCBuby1icmVhayBzcGFjZVxuXHRcdCkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Ly8gSWdub3JlIGNvbWJpbmluZyBjaGFyYWN0ZXJzXG5cdFx0aWYgKFxuXHRcdFx0KGNvZGVQb2ludCA+PSAweDNfMDAgJiYgY29kZVBvaW50IDw9IDB4M182RikgLy8gQ29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzXG5cdFx0XHR8fCAoY29kZVBvaW50ID49IDB4MUFfQjAgJiYgY29kZVBvaW50IDw9IDB4MUFfRkYpIC8vIENvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrcyBleHRlbmRlZFxuXHRcdFx0fHwgKGNvZGVQb2ludCA+PSAweDFEX0MwICYmIGNvZGVQb2ludCA8PSAweDFEX0ZGKSAvLyBDb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3Mgc3VwcGxlbWVudFxuXHRcdFx0fHwgKGNvZGVQb2ludCA+PSAweDIwX0QwICYmIGNvZGVQb2ludCA8PSAweDIwX0ZGKSAvLyBDb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3MgZm9yIHN5bWJvbHNcblx0XHRcdHx8IChjb2RlUG9pbnQgPj0gMHhGRV8yMCAmJiBjb2RlUG9pbnQgPD0gMHhGRV8yRikgLy8gQ29tYmluaW5nIGhhbGYgbWFya3Ncblx0XHQpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIElnbm9yZSBzdXJyb2dhdGUgcGFpcnNcblx0XHRpZiAoY29kZVBvaW50ID49IDB4RDhfMDAgJiYgY29kZVBvaW50IDw9IDB4REZfRkYpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIElnbm9yZSB2YXJpYXRpb24gc2VsZWN0b3JzXG5cdFx0aWYgKGNvZGVQb2ludCA+PSAweEZFXzAwICYmIGNvZGVQb2ludCA8PSAweEZFXzBGKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHQvLyBUaGlzIGNvdmVycyBzb21lIG9mIHRoZSBhYm92ZSBjYXNlcywgYnV0IHdlIHN0aWxsIGtlZXAgdGhlbSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy5cblx0XHRpZiAoZGVmYXVsdElnbm9yYWJsZUNvZGVQb2ludFJlZ2V4LnRlc3QoY2hhcmFjdGVyKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Ly8gVE9ETzogVXNlIGAvXFxwe1JHSV9FbW9qaX0vdmAgd2hlbiB0YXJnZXRpbmcgTm9kZS5qcyAyMC5cblx0XHRpZiAoZW1vamlSZWdleCgpLnRlc3QoY2hhcmFjdGVyKSkge1xuXHRcdFx0d2lkdGggKz0gMjtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdHdpZHRoICs9IGVhc3RBc2lhbldpZHRoKGNvZGVQb2ludCwgZWFzdEFzaWFuV2lkdGhPcHRpb25zKTtcblx0fVxuXG5cdHJldHVybiB3aWR0aDtcbn1cbiIsImNvbnN0IEFOU0lfQkFDS0dST1VORF9PRkZTRVQgPSAxMDtcblxuY29uc3Qgd3JhcEFuc2kxNiA9IChvZmZzZXQgPSAwKSA9PiBjb2RlID0+IGBcXHUwMDFCWyR7Y29kZSArIG9mZnNldH1tYDtcblxuY29uc3Qgd3JhcEFuc2kyNTYgPSAob2Zmc2V0ID0gMCkgPT4gY29kZSA9PiBgXFx1MDAxQlskezM4ICsgb2Zmc2V0fTs1OyR7Y29kZX1tYDtcblxuY29uc3Qgd3JhcEFuc2kxNm0gPSAob2Zmc2V0ID0gMCkgPT4gKHJlZCwgZ3JlZW4sIGJsdWUpID0+IGBcXHUwMDFCWyR7MzggKyBvZmZzZXR9OzI7JHtyZWR9OyR7Z3JlZW59OyR7Ymx1ZX1tYDtcblxuY29uc3Qgc3R5bGVzID0ge1xuXHRtb2RpZmllcjoge1xuXHRcdHJlc2V0OiBbMCwgMF0sXG5cdFx0Ly8gMjEgaXNuJ3Qgd2lkZWx5IHN1cHBvcnRlZCBhbmQgMjIgZG9lcyB0aGUgc2FtZSB0aGluZ1xuXHRcdGJvbGQ6IFsxLCAyMl0sXG5cdFx0ZGltOiBbMiwgMjJdLFxuXHRcdGl0YWxpYzogWzMsIDIzXSxcblx0XHR1bmRlcmxpbmU6IFs0LCAyNF0sXG5cdFx0b3ZlcmxpbmU6IFs1MywgNTVdLFxuXHRcdGludmVyc2U6IFs3LCAyN10sXG5cdFx0aGlkZGVuOiBbOCwgMjhdLFxuXHRcdHN0cmlrZXRocm91Z2g6IFs5LCAyOV0sXG5cdH0sXG5cdGNvbG9yOiB7XG5cdFx0YmxhY2s6IFszMCwgMzldLFxuXHRcdHJlZDogWzMxLCAzOV0sXG5cdFx0Z3JlZW46IFszMiwgMzldLFxuXHRcdHllbGxvdzogWzMzLCAzOV0sXG5cdFx0Ymx1ZTogWzM0LCAzOV0sXG5cdFx0bWFnZW50YTogWzM1LCAzOV0sXG5cdFx0Y3lhbjogWzM2LCAzOV0sXG5cdFx0d2hpdGU6IFszNywgMzldLFxuXG5cdFx0Ly8gQnJpZ2h0IGNvbG9yXG5cdFx0YmxhY2tCcmlnaHQ6IFs5MCwgMzldLFxuXHRcdGdyYXk6IFs5MCwgMzldLCAvLyBBbGlhcyBvZiBgYmxhY2tCcmlnaHRgXG5cdFx0Z3JleTogWzkwLCAzOV0sIC8vIEFsaWFzIG9mIGBibGFja0JyaWdodGBcblx0XHRyZWRCcmlnaHQ6IFs5MSwgMzldLFxuXHRcdGdyZWVuQnJpZ2h0OiBbOTIsIDM5XSxcblx0XHR5ZWxsb3dCcmlnaHQ6IFs5MywgMzldLFxuXHRcdGJsdWVCcmlnaHQ6IFs5NCwgMzldLFxuXHRcdG1hZ2VudGFCcmlnaHQ6IFs5NSwgMzldLFxuXHRcdGN5YW5CcmlnaHQ6IFs5NiwgMzldLFxuXHRcdHdoaXRlQnJpZ2h0OiBbOTcsIDM5XSxcblx0fSxcblx0YmdDb2xvcjoge1xuXHRcdGJnQmxhY2s6IFs0MCwgNDldLFxuXHRcdGJnUmVkOiBbNDEsIDQ5XSxcblx0XHRiZ0dyZWVuOiBbNDIsIDQ5XSxcblx0XHRiZ1llbGxvdzogWzQzLCA0OV0sXG5cdFx0YmdCbHVlOiBbNDQsIDQ5XSxcblx0XHRiZ01hZ2VudGE6IFs0NSwgNDldLFxuXHRcdGJnQ3lhbjogWzQ2LCA0OV0sXG5cdFx0YmdXaGl0ZTogWzQ3LCA0OV0sXG5cblx0XHQvLyBCcmlnaHQgY29sb3Jcblx0XHRiZ0JsYWNrQnJpZ2h0OiBbMTAwLCA0OV0sXG5cdFx0YmdHcmF5OiBbMTAwLCA0OV0sIC8vIEFsaWFzIG9mIGBiZ0JsYWNrQnJpZ2h0YFxuXHRcdGJnR3JleTogWzEwMCwgNDldLCAvLyBBbGlhcyBvZiBgYmdCbGFja0JyaWdodGBcblx0XHRiZ1JlZEJyaWdodDogWzEwMSwgNDldLFxuXHRcdGJnR3JlZW5CcmlnaHQ6IFsxMDIsIDQ5XSxcblx0XHRiZ1llbGxvd0JyaWdodDogWzEwMywgNDldLFxuXHRcdGJnQmx1ZUJyaWdodDogWzEwNCwgNDldLFxuXHRcdGJnTWFnZW50YUJyaWdodDogWzEwNSwgNDldLFxuXHRcdGJnQ3lhbkJyaWdodDogWzEwNiwgNDldLFxuXHRcdGJnV2hpdGVCcmlnaHQ6IFsxMDcsIDQ5XSxcblx0fSxcbn07XG5cbmV4cG9ydCBjb25zdCBtb2RpZmllck5hbWVzID0gT2JqZWN0LmtleXMoc3R5bGVzLm1vZGlmaWVyKTtcbmV4cG9ydCBjb25zdCBmb3JlZ3JvdW5kQ29sb3JOYW1lcyA9IE9iamVjdC5rZXlzKHN0eWxlcy5jb2xvcik7XG5leHBvcnQgY29uc3QgYmFja2dyb3VuZENvbG9yTmFtZXMgPSBPYmplY3Qua2V5cyhzdHlsZXMuYmdDb2xvcik7XG5leHBvcnQgY29uc3QgY29sb3JOYW1lcyA9IFsuLi5mb3JlZ3JvdW5kQ29sb3JOYW1lcywgLi4uYmFja2dyb3VuZENvbG9yTmFtZXNdO1xuXG5mdW5jdGlvbiBhc3NlbWJsZVN0eWxlcygpIHtcblx0Y29uc3QgY29kZXMgPSBuZXcgTWFwKCk7XG5cblx0Zm9yIChjb25zdCBbZ3JvdXBOYW1lLCBncm91cF0gb2YgT2JqZWN0LmVudHJpZXMoc3R5bGVzKSkge1xuXHRcdGZvciAoY29uc3QgW3N0eWxlTmFtZSwgc3R5bGVdIG9mIE9iamVjdC5lbnRyaWVzKGdyb3VwKSkge1xuXHRcdFx0c3R5bGVzW3N0eWxlTmFtZV0gPSB7XG5cdFx0XHRcdG9wZW46IGBcXHUwMDFCWyR7c3R5bGVbMF19bWAsXG5cdFx0XHRcdGNsb3NlOiBgXFx1MDAxQlske3N0eWxlWzFdfW1gLFxuXHRcdFx0fTtcblxuXHRcdFx0Z3JvdXBbc3R5bGVOYW1lXSA9IHN0eWxlc1tzdHlsZU5hbWVdO1xuXG5cdFx0XHRjb2Rlcy5zZXQoc3R5bGVbMF0sIHN0eWxlWzFdKTtcblx0XHR9XG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoc3R5bGVzLCBncm91cE5hbWUsIHtcblx0XHRcdHZhbHVlOiBncm91cCxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0pO1xuXHR9XG5cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHN0eWxlcywgJ2NvZGVzJywge1xuXHRcdHZhbHVlOiBjb2Rlcyxcblx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0fSk7XG5cblx0c3R5bGVzLmNvbG9yLmNsb3NlID0gJ1xcdTAwMUJbMzltJztcblx0c3R5bGVzLmJnQ29sb3IuY2xvc2UgPSAnXFx1MDAxQls0OW0nO1xuXG5cdHN0eWxlcy5jb2xvci5hbnNpID0gd3JhcEFuc2kxNigpO1xuXHRzdHlsZXMuY29sb3IuYW5zaTI1NiA9IHdyYXBBbnNpMjU2KCk7XG5cdHN0eWxlcy5jb2xvci5hbnNpMTZtID0gd3JhcEFuc2kxNm0oKTtcblx0c3R5bGVzLmJnQ29sb3IuYW5zaSA9IHdyYXBBbnNpMTYoQU5TSV9CQUNLR1JPVU5EX09GRlNFVCk7XG5cdHN0eWxlcy5iZ0NvbG9yLmFuc2kyNTYgPSB3cmFwQW5zaTI1NihBTlNJX0JBQ0tHUk9VTkRfT0ZGU0VUKTtcblx0c3R5bGVzLmJnQ29sb3IuYW5zaTE2bSA9IHdyYXBBbnNpMTZtKEFOU0lfQkFDS0dST1VORF9PRkZTRVQpO1xuXG5cdC8vIEZyb20gaHR0cHM6Ly9naXRodWIuY29tL1FpeC0vY29sb3ItY29udmVydC9ibG9iLzNmMGUwZDRlOTJlMjM1Nzk2Y2NiMTdmNmU4NWM3MjA5NGE2NTFmNDkvY29udmVyc2lvbnMuanNcblx0T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc3R5bGVzLCB7XG5cdFx0cmdiVG9BbnNpMjU2OiB7XG5cdFx0XHR2YWx1ZTogKHJlZCwgZ3JlZW4sIGJsdWUpID0+IHtcblx0XHRcdFx0Ly8gV2UgdXNlIHRoZSBleHRlbmRlZCBncmV5c2NhbGUgcGFsZXR0ZSBoZXJlLCB3aXRoIHRoZSBleGNlcHRpb24gb2Zcblx0XHRcdFx0Ly8gYmxhY2sgYW5kIHdoaXRlLiBub3JtYWwgcGFsZXR0ZSBvbmx5IGhhcyA0IGdyZXlzY2FsZSBzaGFkZXMuXG5cdFx0XHRcdGlmIChyZWQgPT09IGdyZWVuICYmIGdyZWVuID09PSBibHVlKSB7XG5cdFx0XHRcdFx0aWYgKHJlZCA8IDgpIHtcblx0XHRcdFx0XHRcdHJldHVybiAxNjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAocmVkID4gMjQ4KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gMjMxO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBNYXRoLnJvdW5kKCgocmVkIC0gOCkgLyAyNDcpICogMjQpICsgMjMyO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIDE2XG5cdFx0XHRcdFx0KyAoMzYgKiBNYXRoLnJvdW5kKHJlZCAvIDI1NSAqIDUpKVxuXHRcdFx0XHRcdCsgKDYgKiBNYXRoLnJvdW5kKGdyZWVuIC8gMjU1ICogNSkpXG5cdFx0XHRcdFx0KyBNYXRoLnJvdW5kKGJsdWUgLyAyNTUgKiA1KTtcblx0XHRcdH0sXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR9LFxuXHRcdGhleFRvUmdiOiB7XG5cdFx0XHR2YWx1ZTogaGV4ID0+IHtcblx0XHRcdFx0Y29uc3QgbWF0Y2hlcyA9IC9bYS1mXFxkXXs2fXxbYS1mXFxkXXszfS9pLmV4ZWMoaGV4LnRvU3RyaW5nKDE2KSk7XG5cdFx0XHRcdGlmICghbWF0Y2hlcykge1xuXHRcdFx0XHRcdHJldHVybiBbMCwgMCwgMF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsZXQgW2NvbG9yU3RyaW5nXSA9IG1hdGNoZXM7XG5cblx0XHRcdFx0aWYgKGNvbG9yU3RyaW5nLmxlbmd0aCA9PT0gMykge1xuXHRcdFx0XHRcdGNvbG9yU3RyaW5nID0gWy4uLmNvbG9yU3RyaW5nXS5tYXAoY2hhcmFjdGVyID0+IGNoYXJhY3RlciArIGNoYXJhY3Rlcikuam9pbignJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBpbnRlZ2VyID0gTnVtYmVyLnBhcnNlSW50KGNvbG9yU3RyaW5nLCAxNik7XG5cblx0XHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1iaXR3aXNlICovXG5cdFx0XHRcdFx0KGludGVnZXIgPj4gMTYpICYgMHhGRixcblx0XHRcdFx0XHQoaW50ZWdlciA+PiA4KSAmIDB4RkYsXG5cdFx0XHRcdFx0aW50ZWdlciAmIDB4RkYsXG5cdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1iaXR3aXNlICovXG5cdFx0XHRcdF07XG5cdFx0XHR9LFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0fSxcblx0XHRoZXhUb0Fuc2kyNTY6IHtcblx0XHRcdHZhbHVlOiBoZXggPT4gc3R5bGVzLnJnYlRvQW5zaTI1NiguLi5zdHlsZXMuaGV4VG9SZ2IoaGV4KSksXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR9LFxuXHRcdGFuc2kyNTZUb0Fuc2k6IHtcblx0XHRcdHZhbHVlOiBjb2RlID0+IHtcblx0XHRcdFx0aWYgKGNvZGUgPCA4KSB7XG5cdFx0XHRcdFx0cmV0dXJuIDMwICsgY29kZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjb2RlIDwgMTYpIHtcblx0XHRcdFx0XHRyZXR1cm4gOTAgKyAoY29kZSAtIDgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IHJlZDtcblx0XHRcdFx0bGV0IGdyZWVuO1xuXHRcdFx0XHRsZXQgYmx1ZTtcblxuXHRcdFx0XHRpZiAoY29kZSA+PSAyMzIpIHtcblx0XHRcdFx0XHRyZWQgPSAoKChjb2RlIC0gMjMyKSAqIDEwKSArIDgpIC8gMjU1O1xuXHRcdFx0XHRcdGdyZWVuID0gcmVkO1xuXHRcdFx0XHRcdGJsdWUgPSByZWQ7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29kZSAtPSAxNjtcblxuXHRcdFx0XHRcdGNvbnN0IHJlbWFpbmRlciA9IGNvZGUgJSAzNjtcblxuXHRcdFx0XHRcdHJlZCA9IE1hdGguZmxvb3IoY29kZSAvIDM2KSAvIDU7XG5cdFx0XHRcdFx0Z3JlZW4gPSBNYXRoLmZsb29yKHJlbWFpbmRlciAvIDYpIC8gNTtcblx0XHRcdFx0XHRibHVlID0gKHJlbWFpbmRlciAlIDYpIC8gNTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gTWF0aC5tYXgocmVkLCBncmVlbiwgYmx1ZSkgKiAyO1xuXG5cdFx0XHRcdGlmICh2YWx1ZSA9PT0gMCkge1xuXHRcdFx0XHRcdHJldHVybiAzMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG5cdFx0XHRcdGxldCByZXN1bHQgPSAzMCArICgoTWF0aC5yb3VuZChibHVlKSA8PCAyKSB8IChNYXRoLnJvdW5kKGdyZWVuKSA8PCAxKSB8IE1hdGgucm91bmQocmVkKSk7XG5cblx0XHRcdFx0aWYgKHZhbHVlID09PSAyKSB7XG5cdFx0XHRcdFx0cmVzdWx0ICs9IDYwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH0sXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR9LFxuXHRcdHJnYlRvQW5zaToge1xuXHRcdFx0dmFsdWU6IChyZWQsIGdyZWVuLCBibHVlKSA9PiBzdHlsZXMuYW5zaTI1NlRvQW5zaShzdHlsZXMucmdiVG9BbnNpMjU2KHJlZCwgZ3JlZW4sIGJsdWUpKSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdFx0aGV4VG9BbnNpOiB7XG5cdFx0XHR2YWx1ZTogaGV4ID0+IHN0eWxlcy5hbnNpMjU2VG9BbnNpKHN0eWxlcy5oZXhUb0Fuc2kyNTYoaGV4KSksXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR9LFxuXHR9KTtcblxuXHRyZXR1cm4gc3R5bGVzO1xufVxuXG5jb25zdCBhbnNpU3R5bGVzID0gYXNzZW1ibGVTdHlsZXMoKTtcblxuZXhwb3J0IGRlZmF1bHQgYW5zaVN0eWxlcztcbiIsImltcG9ydCBzdHJpbmdXaWR0aCBmcm9tICdzdHJpbmctd2lkdGgnO1xuaW1wb3J0IHN0cmlwQW5zaSBmcm9tICdzdHJpcC1hbnNpJztcbmltcG9ydCBhbnNpU3R5bGVzIGZyb20gJ2Fuc2ktc3R5bGVzJztcblxuY29uc3QgRVNDQVBFUyA9IG5ldyBTZXQoW1xuXHQnXFx1MDAxQicsXG5cdCdcXHUwMDlCJyxcbl0pO1xuXG5jb25zdCBFTkRfQ09ERSA9IDM5O1xuY29uc3QgQU5TSV9FU0NBUEVfQkVMTCA9ICdcXHUwMDA3JztcbmNvbnN0IEFOU0lfQ1NJID0gJ1snO1xuY29uc3QgQU5TSV9PU0MgPSAnXSc7XG5jb25zdCBBTlNJX1NHUl9URVJNSU5BVE9SID0gJ20nO1xuY29uc3QgQU5TSV9FU0NBUEVfTElOSyA9IGAke0FOU0lfT1NDfTg7O2A7XG5cbmNvbnN0IHdyYXBBbnNpQ29kZSA9IGNvZGUgPT4gYCR7RVNDQVBFUy52YWx1ZXMoKS5uZXh0KCkudmFsdWV9JHtBTlNJX0NTSX0ke2NvZGV9JHtBTlNJX1NHUl9URVJNSU5BVE9SfWA7XG5jb25zdCB3cmFwQW5zaUh5cGVybGluayA9IHVybCA9PiBgJHtFU0NBUEVTLnZhbHVlcygpLm5leHQoKS52YWx1ZX0ke0FOU0lfRVNDQVBFX0xJTkt9JHt1cmx9JHtBTlNJX0VTQ0FQRV9CRUxMfWA7XG5cbi8vIENhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIHdvcmRzIHNwbGl0IG9uICcgJywgaWdub3Jpbmdcbi8vIHRoZSBleHRyYSBjaGFyYWN0ZXJzIGFkZGVkIGJ5IGFuc2kgZXNjYXBlIGNvZGVzXG5jb25zdCB3b3JkTGVuZ3RocyA9IHN0cmluZyA9PiBzdHJpbmcuc3BsaXQoJyAnKS5tYXAoY2hhcmFjdGVyID0+IHN0cmluZ1dpZHRoKGNoYXJhY3RlcikpO1xuXG4vLyBXcmFwIGEgbG9uZyB3b3JkIGFjcm9zcyBtdWx0aXBsZSByb3dzXG4vLyBBbnNpIGVzY2FwZSBjb2RlcyBkbyBub3QgY291bnQgdG93YXJkcyBsZW5ndGhcbmNvbnN0IHdyYXBXb3JkID0gKHJvd3MsIHdvcmQsIGNvbHVtbnMpID0+IHtcblx0Y29uc3QgY2hhcmFjdGVycyA9IFsuLi53b3JkXTtcblxuXHRsZXQgaXNJbnNpZGVFc2NhcGUgPSBmYWxzZTtcblx0bGV0IGlzSW5zaWRlTGlua0VzY2FwZSA9IGZhbHNlO1xuXHRsZXQgdmlzaWJsZSA9IHN0cmluZ1dpZHRoKHN0cmlwQW5zaShyb3dzLmF0KC0xKSkpO1xuXG5cdGZvciAoY29uc3QgW2luZGV4LCBjaGFyYWN0ZXJdIG9mIGNoYXJhY3RlcnMuZW50cmllcygpKSB7XG5cdFx0Y29uc3QgY2hhcmFjdGVyTGVuZ3RoID0gc3RyaW5nV2lkdGgoY2hhcmFjdGVyKTtcblxuXHRcdGlmICh2aXNpYmxlICsgY2hhcmFjdGVyTGVuZ3RoIDw9IGNvbHVtbnMpIHtcblx0XHRcdHJvd3Nbcm93cy5sZW5ndGggLSAxXSArPSBjaGFyYWN0ZXI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJvd3MucHVzaChjaGFyYWN0ZXIpO1xuXHRcdFx0dmlzaWJsZSA9IDA7XG5cdFx0fVxuXG5cdFx0aWYgKEVTQ0FQRVMuaGFzKGNoYXJhY3RlcikpIHtcblx0XHRcdGlzSW5zaWRlRXNjYXBlID0gdHJ1ZTtcblxuXHRcdFx0Y29uc3QgYW5zaUVzY2FwZUxpbmtDYW5kaWRhdGUgPSBjaGFyYWN0ZXJzLnNsaWNlKGluZGV4ICsgMSwgaW5kZXggKyAxICsgQU5TSV9FU0NBUEVfTElOSy5sZW5ndGgpLmpvaW4oJycpO1xuXHRcdFx0aXNJbnNpZGVMaW5rRXNjYXBlID0gYW5zaUVzY2FwZUxpbmtDYW5kaWRhdGUgPT09IEFOU0lfRVNDQVBFX0xJTks7XG5cdFx0fVxuXG5cdFx0aWYgKGlzSW5zaWRlRXNjYXBlKSB7XG5cdFx0XHRpZiAoaXNJbnNpZGVMaW5rRXNjYXBlKSB7XG5cdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT09IEFOU0lfRVNDQVBFX0JFTEwpIHtcblx0XHRcdFx0XHRpc0luc2lkZUVzY2FwZSA9IGZhbHNlO1xuXHRcdFx0XHRcdGlzSW5zaWRlTGlua0VzY2FwZSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGNoYXJhY3RlciA9PT0gQU5TSV9TR1JfVEVSTUlOQVRPUikge1xuXHRcdFx0XHRpc0luc2lkZUVzY2FwZSA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHR2aXNpYmxlICs9IGNoYXJhY3Rlckxlbmd0aDtcblxuXHRcdGlmICh2aXNpYmxlID09PSBjb2x1bW5zICYmIGluZGV4IDwgY2hhcmFjdGVycy5sZW5ndGggLSAxKSB7XG5cdFx0XHRyb3dzLnB1c2goJycpO1xuXHRcdFx0dmlzaWJsZSA9IDA7XG5cdFx0fVxuXHR9XG5cblx0Ly8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBsYXN0IHJvdyB3ZSBjb3B5IG92ZXIgaXMgb25seVxuXHQvLyBhbnNpIGVzY2FwZSBjaGFyYWN0ZXJzLCBoYW5kbGUgdGhpcyBlZGdlLWNhc2Vcblx0aWYgKCF2aXNpYmxlICYmIHJvd3MuYXQoLTEpLmxlbmd0aCA+IDAgJiYgcm93cy5sZW5ndGggPiAxKSB7XG5cdFx0cm93c1tyb3dzLmxlbmd0aCAtIDJdICs9IHJvd3MucG9wKCk7XG5cdH1cbn07XG5cbi8vIFRyaW1zIHNwYWNlcyBmcm9tIGEgc3RyaW5nIGlnbm9yaW5nIGludmlzaWJsZSBzZXF1ZW5jZXNcbmNvbnN0IHN0cmluZ1Zpc2libGVUcmltU3BhY2VzUmlnaHQgPSBzdHJpbmcgPT4ge1xuXHRjb25zdCB3b3JkcyA9IHN0cmluZy5zcGxpdCgnICcpO1xuXHRsZXQgbGFzdCA9IHdvcmRzLmxlbmd0aDtcblxuXHR3aGlsZSAobGFzdCA+IDApIHtcblx0XHRpZiAoc3RyaW5nV2lkdGgod29yZHNbbGFzdCAtIDFdKSA+IDApIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdGxhc3QtLTtcblx0fVxuXG5cdGlmIChsYXN0ID09PSB3b3Jkcy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gc3RyaW5nO1xuXHR9XG5cblx0cmV0dXJuIHdvcmRzLnNsaWNlKDAsIGxhc3QpLmpvaW4oJyAnKSArIHdvcmRzLnNsaWNlKGxhc3QpLmpvaW4oJycpO1xufTtcblxuLy8gVGhlIHdyYXAtYW5zaSBtb2R1bGUgY2FuIGJlIGludm9rZWQgaW4gZWl0aGVyICdoYXJkJyBvciAnc29mdCcgd3JhcCBtb2RlLlxuLy9cbi8vICdoYXJkJyB3aWxsIG5ldmVyIGFsbG93IGEgc3RyaW5nIHRvIHRha2UgdXAgbW9yZSB0aGFuIGNvbHVtbnMgY2hhcmFjdGVycy5cbi8vXG4vLyAnc29mdCcgYWxsb3dzIGxvbmcgd29yZHMgdG8gZXhwYW5kIHBhc3QgdGhlIGNvbHVtbiBsZW5ndGguXG5jb25zdCBleGVjID0gKHN0cmluZywgY29sdW1ucywgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGlmIChvcHRpb25zLnRyaW0gIT09IGZhbHNlICYmIHN0cmluZy50cmltKCkgPT09ICcnKSB7XG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cblx0bGV0IHJldHVyblZhbHVlID0gJyc7XG5cdGxldCBlc2NhcGVDb2RlO1xuXHRsZXQgZXNjYXBlVXJsO1xuXG5cdGNvbnN0IGxlbmd0aHMgPSB3b3JkTGVuZ3RocyhzdHJpbmcpO1xuXHRsZXQgcm93cyA9IFsnJ107XG5cblx0Zm9yIChjb25zdCBbaW5kZXgsIHdvcmRdIG9mIHN0cmluZy5zcGxpdCgnICcpLmVudHJpZXMoKSkge1xuXHRcdGlmIChvcHRpb25zLnRyaW0gIT09IGZhbHNlKSB7XG5cdFx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gPSByb3dzLmF0KC0xKS50cmltU3RhcnQoKTtcblx0XHR9XG5cblx0XHRsZXQgcm93TGVuZ3RoID0gc3RyaW5nV2lkdGgocm93cy5hdCgtMSkpO1xuXG5cdFx0aWYgKGluZGV4ICE9PSAwKSB7XG5cdFx0XHRpZiAocm93TGVuZ3RoID49IGNvbHVtbnMgJiYgKG9wdGlvbnMud29yZFdyYXAgPT09IGZhbHNlIHx8IG9wdGlvbnMudHJpbSA9PT0gZmFsc2UpKSB7XG5cdFx0XHRcdC8vIElmIHdlIHN0YXJ0IHdpdGggYSBuZXcgd29yZCBidXQgdGhlIGN1cnJlbnQgcm93IGxlbmd0aCBlcXVhbHMgdGhlIGxlbmd0aCBvZiB0aGUgY29sdW1ucywgYWRkIGEgbmV3IHJvd1xuXHRcdFx0XHRyb3dzLnB1c2goJycpO1xuXHRcdFx0XHRyb3dMZW5ndGggPSAwO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocm93TGVuZ3RoID4gMCB8fCBvcHRpb25zLnRyaW0gPT09IGZhbHNlKSB7XG5cdFx0XHRcdHJvd3Nbcm93cy5sZW5ndGggLSAxXSArPSAnICc7XG5cdFx0XHRcdHJvd0xlbmd0aCsrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEluICdoYXJkJyB3cmFwIG1vZGUsIHRoZSBsZW5ndGggb2YgYSBsaW5lIGlzIG5ldmVyIGFsbG93ZWQgdG8gZXh0ZW5kIHBhc3QgJ2NvbHVtbnMnXG5cdFx0aWYgKG9wdGlvbnMuaGFyZCAmJiBsZW5ndGhzW2luZGV4XSA+IGNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IHJlbWFpbmluZ0NvbHVtbnMgPSAoY29sdW1ucyAtIHJvd0xlbmd0aCk7XG5cdFx0XHRjb25zdCBicmVha3NTdGFydGluZ1RoaXNMaW5lID0gMSArIE1hdGguZmxvb3IoKGxlbmd0aHNbaW5kZXhdIC0gcmVtYWluaW5nQ29sdW1ucyAtIDEpIC8gY29sdW1ucyk7XG5cdFx0XHRjb25zdCBicmVha3NTdGFydGluZ05leHRMaW5lID0gTWF0aC5mbG9vcigobGVuZ3Roc1tpbmRleF0gLSAxKSAvIGNvbHVtbnMpO1xuXHRcdFx0aWYgKGJyZWFrc1N0YXJ0aW5nTmV4dExpbmUgPCBicmVha3NTdGFydGluZ1RoaXNMaW5lKSB7XG5cdFx0XHRcdHJvd3MucHVzaCgnJyk7XG5cdFx0XHR9XG5cblx0XHRcdHdyYXBXb3JkKHJvd3MsIHdvcmQsIGNvbHVtbnMpO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKHJvd0xlbmd0aCArIGxlbmd0aHNbaW5kZXhdID4gY29sdW1ucyAmJiByb3dMZW5ndGggPiAwICYmIGxlbmd0aHNbaW5kZXhdID4gMCkge1xuXHRcdFx0aWYgKG9wdGlvbnMud29yZFdyYXAgPT09IGZhbHNlICYmIHJvd0xlbmd0aCA8IGNvbHVtbnMpIHtcblx0XHRcdFx0d3JhcFdvcmQocm93cywgd29yZCwgY29sdW1ucyk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRyb3dzLnB1c2goJycpO1xuXHRcdH1cblxuXHRcdGlmIChyb3dMZW5ndGggKyBsZW5ndGhzW2luZGV4XSA+IGNvbHVtbnMgJiYgb3B0aW9ucy53b3JkV3JhcCA9PT0gZmFsc2UpIHtcblx0XHRcdHdyYXBXb3JkKHJvd3MsIHdvcmQsIGNvbHVtbnMpO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0cm93c1tyb3dzLmxlbmd0aCAtIDFdICs9IHdvcmQ7XG5cdH1cblxuXHRpZiAob3B0aW9ucy50cmltICE9PSBmYWxzZSkge1xuXHRcdHJvd3MgPSByb3dzLm1hcChyb3cgPT4gc3RyaW5nVmlzaWJsZVRyaW1TcGFjZXNSaWdodChyb3cpKTtcblx0fVxuXG5cdGNvbnN0IHByZVN0cmluZyA9IHJvd3Muam9pbignXFxuJyk7XG5cdGNvbnN0IHByZSA9IFsuLi5wcmVTdHJpbmddO1xuXG5cdC8vIFdlIG5lZWQgdG8ga2VlcCBhIHNlcGFyYXRlIGluZGV4IGFzIGBTdHJpbmcjc2xpY2UoKWAgd29ya3Mgb24gVW5pY29kZSBjb2RlIHVuaXRzLCB3aGlsZSBgcHJlYCBpcyBhbiBhcnJheSBvZiBjb2RlcG9pbnRzLlxuXHRsZXQgcHJlU3RyaW5nSW5kZXggPSAwO1xuXG5cdGZvciAoY29uc3QgW2luZGV4LCBjaGFyYWN0ZXJdIG9mIHByZS5lbnRyaWVzKCkpIHtcblx0XHRyZXR1cm5WYWx1ZSArPSBjaGFyYWN0ZXI7XG5cblx0XHRpZiAoRVNDQVBFUy5oYXMoY2hhcmFjdGVyKSkge1xuXHRcdFx0Y29uc3Qge2dyb3Vwc30gPSBuZXcgUmVnRXhwKGAoPzpcXFxcJHtBTlNJX0NTSX0oPzxjb2RlPlxcXFxkKyltfFxcXFwke0FOU0lfRVNDQVBFX0xJTkt9KD88dXJpPi4qKSR7QU5TSV9FU0NBUEVfQkVMTH0pYCkuZXhlYyhwcmVTdHJpbmcuc2xpY2UocHJlU3RyaW5nSW5kZXgpKSB8fCB7Z3JvdXBzOiB7fX07XG5cdFx0XHRpZiAoZ3JvdXBzLmNvZGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdCBjb2RlID0gTnVtYmVyLnBhcnNlRmxvYXQoZ3JvdXBzLmNvZGUpO1xuXHRcdFx0XHRlc2NhcGVDb2RlID0gY29kZSA9PT0gRU5EX0NPREUgPyB1bmRlZmluZWQgOiBjb2RlO1xuXHRcdFx0fSBlbHNlIGlmIChncm91cHMudXJpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZXNjYXBlVXJsID0gZ3JvdXBzLnVyaS5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBncm91cHMudXJpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGNvZGUgPSBhbnNpU3R5bGVzLmNvZGVzLmdldChOdW1iZXIoZXNjYXBlQ29kZSkpO1xuXG5cdFx0aWYgKHByZVtpbmRleCArIDFdID09PSAnXFxuJykge1xuXHRcdFx0aWYgKGVzY2FwZVVybCkge1xuXHRcdFx0XHRyZXR1cm5WYWx1ZSArPSB3cmFwQW5zaUh5cGVybGluaygnJyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlc2NhcGVDb2RlICYmIGNvZGUpIHtcblx0XHRcdFx0cmV0dXJuVmFsdWUgKz0gd3JhcEFuc2lDb2RlKGNvZGUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoY2hhcmFjdGVyID09PSAnXFxuJykge1xuXHRcdFx0aWYgKGVzY2FwZUNvZGUgJiYgY29kZSkge1xuXHRcdFx0XHRyZXR1cm5WYWx1ZSArPSB3cmFwQW5zaUNvZGUoZXNjYXBlQ29kZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlc2NhcGVVcmwpIHtcblx0XHRcdFx0cmV0dXJuVmFsdWUgKz0gd3JhcEFuc2lIeXBlcmxpbmsoZXNjYXBlVXJsKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRwcmVTdHJpbmdJbmRleCArPSBjaGFyYWN0ZXIubGVuZ3RoO1xuXHR9XG5cblx0cmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxuLy8gRm9yIGVhY2ggbmV3bGluZSwgaW52b2tlIHRoZSBtZXRob2Qgc2VwYXJhdGVseVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd3JhcEFuc2koc3RyaW5nLCBjb2x1bW5zLCBvcHRpb25zKSB7XG5cdHJldHVybiBTdHJpbmcoc3RyaW5nKVxuXHRcdC5ub3JtYWxpemUoKVxuXHRcdC5yZXBsYWNlQWxsKCdcXHJcXG4nLCAnXFxuJylcblx0XHQuc3BsaXQoJ1xcbicpXG5cdFx0Lm1hcChsaW5lID0+IGV4ZWMobGluZSwgY29sdW1ucywgb3B0aW9ucykpXG5cdFx0LmpvaW4oJ1xcbicpO1xufVxuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE2LCBDb250cmlidXRvcnNcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbWVsQ2FzZShzdHIpIHtcbiAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYW4gYXJndW1lbnQgaXMgcHJvdmlkZWQgYXMgY2FtZWwgY2FzZSwgZS5nLiwgZm9vQmFyLlxuICAgIC8vIGJ5IGVuc3VyaW5nIHRoYXQgdGhlIHN0cmluZyBpc24ndCBhbHJlYWR5IG1peGVkIGNhc2U6XG4gICAgY29uc3QgaXNDYW1lbENhc2UgPSBzdHIgIT09IHN0ci50b0xvd2VyQ2FzZSgpICYmIHN0ciAhPT0gc3RyLnRvVXBwZXJDYXNlKCk7XG4gICAgaWYgKCFpc0NhbWVsQ2FzZSkge1xuICAgICAgICBzdHIgPSBzdHIudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgaWYgKHN0ci5pbmRleE9mKCctJykgPT09IC0xICYmIHN0ci5pbmRleE9mKCdfJykgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBsZXQgY2FtZWxjYXNlID0gJyc7XG4gICAgICAgIGxldCBuZXh0Q2hyVXBwZXIgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgbGVhZGluZ0h5cGhlbnMgPSBzdHIubWF0Y2goL14tKy8pO1xuICAgICAgICBmb3IgKGxldCBpID0gbGVhZGluZ0h5cGhlbnMgPyBsZWFkaW5nSHlwaGVuc1swXS5sZW5ndGggOiAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgY2hyID0gc3RyLmNoYXJBdChpKTtcbiAgICAgICAgICAgIGlmIChuZXh0Q2hyVXBwZXIpIHtcbiAgICAgICAgICAgICAgICBuZXh0Q2hyVXBwZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjaHIgPSBjaHIudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpICE9PSAwICYmIChjaHIgPT09ICctJyB8fCBjaHIgPT09ICdfJykpIHtcbiAgICAgICAgICAgICAgICBuZXh0Q2hyVXBwZXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hyICE9PSAnLScgJiYgY2hyICE9PSAnXycpIHtcbiAgICAgICAgICAgICAgICBjYW1lbGNhc2UgKz0gY2hyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW1lbGNhc2U7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGRlY2FtZWxpemUoc3RyLCBqb2luU3RyaW5nKSB7XG4gICAgY29uc3QgbG93ZXJjYXNlID0gc3RyLnRvTG93ZXJDYXNlKCk7XG4gICAgam9pblN0cmluZyA9IGpvaW5TdHJpbmcgfHwgJy0nO1xuICAgIGxldCBub3RDYW1lbGNhc2UgPSAnJztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjaHJMb3dlciA9IGxvd2VyY2FzZS5jaGFyQXQoaSk7XG4gICAgICAgIGNvbnN0IGNoclN0cmluZyA9IHN0ci5jaGFyQXQoaSk7XG4gICAgICAgIGlmIChjaHJMb3dlciAhPT0gY2hyU3RyaW5nICYmIGkgPiAwKSB7XG4gICAgICAgICAgICBub3RDYW1lbGNhc2UgKz0gYCR7am9pblN0cmluZ30ke2xvd2VyY2FzZS5jaGFyQXQoaSl9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5vdENhbWVsY2FzZSArPSBjaHJTdHJpbmc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vdENhbWVsY2FzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBsb29rc0xpa2VOdW1iZXIoeCkge1xuICAgIGlmICh4ID09PSBudWxsIHx8IHggPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGlmIGxvYWRlZCBmcm9tIGNvbmZpZywgbWF5IGFscmVhZHkgYmUgYSBudW1iZXIuXG4gICAgaWYgKHR5cGVvZiB4ID09PSAnbnVtYmVyJylcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgLy8gaGV4YWRlY2ltYWwuXG4gICAgaWYgKC9eMHhbMC05YS1mXSskL2kudGVzdCh4KSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgLy8gZG9uJ3QgdHJlYXQgMDEyMyBhcyBhIG51bWJlcjsgYXMgaXQgZHJvcHMgdGhlIGxlYWRpbmcgJzAnLlxuICAgIGlmICgvXjBbXi5dLy50ZXN0KHgpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIC9eWy1dPyg/OlxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykoZVstK10/XFxkKyk/JC8udGVzdCh4KTtcbn1cbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNiwgQ29udHJpYnV0b3JzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG4gKi9cbmV4cG9ydCB2YXIgRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXk7XG4oZnVuY3Rpb24gKERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5KSB7XG4gICAgRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXlbXCJCT09MRUFOXCJdID0gXCJib29sZWFuXCI7XG4gICAgRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXlbXCJTVFJJTkdcIl0gPSBcInN0cmluZ1wiO1xuICAgIERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5W1wiTlVNQkVSXCJdID0gXCJudW1iZXJcIjtcbiAgICBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleVtcIkFSUkFZXCJdID0gXCJhcnJheVwiO1xufSkoRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkgfHwgKERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5ID0ge30pKTtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNiwgQ29udHJpYnV0b3JzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIHByZWZlci1hcnJvdy1jYWxsYmFjayAqL1xuaW1wb3J0IHsgdG9rZW5pemVBcmdTdHJpbmcgfSBmcm9tICcuL3Rva2VuaXplLWFyZy1zdHJpbmcuanMnO1xuaW1wb3J0IHsgRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkgfSBmcm9tICcuL3lhcmdzLXBhcnNlci10eXBlcy5qcyc7XG5pbXBvcnQgeyBjYW1lbENhc2UsIGRlY2FtZWxpemUsIGxvb2tzTGlrZU51bWJlciB9IGZyb20gJy4vc3RyaW5nLXV0aWxzLmpzJztcbmxldCBtaXhpbjtcbmV4cG9ydCBjbGFzcyBZYXJnc1BhcnNlciB7XG4gICAgY29uc3RydWN0b3IoX21peGluKSB7XG4gICAgICAgIG1peGluID0gX21peGluO1xuICAgIH1cbiAgICBwYXJzZShhcmdzSW5wdXQsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgYWxpYXM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGFycmF5OiB1bmRlZmluZWQsXG4gICAgICAgICAgICBib29sZWFuOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBjb25maWc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbmZpZ09iamVjdHM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvZXJjZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY291bnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGRlZmF1bHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGVudlByZWZpeDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbmFyZzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbm9ybWFsaXplOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBzdHJpbmc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG51bWJlcjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgX186IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGtleTogdW5kZWZpbmVkXG4gICAgICAgIH0sIG9wdGlvbnMpO1xuICAgICAgICAvLyBhbGxvdyBhIHN0cmluZyBhcmd1bWVudCB0byBiZSBwYXNzZWQgaW4gcmF0aGVyXG4gICAgICAgIC8vIHRoYW4gYW4gYXJndiBhcnJheS5cbiAgICAgICAgY29uc3QgYXJncyA9IHRva2VuaXplQXJnU3RyaW5nKGFyZ3NJbnB1dCk7XG4gICAgICAgIC8vIHRva2VuaXplQXJnU3RyaW5nIGFkZHMgZXh0cmEgcXVvdGVzIHRvIGFyZ3MgaWYgYXJnc0lucHV0IGlzIGEgc3RyaW5nXG4gICAgICAgIC8vIG9ubHkgc3RyaXAgdGhvc2UgZXh0cmEgcXVvdGVzIGluIHByb2Nlc3NWYWx1ZSBpZiBhcmdzSW5wdXQgaXMgYSBzdHJpbmdcbiAgICAgICAgY29uc3QgaW5wdXRJc1N0cmluZyA9IHR5cGVvZiBhcmdzSW5wdXQgPT09ICdzdHJpbmcnO1xuICAgICAgICAvLyBhbGlhc2VzIG1pZ2h0IGhhdmUgdHJhbnNpdGl2ZSByZWxhdGlvbnNoaXBzLCBub3JtYWxpemUgdGhpcy5cbiAgICAgICAgY29uc3QgYWxpYXNlcyA9IGNvbWJpbmVBbGlhc2VzKE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSwgb3B0cy5hbGlhcykpO1xuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICAnYm9vbGVhbi1uZWdhdGlvbic6IHRydWUsXG4gICAgICAgICAgICAnY2FtZWwtY2FzZS1leHBhbnNpb24nOiB0cnVlLFxuICAgICAgICAgICAgJ2NvbWJpbmUtYXJyYXlzJzogZmFsc2UsXG4gICAgICAgICAgICAnZG90LW5vdGF0aW9uJzogdHJ1ZSxcbiAgICAgICAgICAgICdkdXBsaWNhdGUtYXJndW1lbnRzLWFycmF5JzogdHJ1ZSxcbiAgICAgICAgICAgICdmbGF0dGVuLWR1cGxpY2F0ZS1hcnJheXMnOiB0cnVlLFxuICAgICAgICAgICAgJ2dyZWVkeS1hcnJheXMnOiB0cnVlLFxuICAgICAgICAgICAgJ2hhbHQtYXQtbm9uLW9wdGlvbic6IGZhbHNlLFxuICAgICAgICAgICAgJ25hcmdzLWVhdHMtb3B0aW9ucyc6IGZhbHNlLFxuICAgICAgICAgICAgJ25lZ2F0aW9uLXByZWZpeCc6ICduby0nLFxuICAgICAgICAgICAgJ3BhcnNlLW51bWJlcnMnOiB0cnVlLFxuICAgICAgICAgICAgJ3BhcnNlLXBvc2l0aW9uYWwtbnVtYmVycyc6IHRydWUsXG4gICAgICAgICAgICAncG9wdWxhdGUtLSc6IGZhbHNlLFxuICAgICAgICAgICAgJ3NldC1wbGFjZWhvbGRlci1rZXknOiBmYWxzZSxcbiAgICAgICAgICAgICdzaG9ydC1vcHRpb24tZ3JvdXBzJzogdHJ1ZSxcbiAgICAgICAgICAgICdzdHJpcC1hbGlhc2VkJzogZmFsc2UsXG4gICAgICAgICAgICAnc3RyaXAtZGFzaGVkJzogZmFsc2UsXG4gICAgICAgICAgICAndW5rbm93bi1vcHRpb25zLWFzLWFyZ3MnOiBmYWxzZVxuICAgICAgICB9LCBvcHRzLmNvbmZpZ3VyYXRpb24pO1xuICAgICAgICBjb25zdCBkZWZhdWx0cyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSwgb3B0cy5kZWZhdWx0KTtcbiAgICAgICAgY29uc3QgY29uZmlnT2JqZWN0cyA9IG9wdHMuY29uZmlnT2JqZWN0cyB8fCBbXTtcbiAgICAgICAgY29uc3QgZW52UHJlZml4ID0gb3B0cy5lbnZQcmVmaXg7XG4gICAgICAgIGNvbnN0IG5vdEZsYWdzT3B0aW9uID0gY29uZmlndXJhdGlvblsncG9wdWxhdGUtLSddO1xuICAgICAgICBjb25zdCBub3RGbGFnc0FyZ3YgPSBub3RGbGFnc09wdGlvbiA/ICctLScgOiAnXyc7XG4gICAgICAgIGNvbnN0IG5ld0FsaWFzZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBjb25zdCBkZWZhdWx0ZWQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAvLyBhbGxvdyBhIGkxOG4gaGFuZGxlciB0byBiZSBwYXNzZWQgaW4sIGRlZmF1bHQgdG8gYSBmYWtlIG9uZSAodXRpbC5mb3JtYXQpLlxuICAgICAgICBjb25zdCBfXyA9IG9wdHMuX18gfHwgbWl4aW4uZm9ybWF0O1xuICAgICAgICBjb25zdCBmbGFncyA9IHtcbiAgICAgICAgICAgIGFsaWFzZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBhcnJheXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBib29sczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIHN0cmluZ3M6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBudW1iZXJzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgY291bnRzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgbm9ybWFsaXplOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgY29uZmlnczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIG5hcmdzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgY29lcmNpb25zOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAga2V5czogW11cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbmVnYXRpdmUgPSAvXi0oWzAtOV0rKFxcLlswLTldKyk/fFxcLlswLTldKykkLztcbiAgICAgICAgY29uc3QgbmVnYXRlZEJvb2xlYW4gPSBuZXcgUmVnRXhwKCdeLS0nICsgY29uZmlndXJhdGlvblsnbmVnYXRpb24tcHJlZml4J10gKyAnKC4rKScpO1xuICAgICAgICBbXS5jb25jYXQob3B0cy5hcnJheSB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKG9wdCkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gdHlwZW9mIG9wdCA9PT0gJ29iamVjdCcgPyBvcHQua2V5IDogb3B0O1xuICAgICAgICAgICAgLy8gYXNzaWduIHRvIGZsYWdzW2Jvb2xzfHN0cmluZ3N8bnVtYmVyc11cbiAgICAgICAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBPYmplY3Qua2V5cyhvcHQpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJyYXlGbGFnS2V5cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgYm9vbGVhbjogJ2Jvb2xzJyxcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nOiAnc3RyaW5ncycsXG4gICAgICAgICAgICAgICAgICAgIG51bWJlcjogJ251bWJlcnMnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXlGbGFnS2V5c1trZXldO1xuICAgICAgICAgICAgfSkuZmlsdGVyKEJvb2xlYW4pLnBvcCgpO1xuICAgICAgICAgICAgLy8gYXNzaWduIGtleSB0byBiZSBjb2VyY2VkXG4gICAgICAgICAgICBpZiAoYXNzaWdubWVudCkge1xuICAgICAgICAgICAgICAgIGZsYWdzW2Fzc2lnbm1lbnRdW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmxhZ3MuYXJyYXlzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBbXS5jb25jYXQob3B0cy5ib29sZWFuIHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBmbGFncy5ib29sc1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGZsYWdzLmtleXMucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgW10uY29uY2F0KG9wdHMuc3RyaW5nIHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBmbGFncy5zdHJpbmdzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBbXS5jb25jYXQob3B0cy5udW1iZXIgfHwgW10pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGZsYWdzLm51bWJlcnNba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFtdLmNvbmNhdChvcHRzLmNvdW50IHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBmbGFncy5jb3VudHNba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFtdLmNvbmNhdChvcHRzLm5vcm1hbGl6ZSB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgZmxhZ3Mubm9ybWFsaXplW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodHlwZW9mIG9wdHMubmFyZyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKG9wdHMubmFyZykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MubmFyZ3Nba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG9wdHMuY29lcmNlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMob3B0cy5jb2VyY2UpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY29lcmNpb25zW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRzLmNvbmZpZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdHMuY29uZmlnKSB8fCB0eXBlb2Ygb3B0cy5jb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgIFtdLmNvbmNhdChvcHRzLmNvbmZpZykuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5jb25maWdzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9wdHMuY29uZmlnID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKG9wdHMuY29uZmlnKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY29uZmlnc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjcmVhdGUgYSBsb29rdXAgdGFibGUgdGhhdCB0YWtlcyBpbnRvIGFjY291bnQgYWxsXG4gICAgICAgIC8vIGNvbWJpbmF0aW9ucyBvZiBhbGlhc2VzOiB7ZjogWydmb28nXSwgZm9vOiBbJ2YnXX1cbiAgICAgICAgZXh0ZW5kQWxpYXNlcyhvcHRzLmtleSwgYWxpYXNlcywgb3B0cy5kZWZhdWx0LCBmbGFncy5hcnJheXMpO1xuICAgICAgICAvLyBhcHBseSBkZWZhdWx0IHZhbHVlcyB0byBhbGwgYWxpYXNlcy5cbiAgICAgICAgT2JqZWN0LmtleXMoZGVmYXVsdHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgKGZsYWdzLmFsaWFzZXNba2V5XSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAoYWxpYXMpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1thbGlhc10gPSBkZWZhdWx0c1trZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgICAgICBjaGVja0NvbmZpZ3VyYXRpb24oKTtcbiAgICAgICAgbGV0IG5vdEZsYWdzID0gW107XG4gICAgICAgIGNvbnN0IGFyZ3YgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksIHsgXzogW10gfSk7XG4gICAgICAgIC8vIFRPRE8oYmNvZSk6IGZvciB0aGUgZmlyc3QgcGFzcyBhdCByZW1vdmluZyBvYmplY3QgcHJvdG90eXBlICB3ZSBkaWRuJ3RcbiAgICAgICAgLy8gcmVtb3ZlIGFsbCBwcm90b3R5cGVzIGZyb20gb2JqZWN0cyByZXR1cm5lZCBieSB0aGlzIEFQSSwgd2UgbWlnaHQgd2FudFxuICAgICAgICAvLyB0byBncmFkdWFsbHkgbW92ZSB0b3dhcmRzIGRvaW5nIHNvLlxuICAgICAgICBjb25zdCBhcmd2UmV0dXJuID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYXJnID0gYXJnc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHRydW5jYXRlZEFyZyA9IGFyZy5yZXBsYWNlKC9eLXszLH0vLCAnLS0tJyk7XG4gICAgICAgICAgICBsZXQgYnJva2VuO1xuICAgICAgICAgICAgbGV0IGtleTtcbiAgICAgICAgICAgIGxldCBsZXR0ZXJzO1xuICAgICAgICAgICAgbGV0IG07XG4gICAgICAgICAgICBsZXQgbmV4dDtcbiAgICAgICAgICAgIGxldCB2YWx1ZTtcbiAgICAgICAgICAgIC8vIGFueSB1bmtub3duIG9wdGlvbiAoZXhjZXB0IGZvciBlbmQtb2Ytb3B0aW9ucywgXCItLVwiKVxuICAgICAgICAgICAgaWYgKGFyZyAhPT0gJy0tJyAmJiAvXi0vLnRlc3QoYXJnKSAmJiBpc1Vua25vd25PcHRpb25Bc0FyZyhhcmcpKSB7XG4gICAgICAgICAgICAgICAgcHVzaFBvc2l0aW9uYWwoYXJnKTtcbiAgICAgICAgICAgICAgICAvLyAtLS0sIC0tLT0sIC0tLS0sIGV0YyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRydW5jYXRlZEFyZy5tYXRjaCgvXi0tLSsoPXwkKS8pKSB7XG4gICAgICAgICAgICAgICAgLy8gb3B0aW9ucyB3aXRob3V0IGtleSBuYW1lIGFyZSBpbnZhbGlkLlxuICAgICAgICAgICAgICAgIHB1c2hQb3NpdGlvbmFsKGFyZyk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgLy8gLS0gc2VwYXJhdGVkIGJ5ID1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZy5tYXRjaCgvXi0tLis9LykgfHwgKCFjb25maWd1cmF0aW9uWydzaG9ydC1vcHRpb24tZ3JvdXBzJ10gJiYgYXJnLm1hdGNoKC9eLS4rPS8pKSkge1xuICAgICAgICAgICAgICAgIC8vIFVzaW5nIFtcXHNcXFNdIGluc3RlYWQgb2YgLiBiZWNhdXNlIGpzIGRvZXNuJ3Qgc3VwcG9ydCB0aGVcbiAgICAgICAgICAgICAgICAvLyAnZG90YWxsJyByZWdleCBtb2RpZmllci4gU2VlOlxuICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzEwNjgzMDgvMTMyMTZcbiAgICAgICAgICAgICAgICBtID0gYXJnLm1hdGNoKC9eLS0/KFtePV0rKT0oW1xcc1xcU10qKSQvKTtcbiAgICAgICAgICAgICAgICAvLyBhcnJheXMgZm9ybWF0ID0gJy0tZj1hIGIgYydcbiAgICAgICAgICAgICAgICBpZiAobSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KG0pICYmIG0ubGVuZ3RoID49IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhtWzFdLCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0QXJyYXkoaSwgbVsxXSwgYXJncywgbVsyXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKG1bMV0sIGZsYWdzLm5hcmdzKSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5hcmdzIGZvcm1hdCA9ICctLWY9bW9ua2V5IHdhc2hpbmcgY2F0J1xuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdE5hcmdzKGksIG1bMV0sIGFyZ3MsIG1bMl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKG1bMV0sIG1bMl0sIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnLm1hdGNoKG5lZ2F0ZWRCb29sZWFuKSAmJiBjb25maWd1cmF0aW9uWydib29sZWFuLW5lZ2F0aW9uJ10pIHtcbiAgICAgICAgICAgICAgICBtID0gYXJnLm1hdGNoKG5lZ2F0ZWRCb29sZWFuKTtcbiAgICAgICAgICAgICAgICBpZiAobSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KG0pICYmIG0ubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbVsxXTtcbiAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYXJyYXlzKSA/IFtmYWxzZV0gOiBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIC0tIHNlcGFyYXRlZCBieSBzcGFjZS5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZy5tYXRjaCgvXi0tLisvKSB8fCAoIWNvbmZpZ3VyYXRpb25bJ3Nob3J0LW9wdGlvbi1ncm91cHMnXSAmJiBhcmcubWF0Y2goL14tW14tXSsvKSkpIHtcbiAgICAgICAgICAgICAgICBtID0gYXJnLm1hdGNoKC9eLS0/KC4rKS8pO1xuICAgICAgICAgICAgICAgIGlmIChtICE9PSBudWxsICYmIEFycmF5LmlzQXJyYXkobSkgJiYgbS5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBtWzFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJyYXkgZm9ybWF0ID0gJy0tZm9vIGEgYiBjJ1xuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdEFycmF5KGksIGtleSwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmFyZ3MgZm9ybWF0ID0gJy0tZm9vIGEgYiBjJ1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2hvdWxkIGJlIHRydXRoeSBldmVuIGlmOiBmbGFncy5uYXJnc1trZXldID09PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0TmFyZ3MoaSwga2V5LCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSBhcmdzW2kgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICE9PSB1bmRlZmluZWQgJiYgKCFuZXh0Lm1hdGNoKC9eLS8pIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5tYXRjaChuZWdhdGl2ZSkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5jb3VudHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoL14odHJ1ZXxmYWxzZSkkLy50ZXN0KG5leHQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgZGVmYXVsdFZhbHVlKGtleSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGRvdC1ub3RhdGlvbiBmbGFnIHNlcGFyYXRlZCBieSAnPScuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tLlxcLi4rPS8pKSB7XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaCgvXi0oW149XSspPShbXFxzXFxTXSopJC8pO1xuICAgICAgICAgICAgICAgIGlmIChtICE9PSBudWxsICYmIEFycmF5LmlzQXJyYXkobSkgJiYgbS5sZW5ndGggPj0gMykge1xuICAgICAgICAgICAgICAgICAgICBzZXRBcmcobVsxXSwgbVsyXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGRvdC1ub3RhdGlvbiBmbGFnIHNlcGFyYXRlZCBieSBzcGFjZS5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZy5tYXRjaCgvXi0uXFwuLisvKSAmJiAhYXJnLm1hdGNoKG5lZ2F0aXZlKSkge1xuICAgICAgICAgICAgICAgIG5leHQgPSBhcmdzW2kgKyAxXTtcbiAgICAgICAgICAgICAgICBtID0gYXJnLm1hdGNoKC9eLSguXFwuLispLyk7XG4gICAgICAgICAgICAgICAgaWYgKG0gIT09IG51bGwgJiYgQXJyYXkuaXNBcnJheShtKSAmJiBtLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG1bMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICE9PSB1bmRlZmluZWQgJiYgIW5leHQubWF0Y2goL14tLykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5jb3VudHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGRlZmF1bHRWYWx1ZShrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZy5tYXRjaCgvXi1bXi1dKy8pICYmICFhcmcubWF0Y2gobmVnYXRpdmUpKSB7XG4gICAgICAgICAgICAgICAgbGV0dGVycyA9IGFyZy5zbGljZSgxLCAtMSkuc3BsaXQoJycpO1xuICAgICAgICAgICAgICAgIGJyb2tlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGV0dGVycy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBuZXh0ID0gYXJnLnNsaWNlKGogKyAyKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxldHRlcnNbaiArIDFdICYmIGxldHRlcnNbaiArIDFdID09PSAnPScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXJnLnNsaWNlKGogKyAzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGxldHRlcnNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFycmF5IGZvcm1hdCA9ICctZj1hIGIgYydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0QXJyYXkoaSwga2V5LCBhcmdzLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5uYXJncykgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmFyZ3MgZm9ybWF0ID0gJy1mPW1vbmtleSB3YXNoaW5nIGNhdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0TmFyZ3MoaSwga2V5LCBhcmdzLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicm9rZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgPT09ICctJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGxldHRlcnNbal0sIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gY3VycmVudCBsZXR0ZXIgaXMgYW4gYWxwaGFiZXRpYyBjaGFyYWN0ZXIgYW5kIG5leHQgdmFsdWUgaXMgYSBudW1iZXJcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9bQS1aYS16XS8udGVzdChsZXR0ZXJzW2pdKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgL14tP1xcZCsoXFwuXFxkKik/KGUtP1xcZCspPyQvLnRlc3QobmV4dCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrQWxsQWxpYXNlcyhuZXh0LCBmbGFncy5ib29scykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcobGV0dGVyc1tqXSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicm9rZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGxldHRlcnNbaiArIDFdICYmIGxldHRlcnNbaiArIDFdLm1hdGNoKC9cXFcvKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGxldHRlcnNbal0sIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJva2VuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGxldHRlcnNbal0sIGRlZmF1bHRWYWx1ZShsZXR0ZXJzW2pdKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAga2V5ID0gYXJnLnNsaWNlKC0xKVswXTtcbiAgICAgICAgICAgICAgICBpZiAoIWJyb2tlbiAmJiBrZXkgIT09ICctJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJyYXkgZm9ybWF0ID0gJy1mIGEgYiBjJ1xuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdEFycmF5KGksIGtleSwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmFyZ3MgZm9ybWF0ID0gJy1mIGEgYiBjJ1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2hvdWxkIGJlIHRydXRoeSBldmVuIGlmOiBmbGFncy5uYXJnc1trZXldID09PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0TmFyZ3MoaSwga2V5LCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSBhcmdzW2kgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICE9PSB1bmRlZmluZWQgJiYgKCEvXigtfC0tKVteLV0vLnRlc3QobmV4dCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Lm1hdGNoKG5lZ2F0aXZlKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgvXih0cnVlfGZhbHNlKSQvLnRlc3QobmV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBkZWZhdWx0VmFsdWUoa2V5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tWzAtOV0kLykgJiZcbiAgICAgICAgICAgICAgICBhcmcubWF0Y2gobmVnYXRpdmUpICYmXG4gICAgICAgICAgICAgICAgY2hlY2tBbGxBbGlhc2VzKGFyZy5zbGljZSgxKSwgZmxhZ3MuYm9vbHMpKSB7XG4gICAgICAgICAgICAgICAgLy8gc2luZ2xlLWRpZ2l0IGJvb2xlYW4gYWxpYXMsIGUuZzogeGFyZ3MgLTBcbiAgICAgICAgICAgICAgICBrZXkgPSBhcmcuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgZGVmYXVsdFZhbHVlKGtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnID09PSAnLS0nKSB7XG4gICAgICAgICAgICAgICAgbm90RmxhZ3MgPSBhcmdzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbmZpZ3VyYXRpb25bJ2hhbHQtYXQtbm9uLW9wdGlvbiddKSB7XG4gICAgICAgICAgICAgICAgbm90RmxhZ3MgPSBhcmdzLnNsaWNlKGkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcHVzaFBvc2l0aW9uYWwoYXJnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvcmRlciBvZiBwcmVjZWRlbmNlOlxuICAgICAgICAvLyAxLiBjb21tYW5kIGxpbmUgYXJnXG4gICAgICAgIC8vIDIuIHZhbHVlIGZyb20gZW52IHZhclxuICAgICAgICAvLyAzLiB2YWx1ZSBmcm9tIGNvbmZpZyBmaWxlXG4gICAgICAgIC8vIDQuIHZhbHVlIGZyb20gY29uZmlnIG9iamVjdHNcbiAgICAgICAgLy8gNS4gY29uZmlndXJlZCBkZWZhdWx0IHZhbHVlXG4gICAgICAgIGFwcGx5RW52VmFycyhhcmd2LCB0cnVlKTsgLy8gc3BlY2lhbCBjYXNlOiBjaGVjayBlbnYgdmFycyB0aGF0IHBvaW50IHRvIGNvbmZpZyBmaWxlXG4gICAgICAgIGFwcGx5RW52VmFycyhhcmd2LCBmYWxzZSk7XG4gICAgICAgIHNldENvbmZpZyhhcmd2KTtcbiAgICAgICAgc2V0Q29uZmlnT2JqZWN0cygpO1xuICAgICAgICBhcHBseURlZmF1bHRzQW5kQWxpYXNlcyhhcmd2LCBmbGFncy5hbGlhc2VzLCBkZWZhdWx0cywgdHJ1ZSk7XG4gICAgICAgIGFwcGx5Q29lcmNpb25zKGFyZ3YpO1xuICAgICAgICBpZiAoY29uZmlndXJhdGlvblsnc2V0LXBsYWNlaG9sZGVyLWtleSddKVxuICAgICAgICAgICAgc2V0UGxhY2Vob2xkZXJLZXlzKGFyZ3YpO1xuICAgICAgICAvLyBmb3IgYW55IGNvdW50cyBlaXRoZXIgbm90IGluIGFyZ3Mgb3Igd2l0aG91dCBhbiBleHBsaWNpdCBkZWZhdWx0LCBzZXQgdG8gMFxuICAgICAgICBPYmplY3Qua2V5cyhmbGFncy5jb3VudHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaWYgKCFoYXNLZXkoYXJndiwga2V5LnNwbGl0KCcuJykpKVxuICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIDApO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gJy0tJyBkZWZhdWx0cyB0byB1bmRlZmluZWQuXG4gICAgICAgIGlmIChub3RGbGFnc09wdGlvbiAmJiBub3RGbGFncy5sZW5ndGgpXG4gICAgICAgICAgICBhcmd2W25vdEZsYWdzQXJndl0gPSBbXTtcbiAgICAgICAgbm90RmxhZ3MuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBhcmd2W25vdEZsYWdzQXJndl0ucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10gJiYgY29uZmlndXJhdGlvblsnc3RyaXAtZGFzaGVkJ10pIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZpbHRlcihrZXkgPT4ga2V5ICE9PSAnLS0nICYmIGtleS5pbmNsdWRlcygnLScpKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGFyZ3Zba2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWd1cmF0aW9uWydzdHJpcC1hbGlhc2VkJ10pIHtcbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIFtdLmNvbmNhdCguLi5PYmplY3Qua2V5cyhhbGlhc2VzKS5tYXAoayA9PiBhbGlhc2VzW2tdKSkuZm9yRWFjaChhbGlhcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10gJiYgYWxpYXMuaW5jbHVkZXMoJy0nKSkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgYXJndlthbGlhcy5zcGxpdCgnLicpLm1hcChwcm9wID0+IGNhbWVsQ2FzZShwcm9wKSkuam9pbignLicpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVsZXRlIGFyZ3ZbYWxpYXNdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUHVzaCBhcmd1bWVudCBpbnRvIHBvc2l0aW9uYWwgYXJyYXksIGFwcGx5aW5nIG51bWVyaWMgY29lcmNpb246XG4gICAgICAgIGZ1bmN0aW9uIHB1c2hQb3NpdGlvbmFsKGFyZykge1xuICAgICAgICAgICAgY29uc3QgbWF5YmVDb2VyY2VkTnVtYmVyID0gbWF5YmVDb2VyY2VOdW1iZXIoJ18nLCBhcmcpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBtYXliZUNvZXJjZWROdW1iZXIgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBtYXliZUNvZXJjZWROdW1iZXIgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgYXJndi5fLnB1c2gobWF5YmVDb2VyY2VkTnVtYmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBob3cgbWFueSBhcmd1bWVudHMgc2hvdWxkIHdlIGNvbnN1bWUsIGJhc2VkXG4gICAgICAgIC8vIG9uIHRoZSBuYXJncyBvcHRpb24/XG4gICAgICAgIGZ1bmN0aW9uIGVhdE5hcmdzKGksIGtleSwgYXJncywgYXJnQWZ0ZXJFcXVhbFNpZ24pIHtcbiAgICAgICAgICAgIGxldCBpaTtcbiAgICAgICAgICAgIGxldCB0b0VhdCA9IGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKTtcbiAgICAgICAgICAgIC8vIE5hTiBoYXMgYSBzcGVjaWFsIG1lYW5pbmcgZm9yIHRoZSBhcnJheSB0eXBlLCBpbmRpY2F0aW5nIHRoYXQgb25lIG9yXG4gICAgICAgICAgICAvLyBtb3JlIHZhbHVlcyBhcmUgZXhwZWN0ZWQuXG4gICAgICAgICAgICB0b0VhdCA9IHR5cGVvZiB0b0VhdCAhPT0gJ251bWJlcicgfHwgaXNOYU4odG9FYXQpID8gMSA6IHRvRWF0O1xuICAgICAgICAgICAgaWYgKHRvRWF0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChhcmdBZnRlckVxdWFsU2lnbikpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFcnJvcihfXygnQXJndW1lbnQgdW5leHBlY3RlZCBmb3I6ICVzJywga2V5KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGRlZmF1bHRWYWx1ZShrZXkpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBhdmFpbGFibGUgPSBpc1VuZGVmaW5lZChhcmdBZnRlckVxdWFsU2lnbikgPyAwIDogMTtcbiAgICAgICAgICAgIGlmIChjb25maWd1cmF0aW9uWyduYXJncy1lYXRzLW9wdGlvbnMnXSkge1xuICAgICAgICAgICAgICAgIC8vIGNsYXNzaWMgYmVoYXZpb3IsIHlhcmdzIGVhdHMgcG9zaXRpb25hbCBhbmQgZGFzaCBhcmd1bWVudHMuXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIC0gKGkgKyAxKSArIGF2YWlsYWJsZSA8IHRvRWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ05vdCBlbm91Z2ggYXJndW1lbnRzIGZvbGxvd2luZzogJXMnLCBrZXkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gdG9FYXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBuYXJncyB3aWxsIG5vdCBjb25zdW1lIGZsYWcgYXJndW1lbnRzLCBlLmcuLCAtYWJjLCAtLWZvbyxcbiAgICAgICAgICAgICAgICAvLyBhbmQgdGVybWluYXRlcyB3aGVuIG9uZSBpcyBvYnNlcnZlZC5cbiAgICAgICAgICAgICAgICBmb3IgKGlpID0gaSArIDE7IGlpIDwgYXJncy5sZW5ndGg7IGlpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmdzW2lpXS5tYXRjaCgvXi1bXjAtOV0vKSB8fCBhcmdzW2lpXS5tYXRjaChuZWdhdGl2ZSkgfHwgaXNVbmtub3duT3B0aW9uQXNBcmcoYXJnc1tpaV0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlKys7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlIDwgdG9FYXQpXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ05vdCBlbm91Z2ggYXJndW1lbnRzIGZvbGxvd2luZzogJXMnLCBrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjb25zdW1lZCA9IE1hdGgubWluKGF2YWlsYWJsZSwgdG9FYXQpO1xuICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChhcmdBZnRlckVxdWFsU2lnbikgJiYgY29uc3VtZWQgPiAwKSB7XG4gICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgYXJnQWZ0ZXJFcXVhbFNpZ24pO1xuICAgICAgICAgICAgICAgIGNvbnN1bWVkLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGlpID0gaSArIDE7IGlpIDwgKGNvbnN1bWVkICsgaSArIDEpOyBpaSsrKSB7XG4gICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgYXJnc1tpaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChpICsgY29uc3VtZWQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGFuIG9wdGlvbiBpcyBhbiBhcnJheSwgZWF0IGFsbCBub24taHlwaGVuYXRlZCBhcmd1bWVudHNcbiAgICAgICAgLy8gZm9sbG93aW5nIGl0Li4uIFlVTSFcbiAgICAgICAgLy8gZS5nLiwgLS1mb28gYXBwbGUgYmFuYW5hIGNhdCBiZWNvbWVzIFtcImFwcGxlXCIsIFwiYmFuYW5hXCIsIFwiY2F0XCJdXG4gICAgICAgIGZ1bmN0aW9uIGVhdEFycmF5KGksIGtleSwgYXJncywgYXJnQWZ0ZXJFcXVhbFNpZ24pIHtcbiAgICAgICAgICAgIGxldCBhcmdzVG9TZXQgPSBbXTtcbiAgICAgICAgICAgIGxldCBuZXh0ID0gYXJnQWZ0ZXJFcXVhbFNpZ24gfHwgYXJnc1tpICsgMV07XG4gICAgICAgICAgICAvLyBJZiBib3RoIGFycmF5IGFuZCBuYXJncyBhcmUgY29uZmlndXJlZCwgZW5mb3JjZSB0aGUgbmFyZ3MgY291bnQ6XG4gICAgICAgICAgICBjb25zdCBuYXJnc0NvdW50ID0gY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpO1xuICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSAmJiAhKC9eKHRydWV8ZmFsc2UpJC8udGVzdChuZXh0KSkpIHtcbiAgICAgICAgICAgICAgICBhcmdzVG9TZXQucHVzaCh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzVW5kZWZpbmVkKG5leHQpIHx8XG4gICAgICAgICAgICAgICAgKGlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSAmJiAvXi0vLnRlc3QobmV4dCkgJiYgIW5lZ2F0aXZlLnRlc3QobmV4dCkgJiYgIWlzVW5rbm93bk9wdGlvbkFzQXJnKG5leHQpKSkge1xuICAgICAgICAgICAgICAgIC8vIGZvciBrZXlzIHdpdGhvdXQgdmFsdWUgPT0+IGFyZ3NUb1NldCByZW1haW5zIGFuIGVtcHR5IFtdXG4gICAgICAgICAgICAgICAgLy8gc2V0IHVzZXIgZGVmYXVsdCB2YWx1ZSwgaWYgYXZhaWxhYmxlXG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRzW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWZWYWwgPSBkZWZhdWx0c1trZXldO1xuICAgICAgICAgICAgICAgICAgICBhcmdzVG9TZXQgPSBBcnJheS5pc0FycmF5KGRlZlZhbCkgPyBkZWZWYWwgOiBbZGVmVmFsXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyB2YWx1ZSBpbiAtLW9wdGlvbj12YWx1ZSBpcyBlYXRlbiBhcyBpc1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoYXJnQWZ0ZXJFcXVhbFNpZ24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NUb1NldC5wdXNoKHByb2Nlc3NWYWx1ZShrZXksIGFyZ0FmdGVyRXF1YWxTaWduLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGlpID0gaSArIDE7IGlpIDwgYXJncy5sZW5ndGg7IGlpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCghY29uZmlndXJhdGlvblsnZ3JlZWR5LWFycmF5cyddICYmIGFyZ3NUb1NldC5sZW5ndGggPiAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKG5hcmdzQ291bnQgJiYgdHlwZW9mIG5hcmdzQ291bnQgPT09ICdudW1iZXInICYmIGFyZ3NUb1NldC5sZW5ndGggPj0gbmFyZ3NDb3VudCkpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGFyZ3NbaWldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoL14tLy50ZXN0KG5leHQpICYmICFuZWdhdGl2ZS50ZXN0KG5leHQpICYmICFpc1Vua25vd25PcHRpb25Bc0FyZyhuZXh0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBpID0gaWk7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NUb1NldC5wdXNoKHByb2Nlc3NWYWx1ZShrZXksIG5leHQsIGlucHV0SXNTdHJpbmcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiBib3RoIGFycmF5IGFuZCBuYXJncyBhcmUgY29uZmlndXJlZCwgY3JlYXRlIGFuIGVycm9yIGlmIGxlc3MgdGhhblxuICAgICAgICAgICAgLy8gbmFyZ3MgcG9zaXRpb25hbHMgd2VyZSBmb3VuZC4gTmFOIGhhcyBzcGVjaWFsIG1lYW5pbmcsIGluZGljYXRpbmdcbiAgICAgICAgICAgIC8vIHRoYXQgYXQgbGVhc3Qgb25lIHZhbHVlIGlzIHJlcXVpcmVkIChtb3JlIGFyZSBva2F5KS5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbmFyZ3NDb3VudCA9PT0gJ251bWJlcicgJiYgKChuYXJnc0NvdW50ICYmIGFyZ3NUb1NldC5sZW5ndGggPCBuYXJnc0NvdW50KSB8fFxuICAgICAgICAgICAgICAgIChpc05hTihuYXJnc0NvdW50KSAmJiBhcmdzVG9TZXQubGVuZ3RoID09PSAwKSkpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IEVycm9yKF9fKCdOb3QgZW5vdWdoIGFyZ3VtZW50cyBmb2xsb3dpbmc6ICVzJywga2V5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRBcmcoa2V5LCBhcmdzVG9TZXQpO1xuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0QXJnKGtleSwgdmFsLCBzaG91bGRTdHJpcFF1b3RlcyA9IGlucHV0SXNTdHJpbmcpIHtcbiAgICAgICAgICAgIGlmICgvLS8udGVzdChrZXkpICYmIGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbGlhcyA9IGtleS5zcGxpdCgnLicpLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FtZWxDYXNlKHByb3ApO1xuICAgICAgICAgICAgICAgIH0pLmpvaW4oJy4nKTtcbiAgICAgICAgICAgICAgICBhZGROZXdBbGlhcyhrZXksIGFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcHJvY2Vzc1ZhbHVlKGtleSwgdmFsLCBzaG91bGRTdHJpcFF1b3Rlcyk7XG4gICAgICAgICAgICBjb25zdCBzcGxpdEtleSA9IGtleS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgc2V0S2V5KGFyZ3YsIHNwbGl0S2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAvLyBoYW5kbGUgcG9wdWxhdGluZyBhbGlhc2VzIG9mIHRoZSBmdWxsIGtleVxuICAgICAgICAgICAgaWYgKGZsYWdzLmFsaWFzZXNba2V5XSkge1xuICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleVByb3BlcnRpZXMgPSB4LnNwbGl0KCcuJyk7XG4gICAgICAgICAgICAgICAgICAgIHNldEtleShhcmd2LCBrZXlQcm9wZXJ0aWVzLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBoYW5kbGUgcG9wdWxhdGluZyBhbGlhc2VzIG9mIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBkb3Qtbm90YXRpb24ga2V5XG4gICAgICAgICAgICBpZiAoc3BsaXRLZXkubGVuZ3RoID4gMSAmJiBjb25maWd1cmF0aW9uWydkb3Qtbm90YXRpb24nXSkge1xuICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICAoZmxhZ3MuYWxpYXNlc1tzcGxpdEtleVswXV0gfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGtleVByb3BlcnRpZXMgPSB4LnNwbGl0KCcuJyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGV4cGFuZCBhbGlhcyB3aXRoIG5lc3RlZCBvYmplY3RzIGluIGtleVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhID0gW10uY29uY2F0KHNwbGl0S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgYS5zaGlmdCgpOyAvLyBudWtlIHRoZSBvbGQga2V5LlxuICAgICAgICAgICAgICAgICAgICBrZXlQcm9wZXJ0aWVzID0ga2V5UHJvcGVydGllcy5jb25jYXQoYSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHBvcHVsYXRlIGFsaWFzIG9ubHkgaWYgaXMgbm90IGFscmVhZHkgYW4gYWxpYXMgb2YgdGhlIGZ1bGwga2V5XG4gICAgICAgICAgICAgICAgICAgIC8vIChhbHJlYWR5IHBvcHVsYXRlZCBhYm92ZSlcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZmxhZ3MuYWxpYXNlc1trZXldIHx8IFtdKS5pbmNsdWRlcyhrZXlQcm9wZXJ0aWVzLmpvaW4oJy4nKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEtleShhcmd2LCBrZXlQcm9wZXJ0aWVzLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFNldCBub3JtYWxpemUgZ2V0dGVyIGFuZCBzZXR0ZXIgd2hlbiBrZXkgaXMgaW4gJ25vcm1hbGl6ZScgYnV0IGlzbid0IGFuIGFycmF5XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3Mubm9ybWFsaXplKSAmJiAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBba2V5XS5jb25jYXQoZmxhZ3MuYWxpYXNlc1trZXldIHx8IFtdKTtcbiAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXJndlJldHVybiwga2V5LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IG1peGluLm5vcm1hbGl6ZSh2YWx1ZSkgOiB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYWRkTmV3QWxpYXMoa2V5LCBhbGlhcykge1xuICAgICAgICAgICAgaWYgKCEoZmxhZ3MuYWxpYXNlc1trZXldICYmIGZsYWdzLmFsaWFzZXNba2V5XS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldID0gW2FsaWFzXTtcbiAgICAgICAgICAgICAgICBuZXdBbGlhc2VzW2FsaWFzXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIShmbGFncy5hbGlhc2VzW2FsaWFzXSAmJiBmbGFncy5hbGlhc2VzW2FsaWFzXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgYWRkTmV3QWxpYXMoYWxpYXMsIGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1ZhbHVlKGtleSwgdmFsLCBzaG91bGRTdHJpcFF1b3Rlcykge1xuICAgICAgICAgICAgLy8gc3RyaW5ncyBtYXkgYmUgcXVvdGVkLCBjbGVhbiB0aGlzIHVwIGFzIHdlIGFzc2lnbiB2YWx1ZXMuXG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RyaXBRdW90ZXMpIHtcbiAgICAgICAgICAgICAgICB2YWwgPSBzdHJpcFF1b3Rlcyh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaGFuZGxlIHBhcnNpbmcgYm9vbGVhbiBhcmd1bWVudHMgLS1mb289dHJ1ZSAtLWJhciBmYWxzZS5cbiAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykgfHwgY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsID09PSAndHJ1ZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBBcnJheS5pc0FycmF5KHZhbClcbiAgICAgICAgICAgICAgICA/IHZhbC5tYXAoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG1heWJlQ29lcmNlTnVtYmVyKGtleSwgdik7IH0pXG4gICAgICAgICAgICAgICAgOiBtYXliZUNvZXJjZU51bWJlcihrZXksIHZhbCk7XG4gICAgICAgICAgICAvLyBpbmNyZW1lbnQgYSBjb3VudCBnaXZlbiBhcyBhcmcgKGVpdGhlciBubyB2YWx1ZSBvciB2YWx1ZSBwYXJzZWQgYXMgYm9vbGVhbilcbiAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5jb3VudHMpICYmIChpc1VuZGVmaW5lZCh2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBpbmNyZW1lbnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFNldCBub3JtYWxpemVkIHZhbHVlIHdoZW4ga2V5IGlzIGluICdub3JtYWxpemUnIGFuZCBpbiAnYXJyYXlzJ1xuICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5vcm1hbGl6ZSkgJiYgY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsLm1hcCgodmFsKSA9PiB7IHJldHVybiBtaXhpbi5ub3JtYWxpemUodmFsKTsgfSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1peGluLm5vcm1hbGl6ZSh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG1heWJlQ29lcmNlTnVtYmVyKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghY29uZmlndXJhdGlvblsncGFyc2UtcG9zaXRpb25hbC1udW1iZXJzJ10gJiYga2V5ID09PSAnXycpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgaWYgKCFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5zdHJpbmdzKSAmJiAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZENvZXJjZU51bWJlciA9IGxvb2tzTGlrZU51bWJlcih2YWx1ZSkgJiYgY29uZmlndXJhdGlvblsncGFyc2UtbnVtYmVycyddICYmIChOdW1iZXIuaXNTYWZlSW50ZWdlcihNYXRoLmZsb29yKHBhcnNlRmxvYXQoYCR7dmFsdWV9YCkpKSk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZENvZXJjZU51bWJlciB8fCAoIWlzVW5kZWZpbmVkKHZhbHVlKSAmJiBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5udW1iZXJzKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzZXQgYXJncyBmcm9tIGNvbmZpZy5qc29uIGZpbGUsIHRoaXMgc2hvdWxkIGJlXG4gICAgICAgIC8vIGFwcGxpZWQgbGFzdCBzbyB0aGF0IGRlZmF1bHRzIGNhbiBiZSBhcHBsaWVkLlxuICAgICAgICBmdW5jdGlvbiBzZXRDb25maWcoYXJndikge1xuICAgICAgICAgICAgY29uc3QgY29uZmlnTG9va3VwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgIC8vIGV4cGFuZCBkZWZhdWx0cy9hbGlhc2VzLCBpbi1jYXNlIGFueSBoYXBwZW4gdG8gcmVmZXJlbmNlXG4gICAgICAgICAgICAvLyB0aGUgY29uZmlnLmpzb24gZmlsZS5cbiAgICAgICAgICAgIGFwcGx5RGVmYXVsdHNBbmRBbGlhc2VzKGNvbmZpZ0xvb2t1cCwgZmxhZ3MuYWxpYXNlcywgZGVmYXVsdHMpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZmxhZ3MuY29uZmlncykuZm9yRWFjaChmdW5jdGlvbiAoY29uZmlnS2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZmlnUGF0aCA9IGFyZ3ZbY29uZmlnS2V5XSB8fCBjb25maWdMb29rdXBbY29uZmlnS2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnUGF0aCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmZpZyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZENvbmZpZ1BhdGggPSBtaXhpbi5yZXNvbHZlKG1peGluLmN3ZCgpLCBjb25maWdQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVDb25maWcgPSBmbGFncy5jb25maWdzW2NvbmZpZ0tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc29sdmVDb25maWcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcgPSByZXNvbHZlQ29uZmlnKHJlc29sdmVkQ29uZmlnUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGNvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyA9IG1peGluLnJlcXVpcmUocmVzb2x2ZWRDb25maWdQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbmZpZ09iamVjdChjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVubyB3aWxsIHJlY2VpdmUgYSBQZXJtaXNzaW9uRGVuaWVkIGVycm9yIGlmIGFuIGF0dGVtcHQgaXNcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hZGUgdG8gbG9hZCBjb25maWcgd2l0aG91dCB0aGUgLS1hbGxvdy1yZWFkIGZsYWc6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXgubmFtZSA9PT0gJ1Blcm1pc3Npb25EZW5pZWQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhcmd2W2NvbmZpZ0tleV0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFcnJvcihfXygnSW52YWxpZCBKU09OIGNvbmZpZyBmaWxlOiAlcycsIGNvbmZpZ1BhdGgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNldCBhcmdzIGZyb20gY29uZmlnIG9iamVjdC5cbiAgICAgICAgLy8gaXQgcmVjdXJzaXZlbHkgY2hlY2tzIG5lc3RlZCBvYmplY3RzLlxuICAgICAgICBmdW5jdGlvbiBzZXRDb25maWdPYmplY3QoY29uZmlnLCBwcmV2KSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29uZmlnW2tleV07XG4gICAgICAgICAgICAgICAgY29uc3QgZnVsbEtleSA9IHByZXYgPyBwcmV2ICsgJy4nICsga2V5IDoga2V5O1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSB2YWx1ZSBpcyBhbiBpbm5lciBvYmplY3QgYW5kIHdlIGhhdmUgZG90LW5vdGF0aW9uXG4gICAgICAgICAgICAgICAgLy8gZW5hYmxlZCwgdHJlYXQgaW5uZXIgb2JqZWN0cyBpbiBjb25maWcgdGhlIHNhbWUgYXNcbiAgICAgICAgICAgICAgICAvLyBoZWF2aWx5IG5lc3RlZCBkb3Qgbm90YXRpb25zIChmb28uYmFyLmFwcGxlKS5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgY29uZmlndXJhdGlvblsnZG90LW5vdGF0aW9uJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCBidXQgbm90IGFuIGFycmF5LCBjaGVjayBuZXN0ZWQgb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgIHNldENvbmZpZ09iamVjdCh2YWx1ZSwgZnVsbEtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBzZXR0aW5nIGFyZ3VtZW50cyB2aWEgQ0xJIHRha2VzIHByZWNlZGVuY2Ugb3ZlclxuICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZXMgd2l0aGluIHRoZSBjb25maWcgZmlsZS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNLZXkoYXJndiwgZnVsbEtleS5zcGxpdCgnLicpKSB8fCAoY2hlY2tBbGxBbGlhc2VzKGZ1bGxLZXksIGZsYWdzLmFycmF5cykgJiYgY29uZmlndXJhdGlvblsnY29tYmluZS1hcnJheXMnXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhmdWxsS2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzZXQgYWxsIGNvbmZpZyBvYmplY3RzIHBhc3NlZCBpbiBvcHRzXG4gICAgICAgIGZ1bmN0aW9uIHNldENvbmZpZ09iamVjdHMoKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZ09iamVjdHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnT2JqZWN0cy5mb3JFYWNoKGZ1bmN0aW9uIChjb25maWdPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q29uZmlnT2JqZWN0KGNvbmZpZ09iamVjdCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYXBwbHlFbnZWYXJzKGFyZ3YsIGNvbmZpZ09ubHkpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZW52UHJlZml4ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSB0eXBlb2YgZW52UHJlZml4ID09PSAnc3RyaW5nJyA/IGVudlByZWZpeCA6ICcnO1xuICAgICAgICAgICAgY29uc3QgZW52ID0gbWl4aW4uZW52KCk7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhlbnYpLmZvckVhY2goZnVuY3Rpb24gKGVudlZhcikge1xuICAgICAgICAgICAgICAgIGlmIChwcmVmaXggPT09ICcnIHx8IGVudlZhci5sYXN0SW5kZXhPZihwcmVmaXgsIDApID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGdldCBhcnJheSBvZiBuZXN0ZWQga2V5cyBhbmQgY29udmVydCB0aGVtIHRvIGNhbWVsIGNhc2VcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IGVudlZhci5zcGxpdCgnX18nKS5tYXAoZnVuY3Rpb24gKGtleSwgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXkuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbWVsQ2FzZShrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgoY29uZmlnT25seSAmJiBmbGFncy5jb25maWdzW2tleXMuam9pbignLicpXSkgfHwgIWNvbmZpZ09ubHkpICYmICFoYXNLZXkoYXJndiwga2V5cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXlzLmpvaW4oJy4nKSwgZW52W2VudlZhcl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYXBwbHlDb2VyY2lvbnMoYXJndikge1xuICAgICAgICAgICAgbGV0IGNvZXJjZTtcbiAgICAgICAgICAgIGNvbnN0IGFwcGxpZWQgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhhcmd2KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWFwcGxpZWQuaGFzKGtleSkpIHsgLy8gSWYgd2UgaGF2ZW4ndCBhbHJlYWR5IGNvZXJjZWQgdGhpcyBvcHRpb24gdmlhIG9uZSBvZiBpdHMgYWxpYXNlc1xuICAgICAgICAgICAgICAgICAgICBjb2VyY2UgPSBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5jb2VyY2lvbnMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvZXJjZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1heWJlQ29lcmNlTnVtYmVyKGtleSwgY29lcmNlKGFyZ3Zba2V5XSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChbXS5jb25jYXQoZmxhZ3MuYWxpYXNlc1trZXldIHx8IFtdLCBrZXkpKS5mb3JFYWNoKGFsaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpZWQuYWRkKGFsaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3ZbYWxpXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0UGxhY2Vob2xkZXJLZXlzKGFyZ3YpIHtcbiAgICAgICAgICAgIGZsYWdzLmtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZG9uJ3Qgc2V0IHBsYWNlaG9sZGVyIGtleXMgZm9yIGRvdCBub3RhdGlvbiBvcHRpb25zICdmb28uYmFyJy5cbiAgICAgICAgICAgICAgICBpZiAofmtleS5pbmRleE9mKCcuJykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3Zba2V5XSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgICAgIGFyZ3Zba2V5XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYXBwbHlEZWZhdWx0c0FuZEFsaWFzZXMob2JqLCBhbGlhc2VzLCBkZWZhdWx0cywgY2FuTG9nID0gZmFsc2UpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGRlZmF1bHRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWhhc0tleShvYmosIGtleS5zcGxpdCgnLicpKSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRLZXkob2JqLCBrZXkuc3BsaXQoJy4nKSwgZGVmYXVsdHNba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYW5Mb2cpXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ZWRba2V5XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIChhbGlhc2VzW2tleV0gfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNLZXkob2JqLCB4LnNwbGl0KCcuJykpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEtleShvYmosIHguc3BsaXQoJy4nKSwgZGVmYXVsdHNba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGhhc0tleShvYmosIGtleXMpIHtcbiAgICAgICAgICAgIGxldCBvID0gb2JqO1xuICAgICAgICAgICAgaWYgKCFjb25maWd1cmF0aW9uWydkb3Qtbm90YXRpb24nXSlcbiAgICAgICAgICAgICAgICBrZXlzID0gW2tleXMuam9pbignLicpXTtcbiAgICAgICAgICAgIGtleXMuc2xpY2UoMCwgLTEpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIG8gPSAob1trZXldIHx8IHt9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5c1trZXlzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvICE9PSAnb2JqZWN0JylcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGtleSBpbiBvO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldEtleShvYmosIGtleXMsIHZhbHVlKSB7XG4gICAgICAgICAgICBsZXQgbyA9IG9iajtcbiAgICAgICAgICAgIGlmICghY29uZmlndXJhdGlvblsnZG90LW5vdGF0aW9uJ10pXG4gICAgICAgICAgICAgICAga2V5cyA9IFtrZXlzLmpvaW4oJy4nKV07XG4gICAgICAgICAgICBrZXlzLnNsaWNlKDAsIC0xKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPKGJjb2UpOiBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIHlhcmdzLCBzd2l0Y2ggdG9cbiAgICAgICAgICAgICAgICAvLyBPYmplY3QuY3JlYXRlKG51bGwpIGZvciBkb3Qgbm90YXRpb246XG4gICAgICAgICAgICAgICAga2V5ID0gc2FuaXRpemVLZXkoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG8gPT09ICdvYmplY3QnICYmIG9ba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ba2V5XSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9ba2V5XSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShvW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVuc3VyZSB0aGF0IG9ba2V5XSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgdGhlIGxhc3QgaXRlbSBpcyBhbiBlbXB0eSBvYmplY3QuXG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9ba2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ba2V5XS5wdXNoKHt9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ba2V5XSA9IFtvW2tleV0sIHt9XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSB3YW50IHRvIHVwZGF0ZSB0aGUgZW1wdHkgb2JqZWN0IGF0IHRoZSBlbmQgb2YgdGhlIG9ba2V5XSBhcnJheSwgc28gc2V0IG8gdG8gdGhhdCBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgbyA9IG9ba2V5XVtvW2tleV0ubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvID0gb1trZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gVE9ETyhiY29lKTogaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiB5YXJncywgc3dpdGNoIHRvXG4gICAgICAgICAgICAvLyBPYmplY3QuY3JlYXRlKG51bGwpIGZvciBkb3Qgbm90YXRpb246XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBzYW5pdGl6ZUtleShrZXlzW2tleXMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgY29uc3QgaXNUeXBlQXJyYXkgPSBjaGVja0FsbEFsaWFzZXMoa2V5cy5qb2luKCcuJyksIGZsYWdzLmFycmF5cyk7XG4gICAgICAgICAgICBjb25zdCBpc1ZhbHVlQXJyYXkgPSBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgICAgICAgICAgIGxldCBkdXBsaWNhdGUgPSBjb25maWd1cmF0aW9uWydkdXBsaWNhdGUtYXJndW1lbnRzLWFycmF5J107XG4gICAgICAgICAgICAvLyBuYXJncyBoYXMgaGlnaGVyIHByaW9yaXR5IHRoYW4gZHVwbGljYXRlXG4gICAgICAgICAgICBpZiAoIWR1cGxpY2F0ZSAmJiBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5uYXJncykpIHtcbiAgICAgICAgICAgICAgICBkdXBsaWNhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICgoIWlzVW5kZWZpbmVkKG9ba2V5XSkgJiYgZmxhZ3MubmFyZ3Nba2V5XSA9PT0gMSkgfHwgKEFycmF5LmlzQXJyYXkob1trZXldKSAmJiBvW2tleV0ubGVuZ3RoID09PSBmbGFncy5uYXJnc1trZXldKSkge1xuICAgICAgICAgICAgICAgICAgICBvW2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBpbmNyZW1lbnQoKSkge1xuICAgICAgICAgICAgICAgIG9ba2V5XSA9IGluY3JlbWVudChvW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgaWYgKGR1cGxpY2F0ZSAmJiBpc1R5cGVBcnJheSAmJiBpc1ZhbHVlQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgb1trZXldID0gY29uZmlndXJhdGlvblsnZmxhdHRlbi1kdXBsaWNhdGUtYXJyYXlzJ10gPyBvW2tleV0uY29uY2F0KHZhbHVlKSA6IChBcnJheS5pc0FycmF5KG9ba2V5XVswXSkgPyBvW2tleV0gOiBbb1trZXldXSkuY29uY2F0KFt2YWx1ZV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghZHVwbGljYXRlICYmIEJvb2xlYW4oaXNUeXBlQXJyYXkpID09PSBCb29sZWFuKGlzVmFsdWVBcnJheSkpIHtcbiAgICAgICAgICAgICAgICAgICAgb1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvW2tleV0gPSBvW2tleV0uY29uY2F0KFt2YWx1ZV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG9ba2V5XSA9PT0gdW5kZWZpbmVkICYmIGlzVHlwZUFycmF5KSB7XG4gICAgICAgICAgICAgICAgb1trZXldID0gaXNWYWx1ZUFycmF5ID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZHVwbGljYXRlICYmICEob1trZXldID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5jb3VudHMpIHx8XG4gICAgICAgICAgICAgICAgY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpKSkge1xuICAgICAgICAgICAgICAgIG9ba2V5XSA9IFtvW2tleV0sIHZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG9ba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGV4dGVuZCB0aGUgYWxpYXNlcyBsaXN0IHdpdGggaW5mZXJyZWQgYWxpYXNlcy5cbiAgICAgICAgZnVuY3Rpb24gZXh0ZW5kQWxpYXNlcyguLi5hcmdzKSB7XG4gICAgICAgICAgICBhcmdzLmZvckVhY2goZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKG9iaiB8fCB7fSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNob3J0LWNpcmN1aXQgaWYgd2UndmUgYWxyZWFkeSBhZGRlZCBhIGtleVxuICAgICAgICAgICAgICAgICAgICAvLyB0byB0aGUgYWxpYXNlcyBhcnJheSwgZm9yIGV4YW1wbGUgaXQgbWlnaHRcbiAgICAgICAgICAgICAgICAgICAgLy8gZXhpc3QgaW4gYm90aCAnb3B0cy5kZWZhdWx0JyBhbmQgJ29wdHMua2V5Jy5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzLmFsaWFzZXNba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldID0gW10uY29uY2F0KGFsaWFzZXNba2V5XSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIEZvciBcIi0tb3B0aW9uLW5hbWVcIiwgYWxzbyBzZXQgYXJndi5vcHRpb25OYW1lXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XS5jb25jYXQoa2V5KS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoLy0vLnRlc3QoeCkgJiYgY29uZmlndXJhdGlvblsnY2FtZWwtY2FzZS1leHBhbnNpb24nXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGMgPSBjYW1lbENhc2UoeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgIT09IGtleSAmJiBmbGFncy5hbGlhc2VzW2tleV0uaW5kZXhPZihjKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldLnB1c2goYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0FsaWFzZXNbY10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIEZvciBcIi0tb3B0aW9uTmFtZVwiLCBhbHNvIHNldCBhcmd2WydvcHRpb24tbmFtZSddXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XS5jb25jYXQoa2V5KS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeC5sZW5ndGggPiAxICYmIC9bQS1aXS8udGVzdCh4KSAmJiBjb25maWd1cmF0aW9uWydjYW1lbC1jYXNlLWV4cGFuc2lvbiddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYyA9IGRlY2FtZWxpemUoeCwgJy0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPT0ga2V5ICYmIGZsYWdzLmFsaWFzZXNba2V5XS5pbmRleE9mKGMpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0ucHVzaChjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWxpYXNlc1tjXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNbeF0gPSBba2V5XS5jb25jYXQoZmxhZ3MuYWxpYXNlc1trZXldLmZpbHRlcihmdW5jdGlvbiAoeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4ICE9PSB5O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWcpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbXS5jb25jYXQoZmxhZ3MuYWxpYXNlc1trZXldIHx8IFtdLCBrZXkpO1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGZsYWcpO1xuICAgICAgICAgICAgY29uc3Qgc2V0QWxpYXMgPSB0b0NoZWNrLmZpbmQoa2V5ID0+IGtleXMuaW5jbHVkZXMoa2V5KSk7XG4gICAgICAgICAgICByZXR1cm4gc2V0QWxpYXMgPyBmbGFnW3NldEFsaWFzXSA6IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGhhc0FueUZsYWcoa2V5KSB7XG4gICAgICAgICAgICBjb25zdCBmbGFnc0tleXMgPSBPYmplY3Qua2V5cyhmbGFncyk7XG4gICAgICAgICAgICBjb25zdCB0b0NoZWNrID0gW10uY29uY2F0KGZsYWdzS2V5cy5tYXAoayA9PiBmbGFnc1trXSkpO1xuICAgICAgICAgICAgcmV0dXJuIHRvQ2hlY2suc29tZShmdW5jdGlvbiAoZmxhZykge1xuICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGZsYWcpID8gZmxhZy5pbmNsdWRlcyhrZXkpIDogZmxhZ1trZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaGFzRmxhZ3NNYXRjaGluZyhhcmcsIC4uLnBhdHRlcm5zKSB7XG4gICAgICAgICAgICBjb25zdCB0b0NoZWNrID0gW10uY29uY2F0KC4uLnBhdHRlcm5zKTtcbiAgICAgICAgICAgIHJldHVybiB0b0NoZWNrLnNvbWUoZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaCA9IGFyZy5tYXRjaChwYXR0ZXJuKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2ggJiYgaGFzQW55RmxhZyhtYXRjaFsxXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBiYXNlZCBvbiBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZiB0aGUgc2hvcnQgZmxhZyBncm91cCBwYXJzaW5nIGxvZ2ljXG4gICAgICAgIGZ1bmN0aW9uIGhhc0FsbFNob3J0RmxhZ3MoYXJnKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGlzIGlzIGEgbmVnYXRpdmUgbnVtYmVyLCBvciBkb2Vzbid0IHN0YXJ0IHdpdGggYSBzaW5nbGUgaHlwaGVuLCBpdCdzIG5vdCBhIHNob3J0IGZsYWcgZ3JvdXBcbiAgICAgICAgICAgIGlmIChhcmcubWF0Y2gobmVnYXRpdmUpIHx8ICFhcmcubWF0Y2goL14tW14tXSsvKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBoYXNBbGxGbGFncyA9IHRydWU7XG4gICAgICAgICAgICBsZXQgbmV4dDtcbiAgICAgICAgICAgIGNvbnN0IGxldHRlcnMgPSBhcmcuc2xpY2UoMSkuc3BsaXQoJycpO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZXR0ZXJzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgbmV4dCA9IGFyZy5zbGljZShqICsgMik7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNBbnlGbGFnKGxldHRlcnNbal0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc0FsbEZsYWdzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKGxldHRlcnNbaiArIDFdICYmIGxldHRlcnNbaiArIDFdID09PSAnPScpIHx8XG4gICAgICAgICAgICAgICAgICAgIG5leHQgPT09ICctJyB8fFxuICAgICAgICAgICAgICAgICAgICAoL1tBLVphLXpdLy50ZXN0KGxldHRlcnNbal0pICYmIC9eLT9cXGQrKFxcLlxcZCopPyhlLT9cXGQrKT8kLy50ZXN0KG5leHQpKSB8fFxuICAgICAgICAgICAgICAgICAgICAobGV0dGVyc1tqICsgMV0gJiYgbGV0dGVyc1tqICsgMV0ubWF0Y2goL1xcVy8pKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaGFzQWxsRmxhZ3M7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNVbmtub3duT3B0aW9uQXNBcmcoYXJnKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlndXJhdGlvblsndW5rbm93bi1vcHRpb25zLWFzLWFyZ3MnXSAmJiBpc1Vua25vd25PcHRpb24oYXJnKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc1Vua25vd25PcHRpb24oYXJnKSB7XG4gICAgICAgICAgICBhcmcgPSBhcmcucmVwbGFjZSgvXi17Myx9LywgJy0tJyk7XG4gICAgICAgICAgICAvLyBpZ25vcmUgbmVnYXRpdmUgbnVtYmVyc1xuICAgICAgICAgICAgaWYgKGFyZy5tYXRjaChuZWdhdGl2ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiB0aGlzIGlzIGEgc2hvcnQgb3B0aW9uIGdyb3VwIGFuZCBhbGwgb2YgdGhlbSBhcmUgY29uZmlndXJlZCwgaXQgaXNuJ3QgdW5rbm93blxuICAgICAgICAgICAgaWYgKGhhc0FsbFNob3J0RmxhZ3MoYXJnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGUuZy4gJy0tY291bnQ9MidcbiAgICAgICAgICAgIGNvbnN0IGZsYWdXaXRoRXF1YWxzID0gL14tKyhbXj1dKz8pPVtcXHNcXFNdKiQvO1xuICAgICAgICAgICAgLy8gZS5nLiAnLWEnIG9yICctLWFyZydcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbEZsYWcgPSAvXi0rKFtePV0rPykkLztcbiAgICAgICAgICAgIC8vIGUuZy4gJy1hLSdcbiAgICAgICAgICAgIGNvbnN0IGZsYWdFbmRpbmdJbkh5cGhlbiA9IC9eLSsoW149XSs/KS0kLztcbiAgICAgICAgICAgIC8vIGUuZy4gJy1hYmMxMjMnXG4gICAgICAgICAgICBjb25zdCBmbGFnRW5kaW5nSW5EaWdpdHMgPSAvXi0rKFtePV0rP1xcZCspJC87XG4gICAgICAgICAgICAvLyBlLmcuICctYS91c3IvbG9jYWwnXG4gICAgICAgICAgICBjb25zdCBmbGFnRW5kaW5nSW5Ob25Xb3JkQ2hhcmFjdGVycyA9IC9eLSsoW149XSs/KVxcVysuKiQvO1xuICAgICAgICAgICAgLy8gY2hlY2sgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBmbGFnIHN0eWxlcywgaW5jbHVkaW5nIG5lZ2F0ZWRCb29sZWFuLCBhIHBhdHRlcm4gZGVmaW5lZCBuZWFyIHRoZSBzdGFydCBvZiB0aGUgcGFyc2UgbWV0aG9kXG4gICAgICAgICAgICByZXR1cm4gIWhhc0ZsYWdzTWF0Y2hpbmcoYXJnLCBmbGFnV2l0aEVxdWFscywgbmVnYXRlZEJvb2xlYW4sIG5vcm1hbEZsYWcsIGZsYWdFbmRpbmdJbkh5cGhlbiwgZmxhZ0VuZGluZ0luRGlnaXRzLCBmbGFnRW5kaW5nSW5Ob25Xb3JkQ2hhcmFjdGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbWFrZSBhIGJlc3QgZWZmb3J0IHRvIHBpY2sgYSBkZWZhdWx0IHZhbHVlXG4gICAgICAgIC8vIGZvciBhbiBvcHRpb24gYmFzZWQgb24gbmFtZSBhbmQgdHlwZS5cbiAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFZhbHVlKGtleSkge1xuICAgICAgICAgICAgaWYgKCFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykgJiZcbiAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSAmJlxuICAgICAgICAgICAgICAgIGAke2tleX1gIGluIGRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdEZvclR5cGUoZ3Vlc3NUeXBlKGtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHJldHVybiBhIGRlZmF1bHQgdmFsdWUsIGdpdmVuIHRoZSB0eXBlIG9mIGEgZmxhZy4sXG4gICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRGb3JUeXBlKHR5cGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZiA9IHtcbiAgICAgICAgICAgICAgICBbRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuQk9PTEVBTl06IHRydWUsXG4gICAgICAgICAgICAgICAgW0RlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LlNUUklOR106ICcnLFxuICAgICAgICAgICAgICAgIFtEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5OVU1CRVJdOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgW0RlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkFSUkFZXTogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZGVmW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIC8vIGdpdmVuIGEgZmxhZywgZW5mb3JjZSBhIGRlZmF1bHQgdHlwZS5cbiAgICAgICAgZnVuY3Rpb24gZ3Vlc3NUeXBlKGtleSkge1xuICAgICAgICAgICAgbGV0IHR5cGUgPSBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5CT09MRUFOO1xuICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLnN0cmluZ3MpKVxuICAgICAgICAgICAgICAgIHR5cGUgPSBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5TVFJJTkc7XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5udW1iZXJzKSlcbiAgICAgICAgICAgICAgICB0eXBlID0gRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuTlVNQkVSO1xuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpKVxuICAgICAgICAgICAgICAgIHR5cGUgPSBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5CT09MRUFOO1xuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYXJyYXlzKSlcbiAgICAgICAgICAgICAgICB0eXBlID0gRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuQVJSQVk7XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc1VuZGVmaW5lZChudW0pIHtcbiAgICAgICAgICAgIHJldHVybiBudW0gPT09IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBjaGVjayB1c2VyIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIGluY29uc2lzdGVuY2llc1xuICAgICAgICBmdW5jdGlvbiBjaGVja0NvbmZpZ3VyYXRpb24oKSB7XG4gICAgICAgICAgICAvLyBjb3VudCBrZXlzIHNob3VsZCBub3QgYmUgc2V0IGFzIGFycmF5L25hcmdcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGZsYWdzLmNvdW50cykuZmluZChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ0ludmFsaWQgY29uZmlndXJhdGlvbjogJXMsIG9wdHMuY291bnQgZXhjbHVkZXMgb3B0cy5hcnJheS4nLCBrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEVycm9yKF9fKCdJbnZhbGlkIGNvbmZpZ3VyYXRpb246ICVzLCBvcHRzLmNvdW50IGV4Y2x1ZGVzIG9wdHMubmFyZy4nLCBrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhbGlhc2VzOiBPYmplY3QuYXNzaWduKHt9LCBmbGFncy5hbGlhc2VzKSxcbiAgICAgICAgICAgIGFyZ3Y6IE9iamVjdC5hc3NpZ24oYXJndlJldHVybiwgYXJndiksXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiBjb25maWd1cmF0aW9uLFxuICAgICAgICAgICAgZGVmYXVsdGVkOiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0ZWQpLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgbmV3QWxpYXNlczogT2JqZWN0LmFzc2lnbih7fSwgbmV3QWxpYXNlcylcbiAgICAgICAgfTtcbiAgICB9XG59XG4vLyBpZiBhbnkgYWxpYXNlcyByZWZlcmVuY2UgZWFjaCBvdGhlciwgd2Ugc2hvdWxkXG4vLyBtZXJnZSB0aGVtIHRvZ2V0aGVyLlxuZnVuY3Rpb24gY29tYmluZUFsaWFzZXMoYWxpYXNlcykge1xuICAgIGNvbnN0IGFsaWFzQXJyYXlzID0gW107XG4gICAgY29uc3QgY29tYmluZWQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGxldCBjaGFuZ2UgPSB0cnVlO1xuICAgIC8vIHR1cm4gYWxpYXMgbG9va3VwIGhhc2gge2tleTogWydhbGlhczEnLCAnYWxpYXMyJ119IGludG9cbiAgICAvLyBhIHNpbXBsZSBhcnJheSBbJ2tleScsICdhbGlhczEnLCAnYWxpYXMyJ11cbiAgICBPYmplY3Qua2V5cyhhbGlhc2VzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgYWxpYXNBcnJheXMucHVzaChbXS5jb25jYXQoYWxpYXNlc1trZXldLCBrZXkpKTtcbiAgICB9KTtcbiAgICAvLyBjb21iaW5lIGFycmF5cyB1bnRpbCB6ZXJvIGNoYW5nZXMgYXJlXG4gICAgLy8gbWFkZSBpbiBhbiBpdGVyYXRpb24uXG4gICAgd2hpbGUgKGNoYW5nZSkge1xuICAgICAgICBjaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGlhc0FycmF5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaWkgPSBpICsgMTsgaWkgPCBhbGlhc0FycmF5cy5sZW5ndGg7IGlpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcnNlY3QgPSBhbGlhc0FycmF5c1tpXS5maWx0ZXIoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsaWFzQXJyYXlzW2lpXS5pbmRleE9mKHYpICE9PSAtMTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJzZWN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBhbGlhc0FycmF5c1tpXSA9IGFsaWFzQXJyYXlzW2ldLmNvbmNhdChhbGlhc0FycmF5c1tpaV0pO1xuICAgICAgICAgICAgICAgICAgICBhbGlhc0FycmF5cy5zcGxpY2UoaWksIDEpO1xuICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gbWFwIGFycmF5cyBiYWNrIHRvIHRoZSBoYXNoLWxvb2t1cCAoZGUtZHVwZSB3aGlsZVxuICAgIC8vIHdlJ3JlIGF0IGl0KS5cbiAgICBhbGlhc0FycmF5cy5mb3JFYWNoKGZ1bmN0aW9uIChhbGlhc0FycmF5KSB7XG4gICAgICAgIGFsaWFzQXJyYXkgPSBhbGlhc0FycmF5LmZpbHRlcihmdW5jdGlvbiAodiwgaSwgc2VsZikge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYuaW5kZXhPZih2KSA9PT0gaTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGxhc3RBbGlhcyA9IGFsaWFzQXJyYXkucG9wKCk7XG4gICAgICAgIGlmIChsYXN0QWxpYXMgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgbGFzdEFsaWFzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29tYmluZWRbbGFzdEFsaWFzXSA9IGFsaWFzQXJyYXk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY29tYmluZWQ7XG59XG4vLyB0aGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIGEgY291bnQgaXMgZ2l2ZW4gYXMgYW4gYXJnXG4vLyBpdCBpcyBOT1QgY2FsbGVkIHRvIHNldCBhIGRlZmF1bHQgdmFsdWVcbi8vIHRodXMgd2UgY2FuIHN0YXJ0IHRoZSBjb3VudCBhdCAxIGluc3RlYWQgb2YgMFxuZnVuY3Rpb24gaW5jcmVtZW50KG9yaWcpIHtcbiAgICByZXR1cm4gb3JpZyAhPT0gdW5kZWZpbmVkID8gb3JpZyArIDEgOiAxO1xufVxuLy8gVE9ETyhiY29lKTogaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiB5YXJncywgc3dpdGNoIHRvXG4vLyBPYmplY3QuY3JlYXRlKG51bGwpIGZvciBkb3Qgbm90YXRpb246XG5mdW5jdGlvbiBzYW5pdGl6ZUtleShrZXkpIHtcbiAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJylcbiAgICAgICAgcmV0dXJuICdfX19wcm90b19fXyc7XG4gICAgcmV0dXJuIGtleTtcbn1cbmZ1bmN0aW9uIHN0cmlwUXVvdGVzKHZhbCkge1xuICAgIHJldHVybiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgKHZhbFswXSA9PT0gXCInXCIgfHwgdmFsWzBdID09PSAnXCInKSAmJlxuICAgICAgICB2YWxbdmFsLmxlbmd0aCAtIDFdID09PSB2YWxbMF0pXG4gICAgICAgID8gdmFsLnN1YnN0cmluZygxLCB2YWwubGVuZ3RoIC0gMSlcbiAgICAgICAgOiB2YWw7XG59XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgTWFpbiBlbnRyeXBvaW50IGZvciBsaWJyYXJpZXMgdXNpbmcgeWFyZ3MtcGFyc2VyIGluIE5vZGUuanNcbiAqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE2LCBDb250cmlidXRvcnNcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcbiAqL1xudmFyIF9hLCBfYiwgX2M7XG4vKiBlc2xpbnQtZGlzYWJsZSBuL25vLXVucHVibGlzaGVkLWltcG9ydCAqL1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgeyBub3JtYWxpemUsIHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGNhbWVsQ2FzZSwgZGVjYW1lbGl6ZSwgbG9va3NMaWtlTnVtYmVyIH0gZnJvbSAnLi9zdHJpbmctdXRpbHMuanMnO1xuaW1wb3J0IHsgWWFyZ3NQYXJzZXIgfSBmcm9tICcuL3lhcmdzLXBhcnNlci5qcyc7XG5pbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSAnbm9kZTptb2R1bGUnO1xuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS95YXJncy95YXJncy1wYXJzZXIjc3VwcG9ydGVkLW5vZGVqcy12ZXJzaW9ucyBmb3Igb3VyXG4vLyB2ZXJzaW9uIHN1cHBvcnQgcG9saWN5LiBUaGUgWUFSR1NfTUlOX05PREVfVkVSU0lPTiBpcyB1c2VkIGZvciB0ZXN0aW5nIG9ubHkuXG5jb25zdCBtaW5Ob2RlVmVyc2lvbiA9IChwcm9jZXNzICYmIHByb2Nlc3MuZW52ICYmIHByb2Nlc3MuZW52LllBUkdTX01JTl9OT0RFX1ZFUlNJT04pXG4gICAgPyBOdW1iZXIocHJvY2Vzcy5lbnYuWUFSR1NfTUlOX05PREVfVkVSU0lPTilcbiAgICA6IDIwO1xuY29uc3Qgbm9kZVZlcnNpb24gPSAoX2IgPSAoX2EgPSBwcm9jZXNzID09PSBudWxsIHx8IHByb2Nlc3MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb2Nlc3MudmVyc2lvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5ub2RlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAoX2MgPSBwcm9jZXNzID09PSBudWxsIHx8IHByb2Nlc3MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb2Nlc3MudmVyc2lvbikgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnNsaWNlKDEpO1xuaWYgKG5vZGVWZXJzaW9uKSB7XG4gICAgY29uc3QgbWFqb3IgPSBOdW1iZXIobm9kZVZlcnNpb24ubWF0Y2goL14oW14uXSspLylbMV0pO1xuICAgIGlmIChtYWpvciA8IG1pbk5vZGVWZXJzaW9uKSB7XG4gICAgICAgIHRocm93IEVycm9yKGB5YXJncyBwYXJzZXIgc3VwcG9ydHMgYSBtaW5pbXVtIE5vZGUuanMgdmVyc2lvbiBvZiAke21pbk5vZGVWZXJzaW9ufS4gUmVhZCBvdXIgdmVyc2lvbiBzdXBwb3J0IHBvbGljeTogaHR0cHM6Ly9naXRodWIuY29tL3lhcmdzL3lhcmdzLXBhcnNlciNzdXBwb3J0ZWQtbm9kZWpzLXZlcnNpb25zYCk7XG4gICAgfVxufVxuLy8gQ3JlYXRlcyBhIHlhcmdzLXBhcnNlciBpbnN0YW5jZSB1c2luZyBOb2RlLmpzIHN0YW5kYXJkIGxpYnJhcmllczpcbmNvbnN0IGVudiA9IHByb2Nlc3MgPyBwcm9jZXNzLmVudiA6IHt9O1xuY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUgPyBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCkgOiB1bmRlZmluZWQ7XG5jb25zdCBwYXJzZXIgPSBuZXcgWWFyZ3NQYXJzZXIoe1xuICAgIGN3ZDogcHJvY2Vzcy5jd2QsXG4gICAgZW52OiAoKSA9PiB7XG4gICAgICAgIHJldHVybiBlbnY7XG4gICAgfSxcbiAgICBmb3JtYXQsXG4gICAgbm9ybWFsaXplLFxuICAgIHJlc29sdmUsXG4gICAgcmVxdWlyZTogKHBhdGgpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmUocGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocGF0aC5tYXRjaCgvXFwuanNvbiQvKSkge1xuICAgICAgICAgICAgLy8gQWRkcmVzc2VzOiBodHRwczovL2dpdGh1Yi5jb20veWFyZ3MveWFyZ3MvaXNzdWVzLzIwNDBcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhwYXRoLCAndXRmOCcpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdvbmx5IC5qc29uIGNvbmZpZyBmaWxlcyBhcmUgc3VwcG9ydGVkIGluIEVTTScpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5jb25zdCB5YXJnc1BhcnNlciA9IGZ1bmN0aW9uIFBhcnNlcihhcmdzLCBvcHRzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gcGFyc2VyLnBhcnNlKGFyZ3Muc2xpY2UoKSwgb3B0cyk7XG4gICAgcmV0dXJuIHJlc3VsdC5hcmd2O1xufTtcbnlhcmdzUGFyc2VyLmRldGFpbGVkID0gZnVuY3Rpb24gKGFyZ3MsIG9wdHMpIHtcbiAgICByZXR1cm4gcGFyc2VyLnBhcnNlKGFyZ3Muc2xpY2UoKSwgb3B0cyk7XG59O1xueWFyZ3NQYXJzZXIuY2FtZWxDYXNlID0gY2FtZWxDYXNlO1xueWFyZ3NQYXJzZXIuZGVjYW1lbGl6ZSA9IGRlY2FtZWxpemU7XG55YXJnc1BhcnNlci5sb29rc0xpa2VOdW1iZXIgPSBsb29rc0xpa2VOdW1iZXI7XG5leHBvcnQgZGVmYXVsdCB5YXJnc1BhcnNlcjtcbi8vIHNwZWNpYWwgc3ludGF4IHRvIGFsbG93IHVucXVhbGlmaWVkIGRlZmF1bHQgZXhwb3J0IGZyb20gQ29tbW9uSlNcbmV4cG9ydCB7IHlhcmdzUGFyc2VyIGFzICdtb2R1bGUuZXhwb3J0cycgfTtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNiwgQ29udHJpYnV0b3JzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG4gKi9cbi8vIHRha2UgYW4gdW4tc3BsaXQgYXJndiBzdHJpbmcgYW5kIHRva2VuaXplIGl0LlxuZXhwb3J0IGZ1bmN0aW9uIHRva2VuaXplQXJnU3RyaW5nKGFyZ1N0cmluZykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ1N0cmluZykpIHtcbiAgICAgICAgcmV0dXJuIGFyZ1N0cmluZy5tYXAoZSA9PiB0eXBlb2YgZSAhPT0gJ3N0cmluZycgPyBlICsgJycgOiBlKTtcbiAgICB9XG4gICAgYXJnU3RyaW5nID0gYXJnU3RyaW5nLnRyaW0oKTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IHByZXZDID0gbnVsbDtcbiAgICBsZXQgYyA9IG51bGw7XG4gICAgbGV0IG9wZW5pbmcgPSBudWxsO1xuICAgIGNvbnN0IGFyZ3MgPSBbXTtcbiAgICBmb3IgKGxldCBpaSA9IDA7IGlpIDwgYXJnU3RyaW5nLmxlbmd0aDsgaWkrKykge1xuICAgICAgICBwcmV2QyA9IGM7XG4gICAgICAgIGMgPSBhcmdTdHJpbmcuY2hhckF0KGlpKTtcbiAgICAgICAgLy8gc3BsaXQgb24gc3BhY2VzIHVubGVzcyB3ZSdyZSBpbiBxdW90ZXMuXG4gICAgICAgIGlmIChjID09PSAnICcgJiYgIW9wZW5pbmcpIHtcbiAgICAgICAgICAgIGlmICghKHByZXZDID09PSAnICcpKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZG9uJ3Qgc3BsaXQgdGhlIHN0cmluZyBpZiB3ZSdyZSBpbiBtYXRjaGluZ1xuICAgICAgICAvLyBvcGVuaW5nIG9yIGNsb3Npbmcgc2luZ2xlIGFuZCBkb3VibGUgcXVvdGVzLlxuICAgICAgICBpZiAoYyA9PT0gb3BlbmluZykge1xuICAgICAgICAgICAgb3BlbmluZyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKGMgPT09IFwiJ1wiIHx8IGMgPT09ICdcIicpICYmICFvcGVuaW5nKSB7XG4gICAgICAgICAgICBvcGVuaW5nID0gYztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFyZ3NbaV0pXG4gICAgICAgICAgICBhcmdzW2ldID0gJyc7XG4gICAgICAgIGFyZ3NbaV0gKz0gYztcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG4iLCJmdW5jdGlvbiBnZXRQcm9jZXNzQXJndkJpbkluZGV4KCkge1xuICAgIGlmIChpc0J1bmRsZWRFbGVjdHJvbkFwcCgpKVxuICAgICAgICByZXR1cm4gMDtcbiAgICByZXR1cm4gMTtcbn1cbmZ1bmN0aW9uIGlzQnVuZGxlZEVsZWN0cm9uQXBwKCkge1xuICAgIHJldHVybiBpc0VsZWN0cm9uQXBwKCkgJiYgIXByb2Nlc3MuZGVmYXVsdEFwcDtcbn1cbmZ1bmN0aW9uIGlzRWxlY3Ryb25BcHAoKSB7XG4gICAgcmV0dXJuICEhcHJvY2Vzcy52ZXJzaW9ucy5lbGVjdHJvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBoaWRlQmluKGFyZ3YpIHtcbiAgICByZXR1cm4gYXJndi5zbGljZShnZXRQcm9jZXNzQXJndkJpbkluZGV4KCkgKyAxKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9jZXNzQXJndkJpbigpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5hcmd2W2dldFByb2Nlc3NBcmd2QmluSW5kZXgoKV07XG59XG4iLCJpbXBvcnQgeyByZWFkRmlsZVN5bmMsIHN0YXRTeW5jLCB3cml0ZUZpbGUgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBmb3JtYXQgfSBmcm9tICd1dGlsJztcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBmczoge1xuICAgICAgICByZWFkRmlsZVN5bmMsXG4gICAgICAgIHdyaXRlRmlsZVxuICAgIH0sXG4gICAgZm9ybWF0LFxuICAgIHJlc29sdmUsXG4gICAgZXhpc3RzOiAoZmlsZSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRTeW5jKGZpbGUpLmlzRmlsZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJsZXQgc2hpbTtcbmNsYXNzIFkxOE4ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgLy8gY29uZmlndXJhYmxlIG9wdGlvbnMuXG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgICAgICB0aGlzLmRpcmVjdG9yeSA9IG9wdHMuZGlyZWN0b3J5IHx8ICcuL2xvY2FsZXMnO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbGVzID0gdHlwZW9mIG9wdHMudXBkYXRlRmlsZXMgPT09ICdib29sZWFuJyA/IG9wdHMudXBkYXRlRmlsZXMgOiB0cnVlO1xuICAgICAgICB0aGlzLmxvY2FsZSA9IG9wdHMubG9jYWxlIHx8ICdlbic7XG4gICAgICAgIHRoaXMuZmFsbGJhY2tUb0xhbmd1YWdlID0gdHlwZW9mIG9wdHMuZmFsbGJhY2tUb0xhbmd1YWdlID09PSAnYm9vbGVhbicgPyBvcHRzLmZhbGxiYWNrVG9MYW5ndWFnZSA6IHRydWU7XG4gICAgICAgIC8vIGludGVybmFsIHN0dWZmLlxuICAgICAgICB0aGlzLmNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy53cml0ZVF1ZXVlID0gW107XG4gICAgfVxuICAgIF9fKC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGFnZ2VkTGl0ZXJhbChhcmd1bWVudHNbMF0sIC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RyID0gYXJncy5zaGlmdCgpO1xuICAgICAgICBsZXQgY2IgPSBmdW5jdGlvbiAoKSB7IH07IC8vIHN0YXJ0IHdpdGggbm9vcC5cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYiA9IGFyZ3MucG9wKCk7XG4gICAgICAgIGNiID0gY2IgfHwgZnVuY3Rpb24gKCkgeyB9OyAvLyBub29wLlxuICAgICAgICBpZiAoIXRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdKVxuICAgICAgICAgICAgdGhpcy5fcmVhZExvY2FsZUZpbGUoKTtcbiAgICAgICAgLy8gd2UndmUgb2JzZXJ2ZWQgYSBuZXcgc3RyaW5nLCB1cGRhdGUgdGhlIGxhbmd1YWdlIGZpbGUuXG4gICAgICAgIGlmICghdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc3RyXSAmJiB0aGlzLnVwZGF0ZUZpbGVzKSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzdHJdID0gc3RyO1xuICAgICAgICAgICAgLy8gaW5jbHVkZSB0aGUgY3VycmVudCBkaXJlY3RvcnkgYW5kIGxvY2FsZSxcbiAgICAgICAgICAgIC8vIHNpbmNlIHRoZXNlIHZhbHVlcyBjb3VsZCBjaGFuZ2UgYmVmb3JlIHRoZVxuICAgICAgICAgICAgLy8gd3JpdGUgaXMgcGVyZm9ybWVkLlxuICAgICAgICAgICAgdGhpcy5fZW5xdWV1ZVdyaXRlKHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rvcnk6IHRoaXMuZGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2hpbS5mb3JtYXQuYXBwbHkoc2hpbS5mb3JtYXQsIFt0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzdHJdIHx8IHN0cl0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gICAgX19uKCkge1xuICAgICAgICBjb25zdCBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgY29uc3Qgc2luZ3VsYXIgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgIGNvbnN0IHBsdXJhbCA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgY29uc3QgcXVhbnRpdHkgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgIGxldCBjYiA9IGZ1bmN0aW9uICgpIHsgfTsgLy8gc3RhcnQgd2l0aCBub29wLlxuICAgICAgICBpZiAodHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiID0gYXJncy5wb3AoKTtcbiAgICAgICAgaWYgKCF0aGlzLmNhY2hlW3RoaXMubG9jYWxlXSlcbiAgICAgICAgICAgIHRoaXMuX3JlYWRMb2NhbGVGaWxlKCk7XG4gICAgICAgIGxldCBzdHIgPSBxdWFudGl0eSA9PT0gMSA/IHNpbmd1bGFyIDogcGx1cmFsO1xuICAgICAgICBpZiAodGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc2luZ3VsYXJdKSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW3Npbmd1bGFyXTtcbiAgICAgICAgICAgIHN0ciA9IGVudHJ5W3F1YW50aXR5ID09PSAxID8gJ29uZScgOiAnb3RoZXInXTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3ZSd2ZSBvYnNlcnZlZCBhIG5ldyBzdHJpbmcsIHVwZGF0ZSB0aGUgbGFuZ3VhZ2UgZmlsZS5cbiAgICAgICAgaWYgKCF0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzaW5ndWxhcl0gJiYgdGhpcy51cGRhdGVGaWxlcykge1xuICAgICAgICAgICAgdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc2luZ3VsYXJdID0ge1xuICAgICAgICAgICAgICAgIG9uZTogc2luZ3VsYXIsXG4gICAgICAgICAgICAgICAgb3RoZXI6IHBsdXJhbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIGluY2x1ZGUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBsb2NhbGUsXG4gICAgICAgICAgICAvLyBzaW5jZSB0aGVzZSB2YWx1ZXMgY291bGQgY2hhbmdlIGJlZm9yZSB0aGVcbiAgICAgICAgICAgIC8vIHdyaXRlIGlzIHBlcmZvcm1lZC5cbiAgICAgICAgICAgIHRoaXMuX2VucXVldWVXcml0ZSh7XG4gICAgICAgICAgICAgICAgZGlyZWN0b3J5OiB0aGlzLmRpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgYSAlZCBwbGFjZWhvbGRlciBpcyBwcm92aWRlZCwgYWRkIHF1YW50aXR5XG4gICAgICAgIC8vIHRvIHRoZSBhcmd1bWVudHMgZXhwYW5kZWQgYnkgdXRpbC5mb3JtYXQuXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IFtzdHJdO1xuICAgICAgICBpZiAofnN0ci5pbmRleE9mKCclZCcpKVxuICAgICAgICAgICAgdmFsdWVzLnB1c2gocXVhbnRpdHkpO1xuICAgICAgICByZXR1cm4gc2hpbS5mb3JtYXQuYXBwbHkoc2hpbS5mb3JtYXQsIHZhbHVlcy5jb25jYXQoYXJncykpO1xuICAgIH1cbiAgICBzZXRMb2NhbGUobG9jYWxlKSB7XG4gICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxlO1xuICAgIH1cbiAgICBnZXRMb2NhbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZTtcbiAgICB9XG4gICAgdXBkYXRlTG9jYWxlKG9iaikge1xuICAgICAgICBpZiAoIXRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdKVxuICAgICAgICAgICAgdGhpcy5fcmVhZExvY2FsZUZpbGUoKTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBfdGFnZ2VkTGl0ZXJhbChwYXJ0cywgLi4uYXJncykge1xuICAgICAgICBsZXQgc3RyID0gJyc7XG4gICAgICAgIHBhcnRzLmZvckVhY2goZnVuY3Rpb24gKHBhcnQsIGkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZyA9IGFyZ3NbaSArIDFdO1xuICAgICAgICAgICAgc3RyICs9IHBhcnQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBzdHIgKz0gJyVzJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9fLmFwcGx5KHRoaXMsIFtzdHJdLmNvbmNhdChbXS5zbGljZS5jYWxsKGFyZ3MsIDEpKSk7XG4gICAgfVxuICAgIF9lbnF1ZXVlV3JpdGUod29yaykge1xuICAgICAgICB0aGlzLndyaXRlUXVldWUucHVzaCh3b3JrKTtcbiAgICAgICAgaWYgKHRoaXMud3JpdGVRdWV1ZS5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzV3JpdGVRdWV1ZSgpO1xuICAgIH1cbiAgICBfcHJvY2Vzc1dyaXRlUXVldWUoKSB7XG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcbiAgICAgICAgY29uc3Qgd29yayA9IHRoaXMud3JpdGVRdWV1ZVswXTtcbiAgICAgICAgLy8gZGVzdHJ1Y3R1cmUgdGhlIGVucXVldWVkIHdvcmsuXG4gICAgICAgIGNvbnN0IGRpcmVjdG9yeSA9IHdvcmsuZGlyZWN0b3J5O1xuICAgICAgICBjb25zdCBsb2NhbGUgPSB3b3JrLmxvY2FsZTtcbiAgICAgICAgY29uc3QgY2IgPSB3b3JrLmNiO1xuICAgICAgICBjb25zdCBsYW5ndWFnZUZpbGUgPSB0aGlzLl9yZXNvbHZlTG9jYWxlRmlsZShkaXJlY3RvcnksIGxvY2FsZSk7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRMb2NhbGUgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNhY2hlW2xvY2FsZV0sIG51bGwsIDIpO1xuICAgICAgICBzaGltLmZzLndyaXRlRmlsZShsYW5ndWFnZUZpbGUsIHNlcmlhbGl6ZWRMb2NhbGUsICd1dGYtOCcsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIF90aGlzLndyaXRlUXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgIGlmIChfdGhpcy53cml0ZVF1ZXVlLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgX3RoaXMuX3Byb2Nlc3NXcml0ZVF1ZXVlKCk7XG4gICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3JlYWRMb2NhbGVGaWxlKCkge1xuICAgICAgICBsZXQgbG9jYWxlTG9va3VwID0ge307XG4gICAgICAgIGNvbnN0IGxhbmd1YWdlRmlsZSA9IHRoaXMuX3Jlc29sdmVMb2NhbGVGaWxlKHRoaXMuZGlyZWN0b3J5LCB0aGlzLmxvY2FsZSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHVzaW5nIGEgYnVuZGxlciBzdWNoIGFzIHdlYnBhY2ssIHJlYWRGaWxlU3luYyBtYXkgbm90IGJlIGRlZmluZWQ6XG4gICAgICAgICAgICBpZiAoc2hpbS5mcy5yZWFkRmlsZVN5bmMpIHtcbiAgICAgICAgICAgICAgICBsb2NhbGVMb29rdXAgPSBKU09OLnBhcnNlKHNoaW0uZnMucmVhZEZpbGVTeW5jKGxhbmd1YWdlRmlsZSwgJ3V0Zi04JykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlID0gJ3N5bnRheCBlcnJvciBpbiAnICsgbGFuZ3VhZ2VGaWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJylcbiAgICAgICAgICAgICAgICBsb2NhbGVMb29rdXAgPSB7fTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV0gPSBsb2NhbGVMb29rdXA7XG4gICAgfVxuICAgIF9yZXNvbHZlTG9jYWxlRmlsZShkaXJlY3RvcnksIGxvY2FsZSkge1xuICAgICAgICBsZXQgZmlsZSA9IHNoaW0ucmVzb2x2ZShkaXJlY3RvcnksICcuLycsIGxvY2FsZSArICcuanNvbicpO1xuICAgICAgICBpZiAodGhpcy5mYWxsYmFja1RvTGFuZ3VhZ2UgJiYgIXRoaXMuX2ZpbGVFeGlzdHNTeW5jKGZpbGUpICYmIH5sb2NhbGUubGFzdEluZGV4T2YoJ18nKSkge1xuICAgICAgICAgICAgLy8gYXR0ZW1wdCBmYWxsYmFjayB0byBsYW5ndWFnZSBvbmx5XG4gICAgICAgICAgICBjb25zdCBsYW5ndWFnZUZpbGUgPSBzaGltLnJlc29sdmUoZGlyZWN0b3J5LCAnLi8nLCBsb2NhbGUuc3BsaXQoJ18nKVswXSArICcuanNvbicpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbGVFeGlzdHNTeW5jKGxhbmd1YWdlRmlsZSkpXG4gICAgICAgICAgICAgICAgZmlsZSA9IGxhbmd1YWdlRmlsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsZTtcbiAgICB9XG4gICAgX2ZpbGVFeGlzdHNTeW5jKGZpbGUpIHtcbiAgICAgICAgcmV0dXJuIHNoaW0uZXhpc3RzKGZpbGUpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiB5MThuKG9wdHMsIF9zaGltKSB7XG4gICAgc2hpbSA9IF9zaGltO1xuICAgIGNvbnN0IHkxOG4gPSBuZXcgWTE4TihvcHRzKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBfXzogeTE4bi5fXy5iaW5kKHkxOG4pLFxuICAgICAgICBfX246IHkxOG4uX19uLmJpbmQoeTE4biksXG4gICAgICAgIHNldExvY2FsZTogeTE4bi5zZXRMb2NhbGUuYmluZCh5MThuKSxcbiAgICAgICAgZ2V0TG9jYWxlOiB5MThuLmdldExvY2FsZS5iaW5kKHkxOG4pLFxuICAgICAgICB1cGRhdGVMb2NhbGU6IHkxOG4udXBkYXRlTG9jYWxlLmJpbmQoeTE4biksXG4gICAgICAgIGxvY2FsZTogeTE4bi5sb2NhbGVcbiAgICB9O1xufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDYWxsIHRoaXMgZnVuY3Rpb24gaW4gYSBhbm90aGVyIGZ1bmN0aW9uIHRvIGZpbmQgb3V0IHRoZSBmaWxlIGZyb21cbi8vIHdoaWNoIHRoYXQgZnVuY3Rpb24gd2FzIGNhbGxlZCBmcm9tLiAoSW5zcGVjdHMgdGhlIHY4IHN0YWNrIHRyYWNlKVxuLy9cbi8vIEluc3BpcmVkIGJ5IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTMyMjc0ODlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0Q2FsbGVyRmlsZShwb3NpdGlvbikge1xuICAgIGlmIChwb3NpdGlvbiA9PT0gdm9pZCAwKSB7IHBvc2l0aW9uID0gMjsgfVxuICAgIGlmIChwb3NpdGlvbiA+PSBFcnJvci5zdGFja1RyYWNlTGltaXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZ2V0Q2FsbGVyRmlsZShwb3NpdGlvbikgcmVxdWlyZXMgcG9zaXRpb24gYmUgbGVzcyB0aGVuIEVycm9yLnN0YWNrVHJhY2VMaW1pdCBidXQgcG9zaXRpb24gd2FzOiBgJyArIHBvc2l0aW9uICsgJ2AgYW5kIEVycm9yLnN0YWNrVHJhY2VMaW1pdCB3YXM6IGAnICsgRXJyb3Iuc3RhY2tUcmFjZUxpbWl0ICsgJ2AnKTtcbiAgICB9XG4gICAgdmFyIG9sZFByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7XG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBmdW5jdGlvbiAoXywgc3RhY2spIHsgcmV0dXJuIHN0YWNrOyB9O1xuICAgIHZhciBzdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gb2xkUHJlcGFyZVN0YWNrVHJhY2U7XG4gICAgaWYgKHN0YWNrICE9PSBudWxsICYmIHR5cGVvZiBzdGFjayA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gc3RhY2tbMF0gaG9sZHMgdGhpcyBmaWxlXG4gICAgICAgIC8vIHN0YWNrWzFdIGhvbGRzIHdoZXJlIHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxlZFxuICAgICAgICAvLyBzdGFja1syXSBob2xkcyB0aGUgZmlsZSB3ZSdyZSBpbnRlcmVzdGVkIGluXG4gICAgICAgIHJldHVybiBzdGFja1twb3NpdGlvbl0gPyBzdGFja1twb3NpdGlvbl0uZ2V0RmlsZU5hbWUoKSA6IHVuZGVmaW5lZDtcbiAgICB9XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiJ3VzZSBzdHJpY3QnXG5cbmltcG9ydCB7IG5vdFN0cmljdEVxdWFsLCBzdHJpY3RFcXVhbCB9IGZyb20gJ2Fzc2VydCdcbmltcG9ydCBjbGl1aSBmcm9tICdjbGl1aSdcbmltcG9ydCBlc2NhbGFkZSBmcm9tICdlc2NhbGFkZS9zeW5jJ1xuaW1wb3J0IHsgaW5zcGVjdCB9IGZyb20gJ3V0aWwnXG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAndXJsJztcbmltcG9ydCBQYXJzZXIgZnJvbSAneWFyZ3MtcGFyc2VyJ1xuaW1wb3J0IHsgYmFzZW5hbWUsIGRpcm5hbWUsIGV4dG5hbWUsIHJlbGF0aXZlLCByZXNvbHZlLCBqb2luIH0gZnJvbSAncGF0aCdcbmltcG9ydCB7IGdldFByb2Nlc3NBcmd2QmluIH0gZnJvbSAnLi4vLi4vYnVpbGQvbGliL3V0aWxzL3Byb2Nlc3MtYXJndi5qcydcbmltcG9ydCBzdHJpbmdXaWR0aCBmcm9tICdzdHJpbmctd2lkdGgnO1xuaW1wb3J0IHkxOG4gZnJvbSAneTE4bidcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tICdub2RlOm1vZHVsZSc7XG5pbXBvcnQgZ2V0Q2FsbGVyRmlsZSBmcm9tICdnZXQtY2FsbGVyLWZpbGUnO1xuaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCByZWFkZGlyU3luYyB9IGZyb20gJ25vZGU6ZnMnXG5cbmNvbnN0IF9fZGlybmFtZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKTtcbmNvbnN0IG1haW5GaWxlbmFtZSA9IF9fZGlybmFtZS5zdWJzdHJpbmcoMCwgX19kaXJuYW1lLmxhc3RJbmRleE9mKCdub2RlX21vZHVsZXMnKSk7XG5jb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGFzc2VydDoge1xuICAgIG5vdFN0cmljdEVxdWFsLFxuICAgIHN0cmljdEVxdWFsXG4gIH0sXG4gIGNsaXVpLFxuICBmaW5kVXA6IGVzY2FsYWRlLFxuICBnZXRFbnY6IChrZXkpID0+IHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnZba2V5XVxuICB9LFxuICBpbnNwZWN0LFxuICBnZXRQcm9jZXNzQXJndkJpbixcbiAgbWFpbkZpbGVuYW1lOiBtYWluRmlsZW5hbWUgfHwgcHJvY2Vzcy5jd2QoKSxcbiAgUGFyc2VyLFxuICBwYXRoOiB7XG4gICAgYmFzZW5hbWUsXG4gICAgZGlybmFtZSxcbiAgICBleHRuYW1lLFxuICAgIHJlbGF0aXZlLFxuICAgIHJlc29sdmUsXG4gICAgam9pblxuICB9LFxuICBwcm9jZXNzOiB7XG4gICAgYXJndjogKCkgPT4gcHJvY2Vzcy5hcmd2LFxuICAgIGN3ZDogcHJvY2Vzcy5jd2QsXG4gICAgZW1pdFdhcm5pbmc6ICh3YXJuaW5nLCB0eXBlKSA9PiBwcm9jZXNzLmVtaXRXYXJuaW5nKHdhcm5pbmcsIHR5cGUpLFxuICAgIGV4ZWNQYXRoOiAoKSA9PiBwcm9jZXNzLmV4ZWNQYXRoLFxuICAgIGV4aXQ6IChjb2RlKSA9PiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbi9uby1wcm9jZXNzLWV4aXRcbiAgICAgIHByb2Nlc3MuZXhpdChjb2RlKTtcbiAgICB9LFxuICAgIG5leHRUaWNrOiBwcm9jZXNzLm5leHRUaWNrLFxuICAgIHN0ZENvbHVtbnM6IHR5cGVvZiBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zICE9PSAndW5kZWZpbmVkJyA/IHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgOiBudWxsXG4gIH0sXG4gIHJlYWRGaWxlU3luYyxcbiAgcmVhZGRpclN5bmMsXG4gIHJlcXVpcmUsXG4gIGdldENhbGxlckZpbGU6ICgpID0+IHtcbiAgICBjb25zdCBjYWxsZXJGaWxlID0gZ2V0Q2FsbGVyRmlsZSgzKTtcbiAgICByZXR1cm4gY2FsbGVyRmlsZS5tYXRjaCgvXmZpbGU6XFwvXFwvLykgPyBmaWxlVVJMVG9QYXRoKGNhbGxlckZpbGUpIDogY2FsbGVyRmlsZTtcbiAgfSxcbiAgc3RyaW5nV2lkdGgsXG4gIHkxOG46IHkxOG4oe1xuICAgIGRpcmVjdG9yeTogcmVzb2x2ZShfX2Rpcm5hbWUsICcuLi8uLi8uLi9sb2NhbGVzJyksXG4gICAgdXBkYXRlRmlsZXM6IGZhbHNlXG4gIH0pXG59XG4iLCJpbXBvcnQgc2hpbSBmcm9tICcuL2J1aWxkL2xpYi9wbGF0Zm9ybS1zaGltcy9ub2RlLmpzJ1xuaW1wb3J0IHsgeTE4biBhcyBfeTE4biB9IGZyb20gJy4vYnVpbGQvbGliL2luZGV4LmpzJ1xuXG5jb25zdCB5MThuID0gKG9wdHMpID0+IHtcbiAgcmV0dXJuIF95MThuKG9wdHMsIHNoaW0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IHkxOG5cbiIsIi8vIEJvb3RzdHJhcCBjbGl1aSB3aXRoIENvbW1vbkpTIGRlcGVuZGVuY2llczpcbmltcG9ydCB7IGNsaXVpIH0gZnJvbSAnLi9idWlsZC9saWIvaW5kZXguanMnXG5pbXBvcnQgc3RyaW5nV2lkdGggZnJvbSAnc3RyaW5nLXdpZHRoJ1xuaW1wb3J0IHN0cmlwQW5zaSBmcm9tICdzdHJpcC1hbnNpJ1xuaW1wb3J0IHdyYXBBbnNpIGZyb20gJ3dyYXAtYW5zaSdcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdWkgKG9wdHMpIHtcbiAgcmV0dXJuIGNsaXVpKG9wdHMsIHtcbiAgICBzdHJpbmdXaWR0aCxcbiAgICBzdHJpcEFuc2ksXG4gICAgd3JhcDogd3JhcEFuc2lcbiAgfSlcbn1cblxuZXhwb3J0IHt1aSBhcyAnbW9kdWxlLmV4cG9ydHMnfTtcbiIsImltcG9ydCB7IGRpcm5hbWUsIHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IHJlYWRkaXJTeW5jLCBzdGF0U3luYyB9IGZyb20gJ2ZzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHN0YXJ0LCBjYWxsYmFjaykge1xuXHRsZXQgZGlyID0gcmVzb2x2ZSgnLicsIHN0YXJ0KTtcblx0bGV0IHRtcCwgc3RhdHMgPSBzdGF0U3luYyhkaXIpO1xuXG5cdGlmICghc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuXHRcdGRpciA9IGRpcm5hbWUoZGlyKTtcblx0fVxuXG5cdHdoaWxlICh0cnVlKSB7XG5cdFx0dG1wID0gY2FsbGJhY2soZGlyLCByZWFkZGlyU3luYyhkaXIpKTtcblx0XHRpZiAodG1wKSByZXR1cm4gcmVzb2x2ZShkaXIsIHRtcCk7XG5cdFx0ZGlyID0gZGlybmFtZSh0bXAgPSBkaXIpO1xuXHRcdGlmICh0bXAgPT09IGRpcikgYnJlYWs7XG5cdH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBhc3NlcnROb3RTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBzaGltLCBtZXNzYWdlKSB7XG4gICAgc2hpbS5hc3NlcnQubm90U3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0U2luZ2xlS2V5KGFjdHVhbCwgc2hpbSkge1xuICAgIHNoaW0uYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBhY3R1YWwsICdzdHJpbmcnKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3RLZXlzKG9iamVjdCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGlzUHJvbWlzZShtYXliZVByb21pc2UpIHtcbiAgICByZXR1cm4gKCEhbWF5YmVQcm9taXNlICYmXG4gICAgICAgICEhbWF5YmVQcm9taXNlLnRoZW4gJiZcbiAgICAgICAgdHlwZW9mIG1heWJlUHJvbWlzZS50aGVuID09PSAnZnVuY3Rpb24nKTtcbn1cbiIsImV4cG9ydCBjbGFzcyBZRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobXNnKSB7XG4gICAgICAgIHN1cGVyKG1zZyB8fCAneWFyZ3MgZXJyb3InKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ1lFcnJvcic7XG4gICAgICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgWUVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBwYXJzZUNvbW1hbmQoY21kKSB7XG4gICAgY29uc3QgZXh0cmFTcGFjZXNTdHJpcHBlZENvbW1hbmQgPSBjbWQucmVwbGFjZSgvXFxzezIsfS9nLCAnICcpO1xuICAgIGNvbnN0IHNwbGl0Q29tbWFuZCA9IGV4dHJhU3BhY2VzU3RyaXBwZWRDb21tYW5kLnNwbGl0KC9cXHMrKD8hW15bXSpdfFtePF0qPikvKTtcbiAgICBjb25zdCBicmVnZXggPSAvXFwuKltcXF1bPD5dL2c7XG4gICAgY29uc3QgZmlyc3RDb21tYW5kID0gc3BsaXRDb21tYW5kLnNoaWZ0KCk7XG4gICAgaWYgKCFmaXJzdENvbW1hbmQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gY29tbWFuZCBmb3VuZCBpbjogJHtjbWR9YCk7XG4gICAgY29uc3QgcGFyc2VkQ29tbWFuZCA9IHtcbiAgICAgICAgY21kOiBmaXJzdENvbW1hbmQucmVwbGFjZShicmVnZXgsICcnKSxcbiAgICAgICAgZGVtYW5kZWQ6IFtdLFxuICAgICAgICBvcHRpb25hbDogW10sXG4gICAgfTtcbiAgICBzcGxpdENvbW1hbmQuZm9yRWFjaCgoY21kLCBpKSA9PiB7XG4gICAgICAgIGxldCB2YXJpYWRpYyA9IGZhbHNlO1xuICAgICAgICBjbWQgPSBjbWQucmVwbGFjZSgvXFxzL2csICcnKTtcbiAgICAgICAgaWYgKC9cXC4rW1xcXT5dLy50ZXN0KGNtZCkgJiYgaSA9PT0gc3BsaXRDb21tYW5kLmxlbmd0aCAtIDEpXG4gICAgICAgICAgICB2YXJpYWRpYyA9IHRydWU7XG4gICAgICAgIGlmICgvXlxcWy8udGVzdChjbWQpKSB7XG4gICAgICAgICAgICBwYXJzZWRDb21tYW5kLm9wdGlvbmFsLnB1c2goe1xuICAgICAgICAgICAgICAgIGNtZDogY21kLnJlcGxhY2UoYnJlZ2V4LCAnJykuc3BsaXQoJ3wnKSxcbiAgICAgICAgICAgICAgICB2YXJpYWRpYyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcGFyc2VkQ29tbWFuZC5kZW1hbmRlZC5wdXNoKHtcbiAgICAgICAgICAgICAgICBjbWQ6IGNtZC5yZXBsYWNlKGJyZWdleCwgJycpLnNwbGl0KCd8JyksXG4gICAgICAgICAgICAgICAgdmFyaWFkaWMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBwYXJzZWRDb21tYW5kO1xufVxuIiwiaW1wb3J0IHsgWUVycm9yIH0gZnJvbSAnLi95ZXJyb3IuanMnO1xuaW1wb3J0IHsgcGFyc2VDb21tYW5kIH0gZnJvbSAnLi9wYXJzZS1jb21tYW5kLmpzJztcbmNvbnN0IHBvc2l0aW9uTmFtZSA9IFsnZmlyc3QnLCAnc2Vjb25kJywgJ3RoaXJkJywgJ2ZvdXJ0aCcsICdmaWZ0aCcsICdzaXh0aCddO1xuZXhwb3J0IGZ1bmN0aW9uIGFyZ3NlcnQoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIGZ1bmN0aW9uIHBhcnNlQXJncygpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBhcmcxID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgPyBbeyBkZW1hbmRlZDogW10sIG9wdGlvbmFsOiBbXSB9LCBhcmcxLCBhcmcyXVxuICAgICAgICAgICAgOiBbXG4gICAgICAgICAgICAgICAgcGFyc2VDb21tYW5kKGBjbWQgJHthcmcxfWApLFxuICAgICAgICAgICAgICAgIGFyZzIsXG4gICAgICAgICAgICAgICAgYXJnMyxcbiAgICAgICAgICAgIF07XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGxldCBwb3NpdGlvbiA9IDA7XG4gICAgICAgIGNvbnN0IFtwYXJzZWQsIGNhbGxlckFyZ3VtZW50cywgX2xlbmd0aF0gPSBwYXJzZUFyZ3MoKTtcbiAgICAgICAgY29uc3QgYXJncyA9IFtdLnNsaWNlLmNhbGwoY2FsbGVyQXJndW1lbnRzKTtcbiAgICAgICAgd2hpbGUgKGFyZ3MubGVuZ3RoICYmIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgYXJncy5wb3AoKTtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gX2xlbmd0aCB8fCBhcmdzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IHBhcnNlZC5kZW1hbmRlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IoYE5vdCBlbm91Z2ggYXJndW1lbnRzIHByb3ZpZGVkLiBFeHBlY3RlZCAke3BhcnNlZC5kZW1hbmRlZC5sZW5ndGh9IGJ1dCByZWNlaXZlZCAke2FyZ3MubGVuZ3RofS5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0b3RhbENvbW1hbmRzID0gcGFyc2VkLmRlbWFuZGVkLmxlbmd0aCArIHBhcnNlZC5vcHRpb25hbC5sZW5ndGg7XG4gICAgICAgIGlmIChsZW5ndGggPiB0b3RhbENvbW1hbmRzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgWUVycm9yKGBUb28gbWFueSBhcmd1bWVudHMgcHJvdmlkZWQuIEV4cGVjdGVkIG1heCAke3RvdGFsQ29tbWFuZHN9IGJ1dCByZWNlaXZlZCAke2xlbmd0aH0uYCk7XG4gICAgICAgIH1cbiAgICAgICAgcGFyc2VkLmRlbWFuZGVkLmZvckVhY2goZGVtYW5kZWQgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXJnID0gYXJncy5zaGlmdCgpO1xuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZWRUeXBlID0gZ3Vlc3NUeXBlKGFyZyk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZ1R5cGVzID0gZGVtYW5kZWQuY21kLmZpbHRlcih0eXBlID0+IHR5cGUgPT09IG9ic2VydmVkVHlwZSB8fCB0eXBlID09PSAnKicpO1xuICAgICAgICAgICAgaWYgKG1hdGNoaW5nVHlwZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICAgIGFyZ3VtZW50VHlwZUVycm9yKG9ic2VydmVkVHlwZSwgZGVtYW5kZWQuY21kLCBwb3NpdGlvbik7XG4gICAgICAgICAgICBwb3NpdGlvbiArPSAxO1xuICAgICAgICB9KTtcbiAgICAgICAgcGFyc2VkLm9wdGlvbmFsLmZvckVhY2gob3B0aW9uYWwgPT4ge1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGFyZyA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmVkVHlwZSA9IGd1ZXNzVHlwZShhcmcpO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdUeXBlcyA9IG9wdGlvbmFsLmNtZC5maWx0ZXIodHlwZSA9PiB0eXBlID09PSBvYnNlcnZlZFR5cGUgfHwgdHlwZSA9PT0gJyonKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGluZ1R5cGVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICBhcmd1bWVudFR5cGVFcnJvcihvYnNlcnZlZFR5cGUsIG9wdGlvbmFsLmNtZCwgcG9zaXRpb24pO1xuICAgICAgICAgICAgcG9zaXRpb24gKz0gMTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGVyci5zdGFjayk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ3Vlc3NUeXBlKGFyZykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgICAgcmV0dXJuICdhcnJheSc7XG4gICAgfVxuICAgIGVsc2UgaWYgKGFyZyA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIGFyZztcbn1cbmZ1bmN0aW9uIGFyZ3VtZW50VHlwZUVycm9yKG9ic2VydmVkVHlwZSwgYWxsb3dlZFR5cGVzLCBwb3NpdGlvbikge1xuICAgIHRocm93IG5ldyBZRXJyb3IoYEludmFsaWQgJHtwb3NpdGlvbk5hbWVbcG9zaXRpb25dIHx8ICdtYW55aXRoJ30gYXJndW1lbnQuIEV4cGVjdGVkICR7YWxsb3dlZFR5cGVzLmpvaW4oJyBvciAnKX0gYnV0IHJlY2VpdmVkICR7b2JzZXJ2ZWRUeXBlfS5gKTtcbn1cbiIsImltcG9ydCB7IGFyZ3NlcnQgfSBmcm9tICcuL2FyZ3NlcnQuanMnO1xuaW1wb3J0IHsgaXNQcm9taXNlIH0gZnJvbSAnLi91dGlscy9pcy1wcm9taXNlLmpzJztcbmV4cG9ydCBjbGFzcyBHbG9iYWxNaWRkbGV3YXJlIHtcbiAgICBjb25zdHJ1Y3Rvcih5YXJncykge1xuICAgICAgICB0aGlzLmdsb2JhbE1pZGRsZXdhcmUgPSBbXTtcbiAgICAgICAgdGhpcy5mcm96ZW5zID0gW107XG4gICAgICAgIHRoaXMueWFyZ3MgPSB5YXJncztcbiAgICB9XG4gICAgYWRkTWlkZGxld2FyZShjYWxsYmFjaywgYXBwbHlCZWZvcmVWYWxpZGF0aW9uLCBnbG9iYWwgPSB0cnVlLCBtdXRhdGVzID0gZmFsc2UpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fGZ1bmN0aW9uPiBbYm9vbGVhbl0gW2Jvb2xlYW5dIFtib29sZWFuXScsIFtjYWxsYmFjaywgYXBwbHlCZWZvcmVWYWxpZGF0aW9uLCBnbG9iYWxdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2FsbGJhY2spKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhbGxiYWNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFja1tpXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignbWlkZGxld2FyZSBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbSA9IGNhbGxiYWNrW2ldO1xuICAgICAgICAgICAgICAgIG0uYXBwbHlCZWZvcmVWYWxpZGF0aW9uID0gYXBwbHlCZWZvcmVWYWxpZGF0aW9uO1xuICAgICAgICAgICAgICAgIG0uZ2xvYmFsID0gZ2xvYmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5nbG9iYWxNaWRkbGV3YXJlLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zdCBtID0gY2FsbGJhY2s7XG4gICAgICAgICAgICBtLmFwcGx5QmVmb3JlVmFsaWRhdGlvbiA9IGFwcGx5QmVmb3JlVmFsaWRhdGlvbjtcbiAgICAgICAgICAgIG0uZ2xvYmFsID0gZ2xvYmFsO1xuICAgICAgICAgICAgbS5tdXRhdGVzID0gbXV0YXRlcztcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsTWlkZGxld2FyZS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy55YXJncztcbiAgICB9XG4gICAgYWRkQ29lcmNlTWlkZGxld2FyZShjYWxsYmFjaywgb3B0aW9uKSB7XG4gICAgICAgIGNvbnN0IGFsaWFzZXMgPSB0aGlzLnlhcmdzLmdldEFsaWFzZXMoKTtcbiAgICAgICAgdGhpcy5nbG9iYWxNaWRkbGV3YXJlID0gdGhpcy5nbG9iYWxNaWRkbGV3YXJlLmZpbHRlcihtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbLi4uKGFsaWFzZXNbb3B0aW9uXSB8fCBbXSksIG9wdGlvbl07XG4gICAgICAgICAgICBpZiAoIW0ub3B0aW9uKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiAhdG9DaGVjay5pbmNsdWRlcyhtLm9wdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgICBjYWxsYmFjay5vcHRpb24gPSBvcHRpb247XG4gICAgICAgIHJldHVybiB0aGlzLmFkZE1pZGRsZXdhcmUoY2FsbGJhY2ssIHRydWUsIHRydWUsIHRydWUpO1xuICAgIH1cbiAgICBnZXRNaWRkbGV3YXJlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nbG9iYWxNaWRkbGV3YXJlO1xuICAgIH1cbiAgICBmcmVlemUoKSB7XG4gICAgICAgIHRoaXMuZnJvemVucy5wdXNoKFsuLi50aGlzLmdsb2JhbE1pZGRsZXdhcmVdKTtcbiAgICB9XG4gICAgdW5mcmVlemUoKSB7XG4gICAgICAgIGNvbnN0IGZyb3plbiA9IHRoaXMuZnJvemVucy5wb3AoKTtcbiAgICAgICAgaWYgKGZyb3plbiAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhpcy5nbG9iYWxNaWRkbGV3YXJlID0gZnJvemVuO1xuICAgIH1cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5nbG9iYWxNaWRkbGV3YXJlID0gdGhpcy5nbG9iYWxNaWRkbGV3YXJlLmZpbHRlcihtID0+IG0uZ2xvYmFsKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZE1pZGRsZXdhcmVGYWN0b3J5KGNvbW1hbmRNaWRkbGV3YXJlKSB7XG4gICAgaWYgKCFjb21tYW5kTWlkZGxld2FyZSlcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIHJldHVybiBjb21tYW5kTWlkZGxld2FyZS5tYXAobWlkZGxld2FyZSA9PiB7XG4gICAgICAgIG1pZGRsZXdhcmUuYXBwbHlCZWZvcmVWYWxpZGF0aW9uID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBtaWRkbGV3YXJlO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TWlkZGxld2FyZShhcmd2LCB5YXJncywgbWlkZGxld2FyZXMsIGJlZm9yZVZhbGlkYXRpb24pIHtcbiAgICByZXR1cm4gbWlkZGxld2FyZXMucmVkdWNlKChhY2MsIG1pZGRsZXdhcmUpID0+IHtcbiAgICAgICAgaWYgKG1pZGRsZXdhcmUuYXBwbHlCZWZvcmVWYWxpZGF0aW9uICE9PSBiZWZvcmVWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaWRkbGV3YXJlLm11dGF0ZXMpIHtcbiAgICAgICAgICAgIGlmIChtaWRkbGV3YXJlLmFwcGxpZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIG1pZGRsZXdhcmUuYXBwbGllZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShhY2MpKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjXG4gICAgICAgICAgICAgICAgLnRoZW4oaW5pdGlhbE9iaiA9PiBQcm9taXNlLmFsbChbaW5pdGlhbE9iaiwgbWlkZGxld2FyZShpbml0aWFsT2JqLCB5YXJncyldKSlcbiAgICAgICAgICAgICAgICAudGhlbigoW2luaXRpYWxPYmosIG1pZGRsZXdhcmVPYmpdKSA9PiBPYmplY3QuYXNzaWduKGluaXRpYWxPYmosIG1pZGRsZXdhcmVPYmopKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG1pZGRsZXdhcmUoYWNjLCB5YXJncyk7XG4gICAgICAgICAgICByZXR1cm4gaXNQcm9taXNlKHJlc3VsdClcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50aGVuKG1pZGRsZXdhcmVPYmogPT4gT2JqZWN0LmFzc2lnbihhY2MsIG1pZGRsZXdhcmVPYmopKVxuICAgICAgICAgICAgICAgIDogT2JqZWN0LmFzc2lnbihhY2MsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9LCBhcmd2KTtcbn1cbiIsImltcG9ydCB7IGlzUHJvbWlzZSB9IGZyb20gJy4vaXMtcHJvbWlzZS5qcyc7XG5leHBvcnQgZnVuY3Rpb24gbWF5YmVBc3luY1Jlc3VsdChnZXRSZXN1bHQsIHJlc3VsdEhhbmRsZXIsIGVycm9ySGFuZGxlciA9IChlcnIpID0+IHtcbiAgICB0aHJvdyBlcnI7XG59KSB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaXNGdW5jdGlvbihnZXRSZXN1bHQpID8gZ2V0UmVzdWx0KCkgOiBnZXRSZXN1bHQ7XG4gICAgICAgIHJldHVybiBpc1Byb21pc2UocmVzdWx0KVxuICAgICAgICAgICAgPyByZXN1bHQudGhlbigocmVzdWx0KSA9PiByZXN1bHRIYW5kbGVyKHJlc3VsdCkpXG4gICAgICAgICAgICA6IHJlc3VsdEhhbmRsZXIocmVzdWx0KTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gZXJyb3JIYW5kbGVyKGVycik7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNGdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cbiIsImltcG9ydCB7IGFzc2VydE5vdFN0cmljdEVxdWFsLCB9IGZyb20gJy4vdHlwaW5ncy9jb21tb24tdHlwZXMuanMnO1xuaW1wb3J0IHsgaXNQcm9taXNlIH0gZnJvbSAnLi91dGlscy9pcy1wcm9taXNlLmpzJztcbmltcG9ydCB7IGFwcGx5TWlkZGxld2FyZSwgY29tbWFuZE1pZGRsZXdhcmVGYWN0b3J5LCB9IGZyb20gJy4vbWlkZGxld2FyZS5qcyc7XG5pbXBvcnQgeyBwYXJzZUNvbW1hbmQgfSBmcm9tICcuL3BhcnNlLWNvbW1hbmQuanMnO1xuaW1wb3J0IHsgaXNZYXJnc0luc3RhbmNlLCB9IGZyb20gJy4veWFyZ3MtZmFjdG9yeS5qcyc7XG5pbXBvcnQgeyBtYXliZUFzeW5jUmVzdWx0IH0gZnJvbSAnLi91dGlscy9tYXliZS1hc3luYy1yZXN1bHQuanMnO1xuY29uc3QgREVGQVVMVF9NQVJLRVIgPSAvKF5cXCopfCheXFwkMCkvO1xuZXhwb3J0IGNsYXNzIENvbW1hbmRJbnN0YW5jZSB7XG4gICAgY29uc3RydWN0b3IodXNhZ2UsIHZhbGlkYXRpb24sIGdsb2JhbE1pZGRsZXdhcmUsIHNoaW0pIHtcbiAgICAgICAgdGhpcy5yZXF1aXJlQ2FjaGUgPSBuZXcgU2V0KCk7XG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSB7fTtcbiAgICAgICAgdGhpcy5hbGlhc01hcCA9IHt9O1xuICAgICAgICB0aGlzLmZyb3plbnMgPSBbXTtcbiAgICAgICAgdGhpcy5zaGltID0gc2hpbTtcbiAgICAgICAgdGhpcy51c2FnZSA9IHVzYWdlO1xuICAgICAgICB0aGlzLmdsb2JhbE1pZGRsZXdhcmUgPSBnbG9iYWxNaWRkbGV3YXJlO1xuICAgICAgICB0aGlzLnZhbGlkYXRpb24gPSB2YWxpZGF0aW9uO1xuICAgIH1cbiAgICBhZGREaXJlY3RvcnkoZGlyLCByZXEsIGNhbGxlckZpbGUsIG9wdHMpIHtcbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgICAgIHRoaXMucmVxdWlyZUNhY2hlLmFkZChjYWxsZXJGaWxlKTtcbiAgICAgICAgY29uc3QgZnVsbERpclBhdGggPSB0aGlzLnNoaW0ucGF0aC5yZXNvbHZlKHRoaXMuc2hpbS5wYXRoLmRpcm5hbWUoY2FsbGVyRmlsZSksIGRpcik7XG4gICAgICAgIGNvbnN0IGZpbGVzID0gdGhpcy5zaGltLnJlYWRkaXJTeW5jKGZ1bGxEaXJQYXRoLCB7XG4gICAgICAgICAgICByZWN1cnNpdmU6IG9wdHMucmVjdXJzZSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvcHRzLmV4dGVuc2lvbnMpKVxuICAgICAgICAgICAgb3B0cy5leHRlbnNpb25zID0gWydqcyddO1xuICAgICAgICBjb25zdCB2aXNpdCA9IHR5cGVvZiBvcHRzLnZpc2l0ID09PSAnZnVuY3Rpb24nID8gb3B0cy52aXNpdCA6IChvKSA9PiBvO1xuICAgICAgICBmb3IgKGNvbnN0IGZpbGViIG9mIGZpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlID0gZmlsZWIudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGlmIChvcHRzLmV4Y2x1ZGUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZXhjbHVkZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0cy5leGNsdWRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGUgPSBvcHRzLmV4Y2x1ZGUoZmlsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBleGNsdWRlID0gb3B0cy5leGNsdWRlLnRlc3QoZmlsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChleGNsdWRlKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRzLmluY2x1ZGUpIHtcbiAgICAgICAgICAgICAgICBsZXQgaW5jbHVkZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0cy5pbmNsdWRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgPSBvcHRzLmluY2x1ZGUoZmlsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlID0gb3B0cy5pbmNsdWRlLnRlc3QoZmlsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghaW5jbHVkZSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgc3VwcG9ydGVkRXh0ZW5zaW9uID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGV4dCBvZiBvcHRzLmV4dGVuc2lvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZS5lbmRzV2l0aChleHQpKVxuICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWRFeHRlbnNpb24gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN1cHBvcnRlZEV4dGVuc2lvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGpvaW5lZCA9IHRoaXMuc2hpbS5wYXRoLmpvaW4oZnVsbERpclBhdGgsIGZpbGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IHJlcShqb2luZWQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVuZGFibGVNb2R1bGUgPSBPYmplY3QuY3JlYXRlKG51bGwsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHsgLi4ubW9kdWxlIH0pKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2aXNpdGVkID0gdmlzaXQoZXh0ZW5kYWJsZU1vZHVsZSwgam9pbmVkLCBmaWxlKTtcbiAgICAgICAgICAgICAgICBpZiAodmlzaXRlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZXF1aXJlQ2FjaGUuaGFzKGpvaW5lZCkpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXF1aXJlQ2FjaGUuYWRkKGpvaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZXh0ZW5kYWJsZU1vZHVsZS5jb21tYW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbmRhYmxlTW9kdWxlLmNvbW1hbmQgPSB0aGlzLnNoaW0ucGF0aC5iYXNlbmFtZShqb2luZWQsIHRoaXMuc2hpbS5wYXRoLmV4dG5hbWUoam9pbmVkKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRIYW5kbGVyKGV4dGVuZGFibGVNb2R1bGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBhZGRIYW5kbGVyKGNtZCwgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIsIGNvbW1hbmRNaWRkbGV3YXJlLCBkZXByZWNhdGVkKSB7XG4gICAgICAgIGxldCBhbGlhc2VzID0gW107XG4gICAgICAgIGNvbnN0IG1pZGRsZXdhcmVzID0gY29tbWFuZE1pZGRsZXdhcmVGYWN0b3J5KGNvbW1hbmRNaWRkbGV3YXJlKTtcbiAgICAgICAgaGFuZGxlciA9IGhhbmRsZXIgfHwgKCgpID0+IHsgfSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNtZCkpIHtcbiAgICAgICAgICAgIGlmIChpc0NvbW1hbmRBbmRBbGlhc2VzKGNtZCkpIHtcbiAgICAgICAgICAgICAgICBbY21kLCAuLi5hbGlhc2VzXSA9IGNtZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29tbWFuZCBvZiBjbWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRIYW5kbGVyKGNvbW1hbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0NvbW1hbmRIYW5kbGVyRGVmaW5pdGlvbihjbWQpKSB7XG4gICAgICAgICAgICBsZXQgY29tbWFuZCA9IEFycmF5LmlzQXJyYXkoY21kLmNvbW1hbmQpIHx8IHR5cGVvZiBjbWQuY29tbWFuZCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICA/IGNtZC5jb21tYW5kXG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgaWYgKGNvbW1hbmQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGNvbW1hbmQgbmFtZSBnaXZlbiBmb3IgbW9kdWxlOiAke3RoaXMuc2hpbS5pbnNwZWN0KGNtZCl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY21kLmFsaWFzZXMpXG4gICAgICAgICAgICAgICAgY29tbWFuZCA9IFtdLmNvbmNhdChjb21tYW5kKS5jb25jYXQoY21kLmFsaWFzZXMpO1xuICAgICAgICAgICAgdGhpcy5hZGRIYW5kbGVyKGNvbW1hbmQsIHRoaXMuZXh0cmFjdERlc2MoY21kKSwgY21kLmJ1aWxkZXIsIGNtZC5oYW5kbGVyLCBjbWQubWlkZGxld2FyZXMsIGNtZC5kZXByZWNhdGVkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0NvbW1hbmRCdWlsZGVyRGVmaW5pdGlvbihidWlsZGVyKSkge1xuICAgICAgICAgICAgdGhpcy5hZGRIYW5kbGVyKFtjbWRdLmNvbmNhdChhbGlhc2VzKSwgZGVzY3JpcHRpb24sIGJ1aWxkZXIuYnVpbGRlciwgYnVpbGRlci5oYW5kbGVyLCBidWlsZGVyLm1pZGRsZXdhcmVzLCBidWlsZGVyLmRlcHJlY2F0ZWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgY21kID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkQ29tbWFuZCA9IHBhcnNlQ29tbWFuZChjbWQpO1xuICAgICAgICAgICAgYWxpYXNlcyA9IGFsaWFzZXMubWFwKGFsaWFzID0+IHBhcnNlQ29tbWFuZChhbGlhcykuY21kKTtcbiAgICAgICAgICAgIGxldCBpc0RlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEFsaWFzZXMgPSBbcGFyc2VkQ29tbWFuZC5jbWRdLmNvbmNhdChhbGlhc2VzKS5maWx0ZXIoYyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKERFRkFVTFRfTUFSS0VSLnRlc3QoYykpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNEZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHBhcnNlZEFsaWFzZXMubGVuZ3RoID09PSAwICYmIGlzRGVmYXVsdClcbiAgICAgICAgICAgICAgICBwYXJzZWRBbGlhc2VzLnB1c2goJyQwJyk7XG4gICAgICAgICAgICBpZiAoaXNEZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkQ29tbWFuZC5jbWQgPSBwYXJzZWRBbGlhc2VzWzBdO1xuICAgICAgICAgICAgICAgIGFsaWFzZXMgPSBwYXJzZWRBbGlhc2VzLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIGNtZCA9IGNtZC5yZXBsYWNlKERFRkFVTFRfTUFSS0VSLCBwYXJzZWRDb21tYW5kLmNtZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbGlhc2VzLmZvckVhY2goYWxpYXMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWxpYXNNYXBbYWxpYXNdID0gcGFyc2VkQ29tbWFuZC5jbWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzYWdlLmNvbW1hbmQoY21kLCBkZXNjcmlwdGlvbiwgaXNEZWZhdWx0LCBhbGlhc2VzLCBkZXByZWNhdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaGFuZGxlcnNbcGFyc2VkQ29tbWFuZC5jbWRdID0ge1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsOiBjbWQsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgaGFuZGxlcixcbiAgICAgICAgICAgICAgICBidWlsZGVyOiBidWlsZGVyIHx8IHt9LFxuICAgICAgICAgICAgICAgIG1pZGRsZXdhcmVzLFxuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQsXG4gICAgICAgICAgICAgICAgZGVtYW5kZWQ6IHBhcnNlZENvbW1hbmQuZGVtYW5kZWQsXG4gICAgICAgICAgICAgICAgb3B0aW9uYWw6IHBhcnNlZENvbW1hbmQub3B0aW9uYWwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGlzRGVmYXVsdClcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRDb21tYW5kID0gdGhpcy5oYW5kbGVyc1twYXJzZWRDb21tYW5kLmNtZF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0Q29tbWFuZEhhbmRsZXJzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVycztcbiAgICB9XG4gICAgZ2V0Q29tbWFuZHMoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmhhbmRsZXJzKS5jb25jYXQoT2JqZWN0LmtleXModGhpcy5hbGlhc01hcCkpO1xuICAgIH1cbiAgICBoYXNEZWZhdWx0Q29tbWFuZCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5kZWZhdWx0Q29tbWFuZDtcbiAgICB9XG4gICAgcnVuQ29tbWFuZChjb21tYW5kLCB5YXJncywgcGFyc2VkLCBjb21tYW5kSW5kZXgsIGhlbHBPbmx5LCBoZWxwT3JWZXJzaW9uU2V0KSB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRIYW5kbGVyID0gdGhpcy5oYW5kbGVyc1tjb21tYW5kXSB8fFxuICAgICAgICAgICAgdGhpcy5oYW5kbGVyc1t0aGlzLmFsaWFzTWFwW2NvbW1hbmRdXSB8fFxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0Q29tbWFuZDtcbiAgICAgICAgY29uc3QgY3VycmVudENvbnRleHQgPSB5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRDb250ZXh0KCk7XG4gICAgICAgIGNvbnN0IHBhcmVudENvbW1hbmRzID0gY3VycmVudENvbnRleHQuY29tbWFuZHMuc2xpY2UoKTtcbiAgICAgICAgY29uc3QgaXNEZWZhdWx0Q29tbWFuZCA9ICFjb21tYW5kO1xuICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgY3VycmVudENvbnRleHQuY29tbWFuZHMucHVzaChjb21tYW5kKTtcbiAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0LmZ1bGxDb21tYW5kcy5wdXNoKGNvbW1hbmRIYW5kbGVyLm9yaWdpbmFsKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWlsZGVyUmVzdWx0ID0gdGhpcy5hcHBseUJ1aWxkZXJVcGRhdGVVc2FnZUFuZFBhcnNlKGlzRGVmYXVsdENvbW1hbmQsIGNvbW1hbmRIYW5kbGVyLCB5YXJncywgcGFyc2VkLmFsaWFzZXMsIHBhcmVudENvbW1hbmRzLCBjb21tYW5kSW5kZXgsIGhlbHBPbmx5LCBoZWxwT3JWZXJzaW9uU2V0KTtcbiAgICAgICAgcmV0dXJuIGlzUHJvbWlzZShidWlsZGVyUmVzdWx0KVxuICAgICAgICAgICAgPyBidWlsZGVyUmVzdWx0LnRoZW4ocmVzdWx0ID0+IHRoaXMuYXBwbHlNaWRkbGV3YXJlQW5kR2V0UmVzdWx0KGlzRGVmYXVsdENvbW1hbmQsIGNvbW1hbmRIYW5kbGVyLCByZXN1bHQuaW5uZXJBcmd2LCBjdXJyZW50Q29udGV4dCwgaGVscE9ubHksIHJlc3VsdC5hbGlhc2VzLCB5YXJncykpXG4gICAgICAgICAgICA6IHRoaXMuYXBwbHlNaWRkbGV3YXJlQW5kR2V0UmVzdWx0KGlzRGVmYXVsdENvbW1hbmQsIGNvbW1hbmRIYW5kbGVyLCBidWlsZGVyUmVzdWx0LmlubmVyQXJndiwgY3VycmVudENvbnRleHQsIGhlbHBPbmx5LCBidWlsZGVyUmVzdWx0LmFsaWFzZXMsIHlhcmdzKTtcbiAgICB9XG4gICAgYXBwbHlCdWlsZGVyVXBkYXRlVXNhZ2VBbmRQYXJzZShpc0RlZmF1bHRDb21tYW5kLCBjb21tYW5kSGFuZGxlciwgeWFyZ3MsIGFsaWFzZXMsIHBhcmVudENvbW1hbmRzLCBjb21tYW5kSW5kZXgsIGhlbHBPbmx5LCBoZWxwT3JWZXJzaW9uU2V0KSB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjb21tYW5kSGFuZGxlci5idWlsZGVyO1xuICAgICAgICBsZXQgaW5uZXJZYXJncyA9IHlhcmdzO1xuICAgICAgICBpZiAoaXNDb21tYW5kQnVpbGRlckNhbGxiYWNrKGJ1aWxkZXIpKSB7XG4gICAgICAgICAgICB5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRVc2FnZUluc3RhbmNlKCkuZnJlZXplKCk7XG4gICAgICAgICAgICBjb25zdCBidWlsZGVyT3V0cHV0ID0gYnVpbGRlcih5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5yZXNldChhbGlhc2VzKSwgaGVscE9yVmVyc2lvblNldCk7XG4gICAgICAgICAgICBpZiAoaXNQcm9taXNlKGJ1aWxkZXJPdXRwdXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXJPdXRwdXQudGhlbihvdXRwdXQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpbm5lcllhcmdzID0gaXNZYXJnc0luc3RhbmNlKG91dHB1dCkgPyBvdXRwdXQgOiB5YXJncztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VBbmRVcGRhdGVVc2FnZShpc0RlZmF1bHRDb21tYW5kLCBjb21tYW5kSGFuZGxlciwgaW5uZXJZYXJncywgcGFyZW50Q29tbWFuZHMsIGNvbW1hbmRJbmRleCwgaGVscE9ubHkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzQ29tbWFuZEJ1aWxkZXJPcHRpb25EZWZpbml0aW9ucyhidWlsZGVyKSkge1xuICAgICAgICAgICAgeWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0VXNhZ2VJbnN0YW5jZSgpLmZyZWV6ZSgpO1xuICAgICAgICAgICAgaW5uZXJZYXJncyA9IHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLnJlc2V0KGFsaWFzZXMpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoY29tbWFuZEhhbmRsZXIuYnVpbGRlcikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGlubmVyWWFyZ3Mub3B0aW9uKGtleSwgYnVpbGRlcltrZXldKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlQW5kVXBkYXRlVXNhZ2UoaXNEZWZhdWx0Q29tbWFuZCwgY29tbWFuZEhhbmRsZXIsIGlubmVyWWFyZ3MsIHBhcmVudENvbW1hbmRzLCBjb21tYW5kSW5kZXgsIGhlbHBPbmx5KTtcbiAgICB9XG4gICAgcGFyc2VBbmRVcGRhdGVVc2FnZShpc0RlZmF1bHRDb21tYW5kLCBjb21tYW5kSGFuZGxlciwgaW5uZXJZYXJncywgcGFyZW50Q29tbWFuZHMsIGNvbW1hbmRJbmRleCwgaGVscE9ubHkpIHtcbiAgICAgICAgaWYgKGlzRGVmYXVsdENvbW1hbmQpXG4gICAgICAgICAgICBpbm5lcllhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldFVzYWdlSW5zdGFuY2UoKS51bmZyZWV6ZSh0cnVlKTtcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkVXBkYXRlVXNhZ2UoaW5uZXJZYXJncykpIHtcbiAgICAgICAgICAgIGlubmVyWWFyZ3NcbiAgICAgICAgICAgICAgICAuZ2V0SW50ZXJuYWxNZXRob2RzKClcbiAgICAgICAgICAgICAgICAuZ2V0VXNhZ2VJbnN0YW5jZSgpXG4gICAgICAgICAgICAgICAgLnVzYWdlKHRoaXMudXNhZ2VGcm9tUGFyZW50Q29tbWFuZHNDb21tYW5kSGFuZGxlcihwYXJlbnRDb21tYW5kcywgY29tbWFuZEhhbmRsZXIpLCBjb21tYW5kSGFuZGxlci5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5uZXJBcmd2ID0gaW5uZXJZYXJnc1xuICAgICAgICAgICAgLmdldEludGVybmFsTWV0aG9kcygpXG4gICAgICAgICAgICAucnVuWWFyZ3NQYXJzZXJBbmRFeGVjdXRlQ29tbWFuZHMobnVsbCwgdW5kZWZpbmVkLCB0cnVlLCBjb21tYW5kSW5kZXgsIGhlbHBPbmx5KTtcbiAgICAgICAgcmV0dXJuIGlzUHJvbWlzZShpbm5lckFyZ3YpXG4gICAgICAgICAgICA/IGlubmVyQXJndi50aGVuKGFyZ3YgPT4gKHtcbiAgICAgICAgICAgICAgICBhbGlhc2VzOiBpbm5lcllhcmdzLnBhcnNlZC5hbGlhc2VzLFxuICAgICAgICAgICAgICAgIGlubmVyQXJndjogYXJndixcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgYWxpYXNlczogaW5uZXJZYXJncy5wYXJzZWQuYWxpYXNlcyxcbiAgICAgICAgICAgICAgICBpbm5lckFyZ3Y6IGlubmVyQXJndixcbiAgICAgICAgICAgIH07XG4gICAgfVxuICAgIHNob3VsZFVwZGF0ZVVzYWdlKHlhcmdzKSB7XG4gICAgICAgIHJldHVybiAoIXlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldFVzYWdlSW5zdGFuY2UoKS5nZXRVc2FnZURpc2FibGVkKCkgJiZcbiAgICAgICAgICAgIHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldFVzYWdlSW5zdGFuY2UoKS5nZXRVc2FnZSgpLmxlbmd0aCA9PT0gMCk7XG4gICAgfVxuICAgIHVzYWdlRnJvbVBhcmVudENvbW1hbmRzQ29tbWFuZEhhbmRsZXIocGFyZW50Q29tbWFuZHMsIGNvbW1hbmRIYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IGMgPSBERUZBVUxUX01BUktFUi50ZXN0KGNvbW1hbmRIYW5kbGVyLm9yaWdpbmFsKVxuICAgICAgICAgICAgPyBjb21tYW5kSGFuZGxlci5vcmlnaW5hbC5yZXBsYWNlKERFRkFVTFRfTUFSS0VSLCAnJykudHJpbSgpXG4gICAgICAgICAgICA6IGNvbW1hbmRIYW5kbGVyLm9yaWdpbmFsO1xuICAgICAgICBjb25zdCBwYyA9IHBhcmVudENvbW1hbmRzLmZpbHRlcihjID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhREVGQVVMVF9NQVJLRVIudGVzdChjKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBjLnB1c2goYyk7XG4gICAgICAgIHJldHVybiBgJDAgJHtwYy5qb2luKCcgJyl9YDtcbiAgICB9XG4gICAgaGFuZGxlVmFsaWRhdGlvbkFuZEdldFJlc3VsdChpc0RlZmF1bHRDb21tYW5kLCBjb21tYW5kSGFuZGxlciwgaW5uZXJBcmd2LCBjdXJyZW50Q29udGV4dCwgYWxpYXNlcywgeWFyZ3MsIG1pZGRsZXdhcmVzLCBwb3NpdGlvbmFsTWFwKSB7XG4gICAgICAgIGlmICgheWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0SGFzT3V0cHV0KCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSB5YXJnc1xuICAgICAgICAgICAgICAgIC5nZXRJbnRlcm5hbE1ldGhvZHMoKVxuICAgICAgICAgICAgICAgIC5ydW5WYWxpZGF0aW9uKGFsaWFzZXMsIHBvc2l0aW9uYWxNYXAsIHlhcmdzLnBhcnNlZC5lcnJvciwgaXNEZWZhdWx0Q29tbWFuZCk7XG4gICAgICAgICAgICBpbm5lckFyZ3YgPSBtYXliZUFzeW5jUmVzdWx0KGlubmVyQXJndiwgcmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0aW9uKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21tYW5kSGFuZGxlci5oYW5kbGVyICYmICF5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRIYXNPdXRwdXQoKSkge1xuICAgICAgICAgICAgeWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuc2V0SGFzT3V0cHV0KCk7XG4gICAgICAgICAgICBjb25zdCBwb3B1bGF0ZURvdWJsZURhc2ggPSAhIXlhcmdzLmdldE9wdGlvbnMoKS5jb25maWd1cmF0aW9uWydwb3B1bGF0ZS0tJ107XG4gICAgICAgICAgICB5YXJnc1xuICAgICAgICAgICAgICAgIC5nZXRJbnRlcm5hbE1ldGhvZHMoKVxuICAgICAgICAgICAgICAgIC5wb3N0UHJvY2Vzcyhpbm5lckFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICAgIGlubmVyQXJndiA9IGFwcGx5TWlkZGxld2FyZShpbm5lckFyZ3YsIHlhcmdzLCBtaWRkbGV3YXJlcywgZmFsc2UpO1xuICAgICAgICAgICAgaW5uZXJBcmd2ID0gbWF5YmVBc3luY1Jlc3VsdChpbm5lckFyZ3YsIHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlclJlc3VsdCA9IGNvbW1hbmRIYW5kbGVyLmhhbmRsZXIocmVzdWx0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNQcm9taXNlKGhhbmRsZXJSZXN1bHQpXG4gICAgICAgICAgICAgICAgICAgID8gaGFuZGxlclJlc3VsdC50aGVuKCgpID0+IHJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgOiByZXN1bHQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghaXNEZWZhdWx0Q29tbWFuZCkge1xuICAgICAgICAgICAgICAgIHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldFVzYWdlSW5zdGFuY2UoKS5jYWNoZUhlbHBNZXNzYWdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNQcm9taXNlKGlubmVyQXJndikgJiZcbiAgICAgICAgICAgICAgICAheWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuaGFzUGFyc2VDYWxsYmFjaygpKSB7XG4gICAgICAgICAgICAgICAgaW5uZXJBcmd2LmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldFVzYWdlSW5zdGFuY2UoKS5mYWlsKG51bGwsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoX2Vycikge1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0RlZmF1bHRDb21tYW5kKSB7XG4gICAgICAgICAgICBjdXJyZW50Q29udGV4dC5jb21tYW5kcy5wb3AoKTtcbiAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0LmZ1bGxDb21tYW5kcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5uZXJBcmd2O1xuICAgIH1cbiAgICBhcHBseU1pZGRsZXdhcmVBbmRHZXRSZXN1bHQoaXNEZWZhdWx0Q29tbWFuZCwgY29tbWFuZEhhbmRsZXIsIGlubmVyQXJndiwgY3VycmVudENvbnRleHQsIGhlbHBPbmx5LCBhbGlhc2VzLCB5YXJncykge1xuICAgICAgICBsZXQgcG9zaXRpb25hbE1hcCA9IHt9O1xuICAgICAgICBpZiAoaGVscE9ubHkpXG4gICAgICAgICAgICByZXR1cm4gaW5uZXJBcmd2O1xuICAgICAgICBpZiAoIXlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldEhhc091dHB1dCgpKSB7XG4gICAgICAgICAgICBwb3NpdGlvbmFsTWFwID0gdGhpcy5wb3B1bGF0ZVBvc2l0aW9uYWxzKGNvbW1hbmRIYW5kbGVyLCBpbm5lckFyZ3YsIGN1cnJlbnRDb250ZXh0LCB5YXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWlkZGxld2FyZXMgPSB0aGlzLmdsb2JhbE1pZGRsZXdhcmVcbiAgICAgICAgICAgIC5nZXRNaWRkbGV3YXJlKClcbiAgICAgICAgICAgIC5zbGljZSgwKVxuICAgICAgICAgICAgLmNvbmNhdChjb21tYW5kSGFuZGxlci5taWRkbGV3YXJlcyk7XG4gICAgICAgIGNvbnN0IG1heWJlUHJvbWlzZUFyZ3YgPSBhcHBseU1pZGRsZXdhcmUoaW5uZXJBcmd2LCB5YXJncywgbWlkZGxld2FyZXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gaXNQcm9taXNlKG1heWJlUHJvbWlzZUFyZ3YpXG4gICAgICAgICAgICA/IG1heWJlUHJvbWlzZUFyZ3YudGhlbihyZXNvbHZlZElubmVyQXJndiA9PiB0aGlzLmhhbmRsZVZhbGlkYXRpb25BbmRHZXRSZXN1bHQoaXNEZWZhdWx0Q29tbWFuZCwgY29tbWFuZEhhbmRsZXIsIHJlc29sdmVkSW5uZXJBcmd2LCBjdXJyZW50Q29udGV4dCwgYWxpYXNlcywgeWFyZ3MsIG1pZGRsZXdhcmVzLCBwb3NpdGlvbmFsTWFwKSlcbiAgICAgICAgICAgIDogdGhpcy5oYW5kbGVWYWxpZGF0aW9uQW5kR2V0UmVzdWx0KGlzRGVmYXVsdENvbW1hbmQsIGNvbW1hbmRIYW5kbGVyLCBtYXliZVByb21pc2VBcmd2LCBjdXJyZW50Q29udGV4dCwgYWxpYXNlcywgeWFyZ3MsIG1pZGRsZXdhcmVzLCBwb3NpdGlvbmFsTWFwKTtcbiAgICB9XG4gICAgcG9wdWxhdGVQb3NpdGlvbmFscyhjb21tYW5kSGFuZGxlciwgYXJndiwgY29udGV4dCwgeWFyZ3MpIHtcbiAgICAgICAgYXJndi5fID0gYXJndi5fLnNsaWNlKGNvbnRleHQuY29tbWFuZHMubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgZGVtYW5kZWQgPSBjb21tYW5kSGFuZGxlci5kZW1hbmRlZC5zbGljZSgwKTtcbiAgICAgICAgY29uc3Qgb3B0aW9uYWwgPSBjb21tYW5kSGFuZGxlci5vcHRpb25hbC5zbGljZSgwKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb25hbE1hcCA9IHt9O1xuICAgICAgICB0aGlzLnZhbGlkYXRpb24ucG9zaXRpb25hbENvdW50KGRlbWFuZGVkLmxlbmd0aCwgYXJndi5fLmxlbmd0aCk7XG4gICAgICAgIHdoaWxlIChkZW1hbmRlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlbWFuZCA9IGRlbWFuZGVkLnNoaWZ0KCk7XG4gICAgICAgICAgICB0aGlzLnBvcHVsYXRlUG9zaXRpb25hbChkZW1hbmQsIGFyZ3YsIHBvc2l0aW9uYWxNYXApO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChvcHRpb25hbC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heWJlID0gb3B0aW9uYWwuc2hpZnQoKTtcbiAgICAgICAgICAgIHRoaXMucG9wdWxhdGVQb3NpdGlvbmFsKG1heWJlLCBhcmd2LCBwb3NpdGlvbmFsTWFwKTtcbiAgICAgICAgfVxuICAgICAgICBhcmd2Ll8gPSBjb250ZXh0LmNvbW1hbmRzLmNvbmNhdChhcmd2Ll8ubWFwKGEgPT4gJycgKyBhKSk7XG4gICAgICAgIHRoaXMucG9zdFByb2Nlc3NQb3NpdGlvbmFscyhhcmd2LCBwb3NpdGlvbmFsTWFwLCB0aGlzLmNtZFRvUGFyc2VPcHRpb25zKGNvbW1hbmRIYW5kbGVyLm9yaWdpbmFsKSwgeWFyZ3MpO1xuICAgICAgICByZXR1cm4gcG9zaXRpb25hbE1hcDtcbiAgICB9XG4gICAgcG9wdWxhdGVQb3NpdGlvbmFsKHBvc2l0aW9uYWwsIGFyZ3YsIHBvc2l0aW9uYWxNYXApIHtcbiAgICAgICAgY29uc3QgY21kID0gcG9zaXRpb25hbC5jbWRbMF07XG4gICAgICAgIGlmIChwb3NpdGlvbmFsLnZhcmlhZGljKSB7XG4gICAgICAgICAgICBwb3NpdGlvbmFsTWFwW2NtZF0gPSBhcmd2Ll8uc3BsaWNlKDApLm1hcChTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGFyZ3YuXy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgcG9zaXRpb25hbE1hcFtjbWRdID0gW1N0cmluZyhhcmd2Ll8uc2hpZnQoKSldO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNtZFRvUGFyc2VPcHRpb25zKGNtZFN0cmluZykge1xuICAgICAgICBjb25zdCBwYXJzZU9wdGlvbnMgPSB7XG4gICAgICAgICAgICBhcnJheTogW10sXG4gICAgICAgICAgICBkZWZhdWx0OiB7fSxcbiAgICAgICAgICAgIGFsaWFzOiB7fSxcbiAgICAgICAgICAgIGRlbWFuZDoge30sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlQ29tbWFuZChjbWRTdHJpbmcpO1xuICAgICAgICBwYXJzZWQuZGVtYW5kZWQuZm9yRWFjaChkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IFtjbWQsIC4uLmFsaWFzZXNdID0gZC5jbWQ7XG4gICAgICAgICAgICBpZiAoZC52YXJpYWRpYykge1xuICAgICAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5hcnJheS5wdXNoKGNtZCk7XG4gICAgICAgICAgICAgICAgcGFyc2VPcHRpb25zLmRlZmF1bHRbY21kXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyc2VPcHRpb25zLmFsaWFzW2NtZF0gPSBhbGlhc2VzO1xuICAgICAgICAgICAgcGFyc2VPcHRpb25zLmRlbWFuZFtjbWRdID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBhcnNlZC5vcHRpb25hbC5mb3JFYWNoKG8gPT4ge1xuICAgICAgICAgICAgY29uc3QgW2NtZCwgLi4uYWxpYXNlc10gPSBvLmNtZDtcbiAgICAgICAgICAgIGlmIChvLnZhcmlhZGljKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VPcHRpb25zLmFycmF5LnB1c2goY21kKTtcbiAgICAgICAgICAgICAgICBwYXJzZU9wdGlvbnMuZGVmYXVsdFtjbWRdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJzZU9wdGlvbnMuYWxpYXNbY21kXSA9IGFsaWFzZXM7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGFyc2VPcHRpb25zO1xuICAgIH1cbiAgICBwb3N0UHJvY2Vzc1Bvc2l0aW9uYWxzKGFyZ3YsIHBvc2l0aW9uYWxNYXAsIHBhcnNlT3B0aW9ucywgeWFyZ3MpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHlhcmdzLmdldE9wdGlvbnMoKSk7XG4gICAgICAgIG9wdGlvbnMuZGVmYXVsdCA9IE9iamVjdC5hc3NpZ24ocGFyc2VPcHRpb25zLmRlZmF1bHQsIG9wdGlvbnMuZGVmYXVsdCk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHBhcnNlT3B0aW9ucy5hbGlhcykpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuYWxpYXNba2V5XSA9IChvcHRpb25zLmFsaWFzW2tleV0gfHwgW10pLmNvbmNhdChwYXJzZU9wdGlvbnMuYWxpYXNba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5hcnJheSA9IG9wdGlvbnMuYXJyYXkuY29uY2F0KHBhcnNlT3B0aW9ucy5hcnJheSk7XG4gICAgICAgIG9wdGlvbnMuY29uZmlnID0ge307XG4gICAgICAgIGNvbnN0IHVucGFyc2VkID0gW107XG4gICAgICAgIE9iamVjdC5rZXlzKHBvc2l0aW9uYWxNYXApLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHBvc2l0aW9uYWxNYXBba2V5XS5tYXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmNvbmZpZ3VyYXRpb25bJ3Vua25vd24tb3B0aW9ucy1hcy1hcmdzJ10pXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMua2V5W2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHVucGFyc2VkLnB1c2goYC0tJHtrZXl9YCk7XG4gICAgICAgICAgICAgICAgdW5wYXJzZWQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdW5wYXJzZWQubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBjb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmZpZ3VyYXRpb24sIHtcbiAgICAgICAgICAgICdwb3B1bGF0ZS0tJzogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnNoaW0uUGFyc2VyLmRldGFpbGVkKHVucGFyc2VkLCBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiBjb25maWcsXG4gICAgICAgIH0pKTtcbiAgICAgICAgaWYgKHBhcnNlZC5lcnJvcikge1xuICAgICAgICAgICAgeWFyZ3NcbiAgICAgICAgICAgICAgICAuZ2V0SW50ZXJuYWxNZXRob2RzKClcbiAgICAgICAgICAgICAgICAuZ2V0VXNhZ2VJbnN0YW5jZSgpXG4gICAgICAgICAgICAgICAgLmZhaWwocGFyc2VkLmVycm9yLm1lc3NhZ2UsIHBhcnNlZC5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbmFsS2V5cyA9IE9iamVjdC5rZXlzKHBvc2l0aW9uYWxNYXApO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMocG9zaXRpb25hbE1hcCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uYWxLZXlzLnB1c2goLi4ucGFyc2VkLmFsaWFzZXNba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHBhcnNlZC5hcmd2KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uYWxLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwb3NpdGlvbmFsTWFwW2tleV0pXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbmFsTWFwW2tleV0gPSBwYXJzZWQuYXJndltrZXldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNJbkNvbmZpZ3MoeWFyZ3MsIGtleSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmlzRGVmYXVsdGVkKHlhcmdzLCBrZXkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXJndiwga2V5KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcnNlZC5hcmd2LCBrZXkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoQXJyYXkuaXNBcnJheShhcmd2W2tleV0pIHx8IEFycmF5LmlzQXJyYXkocGFyc2VkLmFyZ3Zba2V5XSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmd2W2tleV0gPSBbXS5jb25jYXQoYXJndltrZXldLCBwYXJzZWQuYXJndltrZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Zba2V5XSA9IHBhcnNlZC5hcmd2W2tleV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpc0RlZmF1bHRlZCh5YXJncywga2V5KSB7XG4gICAgICAgIGNvbnN0IHsgZGVmYXVsdDogZGVmYXVsdHMgfSA9IHlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgcmV0dXJuIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGVmYXVsdHMsIGtleSkgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkZWZhdWx0cywgdGhpcy5zaGltLlBhcnNlci5jYW1lbENhc2Uoa2V5KSkpO1xuICAgIH1cbiAgICBpc0luQ29uZmlncyh5YXJncywga2V5KSB7XG4gICAgICAgIGNvbnN0IHsgY29uZmlnT2JqZWN0cyB9ID0geWFyZ3MuZ2V0T3B0aW9ucygpO1xuICAgICAgICByZXR1cm4gKGNvbmZpZ09iamVjdHMuc29tZShjID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLCBrZXkpKSB8fFxuICAgICAgICAgICAgY29uZmlnT2JqZWN0cy5zb21lKGMgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsIHRoaXMuc2hpbS5QYXJzZXIuY2FtZWxDYXNlKGtleSkpKSk7XG4gICAgfVxuICAgIHJ1bkRlZmF1bHRCdWlsZGVyT24oeWFyZ3MpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRlZmF1bHRDb21tYW5kKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5zaG91bGRVcGRhdGVVc2FnZSh5YXJncykpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRTdHJpbmcgPSBERUZBVUxUX01BUktFUi50ZXN0KHRoaXMuZGVmYXVsdENvbW1hbmQub3JpZ2luYWwpXG4gICAgICAgICAgICAgICAgPyB0aGlzLmRlZmF1bHRDb21tYW5kLm9yaWdpbmFsXG4gICAgICAgICAgICAgICAgOiB0aGlzLmRlZmF1bHRDb21tYW5kLm9yaWdpbmFsLnJlcGxhY2UoL15bXltcXF08Pl0qLywgJyQwICcpO1xuICAgICAgICAgICAgeWFyZ3NcbiAgICAgICAgICAgICAgICAuZ2V0SW50ZXJuYWxNZXRob2RzKClcbiAgICAgICAgICAgICAgICAuZ2V0VXNhZ2VJbnN0YW5jZSgpXG4gICAgICAgICAgICAgICAgLnVzYWdlKGNvbW1hbmRTdHJpbmcsIHRoaXMuZGVmYXVsdENvbW1hbmQuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSB0aGlzLmRlZmF1bHRDb21tYW5kLmJ1aWxkZXI7XG4gICAgICAgIGlmIChpc0NvbW1hbmRCdWlsZGVyQ2FsbGJhY2soYnVpbGRlcikpIHtcbiAgICAgICAgICAgIHJldHVybiBidWlsZGVyKHlhcmdzLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghaXNDb21tYW5kQnVpbGRlckRlZmluaXRpb24oYnVpbGRlcikpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGJ1aWxkZXIpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICB5YXJncy5vcHRpb24oa2V5LCBidWlsZGVyW2tleV0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZXh0cmFjdERlc2MoeyBkZXNjcmliZSwgZGVzY3JpcHRpb24sIGRlc2MgfSkge1xuICAgICAgICBmb3IgKGNvbnN0IHRlc3Qgb2YgW2Rlc2NyaWJlLCBkZXNjcmlwdGlvbiwgZGVzY10pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGVzdCA9PT0gJ3N0cmluZycgfHwgdGVzdCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRlc3Q7XG4gICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbCh0ZXN0LCB0cnVlLCB0aGlzLnNoaW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZnJlZXplKCkge1xuICAgICAgICB0aGlzLmZyb3plbnMucHVzaCh7XG4gICAgICAgICAgICBoYW5kbGVyczogdGhpcy5oYW5kbGVycyxcbiAgICAgICAgICAgIGFsaWFzTWFwOiB0aGlzLmFsaWFzTWFwLFxuICAgICAgICAgICAgZGVmYXVsdENvbW1hbmQ6IHRoaXMuZGVmYXVsdENvbW1hbmQsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB1bmZyZWV6ZSgpIHtcbiAgICAgICAgY29uc3QgZnJvemVuID0gdGhpcy5mcm96ZW5zLnBvcCgpO1xuICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChmcm96ZW4sIHVuZGVmaW5lZCwgdGhpcy5zaGltKTtcbiAgICAgICAgKHtcbiAgICAgICAgICAgIGhhbmRsZXJzOiB0aGlzLmhhbmRsZXJzLFxuICAgICAgICAgICAgYWxpYXNNYXA6IHRoaXMuYWxpYXNNYXAsXG4gICAgICAgICAgICBkZWZhdWx0Q29tbWFuZDogdGhpcy5kZWZhdWx0Q29tbWFuZCxcbiAgICAgICAgfSA9IGZyb3plbik7XG4gICAgfVxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLmhhbmRsZXJzID0ge307XG4gICAgICAgIHRoaXMuYWxpYXNNYXAgPSB7fTtcbiAgICAgICAgdGhpcy5kZWZhdWx0Q29tbWFuZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5yZXF1aXJlQ2FjaGUgPSBuZXcgU2V0KCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBjb21tYW5kKHVzYWdlLCB2YWxpZGF0aW9uLCBnbG9iYWxNaWRkbGV3YXJlLCBzaGltKSB7XG4gICAgcmV0dXJuIG5ldyBDb21tYW5kSW5zdGFuY2UodXNhZ2UsIHZhbGlkYXRpb24sIGdsb2JhbE1pZGRsZXdhcmUsIHNoaW0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tbWFuZEJ1aWxkZXJEZWZpbml0aW9uKGJ1aWxkZXIpIHtcbiAgICByZXR1cm4gKHR5cGVvZiBidWlsZGVyID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAhIWJ1aWxkZXIuYnVpbGRlciAmJlxuICAgICAgICB0eXBlb2YgYnVpbGRlci5oYW5kbGVyID09PSAnZnVuY3Rpb24nKTtcbn1cbmZ1bmN0aW9uIGlzQ29tbWFuZEFuZEFsaWFzZXMoY21kKSB7XG4gICAgcmV0dXJuIGNtZC5ldmVyeShjID0+IHR5cGVvZiBjID09PSAnc3RyaW5nJyk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNDb21tYW5kQnVpbGRlckNhbGxiYWNrKGJ1aWxkZXIpIHtcbiAgICByZXR1cm4gdHlwZW9mIGJ1aWxkZXIgPT09ICdmdW5jdGlvbic7XG59XG5mdW5jdGlvbiBpc0NvbW1hbmRCdWlsZGVyT3B0aW9uRGVmaW5pdGlvbnMoYnVpbGRlcikge1xuICAgIHJldHVybiB0eXBlb2YgYnVpbGRlciA9PT0gJ29iamVjdCc7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNDb21tYW5kSGFuZGxlckRlZmluaXRpb24oY21kKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBjbWQgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGNtZCk7XG59XG4iLCJ2YXIgX19jbGFzc1ByaXZhdGVGaWVsZFNldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZFNldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59O1xudmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRHZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn07XG52YXIgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgX1lhcmdzSW5zdGFuY2VfY3dkLCBfWWFyZ3NJbnN0YW5jZV9jb250ZXh0LCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uQ29tbWFuZCwgX1lhcmdzSW5zdGFuY2VfZGVmYXVsdFNob3dIaWRkZW5PcHQsIF9ZYXJnc0luc3RhbmNlX2V4aXRFcnJvciwgX1lhcmdzSW5zdGFuY2VfZGV0ZWN0TG9jYWxlLCBfWWFyZ3NJbnN0YW5jZV9lbWl0dGVkV2FybmluZ3MsIF9ZYXJnc0luc3RhbmNlX2V4aXRQcm9jZXNzLCBfWWFyZ3NJbnN0YW5jZV9mcm96ZW5zLCBfWWFyZ3NJbnN0YW5jZV9nbG9iYWxNaWRkbGV3YXJlLCBfWWFyZ3NJbnN0YW5jZV9ncm91cHMsIF9ZYXJnc0luc3RhbmNlX2hhc091dHB1dCwgX1lhcmdzSW5zdGFuY2VfaGVscE9wdCwgX1lhcmdzSW5zdGFuY2VfaXNHbG9iYWxDb250ZXh0LCBfWWFyZ3NJbnN0YW5jZV9sb2dnZXIsIF9ZYXJnc0luc3RhbmNlX291dHB1dCwgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgX1lhcmdzSW5zdGFuY2VfcGFyZW50UmVxdWlyZSwgX1lhcmdzSW5zdGFuY2VfcGFyc2VyQ29uZmlnLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZUZuLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZUNvbnRleHQsIF9ZYXJnc0luc3RhbmNlX3BrZ3MsIF9ZYXJnc0luc3RhbmNlX3ByZXNlcnZlZEdyb3VwcywgX1lhcmdzSW5zdGFuY2VfcHJvY2Vzc0FyZ3MsIF9ZYXJnc0luc3RhbmNlX3JlY29tbWVuZENvbW1hbmRzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3QsIF9ZYXJnc0luc3RhbmNlX3N0cmljdENvbW1hbmRzLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3RPcHRpb25zLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgX1lhcmdzSW5zdGFuY2VfdXNhZ2VDb25maWcsIF9ZYXJnc0luc3RhbmNlX3ZlcnNpb25PcHQsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb247XG5pbXBvcnQgeyBjb21tYW5kIGFzIENvbW1hbmQsIH0gZnJvbSAnLi9jb21tYW5kLmpzJztcbmltcG9ydCB7IGFzc2VydE5vdFN0cmljdEVxdWFsLCBhc3NlcnRTaW5nbGVLZXksIG9iamVjdEtleXMsIH0gZnJvbSAnLi90eXBpbmdzL2NvbW1vbi10eXBlcy5qcyc7XG5pbXBvcnQgeyBZRXJyb3IgfSBmcm9tICcuL3llcnJvci5qcyc7XG5pbXBvcnQgeyB1c2FnZSBhcyBVc2FnZSB9IGZyb20gJy4vdXNhZ2UuanMnO1xuaW1wb3J0IHsgYXJnc2VydCB9IGZyb20gJy4vYXJnc2VydC5qcyc7XG5pbXBvcnQgeyBjb21wbGV0aW9uIGFzIENvbXBsZXRpb24sIH0gZnJvbSAnLi9jb21wbGV0aW9uLmpzJztcbmltcG9ydCB7IHZhbGlkYXRpb24gYXMgVmFsaWRhdGlvbiwgfSBmcm9tICcuL3ZhbGlkYXRpb24uanMnO1xuaW1wb3J0IHsgb2JqRmlsdGVyIH0gZnJvbSAnLi91dGlscy9vYmotZmlsdGVyLmpzJztcbmltcG9ydCB7IGFwcGx5RXh0ZW5kcyB9IGZyb20gJy4vdXRpbHMvYXBwbHktZXh0ZW5kcy5qcyc7XG5pbXBvcnQgeyBhcHBseU1pZGRsZXdhcmUsIEdsb2JhbE1pZGRsZXdhcmUsIH0gZnJvbSAnLi9taWRkbGV3YXJlLmpzJztcbmltcG9ydCB7IGlzUHJvbWlzZSB9IGZyb20gJy4vdXRpbHMvaXMtcHJvbWlzZS5qcyc7XG5pbXBvcnQgeyBtYXliZUFzeW5jUmVzdWx0IH0gZnJvbSAnLi91dGlscy9tYXliZS1hc3luYy1yZXN1bHQuanMnO1xuaW1wb3J0IHNldEJsb2NraW5nIGZyb20gJy4vdXRpbHMvc2V0LWJsb2NraW5nLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBZYXJnc0ZhY3RvcnkoX3NoaW0pIHtcbiAgICByZXR1cm4gKHByb2Nlc3NBcmdzID0gW10sIGN3ZCA9IF9zaGltLnByb2Nlc3MuY3dkKCksIHBhcmVudFJlcXVpcmUpID0+IHtcbiAgICAgICAgY29uc3QgeWFyZ3MgPSBuZXcgWWFyZ3NJbnN0YW5jZShwcm9jZXNzQXJncywgY3dkLCBwYXJlbnRSZXF1aXJlLCBfc2hpbSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5YXJncywgJ2FyZ3YnLCB7XG4gICAgICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geWFyZ3MucGFyc2UoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgeWFyZ3MuaGVscCgpO1xuICAgICAgICB5YXJncy52ZXJzaW9uKCk7XG4gICAgICAgIHJldHVybiB5YXJncztcbiAgICB9O1xufVxuY29uc3Qga0NvcHlEb3VibGVEYXNoID0gU3ltYm9sKCdjb3B5RG91YmxlRGFzaCcpO1xuY29uc3Qga0NyZWF0ZUxvZ2dlciA9IFN5bWJvbCgnY29weURvdWJsZURhc2gnKTtcbmNvbnN0IGtEZWxldGVGcm9tUGFyc2VySGludE9iamVjdCA9IFN5bWJvbCgnZGVsZXRlRnJvbVBhcnNlckhpbnRPYmplY3QnKTtcbmNvbnN0IGtFbWl0V2FybmluZyA9IFN5bWJvbCgnZW1pdFdhcm5pbmcnKTtcbmNvbnN0IGtGcmVlemUgPSBTeW1ib2woJ2ZyZWV6ZScpO1xuY29uc3Qga0dldERvbGxhclplcm8gPSBTeW1ib2woJ2dldERvbGxhclplcm8nKTtcbmNvbnN0IGtHZXRQYXJzZXJDb25maWd1cmF0aW9uID0gU3ltYm9sKCdnZXRQYXJzZXJDb25maWd1cmF0aW9uJyk7XG5jb25zdCBrR2V0VXNhZ2VDb25maWd1cmF0aW9uID0gU3ltYm9sKCdnZXRVc2FnZUNvbmZpZ3VyYXRpb24nKTtcbmNvbnN0IGtHdWVzc0xvY2FsZSA9IFN5bWJvbCgnZ3Vlc3NMb2NhbGUnKTtcbmNvbnN0IGtHdWVzc1ZlcnNpb24gPSBTeW1ib2woJ2d1ZXNzVmVyc2lvbicpO1xuY29uc3Qga1BhcnNlUG9zaXRpb25hbE51bWJlcnMgPSBTeW1ib2woJ3BhcnNlUG9zaXRpb25hbE51bWJlcnMnKTtcbmNvbnN0IGtQa2dVcCA9IFN5bWJvbCgncGtnVXAnKTtcbmNvbnN0IGtQb3B1bGF0ZVBhcnNlckhpbnRBcnJheSA9IFN5bWJvbCgncG9wdWxhdGVQYXJzZXJIaW50QXJyYXknKTtcbmNvbnN0IGtQb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnkgPSBTeW1ib2woJ3BvcHVsYXRlUGFyc2VySGludFNpbmdsZVZhbHVlRGljdGlvbmFyeScpO1xuY29uc3Qga1BvcHVsYXRlUGFyc2VySGludEFycmF5RGljdGlvbmFyeSA9IFN5bWJvbCgncG9wdWxhdGVQYXJzZXJIaW50QXJyYXlEaWN0aW9uYXJ5Jyk7XG5jb25zdCBrUG9wdWxhdGVQYXJzZXJIaW50RGljdGlvbmFyeSA9IFN5bWJvbCgncG9wdWxhdGVQYXJzZXJIaW50RGljdGlvbmFyeScpO1xuY29uc3Qga1Nhbml0aXplS2V5ID0gU3ltYm9sKCdzYW5pdGl6ZUtleScpO1xuY29uc3Qga1NldEtleSA9IFN5bWJvbCgnc2V0S2V5Jyk7XG5jb25zdCBrVW5mcmVlemUgPSBTeW1ib2woJ3VuZnJlZXplJyk7XG5jb25zdCBrVmFsaWRhdGVBc3luYyA9IFN5bWJvbCgndmFsaWRhdGVBc3luYycpO1xuY29uc3Qga0dldENvbW1hbmRJbnN0YW5jZSA9IFN5bWJvbCgnZ2V0Q29tbWFuZEluc3RhbmNlJyk7XG5jb25zdCBrR2V0Q29udGV4dCA9IFN5bWJvbCgnZ2V0Q29udGV4dCcpO1xuY29uc3Qga0dldEhhc091dHB1dCA9IFN5bWJvbCgnZ2V0SGFzT3V0cHV0Jyk7XG5jb25zdCBrR2V0TG9nZ2VySW5zdGFuY2UgPSBTeW1ib2woJ2dldExvZ2dlckluc3RhbmNlJyk7XG5jb25zdCBrR2V0UGFyc2VDb250ZXh0ID0gU3ltYm9sKCdnZXRQYXJzZUNvbnRleHQnKTtcbmNvbnN0IGtHZXRVc2FnZUluc3RhbmNlID0gU3ltYm9sKCdnZXRVc2FnZUluc3RhbmNlJyk7XG5jb25zdCBrR2V0VmFsaWRhdGlvbkluc3RhbmNlID0gU3ltYm9sKCdnZXRWYWxpZGF0aW9uSW5zdGFuY2UnKTtcbmNvbnN0IGtIYXNQYXJzZUNhbGxiYWNrID0gU3ltYm9sKCdoYXNQYXJzZUNhbGxiYWNrJyk7XG5jb25zdCBrSXNHbG9iYWxDb250ZXh0ID0gU3ltYm9sKCdpc0dsb2JhbENvbnRleHQnKTtcbmNvbnN0IGtQb3N0UHJvY2VzcyA9IFN5bWJvbCgncG9zdFByb2Nlc3MnKTtcbmNvbnN0IGtSZWJhc2UgPSBTeW1ib2woJ3JlYmFzZScpO1xuY29uc3Qga1Jlc2V0ID0gU3ltYm9sKCdyZXNldCcpO1xuY29uc3Qga1J1bllhcmdzUGFyc2VyQW5kRXhlY3V0ZUNvbW1hbmRzID0gU3ltYm9sKCdydW5ZYXJnc1BhcnNlckFuZEV4ZWN1dGVDb21tYW5kcycpO1xuY29uc3Qga1J1blZhbGlkYXRpb24gPSBTeW1ib2woJ3J1blZhbGlkYXRpb24nKTtcbmNvbnN0IGtTZXRIYXNPdXRwdXQgPSBTeW1ib2woJ3NldEhhc091dHB1dCcpO1xuY29uc3Qga1RyYWNrTWFudWFsbHlTZXRLZXlzID0gU3ltYm9sKCdrVHJhY2tNYW51YWxseVNldEtleXMnKTtcbmNvbnN0IERFRkFVTFRfTE9DQUxFID0gJ2VuX1VTJztcbmV4cG9ydCBjbGFzcyBZYXJnc0luc3RhbmNlIHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9jZXNzQXJncyA9IFtdLCBjd2QsIHBhcmVudFJlcXVpcmUsIHNoaW0pIHtcbiAgICAgICAgdGhpcy5jdXN0b21TY3JpcHROYW1lID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGFyc2VkID0gZmFsc2U7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX2N3ZC5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfY29udGV4dC5zZXQodGhpcywgeyBjb21tYW5kczogW10sIGZ1bGxDb21tYW5kczogW10gfSk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb24uc2V0KHRoaXMsIG51bGwpO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uQ29tbWFuZC5zZXQodGhpcywgbnVsbCk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX2RlZmF1bHRTaG93SGlkZGVuT3B0LnNldCh0aGlzLCAnc2hvdy1oaWRkZW4nKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfZXhpdEVycm9yLnNldCh0aGlzLCBudWxsKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfZGV0ZWN0TG9jYWxlLnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfZW1pdHRlZFdhcm5pbmdzLnNldCh0aGlzLCB7fSk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX2V4aXRQcm9jZXNzLnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfZnJvemVucy5zZXQodGhpcywgW10pO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9nbG9iYWxNaWRkbGV3YXJlLnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9ncm91cHMuc2V0KHRoaXMsIHt9KTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfaGFzT3V0cHV0LnNldCh0aGlzLCBmYWxzZSk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX2hlbHBPcHQuc2V0KHRoaXMsIG51bGwpO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9pc0dsb2JhbENvbnRleHQuc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9sb2dnZXIuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX291dHB1dC5zZXQodGhpcywgJycpO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9wYXJlbnRSZXF1aXJlLnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9wYXJzZXJDb25maWcuc2V0KHRoaXMsIHt9KTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfcGFyc2VGbi5zZXQodGhpcywgbnVsbCk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX3BhcnNlQ29udGV4dC5zZXQodGhpcywgbnVsbCk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX3BrZ3Muc2V0KHRoaXMsIHt9KTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfcHJlc2VydmVkR3JvdXBzLnNldCh0aGlzLCB7fSk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX3Byb2Nlc3NBcmdzLnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9yZWNvbW1lbmRDb21tYW5kcy5zZXQodGhpcywgZmFsc2UpO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9zaGltLnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9zdHJpY3Quc2V0KHRoaXMsIGZhbHNlKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0Q29tbWFuZHMuc2V0KHRoaXMsIGZhbHNlKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0T3B0aW9ucy5zZXQodGhpcywgZmFsc2UpO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV91c2FnZS5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfdXNhZ2VDb25maWcuc2V0KHRoaXMsIHt9KTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfdmVyc2lvbk9wdC5zZXQodGhpcywgbnVsbCk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24uc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgc2hpbSwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3Byb2Nlc3NBcmdzLCBwcm9jZXNzQXJncywgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2N3ZCwgY3dkLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGFyZW50UmVxdWlyZSwgcGFyZW50UmVxdWlyZSwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2dsb2JhbE1pZGRsZXdhcmUsIG5ldyBHbG9iYWxNaWRkbGV3YXJlKHRoaXMpLCBcImZcIik7XG4gICAgICAgIHRoaXMuJDAgPSB0aGlzW2tHZXREb2xsYXJaZXJvXSgpO1xuICAgICAgICB0aGlzW2tSZXNldF0oKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQsIFwiZlwiKSwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIiksIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIFwiZlwiKSwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLnNob3dIaWRkZW5PcHQgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2RlZmF1bHRTaG93SGlkZGVuT3B0LCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfbG9nZ2VyLCB0aGlzW2tDcmVhdGVMb2dnZXJdKCksIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikueTE4bi5zZXRMb2NhbGUoREVGQVVMVF9MT0NBTEUpO1xuICAgIH1cbiAgICBhZGRIZWxwT3B0KG9wdCwgbXNnKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRIZWxwT3B0ID0gJ2hlbHAnO1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nfGJvb2xlYW5dIFtzdHJpbmddJywgW29wdCwgbXNnXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hlbHBPcHQsIFwiZlwiKSkge1xuICAgICAgICAgICAgdGhpc1trRGVsZXRlRnJvbVBhcnNlckhpbnRPYmplY3RdKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaGVscE9wdCwgXCJmXCIpKTtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaGVscE9wdCwgbnVsbCwgXCJmXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHQgPT09IGZhbHNlICYmIG1zZyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaGVscE9wdCwgdHlwZW9mIG9wdCA9PT0gJ3N0cmluZycgPyBvcHQgOiBkZWZhdWx0SGVscE9wdCwgXCJmXCIpO1xuICAgICAgICB0aGlzLmJvb2xlYW4oX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9oZWxwT3B0LCBcImZcIikpO1xuICAgICAgICB0aGlzLmRlc2NyaWJlKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaGVscE9wdCwgXCJmXCIpLCBtc2cgfHwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmRlZmVyWTE4bkxvb2t1cCgnU2hvdyBoZWxwJykpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaGVscChvcHQsIG1zZykge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRIZWxwT3B0KG9wdCwgbXNnKTtcbiAgICB9XG4gICAgYWRkU2hvd0hpZGRlbk9wdChvcHQsIG1zZykge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nfGJvb2xlYW5dIFtzdHJpbmddJywgW29wdCwgbXNnXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChvcHQgPT09IGZhbHNlICYmIG1zZyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIGNvbnN0IHNob3dIaWRkZW5PcHQgPSB0eXBlb2Ygb3B0ID09PSAnc3RyaW5nJyA/IG9wdCA6IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZGVmYXVsdFNob3dIaWRkZW5PcHQsIFwiZlwiKTtcbiAgICAgICAgdGhpcy5ib29sZWFuKHNob3dIaWRkZW5PcHQpO1xuICAgICAgICB0aGlzLmRlc2NyaWJlKHNob3dIaWRkZW5PcHQsIG1zZyB8fCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuZGVmZXJZMThuTG9va3VwKCdTaG93IGhpZGRlbiBvcHRpb25zJykpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5zaG93SGlkZGVuT3B0ID0gc2hvd0hpZGRlbk9wdDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHNob3dIaWRkZW4ob3B0LCBtc2cpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkU2hvd0hpZGRlbk9wdChvcHQsIG1zZyk7XG4gICAgfVxuICAgIGFsaWFzKGtleSwgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtzdHJpbmd8YXJyYXldJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdGhpc1trUG9wdWxhdGVQYXJzZXJIaW50QXJyYXlEaWN0aW9uYXJ5XSh0aGlzLmFsaWFzLmJpbmQodGhpcyksICdhbGlhcycsIGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgYXJyYXkoa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nPicsIFtrZXlzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHRoaXNba1BvcHVsYXRlUGFyc2VySGludEFycmF5XSgnYXJyYXknLCBrZXlzKTtcbiAgICAgICAgdGhpc1trVHJhY2tNYW51YWxseVNldEtleXNdKGtleXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgYm9vbGVhbihrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdGhpc1trUG9wdWxhdGVQYXJzZXJIaW50QXJyYXldKCdib29sZWFuJywga2V5cyk7XG4gICAgICAgIHRoaXNba1RyYWNrTWFudWFsbHlTZXRLZXlzXShrZXlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGNoZWNrKGYsIGdsb2JhbCkge1xuICAgICAgICBhcmdzZXJ0KCc8ZnVuY3Rpb24+IFtib29sZWFuXScsIFtmLCBnbG9iYWxdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlKChhcmd2LCBfeWFyZ3MpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBtYXliZUFzeW5jUmVzdWx0KCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZihhcmd2LCBfeWFyZ3MuZ2V0T3B0aW9ucygpKTtcbiAgICAgICAgICAgIH0sIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuZmFpbChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS55MThuLl9fKCdBcmd1bWVudCBjaGVjayBmYWlsZWQ6ICVzJywgZi50b1N0cmluZygpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnIHx8IHJlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5mYWlsKHJlc3VsdC50b1N0cmluZygpLCByZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuZmFpbChlcnIubWVzc2FnZSA/IGVyci5tZXNzYWdlIDogZXJyLnRvU3RyaW5nKCksIGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZmFsc2UsIGdsb2JhbCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBjaG9pY2VzKGtleSwgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtzdHJpbmd8YXJyYXldJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdGhpc1trUG9wdWxhdGVQYXJzZXJIaW50QXJyYXlEaWN0aW9uYXJ5XSh0aGlzLmNob2ljZXMuYmluZCh0aGlzKSwgJ2Nob2ljZXMnLCBrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGNvZXJjZShrZXlzLCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8b2JqZWN0fHN0cmluZ3xhcnJheT4gW2Z1bmN0aW9uXScsIFtrZXlzLCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShrZXlzKSkge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IoJ2NvZXJjZSBjYWxsYmFjayBtdXN0IGJlIHByb3ZpZGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb2VyY2Uoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Yga2V5cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGtleXMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb2VyY2Uoa2V5LCBrZXlzW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcignY29lcmNlIGNhbGxiYWNrIG11c3QgYmUgcHJvdmlkZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2VyY2VLZXkgPSBrZXlzO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5rZXlbY29lcmNlS2V5XSA9IHRydWU7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZ2xvYmFsTWlkZGxld2FyZSwgXCJmXCIpLmFkZENvZXJjZU1pZGRsZXdhcmUoKGFyZ3YsIHlhcmdzKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCBjb2VyY2VLZXlBbGlhc2VzID0gKF9hID0geWFyZ3MuZ2V0QWxpYXNlcygpW2NvZXJjZUtleV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdO1xuICAgICAgICAgICAgY29uc3QgYXJndktleXMgPSBbY29lcmNlS2V5LCAuLi5jb2VyY2VLZXlBbGlhc2VzXS5maWx0ZXIoa2V5ID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd2LCBrZXkpKTtcbiAgICAgICAgICAgIGlmIChhcmd2S2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtYXliZUFzeW5jUmVzdWx0KCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUoYXJndlthcmd2S2V5c1swXV0pO1xuICAgICAgICAgICAgfSwgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGFyZ3ZLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXJndltrZXldID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBhcmd2O1xuICAgICAgICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IoZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNvZXJjZUtleSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBjb25mbGljdHMoa2V5MSwga2V5Mikge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG9iamVjdD4gW3N0cmluZ3xhcnJheV0nLCBba2V5MSwga2V5Ml0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIFwiZlwiKS5jb25mbGljdHMoa2V5MSwga2V5Mik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBjb25maWcoa2V5ID0gJ2NvbmZpZycsIG1zZywgcGFyc2VGbikge1xuICAgICAgICBhcmdzZXJ0KCdbb2JqZWN0fHN0cmluZ10gW3N0cmluZ3xmdW5jdGlvbl0gW2Z1bmN0aW9uXScsIFtrZXksIG1zZywgcGFyc2VGbl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoa2V5KSkge1xuICAgICAgICAgICAga2V5ID0gYXBwbHlFeHRlbmRzKGtleSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jd2QsIFwiZlwiKSwgdGhpc1trR2V0UGFyc2VyQ29uZmlndXJhdGlvbl0oKVsnZGVlcC1tZXJnZS1jb25maWcnXSB8fCBmYWxzZSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikpO1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuY29uZmlnT2JqZWN0cyA9IChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5jb25maWdPYmplY3RzIHx8IFtdKS5jb25jYXQoa2V5KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbXNnID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBwYXJzZUZuID0gbXNnO1xuICAgICAgICAgICAgbXNnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVzY3JpYmUoa2V5LCBtc2cgfHwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmRlZmVyWTE4bkxvb2t1cCgnUGF0aCB0byBKU09OIGNvbmZpZyBmaWxlJykpO1xuICAgICAgICAoQXJyYXkuaXNBcnJheShrZXkpID8ga2V5IDogW2tleV0pLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5jb25maWdba10gPSBwYXJzZUZuIHx8IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgY29tcGxldGlvbihjbWQsIGRlc2MsIGZuKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tzdHJpbmddIFtzdHJpbmd8Ym9vbGVhbnxmdW5jdGlvbl0gW2Z1bmN0aW9uXScsIFtjbWQsIGRlc2MsIGZuXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmICh0eXBlb2YgZGVzYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgZm4gPSBkZXNjO1xuICAgICAgICAgICAgZGVzYyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb25Db21tYW5kLCBjbWQgfHwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uQ29tbWFuZCwgXCJmXCIpIHx8ICdjb21wbGV0aW9uJywgXCJmXCIpO1xuICAgICAgICBpZiAoIWRlc2MgJiYgZGVzYyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGRlc2MgPSAnZ2VuZXJhdGUgY29tcGxldGlvbiBzY3JpcHQnO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29tbWFuZChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb25Db21tYW5kLCBcImZcIiksIGRlc2MpO1xuICAgICAgICBpZiAoZm4pXG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb24sIFwiZlwiKS5yZWdpc3RlckZ1bmN0aW9uKGZuKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGNvbW1hbmQoY21kLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlciwgbWlkZGxld2FyZXMsIGRlcHJlY2F0ZWQpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xhcnJheXxvYmplY3Q+IFtzdHJpbmd8Ym9vbGVhbl0gW2Z1bmN0aW9ufG9iamVjdF0gW2Z1bmN0aW9uXSBbYXJyYXldIFtib29sZWFufHN0cmluZ10nLCBbY21kLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlciwgbWlkZGxld2FyZXMsIGRlcHJlY2F0ZWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLCBcImZcIikuYWRkSGFuZGxlcihjbWQsIGRlc2NyaXB0aW9uLCBidWlsZGVyLCBoYW5kbGVyLCBtaWRkbGV3YXJlcywgZGVwcmVjYXRlZCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBjb21tYW5kcyhjbWQsIGRlc2NyaXB0aW9uLCBidWlsZGVyLCBoYW5kbGVyLCBtaWRkbGV3YXJlcywgZGVwcmVjYXRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21tYW5kKGNtZCwgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIsIG1pZGRsZXdhcmVzLCBkZXByZWNhdGVkKTtcbiAgICB9XG4gICAgY29tbWFuZERpcihkaXIsIG9wdHMpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4gW29iamVjdF0nLCBbZGlyLCBvcHRzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHJlcSA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGFyZW50UmVxdWlyZSwgXCJmXCIpIHx8IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnJlcXVpcmU7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgXCJmXCIpLmFkZERpcmVjdG9yeShkaXIsIHJlcSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikuZ2V0Q2FsbGVyRmlsZSgpLCBvcHRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGNvdW50KGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB0aGlzW2tQb3B1bGF0ZVBhcnNlckhpbnRBcnJheV0oJ2NvdW50Jywga2V5cyk7XG4gICAgICAgIHRoaXNba1RyYWNrTWFudWFsbHlTZXRLZXlzXShrZXlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRlZmF1bHQoa2V5LCB2YWx1ZSwgZGVmYXVsdERlc2NyaXB0aW9uKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3R8c3RyaW5nfGFycmF5PiBbKl0gW3N0cmluZ10nLCBba2V5LCB2YWx1ZSwgZGVmYXVsdERlc2NyaXB0aW9uXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChkZWZhdWx0RGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIGFzc2VydFNpbmdsZUtleShrZXksIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpKTtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmRlZmF1bHREZXNjcmlwdGlvbltrZXldID0gZGVmYXVsdERlc2NyaXB0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzc2VydFNpbmdsZUtleShrZXksIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpKTtcbiAgICAgICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuZGVmYXVsdERlc2NyaXB0aW9uW2tleV0pXG4gICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuZGVmYXVsdERlc2NyaXB0aW9uW2tleV0gPVxuICAgICAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuZnVuY3Rpb25EZXNjcmlwdGlvbih2YWx1ZSk7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmNhbGwoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzW2tQb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnldKHRoaXMuZGVmYXVsdC5iaW5kKHRoaXMpLCAnZGVmYXVsdCcsIGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZGVmYXVsdHMoa2V5LCB2YWx1ZSwgZGVmYXVsdERlc2NyaXB0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHQoa2V5LCB2YWx1ZSwgZGVmYXVsdERlc2NyaXB0aW9uKTtcbiAgICB9XG4gICAgZGVtYW5kQ29tbWFuZChtaW4gPSAxLCBtYXgsIG1pbk1zZywgbWF4TXNnKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tudW1iZXJdIFtudW1iZXJ8c3RyaW5nXSBbc3RyaW5nfG51bGx8dW5kZWZpbmVkXSBbc3RyaW5nfG51bGx8dW5kZWZpbmVkXScsIFttaW4sIG1heCwgbWluTXNnLCBtYXhNc2ddLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBtYXggIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBtaW5Nc2cgPSBtYXg7XG4gICAgICAgICAgICBtYXggPSBJbmZpbml0eTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdsb2JhbCgnXycsIGZhbHNlKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuZGVtYW5kZWRDb21tYW5kcy5fID0ge1xuICAgICAgICAgICAgbWluLFxuICAgICAgICAgICAgbWF4LFxuICAgICAgICAgICAgbWluTXNnLFxuICAgICAgICAgICAgbWF4TXNnLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZGVtYW5kKGtleXMsIG1heCwgbXNnKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1heCkpIHtcbiAgICAgICAgICAgIG1heC5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwobXNnLCB0cnVlLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZW1hbmRPcHRpb24oa2V5LCBtc2cpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBtYXggPSBJbmZpbml0eTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgbWF4ICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgbXNnID0gbWF4O1xuICAgICAgICAgICAgbWF4ID0gSW5maW5pdHk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBrZXlzID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwobXNnLCB0cnVlLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKSk7XG4gICAgICAgICAgICB0aGlzLmRlbWFuZENvbW1hbmQoa2V5cywgbWF4LCBtc2csIG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShrZXlzKSkge1xuICAgICAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwobXNnLCB0cnVlLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZW1hbmRPcHRpb24oa2V5LCBtc2cpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1zZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbWFuZE9wdGlvbihrZXlzLCBtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobXNnID09PSB0cnVlIHx8IHR5cGVvZiBtc2cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZW1hbmRPcHRpb24oa2V5cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRlbWFuZE9wdGlvbihrZXlzLCBtc2cpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtzdHJpbmddJywgW2tleXMsIG1zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB0aGlzW2tQb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnldKHRoaXMuZGVtYW5kT3B0aW9uLmJpbmQodGhpcyksICdkZW1hbmRlZE9wdGlvbnMnLCBrZXlzLCBtc2cpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZGVwcmVjYXRlT3B0aW9uKG9wdGlvbiwgbWVzc2FnZSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nPiBbc3RyaW5nfGJvb2xlYW5dJywgW29wdGlvbiwgbWVzc2FnZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5kZXByZWNhdGVkT3B0aW9uc1tvcHRpb25dID0gbWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRlc2NyaWJlKGtleXMsIGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3R8c3RyaW5nfGFycmF5PiBbc3RyaW5nXScsIFtrZXlzLCBkZXNjcmlwdGlvbl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB0aGlzW2tTZXRLZXldKGtleXMsIHRydWUpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuZGVzY3JpYmUoa2V5cywgZGVzY3JpcHRpb24pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZGV0ZWN0TG9jYWxlKGRldGVjdCkge1xuICAgICAgICBhcmdzZXJ0KCc8Ym9vbGVhbj4nLCBbZGV0ZWN0XSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZGV0ZWN0TG9jYWxlLCBkZXRlY3QsIFwiZlwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGVudihwcmVmaXgpIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xib29sZWFuXScsIFtwcmVmaXhdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHByZWZpeCA9PT0gZmFsc2UpXG4gICAgICAgICAgICBkZWxldGUgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuZW52UHJlZml4O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5lbnZQcmVmaXggPSBwcmVmaXggfHwgJyc7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBlcGlsb2d1ZShtc2cpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4nLCBbbXNnXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5lcGlsb2cobXNnKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGVwaWxvZyhtc2cpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXBpbG9ndWUobXNnKTtcbiAgICB9XG4gICAgZXhhbXBsZShjbWQsIGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8YXJyYXk+IFtzdHJpbmddJywgW2NtZCwgZGVzY3JpcHRpb25dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY21kKSkge1xuICAgICAgICAgICAgY21kLmZvckVhY2goZXhhbXBsZVBhcmFtcyA9PiB0aGlzLmV4YW1wbGUoLi4uZXhhbXBsZVBhcmFtcykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmV4YW1wbGUoY21kLCBkZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGV4aXQoY29kZSwgZXJyKSB7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaGFzT3V0cHV0LCB0cnVlLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZXhpdEVycm9yLCBlcnIsIFwiZlwiKTtcbiAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZXhpdFByb2Nlc3MsIFwiZlwiKSlcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnByb2Nlc3MuZXhpdChjb2RlKTtcbiAgICB9XG4gICAgZXhpdFByb2Nlc3MoZW5hYmxlZCA9IHRydWUpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW2VuYWJsZWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9leGl0UHJvY2VzcywgZW5hYmxlZCwgXCJmXCIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZmFpbChmKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxmdW5jdGlvbnxib29sZWFuPicsIFtmXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmICh0eXBlb2YgZiA9PT0gJ2Jvb2xlYW4nICYmIGYgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgWUVycm9yKFwiSW52YWxpZCBmaXJzdCBhcmd1bWVudC4gRXhwZWN0ZWQgZnVuY3Rpb24gb3IgYm9vbGVhbiAnZmFsc2UnXCIpO1xuICAgICAgICB9XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5mYWlsRm4oZik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXRBbGlhc2VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZWQgPyB0aGlzLnBhcnNlZC5hbGlhc2VzIDoge307XG4gICAgfVxuICAgIGFzeW5jIGdldENvbXBsZXRpb24oYXJncywgZG9uZSkge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXk+IFtmdW5jdGlvbl0nLCBbYXJncywgZG9uZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoIWRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uLCBcImZcIikuZ2V0Q29tcGxldGlvbihhcmdzLCAoZXJyLCBjb21wbGV0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY29tcGxldGlvbnMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uLCBcImZcIikuZ2V0Q29tcGxldGlvbihhcmdzLCBkb25lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXREZW1hbmRlZE9wdGlvbnMoKSB7XG4gICAgICAgIGFyZ3NlcnQoW10sIDApO1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuZGVtYW5kZWRPcHRpb25zO1xuICAgIH1cbiAgICBnZXREZW1hbmRlZENvbW1hbmRzKCkge1xuICAgICAgICBhcmdzZXJ0KFtdLCAwKTtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmRlbWFuZGVkQ29tbWFuZHM7XG4gICAgfVxuICAgIGdldERlcHJlY2F0ZWRPcHRpb25zKCkge1xuICAgICAgICBhcmdzZXJ0KFtdLCAwKTtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmRlcHJlY2F0ZWRPcHRpb25zO1xuICAgIH1cbiAgICBnZXREZXRlY3RMb2NhbGUoKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2RldGVjdExvY2FsZSwgXCJmXCIpO1xuICAgIH1cbiAgICBnZXRFeGl0UHJvY2VzcygpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZXhpdFByb2Nlc3MsIFwiZlwiKTtcbiAgICB9XG4gICAgZ2V0R3JvdXBzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9ncm91cHMsIFwiZlwiKSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wcmVzZXJ2ZWRHcm91cHMsIFwiZlwiKSk7XG4gICAgfVxuICAgIGdldEhlbHAoKSB7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaGFzT3V0cHV0LCB0cnVlLCBcImZcIik7XG4gICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmhhc0NhY2hlZEhlbHBNZXNzYWdlKCkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5wYXJzZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZSA9IHRoaXNba1J1bllhcmdzUGFyc2VyQW5kRXhlY3V0ZUNvbW1hbmRzXShfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3Byb2Nlc3NBcmdzLCBcImZcIiksIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAwLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNQcm9taXNlKHBhcnNlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmhlbHAoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYnVpbGRlclJlc3BvbnNlID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLCBcImZcIikucnVuRGVmYXVsdEJ1aWxkZXJPbih0aGlzKTtcbiAgICAgICAgICAgIGlmIChpc1Byb21pc2UoYnVpbGRlclJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBidWlsZGVyUmVzcG9uc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuaGVscCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmhlbHAoKSk7XG4gICAgfVxuICAgIGdldE9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKTtcbiAgICB9XG4gICAgZ2V0U3RyaWN0KCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3QsIFwiZlwiKTtcbiAgICB9XG4gICAgZ2V0U3RyaWN0Q29tbWFuZHMoKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3N0cmljdENvbW1hbmRzLCBcImZcIik7XG4gICAgfVxuICAgIGdldFN0cmljdE9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3N0cmljdE9wdGlvbnMsIFwiZlwiKTtcbiAgICB9XG4gICAgZ2xvYmFsKGdsb2JhbHMsIGdsb2JhbCkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfGFycmF5PiBbYm9vbGVhbl0nLCBbZ2xvYmFscywgZ2xvYmFsXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGdsb2JhbHMgPSBbXS5jb25jYXQoZ2xvYmFscyk7XG4gICAgICAgIGlmIChnbG9iYWwgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5sb2NhbCA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmxvY2FsLmZpbHRlcihsID0+IGdsb2JhbHMuaW5kZXhPZihsKSA9PT0gLTEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2xvYmFscy5mb3JFYWNoKGcgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikubG9jYWwuaW5jbHVkZXMoZykpXG4gICAgICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmxvY2FsLnB1c2goZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ3JvdXAob3B0cywgZ3JvdXBOYW1lKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8YXJyYXk+IDxzdHJpbmc+JywgW29wdHMsIGdyb3VwTmFtZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcHJlc2VydmVkR3JvdXBzLCBcImZcIilbZ3JvdXBOYW1lXSB8fCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2dyb3VwcywgXCJmXCIpW2dyb3VwTmFtZV07XG4gICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ByZXNlcnZlZEdyb3VwcywgXCJmXCIpW2dyb3VwTmFtZV0pIHtcbiAgICAgICAgICAgIGRlbGV0ZSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ByZXNlcnZlZEdyb3VwcywgXCJmXCIpW2dyb3VwTmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VlbiA9IHt9O1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2dyb3VwcywgXCJmXCIpW2dyb3VwTmFtZV0gPSAoZXhpc3RpbmcgfHwgW10pLmNvbmNhdChvcHRzKS5maWx0ZXIoa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChzZWVuW2tleV0pXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIChzZWVuW2tleV0gPSB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBoaWRlKGtleSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nPicsIFtrZXldLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuaGlkZGVuT3B0aW9ucy5wdXNoKGtleSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBpbXBsaWVzKGtleSwgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xvYmplY3Q+IFtudW1iZXJ8c3RyaW5nfGFycmF5XScsIFtrZXksIHZhbHVlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiwgXCJmXCIpLmltcGxpZXMoa2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBsb2NhbGUobG9jYWxlKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tzdHJpbmddJywgW2xvY2FsZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAobG9jYWxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXNba0d1ZXNzTG9jYWxlXSgpO1xuICAgICAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnkxOG4uZ2V0TG9jYWxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9kZXRlY3RMb2NhbGUsIGZhbHNlLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnkxOG4uc2V0TG9jYWxlKGxvY2FsZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBtaWRkbGV3YXJlKGNhbGxiYWNrLCBhcHBseUJlZm9yZVZhbGlkYXRpb24sIGdsb2JhbCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9nbG9iYWxNaWRkbGV3YXJlLCBcImZcIikuYWRkTWlkZGxld2FyZShjYWxsYmFjaywgISFhcHBseUJlZm9yZVZhbGlkYXRpb24sIGdsb2JhbCk7XG4gICAgfVxuICAgIG5hcmdzKGtleSwgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xvYmplY3R8YXJyYXk+IFtudW1iZXJdJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdGhpc1trUG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5XSh0aGlzLm5hcmdzLmJpbmQodGhpcyksICduYXJnJywga2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBub3JtYWxpemUoa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nPicsIFtrZXlzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHRoaXNba1BvcHVsYXRlUGFyc2VySGludEFycmF5XSgnbm9ybWFsaXplJywga2V5cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBudW1iZXIoa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nPicsIFtrZXlzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHRoaXNba1BvcHVsYXRlUGFyc2VySGludEFycmF5XSgnbnVtYmVyJywga2V5cyk7XG4gICAgICAgIHRoaXNba1RyYWNrTWFudWFsbHlTZXRLZXlzXShrZXlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG9wdGlvbihrZXksIG9wdCkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG9iamVjdD4gW29iamVjdF0nLCBba2V5LCBvcHRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhrZXkpLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zKGssIGtleVtrXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIG9wdCA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpc1trVHJhY2tNYW51YWxseVNldEtleXNdKGtleSk7XG4gICAgICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92ZXJzaW9uT3B0LCBcImZcIikgJiYgKGtleSA9PT0gJ3ZlcnNpb24nIHx8IChvcHQgPT09IG51bGwgfHwgb3B0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHQuYWxpYXMpID09PSAndmVyc2lvbicpKSB7XG4gICAgICAgICAgICAgICAgdGhpc1trRW1pdFdhcm5pbmddKFtcbiAgICAgICAgICAgICAgICAgICAgJ1widmVyc2lvblwiIGlzIGEgcmVzZXJ2ZWQgd29yZC4nLFxuICAgICAgICAgICAgICAgICAgICAnUGxlYXNlIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOicsXG4gICAgICAgICAgICAgICAgICAgICctIERpc2FibGUgdmVyc2lvbiB3aXRoIGB5YXJncy52ZXJzaW9uKGZhbHNlKWAgaWYgdXNpbmcgXCJ2ZXJzaW9uXCIgYXMgYW4gb3B0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJy0gVXNlIHRoZSBidWlsdC1pbiBgeWFyZ3MudmVyc2lvbmAgbWV0aG9kIGluc3RlYWQgKGlmIGFwcGxpY2FibGUpJyxcbiAgICAgICAgICAgICAgICAgICAgJy0gVXNlIGEgZGlmZmVyZW50IG9wdGlvbiBrZXknLFxuICAgICAgICAgICAgICAgICAgICAnaHR0cHM6Ly95YXJncy5qcy5vcmcvZG9jcy8jYXBpLXJlZmVyZW5jZS12ZXJzaW9uJyxcbiAgICAgICAgICAgICAgICBdLmpvaW4oJ1xcbicpLCB1bmRlZmluZWQsICd2ZXJzaW9uV2FybmluZycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikua2V5W2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICB0aGlzLmFsaWFzKGtleSwgb3B0LmFsaWFzKTtcbiAgICAgICAgICAgIGNvbnN0IGRlcHJlY2F0ZSA9IG9wdC5kZXByZWNhdGUgfHwgb3B0LmRlcHJlY2F0ZWQ7XG4gICAgICAgICAgICBpZiAoZGVwcmVjYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXByZWNhdGVPcHRpb24oa2V5LCBkZXByZWNhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGVtYW5kID0gb3B0LmRlbWFuZCB8fCBvcHQucmVxdWlyZWQgfHwgb3B0LnJlcXVpcmU7XG4gICAgICAgICAgICBpZiAoZGVtYW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZW1hbmQoa2V5LCBkZW1hbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5kZW1hbmRPcHRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbWFuZE9wdGlvbihrZXksIHR5cGVvZiBvcHQuZGVtYW5kT3B0aW9uID09PSAnc3RyaW5nJyA/IG9wdC5kZW1hbmRPcHRpb24gOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5jb25mbGljdHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZsaWN0cyhrZXksIG9wdC5jb25mbGljdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCdkZWZhdWx0JyBpbiBvcHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHQoa2V5LCBvcHQuZGVmYXVsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmltcGxpZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW1wbGllcyhrZXksIG9wdC5pbXBsaWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQubmFyZ3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubmFyZ3Moa2V5LCBvcHQubmFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5jb25maWcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZyhrZXksIG9wdC5jb25maWdQYXJzZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5ub3JtYWxpemUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vcm1hbGl6ZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5jaG9pY2VzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaG9pY2VzKGtleSwgb3B0LmNob2ljZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5jb2VyY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvZXJjZShrZXksIG9wdC5jb2VyY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5ncm91cCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXAoa2V5LCBvcHQuZ3JvdXApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5ib29sZWFuIHx8IG9wdC50eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvb2xlYW4oa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAob3B0LmFsaWFzKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJvb2xlYW4ob3B0LmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuYXJyYXkgfHwgb3B0LnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFycmF5KGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcnJheShvcHQuYWxpYXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5udW1iZXIgfHwgb3B0LnR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5udW1iZXIoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAob3B0LmFsaWFzKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm51bWJlcihvcHQuYWxpYXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5zdHJpbmcgfHwgb3B0LnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdHJpbmcoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAob3B0LmFsaWFzKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmluZyhvcHQuYWxpYXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5jb3VudCB8fCBvcHQudHlwZSA9PT0gJ2NvdW50Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuY291bnQoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0Lmdsb2JhbCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nbG9iYWwoa2V5LCBvcHQuZ2xvYmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuZGVmYXVsdERlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuZGVmYXVsdERlc2NyaXB0aW9uW2tleV0gPSBvcHQuZGVmYXVsdERlc2NyaXB0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5za2lwVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2tpcFZhbGlkYXRpb24oa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRlc2MgPSBvcHQuZGVzY3JpYmUgfHwgb3B0LmRlc2NyaXB0aW9uIHx8IG9wdC5kZXNjO1xuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb25zID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmdldERlc2NyaXB0aW9ucygpO1xuICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGVzY3JpcHRpb25zLCBrZXkpIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIGRlc2MgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXNjcmliZShrZXksIGRlc2MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQucmVxdWlyZXNBcmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlcXVpcmVzQXJnKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG9wdGlvbnMoa2V5LCBvcHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uKGtleSwgb3B0KTtcbiAgICB9XG4gICAgcGFyc2UoYXJncywgc2hvcnRDaXJjdWl0LCBfcGFyc2VGbikge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nfGFycmF5XSBbZnVuY3Rpb258Ym9vbGVhbnxvYmplY3RdIFtmdW5jdGlvbl0nLCBbYXJncywgc2hvcnRDaXJjdWl0LCBfcGFyc2VGbl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB0aGlzW2tGcmVlemVdKCk7XG4gICAgICAgIGlmICh0eXBlb2YgYXJncyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGFyZ3MgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3Byb2Nlc3NBcmdzLCBcImZcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBzaG9ydENpcmN1aXQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BhcnNlQ29udGV4dCwgc2hvcnRDaXJjdWl0LCBcImZcIik7XG4gICAgICAgICAgICBzaG9ydENpcmN1aXQgPSBfcGFyc2VGbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHNob3J0Q2lyY3VpdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZUZuLCBzaG9ydENpcmN1aXQsIFwiZlwiKTtcbiAgICAgICAgICAgIHNob3J0Q2lyY3VpdCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2hvcnRDaXJjdWl0KVxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wcm9jZXNzQXJncywgYXJncywgXCJmXCIpO1xuICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZUZuLCBcImZcIikpXG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2V4aXRQcm9jZXNzLCBmYWxzZSwgXCJmXCIpO1xuICAgICAgICBjb25zdCBwYXJzZWQgPSB0aGlzW2tSdW5ZYXJnc1BhcnNlckFuZEV4ZWN1dGVDb21tYW5kc10oYXJncywgISFzaG9ydENpcmN1aXQpO1xuICAgICAgICBjb25zdCB0bXBQYXJzZWQgPSB0aGlzLnBhcnNlZDtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uLCBcImZcIikuc2V0UGFyc2VkKHRoaXMucGFyc2VkKTtcbiAgICAgICAgaWYgKGlzUHJvbWlzZShwYXJzZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VkXG4gICAgICAgICAgICAgICAgLnRoZW4oYXJndiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGFyc2VGbiwgXCJmXCIpKVxuICAgICAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BhcnNlRm4sIFwiZlwiKS5jYWxsKHRoaXMsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZXhpdEVycm9yLCBcImZcIiksIGFyZ3YsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3V0cHV0LCBcImZcIikpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhcmd2O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZUZuLCBcImZcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZUZuLCBcImZcIikoZXJyLCB0aGlzLnBhcnNlZC5hcmd2LCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX291dHB1dCwgXCJmXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpc1trVW5mcmVlemVdKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJzZWQgPSB0bXBQYXJzZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BhcnNlRm4sIFwiZlwiKSlcbiAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BhcnNlRm4sIFwiZlwiKS5jYWxsKHRoaXMsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZXhpdEVycm9yLCBcImZcIiksIHBhcnNlZCwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vdXRwdXQsIFwiZlwiKSk7XG4gICAgICAgICAgICB0aGlzW2tVbmZyZWV6ZV0oKTtcbiAgICAgICAgICAgIHRoaXMucGFyc2VkID0gdG1wUGFyc2VkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgfVxuICAgIHBhcnNlQXN5bmMoYXJncywgc2hvcnRDaXJjdWl0LCBfcGFyc2VGbikge1xuICAgICAgICBjb25zdCBtYXliZVByb21pc2UgPSB0aGlzLnBhcnNlKGFyZ3MsIHNob3J0Q2lyY3VpdCwgX3BhcnNlRm4pO1xuICAgICAgICByZXR1cm4gIWlzUHJvbWlzZShtYXliZVByb21pc2UpXG4gICAgICAgICAgICA/IFByb21pc2UucmVzb2x2ZShtYXliZVByb21pc2UpXG4gICAgICAgICAgICA6IG1heWJlUHJvbWlzZTtcbiAgICB9XG4gICAgcGFyc2VTeW5jKGFyZ3MsIHNob3J0Q2lyY3VpdCwgX3BhcnNlRm4pIHtcbiAgICAgICAgY29uc3QgbWF5YmVQcm9taXNlID0gdGhpcy5wYXJzZShhcmdzLCBzaG9ydENpcmN1aXQsIF9wYXJzZUZuKTtcbiAgICAgICAgaWYgKGlzUHJvbWlzZShtYXliZVByb21pc2UpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgWUVycm9yKCcucGFyc2VTeW5jKCkgbXVzdCBub3QgYmUgdXNlZCB3aXRoIGFzeW5jaHJvbm91cyBidWlsZGVycywgaGFuZGxlcnMsIG9yIG1pZGRsZXdhcmUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF5YmVQcm9taXNlO1xuICAgIH1cbiAgICBwYXJzZXJDb25maWd1cmF0aW9uKGNvbmZpZykge1xuICAgICAgICBhcmdzZXJ0KCc8b2JqZWN0PicsIFtjb25maWddLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZXJDb25maWcsIGNvbmZpZywgXCJmXCIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcGtnQ29uZihrZXksIHJvb3RQYXRoKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmc+IFtzdHJpbmddJywgW2tleSwgcm9vdFBhdGhdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgbGV0IGNvbmYgPSBudWxsO1xuICAgICAgICBjb25zdCBvYmogPSB0aGlzW2tQa2dVcF0ocm9vdFBhdGggfHwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jd2QsIFwiZlwiKSk7XG4gICAgICAgIGlmIChvYmpba2V5XSAmJiB0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjb25mID0gYXBwbHlFeHRlbmRzKG9ialtrZXldLCByb290UGF0aCB8fCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2N3ZCwgXCJmXCIpLCB0aGlzW2tHZXRQYXJzZXJDb25maWd1cmF0aW9uXSgpWydkZWVwLW1lcmdlLWNvbmZpZyddIHx8IGZhbHNlLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKSk7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5jb25maWdPYmplY3RzID0gKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmNvbmZpZ09iamVjdHMgfHwgW10pLmNvbmNhdChjb25mKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcG9zaXRpb25hbChrZXksIG9wdHMpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4gPG9iamVjdD4nLCBba2V5LCBvcHRzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHN1cHBvcnRlZE9wdHMgPSBbXG4gICAgICAgICAgICAnZGVmYXVsdCcsXG4gICAgICAgICAgICAnZGVmYXVsdERlc2NyaXB0aW9uJyxcbiAgICAgICAgICAgICdpbXBsaWVzJyxcbiAgICAgICAgICAgICdub3JtYWxpemUnLFxuICAgICAgICAgICAgJ2Nob2ljZXMnLFxuICAgICAgICAgICAgJ2NvbmZsaWN0cycsXG4gICAgICAgICAgICAnY29lcmNlJyxcbiAgICAgICAgICAgICd0eXBlJyxcbiAgICAgICAgICAgICdkZXNjcmliZScsXG4gICAgICAgICAgICAnZGVzYycsXG4gICAgICAgICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgJ2FsaWFzJyxcbiAgICAgICAgXTtcbiAgICAgICAgb3B0cyA9IG9iakZpbHRlcihvcHRzLCAoaywgdikgPT4ge1xuICAgICAgICAgICAgaWYgKGsgPT09ICd0eXBlJyAmJiAhWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nXS5pbmNsdWRlcyh2KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gc3VwcG9ydGVkT3B0cy5pbmNsdWRlcyhrKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGZ1bGxDb21tYW5kID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb250ZXh0LCBcImZcIikuZnVsbENvbW1hbmRzW19fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29udGV4dCwgXCJmXCIpLmZ1bGxDb21tYW5kcy5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3QgcGFyc2VPcHRpb25zID0gZnVsbENvbW1hbmRcbiAgICAgICAgICAgID8gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLCBcImZcIikuY21kVG9QYXJzZU9wdGlvbnMoZnVsbENvbW1hbmQpXG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBhcnJheTogW10sXG4gICAgICAgICAgICAgICAgYWxpYXM6IHt9LFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHt9LFxuICAgICAgICAgICAgICAgIGRlbWFuZDoge30sXG4gICAgICAgICAgICB9O1xuICAgICAgICBvYmplY3RLZXlzKHBhcnNlT3B0aW9ucykuZm9yRWFjaChwayA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZU9wdGlvbiA9IHBhcnNlT3B0aW9uc1twa107XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZU9wdGlvbikpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VPcHRpb24uaW5kZXhPZihrZXkpICE9PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgb3B0c1twa10gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlT3B0aW9uW2tleV0gJiYgIShwayBpbiBvcHRzKSlcbiAgICAgICAgICAgICAgICAgICAgb3B0c1twa10gPSBwYXJzZU9wdGlvbltrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ncm91cChrZXksIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5nZXRQb3NpdGlvbmFsR3JvdXBOYW1lKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb24oa2V5LCBvcHRzKTtcbiAgICB9XG4gICAgcmVjb21tZW5kQ29tbWFuZHMocmVjb21tZW5kID0gdHJ1ZSkge1xuICAgICAgICBhcmdzZXJ0KCdbYm9vbGVhbl0nLCBbcmVjb21tZW5kXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcmVjb21tZW5kQ29tbWFuZHMsIHJlY29tbWVuZCwgXCJmXCIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcmVxdWlyZWQoa2V5cywgbWF4LCBtc2cpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVtYW5kKGtleXMsIG1heCwgbXNnKTtcbiAgICB9XG4gICAgcmVxdWlyZShrZXlzLCBtYXgsIG1zZykge1xuICAgICAgICByZXR1cm4gdGhpcy5kZW1hbmQoa2V5cywgbWF4LCBtc2cpO1xuICAgIH1cbiAgICByZXF1aXJlc0FyZyhrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmd8b2JqZWN0PiBbbnVtYmVyXScsIFtrZXlzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmICh0eXBlb2Yga2V5cyA9PT0gJ3N0cmluZycgJiYgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikubmFyZ1trZXlzXSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzW2tQb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnldKHRoaXMucmVxdWlyZXNBcmcuYmluZCh0aGlzKSwgJ25hcmcnLCBrZXlzLCBOYU4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBzaG93Q29tcGxldGlvblNjcmlwdCgkMCwgY21kKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tzdHJpbmddIFtzdHJpbmddJywgWyQwLCBjbWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgJDAgPSAkMCB8fCB0aGlzLiQwO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2xvZ2dlciwgXCJmXCIpLmxvZyhfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb24sIFwiZlwiKS5nZW5lcmF0ZUNvbXBsZXRpb25TY3JpcHQoJDAsIGNtZCB8fCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb25Db21tYW5kLCBcImZcIikgfHwgJ2NvbXBsZXRpb24nKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBzaG93SGVscChsZXZlbCkge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nfGZ1bmN0aW9uXScsIFtsZXZlbF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hhc091dHB1dCwgdHJ1ZSwgXCJmXCIpO1xuICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5oYXNDYWNoZWRIZWxwTWVzc2FnZSgpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2UgPSB0aGlzW2tSdW5ZYXJnc1BhcnNlckFuZEV4ZWN1dGVDb21tYW5kc10oX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wcm9jZXNzQXJncywgXCJmXCIpLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgMCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShwYXJzZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuc2hvd0hlbHAobGV2ZWwpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYnVpbGRlclJlc3BvbnNlID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLCBcImZcIikucnVuRGVmYXVsdEJ1aWxkZXJPbih0aGlzKTtcbiAgICAgICAgICAgIGlmIChpc1Byb21pc2UoYnVpbGRlclJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAgIGJ1aWxkZXJSZXNwb25zZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLnNob3dIZWxwKGxldmVsKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuc2hvd0hlbHAobGV2ZWwpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc2NyaXB0TmFtZShzY3JpcHROYW1lKSB7XG4gICAgICAgIHRoaXMuY3VzdG9tU2NyaXB0TmFtZSA9IHRydWU7XG4gICAgICAgIHRoaXMuJDAgPSBzY3JpcHROYW1lO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc2hvd0hlbHBPbkZhaWwoZW5hYmxlZCwgbWVzc2FnZSkge1xuICAgICAgICBhcmdzZXJ0KCdbYm9vbGVhbnxzdHJpbmddIFtzdHJpbmddJywgW2VuYWJsZWQsIG1lc3NhZ2VdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLnNob3dIZWxwT25GYWlsKGVuYWJsZWQsIG1lc3NhZ2UpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc2hvd1ZlcnNpb24obGV2ZWwpIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xmdW5jdGlvbl0nLCBbbGV2ZWxdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLnNob3dWZXJzaW9uKGxldmVsKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHNraXBWYWxpZGF0aW9uKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB0aGlzW2tQb3B1bGF0ZVBhcnNlckhpbnRBcnJheV0oJ3NraXBWYWxpZGF0aW9uJywga2V5cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBzdHJpY3QoZW5hYmxlZCkge1xuICAgICAgICBhcmdzZXJ0KCdbYm9vbGVhbl0nLCBbZW5hYmxlZF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3N0cmljdCwgZW5hYmxlZCAhPT0gZmFsc2UsIFwiZlwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHN0cmljdENvbW1hbmRzKGVuYWJsZWQpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW2VuYWJsZWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3RDb21tYW5kcywgZW5hYmxlZCAhPT0gZmFsc2UsIFwiZlwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHN0cmljdE9wdGlvbnMoZW5hYmxlZCkge1xuICAgICAgICBhcmdzZXJ0KCdbYm9vbGVhbl0nLCBbZW5hYmxlZF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3N0cmljdE9wdGlvbnMsIGVuYWJsZWQgIT09IGZhbHNlLCBcImZcIik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBzdHJpbmcoa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nPicsIFtrZXlzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHRoaXNba1BvcHVsYXRlUGFyc2VySGludEFycmF5XSgnc3RyaW5nJywga2V5cyk7XG4gICAgICAgIHRoaXNba1RyYWNrTWFudWFsbHlTZXRLZXlzXShrZXlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRlcm1pbmFsV2lkdGgoKSB7XG4gICAgICAgIGFyZ3NlcnQoW10sIDApO1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikucHJvY2Vzcy5zdGRDb2x1bW5zO1xuICAgIH1cbiAgICB1cGRhdGVMb2NhbGUob2JqKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVN0cmluZ3Mob2JqKTtcbiAgICB9XG4gICAgdXBkYXRlU3RyaW5ncyhvYmopIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdD4nLCBbb2JqXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZGV0ZWN0TG9jYWxlLCBmYWxzZSwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS55MThuLnVwZGF0ZUxvY2FsZShvYmopO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdXNhZ2UobXNnLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlcikge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG51bGx8dW5kZWZpbmVkPiBbc3RyaW5nfGJvb2xlYW5dIFtmdW5jdGlvbnxvYmplY3RdIFtmdW5jdGlvbl0nLCBbbXNnLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlcl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwobXNnLCBudWxsLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKSk7XG4gICAgICAgICAgICBpZiAoKG1zZyB8fCAnJykubWF0Y2goL15cXCQwKCB8JCkvKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbW1hbmQobXNnLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWUVycm9yKCcudXNhZ2UoKSBkZXNjcmlwdGlvbiBtdXN0IHN0YXJ0IHdpdGggJDAgaWYgYmVpbmcgdXNlZCBhcyBhbGlhcyBmb3IgLmNvbW1hbmQoKScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLnVzYWdlKG1zZyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cbiAgICB1c2FnZUNvbmZpZ3VyYXRpb24oY29uZmlnKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3Q+JywgW2NvbmZpZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlQ29uZmlnLCBjb25maWcsIFwiZlwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHZlcnNpb24ob3B0LCBtc2csIHZlcikge1xuICAgICAgICBjb25zdCBkZWZhdWx0VmVyc2lvbk9wdCA9ICd2ZXJzaW9uJztcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW58c3RyaW5nXSBbc3RyaW5nXSBbc3RyaW5nXScsIFtvcHQsIG1zZywgdmVyXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZlcnNpb25PcHQsIFwiZlwiKSkge1xuICAgICAgICAgICAgdGhpc1trRGVsZXRlRnJvbVBhcnNlckhpbnRPYmplY3RdKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmVyc2lvbk9wdCwgXCJmXCIpKTtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS52ZXJzaW9uKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZlcnNpb25PcHQsIG51bGwsIFwiZlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdmVyID0gdGhpc1trR3Vlc3NWZXJzaW9uXSgpO1xuICAgICAgICAgICAgb3B0ID0gZGVmYXVsdFZlcnNpb25PcHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKG9wdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZlciA9IG9wdDtcbiAgICAgICAgICAgIG9wdCA9IGRlZmF1bHRWZXJzaW9uT3B0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIHZlciA9IG1zZztcbiAgICAgICAgICAgIG1zZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZlcnNpb25PcHQsIHR5cGVvZiBvcHQgPT09ICdzdHJpbmcnID8gb3B0IDogZGVmYXVsdFZlcnNpb25PcHQsIFwiZlwiKTtcbiAgICAgICAgbXNnID0gbXNnIHx8IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5kZWZlclkxOG5Mb29rdXAoJ1Nob3cgdmVyc2lvbiBudW1iZXInKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLnZlcnNpb24odmVyIHx8IHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuYm9vbGVhbihfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZlcnNpb25PcHQsIFwiZlwiKSk7XG4gICAgICAgIHRoaXMuZGVzY3JpYmUoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92ZXJzaW9uT3B0LCBcImZcIiksIG1zZyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB3cmFwKGNvbHMpIHtcbiAgICAgICAgYXJnc2VydCgnPG51bWJlcnxudWxsfHVuZGVmaW5lZD4nLCBbY29sc10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikud3JhcChjb2xzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIFsoX1lhcmdzSW5zdGFuY2VfY29tbWFuZCA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX2N3ZCA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX2NvbnRleHQgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbkNvbW1hbmQgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9kZWZhdWx0U2hvd0hpZGRlbk9wdCA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX2V4aXRFcnJvciA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX2RldGVjdExvY2FsZSA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX2VtaXR0ZWRXYXJuaW5ncyA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX2V4aXRQcm9jZXNzID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfZnJvemVucyA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX2dsb2JhbE1pZGRsZXdhcmUgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9ncm91cHMgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9oYXNPdXRwdXQgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9oZWxwT3B0ID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfaXNHbG9iYWxDb250ZXh0ID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfbG9nZ2VyID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2Vfb3V0cHV0ID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucyA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX3BhcmVudFJlcXVpcmUgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZXJDb25maWcgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZUZuID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfcGFyc2VDb250ZXh0ID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfcGtncyA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX3ByZXNlcnZlZEdyb3VwcyA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX3Byb2Nlc3NBcmdzID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfcmVjb21tZW5kQ29tbWFuZHMgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9zaGltID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0ID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0Q29tbWFuZHMgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3RPcHRpb25zID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfdXNhZ2UgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV91c2FnZUNvbmZpZyA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX3ZlcnNpb25PcHQgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uID0gbmV3IFdlYWtNYXAoKSwga0NvcHlEb3VibGVEYXNoKV0oYXJndikge1xuICAgICAgICBpZiAoIWFyZ3YuXyB8fCAhYXJndlsnLS0nXSlcbiAgICAgICAgICAgIHJldHVybiBhcmd2O1xuICAgICAgICBhcmd2Ll8ucHVzaC5hcHBseShhcmd2Ll8sIGFyZ3ZbJy0tJ10pO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGVsZXRlIGFyZ3ZbJy0tJ107XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9lcnIpIHsgfVxuICAgICAgICByZXR1cm4gYXJndjtcbiAgICB9XG4gICAgW2tDcmVhdGVMb2dnZXJdKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbG9nOiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpc1trSGFzUGFyc2VDYWxsYmFja10oKSlcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9oYXNPdXRwdXQsIHRydWUsIFwiZlwiKTtcbiAgICAgICAgICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vdXRwdXQsIFwiZlwiKS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3V0cHV0LCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX291dHB1dCwgXCJmXCIpICsgJ1xcbicsIFwiZlwiKTtcbiAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX291dHB1dCwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vdXRwdXQsIFwiZlwiKSArIGFyZ3Muam9pbignICcpLCBcImZcIik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzW2tIYXNQYXJzZUNhbGxiYWNrXSgpKVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaGFzT3V0cHV0LCB0cnVlLCBcImZcIik7XG4gICAgICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3V0cHV0LCBcImZcIikubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX291dHB1dCwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vdXRwdXQsIFwiZlwiKSArICdcXG4nLCBcImZcIik7XG4gICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vdXRwdXQsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3V0cHV0LCBcImZcIikgKyBhcmdzLmpvaW4oJyAnKSwgXCJmXCIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgW2tEZWxldGVGcm9tUGFyc2VySGludE9iamVjdF0ob3B0aW9uS2V5KSB7XG4gICAgICAgIG9iamVjdEtleXMoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikpLmZvckVhY2goKGhpbnRLZXkpID0+IHtcbiAgICAgICAgICAgIGlmICgoKGtleSkgPT4ga2V5ID09PSAnY29uZmlnT2JqZWN0cycpKGhpbnRLZXkpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGhpbnQgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKVtoaW50S2V5XTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGhpbnQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhpbnQuaW5jbHVkZXMob3B0aW9uS2V5KSlcbiAgICAgICAgICAgICAgICAgICAgaGludC5zcGxpY2UoaGludC5pbmRleE9mKG9wdGlvbktleSksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGhpbnQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGhpbnRbb3B0aW9uS2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRlbGV0ZSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuZ2V0RGVzY3JpcHRpb25zKClbb3B0aW9uS2V5XTtcbiAgICB9XG4gICAgW2tFbWl0V2FybmluZ10od2FybmluZywgdHlwZSwgZGVkdXBsaWNhdGlvbklkKSB7XG4gICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9lbWl0dGVkV2FybmluZ3MsIFwiZlwiKVtkZWR1cGxpY2F0aW9uSWRdKSB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5wcm9jZXNzLmVtaXRXYXJuaW5nKHdhcm5pbmcsIHR5cGUpO1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9lbWl0dGVkV2FybmluZ3MsIFwiZlwiKVtkZWR1cGxpY2F0aW9uSWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBba0ZyZWV6ZV0oKSB7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZnJvemVucywgXCJmXCIpLnB1c2goe1xuICAgICAgICAgICAgb3B0aW9uczogX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIiksXG4gICAgICAgICAgICBjb25maWdPYmplY3RzOiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5jb25maWdPYmplY3RzLnNsaWNlKDApLFxuICAgICAgICAgICAgZXhpdFByb2Nlc3M6IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZXhpdFByb2Nlc3MsIFwiZlwiKSxcbiAgICAgICAgICAgIGdyb3VwczogX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9ncm91cHMsIFwiZlwiKSxcbiAgICAgICAgICAgIHN0cmljdDogX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3QsIFwiZlwiKSxcbiAgICAgICAgICAgIHN0cmljdENvbW1hbmRzOiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3N0cmljdENvbW1hbmRzLCBcImZcIiksXG4gICAgICAgICAgICBzdHJpY3RPcHRpb25zOiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3N0cmljdE9wdGlvbnMsIFwiZlwiKSxcbiAgICAgICAgICAgIGNvbXBsZXRpb25Db21tYW5kOiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb25Db21tYW5kLCBcImZcIiksXG4gICAgICAgICAgICBvdXRwdXQ6IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3V0cHV0LCBcImZcIiksXG4gICAgICAgICAgICBleGl0RXJyb3I6IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZXhpdEVycm9yLCBcImZcIiksXG4gICAgICAgICAgICBoYXNPdXRwdXQ6IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaGFzT3V0cHV0LCBcImZcIiksXG4gICAgICAgICAgICBwYXJzZWQ6IHRoaXMucGFyc2VkLFxuICAgICAgICAgICAgcGFyc2VGbjogX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZUZuLCBcImZcIiksXG4gICAgICAgICAgICBwYXJzZUNvbnRleHQ6IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGFyc2VDb250ZXh0LCBcImZcIiksXG4gICAgICAgIH0pO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuZnJlZXplKCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiwgXCJmXCIpLmZyZWV6ZSgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQsIFwiZlwiKS5mcmVlemUoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9nbG9iYWxNaWRkbGV3YXJlLCBcImZcIikuZnJlZXplKCk7XG4gICAgfVxuICAgIFtrR2V0RG9sbGFyWmVyb10oKSB7XG4gICAgICAgIGxldCAkMCA9ICcnO1xuICAgICAgICBsZXQgZGVmYXVsdCQwO1xuICAgICAgICBpZiAoL1xcYihub2RlfGlvanN8ZWxlY3Ryb24pKFxcLmV4ZSk/JC8udGVzdChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5wcm9jZXNzLmFyZ3YoKVswXSkpIHtcbiAgICAgICAgICAgIGRlZmF1bHQkMCA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnByb2Nlc3MuYXJndigpLnNsaWNlKDEsIDIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVmYXVsdCQwID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikucHJvY2Vzcy5hcmd2KCkuc2xpY2UoMCwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgJDAgPSBkZWZhdWx0JDBcbiAgICAgICAgICAgIC5tYXAoeCA9PiB7XG4gICAgICAgICAgICBjb25zdCBiID0gdGhpc1trUmViYXNlXShfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2N3ZCwgXCJmXCIpLCB4KTtcbiAgICAgICAgICAgIHJldHVybiB4Lm1hdGNoKC9eKFxcL3woW2EtekEtWl06KT9cXFxcKS8pICYmIGIubGVuZ3RoIDwgeC5sZW5ndGggPyBiIDogeDtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKCcgJylcbiAgICAgICAgICAgIC50cmltKCk7XG4gICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5nZXRFbnYoJ18nKSAmJlxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikuZ2V0UHJvY2Vzc0FyZ3ZCaW4oKSA9PT0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikuZ2V0RW52KCdfJykpIHtcbiAgICAgICAgICAgICQwID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIilcbiAgICAgICAgICAgICAgICAuZ2V0RW52KCdfJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZShgJHtfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5wYXRoLmRpcm5hbWUoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikucHJvY2Vzcy5leGVjUGF0aCgpKX0vYCwgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAkMDtcbiAgICB9XG4gICAgW2tHZXRQYXJzZXJDb25maWd1cmF0aW9uXSgpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGFyc2VyQ29uZmlnLCBcImZcIik7XG4gICAgfVxuICAgIFtrR2V0VXNhZ2VDb25maWd1cmF0aW9uXSgpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2VDb25maWcsIFwiZlwiKTtcbiAgICB9XG4gICAgW2tHdWVzc0xvY2FsZV0oKSB7XG4gICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9kZXRlY3RMb2NhbGUsIFwiZlwiKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbG9jYWxlID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikuZ2V0RW52KCdMQ19BTEwnKSB8fFxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikuZ2V0RW52KCdMQ19NRVNTQUdFUycpIHx8XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5nZXRFbnYoJ0xBTkcnKSB8fFxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikuZ2V0RW52KCdMQU5HVUFHRScpIHx8XG4gICAgICAgICAgICAnZW5fVVMnO1xuICAgICAgICB0aGlzLmxvY2FsZShsb2NhbGUucmVwbGFjZSgvWy46XS4qLywgJycpKTtcbiAgICB9XG4gICAgW2tHdWVzc1ZlcnNpb25dKCkge1xuICAgICAgICBjb25zdCBvYmogPSB0aGlzW2tQa2dVcF0oKTtcbiAgICAgICAgcmV0dXJuIG9iai52ZXJzaW9uIHx8ICd1bmtub3duJztcbiAgICB9XG4gICAgW2tQYXJzZVBvc2l0aW9uYWxOdW1iZXJzXShhcmd2KSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBhcmd2WyctLSddID8gYXJndlsnLS0nXSA6IGFyZ3YuXztcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGFyZzsgKGFyZyA9IGFyZ3NbaV0pICE9PSB1bmRlZmluZWQ7IGkrKykge1xuICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLlBhcnNlci5sb29rc0xpa2VOdW1iZXIoYXJnKSAmJlxuICAgICAgICAgICAgICAgIE51bWJlci5pc1NhZmVJbnRlZ2VyKE1hdGguZmxvb3IocGFyc2VGbG9hdChgJHthcmd9YCkpKSkge1xuICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSBOdW1iZXIoYXJnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJndjtcbiAgICB9XG4gICAgW2tQa2dVcF0ocm9vdFBhdGgpIHtcbiAgICAgICAgY29uc3QgbnBhdGggPSByb290UGF0aCB8fCAnKic7XG4gICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BrZ3MsIFwiZlwiKVtucGF0aF0pXG4gICAgICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wa2dzLCBcImZcIilbbnBhdGhdO1xuICAgICAgICBsZXQgb2JqID0ge307XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgc3RhcnREaXIgPSByb290UGF0aCB8fCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5tYWluRmlsZW5hbWU7XG4gICAgICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikucGF0aC5leHRuYW1lKHN0YXJ0RGlyKSkge1xuICAgICAgICAgICAgICAgIHN0YXJ0RGlyID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikucGF0aC5kaXJuYW1lKHN0YXJ0RGlyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBrZ0pzb25QYXRoID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikuZmluZFVwKHN0YXJ0RGlyLCAoZGlyLCBuYW1lcykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChuYW1lcy5pbmNsdWRlcygncGFja2FnZS5qc29uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdwYWNrYWdlLmpzb24nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKHBrZ0pzb25QYXRoLCB1bmRlZmluZWQsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpKTtcbiAgICAgICAgICAgIG9iaiA9IEpTT04ucGFyc2UoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikucmVhZEZpbGVTeW5jKHBrZ0pzb25QYXRoLCAndXRmOCcpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX25vb3ApIHsgfVxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BrZ3MsIFwiZlwiKVtucGF0aF0gPSBvYmogfHwge307XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BrZ3MsIFwiZlwiKVtucGF0aF07XG4gICAgfVxuICAgIFtrUG9wdWxhdGVQYXJzZXJIaW50QXJyYXldKHR5cGUsIGtleXMpIHtcbiAgICAgICAga2V5cyA9IFtdLmNvbmNhdChrZXlzKTtcbiAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBrZXkgPSB0aGlzW2tTYW5pdGl6ZUtleV0oa2V5KTtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpW3R5cGVdLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIFtrUG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5XShidWlsZGVyLCB0eXBlLCBrZXksIHZhbHVlKSB7XG4gICAgICAgIHRoaXNba1BvcHVsYXRlUGFyc2VySGludERpY3Rpb25hcnldKGJ1aWxkZXIsIHR5cGUsIGtleSwgdmFsdWUsICh0eXBlLCBrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKVt0eXBlXVtrZXldID0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBba1BvcHVsYXRlUGFyc2VySGludEFycmF5RGljdGlvbmFyeV0oYnVpbGRlciwgdHlwZSwga2V5LCB2YWx1ZSkge1xuICAgICAgICB0aGlzW2tQb3B1bGF0ZVBhcnNlckhpbnREaWN0aW9uYXJ5XShidWlsZGVyLCB0eXBlLCBrZXksIHZhbHVlLCAodHlwZSwga2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIilbdHlwZV1ba2V5XSA9IChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKVt0eXBlXVtrZXldIHx8IFtdKS5jb25jYXQodmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgW2tQb3B1bGF0ZVBhcnNlckhpbnREaWN0aW9uYXJ5XShidWlsZGVyLCB0eXBlLCBrZXksIHZhbHVlLCBzaW5nbGVLZXlIYW5kbGVyKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleSkpIHtcbiAgICAgICAgICAgIGtleS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIGJ1aWxkZXIoaywgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKChrZXkpID0+IHR5cGVvZiBrZXkgPT09ICdvYmplY3QnKShrZXkpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2Ygb2JqZWN0S2V5cyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgYnVpbGRlcihrLCBrZXlba10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2luZ2xlS2V5SGFuZGxlcih0eXBlLCB0aGlzW2tTYW5pdGl6ZUtleV0oa2V5KSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIFtrU2FuaXRpemVLZXldKGtleSkge1xuICAgICAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJylcbiAgICAgICAgICAgIHJldHVybiAnX19fcHJvdG9fX18nO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBba1NldEtleV0oa2V5LCBzZXQpIHtcbiAgICAgICAgdGhpc1trUG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5XSh0aGlzW2tTZXRLZXldLmJpbmQodGhpcyksICdrZXknLCBrZXksIHNldCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBba1VuZnJlZXplXSgpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2YsIF9nLCBfaCwgX2osIF9rLCBfbCwgX207XG4gICAgICAgIGNvbnN0IGZyb3plbiA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZnJvemVucywgXCJmXCIpLnBvcCgpO1xuICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChmcm96ZW4sIHVuZGVmaW5lZCwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikpO1xuICAgICAgICBsZXQgY29uZmlnT2JqZWN0cztcbiAgICAgICAgKF9hID0gdGhpcywgX2IgPSB0aGlzLCBfYyA9IHRoaXMsIF9kID0gdGhpcywgX2UgPSB0aGlzLCBfZiA9IHRoaXMsIF9nID0gdGhpcywgX2ggPSB0aGlzLCBfaiA9IHRoaXMsIF9rID0gdGhpcywgX2wgPSB0aGlzLCBfbSA9IHRoaXMsIHtcbiAgICAgICAgICAgIG9wdGlvbnM6ICh7IHNldCB2YWx1ZShfbykgeyBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9hLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBfbywgXCJmXCIpOyB9IH0pLnZhbHVlLFxuICAgICAgICAgICAgY29uZmlnT2JqZWN0cyxcbiAgICAgICAgICAgIGV4aXRQcm9jZXNzOiAoeyBzZXQgdmFsdWUoX28pIHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldChfYiwgX1lhcmdzSW5zdGFuY2VfZXhpdFByb2Nlc3MsIF9vLCBcImZcIik7IH0gfSkudmFsdWUsXG4gICAgICAgICAgICBncm91cHM6ICh7IHNldCB2YWx1ZShfbykgeyBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9jLCBfWWFyZ3NJbnN0YW5jZV9ncm91cHMsIF9vLCBcImZcIik7IH0gfSkudmFsdWUsXG4gICAgICAgICAgICBvdXRwdXQ6ICh7IHNldCB2YWx1ZShfbykgeyBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9kLCBfWWFyZ3NJbnN0YW5jZV9vdXRwdXQsIF9vLCBcImZcIik7IH0gfSkudmFsdWUsXG4gICAgICAgICAgICBleGl0RXJyb3I6ICh7IHNldCB2YWx1ZShfbykgeyBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9lLCBfWWFyZ3NJbnN0YW5jZV9leGl0RXJyb3IsIF9vLCBcImZcIik7IH0gfSkudmFsdWUsXG4gICAgICAgICAgICBoYXNPdXRwdXQ6ICh7IHNldCB2YWx1ZShfbykgeyBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9mLCBfWWFyZ3NJbnN0YW5jZV9oYXNPdXRwdXQsIF9vLCBcImZcIik7IH0gfSkudmFsdWUsXG4gICAgICAgICAgICBwYXJzZWQ6IHRoaXMucGFyc2VkLFxuICAgICAgICAgICAgc3RyaWN0OiAoeyBzZXQgdmFsdWUoX28pIHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldChfZywgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0LCBfbywgXCJmXCIpOyB9IH0pLnZhbHVlLFxuICAgICAgICAgICAgc3RyaWN0Q29tbWFuZHM6ICh7IHNldCB2YWx1ZShfbykgeyBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9oLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3RDb21tYW5kcywgX28sIFwiZlwiKTsgfSB9KS52YWx1ZSxcbiAgICAgICAgICAgIHN0cmljdE9wdGlvbnM6ICh7IHNldCB2YWx1ZShfbykgeyBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9qLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3RPcHRpb25zLCBfbywgXCJmXCIpOyB9IH0pLnZhbHVlLFxuICAgICAgICAgICAgY29tcGxldGlvbkNvbW1hbmQ6ICh7IHNldCB2YWx1ZShfbykgeyBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9rLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uQ29tbWFuZCwgX28sIFwiZlwiKTsgfSB9KS52YWx1ZSxcbiAgICAgICAgICAgIHBhcnNlRm46ICh7IHNldCB2YWx1ZShfbykgeyBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9sLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZUZuLCBfbywgXCJmXCIpOyB9IH0pLnZhbHVlLFxuICAgICAgICAgICAgcGFyc2VDb250ZXh0OiAoeyBzZXQgdmFsdWUoX28pIHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldChfbSwgX1lhcmdzSW5zdGFuY2VfcGFyc2VDb250ZXh0LCBfbywgXCJmXCIpOyB9IH0pLnZhbHVlLFxuICAgICAgICB9ID0gZnJvemVuKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuY29uZmlnT2JqZWN0cyA9IGNvbmZpZ09iamVjdHM7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS51bmZyZWV6ZSgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIFwiZlwiKS51bmZyZWV6ZSgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQsIFwiZlwiKS51bmZyZWV6ZSgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2dsb2JhbE1pZGRsZXdhcmUsIFwiZlwiKS51bmZyZWV6ZSgpO1xuICAgIH1cbiAgICBba1ZhbGlkYXRlQXN5bmNdKHZhbGlkYXRpb24sIGFyZ3YpIHtcbiAgICAgICAgcmV0dXJuIG1heWJlQXN5bmNSZXN1bHQoYXJndiwgcmVzdWx0ID0+IHtcbiAgICAgICAgICAgIHZhbGlkYXRpb24ocmVzdWx0KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRJbnRlcm5hbE1ldGhvZHMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBnZXRDb21tYW5kSW5zdGFuY2U6IHRoaXNba0dldENvbW1hbmRJbnN0YW5jZV0uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGdldENvbnRleHQ6IHRoaXNba0dldENvbnRleHRdLmJpbmQodGhpcyksXG4gICAgICAgICAgICBnZXRIYXNPdXRwdXQ6IHRoaXNba0dldEhhc091dHB1dF0uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGdldExvZ2dlckluc3RhbmNlOiB0aGlzW2tHZXRMb2dnZXJJbnN0YW5jZV0uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGdldFBhcnNlQ29udGV4dDogdGhpc1trR2V0UGFyc2VDb250ZXh0XS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgZ2V0UGFyc2VyQ29uZmlndXJhdGlvbjogdGhpc1trR2V0UGFyc2VyQ29uZmlndXJhdGlvbl0uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGdldFVzYWdlQ29uZmlndXJhdGlvbjogdGhpc1trR2V0VXNhZ2VDb25maWd1cmF0aW9uXS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgZ2V0VXNhZ2VJbnN0YW5jZTogdGhpc1trR2V0VXNhZ2VJbnN0YW5jZV0uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGdldFZhbGlkYXRpb25JbnN0YW5jZTogdGhpc1trR2V0VmFsaWRhdGlvbkluc3RhbmNlXS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgaGFzUGFyc2VDYWxsYmFjazogdGhpc1trSGFzUGFyc2VDYWxsYmFja10uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGlzR2xvYmFsQ29udGV4dDogdGhpc1trSXNHbG9iYWxDb250ZXh0XS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgcG9zdFByb2Nlc3M6IHRoaXNba1Bvc3RQcm9jZXNzXS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgcmVzZXQ6IHRoaXNba1Jlc2V0XS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgcnVuVmFsaWRhdGlvbjogdGhpc1trUnVuVmFsaWRhdGlvbl0uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHJ1bllhcmdzUGFyc2VyQW5kRXhlY3V0ZUNvbW1hbmRzOiB0aGlzW2tSdW5ZYXJnc1BhcnNlckFuZEV4ZWN1dGVDb21tYW5kc10uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHNldEhhc091dHB1dDogdGhpc1trU2V0SGFzT3V0cHV0XS5iaW5kKHRoaXMpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBba0dldENvbW1hbmRJbnN0YW5jZV0oKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQsIFwiZlwiKTtcbiAgICB9XG4gICAgW2tHZXRDb250ZXh0XSgpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29udGV4dCwgXCJmXCIpO1xuICAgIH1cbiAgICBba0dldEhhc091dHB1dF0oKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hhc091dHB1dCwgXCJmXCIpO1xuICAgIH1cbiAgICBba0dldExvZ2dlckluc3RhbmNlXSgpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfbG9nZ2VyLCBcImZcIik7XG4gICAgfVxuICAgIFtrR2V0UGFyc2VDb250ZXh0XSgpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGFyc2VDb250ZXh0LCBcImZcIikgfHwge307XG4gICAgfVxuICAgIFtrR2V0VXNhZ2VJbnN0YW5jZV0oKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIik7XG4gICAgfVxuICAgIFtrR2V0VmFsaWRhdGlvbkluc3RhbmNlXSgpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiwgXCJmXCIpO1xuICAgIH1cbiAgICBba0hhc1BhcnNlQ2FsbGJhY2tdKCkge1xuICAgICAgICByZXR1cm4gISFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BhcnNlRm4sIFwiZlwiKTtcbiAgICB9XG4gICAgW2tJc0dsb2JhbENvbnRleHRdKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9pc0dsb2JhbENvbnRleHQsIFwiZlwiKTtcbiAgICB9XG4gICAgW2tQb3N0UHJvY2Vzc10oYXJndiwgcG9wdWxhdGVEb3VibGVEYXNoLCBjYWxsZWRGcm9tQ29tbWFuZCwgcnVuR2xvYmFsTWlkZGxld2FyZSkge1xuICAgICAgICBpZiAoY2FsbGVkRnJvbUNvbW1hbmQpXG4gICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgaWYgKGlzUHJvbWlzZShhcmd2KSlcbiAgICAgICAgICAgIHJldHVybiBhcmd2O1xuICAgICAgICBpZiAoIXBvcHVsYXRlRG91YmxlRGFzaCkge1xuICAgICAgICAgICAgYXJndiA9IHRoaXNba0NvcHlEb3VibGVEYXNoXShhcmd2KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJzZVBvc2l0aW9uYWxOdW1iZXJzID0gdGhpc1trR2V0UGFyc2VyQ29uZmlndXJhdGlvbl0oKVsncGFyc2UtcG9zaXRpb25hbC1udW1iZXJzJ10gfHxcbiAgICAgICAgICAgIHRoaXNba0dldFBhcnNlckNvbmZpZ3VyYXRpb25dKClbJ3BhcnNlLXBvc2l0aW9uYWwtbnVtYmVycyddID09PSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChwYXJzZVBvc2l0aW9uYWxOdW1iZXJzKSB7XG4gICAgICAgICAgICBhcmd2ID0gdGhpc1trUGFyc2VQb3NpdGlvbmFsTnVtYmVyc10oYXJndik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJ1bkdsb2JhbE1pZGRsZXdhcmUpIHtcbiAgICAgICAgICAgIGFyZ3YgPSBhcHBseU1pZGRsZXdhcmUoYXJndiwgdGhpcywgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9nbG9iYWxNaWRkbGV3YXJlLCBcImZcIikuZ2V0TWlkZGxld2FyZSgpLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgfVxuICAgIFtrUmVzZXRdKGFsaWFzZXMgPSB7fSkge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpIHx8IHt9LCBcImZcIik7XG4gICAgICAgIGNvbnN0IHRtcE9wdGlvbnMgPSB7fTtcbiAgICAgICAgdG1wT3B0aW9ucy5sb2NhbCA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmxvY2FsIHx8IFtdO1xuICAgICAgICB0bXBPcHRpb25zLmNvbmZpZ09iamVjdHMgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5jb25maWdPYmplY3RzIHx8IFtdO1xuICAgICAgICBjb25zdCBsb2NhbExvb2t1cCA9IHt9O1xuICAgICAgICB0bXBPcHRpb25zLmxvY2FsLmZvckVhY2gobCA9PiB7XG4gICAgICAgICAgICBsb2NhbExvb2t1cFtsXSA9IHRydWU7XG4gICAgICAgICAgICAoYWxpYXNlc1tsXSB8fCBbXSkuZm9yRWFjaChhID0+IHtcbiAgICAgICAgICAgICAgICBsb2NhbExvb2t1cFthXSA9IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wcmVzZXJ2ZWRHcm91cHMsIFwiZlwiKSwgT2JqZWN0LmtleXMoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9ncm91cHMsIFwiZlwiKSkucmVkdWNlKChhY2MsIGdyb3VwTmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZ3JvdXBzLCBcImZcIilbZ3JvdXBOYW1lXS5maWx0ZXIoa2V5ID0+ICEoa2V5IGluIGxvY2FsTG9va3VwKSk7XG4gICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYWNjW2dyb3VwTmFtZV0gPSBrZXlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9ncm91cHMsIHt9LCBcImZcIik7XG4gICAgICAgIGNvbnN0IGFycmF5T3B0aW9ucyA9IFtcbiAgICAgICAgICAgICdhcnJheScsXG4gICAgICAgICAgICAnYm9vbGVhbicsXG4gICAgICAgICAgICAnc3RyaW5nJyxcbiAgICAgICAgICAgICdza2lwVmFsaWRhdGlvbicsXG4gICAgICAgICAgICAnY291bnQnLFxuICAgICAgICAgICAgJ25vcm1hbGl6ZScsXG4gICAgICAgICAgICAnbnVtYmVyJyxcbiAgICAgICAgICAgICdoaWRkZW5PcHRpb25zJyxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3Qgb2JqZWN0T3B0aW9ucyA9IFtcbiAgICAgICAgICAgICduYXJnJyxcbiAgICAgICAgICAgICdrZXknLFxuICAgICAgICAgICAgJ2FsaWFzJyxcbiAgICAgICAgICAgICdkZWZhdWx0JyxcbiAgICAgICAgICAgICdkZWZhdWx0RGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgJ2NvbmZpZycsXG4gICAgICAgICAgICAnY2hvaWNlcycsXG4gICAgICAgICAgICAnZGVtYW5kZWRPcHRpb25zJyxcbiAgICAgICAgICAgICdkZW1hbmRlZENvbW1hbmRzJyxcbiAgICAgICAgICAgICdkZXByZWNhdGVkT3B0aW9ucycsXG4gICAgICAgIF07XG4gICAgICAgIGFycmF5T3B0aW9ucy5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgdG1wT3B0aW9uc1trXSA9IChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKVtrXSB8fCBbXSkuZmlsdGVyKChrKSA9PiAhbG9jYWxMb29rdXBba10pO1xuICAgICAgICB9KTtcbiAgICAgICAgb2JqZWN0T3B0aW9ucy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgICAgICB0bXBPcHRpb25zW2tdID0gb2JqRmlsdGVyKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpW2tdLCBrID0+ICFsb2NhbExvb2t1cFtrXSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0bXBPcHRpb25zLmVudlByZWZpeCA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmVudlByZWZpeDtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCB0bXBPcHRpb25zLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKVxuICAgICAgICAgICAgPyBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikucmVzZXQobG9jYWxMb29rdXApXG4gICAgICAgICAgICA6IFVzYWdlKHRoaXMsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpKSwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiwgXCJmXCIpXG4gICAgICAgICAgICA/IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiwgXCJmXCIpLnJlc2V0KGxvY2FsTG9va3VwKVxuICAgICAgICAgICAgOiBWYWxpZGF0aW9uKHRoaXMsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikpLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLCBcImZcIilcbiAgICAgICAgICAgID8gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLCBcImZcIikucmVzZXQoKVxuICAgICAgICAgICAgOiBDb21tYW5kKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBcImZcIiksIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZ2xvYmFsTWlkZGxld2FyZSwgXCJmXCIpLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKSksIFwiZlwiKTtcbiAgICAgICAgaWYgKCFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb24sIFwiZlwiKSlcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbiwgQ29tcGxldGlvbih0aGlzLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIiksIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgXCJmXCIpLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKSksIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9nbG9iYWxNaWRkbGV3YXJlLCBcImZcIikucmVzZXQoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uQ29tbWFuZCwgbnVsbCwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX291dHB1dCwgJycsIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9leGl0RXJyb3IsIG51bGwsIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9oYXNPdXRwdXQsIGZhbHNlLCBcImZcIik7XG4gICAgICAgIHRoaXMucGFyc2VkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBba1JlYmFzZV0oYmFzZSwgZGlyKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5wYXRoLnJlbGF0aXZlKGJhc2UsIGRpcik7XG4gICAgfVxuICAgIFtrUnVuWWFyZ3NQYXJzZXJBbmRFeGVjdXRlQ29tbWFuZHNdKGFyZ3MsIHNob3J0Q2lyY3VpdCwgY2FsbGVkRnJvbUNvbW1hbmQsIGNvbW1hbmRJbmRleCA9IDAsIGhlbHBPbmx5ID0gZmFsc2UpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgICAgICBsZXQgc2tpcFZhbGlkYXRpb24gPSAhIWNhbGxlZEZyb21Db21tYW5kIHx8IGhlbHBPbmx5O1xuICAgICAgICBhcmdzID0gYXJncyB8fCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3Byb2Nlc3NBcmdzLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLl9fID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikueTE4bi5fXztcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuY29uZmlndXJhdGlvbiA9IHRoaXNba0dldFBhcnNlckNvbmZpZ3VyYXRpb25dKCk7XG4gICAgICAgIGNvbnN0IHBvcHVsYXRlRG91YmxlRGFzaCA9ICEhX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuY29uZmlndXJhdGlvblsncG9wdWxhdGUtLSddO1xuICAgICAgICBjb25zdCBjb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5jb25maWd1cmF0aW9uLCB7XG4gICAgICAgICAgICAncG9wdWxhdGUtLSc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5QYXJzZXIuZGV0YWlsZWQoYXJncywgT2JqZWN0LmFzc2lnbih7fSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIiksIHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IHsgJ3BhcnNlLXBvc2l0aW9uYWwtbnVtYmVycyc6IGZhbHNlLCAuLi5jb25maWcgfSxcbiAgICAgICAgfSkpO1xuICAgICAgICBjb25zdCBhcmd2ID0gT2JqZWN0LmFzc2lnbihwYXJzZWQuYXJndiwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZUNvbnRleHQsIFwiZlwiKSk7XG4gICAgICAgIGxldCBhcmd2UHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgYWxpYXNlcyA9IHBhcnNlZC5hbGlhc2VzO1xuICAgICAgICBsZXQgaGVscE9wdFNldCA9IGZhbHNlO1xuICAgICAgICBsZXQgdmVyc2lvbk9wdFNldCA9IGZhbHNlO1xuICAgICAgICBPYmplY3Qua2V5cyhhcmd2KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hlbHBPcHQsIFwiZlwiKSAmJiBhcmd2W2tleV0pIHtcbiAgICAgICAgICAgICAgICBoZWxwT3B0U2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92ZXJzaW9uT3B0LCBcImZcIikgJiYgYXJndltrZXldKSB7XG4gICAgICAgICAgICAgICAgdmVyc2lvbk9wdFNldCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBhcmd2LiQwID0gdGhpcy4kMDtcbiAgICAgICAgdGhpcy5wYXJzZWQgPSBwYXJzZWQ7XG4gICAgICAgIGlmIChjb21tYW5kSW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5jbGVhckNhY2hlZEhlbHBNZXNzYWdlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXNba0d1ZXNzTG9jYWxlXSgpO1xuICAgICAgICAgICAgaWYgKHNob3J0Q2lyY3VpdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2tQb3N0UHJvY2Vzc10oYXJndiwgcG9wdWxhdGVEb3VibGVEYXNoLCAhIWNhbGxlZEZyb21Db21tYW5kLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9oZWxwT3B0LCBcImZcIikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWxwQ21kcyA9IFtfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hlbHBPcHQsIFwiZlwiKV1cbiAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChhbGlhc2VzW19fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaGVscE9wdCwgXCJmXCIpXSB8fCBbXSlcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihrID0+IGsubGVuZ3RoID4gMSk7XG4gICAgICAgICAgICAgICAgaWYgKGhlbHBDbWRzLmluY2x1ZGVzKCcnICsgYXJndi5fW2FyZ3YuXy5sZW5ndGggLSAxXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJndi5fLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBoZWxwT3B0U2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2lzR2xvYmFsQ29udGV4dCwgZmFsc2UsIFwiZlwiKTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJLZXlzID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLCBcImZcIikuZ2V0Q29tbWFuZHMoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RDb21wbGV0aW9ucyA9ICgoX2EgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb24sIFwiZlwiKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvbXBsZXRpb25LZXkpXG4gICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgIChfYiA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbiwgXCJmXCIpKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY29tcGxldGlvbktleSxcbiAgICAgICAgICAgICAgICAgICAgLi4uKChfZCA9IHRoaXMuZ2V0QWxpYXNlcygpWyhfYyA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbiwgXCJmXCIpKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuY29tcGxldGlvbktleV0pICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IFtdKSxcbiAgICAgICAgICAgICAgICBdLnNvbWUoKGtleSkgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFyZ3YsIGtleSkpXG4gICAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHNraXBSZWNvbW1lbmRhdGlvbiA9IGhlbHBPcHRTZXQgfHwgcmVxdWVzdENvbXBsZXRpb25zIHx8IGhlbHBPbmx5O1xuICAgICAgICAgICAgaWYgKGFyZ3YuXy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFuZGxlcktleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBmaXJzdFVua25vd25Db21tYW5kO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gY29tbWFuZEluZGV4IHx8IDAsIGNtZDsgYXJndi5fW2ldICE9PSB1bmRlZmluZWQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY21kID0gU3RyaW5nKGFyZ3YuX1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlcktleXMuaW5jbHVkZXMoY21kKSAmJiBjbWQgIT09IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbkNvbW1hbmQsIFwiZlwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlubmVyQXJndiA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgXCJmXCIpLnJ1bkNvbW1hbmQoY21kLCB0aGlzLCBwYXJzZWQsIGkgKyAxLCBoZWxwT25seSwgaGVscE9wdFNldCB8fCB2ZXJzaW9uT3B0U2V0IHx8IGhlbHBPbmx5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1trUG9zdFByb2Nlc3NdKGlubmVyQXJndiwgcG9wdWxhdGVEb3VibGVEYXNoLCAhIWNhbGxlZEZyb21Db21tYW5kLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghZmlyc3RVbmtub3duQ29tbWFuZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZCAhPT0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uQ29tbWFuZCwgXCJmXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RVbmtub3duQ29tbWFuZCA9IGNtZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgXCJmXCIpLmhhc0RlZmF1bHRDb21tYW5kKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcmVjb21tZW5kQ29tbWFuZHMsIFwiZlwiKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RVbmtub3duQ29tbWFuZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIXNraXBSZWNvbW1lbmRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBcImZcIikucmVjb21tZW5kQ29tbWFuZHMoZmlyc3RVbmtub3duQ29tbWFuZCwgaGFuZGxlcktleXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb25Db21tYW5kLCBcImZcIikgJiZcbiAgICAgICAgICAgICAgICAgICAgYXJndi5fLmluY2x1ZGVzKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbkNvbW1hbmQsIFwiZlwiKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgIXJlcXVlc3RDb21wbGV0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9leGl0UHJvY2VzcywgXCJmXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmxvY2tpbmcodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0NvbXBsZXRpb25TY3JpcHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leGl0KDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQsIFwiZlwiKS5oYXNEZWZhdWx0Q29tbWFuZCgpICYmICFza2lwUmVjb21tZW5kYXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbm5lckFyZ3YgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQsIFwiZlwiKS5ydW5Db21tYW5kKG51bGwsIHRoaXMsIHBhcnNlZCwgMCwgaGVscE9ubHksIGhlbHBPcHRTZXQgfHwgdmVyc2lvbk9wdFNldCB8fCBoZWxwT25seSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNba1Bvc3RQcm9jZXNzXShpbm5lckFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCwgISFjYWxsZWRGcm9tQ29tbWFuZCwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3RDb21wbGV0aW9ucykge1xuICAgICAgICAgICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2V4aXRQcm9jZXNzLCBcImZcIikpXG4gICAgICAgICAgICAgICAgICAgIHNldEJsb2NraW5nKHRydWUpO1xuICAgICAgICAgICAgICAgIGFyZ3MgPSBbXS5jb25jYXQoYXJncyk7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tcGxldGlvbkFyZ3MgPSBhcmdzLnNsaWNlKGFyZ3MuaW5kZXhPZihgLS0ke19fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbiwgXCJmXCIpLmNvbXBsZXRpb25LZXl9YCkgKyAxKTtcbiAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb24sIFwiZlwiKS5nZXRDb21wbGV0aW9uKGNvbXBsZXRpb25BcmdzLCAoZXJyLCBjb21wbGV0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihlcnIubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIChjb21wbGV0aW9ucyB8fCBbXSkuZm9yRWFjaChjb21wbGV0aW9uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfbG9nZ2VyLCBcImZcIikubG9nKGNvbXBsZXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leGl0KDApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2tQb3N0UHJvY2Vzc10oYXJndiwgIXBvcHVsYXRlRG91YmxlRGFzaCwgISFjYWxsZWRGcm9tQ29tbWFuZCwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hhc091dHB1dCwgXCJmXCIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhlbHBPcHRTZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZXhpdFByb2Nlc3MsIFwiZlwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEJsb2NraW5nKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBza2lwVmFsaWRhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0hlbHAobWVzc2FnZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2xvZ2dlciwgXCJmXCIpLmxvZyhtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhpdCgwKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZlcnNpb25PcHRTZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZXhpdFByb2Nlc3MsIFwiZlwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEJsb2NraW5nKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBza2lwVmFsaWRhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5zaG93VmVyc2lvbignbG9nJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhpdCgwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXNraXBWYWxpZGF0aW9uICYmIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLnNraXBWYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBza2lwVmFsaWRhdGlvbiA9IE9iamVjdC5rZXlzKGFyZ3YpLnNvbWUoa2V5ID0+IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLnNraXBWYWxpZGF0aW9uLmluZGV4T2Yoa2V5KSA+PSAwICYmIGFyZ3Zba2V5XSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXNraXBWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZC5lcnJvcilcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihwYXJzZWQuZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXF1ZXN0Q29tcGxldGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IHRoaXNba1J1blZhbGlkYXRpb25dKGFsaWFzZXMsIHt9LCBwYXJzZWQuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbGxlZEZyb21Db21tYW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmd2UHJvbWlzZSA9IGFwcGx5TWlkZGxld2FyZShhcmd2LCB0aGlzLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2dsb2JhbE1pZGRsZXdhcmUsIFwiZlwiKS5nZXRNaWRkbGV3YXJlKCksIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFyZ3ZQcm9taXNlID0gdGhpc1trVmFsaWRhdGVBc3luY10odmFsaWRhdGlvbiwgYXJndlByb21pc2UgIT09IG51bGwgJiYgYXJndlByb21pc2UgIT09IHZvaWQgMCA/IGFyZ3ZQcm9taXNlIDogYXJndik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1Byb21pc2UoYXJndlByb21pc2UpICYmICFjYWxsZWRGcm9tQ29tbWFuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJndlByb21pc2UgPSBhcmd2UHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBwbHlNaWRkbGV3YXJlKGFyZ3YsIHRoaXMsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZ2xvYmFsTWlkZGxld2FyZSwgXCJmXCIpLmdldE1pZGRsZXdhcmUoKSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFlFcnJvcilcbiAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuZmFpbChlcnIubWVzc2FnZSwgZXJyKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXNba1Bvc3RQcm9jZXNzXShhcmd2UHJvbWlzZSAhPT0gbnVsbCAmJiBhcmd2UHJvbWlzZSAhPT0gdm9pZCAwID8gYXJndlByb21pc2UgOiBhcmd2LCBwb3B1bGF0ZURvdWJsZURhc2gsICEhY2FsbGVkRnJvbUNvbW1hbmQsIHRydWUpO1xuICAgIH1cbiAgICBba1J1blZhbGlkYXRpb25dKGFsaWFzZXMsIHBvc2l0aW9uYWxNYXAsIHBhcnNlRXJyb3JzLCBpc0RlZmF1bHRDb21tYW5kKSB7XG4gICAgICAgIGNvbnN0IGRlbWFuZGVkT3B0aW9ucyA9IHsgLi4udGhpcy5nZXREZW1hbmRlZE9wdGlvbnMoKSB9O1xuICAgICAgICByZXR1cm4gKGFyZ3YpID0+IHtcbiAgICAgICAgICAgIGlmIChwYXJzZUVycm9ycylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWUVycm9yKHBhcnNlRXJyb3JzLm1lc3NhZ2UpO1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBcImZcIikubm9uT3B0aW9uQ291bnQoYXJndik7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIFwiZlwiKS5yZXF1aXJlZEFyZ3VtZW50cyhhcmd2LCBkZW1hbmRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgbGV0IGZhaWxlZFN0cmljdENvbW1hbmRzID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3RDb21tYW5kcywgXCJmXCIpKSB7XG4gICAgICAgICAgICAgICAgZmFpbGVkU3RyaWN0Q29tbWFuZHMgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIFwiZlwiKS51bmtub3duQ29tbWFuZHMoYXJndik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3QsIFwiZlwiKSAmJiAhZmFpbGVkU3RyaWN0Q29tbWFuZHMpIHtcbiAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIFwiZlwiKS51bmtub3duQXJndW1lbnRzKGFyZ3YsIGFsaWFzZXMsIHBvc2l0aW9uYWxNYXAsICEhaXNEZWZhdWx0Q29tbWFuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3N0cmljdE9wdGlvbnMsIFwiZlwiKSkge1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiwgXCJmXCIpLnVua25vd25Bcmd1bWVudHMoYXJndiwgYWxpYXNlcywge30sIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIFwiZlwiKS5saW1pdGVkQ2hvaWNlcyhhcmd2KTtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiwgXCJmXCIpLmltcGxpY2F0aW9ucyhhcmd2KTtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiwgXCJmXCIpLmNvbmZsaWN0aW5nKGFyZ3YpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBba1NldEhhc091dHB1dF0oKSB7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaGFzT3V0cHV0LCB0cnVlLCBcImZcIik7XG4gICAgfVxuICAgIFtrVHJhY2tNYW51YWxseVNldEtleXNdKGtleXMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXlzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikua2V5W2tleXNdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgayBvZiBrZXlzKSB7XG4gICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikua2V5W2tdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1lhcmdzSW5zdGFuY2UoeSkge1xuICAgIHJldHVybiAhIXkgJiYgdHlwZW9mIHkuZ2V0SW50ZXJuYWxNZXRob2RzID09PSAnZnVuY3Rpb24nO1xufVxuIiwiaW1wb3J0IHsgb2JqZWN0S2V5cyB9IGZyb20gJy4uL3R5cGluZ3MvY29tbW9uLXR5cGVzLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBvYmpGaWx0ZXIob3JpZ2luYWwgPSB7fSwgZmlsdGVyID0gKCkgPT4gdHJ1ZSkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgIG9iamVjdEtleXMob3JpZ2luYWwpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKGZpbHRlcihrZXksIG9yaWdpbmFsW2tleV0pKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IG9yaWdpbmFsW2tleV07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gb2JqO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0QmxvY2tpbmcoYmxvY2tpbmcpIHtcbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICByZXR1cm47XG4gICAgW3Byb2Nlc3Muc3Rkb3V0LCBwcm9jZXNzLnN0ZGVycl0uZm9yRWFjaChfc3RyZWFtID0+IHtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gX3N0cmVhbTtcbiAgICAgICAgaWYgKHN0cmVhbS5faGFuZGxlICYmXG4gICAgICAgICAgICBzdHJlYW0uaXNUVFkgJiZcbiAgICAgICAgICAgIHR5cGVvZiBzdHJlYW0uX2hhbmRsZS5zZXRCbG9ja2luZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgc3RyZWFtLl9oYW5kbGUuc2V0QmxvY2tpbmcoYmxvY2tpbmcpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgeyBvYmpGaWx0ZXIgfSBmcm9tICcuL3V0aWxzL29iai1maWx0ZXIuanMnO1xuaW1wb3J0IHsgWUVycm9yIH0gZnJvbSAnLi95ZXJyb3IuanMnO1xuaW1wb3J0IHNldEJsb2NraW5nIGZyb20gJy4vdXRpbHMvc2V0LWJsb2NraW5nLmpzJztcbmZ1bmN0aW9uIGlzQm9vbGVhbihmYWlsKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBmYWlsID09PSAnYm9vbGVhbic7XG59XG5leHBvcnQgZnVuY3Rpb24gdXNhZ2UoeWFyZ3MsIHNoaW0pIHtcbiAgICBjb25zdCBfXyA9IHNoaW0ueTE4bi5fXztcbiAgICBjb25zdCBzZWxmID0ge307XG4gICAgY29uc3QgZmFpbHMgPSBbXTtcbiAgICBzZWxmLmZhaWxGbiA9IGZ1bmN0aW9uIGZhaWxGbihmKSB7XG4gICAgICAgIGZhaWxzLnB1c2goZik7XG4gICAgfTtcbiAgICBsZXQgZmFpbE1lc3NhZ2UgPSBudWxsO1xuICAgIGxldCBnbG9iYWxGYWlsTWVzc2FnZSA9IG51bGw7XG4gICAgbGV0IHNob3dIZWxwT25GYWlsID0gdHJ1ZTtcbiAgICBzZWxmLnNob3dIZWxwT25GYWlsID0gZnVuY3Rpb24gc2hvd0hlbHBPbkZhaWxGbihhcmcxID0gdHJ1ZSwgYXJnMikge1xuICAgICAgICBjb25zdCBbZW5hYmxlZCwgbWVzc2FnZV0gPSB0eXBlb2YgYXJnMSA9PT0gJ3N0cmluZycgPyBbdHJ1ZSwgYXJnMV0gOiBbYXJnMSwgYXJnMl07XG4gICAgICAgIGlmICh5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5pc0dsb2JhbENvbnRleHQoKSkge1xuICAgICAgICAgICAgZ2xvYmFsRmFpbE1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIGZhaWxNZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgc2hvd0hlbHBPbkZhaWwgPSBlbmFibGVkO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGxldCBmYWlsdXJlT3V0cHV0ID0gZmFsc2U7XG4gICAgc2VsZi5mYWlsID0gZnVuY3Rpb24gZmFpbChtc2csIGVycikge1xuICAgICAgICBjb25zdCBsb2dnZXIgPSB5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRMb2dnZXJJbnN0YW5jZSgpO1xuICAgICAgICBpZiAoZmFpbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gZmFpbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmYWlsID0gZmFpbHNbaV07XG4gICAgICAgICAgICAgICAgaWYgKGlzQm9vbGVhbihmYWlsKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtc2cpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihtc2cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmFpbChtc2csIGVyciwgc2VsZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHlhcmdzLmdldEV4aXRQcm9jZXNzKCkpXG4gICAgICAgICAgICAgICAgc2V0QmxvY2tpbmcodHJ1ZSk7XG4gICAgICAgICAgICBpZiAoIWZhaWx1cmVPdXRwdXQpIHtcbiAgICAgICAgICAgICAgICBmYWlsdXJlT3V0cHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvd0hlbHBPbkZhaWwpIHtcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3Muc2hvd0hlbHAoJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobXNnIHx8IGVycilcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKG1zZyB8fCBlcnIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdsb2JhbE9yQ29tbWFuZEZhaWxNZXNzYWdlID0gZmFpbE1lc3NhZ2UgfHwgZ2xvYmFsRmFpbE1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgaWYgKGdsb2JhbE9yQ29tbWFuZEZhaWxNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtc2cgfHwgZXJyKVxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGdsb2JhbE9yQ29tbWFuZEZhaWxNZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlcnIgPSBlcnIgfHwgbmV3IFlFcnJvcihtc2cpO1xuICAgICAgICAgICAgaWYgKHlhcmdzLmdldEV4aXRQcm9jZXNzKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geWFyZ3MuZXhpdCgxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmhhc1BhcnNlQ2FsbGJhY2soKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB5YXJncy5leGl0KDEsIGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGxldCB1c2FnZXMgPSBbXTtcbiAgICBsZXQgdXNhZ2VEaXNhYmxlZCA9IGZhbHNlO1xuICAgIHNlbGYudXNhZ2UgPSAobXNnLCBkZXNjcmlwdGlvbikgPT4ge1xuICAgICAgICBpZiAobXNnID09PSBudWxsKSB7XG4gICAgICAgICAgICB1c2FnZURpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHVzYWdlcyA9IFtdO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICAgIH1cbiAgICAgICAgdXNhZ2VEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB1c2FnZXMucHVzaChbbXNnLCBkZXNjcmlwdGlvbiB8fCAnJ10pO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2V0VXNhZ2UgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB1c2FnZXM7XG4gICAgfTtcbiAgICBzZWxmLmdldFVzYWdlRGlzYWJsZWQgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB1c2FnZURpc2FibGVkO1xuICAgIH07XG4gICAgc2VsZi5nZXRQb3NpdGlvbmFsR3JvdXBOYW1lID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gX18oJ1Bvc2l0aW9uYWxzOicpO1xuICAgIH07XG4gICAgbGV0IGV4YW1wbGVzID0gW107XG4gICAgc2VsZi5leGFtcGxlID0gKGNtZCwgZGVzY3JpcHRpb24pID0+IHtcbiAgICAgICAgZXhhbXBsZXMucHVzaChbY21kLCBkZXNjcmlwdGlvbiB8fCAnJ10pO1xuICAgIH07XG4gICAgbGV0IGNvbW1hbmRzID0gW107XG4gICAgc2VsZi5jb21tYW5kID0gZnVuY3Rpb24gY29tbWFuZChjbWQsIGRlc2NyaXB0aW9uLCBpc0RlZmF1bHQsIGFsaWFzZXMsIGRlcHJlY2F0ZWQgPSBmYWxzZSkge1xuICAgICAgICBpZiAoaXNEZWZhdWx0KSB7XG4gICAgICAgICAgICBjb21tYW5kcyA9IGNvbW1hbmRzLm1hcChjbWRBcnJheSA9PiB7XG4gICAgICAgICAgICAgICAgY21kQXJyYXlbMl0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY21kQXJyYXk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb21tYW5kcy5wdXNoKFtjbWQsIGRlc2NyaXB0aW9uIHx8ICcnLCBpc0RlZmF1bHQsIGFsaWFzZXMsIGRlcHJlY2F0ZWRdKTtcbiAgICB9O1xuICAgIHNlbGYuZ2V0Q29tbWFuZHMgPSAoKSA9PiBjb21tYW5kcztcbiAgICBsZXQgZGVzY3JpcHRpb25zID0ge307XG4gICAgc2VsZi5kZXNjcmliZSA9IGZ1bmN0aW9uIGRlc2NyaWJlKGtleU9yS2V5cywgZGVzYykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShrZXlPcktleXMpKSB7XG4gICAgICAgICAgICBrZXlPcktleXMuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICBzZWxmLmRlc2NyaWJlKGssIGRlc2MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGtleU9yS2V5cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGtleU9yS2V5cykuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICBzZWxmLmRlc2NyaWJlKGssIGtleU9yS2V5c1trXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uc1trZXlPcktleXNdID0gZGVzYztcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5nZXREZXNjcmlwdGlvbnMgPSAoKSA9PiBkZXNjcmlwdGlvbnM7XG4gICAgbGV0IGVwaWxvZ3MgPSBbXTtcbiAgICBzZWxmLmVwaWxvZyA9IG1zZyA9PiB7XG4gICAgICAgIGVwaWxvZ3MucHVzaChtc2cpO1xuICAgIH07XG4gICAgbGV0IHdyYXBTZXQgPSBmYWxzZTtcbiAgICBsZXQgd3JhcDtcbiAgICBzZWxmLndyYXAgPSBjb2xzID0+IHtcbiAgICAgICAgd3JhcFNldCA9IHRydWU7XG4gICAgICAgIHdyYXAgPSBjb2xzO1xuICAgIH07XG4gICAgc2VsZi5nZXRXcmFwID0gKCkgPT4ge1xuICAgICAgICBpZiAoc2hpbS5nZXRFbnYoJ1lBUkdTX0RJU0FCTEVfV1JBUCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXdyYXBTZXQpIHtcbiAgICAgICAgICAgIHdyYXAgPSB3aW5kb3dXaWR0aCgpO1xuICAgICAgICAgICAgd3JhcFNldCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdyYXA7XG4gICAgfTtcbiAgICBjb25zdCBkZWZlclkxOG5Mb29rdXBQcmVmaXggPSAnX195YXJnc1N0cmluZ19fOic7XG4gICAgc2VsZi5kZWZlclkxOG5Mb29rdXAgPSBzdHIgPT4gZGVmZXJZMThuTG9va3VwUHJlZml4ICsgc3RyO1xuICAgIHNlbGYuaGVscCA9IGZ1bmN0aW9uIGhlbHAoKSB7XG4gICAgICAgIGlmIChjYWNoZWRIZWxwTWVzc2FnZSlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRIZWxwTWVzc2FnZTtcbiAgICAgICAgbm9ybWFsaXplQWxpYXNlcygpO1xuICAgICAgICBjb25zdCBiYXNlJDAgPSB5YXJncy5jdXN0b21TY3JpcHROYW1lXG4gICAgICAgICAgICA/IHlhcmdzLiQwXG4gICAgICAgICAgICA6IHNoaW0ucGF0aC5iYXNlbmFtZSh5YXJncy4kMCk7XG4gICAgICAgIGNvbnN0IGRlbWFuZGVkT3B0aW9ucyA9IHlhcmdzLmdldERlbWFuZGVkT3B0aW9ucygpO1xuICAgICAgICBjb25zdCBkZW1hbmRlZENvbW1hbmRzID0geWFyZ3MuZ2V0RGVtYW5kZWRDb21tYW5kcygpO1xuICAgICAgICBjb25zdCBkZXByZWNhdGVkT3B0aW9ucyA9IHlhcmdzLmdldERlcHJlY2F0ZWRPcHRpb25zKCk7XG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IHlhcmdzLmdldEdyb3VwcygpO1xuICAgICAgICBjb25zdCBvcHRpb25zID0geWFyZ3MuZ2V0T3B0aW9ucygpO1xuICAgICAgICBsZXQga2V5cyA9IFtdO1xuICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoT2JqZWN0LmtleXMoZGVzY3JpcHRpb25zKSk7XG4gICAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhkZW1hbmRlZE9wdGlvbnMpKTtcbiAgICAgICAga2V5cyA9IGtleXMuY29uY2F0KE9iamVjdC5rZXlzKGRlbWFuZGVkQ29tbWFuZHMpKTtcbiAgICAgICAga2V5cyA9IGtleXMuY29uY2F0KE9iamVjdC5rZXlzKG9wdGlvbnMuZGVmYXVsdCkpO1xuICAgICAgICBrZXlzID0ga2V5cy5maWx0ZXIoZmlsdGVySGlkZGVuT3B0aW9ucyk7XG4gICAgICAgIGtleXMgPSBPYmplY3Qua2V5cyhrZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkgIT09ICdfJylcbiAgICAgICAgICAgICAgICBhY2Nba2V5XSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSkpO1xuICAgICAgICBjb25zdCB0aGVXcmFwID0gc2VsZi5nZXRXcmFwKCk7XG4gICAgICAgIGNvbnN0IHVpID0gc2hpbS5jbGl1aSh7XG4gICAgICAgICAgICB3aWR0aDogdGhlV3JhcCxcbiAgICAgICAgICAgIHdyYXA6ICEhdGhlV3JhcCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdXNhZ2VEaXNhYmxlZCkge1xuICAgICAgICAgICAgaWYgKHVzYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB1c2FnZXMuZm9yRWFjaCh1c2FnZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdih7IHRleHQ6IGAke3VzYWdlWzBdLnJlcGxhY2UoL1xcJDAvZywgYmFzZSQwKX1gIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAodXNhZ2VbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVpLmRpdih7IHRleHQ6IGAke3VzYWdlWzFdfWAsIHBhZGRpbmc6IFsxLCAwLCAwLCAwXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHVpLmRpdigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29tbWFuZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHUgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChkZW1hbmRlZENvbW1hbmRzLl8pIHtcbiAgICAgICAgICAgICAgICAgICAgdSA9IGAke2Jhc2UkMH0gPCR7X18oJ2NvbW1hbmQnKX0+XFxuYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHUgPSBgJHtiYXNlJDB9IFske19fKCdjb21tYW5kJyl9XVxcbmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHVpLmRpdihgJHt1fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb21tYW5kcy5sZW5ndGggPiAxIHx8IChjb21tYW5kcy5sZW5ndGggPT09IDEgJiYgIWNvbW1hbmRzWzBdWzJdKSkge1xuICAgICAgICAgICAgdWkuZGl2KF9fKCdDb21tYW5kczonKSk7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0geWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0Q29udGV4dCgpO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50Q29tbWFuZHMgPSBjb250ZXh0LmNvbW1hbmRzLmxlbmd0aFxuICAgICAgICAgICAgICAgID8gYCR7Y29udGV4dC5jb21tYW5kcy5qb2luKCcgJyl9IGBcbiAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgaWYgKHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldFBhcnNlckNvbmZpZ3VyYXRpb24oKVsnc29ydC1jb21tYW5kcyddID09PVxuICAgICAgICAgICAgICAgIHRydWUpIHtcbiAgICAgICAgICAgICAgICBjb21tYW5kcyA9IGNvbW1hbmRzLnNvcnQoKGEsIGIpID0+IGFbMF0ubG9jYWxlQ29tcGFyZShiWzBdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSBiYXNlJDAgPyBgJHtiYXNlJDB9IGAgOiAnJztcbiAgICAgICAgICAgIGNvbW1hbmRzLmZvckVhY2goY29tbWFuZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tbWFuZFN0cmluZyA9IGAke3ByZWZpeH0ke3BhcmVudENvbW1hbmRzfSR7Y29tbWFuZFswXS5yZXBsYWNlKC9eXFwkMCA/LywgJycpfWA7XG4gICAgICAgICAgICAgICAgdWkuc3Bhbih7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGNvbW1hbmRTdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAyLCAwLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG1heFdpZHRoKGNvbW1hbmRzLCB0aGVXcmFwLCBgJHtiYXNlJDB9JHtwYXJlbnRDb21tYW5kc31gKSArIDQsXG4gICAgICAgICAgICAgICAgfSwgeyB0ZXh0OiBjb21tYW5kWzFdIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhpbnRzID0gW107XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRbMl0pXG4gICAgICAgICAgICAgICAgICAgIGhpbnRzLnB1c2goYFske19fKCdkZWZhdWx0Jyl9XWApO1xuICAgICAgICAgICAgICAgIGlmIChjb21tYW5kWzNdICYmIGNvbW1hbmRbM10ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGhpbnRzLnB1c2goYFske19fKCdhbGlhc2VzOicpfSAke2NvbW1hbmRbM10uam9pbignLCAnKX1dYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb21tYW5kWzRdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29tbWFuZFs0XSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRzLnB1c2goYFske19fKCdkZXByZWNhdGVkOiAlcycsIGNvbW1hbmRbNF0pfV1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRzLnB1c2goYFske19fKCdkZXByZWNhdGVkJyl9XWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChoaW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdWkuZGl2KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGhpbnRzLmpvaW4oJyAnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAwLCAwLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduOiAncmlnaHQnLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWxpYXNLZXlzID0gKE9iamVjdC5rZXlzKG9wdGlvbnMuYWxpYXMpIHx8IFtdKS5jb25jYXQoT2JqZWN0LmtleXMoeWFyZ3MucGFyc2VkLm5ld0FsaWFzZXMpIHx8IFtdKTtcbiAgICAgICAga2V5cyA9IGtleXMuZmlsdGVyKGtleSA9PiAheWFyZ3MucGFyc2VkLm5ld0FsaWFzZXNba2V5XSAmJlxuICAgICAgICAgICAgYWxpYXNLZXlzLmV2ZXJ5KGFsaWFzID0+IChvcHRpb25zLmFsaWFzW2FsaWFzXSB8fCBbXSkuaW5kZXhPZihrZXkpID09PSAtMSkpO1xuICAgICAgICBjb25zdCBkZWZhdWx0R3JvdXAgPSBfXygnT3B0aW9uczonKTtcbiAgICAgICAgaWYgKCFncm91cHNbZGVmYXVsdEdyb3VwXSlcbiAgICAgICAgICAgIGdyb3Vwc1tkZWZhdWx0R3JvdXBdID0gW107XG4gICAgICAgIGFkZFVuZ3JvdXBlZEtleXMoa2V5cywgb3B0aW9ucy5hbGlhcywgZ3JvdXBzLCBkZWZhdWx0R3JvdXApO1xuICAgICAgICBjb25zdCBpc0xvbmdTd2l0Y2ggPSAoc3cpID0+IC9eLS0vLnRlc3QoZ2V0VGV4dChzdykpO1xuICAgICAgICBjb25zdCBkaXNwbGF5ZWRHcm91cHMgPSBPYmplY3Qua2V5cyhncm91cHMpXG4gICAgICAgICAgICAuZmlsdGVyKGdyb3VwTmFtZSA9PiBncm91cHNbZ3JvdXBOYW1lXS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgLm1hcChncm91cE5hbWUgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEtleXMgPSBncm91cHNbZ3JvdXBOYW1lXVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoZmlsdGVySGlkZGVuT3B0aW9ucylcbiAgICAgICAgICAgICAgICAubWFwKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGFsaWFzS2V5cy5pbmNsdWRlcyhrZXkpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBhbGlhc0tleTsgKGFsaWFzS2V5ID0gYWxpYXNLZXlzW2ldKSAhPT0gdW5kZWZpbmVkOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChvcHRpb25zLmFsaWFzW2FsaWFzS2V5XSB8fCBbXSkuaW5jbHVkZXMoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGlhc0tleTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgZ3JvdXBOYW1lLCBub3JtYWxpemVkS2V5cyB9O1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcigoeyBub3JtYWxpemVkS2V5cyB9KSA9PiBub3JtYWxpemVkS2V5cy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgLm1hcCgoeyBncm91cE5hbWUsIG5vcm1hbGl6ZWRLZXlzIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN3aXRjaGVzID0gbm9ybWFsaXplZEtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGFjY1trZXldID0gW2tleV1cbiAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChvcHRpb25zLmFsaWFzW2tleV0gfHwgW10pXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoc3cgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXBOYW1lID09PSBzZWxmLmdldFBvc2l0aW9uYWxHcm91cE5hbWUoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdztcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCgvXlswLTldJC8udGVzdChzdylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG9wdGlvbnMuYm9vbGVhbi5pbmNsdWRlcyhrZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJy0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJy0tJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3cubGVuZ3RoID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICctLSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnLScpICsgc3cpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLnNvcnQoKHN3MSwgc3cyKSA9PiBpc0xvbmdTd2l0Y2goc3cxKSA9PT0gaXNMb25nU3dpdGNoKHN3MilcbiAgICAgICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgICAgIDogaXNMb25nU3dpdGNoKHN3MSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAtMSlcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICAgIHJldHVybiB7IGdyb3VwTmFtZSwgbm9ybWFsaXplZEtleXMsIHN3aXRjaGVzIH07XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzaG9ydFN3aXRjaGVzVXNlZCA9IGRpc3BsYXllZEdyb3Vwc1xuICAgICAgICAgICAgLmZpbHRlcigoeyBncm91cE5hbWUgfSkgPT4gZ3JvdXBOYW1lICE9PSBzZWxmLmdldFBvc2l0aW9uYWxHcm91cE5hbWUoKSlcbiAgICAgICAgICAgIC5zb21lKCh7IG5vcm1hbGl6ZWRLZXlzLCBzd2l0Y2hlcyB9KSA9PiAhbm9ybWFsaXplZEtleXMuZXZlcnkoa2V5ID0+IGlzTG9uZ1N3aXRjaChzd2l0Y2hlc1trZXldKSkpO1xuICAgICAgICBpZiAoc2hvcnRTd2l0Y2hlc1VzZWQpIHtcbiAgICAgICAgICAgIGRpc3BsYXllZEdyb3Vwc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHsgZ3JvdXBOYW1lIH0pID0+IGdyb3VwTmFtZSAhPT0gc2VsZi5nZXRQb3NpdGlvbmFsR3JvdXBOYW1lKCkpXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKHsgbm9ybWFsaXplZEtleXMsIHN3aXRjaGVzIH0pID0+IHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0xvbmdTd2l0Y2goc3dpdGNoZXNba2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaGVzW2tleV0gPSBhZGRJbmRlbnRhdGlvbihzd2l0Y2hlc1trZXldLCAnLXgsICcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZGlzcGxheWVkR3JvdXBzLmZvckVhY2goKHsgZ3JvdXBOYW1lLCBub3JtYWxpemVkS2V5cywgc3dpdGNoZXMgfSkgPT4ge1xuICAgICAgICAgICAgdWkuZGl2KGdyb3VwTmFtZSk7XG4gICAgICAgICAgICBub3JtYWxpemVkS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga3N3aXRjaCA9IHN3aXRjaGVzW2tleV07XG4gICAgICAgICAgICAgICAgbGV0IGRlc2MgPSBkZXNjcmlwdGlvbnNba2V5XSB8fCAnJztcbiAgICAgICAgICAgICAgICBsZXQgdHlwZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGRlc2MuaW5jbHVkZXMoZGVmZXJZMThuTG9va3VwUHJlZml4KSlcbiAgICAgICAgICAgICAgICAgICAgZGVzYyA9IF9fKGRlc2Muc3Vic3RyaW5nKGRlZmVyWTE4bkxvb2t1cFByZWZpeC5sZW5ndGgpKTtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ib29sZWFuLmluY2x1ZGVzKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ2Jvb2xlYW4nKX1dYDtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5jb3VudC5pbmNsdWRlcyhrZXkpKVxuICAgICAgICAgICAgICAgICAgICB0eXBlID0gYFske19fKCdjb3VudCcpfV1gO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnN0cmluZy5pbmNsdWRlcyhrZXkpKVxuICAgICAgICAgICAgICAgICAgICB0eXBlID0gYFske19fKCdzdHJpbmcnKX1dYDtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ub3JtYWxpemUuaW5jbHVkZXMoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnc3RyaW5nJyl9XWA7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXJyYXkuaW5jbHVkZXMoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnYXJyYXknKX1dYDtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5udW1iZXIuaW5jbHVkZXMoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnbnVtYmVyJyl9XWA7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwcmVjYXRlZEV4dHJhID0gKGRlcHJlY2F0ZWQpID0+IHR5cGVvZiBkZXByZWNhdGVkID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IGBbJHtfXygnZGVwcmVjYXRlZDogJXMnLCBkZXByZWNhdGVkKX1dYFxuICAgICAgICAgICAgICAgICAgICA6IGBbJHtfXygnZGVwcmVjYXRlZCcpfV1gO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4dHJhID0gW1xuICAgICAgICAgICAgICAgICAgICBrZXkgaW4gZGVwcmVjYXRlZE9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZGVwcmVjYXRlZEV4dHJhKGRlcHJlY2F0ZWRPcHRpb25zW2tleV0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGtleSBpbiBkZW1hbmRlZE9wdGlvbnMgPyBgWyR7X18oJ3JlcXVpcmVkJyl9XWAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNob2ljZXMgJiYgb3B0aW9ucy5jaG9pY2VzW2tleV1cbiAgICAgICAgICAgICAgICAgICAgICAgID8gYFske19fKCdjaG9pY2VzOicpfSAke3NlbGYuc3RyaW5naWZpZWRWYWx1ZXMob3B0aW9ucy5jaG9pY2VzW2tleV0pfV1gXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRTdHJpbmcob3B0aW9ucy5kZWZhdWx0W2tleV0sIG9wdGlvbnMuZGVmYXVsdERlc2NyaXB0aW9uW2tleV0pLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgICAgICAgICAuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHVpLnNwYW4oe1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBnZXRUZXh0KGtzd2l0Y2gpLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBbMCwgMiwgMCwgMiArIGdldEluZGVudGF0aW9uKGtzd2l0Y2gpXSxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG1heFdpZHRoKHN3aXRjaGVzLCB0aGVXcmFwKSArIDQsXG4gICAgICAgICAgICAgICAgfSwgZGVzYyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkSGlkZU9wdGlvbkV4dHJhcyA9IHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldFVzYWdlQ29uZmlndXJhdGlvbigpWydoaWRlLXR5cGVzJ10gPT09XG4gICAgICAgICAgICAgICAgICAgIHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKGV4dHJhICYmICFzaG91bGRIaWRlT3B0aW9uRXh0cmFzKVxuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoeyB0ZXh0OiBleHRyYSwgcGFkZGluZzogWzAsIDAsIDAsIDJdLCBhbGlnbjogJ3JpZ2h0JyB9KTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB1aS5kaXYoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChleGFtcGxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHVpLmRpdihfXygnRXhhbXBsZXM6JykpO1xuICAgICAgICAgICAgZXhhbXBsZXMuZm9yRWFjaChleGFtcGxlID0+IHtcbiAgICAgICAgICAgICAgICBleGFtcGxlWzBdID0gZXhhbXBsZVswXS5yZXBsYWNlKC9cXCQwL2csIGJhc2UkMCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGV4YW1wbGVzLmZvckVhY2goZXhhbXBsZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV4YW1wbGVbMV0gPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdih7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBleGFtcGxlWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogWzAsIDIsIDAsIDJdLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdih7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBleGFtcGxlWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogWzAsIDIsIDAsIDJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG1heFdpZHRoKGV4YW1wbGVzLCB0aGVXcmFwKSArIDQsXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGV4YW1wbGVbMV0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVwaWxvZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZSA9IGVwaWxvZ3NcbiAgICAgICAgICAgICAgICAubWFwKGVwaWxvZyA9PiBlcGlsb2cucmVwbGFjZSgvXFwkMC9nLCBiYXNlJDApKVxuICAgICAgICAgICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICAgICAgICAgIHVpLmRpdihgJHtlfVxcbmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1aS50b1N0cmluZygpLnJlcGxhY2UoL1xccyokLywgJycpO1xuICAgIH07XG4gICAgZnVuY3Rpb24gbWF4V2lkdGgodGFibGUsIHRoZVdyYXAsIG1vZGlmaWVyKSB7XG4gICAgICAgIGxldCB3aWR0aCA9IDA7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0YWJsZSkpIHtcbiAgICAgICAgICAgIHRhYmxlID0gT2JqZWN0LnZhbHVlcyh0YWJsZSkubWFwKHYgPT4gW3ZdKTtcbiAgICAgICAgfVxuICAgICAgICB0YWJsZS5mb3JFYWNoKHYgPT4ge1xuICAgICAgICAgICAgd2lkdGggPSBNYXRoLm1heChzaGltLnN0cmluZ1dpZHRoKG1vZGlmaWVyID8gYCR7bW9kaWZpZXJ9ICR7Z2V0VGV4dCh2WzBdKX1gIDogZ2V0VGV4dCh2WzBdKSkgKyBnZXRJbmRlbnRhdGlvbih2WzBdKSwgd2lkdGgpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoZVdyYXApXG4gICAgICAgICAgICB3aWR0aCA9IE1hdGgubWluKHdpZHRoLCBwYXJzZUludCgodGhlV3JhcCAqIDAuNSkudG9TdHJpbmcoKSwgMTApKTtcbiAgICAgICAgcmV0dXJuIHdpZHRoO1xuICAgIH1cbiAgICBmdW5jdGlvbiBub3JtYWxpemVBbGlhc2VzKCkge1xuICAgICAgICBjb25zdCBkZW1hbmRlZE9wdGlvbnMgPSB5YXJncy5nZXREZW1hbmRlZE9wdGlvbnMoKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgKE9iamVjdC5rZXlzKG9wdGlvbnMuYWxpYXMpIHx8IFtdKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBvcHRpb25zLmFsaWFzW2tleV0uZm9yRWFjaChhbGlhcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uc1thbGlhc10pXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZGVzY3JpYmUoa2V5LCBkZXNjcmlwdGlvbnNbYWxpYXNdKTtcbiAgICAgICAgICAgICAgICBpZiAoYWxpYXMgaW4gZGVtYW5kZWRPcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICB5YXJncy5kZW1hbmRPcHRpb24oa2V5LCBkZW1hbmRlZE9wdGlvbnNbYWxpYXNdKTtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ib29sZWFuLmluY2x1ZGVzKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3MuYm9vbGVhbihrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmNvdW50LmluY2x1ZGVzKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3MuY291bnQoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zdHJpbmcuaW5jbHVkZXMoYWxpYXMpKVxuICAgICAgICAgICAgICAgICAgICB5YXJncy5zdHJpbmcoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ub3JtYWxpemUuaW5jbHVkZXMoYWxpYXMpKVxuICAgICAgICAgICAgICAgICAgICB5YXJncy5ub3JtYWxpemUoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheS5pbmNsdWRlcyhhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLmFycmF5KGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubnVtYmVyLmluY2x1ZGVzKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3MubnVtYmVyKGtleSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGxldCBjYWNoZWRIZWxwTWVzc2FnZTtcbiAgICBzZWxmLmNhY2hlSGVscE1lc3NhZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNhY2hlZEhlbHBNZXNzYWdlID0gdGhpcy5oZWxwKCk7XG4gICAgfTtcbiAgICBzZWxmLmNsZWFyQ2FjaGVkSGVscE1lc3NhZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNhY2hlZEhlbHBNZXNzYWdlID0gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgc2VsZi5oYXNDYWNoZWRIZWxwTWVzc2FnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICEhY2FjaGVkSGVscE1lc3NhZ2U7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBhZGRVbmdyb3VwZWRLZXlzKGtleXMsIGFsaWFzZXMsIGdyb3VwcywgZGVmYXVsdEdyb3VwKSB7XG4gICAgICAgIGxldCBncm91cGVkS2V5cyA9IFtdO1xuICAgICAgICBsZXQgdG9DaGVjayA9IG51bGw7XG4gICAgICAgIE9iamVjdC5rZXlzKGdyb3VwcykuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICAgICAgICBncm91cGVkS2V5cyA9IGdyb3VwZWRLZXlzLmNvbmNhdChncm91cHNbZ3JvdXBdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgdG9DaGVjayA9IFtrZXldLmNvbmNhdChhbGlhc2VzW2tleV0pO1xuICAgICAgICAgICAgaWYgKCF0b0NoZWNrLnNvbWUoayA9PiBncm91cGVkS2V5cy5pbmRleE9mKGspICE9PSAtMSkpIHtcbiAgICAgICAgICAgICAgICBncm91cHNbZGVmYXVsdEdyb3VwXS5wdXNoKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZ3JvdXBlZEtleXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbHRlckhpZGRlbk9wdGlvbnMoa2V5KSB7XG4gICAgICAgIHJldHVybiAoeWFyZ3MuZ2V0T3B0aW9ucygpLmhpZGRlbk9wdGlvbnMuaW5kZXhPZihrZXkpIDwgMCB8fFxuICAgICAgICAgICAgeWFyZ3MucGFyc2VkLmFyZ3ZbeWFyZ3MuZ2V0T3B0aW9ucygpLnNob3dIaWRkZW5PcHRdKTtcbiAgICB9XG4gICAgc2VsZi5zaG93SGVscCA9IChsZXZlbCkgPT4ge1xuICAgICAgICBjb25zdCBsb2dnZXIgPSB5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRMb2dnZXJJbnN0YW5jZSgpO1xuICAgICAgICBpZiAoIWxldmVsKVxuICAgICAgICAgICAgbGV2ZWwgPSAnZXJyb3InO1xuICAgICAgICBjb25zdCBlbWl0ID0gdHlwZW9mIGxldmVsID09PSAnZnVuY3Rpb24nID8gbGV2ZWwgOiBsb2dnZXJbbGV2ZWxdO1xuICAgICAgICBlbWl0KHNlbGYuaGVscCgpKTtcbiAgICB9O1xuICAgIHNlbGYuZnVuY3Rpb25EZXNjcmlwdGlvbiA9IGZuID0+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBmbi5uYW1lXG4gICAgICAgICAgICA/IHNoaW0uUGFyc2VyLmRlY2FtZWxpemUoZm4ubmFtZSwgJy0nKVxuICAgICAgICAgICAgOiBfXygnZ2VuZXJhdGVkLXZhbHVlJyk7XG4gICAgICAgIHJldHVybiBbJygnLCBkZXNjcmlwdGlvbiwgJyknXS5qb2luKCcnKTtcbiAgICB9O1xuICAgIHNlbGYuc3RyaW5naWZpZWRWYWx1ZXMgPSBmdW5jdGlvbiBzdHJpbmdpZmllZFZhbHVlcyh2YWx1ZXMsIHNlcGFyYXRvcikge1xuICAgICAgICBsZXQgc3RyaW5nID0gJyc7XG4gICAgICAgIGNvbnN0IHNlcCA9IHNlcGFyYXRvciB8fCAnLCAnO1xuICAgICAgICBjb25zdCBhcnJheSA9IFtdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICBpZiAoIXZhbHVlcyB8fCAhYXJyYXkubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgYXJyYXkuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aClcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gc2VwO1xuICAgICAgICAgICAgc3RyaW5nICs9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBkZWZhdWx0U3RyaW5nKHZhbHVlLCBkZWZhdWx0RGVzY3JpcHRpb24pIHtcbiAgICAgICAgbGV0IHN0cmluZyA9IGBbJHtfXygnZGVmYXVsdDonKX0gYDtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIWRlZmF1bHREZXNjcmlwdGlvbilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoZGVmYXVsdERlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBzdHJpbmcgKz0gZGVmYXVsdERlc2NyaXB0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgICAgICBzdHJpbmcgKz0gYFwiJHt2YWx1ZX1cImA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7c3RyaW5nfV1gO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3aW5kb3dXaWR0aCgpIHtcbiAgICAgICAgY29uc3QgbWF4V2lkdGggPSA4MDtcbiAgICAgICAgaWYgKHNoaW0ucHJvY2Vzcy5zdGRDb2x1bW5zKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5taW4obWF4V2lkdGgsIHNoaW0ucHJvY2Vzcy5zdGRDb2x1bW5zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBtYXhXaWR0aDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgdmVyc2lvbiA9IG51bGw7XG4gICAgc2VsZi52ZXJzaW9uID0gdmVyID0+IHtcbiAgICAgICAgdmVyc2lvbiA9IHZlcjtcbiAgICB9O1xuICAgIHNlbGYuc2hvd1ZlcnNpb24gPSBsZXZlbCA9PiB7XG4gICAgICAgIGNvbnN0IGxvZ2dlciA9IHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldExvZ2dlckluc3RhbmNlKCk7XG4gICAgICAgIGlmICghbGV2ZWwpXG4gICAgICAgICAgICBsZXZlbCA9ICdlcnJvcic7XG4gICAgICAgIGNvbnN0IGVtaXQgPSB0eXBlb2YgbGV2ZWwgPT09ICdmdW5jdGlvbicgPyBsZXZlbCA6IGxvZ2dlcltsZXZlbF07XG4gICAgICAgIGVtaXQodmVyc2lvbik7XG4gICAgfTtcbiAgICBzZWxmLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQobG9jYWxMb29rdXApIHtcbiAgICAgICAgZmFpbE1lc3NhZ2UgPSBudWxsO1xuICAgICAgICBmYWlsdXJlT3V0cHV0ID0gZmFsc2U7XG4gICAgICAgIHVzYWdlcyA9IFtdO1xuICAgICAgICB1c2FnZURpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIGVwaWxvZ3MgPSBbXTtcbiAgICAgICAgZXhhbXBsZXMgPSBbXTtcbiAgICAgICAgY29tbWFuZHMgPSBbXTtcbiAgICAgICAgZGVzY3JpcHRpb25zID0gb2JqRmlsdGVyKGRlc2NyaXB0aW9ucywgayA9PiAhbG9jYWxMb29rdXBba10pO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGNvbnN0IGZyb3plbnMgPSBbXTtcbiAgICBzZWxmLmZyZWV6ZSA9IGZ1bmN0aW9uIGZyZWV6ZSgpIHtcbiAgICAgICAgZnJvemVucy5wdXNoKHtcbiAgICAgICAgICAgIGZhaWxNZXNzYWdlLFxuICAgICAgICAgICAgZmFpbHVyZU91dHB1dCxcbiAgICAgICAgICAgIHVzYWdlcyxcbiAgICAgICAgICAgIHVzYWdlRGlzYWJsZWQsXG4gICAgICAgICAgICBlcGlsb2dzLFxuICAgICAgICAgICAgZXhhbXBsZXMsXG4gICAgICAgICAgICBjb21tYW5kcyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBzZWxmLnVuZnJlZXplID0gZnVuY3Rpb24gdW5mcmVlemUoZGVmYXVsdENvbW1hbmQgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBmcm96ZW4gPSBmcm96ZW5zLnBvcCgpO1xuICAgICAgICBpZiAoIWZyb3plbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGRlZmF1bHRDb21tYW5kKSB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbnMgPSB7IC4uLmZyb3plbi5kZXNjcmlwdGlvbnMsIC4uLmRlc2NyaXB0aW9ucyB9O1xuICAgICAgICAgICAgY29tbWFuZHMgPSBbLi4uZnJvemVuLmNvbW1hbmRzLCAuLi5jb21tYW5kc107XG4gICAgICAgICAgICB1c2FnZXMgPSBbLi4uZnJvemVuLnVzYWdlcywgLi4udXNhZ2VzXTtcbiAgICAgICAgICAgIGV4YW1wbGVzID0gWy4uLmZyb3plbi5leGFtcGxlcywgLi4uZXhhbXBsZXNdO1xuICAgICAgICAgICAgZXBpbG9ncyA9IFsuLi5mcm96ZW4uZXBpbG9ncywgLi4uZXBpbG9nc107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgIGZhaWxNZXNzYWdlLFxuICAgICAgICAgICAgICAgIGZhaWx1cmVPdXRwdXQsXG4gICAgICAgICAgICAgICAgdXNhZ2VzLFxuICAgICAgICAgICAgICAgIHVzYWdlRGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgZXBpbG9ncyxcbiAgICAgICAgICAgICAgICBleGFtcGxlcyxcbiAgICAgICAgICAgICAgICBjb21tYW5kcyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbnMsXG4gICAgICAgICAgICB9ID0gZnJvemVuKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBpc0luZGVudGVkVGV4dCh0ZXh0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0ZXh0ID09PSAnb2JqZWN0Jztcbn1cbmZ1bmN0aW9uIGFkZEluZGVudGF0aW9uKHRleHQsIGluZGVudCkge1xuICAgIHJldHVybiBpc0luZGVudGVkVGV4dCh0ZXh0KVxuICAgICAgICA/IHsgdGV4dDogdGV4dC50ZXh0LCBpbmRlbnRhdGlvbjogdGV4dC5pbmRlbnRhdGlvbiArIGluZGVudCB9XG4gICAgICAgIDogeyB0ZXh0LCBpbmRlbnRhdGlvbjogaW5kZW50IH07XG59XG5mdW5jdGlvbiBnZXRJbmRlbnRhdGlvbih0ZXh0KSB7XG4gICAgcmV0dXJuIGlzSW5kZW50ZWRUZXh0KHRleHQpID8gdGV4dC5pbmRlbnRhdGlvbiA6IDA7XG59XG5mdW5jdGlvbiBnZXRUZXh0KHRleHQpIHtcbiAgICByZXR1cm4gaXNJbmRlbnRlZFRleHQodGV4dCkgPyB0ZXh0LnRleHQgOiB0ZXh0O1xufVxuIiwiaW1wb3J0IHsgaXNDb21tYW5kQnVpbGRlckNhbGxiYWNrIH0gZnJvbSAnLi9jb21tYW5kLmpzJztcbmltcG9ydCB7IGFzc2VydE5vdFN0cmljdEVxdWFsIH0gZnJvbSAnLi90eXBpbmdzL2NvbW1vbi10eXBlcy5qcyc7XG5pbXBvcnQgKiBhcyB0ZW1wbGF0ZXMgZnJvbSAnLi9jb21wbGV0aW9uLXRlbXBsYXRlcy5qcyc7XG5pbXBvcnQgeyBpc1Byb21pc2UgfSBmcm9tICcuL3V0aWxzL2lzLXByb21pc2UuanMnO1xuaW1wb3J0IHsgcGFyc2VDb21tYW5kIH0gZnJvbSAnLi9wYXJzZS1jb21tYW5kLmpzJztcbmV4cG9ydCBjbGFzcyBDb21wbGV0aW9uIHtcbiAgICBjb25zdHJ1Y3Rvcih5YXJncywgdXNhZ2UsIGNvbW1hbmQsIHNoaW0pIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIHRoaXMueWFyZ3MgPSB5YXJncztcbiAgICAgICAgdGhpcy51c2FnZSA9IHVzYWdlO1xuICAgICAgICB0aGlzLmNvbW1hbmQgPSBjb21tYW5kO1xuICAgICAgICB0aGlzLnNoaW0gPSBzaGltO1xuICAgICAgICB0aGlzLmNvbXBsZXRpb25LZXkgPSAnZ2V0LXlhcmdzLWNvbXBsZXRpb25zJztcbiAgICAgICAgdGhpcy5hbGlhc2VzID0gbnVsbDtcbiAgICAgICAgdGhpcy5jdXN0b21Db21wbGV0aW9uRnVuY3Rpb24gPSBudWxsO1xuICAgICAgICB0aGlzLmluZGV4QWZ0ZXJMYXN0UmVzZXQgPSAwO1xuICAgICAgICB0aGlzLnpzaFNoZWxsID1cbiAgICAgICAgICAgIChfYyA9ICgoKF9hID0gdGhpcy5zaGltLmdldEVudignU0hFTEwnKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmluY2x1ZGVzKCd6c2gnKSkgfHxcbiAgICAgICAgICAgICAgICAoKF9iID0gdGhpcy5zaGltLmdldEVudignWlNIX05BTUUnKSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmluY2x1ZGVzKCd6c2gnKSkpKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBmYWxzZTtcbiAgICB9XG4gICAgZGVmYXVsdENvbXBsZXRpb24oYXJncywgYXJndiwgY3VycmVudCwgZG9uZSkge1xuICAgICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuY29tbWFuZC5nZXRDb21tYW5kSGFuZGxlcnMoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gYXJncy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICBpZiAoaGFuZGxlcnNbYXJnc1tpXV0gJiYgaGFuZGxlcnNbYXJnc1tpXV0uYnVpbGRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBoYW5kbGVyc1thcmdzW2ldXS5idWlsZGVyO1xuICAgICAgICAgICAgICAgIGlmIChpc0NvbW1hbmRCdWlsZGVyQ2FsbGJhY2soYnVpbGRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleEFmdGVyTGFzdFJlc2V0ID0gaSArIDE7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHkgPSB0aGlzLnlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIoeSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB5LmFyZ3Y7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBsZXRpb25zID0gW107XG4gICAgICAgIHRoaXMuY29tbWFuZENvbXBsZXRpb25zKGNvbXBsZXRpb25zLCBhcmdzLCBjdXJyZW50KTtcbiAgICAgICAgdGhpcy5vcHRpb25Db21wbGV0aW9ucyhjb21wbGV0aW9ucywgYXJncywgYXJndiwgY3VycmVudCk7XG4gICAgICAgIHRoaXMuY2hvaWNlc0Zyb21PcHRpb25zQ29tcGxldGlvbnMoY29tcGxldGlvbnMsIGFyZ3MsIGFyZ3YsIGN1cnJlbnQpO1xuICAgICAgICB0aGlzLmNob2ljZXNGcm9tUG9zaXRpb25hbHNDb21wbGV0aW9ucyhjb21wbGV0aW9ucywgYXJncywgYXJndiwgY3VycmVudCk7XG4gICAgICAgIGRvbmUobnVsbCwgY29tcGxldGlvbnMpO1xuICAgIH1cbiAgICBjb21tYW5kQ29tcGxldGlvbnMoY29tcGxldGlvbnMsIGFyZ3MsIGN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgcGFyZW50Q29tbWFuZHMgPSB0aGlzLnlhcmdzXG4gICAgICAgICAgICAuZ2V0SW50ZXJuYWxNZXRob2RzKClcbiAgICAgICAgICAgIC5nZXRDb250ZXh0KCkuY29tbWFuZHM7XG4gICAgICAgIGlmICghY3VycmVudC5tYXRjaCgvXi0vKSAmJlxuICAgICAgICAgICAgcGFyZW50Q29tbWFuZHNbcGFyZW50Q29tbWFuZHMubGVuZ3RoIC0gMV0gIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICF0aGlzLnByZXZpb3VzQXJnSGFzQ2hvaWNlcyhhcmdzKSkge1xuICAgICAgICAgICAgdGhpcy51c2FnZS5nZXRDb21tYW5kcygpLmZvckVhY2godXNhZ2VDb21tYW5kID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tYW5kTmFtZSA9IHBhcnNlQ29tbWFuZCh1c2FnZUNvbW1hbmRbMF0pLmNtZDtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5pbmRleE9mKGNvbW1hbmROYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnpzaFNoZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9ucy5wdXNoKGNvbW1hbmROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlc2MgPSB1c2FnZUNvbW1hbmRbMV0gfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9ucy5wdXNoKGNvbW1hbmROYW1lLnJlcGxhY2UoLzovZywgJ1xcXFw6JykgKyAnOicgKyBkZXNjKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9wdGlvbkNvbXBsZXRpb25zKGNvbXBsZXRpb25zLCBhcmdzLCBhcmd2LCBjdXJyZW50KSB7XG4gICAgICAgIGlmICgoY3VycmVudC5tYXRjaCgvXi0vKSB8fCAoY3VycmVudCA9PT0gJycgJiYgY29tcGxldGlvbnMubGVuZ3RoID09PSAwKSkgJiZcbiAgICAgICAgICAgICF0aGlzLnByZXZpb3VzQXJnSGFzQ2hvaWNlcyhhcmdzKSkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMueWFyZ3MuZ2V0T3B0aW9ucygpO1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb25hbEtleXMgPSB0aGlzLnlhcmdzLmdldEdyb3VwcygpW3RoaXMudXNhZ2UuZ2V0UG9zaXRpb25hbEdyb3VwTmFtZSgpXSB8fCBbXTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMua2V5KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmVnYWJsZSA9ICEhb3B0aW9ucy5jb25maWd1cmF0aW9uWydib29sZWFuLW5lZ2F0aW9uJ10gJiZcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5ib29sZWFuLmluY2x1ZGVzKGtleSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNQb3NpdGlvbmFsS2V5ID0gcG9zaXRpb25hbEtleXMuaW5jbHVkZXMoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzUG9zaXRpb25hbEtleSAmJlxuICAgICAgICAgICAgICAgICAgICAhb3B0aW9ucy5oaWRkZW5PcHRpb25zLmluY2x1ZGVzKGtleSkgJiZcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuYXJnc0NvbnRhaW5LZXkoYXJncywga2V5LCBuZWdhYmxlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlT3B0aW9uS2V5KGtleSwgY29tcGxldGlvbnMsIGN1cnJlbnQsIG5lZ2FibGUgJiYgISFvcHRpb25zLmRlZmF1bHRba2V5XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hvaWNlc0Zyb21PcHRpb25zQ29tcGxldGlvbnMoY29tcGxldGlvbnMsIGFyZ3MsIGFyZ3YsIGN1cnJlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMucHJldmlvdXNBcmdIYXNDaG9pY2VzKGFyZ3MpKSB7XG4gICAgICAgICAgICBjb25zdCBjaG9pY2VzID0gdGhpcy5nZXRQcmV2aW91c0FyZ0Nob2ljZXMoYXJncyk7XG4gICAgICAgICAgICBpZiAoY2hvaWNlcyAmJiBjaG9pY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb21wbGV0aW9ucy5wdXNoKC4uLmNob2ljZXMubWFwKGMgPT4gYy5yZXBsYWNlKC86L2csICdcXFxcOicpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hvaWNlc0Zyb21Qb3NpdGlvbmFsc0NvbXBsZXRpb25zKGNvbXBsZXRpb25zLCBhcmdzLCBhcmd2LCBjdXJyZW50KSB7XG4gICAgICAgIGlmIChjdXJyZW50ID09PSAnJyAmJlxuICAgICAgICAgICAgY29tcGxldGlvbnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2aW91c0FyZ0hhc0Nob2ljZXMoYXJncykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb3NpdGlvbmFsS2V5cyA9IHRoaXMueWFyZ3MuZ2V0R3JvdXBzKClbdGhpcy51c2FnZS5nZXRQb3NpdGlvbmFsR3JvdXBOYW1lKCldIHx8IFtdO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBNYXRoLm1heCh0aGlzLmluZGV4QWZ0ZXJMYXN0UmVzZXQsIHRoaXMueWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0Q29udGV4dCgpLmNvbW1hbmRzLmxlbmd0aCArXG4gICAgICAgICAgICAxKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb25hbEtleSA9IHBvc2l0aW9uYWxLZXlzW2FyZ3YuXy5sZW5ndGggLSBvZmZzZXQgLSAxXTtcbiAgICAgICAgaWYgKCFwb3NpdGlvbmFsS2V5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hvaWNlcyA9IHRoaXMueWFyZ3MuZ2V0T3B0aW9ucygpLmNob2ljZXNbcG9zaXRpb25hbEtleV0gfHwgW107XG4gICAgICAgIGZvciAoY29uc3QgY2hvaWNlIG9mIGNob2ljZXMpIHtcbiAgICAgICAgICAgIGlmIChjaG9pY2Uuc3RhcnRzV2l0aChjdXJyZW50KSkge1xuICAgICAgICAgICAgICAgIGNvbXBsZXRpb25zLnB1c2goY2hvaWNlLnJlcGxhY2UoLzovZywgJ1xcXFw6JykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGdldFByZXZpb3VzQXJnQ2hvaWNlcyhhcmdzKSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDEpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxldCBwcmV2aW91c0FyZyA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXTtcbiAgICAgICAgbGV0IGZpbHRlciA9ICcnO1xuICAgICAgICBpZiAoIXByZXZpb3VzQXJnLnN0YXJ0c1dpdGgoJy0nKSAmJiBhcmdzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGZpbHRlciA9IHByZXZpb3VzQXJnO1xuICAgICAgICAgICAgcHJldmlvdXNBcmcgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwcmV2aW91c0FyZy5zdGFydHNXaXRoKCctJykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHByZXZpb3VzQXJnS2V5ID0gcHJldmlvdXNBcmcucmVwbGFjZSgvXi0rLywgJycpO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy55YXJncy5nZXRPcHRpb25zKCk7XG4gICAgICAgIGNvbnN0IHBvc3NpYmxlQWxpYXNlcyA9IFtcbiAgICAgICAgICAgIHByZXZpb3VzQXJnS2V5LFxuICAgICAgICAgICAgLi4uKHRoaXMueWFyZ3MuZ2V0QWxpYXNlcygpW3ByZXZpb3VzQXJnS2V5XSB8fCBbXSksXG4gICAgICAgIF07XG4gICAgICAgIGxldCBjaG9pY2VzO1xuICAgICAgICBmb3IgKGNvbnN0IHBvc3NpYmxlQWxpYXMgb2YgcG9zc2libGVBbGlhc2VzKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMua2V5LCBwb3NzaWJsZUFsaWFzKSAmJlxuICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkob3B0aW9ucy5jaG9pY2VzW3Bvc3NpYmxlQWxpYXNdKSkge1xuICAgICAgICAgICAgICAgIGNob2ljZXMgPSBvcHRpb25zLmNob2ljZXNbcG9zc2libGVBbGlhc107XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNob2ljZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBjaG9pY2VzLmZpbHRlcihjaG9pY2UgPT4gIWZpbHRlciB8fCBjaG9pY2Uuc3RhcnRzV2l0aChmaWx0ZXIpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcmV2aW91c0FyZ0hhc0Nob2ljZXMoYXJncykge1xuICAgICAgICBjb25zdCBjaG9pY2VzID0gdGhpcy5nZXRQcmV2aW91c0FyZ0Nob2ljZXMoYXJncyk7XG4gICAgICAgIHJldHVybiBjaG9pY2VzICE9PSB1bmRlZmluZWQgJiYgY2hvaWNlcy5sZW5ndGggPiAwO1xuICAgIH1cbiAgICBhcmdzQ29udGFpbktleShhcmdzLCBrZXksIG5lZ2FibGUpIHtcbiAgICAgICAgY29uc3QgYXJnc0NvbnRhaW5zID0gKHMpID0+IGFyZ3MuaW5kZXhPZigoL15bXjAtOV0kLy50ZXN0KHMpID8gJy0nIDogJy0tJykgKyBzKSAhPT0gLTE7XG4gICAgICAgIGlmIChhcmdzQ29udGFpbnMoa2V5KSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAobmVnYWJsZSAmJiBhcmdzQ29udGFpbnMoYG5vLSR7a2V5fWApKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0aGlzLmFsaWFzZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYWxpYXMgb2YgdGhpcy5hbGlhc2VzW2tleV0pIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJnc0NvbnRhaW5zKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb21wbGV0ZU9wdGlvbktleShrZXksIGNvbXBsZXRpb25zLCBjdXJyZW50LCBuZWdhYmxlKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICAgICAgbGV0IGtleVdpdGhEZXNjID0ga2V5O1xuICAgICAgICBpZiAodGhpcy56c2hTaGVsbCkge1xuICAgICAgICAgICAgY29uc3QgZGVzY3MgPSB0aGlzLnVzYWdlLmdldERlc2NyaXB0aW9ucygpO1xuICAgICAgICAgICAgY29uc3QgYWxpYXNLZXkgPSAoX2IgPSAoX2EgPSB0aGlzID09PSBudWxsIHx8IHRoaXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRoaXMuYWxpYXNlcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW2tleV0pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5maW5kKGFsaWFzID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXNjID0gZGVzY3NbYWxpYXNdO1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgZGVzYyA9PT0gJ3N0cmluZycgJiYgZGVzYy5sZW5ndGggPiAwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBkZXNjRnJvbUFsaWFzID0gYWxpYXNLZXkgPyBkZXNjc1thbGlhc0tleV0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBkZXNjID0gKF9kID0gKF9jID0gZGVzY3Nba2V5XSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogZGVzY0Zyb21BbGlhcykgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogJyc7XG4gICAgICAgICAgICBrZXlXaXRoRGVzYyA9IGAke2tleS5yZXBsYWNlKC86L2csICdcXFxcOicpfToke2Rlc2NcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnX195YXJnc1N0cmluZ19fOicsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oXFxyXFxufFxcbnxcXHIpL2dtLCAnICcpfWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRzQnlUd29EYXNoZXMgPSAocykgPT4gL14tLS8udGVzdChzKTtcbiAgICAgICAgY29uc3QgaXNTaG9ydE9wdGlvbiA9IChzKSA9PiAvXlteMC05XSQvLnRlc3Qocyk7XG4gICAgICAgIGNvbnN0IGRhc2hlcyA9ICFzdGFydHNCeVR3b0Rhc2hlcyhjdXJyZW50KSAmJiBpc1Nob3J0T3B0aW9uKGtleSkgPyAnLScgOiAnLS0nO1xuICAgICAgICBjb21wbGV0aW9ucy5wdXNoKGRhc2hlcyArIGtleVdpdGhEZXNjKTtcbiAgICAgICAgaWYgKG5lZ2FibGUpIHtcbiAgICAgICAgICAgIGNvbXBsZXRpb25zLnB1c2goZGFzaGVzICsgJ25vLScgKyBrZXlXaXRoRGVzYyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY3VzdG9tQ29tcGxldGlvbihhcmdzLCBhcmd2LCBjdXJyZW50LCBkb25lKSB7XG4gICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKHRoaXMuY3VzdG9tQ29tcGxldGlvbkZ1bmN0aW9uLCBudWxsLCB0aGlzLnNoaW0pO1xuICAgICAgICBpZiAoaXNTeW5jQ29tcGxldGlvbkZ1bmN0aW9uKHRoaXMuY3VzdG9tQ29tcGxldGlvbkZ1bmN0aW9uKSkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jdXN0b21Db21wbGV0aW9uRnVuY3Rpb24oY3VycmVudCwgYXJndik7XG4gICAgICAgICAgICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGxpc3QgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoaW0ucHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKG51bGwsIGxpc3QpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGltLnByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShlcnIsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRvbmUobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0ZhbGxiYWNrQ29tcGxldGlvbkZ1bmN0aW9uKHRoaXMuY3VzdG9tQ29tcGxldGlvbkZ1bmN0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tQ29tcGxldGlvbkZ1bmN0aW9uKGN1cnJlbnQsIGFyZ3YsIChvbkNvbXBsZXRlZCA9IGRvbmUpID0+IHRoaXMuZGVmYXVsdENvbXBsZXRpb24oYXJncywgYXJndiwgY3VycmVudCwgb25Db21wbGV0ZWQpLCBjb21wbGV0aW9ucyA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShudWxsLCBjb21wbGV0aW9ucyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1c3RvbUNvbXBsZXRpb25GdW5jdGlvbihjdXJyZW50LCBhcmd2LCBjb21wbGV0aW9ucyA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShudWxsLCBjb21wbGV0aW9ucyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRDb21wbGV0aW9uKGFyZ3MsIGRvbmUpIHtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IGFyZ3MubGVuZ3RoID8gYXJnc1thcmdzLmxlbmd0aCAtIDFdIDogJyc7XG4gICAgICAgIGNvbnN0IGFyZ3YgPSB0aGlzLnlhcmdzLnBhcnNlKGFyZ3MsIHRydWUpO1xuICAgICAgICBjb25zdCBjb21wbGV0aW9uRnVuY3Rpb24gPSB0aGlzLmN1c3RvbUNvbXBsZXRpb25GdW5jdGlvblxuICAgICAgICAgICAgPyAoYXJndikgPT4gdGhpcy5jdXN0b21Db21wbGV0aW9uKGFyZ3MsIGFyZ3YsIGN1cnJlbnQsIGRvbmUpXG4gICAgICAgICAgICA6IChhcmd2KSA9PiB0aGlzLmRlZmF1bHRDb21wbGV0aW9uKGFyZ3MsIGFyZ3YsIGN1cnJlbnQsIGRvbmUpO1xuICAgICAgICByZXR1cm4gaXNQcm9taXNlKGFyZ3YpXG4gICAgICAgICAgICA/IGFyZ3YudGhlbihjb21wbGV0aW9uRnVuY3Rpb24pXG4gICAgICAgICAgICA6IGNvbXBsZXRpb25GdW5jdGlvbihhcmd2KTtcbiAgICB9XG4gICAgZ2VuZXJhdGVDb21wbGV0aW9uU2NyaXB0KCQwLCBjbWQpIHtcbiAgICAgICAgbGV0IHNjcmlwdCA9IHRoaXMuenNoU2hlbGxcbiAgICAgICAgICAgID8gdGVtcGxhdGVzLmNvbXBsZXRpb25ac2hUZW1wbGF0ZVxuICAgICAgICAgICAgOiB0ZW1wbGF0ZXMuY29tcGxldGlvblNoVGVtcGxhdGU7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnNoaW0ucGF0aC5iYXNlbmFtZSgkMCk7XG4gICAgICAgIGlmICgkMC5tYXRjaCgvXFwuanMkLykpXG4gICAgICAgICAgICAkMCA9IGAuLyR7JDB9YDtcbiAgICAgICAgc2NyaXB0ID0gc2NyaXB0LnJlcGxhY2UoL3t7YXBwX25hbWV9fS9nLCBuYW1lKTtcbiAgICAgICAgc2NyaXB0ID0gc2NyaXB0LnJlcGxhY2UoL3t7Y29tcGxldGlvbl9jb21tYW5kfX0vZywgY21kKTtcbiAgICAgICAgcmV0dXJuIHNjcmlwdC5yZXBsYWNlKC97e2FwcF9wYXRofX0vZywgJDApO1xuICAgIH1cbiAgICByZWdpc3RlckZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIHRoaXMuY3VzdG9tQ29tcGxldGlvbkZ1bmN0aW9uID0gZm47XG4gICAgfVxuICAgIHNldFBhcnNlZChwYXJzZWQpIHtcbiAgICAgICAgdGhpcy5hbGlhc2VzID0gcGFyc2VkLmFsaWFzZXM7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBsZXRpb24oeWFyZ3MsIHVzYWdlLCBjb21tYW5kLCBzaGltKSB7XG4gICAgcmV0dXJuIG5ldyBDb21wbGV0aW9uKHlhcmdzLCB1c2FnZSwgY29tbWFuZCwgc2hpbSk7XG59XG5mdW5jdGlvbiBpc1N5bmNDb21wbGV0aW9uRnVuY3Rpb24oY29tcGxldGlvbkZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIGNvbXBsZXRpb25GdW5jdGlvbi5sZW5ndGggPCAzO1xufVxuZnVuY3Rpb24gaXNGYWxsYmFja0NvbXBsZXRpb25GdW5jdGlvbihjb21wbGV0aW9uRnVuY3Rpb24pIHtcbiAgICByZXR1cm4gY29tcGxldGlvbkZ1bmN0aW9uLmxlbmd0aCA+IDM7XG59XG4iLCJleHBvcnQgY29uc3QgY29tcGxldGlvblNoVGVtcGxhdGUgPSBgIyMjLWJlZ2luLXt7YXBwX25hbWV9fS1jb21wbGV0aW9ucy0jIyNcbiNcbiMgeWFyZ3MgY29tbWFuZCBjb21wbGV0aW9uIHNjcmlwdFxuI1xuIyBJbnN0YWxsYXRpb246IHt7YXBwX3BhdGh9fSB7e2NvbXBsZXRpb25fY29tbWFuZH19ID4+IH4vLmJhc2hyY1xuIyAgICBvciB7e2FwcF9wYXRofX0ge3tjb21wbGV0aW9uX2NvbW1hbmR9fSA+PiB+Ly5iYXNoX3Byb2ZpbGUgb24gT1NYLlxuI1xuX3t7YXBwX25hbWV9fV95YXJnc19jb21wbGV0aW9ucygpXG57XG4gICAgbG9jYWwgY3VyX3dvcmQgYXJncyB0eXBlX2xpc3RcblxuICAgIGN1cl93b3JkPVwiXFwke0NPTVBfV09SRFNbQ09NUF9DV09SRF19XCJcbiAgICBhcmdzPShcIlxcJHtDT01QX1dPUkRTW0BdfVwiKVxuXG4gICAgIyBhc2sgeWFyZ3MgdG8gZ2VuZXJhdGUgY29tcGxldGlvbnMuXG4gICAgIyBzZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQwOTQ0MTk1LzcwODAwMzYgZm9yIHRoZSBzcGFjZXMtaGFuZGxpbmcgYXdrXG4gICAgbWFwZmlsZSAtdCB0eXBlX2xpc3QgPCA8KHt7YXBwX3BhdGh9fSAtLWdldC15YXJncy1jb21wbGV0aW9ucyBcIlxcJHthcmdzW0BdfVwiKVxuICAgIG1hcGZpbGUgLXQgQ09NUFJFUExZIDwgPChjb21wZ2VuIC1XIFwiJCggcHJpbnRmICclcSAnIFwiXFwke3R5cGVfbGlzdFtAXX1cIiApXCIgLS0gXCJcXCR7Y3VyX3dvcmR9XCIgfFxuICAgICAgICBhd2sgJy8gLyB7IHByaW50IFwiXFxcXFwiXCIkMFwiXFxcXFwiXCIgfSAvXlteIF0rJC8geyBwcmludCAkMCB9JylcblxuICAgICMgaWYgbm8gbWF0Y2ggd2FzIGZvdW5kLCBmYWxsIGJhY2sgdG8gZmlsZW5hbWUgY29tcGxldGlvblxuICAgIGlmIFsgXFwkeyNDT01QUkVQTFlbQF19IC1lcSAwIF07IHRoZW5cbiAgICAgIENPTVBSRVBMWT0oKVxuICAgIGZpXG5cbiAgICByZXR1cm4gMFxufVxuY29tcGxldGUgLW8gYmFzaGRlZmF1bHQgLW8gZGVmYXVsdCAtRiBfe3thcHBfbmFtZX19X3lhcmdzX2NvbXBsZXRpb25zIHt7YXBwX25hbWV9fVxuIyMjLWVuZC17e2FwcF9uYW1lfX0tY29tcGxldGlvbnMtIyMjXG5gO1xuZXhwb3J0IGNvbnN0IGNvbXBsZXRpb25ac2hUZW1wbGF0ZSA9IGAjY29tcGRlZiB7e2FwcF9uYW1lfX1cbiMjIy1iZWdpbi17e2FwcF9uYW1lfX0tY29tcGxldGlvbnMtIyMjXG4jXG4jIHlhcmdzIGNvbW1hbmQgY29tcGxldGlvbiBzY3JpcHRcbiNcbiMgSW5zdGFsbGF0aW9uOiB7e2FwcF9wYXRofX0ge3tjb21wbGV0aW9uX2NvbW1hbmR9fSA+PiB+Ly56c2hyY1xuIyAgICBvciB7e2FwcF9wYXRofX0ge3tjb21wbGV0aW9uX2NvbW1hbmR9fSA+PiB+Ly56cHJvZmlsZSBvbiBPU1guXG4jXG5fe3thcHBfbmFtZX19X3lhcmdzX2NvbXBsZXRpb25zKClcbntcbiAgbG9jYWwgcmVwbHlcbiAgbG9jYWwgc2k9JElGU1xuICBJRlM9JCdcXG4nIHJlcGx5PSgkKENPTVBfQ1dPUkQ9XCIkKChDVVJSRU5ULTEpKVwiIENPTVBfTElORT1cIiRCVUZGRVJcIiBDT01QX1BPSU5UPVwiJENVUlNPUlwiIHt7YXBwX3BhdGh9fSAtLWdldC15YXJncy1jb21wbGV0aW9ucyBcIlxcJHt3b3Jkc1tAXX1cIikpXG4gIElGUz0kc2lcbiAgaWYgW1sgXFwkeyNyZXBseX0gLWd0IDAgXV07IHRoZW5cbiAgICBfZGVzY3JpYmUgJ3ZhbHVlcycgcmVwbHlcbiAgZWxzZVxuICAgIF9kZWZhdWx0XG4gIGZpXG59XG5pZiBbWyBcIidcXCR7enNoX2V2YWxfY29udGV4dFstMV19XCIgPT0gXCJsb2FkYXV0b2Z1bmNcIiBdXTsgdGhlblxuICBfe3thcHBfbmFtZX19X3lhcmdzX2NvbXBsZXRpb25zIFwiJEBcIlxuZWxzZVxuICBjb21wZGVmIF97e2FwcF9uYW1lfX1feWFyZ3NfY29tcGxldGlvbnMge3thcHBfbmFtZX19XG5maVxuIyMjLWVuZC17e2FwcF9uYW1lfX0tY29tcGxldGlvbnMtIyMjXG5gO1xuIiwiZXhwb3J0IGZ1bmN0aW9uIGxldmVuc2h0ZWluKGEsIGIpIHtcbiAgICBpZiAoYS5sZW5ndGggPT09IDApXG4gICAgICAgIHJldHVybiBiLmxlbmd0aDtcbiAgICBpZiAoYi5sZW5ndGggPT09IDApXG4gICAgICAgIHJldHVybiBhLmxlbmd0aDtcbiAgICBjb25zdCBtYXRyaXggPSBbXTtcbiAgICBsZXQgaTtcbiAgICBmb3IgKGkgPSAwOyBpIDw9IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbWF0cml4W2ldID0gW2ldO1xuICAgIH1cbiAgICBsZXQgajtcbiAgICBmb3IgKGogPSAwOyBqIDw9IGEubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgbWF0cml4WzBdW2pdID0gajtcbiAgICB9XG4gICAgZm9yIChpID0gMTsgaSA8PSBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGZvciAoaiA9IDE7IGogPD0gYS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKGIuY2hhckF0KGkgLSAxKSA9PT0gYS5jaGFyQXQoaiAtIDEpKSB7XG4gICAgICAgICAgICAgICAgbWF0cml4W2ldW2pdID0gbWF0cml4W2kgLSAxXVtqIC0gMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaSA+IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgaiA+IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgYi5jaGFyQXQoaSAtIDIpID09PSBhLmNoYXJBdChqIC0gMSkgJiZcbiAgICAgICAgICAgICAgICAgICAgYi5jaGFyQXQoaSAtIDEpID09PSBhLmNoYXJBdChqIC0gMikpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0cml4W2ldW2pdID0gbWF0cml4W2kgLSAyXVtqIC0gMl0gKyAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0cml4W2ldW2pdID0gTWF0aC5taW4obWF0cml4W2kgLSAxXVtqIC0gMV0gKyAxLCBNYXRoLm1pbihtYXRyaXhbaV1baiAtIDFdICsgMSwgbWF0cml4W2kgLSAxXVtqXSArIDEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeFtiLmxlbmd0aF1bYS5sZW5ndGhdO1xufVxuIiwiaW1wb3J0IHsgYXJnc2VydCB9IGZyb20gJy4vYXJnc2VydC5qcyc7XG5pbXBvcnQgeyBhc3NlcnROb3RTdHJpY3RFcXVhbCwgfSBmcm9tICcuL3R5cGluZ3MvY29tbW9uLXR5cGVzLmpzJztcbmltcG9ydCB7IGxldmVuc2h0ZWluIGFzIGRpc3RhbmNlIH0gZnJvbSAnLi91dGlscy9sZXZlbnNodGVpbi5qcyc7XG5pbXBvcnQgeyBvYmpGaWx0ZXIgfSBmcm9tICcuL3V0aWxzL29iai1maWx0ZXIuanMnO1xuY29uc3Qgc3BlY2lhbEtleXMgPSBbJyQwJywgJy0tJywgJ18nXTtcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0aW9uKHlhcmdzLCB1c2FnZSwgc2hpbSkge1xuICAgIGNvbnN0IF9fID0gc2hpbS55MThuLl9fO1xuICAgIGNvbnN0IF9fbiA9IHNoaW0ueTE4bi5fX247XG4gICAgY29uc3Qgc2VsZiA9IHt9O1xuICAgIHNlbGYubm9uT3B0aW9uQ291bnQgPSBmdW5jdGlvbiBub25PcHRpb25Db3VudChhcmd2KSB7XG4gICAgICAgIGNvbnN0IGRlbWFuZGVkQ29tbWFuZHMgPSB5YXJncy5nZXREZW1hbmRlZENvbW1hbmRzKCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uYWxDb3VudCA9IGFyZ3YuXy5sZW5ndGggKyAoYXJndlsnLS0nXSA/IGFyZ3ZbJy0tJ10ubGVuZ3RoIDogMCk7XG4gICAgICAgIGNvbnN0IF9zID0gcG9zaXRpb25hbENvdW50IC0geWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0Q29udGV4dCgpLmNvbW1hbmRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGRlbWFuZGVkQ29tbWFuZHMuXyAmJlxuICAgICAgICAgICAgKF9zIDwgZGVtYW5kZWRDb21tYW5kcy5fLm1pbiB8fCBfcyA+IGRlbWFuZGVkQ29tbWFuZHMuXy5tYXgpKSB7XG4gICAgICAgICAgICBpZiAoX3MgPCBkZW1hbmRlZENvbW1hbmRzLl8ubWluKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlbWFuZGVkQ29tbWFuZHMuXy5taW5Nc2cgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKGRlbWFuZGVkQ29tbWFuZHMuXy5taW5Nc2dcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZGVtYW5kZWRDb21tYW5kcy5fLm1pbk1zZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXCQwL2csIF9zLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcJDEvLCBkZW1hbmRlZENvbW1hbmRzLl8ubWluLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ05vdCBlbm91Z2ggbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbmVlZCBhdCBsZWFzdCAlcycsICdOb3QgZW5vdWdoIG5vbi1vcHRpb24gYXJndW1lbnRzOiBnb3QgJXMsIG5lZWQgYXQgbGVhc3QgJXMnLCBfcywgX3MudG9TdHJpbmcoKSwgZGVtYW5kZWRDb21tYW5kcy5fLm1pbi50b1N0cmluZygpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoX3MgPiBkZW1hbmRlZENvbW1hbmRzLl8ubWF4KSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlbWFuZGVkQ29tbWFuZHMuXy5tYXhNc2cgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKGRlbWFuZGVkQ29tbWFuZHMuXy5tYXhNc2dcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZGVtYW5kZWRDb21tYW5kcy5fLm1heE1zZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXCQwL2csIF9zLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcJDEvLCBkZW1hbmRlZENvbW1hbmRzLl8ubWF4LnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ1RvbyBtYW55IG5vbi1vcHRpb24gYXJndW1lbnRzOiBnb3QgJXMsIG1heGltdW0gb2YgJXMnLCAnVG9vIG1hbnkgbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbWF4aW11bSBvZiAlcycsIF9zLCBfcy50b1N0cmluZygpLCBkZW1hbmRlZENvbW1hbmRzLl8ubWF4LnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYucG9zaXRpb25hbENvdW50ID0gZnVuY3Rpb24gcG9zaXRpb25hbENvdW50KHJlcXVpcmVkLCBvYnNlcnZlZCkge1xuICAgICAgICBpZiAob2JzZXJ2ZWQgPCByZXF1aXJlZCkge1xuICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ05vdCBlbm91Z2ggbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbmVlZCBhdCBsZWFzdCAlcycsICdOb3QgZW5vdWdoIG5vbi1vcHRpb24gYXJndW1lbnRzOiBnb3QgJXMsIG5lZWQgYXQgbGVhc3QgJXMnLCBvYnNlcnZlZCwgb2JzZXJ2ZWQgKyAnJywgcmVxdWlyZWQgKyAnJykpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLnJlcXVpcmVkQXJndW1lbnRzID0gZnVuY3Rpb24gcmVxdWlyZWRBcmd1bWVudHMoYXJndiwgZGVtYW5kZWRPcHRpb25zKSB7XG4gICAgICAgIGxldCBtaXNzaW5nID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZGVtYW5kZWRPcHRpb25zKSkge1xuICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXJndiwga2V5KSB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiBhcmd2W2tleV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgbWlzc2luZyA9IG1pc3NpbmcgfHwge307XG4gICAgICAgICAgICAgICAgbWlzc2luZ1trZXldID0gZGVtYW5kZWRPcHRpb25zW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pc3NpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbU1zZ3MgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1pc3NpbmcpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gbWlzc2luZ1trZXldO1xuICAgICAgICAgICAgICAgIGlmIChtc2cgJiYgY3VzdG9tTXNncy5pbmRleE9mKG1zZykgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbU1zZ3MucHVzaChtc2cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbU1zZyA9IGN1c3RvbU1zZ3MubGVuZ3RoID8gYFxcbiR7Y3VzdG9tTXNncy5qb2luKCdcXG4nKX1gIDogJyc7XG4gICAgICAgICAgICB1c2FnZS5mYWlsKF9fbignTWlzc2luZyByZXF1aXJlZCBhcmd1bWVudDogJXMnLCAnTWlzc2luZyByZXF1aXJlZCBhcmd1bWVudHM6ICVzJywgT2JqZWN0LmtleXMobWlzc2luZykubGVuZ3RoLCBPYmplY3Qua2V5cyhtaXNzaW5nKS5qb2luKCcsICcpICsgY3VzdG9tTXNnKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYudW5rbm93bkFyZ3VtZW50cyA9IGZ1bmN0aW9uIHVua25vd25Bcmd1bWVudHMoYXJndiwgYWxpYXNlcywgcG9zaXRpb25hbE1hcCwgaXNEZWZhdWx0Q29tbWFuZCwgY2hlY2tQb3NpdGlvbmFscyA9IHRydWUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBjb21tYW5kS2V5cyA9IHlhcmdzXG4gICAgICAgICAgICAuZ2V0SW50ZXJuYWxNZXRob2RzKClcbiAgICAgICAgICAgIC5nZXRDb21tYW5kSW5zdGFuY2UoKVxuICAgICAgICAgICAgLmdldENvbW1hbmRzKCk7XG4gICAgICAgIGNvbnN0IHVua25vd24gPSBbXTtcbiAgICAgICAgY29uc3QgY3VycmVudENvbnRleHQgPSB5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRDb250ZXh0KCk7XG4gICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmICghc3BlY2lhbEtleXMuaW5jbHVkZXMoa2V5KSAmJlxuICAgICAgICAgICAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocG9zaXRpb25hbE1hcCwga2V5KSAmJlxuICAgICAgICAgICAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0UGFyc2VDb250ZXh0KCksIGtleSkgJiZcbiAgICAgICAgICAgICAgICAhc2VsZi5pc1ZhbGlkQW5kU29tZUFsaWFzSXNOb3ROZXcoa2V5LCBhbGlhc2VzKSkge1xuICAgICAgICAgICAgICAgIHVua25vd24ucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNoZWNrUG9zaXRpb25hbHMgJiZcbiAgICAgICAgICAgIChjdXJyZW50Q29udGV4dC5jb21tYW5kcy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgICAgICAgY29tbWFuZEtleXMubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICAgIGlzRGVmYXVsdENvbW1hbmQpKSB7XG4gICAgICAgICAgICBhcmd2Ll8uc2xpY2UoY3VycmVudENvbnRleHQuY29tbWFuZHMubGVuZ3RoKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb21tYW5kS2V5cy5pbmNsdWRlcygnJyArIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdW5rbm93bi5wdXNoKCcnICsga2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hlY2tQb3NpdGlvbmFscykge1xuICAgICAgICAgICAgY29uc3QgZGVtYW5kZWRDb21tYW5kcyA9IHlhcmdzLmdldERlbWFuZGVkQ29tbWFuZHMoKTtcbiAgICAgICAgICAgIGNvbnN0IG1heE5vbk9wdERlbWFuZGVkID0gKChfYSA9IGRlbWFuZGVkQ29tbWFuZHMuXykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm1heCkgfHwgMDtcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gY3VycmVudENvbnRleHQuY29tbWFuZHMubGVuZ3RoICsgbWF4Tm9uT3B0RGVtYW5kZWQ7XG4gICAgICAgICAgICBpZiAoZXhwZWN0ZWQgPCBhcmd2Ll8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYXJndi5fLnNsaWNlKGV4cGVjdGVkKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IFN0cmluZyhrZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLmluY2x1ZGVzKGtleSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICF1bmtub3duLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVua25vd24ucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVua25vd24ubGVuZ3RoKSB7XG4gICAgICAgICAgICB1c2FnZS5mYWlsKF9fbignVW5rbm93biBhcmd1bWVudDogJXMnLCAnVW5rbm93biBhcmd1bWVudHM6ICVzJywgdW5rbm93bi5sZW5ndGgsIHVua25vd24ubWFwKHMgPT4gKHMudHJpbSgpID8gcyA6IGBcIiR7c31cImApKS5qb2luKCcsICcpKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYudW5rbm93bkNvbW1hbmRzID0gZnVuY3Rpb24gdW5rbm93bkNvbW1hbmRzKGFyZ3YpIHtcbiAgICAgICAgY29uc3QgY29tbWFuZEtleXMgPSB5YXJnc1xuICAgICAgICAgICAgLmdldEludGVybmFsTWV0aG9kcygpXG4gICAgICAgICAgICAuZ2V0Q29tbWFuZEluc3RhbmNlKClcbiAgICAgICAgICAgIC5nZXRDb21tYW5kcygpO1xuICAgICAgICBjb25zdCB1bmtub3duID0gW107XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb250ZXh0ID0geWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0Q29udGV4dCgpO1xuICAgICAgICBpZiAoY3VycmVudENvbnRleHQuY29tbWFuZHMubGVuZ3RoID4gMCB8fCBjb21tYW5kS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhcmd2Ll8uc2xpY2UoY3VycmVudENvbnRleHQuY29tbWFuZHMubGVuZ3RoKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb21tYW5kS2V5cy5pbmNsdWRlcygnJyArIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdW5rbm93bi5wdXNoKCcnICsga2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodW5rbm93bi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB1c2FnZS5mYWlsKF9fbignVW5rbm93biBjb21tYW5kOiAlcycsICdVbmtub3duIGNvbW1hbmRzOiAlcycsIHVua25vd24ubGVuZ3RoLCB1bmtub3duLmpvaW4oJywgJykpKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLmlzVmFsaWRBbmRTb21lQWxpYXNJc05vdE5ldyA9IGZ1bmN0aW9uIGlzVmFsaWRBbmRTb21lQWxpYXNJc05vdE5ldyhrZXksIGFsaWFzZXMpIHtcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYWxpYXNlcywga2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld0FsaWFzZXMgPSB5YXJncy5wYXJzZWQubmV3QWxpYXNlcztcbiAgICAgICAgcmV0dXJuIFtrZXksIC4uLmFsaWFzZXNba2V5XV0uc29tZShhID0+ICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmV3QWxpYXNlcywgYSkgfHwgIW5ld0FsaWFzZXNba2V5XSk7XG4gICAgfTtcbiAgICBzZWxmLmxpbWl0ZWRDaG9pY2VzID0gZnVuY3Rpb24gbGltaXRlZENob2ljZXMoYXJndikge1xuICAgICAgICBjb25zdCBvcHRpb25zID0geWFyZ3MuZ2V0T3B0aW9ucygpO1xuICAgICAgICBjb25zdCBpbnZhbGlkID0ge307XG4gICAgICAgIGlmICghT2JqZWN0LmtleXMob3B0aW9ucy5jaG9pY2VzKS5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChzcGVjaWFsS2V5cy5pbmRleE9mKGtleSkgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMuY2hvaWNlcywga2V5KSkge1xuICAgICAgICAgICAgICAgIFtdLmNvbmNhdChhcmd2W2tleV0pLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5jaG9pY2VzW2tleV0uaW5kZXhPZih2YWx1ZSkgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkW2tleV0gPSAoaW52YWxpZFtrZXldIHx8IFtdKS5jb25jYXQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBpbnZhbGlkS2V5cyA9IE9iamVjdC5rZXlzKGludmFsaWQpO1xuICAgICAgICBpZiAoIWludmFsaWRLZXlzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IG1zZyA9IF9fKCdJbnZhbGlkIHZhbHVlczonKTtcbiAgICAgICAgaW52YWxpZEtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgbXNnICs9IGBcXG4gICR7X18oJ0FyZ3VtZW50OiAlcywgR2l2ZW46ICVzLCBDaG9pY2VzOiAlcycsIGtleSwgdXNhZ2Uuc3RyaW5naWZpZWRWYWx1ZXMoaW52YWxpZFtrZXldKSwgdXNhZ2Uuc3RyaW5naWZpZWRWYWx1ZXMob3B0aW9ucy5jaG9pY2VzW2tleV0pKX1gO1xuICAgICAgICB9KTtcbiAgICAgICAgdXNhZ2UuZmFpbChtc2cpO1xuICAgIH07XG4gICAgbGV0IGltcGxpZWQgPSB7fTtcbiAgICBzZWxmLmltcGxpZXMgPSBmdW5jdGlvbiBpbXBsaWVzKGtleSwgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xvYmplY3Q+IFthcnJheXxudW1iZXJ8c3RyaW5nXScsIFtrZXksIHZhbHVlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoa2V5KS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGYuaW1wbGllcyhrLCBrZXlba10pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB5YXJncy5nbG9iYWwoa2V5KTtcbiAgICAgICAgICAgIGlmICghaW1wbGllZFtrZXldKSB7XG4gICAgICAgICAgICAgICAgaW1wbGllZFtrZXldID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKGkgPT4gc2VsZi5pbXBsaWVzKGtleSwgaSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwodmFsdWUsIHVuZGVmaW5lZCwgc2hpbSk7XG4gICAgICAgICAgICAgICAgaW1wbGllZFtrZXldLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLmdldEltcGxpZWQgPSBmdW5jdGlvbiBnZXRJbXBsaWVkKCkge1xuICAgICAgICByZXR1cm4gaW1wbGllZDtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGtleUV4aXN0cyhhcmd2LCB2YWwpIHtcbiAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHZhbCk7XG4gICAgICAgIHZhbCA9IGlzTmFOKG51bSkgPyB2YWwgOiBudW07XG4gICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdmFsID0gYXJndi5fLmxlbmd0aCA+PSB2YWw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsLm1hdGNoKC9eLS1uby0uKy8pKSB7XG4gICAgICAgICAgICB2YWwgPSB2YWwubWF0Y2goL14tLW5vLSguKykvKVsxXTtcbiAgICAgICAgICAgIHZhbCA9ICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXJndiwgdmFsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhbCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd2LCB2YWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHNlbGYuaW1wbGljYXRpb25zID0gZnVuY3Rpb24gaW1wbGljYXRpb25zKGFyZ3YpIHtcbiAgICAgICAgY29uc3QgaW1wbHlGYWlsID0gW107XG4gICAgICAgIE9iamVjdC5rZXlzKGltcGxpZWQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdLZXkgPSBrZXk7XG4gICAgICAgICAgICAoaW1wbGllZFtrZXldIHx8IFtdKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBsZXQga2V5ID0gb3JpZ0tleTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBrZXkgPSBrZXlFeGlzdHMoYXJndiwga2V5KTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGtleUV4aXN0cyhhcmd2LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGtleSAmJiAhdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaW1wbHlGYWlsLnB1c2goYCAke29yaWdLZXl9IC0+ICR7b3JpZ1ZhbHVlfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGltcGx5RmFpbC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCBtc2cgPSBgJHtfXygnSW1wbGljYXRpb25zIGZhaWxlZDonKX1cXG5gO1xuICAgICAgICAgICAgaW1wbHlGYWlsLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIG1zZyArPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdXNhZ2UuZmFpbChtc2cpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBsZXQgY29uZmxpY3RpbmcgPSB7fTtcbiAgICBzZWxmLmNvbmZsaWN0cyA9IGZ1bmN0aW9uIGNvbmZsaWN0cyhrZXksIHZhbHVlKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8b2JqZWN0PiBbYXJyYXl8c3RyaW5nXScsIFtrZXksIHZhbHVlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoa2V5KS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmxpY3RzKGssIGtleVtrXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHlhcmdzLmdsb2JhbChrZXkpO1xuICAgICAgICAgICAgaWYgKCFjb25mbGljdGluZ1trZXldKSB7XG4gICAgICAgICAgICAgICAgY29uZmxpY3Rpbmdba2V5XSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaChpID0+IHNlbGYuY29uZmxpY3RzKGtleSwgaSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uZmxpY3Rpbmdba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5nZXRDb25mbGljdGluZyA9ICgpID0+IGNvbmZsaWN0aW5nO1xuICAgIHNlbGYuY29uZmxpY3RpbmcgPSBmdW5jdGlvbiBjb25mbGljdGluZ0ZuKGFyZ3YpIHtcbiAgICAgICAgT2JqZWN0LmtleXMoYXJndikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbmZsaWN0aW5nW2tleV0pIHtcbiAgICAgICAgICAgICAgICBjb25mbGljdGluZ1trZXldLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgYXJndltrZXldICE9PSB1bmRlZmluZWQgJiYgYXJndlt2YWx1ZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChfXygnQXJndW1lbnRzICVzIGFuZCAlcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlJywga2V5LCB2YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoeWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0UGFyc2VyQ29uZmlndXJhdGlvbigpWydzdHJpcC1kYXNoZWQnXSkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoY29uZmxpY3RpbmcpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25mbGljdGluZ1trZXldLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Zbc2hpbS5QYXJzZXIuY2FtZWxDYXNlKGtleSldICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Zbc2hpbS5QYXJzZXIuY2FtZWxDYXNlKHZhbHVlKV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChfXygnQXJndW1lbnRzICVzIGFuZCAlcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlJywga2V5LCB2YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5yZWNvbW1lbmRDb21tYW5kcyA9IGZ1bmN0aW9uIHJlY29tbWVuZENvbW1hbmRzKGNtZCwgcG90ZW50aWFsQ29tbWFuZHMpIHtcbiAgICAgICAgY29uc3QgdGhyZXNob2xkID0gMztcbiAgICAgICAgcG90ZW50aWFsQ29tbWFuZHMgPSBwb3RlbnRpYWxDb21tYW5kcy5zb3J0KChhLCBiKSA9PiBiLmxlbmd0aCAtIGEubGVuZ3RoKTtcbiAgICAgICAgbGV0IHJlY29tbWVuZGVkID0gbnVsbDtcbiAgICAgICAgbGV0IGJlc3REaXN0YW5jZSA9IEluZmluaXR5O1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgY2FuZGlkYXRlOyAoY2FuZGlkYXRlID0gcG90ZW50aWFsQ29tbWFuZHNbaV0pICE9PSB1bmRlZmluZWQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZCA9IGRpc3RhbmNlKGNtZCwgY2FuZGlkYXRlKTtcbiAgICAgICAgICAgIGlmIChkIDw9IHRocmVzaG9sZCAmJiBkIDwgYmVzdERpc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgYmVzdERpc3RhbmNlID0gZDtcbiAgICAgICAgICAgICAgICByZWNvbW1lbmRlZCA9IGNhbmRpZGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocmVjb21tZW5kZWQpXG4gICAgICAgICAgICB1c2FnZS5mYWlsKF9fKCdEaWQgeW91IG1lYW4gJXM/JywgcmVjb21tZW5kZWQpKTtcbiAgICB9O1xuICAgIHNlbGYucmVzZXQgPSBmdW5jdGlvbiByZXNldChsb2NhbExvb2t1cCkge1xuICAgICAgICBpbXBsaWVkID0gb2JqRmlsdGVyKGltcGxpZWQsIGsgPT4gIWxvY2FsTG9va3VwW2tdKTtcbiAgICAgICAgY29uZmxpY3RpbmcgPSBvYmpGaWx0ZXIoY29uZmxpY3RpbmcsIGsgPT4gIWxvY2FsTG9va3VwW2tdKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBjb25zdCBmcm96ZW5zID0gW107XG4gICAgc2VsZi5mcmVlemUgPSBmdW5jdGlvbiBmcmVlemUoKSB7XG4gICAgICAgIGZyb3plbnMucHVzaCh7XG4gICAgICAgICAgICBpbXBsaWVkLFxuICAgICAgICAgICAgY29uZmxpY3RpbmcsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgc2VsZi51bmZyZWV6ZSA9IGZ1bmN0aW9uIHVuZnJlZXplKCkge1xuICAgICAgICBjb25zdCBmcm96ZW4gPSBmcm96ZW5zLnBvcCgpO1xuICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChmcm96ZW4sIHVuZGVmaW5lZCwgc2hpbSk7XG4gICAgICAgICh7IGltcGxpZWQsIGNvbmZsaWN0aW5nIH0gPSBmcm96ZW4pO1xuICAgIH07XG4gICAgcmV0dXJuIHNlbGY7XG59XG4iLCJpbXBvcnQgeyBZRXJyb3IgfSBmcm9tICcuLi95ZXJyb3IuanMnO1xubGV0IHByZXZpb3VzbHlWaXNpdGVkQ29uZmlncyA9IFtdO1xubGV0IHNoaW07XG5leHBvcnQgZnVuY3Rpb24gYXBwbHlFeHRlbmRzKGNvbmZpZywgY3dkLCBtZXJnZUV4dGVuZHMsIF9zaGltKSB7XG4gICAgc2hpbSA9IF9zaGltO1xuICAgIGxldCBkZWZhdWx0Q29uZmlnID0ge307XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdleHRlbmRzJykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcuZXh0ZW5kcyAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdENvbmZpZztcbiAgICAgICAgY29uc3QgaXNQYXRoID0gL1xcLmpzb258XFwuLipyYyQvLnRlc3QoY29uZmlnLmV4dGVuZHMpO1xuICAgICAgICBsZXQgcGF0aFRvRGVmYXVsdCA9IG51bGw7XG4gICAgICAgIGlmICghaXNQYXRoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhdGhUb0RlZmF1bHQgPSBpbXBvcnQubWV0YS5yZXNvbHZlKGNvbmZpZy5leHRlbmRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChfZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBhdGhUb0RlZmF1bHQgPSBnZXRQYXRoVG9EZWZhdWx0Q29uZmlnKGN3ZCwgY29uZmlnLmV4dGVuZHMpO1xuICAgICAgICB9XG4gICAgICAgIGNoZWNrRm9yQ2lyY3VsYXJFeHRlbmRzKHBhdGhUb0RlZmF1bHQpO1xuICAgICAgICBwcmV2aW91c2x5VmlzaXRlZENvbmZpZ3MucHVzaChwYXRoVG9EZWZhdWx0KTtcbiAgICAgICAgZGVmYXVsdENvbmZpZyA9IGlzUGF0aFxuICAgICAgICAgICAgPyBKU09OLnBhcnNlKHNoaW0ucmVhZEZpbGVTeW5jKHBhdGhUb0RlZmF1bHQsICd1dGY4JykpXG4gICAgICAgICAgICA6IF9zaGltLnJlcXVpcmUoY29uZmlnLmV4dGVuZHMpO1xuICAgICAgICBkZWxldGUgY29uZmlnLmV4dGVuZHM7XG4gICAgICAgIGRlZmF1bHRDb25maWcgPSBhcHBseUV4dGVuZHMoZGVmYXVsdENvbmZpZywgc2hpbS5wYXRoLmRpcm5hbWUocGF0aFRvRGVmYXVsdCksIG1lcmdlRXh0ZW5kcywgc2hpbSk7XG4gICAgfVxuICAgIHByZXZpb3VzbHlWaXNpdGVkQ29uZmlncyA9IFtdO1xuICAgIHJldHVybiBtZXJnZUV4dGVuZHNcbiAgICAgICAgPyBtZXJnZURlZXAoZGVmYXVsdENvbmZpZywgY29uZmlnKVxuICAgICAgICA6IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRDb25maWcsIGNvbmZpZyk7XG59XG5mdW5jdGlvbiBjaGVja0ZvckNpcmN1bGFyRXh0ZW5kcyhjZmdQYXRoKSB7XG4gICAgaWYgKHByZXZpb3VzbHlWaXNpdGVkQ29uZmlncy5pbmRleE9mKGNmZ1BhdGgpID4gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihgQ2lyY3VsYXIgZXh0ZW5kZWQgY29uZmlndXJhdGlvbnM6ICcke2NmZ1BhdGh9Jy5gKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRQYXRoVG9EZWZhdWx0Q29uZmlnKGN3ZCwgcGF0aFRvRXh0ZW5kKSB7XG4gICAgcmV0dXJuIHNoaW0ucGF0aC5yZXNvbHZlKGN3ZCwgcGF0aFRvRXh0ZW5kKTtcbn1cbmZ1bmN0aW9uIG1lcmdlRGVlcChjb25maWcxLCBjb25maWcyKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0ge307XG4gICAgZnVuY3Rpb24gaXNPYmplY3Qob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkob2JqKTtcbiAgICB9XG4gICAgT2JqZWN0LmFzc2lnbih0YXJnZXQsIGNvbmZpZzEpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbmZpZzIpKSB7XG4gICAgICAgIGlmIChpc09iamVjdChjb25maWcyW2tleV0pICYmIGlzT2JqZWN0KHRhcmdldFtrZXldKSkge1xuICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBtZXJnZURlZXAoY29uZmlnMVtrZXldLCBjb25maWcyW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBjb25maWcyW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gQm9vdHN0cmFwcyB5YXJncyBmb3IgRVNNOlxuaW1wb3J0IGVzbVBsYXRmb3JtU2hpbSBmcm9tICcuL2xpYi9wbGF0Zm9ybS1zaGltcy9lc20ubWpzJztcbmltcG9ydCB7WWFyZ3NGYWN0b3J5fSBmcm9tICcuL2J1aWxkL2xpYi95YXJncy1mYWN0b3J5LmpzJztcblxuY29uc3QgWWFyZ3MgPSBZYXJnc0ZhY3RvcnkoZXNtUGxhdGZvcm1TaGltKTtcbmV4cG9ydCBkZWZhdWx0IFlhcmdzO1xuXG5leHBvcnQge1lhcmdzIGFzICdtb2R1bGUuZXhwb3J0cyd9O1xuIiwiaW1wb3J0IGZzIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeWFyZ3MgZnJvbSAneWFyZ3MnO1xuaW1wb3J0IHsgaGlkZUJpbiB9IGZyb20gJ3lhcmdzL2hlbHBlcnMnO1xuaW1wb3J0IHsgbG9hZENvbmZpZ0ZpbGUgfSBmcm9tICcuL2NvbmZpZy5qcyc7XG5pbXBvcnQge1xuICBERUZBVUxUX0FJREVSX0VYVFJBX0FSR1MsXG4gIERFRkFVTFRfQ0xBVURFX0NPREVfRVhUUkFfQVJHUyxcbiAgREVGQVVMVF9DT0RFWF9FWFRSQV9BUkdTLFxuICBERUZBVUxUX0NPRElOR19UT09MLFxuICBERUZBVUxUX0dFTUlOSV9FWFRSQV9BUkdTLFxuICBERUZBVUxUX01BWF9URVNUX0FUVEVNUFRTLFxuICBERUZBVUxUX05PREVfUlVOVElNRSxcbiAgREVGQVVMVF9SRVBPTUlYX0VYVFJBX0FSR1MsXG59IGZyb20gJy4vZGVmYXVsdE9wdGlvbnMuanMnO1xuaW1wb3J0IHsgbWFpbiB9IGZyb20gJy4vbWFpbi5qcyc7XG5pbXBvcnQgeyBub3JtYWxpemVOb2RlUnVudGltZSB9IGZyb20gJy4vc3Bhd24uanMnO1xuaW1wb3J0IHR5cGUgeyBDb2RpbmdUb29sLCBOb2RlUnVudGltZSwgTm9kZVJ1bnRpbWVBY3R1YWwsIFJlYXNvbmluZ0VmZm9ydCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vLyBQYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHVzaW5nIHlhcmdzIChDTEkgb3B0aW9ucyBvdmVycmlkZSBjb25maWcpXG5jb25zdCBhcmd2ID0gYXdhaXQgeWFyZ3MoaGlkZUJpbihwcm9jZXNzLmFyZ3YpKVxuICAuY29uZmlnKGxvYWRDb25maWdGaWxlKCkpXG4gIC8vIE9wdGlvbnMgc2FtZSB3aXRoIHRoZSBHaXRIdWIgQWN0aW9ucyB3b3JrZmxvd1xuICAub3B0aW9uKCdpc3N1ZS1udW1iZXInLCB7XG4gICAgYWxpYXM6ICdpJyxcbiAgICBkZXNjcmlwdGlvbjogJ0dpdEh1YiBpc3N1ZSBudW1iZXIgdG8gcHJvY2VzcycsXG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVtYW5kT3B0aW9uOiB0cnVlLFxuICB9KVxuICAub3B0aW9uKCdwbGFubmluZy1tb2RlbCcsIHtcbiAgICBhbGlhczogJ20nLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ0xMTSBmb3IgcGxhbm5pbmcgY29kZSBjaGFuZ2VzLiBNdXN0IHVzZSBsbG1saXRlIGZvcm1hdDogcHJvdmlkZXIvbW9kZWwgKGUuZy4sIG9wZW5haS9ncHQtNC4xLCBhenVyZS9ncHQtNC4xLCBnZW1pbmkvZ2VtaW5pLTIuNS1wcm8sIGFudGhyb3BpYy9jbGF1ZGUtNC1zb25uZXQtbGF0ZXN0LCBiZWRyb2NrL3VzLmFudGhyb3BpYy5jbGF1ZGUtc29ubmV0LTQtMjAyNTA1MTQtdjE6MCwgdmVydGV4L2dlbWluaS0yLjUtcHJvLCB4YWkvZ3Jvay00KScsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gIH0pXG4gIC5vcHRpb24oJ3R3by1zdGFnZWQtcGxhbm5pbmcnLCB7XG4gICAgYWxpYXM6ICdwJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdFbmFibGUgdHdvLXN0YWdlZCBwbGFubmluZzogZmlyc3Qgc2VsZWN0IHJlbGV2YW50IGZpbGVzLCB0aGVuIGdlbmVyYXRlIGRldGFpbGVkIGltcGxlbWVudGF0aW9uIHBsYW5zIChpbmNyZWFzZXMgTExNIGNvc3QgYnV0IGltcHJvdmVzIGNvZGUgcXVhbGl0eSknLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9KVxuICAub3B0aW9uKCdyZWFzb25pbmctZWZmb3J0Jywge1xuICAgIGFsaWFzOiAnZScsXG4gICAgZGVzY3JpcHRpb246ICdDb25zdHJhaW5zIGVmZm9ydCBvbiByZWFzb25pbmcgZm9yIHBsYW5uaW5nIG1vZGVscy4gU3VwcG9ydGVkIHZhbHVlcyBhcmUgbG93LCBtZWRpdW0sIGFuZCBoaWdoLicsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgY2hvaWNlczogWydsb3cnLCAnbWVkaXVtJywgJ2hpZ2gnXSxcbiAgfSlcbiAgLm9wdGlvbignY29kaW5nLXRvb2wnLCB7XG4gICAgYWxpYXM6ICdjJyxcbiAgICBkZXNjcmlwdGlvbjogJ0NvZGluZyB0b29sIHRvIHVzZSBmb3IgbWFraW5nIGNoYW5nZXMnLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGNob2ljZXM6IFsnYWlkZXInLCAnY2xhdWRlLWNvZGUnLCAnY29kZXgtY2xpJywgJ2dlbWluaS1jbGknXSxcbiAgICBkZWZhdWx0OiBERUZBVUxUX0NPRElOR19UT09MLFxuICB9KVxuICAub3B0aW9uKCdhaWRlci1leHRyYS1hcmdzJywge1xuICAgIGFsaWFzOiAnYScsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byBBaWRlciAoXCItLXllcy1hbHdheXMgLS1uby1jaGVjay11cGRhdGUgLS1uby1zaG93LXJlbGVhc2Utbm90ZXNcIiBpcyBhbHdheXMgYXBwbGllZCknLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGRlZmF1bHQ6IERFRkFVTFRfQUlERVJfRVhUUkFfQVJHUyxcbiAgfSlcbiAgLm9wdGlvbignY2xhdWRlLWNvZGUtZXh0cmEtYXJncycsIHtcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIENsYXVkZSBDb2RlIChcIi0tZGFuZ2Vyb3VzbHktc2tpcC1wZXJtaXNzaW9uc1wiIGlzIGFsd2F5cyBhcHBsaWVkLCBcIi0tcHJpbnRcIiBpcyBhcHBsaWVkIG9ubHkgaW4gQ0kpJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBkZWZhdWx0OiBERUZBVUxUX0NMQVVERV9DT0RFX0VYVFJBX0FSR1MsXG4gIH0pXG4gIC5vcHRpb24oJ2NvZGV4LWV4dHJhLWFyZ3MnLCB7XG4gICAgZGVzY3JpcHRpb246ICdBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIENvZGV4IENMSSAobm90aGluZyBpcyBhbHdheXMgYXBwbGllZCknLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGRlZmF1bHQ6IERFRkFVTFRfQ09ERVhfRVhUUkFfQVJHUyxcbiAgfSlcbiAgLm9wdGlvbignZ2VtaW5pLWV4dHJhLWFyZ3MnLCB7XG4gICAgZGVzY3JpcHRpb246ICdBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIEdlbWluaSBDTEkgKFwiLS15b2xvXCIgaXMgYWx3YXlzIGFwcGxpZWQpJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBkZWZhdWx0OiBERUZBVUxUX0dFTUlOSV9FWFRSQV9BUkdTLFxuICB9KVxuICAub3B0aW9uKCdyZXBvbWl4LWV4dHJhLWFyZ3MnLCB7XG4gICAgYWxpYXM6ICdyJyxcbiAgICBkZXNjcmlwdGlvbjogJ0FkZGl0aW9uYWwgYXJndW1lbnRzIGZvciByZXBvbWl4IHdoZW4gZ2VuZXJhdGluZyBjb250ZXh0JyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBkZWZhdWx0OiBERUZBVUxUX1JFUE9NSVhfRVhUUkFfQVJHUyxcbiAgfSlcbiAgLm9wdGlvbigndGVzdC1jb21tYW5kJywge1xuICAgIGFsaWFzOiAndCcsXG4gICAgZGVzY3JpcHRpb246ICdDb21tYW5kIHRvIHJ1biBhZnRlciB0aGUgY29kaW5nIHRvb2wgYXBwbGllcyBjaGFuZ2VzLiBJZiBpdCBmYWlscywgdGhlIGFzc2lzdGFudCB3aWxsIHRyeSB0byBmaXggaXQuJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgfSlcbiAgLm9wdGlvbignbWF4LXRlc3QtYXR0ZW1wdHMnLCB7XG4gICAgZGVzY3JpcHRpb246ICdNYXhpbXVtIG51bWJlciBvZiBhdHRlbXB0cyB0byBmaXggdGVzdCBmYWlsdXJlcycsXG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdDogREVGQVVMVF9NQVhfVEVTVF9BVFRFTVBUUyxcbiAgfSlcbiAgLm9wdGlvbignZHJ5LXJ1bicsIHtcbiAgICBhbGlhczogJ2QnLFxuICAgIGRlc2NyaXB0aW9uOiAnUnVuIHdpdGhvdXQgbWFraW5nIGFjdHVhbCBjaGFuZ2VzIChubyBicmFuY2ggY3JlYXRpb24sIG5vIFBSKScsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9KVxuICAub3B0aW9uKCdyZW1vdmUtcGF0dGVybicsIHtcbiAgICBkZXNjcmlwdGlvbjogJ1JlZ0V4cCBwYXR0ZXJuIHRvIHJlbW92ZSBmcm9tIGlzc3VlIGFuZCBQUiBkZXNjcmlwdGlvbnMnLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICB9KVxuICAub3B0aW9uKCduby1icmFuY2gnLCB7XG4gICAgYWxpYXM6ICduJyxcbiAgICBkZXNjcmlwdGlvbjogJ0RvIG5vdCBjcmVhdGUgYSBuZXcgYnJhbmNoLCBjb21taXQgY2hhbmdlcyBkaXJlY3RseSB0byB0aGUgYmFzZSBicmFuY2gnLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSlcbiAgLm9wdGlvbignbm9kZS1ydW50aW1lJywge1xuICAgIGRlc2NyaXB0aW9uOiAnTm9kZS5qcyBydW50aW1lIHRvIHVzZSBmb3IgcnVubmluZyB0b29scycsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgY2hvaWNlczogWydub2RlJywgJ2J1bicsICducHgnLCAnYnVueCddLFxuICAgIGRlZmF1bHQ6IERFRkFVTFRfTk9ERV9SVU5USU1FLFxuICB9KVxuICAvLyBPcHRpb25zIG9ubHkgZm9yIHRoaXMgc3RhbmRhbG9uZSB0b29sIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC5vcHRpb24oJ3dvcmtpbmctZGlyJywge1xuICAgIGFsaWFzOiAndycsXG4gICAgZGVzY3JpcHRpb246ICdXb3JraW5nIGRpcmVjdG9yeSBwYXRoIGZvciBjb21tYW5kcycsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gIH0pXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLnZlcnNpb24oZ2V0VmVyc2lvbigpKVxuICAuaGVscCgpLmFyZ3Y7XG5cbmZ1bmN0aW9uIGdldFZlcnNpb24oKTogc3RyaW5nIHtcbiAgbGV0IHBhY2thZ2VKc29uRGlyID0gaW1wb3J0Lm1ldGEuZGlyIHx8IHBhdGguZGlybmFtZShuZXcgVVJMKGltcG9ydC5tZXRhLnVybCkucGF0aG5hbWUpO1xuICB3aGlsZSAoIWZzLmV4aXN0c1N5bmMocGF0aC5qb2luKHBhY2thZ2VKc29uRGlyLCAncGFja2FnZS5qc29uJykpKSB7XG4gICAgcGFja2FnZUpzb25EaXIgPSBwYXRoLmRpcm5hbWUocGFja2FnZUpzb25EaXIpO1xuICB9XG4gIHJldHVybiBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4ocGFja2FnZUpzb25EaXIsICdwYWNrYWdlLmpzb24nKSwgJ3V0ZjgnKSkudmVyc2lvbjtcbn1cblxuaWYgKGFyZ3ZbJ3dvcmtpbmctZGlyJ10pIHtcbiAgcHJvY2Vzcy5jaGRpcihhcmd2Wyd3b3JraW5nLWRpciddKTtcbiAgY29uc29sZS5pbmZvKGBDaGFuZ2VkIHdvcmtpbmcgZGlyZWN0b3J5IHRvOiAke3Byb2Nlc3MuY3dkKCl9YCk7XG59XG5cbi8vIE5vcm1hbGl6ZSB0aGUgcnVudGltZSB2YWx1ZSAoY29udmVydCBhbGlhc2VzIHRvIGFjdHVhbCBjb21tYW5kcylcbmNvbnN0IG5vZGVSdW50aW1lOiBOb2RlUnVudGltZUFjdHVhbCA9IG5vcm1hbGl6ZU5vZGVSdW50aW1lKGFyZ3ZbJ25vZGUtcnVudGltZSddIGFzIE5vZGVSdW50aW1lKTtcblxuYXdhaXQgbWFpbih7XG4gIGFpZGVyRXh0cmFBcmdzOiBhcmd2WydhaWRlci1leHRyYS1hcmdzJ10sXG4gIGNsYXVkZUNvZGVFeHRyYUFyZ3M6IGFyZ3ZbJ2NsYXVkZS1jb2RlLWV4dHJhLWFyZ3MnXSxcbiAgY29kZXhFeHRyYUFyZ3M6IGFyZ3ZbJ2NvZGV4LWV4dHJhLWFyZ3MnXSxcbiAgZ2VtaW5pRXh0cmFBcmdzOiBhcmd2WydnZW1pbmktZXh0cmEtYXJncyddLFxuICBjb2RpbmdUb29sOiBhcmd2Wydjb2RpbmctdG9vbCddIGFzIENvZGluZ1Rvb2wsXG4gIGRyeVJ1bjogYXJndlsnZHJ5LXJ1biddLFxuICBub0JyYW5jaDogYXJndlsnbm8tYnJhbmNoJ10sXG4gIG5vZGVSdW50aW1lLFxuICB0d29TdGFnZVBsYW5uaW5nOiBhcmd2Wyd0d28tc3RhZ2VkLXBsYW5uaW5nJ10sXG4gIGlzc3VlTnVtYmVyOiBhcmd2Wydpc3N1ZS1udW1iZXInXSxcbiAgbWF4VGVzdEF0dGVtcHRzOiBhcmd2WydtYXgtdGVzdC1hdHRlbXB0cyddLFxuICBwbGFubmluZ01vZGVsOiBhcmd2WydwbGFubmluZy1tb2RlbCddLFxuICByZWFzb25pbmdFZmZvcnQ6IGFyZ3ZbJ3JlYXNvbmluZy1lZmZvcnQnXSBhcyBSZWFzb25pbmdFZmZvcnQsXG4gIHJlcG9taXhFeHRyYUFyZ3M6IGFyZ3ZbJ3JlcG9taXgtZXh0cmEtYXJncyddLFxuICB0ZXN0Q29tbWFuZDogYXJndlsndGVzdC1jb21tYW5kJ10sXG4gIHJlbW92ZVBhdHRlcm46IGFyZ3ZbJ3JlbW92ZS1wYXR0ZXJuJ10sXG59KTtcbiJdLCJuYW1lcyI6WyJhbGlnbiIsInJpZ2h0Iiwic3RyIiwid2lkdGgiLCJ0cmltIiwic3RyV2lkdGgiLCJtaXhpbiIsInN0cmluZ1dpZHRoIiwicmVwZWF0IiwiY2VudGVyIiwiVUkiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJfYSIsInRoaXMiLCJ3cmFwIiwicm93cyIsInNwYW4iLCJhcmdzIiwiZGl2IiwicmVzZXRPdXRwdXQiLCJsZW5ndGgiLCJzaG91bGRBcHBseUxheW91dERTTCIsImFwcGx5TGF5b3V0RFNMIiwiY29scyIsIm1hcCIsImFyZyIsImNvbEZyb21TdHJpbmciLCJwdXNoIiwidGVzdCIsInNwbGl0Iiwicm93IiwibGVmdENvbHVtbldpZHRoIiwiZm9yRWFjaCIsImNvbHVtbnMiLCJNYXRoIiwibWluIiwiZmxvb3IiLCJyIiwiaSIsInRleHQiLCJwYWRkaW5nIiwibWVhc3VyZVBhZGRpbmciLCJ1bmRlZmluZWQiLCJub0Fuc2kiLCJzdHJpcEFuc2kiLCJtYXRjaCIsInRvU3RyaW5nIiwibGluZXMiLCJyb3dUb1N0cmluZyIsImZpbHRlciIsImxpbmUiLCJoaWRkZW4iLCJqb2luIiwicmFzdGVyaXplIiwicnJvdyIsImNvbCIsImMiLCJ3cmFwV2lkdGgiLCJuZWdhdGVQYWRkaW5nIiwidHMiLCJmbiIsImFkZEJvcmRlciIsInJlbmRlcklubGluZSIsInJlcGxhY2UiLCJzb3VyY2UiLCJwcmV2aW91c0xpbmUiLCJsZWFkaW5nV2hpdGVzcGFjZSIsInRhcmdldCIsInRhcmdldFRleHRXaWR0aCIsInRyaW1SaWdodCIsInRyaW1MZWZ0IiwicnJvd3MiLCJ3aWR0aHMiLCJjb2x1bW5XaWR0aHMiLCJ3cmFwcGVkIiwiaGFyZCIsImJvcmRlciIsInVuc2hpZnQiLCJBcnJheSIsImZpbGwiLCJ1bnNldCIsInJlbWFpbmluZ1dpZHRoIiwidW5zZXRXaWR0aCIsInciLCJtYXgiLCJtaW5XaWR0aCIsIl9taW5XaWR0aCIsInN0eWxlIiwicmVnZXgiLCJvbmx5Rmlyc3QiLCJwYXR0ZXJuIiwiUmVnRXhwIiwiYW5zaVJlZ2V4Iiwic3RyaW5nIiwiVHlwZUVycm9yIiwiZWFzdEFzaWFuV2lkdGgiLCJjb2RlUG9pbnQiLCJhbWJpZ3VvdXNBc1dpZGUiLCJOdW1iZXIiLCJpc1NhZmVJbnRlZ2VyIiwidmFsaWRhdGUiLCJ4IiwiaXNXaWRlIiwiaXNBbWJpZ3VvdXMiLCJlbW9qaVJlZ2V4Iiwic2VnbWVudGVyIiwiSW50bCIsIlNlZ21lbnRlciIsImRlZmF1bHRJZ25vcmFibGVDb2RlUG9pbnRSZWdleCIsIm9wdGlvbnMiLCJhbWJpZ3VvdXNJc05hcnJvdyIsImNvdW50QW5zaUVzY2FwZUNvZGVzIiwiZWFzdEFzaWFuV2lkdGhPcHRpb25zIiwic2VnbWVudCIsImNoYXJhY3RlciIsImNvZGVQb2ludEF0Iiwid3JhcEFuc2kxNiIsIm9mZnNldCIsImNvZGUiLCJ3cmFwQW5zaTI1NiIsIndyYXBBbnNpMTZtIiwicmVkIiwiZ3JlZW4iLCJibHVlIiwic3R5bGVzIiwibW9kaWZpZXIiLCJyZXNldCIsImJvbGQiLCJkaW0iLCJpdGFsaWMiLCJ1bmRlcmxpbmUiLCJvdmVybGluZSIsImludmVyc2UiLCJzdHJpa2V0aHJvdWdoIiwiY29sb3IiLCJibGFjayIsInllbGxvdyIsIm1hZ2VudGEiLCJjeWFuIiwid2hpdGUiLCJibGFja0JyaWdodCIsImdyYXkiLCJncmV5IiwicmVkQnJpZ2h0IiwiZ3JlZW5CcmlnaHQiLCJ5ZWxsb3dCcmlnaHQiLCJibHVlQnJpZ2h0IiwibWFnZW50YUJyaWdodCIsImN5YW5CcmlnaHQiLCJ3aGl0ZUJyaWdodCIsImJnQ29sb3IiLCJiZ0JsYWNrIiwiYmdSZWQiLCJiZ0dyZWVuIiwiYmdZZWxsb3ciLCJiZ0JsdWUiLCJiZ01hZ2VudGEiLCJiZ0N5YW4iLCJiZ1doaXRlIiwiYmdCbGFja0JyaWdodCIsImJnR3JheSIsImJnR3JleSIsImJnUmVkQnJpZ2h0IiwiYmdHcmVlbkJyaWdodCIsImJnWWVsbG93QnJpZ2h0IiwiYmdCbHVlQnJpZ2h0IiwiYmdNYWdlbnRhQnJpZ2h0IiwiYmdDeWFuQnJpZ2h0IiwiYmdXaGl0ZUJyaWdodCIsIk9iamVjdCIsImtleXMiLCJhbnNpU3R5bGVzIiwiY29kZXMiLCJNYXAiLCJncm91cE5hbWUiLCJncm91cCIsImVudHJpZXMiLCJzdHlsZU5hbWUiLCJvcGVuIiwiY2xvc2UiLCJzZXQiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImFuc2kiLCJhbnNpMjU2IiwiYW5zaTE2bSIsImRlZmluZVByb3BlcnRpZXMiLCJyZ2JUb0Fuc2kyNTYiLCJyb3VuZCIsImhleFRvUmdiIiwiaGV4IiwibWF0Y2hlcyIsImV4ZWMiLCJjb2xvclN0cmluZyIsImludGVnZXIiLCJwYXJzZUludCIsImhleFRvQW5zaTI1NiIsImFuc2kyNTZUb0Fuc2kiLCJyZW1haW5kZXIiLCJyZXN1bHQiLCJyZ2JUb0Fuc2kiLCJoZXhUb0Fuc2kiLCJhc3NlbWJsZVN0eWxlcyIsIkVTQ0FQRVMiLCJTZXQiLCJBTlNJX0VTQ0FQRV9MSU5LIiwid3JhcEFuc2lDb2RlIiwidmFsdWVzIiwibmV4dCIsIndyYXBBbnNpSHlwZXJsaW5rIiwidXJsIiwid3JhcFdvcmQiLCJ3b3JkIiwiY2hhcmFjdGVycyIsImlzSW5zaWRlRXNjYXBlIiwiaXNJbnNpZGVMaW5rRXNjYXBlIiwidmlzaWJsZSIsImF0IiwiaW5kZXgiLCJjaGFyYWN0ZXJMZW5ndGgiLCJoYXMiLCJzbGljZSIsInBvcCIsImVzY2FwZUNvZGUiLCJlc2NhcGVVcmwiLCJyZXR1cm5WYWx1ZSIsImxlbmd0aHMiLCJ3b3JkTGVuZ3RocyIsInRyaW1TdGFydCIsInJvd0xlbmd0aCIsIndvcmRXcmFwIiwicmVtYWluaW5nQ29sdW1ucyIsImJyZWFrc1N0YXJ0aW5nVGhpc0xpbmUiLCJ3b3JkcyIsImxhc3QiLCJzdHJpbmdWaXNpYmxlVHJpbVNwYWNlc1JpZ2h0IiwicHJlU3RyaW5nIiwicHJlIiwicHJlU3RyaW5nSW5kZXgiLCJncm91cHMiLCJwYXJzZUZsb2F0IiwidXJpIiwiZ2V0Iiwid3JhcEFuc2kiLCJTdHJpbmciLCJub3JtYWxpemUiLCJyZXBsYWNlQWxsIiwiY2FtZWxDYXNlIiwidG9Mb3dlckNhc2UiLCJ0b1VwcGVyQ2FzZSIsImluZGV4T2YiLCJjYW1lbGNhc2UiLCJuZXh0Q2hyVXBwZXIiLCJsZWFkaW5nSHlwaGVucyIsImNociIsImNoYXJBdCIsImRlY2FtZWxpemUiLCJqb2luU3RyaW5nIiwibG93ZXJjYXNlIiwibm90Q2FtZWxjYXNlIiwiY2hyTG93ZXIiLCJjaHJTdHJpbmciLCJsb29rc0xpa2VOdW1iZXIiLCJEZWZhdWx0VmFsdWVzRm9yVHlwZUtleSIsImluY3JlbWVudCIsIm9yaWciLCJzYW5pdGl6ZUtleSIsImtleSIsIl9iIiwiX2MiLCJtaW5Ob2RlVmVyc2lvbiIsInByb2Nlc3MiLCJlbnYiLCJZQVJHU19NSU5fTk9ERV9WRVJTSU9OIiwibm9kZVZlcnNpb24iLCJ2ZXJzaW9ucyIsIm5vZGUiLCJ2ZXJzaW9uIiwiRXJyb3IiLCJyZXF1aXJlIiwiY3JlYXRlUmVxdWlyZSIsInBhcnNlciIsIl9taXhpbiIsInBhcnNlIiwiYXJnc0lucHV0IiwiYXNzaWduIiwiYWxpYXMiLCJhcnJheSIsImJvb2xlYW4iLCJjb25maWciLCJjb25maWdPYmplY3RzIiwiY29uZmlndXJhdGlvbiIsImNvZXJjZSIsImNvdW50IiwiZGVmYXVsdCIsImVudlByZWZpeCIsIm5hcmciLCJudW1iZXIiLCJfXyIsImFyZ1N0cmluZyIsImlzQXJyYXkiLCJlIiwicHJldkMiLCJvcGVuaW5nIiwiaWkiLCJ0b2tlbml6ZUFyZ1N0cmluZyIsImlucHV0SXNTdHJpbmciLCJhbGlhc2VzIiwiYWxpYXNBcnJheXMiLCJjb21iaW5lZCIsImNyZWF0ZSIsImNoYW5nZSIsImNvbmNhdCIsInYiLCJzcGxpY2UiLCJhbGlhc0FycmF5IiwibGFzdEFsaWFzIiwic2VsZiIsImNvbWJpbmVBbGlhc2VzIiwiZGVmYXVsdHMiLCJub3RGbGFnc09wdGlvbiIsIm5vdEZsYWdzQXJndiIsIm5ld0FsaWFzZXMiLCJkZWZhdWx0ZWQiLCJmb3JtYXQiLCJmbGFncyIsImFycmF5cyIsImJvb2xzIiwic3RyaW5ncyIsIm51bWJlcnMiLCJjb3VudHMiLCJjb25maWdzIiwibmFyZ3MiLCJjb2VyY2lvbnMiLCJuZWdhdGl2ZSIsIm5lZ2F0ZWRCb29sZWFuIiwiQm9vbGVhbiIsIm9wdCIsImFzc2lnbm1lbnQiLCJvYmoiLCJ5IiwiZXh0ZW5kQWxpYXNlcyIsImVycm9yIiwiZmluZCIsImNoZWNrQWxsQWxpYXNlcyIsIm5vdEZsYWdzIiwiYXJndiIsIl8iLCJhcmd2UmV0dXJuIiwidHJ1bmNhdGVkQXJnIiwiYnJva2VuIiwibGV0dGVycyIsIm0iLCJpc1Vua25vd25PcHRpb25Bc0FyZyIsInB1c2hQb3NpdGlvbmFsIiwiZWF0QXJyYXkiLCJlYXROYXJncyIsInNldEFyZyIsImRlZmF1bHRWYWx1ZSIsImoiLCJtYXliZUNvZXJjZWROdW1iZXIiLCJtYXliZUNvZXJjZU51bWJlciIsImFyZ0FmdGVyRXF1YWxTaWduIiwidG9FYXQiLCJpc05hTiIsImlzVW5kZWZpbmVkIiwiYXZhaWxhYmxlIiwiY29uc3VtZWQiLCJhcmdzVG9TZXQiLCJuYXJnc0NvdW50IiwiZGVmVmFsIiwicHJvY2Vzc1ZhbHVlIiwidmFsIiwic2hvdWxkU3RyaXBRdW90ZXMiLCJwcm9wIiwiYWRkTmV3QWxpYXMiLCJzcGxpdEtleSIsInNldEtleSIsImtleVByb3BlcnRpZXMiLCJhIiwic2hpZnQiLCJpbmNsdWRlcyIsInN1YnN0cmluZyIsInN0cmlwUXVvdGVzIiwic2V0Q29uZmlnT2JqZWN0IiwicHJldiIsImZ1bGxLZXkiLCJoYXNLZXkiLCJhcHBseUVudlZhcnMiLCJjb25maWdPbmx5IiwicHJlZml4IiwiZW52VmFyIiwibGFzdEluZGV4T2YiLCJhcHBseURlZmF1bHRzQW5kQWxpYXNlcyIsImNhbkxvZyIsIm8iLCJpc1R5cGVBcnJheSIsImlzVmFsdWVBcnJheSIsImR1cGxpY2F0ZSIsImZsYWciLCJ0b0NoZWNrIiwic2V0QWxpYXMiLCJoYXNBbnlGbGFnIiwiZmxhZ3NLZXlzIiwiayIsInNvbWUiLCJoYXNBbGxGbGFncyIsImhhc0FsbFNob3J0RmxhZ3MiLCJwYXR0ZXJucyIsImhhc0ZsYWdzTWF0Y2hpbmciLCJpc1Vua25vd25PcHRpb24iLCJ0eXBlIiwiQk9PTEVBTiIsIlNUUklORyIsIk5VTUJFUiIsIkFSUkFZIiwiZ3Vlc3NUeXBlIiwibnVtIiwiY29uZmlnTG9va3VwIiwiY29uZmlnS2V5IiwiY29uZmlnUGF0aCIsInJlc29sdmVkQ29uZmlnUGF0aCIsInJlc29sdmUiLCJjd2QiLCJyZXNvbHZlQ29uZmlnIiwiZXgiLCJuYW1lIiwic2V0Q29uZmlnIiwiY29uZmlnT2JqZWN0IiwiYXBwbGllZCIsImFsaSIsImFkZCIsImVyciIsImFwcGx5Q29lcmNpb25zIiwic2V0UGxhY2Vob2xkZXJLZXlzIiwicGF0aCIsIkpTT04iLCJyZWFkRmlsZVN5bmMiLCJ5YXJnc1BhcnNlciIsImdldFByb2Nlc3NBcmd2QmluSW5kZXgiLCJlbGVjdHJvbiIsImRlZmF1bHRBcHAiLCJkZXRhaWxlZCIsInNoaW0kMyIsImZzIiwid3JpdGVGaWxlIiwiZXhpc3RzIiwiZmlsZSIsInN0YXRTeW5jIiwiaXNGaWxlIiwic2hpbSIsIlkxOE4iLCJkaXJlY3RvcnkiLCJ1cGRhdGVGaWxlcyIsImxvY2FsZSIsImZhbGxiYWNrVG9MYW5ndWFnZSIsImNhY2hlIiwid3JpdGVRdWV1ZSIsImFyZ3VtZW50cyIsIl90YWdnZWRMaXRlcmFsIiwiY2IiLCJfcmVhZExvY2FsZUZpbGUiLCJfZW5xdWV1ZVdyaXRlIiwiYXBwbHkiLCJfX24iLCJwcm90b3R5cGUiLCJjYWxsIiwic2luZ3VsYXIiLCJwbHVyYWwiLCJxdWFudGl0eSIsIm9uZSIsIm90aGVyIiwic2V0TG9jYWxlIiwiZ2V0TG9jYWxlIiwidXBkYXRlTG9jYWxlIiwiaGFzT3duUHJvcGVydHkiLCJwYXJ0cyIsInBhcnQiLCJ3b3JrIiwiX3Byb2Nlc3NXcml0ZVF1ZXVlIiwiX3RoaXMiLCJsYW5ndWFnZUZpbGUiLCJfcmVzb2x2ZUxvY2FsZUZpbGUiLCJzZXJpYWxpemVkTG9jYWxlIiwic3RyaW5naWZ5IiwibG9jYWxlTG9va3VwIiwiU3ludGF4RXJyb3IiLCJtZXNzYWdlIiwiX2ZpbGVFeGlzdHNTeW5jIiwiZ2V0Q2FsbGVyRmlsZSIsInBvc2l0aW9uIiwic3RhY2tUcmFjZUxpbWl0Iiwib2xkUHJlcGFyZVN0YWNrVHJhY2UiLCJwcmVwYXJlU3RhY2tUcmFjZSIsInN0YWNrIiwiZ2V0RmlsZU5hbWUiLCJfX2Rpcm5hbWUiLCJmaWxlVVJMVG9QYXRoIiwibWFpbkZpbGVuYW1lIiwic2hpbSQxIiwiYXNzZXJ0Iiwibm90U3RyaWN0RXF1YWwiLCJzdHJpY3RFcXVhbCIsImNsaXVpIiwic3Rkb3V0IiwiZmluZFVwIiwic3RhcnQiLCJjYWxsYmFjayIsInRtcCIsImRpciIsImlzRGlyZWN0b3J5IiwiZGlybmFtZSIsInJlYWRkaXJTeW5jIiwiZ2V0RW52IiwiaW5zcGVjdCIsImdldFByb2Nlc3NBcmd2QmluIiwiUGFyc2VyIiwiYmFzZW5hbWUiLCJleHRuYW1lIiwicmVsYXRpdmUiLCJlbWl0V2FybmluZyIsIndhcm5pbmciLCJleGVjUGF0aCIsImV4aXQiLCJuZXh0VGljayIsInN0ZENvbHVtbnMiLCJjYWxsZXJGaWxlIiwieTE4biIsIl9zaGltIiwiYmluZCIsIl95MThuIiwiYXNzZXJ0Tm90U3RyaWN0RXF1YWwiLCJhY3R1YWwiLCJleHBlY3RlZCIsImFzc2VydFNpbmdsZUtleSIsIm9iamVjdEtleXMiLCJvYmplY3QiLCJpc1Byb21pc2UiLCJtYXliZVByb21pc2UiLCJ0aGVuIiwiWUVycm9yIiwibXNnIiwic3VwZXIiLCJjYXB0dXJlU3RhY2tUcmFjZSIsInBhcnNlQ29tbWFuZCIsImNtZCIsInNwbGl0Q29tbWFuZCIsImJyZWdleCIsImZpcnN0Q29tbWFuZCIsInBhcnNlZENvbW1hbmQiLCJkZW1hbmRlZCIsIm9wdGlvbmFsIiwidmFyaWFkaWMiLCJwb3NpdGlvbk5hbWUiLCJhcmdzZXJ0IiwiYXJnMSIsImFyZzIiLCJhcmczIiwicGFyc2VkIiwiY2FsbGVyQXJndW1lbnRzIiwiX2xlbmd0aCIsInRvdGFsQ29tbWFuZHMiLCJvYnNlcnZlZFR5cGUiLCJhcmd1bWVudFR5cGVFcnJvciIsImNvbnNvbGUiLCJ3YXJuIiwiYWxsb3dlZFR5cGVzIiwiR2xvYmFsTWlkZGxld2FyZSIsInlhcmdzIiwiZ2xvYmFsTWlkZGxld2FyZSIsImZyb3plbnMiLCJhZGRNaWRkbGV3YXJlIiwiYXBwbHlCZWZvcmVWYWxpZGF0aW9uIiwiZ2xvYmFsIiwibXV0YXRlcyIsImFkZENvZXJjZU1pZGRsZXdhcmUiLCJvcHRpb24iLCJnZXRBbGlhc2VzIiwiZ2V0TWlkZGxld2FyZSIsImZyZWV6ZSIsInVuZnJlZXplIiwiZnJvemVuIiwiYXBwbHlNaWRkbGV3YXJlIiwibWlkZGxld2FyZXMiLCJiZWZvcmVWYWxpZGF0aW9uIiwicmVkdWNlIiwiYWNjIiwibWlkZGxld2FyZSIsImluaXRpYWxPYmoiLCJQcm9taXNlIiwiYWxsIiwibWlkZGxld2FyZU9iaiIsIm1heWJlQXN5bmNSZXN1bHQiLCJnZXRSZXN1bHQiLCJyZXN1bHRIYW5kbGVyIiwiZXJyb3JIYW5kbGVyIiwiREVGQVVMVF9NQVJLRVIiLCJDb21tYW5kSW5zdGFuY2UiLCJ1c2FnZSIsInZhbGlkYXRpb24iLCJyZXF1aXJlQ2FjaGUiLCJoYW5kbGVycyIsImFsaWFzTWFwIiwiYWRkRGlyZWN0b3J5IiwicmVxIiwiZnVsbERpclBhdGgiLCJmaWxlcyIsInJlY3Vyc2l2ZSIsInJlY3Vyc2UiLCJleHRlbnNpb25zIiwidmlzaXQiLCJmaWxlYiIsImV4Y2x1ZGUiLCJpbmNsdWRlIiwic3VwcG9ydGVkRXh0ZW5zaW9uIiwiZXh0IiwiZW5kc1dpdGgiLCJqb2luZWQiLCJtb2R1bGUiLCJleHRlbmRhYmxlTW9kdWxlIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImNvbW1hbmQiLCJhZGRIYW5kbGVyIiwiZGVzY3JpcHRpb24iLCJidWlsZGVyIiwiaGFuZGxlciIsImNvbW1hbmRNaWRkbGV3YXJlIiwiZGVwcmVjYXRlZCIsImNvbW1hbmRNaWRkbGV3YXJlRmFjdG9yeSIsImV2ZXJ5IiwiaXNDb21tYW5kQW5kQWxpYXNlcyIsImlzQ29tbWFuZEhhbmRsZXJEZWZpbml0aW9uIiwiZXh0cmFjdERlc2MiLCJpc0NvbW1hbmRCdWlsZGVyRGVmaW5pdGlvbiIsImlzRGVmYXVsdCIsInBhcnNlZEFsaWFzZXMiLCJvcmlnaW5hbCIsImRlZmF1bHRDb21tYW5kIiwiZ2V0Q29tbWFuZEhhbmRsZXJzIiwiZ2V0Q29tbWFuZHMiLCJoYXNEZWZhdWx0Q29tbWFuZCIsInJ1bkNvbW1hbmQiLCJjb21tYW5kSW5kZXgiLCJoZWxwT25seSIsImhlbHBPclZlcnNpb25TZXQiLCJjb21tYW5kSGFuZGxlciIsImN1cnJlbnRDb250ZXh0IiwiZ2V0SW50ZXJuYWxNZXRob2RzIiwiZ2V0Q29udGV4dCIsInBhcmVudENvbW1hbmRzIiwiY29tbWFuZHMiLCJpc0RlZmF1bHRDb21tYW5kIiwiZnVsbENvbW1hbmRzIiwiYnVpbGRlclJlc3VsdCIsImFwcGx5QnVpbGRlclVwZGF0ZVVzYWdlQW5kUGFyc2UiLCJhcHBseU1pZGRsZXdhcmVBbmRHZXRSZXN1bHQiLCJpbm5lckFyZ3YiLCJpbm5lcllhcmdzIiwiaXNDb21tYW5kQnVpbGRlckNhbGxiYWNrIiwiZ2V0VXNhZ2VJbnN0YW5jZSIsImJ1aWxkZXJPdXRwdXQiLCJvdXRwdXQiLCJwYXJzZUFuZFVwZGF0ZVVzYWdlIiwiaXNDb21tYW5kQnVpbGRlck9wdGlvbkRlZmluaXRpb25zIiwic2hvdWxkVXBkYXRlVXNhZ2UiLCJ1c2FnZUZyb21QYXJlbnRDb21tYW5kc0NvbW1hbmRIYW5kbGVyIiwicnVuWWFyZ3NQYXJzZXJBbmRFeGVjdXRlQ29tbWFuZHMiLCJnZXRVc2FnZURpc2FibGVkIiwiZ2V0VXNhZ2UiLCJwYyIsImhhbmRsZVZhbGlkYXRpb25BbmRHZXRSZXN1bHQiLCJwb3NpdGlvbmFsTWFwIiwiZ2V0SGFzT3V0cHV0IiwicnVuVmFsaWRhdGlvbiIsInNldEhhc091dHB1dCIsInBvcHVsYXRlRG91YmxlRGFzaCIsImdldE9wdGlvbnMiLCJwb3N0UHJvY2VzcyIsImhhbmRsZXJSZXN1bHQiLCJjYWNoZUhlbHBNZXNzYWdlIiwiaGFzUGFyc2VDYWxsYmFjayIsImNhdGNoIiwiZmFpbCIsIl9lcnIiLCJwb3B1bGF0ZVBvc2l0aW9uYWxzIiwibWF5YmVQcm9taXNlQXJndiIsInJlc29sdmVkSW5uZXJBcmd2IiwiY29udGV4dCIsInBvc2l0aW9uYWxDb3VudCIsImRlbWFuZCIsInBvcHVsYXRlUG9zaXRpb25hbCIsIm1heWJlIiwicG9zdFByb2Nlc3NQb3NpdGlvbmFscyIsImNtZFRvUGFyc2VPcHRpb25zIiwicG9zaXRpb25hbCIsImNtZFN0cmluZyIsInBhcnNlT3B0aW9ucyIsImQiLCJ1bnBhcnNlZCIsInBvc2l0aW9uYWxLZXlzIiwiaXNJbkNvbmZpZ3MiLCJpc0RlZmF1bHRlZCIsInJ1bkRlZmF1bHRCdWlsZGVyT24iLCJjb21tYW5kU3RyaW5nIiwiZGVzY3JpYmUiLCJkZXNjIiwib2JqRmlsdGVyIiwic2V0QmxvY2tpbmciLCJibG9ja2luZyIsInN0ZGVyciIsIl9zdHJlYW0iLCJzdHJlYW0iLCJfaGFuZGxlIiwiaXNUVFkiLCJpc0Jvb2xlYW4iLCJmYWlscyIsImZhaWxGbiIsImYiLCJmYWlsTWVzc2FnZSIsImdsb2JhbEZhaWxNZXNzYWdlIiwic2hvd0hlbHBPbkZhaWwiLCJlbmFibGVkIiwiaXNHbG9iYWxDb250ZXh0IiwiZmFpbHVyZU91dHB1dCIsImxvZ2dlciIsImdldExvZ2dlckluc3RhbmNlIiwiZ2V0RXhpdFByb2Nlc3MiLCJzaG93SGVscCIsImdsb2JhbE9yQ29tbWFuZEZhaWxNZXNzYWdlIiwidXNhZ2VzIiwidXNhZ2VEaXNhYmxlZCIsImdldFBvc2l0aW9uYWxHcm91cE5hbWUiLCJleGFtcGxlcyIsImV4YW1wbGUiLCJjbWRBcnJheSIsImRlc2NyaXB0aW9ucyIsImtleU9yS2V5cyIsImdldERlc2NyaXB0aW9ucyIsImVwaWxvZ3MiLCJlcGlsb2ciLCJ3cmFwU2V0IiwiZ2V0V3JhcCIsIm1heFdpZHRoIiwid2luZG93V2lkdGgiLCJkZWZlclkxOG5Mb29rdXBQcmVmaXgiLCJ0YWJsZSIsInRoZVdyYXAiLCJnZXRUZXh0IiwiZ2V0SW5kZW50YXRpb24iLCJjYWNoZWRIZWxwTWVzc2FnZSIsImZpbHRlckhpZGRlbk9wdGlvbnMiLCJoaWRkZW5PcHRpb25zIiwic2hvd0hpZGRlbk9wdCIsImRlZmF1bHRTdHJpbmciLCJkZWZhdWx0RGVzY3JpcHRpb24iLCJkZWZlclkxOG5Mb29rdXAiLCJoZWxwIiwiZGVtYW5kZWRPcHRpb25zIiwiZ2V0RGVtYW5kZWRPcHRpb25zIiwiZGVtYW5kT3B0aW9uIiwibm9ybWFsaXplQWxpYXNlcyIsImJhc2UkMCIsImN1c3RvbVNjcmlwdE5hbWUiLCIkMCIsImRlbWFuZGVkQ29tbWFuZHMiLCJnZXREZW1hbmRlZENvbW1hbmRzIiwiZGVwcmVjYXRlZE9wdGlvbnMiLCJnZXREZXByZWNhdGVkT3B0aW9ucyIsImdldEdyb3VwcyIsInVpIiwidSIsImdldFBhcnNlckNvbmZpZ3VyYXRpb24iLCJzb3J0IiwiYiIsImxvY2FsZUNvbXBhcmUiLCJoaW50cyIsImFsaWFzS2V5cyIsImRlZmF1bHRHcm91cCIsImdyb3VwZWRLZXlzIiwiYWRkVW5ncm91cGVkS2V5cyIsImlzTG9uZ1N3aXRjaCIsInN3IiwiZGlzcGxheWVkR3JvdXBzIiwibm9ybWFsaXplZEtleXMiLCJhbGlhc0tleSIsInN3aXRjaGVzIiwic3cxIiwic3cyIiwiaW5kZW50IiwiaXNJbmRlbnRlZFRleHQiLCJpbmRlbnRhdGlvbiIsImtzd2l0Y2giLCJleHRyYSIsImNob2ljZXMiLCJzdHJpbmdpZmllZFZhbHVlcyIsInNob3VsZEhpZGVPcHRpb25FeHRyYXMiLCJnZXRVc2FnZUNvbmZpZ3VyYXRpb24iLCJjbGVhckNhY2hlZEhlbHBNZXNzYWdlIiwiaGFzQ2FjaGVkSGVscE1lc3NhZ2UiLCJsZXZlbCIsImZ1bmN0aW9uRGVzY3JpcHRpb24iLCJzZXBhcmF0b3IiLCJzZXAiLCJ2ZXIiLCJzaG93VmVyc2lvbiIsImxvY2FsTG9va3VwIiwiQ29tcGxldGlvbiIsImNvbXBsZXRpb25LZXkiLCJjdXN0b21Db21wbGV0aW9uRnVuY3Rpb24iLCJpbmRleEFmdGVyTGFzdFJlc2V0IiwienNoU2hlbGwiLCJkZWZhdWx0Q29tcGxldGlvbiIsImN1cnJlbnQiLCJkb25lIiwiY29tcGxldGlvbnMiLCJjb21tYW5kQ29tcGxldGlvbnMiLCJvcHRpb25Db21wbGV0aW9ucyIsImNob2ljZXNGcm9tT3B0aW9uc0NvbXBsZXRpb25zIiwiY2hvaWNlc0Zyb21Qb3NpdGlvbmFsc0NvbXBsZXRpb25zIiwicHJldmlvdXNBcmdIYXNDaG9pY2VzIiwidXNhZ2VDb21tYW5kIiwiY29tbWFuZE5hbWUiLCJuZWdhYmxlIiwiYXJnc0NvbnRhaW5LZXkiLCJjb21wbGV0ZU9wdGlvbktleSIsImdldFByZXZpb3VzQXJnQ2hvaWNlcyIsInBvc2l0aW9uYWxLZXkiLCJjaG9pY2UiLCJzdGFydHNXaXRoIiwicHJldmlvdXNBcmciLCJwcmV2aW91c0FyZ0tleSIsInBvc3NpYmxlQWxpYXNlcyIsInBvc3NpYmxlQWxpYXMiLCJhcmdzQ29udGFpbnMiLCJzIiwiX2QiLCJrZXlXaXRoRGVzYyIsImRlc2NzIiwiZGVzY0Zyb21BbGlhcyIsImRhc2hlcyIsImlzU2hvcnRPcHRpb24iLCJjdXN0b21Db21wbGV0aW9uIiwibGlzdCIsImNvbXBsZXRpb25GdW5jdGlvbiIsImlzRmFsbGJhY2tDb21wbGV0aW9uRnVuY3Rpb24iLCJvbkNvbXBsZXRlZCIsImdldENvbXBsZXRpb24iLCJnZW5lcmF0ZUNvbXBsZXRpb25TY3JpcHQiLCJzY3JpcHQiLCJyZWdpc3RlckZ1bmN0aW9uIiwic2V0UGFyc2VkIiwibGV2ZW5zaHRlaW4iLCJtYXRyaXgiLCJzcGVjaWFsS2V5cyIsInByZXZpb3VzbHlWaXNpdGVkQ29uZmlncyIsImFwcGx5RXh0ZW5kcyIsIm1lcmdlRXh0ZW5kcyIsImRlZmF1bHRDb25maWciLCJleHRlbmRzIiwiaXNQYXRoIiwicGF0aFRvRGVmYXVsdCIsInBhdGhUb0V4dGVuZCIsImdldFBhdGhUb0RlZmF1bHRDb25maWciLCJjZmdQYXRoIiwiY2hlY2tGb3JDaXJjdWxhckV4dGVuZHMiLCJtZXJnZURlZXAiLCJjb25maWcxIiwiY29uZmlnMiIsImlzT2JqZWN0IiwiX1lhcmdzSW5zdGFuY2VfY29tbWFuZCIsIl9ZYXJnc0luc3RhbmNlX2N3ZCIsIl9ZYXJnc0luc3RhbmNlX2NvbnRleHQiLCJfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uIiwiX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbkNvbW1hbmQiLCJfWWFyZ3NJbnN0YW5jZV9kZWZhdWx0U2hvd0hpZGRlbk9wdCIsIl9ZYXJnc0luc3RhbmNlX2V4aXRFcnJvciIsIl9ZYXJnc0luc3RhbmNlX2RldGVjdExvY2FsZSIsIl9ZYXJnc0luc3RhbmNlX2VtaXR0ZWRXYXJuaW5ncyIsIl9ZYXJnc0luc3RhbmNlX2V4aXRQcm9jZXNzIiwiX1lhcmdzSW5zdGFuY2VfZnJvemVucyIsIl9ZYXJnc0luc3RhbmNlX2dsb2JhbE1pZGRsZXdhcmUiLCJfWWFyZ3NJbnN0YW5jZV9ncm91cHMiLCJfWWFyZ3NJbnN0YW5jZV9oYXNPdXRwdXQiLCJfWWFyZ3NJbnN0YW5jZV9oZWxwT3B0IiwiX1lhcmdzSW5zdGFuY2VfaXNHbG9iYWxDb250ZXh0IiwiX1lhcmdzSW5zdGFuY2VfbG9nZ2VyIiwiX1lhcmdzSW5zdGFuY2Vfb3V0cHV0IiwiX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucyIsIl9ZYXJnc0luc3RhbmNlX3BhcmVudFJlcXVpcmUiLCJfWWFyZ3NJbnN0YW5jZV9wYXJzZXJDb25maWciLCJfWWFyZ3NJbnN0YW5jZV9wYXJzZUZuIiwiX1lhcmdzSW5zdGFuY2VfcGFyc2VDb250ZXh0IiwiX1lhcmdzSW5zdGFuY2VfcGtncyIsIl9ZYXJnc0luc3RhbmNlX3ByZXNlcnZlZEdyb3VwcyIsIl9ZYXJnc0luc3RhbmNlX3Byb2Nlc3NBcmdzIiwiX1lhcmdzSW5zdGFuY2VfcmVjb21tZW5kQ29tbWFuZHMiLCJfWWFyZ3NJbnN0YW5jZV9zaGltIiwiX1lhcmdzSW5zdGFuY2Vfc3RyaWN0IiwiX1lhcmdzSW5zdGFuY2Vfc3RyaWN0Q29tbWFuZHMiLCJfWWFyZ3NJbnN0YW5jZV9zdHJpY3RPcHRpb25zIiwiX1lhcmdzSW5zdGFuY2VfdXNhZ2UiLCJfWWFyZ3NJbnN0YW5jZV91c2FnZUNvbmZpZyIsIl9ZYXJnc0luc3RhbmNlX3ZlcnNpb25PcHQiLCJfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uIiwiX19jbGFzc1ByaXZhdGVGaWVsZFNldCIsInJlY2VpdmVyIiwic3RhdGUiLCJraW5kIiwiX19jbGFzc1ByaXZhdGVGaWVsZEdldCIsImtDb3B5RG91YmxlRGFzaCIsIlN5bWJvbCIsImtDcmVhdGVMb2dnZXIiLCJrRGVsZXRlRnJvbVBhcnNlckhpbnRPYmplY3QiLCJrRW1pdFdhcm5pbmciLCJrRnJlZXplIiwia0dldERvbGxhclplcm8iLCJrR2V0UGFyc2VyQ29uZmlndXJhdGlvbiIsImtHZXRVc2FnZUNvbmZpZ3VyYXRpb24iLCJrR3Vlc3NMb2NhbGUiLCJrR3Vlc3NWZXJzaW9uIiwia1BhcnNlUG9zaXRpb25hbE51bWJlcnMiLCJrUGtnVXAiLCJrUG9wdWxhdGVQYXJzZXJIaW50QXJyYXkiLCJrUG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5Iiwia1BvcHVsYXRlUGFyc2VySGludEFycmF5RGljdGlvbmFyeSIsImtQb3B1bGF0ZVBhcnNlckhpbnREaWN0aW9uYXJ5Iiwia1Nhbml0aXplS2V5Iiwia1NldEtleSIsImtVbmZyZWV6ZSIsImtWYWxpZGF0ZUFzeW5jIiwia0dldENvbW1hbmRJbnN0YW5jZSIsImtHZXRDb250ZXh0Iiwia0dldEhhc091dHB1dCIsImtHZXRMb2dnZXJJbnN0YW5jZSIsImtHZXRQYXJzZUNvbnRleHQiLCJrR2V0VXNhZ2VJbnN0YW5jZSIsImtHZXRWYWxpZGF0aW9uSW5zdGFuY2UiLCJrSGFzUGFyc2VDYWxsYmFjayIsImtJc0dsb2JhbENvbnRleHQiLCJrUG9zdFByb2Nlc3MiLCJrUmViYXNlIiwia1Jlc2V0Iiwia1J1bllhcmdzUGFyc2VyQW5kRXhlY3V0ZUNvbW1hbmRzIiwia1J1blZhbGlkYXRpb24iLCJrU2V0SGFzT3V0cHV0Iiwia1RyYWNrTWFudWFsbHlTZXRLZXlzIiwiWWFyZ3NJbnN0YW5jZSIsInByb2Nlc3NBcmdzIiwicGFyZW50UmVxdWlyZSIsImFkZEhlbHBPcHQiLCJhZGRTaG93SGlkZGVuT3B0Iiwic2hvd0hpZGRlbiIsImNoZWNrIiwiX3lhcmdzIiwiY29lcmNlS2V5IiwiY29lcmNlS2V5QWxpYXNlcyIsImFyZ3ZLZXlzIiwiY29uZmxpY3RzIiwia2V5MSIsImtleTIiLCJwYXJzZUZuIiwiY29tcGxldGlvbiIsImNvbW1hbmREaXIiLCJkZW1hbmRDb21tYW5kIiwibWluTXNnIiwibWF4TXNnIiwiSW5maW5pdHkiLCJkZXByZWNhdGVPcHRpb24iLCJkZXRlY3RMb2NhbGUiLCJkZXRlY3QiLCJlcGlsb2d1ZSIsImV4YW1wbGVQYXJhbXMiLCJleGl0UHJvY2VzcyIsInJlamVjdCIsImdldERldGVjdExvY2FsZSIsImdldEhlbHAiLCJidWlsZGVyUmVzcG9uc2UiLCJnZXRTdHJpY3QiLCJnZXRTdHJpY3RDb21tYW5kcyIsImdldFN0cmljdE9wdGlvbnMiLCJnbG9iYWxzIiwibG9jYWwiLCJsIiwiZyIsImV4aXN0aW5nIiwic2VlbiIsImhpZGUiLCJpbXBsaWVzIiwiZGVwcmVjYXRlIiwicmVxdWlyZWQiLCJjb25maWdQYXJzZXIiLCJza2lwVmFsaWRhdGlvbiIsInJlcXVpcmVzQXJnIiwic2hvcnRDaXJjdWl0IiwiX3BhcnNlRm4iLCJ0bXBQYXJzZWQiLCJmaW5hbGx5IiwicGFyc2VBc3luYyIsInBhcnNlU3luYyIsInBhcnNlckNvbmZpZ3VyYXRpb24iLCJwa2dDb25mIiwicm9vdFBhdGgiLCJjb25mIiwic3VwcG9ydGVkT3B0cyIsImZ1bGxDb21tYW5kIiwicGsiLCJwYXJzZU9wdGlvbiIsInJlY29tbWVuZENvbW1hbmRzIiwicmVjb21tZW5kIiwiTmFOIiwic2hvd0NvbXBsZXRpb25TY3JpcHQiLCJsb2ciLCJzY3JpcHROYW1lIiwic3RyaWN0Iiwic3RyaWN0Q29tbWFuZHMiLCJzdHJpY3RPcHRpb25zIiwidGVybWluYWxXaWR0aCIsInVwZGF0ZVN0cmluZ3MiLCJ1c2FnZUNvbmZpZ3VyYXRpb24iLCJkZWZhdWx0VmVyc2lvbk9wdCIsIldlYWtNYXAiLCJvcHRpb25LZXkiLCJoaW50S2V5IiwiaGludCIsImRlZHVwbGljYXRpb25JZCIsImNvbXBsZXRpb25Db21tYW5kIiwiZXhpdEVycm9yIiwiaGFzT3V0cHV0IiwicGFyc2VDb250ZXh0IiwiZGVmYXVsdCQwIiwibnBhdGgiLCJzdGFydERpciIsInBrZ0pzb25QYXRoIiwibmFtZXMiLCJfbm9vcCIsInNpbmdsZUtleUhhbmRsZXIiLCJfZSIsIl9mIiwiX2ciLCJfaCIsIl9qIiwiX2siLCJfbCIsIl9tIiwiX28iLCJnZXRDb21tYW5kSW5zdGFuY2UiLCJnZXRQYXJzZUNvbnRleHQiLCJnZXRWYWxpZGF0aW9uSW5zdGFuY2UiLCJjYWxsZWRGcm9tQ29tbWFuZCIsInJ1bkdsb2JhbE1pZGRsZXdhcmUiLCJ0bXBPcHRpb25zIiwiVXNhZ2UiLCJfcyIsIm9ic2VydmVkIiwibWlzc2luZyIsImN1c3RvbU1zZ3MiLCJjdXN0b21Nc2ciLCJjaGVja1Bvc2l0aW9uYWxzIiwiY29tbWFuZEtleXMiLCJ1bmtub3duIiwiaXNWYWxpZEFuZFNvbWVBbGlhc0lzTm90TmV3IiwibWF4Tm9uT3B0RGVtYW5kZWQiLCJpbnZhbGlkIiwiaW52YWxpZEtleXMiLCJpbXBsaWVkIiwia2V5RXhpc3RzIiwiZ2V0SW1wbGllZCIsImltcGxpY2F0aW9ucyIsImltcGx5RmFpbCIsIm9yaWdLZXkiLCJvcmlnVmFsdWUiLCJjb25mbGljdGluZyIsImdldENvbmZsaWN0aW5nIiwicG90ZW50aWFsQ29tbWFuZHMiLCJyZWNvbW1lbmRlZCIsImJlc3REaXN0YW5jZSIsImNhbmRpZGF0ZSIsImRpc3RhbmNlIiwiVmFsaWRhdGlvbiIsIkNvbW1hbmQiLCJiYXNlIiwiYXJndlByb21pc2UiLCJoZWxwT3B0U2V0IiwidmVyc2lvbk9wdFNldCIsImhhbmRsZXJLZXlzIiwicmVxdWVzdENvbXBsZXRpb25zIiwic2tpcFJlY29tbWVuZGF0aW9uIiwiZmlyc3RVbmtub3duQ29tbWFuZCIsImNvbXBsZXRpb25BcmdzIiwicGFyc2VFcnJvcnMiLCJub25PcHRpb25Db3VudCIsInJlcXVpcmVkQXJndW1lbnRzIiwiZmFpbGVkU3RyaWN0Q29tbWFuZHMiLCJ1bmtub3duQ29tbWFuZHMiLCJ1bmtub3duQXJndW1lbnRzIiwibGltaXRlZENob2ljZXMiLCJZYXJncyIsImVzbVBsYXRmb3JtU2hpbSIsImhpZGVCaW4iLCJsb2FkQ29uZmlnRmlsZSIsIkRFRkFVTFRfQ09ESU5HX1RPT0wiLCJERUZBVUxUX0FJREVSX0VYVFJBX0FSR1MiLCJERUZBVUxUX0NMQVVERV9DT0RFX0VYVFJBX0FSR1MiLCJERUZBVUxUX0NPREVYX0VYVFJBX0FSR1MiLCJERUZBVUxUX0dFTUlOSV9FWFRSQV9BUkdTIiwiREVGQVVMVF9SRVBPTUlYX0VYVFJBX0FSR1MiLCJERUZBVUxUX01BWF9URVNUX0FUVEVNUFRTIiwiREVGQVVMVF9OT0RFX1JVTlRJTUUiLCJwYWNrYWdlSnNvbkRpciIsIlVSTCIsInBhdGhuYW1lIiwiZXhpc3RzU3luYyIsImdldFZlcnNpb24iLCJjaGRpciIsImluZm8iLCJub2RlUnVudGltZSIsIm5vcm1hbGl6ZU5vZGVSdW50aW1lIiwibWFpbiIsImFpZGVyRXh0cmFBcmdzIiwiY2xhdWRlQ29kZUV4dHJhQXJncyIsImNvZGV4RXh0cmFBcmdzIiwiZ2VtaW5pRXh0cmFBcmdzIiwiY29kaW5nVG9vbCIsImRyeVJ1biIsIm5vQnJhbmNoIiwidHdvU3RhZ2VQbGFubmluZyIsImlzc3VlTnVtYmVyIiwibWF4VGVzdEF0dGVtcHRzIiwicGxhbm5pbmdNb2RlbCIsInJlYXNvbmluZ0VmZm9ydCIsInJlcG9taXhFeHRyYUFyZ3MiLCJ0ZXN0Q29tbWFuZCIsInJlbW92ZVBhdHRlcm4iXSwibWFwcGluZ3MiOiJxekJBQ0EsTUFBTUEsRUFBUSxDQUNWQyxNQW9RSixTQUFvQkMsRUFBS0MsR0FDckJELEVBQU1BLEVBQUlFLE9BQ1YsTUFBTUMsRUFBV0MsRUFBTUMsWUFBWUwsR0FDbkMsR0FBSUcsRUFBV0YsRUFDWCxNQUFPLElBQUlLLE9BQU9MLEVBQVFFLEdBQVlILEVBRTFDLE9BQU9BLENBQ1gsRUExUUlPLE9BMlFKLFNBQXFCUCxFQUFLQyxHQUN0QkQsRUFBTUEsRUFBSUUsT0FDVixNQUFNQyxFQUFXQyxFQUFNQyxZQUFZTCxHQUVuQyxHQUFJRyxHQUFZRixFQUNaLE9BQU9ELEVBRVgsTUFBTyxJQUFJTSxPQUFRTCxFQUFRRSxHQUFhLEdBQUtILENBQ2pELEdBN1FPLE1BQU1RLEVBQ1QsV0FBQUMsQ0FBWUMsR0FDUixJQUFJQyxFQUNKQyxLQUFLWCxNQUFRUyxFQUFLVCxNQUNsQlcsS0FBS0MsS0FBNEIsUUFBcEJGLEVBQUtELEVBQUtHLFlBQXlCLElBQVBGLEdBQWdCQSxFQUN6REMsS0FBS0UsS0FBTyxFQUNoQixDQUNBLElBQUFDLElBQVFDLEdBQ1NKLEtBQUtLLE9BQU9ELEdBQ3BCRCxNQUFPLENBQ2hCLENBQ0EsV0FBQUcsR0FDSU4sS0FBS0UsS0FBTyxFQUNoQixDQUNBLEdBQUFHLElBQU9ELEdBSUgsR0FIb0IsSUFBaEJBLEVBQUtHLFFBQ0xQLEtBQUtLLElBQUksSUFFVEwsS0FBS0MsTUFBUUQsS0FBS1Esd0JBQXdCSixJ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QSxHQUFLLE1BQ3BCQSxHQUFLLE1BQVVBLEdBQUssTUFDZCxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDZCxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLFFBQU5BLEdBQ00sUUFBTkEsR0FDTSxRQUFOQSxHQUNBQSxHQUFLLE9BQVVBLEdBQUssT0FDZCxRQUFOQSxHQUNBQSxHQUFLLE9BQVVBLEdBQUssT0FDZCxRQUFOQSxHQUNNLFFBQU5BLEdBQ00sUUFBTkEsR0FDTSxRQUFOQSxHQUNNLFFBQU5BLEdBQ00sUUFBTkEsR0FDQUEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFXQSxHQUFLLE9BQ2YsUUFBTkEsR0FDTSxRQUFOQSxHQUNBQSxHQUFLLE9BQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNmLFNBQU5BLEdBQ00sU0FBTkEsR0FDQUEsR0FBSyxRQUFXQSxHQUFLLFFBQ2YsU0FBTkEsR0FDQUEsR0FBSyxRQUFXQSxHQUFLLFFBQ2YsU0FBTkEsR0FDQUEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ2YsU0FBTkEsR0FDTSxTQUFOQSxHQUNNLFNBQU5BLEdBQ0FBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNmLFNBQU5BLEdBQ00sU0FBTkEsR0FDQUEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDZixTQUFOQSxHQUNBQSxHQUFLLFFBQVdBLEdBQUssUUFDZixTQUFOQSxHQUNBQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDZixTQUFOQSxHQUNNLFNBQU5BLEdBQ00sU0FBTkEsR0FDTSxTQUFOQSxHQUNBQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNmLFNBQU5BLEdBQ0FBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDZixTQUFOQSxHQUNNLFNBQU5BLEdBQ0FBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ2YsU0FBTkEsR0FDQUEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssTUFDMUIsQ0R4VktDLENBQU9OLElBQ05DLEdDbEJOLFNBQXFCSSxHQUNwQixPQUFhLE1BQU5BLEdBQ0csTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ0FBLEdBQUssS0FBUUEsR0FBSyxLQUNsQkEsR0FBSyxLQUFRQSxHQUFLLEtBQ2xCQSxHQUFLLEtBQVFBLEdBQUssS0FDWixNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNBQSxHQUFLLEtBQVFBLEdBQUssS0FDWixNQUFOQSxHQUNBQSxHQUFLLEtBQVFBLEdBQUssS0FDWixNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ0FBLEdBQUssS0FBUUEsR0FBSyxLQUNaLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNBQSxHQUFLLEtBQVNBLEdBQUssS0FDYixNQUFOQSxHQUNBQSxHQUFLLEtBQVNBLEdBQUssS0FDYixNQUFOQSxHQUNBQSxHQUFLLEtBQVNBLEdBQUssS0FDYixNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDQUEsR0FBSyxLQUFTQSxHQUFLLEtBQ2IsTUFBTkEsR0FDTSxNQUFOQSxHQUNBQSxHQUFLLEtBQVNBLEdBQUssS0FDYixNQUFOQSxHQUNNLE1BQU5BLEdBQ0FBLEdBQUssS0FBU0EsR0FBSyxLQUNuQkEsR0FBSyxLQUFTQSxHQUFLLEtBQ25CQSxHQUFLLEtBQVNBLEdBQUssS0FDbkJBLEdBQUssS0FBU0EsR0FBSyxLQUNuQkEsR0FBSyxLQUFTQSxHQUFLLEtBQ2IsT0FBTkEsR0FDQUEsR0FBSyxNQUFTQSxHQUFLLE1BQ2IsT0FBTkEsR0FDTSxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDZCxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDcEJBLEdBQUssTUFBVUEsR0FBSyxNQUNkLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDQUEsR0FBSyxNQUFVQSxHQUFLLE1BQ2QsT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ0FBLEdBQUssTUFBVUEsR0FBSyxNQUNwQkEsR0FBSyxNQUFVQSxHQUFLLE1BQ3BCQSxHQUFLLE1BQVVBLEdBQUssTUFDZCxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDZCxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDQUEsR0FBSyxNQUFVQSxHQUFLLE1BQ2QsT0FBTkEsR0FDTSxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDZCxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDZCxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDZCxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDcEJBLEdBQUssTUFBVUEsR0FBSyxNQUNwQkEsR0FBSyxNQUFVQSxHQUFLLE1BQ3BCQSxHQUFLLE1BQVVBLEdBQUssTUFDcEJBLEdBQUssTUFBVUEsR0FBSyxNQUNkLE9BQU5BLEdBQ00sT0FBTkEsR0FDQUEsR0FBSyxNQUFVQSxHQUFLLE1BQ2QsT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDZCxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDcEJBLEdBQUssTUFBVUEsR0FBSyxN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Q3JCcXdCLG9CQUFxQnJ3QixHQUFLLDBCQUMxQnN3QixlQUFnQnR3QixHQUFLLG9CQUNyQnV3QixnQkFBaUJ2d0IsR0FBSyxxQkFDdEJ3d0IsV0FBWXh3QixHQUFLLGVBQ2pCeXdCLE9BQVF6d0IsR0FBSyxXQUNiMHdCLFNBQVUxd0IsR0FBSyxhQUNmaXdCLGVBQ0FVLGlCQUFrQjN3QixHQUFLLHVCQUN2QjR3QixZQUFhNXdCLEdBQUssZ0JBQ2xCNndCLGdCQUFpQjd3QixHQUFLLHFCQUN0Qjh3QixjQUFlOXdCLEdBQUssa0JBQ3BCK3dCLGdCQUFpQi93QixHQUFLLG9CQUN0Qmd4QixpQkFBa0JoeEIsR0FBSyxzQkFDdkJpeEIsWUFBYWp4QixHQUFLLGdCQUNsQmt4QixjQUFlbHhCLEdBQUsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOV19
32
+ var at,Dt,lt;const ct=process&&process.env&&process.env.YARGS_MIN_NODE_VERSION?Number(process.env.YARGS_MIN_NODE_VERSION):20,ht=null!==(Dt=null===(at=null===process||void 0===process?void 0:process.versions)||void 0===at?void 0:at.node)&&void 0!==Dt?Dt:null===(lt=null===process||void 0===process?void 0:process.version)||void 0===lt?void 0:lt.slice(1);if(ht){if(Number(ht.match(/^([^.]+)/)[1])<ct)throw Error(`yargs parser supports a minimum Node.js version of ${ct}. Read our version support policy: https://github.com/yargs/yargs-parser#supported-nodejs-versions`)}const ft=process?process.env:{},dt=C?C(import.meta.url):void 0,pt=new class{constructor(t){ut=t}parse(t,e){const n=Object.assign({alias:void 0,array:void 0,boolean:void 0,config:void 0,configObjects:void 0,configuration:void 0,coerce:void 0,count:void 0,default:void 0,envPrefix:void 0,narg:void 0,normalize:void 0,string:void 0,number:void 0,__:void 0,key:void 0},e),s=function(t){if(Array.isArray(t))return t.map(t=>"string"!=typeof t?t+"":t);t=t.trim();let e=0,n=null,s=null,i=null;const u=[];for(let r=0;r<t.length;r++)n=s,s=t.charAt(r)," "!==s||i?(s===i?i=null:"'"!==s&&'"'!==s||i||(i=s),u[e]||(u[e]=""),u[e]+=s):" "!==n&&e++;return u}(t),i="string"==typeof t,u=function(t){const e=[],n=Object.create(null);let s=!0;Object.keys(t).forEach(function(n){e.push([].concat(t[n],n))});for(;s;){s=!1;for(let t=0;t<e.length;t++)for(let n=t+1;n<e.length;n++){if(e[t].filter(function(t){return-1!==e[n].indexOf(t)}).length){e[t]=e[t].concat(e[n]),e.splice(n,1),s=!0;break}}}return e.forEach(function(t){const e=(t=t.filter(function(t,e,n){return n.indexOf(t)===e})).pop();void 0!==e&&"string"==typeof e&&(n[e]=t)}),n}(Object.assign(Object.create(null),n.alias)),r=Object.assign({"boolean-negation":!0,"camel-case-expansion":!0,"combine-arrays":!1,"dot-notation":!0,"duplicate-arguments-array":!0,"flatten-duplicate-arrays":!0,"greedy-arrays":!0,"halt-at-non-option":!1,"nargs-eats-options":!1,"negation-prefix":"no-","parse-numbers":!0,"parse-positional-numbers":!0,"populate--":!1,"set-placeholder-key":!1,"short-option-groups":!0,"strip-aliased":!1,"strip-dashed":!1,"unknown-options-as-args":!1},n.configuration),o=Object.assign(Object.create(null),n.default),a=n.configObjects||[],D=n.envPrefix,l=r["populate--"],c=l?"--":"_",h=Object.create(null),f=Object.create(null),d=n.__||ut.format,p={aliases:Object.create(null),arrays:Object.create(null),bools:Object.create(null),strings:Object.create(null),numbers:Object.create(null),counts:Object.create(null),normalize:Object.create(null),configs:Object.create(null),nargs:Object.create(null),coercions:Object.create(null),keys:[]},g=/^-([0-9]+(\.[0-9]+)?|\.[0-9]+)$/,F=new RegExp("^--"+r["negation-prefix"]+"(.+)");[].concat(n.array||[]).filter(Boolean).forEach(function(t){const e="object"==typeof t?t.key:t,n=Object.keys(t).map(function(t){return{boolean:"bools",string:"strings",number:"numbers"}[t]}).filter(Boolean).pop();n&&(p[n][e]=!0),p.arrays[e]=!0,p.keys.push(e)}),[].concat(n.boolean||[]).filter(Boolean).forEach(function(t){p.bools[t]=!0,p.keys.push(t)}),[].concat(n.string||[]).filter(Boolean).forEach(function(t){p.strings[t]=!0,p.keys.push(t)}),[].concat(n.number||[]).filter(Boolean).forEach(function(t){p.numbers[t]=!0,p.keys.push(t)}),[].concat(n.count||[]).filter(Boolean).forEach(function(t){p.counts[t]=!0,p.keys.push(t)}),[].concat(n.normalize||[]).filter(Boolean).forEach(function(t){p.normalize[t]=!0,p.keys.push(t)}),"object"==typeof n.narg&&Object.entries(n.narg).forEach(([t,e])=>{"number"==typeof e&&(p.nargs[t]=e,p.keys.push(t))}),"object"==typeof n.coerce&&Object.entries(n.coerce).forEach(([t,e])=>{"function"==typeof e&&(p.coercions[t]=e,p.keys.push(t))}),void 0!==n.config&&(Array.isArray(n.config)||"string"==typeof n.config?[].concat(n.config).filter(Boolean).forEach(function(t){p.configs[t]=!0}):"object"==typeof n.config&&Object.entries(n.config).forEach(([t,e])=>{"boolean"!=typeof e&&"function"!=typeof e||(p.configs[t]=e)})),function(...t){t.forEach(function(t){Object.keys(t||{}).forEach(function(t){p.aliases[t]||(p.aliases[t]=[].concat(u[t]||[]),p.aliases[t].concat(t).forEach(function(e){if(/-/.test(e)&&r["camel-case-expansion"]){const n=et(e);n!==t&&-1===p.aliases[t].indexOf(n)&&(p.aliases[t].push(n),h[n]=!0)}}),p.aliases[t].concat(t).forEach(function(e){if(e.length>1&&/[A-Z]/.test(e)&&r["camel-case-expansion"]){const n=nt(e,"-");n!==t&&-1===p.aliases[t].indexOf(n)&&(p.aliases[t].push(n),h[n]=!0)}}),p.aliases[t].forEach(function(e){p.aliases[e]=[t].concat(p.aliases[t].filter(function(t){return e!==t}))}))})})}(n.key,u,n.default,p.arrays),Object.keys(o).forEach(function(t){(p.aliases[t]||[]).forEach(function(e){o[e]=o[t]})});let m=null;Object.keys(p.counts).find(t=>$(t,p.arrays)?(m=Error(d("Invalid configuration: %s, opts.count excludes opts.array.",t)),!0):!!$(t,p.nargs)&&(m=Error(d("Invalid configuration: %s, opts.count excludes opts.narg.",t)),!0));let C=[];const E=Object.assign(Object.create(null),{_:[]}),y={};for(let t=0;t<s.length;t++){const e=s[t],n=e.replace(/^-{3,}/,"---");let i,u,o,a,D,l;if("--"!==e&&/^-/.test(e)&&I(e))b(e);else{if(n.match(/^---+(=|$)/)){b(e);continue}if(e.match(/^--.+=/)||!r["short-option-groups"]&&e.match(/^-.+=/))a=e.match(/^--?([^=]+)=([\s\S]*)$/),null!==a&&Array.isArray(a)&&a.length>=3&&($(a[1],p.arrays)?t=A(t,a[1],s,a[2]):!1!==$(a[1],p.nargs)?t=v(t,a[1],s,a[2]):B(a[1],a[2],!0));else if(e.match(F)&&r["boolean-negation"])a=e.match(F),null!==a&&Array.isArray(a)&&a.length>=2&&(u=a[1],B(u,!!$(u,p.arrays)&&[!1]));else if(e.match(/^--.+/)||!r["short-option-groups"]&&e.match(/^-[^-]+/))a=e.match(/^--?(.+)/),null!==a&&Array.isArray(a)&&a.length>=2&&(u=a[1],$(u,p.arrays)?t=A(t,u,s):!1!==$(u,p.nargs)?t=v(t,u,s):(D=s[t+1],void 0===D||D.match(/^-/)&&!D.match(g)||$(u,p.bools)||$(u,p.counts)?/^(true|false)$/.test(D)?(B(u,D),t++):B(u,N(u)):(B(u,D),t++)));else if(e.match(/^-.\..+=/))a=e.match(/^-([^=]+)=([\s\S]*)$/),null!==a&&Array.isArray(a)&&a.length>=3&&B(a[1],a[2]);else if(e.match(/^-.\..+/)&&!e.match(g))D=s[t+1],a=e.match(/^-(.\..+)/),null!==a&&Array.isArray(a)&&a.length>=2&&(u=a[1],void 0===D||D.match(/^-/)||$(u,p.bools)||$(u,p.counts)?B(u,N(u)):(B(u,D),t++));else if(e.match(/^-[^-]+/)&&!e.match(g)){o=e.slice(1,-1).split(""),i=!1;for(let n=0;n<o.length;n++){if(D=e.slice(n+2),o[n+1]&&"="===o[n+1]){l=e.slice(n+3),u=o[n],$(u,p.arrays)?t=A(t,u,s,l):!1!==$(u,p.nargs)?t=v(t,u,s,l):B(u,l),i=!0;break}if("-"!==D){if(/[A-Za-z]/.test(o[n])&&/^-?\d+(\.\d*)?(e-?\d+)?$/.test(D)&&!1===$(D,p.bools)){B(o[n],D),i=!0;break}if(o[n+1]&&o[n+1].match(/\W/)){B(o[n],D),i=!0;break}B(o[n],N(o[n]))}else B(o[n],D)}u=e.slice(-1)[0],i||"-"===u||($(u,p.arrays)?t=A(t,u,s):!1!==$(u,p.nargs)?t=v(t,u,s):(D=s[t+1],void 0===D||/^(-|--)[^-]/.test(D)&&!D.match(g)||$(u,p.bools)||$(u,p.counts)?/^(true|false)$/.test(D)?(B(u,D),t++):B(u,N(u)):(B(u,D),t++)))}else if(e.match(/^-[0-9]$/)&&e.match(g)&&$(e.slice(1),p.bools))u=e.slice(1),B(u,N(u));else{if("--"===e){C=s.slice(t+1);break}if(r["halt-at-non-option"]){C=s.slice(t);break}b(e)}}}function b(t){const e=j("_",t);"string"!=typeof e&&"number"!=typeof e||E._.push(e)}function v(t,e,n,s){let i,u=$(e,p.nargs);if(u="number"!=typeof u||isNaN(u)?1:u,0===u)return W(s)||(m=Error(d("Argument unexpected for: %s",e))),B(e,N(e)),t;let o=W(s)?0:1;if(r["nargs-eats-options"])n.length-(t+1)+o<u&&(m=Error(d("Not enough arguments following: %s",e))),o=u;else{for(i=t+1;i<n.length&&(!n[i].match(/^-[^0-9]/)||n[i].match(g)||I(n[i]));i++)o++;o<u&&(m=Error(d("Not enough arguments following: %s",e)))}let a=Math.min(o,u);for(!W(s)&&a>0&&(B(e,s),a--),i=t+1;i<a+t+1;i++)B(e,n[i]);return t+a}function A(t,e,n,s){let u=[],a=s||n[t+1];const D=$(e,p.nargs);if($(e,p.bools)&&!/^(true|false)$/.test(a))u.push(!0);else if(W(a)||W(s)&&/^-/.test(a)&&!g.test(a)&&!I(a)){if(void 0!==o[e]){const t=o[e];u=Array.isArray(t)?t:[t]}}else{W(s)||u.push(O(e,s,!0));for(let s=t+1;s<n.length&&!(!r["greedy-arrays"]&&u.length>0||D&&"number"==typeof D&&u.length>=D)&&(a=n[s],!/^-/.test(a)||g.test(a)||I(a));s++)t=s,u.push(O(e,a,i))}return"number"==typeof D&&(D&&u.length<D||isNaN(D)&&0===u.length)&&(m=Error(d("Not enough arguments following: %s",e))),B(e,u),t}function B(t,e,n=i){if(/-/.test(t)&&r["camel-case-expansion"]){const e=t.split(".").map(function(t){return et(t)}).join(".");w(t,e)}const s=O(t,e,n),u=t.split(".");if(S(E,u,s),p.aliases[t]&&p.aliases[t].forEach(function(t){const e=t.split(".");S(E,e,s)}),u.length>1&&r["dot-notation"]&&(p.aliases[u[0]]||[]).forEach(function(e){let n=e.split(".");const i=[].concat(u);i.shift(),n=n.concat(i),(p.aliases[t]||[]).includes(n.join("."))||S(E,n,s)}),$(t,p.normalize)&&!$(t,p.arrays)){[t].concat(p.aliases[t]||[]).forEach(function(t){Object.defineProperty(y,t,{enumerable:!0,get:()=>e,set(t){e="string"==typeof t?ut.normalize(t):t}})})}}function w(t,e){p.aliases[t]&&p.aliases[t].length||(p.aliases[t]=[e],h[e]=!0),p.aliases[e]&&p.aliases[e].length||w(e,t)}function O(t,e,n){n&&(e=function(t){return"string"!=typeof t||"'"!==t[0]&&'"'!==t[0]||t[t.length-1]!==t[0]?t:t.substring(1,t.length-1)}(e)),($(t,p.bools)||$(t,p.counts))&&"string"==typeof e&&(e="true"===e);let s=Array.isArray(e)?e.map(function(e){return j(t,e)}):j(t,e);return $(t,p.counts)&&(W(s)||"boolean"==typeof s)&&(s=rt()),$(t,p.normalize)&&$(t,p.arrays)&&(s=Array.isArray(e)?e.map(t=>ut.normalize(t)):ut.normalize(e)),s}function j(t,e){if(!r["parse-positional-numbers"]&&"_"===t)return e;if(!$(t,p.strings)&&!$(t,p.bools)&&!Array.isArray(e)){(st(e)&&r["parse-numbers"]&&Number.isSafeInteger(Math.floor(parseFloat(`${e}`)))||!W(e)&&$(t,p.numbers))&&(e=Number(e))}return e}function x(t,e){Object.keys(t).forEach(function(n){const s=t[n],i=e?e+"."+n:n;"object"==typeof s&&null!==s&&!Array.isArray(s)&&r["dot-notation"]?x(s,i):(!M(E,i.split("."))||$(i,p.arrays)&&r["combine-arrays"])&&B(i,s)})}function k(t,e){if(void 0===D)return;const n="string"==typeof D?D:"",s=ut.env();Object.keys(s).forEach(function(i){if(""===n||0===i.lastIndexOf(n,0)){const u=i.split("__").map(function(t,e){return 0===e&&(t=t.substring(n.length)),et(t)});(e&&p.configs[u.join(".")]||!e)&&!M(t,u)&&B(u.join("."),s[i])}})}function _(t,e,n,s=!1){Object.keys(n).forEach(function(i){M(t,i.split("."))||(S(t,i.split("."),n[i]),s&&(f[i]=!0),(e[i]||[]).forEach(function(e){M(t,e.split("."))||S(t,e.split("."),n[i])}))})}function M(t,e){let n=t;r["dot-notation"]||(e=[e.join(".")]),e.slice(0,-1).forEach(function(t){n=n[t]||{}});const s=e[e.length-1];return"object"==typeof n&&s in n}function S(t,e,n){let s=t;r["dot-notation"]||(e=[e.join(".")]),e.slice(0,-1).forEach(function(t){t=ot(t),"object"==typeof s&&void 0===s[t]&&(s[t]={}),"object"!=typeof s[t]||Array.isArray(s[t])?(Array.isArray(s[t])?s[t].push({}):s[t]=[s[t],{}],s=s[t][s[t].length-1]):s=s[t]});const i=ot(e[e.length-1]),u=$(e.join("."),p.arrays),o=Array.isArray(n);let a=r["duplicate-arguments-array"];!a&&$(i,p.nargs)&&(a=!0,(!W(s[i])&&1===p.nargs[i]||Array.isArray(s[i])&&s[i].length===p.nargs[i])&&(s[i]=void 0)),n===rt()?s[i]=rt(s[i]):Array.isArray(s[i])?a&&u&&o?s[i]=r["flatten-duplicate-arrays"]?s[i].concat(n):(Array.isArray(s[i][0])?s[i]:[s[i]]).concat([n]):a||Boolean(u)!==Boolean(o)?s[i]=s[i].concat([n]):s[i]=n:void 0===s[i]&&u?s[i]=o?n:[n]:!a||void 0===s[i]||$(i,p.counts)||$(i,p.bools)?s[i]=n:s[i]=[s[i],n]}function $(t,e){const n=[].concat(p.aliases[t]||[],t),s=Object.keys(e),i=n.find(t=>s.includes(t));return!!i&&e[i]}function P(t){const e=Object.keys(p);return[].concat(e.map(t=>p[t])).some(function(e){return Array.isArray(e)?e.includes(t):e[t]})}function I(t){return r["unknown-options-as-args"]&&function(t){if(t=t.replace(/^-{3,}/,"--"),t.match(g))return!1;if(function(t){if(t.match(g)||!t.match(/^-[^-]+/))return!1;let e,n=!0;const s=t.slice(1).split("");for(let i=0;i<s.length;i++){if(e=t.slice(i+2),!P(s[i])){n=!1;break}if(s[i+1]&&"="===s[i+1]||"-"===e||/[A-Za-z]/.test(s[i])&&/^-?\d+(\.\d*)?(e-?\d+)?$/.test(e)||s[i+1]&&s[i+1].match(/\W/))break}return n}(t))return!1;return!function(t,...e){return[].concat(...e).some(function(e){const n=t.match(e);return n&&P(n[1])})}(t,/^-+([^=]+?)=[\s\S]*$/,F,/^-+([^=]+?)$/,/^-+([^=]+?)-$/,/^-+([^=]+?\d+)$/,/^-+([^=]+?)\W+.*$/)}(t)}function N(t){return $(t,p.bools)||$(t,p.counts)||!(`${t}`in o)?(e=function(t){let e=it.BOOLEAN;return $(t,p.strings)?e=it.STRING:$(t,p.numbers)?e=it.NUMBER:$(t,p.bools)?e=it.BOOLEAN:$(t,p.arrays)&&(e=it.ARRAY),e}(t),{[it.BOOLEAN]:!0,[it.STRING]:"",[it.NUMBER]:void 0,[it.ARRAY]:[]}[e]):o[t];var e}function W(t){return void 0===t}return k(E,!0),k(E,!1),function(t){const e=Object.create(null);_(e,p.aliases,o),Object.keys(p.configs).forEach(function(n){const s=t[n]||e[n];if(s)try{let t=null;const e=ut.resolve(ut.cwd(),s),i=p.configs[n];if("function"==typeof i){try{t=i(e)}catch(e){t=e}if(t instanceof Error)return void(m=t)}else t=ut.require(e);x(t)}catch(e){"PermissionDenied"===e.name?m=e:t[n]&&(m=Error(d("Invalid JSON config file: %s",s)))}})}(E),void 0!==a&&a.forEach(function(t){x(t)}),_(E,p.aliases,o,!0),function(t){let e;const n=new Set;Object.keys(t).forEach(function(s){if(!n.has(s)&&(e=$(s,p.coercions),"function"==typeof e))try{const i=j(s,e(t[s]));[].concat(p.aliases[s]||[],s).forEach(e=>{n.add(e),t[e]=i})}catch(t){m=t}})}(E),r["set-placeholder-key"]&&function(t){p.keys.forEach(e=>{~e.indexOf(".")||void 0===t[e]&&(t[e]=void 0)})}(E),Object.keys(p.counts).forEach(function(t){M(E,t.split("."))||B(t,0)}),l&&C.length&&(E[c]=[]),C.forEach(function(t){E[c].push(t)}),r["camel-case-expansion"]&&r["strip-dashed"]&&Object.keys(E).filter(t=>"--"!==t&&t.includes("-")).forEach(t=>{delete E[t]}),r["strip-aliased"]&&[].concat(...Object.keys(u).map(t=>u[t])).forEach(t=>{r["camel-case-expansion"]&&t.includes("-")&&delete E[t.split(".").map(t=>et(t)).join(".")],delete E[t]}),{aliases:Object.assign({},p.aliases),argv:Object.assign(y,E),configuration:r,defaulted:Object.assign({},f),error:m,newAliases:Object.assign({},h)}}}({cwd:process.cwd,env:()=>ft,format:g,normalize:a,resolve:r,require:t=>{if(void 0!==dt)return dt(t);if(t.match(/\.json$/))return JSON.parse(s(t,"utf8"));throw Error("only .json config files are supported in ESM")}}),gt=function(t,e){return pt.parse(t.slice(),e).argv};function Ft(){return process.versions.electron&&!process.defaultApp?0:1}gt.detailed=function(t,e){return pt.parse(t.slice(),e)},gt.camelCase=et,gt.decamelize=nt,gt.looksLikeNumber=st;var mt={fs:{readFileSync:s,writeFile:i},format:g,resolve:r,exists:t=>{try{return e(t).isFile()}catch(t){return!1}}};let Ct;class Et{constructor(t){t=t||{},this.directory=t.directory||"./locales",this.updateFiles="boolean"!=typeof t.updateFiles||t.updateFiles,this.locale=t.locale||"en",this.fallbackToLanguage="boolean"!=typeof t.fallbackToLanguage||t.fallbackToLanguage,this.cache=Object.create(null),this.writeQueue=[]}__(...t){if("string"!=typeof arguments[0])return this._taggedLiteral(arguments[0],...arguments);const e=t.shift();let n=function(){};return"function"==typeof t[t.length-1]&&(n=t.pop()),n=n||function(){},this.cache[this.locale]||this._readLocaleFile(),!this.cache[this.locale][e]&&this.updateFiles?(this.cache[this.locale][e]=e,this._enqueueWrite({directory:this.directory,locale:this.locale,cb:n})):n(),Ct.format.apply(Ct.format,[this.cache[this.locale][e]||e].concat(t))}__n(){const t=Array.prototype.slice.call(arguments),e=t.shift(),n=t.shift(),s=t.shift();let i=function(){};"function"==typeof t[t.length-1]&&(i=t.pop()),this.cache[this.locale]||this._readLocaleFile();let u=1===s?e:n;if(this.cache[this.locale][e]){u=this.cache[this.locale][e][1===s?"one":"other"]}!this.cache[this.locale][e]&&this.updateFiles?(this.cache[this.locale][e]={one:e,other:n},this._enqueueWrite({directory:this.directory,locale:this.locale,cb:i})):i();const r=[u];return~u.indexOf("%d")&&r.push(s),Ct.format.apply(Ct.format,r.concat(t))}setLocale(t){this.locale=t}getLocale(){return this.locale}updateLocale(t){this.cache[this.locale]||this._readLocaleFile();for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&(this.cache[this.locale][e]=t[e])}_taggedLiteral(t,...e){let n="";return t.forEach(function(t,s){const i=e[s+1];n+=t,void 0!==i&&(n+="%s")}),this.__.apply(this,[n].concat([].slice.call(e,1)))}_enqueueWrite(t){this.writeQueue.push(t),1===this.writeQueue.length&&this._processWriteQueue()}_processWriteQueue(){const t=this,e=this.writeQueue[0],n=e.directory,s=e.locale,i=e.cb,u=this._resolveLocaleFile(n,s),r=JSON.stringify(this.cache[s],null,2);Ct.fs.writeFile(u,r,"utf-8",function(e){t.writeQueue.shift(),t.writeQueue.length>0&&t._processWriteQueue(),i(e)})}_readLocaleFile(){let t={};const e=this._resolveLocaleFile(this.directory,this.locale);try{Ct.fs.readFileSync&&(t=JSON.parse(Ct.fs.readFileSync(e,"utf-8")))}catch(n){if(n instanceof SyntaxError&&(n.message="syntax error in "+e),"ENOENT"!==n.code)throw n;t={}}this.cache[this.locale]=t}_resolveLocaleFile(t,e){let n=Ct.resolve(t,"./",e+".json");if(this.fallbackToLanguage&&!this._fileExistsSync(n)&&~e.lastIndexOf("_")){const s=Ct.resolve(t,"./",e.split("_")[0]+".json");this._fileExistsSync(s)&&(n=s)}return n}_fileExistsSync(t){return Ct.exists(t)}}var yt,bt;var vt=E(bt?yt:(bt=1,yt=function(t){if(void 0===t&&(t=2),t>=Error.stackTraceLimit)throw new TypeError("getCallerFile(position) requires position be less then Error.stackTraceLimit but position was: `"+t+"` and Error.stackTraceLimit was: `"+Error.stackTraceLimit+"`");var e=Error.prepareStackTrace;Error.prepareStackTrace=function(t,e){return e};var n=(new Error).stack;if(Error.prepareStackTrace=e,null!==n&&"object"==typeof n)return n[t]?n[t].getFileName():void 0}));const At=m(import.meta.url),Bt=At.substring(0,At.lastIndexOf("node_modules")),wt=C(import.meta.url);var Ot,jt={assert:{notStrictEqual:p,strictEqual:d},cliui:function(t){return function(t,e){return P=e,new S({width:(null==t?void 0:t.width)||("object"==typeof process&&process.stdout&&process.stdout.columns?process.stdout.columns:80),wrap:null==t?void 0:t.wrap})}(t,{stringWidth:R,stripAnsi:N,wrap:tt})},findUp:function(t,s){let i,u=r(".",t);for(e(u).isDirectory()||(u=o(u));;){if(i=s(u,n(u)),i)return r(u,i);if(u=o(i=u),i===u)break}},getEnv:t=>process.env[t],inspect:F,getProcessArgvBin:function(){return process.argv[Ft()]},mainFilename:Bt||process.cwd(),Parser:gt,path:{basename:h,dirname:o,extname:c,relative:l,resolve:r,join:D},process:{argv:()=>process.argv,cwd:process.cwd,emitWarning:(t,e)=>process.emitWarning(t,e),execPath:()=>process.execPath,exit:t=>{process.exit(t)},nextTick:process.nextTick,stdColumns:void 0!==process.stdout.columns?process.stdout.columns:null},readFileSync:s,readdirSync:n,require:wt,getCallerFile:()=>{const t=vt(3);return t.match(/^file:\/\//)?m(t):t},stringWidth:R,y18n:(Ot={directory:r(At,"../../../locales"),updateFiles:!1},function(t,e){Ct=e;const n=new Et(t);return{__:n.__.bind(n),__n:n.__n.bind(n),setLocale:n.setLocale.bind(n),getLocale:n.getLocale.bind(n),updateLocale:n.updateLocale.bind(n),locale:n.locale}}(Ot,mt))};function xt(t,e,n,s){n.assert.notStrictEqual(t,e,s)}function kt(t,e){e.assert.strictEqual(typeof t,"string")}function _t(t){return Object.keys(t)}function Mt(t){return!!t&&!!t.then&&"function"==typeof t.then}class St extends Error{constructor(t){super(t||"yargs error"),this.name="YError",Error.captureStackTrace&&Error.captureStackTrace(this,St)}}function $t(t){const e=t.replace(/\s{2,}/g," ").split(/\s+(?![^[]*]|[^<]*>)/),n=/\.*[\][<>]/g,s=e.shift();if(!s)throw new Error(`No command found in: ${t}`);const i={cmd:s.replace(n,""),demanded:[],optional:[]};return e.forEach((t,s)=>{let u=!1;t=t.replace(/\s/g,""),/\.+[\]>]/.test(t)&&s===e.length-1&&(u=!0),/^\[/.test(t)?i.optional.push({cmd:t.replace(n,"").split("|"),variadic:u}):i.demanded.push({cmd:t.replace(n,"").split("|"),variadic:u})}),i}const Pt=["first","second","third","fourth","fifth","sixth"];function It(t,e,n){try{let s=0;const[i,u,r]="object"==typeof t?[{demanded:[],optional:[]},t,e]:[$t(`cmd ${t}`),e,n],o=[].slice.call(u);for(;o.length&&void 0===o[o.length-1];)o.pop();const a=r||o.length;if(a<i.demanded.length)throw new St(`Not enough arguments provided. Expected ${i.demanded.length} but received ${o.length}.`);const D=i.demanded.length+i.optional.length;if(a>D)throw new St(`Too many arguments provided. Expected max ${D} but received ${a}.`);i.demanded.forEach(t=>{const e=Nt(o.shift());0===t.cmd.filter(t=>t===e||"*"===t).length&&Wt(e,t.cmd,s),s+=1}),i.optional.forEach(t=>{if(0===o.length)return;const e=Nt(o.shift());0===t.cmd.filter(t=>t===e||"*"===t).length&&Wt(e,t.cmd,s),s+=1})}catch(t){console.warn(t.stack)}}function Nt(t){return Array.isArray(t)?"array":null===t?"null":typeof t}function Wt(t,e,n){throw new St(`Invalid ${Pt[n]||"manyith"} argument. Expected ${e.join(" or ")} but received ${t}.`)}class Lt{constructor(t){this.globalMiddleware=[],this.frozens=[],this.yargs=t}addMiddleware(t,e,n=!0,s=!1){if(It("<array|function> [boolean] [boolean] [boolean]",[t,e,n],arguments.length),Array.isArray(t)){for(let s=0;s<t.length;s++){if("function"!=typeof t[s])throw Error("middleware must be a function");const i=t[s];i.applyBeforeValidation=e,i.global=n}Array.prototype.push.apply(this.globalMiddleware,t)}else if("function"==typeof t){const i=t;i.applyBeforeValidation=e,i.global=n,i.mutates=s,this.globalMiddleware.push(t)}return this.yargs}addCoerceMiddleware(t,e){const n=this.yargs.getAliases();return this.globalMiddleware=this.globalMiddleware.filter(t=>{const s=[...n[e]||[],e];return!t.option||!s.includes(t.option)}),t.option=e,this.addMiddleware(t,!0,!0,!0)}getMiddleware(){return this.globalMiddleware}freeze(){this.frozens.push([...this.globalMiddleware])}unfreeze(){const t=this.frozens.pop();void 0!==t&&(this.globalMiddleware=t)}reset(){this.globalMiddleware=this.globalMiddleware.filter(t=>t.global)}}function zt(t,e,n,s){return n.reduce((t,n)=>{if(n.applyBeforeValidation!==s)return t;if(n.mutates){if(n.applied)return t;n.applied=!0}if(Mt(t))return t.then(t=>Promise.all([t,n(t,e)])).then(([t,e])=>Object.assign(t,e));{const s=n(t,e);return Mt(s)?s.then(e=>Object.assign(t,e)):Object.assign(t,s)}},t)}function Ht(t,e,n=t=>{throw t}){try{const n="function"==typeof t?t():t;return Mt(n)?n.then(t=>e(t)):e(n)}catch(t){return n(t)}}const Rt=/(^\*)|(^\$0)/;class Tt{constructor(t,e,n,s){this.requireCache=new Set,this.handlers={},this.aliasMap={},this.frozens=[],this.shim=s,this.usage=t,this.globalMiddleware=n,this.validation=e}addDirectory(t,e,n,s){s=s||{},this.requireCache.add(n);const i=this.shim.path.resolve(this.shim.path.dirname(n),t),u=this.shim.readdirSync(i,{recursive:!!s.recurse});Array.isArray(s.extensions)||(s.extensions=["js"]);const r="function"==typeof s.visit?s.visit:t=>t;for(const t of u){const n=t.toString();if(s.exclude){let t=!1;if(t="function"==typeof s.exclude?s.exclude(n):s.exclude.test(n),t)continue}if(s.include){let t=!1;if(t="function"==typeof s.include?s.include(n):s.include.test(n),!t)continue}let u=!1;for(const t of s.extensions)n.endsWith(t)&&(u=!0);if(u){const t=this.shim.path.join(i,n),s=e(t),u=Object.create(null,Object.getOwnPropertyDescriptors({...s}));if(r(u,t,n)){if(this.requireCache.has(t))continue;this.requireCache.add(t),u.command||(u.command=this.shim.path.basename(t,this.shim.path.extname(t))),this.addHandler(u)}}}}addHandler(t,e,n,s,i,u){let r=[];const o=function(t){return t?t.map(t=>(t.applyBeforeValidation=!1,t)):[]}(i);if(s=s||(()=>{}),Array.isArray(t))if(function(t){return t.every(t=>"string"==typeof t)}(t))[t,...r]=t;else for(const e of t)this.addHandler(e);else{if(function(t){return"object"==typeof t&&!Array.isArray(t)}(t)){let e=Array.isArray(t.command)||"string"==typeof t.command?t.command:null;if(null===e)throw new Error(`No command name given for module: ${this.shim.inspect(t)}`);return t.aliases&&(e=[].concat(e).concat(t.aliases)),void this.addHandler(e,this.extractDesc(t),t.builder,t.handler,t.middlewares,t.deprecated)}if(Ut(n))return void this.addHandler([t].concat(r),e,n.builder,n.handler,n.middlewares,n.deprecated)}if("string"==typeof t){const i=$t(t);r=r.map(t=>$t(t).cmd);let a=!1;const D=[i.cmd].concat(r).filter(t=>!Rt.test(t)||(a=!0,!1));0===D.length&&a&&D.push("$0"),a&&(i.cmd=D[0],r=D.slice(1),t=t.replace(Rt,i.cmd)),r.forEach(t=>{this.aliasMap[t]=i.cmd}),!1!==e&&this.usage.command(t,e,a,r,u),this.handlers[i.cmd]={original:t,description:e,handler:s,builder:n||{},middlewares:o,deprecated:u,demanded:i.demanded,optional:i.optional},a&&(this.defaultCommand=this.handlers[i.cmd])}}getCommandHandlers(){return this.handlers}getCommands(){return Object.keys(this.handlers).concat(Object.keys(this.aliasMap))}hasDefaultCommand(){return!!this.defaultCommand}runCommand(t,e,n,s,i,u){const r=this.handlers[t]||this.handlers[this.aliasMap[t]]||this.defaultCommand,o=e.getInternalMethods().getContext(),a=o.commands.slice(),D=!t;t&&(o.commands.push(t),o.fullCommands.push(r.original));const l=this.applyBuilderUpdateUsageAndParse(D,r,e,n.aliases,a,s,i,u);return Mt(l)?l.then(t=>this.applyMiddlewareAndGetResult(D,r,t.innerArgv,o,i,t.aliases,e)):this.applyMiddlewareAndGetResult(D,r,l.innerArgv,o,i,l.aliases,e)}applyBuilderUpdateUsageAndParse(t,e,n,s,i,u,r,o){const a=e.builder;let D=n;if(Gt(a)){n.getInternalMethods().getUsageInstance().freeze();const l=a(n.getInternalMethods().reset(s),o);if(Mt(l))return l.then(s=>{var o;return D=(o=s)&&"function"==typeof o.getInternalMethods?s:n,this.parseAndUpdateUsage(t,e,D,i,u,r)})}else(function(t){return"object"==typeof t})(a)&&(n.getInternalMethods().getUsageInstance().freeze(),D=n.getInternalMethods().reset(s),Object.keys(e.builder).forEach(t=>{D.option(t,a[t])}));return this.parseAndUpdateUsage(t,e,D,i,u,r)}parseAndUpdateUsage(t,e,n,s,i,u){t&&n.getInternalMethods().getUsageInstance().unfreeze(!0),this.shouldUpdateUsage(n)&&n.getInternalMethods().getUsageInstance().usage(this.usageFromParentCommandsCommandHandler(s,e),e.description);const r=n.getInternalMethods().runYargsParserAndExecuteCommands(null,void 0,!0,i,u);return Mt(r)?r.then(t=>({aliases:n.parsed.aliases,innerArgv:t})):{aliases:n.parsed.aliases,innerArgv:r}}shouldUpdateUsage(t){return!t.getInternalMethods().getUsageInstance().getUsageDisabled()&&0===t.getInternalMethods().getUsageInstance().getUsage().length}usageFromParentCommandsCommandHandler(t,e){const n=Rt.test(e.original)?e.original.replace(Rt,"").trim():e.original,s=t.filter(t=>!Rt.test(t));return s.push(n),`$0 ${s.join(" ")}`}handleValidationAndGetResult(t,e,n,s,i,u,r,o){if(!u.getInternalMethods().getHasOutput()){const e=u.getInternalMethods().runValidation(i,o,u.parsed.error,t);n=Ht(n,t=>(e(t),t))}if(e.handler&&!u.getInternalMethods().getHasOutput()){u.getInternalMethods().setHasOutput();const s=!!u.getOptions().configuration["populate--"];u.getInternalMethods().postProcess(n,s,!1,!1),n=Ht(n=zt(n,u,r,!1),t=>{const n=e.handler(t);return Mt(n)?n.then(()=>t):t}),t||u.getInternalMethods().getUsageInstance().cacheHelpMessage(),Mt(n)&&!u.getInternalMethods().hasParseCallback()&&n.catch(t=>{try{u.getInternalMethods().getUsageInstance().fail(null,t)}catch(t){}})}return t||(s.commands.pop(),s.fullCommands.pop()),n}applyMiddlewareAndGetResult(t,e,n,s,i,u,r){let o={};if(i)return n;r.getInternalMethods().getHasOutput()||(o=this.populatePositionals(e,n,s,r));const a=this.globalMiddleware.getMiddleware().slice(0).concat(e.middlewares),D=zt(n,r,a,!0);return Mt(D)?D.then(n=>this.handleValidationAndGetResult(t,e,n,s,u,r,a,o)):this.handleValidationAndGetResult(t,e,D,s,u,r,a,o)}populatePositionals(t,e,n,s){e._=e._.slice(n.commands.length);const i=t.demanded.slice(0),u=t.optional.slice(0),r={};for(this.validation.positionalCount(i.length,e._.length);i.length;){const t=i.shift();this.populatePositional(t,e,r)}for(;u.length;){const t=u.shift();this.populatePositional(t,e,r)}return e._=n.commands.concat(e._.map(t=>""+t)),this.postProcessPositionals(e,r,this.cmdToParseOptions(t.original),s),r}populatePositional(t,e,n){const s=t.cmd[0];t.variadic?n[s]=e._.splice(0).map(String):e._.length&&(n[s]=[String(e._.shift())])}cmdToParseOptions(t){const e={array:[],default:{},alias:{},demand:{}},n=$t(t);return n.demanded.forEach(t=>{const[n,...s]=t.cmd;t.variadic&&(e.array.push(n),e.default[n]=[]),e.alias[n]=s,e.demand[n]=!0}),n.optional.forEach(t=>{const[n,...s]=t.cmd;t.variadic&&(e.array.push(n),e.default[n]=[]),e.alias[n]=s}),e}postProcessPositionals(t,e,n,s){const i=Object.assign({},s.getOptions());i.default=Object.assign(n.default,i.default);for(const t of Object.keys(n.alias))i.alias[t]=(i.alias[t]||[]).concat(n.alias[t]);i.array=i.array.concat(n.array),i.config={};const u=[];if(Object.keys(e).forEach(t=>{e[t].map(e=>{i.configuration["unknown-options-as-args"]&&(i.key[t]=!0),u.push(`--${t}`),u.push(e)})}),!u.length)return;const r=Object.assign({},i.configuration,{"populate--":!1}),o=this.shim.Parser.detailed(u,Object.assign({},i,{configuration:r}));if(o.error)s.getInternalMethods().getUsageInstance().fail(o.error.message,o.error);else{const n=Object.keys(e);Object.keys(e).forEach(t=>{n.push(...o.aliases[t])}),Object.keys(o.argv).forEach(i=>{n.includes(i)&&(e[i]||(e[i]=o.argv[i]),!this.isInConfigs(s,i)&&!this.isDefaulted(s,i)&&Object.prototype.hasOwnProperty.call(t,i)&&Object.prototype.hasOwnProperty.call(o.argv,i)&&(Array.isArray(t[i])||Array.isArray(o.argv[i]))?t[i]=[].concat(t[i],o.argv[i]):t[i]=o.argv[i])})}}isDefaulted(t,e){const{default:n}=t.getOptions();return Object.prototype.hasOwnProperty.call(n,e)||Object.prototype.hasOwnProperty.call(n,this.shim.Parser.camelCase(e))}isInConfigs(t,e){const{configObjects:n}=t.getOptions();return n.some(t=>Object.prototype.hasOwnProperty.call(t,e))||n.some(t=>Object.prototype.hasOwnProperty.call(t,this.shim.Parser.camelCase(e)))}runDefaultBuilderOn(t){if(!this.defaultCommand)return;if(this.shouldUpdateUsage(t)){const e=Rt.test(this.defaultCommand.original)?this.defaultCommand.original:this.defaultCommand.original.replace(/^[^[\]<>]*/,"$0 ");t.getInternalMethods().getUsageInstance().usage(e,this.defaultCommand.description)}const e=this.defaultCommand.builder;if(Gt(e))return e(t,!0);Ut(e)||Object.keys(e).forEach(n=>{t.option(n,e[n])})}extractDesc({describe:t,description:e,desc:n}){for(const s of[t,e,n]){if("string"==typeof s||!1===s)return s;xt(s,!0,this.shim)}return!1}freeze(){this.frozens.push({handlers:this.handlers,aliasMap:this.aliasMap,defaultCommand:this.defaultCommand})}unfreeze(){const t=this.frozens.pop();xt(t,void 0,this.shim),({handlers:this.handlers,aliasMap:this.aliasMap,defaultCommand:this.defaultCommand}=t)}reset(){return this.handlers={},this.aliasMap={},this.defaultCommand=void 0,this.requireCache=new Set,this}}function Ut(t){return"object"==typeof t&&!!t.builder&&"function"==typeof t.handler}function Gt(t){return"function"==typeof t}function qt(t={},e=()=>!0){const n={};return _t(t).forEach(s=>{e(s,t[s])&&(n[s]=t[s])}),n}function Vt(t){"undefined"!=typeof process&&[process.stdout,process.stderr].forEach(e=>{const n=e;n._handle&&n.isTTY&&"function"==typeof n._handle.setBlocking&&n._handle.setBlocking(t)})}function Yt(t){return"boolean"==typeof t}function Kt(t,e){const n=e.y18n.__,s={},i=[];s.failFn=function(t){i.push(t)};let u=null,r=null,o=!0;s.showHelpOnFail=function(e=!0,n){const[i,a]="string"==typeof e?[!0,e]:[e,n];return t.getInternalMethods().isGlobalContext()&&(r=a),u=a,o=i,s};let a=!1;s.fail=function(e,n){const D=t.getInternalMethods().getLoggerInstance();if(!i.length){if(t.getExitProcess()&&Vt(!0),!a){a=!0,o&&(t.showHelp("error"),D.error()),(e||n)&&D.error(e||n);const s=u||r;s&&((e||n)&&D.error(""),D.error(s))}if(n=n||new St(e),t.getExitProcess())return t.exit(1);if(t.getInternalMethods().hasParseCallback())return t.exit(1,n);throw n}for(let t=i.length-1;t>=0;--t){const u=i[t];if(Yt(u)){if(n)throw n;if(e)throw Error(e)}else u(e,n,s)}};let D=[],l=!1;s.usage=(t,e)=>null===t?(l=!0,D=[],s):(l=!1,D.push([t,e||""]),s),s.getUsage=()=>D,s.getUsageDisabled=()=>l,s.getPositionalGroupName=()=>n("Positionals:");let c=[];s.example=(t,e)=>{c.push([t,e||""])};let h=[];s.command=function(t,e,n,s,i=!1){n&&(h=h.map(t=>(t[2]=!1,t))),h.push([t,e||"",n,s,i])},s.getCommands=()=>h;let f={};s.describe=function(t,e){Array.isArray(t)?t.forEach(t=>{s.describe(t,e)}):"object"==typeof t?Object.keys(t).forEach(e=>{s.describe(e,t[e])}):f[t]=e},s.getDescriptions=()=>f;let d=[];s.epilog=t=>{d.push(t)};let p,g=!1;s.wrap=t=>{g=!0,p=t},s.getWrap=()=>e.getEnv("YARGS_DISABLE_WRAP")?null:(g||(p=function(){const t=80;return e.process.stdColumns?Math.min(t,e.process.stdColumns):t}(),g=!0),p);const F="__yargsString__:";function m(t,n,s){let i=0;return Array.isArray(t)||(t=Object.values(t).map(t=>[t])),t.forEach(t=>{i=Math.max(e.stringWidth(s?`${s} ${Zt(t[0])}`:Zt(t[0]))+Qt(t[0]),i)}),n&&(i=Math.min(i,parseInt((.5*n).toString(),10))),i}let C;function E(e){return t.getOptions().hiddenOptions.indexOf(e)<0||t.parsed.argv[t.getOptions().showHiddenOpt]}function y(t,e){let s=`[${n("default:")} `;if(void 0===t&&!e)return null;if(e)s+=e;else switch(typeof t){case"string":s+=`"${t}"`;break;case"object":s+=JSON.stringify(t);break;default:s+=t}return`${s}]`}s.deferY18nLookup=t=>F+t,s.help=function(){if(C)return C;!function(){const e=t.getDemandedOptions(),n=t.getOptions();(Object.keys(n.alias)||[]).forEach(i=>{n.alias[i].forEach(u=>{f[u]&&s.describe(i,f[u]),u in e&&t.demandOption(i,e[u]),n.boolean.includes(u)&&t.boolean(i),n.count.includes(u)&&t.count(i),n.string.includes(u)&&t.string(i),n.normalize.includes(u)&&t.normalize(i),n.array.includes(u)&&t.array(i),n.number.includes(u)&&t.number(i)})})}();const i=t.customScriptName?t.$0:e.path.basename(t.$0),u=t.getDemandedOptions(),r=t.getDemandedCommands(),o=t.getDeprecatedOptions(),a=t.getGroups(),p=t.getOptions();let g=[];g=g.concat(Object.keys(f)),g=g.concat(Object.keys(u)),g=g.concat(Object.keys(r)),g=g.concat(Object.keys(p.default)),g=g.filter(E),g=Object.keys(g.reduce((t,e)=>("_"!==e&&(t[e]=!0),t),{}));const b=s.getWrap(),v=e.cliui({width:b,wrap:!!b});if(!l)if(D.length)D.forEach(t=>{v.div({text:`${t[0].replace(/\$0/g,i)}`}),t[1]&&v.div({text:`${t[1]}`,padding:[1,0,0,0]})}),v.div();else if(h.length){let t=null;t=r._?`${i} <${n("command")}>\n`:`${i} [${n("command")}]\n`,v.div(`${t}`)}if(h.length>1||1===h.length&&!h[0][2]){v.div(n("Commands:"));const e=t.getInternalMethods().getContext(),s=e.commands.length?`${e.commands.join(" ")} `:"";!0===t.getInternalMethods().getParserConfiguration()["sort-commands"]&&(h=h.sort((t,e)=>t[0].localeCompare(e[0])));const u=i?`${i} `:"";h.forEach(t=>{const e=`${u}${s}${t[0].replace(/^\$0 ?/,"")}`;v.span({text:e,padding:[0,2,0,2],width:m(h,b,`${i}${s}`)+4},{text:t[1]});const r=[];t[2]&&r.push(`[${n("default")}]`),t[3]&&t[3].length&&r.push(`[${n("aliases:")} ${t[3].join(", ")}]`),t[4]&&("string"==typeof t[4]?r.push(`[${n("deprecated: %s",t[4])}]`):r.push(`[${n("deprecated")}]`)),r.length?v.div({text:r.join(" "),padding:[0,0,0,2],align:"right"}):v.div()}),v.div()}const A=(Object.keys(p.alias)||[]).concat(Object.keys(t.parsed.newAliases)||[]);g=g.filter(e=>!t.parsed.newAliases[e]&&A.every(t=>-1===(p.alias[t]||[]).indexOf(e)));const B=n("Options:");a[B]||(a[B]=[]),function(t,e,n,s){let i=[],u=null;Object.keys(n).forEach(t=>{i=i.concat(n[t])}),t.forEach(t=>{u=[t].concat(e[t]),u.some(t=>-1!==i.indexOf(t))||n[s].push(t)})}(g,p.alias,a,B);const w=t=>/^--/.test(Zt(t)),O=Object.keys(a).filter(t=>a[t].length>0).map(t=>({groupName:t,normalizedKeys:a[t].filter(E).map(t=>{if(A.includes(t))return t;for(let e,n=0;void 0!==(e=A[n]);n++)if((p.alias[e]||[]).includes(t))return e;return t})})).filter(({normalizedKeys:t})=>t.length>0).map(({groupName:t,normalizedKeys:e})=>{const n=e.reduce((e,n)=>(e[n]=[n].concat(p.alias[n]||[]).map(e=>t===s.getPositionalGroupName()?e:(/^[0-9]$/.test(e)?p.boolean.includes(n)?"-":"--":e.length>1?"--":"-")+e).sort((t,e)=>w(t)===w(e)?0:w(t)?1:-1).join(", "),e),{});return{groupName:t,normalizedKeys:e,switches:n}});if(O.filter(({groupName:t})=>t!==s.getPositionalGroupName()).some(({normalizedKeys:t,switches:e})=>!t.every(t=>w(e[t])))&&O.filter(({groupName:t})=>t!==s.getPositionalGroupName()).forEach(({normalizedKeys:t,switches:e})=>{t.forEach(t=>{var n,s;w(e[t])&&(e[t]=(n=e[t],s=4,Jt(n)?{text:n.text,indentation:n.indentation+s}:{text:n,indentation:s}))})}),O.forEach(({groupName:e,normalizedKeys:i,switches:r})=>{v.div(e),i.forEach(e=>{const i=r[e];let a=f[e]||"",D=null;a.includes(F)&&(a=n(a.substring(16))),p.boolean.includes(e)&&(D=`[${n("boolean")}]`),p.count.includes(e)&&(D=`[${n("count")}]`),p.string.includes(e)&&(D=`[${n("string")}]`),p.normalize.includes(e)&&(D=`[${n("string")}]`),p.array.includes(e)&&(D=`[${n("array")}]`),p.number.includes(e)&&(D=`[${n("number")}]`);const l=[e in o?(c=o[e],"string"==typeof c?`[${n("deprecated: %s",c)}]`:`[${n("deprecated")}]`):null,D,e in u?`[${n("required")}]`:null,p.choices&&p.choices[e]?`[${n("choices:")} ${s.stringifiedValues(p.choices[e])}]`:null,y(p.default[e],p.defaultDescription[e])].filter(Boolean).join(" ");var c;v.span({text:Zt(i),padding:[0,2,0,2+Qt(i)],width:m(r,b)+4},a);const h=!0===t.getInternalMethods().getUsageConfiguration()["hide-types"];l&&!h?v.div({text:l,padding:[0,0,0,2],align:"right"}):v.div()}),v.div()}),c.length&&(v.div(n("Examples:")),c.forEach(t=>{t[0]=t[0].replace(/\$0/g,i)}),c.forEach(t=>{""===t[1]?v.div({text:t[0],padding:[0,2,0,2]}):v.div({text:t[0],padding:[0,2,0,2],width:m(c,b)+4},{text:t[1]})}),v.div()),d.length>0){const t=d.map(t=>t.replace(/\$0/g,i)).join("\n");v.div(`${t}\n`)}return v.toString().replace(/\s*$/,"")},s.cacheHelpMessage=function(){C=this.help()},s.clearCachedHelpMessage=function(){C=void 0},s.hasCachedHelpMessage=function(){return!!C},s.showHelp=e=>{const n=t.getInternalMethods().getLoggerInstance();e||(e="error");("function"==typeof e?e:n[e])(s.help())},s.functionDescription=t=>["(",t.name?e.Parser.decamelize(t.name,"-"):n("generated-value"),")"].join(""),s.stringifiedValues=function(t,e){let n="";const s=e||", ",i=[].concat(t);return t&&i.length?(i.forEach(t=>{n.length&&(n+=s),n+=JSON.stringify(t)}),n):n};let b=null;s.version=t=>{b=t},s.showVersion=e=>{const n=t.getInternalMethods().getLoggerInstance();e||(e="error");("function"==typeof e?e:n[e])(b)},s.reset=function(t){return u=null,a=!1,D=[],l=!1,d=[],c=[],h=[],f=qt(f,e=>!t[e]),s};const v=[];return s.freeze=function(){v.push({failMessage:u,failureOutput:a,usages:D,usageDisabled:l,epilogs:d,examples:c,commands:h,descriptions:f})},s.unfreeze=function(t=!1){const e=v.pop();e&&(t?(f={...e.descriptions,...f},h=[...e.commands,...h],D=[...e.usages,...D],c=[...e.examples,...c],d=[...e.epilogs,...d]):({failMessage:u,failureOutput:a,usages:D,usageDisabled:l,epilogs:d,examples:c,commands:h,descriptions:f}=e))},s}function Jt(t){return"object"==typeof t}function Qt(t){return Jt(t)?t.indentation:0}function Zt(t){return Jt(t)?t.text:t}class Xt{constructor(t,e,n,s){var i,u,r;this.yargs=t,this.usage=e,this.command=n,this.shim=s,this.completionKey="get-yargs-completions",this.aliases=null,this.customCompletionFunction=null,this.indexAfterLastReset=0,this.zshShell=null!==(r=(null===(i=this.shim.getEnv("SHELL"))||void 0===i?void 0:i.includes("zsh"))||(null===(u=this.shim.getEnv("ZSH_NAME"))||void 0===u?void 0:u.includes("zsh")))&&void 0!==r&&r}defaultCompletion(t,e,n,s){const i=this.command.getCommandHandlers();for(let e=0,n=t.length;e<n;++e)if(i[t[e]]&&i[t[e]].builder){const n=i[t[e]].builder;if(Gt(n)){this.indexAfterLastReset=e+1;const t=this.yargs.getInternalMethods().reset();return n(t,!0),t.argv}}const u=[];this.commandCompletions(u,t,n),this.optionCompletions(u,t,e,n),this.choicesFromOptionsCompletions(u,t,e,n),this.choicesFromPositionalsCompletions(u,t,e,n),s(null,u)}commandCompletions(t,e,n){const s=this.yargs.getInternalMethods().getContext().commands;n.match(/^-/)||s[s.length-1]===n||this.previousArgHasChoices(e)||this.usage.getCommands().forEach(n=>{const s=$t(n[0]).cmd;if(-1===e.indexOf(s))if(this.zshShell){const e=n[1]||"";t.push(s.replace(/:/g,"\\:")+":"+e)}else t.push(s)})}optionCompletions(t,e,n,s){if((s.match(/^-/)||""===s&&0===t.length)&&!this.previousArgHasChoices(e)){const n=this.yargs.getOptions(),i=this.yargs.getGroups()[this.usage.getPositionalGroupName()]||[];Object.keys(n.key).forEach(u=>{const r=!!n.configuration["boolean-negation"]&&n.boolean.includes(u);i.includes(u)||n.hiddenOptions.includes(u)||this.argsContainKey(e,u,r)||this.completeOptionKey(u,t,s,r&&!!n.default[u])})}}choicesFromOptionsCompletions(t,e,n,s){if(this.previousArgHasChoices(e)){const n=this.getPreviousArgChoices(e);n&&n.length>0&&t.push(...n.map(t=>t.replace(/:/g,"\\:")))}}choicesFromPositionalsCompletions(t,e,n,s){if(""===s&&t.length>0&&this.previousArgHasChoices(e))return;const i=this.yargs.getGroups()[this.usage.getPositionalGroupName()]||[],u=Math.max(this.indexAfterLastReset,this.yargs.getInternalMethods().getContext().commands.length+1),r=i[n._.length-u-1];if(!r)return;const o=this.yargs.getOptions().choices[r]||[];for(const e of o)e.startsWith(s)&&t.push(e.replace(/:/g,"\\:"))}getPreviousArgChoices(t){if(t.length<1)return;let e=t[t.length-1],n="";if(!e.startsWith("-")&&t.length>1&&(n=e,e=t[t.length-2]),!e.startsWith("-"))return;const s=e.replace(/^-+/,""),i=this.yargs.getOptions(),u=[s,...this.yargs.getAliases()[s]||[]];let r;for(const t of u)if(Object.prototype.hasOwnProperty.call(i.key,t)&&Array.isArray(i.choices[t])){r=i.choices[t];break}return r?r.filter(t=>!n||t.startsWith(n)):void 0}previousArgHasChoices(t){const e=this.getPreviousArgChoices(t);return void 0!==e&&e.length>0}argsContainKey(t,e,n){const s=e=>-1!==t.indexOf((/^[^0-9]$/.test(e)?"-":"--")+e);if(s(e))return!0;if(n&&s(`no-${e}`))return!0;if(this.aliases)for(const t of this.aliases[e])if(s(t))return!0;return!1}completeOptionKey(t,e,n,s){var i,u,r,o;let a=t;if(this.zshShell){const e=this.usage.getDescriptions(),n=null===(u=null===(i=null==this?void 0:this.aliases)||void 0===i?void 0:i[t])||void 0===u?void 0:u.find(t=>{const n=e[t];return"string"==typeof n&&n.length>0}),s=n?e[n]:void 0,D=null!==(o=null!==(r=e[t])&&void 0!==r?r:s)&&void 0!==o?o:"";a=`${t.replace(/:/g,"\\:")}:${D.replace("__yargsString__:","").replace(/(\r\n|\n|\r)/gm," ")}`}const D=!/^--/.test(n)&&(t=>/^[^0-9]$/.test(t))(t)?"-":"--";e.push(D+a),s&&e.push(D+"no-"+a)}customCompletion(t,e,n,s){if(xt(this.customCompletionFunction,null,this.shim),this.customCompletionFunction.length<3){const t=this.customCompletionFunction(n,e);return Mt(t)?t.then(t=>{this.shim.process.nextTick(()=>{s(null,t)})}).catch(t=>{this.shim.process.nextTick(()=>{s(t,void 0)})}):s(null,t)}return function(t){return t.length>3}(this.customCompletionFunction)?this.customCompletionFunction(n,e,(i=s)=>this.defaultCompletion(t,e,n,i),t=>{s(null,t)}):this.customCompletionFunction(n,e,t=>{s(null,t)})}getCompletion(t,e){const n=t.length?t[t.length-1]:"",s=this.yargs.parse(t,!0),i=this.customCompletionFunction?s=>this.customCompletion(t,s,n,e):s=>this.defaultCompletion(t,s,n,e);return Mt(s)?s.then(i):i(s)}generateCompletionScript(t,e){let n=this.zshShell?'#compdef {{app_name}}\n###-begin-{{app_name}}-completions-###\n#\n# yargs command completion script\n#\n# Installation: {{app_path}} {{completion_command}} >> ~/.zshrc\n# or {{app_path}} {{completion_command}} >> ~/.zprofile on OSX.\n#\n_{{app_name}}_yargs_completions()\n{\n local reply\n local si=$IFS\n IFS=$\'\n\' reply=($(COMP_CWORD="$((CURRENT-1))" COMP_LINE="$BUFFER" COMP_POINT="$CURSOR" {{app_path}} --get-yargs-completions "${words[@]}"))\n IFS=$si\n if [[ ${#reply} -gt 0 ]]; then\n _describe \'values\' reply\n else\n _default\n fi\n}\nif [[ "\'${zsh_eval_context[-1]}" == "loadautofunc" ]]; then\n _{{app_name}}_yargs_completions "$@"\nelse\n compdef _{{app_name}}_yargs_completions {{app_name}}\nfi\n###-end-{{app_name}}-completions-###\n':'###-begin-{{app_name}}-completions-###\n#\n# yargs command completion script\n#\n# Installation: {{app_path}} {{completion_command}} >> ~/.bashrc\n# or {{app_path}} {{completion_command}} >> ~/.bash_profile on OSX.\n#\n_{{app_name}}_yargs_completions()\n{\n local cur_word args type_list\n\n cur_word="${COMP_WORDS[COMP_CWORD]}"\n args=("${COMP_WORDS[@]}")\n\n # ask yargs to generate completions.\n # see https://stackoverflow.com/a/40944195/7080036 for the spaces-handling awk\n mapfile -t type_list < <({{app_path}} --get-yargs-completions "${args[@]}")\n mapfile -t COMPREPLY < <(compgen -W "$( printf \'%q \' "${type_list[@]}" )" -- "${cur_word}" |\n awk \'/ / { print "\\""$0"\\"" } /^[^ ]+$/ { print $0 }\')\n\n # if no match was found, fall back to filename completion\n if [ ${#COMPREPLY[@]} -eq 0 ]; then\n COMPREPLY=()\n fi\n\n return 0\n}\ncomplete -o bashdefault -o default -F _{{app_name}}_yargs_completions {{app_name}}\n###-end-{{app_name}}-completions-###\n';const s=this.shim.path.basename(t);return t.match(/\.js$/)&&(t=`./${t}`),n=n.replace(/{{app_name}}/g,s),n=n.replace(/{{completion_command}}/g,e),n.replace(/{{app_path}}/g,t)}registerFunction(t){this.customCompletionFunction=t}setParsed(t){this.aliases=t.aliases}}function te(t,e){if(0===t.length)return e.length;if(0===e.length)return t.length;const n=[];let s,i;for(s=0;s<=e.length;s++)n[s]=[s];for(i=0;i<=t.length;i++)n[0][i]=i;for(s=1;s<=e.length;s++)for(i=1;i<=t.length;i++)e.charAt(s-1)===t.charAt(i-1)?n[s][i]=n[s-1][i-1]:s>1&&i>1&&e.charAt(s-2)===t.charAt(i-1)&&e.charAt(s-1)===t.charAt(i-2)?n[s][i]=n[s-2][i-2]+1:n[s][i]=Math.min(n[s-1][i-1]+1,Math.min(n[s][i-1]+1,n[s-1][i]+1));return n[e.length][t.length]}const ee=["$0","--","_"];let ne,se=[];function ie(t,e,n,s){ne=s;let i={};if(Object.prototype.hasOwnProperty.call(t,"extends")){if("string"!=typeof t.extends)return i;const u=/\.json|\..*rc$/.test(t.extends);let r=null;if(u)r=function(t,e){return ne.path.resolve(t,e)}(e,t.extends);else try{r=import.meta.resolve(t.extends)}catch(e){return t}!function(t){if(se.indexOf(t)>-1)throw new St(`Circular extended configurations: '${t}'.`)}(r),se.push(r),i=u?JSON.parse(ne.readFileSync(r,"utf8")):s.require(t.extends),delete t.extends,i=ie(i,ne.path.dirname(r),n,ne)}return se=[],n?ue(i,t):Object.assign({},i,t)}function ue(t,e){const n={};function s(t){return t&&"object"==typeof t&&!Array.isArray(t)}Object.assign(n,t);for(const i of Object.keys(e))s(e[i])&&s(n[i])?n[i]=ue(t[i],e[i]):n[i]=e[i];return n}var re,oe,ae,De,le,ce,he,fe,de,pe,ge,Fe,me,Ce,Ee,ye,be,ve,Ae,Be,we,Oe,je,xe,ke,_e,Me,Se,$e,Pe,Ie,Ne,We,Le,ze,He=function(t,e,n,s,i){if("m"===s)throw new TypeError("Private method is not writable");if("a"===s&&!i)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===s?i.call(t,n):i?i.value=n:e.set(t,n),n},Re=function(t,e,n,s){if("a"===n&&!s)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?s:"a"===n?s.call(t):s?s.value:e.get(t)};const Te=Symbol("copyDoubleDash"),Ue=Symbol("copyDoubleDash"),Ge=Symbol("deleteFromParserHintObject"),qe=Symbol("emitWarning"),Ve=Symbol("freeze"),Ye=Symbol("getDollarZero"),Ke=Symbol("getParserConfiguration"),Je=Symbol("getUsageConfiguration"),Qe=Symbol("guessLocale"),Ze=Symbol("guessVersion"),Xe=Symbol("parsePositionalNumbers"),tn=Symbol("pkgUp"),en=Symbol("populateParserHintArray"),nn=Symbol("populateParserHintSingleValueDictionary"),sn=Symbol("populateParserHintArrayDictionary"),un=Symbol("populateParserHintDictionary"),rn=Symbol("sanitizeKey"),on=Symbol("setKey"),an=Symbol("unfreeze"),Dn=Symbol("validateAsync"),ln=Symbol("getCommandInstance"),cn=Symbol("getContext"),hn=Symbol("getHasOutput"),fn=Symbol("getLoggerInstance"),dn=Symbol("getParseContext"),pn=Symbol("getUsageInstance"),gn=Symbol("getValidationInstance"),Fn=Symbol("hasParseCallback"),mn=Symbol("isGlobalContext"),Cn=Symbol("postProcess"),En=Symbol("rebase"),yn=Symbol("reset"),bn=Symbol("runYargsParserAndExecuteCommands"),vn=Symbol("runValidation"),An=Symbol("setHasOutput"),Bn=Symbol("kTrackManuallySetKeys");class wn{constructor(t=[],e,n,s){this.customScriptName=!1,this.parsed=!1,re.set(this,void 0),oe.set(this,void 0),ae.set(this,{commands:[],fullCommands:[]}),De.set(this,null),le.set(this,null),ce.set(this,"show-hidden"),he.set(this,null),fe.set(this,!0),de.set(this,{}),pe.set(this,!0),ge.set(this,[]),Fe.set(this,void 0),me.set(this,{}),Ce.set(this,!1),Ee.set(this,null),ye.set(this,!0),be.set(this,void 0),ve.set(this,""),Ae.set(this,void 0),Be.set(this,void 0),we.set(this,{}),Oe.set(this,null),je.set(this,null),xe.set(this,{}),ke.set(this,{}),_e.set(this,void 0),Me.set(this,!1),Se.set(this,void 0),$e.set(this,!1),Pe.set(this,!1),Ie.set(this,!1),Ne.set(this,void 0),We.set(this,{}),Le.set(this,null),ze.set(this,void 0),He(this,Se,s,"f"),He(this,_e,t,"f"),He(this,oe,e,"f"),He(this,Be,n,"f"),He(this,Fe,new Lt(this),"f"),this.$0=this[Ye](),this[yn](),He(this,re,Re(this,re,"f"),"f"),He(this,Ne,Re(this,Ne,"f"),"f"),He(this,ze,Re(this,ze,"f"),"f"),He(this,Ae,Re(this,Ae,"f"),"f"),Re(this,Ae,"f").showHiddenOpt=Re(this,ce,"f"),He(this,be,this[Ue](),"f"),Re(this,Se,"f").y18n.setLocale("en_US")}addHelpOpt(t,e){return It("[string|boolean] [string]",[t,e],arguments.length),Re(this,Ee,"f")&&(this[Ge](Re(this,Ee,"f")),He(this,Ee,null,"f")),!1===t&&void 0===e||(He(this,Ee,"string"==typeof t?t:"help","f"),this.boolean(Re(this,Ee,"f")),this.describe(Re(this,Ee,"f"),e||Re(this,Ne,"f").deferY18nLookup("Show help"))),this}help(t,e){return this.addHelpOpt(t,e)}addShowHiddenOpt(t,e){if(It("[string|boolean] [string]",[t,e],arguments.length),!1===t&&void 0===e)return this;const n="string"==typeof t?t:Re(this,ce,"f");return this.boolean(n),this.describe(n,e||Re(this,Ne,"f").deferY18nLookup("Show hidden options")),Re(this,Ae,"f").showHiddenOpt=n,this}showHidden(t,e){return this.addShowHiddenOpt(t,e)}alias(t,e){return It("<object|string|array> [string|array]",[t,e],arguments.length),this[sn](this.alias.bind(this),"alias",t,e),this}array(t){return It("<array|string>",[t],arguments.length),this[en]("array",t),this[Bn](t),this}boolean(t){return It("<array|string>",[t],arguments.length),this[en]("boolean",t),this[Bn](t),this}check(t,e){return It("<function> [boolean]",[t,e],arguments.length),this.middleware((e,n)=>Ht(()=>t(e,n.getOptions()),n=>(n?("string"==typeof n||n instanceof Error)&&Re(this,Ne,"f").fail(n.toString(),n):Re(this,Ne,"f").fail(Re(this,Se,"f").y18n.__("Argument check failed: %s",t.toString())),e),t=>(Re(this,Ne,"f").fail(t.message?t.message:t.toString(),t),e)),!1,e),this}choices(t,e){return It("<object|string|array> [string|array]",[t,e],arguments.length),this[sn](this.choices.bind(this),"choices",t,e),this}coerce(t,e){if(It("<object|string|array> [function]",[t,e],arguments.length),Array.isArray(t)){if(!e)throw new St("coerce callback must be provided");for(const n of t)this.coerce(n,e);return this}if("object"==typeof t){for(const e of Object.keys(t))this.coerce(e,t[e]);return this}if(!e)throw new St("coerce callback must be provided");const n=t;return Re(this,Ae,"f").key[n]=!0,Re(this,Fe,"f").addCoerceMiddleware((t,s)=>{var i;const u=null!==(i=s.getAliases()[n])&&void 0!==i?i:[],r=[n,...u].filter(e=>Object.prototype.hasOwnProperty.call(t,e));return 0===r.length?t:Ht(()=>e(t[r[0]]),e=>(r.forEach(n=>{t[n]=e}),t),t=>{throw new St(t.message)})},n),this}conflicts(t,e){return It("<string|object> [string|array]",[t,e],arguments.length),Re(this,ze,"f").conflicts(t,e),this}config(t="config",e,n){return It("[object|string] [string|function] [function]",[t,e,n],arguments.length),"object"!=typeof t||Array.isArray(t)?("function"==typeof e&&(n=e,e=void 0),this.describe(t,e||Re(this,Ne,"f").deferY18nLookup("Path to JSON config file")),(Array.isArray(t)?t:[t]).forEach(t=>{Re(this,Ae,"f").config[t]=n||!0}),this):(t=ie(t,Re(this,oe,"f"),this[Ke]()["deep-merge-config"]||!1,Re(this,Se,"f")),Re(this,Ae,"f").configObjects=(Re(this,Ae,"f").configObjects||[]).concat(t),this)}completion(t,e,n){return It("[string] [string|boolean|function] [function]",[t,e,n],arguments.length),"function"==typeof e&&(n=e,e=void 0),He(this,le,t||Re(this,le,"f")||"completion","f"),e||!1===e||(e="generate completion script"),this.command(Re(this,le,"f"),e),n&&Re(this,De,"f").registerFunction(n),this}command(t,e,n,s,i,u){return It("<string|array|object> [string|boolean] [function|object] [function] [array] [boolean|string]",[t,e,n,s,i,u],arguments.length),Re(this,re,"f").addHandler(t,e,n,s,i,u),this}commands(t,e,n,s,i,u){return this.command(t,e,n,s,i,u)}commandDir(t,e){It("<string> [object]",[t,e],arguments.length);const n=Re(this,Be,"f")||Re(this,Se,"f").require;return Re(this,re,"f").addDirectory(t,n,Re(this,Se,"f").getCallerFile(),e),this}count(t){return It("<array|string>",[t],arguments.length),this[en]("count",t),this[Bn](t),this}default(t,e,n){return It("<object|string|array> [*] [string]",[t,e,n],arguments.length),n&&(kt(t,Re(this,Se,"f")),Re(this,Ae,"f").defaultDescription[t]=n),"function"==typeof e&&(kt(t,Re(this,Se,"f")),Re(this,Ae,"f").defaultDescription[t]||(Re(this,Ae,"f").defaultDescription[t]=Re(this,Ne,"f").functionDescription(e)),e=e.call()),this[nn](this.default.bind(this),"default",t,e),this}defaults(t,e,n){return this.default(t,e,n)}demandCommand(t=1,e,n,s){return It("[number] [number|string] [string|null|undefined] [string|null|undefined]",[t,e,n,s],arguments.length),"number"!=typeof e&&(n=e,e=1/0),this.global("_",!1),Re(this,Ae,"f").demandedCommands._={min:t,max:e,minMsg:n,maxMsg:s},this}demand(t,e,n){return Array.isArray(e)?(e.forEach(t=>{xt(n,!0,Re(this,Se,"f")),this.demandOption(t,n)}),e=1/0):"number"!=typeof e&&(n=e,e=1/0),"number"==typeof t?(xt(n,!0,Re(this,Se,"f")),this.demandCommand(t,e,n,n)):Array.isArray(t)?t.forEach(t=>{xt(n,!0,Re(this,Se,"f")),this.demandOption(t,n)}):"string"==typeof n?this.demandOption(t,n):!0!==n&&void 0!==n||this.demandOption(t),this}demandOption(t,e){return It("<object|string|array> [string]",[t,e],arguments.length),this[nn](this.demandOption.bind(this),"demandedOptions",t,e),this}deprecateOption(t,e){return It("<string> [string|boolean]",[t,e],arguments.length),Re(this,Ae,"f").deprecatedOptions[t]=e,this}describe(t,e){return It("<object|string|array> [string]",[t,e],arguments.length),this[on](t,!0),Re(this,Ne,"f").describe(t,e),this}detectLocale(t){return It("<boolean>",[t],arguments.length),He(this,fe,t,"f"),this}env(t){return It("[string|boolean]",[t],arguments.length),!1===t?delete Re(this,Ae,"f").envPrefix:Re(this,Ae,"f").envPrefix=t||"",this}epilogue(t){return It("<string>",[t],arguments.length),Re(this,Ne,"f").epilog(t),this}epilog(t){return this.epilogue(t)}example(t,e){return It("<string|array> [string]",[t,e],arguments.length),Array.isArray(t)?t.forEach(t=>this.example(...t)):Re(this,Ne,"f").example(t,e),this}exit(t,e){He(this,Ce,!0,"f"),He(this,he,e,"f"),Re(this,pe,"f")&&Re(this,Se,"f").process.exit(t)}exitProcess(t=!0){return It("[boolean]",[t],arguments.length),He(this,pe,t,"f"),this}fail(t){if(It("<function|boolean>",[t],arguments.length),"boolean"==typeof t&&!1!==t)throw new St("Invalid first argument. Expected function or boolean 'false'");return Re(this,Ne,"f").failFn(t),this}getAliases(){return this.parsed?this.parsed.aliases:{}}async getCompletion(t,e){return It("<array> [function]",[t,e],arguments.length),e?Re(this,De,"f").getCompletion(t,e):new Promise((e,n)=>{Re(this,De,"f").getCompletion(t,(t,s)=>{t?n(t):e(s)})})}getDemandedOptions(){return It([],0),Re(this,Ae,"f").demandedOptions}getDemandedCommands(){return It([],0),Re(this,Ae,"f").demandedCommands}getDeprecatedOptions(){return It([],0),Re(this,Ae,"f").deprecatedOptions}getDetectLocale(){return Re(this,fe,"f")}getExitProcess(){return Re(this,pe,"f")}getGroups(){return Object.assign({},Re(this,me,"f"),Re(this,ke,"f"))}getHelp(){if(He(this,Ce,!0,"f"),!Re(this,Ne,"f").hasCachedHelpMessage()){if(!this.parsed){const t=this[bn](Re(this,_e,"f"),void 0,void 0,0,!0);if(Mt(t))return t.then(()=>Re(this,Ne,"f").help())}const t=Re(this,re,"f").runDefaultBuilderOn(this);if(Mt(t))return t.then(()=>Re(this,Ne,"f").help())}return Promise.resolve(Re(this,Ne,"f").help())}getOptions(){return Re(this,Ae,"f")}getStrict(){return Re(this,$e,"f")}getStrictCommands(){return Re(this,Pe,"f")}getStrictOptions(){return Re(this,Ie,"f")}global(t,e){return It("<string|array> [boolean]",[t,e],arguments.length),t=[].concat(t),!1!==e?Re(this,Ae,"f").local=Re(this,Ae,"f").local.filter(e=>-1===t.indexOf(e)):t.forEach(t=>{Re(this,Ae,"f").local.includes(t)||Re(this,Ae,"f").local.push(t)}),this}group(t,e){It("<string|array> <string>",[t,e],arguments.length);const n=Re(this,ke,"f")[e]||Re(this,me,"f")[e];Re(this,ke,"f")[e]&&delete Re(this,ke,"f")[e];const s={};return Re(this,me,"f")[e]=(n||[]).concat(t).filter(t=>!s[t]&&(s[t]=!0)),this}hide(t){return It("<string>",[t],arguments.length),Re(this,Ae,"f").hiddenOptions.push(t),this}implies(t,e){return It("<string|object> [number|string|array]",[t,e],arguments.length),Re(this,ze,"f").implies(t,e),this}locale(t){return It("[string]",[t],arguments.length),void 0===t?(this[Qe](),Re(this,Se,"f").y18n.getLocale()):(He(this,fe,!1,"f"),Re(this,Se,"f").y18n.setLocale(t),this)}middleware(t,e,n){return Re(this,Fe,"f").addMiddleware(t,!!e,n)}nargs(t,e){return It("<string|object|array> [number]",[t,e],arguments.length),this[nn](this.nargs.bind(this),"narg",t,e),this}normalize(t){return It("<array|string>",[t],arguments.length),this[en]("normalize",t),this}number(t){return It("<array|string>",[t],arguments.length),this[en]("number",t),this[Bn](t),this}option(t,e){if(It("<string|object> [object]",[t,e],arguments.length),"object"==typeof t)Object.keys(t).forEach(e=>{this.options(e,t[e])});else{"object"!=typeof e&&(e={}),this[Bn](t),!Re(this,Le,"f")||"version"!==t&&"version"!==(null==e?void 0:e.alias)||this[qe](['"version" is a reserved word.',"Please do one of the following:",'- Disable version with `yargs.version(false)` if using "version" as an option',"- Use the built-in `yargs.version` method instead (if applicable)","- Use a different option key","https://yargs.js.org/docs/#api-reference-version"].join("\n"),void 0,"versionWarning"),Re(this,Ae,"f").key[t]=!0,e.alias&&this.alias(t,e.alias);const n=e.deprecate||e.deprecated;n&&this.deprecateOption(t,n);const s=e.demand||e.required||e.require;s&&this.demand(t,s),e.demandOption&&this.demandOption(t,"string"==typeof e.demandOption?e.demandOption:void 0),e.conflicts&&this.conflicts(t,e.conflicts),"default"in e&&this.default(t,e.default),void 0!==e.implies&&this.implies(t,e.implies),void 0!==e.nargs&&this.nargs(t,e.nargs),e.config&&this.config(t,e.configParser),e.normalize&&this.normalize(t),e.choices&&this.choices(t,e.choices),e.coerce&&this.coerce(t,e.coerce),e.group&&this.group(t,e.group),(e.boolean||"boolean"===e.type)&&(this.boolean(t),e.alias&&this.boolean(e.alias)),(e.array||"array"===e.type)&&(this.array(t),e.alias&&this.array(e.alias)),(e.number||"number"===e.type)&&(this.number(t),e.alias&&this.number(e.alias)),(e.string||"string"===e.type)&&(this.string(t),e.alias&&this.string(e.alias)),(e.count||"count"===e.type)&&this.count(t),"boolean"==typeof e.global&&this.global(t,e.global),e.defaultDescription&&(Re(this,Ae,"f").defaultDescription[t]=e.defaultDescription),e.skipValidation&&this.skipValidation(t);const i=e.describe||e.description||e.desc,u=Re(this,Ne,"f").getDescriptions();Object.prototype.hasOwnProperty.call(u,t)&&"string"!=typeof i||this.describe(t,i),e.hidden&&this.hide(t),e.requiresArg&&this.requiresArg(t)}return this}options(t,e){return this.option(t,e)}parse(t,e,n){It("[string|array] [function|boolean|object] [function]",[t,e,n],arguments.length),this[Ve](),void 0===t&&(t=Re(this,_e,"f")),"object"==typeof e&&(He(this,je,e,"f"),e=n),"function"==typeof e&&(He(this,Oe,e,"f"),e=!1),e||He(this,_e,t,"f"),Re(this,Oe,"f")&&He(this,pe,!1,"f");const s=this[bn](t,!!e),i=this.parsed;return Re(this,De,"f").setParsed(this.parsed),Mt(s)?s.then(t=>(Re(this,Oe,"f")&&Re(this,Oe,"f").call(this,Re(this,he,"f"),t,Re(this,ve,"f")),t)).catch(t=>{throw Re(this,Oe,"f")&&Re(this,Oe,"f")(t,this.parsed.argv,Re(this,ve,"f")),t}).finally(()=>{this[an](),this.parsed=i}):(Re(this,Oe,"f")&&Re(this,Oe,"f").call(this,Re(this,he,"f"),s,Re(this,ve,"f")),this[an](),this.parsed=i,s)}parseAsync(t,e,n){const s=this.parse(t,e,n);return Mt(s)?s:Promise.resolve(s)}parseSync(t,e,n){const s=this.parse(t,e,n);if(Mt(s))throw new St(".parseSync() must not be used with asynchronous builders, handlers, or middleware");return s}parserConfiguration(t){return It("<object>",[t],arguments.length),He(this,we,t,"f"),this}pkgConf(t,e){It("<string> [string]",[t,e],arguments.length);let n=null;const s=this[tn](e||Re(this,oe,"f"));return s[t]&&"object"==typeof s[t]&&(n=ie(s[t],e||Re(this,oe,"f"),this[Ke]()["deep-merge-config"]||!1,Re(this,Se,"f")),Re(this,Ae,"f").configObjects=(Re(this,Ae,"f").configObjects||[]).concat(n)),this}positional(t,e){It("<string> <object>",[t,e],arguments.length);const n=["default","defaultDescription","implies","normalize","choices","conflicts","coerce","type","describe","desc","description","alias"];e=qt(e,(t,e)=>!("type"===t&&!["string","number","boolean"].includes(e))&&n.includes(t));const s=Re(this,ae,"f").fullCommands[Re(this,ae,"f").fullCommands.length-1],i=s?Re(this,re,"f").cmdToParseOptions(s):{array:[],alias:{},default:{},demand:{}};return _t(i).forEach(n=>{const s=i[n];Array.isArray(s)?-1!==s.indexOf(t)&&(e[n]=!0):s[t]&&!(n in e)&&(e[n]=s[t])}),this.group(t,Re(this,Ne,"f").getPositionalGroupName()),this.option(t,e)}recommendCommands(t=!0){return It("[boolean]",[t],arguments.length),He(this,Me,t,"f"),this}required(t,e,n){return this.demand(t,e,n)}require(t,e,n){return this.demand(t,e,n)}requiresArg(t){return It("<array|string|object> [number]",[t],arguments.length),"string"==typeof t&&Re(this,Ae,"f").narg[t]||this[nn](this.requiresArg.bind(this),"narg",t,NaN),this}showCompletionScript(t,e){return It("[string] [string]",[t,e],arguments.length),t=t||this.$0,Re(this,be,"f").log(Re(this,De,"f").generateCompletionScript(t,e||Re(this,le,"f")||"completion")),this}showHelp(t){if(It("[string|function]",[t],arguments.length),He(this,Ce,!0,"f"),!Re(this,Ne,"f").hasCachedHelpMessage()){if(!this.parsed){const e=this[bn](Re(this,_e,"f"),void 0,void 0,0,!0);if(Mt(e))return e.then(()=>{Re(this,Ne,"f").showHelp(t)}),this}const e=Re(this,re,"f").runDefaultBuilderOn(this);if(Mt(e))return e.then(()=>{Re(this,Ne,"f").showHelp(t)}),this}return Re(this,Ne,"f").showHelp(t),this}scriptName(t){return this.customScriptName=!0,this.$0=t,this}showHelpOnFail(t,e){return It("[boolean|string] [string]",[t,e],arguments.length),Re(this,Ne,"f").showHelpOnFail(t,e),this}showVersion(t){return It("[string|function]",[t],arguments.length),Re(this,Ne,"f").showVersion(t),this}skipValidation(t){return It("<array|string>",[t],arguments.length),this[en]("skipValidation",t),this}strict(t){return It("[boolean]",[t],arguments.length),He(this,$e,!1!==t,"f"),this}strictCommands(t){return It("[boolean]",[t],arguments.length),He(this,Pe,!1!==t,"f"),this}strictOptions(t){return It("[boolean]",[t],arguments.length),He(this,Ie,!1!==t,"f"),this}string(t){return It("<array|string>",[t],arguments.length),this[en]("string",t),this[Bn](t),this}terminalWidth(){return It([],0),Re(this,Se,"f").process.stdColumns}updateLocale(t){return this.updateStrings(t)}updateStrings(t){return It("<object>",[t],arguments.length),He(this,fe,!1,"f"),Re(this,Se,"f").y18n.updateLocale(t),this}usage(t,e,n,s){if(It("<string|null|undefined> [string|boolean] [function|object] [function]",[t,e,n,s],arguments.length),void 0!==e){if(xt(t,null,Re(this,Se,"f")),(t||"").match(/^\$0( |$)/))return this.command(t,e,n,s);throw new St(".usage() description must start with $0 if being used as alias for .command()")}return Re(this,Ne,"f").usage(t),this}usageConfiguration(t){return It("<object>",[t],arguments.length),He(this,We,t,"f"),this}version(t,e,n){const s="version";if(It("[boolean|string] [string] [string]",[t,e,n],arguments.length),Re(this,Le,"f")&&(this[Ge](Re(this,Le,"f")),Re(this,Ne,"f").version(void 0),He(this,Le,null,"f")),0===arguments.length)n=this[Ze](),t=s;else if(1===arguments.length){if(!1===t)return this;n=t,t=s}else 2===arguments.length&&(n=e,e=void 0);return He(this,Le,"string"==typeof t?t:s,"f"),e=e||Re(this,Ne,"f").deferY18nLookup("Show version number"),Re(this,Ne,"f").version(n||void 0),this.boolean(Re(this,Le,"f")),this.describe(Re(this,Le,"f"),e),this}wrap(t){return It("<number|null|undefined>",[t],arguments.length),Re(this,Ne,"f").wrap(t),this}[(re=new WeakMap,oe=new WeakMap,ae=new WeakMap,De=new WeakMap,le=new WeakMap,ce=new WeakMap,he=new WeakMap,fe=new WeakMap,de=new WeakMap,pe=new WeakMap,ge=new WeakMap,Fe=new WeakMap,me=new WeakMap,Ce=new WeakMap,Ee=new WeakMap,ye=new WeakMap,be=new WeakMap,ve=new WeakMap,Ae=new WeakMap,Be=new WeakMap,we=new WeakMap,Oe=new WeakMap,je=new WeakMap,xe=new WeakMap,ke=new WeakMap,_e=new WeakMap,Me=new WeakMap,Se=new WeakMap,$e=new WeakMap,Pe=new WeakMap,Ie=new WeakMap,Ne=new WeakMap,We=new WeakMap,Le=new WeakMap,ze=new WeakMap,Te)](t){if(!t._||!t["--"])return t;t._.push.apply(t._,t["--"]);try{delete t["--"]}catch(t){}return t}[Ue](){return{log:(...t)=>{this[Fn]()||console.log(...t),He(this,Ce,!0,"f"),Re(this,ve,"f").length&&He(this,ve,Re(this,ve,"f")+"\n","f"),He(this,ve,Re(this,ve,"f")+t.join(" "),"f")},error:(...t)=>{this[Fn]()||console.error(...t),He(this,Ce,!0,"f"),Re(this,ve,"f").length&&He(this,ve,Re(this,ve,"f")+"\n","f"),He(this,ve,Re(this,ve,"f")+t.join(" "),"f")}}}[Ge](t){_t(Re(this,Ae,"f")).forEach(e=>{if("configObjects"===e)return;const n=Re(this,Ae,"f")[e];Array.isArray(n)?n.includes(t)&&n.splice(n.indexOf(t),1):"object"==typeof n&&delete n[t]}),delete Re(this,Ne,"f").getDescriptions()[t]}[qe](t,e,n){Re(this,de,"f")[n]||(Re(this,Se,"f").process.emitWarning(t,e),Re(this,de,"f")[n]=!0)}[Ve](){Re(this,ge,"f").push({options:Re(this,Ae,"f"),configObjects:Re(this,Ae,"f").configObjects.slice(0),exitProcess:Re(this,pe,"f"),groups:Re(this,me,"f"),strict:Re(this,$e,"f"),strictCommands:Re(this,Pe,"f"),strictOptions:Re(this,Ie,"f"),completionCommand:Re(this,le,"f"),output:Re(this,ve,"f"),exitError:Re(this,he,"f"),hasOutput:Re(this,Ce,"f"),parsed:this.parsed,parseFn:Re(this,Oe,"f"),parseContext:Re(this,je,"f")}),Re(this,Ne,"f").freeze(),Re(this,ze,"f").freeze(),Re(this,re,"f").freeze(),Re(this,Fe,"f").freeze()}[Ye](){let t,e="";return t=/\b(node|iojs|electron)(\.exe)?$/.test(Re(this,Se,"f").process.argv()[0])?Re(this,Se,"f").process.argv().slice(1,2):Re(this,Se,"f").process.argv().slice(0,1),e=t.map(t=>{const e=this[En](Re(this,oe,"f"),t);return t.match(/^(\/|([a-zA-Z]:)?\\)/)&&e.length<t.length?e:t}).join(" ").trim(),Re(this,Se,"f").getEnv("_")&&Re(this,Se,"f").getProcessArgvBin()===Re(this,Se,"f").getEnv("_")&&(e=Re(this,Se,"f").getEnv("_").replace(`${Re(this,Se,"f").path.dirname(Re(this,Se,"f").process.execPath())}/`,"")),e}[Ke](){return Re(this,we,"f")}[Je](){return Re(this,We,"f")}[Qe](){if(!Re(this,fe,"f"))return;const t=Re(this,Se,"f").getEnv("LC_ALL")||Re(this,Se,"f").getEnv("LC_MESSAGES")||Re(this,Se,"f").getEnv("LANG")||Re(this,Se,"f").getEnv("LANGUAGE")||"en_US";this.locale(t.replace(/[.:].*/,""))}[Ze](){return this[tn]().version||"unknown"}[Xe](t){const e=t["--"]?t["--"]:t._;for(let t,n=0;void 0!==(t=e[n]);n++)Re(this,Se,"f").Parser.looksLikeNumber(t)&&Number.isSafeInteger(Math.floor(parseFloat(`${t}`)))&&(e[n]=Number(t));return t}[tn](t){const e=t||"*";if(Re(this,xe,"f")[e])return Re(this,xe,"f")[e];let n={};try{let e=t||Re(this,Se,"f").mainFilename;Re(this,Se,"f").path.extname(e)&&(e=Re(this,Se,"f").path.dirname(e));const s=Re(this,Se,"f").findUp(e,(t,e)=>e.includes("package.json")?"package.json":void 0);xt(s,void 0,Re(this,Se,"f")),n=JSON.parse(Re(this,Se,"f").readFileSync(s,"utf8"))}catch(t){}return Re(this,xe,"f")[e]=n||{},Re(this,xe,"f")[e]}[en](t,e){(e=[].concat(e)).forEach(e=>{e=this[rn](e),Re(this,Ae,"f")[t].push(e)})}[nn](t,e,n,s){this[un](t,e,n,s,(t,e,n)=>{Re(this,Ae,"f")[t][e]=n})}[sn](t,e,n,s){this[un](t,e,n,s,(t,e,n)=>{Re(this,Ae,"f")[t][e]=(Re(this,Ae,"f")[t][e]||[]).concat(n)})}[un](t,e,n,s,i){if(Array.isArray(n))n.forEach(e=>{t(e,s)});else if((t=>"object"==typeof t)(n))for(const e of _t(n))t(e,n[e]);else i(e,this[rn](n),s)}[rn](t){return"__proto__"===t?"___proto___":t}[on](t,e){return this[nn](this[on].bind(this),"key",t,e),this}[an](){var t,e,n,s,i,u,r,o,a,D,l,c;const h=Re(this,ge,"f").pop();let f;xt(h,void 0,Re(this,Se,"f")),t=this,e=this,n=this,s=this,i=this,u=this,r=this,o=this,a=this,D=this,l=this,c=this,({options:{set value(e){He(t,Ae,e,"f")}}.value,configObjects:f,exitProcess:{set value(t){He(e,pe,t,"f")}}.value,groups:{set value(t){He(n,me,t,"f")}}.value,output:{set value(t){He(s,ve,t,"f")}}.value,exitError:{set value(t){He(i,he,t,"f")}}.value,hasOutput:{set value(t){He(u,Ce,t,"f")}}.value,parsed:this.parsed,strict:{set value(t){He(r,$e,t,"f")}}.value,strictCommands:{set value(t){He(o,Pe,t,"f")}}.value,strictOptions:{set value(t){He(a,Ie,t,"f")}}.value,completionCommand:{set value(t){He(D,le,t,"f")}}.value,parseFn:{set value(t){He(l,Oe,t,"f")}}.value,parseContext:{set value(t){He(c,je,t,"f")}}.value}=h),Re(this,Ae,"f").configObjects=f,Re(this,Ne,"f").unfreeze(),Re(this,ze,"f").unfreeze(),Re(this,re,"f").unfreeze(),Re(this,Fe,"f").unfreeze()}[Dn](t,e){return Ht(e,e=>(t(e),e))}getInternalMethods(){return{getCommandInstance:this[ln].bind(this),getContext:this[cn].bind(this),getHasOutput:this[hn].bind(this),getLoggerInstance:this[fn].bind(this),getParseContext:this[dn].bind(this),getParserConfiguration:this[Ke].bind(this),getUsageConfiguration:this[Je].bind(this),getUsageInstance:this[pn].bind(this),getValidationInstance:this[gn].bind(this),hasParseCallback:this[Fn].bind(this),isGlobalContext:this[mn].bind(this),postProcess:this[Cn].bind(this),reset:this[yn].bind(this),runValidation:this[vn].bind(this),runYargsParserAndExecuteCommands:this[bn].bind(this),setHasOutput:this[An].bind(this)}}[ln](){return Re(this,re,"f")}[cn](){return Re(this,ae,"f")}[hn](){return Re(this,Ce,"f")}[fn](){return Re(this,be,"f")}[dn](){return Re(this,je,"f")||{}}[pn](){return Re(this,Ne,"f")}[gn](){return Re(this,ze,"f")}[Fn](){return!!Re(this,Oe,"f")}[mn](){return Re(this,ye,"f")}[Cn](t,e,n,s){if(n)return t;if(Mt(t))return t;e||(t=this[Te](t));return(this[Ke]()["parse-positional-numbers"]||void 0===this[Ke]()["parse-positional-numbers"])&&(t=this[Xe](t)),s&&(t=zt(t,this,Re(this,Fe,"f").getMiddleware(),!1)),t}[yn](t={}){He(this,Ae,Re(this,Ae,"f")||{},"f");const e={};e.local=Re(this,Ae,"f").local||[],e.configObjects=Re(this,Ae,"f").configObjects||[];const n={};e.local.forEach(e=>{n[e]=!0,(t[e]||[]).forEach(t=>{n[t]=!0})}),Object.assign(Re(this,ke,"f"),Object.keys(Re(this,me,"f")).reduce((t,e)=>{const s=Re(this,me,"f")[e].filter(t=>!(t in n));return s.length>0&&(t[e]=s),t},{})),He(this,me,{},"f");return["array","boolean","string","skipValidation","count","normalize","number","hiddenOptions"].forEach(t=>{e[t]=(Re(this,Ae,"f")[t]||[]).filter(t=>!n[t])}),["narg","key","alias","default","defaultDescription","config","choices","demandedOptions","demandedCommands","deprecatedOptions"].forEach(t=>{e[t]=qt(Re(this,Ae,"f")[t],t=>!n[t])}),e.envPrefix=Re(this,Ae,"f").envPrefix,He(this,Ae,e,"f"),He(this,Ne,Re(this,Ne,"f")?Re(this,Ne,"f").reset(n):Kt(this,Re(this,Se,"f")),"f"),He(this,ze,Re(this,ze,"f")?Re(this,ze,"f").reset(n):function(t,e,n){const s=n.y18n.__,i=n.y18n.__n,u={nonOptionCount:function(n){const s=t.getDemandedCommands(),u=n._.length+(n["--"]?n["--"].length:0)-t.getInternalMethods().getContext().commands.length;s._&&(u<s._.min||u>s._.max)&&(u<s._.min?void 0!==s._.minMsg?e.fail(s._.minMsg?s._.minMsg.replace(/\$0/g,u.toString()).replace(/\$1/,s._.min.toString()):null):e.fail(i("Not enough non-option arguments: got %s, need at least %s","Not enough non-option arguments: got %s, need at least %s",u,u.toString(),s._.min.toString())):u>s._.max&&(void 0!==s._.maxMsg?e.fail(s._.maxMsg?s._.maxMsg.replace(/\$0/g,u.toString()).replace(/\$1/,s._.max.toString()):null):e.fail(i("Too many non-option arguments: got %s, maximum of %s","Too many non-option arguments: got %s, maximum of %s",u,u.toString(),s._.max.toString()))))},positionalCount:function(t,n){n<t&&e.fail(i("Not enough non-option arguments: got %s, need at least %s","Not enough non-option arguments: got %s, need at least %s",n,n+"",t+""))},requiredArguments:function(t,n){let s=null;for(const e of Object.keys(n))Object.prototype.hasOwnProperty.call(t,e)&&void 0!==t[e]||(s=s||{},s[e]=n[e]);if(s){const t=[];for(const e of Object.keys(s)){const n=s[e];n&&t.indexOf(n)<0&&t.push(n)}const n=t.length?`\n${t.join("\n")}`:"";e.fail(i("Missing required argument: %s","Missing required arguments: %s",Object.keys(s).length,Object.keys(s).join(", ")+n))}},unknownArguments:function(n,s,r,o,a=!0){var D;const l=t.getInternalMethods().getCommandInstance().getCommands(),c=[],h=t.getInternalMethods().getContext();if(Object.keys(n).forEach(e=>{ee.includes(e)||Object.prototype.hasOwnProperty.call(r,e)||Object.prototype.hasOwnProperty.call(t.getInternalMethods().getParseContext(),e)||u.isValidAndSomeAliasIsNotNew(e,s)||c.push(e)}),a&&(h.commands.length>0||l.length>0||o)&&n._.slice(h.commands.length).forEach(t=>{l.includes(""+t)||c.push(""+t)}),a){const e=(null===(D=t.getDemandedCommands()._)||void 0===D?void 0:D.max)||0,s=h.commands.length+e;s<n._.length&&n._.slice(s).forEach(t=>{t=String(t),h.commands.includes(t)||c.includes(t)||c.push(t)})}c.length&&e.fail(i("Unknown argument: %s","Unknown arguments: %s",c.length,c.map(t=>t.trim()?t:`"${t}"`).join(", ")))},unknownCommands:function(n){const s=t.getInternalMethods().getCommandInstance().getCommands(),u=[],r=t.getInternalMethods().getContext();return(r.commands.length>0||s.length>0)&&n._.slice(r.commands.length).forEach(t=>{s.includes(""+t)||u.push(""+t)}),u.length>0&&(e.fail(i("Unknown command: %s","Unknown commands: %s",u.length,u.join(", "))),!0)},isValidAndSomeAliasIsNotNew:function(e,n){if(!Object.prototype.hasOwnProperty.call(n,e))return!1;const s=t.parsed.newAliases;return[e,...n[e]].some(t=>!Object.prototype.hasOwnProperty.call(s,t)||!s[e])},limitedChoices:function(n){const i=t.getOptions(),u={};if(!Object.keys(i.choices).length)return;Object.keys(n).forEach(t=>{-1===ee.indexOf(t)&&Object.prototype.hasOwnProperty.call(i.choices,t)&&[].concat(n[t]).forEach(e=>{-1===i.choices[t].indexOf(e)&&void 0!==e&&(u[t]=(u[t]||[]).concat(e))})});const r=Object.keys(u);if(!r.length)return;let o=s("Invalid values:");r.forEach(t=>{o+=`\n ${s("Argument: %s, Given: %s, Choices: %s",t,e.stringifiedValues(u[t]),e.stringifiedValues(i.choices[t]))}`}),e.fail(o)}};let r={};function o(t,e){const n=Number(e);return"number"==typeof(e=isNaN(n)?e:n)?e=t._.length>=e:e.match(/^--no-.+/)?(e=e.match(/^--no-(.+)/)[1],e=!Object.prototype.hasOwnProperty.call(t,e)):e=Object.prototype.hasOwnProperty.call(t,e),e}u.implies=function(e,s){It("<string|object> [array|number|string]",[e,s],arguments.length),"object"==typeof e?Object.keys(e).forEach(t=>{u.implies(t,e[t])}):(t.global(e),r[e]||(r[e]=[]),Array.isArray(s)?s.forEach(t=>u.implies(e,t)):(xt(s,void 0,n),r[e].push(s)))},u.getImplied=function(){return r},u.implications=function(t){const n=[];if(Object.keys(r).forEach(e=>{const s=e;(r[e]||[]).forEach(e=>{let i=s;const u=e;i=o(t,i),e=o(t,e),i&&!e&&n.push(` ${s} -> ${u}`)})}),n.length){let t=`${s("Implications failed:")}\n`;n.forEach(e=>{t+=e}),e.fail(t)}};let a={};u.conflicts=function(e,n){It("<string|object> [array|string]",[e,n],arguments.length),"object"==typeof e?Object.keys(e).forEach(t=>{u.conflicts(t,e[t])}):(t.global(e),a[e]||(a[e]=[]),Array.isArray(n)?n.forEach(t=>u.conflicts(e,t)):a[e].push(n))},u.getConflicting=()=>a,u.conflicting=function(i){Object.keys(i).forEach(t=>{a[t]&&a[t].forEach(n=>{n&&void 0!==i[t]&&void 0!==i[n]&&e.fail(s("Arguments %s and %s are mutually exclusive",t,n))})}),t.getInternalMethods().getParserConfiguration()["strip-dashed"]&&Object.keys(a).forEach(t=>{a[t].forEach(u=>{u&&void 0!==i[n.Parser.camelCase(t)]&&void 0!==i[n.Parser.camelCase(u)]&&e.fail(s("Arguments %s and %s are mutually exclusive",t,u))})})},u.recommendCommands=function(t,n){n=n.sort((t,e)=>e.length-t.length);let i=null,u=1/0;for(let e,s=0;void 0!==(e=n[s]);s++){const n=te(t,e);n<=3&&n<u&&(u=n,i=e)}i&&e.fail(s("Did you mean %s?",i))},u.reset=function(t){return r=qt(r,e=>!t[e]),a=qt(a,e=>!t[e]),u};const D=[];return u.freeze=function(){D.push({implied:r,conflicting:a})},u.unfreeze=function(){const t=D.pop();xt(t,void 0,n),({implied:r,conflicting:a}=t)},u}(this,Re(this,Ne,"f"),Re(this,Se,"f")),"f"),He(this,re,Re(this,re,"f")?Re(this,re,"f").reset():function(t,e,n,s){return new Tt(t,e,n,s)}(Re(this,Ne,"f"),Re(this,ze,"f"),Re(this,Fe,"f"),Re(this,Se,"f")),"f"),Re(this,De,"f")||He(this,De,function(t,e,n,s){return new Xt(t,e,n,s)}(this,Re(this,Ne,"f"),Re(this,re,"f"),Re(this,Se,"f")),"f"),Re(this,Fe,"f").reset(),He(this,le,null,"f"),He(this,ve,"","f"),He(this,he,null,"f"),He(this,Ce,!1,"f"),this.parsed=!1,this}[En](t,e){return Re(this,Se,"f").path.relative(t,e)}[bn](t,e,n,s=0,i=!1){var u,r,o,a;let D=!!n||i;t=t||Re(this,_e,"f"),Re(this,Ae,"f").__=Re(this,Se,"f").y18n.__,Re(this,Ae,"f").configuration=this[Ke]();const l=!!Re(this,Ae,"f").configuration["populate--"],c=Object.assign({},Re(this,Ae,"f").configuration,{"populate--":!0}),h=Re(this,Se,"f").Parser.detailed(t,Object.assign({},Re(this,Ae,"f"),{configuration:{"parse-positional-numbers":!1,...c}})),f=Object.assign(h.argv,Re(this,je,"f"));let d;const p=h.aliases;let g=!1,F=!1;Object.keys(f).forEach(t=>{t===Re(this,Ee,"f")&&f[t]?g=!0:t===Re(this,Le,"f")&&f[t]&&(F=!0)}),f.$0=this.$0,this.parsed=h,0===s&&Re(this,Ne,"f").clearCachedHelpMessage();try{if(this[Qe](),e)return this[Cn](f,l,!!n,!1);if(Re(this,Ee,"f")){[Re(this,Ee,"f")].concat(p[Re(this,Ee,"f")]||[]).filter(t=>t.length>1).includes(""+f._[f._.length-1])&&(f._.pop(),g=!0)}He(this,ye,!1,"f");const c=Re(this,re,"f").getCommands(),m=!!(null===(u=Re(this,De,"f"))||void 0===u?void 0:u.completionKey)&&[null===(r=Re(this,De,"f"))||void 0===r?void 0:r.completionKey,...null!==(a=this.getAliases()[null===(o=Re(this,De,"f"))||void 0===o?void 0:o.completionKey])&&void 0!==a?a:[]].some(t=>Object.prototype.hasOwnProperty.call(f,t)),C=g||m||i;if(f._.length){if(c.length){let t;for(let e,u=s||0;void 0!==f._[u];u++){if(e=String(f._[u]),c.includes(e)&&e!==Re(this,le,"f")){const t=Re(this,re,"f").runCommand(e,this,h,u+1,i,g||F||i);return this[Cn](t,l,!!n,!1)}if(!t&&e!==Re(this,le,"f")){t=e;break}}!Re(this,re,"f").hasDefaultCommand()&&Re(this,Me,"f")&&t&&!C&&Re(this,ze,"f").recommendCommands(t,c)}Re(this,le,"f")&&f._.includes(Re(this,le,"f"))&&!m&&(Re(this,pe,"f")&&Vt(!0),this.showCompletionScript(),this.exit(0))}if(Re(this,re,"f").hasDefaultCommand()&&!C){const t=Re(this,re,"f").runCommand(null,this,h,0,i,g||F||i);return this[Cn](t,l,!!n,!1)}if(m){Re(this,pe,"f")&&Vt(!0);const e=(t=[].concat(t)).slice(t.indexOf(`--${Re(this,De,"f").completionKey}`)+1);return Re(this,De,"f").getCompletion(e,(t,e)=>{if(t)throw new St(t.message);(e||[]).forEach(t=>{Re(this,be,"f").log(t)}),this.exit(0)}),this[Cn](f,!l,!!n,!1)}if(Re(this,Ce,"f")||(g?(Re(this,pe,"f")&&Vt(!0),D=!0,this.showHelp(t=>{Re(this,be,"f").log(t),this.exit(0)})):F&&(Re(this,pe,"f")&&Vt(!0),D=!0,Re(this,Ne,"f").showVersion("log"),this.exit(0))),!D&&Re(this,Ae,"f").skipValidation.length>0&&(D=Object.keys(f).some(t=>Re(this,Ae,"f").skipValidation.indexOf(t)>=0&&!0===f[t])),!D){if(h.error)throw new St(h.error.message);if(!m){const t=this[vn](p,{},h.error);n||(d=zt(f,this,Re(this,Fe,"f").getMiddleware(),!0)),d=this[Dn](t,null!=d?d:f),Mt(d)&&!n&&(d=d.then(()=>zt(f,this,Re(this,Fe,"f").getMiddleware(),!1)))}}}catch(t){if(!(t instanceof St))throw t;Re(this,Ne,"f").fail(t.message,t)}return this[Cn](null!=d?d:f,l,!!n,!0)}[vn](t,e,n,s){const i={...this.getDemandedOptions()};return u=>{if(n)throw new St(n.message);Re(this,ze,"f").nonOptionCount(u),Re(this,ze,"f").requiredArguments(u,i);let r=!1;Re(this,Pe,"f")&&(r=Re(this,ze,"f").unknownCommands(u)),Re(this,$e,"f")&&!r?Re(this,ze,"f").unknownArguments(u,t,e,!!s):Re(this,Ie,"f")&&Re(this,ze,"f").unknownArguments(u,t,{},!1,!1),Re(this,ze,"f").limitedChoices(u),Re(this,ze,"f").implications(u),Re(this,ze,"f").conflicting(u)}}[An](){He(this,Ce,!0,"f")}[Bn](t){if("string"==typeof t)Re(this,Ae,"f").key[t]=!0;else for(const e of t)Re(this,Ae,"f").key[e]=!0}}const On=(jn=jt,(t=[],e=jn.process.cwd(),n)=>{const s=new wn(t,e,n,jn);return Object.defineProperty(s,"argv",{get:()=>s.parse(),enumerable:!0}),s.help(),s.version(),s});var jn;const xn=await On(function(t){return t.slice(Ft()+1)}(f.argv)).config(y()).option("issue-number",{alias:"i",description:"GitHub issue number to process",type:"number",demandOption:!0}).option("planning-model",{alias:"m",description:"LLM for planning code changes. Must use llmlite format: provider/model (e.g., openai/gpt-4.1, azure/gpt-4.1, gemini/gemini-2.5-pro, anthropic/claude-4-sonnet-latest, bedrock/us.anthropic.claude-sonnet-4-20250514-v1:0, vertex/gemini-2.5-pro, xai/grok-4)",type:"string"}).option("two-staged-planning",{alias:"p",description:"Enable two-staged planning: first select relevant files, then generate detailed implementation plans (increases LLM cost but improves code quality)",type:"boolean",default:!0}).option("reasoning-effort",{alias:"e",description:"Constrains effort on reasoning for planning models. Supported values are low, medium, and high.",type:"string",choices:["low","medium","high"]}).option("coding-tool",{alias:"c",description:"Coding tool to use for making changes",type:"string",choices:["aider","claude-code","codex-cli","gemini-cli"],default:b}).option("aider-extra-args",{alias:"a",description:'Additional arguments to pass to Aider ("--yes-always --no-check-update --no-show-release-notes" is always applied)',type:"string",default:v}).option("claude-code-extra-args",{description:'Additional arguments to pass to Claude Code ("--dangerously-skip-permissions" is always applied, "--print" is applied only in CI)',type:"string",default:A}).option("codex-extra-args",{description:"Additional arguments to pass to Codex CLI (nothing is always applied)",type:"string",default:B}).option("gemini-extra-args",{description:'Additional arguments to pass to Gemini CLI ("--yolo" is always applied)',type:"string",default:w}).option("repomix-extra-args",{alias:"r",description:"Additional arguments for repomix when generating context",type:"string",default:O}).option("test-command",{alias:"t",description:"Command to run after the coding tool applies changes. If it fails, the assistant will try to fix it.",type:"string"}).option("max-test-attempts",{description:"Maximum number of attempts to fix test failures",type:"number",default:j}).option("dry-run",{alias:"d",description:"Run without making actual changes (no branch creation, no PR)",type:"boolean",default:!1}).option("remove-pattern",{description:"RegExp pattern to remove from issue and PR descriptions",type:"string"}).option("no-branch",{alias:"n",description:"Do not create a new branch, commit changes directly to the base branch",type:"boolean",default:!1}).option("node-runtime",{description:"Node.js runtime to use for running tools",type:"string",choices:["node","bun","npx","bunx"],default:x}).option("working-dir",{alias:"w",description:"Working directory path for commands",type:"string"}).version(function(){let e=import.meta.dir||u.dirname(new URL(import.meta.url).pathname);for(;!t.existsSync(u.join(e,"package.json"));)e=u.dirname(e);return JSON.parse(t.readFileSync(u.join(e,"package.json"),"utf8")).version}()).help().argv;xn["working-dir"]&&(f.chdir(xn["working-dir"]),console.info(`Changed working directory to: ${f.cwd()}`));const kn=k(xn["node-runtime"]);await _({aiderExtraArgs:xn["aider-extra-args"],claudeCodeExtraArgs:xn["claude-code-extra-args"],codexExtraArgs:xn["codex-extra-args"],geminiExtraArgs:xn["gemini-extra-args"],codingTool:xn["coding-tool"],dryRun:xn["dry-run"],noBranch:xn["no-branch"],nodeRuntime:kn,twoStagePlanning:xn["two-staged-planning"],issueNumber:xn["issue-number"],maxTestAttempts:xn["max-test-attempts"],planningModel:xn["planning-model"],reasoningEffort:xn["reasoning-effort"],repomixExtraArgs:xn["repomix-extra-args"],testCommand:xn["test-command"],removePattern:xn["remove-pattern"]});
33
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9ub2RlX21vZHVsZXMvY2xpdWkvYnVpbGQvbGliL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3N0cmlwLWFuc2kvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvYW5zaS1yZWdleC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9nZXQtZWFzdC1hc2lhbi13aWR0aC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9nZXQtZWFzdC1hc2lhbi13aWR0aC9sb29rdXAuanMiLCIuLi9ub2RlX21vZHVsZXMvZW1vamktcmVnZXgvaW5kZXgubWpzIiwiLi4vbm9kZV9tb2R1bGVzL3N0cmluZy13aWR0aC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy93cmFwLWFuc2kvbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dyYXAtYW5zaS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy1wYXJzZXIvYnVpbGQvbGliL3N0cmluZy11dGlscy5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy1wYXJzZXIvYnVpbGQvbGliL3lhcmdzLXBhcnNlci10eXBlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy1wYXJzZXIvYnVpbGQvbGliL3lhcmdzLXBhcnNlci5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy1wYXJzZXIvYnVpbGQvbGliL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzLXBhcnNlci9idWlsZC9saWIvdG9rZW5pemUtYXJnLXN0cmluZy5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvdXRpbHMvcHJvY2Vzcy1hcmd2LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3kxOG4vYnVpbGQvbGliL3BsYXRmb3JtLXNoaW1zL25vZGUuanMiLCIuLi9ub2RlX21vZHVsZXMveTE4bi9idWlsZC9saWIvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvZ2V0LWNhbGxlci1maWxlL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2xpYi9wbGF0Zm9ybS1zaGltcy9lc20ubWpzIiwiLi4vbm9kZV9tb2R1bGVzL3kxOG4vaW5kZXgubWpzIiwiLi4vbm9kZV9tb2R1bGVzL2NsaXVpL2luZGV4Lm1qcyIsIi4uL25vZGVfbW9kdWxlcy9lc2NhbGFkZS9zeW5jL2luZGV4Lm1qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvdHlwaW5ncy9jb21tb24tdHlwZXMuanMiLCIuLi9ub2RlX21vZHVsZXMveWFyZ3MvYnVpbGQvbGliL3V0aWxzL2lzLXByb21pc2UuanMiLCIuLi9ub2RlX21vZHVsZXMveWFyZ3MvYnVpbGQvbGliL3llcnJvci5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvcGFyc2UtY29tbWFuZC5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvYXJnc2VydC5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvbWlkZGxld2FyZS5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvdXRpbHMvbWF5YmUtYXN5bmMtcmVzdWx0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2xpYi9jb21tYW5kLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2xpYi95YXJncy1mYWN0b3J5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2xpYi91dGlscy9vYmotZmlsdGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2xpYi91dGlscy9zZXQtYmxvY2tpbmcuanMiLCIuLi9ub2RlX21vZHVsZXMveWFyZ3MvYnVpbGQvbGliL3VzYWdlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2xpYi9jb21wbGV0aW9uLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2xpYi9jb21wbGV0aW9uLXRlbXBsYXRlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvdXRpbHMvbGV2ZW5zaHRlaW4uanMiLCIuLi9ub2RlX21vZHVsZXMveWFyZ3MvYnVpbGQvbGliL3ZhbGlkYXRpb24uanMiLCIuLi9ub2RlX21vZHVsZXMveWFyZ3MvYnVpbGQvbGliL3V0aWxzL2FwcGx5LWV4dGVuZHMuanMiLCIuLi9ub2RlX21vZHVsZXMveWFyZ3MvaW5kZXgubWpzIiwiLi4vc3JjL2NsaS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5jb25zdCBhbGlnbiA9IHtcbiAgICByaWdodDogYWxpZ25SaWdodCxcbiAgICBjZW50ZXI6IGFsaWduQ2VudGVyXG59O1xuY29uc3QgdG9wID0gMDtcbmNvbnN0IHJpZ2h0ID0gMTtcbmNvbnN0IGJvdHRvbSA9IDI7XG5jb25zdCBsZWZ0ID0gMztcbmV4cG9ydCBjbGFzcyBVSSB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMud2lkdGggPSBvcHRzLndpZHRoO1xuICAgICAgICB0aGlzLndyYXAgPSAoX2EgPSBvcHRzLndyYXApICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRydWU7XG4gICAgICAgIHRoaXMucm93cyA9IFtdO1xuICAgIH1cbiAgICBzcGFuKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgY29scyA9IHRoaXMuZGl2KC4uLmFyZ3MpO1xuICAgICAgICBjb2xzLnNwYW4gPSB0cnVlO1xuICAgIH1cbiAgICByZXNldE91dHB1dCgpIHtcbiAgICAgICAgdGhpcy5yb3dzID0gW107XG4gICAgfVxuICAgIGRpdiguLi5hcmdzKSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5kaXYoJycpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLndyYXAgJiYgdGhpcy5zaG91bGRBcHBseUxheW91dERTTCguLi5hcmdzKSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGx5TGF5b3V0RFNMKGFyZ3NbMF0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbHMgPSBhcmdzLm1hcChhcmcgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sRnJvbVN0cmluZyhhcmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucm93cy5wdXNoKGNvbHMpO1xuICAgICAgICByZXR1cm4gY29scztcbiAgICB9XG4gICAgc2hvdWxkQXBwbHlMYXlvdXREU0woLi4uYXJncykge1xuICAgICAgICByZXR1cm4gYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAvW1xcdFxcbl0vLnRlc3QoYXJnc1swXSk7XG4gICAgfVxuICAgIGFwcGx5TGF5b3V0RFNMKHN0cikge1xuICAgICAgICBjb25zdCByb3dzID0gc3RyLnNwbGl0KCdcXG4nKS5tYXAocm93ID0+IHJvdy5zcGxpdCgnXFx0JykpO1xuICAgICAgICBsZXQgbGVmdENvbHVtbldpZHRoID0gMDtcbiAgICAgICAgLy8gc2ltcGxlIGhldXJpc3RpYyBmb3IgbGF5b3V0LCBtYWtlIHN1cmUgdGhlXG4gICAgICAgIC8vIHNlY29uZCBjb2x1bW4gbGluZXMgdXAgYWxvbmcgdGhlIGxlZnQtaGFuZC5cbiAgICAgICAgLy8gZG9uJ3QgYWxsb3cgdGhlIGZpcnN0IGNvbHVtbiB0byB0YWtlIHVwIG1vcmVcbiAgICAgICAgLy8gdGhhbiA1MCUgb2YgdGhlIHNjcmVlbi5cbiAgICAgICAgcm93cy5mb3JFYWNoKGNvbHVtbnMgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbHVtbnMubGVuZ3RoID4gMSAmJiBtaXhpbi5zdHJpbmdXaWR0aChjb2x1bW5zWzBdKSA+IGxlZnRDb2x1bW5XaWR0aCkge1xuICAgICAgICAgICAgICAgIGxlZnRDb2x1bW5XaWR0aCA9IE1hdGgubWluKE1hdGguZmxvb3IodGhpcy53aWR0aCAqIDAuNSksIG1peGluLnN0cmluZ1dpZHRoKGNvbHVtbnNbMF0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGdlbmVyYXRlIGEgdGFibGU6XG4gICAgICAgIC8vICByZXBsYWNpbmcgJyAnIHdpdGggcGFkZGluZyBjYWxjdWxhdGlvbnMuXG4gICAgICAgIC8vICB1c2luZyB0aGUgYWxnb3JpdGhtaWNhbGx5IGdlbmVyYXRlZCB3aWR0aC5cbiAgICAgICAgcm93cy5mb3JFYWNoKGNvbHVtbnMgPT4ge1xuICAgICAgICAgICAgdGhpcy5kaXYoLi4uY29sdW1ucy5tYXAoKHIsIGkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiByLnRyaW0oKSxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogdGhpcy5tZWFzdXJlUGFkZGluZyhyKSxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IChpID09PSAwICYmIGNvbHVtbnMubGVuZ3RoID4gMSkgPyBsZWZ0Q29sdW1uV2lkdGggOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93c1t0aGlzLnJvd3MubGVuZ3RoIC0gMV07XG4gICAgfVxuICAgIGNvbEZyb21TdHJpbmcodGV4dCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIHBhZGRpbmc6IHRoaXMubWVhc3VyZVBhZGRpbmcodGV4dClcbiAgICAgICAgfTtcbiAgICB9XG4gICAgbWVhc3VyZVBhZGRpbmcoc3RyKSB7XG4gICAgICAgIC8vIG1lYXN1cmUgcGFkZGluZyB3aXRob3V0IGFuc2kgZXNjYXBlIGNvZGVzXG4gICAgICAgIGNvbnN0IG5vQW5zaSA9IG1peGluLnN0cmlwQW5zaShzdHIpO1xuICAgICAgICByZXR1cm4gWzAsIG5vQW5zaS5tYXRjaCgvXFxzKiQvKVswXS5sZW5ndGgsIDAsIG5vQW5zaS5tYXRjaCgvXlxccyovKVswXS5sZW5ndGhdO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgY29uc3QgbGluZXMgPSBbXTtcbiAgICAgICAgdGhpcy5yb3dzLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIHRoaXMucm93VG9TdHJpbmcocm93LCBsaW5lcyk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBkb24ndCBkaXNwbGF5IGFueSBsaW5lcyB3aXRoIHRoZVxuICAgICAgICAvLyBoaWRkZW4gZmxhZyBzZXQuXG4gICAgICAgIHJldHVybiBsaW5lc1xuICAgICAgICAgICAgLmZpbHRlcihsaW5lID0+ICFsaW5lLmhpZGRlbilcbiAgICAgICAgICAgIC5tYXAobGluZSA9PiBsaW5lLnRleHQpXG4gICAgICAgICAgICAuam9pbignXFxuJyk7XG4gICAgfVxuICAgIHJvd1RvU3RyaW5nKHJvdywgbGluZXMpIHtcbiAgICAgICAgdGhpcy5yYXN0ZXJpemUocm93KS5mb3JFYWNoKChycm93LCByKSA9PiB7XG4gICAgICAgICAgICBsZXQgc3RyID0gJyc7XG4gICAgICAgICAgICBycm93LmZvckVhY2goKGNvbCwgYykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgd2lkdGggfSA9IHJvd1tjXTsgLy8gdGhlIHdpZHRoIHdpdGggcGFkZGluZy5cbiAgICAgICAgICAgICAgICBjb25zdCB3cmFwV2lkdGggPSB0aGlzLm5lZ2F0ZVBhZGRpbmcocm93W2NdKTsgLy8gdGhlIHdpZHRoIHdpdGhvdXQgcGFkZGluZy5cbiAgICAgICAgICAgICAgICBsZXQgdHMgPSBjb2w7IC8vIHRlbXBvcmFyeSBzdHJpbmcgdXNlZCBkdXJpbmcgYWxpZ25tZW50L3BhZGRpbmcuXG4gICAgICAgICAgICAgICAgaWYgKHdyYXBXaWR0aCA+IG1peGluLnN0cmluZ1dpZHRoKGNvbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHMgKz0gJyAnLnJlcGVhdCh3cmFwV2lkdGggLSBtaXhpbi5zdHJpbmdXaWR0aChjb2wpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gYWxpZ24gdGhlIHN0cmluZyB3aXRoaW4gaXRzIGNvbHVtbi5cbiAgICAgICAgICAgICAgICBpZiAocm93W2NdLmFsaWduICYmIHJvd1tjXS5hbGlnbiAhPT0gJ2xlZnQnICYmIHRoaXMud3JhcCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmbiA9IGFsaWduW3Jvd1tjXS5hbGlnbl07XG4gICAgICAgICAgICAgICAgICAgIHRzID0gZm4odHMsIHdyYXBXaWR0aCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtaXhpbi5zdHJpbmdXaWR0aCh0cykgPCB3cmFwV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRzICs9ICcgJy5yZXBlYXQoKHdpZHRoIHx8IDApIC0gbWl4aW4uc3RyaW5nV2lkdGgodHMpIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gYXBwbHkgYm9yZGVyIGFuZCBwYWRkaW5nIHRvIHN0cmluZy5cbiAgICAgICAgICAgICAgICBjb25zdCBwYWRkaW5nID0gcm93W2NdLnBhZGRpbmcgfHwgWzAsIDAsIDAsIDBdO1xuICAgICAgICAgICAgICAgIGlmIChwYWRkaW5nW2xlZnRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciArPSAnICcucmVwZWF0KHBhZGRpbmdbbGVmdF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdHIgKz0gYWRkQm9yZGVyKHJvd1tjXSwgdHMsICd8ICcpO1xuICAgICAgICAgICAgICAgIHN0ciArPSB0cztcbiAgICAgICAgICAgICAgICBzdHIgKz0gYWRkQm9yZGVyKHJvd1tjXSwgdHMsICcgfCcpO1xuICAgICAgICAgICAgICAgIGlmIChwYWRkaW5nW3JpZ2h0XSkge1xuICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJyAnLnJlcGVhdChwYWRkaW5nW3JpZ2h0XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGlmIHByaW9yIHJvdyBpcyBzcGFuLCB0cnkgdG8gcmVuZGVyIHRoZVxuICAgICAgICAgICAgICAgIC8vIGN1cnJlbnQgcm93IG9uIHRoZSBwcmlvciBsaW5lLlxuICAgICAgICAgICAgICAgIGlmIChyID09PSAwICYmIGxpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gdGhpcy5yZW5kZXJJbmxpbmUoc3RyLCBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZS5cbiAgICAgICAgICAgIGxpbmVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHRleHQ6IHN0ci5yZXBsYWNlKC8gKyQvLCAnJyksXG4gICAgICAgICAgICAgICAgc3Bhbjogcm93LnNwYW5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGxpbmVzO1xuICAgIH1cbiAgICAvLyBpZiB0aGUgZnVsbCAnc291cmNlJyBjYW4gcmVuZGVyIGluXG4gICAgLy8gdGhlIHRhcmdldCBsaW5lLCBkbyBzby5cbiAgICByZW5kZXJJbmxpbmUoc291cmNlLCBwcmV2aW91c0xpbmUpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBzb3VyY2UubWF0Y2goL14gKi8pO1xuICAgICAgICBjb25zdCBsZWFkaW5nV2hpdGVzcGFjZSA9IG1hdGNoID8gbWF0Y2hbMF0ubGVuZ3RoIDogMDtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gcHJldmlvdXNMaW5lLnRleHQ7XG4gICAgICAgIGNvbnN0IHRhcmdldFRleHRXaWR0aCA9IG1peGluLnN0cmluZ1dpZHRoKHRhcmdldC50cmltUmlnaHQoKSk7XG4gICAgICAgIGlmICghcHJldmlvdXNMaW5lLnNwYW4pIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgd2UncmUgbm90IGFwcGx5aW5nIHdyYXBwaW5nIGxvZ2ljLFxuICAgICAgICAvLyBqdXN0IGFsd2F5cyBhcHBlbmQgdG8gdGhlIHNwYW4uXG4gICAgICAgIGlmICghdGhpcy53cmFwKSB7XG4gICAgICAgICAgICBwcmV2aW91c0xpbmUuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQgKyBzb3VyY2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxlYWRpbmdXaGl0ZXNwYWNlIDwgdGFyZ2V0VGV4dFdpZHRoKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlO1xuICAgICAgICB9XG4gICAgICAgIHByZXZpb3VzTGluZS5oaWRkZW4gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGFyZ2V0LnRyaW1SaWdodCgpICsgJyAnLnJlcGVhdChsZWFkaW5nV2hpdGVzcGFjZSAtIHRhcmdldFRleHRXaWR0aCkgKyBzb3VyY2UudHJpbUxlZnQoKTtcbiAgICB9XG4gICAgcmFzdGVyaXplKHJvdykge1xuICAgICAgICBjb25zdCBycm93cyA9IFtdO1xuICAgICAgICBjb25zdCB3aWR0aHMgPSB0aGlzLmNvbHVtbldpZHRocyhyb3cpO1xuICAgICAgICBsZXQgd3JhcHBlZDtcbiAgICAgICAgLy8gd29yZCB3cmFwIGFsbCBjb2x1bW5zLCBhbmQgY3JlYXRlXG4gICAgICAgIC8vIGEgZGF0YS1zdHJ1Y3R1cmUgdGhhdCBpcyBlYXN5IHRvIHJhc3Rlcml6ZS5cbiAgICAgICAgcm93LmZvckVhY2goKGNvbCwgYykgPT4ge1xuICAgICAgICAgICAgLy8gbGVhdmUgcm9vbSBmb3IgbGVmdCBhbmQgcmlnaHQgcGFkZGluZy5cbiAgICAgICAgICAgIGNvbC53aWR0aCA9IHdpZHRoc1tjXTtcbiAgICAgICAgICAgIGlmICh0aGlzLndyYXApIHtcbiAgICAgICAgICAgICAgICB3cmFwcGVkID0gbWl4aW4ud3JhcChjb2wudGV4dCwgdGhpcy5uZWdhdGVQYWRkaW5nKGNvbCksIHsgaGFyZDogdHJ1ZSB9KS5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB3cmFwcGVkID0gY29sLnRleHQuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbC5ib3JkZXIpIHtcbiAgICAgICAgICAgICAgICB3cmFwcGVkLnVuc2hpZnQoJy4nICsgJy0nLnJlcGVhdCh0aGlzLm5lZ2F0ZVBhZGRpbmcoY29sKSArIDIpICsgJy4nKTtcbiAgICAgICAgICAgICAgICB3cmFwcGVkLnB1c2goXCInXCIgKyAnLScucmVwZWF0KHRoaXMubmVnYXRlUGFkZGluZyhjb2wpICsgMikgKyBcIidcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhZGQgdG9wIGFuZCBib3R0b20gcGFkZGluZy5cbiAgICAgICAgICAgIGlmIChjb2wucGFkZGluZykge1xuICAgICAgICAgICAgICAgIHdyYXBwZWQudW5zaGlmdCguLi5uZXcgQXJyYXkoY29sLnBhZGRpbmdbdG9wXSB8fCAwKS5maWxsKCcnKSk7XG4gICAgICAgICAgICAgICAgd3JhcHBlZC5wdXNoKC4uLm5ldyBBcnJheShjb2wucGFkZGluZ1tib3R0b21dIHx8IDApLmZpbGwoJycpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdyYXBwZWQuZm9yRWFjaCgoc3RyLCByKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFycm93c1tyXSkge1xuICAgICAgICAgICAgICAgICAgICBycm93cy5wdXNoKFtdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcnJvdyA9IHJyb3dzW3JdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYzsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChycm93W2ldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJyb3cucHVzaCgnJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcnJvdy5wdXNoKHN0cik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBycm93cztcbiAgICB9XG4gICAgbmVnYXRlUGFkZGluZyhjb2wpIHtcbiAgICAgICAgbGV0IHdyYXBXaWR0aCA9IGNvbC53aWR0aCB8fCAwO1xuICAgICAgICBpZiAoY29sLnBhZGRpbmcpIHtcbiAgICAgICAgICAgIHdyYXBXaWR0aCAtPSAoY29sLnBhZGRpbmdbbGVmdF0gfHwgMCkgKyAoY29sLnBhZGRpbmdbcmlnaHRdIHx8IDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2wuYm9yZGVyKSB7XG4gICAgICAgICAgICB3cmFwV2lkdGggLT0gNDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd3JhcFdpZHRoO1xuICAgIH1cbiAgICBjb2x1bW5XaWR0aHMocm93KSB7XG4gICAgICAgIGlmICghdGhpcy53cmFwKSB7XG4gICAgICAgICAgICByZXR1cm4gcm93Lm1hcChjb2wgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2wud2lkdGggfHwgbWl4aW4uc3RyaW5nV2lkdGgoY29sLnRleHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHVuc2V0ID0gcm93Lmxlbmd0aDtcbiAgICAgICAgbGV0IHJlbWFpbmluZ1dpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgICAgLy8gY29sdW1uIHdpZHRocyBjYW4gYmUgc2V0IGluIGNvbmZpZy5cbiAgICAgICAgY29uc3Qgd2lkdGhzID0gcm93Lm1hcChjb2wgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbC53aWR0aCkge1xuICAgICAgICAgICAgICAgIHVuc2V0LS07XG4gICAgICAgICAgICAgICAgcmVtYWluaW5nV2lkdGggLT0gY29sLndpZHRoO1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2wud2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gYW55IHVuc2V0IHdpZHRocyBzaG91bGQgYmUgY2FsY3VsYXRlZC5cbiAgICAgICAgY29uc3QgdW5zZXRXaWR0aCA9IHVuc2V0ID8gTWF0aC5mbG9vcihyZW1haW5pbmdXaWR0aCAvIHVuc2V0KSA6IDA7XG4gICAgICAgIHJldHVybiB3aWR0aHMubWFwKCh3LCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAodyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KHVuc2V0V2lkdGgsIF9taW5XaWR0aChyb3dbaV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB3O1xuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiBhZGRCb3JkZXIoY29sLCB0cywgc3R5bGUpIHtcbiAgICBpZiAoY29sLmJvcmRlcikge1xuICAgICAgICBpZiAoL1suJ10tK1suJ10vLnRlc3QodHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRzLnRyaW0oKS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyAgJztcbiAgICB9XG4gICAgcmV0dXJuICcnO1xufVxuLy8gY2FsY3VsYXRlcyB0aGUgbWluaW11bSB3aWR0aCBvZlxuLy8gYSBjb2x1bW4sIGJhc2VkIG9uIHBhZGRpbmcgcHJlZmVyZW5jZXMuXG5mdW5jdGlvbiBfbWluV2lkdGgoY29sKSB7XG4gICAgY29uc3QgcGFkZGluZyA9IGNvbC5wYWRkaW5nIHx8IFtdO1xuICAgIGNvbnN0IG1pbldpZHRoID0gMSArIChwYWRkaW5nW2xlZnRdIHx8IDApICsgKHBhZGRpbmdbcmlnaHRdIHx8IDApO1xuICAgIGlmIChjb2wuYm9yZGVyKSB7XG4gICAgICAgIHJldHVybiBtaW5XaWR0aCArIDQ7XG4gICAgfVxuICAgIHJldHVybiBtaW5XaWR0aDtcbn1cbmZ1bmN0aW9uIGdldFdpbmRvd1dpZHRoKCkge1xuICAgIC8qIGM4IGlnbm9yZSBuZXh0IDU6IGRlcGVuZHMgb24gdGVybWluYWwgKi9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3Muc3Rkb3V0ICYmIHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMpIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnM7XG4gICAgfVxuICAgIHJldHVybiA4MDtcbn1cbmZ1bmN0aW9uIGFsaWduUmlnaHQoc3RyLCB3aWR0aCkge1xuICAgIHN0ciA9IHN0ci50cmltKCk7XG4gICAgY29uc3Qgc3RyV2lkdGggPSBtaXhpbi5zdHJpbmdXaWR0aChzdHIpO1xuICAgIGlmIChzdHJXaWR0aCA8IHdpZHRoKSB7XG4gICAgICAgIHJldHVybiAnICcucmVwZWF0KHdpZHRoIC0gc3RyV2lkdGgpICsgc3RyO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuZnVuY3Rpb24gYWxpZ25DZW50ZXIoc3RyLCB3aWR0aCkge1xuICAgIHN0ciA9IHN0ci50cmltKCk7XG4gICAgY29uc3Qgc3RyV2lkdGggPSBtaXhpbi5zdHJpbmdXaWR0aChzdHIpO1xuICAgIC8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbiAgICBpZiAoc3RyV2lkdGggPj0gd2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgcmV0dXJuICcgJy5yZXBlYXQoKHdpZHRoIC0gc3RyV2lkdGgpID4+IDEpICsgc3RyO1xufVxubGV0IG1peGluO1xuZXhwb3J0IGZ1bmN0aW9uIGNsaXVpKG9wdHMsIF9taXhpbikge1xuICAgIG1peGluID0gX21peGluO1xuICAgIHJldHVybiBuZXcgVUkoe1xuICAgICAgICB3aWR0aDogKG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0cy53aWR0aCkgfHwgZ2V0V2luZG93V2lkdGgoKSxcbiAgICAgICAgd3JhcDogb3B0cyA9PT0gbnVsbCB8fCBvcHRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRzLndyYXBcbiAgICB9KTtcbn1cbiIsImltcG9ydCBhbnNpUmVnZXggZnJvbSAnYW5zaS1yZWdleCc7XG5cbmNvbnN0IHJlZ2V4ID0gYW5zaVJlZ2V4KCk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0cmlwQW5zaShzdHJpbmcpIHtcblx0aWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgYSBcXGBzdHJpbmdcXGAsIGdvdCBcXGAke3R5cGVvZiBzdHJpbmd9XFxgYCk7XG5cdH1cblxuXHQvLyBFdmVuIHRob3VnaCB0aGUgcmVnZXggaXMgZ2xvYmFsLCB3ZSBkb24ndCBuZWVkIHRvIHJlc2V0IHRoZSBgLmxhc3RJbmRleGBcblx0Ly8gYmVjYXVzZSB1bmxpa2UgYC5leGVjKClgIGFuZCBgLnRlc3QoKWAsIGAucmVwbGFjZSgpYCBkb2VzIGl0IGF1dG9tYXRpY2FsbHlcblx0Ly8gYW5kIGRvaW5nIGl0IG1hbnVhbGx5IGhhcyBhIHBlcmZvcm1hbmNlIHBlbmFsdHkuXG5cdHJldHVybiBzdHJpbmcucmVwbGFjZShyZWdleCwgJycpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYW5zaVJlZ2V4KHtvbmx5Rmlyc3QgPSBmYWxzZX0gPSB7fSkge1xuXHQvLyBWYWxpZCBzdHJpbmcgdGVybWluYXRvciBzZXF1ZW5jZXMgYXJlIEJFTCwgRVNDXFwsIGFuZCAweDljXG5cdGNvbnN0IFNUID0gJyg/OlxcXFx1MDAwN3xcXFxcdTAwMUJcXFxcdTAwNUN8XFxcXHUwMDlDKSc7XG5cblx0Ly8gT1NDIHNlcXVlbmNlcyBvbmx5OiBFU0MgXSAuLi4gU1QgKG5vbi1ncmVlZHkgdW50aWwgdGhlIGZpcnN0IFNUKVxuXHRjb25zdCBvc2MgPSBgKD86XFxcXHUwMDFCXFxcXF1bXFxcXHNcXFxcU10qPyR7U1R9KWA7XG5cblx0Ly8gQ1NJIGFuZCByZWxhdGVkOiBFU0MvQzEsIG9wdGlvbmFsIGludGVybWVkaWF0ZXMsIG9wdGlvbmFsIHBhcmFtcyAoc3VwcG9ydHMgOyBhbmQgOikgdGhlbiBmaW5hbCBieXRlXG5cdGNvbnN0IGNzaSA9ICdbXFxcXHUwMDFCXFxcXHUwMDlCXVtbXFxcXF0oKSM7P10qKD86XFxcXGR7MSw0fSg/Ols7Ol1cXFxcZHswLDR9KSopP1tcXFxcZEEtUFItVFpjZi1ucS11eT0+PH5dJztcblxuXHRjb25zdCBwYXR0ZXJuID0gYCR7b3NjfXwke2NzaX1gO1xuXG5cdHJldHVybiBuZXcgUmVnRXhwKHBhdHRlcm4sIG9ubHlGaXJzdCA/IHVuZGVmaW5lZCA6ICdnJyk7XG59XG4iLCJpbXBvcnQge2dldENhdGVnb3J5LCBpc0FtYmlndW91cywgaXNGdWxsV2lkdGgsIGlzV2lkZX0gZnJvbSAnLi9sb29rdXAuanMnO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZShjb2RlUG9pbnQpIHtcblx0aWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihjb2RlUG9pbnQpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgYSBjb2RlIHBvaW50LCBnb3QgXFxgJHt0eXBlb2YgY29kZVBvaW50fVxcYC5gKTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZWFzdEFzaWFuV2lkdGhUeXBlKGNvZGVQb2ludCkge1xuXHR2YWxpZGF0ZShjb2RlUG9pbnQpO1xuXG5cdHJldHVybiBnZXRDYXRlZ29yeShjb2RlUG9pbnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZWFzdEFzaWFuV2lkdGgoY29kZVBvaW50LCB7YW1iaWd1b3VzQXNXaWRlID0gZmFsc2V9ID0ge30pIHtcblx0dmFsaWRhdGUoY29kZVBvaW50KTtcblxuXHRpZiAoXG5cdFx0aXNGdWxsV2lkdGgoY29kZVBvaW50KVxuXHRcdHx8IGlzV2lkZShjb2RlUG9pbnQpXG5cdFx0fHwgKGFtYmlndW91c0FzV2lkZSAmJiBpc0FtYmlndW91cyhjb2RlUG9pbnQpKVxuXHQpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdHJldHVybiAxO1xufVxuXG4vLyBGb3IgUHJldHRpZXIuIFRoaXMgZG9lc24ndCBjb3VudCBcImFtYmlndW91c1wiIGNoYXJhY3RlcnMgb3IgY2hlY2sgZm9yIHZhbGlkIGlucHV0LlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9nZXQtZWFzdC1hc2lhbi13aWR0aC9wdWxsLzZcbmV4cG9ydCBjb25zdCBfaXNOYXJyb3dXaWR0aCA9IGNvZGVQb2ludCA9PiAhKGlzRnVsbFdpZHRoKGNvZGVQb2ludCkgfHwgaXNXaWRlKGNvZGVQb2ludCkpO1xuIiwiLy8gR2VuZXJhdGVkIGNvZGUuXG5cbmZ1bmN0aW9uIGlzQW1iaWd1b3VzKHgpIHtcblx0cmV0dXJuIHggPT09IDB4QTFcblx0XHR8fCB4ID09PSAweEE0XG5cdFx0fHwgeCA9PT0gMHhBN1xuXHRcdHx8IHggPT09IDB4QThcblx0XHR8fCB4ID09PSAweEFBXG5cdFx0fHwgeCA9PT0gMHhBRFxuXHRcdHx8IHggPT09IDB4QUVcblx0XHR8fCB4ID49IDB4QjAgJiYgeCA8PSAweEI0XG5cdFx0fHwgeCA+PSAweEI2ICYmIHggPD0gMHhCQVxuXHRcdHx8IHggPj0gMHhCQyAmJiB4IDw9IDB4QkZcblx0XHR8fCB4ID09PSAweEM2XG5cdFx0fHwgeCA9PT0gMHhEMFxuXHRcdHx8IHggPT09IDB4RDdcblx0XHR8fCB4ID09PSAweEQ4XG5cdFx0fHwgeCA+PSAweERFICYmIHggPD0gMHhFMVxuXHRcdHx8IHggPT09IDB4RTZcblx0XHR8fCB4ID49IDB4RTggJiYgeCA8PSAweEVBXG5cdFx0fHwgeCA9PT0gMHhFQ1xuXHRcdHx8IHggPT09IDB4RURcblx0XHR8fCB4ID09PSAweEYwXG5cdFx0fHwgeCA9PT0gMHhGMlxuXHRcdHx8IHggPT09IDB4RjNcblx0XHR8fCB4ID49IDB4RjcgJiYgeCA8PSAweEZBXG5cdFx0fHwgeCA9PT0gMHhGQ1xuXHRcdHx8IHggPT09IDB4RkVcblx0XHR8fCB4ID09PSAweDEwMVxuXHRcdHx8IHggPT09IDB4MTExXG5cdFx0fHwgeCA9PT0gMHgxMTNcblx0XHR8fCB4ID09PSAweDExQlxuXHRcdHx8IHggPT09IDB4MTI2XG5cdFx0fHwgeCA9PT0gMHgxMjdcblx0XHR8fCB4ID09PSAweDEyQlxuXHRcdHx8IHggPj0gMHgxMzEgJiYgeCA8PSAweDEzM1xuXHRcdHx8IHggPT09IDB4MTM4XG5cdFx0fHwgeCA+PSAweDEzRiAmJiB4IDw9IDB4MTQyXG5cdFx0fHwgeCA9PT0gMHgxNDRcblx0XHR8fCB4ID49IDB4MTQ4ICYmIHggPD0gMHgxNEJcblx0XHR8fCB4ID09PSAweDE0RFxuXHRcdHx8IHggPT09IDB4MTUyXG5cdFx0fHwgeCA9PT0gMHgxNTNcblx0XHR8fCB4ID09PSAweDE2NlxuXHRcdHx8IHggPT09IDB4MTY3XG5cdFx0fHwgeCA9PT0gMHgxNkJcblx0XHR8fCB4ID09PSAweDFDRVxuXHRcdHx8IHggPT09IDB4MUQwXG5cdFx0fHwgeCA9PT0gMHgxRDJcblx0XHR8fCB4ID09PSAweDFENFxuXHRcdHx8IHggPT09IDB4MUQ2XG5cdFx0fHwgeCA9PT0gMHgxRDhcblx0XHR8fCB4ID09PSAweDFEQVxuXHRcdHx8IHggPT09IDB4MURDXG5cdFx0fHwgeCA9PT0gMHgyNTFcblx0XHR8fCB4ID09PSAweDI2MVxuXHRcdHx8IHggPT09IDB4MkM0XG5cdFx0fHwgeCA9PT0gMHgyQzdcblx0XHR8fCB4ID49IDB4MkM5ICYmIHggPD0gMHgyQ0Jcblx0XHR8fCB4ID09PSAweDJDRFxuXHRcdHx8IHggPT09IDB4MkQwXG5cdFx0fHwgeCA+PSAweDJEOCAmJiB4IDw9IDB4MkRCXG5cdFx0fHwgeCA9PT0gMHgyRERcblx0XHR8fCB4ID09PSAweDJERlxuXHRcdHx8IHggPj0gMHgzMDAgJiYgeCA8PSAweDM2RlxuXHRcdHx8IHggPj0gMHgzOTEgJiYgeCA8PSAweDNBMVxuXHRcdHx8IHggPj0gMHgzQTMgJiYgeCA8PSAweDNBOVxuXHRcdHx8IHggPj0gMHgzQjEgJiYgeCA8PSAweDNDMVxuXHRcdHx8IHggPj0gMHgzQzMgJiYgeCA8PSAweDNDOVxuXHRcdHx8IHggPT09IDB4NDAxXG5cdFx0fHwgeCA+PSAweDQxMCAmJiB4IDw9IDB4NDRGXG5cdFx0fHwgeCA9PT0gMHg0NTFcblx0XHR8fCB4ID09PSAweDIwMTBcblx0XHR8fCB4ID49IDB4MjAxMyAmJiB4IDw9IDB4MjAxNlxuXHRcdHx8IHggPT09IDB4MjAxOFxuXHRcdHx8IHggPT09IDB4MjAxOVxuXHRcdHx8IHggPT09IDB4MjAxQ1xuXHRcdHx8IHggPT09IDB4MjAxRFxuXHRcdHx8IHggPj0gMHgyMDIwICYmIHggPD0gMHgyMDIyXG5cdFx0fHwgeCA+PSAweDIwMjQgJiYgeCA8PSAweDIwMjdcblx0XHR8fCB4ID09PSAweDIwMzBcblx0XHR8fCB4ID09PSAweDIwMzJcblx0XHR8fCB4ID09PSAweDIwMzNcblx0XHR8fCB4ID09PSAweDIwMzVcblx0XHR8fCB4ID09PSAweDIwM0Jcblx0XHR8fCB4ID09PSAweDIwM0Vcblx0XHR8fCB4ID09PSAweDIwNzRcblx0XHR8fCB4ID09PSAweDIwN0Zcblx0XHR8fCB4ID49IDB4MjA4MSAmJiB4IDw9IDB4MjA4NFxuXHRcdHx8IHggPT09IDB4MjBBQ1xuXHRcdHx8IHggPT09IDB4MjEwM1xuXHRcdHx8IHggPT09IDB4MjEwNVxuXHRcdHx8IHggPT09IDB4MjEwOVxuXHRcdHx8IHggPT09IDB4MjExM1xuXHRcdHx8IHggPT09IDB4MjExNlxuXHRcdHx8IHggPT09IDB4MjEyMVxuXHRcdHx8IHggPT09IDB4MjEyMlxuXHRcdHx8IHggPT09IDB4MjEyNlxuXHRcdHx8IHggPT09IDB4MjEyQlxuXHRcdHx8IHggPT09IDB4MjE1M1xuXHRcdHx8IHggPT09IDB4MjE1NFxuXHRcdHx8IHggPj0gMHgyMTVCICYmIHggPD0gMHgyMTVFXG5cdFx0fHwgeCA+PSAweDIxNjAgJiYgeCA8PSAweDIxNkJcblx0XHR8fCB4ID49IDB4MjE3MCAmJiB4IDw9IDB4MjE3OVxuXHRcdHx8IHggPT09IDB4MjE4OVxuXHRcdHx8IHggPj0gMHgyMTkwICYmIHggPD0gMHgyMTk5XG5cdFx0fHwgeCA9PT0gMHgyMUI4XG5cdFx0fHwgeCA9PT0gMHgyMUI5XG5cdFx0fHwgeCA9PT0gMHgyMUQyXG5cdFx0fHwgeCA9PT0gMHgyMUQ0XG5cdFx0fHwgeCA9PT0gMHgyMUU3XG5cdFx0fHwgeCA9PT0gMHgyMjAwXG5cdFx0fHwgeCA9PT0gMHgyMjAyXG5cdFx0fHwgeCA9PT0gMHgyMjAzXG5cdFx0fHwgeCA9PT0gMHgyMjA3XG5cdFx0fHwgeCA9PT0gMHgyMjA4XG5cdFx0fHwgeCA9PT0gMHgyMjBCXG5cdFx0fHwgeCA9PT0gMHgyMjBGXG5cdFx0fHwgeCA9PT0gMHgyMjExXG5cdFx0fHwgeCA9PT0gMHgyMjE1XG5cdFx0fHwgeCA9PT0gMHgyMjFBXG5cdFx0fHwgeCA+PSAweDIyMUQgJiYgeCA8PSAweDIyMjBcblx0XHR8fCB4ID09PSAweDIyMjNcblx0XHR8fCB4ID09PSAweDIyMjVcblx0XHR8fCB4ID49IDB4MjIyNyAmJiB4IDw9IDB4MjIyQ1xuXHRcdHx8IHggPT09IDB4MjIyRVxuXHRcdHx8IHggPj0gMHgyMjM0ICYmIHggPD0gMHgyMjM3XG5cdFx0fHwgeCA9PT0gMHgyMjNDXG5cdFx0fHwgeCA9PT0gMHgyMjNEXG5cdFx0fHwgeCA9PT0gMHgyMjQ4XG5cdFx0fHwgeCA9PT0gMHgyMjRDXG5cdFx0fHwgeCA9PT0gMHgyMjUyXG5cdFx0fHwgeCA9PT0gMHgyMjYwXG5cdFx0fHwgeCA9PT0gMHgyMjYxXG5cdFx0fHwgeCA+PSAweDIyNjQgJiYgeCA8PSAweDIyNjdcblx0XHR8fCB4ID09PSAweDIyNkFcblx0XHR8fCB4ID09PSAweDIyNkJcblx0XHR8fCB4ID09PSAweDIyNkVcblx0XHR8fCB4ID09PSAweDIyNkZcblx0XHR8fCB4ID09PSAweDIyODJcblx0XHR8fCB4ID09PSAweDIyODNcblx0XHR8fCB4ID09PSAweDIyODZcblx0XHR8fCB4ID09PSAweDIyODdcblx0XHR8fCB4ID09PSAweDIyOTVcblx0XHR8fCB4ID09PSAweDIyOTlcblx0XHR8fCB4ID09PSAweDIyQTVcblx0XHR8fCB4ID09PSAweDIyQkZcblx0XHR8fCB4ID09PSAweDIzMTJcblx0XHR8fCB4ID49IDB4MjQ2MCAmJiB4IDw9IDB4MjRFOVxuXHRcdHx8IHggPj0gMHgyNEVCICYmIHggPD0gMHgyNTRCXG5cdFx0fHwgeCA+PSAweDI1NTAgJiYgeCA8PSAweDI1NzNcblx0XHR8fCB4ID49IDB4MjU4MCAmJiB4IDw9IDB4MjU4RlxuXHRcdHx8IHggPj0gMHgyNTkyICYmIHggPD0gMHgyNTk1XG5cdFx0fHwgeCA9PT0gMHgyNUEwXG5cdFx0fHwgeCA9PT0gMHgyNUExXG5cdFx0fHwgeCA+PSAweDI1QTMgJiYgeCA8PSAweDI1QTlcblx0XHR8fCB4ID09PSAweDI1QjJcblx0XHR8fCB4ID09PSAweDI1QjNcblx0XHR8fCB4ID09PSAweDI1QjZcblx0XHR8fCB4ID09PSAweDI1Qjdcblx0XHR8fCB4ID09PSAweDI1QkNcblx0XHR8fCB4ID09PSAweDI1QkRcblx0XHR8fCB4ID09PSAweDI1QzBcblx0XHR8fCB4ID09PSAweDI1QzFcblx0XHR8fCB4ID49IDB4MjVDNiAmJiB4IDw9IDB4MjVDOFxuXHRcdHx8IHggPT09IDB4MjVDQlxuXHRcdHx8IHggPj0gMHgyNUNFICYmIHggPD0gMHgyNUQxXG5cdFx0fHwgeCA+PSAweDI1RTIgJiYgeCA8PSAweDI1RTVcblx0XHR8fCB4ID09PSAweDI1RUZcblx0XHR8fCB4ID09PSAweDI2MDVcblx0XHR8fCB4ID09PSAweDI2MDZcblx0XHR8fCB4ID09PSAweDI2MDlcblx0XHR8fCB4ID09PSAweDI2MEVcblx0XHR8fCB4ID09PSAweDI2MEZcblx0XHR8fCB4ID09PSAweDI2MUNcblx0XHR8fCB4ID09PSAweDI2MUVcblx0XHR8fCB4ID09PSAweDI2NDBcblx0XHR8fCB4ID09PSAweDI2NDJcblx0XHR8fCB4ID09PSAweDI2NjBcblx0XHR8fCB4ID09PSAweDI2NjFcblx0XHR8fCB4ID49IDB4MjY2MyAmJiB4IDw9IDB4MjY2NVxuXHRcdHx8IHggPj0gMHgyNjY3ICYmIHggPD0gMHgyNjZBXG5cdFx0fHwgeCA9PT0gMHgyNjZDXG5cdFx0fHwgeCA9PT0gMHgyNjZEXG5cdFx0fHwgeCA9PT0gMHgyNjZGXG5cdFx0fHwgeCA9PT0gMHgyNjlFXG5cdFx0fHwgeCA9PT0gMHgyNjlGXG5cdFx0fHwgeCA9PT0gMHgyNkJGXG5cdFx0fHwgeCA+PSAweDI2QzYgJiYgeCA8PSAweDI2Q0Rcblx0XHR8fCB4ID49IDB4MjZDRiAmJiB4IDw9IDB4MjZEM1xuXHRcdHx8IHggPj0gMHgyNkQ1ICYmIHggPD0gMHgyNkUxXG5cdFx0fHwgeCA9PT0gMHgyNkUzXG5cdFx0fHwgeCA9PT0gMHgyNkU4XG5cdFx0fHwgeCA9PT0gMHgyNkU5XG5cdFx0fHwgeCA+PSAweDI2RUIgJiYgeCA8PSAweDI2RjFcblx0XHR8fCB4ID09PSAweDI2RjRcblx0XHR8fCB4ID49IDB4MjZGNiAmJiB4IDw9IDB4MjZGOVxuXHRcdHx8IHggPT09IDB4MjZGQlxuXHRcdHx8IHggPT09IDB4MjZGQ1xuXHRcdHx8IHggPT09IDB4MjZGRVxuXHRcdHx8IHggPT09IDB4MjZGRlxuXHRcdHx8IHggPT09IDB4MjczRFxuXHRcdHx8IHggPj0gMHgyNzc2ICYmIHggPD0gMHgyNzdGXG5cdFx0fHwgeCA+PSAweDJCNTYgJiYgeCA8PSAweDJCNTlcblx0XHR8fCB4ID49IDB4MzI0OCAmJiB4IDw9IDB4MzI0RlxuXHRcdHx8IHggPj0gMHhFMDAwICYmIHggPD0gMHhGOEZGXG5cdFx0fHwgeCA+PSAweEZFMDAgJiYgeCA8PSAweEZFMEZcblx0XHR8fCB4ID09PSAweEZGRkRcblx0XHR8fCB4ID49IDB4MUYxMDAgJiYgeCA8PSAweDFGMTBBXG5cdFx0fHwgeCA+PSAweDFGMTEwICYmIHggPD0gMHgxRjEyRFxuXHRcdHx8IHggPj0gMHgxRjEzMCAmJiB4IDw9IDB4MUYxNjlcblx0XHR8fCB4ID49IDB4MUYxNzAgJiYgeCA8PSAweDFGMThEXG5cdFx0fHwgeCA9PT0gMHgxRjE4RlxuXHRcdHx8IHggPT09IDB4MUYxOTBcblx0XHR8fCB4ID49IDB4MUYxOUIgJiYgeCA8PSAweDFGMUFDXG5cdFx0fHwgeCA+PSAweEUwMTAwICYmIHggPD0gMHhFMDFFRlxuXHRcdHx8IHggPj0gMHhGMDAwMCAmJiB4IDw9IDB4RkZGRkRcblx0XHR8fCB4ID49IDB4MTAwMDAwICYmIHggPD0gMHgxMEZGRkQ7XG59XG5cbmZ1bmN0aW9uIGlzRnVsbFdpZHRoKHgpIHtcblx0cmV0dXJuIHggPT09IDB4MzAwMFxuXHRcdHx8IHggPj0gMHhGRjAxICYmIHggPD0gMHhGRjYwXG5cdFx0fHwgeCA+PSAweEZGRTAgJiYgeCA8PSAweEZGRTY7XG59XG5cbmZ1bmN0aW9uIGlzV2lkZSh4KSB7XG5cdHJldHVybiB4ID49IDB4MTEwMCAmJiB4IDw9IDB4MTE1RlxuXHRcdHx8IHggPT09IDB4MjMxQVxuXHRcdHx8IHggPT09IDB4MjMxQlxuXHRcdHx8IHggPT09IDB4MjMyOVxuXHRcdHx8IHggPT09IDB4MjMyQVxuXHRcdHx8IHggPj0gMHgyM0U5ICYmIHggPD0gMHgyM0VDXG5cdFx0fHwgeCA9PT0gMHgyM0YwXG5cdFx0fHwgeCA9PT0gMHgyM0YzXG5cdFx0fHwgeCA9PT0gMHgyNUZEXG5cdFx0fHwgeCA9PT0gMHgyNUZFXG5cdFx0fHwgeCA9PT0gMHgyNjE0XG5cdFx0fHwgeCA9PT0gMHgyNjE1XG5cdFx0fHwgeCA+PSAweDI2MzAgJiYgeCA8PSAweDI2Mzdcblx0XHR8fCB4ID49IDB4MjY0OCAmJiB4IDw9IDB4MjY1M1xuXHRcdHx8IHggPT09IDB4MjY3RlxuXHRcdHx8IHggPj0gMHgyNjhBICYmIHggPD0gMHgyNjhGXG5cdFx0fHwgeCA9PT0gMHgyNjkzXG5cdFx0fHwgeCA9PT0gMHgyNkExXG5cdFx0fHwgeCA9PT0gMHgyNkFBXG5cdFx0fHwgeCA9PT0gMHgyNkFCXG5cdFx0fHwgeCA9PT0gMHgyNkJEXG5cdFx0fHwgeCA9PT0gMHgyNkJFXG5cdFx0fHwgeCA9PT0gMHgyNkM0XG5cdFx0fHwgeCA9PT0gMHgyNkM1XG5cdFx0fHwgeCA9PT0gMHgyNkNFXG5cdFx0fHwgeCA9PT0gMHgyNkQ0XG5cdFx0fHwgeCA9PT0gMHgyNkVBXG5cdFx0fHwgeCA9PT0gMHgyNkYyXG5cdFx0fHwgeCA9PT0gMHgyNkYzXG5cdFx0fHwgeCA9PT0gMHgyNkY1XG5cdFx0fHwgeCA9PT0gMHgyNkZBXG5cdFx0fHwgeCA9PT0gMHgyNkZEXG5cdFx0fHwgeCA9PT0gMHgyNzA1XG5cdFx0fHwgeCA9PT0gMHgyNzBBXG5cdFx0fHwgeCA9PT0gMHgyNzBCXG5cdFx0fHwgeCA9PT0gMHgyNzI4XG5cdFx0fHwgeCA9PT0gMHgyNzRDXG5cdFx0fHwgeCA9PT0gMHgyNzRFXG5cdFx0fHwgeCA+PSAweDI3NTMgJiYgeCA8PSAweDI3NTVcblx0XHR8fCB4ID09PSAweDI3NTdcblx0XHR8fCB4ID49IDB4Mjc5NSAmJiB4IDw9IDB4Mjc5N1xuXHRcdHx8IHggPT09IDB4MjdCMFxuXHRcdHx8IHggPT09IDB4MjdCRlxuXHRcdHx8IHggPT09IDB4MkIxQlxuXHRcdHx8IHggPT09IDB4MkIxQ1xuXHRcdHx8IHggPT09IDB4MkI1MFxuXHRcdHx8IHggPT09IDB4MkI1NVxuXHRcdHx8IHggPj0gMHgyRTgwICYmIHggPD0gMHgyRTk5XG5cdFx0fHwgeCA+PSAweDJFOUIgJiYgeCA8PSAweDJFRjNcblx0XHR8fCB4ID49IDB4MkYwMCAmJiB4IDw9IDB4MkZENVxuXHRcdHx8IHggPj0gMHgyRkYwICYmIHggPD0gMHgyRkZGXG5cdFx0fHwgeCA+PSAweDMwMDEgJiYgeCA8PSAweDMwM0Vcblx0XHR8fCB4ID49IDB4MzA0MSAmJiB4IDw9IDB4MzA5NlxuXHRcdHx8IHggPj0gMHgzMDk5ICYmIHggPD0gMHgzMEZGXG5cdFx0fHwgeCA+PSAweDMxMDUgJiYgeCA8PSAweDMxMkZcblx0XHR8fCB4ID49IDB4MzEzMSAmJiB4IDw9IDB4MzE4RVxuXHRcdHx8IHggPj0gMHgzMTkwICYmIHggPD0gMHgzMUU1XG5cdFx0fHwgeCA+PSAweDMxRUYgJiYgeCA8PSAweDMyMUVcblx0XHR8fCB4ID49IDB4MzIyMCAmJiB4IDw9IDB4MzI0N1xuXHRcdHx8IHggPj0gMHgzMjUwICYmIHggPD0gMHhBNDhDXG5cdFx0fHwgeCA+PSAweEE0OTAgJiYgeCA8PSAweEE0QzZcblx0XHR8fCB4ID49IDB4QTk2MCAmJiB4IDw9IDB4QTk3Q1xuXHRcdHx8IHggPj0gMHhBQzAwICYmIHggPD0gMHhEN0EzXG5cdFx0fHwgeCA+PSAweEY5MDAgJiYgeCA8PSAweEZBRkZcblx0XHR8fCB4ID49IDB4RkUxMCAmJiB4IDw9IDB4RkUxOVxuXHRcdHx8IHggPj0gMHhGRTMwICYmIHggPD0gMHhGRTUyXG5cdFx0fHwgeCA+PSAweEZFNTQgJiYgeCA8PSAweEZFNjZcblx0XHR8fCB4ID49IDB4RkU2OCAmJiB4IDw9IDB4RkU2QlxuXHRcdHx8IHggPj0gMHgxNkZFMCAmJiB4IDw9IDB4MTZGRTRcblx0XHR8fCB4ID09PSAweDE2RkYwXG5cdFx0fHwgeCA9PT0gMHgxNkZGMVxuXHRcdHx8IHggPj0gMHgxNzAwMCAmJiB4IDw9IDB4MTg3Rjdcblx0XHR8fCB4ID49IDB4MTg4MDAgJiYgeCA8PSAweDE4Q0Q1XG5cdFx0fHwgeCA+PSAweDE4Q0ZGICYmIHggPD0gMHgxOEQwOFxuXHRcdHx8IHggPj0gMHgxQUZGMCAmJiB4IDw9IDB4MUFGRjNcblx0XHR8fCB4ID49IDB4MUFGRjUgJiYgeCA8PSAweDFBRkZCXG5cdFx0fHwgeCA9PT0gMHgxQUZGRFxuXHRcdHx8IHggPT09IDB4MUFGRkVcblx0XHR8fCB4ID49IDB4MUIwMDAgJiYgeCA8PSAweDFCMTIyXG5cdFx0fHwgeCA9PT0gMHgxQjEzMlxuXHRcdHx8IHggPj0gMHgxQjE1MCAmJiB4IDw9IDB4MUIxNTJcblx0XHR8fCB4ID09PSAweDFCMTU1XG5cdFx0fHwgeCA+PSAweDFCMTY0ICYmIHggPD0gMHgxQjE2N1xuXHRcdHx8IHggPj0gMHgxQjE3MCAmJiB4IDw9IDB4MUIyRkJcblx0XHR8fCB4ID49IDB4MUQzMDAgJiYgeCA8PSAweDFEMzU2XG5cdFx0fHwgeCA+PSAweDFEMzYwICYmIHggPD0gMHgxRDM3NlxuXHRcdHx8IHggPT09IDB4MUYwMDRcblx0XHR8fCB4ID09PSAweDFGMENGXG5cdFx0fHwgeCA9PT0gMHgxRjE4RVxuXHRcdHx8IHggPj0gMHgxRjE5MSAmJiB4IDw9IDB4MUYxOUFcblx0XHR8fCB4ID49IDB4MUYyMDAgJiYgeCA8PSAweDFGMjAyXG5cdFx0fHwgeCA+PSAweDFGMjEwICYmIHggPD0gMHgxRjIzQlxuXHRcdHx8IHggPj0gMHgxRjI0MCAmJiB4IDw9IDB4MUYyNDhcblx0XHR8fCB4ID09PSAweDFGMjUwXG5cdFx0fHwgeCA9PT0gMHgxRjI1MVxuXHRcdHx8IHggPj0gMHgxRjI2MCAmJiB4IDw9IDB4MUYyNjVcblx0XHR8fCB4ID49IDB4MUYzMDAgJiYgeCA8PSAweDFGMzIwXG5cdFx0fHwgeCA+PSAweDFGMzJEICYmIHggPD0gMHgxRjMzNVxuXHRcdHx8IHggPj0gMHgxRjMzNyAmJiB4IDw9IDB4MUYzN0Ncblx0XHR8fCB4ID49IDB4MUYzN0UgJiYgeCA8PSAweDFGMzkzXG5cdFx0fHwgeCA+PSAweDFGM0EwICYmIHggPD0gMHgxRjNDQVxuXHRcdHx8IHggPj0gMHgxRjNDRiAmJiB4IDw9IDB4MUYzRDNcblx0XHR8fCB4ID49IDB4MUYzRTAgJiYgeCA8PSAweDFGM0YwXG5cdFx0fHwgeCA9PT0gMHgxRjNGNFxuXHRcdHx8IHggPj0gMHgxRjNGOCAmJiB4IDw9IDB4MUY0M0Vcblx0XHR8fCB4ID09PSAweDFGNDQwXG5cdFx0fHwgeCA+PSAweDFGNDQyICYmIHggPD0gMHgxRjRGQ1xuXHRcdHx8IHggPj0gMHgxRjRGRiAmJiB4IDw9IDB4MUY1M0Rcblx0XHR8fCB4ID49IDB4MUY1NEIgJiYgeCA8PSAweDFGNTRFXG5cdFx0fHwgeCA+PSAweDFGNTUwICYmIHggPD0gMHgxRjU2N1xuXHRcdHx8IHggPT09IDB4MUY1N0Fcblx0XHR8fCB4ID09PSAweDFGNTk1XG5cdFx0fHwgeCA9PT0gMHgxRjU5NlxuXHRcdHx8IHggPT09IDB4MUY1QTRcblx0XHR8fCB4ID49IDB4MUY1RkIgJiYgeCA8PSAweDFGNjRGXG5cdFx0fHwgeCA+PSAweDFGNjgwICYmIHggPD0gMHgxRjZDNVxuXHRcdHx8IHggPT09IDB4MUY2Q0Ncblx0XHR8fCB4ID49IDB4MUY2RDAgJiYgeCA8PSAweDFGNkQyXG5cdFx0fHwgeCA+PSAweDFGNkQ1ICYmIHggPD0gMHgxRjZEN1xuXHRcdHx8IHggPj0gMHgxRjZEQyAmJiB4IDw9IDB4MUY2REZcblx0XHR8fCB4ID09PSAweDFGNkVCXG5cdFx0fHwgeCA9PT0gMHgxRjZFQ1xuXHRcdHx8IHggPj0gMHgxRjZGNCAmJiB4IDw9IDB4MUY2RkNcblx0XHR8fCB4ID49IDB4MUY3RTAgJiYgeCA8PSAweDFGN0VCXG5cdFx0fHwgeCA9PT0gMHgxRjdGMFxuXHRcdHx8IHggPj0gMHgxRjkwQyAmJiB4IDw9IDB4MUY5M0Fcblx0XHR8fCB4ID49IDB4MUY5M0MgJiYgeCA8PSAweDFGOTQ1XG5cdFx0fHwgeCA+PSAweDFGOTQ3ICYmIHggPD0gMHgxRjlGRlxuXHRcdHx8IHggPj0gMHgxRkE3MCAmJiB4IDw9IDB4MUZBN0Ncblx0XHR8fCB4ID49IDB4MUZBODAgJiYgeCA8PSAweDFGQTg5XG5cdFx0fHwgeCA+PSAweDFGQThGICYmIHggPD0gMHgxRkFDNlxuXHRcdHx8IHggPj0gMHgxRkFDRSAmJiB4IDw9IDB4MUZBRENcblx0XHR8fCB4ID49IDB4MUZBREYgJiYgeCA8PSAweDFGQUU5XG5cdFx0fHwgeCA+PSAweDFGQUYwICYmIHggPD0gMHgxRkFGOFxuXHRcdHx8IHggPj0gMHgyMDAwMCAmJiB4IDw9IDB4MkZGRkRcblx0XHR8fCB4ID49IDB4MzAwMDAgJiYgeCA8PSAweDNGRkZEO1xufVxuXG5mdW5jdGlvbiBnZXRDYXRlZ29yeSh4KSB7XG5cdGlmIChpc0FtYmlndW91cyh4KSkgcmV0dXJuICdhbWJpZ3VvdXMnO1xuXG5cdGlmIChpc0Z1bGxXaWR0aCh4KSkgcmV0dXJuICdmdWxsd2lkdGgnO1xuXG5cdGlmIChcblx0XHR4ID09PSAweDIwQTlcblx0XHR8fCB4ID49IDB4RkY2MSAmJiB4IDw9IDB4RkZCRVxuXHRcdHx8IHggPj0gMHhGRkMyICYmIHggPD0gMHhGRkM3XG5cdFx0fHwgeCA+PSAweEZGQ0EgJiYgeCA8PSAweEZGQ0Zcblx0XHR8fCB4ID49IDB4RkZEMiAmJiB4IDw9IDB4RkZEN1xuXHRcdHx8IHggPj0gMHhGRkRBICYmIHggPD0gMHhGRkRDXG5cdFx0fHwgeCA+PSAweEZGRTggJiYgeCA8PSAweEZGRUVcblx0KSB7XG5cdFx0cmV0dXJuICdoYWxmd2lkdGgnO1xuXHR9XG5cblx0aWYgKFxuXHRcdHggPj0gMHgyMCAmJiB4IDw9IDB4N0Vcblx0XHR8fCB4ID09PSAweEEyXG5cdFx0fHwgeCA9PT0gMHhBM1xuXHRcdHx8IHggPT09IDB4QTVcblx0XHR8fCB4ID09PSAweEE2XG5cdFx0fHwgeCA9PT0gMHhBQ1xuXHRcdHx8IHggPT09IDB4QUZcblx0XHR8fCB4ID49IDB4MjdFNiAmJiB4IDw9IDB4MjdFRFxuXHRcdHx8IHggPT09IDB4Mjk4NVxuXHRcdHx8IHggPT09IDB4Mjk4NlxuXHQpIHtcblx0XHRyZXR1cm4gJ25hcnJvdyc7XG5cdH1cblxuXHRpZiAoaXNXaWRlKHgpKSByZXR1cm4gJ3dpZGUnO1xuXG5cdHJldHVybiAnbmV1dHJhbCc7XG59XG5cbmV4cG9ydCB7aXNBbWJpZ3VvdXMsIGlzRnVsbFdpZHRoLCBpc1dpZGUsIGdldENhdGVnb3J5fTtcbiIsImV4cG9ydCBkZWZhdWx0ICgpID0+IHtcblx0Ly8gaHR0cHM6Ly9tdGhzLmJlL2Vtb2ppXG5cdHJldHVybiAvWyMqMC05XVxcdUZFMEY/XFx1MjBFM3xbXFx4QTlcXHhBRVxcdTIwM0NcXHUyMDQ5XFx1MjEyMlxcdTIxMzlcXHUyMTk0LVxcdTIxOTlcXHUyMUE5XFx1MjFBQVxcdTIzMUFcXHUyMzFCXFx1MjMyOFxcdTIzQ0ZcXHUyM0VELVxcdTIzRUZcXHUyM0YxXFx1MjNGMlxcdTIzRjgtXFx1MjNGQVxcdTI0QzJcXHUyNUFBXFx1MjVBQlxcdTI1QjZcXHUyNUMwXFx1MjVGQlxcdTI1RkNcXHUyNUZFXFx1MjYwMC1cXHUyNjA0XFx1MjYwRVxcdTI2MTFcXHUyNjE0XFx1MjYxNVxcdTI2MThcXHUyNjIwXFx1MjYyMlxcdTI2MjNcXHUyNjI2XFx1MjYyQVxcdTI2MkVcXHUyNjJGXFx1MjYzOC1cXHUyNjNBXFx1MjY0MFxcdTI2NDJcXHUyNjQ4LVxcdTI2NTNcXHUyNjVGXFx1MjY2MFxcdTI2NjNcXHUyNjY1XFx1MjY2NlxcdTI2NjhcXHUyNjdCXFx1MjY3RVxcdTI2N0ZcXHUyNjkyXFx1MjY5NC1cXHUyNjk3XFx1MjY5OVxcdTI2OUJcXHUyNjlDXFx1MjZBMFxcdTI2QTdcXHUyNkFBXFx1MjZCMFxcdTI2QjFcXHUyNkJEXFx1MjZCRVxcdTI2QzRcXHUyNkM4XFx1MjZDRlxcdTI2RDFcXHUyNkU5XFx1MjZGMC1cXHUyNkY1XFx1MjZGN1xcdTI2RjhcXHUyNkZBXFx1MjcwMlxcdTI3MDhcXHUyNzA5XFx1MjcwRlxcdTI3MTJcXHUyNzE0XFx1MjcxNlxcdTI3MURcXHUyNzIxXFx1MjczM1xcdTI3MzRcXHUyNzQ0XFx1Mjc0N1xcdTI3NTdcXHUyNzYzXFx1MjdBMVxcdTI5MzRcXHUyOTM1XFx1MkIwNS1cXHUyQjA3XFx1MkIxQlxcdTJCMUNcXHUyQjU1XFx1MzAzMFxcdTMwM0RcXHUzMjk3XFx1MzI5OV1cXHVGRTBGP3xbXFx1MjYxRFxcdTI3MENcXHUyNzBEXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVGRTBGKT98W1xcdTI3MEFcXHUyNzBCXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFtcXHUyM0U5LVxcdTIzRUNcXHUyM0YwXFx1MjNGM1xcdTI1RkRcXHUyNjkzXFx1MjZBMVxcdTI2QUJcXHUyNkM1XFx1MjZDRVxcdTI2RDRcXHUyNkVBXFx1MjZGRFxcdTI3MDVcXHUyNzI4XFx1Mjc0Q1xcdTI3NEVcXHUyNzUzLVxcdTI3NTVcXHUyNzk1LVxcdTI3OTdcXHUyN0IwXFx1MjdCRlxcdTJCNTBdfFxcdTI2RDNcXHVGRTBGPyg/OlxcdTIwMERcXHVEODNEXFx1RENBNSk/fFxcdTI2RjkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RkUwRik/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFxcdTI3NjRcXHVGRTBGPyg/OlxcdTIwMEQoPzpcXHVEODNEXFx1REQyNXxcXHVEODNFXFx1REU3OSkpP3xcXHVEODNDKD86W1xcdURDMDRcXHVERDcwXFx1REQ3MVxcdUREN0VcXHVERDdGXFx1REUwMlxcdURFMzdcXHVERjIxXFx1REYyNC1cXHVERjJDXFx1REYzNlxcdURGN0RcXHVERjk2XFx1REY5N1xcdURGOTktXFx1REY5QlxcdURGOUVcXHVERjlGXFx1REZDRFxcdURGQ0VcXHVERkQ0LVxcdURGREZcXHVERkY1XFx1REZGN11cXHVGRTBGP3xbXFx1REY4NVxcdURGQzJcXHVERkM3XSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFtcXHVERkM0XFx1REZDQV0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xbXFx1REZDQlxcdURGQ0NdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUZFMEYpPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xbXFx1RENDRlxcdUREOEVcXHVERDkxLVxcdUREOUFcXHVERTAxXFx1REUxQVxcdURFMkZcXHVERTMyLVxcdURFMzZcXHVERTM4LVxcdURFM0FcXHVERTUwXFx1REU1MVxcdURGMDAtXFx1REYyMFxcdURGMkQtXFx1REYzNVxcdURGMzctXFx1REY0M1xcdURGNDUtXFx1REY0QVxcdURGNEMtXFx1REY3Q1xcdURGN0UtXFx1REY4NFxcdURGODYtXFx1REY5M1xcdURGQTAtXFx1REZDMVxcdURGQzVcXHVERkM2XFx1REZDOFxcdURGQzlcXHVERkNGLVxcdURGRDNcXHVERkUwLVxcdURGRjBcXHVERkY4LVxcdURGRkZdfFxcdURERTZcXHVEODNDW1xcdURERTgtXFx1RERFQ1xcdURERUVcXHVEREYxXFx1RERGMlxcdURERjRcXHVEREY2LVxcdURERkFcXHVEREZDXFx1RERGRFxcdURERkZdfFxcdURERTdcXHVEODNDW1xcdURERTZcXHVEREU3XFx1RERFOS1cXHVEREVGXFx1RERGMS1cXHVEREY0XFx1RERGNi1cXHVEREY5XFx1RERGQlxcdURERkNcXHVEREZFXFx1RERGRl18XFx1RERFOFxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREU5XFx1RERFQi1cXHVEREVFXFx1RERGMC1cXHVEREY3XFx1RERGQS1cXHVEREZGXXxcXHVEREU5XFx1RDgzQ1tcXHVEREVBXFx1RERFQ1xcdURERUZcXHVEREYwXFx1RERGMlxcdURERjRcXHVEREZGXXxcXHVEREVBXFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUFcXHVEREVDXFx1RERFRFxcdURERjctXFx1RERGQV18XFx1RERFQlxcdUQ4M0NbXFx1RERFRS1cXHVEREYwXFx1RERGMlxcdURERjRcXHVEREY3XXxcXHVEREVDXFx1RDgzQ1tcXHVEREU2XFx1RERFN1xcdURERTktXFx1RERFRVxcdURERjEtXFx1RERGM1xcdURERjUtXFx1RERGQVxcdURERkNcXHVEREZFXXxcXHVEREVEXFx1RDgzQ1tcXHVEREYwXFx1RERGMlxcdURERjNcXHVEREY3XFx1RERGOVxcdURERkFdfFxcdURERUVcXHVEODNDW1xcdURERTgtXFx1RERFQVxcdURERjEtXFx1RERGNFxcdURERjYtXFx1RERGOV18XFx1RERFRlxcdUQ4M0NbXFx1RERFQVxcdURERjJcXHVEREY0XFx1RERGNV18XFx1RERGMFxcdUQ4M0NbXFx1RERFQVxcdURERUMtXFx1RERFRVxcdURERjJcXHVEREYzXFx1RERGNVxcdURERjdcXHVEREZDXFx1RERGRVxcdURERkZdfFxcdURERjFcXHVEODNDW1xcdURERTYtXFx1RERFOFxcdURERUVcXHVEREYwXFx1RERGNy1cXHVEREZCXFx1RERGRV18XFx1RERGMlxcdUQ4M0NbXFx1RERFNlxcdURERTgtXFx1RERFRFxcdURERjAtXFx1RERGRl18XFx1RERGM1xcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBLVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjRcXHVEREY1XFx1RERGN1xcdURERkFcXHVEREZGXXxcXHVEREY0XFx1RDgzQ1xcdURERjJ8XFx1RERGNVxcdUQ4M0NbXFx1RERFNlxcdURERUEtXFx1RERFRFxcdURERjAtXFx1RERGM1xcdURERjctXFx1RERGOVxcdURERkNcXHVEREZFXXxcXHVEREY2XFx1RDgzQ1xcdURERTZ8XFx1RERGN1xcdUQ4M0NbXFx1RERFQVxcdURERjRcXHVEREY4XFx1RERGQVxcdURERkNdfFxcdURERjhcXHVEODNDW1xcdURERTYtXFx1RERFQVxcdURERUMtXFx1RERGNFxcdURERjctXFx1RERGOVxcdURERkJcXHVEREZELVxcdURERkZdfFxcdURERjlcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRFxcdURERUYtXFx1RERGNFxcdURERjdcXHVEREY5XFx1RERGQlxcdURERkNcXHVEREZGXXxcXHVEREZBXFx1RDgzQ1tcXHVEREU2XFx1RERFQ1xcdURERjJcXHVEREYzXFx1RERGOFxcdURERkVcXHVEREZGXXxcXHVEREZCXFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUFcXHVEREVDXFx1RERFRVxcdURERjNcXHVEREZBXXxcXHVEREZDXFx1RDgzQ1tcXHVEREVCXFx1RERGOF18XFx1RERGRFxcdUQ4M0NcXHVEREYwfFxcdURERkVcXHVEODNDW1xcdURERUFcXHVEREY5XXxcXHVEREZGXFx1RDgzQ1tcXHVEREU2XFx1RERGMlxcdURERkNdfFxcdURGNDQoPzpcXHUyMDBEXFx1RDgzRFxcdURGRUIpP3xcXHVERjRCKD86XFx1MjAwRFxcdUQ4M0RcXHVERkU5KT98XFx1REZDMyg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRCg/OltcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xcXHUyN0ExXFx1RkUwRj8pKT98XFx1REZGM1xcdUZFMEY/KD86XFx1MjAwRCg/OlxcdTI2QTdcXHVGRTBGP3xcXHVEODNDXFx1REYwOCkpP3xcXHVERkY0KD86XFx1MjAwRFxcdTI2MjBcXHVGRTBGP3xcXHVEQjQwXFx1REM2N1xcdURCNDBcXHVEQzYyXFx1REI0MCg/OlxcdURDNjVcXHVEQjQwXFx1REM2RVxcdURCNDBcXHVEQzY3fFxcdURDNzNcXHVEQjQwXFx1REM2M1xcdURCNDBcXHVEQzc0fFxcdURDNzdcXHVEQjQwXFx1REM2Q1xcdURCNDBcXHVEQzczKVxcdURCNDBcXHVEQzdGKT8pfFxcdUQ4M0QoPzpbXFx1REMzRlxcdURDRkRcXHVERDQ5XFx1REQ0QVxcdURENkZcXHVERDcwXFx1REQ3M1xcdURENzYtXFx1REQ3OVxcdUREODdcXHVERDhBLVxcdUREOERcXHVEREE1XFx1RERBOFxcdUREQjFcXHVEREIyXFx1RERCQ1xcdUREQzItXFx1RERDNFxcdURERDEtXFx1REREM1xcdUREREMtXFx1RERERVxcdURERTFcXHVEREUzXFx1RERFOFxcdURERUZcXHVEREYzXFx1RERGQVxcdURFQ0JcXHVERUNELVxcdURFQ0ZcXHVERUUwLVxcdURFRTVcXHVERUU5XFx1REVGMFxcdURFRjNdXFx1RkUwRj98W1xcdURDNDJcXHVEQzQzXFx1REM0Ni1cXHVEQzUwXFx1REM2NlxcdURDNjdcXHVEQzZCLVxcdURDNkRcXHVEQzcyXFx1REM3NC1cXHVEQzc2XFx1REM3OFxcdURDN0NcXHVEQzgzXFx1REM4NVxcdURDOEZcXHVEQzkxXFx1RENBQVxcdUREN0FcXHVERDk1XFx1REQ5NlxcdURFNENcXHVERTRGXFx1REVDMFxcdURFQ0NdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdURDNkUtXFx1REM3MVxcdURDNzNcXHVEQzc3XFx1REM4MVxcdURDODJcXHVEQzg2XFx1REM4N1xcdURFNDUtXFx1REU0N1xcdURFNEJcXHVERTREXFx1REU0RVxcdURFQTNcXHVERUI0XFx1REVCNV0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xbXFx1REQ3NFxcdUREOTBdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUZFMEYpP3xbXFx1REMwMC1cXHVEQzA3XFx1REMwOS1cXHVEQzE0XFx1REMxNi1cXHVEQzI1XFx1REMyNy1cXHVEQzNBXFx1REMzQy1cXHVEQzNFXFx1REM0MFxcdURDNDRcXHVEQzQ1XFx1REM1MS1cXHVEQzY1XFx1REM2QVxcdURDNzktXFx1REM3QlxcdURDN0QtXFx1REM4MFxcdURDODRcXHVEQzg4LVxcdURDOEVcXHVEQzkwXFx1REM5Mi1cXHVEQ0E5XFx1RENBQi1cXHVEQ0ZDXFx1RENGRi1cXHVERDNEXFx1REQ0Qi1cXHVERDRFXFx1REQ1MC1cXHVERDY3XFx1RERBNFxcdURERkItXFx1REUyRFxcdURFMkYtXFx1REUzNFxcdURFMzctXFx1REU0MVxcdURFNDNcXHVERTQ0XFx1REU0OC1cXHVERTRBXFx1REU4MC1cXHVERUEyXFx1REVBNC1cXHVERUIzXFx1REVCNy1cXHVERUJGXFx1REVDMS1cXHVERUM1XFx1REVEMC1cXHVERUQyXFx1REVENS1cXHVERUQ4XFx1REVEQy1cXHVERURGXFx1REVFQlxcdURFRUNcXHVERUY0LVxcdURFRkNcXHVERkUwLVxcdURGRUJcXHVERkYwXXxcXHVEQzA4KD86XFx1MjAwRFxcdTJCMUIpP3xcXHVEQzE1KD86XFx1MjAwRFxcdUQ4M0VcXHVEREJBKT98XFx1REMyNig/OlxcdTIwMEQoPzpcXHUyQjFCfFxcdUQ4M0RcXHVERDI1KSk/fFxcdURDM0IoPzpcXHUyMDBEXFx1Mjc0NFxcdUZFMEY/KT98XFx1REM0MVxcdUZFMEY/KD86XFx1MjAwRFxcdUQ4M0RcXHVEREU4XFx1RkUwRj8pP3xcXHVEQzY4KD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjh8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV1cXHUyMDBEXFx1RDgzRCg/OlxcdURDNjYoPzpcXHUyMDBEXFx1RDgzRFxcdURDNjYpP3xcXHVEQzY3KD86XFx1MjAwRFxcdUQ4M0RbXFx1REM2NlxcdURDNjddKT8pfFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdURDNjYoPzpcXHUyMDBEXFx1RDgzRFxcdURDNjYpP3xcXHVEQzY3KD86XFx1MjAwRFxcdUQ4M0RbXFx1REM2NlxcdURDNjddKT8pfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXSkpfFxcdUQ4M0MoPzpcXHVERkZCKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRCg/OltcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdURDMzBcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkMtXFx1REZGRl0pfFxcdUQ4M0UoPzpbXFx1REQxRFxcdURFRUZdXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdfFtcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdKSkpP3xcXHVERkZDKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRCg/OltcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdURDMzBcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKXxcXHVEODNFKD86W1xcdUREMURcXHVERUVGXVxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl18W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM10pKSk/fFxcdURGRkQoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEKD86W1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1REMzMFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl0pfFxcdUQ4M0UoPzpbXFx1REQxRFxcdURFRUZdXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXXxbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXSkpKT98XFx1REZGRSg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9cXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzMwXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSl8XFx1RDgzRSg/OltcXHVERDFEXFx1REVFRl1cXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdfFtcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdKSkpP3xcXHVERkZGKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRCg/OltcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdURDMzBcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRV0pfFxcdUQ4M0UoPzpbXFx1REQxRFxcdURFRUZdXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdfFtcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdKSkpPykpP3xcXHVEQzY5KD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1tcXHVEQzY4XFx1REM2OV18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRCg/OltcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdURDNjYoPzpcXHUyMDBEXFx1RDgzRFxcdURDNjYpP3xcXHVEQzY3KD86XFx1MjAwRFxcdUQ4M0RbXFx1REM2NlxcdURDNjddKT98XFx1REM2OVxcdTIwMERcXHVEODNEKD86XFx1REM2Nig/OlxcdTIwMERcXHVEODNEXFx1REM2Nik/fFxcdURDNjcoPzpcXHUyMDBEXFx1RDgzRFtcXHVEQzY2XFx1REM2N10pPykpfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXSkpfFxcdUQ4M0MoPzpcXHVERkZCKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzMwXFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XVxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXXxcXHVERUVGXFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKSkpP3xcXHVERkZDKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzMwXFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXSl8XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdfFxcdURFRUZcXHUyMDBEXFx1RDgzRFxcdURDNjlcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKSkpP3xcXHVERkZEKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzMwXFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXSl8XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdfFxcdURFRUZcXHUyMDBEXFx1RDgzRFxcdURDNjlcXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKSkpP3xcXHVERkZFKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzMwXFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSl8XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdfFxcdURFRUZcXHUyMDBEXFx1RDgzRFxcdURDNjlcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdKSkpP3xcXHVERkZGKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzMwXFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XVxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXXxcXHVERUVGXFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKSkpPykpP3xcXHVERDc1KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUZFMEYpPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xcXHVERTJFKD86XFx1MjAwRFxcdUQ4M0RcXHVEQ0E4KT98XFx1REUzNSg/OlxcdTIwMERcXHVEODNEXFx1RENBQik/fFxcdURFMzYoPzpcXHUyMDBEXFx1RDgzQ1xcdURGMkJcXHVGRTBGPyk/fFxcdURFNDIoPzpcXHUyMDBEW1xcdTIxOTRcXHUyMTk1XVxcdUZFMEY/KT98XFx1REVCNig/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRCg/OltcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xcXHUyN0ExXFx1RkUwRj8pKT8pfFxcdUQ4M0UoPzpbXFx1REQwQ1xcdUREMEZcXHVERDE4LVxcdUREMUZcXHVERDMwLVxcdUREMzRcXHVERDM2XFx1REQ3N1xcdUREQjVcXHVEREI2XFx1RERCQlxcdURERDJcXHVEREQzXFx1RERENVxcdURFQzMtXFx1REVDNVxcdURFRjBcXHVERUYyLVxcdURFRjhdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdUREMjZcXHVERDM1XFx1REQzNy1cXHVERDM5XFx1REQzQy1cXHVERDNFXFx1RERCOFxcdUREQjlcXHVERENEXFx1RERDRlxcdURERDRcXHVEREQ2LVxcdURERERdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98W1xcdUREREVcXHVERERGXSg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xbXFx1REQwRFxcdUREMEVcXHVERDEwLVxcdUREMTdcXHVERDIwLVxcdUREMjVcXHVERDI3LVxcdUREMkZcXHVERDNBXFx1REQzRi1cXHVERDQ1XFx1REQ0Ny1cXHVERDc2XFx1REQ3OC1cXHVEREI0XFx1RERCN1xcdUREQkFcXHVEREJDLVxcdUREQ0NcXHVEREQwXFx1RERFMC1cXHVEREZGXFx1REU3MC1cXHVERTdDXFx1REU4MC1cXHVERThBXFx1REU4RS1cXHVERUMyXFx1REVDNlxcdURFQzhcXHVERUNELVxcdURFRENcXHVERURGLVxcdURFRUFcXHVERUVGXXxcXHVERENFKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEKD86W1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFxcdTI3QTFcXHVGRTBGPykpP3xcXHVEREQxKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM1xcdURFNzBdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDF8XFx1REREMVxcdTIwMERcXHVEODNFXFx1REREMig/OlxcdTIwMERcXHVEODNFXFx1REREMik/fFxcdURERDIoPzpcXHUyMDBEXFx1RDgzRVxcdURERDIpPykpfFxcdUQ4M0MoPzpcXHVERkZCKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkMtXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzMwXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM1xcdURFNzBdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1REVFRlxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXSkpKT98XFx1REZGQyg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRCg/OltcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdURDMzBcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM1xcdURFNzBdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1REVFRlxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl0pKSk/fFxcdURGRkQoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzMwXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXSl8XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNcXHVERTcwXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdURFRUZcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKSkpP3xcXHVERkZFKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEKD86W1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1REMzMFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZEXFx1REZGRl0pfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXFx1REU3MF18XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVERUVGXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSkpKT98XFx1REZGRig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEKD86W1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1REMzMFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSl8XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNcXHVERTcwXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdURFRUZcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRV0pKSk/KSk/fFxcdURFRjEoPzpcXHVEODNDKD86XFx1REZGQig/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXSk/fFxcdURGRkMoPzpcXHUyMDBEXFx1RDgzRVxcdURFRjJcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKT98XFx1REZGRCg/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl0pP3xcXHVERkZFKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSk/fFxcdURGRkYoPzpcXHUyMDBEXFx1RDgzRVxcdURFRjJcXHVEODNDW1xcdURGRkItXFx1REZGRV0pPykpPykvZztcbn07XG4iLCJpbXBvcnQgc3RyaXBBbnNpIGZyb20gJ3N0cmlwLWFuc2knO1xuaW1wb3J0IHtlYXN0QXNpYW5XaWR0aH0gZnJvbSAnZ2V0LWVhc3QtYXNpYW4td2lkdGgnO1xuaW1wb3J0IGVtb2ppUmVnZXggZnJvbSAnZW1vamktcmVnZXgnO1xuXG5jb25zdCBzZWdtZW50ZXIgPSBuZXcgSW50bC5TZWdtZW50ZXIoKTtcblxuY29uc3QgZGVmYXVsdElnbm9yYWJsZUNvZGVQb2ludFJlZ2V4ID0gL15cXHB7RGVmYXVsdF9JZ25vcmFibGVfQ29kZV9Qb2ludH0kL3U7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0cmluZ1dpZHRoKHN0cmluZywgb3B0aW9ucyA9IHt9KSB7XG5cdGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJyB8fCBzdHJpbmcubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRjb25zdCB7XG5cdFx0YW1iaWd1b3VzSXNOYXJyb3cgPSB0cnVlLFxuXHRcdGNvdW50QW5zaUVzY2FwZUNvZGVzID0gZmFsc2UsXG5cdH0gPSBvcHRpb25zO1xuXG5cdGlmICghY291bnRBbnNpRXNjYXBlQ29kZXMpIHtcblx0XHRzdHJpbmcgPSBzdHJpcEFuc2koc3RyaW5nKTtcblx0fVxuXG5cdGlmIChzdHJpbmcubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRsZXQgd2lkdGggPSAwO1xuXHRjb25zdCBlYXN0QXNpYW5XaWR0aE9wdGlvbnMgPSB7YW1iaWd1b3VzQXNXaWRlOiAhYW1iaWd1b3VzSXNOYXJyb3d9O1xuXG5cdGZvciAoY29uc3Qge3NlZ21lbnQ6IGNoYXJhY3Rlcn0gb2Ygc2VnbWVudGVyLnNlZ21lbnQoc3RyaW5nKSkge1xuXHRcdGNvbnN0IGNvZGVQb2ludCA9IGNoYXJhY3Rlci5jb2RlUG9pbnRBdCgwKTtcblxuXHRcdC8vIElnbm9yZSBjb250cm9sIGNoYXJhY3RlcnNcblx0XHRpZiAoY29kZVBvaW50IDw9IDB4MUYgfHwgKGNvZGVQb2ludCA+PSAweDdGICYmIGNvZGVQb2ludCA8PSAweDlGKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Ly8gSWdub3JlIHplcm8td2lkdGggY2hhcmFjdGVyc1xuXHRcdGlmIChcblx0XHRcdChjb2RlUG9pbnQgPj0gMHgyMF8wQiAmJiBjb2RlUG9pbnQgPD0gMHgyMF8wRikgLy8gWmVyby13aWR0aCBzcGFjZSwgbm9uLWpvaW5lciwgam9pbmVyLCBsZWZ0LXRvLXJpZ2h0IG1hcmssIHJpZ2h0LXRvLWxlZnQgbWFya1xuXHRcdFx0fHwgY29kZVBvaW50ID09PSAweEZFX0ZGIC8vIFplcm8td2lkdGggbm8tYnJlYWsgc3BhY2Vcblx0XHQpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIElnbm9yZSBjb21iaW5pbmcgY2hhcmFjdGVyc1xuXHRcdGlmIChcblx0XHRcdChjb2RlUG9pbnQgPj0gMHgzXzAwICYmIGNvZGVQb2ludCA8PSAweDNfNkYpIC8vIENvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrc1xuXHRcdFx0fHwgKGNvZGVQb2ludCA+PSAweDFBX0IwICYmIGNvZGVQb2ludCA8PSAweDFBX0ZGKSAvLyBDb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3MgZXh0ZW5kZWRcblx0XHRcdHx8IChjb2RlUG9pbnQgPj0gMHgxRF9DMCAmJiBjb2RlUG9pbnQgPD0gMHgxRF9GRikgLy8gQ29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzIHN1cHBsZW1lbnRcblx0XHRcdHx8IChjb2RlUG9pbnQgPj0gMHgyMF9EMCAmJiBjb2RlUG9pbnQgPD0gMHgyMF9GRikgLy8gQ29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzIGZvciBzeW1ib2xzXG5cdFx0XHR8fCAoY29kZVBvaW50ID49IDB4RkVfMjAgJiYgY29kZVBvaW50IDw9IDB4RkVfMkYpIC8vIENvbWJpbmluZyBoYWxmIG1hcmtzXG5cdFx0KSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHQvLyBJZ25vcmUgc3Vycm9nYXRlIHBhaXJzXG5cdFx0aWYgKGNvZGVQb2ludCA+PSAweEQ4XzAwICYmIGNvZGVQb2ludCA8PSAweERGX0ZGKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHQvLyBJZ25vcmUgdmFyaWF0aW9uIHNlbGVjdG9yc1xuXHRcdGlmIChjb2RlUG9pbnQgPj0gMHhGRV8wMCAmJiBjb2RlUG9pbnQgPD0gMHhGRV8wRikge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Ly8gVGhpcyBjb3ZlcnMgc29tZSBvZiB0aGUgYWJvdmUgY2FzZXMsIGJ1dCB3ZSBzdGlsbCBrZWVwIHRoZW0gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuXG5cdFx0aWYgKGRlZmF1bHRJZ25vcmFibGVDb2RlUG9pbnRSZWdleC50ZXN0KGNoYXJhY3RlcikpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIFRPRE86IFVzZSBgL1xccHtSR0lfRW1vaml9L3ZgIHdoZW4gdGFyZ2V0aW5nIE5vZGUuanMgMjAuXG5cdFx0aWYgKGVtb2ppUmVnZXgoKS50ZXN0KGNoYXJhY3RlcikpIHtcblx0XHRcdHdpZHRoICs9IDI7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHR3aWR0aCArPSBlYXN0QXNpYW5XaWR0aChjb2RlUG9pbnQsIGVhc3RBc2lhbldpZHRoT3B0aW9ucyk7XG5cdH1cblxuXHRyZXR1cm4gd2lkdGg7XG59XG4iLCJjb25zdCBBTlNJX0JBQ0tHUk9VTkRfT0ZGU0VUID0gMTA7XG5cbmNvbnN0IHdyYXBBbnNpMTYgPSAob2Zmc2V0ID0gMCkgPT4gY29kZSA9PiBgXFx1MDAxQlske2NvZGUgKyBvZmZzZXR9bWA7XG5cbmNvbnN0IHdyYXBBbnNpMjU2ID0gKG9mZnNldCA9IDApID0+IGNvZGUgPT4gYFxcdTAwMUJbJHszOCArIG9mZnNldH07NTske2NvZGV9bWA7XG5cbmNvbnN0IHdyYXBBbnNpMTZtID0gKG9mZnNldCA9IDApID0+IChyZWQsIGdyZWVuLCBibHVlKSA9PiBgXFx1MDAxQlskezM4ICsgb2Zmc2V0fTsyOyR7cmVkfTske2dyZWVufTske2JsdWV9bWA7XG5cbmNvbnN0IHN0eWxlcyA9IHtcblx0bW9kaWZpZXI6IHtcblx0XHRyZXNldDogWzAsIDBdLFxuXHRcdC8vIDIxIGlzbid0IHdpZGVseSBzdXBwb3J0ZWQgYW5kIDIyIGRvZXMgdGhlIHNhbWUgdGhpbmdcblx0XHRib2xkOiBbMSwgMjJdLFxuXHRcdGRpbTogWzIsIDIyXSxcblx0XHRpdGFsaWM6IFszLCAyM10sXG5cdFx0dW5kZXJsaW5lOiBbNCwgMjRdLFxuXHRcdG92ZXJsaW5lOiBbNTMsIDU1XSxcblx0XHRpbnZlcnNlOiBbNywgMjddLFxuXHRcdGhpZGRlbjogWzgsIDI4XSxcblx0XHRzdHJpa2V0aHJvdWdoOiBbOSwgMjldLFxuXHR9LFxuXHRjb2xvcjoge1xuXHRcdGJsYWNrOiBbMzAsIDM5XSxcblx0XHRyZWQ6IFszMSwgMzldLFxuXHRcdGdyZWVuOiBbMzIsIDM5XSxcblx0XHR5ZWxsb3c6IFszMywgMzldLFxuXHRcdGJsdWU6IFszNCwgMzldLFxuXHRcdG1hZ2VudGE6IFszNSwgMzldLFxuXHRcdGN5YW46IFszNiwgMzldLFxuXHRcdHdoaXRlOiBbMzcsIDM5XSxcblxuXHRcdC8vIEJyaWdodCBjb2xvclxuXHRcdGJsYWNrQnJpZ2h0OiBbOTAsIDM5XSxcblx0XHRncmF5OiBbOTAsIDM5XSwgLy8gQWxpYXMgb2YgYGJsYWNrQnJpZ2h0YFxuXHRcdGdyZXk6IFs5MCwgMzldLCAvLyBBbGlhcyBvZiBgYmxhY2tCcmlnaHRgXG5cdFx0cmVkQnJpZ2h0OiBbOTEsIDM5XSxcblx0XHRncmVlbkJyaWdodDogWzkyLCAzOV0sXG5cdFx0eWVsbG93QnJpZ2h0OiBbOTMsIDM5XSxcblx0XHRibHVlQnJpZ2h0OiBbOTQsIDM5XSxcblx0XHRtYWdlbnRhQnJpZ2h0OiBbOTUsIDM5XSxcblx0XHRjeWFuQnJpZ2h0OiBbOTYsIDM5XSxcblx0XHR3aGl0ZUJyaWdodDogWzk3LCAzOV0sXG5cdH0sXG5cdGJnQ29sb3I6IHtcblx0XHRiZ0JsYWNrOiBbNDAsIDQ5XSxcblx0XHRiZ1JlZDogWzQxLCA0OV0sXG5cdFx0YmdHcmVlbjogWzQyLCA0OV0sXG5cdFx0YmdZZWxsb3c6IFs0MywgNDldLFxuXHRcdGJnQmx1ZTogWzQ0LCA0OV0sXG5cdFx0YmdNYWdlbnRhOiBbNDUsIDQ5XSxcblx0XHRiZ0N5YW46IFs0NiwgNDldLFxuXHRcdGJnV2hpdGU6IFs0NywgNDldLFxuXG5cdFx0Ly8gQnJpZ2h0IGNvbG9yXG5cdFx0YmdCbGFja0JyaWdodDogWzEwMCwgNDldLFxuXHRcdGJnR3JheTogWzEwMCwgNDldLCAvLyBBbGlhcyBvZiBgYmdCbGFja0JyaWdodGBcblx0XHRiZ0dyZXk6IFsxMDAsIDQ5XSwgLy8gQWxpYXMgb2YgYGJnQmxhY2tCcmlnaHRgXG5cdFx0YmdSZWRCcmlnaHQ6IFsxMDEsIDQ5XSxcblx0XHRiZ0dyZWVuQnJpZ2h0OiBbMTAyLCA0OV0sXG5cdFx0YmdZZWxsb3dCcmlnaHQ6IFsxMDMsIDQ5XSxcblx0XHRiZ0JsdWVCcmlnaHQ6IFsxMDQsIDQ5XSxcblx0XHRiZ01hZ2VudGFCcmlnaHQ6IFsxMDUsIDQ5XSxcblx0XHRiZ0N5YW5CcmlnaHQ6IFsxMDYsIDQ5XSxcblx0XHRiZ1doaXRlQnJpZ2h0OiBbMTA3LCA0OV0sXG5cdH0sXG59O1xuXG5leHBvcnQgY29uc3QgbW9kaWZpZXJOYW1lcyA9IE9iamVjdC5rZXlzKHN0eWxlcy5tb2RpZmllcik7XG5leHBvcnQgY29uc3QgZm9yZWdyb3VuZENvbG9yTmFtZXMgPSBPYmplY3Qua2V5cyhzdHlsZXMuY29sb3IpO1xuZXhwb3J0IGNvbnN0IGJhY2tncm91bmRDb2xvck5hbWVzID0gT2JqZWN0LmtleXMoc3R5bGVzLmJnQ29sb3IpO1xuZXhwb3J0IGNvbnN0IGNvbG9yTmFtZXMgPSBbLi4uZm9yZWdyb3VuZENvbG9yTmFtZXMsIC4uLmJhY2tncm91bmRDb2xvck5hbWVzXTtcblxuZnVuY3Rpb24gYXNzZW1ibGVTdHlsZXMoKSB7XG5cdGNvbnN0IGNvZGVzID0gbmV3IE1hcCgpO1xuXG5cdGZvciAoY29uc3QgW2dyb3VwTmFtZSwgZ3JvdXBdIG9mIE9iamVjdC5lbnRyaWVzKHN0eWxlcykpIHtcblx0XHRmb3IgKGNvbnN0IFtzdHlsZU5hbWUsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhncm91cCkpIHtcblx0XHRcdHN0eWxlc1tzdHlsZU5hbWVdID0ge1xuXHRcdFx0XHRvcGVuOiBgXFx1MDAxQlske3N0eWxlWzBdfW1gLFxuXHRcdFx0XHRjbG9zZTogYFxcdTAwMUJbJHtzdHlsZVsxXX1tYCxcblx0XHRcdH07XG5cblx0XHRcdGdyb3VwW3N0eWxlTmFtZV0gPSBzdHlsZXNbc3R5bGVOYW1lXTtcblxuXHRcdFx0Y29kZXMuc2V0KHN0eWxlWzBdLCBzdHlsZVsxXSk7XG5cdFx0fVxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHN0eWxlcywgZ3JvdXBOYW1lLCB7XG5cdFx0XHR2YWx1ZTogZ3JvdXAsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR9KTtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsICdjb2RlcycsIHtcblx0XHR2YWx1ZTogY29kZXMsXG5cdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdH0pO1xuXG5cdHN0eWxlcy5jb2xvci5jbG9zZSA9ICdcXHUwMDFCWzM5bSc7XG5cdHN0eWxlcy5iZ0NvbG9yLmNsb3NlID0gJ1xcdTAwMUJbNDltJztcblxuXHRzdHlsZXMuY29sb3IuYW5zaSA9IHdyYXBBbnNpMTYoKTtcblx0c3R5bGVzLmNvbG9yLmFuc2kyNTYgPSB3cmFwQW5zaTI1NigpO1xuXHRzdHlsZXMuY29sb3IuYW5zaTE2bSA9IHdyYXBBbnNpMTZtKCk7XG5cdHN0eWxlcy5iZ0NvbG9yLmFuc2kgPSB3cmFwQW5zaTE2KEFOU0lfQkFDS0dST1VORF9PRkZTRVQpO1xuXHRzdHlsZXMuYmdDb2xvci5hbnNpMjU2ID0gd3JhcEFuc2kyNTYoQU5TSV9CQUNLR1JPVU5EX09GRlNFVCk7XG5cdHN0eWxlcy5iZ0NvbG9yLmFuc2kxNm0gPSB3cmFwQW5zaTE2bShBTlNJX0JBQ0tHUk9VTkRfT0ZGU0VUKTtcblxuXHQvLyBGcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9RaXgtL2NvbG9yLWNvbnZlcnQvYmxvYi8zZjBlMGQ0ZTkyZTIzNTc5NmNjYjE3ZjZlODVjNzIwOTRhNjUxZjQ5L2NvbnZlcnNpb25zLmpzXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHN0eWxlcywge1xuXHRcdHJnYlRvQW5zaTI1Njoge1xuXHRcdFx0dmFsdWU6IChyZWQsIGdyZWVuLCBibHVlKSA9PiB7XG5cdFx0XHRcdC8vIFdlIHVzZSB0aGUgZXh0ZW5kZWQgZ3JleXNjYWxlIHBhbGV0dGUgaGVyZSwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mXG5cdFx0XHRcdC8vIGJsYWNrIGFuZCB3aGl0ZS4gbm9ybWFsIHBhbGV0dGUgb25seSBoYXMgNCBncmV5c2NhbGUgc2hhZGVzLlxuXHRcdFx0XHRpZiAocmVkID09PSBncmVlbiAmJiBncmVlbiA9PT0gYmx1ZSkge1xuXHRcdFx0XHRcdGlmIChyZWQgPCA4KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gMTY7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHJlZCA+IDI0OCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIDIzMTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gTWF0aC5yb3VuZCgoKHJlZCAtIDgpIC8gMjQ3KSAqIDI0KSArIDIzMjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAxNlxuXHRcdFx0XHRcdCsgKDM2ICogTWF0aC5yb3VuZChyZWQgLyAyNTUgKiA1KSlcblx0XHRcdFx0XHQrICg2ICogTWF0aC5yb3VuZChncmVlbiAvIDI1NSAqIDUpKVxuXHRcdFx0XHRcdCsgTWF0aC5yb3VuZChibHVlIC8gMjU1ICogNSk7XG5cdFx0XHR9LFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0fSxcblx0XHRoZXhUb1JnYjoge1xuXHRcdFx0dmFsdWU6IGhleCA9PiB7XG5cdFx0XHRcdGNvbnN0IG1hdGNoZXMgPSAvW2EtZlxcZF17Nn18W2EtZlxcZF17M30vaS5leGVjKGhleC50b1N0cmluZygxNikpO1xuXHRcdFx0XHRpZiAoIW1hdGNoZXMpIHtcblx0XHRcdFx0XHRyZXR1cm4gWzAsIDAsIDBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IFtjb2xvclN0cmluZ10gPSBtYXRjaGVzO1xuXG5cdFx0XHRcdGlmIChjb2xvclN0cmluZy5sZW5ndGggPT09IDMpIHtcblx0XHRcdFx0XHRjb2xvclN0cmluZyA9IFsuLi5jb2xvclN0cmluZ10ubWFwKGNoYXJhY3RlciA9PiBjaGFyYWN0ZXIgKyBjaGFyYWN0ZXIpLmpvaW4oJycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgaW50ZWdlciA9IE51bWJlci5wYXJzZUludChjb2xvclN0cmluZywgMTYpO1xuXG5cdFx0XHRcdHJldHVybiBbXG5cdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSAqL1xuXHRcdFx0XHRcdChpbnRlZ2VyID4+IDE2KSAmIDB4RkYsXG5cdFx0XHRcdFx0KGludGVnZXIgPj4gOCkgJiAweEZGLFxuXHRcdFx0XHRcdGludGVnZXIgJiAweEZGLFxuXHRcdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tYml0d2lzZSAqL1xuXHRcdFx0XHRdO1xuXHRcdFx0fSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdFx0aGV4VG9BbnNpMjU2OiB7XG5cdFx0XHR2YWx1ZTogaGV4ID0+IHN0eWxlcy5yZ2JUb0Fuc2kyNTYoLi4uc3R5bGVzLmhleFRvUmdiKGhleCkpLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0fSxcblx0XHRhbnNpMjU2VG9BbnNpOiB7XG5cdFx0XHR2YWx1ZTogY29kZSA9PiB7XG5cdFx0XHRcdGlmIChjb2RlIDwgOCkge1xuXHRcdFx0XHRcdHJldHVybiAzMCArIGNvZGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY29kZSA8IDE2KSB7XG5cdFx0XHRcdFx0cmV0dXJuIDkwICsgKGNvZGUgLSA4KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCByZWQ7XG5cdFx0XHRcdGxldCBncmVlbjtcblx0XHRcdFx0bGV0IGJsdWU7XG5cblx0XHRcdFx0aWYgKGNvZGUgPj0gMjMyKSB7XG5cdFx0XHRcdFx0cmVkID0gKCgoY29kZSAtIDIzMikgKiAxMCkgKyA4KSAvIDI1NTtcblx0XHRcdFx0XHRncmVlbiA9IHJlZDtcblx0XHRcdFx0XHRibHVlID0gcmVkO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvZGUgLT0gMTY7XG5cblx0XHRcdFx0XHRjb25zdCByZW1haW5kZXIgPSBjb2RlICUgMzY7XG5cblx0XHRcdFx0XHRyZWQgPSBNYXRoLmZsb29yKGNvZGUgLyAzNikgLyA1O1xuXHRcdFx0XHRcdGdyZWVuID0gTWF0aC5mbG9vcihyZW1haW5kZXIgLyA2KSAvIDU7XG5cdFx0XHRcdFx0Ymx1ZSA9IChyZW1haW5kZXIgJSA2KSAvIDU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IE1hdGgubWF4KHJlZCwgZ3JlZW4sIGJsdWUpICogMjtcblxuXHRcdFx0XHRpZiAodmFsdWUgPT09IDApIHtcblx0XHRcdFx0XHRyZXR1cm4gMzA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuXHRcdFx0XHRsZXQgcmVzdWx0ID0gMzAgKyAoKE1hdGgucm91bmQoYmx1ZSkgPDwgMikgfCAoTWF0aC5yb3VuZChncmVlbikgPDwgMSkgfCBNYXRoLnJvdW5kKHJlZCkpO1xuXG5cdFx0XHRcdGlmICh2YWx1ZSA9PT0gMikge1xuXHRcdFx0XHRcdHJlc3VsdCArPSA2MDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9LFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0fSxcblx0XHRyZ2JUb0Fuc2k6IHtcblx0XHRcdHZhbHVlOiAocmVkLCBncmVlbiwgYmx1ZSkgPT4gc3R5bGVzLmFuc2kyNTZUb0Fuc2koc3R5bGVzLnJnYlRvQW5zaTI1NihyZWQsIGdyZWVuLCBibHVlKSksXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR9LFxuXHRcdGhleFRvQW5zaToge1xuXHRcdFx0dmFsdWU6IGhleCA9PiBzdHlsZXMuYW5zaTI1NlRvQW5zaShzdHlsZXMuaGV4VG9BbnNpMjU2KGhleCkpLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0fSxcblx0fSk7XG5cblx0cmV0dXJuIHN0eWxlcztcbn1cblxuY29uc3QgYW5zaVN0eWxlcyA9IGFzc2VtYmxlU3R5bGVzKCk7XG5cbmV4cG9ydCBkZWZhdWx0IGFuc2lTdHlsZXM7XG4iLCJpbXBvcnQgc3RyaW5nV2lkdGggZnJvbSAnc3RyaW5nLXdpZHRoJztcbmltcG9ydCBzdHJpcEFuc2kgZnJvbSAnc3RyaXAtYW5zaSc7XG5pbXBvcnQgYW5zaVN0eWxlcyBmcm9tICdhbnNpLXN0eWxlcyc7XG5cbmNvbnN0IEVTQ0FQRVMgPSBuZXcgU2V0KFtcblx0J1xcdTAwMUInLFxuXHQnXFx1MDA5QicsXG5dKTtcblxuY29uc3QgRU5EX0NPREUgPSAzOTtcbmNvbnN0IEFOU0lfRVNDQVBFX0JFTEwgPSAnXFx1MDAwNyc7XG5jb25zdCBBTlNJX0NTSSA9ICdbJztcbmNvbnN0IEFOU0lfT1NDID0gJ10nO1xuY29uc3QgQU5TSV9TR1JfVEVSTUlOQVRPUiA9ICdtJztcbmNvbnN0IEFOU0lfRVNDQVBFX0xJTksgPSBgJHtBTlNJX09TQ304OztgO1xuXG5jb25zdCB3cmFwQW5zaUNvZGUgPSBjb2RlID0+IGAke0VTQ0FQRVMudmFsdWVzKCkubmV4dCgpLnZhbHVlfSR7QU5TSV9DU0l9JHtjb2RlfSR7QU5TSV9TR1JfVEVSTUlOQVRPUn1gO1xuY29uc3Qgd3JhcEFuc2lIeXBlcmxpbmsgPSB1cmwgPT4gYCR7RVNDQVBFUy52YWx1ZXMoKS5uZXh0KCkudmFsdWV9JHtBTlNJX0VTQ0FQRV9MSU5LfSR7dXJsfSR7QU5TSV9FU0NBUEVfQkVMTH1gO1xuXG4vLyBDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB3b3JkcyBzcGxpdCBvbiAnICcsIGlnbm9yaW5nXG4vLyB0aGUgZXh0cmEgY2hhcmFjdGVycyBhZGRlZCBieSBhbnNpIGVzY2FwZSBjb2Rlc1xuY29uc3Qgd29yZExlbmd0aHMgPSBzdHJpbmcgPT4gc3RyaW5nLnNwbGl0KCcgJykubWFwKGNoYXJhY3RlciA9PiBzdHJpbmdXaWR0aChjaGFyYWN0ZXIpKTtcblxuLy8gV3JhcCBhIGxvbmcgd29yZCBhY3Jvc3MgbXVsdGlwbGUgcm93c1xuLy8gQW5zaSBlc2NhcGUgY29kZXMgZG8gbm90IGNvdW50IHRvd2FyZHMgbGVuZ3RoXG5jb25zdCB3cmFwV29yZCA9IChyb3dzLCB3b3JkLCBjb2x1bW5zKSA9PiB7XG5cdGNvbnN0IGNoYXJhY3RlcnMgPSBbLi4ud29yZF07XG5cblx0bGV0IGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG5cdGxldCBpc0luc2lkZUxpbmtFc2NhcGUgPSBmYWxzZTtcblx0bGV0IHZpc2libGUgPSBzdHJpbmdXaWR0aChzdHJpcEFuc2kocm93cy5hdCgtMSkpKTtcblxuXHRmb3IgKGNvbnN0IFtpbmRleCwgY2hhcmFjdGVyXSBvZiBjaGFyYWN0ZXJzLmVudHJpZXMoKSkge1xuXHRcdGNvbnN0IGNoYXJhY3Rlckxlbmd0aCA9IHN0cmluZ1dpZHRoKGNoYXJhY3Rlcik7XG5cblx0XHRpZiAodmlzaWJsZSArIGNoYXJhY3Rlckxlbmd0aCA8PSBjb2x1bW5zKSB7XG5cdFx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gKz0gY2hhcmFjdGVyO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyb3dzLnB1c2goY2hhcmFjdGVyKTtcblx0XHRcdHZpc2libGUgPSAwO1xuXHRcdH1cblxuXHRcdGlmIChFU0NBUEVTLmhhcyhjaGFyYWN0ZXIpKSB7XG5cdFx0XHRpc0luc2lkZUVzY2FwZSA9IHRydWU7XG5cblx0XHRcdGNvbnN0IGFuc2lFc2NhcGVMaW5rQ2FuZGlkYXRlID0gY2hhcmFjdGVycy5zbGljZShpbmRleCArIDEsIGluZGV4ICsgMSArIEFOU0lfRVNDQVBFX0xJTksubGVuZ3RoKS5qb2luKCcnKTtcblx0XHRcdGlzSW5zaWRlTGlua0VzY2FwZSA9IGFuc2lFc2NhcGVMaW5rQ2FuZGlkYXRlID09PSBBTlNJX0VTQ0FQRV9MSU5LO1xuXHRcdH1cblxuXHRcdGlmIChpc0luc2lkZUVzY2FwZSkge1xuXHRcdFx0aWYgKGlzSW5zaWRlTGlua0VzY2FwZSkge1xuXHRcdFx0XHRpZiAoY2hhcmFjdGVyID09PSBBTlNJX0VTQ0FQRV9CRUxMKSB7XG5cdFx0XHRcdFx0aXNJbnNpZGVFc2NhcGUgPSBmYWxzZTtcblx0XHRcdFx0XHRpc0luc2lkZUxpbmtFc2NhcGUgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChjaGFyYWN0ZXIgPT09IEFOU0lfU0dSX1RFUk1JTkFUT1IpIHtcblx0XHRcdFx0aXNJbnNpZGVFc2NhcGUgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0dmlzaWJsZSArPSBjaGFyYWN0ZXJMZW5ndGg7XG5cblx0XHRpZiAodmlzaWJsZSA9PT0gY29sdW1ucyAmJiBpbmRleCA8IGNoYXJhY3RlcnMubGVuZ3RoIC0gMSkge1xuXHRcdFx0cm93cy5wdXNoKCcnKTtcblx0XHRcdHZpc2libGUgPSAwO1xuXHRcdH1cblx0fVxuXG5cdC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgbGFzdCByb3cgd2UgY29weSBvdmVyIGlzIG9ubHlcblx0Ly8gYW5zaSBlc2NhcGUgY2hhcmFjdGVycywgaGFuZGxlIHRoaXMgZWRnZS1jYXNlXG5cdGlmICghdmlzaWJsZSAmJiByb3dzLmF0KC0xKS5sZW5ndGggPiAwICYmIHJvd3MubGVuZ3RoID4gMSkge1xuXHRcdHJvd3Nbcm93cy5sZW5ndGggLSAyXSArPSByb3dzLnBvcCgpO1xuXHR9XG59O1xuXG4vLyBUcmltcyBzcGFjZXMgZnJvbSBhIHN0cmluZyBpZ25vcmluZyBpbnZpc2libGUgc2VxdWVuY2VzXG5jb25zdCBzdHJpbmdWaXNpYmxlVHJpbVNwYWNlc1JpZ2h0ID0gc3RyaW5nID0+IHtcblx0Y29uc3Qgd29yZHMgPSBzdHJpbmcuc3BsaXQoJyAnKTtcblx0bGV0IGxhc3QgPSB3b3Jkcy5sZW5ndGg7XG5cblx0d2hpbGUgKGxhc3QgPiAwKSB7XG5cdFx0aWYgKHN0cmluZ1dpZHRoKHdvcmRzW2xhc3QgLSAxXSkgPiAwKSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRsYXN0LS07XG5cdH1cblxuXHRpZiAobGFzdCA9PT0gd29yZHMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIHN0cmluZztcblx0fVxuXG5cdHJldHVybiB3b3Jkcy5zbGljZSgwLCBsYXN0KS5qb2luKCcgJykgKyB3b3Jkcy5zbGljZShsYXN0KS5qb2luKCcnKTtcbn07XG5cbi8vIFRoZSB3cmFwLWFuc2kgbW9kdWxlIGNhbiBiZSBpbnZva2VkIGluIGVpdGhlciAnaGFyZCcgb3IgJ3NvZnQnIHdyYXAgbW9kZS5cbi8vXG4vLyAnaGFyZCcgd2lsbCBuZXZlciBhbGxvdyBhIHN0cmluZyB0byB0YWtlIHVwIG1vcmUgdGhhbiBjb2x1bW5zIGNoYXJhY3RlcnMuXG4vL1xuLy8gJ3NvZnQnIGFsbG93cyBsb25nIHdvcmRzIHRvIGV4cGFuZCBwYXN0IHRoZSBjb2x1bW4gbGVuZ3RoLlxuY29uc3QgZXhlYyA9IChzdHJpbmcsIGNvbHVtbnMsIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRpZiAob3B0aW9ucy50cmltICE9PSBmYWxzZSAmJiBzdHJpbmcudHJpbSgpID09PSAnJykge1xuXHRcdHJldHVybiAnJztcblx0fVxuXG5cdGxldCByZXR1cm5WYWx1ZSA9ICcnO1xuXHRsZXQgZXNjYXBlQ29kZTtcblx0bGV0IGVzY2FwZVVybDtcblxuXHRjb25zdCBsZW5ndGhzID0gd29yZExlbmd0aHMoc3RyaW5nKTtcblx0bGV0IHJvd3MgPSBbJyddO1xuXG5cdGZvciAoY29uc3QgW2luZGV4LCB3b3JkXSBvZiBzdHJpbmcuc3BsaXQoJyAnKS5lbnRyaWVzKCkpIHtcblx0XHRpZiAob3B0aW9ucy50cmltICE9PSBmYWxzZSkge1xuXHRcdFx0cm93c1tyb3dzLmxlbmd0aCAtIDFdID0gcm93cy5hdCgtMSkudHJpbVN0YXJ0KCk7XG5cdFx0fVxuXG5cdFx0bGV0IHJvd0xlbmd0aCA9IHN0cmluZ1dpZHRoKHJvd3MuYXQoLTEpKTtcblxuXHRcdGlmIChpbmRleCAhPT0gMCkge1xuXHRcdFx0aWYgKHJvd0xlbmd0aCA+PSBjb2x1bW5zICYmIChvcHRpb25zLndvcmRXcmFwID09PSBmYWxzZSB8fCBvcHRpb25zLnRyaW0gPT09IGZhbHNlKSkge1xuXHRcdFx0XHQvLyBJZiB3ZSBzdGFydCB3aXRoIGEgbmV3IHdvcmQgYnV0IHRoZSBjdXJyZW50IHJvdyBsZW5ndGggZXF1YWxzIHRoZSBsZW5ndGggb2YgdGhlIGNvbHVtbnMsIGFkZCBhIG5ldyByb3dcblx0XHRcdFx0cm93cy5wdXNoKCcnKTtcblx0XHRcdFx0cm93TGVuZ3RoID0gMDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHJvd0xlbmd0aCA+IDAgfHwgb3B0aW9ucy50cmltID09PSBmYWxzZSkge1xuXHRcdFx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gKz0gJyAnO1xuXHRcdFx0XHRyb3dMZW5ndGgrKztcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJbiAnaGFyZCcgd3JhcCBtb2RlLCB0aGUgbGVuZ3RoIG9mIGEgbGluZSBpcyBuZXZlciBhbGxvd2VkIHRvIGV4dGVuZCBwYXN0ICdjb2x1bW5zJ1xuXHRcdGlmIChvcHRpb25zLmhhcmQgJiYgbGVuZ3Roc1tpbmRleF0gPiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCByZW1haW5pbmdDb2x1bW5zID0gKGNvbHVtbnMgLSByb3dMZW5ndGgpO1xuXHRcdFx0Y29uc3QgYnJlYWtzU3RhcnRpbmdUaGlzTGluZSA9IDEgKyBNYXRoLmZsb29yKChsZW5ndGhzW2luZGV4XSAtIHJlbWFpbmluZ0NvbHVtbnMgLSAxKSAvIGNvbHVtbnMpO1xuXHRcdFx0Y29uc3QgYnJlYWtzU3RhcnRpbmdOZXh0TGluZSA9IE1hdGguZmxvb3IoKGxlbmd0aHNbaW5kZXhdIC0gMSkgLyBjb2x1bW5zKTtcblx0XHRcdGlmIChicmVha3NTdGFydGluZ05leHRMaW5lIDwgYnJlYWtzU3RhcnRpbmdUaGlzTGluZSkge1xuXHRcdFx0XHRyb3dzLnB1c2goJycpO1xuXHRcdFx0fVxuXG5cdFx0XHR3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChyb3dMZW5ndGggKyBsZW5ndGhzW2luZGV4XSA+IGNvbHVtbnMgJiYgcm93TGVuZ3RoID4gMCAmJiBsZW5ndGhzW2luZGV4XSA+IDApIHtcblx0XHRcdGlmIChvcHRpb25zLndvcmRXcmFwID09PSBmYWxzZSAmJiByb3dMZW5ndGggPCBjb2x1bW5zKSB7XG5cdFx0XHRcdHdyYXBXb3JkKHJvd3MsIHdvcmQsIGNvbHVtbnMpO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0cm93cy5wdXNoKCcnKTtcblx0XHR9XG5cblx0XHRpZiAocm93TGVuZ3RoICsgbGVuZ3Roc1tpbmRleF0gPiBjb2x1bW5zICYmIG9wdGlvbnMud29yZFdyYXAgPT09IGZhbHNlKSB7XG5cdFx0XHR3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdHJvd3Nbcm93cy5sZW5ndGggLSAxXSArPSB3b3JkO1xuXHR9XG5cblx0aWYgKG9wdGlvbnMudHJpbSAhPT0gZmFsc2UpIHtcblx0XHRyb3dzID0gcm93cy5tYXAocm93ID0+IHN0cmluZ1Zpc2libGVUcmltU3BhY2VzUmlnaHQocm93KSk7XG5cdH1cblxuXHRjb25zdCBwcmVTdHJpbmcgPSByb3dzLmpvaW4oJ1xcbicpO1xuXHRjb25zdCBwcmUgPSBbLi4ucHJlU3RyaW5nXTtcblxuXHQvLyBXZSBuZWVkIHRvIGtlZXAgYSBzZXBhcmF0ZSBpbmRleCBhcyBgU3RyaW5nI3NsaWNlKClgIHdvcmtzIG9uIFVuaWNvZGUgY29kZSB1bml0cywgd2hpbGUgYHByZWAgaXMgYW4gYXJyYXkgb2YgY29kZXBvaW50cy5cblx0bGV0IHByZVN0cmluZ0luZGV4ID0gMDtcblxuXHRmb3IgKGNvbnN0IFtpbmRleCwgY2hhcmFjdGVyXSBvZiBwcmUuZW50cmllcygpKSB7XG5cdFx0cmV0dXJuVmFsdWUgKz0gY2hhcmFjdGVyO1xuXG5cdFx0aWYgKEVTQ0FQRVMuaGFzKGNoYXJhY3RlcikpIHtcblx0XHRcdGNvbnN0IHtncm91cHN9ID0gbmV3IFJlZ0V4cChgKD86XFxcXCR7QU5TSV9DU0l9KD88Y29kZT5cXFxcZCspbXxcXFxcJHtBTlNJX0VTQ0FQRV9MSU5LfSg/PHVyaT4uKikke0FOU0lfRVNDQVBFX0JFTEx9KWApLmV4ZWMocHJlU3RyaW5nLnNsaWNlKHByZVN0cmluZ0luZGV4KSkgfHwge2dyb3Vwczoge319O1xuXHRcdFx0aWYgKGdyb3Vwcy5jb2RlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc3QgY29kZSA9IE51bWJlci5wYXJzZUZsb2F0KGdyb3Vwcy5jb2RlKTtcblx0XHRcdFx0ZXNjYXBlQ29kZSA9IGNvZGUgPT09IEVORF9DT0RFID8gdW5kZWZpbmVkIDogY29kZTtcblx0XHRcdH0gZWxzZSBpZiAoZ3JvdXBzLnVyaSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGVzY2FwZVVybCA9IGdyb3Vwcy51cmkubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogZ3JvdXBzLnVyaTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBjb2RlID0gYW5zaVN0eWxlcy5jb2Rlcy5nZXQoTnVtYmVyKGVzY2FwZUNvZGUpKTtcblxuXHRcdGlmIChwcmVbaW5kZXggKyAxXSA9PT0gJ1xcbicpIHtcblx0XHRcdGlmIChlc2NhcGVVcmwpIHtcblx0XHRcdFx0cmV0dXJuVmFsdWUgKz0gd3JhcEFuc2lIeXBlcmxpbmsoJycpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZXNjYXBlQ29kZSAmJiBjb2RlKSB7XG5cdFx0XHRcdHJldHVyblZhbHVlICs9IHdyYXBBbnNpQ29kZShjb2RlKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGNoYXJhY3RlciA9PT0gJ1xcbicpIHtcblx0XHRcdGlmIChlc2NhcGVDb2RlICYmIGNvZGUpIHtcblx0XHRcdFx0cmV0dXJuVmFsdWUgKz0gd3JhcEFuc2lDb2RlKGVzY2FwZUNvZGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZXNjYXBlVXJsKSB7XG5cdFx0XHRcdHJldHVyblZhbHVlICs9IHdyYXBBbnNpSHlwZXJsaW5rKGVzY2FwZVVybCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cHJlU3RyaW5nSW5kZXggKz0gY2hhcmFjdGVyLmxlbmd0aDtcblx0fVxuXG5cdHJldHVybiByZXR1cm5WYWx1ZTtcbn07XG5cbi8vIEZvciBlYWNoIG5ld2xpbmUsIGludm9rZSB0aGUgbWV0aG9kIHNlcGFyYXRlbHlcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHdyYXBBbnNpKHN0cmluZywgY29sdW1ucywgb3B0aW9ucykge1xuXHRyZXR1cm4gU3RyaW5nKHN0cmluZylcblx0XHQubm9ybWFsaXplKClcblx0XHQucmVwbGFjZUFsbCgnXFxyXFxuJywgJ1xcbicpXG5cdFx0LnNwbGl0KCdcXG4nKVxuXHRcdC5tYXAobGluZSA9PiBleGVjKGxpbmUsIGNvbHVtbnMsIG9wdGlvbnMpKVxuXHRcdC5qb2luKCdcXG4nKTtcbn1cbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNiwgQ29udHJpYnV0b3JzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYW1lbENhc2Uoc3RyKSB7XG4gICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIGFuIGFyZ3VtZW50IGlzIHByb3ZpZGVkIGFzIGNhbWVsIGNhc2UsIGUuZy4sIGZvb0Jhci5cbiAgICAvLyBieSBlbnN1cmluZyB0aGF0IHRoZSBzdHJpbmcgaXNuJ3QgYWxyZWFkeSBtaXhlZCBjYXNlOlxuICAgIGNvbnN0IGlzQ2FtZWxDYXNlID0gc3RyICE9PSBzdHIudG9Mb3dlckNhc2UoKSAmJiBzdHIgIT09IHN0ci50b1VwcGVyQ2FzZSgpO1xuICAgIGlmICghaXNDYW1lbENhc2UpIHtcbiAgICAgICAgc3RyID0gc3RyLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIGlmIChzdHIuaW5kZXhPZignLScpID09PSAtMSAmJiBzdHIuaW5kZXhPZignXycpID09PSAtMSkge1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbGV0IGNhbWVsY2FzZSA9ICcnO1xuICAgICAgICBsZXQgbmV4dENoclVwcGVyID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGxlYWRpbmdIeXBoZW5zID0gc3RyLm1hdGNoKC9eLSsvKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IGxlYWRpbmdIeXBoZW5zID8gbGVhZGluZ0h5cGhlbnNbMF0ubGVuZ3RoIDogMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGNociA9IHN0ci5jaGFyQXQoaSk7XG4gICAgICAgICAgICBpZiAobmV4dENoclVwcGVyKSB7XG4gICAgICAgICAgICAgICAgbmV4dENoclVwcGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY2hyID0gY2hyLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaSAhPT0gMCAmJiAoY2hyID09PSAnLScgfHwgY2hyID09PSAnXycpKSB7XG4gICAgICAgICAgICAgICAgbmV4dENoclVwcGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNociAhPT0gJy0nICYmIGNociAhPT0gJ18nKSB7XG4gICAgICAgICAgICAgICAgY2FtZWxjYXNlICs9IGNocjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FtZWxjYXNlO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBkZWNhbWVsaXplKHN0ciwgam9pblN0cmluZykge1xuICAgIGNvbnN0IGxvd2VyY2FzZSA9IHN0ci50b0xvd2VyQ2FzZSgpO1xuICAgIGpvaW5TdHJpbmcgPSBqb2luU3RyaW5nIHx8ICctJztcbiAgICBsZXQgbm90Q2FtZWxjYXNlID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hyTG93ZXIgPSBsb3dlcmNhc2UuY2hhckF0KGkpO1xuICAgICAgICBjb25zdCBjaHJTdHJpbmcgPSBzdHIuY2hhckF0KGkpO1xuICAgICAgICBpZiAoY2hyTG93ZXIgIT09IGNoclN0cmluZyAmJiBpID4gMCkge1xuICAgICAgICAgICAgbm90Q2FtZWxjYXNlICs9IGAke2pvaW5TdHJpbmd9JHtsb3dlcmNhc2UuY2hhckF0KGkpfWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBub3RDYW1lbGNhc2UgKz0gY2hyU3RyaW5nO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBub3RDYW1lbGNhc2U7XG59XG5leHBvcnQgZnVuY3Rpb24gbG9va3NMaWtlTnVtYmVyKHgpIHtcbiAgICBpZiAoeCA9PT0gbnVsbCB8fCB4ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyBpZiBsb2FkZWQgZnJvbSBjb25maWcsIG1heSBhbHJlYWR5IGJlIGEgbnVtYmVyLlxuICAgIGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIC8vIGhleGFkZWNpbWFsLlxuICAgIGlmICgvXjB4WzAtOWEtZl0rJC9pLnRlc3QoeCkpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIC8vIGRvbid0IHRyZWF0IDAxMjMgYXMgYSBudW1iZXI7IGFzIGl0IGRyb3BzIHRoZSBsZWFkaW5nICcwJy5cbiAgICBpZiAoL14wW14uXS8udGVzdCh4KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAvXlstXT8oPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKGVbLStdP1xcZCspPyQvLnRlc3QoeCk7XG59XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYsIENvbnRyaWJ1dG9yc1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuICovXG5leHBvcnQgdmFyIERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5O1xuKGZ1bmN0aW9uIChEZWZhdWx0VmFsdWVzRm9yVHlwZUtleSkge1xuICAgIERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5W1wiQk9PTEVBTlwiXSA9IFwiYm9vbGVhblwiO1xuICAgIERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5W1wiU1RSSU5HXCJdID0gXCJzdHJpbmdcIjtcbiAgICBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleVtcIk5VTUJFUlwiXSA9IFwibnVtYmVyXCI7XG4gICAgRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXlbXCJBUlJBWVwiXSA9IFwiYXJyYXlcIjtcbn0pKERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5IHx8IChEZWZhdWx0VmFsdWVzRm9yVHlwZUtleSA9IHt9KSk7XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYsIENvbnRyaWJ1dG9yc1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBwcmVmZXItYXJyb3ctY2FsbGJhY2sgKi9cbmltcG9ydCB7IHRva2VuaXplQXJnU3RyaW5nIH0gZnJvbSAnLi90b2tlbml6ZS1hcmctc3RyaW5nLmpzJztcbmltcG9ydCB7IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5IH0gZnJvbSAnLi95YXJncy1wYXJzZXItdHlwZXMuanMnO1xuaW1wb3J0IHsgY2FtZWxDYXNlLCBkZWNhbWVsaXplLCBsb29rc0xpa2VOdW1iZXIgfSBmcm9tICcuL3N0cmluZy11dGlscy5qcyc7XG5sZXQgbWl4aW47XG5leHBvcnQgY2xhc3MgWWFyZ3NQYXJzZXIge1xuICAgIGNvbnN0cnVjdG9yKF9taXhpbikge1xuICAgICAgICBtaXhpbiA9IF9taXhpbjtcbiAgICB9XG4gICAgcGFyc2UoYXJnc0lucHV0LCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgIGFsaWFzOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBhcnJheTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgYm9vbGVhbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY29uZmlnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBjb25maWdPYmplY3RzOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBjb2VyY2U6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvdW50OiB1bmRlZmluZWQsXG4gICAgICAgICAgICBkZWZhdWx0OiB1bmRlZmluZWQsXG4gICAgICAgICAgICBlbnZQcmVmaXg6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG5hcmc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG5vcm1hbGl6ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgc3RyaW5nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBudW1iZXI6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIF9fOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBrZXk6IHVuZGVmaW5lZFxuICAgICAgICB9LCBvcHRpb25zKTtcbiAgICAgICAgLy8gYWxsb3cgYSBzdHJpbmcgYXJndW1lbnQgdG8gYmUgcGFzc2VkIGluIHJhdGhlclxuICAgICAgICAvLyB0aGFuIGFuIGFyZ3YgYXJyYXkuXG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0b2tlbml6ZUFyZ1N0cmluZyhhcmdzSW5wdXQpO1xuICAgICAgICAvLyB0b2tlbml6ZUFyZ1N0cmluZyBhZGRzIGV4dHJhIHF1b3RlcyB0byBhcmdzIGlmIGFyZ3NJbnB1dCBpcyBhIHN0cmluZ1xuICAgICAgICAvLyBvbmx5IHN0cmlwIHRob3NlIGV4dHJhIHF1b3RlcyBpbiBwcm9jZXNzVmFsdWUgaWYgYXJnc0lucHV0IGlzIGEgc3RyaW5nXG4gICAgICAgIGNvbnN0IGlucHV0SXNTdHJpbmcgPSB0eXBlb2YgYXJnc0lucHV0ID09PSAnc3RyaW5nJztcbiAgICAgICAgLy8gYWxpYXNlcyBtaWdodCBoYXZlIHRyYW5zaXRpdmUgcmVsYXRpb25zaGlwcywgbm9ybWFsaXplIHRoaXMuXG4gICAgICAgIGNvbnN0IGFsaWFzZXMgPSBjb21iaW5lQWxpYXNlcyhPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksIG9wdHMuYWxpYXMpKTtcbiAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgJ2Jvb2xlYW4tbmVnYXRpb24nOiB0cnVlLFxuICAgICAgICAgICAgJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJzogdHJ1ZSxcbiAgICAgICAgICAgICdjb21iaW5lLWFycmF5cyc6IGZhbHNlLFxuICAgICAgICAgICAgJ2RvdC1ub3RhdGlvbic6IHRydWUsXG4gICAgICAgICAgICAnZHVwbGljYXRlLWFyZ3VtZW50cy1hcnJheSc6IHRydWUsXG4gICAgICAgICAgICAnZmxhdHRlbi1kdXBsaWNhdGUtYXJyYXlzJzogdHJ1ZSxcbiAgICAgICAgICAgICdncmVlZHktYXJyYXlzJzogdHJ1ZSxcbiAgICAgICAgICAgICdoYWx0LWF0LW5vbi1vcHRpb24nOiBmYWxzZSxcbiAgICAgICAgICAgICduYXJncy1lYXRzLW9wdGlvbnMnOiBmYWxzZSxcbiAgICAgICAgICAgICduZWdhdGlvbi1wcmVmaXgnOiAnbm8tJyxcbiAgICAgICAgICAgICdwYXJzZS1udW1iZXJzJzogdHJ1ZSxcbiAgICAgICAgICAgICdwYXJzZS1wb3NpdGlvbmFsLW51bWJlcnMnOiB0cnVlLFxuICAgICAgICAgICAgJ3BvcHVsYXRlLS0nOiBmYWxzZSxcbiAgICAgICAgICAgICdzZXQtcGxhY2Vob2xkZXIta2V5JzogZmFsc2UsXG4gICAgICAgICAgICAnc2hvcnQtb3B0aW9uLWdyb3Vwcyc6IHRydWUsXG4gICAgICAgICAgICAnc3RyaXAtYWxpYXNlZCc6IGZhbHNlLFxuICAgICAgICAgICAgJ3N0cmlwLWRhc2hlZCc6IGZhbHNlLFxuICAgICAgICAgICAgJ3Vua25vd24tb3B0aW9ucy1hcy1hcmdzJzogZmFsc2VcbiAgICAgICAgfSwgb3B0cy5jb25maWd1cmF0aW9uKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksIG9wdHMuZGVmYXVsdCk7XG4gICAgICAgIGNvbnN0IGNvbmZpZ09iamVjdHMgPSBvcHRzLmNvbmZpZ09iamVjdHMgfHwgW107XG4gICAgICAgIGNvbnN0IGVudlByZWZpeCA9IG9wdHMuZW52UHJlZml4O1xuICAgICAgICBjb25zdCBub3RGbGFnc09wdGlvbiA9IGNvbmZpZ3VyYXRpb25bJ3BvcHVsYXRlLS0nXTtcbiAgICAgICAgY29uc3Qgbm90RmxhZ3NBcmd2ID0gbm90RmxhZ3NPcHRpb24gPyAnLS0nIDogJ18nO1xuICAgICAgICBjb25zdCBuZXdBbGlhc2VzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdGVkID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgLy8gYWxsb3cgYSBpMThuIGhhbmRsZXIgdG8gYmUgcGFzc2VkIGluLCBkZWZhdWx0IHRvIGEgZmFrZSBvbmUgKHV0aWwuZm9ybWF0KS5cbiAgICAgICAgY29uc3QgX18gPSBvcHRzLl9fIHx8IG1peGluLmZvcm1hdDtcbiAgICAgICAgY29uc3QgZmxhZ3MgPSB7XG4gICAgICAgICAgICBhbGlhc2VzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgYXJyYXlzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgYm9vbHM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBzdHJpbmdzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgbnVtYmVyczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIGNvdW50czogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIG5vcm1hbGl6ZTogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIGNvbmZpZ3M6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBuYXJnczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIGNvZXJjaW9uczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIGtleXM6IFtdXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG5lZ2F0aXZlID0gL14tKFswLTldKyhcXC5bMC05XSspP3xcXC5bMC05XSspJC87XG4gICAgICAgIGNvbnN0IG5lZ2F0ZWRCb29sZWFuID0gbmV3IFJlZ0V4cCgnXi0tJyArIGNvbmZpZ3VyYXRpb25bJ25lZ2F0aW9uLXByZWZpeCddICsgJyguKyknKTtcbiAgICAgICAgW10uY29uY2F0KG9wdHMuYXJyYXkgfHwgW10pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChvcHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHR5cGVvZiBvcHQgPT09ICdvYmplY3QnID8gb3B0LmtleSA6IG9wdDtcbiAgICAgICAgICAgIC8vIGFzc2lnbiB0byBmbGFnc1tib29sc3xzdHJpbmdzfG51bWJlcnNdXG4gICAgICAgICAgICBjb25zdCBhc3NpZ25tZW50ID0gT2JqZWN0LmtleXMob3B0KS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5RmxhZ0tleXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGJvb2xlYW46ICdib29scycsXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZzogJ3N0cmluZ3MnLFxuICAgICAgICAgICAgICAgICAgICBudW1iZXI6ICdudW1iZXJzJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5RmxhZ0tleXNba2V5XTtcbiAgICAgICAgICAgIH0pLmZpbHRlcihCb29sZWFuKS5wb3AoKTtcbiAgICAgICAgICAgIC8vIGFzc2lnbiBrZXkgdG8gYmUgY29lcmNlZFxuICAgICAgICAgICAgaWYgKGFzc2lnbm1lbnQpIHtcbiAgICAgICAgICAgICAgICBmbGFnc1thc3NpZ25tZW50XVtrZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZsYWdzLmFycmF5c1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGZsYWdzLmtleXMucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgW10uY29uY2F0KG9wdHMuYm9vbGVhbiB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgZmxhZ3MuYm9vbHNba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFtdLmNvbmNhdChvcHRzLnN0cmluZyB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgZmxhZ3Muc3RyaW5nc1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGZsYWdzLmtleXMucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgW10uY29uY2F0KG9wdHMubnVtYmVyIHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBmbGFncy5udW1iZXJzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBbXS5jb25jYXQob3B0cy5jb3VudCB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgZmxhZ3MuY291bnRzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBbXS5jb25jYXQob3B0cy5ub3JtYWxpemUgfHwgW10pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGZsYWdzLm5vcm1hbGl6ZVtrZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGZsYWdzLmtleXMucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRzLm5hcmcgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhvcHRzLm5hcmcpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLm5hcmdzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRzLmNvZXJjZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKG9wdHMuY29lcmNlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmNvZXJjaW9uc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5jb25maWcgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRzLmNvbmZpZykgfHwgdHlwZW9mIG9wdHMuY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICBbXS5jb25jYXQob3B0cy5jb25maWcpLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY29uZmlnc1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvcHRzLmNvbmZpZyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhvcHRzLmNvbmZpZykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLmNvbmZpZ3Nba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY3JlYXRlIGEgbG9va3VwIHRhYmxlIHRoYXQgdGFrZXMgaW50byBhY2NvdW50IGFsbFxuICAgICAgICAvLyBjb21iaW5hdGlvbnMgb2YgYWxpYXNlczoge2Y6IFsnZm9vJ10sIGZvbzogWydmJ119XG4gICAgICAgIGV4dGVuZEFsaWFzZXMob3B0cy5rZXksIGFsaWFzZXMsIG9wdHMuZGVmYXVsdCwgZmxhZ3MuYXJyYXlzKTtcbiAgICAgICAgLy8gYXBwbHkgZGVmYXVsdCB2YWx1ZXMgdG8gYWxsIGFsaWFzZXMuXG4gICAgICAgIE9iamVjdC5rZXlzKGRlZmF1bHRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIChmbGFncy5hbGlhc2VzW2tleV0gfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKGFsaWFzKSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbYWxpYXNdID0gZGVmYXVsdHNba2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcbiAgICAgICAgY2hlY2tDb25maWd1cmF0aW9uKCk7XG4gICAgICAgIGxldCBub3RGbGFncyA9IFtdO1xuICAgICAgICBjb25zdCBhcmd2ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLCB7IF86IFtdIH0pO1xuICAgICAgICAvLyBUT0RPKGJjb2UpOiBmb3IgdGhlIGZpcnN0IHBhc3MgYXQgcmVtb3Zpbmcgb2JqZWN0IHByb3RvdHlwZSAgd2UgZGlkbid0XG4gICAgICAgIC8vIHJlbW92ZSBhbGwgcHJvdG90eXBlcyBmcm9tIG9iamVjdHMgcmV0dXJuZWQgYnkgdGhpcyBBUEksIHdlIG1pZ2h0IHdhbnRcbiAgICAgICAgLy8gdG8gZ3JhZHVhbGx5IG1vdmUgdG93YXJkcyBkb2luZyBzby5cbiAgICAgICAgY29uc3QgYXJndlJldHVybiA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZyA9IGFyZ3NbaV07XG4gICAgICAgICAgICBjb25zdCB0cnVuY2F0ZWRBcmcgPSBhcmcucmVwbGFjZSgvXi17Myx9LywgJy0tLScpO1xuICAgICAgICAgICAgbGV0IGJyb2tlbjtcbiAgICAgICAgICAgIGxldCBrZXk7XG4gICAgICAgICAgICBsZXQgbGV0dGVycztcbiAgICAgICAgICAgIGxldCBtO1xuICAgICAgICAgICAgbGV0IG5leHQ7XG4gICAgICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgICAgICAvLyBhbnkgdW5rbm93biBvcHRpb24gKGV4Y2VwdCBmb3IgZW5kLW9mLW9wdGlvbnMsIFwiLS1cIilcbiAgICAgICAgICAgIGlmIChhcmcgIT09ICctLScgJiYgL14tLy50ZXN0KGFyZykgJiYgaXNVbmtub3duT3B0aW9uQXNBcmcoYXJnKSkge1xuICAgICAgICAgICAgICAgIHB1c2hQb3NpdGlvbmFsKGFyZyk7XG4gICAgICAgICAgICAgICAgLy8gLS0tLCAtLS09LCAtLS0tLCBldGMsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0cnVuY2F0ZWRBcmcubWF0Y2goL14tLS0rKD18JCkvKSkge1xuICAgICAgICAgICAgICAgIC8vIG9wdGlvbnMgd2l0aG91dCBrZXkgbmFtZSBhcmUgaW52YWxpZC5cbiAgICAgICAgICAgICAgICBwdXNoUG9zaXRpb25hbChhcmcpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIC8vIC0tIHNlcGFyYXRlZCBieSA9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tLS4rPS8pIHx8ICghY29uZmlndXJhdGlvblsnc2hvcnQtb3B0aW9uLWdyb3VwcyddICYmIGFyZy5tYXRjaCgvXi0uKz0vKSkpIHtcbiAgICAgICAgICAgICAgICAvLyBVc2luZyBbXFxzXFxTXSBpbnN0ZWFkIG9mIC4gYmVjYXVzZSBqcyBkb2Vzbid0IHN1cHBvcnQgdGhlXG4gICAgICAgICAgICAgICAgLy8gJ2RvdGFsbCcgcmVnZXggbW9kaWZpZXIuIFNlZTpcbiAgICAgICAgICAgICAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xMDY4MzA4LzEzMjE2XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaCgvXi0tPyhbXj1dKyk9KFtcXHNcXFNdKikkLyk7XG4gICAgICAgICAgICAgICAgLy8gYXJyYXlzIGZvcm1hdCA9ICctLWY9YSBiIGMnXG4gICAgICAgICAgICAgICAgaWYgKG0gIT09IG51bGwgJiYgQXJyYXkuaXNBcnJheShtKSAmJiBtLmxlbmd0aCA+PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMobVsxXSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdEFycmF5KGksIG1bMV0sIGFyZ3MsIG1bMl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhtWzFdLCBmbGFncy5uYXJncykgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBuYXJncyBmb3JtYXQgPSAnLS1mPW1vbmtleSB3YXNoaW5nIGNhdCdcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXROYXJncyhpLCBtWzFdLCBhcmdzLCBtWzJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhtWzFdLCBtWzJdLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZy5tYXRjaChuZWdhdGVkQm9vbGVhbikgJiYgY29uZmlndXJhdGlvblsnYm9vbGVhbi1uZWdhdGlvbiddKSB7XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaChuZWdhdGVkQm9vbGVhbik7XG4gICAgICAgICAgICAgICAgaWYgKG0gIT09IG51bGwgJiYgQXJyYXkuaXNBcnJheShtKSAmJiBtLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG1bMV07XG4gICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykgPyBbZmFsc2VdIDogZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyAtLSBzZXBhcmF0ZWQgYnkgc3BhY2UuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tLS4rLykgfHwgKCFjb25maWd1cmF0aW9uWydzaG9ydC1vcHRpb24tZ3JvdXBzJ10gJiYgYXJnLm1hdGNoKC9eLVteLV0rLykpKSB7XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaCgvXi0tPyguKykvKTtcbiAgICAgICAgICAgICAgICBpZiAobSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KG0pICYmIG0ubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbVsxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFycmF5IGZvcm1hdCA9ICctLWZvbyBhIGIgYydcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXRBcnJheShpLCBrZXksIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5hcmdzIGZvcm1hdCA9ICctLWZvbyBhIGIgYydcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSB0cnV0aHkgZXZlbiBpZjogZmxhZ3MubmFyZ3Nba2V5XSA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdE5hcmdzKGksIGtleSwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gYXJnc1tpICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkICYmICghbmV4dC5tYXRjaCgvXi0vKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQubWF0Y2gobmVnYXRpdmUpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKC9eKHRydWV8ZmFsc2UpJC8udGVzdChuZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGRlZmF1bHRWYWx1ZShrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBkb3Qtbm90YXRpb24gZmxhZyBzZXBhcmF0ZWQgYnkgJz0nLlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnLm1hdGNoKC9eLS5cXC4uKz0vKSkge1xuICAgICAgICAgICAgICAgIG0gPSBhcmcubWF0Y2goL14tKFtePV0rKT0oW1xcc1xcU10qKSQvKTtcbiAgICAgICAgICAgICAgICBpZiAobSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KG0pICYmIG0ubGVuZ3RoID49IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0QXJnKG1bMV0sIG1bMl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBkb3Qtbm90YXRpb24gZmxhZyBzZXBhcmF0ZWQgYnkgc3BhY2UuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tLlxcLi4rLykgJiYgIWFyZy5tYXRjaChuZWdhdGl2ZSkpIHtcbiAgICAgICAgICAgICAgICBuZXh0ID0gYXJnc1tpICsgMV07XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaCgvXi0oLlxcLi4rKS8pO1xuICAgICAgICAgICAgICAgIGlmIChtICE9PSBudWxsICYmIEFycmF5LmlzQXJyYXkobSkgJiYgbS5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBtWzFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkICYmICFuZXh0Lm1hdGNoKC9eLS8pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBkZWZhdWx0VmFsdWUoa2V5KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tW14tXSsvKSAmJiAhYXJnLm1hdGNoKG5lZ2F0aXZlKSkge1xuICAgICAgICAgICAgICAgIGxldHRlcnMgPSBhcmcuc2xpY2UoMSwgLTEpLnNwbGl0KCcnKTtcbiAgICAgICAgICAgICAgICBicm9rZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxldHRlcnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGFyZy5zbGljZShqICsgMik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsZXR0ZXJzW2ogKyAxXSAmJiBsZXR0ZXJzW2ogKyAxXSA9PT0gJz0nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFyZy5zbGljZShqICsgMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBsZXR0ZXJzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcnJheSBmb3JtYXQgPSAnLWY9YSBiIGMnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdEFycmF5KGksIGtleSwgYXJncywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5hcmdzIGZvcm1hdCA9ICctZj1tb25rZXkgd2FzaGluZyBjYXQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdE5hcmdzKGksIGtleSwgYXJncywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJva2VuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ID09PSAnLScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhsZXR0ZXJzW2pdLCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGN1cnJlbnQgbGV0dGVyIGlzIGFuIGFscGhhYmV0aWMgY2hhcmFjdGVyIGFuZCBuZXh0IHZhbHVlIGlzIGEgbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgIGlmICgvW0EtWmEtel0vLnRlc3QobGV0dGVyc1tqXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIC9eLT9cXGQrKFxcLlxcZCopPyhlLT9cXGQrKT8kLy50ZXN0KG5leHQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja0FsbEFsaWFzZXMobmV4dCwgZmxhZ3MuYm9vbHMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGxldHRlcnNbal0sIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJva2VuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChsZXR0ZXJzW2ogKyAxXSAmJiBsZXR0ZXJzW2ogKyAxXS5tYXRjaCgvXFxXLykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhsZXR0ZXJzW2pdLCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhsZXR0ZXJzW2pdLCBkZWZhdWx0VmFsdWUobGV0dGVyc1tqXSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGtleSA9IGFyZy5zbGljZSgtMSlbMF07XG4gICAgICAgICAgICAgICAgaWYgKCFicm9rZW4gJiYga2V5ICE9PSAnLScpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFycmF5IGZvcm1hdCA9ICctZiBhIGIgYydcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXRBcnJheShpLCBrZXksIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5hcmdzIGZvcm1hdCA9ICctZiBhIGIgYydcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSB0cnV0aHkgZXZlbiBpZjogZmxhZ3MubmFyZ3Nba2V5XSA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdE5hcmdzKGksIGtleSwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gYXJnc1tpICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkICYmICghL14oLXwtLSlbXi1dLy50ZXN0KG5leHQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5tYXRjaChuZWdhdGl2ZSkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5jb3VudHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoL14odHJ1ZXxmYWxzZSkkLy50ZXN0KG5leHQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgZGVmYXVsdFZhbHVlKGtleSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnLm1hdGNoKC9eLVswLTldJC8pICYmXG4gICAgICAgICAgICAgICAgYXJnLm1hdGNoKG5lZ2F0aXZlKSAmJlxuICAgICAgICAgICAgICAgIGNoZWNrQWxsQWxpYXNlcyhhcmcuc2xpY2UoMSksIGZsYWdzLmJvb2xzKSkge1xuICAgICAgICAgICAgICAgIC8vIHNpbmdsZS1kaWdpdCBib29sZWFuIGFsaWFzLCBlLmc6IHhhcmdzIC0wXG4gICAgICAgICAgICAgICAga2V5ID0gYXJnLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGRlZmF1bHRWYWx1ZShrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZyA9PT0gJy0tJykge1xuICAgICAgICAgICAgICAgIG5vdEZsYWdzID0gYXJncy5zbGljZShpICsgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb25maWd1cmF0aW9uWydoYWx0LWF0LW5vbi1vcHRpb24nXSkge1xuICAgICAgICAgICAgICAgIG5vdEZsYWdzID0gYXJncy5zbGljZShpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHB1c2hQb3NpdGlvbmFsKGFyZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gb3JkZXIgb2YgcHJlY2VkZW5jZTpcbiAgICAgICAgLy8gMS4gY29tbWFuZCBsaW5lIGFyZ1xuICAgICAgICAvLyAyLiB2YWx1ZSBmcm9tIGVudiB2YXJcbiAgICAgICAgLy8gMy4gdmFsdWUgZnJvbSBjb25maWcgZmlsZVxuICAgICAgICAvLyA0LiB2YWx1ZSBmcm9tIGNvbmZpZyBvYmplY3RzXG4gICAgICAgIC8vIDUuIGNvbmZpZ3VyZWQgZGVmYXVsdCB2YWx1ZVxuICAgICAgICBhcHBseUVudlZhcnMoYXJndiwgdHJ1ZSk7IC8vIHNwZWNpYWwgY2FzZTogY2hlY2sgZW52IHZhcnMgdGhhdCBwb2ludCB0byBjb25maWcgZmlsZVxuICAgICAgICBhcHBseUVudlZhcnMoYXJndiwgZmFsc2UpO1xuICAgICAgICBzZXRDb25maWcoYXJndik7XG4gICAgICAgIHNldENvbmZpZ09iamVjdHMoKTtcbiAgICAgICAgYXBwbHlEZWZhdWx0c0FuZEFsaWFzZXMoYXJndiwgZmxhZ3MuYWxpYXNlcywgZGVmYXVsdHMsIHRydWUpO1xuICAgICAgICBhcHBseUNvZXJjaW9ucyhhcmd2KTtcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ3NldC1wbGFjZWhvbGRlci1rZXknXSlcbiAgICAgICAgICAgIHNldFBsYWNlaG9sZGVyS2V5cyhhcmd2KTtcbiAgICAgICAgLy8gZm9yIGFueSBjb3VudHMgZWl0aGVyIG5vdCBpbiBhcmdzIG9yIHdpdGhvdXQgYW4gZXhwbGljaXQgZGVmYXVsdCwgc2V0IHRvIDBcbiAgICAgICAgT2JqZWN0LmtleXMoZmxhZ3MuY291bnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmICghaGFzS2V5KGFyZ3YsIGtleS5zcGxpdCgnLicpKSlcbiAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vICctLScgZGVmYXVsdHMgdG8gdW5kZWZpbmVkLlxuICAgICAgICBpZiAobm90RmxhZ3NPcHRpb24gJiYgbm90RmxhZ3MubGVuZ3RoKVxuICAgICAgICAgICAgYXJndltub3RGbGFnc0FyZ3ZdID0gW107XG4gICAgICAgIG5vdEZsYWdzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgYXJndltub3RGbGFnc0FyZ3ZdLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjb25maWd1cmF0aW9uWydjYW1lbC1jYXNlLWV4cGFuc2lvbiddICYmIGNvbmZpZ3VyYXRpb25bJ3N0cmlwLWRhc2hlZCddKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhhcmd2KS5maWx0ZXIoa2V5ID0+IGtleSAhPT0gJy0tJyAmJiBrZXkuaW5jbHVkZXMoJy0nKSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBhcmd2W2tleV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlndXJhdGlvblsnc3RyaXAtYWxpYXNlZCddKSB7XG4gICAgICAgICAgICA7XG4gICAgICAgICAgICBbXS5jb25jYXQoLi4uT2JqZWN0LmtleXMoYWxpYXNlcykubWFwKGsgPT4gYWxpYXNlc1trXSkpLmZvckVhY2goYWxpYXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWd1cmF0aW9uWydjYW1lbC1jYXNlLWV4cGFuc2lvbiddICYmIGFsaWFzLmluY2x1ZGVzKCctJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFyZ3ZbYWxpYXMuc3BsaXQoJy4nKS5tYXAocHJvcCA9PiBjYW1lbENhc2UocHJvcCkpLmpvaW4oJy4nKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlbGV0ZSBhcmd2W2FsaWFzXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFB1c2ggYXJndW1lbnQgaW50byBwb3NpdGlvbmFsIGFycmF5LCBhcHBseWluZyBudW1lcmljIGNvZXJjaW9uOlxuICAgICAgICBmdW5jdGlvbiBwdXNoUG9zaXRpb25hbChhcmcpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heWJlQ29lcmNlZE51bWJlciA9IG1heWJlQ29lcmNlTnVtYmVyKCdfJywgYXJnKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWF5YmVDb2VyY2VkTnVtYmVyID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbWF5YmVDb2VyY2VkTnVtYmVyID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIGFyZ3YuXy5wdXNoKG1heWJlQ29lcmNlZE51bWJlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaG93IG1hbnkgYXJndW1lbnRzIHNob3VsZCB3ZSBjb25zdW1lLCBiYXNlZFxuICAgICAgICAvLyBvbiB0aGUgbmFyZ3Mgb3B0aW9uP1xuICAgICAgICBmdW5jdGlvbiBlYXROYXJncyhpLCBrZXksIGFyZ3MsIGFyZ0FmdGVyRXF1YWxTaWduKSB7XG4gICAgICAgICAgICBsZXQgaWk7XG4gICAgICAgICAgICBsZXQgdG9FYXQgPSBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5uYXJncyk7XG4gICAgICAgICAgICAvLyBOYU4gaGFzIGEgc3BlY2lhbCBtZWFuaW5nIGZvciB0aGUgYXJyYXkgdHlwZSwgaW5kaWNhdGluZyB0aGF0IG9uZSBvclxuICAgICAgICAgICAgLy8gbW9yZSB2YWx1ZXMgYXJlIGV4cGVjdGVkLlxuICAgICAgICAgICAgdG9FYXQgPSB0eXBlb2YgdG9FYXQgIT09ICdudW1iZXInIHx8IGlzTmFOKHRvRWF0KSA/IDEgOiB0b0VhdDtcbiAgICAgICAgICAgIGlmICh0b0VhdCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoYXJnQWZ0ZXJFcXVhbFNpZ24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ0FyZ3VtZW50IHVuZXhwZWN0ZWQgZm9yOiAlcycsIGtleSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBkZWZhdWx0VmFsdWUoa2V5KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgYXZhaWxhYmxlID0gaXNVbmRlZmluZWQoYXJnQWZ0ZXJFcXVhbFNpZ24pID8gMCA6IDE7XG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvblsnbmFyZ3MtZWF0cy1vcHRpb25zJ10pIHtcbiAgICAgICAgICAgICAgICAvLyBjbGFzc2ljIGJlaGF2aW9yLCB5YXJncyBlYXRzIHBvc2l0aW9uYWwgYW5kIGRhc2ggYXJndW1lbnRzLlxuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCAtIChpICsgMSkgKyBhdmFpbGFibGUgPCB0b0VhdCkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEVycm9yKF9fKCdOb3QgZW5vdWdoIGFyZ3VtZW50cyBmb2xsb3dpbmc6ICVzJywga2V5KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IHRvRWF0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gbmFyZ3Mgd2lsbCBub3QgY29uc3VtZSBmbGFnIGFyZ3VtZW50cywgZS5nLiwgLWFiYywgLS1mb28sXG4gICAgICAgICAgICAgICAgLy8gYW5kIHRlcm1pbmF0ZXMgd2hlbiBvbmUgaXMgb2JzZXJ2ZWQuXG4gICAgICAgICAgICAgICAgZm9yIChpaSA9IGkgKyAxOyBpaSA8IGFyZ3MubGVuZ3RoOyBpaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYXJnc1tpaV0ubWF0Y2goL14tW14wLTldLykgfHwgYXJnc1tpaV0ubWF0Y2gobmVnYXRpdmUpIHx8IGlzVW5rbm93bk9wdGlvbkFzQXJnKGFyZ3NbaWldKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSsrO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSA8IHRvRWF0KVxuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEVycm9yKF9fKCdOb3QgZW5vdWdoIGFyZ3VtZW50cyBmb2xsb3dpbmc6ICVzJywga2V5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgY29uc3VtZWQgPSBNYXRoLm1pbihhdmFpbGFibGUsIHRvRWF0KTtcbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoYXJnQWZ0ZXJFcXVhbFNpZ24pICYmIGNvbnN1bWVkID4gMCkge1xuICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGFyZ0FmdGVyRXF1YWxTaWduKTtcbiAgICAgICAgICAgICAgICBjb25zdW1lZC0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChpaSA9IGkgKyAxOyBpaSA8IChjb25zdW1lZCArIGkgKyAxKTsgaWkrKykge1xuICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGFyZ3NbaWldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoaSArIGNvbnN1bWVkKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBhbiBvcHRpb24gaXMgYW4gYXJyYXksIGVhdCBhbGwgbm9uLWh5cGhlbmF0ZWQgYXJndW1lbnRzXG4gICAgICAgIC8vIGZvbGxvd2luZyBpdC4uLiBZVU0hXG4gICAgICAgIC8vIGUuZy4sIC0tZm9vIGFwcGxlIGJhbmFuYSBjYXQgYmVjb21lcyBbXCJhcHBsZVwiLCBcImJhbmFuYVwiLCBcImNhdFwiXVxuICAgICAgICBmdW5jdGlvbiBlYXRBcnJheShpLCBrZXksIGFyZ3MsIGFyZ0FmdGVyRXF1YWxTaWduKSB7XG4gICAgICAgICAgICBsZXQgYXJnc1RvU2V0ID0gW107XG4gICAgICAgICAgICBsZXQgbmV4dCA9IGFyZ0FmdGVyRXF1YWxTaWduIHx8IGFyZ3NbaSArIDFdO1xuICAgICAgICAgICAgLy8gSWYgYm90aCBhcnJheSBhbmQgbmFyZ3MgYXJlIGNvbmZpZ3VyZWQsIGVuZm9yY2UgdGhlIG5hcmdzIGNvdW50OlxuICAgICAgICAgICAgY29uc3QgbmFyZ3NDb3VudCA9IGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKTtcbiAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykgJiYgISgvXih0cnVlfGZhbHNlKSQvLnRlc3QobmV4dCkpKSB7XG4gICAgICAgICAgICAgICAgYXJnc1RvU2V0LnB1c2godHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc1VuZGVmaW5lZChuZXh0KSB8fFxuICAgICAgICAgICAgICAgIChpc1VuZGVmaW5lZChhcmdBZnRlckVxdWFsU2lnbikgJiYgL14tLy50ZXN0KG5leHQpICYmICFuZWdhdGl2ZS50ZXN0KG5leHQpICYmICFpc1Vua25vd25PcHRpb25Bc0FyZyhuZXh0KSkpIHtcbiAgICAgICAgICAgICAgICAvLyBmb3Iga2V5cyB3aXRob3V0IHZhbHVlID09PiBhcmdzVG9TZXQgcmVtYWlucyBhbiBlbXB0eSBbXVxuICAgICAgICAgICAgICAgIC8vIHNldCB1c2VyIGRlZmF1bHQgdmFsdWUsIGlmIGF2YWlsYWJsZVxuICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0c1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmVmFsID0gZGVmYXVsdHNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1RvU2V0ID0gQXJyYXkuaXNBcnJheShkZWZWYWwpID8gZGVmVmFsIDogW2RlZlZhbF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gdmFsdWUgaW4gLS1vcHRpb249dmFsdWUgaXMgZWF0ZW4gYXMgaXNcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzVG9TZXQucHVzaChwcm9jZXNzVmFsdWUoa2V5LCBhcmdBZnRlckVxdWFsU2lnbiwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpaSA9IGkgKyAxOyBpaSA8IGFyZ3MubGVuZ3RoOyBpaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoIWNvbmZpZ3VyYXRpb25bJ2dyZWVkeS1hcnJheXMnXSAmJiBhcmdzVG9TZXQubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChuYXJnc0NvdW50ICYmIHR5cGVvZiBuYXJnc0NvdW50ID09PSAnbnVtYmVyJyAmJiBhcmdzVG9TZXQubGVuZ3RoID49IG5hcmdzQ291bnQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSBhcmdzW2lpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eLS8udGVzdChuZXh0KSAmJiAhbmVnYXRpdmUudGVzdChuZXh0KSAmJiAhaXNVbmtub3duT3B0aW9uQXNBcmcobmV4dCkpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgaSA9IGlpO1xuICAgICAgICAgICAgICAgICAgICBhcmdzVG9TZXQucHVzaChwcm9jZXNzVmFsdWUoa2V5LCBuZXh0LCBpbnB1dElzU3RyaW5nKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgYm90aCBhcnJheSBhbmQgbmFyZ3MgYXJlIGNvbmZpZ3VyZWQsIGNyZWF0ZSBhbiBlcnJvciBpZiBsZXNzIHRoYW5cbiAgICAgICAgICAgIC8vIG5hcmdzIHBvc2l0aW9uYWxzIHdlcmUgZm91bmQuIE5hTiBoYXMgc3BlY2lhbCBtZWFuaW5nLCBpbmRpY2F0aW5nXG4gICAgICAgICAgICAvLyB0aGF0IGF0IGxlYXN0IG9uZSB2YWx1ZSBpcyByZXF1aXJlZCAobW9yZSBhcmUgb2theSkuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG5hcmdzQ291bnQgPT09ICdudW1iZXInICYmICgobmFyZ3NDb3VudCAmJiBhcmdzVG9TZXQubGVuZ3RoIDwgbmFyZ3NDb3VudCkgfHxcbiAgICAgICAgICAgICAgICAoaXNOYU4obmFyZ3NDb3VudCkgJiYgYXJnc1RvU2V0Lmxlbmd0aCA9PT0gMCkpKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBFcnJvcihfXygnTm90IGVub3VnaCBhcmd1bWVudHMgZm9sbG93aW5nOiAlcycsIGtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0QXJnKGtleSwgYXJnc1RvU2V0KTtcbiAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldEFyZyhrZXksIHZhbCwgc2hvdWxkU3RyaXBRdW90ZXMgPSBpbnB1dElzU3RyaW5nKSB7XG4gICAgICAgICAgICBpZiAoLy0vLnRlc3Qoa2V5KSAmJiBjb25maWd1cmF0aW9uWydjYW1lbC1jYXNlLWV4cGFuc2lvbiddKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWxpYXMgPSBrZXkuc3BsaXQoJy4nKS5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbWVsQ2FzZShwcm9wKTtcbiAgICAgICAgICAgICAgICB9KS5qb2luKCcuJyk7XG4gICAgICAgICAgICAgICAgYWRkTmV3QWxpYXMoa2V5LCBhbGlhcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHByb2Nlc3NWYWx1ZShrZXksIHZhbCwgc2hvdWxkU3RyaXBRdW90ZXMpO1xuICAgICAgICAgICAgY29uc3Qgc3BsaXRLZXkgPSBrZXkuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgIHNldEtleShhcmd2LCBzcGxpdEtleSwgdmFsdWUpO1xuICAgICAgICAgICAgLy8gaGFuZGxlIHBvcHVsYXRpbmcgYWxpYXNlcyBvZiB0aGUgZnVsbCBrZXlcbiAgICAgICAgICAgIGlmIChmbGFncy5hbGlhc2VzW2tleV0pIHtcbiAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0uZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlQcm9wZXJ0aWVzID0geC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgICAgICBzZXRLZXkoYXJndiwga2V5UHJvcGVydGllcywgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaGFuZGxlIHBvcHVsYXRpbmcgYWxpYXNlcyBvZiB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgZG90LW5vdGF0aW9uIGtleVxuICAgICAgICAgICAgaWYgKHNwbGl0S2V5Lmxlbmd0aCA+IDEgJiYgY29uZmlndXJhdGlvblsnZG90LW5vdGF0aW9uJ10pIHtcbiAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgKGZsYWdzLmFsaWFzZXNbc3BsaXRLZXlbMF1dIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBrZXlQcm9wZXJ0aWVzID0geC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgICAgICAvLyBleHBhbmQgYWxpYXMgd2l0aCBuZXN0ZWQgb2JqZWN0cyBpbiBrZXlcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IFtdLmNvbmNhdChzcGxpdEtleSk7XG4gICAgICAgICAgICAgICAgICAgIGEuc2hpZnQoKTsgLy8gbnVrZSB0aGUgb2xkIGtleS5cbiAgICAgICAgICAgICAgICAgICAga2V5UHJvcGVydGllcyA9IGtleVByb3BlcnRpZXMuY29uY2F0KGEpO1xuICAgICAgICAgICAgICAgICAgICAvLyBwb3B1bGF0ZSBhbGlhcyBvbmx5IGlmIGlzIG5vdCBhbHJlYWR5IGFuIGFsaWFzIG9mIHRoZSBmdWxsIGtleVxuICAgICAgICAgICAgICAgICAgICAvLyAoYWxyZWFkeSBwb3B1bGF0ZWQgYWJvdmUpXG4gICAgICAgICAgICAgICAgICAgIGlmICghKGZsYWdzLmFsaWFzZXNba2V5XSB8fCBbXSkuaW5jbHVkZXMoa2V5UHJvcGVydGllcy5qb2luKCcuJykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRLZXkoYXJndiwga2V5UHJvcGVydGllcywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTZXQgbm9ybWFsaXplIGdldHRlciBhbmQgc2V0dGVyIHdoZW4ga2V5IGlzIGluICdub3JtYWxpemUnIGJ1dCBpc24ndCBhbiBhcnJheVxuICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5vcm1hbGl6ZSkgJiYgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gW2tleV0uY29uY2F0KGZsYWdzLmFsaWFzZXNba2V5XSB8fCBbXSk7XG4gICAgICAgICAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFyZ3ZSZXR1cm4sIGtleSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBtaXhpbi5ub3JtYWxpemUodmFsdWUpIDogdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFkZE5ld0FsaWFzKGtleSwgYWxpYXMpIHtcbiAgICAgICAgICAgIGlmICghKGZsYWdzLmFsaWFzZXNba2V5XSAmJiBmbGFncy5hbGlhc2VzW2tleV0ubGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XSA9IFthbGlhc107XG4gICAgICAgICAgICAgICAgbmV3QWxpYXNlc1thbGlhc10gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEoZmxhZ3MuYWxpYXNlc1thbGlhc10gJiYgZmxhZ3MuYWxpYXNlc1thbGlhc10ubGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgIGFkZE5ld0FsaWFzKGFsaWFzLCBrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NWYWx1ZShrZXksIHZhbCwgc2hvdWxkU3RyaXBRdW90ZXMpIHtcbiAgICAgICAgICAgIC8vIHN0cmluZ3MgbWF5IGJlIHF1b3RlZCwgY2xlYW4gdGhpcyB1cCBhcyB3ZSBhc3NpZ24gdmFsdWVzLlxuICAgICAgICAgICAgaWYgKHNob3VsZFN0cmlwUXVvdGVzKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gc3RyaXBRdW90ZXModmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGhhbmRsZSBwYXJzaW5nIGJvb2xlYW4gYXJndW1lbnRzIC0tZm9vPXRydWUgLS1iYXIgZmFsc2UuXG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpIHx8IGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IHZhbCA9PT0gJ3RydWUnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWwpXG4gICAgICAgICAgICAgICAgPyB2YWwubWFwKGZ1bmN0aW9uICh2KSB7IHJldHVybiBtYXliZUNvZXJjZU51bWJlcihrZXksIHYpOyB9KVxuICAgICAgICAgICAgICAgIDogbWF5YmVDb2VyY2VOdW1iZXIoa2V5LCB2YWwpO1xuICAgICAgICAgICAgLy8gaW5jcmVtZW50IGEgY291bnQgZ2l2ZW4gYXMgYXJnIChlaXRoZXIgbm8gdmFsdWUgb3IgdmFsdWUgcGFyc2VkIGFzIGJvb2xlYW4pXG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSAmJiAoaXNVbmRlZmluZWQodmFsdWUpIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gaW5jcmVtZW50KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTZXQgbm9ybWFsaXplZCB2YWx1ZSB3aGVuIGtleSBpcyBpbiAnbm9ybWFsaXplJyBhbmQgaW4gJ2FycmF5cydcbiAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ub3JtYWxpemUpICYmIGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbC5tYXAoKHZhbCkgPT4geyByZXR1cm4gbWl4aW4ubm9ybWFsaXplKHZhbCk7IH0pO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtaXhpbi5ub3JtYWxpemUodmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBtYXliZUNvZXJjZU51bWJlcihrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZ3VyYXRpb25bJ3BhcnNlLXBvc2l0aW9uYWwtbnVtYmVycyddICYmIGtleSA9PT0gJ18nKVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIGlmICghY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3Muc3RyaW5ncykgJiYgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaG91bGRDb2VyY2VOdW1iZXIgPSBsb29rc0xpa2VOdW1iZXIodmFsdWUpICYmIGNvbmZpZ3VyYXRpb25bJ3BhcnNlLW51bWJlcnMnXSAmJiAoTnVtYmVyLmlzU2FmZUludGVnZXIoTWF0aC5mbG9vcihwYXJzZUZsb2F0KGAke3ZhbHVlfWApKSkpO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRDb2VyY2VOdW1iZXIgfHwgKCFpc1VuZGVmaW5lZCh2YWx1ZSkgJiYgY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubnVtYmVycykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2V0IGFyZ3MgZnJvbSBjb25maWcuanNvbiBmaWxlLCB0aGlzIHNob3VsZCBiZVxuICAgICAgICAvLyBhcHBsaWVkIGxhc3Qgc28gdGhhdCBkZWZhdWx0cyBjYW4gYmUgYXBwbGllZC5cbiAgICAgICAgZnVuY3Rpb24gc2V0Q29uZmlnKGFyZ3YpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZ0xvb2t1cCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAvLyBleHBhbmQgZGVmYXVsdHMvYWxpYXNlcywgaW4tY2FzZSBhbnkgaGFwcGVuIHRvIHJlZmVyZW5jZVxuICAgICAgICAgICAgLy8gdGhlIGNvbmZpZy5qc29uIGZpbGUuXG4gICAgICAgICAgICBhcHBseURlZmF1bHRzQW5kQWxpYXNlcyhjb25maWdMb29rdXAsIGZsYWdzLmFsaWFzZXMsIGRlZmF1bHRzKTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGZsYWdzLmNvbmZpZ3MpLmZvckVhY2goZnVuY3Rpb24gKGNvbmZpZ0tleSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBhcmd2W2NvbmZpZ0tleV0gfHwgY29uZmlnTG9va3VwW2NvbmZpZ0tleV07XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZ1BhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb25maWcgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRDb25maWdQYXRoID0gbWl4aW4ucmVzb2x2ZShtaXhpbi5jd2QoKSwgY29uZmlnUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlQ29uZmlnID0gZmxhZ3MuY29uZmlnc1tjb25maWdLZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXNvbHZlQ29uZmlnID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnID0gcmVzb2x2ZUNvbmZpZyhyZXNvbHZlZENvbmZpZ1BhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcgPSBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBjb25maWc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcgPSBtaXhpbi5yZXF1aXJlKHJlc29sdmVkQ29uZmlnUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25maWdPYmplY3QoY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbm8gd2lsbCByZWNlaXZlIGEgUGVybWlzc2lvbkRlbmllZCBlcnJvciBpZiBhbiBhdHRlbXB0IGlzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYWRlIHRvIGxvYWQgY29uZmlnIHdpdGhvdXQgdGhlIC0tYWxsb3ctcmVhZCBmbGFnOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4Lm5hbWUgPT09ICdQZXJtaXNzaW9uRGVuaWVkJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJndltjb25maWdLZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ0ludmFsaWQgSlNPTiBjb25maWcgZmlsZTogJXMnLCBjb25maWdQYXRoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzZXQgYXJncyBmcm9tIGNvbmZpZyBvYmplY3QuXG4gICAgICAgIC8vIGl0IHJlY3Vyc2l2ZWx5IGNoZWNrcyBuZXN0ZWQgb2JqZWN0cy5cbiAgICAgICAgZnVuY3Rpb24gc2V0Q29uZmlnT2JqZWN0KGNvbmZpZywgcHJldikge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbmZpZ1trZXldO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZ1bGxLZXkgPSBwcmV2ID8gcHJldiArICcuJyArIGtleSA6IGtleTtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgdmFsdWUgaXMgYW4gaW5uZXIgb2JqZWN0IGFuZCB3ZSBoYXZlIGRvdC1ub3RhdGlvblxuICAgICAgICAgICAgICAgIC8vIGVuYWJsZWQsIHRyZWF0IGlubmVyIG9iamVjdHMgaW4gY29uZmlnIHRoZSBzYW1lIGFzXG4gICAgICAgICAgICAgICAgLy8gaGVhdmlseSBuZXN0ZWQgZG90IG5vdGF0aW9ucyAoZm9vLmJhci5hcHBsZSkuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmIGNvbmZpZ3VyYXRpb25bJ2RvdC1ub3RhdGlvbiddKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QgYnV0IG5vdCBhbiBhcnJheSwgY2hlY2sgbmVzdGVkIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICBzZXRDb25maWdPYmplY3QodmFsdWUsIGZ1bGxLZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0dGluZyBhcmd1bWVudHMgdmlhIENMSSB0YWtlcyBwcmVjZWRlbmNlIG92ZXJcbiAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWVzIHdpdGhpbiB0aGUgY29uZmlnIGZpbGUuXG4gICAgICAgICAgICAgICAgICAgIGlmICghaGFzS2V5KGFyZ3YsIGZ1bGxLZXkuc3BsaXQoJy4nKSkgfHwgKGNoZWNrQWxsQWxpYXNlcyhmdWxsS2V5LCBmbGFncy5hcnJheXMpICYmIGNvbmZpZ3VyYXRpb25bJ2NvbWJpbmUtYXJyYXlzJ10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoZnVsbEtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2V0IGFsbCBjb25maWcgb2JqZWN0cyBwYXNzZWQgaW4gb3B0c1xuICAgICAgICBmdW5jdGlvbiBzZXRDb25maWdPYmplY3RzKCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25maWdPYmplY3RzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGNvbmZpZ09iamVjdHMuZm9yRWFjaChmdW5jdGlvbiAoY29uZmlnT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldENvbmZpZ09iamVjdChjb25maWdPYmplY3QpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5RW52VmFycyhhcmd2LCBjb25maWdPbmx5KSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVudlByZWZpeCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgcHJlZml4ID0gdHlwZW9mIGVudlByZWZpeCA9PT0gJ3N0cmluZycgPyBlbnZQcmVmaXggOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGVudiA9IG1peGluLmVudigpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZW52KS5mb3JFYWNoKGZ1bmN0aW9uIChlbnZWYXIpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJlZml4ID09PSAnJyB8fCBlbnZWYXIubGFzdEluZGV4T2YocHJlZml4LCAwKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBnZXQgYXJyYXkgb2YgbmVzdGVkIGtleXMgYW5kIGNvbnZlcnQgdGhlbSB0byBjYW1lbCBjYXNlXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBlbnZWYXIuc3BsaXQoJ19fJykubWFwKGZ1bmN0aW9uIChrZXksIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5LnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW1lbENhc2Uoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoKGNvbmZpZ09ubHkgJiYgZmxhZ3MuY29uZmlnc1trZXlzLmpvaW4oJy4nKV0pIHx8ICFjb25maWdPbmx5KSAmJiAhaGFzS2V5KGFyZ3YsIGtleXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5cy5qb2luKCcuJyksIGVudltlbnZWYXJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5Q29lcmNpb25zKGFyZ3YpIHtcbiAgICAgICAgICAgIGxldCBjb2VyY2U7XG4gICAgICAgICAgICBjb25zdCBhcHBsaWVkID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoYXJndikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFhcHBsaWVkLmhhcyhrZXkpKSB7IC8vIElmIHdlIGhhdmVuJ3QgYWxyZWFkeSBjb2VyY2VkIHRoaXMgb3B0aW9uIHZpYSBvbmUgb2YgaXRzIGFsaWFzZXNcbiAgICAgICAgICAgICAgICAgICAgY29lcmNlID0gY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY29lcmNpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2VyY2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtYXliZUNvZXJjZU51bWJlcihrZXksIGNvZXJjZShhcmd2W2tleV0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoW10uY29uY2F0KGZsYWdzLmFsaWFzZXNba2V5XSB8fCBbXSwga2V5KSkuZm9yRWFjaChhbGkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWVkLmFkZChhbGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd2W2FsaV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldFBsYWNlaG9sZGVyS2V5cyhhcmd2KSB7XG4gICAgICAgICAgICBmbGFncy5rZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGRvbid0IHNldCBwbGFjZWhvbGRlciBrZXlzIGZvciBkb3Qgbm90YXRpb24gb3B0aW9ucyAnZm9vLmJhcicuXG4gICAgICAgICAgICAgICAgaWYgKH5rZXkuaW5kZXhPZignLicpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmd2W2tleV0gPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgICAgICBhcmd2W2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBhcmd2O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5RGVmYXVsdHNBbmRBbGlhc2VzKG9iaiwgYWxpYXNlcywgZGVmYXVsdHMsIGNhbkxvZyA9IGZhbHNlKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhkZWZhdWx0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNLZXkob2JqLCBrZXkuc3BsaXQoJy4nKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0S2V5KG9iaiwga2V5LnNwbGl0KCcuJyksIGRlZmF1bHRzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FuTG9nKVxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdGVkW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAoYWxpYXNlc1trZXldIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzS2V5KG9iaiwgeC5zcGxpdCgnLicpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRLZXkob2JqLCB4LnNwbGl0KCcuJyksIGRlZmF1bHRzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBoYXNLZXkob2JqLCBrZXlzKSB7XG4gICAgICAgICAgICBsZXQgbyA9IG9iajtcbiAgICAgICAgICAgIGlmICghY29uZmlndXJhdGlvblsnZG90LW5vdGF0aW9uJ10pXG4gICAgICAgICAgICAgICAga2V5cyA9IFtrZXlzLmpvaW4oJy4nKV07XG4gICAgICAgICAgICBrZXlzLnNsaWNlKDAsIC0xKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBvID0gKG9ba2V5XSB8fCB7fSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleXNba2V5cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbyAhPT0gJ29iamVjdCcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBrZXkgaW4gbztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRLZXkob2JqLCBrZXlzLCB2YWx1ZSkge1xuICAgICAgICAgICAgbGV0IG8gPSBvYmo7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZ3VyYXRpb25bJ2RvdC1ub3RhdGlvbiddKVxuICAgICAgICAgICAgICAgIGtleXMgPSBba2V5cy5qb2luKCcuJyldO1xuICAgICAgICAgICAga2V5cy5zbGljZSgwLCAtMSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETyhiY29lKTogaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiB5YXJncywgc3dpdGNoIHRvXG4gICAgICAgICAgICAgICAgLy8gT2JqZWN0LmNyZWF0ZShudWxsKSBmb3IgZG90IG5vdGF0aW9uOlxuICAgICAgICAgICAgICAgIGtleSA9IHNhbml0aXplS2V5KGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvID09PSAnb2JqZWN0JyAmJiBvW2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBvW2tleV0gPSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvW2tleV0gIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkob1trZXldKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBlbnN1cmUgdGhhdCBvW2tleV0gaXMgYW4gYXJyYXksIGFuZCB0aGF0IHRoZSBsYXN0IGl0ZW0gaXMgYW4gZW1wdHkgb2JqZWN0LlxuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvW2tleV0ucHVzaCh7fSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvW2tleV0gPSBbb1trZXldLCB7fV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gd2Ugd2FudCB0byB1cGRhdGUgdGhlIGVtcHR5IG9iamVjdCBhdCB0aGUgZW5kIG9mIHRoZSBvW2tleV0gYXJyYXksIHNvIHNldCBvIHRvIHRoYXQgb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgIG8gPSBvW2tleV1bb1trZXldLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbyA9IG9ba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIFRPRE8oYmNvZSk6IGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgeWFyZ3MsIHN3aXRjaCB0b1xuICAgICAgICAgICAgLy8gT2JqZWN0LmNyZWF0ZShudWxsKSBmb3IgZG90IG5vdGF0aW9uOlxuICAgICAgICAgICAgY29uc3Qga2V5ID0gc2FuaXRpemVLZXkoa2V5c1trZXlzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgIGNvbnN0IGlzVHlwZUFycmF5ID0gY2hlY2tBbGxBbGlhc2VzKGtleXMuam9pbignLicpLCBmbGFncy5hcnJheXMpO1xuICAgICAgICAgICAgY29uc3QgaXNWYWx1ZUFycmF5ID0gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gICAgICAgICAgICBsZXQgZHVwbGljYXRlID0gY29uZmlndXJhdGlvblsnZHVwbGljYXRlLWFyZ3VtZW50cy1hcnJheSddO1xuICAgICAgICAgICAgLy8gbmFyZ3MgaGFzIGhpZ2hlciBwcmlvcml0eSB0aGFuIGR1cGxpY2F0ZVxuICAgICAgICAgICAgaWYgKCFkdXBsaWNhdGUgJiYgY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgZHVwbGljYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoKCFpc1VuZGVmaW5lZChvW2tleV0pICYmIGZsYWdzLm5hcmdzW2tleV0gPT09IDEpIHx8IChBcnJheS5pc0FycmF5KG9ba2V5XSkgJiYgb1trZXldLmxlbmd0aCA9PT0gZmxhZ3MubmFyZ3Nba2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgb1trZXldID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gaW5jcmVtZW50KCkpIHtcbiAgICAgICAgICAgICAgICBvW2tleV0gPSBpbmNyZW1lbnQob1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob1trZXldKSkge1xuICAgICAgICAgICAgICAgIGlmIChkdXBsaWNhdGUgJiYgaXNUeXBlQXJyYXkgJiYgaXNWYWx1ZUFycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgIG9ba2V5XSA9IGNvbmZpZ3VyYXRpb25bJ2ZsYXR0ZW4tZHVwbGljYXRlLWFycmF5cyddID8gb1trZXldLmNvbmNhdCh2YWx1ZSkgOiAoQXJyYXkuaXNBcnJheShvW2tleV1bMF0pID8gb1trZXldIDogW29ba2V5XV0pLmNvbmNhdChbdmFsdWVdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWR1cGxpY2F0ZSAmJiBCb29sZWFuKGlzVHlwZUFycmF5KSA9PT0gQm9vbGVhbihpc1ZhbHVlQXJyYXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb1trZXldID0gb1trZXldLmNvbmNhdChbdmFsdWVdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChvW2tleV0gPT09IHVuZGVmaW5lZCAmJiBpc1R5cGVBcnJheSkge1xuICAgICAgICAgICAgICAgIG9ba2V5XSA9IGlzVmFsdWVBcnJheSA/IHZhbHVlIDogW3ZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGR1cGxpY2F0ZSAmJiAhKG9ba2V5XSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSB8fFxuICAgICAgICAgICAgICAgIGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSkpIHtcbiAgICAgICAgICAgICAgICBvW2tleV0gPSBbb1trZXldLCB2YWx1ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBvW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBleHRlbmQgdGhlIGFsaWFzZXMgbGlzdCB3aXRoIGluZmVycmVkIGFsaWFzZXMuXG4gICAgICAgIGZ1bmN0aW9uIGV4dGVuZEFsaWFzZXMoLi4uYXJncykge1xuICAgICAgICAgICAgYXJncy5mb3JFYWNoKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhvYmogfHwge30pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBzaG9ydC1jaXJjdWl0IGlmIHdlJ3ZlIGFscmVhZHkgYWRkZWQgYSBrZXlcbiAgICAgICAgICAgICAgICAgICAgLy8gdG8gdGhlIGFsaWFzZXMgYXJyYXksIGZvciBleGFtcGxlIGl0IG1pZ2h0XG4gICAgICAgICAgICAgICAgICAgIC8vIGV4aXN0IGluIGJvdGggJ29wdHMuZGVmYXVsdCcgYW5kICdvcHRzLmtleScuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmbGFncy5hbGlhc2VzW2tleV0pXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XSA9IFtdLmNvbmNhdChhbGlhc2VzW2tleV0gfHwgW10pO1xuICAgICAgICAgICAgICAgICAgICAvLyBGb3IgXCItLW9wdGlvbi1uYW1lXCIsIGFsc28gc2V0IGFyZ3Yub3B0aW9uTmFtZVxuICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0uY29uY2F0KGtleSkuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC8tLy50ZXN0KHgpICYmIGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjID0gY2FtZWxDYXNlKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjICE9PSBrZXkgJiYgZmxhZ3MuYWxpYXNlc1trZXldLmluZGV4T2YoYykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XS5wdXNoKGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBbGlhc2VzW2NdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAvLyBGb3IgXCItLW9wdGlvbk5hbWVcIiwgYWxzbyBzZXQgYXJndlsnb3B0aW9uLW5hbWUnXVxuICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0uY29uY2F0KGtleSkuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgubGVuZ3RoID4gMSAmJiAvW0EtWl0vLnRlc3QoeCkgJiYgY29uZmlndXJhdGlvblsnY2FtZWwtY2FzZS1leHBhbnNpb24nXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGMgPSBkZWNhbWVsaXplKHgsICctJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgIT09IGtleSAmJiBmbGFncy5hbGlhc2VzW2tleV0uaW5kZXhPZihjKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldLnB1c2goYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0FsaWFzZXNbY10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW3hdID0gW2tleV0uY29uY2F0KGZsYWdzLmFsaWFzZXNba2V5XS5maWx0ZXIoZnVuY3Rpb24gKHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geCAhPT0geTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFnKSB7XG4gICAgICAgICAgICBjb25zdCB0b0NoZWNrID0gW10uY29uY2F0KGZsYWdzLmFsaWFzZXNba2V5XSB8fCBbXSwga2V5KTtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhmbGFnKTtcbiAgICAgICAgICAgIGNvbnN0IHNldEFsaWFzID0gdG9DaGVjay5maW5kKGtleSA9PiBrZXlzLmluY2x1ZGVzKGtleSkpO1xuICAgICAgICAgICAgcmV0dXJuIHNldEFsaWFzID8gZmxhZ1tzZXRBbGlhc10gOiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBoYXNBbnlGbGFnKGtleSkge1xuICAgICAgICAgICAgY29uc3QgZmxhZ3NLZXlzID0gT2JqZWN0LmtleXMoZmxhZ3MpO1xuICAgICAgICAgICAgY29uc3QgdG9DaGVjayA9IFtdLmNvbmNhdChmbGFnc0tleXMubWFwKGsgPT4gZmxhZ3Nba10pKTtcbiAgICAgICAgICAgIHJldHVybiB0b0NoZWNrLnNvbWUoZnVuY3Rpb24gKGZsYWcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShmbGFnKSA/IGZsYWcuaW5jbHVkZXMoa2V5KSA6IGZsYWdba2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGhhc0ZsYWdzTWF0Y2hpbmcoYXJnLCAuLi5wYXR0ZXJucykge1xuICAgICAgICAgICAgY29uc3QgdG9DaGVjayA9IFtdLmNvbmNhdCguLi5wYXR0ZXJucyk7XG4gICAgICAgICAgICByZXR1cm4gdG9DaGVjay5zb21lKGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBhcmcubWF0Y2gocGF0dGVybik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoICYmIGhhc0FueUZsYWcobWF0Y2hbMV0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYmFzZWQgb24gYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgdGhlIHNob3J0IGZsYWcgZ3JvdXAgcGFyc2luZyBsb2dpY1xuICAgICAgICBmdW5jdGlvbiBoYXNBbGxTaG9ydEZsYWdzKGFyZykge1xuICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBhIG5lZ2F0aXZlIG51bWJlciwgb3IgZG9lc24ndCBzdGFydCB3aXRoIGEgc2luZ2xlIGh5cGhlbiwgaXQncyBub3QgYSBzaG9ydCBmbGFnIGdyb3VwXG4gICAgICAgICAgICBpZiAoYXJnLm1hdGNoKG5lZ2F0aXZlKSB8fCAhYXJnLm1hdGNoKC9eLVteLV0rLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgaGFzQWxsRmxhZ3MgPSB0cnVlO1xuICAgICAgICAgICAgbGV0IG5leHQ7XG4gICAgICAgICAgICBjb25zdCBsZXR0ZXJzID0gYXJnLnNsaWNlKDEpLnNwbGl0KCcnKTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGV0dGVycy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIG5leHQgPSBhcmcuc2xpY2UoaiArIDIpO1xuICAgICAgICAgICAgICAgIGlmICghaGFzQW55RmxhZyhsZXR0ZXJzW2pdKSkge1xuICAgICAgICAgICAgICAgICAgICBoYXNBbGxGbGFncyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKChsZXR0ZXJzW2ogKyAxXSAmJiBsZXR0ZXJzW2ogKyAxXSA9PT0gJz0nKSB8fFxuICAgICAgICAgICAgICAgICAgICBuZXh0ID09PSAnLScgfHxcbiAgICAgICAgICAgICAgICAgICAgKC9bQS1aYS16XS8udGVzdChsZXR0ZXJzW2pdKSAmJiAvXi0/XFxkKyhcXC5cXGQqKT8oZS0/XFxkKyk/JC8udGVzdChuZXh0KSkgfHxcbiAgICAgICAgICAgICAgICAgICAgKGxldHRlcnNbaiArIDFdICYmIGxldHRlcnNbaiArIDFdLm1hdGNoKC9cXFcvKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhhc0FsbEZsYWdzO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzVW5rbm93bk9wdGlvbkFzQXJnKGFyZykge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25bJ3Vua25vd24tb3B0aW9ucy1hcy1hcmdzJ10gJiYgaXNVbmtub3duT3B0aW9uKGFyZyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNVbmtub3duT3B0aW9uKGFyZykge1xuICAgICAgICAgICAgYXJnID0gYXJnLnJlcGxhY2UoL14tezMsfS8sICctLScpO1xuICAgICAgICAgICAgLy8gaWdub3JlIG5lZ2F0aXZlIG51bWJlcnNcbiAgICAgICAgICAgIGlmIChhcmcubWF0Y2gobmVnYXRpdmUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBhIHNob3J0IG9wdGlvbiBncm91cCBhbmQgYWxsIG9mIHRoZW0gYXJlIGNvbmZpZ3VyZWQsIGl0IGlzbid0IHVua25vd25cbiAgICAgICAgICAgIGlmIChoYXNBbGxTaG9ydEZsYWdzKGFyZykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlLmcuICctLWNvdW50PTInXG4gICAgICAgICAgICBjb25zdCBmbGFnV2l0aEVxdWFscyA9IC9eLSsoW149XSs/KT1bXFxzXFxTXSokLztcbiAgICAgICAgICAgIC8vIGUuZy4gJy1hJyBvciAnLS1hcmcnXG4gICAgICAgICAgICBjb25zdCBub3JtYWxGbGFnID0gL14tKyhbXj1dKz8pJC87XG4gICAgICAgICAgICAvLyBlLmcuICctYS0nXG4gICAgICAgICAgICBjb25zdCBmbGFnRW5kaW5nSW5IeXBoZW4gPSAvXi0rKFtePV0rPyktJC87XG4gICAgICAgICAgICAvLyBlLmcuICctYWJjMTIzJ1xuICAgICAgICAgICAgY29uc3QgZmxhZ0VuZGluZ0luRGlnaXRzID0gL14tKyhbXj1dKz9cXGQrKSQvO1xuICAgICAgICAgICAgLy8gZS5nLiAnLWEvdXNyL2xvY2FsJ1xuICAgICAgICAgICAgY29uc3QgZmxhZ0VuZGluZ0luTm9uV29yZENoYXJhY3RlcnMgPSAvXi0rKFtePV0rPylcXFcrLiokLztcbiAgICAgICAgICAgIC8vIGNoZWNrIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgZmxhZyBzdHlsZXMsIGluY2x1ZGluZyBuZWdhdGVkQm9vbGVhbiwgYSBwYXR0ZXJuIGRlZmluZWQgbmVhciB0aGUgc3RhcnQgb2YgdGhlIHBhcnNlIG1ldGhvZFxuICAgICAgICAgICAgcmV0dXJuICFoYXNGbGFnc01hdGNoaW5nKGFyZywgZmxhZ1dpdGhFcXVhbHMsIG5lZ2F0ZWRCb29sZWFuLCBub3JtYWxGbGFnLCBmbGFnRW5kaW5nSW5IeXBoZW4sIGZsYWdFbmRpbmdJbkRpZ2l0cywgZmxhZ0VuZGluZ0luTm9uV29yZENoYXJhY3RlcnMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG1ha2UgYSBiZXN0IGVmZm9ydCB0byBwaWNrIGEgZGVmYXVsdCB2YWx1ZVxuICAgICAgICAvLyBmb3IgYW4gb3B0aW9uIGJhc2VkIG9uIG5hbWUgYW5kIHR5cGUuXG4gICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRWYWx1ZShrZXkpIHtcbiAgICAgICAgICAgIGlmICghY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmXG4gICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykgJiZcbiAgICAgICAgICAgICAgICBgJHtrZXl9YCBpbiBkZWZhdWx0cykge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0c1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRGb3JUeXBlKGd1ZXNzVHlwZShrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyByZXR1cm4gYSBkZWZhdWx0IHZhbHVlLCBnaXZlbiB0aGUgdHlwZSBvZiBhIGZsYWcuLFxuICAgICAgICBmdW5jdGlvbiBkZWZhdWx0Rm9yVHlwZSh0eXBlKSB7XG4gICAgICAgICAgICBjb25zdCBkZWYgPSB7XG4gICAgICAgICAgICAgICAgW0RlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkJPT0xFQU5dOiB0cnVlLFxuICAgICAgICAgICAgICAgIFtEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5TVFJJTkddOiAnJyxcbiAgICAgICAgICAgICAgICBbRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuTlVNQkVSXTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIFtEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5BUlJBWV06IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGRlZlt0eXBlXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBnaXZlbiBhIGZsYWcsIGVuZm9yY2UgYSBkZWZhdWx0IHR5cGUuXG4gICAgICAgIGZ1bmN0aW9uIGd1ZXNzVHlwZShrZXkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuQk9PTEVBTjtcbiAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5zdHJpbmdzKSlcbiAgICAgICAgICAgICAgICB0eXBlID0gRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuU1RSSU5HO1xuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubnVtYmVycykpXG4gICAgICAgICAgICAgICAgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5Lk5VTUJFUjtcbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSlcbiAgICAgICAgICAgICAgICB0eXBlID0gRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuQk9PTEVBTjtcbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpXG4gICAgICAgICAgICAgICAgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkFSUkFZO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNVbmRlZmluZWQobnVtKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtID09PSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2hlY2sgdXNlciBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBpbmNvbnNpc3RlbmNpZXNcbiAgICAgICAgZnVuY3Rpb24gY2hlY2tDb25maWd1cmF0aW9uKCkge1xuICAgICAgICAgICAgLy8gY291bnQga2V5cyBzaG91bGQgbm90IGJlIHNldCBhcyBhcnJheS9uYXJnXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhmbGFncy5jb3VudHMpLmZpbmQoa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEVycm9yKF9fKCdJbnZhbGlkIGNvbmZpZ3VyYXRpb246ICVzLCBvcHRzLmNvdW50IGV4Y2x1ZGVzIG9wdHMuYXJyYXkuJywga2V5KSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5uYXJncykpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFcnJvcihfXygnSW52YWxpZCBjb25maWd1cmF0aW9uOiAlcywgb3B0cy5jb3VudCBleGNsdWRlcyBvcHRzLm5hcmcuJywga2V5KSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWxpYXNlczogT2JqZWN0LmFzc2lnbih7fSwgZmxhZ3MuYWxpYXNlcyksXG4gICAgICAgICAgICBhcmd2OiBPYmplY3QuYXNzaWduKGFyZ3ZSZXR1cm4sIGFyZ3YpLFxuICAgICAgICAgICAgY29uZmlndXJhdGlvbjogY29uZmlndXJhdGlvbixcbiAgICAgICAgICAgIGRlZmF1bHRlZDogT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdGVkKSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgICAgIG5ld0FsaWFzZXM6IE9iamVjdC5hc3NpZ24oe30sIG5ld0FsaWFzZXMpXG4gICAgICAgIH07XG4gICAgfVxufVxuLy8gaWYgYW55IGFsaWFzZXMgcmVmZXJlbmNlIGVhY2ggb3RoZXIsIHdlIHNob3VsZFxuLy8gbWVyZ2UgdGhlbSB0b2dldGhlci5cbmZ1bmN0aW9uIGNvbWJpbmVBbGlhc2VzKGFsaWFzZXMpIHtcbiAgICBjb25zdCBhbGlhc0FycmF5cyA9IFtdO1xuICAgIGNvbnN0IGNvbWJpbmVkID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBsZXQgY2hhbmdlID0gdHJ1ZTtcbiAgICAvLyB0dXJuIGFsaWFzIGxvb2t1cCBoYXNoIHtrZXk6IFsnYWxpYXMxJywgJ2FsaWFzMiddfSBpbnRvXG4gICAgLy8gYSBzaW1wbGUgYXJyYXkgWydrZXknLCAnYWxpYXMxJywgJ2FsaWFzMiddXG4gICAgT2JqZWN0LmtleXMoYWxpYXNlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGFsaWFzQXJyYXlzLnB1c2goW10uY29uY2F0KGFsaWFzZXNba2V5XSwga2V5KSk7XG4gICAgfSk7XG4gICAgLy8gY29tYmluZSBhcnJheXMgdW50aWwgemVybyBjaGFuZ2VzIGFyZVxuICAgIC8vIG1hZGUgaW4gYW4gaXRlcmF0aW9uLlxuICAgIHdoaWxlIChjaGFuZ2UpIHtcbiAgICAgICAgY2hhbmdlID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWxpYXNBcnJheXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGlpID0gaSArIDE7IGlpIDwgYWxpYXNBcnJheXMubGVuZ3RoOyBpaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJzZWN0ID0gYWxpYXNBcnJheXNbaV0uZmlsdGVyKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGlhc0FycmF5c1tpaV0uaW5kZXhPZih2KSAhPT0gLTE7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGludGVyc2VjdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxpYXNBcnJheXNbaV0gPSBhbGlhc0FycmF5c1tpXS5jb25jYXQoYWxpYXNBcnJheXNbaWldKTtcbiAgICAgICAgICAgICAgICAgICAgYWxpYXNBcnJheXMuc3BsaWNlKGlpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIG1hcCBhcnJheXMgYmFjayB0byB0aGUgaGFzaC1sb29rdXAgKGRlLWR1cGUgd2hpbGVcbiAgICAvLyB3ZSdyZSBhdCBpdCkuXG4gICAgYWxpYXNBcnJheXMuZm9yRWFjaChmdW5jdGlvbiAoYWxpYXNBcnJheSkge1xuICAgICAgICBhbGlhc0FycmF5ID0gYWxpYXNBcnJheS5maWx0ZXIoZnVuY3Rpb24gKHYsIGksIHNlbGYpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmluZGV4T2YodikgPT09IGk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBsYXN0QWxpYXMgPSBhbGlhc0FycmF5LnBvcCgpO1xuICAgICAgICBpZiAobGFzdEFsaWFzICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGxhc3RBbGlhcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbWJpbmVkW2xhc3RBbGlhc10gPSBhbGlhc0FycmF5O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbWJpbmVkO1xufVxuLy8gdGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBhIGNvdW50IGlzIGdpdmVuIGFzIGFuIGFyZ1xuLy8gaXQgaXMgTk9UIGNhbGxlZCB0byBzZXQgYSBkZWZhdWx0IHZhbHVlXG4vLyB0aHVzIHdlIGNhbiBzdGFydCB0aGUgY291bnQgYXQgMSBpbnN0ZWFkIG9mIDBcbmZ1bmN0aW9uIGluY3JlbWVudChvcmlnKSB7XG4gICAgcmV0dXJuIG9yaWcgIT09IHVuZGVmaW5lZCA/IG9yaWcgKyAxIDogMTtcbn1cbi8vIFRPRE8oYmNvZSk6IGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgeWFyZ3MsIHN3aXRjaCB0b1xuLy8gT2JqZWN0LmNyZWF0ZShudWxsKSBmb3IgZG90IG5vdGF0aW9uOlxuZnVuY3Rpb24gc2FuaXRpemVLZXkoa2V5KSB7XG4gICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycpXG4gICAgICAgIHJldHVybiAnX19fcHJvdG9fX18nO1xuICAgIHJldHVybiBrZXk7XG59XG5mdW5jdGlvbiBzdHJpcFF1b3Rlcyh2YWwpIHtcbiAgICByZXR1cm4gKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICh2YWxbMF0gPT09IFwiJ1wiIHx8IHZhbFswXSA9PT0gJ1wiJykgJiZcbiAgICAgICAgdmFsW3ZhbC5sZW5ndGggLSAxXSA9PT0gdmFsWzBdKVxuICAgICAgICA/IHZhbC5zdWJzdHJpbmcoMSwgdmFsLmxlbmd0aCAtIDEpXG4gICAgICAgIDogdmFsO1xufVxuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IE1haW4gZW50cnlwb2ludCBmb3IgbGlicmFyaWVzIHVzaW5nIHlhcmdzLXBhcnNlciBpbiBOb2RlLmpzXG4gKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNiwgQ29udHJpYnV0b3JzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG4gKi9cbnZhciBfYSwgX2IsIF9jO1xuLyogZXNsaW50LWRpc2FibGUgbi9uby11bnB1Ymxpc2hlZC1pbXBvcnQgKi9cbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHsgbm9ybWFsaXplLCByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBjYW1lbENhc2UsIGRlY2FtZWxpemUsIGxvb2tzTGlrZU51bWJlciB9IGZyb20gJy4vc3RyaW5nLXV0aWxzLmpzJztcbmltcG9ydCB7IFlhcmdzUGFyc2VyIH0gZnJvbSAnLi95YXJncy1wYXJzZXIuanMnO1xuaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gJ25vZGU6bW9kdWxlJztcbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20veWFyZ3MveWFyZ3MtcGFyc2VyI3N1cHBvcnRlZC1ub2RlanMtdmVyc2lvbnMgZm9yIG91clxuLy8gdmVyc2lvbiBzdXBwb3J0IHBvbGljeS4gVGhlIFlBUkdTX01JTl9OT0RFX1ZFUlNJT04gaXMgdXNlZCBmb3IgdGVzdGluZyBvbmx5LlxuY29uc3QgbWluTm9kZVZlcnNpb24gPSAocHJvY2VzcyAmJiBwcm9jZXNzLmVudiAmJiBwcm9jZXNzLmVudi5ZQVJHU19NSU5fTk9ERV9WRVJTSU9OKVxuICAgID8gTnVtYmVyKHByb2Nlc3MuZW52LllBUkdTX01JTl9OT0RFX1ZFUlNJT04pXG4gICAgOiAyMDtcbmNvbnN0IG5vZGVWZXJzaW9uID0gKF9iID0gKF9hID0gcHJvY2VzcyA9PT0gbnVsbCB8fCBwcm9jZXNzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcm9jZXNzLnZlcnNpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eubm9kZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogKF9jID0gcHJvY2VzcyA9PT0gbnVsbCB8fCBwcm9jZXNzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcm9jZXNzLnZlcnNpb24pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5zbGljZSgxKTtcbmlmIChub2RlVmVyc2lvbikge1xuICAgIGNvbnN0IG1ham9yID0gTnVtYmVyKG5vZGVWZXJzaW9uLm1hdGNoKC9eKFteLl0rKS8pWzFdKTtcbiAgICBpZiAobWFqb3IgPCBtaW5Ob2RlVmVyc2lvbikge1xuICAgICAgICB0aHJvdyBFcnJvcihgeWFyZ3MgcGFyc2VyIHN1cHBvcnRzIGEgbWluaW11bSBOb2RlLmpzIHZlcnNpb24gb2YgJHttaW5Ob2RlVmVyc2lvbn0uIFJlYWQgb3VyIHZlcnNpb24gc3VwcG9ydCBwb2xpY3k6IGh0dHBzOi8vZ2l0aHViLmNvbS95YXJncy95YXJncy1wYXJzZXIjc3VwcG9ydGVkLW5vZGVqcy12ZXJzaW9uc2ApO1xuICAgIH1cbn1cbi8vIENyZWF0ZXMgYSB5YXJncy1wYXJzZXIgaW5zdGFuY2UgdXNpbmcgTm9kZS5qcyBzdGFuZGFyZCBsaWJyYXJpZXM6XG5jb25zdCBlbnYgPSBwcm9jZXNzID8gcHJvY2Vzcy5lbnYgOiB7fTtcbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlID8gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpIDogdW5kZWZpbmVkO1xuY29uc3QgcGFyc2VyID0gbmV3IFlhcmdzUGFyc2VyKHtcbiAgICBjd2Q6IHByb2Nlc3MuY3dkLFxuICAgIGVudjogKCkgPT4ge1xuICAgICAgICByZXR1cm4gZW52O1xuICAgIH0sXG4gICAgZm9ybWF0LFxuICAgIG5vcm1hbGl6ZSxcbiAgICByZXNvbHZlLFxuICAgIHJlcXVpcmU6IChwYXRoKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlKHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHBhdGgubWF0Y2goL1xcLmpzb24kLykpIHtcbiAgICAgICAgICAgIC8vIEFkZHJlc3NlczogaHR0cHM6Ly9naXRodWIuY29tL3lhcmdzL3lhcmdzL2lzc3Vlcy8yMDQwXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMocGF0aCwgJ3V0ZjgnKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignb25seSAuanNvbiBjb25maWcgZmlsZXMgYXJlIHN1cHBvcnRlZCBpbiBFU00nKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuY29uc3QgeWFyZ3NQYXJzZXIgPSBmdW5jdGlvbiBQYXJzZXIoYXJncywgb3B0cykge1xuICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlci5wYXJzZShhcmdzLnNsaWNlKCksIG9wdHMpO1xuICAgIHJldHVybiByZXN1bHQuYXJndjtcbn07XG55YXJnc1BhcnNlci5kZXRhaWxlZCA9IGZ1bmN0aW9uIChhcmdzLCBvcHRzKSB7XG4gICAgcmV0dXJuIHBhcnNlci5wYXJzZShhcmdzLnNsaWNlKCksIG9wdHMpO1xufTtcbnlhcmdzUGFyc2VyLmNhbWVsQ2FzZSA9IGNhbWVsQ2FzZTtcbnlhcmdzUGFyc2VyLmRlY2FtZWxpemUgPSBkZWNhbWVsaXplO1xueWFyZ3NQYXJzZXIubG9va3NMaWtlTnVtYmVyID0gbG9va3NMaWtlTnVtYmVyO1xuZXhwb3J0IGRlZmF1bHQgeWFyZ3NQYXJzZXI7XG4vLyBzcGVjaWFsIHN5bnRheCB0byBhbGxvdyB1bnF1YWxpZmllZCBkZWZhdWx0IGV4cG9ydCBmcm9tIENvbW1vbkpTXG5leHBvcnQgeyB5YXJnc1BhcnNlciBhcyAnbW9kdWxlLmV4cG9ydHMnIH07XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYsIENvbnRyaWJ1dG9yc1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuICovXG4vLyB0YWtlIGFuIHVuLXNwbGl0IGFyZ3Ygc3RyaW5nIGFuZCB0b2tlbml6ZSBpdC5cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZUFyZ1N0cmluZyhhcmdTdHJpbmcpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcmdTdHJpbmcpKSB7XG4gICAgICAgIHJldHVybiBhcmdTdHJpbmcubWFwKGUgPT4gdHlwZW9mIGUgIT09ICdzdHJpbmcnID8gZSArICcnIDogZSk7XG4gICAgfVxuICAgIGFyZ1N0cmluZyA9IGFyZ1N0cmluZy50cmltKCk7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBwcmV2QyA9IG51bGw7XG4gICAgbGV0IGMgPSBudWxsO1xuICAgIGxldCBvcGVuaW5nID0gbnVsbDtcbiAgICBjb25zdCBhcmdzID0gW107XG4gICAgZm9yIChsZXQgaWkgPSAwOyBpaSA8IGFyZ1N0cmluZy5sZW5ndGg7IGlpKyspIHtcbiAgICAgICAgcHJldkMgPSBjO1xuICAgICAgICBjID0gYXJnU3RyaW5nLmNoYXJBdChpaSk7XG4gICAgICAgIC8vIHNwbGl0IG9uIHNwYWNlcyB1bmxlc3Mgd2UncmUgaW4gcXVvdGVzLlxuICAgICAgICBpZiAoYyA9PT0gJyAnICYmICFvcGVuaW5nKSB7XG4gICAgICAgICAgICBpZiAoIShwcmV2QyA9PT0gJyAnKSkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRvbid0IHNwbGl0IHRoZSBzdHJpbmcgaWYgd2UncmUgaW4gbWF0Y2hpbmdcbiAgICAgICAgLy8gb3BlbmluZyBvciBjbG9zaW5nIHNpbmdsZSBhbmQgZG91YmxlIHF1b3Rlcy5cbiAgICAgICAgaWYgKGMgPT09IG9wZW5pbmcpIHtcbiAgICAgICAgICAgIG9wZW5pbmcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKChjID09PSBcIidcIiB8fCBjID09PSAnXCInKSAmJiAhb3BlbmluZykge1xuICAgICAgICAgICAgb3BlbmluZyA9IGM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhcmdzW2ldKVxuICAgICAgICAgICAgYXJnc1tpXSA9ICcnO1xuICAgICAgICBhcmdzW2ldICs9IGM7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuIiwiZnVuY3Rpb24gZ2V0UHJvY2Vzc0FyZ3ZCaW5JbmRleCgpIHtcbiAgICBpZiAoaXNCdW5kbGVkRWxlY3Ryb25BcHAoKSlcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIDE7XG59XG5mdW5jdGlvbiBpc0J1bmRsZWRFbGVjdHJvbkFwcCgpIHtcbiAgICByZXR1cm4gaXNFbGVjdHJvbkFwcCgpICYmICFwcm9jZXNzLmRlZmF1bHRBcHA7XG59XG5mdW5jdGlvbiBpc0VsZWN0cm9uQXBwKCkge1xuICAgIHJldHVybiAhIXByb2Nlc3MudmVyc2lvbnMuZWxlY3Ryb247XG59XG5leHBvcnQgZnVuY3Rpb24gaGlkZUJpbihhcmd2KSB7XG4gICAgcmV0dXJuIGFyZ3Yuc2xpY2UoZ2V0UHJvY2Vzc0FyZ3ZCaW5JbmRleCgpICsgMSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvY2Vzc0FyZ3ZCaW4oKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuYXJndltnZXRQcm9jZXNzQXJndkJpbkluZGV4KCldO1xufVxuIiwiaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCBzdGF0U3luYywgd3JpdGVGaWxlIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgZnM6IHtcbiAgICAgICAgcmVhZEZpbGVTeW5jLFxuICAgICAgICB3cml0ZUZpbGVcbiAgICB9LFxuICAgIGZvcm1hdCxcbiAgICByZXNvbHZlLFxuICAgIGV4aXN0czogKGZpbGUpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBzdGF0U3luYyhmaWxlKS5pc0ZpbGUoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwibGV0IHNoaW07XG5jbGFzcyBZMThOIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIC8vIGNvbmZpZ3VyYWJsZSBvcHRpb25zLlxuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICAgICAgdGhpcy5kaXJlY3RvcnkgPSBvcHRzLmRpcmVjdG9yeSB8fCAnLi9sb2NhbGVzJztcbiAgICAgICAgdGhpcy51cGRhdGVGaWxlcyA9IHR5cGVvZiBvcHRzLnVwZGF0ZUZpbGVzID09PSAnYm9vbGVhbicgPyBvcHRzLnVwZGF0ZUZpbGVzIDogdHJ1ZTtcbiAgICAgICAgdGhpcy5sb2NhbGUgPSBvcHRzLmxvY2FsZSB8fCAnZW4nO1xuICAgICAgICB0aGlzLmZhbGxiYWNrVG9MYW5ndWFnZSA9IHR5cGVvZiBvcHRzLmZhbGxiYWNrVG9MYW5ndWFnZSA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5mYWxsYmFja1RvTGFuZ3VhZ2UgOiB0cnVlO1xuICAgICAgICAvLyBpbnRlcm5hbCBzdHVmZi5cbiAgICAgICAgdGhpcy5jYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMud3JpdGVRdWV1ZSA9IFtdO1xuICAgIH1cbiAgICBfXyguLi5hcmdzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RhZ2dlZExpdGVyYWwoYXJndW1lbnRzWzBdLCAuLi5hcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0ciA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgbGV0IGNiID0gZnVuY3Rpb24gKCkgeyB9OyAvLyBzdGFydCB3aXRoIG5vb3AuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IgPSBhcmdzLnBvcCgpO1xuICAgICAgICBjYiA9IGNiIHx8IGZ1bmN0aW9uICgpIHsgfTsgLy8gbm9vcC5cbiAgICAgICAgaWYgKCF0aGlzLmNhY2hlW3RoaXMubG9jYWxlXSlcbiAgICAgICAgICAgIHRoaXMuX3JlYWRMb2NhbGVGaWxlKCk7XG4gICAgICAgIC8vIHdlJ3ZlIG9ic2VydmVkIGEgbmV3IHN0cmluZywgdXBkYXRlIHRoZSBsYW5ndWFnZSBmaWxlLlxuICAgICAgICBpZiAoIXRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW3N0cl0gJiYgdGhpcy51cGRhdGVGaWxlcykge1xuICAgICAgICAgICAgdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc3RyXSA9IHN0cjtcbiAgICAgICAgICAgIC8vIGluY2x1ZGUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBsb2NhbGUsXG4gICAgICAgICAgICAvLyBzaW5jZSB0aGVzZSB2YWx1ZXMgY291bGQgY2hhbmdlIGJlZm9yZSB0aGVcbiAgICAgICAgICAgIC8vIHdyaXRlIGlzIHBlcmZvcm1lZC5cbiAgICAgICAgICAgIHRoaXMuX2VucXVldWVXcml0ZSh7XG4gICAgICAgICAgICAgICAgZGlyZWN0b3J5OiB0aGlzLmRpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNoaW0uZm9ybWF0LmFwcGx5KHNoaW0uZm9ybWF0LCBbdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc3RyXSB8fCBzdHJdLmNvbmNhdChhcmdzKSk7XG4gICAgfVxuICAgIF9fbigpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgIGNvbnN0IHNpbmd1bGFyID0gYXJncy5zaGlmdCgpO1xuICAgICAgICBjb25zdCBwbHVyYWwgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgIGNvbnN0IHF1YW50aXR5ID0gYXJncy5zaGlmdCgpO1xuICAgICAgICBsZXQgY2IgPSBmdW5jdGlvbiAoKSB7IH07IC8vIHN0YXJ0IHdpdGggbm9vcC5cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYiA9IGFyZ3MucG9wKCk7XG4gICAgICAgIGlmICghdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV0pXG4gICAgICAgICAgICB0aGlzLl9yZWFkTG9jYWxlRmlsZSgpO1xuICAgICAgICBsZXQgc3RyID0gcXVhbnRpdHkgPT09IDEgPyBzaW5ndWxhciA6IHBsdXJhbDtcbiAgICAgICAgaWYgKHRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW3Npbmd1bGFyXSkge1xuICAgICAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzaW5ndWxhcl07XG4gICAgICAgICAgICBzdHIgPSBlbnRyeVtxdWFudGl0eSA9PT0gMSA/ICdvbmUnIDogJ290aGVyJ107XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2UndmUgb2JzZXJ2ZWQgYSBuZXcgc3RyaW5nLCB1cGRhdGUgdGhlIGxhbmd1YWdlIGZpbGUuXG4gICAgICAgIGlmICghdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc2luZ3VsYXJdICYmIHRoaXMudXBkYXRlRmlsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW3Npbmd1bGFyXSA9IHtcbiAgICAgICAgICAgICAgICBvbmU6IHNpbmd1bGFyLFxuICAgICAgICAgICAgICAgIG90aGVyOiBwbHVyYWxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBpbmNsdWRlIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgbG9jYWxlLFxuICAgICAgICAgICAgLy8gc2luY2UgdGhlc2UgdmFsdWVzIGNvdWxkIGNoYW5nZSBiZWZvcmUgdGhlXG4gICAgICAgICAgICAvLyB3cml0ZSBpcyBwZXJmb3JtZWQuXG4gICAgICAgICAgICB0aGlzLl9lbnF1ZXVlV3JpdGUoe1xuICAgICAgICAgICAgICAgIGRpcmVjdG9yeTogdGhpcy5kaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYigpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGEgJWQgcGxhY2Vob2xkZXIgaXMgcHJvdmlkZWQsIGFkZCBxdWFudGl0eVxuICAgICAgICAvLyB0byB0aGUgYXJndW1lbnRzIGV4cGFuZGVkIGJ5IHV0aWwuZm9ybWF0LlxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbc3RyXTtcbiAgICAgICAgaWYgKH5zdHIuaW5kZXhPZignJWQnKSlcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHF1YW50aXR5KTtcbiAgICAgICAgcmV0dXJuIHNoaW0uZm9ybWF0LmFwcGx5KHNoaW0uZm9ybWF0LCB2YWx1ZXMuY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gICAgc2V0TG9jYWxlKGxvY2FsZSkge1xuICAgICAgICB0aGlzLmxvY2FsZSA9IGxvY2FsZTtcbiAgICB9XG4gICAgZ2V0TG9jYWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGU7XG4gICAgfVxuICAgIHVwZGF0ZUxvY2FsZShvYmopIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhY2hlW3RoaXMubG9jYWxlXSlcbiAgICAgICAgICAgIHRoaXMuX3JlYWRMb2NhbGVGaWxlKCk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtrZXldID0gb2JqW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgX3RhZ2dlZExpdGVyYWwocGFydHMsIC4uLmFyZ3MpIHtcbiAgICAgICAgbGV0IHN0ciA9ICcnO1xuICAgICAgICBwYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJ0LCBpKSB7XG4gICAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzW2kgKyAxXTtcbiAgICAgICAgICAgIHN0ciArPSBwYXJ0O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmcgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgc3RyICs9ICclcyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5fXy5hcHBseSh0aGlzLCBbc3RyXS5jb25jYXQoW10uc2xpY2UuY2FsbChhcmdzLCAxKSkpO1xuICAgIH1cbiAgICBfZW5xdWV1ZVdyaXRlKHdvcmspIHtcbiAgICAgICAgdGhpcy53cml0ZVF1ZXVlLnB1c2god29yayk7XG4gICAgICAgIGlmICh0aGlzLndyaXRlUXVldWUubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc1dyaXRlUXVldWUoKTtcbiAgICB9XG4gICAgX3Byb2Nlc3NXcml0ZVF1ZXVlKCkge1xuICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHdvcmsgPSB0aGlzLndyaXRlUXVldWVbMF07XG4gICAgICAgIC8vIGRlc3RydWN0dXJlIHRoZSBlbnF1ZXVlZCB3b3JrLlxuICAgICAgICBjb25zdCBkaXJlY3RvcnkgPSB3b3JrLmRpcmVjdG9yeTtcbiAgICAgICAgY29uc3QgbG9jYWxlID0gd29yay5sb2NhbGU7XG4gICAgICAgIGNvbnN0IGNiID0gd29yay5jYjtcbiAgICAgICAgY29uc3QgbGFuZ3VhZ2VGaWxlID0gdGhpcy5fcmVzb2x2ZUxvY2FsZUZpbGUoZGlyZWN0b3J5LCBsb2NhbGUpO1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkTG9jYWxlID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jYWNoZVtsb2NhbGVdLCBudWxsLCAyKTtcbiAgICAgICAgc2hpbS5mcy53cml0ZUZpbGUobGFuZ3VhZ2VGaWxlLCBzZXJpYWxpemVkTG9jYWxlLCAndXRmLTgnLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBfdGhpcy53cml0ZVF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICBpZiAoX3RoaXMud3JpdGVRdWV1ZS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgIF90aGlzLl9wcm9jZXNzV3JpdGVRdWV1ZSgpO1xuICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9yZWFkTG9jYWxlRmlsZSgpIHtcbiAgICAgICAgbGV0IGxvY2FsZUxvb2t1cCA9IHt9O1xuICAgICAgICBjb25zdCBsYW5ndWFnZUZpbGUgPSB0aGlzLl9yZXNvbHZlTG9jYWxlRmlsZSh0aGlzLmRpcmVjdG9yeSwgdGhpcy5sb2NhbGUpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB1c2luZyBhIGJ1bmRsZXIgc3VjaCBhcyB3ZWJwYWNrLCByZWFkRmlsZVN5bmMgbWF5IG5vdCBiZSBkZWZpbmVkOlxuICAgICAgICAgICAgaWYgKHNoaW0uZnMucmVhZEZpbGVTeW5jKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxlTG9va3VwID0gSlNPTi5wYXJzZShzaGltLmZzLnJlYWRGaWxlU3luYyhsYW5ndWFnZUZpbGUsICd1dGYtOCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlcnIubWVzc2FnZSA9ICdzeW50YXggZXJyb3IgaW4gJyArIGxhbmd1YWdlRmlsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpXG4gICAgICAgICAgICAgICAgbG9jYWxlTG9va3VwID0ge307XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdID0gbG9jYWxlTG9va3VwO1xuICAgIH1cbiAgICBfcmVzb2x2ZUxvY2FsZUZpbGUoZGlyZWN0b3J5LCBsb2NhbGUpIHtcbiAgICAgICAgbGV0IGZpbGUgPSBzaGltLnJlc29sdmUoZGlyZWN0b3J5LCAnLi8nLCBsb2NhbGUgKyAnLmpzb24nKTtcbiAgICAgICAgaWYgKHRoaXMuZmFsbGJhY2tUb0xhbmd1YWdlICYmICF0aGlzLl9maWxlRXhpc3RzU3luYyhmaWxlKSAmJiB+bG9jYWxlLmxhc3RJbmRleE9mKCdfJykpIHtcbiAgICAgICAgICAgIC8vIGF0dGVtcHQgZmFsbGJhY2sgdG8gbGFuZ3VhZ2Ugb25seVxuICAgICAgICAgICAgY29uc3QgbGFuZ3VhZ2VGaWxlID0gc2hpbS5yZXNvbHZlKGRpcmVjdG9yeSwgJy4vJywgbG9jYWxlLnNwbGl0KCdfJylbMF0gKyAnLmpzb24nKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9maWxlRXhpc3RzU3luYyhsYW5ndWFnZUZpbGUpKVxuICAgICAgICAgICAgICAgIGZpbGUgPSBsYW5ndWFnZUZpbGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbGU7XG4gICAgfVxuICAgIF9maWxlRXhpc3RzU3luYyhmaWxlKSB7XG4gICAgICAgIHJldHVybiBzaGltLmV4aXN0cyhmaWxlKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24geTE4bihvcHRzLCBfc2hpbSkge1xuICAgIHNoaW0gPSBfc2hpbTtcbiAgICBjb25zdCB5MThuID0gbmV3IFkxOE4ob3B0cyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgX186IHkxOG4uX18uYmluZCh5MThuKSxcbiAgICAgICAgX19uOiB5MThuLl9fbi5iaW5kKHkxOG4pLFxuICAgICAgICBzZXRMb2NhbGU6IHkxOG4uc2V0TG9jYWxlLmJpbmQoeTE4biksXG4gICAgICAgIGdldExvY2FsZTogeTE4bi5nZXRMb2NhbGUuYmluZCh5MThuKSxcbiAgICAgICAgdXBkYXRlTG9jYWxlOiB5MThuLnVwZGF0ZUxvY2FsZS5iaW5kKHkxOG4pLFxuICAgICAgICBsb2NhbGU6IHkxOG4ubG9jYWxlXG4gICAgfTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuLy8gQ2FsbCB0aGlzIGZ1bmN0aW9uIGluIGEgYW5vdGhlciBmdW5jdGlvbiB0byBmaW5kIG91dCB0aGUgZmlsZSBmcm9tXG4vLyB3aGljaCB0aGF0IGZ1bmN0aW9uIHdhcyBjYWxsZWQgZnJvbS4gKEluc3BlY3RzIHRoZSB2OCBzdGFjayB0cmFjZSlcbi8vXG4vLyBJbnNwaXJlZCBieSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEzMjI3NDg5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldENhbGxlckZpbGUocG9zaXRpb24pIHtcbiAgICBpZiAocG9zaXRpb24gPT09IHZvaWQgMCkgeyBwb3NpdGlvbiA9IDI7IH1cbiAgICBpZiAocG9zaXRpb24gPj0gRXJyb3Iuc3RhY2tUcmFjZUxpbWl0KSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2dldENhbGxlckZpbGUocG9zaXRpb24pIHJlcXVpcmVzIHBvc2l0aW9uIGJlIGxlc3MgdGhlbiBFcnJvci5zdGFja1RyYWNlTGltaXQgYnV0IHBvc2l0aW9uIHdhczogYCcgKyBwb3NpdGlvbiArICdgIGFuZCBFcnJvci5zdGFja1RyYWNlTGltaXQgd2FzOiBgJyArIEVycm9yLnN0YWNrVHJhY2VMaW1pdCArICdgJyk7XG4gICAgfVxuICAgIHZhciBvbGRQcmVwYXJlU3RhY2tUcmFjZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlO1xuICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gZnVuY3Rpb24gKF8sIHN0YWNrKSB7IHJldHVybiBzdGFjazsgfTtcbiAgICB2YXIgc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IG9sZFByZXBhcmVTdGFja1RyYWNlO1xuICAgIGlmIChzdGFjayAhPT0gbnVsbCAmJiB0eXBlb2Ygc3RhY2sgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vIHN0YWNrWzBdIGhvbGRzIHRoaXMgZmlsZVxuICAgICAgICAvLyBzdGFja1sxXSBob2xkcyB3aGVyZSB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWRcbiAgICAgICAgLy8gc3RhY2tbMl0gaG9sZHMgdGhlIGZpbGUgd2UncmUgaW50ZXJlc3RlZCBpblxuICAgICAgICByZXR1cm4gc3RhY2tbcG9zaXRpb25dID8gc3RhY2tbcG9zaXRpb25dLmdldEZpbGVOYW1lKCkgOiB1bmRlZmluZWQ7XG4gICAgfVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIid1c2Ugc3RyaWN0J1xuXG5pbXBvcnQgeyBub3RTdHJpY3RFcXVhbCwgc3RyaWN0RXF1YWwgfSBmcm9tICdhc3NlcnQnXG5pbXBvcnQgY2xpdWkgZnJvbSAnY2xpdWknXG5pbXBvcnQgZXNjYWxhZGUgZnJvbSAnZXNjYWxhZGUvc3luYydcbmltcG9ydCB7IGluc3BlY3QgfSBmcm9tICd1dGlsJ1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ3VybCc7XG5pbXBvcnQgUGFyc2VyIGZyb20gJ3lhcmdzLXBhcnNlcidcbmltcG9ydCB7IGJhc2VuYW1lLCBkaXJuYW1lLCBleHRuYW1lLCByZWxhdGl2ZSwgcmVzb2x2ZSwgam9pbiB9IGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBnZXRQcm9jZXNzQXJndkJpbiB9IGZyb20gJy4uLy4uL2J1aWxkL2xpYi91dGlscy9wcm9jZXNzLWFyZ3YuanMnXG5pbXBvcnQgc3RyaW5nV2lkdGggZnJvbSAnc3RyaW5nLXdpZHRoJztcbmltcG9ydCB5MThuIGZyb20gJ3kxOG4nXG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSAnbm9kZTptb2R1bGUnO1xuaW1wb3J0IGdldENhbGxlckZpbGUgZnJvbSAnZ2V0LWNhbGxlci1maWxlJztcbmltcG9ydCB7IHJlYWRGaWxlU3luYywgcmVhZGRpclN5bmMgfSBmcm9tICdub2RlOmZzJ1xuXG5jb25zdCBfX2Rpcm5hbWUgPSBmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCk7XG5jb25zdCBtYWluRmlsZW5hbWUgPSBfX2Rpcm5hbWUuc3Vic3RyaW5nKDAsIF9fZGlybmFtZS5sYXN0SW5kZXhPZignbm9kZV9tb2R1bGVzJykpO1xuY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBhc3NlcnQ6IHtcbiAgICBub3RTdHJpY3RFcXVhbCxcbiAgICBzdHJpY3RFcXVhbFxuICB9LFxuICBjbGl1aSxcbiAgZmluZFVwOiBlc2NhbGFkZSxcbiAgZ2V0RW52OiAoa2V5KSA9PiB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52W2tleV1cbiAgfSxcbiAgaW5zcGVjdCxcbiAgZ2V0UHJvY2Vzc0FyZ3ZCaW4sXG4gIG1haW5GaWxlbmFtZTogbWFpbkZpbGVuYW1lIHx8IHByb2Nlc3MuY3dkKCksXG4gIFBhcnNlcixcbiAgcGF0aDoge1xuICAgIGJhc2VuYW1lLFxuICAgIGRpcm5hbWUsXG4gICAgZXh0bmFtZSxcbiAgICByZWxhdGl2ZSxcbiAgICByZXNvbHZlLFxuICAgIGpvaW5cbiAgfSxcbiAgcHJvY2Vzczoge1xuICAgIGFyZ3Y6ICgpID0+IHByb2Nlc3MuYXJndixcbiAgICBjd2Q6IHByb2Nlc3MuY3dkLFxuICAgIGVtaXRXYXJuaW5nOiAod2FybmluZywgdHlwZSkgPT4gcHJvY2Vzcy5lbWl0V2FybmluZyh3YXJuaW5nLCB0eXBlKSxcbiAgICBleGVjUGF0aDogKCkgPT4gcHJvY2Vzcy5leGVjUGF0aCxcbiAgICBleGl0OiAoY29kZSkgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG4vbm8tcHJvY2Vzcy1leGl0XG4gICAgICBwcm9jZXNzLmV4aXQoY29kZSk7XG4gICAgfSxcbiAgICBuZXh0VGljazogcHJvY2Vzcy5uZXh0VGljayxcbiAgICBzdGRDb2x1bW5zOiB0eXBlb2YgcHJvY2Vzcy5zdGRvdXQuY29sdW1ucyAhPT0gJ3VuZGVmaW5lZCcgPyBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIDogbnVsbFxuICB9LFxuICByZWFkRmlsZVN5bmMsXG4gIHJlYWRkaXJTeW5jLFxuICByZXF1aXJlLFxuICBnZXRDYWxsZXJGaWxlOiAoKSA9PiB7XG4gICAgY29uc3QgY2FsbGVyRmlsZSA9IGdldENhbGxlckZpbGUoMyk7XG4gICAgcmV0dXJuIGNhbGxlckZpbGUubWF0Y2goL15maWxlOlxcL1xcLy8pID8gZmlsZVVSTFRvUGF0aChjYWxsZXJGaWxlKSA6IGNhbGxlckZpbGU7XG4gIH0sXG4gIHN0cmluZ1dpZHRoLFxuICB5MThuOiB5MThuKHtcbiAgICBkaXJlY3Rvcnk6IHJlc29sdmUoX19kaXJuYW1lLCAnLi4vLi4vLi4vbG9jYWxlcycpLFxuICAgIHVwZGF0ZUZpbGVzOiBmYWxzZVxuICB9KVxufVxuIiwiaW1wb3J0IHNoaW0gZnJvbSAnLi9idWlsZC9saWIvcGxhdGZvcm0tc2hpbXMvbm9kZS5qcydcbmltcG9ydCB7IHkxOG4gYXMgX3kxOG4gfSBmcm9tICcuL2J1aWxkL2xpYi9pbmRleC5qcydcblxuY29uc3QgeTE4biA9IChvcHRzKSA9PiB7XG4gIHJldHVybiBfeTE4bihvcHRzLCBzaGltKVxufVxuXG5leHBvcnQgZGVmYXVsdCB5MThuXG4iLCIvLyBCb290c3RyYXAgY2xpdWkgd2l0aCBDb21tb25KUyBkZXBlbmRlbmNpZXM6XG5pbXBvcnQgeyBjbGl1aSB9IGZyb20gJy4vYnVpbGQvbGliL2luZGV4LmpzJ1xuaW1wb3J0IHN0cmluZ1dpZHRoIGZyb20gJ3N0cmluZy13aWR0aCdcbmltcG9ydCBzdHJpcEFuc2kgZnJvbSAnc3RyaXAtYW5zaSdcbmltcG9ydCB3cmFwQW5zaSBmcm9tICd3cmFwLWFuc2knXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVpIChvcHRzKSB7XG4gIHJldHVybiBjbGl1aShvcHRzLCB7XG4gICAgc3RyaW5nV2lkdGgsXG4gICAgc3RyaXBBbnNpLFxuICAgIHdyYXA6IHdyYXBBbnNpXG4gIH0pXG59XG5cbmV4cG9ydCB7dWkgYXMgJ21vZHVsZS5leHBvcnRzJ307XG4iLCJpbXBvcnQgeyBkaXJuYW1lLCByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyByZWFkZGlyU3luYywgc3RhdFN5bmMgfSBmcm9tICdmcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChzdGFydCwgY2FsbGJhY2spIHtcblx0bGV0IGRpciA9IHJlc29sdmUoJy4nLCBzdGFydCk7XG5cdGxldCB0bXAsIHN0YXRzID0gc3RhdFN5bmMoZGlyKTtcblxuXHRpZiAoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcblx0XHRkaXIgPSBkaXJuYW1lKGRpcik7XG5cdH1cblxuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdHRtcCA9IGNhbGxiYWNrKGRpciwgcmVhZGRpclN5bmMoZGlyKSk7XG5cdFx0aWYgKHRtcCkgcmV0dXJuIHJlc29sdmUoZGlyLCB0bXApO1xuXHRcdGRpciA9IGRpcm5hbWUodG1wID0gZGlyKTtcblx0XHRpZiAodG1wID09PSBkaXIpIGJyZWFrO1xuXHR9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gYXNzZXJ0Tm90U3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgc2hpbSwgbWVzc2FnZSkge1xuICAgIHNoaW0uYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFNpbmdsZUtleShhY3R1YWwsIHNoaW0pIHtcbiAgICBzaGltLmFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgYWN0dWFsLCAnc3RyaW5nJyk7XG59XG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0S2V5cyhvYmplY3QpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBpc1Byb21pc2UobWF5YmVQcm9taXNlKSB7XG4gICAgcmV0dXJuICghIW1heWJlUHJvbWlzZSAmJlxuICAgICAgICAhIW1heWJlUHJvbWlzZS50aGVuICYmXG4gICAgICAgIHR5cGVvZiBtYXliZVByb21pc2UudGhlbiA9PT0gJ2Z1bmN0aW9uJyk7XG59XG4iLCJleHBvcnQgY2xhc3MgWUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1zZykge1xuICAgICAgICBzdXBlcihtc2cgfHwgJ3lhcmdzIGVycm9yJyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdZRXJyb3InO1xuICAgICAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFlFcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gcGFyc2VDb21tYW5kKGNtZCkge1xuICAgIGNvbnN0IGV4dHJhU3BhY2VzU3RyaXBwZWRDb21tYW5kID0gY21kLnJlcGxhY2UoL1xcc3syLH0vZywgJyAnKTtcbiAgICBjb25zdCBzcGxpdENvbW1hbmQgPSBleHRyYVNwYWNlc1N0cmlwcGVkQ29tbWFuZC5zcGxpdCgvXFxzKyg/IVteW10qXXxbXjxdKj4pLyk7XG4gICAgY29uc3QgYnJlZ2V4ID0gL1xcLipbXFxdWzw+XS9nO1xuICAgIGNvbnN0IGZpcnN0Q29tbWFuZCA9IHNwbGl0Q29tbWFuZC5zaGlmdCgpO1xuICAgIGlmICghZmlyc3RDb21tYW5kKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGNvbW1hbmQgZm91bmQgaW46ICR7Y21kfWApO1xuICAgIGNvbnN0IHBhcnNlZENvbW1hbmQgPSB7XG4gICAgICAgIGNtZDogZmlyc3RDb21tYW5kLnJlcGxhY2UoYnJlZ2V4LCAnJyksXG4gICAgICAgIGRlbWFuZGVkOiBbXSxcbiAgICAgICAgb3B0aW9uYWw6IFtdLFxuICAgIH07XG4gICAgc3BsaXRDb21tYW5kLmZvckVhY2goKGNtZCwgaSkgPT4ge1xuICAgICAgICBsZXQgdmFyaWFkaWMgPSBmYWxzZTtcbiAgICAgICAgY21kID0gY21kLnJlcGxhY2UoL1xccy9nLCAnJyk7XG4gICAgICAgIGlmICgvXFwuK1tcXF0+XS8udGVzdChjbWQpICYmIGkgPT09IHNwbGl0Q29tbWFuZC5sZW5ndGggLSAxKVxuICAgICAgICAgICAgdmFyaWFkaWMgPSB0cnVlO1xuICAgICAgICBpZiAoL15cXFsvLnRlc3QoY21kKSkge1xuICAgICAgICAgICAgcGFyc2VkQ29tbWFuZC5vcHRpb25hbC5wdXNoKHtcbiAgICAgICAgICAgICAgICBjbWQ6IGNtZC5yZXBsYWNlKGJyZWdleCwgJycpLnNwbGl0KCd8JyksXG4gICAgICAgICAgICAgICAgdmFyaWFkaWMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlZENvbW1hbmQuZGVtYW5kZWQucHVzaCh7XG4gICAgICAgICAgICAgICAgY21kOiBjbWQucmVwbGFjZShicmVnZXgsICcnKS5zcGxpdCgnfCcpLFxuICAgICAgICAgICAgICAgIHZhcmlhZGljLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcGFyc2VkQ29tbWFuZDtcbn1cbiIsImltcG9ydCB7IFlFcnJvciB9IGZyb20gJy4veWVycm9yLmpzJztcbmltcG9ydCB7IHBhcnNlQ29tbWFuZCB9IGZyb20gJy4vcGFyc2UtY29tbWFuZC5qcyc7XG5jb25zdCBwb3NpdGlvbk5hbWUgPSBbJ2ZpcnN0JywgJ3NlY29uZCcsICd0aGlyZCcsICdmb3VydGgnLCAnZmlmdGgnLCAnc2l4dGgnXTtcbmV4cG9ydCBmdW5jdGlvbiBhcmdzZXJ0KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICBmdW5jdGlvbiBwYXJzZUFyZ3MoKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgYXJnMSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgID8gW3sgZGVtYW5kZWQ6IFtdLCBvcHRpb25hbDogW10gfSwgYXJnMSwgYXJnMl1cbiAgICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAgIHBhcnNlQ29tbWFuZChgY21kICR7YXJnMX1gKSxcbiAgICAgICAgICAgICAgICBhcmcyLFxuICAgICAgICAgICAgICAgIGFyZzMsXG4gICAgICAgICAgICBdO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBsZXQgcG9zaXRpb24gPSAwO1xuICAgICAgICBjb25zdCBbcGFyc2VkLCBjYWxsZXJBcmd1bWVudHMsIF9sZW5ndGhdID0gcGFyc2VBcmdzKCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBbXS5zbGljZS5jYWxsKGNhbGxlckFyZ3VtZW50cyk7XG4gICAgICAgIHdoaWxlIChhcmdzLmxlbmd0aCAmJiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGFyZ3MucG9wKCk7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IF9sZW5ndGggfHwgYXJncy5sZW5ndGg7XG4gICAgICAgIGlmIChsZW5ndGggPCBwYXJzZWQuZGVtYW5kZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgWUVycm9yKGBOb3QgZW5vdWdoIGFyZ3VtZW50cyBwcm92aWRlZC4gRXhwZWN0ZWQgJHtwYXJzZWQuZGVtYW5kZWQubGVuZ3RofSBidXQgcmVjZWl2ZWQgJHthcmdzLmxlbmd0aH0uYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG90YWxDb21tYW5kcyA9IHBhcnNlZC5kZW1hbmRlZC5sZW5ndGggKyBwYXJzZWQub3B0aW9uYWwubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoID4gdG90YWxDb21tYW5kcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihgVG9vIG1hbnkgYXJndW1lbnRzIHByb3ZpZGVkLiBFeHBlY3RlZCBtYXggJHt0b3RhbENvbW1hbmRzfSBidXQgcmVjZWl2ZWQgJHtsZW5ndGh9LmApO1xuICAgICAgICB9XG4gICAgICAgIHBhcnNlZC5kZW1hbmRlZC5mb3JFYWNoKGRlbWFuZGVkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFyZyA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmVkVHlwZSA9IGd1ZXNzVHlwZShhcmcpO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdUeXBlcyA9IGRlbWFuZGVkLmNtZC5maWx0ZXIodHlwZSA9PiB0eXBlID09PSBvYnNlcnZlZFR5cGUgfHwgdHlwZSA9PT0gJyonKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGluZ1R5cGVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICBhcmd1bWVudFR5cGVFcnJvcihvYnNlcnZlZFR5cGUsIGRlbWFuZGVkLmNtZCwgcG9zaXRpb24pO1xuICAgICAgICAgICAgcG9zaXRpb24gKz0gMTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBhcnNlZC5vcHRpb25hbC5mb3JFYWNoKG9wdGlvbmFsID0+IHtcbiAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgICAgICBjb25zdCBvYnNlcnZlZFR5cGUgPSBndWVzc1R5cGUoYXJnKTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nVHlwZXMgPSBvcHRpb25hbC5jbWQuZmlsdGVyKHR5cGUgPT4gdHlwZSA9PT0gb2JzZXJ2ZWRUeXBlIHx8IHR5cGUgPT09ICcqJyk7XG4gICAgICAgICAgICBpZiAobWF0Y2hpbmdUeXBlcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgYXJndW1lbnRUeXBlRXJyb3Iob2JzZXJ2ZWRUeXBlLCBvcHRpb25hbC5jbWQsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgIHBvc2l0aW9uICs9IDE7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihlcnIuc3RhY2spO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGd1ZXNzVHlwZShhcmcpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgIHJldHVybiAnYXJyYXknO1xuICAgIH1cbiAgICBlbHNlIGlmIChhcmcgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICdudWxsJztcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBhcmc7XG59XG5mdW5jdGlvbiBhcmd1bWVudFR5cGVFcnJvcihvYnNlcnZlZFR5cGUsIGFsbG93ZWRUeXBlcywgcG9zaXRpb24pIHtcbiAgICB0aHJvdyBuZXcgWUVycm9yKGBJbnZhbGlkICR7cG9zaXRpb25OYW1lW3Bvc2l0aW9uXSB8fCAnbWFueWl0aCd9IGFyZ3VtZW50LiBFeHBlY3RlZCAke2FsbG93ZWRUeXBlcy5qb2luKCcgb3IgJyl9IGJ1dCByZWNlaXZlZCAke29ic2VydmVkVHlwZX0uYCk7XG59XG4iLCJpbXBvcnQgeyBhcmdzZXJ0IH0gZnJvbSAnLi9hcmdzZXJ0LmpzJztcbmltcG9ydCB7IGlzUHJvbWlzZSB9IGZyb20gJy4vdXRpbHMvaXMtcHJvbWlzZS5qcyc7XG5leHBvcnQgY2xhc3MgR2xvYmFsTWlkZGxld2FyZSB7XG4gICAgY29uc3RydWN0b3IoeWFyZ3MpIHtcbiAgICAgICAgdGhpcy5nbG9iYWxNaWRkbGV3YXJlID0gW107XG4gICAgICAgIHRoaXMuZnJvemVucyA9IFtdO1xuICAgICAgICB0aGlzLnlhcmdzID0geWFyZ3M7XG4gICAgfVxuICAgIGFkZE1pZGRsZXdhcmUoY2FsbGJhY2ssIGFwcGx5QmVmb3JlVmFsaWRhdGlvbiwgZ2xvYmFsID0gdHJ1ZSwgbXV0YXRlcyA9IGZhbHNlKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxmdW5jdGlvbj4gW2Jvb2xlYW5dIFtib29sZWFuXSBbYm9vbGVhbl0nLCBbY2FsbGJhY2ssIGFwcGx5QmVmb3JlVmFsaWRhdGlvbiwgZ2xvYmFsXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsYmFjay5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2tbaV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ21pZGRsZXdhcmUgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG0gPSBjYWxsYmFja1tpXTtcbiAgICAgICAgICAgICAgICBtLmFwcGx5QmVmb3JlVmFsaWRhdGlvbiA9IGFwcGx5QmVmb3JlVmFsaWRhdGlvbjtcbiAgICAgICAgICAgICAgICBtLmdsb2JhbCA9IGdsb2JhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMuZ2xvYmFsTWlkZGxld2FyZSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3QgbSA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgbS5hcHBseUJlZm9yZVZhbGlkYXRpb24gPSBhcHBseUJlZm9yZVZhbGlkYXRpb247XG4gICAgICAgICAgICBtLmdsb2JhbCA9IGdsb2JhbDtcbiAgICAgICAgICAgIG0ubXV0YXRlcyA9IG11dGF0ZXM7XG4gICAgICAgICAgICB0aGlzLmdsb2JhbE1pZGRsZXdhcmUucHVzaChjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMueWFyZ3M7XG4gICAgfVxuICAgIGFkZENvZXJjZU1pZGRsZXdhcmUoY2FsbGJhY2ssIG9wdGlvbikge1xuICAgICAgICBjb25zdCBhbGlhc2VzID0gdGhpcy55YXJncy5nZXRBbGlhc2VzKCk7XG4gICAgICAgIHRoaXMuZ2xvYmFsTWlkZGxld2FyZSA9IHRoaXMuZ2xvYmFsTWlkZGxld2FyZS5maWx0ZXIobSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0b0NoZWNrID0gWy4uLihhbGlhc2VzW29wdGlvbl0gfHwgW10pLCBvcHRpb25dO1xuICAgICAgICAgICAgaWYgKCFtLm9wdGlvbilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gIXRvQ2hlY2suaW5jbHVkZXMobS5vcHRpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgY2FsbGJhY2sub3B0aW9uID0gb3B0aW9uO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRNaWRkbGV3YXJlKGNhbGxiYWNrLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICB9XG4gICAgZ2V0TWlkZGxld2FyZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2xvYmFsTWlkZGxld2FyZTtcbiAgICB9XG4gICAgZnJlZXplKCkge1xuICAgICAgICB0aGlzLmZyb3plbnMucHVzaChbLi4udGhpcy5nbG9iYWxNaWRkbGV3YXJlXSk7XG4gICAgfVxuICAgIHVuZnJlZXplKCkge1xuICAgICAgICBjb25zdCBmcm96ZW4gPSB0aGlzLmZyb3plbnMucG9wKCk7XG4gICAgICAgIGlmIChmcm96ZW4gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsTWlkZGxld2FyZSA9IGZyb3plbjtcbiAgICB9XG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuZ2xvYmFsTWlkZGxld2FyZSA9IHRoaXMuZ2xvYmFsTWlkZGxld2FyZS5maWx0ZXIobSA9PiBtLmdsb2JhbCk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGNvbW1hbmRNaWRkbGV3YXJlRmFjdG9yeShjb21tYW5kTWlkZGxld2FyZSkge1xuICAgIGlmICghY29tbWFuZE1pZGRsZXdhcmUpXG4gICAgICAgIHJldHVybiBbXTtcbiAgICByZXR1cm4gY29tbWFuZE1pZGRsZXdhcmUubWFwKG1pZGRsZXdhcmUgPT4ge1xuICAgICAgICBtaWRkbGV3YXJlLmFwcGx5QmVmb3JlVmFsaWRhdGlvbiA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gbWlkZGxld2FyZTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU1pZGRsZXdhcmUoYXJndiwgeWFyZ3MsIG1pZGRsZXdhcmVzLCBiZWZvcmVWYWxpZGF0aW9uKSB7XG4gICAgcmV0dXJuIG1pZGRsZXdhcmVzLnJlZHVjZSgoYWNjLCBtaWRkbGV3YXJlKSA9PiB7XG4gICAgICAgIGlmIChtaWRkbGV3YXJlLmFwcGx5QmVmb3JlVmFsaWRhdGlvbiAhPT0gYmVmb3JlVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfVxuICAgICAgICBpZiAobWlkZGxld2FyZS5tdXRhdGVzKSB7XG4gICAgICAgICAgICBpZiAobWlkZGxld2FyZS5hcHBsaWVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICBtaWRkbGV3YXJlLmFwcGxpZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoYWNjKSkge1xuICAgICAgICAgICAgcmV0dXJuIGFjY1xuICAgICAgICAgICAgICAgIC50aGVuKGluaXRpYWxPYmogPT4gUHJvbWlzZS5hbGwoW2luaXRpYWxPYmosIG1pZGRsZXdhcmUoaW5pdGlhbE9iaiwgeWFyZ3MpXSkpXG4gICAgICAgICAgICAgICAgLnRoZW4oKFtpbml0aWFsT2JqLCBtaWRkbGV3YXJlT2JqXSkgPT4gT2JqZWN0LmFzc2lnbihpbml0aWFsT2JqLCBtaWRkbGV3YXJlT2JqKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBtaWRkbGV3YXJlKGFjYywgeWFyZ3MpO1xuICAgICAgICAgICAgcmV0dXJuIGlzUHJvbWlzZShyZXN1bHQpXG4gICAgICAgICAgICAgICAgPyByZXN1bHQudGhlbihtaWRkbGV3YXJlT2JqID0+IE9iamVjdC5hc3NpZ24oYWNjLCBtaWRkbGV3YXJlT2JqKSlcbiAgICAgICAgICAgICAgICA6IE9iamVjdC5hc3NpZ24oYWNjLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgfSwgYXJndik7XG59XG4iLCJpbXBvcnQgeyBpc1Byb21pc2UgfSBmcm9tICcuL2lzLXByb21pc2UuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIG1heWJlQXN5bmNSZXN1bHQoZ2V0UmVzdWx0LCByZXN1bHRIYW5kbGVyLCBlcnJvckhhbmRsZXIgPSAoZXJyKSA9PiB7XG4gICAgdGhyb3cgZXJyO1xufSkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRnVuY3Rpb24oZ2V0UmVzdWx0KSA/IGdldFJlc3VsdCgpIDogZ2V0UmVzdWx0O1xuICAgICAgICByZXR1cm4gaXNQcm9taXNlKHJlc3VsdClcbiAgICAgICAgICAgID8gcmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4gcmVzdWx0SGFuZGxlcihyZXN1bHQpKVxuICAgICAgICAgICAgOiByZXN1bHRIYW5kbGVyKHJlc3VsdCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIGVycm9ySGFuZGxlcihlcnIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7XG59XG4iLCJpbXBvcnQgeyBhc3NlcnROb3RTdHJpY3RFcXVhbCwgfSBmcm9tICcuL3R5cGluZ3MvY29tbW9uLXR5cGVzLmpzJztcbmltcG9ydCB7IGlzUHJvbWlzZSB9IGZyb20gJy4vdXRpbHMvaXMtcHJvbWlzZS5qcyc7XG5pbXBvcnQgeyBhcHBseU1pZGRsZXdhcmUsIGNvbW1hbmRNaWRkbGV3YXJlRmFjdG9yeSwgfSBmcm9tICcuL21pZGRsZXdhcmUuanMnO1xuaW1wb3J0IHsgcGFyc2VDb21tYW5kIH0gZnJvbSAnLi9wYXJzZS1jb21tYW5kLmpzJztcbmltcG9ydCB7IGlzWWFyZ3NJbnN0YW5jZSwgfSBmcm9tICcuL3lhcmdzLWZhY3RvcnkuanMnO1xuaW1wb3J0IHsgbWF5YmVBc3luY1Jlc3VsdCB9IGZyb20gJy4vdXRpbHMvbWF5YmUtYXN5bmMtcmVzdWx0LmpzJztcbmNvbnN0IERFRkFVTFRfTUFSS0VSID0gLyheXFwqKXwoXlxcJDApLztcbmV4cG9ydCBjbGFzcyBDb21tYW5kSW5zdGFuY2Uge1xuICAgIGNvbnN0cnVjdG9yKHVzYWdlLCB2YWxpZGF0aW9uLCBnbG9iYWxNaWRkbGV3YXJlLCBzaGltKSB7XG4gICAgICAgIHRoaXMucmVxdWlyZUNhY2hlID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLmhhbmRsZXJzID0ge307XG4gICAgICAgIHRoaXMuYWxpYXNNYXAgPSB7fTtcbiAgICAgICAgdGhpcy5mcm96ZW5zID0gW107XG4gICAgICAgIHRoaXMuc2hpbSA9IHNoaW07XG4gICAgICAgIHRoaXMudXNhZ2UgPSB1c2FnZTtcbiAgICAgICAgdGhpcy5nbG9iYWxNaWRkbGV3YXJlID0gZ2xvYmFsTWlkZGxld2FyZTtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uID0gdmFsaWRhdGlvbjtcbiAgICB9XG4gICAgYWRkRGlyZWN0b3J5KGRpciwgcmVxLCBjYWxsZXJGaWxlLCBvcHRzKSB7XG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgICAgICB0aGlzLnJlcXVpcmVDYWNoZS5hZGQoY2FsbGVyRmlsZSk7XG4gICAgICAgIGNvbnN0IGZ1bGxEaXJQYXRoID0gdGhpcy5zaGltLnBhdGgucmVzb2x2ZSh0aGlzLnNoaW0ucGF0aC5kaXJuYW1lKGNhbGxlckZpbGUpLCBkaXIpO1xuICAgICAgICBjb25zdCBmaWxlcyA9IHRoaXMuc2hpbS5yZWFkZGlyU3luYyhmdWxsRGlyUGF0aCwge1xuICAgICAgICAgICAgcmVjdXJzaXZlOiBvcHRzLnJlY3Vyc2UgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob3B0cy5leHRlbnNpb25zKSlcbiAgICAgICAgICAgIG9wdHMuZXh0ZW5zaW9ucyA9IFsnanMnXTtcbiAgICAgICAgY29uc3QgdmlzaXQgPSB0eXBlb2Ygb3B0cy52aXNpdCA9PT0gJ2Z1bmN0aW9uJyA/IG9wdHMudmlzaXQgOiAobykgPT4gbztcbiAgICAgICAgZm9yIChjb25zdCBmaWxlYiBvZiBmaWxlcykge1xuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGZpbGViLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBpZiAob3B0cy5leGNsdWRlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGV4Y2x1ZGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMuZXhjbHVkZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBleGNsdWRlID0gb3B0cy5leGNsdWRlKGZpbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXhjbHVkZSA9IG9wdHMuZXhjbHVkZS50ZXN0KGZpbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXhjbHVkZSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0cy5pbmNsdWRlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGluY2x1ZGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMuaW5jbHVkZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlID0gb3B0cy5pbmNsdWRlKGZpbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSA9IG9wdHMuaW5jbHVkZS50ZXN0KGZpbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWluY2x1ZGUpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHN1cHBvcnRlZEV4dGVuc2lvbiA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChjb25zdCBleHQgb2Ygb3B0cy5leHRlbnNpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGUuZW5kc1dpdGgoZXh0KSlcbiAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkRXh0ZW5zaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdXBwb3J0ZWRFeHRlbnNpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBqb2luZWQgPSB0aGlzLnNoaW0ucGF0aC5qb2luKGZ1bGxEaXJQYXRoLCBmaWxlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2R1bGUgPSByZXEoam9pbmVkKTtcbiAgICAgICAgICAgICAgICBjb25zdCBleHRlbmRhYmxlTW9kdWxlID0gT2JqZWN0LmNyZWF0ZShudWxsLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh7IC4uLm1vZHVsZSB9KSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmlzaXRlZCA9IHZpc2l0KGV4dGVuZGFibGVNb2R1bGUsIGpvaW5lZCwgZmlsZSk7XG4gICAgICAgICAgICAgICAgaWYgKHZpc2l0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVxdWlyZUNhY2hlLmhhcyhqb2luZWQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVxdWlyZUNhY2hlLmFkZChqb2luZWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWV4dGVuZGFibGVNb2R1bGUuY29tbWFuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kYWJsZU1vZHVsZS5jb21tYW5kID0gdGhpcy5zaGltLnBhdGguYmFzZW5hbWUoam9pbmVkLCB0aGlzLnNoaW0ucGF0aC5leHRuYW1lKGpvaW5lZCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkSGFuZGxlcihleHRlbmRhYmxlTW9kdWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWRkSGFuZGxlcihjbWQsIGRlc2NyaXB0aW9uLCBidWlsZGVyLCBoYW5kbGVyLCBjb21tYW5kTWlkZGxld2FyZSwgZGVwcmVjYXRlZCkge1xuICAgICAgICBsZXQgYWxpYXNlcyA9IFtdO1xuICAgICAgICBjb25zdCBtaWRkbGV3YXJlcyA9IGNvbW1hbmRNaWRkbGV3YXJlRmFjdG9yeShjb21tYW5kTWlkZGxld2FyZSk7XG4gICAgICAgIGhhbmRsZXIgPSBoYW5kbGVyIHx8ICgoKSA9PiB7IH0pO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjbWQpKSB7XG4gICAgICAgICAgICBpZiAoaXNDb21tYW5kQW5kQWxpYXNlcyhjbWQpKSB7XG4gICAgICAgICAgICAgICAgW2NtZCwgLi4uYWxpYXNlc10gPSBjbWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbW1hbmQgb2YgY21kKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkSGFuZGxlcihjb21tYW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNDb21tYW5kSGFuZGxlckRlZmluaXRpb24oY21kKSkge1xuICAgICAgICAgICAgbGV0IGNvbW1hbmQgPSBBcnJheS5pc0FycmF5KGNtZC5jb21tYW5kKSB8fCB0eXBlb2YgY21kLmNvbW1hbmQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyBjbWQuY29tbWFuZFxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGlmIChjb21tYW5kID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBjb21tYW5kIG5hbWUgZ2l2ZW4gZm9yIG1vZHVsZTogJHt0aGlzLnNoaW0uaW5zcGVjdChjbWQpfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNtZC5hbGlhc2VzKVxuICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBbXS5jb25jYXQoY29tbWFuZCkuY29uY2F0KGNtZC5hbGlhc2VzKTtcbiAgICAgICAgICAgIHRoaXMuYWRkSGFuZGxlcihjb21tYW5kLCB0aGlzLmV4dHJhY3REZXNjKGNtZCksIGNtZC5idWlsZGVyLCBjbWQuaGFuZGxlciwgY21kLm1pZGRsZXdhcmVzLCBjbWQuZGVwcmVjYXRlZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNDb21tYW5kQnVpbGRlckRlZmluaXRpb24oYnVpbGRlcikpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkSGFuZGxlcihbY21kXS5jb25jYXQoYWxpYXNlcyksIGRlc2NyaXB0aW9uLCBidWlsZGVyLmJ1aWxkZXIsIGJ1aWxkZXIuaGFuZGxlciwgYnVpbGRlci5taWRkbGV3YXJlcywgYnVpbGRlci5kZXByZWNhdGVkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGNtZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZENvbW1hbmQgPSBwYXJzZUNvbW1hbmQoY21kKTtcbiAgICAgICAgICAgIGFsaWFzZXMgPSBhbGlhc2VzLm1hcChhbGlhcyA9PiBwYXJzZUNvbW1hbmQoYWxpYXMpLmNtZCk7XG4gICAgICAgICAgICBsZXQgaXNEZWZhdWx0ID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRBbGlhc2VzID0gW3BhcnNlZENvbW1hbmQuY21kXS5jb25jYXQoYWxpYXNlcykuZmlsdGVyKGMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChERUZBVUxUX01BUktFUi50ZXN0KGMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzRGVmYXVsdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChwYXJzZWRBbGlhc2VzLmxlbmd0aCA9PT0gMCAmJiBpc0RlZmF1bHQpXG4gICAgICAgICAgICAgICAgcGFyc2VkQWxpYXNlcy5wdXNoKCckMCcpO1xuICAgICAgICAgICAgaWYgKGlzRGVmYXVsdCkge1xuICAgICAgICAgICAgICAgIHBhcnNlZENvbW1hbmQuY21kID0gcGFyc2VkQWxpYXNlc1swXTtcbiAgICAgICAgICAgICAgICBhbGlhc2VzID0gcGFyc2VkQWxpYXNlcy5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICBjbWQgPSBjbWQucmVwbGFjZShERUZBVUxUX01BUktFUiwgcGFyc2VkQ29tbWFuZC5jbWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWxpYXNlcy5mb3JFYWNoKGFsaWFzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFsaWFzTWFwW2FsaWFzXSA9IHBhcnNlZENvbW1hbmQuY21kO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2FnZS5jb21tYW5kKGNtZCwgZGVzY3JpcHRpb24sIGlzRGVmYXVsdCwgYWxpYXNlcywgZGVwcmVjYXRlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhhbmRsZXJzW3BhcnNlZENvbW1hbmQuY21kXSA9IHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbDogY21kLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIGhhbmRsZXIsXG4gICAgICAgICAgICAgICAgYnVpbGRlcjogYnVpbGRlciB8fCB7fSxcbiAgICAgICAgICAgICAgICBtaWRkbGV3YXJlcyxcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVkLFxuICAgICAgICAgICAgICAgIGRlbWFuZGVkOiBwYXJzZWRDb21tYW5kLmRlbWFuZGVkLFxuICAgICAgICAgICAgICAgIG9wdGlvbmFsOiBwYXJzZWRDb21tYW5kLm9wdGlvbmFsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChpc0RlZmF1bHQpXG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0Q29tbWFuZCA9IHRoaXMuaGFuZGxlcnNbcGFyc2VkQ29tbWFuZC5jbWRdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldENvbW1hbmRIYW5kbGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlcnM7XG4gICAgfVxuICAgIGdldENvbW1hbmRzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5oYW5kbGVycykuY29uY2F0KE9iamVjdC5rZXlzKHRoaXMuYWxpYXNNYXApKTtcbiAgICB9XG4gICAgaGFzRGVmYXVsdENvbW1hbmQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZGVmYXVsdENvbW1hbmQ7XG4gICAgfVxuICAgIHJ1bkNvbW1hbmQoY29tbWFuZCwgeWFyZ3MsIHBhcnNlZCwgY29tbWFuZEluZGV4LCBoZWxwT25seSwgaGVscE9yVmVyc2lvblNldCkge1xuICAgICAgICBjb25zdCBjb21tYW5kSGFuZGxlciA9IHRoaXMuaGFuZGxlcnNbY29tbWFuZF0gfHxcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlcnNbdGhpcy5hbGlhc01hcFtjb21tYW5kXV0gfHxcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbW1hbmQ7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb250ZXh0ID0geWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0Q29udGV4dCgpO1xuICAgICAgICBjb25zdCBwYXJlbnRDb21tYW5kcyA9IGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLnNsaWNlKCk7XG4gICAgICAgIGNvbnN0IGlzRGVmYXVsdENvbW1hbmQgPSAhY29tbWFuZDtcbiAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLnB1c2goY29tbWFuZCk7XG4gICAgICAgICAgICBjdXJyZW50Q29udGV4dC5mdWxsQ29tbWFuZHMucHVzaChjb21tYW5kSGFuZGxlci5vcmlnaW5hbCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVpbGRlclJlc3VsdCA9IHRoaXMuYXBwbHlCdWlsZGVyVXBkYXRlVXNhZ2VBbmRQYXJzZShpc0RlZmF1bHRDb21tYW5kLCBjb21tYW5kSGFuZGxlciwgeWFyZ3MsIHBhcnNlZC5hbGlhc2VzLCBwYXJlbnRDb21tYW5kcywgY29tbWFuZEluZGV4LCBoZWxwT25seSwgaGVscE9yVmVyc2lvblNldCk7XG4gICAgICAgIHJldHVybiBpc1Byb21pc2UoYnVpbGRlclJlc3VsdClcbiAgICAgICAgICAgID8gYnVpbGRlclJlc3VsdC50aGVuKHJlc3VsdCA9PiB0aGlzLmFwcGx5TWlkZGxld2FyZUFuZEdldFJlc3VsdChpc0RlZmF1bHRDb21tYW5kLCBjb21tYW5kSGFuZGxlciwgcmVzdWx0LmlubmVyQXJndiwgY3VycmVudENvbnRleHQsIGhlbHBPbmx5LCByZXN1bHQuYWxpYXNlcywgeWFyZ3MpKVxuICAgICAgICAgICAgOiB0aGlzLmFwcGx5TWlkZGxld2FyZUFuZEdldFJlc3VsdChpc0RlZmF1bHRDb21tYW5kLCBjb21tYW5kSGFuZGxlciwgYnVpbGRlclJlc3VsdC5pbm5lckFyZ3YsIGN1cnJlbnRDb250ZXh0LCBoZWxwT25seSwgYnVpbGRlclJlc3VsdC5hbGlhc2VzLCB5YXJncyk7XG4gICAgfVxuICAgIGFwcGx5QnVpbGRlclVwZGF0ZVVzYWdlQW5kUGFyc2UoaXNEZWZhdWx0Q29tbWFuZCwgY29tbWFuZEhhbmRsZXIsIHlhcmdzLCBhbGlhc2VzLCBwYXJlbnRDb21tYW5kcywgY29tbWFuZEluZGV4LCBoZWxwT25seSwgaGVscE9yVmVyc2lvblNldCkge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gY29tbWFuZEhhbmRsZXIuYnVpbGRlcjtcbiAgICAgICAgbGV0IGlubmVyWWFyZ3MgPSB5YXJncztcbiAgICAgICAgaWYgKGlzQ29tbWFuZEJ1aWxkZXJDYWxsYmFjayhidWlsZGVyKSkge1xuICAgICAgICAgICAgeWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0VXNhZ2VJbnN0YW5jZSgpLmZyZWV6ZSgpO1xuICAgICAgICAgICAgY29uc3QgYnVpbGRlck91dHB1dCA9IGJ1aWxkZXIoeWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkucmVzZXQoYWxpYXNlcyksIGhlbHBPclZlcnNpb25TZXQpO1xuICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShidWlsZGVyT3V0cHV0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBidWlsZGVyT3V0cHV0LnRoZW4ob3V0cHV0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJZYXJncyA9IGlzWWFyZ3NJbnN0YW5jZShvdXRwdXQpID8gb3V0cHV0IDogeWFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlQW5kVXBkYXRlVXNhZ2UoaXNEZWZhdWx0Q29tbWFuZCwgY29tbWFuZEhhbmRsZXIsIGlubmVyWWFyZ3MsIHBhcmVudENvbW1hbmRzLCBjb21tYW5kSW5kZXgsIGhlbHBPbmx5KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0NvbW1hbmRCdWlsZGVyT3B0aW9uRGVmaW5pdGlvbnMoYnVpbGRlcikpIHtcbiAgICAgICAgICAgIHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldFVzYWdlSW5zdGFuY2UoKS5mcmVlemUoKTtcbiAgICAgICAgICAgIGlubmVyWWFyZ3MgPSB5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5yZXNldChhbGlhc2VzKTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGNvbW1hbmRIYW5kbGVyLmJ1aWxkZXIpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpbm5lcllhcmdzLm9wdGlvbihrZXksIGJ1aWxkZXJba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUFuZFVwZGF0ZVVzYWdlKGlzRGVmYXVsdENvbW1hbmQsIGNvbW1hbmRIYW5kbGVyLCBpbm5lcllhcmdzLCBwYXJlbnRDb21tYW5kcywgY29tbWFuZEluZGV4LCBoZWxwT25seSk7XG4gICAgfVxuICAgIHBhcnNlQW5kVXBkYXRlVXNhZ2UoaXNEZWZhdWx0Q29tbWFuZCwgY29tbWFuZEhhbmRsZXIsIGlubmVyWWFyZ3MsIHBhcmVudENvbW1hbmRzLCBjb21tYW5kSW5kZXgsIGhlbHBPbmx5KSB7XG4gICAgICAgIGlmIChpc0RlZmF1bHRDb21tYW5kKVxuICAgICAgICAgICAgaW5uZXJZYXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRVc2FnZUluc3RhbmNlKCkudW5mcmVlemUodHJ1ZSk7XG4gICAgICAgIGlmICh0aGlzLnNob3VsZFVwZGF0ZVVzYWdlKGlubmVyWWFyZ3MpKSB7XG4gICAgICAgICAgICBpbm5lcllhcmdzXG4gICAgICAgICAgICAgICAgLmdldEludGVybmFsTWV0aG9kcygpXG4gICAgICAgICAgICAgICAgLmdldFVzYWdlSW5zdGFuY2UoKVxuICAgICAgICAgICAgICAgIC51c2FnZSh0aGlzLnVzYWdlRnJvbVBhcmVudENvbW1hbmRzQ29tbWFuZEhhbmRsZXIocGFyZW50Q29tbWFuZHMsIGNvbW1hbmRIYW5kbGVyKSwgY29tbWFuZEhhbmRsZXIuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlubmVyQXJndiA9IGlubmVyWWFyZ3NcbiAgICAgICAgICAgIC5nZXRJbnRlcm5hbE1ldGhvZHMoKVxuICAgICAgICAgICAgLnJ1bllhcmdzUGFyc2VyQW5kRXhlY3V0ZUNvbW1hbmRzKG51bGwsIHVuZGVmaW5lZCwgdHJ1ZSwgY29tbWFuZEluZGV4LCBoZWxwT25seSk7XG4gICAgICAgIHJldHVybiBpc1Byb21pc2UoaW5uZXJBcmd2KVxuICAgICAgICAgICAgPyBpbm5lckFyZ3YudGhlbihhcmd2ID0+ICh7XG4gICAgICAgICAgICAgICAgYWxpYXNlczogaW5uZXJZYXJncy5wYXJzZWQuYWxpYXNlcyxcbiAgICAgICAgICAgICAgICBpbm5lckFyZ3Y6IGFyZ3YsXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIGFsaWFzZXM6IGlubmVyWWFyZ3MucGFyc2VkLmFsaWFzZXMsXG4gICAgICAgICAgICAgICAgaW5uZXJBcmd2OiBpbm5lckFyZ3YsXG4gICAgICAgICAgICB9O1xuICAgIH1cbiAgICBzaG91bGRVcGRhdGVVc2FnZSh5YXJncykge1xuICAgICAgICByZXR1cm4gKCF5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRVc2FnZUluc3RhbmNlKCkuZ2V0VXNhZ2VEaXNhYmxlZCgpICYmXG4gICAgICAgICAgICB5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRVc2FnZUluc3RhbmNlKCkuZ2V0VXNhZ2UoKS5sZW5ndGggPT09IDApO1xuICAgIH1cbiAgICB1c2FnZUZyb21QYXJlbnRDb21tYW5kc0NvbW1hbmRIYW5kbGVyKHBhcmVudENvbW1hbmRzLCBjb21tYW5kSGFuZGxlcikge1xuICAgICAgICBjb25zdCBjID0gREVGQVVMVF9NQVJLRVIudGVzdChjb21tYW5kSGFuZGxlci5vcmlnaW5hbClcbiAgICAgICAgICAgID8gY29tbWFuZEhhbmRsZXIub3JpZ2luYWwucmVwbGFjZShERUZBVUxUX01BUktFUiwgJycpLnRyaW0oKVxuICAgICAgICAgICAgOiBjb21tYW5kSGFuZGxlci5vcmlnaW5hbDtcbiAgICAgICAgY29uc3QgcGMgPSBwYXJlbnRDb21tYW5kcy5maWx0ZXIoYyA9PiB7XG4gICAgICAgICAgICByZXR1cm4gIURFRkFVTFRfTUFSS0VSLnRlc3QoYyk7XG4gICAgICAgIH0pO1xuICAgICAgICBwYy5wdXNoKGMpO1xuICAgICAgICByZXR1cm4gYCQwICR7cGMuam9pbignICcpfWA7XG4gICAgfVxuICAgIGhhbmRsZVZhbGlkYXRpb25BbmRHZXRSZXN1bHQoaXNEZWZhdWx0Q29tbWFuZCwgY29tbWFuZEhhbmRsZXIsIGlubmVyQXJndiwgY3VycmVudENvbnRleHQsIGFsaWFzZXMsIHlhcmdzLCBtaWRkbGV3YXJlcywgcG9zaXRpb25hbE1hcCkge1xuICAgICAgICBpZiAoIXlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldEhhc091dHB1dCgpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0aW9uID0geWFyZ3NcbiAgICAgICAgICAgICAgICAuZ2V0SW50ZXJuYWxNZXRob2RzKClcbiAgICAgICAgICAgICAgICAucnVuVmFsaWRhdGlvbihhbGlhc2VzLCBwb3NpdGlvbmFsTWFwLCB5YXJncy5wYXJzZWQuZXJyb3IsIGlzRGVmYXVsdENvbW1hbmQpO1xuICAgICAgICAgICAgaW5uZXJBcmd2ID0gbWF5YmVBc3luY1Jlc3VsdChpbm5lckFyZ3YsIHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdGlvbihyZXN1bHQpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tbWFuZEhhbmRsZXIuaGFuZGxlciAmJiAheWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0SGFzT3V0cHV0KCkpIHtcbiAgICAgICAgICAgIHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLnNldEhhc091dHB1dCgpO1xuICAgICAgICAgICAgY29uc3QgcG9wdWxhdGVEb3VibGVEYXNoID0gISF5YXJncy5nZXRPcHRpb25zKCkuY29uZmlndXJhdGlvblsncG9wdWxhdGUtLSddO1xuICAgICAgICAgICAgeWFyZ3NcbiAgICAgICAgICAgICAgICAuZ2V0SW50ZXJuYWxNZXRob2RzKClcbiAgICAgICAgICAgICAgICAucG9zdFByb2Nlc3MoaW5uZXJBcmd2LCBwb3B1bGF0ZURvdWJsZURhc2gsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICBpbm5lckFyZ3YgPSBhcHBseU1pZGRsZXdhcmUoaW5uZXJBcmd2LCB5YXJncywgbWlkZGxld2FyZXMsIGZhbHNlKTtcbiAgICAgICAgICAgIGlubmVyQXJndiA9IG1heWJlQXN5bmNSZXN1bHQoaW5uZXJBcmd2LCByZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJSZXN1bHQgPSBjb21tYW5kSGFuZGxlci5oYW5kbGVyKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzUHJvbWlzZShoYW5kbGVyUmVzdWx0KVxuICAgICAgICAgICAgICAgICAgICA/IGhhbmRsZXJSZXN1bHQudGhlbigoKSA9PiByZXN1bHQpXG4gICAgICAgICAgICAgICAgICAgIDogcmVzdWx0O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWlzRGVmYXVsdENvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICB5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRVc2FnZUluc3RhbmNlKCkuY2FjaGVIZWxwTWVzc2FnZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShpbm5lckFyZ3YpICYmXG4gICAgICAgICAgICAgICAgIXlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmhhc1BhcnNlQ2FsbGJhY2soKSkge1xuICAgICAgICAgICAgICAgIGlubmVyQXJndi5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRVc2FnZUluc3RhbmNlKCkuZmFpbChudWxsLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKF9lcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghaXNEZWZhdWx0Q29tbWFuZCkge1xuICAgICAgICAgICAgY3VycmVudENvbnRleHQuY29tbWFuZHMucG9wKCk7XG4gICAgICAgICAgICBjdXJyZW50Q29udGV4dC5mdWxsQ29tbWFuZHMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlubmVyQXJndjtcbiAgICB9XG4gICAgYXBwbHlNaWRkbGV3YXJlQW5kR2V0UmVzdWx0KGlzRGVmYXVsdENvbW1hbmQsIGNvbW1hbmRIYW5kbGVyLCBpbm5lckFyZ3YsIGN1cnJlbnRDb250ZXh0LCBoZWxwT25seSwgYWxpYXNlcywgeWFyZ3MpIHtcbiAgICAgICAgbGV0IHBvc2l0aW9uYWxNYXAgPSB7fTtcbiAgICAgICAgaWYgKGhlbHBPbmx5KVxuICAgICAgICAgICAgcmV0dXJuIGlubmVyQXJndjtcbiAgICAgICAgaWYgKCF5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRIYXNPdXRwdXQoKSkge1xuICAgICAgICAgICAgcG9zaXRpb25hbE1hcCA9IHRoaXMucG9wdWxhdGVQb3NpdGlvbmFscyhjb21tYW5kSGFuZGxlciwgaW5uZXJBcmd2LCBjdXJyZW50Q29udGV4dCwgeWFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1pZGRsZXdhcmVzID0gdGhpcy5nbG9iYWxNaWRkbGV3YXJlXG4gICAgICAgICAgICAuZ2V0TWlkZGxld2FyZSgpXG4gICAgICAgICAgICAuc2xpY2UoMClcbiAgICAgICAgICAgIC5jb25jYXQoY29tbWFuZEhhbmRsZXIubWlkZGxld2FyZXMpO1xuICAgICAgICBjb25zdCBtYXliZVByb21pc2VBcmd2ID0gYXBwbHlNaWRkbGV3YXJlKGlubmVyQXJndiwgeWFyZ3MsIG1pZGRsZXdhcmVzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIGlzUHJvbWlzZShtYXliZVByb21pc2VBcmd2KVxuICAgICAgICAgICAgPyBtYXliZVByb21pc2VBcmd2LnRoZW4ocmVzb2x2ZWRJbm5lckFyZ3YgPT4gdGhpcy5oYW5kbGVWYWxpZGF0aW9uQW5kR2V0UmVzdWx0KGlzRGVmYXVsdENvbW1hbmQsIGNvbW1hbmRIYW5kbGVyLCByZXNvbHZlZElubmVyQXJndiwgY3VycmVudENvbnRleHQsIGFsaWFzZXMsIHlhcmdzLCBtaWRkbGV3YXJlcywgcG9zaXRpb25hbE1hcCkpXG4gICAgICAgICAgICA6IHRoaXMuaGFuZGxlVmFsaWRhdGlvbkFuZEdldFJlc3VsdChpc0RlZmF1bHRDb21tYW5kLCBjb21tYW5kSGFuZGxlciwgbWF5YmVQcm9taXNlQXJndiwgY3VycmVudENvbnRleHQsIGFsaWFzZXMsIHlhcmdzLCBtaWRkbGV3YXJlcywgcG9zaXRpb25hbE1hcCk7XG4gICAgfVxuICAgIHBvcHVsYXRlUG9zaXRpb25hbHMoY29tbWFuZEhhbmRsZXIsIGFyZ3YsIGNvbnRleHQsIHlhcmdzKSB7XG4gICAgICAgIGFyZ3YuXyA9IGFyZ3YuXy5zbGljZShjb250ZXh0LmNvbW1hbmRzLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGRlbWFuZGVkID0gY29tbWFuZEhhbmRsZXIuZGVtYW5kZWQuc2xpY2UoMCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbmFsID0gY29tbWFuZEhhbmRsZXIub3B0aW9uYWwuc2xpY2UoMCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uYWxNYXAgPSB7fTtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uLnBvc2l0aW9uYWxDb3VudChkZW1hbmRlZC5sZW5ndGgsIGFyZ3YuXy5sZW5ndGgpO1xuICAgICAgICB3aGlsZSAoZGVtYW5kZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBkZW1hbmQgPSBkZW1hbmRlZC5zaGlmdCgpO1xuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZVBvc2l0aW9uYWwoZGVtYW5kLCBhcmd2LCBwb3NpdGlvbmFsTWFwKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAob3B0aW9uYWwubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBtYXliZSA9IG9wdGlvbmFsLnNoaWZ0KCk7XG4gICAgICAgICAgICB0aGlzLnBvcHVsYXRlUG9zaXRpb25hbChtYXliZSwgYXJndiwgcG9zaXRpb25hbE1hcCk7XG4gICAgICAgIH1cbiAgICAgICAgYXJndi5fID0gY29udGV4dC5jb21tYW5kcy5jb25jYXQoYXJndi5fLm1hcChhID0+ICcnICsgYSkpO1xuICAgICAgICB0aGlzLnBvc3RQcm9jZXNzUG9zaXRpb25hbHMoYXJndiwgcG9zaXRpb25hbE1hcCwgdGhpcy5jbWRUb1BhcnNlT3B0aW9ucyhjb21tYW5kSGFuZGxlci5vcmlnaW5hbCksIHlhcmdzKTtcbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uYWxNYXA7XG4gICAgfVxuICAgIHBvcHVsYXRlUG9zaXRpb25hbChwb3NpdGlvbmFsLCBhcmd2LCBwb3NpdGlvbmFsTWFwKSB7XG4gICAgICAgIGNvbnN0IGNtZCA9IHBvc2l0aW9uYWwuY21kWzBdO1xuICAgICAgICBpZiAocG9zaXRpb25hbC52YXJpYWRpYykge1xuICAgICAgICAgICAgcG9zaXRpb25hbE1hcFtjbWRdID0gYXJndi5fLnNwbGljZSgwKS5tYXAoU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChhcmd2Ll8ubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHBvc2l0aW9uYWxNYXBbY21kXSA9IFtTdHJpbmcoYXJndi5fLnNoaWZ0KCkpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbWRUb1BhcnNlT3B0aW9ucyhjbWRTdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcGFyc2VPcHRpb25zID0ge1xuICAgICAgICAgICAgYXJyYXk6IFtdLFxuICAgICAgICAgICAgZGVmYXVsdDoge30sXG4gICAgICAgICAgICBhbGlhczoge30sXG4gICAgICAgICAgICBkZW1hbmQ6IHt9LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUNvbW1hbmQoY21kU3RyaW5nKTtcbiAgICAgICAgcGFyc2VkLmRlbWFuZGVkLmZvckVhY2goZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBbY21kLCAuLi5hbGlhc2VzXSA9IGQuY21kO1xuICAgICAgICAgICAgaWYgKGQudmFyaWFkaWMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZU9wdGlvbnMuYXJyYXkucHVzaChjbWQpO1xuICAgICAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5kZWZhdWx0W2NtZF0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5hbGlhc1tjbWRdID0gYWxpYXNlcztcbiAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5kZW1hbmRbY21kXSA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBwYXJzZWQub3B0aW9uYWwuZm9yRWFjaChvID0+IHtcbiAgICAgICAgICAgIGNvbnN0IFtjbWQsIC4uLmFsaWFzZXNdID0gby5jbWQ7XG4gICAgICAgICAgICBpZiAoby52YXJpYWRpYykge1xuICAgICAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5hcnJheS5wdXNoKGNtZCk7XG4gICAgICAgICAgICAgICAgcGFyc2VPcHRpb25zLmRlZmF1bHRbY21kXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyc2VPcHRpb25zLmFsaWFzW2NtZF0gPSBhbGlhc2VzO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBhcnNlT3B0aW9ucztcbiAgICB9XG4gICAgcG9zdFByb2Nlc3NQb3NpdGlvbmFscyhhcmd2LCBwb3NpdGlvbmFsTWFwLCBwYXJzZU9wdGlvbnMsIHlhcmdzKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCB5YXJncy5nZXRPcHRpb25zKCkpO1xuICAgICAgICBvcHRpb25zLmRlZmF1bHQgPSBPYmplY3QuYXNzaWduKHBhcnNlT3B0aW9ucy5kZWZhdWx0LCBvcHRpb25zLmRlZmF1bHQpO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwYXJzZU9wdGlvbnMuYWxpYXMpKSB7XG4gICAgICAgICAgICBvcHRpb25zLmFsaWFzW2tleV0gPSAob3B0aW9ucy5hbGlhc1trZXldIHx8IFtdKS5jb25jYXQocGFyc2VPcHRpb25zLmFsaWFzW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuYXJyYXkgPSBvcHRpb25zLmFycmF5LmNvbmNhdChwYXJzZU9wdGlvbnMuYXJyYXkpO1xuICAgICAgICBvcHRpb25zLmNvbmZpZyA9IHt9O1xuICAgICAgICBjb25zdCB1bnBhcnNlZCA9IFtdO1xuICAgICAgICBPYmplY3Qua2V5cyhwb3NpdGlvbmFsTWFwKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBwb3NpdGlvbmFsTWFwW2tleV0ubWFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5jb25maWd1cmF0aW9uWyd1bmtub3duLW9wdGlvbnMtYXMtYXJncyddKVxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmtleVtrZXldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB1bnBhcnNlZC5wdXNoKGAtLSR7a2V5fWApO1xuICAgICAgICAgICAgICAgIHVucGFyc2VkLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXVucGFyc2VkLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgY29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25maWd1cmF0aW9uLCB7XG4gICAgICAgICAgICAncG9wdWxhdGUtLSc6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5zaGltLlBhcnNlci5kZXRhaWxlZCh1bnBhcnNlZCwgT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywge1xuICAgICAgICAgICAgY29uZmlndXJhdGlvbjogY29uZmlnLFxuICAgICAgICB9KSk7XG4gICAgICAgIGlmIChwYXJzZWQuZXJyb3IpIHtcbiAgICAgICAgICAgIHlhcmdzXG4gICAgICAgICAgICAgICAgLmdldEludGVybmFsTWV0aG9kcygpXG4gICAgICAgICAgICAgICAgLmdldFVzYWdlSW5zdGFuY2UoKVxuICAgICAgICAgICAgICAgIC5mYWlsKHBhcnNlZC5lcnJvci5tZXNzYWdlLCBwYXJzZWQuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb25hbEtleXMgPSBPYmplY3Qua2V5cyhwb3NpdGlvbmFsTWFwKTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHBvc2l0aW9uYWxNYXApLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbmFsS2V5cy5wdXNoKC4uLnBhcnNlZC5hbGlhc2VzW2tleV0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhwYXJzZWQuYXJndikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbmFsS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcG9zaXRpb25hbE1hcFtrZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25hbE1hcFtrZXldID0gcGFyc2VkLmFyZ3Zba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzSW5Db25maWdzKHlhcmdzLCBrZXkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5pc0RlZmF1bHRlZCh5YXJncywga2V5KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFyZ3YsIGtleSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJzZWQuYXJndiwga2V5KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoYXJndltrZXldKSB8fCBBcnJheS5pc0FycmF5KHBhcnNlZC5hcmd2W2tleV0pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJndltrZXldID0gW10uY29uY2F0KGFyZ3Zba2V5XSwgcGFyc2VkLmFyZ3Zba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmd2W2tleV0gPSBwYXJzZWQuYXJndltrZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaXNEZWZhdWx0ZWQoeWFyZ3MsIGtleSkge1xuICAgICAgICBjb25zdCB7IGRlZmF1bHQ6IGRlZmF1bHRzIH0gPSB5YXJncy5nZXRPcHRpb25zKCk7XG4gICAgICAgIHJldHVybiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRlZmF1bHRzLCBrZXkpIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGVmYXVsdHMsIHRoaXMuc2hpbS5QYXJzZXIuY2FtZWxDYXNlKGtleSkpKTtcbiAgICB9XG4gICAgaXNJbkNvbmZpZ3MoeWFyZ3MsIGtleSkge1xuICAgICAgICBjb25zdCB7IGNvbmZpZ09iamVjdHMgfSA9IHlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgcmV0dXJuIChjb25maWdPYmplY3RzLnNvbWUoYyA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYywga2V5KSkgfHxcbiAgICAgICAgICAgIGNvbmZpZ09iamVjdHMuc29tZShjID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLCB0aGlzLnNoaW0uUGFyc2VyLmNhbWVsQ2FzZShrZXkpKSkpO1xuICAgIH1cbiAgICBydW5EZWZhdWx0QnVpbGRlck9uKHlhcmdzKSB7XG4gICAgICAgIGlmICghdGhpcy5kZWZhdWx0Q29tbWFuZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkVXBkYXRlVXNhZ2UoeWFyZ3MpKSB7XG4gICAgICAgICAgICBjb25zdCBjb21tYW5kU3RyaW5nID0gREVGQVVMVF9NQVJLRVIudGVzdCh0aGlzLmRlZmF1bHRDb21tYW5kLm9yaWdpbmFsKVxuICAgICAgICAgICAgICAgID8gdGhpcy5kZWZhdWx0Q29tbWFuZC5vcmlnaW5hbFxuICAgICAgICAgICAgICAgIDogdGhpcy5kZWZhdWx0Q29tbWFuZC5vcmlnaW5hbC5yZXBsYWNlKC9eW15bXFxdPD5dKi8sICckMCAnKTtcbiAgICAgICAgICAgIHlhcmdzXG4gICAgICAgICAgICAgICAgLmdldEludGVybmFsTWV0aG9kcygpXG4gICAgICAgICAgICAgICAgLmdldFVzYWdlSW5zdGFuY2UoKVxuICAgICAgICAgICAgICAgIC51c2FnZShjb21tYW5kU3RyaW5nLCB0aGlzLmRlZmF1bHRDb21tYW5kLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWlsZGVyID0gdGhpcy5kZWZhdWx0Q29tbWFuZC5idWlsZGVyO1xuICAgICAgICBpZiAoaXNDb21tYW5kQnVpbGRlckNhbGxiYWNrKGJ1aWxkZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gYnVpbGRlcih5YXJncywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWlzQ29tbWFuZEJ1aWxkZXJEZWZpbml0aW9uKGJ1aWxkZXIpKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhidWlsZGVyKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgeWFyZ3Mub3B0aW9uKGtleSwgYnVpbGRlcltrZXldKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGV4dHJhY3REZXNjKHsgZGVzY3JpYmUsIGRlc2NyaXB0aW9uLCBkZXNjIH0pIHtcbiAgICAgICAgZm9yIChjb25zdCB0ZXN0IG9mIFtkZXNjcmliZSwgZGVzY3JpcHRpb24sIGRlc2NdKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRlc3QgPT09ICdzdHJpbmcnIHx8IHRlc3QgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0O1xuICAgICAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwodGVzdCwgdHJ1ZSwgdGhpcy5zaGltKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZyZWV6ZSgpIHtcbiAgICAgICAgdGhpcy5mcm96ZW5zLnB1c2goe1xuICAgICAgICAgICAgaGFuZGxlcnM6IHRoaXMuaGFuZGxlcnMsXG4gICAgICAgICAgICBhbGlhc01hcDogdGhpcy5hbGlhc01hcCxcbiAgICAgICAgICAgIGRlZmF1bHRDb21tYW5kOiB0aGlzLmRlZmF1bHRDb21tYW5kLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdW5mcmVlemUoKSB7XG4gICAgICAgIGNvbnN0IGZyb3plbiA9IHRoaXMuZnJvemVucy5wb3AoKTtcbiAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwoZnJvemVuLCB1bmRlZmluZWQsIHRoaXMuc2hpbSk7XG4gICAgICAgICh7XG4gICAgICAgICAgICBoYW5kbGVyczogdGhpcy5oYW5kbGVycyxcbiAgICAgICAgICAgIGFsaWFzTWFwOiB0aGlzLmFsaWFzTWFwLFxuICAgICAgICAgICAgZGVmYXVsdENvbW1hbmQ6IHRoaXMuZGVmYXVsdENvbW1hbmQsXG4gICAgICAgIH0gPSBmcm96ZW4pO1xuICAgIH1cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgICAgICB0aGlzLmFsaWFzTWFwID0ge307XG4gICAgICAgIHRoaXMuZGVmYXVsdENvbW1hbmQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMucmVxdWlyZUNhY2hlID0gbmV3IFNldCgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZCh1c2FnZSwgdmFsaWRhdGlvbiwgZ2xvYmFsTWlkZGxld2FyZSwgc2hpbSkge1xuICAgIHJldHVybiBuZXcgQ29tbWFuZEluc3RhbmNlKHVzYWdlLCB2YWxpZGF0aW9uLCBnbG9iYWxNaWRkbGV3YXJlLCBzaGltKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbW1hbmRCdWlsZGVyRGVmaW5pdGlvbihidWlsZGVyKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgYnVpbGRlciA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgISFidWlsZGVyLmJ1aWxkZXIgJiZcbiAgICAgICAgdHlwZW9mIGJ1aWxkZXIuaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5mdW5jdGlvbiBpc0NvbW1hbmRBbmRBbGlhc2VzKGNtZCkge1xuICAgIHJldHVybiBjbWQuZXZlcnkoYyA9PiB0eXBlb2YgYyA9PT0gJ3N0cmluZycpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tbWFuZEJ1aWxkZXJDYWxsYmFjayhidWlsZGVyKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBidWlsZGVyID09PSAnZnVuY3Rpb24nO1xufVxuZnVuY3Rpb24gaXNDb21tYW5kQnVpbGRlck9wdGlvbkRlZmluaXRpb25zKGJ1aWxkZXIpIHtcbiAgICByZXR1cm4gdHlwZW9mIGJ1aWxkZXIgPT09ICdvYmplY3QnO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tbWFuZEhhbmRsZXJEZWZpbml0aW9uKGNtZCkge1xuICAgIHJldHVybiB0eXBlb2YgY21kID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShjbWQpO1xufVxuIiwidmFyIF9fY2xhc3NQcml2YXRlRmllbGRTZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRTZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xufTtcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59O1xudmFyIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQsIF9ZYXJnc0luc3RhbmNlX2N3ZCwgX1lhcmdzSW5zdGFuY2VfY29udGV4dCwgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbiwgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbkNvbW1hbmQsIF9ZYXJnc0luc3RhbmNlX2RlZmF1bHRTaG93SGlkZGVuT3B0LCBfWWFyZ3NJbnN0YW5jZV9leGl0RXJyb3IsIF9ZYXJnc0luc3RhbmNlX2RldGVjdExvY2FsZSwgX1lhcmdzSW5zdGFuY2VfZW1pdHRlZFdhcm5pbmdzLCBfWWFyZ3NJbnN0YW5jZV9leGl0UHJvY2VzcywgX1lhcmdzSW5zdGFuY2VfZnJvemVucywgX1lhcmdzSW5zdGFuY2VfZ2xvYmFsTWlkZGxld2FyZSwgX1lhcmdzSW5zdGFuY2VfZ3JvdXBzLCBfWWFyZ3NJbnN0YW5jZV9oYXNPdXRwdXQsIF9ZYXJnc0luc3RhbmNlX2hlbHBPcHQsIF9ZYXJnc0luc3RhbmNlX2lzR2xvYmFsQ29udGV4dCwgX1lhcmdzSW5zdGFuY2VfbG9nZ2VyLCBfWWFyZ3NJbnN0YW5jZV9vdXRwdXQsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIF9ZYXJnc0luc3RhbmNlX3BhcmVudFJlcXVpcmUsIF9ZYXJnc0luc3RhbmNlX3BhcnNlckNvbmZpZywgX1lhcmdzSW5zdGFuY2VfcGFyc2VGbiwgX1lhcmdzSW5zdGFuY2VfcGFyc2VDb250ZXh0LCBfWWFyZ3NJbnN0YW5jZV9wa2dzLCBfWWFyZ3NJbnN0YW5jZV9wcmVzZXJ2ZWRHcm91cHMsIF9ZYXJnc0luc3RhbmNlX3Byb2Nlc3NBcmdzLCBfWWFyZ3NJbnN0YW5jZV9yZWNvbW1lbmRDb21tYW5kcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0LCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3RDb21tYW5kcywgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0T3B0aW9ucywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIF9ZYXJnc0luc3RhbmNlX3VzYWdlQ29uZmlnLCBfWWFyZ3NJbnN0YW5jZV92ZXJzaW9uT3B0LCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uO1xuaW1wb3J0IHsgY29tbWFuZCBhcyBDb21tYW5kLCB9IGZyb20gJy4vY29tbWFuZC5qcyc7XG5pbXBvcnQgeyBhc3NlcnROb3RTdHJpY3RFcXVhbCwgYXNzZXJ0U2luZ2xlS2V5LCBvYmplY3RLZXlzLCB9IGZyb20gJy4vdHlwaW5ncy9jb21tb24tdHlwZXMuanMnO1xuaW1wb3J0IHsgWUVycm9yIH0gZnJvbSAnLi95ZXJyb3IuanMnO1xuaW1wb3J0IHsgdXNhZ2UgYXMgVXNhZ2UgfSBmcm9tICcuL3VzYWdlLmpzJztcbmltcG9ydCB7IGFyZ3NlcnQgfSBmcm9tICcuL2FyZ3NlcnQuanMnO1xuaW1wb3J0IHsgY29tcGxldGlvbiBhcyBDb21wbGV0aW9uLCB9IGZyb20gJy4vY29tcGxldGlvbi5qcyc7XG5pbXBvcnQgeyB2YWxpZGF0aW9uIGFzIFZhbGlkYXRpb24sIH0gZnJvbSAnLi92YWxpZGF0aW9uLmpzJztcbmltcG9ydCB7IG9iakZpbHRlciB9IGZyb20gJy4vdXRpbHMvb2JqLWZpbHRlci5qcyc7XG5pbXBvcnQgeyBhcHBseUV4dGVuZHMgfSBmcm9tICcuL3V0aWxzL2FwcGx5LWV4dGVuZHMuanMnO1xuaW1wb3J0IHsgYXBwbHlNaWRkbGV3YXJlLCBHbG9iYWxNaWRkbGV3YXJlLCB9IGZyb20gJy4vbWlkZGxld2FyZS5qcyc7XG5pbXBvcnQgeyBpc1Byb21pc2UgfSBmcm9tICcuL3V0aWxzL2lzLXByb21pc2UuanMnO1xuaW1wb3J0IHsgbWF5YmVBc3luY1Jlc3VsdCB9IGZyb20gJy4vdXRpbHMvbWF5YmUtYXN5bmMtcmVzdWx0LmpzJztcbmltcG9ydCBzZXRCbG9ja2luZyBmcm9tICcuL3V0aWxzL3NldC1ibG9ja2luZy5qcyc7XG5leHBvcnQgZnVuY3Rpb24gWWFyZ3NGYWN0b3J5KF9zaGltKSB7XG4gICAgcmV0dXJuIChwcm9jZXNzQXJncyA9IFtdLCBjd2QgPSBfc2hpbS5wcm9jZXNzLmN3ZCgpLCBwYXJlbnRSZXF1aXJlKSA9PiB7XG4gICAgICAgIGNvbnN0IHlhcmdzID0gbmV3IFlhcmdzSW5zdGFuY2UocHJvY2Vzc0FyZ3MsIGN3ZCwgcGFyZW50UmVxdWlyZSwgX3NoaW0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoeWFyZ3MsICdhcmd2Jywge1xuICAgICAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlhcmdzLnBhcnNlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHlhcmdzLmhlbHAoKTtcbiAgICAgICAgeWFyZ3MudmVyc2lvbigpO1xuICAgICAgICByZXR1cm4geWFyZ3M7XG4gICAgfTtcbn1cbmNvbnN0IGtDb3B5RG91YmxlRGFzaCA9IFN5bWJvbCgnY29weURvdWJsZURhc2gnKTtcbmNvbnN0IGtDcmVhdGVMb2dnZXIgPSBTeW1ib2woJ2NvcHlEb3VibGVEYXNoJyk7XG5jb25zdCBrRGVsZXRlRnJvbVBhcnNlckhpbnRPYmplY3QgPSBTeW1ib2woJ2RlbGV0ZUZyb21QYXJzZXJIaW50T2JqZWN0Jyk7XG5jb25zdCBrRW1pdFdhcm5pbmcgPSBTeW1ib2woJ2VtaXRXYXJuaW5nJyk7XG5jb25zdCBrRnJlZXplID0gU3ltYm9sKCdmcmVlemUnKTtcbmNvbnN0IGtHZXREb2xsYXJaZXJvID0gU3ltYm9sKCdnZXREb2xsYXJaZXJvJyk7XG5jb25zdCBrR2V0UGFyc2VyQ29uZmlndXJhdGlvbiA9IFN5bWJvbCgnZ2V0UGFyc2VyQ29uZmlndXJhdGlvbicpO1xuY29uc3Qga0dldFVzYWdlQ29uZmlndXJhdGlvbiA9IFN5bWJvbCgnZ2V0VXNhZ2VDb25maWd1cmF0aW9uJyk7XG5jb25zdCBrR3Vlc3NMb2NhbGUgPSBTeW1ib2woJ2d1ZXNzTG9jYWxlJyk7XG5jb25zdCBrR3Vlc3NWZXJzaW9uID0gU3ltYm9sKCdndWVzc1ZlcnNpb24nKTtcbmNvbnN0IGtQYXJzZVBvc2l0aW9uYWxOdW1iZXJzID0gU3ltYm9sKCdwYXJzZVBvc2l0aW9uYWxOdW1iZXJzJyk7XG5jb25zdCBrUGtnVXAgPSBTeW1ib2woJ3BrZ1VwJyk7XG5jb25zdCBrUG9wdWxhdGVQYXJzZXJIaW50QXJyYXkgPSBTeW1ib2woJ3BvcHVsYXRlUGFyc2VySGludEFycmF5Jyk7XG5jb25zdCBrUG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5ID0gU3ltYm9sKCdwb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnknKTtcbmNvbnN0IGtQb3B1bGF0ZVBhcnNlckhpbnRBcnJheURpY3Rpb25hcnkgPSBTeW1ib2woJ3BvcHVsYXRlUGFyc2VySGludEFycmF5RGljdGlvbmFyeScpO1xuY29uc3Qga1BvcHVsYXRlUGFyc2VySGludERpY3Rpb25hcnkgPSBTeW1ib2woJ3BvcHVsYXRlUGFyc2VySGludERpY3Rpb25hcnknKTtcbmNvbnN0IGtTYW5pdGl6ZUtleSA9IFN5bWJvbCgnc2FuaXRpemVLZXknKTtcbmNvbnN0IGtTZXRLZXkgPSBTeW1ib2woJ3NldEtleScpO1xuY29uc3Qga1VuZnJlZXplID0gU3ltYm9sKCd1bmZyZWV6ZScpO1xuY29uc3Qga1ZhbGlkYXRlQXN5bmMgPSBTeW1ib2woJ3ZhbGlkYXRlQXN5bmMnKTtcbmNvbnN0IGtHZXRDb21tYW5kSW5zdGFuY2UgPSBTeW1ib2woJ2dldENvbW1hbmRJbnN0YW5jZScpO1xuY29uc3Qga0dldENvbnRleHQgPSBTeW1ib2woJ2dldENvbnRleHQnKTtcbmNvbnN0IGtHZXRIYXNPdXRwdXQgPSBTeW1ib2woJ2dldEhhc091dHB1dCcpO1xuY29uc3Qga0dldExvZ2dlckluc3RhbmNlID0gU3ltYm9sKCdnZXRMb2dnZXJJbnN0YW5jZScpO1xuY29uc3Qga0dldFBhcnNlQ29udGV4dCA9IFN5bWJvbCgnZ2V0UGFyc2VDb250ZXh0Jyk7XG5jb25zdCBrR2V0VXNhZ2VJbnN0YW5jZSA9IFN5bWJvbCgnZ2V0VXNhZ2VJbnN0YW5jZScpO1xuY29uc3Qga0dldFZhbGlkYXRpb25JbnN0YW5jZSA9IFN5bWJvbCgnZ2V0VmFsaWRhdGlvbkluc3RhbmNlJyk7XG5jb25zdCBrSGFzUGFyc2VDYWxsYmFjayA9IFN5bWJvbCgnaGFzUGFyc2VDYWxsYmFjaycpO1xuY29uc3Qga0lzR2xvYmFsQ29udGV4dCA9IFN5bWJvbCgnaXNHbG9iYWxDb250ZXh0Jyk7XG5jb25zdCBrUG9zdFByb2Nlc3MgPSBTeW1ib2woJ3Bvc3RQcm9jZXNzJyk7XG5jb25zdCBrUmViYXNlID0gU3ltYm9sKCdyZWJhc2UnKTtcbmNvbnN0IGtSZXNldCA9IFN5bWJvbCgncmVzZXQnKTtcbmNvbnN0IGtSdW5ZYXJnc1BhcnNlckFuZEV4ZWN1dGVDb21tYW5kcyA9IFN5bWJvbCgncnVuWWFyZ3NQYXJzZXJBbmRFeGVjdXRlQ29tbWFuZHMnKTtcbmNvbnN0IGtSdW5WYWxpZGF0aW9uID0gU3ltYm9sKCdydW5WYWxpZGF0aW9uJyk7XG5jb25zdCBrU2V0SGFzT3V0cHV0ID0gU3ltYm9sKCdzZXRIYXNPdXRwdXQnKTtcbmNvbnN0IGtUcmFja01hbnVhbGx5U2V0S2V5cyA9IFN5bWJvbCgna1RyYWNrTWFudWFsbHlTZXRLZXlzJyk7XG5jb25zdCBERUZBVUxUX0xPQ0FMRSA9ICdlbl9VUyc7XG5leHBvcnQgY2xhc3MgWWFyZ3NJbnN0YW5jZSB7XG4gICAgY29uc3RydWN0b3IocHJvY2Vzc0FyZ3MgPSBbXSwgY3dkLCBwYXJlbnRSZXF1aXJlLCBzaGltKSB7XG4gICAgICAgIHRoaXMuY3VzdG9tU2NyaXB0TmFtZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBhcnNlZCA9IGZhbHNlO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9jd2Quc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX2NvbnRleHQuc2V0KHRoaXMsIHsgY29tbWFuZHM6IFtdLCBmdWxsQ29tbWFuZHM6IFtdIH0pO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uLnNldCh0aGlzLCBudWxsKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbkNvbW1hbmQuc2V0KHRoaXMsIG51bGwpO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9kZWZhdWx0U2hvd0hpZGRlbk9wdC5zZXQodGhpcywgJ3Nob3ctaGlkZGVuJyk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX2V4aXRFcnJvci5zZXQodGhpcywgbnVsbCk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX2RldGVjdExvY2FsZS5zZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX2VtaXR0ZWRXYXJuaW5ncy5zZXQodGhpcywge30pO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9leGl0UHJvY2Vzcy5zZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX2Zyb3plbnMuc2V0KHRoaXMsIFtdKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfZ2xvYmFsTWlkZGxld2FyZS5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfZ3JvdXBzLnNldCh0aGlzLCB7fSk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX2hhc091dHB1dC5zZXQodGhpcywgZmFsc2UpO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9oZWxwT3B0LnNldCh0aGlzLCBudWxsKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfaXNHbG9iYWxDb250ZXh0LnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfbG9nZ2VyLnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9vdXRwdXQuc2V0KHRoaXMsICcnKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucy5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfcGFyZW50UmVxdWlyZS5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfcGFyc2VyQ29uZmlnLnNldCh0aGlzLCB7fSk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX3BhcnNlRm4uc2V0KHRoaXMsIG51bGwpO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9wYXJzZUNvbnRleHQuc2V0KHRoaXMsIG51bGwpO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9wa2dzLnNldCh0aGlzLCB7fSk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX3ByZXNlcnZlZEdyb3Vwcy5zZXQodGhpcywge30pO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9wcm9jZXNzQXJncy5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfcmVjb21tZW5kQ29tbWFuZHMuc2V0KHRoaXMsIGZhbHNlKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2Vfc2hpbS5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0LnNldCh0aGlzLCBmYWxzZSk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX3N0cmljdENvbW1hbmRzLnNldCh0aGlzLCBmYWxzZSk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX3N0cmljdE9wdGlvbnMuc2V0KHRoaXMsIGZhbHNlKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfdXNhZ2Uuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX3VzYWdlQ29uZmlnLnNldCh0aGlzLCB7fSk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX3ZlcnNpb25PcHQuc2V0KHRoaXMsIG51bGwpO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIHNoaW0sIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wcm9jZXNzQXJncywgcHJvY2Vzc0FyZ3MsIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jd2QsIGN3ZCwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BhcmVudFJlcXVpcmUsIHBhcmVudFJlcXVpcmUsIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9nbG9iYWxNaWRkbGV3YXJlLCBuZXcgR2xvYmFsTWlkZGxld2FyZSh0aGlzKSwgXCJmXCIpO1xuICAgICAgICB0aGlzLiQwID0gdGhpc1trR2V0RG9sbGFyWmVyb10oKTtcbiAgICAgICAgdGhpc1trUmVzZXRdKCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLCBcImZcIiksIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBcImZcIiksIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKSwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5zaG93SGlkZGVuT3B0ID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9kZWZhdWx0U2hvd0hpZGRlbk9wdCwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2xvZ2dlciwgdGhpc1trQ3JlYXRlTG9nZ2VyXSgpLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnkxOG4uc2V0TG9jYWxlKERFRkFVTFRfTE9DQUxFKTtcbiAgICB9XG4gICAgYWRkSGVscE9wdChvcHQsIG1zZykge1xuICAgICAgICBjb25zdCBkZWZhdWx0SGVscE9wdCA9ICdoZWxwJztcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xib29sZWFuXSBbc3RyaW5nXScsIFtvcHQsIG1zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9oZWxwT3B0LCBcImZcIikpIHtcbiAgICAgICAgICAgIHRoaXNba0RlbGV0ZUZyb21QYXJzZXJIaW50T2JqZWN0XShfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hlbHBPcHQsIFwiZlwiKSk7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hlbHBPcHQsIG51bGwsIFwiZlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0ID09PSBmYWxzZSAmJiBtc2cgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hlbHBPcHQsIHR5cGVvZiBvcHQgPT09ICdzdHJpbmcnID8gb3B0IDogZGVmYXVsdEhlbHBPcHQsIFwiZlwiKTtcbiAgICAgICAgdGhpcy5ib29sZWFuKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaGVscE9wdCwgXCJmXCIpKTtcbiAgICAgICAgdGhpcy5kZXNjcmliZShfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hlbHBPcHQsIFwiZlwiKSwgbXNnIHx8IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5kZWZlclkxOG5Mb29rdXAoJ1Nob3cgaGVscCcpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGhlbHAob3B0LCBtc2cpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkSGVscE9wdChvcHQsIG1zZyk7XG4gICAgfVxuICAgIGFkZFNob3dIaWRkZW5PcHQob3B0LCBtc2cpIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xib29sZWFuXSBbc3RyaW5nXScsIFtvcHQsIG1zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAob3B0ID09PSBmYWxzZSAmJiBtc2cgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICBjb25zdCBzaG93SGlkZGVuT3B0ID0gdHlwZW9mIG9wdCA9PT0gJ3N0cmluZycgPyBvcHQgOiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2RlZmF1bHRTaG93SGlkZGVuT3B0LCBcImZcIik7XG4gICAgICAgIHRoaXMuYm9vbGVhbihzaG93SGlkZGVuT3B0KTtcbiAgICAgICAgdGhpcy5kZXNjcmliZShzaG93SGlkZGVuT3B0LCBtc2cgfHwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmRlZmVyWTE4bkxvb2t1cCgnU2hvdyBoaWRkZW4gb3B0aW9ucycpKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuc2hvd0hpZGRlbk9wdCA9IHNob3dIaWRkZW5PcHQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBzaG93SGlkZGVuKG9wdCwgbXNnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFNob3dIaWRkZW5PcHQob3B0LCBtc2cpO1xuICAgIH1cbiAgICBhbGlhcyhrZXksIHZhbHVlKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3R8c3RyaW5nfGFycmF5PiBbc3RyaW5nfGFycmF5XScsIFtrZXksIHZhbHVlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHRoaXNba1BvcHVsYXRlUGFyc2VySGludEFycmF5RGljdGlvbmFyeV0odGhpcy5hbGlhcy5iaW5kKHRoaXMpLCAnYWxpYXMnLCBrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGFycmF5KGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB0aGlzW2tQb3B1bGF0ZVBhcnNlckhpbnRBcnJheV0oJ2FycmF5Jywga2V5cyk7XG4gICAgICAgIHRoaXNba1RyYWNrTWFudWFsbHlTZXRLZXlzXShrZXlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGJvb2xlYW4oa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nPicsIFtrZXlzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHRoaXNba1BvcHVsYXRlUGFyc2VySGludEFycmF5XSgnYm9vbGVhbicsIGtleXMpO1xuICAgICAgICB0aGlzW2tUcmFja01hbnVhbGx5U2V0S2V5c10oa2V5cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBjaGVjayhmLCBnbG9iYWwpIHtcbiAgICAgICAgYXJnc2VydCgnPGZ1bmN0aW9uPiBbYm9vbGVhbl0nLCBbZiwgZ2xvYmFsXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZSgoYXJndiwgX3lhcmdzKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbWF5YmVBc3luY1Jlc3VsdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGYoYXJndiwgX3lhcmdzLmdldE9wdGlvbnMoKSk7XG4gICAgICAgICAgICB9LCAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmZhaWwoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikueTE4bi5fXygnQXJndW1lbnQgY2hlY2sgZmFpbGVkOiAlcycsIGYudG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJyB8fCByZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuZmFpbChyZXN1bHQudG9TdHJpbmcoKSwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgICAgICAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmZhaWwoZXJyLm1lc3NhZ2UgPyBlcnIubWVzc2FnZSA6IGVyci50b1N0cmluZygpLCBlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhcmd2O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZhbHNlLCBnbG9iYWwpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgY2hvaWNlcyhrZXksIHZhbHVlKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3R8c3RyaW5nfGFycmF5PiBbc3RyaW5nfGFycmF5XScsIFtrZXksIHZhbHVlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHRoaXNba1BvcHVsYXRlUGFyc2VySGludEFycmF5RGljdGlvbmFyeV0odGhpcy5jaG9pY2VzLmJpbmQodGhpcyksICdjaG9pY2VzJywga2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBjb2VyY2Uoa2V5cywgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtmdW5jdGlvbl0nLCBba2V5cywgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5cykpIHtcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWUVycm9yKCdjb2VyY2UgY2FsbGJhY2sgbXVzdCBiZSBwcm92aWRlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29lcmNlKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGtleXMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhrZXlzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29lcmNlKGtleSwga2V5c1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IoJ2NvZXJjZSBjYWxsYmFjayBtdXN0IGJlIHByb3ZpZGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29lcmNlS2V5ID0ga2V5cztcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikua2V5W2NvZXJjZUtleV0gPSB0cnVlO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2dsb2JhbE1pZGRsZXdhcmUsIFwiZlwiKS5hZGRDb2VyY2VNaWRkbGV3YXJlKChhcmd2LCB5YXJncykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgY29lcmNlS2V5QWxpYXNlcyA9IChfYSA9IHlhcmdzLmdldEFsaWFzZXMoKVtjb2VyY2VLZXldKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXTtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3ZLZXlzID0gW2NvZXJjZUtleSwgLi4uY29lcmNlS2V5QWxpYXNlc10uZmlsdGVyKGtleSA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXJndiwga2V5KSk7XG4gICAgICAgICAgICBpZiAoYXJndktleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbWF5YmVBc3luY1Jlc3VsdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlKGFyZ3ZbYXJndktleXNbMF1dKTtcbiAgICAgICAgICAgIH0sIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBhcmd2S2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3Zba2V5XSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWUVycm9yKGVyci5tZXNzYWdlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBjb2VyY2VLZXkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgY29uZmxpY3RzKGtleTEsIGtleTIpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xvYmplY3Q+IFtzdHJpbmd8YXJyYXldJywgW2tleTEsIGtleTJdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBcImZcIikuY29uZmxpY3RzKGtleTEsIGtleTIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgY29uZmlnKGtleSA9ICdjb25maWcnLCBtc2csIHBhcnNlRm4pIHtcbiAgICAgICAgYXJnc2VydCgnW29iamVjdHxzdHJpbmddIFtzdHJpbmd8ZnVuY3Rpb25dIFtmdW5jdGlvbl0nLCBba2V5LCBtc2csIHBhcnNlRm5dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGtleSkpIHtcbiAgICAgICAgICAgIGtleSA9IGFwcGx5RXh0ZW5kcyhrZXksIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY3dkLCBcImZcIiksIHRoaXNba0dldFBhcnNlckNvbmZpZ3VyYXRpb25dKClbJ2RlZXAtbWVyZ2UtY29uZmlnJ10gfHwgZmFsc2UsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpKTtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmNvbmZpZ09iamVjdHMgPSAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuY29uZmlnT2JqZWN0cyB8fCBbXSkuY29uY2F0KGtleSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG1zZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGFyc2VGbiA9IG1zZztcbiAgICAgICAgICAgIG1zZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlc2NyaWJlKGtleSwgbXNnIHx8IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5kZWZlclkxOG5Mb29rdXAoJ1BhdGggdG8gSlNPTiBjb25maWcgZmlsZScpKTtcbiAgICAgICAgKEFycmF5LmlzQXJyYXkoa2V5KSA/IGtleSA6IFtrZXldKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuY29uZmlnW2tdID0gcGFyc2VGbiB8fCB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGNvbXBsZXRpb24oY21kLCBkZXNjLCBmbikge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nXSBbc3RyaW5nfGJvb2xlYW58ZnVuY3Rpb25dIFtmdW5jdGlvbl0nLCBbY21kLCBkZXNjLCBmbl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGRlc2MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGZuID0gZGVzYztcbiAgICAgICAgICAgIGRlc2MgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uQ29tbWFuZCwgY21kIHx8IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbkNvbW1hbmQsIFwiZlwiKSB8fCAnY29tcGxldGlvbicsIFwiZlwiKTtcbiAgICAgICAgaWYgKCFkZXNjICYmIGRlc2MgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZXNjID0gJ2dlbmVyYXRlIGNvbXBsZXRpb24gc2NyaXB0JztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbW1hbmQoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uQ29tbWFuZCwgXCJmXCIpLCBkZXNjKTtcbiAgICAgICAgaWYgKGZuKVxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uLCBcImZcIikucmVnaXN0ZXJGdW5jdGlvbihmbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBjb21tYW5kKGNtZCwgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIsIG1pZGRsZXdhcmVzLCBkZXByZWNhdGVkKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8YXJyYXl8b2JqZWN0PiBbc3RyaW5nfGJvb2xlYW5dIFtmdW5jdGlvbnxvYmplY3RdIFtmdW5jdGlvbl0gW2FycmF5XSBbYm9vbGVhbnxzdHJpbmddJywgW2NtZCwgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIsIG1pZGRsZXdhcmVzLCBkZXByZWNhdGVkXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgXCJmXCIpLmFkZEhhbmRsZXIoY21kLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlciwgbWlkZGxld2FyZXMsIGRlcHJlY2F0ZWQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgY29tbWFuZHMoY21kLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlciwgbWlkZGxld2FyZXMsIGRlcHJlY2F0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tbWFuZChjbWQsIGRlc2NyaXB0aW9uLCBidWlsZGVyLCBoYW5kbGVyLCBtaWRkbGV3YXJlcywgZGVwcmVjYXRlZCk7XG4gICAgfVxuICAgIGNvbW1hbmREaXIoZGlyLCBvcHRzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmc+IFtvYmplY3RdJywgW2Rpciwgb3B0c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBjb25zdCByZXEgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BhcmVudFJlcXVpcmUsIFwiZlwiKSB8fCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5yZXF1aXJlO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQsIFwiZlwiKS5hZGREaXJlY3RvcnkoZGlyLCByZXEsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLmdldENhbGxlckZpbGUoKSwgb3B0cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBjb3VudChrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdGhpc1trUG9wdWxhdGVQYXJzZXJIaW50QXJyYXldKCdjb3VudCcsIGtleXMpO1xuICAgICAgICB0aGlzW2tUcmFja01hbnVhbGx5U2V0S2V5c10oa2V5cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkZWZhdWx0KGtleSwgdmFsdWUsIGRlZmF1bHREZXNjcmlwdGlvbikge1xuICAgICAgICBhcmdzZXJ0KCc8b2JqZWN0fHN0cmluZ3xhcnJheT4gWypdIFtzdHJpbmddJywgW2tleSwgdmFsdWUsIGRlZmF1bHREZXNjcmlwdGlvbl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoZGVmYXVsdERlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBhc3NlcnRTaW5nbGVLZXkoa2V5LCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKSk7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5kZWZhdWx0RGVzY3JpcHRpb25ba2V5XSA9IGRlZmF1bHREZXNjcmlwdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhc3NlcnRTaW5nbGVLZXkoa2V5LCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKSk7XG4gICAgICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmRlZmF1bHREZXNjcmlwdGlvbltrZXldKVxuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmRlZmF1bHREZXNjcmlwdGlvbltrZXldID1cbiAgICAgICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmZ1bmN0aW9uRGVzY3JpcHRpb24odmFsdWUpO1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5jYWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpc1trUG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5XSh0aGlzLmRlZmF1bHQuYmluZCh0aGlzKSwgJ2RlZmF1bHQnLCBrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRlZmF1bHRzKGtleSwgdmFsdWUsIGRlZmF1bHREZXNjcmlwdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0KGtleSwgdmFsdWUsIGRlZmF1bHREZXNjcmlwdGlvbik7XG4gICAgfVxuICAgIGRlbWFuZENvbW1hbmQobWluID0gMSwgbWF4LCBtaW5Nc2csIG1heE1zZykge1xuICAgICAgICBhcmdzZXJ0KCdbbnVtYmVyXSBbbnVtYmVyfHN0cmluZ10gW3N0cmluZ3xudWxsfHVuZGVmaW5lZF0gW3N0cmluZ3xudWxsfHVuZGVmaW5lZF0nLCBbbWluLCBtYXgsIG1pbk1zZywgbWF4TXNnXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmICh0eXBlb2YgbWF4ICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgbWluTXNnID0gbWF4O1xuICAgICAgICAgICAgbWF4ID0gSW5maW5pdHk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nbG9iYWwoJ18nLCBmYWxzZSk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmRlbWFuZGVkQ29tbWFuZHMuXyA9IHtcbiAgICAgICAgICAgIG1pbixcbiAgICAgICAgICAgIG1heCxcbiAgICAgICAgICAgIG1pbk1zZyxcbiAgICAgICAgICAgIG1heE1zZyxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRlbWFuZChrZXlzLCBtYXgsIG1zZykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtYXgpKSB7XG4gICAgICAgICAgICBtYXguZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKG1zZywgdHJ1ZSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVtYW5kT3B0aW9uKGtleSwgbXNnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbWF4ID0gSW5maW5pdHk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG1heCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIG1zZyA9IG1heDtcbiAgICAgICAgICAgIG1heCA9IEluZmluaXR5O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Yga2V5cyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKG1zZywgdHJ1ZSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikpO1xuICAgICAgICAgICAgdGhpcy5kZW1hbmRDb21tYW5kKGtleXMsIG1heCwgbXNnLCBtc2cpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoa2V5cykpIHtcbiAgICAgICAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKG1zZywgdHJ1ZSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVtYW5kT3B0aW9uKGtleSwgbXNnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZW1hbmRPcHRpb24oa2V5cywgbXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1zZyA9PT0gdHJ1ZSB8fCB0eXBlb2YgbXNnID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVtYW5kT3B0aW9uKGtleXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkZW1hbmRPcHRpb24oa2V5cywgbXNnKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3R8c3RyaW5nfGFycmF5PiBbc3RyaW5nXScsIFtrZXlzLCBtc2ddLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdGhpc1trUG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5XSh0aGlzLmRlbWFuZE9wdGlvbi5iaW5kKHRoaXMpLCAnZGVtYW5kZWRPcHRpb25zJywga2V5cywgbXNnKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRlcHJlY2F0ZU9wdGlvbihvcHRpb24sIG1lc3NhZ2UpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4gW3N0cmluZ3xib29sZWFuXScsIFtvcHRpb24sIG1lc3NhZ2VdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuZGVwcmVjYXRlZE9wdGlvbnNbb3B0aW9uXSA9IG1lc3NhZ2U7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkZXNjcmliZShrZXlzLCBkZXNjcmlwdGlvbikge1xuICAgICAgICBhcmdzZXJ0KCc8b2JqZWN0fHN0cmluZ3xhcnJheT4gW3N0cmluZ10nLCBba2V5cywgZGVzY3JpcHRpb25dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdGhpc1trU2V0S2V5XShrZXlzLCB0cnVlKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmRlc2NyaWJlKGtleXMsIGRlc2NyaXB0aW9uKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRldGVjdExvY2FsZShkZXRlY3QpIHtcbiAgICAgICAgYXJnc2VydCgnPGJvb2xlYW4+JywgW2RldGVjdF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2RldGVjdExvY2FsZSwgZGV0ZWN0LCBcImZcIik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBlbnYocHJlZml4KSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tzdHJpbmd8Ym9vbGVhbl0nLCBbcHJlZml4XSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChwcmVmaXggPT09IGZhbHNlKVxuICAgICAgICAgICAgZGVsZXRlIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmVudlByZWZpeDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuZW52UHJlZml4ID0gcHJlZml4IHx8ICcnO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZXBpbG9ndWUobXNnKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmc+JywgW21zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuZXBpbG9nKG1zZyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBlcGlsb2cobXNnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVwaWxvZ3VlKG1zZyk7XG4gICAgfVxuICAgIGV4YW1wbGUoY21kLCBkZXNjcmlwdGlvbikge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfGFycmF5PiBbc3RyaW5nXScsIFtjbWQsIGRlc2NyaXB0aW9uXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNtZCkpIHtcbiAgICAgICAgICAgIGNtZC5mb3JFYWNoKGV4YW1wbGVQYXJhbXMgPT4gdGhpcy5leGFtcGxlKC4uLmV4YW1wbGVQYXJhbXMpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5leGFtcGxlKGNtZCwgZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBleGl0KGNvZGUsIGVycikge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hhc091dHB1dCwgdHJ1ZSwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2V4aXRFcnJvciwgZXJyLCBcImZcIik7XG4gICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2V4aXRQcm9jZXNzLCBcImZcIikpXG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5wcm9jZXNzLmV4aXQoY29kZSk7XG4gICAgfVxuICAgIGV4aXRQcm9jZXNzKGVuYWJsZWQgPSB0cnVlKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tib29sZWFuXScsIFtlbmFibGVkXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZXhpdFByb2Nlc3MsIGVuYWJsZWQsIFwiZlwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGZhaWwoZikge1xuICAgICAgICBhcmdzZXJ0KCc8ZnVuY3Rpb258Ym9vbGVhbj4nLCBbZl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGYgPT09ICdib29sZWFuJyAmJiBmICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihcIkludmFsaWQgZmlyc3QgYXJndW1lbnQuIEV4cGVjdGVkIGZ1bmN0aW9uIG9yIGJvb2xlYW4gJ2ZhbHNlJ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuZmFpbEZuKGYpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0QWxpYXNlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VkID8gdGhpcy5wYXJzZWQuYWxpYXNlcyA6IHt9O1xuICAgIH1cbiAgICBhc3luYyBnZXRDb21wbGV0aW9uKGFyZ3MsIGRvbmUpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5PiBbZnVuY3Rpb25dJywgW2FyZ3MsIGRvbmVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbiwgXCJmXCIpLmdldENvbXBsZXRpb24oYXJncywgKGVyciwgY29tcGxldGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNvbXBsZXRpb25zKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbiwgXCJmXCIpLmdldENvbXBsZXRpb24oYXJncywgZG9uZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0RGVtYW5kZWRPcHRpb25zKCkge1xuICAgICAgICBhcmdzZXJ0KFtdLCAwKTtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmRlbWFuZGVkT3B0aW9ucztcbiAgICB9XG4gICAgZ2V0RGVtYW5kZWRDb21tYW5kcygpIHtcbiAgICAgICAgYXJnc2VydChbXSwgMCk7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5kZW1hbmRlZENvbW1hbmRzO1xuICAgIH1cbiAgICBnZXREZXByZWNhdGVkT3B0aW9ucygpIHtcbiAgICAgICAgYXJnc2VydChbXSwgMCk7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5kZXByZWNhdGVkT3B0aW9ucztcbiAgICB9XG4gICAgZ2V0RGV0ZWN0TG9jYWxlKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9kZXRlY3RMb2NhbGUsIFwiZlwiKTtcbiAgICB9XG4gICAgZ2V0RXhpdFByb2Nlc3MoKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2V4aXRQcm9jZXNzLCBcImZcIik7XG4gICAgfVxuICAgIGdldEdyb3VwcygpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZ3JvdXBzLCBcImZcIiksIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcHJlc2VydmVkR3JvdXBzLCBcImZcIikpO1xuICAgIH1cbiAgICBnZXRIZWxwKCkge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hhc091dHB1dCwgdHJ1ZSwgXCJmXCIpO1xuICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5oYXNDYWNoZWRIZWxwTWVzc2FnZSgpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2UgPSB0aGlzW2tSdW5ZYXJnc1BhcnNlckFuZEV4ZWN1dGVDb21tYW5kc10oX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wcm9jZXNzQXJncywgXCJmXCIpLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgMCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShwYXJzZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5oZWxwKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXJSZXNwb25zZSA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgXCJmXCIpLnJ1bkRlZmF1bHRCdWlsZGVyT24odGhpcyk7XG4gICAgICAgICAgICBpZiAoaXNQcm9taXNlKGJ1aWxkZXJSZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYnVpbGRlclJlc3BvbnNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmhlbHAoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5oZWxwKCkpO1xuICAgIH1cbiAgICBnZXRPcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIik7XG4gICAgfVxuICAgIGdldFN0cmljdCgpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0LCBcImZcIik7XG4gICAgfVxuICAgIGdldFN0cmljdENvbW1hbmRzKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3RDb21tYW5kcywgXCJmXCIpO1xuICAgIH1cbiAgICBnZXRTdHJpY3RPcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3RPcHRpb25zLCBcImZcIik7XG4gICAgfVxuICAgIGdsb2JhbChnbG9iYWxzLCBnbG9iYWwpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xhcnJheT4gW2Jvb2xlYW5dJywgW2dsb2JhbHMsIGdsb2JhbF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBnbG9iYWxzID0gW10uY29uY2F0KGdsb2JhbHMpO1xuICAgICAgICBpZiAoZ2xvYmFsICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikubG9jYWwgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5sb2NhbC5maWx0ZXIobCA9PiBnbG9iYWxzLmluZGV4T2YobCkgPT09IC0xKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGdsb2JhbHMuZm9yRWFjaChnID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmxvY2FsLmluY2x1ZGVzKGcpKVxuICAgICAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5sb2NhbC5wdXNoKGcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdyb3VwKG9wdHMsIGdyb3VwTmFtZSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfGFycmF5PiA8c3RyaW5nPicsIFtvcHRzLCBncm91cE5hbWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ByZXNlcnZlZEdyb3VwcywgXCJmXCIpW2dyb3VwTmFtZV0gfHwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9ncm91cHMsIFwiZlwiKVtncm91cE5hbWVdO1xuICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wcmVzZXJ2ZWRHcm91cHMsIFwiZlwiKVtncm91cE5hbWVdKSB7XG4gICAgICAgICAgICBkZWxldGUgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wcmVzZXJ2ZWRHcm91cHMsIFwiZlwiKVtncm91cE5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlZW4gPSB7fTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9ncm91cHMsIFwiZlwiKVtncm91cE5hbWVdID0gKGV4aXN0aW5nIHx8IFtdKS5jb25jYXQob3B0cykuZmlsdGVyKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoc2VlbltrZXldKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiAoc2VlbltrZXldID0gdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaGlkZShrZXkpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4nLCBba2V5XSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmhpZGRlbk9wdGlvbnMucHVzaChrZXkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaW1wbGllcyhrZXksIHZhbHVlKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8b2JqZWN0PiBbbnVtYmVyfHN0cmluZ3xhcnJheV0nLCBba2V5LCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIFwiZlwiKS5pbXBsaWVzKGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgbG9jYWxlKGxvY2FsZSkge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nXScsIFtsb2NhbGVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKGxvY2FsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzW2tHdWVzc0xvY2FsZV0oKTtcbiAgICAgICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS55MThuLmdldExvY2FsZSgpO1xuICAgICAgICB9XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZGV0ZWN0TG9jYWxlLCBmYWxzZSwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS55MThuLnNldExvY2FsZShsb2NhbGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgbWlkZGxld2FyZShjYWxsYmFjaywgYXBwbHlCZWZvcmVWYWxpZGF0aW9uLCBnbG9iYWwpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZ2xvYmFsTWlkZGxld2FyZSwgXCJmXCIpLmFkZE1pZGRsZXdhcmUoY2FsbGJhY2ssICEhYXBwbHlCZWZvcmVWYWxpZGF0aW9uLCBnbG9iYWwpO1xuICAgIH1cbiAgICBuYXJncyhrZXksIHZhbHVlKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8b2JqZWN0fGFycmF5PiBbbnVtYmVyXScsIFtrZXksIHZhbHVlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHRoaXNba1BvcHVsYXRlUGFyc2VySGludFNpbmdsZVZhbHVlRGljdGlvbmFyeV0odGhpcy5uYXJncy5iaW5kKHRoaXMpLCAnbmFyZycsIGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgbm9ybWFsaXplKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB0aGlzW2tQb3B1bGF0ZVBhcnNlckhpbnRBcnJheV0oJ25vcm1hbGl6ZScsIGtleXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgbnVtYmVyKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB0aGlzW2tQb3B1bGF0ZVBhcnNlckhpbnRBcnJheV0oJ251bWJlcicsIGtleXMpO1xuICAgICAgICB0aGlzW2tUcmFja01hbnVhbGx5U2V0S2V5c10oa2V5cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBvcHRpb24oa2V5LCBvcHQpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xvYmplY3Q+IFtvYmplY3RdJywgW2tleSwgb3B0XSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoa2V5KS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucyhrLCBrZXlba10pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBvcHQgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXNba1RyYWNrTWFudWFsbHlTZXRLZXlzXShrZXkpO1xuICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmVyc2lvbk9wdCwgXCJmXCIpICYmIChrZXkgPT09ICd2ZXJzaW9uJyB8fCAob3B0ID09PSBudWxsIHx8IG9wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0LmFsaWFzKSA9PT0gJ3ZlcnNpb24nKSkge1xuICAgICAgICAgICAgICAgIHRoaXNba0VtaXRXYXJuaW5nXShbXG4gICAgICAgICAgICAgICAgICAgICdcInZlcnNpb25cIiBpcyBhIHJlc2VydmVkIHdvcmQuJyxcbiAgICAgICAgICAgICAgICAgICAgJ1BsZWFzZSBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzonLFxuICAgICAgICAgICAgICAgICAgICAnLSBEaXNhYmxlIHZlcnNpb24gd2l0aCBgeWFyZ3MudmVyc2lvbihmYWxzZSlgIGlmIHVzaW5nIFwidmVyc2lvblwiIGFzIGFuIG9wdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICctIFVzZSB0aGUgYnVpbHQtaW4gYHlhcmdzLnZlcnNpb25gIG1ldGhvZCBpbnN0ZWFkIChpZiBhcHBsaWNhYmxlKScsXG4gICAgICAgICAgICAgICAgICAgICctIFVzZSBhIGRpZmZlcmVudCBvcHRpb24ga2V5JyxcbiAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8veWFyZ3MuanMub3JnL2RvY3MvI2FwaS1yZWZlcmVuY2UtdmVyc2lvbicsXG4gICAgICAgICAgICAgICAgXS5qb2luKCdcXG4nKSwgdW5kZWZpbmVkLCAndmVyc2lvbldhcm5pbmcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmtleVtrZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChvcHQuYWxpYXMpXG4gICAgICAgICAgICAgICAgdGhpcy5hbGlhcyhrZXksIG9wdC5hbGlhcyk7XG4gICAgICAgICAgICBjb25zdCBkZXByZWNhdGUgPSBvcHQuZGVwcmVjYXRlIHx8IG9wdC5kZXByZWNhdGVkO1xuICAgICAgICAgICAgaWYgKGRlcHJlY2F0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVwcmVjYXRlT3B0aW9uKGtleSwgZGVwcmVjYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRlbWFuZCA9IG9wdC5kZW1hbmQgfHwgb3B0LnJlcXVpcmVkIHx8IG9wdC5yZXF1aXJlO1xuICAgICAgICAgICAgaWYgKGRlbWFuZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVtYW5kKGtleSwgZGVtYW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuZGVtYW5kT3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZW1hbmRPcHRpb24oa2V5LCB0eXBlb2Ygb3B0LmRlbWFuZE9wdGlvbiA9PT0gJ3N0cmluZycgPyBvcHQuZGVtYW5kT3B0aW9uIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY29uZmxpY3RzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25mbGljdHMoa2V5LCBvcHQuY29uZmxpY3RzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgnZGVmYXVsdCcgaW4gb3B0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0KGtleSwgb3B0LmRlZmF1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5pbXBsaWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmltcGxpZXMoa2V5LCBvcHQuaW1wbGllcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0Lm5hcmdzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hcmdzKGtleSwgb3B0Lm5hcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcoa2V5LCBvcHQuY29uZmlnUGFyc2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQubm9ybWFsaXplKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3JtYWxpemUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY2hvaWNlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hvaWNlcyhrZXksIG9wdC5jaG9pY2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY29lcmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb2VyY2Uoa2V5LCBvcHQuY29lcmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuZ3JvdXApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwKGtleSwgb3B0Lmdyb3VwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuYm9vbGVhbiB8fCBvcHQudHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib29sZWFuKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib29sZWFuKG9wdC5hbGlhcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmFycmF5IHx8IG9wdC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcnJheShrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChvcHQuYWxpYXMpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXJyYXkob3B0LmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQubnVtYmVyIHx8IG9wdC50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHRoaXMubnVtYmVyKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1iZXIob3B0LmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuc3RyaW5nIHx8IG9wdC50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RyaW5nKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJpbmcob3B0LmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY291bnQgfHwgb3B0LnR5cGUgPT09ICdjb3VudCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50KGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdC5nbG9iYWwgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2xvYmFsKGtleSwgb3B0Lmdsb2JhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmRlZmF1bHREZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmRlZmF1bHREZXNjcmlwdGlvbltrZXldID0gb3B0LmRlZmF1bHREZXNjcmlwdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuc2tpcFZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNraXBWYWxpZGF0aW9uKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkZXNjID0gb3B0LmRlc2NyaWJlIHx8IG9wdC5kZXNjcmlwdGlvbiB8fCBvcHQuZGVzYztcbiAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9ucyA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5nZXREZXNjcmlwdGlvbnMoKTtcbiAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRlc2NyaXB0aW9ucywga2V5KSB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiBkZXNjID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzY3JpYmUoa2V5LCBkZXNjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LnJlcXVpcmVzQXJnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXF1aXJlc0FyZyhrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBvcHRpb25zKGtleSwgb3B0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbihrZXksIG9wdCk7XG4gICAgfVxuICAgIHBhcnNlKGFyZ3MsIHNob3J0Q2lyY3VpdCwgX3BhcnNlRm4pIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xhcnJheV0gW2Z1bmN0aW9ufGJvb2xlYW58b2JqZWN0XSBbZnVuY3Rpb25dJywgW2FyZ3MsIHNob3J0Q2lyY3VpdCwgX3BhcnNlRm5dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdGhpc1trRnJlZXplXSgpO1xuICAgICAgICBpZiAodHlwZW9mIGFyZ3MgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhcmdzID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wcm9jZXNzQXJncywgXCJmXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygc2hvcnRDaXJjdWl0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZUNvbnRleHQsIHNob3J0Q2lyY3VpdCwgXCJmXCIpO1xuICAgICAgICAgICAgc2hvcnRDaXJjdWl0ID0gX3BhcnNlRm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBzaG9ydENpcmN1aXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGFyc2VGbiwgc2hvcnRDaXJjdWl0LCBcImZcIik7XG4gICAgICAgICAgICBzaG9ydENpcmN1aXQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNob3J0Q2lyY3VpdClcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcHJvY2Vzc0FyZ3MsIGFyZ3MsIFwiZlwiKTtcbiAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGFyc2VGbiwgXCJmXCIpKVxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9leGl0UHJvY2VzcywgZmFsc2UsIFwiZlwiKTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpc1trUnVuWWFyZ3NQYXJzZXJBbmRFeGVjdXRlQ29tbWFuZHNdKGFyZ3MsICEhc2hvcnRDaXJjdWl0KTtcbiAgICAgICAgY29uc3QgdG1wUGFyc2VkID0gdGhpcy5wYXJzZWQ7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbiwgXCJmXCIpLnNldFBhcnNlZCh0aGlzLnBhcnNlZCk7XG4gICAgICAgIGlmIChpc1Byb21pc2UocGFyc2VkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlZFxuICAgICAgICAgICAgICAgIC50aGVuKGFyZ3YgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BhcnNlRm4sIFwiZlwiKSlcbiAgICAgICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZUZuLCBcImZcIikuY2FsbCh0aGlzLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2V4aXRFcnJvciwgXCJmXCIpLCBhcmd2LCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX291dHB1dCwgXCJmXCIpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGFyc2VGbiwgXCJmXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGFyc2VGbiwgXCJmXCIpKGVyciwgdGhpcy5wYXJzZWQuYXJndiwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vdXRwdXQsIFwiZlwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXNba1VuZnJlZXplXSgpO1xuICAgICAgICAgICAgICAgIHRoaXMucGFyc2VkID0gdG1wUGFyc2VkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZUZuLCBcImZcIikpXG4gICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZUZuLCBcImZcIikuY2FsbCh0aGlzLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2V4aXRFcnJvciwgXCJmXCIpLCBwYXJzZWQsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3V0cHV0LCBcImZcIikpO1xuICAgICAgICAgICAgdGhpc1trVW5mcmVlemVdKCk7XG4gICAgICAgICAgICB0aGlzLnBhcnNlZCA9IHRtcFBhcnNlZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH1cbiAgICBwYXJzZUFzeW5jKGFyZ3MsIHNob3J0Q2lyY3VpdCwgX3BhcnNlRm4pIHtcbiAgICAgICAgY29uc3QgbWF5YmVQcm9taXNlID0gdGhpcy5wYXJzZShhcmdzLCBzaG9ydENpcmN1aXQsIF9wYXJzZUZuKTtcbiAgICAgICAgcmV0dXJuICFpc1Byb21pc2UobWF5YmVQcm9taXNlKVxuICAgICAgICAgICAgPyBQcm9taXNlLnJlc29sdmUobWF5YmVQcm9taXNlKVxuICAgICAgICAgICAgOiBtYXliZVByb21pc2U7XG4gICAgfVxuICAgIHBhcnNlU3luYyhhcmdzLCBzaG9ydENpcmN1aXQsIF9wYXJzZUZuKSB7XG4gICAgICAgIGNvbnN0IG1heWJlUHJvbWlzZSA9IHRoaXMucGFyc2UoYXJncywgc2hvcnRDaXJjdWl0LCBfcGFyc2VGbik7XG4gICAgICAgIGlmIChpc1Byb21pc2UobWF5YmVQcm9taXNlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcignLnBhcnNlU3luYygpIG11c3Qgbm90IGJlIHVzZWQgd2l0aCBhc3luY2hyb25vdXMgYnVpbGRlcnMsIGhhbmRsZXJzLCBvciBtaWRkbGV3YXJlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heWJlUHJvbWlzZTtcbiAgICB9XG4gICAgcGFyc2VyQ29uZmlndXJhdGlvbihjb25maWcpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdD4nLCBbY29uZmlnXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGFyc2VyQ29uZmlnLCBjb25maWcsIFwiZlwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHBrZ0NvbmYoa2V5LCByb290UGF0aCkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nPiBbc3RyaW5nXScsIFtrZXksIHJvb3RQYXRoXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGxldCBjb25mID0gbnVsbDtcbiAgICAgICAgY29uc3Qgb2JqID0gdGhpc1trUGtnVXBdKHJvb3RQYXRoIHx8IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY3dkLCBcImZcIikpO1xuICAgICAgICBpZiAob2JqW2tleV0gJiYgdHlwZW9mIG9ialtrZXldID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgY29uZiA9IGFwcGx5RXh0ZW5kcyhvYmpba2V5XSwgcm9vdFBhdGggfHwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jd2QsIFwiZlwiKSwgdGhpc1trR2V0UGFyc2VyQ29uZmlndXJhdGlvbl0oKVsnZGVlcC1tZXJnZS1jb25maWcnXSB8fCBmYWxzZSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikpO1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuY29uZmlnT2JqZWN0cyA9IChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5jb25maWdPYmplY3RzIHx8IFtdKS5jb25jYXQoY29uZik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHBvc2l0aW9uYWwoa2V5LCBvcHRzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmc+IDxvYmplY3Q+JywgW2tleSwgb3B0c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBzdXBwb3J0ZWRPcHRzID0gW1xuICAgICAgICAgICAgJ2RlZmF1bHQnLFxuICAgICAgICAgICAgJ2RlZmF1bHREZXNjcmlwdGlvbicsXG4gICAgICAgICAgICAnaW1wbGllcycsXG4gICAgICAgICAgICAnbm9ybWFsaXplJyxcbiAgICAgICAgICAgICdjaG9pY2VzJyxcbiAgICAgICAgICAgICdjb25mbGljdHMnLFxuICAgICAgICAgICAgJ2NvZXJjZScsXG4gICAgICAgICAgICAndHlwZScsXG4gICAgICAgICAgICAnZGVzY3JpYmUnLFxuICAgICAgICAgICAgJ2Rlc2MnLFxuICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgICAgICAgICdhbGlhcycsXG4gICAgICAgIF07XG4gICAgICAgIG9wdHMgPSBvYmpGaWx0ZXIob3B0cywgKGssIHYpID0+IHtcbiAgICAgICAgICAgIGlmIChrID09PSAndHlwZScgJiYgIVsnc3RyaW5nJywgJ251bWJlcicsICdib29sZWFuJ10uaW5jbHVkZXModikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHN1cHBvcnRlZE9wdHMuaW5jbHVkZXMoayk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBmdWxsQ29tbWFuZCA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29udGV4dCwgXCJmXCIpLmZ1bGxDb21tYW5kc1tfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbnRleHQsIFwiZlwiKS5mdWxsQ29tbWFuZHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGNvbnN0IHBhcnNlT3B0aW9ucyA9IGZ1bGxDb21tYW5kXG4gICAgICAgICAgICA/IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgXCJmXCIpLmNtZFRvUGFyc2VPcHRpb25zKGZ1bGxDb21tYW5kKVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgYXJyYXk6IFtdLFxuICAgICAgICAgICAgICAgIGFsaWFzOiB7fSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB7fSxcbiAgICAgICAgICAgICAgICBkZW1hbmQ6IHt9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgb2JqZWN0S2V5cyhwYXJzZU9wdGlvbnMpLmZvckVhY2gocGsgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VPcHRpb24gPSBwYXJzZU9wdGlvbnNbcGtdO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyc2VPcHRpb24pKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlT3B0aW9uLmluZGV4T2Yoa2V5KSAhPT0gLTEpXG4gICAgICAgICAgICAgICAgICAgIG9wdHNbcGtdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZU9wdGlvbltrZXldICYmICEocGsgaW4gb3B0cykpXG4gICAgICAgICAgICAgICAgICAgIG9wdHNbcGtdID0gcGFyc2VPcHRpb25ba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZ3JvdXAoa2V5LCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuZ2V0UG9zaXRpb25hbEdyb3VwTmFtZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uKGtleSwgb3B0cyk7XG4gICAgfVxuICAgIHJlY29tbWVuZENvbW1hbmRzKHJlY29tbWVuZCA9IHRydWUpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW3JlY29tbWVuZF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3JlY29tbWVuZENvbW1hbmRzLCByZWNvbW1lbmQsIFwiZlwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHJlcXVpcmVkKGtleXMsIG1heCwgbXNnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlbWFuZChrZXlzLCBtYXgsIG1zZyk7XG4gICAgfVxuICAgIHJlcXVpcmUoa2V5cywgbWF4LCBtc2cpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVtYW5kKGtleXMsIG1heCwgbXNnKTtcbiAgICB9XG4gICAgcmVxdWlyZXNBcmcoa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nfG9iamVjdD4gW251bWJlcl0nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleXMgPT09ICdzdHJpbmcnICYmIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLm5hcmdba2V5c10pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpc1trUG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5XSh0aGlzLnJlcXVpcmVzQXJnLmJpbmQodGhpcyksICduYXJnJywga2V5cywgTmFOKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc2hvd0NvbXBsZXRpb25TY3JpcHQoJDAsIGNtZCkge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nXSBbc3RyaW5nXScsIFskMCwgY21kXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgICQwID0gJDAgfHwgdGhpcy4kMDtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9sb2dnZXIsIFwiZlwiKS5sb2coX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uLCBcImZcIikuZ2VuZXJhdGVDb21wbGV0aW9uU2NyaXB0KCQwLCBjbWQgfHwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uQ29tbWFuZCwgXCJmXCIpIHx8ICdjb21wbGV0aW9uJykpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc2hvd0hlbHAobGV2ZWwpIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xmdW5jdGlvbl0nLCBbbGV2ZWxdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9oYXNPdXRwdXQsIHRydWUsIFwiZlwiKTtcbiAgICAgICAgaWYgKCFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuaGFzQ2FjaGVkSGVscE1lc3NhZ2UoKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnBhcnNlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlID0gdGhpc1trUnVuWWFyZ3NQYXJzZXJBbmRFeGVjdXRlQ29tbWFuZHNdKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcHJvY2Vzc0FyZ3MsIFwiZlwiKSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIDAsIHRydWUpO1xuICAgICAgICAgICAgICAgIGlmIChpc1Byb21pc2UocGFyc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLnNob3dIZWxwKGxldmVsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXJSZXNwb25zZSA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgXCJmXCIpLnJ1bkRlZmF1bHRCdWlsZGVyT24odGhpcyk7XG4gICAgICAgICAgICBpZiAoaXNQcm9taXNlKGJ1aWxkZXJSZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgICBidWlsZGVyUmVzcG9uc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5zaG93SGVscChsZXZlbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLnNob3dIZWxwKGxldmVsKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHNjcmlwdE5hbWUoc2NyaXB0TmFtZSkge1xuICAgICAgICB0aGlzLmN1c3RvbVNjcmlwdE5hbWUgPSB0cnVlO1xuICAgICAgICB0aGlzLiQwID0gc2NyaXB0TmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHNob3dIZWxwT25GYWlsKGVuYWJsZWQsIG1lc3NhZ2UpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW58c3RyaW5nXSBbc3RyaW5nXScsIFtlbmFibGVkLCBtZXNzYWdlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5zaG93SGVscE9uRmFpbChlbmFibGVkLCBtZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHNob3dWZXJzaW9uKGxldmVsKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tzdHJpbmd8ZnVuY3Rpb25dJywgW2xldmVsXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5zaG93VmVyc2lvbihsZXZlbCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBza2lwVmFsaWRhdGlvbihrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdGhpc1trUG9wdWxhdGVQYXJzZXJIaW50QXJyYXldKCdza2lwVmFsaWRhdGlvbicsIGtleXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc3RyaWN0KGVuYWJsZWQpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW2VuYWJsZWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3QsIGVuYWJsZWQgIT09IGZhbHNlLCBcImZcIik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBzdHJpY3RDb21tYW5kcyhlbmFibGVkKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tib29sZWFuXScsIFtlbmFibGVkXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0Q29tbWFuZHMsIGVuYWJsZWQgIT09IGZhbHNlLCBcImZcIik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBzdHJpY3RPcHRpb25zKGVuYWJsZWQpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW2VuYWJsZWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3RPcHRpb25zLCBlbmFibGVkICE9PSBmYWxzZSwgXCJmXCIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc3RyaW5nKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB0aGlzW2tQb3B1bGF0ZVBhcnNlckhpbnRBcnJheV0oJ3N0cmluZycsIGtleXMpO1xuICAgICAgICB0aGlzW2tUcmFja01hbnVhbGx5U2V0S2V5c10oa2V5cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0ZXJtaW5hbFdpZHRoKCkge1xuICAgICAgICBhcmdzZXJ0KFtdLCAwKTtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnByb2Nlc3Muc3RkQ29sdW1ucztcbiAgICB9XG4gICAgdXBkYXRlTG9jYWxlKG9iaikge1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVTdHJpbmdzKG9iaik7XG4gICAgfVxuICAgIHVwZGF0ZVN0cmluZ3Mob2JqKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3Q+JywgW29ial0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2RldGVjdExvY2FsZSwgZmFsc2UsIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikueTE4bi51cGRhdGVMb2NhbGUob2JqKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHVzYWdlKG1zZywgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xudWxsfHVuZGVmaW5lZD4gW3N0cmluZ3xib29sZWFuXSBbZnVuY3Rpb258b2JqZWN0XSBbZnVuY3Rpb25dJywgW21zZywgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXJdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKGRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKG1zZywgbnVsbCwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikpO1xuICAgICAgICAgICAgaWYgKChtc2cgfHwgJycpLm1hdGNoKC9eXFwkMCggfCQpLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb21tYW5kKG1zZywgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcignLnVzYWdlKCkgZGVzY3JpcHRpb24gbXVzdCBzdGFydCB3aXRoICQwIGlmIGJlaW5nIHVzZWQgYXMgYWxpYXMgZm9yIC5jb21tYW5kKCknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS51c2FnZShtc2cpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdXNhZ2VDb25maWd1cmF0aW9uKGNvbmZpZykge1xuICAgICAgICBhcmdzZXJ0KCc8b2JqZWN0PicsIFtjb25maWddLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZUNvbmZpZywgY29uZmlnLCBcImZcIik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB2ZXJzaW9uKG9wdCwgbXNnLCB2ZXIpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdFZlcnNpb25PcHQgPSAndmVyc2lvbic7XG4gICAgICAgIGFyZ3NlcnQoJ1tib29sZWFufHN0cmluZ10gW3N0cmluZ10gW3N0cmluZ10nLCBbb3B0LCBtc2csIHZlcl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92ZXJzaW9uT3B0LCBcImZcIikpIHtcbiAgICAgICAgICAgIHRoaXNba0RlbGV0ZUZyb21QYXJzZXJIaW50T2JqZWN0XShfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZlcnNpb25PcHQsIFwiZlwiKSk7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikudmVyc2lvbih1bmRlZmluZWQpO1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92ZXJzaW9uT3B0LCBudWxsLCBcImZcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHZlciA9IHRoaXNba0d1ZXNzVmVyc2lvbl0oKTtcbiAgICAgICAgICAgIG9wdCA9IGRlZmF1bHRWZXJzaW9uT3B0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmIChvcHQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2ZXIgPSBvcHQ7XG4gICAgICAgICAgICBvcHQgPSBkZWZhdWx0VmVyc2lvbk9wdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB2ZXIgPSBtc2c7XG4gICAgICAgICAgICBtc2cgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92ZXJzaW9uT3B0LCB0eXBlb2Ygb3B0ID09PSAnc3RyaW5nJyA/IG9wdCA6IGRlZmF1bHRWZXJzaW9uT3B0LCBcImZcIik7XG4gICAgICAgIG1zZyA9IG1zZyB8fCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuZGVmZXJZMThuTG9va3VwKCdTaG93IHZlcnNpb24gbnVtYmVyJyk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS52ZXJzaW9uKHZlciB8fCB1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLmJvb2xlYW4oX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92ZXJzaW9uT3B0LCBcImZcIikpO1xuICAgICAgICB0aGlzLmRlc2NyaWJlKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmVyc2lvbk9wdCwgXCJmXCIpLCBtc2cpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgd3JhcChjb2xzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxudW1iZXJ8bnVsbHx1bmRlZmluZWQ+JywgW2NvbHNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLndyYXAoY29scyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBbKF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9jd2QgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9jb250ZXh0ID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbiA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb25Db21tYW5kID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfZGVmYXVsdFNob3dIaWRkZW5PcHQgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9leGl0RXJyb3IgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9kZXRlY3RMb2NhbGUgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9lbWl0dGVkV2FybmluZ3MgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9leGl0UHJvY2VzcyA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX2Zyb3plbnMgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9nbG9iYWxNaWRkbGV3YXJlID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfZ3JvdXBzID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfaGFzT3V0cHV0ID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfaGVscE9wdCA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX2lzR2xvYmFsQ29udGV4dCA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX2xvZ2dlciA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX291dHB1dCA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9wYXJlbnRSZXF1aXJlID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfcGFyc2VyQ29uZmlnID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfcGFyc2VGbiA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX3BhcnNlQ29udGV4dCA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX3BrZ3MgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9wcmVzZXJ2ZWRHcm91cHMgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9wcm9jZXNzQXJncyA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX3JlY29tbWVuZENvbW1hbmRzID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2Vfc2hpbSA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX3N0cmljdCA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX3N0cmljdENvbW1hbmRzID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0T3B0aW9ucyA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX3VzYWdlID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfdXNhZ2VDb25maWcgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV92ZXJzaW9uT3B0ID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiA9IG5ldyBXZWFrTWFwKCksIGtDb3B5RG91YmxlRGFzaCldKGFyZ3YpIHtcbiAgICAgICAgaWYgKCFhcmd2Ll8gfHwgIWFyZ3ZbJy0tJ10pXG4gICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgYXJndi5fLnB1c2guYXBwbHkoYXJndi5fLCBhcmd2WyctLSddKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRlbGV0ZSBhcmd2WyctLSddO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfZXJyKSB7IH1cbiAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgfVxuICAgIFtrQ3JlYXRlTG9nZ2VyXSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvZzogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXNba0hhc1BhcnNlQ2FsbGJhY2tdKCkpXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaGFzT3V0cHV0LCB0cnVlLCBcImZcIik7XG4gICAgICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3V0cHV0LCBcImZcIikubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX291dHB1dCwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vdXRwdXQsIFwiZlwiKSArICdcXG4nLCBcImZcIik7XG4gICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vdXRwdXQsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3V0cHV0LCBcImZcIikgKyBhcmdzLmpvaW4oJyAnKSwgXCJmXCIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpc1trSGFzUGFyc2VDYWxsYmFja10oKSlcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hhc091dHB1dCwgdHJ1ZSwgXCJmXCIpO1xuICAgICAgICAgICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX291dHB1dCwgXCJmXCIpLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vdXRwdXQsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3V0cHV0LCBcImZcIikgKyAnXFxuJywgXCJmXCIpO1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3V0cHV0LCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX291dHB1dCwgXCJmXCIpICsgYXJncy5qb2luKCcgJyksIFwiZlwiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIFtrRGVsZXRlRnJvbVBhcnNlckhpbnRPYmplY3RdKG9wdGlvbktleSkge1xuICAgICAgICBvYmplY3RLZXlzKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpKS5mb3JFYWNoKChoaW50S2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoKChrZXkpID0+IGtleSA9PT0gJ2NvbmZpZ09iamVjdHMnKShoaW50S2V5KSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBoaW50ID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIilbaGludEtleV07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShoaW50KSkge1xuICAgICAgICAgICAgICAgIGlmIChoaW50LmluY2x1ZGVzKG9wdGlvbktleSkpXG4gICAgICAgICAgICAgICAgICAgIGhpbnQuc3BsaWNlKGhpbnQuaW5kZXhPZihvcHRpb25LZXkpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBoaW50ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBoaW50W29wdGlvbktleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBkZWxldGUgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmdldERlc2NyaXB0aW9ucygpW29wdGlvbktleV07XG4gICAgfVxuICAgIFtrRW1pdFdhcm5pbmddKHdhcm5pbmcsIHR5cGUsIGRlZHVwbGljYXRpb25JZCkge1xuICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZW1pdHRlZFdhcm5pbmdzLCBcImZcIilbZGVkdXBsaWNhdGlvbklkXSkge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikucHJvY2Vzcy5lbWl0V2FybmluZyh3YXJuaW5nLCB0eXBlKTtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZW1pdHRlZFdhcm5pbmdzLCBcImZcIilbZGVkdXBsaWNhdGlvbklkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgW2tGcmVlemVdKCkge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2Zyb3plbnMsIFwiZlwiKS5wdXNoKHtcbiAgICAgICAgICAgIG9wdGlvbnM6IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLFxuICAgICAgICAgICAgY29uZmlnT2JqZWN0czogX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuY29uZmlnT2JqZWN0cy5zbGljZSgwKSxcbiAgICAgICAgICAgIGV4aXRQcm9jZXNzOiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2V4aXRQcm9jZXNzLCBcImZcIiksXG4gICAgICAgICAgICBncm91cHM6IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZ3JvdXBzLCBcImZcIiksXG4gICAgICAgICAgICBzdHJpY3Q6IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0LCBcImZcIiksXG4gICAgICAgICAgICBzdHJpY3RDb21tYW5kczogX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3RDb21tYW5kcywgXCJmXCIpLFxuICAgICAgICAgICAgc3RyaWN0T3B0aW9uczogX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3RPcHRpb25zLCBcImZcIiksXG4gICAgICAgICAgICBjb21wbGV0aW9uQ29tbWFuZDogX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uQ29tbWFuZCwgXCJmXCIpLFxuICAgICAgICAgICAgb3V0cHV0OiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX291dHB1dCwgXCJmXCIpLFxuICAgICAgICAgICAgZXhpdEVycm9yOiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2V4aXRFcnJvciwgXCJmXCIpLFxuICAgICAgICAgICAgaGFzT3V0cHV0OiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hhc091dHB1dCwgXCJmXCIpLFxuICAgICAgICAgICAgcGFyc2VkOiB0aGlzLnBhcnNlZCxcbiAgICAgICAgICAgIHBhcnNlRm46IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGFyc2VGbiwgXCJmXCIpLFxuICAgICAgICAgICAgcGFyc2VDb250ZXh0OiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BhcnNlQ29udGV4dCwgXCJmXCIpLFxuICAgICAgICB9KTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmZyZWV6ZSgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIFwiZlwiKS5mcmVlemUoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLCBcImZcIikuZnJlZXplKCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZ2xvYmFsTWlkZGxld2FyZSwgXCJmXCIpLmZyZWV6ZSgpO1xuICAgIH1cbiAgICBba0dldERvbGxhclplcm9dKCkge1xuICAgICAgICBsZXQgJDAgPSAnJztcbiAgICAgICAgbGV0IGRlZmF1bHQkMDtcbiAgICAgICAgaWYgKC9cXGIobm9kZXxpb2pzfGVsZWN0cm9uKShcXC5leGUpPyQvLnRlc3QoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikucHJvY2Vzcy5hcmd2KClbMF0pKSB7XG4gICAgICAgICAgICBkZWZhdWx0JDAgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5wcm9jZXNzLmFyZ3YoKS5zbGljZSgxLCAyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlZmF1bHQkMCA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnByb2Nlc3MuYXJndigpLnNsaWNlKDAsIDEpO1xuICAgICAgICB9XG4gICAgICAgICQwID0gZGVmYXVsdCQwXG4gICAgICAgICAgICAubWFwKHggPT4ge1xuICAgICAgICAgICAgY29uc3QgYiA9IHRoaXNba1JlYmFzZV0oX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jd2QsIFwiZlwiKSwgeCk7XG4gICAgICAgICAgICByZXR1cm4geC5tYXRjaCgvXihcXC98KFthLXpBLVpdOik/XFxcXCkvKSAmJiBiLmxlbmd0aCA8IHgubGVuZ3RoID8gYiA6IHg7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbignICcpXG4gICAgICAgICAgICAudHJpbSgpO1xuICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikuZ2V0RW52KCdfJykgJiZcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLmdldFByb2Nlc3NBcmd2QmluKCkgPT09IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLmdldEVudignXycpKSB7XG4gICAgICAgICAgICAkMCA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpXG4gICAgICAgICAgICAgICAgLmdldEVudignXycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoYCR7X19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikucGF0aC5kaXJuYW1lKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnByb2Nlc3MuZXhlY1BhdGgoKSl9L2AsICcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJDA7XG4gICAgfVxuICAgIFtrR2V0UGFyc2VyQ29uZmlndXJhdGlvbl0oKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BhcnNlckNvbmZpZywgXCJmXCIpO1xuICAgIH1cbiAgICBba0dldFVzYWdlQ29uZmlndXJhdGlvbl0oKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlQ29uZmlnLCBcImZcIik7XG4gICAgfVxuICAgIFtrR3Vlc3NMb2NhbGVdKCkge1xuICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZGV0ZWN0TG9jYWxlLCBcImZcIikpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLmdldEVudignTENfQUxMJykgfHxcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLmdldEVudignTENfTUVTU0FHRVMnKSB8fFxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikuZ2V0RW52KCdMQU5HJykgfHxcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLmdldEVudignTEFOR1VBR0UnKSB8fFxuICAgICAgICAgICAgJ2VuX1VTJztcbiAgICAgICAgdGhpcy5sb2NhbGUobG9jYWxlLnJlcGxhY2UoL1suOl0uKi8sICcnKSk7XG4gICAgfVxuICAgIFtrR3Vlc3NWZXJzaW9uXSgpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gdGhpc1trUGtnVXBdKCk7XG4gICAgICAgIHJldHVybiBvYmoudmVyc2lvbiB8fCAndW5rbm93bic7XG4gICAgfVxuICAgIFtrUGFyc2VQb3NpdGlvbmFsTnVtYmVyc10oYXJndikge1xuICAgICAgICBjb25zdCBhcmdzID0gYXJndlsnLS0nXSA/IGFyZ3ZbJy0tJ10gOiBhcmd2Ll87XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBhcmc7IChhcmcgPSBhcmdzW2ldKSAhPT0gdW5kZWZpbmVkOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5QYXJzZXIubG9va3NMaWtlTnVtYmVyKGFyZykgJiZcbiAgICAgICAgICAgICAgICBOdW1iZXIuaXNTYWZlSW50ZWdlcihNYXRoLmZsb29yKHBhcnNlRmxvYXQoYCR7YXJnfWApKSkpIHtcbiAgICAgICAgICAgICAgICBhcmdzW2ldID0gTnVtYmVyKGFyZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgfVxuICAgIFtrUGtnVXBdKHJvb3RQYXRoKSB7XG4gICAgICAgIGNvbnN0IG5wYXRoID0gcm9vdFBhdGggfHwgJyonO1xuICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wa2dzLCBcImZcIilbbnBhdGhdKVxuICAgICAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGtncywgXCJmXCIpW25wYXRoXTtcbiAgICAgICAgbGV0IG9iaiA9IHt9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHN0YXJ0RGlyID0gcm9vdFBhdGggfHwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikubWFpbkZpbGVuYW1lO1xuICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnBhdGguZXh0bmFtZShzdGFydERpcikpIHtcbiAgICAgICAgICAgICAgICBzdGFydERpciA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnBhdGguZGlybmFtZShzdGFydERpcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwa2dKc29uUGF0aCA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLmZpbmRVcChzdGFydERpciwgKGRpciwgbmFtZXMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobmFtZXMuaW5jbHVkZXMoJ3BhY2thZ2UuanNvbicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAncGFja2FnZS5qc29uJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChwa2dKc29uUGF0aCwgdW5kZWZpbmVkLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKSk7XG4gICAgICAgICAgICBvYmogPSBKU09OLnBhcnNlKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnJlYWRGaWxlU3luYyhwa2dKc29uUGF0aCwgJ3V0ZjgnKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9ub29wKSB7IH1cbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wa2dzLCBcImZcIilbbnBhdGhdID0gb2JqIHx8IHt9O1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wa2dzLCBcImZcIilbbnBhdGhdO1xuICAgIH1cbiAgICBba1BvcHVsYXRlUGFyc2VySGludEFycmF5XSh0eXBlLCBrZXlzKSB7XG4gICAgICAgIGtleXMgPSBbXS5jb25jYXQoa2V5cyk7XG4gICAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAga2V5ID0gdGhpc1trU2FuaXRpemVLZXldKGtleSk7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKVt0eXBlXS5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBba1BvcHVsYXRlUGFyc2VySGludFNpbmdsZVZhbHVlRGljdGlvbmFyeV0oYnVpbGRlciwgdHlwZSwga2V5LCB2YWx1ZSkge1xuICAgICAgICB0aGlzW2tQb3B1bGF0ZVBhcnNlckhpbnREaWN0aW9uYXJ5XShidWlsZGVyLCB0eXBlLCBrZXksIHZhbHVlLCAodHlwZSwga2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIilbdHlwZV1ba2V5XSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgW2tQb3B1bGF0ZVBhcnNlckhpbnRBcnJheURpY3Rpb25hcnldKGJ1aWxkZXIsIHR5cGUsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgdGhpc1trUG9wdWxhdGVQYXJzZXJIaW50RGljdGlvbmFyeV0oYnVpbGRlciwgdHlwZSwga2V5LCB2YWx1ZSwgKHR5cGUsIGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpW3R5cGVdW2tleV0gPSAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIilbdHlwZV1ba2V5XSB8fCBbXSkuY29uY2F0KHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIFtrUG9wdWxhdGVQYXJzZXJIaW50RGljdGlvbmFyeV0oYnVpbGRlciwgdHlwZSwga2V5LCB2YWx1ZSwgc2luZ2xlS2V5SGFuZGxlcikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICBrZXkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICBidWlsZGVyKGssIHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCgoa2V5KSA9PiB0eXBlb2Yga2V5ID09PSAnb2JqZWN0Jykoa2V5KSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIG9iamVjdEtleXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIGJ1aWxkZXIoaywga2V5W2tdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNpbmdsZUtleUhhbmRsZXIodHlwZSwgdGhpc1trU2FuaXRpemVLZXldKGtleSksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBba1Nhbml0aXplS2V5XShrZXkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycpXG4gICAgICAgICAgICByZXR1cm4gJ19fX3Byb3RvX19fJztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgW2tTZXRLZXldKGtleSwgc2V0KSB7XG4gICAgICAgIHRoaXNba1BvcHVsYXRlUGFyc2VySGludFNpbmdsZVZhbHVlRGljdGlvbmFyeV0odGhpc1trU2V0S2V5XS5iaW5kKHRoaXMpLCAna2V5Jywga2V5LCBzZXQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgW2tVbmZyZWV6ZV0oKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZywgX2gsIF9qLCBfaywgX2wsIF9tO1xuICAgICAgICBjb25zdCBmcm96ZW4gPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2Zyb3plbnMsIFwiZlwiKS5wb3AoKTtcbiAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwoZnJvemVuLCB1bmRlZmluZWQsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpKTtcbiAgICAgICAgbGV0IGNvbmZpZ09iamVjdHM7XG4gICAgICAgIChfYSA9IHRoaXMsIF9iID0gdGhpcywgX2MgPSB0aGlzLCBfZCA9IHRoaXMsIF9lID0gdGhpcywgX2YgPSB0aGlzLCBfZyA9IHRoaXMsIF9oID0gdGhpcywgX2ogPSB0aGlzLCBfayA9IHRoaXMsIF9sID0gdGhpcywgX20gPSB0aGlzLCB7XG4gICAgICAgICAgICBvcHRpb25zOiAoeyBzZXQgdmFsdWUoX28pIHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldChfYSwgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgX28sIFwiZlwiKTsgfSB9KS52YWx1ZSxcbiAgICAgICAgICAgIGNvbmZpZ09iamVjdHMsXG4gICAgICAgICAgICBleGl0UHJvY2VzczogKHsgc2V0IHZhbHVlKF9vKSB7IF9fY2xhc3NQcml2YXRlRmllbGRTZXQoX2IsIF9ZYXJnc0luc3RhbmNlX2V4aXRQcm9jZXNzLCBfbywgXCJmXCIpOyB9IH0pLnZhbHVlLFxuICAgICAgICAgICAgZ3JvdXBzOiAoeyBzZXQgdmFsdWUoX28pIHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldChfYywgX1lhcmdzSW5zdGFuY2VfZ3JvdXBzLCBfbywgXCJmXCIpOyB9IH0pLnZhbHVlLFxuICAgICAgICAgICAgb3V0cHV0OiAoeyBzZXQgdmFsdWUoX28pIHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldChfZCwgX1lhcmdzSW5zdGFuY2Vfb3V0cHV0LCBfbywgXCJmXCIpOyB9IH0pLnZhbHVlLFxuICAgICAgICAgICAgZXhpdEVycm9yOiAoeyBzZXQgdmFsdWUoX28pIHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldChfZSwgX1lhcmdzSW5zdGFuY2VfZXhpdEVycm9yLCBfbywgXCJmXCIpOyB9IH0pLnZhbHVlLFxuICAgICAgICAgICAgaGFzT3V0cHV0OiAoeyBzZXQgdmFsdWUoX28pIHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldChfZiwgX1lhcmdzSW5zdGFuY2VfaGFzT3V0cHV0LCBfbywgXCJmXCIpOyB9IH0pLnZhbHVlLFxuICAgICAgICAgICAgcGFyc2VkOiB0aGlzLnBhcnNlZCxcbiAgICAgICAgICAgIHN0cmljdDogKHsgc2V0IHZhbHVlKF9vKSB7IF9fY2xhc3NQcml2YXRlRmllbGRTZXQoX2csIF9ZYXJnc0luc3RhbmNlX3N0cmljdCwgX28sIFwiZlwiKTsgfSB9KS52YWx1ZSxcbiAgICAgICAgICAgIHN0cmljdENvbW1hbmRzOiAoeyBzZXQgdmFsdWUoX28pIHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldChfaCwgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0Q29tbWFuZHMsIF9vLCBcImZcIik7IH0gfSkudmFsdWUsXG4gICAgICAgICAgICBzdHJpY3RPcHRpb25zOiAoeyBzZXQgdmFsdWUoX28pIHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldChfaiwgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0T3B0aW9ucywgX28sIFwiZlwiKTsgfSB9KS52YWx1ZSxcbiAgICAgICAgICAgIGNvbXBsZXRpb25Db21tYW5kOiAoeyBzZXQgdmFsdWUoX28pIHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldChfaywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbkNvbW1hbmQsIF9vLCBcImZcIik7IH0gfSkudmFsdWUsXG4gICAgICAgICAgICBwYXJzZUZuOiAoeyBzZXQgdmFsdWUoX28pIHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldChfbCwgX1lhcmdzSW5zdGFuY2VfcGFyc2VGbiwgX28sIFwiZlwiKTsgfSB9KS52YWx1ZSxcbiAgICAgICAgICAgIHBhcnNlQ29udGV4dDogKHsgc2V0IHZhbHVlKF9vKSB7IF9fY2xhc3NQcml2YXRlRmllbGRTZXQoX20sIF9ZYXJnc0luc3RhbmNlX3BhcnNlQ29udGV4dCwgX28sIFwiZlwiKTsgfSB9KS52YWx1ZSxcbiAgICAgICAgfSA9IGZyb3plbik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmNvbmZpZ09iamVjdHMgPSBjb25maWdPYmplY3RzO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikudW5mcmVlemUoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBcImZcIikudW5mcmVlemUoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLCBcImZcIikudW5mcmVlemUoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9nbG9iYWxNaWRkbGV3YXJlLCBcImZcIikudW5mcmVlemUoKTtcbiAgICB9XG4gICAgW2tWYWxpZGF0ZUFzeW5jXSh2YWxpZGF0aW9uLCBhcmd2KSB7XG4gICAgICAgIHJldHVybiBtYXliZUFzeW5jUmVzdWx0KGFyZ3YsIHJlc3VsdCA9PiB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uKHJlc3VsdCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0SW50ZXJuYWxNZXRob2RzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZ2V0Q29tbWFuZEluc3RhbmNlOiB0aGlzW2tHZXRDb21tYW5kSW5zdGFuY2VdLmJpbmQodGhpcyksXG4gICAgICAgICAgICBnZXRDb250ZXh0OiB0aGlzW2tHZXRDb250ZXh0XS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgZ2V0SGFzT3V0cHV0OiB0aGlzW2tHZXRIYXNPdXRwdXRdLmJpbmQodGhpcyksXG4gICAgICAgICAgICBnZXRMb2dnZXJJbnN0YW5jZTogdGhpc1trR2V0TG9nZ2VySW5zdGFuY2VdLmJpbmQodGhpcyksXG4gICAgICAgICAgICBnZXRQYXJzZUNvbnRleHQ6IHRoaXNba0dldFBhcnNlQ29udGV4dF0uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGdldFBhcnNlckNvbmZpZ3VyYXRpb246IHRoaXNba0dldFBhcnNlckNvbmZpZ3VyYXRpb25dLmJpbmQodGhpcyksXG4gICAgICAgICAgICBnZXRVc2FnZUNvbmZpZ3VyYXRpb246IHRoaXNba0dldFVzYWdlQ29uZmlndXJhdGlvbl0uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGdldFVzYWdlSW5zdGFuY2U6IHRoaXNba0dldFVzYWdlSW5zdGFuY2VdLmJpbmQodGhpcyksXG4gICAgICAgICAgICBnZXRWYWxpZGF0aW9uSW5zdGFuY2U6IHRoaXNba0dldFZhbGlkYXRpb25JbnN0YW5jZV0uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGhhc1BhcnNlQ2FsbGJhY2s6IHRoaXNba0hhc1BhcnNlQ2FsbGJhY2tdLmJpbmQodGhpcyksXG4gICAgICAgICAgICBpc0dsb2JhbENvbnRleHQ6IHRoaXNba0lzR2xvYmFsQ29udGV4dF0uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHBvc3RQcm9jZXNzOiB0aGlzW2tQb3N0UHJvY2Vzc10uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHJlc2V0OiB0aGlzW2tSZXNldF0uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHJ1blZhbGlkYXRpb246IHRoaXNba1J1blZhbGlkYXRpb25dLmJpbmQodGhpcyksXG4gICAgICAgICAgICBydW5ZYXJnc1BhcnNlckFuZEV4ZWN1dGVDb21tYW5kczogdGhpc1trUnVuWWFyZ3NQYXJzZXJBbmRFeGVjdXRlQ29tbWFuZHNdLmJpbmQodGhpcyksXG4gICAgICAgICAgICBzZXRIYXNPdXRwdXQ6IHRoaXNba1NldEhhc091dHB1dF0uYmluZCh0aGlzKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgW2tHZXRDb21tYW5kSW5zdGFuY2VdKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLCBcImZcIik7XG4gICAgfVxuICAgIFtrR2V0Q29udGV4dF0oKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbnRleHQsIFwiZlwiKTtcbiAgICB9XG4gICAgW2tHZXRIYXNPdXRwdXRdKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9oYXNPdXRwdXQsIFwiZlwiKTtcbiAgICB9XG4gICAgW2tHZXRMb2dnZXJJbnN0YW5jZV0oKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2xvZ2dlciwgXCJmXCIpO1xuICAgIH1cbiAgICBba0dldFBhcnNlQ29udGV4dF0oKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BhcnNlQ29udGV4dCwgXCJmXCIpIHx8IHt9O1xuICAgIH1cbiAgICBba0dldFVzYWdlSW5zdGFuY2VdKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpO1xuICAgIH1cbiAgICBba0dldFZhbGlkYXRpb25JbnN0YW5jZV0oKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIFwiZlwiKTtcbiAgICB9XG4gICAgW2tIYXNQYXJzZUNhbGxiYWNrXSgpIHtcbiAgICAgICAgcmV0dXJuICEhX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZUZuLCBcImZcIik7XG4gICAgfVxuICAgIFtrSXNHbG9iYWxDb250ZXh0XSgpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaXNHbG9iYWxDb250ZXh0LCBcImZcIik7XG4gICAgfVxuICAgIFtrUG9zdFByb2Nlc3NdKGFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCwgY2FsbGVkRnJvbUNvbW1hbmQsIHJ1bkdsb2JhbE1pZGRsZXdhcmUpIHtcbiAgICAgICAgaWYgKGNhbGxlZEZyb21Db21tYW5kKVxuICAgICAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgICAgIGlmIChpc1Byb21pc2UoYXJndikpXG4gICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgaWYgKCFwb3B1bGF0ZURvdWJsZURhc2gpIHtcbiAgICAgICAgICAgIGFyZ3YgPSB0aGlzW2tDb3B5RG91YmxlRGFzaF0oYXJndik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyc2VQb3NpdGlvbmFsTnVtYmVycyA9IHRoaXNba0dldFBhcnNlckNvbmZpZ3VyYXRpb25dKClbJ3BhcnNlLXBvc2l0aW9uYWwtbnVtYmVycyddIHx8XG4gICAgICAgICAgICB0aGlzW2tHZXRQYXJzZXJDb25maWd1cmF0aW9uXSgpWydwYXJzZS1wb3NpdGlvbmFsLW51bWJlcnMnXSA9PT0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAocGFyc2VQb3NpdGlvbmFsTnVtYmVycykge1xuICAgICAgICAgICAgYXJndiA9IHRoaXNba1BhcnNlUG9zaXRpb25hbE51bWJlcnNdKGFyZ3YpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChydW5HbG9iYWxNaWRkbGV3YXJlKSB7XG4gICAgICAgICAgICBhcmd2ID0gYXBwbHlNaWRkbGV3YXJlKGFyZ3YsIHRoaXMsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZ2xvYmFsTWlkZGxld2FyZSwgXCJmXCIpLmdldE1pZGRsZXdhcmUoKSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcmd2O1xuICAgIH1cbiAgICBba1Jlc2V0XShhbGlhc2VzID0ge30pIHtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKSB8fCB7fSwgXCJmXCIpO1xuICAgICAgICBjb25zdCB0bXBPcHRpb25zID0ge307XG4gICAgICAgIHRtcE9wdGlvbnMubG9jYWwgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5sb2NhbCB8fCBbXTtcbiAgICAgICAgdG1wT3B0aW9ucy5jb25maWdPYmplY3RzID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuY29uZmlnT2JqZWN0cyB8fCBbXTtcbiAgICAgICAgY29uc3QgbG9jYWxMb29rdXAgPSB7fTtcbiAgICAgICAgdG1wT3B0aW9ucy5sb2NhbC5mb3JFYWNoKGwgPT4ge1xuICAgICAgICAgICAgbG9jYWxMb29rdXBbbF0gPSB0cnVlO1xuICAgICAgICAgICAgKGFsaWFzZXNbbF0gfHwgW10pLmZvckVhY2goYSA9PiB7XG4gICAgICAgICAgICAgICAgbG9jYWxMb29rdXBbYV0gPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuYXNzaWduKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcHJlc2VydmVkR3JvdXBzLCBcImZcIiksIE9iamVjdC5rZXlzKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZ3JvdXBzLCBcImZcIikpLnJlZHVjZSgoYWNjLCBncm91cE5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2dyb3VwcywgXCJmXCIpW2dyb3VwTmFtZV0uZmlsdGVyKGtleSA9PiAhKGtleSBpbiBsb2NhbExvb2t1cCkpO1xuICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGFjY1tncm91cE5hbWVdID0ga2V5cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KSk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZ3JvdXBzLCB7fSwgXCJmXCIpO1xuICAgICAgICBjb25zdCBhcnJheU9wdGlvbnMgPSBbXG4gICAgICAgICAgICAnYXJyYXknLFxuICAgICAgICAgICAgJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgJ3N0cmluZycsXG4gICAgICAgICAgICAnc2tpcFZhbGlkYXRpb24nLFxuICAgICAgICAgICAgJ2NvdW50JyxcbiAgICAgICAgICAgICdub3JtYWxpemUnLFxuICAgICAgICAgICAgJ251bWJlcicsXG4gICAgICAgICAgICAnaGlkZGVuT3B0aW9ucycsXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IG9iamVjdE9wdGlvbnMgPSBbXG4gICAgICAgICAgICAnbmFyZycsXG4gICAgICAgICAgICAna2V5JyxcbiAgICAgICAgICAgICdhbGlhcycsXG4gICAgICAgICAgICAnZGVmYXVsdCcsXG4gICAgICAgICAgICAnZGVmYXVsdERlc2NyaXB0aW9uJyxcbiAgICAgICAgICAgICdjb25maWcnLFxuICAgICAgICAgICAgJ2Nob2ljZXMnLFxuICAgICAgICAgICAgJ2RlbWFuZGVkT3B0aW9ucycsXG4gICAgICAgICAgICAnZGVtYW5kZWRDb21tYW5kcycsXG4gICAgICAgICAgICAnZGVwcmVjYXRlZE9wdGlvbnMnLFxuICAgICAgICBdO1xuICAgICAgICBhcnJheU9wdGlvbnMuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgIHRtcE9wdGlvbnNba10gPSAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIilba10gfHwgW10pLmZpbHRlcigoaykgPT4gIWxvY2FsTG9va3VwW2tdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9iamVjdE9wdGlvbnMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICAgdG1wT3B0aW9uc1trXSA9IG9iakZpbHRlcihfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKVtrXSwgayA9PiAhbG9jYWxMb29rdXBba10pO1xuICAgICAgICB9KTtcbiAgICAgICAgdG1wT3B0aW9ucy5lbnZQcmVmaXggPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5lbnZQcmVmaXg7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgdG1wT3B0aW9ucywgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIilcbiAgICAgICAgICAgID8gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLnJlc2V0KGxvY2FsTG9va3VwKVxuICAgICAgICAgICAgOiBVc2FnZSh0aGlzLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKSksIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIFwiZlwiKVxuICAgICAgICAgICAgPyBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIFwiZlwiKS5yZXNldChsb2NhbExvb2t1cClcbiAgICAgICAgICAgIDogVmFsaWRhdGlvbih0aGlzLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIiksIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpKSwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgXCJmXCIpXG4gICAgICAgICAgICA/IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgXCJmXCIpLnJlc2V0KClcbiAgICAgICAgICAgIDogQ29tbWFuZChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIiksIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiwgXCJmXCIpLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2dsb2JhbE1pZGRsZXdhcmUsIFwiZlwiKSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikpLCBcImZcIik7XG4gICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uLCBcImZcIikpXG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb24sIENvbXBsZXRpb24odGhpcywgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQsIFwiZlwiKSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikpLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZ2xvYmFsTWlkZGxld2FyZSwgXCJmXCIpLnJlc2V0KCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbkNvbW1hbmQsIG51bGwsIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vdXRwdXQsICcnLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZXhpdEVycm9yLCBudWxsLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaGFzT3V0cHV0LCBmYWxzZSwgXCJmXCIpO1xuICAgICAgICB0aGlzLnBhcnNlZCA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgW2tSZWJhc2VdKGJhc2UsIGRpcikge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikucGF0aC5yZWxhdGl2ZShiYXNlLCBkaXIpO1xuICAgIH1cbiAgICBba1J1bllhcmdzUGFyc2VyQW5kRXhlY3V0ZUNvbW1hbmRzXShhcmdzLCBzaG9ydENpcmN1aXQsIGNhbGxlZEZyb21Db21tYW5kLCBjb21tYW5kSW5kZXggPSAwLCBoZWxwT25seSA9IGZhbHNlKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICAgICAgbGV0IHNraXBWYWxpZGF0aW9uID0gISFjYWxsZWRGcm9tQ29tbWFuZCB8fCBoZWxwT25seTtcbiAgICAgICAgYXJncyA9IGFyZ3MgfHwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wcm9jZXNzQXJncywgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5fXyA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnkxOG4uX187XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmNvbmZpZ3VyYXRpb24gPSB0aGlzW2tHZXRQYXJzZXJDb25maWd1cmF0aW9uXSgpO1xuICAgICAgICBjb25zdCBwb3B1bGF0ZURvdWJsZURhc2ggPSAhIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmNvbmZpZ3VyYXRpb25bJ3BvcHVsYXRlLS0nXTtcbiAgICAgICAgY29uc3QgY29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuY29uZmlndXJhdGlvbiwge1xuICAgICAgICAgICAgJ3BvcHVsYXRlLS0nOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikuUGFyc2VyLmRldGFpbGVkKGFyZ3MsIE9iamVjdC5hc3NpZ24oe30sIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLCB7XG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiB7ICdwYXJzZS1wb3NpdGlvbmFsLW51bWJlcnMnOiBmYWxzZSwgLi4uY29uZmlnIH0sXG4gICAgICAgIH0pKTtcbiAgICAgICAgY29uc3QgYXJndiA9IE9iamVjdC5hc3NpZ24ocGFyc2VkLmFyZ3YsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGFyc2VDb250ZXh0LCBcImZcIikpO1xuICAgICAgICBsZXQgYXJndlByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGFsaWFzZXMgPSBwYXJzZWQuYWxpYXNlcztcbiAgICAgICAgbGV0IGhlbHBPcHRTZXQgPSBmYWxzZTtcbiAgICAgICAgbGV0IHZlcnNpb25PcHRTZXQgPSBmYWxzZTtcbiAgICAgICAgT2JqZWN0LmtleXMoYXJndikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9oZWxwT3B0LCBcImZcIikgJiYgYXJndltrZXldKSB7XG4gICAgICAgICAgICAgICAgaGVscE9wdFNldCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgPT09IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmVyc2lvbk9wdCwgXCJmXCIpICYmIGFyZ3Zba2V5XSkge1xuICAgICAgICAgICAgICAgIHZlcnNpb25PcHRTZXQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgYXJndi4kMCA9IHRoaXMuJDA7XG4gICAgICAgIHRoaXMucGFyc2VkID0gcGFyc2VkO1xuICAgICAgICBpZiAoY29tbWFuZEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuY2xlYXJDYWNoZWRIZWxwTWVzc2FnZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzW2tHdWVzc0xvY2FsZV0oKTtcbiAgICAgICAgICAgIGlmIChzaG9ydENpcmN1aXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1trUG9zdFByb2Nlc3NdKGFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCwgISFjYWxsZWRGcm9tQ29tbWFuZCwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaGVscE9wdCwgXCJmXCIpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVscENtZHMgPSBbX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9oZWxwT3B0LCBcImZcIildXG4gICAgICAgICAgICAgICAgICAgIC5jb25jYXQoYWxpYXNlc1tfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hlbHBPcHQsIFwiZlwiKV0gfHwgW10pXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoayA9PiBrLmxlbmd0aCA+IDEpO1xuICAgICAgICAgICAgICAgIGlmIChoZWxwQ21kcy5pbmNsdWRlcygnJyArIGFyZ3YuX1thcmd2Ll8ubGVuZ3RoIC0gMV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3YuXy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgaGVscE9wdFNldCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9pc0dsb2JhbENvbnRleHQsIGZhbHNlLCBcImZcIik7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyS2V5cyA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgXCJmXCIpLmdldENvbW1hbmRzKCk7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0Q29tcGxldGlvbnMgPSAoKF9hID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uLCBcImZcIikpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb21wbGV0aW9uS2V5KVxuICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAoX2IgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb24sIFwiZlwiKSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNvbXBsZXRpb25LZXksXG4gICAgICAgICAgICAgICAgICAgIC4uLigoX2QgPSB0aGlzLmdldEFsaWFzZXMoKVsoX2MgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb24sIFwiZlwiKSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmNvbXBsZXRpb25LZXldKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBbXSksXG4gICAgICAgICAgICAgICAgXS5zb21lKChrZXkpID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd2LCBrZXkpKVxuICAgICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBza2lwUmVjb21tZW5kYXRpb24gPSBoZWxwT3B0U2V0IHx8IHJlcXVlc3RDb21wbGV0aW9ucyB8fCBoZWxwT25seTtcbiAgICAgICAgICAgIGlmIChhcmd2Ll8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZXJLZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmlyc3RVbmtub3duQ29tbWFuZDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGNvbW1hbmRJbmRleCB8fCAwLCBjbWQ7IGFyZ3YuX1tpXSAhPT0gdW5kZWZpbmVkOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9IFN0cmluZyhhcmd2Ll9baV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXJLZXlzLmluY2x1ZGVzKGNtZCkgJiYgY21kICE9PSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb25Db21tYW5kLCBcImZcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbm5lckFyZ3YgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQsIFwiZlwiKS5ydW5Db21tYW5kKGNtZCwgdGhpcywgcGFyc2VkLCBpICsgMSwgaGVscE9ubHksIGhlbHBPcHRTZXQgfHwgdmVyc2lvbk9wdFNldCB8fCBoZWxwT25seSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNba1Bvc3RQcm9jZXNzXShpbm5lckFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCwgISFjYWxsZWRGcm9tQ29tbWFuZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWZpcnN0VW5rbm93bkNvbW1hbmQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQgIT09IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbkNvbW1hbmQsIFwiZlwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0VW5rbm93bkNvbW1hbmQgPSBjbWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQsIFwiZlwiKS5oYXNEZWZhdWx0Q29tbWFuZCgpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3JlY29tbWVuZENvbW1hbmRzLCBcImZcIikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0VW5rbm93bkNvbW1hbmQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICFza2lwUmVjb21tZW5kYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiwgXCJmXCIpLnJlY29tbWVuZENvbW1hbmRzKGZpcnN0VW5rbm93bkNvbW1hbmQsIGhhbmRsZXJLZXlzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uQ29tbWFuZCwgXCJmXCIpICYmXG4gICAgICAgICAgICAgICAgICAgIGFyZ3YuXy5pbmNsdWRlcyhfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb25Db21tYW5kLCBcImZcIikpICYmXG4gICAgICAgICAgICAgICAgICAgICFyZXF1ZXN0Q29tcGxldGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZXhpdFByb2Nlc3MsIFwiZlwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEJsb2NraW5nKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dDb21wbGV0aW9uU2NyaXB0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhpdCgwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLCBcImZcIikuaGFzRGVmYXVsdENvbW1hbmQoKSAmJiAhc2tpcFJlY29tbWVuZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5uZXJBcmd2ID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLCBcImZcIikucnVuQ29tbWFuZChudWxsLCB0aGlzLCBwYXJzZWQsIDAsIGhlbHBPbmx5LCBoZWxwT3B0U2V0IHx8IHZlcnNpb25PcHRTZXQgfHwgaGVscE9ubHkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2tQb3N0UHJvY2Vzc10oaW5uZXJBcmd2LCBwb3B1bGF0ZURvdWJsZURhc2gsICEhY2FsbGVkRnJvbUNvbW1hbmQsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0Q29tcGxldGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9leGl0UHJvY2VzcywgXCJmXCIpKVxuICAgICAgICAgICAgICAgICAgICBzZXRCbG9ja2luZyh0cnVlKTtcbiAgICAgICAgICAgICAgICBhcmdzID0gW10uY29uY2F0KGFyZ3MpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXRpb25BcmdzID0gYXJncy5zbGljZShhcmdzLmluZGV4T2YoYC0tJHtfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb24sIFwiZlwiKS5jb21wbGV0aW9uS2V5fWApICsgMSk7XG4gICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uLCBcImZcIikuZ2V0Q29tcGxldGlvbihjb21wbGV0aW9uQXJncywgKGVyciwgY29tcGxldGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IoZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAoY29tcGxldGlvbnMgfHwgW10pLmZvckVhY2goY29tcGxldGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2xvZ2dlciwgXCJmXCIpLmxvZyhjb21wbGV0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhpdCgwKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1trUG9zdFByb2Nlc3NdKGFyZ3YsICFwb3B1bGF0ZURvdWJsZURhc2gsICEhY2FsbGVkRnJvbUNvbW1hbmQsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9oYXNPdXRwdXQsIFwiZlwiKSkge1xuICAgICAgICAgICAgICAgIGlmIChoZWxwT3B0U2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2V4aXRQcm9jZXNzLCBcImZcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRCbG9ja2luZyh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dIZWxwKG1lc3NhZ2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9sb2dnZXIsIFwiZlwiKS5sb2cobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4aXQoMCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2ZXJzaW9uT3B0U2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2V4aXRQcm9jZXNzLCBcImZcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRCbG9ja2luZyh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuc2hvd1ZlcnNpb24oJ2xvZycpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4aXQoMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFza2lwVmFsaWRhdGlvbiAmJiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5za2lwVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24gPSBPYmplY3Qua2V5cyhhcmd2KS5zb21lKGtleSA9PiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5za2lwVmFsaWRhdGlvbi5pbmRleE9mKGtleSkgPj0gMCAmJiBhcmd2W2tleV0gPT09IHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFza2lwVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZWQuZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IocGFyc2VkLmVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIGlmICghcmVxdWVzdENvbXBsZXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSB0aGlzW2tSdW5WYWxpZGF0aW9uXShhbGlhc2VzLCB7fSwgcGFyc2VkLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWxsZWRGcm9tQ29tbWFuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJndlByb21pc2UgPSBhcHBseU1pZGRsZXdhcmUoYXJndiwgdGhpcywgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9nbG9iYWxNaWRkbGV3YXJlLCBcImZcIikuZ2V0TWlkZGxld2FyZSgpLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhcmd2UHJvbWlzZSA9IHRoaXNba1ZhbGlkYXRlQXN5bmNdKHZhbGlkYXRpb24sIGFyZ3ZQcm9taXNlICE9PSBudWxsICYmIGFyZ3ZQcm9taXNlICE9PSB2b2lkIDAgPyBhcmd2UHJvbWlzZSA6IGFyZ3YpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNQcm9taXNlKGFyZ3ZQcm9taXNlKSAmJiAhY2FsbGVkRnJvbUNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3ZQcm9taXNlID0gYXJndlByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwcGx5TWlkZGxld2FyZShhcmd2LCB0aGlzLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2dsb2JhbE1pZGRsZXdhcmUsIFwiZlwiKS5nZXRNaWRkbGV3YXJlKCksIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBZRXJyb3IpXG4gICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmZhaWwoZXJyLm1lc3NhZ2UsIGVycik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzW2tQb3N0UHJvY2Vzc10oYXJndlByb21pc2UgIT09IG51bGwgJiYgYXJndlByb21pc2UgIT09IHZvaWQgMCA/IGFyZ3ZQcm9taXNlIDogYXJndiwgcG9wdWxhdGVEb3VibGVEYXNoLCAhIWNhbGxlZEZyb21Db21tYW5kLCB0cnVlKTtcbiAgICB9XG4gICAgW2tSdW5WYWxpZGF0aW9uXShhbGlhc2VzLCBwb3NpdGlvbmFsTWFwLCBwYXJzZUVycm9ycywgaXNEZWZhdWx0Q29tbWFuZCkge1xuICAgICAgICBjb25zdCBkZW1hbmRlZE9wdGlvbnMgPSB7IC4uLnRoaXMuZ2V0RGVtYW5kZWRPcHRpb25zKCkgfTtcbiAgICAgICAgcmV0dXJuIChhcmd2KSA9PiB7XG4gICAgICAgICAgICBpZiAocGFyc2VFcnJvcnMpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihwYXJzZUVycm9ycy5tZXNzYWdlKTtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiwgXCJmXCIpLm5vbk9wdGlvbkNvdW50KGFyZ3YpO1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBcImZcIikucmVxdWlyZWRBcmd1bWVudHMoYXJndiwgZGVtYW5kZWRPcHRpb25zKTtcbiAgICAgICAgICAgIGxldCBmYWlsZWRTdHJpY3RDb21tYW5kcyA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0Q29tbWFuZHMsIFwiZlwiKSkge1xuICAgICAgICAgICAgICAgIGZhaWxlZFN0cmljdENvbW1hbmRzID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBcImZcIikudW5rbm93bkNvbW1hbmRzKGFyZ3YpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0LCBcImZcIikgJiYgIWZhaWxlZFN0cmljdENvbW1hbmRzKSB7XG4gICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBcImZcIikudW5rbm93bkFyZ3VtZW50cyhhcmd2LCBhbGlhc2VzLCBwb3NpdGlvbmFsTWFwLCAhIWlzRGVmYXVsdENvbW1hbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3RPcHRpb25zLCBcImZcIikpIHtcbiAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIFwiZlwiKS51bmtub3duQXJndW1lbnRzKGFyZ3YsIGFsaWFzZXMsIHt9LCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBcImZcIikubGltaXRlZENob2ljZXMoYXJndik7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIFwiZlwiKS5pbXBsaWNhdGlvbnMoYXJndik7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIFwiZlwiKS5jb25mbGljdGluZyhhcmd2KTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgW2tTZXRIYXNPdXRwdXRdKCkge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hhc091dHB1dCwgdHJ1ZSwgXCJmXCIpO1xuICAgIH1cbiAgICBba1RyYWNrTWFudWFsbHlTZXRLZXlzXShrZXlzKSB7XG4gICAgICAgIGlmICh0eXBlb2Yga2V5cyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmtleVtrZXlzXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2Yga2V5cykge1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmtleVtrXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gaXNZYXJnc0luc3RhbmNlKHkpIHtcbiAgICByZXR1cm4gISF5ICYmIHR5cGVvZiB5LmdldEludGVybmFsTWV0aG9kcyA9PT0gJ2Z1bmN0aW9uJztcbn1cbiIsImltcG9ydCB7IG9iamVjdEtleXMgfSBmcm9tICcuLi90eXBpbmdzL2NvbW1vbi10eXBlcy5qcyc7XG5leHBvcnQgZnVuY3Rpb24gb2JqRmlsdGVyKG9yaWdpbmFsID0ge30sIGZpbHRlciA9ICgpID0+IHRydWUpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcbiAgICBvYmplY3RLZXlzKG9yaWdpbmFsKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGlmIChmaWx0ZXIoa2V5LCBvcmlnaW5hbFtrZXldKSkge1xuICAgICAgICAgICAgb2JqW2tleV0gPSBvcmlnaW5hbFtrZXldO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG9iajtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNldEJsb2NraW5nKGJsb2NraW5nKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgcmV0dXJuO1xuICAgIFtwcm9jZXNzLnN0ZG91dCwgcHJvY2Vzcy5zdGRlcnJdLmZvckVhY2goX3N0cmVhbSA9PiB7XG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IF9zdHJlYW07XG4gICAgICAgIGlmIChzdHJlYW0uX2hhbmRsZSAmJlxuICAgICAgICAgICAgc3RyZWFtLmlzVFRZICYmXG4gICAgICAgICAgICB0eXBlb2Ygc3RyZWFtLl9oYW5kbGUuc2V0QmxvY2tpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0cmVhbS5faGFuZGxlLnNldEJsb2NraW5nKGJsb2NraW5nKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuIiwiaW1wb3J0IHsgb2JqRmlsdGVyIH0gZnJvbSAnLi91dGlscy9vYmotZmlsdGVyLmpzJztcbmltcG9ydCB7IFlFcnJvciB9IGZyb20gJy4veWVycm9yLmpzJztcbmltcG9ydCBzZXRCbG9ja2luZyBmcm9tICcuL3V0aWxzL3NldC1ibG9ja2luZy5qcyc7XG5mdW5jdGlvbiBpc0Jvb2xlYW4oZmFpbCkge1xuICAgIHJldHVybiB0eXBlb2YgZmFpbCA9PT0gJ2Jvb2xlYW4nO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHVzYWdlKHlhcmdzLCBzaGltKSB7XG4gICAgY29uc3QgX18gPSBzaGltLnkxOG4uX187XG4gICAgY29uc3Qgc2VsZiA9IHt9O1xuICAgIGNvbnN0IGZhaWxzID0gW107XG4gICAgc2VsZi5mYWlsRm4gPSBmdW5jdGlvbiBmYWlsRm4oZikge1xuICAgICAgICBmYWlscy5wdXNoKGYpO1xuICAgIH07XG4gICAgbGV0IGZhaWxNZXNzYWdlID0gbnVsbDtcbiAgICBsZXQgZ2xvYmFsRmFpbE1lc3NhZ2UgPSBudWxsO1xuICAgIGxldCBzaG93SGVscE9uRmFpbCA9IHRydWU7XG4gICAgc2VsZi5zaG93SGVscE9uRmFpbCA9IGZ1bmN0aW9uIHNob3dIZWxwT25GYWlsRm4oYXJnMSA9IHRydWUsIGFyZzIpIHtcbiAgICAgICAgY29uc3QgW2VuYWJsZWQsIG1lc3NhZ2VdID0gdHlwZW9mIGFyZzEgPT09ICdzdHJpbmcnID8gW3RydWUsIGFyZzFdIDogW2FyZzEsIGFyZzJdO1xuICAgICAgICBpZiAoeWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuaXNHbG9iYWxDb250ZXh0KCkpIHtcbiAgICAgICAgICAgIGdsb2JhbEZhaWxNZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICBmYWlsTWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHNob3dIZWxwT25GYWlsID0gZW5hYmxlZDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBsZXQgZmFpbHVyZU91dHB1dCA9IGZhbHNlO1xuICAgIHNlbGYuZmFpbCA9IGZ1bmN0aW9uIGZhaWwobXNnLCBlcnIpIHtcbiAgICAgICAgY29uc3QgbG9nZ2VyID0geWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0TG9nZ2VySW5zdGFuY2UoKTtcbiAgICAgICAgaWYgKGZhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGZhaWxzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmFpbCA9IGZhaWxzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChpc0Jvb2xlYW4oZmFpbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobXNnKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IobXNnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZhaWwobXNnLCBlcnIsIHNlbGYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh5YXJncy5nZXRFeGl0UHJvY2VzcygpKVxuICAgICAgICAgICAgICAgIHNldEJsb2NraW5nKHRydWUpO1xuICAgICAgICAgICAgaWYgKCFmYWlsdXJlT3V0cHV0KSB7XG4gICAgICAgICAgICAgICAgZmFpbHVyZU91dHB1dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKHNob3dIZWxwT25GYWlsKSB7XG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLnNob3dIZWxwKCdlcnJvcicpO1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1zZyB8fCBlcnIpXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihtc2cgfHwgZXJyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBnbG9iYWxPckNvbW1hbmRGYWlsTWVzc2FnZSA9IGZhaWxNZXNzYWdlIHx8IGdsb2JhbEZhaWxNZXNzYWdlO1xuICAgICAgICAgICAgICAgIGlmIChnbG9iYWxPckNvbW1hbmRGYWlsTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobXNnIHx8IGVycilcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignJyk7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihnbG9iYWxPckNvbW1hbmRGYWlsTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXJyID0gZXJyIHx8IG5ldyBZRXJyb3IobXNnKTtcbiAgICAgICAgICAgIGlmICh5YXJncy5nZXRFeGl0UHJvY2VzcygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlhcmdzLmV4aXQoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5oYXNQYXJzZUNhbGxiYWNrKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geWFyZ3MuZXhpdCgxLCBlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBsZXQgdXNhZ2VzID0gW107XG4gICAgbGV0IHVzYWdlRGlzYWJsZWQgPSBmYWxzZTtcbiAgICBzZWxmLnVzYWdlID0gKG1zZywgZGVzY3JpcHRpb24pID0+IHtcbiAgICAgICAgaWYgKG1zZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdXNhZ2VEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB1c2FnZXMgPSBbXTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgICAgIHVzYWdlRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdXNhZ2VzLnB1c2goW21zZywgZGVzY3JpcHRpb24gfHwgJyddKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldFVzYWdlID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdXNhZ2VzO1xuICAgIH07XG4gICAgc2VsZi5nZXRVc2FnZURpc2FibGVkID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdXNhZ2VEaXNhYmxlZDtcbiAgICB9O1xuICAgIHNlbGYuZ2V0UG9zaXRpb25hbEdyb3VwTmFtZSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIF9fKCdQb3NpdGlvbmFsczonKTtcbiAgICB9O1xuICAgIGxldCBleGFtcGxlcyA9IFtdO1xuICAgIHNlbGYuZXhhbXBsZSA9IChjbWQsIGRlc2NyaXB0aW9uKSA9PiB7XG4gICAgICAgIGV4YW1wbGVzLnB1c2goW2NtZCwgZGVzY3JpcHRpb24gfHwgJyddKTtcbiAgICB9O1xuICAgIGxldCBjb21tYW5kcyA9IFtdO1xuICAgIHNlbGYuY29tbWFuZCA9IGZ1bmN0aW9uIGNvbW1hbmQoY21kLCBkZXNjcmlwdGlvbiwgaXNEZWZhdWx0LCBhbGlhc2VzLCBkZXByZWNhdGVkID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGlzRGVmYXVsdCkge1xuICAgICAgICAgICAgY29tbWFuZHMgPSBjb21tYW5kcy5tYXAoY21kQXJyYXkgPT4ge1xuICAgICAgICAgICAgICAgIGNtZEFycmF5WzJdID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNtZEFycmF5O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29tbWFuZHMucHVzaChbY21kLCBkZXNjcmlwdGlvbiB8fCAnJywgaXNEZWZhdWx0LCBhbGlhc2VzLCBkZXByZWNhdGVkXSk7XG4gICAgfTtcbiAgICBzZWxmLmdldENvbW1hbmRzID0gKCkgPT4gY29tbWFuZHM7XG4gICAgbGV0IGRlc2NyaXB0aW9ucyA9IHt9O1xuICAgIHNlbGYuZGVzY3JpYmUgPSBmdW5jdGlvbiBkZXNjcmliZShrZXlPcktleXMsIGRlc2MpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5T3JLZXlzKSkge1xuICAgICAgICAgICAga2V5T3JLZXlzLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgc2VsZi5kZXNjcmliZShrLCBkZXNjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBrZXlPcktleXMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhrZXlPcktleXMpLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgc2VsZi5kZXNjcmliZShrLCBrZXlPcktleXNba10pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbnNba2V5T3JLZXlzXSA9IGRlc2M7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYuZ2V0RGVzY3JpcHRpb25zID0gKCkgPT4gZGVzY3JpcHRpb25zO1xuICAgIGxldCBlcGlsb2dzID0gW107XG4gICAgc2VsZi5lcGlsb2cgPSBtc2cgPT4ge1xuICAgICAgICBlcGlsb2dzLnB1c2gobXNnKTtcbiAgICB9O1xuICAgIGxldCB3cmFwU2V0ID0gZmFsc2U7XG4gICAgbGV0IHdyYXA7XG4gICAgc2VsZi53cmFwID0gY29scyA9PiB7XG4gICAgICAgIHdyYXBTZXQgPSB0cnVlO1xuICAgICAgICB3cmFwID0gY29scztcbiAgICB9O1xuICAgIHNlbGYuZ2V0V3JhcCA9ICgpID0+IHtcbiAgICAgICAgaWYgKHNoaW0uZ2V0RW52KCdZQVJHU19ESVNBQkxFX1dSQVAnKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF3cmFwU2V0KSB7XG4gICAgICAgICAgICB3cmFwID0gd2luZG93V2lkdGgoKTtcbiAgICAgICAgICAgIHdyYXBTZXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3cmFwO1xuICAgIH07XG4gICAgY29uc3QgZGVmZXJZMThuTG9va3VwUHJlZml4ID0gJ19feWFyZ3NTdHJpbmdfXzonO1xuICAgIHNlbGYuZGVmZXJZMThuTG9va3VwID0gc3RyID0+IGRlZmVyWTE4bkxvb2t1cFByZWZpeCArIHN0cjtcbiAgICBzZWxmLmhlbHAgPSBmdW5jdGlvbiBoZWxwKCkge1xuICAgICAgICBpZiAoY2FjaGVkSGVscE1lc3NhZ2UpXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkSGVscE1lc3NhZ2U7XG4gICAgICAgIG5vcm1hbGl6ZUFsaWFzZXMoKTtcbiAgICAgICAgY29uc3QgYmFzZSQwID0geWFyZ3MuY3VzdG9tU2NyaXB0TmFtZVxuICAgICAgICAgICAgPyB5YXJncy4kMFxuICAgICAgICAgICAgOiBzaGltLnBhdGguYmFzZW5hbWUoeWFyZ3MuJDApO1xuICAgICAgICBjb25zdCBkZW1hbmRlZE9wdGlvbnMgPSB5YXJncy5nZXREZW1hbmRlZE9wdGlvbnMoKTtcbiAgICAgICAgY29uc3QgZGVtYW5kZWRDb21tYW5kcyA9IHlhcmdzLmdldERlbWFuZGVkQ29tbWFuZHMoKTtcbiAgICAgICAgY29uc3QgZGVwcmVjYXRlZE9wdGlvbnMgPSB5YXJncy5nZXREZXByZWNhdGVkT3B0aW9ucygpO1xuICAgICAgICBjb25zdCBncm91cHMgPSB5YXJncy5nZXRHcm91cHMoKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgbGV0IGtleXMgPSBbXTtcbiAgICAgICAga2V5cyA9IGtleXMuY29uY2F0KE9iamVjdC5rZXlzKGRlc2NyaXB0aW9ucykpO1xuICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoT2JqZWN0LmtleXMoZGVtYW5kZWRPcHRpb25zKSk7XG4gICAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhkZW1hbmRlZENvbW1hbmRzKSk7XG4gICAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhvcHRpb25zLmRlZmF1bHQpKTtcbiAgICAgICAga2V5cyA9IGtleXMuZmlsdGVyKGZpbHRlckhpZGRlbk9wdGlvbnMpO1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXMoa2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5ICE9PSAnXycpXG4gICAgICAgICAgICAgICAgYWNjW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pKTtcbiAgICAgICAgY29uc3QgdGhlV3JhcCA9IHNlbGYuZ2V0V3JhcCgpO1xuICAgICAgICBjb25zdCB1aSA9IHNoaW0uY2xpdWkoe1xuICAgICAgICAgICAgd2lkdGg6IHRoZVdyYXAsXG4gICAgICAgICAgICB3cmFwOiAhIXRoZVdyYXAsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXVzYWdlRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGlmICh1c2FnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdXNhZ2VzLmZvckVhY2godXNhZ2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoeyB0ZXh0OiBgJHt1c2FnZVswXS5yZXBsYWNlKC9cXCQwL2csIGJhc2UkMCl9YCB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVzYWdlWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1aS5kaXYoeyB0ZXh0OiBgJHt1c2FnZVsxXX1gLCBwYWRkaW5nOiBbMSwgMCwgMCwgMF0gfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB1aS5kaXYoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbW1hbmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGxldCB1ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoZGVtYW5kZWRDb21tYW5kcy5fKSB7XG4gICAgICAgICAgICAgICAgICAgIHUgPSBgJHtiYXNlJDB9IDwke19fKCdjb21tYW5kJyl9PlxcbmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1ID0gYCR7YmFzZSQwfSBbJHtfXygnY29tbWFuZCcpfV1cXG5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB1aS5kaXYoYCR7dX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tbWFuZHMubGVuZ3RoID4gMSB8fCAoY29tbWFuZHMubGVuZ3RoID09PSAxICYmICFjb21tYW5kc1swXVsyXSkpIHtcbiAgICAgICAgICAgIHVpLmRpdihfXygnQ29tbWFuZHM6JykpO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldENvbnRleHQoKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudENvbW1hbmRzID0gY29udGV4dC5jb21tYW5kcy5sZW5ndGhcbiAgICAgICAgICAgICAgICA/IGAke2NvbnRleHQuY29tbWFuZHMuam9pbignICcpfSBgXG4gICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgIGlmICh5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRQYXJzZXJDb25maWd1cmF0aW9uKClbJ3NvcnQtY29tbWFuZHMnXSA9PT1cbiAgICAgICAgICAgICAgICB0cnVlKSB7XG4gICAgICAgICAgICAgICAgY29tbWFuZHMgPSBjb21tYW5kcy5zb3J0KChhLCBiKSA9PiBhWzBdLmxvY2FsZUNvbXBhcmUoYlswXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJlZml4ID0gYmFzZSQwID8gYCR7YmFzZSQwfSBgIDogJyc7XG4gICAgICAgICAgICBjb21tYW5kcy5mb3JFYWNoKGNvbW1hbmQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRTdHJpbmcgPSBgJHtwcmVmaXh9JHtwYXJlbnRDb21tYW5kc30ke2NvbW1hbmRbMF0ucmVwbGFjZSgvXlxcJDAgPy8sICcnKX1gO1xuICAgICAgICAgICAgICAgIHVpLnNwYW4oe1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBjb21tYW5kU3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBbMCwgMiwgMCwgMl0sXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBtYXhXaWR0aChjb21tYW5kcywgdGhlV3JhcCwgYCR7YmFzZSQwfSR7cGFyZW50Q29tbWFuZHN9YCkgKyA0LFxuICAgICAgICAgICAgICAgIH0sIHsgdGV4dDogY29tbWFuZFsxXSB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBoaW50cyA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChjb21tYW5kWzJdKVxuICAgICAgICAgICAgICAgICAgICBoaW50cy5wdXNoKGBbJHtfXygnZGVmYXVsdCcpfV1gKTtcbiAgICAgICAgICAgICAgICBpZiAoY29tbWFuZFszXSAmJiBjb21tYW5kWzNdLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBoaW50cy5wdXNoKGBbJHtfXygnYWxpYXNlczonKX0gJHtjb21tYW5kWzNdLmpvaW4oJywgJyl9XWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY29tbWFuZFs0XSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmRbNF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoaW50cy5wdXNoKGBbJHtfXygnZGVwcmVjYXRlZDogJXMnLCBjb21tYW5kWzRdKX1dYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoaW50cy5wdXNoKGBbJHtfXygnZGVwcmVjYXRlZCcpfV1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaGludHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdih7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBoaW50cy5qb2luKCcgJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBbMCwgMCwgMCwgMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbjogJ3JpZ2h0JyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHVpLmRpdigpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFsaWFzS2V5cyA9IChPYmplY3Qua2V5cyhvcHRpb25zLmFsaWFzKSB8fCBbXSkuY29uY2F0KE9iamVjdC5rZXlzKHlhcmdzLnBhcnNlZC5uZXdBbGlhc2VzKSB8fCBbXSk7XG4gICAgICAgIGtleXMgPSBrZXlzLmZpbHRlcihrZXkgPT4gIXlhcmdzLnBhcnNlZC5uZXdBbGlhc2VzW2tleV0gJiZcbiAgICAgICAgICAgIGFsaWFzS2V5cy5ldmVyeShhbGlhcyA9PiAob3B0aW9ucy5hbGlhc1thbGlhc10gfHwgW10pLmluZGV4T2Yoa2V5KSA9PT0gLTEpKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdEdyb3VwID0gX18oJ09wdGlvbnM6Jyk7XG4gICAgICAgIGlmICghZ3JvdXBzW2RlZmF1bHRHcm91cF0pXG4gICAgICAgICAgICBncm91cHNbZGVmYXVsdEdyb3VwXSA9IFtdO1xuICAgICAgICBhZGRVbmdyb3VwZWRLZXlzKGtleXMsIG9wdGlvbnMuYWxpYXMsIGdyb3VwcywgZGVmYXVsdEdyb3VwKTtcbiAgICAgICAgY29uc3QgaXNMb25nU3dpdGNoID0gKHN3KSA9PiAvXi0tLy50ZXN0KGdldFRleHQoc3cpKTtcbiAgICAgICAgY29uc3QgZGlzcGxheWVkR3JvdXBzID0gT2JqZWN0LmtleXMoZ3JvdXBzKVxuICAgICAgICAgICAgLmZpbHRlcihncm91cE5hbWUgPT4gZ3JvdXBzW2dyb3VwTmFtZV0ubGVuZ3RoID4gMClcbiAgICAgICAgICAgIC5tYXAoZ3JvdXBOYW1lID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRLZXlzID0gZ3JvdXBzW2dyb3VwTmFtZV1cbiAgICAgICAgICAgICAgICAuZmlsdGVyKGZpbHRlckhpZGRlbk9wdGlvbnMpXG4gICAgICAgICAgICAgICAgLm1hcChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhbGlhc0tleXMuaW5jbHVkZXMoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgYWxpYXNLZXk7IChhbGlhc0tleSA9IGFsaWFzS2V5c1tpXSkgIT09IHVuZGVmaW5lZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgob3B0aW9ucy5hbGlhc1thbGlhc0tleV0gfHwgW10pLmluY2x1ZGVzKGtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxpYXNLZXk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB7IGdyb3VwTmFtZSwgbm9ybWFsaXplZEtleXMgfTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgbm9ybWFsaXplZEtleXMgfSkgPT4gbm9ybWFsaXplZEtleXMubGVuZ3RoID4gMClcbiAgICAgICAgICAgIC5tYXAoKHsgZ3JvdXBOYW1lLCBub3JtYWxpemVkS2V5cyB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzd2l0Y2hlcyA9IG5vcm1hbGl6ZWRLZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBhY2Nba2V5XSA9IFtrZXldXG4gICAgICAgICAgICAgICAgICAgIC5jb25jYXQob3B0aW9ucy5hbGlhc1trZXldIHx8IFtdKVxuICAgICAgICAgICAgICAgICAgICAubWFwKHN3ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwTmFtZSA9PT0gc2VsZi5nZXRQb3NpdGlvbmFsR3JvdXBOYW1lKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3c7XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgoL15bMC05XSQvLnRlc3Qoc3cpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBvcHRpb25zLmJvb2xlYW4uaW5jbHVkZXMoa2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICctJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICctLSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN3Lmxlbmd0aCA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnLS0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJy0nKSArIHN3KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5zb3J0KChzdzEsIHN3MikgPT4gaXNMb25nU3dpdGNoKHN3MSkgPT09IGlzTG9uZ1N3aXRjaChzdzIpXG4gICAgICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgICAgICA6IGlzTG9uZ1N3aXRjaChzdzEpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgICAgICAgICAgIDogLTEpXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCcsICcpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgICAgICByZXR1cm4geyBncm91cE5hbWUsIG5vcm1hbGl6ZWRLZXlzLCBzd2l0Y2hlcyB9O1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc2hvcnRTd2l0Y2hlc1VzZWQgPSBkaXNwbGF5ZWRHcm91cHNcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgZ3JvdXBOYW1lIH0pID0+IGdyb3VwTmFtZSAhPT0gc2VsZi5nZXRQb3NpdGlvbmFsR3JvdXBOYW1lKCkpXG4gICAgICAgICAgICAuc29tZSgoeyBub3JtYWxpemVkS2V5cywgc3dpdGNoZXMgfSkgPT4gIW5vcm1hbGl6ZWRLZXlzLmV2ZXJ5KGtleSA9PiBpc0xvbmdTd2l0Y2goc3dpdGNoZXNba2V5XSkpKTtcbiAgICAgICAgaWYgKHNob3J0U3dpdGNoZXNVc2VkKSB7XG4gICAgICAgICAgICBkaXNwbGF5ZWRHcm91cHNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKCh7IGdyb3VwTmFtZSB9KSA9PiBncm91cE5hbWUgIT09IHNlbGYuZ2V0UG9zaXRpb25hbEdyb3VwTmFtZSgpKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKCh7IG5vcm1hbGl6ZWRLZXlzLCBzd2l0Y2hlcyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZEtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNMb25nU3dpdGNoKHN3aXRjaGVzW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hlc1trZXldID0gYWRkSW5kZW50YXRpb24oc3dpdGNoZXNba2V5XSwgJy14LCAnLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGRpc3BsYXllZEdyb3Vwcy5mb3JFYWNoKCh7IGdyb3VwTmFtZSwgbm9ybWFsaXplZEtleXMsIHN3aXRjaGVzIH0pID0+IHtcbiAgICAgICAgICAgIHVpLmRpdihncm91cE5hbWUpO1xuICAgICAgICAgICAgbm9ybWFsaXplZEtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtzd2l0Y2ggPSBzd2l0Y2hlc1trZXldO1xuICAgICAgICAgICAgICAgIGxldCBkZXNjID0gZGVzY3JpcHRpb25zW2tleV0gfHwgJyc7XG4gICAgICAgICAgICAgICAgbGV0IHR5cGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChkZXNjLmluY2x1ZGVzKGRlZmVyWTE4bkxvb2t1cFByZWZpeCkpXG4gICAgICAgICAgICAgICAgICAgIGRlc2MgPSBfXyhkZXNjLnN1YnN0cmluZyhkZWZlclkxOG5Mb29rdXBQcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYm9vbGVhbi5pbmNsdWRlcyhrZXkpKVxuICAgICAgICAgICAgICAgICAgICB0eXBlID0gYFske19fKCdib29sZWFuJyl9XWA7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuY291bnQuaW5jbHVkZXMoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnY291bnQnKX1dYDtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zdHJpbmcuaW5jbHVkZXMoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnc3RyaW5nJyl9XWA7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubm9ybWFsaXplLmluY2x1ZGVzKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ3N0cmluZycpfV1gO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFycmF5LmluY2x1ZGVzKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ2FycmF5Jyl9XWA7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubnVtYmVyLmluY2x1ZGVzKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ251bWJlcicpfV1gO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcHJlY2F0ZWRFeHRyYSA9IChkZXByZWNhdGVkKSA9PiB0eXBlb2YgZGVwcmVjYXRlZCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBgWyR7X18oJ2RlcHJlY2F0ZWQ6ICVzJywgZGVwcmVjYXRlZCl9XWBcbiAgICAgICAgICAgICAgICAgICAgOiBgWyR7X18oJ2RlcHJlY2F0ZWQnKX1dYDtcbiAgICAgICAgICAgICAgICBjb25zdCBleHRyYSA9IFtcbiAgICAgICAgICAgICAgICAgICAga2V5IGluIGRlcHJlY2F0ZWRPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGRlcHJlY2F0ZWRFeHRyYShkZXByZWNhdGVkT3B0aW9uc1trZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBrZXkgaW4gZGVtYW5kZWRPcHRpb25zID8gYFske19fKCdyZXF1aXJlZCcpfV1gIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jaG9pY2VzICYmIG9wdGlvbnMuY2hvaWNlc1trZXldXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGBbJHtfXygnY2hvaWNlczonKX0gJHtzZWxmLnN0cmluZ2lmaWVkVmFsdWVzKG9wdGlvbnMuY2hvaWNlc1trZXldKX1dYFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0U3RyaW5nKG9wdGlvbnMuZGVmYXVsdFtrZXldLCBvcHRpb25zLmRlZmF1bHREZXNjcmlwdGlvbltrZXldKSxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICB1aS5zcGFuKHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogZ2V0VGV4dChrc3dpdGNoKSxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogWzAsIDIsIDAsIDIgKyBnZXRJbmRlbnRhdGlvbihrc3dpdGNoKV0sXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBtYXhXaWR0aChzd2l0Y2hlcywgdGhlV3JhcCkgKyA0LFxuICAgICAgICAgICAgICAgIH0sIGRlc2MpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZEhpZGVPcHRpb25FeHRyYXMgPSB5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRVc2FnZUNvbmZpZ3VyYXRpb24oKVsnaGlkZS10eXBlcyddID09PVxuICAgICAgICAgICAgICAgICAgICB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChleHRyYSAmJiAhc2hvdWxkSGlkZU9wdGlvbkV4dHJhcylcbiAgICAgICAgICAgICAgICAgICAgdWkuZGl2KHsgdGV4dDogZXh0cmEsIHBhZGRpbmc6IFswLCAwLCAwLCAyXSwgYWxpZ246ICdyaWdodCcgfSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZXhhbXBsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB1aS5kaXYoX18oJ0V4YW1wbGVzOicpKTtcbiAgICAgICAgICAgIGV4YW1wbGVzLmZvckVhY2goZXhhbXBsZSA9PiB7XG4gICAgICAgICAgICAgICAgZXhhbXBsZVswXSA9IGV4YW1wbGVbMF0ucmVwbGFjZSgvXFwkMC9nLCBiYXNlJDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBleGFtcGxlcy5mb3JFYWNoKGV4YW1wbGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChleGFtcGxlWzFdID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZXhhbXBsZVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAyLCAwLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZXhhbXBsZVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAyLCAwLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBtYXhXaWR0aChleGFtcGxlcywgdGhlV3JhcCkgKyA0LFxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBleGFtcGxlWzFdLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHVpLmRpdigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcGlsb2dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGUgPSBlcGlsb2dzXG4gICAgICAgICAgICAgICAgLm1hcChlcGlsb2cgPT4gZXBpbG9nLnJlcGxhY2UoL1xcJDAvZywgYmFzZSQwKSlcbiAgICAgICAgICAgICAgICAuam9pbignXFxuJyk7XG4gICAgICAgICAgICB1aS5kaXYoYCR7ZX1cXG5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdWkudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMqJC8sICcnKTtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIG1heFdpZHRoKHRhYmxlLCB0aGVXcmFwLCBtb2RpZmllcikge1xuICAgICAgICBsZXQgd2lkdGggPSAwO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGFibGUpKSB7XG4gICAgICAgICAgICB0YWJsZSA9IE9iamVjdC52YWx1ZXModGFibGUpLm1hcCh2ID0+IFt2XSk7XG4gICAgICAgIH1cbiAgICAgICAgdGFibGUuZm9yRWFjaCh2ID0+IHtcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5tYXgoc2hpbS5zdHJpbmdXaWR0aChtb2RpZmllciA/IGAke21vZGlmaWVyfSAke2dldFRleHQodlswXSl9YCA6IGdldFRleHQodlswXSkpICsgZ2V0SW5kZW50YXRpb24odlswXSksIHdpZHRoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGVXcmFwKVxuICAgICAgICAgICAgd2lkdGggPSBNYXRoLm1pbih3aWR0aCwgcGFyc2VJbnQoKHRoZVdyYXAgKiAwLjUpLnRvU3RyaW5nKCksIDEwKSk7XG4gICAgICAgIHJldHVybiB3aWR0aDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm9ybWFsaXplQWxpYXNlcygpIHtcbiAgICAgICAgY29uc3QgZGVtYW5kZWRPcHRpb25zID0geWFyZ3MuZ2V0RGVtYW5kZWRPcHRpb25zKCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB5YXJncy5nZXRPcHRpb25zKCk7XG4gICAgICAgIChPYmplY3Qua2V5cyhvcHRpb25zLmFsaWFzKSB8fCBbXSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgb3B0aW9ucy5hbGlhc1trZXldLmZvckVhY2goYWxpYXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbnNbYWxpYXNdKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmRlc2NyaWJlKGtleSwgZGVzY3JpcHRpb25zW2FsaWFzXSk7XG4gICAgICAgICAgICAgICAgaWYgKGFsaWFzIGluIGRlbWFuZGVkT3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3MuZGVtYW5kT3B0aW9uKGtleSwgZGVtYW5kZWRPcHRpb25zW2FsaWFzXSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYm9vbGVhbi5pbmNsdWRlcyhhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLmJvb2xlYW4oa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5jb3VudC5pbmNsdWRlcyhhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLmNvdW50KGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RyaW5nLmluY2x1ZGVzKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3Muc3RyaW5nKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubm9ybWFsaXplLmluY2x1ZGVzKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3Mubm9ybWFsaXplKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXJyYXkuaW5jbHVkZXMoYWxpYXMpKVxuICAgICAgICAgICAgICAgICAgICB5YXJncy5hcnJheShrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm51bWJlci5pbmNsdWRlcyhhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLm51bWJlcihrZXkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBsZXQgY2FjaGVkSGVscE1lc3NhZ2U7XG4gICAgc2VsZi5jYWNoZUhlbHBNZXNzYWdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjYWNoZWRIZWxwTWVzc2FnZSA9IHRoaXMuaGVscCgpO1xuICAgIH07XG4gICAgc2VsZi5jbGVhckNhY2hlZEhlbHBNZXNzYWdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjYWNoZWRIZWxwTWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIHNlbGYuaGFzQ2FjaGVkSGVscE1lc3NhZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAhIWNhY2hlZEhlbHBNZXNzYWdlO1xuICAgIH07XG4gICAgZnVuY3Rpb24gYWRkVW5ncm91cGVkS2V5cyhrZXlzLCBhbGlhc2VzLCBncm91cHMsIGRlZmF1bHRHcm91cCkge1xuICAgICAgICBsZXQgZ3JvdXBlZEtleXMgPSBbXTtcbiAgICAgICAgbGV0IHRvQ2hlY2sgPSBudWxsO1xuICAgICAgICBPYmplY3Qua2V5cyhncm91cHMpLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICAgICAgZ3JvdXBlZEtleXMgPSBncm91cGVkS2V5cy5jb25jYXQoZ3JvdXBzW2dyb3VwXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHRvQ2hlY2sgPSBba2V5XS5jb25jYXQoYWxpYXNlc1trZXldKTtcbiAgICAgICAgICAgIGlmICghdG9DaGVjay5zb21lKGsgPT4gZ3JvdXBlZEtleXMuaW5kZXhPZihrKSAhPT0gLTEpKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBzW2RlZmF1bHRHcm91cF0ucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGdyb3VwZWRLZXlzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaWx0ZXJIaWRkZW5PcHRpb25zKGtleSkge1xuICAgICAgICByZXR1cm4gKHlhcmdzLmdldE9wdGlvbnMoKS5oaWRkZW5PcHRpb25zLmluZGV4T2Yoa2V5KSA8IDAgfHxcbiAgICAgICAgICAgIHlhcmdzLnBhcnNlZC5hcmd2W3lhcmdzLmdldE9wdGlvbnMoKS5zaG93SGlkZGVuT3B0XSk7XG4gICAgfVxuICAgIHNlbGYuc2hvd0hlbHAgPSAobGV2ZWwpID0+IHtcbiAgICAgICAgY29uc3QgbG9nZ2VyID0geWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0TG9nZ2VySW5zdGFuY2UoKTtcbiAgICAgICAgaWYgKCFsZXZlbClcbiAgICAgICAgICAgIGxldmVsID0gJ2Vycm9yJztcbiAgICAgICAgY29uc3QgZW1pdCA9IHR5cGVvZiBsZXZlbCA9PT0gJ2Z1bmN0aW9uJyA/IGxldmVsIDogbG9nZ2VyW2xldmVsXTtcbiAgICAgICAgZW1pdChzZWxmLmhlbHAoKSk7XG4gICAgfTtcbiAgICBzZWxmLmZ1bmN0aW9uRGVzY3JpcHRpb24gPSBmbiA9PiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gZm4ubmFtZVxuICAgICAgICAgICAgPyBzaGltLlBhcnNlci5kZWNhbWVsaXplKGZuLm5hbWUsICctJylcbiAgICAgICAgICAgIDogX18oJ2dlbmVyYXRlZC12YWx1ZScpO1xuICAgICAgICByZXR1cm4gWycoJywgZGVzY3JpcHRpb24sICcpJ10uam9pbignJyk7XG4gICAgfTtcbiAgICBzZWxmLnN0cmluZ2lmaWVkVmFsdWVzID0gZnVuY3Rpb24gc3RyaW5naWZpZWRWYWx1ZXModmFsdWVzLCBzZXBhcmF0b3IpIHtcbiAgICAgICAgbGV0IHN0cmluZyA9ICcnO1xuICAgICAgICBjb25zdCBzZXAgPSBzZXBhcmF0b3IgfHwgJywgJztcbiAgICAgICAgY29uc3QgYXJyYXkgPSBbXS5jb25jYXQodmFsdWVzKTtcbiAgICAgICAgaWYgKCF2YWx1ZXMgfHwgIWFycmF5Lmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICAgIGFycmF5LmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgICAgaWYgKHN0cmluZy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IHNlcDtcbiAgICAgICAgICAgIHN0cmluZyArPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgIH07XG4gICAgZnVuY3Rpb24gZGVmYXVsdFN0cmluZyh2YWx1ZSwgZGVmYXVsdERlc2NyaXB0aW9uKSB7XG4gICAgICAgIGxldCBzdHJpbmcgPSBgWyR7X18oJ2RlZmF1bHQ6Jyl9IGA7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICFkZWZhdWx0RGVzY3JpcHRpb24pXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKGRlZmF1bHREZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgc3RyaW5nICs9IGRlZmF1bHREZXNjcmlwdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IGBcIiR7dmFsdWV9XCJgO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgICAgICAgICAgICBzdHJpbmcgKz0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBzdHJpbmcgKz0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke3N0cmluZ31dYDtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2luZG93V2lkdGgoKSB7XG4gICAgICAgIGNvbnN0IG1heFdpZHRoID0gODA7XG4gICAgICAgIGlmIChzaGltLnByb2Nlc3Muc3RkQ29sdW1ucykge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKG1heFdpZHRoLCBzaGltLnByb2Nlc3Muc3RkQ29sdW1ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbWF4V2lkdGg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IHZlcnNpb24gPSBudWxsO1xuICAgIHNlbGYudmVyc2lvbiA9IHZlciA9PiB7XG4gICAgICAgIHZlcnNpb24gPSB2ZXI7XG4gICAgfTtcbiAgICBzZWxmLnNob3dWZXJzaW9uID0gbGV2ZWwgPT4ge1xuICAgICAgICBjb25zdCBsb2dnZXIgPSB5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRMb2dnZXJJbnN0YW5jZSgpO1xuICAgICAgICBpZiAoIWxldmVsKVxuICAgICAgICAgICAgbGV2ZWwgPSAnZXJyb3InO1xuICAgICAgICBjb25zdCBlbWl0ID0gdHlwZW9mIGxldmVsID09PSAnZnVuY3Rpb24nID8gbGV2ZWwgOiBsb2dnZXJbbGV2ZWxdO1xuICAgICAgICBlbWl0KHZlcnNpb24pO1xuICAgIH07XG4gICAgc2VsZi5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KGxvY2FsTG9va3VwKSB7XG4gICAgICAgIGZhaWxNZXNzYWdlID0gbnVsbDtcbiAgICAgICAgZmFpbHVyZU91dHB1dCA9IGZhbHNlO1xuICAgICAgICB1c2FnZXMgPSBbXTtcbiAgICAgICAgdXNhZ2VEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICBlcGlsb2dzID0gW107XG4gICAgICAgIGV4YW1wbGVzID0gW107XG4gICAgICAgIGNvbW1hbmRzID0gW107XG4gICAgICAgIGRlc2NyaXB0aW9ucyA9IG9iakZpbHRlcihkZXNjcmlwdGlvbnMsIGsgPT4gIWxvY2FsTG9va3VwW2tdKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBjb25zdCBmcm96ZW5zID0gW107XG4gICAgc2VsZi5mcmVlemUgPSBmdW5jdGlvbiBmcmVlemUoKSB7XG4gICAgICAgIGZyb3plbnMucHVzaCh7XG4gICAgICAgICAgICBmYWlsTWVzc2FnZSxcbiAgICAgICAgICAgIGZhaWx1cmVPdXRwdXQsXG4gICAgICAgICAgICB1c2FnZXMsXG4gICAgICAgICAgICB1c2FnZURpc2FibGVkLFxuICAgICAgICAgICAgZXBpbG9ncyxcbiAgICAgICAgICAgIGV4YW1wbGVzLFxuICAgICAgICAgICAgY29tbWFuZHMsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbnMsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgc2VsZi51bmZyZWV6ZSA9IGZ1bmN0aW9uIHVuZnJlZXplKGRlZmF1bHRDb21tYW5kID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgZnJvemVuID0gZnJvemVucy5wb3AoKTtcbiAgICAgICAgaWYgKCFmcm96ZW4pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChkZWZhdWx0Q29tbWFuZCkge1xuICAgICAgICAgICAgZGVzY3JpcHRpb25zID0geyAuLi5mcm96ZW4uZGVzY3JpcHRpb25zLCAuLi5kZXNjcmlwdGlvbnMgfTtcbiAgICAgICAgICAgIGNvbW1hbmRzID0gWy4uLmZyb3plbi5jb21tYW5kcywgLi4uY29tbWFuZHNdO1xuICAgICAgICAgICAgdXNhZ2VzID0gWy4uLmZyb3plbi51c2FnZXMsIC4uLnVzYWdlc107XG4gICAgICAgICAgICBleGFtcGxlcyA9IFsuLi5mcm96ZW4uZXhhbXBsZXMsIC4uLmV4YW1wbGVzXTtcbiAgICAgICAgICAgIGVwaWxvZ3MgPSBbLi4uZnJvemVuLmVwaWxvZ3MsIC4uLmVwaWxvZ3NdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICBmYWlsTWVzc2FnZSxcbiAgICAgICAgICAgICAgICBmYWlsdXJlT3V0cHV0LFxuICAgICAgICAgICAgICAgIHVzYWdlcyxcbiAgICAgICAgICAgICAgICB1c2FnZURpc2FibGVkLFxuICAgICAgICAgICAgICAgIGVwaWxvZ3MsXG4gICAgICAgICAgICAgICAgZXhhbXBsZXMsXG4gICAgICAgICAgICAgICAgY29tbWFuZHMsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb25zLFxuICAgICAgICAgICAgfSA9IGZyb3plbik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gaXNJbmRlbnRlZFRleHQodGV4dCkge1xuICAgIHJldHVybiB0eXBlb2YgdGV4dCA9PT0gJ29iamVjdCc7XG59XG5mdW5jdGlvbiBhZGRJbmRlbnRhdGlvbih0ZXh0LCBpbmRlbnQpIHtcbiAgICByZXR1cm4gaXNJbmRlbnRlZFRleHQodGV4dClcbiAgICAgICAgPyB7IHRleHQ6IHRleHQudGV4dCwgaW5kZW50YXRpb246IHRleHQuaW5kZW50YXRpb24gKyBpbmRlbnQgfVxuICAgICAgICA6IHsgdGV4dCwgaW5kZW50YXRpb246IGluZGVudCB9O1xufVxuZnVuY3Rpb24gZ2V0SW5kZW50YXRpb24odGV4dCkge1xuICAgIHJldHVybiBpc0luZGVudGVkVGV4dCh0ZXh0KSA/IHRleHQuaW5kZW50YXRpb24gOiAwO1xufVxuZnVuY3Rpb24gZ2V0VGV4dCh0ZXh0KSB7XG4gICAgcmV0dXJuIGlzSW5kZW50ZWRUZXh0KHRleHQpID8gdGV4dC50ZXh0IDogdGV4dDtcbn1cbiIsImltcG9ydCB7IGlzQ29tbWFuZEJ1aWxkZXJDYWxsYmFjayB9IGZyb20gJy4vY29tbWFuZC5qcyc7XG5pbXBvcnQgeyBhc3NlcnROb3RTdHJpY3RFcXVhbCB9IGZyb20gJy4vdHlwaW5ncy9jb21tb24tdHlwZXMuanMnO1xuaW1wb3J0ICogYXMgdGVtcGxhdGVzIGZyb20gJy4vY29tcGxldGlvbi10ZW1wbGF0ZXMuanMnO1xuaW1wb3J0IHsgaXNQcm9taXNlIH0gZnJvbSAnLi91dGlscy9pcy1wcm9taXNlLmpzJztcbmltcG9ydCB7IHBhcnNlQ29tbWFuZCB9IGZyb20gJy4vcGFyc2UtY29tbWFuZC5qcyc7XG5leHBvcnQgY2xhc3MgQ29tcGxldGlvbiB7XG4gICAgY29uc3RydWN0b3IoeWFyZ3MsIHVzYWdlLCBjb21tYW5kLCBzaGltKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICB0aGlzLnlhcmdzID0geWFyZ3M7XG4gICAgICAgIHRoaXMudXNhZ2UgPSB1c2FnZTtcbiAgICAgICAgdGhpcy5jb21tYW5kID0gY29tbWFuZDtcbiAgICAgICAgdGhpcy5zaGltID0gc2hpbTtcbiAgICAgICAgdGhpcy5jb21wbGV0aW9uS2V5ID0gJ2dldC15YXJncy1jb21wbGV0aW9ucyc7XG4gICAgICAgIHRoaXMuYWxpYXNlcyA9IG51bGw7XG4gICAgICAgIHRoaXMuY3VzdG9tQ29tcGxldGlvbkZ1bmN0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5pbmRleEFmdGVyTGFzdFJlc2V0ID0gMDtcbiAgICAgICAgdGhpcy56c2hTaGVsbCA9XG4gICAgICAgICAgICAoX2MgPSAoKChfYSA9IHRoaXMuc2hpbS5nZXRFbnYoJ1NIRUxMJykpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pbmNsdWRlcygnenNoJykpIHx8XG4gICAgICAgICAgICAgICAgKChfYiA9IHRoaXMuc2hpbS5nZXRFbnYoJ1pTSF9OQU1FJykpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5pbmNsdWRlcygnenNoJykpKSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogZmFsc2U7XG4gICAgfVxuICAgIGRlZmF1bHRDb21wbGV0aW9uKGFyZ3MsIGFyZ3YsIGN1cnJlbnQsIGRvbmUpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLmNvbW1hbmQuZ2V0Q29tbWFuZEhhbmRsZXJzKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGFyZ3MubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgICAgaWYgKGhhbmRsZXJzW2FyZ3NbaV1dICYmIGhhbmRsZXJzW2FyZ3NbaV1dLmJ1aWxkZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBidWlsZGVyID0gaGFuZGxlcnNbYXJnc1tpXV0uYnVpbGRlcjtcbiAgICAgICAgICAgICAgICBpZiAoaXNDb21tYW5kQnVpbGRlckNhbGxiYWNrKGJ1aWxkZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhBZnRlckxhc3RSZXNldCA9IGkgKyAxO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB5ID0gdGhpcy55YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICBidWlsZGVyKHksIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geS5hcmd2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wbGV0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLmNvbW1hbmRDb21wbGV0aW9ucyhjb21wbGV0aW9ucywgYXJncywgY3VycmVudCk7XG4gICAgICAgIHRoaXMub3B0aW9uQ29tcGxldGlvbnMoY29tcGxldGlvbnMsIGFyZ3MsIGFyZ3YsIGN1cnJlbnQpO1xuICAgICAgICB0aGlzLmNob2ljZXNGcm9tT3B0aW9uc0NvbXBsZXRpb25zKGNvbXBsZXRpb25zLCBhcmdzLCBhcmd2LCBjdXJyZW50KTtcbiAgICAgICAgdGhpcy5jaG9pY2VzRnJvbVBvc2l0aW9uYWxzQ29tcGxldGlvbnMoY29tcGxldGlvbnMsIGFyZ3MsIGFyZ3YsIGN1cnJlbnQpO1xuICAgICAgICBkb25lKG51bGwsIGNvbXBsZXRpb25zKTtcbiAgICB9XG4gICAgY29tbWFuZENvbXBsZXRpb25zKGNvbXBsZXRpb25zLCBhcmdzLCBjdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IHBhcmVudENvbW1hbmRzID0gdGhpcy55YXJnc1xuICAgICAgICAgICAgLmdldEludGVybmFsTWV0aG9kcygpXG4gICAgICAgICAgICAuZ2V0Q29udGV4dCgpLmNvbW1hbmRzO1xuICAgICAgICBpZiAoIWN1cnJlbnQubWF0Y2goL14tLykgJiZcbiAgICAgICAgICAgIHBhcmVudENvbW1hbmRzW3BhcmVudENvbW1hbmRzLmxlbmd0aCAtIDFdICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAhdGhpcy5wcmV2aW91c0FyZ0hhc0Nob2ljZXMoYXJncykpIHtcbiAgICAgICAgICAgIHRoaXMudXNhZ2UuZ2V0Q29tbWFuZHMoKS5mb3JFYWNoKHVzYWdlQ29tbWFuZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBwYXJzZUNvbW1hbmQodXNhZ2VDb21tYW5kWzBdKS5jbWQ7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MuaW5kZXhPZihjb21tYW5kTmFtZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy56c2hTaGVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbnMucHVzaChjb21tYW5kTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXNjID0gdXNhZ2VDb21tYW5kWzFdIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbnMucHVzaChjb21tYW5kTmFtZS5yZXBsYWNlKC86L2csICdcXFxcOicpICsgJzonICsgZGVzYyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvcHRpb25Db21wbGV0aW9ucyhjb21wbGV0aW9ucywgYXJncywgYXJndiwgY3VycmVudCkge1xuICAgICAgICBpZiAoKGN1cnJlbnQubWF0Y2goL14tLykgfHwgKGN1cnJlbnQgPT09ICcnICYmIGNvbXBsZXRpb25zLmxlbmd0aCA9PT0gMCkpICYmXG4gICAgICAgICAgICAhdGhpcy5wcmV2aW91c0FyZ0hhc0Nob2ljZXMoYXJncykpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uYWxLZXlzID0gdGhpcy55YXJncy5nZXRHcm91cHMoKVt0aGlzLnVzYWdlLmdldFBvc2l0aW9uYWxHcm91cE5hbWUoKV0gfHwgW107XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhvcHRpb25zLmtleSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5lZ2FibGUgPSAhIW9wdGlvbnMuY29uZmlndXJhdGlvblsnYm9vbGVhbi1uZWdhdGlvbiddICYmXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYm9vbGVhbi5pbmNsdWRlcyhrZXkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzUG9zaXRpb25hbEtleSA9IHBvc2l0aW9uYWxLZXlzLmluY2x1ZGVzKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1Bvc2l0aW9uYWxLZXkgJiZcbiAgICAgICAgICAgICAgICAgICAgIW9wdGlvbnMuaGlkZGVuT3B0aW9ucy5pbmNsdWRlcyhrZXkpICYmXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLmFyZ3NDb250YWluS2V5KGFyZ3MsIGtleSwgbmVnYWJsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZU9wdGlvbktleShrZXksIGNvbXBsZXRpb25zLCBjdXJyZW50LCBuZWdhYmxlICYmICEhb3B0aW9ucy5kZWZhdWx0W2tleV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNob2ljZXNGcm9tT3B0aW9uc0NvbXBsZXRpb25zKGNvbXBsZXRpb25zLCBhcmdzLCBhcmd2LCBjdXJyZW50KSB7XG4gICAgICAgIGlmICh0aGlzLnByZXZpb3VzQXJnSGFzQ2hvaWNlcyhhcmdzKSkge1xuICAgICAgICAgICAgY29uc3QgY2hvaWNlcyA9IHRoaXMuZ2V0UHJldmlvdXNBcmdDaG9pY2VzKGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGNob2ljZXMgJiYgY2hvaWNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29tcGxldGlvbnMucHVzaCguLi5jaG9pY2VzLm1hcChjID0+IGMucmVwbGFjZSgvOi9nLCAnXFxcXDonKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNob2ljZXNGcm9tUG9zaXRpb25hbHNDb21wbGV0aW9ucyhjb21wbGV0aW9ucywgYXJncywgYXJndiwgY3VycmVudCkge1xuICAgICAgICBpZiAoY3VycmVudCA9PT0gJycgJiZcbiAgICAgICAgICAgIGNvbXBsZXRpb25zLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNBcmdIYXNDaG9pY2VzKGFyZ3MpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9zaXRpb25hbEtleXMgPSB0aGlzLnlhcmdzLmdldEdyb3VwcygpW3RoaXMudXNhZ2UuZ2V0UG9zaXRpb25hbEdyb3VwTmFtZSgpXSB8fCBbXTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gTWF0aC5tYXgodGhpcy5pbmRleEFmdGVyTGFzdFJlc2V0LCB0aGlzLnlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldENvbnRleHQoKS5jb21tYW5kcy5sZW5ndGggK1xuICAgICAgICAgICAgMSk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uYWxLZXkgPSBwb3NpdGlvbmFsS2V5c1thcmd2Ll8ubGVuZ3RoIC0gb2Zmc2V0IC0gMV07XG4gICAgICAgIGlmICghcG9zaXRpb25hbEtleSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNob2ljZXMgPSB0aGlzLnlhcmdzLmdldE9wdGlvbnMoKS5jaG9pY2VzW3Bvc2l0aW9uYWxLZXldIHx8IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGNob2ljZSBvZiBjaG9pY2VzKSB7XG4gICAgICAgICAgICBpZiAoY2hvaWNlLnN0YXJ0c1dpdGgoY3VycmVudCkpIHtcbiAgICAgICAgICAgICAgICBjb21wbGV0aW9ucy5wdXNoKGNob2ljZS5yZXBsYWNlKC86L2csICdcXFxcOicpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRQcmV2aW91c0FyZ0Nob2ljZXMoYXJncykge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCAxKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBsZXQgcHJldmlvdXNBcmcgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgIGxldCBmaWx0ZXIgPSAnJztcbiAgICAgICAgaWYgKCFwcmV2aW91c0FyZy5zdGFydHNXaXRoKCctJykgJiYgYXJncy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBmaWx0ZXIgPSBwcmV2aW91c0FyZztcbiAgICAgICAgICAgIHByZXZpb3VzQXJnID0gYXJnc1thcmdzLmxlbmd0aCAtIDJdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcHJldmlvdXNBcmcuc3RhcnRzV2l0aCgnLScpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBwcmV2aW91c0FyZ0tleSA9IHByZXZpb3VzQXJnLnJlcGxhY2UoL14tKy8sICcnKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMueWFyZ3MuZ2V0T3B0aW9ucygpO1xuICAgICAgICBjb25zdCBwb3NzaWJsZUFsaWFzZXMgPSBbXG4gICAgICAgICAgICBwcmV2aW91c0FyZ0tleSxcbiAgICAgICAgICAgIC4uLih0aGlzLnlhcmdzLmdldEFsaWFzZXMoKVtwcmV2aW91c0FyZ0tleV0gfHwgW10pLFxuICAgICAgICBdO1xuICAgICAgICBsZXQgY2hvaWNlcztcbiAgICAgICAgZm9yIChjb25zdCBwb3NzaWJsZUFsaWFzIG9mIHBvc3NpYmxlQWxpYXNlcykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLmtleSwgcG9zc2libGVBbGlhcykgJiZcbiAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KG9wdGlvbnMuY2hvaWNlc1twb3NzaWJsZUFsaWFzXSkpIHtcbiAgICAgICAgICAgICAgICBjaG9pY2VzID0gb3B0aW9ucy5jaG9pY2VzW3Bvc3NpYmxlQWxpYXNdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjaG9pY2VzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hvaWNlcy5maWx0ZXIoY2hvaWNlID0+ICFmaWx0ZXIgfHwgY2hvaWNlLnN0YXJ0c1dpdGgoZmlsdGVyKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJldmlvdXNBcmdIYXNDaG9pY2VzKGFyZ3MpIHtcbiAgICAgICAgY29uc3QgY2hvaWNlcyA9IHRoaXMuZ2V0UHJldmlvdXNBcmdDaG9pY2VzKGFyZ3MpO1xuICAgICAgICByZXR1cm4gY2hvaWNlcyAhPT0gdW5kZWZpbmVkICYmIGNob2ljZXMubGVuZ3RoID4gMDtcbiAgICB9XG4gICAgYXJnc0NvbnRhaW5LZXkoYXJncywga2V5LCBuZWdhYmxlKSB7XG4gICAgICAgIGNvbnN0IGFyZ3NDb250YWlucyA9IChzKSA9PiBhcmdzLmluZGV4T2YoKC9eW14wLTldJC8udGVzdChzKSA/ICctJyA6ICctLScpICsgcykgIT09IC0xO1xuICAgICAgICBpZiAoYXJnc0NvbnRhaW5zKGtleSkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKG5lZ2FibGUgJiYgYXJnc0NvbnRhaW5zKGBuby0ke2tleX1gKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodGhpcy5hbGlhc2VzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFsaWFzIG9mIHRoaXMuYWxpYXNlc1trZXldKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3NDb250YWlucyhhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29tcGxldGVPcHRpb25LZXkoa2V5LCBjb21wbGV0aW9ucywgY3VycmVudCwgbmVnYWJsZSkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgICAgIGxldCBrZXlXaXRoRGVzYyA9IGtleTtcbiAgICAgICAgaWYgKHRoaXMuenNoU2hlbGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlc2NzID0gdGhpcy51c2FnZS5nZXREZXNjcmlwdGlvbnMoKTtcbiAgICAgICAgICAgIGNvbnN0IGFsaWFzS2V5ID0gKF9iID0gKF9hID0gdGhpcyA9PT0gbnVsbCB8fCB0aGlzID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aGlzLmFsaWFzZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVtrZXldKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZmluZChhbGlhcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVzYyA9IGRlc2NzW2FsaWFzXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGRlc2MgPT09ICdzdHJpbmcnICYmIGRlc2MubGVuZ3RoID4gMDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZGVzY0Zyb21BbGlhcyA9IGFsaWFzS2V5ID8gZGVzY3NbYWxpYXNLZXldIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgZGVzYyA9IChfZCA9IChfYyA9IGRlc2NzW2tleV0pICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IGRlc2NGcm9tQWxpYXMpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6ICcnO1xuICAgICAgICAgICAga2V5V2l0aERlc2MgPSBgJHtrZXkucmVwbGFjZSgvOi9nLCAnXFxcXDonKX06JHtkZXNjXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJ19feWFyZ3NTdHJpbmdfXzonLCAnJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvKFxcclxcbnxcXG58XFxyKS9nbSwgJyAnKX1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0c0J5VHdvRGFzaGVzID0gKHMpID0+IC9eLS0vLnRlc3Qocyk7XG4gICAgICAgIGNvbnN0IGlzU2hvcnRPcHRpb24gPSAocykgPT4gL15bXjAtOV0kLy50ZXN0KHMpO1xuICAgICAgICBjb25zdCBkYXNoZXMgPSAhc3RhcnRzQnlUd29EYXNoZXMoY3VycmVudCkgJiYgaXNTaG9ydE9wdGlvbihrZXkpID8gJy0nIDogJy0tJztcbiAgICAgICAgY29tcGxldGlvbnMucHVzaChkYXNoZXMgKyBrZXlXaXRoRGVzYyk7XG4gICAgICAgIGlmIChuZWdhYmxlKSB7XG4gICAgICAgICAgICBjb21wbGV0aW9ucy5wdXNoKGRhc2hlcyArICduby0nICsga2V5V2l0aERlc2MpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGN1c3RvbUNvbXBsZXRpb24oYXJncywgYXJndiwgY3VycmVudCwgZG9uZSkge1xuICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbCh0aGlzLmN1c3RvbUNvbXBsZXRpb25GdW5jdGlvbiwgbnVsbCwgdGhpcy5zaGltKTtcbiAgICAgICAgaWYgKGlzU3luY0NvbXBsZXRpb25GdW5jdGlvbih0aGlzLmN1c3RvbUNvbXBsZXRpb25GdW5jdGlvbikpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY3VzdG9tQ29tcGxldGlvbkZ1bmN0aW9uKGN1cnJlbnQsIGFyZ3YpO1xuICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgICAgICAudGhlbihsaXN0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGltLnByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShudWxsLCBsaXN0KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpbS5wcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZXJyLCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkb25lKG51bGwsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNGYWxsYmFja0NvbXBsZXRpb25GdW5jdGlvbih0aGlzLmN1c3RvbUNvbXBsZXRpb25GdW5jdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1c3RvbUNvbXBsZXRpb25GdW5jdGlvbihjdXJyZW50LCBhcmd2LCAob25Db21wbGV0ZWQgPSBkb25lKSA9PiB0aGlzLmRlZmF1bHRDb21wbGV0aW9uKGFyZ3MsIGFyZ3YsIGN1cnJlbnQsIG9uQ29tcGxldGVkKSwgY29tcGxldGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUobnVsbCwgY29tcGxldGlvbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21Db21wbGV0aW9uRnVuY3Rpb24oY3VycmVudCwgYXJndiwgY29tcGxldGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUobnVsbCwgY29tcGxldGlvbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0Q29tcGxldGlvbihhcmdzLCBkb25lKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBhcmdzLmxlbmd0aCA/IGFyZ3NbYXJncy5sZW5ndGggLSAxXSA6ICcnO1xuICAgICAgICBjb25zdCBhcmd2ID0gdGhpcy55YXJncy5wYXJzZShhcmdzLCB0cnVlKTtcbiAgICAgICAgY29uc3QgY29tcGxldGlvbkZ1bmN0aW9uID0gdGhpcy5jdXN0b21Db21wbGV0aW9uRnVuY3Rpb25cbiAgICAgICAgICAgID8gKGFyZ3YpID0+IHRoaXMuY3VzdG9tQ29tcGxldGlvbihhcmdzLCBhcmd2LCBjdXJyZW50LCBkb25lKVxuICAgICAgICAgICAgOiAoYXJndikgPT4gdGhpcy5kZWZhdWx0Q29tcGxldGlvbihhcmdzLCBhcmd2LCBjdXJyZW50LCBkb25lKTtcbiAgICAgICAgcmV0dXJuIGlzUHJvbWlzZShhcmd2KVxuICAgICAgICAgICAgPyBhcmd2LnRoZW4oY29tcGxldGlvbkZ1bmN0aW9uKVxuICAgICAgICAgICAgOiBjb21wbGV0aW9uRnVuY3Rpb24oYXJndik7XG4gICAgfVxuICAgIGdlbmVyYXRlQ29tcGxldGlvblNjcmlwdCgkMCwgY21kKSB7XG4gICAgICAgIGxldCBzY3JpcHQgPSB0aGlzLnpzaFNoZWxsXG4gICAgICAgICAgICA/IHRlbXBsYXRlcy5jb21wbGV0aW9uWnNoVGVtcGxhdGVcbiAgICAgICAgICAgIDogdGVtcGxhdGVzLmNvbXBsZXRpb25TaFRlbXBsYXRlO1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5zaGltLnBhdGguYmFzZW5hbWUoJDApO1xuICAgICAgICBpZiAoJDAubWF0Y2goL1xcLmpzJC8pKVxuICAgICAgICAgICAgJDAgPSBgLi8keyQwfWA7XG4gICAgICAgIHNjcmlwdCA9IHNjcmlwdC5yZXBsYWNlKC97e2FwcF9uYW1lfX0vZywgbmFtZSk7XG4gICAgICAgIHNjcmlwdCA9IHNjcmlwdC5yZXBsYWNlKC97e2NvbXBsZXRpb25fY29tbWFuZH19L2csIGNtZCk7XG4gICAgICAgIHJldHVybiBzY3JpcHQucmVwbGFjZSgve3thcHBfcGF0aH19L2csICQwKTtcbiAgICB9XG4gICAgcmVnaXN0ZXJGdW5jdGlvbihmbikge1xuICAgICAgICB0aGlzLmN1c3RvbUNvbXBsZXRpb25GdW5jdGlvbiA9IGZuO1xuICAgIH1cbiAgICBzZXRQYXJzZWQocGFyc2VkKSB7XG4gICAgICAgIHRoaXMuYWxpYXNlcyA9IHBhcnNlZC5hbGlhc2VzO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBjb21wbGV0aW9uKHlhcmdzLCB1c2FnZSwgY29tbWFuZCwgc2hpbSkge1xuICAgIHJldHVybiBuZXcgQ29tcGxldGlvbih5YXJncywgdXNhZ2UsIGNvbW1hbmQsIHNoaW0pO1xufVxuZnVuY3Rpb24gaXNTeW5jQ29tcGxldGlvbkZ1bmN0aW9uKGNvbXBsZXRpb25GdW5jdGlvbikge1xuICAgIHJldHVybiBjb21wbGV0aW9uRnVuY3Rpb24ubGVuZ3RoIDwgMztcbn1cbmZ1bmN0aW9uIGlzRmFsbGJhY2tDb21wbGV0aW9uRnVuY3Rpb24oY29tcGxldGlvbkZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIGNvbXBsZXRpb25GdW5jdGlvbi5sZW5ndGggPiAzO1xufVxuIiwiZXhwb3J0IGNvbnN0IGNvbXBsZXRpb25TaFRlbXBsYXRlID0gYCMjIy1iZWdpbi17e2FwcF9uYW1lfX0tY29tcGxldGlvbnMtIyMjXG4jXG4jIHlhcmdzIGNvbW1hbmQgY29tcGxldGlvbiBzY3JpcHRcbiNcbiMgSW5zdGFsbGF0aW9uOiB7e2FwcF9wYXRofX0ge3tjb21wbGV0aW9uX2NvbW1hbmR9fSA+PiB+Ly5iYXNocmNcbiMgICAgb3Ige3thcHBfcGF0aH19IHt7Y29tcGxldGlvbl9jb21tYW5kfX0gPj4gfi8uYmFzaF9wcm9maWxlIG9uIE9TWC5cbiNcbl97e2FwcF9uYW1lfX1feWFyZ3NfY29tcGxldGlvbnMoKVxue1xuICAgIGxvY2FsIGN1cl93b3JkIGFyZ3MgdHlwZV9saXN0XG5cbiAgICBjdXJfd29yZD1cIlxcJHtDT01QX1dPUkRTW0NPTVBfQ1dPUkRdfVwiXG4gICAgYXJncz0oXCJcXCR7Q09NUF9XT1JEU1tAXX1cIilcblxuICAgICMgYXNrIHlhcmdzIHRvIGdlbmVyYXRlIGNvbXBsZXRpb25zLlxuICAgICMgc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80MDk0NDE5NS83MDgwMDM2IGZvciB0aGUgc3BhY2VzLWhhbmRsaW5nIGF3a1xuICAgIG1hcGZpbGUgLXQgdHlwZV9saXN0IDwgPCh7e2FwcF9wYXRofX0gLS1nZXQteWFyZ3MtY29tcGxldGlvbnMgXCJcXCR7YXJnc1tAXX1cIilcbiAgICBtYXBmaWxlIC10IENPTVBSRVBMWSA8IDwoY29tcGdlbiAtVyBcIiQoIHByaW50ZiAnJXEgJyBcIlxcJHt0eXBlX2xpc3RbQF19XCIgKVwiIC0tIFwiXFwke2N1cl93b3JkfVwiIHxcbiAgICAgICAgYXdrICcvIC8geyBwcmludCBcIlxcXFxcIlwiJDBcIlxcXFxcIlwiIH0gL15bXiBdKyQvIHsgcHJpbnQgJDAgfScpXG5cbiAgICAjIGlmIG5vIG1hdGNoIHdhcyBmb3VuZCwgZmFsbCBiYWNrIHRvIGZpbGVuYW1lIGNvbXBsZXRpb25cbiAgICBpZiBbIFxcJHsjQ09NUFJFUExZW0BdfSAtZXEgMCBdOyB0aGVuXG4gICAgICBDT01QUkVQTFk9KClcbiAgICBmaVxuXG4gICAgcmV0dXJuIDBcbn1cbmNvbXBsZXRlIC1vIGJhc2hkZWZhdWx0IC1vIGRlZmF1bHQgLUYgX3t7YXBwX25hbWV9fV95YXJnc19jb21wbGV0aW9ucyB7e2FwcF9uYW1lfX1cbiMjIy1lbmQte3thcHBfbmFtZX19LWNvbXBsZXRpb25zLSMjI1xuYDtcbmV4cG9ydCBjb25zdCBjb21wbGV0aW9uWnNoVGVtcGxhdGUgPSBgI2NvbXBkZWYge3thcHBfbmFtZX19XG4jIyMtYmVnaW4te3thcHBfbmFtZX19LWNvbXBsZXRpb25zLSMjI1xuI1xuIyB5YXJncyBjb21tYW5kIGNvbXBsZXRpb24gc2NyaXB0XG4jXG4jIEluc3RhbGxhdGlvbjoge3thcHBfcGF0aH19IHt7Y29tcGxldGlvbl9jb21tYW5kfX0gPj4gfi8uenNocmNcbiMgICAgb3Ige3thcHBfcGF0aH19IHt7Y29tcGxldGlvbl9jb21tYW5kfX0gPj4gfi8uenByb2ZpbGUgb24gT1NYLlxuI1xuX3t7YXBwX25hbWV9fV95YXJnc19jb21wbGV0aW9ucygpXG57XG4gIGxvY2FsIHJlcGx5XG4gIGxvY2FsIHNpPSRJRlNcbiAgSUZTPSQnXFxuJyByZXBseT0oJChDT01QX0NXT1JEPVwiJCgoQ1VSUkVOVC0xKSlcIiBDT01QX0xJTkU9XCIkQlVGRkVSXCIgQ09NUF9QT0lOVD1cIiRDVVJTT1JcIiB7e2FwcF9wYXRofX0gLS1nZXQteWFyZ3MtY29tcGxldGlvbnMgXCJcXCR7d29yZHNbQF19XCIpKVxuICBJRlM9JHNpXG4gIGlmIFtbIFxcJHsjcmVwbHl9IC1ndCAwIF1dOyB0aGVuXG4gICAgX2Rlc2NyaWJlICd2YWx1ZXMnIHJlcGx5XG4gIGVsc2VcbiAgICBfZGVmYXVsdFxuICBmaVxufVxuaWYgW1sgXCInXFwke3pzaF9ldmFsX2NvbnRleHRbLTFdfVwiID09IFwibG9hZGF1dG9mdW5jXCIgXV07IHRoZW5cbiAgX3t7YXBwX25hbWV9fV95YXJnc19jb21wbGV0aW9ucyBcIiRAXCJcbmVsc2VcbiAgY29tcGRlZiBfe3thcHBfbmFtZX19X3lhcmdzX2NvbXBsZXRpb25zIHt7YXBwX25hbWV9fVxuZmlcbiMjIy1lbmQte3thcHBfbmFtZX19LWNvbXBsZXRpb25zLSMjI1xuYDtcbiIsImV4cG9ydCBmdW5jdGlvbiBsZXZlbnNodGVpbihhLCBiKSB7XG4gICAgaWYgKGEubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm4gYi5sZW5ndGg7XG4gICAgaWYgKGIubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm4gYS5sZW5ndGg7XG4gICAgY29uc3QgbWF0cml4ID0gW107XG4gICAgbGV0IGk7XG4gICAgZm9yIChpID0gMDsgaSA8PSBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1hdHJpeFtpXSA9IFtpXTtcbiAgICB9XG4gICAgbGV0IGo7XG4gICAgZm9yIChqID0gMDsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIG1hdHJpeFswXVtqXSA9IGo7XG4gICAgfVxuICAgIGZvciAoaSA9IDE7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKGogPSAxOyBqIDw9IGEubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChiLmNoYXJBdChpIC0gMSkgPT09IGEuY2hhckF0KGogLSAxKSkge1xuICAgICAgICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IG1hdHJpeFtpIC0gMV1baiAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPiAxICYmXG4gICAgICAgICAgICAgICAgICAgIGogPiAxICYmXG4gICAgICAgICAgICAgICAgICAgIGIuY2hhckF0KGkgLSAyKSA9PT0gYS5jaGFyQXQoaiAtIDEpICYmXG4gICAgICAgICAgICAgICAgICAgIGIuY2hhckF0KGkgLSAxKSA9PT0gYS5jaGFyQXQoaiAtIDIpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IG1hdHJpeFtpIC0gMl1baiAtIDJdICsgMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IE1hdGgubWluKG1hdHJpeFtpIC0gMV1baiAtIDFdICsgMSwgTWF0aC5taW4obWF0cml4W2ldW2ogLSAxXSArIDEsIG1hdHJpeFtpIC0gMV1bal0gKyAxKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXhbYi5sZW5ndGhdW2EubGVuZ3RoXTtcbn1cbiIsImltcG9ydCB7IGFyZ3NlcnQgfSBmcm9tICcuL2FyZ3NlcnQuanMnO1xuaW1wb3J0IHsgYXNzZXJ0Tm90U3RyaWN0RXF1YWwsIH0gZnJvbSAnLi90eXBpbmdzL2NvbW1vbi10eXBlcy5qcyc7XG5pbXBvcnQgeyBsZXZlbnNodGVpbiBhcyBkaXN0YW5jZSB9IGZyb20gJy4vdXRpbHMvbGV2ZW5zaHRlaW4uanMnO1xuaW1wb3J0IHsgb2JqRmlsdGVyIH0gZnJvbSAnLi91dGlscy9vYmotZmlsdGVyLmpzJztcbmNvbnN0IHNwZWNpYWxLZXlzID0gWyckMCcsICctLScsICdfJ107XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGlvbih5YXJncywgdXNhZ2UsIHNoaW0pIHtcbiAgICBjb25zdCBfXyA9IHNoaW0ueTE4bi5fXztcbiAgICBjb25zdCBfX24gPSBzaGltLnkxOG4uX19uO1xuICAgIGNvbnN0IHNlbGYgPSB7fTtcbiAgICBzZWxmLm5vbk9wdGlvbkNvdW50ID0gZnVuY3Rpb24gbm9uT3B0aW9uQ291bnQoYXJndikge1xuICAgICAgICBjb25zdCBkZW1hbmRlZENvbW1hbmRzID0geWFyZ3MuZ2V0RGVtYW5kZWRDb21tYW5kcygpO1xuICAgICAgICBjb25zdCBwb3NpdGlvbmFsQ291bnQgPSBhcmd2Ll8ubGVuZ3RoICsgKGFyZ3ZbJy0tJ10gPyBhcmd2WyctLSddLmxlbmd0aCA6IDApO1xuICAgICAgICBjb25zdCBfcyA9IHBvc2l0aW9uYWxDb3VudCAtIHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldENvbnRleHQoKS5jb21tYW5kcy5sZW5ndGg7XG4gICAgICAgIGlmIChkZW1hbmRlZENvbW1hbmRzLl8gJiZcbiAgICAgICAgICAgIChfcyA8IGRlbWFuZGVkQ29tbWFuZHMuXy5taW4gfHwgX3MgPiBkZW1hbmRlZENvbW1hbmRzLl8ubWF4KSkge1xuICAgICAgICAgICAgaWYgKF9zIDwgZGVtYW5kZWRDb21tYW5kcy5fLm1pbikge1xuICAgICAgICAgICAgICAgIGlmIChkZW1hbmRlZENvbW1hbmRzLl8ubWluTXNnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChkZW1hbmRlZENvbW1hbmRzLl8ubWluTXNnXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGRlbWFuZGVkQ29tbWFuZHMuXy5taW5Nc2dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwkMC9nLCBfcy50b1N0cmluZygpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXCQxLywgZGVtYW5kZWRDb21tYW5kcy5fLm1pbi50b1N0cmluZygpKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwoX19uKCdOb3QgZW5vdWdoIG5vbi1vcHRpb24gYXJndW1lbnRzOiBnb3QgJXMsIG5lZWQgYXQgbGVhc3QgJXMnLCAnTm90IGVub3VnaCBub24tb3B0aW9uIGFyZ3VtZW50czogZ290ICVzLCBuZWVkIGF0IGxlYXN0ICVzJywgX3MsIF9zLnRvU3RyaW5nKCksIGRlbWFuZGVkQ29tbWFuZHMuXy5taW4udG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKF9zID4gZGVtYW5kZWRDb21tYW5kcy5fLm1heCkge1xuICAgICAgICAgICAgICAgIGlmIChkZW1hbmRlZENvbW1hbmRzLl8ubWF4TXNnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChkZW1hbmRlZENvbW1hbmRzLl8ubWF4TXNnXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGRlbWFuZGVkQ29tbWFuZHMuXy5tYXhNc2dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwkMC9nLCBfcy50b1N0cmluZygpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXCQxLywgZGVtYW5kZWRDb21tYW5kcy5fLm1heC50b1N0cmluZygpKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwoX19uKCdUb28gbWFueSBub24tb3B0aW9uIGFyZ3VtZW50czogZ290ICVzLCBtYXhpbXVtIG9mICVzJywgJ1RvbyBtYW55IG5vbi1vcHRpb24gYXJndW1lbnRzOiBnb3QgJXMsIG1heGltdW0gb2YgJXMnLCBfcywgX3MudG9TdHJpbmcoKSwgZGVtYW5kZWRDb21tYW5kcy5fLm1heC50b1N0cmluZygpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLnBvc2l0aW9uYWxDb3VudCA9IGZ1bmN0aW9uIHBvc2l0aW9uYWxDb3VudChyZXF1aXJlZCwgb2JzZXJ2ZWQpIHtcbiAgICAgICAgaWYgKG9ic2VydmVkIDwgcmVxdWlyZWQpIHtcbiAgICAgICAgICAgIHVzYWdlLmZhaWwoX19uKCdOb3QgZW5vdWdoIG5vbi1vcHRpb24gYXJndW1lbnRzOiBnb3QgJXMsIG5lZWQgYXQgbGVhc3QgJXMnLCAnTm90IGVub3VnaCBub24tb3B0aW9uIGFyZ3VtZW50czogZ290ICVzLCBuZWVkIGF0IGxlYXN0ICVzJywgb2JzZXJ2ZWQsIG9ic2VydmVkICsgJycsIHJlcXVpcmVkICsgJycpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5yZXF1aXJlZEFyZ3VtZW50cyA9IGZ1bmN0aW9uIHJlcXVpcmVkQXJndW1lbnRzKGFyZ3YsIGRlbWFuZGVkT3B0aW9ucykge1xuICAgICAgICBsZXQgbWlzc2luZyA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGRlbWFuZGVkT3B0aW9ucykpIHtcbiAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFyZ3YsIGtleSkgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgYXJndltrZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIG1pc3NpbmcgPSBtaXNzaW5nIHx8IHt9O1xuICAgICAgICAgICAgICAgIG1pc3Npbmdba2V5XSA9IGRlbWFuZGVkT3B0aW9uc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtaXNzaW5nKSB7XG4gICAgICAgICAgICBjb25zdCBjdXN0b21Nc2dzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhtaXNzaW5nKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IG1pc3Npbmdba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAobXNnICYmIGN1c3RvbU1zZ3MuaW5kZXhPZihtc2cpIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21Nc2dzLnB1c2gobXNnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjdXN0b21Nc2cgPSBjdXN0b21Nc2dzLmxlbmd0aCA/IGBcXG4ke2N1c3RvbU1zZ3Muam9pbignXFxuJyl9YCA6ICcnO1xuICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ01pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQ6ICVzJywgJ01pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnRzOiAlcycsIE9iamVjdC5rZXlzKG1pc3NpbmcpLmxlbmd0aCwgT2JqZWN0LmtleXMobWlzc2luZykuam9pbignLCAnKSArIGN1c3RvbU1zZykpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLnVua25vd25Bcmd1bWVudHMgPSBmdW5jdGlvbiB1bmtub3duQXJndW1lbnRzKGFyZ3YsIGFsaWFzZXMsIHBvc2l0aW9uYWxNYXAsIGlzRGVmYXVsdENvbW1hbmQsIGNoZWNrUG9zaXRpb25hbHMgPSB0cnVlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgY29tbWFuZEtleXMgPSB5YXJnc1xuICAgICAgICAgICAgLmdldEludGVybmFsTWV0aG9kcygpXG4gICAgICAgICAgICAuZ2V0Q29tbWFuZEluc3RhbmNlKClcbiAgICAgICAgICAgIC5nZXRDb21tYW5kcygpO1xuICAgICAgICBjb25zdCB1bmtub3duID0gW107XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb250ZXh0ID0geWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0Q29udGV4dCgpO1xuICAgICAgICBPYmplY3Qua2V5cyhhcmd2KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoIXNwZWNpYWxLZXlzLmluY2x1ZGVzKGtleSkgJiZcbiAgICAgICAgICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBvc2l0aW9uYWxNYXAsIGtleSkgJiZcbiAgICAgICAgICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldFBhcnNlQ29udGV4dCgpLCBrZXkpICYmXG4gICAgICAgICAgICAgICAgIXNlbGYuaXNWYWxpZEFuZFNvbWVBbGlhc0lzTm90TmV3KGtleSwgYWxpYXNlcykpIHtcbiAgICAgICAgICAgICAgICB1bmtub3duLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjaGVja1Bvc2l0aW9uYWxzICYmXG4gICAgICAgICAgICAoY3VycmVudENvbnRleHQuY29tbWFuZHMubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICAgIGNvbW1hbmRLZXlzLmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICAgICAgICBpc0RlZmF1bHRDb21tYW5kKSkge1xuICAgICAgICAgICAgYXJndi5fLnNsaWNlKGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLmxlbmd0aCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY29tbWFuZEtleXMuaW5jbHVkZXMoJycgKyBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHVua25vd24ucHVzaCgnJyArIGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrUG9zaXRpb25hbHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlbWFuZGVkQ29tbWFuZHMgPSB5YXJncy5nZXREZW1hbmRlZENvbW1hbmRzKCk7XG4gICAgICAgICAgICBjb25zdCBtYXhOb25PcHREZW1hbmRlZCA9ICgoX2EgPSBkZW1hbmRlZENvbW1hbmRzLl8pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5tYXgpIHx8IDA7XG4gICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLmxlbmd0aCArIG1heE5vbk9wdERlbWFuZGVkO1xuICAgICAgICAgICAgaWYgKGV4cGVjdGVkIDwgYXJndi5fLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGFyZ3YuXy5zbGljZShleHBlY3RlZCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBTdHJpbmcoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50Q29udGV4dC5jb21tYW5kcy5pbmNsdWRlcyhrZXkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhdW5rbm93bi5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1bmtub3duLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh1bmtub3duLmxlbmd0aCkge1xuICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ1Vua25vd24gYXJndW1lbnQ6ICVzJywgJ1Vua25vd24gYXJndW1lbnRzOiAlcycsIHVua25vd24ubGVuZ3RoLCB1bmtub3duLm1hcChzID0+IChzLnRyaW0oKSA/IHMgOiBgXCIke3N9XCJgKSkuam9pbignLCAnKSkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLnVua25vd25Db21tYW5kcyA9IGZ1bmN0aW9uIHVua25vd25Db21tYW5kcyhhcmd2KSB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRLZXlzID0geWFyZ3NcbiAgICAgICAgICAgIC5nZXRJbnRlcm5hbE1ldGhvZHMoKVxuICAgICAgICAgICAgLmdldENvbW1hbmRJbnN0YW5jZSgpXG4gICAgICAgICAgICAuZ2V0Q29tbWFuZHMoKTtcbiAgICAgICAgY29uc3QgdW5rbm93biA9IFtdO1xuICAgICAgICBjb25zdCBjdXJyZW50Q29udGV4dCA9IHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldENvbnRleHQoKTtcbiAgICAgICAgaWYgKGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLmxlbmd0aCA+IDAgfHwgY29tbWFuZEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgYXJndi5fLnNsaWNlKGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLmxlbmd0aCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY29tbWFuZEtleXMuaW5jbHVkZXMoJycgKyBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHVua25vd24ucHVzaCgnJyArIGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVua25vd24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ1Vua25vd24gY29tbWFuZDogJXMnLCAnVW5rbm93biBjb21tYW5kczogJXMnLCB1bmtub3duLmxlbmd0aCwgdW5rbm93bi5qb2luKCcsICcpKSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5pc1ZhbGlkQW5kU29tZUFsaWFzSXNOb3ROZXcgPSBmdW5jdGlvbiBpc1ZhbGlkQW5kU29tZUFsaWFzSXNOb3ROZXcoa2V5LCBhbGlhc2VzKSB7XG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFsaWFzZXMsIGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdBbGlhc2VzID0geWFyZ3MucGFyc2VkLm5ld0FsaWFzZXM7XG4gICAgICAgIHJldHVybiBba2V5LCAuLi5hbGlhc2VzW2tleV1dLnNvbWUoYSA9PiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5ld0FsaWFzZXMsIGEpIHx8ICFuZXdBbGlhc2VzW2tleV0pO1xuICAgIH07XG4gICAgc2VsZi5saW1pdGVkQ2hvaWNlcyA9IGZ1bmN0aW9uIGxpbWl0ZWRDaG9pY2VzKGFyZ3YpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgY29uc3QgaW52YWxpZCA9IHt9O1xuICAgICAgICBpZiAoIU9iamVjdC5rZXlzKG9wdGlvbnMuY2hvaWNlcykubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBPYmplY3Qua2V5cyhhcmd2KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoc3BlY2lhbEtleXMuaW5kZXhPZihrZXkpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLmNob2ljZXMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICBbXS5jb25jYXQoYXJndltrZXldKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuY2hvaWNlc1trZXldLmluZGV4T2YodmFsdWUpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZFtrZXldID0gKGludmFsaWRba2V5XSB8fCBbXSkuY29uY2F0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaW52YWxpZEtleXMgPSBPYmplY3Qua2V5cyhpbnZhbGlkKTtcbiAgICAgICAgaWYgKCFpbnZhbGlkS2V5cy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxldCBtc2cgPSBfXygnSW52YWxpZCB2YWx1ZXM6Jyk7XG4gICAgICAgIGludmFsaWRLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIG1zZyArPSBgXFxuICAke19fKCdBcmd1bWVudDogJXMsIEdpdmVuOiAlcywgQ2hvaWNlczogJXMnLCBrZXksIHVzYWdlLnN0cmluZ2lmaWVkVmFsdWVzKGludmFsaWRba2V5XSksIHVzYWdlLnN0cmluZ2lmaWVkVmFsdWVzKG9wdGlvbnMuY2hvaWNlc1trZXldKSl9YDtcbiAgICAgICAgfSk7XG4gICAgICAgIHVzYWdlLmZhaWwobXNnKTtcbiAgICB9O1xuICAgIGxldCBpbXBsaWVkID0ge307XG4gICAgc2VsZi5pbXBsaWVzID0gZnVuY3Rpb24gaW1wbGllcyhrZXksIHZhbHVlKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8b2JqZWN0PiBbYXJyYXl8bnVtYmVyfHN0cmluZ10nLCBba2V5LCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGtleSkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICBzZWxmLmltcGxpZXMoaywga2V5W2tdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgeWFyZ3MuZ2xvYmFsKGtleSk7XG4gICAgICAgICAgICBpZiAoIWltcGxpZWRba2V5XSkge1xuICAgICAgICAgICAgICAgIGltcGxpZWRba2V5XSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaChpID0+IHNlbGYuaW1wbGllcyhrZXksIGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKHZhbHVlLCB1bmRlZmluZWQsIHNoaW0pO1xuICAgICAgICAgICAgICAgIGltcGxpZWRba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5nZXRJbXBsaWVkID0gZnVuY3Rpb24gZ2V0SW1wbGllZCgpIHtcbiAgICAgICAgcmV0dXJuIGltcGxpZWQ7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBrZXlFeGlzdHMoYXJndiwgdmFsKSB7XG4gICAgICAgIGNvbnN0IG51bSA9IE51bWJlcih2YWwpO1xuICAgICAgICB2YWwgPSBpc05hTihudW0pID8gdmFsIDogbnVtO1xuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHZhbCA9IGFyZ3YuXy5sZW5ndGggPj0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbC5tYXRjaCgvXi0tbm8tLisvKSkge1xuICAgICAgICAgICAgdmFsID0gdmFsLm1hdGNoKC9eLS1uby0oLispLylbMV07XG4gICAgICAgICAgICB2YWwgPSAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFyZ3YsIHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YWwgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXJndiwgdmFsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICBzZWxmLmltcGxpY2F0aW9ucyA9IGZ1bmN0aW9uIGltcGxpY2F0aW9ucyhhcmd2KSB7XG4gICAgICAgIGNvbnN0IGltcGx5RmFpbCA9IFtdO1xuICAgICAgICBPYmplY3Qua2V5cyhpbXBsaWVkKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcmlnS2V5ID0ga2V5O1xuICAgICAgICAgICAgKGltcGxpZWRba2V5XSB8fCBbXSkuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IG9yaWdLZXk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ1ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAga2V5ID0ga2V5RXhpc3RzKGFyZ3YsIGtleSk7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBrZXlFeGlzdHMoYXJndiwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChrZXkgJiYgIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGltcGx5RmFpbC5wdXNoKGAgJHtvcmlnS2V5fSAtPiAke29yaWdWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpbXBseUZhaWwubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgbXNnID0gYCR7X18oJ0ltcGxpY2F0aW9ucyBmYWlsZWQ6Jyl9XFxuYDtcbiAgICAgICAgICAgIGltcGx5RmFpbC5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBtc2cgKz0gdmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHVzYWdlLmZhaWwobXNnKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgbGV0IGNvbmZsaWN0aW5nID0ge307XG4gICAgc2VsZi5jb25mbGljdHMgPSBmdW5jdGlvbiBjb25mbGljdHMoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG9iamVjdD4gW2FycmF5fHN0cmluZ10nLCBba2V5LCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGtleSkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZsaWN0cyhrLCBrZXlba10pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB5YXJncy5nbG9iYWwoa2V5KTtcbiAgICAgICAgICAgIGlmICghY29uZmxpY3Rpbmdba2V5XSkge1xuICAgICAgICAgICAgICAgIGNvbmZsaWN0aW5nW2tleV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmZvckVhY2goaSA9PiBzZWxmLmNvbmZsaWN0cyhrZXksIGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbmZsaWN0aW5nW2tleV0ucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYuZ2V0Q29uZmxpY3RpbmcgPSAoKSA9PiBjb25mbGljdGluZztcbiAgICBzZWxmLmNvbmZsaWN0aW5nID0gZnVuY3Rpb24gY29uZmxpY3RpbmdGbihhcmd2KSB7XG4gICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChjb25mbGljdGluZ1trZXldKSB7XG4gICAgICAgICAgICAgICAgY29uZmxpY3Rpbmdba2V5XS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIGFyZ3Zba2V5XSAhPT0gdW5kZWZpbmVkICYmIGFyZ3ZbdmFsdWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwoX18oJ0FyZ3VtZW50cyAlcyBhbmQgJXMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZScsIGtleSwgdmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldFBhcnNlckNvbmZpZ3VyYXRpb24oKVsnc3RyaXAtZGFzaGVkJ10pIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGNvbmZsaWN0aW5nKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgY29uZmxpY3Rpbmdba2V5XS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmd2W3NoaW0uUGFyc2VyLmNhbWVsQ2FzZShrZXkpXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmd2W3NoaW0uUGFyc2VyLmNhbWVsQ2FzZSh2YWx1ZSldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwoX18oJ0FyZ3VtZW50cyAlcyBhbmQgJXMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZScsIGtleSwgdmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYucmVjb21tZW5kQ29tbWFuZHMgPSBmdW5jdGlvbiByZWNvbW1lbmRDb21tYW5kcyhjbWQsIHBvdGVudGlhbENvbW1hbmRzKSB7XG4gICAgICAgIGNvbnN0IHRocmVzaG9sZCA9IDM7XG4gICAgICAgIHBvdGVudGlhbENvbW1hbmRzID0gcG90ZW50aWFsQ29tbWFuZHMuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aCk7XG4gICAgICAgIGxldCByZWNvbW1lbmRlZCA9IG51bGw7XG4gICAgICAgIGxldCBiZXN0RGlzdGFuY2UgPSBJbmZpbml0eTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNhbmRpZGF0ZTsgKGNhbmRpZGF0ZSA9IHBvdGVudGlhbENvbW1hbmRzW2ldKSAhPT0gdW5kZWZpbmVkOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSBkaXN0YW5jZShjbWQsIGNhbmRpZGF0ZSk7XG4gICAgICAgICAgICBpZiAoZCA8PSB0aHJlc2hvbGQgJiYgZCA8IGJlc3REaXN0YW5jZSkge1xuICAgICAgICAgICAgICAgIGJlc3REaXN0YW5jZSA9IGQ7XG4gICAgICAgICAgICAgICAgcmVjb21tZW5kZWQgPSBjYW5kaWRhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlY29tbWVuZGVkKVxuICAgICAgICAgICAgdXNhZ2UuZmFpbChfXygnRGlkIHlvdSBtZWFuICVzPycsIHJlY29tbWVuZGVkKSk7XG4gICAgfTtcbiAgICBzZWxmLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQobG9jYWxMb29rdXApIHtcbiAgICAgICAgaW1wbGllZCA9IG9iakZpbHRlcihpbXBsaWVkLCBrID0+ICFsb2NhbExvb2t1cFtrXSk7XG4gICAgICAgIGNvbmZsaWN0aW5nID0gb2JqRmlsdGVyKGNvbmZsaWN0aW5nLCBrID0+ICFsb2NhbExvb2t1cFtrXSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgY29uc3QgZnJvemVucyA9IFtdO1xuICAgIHNlbGYuZnJlZXplID0gZnVuY3Rpb24gZnJlZXplKCkge1xuICAgICAgICBmcm96ZW5zLnB1c2goe1xuICAgICAgICAgICAgaW1wbGllZCxcbiAgICAgICAgICAgIGNvbmZsaWN0aW5nLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHNlbGYudW5mcmVlemUgPSBmdW5jdGlvbiB1bmZyZWV6ZSgpIHtcbiAgICAgICAgY29uc3QgZnJvemVuID0gZnJvemVucy5wb3AoKTtcbiAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwoZnJvemVuLCB1bmRlZmluZWQsIHNoaW0pO1xuICAgICAgICAoeyBpbXBsaWVkLCBjb25mbGljdGluZyB9ID0gZnJvemVuKTtcbiAgICB9O1xuICAgIHJldHVybiBzZWxmO1xufVxuIiwiaW1wb3J0IHsgWUVycm9yIH0gZnJvbSAnLi4veWVycm9yLmpzJztcbmxldCBwcmV2aW91c2x5VmlzaXRlZENvbmZpZ3MgPSBbXTtcbmxldCBzaGltO1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RXh0ZW5kcyhjb25maWcsIGN3ZCwgbWVyZ2VFeHRlbmRzLCBfc2hpbSkge1xuICAgIHNoaW0gPSBfc2hpbTtcbiAgICBsZXQgZGVmYXVsdENvbmZpZyA9IHt9O1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAnZXh0ZW5kcycpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLmV4dGVuZHMgIT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRDb25maWc7XG4gICAgICAgIGNvbnN0IGlzUGF0aCA9IC9cXC5qc29ufFxcLi4qcmMkLy50ZXN0KGNvbmZpZy5leHRlbmRzKTtcbiAgICAgICAgbGV0IHBhdGhUb0RlZmF1bHQgPSBudWxsO1xuICAgICAgICBpZiAoIWlzUGF0aCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXRoVG9EZWZhdWx0ID0gaW1wb3J0Lm1ldGEucmVzb2x2ZShjb25maWcuZXh0ZW5kcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoX2Vycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwYXRoVG9EZWZhdWx0ID0gZ2V0UGF0aFRvRGVmYXVsdENvbmZpZyhjd2QsIGNvbmZpZy5leHRlbmRzKTtcbiAgICAgICAgfVxuICAgICAgICBjaGVja0ZvckNpcmN1bGFyRXh0ZW5kcyhwYXRoVG9EZWZhdWx0KTtcbiAgICAgICAgcHJldmlvdXNseVZpc2l0ZWRDb25maWdzLnB1c2gocGF0aFRvRGVmYXVsdCk7XG4gICAgICAgIGRlZmF1bHRDb25maWcgPSBpc1BhdGhcbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShzaGltLnJlYWRGaWxlU3luYyhwYXRoVG9EZWZhdWx0LCAndXRmOCcpKVxuICAgICAgICAgICAgOiBfc2hpbS5yZXF1aXJlKGNvbmZpZy5leHRlbmRzKTtcbiAgICAgICAgZGVsZXRlIGNvbmZpZy5leHRlbmRzO1xuICAgICAgICBkZWZhdWx0Q29uZmlnID0gYXBwbHlFeHRlbmRzKGRlZmF1bHRDb25maWcsIHNoaW0ucGF0aC5kaXJuYW1lKHBhdGhUb0RlZmF1bHQpLCBtZXJnZUV4dGVuZHMsIHNoaW0pO1xuICAgIH1cbiAgICBwcmV2aW91c2x5VmlzaXRlZENvbmZpZ3MgPSBbXTtcbiAgICByZXR1cm4gbWVyZ2VFeHRlbmRzXG4gICAgICAgID8gbWVyZ2VEZWVwKGRlZmF1bHRDb25maWcsIGNvbmZpZylcbiAgICAgICAgOiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0Q29uZmlnLCBjb25maWcpO1xufVxuZnVuY3Rpb24gY2hlY2tGb3JDaXJjdWxhckV4dGVuZHMoY2ZnUGF0aCkge1xuICAgIGlmIChwcmV2aW91c2x5VmlzaXRlZENvbmZpZ3MuaW5kZXhPZihjZmdQYXRoKSA+IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBZRXJyb3IoYENpcmN1bGFyIGV4dGVuZGVkIGNvbmZpZ3VyYXRpb25zOiAnJHtjZmdQYXRofScuYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0UGF0aFRvRGVmYXVsdENvbmZpZyhjd2QsIHBhdGhUb0V4dGVuZCkge1xuICAgIHJldHVybiBzaGltLnBhdGgucmVzb2x2ZShjd2QsIHBhdGhUb0V4dGVuZCk7XG59XG5mdW5jdGlvbiBtZXJnZURlZXAoY29uZmlnMSwgY29uZmlnMikge1xuICAgIGNvbnN0IHRhcmdldCA9IHt9O1xuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICAgICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KG9iaik7XG4gICAgfVxuICAgIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBjb25maWcxKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb25maWcyKSkge1xuICAgICAgICBpZiAoaXNPYmplY3QoY29uZmlnMltrZXldKSAmJiBpc09iamVjdCh0YXJnZXRba2V5XSkpIHtcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gbWVyZ2VEZWVwKGNvbmZpZzFba2V5XSwgY29uZmlnMltrZXldKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gY29uZmlnMltrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIEJvb3RzdHJhcHMgeWFyZ3MgZm9yIEVTTTpcbmltcG9ydCBlc21QbGF0Zm9ybVNoaW0gZnJvbSAnLi9saWIvcGxhdGZvcm0tc2hpbXMvZXNtLm1qcyc7XG5pbXBvcnQge1lhcmdzRmFjdG9yeX0gZnJvbSAnLi9idWlsZC9saWIveWFyZ3MtZmFjdG9yeS5qcyc7XG5cbmNvbnN0IFlhcmdzID0gWWFyZ3NGYWN0b3J5KGVzbVBsYXRmb3JtU2hpbSk7XG5leHBvcnQgZGVmYXVsdCBZYXJncztcblxuZXhwb3J0IHtZYXJncyBhcyAnbW9kdWxlLmV4cG9ydHMnfTtcbiIsImltcG9ydCBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHlhcmdzIGZyb20gJ3lhcmdzJztcbmltcG9ydCB7IGhpZGVCaW4gfSBmcm9tICd5YXJncy9oZWxwZXJzJztcbmltcG9ydCB7IGxvYWRDb25maWdGaWxlIH0gZnJvbSAnLi9jb25maWcuanMnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9BSURFUl9FWFRSQV9BUkdTLFxuICBERUZBVUxUX0NMQVVERV9DT0RFX0VYVFJBX0FSR1MsXG4gIERFRkFVTFRfQ09ERVhfRVhUUkFfQVJHUyxcbiAgREVGQVVMVF9DT0RJTkdfVE9PTCxcbiAgREVGQVVMVF9HRU1JTklfRVhUUkFfQVJHUyxcbiAgREVGQVVMVF9NQVhfVEVTVF9BVFRFTVBUUyxcbiAgREVGQVVMVF9OT0RFX1JVTlRJTUUsXG4gIERFRkFVTFRfUkVQT01JWF9FWFRSQV9BUkdTLFxufSBmcm9tICcuL2RlZmF1bHRPcHRpb25zLmpzJztcbmltcG9ydCB7IG1haW4gfSBmcm9tICcuL21haW4uanMnO1xuaW1wb3J0IHsgbm9ybWFsaXplTm9kZVJ1bnRpbWUgfSBmcm9tICcuL3NwYXduLmpzJztcbmltcG9ydCB0eXBlIHsgQ29kaW5nVG9vbCwgTm9kZVJ1bnRpbWUsIE5vZGVSdW50aW1lQWN0dWFsLCBSZWFzb25pbmdFZmZvcnQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8gUGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB1c2luZyB5YXJncyAoQ0xJIG9wdGlvbnMgb3ZlcnJpZGUgY29uZmlnKVxuY29uc3QgYXJndiA9IGF3YWl0IHlhcmdzKGhpZGVCaW4ocHJvY2Vzcy5hcmd2KSlcbiAgLmNvbmZpZyhsb2FkQ29uZmlnRmlsZSgpKVxuICAvLyBPcHRpb25zIHNhbWUgd2l0aCB0aGUgR2l0SHViIEFjdGlvbnMgd29ya2Zsb3dcbiAgLm9wdGlvbignaXNzdWUtbnVtYmVyJywge1xuICAgIGFsaWFzOiAnaScsXG4gICAgZGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIHRvIHByb2Nlc3MnLFxuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgfSlcbiAgLm9wdGlvbigncGxhbm5pbmctbW9kZWwnLCB7XG4gICAgYWxpYXM6ICdtJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdMTE0gZm9yIHBsYW5uaW5nIGNvZGUgY2hhbmdlcy4gTXVzdCB1c2UgbGxtbGl0ZSBmb3JtYXQ6IHByb3ZpZGVyL21vZGVsIChlLmcuLCBvcGVuYWkvZ3B0LTQuMSwgYXp1cmUvZ3B0LTQuMSwgZ2VtaW5pL2dlbWluaS0yLjUtcHJvLCBhbnRocm9waWMvY2xhdWRlLTQtc29ubmV0LWxhdGVzdCwgYmVkcm9jay91cy5hbnRocm9waWMuY2xhdWRlLXNvbm5ldC00LTIwMjUwNTE0LXYxOjAsIHZlcnRleC9nZW1pbmktMi41LXBybywgeGFpL2dyb2stNCknLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICB9KVxuICAub3B0aW9uKCd0d28tc3RhZ2VkLXBsYW5uaW5nJywge1xuICAgIGFsaWFzOiAncCcsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnRW5hYmxlIHR3by1zdGFnZWQgcGxhbm5pbmc6IGZpcnN0IHNlbGVjdCByZWxldmFudCBmaWxlcywgdGhlbiBnZW5lcmF0ZSBkZXRhaWxlZCBpbXBsZW1lbnRhdGlvbiBwbGFucyAoaW5jcmVhc2VzIExMTSBjb3N0IGJ1dCBpbXByb3ZlcyBjb2RlIHF1YWxpdHkpJyxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgfSlcbiAgLm9wdGlvbigncmVhc29uaW5nLWVmZm9ydCcsIHtcbiAgICBhbGlhczogJ2UnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ29uc3RyYWlucyBlZmZvcnQgb24gcmVhc29uaW5nIGZvciBwbGFubmluZyBtb2RlbHMuIFN1cHBvcnRlZCB2YWx1ZXMgYXJlIGxvdywgbWVkaXVtLCBhbmQgaGlnaC4nLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGNob2ljZXM6IFsnbG93JywgJ21lZGl1bScsICdoaWdoJ10sXG4gIH0pXG4gIC5vcHRpb24oJ2NvZGluZy10b29sJywge1xuICAgIGFsaWFzOiAnYycsXG4gICAgZGVzY3JpcHRpb246ICdDb2RpbmcgdG9vbCB0byB1c2UgZm9yIG1ha2luZyBjaGFuZ2VzJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBjaG9pY2VzOiBbJ2FpZGVyJywgJ2NsYXVkZS1jb2RlJywgJ2NvZGV4LWNsaScsICdnZW1pbmktY2xpJ10sXG4gICAgZGVmYXVsdDogREVGQVVMVF9DT0RJTkdfVE9PTCxcbiAgfSlcbiAgLm9wdGlvbignYWlkZXItZXh0cmEtYXJncycsIHtcbiAgICBhbGlhczogJ2EnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ0FkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gQWlkZXIgKFwiLS15ZXMtYWx3YXlzIC0tbm8tY2hlY2stdXBkYXRlIC0tbm8tc2hvdy1yZWxlYXNlLW5vdGVzXCIgaXMgYWx3YXlzIGFwcGxpZWQpJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBkZWZhdWx0OiBERUZBVUxUX0FJREVSX0VYVFJBX0FSR1MsXG4gIH0pXG4gIC5vcHRpb24oJ2NsYXVkZS1jb2RlLWV4dHJhLWFyZ3MnLCB7XG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byBDbGF1ZGUgQ29kZSAoXCItLWRhbmdlcm91c2x5LXNraXAtcGVybWlzc2lvbnNcIiBpcyBhbHdheXMgYXBwbGllZCwgXCItLXByaW50XCIgaXMgYXBwbGllZCBvbmx5IGluIENJKScsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgZGVmYXVsdDogREVGQVVMVF9DTEFVREVfQ09ERV9FWFRSQV9BUkdTLFxuICB9KVxuICAub3B0aW9uKCdjb2RleC1leHRyYS1hcmdzJywge1xuICAgIGRlc2NyaXB0aW9uOiAnQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byBDb2RleCBDTEkgKG5vdGhpbmcgaXMgYWx3YXlzIGFwcGxpZWQpJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBkZWZhdWx0OiBERUZBVUxUX0NPREVYX0VYVFJBX0FSR1MsXG4gIH0pXG4gIC5vcHRpb24oJ2dlbWluaS1leHRyYS1hcmdzJywge1xuICAgIGRlc2NyaXB0aW9uOiAnQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byBHZW1pbmkgQ0xJIChcIi0teW9sb1wiIGlzIGFsd2F5cyBhcHBsaWVkKScsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgZGVmYXVsdDogREVGQVVMVF9HRU1JTklfRVhUUkFfQVJHUyxcbiAgfSlcbiAgLm9wdGlvbigncmVwb21peC1leHRyYS1hcmdzJywge1xuICAgIGFsaWFzOiAncicsXG4gICAgZGVzY3JpcHRpb246ICdBZGRpdGlvbmFsIGFyZ3VtZW50cyBmb3IgcmVwb21peCB3aGVuIGdlbmVyYXRpbmcgY29udGV4dCcsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgZGVmYXVsdDogREVGQVVMVF9SRVBPTUlYX0VYVFJBX0FSR1MsXG4gIH0pXG4gIC5vcHRpb24oJ3Rlc3QtY29tbWFuZCcsIHtcbiAgICBhbGlhczogJ3QnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ29tbWFuZCB0byBydW4gYWZ0ZXIgdGhlIGNvZGluZyB0b29sIGFwcGxpZXMgY2hhbmdlcy4gSWYgaXQgZmFpbHMsIHRoZSBhc3Npc3RhbnQgd2lsbCB0cnkgdG8gZml4IGl0LicsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gIH0pXG4gIC5vcHRpb24oJ21heC10ZXN0LWF0dGVtcHRzJywge1xuICAgIGRlc2NyaXB0aW9uOiAnTWF4aW11bSBudW1iZXIgb2YgYXR0ZW1wdHMgdG8gZml4IHRlc3QgZmFpbHVyZXMnLFxuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHQ6IERFRkFVTFRfTUFYX1RFU1RfQVRURU1QVFMsXG4gIH0pXG4gIC5vcHRpb24oJ2RyeS1ydW4nLCB7XG4gICAgYWxpYXM6ICdkJyxcbiAgICBkZXNjcmlwdGlvbjogJ1J1biB3aXRob3V0IG1ha2luZyBhY3R1YWwgY2hhbmdlcyAobm8gYnJhbmNoIGNyZWF0aW9uLCBubyBQUiknLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSlcbiAgLm9wdGlvbigncmVtb3ZlLXBhdHRlcm4nLCB7XG4gICAgZGVzY3JpcHRpb246ICdSZWdFeHAgcGF0dGVybiB0byByZW1vdmUgZnJvbSBpc3N1ZSBhbmQgUFIgZGVzY3JpcHRpb25zJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgfSlcbiAgLm9wdGlvbignbm8tYnJhbmNoJywge1xuICAgIGFsaWFzOiAnbicsXG4gICAgZGVzY3JpcHRpb246ICdEbyBub3QgY3JlYXRlIGEgbmV3IGJyYW5jaCwgY29tbWl0IGNoYW5nZXMgZGlyZWN0bHkgdG8gdGhlIGJhc2UgYnJhbmNoJyxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0pXG4gIC5vcHRpb24oJ25vZGUtcnVudGltZScsIHtcbiAgICBkZXNjcmlwdGlvbjogJ05vZGUuanMgcnVudGltZSB0byB1c2UgZm9yIHJ1bm5pbmcgdG9vbHMnLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGNob2ljZXM6IFsnbm9kZScsICdidW4nLCAnbnB4JywgJ2J1bngnXSxcbiAgICBkZWZhdWx0OiBERUZBVUxUX05PREVfUlVOVElNRSxcbiAgfSlcbiAgLy8gT3B0aW9ucyBvbmx5IGZvciB0aGlzIHN0YW5kYWxvbmUgdG9vbCAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAub3B0aW9uKCd3b3JraW5nLWRpcicsIHtcbiAgICBhbGlhczogJ3cnLFxuICAgIGRlc2NyaXB0aW9uOiAnV29ya2luZyBkaXJlY3RvcnkgcGF0aCBmb3IgY29tbWFuZHMnLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICB9KVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC52ZXJzaW9uKGdldFZlcnNpb24oKSlcbiAgLmhlbHAoKS5hcmd2O1xuXG5mdW5jdGlvbiBnZXRWZXJzaW9uKCk6IHN0cmluZyB7XG4gIGxldCBwYWNrYWdlSnNvbkRpciA9IGltcG9ydC5tZXRhLmRpciB8fCBwYXRoLmRpcm5hbWUobmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lKTtcbiAgd2hpbGUgKCFmcy5leGlzdHNTeW5jKHBhdGguam9pbihwYWNrYWdlSnNvbkRpciwgJ3BhY2thZ2UuanNvbicpKSkge1xuICAgIHBhY2thZ2VKc29uRGlyID0gcGF0aC5kaXJuYW1lKHBhY2thZ2VKc29uRGlyKTtcbiAgfVxuICByZXR1cm4gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHBhY2thZ2VKc29uRGlyLCAncGFja2FnZS5qc29uJyksICd1dGY4JykpLnZlcnNpb247XG59XG5cbmlmIChhcmd2Wyd3b3JraW5nLWRpciddKSB7XG4gIHByb2Nlc3MuY2hkaXIoYXJndlsnd29ya2luZy1kaXInXSk7XG4gIGNvbnNvbGUuaW5mbyhgQ2hhbmdlZCB3b3JraW5nIGRpcmVjdG9yeSB0bzogJHtwcm9jZXNzLmN3ZCgpfWApO1xufVxuXG4vLyBOb3JtYWxpemUgdGhlIHJ1bnRpbWUgdmFsdWUgKGNvbnZlcnQgYWxpYXNlcyB0byBhY3R1YWwgY29tbWFuZHMpXG5jb25zdCBub2RlUnVudGltZTogTm9kZVJ1bnRpbWVBY3R1YWwgPSBub3JtYWxpemVOb2RlUnVudGltZShhcmd2Wydub2RlLXJ1bnRpbWUnXSBhcyBOb2RlUnVudGltZSk7XG5cbmF3YWl0IG1haW4oe1xuICBhaWRlckV4dHJhQXJnczogYXJndlsnYWlkZXItZXh0cmEtYXJncyddLFxuICBjbGF1ZGVDb2RlRXh0cmFBcmdzOiBhcmd2WydjbGF1ZGUtY29kZS1leHRyYS1hcmdzJ10sXG4gIGNvZGV4RXh0cmFBcmdzOiBhcmd2Wydjb2RleC1leHRyYS1hcmdzJ10sXG4gIGdlbWluaUV4dHJhQXJnczogYXJndlsnZ2VtaW5pLWV4dHJhLWFyZ3MnXSxcbiAgY29kaW5nVG9vbDogYXJndlsnY29kaW5nLXRvb2wnXSBhcyBDb2RpbmdUb29sLFxuICBkcnlSdW46IGFyZ3ZbJ2RyeS1ydW4nXSxcbiAgbm9CcmFuY2g6IGFyZ3ZbJ25vLWJyYW5jaCddLFxuICBub2RlUnVudGltZSxcbiAgdHdvU3RhZ2VQbGFubmluZzogYXJndlsndHdvLXN0YWdlZC1wbGFubmluZyddLFxuICBpc3N1ZU51bWJlcjogYXJndlsnaXNzdWUtbnVtYmVyJ10sXG4gIG1heFRlc3RBdHRlbXB0czogYXJndlsnbWF4LXRlc3QtYXR0ZW1wdHMnXSxcbiAgcGxhbm5pbmdNb2RlbDogYXJndlsncGxhbm5pbmctbW9kZWwnXSxcbiAgcmVhc29uaW5nRWZmb3J0OiBhcmd2WydyZWFzb25pbmctZWZmb3J0J10gYXMgUmVhc29uaW5nRWZmb3J0LFxuICByZXBvbWl4RXh0cmFBcmdzOiBhcmd2WydyZXBvbWl4LWV4dHJhLWFyZ3MnXSxcbiAgdGVzdENvbW1hbmQ6IGFyZ3ZbJ3Rlc3QtY29tbWFuZCddLFxuICByZW1vdmVQYXR0ZXJuOiBhcmd2WydyZW1vdmUtcGF0dGVybiddLFxufSk7XG4iXSwibmFtZXMiOlsiYWxpZ24iLCJyaWdodCIsInN0ciIsIndpZHRoIiwidHJpbSIsInN0cldpZHRoIiwibWl4aW4iLCJzdHJpbmdXaWR0aCIsInJlcGVhdCIsImNlbnRlciIsIlVJIiwiY29uc3RydWN0b3IiLCJvcHRzIiwiX2EiLCJ0aGlzIiwid3JhcCIsInJvd3MiLCJzcGFuIiwiYXJncyIsImRpdiIsInJlc2V0T3V0cHV0IiwibGVuZ3RoIiwic2hvdWxkQXBwbHlMYXlvdXREU0wiLCJhcHBseUxheW91dERTTCIsImNvbHMiLCJtYXAiLCJhcmciLCJjb2xGcm9tU3RyaW5nIiwicHVzaCIsInRlc3QiLCJzcGxpdCIsInJvdyIsImxlZnRDb2x1bW5XaWR0aCIsImZvckVhY2giLCJjb2x1bW5zIiwiTWF0aCIsIm1pbiIsImZsb29yIiwiciIsImkiLCJ0ZXh0IiwicGFkZGluZyIsIm1lYXN1cmVQYWRkaW5nIiwidW5kZWZpbmVkIiwibm9BbnNpIiwic3RyaXBBbnNpIiwibWF0Y2giLCJ0b1N0cmluZyIsImxpbmVzIiwicm93VG9TdHJpbmciLCJmaWx0ZXIiLCJsaW5lIiwiaGlkZGVuIiwiam9pbiIsInJhc3Rlcml6ZSIsInJyb3ciLCJjb2wiLCJjIiwid3JhcFdpZHRoIiwibmVnYXRlUGFkZGluZyIsInRzIiwiZm4iLCJhZGRCb3JkZXIiLCJyZW5kZXJJbmxpbmUiLCJyZXBsYWNlIiwic291cmNlIiwicHJldmlvdXNMaW5lIiwibGVhZGluZ1doaXRlc3BhY2UiLCJ0YXJnZXQiLCJ0YXJnZXRUZXh0V2lkdGgiLCJ0cmltUmlnaHQiLCJ0cmltTGVmdCIsInJyb3dzIiwid2lkdGhzIiwiY29sdW1uV2lkdGhzIiwid3JhcHBlZCIsImhhcmQiLCJib3JkZXIiLCJ1bnNoaWZ0IiwiQXJyYXkiLCJmaWxsIiwidW5zZXQiLCJyZW1haW5pbmdXaWR0aCIsInVuc2V0V2lkdGgiLCJ3IiwibWF4IiwibWluV2lkdGgiLCJfbWluV2lkdGgiLCJzdHlsZSIsInJlZ2V4Iiwib25seUZpcnN0IiwiUmVnRXhwIiwiYW5zaVJlZ2V4Iiwic3RyaW5nIiwiVHlwZUVycm9yIiwiZWFzdEFzaWFuV2lkdGgiLCJjb2RlUG9pbnQiLCJhbWJpZ3VvdXNBc1dpZGUiLCJOdW1iZXIiLCJpc1NhZmVJbnRlZ2VyIiwidmFsaWRhdGUiLCJ4IiwiaXNXaWRlIiwiaXNBbWJpZ3VvdXMiLCJlbW9qaVJlZ2V4Iiwic2VnbWVudGVyIiwiSW50bCIsIlNlZ21lbnRlciIsImRlZmF1bHRJZ25vcmFibGVDb2RlUG9pbnRSZWdleCIsIm9wdGlvbnMiLCJhbWJpZ3VvdXNJc05hcnJvdyIsImNvdW50QW5zaUVzY2FwZUNvZGVzIiwiZWFzdEFzaWFuV2lkdGhPcHRpb25zIiwic2VnbWVudCIsImNoYXJhY3RlciIsImNvZGVQb2ludEF0Iiwid3JhcEFuc2kxNiIsIm9mZnNldCIsImNvZGUiLCJ3cmFwQW5zaTI1NiIsIndyYXBBbnNpMTZtIiwicmVkIiwiZ3JlZW4iLCJibHVlIiwic3R5bGVzIiwibW9kaWZpZXIiLCJyZXNldCIsImJvbGQiLCJkaW0iLCJpdGFsaWMiLCJ1bmRlcmxpbmUiLCJvdmVybGluZSIsImludmVyc2UiLCJzdHJpa2V0aHJvdWdoIiwiY29sb3IiLCJibGFjayIsInllbGxvdyIsIm1hZ2VudGEiLCJjeWFuIiwid2hpdGUiLCJibGFja0JyaWdodCIsImdyYXkiLCJncmV5IiwicmVkQnJpZ2h0IiwiZ3JlZW5CcmlnaHQiLCJ5ZWxsb3dCcmlnaHQiLCJibHVlQnJpZ2h0IiwibWFnZW50YUJyaWdodCIsImN5YW5CcmlnaHQiLCJ3aGl0ZUJyaWdodCIsImJnQ29sb3IiLCJiZ0JsYWNrIiwiYmdSZWQiLCJiZ0dyZWVuIiwiYmdZZWxsb3ciLCJiZ0JsdWUiLCJiZ01hZ2VudGEiLCJiZ0N5YW4iLCJiZ1doaXRlIiwiYmdCbGFja0JyaWdodCIsImJnR3JheSIsImJnR3JleSIsImJnUmVkQnJpZ2h0IiwiYmdHcmVlbkJyaWdodCIsImJnWWVsbG93QnJpZ2h0IiwiYmdCbHVlQnJpZ2h0IiwiYmdNYWdlbnRhQnJpZ2h0IiwiYmdDeWFuQnJpZ2h0IiwiYmdXaGl0ZUJyaWdodCIsIk9iamVjdCIsImtleXMiLCJhbnNpU3R5bGVzIiwiY29kZXMiLCJNYXAiLCJncm91cE5hbWUiLCJncm91cCIsImVudHJpZXMiLCJzdHlsZU5hbWUiLCJvcGVuIiwiY2xvc2UiLCJzZXQiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImFuc2kiLCJhbnNpMjU2IiwiYW5zaTE2bSIsImRlZmluZVByb3BlcnRpZXMiLCJyZ2JUb0Fuc2kyNTYiLCJyb3VuZCIsImhleFRvUmdiIiwiaGV4IiwibWF0Y2hlcyIsImV4ZWMiLCJjb2xvclN0cmluZyIsImludGVnZXIiLCJwYXJzZUludCIsImhleFRvQW5zaTI1NiIsImFuc2kyNTZUb0Fuc2kiLCJyZW1haW5kZXIiLCJyZXN1bHQiLCJyZ2JUb0Fuc2kiLCJoZXhUb0Fuc2kiLCJhc3NlbWJsZVN0eWxlcyIsIkVTQ0FQRVMiLCJTZXQiLCJBTlNJX0VTQ0FQRV9MSU5LIiwid3JhcEFuc2lDb2RlIiwidmFsdWVzIiwibmV4dCIsIndyYXBBbnNpSHlwZXJsaW5rIiwidXJsIiwid3JhcFdvcmQiLCJ3b3JkIiwiY2hhcmFjdGVycyIsImlzSW5zaWRlRXNjYXBlIiwiaXNJbnNpZGVMaW5rRXNjYXBlIiwidmlzaWJsZSIsImF0IiwiaW5kZXgiLCJjaGFyYWN0ZXJMZW5ndGgiLCJoYXMiLCJzbGljZSIsInBvcCIsImVzY2FwZUNvZGUiLCJlc2NhcGVVcmwiLCJyZXR1cm5WYWx1ZSIsImxlbmd0aHMiLCJ3b3JkTGVuZ3RocyIsInRyaW1TdGFydCIsInJvd0xlbmd0aCIsIndvcmRXcmFwIiwicmVtYWluaW5nQ29sdW1ucyIsImJyZWFrc1N0YXJ0aW5nVGhpc0xpbmUiLCJ3b3JkcyIsImxhc3QiLCJzdHJpbmdWaXNpYmxlVHJpbVNwYWNlc1JpZ2h0IiwicHJlU3RyaW5nIiwicHJlIiwicHJlU3RyaW5nSW5kZXgiLCJncm91cHMiLCJwYXJzZUZsb2F0IiwidXJpIiwiZ2V0Iiwid3JhcEFuc2kiLCJTdHJpbmciLCJub3JtYWxpemUiLCJyZXBsYWNlQWxsIiwiY2FtZWxDYXNlIiwidG9Mb3dlckNhc2UiLCJ0b1VwcGVyQ2FzZSIsImluZGV4T2YiLCJjYW1lbGNhc2UiLCJuZXh0Q2hyVXBwZXIiLCJsZWFkaW5nSHlwaGVucyIsImNociIsImNoYXJBdCIsImRlY2FtZWxpemUiLCJqb2luU3RyaW5nIiwibG93ZXJjYXNlIiwibm90Q2FtZWxjYXNlIiwiY2hyTG93ZXIiLCJjaHJTdHJpbmciLCJsb29rc0xpa2VOdW1iZXIiLCJEZWZhdWx0VmFsdWVzRm9yVHlwZUtleSIsImluY3JlbWVudCIsIm9yaWciLCJzYW5pdGl6ZUtleSIsImtleSIsIl9iIiwiX2MiLCJtaW5Ob2RlVmVyc2lvbiIsInByb2Nlc3MiLCJlbnYiLCJZQVJHU19NSU5fTk9ERV9WRVJTSU9OIiwibm9kZVZlcnNpb24iLCJ2ZXJzaW9ucyIsIm5vZGUiLCJ2ZXJzaW9uIiwiRXJyb3IiLCJyZXF1aXJlIiwiY3JlYXRlUmVxdWlyZSIsInBhcnNlciIsIl9taXhpbiIsInBhcnNlIiwiYXJnc0lucHV0IiwiYXNzaWduIiwiYWxpYXMiLCJhcnJheSIsImJvb2xlYW4iLCJjb25maWciLCJjb25maWdPYmplY3RzIiwiY29uZmlndXJhdGlvbiIsImNvZXJjZSIsImNvdW50IiwiZGVmYXVsdCIsImVudlByZWZpeCIsIm5hcmciLCJudW1iZXIiLCJfXyIsImFyZ1N0cmluZyIsImlzQXJyYXkiLCJlIiwicHJldkMiLCJvcGVuaW5nIiwiaWkiLCJ0b2tlbml6ZUFyZ1N0cmluZyIsImlucHV0SXNTdHJpbmciLCJhbGlhc2VzIiwiYWxpYXNBcnJheXMiLCJjb21iaW5lZCIsImNyZWF0ZSIsImNoYW5nZSIsImNvbmNhdCIsInYiLCJzcGxpY2UiLCJhbGlhc0FycmF5IiwibGFzdEFsaWFzIiwic2VsZiIsImNvbWJpbmVBbGlhc2VzIiwiZGVmYXVsdHMiLCJub3RGbGFnc09wdGlvbiIsIm5vdEZsYWdzQXJndiIsIm5ld0FsaWFzZXMiLCJkZWZhdWx0ZWQiLCJmb3JtYXQiLCJmbGFncyIsImFycmF5cyIsImJvb2xzIiwic3RyaW5ncyIsIm51bWJlcnMiLCJjb3VudHMiLCJjb25maWdzIiwibmFyZ3MiLCJjb2VyY2lvbnMiLCJuZWdhdGl2ZSIsIm5lZ2F0ZWRCb29sZWFuIiwiQm9vbGVhbiIsIm9wdCIsImFzc2lnbm1lbnQiLCJvYmoiLCJ5IiwiZXh0ZW5kQWxpYXNlcyIsImVycm9yIiwiZmluZCIsImNoZWNrQWxsQWxpYXNlcyIsIm5vdEZsYWdzIiwiYXJndiIsIl8iLCJhcmd2UmV0dXJuIiwidHJ1bmNhdGVkQXJnIiwiYnJva2VuIiwibGV0dGVycyIsIm0iLCJpc1Vua25vd25PcHRpb25Bc0FyZyIsInB1c2hQb3NpdGlvbmFsIiwiZWF0QXJyYXkiLCJlYXROYXJncyIsInNldEFyZyIsImRlZmF1bHRWYWx1ZSIsImoiLCJtYXliZUNvZXJjZWROdW1iZXIiLCJtYXliZUNvZXJjZU51bWJlciIsImFyZ0FmdGVyRXF1YWxTaWduIiwidG9FYXQiLCJpc05hTiIsImlzVW5kZWZpbmVkIiwiYXZhaWxhYmxlIiwiY29uc3VtZWQiLCJhcmdzVG9TZXQiLCJuYXJnc0NvdW50IiwiZGVmVmFsIiwicHJvY2Vzc1ZhbHVlIiwidmFsIiwic2hvdWxkU3RyaXBRdW90ZXMiLCJwcm9wIiwiYWRkTmV3QWxpYXMiLCJzcGxpdEtleSIsInNldEtleSIsImtleVByb3BlcnRpZXMiLCJhIiwic2hpZnQiLCJpbmNsdWRlcyIsInN1YnN0cmluZyIsInN0cmlwUXVvdGVzIiwic2V0Q29uZmlnT2JqZWN0IiwicHJldiIsImZ1bGxLZXkiLCJoYXNLZXkiLCJhcHBseUVudlZhcnMiLCJjb25maWdPbmx5IiwicHJlZml4IiwiZW52VmFyIiwibGFzdEluZGV4T2YiLCJhcHBseURlZmF1bHRzQW5kQWxpYXNlcyIsImNhbkxvZyIsIm8iLCJpc1R5cGVBcnJheSIsImlzVmFsdWVBcnJheSIsImR1cGxpY2F0ZSIsImZsYWciLCJ0b0NoZWNrIiwic2V0QWxpYXMiLCJoYXNBbnlGbGFnIiwiZmxhZ3NLZXlzIiwiayIsInNvbWUiLCJoYXNBbGxGbGFncyIsImhhc0FsbFNob3J0RmxhZ3MiLCJwYXR0ZXJucyIsInBhdHRlcm4iLCJoYXNGbGFnc01hdGNoaW5nIiwiaXNVbmtub3duT3B0aW9uIiwidHlwZSIsIkJPT0xFQU4iLCJTVFJJTkciLCJOVU1CRVIiLCJBUlJBWSIsImd1ZXNzVHlwZSIsIm51bSIsImNvbmZpZ0xvb2t1cCIsImNvbmZpZ0tleSIsImNvbmZpZ1BhdGgiLCJyZXNvbHZlZENvbmZpZ1BhdGgiLCJyZXNvbHZlIiwiY3dkIiwicmVzb2x2ZUNvbmZpZyIsImV4IiwibmFtZSIsInNldENvbmZpZyIsImNvbmZpZ09iamVjdCIsImFwcGxpZWQiLCJhbGkiLCJhZGQiLCJlcnIiLCJhcHBseUNvZXJjaW9ucyIsInNldFBsYWNlaG9sZGVyS2V5cyIsInBhdGgiLCJKU09OIiwicmVhZEZpbGVTeW5jIiwieWFyZ3NQYXJzZXIiLCJnZXRQcm9jZXNzQXJndkJpbkluZGV4IiwiZWxlY3Ryb24iLCJkZWZhdWx0QXBwIiwiZGV0YWlsZWQiLCJzaGltJDMiLCJmcyIsIndyaXRlRmlsZSIsImV4aXN0cyIsImZpbGUiLCJzdGF0U3luYyIsImlzRmlsZSIsInNoaW0iLCJZMThOIiwiZGlyZWN0b3J5IiwidXBkYXRlRmlsZXMiLCJsb2NhbGUiLCJmYWxsYmFja1RvTGFuZ3VhZ2UiLCJjYWNoZSIsIndyaXRlUXVldWUiLCJhcmd1bWVudHMiLCJfdGFnZ2VkTGl0ZXJhbCIsImNiIiwiX3JlYWRMb2NhbGVGaWxlIiwiX2VucXVldWVXcml0ZSIsImFwcGx5IiwiX19uIiwicHJvdG90eXBlIiwiY2FsbCIsInNpbmd1bGFyIiwicGx1cmFsIiwicXVhbnRpdHkiLCJvbmUiLCJvdGhlciIsInNldExvY2FsZSIsImdldExvY2FsZSIsInVwZGF0ZUxvY2FsZSIsImhhc093blByb3BlcnR5IiwicGFydHMiLCJwYXJ0Iiwid29yayIsIl9wcm9jZXNzV3JpdGVRdWV1ZSIsIl90aGlzIiwibGFuZ3VhZ2VGaWxlIiwiX3Jlc29sdmVMb2NhbGVGaWxlIiwic2VyaWFsaXplZExvY2FsZSIsInN0cmluZ2lmeSIsImxvY2FsZUxvb2t1cCIsIlN5bnRheEVycm9yIiwibWVzc2FnZSIsIl9maWxlRXhpc3RzU3luYyIsImdldENhbGxlckZpbGUiLCJwb3NpdGlvbiIsInN0YWNrVHJhY2VMaW1pdCIsIm9sZFByZXBhcmVTdGFja1RyYWNlIiwicHJlcGFyZVN0YWNrVHJhY2UiLCJzdGFjayIsImdldEZpbGVOYW1lIiwiX19kaXJuYW1lIiwiZmlsZVVSTFRvUGF0aCIsIm1haW5GaWxlbmFtZSIsInNoaW0kMSIsImFzc2VydCIsIm5vdFN0cmljdEVxdWFsIiwic3RyaWN0RXF1YWwiLCJjbGl1aSIsInN0ZG91dCIsImZpbmRVcCIsInN0YXJ0IiwiY2FsbGJhY2siLCJ0bXAiLCJkaXIiLCJpc0RpcmVjdG9yeSIsImRpcm5hbWUiLCJyZWFkZGlyU3luYyIsImdldEVudiIsImluc3BlY3QiLCJnZXRQcm9jZXNzQXJndkJpbiIsIlBhcnNlciIsImJhc2VuYW1lIiwiZXh0bmFtZSIsInJlbGF0aXZlIiwiZW1pdFdhcm5pbmciLCJ3YXJuaW5nIiwiZXhlY1BhdGgiLCJleGl0IiwibmV4dFRpY2siLCJzdGRDb2x1bW5zIiwiY2FsbGVyRmlsZSIsInkxOG4iLCJfc2hpbSIsImJpbmQiLCJfeTE4biIsImFzc2VydE5vdFN0cmljdEVxdWFsIiwiYWN0dWFsIiwiZXhwZWN0ZWQiLCJhc3NlcnRTaW5nbGVLZXkiLCJvYmplY3RLZXlzIiwib2JqZWN0IiwiaXNQcm9taXNlIiwibWF5YmVQcm9taXNlIiwidGhlbiIsIllFcnJvciIsIm1zZyIsInN1cGVyIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJwYXJzZUNvbW1hbmQiLCJjbWQiLCJzcGxpdENvbW1hbmQiLCJicmVnZXgiLCJmaXJzdENvbW1hbmQiLCJwYXJzZWRDb21tYW5kIiwiZGVtYW5kZWQiLCJvcHRpb25hbCIsInZhcmlhZGljIiwicG9zaXRpb25OYW1lIiwiYXJnc2VydCIsImFyZzEiLCJhcmcyIiwiYXJnMyIsInBhcnNlZCIsImNhbGxlckFyZ3VtZW50cyIsIl9sZW5ndGgiLCJ0b3RhbENvbW1hbmRzIiwib2JzZXJ2ZWRUeXBlIiwiYXJndW1lbnRUeXBlRXJyb3IiLCJjb25zb2xlIiwid2FybiIsImFsbG93ZWRUeXBlcyIsIkdsb2JhbE1pZGRsZXdhcmUiLCJ5YXJncyIsImdsb2JhbE1pZGRsZXdhcmUiLCJmcm96ZW5zIiwiYWRkTWlkZGxld2FyZSIsImFwcGx5QmVmb3JlVmFsaWRhdGlvbiIsImdsb2JhbCIsIm11dGF0ZXMiLCJhZGRDb2VyY2VNaWRkbGV3YXJlIiwib3B0aW9uIiwiZ2V0QWxpYXNlcyIsImdldE1pZGRsZXdhcmUiLCJmcmVlemUiLCJ1bmZyZWV6ZSIsImZyb3plbiIsImFwcGx5TWlkZGxld2FyZSIsIm1pZGRsZXdhcmVzIiwiYmVmb3JlVmFsaWRhdGlvbiIsInJlZHVjZSIsImFjYyIsIm1pZGRsZXdhcmUiLCJpbml0aWFsT2JqIiwiUHJvbWlzZSIsImFsbCIsIm1pZGRsZXdhcmVPYmoiLCJtYXliZUFzeW5jUmVzdWx0IiwiZ2V0UmVzdWx0IiwicmVzdWx0SGFuZGxlciIsImVycm9ySGFuZGxlciIsIkRFRkFVTFRfTUFSS0VSIiwiQ29tbWFuZEluc3RhbmNlIiwidXNhZ2UiLCJ2YWxpZGF0aW9uIiwicmVxdWlyZUNhY2hlIiwiaGFuZGxlcnMiLCJhbGlhc01hcCIsImFkZERpcmVjdG9yeSIsInJlcSIsImZ1bGxEaXJQYXRoIiwiZmlsZXMiLCJyZWN1cnNpdmUiLCJyZWN1cnNlIiwiZXh0ZW5zaW9ucyIsInZpc2l0IiwiZmlsZWIiLCJleGNsdWRlIiwiaW5jbHVkZSIsInN1cHBvcnRlZEV4dGVuc2lvbiIsImV4dCIsImVuZHNXaXRoIiwiam9pbmVkIiwibW9kdWxlIiwiZXh0ZW5kYWJsZU1vZHVsZSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJjb21tYW5kIiwiYWRkSGFuZGxlciIsImRlc2NyaXB0aW9uIiwiYnVpbGRlciIsImhhbmRsZXIiLCJjb21tYW5kTWlkZGxld2FyZSIsImRlcHJlY2F0ZWQiLCJjb21tYW5kTWlkZGxld2FyZUZhY3RvcnkiLCJldmVyeSIsImlzQ29tbWFuZEFuZEFsaWFzZXMiLCJpc0NvbW1hbmRIYW5kbGVyRGVmaW5pdGlvbiIsImV4dHJhY3REZXNjIiwiaXNDb21tYW5kQnVpbGRlckRlZmluaXRpb24iLCJpc0RlZmF1bHQiLCJwYXJzZWRBbGlhc2VzIiwib3JpZ2luYWwiLCJkZWZhdWx0Q29tbWFuZCIsImdldENvbW1hbmRIYW5kbGVycyIsImdldENvbW1hbmRzIiwiaGFzRGVmYXVsdENvbW1hbmQiLCJydW5Db21tYW5kIiwiY29tbWFuZEluZGV4IiwiaGVscE9ubHkiLCJoZWxwT3JWZXJzaW9uU2V0IiwiY29tbWFuZEhhbmRsZXIiLCJjdXJyZW50Q29udGV4dCIsImdldEludGVybmFsTWV0aG9kcyIsImdldENvbnRleHQiLCJwYXJlbnRDb21tYW5kcyIsImNvbW1hbmRzIiwiaXNEZWZhdWx0Q29tbWFuZCIsImZ1bGxDb21tYW5kcyIsImJ1aWxkZXJSZXN1bHQiLCJhcHBseUJ1aWxkZXJVcGRhdGVVc2FnZUFuZFBhcnNlIiwiYXBwbHlNaWRkbGV3YXJlQW5kR2V0UmVzdWx0IiwiaW5uZXJBcmd2IiwiaW5uZXJZYXJncyIsImlzQ29tbWFuZEJ1aWxkZXJDYWxsYmFjayIsImdldFVzYWdlSW5zdGFuY2UiLCJidWlsZGVyT3V0cHV0Iiwib3V0cHV0IiwicGFyc2VBbmRVcGRhdGVVc2FnZSIsImlzQ29tbWFuZEJ1aWxkZXJPcHRpb25EZWZpbml0aW9ucyIsInNob3VsZFVwZGF0ZVVzYWdlIiwidXNhZ2VGcm9tUGFyZW50Q29tbWFuZHNDb21tYW5kSGFuZGxlciIsInJ1bllhcmdzUGFyc2VyQW5kRXhlY3V0ZUNvbW1hbmRzIiwiZ2V0VXNhZ2VEaXNhYmxlZCIsImdldFVzYWdlIiwicGMiLCJoYW5kbGVWYWxpZGF0aW9uQW5kR2V0UmVzdWx0IiwicG9zaXRpb25hbE1hcCIsImdldEhhc091dHB1dCIsInJ1blZhbGlkYXRpb24iLCJzZXRIYXNPdXRwdXQiLCJwb3B1bGF0ZURvdWJsZURhc2giLCJnZXRPcHRpb25zIiwicG9zdFByb2Nlc3MiLCJoYW5kbGVyUmVzdWx0IiwiY2FjaGVIZWxwTWVzc2FnZSIsImhhc1BhcnNlQ2FsbGJhY2siLCJjYXRjaCIsImZhaWwiLCJfZXJyIiwicG9wdWxhdGVQb3NpdGlvbmFscyIsIm1heWJlUHJvbWlzZUFyZ3YiLCJyZXNvbHZlZElubmVyQXJndiIsImNvbnRleHQiLCJwb3NpdGlvbmFsQ291bnQiLCJkZW1hbmQiLCJwb3B1bGF0ZVBvc2l0aW9uYWwiLCJtYXliZSIsInBvc3RQcm9jZXNzUG9zaXRpb25hbHMiLCJjbWRUb1BhcnNlT3B0aW9ucyIsInBvc2l0aW9uYWwiLCJjbWRTdHJpbmciLCJwYXJzZU9wdGlvbnMiLCJkIiwidW5wYXJzZWQiLCJwb3NpdGlvbmFsS2V5cyIsImlzSW5Db25maWdzIiwiaXNEZWZhdWx0ZWQiLCJydW5EZWZhdWx0QnVpbGRlck9uIiwiY29tbWFuZFN0cmluZyIsImRlc2NyaWJlIiwiZGVzYyIsIm9iakZpbHRlciIsInNldEJsb2NraW5nIiwiYmxvY2tpbmciLCJzdGRlcnIiLCJfc3RyZWFtIiwic3RyZWFtIiwiX2hhbmRsZSIsImlzVFRZIiwiaXNCb29sZWFuIiwiZmFpbHMiLCJmYWlsRm4iLCJmIiwiZmFpbE1lc3NhZ2UiLCJnbG9iYWxGYWlsTWVzc2FnZSIsInNob3dIZWxwT25GYWlsIiwiZW5hYmxlZCIsImlzR2xvYmFsQ29udGV4dCIsImZhaWx1cmVPdXRwdXQiLCJsb2dnZXIiLCJnZXRMb2dnZXJJbnN0YW5jZSIsImdldEV4aXRQcm9jZXNzIiwic2hvd0hlbHAiLCJnbG9iYWxPckNvbW1hbmRGYWlsTWVzc2FnZSIsInVzYWdlcyIsInVzYWdlRGlzYWJsZWQiLCJnZXRQb3NpdGlvbmFsR3JvdXBOYW1lIiwiZXhhbXBsZXMiLCJleGFtcGxlIiwiY21kQXJyYXkiLCJkZXNjcmlwdGlvbnMiLCJrZXlPcktleXMiLCJnZXREZXNjcmlwdGlvbnMiLCJlcGlsb2dzIiwiZXBpbG9nIiwid3JhcFNldCIsImdldFdyYXAiLCJtYXhXaWR0aCIsIndpbmRvd1dpZHRoIiwiZGVmZXJZMThuTG9va3VwUHJlZml4IiwidGFibGUiLCJ0aGVXcmFwIiwiZ2V0VGV4dCIsImdldEluZGVudGF0aW9uIiwiY2FjaGVkSGVscE1lc3NhZ2UiLCJmaWx0ZXJIaWRkZW5PcHRpb25zIiwiaGlkZGVuT3B0aW9ucyIsInNob3dIaWRkZW5PcHQiLCJkZWZhdWx0U3RyaW5nIiwiZGVmYXVsdERlc2NyaXB0aW9uIiwiZGVmZXJZMThuTG9va3VwIiwiaGVscCIsImRlbWFuZGVkT3B0aW9ucyIsImdldERlbWFuZGVkT3B0aW9ucyIsImRlbWFuZE9wdGlvbiIsIm5vcm1hbGl6ZUFsaWFzZXMiLCJiYXNlJDAiLCJjdXN0b21TY3JpcHROYW1lIiwiJDAiLCJkZW1hbmRlZENvbW1hbmRzIiwiZ2V0RGVtYW5kZWRDb21tYW5kcyIsImRlcHJlY2F0ZWRPcHRpb25zIiwiZ2V0RGVwcmVjYXRlZE9wdGlvbnMiLCJnZXRHcm91cHMiLCJ1aSIsInUiLCJnZXRQYXJzZXJDb25maWd1cmF0aW9uIiwic29ydCIsImIiLCJsb2NhbGVDb21wYXJlIiwiaGludHMiLCJhbGlhc0tleXMiLCJkZWZhdWx0R3JvdXAiLCJncm91cGVkS2V5cyIsImFkZFVuZ3JvdXBlZEtleXMiLCJpc0xvbmdTd2l0Y2giLCJzdyIsImRpc3BsYXllZEdyb3VwcyIsIm5vcm1hbGl6ZWRLZXlzIiwiYWxpYXNLZXkiLCJzd2l0Y2hlcyIsInN3MSIsInN3MiIsImluZGVudCIsImlzSW5kZW50ZWRUZXh0IiwiaW5kZW50YXRpb24iLCJrc3dpdGNoIiwiZXh0cmEiLCJjaG9pY2VzIiwic3RyaW5naWZpZWRWYWx1ZXMiLCJzaG91bGRIaWRlT3B0aW9uRXh0cmFzIiwiZ2V0VXNhZ2VDb25maWd1cmF0aW9uIiwiY2xlYXJDYWNoZWRIZWxwTWVzc2FnZSIsImhhc0NhY2hlZEhlbHBNZXNzYWdlIiwibGV2ZWwiLCJmdW5jdGlvbkRlc2NyaXB0aW9uIiwic2VwYXJhdG9yIiwic2VwIiwidmVyIiwic2hvd1ZlcnNpb24iLCJsb2NhbExvb2t1cCIsIkNvbXBsZXRpb24iLCJjb21wbGV0aW9uS2V5IiwiY3VzdG9tQ29tcGxldGlvbkZ1bmN0aW9uIiwiaW5kZXhBZnRlckxhc3RSZXNldCIsInpzaFNoZWxsIiwiZGVmYXVsdENvbXBsZXRpb24iLCJjdXJyZW50IiwiZG9uZSIsImNvbXBsZXRpb25zIiwiY29tbWFuZENvbXBsZXRpb25zIiwib3B0aW9uQ29tcGxldGlvbnMiLCJjaG9pY2VzRnJvbU9wdGlvbnNDb21wbGV0aW9ucyIsImNob2ljZXNGcm9tUG9zaXRpb25hbHNDb21wbGV0aW9ucyIsInByZXZpb3VzQXJnSGFzQ2hvaWNlcyIsInVzYWdlQ29tbWFuZCIsImNvbW1hbmROYW1lIiwibmVnYWJsZSIsImFyZ3NDb250YWluS2V5IiwiY29tcGxldGVPcHRpb25LZXkiLCJnZXRQcmV2aW91c0FyZ0Nob2ljZXMiLCJwb3NpdGlvbmFsS2V5IiwiY2hvaWNlIiwic3RhcnRzV2l0aCIsInByZXZpb3VzQXJnIiwicHJldmlvdXNBcmdLZXkiLCJwb3NzaWJsZUFsaWFzZXMiLCJwb3NzaWJsZUFsaWFzIiwiYXJnc0NvbnRhaW5zIiwicyIsIl9kIiwia2V5V2l0aERlc2MiLCJkZXNjcyIsImRlc2NGcm9tQWxpYXMiLCJkYXNoZXMiLCJpc1Nob3J0T3B0aW9uIiwiY3VzdG9tQ29tcGxldGlvbiIsImxpc3QiLCJjb21wbGV0aW9uRnVuY3Rpb24iLCJpc0ZhbGxiYWNrQ29tcGxldGlvbkZ1bmN0aW9uIiwib25Db21wbGV0ZWQiLCJnZXRDb21wbGV0aW9uIiwiZ2VuZXJhdGVDb21wbGV0aW9uU2NyaXB0Iiwic2NyaXB0IiwicmVnaXN0ZXJGdW5jdGlvbiIsInNldFBhcnNlZCIsImxldmVuc2h0ZWluIiwibWF0cml4Iiwic3BlY2lhbEtleXMiLCJwcmV2aW91c2x5VmlzaXRlZENvbmZpZ3MiLCJhcHBseUV4dGVuZHMiLCJtZXJnZUV4dGVuZHMiLCJkZWZhdWx0Q29uZmlnIiwiZXh0ZW5kcyIsImlzUGF0aCIsInBhdGhUb0RlZmF1bHQiLCJwYXRoVG9FeHRlbmQiLCJnZXRQYXRoVG9EZWZhdWx0Q29uZmlnIiwiY2ZnUGF0aCIsImNoZWNrRm9yQ2lyY3VsYXJFeHRlbmRzIiwibWVyZ2VEZWVwIiwiY29uZmlnMSIsImNvbmZpZzIiLCJpc09iamVjdCIsIl9ZYXJnc0luc3RhbmNlX2NvbW1hbmQiLCJfWWFyZ3NJbnN0YW5jZV9jd2QiLCJfWWFyZ3NJbnN0YW5jZV9jb250ZXh0IiwiX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbiIsIl9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb25Db21tYW5kIiwiX1lhcmdzSW5zdGFuY2VfZGVmYXVsdFNob3dIaWRkZW5PcHQiLCJfWWFyZ3NJbnN0YW5jZV9leGl0RXJyb3IiLCJfWWFyZ3NJbnN0YW5jZV9kZXRlY3RMb2NhbGUiLCJfWWFyZ3NJbnN0YW5jZV9lbWl0dGVkV2FybmluZ3MiLCJfWWFyZ3NJbnN0YW5jZV9leGl0UHJvY2VzcyIsIl9ZYXJnc0luc3RhbmNlX2Zyb3plbnMiLCJfWWFyZ3NJbnN0YW5jZV9nbG9iYWxNaWRkbGV3YXJlIiwiX1lhcmdzSW5zdGFuY2VfZ3JvdXBzIiwiX1lhcmdzSW5zdGFuY2VfaGFzT3V0cHV0IiwiX1lhcmdzSW5zdGFuY2VfaGVscE9wdCIsIl9ZYXJnc0luc3RhbmNlX2lzR2xvYmFsQ29udGV4dCIsIl9ZYXJnc0luc3RhbmNlX2xvZ2dlciIsIl9ZYXJnc0luc3RhbmNlX291dHB1dCIsIl9ZYXJnc0luc3RhbmNlX29wdGlvbnMiLCJfWWFyZ3NJbnN0YW5jZV9wYXJlbnRSZXF1aXJlIiwiX1lhcmdzSW5zdGFuY2VfcGFyc2VyQ29uZmlnIiwiX1lhcmdzSW5zdGFuY2VfcGFyc2VGbiIsIl9ZYXJnc0luc3RhbmNlX3BhcnNlQ29udGV4dCIsIl9ZYXJnc0luc3RhbmNlX3BrZ3MiLCJfWWFyZ3NJbnN0YW5jZV9wcmVzZXJ2ZWRHcm91cHMiLCJfWWFyZ3NJbnN0YW5jZV9wcm9jZXNzQXJncyIsIl9ZYXJnc0luc3RhbmNlX3JlY29tbWVuZENvbW1hbmRzIiwiX1lhcmdzSW5zdGFuY2Vfc2hpbSIsIl9ZYXJnc0luc3RhbmNlX3N0cmljdCIsIl9ZYXJnc0luc3RhbmNlX3N0cmljdENvbW1hbmRzIiwiX1lhcmdzSW5zdGFuY2Vfc3RyaWN0T3B0aW9ucyIsIl9ZYXJnc0luc3RhbmNlX3VzYWdlIiwiX1lhcmdzSW5zdGFuY2VfdXNhZ2VDb25maWciLCJfWWFyZ3NJbnN0YW5jZV92ZXJzaW9uT3B0IiwiX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiIsIl9fY2xhc3NQcml2YXRlRmllbGRTZXQiLCJyZWNlaXZlciIsInN0YXRlIiwia2luZCIsIl9fY2xhc3NQcml2YXRlRmllbGRHZXQiLCJrQ29weURvdWJsZURhc2giLCJTeW1ib2wiLCJrQ3JlYXRlTG9nZ2VyIiwia0RlbGV0ZUZyb21QYXJzZXJIaW50T2JqZWN0Iiwia0VtaXRXYXJuaW5nIiwia0ZyZWV6ZSIsImtHZXREb2xsYXJaZXJvIiwia0dldFBhcnNlckNvbmZpZ3VyYXRpb24iLCJrR2V0VXNhZ2VDb25maWd1cmF0aW9uIiwia0d1ZXNzTG9jYWxlIiwia0d1ZXNzVmVyc2lvbiIsImtQYXJzZVBvc2l0aW9uYWxOdW1iZXJzIiwia1BrZ1VwIiwia1BvcHVsYXRlUGFyc2VySGludEFycmF5Iiwia1BvcHVsYXRlUGFyc2VySGludFNpbmdsZVZhbHVlRGljdGlvbmFyeSIsImtQb3B1bGF0ZVBhcnNlckhpbnRBcnJheURpY3Rpb25hcnkiLCJrUG9wdWxhdGVQYXJzZXJIaW50RGljdGlvbmFyeSIsImtTYW5pdGl6ZUtleSIsImtTZXRLZXkiLCJrVW5mcmVlemUiLCJrVmFsaWRhdGVBc3luYyIsImtHZXRDb21tYW5kSW5zdGFuY2UiLCJrR2V0Q29udGV4dCIsImtHZXRIYXNPdXRwdXQiLCJrR2V0TG9nZ2VySW5zdGFuY2UiLCJrR2V0UGFyc2VDb250ZXh0Iiwia0dldFVzYWdlSW5zdGFuY2UiLCJrR2V0VmFsaWRhdGlvbkluc3RhbmNlIiwia0hhc1BhcnNlQ2FsbGJhY2siLCJrSXNHbG9iYWxDb250ZXh0Iiwia1Bvc3RQcm9jZXNzIiwia1JlYmFzZSIsImtSZXNldCIsImtSdW5ZYXJnc1BhcnNlckFuZEV4ZWN1dGVDb21tYW5kcyIsImtSdW5WYWxpZGF0aW9uIiwia1NldEhhc091dHB1dCIsImtUcmFja01hbnVhbGx5U2V0S2V5cyIsIllhcmdzSW5zdGFuY2UiLCJwcm9jZXNzQXJncyIsInBhcmVudFJlcXVpcmUiLCJhZGRIZWxwT3B0IiwiYWRkU2hvd0hpZGRlbk9wdCIsInNob3dIaWRkZW4iLCJjaGVjayIsIl95YXJncyIsImNvZXJjZUtleSIsImNvZXJjZUtleUFsaWFzZXMiLCJhcmd2S2V5cyIsImNvbmZsaWN0cyIsImtleTEiLCJrZXkyIiwicGFyc2VGbiIsImNvbXBsZXRpb24iLCJjb21tYW5kRGlyIiwiZGVtYW5kQ29tbWFuZCIsIm1pbk1zZyIsIm1heE1zZyIsIkluZmluaXR5IiwiZGVwcmVjYXRlT3B0aW9uIiwiZGV0ZWN0TG9jYWxlIiwiZGV0ZWN0IiwiZXBpbG9ndWUiLCJleGFtcGxlUGFyYW1zIiwiZXhpdFByb2Nlc3MiLCJyZWplY3QiLCJnZXREZXRlY3RMb2NhbGUiLCJnZXRIZWxwIiwiYnVpbGRlclJlc3BvbnNlIiwiZ2V0U3RyaWN0IiwiZ2V0U3RyaWN0Q29tbWFuZHMiLCJnZXRTdHJpY3RPcHRpb25zIiwiZ2xvYmFscyIsImxvY2FsIiwibCIsImciLCJleGlzdGluZyIsInNlZW4iLCJoaWRlIiwiaW1wbGllcyIsImRlcHJlY2F0ZSIsInJlcXVpcmVkIiwiY29uZmlnUGFyc2VyIiwic2tpcFZhbGlkYXRpb24iLCJyZXF1aXJlc0FyZyIsInNob3J0Q2lyY3VpdCIsIl9wYXJzZUZuIiwidG1wUGFyc2VkIiwiZmluYWxseSIsInBhcnNlQXN5bmMiLCJwYXJzZVN5bmMiLCJwYXJzZXJDb25maWd1cmF0aW9uIiwicGtnQ29uZiIsInJvb3RQYXRoIiwiY29uZiIsInN1cHBvcnRlZE9wdHMiLCJmdWxsQ29tbWFuZCIsInBrIiwicGFyc2VPcHRpb24iLCJyZWNvbW1lbmRDb21tYW5kcyIsInJlY29tbWVuZCIsIk5hTiIsInNob3dDb21wbGV0aW9uU2NyaXB0IiwibG9nIiwic2NyaXB0TmFtZSIsInN0cmljdCIsInN0cmljdENvbW1hbmRzIiwic3RyaWN0T3B0aW9ucyIsInRlcm1pbmFsV2lkdGgiLCJ1cGRhdGVTdHJpbmdzIiwidXNhZ2VDb25maWd1cmF0aW9uIiwiZGVmYXVsdFZlcnNpb25PcHQiLCJXZWFrTWFwIiwib3B0aW9uS2V5IiwiaGludEtleSIsImhpbnQiLCJkZWR1cGxpY2F0aW9uSWQiLCJjb21wbGV0aW9uQ29tbWFuZCIsImV4aXRFcnJvciIsImhhc091dHB1dCIsInBhcnNlQ29udGV4dCIsImRlZmF1bHQkMCIsIm5wYXRoIiwic3RhcnREaXIiLCJwa2dKc29uUGF0aCIsIm5hbWVzIiwiX25vb3AiLCJzaW5nbGVLZXlIYW5kbGVyIiwiX2UiLCJfZiIsIl9nIiwiX2giLCJfaiIsIl9rIiwiX2wiLCJfbSIsIl9vIiwiZ2V0Q29tbWFuZEluc3RhbmNlIiwiZ2V0UGFyc2VDb250ZXh0IiwiZ2V0VmFsaWRhdGlvbkluc3RhbmNlIiwiY2FsbGVkRnJvbUNvbW1hbmQiLCJydW5HbG9iYWxNaWRkbGV3YXJlIiwidG1wT3B0aW9ucyIsIlVzYWdlIiwiX3MiLCJvYnNlcnZlZCIsIm1pc3NpbmciLCJjdXN0b21Nc2dzIiwiY3VzdG9tTXNnIiwiY2hlY2tQb3NpdGlvbmFscyIsImNvbW1hbmRLZXlzIiwidW5rbm93biIsImlzVmFsaWRBbmRTb21lQWxpYXNJc05vdE5ldyIsIm1heE5vbk9wdERlbWFuZGVkIiwiaW52YWxpZCIsImludmFsaWRLZXlzIiwiaW1wbGllZCIsImtleUV4aXN0cyIsImdldEltcGxpZWQiLCJpbXBsaWNhdGlvbnMiLCJpbXBseUZhaWwiLCJvcmlnS2V5Iiwib3JpZ1ZhbHVlIiwiY29uZmxpY3RpbmciLCJnZXRDb25mbGljdGluZyIsInBvdGVudGlhbENvbW1hbmRzIiwicmVjb21tZW5kZWQiLCJiZXN0RGlzdGFuY2UiLCJjYW5kaWRhdGUiLCJkaXN0YW5jZSIsIlZhbGlkYXRpb24iLCJDb21tYW5kIiwiYmFzZSIsImFyZ3ZQcm9taXNlIiwiaGVscE9wdFNldCIsInZlcnNpb25PcHRTZXQiLCJoYW5kbGVyS2V5cyIsInJlcXVlc3RDb21wbGV0aW9ucyIsInNraXBSZWNvbW1lbmRhdGlvbiIsImZpcnN0VW5rbm93bkNvbW1hbmQiLCJjb21wbGV0aW9uQXJncyIsInBhcnNlRXJyb3JzIiwibm9uT3B0aW9uQ291bnQiLCJyZXF1aXJlZEFyZ3VtZW50cyIsImZhaWxlZFN0cmljdENvbW1hbmRzIiwidW5rbm93bkNvbW1hbmRzIiwidW5rbm93bkFyZ3VtZW50cyIsImxpbWl0ZWRDaG9pY2VzIiwiWWFyZ3MiLCJlc21QbGF0Zm9ybVNoaW0iLCJoaWRlQmluIiwibG9hZENvbmZpZ0ZpbGUiLCJERUZBVUxUX0NPRElOR19UT09MIiwiREVGQVVMVF9BSURFUl9FWFRSQV9BUkdTIiwiREVGQVVMVF9DTEFVREVfQ09ERV9FWFRSQV9BUkdTIiwiREVGQVVMVF9DT0RFWF9FWFRSQV9BUkdTIiwiREVGQVVMVF9HRU1JTklfRVhUUkFfQVJHUyIsIkRFRkFVTFRfUkVQT01JWF9FWFRSQV9BUkdTIiwiREVGQVVMVF9NQVhfVEVTVF9BVFRFTVBUUyIsIkRFRkFVTFRfTk9ERV9SVU5USU1FIiwicGFja2FnZUpzb25EaXIiLCJVUkwiLCJwYXRobmFtZSIsImV4aXN0c1N5bmMiLCJnZXRWZXJzaW9uIiwiY2hkaXIiLCJpbmZvIiwibm9kZVJ1bnRpbWUiLCJub3JtYWxpemVOb2RlUnVudGltZSIsIm1haW4iLCJhaWRlckV4dHJhQXJncyIsImNsYXVkZUNvZGVFeHRyYUFyZ3MiLCJjb2RleEV4dHJhQXJncyIsImdlbWluaUV4dHJhQXJncyIsImNvZGluZ1Rvb2wiLCJkcnlSdW4iLCJub0JyYW5jaCIsInR3b1N0YWdlUGxhbm5pbmciLCJpc3N1ZU51bWJlciIsIm1heFRlc3RBdHRlbXB0cyIsInBsYW5uaW5nTW9kZWwiLCJyZWFzb25pbmdFZmZvcnQiLCJyZXBvbWl4RXh0cmFBcmdzIiwidGVzdENvbW1hbmQiLCJyZW1vdmVQYXR0ZXJuIl0sIm1hcHBpbmdzIjoicXpCQUNBLE1BQU1BLEVBQVEsQ0FDVkMsTUFvUUosU0FBb0JDLEVBQUtDLEdBQ3JCRCxFQUFNQSxFQUFJRSxPQUNWLE1BQU1DLEVBQVdDLEVBQU1DLFlBQVlMLEdBQ25DLEdBQUlHLEVBQVdGLEVBQ1gsTUFBTyxJQUFJSyxPQUFPTCxFQUFRRSxHQUFZSCxFQUUxQyxPQUFPQSxDQUNYLEVBMVFJTyxPQTJRSixTQUFxQlAsRUFBS0MsR0FDdEJELEVBQU1BLEVBQUlFLE9BQ1YsTUFBTUMsRUFBV0MsRUFBTUMsWUFBWUwsR0FFbkMsR0FBSUcsR0FBWUYsRUFDWixPQUFPRCxFQUVYLE1BQU8sSUFBSU0sT0FBUUwsRUFBUUUsR0FBYSxHQUFLSCxDQUNqRCxHQTdRTyxNQUFNUSxFQUNULFdBQUFDLENBQVlDLEdBQ1IsSUFBSUMsRUFDSkMsS0FBS1gsTUFBUVMsRUFBS1QsTUFDbEJXLEtBQUtDLEtBQTRCLFFBQXBCRixFQUFLRCxFQUFLRyxZQUF5QixJQUFQRixHQUFnQkEsRUFDekRDLEtBQUtFLEtBQU8sRUFDaEIsQ0FDQSxJQUFBQyxJQUFRQyxHQUNTSixLQUFLSyxPQUFPRCxHQUNwQkQsTUFBTyxDQUNoQixDQUNBLFdBQUFHLEdBQ0lOLEtBQUtFLEtBQU8sRUFDaEIsQ0FDQSxHQUFBRyxJQUFPRCxHQUlILEdBSG9CLElBQWhCQSxFQUFLRyxRQUNMUCxLQUFLSyxJQUFJLElBRVRMLEtBQUtDLE1BQVFELEtBQUtRLHdCQUF3QkosSUFBNEIsaUJBQVpBLEVBQUssR0FDL0QsT0FBT0osS0FBS1MsZUFBZUwsRUFBSyxJQUVwQyxNQUFNTSxFQUFPTixFQUFLTyxJQUFJQyxHQUNDLGlCQUFSQSxFQUNBWixLQUFLYSxjQUFjRCxHQUV2QkEsR0FHWCxPQURBWixLQUFLRSxLQUFLWSxLQUFLSixHQUNSQSxDQUNYLENBQ0Esb0JBQUFG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LEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sUUFBTkEsR0FDTSxRQUFOQSxHQUNNLFFBQU5BLEdBQ0FBLEdBQUssT0FBVUEsR0FBSyxPQUNkLFFBQU5BLEdBQ0FBLEdBQUssT0FBVUEsR0FBSyxPQUNkLFFBQU5BLEdBQ00sUUFBTkEsR0FDTSxRQUFOQSxHQUNNLFFBQU5BLEdBQ00sUUFBTkEsR0FDTSxRQUFOQSxHQUNBQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVdBLEdBQUssT0FDZixRQUFOQSxHQUNNLFFBQU5BLEdBQ0FBLEdBQUssT0FBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ2YsU0FBTkEsR0FDTSxTQUFOQSxHQUNBQSxHQUFLLFFBQVdBLEdBQUssUUFDZixTQUFOQSxHQUNBQSxHQUFLLFFBQVdBLEdBQUssUUFDZixTQUFOQSxHQUNBQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDZixTQUFOQSxHQUNNLFNBQU5BLEdBQ00sU0FBTkEsR0FDQUEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ2YsU0FBTkEsR0FDTSxTQUFOQSxHQUNBQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNmLFNBQU5BLEdBQ0FBLEdBQUssUUFBV0EsR0FBSyxRQUNmLFNBQU5BLEdBQ0FBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNmLFNBQU5BLEdBQ00sU0FBTkEsR0FDTSxTQUFOQSxHQUNNLFNBQU5BLEdBQ0FBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ2YsU0FBTkEsR0FDQUEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNmLFNBQU5BLEdBQ00sU0FBTkEsR0FDQUEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDZixTQUFOQSxHQUNBQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxNQUMxQixDRHhWS0MsQ0FBT04sSUFDTkMsR0NsQk4sU0FBcUJJLEdBQ3BCLE9BQWEsTUFBTkEsR0FDRyxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDQUEsR0FBSyxLQUFRQSxHQUFLLEtBQ2xCQSxHQUFLLEtBQVFBLEdBQUssS0FDbEJBLEdBQUssS0FBUUEsR0FBSyxLQUNaLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ0FBLEdBQUssS0FBUUEsR0FBSyxLQUNaLE1BQU5BLEdBQ0FBLEdBQUssS0FBUUEsR0FBSyxLQUNaLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDQUEsR0FBSyxLQUFRQSxHQUFLLEtBQ1osTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ0FBLEdBQUssS0FBU0EsR0FBSyxLQUNiLE1BQU5BLEdBQ0FBLEdBQUssS0FBU0EsR0FBSyxLQUNiLE1BQU5BLEdBQ0FBLEdBQUssS0FBU0EsR0FBSyxLQUNiLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNBQSxHQUFLLEtBQVNBLEdBQUssS0FDYixNQUFOQSxHQUNNLE1BQU5BLEdBQ0FBLEdBQUssS0FBU0EsR0FBSyxLQUNiLE1BQU5BLEdBQ00sTUFBTkEsR0FDQUEsR0FBSyxLQUFTQSxHQUFLLEtBQ25CQSxHQUFLLEtBQVNBLEdBQUssS0FDbkJBLEdBQUssS0FBU0EsR0FBSyxLQUNuQkEsR0FBSyxLQUFTQSxHQUFLLEtBQ25CQSxHQUFLLEtBQVNBLEdBQUssS0FDYixPQUFOQSxHQUNBQSxHQUFLLE1BQVNBLEdBQUssTUFDYixPQUFOQSxHQUNNLE9BQU5BLEdBQ0FBLEdBQUssTUFBVUEsR0FBSyxNQUNkLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ0FBLEdBQUssTUFBVUEsR0FBSyxNQUNwQkEsR0FBSyxNQUFVQSxHQUFLLE1BQ2QsT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDZCxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDQUEsR0FBSyxNQUFVQSxHQUFLLE1BQ3BCQSxHQUFLLE1BQVVBLEdBQUssTUFDcEJBLEdBQUssTUFBVUEsR0FBSyxNQUNkLE9BQU5BLEdBQ0FBLEdBQUssTUFBVUEsR0FBSyxNQUNkLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDZCxPQUFOQSxHQUNNLE9BQU5BLEdBQ0FBLEdBQUssTUFBVUEsR0FBSyxNQUNkLE9BQU5BLEdBQ0FBLEdBQUssTUFBVUEsR0FBSyxNQUNkLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ0FBLEdBQUssTUFBVUEsR0FBSyxNQUNkLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ0FBLEdBQUssTUFBVUEsR0FBSyxNQUNwQkEsR0FBSyxNQUFVQSxHQUFLLE1BQ3BCQSxHQUFLLE1BQVVBLEdBQUssTUFDcEJBLEdBQUssTUFBVUEsR0FBSyxNQUNwQkEsR0FBSyxNQUFVQSxHQUFLLE1BQ2QsT0FBTkEsR0FDTSxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDZCxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ0FBLEdBQUssTUFBVUEsR0FBSyxNQUNkLE9BQU5BLEdBQ0FBLEdBQUssTUFBVUEsR0FBSyxNQUNwQkEsR0FBSyxNQUFVQSxHQUFLLE1BQ2QsT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ0FBLEdBQUssTUFBVUEsR0FBSyxNQUNwQkEsR0FBSyxNQUFVQSxHQUFLLE1BQ2QsT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9B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QUFNLFVBQ050SCxTQUFTLElBRVYyUixPQUFPLGlCQUFrQixDQUN4QitDLFlBQWEsMERBQ2JwTixLQUFNLFdBRVBxSyxPQUFPLFlBQWEsQ0FDbkJuUyxNQUFPLElBQ1BrVixZQUFhLHlFQUNicE4sS0FBTSxVQUNOdEgsU0FBUyxJQUVWMlIsT0FBTyxlQUFnQixDQUN0QitDLFlBQWEsMkNBQ2JwTixLQUFNLFNBQ044WCxRQUFTLENBQUMsT0FBUSxNQUFPLE1BQU8sUUFDaENwZixRQUFTOHlCLElBR1ZuaEIsT0FBTyxjQUFlLENBQ3JCblMsTUFBTyxJQUNQa1YsWUFBYSxzQ0FDYnBOLEtBQU0sV0FHUHZJLFFBR0gsV0FDRSxJQUFJZzBCLGNBQTZCdmxCLEtBQU8xRSxFQUFLNEUsUUFBUSxJQUFJc2xCLGdCQUFnQnA0QixLQUFLcTRCLFVBQzlFLE1BQVExcEIsRUFBRzJwQixXQUFXcHFCLEVBQUtoWSxLQUFLaWlDLEVBQWdCLGtCQUM5Q0EsRUFBaUJqcUIsRUFBSzRFLFFBQVFxbEIsR0FFaEMsT0FBT2hxQixLQUFLMUosTUFBTWtLLEVBQUdQLGFBQWFGLEVBQUtoWSxLQUFLaWlDLEVBQWdCLGdCQUFpQixTQUFTaDBCLE9BQ3hGLENBVFdvMEIsSUFDUnBXLE9BQU8zWixLQVVOQSxHQUFLLGlCQUNQM0UsRUFBUTIwQixNQUFNaHdCLEdBQUssZ0JBQ25CMk4sUUFBUXNpQixLQUFLLGlDQUFpQzUwQixFQUFReUosVUFJeEQsTUFBTW9yQixHQUFpQ0MsRUFBcUJud0IsR0FBSyx1QkFFM0Rvd0IsRUFBSyxDQUNUQyxlQUFnQnJ3QixHQUFLLG9CQUNyQnN3QixvQkFBcUJ0d0IsR0FBSywwQkFDMUJ1d0IsZUFBZ0J2d0IsR0FBSyxvQkFDckJ3d0IsZ0JBQWlCeHdCLEdBQUsscUJBQ3RCeXdCLFdBQVl6d0IsR0FBSyxlQUNqQjB3QixPQUFRMXdCLEdBQUssV0FDYjJ3QixTQUFVM3dCLEdBQUssYUFDZmt3QixlQUNBVSxpQkFBa0I1d0IsR0FBSyx1QkFDdkI2d0IsWUFBYTd3QixHQUFLLGdCQUNsQjh3QixnQkFBaUI5d0IsR0FBSyxxQkFDdEIrd0IsY0FBZS93QixHQUFLLGtCQUNwQmd4QixnQkFBaUJoeEIsR0FBSyxvQkFDdEJpeEIsaUJBQWtCanhCLEdBQUssc0JBQ3ZCa3hCLFlBQWFseEIsR0FBSyxnQkFDbEJteEIsY0FBZW54QixHQUFLIiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzldfQ==