@willbooster/agent-skills 1.8.1 → 1.9.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/README.md +18 -1
- package/dist/cli.js +3 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
A collection of agent skills for WillBooster Inc.
|
|
7
7
|
|
|
8
|
-
##
|
|
8
|
+
## Install
|
|
9
9
|
|
|
10
10
|
Install selected skills:
|
|
11
11
|
|
|
@@ -19,6 +19,23 @@ Install all skills:
|
|
|
19
19
|
bunx skills@latest add WillBooster/agent-skills --skill '*' --agent claude-code --agent codex
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
+
## Skills
|
|
23
|
+
|
|
24
|
+
| Skill | Purpose | Example Prompt (`$<skill_name>` for Codex CLI, `/<skill_name>` for Claude Code) |
|
|
25
|
+
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
|
|
26
|
+
| [`check-pr-ci`](skills/check-pr-ci/SKILL.md) | Check the latest test-related CI results for the current PR. | N/A (called internally by [`complete-pr`](skills/complete-pr/SKILL.md)) |
|
|
27
|
+
| [`complete-pr`](skills/complete-pr/SKILL.md) | Iterate on CI results and review feedback until the PR is ready. | `$complete-pr` |
|
|
28
|
+
| [`fetch-issue`](skills/fetch-issue/SKILL.md) | Fetch a GitHub issue's body and comments. | `$fetch-issue https://github.com/WillBooster/agent-skills/issues/41` |
|
|
29
|
+
| [`fetch-pr`](skills/fetch-pr/SKILL.md) | Fetch a GitHub PR's body and comments. | `$fetch-pr https://github.com/WillBooster/agent-skills/pull/36` |
|
|
30
|
+
| [`fix-bug`](skills/fix-bug/SKILL.md) | Reproduce a bug, fix it, and verify the fix. | `$fix-bug https://github.com/WillBooster/shared/issues/292` |
|
|
31
|
+
| [`manage-pr-review-threads`](skills/manage-pr-review-threads/SKILL.md) | Inspect unresolved review threads, reply, and resolve them. | N/A (called internally by [`complete-pr`](skills/complete-pr/SKILL.md)) |
|
|
32
|
+
| [`open-pr`](skills/open-pr/SKILL.md) | Create a PR for the current branch. | `Update README based on the latest codebase then $open-pr` |
|
|
33
|
+
| [`plan-issue-claude`](skills/plan-issue-claude/SKILL.md) / [`plan-issue-codex`](skills/plan-issue-codex/SKILL.md) / [`plan-issue-gemini`](skills/plan-issue-gemini/SKILL.md) | Write an implementation plan for an issue using a specified agent. | `$plan-issue-codex https://github.com/WillBooster/agent-skills/issues/41` |
|
|
34
|
+
| [`playwright-cli`](skills/playwright-cli/SKILL.md) | Automate browser actions for testing, screenshots, form filling, and extraction. | `Take a screenshot of ABC page with $playwright-cli` |
|
|
35
|
+
| [`review-all`](skills/review-all/SKILL.md) / [`review-claude`](skills/review-claude/SKILL.md) / [`review-codex`](skills/review-codex/SKILL.md) / [`review-gemini`](skills/review-gemini/SKILL.md) | Review the current PR using a specified agent and report only valid findings. | `$review-all` |
|
|
36
|
+
| [`review-fix-all`](skills/review-fix-all/SKILL.md) / [`review-fix-claude`](skills/review-fix-claude/SKILL.md) / [`review-fix-codex`](skills/review-fix-codex/SKILL.md) / [`review-fix-gemini`](skills/review-fix-gemini/SKILL.md) | Review the current PR using a specified agent and fix valid comments. | `$review-fix-all` |
|
|
37
|
+
| [`simplify-pr-claude`](skills/simplify-pr-claude/SKILL.md) / [`simplify-pr-codex`](skills/simplify-pr-codex/SKILL.md) / [`simplify-pr-gemini`](skills/simplify-pr-gemini/SKILL.md) | Safely simplify the current PR using a specified agent. | `$simplify-pr-codex` |
|
|
38
|
+
|
|
22
39
|
## CLI
|
|
23
40
|
|
|
24
41
|
This repository also ships a Bun-powered CLI package for skill-specific commands.
|
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{Command as n,Option as e}from"commander";import{spawn as r,spawnSync as t}from"node:child_process";import{createWriteStream as o}from"node:fs";import{mkdir as i}from"node:fs/promises";import{dirname as a}from"node:path";import{stdin as u,stderr as c}from"node:process";import{setTimeout as s}from"node:timers/promises";import{stripVTControlCharacters as l}from"node:util";import{stringify as f}from"yaml";function d(n,e){(null==e||e>n.length)&&(e=n.length);for(var r=0,t=Array(e);r<e;r++)t[r]=n[r];return t}function p(n){var e,r,t,o=2;for("undefined"!=typeof Symbol&&(r=Symbol.asyncIterator,t=Symbol.iterator);o--;){if(r&&null!=(e=n[r]))return e.call(n);if(t&&null!=(e=n[t]))return new h(e.call(n));r="@@asyncIterator",t="@@iterator"}throw new TypeError("Object is not async iterable")}function h(n){function e(n){if(Object(n)!==n)return Promise.reject(new TypeError(n+" is not an object."));var e=n.done;return Promise.resolve(n.value).then(function(n){return{value:n,done:e}})}return h=function(n){this.s=n,this.n=n.next},h.prototype={s:null,n:null,next:function(){return e(this.n.apply(this.s,arguments))},return:function(n){var r=this.s.return;return void 0===r?Promise.resolve({value:n,done:!0}):e(r.apply(this.s,arguments))},throw:function(n){var r=this.s.return;return void 0===r?Promise.reject(n):e(r.apply(this.s,arguments))}},new h(n)}function m(n,e,r,t,o,i,a){try{var u=n[i](a),c=u.value}catch(n){return void r(n)}u.done?e(c):Promise.resolve(c).then(t,o)}function v(n){return function(){var e=this,r=arguments;return new Promise(function(t,o){var i=n.apply(e,r);function a(n){m(i,t,o,a,u,"next",n)}function u(n){m(i,t,o,a,u,"throw",n)}a(void 0)})}}function
|
|
2
|
+
import{Command as n,Option as e}from"commander";import{spawn as r,spawnSync as t}from"node:child_process";import{createWriteStream as o}from"node:fs";import{mkdir as i}from"node:fs/promises";import{dirname as a}from"node:path";import{stdin as u,stderr as c}from"node:process";import{setTimeout as s}from"node:timers/promises";import{stripVTControlCharacters as l}from"node:util";import{stringify as f}from"yaml";function d(n,e){(null==e||e>n.length)&&(e=n.length);for(var r=0,t=Array(e);r<e;r++)t[r]=n[r];return t}function p(n){var e,r,t,o=2;for("undefined"!=typeof Symbol&&(r=Symbol.asyncIterator,t=Symbol.iterator);o--;){if(r&&null!=(e=n[r]))return e.call(n);if(t&&null!=(e=n[t]))return new h(e.call(n));r="@@asyncIterator",t="@@iterator"}throw new TypeError("Object is not async iterable")}function h(n){function e(n){if(Object(n)!==n)return Promise.reject(new TypeError(n+" is not an object."));var e=n.done;return Promise.resolve(n.value).then(function(n){return{value:n,done:e}})}return h=function(n){this.s=n,this.n=n.next},h.prototype={s:null,n:null,next:function(){return e(this.n.apply(this.s,arguments))},return:function(n){var r=this.s.return;return void 0===r?Promise.resolve({value:n,done:!0}):e(r.apply(this.s,arguments))},throw:function(n){var r=this.s.return;return void 0===r?Promise.reject(n):e(r.apply(this.s,arguments))}},new h(n)}function m(n,e,r,t,o,i,a){try{var u=n[i](a),c=u.value}catch(n){return void r(n)}u.done?e(c):Promise.resolve(c).then(t,o)}function v(n){return function(){var e=this,r=arguments;return new Promise(function(t,o){var i=n.apply(e,r);function a(n){m(i,t,o,a,u,"next",n)}function u(n){m(i,t,o,a,u,"throw",n)}a(void 0)})}}function w(n,e){var r="undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(!r){if(Array.isArray(n)||(r=A(n))||e){r&&(n=r);var t=0,o=function(){};return{s:o,n:function(){return t>=n.length?{done:!0}:{done:!1,value:n[t++]}},e:function(n){throw n},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){r=r.call(n)},n:function(){var n=r.next();return a=n.done,n},e:function(n){u=!0,i=n},f:function(){try{a||null==r.return||r.return()}finally{if(u)throw i}}}}function y(n,e,r){return(e=function(n){var e=function(n,e){if("object"!=typeof n||!n)return n;var r=n[Symbol.toPrimitive];if(void 0!==r){var t=r.call(n,e);if("object"!=typeof t)return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(n)}(n,"string");return"symbol"==typeof e?e:e+""}(e))in n?Object.defineProperty(n,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[e]=r,n}function g(n,e){var r=Object.keys(n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);e&&(t=t.filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})),r.push.apply(r,t)}return r}function b(n){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?g(Object(r),!0).forEach(function(e){y(n,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(r)):g(Object(r)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(r,e))})}return n}function k(){
|
|
3
3
|
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
|
|
4
|
-
var n,e,r="function"==typeof Symbol?Symbol:{},t=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function i(r,t,o,i){var c=t&&t.prototype instanceof u?t:u,s=Object.create(c.prototype);return x(s,"_invoke",function(r,t,o){var i,u,c,s=0,l=o||[],f=!1,d={p:0,n:0,v:n,a:p,f:p.bind(n,4),d:function(e,r){return i=e,u=0,c=n,d.n=r,a}};function p(r,t){for(u=r,c=t,e=0;!f&&s&&!o&&e<l.length;e++){var o,i=l[e],p=d.p,h=i[2];r>3?(o=h===t)&&(c=i[(u=i[4])?5:(u=3,3)],i[4]=i[5]=n):i[0]<=p&&((o=r<2&&p<i[1])?(u=0,d.v=t,d.n=i[1]):p<h&&(o=r<3||i[0]>t||t>h)&&(i[4]=r,i[5]=t,d.n=h,u=0))}if(o||r>1)return a;throw f=!0,t}return function(o,l,h){if(s>1)throw TypeError("Generator is already running");for(f&&1===l&&p(l,h),u=l,c=h;(e=u<2?n:c)||!f;){i||(u?u<3?(u>1&&(d.n=-1),p(u,c)):d.n=c:d.v=c);try{if(s=2,i){if(u||(o="next"),e=i[o]){if(!(e=e.call(i,c)))throw TypeError("iterator result is not an object");if(!e.done)return e;c=e.value,u<2&&(u=0)}else 1===u&&(e=i.return)&&e.call(i),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);i=n}else if((e=(f=d.n<0)?c:r.call(t,d))!==a)break}catch(e){i=n,u=1,c=e}finally{s=1}}return{value:e,done:f}}}(r,o,i),!0),s}var a={};function u(){}function c(){}function s(){}e=Object.getPrototypeOf;var l=[][t]?e(e([][t]())):(x(e={},t,function(){return this}),e),f=s.prototype=u.prototype=Object.create(l);function d(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,s):(n.__proto__=s,x(n,o,"GeneratorFunction")),n.prototype=Object.create(f),n}return c.prototype=s,x(f,"constructor",s),x(s,"constructor",c),c.displayName="GeneratorFunction",x(s,o,"GeneratorFunction"),x(f),x(f,o,"Generator"),x(f,t,function(){return this}),x(f,"toString",function(){return"[object Generator]"}),(k=function(){return{w:i,m:d}})()}function x(n,e,r,t){var o=Object.defineProperty;try{o({},"",{})}catch(n){o=0}x=function(n,e,r,t){function i(e,r){x(n,e,function(n){return this._invoke(e,r,n)})}e?o?o(n,e,{value:r,enumerable:!t,configurable:!t,writable:!t}):n[e]=r:(i("next",0),i("throw",1),i("return",2))},x(n,e,r,t)}function S(n){if(null!=n){var e=n["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],r=0;if(e)return e.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length))return{next:function(){return n&&r>=n.length&&(n=void 0),{value:n&&n[r++],done:!n}}}}throw new TypeError(typeof n+" is not iterable")}function j(n,e){return function(n){if(Array.isArray(n))return n}(n)||function(n,e){var r=null==n?null:"undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(null!=r){var t,o,i,a,u=[],c=!0,s=!1;try{if(i=(r=r.call(n)).next,0===e){if(Object(r)!==r)return;c=!1}else for(;!(c=(t=i.call(r)).done)&&(u.push(t.value),u.length!==e);c=!0);}catch(n){s=!0,o=n}finally{try{if(!c&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(s)throw o}}return u}}(n,e)||I(n,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function O(n){return function(n){if(Array.isArray(n))return d(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||I(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function A(n){"@babel/helpers - typeof";return A="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},A(n)}function I(n,e){if(n){if("string"==typeof n)return d(n,e);var r={}.toString.call(n).slice(8,-1);return"Object"===r&&n.constructor&&(r=n.constructor.name),"Map"===r||"Set"===r?Array.from(n):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?d(n,e):void 0}}var $="PLEASE WAIT FOR UP TO 1 HOUR.";function R(n,e){return C.apply(this,arguments)}function C(){return C=v(k().m(function n(e,t){var o,i,a,u,c,s,l,f,d;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t={}),i=r(null!=(o=e[0])?o:"",e.slice(1),{stdio:["ignore","pipe","pipe"]}),a=E(t.waitMessage,t.waitIntervalSeconds),n.n=1,N(t.logFilePath);case 1:return u=n.v,n.p=2,n.n=3,Promise.all([P(i.stdout,function(n){return u.write(n)}),P(i.stderr,function(n){return u.write(n)}),new Promise(function(n,e){i.once("error",e),i.once("close",function(e){return n(null!=e?e:1)})})]);case 3:if(c=n.v,s=j(c,3),l=s[0],f=s[1],0!==s[2]){n.n=4;break}return n.a(2,l);case 4:throw d="".concat(l).concat(f),new Error(d||"Command failed: ".concat(e.join(" ")));case 5:return n.p=5,n.n=6,u.close();case 6:return a(),n.f(5);case 7:return n.a(2)}},n,null,[[2,,5,7]])})),C.apply(this,arguments)}function P(n,e){return q.apply(this,arguments)}function q(){return(q=v(k().m(function n(e,r){var t,o,i,a,u,c,s,l,f;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:t=[],o=!1,i=!1,n.p=2,u=p(e);case 3:return n.n=4,u.next();case 4:if(!(o=!(c=n.v).done)){n.n=6;break}s=c.value,l="string"==typeof s?s:s.toString("utf8"),t.push(l),null==r||r(l);case 5:o=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,f=n.v,i=!0,a=f;case 8:if(n.p=8,n.p=9,!o||null==u.return){n.n=10;break}return n.n=10,u.return();case 10:if(n.p=10,!i){n.n=11;break}throw a;case 11:return n.f(10);case 12:return n.f(8);case 13:return n.a(2,t.join(""))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function E(n,e,r){if(void 0===e&&(e=10),void 0===r&&(r=function(n){return process.stderr.write(n)}),!n)return function(){};var t=setInterval(function(){r(".")},1e3*e);return r("".concat(n," One dot represents ").concat(e," seconds: ")),function(){clearInterval(t),r("\n")}}function N(n){return T.apply(this,arguments)}function T(){return T=v(k().m(function n(e){var r,t,u;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,{write:function(){},close:function(){var n=v(k().m(function n(){return k().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()});case 1:return r=function(n){process.stderr.write("Warning: Failed to write command log to ".concat(e,": ").concat(String(n),"\n"))},n.p=2,n.n=3,i(a(e),{recursive:!0});case 3:return(t=o(e,{flags:"w"})).on("error",r),n.a(2,{write:function(n){t.writable&&t.write(n)},close:function(){var n=v(k().m(function n(){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,new Promise(function(n){t.end(function(){return n()})});case 1:return n.a(2,n.v)}},n)}));return function(){return n.apply(this,arguments)}}()});case 4:return n.p=4,u=n.v,r(u),n.a(2,{write:function(){},close:function(){var n=v(k().m(function n(){return k().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()})}},n,null,[[2,4]])})),T.apply(this,arguments)}var _="There is no concern.",L=["codex","claude","gemini"],D=new RegExp("\\b".concat("there is no concern","\\b"),"i");function F(n,e){return G.apply(this,arguments)}function G(){return(G=v(k().m(function n(e,r){var t,o,i;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===r&&(r={allAgentsLabel:"agents"}),n.n=1,e;case 1:return t=n.v,o=E(U(r.allAgentsLabel)),n.p=2,n.n=3,Promise.all(L.map(v(k().m(function n(e){var o,i,a,u;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,H(e,t,{waitMessage:!1});case 1:return u=n.v.trim(),n.a(2,null!=(o=null==(i=(a=r).mapOutput)?void 0:i.call(a,e,u))?o:"## ".concat(J(e),"\n\n").concat(u))}},n)}))));case 3:return i=n.v.filter(function(n){return void 0!==n}),n.a(2,i.length>0?i.join("\n\n"):_);case 4:return n.p=4,o(),n.f(4);case 5:return n.a(2)}},n,null,[[2,,4,5]])}))).apply(this,arguments)}function H(n,e,r){return M.apply(this,arguments)}function M(){return(M=v(k().m(function n(e,r,t){var o,i,a;return k().w(function(n){for(;;)switch(n.n){case 0:return void 0===t&&(t={}),o=R,i=W,a=e,n.n=1,r;case 1:return n.a(2,o(i(a,n.v),{logFilePath:B(e),waitMessage:void 0===t.waitMessage?U(J(e)):t.waitMessage}))}},n)}))).apply(this,arguments)}function W(n,e){switch(n){case"codex":return["npx","--yes","@openai/codex@latest","exec","--dangerously-bypass-approvals-and-sandbox",e];case"claude":return["claude","--dangerously-skip-permissions","-p",e];case"gemini":return["npx","--yes","@google/gemini-cli@preview","--approval-mode","yolo","--model","gemini-3.1-pro-preview","-p",e]}}function J(n){switch(n){case"codex":return"Codex";case"claude":return"Claude Code";case"gemini":return"Gemini CLI"}}function U(n){return"Waiting for ".concat(n," to finish. ").concat($)}function B(n){return"logs/".concat(n,"-").concat((e=new Date,r=j([e.getMonth()+1,e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds()].map(Q),5),t=r[0],o=r[1],i=r[2],a=r[3],u=r[4],"".concat(t).concat(o,"-").concat(i).concat(a).concat(u)),".log");var e,r,t,o,i,a,u}function Q(n){return n.toString().padStart(2,"0")}var Y={blockQuote:"literal",lineWidth:0},Z=/\btest\b/i,z="Waiting for test-related workflows to finish. ".concat($),K=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","jobs","name","number","startedAt","status","updatedAt","url","workflowName"],V=/^.*?\tUNKNOWN STEP\t\d{4}-\d{2}-\d{2}T[^Z]+Z\s*/;function X(n){c.write("".concat(n,"\n"))}function nn(n,e){void 0===e&&(e=1),c.write("".concat(n,"\n")),process.exit(e)}function en(n,e,r){return"gh"===n[0]&&0!==e&&/(HTTP 50[0234]\b|We had issues producing the response to your request)/i.test(r)}function rn(){return tn.apply(this,arguments)}function tn(){return(tn=v(k().m(function n(){return k().w(function(n){for(;;)switch(n.n){case 0:if(!u.isTTY){n.n=1;break}return n.a(2,"");case 1:return n.n=2,Wn(u);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function on(){return an.apply(this,arguments)}function an(){return(an=v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,rn();case 1:if(!((e=n.v).length>0)){n.n=2;break}return n.a(2,e);case 2:nn("Error: JSON input is required on stdin",2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function un(n,e){return cn.apply(this,arguments)}function cn(){return cn=v(k().m(function n(e,t){var o,i,a,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),i=null!=(o=t.allowedExitCodes)?o:[],a=k().m(function n(){var o,a,u,l,f,d,p,h;return k().w(function(n){for(;;)switch(n.n){case 0:return a=r(null!=(o=e[0])?o:"",e.slice(1),{stdio:["pipe","pipe","pipe"]}),void 0!==t.stdinData?a.stdin.end(t.stdinData):a.stdin.end(),n.n=1,Promise.all([Wn(a.stdout),Wn(a.stderr),new Promise(function(n,e){a.once("error",e),a.once("close",function(e){return n(null!=e?e:1)})})]);case 1:if(u=n.v,l=j(u,3),f=l[0],d=l[1],p=l[2],h="".concat(f).concat(d),0!==p&&!i.includes(p)){n.n=2;break}return n.a(2,{v:h});case 2:if(!(en(e,p,h)&&c<3)){n.n=4;break}return X("Transient GitHub CLI failure; retrying... (attempt ".concat(c," of ").concat(2,")")),n.n=3,s(1e3*c);case 3:return n.a(2,0);case 4:nn(h||"Command failed: ".concat(e.join(" ")));case 5:return n.a(2)}},n)}),c=1;case 1:if(!(c<=3)){n.n=5;break}return n.d(S(a()),2);case 2:if(0!==(u=n.v)){n.n=3;break}return n.a(3,4);case 3:if(!u){n.n=4;break}return n.a(2,u.v);case 4:c+=1,n.n=1;break;case 5:nn("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),cn.apply(this,arguments)}function sn(n,e){return ln.apply(this,arguments)}function ln(){return(ln=v(k().m(function n(e,r){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,un(["gh"].concat(O(e)),{stdinData:r});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function fn(n,e,r){return dn.apply(this,arguments)}function dn(){return(dn=v(k().m(function n(e,r,t){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,un(["gh"].concat(O(e)),{stdinData:t,allowedExitCodes:r});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function pn(){return hn.apply(this,arguments)}function hn(){return(hn=v(k().m(function n(){var e,r,t,o,i;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,sn(["repo","view","--json","nameWithOwner","--jq",".nameWithOwner"]);case 1:return e=n.v.trim(),r=e.split("/",2),t=j(r,2),o=t[0],i=t[1],o&&i||nn("Error: could not determine current repository"),n.a(2,[o,i])}},n)}))).apply(this,arguments)}function mn(){return vn.apply(this,arguments)}function vn(){return(vn=v(k().m(function n(){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,sn(["pr","view","--json","number","--jq",".number"]);case 1:return n.a(2,n.v.trim())}},n)}))).apply(this,arguments)}function yn(n,e){return wn.apply(this,arguments)}function wn(){return(wn=v(k().m(function n(e,r){var t,o,i,a,u,c,s,l,f;return k().w(function(n){for(;;)switch(n.n){case 0:void 0===r&&(r={}),t=["api","graphql","-F","query=@-"],o=0,i=Object.entries(r);case 1:if(!(o<i.length)){n.n=4;break}if(a=j(i[o],2),u=a[0],void 0!==(c=a[1])&&""!==c){n.n=2;break}return n.a(3,3);case 2:t.push("-F","".concat(u,"=").concat(c));case 3:o++,n.n=1;break;case 4:return f=JSON,n.n=5,sn(t,e);case 5:if(s=f.parse.call(f,n.v),Array.isArray(s.errors)){n.n=6;break}return n.a(2,s);case 6:l=s.errors.map(function(n){var e;return null!=(e=n.message)?e:"Unknown GraphQL error"}).join("\n"),nn("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function gn(n){var e,r;return b(b({},n),{},{author:"string"==typeof n.author?n.author:null!=(e=null==(r=n.author)?void 0:r.login)?e:null})}function bn(n,e,r,t,o){return kn.apply(this,arguments)}function kn(){return(kn=v(k().m(function n(e,r,t,o,i){var a,u,c,s,l,f,d,p,h,m,v,w;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,yn(e,{owner:r,name:t,number:Number(o),cursor:a});case 1:if(m=u=n.v.data,h=null==m){n.n=2;break}h=null==(u=u.repository);case 2:if(p=h){n.n=3;break}p=null==(u=u.pullRequest);case 3:if(!p){n.n=4;break}v=void 0,n.n=5;break;case 4:v=u.reviewThreads;case 5:(s=v)||nn("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),l=y(s.nodes),n.p=6,l.s();case 7:if((f=l.n()).done){n.n=9;break}return d=f.value,n.n=8,i(d);case 8:n.n=7;break;case 9:n.n=11;break;case 10:n.p=10,w=n.v,l.e(w);case 11:return n.p=11,l.f(),n.f(11);case 12:if(s.pageInfo.hasNextPage){n.n=13;break}return n.a(2);case 13:a=null!=(c=s.pageInfo.endCursor)?c:void 0;case 14:n.n=0;break;case 15:return n.a(2)}},n,null,[[6,10,11,12]])}))).apply(this,arguments)}function xn(n,e,r){return Sn.apply(this,arguments)}function Sn(){return(Sn=v(k().m(function n(e,r,t){var o;return k().w(function(n){for(;;)switch(n.n){case 0:return o=[],n.n=1,bn("\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviewThreads(first: 100, after: $cursor) {\n nodes {\n id\n isResolved\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",e,r,t,function(n){n.isResolved||o.push(n.id)});case 1:return n.a(2,o)}},n)}))).apply(this,arguments)}function jn(n,e,r){return On.apply(this,arguments)}function On(){return(On=v(k().m(function n(e,r,t){var o;return k().w(function(n){for(;;)switch(n.n){case 0:return o=[],n.n=1,bn("\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviewThreads(first: 100, after: $cursor) {\n nodes {\n id\n isResolved\n isOutdated\n path\n line\n originalLine\n startLine\n originalStartLine\n comments(first: 100) {\n nodes {\n id\n url\n body\n createdAt\n diffHunk\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",e,r,t,v(k().m(function n(e){var r,t,i,a,u,c,s,l,f,d;return k().w(function(n){for(;;)switch(n.n){case 0:if(!e.isResolved){n.n=1;break}return n.a(2);case 1:t=e.comments.nodes.map(gn),i=e.comments.pageInfo,a=null!=(r=i.endCursor)?r:void 0;case 2:if(!i.hasNextPage){n.n=7;break}return n.n=3,yn("\n query($threadId: ID!, $cursor: String) {\n node(id: $threadId) {\n ... on PullRequestReviewThread {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n url\n body\n createdAt\n diffHunk\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",{threadId:e.id,cursor:a});case 3:if(f=u=n.v.data,l=null==f){n.n=4;break}l=null==(u=u.node);case 4:if(!l){n.n=5;break}d=void 0,n.n=6;break;case 5:d=u.comments;case 6:(s=d)||nn("Could not find comments in GraphQL response for thread ".concat(e.id,".")),t.push.apply(t,O(s.nodes.map(gn))),i=s.pageInfo,a=null!=(c=i.endCursor)?c:void 0,n.n=2;break;case 7:o.push({id:e.id,isResolved:e.isResolved,isOutdated:e.isOutdated,path:e.path,line:e.line,originalLine:e.originalLine,startLine:e.startLine,originalStartLine:e.originalStartLine,comments:t});case 8:return n.a(2)}},n)})));case 1:return n.a(2,o)}},n)}))).apply(this,arguments)}function An(n){return f(n,Y)}function In(n){return JSON.parse(JSON.stringify(n))}function $n(n){return Rn.apply(this,arguments)}function Rn(){return(Rn=v(k().m(function n(e){var r,t,o,i,a,u,c,s,l,f;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return u=["pr","checks"],e&&u.push(e),u.push("--json","bucket,completedAt,description,event,link,name,startedAt,state,workflow"),c=[],n.p=1,n.n=2,fn(u,[8]);case 2:s=n.v,c=s.trim().length>0?JSON.parse(s):[],n.n=5;break;case 3:if(n.p=3,!((f=n.v)instanceof SyntaxError)){n.n=4;break}c=[],n.n=5;break;case 4:throw f;case 5:return l=c.reduce(function(n,e){var r,t,o=null!=(r=e.bucket)?r:"";return n[o]=(null!=(t=n[o])?t:0)+1,n},{}),n.a(2,{summary:{total:c.length,pass:null!=(r=l.pass)?r:0,fail:null!=(t=l.fail)?t:0,pending:null!=(o=l.pending)?o:0,skipping:null!=(i=l.skipping)?i:0,cancel:null!=(a=l.cancel)?a:0},checks:c})}},n,null,[[1,3]])}))).apply(this,arguments)}function Cn(n,e,r,t){return Pn.apply(this,arguments)}function Pn(){return(Pn=v(k().m(function n(e,r,t,o){var i,a,u,s,l,f,d,p;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===r&&(r=Hn),void 0===t&&(t=$n),void 0===o&&(o=function(n){return c.write(n)}),i=0,n.n=1,t(e);case 1:a=n.v,u=function(){},n.p=2;case 3:if(s=qn(a),l=En(s),f=j(l,2),d=f[0],p=f[1],!(Object.keys(d).length>0||0===Object.keys(p).length)){n.n=4;break}return n.a(2,[a,i,!1]);case 4:if(!(i>=360)){n.n=5;break}return n.a(2,[a,i,!0]);case 5:return 1===(i+=1)&&(u=E(z,10,o)),n.n=6,r(10);case 6:return n.n=7,t(e);case 7:a=n.v;case 8:n.n=3;break;case 9:return n.p=9,u(),n.f(9);case 10:return n.a(2)}},n,null,[[2,,9,10]])}))).apply(this,arguments)}function qn(n){var e=n.checks.reduce(function(n,e){var r=e.workflow||e.name||"unknown_workflow";return null!=n[r]||(n[r]=[]),n[r].push(e),n},{});return Object.fromEntries(Object.entries(e).map(function(n){var e,r=j(n,2),t=r[0],o=function(n){var e=n.reduce(function(n,e){var r=function(n){var e=Nn(n);return e?"run:".concat(e):"unknown_run"}(e),t=n.get(r);return t?(t.push(e),n):(n.set(r,[e]),n)},new Map);return Array.from(e.values()).reduce(function(n,e){return 0===n.length||Fn(e)>Fn(n)?e:n},[])}(r[1]),i=o[0];i||nn("Error: no checks found for workflow ".concat(t));var a=null!=(e=o.reduce(function(n,e){return n?Dn(e)>Dn(n)?e:n:e},void 0))?e:i;return[t,{classification:Ln(o),check:a,checks:o}]}))}function En(n){for(var e={},r={},t=0,o=Object.entries(n);t<o.length;t++){var i=j(o[t],2),a=i[0],u=i[1];"failed"!==u.classification?"running"===u.classification&&u.checks.some(function(n){return Gn(n)})&&(r[a]=u):e[a]=u}return[e,r]}function Nn(n){var e,r=null==n?void 0:n.link;if(r)return null==(e=r.match(/\/actions\/runs\/(\d+)/))?void 0:e[1]}function Tn(n){return _n.apply(this,arguments)}function _n(){return(_n=v(k().m(function n(e){var r,t;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,void 0);case 1:return n.n=2,fn(["run","view",e,"--json",K.join(",")],[1]);case 2:if(0!==(r=n.v).trim().length){n.n=3;break}return n.a(2,void 0);case 3:return n.p=3,n.a(2,JSON.parse(r));case 4:if(n.p=4,!((t=n.v)instanceof SyntaxError)){n.n=5;break}return c.write("Warning: Could not parse JSON for workflow run ".concat(e,": ").concat(t.message,"\n")),n.a(2,void 0);case 5:throw t;case 6:return n.a(2)}},n,null,[[3,4]])}))).apply(this,arguments)}function Ln(n){var e=n.map(function(n){var e;return null!=(e=n.bucket)?e:""});return e.some(function(n){return!["pass","skipping","pending"].includes(n)})?"failed":e.includes("pending")?"running":"successful"}function Dn(n){var e,r=n.completedAt;return r&&"0001-01-01T00:00:00Z"!==r?r:null!=(e=n.startedAt)?e:""}function Fn(n){return n.reduce(function(n,e){var r=Dn(e);return r>n?r:n},"")}function Gn(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&Z.test(n)})}function Hn(n){return Mn.apply(this,arguments)}function Mn(){return(Mn=v(k().m(function n(e){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,s(1e3*e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function Wn(n){return Jn.apply(this,arguments)}function Jn(){return(Jn=v(k().m(function n(e){var r,t,o,i,a,u,c,s;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:r=[],t=!1,o=!1,n.p=2,a=p(e);case 3:return n.n=4,a.next();case 4:if(!(t=!(u=n.v).done)){n.n=6;break}c=u.value,r.push(Buffer.from(c));case 5:t=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,s=n.v,o=!0,i=s;case 8:if(n.p=8,n.p=9,!t||null==a.return){n.n=10;break}return n.n=10,a.return();case 10:if(n.p=10,!o){n.n=11;break}throw i;case 11:return n.f(10);case 12:return n.f(8);case 13:return n.a(2,Buffer.concat(r).toString("utf8"))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function Un(){return Bn.apply(this,arguments)}function Bn(){return(Bn=v(k().m(function n(){var e,r,t,o,i,a,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,on();case 1:for(e=n.v,r=ie(e),t={},o=0,i=Object.entries(r.replies);o<i.length;o++)a=j(i[o],2),u=a[0],"string"==typeof(c=a[1])&&c.length>0&&(t[u]=c);return n.a(2,t)}},n)}))).apply(this,arguments)}function Qn(n){return Yn.apply(this,arguments)}function Yn(){return(Yn=v(k().m(function n(e){var r,t,o,i,a;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,un(["git","branch","--show-current"]);case 1:return r=n.v.trim(),n.n=2,sn(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return t=n.v.trim(),r||nn("Error: could not determine current branch"),t||nn("Error: could not determine default branch"),r===t&&nn("Error: current branch is the default branch (".concat(t,")")),o=["pr","create","--base",t,"--head",r,"--fill"],e&&e.length>0&&o.push("--body-file","-"),X("Creating pull request..."),n.n=3,sn(o,e);case 3:return i=An,a=JSON,n.n=4,sn(["pr","view","--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author"]);case 4:return n.a(2,i(a.parse.call(a,n.v)))}},n)}))).apply(this,arguments)}function Zn(){return zn.apply(this,arguments)}function zn(){return(zn=v(k().m(function n(){var e,r,t,o,i,a,u;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,pn();case 1:return e=n.v,r=j(e,2),t=r[0],o=r[1],n.n=2,mn();case 2:return i=n.v,X("Fetching unresolved review threads..."),a=An,n.n=3,jn(t,o,i);case 3:return u=n.v,n.a(2,a({unresolved_threads:u}))}},n)}))).apply(this,arguments)}function Kn(n){return Vn.apply(this,arguments)}function Vn(){return(Vn=v(k().m(function n(e){var r,t,o,i,a,u,c,s,l,f,d,p,h,m,v,w,g,b,x,S;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,pn();case 1:return r=n.v,t=j(r,2),o=t[0],i=t[1],n.n=2,mn();case 2:return a=n.v,b=Set,n.n=3,xn(o,i,a);case 3:x=n.v,u=new b(x),X("Replying to ".concat(Object.keys(e).length," review threads...")),c=[],s=Object.entries(e),l=y(s.entries()),n.p=4,l.s();case 5:if((f=l.n()).done){n.n=9;break}if(p=j(f.value,2),h=p[0],m=j(p[1],2),v=m[0],w=m[1],X("Processing ".concat(h+1,"/").concat(s.length,": ").concat(v)),u.has(v)){n.n=6;break}return n.a(3,8);case 6:return n.n=7,yn("\n mutation($threadId: ID!, $body: String!) {\n addPullRequestReviewThreadReply(input: {pullRequestReviewThreadId: $threadId, body: $body}) {\n comment {\n id\n url\n }\n }\n resolveReviewThread(input: {threadId: $threadId}) {\n thread {\n id\n isResolved\n }\n }\n }\n ",{threadId:v,body:w});case 7:g=n.v,null!=(d=g.data)&&null!=(d=d.resolveReviewThread)&&null!=(d=d.thread)&&d.isResolved?c.push(v):X("Warning: failed to resolve thread ".concat(v,"."));case 8:n.n=5;break;case 9:n.n=11;break;case 10:n.p=10,S=n.v,l.e(S);case 11:return n.p=11,l.f(),n.f(11);case 12:return X("Done."),n.a(2,An({resolved_thread_ids:c}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function Xn(){return ne.apply(this,arguments)}function ne(){return(ne=v(k().m(function n(){var e,r,t,o,i,a,u,c,s,l,f,d;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,mn();case 1:return e=n.v,X("Fetching latest CI results..."),n.n=2,Cn(e);case 2:if(r=n.v,t=j(r,3),o=t[0],i=t[1],a=t[2],u=qn(o),c=En(u),s=j(c,2),l=s[0],f=s[1],d={summary:In(o.summary),waited_for_test_related_checks:i>0,test_related_check_wait_attempts:i,test_related_check_wait_timed_out:a},!(Object.keys(l).length>0)){n.n=4;break}return n.n=3,Promise.all(Object.entries(l).map(v(k().m(function n(e){var r,t,o,i,a,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:return r=j(e,2),t=r[0],o=r[1],n.n=1,ae(t,o);case 1:return i=n.v,a=b,u=b({},i),c=le,n.n=2,ce(o.check);case 2:return n.a(2,a(u,c(n.v)))}},n)}))));case 3:return d.failed_workflows=n.v,n.a(2,{output:An(d),exitCode:1});case 4:if(!(Object.keys(f).length>0)){n.n=6;break}return d.test_workflow_output="Timed out waiting for test-related workflows to finish.",n.n=5,Promise.all(Object.entries(f).map(function(n){var e=j(n,2);return ae(e[0],e[1])}));case 5:return d.running_test_related_workflows=n.v,n.a(2,{output:An(d),exitCode:1});case 6:return d.test_workflow_output="All workflows are successful.",n.a(2,{output:An(d),exitCode:0})}},n)}))).apply(this,arguments)}function ee(n){return re.apply(this,arguments)}function re(){return(re=v(k().m(function n(e){var r,t,o,i,a;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,pn();case 1:return r=n.v,t=j(r,2),o=t[0],i=t[1],n.n=2,we(o,i,e);case 2:return a=n.v,X("Fetched issue #".concat(a.number," messages.")),n.a(2,An({issue:a}))}},n)}))).apply(this,arguments)}function te(n){return oe.apply(this,arguments)}function oe(){return(oe=v(k().m(function n(e){var r,t,o,i,a,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,pn();case 1:if(r=n.v,t=j(r,2),o=t[0],i=t[1],null==e){n.n=2;break}c=e,n.n=4;break;case 2:return n.n=3,mn();case 3:c=n.v;case 4:return a=c,n.n=5,be(o,i,a);case 5:return u=n.v,X("Fetched pull request #".concat(u.number," messages.")),n.a(2,An({pull_request:u}))}},n)}))).apply(this,arguments)}function ie(n){try{var e=JSON.parse(n);return function(n){if("object"!==A(n)||null===n||Array.isArray(n))return!1;var e=n.replies;if("object"!==A(e)||null===e||Array.isArray(e))return!1;return Object.values(e).every(function(n){return null==n||"string"==typeof n})}(e)||nn("".concat("Error: Invalid input format on stdin",": expected an object with a string-valued `replies` map"),2),e}catch(n){throw n instanceof SyntaxError&&nn("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}function ae(n,e){return ue.apply(this,arguments)}function ue(){return(ue=v(k().m(function n(e,r){var t,o,i,a;return k().w(function(n){for(;;)switch(n.n){case 0:return o=Nn(r.check),n.n=1,Tn(o);case 1:return i=n.v,a=he(i,pe(r.check.name)),n.a(2,{classification:r.classification,workflow:e,job:pe(r.check.name),job_url:pe(null==a?void 0:a.url),failed_step:me(a),run_id:o,run_url:null!=(t=pe(null==i?void 0:i.url))?t:pe(r.check.link),branch:pe(null==i?void 0:i.headBranch),sha:pe(null==i?void 0:i.headSha),conclusion:pe(null==i?void 0:i.conclusion)})}},n)}))).apply(this,arguments)}function ce(n){return se.apply(this,arguments)}function se(){return(se=v(k().m(function n(e){var r;return k().w(function(n){for(;;)switch(n.n){case 0:if(r=Nn(e)){n.n=1;break}return n.a(2,"Failed latest result has no GitHub Actions run link.");case 1:return n.n=2,fn(["run","view",r,"--log-failed"],[1]);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function le(n){return{failed_log:fe(n)}}function fe(n){var e=de(l(n));if(!ve)return e;var r=ye(["rtk","log"],e);return 0===r.exitCode&&r.output.trim().length>0?de(r.output):e}function de(n){return n.split("\n").map(function(n){return n.replace(V,"")}).join("\n").trim()}function pe(n){return"string"==typeof n&&n.length>0?n:void 0}function he(n,e){var r,t;if(null!=n&&n.jobs&&0!==n.jobs.length)return null!=(r=null!=(t=n.jobs.find(function(n){return n.name===e}))?t:n.jobs.find(function(n){return"failure"===n.conclusion}))?r:n.jobs.find(function(n){return"completed"!==n.status})}function me(n){var e,r,t;if(null!=n&&n.steps&&0!==n.steps.length)return null!=(e=null==(r=n.steps.find(function(n){return"failure"===n.conclusion}))?void 0:r.name)?e:null==(t=n.steps.find(function(n){return"completed"!==n.status}))?void 0:t.name}var ve=0===ye(["rtk","--version"]).exitCode;function ye(n,e){var r,o,i,a,u=t(null!=(r=n[0])?r:"",n.slice(1),{encoding:"utf8",input:e});return{exitCode:null!=(o=u.status)?o:u.error?1:0,output:"".concat(null!=(i=u.stdout)?i:"").concat(null!=(a=u.stderr)?a:"")}}function we(n,e,r){return ge.apply(this,arguments)}function ge(){return(ge=v(k().m(function n(e,r,t){var o,i;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Re({query:"\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n issue(number: $number) {\n number\n title\n url\n body\n author { login }\n }\n }\n }\n",owner:e,name:r,number:t,noun:"issue",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.issue}});case 1:return o=n.v,n.n=2,Ie({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n issue(number: $number) {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n body\n createdAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:r,number:t,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.issue)?void 0:e.comments},mapNode:Pe});case 2:return i=n.v,n.a(2,b(b({},o),{},{messages:i}))}},n)}))).apply(this,arguments)}function be(n,e,r){return ke.apply(this,arguments)}function ke(){return(ke=v(k().m(function n(e,r,t){var o,i,a,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Re({query:"\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n number\n title\n url\n body\n author { login }\n }\n }\n }\n",owner:e,name:r,number:t,noun:"pull request",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.pullRequest}});case 1:return o=n.v,n.n=2,Promise.all([Se(e,r,t),Oe(e,r,t)]);case 2:return i=n.v,a=j(i,2),u=a[0],c=a[1],n.a(2,b(b({},o),{},{messages:[].concat(O(u),O(c)).sort(xe)}))}},n)}))).apply(this,arguments)}function xe(n,e){var r="string"==typeof n.createdAt?n.createdAt:"",t="string"==typeof e.createdAt?e.createdAt:"";return r.localeCompare(t)}function Se(n,e,r){return je.apply(this,arguments)}function je(){return(je=v(k().m(function n(e,r,t){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ie({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n body\n createdAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:r,number:t,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.comments},mapNode:Pe});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Oe(n,e,r){return Ae.apply(this,arguments)}function Ae(){return(Ae=v(k().m(function n(e,r,t){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ie({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviews(first: 100, after: $cursor) {\n nodes {\n id\n body\n state\n submittedAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:r,number:t,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.reviews},mapNode:qe});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Ie(n){return $e.apply(this,arguments)}function $e(){return($e=v(k().m(function n(e){var r,t,o,i,a;return k().w(function(n){for(;;)switch(n.n){case 0:t=[];case 1:return a=e,n.n=2,yn(e.query,{owner:e.owner,name:e.name,number:Number(e.number),cursor:r});case 2:if(i=a.selectConnection.call(a,n.v)){n.n=3;break}return n.a(2,t);case 3:if(t.push.apply(t,O(i.nodes.map(e.mapNode).filter(Ee))),i.pageInfo.hasNextPage){n.n=4;break}return n.a(2,t);case 4:r=null!=(o=i.pageInfo.endCursor)?o:void 0;case 5:n.n=1;break;case 6:return n.a(2)}},n)}))).apply(this,arguments)}function Re(n){return Ce.apply(this,arguments)}function Ce(){return(Ce=v(k().m(function n(e){var r,t,o,i,a;return k().w(function(n){for(;;)switch(n.n){case 0:return a=e,n.n=1,yn(e.query,{owner:e.owner,name:e.name,number:Number(e.number)});case 1:return(i=a.selectMetadata.call(a,n.v))||nn("Could not find ".concat(e.noun," #").concat(e.number," in ").concat(e.owner,"/").concat(e.name,".")),n.a(2,{number:i.number,title:i.title,url:i.url,author:null!=(r=null==(t=i.author)?void 0:t.login)?r:void 0,body:null!=(o=i.body)?o:""})}},n)}))).apply(this,arguments)}function Pe(n){var e,r;return{type:"comment",author:null!=(e=null==(r=n.author)?void 0:r.login)?e:void 0,createdAt:n.createdAt,url:n.url,body:n.body}}function qe(n){var e,r,t,o,i;return{type:"review",author:null!=(e=null==(r=n.author)?void 0:r.login)?e:void 0,state:null!=(t=n.state)?t:void 0,createdAt:null!=(o=n.submittedAt)?o:void 0,url:n.url,body:null!=(i=n.body)?i:""}}function Ee(n){return"string"==typeof n.body&&n.body.length>0}function Ne(n){return Te.apply(this,arguments)}function Te(){return(Te=v(k().m(function n(e){var r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ee(e);case 1:return r=n.v,n.a(2,"\nPlan a GitHub issue by gathering context, writing a code-focused plan, and posting that plan back to the issue.\nThe target issue number is #".concat(e,".\nHere is the fetched issue context as YAML:\n```yaml\n").concat(r.trim(),"\n```\n\nFollow this workflow:\n1. Read the fetched issue body and timeline messages carefully.\n2. Collect enough supporting information before planning:\n - Read the issue carefully and identify the exact requested behavior, constraints, and open questions.\n - Inspect the relevant code, surrounding call sites, related types, tests, configuration, recent diffs, and any other local context needed to understand the change.\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the issue depends on runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - If the issue depends on framework, library, platform, or language behavior, confirm it against the latest official documentation or another primary source instead of relying on memory.\n3. Propose a code-focused implementation plan grounded in the issue, fetched messages, and the evidence you collected. Describe what code should be written, where it should live, and how it should work. Prefer concrete guidance such as:\n - Which files, modules, classes, functions, types, tests, or configuration should be added or changed.\n - How the new or changed logic should flow through the system.\n - What interfaces, data shapes, condition branches, or side effects need to change.\n - Which edge cases, risks, and validation steps matter for the code change.\n - Any missing information or assumptions that affect the design.\n4. Post the plan back to issue #").concat(e," from the repository root then print the issue URL.\n\nFormat the issue comment exactly like this (without triple backticks):\n```\n## Code Plan\n\n### Files / Modules to Change\n\n- File or module and why it needs to change\n\n### Code to Write\n\n- Function, type, class, or branch to add or modify\n- How the logic should work\n\n### Validation\n\n- Test or check to confirm the behavior\n\n## Risks / Open Questions\n\n- Risk or uncertainty\n```\n").trim())}},n)}))).apply(this,arguments)}function _e(){return Le.apply(this,arguments)}function Le(){return(Le=v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return e=De,n.n=1,R(["gh","repo","view","--json","defaultBranchRef","--template","{{.defaultBranchRef.name}}"]);case 1:return n.a(2,e(n.v.trim(),"Error: could not determine the default branch"))}},n)}))).apply(this,arguments)}function De(n,e){if(n.length>0)return n;throw new Error(e)}function Fe(){return Ge.apply(this,arguments)}function Ge(){return(Ge=v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,_e();case 1:return e=n.v,n.a(2,"\nReview the current branch against the repository's default branch ".concat(e,' via `git diff "$(git merge-base ').concat(e,' HEAD)"`.\nFor each review comment, do the following before moving to the next comment:\n1. Collect the information you need:\n - Read the comment carefully and identify the exact claim being made.\n - Inspect the referenced code and the surrounding call sites, related types, tests, configuration, and recent diffs when they affect the claim.\n2. Gather supporting evidence:\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the claim is about runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - If the claim depends on framework, library, platform, or language behavior, confirm it against the latest official documentation or another primary source instead of relying on memory.\n3. Judge whether the comment is valid:\n - Mark it valid only when the available evidence shows the reported issue is still real in the current codebase.\n - Otherwise, mark it not valid.\nReport only the comments you judged valid, and include a short basis for each one that cites the evidence you used, such as the failing scenario, experiment result, or relevant official documentation. Do not modify code.\nIf there are no valid review comments, respond with exactly: `').concat(_,"`\n").trim())}},n)}))).apply(this,arguments)}function He(){return Me.apply(this,arguments)}function Me(){return(Me=v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,_e();case 1:return e=n.v,n.a(2,"\nSimplify the current branch against the repository's default branch using `git diff \"$(git merge-base ".concat(e," HEAD)\"`.\nFirst, inspect the diff and review the surrounding code for each changed area. This includes nearby functions, types, call sites, tests, configurations, and any other files that help determine if the change is truly necessary.\nLeverage this context to identify redundancies that can be safely removed or simplified. Look for duplicate logic, repeated conditionals, unnecessary abstractions, overlapping code paths, dead code, or edits made obsolete upon understanding the broader context.\n\nPrioritize simplifications that reduce the reviewer's burden, such as:\n- Removing redundant edits or dead code.\n- Eliminating or merging duplicated logic discovered by comparing the diff with related code.\n- Flattening unnecessarily complex logic introduced in the diff (e.g., using early returns to reduce nesting, simplifying boolean expressions, or removing redundant wrapper functions).\n\nCommit and push your changes. Afterward, summarize the redundancies or unnecessary complexity you have removed.\n").trim())}},n)}))).apply(this,arguments)}var We=new n;function Je(n){var r=We.command(n.name).description(n.description).allowExcessArguments(!1);n.argumentName&&r.argument(n.argumentName,n.argumentDescription),r.addOption(new e("--agent <agent>",n.optionDescription).choices(n.choices).makeOptionMandatory()).action(v(k().m(function e(){var r,t,o,i,a,u,c,s,l,f=arguments;return k().w(function(e){for(;;)switch(e.n){case 0:for(r=f.length,t=new Array(r),o=0;o<r;o++)t[o]=f[o];return i=j(t,2),a=i[0],u=i[1],c="string"==typeof a?a:"",s="string"==typeof a?u:a,l=process.stdout,e.n=1,n.run(s.agent,c);case 1:l.write.call(l,e.v);case 2:return e.a(2)}},e)})))}function Ue(n,e,r){var t=We.command(n).description(e).allowExcessArguments(!1);"function"!=typeof r?t.argument(r.argumentName,r.argumentDescription).action(v(k().m(function n(e){var t;return k().w(function(n){for(;;)switch(n.n){case 0:return t=process.stdout,n.n=1,r.run(e);case 1:t.write.call(t,n.v);case 2:return n.a(2)}},n)}))):t.action(v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return e=process.stdout,n.n=1,r();case 1:e.write.call(e,n.v);case 2:return n.a(2)}},n)})))}We.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),Je({name:"review",description:"Run review against the current branch with the selected agent",optionDescription:"Use a review agent",choices:["all","codex","claude","gemini"],run:function(n){return"all"===n?F(Fe(),{allAgentsLabel:"review agents",mapOutput:function(n,e){if(!function(n){return D.test(n)}(e))return"## ".concat(J(n),"\n\n").concat(e)}}):H(n,Fe())}}),Ue("review-codex","Run Codex review against the current branch",function(){return H("codex",Fe())}),Ue("review-claude","Run Claude Code review against the current branch",function(){return H("claude",Fe())}),Ue("review-gemini","Run Gemini CLI review against the current branch",function(){return H("gemini",Fe())}),Je({name:"plan",description:"Run planning against the specified issue with the selected agent",optionDescription:"Use a planning agent",choices:["all","codex","claude","gemini"],argumentName:"<issue-number>",argumentDescription:"GitHub issue number",run:function(n,e){return"all"===n?F(Ne(e),{allAgentsLabel:"planning agents"}):H(n,Ne(e))}}),Ue("plan-codex","Run Codex planning against the specified issue",{argumentName:"<issue-number>",argumentDescription:"GitHub issue number",run:function(n){return H("codex",Ne(n))}}),Ue("plan-claude","Run Claude Code planning against the specified issue",{argumentName:"<issue-number>",argumentDescription:"GitHub issue number",run:function(n){return H("claude",Ne(n))}}),Ue("plan-gemini","Run Gemini CLI planning against the specified issue",{argumentName:"<issue-number>",argumentDescription:"GitHub issue number",run:function(n){return H("gemini",Ne(n))}}),Je({name:"simplify",description:"Run PR simplification against the current branch with the selected agent",optionDescription:"Use a simplify agent",choices:["codex","claude","gemini"],run:function(n){return H(n,He())}}),Ue("simplify-codex","Run Codex PR simplification against the current branch",function(){return H("codex",He())}),Ue("simplify-claude","Run Claude Code PR simplification against the current branch",function(){return H("claude",He())}),Ue("simplify-gemini","Run Gemini CLI PR simplification against the current branch",function(){return H("gemini",He())}),We.command("open-pr").description("Create a pull request for the current branch").allowExcessArguments(!1).action(v(k().m(function n(){var e,r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,rn();case 1:return e=n.v,n.n=2,Qn(e||void 0);case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),We.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action(v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Xn();case 1:e=n.v,process.stdout.write(e.output),process.exit(e.exitCode);case 2:return n.a(2)}},n)}))),We.command("fetch-issue").description("Fetch an issue body and timeline messages as YAML").argument("<issue-number>","GitHub issue number").allowExcessArguments(!1).action(v(k().m(function n(e){var r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ee(e);case 1:r=n.v,process.stdout.write(r);case 2:return n.a(2)}},n)}))),We.command("fetch-pr").description("Fetch a pull request body and timeline messages as YAML, excluding inline comments").argument("[pr-number]","GitHub pull request number; defaults to the current branch pull request").allowExcessArguments(!1).action(v(k().m(function n(e){var r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,te(e);case 1:r=n.v,process.stdout.write(r);case 2:return n.a(2)}},n)}))),We.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action(v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Zn();case 1:e=n.v,process.stdout.write(e);case 2:return n.a(2)}},n)}))),We.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action(v(k().m(function n(){var e,r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Un();case 1:return e=n.v,n.n=2,Kn(e);case 2:r=n.v,process.stdout.write(r);case 3:return n.a(2)}},n)}))),await We.parseAsync(process.argv);
|
|
5
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcHJvY2Vzcy9ydW5Db21tYW5kLnRzIiwiLi4vc3JjL3Jldmlldy9ub0NvbmNlcm4udHMiLCIuLi9zcmMvYWdlbnQvYWdlbnRDb21tYW5kcy50cyIsIi4uL3NyYy95YW1sLnRzIiwiLi4vc3JjL3ByL3ByQ29tbWFuZHMudHMiLCIuLi9zcmMvcHJvbXB0cy9wbGFuUHJvbXB0LnRzIiwiLi4vc3JjL3JlcG8vZGVmYXVsdEJyYW5jaC50cyIsIi4uL3NyYy9wcm9tcHRzL3Jldmlld1Byb21wdC50cyIsIi4uL3NyYy9wcm9tcHRzL3NpbXBsaWZ5UHJvbXB0LnRzIiwiLi4vc3JjL2NsaS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGF3biB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBjcmVhdGVXcml0ZVN0cmVhbSB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgbWtkaXIgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGRpcm5hbWUgfSBmcm9tICdub2RlOnBhdGgnO1xuXG50eXBlIFJ1bkNvbW1hbmRPcHRpb25zID0ge1xuICBsb2dGaWxlUGF0aD86IHN0cmluZztcbiAgd2FpdE1lc3NhZ2U/OiBzdHJpbmcgfCBmYWxzZTtcbiAgd2FpdEludGVydmFsU2Vjb25kcz86IG51bWJlcjtcbn07XG5cbnR5cGUgUHJvZ3Jlc3NXcml0ZXIgPSAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkO1xuXG5jb25zdCBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyA9IDEwO1xuZXhwb3J0IGNvbnN0IFdBSVRfVVBfVE9fT05FX0hPVVJfV0FSTklORyA9ICdQTEVBU0UgV0FJVCBGT1IgVVAgVE8gMSBIT1VSLic7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Db21tYW5kV2l0aFByb2dyZXNzKGNvbW1hbmQ6IHN0cmluZ1tdLCBvcHRpb25zOiBSdW5Db21tYW5kT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmRbMF0gPz8gJycsIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsICdwaXBlJ10sXG4gIH0pO1xuICBjb25zdCBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKG9wdGlvbnMud2FpdE1lc3NhZ2UsIG9wdGlvbnMud2FpdEludGVydmFsU2Vjb25kcyk7XG4gIGNvbnN0IGNvbW1hbmRMb2dnZXIgPSBhd2FpdCBjcmVhdGVDb21tYW5kTG9nZ2VyKG9wdGlvbnMubG9nRmlsZVBhdGgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQsIChjaHVuaykgPT4gY29tbWFuZExvZ2dlci53cml0ZShjaHVuaykpLFxuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyLCAoY2h1bmspID0+IGNvbW1hbmRMb2dnZXIud3JpdGUoY2h1bmspKSxcbiAgICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgfSksXG4gICAgXSk7XG5cbiAgICBpZiAoZXhpdENvZGUgPT09IDApIHtcbiAgICAgIHJldHVybiBzdGRvdXQ7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gYCR7c3Rkb3V0fSR7c3RkZXJyfWA7XG4gICAgdGhyb3cgbmV3IEVycm9yKG91dHB1dCB8fCBgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgY29tbWFuZExvZ2dlci5jbG9zZSgpO1xuICAgIHN0b3BXYWl0UHJvZ3Jlc3MoKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzdHJlYW1Ub1RleHQoXG4gIHN0cmVhbTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgb25DaHVuaz86IChjaHVuazogc3RyaW5nKSA9PiB2b2lkXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoIXN0cmVhbSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICBjb25zdCBjaHVua1RleHQgPSB0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnID8gY2h1bmsgOiBjaHVuay50b1N0cmluZygndXRmOCcpO1xuICAgIGNodW5rcy5wdXNoKGNodW5rVGV4dCk7XG4gICAgb25DaHVuaz8uKGNodW5rVGV4dCk7XG4gIH1cbiAgcmV0dXJuIGNodW5rcy5qb2luKCcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdhaXRQcm9ncmVzcyhcbiAgd2FpdE1lc3NhZ2U6IHN0cmluZyB8IGZhbHNlIHwgdW5kZWZpbmVkLFxuICB3YWl0SW50ZXJ2YWxTZWNvbmRzID0gREVGQVVMVF9XQUlUX0lOVEVSVkFMX1NFQ09ORFMsXG4gIHdyaXRlUHJvZ3Jlc3M6IFByb2dyZXNzV3JpdGVyID0gKG1lc3NhZ2UpID0+IHByb2Nlc3Muc3RkZXJyLndyaXRlKG1lc3NhZ2UpXG4pOiAoKSA9PiB2b2lkIHtcbiAgaWYgKCF3YWl0TWVzc2FnZSkge1xuICAgIHJldHVybiAoKSA9PiB7fTtcbiAgfVxuXG4gIGNvbnN0IHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIHdyaXRlUHJvZ3Jlc3MoJy4nKTtcbiAgfSwgd2FpdEludGVydmFsU2Vjb25kcyAqIDEwMDApO1xuXG4gIHdyaXRlUHJvZ3Jlc3MoYCR7d2FpdE1lc3NhZ2V9IE9uZSBkb3QgcmVwcmVzZW50cyAke3dhaXRJbnRlcnZhbFNlY29uZHN9IHNlY29uZHM6IGApO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gICAgd3JpdGVQcm9ncmVzcygnXFxuJyk7XG4gIH07XG59XG5cbnR5cGUgQ29tbWFuZExvZ2dlciA9IHtcbiAgd3JpdGU6IChjaHVuazogc3RyaW5nKSA9PiB2b2lkO1xuICBjbG9zZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNvbW1hbmRMb2dnZXIobG9nRmlsZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8Q29tbWFuZExvZ2dlcj4ge1xuICBpZiAoIWxvZ0ZpbGVQYXRoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoKSA9PiB7fSxcbiAgICAgIGNsb3NlOiBhc3luYyAoKSA9PiB7fSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgd2FybiA9IChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBXYXJuaW5nOiBGYWlsZWQgdG8gd3JpdGUgY29tbWFuZCBsb2cgdG8gJHtsb2dGaWxlUGF0aH06ICR7U3RyaW5nKGVycm9yKX1cXG5gKTtcbiAgfTtcblxuICB0cnkge1xuICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUobG9nRmlsZVBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBjb25zdCBzdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbShsb2dGaWxlUGF0aCwgeyBmbGFnczogJ3cnIH0pO1xuXG4gICAgc3RyZWFtLm9uKCdlcnJvcicsIHdhcm4pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoY2h1bmspID0+IHtcbiAgICAgICAgaWYgKHN0cmVhbS53cml0YWJsZSkge1xuICAgICAgICAgIHN0cmVhbS53cml0ZShjaHVuayk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjbG9zZTogYXN5bmMgKCkgPT5cbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBzdHJlYW0uZW5kKCgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgIH0pLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgd2FybihlcnJvcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoKSA9PiB7fSxcbiAgICAgIGNsb3NlOiBhc3luYyAoKSA9PiB7fSxcbiAgICB9O1xuICB9XG59XG4iLCJleHBvcnQgY29uc3QgTk9fQ09OQ0VSTl9QSFJBU0UgPSAndGhlcmUgaXMgbm8gY29uY2Vybic7XG5leHBvcnQgY29uc3QgTk9fQ09OQ0VSTl9NRVNTQUdFID0gJ1RoZXJlIGlzIG5vIGNvbmNlcm4uJztcbiIsImltcG9ydCB7IGNyZWF0ZVdhaXRQcm9ncmVzcywgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcywgV0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcbmltcG9ydCB7IE5PX0NPTkNFUk5fTUVTU0FHRSwgTk9fQ09OQ0VSTl9QSFJBU0UgfSBmcm9tICcuLi9yZXZpZXcvbm9Db25jZXJuLmpzJztcblxuZXhwb3J0IGNvbnN0IEFHRU5UX05BTUVTID0gWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10gYXMgY29uc3Q7XG5jb25zdCBDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYID0gbmV3IFJlZ0V4cChgXFxcXGIke05PX0NPTkNFUk5fUEhSQVNFfVxcXFxiYCwgJ2knKTtcbmV4cG9ydCB0eXBlIEFnZW50TmFtZSA9ICh0eXBlb2YgQUdFTlRfTkFNRVMpW251bWJlcl07XG5cbnR5cGUgQWdlbnRDb21tYW5kT3B0aW9ucyA9IHtcbiAgd2FpdE1lc3NhZ2U/OiBzdHJpbmcgfCBmYWxzZTtcbn07XG5cbnR5cGUgQWxsQWdlbnRDb21tYW5kT3B0aW9ucyA9IHtcbiAgYWxsQWdlbnRzTGFiZWw6IHN0cmluZztcbiAgbWFwT3V0cHV0PzogKGFnZW50OiBBZ2VudE5hbWUsIG91dHB1dDogc3RyaW5nKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQWxsQWdlbnRDb21tYW5kcyhcbiAgcHJvbXB0OiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4sXG4gIG9wdGlvbnM6IEFsbEFnZW50Q29tbWFuZE9wdGlvbnMgPSB7IGFsbEFnZW50c0xhYmVsOiAnYWdlbnRzJyB9XG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZXNvbHZlZFByb21wdCA9IGF3YWl0IHByb21wdDtcbiAgY29uc3Qgc3RvcFdhaXRQcm9ncmVzcyA9IGNyZWF0ZVdhaXRQcm9ncmVzcyh3YWl0TWVzc2FnZUZvcihvcHRpb25zLmFsbEFnZW50c0xhYmVsKSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBvdXRwdXRzID0gKFxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIEFHRU5UX05BTUVTLm1hcChhc3luYyAoYWdlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSAoXG4gICAgICAgICAgICBhd2FpdCBydW5BZ2VudENvbW1hbmQoYWdlbnQsIHJlc29sdmVkUHJvbXB0LCB7XG4gICAgICAgICAgICAgIHdhaXRNZXNzYWdlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKS50cmltKCk7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbnMubWFwT3V0cHV0Py4oYWdlbnQsIG91dHB1dCkgPz8gYCMjICR7ZGlzcGxheUFnZW50TmFtZShhZ2VudCl9XFxuXFxuJHtvdXRwdXR9YDtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApLmZpbHRlcigob3V0cHV0KTogb3V0cHV0IGlzIHN0cmluZyA9PiBvdXRwdXQgIT09IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIG91dHB1dHMubGVuZ3RoID4gMCA/IG91dHB1dHMuam9pbignXFxuXFxuJykgOiBOT19DT05DRVJOX01FU1NBR0U7XG4gIH0gZmluYWxseSB7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5BZ2VudENvbW1hbmQoXG4gIGFnZW50OiBBZ2VudE5hbWUsXG4gIHByb21wdDogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+LFxuICBvcHRpb25zOiBBZ2VudENvbW1hbmRPcHRpb25zID0ge31cbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBydW5Db21tYW5kV2l0aFByb2dyZXNzKGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudCwgYXdhaXQgcHJvbXB0KSwge1xuICAgIGxvZ0ZpbGVQYXRoOiBhZ2VudExvZ0ZpbGVQYXRoKGFnZW50KSxcbiAgICB3YWl0TWVzc2FnZTogb3B0aW9ucy53YWl0TWVzc2FnZSA9PT0gdW5kZWZpbmVkID8gd2FpdE1lc3NhZ2VGb3IoZGlzcGxheUFnZW50TmFtZShhZ2VudCkpIDogb3B0aW9ucy53YWl0TWVzc2FnZSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudDogQWdlbnROYW1lLCBwcm9tcHQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgc3dpdGNoIChhZ2VudCkge1xuICAgIGNhc2UgJ2NvZGV4JzpcbiAgICAgIHJldHVybiBbJ25weCcsICctLXllcycsICdAb3BlbmFpL2NvZGV4QGxhdGVzdCcsICdleGVjJywgJy0tZGFuZ2Vyb3VzbHktYnlwYXNzLWFwcHJvdmFscy1hbmQtc2FuZGJveCcsIHByb21wdF07XG4gICAgY2FzZSAnY2xhdWRlJzpcbiAgICAgIHJldHVybiBbJ2NsYXVkZScsICctLWRhbmdlcm91c2x5LXNraXAtcGVybWlzc2lvbnMnLCAnLXAnLCBwcm9tcHRdO1xuICAgIGNhc2UgJ2dlbWluaSc6XG4gICAgICByZXR1cm4gW1xuICAgICAgICAnbnB4JyxcbiAgICAgICAgJy0teWVzJyxcbiAgICAgICAgJ0Bnb29nbGUvZ2VtaW5pLWNsaUBwcmV2aWV3JyxcbiAgICAgICAgJy0tYXBwcm92YWwtbW9kZScsXG4gICAgICAgICd5b2xvJyxcbiAgICAgICAgJy0tbW9kZWwnLFxuICAgICAgICAnZ2VtaW5pLTMuMS1wcm8tcHJldmlldycsXG4gICAgICAgICctcCcsXG4gICAgICAgIHByb21wdCxcbiAgICAgIF07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BsYXlBZ2VudE5hbWUoYWdlbnQ6IEFnZW50TmFtZSk6IHN0cmluZyB7XG4gIHN3aXRjaCAoYWdlbnQpIHtcbiAgICBjYXNlICdjb2RleCc6XG4gICAgICByZXR1cm4gJ0NvZGV4JztcbiAgICBjYXNlICdjbGF1ZGUnOlxuICAgICAgcmV0dXJuICdDbGF1ZGUgQ29kZSc7XG4gICAgY2FzZSAnZ2VtaW5pJzpcbiAgICAgIHJldHVybiAnR2VtaW5pIENMSSc7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2Uob3V0cHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIENPTlRBSU5TX05PX0NPTkNFUk5fU0VOVEVOQ0VfUkVHRVgudGVzdChvdXRwdXQpO1xufVxuXG5mdW5jdGlvbiB3YWl0TWVzc2FnZUZvcih0YXJnZXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgV2FpdGluZyBmb3IgJHt0YXJnZXR9IHRvIGZpbmlzaC4gJHtXQUlUX1VQX1RPX09ORV9IT1VSX1dBUk5JTkd9YDtcbn1cblxuZnVuY3Rpb24gYWdlbnRMb2dGaWxlUGF0aChhZ2VudDogQWdlbnROYW1lKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBsb2dzLyR7YWdlbnR9LSR7dGltZXN0YW1wRm9yTG9nRmlsZSgpfS5sb2dgO1xufVxuXG5mdW5jdGlvbiB0aW1lc3RhbXBGb3JMb2dGaWxlKCk6IHN0cmluZyB7XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IFttb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZF0gPSBbXG4gICAgbm93LmdldE1vbnRoKCkgKyAxLFxuICAgIG5vdy5nZXREYXRlKCksXG4gICAgbm93LmdldEhvdXJzKCksXG4gICAgbm93LmdldE1pbnV0ZXMoKSxcbiAgICBub3cuZ2V0U2Vjb25kcygpLFxuICBdLm1hcCh0d29EaWdpdHMpO1xuICByZXR1cm4gYCR7bW9udGh9JHtkYXl9LSR7aG91cn0ke21pbnV0ZX0ke3NlY29uZH1gO1xufVxuXG5mdW5jdGlvbiB0d29EaWdpdHModmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG59XG4iLCIvKipcbiAqIGBibG9ja1F1b3RlOiAnbGl0ZXJhbCdgOiBVc2VzIGEgcGlwZSAoYHByb3A6IHxgKSB0byByZXByZXNlbnQgbXVsdGlsaW5lIHN0cmluZ3MuXG4gKiBgbGluZVdpZHRoOiAwYDogRGlzYWJsZXMgbGluZSB3cmFwcGluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IHlhbWxTdHJpbmdpZnlPcHRpb25zID0geyBibG9ja1F1b3RlOiAnbGl0ZXJhbCcsIGxpbmVXaWR0aDogMCB9IGFzIGNvbnN0O1xuIiwiaW1wb3J0IHsgc3Bhd24sIHNwYXduU3luYyB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBzdGRlcnIgYXMgcHJvY2Vzc1N0ZGVyciwgc3RkaW4gYXMgcHJvY2Vzc1N0ZGluIH0gZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7IHNldFRpbWVvdXQgYXMgc2xlZXAgfSBmcm9tICdub2RlOnRpbWVycy9wcm9taXNlcyc7XG5pbXBvcnQgeyBzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHsgc3RyaW5naWZ5IGFzIHN0cmluZ2lmeVlhbWwgfSBmcm9tICd5YW1sJztcbmltcG9ydCB7IGNyZWF0ZVdhaXRQcm9ncmVzcywgV0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcbmltcG9ydCB7IHlhbWxTdHJpbmdpZnlPcHRpb25zIH0gZnJvbSAnLi4veWFtbC5qcyc7XG5cbmV4cG9ydCBjb25zdCBURVNUX1JFTEFURURfUEFUVEVSTiA9IC9cXGJ0ZXN0XFxiL2k7XG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMgPSAxMDtcbmV4cG9ydCBjb25zdCBURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTID0gMzYwO1xuY29uc3QgVEVTVF9DSEVDS19XQUlUX01FU1NBR0UgPSBgV2FpdGluZyBmb3IgdGVzdC1yZWxhdGVkIHdvcmtmbG93cyB0byBmaW5pc2guICR7V0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HfWA7XG5leHBvcnQgY29uc3QgWkVST19USU1FU1RBTVAgPSAnMDAwMS0wMS0wMVQwMDowMDowMFonO1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX1JVTl9KU09OX0ZJRUxEUyA9IFtcbiAgJ2F0dGVtcHQnLFxuICAnY29uY2x1c2lvbicsXG4gICdjcmVhdGVkQXQnLFxuICAnZGF0YWJhc2VJZCcsXG4gICdkaXNwbGF5VGl0bGUnLFxuICAnZXZlbnQnLFxuICAnaGVhZEJyYW5jaCcsXG4gICdoZWFkU2hhJyxcbiAgJ2pvYnMnLFxuICAnbmFtZScsXG4gICdudW1iZXInLFxuICAnc3RhcnRlZEF0JyxcbiAgJ3N0YXR1cycsXG4gICd1cGRhdGVkQXQnLFxuICAndXJsJyxcbiAgJ3dvcmtmbG93TmFtZScsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBKc29uT2JqZWN0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmV4cG9ydCB0eXBlIENoZWNrID0ge1xuICBidWNrZXQ/OiBzdHJpbmc7XG4gIGNvbXBsZXRlZEF0Pzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZXZlbnQ/OiBzdHJpbmc7XG4gIGxpbms/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHN0YXJ0ZWRBdD86IHN0cmluZztcbiAgc3RhdGU/OiBzdHJpbmc7XG4gIHdvcmtmbG93Pzogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgQ2lSZXN1bHRzID0ge1xuICBzdW1tYXJ5OiB7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBwYXNzOiBudW1iZXI7XG4gICAgZmFpbDogbnVtYmVyO1xuICAgIHBlbmRpbmc6IG51bWJlcjtcbiAgICBza2lwcGluZzogbnVtYmVyO1xuICAgIGNhbmNlbDogbnVtYmVyO1xuICB9O1xuICBjaGVja3M6IENoZWNrW107XG59O1xuXG5leHBvcnQgdHlwZSBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uID0gJ2ZhaWxlZCcgfCAncnVubmluZycgfCAnc3VjY2Vzc2Z1bCc7XG5cbmV4cG9ydCB0eXBlIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdCA9IHtcbiAgY2xhc3NpZmljYXRpb246IFdvcmtmbG93Q2xhc3NpZmljYXRpb247XG4gIGNoZWNrOiBDaGVjaztcbiAgY2hlY2tzOiBDaGVja1tdO1xufTtcblxudHlwZSBDb21wYWN0V29ya2Zsb3dSdW4gPSB7XG4gIGJyYW5jaD86IHN0cmluZztcbiAgY29uY2x1c2lvbj86IHN0cmluZztcbiAgZmFpbGVkX3N0ZXA/OiBzdHJpbmc7XG4gIGpvYj86IHN0cmluZztcbiAgam9iX3VybD86IHN0cmluZztcbiAgcnVuX2lkPzogc3RyaW5nO1xuICBydW5fdXJsPzogc3RyaW5nO1xuICBzaGE/OiBzdHJpbmc7XG4gIHdvcmtmbG93Pzogc3RyaW5nO1xufTtcblxudHlwZSBXb3JrZmxvd1J1blN0ZXAgPSB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG51bWJlcj86IG51bWJlcjtcbiAgc3RhdHVzPzogc3RyaW5nO1xufTtcblxudHlwZSBXb3JrZmxvd1J1bkpvYiA9IHtcbiAgY29uY2x1c2lvbj86IHN0cmluZztcbiAgZGF0YWJhc2VJZD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgc3RhdHVzPzogc3RyaW5nO1xuICBzdGVwcz86IFdvcmtmbG93UnVuU3RlcFtdO1xuICB1cmw/OiBzdHJpbmc7XG59O1xuXG50eXBlIFdvcmtmbG93UnVuRGV0YWlscyA9IEpzb25PYmplY3QgJiB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIGhlYWRCcmFuY2g/OiBzdHJpbmc7XG4gIGhlYWRTaGE/OiBzdHJpbmc7XG4gIGpvYnM/OiBXb3JrZmxvd1J1bkpvYltdO1xuICB1cmw/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBGQUlMRURfTE9HX0xJTkVfUFJFRklYX1BBVFRFUk4gPSAvXi4qP1xcdFVOS05PV04gU1RFUFxcdFxcZHs0fS1cXGR7Mn0tXFxkezJ9VFteWl0rWlxccyovO1xuXG50eXBlIFJldmlld0NvbW1lbnROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgZGlmZkh1bms/OiBzdHJpbmcgfCBudWxsO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgUmV2aWV3VGhyZWFkTm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgaXNSZXNvbHZlZDogYm9vbGVhbjtcbiAgaXNPdXRkYXRlZD86IGJvb2xlYW4gfCBudWxsO1xuICBwYXRoPzogc3RyaW5nIHwgbnVsbDtcbiAgbGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsTGluZT86IG51bWJlciB8IG51bGw7XG4gIHN0YXJ0TGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsU3RhcnRMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgY29tbWVudHM6IHtcbiAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICBwYWdlSW5mbzoge1xuICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgIH07XG4gIH07XG59O1xuXG50eXBlIElzc3VlTWVzc2FnZUNvbW1lbnROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59O1xuXG50eXBlIFByUmV2aWV3Tm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIHN0YXRlPzogc3RyaW5nIHwgbnVsbDtcbiAgc3VibWl0dGVkQXQ/OiBzdHJpbmcgfCBudWxsO1xuICB1cmw6IHN0cmluZztcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59O1xuXG50eXBlIE1lc3NhZ2UgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxudHlwZSBQYWdlSW5mbyA9IHtcbiAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG59O1xuXG50eXBlIE1lc3NhZ2VDb25uZWN0aW9uPFROb2RlPiA9IHtcbiAgbm9kZXM6IFROb2RlW107XG4gIHBhZ2VJbmZvOiBQYWdlSW5mbztcbn07XG5cbnR5cGUgUHVsbFJlcXVlc3RNZXNzYWdlc1Jlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgY29tbWVudHM/OiBNZXNzYWdlQ29ubmVjdGlvbjxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZT47XG4gICAgICAgIHJldmlld3M/OiBNZXNzYWdlQ29ubmVjdGlvbjxQclJldmlld05vZGU+O1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBJc3N1ZU1lc3NhZ2VzUmVzcG9uc2UgPSB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIGlzc3VlPzoge1xuICAgICAgICBjb21tZW50cz86IE1lc3NhZ2VDb25uZWN0aW9uPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlPjtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn07XG5cbnR5cGUgUHVsbFJlcXVlc3RNZXRhZGF0YVJlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgbnVtYmVyOiBudW1iZXI7XG4gICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgIHVybDogc3RyaW5nO1xuICAgICAgICBib2R5Pzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59O1xuXG50eXBlIElzc3VlTWV0YWRhdGFSZXNwb25zZSA9IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgaXNzdWU/OiB7XG4gICAgICAgIG51bWJlcjogbnVtYmVyO1xuICAgICAgICB0aXRsZTogc3RyaW5nO1xuICAgICAgICB1cmw6IHN0cmluZztcbiAgICAgICAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gICAgICAgIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBNZXRhZGF0YU5vZGUgPSB7XG4gIG51bWJlcjogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xufTtcblxudHlwZSBSdW5Db21tYW5kT3B0aW9ucyA9IHtcbiAgc3RkaW5EYXRhPzogc3RyaW5nO1xuICBhbGxvd2VkRXhpdENvZGVzPzogbnVtYmVyW107XG59O1xuXG5jb25zdCBHSF9SRVRSWV9NQVhfQVRURU1QVFMgPSAzO1xuY29uc3QgR0hfUkVUUllfQkFTRV9ERUxBWV9NUyA9IDEwMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9ncmVzcyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgcHJvY2Vzc1N0ZGVyci53cml0ZShgJHttZXNzYWdlfVxcbmApO1xufVxuXG5mdW5jdGlvbiBleGl0V2l0aEVycm9yKG1lc3NhZ2U6IHN0cmluZywgY29kZSA9IDEpOiBuZXZlciB7XG4gIHByb2Nlc3NTdGRlcnIud3JpdGUoYCR7bWVzc2FnZX1cXG5gKTtcbiAgcHJvY2Vzcy5leGl0KGNvZGUpO1xufVxuXG5mdW5jdGlvbiBpc1RyYW5zaWVudEdoRmFpbHVyZShjb21tYW5kOiBzdHJpbmdbXSwgZXhpdENvZGU6IG51bWJlciwgb3V0cHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGNvbW1hbmRbMF0gIT09ICdnaCcgfHwgZXhpdENvZGUgPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gLyhIVFRQIDUwWzAyMzRdXFxifFdlIGhhZCBpc3N1ZXMgcHJvZHVjaW5nIHRoZSByZXNwb25zZSB0byB5b3VyIHJlcXVlc3QpL2kudGVzdChvdXRwdXQpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFN0ZGluVGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAocHJvY2Vzc1N0ZGluLmlzVFRZKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBhd2FpdCBzdHJlYW1Ub1RleHQocHJvY2Vzc1N0ZGluKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBpbnB1dCA9IGF3YWl0IHJlYWRTdGRpblRleHQoKTtcbiAgaWYgKGlucHV0Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cbiAgZXhpdFdpdGhFcnJvcignRXJyb3I6IEpTT04gaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nLCAyKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmQoY29tbWFuZDogc3RyaW5nW10sIG9wdGlvbnM6IFJ1bkNvbW1hbmRPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBhbGxvd2VkRXhpdENvZGVzID0gb3B0aW9ucy5hbGxvd2VkRXhpdENvZGVzID8/IFtdO1xuXG4gIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IEdIX1JFVFJZX01BWF9BVFRFTVBUUzsgYXR0ZW1wdCArPSAxKSB7XG4gICAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmRbMF0gPz8gJycsIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICAgIHN0ZGlvOiBbJ3BpcGUnLCAncGlwZScsICdwaXBlJ10sXG4gICAgfSk7XG4gICAgaWYgKG9wdGlvbnMuc3RkaW5EYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHByb2Muc3RkaW4uZW5kKG9wdGlvbnMuc3RkaW5EYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvYy5zdGRpbi5lbmQoKTtcbiAgICB9XG5cbiAgICBjb25zdCBbc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHN0cmVhbVRvVGV4dChwcm9jLnN0ZG91dCksXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRlcnIpLFxuICAgICAgbmV3IFByb21pc2U8bnVtYmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHByb2Mub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgICAgICBwcm9jLm9uY2UoJ2Nsb3NlJywgKGNvZGUpID0+IHJlc29sdmUoY29kZSA/PyAxKSk7XG4gICAgICB9KSxcbiAgICBdKTtcbiAgICBjb25zdCBvdXRwdXQgPSBgJHtzdGRvdXR9JHtzdGRlcnJ9YDtcblxuICAgIGlmIChleGl0Q29kZSA9PT0gMCB8fCBhbGxvd2VkRXhpdENvZGVzLmluY2x1ZGVzKGV4aXRDb2RlKSkge1xuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG5cbiAgICBpZiAoaXNUcmFuc2llbnRHaEZhaWx1cmUoY29tbWFuZCwgZXhpdENvZGUsIG91dHB1dCkgJiYgYXR0ZW1wdCA8IEdIX1JFVFJZX01BWF9BVFRFTVBUUykge1xuICAgICAgcHJvZ3Jlc3MoYFRyYW5zaWVudCBHaXRIdWIgQ0xJIGZhaWx1cmU7IHJldHJ5aW5nLi4uIChhdHRlbXB0ICR7YXR0ZW1wdH0gb2YgJHtHSF9SRVRSWV9NQVhfQVRURU1QVFMgLSAxfSlgKTtcbiAgICAgIGF3YWl0IHNsZWVwKEdIX1JFVFJZX0JBU0VfREVMQVlfTVMgKiBhdHRlbXB0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGV4aXRXaXRoRXJyb3Iob3V0cHV0IHx8IGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbiAgfVxuICBleGl0V2l0aEVycm9yKGBDb21tYW5kIGZhaWxlZCBhZnRlciAke0dIX1JFVFJZX01BWF9BVFRFTVBUU30gYXR0ZW1wdHM6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnaChhcmdzOiBzdHJpbmdbXSwgc3RkaW5EYXRhPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGF3YWl0IHJ1bkNvbW1hbmQoWydnaCcsIC4uLmFyZ3NdLCB7IHN0ZGluRGF0YSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdoQWxsb3dFeGl0Q29kZXMoXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICBhbGxvd2VkRXhpdENvZGVzOiBudW1iZXJbXSxcbiAgc3RkaW5EYXRhPzogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gYXdhaXQgcnVuQ29tbWFuZChbJ2doJywgLi4uYXJnc10sIHsgc3RkaW5EYXRhLCBhbGxvd2VkRXhpdENvZGVzIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudFJlcG9QYXJ0cygpOiBQcm9taXNlPFtzdHJpbmcsIHN0cmluZ10+IHtcbiAgY29uc3QgbmFtZVdpdGhPd25lciA9IChhd2FpdCBnaChbJ3JlcG8nLCAndmlldycsICctLWpzb24nLCAnbmFtZVdpdGhPd25lcicsICctLWpxJywgJy5uYW1lV2l0aE93bmVyJ10pKS50cmltKCk7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBuYW1lV2l0aE93bmVyLnNwbGl0KCcvJywgMik7XG4gIGlmICghb3duZXIgfHwgIW5hbWUpIHtcbiAgICBleGl0V2l0aEVycm9yKCdFcnJvcjogY291bGQgbm90IGRldGVybWluZSBjdXJyZW50IHJlcG9zaXRvcnknKTtcbiAgfVxuICByZXR1cm4gW293bmVyLCBuYW1lXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRQck51bWJlcigpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gKGF3YWl0IGdoKFsncHInLCAndmlldycsICctLWpzb24nLCAnbnVtYmVyJywgJy0tanEnLCAnLm51bWJlciddKSkudHJpbSgpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ3JhcGhxbDxUIGV4dGVuZHMgSnNvbk9iamVjdD4oXG4gIHF1ZXJ5OiBzdHJpbmcsXG4gIHZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZD4gPSB7fVxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IGFyZ3MgPSBbJ2FwaScsICdncmFwaHFsJywgJy1GJywgJ3F1ZXJ5PUAtJ107XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcnMpKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgYXJncy5wdXNoKCctRicsIGAke2tleX09JHt2YWx1ZX1gKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShhd2FpdCBnaChhcmdzLCBxdWVyeSkpIGFzIEpzb25PYmplY3QgJiB7IGVycm9ycz86IEFycmF5PHsgbWVzc2FnZT86IHN0cmluZyB9PiB9O1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSkge1xuICAgIHJldHVybiByZXNwb25zZSBhcyBUO1xuICB9XG5cbiAgY29uc3QgZXJyb3JNZXNzYWdlcyA9IHJlc3BvbnNlLmVycm9ycy5tYXAoKGVycm9yKSA9PiBlcnJvci5tZXNzYWdlID8/ICdVbmtub3duIEdyYXBoUUwgZXJyb3InKS5qb2luKCdcXG4nKTtcbiAgZXhpdFdpdGhFcnJvcihgR3JhcGhRTCBBUEkgZXJyb3I6XFxuJHtlcnJvck1lc3NhZ2VzfWApO1xufVxuXG5jb25zdCBSRVZJRVdfVEhSRUFEX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgcmV2aWV3VGhyZWFkcyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgICBpc091dGRhdGVkXG4gICAgICAgICAgICBwYXRoXG4gICAgICAgICAgICBsaW5lXG4gICAgICAgICAgICBvcmlnaW5hbExpbmVcbiAgICAgICAgICAgIHN0YXJ0TGluZVxuICAgICAgICAgICAgb3JpZ2luYWxTdGFydExpbmVcbiAgICAgICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDApIHtcbiAgICAgICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgICAgIGRpZmZIdW5rXG4gICAgICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFJFVklFV19DT01NRU5UX1FVRVJZID0gYFxuICBxdWVyeSgkdGhyZWFkSWQ6IElEISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgbm9kZShpZDogJHRocmVhZElkKSB7XG4gICAgICAuLi4gb24gUHVsbFJlcXVlc3RSZXZpZXdUaHJlYWQge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgZGlmZkh1bmtcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUkVWSUVXX1RIUkVBRF9JRFNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdUaHJlYWRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgSVNTVUVfTUVTU0FHRVNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIGlzc3VlKG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBJU1NVRV9RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISkge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIGlzc3VlKG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBudW1iZXJcbiAgICAgICAgdGl0bGVcbiAgICAgICAgdXJsXG4gICAgICAgIGJvZHlcbiAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUFJfQ09NTUVOVFNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBQUl9RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISkge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBudW1iZXJcbiAgICAgICAgdGl0bGVcbiAgICAgICAgdXJsXG4gICAgICAgIGJvZHlcbiAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUFJfUkVWSUVXU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIHJldmlld3MoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgIHN1Ym1pdHRlZEF0XG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tbWVudEF1dGhvcihjb21tZW50OiBSZXZpZXdDb21tZW50Tm9kZSk6IFJldmlld0NvbW1lbnROb2RlICYgeyBhdXRob3I/OiBzdHJpbmcgfCBudWxsIH0ge1xuICByZXR1cm4ge1xuICAgIC4uLmNvbW1lbnQsXG4gICAgYXV0aG9yOiB0eXBlb2YgY29tbWVudC5hdXRob3IgPT09ICdzdHJpbmcnID8gY29tbWVudC5hdXRob3IgOiAoY29tbWVudC5hdXRob3I/LmxvZ2luID8/IG51bGwpLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFxuICBxdWVyeTogc3RyaW5nLFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIsXG4gIG9uVGhyZWFkOiAodGhyZWFkOiBSZXZpZXdUaHJlYWROb2RlKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPlxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgcmV2aWV3VGhyZWFkcyA9IChcbiAgICAgIGF3YWl0IGdyYXBocWw8e1xuICAgICAgICBkYXRhPzoge1xuICAgICAgICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICAgICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgICAgICAgcmV2aWV3VGhyZWFkcz86IHtcbiAgICAgICAgICAgICAgICBub2RlczogUmV2aWV3VGhyZWFkTm9kZVtdO1xuICAgICAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0+KHF1ZXJ5LCB7XG4gICAgICAgIG93bmVyLFxuICAgICAgICBuYW1lLFxuICAgICAgICBudW1iZXI6IE51bWJlcihwck51bWJlciksXG4gICAgICAgIGN1cnNvcixcbiAgICAgIH0pXG4gICAgKS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8ucmV2aWV3VGhyZWFkcztcblxuICAgIGlmICghcmV2aWV3VGhyZWFkcykge1xuICAgICAgZXhpdFdpdGhFcnJvcihcbiAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIHJldmlld1RocmVhZHMgaW4gR3JhcGhRTCByZXNwb25zZS4gVGhlIHB1bGwgcmVxdWVzdCBtYXkgbm90IGV4aXN0IG9yIHRoZXJlIHdhcyBhbiBBUEkgZXJyb3IuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRocmVhZCBvZiByZXZpZXdUaHJlYWRzLm5vZGVzKSB7XG4gICAgICBhd2FpdCBvblRocmVhZCh0aHJlYWQpO1xuICAgIH1cblxuICAgIGlmICghcmV2aWV3VGhyZWFkcy5wYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjdXJzb3IgPSByZXZpZXdUaHJlYWRzLnBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMoXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlclxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBpZHM6IHN0cmluZ1tdID0gW107XG4gIGF3YWl0IHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhSRVZJRVdfVEhSRUFEX0lEU19RVUVSWSwgb3duZXIsIG5hbWUsIHByTnVtYmVyLCAodGhyZWFkKSA9PiB7XG4gICAgaWYgKCF0aHJlYWQuaXNSZXNvbHZlZCkge1xuICAgICAgaWRzLnB1c2godGhyZWFkLmlkKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaWRzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5yZXNvbHZlZFJldmlld1RocmVhZHMoXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlclxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPiB7XG4gIGNvbnN0IHRocmVhZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gPSBbXTtcblxuICBhd2FpdCBwYWdpbmF0ZVJldmlld1RocmVhZHMoUkVWSUVXX1RIUkVBRF9RVUVSWSwgb3duZXIsIG5hbWUsIHByTnVtYmVyLCBhc3luYyAodGhyZWFkKSA9PiB7XG4gICAgaWYgKHRocmVhZC5pc1Jlc29sdmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tbWVudHMgPSB0aHJlYWQuY29tbWVudHMubm9kZXMubWFwKG5vcm1hbGl6ZUNvbW1lbnRBdXRob3IpO1xuICAgIGxldCBwYWdlSW5mbyA9IHRocmVhZC5jb21tZW50cy5wYWdlSW5mbztcbiAgICBsZXQgY3Vyc29yID0gcGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcblxuICAgIHdoaWxlIChwYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgY29uc3QgY29tbWVudENvbm5lY3Rpb24gPSAoXG4gICAgICAgIGF3YWl0IGdyYXBocWw8e1xuICAgICAgICAgIGRhdGE/OiB7XG4gICAgICAgICAgICBub2RlPzoge1xuICAgICAgICAgICAgICBjb21tZW50cz86IHtcbiAgICAgICAgICAgICAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICAgICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH0+KFJFVklFV19DT01NRU5UX1FVRVJZLCB7IHRocmVhZElkOiB0aHJlYWQuaWQsIGN1cnNvciB9KVxuICAgICAgKS5kYXRhPy5ub2RlPy5jb21tZW50cztcblxuICAgICAgaWYgKCFjb21tZW50Q29ubmVjdGlvbikge1xuICAgICAgICBleGl0V2l0aEVycm9yKGBDb3VsZCBub3QgZmluZCBjb21tZW50cyBpbiBHcmFwaFFMIHJlc3BvbnNlIGZvciB0aHJlYWQgJHt0aHJlYWQuaWR9LmApO1xuICAgICAgfVxuXG4gICAgICBjb21tZW50cy5wdXNoKC4uLmNvbW1lbnRDb25uZWN0aW9uLm5vZGVzLm1hcChub3JtYWxpemVDb21tZW50QXV0aG9yKSk7XG4gICAgICBwYWdlSW5mbyA9IGNvbW1lbnRDb25uZWN0aW9uLnBhZ2VJbmZvO1xuICAgICAgY3Vyc29yID0gcGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0aHJlYWRzLnB1c2goe1xuICAgICAgaWQ6IHRocmVhZC5pZCxcbiAgICAgIGlzUmVzb2x2ZWQ6IHRocmVhZC5pc1Jlc29sdmVkLFxuICAgICAgaXNPdXRkYXRlZDogdGhyZWFkLmlzT3V0ZGF0ZWQsXG4gICAgICBwYXRoOiB0aHJlYWQucGF0aCxcbiAgICAgIGxpbmU6IHRocmVhZC5saW5lLFxuICAgICAgb3JpZ2luYWxMaW5lOiB0aHJlYWQub3JpZ2luYWxMaW5lLFxuICAgICAgc3RhcnRMaW5lOiB0aHJlYWQuc3RhcnRMaW5lLFxuICAgICAgb3JpZ2luYWxTdGFydExpbmU6IHRocmVhZC5vcmlnaW5hbFN0YXJ0TGluZSxcbiAgICAgIGNvbW1lbnRzLFxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gdGhyZWFkcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHlhbWxEdW1wKGRhdGE6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gc3RyaW5naWZ5WWFtbChkYXRhLCB5YW1sU3RyaW5naWZ5T3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWVwQ29weTxUPihkYXRhOiBUKTogVCB7XG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKSBhcyBUO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGF0ZXN0UHJDaVJlc3VsdHMocHJOdW1iZXI/OiBzdHJpbmcpOiBQcm9taXNlPENpUmVzdWx0cz4ge1xuICBjb25zdCBhcmdzID0gWydwcicsICdjaGVja3MnXTtcbiAgaWYgKHByTnVtYmVyKSB7XG4gICAgYXJncy5wdXNoKHByTnVtYmVyKTtcbiAgfVxuICBhcmdzLnB1c2goJy0tanNvbicsICdidWNrZXQsY29tcGxldGVkQXQsZGVzY3JpcHRpb24sZXZlbnQsbGluayxuYW1lLHN0YXJ0ZWRBdCxzdGF0ZSx3b3JrZmxvdycpO1xuXG4gIGxldCBjaGVja3M6IENoZWNrW10gPSBbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCBnaEFsbG93RXhpdENvZGVzKGFyZ3MsIFs4XSk7XG4gICAgY2hlY2tzID0gcmF3LnRyaW0oKS5sZW5ndGggPiAwID8gKEpTT04ucGFyc2UocmF3KSBhcyBDaGVja1tdKSA6IFtdO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBjaGVja3MgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3VtbWFyeSA9IGNoZWNrcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgbnVtYmVyPj4oKGNvdW50cywgY2hlY2spID0+IHtcbiAgICBjb25zdCBidWNrZXQgPSBjaGVjay5idWNrZXQgPz8gJyc7XG4gICAgY291bnRzW2J1Y2tldF0gPSAoY291bnRzW2J1Y2tldF0gPz8gMCkgKyAxO1xuICAgIHJldHVybiBjb3VudHM7XG4gIH0sIHt9KTtcblxuICByZXR1cm4ge1xuICAgIHN1bW1hcnk6IHtcbiAgICAgIHRvdGFsOiBjaGVja3MubGVuZ3RoLFxuICAgICAgcGFzczogc3VtbWFyeS5wYXNzID8/IDAsXG4gICAgICBmYWlsOiBzdW1tYXJ5LmZhaWwgPz8gMCxcbiAgICAgIHBlbmRpbmc6IHN1bW1hcnkucGVuZGluZyA/PyAwLFxuICAgICAgc2tpcHBpbmc6IHN1bW1hcnkuc2tpcHBpbmcgPz8gMCxcbiAgICAgIGNhbmNlbDogc3VtbWFyeS5jYW5jZWwgPz8gMCxcbiAgICB9LFxuICAgIGNoZWNrcyxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MoXG4gIHByTnVtYmVyOiBzdHJpbmcsXG4gIHNsZWVwRm46IChzZWNvbmRzOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD4gPSBzbGVlcFNlY29uZHMsXG4gIGxhdGVzdENpUmVzdWx0c0ZuOiAocHJOdW1iZXI/OiBzdHJpbmcpID0+IENpUmVzdWx0cyB8IFByb21pc2U8Q2lSZXN1bHRzPiA9IGxhdGVzdFByQ2lSZXN1bHRzLFxuICB3cml0ZVByb2dyZXNzRm46IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQgPSAobWVzc2FnZSkgPT4gcHJvY2Vzc1N0ZGVyci53cml0ZShtZXNzYWdlKVxuKTogUHJvbWlzZTxbQ2lSZXN1bHRzLCBudW1iZXIsIGJvb2xlYW5dPiB7XG4gIGxldCBhdHRlbXB0cyA9IDA7XG4gIGxldCBjaVJlc3VsdHMgPSBhd2FpdCBsYXRlc3RDaVJlc3VsdHNGbihwck51bWJlcik7XG4gIGxldCBzdG9wV2FpdFByb2dyZXNzID0gKCkgPT4ge307XG5cbiAgdHJ5IHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICBjb25zdCBjbGFzc2lmaWVkUmVzdWx0cyA9IGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0cyk7XG4gICAgICBjb25zdCBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdID0gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKGNsYXNzaWZpZWRSZXN1bHRzKTtcblxuICAgICAgaWYgKE9iamVjdC5rZXlzKGZhaWxlZFJlc3VsdHMpLmxlbmd0aCA+IDAgfHwgT2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW2NpUmVzdWx0cywgYXR0ZW1wdHMsIGZhbHNlXTtcbiAgICAgIH1cbiAgICAgIGlmIChhdHRlbXB0cyA+PSBURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTKSB7XG4gICAgICAgIHJldHVybiBbY2lSZXN1bHRzLCBhdHRlbXB0cywgdHJ1ZV07XG4gICAgICB9XG5cbiAgICAgIGF0dGVtcHRzICs9IDE7XG4gICAgICBpZiAoYXR0ZW1wdHMgPT09IDEpIHtcbiAgICAgICAgc3RvcFdhaXRQcm9ncmVzcyA9IGNyZWF0ZVdhaXRQcm9ncmVzcyhcbiAgICAgICAgICBURVNUX0NIRUNLX1dBSVRfTUVTU0FHRSxcbiAgICAgICAgICBURVNUX0NIRUNLX1dBSVRfSU5URVJWQUxfU0VDT05EUyxcbiAgICAgICAgICB3cml0ZVByb2dyZXNzRm5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHNsZWVwRm4oVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMpO1xuICAgICAgY2lSZXN1bHRzID0gYXdhaXQgbGF0ZXN0Q2lSZXN1bHRzRm4ocHJOdW1iZXIpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBzdG9wV2FpdFByb2dyZXNzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0czogQ2lSZXN1bHRzKTogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiB7XG4gIGNvbnN0IGxhdGVzdFJlc3VsdHNCeVdvcmtmbG93ID0gY2lSZXN1bHRzLmNoZWNrcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgQ2hlY2tbXT4+KChncm91cGVkUmVzdWx0cywgY2hlY2spID0+IHtcbiAgICBjb25zdCB3b3JrZmxvd0tleSA9IGNoZWNrLndvcmtmbG93IHx8IGNoZWNrLm5hbWUgfHwgJ3Vua25vd25fd29ya2Zsb3cnO1xuICAgIGdyb3VwZWRSZXN1bHRzW3dvcmtmbG93S2V5XSA/Pz0gW107XG4gICAgZ3JvdXBlZFJlc3VsdHNbd29ya2Zsb3dLZXldLnB1c2goY2hlY2spO1xuICAgIHJldHVybiBncm91cGVkUmVzdWx0cztcbiAgfSwge30pO1xuXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMobGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3cpLm1hcCgoW3dvcmtmbG93S2V5LCBjaGVja3NdKSA9PiB7XG4gICAgICBjb25zdCBsYXRlc3RBdHRlbXB0Q2hlY2tzID0gbGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3coY2hlY2tzKTtcbiAgICAgIGNvbnN0IGZpcnN0Q2hlY2sgPSBsYXRlc3RBdHRlbXB0Q2hlY2tzWzBdO1xuICAgICAgaWYgKCFmaXJzdENoZWNrKSB7XG4gICAgICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBubyBjaGVja3MgZm91bmQgZm9yIHdvcmtmbG93ICR7d29ya2Zsb3dLZXl9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBsYXRlc3RDaGVjayA9XG4gICAgICAgIGxhdGVzdEF0dGVtcHRDaGVja3MucmVkdWNlPENoZWNrIHwgdW5kZWZpbmVkPigoY3VycmVudExhdGVzdCwgY2hlY2spID0+IHtcbiAgICAgICAgICBpZiAoIWN1cnJlbnRMYXRlc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVjaztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrKSA+IGxhdGVzdENoZWNrVGltZXN0YW1wKGN1cnJlbnRMYXRlc3QpID8gY2hlY2sgOiBjdXJyZW50TGF0ZXN0O1xuICAgICAgICB9LCB1bmRlZmluZWQpID8/IGZpcnN0Q2hlY2s7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIHdvcmtmbG93S2V5LFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NpZmljYXRpb246IHdvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24obGF0ZXN0QXR0ZW1wdENoZWNrcyksXG4gICAgICAgICAgY2hlY2s6IGxhdGVzdENoZWNrLFxuICAgICAgICAgIGNoZWNrczogbGF0ZXN0QXR0ZW1wdENoZWNrcyxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChcbiAgY2xhc3NpZmllZFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD5cbik6IFtSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+LCBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+XSB7XG4gIGNvbnN0IGZhaWxlZFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4gPSB7fTtcbiAgY29uc3QgcnVubmluZ1Jlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4gPSB7fTtcblxuICBmb3IgKGNvbnN0IFt3b3JrZmxvd0tleSwgcmVzdWx0XSBvZiBPYmplY3QuZW50cmllcyhjbGFzc2lmaWVkUmVzdWx0cykpIHtcbiAgICBpZiAocmVzdWx0LmNsYXNzaWZpY2F0aW9uID09PSAnZmFpbGVkJykge1xuICAgICAgZmFpbGVkUmVzdWx0c1t3b3JrZmxvd0tleV0gPSByZXN1bHQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdC5jbGFzc2lmaWNhdGlvbiA9PT0gJ3J1bm5pbmcnICYmIHJlc3VsdC5jaGVja3Muc29tZSgoY2hlY2spID0+IHRlc3RSZWxhdGVkQ2hlY2soY2hlY2spKSkge1xuICAgICAgcnVubmluZ1Jlc3VsdHNbd29ya2Zsb3dLZXldID0gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2s6IENoZWNrIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbGluayA9IGNoZWNrPy5saW5rO1xuICBpZiAoIWxpbmspIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBsaW5rLm1hdGNoKC9cXC9hY3Rpb25zXFwvcnVuc1xcLyhcXGQrKS8pPy5bMV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3b3JrZmxvd1J1bihydW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxKc29uT2JqZWN0IHwgdW5kZWZpbmVkPiB7XG4gIGlmICghcnVuSWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcnVuSnNvbiA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydydW4nLCAndmlldycsIHJ1bklkLCAnLS1qc29uJywgV09SS0ZMT1dfUlVOX0pTT05fRklFTERTLmpvaW4oJywnKV0sIFsxXSk7XG4gIGlmIChydW5Kc29uLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShydW5Kc29uKSBhcyBKc29uT2JqZWN0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBwcm9jZXNzU3RkZXJyLndyaXRlKGBXYXJuaW5nOiBDb3VsZCBub3QgcGFyc2UgSlNPTiBmb3Igd29ya2Zsb3cgcnVuICR7cnVuSWR9OiAke2Vycm9yLm1lc3NhZ2V9XFxuYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3coY2hlY2tzOiBDaGVja1tdKTogQ2hlY2tbXSB7XG4gIGNvbnN0IGdyb3VwcyA9IGNoZWNrcy5yZWR1Y2UoKGdyb3VwZWRDaGVja3MsIGNoZWNrKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gd29ya2Zsb3dBdHRlbXB0S2V5KGNoZWNrKTtcbiAgICBjb25zdCBncm91cCA9IGdyb3VwZWRDaGVja3MuZ2V0KGtleSk7XG4gICAgaWYgKGdyb3VwKSB7XG4gICAgICBncm91cC5wdXNoKGNoZWNrKTtcbiAgICAgIHJldHVybiBncm91cGVkQ2hlY2tzO1xuICAgIH1cbiAgICBncm91cGVkQ2hlY2tzLnNldChrZXksIFtjaGVja10pO1xuICAgIHJldHVybiBncm91cGVkQ2hlY2tzO1xuICB9LCBuZXcgTWFwPHN0cmluZywgQ2hlY2tbXT4oKSk7XG5cbiAgcmV0dXJuIEFycmF5LmZyb20oZ3JvdXBzLnZhbHVlcygpKS5yZWR1Y2U8Q2hlY2tbXT4oKGxhdGVzdEdyb3VwLCBjdXJyZW50R3JvdXApID0+IHtcbiAgICBpZiAobGF0ZXN0R3JvdXAubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gY3VycmVudEdyb3VwO1xuICAgIH1cblxuICAgIHJldHVybiBsYXRlc3RHcm91cFRpbWVzdGFtcChjdXJyZW50R3JvdXApID4gbGF0ZXN0R3JvdXBUaW1lc3RhbXAobGF0ZXN0R3JvdXApID8gY3VycmVudEdyb3VwIDogbGF0ZXN0R3JvdXA7XG4gIH0sIFtdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93QXR0ZW1wdEtleShjaGVjazogQ2hlY2spOiBzdHJpbmcge1xuICBjb25zdCBydW5JZCA9IHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKGNoZWNrKTtcbiAgcmV0dXJuIHJ1bklkID8gYHJ1bjoke3J1bklkfWAgOiAndW5rbm93bl9ydW4nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbihjaGVja3M6IENoZWNrW10pOiBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uIHtcbiAgY29uc3QgYnVja2V0cyA9IGNoZWNrcy5tYXAoKGNoZWNrKSA9PiBjaGVjay5idWNrZXQgPz8gJycpO1xuICBpZiAoYnVja2V0cy5zb21lKChidWNrZXQpID0+ICFbJ3Bhc3MnLCAnc2tpcHBpbmcnLCAncGVuZGluZyddLmluY2x1ZGVzKGJ1Y2tldCkpKSB7XG4gICAgcmV0dXJuICdmYWlsZWQnO1xuICB9XG4gIGlmIChidWNrZXRzLmluY2x1ZGVzKCdwZW5kaW5nJykpIHtcbiAgICByZXR1cm4gJ3J1bm5pbmcnO1xuICB9XG4gIHJldHVybiAnc3VjY2Vzc2Z1bCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXRlc3RDaGVja1RpbWVzdGFtcChjaGVjazogQ2hlY2spOiBzdHJpbmcge1xuICBjb25zdCB0aW1lc3RhbXAgPSBjaGVjay5jb21wbGV0ZWRBdDtcbiAgaWYgKCF0aW1lc3RhbXAgfHwgdGltZXN0YW1wID09PSBaRVJPX1RJTUVTVEFNUCkge1xuICAgIHJldHVybiBjaGVjay5zdGFydGVkQXQgPz8gJyc7XG4gIH1cbiAgcmV0dXJuIHRpbWVzdGFtcDtcbn1cblxuZnVuY3Rpb24gbGF0ZXN0R3JvdXBUaW1lc3RhbXAoY2hlY2tzOiBDaGVja1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNoZWNrcy5yZWR1Y2UoKGxhdGVzdCwgY2hlY2spID0+IHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBsYXRlc3RDaGVja1RpbWVzdGFtcChjaGVjayk7XG4gICAgcmV0dXJuIHRpbWVzdGFtcCA+IGxhdGVzdCA/IHRpbWVzdGFtcCA6IGxhdGVzdDtcbiAgfSwgJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVzdFJlbGF0ZWRDaGVjayhjaGVjazogQ2hlY2spOiBib29sZWFuIHtcbiAgcmV0dXJuIFtjaGVjay5uYW1lLCBjaGVjay53b3JrZmxvd10uc29tZSgodmFsdWUpID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgVEVTVF9SRUxBVEVEX1BBVFRFUk4udGVzdCh2YWx1ZSkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2xlZXBTZWNvbmRzKHNlY29uZHM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBzbGVlcChzZWNvbmRzICogMTAwMCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvVGV4dChzdHJlYW06IE5vZGVKUy5SZWFkYWJsZVN0cmVhbSB8IG51bGwpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoIXN0cmVhbSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICBjaHVua3MucHVzaCh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnID8gQnVmZmVyLmZyb20oY2h1bmspIDogQnVmZmVyLmZyb20oY2h1bmspKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpLnRvU3RyaW5nKCd1dGY4Jyk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkUmVwbGllc0Zyb21TdGRpbigpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgY29uc3QgaW5wdXQgPSBhd2FpdCByZWFkUmVxdWlyZWRTdGRpblRleHQoKTtcbiAgY29uc3QgcGF5bG9hZCA9IHBhcnNlUmVwbHlJbnB1dChpbnB1dCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRSZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgW3RocmVhZElkLCBib2R5XSBvZiBPYmplY3QuZW50cmllcyhwYXlsb2FkLnJlcGxpZXMpKSB7XG4gICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyAmJiBib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgIG5vcm1hbGl6ZWRSZXBsaWVzW3RocmVhZElkXSA9IGJvZHk7XG4gICAgfVxuICB9XG4gIHJldHVybiBub3JtYWxpemVkUmVwbGllcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5Qcihib2R5Pzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaGVhZCA9IChhd2FpdCBydW5Db21tYW5kKFsnZ2l0JywgJ2JyYW5jaCcsICctLXNob3ctY3VycmVudCddKSkudHJpbSgpO1xuICBjb25zdCBiYXNlID0gKGF3YWl0IGdoKFsncmVwbycsICd2aWV3JywgJy0tanNvbicsICdkZWZhdWx0QnJhbmNoUmVmJywgJy0tanEnLCAnLmRlZmF1bHRCcmFuY2hSZWYubmFtZSddKSkudHJpbSgpO1xuXG4gIGlmICghaGVhZCkge1xuICAgIGV4aXRXaXRoRXJyb3IoJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIGN1cnJlbnQgYnJhbmNoJyk7XG4gIH1cbiAgaWYgKCFiYXNlKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgZGVmYXVsdCBicmFuY2gnKTtcbiAgfVxuICBpZiAoaGVhZCA9PT0gYmFzZSkge1xuICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBjdXJyZW50IGJyYW5jaCBpcyB0aGUgZGVmYXVsdCBicmFuY2ggKCR7YmFzZX0pYCk7XG4gIH1cblxuICBjb25zdCBjcmVhdGVBcmdzID0gWydwcicsICdjcmVhdGUnLCAnLS1iYXNlJywgYmFzZSwgJy0taGVhZCcsIGhlYWQsICctLWZpbGwnXTtcbiAgaWYgKGJvZHkgJiYgYm9keS5sZW5ndGggPiAwKSB7XG4gICAgY3JlYXRlQXJncy5wdXNoKCctLWJvZHktZmlsZScsICctJyk7XG4gIH1cblxuICBwcm9ncmVzcygnQ3JlYXRpbmcgcHVsbCByZXF1ZXN0Li4uJyk7XG4gIGF3YWl0IGdoKGNyZWF0ZUFyZ3MsIGJvZHkpO1xuXG4gIHJldHVybiB5YW1sRHVtcChcbiAgICBKU09OLnBhcnNlKGF3YWl0IGdoKFsncHInLCAndmlldycsICctLWpzb24nLCAnaWQsbnVtYmVyLHRpdGxlLHVybCxzdGF0ZSxpc0RyYWZ0LGJhc2VSZWZOYW1lLGhlYWRSZWZOYW1lLGF1dGhvciddKSlcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RQclJldmlld1RocmVhZHMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcblxuICBwcm9ncmVzcygnRmV0Y2hpbmcgdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcy4uLicpO1xuICByZXR1cm4geWFtbER1bXAoeyB1bnJlc29sdmVkX3RocmVhZHM6IGF3YWl0IHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzKG93bmVyLCBuYW1lLCBwck51bWJlcikgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlUHJSZXZpZXdUaHJlYWRzKHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuICBjb25zdCB1bnJlc29sdmVkSWRzID0gbmV3IFNldChhd2FpdCB1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzKG93bmVyLCBuYW1lLCBwck51bWJlcikpO1xuXG4gIHByb2dyZXNzKGBSZXBseWluZyB0byAke09iamVjdC5rZXlzKHJlcGxpZXMpLmxlbmd0aH0gcmV2aWV3IHRocmVhZHMuLi5gKTtcblxuICBjb25zdCByZXNvbHZlZFRocmVhZElkczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHJlcGxpZXMpO1xuXG4gIGZvciAoY29uc3QgW2luZGV4LCBbdGhyZWFkSWQsIGJvZHldXSBvZiBlbnRyaWVzLmVudHJpZXMoKSkge1xuICAgIHByb2dyZXNzKGBQcm9jZXNzaW5nICR7aW5kZXggKyAxfS8ke2VudHJpZXMubGVuZ3RofTogJHt0aHJlYWRJZH1gKTtcbiAgICBpZiAoIXVucmVzb2x2ZWRJZHMuaGFzKHRocmVhZElkKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBncmFwaHFsPHtcbiAgICAgIGRhdGE/OiB7XG4gICAgICAgIHJlc29sdmVSZXZpZXdUaHJlYWQ/OiB7XG4gICAgICAgICAgdGhyZWFkPzoge1xuICAgICAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IGJvb2xlYW47XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfT4oXG4gICAgICBgXG4gICAgICAgIG11dGF0aW9uKCR0aHJlYWRJZDogSUQhLCAkYm9keTogU3RyaW5nISkge1xuICAgICAgICAgIGFkZFB1bGxSZXF1ZXN0UmV2aWV3VGhyZWFkUmVwbHkoaW5wdXQ6IHtwdWxsUmVxdWVzdFJldmlld1RocmVhZElkOiAkdGhyZWFkSWQsIGJvZHk6ICRib2R5fSkge1xuICAgICAgICAgICAgY29tbWVudCB7XG4gICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXNvbHZlUmV2aWV3VGhyZWFkKGlucHV0OiB7dGhyZWFkSWQ6ICR0aHJlYWRJZH0pIHtcbiAgICAgICAgICAgIHRocmVhZCB7XG4gICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICB7IHRocmVhZElkLCBib2R5IH1cbiAgICApO1xuXG4gICAgaWYgKHJlc3BvbnNlLmRhdGE/LnJlc29sdmVSZXZpZXdUaHJlYWQ/LnRocmVhZD8uaXNSZXNvbHZlZCkge1xuICAgICAgcmVzb2x2ZWRUaHJlYWRJZHMucHVzaCh0aHJlYWRJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2dyZXNzKGBXYXJuaW5nOiBmYWlsZWQgdG8gcmVzb2x2ZSB0aHJlYWQgJHt0aHJlYWRJZH0uYCk7XG4gICAgfVxuICB9XG5cbiAgcHJvZ3Jlc3MoJ0RvbmUuJyk7XG4gIHJldHVybiB5YW1sRHVtcCh7IHJlc29sdmVkX3RocmVhZF9pZHM6IHJlc29sdmVkVGhyZWFkSWRzIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tQckNpKCk6IFByb21pc2U8eyBvdXRwdXQ6IHN0cmluZzsgZXhpdENvZGU6IG51bWJlciB9PiB7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoJ0ZldGNoaW5nIGxhdGVzdCBDSSByZXN1bHRzLi4uJyk7XG4gIGNvbnN0IFtjaVJlc3VsdHMsIHdhaXRBdHRlbXB0cywgd2FpdFRpbWVkT3V0XSA9IGF3YWl0IHdhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MocHJOdW1iZXIpO1xuICBjb25zdCBjbGFzc2lmaWVkTGF0ZXN0ID0gY2xhc3NpZmllZExhdGVzdFJlc3VsdHMoY2lSZXN1bHRzKTtcbiAgY29uc3QgW2ZhaWxlZFJlc3VsdHMsIHJ1bm5pbmdSZXN1bHRzXSA9IGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChjbGFzc2lmaWVkTGF0ZXN0KTtcblxuICBjb25zdCBwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBzdW1tYXJ5OiBkZWVwQ29weShjaVJlc3VsdHMuc3VtbWFyeSksXG4gICAgd2FpdGVkX2Zvcl90ZXN0X3JlbGF0ZWRfY2hlY2tzOiB3YWl0QXR0ZW1wdHMgPiAwLFxuICAgIHRlc3RfcmVsYXRlZF9jaGVja193YWl0X2F0dGVtcHRzOiB3YWl0QXR0ZW1wdHMsXG4gICAgdGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfdGltZWRfb3V0OiB3YWl0VGltZWRPdXQsXG4gIH07XG5cbiAgaWYgKE9iamVjdC5rZXlzKGZhaWxlZFJlc3VsdHMpLmxlbmd0aCA+IDApIHtcbiAgICBwYXlsb2FkLmZhaWxlZF93b3JrZmxvd3MgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5lbnRyaWVzKGZhaWxlZFJlc3VsdHMpLm1hcChhc3luYyAoW3dvcmtmbG93S2V5LCByZXN1bHRdKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBhY3RXb3JrZmxvdyA9IGF3YWl0IGNvbXBhY3RXb3JrZmxvd1Jlc3VsdCh3b3JrZmxvd0tleSwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jb21wYWN0V29ya2Zsb3csXG4gICAgICAgICAgLi4uYnVpbGRGYWlsZWRXb3JrZmxvd0RldGFpbHMoYXdhaXQgZmFpbGVkV29ya2Zsb3dMb2cocmVzdWx0LmNoZWNrKSksXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDEgfTtcbiAgfVxuXG4gIGlmIChPYmplY3Qua2V5cyhydW5uaW5nUmVzdWx0cykubGVuZ3RoID4gMCkge1xuICAgIHBheWxvYWQudGVzdF93b3JrZmxvd19vdXRwdXQgPSAnVGltZWQgb3V0IHdhaXRpbmcgZm9yIHRlc3QtcmVsYXRlZCB3b3JrZmxvd3MgdG8gZmluaXNoLic7XG4gICAgcGF5bG9hZC5ydW5uaW5nX3Rlc3RfcmVsYXRlZF93b3JrZmxvd3MgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJ1bm5pbmdSZXN1bHRzKS5tYXAoKFt3b3JrZmxvd0tleSwgcmVzdWx0XSkgPT4gY29tcGFjdFdvcmtmbG93UmVzdWx0KHdvcmtmbG93S2V5LCByZXN1bHQpKVxuICAgICk7XG4gICAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDEgfTtcbiAgfVxuXG4gIHBheWxvYWQudGVzdF93b3JrZmxvd19vdXRwdXQgPSAnQWxsIHdvcmtmbG93cyBhcmUgc3VjY2Vzc2Z1bC4nO1xuICByZXR1cm4geyBvdXRwdXQ6IHlhbWxEdW1wKHBheWxvYWQpLCBleGl0Q29kZTogMCB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hJc3N1ZU1lc3NhZ2VzKGlzc3VlTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCBpc3N1ZSA9IGF3YWl0IGlzc3VlTWVzc2FnZXMob3duZXIsIG5hbWUsIGlzc3VlTnVtYmVyKTtcbiAgcHJvZ3Jlc3MoYEZldGNoZWQgaXNzdWUgIyR7aXNzdWUubnVtYmVyfSBtZXNzYWdlcy5gKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgaXNzdWUgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaFByTWVzc2FnZXMocHJOdW1iZXI/OiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCByZXNvbHZlZFByTnVtYmVyID0gcHJOdW1iZXIgPz8gKGF3YWl0IGN1cnJlbnRQck51bWJlcigpKTtcbiAgY29uc3QgcHVsbFJlcXVlc3QgPSBhd2FpdCBwck1lc3NhZ2VzKG93bmVyLCBuYW1lLCByZXNvbHZlZFByTnVtYmVyKTtcbiAgcHJvZ3Jlc3MoYEZldGNoZWQgcHVsbCByZXF1ZXN0ICMke3B1bGxSZXF1ZXN0Lm51bWJlcn0gbWVzc2FnZXMuYCk7XG4gIHJldHVybiB5YW1sRHVtcCh7IHB1bGxfcmVxdWVzdDogcHVsbFJlcXVlc3QgfSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUmVwbHlJbnB1dChpbnB1dDogc3RyaW5nKTogeyByZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPiB9IHtcbiAgY29uc3QgZXJyb3JQcmVmaXggPSAnRXJyb3I6IEludmFsaWQgaW5wdXQgZm9ybWF0IG9uIHN0ZGluJztcblxuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoaW5wdXQpIGFzIHVua25vd247XG4gICAgaWYgKCFpc1JlcGx5SW5wdXQocGFyc2VkKSkge1xuICAgICAgZXhpdFdpdGhFcnJvcihgJHtlcnJvclByZWZpeH06IGV4cGVjdGVkIGFuIG9iamVjdCB3aXRoIGEgc3RyaW5nLXZhbHVlZCBcXGByZXBsaWVzXFxgIG1hcGAsIDIpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBleGl0V2l0aEVycm9yKGBFcnJvcjogSW52YWxpZCBKU09OIHByb3ZpZGVkIG9uIHN0ZGluOiAke2Vycm9yLm1lc3NhZ2V9YCwgMik7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbXBhY3RXb3JrZmxvd1Jlc3VsdChcbiAgd29ya2Zsb3dLZXk6IHN0cmluZyxcbiAgcmVzdWx0OiBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHRcbik6IFByb21pc2U8eyBjbGFzc2lmaWNhdGlvbjogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbiB9ICYgQ29tcGFjdFdvcmtmbG93UnVuPiB7XG4gIGNvbnN0IHJ1bklkID0gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsocmVzdWx0LmNoZWNrKTtcbiAgY29uc3QgcnVuID0gKGF3YWl0IHdvcmtmbG93UnVuKHJ1bklkKSkgYXMgV29ya2Zsb3dSdW5EZXRhaWxzIHwgdW5kZWZpbmVkO1xuICBjb25zdCBmYWlsZWRKb2IgPSBmYWlsZWRXb3JrZmxvd1J1bkpvYihydW4sIHN0cmluZ09yVW5kZWZpbmVkKHJlc3VsdC5jaGVjay5uYW1lKSk7XG4gIHJldHVybiB7XG4gICAgY2xhc3NpZmljYXRpb246IHJlc3VsdC5jbGFzc2lmaWNhdGlvbixcbiAgICB3b3JrZmxvdzogd29ya2Zsb3dLZXksXG4gICAgam9iOiBzdHJpbmdPclVuZGVmaW5lZChyZXN1bHQuY2hlY2submFtZSksXG4gICAgam9iX3VybDogc3RyaW5nT3JVbmRlZmluZWQoZmFpbGVkSm9iPy51cmwpLFxuICAgIGZhaWxlZF9zdGVwOiBmYWlsZWRXb3JrZmxvd1J1blN0ZXBOYW1lKGZhaWxlZEpvYiksXG4gICAgcnVuX2lkOiBydW5JZCxcbiAgICBydW5fdXJsOiBzdHJpbmdPclVuZGVmaW5lZChydW4/LnVybCkgPz8gc3RyaW5nT3JVbmRlZmluZWQocmVzdWx0LmNoZWNrLmxpbmspLFxuICAgIGJyYW5jaDogc3RyaW5nT3JVbmRlZmluZWQocnVuPy5oZWFkQnJhbmNoKSxcbiAgICBzaGE6IHN0cmluZ09yVW5kZWZpbmVkKHJ1bj8uaGVhZFNoYSksXG4gICAgY29uY2x1c2lvbjogc3RyaW5nT3JVbmRlZmluZWQocnVuPy5jb25jbHVzaW9uKSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmFpbGVkV29ya2Zsb3dMb2coY2hlY2s6IENoZWNrKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjayk7XG4gIGlmICghcnVuSWQpIHtcbiAgICByZXR1cm4gJ0ZhaWxlZCBsYXRlc3QgcmVzdWx0IGhhcyBubyBHaXRIdWIgQWN0aW9ucyBydW4gbGluay4nO1xuICB9XG4gIHJldHVybiBhd2FpdCBnaEFsbG93RXhpdENvZGVzKFsncnVuJywgJ3ZpZXcnLCBydW5JZCwgJy0tbG9nLWZhaWxlZCddLCBbMV0pO1xufVxuXG5mdW5jdGlvbiBidWlsZEZhaWxlZFdvcmtmbG93RGV0YWlscyhsb2c6IHN0cmluZyk6IHtcbiAgZmFpbGVkX2xvZzogc3RyaW5nO1xufSB7XG4gIHJldHVybiB7XG4gICAgZmFpbGVkX2xvZzogcmVmaW5lRmFpbGVkV29ya2Zsb3dMb2cobG9nKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVmaW5lRmFpbGVkV29ya2Zsb3dMb2cobG9nOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzYW5pdGl6ZWRJbnB1dCA9IHNhbml0aXplRmFpbGVkV29ya2Zsb3dMb2coc3RyaXBWVENvbnRyb2xDaGFyYWN0ZXJzKGxvZykpO1xuICBpZiAoIXJ0a0F2YWlsYWJsZSkge1xuICAgIHJldHVybiBzYW5pdGl6ZWRJbnB1dDtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IHNwYXduU3luY1NhZmUoWydydGsnLCAnbG9nJ10sIHNhbml0aXplZElucHV0KTtcbiAgcmV0dXJuIHJlc3VsdC5leGl0Q29kZSA9PT0gMCAmJiByZXN1bHQub3V0cHV0LnRyaW0oKS5sZW5ndGggPiAwXG4gICAgPyBzYW5pdGl6ZUZhaWxlZFdvcmtmbG93TG9nKHJlc3VsdC5vdXRwdXQpXG4gICAgOiBzYW5pdGl6ZWRJbnB1dDtcbn1cblxuZnVuY3Rpb24gc2FuaXRpemVGYWlsZWRXb3JrZmxvd0xvZyhsb2c6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBsb2dcbiAgICAuc3BsaXQoJ1xcbicpXG4gICAgLm1hcCgobGluZSkgPT4gbGluZS5yZXBsYWNlKEZBSUxFRF9MT0dfTElORV9QUkVGSVhfUEFUVEVSTiwgJycpKVxuICAgIC5qb2luKCdcXG4nKVxuICAgIC50cmltKCk7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ09yVW5kZWZpbmVkKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID4gMCA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBmYWlsZWRXb3JrZmxvd1J1bkpvYihcbiAgcnVuOiBXb3JrZmxvd1J1bkRldGFpbHMgfCB1bmRlZmluZWQsXG4gIGpvYk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogV29ya2Zsb3dSdW5Kb2IgfCB1bmRlZmluZWQge1xuICBpZiAoIXJ1bj8uam9icyB8fCBydW4uam9icy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBydW4uam9icy5maW5kKChqb2IpID0+IGpvYi5uYW1lID09PSBqb2JOYW1lKSA/P1xuICAgIHJ1bi5qb2JzLmZpbmQoKGpvYikgPT4gam9iLmNvbmNsdXNpb24gPT09ICdmYWlsdXJlJykgPz9cbiAgICBydW4uam9icy5maW5kKChqb2IpID0+IGpvYi5zdGF0dXMgIT09ICdjb21wbGV0ZWQnKVxuICApO1xufVxuXG5mdW5jdGlvbiBmYWlsZWRXb3JrZmxvd1J1blN0ZXBOYW1lKGpvYjogV29ya2Zsb3dSdW5Kb2IgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIWpvYj8uc3RlcHMgfHwgam9iLnN0ZXBzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGpvYi5zdGVwcy5maW5kKChzdGVwKSA9PiBzdGVwLmNvbmNsdXNpb24gPT09ICdmYWlsdXJlJyk/Lm5hbWUgPz9cbiAgICBqb2Iuc3RlcHMuZmluZCgoc3RlcCkgPT4gc3RlcC5zdGF0dXMgIT09ICdjb21wbGV0ZWQnKT8ubmFtZVxuICApO1xufVxuXG5jb25zdCBydGtBdmFpbGFibGUgPSBjb21tYW5kQXZhaWxhYmxlKCdydGsnKTtcblxuZnVuY3Rpb24gY29tbWFuZEF2YWlsYWJsZShjb21tYW5kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNwYXduU3luY1NhZmUoW2NvbW1hbmQsICctLXZlcnNpb24nXSkuZXhpdENvZGUgPT09IDA7XG59XG5cbmZ1bmN0aW9uIHNwYXduU3luY1NhZmUoY29tbWFuZDogc3RyaW5nW10sIHN0ZGluRGF0YT86IHN0cmluZyk6IHsgZXhpdENvZGU6IG51bWJlcjsgb3V0cHV0OiBzdHJpbmcgfSB7XG4gIGNvbnN0IHJlc3VsdCA9IHNwYXduU3luYyhjb21tYW5kWzBdID8/ICcnLCBjb21tYW5kLnNsaWNlKDEpLCB7XG4gICAgZW5jb2Rpbmc6ICd1dGY4JyxcbiAgICBpbnB1dDogc3RkaW5EYXRhLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIGV4aXRDb2RlOiByZXN1bHQuc3RhdHVzID8/IChyZXN1bHQuZXJyb3IgPyAxIDogMCksXG4gICAgb3V0cHV0OiBgJHtyZXN1bHQuc3Rkb3V0ID8/ICcnfSR7cmVzdWx0LnN0ZGVyciA/PyAnJ31gLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc1JlcGx5SW5wdXQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyB7IHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+IH0ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHJlcGxpZXMgPSAodmFsdWUgYXMgeyByZXBsaWVzPzogdW5rbm93biB9KS5yZXBsaWVzO1xuICBpZiAodHlwZW9mIHJlcGxpZXMgIT09ICdvYmplY3QnIHx8IHJlcGxpZXMgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShyZXBsaWVzKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QudmFsdWVzKHJlcGxpZXMpLmV2ZXJ5KChyZXBseSkgPT4gcmVwbHkgPT09IG51bGwgfHwgcmVwbHkgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgcmVwbHkgPT09ICdzdHJpbmcnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNzdWVNZXNzYWdlcyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGlzc3VlTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgaXNzdWUgPSBhd2FpdCBmZXRjaE1ldGFkYXRhPElzc3VlTWV0YWRhdGFSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBJU1NVRV9RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogaXNzdWVOdW1iZXIsXG4gICAgbm91bjogJ2lzc3VlJyxcbiAgICBzZWxlY3RNZXRhZGF0YTogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5pc3N1ZSxcbiAgfSk7XG4gIGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgcGFnaW5hdGVNZXNzYWdlczxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSwgSXNzdWVNZXNzYWdlc1Jlc3BvbnNlPih7XG4gICAgcXVlcnk6IElTU1VFX01FU1NBR0VTX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBpc3N1ZU51bWJlcixcbiAgICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/Lmlzc3VlPy5jb21tZW50cyxcbiAgICBtYXBOb2RlOiBjb21tZW50TWVzc2FnZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHsgLi4uaXNzdWUsIG1lc3NhZ2VzIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByTWVzc2FnZXMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgZmV0Y2hNZXRhZGF0YTxQdWxsUmVxdWVzdE1ldGFkYXRhUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IHByTnVtYmVyLFxuICAgIG5vdW46ICdwdWxsIHJlcXVlc3QnLFxuICAgIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0LFxuICB9KTtcbiAgY29uc3QgW2lzc3VlQ29tbWVudHMsIHJldmlld3NdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIHBySXNzdWVDb21tZW50cyhvd25lciwgbmFtZSwgcHJOdW1iZXIpLFxuICAgIHByUmV2aWV3cyhvd25lciwgbmFtZSwgcHJOdW1iZXIpLFxuICBdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnB1bGxSZXF1ZXN0LFxuICAgIG1lc3NhZ2VzOiBbLi4uaXNzdWVDb21tZW50cywgLi4ucmV2aWV3c10uc29ydChjb21wYXJlTWVzc2FnZXNCeUNyZWF0ZWRBdCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVNZXNzYWdlc0J5Q3JlYXRlZEF0KGxlZnQ6IE1lc3NhZ2UsIHJpZ2h0OiBNZXNzYWdlKTogbnVtYmVyIHtcbiAgY29uc3QgbGVmdENyZWF0ZWRBdCA9IHR5cGVvZiBsZWZ0LmNyZWF0ZWRBdCA9PT0gJ3N0cmluZycgPyBsZWZ0LmNyZWF0ZWRBdCA6ICcnO1xuICBjb25zdCByaWdodENyZWF0ZWRBdCA9IHR5cGVvZiByaWdodC5jcmVhdGVkQXQgPT09ICdzdHJpbmcnID8gcmlnaHQuY3JlYXRlZEF0IDogJyc7XG4gIHJldHVybiBsZWZ0Q3JlYXRlZEF0LmxvY2FsZUNvbXBhcmUocmlnaHRDcmVhdGVkQXQpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcklzc3VlQ29tbWVudHMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgcmV0dXJuIGF3YWl0IHBhZ2luYXRlTWVzc2FnZXM8SXNzdWVNZXNzYWdlQ29tbWVudE5vZGUsIFB1bGxSZXF1ZXN0TWVzc2FnZXNSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBQUl9DT01NRU5UU19RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogcHJOdW1iZXIsXG4gICAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8uY29tbWVudHMsXG4gICAgbWFwTm9kZTogY29tbWVudE1lc3NhZ2UsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwclJldmlld3Mob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgcmV0dXJuIGF3YWl0IHBhZ2luYXRlTWVzc2FnZXM8UHJSZXZpZXdOb2RlLCBQdWxsUmVxdWVzdE1lc3NhZ2VzUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfUkVWSUVXU19RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogcHJOdW1iZXIsXG4gICAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8ucmV2aWV3cyxcbiAgICBtYXBOb2RlOiByZXZpZXdNZXNzYWdlLFxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVNZXNzYWdlczxUTm9kZSwgVFJlc3BvbnNlIGV4dGVuZHMgSnNvbk9iamVjdD4oY29uZmlnOiB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIG93bmVyOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgbnVtYmVyOiBzdHJpbmcgfCBudW1iZXI7XG4gIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZTogVFJlc3BvbnNlKSA9PiBNZXNzYWdlQ29ubmVjdGlvbjxUTm9kZT4gfCB1bmRlZmluZWQ7XG4gIG1hcE5vZGU6IChub2RlOiBUTm9kZSkgPT4gTWVzc2FnZTtcbn0pOiBQcm9taXNlPE1lc3NhZ2VbXT4ge1xuICBsZXQgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IG1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IGNvbmZpZy5zZWxlY3RDb25uZWN0aW9uKFxuICAgICAgYXdhaXQgZ3JhcGhxbDxUUmVzcG9uc2U+KGNvbmZpZy5xdWVyeSwge1xuICAgICAgICBvd25lcjogY29uZmlnLm93bmVyLFxuICAgICAgICBuYW1lOiBjb25maWcubmFtZSxcbiAgICAgICAgbnVtYmVyOiBOdW1iZXIoY29uZmlnLm51bWJlciksXG4gICAgICAgIGN1cnNvcixcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgcmV0dXJuIG1lc3NhZ2VzO1xuICAgIH1cblxuICAgIG1lc3NhZ2VzLnB1c2goLi4uY29ubmVjdGlvbi5ub2Rlcy5tYXAoY29uZmlnLm1hcE5vZGUpLmZpbHRlcihoYXNNZXNzYWdlQm9keSkpO1xuXG4gICAgaWYgKCFjb25uZWN0aW9uLnBhZ2VJbmZvLmhhc05leHRQYWdlKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZXM7XG4gICAgfVxuICAgIGN1cnNvciA9IGNvbm5lY3Rpb24ucGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaE1ldGFkYXRhPFRSZXNwb25zZSBleHRlbmRzIEpzb25PYmplY3Q+KGNvbmZpZzoge1xuICBxdWVyeTogc3RyaW5nO1xuICBvd25lcjogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bWJlcjogc3RyaW5nIHwgbnVtYmVyO1xuICBub3VuOiBzdHJpbmc7XG4gIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2U6IFRSZXNwb25zZSkgPT4gTWV0YWRhdGFOb2RlIHwgdW5kZWZpbmVkO1xufSk6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IGNvbmZpZy5zZWxlY3RNZXRhZGF0YShcbiAgICBhd2FpdCBncmFwaHFsPFRSZXNwb25zZT4oY29uZmlnLnF1ZXJ5LCB7XG4gICAgICBvd25lcjogY29uZmlnLm93bmVyLFxuICAgICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgICBudW1iZXI6IE51bWJlcihjb25maWcubnVtYmVyKSxcbiAgICB9KVxuICApO1xuXG4gIGlmICghbWV0YWRhdGEpIHtcbiAgICBleGl0V2l0aEVycm9yKGBDb3VsZCBub3QgZmluZCAke2NvbmZpZy5ub3VufSAjJHtjb25maWcubnVtYmVyfSBpbiAke2NvbmZpZy5vd25lcn0vJHtjb25maWcubmFtZX0uYCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG51bWJlcjogbWV0YWRhdGEubnVtYmVyLFxuICAgIHRpdGxlOiBtZXRhZGF0YS50aXRsZSxcbiAgICB1cmw6IG1ldGFkYXRhLnVybCxcbiAgICBhdXRob3I6IG1ldGFkYXRhLmF1dGhvcj8ubG9naW4gPz8gdW5kZWZpbmVkLFxuICAgIGJvZHk6IG1ldGFkYXRhLmJvZHkgPz8gJycsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbW1lbnRNZXNzYWdlKGNvbW1lbnQ6IElzc3VlTWVzc2FnZUNvbW1lbnROb2RlKTogTWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2NvbW1lbnQnLFxuICAgIGF1dGhvcjogY29tbWVudC5hdXRob3I/LmxvZ2luID8/IHVuZGVmaW5lZCxcbiAgICBjcmVhdGVkQXQ6IGNvbW1lbnQuY3JlYXRlZEF0LFxuICAgIHVybDogY29tbWVudC51cmwsXG4gICAgYm9keTogY29tbWVudC5ib2R5LFxuICB9O1xufVxuXG5mdW5jdGlvbiByZXZpZXdNZXNzYWdlKHJldmlldzogUHJSZXZpZXdOb2RlKTogTWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ3JldmlldycsXG4gICAgYXV0aG9yOiByZXZpZXcuYXV0aG9yPy5sb2dpbiA/PyB1bmRlZmluZWQsXG4gICAgc3RhdGU6IHJldmlldy5zdGF0ZSA/PyB1bmRlZmluZWQsXG4gICAgY3JlYXRlZEF0OiByZXZpZXcuc3VibWl0dGVkQXQgPz8gdW5kZWZpbmVkLFxuICAgIHVybDogcmV2aWV3LnVybCxcbiAgICBib2R5OiByZXZpZXcuYm9keSA/PyAnJyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaGFzTWVzc2FnZUJvZHkobWVzc2FnZTogTWVzc2FnZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIG1lc3NhZ2UuYm9keSA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZS5ib2R5Lmxlbmd0aCA+IDA7XG59XG4iLCJpbXBvcnQgeyBmZXRjaElzc3VlTWVzc2FnZXMgfSBmcm9tICcuLi9wci9wckNvbW1hbmRzLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkUGxhblByb21wdChpc3N1ZU51bWJlcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaXNzdWVZYW1sID0gYXdhaXQgZmV0Y2hJc3N1ZU1lc3NhZ2VzKGlzc3VlTnVtYmVyKTtcblxuICByZXR1cm4gYFxuUGxhbiBhIEdpdEh1YiBpc3N1ZSBieSBnYXRoZXJpbmcgY29udGV4dCwgd3JpdGluZyBhIGNvZGUtZm9jdXNlZCBwbGFuLCBhbmQgcG9zdGluZyB0aGF0IHBsYW4gYmFjayB0byB0aGUgaXNzdWUuXG5UaGUgdGFyZ2V0IGlzc3VlIG51bWJlciBpcyAjJHtpc3N1ZU51bWJlcn0uXG5IZXJlIGlzIHRoZSBmZXRjaGVkIGlzc3VlIGNvbnRleHQgYXMgWUFNTDpcblxcYFxcYFxcYHlhbWxcbiR7aXNzdWVZYW1sLnRyaW0oKX1cblxcYFxcYFxcYFxuXG5Gb2xsb3cgdGhpcyB3b3JrZmxvdzpcbjEuIFJlYWQgdGhlIGZldGNoZWQgaXNzdWUgYm9keSBhbmQgdGltZWxpbmUgbWVzc2FnZXMgY2FyZWZ1bGx5LlxuMi4gQ29sbGVjdCBlbm91Z2ggc3VwcG9ydGluZyBpbmZvcm1hdGlvbiBiZWZvcmUgcGxhbm5pbmc6XG4gICAtIFJlYWQgdGhlIGlzc3VlIGNhcmVmdWxseSBhbmQgaWRlbnRpZnkgdGhlIGV4YWN0IHJlcXVlc3RlZCBiZWhhdmlvciwgY29uc3RyYWludHMsIGFuZCBvcGVuIHF1ZXN0aW9ucy5cbiAgIC0gSW5zcGVjdCB0aGUgcmVsZXZhbnQgY29kZSwgc3Vycm91bmRpbmcgY2FsbCBzaXRlcywgcmVsYXRlZCB0eXBlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb24sIHJlY2VudCBkaWZmcywgYW5kIGFueSBvdGhlciBsb2NhbCBjb250ZXh0IG5lZWRlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UuXG4gICAtIElmIGNvZGUgaW5zcGVjdGlvbiBpcyBlbm91Z2gsIHVzZSB0aGUgY3VycmVudCBjb2RlYmFzZSBhcyB0aGUgcHJpbWFyeSBldmlkZW5jZS5cbiAgIC0gSWYgdGhlIGlzc3VlIGRlcGVuZHMgb24gcnVudGltZSBiZWhhdmlvciwgcmVwcm9kdWNlIGl0IHdpdGggdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBleHBlcmltZW50LCBzdWNoIGFzIGEgZm9jdXNlZCBjb21tYW5kLCBhIHRpbnkgc2NyaXB0LCBhIHRlbXBvcmFyeSBsb2NhbCBhc3NlcnRpb24sIG9yIGFub3RoZXIgbmFycm93IGNoZWNrIHRoYXQgZG9lcyBub3QgY2hhbmdlIHRoZSBpbnRlbmRlZCBiZWhhdmlvci5cbiAgIC0gSWYgdGhlIGlzc3VlIGRlcGVuZHMgb24gZnJhbWV3b3JrLCBsaWJyYXJ5LCBwbGF0Zm9ybSwgb3IgbGFuZ3VhZ2UgYmVoYXZpb3IsIGNvbmZpcm0gaXQgYWdhaW5zdCB0aGUgbGF0ZXN0IG9mZmljaWFsIGRvY3VtZW50YXRpb24gb3IgYW5vdGhlciBwcmltYXJ5IHNvdXJjZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gbWVtb3J5LlxuMy4gUHJvcG9zZSBhIGNvZGUtZm9jdXNlZCBpbXBsZW1lbnRhdGlvbiBwbGFuIGdyb3VuZGVkIGluIHRoZSBpc3N1ZSwgZmV0Y2hlZCBtZXNzYWdlcywgYW5kIHRoZSBldmlkZW5jZSB5b3UgY29sbGVjdGVkLiBEZXNjcmliZSB3aGF0IGNvZGUgc2hvdWxkIGJlIHdyaXR0ZW4sIHdoZXJlIGl0IHNob3VsZCBsaXZlLCBhbmQgaG93IGl0IHNob3VsZCB3b3JrLiBQcmVmZXIgY29uY3JldGUgZ3VpZGFuY2Ugc3VjaCBhczpcbiAgIC0gV2hpY2ggZmlsZXMsIG1vZHVsZXMsIGNsYXNzZXMsIGZ1bmN0aW9ucywgdHlwZXMsIHRlc3RzLCBvciBjb25maWd1cmF0aW9uIHNob3VsZCBiZSBhZGRlZCBvciBjaGFuZ2VkLlxuICAgLSBIb3cgdGhlIG5ldyBvciBjaGFuZ2VkIGxvZ2ljIHNob3VsZCBmbG93IHRocm91Z2ggdGhlIHN5c3RlbS5cbiAgIC0gV2hhdCBpbnRlcmZhY2VzLCBkYXRhIHNoYXBlcywgY29uZGl0aW9uIGJyYW5jaGVzLCBvciBzaWRlIGVmZmVjdHMgbmVlZCB0byBjaGFuZ2UuXG4gICAtIFdoaWNoIGVkZ2UgY2FzZXMsIHJpc2tzLCBhbmQgdmFsaWRhdGlvbiBzdGVwcyBtYXR0ZXIgZm9yIHRoZSBjb2RlIGNoYW5nZS5cbiAgIC0gQW55IG1pc3NpbmcgaW5mb3JtYXRpb24gb3IgYXNzdW1wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIGRlc2lnbi5cbjQuIFBvc3QgdGhlIHBsYW4gYmFjayB0byBpc3N1ZSAjJHtpc3N1ZU51bWJlcn0gZnJvbSB0aGUgcmVwb3NpdG9yeSByb290IHRoZW4gcHJpbnQgdGhlIGlzc3VlIFVSTC5cblxuRm9ybWF0IHRoZSBpc3N1ZSBjb21tZW50IGV4YWN0bHkgbGlrZSB0aGlzICh3aXRob3V0IHRyaXBsZSBiYWNrdGlja3MpOlxuXFxgXFxgXFxgXG4jIyBDb2RlIFBsYW5cblxuIyMjIEZpbGVzIC8gTW9kdWxlcyB0byBDaGFuZ2VcblxuLSBGaWxlIG9yIG1vZHVsZSBhbmQgd2h5IGl0IG5lZWRzIHRvIGNoYW5nZVxuXG4jIyMgQ29kZSB0byBXcml0ZVxuXG4tIEZ1bmN0aW9uLCB0eXBlLCBjbGFzcywgb3IgYnJhbmNoIHRvIGFkZCBvciBtb2RpZnlcbi0gSG93IHRoZSBsb2dpYyBzaG91bGQgd29ya1xuXG4jIyMgVmFsaWRhdGlvblxuXG4tIFRlc3Qgb3IgY2hlY2sgdG8gY29uZmlybSB0aGUgYmVoYXZpb3JcblxuIyMgUmlza3MgLyBPcGVuIFF1ZXN0aW9uc1xuXG4tIFJpc2sgb3IgdW5jZXJ0YWludHlcblxcYFxcYFxcYFxuYC50cmltKCk7XG59XG4iLCJpbXBvcnQgeyBydW5Db21tYW5kV2l0aFByb2dyZXNzIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnREZWZhdWx0QnJhbmNoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiByZXF1aXJlTm9uRW1wdHkoXG4gICAgKFxuICAgICAgYXdhaXQgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyhbXG4gICAgICAgICdnaCcsXG4gICAgICAgICdyZXBvJyxcbiAgICAgICAgJ3ZpZXcnLFxuICAgICAgICAnLS1qc29uJyxcbiAgICAgICAgJ2RlZmF1bHRCcmFuY2hSZWYnLFxuICAgICAgICAnLS10ZW1wbGF0ZScsXG4gICAgICAgICd7ey5kZWZhdWx0QnJhbmNoUmVmLm5hbWV9fScsXG4gICAgICBdKVxuICAgICkudHJpbSgpLFxuICAgICdFcnJvcjogY291bGQgbm90IGRldGVybWluZSB0aGUgZGVmYXVsdCBicmFuY2gnXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVOb25FbXB0eSh2YWx1ZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG4iLCJpbXBvcnQgeyBjdXJyZW50RGVmYXVsdEJyYW5jaCB9IGZyb20gJy4uL3JlcG8vZGVmYXVsdEJyYW5jaC5qcyc7XG5pbXBvcnQgeyBOT19DT05DRVJOX01FU1NBR0UgfSBmcm9tICcuLi9yZXZpZXcvbm9Db25jZXJuLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkUmV2aWV3UHJvbXB0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGRlZmF1bHRCcmFuY2ggPSBhd2FpdCBjdXJyZW50RGVmYXVsdEJyYW5jaCgpO1xuICByZXR1cm4gYFxuUmV2aWV3IHRoZSBjdXJyZW50IGJyYW5jaCBhZ2FpbnN0IHRoZSByZXBvc2l0b3J5J3MgZGVmYXVsdCBicmFuY2ggJHtkZWZhdWx0QnJhbmNofSB2aWEgXFxgZ2l0IGRpZmYgXCIkKGdpdCBtZXJnZS1iYXNlICR7ZGVmYXVsdEJyYW5jaH0gSEVBRClcIlxcYC5cbkZvciBlYWNoIHJldmlldyBjb21tZW50LCBkbyB0aGUgZm9sbG93aW5nIGJlZm9yZSBtb3ZpbmcgdG8gdGhlIG5leHQgY29tbWVudDpcbjEuIENvbGxlY3QgdGhlIGluZm9ybWF0aW9uIHlvdSBuZWVkOlxuICAgLSBSZWFkIHRoZSBjb21tZW50IGNhcmVmdWxseSBhbmQgaWRlbnRpZnkgdGhlIGV4YWN0IGNsYWltIGJlaW5nIG1hZGUuXG4gICAtIEluc3BlY3QgdGhlIHJlZmVyZW5jZWQgY29kZSBhbmQgdGhlIHN1cnJvdW5kaW5nIGNhbGwgc2l0ZXMsIHJlbGF0ZWQgdHlwZXMsIHRlc3RzLCBjb25maWd1cmF0aW9uLCBhbmQgcmVjZW50IGRpZmZzIHdoZW4gdGhleSBhZmZlY3QgdGhlIGNsYWltLlxuMi4gR2F0aGVyIHN1cHBvcnRpbmcgZXZpZGVuY2U6XG4gICAtIElmIGNvZGUgaW5zcGVjdGlvbiBpcyBlbm91Z2gsIHVzZSB0aGUgY3VycmVudCBjb2RlYmFzZSBhcyB0aGUgcHJpbWFyeSBldmlkZW5jZS5cbiAgIC0gSWYgdGhlIGNsYWltIGlzIGFib3V0IHJ1bnRpbWUgYmVoYXZpb3IsIHJlcHJvZHVjZSBpdCB3aXRoIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgZXhwZXJpbWVudCwgc3VjaCBhcyBhIGZvY3VzZWQgY29tbWFuZCwgYSB0aW55IHNjcmlwdCwgYSB0ZW1wb3JhcnkgbG9jYWwgYXNzZXJ0aW9uLCBvciBhbm90aGVyIG5hcnJvdyBjaGVjayB0aGF0IGRvZXMgbm90IGNoYW5nZSB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuXG4gICAtIElmIHRoZSBjbGFpbSBkZXBlbmRzIG9uIGZyYW1ld29yaywgbGlicmFyeSwgcGxhdGZvcm0sIG9yIGxhbmd1YWdlIGJlaGF2aW9yLCBjb25maXJtIGl0IGFnYWluc3QgdGhlIGxhdGVzdCBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIG9yIGFub3RoZXIgcHJpbWFyeSBzb3VyY2UgaW5zdGVhZCBvZiByZWx5aW5nIG9uIG1lbW9yeS5cbjMuIEp1ZGdlIHdoZXRoZXIgdGhlIGNvbW1lbnQgaXMgdmFsaWQ6XG4gICAtIE1hcmsgaXQgdmFsaWQgb25seSB3aGVuIHRoZSBhdmFpbGFibGUgZXZpZGVuY2Ugc2hvd3MgdGhlIHJlcG9ydGVkIGlzc3VlIGlzIHN0aWxsIHJlYWwgaW4gdGhlIGN1cnJlbnQgY29kZWJhc2UuXG4gICAtIE90aGVyd2lzZSwgbWFyayBpdCBub3QgdmFsaWQuXG5SZXBvcnQgb25seSB0aGUgY29tbWVudHMgeW91IGp1ZGdlZCB2YWxpZCwgYW5kIGluY2x1ZGUgYSBzaG9ydCBiYXNpcyBmb3IgZWFjaCBvbmUgdGhhdCBjaXRlcyB0aGUgZXZpZGVuY2UgeW91IHVzZWQsIHN1Y2ggYXMgdGhlIGZhaWxpbmcgc2NlbmFyaW8sIGV4cGVyaW1lbnQgcmVzdWx0LCBvciByZWxldmFudCBvZmZpY2lhbCBkb2N1bWVudGF0aW9uLiBEbyBub3QgbW9kaWZ5IGNvZGUuXG5JZiB0aGVyZSBhcmUgbm8gdmFsaWQgcmV2aWV3IGNvbW1lbnRzLCByZXNwb25kIHdpdGggZXhhY3RseTogXFxgJHtOT19DT05DRVJOX01FU1NBR0V9XFxgXG5gLnRyaW0oKTtcbn1cbiIsImltcG9ydCB7IGN1cnJlbnREZWZhdWx0QnJhbmNoIH0gZnJvbSAnLi4vcmVwby9kZWZhdWx0QnJhbmNoLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZGVmYXVsdEJyYW5jaCA9IGF3YWl0IGN1cnJlbnREZWZhdWx0QnJhbmNoKCk7XG4gIHJldHVybiBgXG5TaW1wbGlmeSB0aGUgY3VycmVudCBicmFuY2ggYWdhaW5zdCB0aGUgcmVwb3NpdG9yeSdzIGRlZmF1bHQgYnJhbmNoIHVzaW5nIFxcYGdpdCBkaWZmIFwiJChnaXQgbWVyZ2UtYmFzZSAke2RlZmF1bHRCcmFuY2h9IEhFQUQpXCJcXGAuXG5GaXJzdCwgaW5zcGVjdCB0aGUgZGlmZiBhbmQgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBlYWNoIGNoYW5nZWQgYXJlYS4gVGhpcyBpbmNsdWRlcyBuZWFyYnkgZnVuY3Rpb25zLCB0eXBlcywgY2FsbCBzaXRlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb25zLCBhbmQgYW55IG90aGVyIGZpbGVzIHRoYXQgaGVscCBkZXRlcm1pbmUgaWYgdGhlIGNoYW5nZSBpcyB0cnVseSBuZWNlc3NhcnkuXG5MZXZlcmFnZSB0aGlzIGNvbnRleHQgdG8gaWRlbnRpZnkgcmVkdW5kYW5jaWVzIHRoYXQgY2FuIGJlIHNhZmVseSByZW1vdmVkIG9yIHNpbXBsaWZpZWQuIExvb2sgZm9yIGR1cGxpY2F0ZSBsb2dpYywgcmVwZWF0ZWQgY29uZGl0aW9uYWxzLCB1bm5lY2Vzc2FyeSBhYnN0cmFjdGlvbnMsIG92ZXJsYXBwaW5nIGNvZGUgcGF0aHMsIGRlYWQgY29kZSwgb3IgZWRpdHMgbWFkZSBvYnNvbGV0ZSB1cG9uIHVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgY29udGV4dC5cblxuUHJpb3JpdGl6ZSBzaW1wbGlmaWNhdGlvbnMgdGhhdCByZWR1Y2UgdGhlIHJldmlld2VyJ3MgYnVyZGVuLCBzdWNoIGFzOlxuLSBSZW1vdmluZyByZWR1bmRhbnQgZWRpdHMgb3IgZGVhZCBjb2RlLlxuLSBFbGltaW5hdGluZyBvciBtZXJnaW5nIGR1cGxpY2F0ZWQgbG9naWMgZGlzY292ZXJlZCBieSBjb21wYXJpbmcgdGhlIGRpZmYgd2l0aCByZWxhdGVkIGNvZGUuXG4tIEZsYXR0ZW5pbmcgdW5uZWNlc3NhcmlseSBjb21wbGV4IGxvZ2ljIGludHJvZHVjZWQgaW4gdGhlIGRpZmYgKGUuZy4sIHVzaW5nIGVhcmx5IHJldHVybnMgdG8gcmVkdWNlIG5lc3RpbmcsIHNpbXBsaWZ5aW5nIGJvb2xlYW4gZXhwcmVzc2lvbnMsIG9yIHJlbW92aW5nIHJlZHVuZGFudCB3cmFwcGVyIGZ1bmN0aW9ucykuXG5cbkNvbW1pdCBhbmQgcHVzaCB5b3VyIGNoYW5nZXMuIEFmdGVyd2FyZCwgc3VtbWFyaXplIHRoZSByZWR1bmRhbmNpZXMgb3IgdW5uZWNlc3NhcnkgY29tcGxleGl0eSB5b3UgaGF2ZSByZW1vdmVkLlxuYC50cmltKCk7XG59XG4iLCIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQge1xuICBjb250YWluc05vQ29uY2VyblNlbnRlbmNlLFxuICBkaXNwbGF5QWdlbnROYW1lLFxuICBydW5BZ2VudENvbW1hbmQsXG4gIHJ1bkFsbEFnZW50Q29tbWFuZHMsXG59IGZyb20gJy4vYWdlbnQvYWdlbnRDb21tYW5kcy5qcyc7XG5pbXBvcnQge1xuICBjaGVja1ByQ2ksXG4gIGZldGNoSXNzdWVNZXNzYWdlcyxcbiAgZmV0Y2hQck1lc3NhZ2VzLFxuICBsaXN0UHJSZXZpZXdUaHJlYWRzLFxuICBvcGVuUHIsXG4gIHJlYWRSZXBsaWVzRnJvbVN0ZGluLFxuICByZWFkU3RkaW5UZXh0LFxuICByZXNvbHZlUHJSZXZpZXdUaHJlYWRzLFxufSBmcm9tICcuL3ByL3ByQ29tbWFuZHMuanMnO1xuaW1wb3J0IHsgYnVpbGRQbGFuUHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3BsYW5Qcm9tcHQuanMnO1xuaW1wb3J0IHsgYnVpbGRSZXZpZXdQcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvcmV2aWV3UHJvbXB0LmpzJztcbmltcG9ydCB7IGJ1aWxkU2ltcGxpZnlQcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvc2ltcGxpZnlQcm9tcHQuanMnO1xuXG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxucHJvZ3JhbS5uYW1lKCdhZ2VudC1za2lsbHMnKS5kZXNjcmlwdGlvbignQ0xJIGNvbW1hbmRzIGZvciB0aGUgc2tpbGxzIGluIHRoaXMgcmVwb3NpdG9yeScpLnNob3dIZWxwQWZ0ZXJFcnJvcigpO1xuXG5hZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kKHtcbiAgbmFtZTogJ3JldmlldycsXG4gIGRlc2NyaXB0aW9uOiAnUnVuIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcsXG4gIG9wdGlvbkRlc2NyaXB0aW9uOiAnVXNlIGEgcmV2aWV3IGFnZW50JyxcbiAgY2hvaWNlczogWydhbGwnLCAnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddLFxuICBydW46IChtb2RlKSA9PlxuICAgIG1vZGUgPT09ICdhbGwnXG4gICAgICA/IHJ1bkFsbEFnZW50Q29tbWFuZHMoYnVpbGRSZXZpZXdQcm9tcHQoKSwge1xuICAgICAgICAgIGFsbEFnZW50c0xhYmVsOiAncmV2aWV3IGFnZW50cycsXG4gICAgICAgICAgbWFwT3V0cHV0OiAoYWdlbnQsIG91dHB1dCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2Uob3V0cHV0KSkge1xuICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGAjIyAke2Rpc3BsYXlBZ2VudE5hbWUoYWdlbnQpfVxcblxcbiR7b3V0cHV0fWA7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIDogcnVuQWdlbnRDb21tYW5kKG1vZGUsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpLFxufSk7XG5cbmFkZEFnZW50Q29tbWFuZCgncmV2aWV3LWNvZGV4JywgJ1J1biBDb2RleCByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NvZGV4JywgYnVpbGRSZXZpZXdQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3Jldmlldy1jbGF1ZGUnLCAnUnVuIENsYXVkZSBDb2RlIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY2xhdWRlJywgYnVpbGRSZXZpZXdQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3Jldmlldy1nZW1pbmknLCAnUnVuIEdlbWluaSBDTEkgcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdnZW1pbmknLCBidWlsZFJldmlld1Byb21wdCgpKVxuKTtcblxuYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCh7XG4gIG5hbWU6ICdwbGFuJyxcbiAgZGVzY3JpcHRpb246ICdSdW4gcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlIHdpdGggdGhlIHNlbGVjdGVkIGFnZW50JyxcbiAgb3B0aW9uRGVzY3JpcHRpb246ICdVc2UgYSBwbGFubmluZyBhZ2VudCcsXG4gIGNob2ljZXM6IFsnYWxsJywgJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSxcbiAgYXJndW1lbnROYW1lOiAnPGlzc3VlLW51bWJlcj4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlcicsXG4gIHJ1bjogKG1vZGUsIGlzc3VlTnVtYmVyKSA9PlxuICAgIG1vZGUgPT09ICdhbGwnXG4gICAgICA/IHJ1bkFsbEFnZW50Q29tbWFuZHMoYnVpbGRQbGFuUHJvbXB0KGlzc3VlTnVtYmVyKSwgeyBhbGxBZ2VudHNMYWJlbDogJ3BsYW5uaW5nIGFnZW50cycgfSlcbiAgICAgIDogcnVuQWdlbnRDb21tYW5kKG1vZGUsIGJ1aWxkUGxhblByb21wdChpc3N1ZU51bWJlcikpLFxufSk7XG5cbmFkZEFnZW50Q29tbWFuZCgncGxhbi1jb2RleCcsICdSdW4gQ29kZXggcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlJywge1xuICBhcmd1bWVudE5hbWU6ICc8aXNzdWUtbnVtYmVyPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyJyxcbiAgcnVuOiAoaXNzdWVOdW1iZXIpID0+IHJ1bkFnZW50Q29tbWFuZCgnY29kZXgnLCBidWlsZFBsYW5Qcm9tcHQoaXNzdWVOdW1iZXIpKSxcbn0pO1xuYWRkQWdlbnRDb21tYW5kKCdwbGFuLWNsYXVkZScsICdSdW4gQ2xhdWRlIENvZGUgcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlJywge1xuICBhcmd1bWVudE5hbWU6ICc8aXNzdWUtbnVtYmVyPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyJyxcbiAgcnVuOiAoaXNzdWVOdW1iZXIpID0+IHJ1bkFnZW50Q29tbWFuZCgnY2xhdWRlJywgYnVpbGRQbGFuUHJvbXB0KGlzc3VlTnVtYmVyKSksXG59KTtcbmFkZEFnZW50Q29tbWFuZCgncGxhbi1nZW1pbmknLCAnUnVuIEdlbWluaSBDTEkgcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlJywge1xuICBhcmd1bWVudE5hbWU6ICc8aXNzdWUtbnVtYmVyPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyJyxcbiAgcnVuOiAoaXNzdWVOdW1iZXIpID0+IHJ1bkFnZW50Q29tbWFuZCgnZ2VtaW5pJywgYnVpbGRQbGFuUHJvbXB0KGlzc3VlTnVtYmVyKSksXG59KTtcblxuYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCh7XG4gIG5hbWU6ICdzaW1wbGlmeScsXG4gIGRlc2NyaXB0aW9uOiAnUnVuIFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoIHdpdGggdGhlIHNlbGVjdGVkIGFnZW50JyxcbiAgb3B0aW9uRGVzY3JpcHRpb246ICdVc2UgYSBzaW1wbGlmeSBhZ2VudCcsXG4gIGNob2ljZXM6IFsnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddLFxuICBydW46IChhZ2VudCkgPT4gcnVuQWdlbnRDb21tYW5kKGFnZW50LCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpLFxufSk7XG5cbmFkZEFnZW50Q29tbWFuZCgnc2ltcGxpZnktY29kZXgnLCAnUnVuIENvZGV4IFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjb2RleCcsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWNsYXVkZScsICdSdW4gQ2xhdWRlIENvZGUgUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWdlbWluaScsICdSdW4gR2VtaW5pIENMSSBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnZ2VtaW5pJywgYnVpbGRTaW1wbGlmeVByb21wdCgpKVxuKTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnb3Blbi1wcicpXG4gIC5kZXNjcmlwdGlvbignQ3JlYXRlIGEgcHVsbCByZXF1ZXN0IGZvciB0aGUgY3VycmVudCBicmFuY2gnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZWFkU3RkaW5UZXh0KCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgb3BlblByKGJvZHkgfHwgdW5kZWZpbmVkKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtvdXRwdXR9XFxuYCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdjaGVjay1wci1jaScpXG4gIC5kZXNjcmlwdGlvbignU2hvdyB0aGUgbGF0ZXN0IHRlc3QtcmVsYXRlZCBDSSByZXN1bHRzIGZvciB0aGUgY3VycmVudCBwdWxsIHJlcXVlc3QnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrUHJDaSgpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHJlc3VsdC5vdXRwdXQpO1xuICAgIHByb2Nlc3MuZXhpdChyZXN1bHQuZXhpdENvZGUpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnZmV0Y2gtaXNzdWUnKVxuICAuZGVzY3JpcHRpb24oJ0ZldGNoIGFuIGlzc3VlIGJvZHkgYW5kIHRpbWVsaW5lIG1lc3NhZ2VzIGFzIFlBTUwnKVxuICAuYXJndW1lbnQoJzxpc3N1ZS1udW1iZXI+JywgJ0dpdEh1YiBpc3N1ZSBudW1iZXInKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKGlzc3VlTnVtYmVyOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmZXRjaElzc3VlTWVzc2FnZXMoaXNzdWVOdW1iZXIpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdmZXRjaC1wcicpXG4gIC5kZXNjcmlwdGlvbignRmV0Y2ggYSBwdWxsIHJlcXVlc3QgYm9keSBhbmQgdGltZWxpbmUgbWVzc2FnZXMgYXMgWUFNTCwgZXhjbHVkaW5nIGlubGluZSBjb21tZW50cycpXG4gIC5hcmd1bWVudCgnW3ByLW51bWJlcl0nLCAnR2l0SHViIHB1bGwgcmVxdWVzdCBudW1iZXI7IGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGJyYW5jaCBwdWxsIHJlcXVlc3QnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKHByTnVtYmVyPzogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZmV0Y2hQck1lc3NhZ2VzKHByTnVtYmVyKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnbGlzdC1wci1yZXZpZXctdGhyZWFkcycpXG4gIC5kZXNjcmlwdGlvbignTGlzdCB1bnJlc29sdmVkIHJldmlldyB0aHJlYWRzIGZvciB0aGUgY3VycmVudCBwdWxsIHJlcXVlc3QnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGxpc3RQclJldmlld1RocmVhZHMoKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgncmVzb2x2ZS1wci1yZXZpZXctdGhyZWFkcycpXG4gIC5kZXNjcmlwdGlvbignUmVwbHkgdG8gdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcyBhbmQgcmVzb2x2ZSB0aGVtJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXBsaWVzID0gYXdhaXQgcmVhZFJlcGxpZXNGcm9tU3RkaW4oKTtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCByZXNvbHZlUHJSZXZpZXdUaHJlYWRzKHJlcGxpZXMpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5hd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMocHJvY2Vzcy5hcmd2KTtcblxuZnVuY3Rpb24gYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZDxUTW9kZSBleHRlbmRzIHN0cmluZz4oY29uZmlnOiB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgb3B0aW9uRGVzY3JpcHRpb246IHN0cmluZztcbiAgY2hvaWNlczogW1RNb2RlLCAuLi5UTW9kZVtdXTtcbiAgYXJndW1lbnROYW1lPzogc3RyaW5nO1xuICBhcmd1bWVudERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBydW46IChtb2RlOiBUTW9kZSwgYXJndW1lbnQ6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+O1xufSk6IHZvaWQge1xuICBjb25zdCBjb21tYW5kID0gcHJvZ3JhbS5jb21tYW5kKGNvbmZpZy5uYW1lKS5kZXNjcmlwdGlvbihjb25maWcuZGVzY3JpcHRpb24pLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKTtcbiAgaWYgKGNvbmZpZy5hcmd1bWVudE5hbWUpIHtcbiAgICBjb21tYW5kLmFyZ3VtZW50KGNvbmZpZy5hcmd1bWVudE5hbWUsIGNvbmZpZy5hcmd1bWVudERlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGNvbW1hbmRcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYWdlbnQgPGFnZW50PicsIGNvbmZpZy5vcHRpb25EZXNjcmlwdGlvbikuY2hvaWNlcyhjb25maWcuY2hvaWNlcykubWFrZU9wdGlvbk1hbmRhdG9yeSgpKVxuICAgIC5hY3Rpb24oYXN5bmMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgICAgY29uc3QgW2FyZ3VtZW50T3JPcHRpb25zLCBtYXliZU9wdGlvbnNdID0gYXJncyBhcyBbc3RyaW5nIHwgeyBhZ2VudDogVE1vZGUgfSwgeyBhZ2VudDogVE1vZGUgfSB8IHVuZGVmaW5lZF07XG4gICAgICBjb25zdCBhcmd1bWVudCA9IHR5cGVvZiBhcmd1bWVudE9yT3B0aW9ucyA9PT0gJ3N0cmluZycgPyBhcmd1bWVudE9yT3B0aW9ucyA6ICcnO1xuICAgICAgY29uc3Qgb3B0aW9ucyA9ICh0eXBlb2YgYXJndW1lbnRPck9wdGlvbnMgPT09ICdzdHJpbmcnID8gbWF5YmVPcHRpb25zIDogYXJndW1lbnRPck9wdGlvbnMpIGFzIHsgYWdlbnQ6IFRNb2RlIH07XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShhd2FpdCBjb25maWcucnVuKG9wdGlvbnMuYWdlbnQsIGFyZ3VtZW50KSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEFnZW50Q29tbWFuZChcbiAgbmFtZTogc3RyaW5nLFxuICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICBjb25maWdPclJ1bjpcbiAgICB8ICgoKSA9PiBQcm9taXNlPHN0cmluZz4pXG4gICAgfCB7XG4gICAgICAgIGFyZ3VtZW50TmFtZTogc3RyaW5nO1xuICAgICAgICBhcmd1bWVudERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgICAgICBydW46IChhcmd1bWVudDogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz47XG4gICAgICB9XG4pOiB2b2lkIHtcbiAgY29uc3QgY29tbWFuZCA9IHByb2dyYW0uY29tbWFuZChuYW1lKS5kZXNjcmlwdGlvbihkZXNjcmlwdGlvbikuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpO1xuXG4gIGlmICh0eXBlb2YgY29uZmlnT3JSdW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb21tYW5kLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShhd2FpdCBjb25maWdPclJ1bigpKTtcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb21tYW5kLmFyZ3VtZW50KGNvbmZpZ09yUnVuLmFyZ3VtZW50TmFtZSwgY29uZmlnT3JSdW4uYXJndW1lbnREZXNjcmlwdGlvbikuYWN0aW9uKGFzeW5jIChhcmd1bWVudDogc3RyaW5nKSA9PiB7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgY29uZmlnT3JSdW4ucnVuKGFyZ3VtZW50KSk7XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbIldBSVRfVVBfVE9fT05FX0hPVVJfV0FSTklORyIsInJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MiLCJfeCIsIl94MiIsIl9ydW5Db21tYW5kV2l0aFByb2dyZXNzIiwiYXBwbHkiLCJ0aGlzIiwiYXJndW1lbnRzIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3IiLCJtIiwiX2NhbGxlZSIsImNvbW1hbmQiLCJvcHRpb25zIiwiX2NvbW1hbmQkIiwicHJvYyIsInN0b3BXYWl0UHJvZ3Jlc3MiLCJjb21tYW5kTG9nZ2VyIiwiX3lpZWxkJFByb21pc2UkYWxsIiwiX3lpZWxkJFByb21pc2UkYWxsMiIsInN0ZG91dCIsInN0ZGVyciIsIm91dHB1dCIsInciLCJfY29udGV4dCIsInAiLCJuIiwic3Bhd24iLCJzbGljZSIsInN0ZGlvIiwiY3JlYXRlV2FpdFByb2dyZXNzIiwid2FpdE1lc3NhZ2UiLCJ3YWl0SW50ZXJ2YWxTZWNvbmRzIiwiY3JlYXRlQ29tbWFuZExvZ2dlciIsImxvZ0ZpbGVQYXRoIiwidiIsIlByb21pc2UiLCJhbGwiLCJzdHJlYW1Ub1RleHQiLCJjaHVuayIsIndyaXRlIiwicmVzb2x2ZSIsInJlamVjdCIsIm9uY2UiLCJjb2RlIiwiX3NsaWNlZFRvQXJyYXkiLCJhIiwiY29uY2F0IiwiRXJyb3IiLCJqb2luIiwiY2xvc2UiLCJmIiwiX3gzIiwiX3g0IiwiX3N0cmVhbVRvVGV4dCIsIl9jYWxsZWUyIiwic3RyZWFtIiwib25DaHVuayIsImNodW5rcyIsIl9pdGVyYXRvckFicnVwdENvbXBsZXRpb24iLCJfZGlkSXRlcmF0b3JFcnJvciIsIl9pdGVyYXRvckVycm9yIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJjaHVua1RleHQiLCJfdCIsIl9jb250ZXh0MiIsIl9hc3luY0l0ZXJhdG9yIiwibmV4dCIsImRvbmUiLCJ2YWx1ZSIsInRvU3RyaW5nIiwicHVzaCIsIndyaXRlUHJvZ3Jlc3MiLCJtZXNzYWdlIiwicHJvY2VzcyIsInRpbWVyIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwiX3g1IiwiX2NyZWF0ZUNvbW1hbmRMb2dnZXIiLCJfY2FsbGVlNiIsIndhcm4iLCJfdDIiLCJfY29udGV4dDYiLCJfY2xvc2UiLCJfY2FsbGVlMyIsIl9jb250ZXh0MyIsImVycm9yIiwiU3RyaW5nIiwibWtkaXIiLCJkaXJuYW1lIiwicmVjdXJzaXZlIiwiY3JlYXRlV3JpdGVTdHJlYW0iLCJmbGFncyIsIm9uIiwid3JpdGFibGUiLCJfY2xvc2UyIiwiX2NhbGxlZTQiLCJfY29udGV4dDQiLCJlbmQiLCJfY2xvc2UzIiwiX2NhbGxlZTUiLCJfY29udGV4dDUiLCJOT19DT05DRVJOX01FU1NBR0UiLCJBR0VOVF9OQU1FUyIsIkNPTlRBSU5TX05PX0NPTkNFUk5fU0VOVEVOQ0VfUkVHRVgiLCJSZWdFeHAiLCJydW5BbGxBZ2VudENvbW1hbmRzIiwiX3J1bkFsbEFnZW50Q29tbWFuZHMiLCJwcm9tcHQiLCJyZXNvbHZlZFByb21wdCIsIm91dHB1dHMiLCJhbGxBZ2VudHNMYWJlbCIsIndhaXRNZXNzYWdlRm9yIiwibWFwIiwiYWdlbnQiLCJfb3B0aW9ucyRtYXBPdXRwdXQiLCJfb3B0aW9ucyRtYXBPdXRwdXQyIiwiX29wdGlvbnMiLCJydW5BZ2VudENvbW1hbmQiLCJ0cmltIiwibWFwT3V0cHV0IiwiY2FsbCIsImRpc3BsYXlBZ2VudE5hbWUiLCJmaWx0ZXIiLCJ1bmRlZmluZWQiLCJsZW5ndGgiLCJfcnVuQWdlbnRDb21tYW5kIiwiX3QzIiwiY3JlYXRlQWdlbnRDb21tYW5kIiwiYWdlbnRMb2dGaWxlUGF0aCIsInRhcmdldCIsIm5vdyIsIkRhdGUiLCJfbWFwMiIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJ0d29EaWdpdHMiLCJtb250aCIsImRheSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJwYWRTdGFydCIsInlhbWxTdHJpbmdpZnlPcHRpb25zIiwiYmxvY2tRdW90ZSIsImxpbmVXaWR0aCIsIlRFU1RfUkVMQVRFRF9QQVRURVJOIiwiVEVTVF9DSEVDS19XQUlUX01FU1NBR0UiLCJXT1JLRkxPV19SVU5fSlNPTl9GSUVMRFMiLCJGQUlMRURfTE9HX0xJTkVfUFJFRklYX1BBVFRFUk4iLCJwcm9ncmVzcyIsInByb2Nlc3NTdGRlcnIiLCJleGl0V2l0aEVycm9yIiwiZXhpdCIsImlzVHJhbnNpZW50R2hGYWlsdXJlIiwiZXhpdENvZGUiLCJ0ZXN0IiwicmVhZFN0ZGluVGV4dCIsIl9yZWFkU3RkaW5UZXh0IiwicHJvY2Vzc1N0ZGluIiwiaXNUVFkiLCJyZWFkUmVxdWlyZWRTdGRpblRleHQiLCJfcmVhZFJlcXVpcmVkU3RkaW5UZXh0IiwiaW5wdXQiLCJydW5Db21tYW5kIiwiX3J1bkNvbW1hbmQiLCJfb3B0aW9ucyRhbGxvd2VkRXhpdEMiLCJhbGxvd2VkRXhpdENvZGVzIiwiX2xvb3AiLCJfcmV0IiwiYXR0ZW1wdCIsIl9jb21tYW5kJDIiLCJzdGRpbkRhdGEiLCJzdGRpbiIsImluY2x1ZGVzIiwiR0hfUkVUUllfTUFYX0FUVEVNUFRTIiwic2xlZXAiLCJkIiwiX3JlZ2VuZXJhdG9yVmFsdWVzIiwiZ2giLCJfZ2giLCJhcmdzIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiZ2hBbGxvd0V4aXRDb2RlcyIsIl94NiIsIl94NyIsIl9naEFsbG93RXhpdENvZGVzIiwiY3VycmVudFJlcG9QYXJ0cyIsIl9jdXJyZW50UmVwb1BhcnRzIiwibmFtZVdpdGhPd25lciIsIl9uYW1lV2l0aE93bmVyJHNwbGl0IiwiX25hbWVXaXRoT3duZXIkc3BsaXQyIiwib3duZXIiLCJuYW1lIiwiX2NvbnRleHQ3Iiwic3BsaXQiLCJjdXJyZW50UHJOdW1iZXIiLCJfY3VycmVudFByTnVtYmVyIiwiX2NhbGxlZTciLCJfY29udGV4dDgiLCJncmFwaHFsIiwiX3g4IiwiX3g5IiwiX2dyYXBocWwiLCJfY2FsbGVlOCIsInF1ZXJ5IiwidmFycyIsIl9pMiIsIl9PYmplY3QkZW50cmllczIiLCJfT2JqZWN0JGVudHJpZXMyJF9pIiwiX2tleSIsInJlc3BvbnNlIiwiZXJyb3JNZXNzYWdlcyIsIl9jb250ZXh0OSIsIk9iamVjdCIsImVudHJpZXMiLCJrZXkiLCJKU09OIiwicGFyc2UiLCJBcnJheSIsImlzQXJyYXkiLCJlcnJvcnMiLCJfZXJyb3IkbWVzc2FnZSIsIm5vcm1hbGl6ZUNvbW1lbnRBdXRob3IiLCJjb21tZW50IiwiX2NvbW1lbnQkYXV0aG9yJGxvZ2luIiwiX2NvbW1lbnQkYXV0aG9yIiwiX29iamVjdFNwcmVhZCIsImF1dGhvciIsImxvZ2luIiwicGFnaW5hdGVSZXZpZXdUaHJlYWRzIiwiX3gwIiwiX3gxIiwiX3gxMCIsIl94MTEiLCJfeDEyIiwiX3BhZ2luYXRlUmV2aWV3VGhyZWFkcyIsIl9jYWxsZWU5IiwicHJOdW1iZXIiLCJvblRocmVhZCIsImN1cnNvciIsIl95aWVsZCRncmFwaHFsJGRhdGEiLCJfcmV2aWV3VGhyZWFkcyRwYWdlSW4iLCJyZXZpZXdUaHJlYWRzIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInRocmVhZCIsIl90NCIsIl90NSIsIl90NiIsIl9jb250ZXh0MCIsIm51bWJlciIsIk51bWJlciIsImRhdGEiLCJyZXBvc2l0b3J5IiwicHVsbFJlcXVlc3QiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIm5vZGVzIiwicyIsImUiLCJwYWdlSW5mbyIsImhhc05leHRQYWdlIiwiZW5kQ3Vyc29yIiwidW5yZXNvbHZlZFJldmlld1RocmVhZElkcyIsIl94MTMiLCJfeDE0IiwiX3gxNSIsIl91bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzIiwiX2NhbGxlZTAiLCJpZHMiLCJfY29udGV4dDEiLCJpc1Jlc29sdmVkIiwiaWQiLCJ1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyIsIl94MTYiLCJfeDE3IiwiX3gxOCIsIl91bnJlc29sdmVkUmV2aWV3VGhyZWFkcyIsIl9jYWxsZWUxMCIsInRocmVhZHMiLCJfY29udGV4dDExIiwiX2NhbGxlZTEiLCJfcGFnZUluZm8kZW5kQ3Vyc29yIiwiY29tbWVudHMiLCJfeWllbGQkZ3JhcGhxbCRkYXRhMiIsIl9wYWdlSW5mbyRlbmRDdXJzb3IyIiwiY29tbWVudENvbm5lY3Rpb24iLCJfdDciLCJfdDgiLCJfdDkiLCJfY29udGV4dDEwIiwidGhyZWFkSWQiLCJub2RlIiwiaXNPdXRkYXRlZCIsInBhdGgiLCJsaW5lIiwib3JpZ2luYWxMaW5lIiwic3RhcnRMaW5lIiwib3JpZ2luYWxTdGFydExpbmUiLCJ5YW1sRHVtcCIsInN0cmluZ2lmeVlhbWwiLCJkZWVwQ29weSIsInN0cmluZ2lmeSIsImxhdGVzdFByQ2lSZXN1bHRzIiwiX3gxOSIsIl9sYXRlc3RQckNpUmVzdWx0cyIsIl9jYWxsZWUxMSIsIl9zdW1tYXJ5JHBhc3MiLCJfc3VtbWFyeSRmYWlsIiwiX3N1bW1hcnkkcGVuZGluZyIsIl9zdW1tYXJ5JHNraXBwaW5nIiwiX3N1bW1hcnkkY2FuY2VsIiwiY2hlY2tzIiwicmF3Iiwic3VtbWFyeSIsIl90MCIsIl9jb250ZXh0MTIiLCJTeW50YXhFcnJvciIsInJlZHVjZSIsImNvdW50cyIsImNoZWNrIiwiX2NoZWNrJGJ1Y2tldDIiLCJfY291bnRzJGJ1Y2tldCIsImJ1Y2tldCIsInRvdGFsIiwicGFzcyIsImZhaWwiLCJwZW5kaW5nIiwic2tpcHBpbmciLCJjYW5jZWwiLCJ3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzIiwiX3gyMCIsIl94MjEiLCJfeDIyIiwiX3gyMyIsIl93YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzIiwiX2NhbGxlZTEyIiwic2xlZXBGbiIsImxhdGVzdENpUmVzdWx0c0ZuIiwid3JpdGVQcm9ncmVzc0ZuIiwiYXR0ZW1wdHMiLCJjaVJlc3VsdHMiLCJjbGFzc2lmaWVkUmVzdWx0cyIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdCIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDIiLCJmYWlsZWRSZXN1bHRzIiwicnVubmluZ1Jlc3VsdHMiLCJfY29udGV4dDEzIiwic2xlZXBTZWNvbmRzIiwiY2xhc3NpZmllZExhdGVzdFJlc3VsdHMiLCJmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQiLCJrZXlzIiwibGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3ciLCJncm91cGVkUmVzdWx0cyIsIndvcmtmbG93S2V5Iiwid29ya2Zsb3ciLCJmcm9tRW50cmllcyIsIl9yZWYiLCJfbGF0ZXN0QXR0ZW1wdENoZWNrcyQiLCJfcmVmMiIsImxhdGVzdEF0dGVtcHRDaGVja3MiLCJncm91cHMiLCJncm91cGVkQ2hlY2tzIiwicnVuSWQiLCJ3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayIsIndvcmtmbG93QXR0ZW1wdEtleSIsImdyb3VwIiwiZ2V0Iiwic2V0IiwiTWFwIiwiZnJvbSIsInZhbHVlcyIsImxhdGVzdEdyb3VwIiwiY3VycmVudEdyb3VwIiwibGF0ZXN0R3JvdXBUaW1lc3RhbXAiLCJsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyIsImZpcnN0Q2hlY2siLCJsYXRlc3RDaGVjayIsImN1cnJlbnRMYXRlc3QiLCJsYXRlc3RDaGVja1RpbWVzdGFtcCIsImNsYXNzaWZpY2F0aW9uIiwid29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbiIsIl9pIiwiX09iamVjdCRlbnRyaWVzIiwiX09iamVjdCRlbnRyaWVzJF9pIiwicmVzdWx0Iiwic29tZSIsInRlc3RSZWxhdGVkQ2hlY2siLCJfbGluayRtYXRjaCIsImxpbmsiLCJtYXRjaCIsIndvcmtmbG93UnVuIiwiX3gyNCIsIl93b3JrZmxvd1J1biIsIl9jYWxsZWUxMyIsInJ1bkpzb24iLCJfdDEiLCJfY29udGV4dDE0IiwiYnVja2V0cyIsIl9jaGVjayRidWNrZXQiLCJfY2hlY2skc3RhcnRlZEF0IiwidGltZXN0YW1wIiwiY29tcGxldGVkQXQiLCJzdGFydGVkQXQiLCJsYXRlc3QiLCJfeDI1IiwiX3NsZWVwU2Vjb25kcyIsIl9jYWxsZWUxNCIsInNlY29uZHMiLCJfY29udGV4dDE1IiwiX3gyNiIsIl9jYWxsZWUxNSIsIl90MTAiLCJfY29udGV4dDE2IiwiQnVmZmVyIiwicmVhZFJlcGxpZXNGcm9tU3RkaW4iLCJfcmVhZFJlcGxpZXNGcm9tU3RkaW4iLCJfY2FsbGVlMTYiLCJwYXlsb2FkIiwibm9ybWFsaXplZFJlcGxpZXMiLCJfaTMiLCJfT2JqZWN0JGVudHJpZXMzIiwiX09iamVjdCRlbnRyaWVzMyRfaSIsImJvZHkiLCJfY29udGV4dDE3IiwicGFyc2VSZXBseUlucHV0IiwicmVwbGllcyIsIm9wZW5QciIsIl94MjciLCJfb3BlblByIiwiX2NhbGxlZTE3IiwiaGVhZCIsImJhc2UiLCJjcmVhdGVBcmdzIiwiX3QxMSIsIl90MTIiLCJfY29udGV4dDE4IiwibGlzdFByUmV2aWV3VGhyZWFkcyIsIl9saXN0UHJSZXZpZXdUaHJlYWRzIiwiX2NhbGxlZTE4IiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyMiIsIl90MTMiLCJfdDE0IiwiX2NvbnRleHQxOSIsInVucmVzb2x2ZWRfdGhyZWFkcyIsInJlc29sdmVQclJldmlld1RocmVhZHMiLCJfeDI4IiwiX3Jlc29sdmVQclJldmlld1RocmVhZHMiLCJfY2FsbGVlMTkiLCJfeWllbGQkY3VycmVudFJlcG9QYXIzIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyNCIsInVucmVzb2x2ZWRJZHMiLCJyZXNvbHZlZFRocmVhZElkcyIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJfcmVzcG9uc2UkZGF0YSIsIl9zdGVwMyR2YWx1ZSIsImluZGV4IiwiX3N0ZXAzJHZhbHVlJCIsIl90MTUiLCJfdDE2IiwiX3QxNyIsIl9jb250ZXh0MjAiLCJTZXQiLCJoYXMiLCJyZXNvbHZlUmV2aWV3VGhyZWFkIiwicmVzb2x2ZWRfdGhyZWFkX2lkcyIsImNoZWNrUHJDaSIsIl9jaGVja1ByQ2kiLCJfY2FsbGVlMjEiLCJfeWllbGQkd2FpdEZvclJ1bm5pbmciLCJfeWllbGQkd2FpdEZvclJ1bm5pbmcyIiwid2FpdEF0dGVtcHRzIiwid2FpdFRpbWVkT3V0IiwiY2xhc3NpZmllZExhdGVzdCIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDMiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3Q0IiwiX2NvbnRleHQyMiIsIndhaXRlZF9mb3JfdGVzdF9yZWxhdGVkX2NoZWNrcyIsInRlc3RfcmVsYXRlZF9jaGVja193YWl0X2F0dGVtcHRzIiwidGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfdGltZWRfb3V0IiwiX2NhbGxlZTIwIiwiX3JlZjUiLCJfcmVmNyIsImNvbXBhY3RXb3JrZmxvdyIsIl90MTgiLCJfdDE5IiwiX3QyMCIsIl9jb250ZXh0MjEiLCJjb21wYWN0V29ya2Zsb3dSZXN1bHQiLCJidWlsZEZhaWxlZFdvcmtmbG93RGV0YWlscyIsImZhaWxlZFdvcmtmbG93TG9nIiwiZmFpbGVkX3dvcmtmbG93cyIsInRlc3Rfd29ya2Zsb3dfb3V0cHV0IiwiX3JlZjgiLCJfcmVmOSIsInJ1bm5pbmdfdGVzdF9yZWxhdGVkX3dvcmtmbG93cyIsImZldGNoSXNzdWVNZXNzYWdlcyIsIl94MjkiLCJfZmV0Y2hJc3N1ZU1lc3NhZ2VzIiwiX2NhbGxlZTIyIiwiaXNzdWVOdW1iZXIiLCJfeWllbGQkY3VycmVudFJlcG9QYXI1IiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyNiIsImlzc3VlIiwiX2NvbnRleHQyMyIsImlzc3VlTWVzc2FnZXMiLCJmZXRjaFByTWVzc2FnZXMiLCJfeDMwIiwiX2ZldGNoUHJNZXNzYWdlcyIsIl9jYWxsZWUyMyIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjciLCJfeWllbGQkY3VycmVudFJlcG9QYXI4IiwicmVzb2x2ZWRQck51bWJlciIsIl90MjEiLCJfY29udGV4dDI0IiwicHJNZXNzYWdlcyIsInB1bGxfcmVxdWVzdCIsInBhcnNlZCIsIl90eXBlb2YiLCJldmVyeSIsInJlcGx5IiwiaXNSZXBseUlucHV0IiwiX3gzMSIsIl94MzIiLCJfY29tcGFjdFdvcmtmbG93UmVzdWx0IiwiX2NhbGxlZTI0IiwiX3N0cmluZ09yVW5kZWZpbmVkIiwicnVuIiwiZmFpbGVkSm9iIiwiX2NvbnRleHQyNSIsImZhaWxlZFdvcmtmbG93UnVuSm9iIiwic3RyaW5nT3JVbmRlZmluZWQiLCJqb2IiLCJqb2JfdXJsIiwidXJsIiwiZmFpbGVkX3N0ZXAiLCJmYWlsZWRXb3JrZmxvd1J1blN0ZXBOYW1lIiwicnVuX2lkIiwicnVuX3VybCIsImJyYW5jaCIsImhlYWRCcmFuY2giLCJzaGEiLCJoZWFkU2hhIiwiY29uY2x1c2lvbiIsIl94MzMiLCJfZmFpbGVkV29ya2Zsb3dMb2ciLCJfY2FsbGVlMjUiLCJfY29udGV4dDI2IiwibG9nIiwiZmFpbGVkX2xvZyIsInJlZmluZUZhaWxlZFdvcmtmbG93TG9nIiwic2FuaXRpemVkSW5wdXQiLCJzYW5pdGl6ZUZhaWxlZFdvcmtmbG93TG9nIiwic3RyaXBWVENvbnRyb2xDaGFyYWN0ZXJzIiwicnRrQXZhaWxhYmxlIiwic3Bhd25TeW5jU2FmZSIsInJlcGxhY2UiLCJqb2JOYW1lIiwiX3JlZjMiLCJfcnVuJGpvYnMkZmluZCIsImpvYnMiLCJmaW5kIiwic3RhdHVzIiwiX2pvYiRzdGVwcyRmaW5kJG5hbWUiLCJfam9iJHN0ZXBzJGZpbmQiLCJfam9iJHN0ZXBzJGZpbmQyIiwic3RlcHMiLCJzdGVwIiwiX3Jlc3VsdCRzdGF0dXMiLCJfcmVzdWx0JHN0ZG91dCIsIl9yZXN1bHQkc3RkZXJyIiwic3Bhd25TeW5jIiwiZW5jb2RpbmciLCJfeDM0IiwiX3gzNSIsIl94MzYiLCJfaXNzdWVNZXNzYWdlcyIsIl9jYWxsZWUyNiIsIm1lc3NhZ2VzIiwiX2NvbnRleHQyNyIsImZldGNoTWV0YWRhdGEiLCJub3VuIiwic2VsZWN0TWV0YWRhdGEiLCJfcmVzcG9uc2UkZGF0YTIiLCJwYWdpbmF0ZU1lc3NhZ2VzIiwic2VsZWN0Q29ubmVjdGlvbiIsIl9yZXNwb25zZSRkYXRhMyIsIm1hcE5vZGUiLCJjb21tZW50TWVzc2FnZSIsIl94MzciLCJfeDM4IiwiX3gzOSIsIl9wck1lc3NhZ2VzIiwiX2NhbGxlZTI3IiwiX3lpZWxkJFByb21pc2UkYWxsMyIsIl95aWVsZCRQcm9taXNlJGFsbDQiLCJpc3N1ZUNvbW1lbnRzIiwicmV2aWV3cyIsIl9jb250ZXh0MjgiLCJfcmVzcG9uc2UkZGF0YTQiLCJwcklzc3VlQ29tbWVudHMiLCJwclJldmlld3MiLCJzb3J0IiwiY29tcGFyZU1lc3NhZ2VzQnlDcmVhdGVkQXQiLCJsZWZ0IiwicmlnaHQiLCJsZWZ0Q3JlYXRlZEF0IiwiY3JlYXRlZEF0IiwicmlnaHRDcmVhdGVkQXQiLCJsb2NhbGVDb21wYXJlIiwiX3g0MCIsIl94NDEiLCJfeDQyIiwiX3BySXNzdWVDb21tZW50cyIsIl9jYWxsZWUyOCIsIl9jb250ZXh0MjkiLCJfcmVzcG9uc2UkZGF0YTUiLCJfeDQzIiwiX3g0NCIsIl94NDUiLCJfcHJSZXZpZXdzIiwiX2NhbGxlZTI5IiwiX2NvbnRleHQzMCIsIl9yZXNwb25zZSRkYXRhNiIsInJldmlld01lc3NhZ2UiLCJfeDQ2IiwiX3BhZ2luYXRlTWVzc2FnZXMiLCJfY2FsbGVlMzAiLCJjb25maWciLCJfY29ubmVjdGlvbiRwYWdlSW5mbyQiLCJjb25uZWN0aW9uIiwiX3QyMiIsIl9jb250ZXh0MzEiLCJoYXNNZXNzYWdlQm9keSIsIl94NDciLCJfZmV0Y2hNZXRhZGF0YSIsIl9jYWxsZWUzMSIsIl9tZXRhZGF0YSRhdXRob3IkbG9naSIsIl9tZXRhZGF0YSRhdXRob3IiLCJfbWV0YWRhdGEkYm9keSIsIm1ldGFkYXRhIiwiX3QyMyIsIl9jb250ZXh0MzIiLCJ0aXRsZSIsIl9jb21tZW50JGF1dGhvciRsb2dpbjIiLCJfY29tbWVudCRhdXRob3IyIiwidHlwZSIsInJldmlldyIsIl9yZXZpZXckYXV0aG9yJGxvZ2luIiwiX3JldmlldyRhdXRob3IiLCJfcmV2aWV3JHN0YXRlIiwiX3JldmlldyRzdWJtaXR0ZWRBdCIsIl9yZXZpZXckYm9keSIsInN0YXRlIiwic3VibWl0dGVkQXQiLCJidWlsZFBsYW5Qcm9tcHQiLCJfYnVpbGRQbGFuUHJvbXB0IiwiaXNzdWVZYW1sIiwiY3VycmVudERlZmF1bHRCcmFuY2giLCJfY3VycmVudERlZmF1bHRCcmFuY2giLCJyZXF1aXJlTm9uRW1wdHkiLCJidWlsZFJldmlld1Byb21wdCIsIl9idWlsZFJldmlld1Byb21wdCIsImRlZmF1bHRCcmFuY2giLCJidWlsZFNpbXBsaWZ5UHJvbXB0IiwiX2J1aWxkU2ltcGxpZnlQcm9tcHQiLCJwcm9ncmFtIiwiQ29tbWFuZCIsImFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQiLCJkZXNjcmlwdGlvbiIsImFsbG93RXhjZXNzQXJndW1lbnRzIiwiYXJndW1lbnROYW1lIiwiYXJndW1lbnQiLCJhcmd1bWVudERlc2NyaXB0aW9uIiwiYWRkT3B0aW9uIiwiT3B0aW9uIiwib3B0aW9uRGVzY3JpcHRpb24iLCJjaG9pY2VzIiwibWFrZU9wdGlvbk1hbmRhdG9yeSIsImFjdGlvbiIsIl9sZW4iLCJhcmd1bWVudE9yT3B0aW9ucyIsIm1heWJlT3B0aW9ucyIsIl9hcmdzNyIsImFkZEFnZW50Q29tbWFuZCIsImNvbmZpZ09yUnVuIiwic2hvd0hlbHBBZnRlckVycm9yIiwibW9kZSIsImNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2UiLCJwYXJzZUFzeW5jIiwiYXJndiJdLCJtYXBwaW5ncyI6Ijs7O216SEFhQSxJQUNhQSxFQUE4QixnQ0FFM0MsU0FBc0JDLEVBQXNCQyxFQUFBQyxHQUFBLE9BQUFDLEVBQUFDLE1BQUFDLEtBQUFDLFVBQUEsQ0EyQjNDLFNBQUFILElBQUEsT0FBQUEsRUFBQUksRUFBQUMsSUFBQUMsRUEzQk0sU0FBQUMsRUFBc0NDLEVBQW1CQyxHQUEwQixJQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBLE9BQUFiLElBQUFjLEVBQUEsU0FBQUMsR0FBQSxjQUFBQSxFQUFBQyxFQUFBRCxFQUFBRSxHQUFBLEtBQUEsRUFJSyxZQUpMLElBQTFCYixJQUFBQSxFQUE2QixDQUFBLEdBQ3JGRSxFQUFPWSxFQUFnQixPQUFYYixFQUFDRixFQUFRLElBQUVFLEVBQUksR0FBSUYsRUFBUWdCLE1BQU0sR0FBSSxDQUNyREMsTUFBTyxDQUFDLFNBQVUsT0FBUSxVQUV0QmIsRUFBbUJjLEVBQW1CakIsRUFBUWtCLFlBQWFsQixFQUFRbUIscUJBQW9CUixFQUFBRSxFQUFBLEVBQ2pFTyxFQUFvQnBCLEVBQVFxQixhQUFZLEtBQUEsRUFBakQsT0FBYmpCLEVBQWFPLEVBQUFXLEVBQUFYLEVBQUFDLEVBQUEsRUFBQUQsRUFBQUUsRUFBQSxFQUd3QlUsUUFBUUMsSUFBSSxDQUNuREMsRUFBYXZCLEVBQUtLLE9BQVEsU0FBQ21CLEdBQUssT0FBS3RCLEVBQWN1QixNQUFNRCxFQUFNLEdBQy9ERCxFQUFhdkIsRUFBS00sT0FBUSxTQUFDa0IsR0FBSyxPQUFLdEIsRUFBY3VCLE1BQU1ELEVBQU0sR0FDL0QsSUFBSUgsUUFBZ0IsU0FBQ0ssRUFBU0MsR0FDNUIzQixF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
|
|
4
|
+
var n,e,r="function"==typeof Symbol?Symbol:{},t=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function i(r,t,o,i){var c=t&&t.prototype instanceof u?t:u,s=Object.create(c.prototype);return x(s,"_invoke",function(r,t,o){var i,u,c,s=0,l=o||[],f=!1,d={p:0,n:0,v:n,a:p,f:p.bind(n,4),d:function(e,r){return i=e,u=0,c=n,d.n=r,a}};function p(r,t){for(u=r,c=t,e=0;!f&&s&&!o&&e<l.length;e++){var o,i=l[e],p=d.p,h=i[2];r>3?(o=h===t)&&(c=i[(u=i[4])?5:(u=3,3)],i[4]=i[5]=n):i[0]<=p&&((o=r<2&&p<i[1])?(u=0,d.v=t,d.n=i[1]):p<h&&(o=r<3||i[0]>t||t>h)&&(i[4]=r,i[5]=t,d.n=h,u=0))}if(o||r>1)return a;throw f=!0,t}return function(o,l,h){if(s>1)throw TypeError("Generator is already running");for(f&&1===l&&p(l,h),u=l,c=h;(e=u<2?n:c)||!f;){i||(u?u<3?(u>1&&(d.n=-1),p(u,c)):d.n=c:d.v=c);try{if(s=2,i){if(u||(o="next"),e=i[o]){if(!(e=e.call(i,c)))throw TypeError("iterator result is not an object");if(!e.done)return e;c=e.value,u<2&&(u=0)}else 1===u&&(e=i.return)&&e.call(i),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);i=n}else if((e=(f=d.n<0)?c:r.call(t,d))!==a)break}catch(e){i=n,u=1,c=e}finally{s=1}}return{value:e,done:f}}}(r,o,i),!0),s}var a={};function u(){}function c(){}function s(){}e=Object.getPrototypeOf;var l=[][t]?e(e([][t]())):(x(e={},t,function(){return this}),e),f=s.prototype=u.prototype=Object.create(l);function d(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,s):(n.__proto__=s,x(n,o,"GeneratorFunction")),n.prototype=Object.create(f),n}return c.prototype=s,x(f,"constructor",s),x(s,"constructor",c),c.displayName="GeneratorFunction",x(s,o,"GeneratorFunction"),x(f),x(f,o,"Generator"),x(f,t,function(){return this}),x(f,"toString",function(){return"[object Generator]"}),(k=function(){return{w:i,m:d}})()}function x(n,e,r,t){var o=Object.defineProperty;try{o({},"",{})}catch(n){o=0}x=function(n,e,r,t){function i(e,r){x(n,e,function(n){return this._invoke(e,r,n)})}e?o?o(n,e,{value:r,enumerable:!t,configurable:!t,writable:!t}):n[e]=r:(i("next",0),i("throw",1),i("return",2))},x(n,e,r,t)}function S(n){if(null!=n){var e=n["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],r=0;if(e)return e.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length))return{next:function(){return n&&r>=n.length&&(n=void 0),{value:n&&n[r++],done:!n}}}}throw new TypeError(typeof n+" is not iterable")}function j(n,e){return function(n){if(Array.isArray(n))return n}(n)||function(n,e){var r=null==n?null:"undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(null!=r){var t,o,i,a,u=[],c=!0,s=!1;try{if(i=(r=r.call(n)).next,0===e){if(Object(r)!==r)return;c=!1}else for(;!(c=(t=i.call(r)).done)&&(u.push(t.value),u.length!==e);c=!0);}catch(n){s=!0,o=n}finally{try{if(!c&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(s)throw o}}return u}}(n,e)||A(n,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function O(n){return function(n){if(Array.isArray(n))return d(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||A(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function R(n){"@babel/helpers - typeof";return R="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},R(n)}function A(n,e){if(n){if("string"==typeof n)return d(n,e);var r={}.toString.call(n).slice(8,-1);return"Object"===r&&n.constructor&&(r=n.constructor.name),"Map"===r||"Set"===r?Array.from(n):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?d(n,e):void 0}}var I="PLEASE WAIT FOR UP TO 1 HOUR.";function $(n,e){return C.apply(this,arguments)}function C(){return C=v(k().m(function n(e,t){var o,i,a,u,c,s,l,f,d;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t={}),i=r(null!=(o=e[0])?o:"",e.slice(1),{stdio:["ignore","pipe","pipe"]}),a=E(t.waitMessage,t.waitIntervalSeconds),n.n=1,N(t.logFilePath);case 1:return u=n.v,n.p=2,n.n=3,Promise.all([P(i.stdout,function(n){return u.write(n)}),P(i.stderr,function(n){return u.write(n)}),new Promise(function(n,e){i.once("error",e),i.once("close",function(e){return n(null!=e?e:1)})})]);case 3:if(c=n.v,s=j(c,3),l=s[0],f=s[1],0!==s[2]){n.n=4;break}return n.a(2,l);case 4:throw d="".concat(l).concat(f),new Error(d||"Command failed: ".concat(e.join(" ")));case 5:return n.p=5,n.n=6,u.close();case 6:return a(),n.f(5);case 7:return n.a(2)}},n,null,[[2,,5,7]])})),C.apply(this,arguments)}function P(n,e){return q.apply(this,arguments)}function q(){return(q=v(k().m(function n(e,r){var t,o,i,a,u,c,s,l,f;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:t=[],o=!1,i=!1,n.p=2,u=p(e);case 3:return n.n=4,u.next();case 4:if(!(o=!(c=n.v).done)){n.n=6;break}s=c.value,l="string"==typeof s?s:s.toString("utf8"),t.push(l),null==r||r(l);case 5:o=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,f=n.v,i=!0,a=f;case 8:if(n.p=8,n.p=9,!o||null==u.return){n.n=10;break}return n.n=10,u.return();case 10:if(n.p=10,!i){n.n=11;break}throw a;case 11:return n.f(10);case 12:return n.f(8);case 13:return n.a(2,t.join(""))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function E(n,e,r){if(void 0===e&&(e=10),void 0===r&&(r=function(n){return process.stderr.write(n)}),!n)return function(){};var t=setInterval(function(){r(".")},1e3*e);return r("".concat(n," One dot represents ").concat(e," seconds: ")),function(){clearInterval(t),r("\n")}}function N(n){return T.apply(this,arguments)}function T(){return T=v(k().m(function n(e){var r,t,u;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,{write:function(){},close:function(){var n=v(k().m(function n(){return k().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()});case 1:return r=function(n){process.stderr.write("Warning: Failed to write command log to ".concat(e,": ").concat(String(n),"\n"))},n.p=2,n.n=3,i(a(e),{recursive:!0});case 3:return(t=o(e,{flags:"w"})).on("error",r),n.a(2,{write:function(n){t.writable&&t.write(n)},close:function(){var n=v(k().m(function n(){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,new Promise(function(n){t.end(function(){return n()})});case 1:return n.a(2,n.v)}},n)}));return function(){return n.apply(this,arguments)}}()});case 4:return n.p=4,u=n.v,r(u),n.a(2,{write:function(){},close:function(){var n=v(k().m(function n(){return k().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()})}},n,null,[[2,4]])})),T.apply(this,arguments)}var _="There is no concern.",L=["codex","claude","gemini"],D=new RegExp("\\b".concat("there is no concern","\\b"),"i");function G(n,e){return F.apply(this,arguments)}function F(){return(F=v(k().m(function n(e,r){var t,o,i;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===r&&(r={allAgentsLabel:"agents"}),n.n=1,e;case 1:return t=n.v,o=E(J(r.allAgentsLabel)),n.p=2,n.n=3,Promise.all(L.map(v(k().m(function n(e){var o,i,a,u;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,H(e,t,{waitMessage:!1});case 1:return u=n.v.trim(),n.a(2,null!=(o=null==(i=(a=r).mapOutput)?void 0:i.call(a,e,u))?o:"## ".concat(W(e),"\n\n").concat(u))}},n)}))));case 3:return i=n.v.filter(function(n){return void 0!==n}),n.a(2,i.length>0?i.join("\n\n"):_);case 4:return n.p=4,o(),n.f(4);case 5:return n.a(2)}},n,null,[[2,,4,5]])}))).apply(this,arguments)}function H(n,e,r){return M.apply(this,arguments)}function M(){return(M=v(k().m(function n(e,r,t){var o,i,a;return k().w(function(n){for(;;)switch(n.n){case 0:return void 0===t&&(t={}),o=$,i=U,a=e,n.n=1,r;case 1:return n.a(2,o(i(a,n.v),{logFilePath:B(e),waitMessage:void 0===t.waitMessage?J(W(e)):t.waitMessage}))}},n)}))).apply(this,arguments)}function U(n,e){switch(n){case"codex":return["npx","--yes","@openai/codex@latest","exec","--dangerously-bypass-approvals-and-sandbox",e];case"claude":return["claude","--dangerously-skip-permissions","-p",e];case"gemini":return["npx","--yes","@google/gemini-cli@preview","--approval-mode","yolo","--model","gemini-3.1-pro-preview","-p",e]}}function W(n){switch(n){case"codex":return"Codex";case"claude":return"Claude Code";case"gemini":return"Gemini CLI"}}function J(n){return"Waiting for ".concat(n," to finish. ").concat(I)}function B(n){return"logs/".concat(n,"-").concat((e=new Date,r=j([e.getMonth()+1,e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds()].map(Q),5),t=r[0],o=r[1],i=r[2],a=r[3],u=r[4],"".concat(t).concat(o,"-").concat(i).concat(a).concat(u)),".log");var e,r,t,o,i,a,u}function Q(n){return n.toString().padStart(2,"0")}var Y={blockQuote:"literal",lineWidth:0},Z=/\btest\b/i,z="Waiting for test-related workflows to finish. ".concat(I),K=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","jobs","name","number","startedAt","status","updatedAt","url","workflowName"],V=/^.*?\tUNKNOWN STEP\t\d{4}-\d{2}-\d{2}T[^Z]+Z\s*/;function X(n){c.write("".concat(n,"\n"))}function nn(n,e){void 0===e&&(e=1),c.write("".concat(n,"\n")),process.exit(e)}function en(n,e,r){return"gh"===n[0]&&0!==e&&/(HTTP 50[0234]\b|We had issues producing the response to your request)/i.test(r)}function rn(){return tn.apply(this,arguments)}function tn(){return(tn=v(k().m(function n(){return k().w(function(n){for(;;)switch(n.n){case 0:if(!u.isTTY){n.n=1;break}return n.a(2,"");case 1:return n.n=2,Un(u);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function on(){return an.apply(this,arguments)}function an(){return(an=v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,rn();case 1:if(!((e=n.v).length>0)){n.n=2;break}return n.a(2,e);case 2:nn("Error: JSON input is required on stdin",2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function un(n,e){return cn.apply(this,arguments)}function cn(){return cn=v(k().m(function n(e,t){var o,i,a,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),i=null!=(o=t.allowedExitCodes)?o:[],a=k().m(function n(){var o,a,u,l,f,d,p,h;return k().w(function(n){for(;;)switch(n.n){case 0:return a=r(null!=(o=e[0])?o:"",e.slice(1),{stdio:["pipe","pipe","pipe"]}),void 0!==t.stdinData?a.stdin.end(t.stdinData):a.stdin.end(),n.n=1,Promise.all([Un(a.stdout),Un(a.stderr),new Promise(function(n,e){a.once("error",e),a.once("close",function(e){return n(null!=e?e:1)})})]);case 1:if(u=n.v,l=j(u,3),f=l[0],d=l[1],p=l[2],h="".concat(f).concat(d),0!==p&&!i.includes(p)){n.n=2;break}return n.a(2,{v:h});case 2:if(!(en(e,p,h)&&c<3)){n.n=4;break}return X("Transient GitHub CLI failure; retrying... (attempt ".concat(c," of ").concat(2,")")),n.n=3,s(1e3*c);case 3:return n.a(2,0);case 4:nn(h||"Command failed: ".concat(e.join(" ")));case 5:return n.a(2)}},n)}),c=1;case 1:if(!(c<=3)){n.n=5;break}return n.d(S(a()),2);case 2:if(0!==(u=n.v)){n.n=3;break}return n.a(3,4);case 3:if(!u){n.n=4;break}return n.a(2,u.v);case 4:c+=1,n.n=1;break;case 5:nn("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),cn.apply(this,arguments)}function sn(n,e){return ln.apply(this,arguments)}function ln(){return(ln=v(k().m(function n(e,r){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,un(["gh"].concat(O(e)),{stdinData:r});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function fn(n,e,r){return dn.apply(this,arguments)}function dn(){return(dn=v(k().m(function n(e,r,t){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,un(["gh"].concat(O(e)),{stdinData:t,allowedExitCodes:r});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function pn(){return hn.apply(this,arguments)}function hn(){return(hn=v(k().m(function n(){var e,r,t,o,i;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,sn(["repo","view","--json","nameWithOwner","--jq",".nameWithOwner"]);case 1:return e=n.v.trim(),r=e.split("/",2),t=j(r,2),o=t[0],i=t[1],o&&i||nn("Error: could not determine current repository"),n.a(2,[o,i])}},n)}))).apply(this,arguments)}function mn(){return vn.apply(this,arguments)}function vn(){return(vn=v(k().m(function n(){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,sn(["pr","view","--json","number","--jq",".number"]);case 1:return n.a(2,n.v.trim())}},n)}))).apply(this,arguments)}function wn(n,e){return yn.apply(this,arguments)}function yn(){return(yn=v(k().m(function n(e,r){var t,o,i,a,u,c,s,l,f;return k().w(function(n){for(;;)switch(n.n){case 0:void 0===r&&(r={}),t=["api","graphql","-F","query=@-"],o=0,i=Object.entries(r);case 1:if(!(o<i.length)){n.n=4;break}if(a=j(i[o],2),u=a[0],void 0!==(c=a[1])&&""!==c){n.n=2;break}return n.a(3,3);case 2:t.push("-F","".concat(u,"=").concat(c));case 3:o++,n.n=1;break;case 4:return f=JSON,n.n=5,sn(t,e);case 5:if(s=f.parse.call(f,n.v),Array.isArray(s.errors)){n.n=6;break}return n.a(2,s);case 6:l=s.errors.map(function(n){var e;return null!=(e=n.message)?e:"Unknown GraphQL error"}).join("\n"),nn("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function gn(n){var e,r;return b(b({},n),{},{author:"string"==typeof n.author?n.author:null!=(e=null==(r=n.author)?void 0:r.login)?e:null})}function bn(n,e,r,t,o){return kn.apply(this,arguments)}function kn(){return(kn=v(k().m(function n(e,r,t,o,i){var a,u,c,s,l,f,d,p,h,m,v,y;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,wn(e,{owner:r,name:t,number:Number(o),cursor:a});case 1:if(m=u=n.v.data,h=null==m){n.n=2;break}h=null==(u=u.repository);case 2:if(p=h){n.n=3;break}p=null==(u=u.pullRequest);case 3:if(!p){n.n=4;break}v=void 0,n.n=5;break;case 4:v=u.reviewThreads;case 5:(s=v)||nn("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),l=w(s.nodes),n.p=6,l.s();case 7:if((f=l.n()).done){n.n=9;break}return d=f.value,n.n=8,i(d);case 8:n.n=7;break;case 9:n.n=11;break;case 10:n.p=10,y=n.v,l.e(y);case 11:return n.p=11,l.f(),n.f(11);case 12:if(s.pageInfo.hasNextPage){n.n=13;break}return n.a(2);case 13:a=null!=(c=s.pageInfo.endCursor)?c:void 0;case 14:n.n=0;break;case 15:return n.a(2)}},n,null,[[6,10,11,12]])}))).apply(this,arguments)}function xn(n,e,r){return Sn.apply(this,arguments)}function Sn(){return(Sn=v(k().m(function n(e,r,t){var o;return k().w(function(n){for(;;)switch(n.n){case 0:return o=[],n.n=1,bn("\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviewThreads(first: 100, after: $cursor) {\n nodes {\n id\n isResolved\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",e,r,t,function(n){n.isResolved||o.push(n.id)});case 1:return n.a(2,o)}},n)}))).apply(this,arguments)}function jn(n,e,r){return On.apply(this,arguments)}function On(){return(On=v(k().m(function n(e,r,t){var o;return k().w(function(n){for(;;)switch(n.n){case 0:return o=[],n.n=1,bn("\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviewThreads(first: 100, after: $cursor) {\n nodes {\n id\n isResolved\n isOutdated\n path\n line\n originalLine\n startLine\n originalStartLine\n comments(first: 100) {\n nodes {\n id\n url\n body\n createdAt\n diffHunk\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",e,r,t,v(k().m(function n(e){var r,t,i,a,u,c,s,l,f,d;return k().w(function(n){for(;;)switch(n.n){case 0:if(!e.isResolved){n.n=1;break}return n.a(2);case 1:t=e.comments.nodes.map(gn),i=e.comments.pageInfo,a=null!=(r=i.endCursor)?r:void 0;case 2:if(!i.hasNextPage){n.n=7;break}return n.n=3,wn("\n query($threadId: ID!, $cursor: String) {\n node(id: $threadId) {\n ... on PullRequestReviewThread {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n url\n body\n createdAt\n diffHunk\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",{threadId:e.id,cursor:a});case 3:if(f=u=n.v.data,l=null==f){n.n=4;break}l=null==(u=u.node);case 4:if(!l){n.n=5;break}d=void 0,n.n=6;break;case 5:d=u.comments;case 6:(s=d)||nn("Could not find comments in GraphQL response for thread ".concat(e.id,".")),t.push.apply(t,O(s.nodes.map(gn))),i=s.pageInfo,a=null!=(c=i.endCursor)?c:void 0,n.n=2;break;case 7:o.push({id:e.id,isResolved:e.isResolved,isOutdated:e.isOutdated,path:e.path,line:e.line,originalLine:e.originalLine,startLine:e.startLine,originalStartLine:e.originalStartLine,comments:t});case 8:return n.a(2)}},n)})));case 1:return n.a(2,o)}},n)}))).apply(this,arguments)}function Rn(n){return f(n,Y)}function An(n){return JSON.parse(JSON.stringify(n))}function In(n){return $n.apply(this,arguments)}function $n(){return($n=v(k().m(function n(e){var r,t,o,i,a,u,c,s,l,f;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return u=["pr","checks"],e&&u.push(e),u.push("--json","bucket,completedAt,description,event,link,name,startedAt,state,workflow"),c=[],n.p=1,n.n=2,fn(u,[8]);case 2:s=n.v,c=s.trim().length>0?JSON.parse(s):[],n.n=5;break;case 3:if(n.p=3,!((f=n.v)instanceof SyntaxError)){n.n=4;break}c=[],n.n=5;break;case 4:throw f;case 5:return l=c.reduce(function(n,e){var r,t,o=null!=(r=e.bucket)?r:"";return n[o]=(null!=(t=n[o])?t:0)+1,n},{}),n.a(2,{summary:{total:c.length,pass:null!=(r=l.pass)?r:0,fail:null!=(t=l.fail)?t:0,pending:null!=(o=l.pending)?o:0,skipping:null!=(i=l.skipping)?i:0,cancel:null!=(a=l.cancel)?a:0},checks:c})}},n,null,[[1,3]])}))).apply(this,arguments)}function Cn(n,e,r,t){return Pn.apply(this,arguments)}function Pn(){return(Pn=v(k().m(function n(e,r,t,o){var i,a,u,s,l,f,d,p;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===r&&(r=Hn),void 0===t&&(t=In),void 0===o&&(o=function(n){return c.write(n)}),i=0,n.n=1,t(e);case 1:a=n.v,u=function(){},n.p=2;case 3:if(s=qn(a),l=En(s),f=j(l,2),d=f[0],p=f[1],!(Object.keys(d).length>0||0===Object.keys(p).length)){n.n=4;break}return n.a(2,[a,i,!1]);case 4:if(!(i>=360)){n.n=5;break}return n.a(2,[a,i,!0]);case 5:return 1===(i+=1)&&(u=E(z,10,o)),n.n=6,r(10);case 6:return n.n=7,t(e);case 7:a=n.v;case 8:n.n=3;break;case 9:return n.p=9,u(),n.f(9);case 10:return n.a(2)}},n,null,[[2,,9,10]])}))).apply(this,arguments)}function qn(n){var e=n.checks.reduce(function(n,e){var r=e.workflow||e.name||"unknown_workflow";return null!=n[r]||(n[r]=[]),n[r].push(e),n},{});return Object.fromEntries(Object.entries(e).map(function(n){var e,r=j(n,2),t=r[0],o=function(n){var e=n.reduce(function(n,e){var r=function(n){var e=Nn(n);return e?"run:".concat(e):"unknown_run"}(e),t=n.get(r);return t?(t.push(e),n):(n.set(r,[e]),n)},new Map);return Array.from(e.values()).reduce(function(n,e){return 0===n.length||Gn(e)>Gn(n)?e:n},[])}(r[1]),i=o[0];i||nn("Error: no checks found for workflow ".concat(t));var a=null!=(e=o.reduce(function(n,e){return n?Dn(e)>Dn(n)?e:n:e},void 0))?e:i;return[t,{classification:Ln(o),check:a,checks:o}]}))}function En(n){for(var e={},r={},t=0,o=Object.entries(n);t<o.length;t++){var i=j(o[t],2),a=i[0],u=i[1];"failed"!==u.classification?"running"===u.classification&&u.checks.some(function(n){return Fn(n)})&&(r[a]=u):e[a]=u}return[e,r]}function Nn(n){var e,r=null==n?void 0:n.link;if(r)return null==(e=r.match(/\/actions\/runs\/(\d+)/))?void 0:e[1]}function Tn(n){return _n.apply(this,arguments)}function _n(){return(_n=v(k().m(function n(e){var r,t;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,void 0);case 1:return n.n=2,fn(["run","view",e,"--json",K.join(",")],[1]);case 2:if(0!==(r=n.v).trim().length){n.n=3;break}return n.a(2,void 0);case 3:return n.p=3,n.a(2,JSON.parse(r));case 4:if(n.p=4,!((t=n.v)instanceof SyntaxError)){n.n=5;break}return c.write("Warning: Could not parse JSON for workflow run ".concat(e,": ").concat(t.message,"\n")),n.a(2,void 0);case 5:throw t;case 6:return n.a(2)}},n,null,[[3,4]])}))).apply(this,arguments)}function Ln(n){var e=n.map(function(n){var e;return null!=(e=n.bucket)?e:""});return e.some(function(n){return!["pass","skipping","pending"].includes(n)})?"failed":e.includes("pending")?"running":"successful"}function Dn(n){var e,r=n.completedAt;return r&&"0001-01-01T00:00:00Z"!==r?r:null!=(e=n.startedAt)?e:""}function Gn(n){return n.reduce(function(n,e){var r=Dn(e);return r>n?r:n},"")}function Fn(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&Z.test(n)})}function Hn(n){return Mn.apply(this,arguments)}function Mn(){return(Mn=v(k().m(function n(e){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,s(1e3*e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function Un(n){return Wn.apply(this,arguments)}function Wn(){return(Wn=v(k().m(function n(e){var r,t,o,i,a,u,c,s;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:r=[],t=!1,o=!1,n.p=2,a=p(e);case 3:return n.n=4,a.next();case 4:if(!(t=!(u=n.v).done)){n.n=6;break}c=u.value,r.push(Buffer.from(c));case 5:t=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,s=n.v,o=!0,i=s;case 8:if(n.p=8,n.p=9,!t||null==a.return){n.n=10;break}return n.n=10,a.return();case 10:if(n.p=10,!o){n.n=11;break}throw i;case 11:return n.f(10);case 12:return n.f(8);case 13:return n.a(2,Buffer.concat(r).toString("utf8"))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function Jn(){return Bn.apply(this,arguments)}function Bn(){return(Bn=v(k().m(function n(){var e,r,t,o,i,a,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,on();case 1:for(e=n.v,r=ie(e),t={},o=0,i=Object.entries(r.replies);o<i.length;o++)a=j(i[o],2),u=a[0],"string"==typeof(c=a[1])&&c.length>0&&(t[u]=c);return n.a(2,t)}},n)}))).apply(this,arguments)}function Qn(n){return Yn.apply(this,arguments)}function Yn(){return(Yn=v(k().m(function n(e){var r,t,o,i,a;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,un(["git","branch","--show-current"]);case 1:return r=n.v.trim(),n.n=2,sn(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return t=n.v.trim(),r||nn("Error: could not determine current branch"),t||nn("Error: could not determine default branch"),r===t&&nn("Error: current branch is the default branch (".concat(t,")")),o=["pr","create","--base",t,"--head",r,"--fill"],e&&e.length>0&&o.push("--body-file","-"),X("Creating pull request..."),n.n=3,sn(o,e);case 3:return i=Rn,a=JSON,n.n=4,sn(["pr","view","--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author"]);case 4:return n.a(2,i(a.parse.call(a,n.v)))}},n)}))).apply(this,arguments)}function Zn(){return zn.apply(this,arguments)}function zn(){return(zn=v(k().m(function n(){var e,r,t,o,i,a,u;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,pn();case 1:return e=n.v,r=j(e,2),t=r[0],o=r[1],n.n=2,mn();case 2:return i=n.v,X("Fetching unresolved review threads..."),a=Rn,n.n=3,jn(t,o,i);case 3:return u=n.v,n.a(2,a({unresolved_threads:u}))}},n)}))).apply(this,arguments)}function Kn(n){return Vn.apply(this,arguments)}function Vn(){return(Vn=v(k().m(function n(e){var r,t,o,i,a,u,c,s,l,f,d,p,h,m,v,y,g,b,x,S;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,pn();case 1:return r=n.v,t=j(r,2),o=t[0],i=t[1],n.n=2,mn();case 2:return a=n.v,b=Set,n.n=3,xn(o,i,a);case 3:x=n.v,u=new b(x),X("Replying to ".concat(Object.keys(e).length," review threads...")),c=[],s=Object.entries(e),l=w(s.entries()),n.p=4,l.s();case 5:if((f=l.n()).done){n.n=9;break}if(p=j(f.value,2),h=p[0],m=j(p[1],2),v=m[0],y=m[1],X("Processing ".concat(h+1,"/").concat(s.length,": ").concat(v)),u.has(v)){n.n=6;break}return n.a(3,8);case 6:return n.n=7,wn("\n mutation($threadId: ID!, $body: String!) {\n addPullRequestReviewThreadReply(input: {pullRequestReviewThreadId: $threadId, body: $body}) {\n comment {\n id\n url\n }\n }\n resolveReviewThread(input: {threadId: $threadId}) {\n thread {\n id\n isResolved\n }\n }\n }\n ",{threadId:v,body:y});case 7:g=n.v,null!=(d=g.data)&&null!=(d=d.resolveReviewThread)&&null!=(d=d.thread)&&d.isResolved?c.push(v):X("Warning: failed to resolve thread ".concat(v,"."));case 8:n.n=5;break;case 9:n.n=11;break;case 10:n.p=10,S=n.v,l.e(S);case 11:return n.p=11,l.f(),n.f(11);case 12:return X("Done."),n.a(2,Rn({resolved_thread_ids:c}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function Xn(){return ne.apply(this,arguments)}function ne(){return(ne=v(k().m(function n(){var e,r,t,o,i,a,u,c,s,l,f,d;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,mn();case 1:return e=n.v,X("Fetching latest CI results..."),n.n=2,Cn(e);case 2:if(r=n.v,t=j(r,3),o=t[0],i=t[1],a=t[2],u=qn(o),c=En(u),s=j(c,2),l=s[0],f=s[1],d={summary:An(o.summary),waited_for_test_related_checks:i>0,test_related_check_wait_attempts:i,test_related_check_wait_timed_out:a},!(Object.keys(l).length>0)){n.n=4;break}return n.n=3,Promise.all(Object.entries(l).map(v(k().m(function n(e){var r,t,o,i,a,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:return r=j(e,2),t=r[0],o=r[1],n.n=1,ae(t,o);case 1:return i=n.v,a=b,u=b({},i),c=le,n.n=2,ce(o.check);case 2:return n.a(2,a(u,c(n.v)))}},n)}))));case 3:return d.failed_workflows=n.v,n.a(2,{output:Rn(d),exitCode:1});case 4:if(!(Object.keys(f).length>0)){n.n=6;break}return d.test_workflow_output="Timed out waiting for test-related workflows to finish.",n.n=5,Promise.all(Object.entries(f).map(function(n){var e=j(n,2);return ae(e[0],e[1])}));case 5:return d.running_test_related_workflows=n.v,n.a(2,{output:Rn(d),exitCode:1});case 6:return d.test_workflow_output="All workflows are successful.",n.a(2,{output:Rn(d),exitCode:0})}},n)}))).apply(this,arguments)}function ee(n){return re.apply(this,arguments)}function re(){return(re=v(k().m(function n(e){var r,t,o,i,a;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,pn();case 1:return r=n.v,t=j(r,2),o=t[0],i=t[1],n.n=2,ke(o,i,he(e));case 2:return a=n.v,X("Fetched issue #".concat(a.number," messages.")),n.a(2,Rn({issue:a}))}},n)}))).apply(this,arguments)}function te(n){return oe.apply(this,arguments)}function oe(){return(oe=v(k().m(function n(e){var r,t,o,i,a,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,pn();case 1:if(r=n.v,t=j(r,2),o=t[0],i=t[1],void 0!==e){n.n=3;break}return n.n=2,mn();case 2:c=n.v,n.n=4;break;case 3:c=me(e);case 4:return a=c,n.n=5,Se(o,i,a);case 5:return u=n.v,X("Fetched pull request #".concat(u.number," messages.")),n.a(2,Rn({pull_request:u}))}},n)}))).apply(this,arguments)}function ie(n){try{var e=JSON.parse(n);return function(n){if("object"!==R(n)||null===n||Array.isArray(n))return!1;var e=n.replies;if("object"!==R(e)||null===e||Array.isArray(e))return!1;return Object.values(e).every(function(n){return null==n||"string"==typeof n})}(e)||nn("".concat("Error: Invalid input format on stdin",": expected an object with a string-valued `replies` map"),2),e}catch(n){throw n instanceof SyntaxError&&nn("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}function ae(n,e){return ue.apply(this,arguments)}function ue(){return(ue=v(k().m(function n(e,r){var t,o,i,a;return k().w(function(n){for(;;)switch(n.n){case 0:return o=Nn(r.check),n.n=1,Tn(o);case 1:return i=n.v,a=we(i,pe(r.check.name)),n.a(2,{classification:r.classification,workflow:e,job:pe(r.check.name),job_url:pe(null==a?void 0:a.url),failed_step:ye(a),run_id:o,run_url:null!=(t=pe(null==i?void 0:i.url))?t:pe(r.check.link),branch:pe(null==i?void 0:i.headBranch),sha:pe(null==i?void 0:i.headSha),conclusion:pe(null==i?void 0:i.conclusion)})}},n)}))).apply(this,arguments)}function ce(n){return se.apply(this,arguments)}function se(){return(se=v(k().m(function n(e){var r;return k().w(function(n){for(;;)switch(n.n){case 0:if(r=Nn(e)){n.n=1;break}return n.a(2,"Failed latest result has no GitHub Actions run link.");case 1:return n.n=2,fn(["run","view",r,"--log-failed"],[1]);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function le(n){return{failed_log:fe(n)}}function fe(n){var e=de(l(n));if(!ge)return e;var r=be(["rtk","log"],e);return 0===r.exitCode&&r.output.trim().length>0?de(r.output):e}function de(n){return n.split("\n").map(function(n){return n.replace(V,"")}).join("\n").trim()}function pe(n){return"string"==typeof n&&n.length>0?n:void 0}function he(n){return ve(n,"issue")}function me(n){return ve(n,"pull request")}function ve(n,e){var r=String(n).trim();if(0===r.length&&nn("Error: ".concat(e," reference is required"),2),/^\d+$/.test(r))return r;var t="issue"===e?"issues":"pull",o=r.match(new RegExp("^https?://(?:www\\.)?github\\.com/[^/]+/[^/]+/".concat(t,"/(\\d+)(?:/|$)")));if(null!=o&&o[1])return o[1];nn("Error: expected a GitHub ".concat(e,' number or URL, received "').concat(r,'"'),2)}function we(n,e){var r,t;if(null!=n&&n.jobs&&0!==n.jobs.length)return null!=(r=null!=(t=n.jobs.find(function(n){return n.name===e}))?t:n.jobs.find(function(n){return"failure"===n.conclusion}))?r:n.jobs.find(function(n){return"completed"!==n.status})}function ye(n){var e,r,t;if(null!=n&&n.steps&&0!==n.steps.length)return null!=(e=null==(r=n.steps.find(function(n){return"failure"===n.conclusion}))?void 0:r.name)?e:null==(t=n.steps.find(function(n){return"completed"!==n.status}))?void 0:t.name}var ge=0===be(["rtk","--version"]).exitCode;function be(n,e){var r,o,i,a,u=t(null!=(r=n[0])?r:"",n.slice(1),{encoding:"utf8",input:e});return{exitCode:null!=(o=u.status)?o:u.error?1:0,output:"".concat(null!=(i=u.stdout)?i:"").concat(null!=(a=u.stderr)?a:"")}}function ke(n,e,r){return xe.apply(this,arguments)}function xe(){return(xe=v(k().m(function n(e,r,t){var o,i;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,qe({query:"\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n issue(number: $number) {\n number\n title\n url\n body\n author { login }\n }\n }\n }\n",owner:e,name:r,number:t,noun:"issue",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.issue}});case 1:return o=n.v,n.n=2,Ce({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n issue(number: $number) {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n body\n createdAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:r,number:t,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.issue)?void 0:e.comments},mapNode:Ne});case 2:return i=n.v,n.a(2,b(b({},o),{},{messages:i}))}},n)}))).apply(this,arguments)}function Se(n,e,r){return je.apply(this,arguments)}function je(){return(je=v(k().m(function n(e,r,t){var o,i,a,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,qe({query:"\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n number\n title\n url\n body\n author { login }\n }\n }\n }\n",owner:e,name:r,number:t,noun:"pull request",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.pullRequest}});case 1:return o=n.v,n.n=2,Promise.all([Re(e,r,t),Ie(e,r,t)]);case 2:return i=n.v,a=j(i,2),u=a[0],c=a[1],n.a(2,b(b({},o),{},{messages:[].concat(O(u),O(c)).sort(Oe)}))}},n)}))).apply(this,arguments)}function Oe(n,e){var r="string"==typeof n.createdAt?n.createdAt:"",t="string"==typeof e.createdAt?e.createdAt:"";return r.localeCompare(t)}function Re(n,e,r){return Ae.apply(this,arguments)}function Ae(){return(Ae=v(k().m(function n(e,r,t){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ce({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n body\n createdAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:r,number:t,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.comments},mapNode:Ne});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Ie(n,e,r){return $e.apply(this,arguments)}function $e(){return($e=v(k().m(function n(e,r,t){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ce({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviews(first: 100, after: $cursor) {\n nodes {\n id\n body\n state\n submittedAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:r,number:t,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.reviews},mapNode:Te});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Ce(n){return Pe.apply(this,arguments)}function Pe(){return(Pe=v(k().m(function n(e){var r,t,o,i,a;return k().w(function(n){for(;;)switch(n.n){case 0:t=[];case 1:return a=e,n.n=2,wn(e.query,{owner:e.owner,name:e.name,number:Number(e.number),cursor:r});case 2:if(i=a.selectConnection.call(a,n.v)){n.n=3;break}return n.a(2,t);case 3:if(t.push.apply(t,O(i.nodes.map(e.mapNode).filter(_e))),i.pageInfo.hasNextPage){n.n=4;break}return n.a(2,t);case 4:r=null!=(o=i.pageInfo.endCursor)?o:void 0;case 5:n.n=1;break;case 6:return n.a(2)}},n)}))).apply(this,arguments)}function qe(n){return Ee.apply(this,arguments)}function Ee(){return(Ee=v(k().m(function n(e){var r,t,o,i,a;return k().w(function(n){for(;;)switch(n.n){case 0:return a=e,n.n=1,wn(e.query,{owner:e.owner,name:e.name,number:Number(e.number)});case 1:return(i=a.selectMetadata.call(a,n.v))||nn("Could not find ".concat(e.noun," #").concat(e.number," in ").concat(e.owner,"/").concat(e.name,".")),n.a(2,{number:i.number,title:i.title,url:i.url,author:null!=(r=null==(t=i.author)?void 0:t.login)?r:void 0,body:null!=(o=i.body)?o:""})}},n)}))).apply(this,arguments)}function Ne(n){var e,r;return{type:"comment",author:null!=(e=null==(r=n.author)?void 0:r.login)?e:void 0,createdAt:n.createdAt,url:n.url,body:n.body}}function Te(n){var e,r,t,o,i;return{type:"review",author:null!=(e=null==(r=n.author)?void 0:r.login)?e:void 0,state:null!=(t=n.state)?t:void 0,createdAt:null!=(o=n.submittedAt)?o:void 0,url:n.url,body:null!=(i=n.body)?i:""}}function _e(n){return"string"==typeof n.body&&n.body.length>0}function Le(n){return De.apply(this,arguments)}function De(){return(De=v(k().m(function n(e){var r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ee(e);case 1:return r=n.v,n.a(2,"\nPlan a GitHub issue by gathering context, writing a code-focused plan, and posting that plan back to the issue.\nThe target issue number is #".concat(e,".\nHere is the fetched issue context as YAML:\n```yaml\n").concat(r.trim(),"\n```\n\nFollow this workflow:\n1. Read the fetched issue body and timeline messages carefully.\n2. Collect enough supporting information before planning:\n - Read the issue carefully and identify the exact requested behavior, constraints, and open questions.\n - Inspect the relevant code, surrounding call sites, related types, tests, configuration, recent diffs, and any other local context needed to understand the change.\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the issue depends on runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - If the issue depends on framework, library, platform, or language behavior, confirm it against the latest official documentation or another primary source instead of relying on memory.\n3. Propose a code-focused implementation plan grounded in the issue, fetched messages, and the evidence you collected. Describe what code should be written, where it should live, and how it should work. Prefer concrete guidance such as:\n - Which files, modules, classes, functions, types, tests, or configuration should be added or changed.\n - How the new or changed logic should flow through the system.\n - What interfaces, data shapes, condition branches, or side effects need to change.\n - Which edge cases, risks, and validation steps matter for the code change.\n - Any missing information or assumptions that affect the design.\n4. Post the plan back to issue #").concat(e," from the repository root then print the issue URL.\n\nFormat the issue comment exactly like this (without triple backticks):\n```\n## Code Plan\n\n### Files / Modules to Change\n\n- File or module and why it needs to change\n\n### Code to Write\n\n- Function, type, class, or branch to add or modify\n- How the logic should work\n\n### Validation\n\n- Test or check to confirm the behavior\n\n## Risks / Open Questions\n\n- Risk or uncertainty\n```\n").trim())}},n)}))).apply(this,arguments)}function Ge(){return Fe.apply(this,arguments)}function Fe(){return(Fe=v(k().m(function n(){var e,r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ue();case 1:if(null==(e=n.v)){n.n=2;break}r=e,n.n=4;break;case 2:return n.n=3,He();case 3:r=n.v;case 4:return n.a(2,r)}},n)}))).apply(this,arguments)}function He(){return Me.apply(this,arguments)}function Me(){return(Me=v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return e=Je,n.n=1,$(["gh","repo","view","--json","defaultBranchRef","--template","{{.defaultBranchRef.name}}"]);case 1:return n.a(2,e(n.v.trim(),"Error: could not determine the default branch"))}},n)}))).apply(this,arguments)}function Ue(){return We.apply(this,arguments)}function We(){return(We=v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,$(["gh","pr","view","--json","baseRefName","--template","{{.baseRefName}}"]);case 1:return e=n.v.trim(),n.a(2,e.length>0?e:void 0);case 2:return n.p=2,n.v,n.a(2,void 0)}},n,null,[[0,2]])}))).apply(this,arguments)}function Je(n,e){if(n.length>0)return n;throw new Error(e)}function Be(){return Qe.apply(this,arguments)}function Qe(){return(Qe=v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ge();case 1:return e=n.v,n.a(2,"\nReview the current branch against its base branch ".concat(e,' via `git diff "$(git merge-base ').concat(e,' HEAD)"`.\nFor each review comment, do the following before moving to the next comment:\n1. Collect the information you need:\n - Read the comment carefully and identify the exact claim being made.\n - Inspect the referenced code and the surrounding call sites, related types, tests, configuration, and recent diffs when they affect the claim.\n2. Gather supporting evidence:\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the claim is about runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - If the claim depends on framework, library, platform, or language behavior, confirm it against the latest official documentation or another primary source instead of relying on memory.\n3. Judge whether the comment is valid:\n - Mark it valid only when the available evidence shows the reported issue is still real in the current codebase.\n - Otherwise, mark it not valid.\nReport only the comments you judged valid, and include a short basis for each one that cites the evidence you used, such as the failing scenario, experiment result, or relevant official documentation. Do not modify code.\nIf there are no valid review comments, respond with exactly: `').concat(_,"`\n").trim())}},n)}))).apply(this,arguments)}function Ye(){return Ze.apply(this,arguments)}function Ze(){return(Ze=v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ge();case 1:return e=n.v,n.a(2,'\nSimplify the current branch against its base branch using `git diff "$(git merge-base '.concat(e," HEAD)\"`.\nFirst, inspect the diff and review the surrounding code for each changed area. This includes nearby functions, types, call sites, tests, configurations, and any other files that help determine if the change is truly necessary.\nLeverage this context to identify redundancies that can be safely removed or simplified. Look for duplicate logic, repeated conditionals, unnecessary abstractions, overlapping code paths, dead code, or edits made obsolete upon understanding the broader context.\n\nPrioritize simplifications that reduce the reviewer's burden, such as:\n- Removing redundant edits or dead code.\n- Eliminating or merging duplicated logic discovered by comparing the diff with related code.\n- Flattening unnecessarily complex logic introduced in the diff (e.g., using early returns to reduce nesting, simplifying boolean expressions, or removing redundant wrapper functions).\n\nCommit and push your changes. Afterward, summarize the redundancies or unnecessary complexity you have removed.\n").trim())}},n)}))).apply(this,arguments)}var ze=new n;function Ke(n){var r=ze.command(n.name).description(n.description).allowExcessArguments(!1);n.argumentName&&r.argument(n.argumentName,n.argumentDescription),r.addOption(new e("--agent <agent>",n.optionDescription).choices(n.choices).makeOptionMandatory()).action(v(k().m(function e(){var r,t,o,i,a,u,c,s,l,f=arguments;return k().w(function(e){for(;;)switch(e.n){case 0:for(r=f.length,t=new Array(r),o=0;o<r;o++)t[o]=f[o];return i=j(t,2),a=i[0],u=i[1],c="string"==typeof a?a:"",s="string"==typeof a?u:a,l=process.stdout,e.n=1,n.run(s.agent,c);case 1:l.write.call(l,e.v);case 2:return e.a(2)}},e)})))}function Ve(n,e,r){var t=ze.command(n).description(e).allowExcessArguments(!1);"function"!=typeof r?t.argument(r.argumentName,r.argumentDescription).action(v(k().m(function n(e){var t;return k().w(function(n){for(;;)switch(n.n){case 0:return t=process.stdout,n.n=1,r.run(e);case 1:t.write.call(t,n.v);case 2:return n.a(2)}},n)}))):t.action(v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return e=process.stdout,n.n=1,r();case 1:e.write.call(e,n.v);case 2:return n.a(2)}},n)})))}ze.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),Ke({name:"review",description:"Run review against the current branch with the selected agent",optionDescription:"Use a review agent",choices:["all","codex","claude","gemini"],run:function(n){return"all"===n?G(Be(),{allAgentsLabel:"review agents",mapOutput:function(n,e){if(!function(n){return D.test(n)}(e))return"## ".concat(W(n),"\n\n").concat(e)}}):H(n,Be())}}),Ve("review-codex","Run Codex review against the current branch",function(){return H("codex",Be())}),Ve("review-claude","Run Claude Code review against the current branch",function(){return H("claude",Be())}),Ve("review-gemini","Run Gemini CLI review against the current branch",function(){return H("gemini",Be())}),Ke({name:"plan",description:"Run planning against the specified issue with the selected agent",optionDescription:"Use a planning agent",choices:["all","codex","claude","gemini"],argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n,e){return"all"===n?G(Le(he(e)),{allAgentsLabel:"planning agents"}):H(n,Le(he(e)))}}),Ve("plan-codex","Run Codex planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return H("codex",Le(he(n)))}}),Ve("plan-claude","Run Claude Code planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return H("claude",Le(he(n)))}}),Ve("plan-gemini","Run Gemini CLI planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return H("gemini",Le(he(n)))}}),Ke({name:"simplify",description:"Run PR simplification against the current branch with the selected agent",optionDescription:"Use a simplify agent",choices:["codex","claude","gemini"],run:function(n){return H(n,Ye())}}),Ve("simplify-codex","Run Codex PR simplification against the current branch",function(){return H("codex",Ye())}),Ve("simplify-claude","Run Claude Code PR simplification against the current branch",function(){return H("claude",Ye())}),Ve("simplify-gemini","Run Gemini CLI PR simplification against the current branch",function(){return H("gemini",Ye())}),ze.command("open-pr").description("Create a pull request for the current branch").allowExcessArguments(!1).action(v(k().m(function n(){var e,r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,rn();case 1:return e=n.v,n.n=2,Qn(e||void 0);case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),ze.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action(v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Xn();case 1:e=n.v,process.stdout.write(e.output),process.exit(e.exitCode);case 2:return n.a(2)}},n)}))),ze.command("fetch-issue").description("Fetch an issue body and timeline messages as YAML").argument("<issue>","GitHub issue number or URL").allowExcessArguments(!1).action(v(k().m(function n(e){var r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ee(e);case 1:r=n.v,process.stdout.write(r);case 2:return n.a(2)}},n)}))),ze.command("fetch-pr").description("Fetch a pull request body and timeline messages as YAML, excluding inline comments").argument("[pr]","GitHub pull request number or URL; defaults to the current branch pull request").allowExcessArguments(!1).action(v(k().m(function n(e){var r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,te(e);case 1:r=n.v,process.stdout.write(r);case 2:return n.a(2)}},n)}))),ze.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action(v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Zn();case 1:e=n.v,process.stdout.write(e);case 2:return n.a(2)}},n)}))),ze.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action(v(k().m(function n(){var e,r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Jn();case 1:return e=n.v,n.n=2,Kn(e);case 2:r=n.v,process.stdout.write(r);case 3:return n.a(2)}},n)}))),await ze.parseAsync(process.argv);
|
|
5
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcHJvY2Vzcy9ydW5Db21tYW5kLnRzIiwiLi4vc3JjL3Jldmlldy9ub0NvbmNlcm4udHMiLCIuLi9zcmMvYWdlbnQvYWdlbnRDb21tYW5kcy50cyIsIi4uL3NyYy95YW1sLnRzIiwiLi4vc3JjL3ByL3ByQ29tbWFuZHMudHMiLCIuLi9zcmMvcHJvbXB0cy9wbGFuUHJvbXB0LnRzIiwiLi4vc3JjL3JlcG8vZGVmYXVsdEJyYW5jaC50cyIsIi4uL3NyYy9wcm9tcHRzL3Jldmlld1Byb21wdC50cyIsIi4uL3NyYy9wcm9tcHRzL3NpbXBsaWZ5UHJvbXB0LnRzIiwiLi4vc3JjL2NsaS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGF3biB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBjcmVhdGVXcml0ZVN0cmVhbSB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgbWtkaXIgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGRpcm5hbWUgfSBmcm9tICdub2RlOnBhdGgnO1xuXG50eXBlIFJ1bkNvbW1hbmRPcHRpb25zID0ge1xuICBsb2dGaWxlUGF0aD86IHN0cmluZztcbiAgd2FpdE1lc3NhZ2U/OiBzdHJpbmcgfCBmYWxzZTtcbiAgd2FpdEludGVydmFsU2Vjb25kcz86IG51bWJlcjtcbn07XG5cbnR5cGUgUHJvZ3Jlc3NXcml0ZXIgPSAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkO1xuXG5jb25zdCBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyA9IDEwO1xuZXhwb3J0IGNvbnN0IFdBSVRfVVBfVE9fT05FX0hPVVJfV0FSTklORyA9ICdQTEVBU0UgV0FJVCBGT1IgVVAgVE8gMSBIT1VSLic7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Db21tYW5kV2l0aFByb2dyZXNzKGNvbW1hbmQ6IHN0cmluZ1tdLCBvcHRpb25zOiBSdW5Db21tYW5kT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmRbMF0gPz8gJycsIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsICdwaXBlJ10sXG4gIH0pO1xuICBjb25zdCBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKG9wdGlvbnMud2FpdE1lc3NhZ2UsIG9wdGlvbnMud2FpdEludGVydmFsU2Vjb25kcyk7XG4gIGNvbnN0IGNvbW1hbmRMb2dnZXIgPSBhd2FpdCBjcmVhdGVDb21tYW5kTG9nZ2VyKG9wdGlvbnMubG9nRmlsZVBhdGgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQsIChjaHVuaykgPT4gY29tbWFuZExvZ2dlci53cml0ZShjaHVuaykpLFxuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyLCAoY2h1bmspID0+IGNvbW1hbmRMb2dnZXIud3JpdGUoY2h1bmspKSxcbiAgICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgfSksXG4gICAgXSk7XG5cbiAgICBpZiAoZXhpdENvZGUgPT09IDApIHtcbiAgICAgIHJldHVybiBzdGRvdXQ7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gYCR7c3Rkb3V0fSR7c3RkZXJyfWA7XG4gICAgdGhyb3cgbmV3IEVycm9yKG91dHB1dCB8fCBgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgY29tbWFuZExvZ2dlci5jbG9zZSgpO1xuICAgIHN0b3BXYWl0UHJvZ3Jlc3MoKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzdHJlYW1Ub1RleHQoXG4gIHN0cmVhbTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgb25DaHVuaz86IChjaHVuazogc3RyaW5nKSA9PiB2b2lkXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoIXN0cmVhbSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICBjb25zdCBjaHVua1RleHQgPSB0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnID8gY2h1bmsgOiBjaHVuay50b1N0cmluZygndXRmOCcpO1xuICAgIGNodW5rcy5wdXNoKGNodW5rVGV4dCk7XG4gICAgb25DaHVuaz8uKGNodW5rVGV4dCk7XG4gIH1cbiAgcmV0dXJuIGNodW5rcy5qb2luKCcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdhaXRQcm9ncmVzcyhcbiAgd2FpdE1lc3NhZ2U6IHN0cmluZyB8IGZhbHNlIHwgdW5kZWZpbmVkLFxuICB3YWl0SW50ZXJ2YWxTZWNvbmRzID0gREVGQVVMVF9XQUlUX0lOVEVSVkFMX1NFQ09ORFMsXG4gIHdyaXRlUHJvZ3Jlc3M6IFByb2dyZXNzV3JpdGVyID0gKG1lc3NhZ2UpID0+IHByb2Nlc3Muc3RkZXJyLndyaXRlKG1lc3NhZ2UpXG4pOiAoKSA9PiB2b2lkIHtcbiAgaWYgKCF3YWl0TWVzc2FnZSkge1xuICAgIHJldHVybiAoKSA9PiB7fTtcbiAgfVxuXG4gIGNvbnN0IHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIHdyaXRlUHJvZ3Jlc3MoJy4nKTtcbiAgfSwgd2FpdEludGVydmFsU2Vjb25kcyAqIDEwMDApO1xuXG4gIHdyaXRlUHJvZ3Jlc3MoYCR7d2FpdE1lc3NhZ2V9IE9uZSBkb3QgcmVwcmVzZW50cyAke3dhaXRJbnRlcnZhbFNlY29uZHN9IHNlY29uZHM6IGApO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gICAgd3JpdGVQcm9ncmVzcygnXFxuJyk7XG4gIH07XG59XG5cbnR5cGUgQ29tbWFuZExvZ2dlciA9IHtcbiAgd3JpdGU6IChjaHVuazogc3RyaW5nKSA9PiB2b2lkO1xuICBjbG9zZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNvbW1hbmRMb2dnZXIobG9nRmlsZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8Q29tbWFuZExvZ2dlcj4ge1xuICBpZiAoIWxvZ0ZpbGVQYXRoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoKSA9PiB7fSxcbiAgICAgIGNsb3NlOiBhc3luYyAoKSA9PiB7fSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgd2FybiA9IChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBXYXJuaW5nOiBGYWlsZWQgdG8gd3JpdGUgY29tbWFuZCBsb2cgdG8gJHtsb2dGaWxlUGF0aH06ICR7U3RyaW5nKGVycm9yKX1cXG5gKTtcbiAgfTtcblxuICB0cnkge1xuICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUobG9nRmlsZVBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBjb25zdCBzdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbShsb2dGaWxlUGF0aCwgeyBmbGFnczogJ3cnIH0pO1xuXG4gICAgc3RyZWFtLm9uKCdlcnJvcicsIHdhcm4pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoY2h1bmspID0+IHtcbiAgICAgICAgaWYgKHN0cmVhbS53cml0YWJsZSkge1xuICAgICAgICAgIHN0cmVhbS53cml0ZShjaHVuayk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjbG9zZTogYXN5bmMgKCkgPT5cbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBzdHJlYW0uZW5kKCgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgIH0pLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgd2FybihlcnJvcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoKSA9PiB7fSxcbiAgICAgIGNsb3NlOiBhc3luYyAoKSA9PiB7fSxcbiAgICB9O1xuICB9XG59XG4iLCJleHBvcnQgY29uc3QgTk9fQ09OQ0VSTl9QSFJBU0UgPSAndGhlcmUgaXMgbm8gY29uY2Vybic7XG5leHBvcnQgY29uc3QgTk9fQ09OQ0VSTl9NRVNTQUdFID0gJ1RoZXJlIGlzIG5vIGNvbmNlcm4uJztcbiIsImltcG9ydCB7IGNyZWF0ZVdhaXRQcm9ncmVzcywgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcywgV0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcbmltcG9ydCB7IE5PX0NPTkNFUk5fTUVTU0FHRSwgTk9fQ09OQ0VSTl9QSFJBU0UgfSBmcm9tICcuLi9yZXZpZXcvbm9Db25jZXJuLmpzJztcblxuZXhwb3J0IGNvbnN0IEFHRU5UX05BTUVTID0gWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10gYXMgY29uc3Q7XG5jb25zdCBDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYID0gbmV3IFJlZ0V4cChgXFxcXGIke05PX0NPTkNFUk5fUEhSQVNFfVxcXFxiYCwgJ2knKTtcbmV4cG9ydCB0eXBlIEFnZW50TmFtZSA9ICh0eXBlb2YgQUdFTlRfTkFNRVMpW251bWJlcl07XG5cbnR5cGUgQWdlbnRDb21tYW5kT3B0aW9ucyA9IHtcbiAgd2FpdE1lc3NhZ2U/OiBzdHJpbmcgfCBmYWxzZTtcbn07XG5cbnR5cGUgQWxsQWdlbnRDb21tYW5kT3B0aW9ucyA9IHtcbiAgYWxsQWdlbnRzTGFiZWw6IHN0cmluZztcbiAgbWFwT3V0cHV0PzogKGFnZW50OiBBZ2VudE5hbWUsIG91dHB1dDogc3RyaW5nKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQWxsQWdlbnRDb21tYW5kcyhcbiAgcHJvbXB0OiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4sXG4gIG9wdGlvbnM6IEFsbEFnZW50Q29tbWFuZE9wdGlvbnMgPSB7IGFsbEFnZW50c0xhYmVsOiAnYWdlbnRzJyB9XG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZXNvbHZlZFByb21wdCA9IGF3YWl0IHByb21wdDtcbiAgY29uc3Qgc3RvcFdhaXRQcm9ncmVzcyA9IGNyZWF0ZVdhaXRQcm9ncmVzcyh3YWl0TWVzc2FnZUZvcihvcHRpb25zLmFsbEFnZW50c0xhYmVsKSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBvdXRwdXRzID0gKFxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIEFHRU5UX05BTUVTLm1hcChhc3luYyAoYWdlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSAoXG4gICAgICAgICAgICBhd2FpdCBydW5BZ2VudENvbW1hbmQoYWdlbnQsIHJlc29sdmVkUHJvbXB0LCB7XG4gICAgICAgICAgICAgIHdhaXRNZXNzYWdlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKS50cmltKCk7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbnMubWFwT3V0cHV0Py4oYWdlbnQsIG91dHB1dCkgPz8gYCMjICR7ZGlzcGxheUFnZW50TmFtZShhZ2VudCl9XFxuXFxuJHtvdXRwdXR9YDtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApLmZpbHRlcigob3V0cHV0KTogb3V0cHV0IGlzIHN0cmluZyA9PiBvdXRwdXQgIT09IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIG91dHB1dHMubGVuZ3RoID4gMCA/IG91dHB1dHMuam9pbignXFxuXFxuJykgOiBOT19DT05DRVJOX01FU1NBR0U7XG4gIH0gZmluYWxseSB7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5BZ2VudENvbW1hbmQoXG4gIGFnZW50OiBBZ2VudE5hbWUsXG4gIHByb21wdDogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+LFxuICBvcHRpb25zOiBBZ2VudENvbW1hbmRPcHRpb25zID0ge31cbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBydW5Db21tYW5kV2l0aFByb2dyZXNzKGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudCwgYXdhaXQgcHJvbXB0KSwge1xuICAgIGxvZ0ZpbGVQYXRoOiBhZ2VudExvZ0ZpbGVQYXRoKGFnZW50KSxcbiAgICB3YWl0TWVzc2FnZTogb3B0aW9ucy53YWl0TWVzc2FnZSA9PT0gdW5kZWZpbmVkID8gd2FpdE1lc3NhZ2VGb3IoZGlzcGxheUFnZW50TmFtZShhZ2VudCkpIDogb3B0aW9ucy53YWl0TWVzc2FnZSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudDogQWdlbnROYW1lLCBwcm9tcHQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgc3dpdGNoIChhZ2VudCkge1xuICAgIGNhc2UgJ2NvZGV4JzpcbiAgICAgIHJldHVybiBbJ25weCcsICctLXllcycsICdAb3BlbmFpL2NvZGV4QGxhdGVzdCcsICdleGVjJywgJy0tZGFuZ2Vyb3VzbHktYnlwYXNzLWFwcHJvdmFscy1hbmQtc2FuZGJveCcsIHByb21wdF07XG4gICAgY2FzZSAnY2xhdWRlJzpcbiAgICAgIHJldHVybiBbJ2NsYXVkZScsICctLWRhbmdlcm91c2x5LXNraXAtcGVybWlzc2lvbnMnLCAnLXAnLCBwcm9tcHRdO1xuICAgIGNhc2UgJ2dlbWluaSc6XG4gICAgICByZXR1cm4gW1xuICAgICAgICAnbnB4JyxcbiAgICAgICAgJy0teWVzJyxcbiAgICAgICAgJ0Bnb29nbGUvZ2VtaW5pLWNsaUBwcmV2aWV3JyxcbiAgICAgICAgJy0tYXBwcm92YWwtbW9kZScsXG4gICAgICAgICd5b2xvJyxcbiAgICAgICAgJy0tbW9kZWwnLFxuICAgICAgICAnZ2VtaW5pLTMuMS1wcm8tcHJldmlldycsXG4gICAgICAgICctcCcsXG4gICAgICAgIHByb21wdCxcbiAgICAgIF07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BsYXlBZ2VudE5hbWUoYWdlbnQ6IEFnZW50TmFtZSk6IHN0cmluZyB7XG4gIHN3aXRjaCAoYWdlbnQpIHtcbiAgICBjYXNlICdjb2RleCc6XG4gICAgICByZXR1cm4gJ0NvZGV4JztcbiAgICBjYXNlICdjbGF1ZGUnOlxuICAgICAgcmV0dXJuICdDbGF1ZGUgQ29kZSc7XG4gICAgY2FzZSAnZ2VtaW5pJzpcbiAgICAgIHJldHVybiAnR2VtaW5pIENMSSc7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2Uob3V0cHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIENPTlRBSU5TX05PX0NPTkNFUk5fU0VOVEVOQ0VfUkVHRVgudGVzdChvdXRwdXQpO1xufVxuXG5mdW5jdGlvbiB3YWl0TWVzc2FnZUZvcih0YXJnZXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgV2FpdGluZyBmb3IgJHt0YXJnZXR9IHRvIGZpbmlzaC4gJHtXQUlUX1VQX1RPX09ORV9IT1VSX1dBUk5JTkd9YDtcbn1cblxuZnVuY3Rpb24gYWdlbnRMb2dGaWxlUGF0aChhZ2VudDogQWdlbnROYW1lKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBsb2dzLyR7YWdlbnR9LSR7dGltZXN0YW1wRm9yTG9nRmlsZSgpfS5sb2dgO1xufVxuXG5mdW5jdGlvbiB0aW1lc3RhbXBGb3JMb2dGaWxlKCk6IHN0cmluZyB7XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IFttb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZF0gPSBbXG4gICAgbm93LmdldE1vbnRoKCkgKyAxLFxuICAgIG5vdy5nZXREYXRlKCksXG4gICAgbm93LmdldEhvdXJzKCksXG4gICAgbm93LmdldE1pbnV0ZXMoKSxcbiAgICBub3cuZ2V0U2Vjb25kcygpLFxuICBdLm1hcCh0d29EaWdpdHMpO1xuICByZXR1cm4gYCR7bW9udGh9JHtkYXl9LSR7aG91cn0ke21pbnV0ZX0ke3NlY29uZH1gO1xufVxuXG5mdW5jdGlvbiB0d29EaWdpdHModmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG59XG4iLCIvKipcbiAqIGBibG9ja1F1b3RlOiAnbGl0ZXJhbCdgOiBVc2VzIGEgcGlwZSAoYHByb3A6IHxgKSB0byByZXByZXNlbnQgbXVsdGlsaW5lIHN0cmluZ3MuXG4gKiBgbGluZVdpZHRoOiAwYDogRGlzYWJsZXMgbGluZSB3cmFwcGluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IHlhbWxTdHJpbmdpZnlPcHRpb25zID0geyBibG9ja1F1b3RlOiAnbGl0ZXJhbCcsIGxpbmVXaWR0aDogMCB9IGFzIGNvbnN0O1xuIiwiaW1wb3J0IHsgc3Bhd24sIHNwYXduU3luYyB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBzdGRlcnIgYXMgcHJvY2Vzc1N0ZGVyciwgc3RkaW4gYXMgcHJvY2Vzc1N0ZGluIH0gZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7IHNldFRpbWVvdXQgYXMgc2xlZXAgfSBmcm9tICdub2RlOnRpbWVycy9wcm9taXNlcyc7XG5pbXBvcnQgeyBzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHsgc3RyaW5naWZ5IGFzIHN0cmluZ2lmeVlhbWwgfSBmcm9tICd5YW1sJztcbmltcG9ydCB7IGNyZWF0ZVdhaXRQcm9ncmVzcywgV0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcbmltcG9ydCB7IHlhbWxTdHJpbmdpZnlPcHRpb25zIH0gZnJvbSAnLi4veWFtbC5qcyc7XG5cbmV4cG9ydCBjb25zdCBURVNUX1JFTEFURURfUEFUVEVSTiA9IC9cXGJ0ZXN0XFxiL2k7XG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMgPSAxMDtcbmV4cG9ydCBjb25zdCBURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTID0gMzYwO1xuY29uc3QgVEVTVF9DSEVDS19XQUlUX01FU1NBR0UgPSBgV2FpdGluZyBmb3IgdGVzdC1yZWxhdGVkIHdvcmtmbG93cyB0byBmaW5pc2guICR7V0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HfWA7XG5leHBvcnQgY29uc3QgWkVST19USU1FU1RBTVAgPSAnMDAwMS0wMS0wMVQwMDowMDowMFonO1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX1JVTl9KU09OX0ZJRUxEUyA9IFtcbiAgJ2F0dGVtcHQnLFxuICAnY29uY2x1c2lvbicsXG4gICdjcmVhdGVkQXQnLFxuICAnZGF0YWJhc2VJZCcsXG4gICdkaXNwbGF5VGl0bGUnLFxuICAnZXZlbnQnLFxuICAnaGVhZEJyYW5jaCcsXG4gICdoZWFkU2hhJyxcbiAgJ2pvYnMnLFxuICAnbmFtZScsXG4gICdudW1iZXInLFxuICAnc3RhcnRlZEF0JyxcbiAgJ3N0YXR1cycsXG4gICd1cGRhdGVkQXQnLFxuICAndXJsJyxcbiAgJ3dvcmtmbG93TmFtZScsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBKc29uT2JqZWN0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmV4cG9ydCB0eXBlIENoZWNrID0ge1xuICBidWNrZXQ/OiBzdHJpbmc7XG4gIGNvbXBsZXRlZEF0Pzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZXZlbnQ/OiBzdHJpbmc7XG4gIGxpbms/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHN0YXJ0ZWRBdD86IHN0cmluZztcbiAgc3RhdGU/OiBzdHJpbmc7XG4gIHdvcmtmbG93Pzogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgQ2lSZXN1bHRzID0ge1xuICBzdW1tYXJ5OiB7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBwYXNzOiBudW1iZXI7XG4gICAgZmFpbDogbnVtYmVyO1xuICAgIHBlbmRpbmc6IG51bWJlcjtcbiAgICBza2lwcGluZzogbnVtYmVyO1xuICAgIGNhbmNlbDogbnVtYmVyO1xuICB9O1xuICBjaGVja3M6IENoZWNrW107XG59O1xuXG5leHBvcnQgdHlwZSBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uID0gJ2ZhaWxlZCcgfCAncnVubmluZycgfCAnc3VjY2Vzc2Z1bCc7XG5cbmV4cG9ydCB0eXBlIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdCA9IHtcbiAgY2xhc3NpZmljYXRpb246IFdvcmtmbG93Q2xhc3NpZmljYXRpb247XG4gIGNoZWNrOiBDaGVjaztcbiAgY2hlY2tzOiBDaGVja1tdO1xufTtcblxudHlwZSBDb21wYWN0V29ya2Zsb3dSdW4gPSB7XG4gIGJyYW5jaD86IHN0cmluZztcbiAgY29uY2x1c2lvbj86IHN0cmluZztcbiAgZmFpbGVkX3N0ZXA/OiBzdHJpbmc7XG4gIGpvYj86IHN0cmluZztcbiAgam9iX3VybD86IHN0cmluZztcbiAgcnVuX2lkPzogc3RyaW5nO1xuICBydW5fdXJsPzogc3RyaW5nO1xuICBzaGE/OiBzdHJpbmc7XG4gIHdvcmtmbG93Pzogc3RyaW5nO1xufTtcblxudHlwZSBXb3JrZmxvd1J1blN0ZXAgPSB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG51bWJlcj86IG51bWJlcjtcbiAgc3RhdHVzPzogc3RyaW5nO1xufTtcblxudHlwZSBXb3JrZmxvd1J1bkpvYiA9IHtcbiAgY29uY2x1c2lvbj86IHN0cmluZztcbiAgZGF0YWJhc2VJZD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgc3RhdHVzPzogc3RyaW5nO1xuICBzdGVwcz86IFdvcmtmbG93UnVuU3RlcFtdO1xuICB1cmw/OiBzdHJpbmc7XG59O1xuXG50eXBlIFdvcmtmbG93UnVuRGV0YWlscyA9IEpzb25PYmplY3QgJiB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIGhlYWRCcmFuY2g/OiBzdHJpbmc7XG4gIGhlYWRTaGE/OiBzdHJpbmc7XG4gIGpvYnM/OiBXb3JrZmxvd1J1bkpvYltdO1xuICB1cmw/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBGQUlMRURfTE9HX0xJTkVfUFJFRklYX1BBVFRFUk4gPSAvXi4qP1xcdFVOS05PV04gU1RFUFxcdFxcZHs0fS1cXGR7Mn0tXFxkezJ9VFteWl0rWlxccyovO1xuXG50eXBlIFJldmlld0NvbW1lbnROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgZGlmZkh1bms/OiBzdHJpbmcgfCBudWxsO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgUmV2aWV3VGhyZWFkTm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgaXNSZXNvbHZlZDogYm9vbGVhbjtcbiAgaXNPdXRkYXRlZD86IGJvb2xlYW4gfCBudWxsO1xuICBwYXRoPzogc3RyaW5nIHwgbnVsbDtcbiAgbGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsTGluZT86IG51bWJlciB8IG51bGw7XG4gIHN0YXJ0TGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsU3RhcnRMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgY29tbWVudHM6IHtcbiAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICBwYWdlSW5mbzoge1xuICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgIH07XG4gIH07XG59O1xuXG50eXBlIElzc3VlTWVzc2FnZUNvbW1lbnROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59O1xuXG50eXBlIFByUmV2aWV3Tm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIHN0YXRlPzogc3RyaW5nIHwgbnVsbDtcbiAgc3VibWl0dGVkQXQ/OiBzdHJpbmcgfCBudWxsO1xuICB1cmw6IHN0cmluZztcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59O1xuXG50eXBlIE1lc3NhZ2UgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxudHlwZSBQYWdlSW5mbyA9IHtcbiAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG59O1xuXG50eXBlIE1lc3NhZ2VDb25uZWN0aW9uPFROb2RlPiA9IHtcbiAgbm9kZXM6IFROb2RlW107XG4gIHBhZ2VJbmZvOiBQYWdlSW5mbztcbn07XG5cbnR5cGUgUHVsbFJlcXVlc3RNZXNzYWdlc1Jlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgY29tbWVudHM/OiBNZXNzYWdlQ29ubmVjdGlvbjxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZT47XG4gICAgICAgIHJldmlld3M/OiBNZXNzYWdlQ29ubmVjdGlvbjxQclJldmlld05vZGU+O1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBJc3N1ZU1lc3NhZ2VzUmVzcG9uc2UgPSB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIGlzc3VlPzoge1xuICAgICAgICBjb21tZW50cz86IE1lc3NhZ2VDb25uZWN0aW9uPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlPjtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn07XG5cbnR5cGUgUHVsbFJlcXVlc3RNZXRhZGF0YVJlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgbnVtYmVyOiBudW1iZXI7XG4gICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgIHVybDogc3RyaW5nO1xuICAgICAgICBib2R5Pzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59O1xuXG50eXBlIElzc3VlTWV0YWRhdGFSZXNwb25zZSA9IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgaXNzdWU/OiB7XG4gICAgICAgIG51bWJlcjogbnVtYmVyO1xuICAgICAgICB0aXRsZTogc3RyaW5nO1xuICAgICAgICB1cmw6IHN0cmluZztcbiAgICAgICAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gICAgICAgIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBNZXRhZGF0YU5vZGUgPSB7XG4gIG51bWJlcjogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xufTtcblxudHlwZSBSdW5Db21tYW5kT3B0aW9ucyA9IHtcbiAgc3RkaW5EYXRhPzogc3RyaW5nO1xuICBhbGxvd2VkRXhpdENvZGVzPzogbnVtYmVyW107XG59O1xuXG5jb25zdCBHSF9SRVRSWV9NQVhfQVRURU1QVFMgPSAzO1xuY29uc3QgR0hfUkVUUllfQkFTRV9ERUxBWV9NUyA9IDEwMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9ncmVzcyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgcHJvY2Vzc1N0ZGVyci53cml0ZShgJHttZXNzYWdlfVxcbmApO1xufVxuXG5mdW5jdGlvbiBleGl0V2l0aEVycm9yKG1lc3NhZ2U6IHN0cmluZywgY29kZSA9IDEpOiBuZXZlciB7XG4gIHByb2Nlc3NTdGRlcnIud3JpdGUoYCR7bWVzc2FnZX1cXG5gKTtcbiAgcHJvY2Vzcy5leGl0KGNvZGUpO1xufVxuXG5mdW5jdGlvbiBpc1RyYW5zaWVudEdoRmFpbHVyZShjb21tYW5kOiBzdHJpbmdbXSwgZXhpdENvZGU6IG51bWJlciwgb3V0cHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGNvbW1hbmRbMF0gIT09ICdnaCcgfHwgZXhpdENvZGUgPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gLyhIVFRQIDUwWzAyMzRdXFxifFdlIGhhZCBpc3N1ZXMgcHJvZHVjaW5nIHRoZSByZXNwb25zZSB0byB5b3VyIHJlcXVlc3QpL2kudGVzdChvdXRwdXQpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFN0ZGluVGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAocHJvY2Vzc1N0ZGluLmlzVFRZKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBhd2FpdCBzdHJlYW1Ub1RleHQocHJvY2Vzc1N0ZGluKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBpbnB1dCA9IGF3YWl0IHJlYWRTdGRpblRleHQoKTtcbiAgaWYgKGlucHV0Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cbiAgZXhpdFdpdGhFcnJvcignRXJyb3I6IEpTT04gaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nLCAyKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmQoY29tbWFuZDogc3RyaW5nW10sIG9wdGlvbnM6IFJ1bkNvbW1hbmRPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBhbGxvd2VkRXhpdENvZGVzID0gb3B0aW9ucy5hbGxvd2VkRXhpdENvZGVzID8/IFtdO1xuXG4gIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IEdIX1JFVFJZX01BWF9BVFRFTVBUUzsgYXR0ZW1wdCArPSAxKSB7XG4gICAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmRbMF0gPz8gJycsIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICAgIHN0ZGlvOiBbJ3BpcGUnLCAncGlwZScsICdwaXBlJ10sXG4gICAgfSk7XG4gICAgaWYgKG9wdGlvbnMuc3RkaW5EYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHByb2Muc3RkaW4uZW5kKG9wdGlvbnMuc3RkaW5EYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvYy5zdGRpbi5lbmQoKTtcbiAgICB9XG5cbiAgICBjb25zdCBbc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHN0cmVhbVRvVGV4dChwcm9jLnN0ZG91dCksXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRlcnIpLFxuICAgICAgbmV3IFByb21pc2U8bnVtYmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHByb2Mub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgICAgICBwcm9jLm9uY2UoJ2Nsb3NlJywgKGNvZGUpID0+IHJlc29sdmUoY29kZSA/PyAxKSk7XG4gICAgICB9KSxcbiAgICBdKTtcbiAgICBjb25zdCBvdXRwdXQgPSBgJHtzdGRvdXR9JHtzdGRlcnJ9YDtcblxuICAgIGlmIChleGl0Q29kZSA9PT0gMCB8fCBhbGxvd2VkRXhpdENvZGVzLmluY2x1ZGVzKGV4aXRDb2RlKSkge1xuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG5cbiAgICBpZiAoaXNUcmFuc2llbnRHaEZhaWx1cmUoY29tbWFuZCwgZXhpdENvZGUsIG91dHB1dCkgJiYgYXR0ZW1wdCA8IEdIX1JFVFJZX01BWF9BVFRFTVBUUykge1xuICAgICAgcHJvZ3Jlc3MoYFRyYW5zaWVudCBHaXRIdWIgQ0xJIGZhaWx1cmU7IHJldHJ5aW5nLi4uIChhdHRlbXB0ICR7YXR0ZW1wdH0gb2YgJHtHSF9SRVRSWV9NQVhfQVRURU1QVFMgLSAxfSlgKTtcbiAgICAgIGF3YWl0IHNsZWVwKEdIX1JFVFJZX0JBU0VfREVMQVlfTVMgKiBhdHRlbXB0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGV4aXRXaXRoRXJyb3Iob3V0cHV0IHx8IGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbiAgfVxuICBleGl0V2l0aEVycm9yKGBDb21tYW5kIGZhaWxlZCBhZnRlciAke0dIX1JFVFJZX01BWF9BVFRFTVBUU30gYXR0ZW1wdHM6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnaChhcmdzOiBzdHJpbmdbXSwgc3RkaW5EYXRhPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGF3YWl0IHJ1bkNvbW1hbmQoWydnaCcsIC4uLmFyZ3NdLCB7IHN0ZGluRGF0YSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdoQWxsb3dFeGl0Q29kZXMoXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICBhbGxvd2VkRXhpdENvZGVzOiBudW1iZXJbXSxcbiAgc3RkaW5EYXRhPzogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gYXdhaXQgcnVuQ29tbWFuZChbJ2doJywgLi4uYXJnc10sIHsgc3RkaW5EYXRhLCBhbGxvd2VkRXhpdENvZGVzIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudFJlcG9QYXJ0cygpOiBQcm9taXNlPFtzdHJpbmcsIHN0cmluZ10+IHtcbiAgY29uc3QgbmFtZVdpdGhPd25lciA9IChhd2FpdCBnaChbJ3JlcG8nLCAndmlldycsICctLWpzb24nLCAnbmFtZVdpdGhPd25lcicsICctLWpxJywgJy5uYW1lV2l0aE93bmVyJ10pKS50cmltKCk7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBuYW1lV2l0aE93bmVyLnNwbGl0KCcvJywgMik7XG4gIGlmICghb3duZXIgfHwgIW5hbWUpIHtcbiAgICBleGl0V2l0aEVycm9yKCdFcnJvcjogY291bGQgbm90IGRldGVybWluZSBjdXJyZW50IHJlcG9zaXRvcnknKTtcbiAgfVxuICByZXR1cm4gW293bmVyLCBuYW1lXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRQck51bWJlcigpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gKGF3YWl0IGdoKFsncHInLCAndmlldycsICctLWpzb24nLCAnbnVtYmVyJywgJy0tanEnLCAnLm51bWJlciddKSkudHJpbSgpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ3JhcGhxbDxUIGV4dGVuZHMgSnNvbk9iamVjdD4oXG4gIHF1ZXJ5OiBzdHJpbmcsXG4gIHZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZD4gPSB7fVxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IGFyZ3MgPSBbJ2FwaScsICdncmFwaHFsJywgJy1GJywgJ3F1ZXJ5PUAtJ107XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcnMpKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgYXJncy5wdXNoKCctRicsIGAke2tleX09JHt2YWx1ZX1gKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShhd2FpdCBnaChhcmdzLCBxdWVyeSkpIGFzIEpzb25PYmplY3QgJiB7IGVycm9ycz86IEFycmF5PHsgbWVzc2FnZT86IHN0cmluZyB9PiB9O1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSkge1xuICAgIHJldHVybiByZXNwb25zZSBhcyBUO1xuICB9XG5cbiAgY29uc3QgZXJyb3JNZXNzYWdlcyA9IHJlc3BvbnNlLmVycm9ycy5tYXAoKGVycm9yKSA9PiBlcnJvci5tZXNzYWdlID8/ICdVbmtub3duIEdyYXBoUUwgZXJyb3InKS5qb2luKCdcXG4nKTtcbiAgZXhpdFdpdGhFcnJvcihgR3JhcGhRTCBBUEkgZXJyb3I6XFxuJHtlcnJvck1lc3NhZ2VzfWApO1xufVxuXG5jb25zdCBSRVZJRVdfVEhSRUFEX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgcmV2aWV3VGhyZWFkcyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgICBpc091dGRhdGVkXG4gICAgICAgICAgICBwYXRoXG4gICAgICAgICAgICBsaW5lXG4gICAgICAgICAgICBvcmlnaW5hbExpbmVcbiAgICAgICAgICAgIHN0YXJ0TGluZVxuICAgICAgICAgICAgb3JpZ2luYWxTdGFydExpbmVcbiAgICAgICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDApIHtcbiAgICAgICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgICAgIGRpZmZIdW5rXG4gICAgICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFJFVklFV19DT01NRU5UX1FVRVJZID0gYFxuICBxdWVyeSgkdGhyZWFkSWQ6IElEISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgbm9kZShpZDogJHRocmVhZElkKSB7XG4gICAgICAuLi4gb24gUHVsbFJlcXVlc3RSZXZpZXdUaHJlYWQge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgZGlmZkh1bmtcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUkVWSUVXX1RIUkVBRF9JRFNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdUaHJlYWRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgSVNTVUVfTUVTU0FHRVNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIGlzc3VlKG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBJU1NVRV9RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISkge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIGlzc3VlKG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBudW1iZXJcbiAgICAgICAgdGl0bGVcbiAgICAgICAgdXJsXG4gICAgICAgIGJvZHlcbiAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUFJfQ09NTUVOVFNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBQUl9RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISkge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBudW1iZXJcbiAgICAgICAgdGl0bGVcbiAgICAgICAgdXJsXG4gICAgICAgIGJvZHlcbiAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUFJfUkVWSUVXU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIHJldmlld3MoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgIHN1Ym1pdHRlZEF0XG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tbWVudEF1dGhvcihjb21tZW50OiBSZXZpZXdDb21tZW50Tm9kZSk6IFJldmlld0NvbW1lbnROb2RlICYgeyBhdXRob3I/OiBzdHJpbmcgfCBudWxsIH0ge1xuICByZXR1cm4ge1xuICAgIC4uLmNvbW1lbnQsXG4gICAgYXV0aG9yOiB0eXBlb2YgY29tbWVudC5hdXRob3IgPT09ICdzdHJpbmcnID8gY29tbWVudC5hdXRob3IgOiAoY29tbWVudC5hdXRob3I/LmxvZ2luID8/IG51bGwpLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFxuICBxdWVyeTogc3RyaW5nLFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIsXG4gIG9uVGhyZWFkOiAodGhyZWFkOiBSZXZpZXdUaHJlYWROb2RlKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPlxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgcmV2aWV3VGhyZWFkcyA9IChcbiAgICAgIGF3YWl0IGdyYXBocWw8e1xuICAgICAgICBkYXRhPzoge1xuICAgICAgICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICAgICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgICAgICAgcmV2aWV3VGhyZWFkcz86IHtcbiAgICAgICAgICAgICAgICBub2RlczogUmV2aWV3VGhyZWFkTm9kZVtdO1xuICAgICAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0+KHF1ZXJ5LCB7XG4gICAgICAgIG93bmVyLFxuICAgICAgICBuYW1lLFxuICAgICAgICBudW1iZXI6IE51bWJlcihwck51bWJlciksXG4gICAgICAgIGN1cnNvcixcbiAgICAgIH0pXG4gICAgKS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8ucmV2aWV3VGhyZWFkcztcblxuICAgIGlmICghcmV2aWV3VGhyZWFkcykge1xuICAgICAgZXhpdFdpdGhFcnJvcihcbiAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIHJldmlld1RocmVhZHMgaW4gR3JhcGhRTCByZXNwb25zZS4gVGhlIHB1bGwgcmVxdWVzdCBtYXkgbm90IGV4aXN0IG9yIHRoZXJlIHdhcyBhbiBBUEkgZXJyb3IuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRocmVhZCBvZiByZXZpZXdUaHJlYWRzLm5vZGVzKSB7XG4gICAgICBhd2FpdCBvblRocmVhZCh0aHJlYWQpO1xuICAgIH1cblxuICAgIGlmICghcmV2aWV3VGhyZWFkcy5wYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjdXJzb3IgPSByZXZpZXdUaHJlYWRzLnBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMoXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlclxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBpZHM6IHN0cmluZ1tdID0gW107XG4gIGF3YWl0IHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhSRVZJRVdfVEhSRUFEX0lEU19RVUVSWSwgb3duZXIsIG5hbWUsIHByTnVtYmVyLCAodGhyZWFkKSA9PiB7XG4gICAgaWYgKCF0aHJlYWQuaXNSZXNvbHZlZCkge1xuICAgICAgaWRzLnB1c2godGhyZWFkLmlkKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaWRzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5yZXNvbHZlZFJldmlld1RocmVhZHMoXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlclxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPiB7XG4gIGNvbnN0IHRocmVhZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gPSBbXTtcblxuICBhd2FpdCBwYWdpbmF0ZVJldmlld1RocmVhZHMoUkVWSUVXX1RIUkVBRF9RVUVSWSwgb3duZXIsIG5hbWUsIHByTnVtYmVyLCBhc3luYyAodGhyZWFkKSA9PiB7XG4gICAgaWYgKHRocmVhZC5pc1Jlc29sdmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tbWVudHMgPSB0aHJlYWQuY29tbWVudHMubm9kZXMubWFwKG5vcm1hbGl6ZUNvbW1lbnRBdXRob3IpO1xuICAgIGxldCBwYWdlSW5mbyA9IHRocmVhZC5jb21tZW50cy5wYWdlSW5mbztcbiAgICBsZXQgY3Vyc29yID0gcGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcblxuICAgIHdoaWxlIChwYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgY29uc3QgY29tbWVudENvbm5lY3Rpb24gPSAoXG4gICAgICAgIGF3YWl0IGdyYXBocWw8e1xuICAgICAgICAgIGRhdGE/OiB7XG4gICAgICAgICAgICBub2RlPzoge1xuICAgICAgICAgICAgICBjb21tZW50cz86IHtcbiAgICAgICAgICAgICAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICAgICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH0+KFJFVklFV19DT01NRU5UX1FVRVJZLCB7IHRocmVhZElkOiB0aHJlYWQuaWQsIGN1cnNvciB9KVxuICAgICAgKS5kYXRhPy5ub2RlPy5jb21tZW50cztcblxuICAgICAgaWYgKCFjb21tZW50Q29ubmVjdGlvbikge1xuICAgICAgICBleGl0V2l0aEVycm9yKGBDb3VsZCBub3QgZmluZCBjb21tZW50cyBpbiBHcmFwaFFMIHJlc3BvbnNlIGZvciB0aHJlYWQgJHt0aHJlYWQuaWR9LmApO1xuICAgICAgfVxuXG4gICAgICBjb21tZW50cy5wdXNoKC4uLmNvbW1lbnRDb25uZWN0aW9uLm5vZGVzLm1hcChub3JtYWxpemVDb21tZW50QXV0aG9yKSk7XG4gICAgICBwYWdlSW5mbyA9IGNvbW1lbnRDb25uZWN0aW9uLnBhZ2VJbmZvO1xuICAgICAgY3Vyc29yID0gcGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0aHJlYWRzLnB1c2goe1xuICAgICAgaWQ6IHRocmVhZC5pZCxcbiAgICAgIGlzUmVzb2x2ZWQ6IHRocmVhZC5pc1Jlc29sdmVkLFxuICAgICAgaXNPdXRkYXRlZDogdGhyZWFkLmlzT3V0ZGF0ZWQsXG4gICAgICBwYXRoOiB0aHJlYWQucGF0aCxcbiAgICAgIGxpbmU6IHRocmVhZC5saW5lLFxuICAgICAgb3JpZ2luYWxMaW5lOiB0aHJlYWQub3JpZ2luYWxMaW5lLFxuICAgICAgc3RhcnRMaW5lOiB0aHJlYWQuc3RhcnRMaW5lLFxuICAgICAgb3JpZ2luYWxTdGFydExpbmU6IHRocmVhZC5vcmlnaW5hbFN0YXJ0TGluZSxcbiAgICAgIGNvbW1lbnRzLFxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gdGhyZWFkcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHlhbWxEdW1wKGRhdGE6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gc3RyaW5naWZ5WWFtbChkYXRhLCB5YW1sU3RyaW5naWZ5T3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWVwQ29weTxUPihkYXRhOiBUKTogVCB7XG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKSBhcyBUO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGF0ZXN0UHJDaVJlc3VsdHMocHJOdW1iZXI/OiBzdHJpbmcpOiBQcm9taXNlPENpUmVzdWx0cz4ge1xuICBjb25zdCBhcmdzID0gWydwcicsICdjaGVja3MnXTtcbiAgaWYgKHByTnVtYmVyKSB7XG4gICAgYXJncy5wdXNoKHByTnVtYmVyKTtcbiAgfVxuICBhcmdzLnB1c2goJy0tanNvbicsICdidWNrZXQsY29tcGxldGVkQXQsZGVzY3JpcHRpb24sZXZlbnQsbGluayxuYW1lLHN0YXJ0ZWRBdCxzdGF0ZSx3b3JrZmxvdycpO1xuXG4gIGxldCBjaGVja3M6IENoZWNrW10gPSBbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCBnaEFsbG93RXhpdENvZGVzKGFyZ3MsIFs4XSk7XG4gICAgY2hlY2tzID0gcmF3LnRyaW0oKS5sZW5ndGggPiAwID8gKEpTT04ucGFyc2UocmF3KSBhcyBDaGVja1tdKSA6IFtdO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBjaGVja3MgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3VtbWFyeSA9IGNoZWNrcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgbnVtYmVyPj4oKGNvdW50cywgY2hlY2spID0+IHtcbiAgICBjb25zdCBidWNrZXQgPSBjaGVjay5idWNrZXQgPz8gJyc7XG4gICAgY291bnRzW2J1Y2tldF0gPSAoY291bnRzW2J1Y2tldF0gPz8gMCkgKyAxO1xuICAgIHJldHVybiBjb3VudHM7XG4gIH0sIHt9KTtcblxuICByZXR1cm4ge1xuICAgIHN1bW1hcnk6IHtcbiAgICAgIHRvdGFsOiBjaGVja3MubGVuZ3RoLFxuICAgICAgcGFzczogc3VtbWFyeS5wYXNzID8/IDAsXG4gICAgICBmYWlsOiBzdW1tYXJ5LmZhaWwgPz8gMCxcbiAgICAgIHBlbmRpbmc6IHN1bW1hcnkucGVuZGluZyA/PyAwLFxuICAgICAgc2tpcHBpbmc6IHN1bW1hcnkuc2tpcHBpbmcgPz8gMCxcbiAgICAgIGNhbmNlbDogc3VtbWFyeS5jYW5jZWwgPz8gMCxcbiAgICB9LFxuICAgIGNoZWNrcyxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MoXG4gIHByTnVtYmVyOiBzdHJpbmcsXG4gIHNsZWVwRm46IChzZWNvbmRzOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD4gPSBzbGVlcFNlY29uZHMsXG4gIGxhdGVzdENpUmVzdWx0c0ZuOiAocHJOdW1iZXI/OiBzdHJpbmcpID0+IENpUmVzdWx0cyB8IFByb21pc2U8Q2lSZXN1bHRzPiA9IGxhdGVzdFByQ2lSZXN1bHRzLFxuICB3cml0ZVByb2dyZXNzRm46IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQgPSAobWVzc2FnZSkgPT4gcHJvY2Vzc1N0ZGVyci53cml0ZShtZXNzYWdlKVxuKTogUHJvbWlzZTxbQ2lSZXN1bHRzLCBudW1iZXIsIGJvb2xlYW5dPiB7XG4gIGxldCBhdHRlbXB0cyA9IDA7XG4gIGxldCBjaVJlc3VsdHMgPSBhd2FpdCBsYXRlc3RDaVJlc3VsdHNGbihwck51bWJlcik7XG4gIGxldCBzdG9wV2FpdFByb2dyZXNzID0gKCkgPT4ge307XG5cbiAgdHJ5IHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICBjb25zdCBjbGFzc2lmaWVkUmVzdWx0cyA9IGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0cyk7XG4gICAgICBjb25zdCBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdID0gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKGNsYXNzaWZpZWRSZXN1bHRzKTtcblxuICAgICAgaWYgKE9iamVjdC5rZXlzKGZhaWxlZFJlc3VsdHMpLmxlbmd0aCA+IDAgfHwgT2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW2NpUmVzdWx0cywgYXR0ZW1wdHMsIGZhbHNlXTtcbiAgICAgIH1cbiAgICAgIGlmIChhdHRlbXB0cyA+PSBURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTKSB7XG4gICAgICAgIHJldHVybiBbY2lSZXN1bHRzLCBhdHRlbXB0cywgdHJ1ZV07XG4gICAgICB9XG5cbiAgICAgIGF0dGVtcHRzICs9IDE7XG4gICAgICBpZiAoYXR0ZW1wdHMgPT09IDEpIHtcbiAgICAgICAgc3RvcFdhaXRQcm9ncmVzcyA9IGNyZWF0ZVdhaXRQcm9ncmVzcyhcbiAgICAgICAgICBURVNUX0NIRUNLX1dBSVRfTUVTU0FHRSxcbiAgICAgICAgICBURVNUX0NIRUNLX1dBSVRfSU5URVJWQUxfU0VDT05EUyxcbiAgICAgICAgICB3cml0ZVByb2dyZXNzRm5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHNsZWVwRm4oVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMpO1xuICAgICAgY2lSZXN1bHRzID0gYXdhaXQgbGF0ZXN0Q2lSZXN1bHRzRm4ocHJOdW1iZXIpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBzdG9wV2FpdFByb2dyZXNzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0czogQ2lSZXN1bHRzKTogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiB7XG4gIGNvbnN0IGxhdGVzdFJlc3VsdHNCeVdvcmtmbG93ID0gY2lSZXN1bHRzLmNoZWNrcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgQ2hlY2tbXT4+KChncm91cGVkUmVzdWx0cywgY2hlY2spID0+IHtcbiAgICBjb25zdCB3b3JrZmxvd0tleSA9IGNoZWNrLndvcmtmbG93IHx8IGNoZWNrLm5hbWUgfHwgJ3Vua25vd25fd29ya2Zsb3cnO1xuICAgIGdyb3VwZWRSZXN1bHRzW3dvcmtmbG93S2V5XSA/Pz0gW107XG4gICAgZ3JvdXBlZFJlc3VsdHNbd29ya2Zsb3dLZXldLnB1c2goY2hlY2spO1xuICAgIHJldHVybiBncm91cGVkUmVzdWx0cztcbiAgfSwge30pO1xuXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMobGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3cpLm1hcCgoW3dvcmtmbG93S2V5LCBjaGVja3NdKSA9PiB7XG4gICAgICBjb25zdCBsYXRlc3RBdHRlbXB0Q2hlY2tzID0gbGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3coY2hlY2tzKTtcbiAgICAgIGNvbnN0IGZpcnN0Q2hlY2sgPSBsYXRlc3RBdHRlbXB0Q2hlY2tzWzBdO1xuICAgICAgaWYgKCFmaXJzdENoZWNrKSB7XG4gICAgICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBubyBjaGVja3MgZm91bmQgZm9yIHdvcmtmbG93ICR7d29ya2Zsb3dLZXl9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBsYXRlc3RDaGVjayA9XG4gICAgICAgIGxhdGVzdEF0dGVtcHRDaGVja3MucmVkdWNlPENoZWNrIHwgdW5kZWZpbmVkPigoY3VycmVudExhdGVzdCwgY2hlY2spID0+IHtcbiAgICAgICAgICBpZiAoIWN1cnJlbnRMYXRlc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVjaztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrKSA+IGxhdGVzdENoZWNrVGltZXN0YW1wKGN1cnJlbnRMYXRlc3QpID8gY2hlY2sgOiBjdXJyZW50TGF0ZXN0O1xuICAgICAgICB9LCB1bmRlZmluZWQpID8/IGZpcnN0Q2hlY2s7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIHdvcmtmbG93S2V5LFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NpZmljYXRpb246IHdvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24obGF0ZXN0QXR0ZW1wdENoZWNrcyksXG4gICAgICAgICAgY2hlY2s6IGxhdGVzdENoZWNrLFxuICAgICAgICAgIGNoZWNrczogbGF0ZXN0QXR0ZW1wdENoZWNrcyxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChcbiAgY2xhc3NpZmllZFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD5cbik6IFtSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+LCBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+XSB7XG4gIGNvbnN0IGZhaWxlZFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4gPSB7fTtcbiAgY29uc3QgcnVubmluZ1Jlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4gPSB7fTtcblxuICBmb3IgKGNvbnN0IFt3b3JrZmxvd0tleSwgcmVzdWx0XSBvZiBPYmplY3QuZW50cmllcyhjbGFzc2lmaWVkUmVzdWx0cykpIHtcbiAgICBpZiAocmVzdWx0LmNsYXNzaWZpY2F0aW9uID09PSAnZmFpbGVkJykge1xuICAgICAgZmFpbGVkUmVzdWx0c1t3b3JrZmxvd0tleV0gPSByZXN1bHQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdC5jbGFzc2lmaWNhdGlvbiA9PT0gJ3J1bm5pbmcnICYmIHJlc3VsdC5jaGVja3Muc29tZSgoY2hlY2spID0+IHRlc3RSZWxhdGVkQ2hlY2soY2hlY2spKSkge1xuICAgICAgcnVubmluZ1Jlc3VsdHNbd29ya2Zsb3dLZXldID0gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2s6IENoZWNrIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbGluayA9IGNoZWNrPy5saW5rO1xuICBpZiAoIWxpbmspIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBsaW5rLm1hdGNoKC9cXC9hY3Rpb25zXFwvcnVuc1xcLyhcXGQrKS8pPy5bMV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3b3JrZmxvd1J1bihydW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxKc29uT2JqZWN0IHwgdW5kZWZpbmVkPiB7XG4gIGlmICghcnVuSWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcnVuSnNvbiA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydydW4nLCAndmlldycsIHJ1bklkLCAnLS1qc29uJywgV09SS0ZMT1dfUlVOX0pTT05fRklFTERTLmpvaW4oJywnKV0sIFsxXSk7XG4gIGlmIChydW5Kc29uLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShydW5Kc29uKSBhcyBKc29uT2JqZWN0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBwcm9jZXNzU3RkZXJyLndyaXRlKGBXYXJuaW5nOiBDb3VsZCBub3QgcGFyc2UgSlNPTiBmb3Igd29ya2Zsb3cgcnVuICR7cnVuSWR9OiAke2Vycm9yLm1lc3NhZ2V9XFxuYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3coY2hlY2tzOiBDaGVja1tdKTogQ2hlY2tbXSB7XG4gIGNvbnN0IGdyb3VwcyA9IGNoZWNrcy5yZWR1Y2UoKGdyb3VwZWRDaGVja3MsIGNoZWNrKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gd29ya2Zsb3dBdHRlbXB0S2V5KGNoZWNrKTtcbiAgICBjb25zdCBncm91cCA9IGdyb3VwZWRDaGVja3MuZ2V0KGtleSk7XG4gICAgaWYgKGdyb3VwKSB7XG4gICAgICBncm91cC5wdXNoKGNoZWNrKTtcbiAgICAgIHJldHVybiBncm91cGVkQ2hlY2tzO1xuICAgIH1cbiAgICBncm91cGVkQ2hlY2tzLnNldChrZXksIFtjaGVja10pO1xuICAgIHJldHVybiBncm91cGVkQ2hlY2tzO1xuICB9LCBuZXcgTWFwPHN0cmluZywgQ2hlY2tbXT4oKSk7XG5cbiAgcmV0dXJuIEFycmF5LmZyb20oZ3JvdXBzLnZhbHVlcygpKS5yZWR1Y2U8Q2hlY2tbXT4oKGxhdGVzdEdyb3VwLCBjdXJyZW50R3JvdXApID0+IHtcbiAgICBpZiAobGF0ZXN0R3JvdXAubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gY3VycmVudEdyb3VwO1xuICAgIH1cblxuICAgIHJldHVybiBsYXRlc3RHcm91cFRpbWVzdGFtcChjdXJyZW50R3JvdXApID4gbGF0ZXN0R3JvdXBUaW1lc3RhbXAobGF0ZXN0R3JvdXApID8gY3VycmVudEdyb3VwIDogbGF0ZXN0R3JvdXA7XG4gIH0sIFtdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93QXR0ZW1wdEtleShjaGVjazogQ2hlY2spOiBzdHJpbmcge1xuICBjb25zdCBydW5JZCA9IHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKGNoZWNrKTtcbiAgcmV0dXJuIHJ1bklkID8gYHJ1bjoke3J1bklkfWAgOiAndW5rbm93bl9ydW4nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbihjaGVja3M6IENoZWNrW10pOiBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uIHtcbiAgY29uc3QgYnVja2V0cyA9IGNoZWNrcy5tYXAoKGNoZWNrKSA9PiBjaGVjay5idWNrZXQgPz8gJycpO1xuICBpZiAoYnVja2V0cy5zb21lKChidWNrZXQpID0+ICFbJ3Bhc3MnLCAnc2tpcHBpbmcnLCAncGVuZGluZyddLmluY2x1ZGVzKGJ1Y2tldCkpKSB7XG4gICAgcmV0dXJuICdmYWlsZWQnO1xuICB9XG4gIGlmIChidWNrZXRzLmluY2x1ZGVzKCdwZW5kaW5nJykpIHtcbiAgICByZXR1cm4gJ3J1bm5pbmcnO1xuICB9XG4gIHJldHVybiAnc3VjY2Vzc2Z1bCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXRlc3RDaGVja1RpbWVzdGFtcChjaGVjazogQ2hlY2spOiBzdHJpbmcge1xuICBjb25zdCB0aW1lc3RhbXAgPSBjaGVjay5jb21wbGV0ZWRBdDtcbiAgaWYgKCF0aW1lc3RhbXAgfHwgdGltZXN0YW1wID09PSBaRVJPX1RJTUVTVEFNUCkge1xuICAgIHJldHVybiBjaGVjay5zdGFydGVkQXQgPz8gJyc7XG4gIH1cbiAgcmV0dXJuIHRpbWVzdGFtcDtcbn1cblxuZnVuY3Rpb24gbGF0ZXN0R3JvdXBUaW1lc3RhbXAoY2hlY2tzOiBDaGVja1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNoZWNrcy5yZWR1Y2UoKGxhdGVzdCwgY2hlY2spID0+IHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBsYXRlc3RDaGVja1RpbWVzdGFtcChjaGVjayk7XG4gICAgcmV0dXJuIHRpbWVzdGFtcCA+IGxhdGVzdCA/IHRpbWVzdGFtcCA6IGxhdGVzdDtcbiAgfSwgJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVzdFJlbGF0ZWRDaGVjayhjaGVjazogQ2hlY2spOiBib29sZWFuIHtcbiAgcmV0dXJuIFtjaGVjay5uYW1lLCBjaGVjay53b3JrZmxvd10uc29tZSgodmFsdWUpID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgVEVTVF9SRUxBVEVEX1BBVFRFUk4udGVzdCh2YWx1ZSkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2xlZXBTZWNvbmRzKHNlY29uZHM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBzbGVlcChzZWNvbmRzICogMTAwMCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvVGV4dChzdHJlYW06IE5vZGVKUy5SZWFkYWJsZVN0cmVhbSB8IG51bGwpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoIXN0cmVhbSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICBjaHVua3MucHVzaCh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnID8gQnVmZmVyLmZyb20oY2h1bmspIDogQnVmZmVyLmZyb20oY2h1bmspKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpLnRvU3RyaW5nKCd1dGY4Jyk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkUmVwbGllc0Zyb21TdGRpbigpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgY29uc3QgaW5wdXQgPSBhd2FpdCByZWFkUmVxdWlyZWRTdGRpblRleHQoKTtcbiAgY29uc3QgcGF5bG9hZCA9IHBhcnNlUmVwbHlJbnB1dChpbnB1dCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRSZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgW3RocmVhZElkLCBib2R5XSBvZiBPYmplY3QuZW50cmllcyhwYXlsb2FkLnJlcGxpZXMpKSB7XG4gICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyAmJiBib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgIG5vcm1hbGl6ZWRSZXBsaWVzW3RocmVhZElkXSA9IGJvZHk7XG4gICAgfVxuICB9XG4gIHJldHVybiBub3JtYWxpemVkUmVwbGllcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5Qcihib2R5Pzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaGVhZCA9IChhd2FpdCBydW5Db21tYW5kKFsnZ2l0JywgJ2JyYW5jaCcsICctLXNob3ctY3VycmVudCddKSkudHJpbSgpO1xuICBjb25zdCBiYXNlID0gKGF3YWl0IGdoKFsncmVwbycsICd2aWV3JywgJy0tanNvbicsICdkZWZhdWx0QnJhbmNoUmVmJywgJy0tanEnLCAnLmRlZmF1bHRCcmFuY2hSZWYubmFtZSddKSkudHJpbSgpO1xuXG4gIGlmICghaGVhZCkge1xuICAgIGV4aXRXaXRoRXJyb3IoJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIGN1cnJlbnQgYnJhbmNoJyk7XG4gIH1cbiAgaWYgKCFiYXNlKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgZGVmYXVsdCBicmFuY2gnKTtcbiAgfVxuICBpZiAoaGVhZCA9PT0gYmFzZSkge1xuICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBjdXJyZW50IGJyYW5jaCBpcyB0aGUgZGVmYXVsdCBicmFuY2ggKCR7YmFzZX0pYCk7XG4gIH1cblxuICBjb25zdCBjcmVhdGVBcmdzID0gWydwcicsICdjcmVhdGUnLCAnLS1iYXNlJywgYmFzZSwgJy0taGVhZCcsIGhlYWQsICctLWZpbGwnXTtcbiAgaWYgKGJvZHkgJiYgYm9keS5sZW5ndGggPiAwKSB7XG4gICAgY3JlYXRlQXJncy5wdXNoKCctLWJvZHktZmlsZScsICctJyk7XG4gIH1cblxuICBwcm9ncmVzcygnQ3JlYXRpbmcgcHVsbCByZXF1ZXN0Li4uJyk7XG4gIGF3YWl0IGdoKGNyZWF0ZUFyZ3MsIGJvZHkpO1xuXG4gIHJldHVybiB5YW1sRHVtcChcbiAgICBKU09OLnBhcnNlKGF3YWl0IGdoKFsncHInLCAndmlldycsICctLWpzb24nLCAnaWQsbnVtYmVyLHRpdGxlLHVybCxzdGF0ZSxpc0RyYWZ0LGJhc2VSZWZOYW1lLGhlYWRSZWZOYW1lLGF1dGhvciddKSlcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RQclJldmlld1RocmVhZHMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcblxuICBwcm9ncmVzcygnRmV0Y2hpbmcgdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcy4uLicpO1xuICByZXR1cm4geWFtbER1bXAoeyB1bnJlc29sdmVkX3RocmVhZHM6IGF3YWl0IHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzKG93bmVyLCBuYW1lLCBwck51bWJlcikgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlUHJSZXZpZXdUaHJlYWRzKHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuICBjb25zdCB1bnJlc29sdmVkSWRzID0gbmV3IFNldChhd2FpdCB1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzKG93bmVyLCBuYW1lLCBwck51bWJlcikpO1xuXG4gIHByb2dyZXNzKGBSZXBseWluZyB0byAke09iamVjdC5rZXlzKHJlcGxpZXMpLmxlbmd0aH0gcmV2aWV3IHRocmVhZHMuLi5gKTtcblxuICBjb25zdCByZXNvbHZlZFRocmVhZElkczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHJlcGxpZXMpO1xuXG4gIGZvciAoY29uc3QgW2luZGV4LCBbdGhyZWFkSWQsIGJvZHldXSBvZiBlbnRyaWVzLmVudHJpZXMoKSkge1xuICAgIHByb2dyZXNzKGBQcm9jZXNzaW5nICR7aW5kZXggKyAxfS8ke2VudHJpZXMubGVuZ3RofTogJHt0aHJlYWRJZH1gKTtcbiAgICBpZiAoIXVucmVzb2x2ZWRJZHMuaGFzKHRocmVhZElkKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBncmFwaHFsPHtcbiAgICAgIGRhdGE/OiB7XG4gICAgICAgIHJlc29sdmVSZXZpZXdUaHJlYWQ/OiB7XG4gICAgICAgICAgdGhyZWFkPzoge1xuICAgICAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IGJvb2xlYW47XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfT4oXG4gICAgICBgXG4gICAgICAgIG11dGF0aW9uKCR0aHJlYWRJZDogSUQhLCAkYm9keTogU3RyaW5nISkge1xuICAgICAgICAgIGFkZFB1bGxSZXF1ZXN0UmV2aWV3VGhyZWFkUmVwbHkoaW5wdXQ6IHtwdWxsUmVxdWVzdFJldmlld1RocmVhZElkOiAkdGhyZWFkSWQsIGJvZHk6ICRib2R5fSkge1xuICAgICAgICAgICAgY29tbWVudCB7XG4gICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXNvbHZlUmV2aWV3VGhyZWFkKGlucHV0OiB7dGhyZWFkSWQ6ICR0aHJlYWRJZH0pIHtcbiAgICAgICAgICAgIHRocmVhZCB7XG4gICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICB7IHRocmVhZElkLCBib2R5IH1cbiAgICApO1xuXG4gICAgaWYgKHJlc3BvbnNlLmRhdGE/LnJlc29sdmVSZXZpZXdUaHJlYWQ/LnRocmVhZD8uaXNSZXNvbHZlZCkge1xuICAgICAgcmVzb2x2ZWRUaHJlYWRJZHMucHVzaCh0aHJlYWRJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2dyZXNzKGBXYXJuaW5nOiBmYWlsZWQgdG8gcmVzb2x2ZSB0aHJlYWQgJHt0aHJlYWRJZH0uYCk7XG4gICAgfVxuICB9XG5cbiAgcHJvZ3Jlc3MoJ0RvbmUuJyk7XG4gIHJldHVybiB5YW1sRHVtcCh7IHJlc29sdmVkX3RocmVhZF9pZHM6IHJlc29sdmVkVGhyZWFkSWRzIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tQckNpKCk6IFByb21pc2U8eyBvdXRwdXQ6IHN0cmluZzsgZXhpdENvZGU6IG51bWJlciB9PiB7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoJ0ZldGNoaW5nIGxhdGVzdCBDSSByZXN1bHRzLi4uJyk7XG4gIGNvbnN0IFtjaVJlc3VsdHMsIHdhaXRBdHRlbXB0cywgd2FpdFRpbWVkT3V0XSA9IGF3YWl0IHdhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MocHJOdW1iZXIpO1xuICBjb25zdCBjbGFzc2lmaWVkTGF0ZXN0ID0gY2xhc3NpZmllZExhdGVzdFJlc3VsdHMoY2lSZXN1bHRzKTtcbiAgY29uc3QgW2ZhaWxlZFJlc3VsdHMsIHJ1bm5pbmdSZXN1bHRzXSA9IGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChjbGFzc2lmaWVkTGF0ZXN0KTtcblxuICBjb25zdCBwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBzdW1tYXJ5OiBkZWVwQ29weShjaVJlc3VsdHMuc3VtbWFyeSksXG4gICAgd2FpdGVkX2Zvcl90ZXN0X3JlbGF0ZWRfY2hlY2tzOiB3YWl0QXR0ZW1wdHMgPiAwLFxuICAgIHRlc3RfcmVsYXRlZF9jaGVja193YWl0X2F0dGVtcHRzOiB3YWl0QXR0ZW1wdHMsXG4gICAgdGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfdGltZWRfb3V0OiB3YWl0VGltZWRPdXQsXG4gIH07XG5cbiAgaWYgKE9iamVjdC5rZXlzKGZhaWxlZFJlc3VsdHMpLmxlbmd0aCA+IDApIHtcbiAgICBwYXlsb2FkLmZhaWxlZF93b3JrZmxvd3MgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5lbnRyaWVzKGZhaWxlZFJlc3VsdHMpLm1hcChhc3luYyAoW3dvcmtmbG93S2V5LCByZXN1bHRdKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBhY3RXb3JrZmxvdyA9IGF3YWl0IGNvbXBhY3RXb3JrZmxvd1Jlc3VsdCh3b3JrZmxvd0tleSwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jb21wYWN0V29ya2Zsb3csXG4gICAgICAgICAgLi4uYnVpbGRGYWlsZWRXb3JrZmxvd0RldGFpbHMoYXdhaXQgZmFpbGVkV29ya2Zsb3dMb2cocmVzdWx0LmNoZWNrKSksXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDEgfTtcbiAgfVxuXG4gIGlmIChPYmplY3Qua2V5cyhydW5uaW5nUmVzdWx0cykubGVuZ3RoID4gMCkge1xuICAgIHBheWxvYWQudGVzdF93b3JrZmxvd19vdXRwdXQgPSAnVGltZWQgb3V0IHdhaXRpbmcgZm9yIHRlc3QtcmVsYXRlZCB3b3JrZmxvd3MgdG8gZmluaXNoLic7XG4gICAgcGF5bG9hZC5ydW5uaW5nX3Rlc3RfcmVsYXRlZF93b3JrZmxvd3MgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJ1bm5pbmdSZXN1bHRzKS5tYXAoKFt3b3JrZmxvd0tleSwgcmVzdWx0XSkgPT4gY29tcGFjdFdvcmtmbG93UmVzdWx0KHdvcmtmbG93S2V5LCByZXN1bHQpKVxuICAgICk7XG4gICAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDEgfTtcbiAgfVxuXG4gIHBheWxvYWQudGVzdF93b3JrZmxvd19vdXRwdXQgPSAnQWxsIHdvcmtmbG93cyBhcmUgc3VjY2Vzc2Z1bC4nO1xuICByZXR1cm4geyBvdXRwdXQ6IHlhbWxEdW1wKHBheWxvYWQpLCBleGl0Q29kZTogMCB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hJc3N1ZU1lc3NhZ2VzKGlzc3VlTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCBpc3N1ZSA9IGF3YWl0IGlzc3VlTWVzc2FnZXMob3duZXIsIG5hbWUsIG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlTnVtYmVyKSk7XG4gIHByb2dyZXNzKGBGZXRjaGVkIGlzc3VlICMke2lzc3VlLm51bWJlcn0gbWVzc2FnZXMuYCk7XG4gIHJldHVybiB5YW1sRHVtcCh7IGlzc3VlIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hQck1lc3NhZ2VzKHByTnVtYmVyPzogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgcmVzb2x2ZWRQck51bWJlciA9IHByTnVtYmVyID09PSB1bmRlZmluZWQgPyBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKSA6IG5vcm1hbGl6ZVByTnVtYmVyKHByTnVtYmVyKTtcbiAgY29uc3QgcHVsbFJlcXVlc3QgPSBhd2FpdCBwck1lc3NhZ2VzKG93bmVyLCBuYW1lLCByZXNvbHZlZFByTnVtYmVyKTtcbiAgcHJvZ3Jlc3MoYEZldGNoZWQgcHVsbCByZXF1ZXN0ICMke3B1bGxSZXF1ZXN0Lm51bWJlcn0gbWVzc2FnZXMuYCk7XG4gIHJldHVybiB5YW1sRHVtcCh7IHB1bGxfcmVxdWVzdDogcHVsbFJlcXVlc3QgfSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUmVwbHlJbnB1dChpbnB1dDogc3RyaW5nKTogeyByZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPiB9IHtcbiAgY29uc3QgZXJyb3JQcmVmaXggPSAnRXJyb3I6IEludmFsaWQgaW5wdXQgZm9ybWF0IG9uIHN0ZGluJztcblxuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoaW5wdXQpIGFzIHVua25vd247XG4gICAgaWYgKCFpc1JlcGx5SW5wdXQocGFyc2VkKSkge1xuICAgICAgZXhpdFdpdGhFcnJvcihgJHtlcnJvclByZWZpeH06IGV4cGVjdGVkIGFuIG9iamVjdCB3aXRoIGEgc3RyaW5nLXZhbHVlZCBcXGByZXBsaWVzXFxgIG1hcGAsIDIpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBleGl0V2l0aEVycm9yKGBFcnJvcjogSW52YWxpZCBKU09OIHByb3ZpZGVkIG9uIHN0ZGluOiAke2Vycm9yLm1lc3NhZ2V9YCwgMik7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbXBhY3RXb3JrZmxvd1Jlc3VsdChcbiAgd29ya2Zsb3dLZXk6IHN0cmluZyxcbiAgcmVzdWx0OiBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHRcbik6IFByb21pc2U8eyBjbGFzc2lmaWNhdGlvbjogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbiB9ICYgQ29tcGFjdFdvcmtmbG93UnVuPiB7XG4gIGNvbnN0IHJ1bklkID0gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsocmVzdWx0LmNoZWNrKTtcbiAgY29uc3QgcnVuID0gKGF3YWl0IHdvcmtmbG93UnVuKHJ1bklkKSkgYXMgV29ya2Zsb3dSdW5EZXRhaWxzIHwgdW5kZWZpbmVkO1xuICBjb25zdCBmYWlsZWRKb2IgPSBmYWlsZWRXb3JrZmxvd1J1bkpvYihydW4sIHN0cmluZ09yVW5kZWZpbmVkKHJlc3VsdC5jaGVjay5uYW1lKSk7XG4gIHJldHVybiB7XG4gICAgY2xhc3NpZmljYXRpb246IHJlc3VsdC5jbGFzc2lmaWNhdGlvbixcbiAgICB3b3JrZmxvdzogd29ya2Zsb3dLZXksXG4gICAgam9iOiBzdHJpbmdPclVuZGVmaW5lZChyZXN1bHQuY2hlY2submFtZSksXG4gICAgam9iX3VybDogc3RyaW5nT3JVbmRlZmluZWQoZmFpbGVkSm9iPy51cmwpLFxuICAgIGZhaWxlZF9zdGVwOiBmYWlsZWRXb3JrZmxvd1J1blN0ZXBOYW1lKGZhaWxlZEpvYiksXG4gICAgcnVuX2lkOiBydW5JZCxcbiAgICBydW5fdXJsOiBzdHJpbmdPclVuZGVmaW5lZChydW4/LnVybCkgPz8gc3RyaW5nT3JVbmRlZmluZWQocmVzdWx0LmNoZWNrLmxpbmspLFxuICAgIGJyYW5jaDogc3RyaW5nT3JVbmRlZmluZWQocnVuPy5oZWFkQnJhbmNoKSxcbiAgICBzaGE6IHN0cmluZ09yVW5kZWZpbmVkKHJ1bj8uaGVhZFNoYSksXG4gICAgY29uY2x1c2lvbjogc3RyaW5nT3JVbmRlZmluZWQocnVuPy5jb25jbHVzaW9uKSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmFpbGVkV29ya2Zsb3dMb2coY2hlY2s6IENoZWNrKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjayk7XG4gIGlmICghcnVuSWQpIHtcbiAgICByZXR1cm4gJ0ZhaWxlZCBsYXRlc3QgcmVzdWx0IGhhcyBubyBHaXRIdWIgQWN0aW9ucyBydW4gbGluay4nO1xuICB9XG4gIHJldHVybiBhd2FpdCBnaEFsbG93RXhpdENvZGVzKFsncnVuJywgJ3ZpZXcnLCBydW5JZCwgJy0tbG9nLWZhaWxlZCddLCBbMV0pO1xufVxuXG5mdW5jdGlvbiBidWlsZEZhaWxlZFdvcmtmbG93RGV0YWlscyhsb2c6IHN0cmluZyk6IHtcbiAgZmFpbGVkX2xvZzogc3RyaW5nO1xufSB7XG4gIHJldHVybiB7XG4gICAgZmFpbGVkX2xvZzogcmVmaW5lRmFpbGVkV29ya2Zsb3dMb2cobG9nKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVmaW5lRmFpbGVkV29ya2Zsb3dMb2cobG9nOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzYW5pdGl6ZWRJbnB1dCA9IHNhbml0aXplRmFpbGVkV29ya2Zsb3dMb2coc3RyaXBWVENvbnRyb2xDaGFyYWN0ZXJzKGxvZykpO1xuICBpZiAoIXJ0a0F2YWlsYWJsZSkge1xuICAgIHJldHVybiBzYW5pdGl6ZWRJbnB1dDtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IHNwYXduU3luY1NhZmUoWydydGsnLCAnbG9nJ10sIHNhbml0aXplZElucHV0KTtcbiAgcmV0dXJuIHJlc3VsdC5leGl0Q29kZSA9PT0gMCAmJiByZXN1bHQub3V0cHV0LnRyaW0oKS5sZW5ndGggPiAwXG4gICAgPyBzYW5pdGl6ZUZhaWxlZFdvcmtmbG93TG9nKHJlc3VsdC5vdXRwdXQpXG4gICAgOiBzYW5pdGl6ZWRJbnB1dDtcbn1cblxuZnVuY3Rpb24gc2FuaXRpemVGYWlsZWRXb3JrZmxvd0xvZyhsb2c6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBsb2dcbiAgICAuc3BsaXQoJ1xcbicpXG4gICAgLm1hcCgobGluZSkgPT4gbGluZS5yZXBsYWNlKEZBSUxFRF9MT0dfTElORV9QUkVGSVhfUEFUVEVSTiwgJycpKVxuICAgIC5qb2luKCdcXG4nKVxuICAgIC50cmltKCk7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ09yVW5kZWZpbmVkKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID4gMCA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplSXNzdWVOdW1iZXIocmVmZXJlbmNlOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gZXh0cmFjdEdpdEh1YlJlZmVyZW5jZU51bWJlcihyZWZlcmVuY2UsICdpc3N1ZScpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUHJOdW1iZXIocmVmZXJlbmNlOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gZXh0cmFjdEdpdEh1YlJlZmVyZW5jZU51bWJlcihyZWZlcmVuY2UsICdwdWxsIHJlcXVlc3QnKTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEdpdEh1YlJlZmVyZW5jZU51bWJlcihyZWZlcmVuY2U6IHN0cmluZyB8IG51bWJlciwgbGFiZWw6ICdpc3N1ZScgfCAncHVsbCByZXF1ZXN0Jyk6IHN0cmluZyB7XG4gIGNvbnN0IHJlZmVyZW5jZVRleHQgPSBTdHJpbmcocmVmZXJlbmNlKS50cmltKCk7XG4gIGlmIChyZWZlcmVuY2VUZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiAke2xhYmVsfSByZWZlcmVuY2UgaXMgcmVxdWlyZWRgLCAyKTtcbiAgfVxuXG4gIGlmICgvXlxcZCskLy50ZXN0KHJlZmVyZW5jZVRleHQpKSB7XG4gICAgcmV0dXJuIHJlZmVyZW5jZVRleHQ7XG4gIH1cblxuICBjb25zdCBraW5kU2VnbWVudCA9IGxhYmVsID09PSAnaXNzdWUnID8gJ2lzc3VlcycgOiAncHVsbCc7XG4gIGNvbnN0IG1hdGNoID0gcmVmZXJlbmNlVGV4dC5tYXRjaChcbiAgICBuZXcgUmVnRXhwKGBeaHR0cHM/Oi8vKD86d3d3XFxcXC4pP2dpdGh1YlxcXFwuY29tL1teL10rL1teL10rLyR7a2luZFNlZ21lbnR9LyhcXFxcZCspKD86L3wkKWApXG4gICk7XG4gIGlmIChtYXRjaD8uWzFdKSB7XG4gICAgcmV0dXJuIG1hdGNoWzFdO1xuICB9XG5cbiAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IGV4cGVjdGVkIGEgR2l0SHViICR7bGFiZWx9IG51bWJlciBvciBVUkwsIHJlY2VpdmVkIFwiJHtyZWZlcmVuY2VUZXh0fVwiYCwgMik7XG59XG5cbmZ1bmN0aW9uIGZhaWxlZFdvcmtmbG93UnVuSm9iKFxuICBydW46IFdvcmtmbG93UnVuRGV0YWlscyB8IHVuZGVmaW5lZCxcbiAgam9iTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBXb3JrZmxvd1J1bkpvYiB8IHVuZGVmaW5lZCB7XG4gIGlmICghcnVuPy5qb2JzIHx8IHJ1bi5qb2JzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIHJ1bi5qb2JzLmZpbmQoKGpvYikgPT4gam9iLm5hbWUgPT09IGpvYk5hbWUpID8/XG4gICAgcnVuLmpvYnMuZmluZCgoam9iKSA9PiBqb2IuY29uY2x1c2lvbiA9PT0gJ2ZhaWx1cmUnKSA/P1xuICAgIHJ1bi5qb2JzLmZpbmQoKGpvYikgPT4gam9iLnN0YXR1cyAhPT0gJ2NvbXBsZXRlZCcpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGZhaWxlZFdvcmtmbG93UnVuU3RlcE5hbWUoam9iOiBXb3JrZmxvd1J1bkpvYiB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICgham9iPy5zdGVwcyB8fCBqb2Iuc3RlcHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgam9iLnN0ZXBzLmZpbmQoKHN0ZXApID0+IHN0ZXAuY29uY2x1c2lvbiA9PT0gJ2ZhaWx1cmUnKT8ubmFtZSA/P1xuICAgIGpvYi5zdGVwcy5maW5kKChzdGVwKSA9PiBzdGVwLnN0YXR1cyAhPT0gJ2NvbXBsZXRlZCcpPy5uYW1lXG4gICk7XG59XG5cbmNvbnN0IHJ0a0F2YWlsYWJsZSA9IGNvbW1hbmRBdmFpbGFibGUoJ3J0aycpO1xuXG5mdW5jdGlvbiBjb21tYW5kQXZhaWxhYmxlKGNvbW1hbmQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gc3Bhd25TeW5jU2FmZShbY29tbWFuZCwgJy0tdmVyc2lvbiddKS5leGl0Q29kZSA9PT0gMDtcbn1cblxuZnVuY3Rpb24gc3Bhd25TeW5jU2FmZShjb21tYW5kOiBzdHJpbmdbXSwgc3RkaW5EYXRhPzogc3RyaW5nKTogeyBleGl0Q29kZTogbnVtYmVyOyBvdXRwdXQ6IHN0cmluZyB9IHtcbiAgY29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKGNvbW1hbmRbMF0gPz8gJycsIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgIGlucHV0OiBzdGRpbkRhdGEsXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgZXhpdENvZGU6IHJlc3VsdC5zdGF0dXMgPz8gKHJlc3VsdC5lcnJvciA/IDEgOiAwKSxcbiAgICBvdXRwdXQ6IGAke3Jlc3VsdC5zdGRvdXQgPz8gJyd9JHtyZXN1bHQuc3RkZXJyID8/ICcnfWAsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzUmVwbHlJbnB1dCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHsgcmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gfSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcmVwbGllcyA9ICh2YWx1ZSBhcyB7IHJlcGxpZXM/OiB1bmtub3duIH0pLnJlcGxpZXM7XG4gIGlmICh0eXBlb2YgcmVwbGllcyAhPT0gJ29iamVjdCcgfHwgcmVwbGllcyA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHJlcGxpZXMpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMocmVwbGllcykuZXZlcnkoKHJlcGx5KSA9PiByZXBseSA9PT0gbnVsbCB8fCByZXBseSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiByZXBseSA9PT0gJ3N0cmluZycpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpc3N1ZU1lc3NhZ2VzKG93bmVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgaXNzdWVOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBpc3N1ZSA9IGF3YWl0IGZldGNoTWV0YWRhdGE8SXNzdWVNZXRhZGF0YVJlc3BvbnNlPih7XG4gICAgcXVlcnk6IElTU1VFX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBpc3N1ZU51bWJlcixcbiAgICBub3VuOiAnaXNzdWUnLFxuICAgIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/Lmlzc3VlLFxuICB9KTtcbiAgY29uc3QgbWVzc2FnZXMgPSBhd2FpdCBwYWdpbmF0ZU1lc3NhZ2VzPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlLCBJc3N1ZU1lc3NhZ2VzUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogSVNTVUVfTUVTU0FHRVNfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IGlzc3VlTnVtYmVyLFxuICAgIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8uaXNzdWU/LmNvbW1lbnRzLFxuICAgIG1hcE5vZGU6IGNvbW1lbnRNZXNzYWdlLFxuICB9KTtcblxuICByZXR1cm4geyAuLi5pc3N1ZSwgbWVzc2FnZXMgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJNZXNzYWdlcyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgcHVsbFJlcXVlc3QgPSBhd2FpdCBmZXRjaE1ldGFkYXRhPFB1bGxSZXF1ZXN0TWV0YWRhdGFSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBQUl9RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogcHJOdW1iZXIsXG4gICAgbm91bjogJ3B1bGwgcmVxdWVzdCcsXG4gICAgc2VsZWN0TWV0YWRhdGE6IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3QsXG4gIH0pO1xuICBjb25zdCBbaXNzdWVDb21tZW50cywgcmV2aWV3c10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgcHJJc3N1ZUNvbW1lbnRzKG93bmVyLCBuYW1lLCBwck51bWJlciksXG4gICAgcHJSZXZpZXdzKG93bmVyLCBuYW1lLCBwck51bWJlciksXG4gIF0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4ucHVsbFJlcXVlc3QsXG4gICAgbWVzc2FnZXM6IFsuLi5pc3N1ZUNvbW1lbnRzLCAuLi5yZXZpZXdzXS5zb3J0KGNvbXBhcmVNZXNzYWdlc0J5Q3JlYXRlZEF0KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZU1lc3NhZ2VzQnlDcmVhdGVkQXQobGVmdDogTWVzc2FnZSwgcmlnaHQ6IE1lc3NhZ2UpOiBudW1iZXIge1xuICBjb25zdCBsZWZ0Q3JlYXRlZEF0ID0gdHlwZW9mIGxlZnQuY3JlYXRlZEF0ID09PSAnc3RyaW5nJyA/IGxlZnQuY3JlYXRlZEF0IDogJyc7XG4gIGNvbnN0IHJpZ2h0Q3JlYXRlZEF0ID0gdHlwZW9mIHJpZ2h0LmNyZWF0ZWRBdCA9PT0gJ3N0cmluZycgPyByaWdodC5jcmVhdGVkQXQgOiAnJztcbiAgcmV0dXJuIGxlZnRDcmVhdGVkQXQubG9jYWxlQ29tcGFyZShyaWdodENyZWF0ZWRBdCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBySXNzdWVDb21tZW50cyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2VbXT4ge1xuICByZXR1cm4gYXdhaXQgcGFnaW5hdGVNZXNzYWdlczxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSwgUHVsbFJlcXVlc3RNZXNzYWdlc1Jlc3BvbnNlPih7XG4gICAgcXVlcnk6IFBSX0NPTU1FTlRTX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBwck51bWJlcixcbiAgICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0Py5jb21tZW50cyxcbiAgICBtYXBOb2RlOiBjb21tZW50TWVzc2FnZSxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByUmV2aWV3cyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2VbXT4ge1xuICByZXR1cm4gYXdhaXQgcGFnaW5hdGVNZXNzYWdlczxQclJldmlld05vZGUsIFB1bGxSZXF1ZXN0TWVzc2FnZXNSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBQUl9SRVZJRVdTX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBwck51bWJlcixcbiAgICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0Py5yZXZpZXdzLFxuICAgIG1hcE5vZGU6IHJldmlld01lc3NhZ2UsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYWdpbmF0ZU1lc3NhZ2VzPFROb2RlLCBUUmVzcG9uc2UgZXh0ZW5kcyBKc29uT2JqZWN0Pihjb25maWc6IHtcbiAgcXVlcnk6IHN0cmluZztcbiAgb3duZXI6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBudW1iZXI6IHN0cmluZyB8IG51bWJlcjtcbiAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlOiBUUmVzcG9uc2UpID0+IE1lc3NhZ2VDb25uZWN0aW9uPFROb2RlPiB8IHVuZGVmaW5lZDtcbiAgbWFwTm9kZTogKG5vZGU6IFROb2RlKSA9PiBNZXNzYWdlO1xufSk6IFByb21pc2U8TWVzc2FnZVtdPiB7XG4gIGxldCBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgY29uc3QgbWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXG4gIGZvciAoOzspIHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gY29uZmlnLnNlbGVjdENvbm5lY3Rpb24oXG4gICAgICBhd2FpdCBncmFwaHFsPFRSZXNwb25zZT4oY29uZmlnLnF1ZXJ5LCB7XG4gICAgICAgIG93bmVyOiBjb25maWcub3duZXIsXG4gICAgICAgIG5hbWU6IGNvbmZpZy5uYW1lLFxuICAgICAgICBudW1iZXI6IE51bWJlcihjb25maWcubnVtYmVyKSxcbiAgICAgICAgY3Vyc29yLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgaWYgKCFjb25uZWN0aW9uKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZXM7XG4gICAgfVxuXG4gICAgbWVzc2FnZXMucHVzaCguLi5jb25uZWN0aW9uLm5vZGVzLm1hcChjb25maWcubWFwTm9kZSkuZmlsdGVyKGhhc01lc3NhZ2VCb2R5KSk7XG5cbiAgICBpZiAoIWNvbm5lY3Rpb24ucGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIHJldHVybiBtZXNzYWdlcztcbiAgICB9XG4gICAgY3Vyc29yID0gY29ubmVjdGlvbi5wYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoTWV0YWRhdGE8VFJlc3BvbnNlIGV4dGVuZHMgSnNvbk9iamVjdD4oY29uZmlnOiB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIG93bmVyOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgbnVtYmVyOiBzdHJpbmcgfCBudW1iZXI7XG4gIG5vdW46IHN0cmluZztcbiAgc2VsZWN0TWV0YWRhdGE6IChyZXNwb25zZTogVFJlc3BvbnNlKSA9PiBNZXRhZGF0YU5vZGUgfCB1bmRlZmluZWQ7XG59KTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gIGNvbnN0IG1ldGFkYXRhID0gY29uZmlnLnNlbGVjdE1ldGFkYXRhKFxuICAgIGF3YWl0IGdyYXBocWw8VFJlc3BvbnNlPihjb25maWcucXVlcnksIHtcbiAgICAgIG93bmVyOiBjb25maWcub3duZXIsXG4gICAgICBuYW1lOiBjb25maWcubmFtZSxcbiAgICAgIG51bWJlcjogTnVtYmVyKGNvbmZpZy5udW1iZXIpLFxuICAgIH0pXG4gICk7XG5cbiAgaWYgKCFtZXRhZGF0YSkge1xuICAgIGV4aXRXaXRoRXJyb3IoYENvdWxkIG5vdCBmaW5kICR7Y29uZmlnLm5vdW59ICMke2NvbmZpZy5udW1iZXJ9IGluICR7Y29uZmlnLm93bmVyfS8ke2NvbmZpZy5uYW1lfS5gKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbnVtYmVyOiBtZXRhZGF0YS5udW1iZXIsXG4gICAgdGl0bGU6IG1ldGFkYXRhLnRpdGxlLFxuICAgIHVybDogbWV0YWRhdGEudXJsLFxuICAgIGF1dGhvcjogbWV0YWRhdGEuYXV0aG9yPy5sb2dpbiA/PyB1bmRlZmluZWQsXG4gICAgYm9keTogbWV0YWRhdGEuYm9keSA/PyAnJyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tbWVudE1lc3NhZ2UoY29tbWVudDogSXNzdWVNZXNzYWdlQ29tbWVudE5vZGUpOiBNZXNzYWdlIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnY29tbWVudCcsXG4gICAgYXV0aG9yOiBjb21tZW50LmF1dGhvcj8ubG9naW4gPz8gdW5kZWZpbmVkLFxuICAgIGNyZWF0ZWRBdDogY29tbWVudC5jcmVhdGVkQXQsXG4gICAgdXJsOiBjb21tZW50LnVybCxcbiAgICBib2R5OiBjb21tZW50LmJvZHksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJldmlld01lc3NhZ2UocmV2aWV3OiBQclJldmlld05vZGUpOiBNZXNzYWdlIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAncmV2aWV3JyxcbiAgICBhdXRob3I6IHJldmlldy5hdXRob3I/LmxvZ2luID8/IHVuZGVmaW5lZCxcbiAgICBzdGF0ZTogcmV2aWV3LnN0YXRlID8/IHVuZGVmaW5lZCxcbiAgICBjcmVhdGVkQXQ6IHJldmlldy5zdWJtaXR0ZWRBdCA/PyB1bmRlZmluZWQsXG4gICAgdXJsOiByZXZpZXcudXJsLFxuICAgIGJvZHk6IHJldmlldy5ib2R5ID8/ICcnLFxuICB9O1xufVxuXG5mdW5jdGlvbiBoYXNNZXNzYWdlQm9keShtZXNzYWdlOiBNZXNzYWdlKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgbWVzc2FnZS5ib2R5ID09PSAnc3RyaW5nJyAmJiBtZXNzYWdlLmJvZHkubGVuZ3RoID4gMDtcbn1cbiIsImltcG9ydCB7IGZldGNoSXNzdWVNZXNzYWdlcyB9IGZyb20gJy4uL3ByL3ByQ29tbWFuZHMuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRQbGFuUHJvbXB0KGlzc3VlTnVtYmVyOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBpc3N1ZVlhbWwgPSBhd2FpdCBmZXRjaElzc3VlTWVzc2FnZXMoaXNzdWVOdW1iZXIpO1xuXG4gIHJldHVybiBgXG5QbGFuIGEgR2l0SHViIGlzc3VlIGJ5IGdhdGhlcmluZyBjb250ZXh0LCB3cml0aW5nIGEgY29kZS1mb2N1c2VkIHBsYW4sIGFuZCBwb3N0aW5nIHRoYXQgcGxhbiBiYWNrIHRvIHRoZSBpc3N1ZS5cblRoZSB0YXJnZXQgaXNzdWUgbnVtYmVyIGlzICMke2lzc3VlTnVtYmVyfS5cbkhlcmUgaXMgdGhlIGZldGNoZWQgaXNzdWUgY29udGV4dCBhcyBZQU1MOlxuXFxgXFxgXFxgeWFtbFxuJHtpc3N1ZVlhbWwudHJpbSgpfVxuXFxgXFxgXFxgXG5cbkZvbGxvdyB0aGlzIHdvcmtmbG93OlxuMS4gUmVhZCB0aGUgZmV0Y2hlZCBpc3N1ZSBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBjYXJlZnVsbHkuXG4yLiBDb2xsZWN0IGVub3VnaCBzdXBwb3J0aW5nIGluZm9ybWF0aW9uIGJlZm9yZSBwbGFubmluZzpcbiAgIC0gUmVhZCB0aGUgaXNzdWUgY2FyZWZ1bGx5IGFuZCBpZGVudGlmeSB0aGUgZXhhY3QgcmVxdWVzdGVkIGJlaGF2aW9yLCBjb25zdHJhaW50cywgYW5kIG9wZW4gcXVlc3Rpb25zLlxuICAgLSBJbnNwZWN0IHRoZSByZWxldmFudCBjb2RlLCBzdXJyb3VuZGluZyBjYWxsIHNpdGVzLCByZWxhdGVkIHR5cGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbiwgcmVjZW50IGRpZmZzLCBhbmQgYW55IG90aGVyIGxvY2FsIGNvbnRleHQgbmVlZGVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZS5cbiAgIC0gSWYgY29kZSBpbnNwZWN0aW9uIGlzIGVub3VnaCwgdXNlIHRoZSBjdXJyZW50IGNvZGViYXNlIGFzIHRoZSBwcmltYXJ5IGV2aWRlbmNlLlxuICAgLSBJZiB0aGUgaXNzdWUgZGVwZW5kcyBvbiBydW50aW1lIGJlaGF2aW9yLCByZXByb2R1Y2UgaXQgd2l0aCB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGV4cGVyaW1lbnQsIHN1Y2ggYXMgYSBmb2N1c2VkIGNvbW1hbmQsIGEgdGlueSBzY3JpcHQsIGEgdGVtcG9yYXJ5IGxvY2FsIGFzc2VydGlvbiwgb3IgYW5vdGhlciBuYXJyb3cgY2hlY2sgdGhhdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIGludGVuZGVkIGJlaGF2aW9yLlxuICAgLSBJZiB0aGUgaXNzdWUgZGVwZW5kcyBvbiBmcmFtZXdvcmssIGxpYnJhcnksIHBsYXRmb3JtLCBvciBsYW5ndWFnZSBiZWhhdmlvciwgY29uZmlybSBpdCBhZ2FpbnN0IHRoZSBsYXRlc3Qgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBvciBhbm90aGVyIHByaW1hcnkgc291cmNlIGluc3RlYWQgb2YgcmVseWluZyBvbiBtZW1vcnkuXG4zLiBQcm9wb3NlIGEgY29kZS1mb2N1c2VkIGltcGxlbWVudGF0aW9uIHBsYW4gZ3JvdW5kZWQgaW4gdGhlIGlzc3VlLCBmZXRjaGVkIG1lc3NhZ2VzLCBhbmQgdGhlIGV2aWRlbmNlIHlvdSBjb2xsZWN0ZWQuIERlc2NyaWJlIHdoYXQgY29kZSBzaG91bGQgYmUgd3JpdHRlbiwgd2hlcmUgaXQgc2hvdWxkIGxpdmUsIGFuZCBob3cgaXQgc2hvdWxkIHdvcmsuIFByZWZlciBjb25jcmV0ZSBndWlkYW5jZSBzdWNoIGFzOlxuICAgLSBXaGljaCBmaWxlcywgbW9kdWxlcywgY2xhc3NlcywgZnVuY3Rpb25zLCB0eXBlcywgdGVzdHMsIG9yIGNvbmZpZ3VyYXRpb24gc2hvdWxkIGJlIGFkZGVkIG9yIGNoYW5nZWQuXG4gICAtIEhvdyB0aGUgbmV3IG9yIGNoYW5nZWQgbG9naWMgc2hvdWxkIGZsb3cgdGhyb3VnaCB0aGUgc3lzdGVtLlxuICAgLSBXaGF0IGludGVyZmFjZXMsIGRhdGEgc2hhcGVzLCBjb25kaXRpb24gYnJhbmNoZXMsIG9yIHNpZGUgZWZmZWN0cyBuZWVkIHRvIGNoYW5nZS5cbiAgIC0gV2hpY2ggZWRnZSBjYXNlcywgcmlza3MsIGFuZCB2YWxpZGF0aW9uIHN0ZXBzIG1hdHRlciBmb3IgdGhlIGNvZGUgY2hhbmdlLlxuICAgLSBBbnkgbWlzc2luZyBpbmZvcm1hdGlvbiBvciBhc3N1bXB0aW9ucyB0aGF0IGFmZmVjdCB0aGUgZGVzaWduLlxuNC4gUG9zdCB0aGUgcGxhbiBiYWNrIHRvIGlzc3VlICMke2lzc3VlTnVtYmVyfSBmcm9tIHRoZSByZXBvc2l0b3J5IHJvb3QgdGhlbiBwcmludCB0aGUgaXNzdWUgVVJMLlxuXG5Gb3JtYXQgdGhlIGlzc3VlIGNvbW1lbnQgZXhhY3RseSBsaWtlIHRoaXMgKHdpdGhvdXQgdHJpcGxlIGJhY2t0aWNrcyk6XG5cXGBcXGBcXGBcbiMjIENvZGUgUGxhblxuXG4jIyMgRmlsZXMgLyBNb2R1bGVzIHRvIENoYW5nZVxuXG4tIEZpbGUgb3IgbW9kdWxlIGFuZCB3aHkgaXQgbmVlZHMgdG8gY2hhbmdlXG5cbiMjIyBDb2RlIHRvIFdyaXRlXG5cbi0gRnVuY3Rpb24sIHR5cGUsIGNsYXNzLCBvciBicmFuY2ggdG8gYWRkIG9yIG1vZGlmeVxuLSBIb3cgdGhlIGxvZ2ljIHNob3VsZCB3b3JrXG5cbiMjIyBWYWxpZGF0aW9uXG5cbi0gVGVzdCBvciBjaGVjayB0byBjb25maXJtIHRoZSBiZWhhdmlvclxuXG4jIyBSaXNrcyAvIE9wZW4gUXVlc3Rpb25zXG5cbi0gUmlzayBvciB1bmNlcnRhaW50eVxuXFxgXFxgXFxgXG5gLnRyaW0oKTtcbn1cbiIsImltcG9ydCB7IHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudEJhc2VCcmFuY2goKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIChhd2FpdCBjdXJyZW50UHVsbFJlcXVlc3RCYXNlQnJhbmNoKCkpID8/IChhd2FpdCBjdXJyZW50RGVmYXVsdEJyYW5jaCgpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnREZWZhdWx0QnJhbmNoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiByZXF1aXJlTm9uRW1wdHkoXG4gICAgKFxuICAgICAgYXdhaXQgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyhbXG4gICAgICAgICdnaCcsXG4gICAgICAgICdyZXBvJyxcbiAgICAgICAgJ3ZpZXcnLFxuICAgICAgICAnLS1qc29uJyxcbiAgICAgICAgJ2RlZmF1bHRCcmFuY2hSZWYnLFxuICAgICAgICAnLS10ZW1wbGF0ZScsXG4gICAgICAgICd7ey5kZWZhdWx0QnJhbmNoUmVmLm5hbWV9fScsXG4gICAgICBdKVxuICAgICkudHJpbSgpLFxuICAgICdFcnJvcjogY291bGQgbm90IGRldGVybWluZSB0aGUgZGVmYXVsdCBicmFuY2gnXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2goKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBiYXNlQnJhbmNoID0gKFxuICAgICAgYXdhaXQgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyhbJ2doJywgJ3ByJywgJ3ZpZXcnLCAnLS1qc29uJywgJ2Jhc2VSZWZOYW1lJywgJy0tdGVtcGxhdGUnLCAne3suYmFzZVJlZk5hbWV9fSddKVxuICAgICkudHJpbSgpO1xuICAgIHJldHVybiBiYXNlQnJhbmNoLmxlbmd0aCA+IDAgPyBiYXNlQnJhbmNoIDogdW5kZWZpbmVkO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVOb25FbXB0eSh2YWx1ZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG4iLCJpbXBvcnQgeyBjdXJyZW50QmFzZUJyYW5jaCB9IGZyb20gJy4uL3JlcG8vZGVmYXVsdEJyYW5jaC5qcyc7XG5pbXBvcnQgeyBOT19DT05DRVJOX01FU1NBR0UgfSBmcm9tICcuLi9yZXZpZXcvbm9Db25jZXJuLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkUmV2aWV3UHJvbXB0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGJhc2VCcmFuY2ggPSBhd2FpdCBjdXJyZW50QmFzZUJyYW5jaCgpO1xuICByZXR1cm4gYFxuUmV2aWV3IHRoZSBjdXJyZW50IGJyYW5jaCBhZ2FpbnN0IGl0cyBiYXNlIGJyYW5jaCAke2Jhc2VCcmFuY2h9IHZpYSBcXGBnaXQgZGlmZiBcIiQoZ2l0IG1lcmdlLWJhc2UgJHtiYXNlQnJhbmNofSBIRUFEKVwiXFxgLlxuRm9yIGVhY2ggcmV2aWV3IGNvbW1lbnQsIGRvIHRoZSBmb2xsb3dpbmcgYmVmb3JlIG1vdmluZyB0byB0aGUgbmV4dCBjb21tZW50OlxuMS4gQ29sbGVjdCB0aGUgaW5mb3JtYXRpb24geW91IG5lZWQ6XG4gICAtIFJlYWQgdGhlIGNvbW1lbnQgY2FyZWZ1bGx5IGFuZCBpZGVudGlmeSB0aGUgZXhhY3QgY2xhaW0gYmVpbmcgbWFkZS5cbiAgIC0gSW5zcGVjdCB0aGUgcmVmZXJlbmNlZCBjb2RlIGFuZCB0aGUgc3Vycm91bmRpbmcgY2FsbCBzaXRlcywgcmVsYXRlZCB0eXBlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb24sIGFuZCByZWNlbnQgZGlmZnMgd2hlbiB0aGV5IGFmZmVjdCB0aGUgY2xhaW0uXG4yLiBHYXRoZXIgc3VwcG9ydGluZyBldmlkZW5jZTpcbiAgIC0gSWYgY29kZSBpbnNwZWN0aW9uIGlzIGVub3VnaCwgdXNlIHRoZSBjdXJyZW50IGNvZGViYXNlIGFzIHRoZSBwcmltYXJ5IGV2aWRlbmNlLlxuICAgLSBJZiB0aGUgY2xhaW0gaXMgYWJvdXQgcnVudGltZSBiZWhhdmlvciwgcmVwcm9kdWNlIGl0IHdpdGggdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBleHBlcmltZW50LCBzdWNoIGFzIGEgZm9jdXNlZCBjb21tYW5kLCBhIHRpbnkgc2NyaXB0LCBhIHRlbXBvcmFyeSBsb2NhbCBhc3NlcnRpb24sIG9yIGFub3RoZXIgbmFycm93IGNoZWNrIHRoYXQgZG9lcyBub3QgY2hhbmdlIHRoZSBpbnRlbmRlZCBiZWhhdmlvci5cbiAgIC0gSWYgdGhlIGNsYWltIGRlcGVuZHMgb24gZnJhbWV3b3JrLCBsaWJyYXJ5LCBwbGF0Zm9ybSwgb3IgbGFuZ3VhZ2UgYmVoYXZpb3IsIGNvbmZpcm0gaXQgYWdhaW5zdCB0aGUgbGF0ZXN0IG9mZmljaWFsIGRvY3VtZW50YXRpb24gb3IgYW5vdGhlciBwcmltYXJ5IHNvdXJjZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gbWVtb3J5LlxuMy4gSnVkZ2Ugd2hldGhlciB0aGUgY29tbWVudCBpcyB2YWxpZDpcbiAgIC0gTWFyayBpdCB2YWxpZCBvbmx5IHdoZW4gdGhlIGF2YWlsYWJsZSBldmlkZW5jZSBzaG93cyB0aGUgcmVwb3J0ZWQgaXNzdWUgaXMgc3RpbGwgcmVhbCBpbiB0aGUgY3VycmVudCBjb2RlYmFzZS5cbiAgIC0gT3RoZXJ3aXNlLCBtYXJrIGl0IG5vdCB2YWxpZC5cblJlcG9ydCBvbmx5IHRoZSBjb21tZW50cyB5b3UganVkZ2VkIHZhbGlkLCBhbmQgaW5jbHVkZSBhIHNob3J0IGJhc2lzIGZvciBlYWNoIG9uZSB0aGF0IGNpdGVzIHRoZSBldmlkZW5jZSB5b3UgdXNlZCwgc3VjaCBhcyB0aGUgZmFpbGluZyBzY2VuYXJpbywgZXhwZXJpbWVudCByZXN1bHQsIG9yIHJlbGV2YW50IG9mZmljaWFsIGRvY3VtZW50YXRpb24uIERvIG5vdCBtb2RpZnkgY29kZS5cbklmIHRoZXJlIGFyZSBubyB2YWxpZCByZXZpZXcgY29tbWVudHMsIHJlc3BvbmQgd2l0aCBleGFjdGx5OiBcXGAke05PX0NPTkNFUk5fTUVTU0FHRX1cXGBcbmAudHJpbSgpO1xufVxuIiwiaW1wb3J0IHsgY3VycmVudEJhc2VCcmFuY2ggfSBmcm9tICcuLi9yZXBvL2RlZmF1bHRCcmFuY2guanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRTaW1wbGlmeVByb21wdCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBiYXNlQnJhbmNoID0gYXdhaXQgY3VycmVudEJhc2VCcmFuY2goKTtcbiAgcmV0dXJuIGBcblNpbXBsaWZ5IHRoZSBjdXJyZW50IGJyYW5jaCBhZ2FpbnN0IGl0cyBiYXNlIGJyYW5jaCB1c2luZyBcXGBnaXQgZGlmZiBcIiQoZ2l0IG1lcmdlLWJhc2UgJHtiYXNlQnJhbmNofSBIRUFEKVwiXFxgLlxuRmlyc3QsIGluc3BlY3QgdGhlIGRpZmYgYW5kIHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgZWFjaCBjaGFuZ2VkIGFyZWEuIFRoaXMgaW5jbHVkZXMgbmVhcmJ5IGZ1bmN0aW9ucywgdHlwZXMsIGNhbGwgc2l0ZXMsIHRlc3RzLCBjb25maWd1cmF0aW9ucywgYW5kIGFueSBvdGhlciBmaWxlcyB0aGF0IGhlbHAgZGV0ZXJtaW5lIGlmIHRoZSBjaGFuZ2UgaXMgdHJ1bHkgbmVjZXNzYXJ5LlxuTGV2ZXJhZ2UgdGhpcyBjb250ZXh0IHRvIGlkZW50aWZ5IHJlZHVuZGFuY2llcyB0aGF0IGNhbiBiZSBzYWZlbHkgcmVtb3ZlZCBvciBzaW1wbGlmaWVkLiBMb29rIGZvciBkdXBsaWNhdGUgbG9naWMsIHJlcGVhdGVkIGNvbmRpdGlvbmFscywgdW5uZWNlc3NhcnkgYWJzdHJhY3Rpb25zLCBvdmVybGFwcGluZyBjb2RlIHBhdGhzLCBkZWFkIGNvZGUsIG9yIGVkaXRzIG1hZGUgb2Jzb2xldGUgdXBvbiB1bmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIGNvbnRleHQuXG5cblByaW9yaXRpemUgc2ltcGxpZmljYXRpb25zIHRoYXQgcmVkdWNlIHRoZSByZXZpZXdlcidzIGJ1cmRlbiwgc3VjaCBhczpcbi0gUmVtb3ZpbmcgcmVkdW5kYW50IGVkaXRzIG9yIGRlYWQgY29kZS5cbi0gRWxpbWluYXRpbmcgb3IgbWVyZ2luZyBkdXBsaWNhdGVkIGxvZ2ljIGRpc2NvdmVyZWQgYnkgY29tcGFyaW5nIHRoZSBkaWZmIHdpdGggcmVsYXRlZCBjb2RlLlxuLSBGbGF0dGVuaW5nIHVubmVjZXNzYXJpbHkgY29tcGxleCBsb2dpYyBpbnRyb2R1Y2VkIGluIHRoZSBkaWZmIChlLmcuLCB1c2luZyBlYXJseSByZXR1cm5zIHRvIHJlZHVjZSBuZXN0aW5nLCBzaW1wbGlmeWluZyBib29sZWFuIGV4cHJlc3Npb25zLCBvciByZW1vdmluZyByZWR1bmRhbnQgd3JhcHBlciBmdW5jdGlvbnMpLlxuXG5Db21taXQgYW5kIHB1c2ggeW91ciBjaGFuZ2VzLiBBZnRlcndhcmQsIHN1bW1hcml6ZSB0aGUgcmVkdW5kYW5jaWVzIG9yIHVubmVjZXNzYXJ5IGNvbXBsZXhpdHkgeW91IGhhdmUgcmVtb3ZlZC5cbmAudHJpbSgpO1xufVxuIiwiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG5pbXBvcnQgeyBDb21tYW5kLCBPcHRpb24gfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHtcbiAgY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZSxcbiAgZGlzcGxheUFnZW50TmFtZSxcbiAgcnVuQWdlbnRDb21tYW5kLFxuICBydW5BbGxBZ2VudENvbW1hbmRzLFxufSBmcm9tICcuL2FnZW50L2FnZW50Q29tbWFuZHMuanMnO1xuaW1wb3J0IHtcbiAgY2hlY2tQckNpLFxuICBmZXRjaElzc3VlTWVzc2FnZXMsXG4gIGZldGNoUHJNZXNzYWdlcyxcbiAgbGlzdFByUmV2aWV3VGhyZWFkcyxcbiAgbm9ybWFsaXplSXNzdWVOdW1iZXIsXG4gIG9wZW5QcixcbiAgcmVhZFJlcGxpZXNGcm9tU3RkaW4sXG4gIHJlYWRTdGRpblRleHQsXG4gIHJlc29sdmVQclJldmlld1RocmVhZHMsXG59IGZyb20gJy4vcHIvcHJDb21tYW5kcy5qcyc7XG5pbXBvcnQgeyBidWlsZFBsYW5Qcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvcGxhblByb21wdC5qcyc7XG5pbXBvcnQgeyBidWlsZFJldmlld1Byb21wdCB9IGZyb20gJy4vcHJvbXB0cy9yZXZpZXdQcm9tcHQuanMnO1xuaW1wb3J0IHsgYnVpbGRTaW1wbGlmeVByb21wdCB9IGZyb20gJy4vcHJvbXB0cy9zaW1wbGlmeVByb21wdC5qcyc7XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtLm5hbWUoJ2FnZW50LXNraWxscycpLmRlc2NyaXB0aW9uKCdDTEkgY29tbWFuZHMgZm9yIHRoZSBza2lsbHMgaW4gdGhpcyByZXBvc2l0b3J5Jykuc2hvd0hlbHBBZnRlckVycm9yKCk7XG5cbmFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQoe1xuICBuYW1lOiAncmV2aWV3JyxcbiAgZGVzY3JpcHRpb246ICdSdW4gcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoIHdpdGggdGhlIHNlbGVjdGVkIGFnZW50JyxcbiAgb3B0aW9uRGVzY3JpcHRpb246ICdVc2UgYSByZXZpZXcgYWdlbnQnLFxuICBjaG9pY2VzOiBbJ2FsbCcsICdjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10sXG4gIHJ1bjogKG1vZGUpID0+XG4gICAgbW9kZSA9PT0gJ2FsbCdcbiAgICAgID8gcnVuQWxsQWdlbnRDb21tYW5kcyhidWlsZFJldmlld1Byb21wdCgpLCB7XG4gICAgICAgICAgYWxsQWdlbnRzTGFiZWw6ICdyZXZpZXcgYWdlbnRzJyxcbiAgICAgICAgICBtYXBPdXRwdXQ6IChhZ2VudCwgb3V0cHV0KSA9PiB7XG4gICAgICAgICAgICBpZiAoY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZShvdXRwdXQpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYCMjICR7ZGlzcGxheUFnZW50TmFtZShhZ2VudCl9XFxuXFxuJHtvdXRwdXR9YDtcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgOiBydW5BZ2VudENvbW1hbmQobW9kZSwgYnVpbGRSZXZpZXdQcm9tcHQoKSksXG59KTtcblxuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctY29kZXgnLCAnUnVuIENvZGV4IHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY29kZXgnLCBidWlsZFJldmlld1Byb21wdCgpKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgncmV2aWV3LWNsYXVkZScsICdSdW4gQ2xhdWRlIENvZGUgcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjbGF1ZGUnLCBidWlsZFJldmlld1Byb21wdCgpKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgncmV2aWV3LWdlbWluaScsICdSdW4gR2VtaW5pIENMSSByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2dlbWluaScsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpXG4pO1xuXG5hZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kKHtcbiAgbmFtZTogJ3BsYW4nLFxuICBkZXNjcmlwdGlvbjogJ1J1biBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUgd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQnLFxuICBvcHRpb25EZXNjcmlwdGlvbjogJ1VzZSBhIHBsYW5uaW5nIGFnZW50JyxcbiAgY2hvaWNlczogWydhbGwnLCAnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddLFxuICBhcmd1bWVudE5hbWU6ICc8aXNzdWU+JyxcbiAgYXJndW1lbnREZXNjcmlwdGlvbjogJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJyxcbiAgcnVuOiAobW9kZSwgaXNzdWVSZWZlcmVuY2UpID0+XG4gICAgbW9kZSA9PT0gJ2FsbCdcbiAgICAgID8gcnVuQWxsQWdlbnRDb21tYW5kcyhidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSwge1xuICAgICAgICAgIGFsbEFnZW50c0xhYmVsOiAncGxhbm5pbmcgYWdlbnRzJyxcbiAgICAgICAgfSlcbiAgICAgIDogcnVuQWdlbnRDb21tYW5kKG1vZGUsIGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpKSxcbn0pO1xuXG5hZGRBZ2VudENvbW1hbmQoJ3BsYW4tY29kZXgnLCAnUnVuIENvZGV4IHBsYW5uaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBpc3N1ZScsIHtcbiAgYXJndW1lbnROYW1lOiAnPGlzc3VlPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcsXG4gIHJ1bjogKGlzc3VlUmVmZXJlbmNlKSA9PiBydW5BZ2VudENvbW1hbmQoJ2NvZGV4JywgYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSkpLFxufSk7XG5hZGRBZ2VudENvbW1hbmQoJ3BsYW4tY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUnLCB7XG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChpc3N1ZVJlZmVyZW5jZSkgPT4gcnVuQWdlbnRDb21tYW5kKCdjbGF1ZGUnLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSksXG59KTtcbmFkZEFnZW50Q29tbWFuZCgncGxhbi1nZW1pbmknLCAnUnVuIEdlbWluaSBDTEkgcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlJywge1xuICBhcmd1bWVudE5hbWU6ICc8aXNzdWU+JyxcbiAgYXJndW1lbnREZXNjcmlwdGlvbjogJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJyxcbiAgcnVuOiAoaXNzdWVSZWZlcmVuY2UpID0+IHJ1bkFnZW50Q29tbWFuZCgnZ2VtaW5pJywgYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSkpLFxufSk7XG5cbmFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQoe1xuICBuYW1lOiAnc2ltcGxpZnknLFxuICBkZXNjcmlwdGlvbjogJ1J1biBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcsXG4gIG9wdGlvbkRlc2NyaXB0aW9uOiAnVXNlIGEgc2ltcGxpZnkgYWdlbnQnLFxuICBjaG9pY2VzOiBbJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSxcbiAgcnVuOiAoYWdlbnQpID0+IHJ1bkFnZW50Q29tbWFuZChhZ2VudCwgYnVpbGRTaW1wbGlmeVByb21wdCgpKSxcbn0pO1xuXG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWNvZGV4JywgJ1J1biBDb2RleCBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY29kZXgnLCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdzaW1wbGlmeS1jbGF1ZGUnLCAnUnVuIENsYXVkZSBDb2RlIFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjbGF1ZGUnLCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdzaW1wbGlmeS1nZW1pbmknLCAnUnVuIEdlbWluaSBDTEkgUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2dlbWluaScsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSlcbik7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ29wZW4tcHInKVxuICAuZGVzY3JpcHRpb24oJ0NyZWF0ZSBhIHB1bGwgcmVxdWVzdCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVhZFN0ZGluVGV4dCgpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IG9wZW5Qcihib2R5IHx8IHVuZGVmaW5lZCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7b3V0cHV0fVxcbmApO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnY2hlY2stcHItY2knKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgdGhlIGxhdGVzdCB0ZXN0LXJlbGF0ZWQgQ0kgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja1ByQ2koKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShyZXN1bHQub3V0cHV0KTtcbiAgICBwcm9jZXNzLmV4aXQocmVzdWx0LmV4aXRDb2RlKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2ZldGNoLWlzc3VlJylcbiAgLmRlc2NyaXB0aW9uKCdGZXRjaCBhbiBpc3N1ZSBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBhcyBZQU1MJylcbiAgLmFyZ3VtZW50KCc8aXNzdWU+JywgJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jIChpc3N1ZVJlZmVyZW5jZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZmV0Y2hJc3N1ZU1lc3NhZ2VzKGlzc3VlUmVmZXJlbmNlKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnZmV0Y2gtcHInKVxuICAuZGVzY3JpcHRpb24oJ0ZldGNoIGEgcHVsbCByZXF1ZXN0IGJvZHkgYW5kIHRpbWVsaW5lIG1lc3NhZ2VzIGFzIFlBTUwsIGV4Y2x1ZGluZyBpbmxpbmUgY29tbWVudHMnKVxuICAuYXJndW1lbnQoJ1twcl0nLCAnR2l0SHViIHB1bGwgcmVxdWVzdCBudW1iZXIgb3IgVVJMOyBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBicmFuY2ggcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jIChwclJlZmVyZW5jZT86IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZldGNoUHJNZXNzYWdlcyhwclJlZmVyZW5jZSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2xpc3QtcHItcmV2aWV3LXRocmVhZHMnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcyBmb3IgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBsaXN0UHJSZXZpZXdUaHJlYWRzKCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3Jlc29sdmUtcHItcmV2aWV3LXRocmVhZHMnKVxuICAuZGVzY3JpcHRpb24oJ1JlcGx5IHRvIHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMgYW5kIHJlc29sdmUgdGhlbScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVwbGllcyA9IGF3YWl0IHJlYWRSZXBsaWVzRnJvbVN0ZGluKCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyhyZXBsaWVzKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxuYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHByb2Nlc3MuYXJndik7XG5cbmZ1bmN0aW9uIGFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQ8VE1vZGUgZXh0ZW5kcyBzdHJpbmc+KGNvbmZpZzoge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIG9wdGlvbkRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGNob2ljZXM6IFtUTW9kZSwgLi4uVE1vZGVbXV07XG4gIGFyZ3VtZW50TmFtZT86IHN0cmluZztcbiAgYXJndW1lbnREZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcnVuOiAobW9kZTogVE1vZGUsIGFyZ3VtZW50OiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nPjtcbn0pOiB2b2lkIHtcbiAgY29uc3QgY29tbWFuZCA9IHByb2dyYW0uY29tbWFuZChjb25maWcubmFtZSkuZGVzY3JpcHRpb24oY29uZmlnLmRlc2NyaXB0aW9uKS5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSk7XG4gIGlmIChjb25maWcuYXJndW1lbnROYW1lKSB7XG4gICAgY29tbWFuZC5hcmd1bWVudChjb25maWcuYXJndW1lbnROYW1lLCBjb25maWcuYXJndW1lbnREZXNjcmlwdGlvbik7XG4gIH1cblxuICBjb21tYW5kXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFnZW50IDxhZ2VudD4nLCBjb25maWcub3B0aW9uRGVzY3JpcHRpb24pLmNob2ljZXMoY29uZmlnLmNob2ljZXMpLm1ha2VPcHRpb25NYW5kYXRvcnkoKSlcbiAgICAuYWN0aW9uKGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICAgIGNvbnN0IFthcmd1bWVudE9yT3B0aW9ucywgbWF5YmVPcHRpb25zXSA9IGFyZ3MgYXMgW3N0cmluZyB8IHsgYWdlbnQ6IFRNb2RlIH0sIHsgYWdlbnQ6IFRNb2RlIH0gfCB1bmRlZmluZWRdO1xuICAgICAgY29uc3QgYXJndW1lbnQgPSB0eXBlb2YgYXJndW1lbnRPck9wdGlvbnMgPT09ICdzdHJpbmcnID8gYXJndW1lbnRPck9wdGlvbnMgOiAnJztcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSAodHlwZW9mIGFyZ3VtZW50T3JPcHRpb25zID09PSAnc3RyaW5nJyA/IG1heWJlT3B0aW9ucyA6IGFyZ3VtZW50T3JPcHRpb25zKSBhcyB7IGFnZW50OiBUTW9kZSB9O1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgY29uZmlnLnJ1bihvcHRpb25zLmFnZW50LCBhcmd1bWVudCkpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRBZ2VudENvbW1hbmQoXG4gIG5hbWU6IHN0cmluZyxcbiAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgY29uZmlnT3JSdW46XG4gICAgfCAoKCkgPT4gUHJvbWlzZTxzdHJpbmc+KVxuICAgIHwge1xuICAgICAgICBhcmd1bWVudE5hbWU6IHN0cmluZztcbiAgICAgICAgYXJndW1lbnREZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICAgICAgcnVuOiAoYXJndW1lbnQ6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+O1xuICAgICAgfVxuKTogdm9pZCB7XG4gIGNvbnN0IGNvbW1hbmQgPSBwcm9ncmFtLmNvbW1hbmQobmFtZSkuZGVzY3JpcHRpb24oZGVzY3JpcHRpb24pLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKTtcblxuICBpZiAodHlwZW9mIGNvbmZpZ09yUnVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29tbWFuZC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgY29uZmlnT3JSdW4oKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29tbWFuZC5hcmd1bWVudChjb25maWdPclJ1bi5hcmd1bWVudE5hbWUsIGNvbmZpZ09yUnVuLmFyZ3VtZW50RGVzY3JpcHRpb24pLmFjdGlvbihhc3luYyAoYXJndW1lbnQ6IHN0cmluZykgPT4ge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IGNvbmZpZ09yUnVuLnJ1bihhcmd1bWVudCkpO1xuICB9KTtcbn1cbiJdLCJuYW1lcyI6WyJXQUlUX1VQX1RPX09ORV9IT1VSX1dBUk5JTkciLCJydW5Db21tYW5kV2l0aFByb2dyZXNzIiwiX3giLCJfeDIiLCJfcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyIsImFwcGx5IiwidGhpcyIsImFyZ3VtZW50cyIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yIiwibSIsIl9jYWxsZWUiLCJjb21tYW5kIiwib3B0aW9ucyIsIl9jb21tYW5kJCIsInByb2MiLCJzdG9wV2FpdFByb2dyZXNzIiwiY29tbWFuZExvZ2dlciIsIl95aWVsZCRQcm9taXNlJGFsbCIsIl95aWVsZCRQcm9taXNlJGFsbDIiLCJzdGRvdXQiLCJzdGRlcnIiLCJvdXRwdXQiLCJ3IiwiX2NvbnRleHQiLCJwIiwibiIsInNwYXduIiwic2xpY2UiLCJzdGRpbyIsImNyZWF0ZVdhaXRQcm9ncmVzcyIsIndhaXRNZXNzYWdlIiwid2FpdEludGVydmFsU2Vjb25kcyIsImNyZWF0ZUNvbW1hbmRMb2dnZXIiLCJsb2dGaWxlUGF0aCIsInYiLCJQcm9taXNlIiwiYWxsIiwic3RyZWFtVG9UZXh0IiwiY2h1bmsiLCJ3cml0ZSIsInJlc29sdmUiLCJyZWplY3QiLCJvbmNlIiwiY29kZSIsIl9zbGljZWRUb0FycmF5IiwiYSIsImNvbmNhdCIsIkVycm9yIiwiam9pbiIsImNsb3NlIiwiZiIsIl94MyIsIl94NCIsIl9zdHJlYW1Ub1RleHQiLCJfY2FsbGVlMiIsInN0cmVhbSIsIm9uQ2h1bmsiLCJjaHVua3MiLCJfaXRlcmF0b3JBYnJ1cHRDb21wbGV0aW9uIiwiX2RpZEl0ZXJhdG9yRXJyb3IiLCJfaXRlcmF0b3JFcnJvciIsIl9pdGVyYXRvciIsIl9zdGVwIiwiY2h1bmtUZXh0IiwiX3QiLCJfY29udGV4dDIiLCJfYXN5bmNJdGVyYXRvciIsIm5leHQiLCJkb25lIiwidmFsdWUiLCJ0b1N0cmluZyIsInB1c2giLCJ3cml0ZVByb2dyZXNzIiwibWVzc2FnZSIsInByb2Nlc3MiLCJ0aW1lciIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsIl94NSIsIl9jcmVhdGVDb21tYW5kTG9nZ2VyIiwiX2NhbGxlZTYiLCJ3YXJuIiwiX3QyIiwiX2NvbnRleHQ2IiwiX2Nsb3NlIiwiX2NhbGxlZTMiLCJfY29udGV4dDMiLCJlcnJvciIsIlN0cmluZyIsIm1rZGlyIiwiZGlybmFtZSIsInJlY3Vyc2l2ZSIsImNyZWF0ZVdyaXRlU3RyZWFtIiwiZmxhZ3MiLCJvbiIsIndyaXRhYmxlIiwiX2Nsb3NlMiIsIl9jYWxsZWU0IiwiX2NvbnRleHQ0IiwiZW5kIiwiX2Nsb3NlMyIsIl9jYWxsZWU1IiwiX2NvbnRleHQ1IiwiTk9fQ09OQ0VSTl9NRVNTQUdFIiwiQUdFTlRfTkFNRVMiLCJDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYIiwiUmVnRXhwIiwicnVuQWxsQWdlbnRDb21tYW5kcyIsIl9ydW5BbGxBZ2VudENvbW1hbmRzIiwicHJvbXB0IiwicmVzb2x2ZWRQcm9tcHQiLCJvdXRwdXRzIiwiYWxsQWdlbnRzTGFiZWwiLCJ3YWl0TWVzc2FnZUZvciIsIm1hcCIsImFnZW50IiwiX29wdGlvbnMkbWFwT3V0cHV0IiwiX29wdGlvbnMkbWFwT3V0cHV0MiIsIl9vcHRpb25zIiwicnVuQWdlbnRDb21tYW5kIiwidHJpbSIsIm1hcE91dHB1dCIsImNhbGwiLCJkaXNwbGF5QWdlbnROYW1lIiwiZmlsdGVyIiwidW5kZWZpbmVkIiwibGVuZ3RoIiwiX3J1bkFnZW50Q29tbWFuZCIsIl90MyIsImNyZWF0ZUFnZW50Q29tbWFuZCIsImFnZW50TG9nRmlsZVBhdGgiLCJ0YXJnZXQiLCJub3ciLCJEYXRlIiwiX21hcDIiLCJnZXRNb250aCIsImdldERhdGUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwidHdvRGlnaXRzIiwibW9udGgiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwicGFkU3RhcnQiLCJ5YW1sU3RyaW5naWZ5T3B0aW9ucyIsImJsb2NrUXVvdGUiLCJsaW5lV2lkdGgiLCJURVNUX1JFTEFURURfUEFUVEVSTiIsIlRFU1RfQ0hFQ0tfV0FJVF9NRVNTQUdFIiwiV09SS0ZMT1dfUlVOX0pTT05fRklFTERTIiwiRkFJTEVEX0xPR19MSU5FX1BSRUZJWF9QQVRURVJOIiwicHJvZ3Jlc3MiLCJwcm9jZXNzU3RkZXJyIiwiZXhpdFdpdGhFcnJvciIsImV4aXQiLCJpc1RyYW5zaWVudEdoRmFpbHVyZSIsImV4aXRDb2RlIiwidGVzdCIsInJlYWRTdGRpblRleHQiLCJfcmVhZFN0ZGluVGV4dCIsInByb2Nlc3NTdGRpbiIsImlzVFRZIiwicmVhZFJlcXVpcmVkU3RkaW5UZXh0IiwiX3JlYWRSZXF1aXJlZFN0ZGluVGV4dCIsImlucHV0IiwicnVuQ29tbWFuZCIsIl9ydW5Db21tYW5kIiwiX29wdGlvbnMkYWxsb3dlZEV4aXRDIiwiYWxsb3dlZEV4aXRDb2RlcyIsIl9sb29wIiwiX3JldCIsImF0dGVtcHQiLCJfY29tbWFuZCQyIiwic3RkaW5EYXRhIiwic3RkaW4iLCJpbmNsdWRlcyIsIkdIX1JFVFJZX01BWF9BVFRFTVBUUyIsInNsZWVwIiwiZCIsIl9yZWdlbmVyYXRvclZhbHVlcyIsImdoIiwiX2doIiwiYXJncyIsIl90b0NvbnN1bWFibGVBcnJheSIsImdoQWxsb3dFeGl0Q29kZXMiLCJfeDYiLCJfeDciLCJfZ2hBbGxvd0V4aXRDb2RlcyIsImN1cnJlbnRSZXBvUGFydHMiLCJfY3VycmVudFJlcG9QYXJ0cyIsIm5hbWVXaXRoT3duZXIiLCJfbmFtZVdpdGhPd25lciRzcGxpdCIsIl9uYW1lV2l0aE93bmVyJHNwbGl0MiIsIm93bmVyIiwibmFtZSIsIl9jb250ZXh0NyIsInNwbGl0IiwiY3VycmVudFByTnVtYmVyIiwiX2N1cnJlbnRQck51bWJlciIsIl9jYWxsZWU3IiwiX2NvbnRleHQ4IiwiZ3JhcGhxbCIsIl94OCIsIl94OSIsIl9ncmFwaHFsIiwiX2NhbGxlZTgiLCJxdWVyeSIsInZhcnMiLCJfaTIiLCJfT2JqZWN0JGVudHJpZXMyIiwiX09iamVjdCRlbnRyaWVzMiRfaSIsIl9rZXkiLCJyZXNwb25zZSIsImVycm9yTWVzc2FnZXMiLCJfY29udGV4dDkiLCJPYmplY3QiLCJlbnRyaWVzIiwia2V5IiwiSlNPTiIsInBhcnNlIiwiQXJyYXkiLCJpc0FycmF5IiwiZXJyb3JzIiwiX2Vycm9yJG1lc3NhZ2UiLCJub3JtYWxpemVDb21tZW50QXV0aG9yIiwiY29tbWVudCIsIl9jb21tZW50JGF1dGhvciRsb2dpbiIsIl9jb21tZW50JGF1dGhvciIsIl9vYmplY3RTcHJlYWQiLCJhdXRob3IiLCJsb2dpbiIsInBhZ2luYXRlUmV2aWV3VGhyZWFkcyIsIl94MCIsIl94MSIsIl94MTAiLCJfeDExIiwiX3gxMiIsIl9wYWdpbmF0ZVJldmlld1RocmVhZHMiLCJfY2FsbGVlOSIsInByTnVtYmVyIiwib25UaHJlYWQiLCJjdXJzb3IiLCJfeWllbGQkZ3JhcGhxbCRkYXRhIiwiX3Jldmlld1RocmVhZHMkcGFnZUluIiwicmV2aWV3VGhyZWFkcyIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJ0aHJlYWQiLCJfdDQiLCJfdDUiLCJfdDYiLCJfY29udGV4dDAiLCJudW1iZXIiLCJOdW1iZXIiLCJkYXRhIiwicmVwb3NpdG9yeSIsInB1bGxSZXF1ZXN0IiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJub2RlcyIsInMiLCJlIiwicGFnZUluZm8iLCJoYXNOZXh0UGFnZSIsImVuZEN1cnNvciIsInVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMiLCJfeDEzIiwiX3gxNCIsIl94MTUiLCJfdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyIsIl9jYWxsZWUwIiwiaWRzIiwiX2NvbnRleHQxIiwiaXNSZXNvbHZlZCIsImlkIiwidW5yZXNvbHZlZFJldmlld1RocmVhZHMiLCJfeDE2IiwiX3gxNyIsIl94MTgiLCJfdW5yZXNvbHZlZFJldmlld1RocmVhZHMiLCJfY2FsbGVlMTAiLCJ0aHJlYWRzIiwiX2NvbnRleHQxMSIsIl9jYWxsZWUxIiwiX3BhZ2VJbmZvJGVuZEN1cnNvciIsImNvbW1lbnRzIiwiX3lpZWxkJGdyYXBocWwkZGF0YTIiLCJfcGFnZUluZm8kZW5kQ3Vyc29yMiIsImNvbW1lbnRDb25uZWN0aW9uIiwiX3Q3IiwiX3Q4IiwiX3Q5IiwiX2NvbnRleHQxMCIsInRocmVhZElkIiwibm9kZSIsImlzT3V0ZGF0ZWQiLCJwYXRoIiwibGluZSIsIm9yaWdpbmFsTGluZSIsInN0YXJ0TGluZSIsIm9yaWdpbmFsU3RhcnRMaW5lIiwieWFtbER1bXAiLCJzdHJpbmdpZnlZYW1sIiwiZGVlcENvcHkiLCJzdHJpbmdpZnkiLCJsYXRlc3RQckNpUmVzdWx0cyIsIl94MTkiLCJfbGF0ZXN0UHJDaVJlc3VsdHMiLCJfY2FsbGVlMTEiLCJfc3VtbWFyeSRwYXNzIiwiX3N1bW1hcnkkZmFpbCIsIl9zdW1tYXJ5JHBlbmRpbmciLCJfc3VtbWFyeSRza2lwcGluZyIsIl9zdW1tYXJ5JGNhbmNlbCIsImNoZWNrcyIsInJhdyIsInN1bW1hcnkiLCJfdDAiLCJfY29udGV4dDEyIiwiU3ludGF4RXJyb3IiLCJyZWR1Y2UiLCJjb3VudHMiLCJjaGVjayIsIl9jaGVjayRidWNrZXQyIiwiX2NvdW50cyRidWNrZXQiLCJidWNrZXQiLCJ0b3RhbCIsInBhc3MiLCJmYWlsIiwicGVuZGluZyIsInNraXBwaW5nIiwiY2FuY2VsIiwid2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyIsIl94MjAiLCJfeDIxIiwiX3gyMiIsIl94MjMiLCJfd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyIsIl9jYWxsZWUxMiIsInNsZWVwRm4iLCJsYXRlc3RDaVJlc3VsdHNGbiIsIndyaXRlUHJvZ3Jlc3NGbiIsImF0dGVtcHRzIiwiY2lSZXN1bHRzIiwiY2xhc3NpZmllZFJlc3VsdHMiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QyIiwiZmFpbGVkUmVzdWx0cyIsInJ1bm5pbmdSZXN1bHRzIiwiX2NvbnRleHQxMyIsInNsZWVwU2Vjb25kcyIsImNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzIiwiZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkIiwia2V5cyIsImxhdGVzdFJlc3VsdHNCeVdvcmtmbG93IiwiZ3JvdXBlZFJlc3VsdHMiLCJ3b3JrZmxvd0tleSIsIndvcmtmbG93IiwiZnJvbUVudHJpZXMiLCJfcmVmIiwiX2xhdGVzdEF0dGVtcHRDaGVja3MkIiwiX3JlZjIiLCJsYXRlc3RBdHRlbXB0Q2hlY2tzIiwiZ3JvdXBzIiwiZ3JvdXBlZENoZWNrcyIsInJ1bklkIiwid29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsiLCJ3b3JrZmxvd0F0dGVtcHRLZXkiLCJncm91cCIsImdldCIsInNldCIsIk1hcCIsImZyb20iLCJ2YWx1ZXMiLCJsYXRlc3RHcm91cCIsImN1cnJlbnRHcm91cCIsImxhdGVzdEdyb3VwVGltZXN0YW1wIiwibGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3ciLCJmaXJzdENoZWNrIiwibGF0ZXN0Q2hlY2siLCJjdXJyZW50TGF0ZXN0IiwibGF0ZXN0Q2hlY2tUaW1lc3RhbXAiLCJjbGFzc2lmaWNhdGlvbiIsIndvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24iLCJfaSIsIl9PYmplY3QkZW50cmllcyIsIl9PYmplY3QkZW50cmllcyRfaSIsInJlc3VsdCIsInNvbWUiLCJ0ZXN0UmVsYXRlZENoZWNrIiwiX2xpbmskbWF0Y2giLCJsaW5rIiwibWF0Y2giLCJ3b3JrZmxvd1J1biIsIl94MjQiLCJfd29ya2Zsb3dSdW4iLCJfY2FsbGVlMTMiLCJydW5Kc29uIiwiX3QxIiwiX2NvbnRleHQxNCIsImJ1Y2tldHMiLCJfY2hlY2skYnVja2V0IiwiX2NoZWNrJHN0YXJ0ZWRBdCIsInRpbWVzdGFtcCIsImNvbXBsZXRlZEF0Iiwic3RhcnRlZEF0IiwibGF0ZXN0IiwiX3gyNSIsIl9zbGVlcFNlY29uZHMiLCJfY2FsbGVlMTQiLCJzZWNvbmRzIiwiX2NvbnRleHQxNSIsIl94MjYiLCJfY2FsbGVlMTUiLCJfdDEwIiwiX2NvbnRleHQxNiIsIkJ1ZmZlciIsInJlYWRSZXBsaWVzRnJvbVN0ZGluIiwiX3JlYWRSZXBsaWVzRnJvbVN0ZGluIiwiX2NhbGxlZTE2IiwicGF5bG9hZCIsIm5vcm1hbGl6ZWRSZXBsaWVzIiwiX2kzIiwiX09iamVjdCRlbnRyaWVzMyIsIl9PYmplY3QkZW50cmllczMkX2kiLCJib2R5IiwiX2NvbnRleHQxNyIsInBhcnNlUmVwbHlJbnB1dCIsInJlcGxpZXMiLCJvcGVuUHIiLCJfeDI3IiwiX29wZW5QciIsIl9jYWxsZWUxNyIsImhlYWQiLCJiYXNlIiwiY3JlYXRlQXJncyIsIl90MTEiLCJfdDEyIiwiX2NvbnRleHQxOCIsImxpc3RQclJldmlld1RocmVhZHMiLCJfbGlzdFByUmV2aWV3VGhyZWFkcyIsIl9jYWxsZWUxOCIsIl95aWVsZCRjdXJyZW50UmVwb1BhciIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjIiLCJfdDEzIiwiX3QxNCIsIl9jb250ZXh0MTkiLCJ1bnJlc29sdmVkX3RocmVhZHMiLCJyZXNvbHZlUHJSZXZpZXdUaHJlYWRzIiwiX3gyOCIsIl9yZXNvbHZlUHJSZXZpZXdUaHJlYWRzIiwiX2NhbGxlZTE5IiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyMyIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjQiLCJ1bnJlc29sdmVkSWRzIiwicmVzb2x2ZWRUaHJlYWRJZHMiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiX3Jlc3BvbnNlJGRhdGEiLCJfc3RlcDMkdmFsdWUiLCJpbmRleCIsIl9zdGVwMyR2YWx1ZSQiLCJfdDE1IiwiX3QxNiIsIl90MTciLCJfY29udGV4dDIwIiwiU2V0IiwiaGFzIiwicmVzb2x2ZVJldmlld1RocmVhZCIsInJlc29sdmVkX3RocmVhZF9pZHMiLCJjaGVja1ByQ2kiLCJfY2hlY2tQckNpIiwiX2NhbGxlZTIxIiwiX3lpZWxkJHdhaXRGb3JSdW5uaW5nIiwiX3lpZWxkJHdhaXRGb3JSdW5uaW5nMiIsIndhaXRBdHRlbXB0cyIsIndhaXRUaW1lZE91dCIsImNsYXNzaWZpZWRMYXRlc3QiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QzIiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0NCIsIl9jb250ZXh0MjIiLCJ3YWl0ZWRfZm9yX3Rlc3RfcmVsYXRlZF9jaGVja3MiLCJ0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF9hdHRlbXB0cyIsInRlc3RfcmVsYXRlZF9jaGVja193YWl0X3RpbWVkX291dCIsIl9jYWxsZWUyMCIsIl9yZWY1IiwiX3JlZjciLCJjb21wYWN0V29ya2Zsb3ciLCJfdDE4IiwiX3QxOSIsIl90MjAiLCJfY29udGV4dDIxIiwiY29tcGFjdFdvcmtmbG93UmVzdWx0IiwiYnVpbGRGYWlsZWRXb3JrZmxvd0RldGFpbHMiLCJmYWlsZWRXb3JrZmxvd0xvZyIsImZhaWxlZF93b3JrZmxvd3MiLCJ0ZXN0X3dvcmtmbG93X291dHB1dCIsIl9yZWY4IiwiX3JlZjkiLCJydW5uaW5nX3Rlc3RfcmVsYXRlZF93b3JrZmxvd3MiLCJmZXRjaElzc3VlTWVzc2FnZXMiLCJfeDI5IiwiX2ZldGNoSXNzdWVNZXNzYWdlcyIsIl9jYWxsZWUyMiIsImlzc3VlTnVtYmVyIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyNSIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjYiLCJpc3N1ZSIsIl9jb250ZXh0MjMiLCJpc3N1ZU1lc3NhZ2VzIiwibm9ybWFsaXplSXNzdWVOdW1iZXIiLCJmZXRjaFByTWVzc2FnZXMiLCJfeDMwIiwiX2ZldGNoUHJNZXNzYWdlcyIsIl9jYWxsZWUyMyIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjciLCJfeWllbGQkY3VycmVudFJlcG9QYXI4IiwicmVzb2x2ZWRQck51bWJlciIsIl90MjEiLCJfY29udGV4dDI0Iiwibm9ybWFsaXplUHJOdW1iZXIiLCJwck1lc3NhZ2VzIiwicHVsbF9yZXF1ZXN0IiwicGFyc2VkIiwiX3R5cGVvZiIsImV2ZXJ5IiwicmVwbHkiLCJpc1JlcGx5SW5wdXQiLCJfeDMxIiwiX3gzMiIsIl9jb21wYWN0V29ya2Zsb3dSZXN1bHQiLCJfY2FsbGVlMjQiLCJfc3RyaW5nT3JVbmRlZmluZWQiLCJydW4iLCJmYWlsZWRKb2IiLCJfY29udGV4dDI1IiwiZmFpbGVkV29ya2Zsb3dSdW5Kb2IiLCJzdHJpbmdPclVuZGVmaW5lZCIsImpvYiIsImpvYl91cmwiLCJ1cmwiLCJmYWlsZWRfc3RlcCIsImZhaWxlZFdvcmtmbG93UnVuU3RlcE5hbWUiLCJydW5faWQiLCJydW5fdXJsIiwiYnJhbmNoIiwiaGVhZEJyYW5jaCIsInNoYSIsImhlYWRTaGEiLCJjb25jbHVzaW9uIiwiX3gzMyIsIl9mYWlsZWRXb3JrZmxvd0xvZyIsIl9jYWxsZWUyNSIsIl9jb250ZXh0MjYiLCJsb2ciLCJmYWlsZWRfbG9nIiwicmVmaW5lRmFpbGVkV29ya2Zsb3dMb2ciLCJzYW5pdGl6ZWRJbnB1dCIsInNhbml0aXplRmFpbGVkV29ya2Zsb3dMb2ciLCJzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMiLCJydGtBdmFpbGFibGUiLCJzcGF3blN5bmNTYWZlIiwicmVwbGFjZSIsInJlZmVyZW5jZSIsImV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIiLCJsYWJlbCIsInJlZmVyZW5jZVRleHQiLCJraW5kU2VnbWVudCIsImpvYk5hbWUiLCJfcmVmMyIsIl9ydW4kam9icyRmaW5kIiwiam9icyIsImZpbmQiLCJzdGF0dXMiLCJfam9iJHN0ZXBzJGZpbmQkbmFtZSIsIl9qb2Ikc3RlcHMkZmluZCIsIl9qb2Ikc3RlcHMkZmluZDIiLCJzdGVwcyIsInN0ZXAiLCJfcmVzdWx0JHN0YXR1cyIsIl9yZXN1bHQkc3Rkb3V0IiwiX3Jlc3VsdCRzdGRlcnIiLCJzcGF3blN5bmMiLCJlbmNvZGluZyIsIl94MzQiLCJfeDM1IiwiX3gzNiIsIl9pc3N1ZU1lc3NhZ2VzIiwiX2NhbGxlZTI2IiwibWVzc2FnZXMiLCJfY29udGV4dDI3IiwiZmV0Y2hNZXRhZGF0YSIsIm5vdW4iLCJzZWxlY3RNZXRhZGF0YSIsIl9yZXNwb25zZSRkYXRhMiIsInBhZ2luYXRlTWVzc2FnZXMiLCJzZWxlY3RDb25uZWN0aW9uIiwiX3Jlc3BvbnNlJGRhdGEzIiwibWFwTm9kZSIsImNvbW1lbnRNZXNzYWdlIiwiX3gzNyIsIl94MzgiLCJfeDM5IiwiX3ByTWVzc2FnZXMiLCJfY2FsbGVlMjciLCJfeWllbGQkUHJvbWlzZSRhbGwzIiwiX3lpZWxkJFByb21pc2UkYWxsNCIsImlzc3VlQ29tbWVudHMiLCJyZXZpZXdzIiwiX2NvbnRleHQyOCIsIl9yZXNwb25zZSRkYXRhNCIsInBySXNzdWVDb21tZW50cyIsInByUmV2aWV3cyIsInNvcnQiLCJjb21wYXJlTWVzc2FnZXNCeUNyZWF0ZWRBdCIsImxlZnQiLCJyaWdodCIsImxlZnRDcmVhdGVkQXQiLCJjcmVhdGVkQXQiLCJyaWdodENyZWF0ZWRBdCIsImxvY2FsZUNvbXBhcmUiLCJfeDQwIiwiX3g0MSIsIl94NDIiLCJfcHJJc3N1ZUNvbW1lbnRzIiwiX2NhbGxlZTI4IiwiX2NvbnRleHQyOSIsIl9yZXNwb25zZSRkYXRhNSIsIl94NDMiLCJfeDQ0IiwiX3g0NSIsIl9wclJldmlld3MiLCJfY2FsbGVlMjkiLCJfY29udGV4dDMwIiwiX3Jlc3BvbnNlJGRhdGE2IiwicmV2aWV3TWVzc2FnZSIsIl94NDYiLCJfcGFnaW5hdGVNZXNzYWdlcyIsIl9jYWxsZWUzMCIsImNvbmZpZyIsIl9jb25uZWN0aW9uJHBhZ2VJbmZvJCIsImNvbm5lY3Rpb24iLCJfdDIyIiwiX2NvbnRleHQzMSIsImhhc01lc3NhZ2VCb2R5IiwiX3g0NyIsIl9mZXRjaE1ldGFkYXRhIiwiX2NhbGxlZTMxIiwiX21ldGFkYXRhJGF1dGhvciRsb2dpIiwiX21ldGFkYXRhJGF1dGhvciIsIl9tZXRhZGF0YSRib2R5IiwibWV0YWRhdGEiLCJfdDIzIiwiX2NvbnRleHQzMiIsInRpdGxlIiwiX2NvbW1lbnQkYXV0aG9yJGxvZ2luMiIsIl9jb21tZW50JGF1dGhvcjIiLCJ0eXBlIiwicmV2aWV3IiwiX3JldmlldyRhdXRob3IkbG9naW4iLCJfcmV2aWV3JGF1dGhvciIsIl9yZXZpZXckc3RhdGUiLCJfcmV2aWV3JHN1Ym1pdHRlZEF0IiwiX3JldmlldyRib2R5Iiwic3RhdGUiLCJzdWJtaXR0ZWRBdCIsImJ1aWxkUGxhblByb21wdCIsIl9idWlsZFBsYW5Qcm9tcHQiLCJpc3N1ZVlhbWwiLCJjdXJyZW50QmFzZUJyYW5jaCIsIl9jdXJyZW50QmFzZUJyYW5jaCIsIl95aWVsZCRjdXJyZW50UHVsbFJlcSIsImN1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2giLCJjdXJyZW50RGVmYXVsdEJyYW5jaCIsIl9jdXJyZW50RGVmYXVsdEJyYW5jaCIsInJlcXVpcmVOb25FbXB0eSIsIl9jdXJyZW50UHVsbFJlcXVlc3RCYXNlQnJhbmNoIiwiYmFzZUJyYW5jaCIsImJ1aWxkUmV2aWV3UHJvbXB0IiwiX2J1aWxkUmV2aWV3UHJvbXB0IiwiYnVpbGRTaW1wbGlmeVByb21wdCIsIl9idWlsZFNpbXBsaWZ5UHJvbXB0IiwicHJvZ3JhbSIsIkNvbW1hbmQiLCJhZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kIiwiZGVzY3JpcHRpb24iLCJhbGxvd0V4Y2Vzc0FyZ3VtZW50cyIsImFyZ3VtZW50TmFtZSIsImFyZ3VtZW50IiwiYXJndW1lbnREZXNjcmlwdGlvbiIsImFkZE9wdGlvbiIsIk9wdGlvbiIsIm9wdGlvbkRlc2NyaXB0aW9uIiwiY2hvaWNlcyIsIm1ha2VPcHRpb25NYW5kYXRvcnkiLCJhY3Rpb24iLCJfbGVuIiwiYXJndW1lbnRPck9wdGlvbnMiLCJtYXliZU9wdGlvbnMiLCJfYXJnczciLCJhZGRBZ2VudENvbW1hbmQiLCJjb25maWdPclJ1biIsInNob3dIZWxwQWZ0ZXJFcnJvciIsIm1vZGUiLCJjb250YWluc05vQ29uY2VyblNlbnRlbmNlIiwiaXNzdWVSZWZlcmVuY2UiLCJwclJlZmVyZW5jZSIsInBhcnNlQXN5bmMiLCJhcmd2Il0sIm1hcHBpbmdzIjoiOzs7bXpIQWFBLElBQ2FBLEVBQThCLGdDQUUzQyxTQUFzQkMsRUFBc0JDLEVBQUFDLEdBQUEsT0FBQUMsRUFBQUMsTUFBQUMsS0FBQUMsVUFBQSxDQTJCM0MsU0FBQUgsSUFBQSxPQUFBQSxFQUFBSSxFQUFBQyxJQUFBQyxFQTNCTSxTQUFBQyxFQUFzQ0MsRUFBbUJDLEdBQTBCLElBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUEsT0FBQWIsSUFBQWMsRUFBQSxTQUFBQyxHQUFBLGNBQUFBLEVBQUFDLEVBQUFELEVBQUFFLEdBQUEsS0FBQSxFQUlLLFlBSkwsSUFBMUJiLElBQUFBLEVBQTZCLENBQUEsR0FDckZFLEVBQU9ZLEVBQWdCLE9BQVhiLEVBQUNGLEVBQVEsSUFBRUUsRUFBSSxHQUFJRixFQUFRZ0IsTUFBTSxHQUFJLENBQ3JEQyxNQUFPLENBQUMsU0FBVSxPQUFRLFVBRXRCYixFQUFtQmMsRUFBbUJqQixFQUFRa0IsWUFBYWxCLEVBQVFtQixxQkFBb0JSLEVBQUFFLEVBQUEsRUFDakVPLEVBQW9CcEIsRUFBUXFCLGFBQVksS0FBQSxFQUFqRCxPQUFiakIsRUFBYU8sRUFBQVcsRUFBQVgsRUFBQUMsRUFBQSxFQUFBRCxFQUFBRSxFQUFBLEVBR3dCVSxR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
|