@willbooster/agent-skills 1.4.1 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-skills-cli.js +3 -3
- package/package.json +1 -1
package/dist/agent-skills-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}from"node:child_process";import{stdin as t,stderr as a}from"node:process";import{setTimeout as
|
|
2
|
+
import{Command as n,Option as e}from"commander";import{spawn as r}from"node:child_process";import{stdin as t,stderr as a}from"node:process";import{setTimeout as i}from"node:timers/promises";import{stringify as o}from"yaml";function c(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 u(n){var e,r,t,a=2;for("undefined"!=typeof Symbol&&(r=Symbol.asyncIterator,t=Symbol.iterator);a--;){if(r&&null!=(e=n[r]))return e.call(n);if(t&&null!=(e=n[t]))return new s(e.call(n));r="@@asyncIterator",t="@@iterator"}throw new TypeError("Object is not async iterable")}function s(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 s=function(n){this.s=n,this.n=n.next},s.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 s(n)}function l(n,e,r,t,a,i,o){try{var c=n[i](o),u=c.value}catch(n){return void r(n)}c.done?e(u):Promise.resolve(u).then(t,a)}function f(n){return function(){var e=this,r=arguments;return new Promise(function(t,a){var i=n.apply(e,r);function o(n){l(i,t,a,o,c,"next",n)}function c(n){l(i,t,a,o,c,"throw",n)}o(void 0)})}}function p(n,e){var r="undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(!r){if(Array.isArray(n)||(r=j(n))||e){r&&(n=r);var t=0,a=function(){};return{s:a,n:function(){return t>=n.length?{done:!0}:{done:!1,value:n[t++]}},e:function(n){throw n},f:a}}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,o=!0,c=!1;return{s:function(){r=r.call(n)},n:function(){var n=r.next();return o=n.done,n},e:function(n){c=!0,i=n},f:function(){try{o||null==r.return||r.return()}finally{if(c)throw i}}}}function d(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 h(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 m(n){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?h(Object(r),!0).forEach(function(e){d(n,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(r)):h(Object(r)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(r,e))})}return n}function v(){
|
|
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",a=r.toStringTag||"@@toStringTag";function o(r,t,a,o){var u=t&&t.prototype instanceof c?t:c,s=Object.create(u.prototype);return w(s,"_invoke",function(r,t,a){var o,c,u,s=0,l=a||[],f=!1,p={p:0,n:0,v:n,a:d,f:d.bind(n,4),d:function(e,r){return o=e,c=0,u=n,p.n=r,i}};function d(r,t){for(c=r,u=t,e=0;!f&&s&&!a&&e<l.length;e++){var a,o=l[e],d=p.p,h=o[2];r>3?(a=h===t)&&(u=o[(c=o[4])?5:(c=3,3)],o[4]=o[5]=n):o[0]<=d&&((a=r<2&&d<o[1])?(c=0,p.v=t,p.n=o[1]):d<h&&(a=r<3||o[0]>t||t>h)&&(o[4]=r,o[5]=t,p.n=h,c=0))}if(a||r>1)return i;throw f=!0,t}return function(a,l,h){if(s>1)throw TypeError("Generator is already running");for(f&&1===l&&d(l,h),c=l,u=h;(e=c<2?n:u)||!f;){o||(c?c<3?(c>1&&(p.n=-1),d(c,u)):p.n=u:p.v=u);try{if(s=2,o){if(c||(a="next"),e=o[a]){if(!(e=e.call(o,u)))throw TypeError("iterator result is not an object");if(!e.done)return e;u=e.value,c<2&&(c=0)}else 1===c&&(e=o.return)&&e.call(o),c<2&&(u=TypeError("The iterator does not provide a '"+a+"' method"),c=1);o=n}else if((e=(f=p.n<0)?u:r.call(t,p))!==i)break}catch(e){o=n,c=1,u=e}finally{s=1}}return{value:e,done:f}}}(r,a,o),!0),s}var i={};function c(){}function u(){}function s(){}e=Object.getPrototypeOf;var l=[][t]?e(e([][t]())):(w(e={},t,function(){return this}),e),f=s.prototype=c.prototype=Object.create(l);function p(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,s):(n.__proto__=s,w(n,a,"GeneratorFunction")),n.prototype=Object.create(f),n}return u.prototype=s,w(f,"constructor",s),w(s,"constructor",u),u.displayName="GeneratorFunction",w(s,a,"GeneratorFunction"),w(f),w(f,a,"Generator"),w(f,t,function(){return this}),w(f,"toString",function(){return"[object Generator]"}),(v=function(){return{w:o,m:p}})()}function w(n,e,r,t){var a=Object.defineProperty;try{a({},"",{})}catch(n){a=0}w=function(n,e,r,t){function o(e,r){w(n,e,function(n){return this._invoke(e,r,n)})}e?a?a(n,e,{value:r,enumerable:!t,configurable:!t,writable:!t}):n[e]=r:(o("next",0),o("throw",1),o("return",2))},w(n,e,r,t)}function y(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 b(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,a,o,i,c=[],u=!0,s=!1;try{if(o=(r=r.call(n)).next,0===e){if(Object(r)!==r)return;u=!1}else for(;!(u=(t=o.call(r)).done)&&(c.push(t.value),c.length!==e);u=!0);}catch(n){s=!0,a=n}finally{try{if(!u&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw a}}return c}}(n,e)||j(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 g(n){return function(n){if(Array.isArray(n))return c(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||j(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 k(n){"@babel/helpers - typeof";return k="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},k(n)}function j(n,e){if(n){if("string"==typeof n)return c(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)?c(n,e):void 0}}var O={blockQuote:"literal",lineWidth:0},S=/\btest\b/i,x=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","name","number","startedAt","status","updatedAt","url","workflowName"];function I(n){a.write("".concat(n,"\n"))}function E(n,e){void 0===e&&(e=1),a.write("".concat(n,"\n")),process.exit(e)}function A(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 C(){return P.apply(this,arguments)}function P(){return(P=f(v().m(function n(){return v().w(function(n){for(;;)switch(n.n){case 0:if(!t.isTTY){n.n=1;break}return n.a(2,"");case 1:return n.n=2,wn(t);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function _(){return R.apply(this,arguments)}function R(){return(R=f(v().m(function n(){var e;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,C();case 1:if(!((e=n.v).length>0)){n.n=2;break}return n.a(2,e);case 2:E("Error: JSON input is required on stdin",2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function T(n,e){return N.apply(this,arguments)}function N(){return N=f(v().m(function n(e,t){var a,i,c,u,s;return v().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),i=null!=(a=t.allowedExitCodes)?a:[],c=v().m(function n(){var a,c,u,l,f,p,d,h;return v().w(function(n){for(;;)switch(n.n){case 0:return c=r(null!=(a=e[0])?a:"",e.slice(1),{stdio:["pipe","pipe","pipe"]}),void 0!==t.stdinData?c.stdin.end(t.stdinData):c.stdin.end(),n.n=1,Promise.all([wn(c.stdout),wn(c.stderr),new Promise(function(n,e){c.once("error",e),c.once("close",function(e){return n(null!=e?e:1)})})]);case 1:if(u=n.v,l=b(u,3),f=l[0],p=l[1],d=l[2],h="".concat(f).concat(p),0!==d&&!i.includes(d)){n.n=2;break}return n.a(2,{v:h});case 2:if(!(A(e,d,h)&&s<3)){n.n=4;break}return I("Transient GitHub CLI failure; retrying... (attempt ".concat(s," of ").concat(2,")")),n.n=3,o(1e3*s);case 3:return n.a(2,0);case 4:E(h||"Command failed: ".concat(e.join(" ")));case 5:return n.a(2)}},n)}),s=1;case 1:if(!(s<=3)){n.n=5;break}return n.d(y(c()),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:s+=1,n.n=1;break;case 5:E("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),N.apply(this,arguments)}function $(n,e){return q.apply(this,arguments)}function q(){return(q=f(v().m(function n(e,r){return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,T(["gh"].concat(g(e)),{stdinData:r});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function L(n,e,r){return G.apply(this,arguments)}function G(){return(G=f(v().m(function n(e,r,t){return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,T(["gh"].concat(g(e)),{stdinData:t,allowedExitCodes:r});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function D(){return J.apply(this,arguments)}function J(){return(J=f(v().m(function n(){var e,r,t,a,o;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,$(["repo","view","--json","nameWithOwner","--jq",".nameWithOwner"]);case 1:return e=n.v.trim(),r=e.split("/",2),t=b(r,2),a=t[0],o=t[1],a&&o||E("Error: could not determine current repository"),n.a(2,[a,o])}},n)}))).apply(this,arguments)}function F(){return B.apply(this,arguments)}function B(){return(B=f(v().m(function n(){return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,$(["pr","view","--json","number","--jq",".number"]);case 1:return n.a(2,n.v.trim())}},n)}))).apply(this,arguments)}function H(n,e){return W.apply(this,arguments)}function W(){return(W=f(v().m(function n(e,r){var t,a,o,i,c,u,s,l,f;return v().w(function(n){for(;;)switch(n.n){case 0:void 0===r&&(r={}),t=["api","graphql","-F","query=@-"],a=0,o=Object.entries(r);case 1:if(!(a<o.length)){n.n=4;break}if(i=b(o[a],2),c=i[0],void 0!==(u=i[1])&&""!==u){n.n=2;break}return n.a(3,3);case 2:t.push("-F","".concat(c,"=").concat(u));case 3:a++,n.n=1;break;case 4:return f=JSON,n.n=5,$(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"),E("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function M(n){var e,r;return m(m({},n),{},{author:"string"==typeof n.author?n.author:null!=(e=null==(r=n.author)?void 0:r.login)?e:null})}function Q(n,e,r,t,a){return U.apply(this,arguments)}function U(){return(U=f(v().m(function n(e,r,t,a,o){var i,c,u,s,l,f,d,h,m,w,y,b;return v().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,H(e,{owner:r,name:t,number:Number(a),cursor:i});case 1:if(w=c=n.v.data,m=null==w){n.n=2;break}m=null==(c=c.repository);case 2:if(h=m){n.n=3;break}h=null==(c=c.pullRequest);case 3:if(!h){n.n=4;break}y=void 0,n.n=5;break;case 4:y=c.reviewThreads;case 5:(s=y)||E("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),l=p(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,o(d);case 8:n.n=7;break;case 9:n.n=11;break;case 10:n.p=10,b=n.v,l.e(b);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:i=null!=(u=s.pageInfo.endCursor)?u:void 0;case 14:n.n=0;break;case 15:return n.a(2)}},n,null,[[6,10,11,12]])}))).apply(this,arguments)}function Y(n,e,r){return Z.apply(this,arguments)}function Z(){return(Z=f(v().m(function n(e,r,t){var a;return v().w(function(n){for(;;)switch(n.n){case 0:return a=[],n.n=1,Q("\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||a.push(n.id)});case 1:return n.a(2,a)}},n)}))).apply(this,arguments)}function z(n,e,r){return K.apply(this,arguments)}function K(){return(K=f(v().m(function n(e,r,t){var a;return v().w(function(n){for(;;)switch(n.n){case 0:return a=[],n.n=1,Q("\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,f(v().m(function n(e){var r,t,o,i,c,u,s,l,f,p;return v().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(M),o=e.comments.pageInfo,i=null!=(r=o.endCursor)?r:void 0;case 2:if(!o.hasNextPage){n.n=7;break}return n.n=3,H("\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:i});case 3:if(f=c=n.v.data,l=null==f){n.n=4;break}l=null==(c=c.node);case 4:if(!l){n.n=5;break}p=void 0,n.n=6;break;case 5:p=c.comments;case 6:(s=p)||E("Could not find comments in GraphQL response for thread ".concat(e.id,".")),t.push.apply(t,g(s.nodes.map(M))),o=s.pageInfo,i=null!=(u=o.endCursor)?u:void 0,n.n=2;break;case 7:a.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,a)}},n)}))).apply(this,arguments)}function V(n){return i(n,O)}function X(n){return JSON.parse(JSON.stringify(n))}function nn(n){return en.apply(this,arguments)}function en(){return(en=f(v().m(function n(e){var r,t,a,o,i,c,u,s,l,f;return v().w(function(n){for(;;)switch(n.p=n.n){case 0:return c=["pr","checks"],e&&c.push(e),c.push("--json","bucket,completedAt,description,event,link,name,startedAt,state,workflow"),u=[],n.p=1,n.n=2,L(c,[8]);case 2:s=n.v,u=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}u=[],n.n=5;break;case 4:throw f;case 5:return l=u.reduce(function(n,e){var r,t,a=null!=(r=e.bucket)?r:"";return n[a]=(null!=(t=n[a])?t:0)+1,n},{}),n.a(2,{summary:{total:u.length,pass:null!=(r=l.pass)?r:0,fail:null!=(t=l.fail)?t:0,pending:null!=(a=l.pending)?a:0,skipping:null!=(o=l.skipping)?o:0,cancel:null!=(i=l.cancel)?i:0},checks:u})}},n,null,[[1,3]])}))).apply(this,arguments)}function rn(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=b(n,2),t=r[0],a=function(n){var e=n.reduce(function(n,e){var r=function(n){var e=un(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||dn(e)>dn(n)?e:n},[])}(r[1]),o=a[0];o||E("Error: no checks found for workflow ".concat(t));var i=null!=(e=a.reduce(function(n,e){return n?pn(e)>pn(n)?e:n:e},void 0))?e:o;return[t,{classification:fn(a),check:i,checks:a}]}))}function tn(n){for(var e={},r={},t=0,a=Object.entries(n);t<a.length;t++){var o=b(a[t],2),i=o[0],c=o[1];"failed"!==c.classification?"running"===c.classification&&c.checks.some(function(n){return hn(n)})&&(r[i]=c):e[i]=c}return[e,r]}function an(n,e,r,t){return on.apply(this,arguments)}function on(){return(on=f(v().m(function n(e,r,t,a){var o,i,c,u,s,l,f;return v().w(function(n){for(;;)switch(n.n){case 0:return void 0===r&&(r=mn),void 0===t&&(t=nn),void 0===a&&(a=I),o=0,n.n=1,t(e);case 1:i=n.v;case 2:if(c=rn(i),u=tn(c),s=b(u,2),l=s[0],f=s[1],!(Object.keys(l).length>0)){n.n=3;break}return n.a(2,[i,o,!1]);case 3:if(0!==Object.keys(f).length){n.n=4;break}return n.a(2,[i,o,!1]);case 4:if(!(o>=360)){n.n=5;break}return n.a(2,[i,o,!0]);case 5:return cn(o+=1)&&a("Waiting for test-related workflows to finish (attempt ".concat(o,"/").concat(360,"): ").concat(Object.keys(f).join(", "))),n.n=6,r(10);case 6:return n.n=7,t(e);case 7:i=n.v;case 8:n.n=2;break;case 9:return n.a(2)}},n)}))).apply(this,arguments)}function cn(n){var e=Math.max(1,Math.floor(3));return 1===n||(n-1)%e==0}function un(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 sn(n){return ln.apply(this,arguments)}function ln(){return(ln=f(v().m(function n(e){var r,t;return v().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,L(["run","view",e,"--json",x.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 a.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 fn(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 pn(n){var e,r=n.completedAt;return r&&"0001-01-01T00:00:00Z"!==r?r:null!=(e=n.startedAt)?e:""}function dn(n){return n.reduce(function(n,e){var r=pn(e);return r>n?r:n},"")}function hn(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&S.test(n)})}function mn(n){return vn.apply(this,arguments)}function vn(){return(vn=f(v().m(function n(e){return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,o(1e3*e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function wn(n){return yn.apply(this,arguments)}function yn(){return(yn=f(v().m(function n(e){var r,t,a,o,i,c,s,l;return v().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,a=!1,n.p=2,i=u(e);case 3:return n.n=4,i.next();case 4:if(!(t=!(c=n.v).done)){n.n=6;break}s=c.value,r.push(Buffer.from(s));case 5:t=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,l=n.v,a=!0,o=l;case 8:if(n.p=8,n.p=9,!t||null==i.return){n.n=10;break}return n.n=10,i.return();case 10:if(n.p=10,!a){n.n=11;break}throw o;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 bn(){return gn.apply(this,arguments)}function gn(){return(gn=f(v().m(function n(){var e,r,t,a,o,i,c,u;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,_();case 1:for(e=n.v,r=Cn(e),t={},a=0,o=Object.entries(r.replies);a<o.length;a++)i=b(o[a],2),c=i[0],"string"==typeof(u=i[1])&&u.length>0&&(t[c]=u);return n.a(2,t)}},n)}))).apply(this,arguments)}function kn(n){return jn.apply(this,arguments)}function jn(){return(jn=f(v().m(function n(e){var r,t,a,o,i;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,T(["git","branch","--show-current"]);case 1:return r=n.v.trim(),n.n=2,$(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return t=n.v.trim(),r||E("Error: could not determine current branch"),t||E("Error: could not determine default branch"),r===t&&E("Error: current branch is the default branch (".concat(t,")")),a=["pr","create","--base",t,"--head",r,"--fill"],e&&e.length>0&&a.push("--body-file","-"),I("Creating pull request..."),n.n=3,$(a,e);case 3:return o=V,i=JSON,n.n=4,$(["pr","view","--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author"]);case 4:return n.a(2,o(i.parse.call(i,n.v)))}},n)}))).apply(this,arguments)}function On(){return Sn.apply(this,arguments)}function Sn(){return(Sn=f(v().m(function n(){var e,r,t,a,o,i,c;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,D();case 1:return e=n.v,r=b(e,2),t=r[0],a=r[1],n.n=2,F();case 2:return o=n.v,I("Fetching unresolved review threads..."),i=V,n.n=3,z(t,a,o);case 3:return c=n.v,n.a(2,i({unresolved_threads:c}))}},n)}))).apply(this,arguments)}function xn(n){return In.apply(this,arguments)}function In(){return(In=f(v().m(function n(e){var r,t,a,o,i,c,u,s,l,f,d,h,m,w,y,g,k,j,O,S;return v().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,D();case 1:return r=n.v,t=b(r,2),a=t[0],o=t[1],n.n=2,F();case 2:return i=n.v,j=Set,n.n=3,Y(a,o,i);case 3:O=n.v,c=new j(O),I("Replying to ".concat(Object.keys(e).length," review threads...")),u=[],s=Object.entries(e),l=p(s.entries()),n.p=4,l.s();case 5:if((f=l.n()).done){n.n=9;break}if(h=b(f.value,2),m=h[0],w=b(h[1],2),y=w[0],g=w[1],I("Processing ".concat(m+1,"/").concat(s.length,": ").concat(y)),c.has(y)){n.n=6;break}return n.a(3,8);case 6:return n.n=7,H("\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:y,body:g});case 7:k=n.v,null!=(d=k.data)&&null!=(d=d.resolveReviewThread)&&null!=(d=d.thread)&&d.isResolved?u.push(y):I("Warning: failed to resolve thread ".concat(y,"."));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 I("Done."),n.a(2,V({resolved_thread_ids:u}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function En(){return An.apply(this,arguments)}function An(){return(An=f(v().m(function n(){var e,r,t,a,o,i,c,u,s,l,p,d,h,m,w;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,F();case 1:return e=n.v,I("Fetching latest CI results..."),n.n=2,an(e);case 2:return r=n.v,t=b(r,3),a=t[0],o=t[1],i=t[2],c=rn(a),u=tn(c),s=b(u,2),l=s[0],p=s[1],m=Object,n.n=3,Promise.all(Object.entries(c).map(f(v().m(function n(e){var r,t,a,o,i;return v().w(function(n){for(;;)switch(n.n){case 0:return r=b(e,2),t=r[0],a=r[1],o=a.check,n.n=1,sn(un(o));case 1:return i=n.v,n.a(2,[t,{classification:a.classification,check:X(o),workflowRun:i&&X(i)}])}},n)}))));case 3:if(d=m.fromEntries.call(m,n.v),h={latest_ci_results:a,waited_for_test_related_checks:o>0,test_related_check_wait_attempts:o,test_related_check_wait_timed_out:i,latest_workflow_results:d},!(Object.keys(l).length>0)){n.n=5;break}return w=Object,n.n=4,Promise.all(Object.entries(l).map(f(v().m(function n(e){var r,t,a,o,i,c;return v().w(function(n){for(;;)switch(n.n){case 0:if(r=b(e,2),t=r[0],a=r[1],o=un(a.check)){n.n=1;break}return n.a(2,[t,"Failed latest result has no GitHub Actions run link."]);case 1:return i=t,n.n=2,L(["run","view",o,"--log-failed"],[1]);case 2:return c=n.v,n.a(2,[i,c])}},n)}))));case 4:return h.failed_workflow_outputs=w.fromEntries.call(w,n.v),n.a(2,{output:V(h),exitCode:1});case 5:if(!(Object.keys(p).length>0)){n.n=6;break}return h.test_workflow_output="Timed out waiting for test-related workflows to finish.",h.running_test_related_workflows=Object.keys(p),n.a(2,{output:V(h),exitCode:1});case 6:return h.test_workflow_output="All workflows are successful.",n.a(2,{output:V(h),exitCode:0})}},n)}))).apply(this,arguments)}function Cn(n){try{var e=JSON.parse(n);return function(n){if("object"!==k(n)||null===n||Array.isArray(n))return!1;var e=n.replies;if("object"!==k(e)||null===e||Array.isArray(e))return!1;return Object.values(e).every(function(n){return null==n||"string"==typeof n})}(e)||E("".concat("Error: Invalid input format on stdin",": expected an object with a string-valued `replies` map"),2),e}catch(n){throw n instanceof SyntaxError&&E("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}var Pn=[{name:"codex",displayName:"Codex",createCommand:function(n){return["npx","--yes","@openai/codex@latest","--yolo","-p",n]}},{name:"claude",displayName:"Claude Code",createCommand:function(n){return["claude","--dangerously-skip-permissions","-p",n]}},{name:"gemini",displayName:"Gemini CLI",createCommand:function(n){return["npx","--yes","@google/gemini-cli@preview","--approval-mode","yolo","--model","gemini-3.1-pro-preview","-p",n]}}];function _n(n){return Rn.apply(this,arguments)}function Rn(){return(Rn=f(v().m(function n(e){var r,t,a;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,$n();case 1:if(r=n.v,t=Ln(r),a=Pn.find(function(n){return n.name===e})){n.n=2;break}throw new Error("Unsupported review agent: ".concat(e));case 2:return n.n=3,Dn(a.createCommand(t));case 3:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Tn(){return Nn.apply(this,arguments)}function Nn(){return(Nn=f(v().m(function n(){var e,r,t;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,$n();case 1:return e=n.v,r=Ln(e),n.n=2,Promise.all(Pn.map(f(v().m(function n(e){var t,a,o,i;return v().w(function(n){for(;;)switch(n.n){case 0:return t=e.displayName,a=e.createCommand,o=Gn,i=t,n.n=1,Dn(a(r));case 1:return n.a(2,o(i,n.v))}},n)}))));case 2:return t=n.v,n.a(2,t.join("\n\n"))}},n)}))).apply(this,arguments)}function $n(){return qn.apply(this,arguments)}function qn(){return(qn=f(v().m(function n(){var e;return v().w(function(n){for(;;)switch(n.n){case 0:return e=Hn,n.n=1,Dn(["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 Ln(n){return"Review the current branch against the repository's default branch ".concat(n,' via `git diff "$(git merge-base "').concat(n,'" 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: There is no concern.')}function Gn(n,e){return"## ".concat(n,"\n\n").concat(e.trim())}function Dn(n){return Jn.apply(this,arguments)}function Jn(){return Jn=f(v().m(function n(e){var t,a,o,i,c,u,s;return v().w(function(n){for(;;)switch(n.n){case 0:return a=r(null!=(t=e[0])?t:"",e.slice(1),{stdio:["ignore","pipe","pipe"]}),n.n=1,Promise.all([Fn(a.stdout),Fn(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(o=n.v,i=b(o,3),c=i[0],u=i[1],0!==i[2]){n.n=2;break}return n.a(2,c);case 2:throw s="".concat(c).concat(u),new Error(s||"Command failed: ".concat(e.join(" ")));case 3:return n.a(2)}},n)})),Jn.apply(this,arguments)}function Fn(n){return Bn.apply(this,arguments)}function Bn(){return(Bn=f(v().m(function n(e){var r,t,a,o,i,c,s,l;return v().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,a=!1,n.p=2,i=u(e);case 3:return n.n=4,i.next();case 4:if(!(t=!(c=n.v).done)){n.n=6;break}s=c.value,r+="string"==typeof s?s:s.toString("utf8");case 5:t=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,l=n.v,a=!0,o=l;case 8:if(n.p=8,n.p=9,!t||null==i.return){n.n=10;break}return n.n=10,i.return();case 10:if(n.p=10,!a){n.n=11;break}throw o;case 11:return n.f(10);case 12:return n.f(8);case 13:return n.a(2,r)}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function Hn(n,e){if(n.length>0)return n;throw new Error(e)}var Wn=new n;function Mn(n,e,r){Wn.command(n).description(e).allowExcessArguments(!1).action(f(v().m(function n(){var e;return v().w(function(n){for(;;)switch(n.n){case 0:return e=process.stdout,n.n=1,_n(r);case 1:e.write.call(e,n.v);case 2:return n.a(2)}},n)})))}function Qn(n){return Un.apply(this,arguments)}function Un(){return(Un=f(v().m(function n(e){return v().w(function(n){for(;;)switch(n.n){case 0:if("all"!==e){n.n=2;break}return n.n=1,Tn();case 1:case 3:return n.a(2,n.v);case 2:return n.n=3,_n(e)}},n)}))).apply(this,arguments)}function Yn(n){if(!n.agent)throw new Error("Specify --agent <all|codex|claude|gemini>.");return n.agent}Wn.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),Wn.command("review").description("Run review against the current branch with the selected agent").allowExcessArguments(!1).addOption(new e("--agent <agent>","Use a review agent").choices(["all","codex","claude","gemini"])).action(f(v().m(function n(e){var r;return v().w(function(n){for(;;)switch(n.n){case 0:return r=process.stdout,n.n=1,Qn(Yn(e));case 1:r.write.call(r,n.v);case 2:return n.a(2)}},n)}))),Mn("review-codex","Run Codex review against the current branch","codex"),Mn("review-claude","Run Claude Code review against the current branch","claude"),Mn("review-gemini","Run Gemini CLI review against the current branch","gemini"),Wn.command("open-pr").description("Create a pull request for the current branch").allowExcessArguments(!1).action(f(v().m(function n(){var e,r;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,C();case 1:return e=n.v,n.n=2,kn(e||void 0);case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),Wn.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action(f(v().m(function n(){var e;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,En();case 1:e=n.v,process.stdout.write(e.output),process.exit(e.exitCode);case 2:return n.a(2)}},n)}))),Wn.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action(f(v().m(function n(){var e;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,On();case 1:e=n.v,process.stdout.write(e);case 2:return n.a(2)}},n)}))),Wn.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action(f(v().m(function n(){var e,r;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,bn();case 1:return e=n.v,n.n=2,xn(e);case 2:r=n.v,process.stdout.write(r);case 3:return n.a(2)}},n)}))),await Wn.parseAsync(process.argv);
|
|
5
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQtc2tpbGxzLWNsaS5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL3lhbWwudHMiLCIuLi9zcmMvcHIvcHItY29tbWFuZHMudHMiLCIuLi9zcmMvcmV2aWV3L3Jldmlldy1jb21tYW5kcy50cyIsIi4uL3NyYy9jbGkvYWdlbnQtc2tpbGxzLWNsaS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGBibG9ja1F1b3RlOiAnbGl0ZXJhbCdgOiBVc2VzIGEgcGlwZSAoYHByb3A6IHxgKSB0byByZXByZXNlbnQgbXVsdGlsaW5lIHN0cmluZ3MuXG4gKiBgbGluZVdpZHRoOiAwYDogRGlzYWJsZXMgbGluZSB3cmFwcGluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IHlhbWxTdHJpbmdpZnlPcHRpb25zID0geyBibG9ja1F1b3RlOiAnbGl0ZXJhbCcsIGxpbmVXaWR0aDogMCB9IGFzIGNvbnN0O1xuIiwiaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgc3RkZXJyIGFzIHByb2Nlc3NTdGRlcnIsIHN0ZGluIGFzIHByb2Nlc3NTdGRpbiB9IGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBzZXRUaW1lb3V0IGFzIHNsZWVwIH0gZnJvbSAnbm9kZTp0aW1lcnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgc3RyaW5naWZ5IGFzIHN0cmluZ2lmeVlhbWwgfSBmcm9tICd5YW1sJztcbmltcG9ydCB7IHlhbWxTdHJpbmdpZnlPcHRpb25zIH0gZnJvbSAnLi4veWFtbC5qcyc7XG5cbmV4cG9ydCBjb25zdCBURVNUX1JFTEFURURfUEFUVEVSTiA9IC9cXGJ0ZXN0XFxiL2k7XG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMgPSAxMDtcbmV4cG9ydCBjb25zdCBURVNUX0NIRUNLX1BST0dSRVNTX0lOVEVSVkFMX1NFQ09ORFMgPSAzMDtcbmV4cG9ydCBjb25zdCBURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTID0gMzYwO1xuZXhwb3J0IGNvbnN0IFpFUk9fVElNRVNUQU1QID0gJzAwMDEtMDEtMDFUMDA6MDA6MDBaJztcbmV4cG9ydCBjb25zdCBXT1JLRkxPV19SVU5fSlNPTl9GSUVMRFMgPSBbXG4gICdhdHRlbXB0JyxcbiAgJ2NvbmNsdXNpb24nLFxuICAnY3JlYXRlZEF0JyxcbiAgJ2RhdGFiYXNlSWQnLFxuICAnZGlzcGxheVRpdGxlJyxcbiAgJ2V2ZW50JyxcbiAgJ2hlYWRCcmFuY2gnLFxuICAnaGVhZFNoYScsXG4gICduYW1lJyxcbiAgJ251bWJlcicsXG4gICdzdGFydGVkQXQnLFxuICAnc3RhdHVzJyxcbiAgJ3VwZGF0ZWRBdCcsXG4gICd1cmwnLFxuICAnd29ya2Zsb3dOYW1lJyxcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIEpzb25PYmplY3QgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuZXhwb3J0IHR5cGUgQ2hlY2sgPSB7XG4gIGJ1Y2tldD86IHN0cmluZztcbiAgY29tcGxldGVkQXQ/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBldmVudD86IHN0cmluZztcbiAgbGluaz86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgc3RhcnRlZEF0Pzogc3RyaW5nO1xuICBzdGF0ZT86IHN0cmluZztcbiAgd29ya2Zsb3c/OiBzdHJpbmc7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59O1xuXG5leHBvcnQgdHlwZSBDaVJlc3VsdHMgPSB7XG4gIHN1bW1hcnk6IHtcbiAgICB0b3RhbDogbnVtYmVyO1xuICAgIHBhc3M6IG51bWJlcjtcbiAgICBmYWlsOiBudW1iZXI7XG4gICAgcGVuZGluZzogbnVtYmVyO1xuICAgIHNraXBwaW5nOiBudW1iZXI7XG4gICAgY2FuY2VsOiBudW1iZXI7XG4gIH07XG4gIGNoZWNrczogQ2hlY2tbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFdvcmtmbG93Q2xhc3NpZmljYXRpb24gPSAnZmFpbGVkJyB8ICdydW5uaW5nJyB8ICdzdWNjZXNzZnVsJztcblxuZXhwb3J0IHR5cGUgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0ID0ge1xuICBjbGFzc2lmaWNhdGlvbjogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbjtcbiAgY2hlY2s6IENoZWNrO1xuICBjaGVja3M6IENoZWNrW107XG59O1xuXG50eXBlIFJldmlld0NvbW1lbnROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgZGlmZkh1bms/OiBzdHJpbmcgfCBudWxsO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgUmV2aWV3VGhyZWFkTm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgaXNSZXNvbHZlZDogYm9vbGVhbjtcbiAgaXNPdXRkYXRlZD86IGJvb2xlYW4gfCBudWxsO1xuICBwYXRoPzogc3RyaW5nIHwgbnVsbDtcbiAgbGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsTGluZT86IG51bWJlciB8IG51bGw7XG4gIHN0YXJ0TGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsU3RhcnRMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgY29tbWVudHM6IHtcbiAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICBwYWdlSW5mbzoge1xuICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgIH07XG4gIH07XG59O1xuXG50eXBlIFJ1bkNvbW1hbmRPcHRpb25zID0ge1xuICBzdGRpbkRhdGE/OiBzdHJpbmc7XG4gIGFsbG93ZWRFeGl0Q29kZXM/OiBudW1iZXJbXTtcbn07XG5cbmNvbnN0IEdIX1JFVFJZX01BWF9BVFRFTVBUUyA9IDM7XG5jb25zdCBHSF9SRVRSWV9CQVNFX0RFTEFZX01TID0gMTAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIHByb2dyZXNzKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICBwcm9jZXNzU3RkZXJyLndyaXRlKGAke21lc3NhZ2V9XFxuYCk7XG59XG5cbmZ1bmN0aW9uIGV4aXRXaXRoRXJyb3IobWVzc2FnZTogc3RyaW5nLCBjb2RlID0gMSk6IG5ldmVyIHtcbiAgcHJvY2Vzc1N0ZGVyci53cml0ZShgJHttZXNzYWdlfVxcbmApO1xuICBwcm9jZXNzLmV4aXQoY29kZSk7XG59XG5cbmZ1bmN0aW9uIGlzVHJhbnNpZW50R2hGYWlsdXJlKGNvbW1hbmQ6IHN0cmluZ1tdLCBleGl0Q29kZTogbnVtYmVyLCBvdXRwdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoY29tbWFuZFswXSAhPT0gJ2doJyB8fCBleGl0Q29kZSA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAvKEhUVFAgNTBbMDIzNF1cXGJ8V2UgaGFkIGlzc3VlcyBwcm9kdWNpbmcgdGhlIHJlc3BvbnNlIHRvIHlvdXIgcmVxdWVzdCkvaS50ZXN0KG91dHB1dCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkU3RkaW5UZXh0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChwcm9jZXNzU3RkaW4uaXNUVFkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHN0cmVhbVRvVGV4dChwcm9jZXNzU3RkaW4pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFJlcXVpcmVkU3RkaW5UZXh0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGlucHV0ID0gYXdhaXQgcmVhZFN0ZGluVGV4dCgpO1xuICBpZiAoaW5wdXQubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICBleGl0V2l0aEVycm9yKCdFcnJvcjogSlNPTiBpbnB1dCBpcyByZXF1aXJlZCBvbiBzdGRpbicsIDIpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQ29tbWFuZChjb21tYW5kOiBzdHJpbmdbXSwgb3B0aW9uczogUnVuQ29tbWFuZE9wdGlvbnMgPSB7fSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGFsbG93ZWRFeGl0Q29kZXMgPSBvcHRpb25zLmFsbG93ZWRFeGl0Q29kZXMgPz8gW107XG5cbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0gR0hfUkVUUllfTUFYX0FUVEVNUFRTOyBhdHRlbXB0ICs9IDEpIHtcbiAgICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgICAgc3RkaW86IFsncGlwZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgICB9KTtcbiAgICBpZiAob3B0aW9ucy5zdGRpbkRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcHJvYy5zdGRpbi5lbmQob3B0aW9ucy5zdGRpbkRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jLnN0ZGluLmVuZCgpO1xuICAgIH1cblxuICAgIGNvbnN0IFtzdGRvdXQsIHN0ZGVyciwgZXhpdENvZGVdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3Rkb3V0KSxcbiAgICAgIHN0cmVhbVRvVGV4dChwcm9jLnN0ZGVyciksXG4gICAgICBuZXcgUHJvbWlzZTxudW1iZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgcHJvYy5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICAgIHByb2Mub25jZSgnY2xvc2UnLCAoY29kZSkgPT4gcmVzb2x2ZShjb2RlID8/IDEpKTtcbiAgICAgIH0pLFxuICAgIF0pO1xuICAgIGNvbnN0IG91dHB1dCA9IGAke3N0ZG91dH0ke3N0ZGVycn1gO1xuXG4gICAgaWYgKGV4aXRDb2RlID09PSAwIHx8IGFsbG93ZWRFeGl0Q29kZXMuaW5jbHVkZXMoZXhpdENvZGUpKSB7XG4gICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cblxuICAgIGlmIChpc1RyYW5zaWVudEdoRmFpbHVyZShjb21tYW5kLCBleGl0Q29kZSwgb3V0cHV0KSAmJiBhdHRlbXB0IDwgR0hfUkVUUllfTUFYX0FUVEVNUFRTKSB7XG4gICAgICBwcm9ncmVzcyhgVHJhbnNpZW50IEdpdEh1YiBDTEkgZmFpbHVyZTsgcmV0cnlpbmcuLi4gKGF0dGVtcHQgJHthdHRlbXB0fSBvZiAke0dIX1JFVFJZX01BWF9BVFRFTVBUUyAtIDF9KWApO1xuICAgICAgYXdhaXQgc2xlZXAoR0hfUkVUUllfQkFTRV9ERUxBWV9NUyAqIGF0dGVtcHQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZXhpdFdpdGhFcnJvcihvdXRwdXQgfHwgYENvbW1hbmQgZmFpbGVkOiAke2NvbW1hbmQuam9pbignICcpfWApO1xuICB9XG4gIGV4aXRXaXRoRXJyb3IoYENvbW1hbmQgZmFpbGVkIGFmdGVyICR7R0hfUkVUUllfTUFYX0FUVEVNUFRTfSBhdHRlbXB0czogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdoKGFyZ3M6IHN0cmluZ1tdLCBzdGRpbkRhdGE/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gYXdhaXQgcnVuQ29tbWFuZChbJ2doJywgLi4uYXJnc10sIHsgc3RkaW5EYXRhIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2hBbGxvd0V4aXRDb2RlcyhcbiAgYXJnczogc3RyaW5nW10sXG4gIGFsbG93ZWRFeGl0Q29kZXM6IG51bWJlcltdLFxuICBzdGRpbkRhdGE/OiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBhd2FpdCBydW5Db21tYW5kKFsnZ2gnLCAuLi5hcmdzXSwgeyBzdGRpbkRhdGEsIGFsbG93ZWRFeGl0Q29kZXMgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50UmVwb1BhcnRzKCk6IFByb21pc2U8W3N0cmluZywgc3RyaW5nXT4ge1xuICBjb25zdCBuYW1lV2l0aE93bmVyID0gKGF3YWl0IGdoKFsncmVwbycsICd2aWV3JywgJy0tanNvbicsICduYW1lV2l0aE93bmVyJywgJy0tanEnLCAnLm5hbWVXaXRoT3duZXInXSkpLnRyaW0oKTtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IG5hbWVXaXRoT3duZXIuc3BsaXQoJy8nLCAyKTtcbiAgaWYgKCFvd25lciB8fCAhbmFtZSkge1xuICAgIGV4aXRXaXRoRXJyb3IoJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIGN1cnJlbnQgcmVwb3NpdG9yeScpO1xuICB9XG4gIHJldHVybiBbb3duZXIsIG5hbWVdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudFByTnVtYmVyKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiAoYXdhaXQgZ2goWydwcicsICd2aWV3JywgJy0tanNvbicsICdudW1iZXInLCAnLS1qcScsICcubnVtYmVyJ10pKS50cmltKCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBncmFwaHFsPFQgZXh0ZW5kcyBKc29uT2JqZWN0PihcbiAgcXVlcnk6IHN0cmluZyxcbiAgdmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkPiA9IHt9XG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgYXJncyA9IFsnYXBpJywgJ2dyYXBocWwnLCAnLUYnLCAncXVlcnk9QC0nXTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFycykpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJy1GJywgYCR7a2V5fT0ke3ZhbHVlfWApO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBKU09OLnBhcnNlKGF3YWl0IGdoKGFyZ3MsIHF1ZXJ5KSkgYXMgSnNvbk9iamVjdCAmIHsgZXJyb3JzPzogQXJyYXk8eyBtZXNzYWdlPzogc3RyaW5nIH0+IH07XG4gIGlmICghQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlIGFzIFQ7XG4gIH1cblxuICBjb25zdCBlcnJvck1lc3NhZ2VzID0gcmVzcG9uc2UuZXJyb3JzLm1hcCgoZXJyb3IpID0+IGVycm9yLm1lc3NhZ2UgPz8gJ1Vua25vd24gR3JhcGhRTCBlcnJvcicpLmpvaW4oJ1xcbicpO1xuICBleGl0V2l0aEVycm9yKGBHcmFwaFFMIEFQSSBlcnJvcjpcXG4ke2Vycm9yTWVzc2FnZXN9YCk7XG59XG5cbmNvbnN0IFJFVklFV19USFJFQURfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdUaHJlYWRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICAgIGlzT3V0ZGF0ZWRcbiAgICAgICAgICAgIHBhdGhcbiAgICAgICAgICAgIGxpbmVcbiAgICAgICAgICAgIG9yaWdpbmFsTGluZVxuICAgICAgICAgICAgc3RhcnRMaW5lXG4gICAgICAgICAgICBvcmlnaW5hbFN0YXJ0TGluZVxuICAgICAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCkge1xuICAgICAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgICAgICB1cmxcbiAgICAgICAgICAgICAgICBib2R5XG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICAgICAgZGlmZkh1bmtcbiAgICAgICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUkVWSUVXX0NPTU1FTlRfUVVFUlkgPSBgXG4gIHF1ZXJ5KCR0aHJlYWRJZDogSUQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICBub2RlKGlkOiAkdGhyZWFkSWQpIHtcbiAgICAgIC4uLiBvbiBQdWxsUmVxdWVzdFJldmlld1RocmVhZCB7XG4gICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICBkaWZmSHVua1xuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBSRVZJRVdfVEhSRUFEX0lEU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIHJldmlld1RocmVhZHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgaXNSZXNvbHZlZFxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5mdW5jdGlvbiBub3JtYWxpemVDb21tZW50QXV0aG9yKGNvbW1lbnQ6IFJldmlld0NvbW1lbnROb2RlKTogUmV2aWV3Q29tbWVudE5vZGUgJiB7IGF1dGhvcj86IHN0cmluZyB8IG51bGwgfSB7XG4gIHJldHVybiB7XG4gICAgLi4uY29tbWVudCxcbiAgICBhdXRob3I6IHR5cGVvZiBjb21tZW50LmF1dGhvciA9PT0gJ3N0cmluZycgPyBjb21tZW50LmF1dGhvciA6IChjb21tZW50LmF1dGhvcj8ubG9naW4gPz8gbnVsbCksXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYWdpbmF0ZVJldmlld1RocmVhZHMoXG4gIHF1ZXJ5OiBzdHJpbmcsXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcixcbiAgb25UaHJlYWQ6ICh0aHJlYWQ6IFJldmlld1RocmVhZE5vZGUpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGZvciAoOzspIHtcbiAgICBjb25zdCByZXZpZXdUaHJlYWRzID0gKFxuICAgICAgYXdhaXQgZ3JhcGhxbDx7XG4gICAgICAgIGRhdGE/OiB7XG4gICAgICAgICAgcmVwb3NpdG9yeT86IHtcbiAgICAgICAgICAgIHB1bGxSZXF1ZXN0Pzoge1xuICAgICAgICAgICAgICByZXZpZXdUaHJlYWRzPzoge1xuICAgICAgICAgICAgICAgIG5vZGVzOiBSZXZpZXdUaHJlYWROb2RlW107XG4gICAgICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICAgIGhhc05leHRQYWdlOiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfT4ocXVlcnksIHtcbiAgICAgICAgb3duZXIsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIG51bWJlcjogTnVtYmVyKHByTnVtYmVyKSxcbiAgICAgICAgY3Vyc29yLFxuICAgICAgfSlcbiAgICApLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0Py5yZXZpZXdUaHJlYWRzO1xuXG4gICAgaWYgKCFyZXZpZXdUaHJlYWRzKSB7XG4gICAgICBleGl0V2l0aEVycm9yKFxuICAgICAgICAnQ291bGQgbm90IGZpbmQgcmV2aWV3VGhyZWFkcyBpbiBHcmFwaFFMIHJlc3BvbnNlLiBUaGUgcHVsbCByZXF1ZXN0IG1heSBub3QgZXhpc3Qgb3IgdGhlcmUgd2FzIGFuIEFQSSBlcnJvci4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgdGhyZWFkIG9mIHJldmlld1RocmVhZHMubm9kZXMpIHtcbiAgICAgIGF3YWl0IG9uVGhyZWFkKHRocmVhZCk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXZpZXdUaHJlYWRzLnBhZ2VJbmZvLmhhc05leHRQYWdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGN1cnNvciA9IHJldmlld1RocmVhZHMucGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyhcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyXG4pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IGlkczogc3RyaW5nW10gPSBbXTtcbiAgYXdhaXQgcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFJFVklFV19USFJFQURfSURTX1FVRVJZLCBvd25lciwgbmFtZSwgcHJOdW1iZXIsICh0aHJlYWQpID0+IHtcbiAgICBpZiAoIXRocmVhZC5pc1Jlc29sdmVkKSB7XG4gICAgICBpZHMucHVzaCh0aHJlYWQuaWQpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpZHM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyhcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+W10+IHtcbiAgY29uc3QgdGhyZWFkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSA9IFtdO1xuXG4gIGF3YWl0IHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhSRVZJRVdfVEhSRUFEX1FVRVJZLCBvd25lciwgbmFtZSwgcHJOdW1iZXIsIGFzeW5jICh0aHJlYWQpID0+IHtcbiAgICBpZiAodGhyZWFkLmlzUmVzb2x2ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb21tZW50cyA9IHRocmVhZC5jb21tZW50cy5ub2Rlcy5tYXAobm9ybWFsaXplQ29tbWVudEF1dGhvcik7XG4gICAgbGV0IHBhZ2VJbmZvID0gdGhyZWFkLmNvbW1lbnRzLnBhZ2VJbmZvO1xuICAgIGxldCBjdXJzb3IgPSBwYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuXG4gICAgd2hpbGUgKHBhZ2VJbmZvLmhhc05leHRQYWdlKSB7XG4gICAgICBjb25zdCBjb21tZW50Q29ubmVjdGlvbiA9IChcbiAgICAgICAgYXdhaXQgZ3JhcGhxbDx7XG4gICAgICAgICAgZGF0YT86IHtcbiAgICAgICAgICAgIG5vZGU/OiB7XG4gICAgICAgICAgICAgIGNvbW1lbnRzPzoge1xuICAgICAgICAgICAgICAgIG5vZGVzOiBSZXZpZXdDb21tZW50Tm9kZVtdO1xuICAgICAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfTtcbiAgICAgICAgfT4oUkVWSUVXX0NPTU1FTlRfUVVFUlksIHsgdGhyZWFkSWQ6IHRocmVhZC5pZCwgY3Vyc29yIH0pXG4gICAgICApLmRhdGE/Lm5vZGU/LmNvbW1lbnRzO1xuXG4gICAgICBpZiAoIWNvbW1lbnRDb25uZWN0aW9uKSB7XG4gICAgICAgIGV4aXRXaXRoRXJyb3IoYENvdWxkIG5vdCBmaW5kIGNvbW1lbnRzIGluIEdyYXBoUUwgcmVzcG9uc2UgZm9yIHRocmVhZCAke3RocmVhZC5pZH0uYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbW1lbnRzLnB1c2goLi4uY29tbWVudENvbm5lY3Rpb24ubm9kZXMubWFwKG5vcm1hbGl6ZUNvbW1lbnRBdXRob3IpKTtcbiAgICAgIHBhZ2VJbmZvID0gY29tbWVudENvbm5lY3Rpb24ucGFnZUluZm87XG4gICAgICBjdXJzb3IgPSBwYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRocmVhZHMucHVzaCh7XG4gICAgICBpZDogdGhyZWFkLmlkLFxuICAgICAgaXNSZXNvbHZlZDogdGhyZWFkLmlzUmVzb2x2ZWQsXG4gICAgICBpc091dGRhdGVkOiB0aHJlYWQuaXNPdXRkYXRlZCxcbiAgICAgIHBhdGg6IHRocmVhZC5wYXRoLFxuICAgICAgbGluZTogdGhyZWFkLmxpbmUsXG4gICAgICBvcmlnaW5hbExpbmU6IHRocmVhZC5vcmlnaW5hbExpbmUsXG4gICAgICBzdGFydExpbmU6IHRocmVhZC5zdGFydExpbmUsXG4gICAgICBvcmlnaW5hbFN0YXJ0TGluZTogdGhyZWFkLm9yaWdpbmFsU3RhcnRMaW5lLFxuICAgICAgY29tbWVudHMsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiB0aHJlYWRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24geWFtbER1bXAoZGF0YTogdW5rbm93bik6IHN0cmluZyB7XG4gIHJldHVybiBzdHJpbmdpZnlZYW1sKGRhdGEsIHlhbWxTdHJpbmdpZnlPcHRpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZXBDb3B5PFQ+KGRhdGE6IFQpOiBUIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpIGFzIFQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsYXRlc3RQckNpUmVzdWx0cyhwck51bWJlcj86IHN0cmluZyk6IFByb21pc2U8Q2lSZXN1bHRzPiB7XG4gIGNvbnN0IGFyZ3MgPSBbJ3ByJywgJ2NoZWNrcyddO1xuICBpZiAocHJOdW1iZXIpIHtcbiAgICBhcmdzLnB1c2gocHJOdW1iZXIpO1xuICB9XG4gIGFyZ3MucHVzaCgnLS1qc29uJywgJ2J1Y2tldCxjb21wbGV0ZWRBdCxkZXNjcmlwdGlvbixldmVudCxsaW5rLG5hbWUsc3RhcnRlZEF0LHN0YXRlLHdvcmtmbG93Jyk7XG5cbiAgbGV0IGNoZWNrczogQ2hlY2tbXSA9IFtdO1xuICB0cnkge1xuICAgIGNvbnN0IHJhdyA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoYXJncywgWzhdKTtcbiAgICBjaGVja3MgPSByYXcudHJpbSgpLmxlbmd0aCA+IDAgPyAoSlNPTi5wYXJzZShyYXcpIGFzIENoZWNrW10pIDogW107XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgIGNoZWNrcyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdW1tYXJ5ID0gY2hlY2tzLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+PigoY291bnRzLCBjaGVjaykgPT4ge1xuICAgIGNvbnN0IGJ1Y2tldCA9IGNoZWNrLmJ1Y2tldCA/PyAnJztcbiAgICBjb3VudHNbYnVja2V0XSA9IChjb3VudHNbYnVja2V0XSA/PyAwKSArIDE7XG4gICAgcmV0dXJuIGNvdW50cztcbiAgfSwge30pO1xuXG4gIHJldHVybiB7XG4gICAgc3VtbWFyeToge1xuICAgICAgdG90YWw6IGNoZWNrcy5sZW5ndGgsXG4gICAgICBwYXNzOiBzdW1tYXJ5LnBhc3MgPz8gMCxcbiAgICAgIGZhaWw6IHN1bW1hcnkuZmFpbCA/PyAwLFxuICAgICAgcGVuZGluZzogc3VtbWFyeS5wZW5kaW5nID8/IDAsXG4gICAgICBza2lwcGluZzogc3VtbWFyeS5za2lwcGluZyA/PyAwLFxuICAgICAgY2FuY2VsOiBzdW1tYXJ5LmNhbmNlbCA/PyAwLFxuICAgIH0sXG4gICAgY2hlY2tzLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xhc3NpZmllZExhdGVzdFJlc3VsdHMoY2lSZXN1bHRzOiBDaVJlc3VsdHMpOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+IHtcbiAgY29uc3QgbGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3cgPSBjaVJlc3VsdHMuY2hlY2tzLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBDaGVja1tdPj4oKGdyb3VwZWRSZXN1bHRzLCBjaGVjaykgPT4ge1xuICAgIGNvbnN0IHdvcmtmbG93S2V5ID0gY2hlY2sud29ya2Zsb3cgfHwgY2hlY2submFtZSB8fCAndW5rbm93bl93b3JrZmxvdyc7XG4gICAgZ3JvdXBlZFJlc3VsdHNbd29ya2Zsb3dLZXldID8/PSBbXTtcbiAgICBncm91cGVkUmVzdWx0c1t3b3JrZmxvd0tleV0ucHVzaChjaGVjayk7XG4gICAgcmV0dXJuIGdyb3VwZWRSZXN1bHRzO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhsYXRlc3RSZXN1bHRzQnlXb3JrZmxvdykubWFwKChbd29ya2Zsb3dLZXksIGNoZWNrc10pID0+IHtcbiAgICAgIGNvbnN0IGxhdGVzdEF0dGVtcHRDaGVja3MgPSBsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyhjaGVja3MpO1xuICAgICAgY29uc3QgZmlyc3RDaGVjayA9IGxhdGVzdEF0dGVtcHRDaGVja3NbMF07XG4gICAgICBpZiAoIWZpcnN0Q2hlY2spIHtcbiAgICAgICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IG5vIGNoZWNrcyBmb3VuZCBmb3Igd29ya2Zsb3cgJHt3b3JrZmxvd0tleX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxhdGVzdENoZWNrID1cbiAgICAgICAgbGF0ZXN0QXR0ZW1wdENoZWNrcy5yZWR1Y2U8Q2hlY2sgfCB1bmRlZmluZWQ+KChjdXJyZW50TGF0ZXN0LCBjaGVjaykgPT4ge1xuICAgICAgICAgIGlmICghY3VycmVudExhdGVzdCkge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2spID4gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY3VycmVudExhdGVzdCkgPyBjaGVjayA6IGN1cnJlbnRMYXRlc3Q7XG4gICAgICAgIH0sIHVuZGVmaW5lZCkgPz8gZmlyc3RDaGVjaztcblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgd29ya2Zsb3dLZXksXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc2lmaWNhdGlvbjogd29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbihsYXRlc3RBdHRlbXB0Q2hlY2tzKSxcbiAgICAgICAgICBjaGVjazogbGF0ZXN0Q2hlY2ssXG4gICAgICAgICAgY2hlY2tzOiBsYXRlc3RBdHRlbXB0Q2hlY2tzLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9KVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKFxuICBjbGFzc2lmaWVkUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PlxuKTogW1JlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4sIFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD5dIHtcbiAgY29uc3QgZmFpbGVkUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiA9IHt9O1xuICBjb25zdCBydW5uaW5nUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiA9IHt9O1xuXG4gIGZvciAoY29uc3QgW3dvcmtmbG93S2V5LCByZXN1bHRdIG9mIE9iamVjdC5lbnRyaWVzKGNsYXNzaWZpZWRSZXN1bHRzKSkge1xuICAgIGlmIChyZXN1bHQuY2xhc3NpZmljYXRpb24gPT09ICdmYWlsZWQnKSB7XG4gICAgICBmYWlsZWRSZXN1bHRzW3dvcmtmbG93S2V5XSA9IHJlc3VsdDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAocmVzdWx0LmNsYXNzaWZpY2F0aW9uID09PSAncnVubmluZycgJiYgcmVzdWx0LmNoZWNrcy5zb21lKChjaGVjaykgPT4gdGVzdFJlbGF0ZWRDaGVjayhjaGVjaykpKSB7XG4gICAgICBydW5uaW5nUmVzdWx0c1t3b3JrZmxvd0tleV0gPSByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFtmYWlsZWRSZXN1bHRzLCBydW5uaW5nUmVzdWx0c107XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzKFxuICBwck51bWJlcjogc3RyaW5nLFxuICBzbGVlcEZuOiAoc2Vjb25kczogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+ID0gc2xlZXBTZWNvbmRzLFxuICBsYXRlc3RDaVJlc3VsdHNGbjogKHByTnVtYmVyPzogc3RyaW5nKSA9PiBDaVJlc3VsdHMgfCBQcm9taXNlPENpUmVzdWx0cz4gPSBsYXRlc3RQckNpUmVzdWx0cyxcbiAgcHJvZ3Jlc3NGbjogKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZCA9IHByb2dyZXNzXG4pOiBQcm9taXNlPFtDaVJlc3VsdHMsIG51bWJlciwgYm9vbGVhbl0+IHtcbiAgbGV0IGF0dGVtcHRzID0gMDtcbiAgbGV0IGNpUmVzdWx0cyA9IGF3YWl0IGxhdGVzdENpUmVzdWx0c0ZuKHByTnVtYmVyKTtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgY2xhc3NpZmllZFJlc3VsdHMgPSBjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyhjaVJlc3VsdHMpO1xuICAgIGNvbnN0IFtmYWlsZWRSZXN1bHRzLCBydW5uaW5nUmVzdWx0c10gPSBmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQoY2xhc3NpZmllZFJlc3VsdHMpO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKGZhaWxlZFJlc3VsdHMpLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBbY2lSZXN1bHRzLCBhdHRlbXB0cywgZmFsc2VdO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtjaVJlc3VsdHMsIGF0dGVtcHRzLCBmYWxzZV07XG4gICAgfVxuICAgIGlmIChhdHRlbXB0cyA+PSBURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTKSB7XG4gICAgICByZXR1cm4gW2NpUmVzdWx0cywgYXR0ZW1wdHMsIHRydWVdO1xuICAgIH1cblxuICAgIGF0dGVtcHRzICs9IDE7XG4gICAgaWYgKHNob3VsZFJlcG9ydFRlc3RDaGVja1dhaXRQcm9ncmVzcyhhdHRlbXB0cykpIHtcbiAgICAgIHByb2dyZXNzRm4oXG4gICAgICAgIGBXYWl0aW5nIGZvciB0ZXN0LXJlbGF0ZWQgd29ya2Zsb3dzIHRvIGZpbmlzaCAoYXR0ZW1wdCAke2F0dGVtcHRzfS8ke1RFU1RfQ0hFQ0tfV0FJVF9NQVhfQVRURU1QVFN9KTogJHtPYmplY3Qua2V5cyhydW5uaW5nUmVzdWx0cykuam9pbignLCAnKX1gXG4gICAgICApO1xuICAgIH1cbiAgICBhd2FpdCBzbGVlcEZuKFRFU1RfQ0hFQ0tfV0FJVF9JTlRFUlZBTF9TRUNPTkRTKTtcbiAgICBjaVJlc3VsdHMgPSBhd2FpdCBsYXRlc3RDaVJlc3VsdHNGbihwck51bWJlcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkUmVwb3J0VGVzdENoZWNrV2FpdFByb2dyZXNzKGF0dGVtcHQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICBjb25zdCBwcm9ncmVzc0ludGVydmFsQXR0ZW1wdHMgPSBNYXRoLm1heChcbiAgICAxLFxuICAgIE1hdGguZmxvb3IoVEVTVF9DSEVDS19QUk9HUkVTU19JTlRFUlZBTF9TRUNPTkRTIC8gVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMpXG4gICk7XG4gIHJldHVybiBhdHRlbXB0ID09PSAxIHx8IChhdHRlbXB0IC0gMSkgJSBwcm9ncmVzc0ludGVydmFsQXR0ZW1wdHMgPT09IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjazogQ2hlY2sgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBsaW5rID0gY2hlY2s/Lmxpbms7XG4gIGlmICghbGluaykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGxpbmsubWF0Y2goL1xcL2FjdGlvbnNcXC9ydW5zXFwvKFxcZCspLyk/LlsxXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdvcmtmbG93UnVuKHJ1bklkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPEpzb25PYmplY3QgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKCFydW5JZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBydW5Kc29uID0gYXdhaXQgZ2hBbGxvd0V4aXRDb2RlcyhbJ3J1bicsICd2aWV3JywgcnVuSWQsICctLWpzb24nLCBXT1JLRkxPV19SVU5fSlNPTl9GSUVMRFMuam9pbignLCcpXSwgWzFdKTtcbiAgaWYgKHJ1bkpzb24udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHJ1bkpzb24pIGFzIEpzb25PYmplY3Q7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgIHByb2Nlc3NTdGRlcnIud3JpdGUoYFdhcm5pbmc6IENvdWxkIG5vdCBwYXJzZSBKU09OIGZvciB3b3JrZmxvdyBydW4gJHtydW5JZH06ICR7ZXJyb3IubWVzc2FnZX1cXG5gKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyhjaGVja3M6IENoZWNrW10pOiBDaGVja1tdIHtcbiAgY29uc3QgZ3JvdXBzID0gY2hlY2tzLnJlZHVjZSgoZ3JvdXBlZENoZWNrcywgY2hlY2spID0+IHtcbiAgICBjb25zdCBrZXkgPSB3b3JrZmxvd0F0dGVtcHRLZXkoY2hlY2spO1xuICAgIGNvbnN0IGdyb3VwID0gZ3JvdXBlZENoZWNrcy5nZXQoa2V5KTtcbiAgICBpZiAoZ3JvdXApIHtcbiAgICAgIGdyb3VwLnB1c2goY2hlY2spO1xuICAgICAgcmV0dXJuIGdyb3VwZWRDaGVja3M7XG4gICAgfVxuICAgIGdyb3VwZWRDaGVja3Muc2V0KGtleSwgW2NoZWNrXSk7XG4gICAgcmV0dXJuIGdyb3VwZWRDaGVja3M7XG4gIH0sIG5ldyBNYXA8c3RyaW5nLCBDaGVja1tdPigpKTtcblxuICByZXR1cm4gQXJyYXkuZnJvbShncm91cHMudmFsdWVzKCkpLnJlZHVjZTxDaGVja1tdPigobGF0ZXN0R3JvdXAsIGN1cnJlbnRHcm91cCkgPT4ge1xuICAgIGlmIChsYXRlc3RHcm91cC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBjdXJyZW50R3JvdXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhdGVzdEdyb3VwVGltZXN0YW1wKGN1cnJlbnRHcm91cCkgPiBsYXRlc3RHcm91cFRpbWVzdGFtcChsYXRlc3RHcm91cCkgPyBjdXJyZW50R3JvdXAgOiBsYXRlc3RHcm91cDtcbiAgfSwgW10pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dBdHRlbXB0S2V5KGNoZWNrOiBDaGVjayk6IHN0cmluZyB7XG4gIGNvbnN0IHJ1bklkID0gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2spO1xuICByZXR1cm4gcnVuSWQgPyBgcnVuOiR7cnVuSWR9YCA6ICd1bmtub3duX3J1bic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd1Jlc3VsdENsYXNzaWZpY2F0aW9uKGNoZWNrczogQ2hlY2tbXSk6IFdvcmtmbG93Q2xhc3NpZmljYXRpb24ge1xuICBjb25zdCBidWNrZXRzID0gY2hlY2tzLm1hcCgoY2hlY2spID0+IGNoZWNrLmJ1Y2tldCA/PyAnJyk7XG4gIGlmIChidWNrZXRzLnNvbWUoKGJ1Y2tldCkgPT4gIVsncGFzcycsICdza2lwcGluZycsICdwZW5kaW5nJ10uaW5jbHVkZXMoYnVja2V0KSkpIHtcbiAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gIH1cbiAgaWYgKGJ1Y2tldHMuaW5jbHVkZXMoJ3BlbmRpbmcnKSkge1xuICAgIHJldHVybiAncnVubmluZyc7XG4gIH1cbiAgcmV0dXJuICdzdWNjZXNzZnVsJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrOiBDaGVjayk6IHN0cmluZyB7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IGNoZWNrLmNvbXBsZXRlZEF0O1xuICBpZiAoIXRpbWVzdGFtcCB8fCB0aW1lc3RhbXAgPT09IFpFUk9fVElNRVNUQU1QKSB7XG4gICAgcmV0dXJuIGNoZWNrLnN0YXJ0ZWRBdCA/PyAnJztcbiAgfVxuICByZXR1cm4gdGltZXN0YW1wO1xufVxuXG5mdW5jdGlvbiBsYXRlc3RHcm91cFRpbWVzdGFtcChjaGVja3M6IENoZWNrW10pOiBzdHJpbmcge1xuICByZXR1cm4gY2hlY2tzLnJlZHVjZSgobGF0ZXN0LCBjaGVjaykgPT4ge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrKTtcbiAgICByZXR1cm4gdGltZXN0YW1wID4gbGF0ZXN0ID8gdGltZXN0YW1wIDogbGF0ZXN0O1xuICB9LCAnJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0UmVsYXRlZENoZWNrKGNoZWNrOiBDaGVjayk6IGJvb2xlYW4ge1xuICByZXR1cm4gW2NoZWNrLm5hbWUsIGNoZWNrLndvcmtmbG93XS5zb21lKCh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBURVNUX1JFTEFURURfUEFUVEVSTi50ZXN0KHZhbHVlKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzbGVlcFNlY29uZHMoc2Vjb25kczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHNsZWVwKHNlY29uZHMgKiAxMDAwKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RyZWFtVG9UZXh0KHN0cmVhbTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtIHwgbnVsbCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHN0cmVhbSkge1xuICAgIGNodW5rcy5wdXNoKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycgPyBCdWZmZXIuZnJvbShjaHVuaykgOiBCdWZmZXIuZnJvbShjaHVuaykpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcykudG9TdHJpbmcoJ3V0ZjgnKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXBsaWVzRnJvbVN0ZGluKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICBjb25zdCBpbnB1dCA9IGF3YWl0IHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgpO1xuICBjb25zdCBwYXlsb2FkID0gcGFyc2VSZXBseUlucHV0KGlucHV0KTtcbiAgY29uc3Qgbm9ybWFsaXplZFJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBbdGhyZWFkSWQsIGJvZHldIG9mIE9iamVjdC5lbnRyaWVzKHBheWxvYWQucmVwbGllcykpIHtcbiAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnICYmIGJvZHkubGVuZ3RoID4gMCkge1xuICAgICAgbm9ybWFsaXplZFJlcGxpZXNbdGhyZWFkSWRdID0gYm9keTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWRSZXBsaWVzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblByKGJvZHk/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBoZWFkID0gKGF3YWl0IHJ1bkNvbW1hbmQoWydnaXQnLCAnYnJhbmNoJywgJy0tc2hvdy1jdXJyZW50J10pKS50cmltKCk7XG4gIGNvbnN0IGJhc2UgPSAoYXdhaXQgZ2goWydyZXBvJywgJ3ZpZXcnLCAnLS1qc29uJywgJ2RlZmF1bHRCcmFuY2hSZWYnLCAnLS1qcScsICcuZGVmYXVsdEJyYW5jaFJlZi5uYW1lJ10pKS50cmltKCk7XG5cbiAgaWYgKCFoZWFkKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgY3VycmVudCBicmFuY2gnKTtcbiAgfVxuICBpZiAoIWJhc2UpIHtcbiAgICBleGl0V2l0aEVycm9yKCdFcnJvcjogY291bGQgbm90IGRldGVybWluZSBkZWZhdWx0IGJyYW5jaCcpO1xuICB9XG4gIGlmIChoZWFkID09PSBiYXNlKSB7XG4gICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IGN1cnJlbnQgYnJhbmNoIGlzIHRoZSBkZWZhdWx0IGJyYW5jaCAoJHtiYXNlfSlgKTtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZUFyZ3MgPSBbJ3ByJywgJ2NyZWF0ZScsICctLWJhc2UnLCBiYXNlLCAnLS1oZWFkJywgaGVhZCwgJy0tZmlsbCddO1xuICBpZiAoYm9keSAmJiBib2R5Lmxlbmd0aCA+IDApIHtcbiAgICBjcmVhdGVBcmdzLnB1c2goJy0tYm9keS1maWxlJywgJy0nKTtcbiAgfVxuXG4gIHByb2dyZXNzKCdDcmVhdGluZyBwdWxsIHJlcXVlc3QuLi4nKTtcbiAgYXdhaXQgZ2goY3JlYXRlQXJncywgYm9keSk7XG5cbiAgcmV0dXJuIHlhbWxEdW1wKFxuICAgIEpTT04ucGFyc2UoYXdhaXQgZ2goWydwcicsICd2aWV3JywgJy0tanNvbicsICdpZCxudW1iZXIsdGl0bGUsdXJsLHN0YXRlLGlzRHJhZnQsYmFzZVJlZk5hbWUsaGVhZFJlZk5hbWUsYXV0aG9yJ10pKVxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFByUmV2aWV3VGhyZWFkcygpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuXG4gIHByb2dyZXNzKCdGZXRjaGluZyB1bnJlc29sdmVkIHJldmlldyB0aHJlYWRzLi4uJyk7XG4gIHJldHVybiB5YW1sRHVtcCh7IHVucmVzb2x2ZWRfdGhyZWFkczogYXdhaXQgdW5yZXNvbHZlZFJldmlld1RocmVhZHMob3duZXIsIG5hbWUsIHByTnVtYmVyKSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQclJldmlld1RocmVhZHMocmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG4gIGNvbnN0IHVucmVzb2x2ZWRJZHMgPSBuZXcgU2V0KGF3YWl0IHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMob3duZXIsIG5hbWUsIHByTnVtYmVyKSk7XG5cbiAgcHJvZ3Jlc3MoYFJlcGx5aW5nIHRvICR7T2JqZWN0LmtleXMocmVwbGllcykubGVuZ3RofSByZXZpZXcgdGhyZWFkcy4uLmApO1xuXG4gIGNvbnN0IHJlc29sdmVkVGhyZWFkSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMocmVwbGllcyk7XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIFt0aHJlYWRJZCwgYm9keV1dIG9mIGVudHJpZXMuZW50cmllcygpKSB7XG4gICAgcHJvZ3Jlc3MoYFByb2Nlc3NpbmcgJHtpbmRleCArIDF9LyR7ZW50cmllcy5sZW5ndGh9OiAke3RocmVhZElkfWApO1xuICAgIGlmICghdW5yZXNvbHZlZElkcy5oYXModGhyZWFkSWQpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdyYXBocWw8e1xuICAgICAgZGF0YT86IHtcbiAgICAgICAgcmVzb2x2ZVJldmlld1RocmVhZD86IHtcbiAgICAgICAgICB0aHJlYWQ/OiB7XG4gICAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAgaXNSZXNvbHZlZDogYm9vbGVhbjtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9PihcbiAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJHRocmVhZElkOiBJRCEsICRib2R5OiBTdHJpbmchKSB7XG4gICAgICAgICAgYWRkUHVsbFJlcXVlc3RSZXZpZXdUaHJlYWRSZXBseShpbnB1dDoge3B1bGxSZXF1ZXN0UmV2aWV3VGhyZWFkSWQ6ICR0aHJlYWRJZCwgYm9keTogJGJvZHl9KSB7XG4gICAgICAgICAgICBjb21tZW50IHtcbiAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc29sdmVSZXZpZXdUaHJlYWQoaW5wdXQ6IHt0aHJlYWRJZDogJHRocmVhZElkfSkge1xuICAgICAgICAgICAgdGhyZWFkIHtcbiAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgICAgaXNSZXNvbHZlZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgIHsgdGhyZWFkSWQsIGJvZHkgfVxuICAgICk7XG5cbiAgICBpZiAocmVzcG9uc2UuZGF0YT8ucmVzb2x2ZVJldmlld1RocmVhZD8udGhyZWFkPy5pc1Jlc29sdmVkKSB7XG4gICAgICByZXNvbHZlZFRocmVhZElkcy5wdXNoKHRocmVhZElkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvZ3Jlc3MoYFdhcm5pbmc6IGZhaWxlZCB0byByZXNvbHZlIHRocmVhZCAke3RocmVhZElkfS5gKTtcbiAgICB9XG4gIH1cblxuICBwcm9ncmVzcygnRG9uZS4nKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgcmVzb2x2ZWRfdGhyZWFkX2lkczogcmVzb2x2ZWRUaHJlYWRJZHMgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja1ByQ2koKTogUHJvbWlzZTx7IG91dHB1dDogc3RyaW5nOyBleGl0Q29kZTogbnVtYmVyIH0+IHtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcblxuICBwcm9ncmVzcygnRmV0Y2hpbmcgbGF0ZXN0IENJIHJlc3VsdHMuLi4nKTtcbiAgY29uc3QgW2NpUmVzdWx0cywgd2FpdEF0dGVtcHRzLCB3YWl0VGltZWRPdXRdID0gYXdhaXQgd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyhwck51bWJlcik7XG4gIGNvbnN0IGNsYXNzaWZpZWRMYXRlc3QgPSBjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyhjaVJlc3VsdHMpO1xuICBjb25zdCBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdID0gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKGNsYXNzaWZpZWRMYXRlc3QpO1xuXG4gIGNvbnN0IGxhdGVzdFdvcmtmbG93UmVzdWx0cyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5lbnRyaWVzKGNsYXNzaWZpZWRMYXRlc3QpLm1hcChhc3luYyAoW3dvcmtmbG93S2V5LCByZXN1bHRdKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoZWNrID0gcmVzdWx0LmNoZWNrO1xuICAgICAgICBjb25zdCBydW4gPSBhd2FpdCB3b3JrZmxvd1J1bih3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjaykpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHdvcmtmbG93S2V5LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzaWZpY2F0aW9uOiByZXN1bHQuY2xhc3NpZmljYXRpb24sXG4gICAgICAgICAgICBjaGVjazogZGVlcENvcHkoY2hlY2spLFxuICAgICAgICAgICAgd29ya2Zsb3dSdW46IHJ1biAmJiBkZWVwQ29weShydW4pLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9KVxuICAgIClcbiAgKTtcblxuICBjb25zdCBwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBsYXRlc3RfY2lfcmVzdWx0czogY2lSZXN1bHRzLFxuICAgIHdhaXRlZF9mb3JfdGVzdF9yZWxhdGVkX2NoZWNrczogd2FpdEF0dGVtcHRzID4gMCxcbiAgICB0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF9hdHRlbXB0czogd2FpdEF0dGVtcHRzLFxuICAgIHRlc3RfcmVsYXRlZF9jaGVja193YWl0X3RpbWVkX291dDogd2FpdFRpbWVkT3V0LFxuICAgIGxhdGVzdF93b3JrZmxvd19yZXN1bHRzOiBsYXRlc3RXb3JrZmxvd1Jlc3VsdHMsXG4gIH07XG5cbiAgaWYgKE9iamVjdC5rZXlzKGZhaWxlZFJlc3VsdHMpLmxlbmd0aCA+IDApIHtcbiAgICBwYXlsb2FkLmZhaWxlZF93b3JrZmxvd19vdXRwdXRzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGZhaWxlZFJlc3VsdHMpLm1hcChhc3luYyAoW3dvcmtmbG93S2V5LCByZXN1bHRdKSA9PiB7XG4gICAgICAgICAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhyZXN1bHQuY2hlY2spO1xuICAgICAgICAgIGlmICghcnVuSWQpIHtcbiAgICAgICAgICAgIHJldHVybiBbd29ya2Zsb3dLZXksICdGYWlsZWQgbGF0ZXN0IHJlc3VsdCBoYXMgbm8gR2l0SHViIEFjdGlvbnMgcnVuIGxpbmsuJ107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbd29ya2Zsb3dLZXksIGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydydW4nLCAndmlldycsIHJ1bklkLCAnLS1sb2ctZmFpbGVkJ10sIFsxXSldO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG4gICAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDEgfTtcbiAgfVxuXG4gIGlmIChPYmplY3Qua2V5cyhydW5uaW5nUmVzdWx0cykubGVuZ3RoID4gMCkge1xuICAgIHBheWxvYWQudGVzdF93b3JrZmxvd19vdXRwdXQgPSAnVGltZWQgb3V0IHdhaXRpbmcgZm9yIHRlc3QtcmVsYXRlZCB3b3JrZmxvd3MgdG8gZmluaXNoLic7XG4gICAgcGF5bG9hZC5ydW5uaW5nX3Rlc3RfcmVsYXRlZF93b3JrZmxvd3MgPSBPYmplY3Qua2V5cyhydW5uaW5nUmVzdWx0cyk7XG4gICAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDEgfTtcbiAgfVxuXG4gIHBheWxvYWQudGVzdF93b3JrZmxvd19vdXRwdXQgPSAnQWxsIHdvcmtmbG93cyBhcmUgc3VjY2Vzc2Z1bC4nO1xuICByZXR1cm4geyBvdXRwdXQ6IHlhbWxEdW1wKHBheWxvYWQpLCBleGl0Q29kZTogMCB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVJlcGx5SW5wdXQoaW5wdXQ6IHN0cmluZyk6IHsgcmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gfSB7XG4gIGNvbnN0IGVycm9yUHJlZml4ID0gJ0Vycm9yOiBJbnZhbGlkIGlucHV0IGZvcm1hdCBvbiBzdGRpbic7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGlucHV0KSBhcyB1bmtub3duO1xuICAgIGlmICghaXNSZXBseUlucHV0KHBhcnNlZCkpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoYCR7ZXJyb3JQcmVmaXh9OiBleHBlY3RlZCBhbiBvYmplY3Qgd2l0aCBhIHN0cmluZy12YWx1ZWQgXFxgcmVwbGllc1xcYCBtYXBgLCAyKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IEludmFsaWQgSlNPTiBwcm92aWRlZCBvbiBzdGRpbjogJHtlcnJvci5tZXNzYWdlfWAsIDIpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1JlcGx5SW5wdXQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyB7IHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+IH0ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHJlcGxpZXMgPSAodmFsdWUgYXMgeyByZXBsaWVzPzogdW5rbm93biB9KS5yZXBsaWVzO1xuICBpZiAodHlwZW9mIHJlcGxpZXMgIT09ICdvYmplY3QnIHx8IHJlcGxpZXMgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShyZXBsaWVzKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QudmFsdWVzKHJlcGxpZXMpLmV2ZXJ5KChyZXBseSkgPT4gcmVwbHkgPT09IG51bGwgfHwgcmVwbHkgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgcmVwbHkgPT09ICdzdHJpbmcnKTtcbn1cbiIsImltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcblxuZXhwb3J0IHR5cGUgUmV2aWV3QWdlbnQgPSAnY29kZXgnIHwgJ2NsYXVkZScgfCAnZ2VtaW5pJztcbmV4cG9ydCB0eXBlIFJldmlld01vZGUgPSBSZXZpZXdBZ2VudCB8ICdhbGwnO1xuXG5jb25zdCByZXZpZXdBZ2VudHM6IHJlYWRvbmx5IHtcbiAgbmFtZTogUmV2aWV3QWdlbnQ7XG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIGNyZWF0ZUNvbW1hbmQ6IChwcm9tcHQ6IHN0cmluZykgPT4gc3RyaW5nW107XG59W10gPSBbXG4gIHtcbiAgICBuYW1lOiAnY29kZXgnLFxuICAgIGRpc3BsYXlOYW1lOiAnQ29kZXgnLFxuICAgIGNyZWF0ZUNvbW1hbmQ6IChwcm9tcHQpID0+IFsnbnB4JywgJy0teWVzJywgJ0BvcGVuYWkvY29kZXhAbGF0ZXN0JywgJy0teW9sbycsICctcCcsIHByb21wdF0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnY2xhdWRlJyxcbiAgICBkaXNwbGF5TmFtZTogJ0NsYXVkZSBDb2RlJyxcbiAgICBjcmVhdGVDb21tYW5kOiAocHJvbXB0KSA9PiBbJ2NsYXVkZScsICctLWRhbmdlcm91c2x5LXNraXAtcGVybWlzc2lvbnMnLCAnLXAnLCBwcm9tcHRdLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2dlbWluaScsXG4gICAgZGlzcGxheU5hbWU6ICdHZW1pbmkgQ0xJJyxcbiAgICBjcmVhdGVDb21tYW5kOiAocHJvbXB0KSA9PiBbXG4gICAgICAnbnB4JyxcbiAgICAgICctLXllcycsXG4gICAgICAnQGdvb2dsZS9nZW1pbmktY2xpQHByZXZpZXcnLFxuICAgICAgJy0tYXBwcm92YWwtbW9kZScsXG4gICAgICAneW9sbycsXG4gICAgICAnLS1tb2RlbCcsXG4gICAgICAnZ2VtaW5pLTMuMS1wcm8tcHJldmlldycsXG4gICAgICAnLXAnLFxuICAgICAgcHJvbXB0LFxuICAgIF0sXG4gIH0sXG5dO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuUmV2aWV3KGFnZW50OiBSZXZpZXdBZ2VudCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGRlZmF1bHRCcmFuY2ggPSBhd2FpdCBjdXJyZW50RGVmYXVsdEJyYW5jaCgpO1xuICBjb25zdCBwcm9tcHQgPSBidWlsZFJldmlld1Byb21wdChkZWZhdWx0QnJhbmNoKTtcblxuICBjb25zdCByZXZpZXdBZ2VudCA9IHJldmlld0FnZW50cy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5uYW1lID09PSBhZ2VudCk7XG4gIGlmICghcmV2aWV3QWdlbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHJldmlldyBhZ2VudDogJHthZ2VudH1gKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBydW5Db21tYW5kKHJldmlld0FnZW50LmNyZWF0ZUNvbW1hbmQocHJvbXB0KSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5BbGxSZXZpZXdzKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGRlZmF1bHRCcmFuY2ggPSBhd2FpdCBjdXJyZW50RGVmYXVsdEJyYW5jaCgpO1xuICBjb25zdCBwcm9tcHQgPSBidWlsZFJldmlld1Byb21wdChkZWZhdWx0QnJhbmNoKTtcbiAgY29uc3QgcmV2aWV3UmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgIHJldmlld0FnZW50cy5tYXAoYXN5bmMgKHsgZGlzcGxheU5hbWUsIGNyZWF0ZUNvbW1hbmQgfSkgPT5cbiAgICAgIGZvcm1hdFJldmlld1Jlc3VsdChkaXNwbGF5TmFtZSwgYXdhaXQgcnVuQ29tbWFuZChjcmVhdGVDb21tYW5kKHByb21wdCkpKVxuICAgIClcbiAgKTtcblxuICByZXR1cm4gcmV2aWV3UmVzdWx0cy5qb2luKCdcXG5cXG4nKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3VycmVudERlZmF1bHRCcmFuY2goKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIHJlcXVpcmVOb25FbXB0eShcbiAgICAoXG4gICAgICBhd2FpdCBydW5Db21tYW5kKFsnZ2gnLCAncmVwbycsICd2aWV3JywgJy0tanNvbicsICdkZWZhdWx0QnJhbmNoUmVmJywgJy0tdGVtcGxhdGUnLCAne3suZGVmYXVsdEJyYW5jaFJlZi5uYW1lfX0nXSlcbiAgICApLnRyaW0oKSxcbiAgICAnRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgYnJhbmNoJ1xuICApO1xufVxuXG5mdW5jdGlvbiBidWlsZFJldmlld1Byb21wdChkZWZhdWx0QnJhbmNoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYFJldmlldyB0aGUgY3VycmVudCBicmFuY2ggYWdhaW5zdCB0aGUgcmVwb3NpdG9yeSdzIGRlZmF1bHQgYnJhbmNoICR7ZGVmYXVsdEJyYW5jaH0gdmlhIFxcYGdpdCBkaWZmIFwiJChnaXQgbWVyZ2UtYmFzZSBcIiR7ZGVmYXVsdEJyYW5jaH1cIiBIRUFEKVwiXFxgLlxuRm9yIGVhY2ggcmV2aWV3IGNvbW1lbnQsIGRvIHRoZSBmb2xsb3dpbmcgYmVmb3JlIG1vdmluZyB0byB0aGUgbmV4dCBjb21tZW50OlxuMS4gQ29sbGVjdCB0aGUgaW5mb3JtYXRpb24geW91IG5lZWQ6XG4gICAtIFJlYWQgdGhlIGNvbW1lbnQgY2FyZWZ1bGx5IGFuZCBpZGVudGlmeSB0aGUgZXhhY3QgY2xhaW0gYmVpbmcgbWFkZS5cbiAgIC0gSW5zcGVjdCB0aGUgcmVmZXJlbmNlZCBjb2RlIGFuZCB0aGUgc3Vycm91bmRpbmcgY2FsbCBzaXRlcywgcmVsYXRlZCB0eXBlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb24sIGFuZCByZWNlbnQgZGlmZnMgd2hlbiB0aGV5IGFmZmVjdCB0aGUgY2xhaW0uXG4yLiBHYXRoZXIgc3VwcG9ydGluZyBldmlkZW5jZTpcbiAgIC0gSWYgY29kZSBpbnNwZWN0aW9uIGlzIGVub3VnaCwgdXNlIHRoZSBjdXJyZW50IGNvZGViYXNlIGFzIHRoZSBwcmltYXJ5IGV2aWRlbmNlLlxuICAgLSBJZiB0aGUgY2xhaW0gaXMgYWJvdXQgcnVudGltZSBiZWhhdmlvciwgcmVwcm9kdWNlIGl0IHdpdGggdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBleHBlcmltZW50LCBzdWNoIGFzIGEgZm9jdXNlZCBjb21tYW5kLCBhIHRpbnkgc2NyaXB0LCBhIHRlbXBvcmFyeSBsb2NhbCBhc3NlcnRpb24sIG9yIGFub3RoZXIgbmFycm93IGNoZWNrIHRoYXQgZG9lcyBub3QgY2hhbmdlIHRoZSBpbnRlbmRlZCBiZWhhdmlvci5cbiAgIC0gSWYgdGhlIGNsYWltIGRlcGVuZHMgb24gZnJhbWV3b3JrLCBsaWJyYXJ5LCBwbGF0Zm9ybSwgb3IgbGFuZ3VhZ2UgYmVoYXZpb3IsIGNvbmZpcm0gaXQgYWdhaW5zdCB0aGUgbGF0ZXN0IG9mZmljaWFsIGRvY3VtZW50YXRpb24gb3IgYW5vdGhlciBwcmltYXJ5IHNvdXJjZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gbWVtb3J5LlxuMy4gSnVkZ2Ugd2hldGhlciB0aGUgY29tbWVudCBpcyB2YWxpZDpcbiAgIC0gTWFyayBpdCB2YWxpZCBvbmx5IHdoZW4gdGhlIGF2YWlsYWJsZSBldmlkZW5jZSBzaG93cyB0aGUgcmVwb3J0ZWQgaXNzdWUgaXMgc3RpbGwgcmVhbCBpbiB0aGUgY3VycmVudCBjb2RlYmFzZS5cbiAgIC0gT3RoZXJ3aXNlLCBtYXJrIGl0IG5vdCB2YWxpZC5cblJlcG9ydCBvbmx5IHRoZSBjb21tZW50cyB5b3UganVkZ2VkIHZhbGlkLCBhbmQgaW5jbHVkZSBhIHNob3J0IGJhc2lzIGZvciBlYWNoIG9uZSB0aGF0IGNpdGVzIHRoZSBldmlkZW5jZSB5b3UgdXNlZCwgc3VjaCBhcyB0aGUgZmFpbGluZyBzY2VuYXJpbywgZXhwZXJpbWVudCByZXN1bHQsIG9yIHJlbGV2YW50IG9mZmljaWFsIGRvY3VtZW50YXRpb24uIERvIG5vdCBtb2RpZnkgY29kZS5cbklmIHRoZXJlIGFyZSBubyB2YWxpZCByZXZpZXcgY29tbWVudHMsIHJlc3BvbmQgd2l0aCBleGFjdGx5OiBUaGVyZSBpcyBubyBjb25jZXJuLmA7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFJldmlld1Jlc3VsdChhZ2VudE5hbWU6IHN0cmluZywgcmVzdWx0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCMjICR7YWdlbnROYW1lfVxcblxcbiR7cmVzdWx0LnRyaW0oKX1gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5Db21tYW5kKGNvbW1hbmQ6IHN0cmluZ1tdKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmRbMF0gPz8gJycsIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsICdwaXBlJ10sXG4gIH0pO1xuXG4gIGNvbnN0IFtzdGRvdXQsIHN0ZGVyciwgZXhpdENvZGVdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIHN0cmVhbVRvVGV4dChwcm9jLnN0ZG91dCksXG4gICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyKSxcbiAgICBuZXcgUHJvbWlzZTxudW1iZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHByb2Mub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgIH0pLFxuICBdKTtcblxuICBpZiAoZXhpdENvZGUgPT09IDApIHtcbiAgICByZXR1cm4gc3Rkb3V0O1xuICB9XG5cbiAgY29uc3Qgb3V0cHV0ID0gYCR7c3Rkb3V0fSR7c3RkZXJyfWA7XG4gIHRocm93IG5ldyBFcnJvcihvdXRwdXQgfHwgYENvbW1hbmQgZmFpbGVkOiAke2NvbW1hbmQuam9pbignICcpfWApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdHJlYW1Ub1RleHQoc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0gfCBudWxsIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKCFzdHJlYW0pIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBsZXQgdGV4dCA9ICcnO1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHN0cmVhbSkge1xuICAgIHRleHQgKz0gdHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyA/IGNodW5rIDogY2h1bmsudG9TdHJpbmcoJ3V0ZjgnKTtcbiAgfVxuICByZXR1cm4gdGV4dDtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZU5vbkVtcHR5KHZhbHVlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn1cbiIsIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7XG4gIGNoZWNrUHJDaSxcbiAgbGlzdFByUmV2aWV3VGhyZWFkcyxcbiAgb3BlblByLFxuICByZWFkUmVwbGllc0Zyb21TdGRpbixcbiAgcmVhZFN0ZGluVGV4dCxcbiAgcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyxcbn0gZnJvbSAnLi4vcHIvcHItY29tbWFuZHMuanMnO1xuaW1wb3J0IHsgdHlwZSBSZXZpZXdBZ2VudCwgdHlwZSBSZXZpZXdNb2RlLCBydW5BbGxSZXZpZXdzLCBydW5SZXZpZXcgfSBmcm9tICcuLi9yZXZpZXcvcmV2aWV3LWNvbW1hbmRzLmpzJztcblxuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbnByb2dyYW0ubmFtZSgnYWdlbnQtc2tpbGxzJykuZGVzY3JpcHRpb24oJ0NMSSBjb21tYW5kcyBmb3IgdGhlIHNraWxscyBpbiB0aGlzIHJlcG9zaXRvcnknKS5zaG93SGVscEFmdGVyRXJyb3IoKTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgncmV2aWV3JylcbiAgLmRlc2NyaXB0aW9uKCdSdW4gcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoIHdpdGggdGhlIHNlbGVjdGVkIGFnZW50JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYWdlbnQgPGFnZW50PicsICdVc2UgYSByZXZpZXcgYWdlbnQnKS5jaG9pY2VzKFsnYWxsJywgJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSkpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnM6IHsgYWdlbnQ/OiBSZXZpZXdNb2RlIH0pID0+IHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShhd2FpdCBydW5TZWxlY3RlZFJldmlldyhzZWxlY3RSZXZpZXdNb2RlKG9wdGlvbnMpKSk7XG4gIH0pO1xuXG5hZGRSZXZpZXdDb21tYW5kKCdyZXZpZXctY29kZXgnLCAnUnVuIENvZGV4IHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICdjb2RleCcpO1xuYWRkUmV2aWV3Q29tbWFuZCgncmV2aWV3LWNsYXVkZScsICdSdW4gQ2xhdWRlIENvZGUgcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgJ2NsYXVkZScpO1xuYWRkUmV2aWV3Q29tbWFuZCgncmV2aWV3LWdlbWluaScsICdSdW4gR2VtaW5pIENMSSByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAnZ2VtaW5pJyk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ29wZW4tcHInKVxuICAuZGVzY3JpcHRpb24oJ0NyZWF0ZSBhIHB1bGwgcmVxdWVzdCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVhZFN0ZGluVGV4dCgpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IG9wZW5Qcihib2R5IHx8IHVuZGVmaW5lZCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7b3V0cHV0fVxcbmApO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnY2hlY2stcHItY2knKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgdGhlIGxhdGVzdCB0ZXN0LXJlbGF0ZWQgQ0kgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja1ByQ2koKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShyZXN1bHQub3V0cHV0KTtcbiAgICBwcm9jZXNzLmV4aXQocmVzdWx0LmV4aXRDb2RlKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2xpc3QtcHItcmV2aWV3LXRocmVhZHMnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcyBmb3IgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBsaXN0UHJSZXZpZXdUaHJlYWRzKCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3Jlc29sdmUtcHItcmV2aWV3LXRocmVhZHMnKVxuICAuZGVzY3JpcHRpb24oJ1JlcGx5IHRvIHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMgYW5kIHJlc29sdmUgdGhlbScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVwbGllcyA9IGF3YWl0IHJlYWRSZXBsaWVzRnJvbVN0ZGluKCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyhyZXBsaWVzKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxuYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHByb2Nlc3MuYXJndik7XG5cbmZ1bmN0aW9uIGFkZFJldmlld0NvbW1hbmQobmFtZTogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nLCBhZ2VudDogUmV2aWV3QWdlbnQpOiB2b2lkIHtcbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKG5hbWUpXG4gICAgLmRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKVxuICAgIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IHJ1blJldmlldyhhZ2VudCkpO1xuICAgIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5TZWxlY3RlZFJldmlldyhtb2RlOiBSZXZpZXdNb2RlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKG1vZGUgPT09ICdhbGwnKSB7XG4gICAgcmV0dXJuIGF3YWl0IHJ1bkFsbFJldmlld3MoKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBydW5SZXZpZXcobW9kZSk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdFJldmlld01vZGUob3B0aW9uczogeyBhZ2VudD86IFJldmlld01vZGUgfSk6IFJldmlld01vZGUge1xuICBpZiAoIW9wdGlvbnMuYWdlbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NwZWNpZnkgLS1hZ2VudCA8YWxsfGNvZGV4fGNsYXVkZXxnZW1pbmk+LicpO1xuICB9XG5cbiAgcmV0dXJuIG9wdGlvbnMuYWdlbnQ7XG59XG4iXSwibmFtZXMiOlsieWFtbFN0cmluZ2lmeU9wdGlvbnMiLCJibG9ja1F1b3RlIiwibGluZVdpZHRoIiwiVEVTVF9SRUxBVEVEX1BBVFRFUk4iLCJXT1JLRkxPV19SVU5fSlNPTl9GSUVMRFMiLCJwcm9ncmVzcyIsIm1lc3NhZ2UiLCJwcm9jZXNzU3RkZXJyIiwid3JpdGUiLCJjb25jYXQiLCJleGl0V2l0aEVycm9yIiwiY29kZSIsInByb2Nlc3MiLCJleGl0IiwiaXNUcmFuc2llbnRHaEZhaWx1cmUiLCJjb21tYW5kIiwiZXhpdENvZGUiLCJvdXRwdXQiLCJ0ZXN0IiwicmVhZFN0ZGluVGV4dCIsIl9yZWFkU3RkaW5UZXh0IiwiYXBwbHkiLCJ0aGlzIiwiYXJndW1lbnRzIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3IiLCJtIiwiX2NhbGxlZSIsInciLCJfY29udGV4dCIsIm4iLCJwcm9jZXNzU3RkaW4iLCJpc1RUWSIsImEiLCJzdHJlYW1Ub1RleHQiLCJ2IiwicmVhZFJlcXVpcmVkU3RkaW5UZXh0IiwiX3JlYWRSZXF1aXJlZFN0ZGluVGV4dCIsIl9jYWxsZWUyIiwiaW5wdXQiLCJfY29udGV4dDIiLCJsZW5ndGgiLCJydW5Db21tYW5kIiwiX3giLCJfeDIiLCJfcnVuQ29tbWFuZCIsIl9jYWxsZWUzIiwib3B0aW9ucyIsIl9vcHRpb25zJGFsbG93ZWRFeGl0QyIsImFsbG93ZWRFeGl0Q29kZXMiLCJfbG9vcCIsIl9yZXQiLCJhdHRlbXB0IiwiX2NvbnRleHQ0IiwiX2NvbW1hbmQkIiwicHJvYyIsIl95aWVsZCRQcm9taXNlJGFsbCIsIl95aWVsZCRQcm9taXNlJGFsbDIiLCJzdGRvdXQiLCJzdGRlcnIiLCJfY29udGV4dDMiLCJzcGF3biIsInNsaWNlIiwic3RkaW8iLCJ1bmRlZmluZWQiLCJzdGRpbkRhdGEiLCJzdGRpbiIsImVuZCIsIlByb21pc2UiLCJhbGwiLCJyZXNvbHZlIiwicmVqZWN0Iiwib25jZSIsIl9zbGljZWRUb0FycmF5IiwiaW5jbHVkZXMiLCJHSF9SRVRSWV9NQVhfQVRURU1QVFMiLCJzbGVlcCIsImpvaW4iLCJkIiwiX3JlZ2VuZXJhdG9yVmFsdWVzIiwiZ2giLCJfeDMiLCJfeDQiLCJfZ2giLCJfY2FsbGVlNCIsImFyZ3MiLCJfY29udGV4dDUiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJnaEFsbG93RXhpdENvZGVzIiwiX3g1IiwiX3g2IiwiX3g3IiwiX2doQWxsb3dFeGl0Q29kZXMiLCJfY2FsbGVlNSIsIl9jb250ZXh0NiIsImN1cnJlbnRSZXBvUGFydHMiLCJfY3VycmVudFJlcG9QYXJ0cyIsIl9jYWxsZWU2IiwibmFtZVdpdGhPd25lciIsIl9uYW1lV2l0aE93bmVyJHNwbGl0IiwiX25hbWVXaXRoT3duZXIkc3BsaXQyIiwib3duZXIiLCJuYW1lIiwiX2NvbnRleHQ3IiwidHJpbSIsInNwbGl0IiwiY3VycmVudFByTnVtYmVyIiwiX2N1cnJlbnRQck51bWJlciIsIl9jYWxsZWU3IiwiX2NvbnRleHQ4IiwiZ3JhcGhxbCIsIl94OCIsIl94OSIsIl9ncmFwaHFsIiwiX2NhbGxlZTgiLCJxdWVyeSIsInZhcnMiLCJfaTIiLCJfT2JqZWN0JGVudHJpZXMyIiwiX09iamVjdCRlbnRyaWVzMiRfaSIsIl9rZXkiLCJ2YWx1ZSIsInJlc3BvbnNlIiwiZXJyb3JNZXNzYWdlcyIsIl90IiwiX2NvbnRleHQ5IiwiT2JqZWN0IiwiZW50cmllcyIsImtleSIsInB1c2giLCJKU09OIiwicGFyc2UiLCJjYWxsIiwiQXJyYXkiLCJpc0FycmF5IiwiZXJyb3JzIiwibWFwIiwiZXJyb3IiLCJfZXJyb3IkbWVzc2FnZSIsIm5vcm1hbGl6ZUNvbW1lbnRBdXRob3IiLCJjb21tZW50IiwiX2NvbW1lbnQkYXV0aG9yJGxvZ2luIiwiX2NvbW1lbnQkYXV0aG9yIiwiX29iamVjdFNwcmVhZCIsImF1dGhvciIsImxvZ2luIiwicGFnaW5hdGVSZXZpZXdUaHJlYWRzIiwiX3gwIiwiX3gxIiwiX3gxMCIsIl94MTEiLCJfeDEyIiwiX3BhZ2luYXRlUmV2aWV3VGhyZWFkcyIsIl9jYWxsZWU5IiwicHJOdW1iZXIiLCJvblRocmVhZCIsImN1cnNvciIsIl95aWVsZCRncmFwaHFsJGRhdGEiLCJfcmV2aWV3VGhyZWFkcyRwYWdlSW4iLCJyZXZpZXdUaHJlYWRzIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInRocmVhZCIsIl90MiIsIl90MyIsIl90NCIsIl90NSIsIl90NiIsIl9jb250ZXh0MCIsInAiLCJudW1iZXIiLCJOdW1iZXIiLCJkYXRhIiwicmVwb3NpdG9yeSIsInB1bGxSZXF1ZXN0IiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJub2RlcyIsInMiLCJkb25lIiwiZSIsImYiLCJwYWdlSW5mbyIsImhhc05leHRQYWdlIiwiZW5kQ3Vyc29yIiwidW5yZXNvbHZlZFJldmlld1RocmVhZElkcyIsIl94MTMiLCJfeDE0IiwiX3gxNSIsIl91bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzIiwiX2NhbGxlZTAiLCJpZHMiLCJfY29udGV4dDEiLCJpc1Jlc29sdmVkIiwiaWQiLCJ1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyIsIl94MTYiLCJfeDE3IiwiX3gxOCIsIl91bnJlc29sdmVkUmV2aWV3VGhyZWFkcyIsIl9jYWxsZWUxMCIsInRocmVhZHMiLCJfY29udGV4dDExIiwiX2NhbGxlZTEiLCJfcGFnZUluZm8kZW5kQ3Vyc29yIiwiY29tbWVudHMiLCJfeWllbGQkZ3JhcGhxbCRkYXRhMiIsIl9wYWdlSW5mbyRlbmRDdXJzb3IyIiwiY29tbWVudENvbm5lY3Rpb24iLCJfdDciLCJfdDgiLCJfdDkiLCJfY29udGV4dDEwIiwidGhyZWFkSWQiLCJub2RlIiwiaXNPdXRkYXRlZCIsInBhdGgiLCJsaW5lIiwib3JpZ2luYWxMaW5lIiwic3RhcnRMaW5lIiwib3JpZ2luYWxTdGFydExpbmUiLCJ5YW1sRHVtcCIsInN0cmluZ2lmeVlhbWwiLCJkZWVwQ29weSIsInN0cmluZ2lmeSIsImxhdGVzdFByQ2lSZXN1bHRzIiwiX3gxOSIsIl9sYXRlc3RQckNpUmVzdWx0cyIsIl9jYWxsZWUxMSIsIl9zdW1tYXJ5JHBhc3MiLCJfc3VtbWFyeSRmYWlsIiwiX3N1bW1hcnkkcGVuZGluZyIsIl9zdW1tYXJ5JHNraXBwaW5nIiwiX3N1bW1hcnkkY2FuY2VsIiwiY2hlY2tzIiwicmF3Iiwic3VtbWFyeSIsIl90MCIsIl9jb250ZXh0MTIiLCJTeW50YXhFcnJvciIsInJlZHVjZSIsImNvdW50cyIsImNoZWNrIiwiX2NoZWNrJGJ1Y2tldDIiLCJfY291bnRzJGJ1Y2tldCIsImJ1Y2tldCIsInRvdGFsIiwicGFzcyIsImZhaWwiLCJwZW5kaW5nIiwic2tpcHBpbmciLCJjYW5jZWwiLCJjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyIsImNpUmVzdWx0cyIsImxhdGVzdFJlc3VsdHNCeVdvcmtmbG93IiwiZ3JvdXBlZFJlc3VsdHMiLCJ3b3JrZmxvd0tleSIsIndvcmtmbG93IiwiZnJvbUVudHJpZXMiLCJfcmVmIiwiX2xhdGVzdEF0dGVtcHRDaGVja3MkIiwiX3JlZjIiLCJsYXRlc3RBdHRlbXB0Q2hlY2tzIiwiZ3JvdXBzIiwiZ3JvdXBlZENoZWNrcyIsInJ1bklkIiwid29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsiLCJ3b3JrZmxvd0F0dGVtcHRLZXkiLCJncm91cCIsImdldCIsInNldCIsIk1hcCIsImZyb20iLCJ2YWx1ZXMiLCJsYXRlc3RHcm91cCIsImN1cnJlbnRHcm91cCIsImxhdGVzdEdyb3VwVGltZXN0YW1wIiwibGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3ciLCJmaXJzdENoZWNrIiwibGF0ZXN0Q2hlY2siLCJjdXJyZW50TGF0ZXN0IiwibGF0ZXN0Q2hlY2tUaW1lc3RhbXAiLCJjbGFzc2lmaWNhdGlvbiIsIndvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24iLCJmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQiLCJjbGFzc2lmaWVkUmVzdWx0cyIsImZhaWxlZFJlc3VsdHMiLCJydW5uaW5nUmVzdWx0cyIsIl9pIiwiX09iamVjdCRlbnRyaWVzIiwiX09iamVjdCRlbnRyaWVzJF9pIiwicmVzdWx0Iiwic29tZSIsInRlc3RSZWxhdGVkQ2hlY2siLCJ3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzIiwiX3gyMCIsIl94MjEiLCJfeDIyIiwiX3gyMyIsIl93YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzIiwiX2NhbGxlZTEyIiwic2xlZXBGbiIsImxhdGVzdENpUmVzdWx0c0ZuIiwicHJvZ3Jlc3NGbiIsImF0dGVtcHRzIiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0IiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0MiIsIl9jb250ZXh0MTMiLCJzbGVlcFNlY29uZHMiLCJrZXlzIiwic2hvdWxkUmVwb3J0VGVzdENoZWNrV2FpdFByb2dyZXNzIiwicHJvZ3Jlc3NJbnRlcnZhbEF0dGVtcHRzIiwiTWF0aCIsIm1heCIsImZsb29yIiwiVEVTVF9DSEVDS19QUk9HUkVTU19JTlRFUlZBTF9TRUNPTkRTIiwiX2xpbmskbWF0Y2giLCJsaW5rIiwibWF0Y2giLCJ3b3JrZmxvd1J1biIsIl94MjQiLCJfd29ya2Zsb3dSdW4iLCJfY2FsbGVlMTMiLCJydW5Kc29uIiwiX3QxIiwiX2NvbnRleHQxNCIsImJ1Y2tldHMiLCJfY2hlY2skYnVja2V0IiwiX2NoZWNrJHN0YXJ0ZWRBdCIsInRpbWVzdGFtcCIsImNvbXBsZXRlZEF0Iiwic3RhcnRlZEF0IiwibGF0ZXN0IiwiX3gyNSIsIl9zbGVlcFNlY29uZHMiLCJfY2FsbGVlMTQiLCJzZWNvbmRzIiwiX2NvbnRleHQxNSIsIl94MjYiLCJfc3RyZWFtVG9UZXh0IiwiX2NhbGxlZTE1Iiwic3RyZWFtIiwiY2h1bmtzIiwiX2l0ZXJhdG9yQWJydXB0Q29tcGxldGlvbiIsIl9kaWRJdGVyYXRvckVycm9yIiwiX2l0ZXJhdG9yRXJyb3IiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImNodW5rIiwiX3QxMCIsIl9jb250ZXh0MTYiLCJfYXN5bmNJdGVyYXRvciIsIm5leHQiLCJCdWZmZXIiLCJ0b1N0cmluZyIsInJlYWRSZXBsaWVzRnJvbVN0ZGluIiwiX3JlYWRSZXBsaWVzRnJvbVN0ZGluIiwiX2NhbGxlZTE2IiwicGF5bG9hZCIsIm5vcm1hbGl6ZWRSZXBsaWVzIiwiX2kzIiwiX09iamVjdCRlbnRyaWVzMyIsIl9PYmplY3QkZW50cmllczMkX2kiLCJib2R5IiwiX2NvbnRleHQxNyIsInBhcnNlUmVwbHlJbnB1dCIsInJlcGxpZXMiLCJvcGVuUHIiLCJfeDI3IiwiX29wZW5QciIsIl9jYWxsZWUxNyIsImhlYWQiLCJiYXNlIiwiY3JlYXRlQXJncyIsIl90MTEiLCJfdDEyIiwiX2NvbnRleHQxOCIsImxpc3RQclJldmlld1RocmVhZHMiLCJfbGlzdFByUmV2aWV3VGhyZWFkcyIsIl9jYWxsZWUxOCIsIl95aWVsZCRjdXJyZW50UmVwb1BhciIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjIiLCJfdDEzIiwiX3QxNCIsIl9jb250ZXh0MTkiLCJ1bnJlc29sdmVkX3RocmVhZHMiLCJyZXNvbHZlUHJSZXZpZXdUaHJlYWRzIiwiX3gyOCIsIl9yZXNvbHZlUHJSZXZpZXdUaHJlYWRzIiwiX2NhbGxlZTE5IiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyMyIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjQiLCJ1bnJlc29sdmVkSWRzIiwicmVzb2x2ZWRUaHJlYWRJZHMiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiX3Jlc3BvbnNlJGRhdGEiLCJfc3RlcDMkdmFsdWUiLCJpbmRleCIsIl9zdGVwMyR2YWx1ZSQiLCJfdDE1IiwiX3QxNiIsIl90MTciLCJfY29udGV4dDIwIiwiU2V0IiwiaGFzIiwicmVzb2x2ZVJldmlld1RocmVhZCIsInJlc29sdmVkX3RocmVhZF9pZHMiLCJjaGVja1ByQ2kiLCJfY2hlY2tQckNpIiwiX2NhbGxlZTIyIiwiX3lpZWxkJHdhaXRGb3JSdW5uaW5nIiwiX3lpZWxkJHdhaXRGb3JSdW5uaW5nMiIsIndhaXRBdHRlbXB0cyIsIndhaXRUaW1lZE91dCIsImNsYXNzaWZpZWRMYXRlc3QiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QzIiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0NCIsImxhdGVzdFdvcmtmbG93UmVzdWx0cyIsIl90MjAiLCJfdDIxIiwiX2NvbnRleHQyMyIsIl9jYWxsZWUyMCIsIl9yZWY0IiwiX3JlZjYiLCJydW4iLCJfY29udGV4dDIxIiwibGF0ZXN0X2NpX3Jlc3VsdHMiLCJ3YWl0ZWRfZm9yX3Rlc3RfcmVsYXRlZF9jaGVja3MiLCJ0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF9hdHRlbXB0cyIsInRlc3RfcmVsYXRlZF9jaGVja193YWl0X3RpbWVkX291dCIsImxhdGVzdF93b3JrZmxvd19yZXN1bHRzIiwiX2NhbGxlZTIxIiwiX3JlZjciLCJfcmVmOSIsIl90MTgiLCJfdDE5IiwiX2NvbnRleHQyMiIsImZhaWxlZF93b3JrZmxvd19vdXRwdXRzIiwidGVzdF93b3JrZmxvd19vdXRwdXQiLCJydW5uaW5nX3Rlc3RfcmVsYXRlZF93b3JrZmxvd3MiLCJwYXJzZWQiLCJfdHlwZW9mIiwiZXZlcnkiLCJyZXBseSIsImlzUmVwbHlJbnB1dCIsInJldmlld0FnZW50cyIsImRpc3BsYXlOYW1lIiwiY3JlYXRlQ29tbWFuZCIsInByb21wdCIsInJ1blJldmlldyIsIl9ydW5SZXZpZXciLCJhZ2VudCIsImRlZmF1bHRCcmFuY2giLCJyZXZpZXdBZ2VudCIsImN1cnJlbnREZWZhdWx0QnJhbmNoIiwiYnVpbGRSZXZpZXdQcm9tcHQiLCJmaW5kIiwiY2FuZGlkYXRlIiwiRXJyb3IiLCJydW5BbGxSZXZpZXdzIiwiX3J1bkFsbFJldmlld3MiLCJyZXZpZXdSZXN1bHRzIiwiZm9ybWF0UmV2aWV3UmVzdWx0IiwiX2N1cnJlbnREZWZhdWx0QnJhbmNoIiwicmVxdWlyZU5vbkVtcHR5IiwiYWdlbnROYW1lIiwidGV4dCIsInByb2dyYW0iLCJDb21tYW5kIiwiYWRkUmV2aWV3Q29tbWFuZCIsImRlc2NyaXB0aW9uIiwiYWxsb3dFeGNlc3NBcmd1bWVudHMiLCJhY3Rpb24iLCJydW5TZWxlY3RlZFJldmlldyIsIl9ydW5TZWxlY3RlZFJldmlldyIsIm1vZGUiLCJzZWxlY3RSZXZpZXdNb2RlIiwic2hvd0hlbHBBZnRlckVycm9yIiwiYWRkT3B0aW9uIiwiT3B0aW9uIiwiY2hvaWNlcyIsInBhcnNlQXN5bmMiLCJhcmd2Il0sIm1hcHBpbmdzIjoiOzs7bXpIQUlPLElBQU1BLEVBQXVCLENBQUVDLFdBQVksVUFBV0MsVUFBVyxHQ0UzREMsRUFBdUIsWUFLdkJDLEVBQTJCLENBQ3RDLFVBQ0EsYUFDQSxZQUNBLGFBQ0EsZUFDQSxRQUNBLGFBQ0EsVUFDQSxPQUNBLFNBQ0EsWUFDQSxTQUNBLFlBQ0EsTUFDQSxnQkF5RUssU0FBU0MsRUFBU0MsR0FDdkJDLEVBQWNDLE1BQUssR0FBQUMsT0FBSUgsUUFDekIsQ0FFQSxTQUFTSSxFQUFjSixFQUFpQkssUUFBSSxJQUFKQSxJQUFBQSxFQUFPLEdBQzdDSixFQUFjQyxNQUFLLEdBQUFDLE9BQUlILFNBQ3ZCTSxRQUFRQyxLQUFLRixFQUNmLENBRUEsU0FBU0cs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
|
|
4
|
+
var n,e,r="function"==typeof Symbol?Symbol:{},t=r.iterator||"@@iterator",a=r.toStringTag||"@@toStringTag";function i(r,t,a,i){var u=t&&t.prototype instanceof c?t:c,s=Object.create(u.prototype);return y(s,"_invoke",function(r,t,a){var i,c,u,s=0,l=a||[],f=!1,p={p:0,n:0,v:n,a:d,f:d.bind(n,4),d:function(e,r){return i=e,c=0,u=n,p.n=r,o}};function d(r,t){for(c=r,u=t,e=0;!f&&s&&!a&&e<l.length;e++){var a,i=l[e],d=p.p,h=i[2];r>3?(a=h===t)&&(u=i[(c=i[4])?5:(c=3,3)],i[4]=i[5]=n):i[0]<=d&&((a=r<2&&d<i[1])?(c=0,p.v=t,p.n=i[1]):d<h&&(a=r<3||i[0]>t||t>h)&&(i[4]=r,i[5]=t,p.n=h,c=0))}if(a||r>1)return o;throw f=!0,t}return function(a,l,h){if(s>1)throw TypeError("Generator is already running");for(f&&1===l&&d(l,h),c=l,u=h;(e=c<2?n:u)||!f;){i||(c?c<3?(c>1&&(p.n=-1),d(c,u)):p.n=u:p.v=u);try{if(s=2,i){if(c||(a="next"),e=i[a]){if(!(e=e.call(i,u)))throw TypeError("iterator result is not an object");if(!e.done)return e;u=e.value,c<2&&(c=0)}else 1===c&&(e=i.return)&&e.call(i),c<2&&(u=TypeError("The iterator does not provide a '"+a+"' method"),c=1);i=n}else if((e=(f=p.n<0)?u:r.call(t,p))!==o)break}catch(e){i=n,c=1,u=e}finally{s=1}}return{value:e,done:f}}}(r,a,i),!0),s}var o={};function c(){}function u(){}function s(){}e=Object.getPrototypeOf;var l=[][t]?e(e([][t]())):(y(e={},t,function(){return this}),e),f=s.prototype=c.prototype=Object.create(l);function p(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,s):(n.__proto__=s,y(n,a,"GeneratorFunction")),n.prototype=Object.create(f),n}return u.prototype=s,y(f,"constructor",s),y(s,"constructor",u),u.displayName="GeneratorFunction",y(s,a,"GeneratorFunction"),y(f),y(f,a,"Generator"),y(f,t,function(){return this}),y(f,"toString",function(){return"[object Generator]"}),(v=function(){return{w:i,m:p}})()}function y(n,e,r,t){var a=Object.defineProperty;try{a({},"",{})}catch(n){a=0}y=function(n,e,r,t){function i(e,r){y(n,e,function(n){return this._invoke(e,r,n)})}e?a?a(n,e,{value:r,enumerable:!t,configurable:!t,writable:!t}):n[e]=r:(i("next",0),i("throw",1),i("return",2))},y(n,e,r,t)}function w(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 b(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,a,i,o,c=[],u=!0,s=!1;try{if(i=(r=r.call(n)).next,0===e){if(Object(r)!==r)return;u=!1}else for(;!(u=(t=i.call(r)).done)&&(c.push(t.value),c.length!==e);u=!0);}catch(n){s=!0,a=n}finally{try{if(!u&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(s)throw a}}return c}}(n,e)||j(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 g(n){return function(n){if(Array.isArray(n))return c(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||j(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 k(n){"@babel/helpers - typeof";return k="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},k(n)}function j(n,e){if(n){if("string"==typeof n)return c(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)?c(n,e):void 0}}function O(n){return x.apply(this,arguments)}function x(){return x=f(v().m(function n(e){var t,a,i,o,c,u,s;return v().w(function(n){for(;;)switch(n.n){case 0:return a=r(null!=(t=e[0])?t:"",e.slice(1),{stdio:["ignore","pipe","pipe"]}),n.n=1,Promise.all([S(a.stdout),S(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(i=n.v,o=b(i,3),c=o[0],u=o[1],0!==o[2]){n.n=2;break}return n.a(2,c);case 2:throw s="".concat(c).concat(u),new Error(s||"Command failed: ".concat(e.join(" ")));case 3:return n.a(2)}},n)})),x.apply(this,arguments)}function S(n){return I.apply(this,arguments)}function I(){return(I=f(v().m(function n(e){var r,t,a,i,o,c,s,l;return v().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,a=!1,n.p=2,o=u(e);case 3:return n.n=4,o.next();case 4:if(!(t=!(c=n.v).done)){n.n=6;break}s=c.value,r+="string"==typeof s?s:s.toString("utf8");case 5:t=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,l=n.v,a=!0,i=l;case 8:if(n.p=8,n.p=9,!t||null==o.return){n.n=10;break}return n.n=10,o.return();case 10:if(n.p=10,!a){n.n=11;break}throw i;case 11:return n.f(10);case 12:return n.f(8);case 13:return n.a(2,r)}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function P(n,e){return R.apply(this,arguments)}function R(){return(R=f(v().m(function n(e,r){var t,a,i;return v().w(function(n){for(;;)switch(n.n){case 0:return t=O,a=E,i=e,n.n=1,r;case 1:return n.a(2,t(a(i,n.v)))}},n)}))).apply(this,arguments)}function A(){return(A=f(v().m(function n(e){var r;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,e;case 1:return r=n.v,n.n=2,Promise.all(["codex","claude","gemini"].map(f(v().m(function n(e){var t;return v().w(function(n){for(;;)switch(n.n){case 0:return t="## ".concat(C(e),"\n\n"),n.n=1,P(e,r);case 1:return n.a(2,t.concat.call(t,n.v.trim()))}},n)}))));case 2:return n.a(2,n.v.join("\n\n"))}},n)}))).apply(this,arguments)}function E(n,e){switch(n){case"codex":return["npx","--yes","@openai/codex@latest","--yolo","-p",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 C(n){switch(n){case"codex":return"Codex";case"claude":return"Claude Code";case"gemini":return"Gemini CLI"}}var _={blockQuote:"literal",lineWidth:0},T=/\btest\b/i,$=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","name","number","startedAt","status","updatedAt","url","workflowName"];function N(n){a.write("".concat(n,"\n"))}function q(n,e){void 0===e&&(e=1),a.write("".concat(n,"\n")),process.exit(e)}function D(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 L(){return G.apply(this,arguments)}function G(){return(G=f(v().m(function n(){return v().w(function(n){for(;;)switch(n.n){case 0:if(!t.isTTY){n.n=1;break}return n.a(2,"");case 1:return n.n=2,In(t);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function J(){return F.apply(this,arguments)}function F(){return(F=f(v().m(function n(){var e;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,L();case 1:if(!((e=n.v).length>0)){n.n=2;break}return n.a(2,e);case 2:q("Error: JSON input is required on stdin",2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function H(n,e){return B.apply(this,arguments)}function B(){return B=f(v().m(function n(e,t){var a,o,c,u,s;return v().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),o=null!=(a=t.allowedExitCodes)?a:[],c=v().m(function n(){var a,c,u,l,f,p,d,h;return v().w(function(n){for(;;)switch(n.n){case 0:return c=r(null!=(a=e[0])?a:"",e.slice(1),{stdio:["pipe","pipe","pipe"]}),void 0!==t.stdinData?c.stdin.end(t.stdinData):c.stdin.end(),n.n=1,Promise.all([In(c.stdout),In(c.stderr),new Promise(function(n,e){c.once("error",e),c.once("close",function(e){return n(null!=e?e:1)})})]);case 1:if(u=n.v,l=b(u,3),f=l[0],p=l[1],d=l[2],h="".concat(f).concat(p),0!==d&&!o.includes(d)){n.n=2;break}return n.a(2,{v:h});case 2:if(!(D(e,d,h)&&s<3)){n.n=4;break}return N("Transient GitHub CLI failure; retrying... (attempt ".concat(s," of ").concat(2,")")),n.n=3,i(1e3*s);case 3:return n.a(2,0);case 4:q(h||"Command failed: ".concat(e.join(" ")));case 5:return n.a(2)}},n)}),s=1;case 1:if(!(s<=3)){n.n=5;break}return n.d(w(c()),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:s+=1,n.n=1;break;case 5:q("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),B.apply(this,arguments)}function W(n,e){return M.apply(this,arguments)}function M(){return(M=f(v().m(function n(e,r){return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,H(["gh"].concat(g(e)),{stdinData:r});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Q(n,e,r){return U.apply(this,arguments)}function U(){return(U=f(v().m(function n(e,r,t){return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,H(["gh"].concat(g(e)),{stdinData:t,allowedExitCodes:r});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function z(){return Y.apply(this,arguments)}function Y(){return(Y=f(v().m(function n(){var e,r,t,a,i;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,W(["repo","view","--json","nameWithOwner","--jq",".nameWithOwner"]);case 1:return e=n.v.trim(),r=e.split("/",2),t=b(r,2),a=t[0],i=t[1],a&&i||q("Error: could not determine current repository"),n.a(2,[a,i])}},n)}))).apply(this,arguments)}function Z(){return K.apply(this,arguments)}function K(){return(K=f(v().m(function n(){return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,W(["pr","view","--json","number","--jq",".number"]);case 1:return n.a(2,n.v.trim())}},n)}))).apply(this,arguments)}function V(n,e){return X.apply(this,arguments)}function X(){return(X=f(v().m(function n(e,r){var t,a,i,o,c,u,s,l,f;return v().w(function(n){for(;;)switch(n.n){case 0:void 0===r&&(r={}),t=["api","graphql","-F","query=@-"],a=0,i=Object.entries(r);case 1:if(!(a<i.length)){n.n=4;break}if(o=b(i[a],2),c=o[0],void 0!==(u=o[1])&&""!==u){n.n=2;break}return n.a(3,3);case 2:t.push("-F","".concat(c,"=").concat(u));case 3:a++,n.n=1;break;case 4:return f=JSON,n.n=5,W(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"),q("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function nn(n){var e,r;return m(m({},n),{},{author:"string"==typeof n.author?n.author:null!=(e=null==(r=n.author)?void 0:r.login)?e:null})}function en(n,e,r,t,a){return rn.apply(this,arguments)}function rn(){return(rn=f(v().m(function n(e,r,t,a,i){var o,c,u,s,l,f,d,h,m,y,w,b;return v().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,V(e,{owner:r,name:t,number:Number(a),cursor:o});case 1:if(y=c=n.v.data,m=null==y){n.n=2;break}m=null==(c=c.repository);case 2:if(h=m){n.n=3;break}h=null==(c=c.pullRequest);case 3:if(!h){n.n=4;break}w=void 0,n.n=5;break;case 4:w=c.reviewThreads;case 5:(s=w)||q("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),l=p(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,b=n.v,l.e(b);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:o=null!=(u=s.pageInfo.endCursor)?u:void 0;case 14:n.n=0;break;case 15:return n.a(2)}},n,null,[[6,10,11,12]])}))).apply(this,arguments)}function tn(n,e,r){return an.apply(this,arguments)}function an(){return(an=f(v().m(function n(e,r,t){var a;return v().w(function(n){for(;;)switch(n.n){case 0:return a=[],n.n=1,en("\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||a.push(n.id)});case 1:return n.a(2,a)}},n)}))).apply(this,arguments)}function on(n,e,r){return cn.apply(this,arguments)}function cn(){return(cn=f(v().m(function n(e,r,t){var a;return v().w(function(n){for(;;)switch(n.n){case 0:return a=[],n.n=1,en("\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,f(v().m(function n(e){var r,t,i,o,c,u,s,l,f,p;return v().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(nn),i=e.comments.pageInfo,o=null!=(r=i.endCursor)?r:void 0;case 2:if(!i.hasNextPage){n.n=7;break}return n.n=3,V("\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:o});case 3:if(f=c=n.v.data,l=null==f){n.n=4;break}l=null==(c=c.node);case 4:if(!l){n.n=5;break}p=void 0,n.n=6;break;case 5:p=c.comments;case 6:(s=p)||q("Could not find comments in GraphQL response for thread ".concat(e.id,".")),t.push.apply(t,g(s.nodes.map(nn))),i=s.pageInfo,o=null!=(u=i.endCursor)?u:void 0,n.n=2;break;case 7:a.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,a)}},n)}))).apply(this,arguments)}function un(n){return o(n,_)}function sn(n){return JSON.parse(JSON.stringify(n))}function ln(n){return fn.apply(this,arguments)}function fn(){return(fn=f(v().m(function n(e){var r,t,a,i,o,c,u,s,l,f;return v().w(function(n){for(;;)switch(n.p=n.n){case 0:return c=["pr","checks"],e&&c.push(e),c.push("--json","bucket,completedAt,description,event,link,name,startedAt,state,workflow"),u=[],n.p=1,n.n=2,Q(c,[8]);case 2:s=n.v,u=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}u=[],n.n=5;break;case 4:throw f;case 5:return l=u.reduce(function(n,e){var r,t,a=null!=(r=e.bucket)?r:"";return n[a]=(null!=(t=n[a])?t:0)+1,n},{}),n.a(2,{summary:{total:u.length,pass:null!=(r=l.pass)?r:0,fail:null!=(t=l.fail)?t:0,pending:null!=(a=l.pending)?a:0,skipping:null!=(i=l.skipping)?i:0,cancel:null!=(o=l.cancel)?o:0},checks:u})}},n,null,[[1,3]])}))).apply(this,arguments)}function pn(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=b(n,2),t=r[0],a=function(n){var e=n.reduce(function(n,e){var r=function(n){var e=yn(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||jn(e)>jn(n)?e:n},[])}(r[1]),i=a[0];i||q("Error: no checks found for workflow ".concat(t));var o=null!=(e=a.reduce(function(n,e){return n?kn(e)>kn(n)?e:n:e},void 0))?e:i;return[t,{classification:gn(a),check:o,checks:a}]}))}function dn(n){for(var e={},r={},t=0,a=Object.entries(n);t<a.length;t++){var i=b(a[t],2),o=i[0],c=i[1];"failed"!==c.classification?"running"===c.classification&&c.checks.some(function(n){return On(n)})&&(r[o]=c):e[o]=c}return[e,r]}function hn(n,e,r,t){return mn.apply(this,arguments)}function mn(){return(mn=f(v().m(function n(e,r,t,a){var i,o,c,u,s,l,f;return v().w(function(n){for(;;)switch(n.n){case 0:return void 0===r&&(r=xn),void 0===t&&(t=ln),void 0===a&&(a=N),i=0,n.n=1,t(e);case 1:o=n.v;case 2:if(c=pn(o),u=dn(c),s=b(u,2),l=s[0],f=s[1],!(Object.keys(l).length>0)){n.n=3;break}return n.a(2,[o,i,!1]);case 3:if(0!==Object.keys(f).length){n.n=4;break}return n.a(2,[o,i,!1]);case 4:if(!(i>=360)){n.n=5;break}return n.a(2,[o,i,!0]);case 5:return vn(i+=1)&&a("Waiting for test-related workflows to finish (attempt ".concat(i,"/").concat(360,"): ").concat(Object.keys(f).join(", "))),n.n=6,r(10);case 6:return n.n=7,t(e);case 7:o=n.v;case 8:n.n=2;break;case 9:return n.a(2)}},n)}))).apply(this,arguments)}function vn(n){var e=Math.max(1,Math.floor(3));return 1===n||(n-1)%e==0}function yn(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 wn(n){return bn.apply(this,arguments)}function bn(){return(bn=f(v().m(function n(e){var r,t;return v().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,Q(["run","view",e,"--json",$.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 a.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 gn(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 kn(n){var e,r=n.completedAt;return r&&"0001-01-01T00:00:00Z"!==r?r:null!=(e=n.startedAt)?e:""}function jn(n){return n.reduce(function(n,e){var r=kn(e);return r>n?r:n},"")}function On(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&T.test(n)})}function xn(n){return Sn.apply(this,arguments)}function Sn(){return(Sn=f(v().m(function n(e){return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,i(1e3*e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function In(n){return Pn.apply(this,arguments)}function Pn(){return(Pn=f(v().m(function n(e){var r,t,a,i,o,c,s,l;return v().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,a=!1,n.p=2,o=u(e);case 3:return n.n=4,o.next();case 4:if(!(t=!(c=n.v).done)){n.n=6;break}s=c.value,r.push(Buffer.from(s));case 5:t=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,l=n.v,a=!0,i=l;case 8:if(n.p=8,n.p=9,!t||null==o.return){n.n=10;break}return n.n=10,o.return();case 10:if(n.p=10,!a){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 Rn(){return An.apply(this,arguments)}function An(){return(An=f(v().m(function n(){var e,r,t,a,i,o,c,u;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,J();case 1:for(e=n.v,r=Ln(e),t={},a=0,i=Object.entries(r.replies);a<i.length;a++)o=b(i[a],2),c=o[0],"string"==typeof(u=o[1])&&u.length>0&&(t[c]=u);return n.a(2,t)}},n)}))).apply(this,arguments)}function En(n){return Cn.apply(this,arguments)}function Cn(){return(Cn=f(v().m(function n(e){var r,t,a,i,o;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,H(["git","branch","--show-current"]);case 1:return r=n.v.trim(),n.n=2,W(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return t=n.v.trim(),r||q("Error: could not determine current branch"),t||q("Error: could not determine default branch"),r===t&&q("Error: current branch is the default branch (".concat(t,")")),a=["pr","create","--base",t,"--head",r,"--fill"],e&&e.length>0&&a.push("--body-file","-"),N("Creating pull request..."),n.n=3,W(a,e);case 3:return i=un,o=JSON,n.n=4,W(["pr","view","--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author"]);case 4:return n.a(2,i(o.parse.call(o,n.v)))}},n)}))).apply(this,arguments)}function _n(){return Tn.apply(this,arguments)}function Tn(){return(Tn=f(v().m(function n(){var e,r,t,a,i,o,c;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,z();case 1:return e=n.v,r=b(e,2),t=r[0],a=r[1],n.n=2,Z();case 2:return i=n.v,N("Fetching unresolved review threads..."),o=un,n.n=3,on(t,a,i);case 3:return c=n.v,n.a(2,o({unresolved_threads:c}))}},n)}))).apply(this,arguments)}function $n(n){return Nn.apply(this,arguments)}function Nn(){return(Nn=f(v().m(function n(e){var r,t,a,i,o,c,u,s,l,f,d,h,m,y,w,g,k,j,O,x;return v().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,z();case 1:return r=n.v,t=b(r,2),a=t[0],i=t[1],n.n=2,Z();case 2:return o=n.v,j=Set,n.n=3,tn(a,i,o);case 3:O=n.v,c=new j(O),N("Replying to ".concat(Object.keys(e).length," review threads...")),u=[],s=Object.entries(e),l=p(s.entries()),n.p=4,l.s();case 5:if((f=l.n()).done){n.n=9;break}if(h=b(f.value,2),m=h[0],y=b(h[1],2),w=y[0],g=y[1],N("Processing ".concat(m+1,"/").concat(s.length,": ").concat(w)),c.has(w)){n.n=6;break}return n.a(3,8);case 6:return n.n=7,V("\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:w,body:g});case 7:k=n.v,null!=(d=k.data)&&null!=(d=d.resolveReviewThread)&&null!=(d=d.thread)&&d.isResolved?u.push(w):N("Warning: failed to resolve thread ".concat(w,"."));case 8:n.n=5;break;case 9:n.n=11;break;case 10:n.p=10,x=n.v,l.e(x);case 11:return n.p=11,l.f(),n.f(11);case 12:return N("Done."),n.a(2,un({resolved_thread_ids:u}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function qn(){return Dn.apply(this,arguments)}function Dn(){return(Dn=f(v().m(function n(){var e,r,t,a,i,o,c,u,s,l,p,d,h,m,y;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Z();case 1:return e=n.v,N("Fetching latest CI results..."),n.n=2,hn(e);case 2:return r=n.v,t=b(r,3),a=t[0],i=t[1],o=t[2],c=pn(a),u=dn(c),s=b(u,2),l=s[0],p=s[1],m=Object,n.n=3,Promise.all(Object.entries(c).map(f(v().m(function n(e){var r,t,a,i,o;return v().w(function(n){for(;;)switch(n.n){case 0:return r=b(e,2),t=r[0],a=r[1],i=a.check,n.n=1,wn(yn(i));case 1:return o=n.v,n.a(2,[t,{classification:a.classification,check:sn(i),workflowRun:o&&sn(o)}])}},n)}))));case 3:if(d=m.fromEntries.call(m,n.v),h={latest_ci_results:a,waited_for_test_related_checks:i>0,test_related_check_wait_attempts:i,test_related_check_wait_timed_out:o,latest_workflow_results:d},!(Object.keys(l).length>0)){n.n=5;break}return y=Object,n.n=4,Promise.all(Object.entries(l).map(f(v().m(function n(e){var r,t,a,i,o,c;return v().w(function(n){for(;;)switch(n.n){case 0:if(r=b(e,2),t=r[0],a=r[1],i=yn(a.check)){n.n=1;break}return n.a(2,[t,"Failed latest result has no GitHub Actions run link."]);case 1:return o=t,n.n=2,Q(["run","view",i,"--log-failed"],[1]);case 2:return c=n.v,n.a(2,[o,c])}},n)}))));case 4:return h.failed_workflow_outputs=y.fromEntries.call(y,n.v),n.a(2,{output:un(h),exitCode:1});case 5:if(!(Object.keys(p).length>0)){n.n=6;break}return h.test_workflow_output="Timed out waiting for test-related workflows to finish.",h.running_test_related_workflows=Object.keys(p),n.a(2,{output:un(h),exitCode:1});case 6:return h.test_workflow_output="All workflows are successful.",n.a(2,{output:un(h),exitCode:0})}},n)}))).apply(this,arguments)}function Ln(n){try{var e=JSON.parse(n);return function(n){if("object"!==k(n)||null===n||Array.isArray(n))return!1;var e=n.replies;if("object"!==k(e)||null===e||Array.isArray(e))return!1;return Object.values(e).every(function(n){return null==n||"string"==typeof n})}(e)||q("".concat("Error: Invalid input format on stdin",": expected an object with a string-valued `replies` map"),2),e}catch(n){throw n instanceof SyntaxError&&q("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}function Gn(){return Jn.apply(this,arguments)}function Jn(){return(Jn=f(v().m(function n(){var e;return v().w(function(n){for(;;)switch(n.n){case 0:return e=Fn,n.n=1,O(["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 Fn(n,e){if(n.length>0)return n;throw new Error(e)}function Hn(){return Bn.apply(this,arguments)}function Bn(){return(Bn=f(v().m(function n(){var e;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Gn();case 1:return e=n.v,n.a(2,"Review 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: There is no concern.'))}},n)}))).apply(this,arguments)}function Wn(){return Mn.apply(this,arguments)}function Mn(){return(Mn=f(v().m(function n(){var e;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Gn();case 1:return e=n.v,n.a(2,"Simplify the current branch against the repository's default branch ".concat(e,' via `git diff "$(git merge-base ').concat(e,' HEAD)"`.\nFirst, inspect the diff and then read the related code around each changed area, including nearby functions, types, call sites, tests, configuration, and other files that influence whether the change is actually necessary.\nUse that context to find redundancy that can be safely removed or simplified, such as duplicate logic, repeated conditionals, unnecessary abstractions, overlapping code paths, dead code, or edits that no longer need to exist once the surrounding code is understood.\nPrioritize simplifications that reduce reviewer burden, such as:\n- removing redundant edits or dead code\n- removing 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)\nApply only the simplifications you can justify from the diff and the related code you inspected. Do not expand scope, do not introduce speculative refactors, and do not change the intended behavior.\nAfter making changes, summarize the redundancies or unnecessary complexity you removed and note any complexity you intentionally preserved because it still appears necessary.'))}},n)}))).apply(this,arguments)}var Qn=new n;function Un(n){Qn.command(n.name).description(n.description).allowExcessArguments(!1).addOption(new e("--agent <agent>",n.optionDescription).choices(n.choices).makeOptionMandatory()).action(f(v().m(function e(r){var t;return v().w(function(e){for(;;)switch(e.n){case 0:return t=process.stdout,e.n=1,n.run(r.agent);case 1:t.write.call(t,e.v);case 2:return e.a(2)}},e)})))}function zn(n,e,r){Qn.command(n).description(e).allowExcessArguments(!1).action(f(v().m(function n(){var e;return v().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)})))}Qn.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),Un({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?function(n){return A.apply(this,arguments)}(Hn()):P(n,Hn())}}),zn("review-codex","Run Codex review against the current branch",function(){return P("codex",Hn())}),zn("review-claude","Run Claude Code review against the current branch",function(){return P("claude",Hn())}),zn("review-gemini","Run Gemini CLI review against the current branch",function(){return P("gemini",Hn())}),Un({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 P(n,Wn())}}),zn("simplify-codex","Run Codex PR simplification against the current branch",function(){return P("codex",Wn())}),zn("simplify-claude","Run Claude Code PR simplification against the current branch",function(){return P("claude",Wn())}),zn("simplify-gemini","Run Gemini CLI PR simplification against the current branch",function(){return P("gemini",Wn())}),Qn.command("open-pr").description("Create a pull request for the current branch").allowExcessArguments(!1).action(f(v().m(function n(){var e,r;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,L();case 1:return e=n.v,n.n=2,En(e||void 0);case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),Qn.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action(f(v().m(function n(){var e;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,qn();case 1:e=n.v,process.stdout.write(e.output),process.exit(e.exitCode);case 2:return n.a(2)}},n)}))),Qn.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action(f(v().m(function n(){var e;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,_n();case 1:e=n.v,process.stdout.write(e);case 2:return n.a(2)}},n)}))),Qn.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action(f(v().m(function n(){var e,r;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Rn();case 1:return e=n.v,n.n=2,$n(e);case 2:r=n.v,process.stdout.write(r);case 3:return n.a(2)}},n)}))),await Qn.parseAsync(process.argv);
|
|
5
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQtc2tpbGxzLWNsaS5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL3Byb2Nlc3MvcnVuLWNvbW1hbmQudHMiLCIuLi9zcmMvYWdlbnQvYWdlbnQtY29tbWFuZHMudHMiLCIuLi9zcmMveWFtbC50cyIsIi4uL3NyYy9wci9wci1jb21tYW5kcy50cyIsIi4uL3NyYy9yZXBvL2RlZmF1bHQtYnJhbmNoLnRzIiwiLi4vc3JjL3Jldmlldy9yZXZpZXctY29tbWFuZHMudHMiLCIuLi9zcmMvc2ltcGxpZnkvc2ltcGxpZnktY29tbWFuZHMudHMiLCIuLi9zcmMvY2xpL2FnZW50LXNraWxscy1jbGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQ29tbWFuZChjb21tYW5kOiBzdHJpbmdbXSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kWzBdID8/ICcnLCBjb21tYW5kLnNsaWNlKDEpLCB7XG4gICAgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAncGlwZSddLFxuICB9KTtcblxuICBjb25zdCBbc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQpLFxuICAgIHN0cmVhbVRvVGV4dChwcm9jLnN0ZGVyciksXG4gICAgbmV3IFByb21pc2U8bnVtYmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgIHByb2Mub25jZSgnY2xvc2UnLCAoY29kZSkgPT4gcmVzb2x2ZShjb2RlID8/IDEpKTtcbiAgICB9KSxcbiAgXSk7XG5cbiAgaWYgKGV4aXRDb2RlID09PSAwKSB7XG4gICAgcmV0dXJuIHN0ZG91dDtcbiAgfVxuXG4gIGNvbnN0IG91dHB1dCA9IGAke3N0ZG91dH0ke3N0ZGVycn1gO1xuICB0aHJvdyBuZXcgRXJyb3Iob3V0cHV0IHx8IGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RyZWFtVG9UZXh0KHN0cmVhbTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgbGV0IHRleHQgPSAnJztcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICB0ZXh0ICs9IHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycgPyBjaHVuayA6IGNodW5rLnRvU3RyaW5nKCd1dGY4Jyk7XG4gIH1cbiAgcmV0dXJuIHRleHQ7XG59XG4iLCJpbXBvcnQgeyBydW5Db21tYW5kIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW4tY29tbWFuZC5qcyc7XG5cbmV4cG9ydCB0eXBlIEFnZW50TmFtZSA9ICdjb2RleCcgfCAnY2xhdWRlJyB8ICdnZW1pbmknO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQWdlbnRDb21tYW5kKGFnZW50OiBBZ2VudE5hbWUsIHByb21wdDogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIHJ1bkNvbW1hbmQoY3JlYXRlQWdlbnRDb21tYW5kKGFnZW50LCBhd2FpdCBwcm9tcHQpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkFsbEFnZW50Q29tbWFuZHMocHJvbXB0OiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZXNvbHZlZFByb21wdCA9IGF3YWl0IHByb21wdDtcbiAgcmV0dXJuIChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIChbJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSBhcyBjb25zdCkubWFwKFxuICAgICAgICBhc3luYyAoYWdlbnQpID0+IGAjIyAke2Rpc3BsYXlBZ2VudE5hbWUoYWdlbnQpfVxcblxcbiR7KGF3YWl0IHJ1bkFnZW50Q29tbWFuZChhZ2VudCwgcmVzb2x2ZWRQcm9tcHQpKS50cmltKCl9YFxuICAgICAgKVxuICAgIClcbiAgKS5qb2luKCdcXG5cXG4nKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQWdlbnRDb21tYW5kKGFnZW50OiBBZ2VudE5hbWUsIHByb21wdDogc3RyaW5nKTogc3RyaW5nW10ge1xuICBzd2l0Y2ggKGFnZW50KSB7XG4gICAgY2FzZSAnY29kZXgnOlxuICAgICAgcmV0dXJuIFsnbnB4JywgJy0teWVzJywgJ0BvcGVuYWkvY29kZXhAbGF0ZXN0JywgJy0teW9sbycsICctcCcsIHByb21wdF07XG4gICAgY2FzZSAnY2xhdWRlJzpcbiAgICAgIHJldHVybiBbJ2NsYXVkZScsICctLWRhbmdlcm91c2x5LXNraXAtcGVybWlzc2lvbnMnLCAnLXAnLCBwcm9tcHRdO1xuICAgIGNhc2UgJ2dlbWluaSc6XG4gICAgICByZXR1cm4gW1xuICAgICAgICAnbnB4JyxcbiAgICAgICAgJy0teWVzJyxcbiAgICAgICAgJ0Bnb29nbGUvZ2VtaW5pLWNsaUBwcmV2aWV3JyxcbiAgICAgICAgJy0tYXBwcm92YWwtbW9kZScsXG4gICAgICAgICd5b2xvJyxcbiAgICAgICAgJy0tbW9kZWwnLFxuICAgICAgICAnZ2VtaW5pLTMuMS1wcm8tcHJldmlldycsXG4gICAgICAgICctcCcsXG4gICAgICAgIHByb21wdCxcbiAgICAgIF07XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlzcGxheUFnZW50TmFtZShhZ2VudDogQWdlbnROYW1lKTogc3RyaW5nIHtcbiAgc3dpdGNoIChhZ2VudCkge1xuICAgIGNhc2UgJ2NvZGV4JzpcbiAgICAgIHJldHVybiAnQ29kZXgnO1xuICAgIGNhc2UgJ2NsYXVkZSc6XG4gICAgICByZXR1cm4gJ0NsYXVkZSBDb2RlJztcbiAgICBjYXNlICdnZW1pbmknOlxuICAgICAgcmV0dXJuICdHZW1pbmkgQ0xJJztcbiAgfVxufVxuIiwiLyoqXG4gKiBgYmxvY2tRdW90ZTogJ2xpdGVyYWwnYDogVXNlcyBhIHBpcGUgKGBwcm9wOiB8YCkgdG8gcmVwcmVzZW50IG11bHRpbGluZSBzdHJpbmdzLlxuICogYGxpbmVXaWR0aDogMGA6IERpc2FibGVzIGxpbmUgd3JhcHBpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCB5YW1sU3RyaW5naWZ5T3B0aW9ucyA9IHsgYmxvY2tRdW90ZTogJ2xpdGVyYWwnLCBsaW5lV2lkdGg6IDAgfSBhcyBjb25zdDtcbiIsImltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHN0ZGVyciBhcyBwcm9jZXNzU3RkZXJyLCBzdGRpbiBhcyBwcm9jZXNzU3RkaW4gfSBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgc2V0VGltZW91dCBhcyBzbGVlcCB9IGZyb20gJ25vZGU6dGltZXJzL3Byb21pc2VzJztcbmltcG9ydCB7IHN0cmluZ2lmeSBhcyBzdHJpbmdpZnlZYW1sIH0gZnJvbSAneWFtbCc7XG5pbXBvcnQgeyB5YW1sU3RyaW5naWZ5T3B0aW9ucyB9IGZyb20gJy4uL3lhbWwuanMnO1xuXG5leHBvcnQgY29uc3QgVEVTVF9SRUxBVEVEX1BBVFRFUk4gPSAvXFxidGVzdFxcYi9pO1xuZXhwb3J0IGNvbnN0IFRFU1RfQ0hFQ0tfV0FJVF9JTlRFUlZBTF9TRUNPTkRTID0gMTA7XG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19QUk9HUkVTU19JTlRFUlZBTF9TRUNPTkRTID0gMzA7XG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19XQUlUX01BWF9BVFRFTVBUUyA9IDM2MDtcbmV4cG9ydCBjb25zdCBaRVJPX1RJTUVTVEFNUCA9ICcwMDAxLTAxLTAxVDAwOjAwOjAwWic7XG5leHBvcnQgY29uc3QgV09SS0ZMT1dfUlVOX0pTT05fRklFTERTID0gW1xuICAnYXR0ZW1wdCcsXG4gICdjb25jbHVzaW9uJyxcbiAgJ2NyZWF0ZWRBdCcsXG4gICdkYXRhYmFzZUlkJyxcbiAgJ2Rpc3BsYXlUaXRsZScsXG4gICdldmVudCcsXG4gICdoZWFkQnJhbmNoJyxcbiAgJ2hlYWRTaGEnLFxuICAnbmFtZScsXG4gICdudW1iZXInLFxuICAnc3RhcnRlZEF0JyxcbiAgJ3N0YXR1cycsXG4gICd1cGRhdGVkQXQnLFxuICAndXJsJyxcbiAgJ3dvcmtmbG93TmFtZScsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBKc29uT2JqZWN0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmV4cG9ydCB0eXBlIENoZWNrID0ge1xuICBidWNrZXQ/OiBzdHJpbmc7XG4gIGNvbXBsZXRlZEF0Pzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZXZlbnQ/OiBzdHJpbmc7XG4gIGxpbms/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHN0YXJ0ZWRBdD86IHN0cmluZztcbiAgc3RhdGU/OiBzdHJpbmc7XG4gIHdvcmtmbG93Pzogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgQ2lSZXN1bHRzID0ge1xuICBzdW1tYXJ5OiB7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBwYXNzOiBudW1iZXI7XG4gICAgZmFpbDogbnVtYmVyO1xuICAgIHBlbmRpbmc6IG51bWJlcjtcbiAgICBza2lwcGluZzogbnVtYmVyO1xuICAgIGNhbmNlbDogbnVtYmVyO1xuICB9O1xuICBjaGVja3M6IENoZWNrW107XG59O1xuXG5leHBvcnQgdHlwZSBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uID0gJ2ZhaWxlZCcgfCAncnVubmluZycgfCAnc3VjY2Vzc2Z1bCc7XG5cbmV4cG9ydCB0eXBlIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdCA9IHtcbiAgY2xhc3NpZmljYXRpb246IFdvcmtmbG93Q2xhc3NpZmljYXRpb247XG4gIGNoZWNrOiBDaGVjaztcbiAgY2hlY2tzOiBDaGVja1tdO1xufTtcblxudHlwZSBSZXZpZXdDb21tZW50Tm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIGRpZmZIdW5rPzogc3RyaW5nIHwgbnVsbDtcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IHN0cmluZyB8IG51bGw7XG59O1xuXG50eXBlIFJldmlld1RocmVhZE5vZGUgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGlzUmVzb2x2ZWQ6IGJvb2xlYW47XG4gIGlzT3V0ZGF0ZWQ/OiBib29sZWFuIHwgbnVsbDtcbiAgcGF0aD86IHN0cmluZyB8IG51bGw7XG4gIGxpbmU/OiBudW1iZXIgfCBudWxsO1xuICBvcmlnaW5hbExpbmU/OiBudW1iZXIgfCBudWxsO1xuICBzdGFydExpbmU/OiBudW1iZXIgfCBudWxsO1xuICBvcmlnaW5hbFN0YXJ0TGluZT86IG51bWJlciB8IG51bGw7XG4gIGNvbW1lbnRzOiB7XG4gICAgbm9kZXM6IFJldmlld0NvbW1lbnROb2RlW107XG4gICAgcGFnZUluZm86IHtcbiAgICAgIGhhc05leHRQYWdlOiBib29sZWFuO1xuICAgICAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBSdW5Db21tYW5kT3B0aW9ucyA9IHtcbiAgc3RkaW5EYXRhPzogc3RyaW5nO1xuICBhbGxvd2VkRXhpdENvZGVzPzogbnVtYmVyW107XG59O1xuXG5jb25zdCBHSF9SRVRSWV9NQVhfQVRURU1QVFMgPSAzO1xuY29uc3QgR0hfUkVUUllfQkFTRV9ERUxBWV9NUyA9IDEwMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9ncmVzcyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgcHJvY2Vzc1N0ZGVyci53cml0ZShgJHttZXNzYWdlfVxcbmApO1xufVxuXG5mdW5jdGlvbiBleGl0V2l0aEVycm9yKG1lc3NhZ2U6IHN0cmluZywgY29kZSA9IDEpOiBuZXZlciB7XG4gIHByb2Nlc3NTdGRlcnIud3JpdGUoYCR7bWVzc2FnZX1cXG5gKTtcbiAgcHJvY2Vzcy5leGl0KGNvZGUpO1xufVxuXG5mdW5jdGlvbiBpc1RyYW5zaWVudEdoRmFpbHVyZShjb21tYW5kOiBzdHJpbmdbXSwgZXhpdENvZGU6IG51bWJlciwgb3V0cHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGNvbW1hbmRbMF0gIT09ICdnaCcgfHwgZXhpdENvZGUgPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gLyhIVFRQIDUwWzAyMzRdXFxifFdlIGhhZCBpc3N1ZXMgcHJvZHVjaW5nIHRoZSByZXNwb25zZSB0byB5b3VyIHJlcXVlc3QpL2kudGVzdChvdXRwdXQpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFN0ZGluVGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAocHJvY2Vzc1N0ZGluLmlzVFRZKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBhd2FpdCBzdHJlYW1Ub1RleHQocHJvY2Vzc1N0ZGluKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBpbnB1dCA9IGF3YWl0IHJlYWRTdGRpblRleHQoKTtcbiAgaWYgKGlucHV0Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cbiAgZXhpdFdpdGhFcnJvcignRXJyb3I6IEpTT04gaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nLCAyKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmQoY29tbWFuZDogc3RyaW5nW10sIG9wdGlvbnM6IFJ1bkNvbW1hbmRPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBhbGxvd2VkRXhpdENvZGVzID0gb3B0aW9ucy5hbGxvd2VkRXhpdENvZGVzID8/IFtdO1xuXG4gIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IEdIX1JFVFJZX01BWF9BVFRFTVBUUzsgYXR0ZW1wdCArPSAxKSB7XG4gICAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmRbMF0gPz8gJycsIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICAgIHN0ZGlvOiBbJ3BpcGUnLCAncGlwZScsICdwaXBlJ10sXG4gICAgfSk7XG4gICAgaWYgKG9wdGlvbnMuc3RkaW5EYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHByb2Muc3RkaW4uZW5kKG9wdGlvbnMuc3RkaW5EYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvYy5zdGRpbi5lbmQoKTtcbiAgICB9XG5cbiAgICBjb25zdCBbc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHN0cmVhbVRvVGV4dChwcm9jLnN0ZG91dCksXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRlcnIpLFxuICAgICAgbmV3IFByb21pc2U8bnVtYmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHByb2Mub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgICAgICBwcm9jLm9uY2UoJ2Nsb3NlJywgKGNvZGUpID0+IHJlc29sdmUoY29kZSA/PyAxKSk7XG4gICAgICB9KSxcbiAgICBdKTtcbiAgICBjb25zdCBvdXRwdXQgPSBgJHtzdGRvdXR9JHtzdGRlcnJ9YDtcblxuICAgIGlmIChleGl0Q29kZSA9PT0gMCB8fCBhbGxvd2VkRXhpdENvZGVzLmluY2x1ZGVzKGV4aXRDb2RlKSkge1xuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG5cbiAgICBpZiAoaXNUcmFuc2llbnRHaEZhaWx1cmUoY29tbWFuZCwgZXhpdENvZGUsIG91dHB1dCkgJiYgYXR0ZW1wdCA8IEdIX1JFVFJZX01BWF9BVFRFTVBUUykge1xuICAgICAgcHJvZ3Jlc3MoYFRyYW5zaWVudCBHaXRIdWIgQ0xJIGZhaWx1cmU7IHJldHJ5aW5nLi4uIChhdHRlbXB0ICR7YXR0ZW1wdH0gb2YgJHtHSF9SRVRSWV9NQVhfQVRURU1QVFMgLSAxfSlgKTtcbiAgICAgIGF3YWl0IHNsZWVwKEdIX1JFVFJZX0JBU0VfREVMQVlfTVMgKiBhdHRlbXB0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGV4aXRXaXRoRXJyb3Iob3V0cHV0IHx8IGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbiAgfVxuICBleGl0V2l0aEVycm9yKGBDb21tYW5kIGZhaWxlZCBhZnRlciAke0dIX1JFVFJZX01BWF9BVFRFTVBUU30gYXR0ZW1wdHM6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnaChhcmdzOiBzdHJpbmdbXSwgc3RkaW5EYXRhPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGF3YWl0IHJ1bkNvbW1hbmQoWydnaCcsIC4uLmFyZ3NdLCB7IHN0ZGluRGF0YSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdoQWxsb3dFeGl0Q29kZXMoXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICBhbGxvd2VkRXhpdENvZGVzOiBudW1iZXJbXSxcbiAgc3RkaW5EYXRhPzogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gYXdhaXQgcnVuQ29tbWFuZChbJ2doJywgLi4uYXJnc10sIHsgc3RkaW5EYXRhLCBhbGxvd2VkRXhpdENvZGVzIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudFJlcG9QYXJ0cygpOiBQcm9taXNlPFtzdHJpbmcsIHN0cmluZ10+IHtcbiAgY29uc3QgbmFtZVdpdGhPd25lciA9IChhd2FpdCBnaChbJ3JlcG8nLCAndmlldycsICctLWpzb24nLCAnbmFtZVdpdGhPd25lcicsICctLWpxJywgJy5uYW1lV2l0aE93bmVyJ10pKS50cmltKCk7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBuYW1lV2l0aE93bmVyLnNwbGl0KCcvJywgMik7XG4gIGlmICghb3duZXIgfHwgIW5hbWUpIHtcbiAgICBleGl0V2l0aEVycm9yKCdFcnJvcjogY291bGQgbm90IGRldGVybWluZSBjdXJyZW50IHJlcG9zaXRvcnknKTtcbiAgfVxuICByZXR1cm4gW293bmVyLCBuYW1lXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRQck51bWJlcigpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gKGF3YWl0IGdoKFsncHInLCAndmlldycsICctLWpzb24nLCAnbnVtYmVyJywgJy0tanEnLCAnLm51bWJlciddKSkudHJpbSgpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ3JhcGhxbDxUIGV4dGVuZHMgSnNvbk9iamVjdD4oXG4gIHF1ZXJ5OiBzdHJpbmcsXG4gIHZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZD4gPSB7fVxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IGFyZ3MgPSBbJ2FwaScsICdncmFwaHFsJywgJy1GJywgJ3F1ZXJ5PUAtJ107XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcnMpKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgYXJncy5wdXNoKCctRicsIGAke2tleX09JHt2YWx1ZX1gKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShhd2FpdCBnaChhcmdzLCBxdWVyeSkpIGFzIEpzb25PYmplY3QgJiB7IGVycm9ycz86IEFycmF5PHsgbWVzc2FnZT86IHN0cmluZyB9PiB9O1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSkge1xuICAgIHJldHVybiByZXNwb25zZSBhcyBUO1xuICB9XG5cbiAgY29uc3QgZXJyb3JNZXNzYWdlcyA9IHJlc3BvbnNlLmVycm9ycy5tYXAoKGVycm9yKSA9PiBlcnJvci5tZXNzYWdlID8/ICdVbmtub3duIEdyYXBoUUwgZXJyb3InKS5qb2luKCdcXG4nKTtcbiAgZXhpdFdpdGhFcnJvcihgR3JhcGhRTCBBUEkgZXJyb3I6XFxuJHtlcnJvck1lc3NhZ2VzfWApO1xufVxuXG5jb25zdCBSRVZJRVdfVEhSRUFEX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgcmV2aWV3VGhyZWFkcyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgICBpc091dGRhdGVkXG4gICAgICAgICAgICBwYXRoXG4gICAgICAgICAgICBsaW5lXG4gICAgICAgICAgICBvcmlnaW5hbExpbmVcbiAgICAgICAgICAgIHN0YXJ0TGluZVxuICAgICAgICAgICAgb3JpZ2luYWxTdGFydExpbmVcbiAgICAgICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDApIHtcbiAgICAgICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgICAgIGRpZmZIdW5rXG4gICAgICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFJFVklFV19DT01NRU5UX1FVRVJZID0gYFxuICBxdWVyeSgkdGhyZWFkSWQ6IElEISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgbm9kZShpZDogJHRocmVhZElkKSB7XG4gICAgICAuLi4gb24gUHVsbFJlcXVlc3RSZXZpZXdUaHJlYWQge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgZGlmZkh1bmtcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUkVWSUVXX1RIUkVBRF9JRFNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdUaHJlYWRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tbWVudEF1dGhvcihjb21tZW50OiBSZXZpZXdDb21tZW50Tm9kZSk6IFJldmlld0NvbW1lbnROb2RlICYgeyBhdXRob3I/OiBzdHJpbmcgfCBudWxsIH0ge1xuICByZXR1cm4ge1xuICAgIC4uLmNvbW1lbnQsXG4gICAgYXV0aG9yOiB0eXBlb2YgY29tbWVudC5hdXRob3IgPT09ICdzdHJpbmcnID8gY29tbWVudC5hdXRob3IgOiAoY29tbWVudC5hdXRob3I/LmxvZ2luID8/IG51bGwpLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFxuICBxdWVyeTogc3RyaW5nLFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIsXG4gIG9uVGhyZWFkOiAodGhyZWFkOiBSZXZpZXdUaHJlYWROb2RlKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPlxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgcmV2aWV3VGhyZWFkcyA9IChcbiAgICAgIGF3YWl0IGdyYXBocWw8e1xuICAgICAgICBkYXRhPzoge1xuICAgICAgICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICAgICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgICAgICAgcmV2aWV3VGhyZWFkcz86IHtcbiAgICAgICAgICAgICAgICBub2RlczogUmV2aWV3VGhyZWFkTm9kZVtdO1xuICAgICAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0+KHF1ZXJ5LCB7XG4gICAgICAgIG93bmVyLFxuICAgICAgICBuYW1lLFxuICAgICAgICBudW1iZXI6IE51bWJlcihwck51bWJlciksXG4gICAgICAgIGN1cnNvcixcbiAgICAgIH0pXG4gICAgKS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8ucmV2aWV3VGhyZWFkcztcblxuICAgIGlmICghcmV2aWV3VGhyZWFkcykge1xuICAgICAgZXhpdFdpdGhFcnJvcihcbiAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIHJldmlld1RocmVhZHMgaW4gR3JhcGhRTCByZXNwb25zZS4gVGhlIHB1bGwgcmVxdWVzdCBtYXkgbm90IGV4aXN0IG9yIHRoZXJlIHdhcyBhbiBBUEkgZXJyb3IuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRocmVhZCBvZiByZXZpZXdUaHJlYWRzLm5vZGVzKSB7XG4gICAgICBhd2FpdCBvblRocmVhZCh0aHJlYWQpO1xuICAgIH1cblxuICAgIGlmICghcmV2aWV3VGhyZWFkcy5wYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjdXJzb3IgPSByZXZpZXdUaHJlYWRzLnBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMoXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlclxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBpZHM6IHN0cmluZ1tdID0gW107XG4gIGF3YWl0IHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhSRVZJRVdfVEhSRUFEX0lEU19RVUVSWSwgb3duZXIsIG5hbWUsIHByTnVtYmVyLCAodGhyZWFkKSA9PiB7XG4gICAgaWYgKCF0aHJlYWQuaXNSZXNvbHZlZCkge1xuICAgICAgaWRzLnB1c2godGhyZWFkLmlkKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaWRzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5yZXNvbHZlZFJldmlld1RocmVhZHMoXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlclxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPiB7XG4gIGNvbnN0IHRocmVhZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gPSBbXTtcblxuICBhd2FpdCBwYWdpbmF0ZVJldmlld1RocmVhZHMoUkVWSUVXX1RIUkVBRF9RVUVSWSwgb3duZXIsIG5hbWUsIHByTnVtYmVyLCBhc3luYyAodGhyZWFkKSA9PiB7XG4gICAgaWYgKHRocmVhZC5pc1Jlc29sdmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tbWVudHMgPSB0aHJlYWQuY29tbWVudHMubm9kZXMubWFwKG5vcm1hbGl6ZUNvbW1lbnRBdXRob3IpO1xuICAgIGxldCBwYWdlSW5mbyA9IHRocmVhZC5jb21tZW50cy5wYWdlSW5mbztcbiAgICBsZXQgY3Vyc29yID0gcGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcblxuICAgIHdoaWxlIChwYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgY29uc3QgY29tbWVudENvbm5lY3Rpb24gPSAoXG4gICAgICAgIGF3YWl0IGdyYXBocWw8e1xuICAgICAgICAgIGRhdGE/OiB7XG4gICAgICAgICAgICBub2RlPzoge1xuICAgICAgICAgICAgICBjb21tZW50cz86IHtcbiAgICAgICAgICAgICAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICAgICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH0+KFJFVklFV19DT01NRU5UX1FVRVJZLCB7IHRocmVhZElkOiB0aHJlYWQuaWQsIGN1cnNvciB9KVxuICAgICAgKS5kYXRhPy5ub2RlPy5jb21tZW50cztcblxuICAgICAgaWYgKCFjb21tZW50Q29ubmVjdGlvbikge1xuICAgICAgICBleGl0V2l0aEVycm9yKGBDb3VsZCBub3QgZmluZCBjb21tZW50cyBpbiBHcmFwaFFMIHJlc3BvbnNlIGZvciB0aHJlYWQgJHt0aHJlYWQuaWR9LmApO1xuICAgICAgfVxuXG4gICAgICBjb21tZW50cy5wdXNoKC4uLmNvbW1lbnRDb25uZWN0aW9uLm5vZGVzLm1hcChub3JtYWxpemVDb21tZW50QXV0aG9yKSk7XG4gICAgICBwYWdlSW5mbyA9IGNvbW1lbnRDb25uZWN0aW9uLnBhZ2VJbmZvO1xuICAgICAgY3Vyc29yID0gcGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0aHJlYWRzLnB1c2goe1xuICAgICAgaWQ6IHRocmVhZC5pZCxcbiAgICAgIGlzUmVzb2x2ZWQ6IHRocmVhZC5pc1Jlc29sdmVkLFxuICAgICAgaXNPdXRkYXRlZDogdGhyZWFkLmlzT3V0ZGF0ZWQsXG4gICAgICBwYXRoOiB0aHJlYWQucGF0aCxcbiAgICAgIGxpbmU6IHRocmVhZC5saW5lLFxuICAgICAgb3JpZ2luYWxMaW5lOiB0aHJlYWQub3JpZ2luYWxMaW5lLFxuICAgICAgc3RhcnRMaW5lOiB0aHJlYWQuc3RhcnRMaW5lLFxuICAgICAgb3JpZ2luYWxTdGFydExpbmU6IHRocmVhZC5vcmlnaW5hbFN0YXJ0TGluZSxcbiAgICAgIGNvbW1lbnRzLFxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gdGhyZWFkcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHlhbWxEdW1wKGRhdGE6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gc3RyaW5naWZ5WWFtbChkYXRhLCB5YW1sU3RyaW5naWZ5T3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWVwQ29weTxUPihkYXRhOiBUKTogVCB7XG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKSBhcyBUO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGF0ZXN0UHJDaVJlc3VsdHMocHJOdW1iZXI/OiBzdHJpbmcpOiBQcm9taXNlPENpUmVzdWx0cz4ge1xuICBjb25zdCBhcmdzID0gWydwcicsICdjaGVja3MnXTtcbiAgaWYgKHByTnVtYmVyKSB7XG4gICAgYXJncy5wdXNoKHByTnVtYmVyKTtcbiAgfVxuICBhcmdzLnB1c2goJy0tanNvbicsICdidWNrZXQsY29tcGxldGVkQXQsZGVzY3JpcHRpb24sZXZlbnQsbGluayxuYW1lLHN0YXJ0ZWRBdCxzdGF0ZSx3b3JrZmxvdycpO1xuXG4gIGxldCBjaGVja3M6IENoZWNrW10gPSBbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCBnaEFsbG93RXhpdENvZGVzKGFyZ3MsIFs4XSk7XG4gICAgY2hlY2tzID0gcmF3LnRyaW0oKS5sZW5ndGggPiAwID8gKEpTT04ucGFyc2UocmF3KSBhcyBDaGVja1tdKSA6IFtdO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBjaGVja3MgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3VtbWFyeSA9IGNoZWNrcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgbnVtYmVyPj4oKGNvdW50cywgY2hlY2spID0+IHtcbiAgICBjb25zdCBidWNrZXQgPSBjaGVjay5idWNrZXQgPz8gJyc7XG4gICAgY291bnRzW2J1Y2tldF0gPSAoY291bnRzW2J1Y2tldF0gPz8gMCkgKyAxO1xuICAgIHJldHVybiBjb3VudHM7XG4gIH0sIHt9KTtcblxuICByZXR1cm4ge1xuICAgIHN1bW1hcnk6IHtcbiAgICAgIHRvdGFsOiBjaGVja3MubGVuZ3RoLFxuICAgICAgcGFzczogc3VtbWFyeS5wYXNzID8/IDAsXG4gICAgICBmYWlsOiBzdW1tYXJ5LmZhaWwgPz8gMCxcbiAgICAgIHBlbmRpbmc6IHN1bW1hcnkucGVuZGluZyA/PyAwLFxuICAgICAgc2tpcHBpbmc6IHN1bW1hcnkuc2tpcHBpbmcgPz8gMCxcbiAgICAgIGNhbmNlbDogc3VtbWFyeS5jYW5jZWwgPz8gMCxcbiAgICB9LFxuICAgIGNoZWNrcyxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0czogQ2lSZXN1bHRzKTogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiB7XG4gIGNvbnN0IGxhdGVzdFJlc3VsdHNCeVdvcmtmbG93ID0gY2lSZXN1bHRzLmNoZWNrcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgQ2hlY2tbXT4+KChncm91cGVkUmVzdWx0cywgY2hlY2spID0+IHtcbiAgICBjb25zdCB3b3JrZmxvd0tleSA9IGNoZWNrLndvcmtmbG93IHx8IGNoZWNrLm5hbWUgfHwgJ3Vua25vd25fd29ya2Zsb3cnO1xuICAgIGdyb3VwZWRSZXN1bHRzW3dvcmtmbG93S2V5XSA/Pz0gW107XG4gICAgZ3JvdXBlZFJlc3VsdHNbd29ya2Zsb3dLZXldLnB1c2goY2hlY2spO1xuICAgIHJldHVybiBncm91cGVkUmVzdWx0cztcbiAgfSwge30pO1xuXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMobGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3cpLm1hcCgoW3dvcmtmbG93S2V5LCBjaGVja3NdKSA9PiB7XG4gICAgICBjb25zdCBsYXRlc3RBdHRlbXB0Q2hlY2tzID0gbGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3coY2hlY2tzKTtcbiAgICAgIGNvbnN0IGZpcnN0Q2hlY2sgPSBsYXRlc3RBdHRlbXB0Q2hlY2tzWzBdO1xuICAgICAgaWYgKCFmaXJzdENoZWNrKSB7XG4gICAgICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBubyBjaGVja3MgZm91bmQgZm9yIHdvcmtmbG93ICR7d29ya2Zsb3dLZXl9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBsYXRlc3RDaGVjayA9XG4gICAgICAgIGxhdGVzdEF0dGVtcHRDaGVja3MucmVkdWNlPENoZWNrIHwgdW5kZWZpbmVkPigoY3VycmVudExhdGVzdCwgY2hlY2spID0+IHtcbiAgICAgICAgICBpZiAoIWN1cnJlbnRMYXRlc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVjaztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrKSA+IGxhdGVzdENoZWNrVGltZXN0YW1wKGN1cnJlbnRMYXRlc3QpID8gY2hlY2sgOiBjdXJyZW50TGF0ZXN0O1xuICAgICAgICB9LCB1bmRlZmluZWQpID8/IGZpcnN0Q2hlY2s7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIHdvcmtmbG93S2V5LFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NpZmljYXRpb246IHdvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24obGF0ZXN0QXR0ZW1wdENoZWNrcyksXG4gICAgICAgICAgY2hlY2s6IGxhdGVzdENoZWNrLFxuICAgICAgICAgIGNoZWNrczogbGF0ZXN0QXR0ZW1wdENoZWNrcyxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChcbiAgY2xhc3NpZmllZFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD5cbik6IFtSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+LCBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+XSB7XG4gIGNvbnN0IGZhaWxlZFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4gPSB7fTtcbiAgY29uc3QgcnVubmluZ1Jlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4gPSB7fTtcblxuICBmb3IgKGNvbnN0IFt3b3JrZmxvd0tleSwgcmVzdWx0XSBvZiBPYmplY3QuZW50cmllcyhjbGFzc2lmaWVkUmVzdWx0cykpIHtcbiAgICBpZiAocmVzdWx0LmNsYXNzaWZpY2F0aW9uID09PSAnZmFpbGVkJykge1xuICAgICAgZmFpbGVkUmVzdWx0c1t3b3JrZmxvd0tleV0gPSByZXN1bHQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdC5jbGFzc2lmaWNhdGlvbiA9PT0gJ3J1bm5pbmcnICYmIHJlc3VsdC5jaGVja3Muc29tZSgoY2hlY2spID0+IHRlc3RSZWxhdGVkQ2hlY2soY2hlY2spKSkge1xuICAgICAgcnVubmluZ1Jlc3VsdHNbd29ya2Zsb3dLZXldID0gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyhcbiAgcHJOdW1iZXI6IHN0cmluZyxcbiAgc2xlZXBGbjogKHNlY29uZHM6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPiA9IHNsZWVwU2Vjb25kcyxcbiAgbGF0ZXN0Q2lSZXN1bHRzRm46IChwck51bWJlcj86IHN0cmluZykgPT4gQ2lSZXN1bHRzIHwgUHJvbWlzZTxDaVJlc3VsdHM+ID0gbGF0ZXN0UHJDaVJlc3VsdHMsXG4gIHByb2dyZXNzRm46IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQgPSBwcm9ncmVzc1xuKTogUHJvbWlzZTxbQ2lSZXN1bHRzLCBudW1iZXIsIGJvb2xlYW5dPiB7XG4gIGxldCBhdHRlbXB0cyA9IDA7XG4gIGxldCBjaVJlc3VsdHMgPSBhd2FpdCBsYXRlc3RDaVJlc3VsdHNGbihwck51bWJlcik7XG5cbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IGNsYXNzaWZpZWRSZXN1bHRzID0gY2xhc3NpZmllZExhdGVzdFJlc3VsdHMoY2lSZXN1bHRzKTtcbiAgICBjb25zdCBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdID0gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKGNsYXNzaWZpZWRSZXN1bHRzKTtcblxuICAgIGlmIChPYmplY3Qua2V5cyhmYWlsZWRSZXN1bHRzKS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gW2NpUmVzdWx0cywgYXR0ZW1wdHMsIGZhbHNlXTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKHJ1bm5pbmdSZXN1bHRzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbY2lSZXN1bHRzLCBhdHRlbXB0cywgZmFsc2VdO1xuICAgIH1cbiAgICBpZiAoYXR0ZW1wdHMgPj0gVEVTVF9DSEVDS19XQUlUX01BWF9BVFRFTVBUUykge1xuICAgICAgcmV0dXJuIFtjaVJlc3VsdHMsIGF0dGVtcHRzLCB0cnVlXTtcbiAgICB9XG5cbiAgICBhdHRlbXB0cyArPSAxO1xuICAgIGlmIChzaG91bGRSZXBvcnRUZXN0Q2hlY2tXYWl0UHJvZ3Jlc3MoYXR0ZW1wdHMpKSB7XG4gICAgICBwcm9ncmVzc0ZuKFxuICAgICAgICBgV2FpdGluZyBmb3IgdGVzdC1yZWxhdGVkIHdvcmtmbG93cyB0byBmaW5pc2ggKGF0dGVtcHQgJHthdHRlbXB0c30vJHtURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTfSk6ICR7T2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpLmpvaW4oJywgJyl9YFxuICAgICAgKTtcbiAgICB9XG4gICAgYXdhaXQgc2xlZXBGbihURVNUX0NIRUNLX1dBSVRfSU5URVJWQUxfU0VDT05EUyk7XG4gICAgY2lSZXN1bHRzID0gYXdhaXQgbGF0ZXN0Q2lSZXN1bHRzRm4ocHJOdW1iZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZFJlcG9ydFRlc3RDaGVja1dhaXRQcm9ncmVzcyhhdHRlbXB0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgY29uc3QgcHJvZ3Jlc3NJbnRlcnZhbEF0dGVtcHRzID0gTWF0aC5tYXgoXG4gICAgMSxcbiAgICBNYXRoLmZsb29yKFRFU1RfQ0hFQ0tfUFJPR1JFU1NfSU5URVJWQUxfU0VDT05EUyAvIFRFU1RfQ0hFQ0tfV0FJVF9JTlRFUlZBTF9TRUNPTkRTKVxuICApO1xuICByZXR1cm4gYXR0ZW1wdCA9PT0gMSB8fCAoYXR0ZW1wdCAtIDEpICUgcHJvZ3Jlc3NJbnRlcnZhbEF0dGVtcHRzID09PSAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2s6IENoZWNrIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbGluayA9IGNoZWNrPy5saW5rO1xuICBpZiAoIWxpbmspIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBsaW5rLm1hdGNoKC9cXC9hY3Rpb25zXFwvcnVuc1xcLyhcXGQrKS8pPy5bMV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3b3JrZmxvd1J1bihydW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxKc29uT2JqZWN0IHwgdW5kZWZpbmVkPiB7XG4gIGlmICghcnVuSWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcnVuSnNvbiA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydydW4nLCAndmlldycsIHJ1bklkLCAnLS1qc29uJywgV09SS0ZMT1dfUlVOX0pTT05fRklFTERTLmpvaW4oJywnKV0sIFsxXSk7XG4gIGlmIChydW5Kc29uLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShydW5Kc29uKSBhcyBKc29uT2JqZWN0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBwcm9jZXNzU3RkZXJyLndyaXRlKGBXYXJuaW5nOiBDb3VsZCBub3QgcGFyc2UgSlNPTiBmb3Igd29ya2Zsb3cgcnVuICR7cnVuSWR9OiAke2Vycm9yLm1lc3NhZ2V9XFxuYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3coY2hlY2tzOiBDaGVja1tdKTogQ2hlY2tbXSB7XG4gIGNvbnN0IGdyb3VwcyA9IGNoZWNrcy5yZWR1Y2UoKGdyb3VwZWRDaGVja3MsIGNoZWNrKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gd29ya2Zsb3dBdHRlbXB0S2V5KGNoZWNrKTtcbiAgICBjb25zdCBncm91cCA9IGdyb3VwZWRDaGVja3MuZ2V0KGtleSk7XG4gICAgaWYgKGdyb3VwKSB7XG4gICAgICBncm91cC5wdXNoKGNoZWNrKTtcbiAgICAgIHJldHVybiBncm91cGVkQ2hlY2tzO1xuICAgIH1cbiAgICBncm91cGVkQ2hlY2tzLnNldChrZXksIFtjaGVja10pO1xuICAgIHJldHVybiBncm91cGVkQ2hlY2tzO1xuICB9LCBuZXcgTWFwPHN0cmluZywgQ2hlY2tbXT4oKSk7XG5cbiAgcmV0dXJuIEFycmF5LmZyb20oZ3JvdXBzLnZhbHVlcygpKS5yZWR1Y2U8Q2hlY2tbXT4oKGxhdGVzdEdyb3VwLCBjdXJyZW50R3JvdXApID0+IHtcbiAgICBpZiAobGF0ZXN0R3JvdXAubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gY3VycmVudEdyb3VwO1xuICAgIH1cblxuICAgIHJldHVybiBsYXRlc3RHcm91cFRpbWVzdGFtcChjdXJyZW50R3JvdXApID4gbGF0ZXN0R3JvdXBUaW1lc3RhbXAobGF0ZXN0R3JvdXApID8gY3VycmVudEdyb3VwIDogbGF0ZXN0R3JvdXA7XG4gIH0sIFtdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93QXR0ZW1wdEtleShjaGVjazogQ2hlY2spOiBzdHJpbmcge1xuICBjb25zdCBydW5JZCA9IHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKGNoZWNrKTtcbiAgcmV0dXJuIHJ1bklkID8gYHJ1bjoke3J1bklkfWAgOiAndW5rbm93bl9ydW4nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbihjaGVja3M6IENoZWNrW10pOiBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uIHtcbiAgY29uc3QgYnVja2V0cyA9IGNoZWNrcy5tYXAoKGNoZWNrKSA9PiBjaGVjay5idWNrZXQgPz8gJycpO1xuICBpZiAoYnVja2V0cy5zb21lKChidWNrZXQpID0+ICFbJ3Bhc3MnLCAnc2tpcHBpbmcnLCAncGVuZGluZyddLmluY2x1ZGVzKGJ1Y2tldCkpKSB7XG4gICAgcmV0dXJuICdmYWlsZWQnO1xuICB9XG4gIGlmIChidWNrZXRzLmluY2x1ZGVzKCdwZW5kaW5nJykpIHtcbiAgICByZXR1cm4gJ3J1bm5pbmcnO1xuICB9XG4gIHJldHVybiAnc3VjY2Vzc2Z1bCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXRlc3RDaGVja1RpbWVzdGFtcChjaGVjazogQ2hlY2spOiBzdHJpbmcge1xuICBjb25zdCB0aW1lc3RhbXAgPSBjaGVjay5jb21wbGV0ZWRBdDtcbiAgaWYgKCF0aW1lc3RhbXAgfHwgdGltZXN0YW1wID09PSBaRVJPX1RJTUVTVEFNUCkge1xuICAgIHJldHVybiBjaGVjay5zdGFydGVkQXQgPz8gJyc7XG4gIH1cbiAgcmV0dXJuIHRpbWVzdGFtcDtcbn1cblxuZnVuY3Rpb24gbGF0ZXN0R3JvdXBUaW1lc3RhbXAoY2hlY2tzOiBDaGVja1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNoZWNrcy5yZWR1Y2UoKGxhdGVzdCwgY2hlY2spID0+IHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBsYXRlc3RDaGVja1RpbWVzdGFtcChjaGVjayk7XG4gICAgcmV0dXJuIHRpbWVzdGFtcCA+IGxhdGVzdCA/IHRpbWVzdGFtcCA6IGxhdGVzdDtcbiAgfSwgJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVzdFJlbGF0ZWRDaGVjayhjaGVjazogQ2hlY2spOiBib29sZWFuIHtcbiAgcmV0dXJuIFtjaGVjay5uYW1lLCBjaGVjay53b3JrZmxvd10uc29tZSgodmFsdWUpID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgVEVTVF9SRUxBVEVEX1BBVFRFUk4udGVzdCh2YWx1ZSkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2xlZXBTZWNvbmRzKHNlY29uZHM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBzbGVlcChzZWNvbmRzICogMTAwMCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvVGV4dChzdHJlYW06IE5vZGVKUy5SZWFkYWJsZVN0cmVhbSB8IG51bGwpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoIXN0cmVhbSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICBjaHVua3MucHVzaCh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnID8gQnVmZmVyLmZyb20oY2h1bmspIDogQnVmZmVyLmZyb20oY2h1bmspKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpLnRvU3RyaW5nKCd1dGY4Jyk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkUmVwbGllc0Zyb21TdGRpbigpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgY29uc3QgaW5wdXQgPSBhd2FpdCByZWFkUmVxdWlyZWRTdGRpblRleHQoKTtcbiAgY29uc3QgcGF5bG9hZCA9IHBhcnNlUmVwbHlJbnB1dChpbnB1dCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRSZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgW3RocmVhZElkLCBib2R5XSBvZiBPYmplY3QuZW50cmllcyhwYXlsb2FkLnJlcGxpZXMpKSB7XG4gICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyAmJiBib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgIG5vcm1hbGl6ZWRSZXBsaWVzW3RocmVhZElkXSA9IGJvZHk7XG4gICAgfVxuICB9XG4gIHJldHVybiBub3JtYWxpemVkUmVwbGllcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5Qcihib2R5Pzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaGVhZCA9IChhd2FpdCBydW5Db21tYW5kKFsnZ2l0JywgJ2JyYW5jaCcsICctLXNob3ctY3VycmVudCddKSkudHJpbSgpO1xuICBjb25zdCBiYXNlID0gKGF3YWl0IGdoKFsncmVwbycsICd2aWV3JywgJy0tanNvbicsICdkZWZhdWx0QnJhbmNoUmVmJywgJy0tanEnLCAnLmRlZmF1bHRCcmFuY2hSZWYubmFtZSddKSkudHJpbSgpO1xuXG4gIGlmICghaGVhZCkge1xuICAgIGV4aXRXaXRoRXJyb3IoJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIGN1cnJlbnQgYnJhbmNoJyk7XG4gIH1cbiAgaWYgKCFiYXNlKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgZGVmYXVsdCBicmFuY2gnKTtcbiAgfVxuICBpZiAoaGVhZCA9PT0gYmFzZSkge1xuICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBjdXJyZW50IGJyYW5jaCBpcyB0aGUgZGVmYXVsdCBicmFuY2ggKCR7YmFzZX0pYCk7XG4gIH1cblxuICBjb25zdCBjcmVhdGVBcmdzID0gWydwcicsICdjcmVhdGUnLCAnLS1iYXNlJywgYmFzZSwgJy0taGVhZCcsIGhlYWQsICctLWZpbGwnXTtcbiAgaWYgKGJvZHkgJiYgYm9keS5sZW5ndGggPiAwKSB7XG4gICAgY3JlYXRlQXJncy5wdXNoKCctLWJvZHktZmlsZScsICctJyk7XG4gIH1cblxuICBwcm9ncmVzcygnQ3JlYXRpbmcgcHVsbCByZXF1ZXN0Li4uJyk7XG4gIGF3YWl0IGdoKGNyZWF0ZUFyZ3MsIGJvZHkpO1xuXG4gIHJldHVybiB5YW1sRHVtcChcbiAgICBKU09OLnBhcnNlKGF3YWl0IGdoKFsncHInLCAndmlldycsICctLWpzb24nLCAnaWQsbnVtYmVyLHRpdGxlLHVybCxzdGF0ZSxpc0RyYWZ0LGJhc2VSZWZOYW1lLGhlYWRSZWZOYW1lLGF1dGhvciddKSlcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RQclJldmlld1RocmVhZHMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcblxuICBwcm9ncmVzcygnRmV0Y2hpbmcgdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcy4uLicpO1xuICByZXR1cm4geWFtbER1bXAoeyB1bnJlc29sdmVkX3RocmVhZHM6IGF3YWl0IHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzKG93bmVyLCBuYW1lLCBwck51bWJlcikgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlUHJSZXZpZXdUaHJlYWRzKHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuICBjb25zdCB1bnJlc29sdmVkSWRzID0gbmV3IFNldChhd2FpdCB1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzKG93bmVyLCBuYW1lLCBwck51bWJlcikpO1xuXG4gIHByb2dyZXNzKGBSZXBseWluZyB0byAke09iamVjdC5rZXlzKHJlcGxpZXMpLmxlbmd0aH0gcmV2aWV3IHRocmVhZHMuLi5gKTtcblxuICBjb25zdCByZXNvbHZlZFRocmVhZElkczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHJlcGxpZXMpO1xuXG4gIGZvciAoY29uc3QgW2luZGV4LCBbdGhyZWFkSWQsIGJvZHldXSBvZiBlbnRyaWVzLmVudHJpZXMoKSkge1xuICAgIHByb2dyZXNzKGBQcm9jZXNzaW5nICR7aW5kZXggKyAxfS8ke2VudHJpZXMubGVuZ3RofTogJHt0aHJlYWRJZH1gKTtcbiAgICBpZiAoIXVucmVzb2x2ZWRJZHMuaGFzKHRocmVhZElkKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBncmFwaHFsPHtcbiAgICAgIGRhdGE/OiB7XG4gICAgICAgIHJlc29sdmVSZXZpZXdUaHJlYWQ/OiB7XG4gICAgICAgICAgdGhyZWFkPzoge1xuICAgICAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IGJvb2xlYW47XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfT4oXG4gICAgICBgXG4gICAgICAgIG11dGF0aW9uKCR0aHJlYWRJZDogSUQhLCAkYm9keTogU3RyaW5nISkge1xuICAgICAgICAgIGFkZFB1bGxSZXF1ZXN0UmV2aWV3VGhyZWFkUmVwbHkoaW5wdXQ6IHtwdWxsUmVxdWVzdFJldmlld1RocmVhZElkOiAkdGhyZWFkSWQsIGJvZHk6ICRib2R5fSkge1xuICAgICAgICAgICAgY29tbWVudCB7XG4gICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXNvbHZlUmV2aWV3VGhyZWFkKGlucHV0OiB7dGhyZWFkSWQ6ICR0aHJlYWRJZH0pIHtcbiAgICAgICAgICAgIHRocmVhZCB7XG4gICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICB7IHRocmVhZElkLCBib2R5IH1cbiAgICApO1xuXG4gICAgaWYgKHJlc3BvbnNlLmRhdGE/LnJlc29sdmVSZXZpZXdUaHJlYWQ/LnRocmVhZD8uaXNSZXNvbHZlZCkge1xuICAgICAgcmVzb2x2ZWRUaHJlYWRJZHMucHVzaCh0aHJlYWRJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2dyZXNzKGBXYXJuaW5nOiBmYWlsZWQgdG8gcmVzb2x2ZSB0aHJlYWQgJHt0aHJlYWRJZH0uYCk7XG4gICAgfVxuICB9XG5cbiAgcHJvZ3Jlc3MoJ0RvbmUuJyk7XG4gIHJldHVybiB5YW1sRHVtcCh7IHJlc29sdmVkX3RocmVhZF9pZHM6IHJlc29sdmVkVGhyZWFkSWRzIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tQckNpKCk6IFByb21pc2U8eyBvdXRwdXQ6IHN0cmluZzsgZXhpdENvZGU6IG51bWJlciB9PiB7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoJ0ZldGNoaW5nIGxhdGVzdCBDSSByZXN1bHRzLi4uJyk7XG4gIGNvbnN0IFtjaVJlc3VsdHMsIHdhaXRBdHRlbXB0cywgd2FpdFRpbWVkT3V0XSA9IGF3YWl0IHdhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MocHJOdW1iZXIpO1xuICBjb25zdCBjbGFzc2lmaWVkTGF0ZXN0ID0gY2xhc3NpZmllZExhdGVzdFJlc3VsdHMoY2lSZXN1bHRzKTtcbiAgY29uc3QgW2ZhaWxlZFJlc3VsdHMsIHJ1bm5pbmdSZXN1bHRzXSA9IGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChjbGFzc2lmaWVkTGF0ZXN0KTtcblxuICBjb25zdCBsYXRlc3RXb3JrZmxvd1Jlc3VsdHMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhjbGFzc2lmaWVkTGF0ZXN0KS5tYXAoYXN5bmMgKFt3b3JrZmxvd0tleSwgcmVzdWx0XSkgPT4ge1xuICAgICAgICBjb25zdCBjaGVjayA9IHJlc3VsdC5jaGVjaztcbiAgICAgICAgY29uc3QgcnVuID0gYXdhaXQgd29ya2Zsb3dSdW4od29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2spKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICB3b3JrZmxvd0tleSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc2lmaWNhdGlvbjogcmVzdWx0LmNsYXNzaWZpY2F0aW9uLFxuICAgICAgICAgICAgY2hlY2s6IGRlZXBDb3B5KGNoZWNrKSxcbiAgICAgICAgICAgIHdvcmtmbG93UnVuOiBydW4gJiYgZGVlcENvcHkocnVuKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfSlcbiAgICApXG4gICk7XG5cbiAgY29uc3QgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgbGF0ZXN0X2NpX3Jlc3VsdHM6IGNpUmVzdWx0cyxcbiAgICB3YWl0ZWRfZm9yX3Rlc3RfcmVsYXRlZF9jaGVja3M6IHdhaXRBdHRlbXB0cyA+IDAsXG4gICAgdGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfYXR0ZW1wdHM6IHdhaXRBdHRlbXB0cyxcbiAgICB0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF90aW1lZF9vdXQ6IHdhaXRUaW1lZE91dCxcbiAgICBsYXRlc3Rfd29ya2Zsb3dfcmVzdWx0czogbGF0ZXN0V29ya2Zsb3dSZXN1bHRzLFxuICB9O1xuXG4gIGlmIChPYmplY3Qua2V5cyhmYWlsZWRSZXN1bHRzKS5sZW5ndGggPiAwKSB7XG4gICAgcGF5bG9hZC5mYWlsZWRfd29ya2Zsb3dfb3V0cHV0cyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBPYmplY3QuZW50cmllcyhmYWlsZWRSZXN1bHRzKS5tYXAoYXN5bmMgKFt3b3JrZmxvd0tleSwgcmVzdWx0XSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJ1bklkID0gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsocmVzdWx0LmNoZWNrKTtcbiAgICAgICAgICBpZiAoIXJ1bklkKSB7XG4gICAgICAgICAgICByZXR1cm4gW3dvcmtmbG93S2V5LCAnRmFpbGVkIGxhdGVzdCByZXN1bHQgaGFzIG5vIEdpdEh1YiBBY3Rpb25zIHJ1biBsaW5rLiddO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gW3dvcmtmbG93S2V5LCBhd2FpdCBnaEFsbG93RXhpdENvZGVzKFsncnVuJywgJ3ZpZXcnLCBydW5JZCwgJy0tbG9nLWZhaWxlZCddLCBbMV0pXTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApO1xuICAgIHJldHVybiB7IG91dHB1dDogeWFtbER1bXAocGF5bG9hZCksIGV4aXRDb2RlOiAxIH07XG4gIH1cblxuICBpZiAoT2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpLmxlbmd0aCA+IDApIHtcbiAgICBwYXlsb2FkLnRlc3Rfd29ya2Zsb3dfb3V0cHV0ID0gJ1RpbWVkIG91dCB3YWl0aW5nIGZvciB0ZXN0LXJlbGF0ZWQgd29ya2Zsb3dzIHRvIGZpbmlzaC4nO1xuICAgIHBheWxvYWQucnVubmluZ190ZXN0X3JlbGF0ZWRfd29ya2Zsb3dzID0gT2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpO1xuICAgIHJldHVybiB7IG91dHB1dDogeWFtbER1bXAocGF5bG9hZCksIGV4aXRDb2RlOiAxIH07XG4gIH1cblxuICBwYXlsb2FkLnRlc3Rfd29ya2Zsb3dfb3V0cHV0ID0gJ0FsbCB3b3JrZmxvd3MgYXJlIHN1Y2Nlc3NmdWwuJztcbiAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VSZXBseUlucHV0KGlucHV0OiBzdHJpbmcpOiB7IHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+IH0ge1xuICBjb25zdCBlcnJvclByZWZpeCA9ICdFcnJvcjogSW52YWxpZCBpbnB1dCBmb3JtYXQgb24gc3RkaW4nO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShpbnB1dCkgYXMgdW5rbm93bjtcbiAgICBpZiAoIWlzUmVwbHlJbnB1dChwYXJzZWQpKSB7XG4gICAgICBleGl0V2l0aEVycm9yKGAke2Vycm9yUHJlZml4fTogZXhwZWN0ZWQgYW4gb2JqZWN0IHdpdGggYSBzdHJpbmctdmFsdWVkIFxcYHJlcGxpZXNcXGAgbWFwYCwgMik7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBJbnZhbGlkIEpTT04gcHJvdmlkZWQgb24gc3RkaW46ICR7ZXJyb3IubWVzc2FnZX1gLCAyKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNSZXBseUlucHV0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgeyByZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPiB9IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCByZXBsaWVzID0gKHZhbHVlIGFzIHsgcmVwbGllcz86IHVua25vd24gfSkucmVwbGllcztcbiAgaWYgKHR5cGVvZiByZXBsaWVzICE9PSAnb2JqZWN0JyB8fCByZXBsaWVzID09PSBudWxsIHx8IEFycmF5LmlzQXJyYXkocmVwbGllcykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZXBsaWVzKS5ldmVyeSgocmVwbHkpID0+IHJlcGx5ID09PSBudWxsIHx8IHJlcGx5ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHJlcGx5ID09PSAnc3RyaW5nJyk7XG59XG4iLCJpbXBvcnQgeyBydW5Db21tYW5kIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW4tY29tbWFuZC5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50RGVmYXVsdEJyYW5jaCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gcmVxdWlyZU5vbkVtcHR5KFxuICAgIChcbiAgICAgIGF3YWl0IHJ1bkNvbW1hbmQoWydnaCcsICdyZXBvJywgJ3ZpZXcnLCAnLS1qc29uJywgJ2RlZmF1bHRCcmFuY2hSZWYnLCAnLS10ZW1wbGF0ZScsICd7ey5kZWZhdWx0QnJhbmNoUmVmLm5hbWV9fSddKVxuICAgICkudHJpbSgpLFxuICAgICdFcnJvcjogY291bGQgbm90IGRldGVybWluZSB0aGUgZGVmYXVsdCBicmFuY2gnXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVOb25FbXB0eSh2YWx1ZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG4iLCJpbXBvcnQgeyBjdXJyZW50RGVmYXVsdEJyYW5jaCB9IGZyb20gJy4uL3JlcG8vZGVmYXVsdC1icmFuY2guanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRSZXZpZXdQcm9tcHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZGVmYXVsdEJyYW5jaCA9IGF3YWl0IGN1cnJlbnREZWZhdWx0QnJhbmNoKCk7XG4gIHJldHVybiBgUmV2aWV3IHRoZSBjdXJyZW50IGJyYW5jaCBhZ2FpbnN0IHRoZSByZXBvc2l0b3J5J3MgZGVmYXVsdCBicmFuY2ggJHtkZWZhdWx0QnJhbmNofSB2aWEgXFxgZ2l0IGRpZmYgXCIkKGdpdCBtZXJnZS1iYXNlICR7ZGVmYXVsdEJyYW5jaH0gSEVBRClcIlxcYC5cbkZvciBlYWNoIHJldmlldyBjb21tZW50LCBkbyB0aGUgZm9sbG93aW5nIGJlZm9yZSBtb3ZpbmcgdG8gdGhlIG5leHQgY29tbWVudDpcbjEuIENvbGxlY3QgdGhlIGluZm9ybWF0aW9uIHlvdSBuZWVkOlxuICAgLSBSZWFkIHRoZSBjb21tZW50IGNhcmVmdWxseSBhbmQgaWRlbnRpZnkgdGhlIGV4YWN0IGNsYWltIGJlaW5nIG1hZGUuXG4gICAtIEluc3BlY3QgdGhlIHJlZmVyZW5jZWQgY29kZSBhbmQgdGhlIHN1cnJvdW5kaW5nIGNhbGwgc2l0ZXMsIHJlbGF0ZWQgdHlwZXMsIHRlc3RzLCBjb25maWd1cmF0aW9uLCBhbmQgcmVjZW50IGRpZmZzIHdoZW4gdGhleSBhZmZlY3QgdGhlIGNsYWltLlxuMi4gR2F0aGVyIHN1cHBvcnRpbmcgZXZpZGVuY2U6XG4gICAtIElmIGNvZGUgaW5zcGVjdGlvbiBpcyBlbm91Z2gsIHVzZSB0aGUgY3VycmVudCBjb2RlYmFzZSBhcyB0aGUgcHJpbWFyeSBldmlkZW5jZS5cbiAgIC0gSWYgdGhlIGNsYWltIGlzIGFib3V0IHJ1bnRpbWUgYmVoYXZpb3IsIHJlcHJvZHVjZSBpdCB3aXRoIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgZXhwZXJpbWVudCwgc3VjaCBhcyBhIGZvY3VzZWQgY29tbWFuZCwgYSB0aW55IHNjcmlwdCwgYSB0ZW1wb3JhcnkgbG9jYWwgYXNzZXJ0aW9uLCBvciBhbm90aGVyIG5hcnJvdyBjaGVjayB0aGF0IGRvZXMgbm90IGNoYW5nZSB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuXG4gICAtIElmIHRoZSBjbGFpbSBkZXBlbmRzIG9uIGZyYW1ld29yaywgbGlicmFyeSwgcGxhdGZvcm0sIG9yIGxhbmd1YWdlIGJlaGF2aW9yLCBjb25maXJtIGl0IGFnYWluc3QgdGhlIGxhdGVzdCBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIG9yIGFub3RoZXIgcHJpbWFyeSBzb3VyY2UgaW5zdGVhZCBvZiByZWx5aW5nIG9uIG1lbW9yeS5cbjMuIEp1ZGdlIHdoZXRoZXIgdGhlIGNvbW1lbnQgaXMgdmFsaWQ6XG4gICAtIE1hcmsgaXQgdmFsaWQgb25seSB3aGVuIHRoZSBhdmFpbGFibGUgZXZpZGVuY2Ugc2hvd3MgdGhlIHJlcG9ydGVkIGlzc3VlIGlzIHN0aWxsIHJlYWwgaW4gdGhlIGN1cnJlbnQgY29kZWJhc2UuXG4gICAtIE90aGVyd2lzZSwgbWFyayBpdCBub3QgdmFsaWQuXG5SZXBvcnQgb25seSB0aGUgY29tbWVudHMgeW91IGp1ZGdlZCB2YWxpZCwgYW5kIGluY2x1ZGUgYSBzaG9ydCBiYXNpcyBmb3IgZWFjaCBvbmUgdGhhdCBjaXRlcyB0aGUgZXZpZGVuY2UgeW91IHVzZWQsIHN1Y2ggYXMgdGhlIGZhaWxpbmcgc2NlbmFyaW8sIGV4cGVyaW1lbnQgcmVzdWx0LCBvciByZWxldmFudCBvZmZpY2lhbCBkb2N1bWVudGF0aW9uLiBEbyBub3QgbW9kaWZ5IGNvZGUuXG5JZiB0aGVyZSBhcmUgbm8gdmFsaWQgcmV2aWV3IGNvbW1lbnRzLCByZXNwb25kIHdpdGggZXhhY3RseTogVGhlcmUgaXMgbm8gY29uY2Vybi5gO1xufVxuIiwiaW1wb3J0IHsgY3VycmVudERlZmF1bHRCcmFuY2ggfSBmcm9tICcuLi9yZXBvL2RlZmF1bHQtYnJhbmNoLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZGVmYXVsdEJyYW5jaCA9IGF3YWl0IGN1cnJlbnREZWZhdWx0QnJhbmNoKCk7XG4gIHJldHVybiBgU2ltcGxpZnkgdGhlIGN1cnJlbnQgYnJhbmNoIGFnYWluc3QgdGhlIHJlcG9zaXRvcnkncyBkZWZhdWx0IGJyYW5jaCAke2RlZmF1bHRCcmFuY2h9IHZpYSBcXGBnaXQgZGlmZiBcIiQoZ2l0IG1lcmdlLWJhc2UgJHtkZWZhdWx0QnJhbmNofSBIRUFEKVwiXFxgLlxuRmlyc3QsIGluc3BlY3QgdGhlIGRpZmYgYW5kIHRoZW4gcmVhZCB0aGUgcmVsYXRlZCBjb2RlIGFyb3VuZCBlYWNoIGNoYW5nZWQgYXJlYSwgaW5jbHVkaW5nIG5lYXJieSBmdW5jdGlvbnMsIHR5cGVzLCBjYWxsIHNpdGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbiwgYW5kIG90aGVyIGZpbGVzIHRoYXQgaW5mbHVlbmNlIHdoZXRoZXIgdGhlIGNoYW5nZSBpcyBhY3R1YWxseSBuZWNlc3NhcnkuXG5Vc2UgdGhhdCBjb250ZXh0IHRvIGZpbmQgcmVkdW5kYW5jeSB0aGF0IGNhbiBiZSBzYWZlbHkgcmVtb3ZlZCBvciBzaW1wbGlmaWVkLCBzdWNoIGFzIGR1cGxpY2F0ZSBsb2dpYywgcmVwZWF0ZWQgY29uZGl0aW9uYWxzLCB1bm5lY2Vzc2FyeSBhYnN0cmFjdGlvbnMsIG92ZXJsYXBwaW5nIGNvZGUgcGF0aHMsIGRlYWQgY29kZSwgb3IgZWRpdHMgdGhhdCBubyBsb25nZXIgbmVlZCB0byBleGlzdCBvbmNlIHRoZSBzdXJyb3VuZGluZyBjb2RlIGlzIHVuZGVyc3Rvb2QuXG5Qcmlvcml0aXplIHNpbXBsaWZpY2F0aW9ucyB0aGF0IHJlZHVjZSByZXZpZXdlciBidXJkZW4sIHN1Y2ggYXM6XG4tIHJlbW92aW5nIHJlZHVuZGFudCBlZGl0cyBvciBkZWFkIGNvZGVcbi0gcmVtb3Zpbmcgb3IgbWVyZ2luZyBkdXBsaWNhdGVkIGxvZ2ljIGRpc2NvdmVyZWQgYnkgY29tcGFyaW5nIHRoZSBkaWZmIHdpdGggcmVsYXRlZCBjb2RlXG4tIGZsYXR0ZW5pbmcgdW5uZWNlc3NhcmlseSBjb21wbGV4IGxvZ2ljIGludHJvZHVjZWQgaW4gdGhlIGRpZmYgKGUuZy4sIHVzaW5nIGVhcmx5IHJldHVybnMgdG8gcmVkdWNlIG5lc3RpbmcsIHNpbXBsaWZ5aW5nIGJvb2xlYW4gZXhwcmVzc2lvbnMsIG9yIHJlbW92aW5nIHJlZHVuZGFudCB3cmFwcGVyIGZ1bmN0aW9ucylcbkFwcGx5IG9ubHkgdGhlIHNpbXBsaWZpY2F0aW9ucyB5b3UgY2FuIGp1c3RpZnkgZnJvbSB0aGUgZGlmZiBhbmQgdGhlIHJlbGF0ZWQgY29kZSB5b3UgaW5zcGVjdGVkLiBEbyBub3QgZXhwYW5kIHNjb3BlLCBkbyBub3QgaW50cm9kdWNlIHNwZWN1bGF0aXZlIHJlZmFjdG9ycywgYW5kIGRvIG5vdCBjaGFuZ2UgdGhlIGludGVuZGVkIGJlaGF2aW9yLlxuQWZ0ZXIgbWFraW5nIGNoYW5nZXMsIHN1bW1hcml6ZSB0aGUgcmVkdW5kYW5jaWVzIG9yIHVubmVjZXNzYXJ5IGNvbXBsZXhpdHkgeW91IHJlbW92ZWQgYW5kIG5vdGUgYW55IGNvbXBsZXhpdHkgeW91IGludGVudGlvbmFsbHkgcHJlc2VydmVkIGJlY2F1c2UgaXQgc3RpbGwgYXBwZWFycyBuZWNlc3NhcnkuYDtcbn1cbiIsIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IHJ1bkFnZW50Q29tbWFuZCwgcnVuQWxsQWdlbnRDb21tYW5kcyB9IGZyb20gJy4uL2FnZW50L2FnZW50LWNvbW1hbmRzLmpzJztcbmltcG9ydCB7XG4gIGNoZWNrUHJDaSxcbiAgbGlzdFByUmV2aWV3VGhyZWFkcyxcbiAgb3BlblByLFxuICByZWFkUmVwbGllc0Zyb21TdGRpbixcbiAgcmVhZFN0ZGluVGV4dCxcbiAgcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyxcbn0gZnJvbSAnLi4vcHIvcHItY29tbWFuZHMuanMnO1xuaW1wb3J0IHsgYnVpbGRSZXZpZXdQcm9tcHQgfSBmcm9tICcuLi9yZXZpZXcvcmV2aWV3LWNvbW1hbmRzLmpzJztcbmltcG9ydCB7IGJ1aWxkU2ltcGxpZnlQcm9tcHQgfSBmcm9tICcuLi9zaW1wbGlmeS9zaW1wbGlmeS1jb21tYW5kcy5qcyc7XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtLm5hbWUoJ2FnZW50LXNraWxscycpLmRlc2NyaXB0aW9uKCdDTEkgY29tbWFuZHMgZm9yIHRoZSBza2lsbHMgaW4gdGhpcyByZXBvc2l0b3J5Jykuc2hvd0hlbHBBZnRlckVycm9yKCk7XG5cbmFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQoe1xuICBuYW1lOiAncmV2aWV3JyxcbiAgZGVzY3JpcHRpb246ICdSdW4gcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoIHdpdGggdGhlIHNlbGVjdGVkIGFnZW50JyxcbiAgb3B0aW9uRGVzY3JpcHRpb246ICdVc2UgYSByZXZpZXcgYWdlbnQnLFxuICBjaG9pY2VzOiBbJ2FsbCcsICdjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10sXG4gIHJ1bjogKG1vZGUpID0+XG4gICAgbW9kZSA9PT0gJ2FsbCcgPyBydW5BbGxBZ2VudENvbW1hbmRzKGJ1aWxkUmV2aWV3UHJvbXB0KCkpIDogcnVuQWdlbnRDb21tYW5kKG1vZGUsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpLFxufSk7XG5cbmFkZEFnZW50Q29tbWFuZCgncmV2aWV3LWNvZGV4JywgJ1J1biBDb2RleCByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NvZGV4JywgYnVpbGRSZXZpZXdQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3Jldmlldy1jbGF1ZGUnLCAnUnVuIENsYXVkZSBDb2RlIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY2xhdWRlJywgYnVpbGRSZXZpZXdQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3Jldmlldy1nZW1pbmknLCAnUnVuIEdlbWluaSBDTEkgcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdnZW1pbmknLCBidWlsZFJldmlld1Byb21wdCgpKVxuKTtcblxuYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCh7XG4gIG5hbWU6ICdzaW1wbGlmeScsXG4gIGRlc2NyaXB0aW9uOiAnUnVuIFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoIHdpdGggdGhlIHNlbGVjdGVkIGFnZW50JyxcbiAgb3B0aW9uRGVzY3JpcHRpb246ICdVc2UgYSBzaW1wbGlmeSBhZ2VudCcsXG4gIGNob2ljZXM6IFsnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddLFxuICBydW46IChhZ2VudCkgPT4gcnVuQWdlbnRDb21tYW5kKGFnZW50LCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpLFxufSk7XG5cbmFkZEFnZW50Q29tbWFuZCgnc2ltcGxpZnktY29kZXgnLCAnUnVuIENvZGV4IFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjb2RleCcsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWNsYXVkZScsICdSdW4gQ2xhdWRlIENvZGUgUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWdlbWluaScsICdSdW4gR2VtaW5pIENMSSBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnZ2VtaW5pJywgYnVpbGRTaW1wbGlmeVByb21wdCgpKVxuKTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnb3Blbi1wcicpXG4gIC5kZXNjcmlwdGlvbignQ3JlYXRlIGEgcHVsbCByZXF1ZXN0IGZvciB0aGUgY3VycmVudCBicmFuY2gnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZWFkU3RkaW5UZXh0KCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgb3BlblByKGJvZHkgfHwgdW5kZWZpbmVkKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtvdXRwdXR9XFxuYCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdjaGVjay1wci1jaScpXG4gIC5kZXNjcmlwdGlvbignU2hvdyB0aGUgbGF0ZXN0IHRlc3QtcmVsYXRlZCBDSSByZXN1bHRzIGZvciB0aGUgY3VycmVudCBwdWxsIHJlcXVlc3QnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrUHJDaSgpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHJlc3VsdC5vdXRwdXQpO1xuICAgIHByb2Nlc3MuZXhpdChyZXN1bHQuZXhpdENvZGUpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnbGlzdC1wci1yZXZpZXctdGhyZWFkcycpXG4gIC5kZXNjcmlwdGlvbignTGlzdCB1bnJlc29sdmVkIHJldmlldyB0aHJlYWRzIGZvciB0aGUgY3VycmVudCBwdWxsIHJlcXVlc3QnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGxpc3RQclJldmlld1RocmVhZHMoKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgncmVzb2x2ZS1wci1yZXZpZXctdGhyZWFkcycpXG4gIC5kZXNjcmlwdGlvbignUmVwbHkgdG8gdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcyBhbmQgcmVzb2x2ZSB0aGVtJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXBsaWVzID0gYXdhaXQgcmVhZFJlcGxpZXNGcm9tU3RkaW4oKTtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCByZXNvbHZlUHJSZXZpZXdUaHJlYWRzKHJlcGxpZXMpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5hd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMocHJvY2Vzcy5hcmd2KTtcblxuZnVuY3Rpb24gYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZDxUTW9kZSBleHRlbmRzIHN0cmluZz4oY29uZmlnOiB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgb3B0aW9uRGVzY3JpcHRpb246IHN0cmluZztcbiAgY2hvaWNlczogW1RNb2RlLCAuLi5UTW9kZVtdXTtcbiAgcnVuOiAobW9kZTogVE1vZGUpID0+IFByb21pc2U8c3RyaW5nPjtcbn0pOiB2b2lkIHtcbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKGNvbmZpZy5uYW1lKVxuICAgIC5kZXNjcmlwdGlvbihjb25maWcuZGVzY3JpcHRpb24pXG4gICAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hZ2VudCA8YWdlbnQ+JywgY29uZmlnLm9wdGlvbkRlc2NyaXB0aW9uKS5jaG9pY2VzKGNvbmZpZy5jaG9pY2VzKS5tYWtlT3B0aW9uTWFuZGF0b3J5KCkpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9uczogeyBhZ2VudDogVE1vZGUgfSkgPT4ge1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgY29uZmlnLnJ1bihvcHRpb25zLmFnZW50KSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEFnZW50Q29tbWFuZChuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcsIHJ1bjogKCkgPT4gUHJvbWlzZTxzdHJpbmc+KTogdm9pZCB7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChuYW1lKVxuICAgIC5kZXNjcmlwdGlvbihkZXNjcmlwdGlvbilcbiAgICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gICAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShhd2FpdCBydW4oKSk7XG4gICAgfSk7XG59XG4iXSwibmFtZXMiOlsicnVuQ29tbWFuZCIsIl94IiwiX3J1bkNvbW1hbmQiLCJhcHBseSIsInRoaXMiLCJhcmd1bWVudHMiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvciIsIm0iLCJfY2FsbGVlIiwiY29tbWFuZCIsIl9jb21tYW5kJCIsInByb2MiLCJfeWllbGQkUHJvbWlzZSRhbGwiLCJfeWllbGQkUHJvbWlzZSRhbGwyIiwic3Rkb3V0Iiwic3RkZXJyIiwib3V0cHV0IiwidyIsIl9jb250ZXh0IiwibiIsInNwYXduIiwic2xpY2UiLCJzdGRpbyIsIlByb21pc2UiLCJhbGwiLCJzdHJlYW1Ub1RleHQiLCJyZXNvbHZlIiwicmVqZWN0Iiwib25jZSIsImNvZGUiLCJ2IiwiX3NsaWNlZFRvQXJyYXkiLCJhIiwiY29uY2F0IiwiRXJyb3IiLCJqb2luIiwiX3gyIiwiX3N0cmVhbVRvVGV4dCIsIl9jYWxsZWUyIiwic3RyZWFtIiwidGV4dCIsIl9pdGVyYXRvckFicnVwdENvbXBsZXRpb24iLCJfZGlkSXRlcmF0b3JFcnJvciIsIl9pdGVyYXRvckVycm9yIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJjaHVuayIsIl90IiwiX2NvbnRleHQyIiwicCIsIl9hc3luY0l0ZXJhdG9yIiwibmV4dCIsImRvbmUiLCJ2YWx1ZSIsInRvU3RyaW5nIiwiZiIsInJ1bkFnZW50Q29tbWFuZCIsIl9ydW5BZ2VudENvbW1hbmQiLCJhZ2VudCIsInByb21wdCIsIl90MiIsIl90MyIsImNyZWF0ZUFnZW50Q29tbWFuZCIsIl9ydW5BbGxBZ2VudENvbW1hbmRzIiwiX2NhbGxlZTMiLCJyZXNvbHZlZFByb21wdCIsIl9jb250ZXh0MyIsIm1hcCIsIl90NCIsImRpc3BsYXlBZ2VudE5hbWUiLCJjYWxsIiwidHJpbSIsInlhbWxTdHJpbmdpZnlPcHRpb25zIiwiYmxvY2tRdW90ZSIsImxpbmVXaWR0aCIsIlRFU1RfUkVMQVRFRF9QQVRURVJOIiwiV09SS0ZMT1dfUlVOX0pTT05fRklFTERTIiwicHJvZ3Jlc3MiLCJtZXNzYWdlIiwicHJvY2Vzc1N0ZGVyciIsIndyaXRlIiwiZXhpdFdpdGhFcnJvciIsInByb2Nlc3MiLCJleGl0IiwiaXNUcmFuc2llbnRHaEZhaWx1cmUiLCJleGl0Q29kZSIsInRlc3QiLCJyZWFkU3RkaW5UZXh0IiwiX3JlYWRTdGRpblRleHQiLCJwcm9jZXNzU3RkaW4iLCJpc1RUWSIsInJlYWRSZXF1aXJlZFN0ZGluVGV4dCIsIl9yZWFkUmVxdWlyZWRTdGRpblRleHQiLCJpbnB1dCIsImxlbmd0aCIsIm9wdGlvbnMiLCJfb3B0aW9ucyRhbGxvd2VkRXhpdEMiLCJhbGxvd2VkRXhpdENvZGVzIiwiX2xvb3AiLCJfcmV0IiwiYXR0ZW1wdCIsIl9jb250ZXh0NCIsInVuZGVmaW5lZCIsInN0ZGluRGF0YSIsInN0ZGluIiwiZW5kIiwiaW5jbHVkZXMiLCJHSF9SRVRSWV9NQVhfQVRURU1QVFMiLCJzbGVlcCIsImQiLCJfcmVnZW5lcmF0b3JWYWx1ZXMiLCJnaCIsIl94MyIsIl94NCIsIl9naCIsIl9jYWxsZWU0IiwiYXJncyIsIl9jb250ZXh0NSIsIl90b0NvbnN1bWFibGVBcnJheSIsImdoQWxsb3dFeGl0Q29kZXMiLCJfeDUiLCJfeDYiLCJfeDciLCJfZ2hBbGxvd0V4aXRDb2RlcyIsIl9jYWxsZWU1IiwiX2NvbnRleHQ2IiwiY3VycmVudFJlcG9QYXJ0cyIsIl9jdXJyZW50UmVwb1BhcnRzIiwiX2NhbGxlZTYiLCJuYW1lV2l0aE93bmVyIiwiX25hbWVXaXRoT3duZXIkc3BsaXQiLCJfbmFtZVdpdGhPd25lciRzcGxpdDIiLCJvd25lciIsIm5hbWUiLCJfY29udGV4dDciLCJzcGxpdCIsImN1cnJlbnRQck51bWJlciIsIl9jdXJyZW50UHJOdW1iZXIiLCJfY2FsbGVlNyIsIl9jb250ZXh0OCIsImdyYXBocWwiLCJfeDgiLCJfeDkiLCJfZ3JhcGhxbCIsIl9jYWxsZWU4IiwicXVlcnkiLCJ2YXJzIiwiX2kyIiwiX09iamVjdCRlbnRyaWVzMiIsIl9PYmplY3QkZW50cmllczIkX2kiLCJfa2V5IiwicmVzcG9uc2UiLCJlcnJvck1lc3NhZ2VzIiwiX2NvbnRleHQ5IiwiT2JqZWN0IiwiZW50cmllcyIsImtleSIsInB1c2giLCJKU09OIiwicGFyc2UiLCJBcnJheSIsImlzQXJyYXkiLCJlcnJvcnMiLCJlcnJvciIsIl9lcnJvciRtZXNzYWdlIiwibm9ybWFsaXplQ29tbWVudEF1dGhvciIsImNvbW1lbnQiLCJfY29tbWVudCRhdXRob3IkbG9naW4iLCJfY29tbWVudCRhdXRob3IiLCJfb2JqZWN0U3ByZWFkIiwiYXV0aG9yIiwibG9naW4iLCJwYWdpbmF0ZVJldmlld1RocmVhZHMiLCJfeDAiLCJfeDEiLCJfeDEwIiwiX3gxMSIsIl94MTIiLCJfcGFnaW5hdGVSZXZpZXdUaHJlYWRzIiwiX2NhbGxlZTkiLCJwck51bWJlciIsIm9uVGhyZWFkIiwiY3Vyc29yIiwiX3lpZWxkJGdyYXBocWwkZGF0YSIsIl9yZXZpZXdUaHJlYWRzJHBhZ2VJbiIsInJldmlld1RocmVhZHMiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwidGhyZWFkIiwiX3Q1IiwiX3Q2IiwiX2NvbnRleHQwIiwibnVtYmVyIiwiTnVtYmVyIiwiZGF0YSIsInJlcG9zaXRvcnkiLCJwdWxsUmVxdWVzdCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwibm9kZXMiLCJzIiwiZSIsInBhZ2VJbmZvIiwiaGFzTmV4dFBhZ2UiLCJlbmRDdXJzb3IiLCJ1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzIiwiX3gxMyIsIl94MTQiLCJfeDE1IiwiX3VucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMiLCJfY2FsbGVlMCIsImlkcyIsIl9jb250ZXh0MSIsImlzUmVzb2x2ZWQiLCJpZCIsInVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzIiwiX3gxNiIsIl94MTciLCJfeDE4IiwiX3VucmVzb2x2ZWRSZXZpZXdUaHJlYWRzIiwiX2NhbGxlZTEwIiwidGhyZWFkcyIsIl9jb250ZXh0MTEiLCJfY2FsbGVlMSIsIl9wYWdlSW5mbyRlbmRDdXJzb3IiLCJjb21tZW50cyIsIl95aWVsZCRncmFwaHFsJGRhdGEyIiwiX3BhZ2VJbmZvJGVuZEN1cnNvcjIiLCJjb21tZW50Q29ubmVjdGlvbiIsIl90NyIsIl90OCIsIl90OSIsIl9jb250ZXh0MTAiLCJ0aHJlYWRJZCIsIm5vZGUiLCJpc091dGRhdGVkIiwicGF0aCIsImxpbmUiLCJvcmlnaW5hbExpbmUiLCJzdGFydExpbmUiLCJvcmlnaW5hbFN0YXJ0TGluZSIsInlhbWxEdW1wIiwic3RyaW5naWZ5WWFtbCIsImRlZXBDb3B5Iiwic3RyaW5naWZ5IiwibGF0ZXN0UHJDaVJlc3VsdHMiLCJfeDE5IiwiX2xhdGVzdFByQ2lSZXN1bHRzIiwiX2NhbGxlZTExIiwiX3N1bW1hcnkkcGFzcyIsIl9zdW1tYXJ5JGZhaWwiLCJfc3VtbWFyeSRwZW5kaW5nIiwiX3N1bW1hcnkkc2tpcHBpbmciLCJfc3VtbWFyeSRjYW5jZWwiLCJjaGVja3MiLCJyYXciLCJzdW1tYXJ5IiwiX3QwIiwiX2NvbnRleHQxMiIsIlN5bnRheEVycm9yIiwicmVkdWNlIiwiY291bnRzIiwiY2hlY2siLCJfY2hlY2skYnVja2V0MiIsIl9jb3VudHMkYnVja2V0IiwiYnVja2V0IiwidG90YWwiLCJwYXNzIiwiZmFpbCIsInBlbmRpbmciLCJza2lwcGluZyIsImNhbmNlbCIsImNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzIiwiY2lSZXN1bHRzIiwibGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3ciLCJncm91cGVkUmVzdWx0cyIsIndvcmtmbG93S2V5Iiwid29ya2Zsb3ciLCJmcm9tRW50cmllcyIsIl9yZWYiLCJfbGF0ZXN0QXR0ZW1wdENoZWNrcyQiLCJfcmVmMiIsImxhdGVzdEF0dGVtcHRDaGVja3MiLCJncm91cHMiLCJncm91cGVkQ2hlY2tzIiwicnVuSWQiLCJ3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayIsIndvcmtmbG93QXR0ZW1wdEtleSIsImdyb3VwIiwiZ2V0Iiwic2V0IiwiTWFwIiwiZnJvbSIsInZhbHVlcyIsImxhdGVzdEdyb3VwIiwiY3VycmVudEdyb3VwIiwibGF0ZXN0R3JvdXBUaW1lc3RhbXAiLCJsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyIsImZpcnN0Q2hlY2siLCJsYXRlc3RDaGVjayIsImN1cnJlbnRMYXRlc3QiLCJsYXRlc3RDaGVja1RpbWVzdGFtcCIsImNsYXNzaWZpY2F0aW9uIiwid29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbiIsImZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZCIsImNsYXNzaWZpZWRSZXN1bHRzIiwiZmFpbGVkUmVzdWx0cyIsInJ1bm5pbmdSZXN1bHRzIiwiX2kiLCJfT2JqZWN0JGVudHJpZXMiLCJfT2JqZWN0JGVudHJpZXMkX2kiLCJyZXN1bHQiLCJzb21lIiwidGVzdFJlbGF0ZWRDaGVjayIsIndhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MiLCJfeDIwIiwiX3gyMSIsIl94MjIiLCJfeDIzIiwiX3dhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MiLCJfY2FsbGVlMTIiLCJzbGVlcEZuIiwibGF0ZXN0Q2lSZXN1bHRzRm4iLCJwcm9ncmVzc0ZuIiwiYXR0ZW1wdHMiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QyIiwiX2NvbnRleHQxMyIsInNsZWVwU2Vjb25kcyIsImtleXMiLCJzaG91bGRSZXBvcnRUZXN0Q2hlY2tXYWl0UHJvZ3Jlc3MiLCJwcm9ncmVzc0ludGVydmFsQXR0ZW1wdHMiLCJNYXRoIiwibWF4IiwiZmxvb3IiLCJURVNUX0NIRUNLX1BST0dSRVNTX0lOVEVSVkFMX1NFQ09ORFMiLCJfbGluayRtYXRjaCIsImxpbmsiLCJtYXRjaCIsIndvcmtmbG93UnVuIiwiX3gyNCIsIl93b3JrZmxvd1J1biIsIl9jYWxsZWUxMyIsInJ1bkpzb24iLCJfdDEiLCJfY29udGV4dDE0IiwiYnVja2V0cyIsIl9jaGVjayRidWNrZXQiLCJfY2hlY2skc3RhcnRlZEF0IiwidGltZXN0YW1wIiwiY29tcGxldGVkQXQiLCJzdGFydGVkQXQiLCJsYXRlc3QiLCJfeDI1IiwiX3NsZWVwU2Vjb25kcyIsIl9jYWxsZWUxNCIsInNlY29uZHMiLCJfY29udGV4dDE1IiwiX3gyNiIsIl9jYWxsZWUxNSIsImNodW5rcyIsIl90MTAiLCJfY29udGV4dDE2IiwiQnVmZmVyIiwicmVhZFJlcGxpZXNGcm9tU3RkaW4iLCJfcmVhZFJlcGxpZXNGcm9tU3RkaW4iLCJfY2FsbGVlMTYiLCJwYXlsb2FkIiwibm9ybWFsaXplZFJlcGxpZXMiLCJfaTMiLCJfT2JqZWN0JGVudHJpZXMzIiwiX09iamVjdCRlbnRyaWVzMyRfaSIsImJvZHkiLCJfY29udGV4dDE3IiwicGFyc2VSZXBseUlucHV0IiwicmVwbGllcyIsIm9wZW5QciIsIl94MjciLCJfb3BlblByIiwiX2NhbGxlZTE3IiwiaGVhZCIsImJhc2UiLCJjcmVhdGVBcmdzIiwiX3QxMSIsIl90MTIiLCJfY29udGV4dDE4IiwibGlzdFByUmV2aWV3VGhyZWFkcyIsIl9saXN0UHJSZXZpZXdUaHJlYWRzIiwiX2NhbGxlZTE4IiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyMiIsIl90MTMiLCJfdDE0IiwiX2NvbnRleHQxOSIsInVucmVzb2x2ZWRfdGhyZWFkcyIsInJlc29sdmVQclJldmlld1RocmVhZHMiLCJfeDI4IiwiX3Jlc29sdmVQclJldmlld1RocmVhZHMiLCJfY2FsbGVlMTkiLCJfeWllbGQkY3VycmVudFJlcG9QYXIzIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyNCIsInVucmVzb2x2ZWRJZHMiLCJyZXNvbHZlZFRocmVhZElkcyIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJfcmVzcG9uc2UkZGF0YSIsIl9zdGVwMyR2YWx1ZSIsImluZGV4IiwiX3N0ZXAzJHZhbHVlJCIsIl90MTUiLCJfdDE2IiwiX3QxNyIsIl9jb250ZXh0MjAiLCJTZXQiLCJoYXMiLCJyZXNvbHZlUmV2aWV3VGhyZWFkIiwicmVzb2x2ZWRfdGhyZWFkX2lkcyIsImNoZWNrUHJDaSIsIl9jaGVja1ByQ2kiLCJfY2FsbGVlMjIiLCJfeWllbGQkd2FpdEZvclJ1bm5pbmciLCJfeWllbGQkd2FpdEZvclJ1bm5pbmcyIiwid2FpdEF0dGVtcHRzIiwid2FpdFRpbWVkT3V0IiwiY2xhc3NpZmllZExhdGVzdCIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDMiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3Q0IiwibGF0ZXN0V29ya2Zsb3dSZXN1bHRzIiwiX3QyMCIsIl90MjEiLCJfY29udGV4dDIzIiwiX2NhbGxlZTIwIiwiX3JlZjQiLCJfcmVmNiIsInJ1biIsIl9jb250ZXh0MjEiLCJsYXRlc3RfY2lfcmVzdWx0cyIsIndhaXRlZF9mb3JfdGVzdF9yZWxhdGVkX2NoZWNrcyIsInRlc3RfcmVsYXRlZF9jaGVja193YWl0X2F0dGVtcHRzIiwidGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfdGltZWRfb3V0IiwibGF0ZXN0X3dvcmtmbG93X3Jlc3VsdHMiLCJfY2FsbGVlMjEiLCJfcmVmNyIsIl9yZWY5IiwiX3QxOCIsIl90MTkiLCJfY29udGV4dDIyIiwiZmFpbGVkX3dvcmtmbG93X291dHB1dHMiLCJ0ZXN0X3dvcmtmbG93X291dHB1dCIsInJ1bm5pbmdfdGVzdF9yZWxhdGVkX3dvcmtmbG93cyIsInBhcnNlZCIsIl90eXBlb2YiLCJldmVyeSIsInJlcGx5IiwiaXNSZXBseUlucHV0IiwiY3VycmVudERlZmF1bHRCcmFuY2giLCJfY3VycmVudERlZmF1bHRCcmFuY2giLCJyZXF1aXJlTm9uRW1wdHkiLCJidWlsZFJldmlld1Byb21wdCIsIl9idWlsZFJldmlld1Byb21wdCIsImRlZmF1bHRCcmFuY2giLCJidWlsZFNpbXBsaWZ5UHJvbXB0IiwiX2J1aWxkU2ltcGxpZnlQcm9tcHQiLCJwcm9ncmFtIiwiQ29tbWFuZCIsImFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQiLCJjb25maWciLCJkZXNjcmlwdGlvbiIsImFsbG93RXhjZXNzQXJndW1lbnRzIiwiYWRkT3B0aW9uIiwiT3B0aW9uIiwib3B0aW9uRGVzY3JpcHRpb24iLCJjaG9pY2VzIiwibWFrZU9wdGlvbk1hbmRhdG9yeSIsImFjdGlvbiIsImFkZEFnZW50Q29tbWFuZCIsInNob3dIZWxwQWZ0ZXJFcnJvciIsIm1vZGUiLCJydW5BbGxBZ2VudENvbW1hbmRzIiwicGFyc2VBc3luYyIsImFyZ3YiXSwibWFwcGluZ3MiOiI7OzttekhBRUEsU0FBc0JBLEVBQVVDLEdBQUEsT0FBQUMsRUFBQUMsTUFBQUMsS0FBQUMsVUFBQSxDQW9CL0IsU0FBQUgsSUFBQSxPQUFBQSxFQUFBSSxFQUFBQyxJQUFBQyxFQXBCTSxTQUFBQyxFQUEwQkMsR0FBaUIsSUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQSxPQUFBVixJQUFBVyxFQUFBLFNB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
|