gitlab-ci-local 4.48.2 → 4.50.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/README.md +1 -0
- package/package.json +7 -4
- package/src/argv.js +21 -15
- package/src/git-data.js +56 -21
- package/src/gitlab-preset.js +27 -0
- package/src/index.js +13 -9
- package/src/job.js +83 -25
- package/src/parallel.js +10 -3
- package/src/parser-includes.js +37 -4
- package/src/parser.js +7 -4
- package/src/schema/schema.json +1 -1
- package/src/utils.js +68 -13
- package/src/validator.js +5 -5
package/src/parallel.js
CHANGED
|
@@ -3,12 +3,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.matrixVariablesList = void 0;
|
|
6
|
+
exports.matrixVariablesList = exports.isPlainParallel = void 0;
|
|
7
7
|
const assert_1 = __importDefault(require("assert"));
|
|
8
8
|
const deep_extend_1 = __importDefault(require("deep-extend"));
|
|
9
|
+
function isPlainParallel(jobData) {
|
|
10
|
+
return Number.isInteger(jobData.parallel);
|
|
11
|
+
}
|
|
12
|
+
exports.isPlainParallel = isPlainParallel;
|
|
9
13
|
function matrixVariablesList(jobData, jobName) {
|
|
14
|
+
if (isPlainParallel(jobData)) {
|
|
15
|
+
return Array(jobData.parallel).fill(null);
|
|
16
|
+
}
|
|
10
17
|
if (jobData?.parallel?.matrix == null) {
|
|
11
|
-
return null;
|
|
18
|
+
return [null];
|
|
12
19
|
}
|
|
13
20
|
(0, assert_1.default)(Array.isArray(jobData.parallel.matrix), `${jobName} parallel.matrix is not an array`);
|
|
14
21
|
const matrixVariables = [];
|
|
@@ -44,4 +51,4 @@ function matrixVariablesList(jobData, jobName) {
|
|
|
44
51
|
return matrixVariables;
|
|
45
52
|
}
|
|
46
53
|
exports.matrixVariablesList = matrixVariablesList;
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYWxsZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwYXJhbGxlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsOERBQXFDO0FBRXJDLFNBQWdCLGVBQWUsQ0FBRSxPQUFZO0lBQ3pDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDOUMsQ0FBQztBQUZELDBDQUVDO0FBRUQsU0FBZ0IsbUJBQW1CLENBQUUsT0FBWSxFQUFFLE9BQWU7SUFDOUQsSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUMzQixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFDRCxJQUFJLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3BDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBQ0QsSUFBQSxnQkFBTSxFQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLE9BQU8sa0NBQWtDLENBQUMsQ0FBQztJQUU3RixNQUFNLGVBQWUsR0FBOEIsRUFBRSxDQUFDO0lBRXRELHlDQUF5QztJQUN6QyxLQUFLLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdEMsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDTCxDQUFDO0lBRUQsMkRBQTJEO0lBQzNELE1BQU0sSUFBSSxHQUFHLElBQUEscUJBQVUsRUFBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckMsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVWLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUMxQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEIsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFZCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hELEtBQUssR0FBRyxFQUFFLENBQUM7WUFFWCxLQUFLLE1BQU0sS0FBSyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUM3QixLQUFLLE1BQU0sQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUNyQixNQUFNLGNBQWMsR0FBNEIsRUFBQyxHQUFHLEtBQUssRUFBQyxDQUFDO29CQUMzRCxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN4QixLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUMvQixDQUFDO1lBQ0wsQ0FBQztZQUNELENBQUMsRUFBRSxDQUFDO1FBQ1IsQ0FBQztRQUNELGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsT0FBTyxlQUFlLENBQUM7QUFDM0IsQ0FBQztBQTlDRCxrREE4Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCBkZWVwRXh0ZW5kIGZyb20gXCJkZWVwLWV4dGVuZFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQbGFpblBhcmFsbGVsIChqb2JEYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihqb2JEYXRhLnBhcmFsbGVsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hdHJpeFZhcmlhYmxlc0xpc3QgKGpvYkRhdGE6IGFueSwgam9iTmFtZTogc3RyaW5nKToge1trZXk6IHN0cmluZ106IHN0cmluZ31bXSB8IG51bGxbXSB7XG4gICAgaWYgKGlzUGxhaW5QYXJhbGxlbChqb2JEYXRhKSkge1xuICAgICAgICByZXR1cm4gQXJyYXkoam9iRGF0YS5wYXJhbGxlbCkuZmlsbChudWxsKTtcbiAgICB9XG4gICAgaWYgKGpvYkRhdGE/LnBhcmFsbGVsPy5tYXRyaXggPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gW251bGxdO1xuICAgIH1cbiAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShqb2JEYXRhLnBhcmFsbGVsLm1hdHJpeCksIGAke2pvYk5hbWV9IHBhcmFsbGVsLm1hdHJpeCBpcyBub3QgYW4gYXJyYXlgKTtcblxuICAgIGNvbnN0IG1hdHJpeFZhcmlhYmxlczoge1trZXk6IHN0cmluZ106IHN0cmluZ31bXSA9IFtdO1xuXG4gICAgLy8gRXhwYW5kIHN0cmluZyB2YWx1ZSB0byBhcnJheSBvZiB2YWx1ZXNcbiAgICBmb3IgKGNvbnN0IG0gb2Ygam9iRGF0YS5wYXJhbGxlbC5tYXRyaXgpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobSkpIHtcbiAgICAgICAgICAgIG1ba2V5XSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgdmFyaWFibGVzIGluIHdoaWxlIGxvb3AgYnkgZXhwYW5kaW5nIHRoZSBtYXRyaXhcbiAgICBjb25zdCBkZWVwID0gZGVlcEV4dGVuZCh7fSwgam9iRGF0YSk7XG4gICAgZm9yIChjb25zdCBtIG9mIGRlZXAucGFyYWxsZWwubWF0cml4KSB7XG4gICAgICAgIGxldCBpID0gMDtcblxuICAgICAgICBsZXQgaW5uZXIgPSBbXTtcbiAgICAgICAgd2hpbGUgKE9iamVjdC5rZXlzKG0pLmxlbmd0aCA+IDAgJiYgaSA8IDEwMCkge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG0pO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5c1swXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IG1ba2V5XTtcbiAgICAgICAgICAgIGRlbGV0ZSBtW2tleV07XG5cbiAgICAgICAgICAgIGNvbnN0IGlubmVyQ2xvbmUgPSBpbm5lci5sZW5ndGggPiAwID8gWy4uLmlubmVyXSA6IFt7fV07XG4gICAgICAgICAgICBpbm5lciA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNsb25lIG9mIGlubmVyQ2xvbmUpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdHJpeFZhcmlhYmxlOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSA9IHsuLi5jbG9uZX07XG4gICAgICAgICAgICAgICAgICAgIG1hdHJpeFZhcmlhYmxlW2tleV0gPSB2O1xuICAgICAgICAgICAgICAgICAgICBpbm5lci5wdXNoKG1hdHJpeFZhcmlhYmxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgbWF0cml4VmFyaWFibGVzLnB1c2goLi4uaW5uZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRyaXhWYXJpYWJsZXM7XG59XG4iXX0=
|
package/src/parser-includes.js
CHANGED
|
@@ -53,7 +53,7 @@ class ParserIncludes {
|
|
|
53
53
|
for (const value of include) {
|
|
54
54
|
if (value["rules"]) {
|
|
55
55
|
const include_rules = value["rules"];
|
|
56
|
-
const rulesResult = utils_1.Utils.getRulesResult({ cwd, rules: include_rules, variables: opts.variables });
|
|
56
|
+
const rulesResult = utils_1.Utils.getRulesResult({ cwd, rules: include_rules, variables: opts.variables }, gitData);
|
|
57
57
|
if (rulesResult.when === "never") {
|
|
58
58
|
continue;
|
|
59
59
|
}
|
|
@@ -83,7 +83,7 @@ class ParserIncludes {
|
|
|
83
83
|
for (const value of include) {
|
|
84
84
|
if (value["rules"]) {
|
|
85
85
|
const include_rules = value["rules"];
|
|
86
|
-
const rulesResult = utils_1.Utils.getRulesResult({ cwd, rules: include_rules, variables: opts.variables });
|
|
86
|
+
const rulesResult = utils_1.Utils.getRulesResult({ cwd, rules: include_rules, variables: opts.variables }, gitData);
|
|
87
87
|
if (rulesResult.when === "never") {
|
|
88
88
|
continue;
|
|
89
89
|
}
|
|
@@ -112,6 +112,25 @@ class ParserIncludes {
|
|
|
112
112
|
includeDatas = includeDatas.concat(await this.init(fileDoc, opts));
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
|
+
else if (value["component"]) {
|
|
116
|
+
const { domain, projectPath, componentName, ref } = this.parseIncludeComponent(value["component"]);
|
|
117
|
+
// converts component to project
|
|
118
|
+
const files = [`${componentName}.yml`, `${componentName}/template.yml`, null];
|
|
119
|
+
for (const f of files) {
|
|
120
|
+
(0, assert_1.default)(f !== null, `This GitLab CI configuration is invalid: component: \`${value["component"]}\`. One of the file [${files}] must exists in \`${domain}/${projectPath}\``);
|
|
121
|
+
if (!(await utils_1.Utils.remoteFileExist(f, ref, domain, projectPath, gitData.remote.schema)))
|
|
122
|
+
continue;
|
|
123
|
+
const fileDoc = {
|
|
124
|
+
include: {
|
|
125
|
+
project: projectPath,
|
|
126
|
+
file: f,
|
|
127
|
+
ref: ref,
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
includeDatas = includeDatas.concat(await this.init(fileDoc, opts));
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
115
134
|
else if (value["template"]) {
|
|
116
135
|
const { project, ref, file, domain } = this.covertTemplateToProjectFile(value["template"]);
|
|
117
136
|
const fsUrl = utils_1.Utils.fsUrl(`https://${domain}/${project}/-/raw/${ref}/${file}`);
|
|
@@ -164,6 +183,20 @@ class ParserIncludes {
|
|
|
164
183
|
file: `lib/gitlab/ci/templates/${template}`,
|
|
165
184
|
};
|
|
166
185
|
}
|
|
186
|
+
static parseIncludeComponent(component) {
|
|
187
|
+
(0, assert_1.default)(!component.includes("://"), `This GitLab CI configuration is invalid: component: \`${component}\` should not contain protocol`);
|
|
188
|
+
// eslint-disable-next-line no-useless-escape
|
|
189
|
+
const pattern = /(?<domain>[^/\s]+)\/(?<projectPath>.+)\/(?<componentName>[^@]+)@(?<ref>.+)/; // regexr.com/7v7hm
|
|
190
|
+
const gitRemoteMatch = pattern.exec(component);
|
|
191
|
+
if (gitRemoteMatch?.groups == null)
|
|
192
|
+
throw new Error(`This is a bug, please create a github issue if this is something you're expecting to work. input: ${component}`);
|
|
193
|
+
return {
|
|
194
|
+
domain: gitRemoteMatch.groups["domain"],
|
|
195
|
+
projectPath: gitRemoteMatch.groups["projectPath"],
|
|
196
|
+
componentName: `templates/${gitRemoteMatch.groups["componentName"]}`,
|
|
197
|
+
ref: gitRemoteMatch.groups["ref"],
|
|
198
|
+
};
|
|
199
|
+
}
|
|
167
200
|
static async downloadIncludeRemote(cwd, stateDir, url, fetchIncludes) {
|
|
168
201
|
const fsUrl = utils_1.Utils.fsUrl(url);
|
|
169
202
|
try {
|
|
@@ -189,7 +222,7 @@ class ParserIncludes {
|
|
|
189
222
|
await fs_extra_1.default.mkdirp(path_1.default.dirname(`${cwd}/${target}/${normalizedFile}`));
|
|
190
223
|
await utils_1.Utils.bash(`
|
|
191
224
|
cd ${cwd}/${stateDir} \\
|
|
192
|
-
&& git clone -n --depth=1 --filter=tree:0 \\
|
|
225
|
+
&& git clone --branch "${ref}" -n --depth=1 --filter=tree:0 \\
|
|
193
226
|
${remote.schema}://${remote.host}/${project}.git \\
|
|
194
227
|
${cwd}/${target}.${ext} \\
|
|
195
228
|
&& cd ${cwd}/${target}.${ext} \\
|
|
@@ -215,4 +248,4 @@ function validateIncludeLocal(filePath) {
|
|
|
215
248
|
(0, assert_1.default)(!filePath.startsWith("./"), `\`${filePath}\` for include:local is invalid. Gitlab does not support relative path (ie. cannot start with \`./\`).`);
|
|
216
249
|
(0, assert_1.default)(!filePath.includes(".."), `\`${filePath}\` for include:local is invalid. Gitlab does not support directory traversal.`);
|
|
217
250
|
}
|
|
218
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLWluY2x1ZGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGFyc2VyLWluY2x1ZGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbUNBQThCO0FBQzlCLHdEQUEwQjtBQUcxQixpREFBOEM7QUFDOUMsa0RBQTBCO0FBQzFCLHFDQUFnQztBQUNoQyxrREFBMEI7QUFDMUIsb0RBQTRCO0FBQzVCLGdEQUF3QjtBQVl4QixNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsQ0FBQyxrR0FBa0c7QUFFL0gsTUFBYSxjQUFjO0lBQ2YsTUFBTSxDQUFDLEtBQUssR0FBVyxDQUFDLENBQUM7SUFFakMsTUFBTSxDQUFDLFVBQVU7UUFDYixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUUsVUFBZSxFQUFFLElBQStCO1FBQy9ELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUEsZ0JBQU0sRUFDRixJQUFJLENBQUMsS0FBSyxJQUFJLGVBQWUsR0FBRyxDQUFDLEVBQUUsK0JBQStCO1FBQ2xFLElBQUEsZUFBSyxFQUFBLG1FQUFtRSxlQUFlLGlDQUFpQyxDQUMzSCxDQUFDO1FBQ0YsSUFBSSxZQUFZLEdBQVUsRUFBRSxDQUFDO1FBQzdCLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNwQixNQUFNLEVBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBQyxHQUFHLElBQUksQ0FBQztRQUV0RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXhFLHlFQUF5RTtRQUN6RSxLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzFCLElBQUks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Q0FBQztnQkFDSixNQUFNLGtCQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQ3BDLE1BQU0sYUFBSyxDQUFDLElBQUksQ0FBQyxxREFBcUQsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLE9BQU8sUUFBUSxHQUFHLElBQUksY0FBYyxtQkFBbUIsTUFBTSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDL0ssQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1QsTUFBTSxJQUFJLHVCQUFjLENBQUMsRUFBQyxPQUFPLEVBQUUsbURBQW1ELE9BQU8sVUFBVSxHQUFHLFdBQVcsY0FBYyxPQUFPLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQztRQUNwSixDQUFDO0lBQ0wsQ0FBQzs7QUF4TEwsd0NBeUxDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBRSxRQUFnQjtJQUMzQyxJQUFBLGdCQUFNLEVBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssUUFBUSx3R0FBd0csQ0FBQyxDQUFDO0lBQzFKLElBQUEsZ0JBQU0sRUFBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxRQUFRLCtFQUErRSxDQUFDLENBQUM7QUFDbkksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VXRpbHN9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQge1dyaXRlU3RyZWFtc30gZnJvbSBcIi4vd3JpdGUtc3RyZWFtc1wiO1xuaW1wb3J0IHtHaXREYXRhfSBmcm9tIFwiLi9naXQtZGF0YVwiO1xuaW1wb3J0IGFzc2VydCwge0Fzc2VydGlvbkVycm9yfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQge1BhcnNlcn0gZnJvbSBcIi4vcGFyc2VyXCI7XG5pbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQgZ2xvYmJ5IGZyb20gXCJnbG9iYnlcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbnR5cGUgUGFyc2VySW5jbHVkZXNJbml0T3B0aW9ucyA9IHtcbiAgICBjd2Q6IHN0cmluZztcbiAgICBzdGF0ZURpcjogc3RyaW5nO1xuICAgIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zO1xuICAgIGdpdERhdGE6IEdpdERhdGE7XG4gICAgZmV0Y2hJbmNsdWRlczogYm9vbGVhbjtcbiAgICB2YXJpYWJsZXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xuICAgIGV4cGFuZFZhcmlhYmxlczogYm9vbGVhbjtcbn07XG5cbmNvbnN0IE1BWElNVU1fSU5DTFVERSA9IDE1MDsgLy8gaHR0cHM6Ly9kb2NzLmdpdGxhYi5jb20vZWUvYWRtaW5pc3RyYXRpb24vc2V0dGluZ3MvY29udGludW91c19pbnRlZ3JhdGlvbi5odG1sI21heGltdW0taW5jbHVkZXNcblxuZXhwb3J0IGNsYXNzIFBhcnNlckluY2x1ZGVzIHtcbiAgICBwcml2YXRlIHN0YXRpYyBjb3VudDogbnVtYmVyID0gMDtcblxuICAgIHN0YXRpYyByZXNldENvdW50ICgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb3VudCA9IDA7XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGluaXQgKGdpdGxhYkRhdGE6IGFueSwgb3B0czogUGFyc2VySW5jbHVkZXNJbml0T3B0aW9ucyk6IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgdGhpcy5jb3VudCsrO1xuICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgICB0aGlzLmNvdW50IDw9IE1BWElNVU1fSU5DTFVERSArIDEsIC8vIDFzdCBpbml0IGNhbGwgaXMgbm90IGNvdW50ZWRcbiAgICAgICAgICAgIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogTWF4aW11bSBvZiB7Ymx1ZUJyaWdodCAke01BWElNVU1fSU5DTFVERX19IG5lc3RlZCBpbmNsdWRlcyBhcmUgYWxsb3dlZCEuYFxuICAgICAgICApO1xuICAgICAgICBsZXQgaW5jbHVkZURhdGFzOiBhbnlbXSA9IFtdO1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICBjb25zdCB7c3RhdGVEaXIsIGN3ZCwgZmV0Y2hJbmNsdWRlcywgZ2l0RGF0YSwgZXhwYW5kVmFyaWFibGVzfSA9IG9wdHM7XG5cbiAgICAgICAgY29uc3QgaW5jbHVkZSA9IHRoaXMuZXhwYW5kSW5jbHVkZShnaXRsYWJEYXRhPy5pbmNsdWRlLCBvcHRzLnZhcmlhYmxlcyk7XG5cbiAgICAgICAgLy8gRmluZCBmaWxlcyB0byBmZXRjaCBmcm9tIHJlbW90ZSBhbmQgcGxhY2UgaW4gLmdpdGxhYi1jaS1sb2NhbC9pbmNsdWRlc1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGluY2x1ZGUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZVtcInJ1bGVzXCJdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5jbHVkZV9ydWxlcyA9IHZhbHVlW1wicnVsZXNcIl07XG4gICAgICAgICAgICAgICAgY29uc3QgcnVsZXNSZXN1bHQgPSBVdGlscy5nZXRSdWxlc1Jlc3VsdCh7Y3dkLCBydWxlczogaW5jbHVkZV9ydWxlcywgdmFyaWFibGVzOiBvcHRzLnZhcmlhYmxlc30pO1xuICAgICAgICAgICAgICAgIGlmIChydWxlc1Jlc3VsdC53aGVuID09PSBcIm5ldmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlW1wibG9jYWxcIl0pIHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZUluY2x1ZGVMb2NhbCh2YWx1ZVtcImxvY2FsXCJdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGdsb2JieSh2YWx1ZVtcImxvY2FsXCJdLnJlcGxhY2UoL15cXC8vLCBcIlwiKSwge2RvdDogdHJ1ZSwgY3dkfSk7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcih7bWVzc2FnZTogYExvY2FsIGluY2x1ZGUgZmlsZSBjYW5ub3QgYmUgZm91bmQgJHt2YWx1ZVtcImxvY2FsXCJdfWB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW1wiZmlsZVwiXSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmlsZVZhbHVlIG9mIEFycmF5LmlzQXJyYXkodmFsdWVbXCJmaWxlXCJdKSA/IHZhbHVlW1wiZmlsZVwiXSA6IFt2YWx1ZVtcImZpbGVcIl1dKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5kb3dubG9hZEluY2x1ZGVQcm9qZWN0RmlsZShjd2QsIHN0YXRlRGlyLCB2YWx1ZVtcInByb2plY3RcIl0sIHZhbHVlW1wicmVmXCJdIHx8IFwiSEVBRFwiLCBmaWxlVmFsdWUsIGdpdERhdGEsIGZldGNoSW5jbHVkZXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW1widGVtcGxhdGVcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7cHJvamVjdCwgcmVmLCBmaWxlLCBkb21haW59ID0gdGhpcy5jb3ZlcnRUZW1wbGF0ZVRvUHJvamVjdEZpbGUodmFsdWVbXCJ0ZW1wbGF0ZVwiXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsID0gYGh0dHBzOi8vJHtkb21haW59LyR7cHJvamVjdH0vLS9yYXcvJHtyZWZ9LyR7ZmlsZX1gO1xuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5kb3dubG9hZEluY2x1ZGVSZW1vdGUoY3dkLCBzdGF0ZURpciwgdXJsLCBmZXRjaEluY2x1ZGVzKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW1wicmVtb3RlXCJdKSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLmRvd25sb2FkSW5jbHVkZVJlbW90ZShjd2QsIHN0YXRlRGlyLCB2YWx1ZVtcInJlbW90ZVwiXSwgZmV0Y2hJbmNsdWRlcykpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBpbmNsdWRlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWVbXCJydWxlc1wiXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluY2x1ZGVfcnVsZXMgPSB2YWx1ZVtcInJ1bGVzXCJdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ1bGVzUmVzdWx0ID0gVXRpbHMuZ2V0UnVsZXNSZXN1bHQoe2N3ZCwgcnVsZXM6IGluY2x1ZGVfcnVsZXMsIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXN9KTtcbiAgICAgICAgICAgICAgICBpZiAocnVsZXNSZXN1bHQud2hlbiA9PT0gXCJuZXZlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZVtcImxvY2FsXCJdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBnbG9iYnkoW3ZhbHVlW1wibG9jYWxcIl0ucmVwbGFjZSgvXlxcLy8sIFwiXCIpXSwge2RvdDogdHJ1ZSwgY3dkfSk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBsb2NhbEZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IFBhcnNlci5sb2FkWWFtbChgJHtjd2R9LyR7bG9jYWxGaWxlfWAsIHtpbnB1dHM6IHZhbHVlLmlucHV0cyB8fCB7fX0sIGV4cGFuZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGVEYXRhcyA9IGluY2x1ZGVEYXRhcy5jb25jYXQoYXdhaXQgdGhpcy5pbml0KGNvbnRlbnQsIG9wdHMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW1wicHJvamVjdFwiXSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmlsZVZhbHVlIG9mIEFycmF5LmlzQXJyYXkodmFsdWVbXCJmaWxlXCJdKSA/IHZhbHVlW1wiZmlsZVwiXSA6IFt2YWx1ZVtcImZpbGVcIl1dKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVEb2MgPSBhd2FpdCBQYXJzZXIubG9hZFlhbWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtjd2R9LyR7c3RhdGVEaXJ9L2luY2x1ZGVzLyR7Z2l0RGF0YS5yZW1vdGUuaG9zdH0vJHt2YWx1ZVtcInByb2plY3RcIl19LyR7dmFsdWVbXCJyZWZcIl0gfHwgXCJIRUFEXCJ9LyR7ZmlsZVZhbHVlfWBcbiAgICAgICAgICAgICAgICAgICAgICAgICwge2lucHV0czogdmFsdWUuaW5wdXRzIHx8IHt9fVxuICAgICAgICAgICAgICAgICAgICAgICAgLCBleHBhbmRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBFeHBhbmQgbG9jYWwgaW5jbHVkZXMgaW5zaWRlIGEgXCJwcm9qZWN0XCItbGlrZSBpbmNsdWRlXG4gICAgICAgICAgICAgICAgICAgIGZpbGVEb2NbXCJpbmNsdWRlXCJdID0gdGhpcy5leHBhbmRJbmNsdWRlKGZpbGVEb2NbXCJpbmNsdWRlXCJdLCBvcHRzLnZhcmlhYmxlcyk7XG4gICAgICAgICAgICAgICAgICAgIGZpbGVEb2NbXCJpbmNsdWRlXCJdLmZvckVhY2goKGlubmVyOiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbm5lcltcImxvY2FsXCJdKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlRG9jW1wiaW5jbHVkZVwiXVtpXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0OiB2YWx1ZVtcInByb2plY3RcIl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTogaW5uZXJbXCJsb2NhbFwiXS5yZXBsYWNlKC9eXFwvLywgXCJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmOiB2YWx1ZVtcInJlZlwiXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGVEYXRhcyA9IGluY2x1ZGVEYXRhcy5jb25jYXQoYXdhaXQgdGhpcy5pbml0KGZpbGVEb2MsIG9wdHMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW1widGVtcGxhdGVcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7cHJvamVjdCwgcmVmLCBmaWxlLCBkb21haW59ID0gdGhpcy5jb3ZlcnRUZW1wbGF0ZVRvUHJvamVjdEZpbGUodmFsdWVbXCJ0ZW1wbGF0ZVwiXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZnNVcmwgPSBVdGlscy5mc1VybChgaHR0cHM6Ly8ke2RvbWFpbn0vJHtwcm9qZWN0fS8tL3Jhdy8ke3JlZn0vJHtmaWxlfWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVEb2MgPSBhd2FpdCBQYXJzZXIubG9hZFlhbWwoXG4gICAgICAgICAgICAgICAgICAgIGAke2N3ZH0vJHtzdGF0ZURpcn0vaW5jbHVkZXMvJHtmc1VybH1gLCB7aW5wdXRzOiB2YWx1ZS5pbnB1dHMgfHwge319LCBleHBhbmRWYXJpYWJsZXNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGluY2x1ZGVEYXRhcyA9IGluY2x1ZGVEYXRhcy5jb25jYXQoYXdhaXQgdGhpcy5pbml0KGZpbGVEb2MsIG9wdHMpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJyZW1vdGVcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmc1VybCA9IFV0aWxzLmZzVXJsKHZhbHVlW1wicmVtb3RlXCJdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlRG9jID0gYXdhaXQgUGFyc2VyLmxvYWRZYW1sKFxuICAgICAgICAgICAgICAgICAgICBgJHtjd2R9LyR7c3RhdGVEaXJ9L2luY2x1ZGVzLyR7ZnNVcmx9YCwge2lucHV0czogdmFsdWUuaW5wdXRzIHx8IHt9fSwgZXhwYW5kVmFyaWFibGVzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpbmNsdWRlRGF0YXMgPSBpbmNsdWRlRGF0YXMuY29uY2F0KGF3YWl0IHRoaXMuaW5pdChmaWxlRG9jLCBvcHRzKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcih7bWVzc2FnZTogYERpZG4ndCB1bmRlcnN0YW5kIGluY2x1ZGUgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW5jbHVkZURhdGFzLnB1c2goZ2l0bGFiRGF0YSk7XG4gICAgICAgIHJldHVybiBpbmNsdWRlRGF0YXM7XG4gICAgfVxuXG4gICAgc3RhdGljIGV4cGFuZEluY2x1ZGUgKGk6IGFueSwgdmFyaWFibGVzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSk6IGFueVtdIHtcbiAgICAgICAgbGV0IGluY2x1ZGUgPSBpIHx8IFtdO1xuICAgICAgICBpZiAoaW5jbHVkZSAmJiBpbmNsdWRlLmxlbmd0aCA9PSBudWxsKSB7XG4gICAgICAgICAgICBpbmNsdWRlID0gWyBpIF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBpbmNsdWRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBpbmNsdWRlID0gW2luY2x1ZGVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIGVudHJ5XSBvZiBPYmplY3QuZW50cmllcyhpbmNsdWRlKSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIiAmJiAoZW50cnkuc3RhcnRzV2l0aChcImh0dHBzOlwiKSB8fCBlbnRyeS5zdGFydHNXaXRoKFwiaHR0cDpcIikpKSB7XG4gICAgICAgICAgICAgICAgaW5jbHVkZVtpbmRleF0gPSB7XCJyZW1vdGVcIjogZW50cnl9O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW50cnkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBpbmNsdWRlW2luZGV4XSA9IHtcImxvY2FsXCI6IGVudHJ5fTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5jbHVkZVtpbmRleF0gPSBlbnRyeTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBpbmNsdWRlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbnRyeSkpIHtcbiAgICAgICAgICAgICAgICBlbnRyeVtrZXldID0gVXRpbHMuZXhwYW5kVGV4dCh2YWx1ZSwgdmFyaWFibGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbmNsdWRlO1xuICAgIH1cblxuICAgIHN0YXRpYyBjb3ZlcnRUZW1wbGF0ZVRvUHJvamVjdEZpbGUgKHRlbXBsYXRlOiBzdHJpbmcpOiB7cHJvamVjdDogc3RyaW5nOyByZWY6IHN0cmluZzsgZmlsZTogc3RyaW5nOyBkb21haW46IHN0cmluZ30ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZG9tYWluOiBcImdpdGxhYi5jb21cIixcbiAgICAgICAgICAgIHByb2plY3Q6IFwiZ2l0bGFiLW9yZy9naXRsYWJcIixcbiAgICAgICAgICAgIHJlZjogXCJIRUFEXCIsXG4gICAgICAgICAgICBmaWxlOiBgbGliL2dpdGxhYi9jaS90ZW1wbGF0ZXMvJHt0ZW1wbGF0ZX1gLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBkb3dubG9hZEluY2x1ZGVSZW1vdGUgKGN3ZDogc3RyaW5nLCBzdGF0ZURpcjogc3RyaW5nLCB1cmw6IHN0cmluZywgZmV0Y2hJbmNsdWRlczogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBmc1VybCA9IFV0aWxzLmZzVXJsKHVybCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBgJHtjd2R9LyR7c3RhdGVEaXJ9L2luY2x1ZGVzLyR7ZnNVcmx9YDtcbiAgICAgICAgICAgIGlmIChhd2FpdCBmcy5wYXRoRXhpc3RzKHRhcmdldCkgJiYgIWZldGNoSW5jbHVkZXMpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGF4aW9zLmdldCh1cmwpO1xuICAgICAgICAgICAgYXdhaXQgZnMub3V0cHV0RmlsZSh0YXJnZXQsIHJlcy5kYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKHttZXNzYWdlOiBgUmVtb3RlIGluY2x1ZGUgY291bGQgbm90IGJlIGZldGNoZWQgJHt1cmx9XFxuJHtlfWB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBkb3dubG9hZEluY2x1ZGVQcm9qZWN0RmlsZSAoY3dkOiBzdHJpbmcsIHN0YXRlRGlyOiBzdHJpbmcsIHByb2plY3Q6IHN0cmluZywgcmVmOiBzdHJpbmcsIGZpbGU6IHN0cmluZywgZ2l0RGF0YTogR2l0RGF0YSwgZmV0Y2hJbmNsdWRlczogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCByZW1vdGUgPSBnaXREYXRhLnJlbW90ZTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEZpbGUgPSBmaWxlLnJlcGxhY2UoL15cXC8rLywgXCJcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBgJHtzdGF0ZURpcn0vaW5jbHVkZXMvJHtyZW1vdGUuaG9zdH0vJHtwcm9qZWN0fS8ke3JlZn1gO1xuICAgICAgICAgICAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHMoYCR7Y3dkfS8ke3RhcmdldH0vJHtub3JtYWxpemVkRmlsZX1gKSAmJiAhZmV0Y2hJbmNsdWRlcykgcmV0dXJuO1xuXG4gICAgICAgICAgICBpZiAocmVtb3RlLnNjaGVtYS5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4dCA9IFwidG1wLVwiICsgTWF0aC5yYW5kb20oKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5ta2RpcnAocGF0aC5kaXJuYW1lKGAke2N3ZH0vJHt0YXJnZXR9LyR7bm9ybWFsaXplZEZpbGV9YCkpO1xuICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLmJhc2goYFxuICAgICAgICAgICAgICAgICAgICBjZCAke2N3ZH0vJHtzdGF0ZURpcn0gXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgZ2l0IGNsb25lIC1uIC0tZGVwdGg9MSAtLWZpbHRlcj10cmVlOjAgXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3JlbW90ZS5zY2hlbWF9Oi8vJHtyZW1vdGUuaG9zdH0vJHtwcm9qZWN0fS5naXQgXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2N3ZH0vJHt0YXJnZXR9LiR7ZXh0fSBcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBjZCAke2N3ZH0vJHt0YXJnZXR9LiR7ZXh0fSBcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBnaXQgc3BhcnNlLWNoZWNrb3V0IHNldCAtLW5vLWNvbmUgJHtub3JtYWxpemVkRmlsZX0gXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgZ2l0IGNoZWNrb3V0IFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGNkICR7Y3dkfS8ke3N0YXRlRGlyfSBcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBjcCAke2N3ZH0vJHt0YXJnZXR9LiR7ZXh0fS8ke25vcm1hbGl6ZWRGaWxlfSBcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2N3ZH0vJHt0YXJnZXR9LyR7bm9ybWFsaXplZEZpbGV9XG4gICAgICAgICAgICAgICAgICAgIGAsIGN3ZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IGZzLm1rZGlycChgJHtjd2R9LyR7dGFyZ2V0fWApO1xuICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLmJhc2goYHNldCAtZW91IHBpcGVmYWlsOyBnaXQgYXJjaGl2ZSAtLXJlbW90ZT1zc2g6Ly9naXRAJHtyZW1vdGUuaG9zdH06JHtyZW1vdGUucG9ydH0vJHtwcm9qZWN0fS5naXQgJHtyZWZ9ICR7bm9ybWFsaXplZEZpbGV9IHwgdGFyIC1mIC0gLXhDICR7dGFyZ2V0fS9gLCBjd2QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3Ioe21lc3NhZ2U6IGBQcm9qZWN0IGluY2x1ZGUgY291bGQgbm90IGJlIGZldGNoZWQgeyBwcm9qZWN0OiAke3Byb2plY3R9LCByZWY6ICR7cmVmfSwgZmlsZTogJHtub3JtYWxpemVkRmlsZX0gfVxcbiR7ZX1gfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSW5jbHVkZUxvY2FsIChmaWxlUGF0aDogc3RyaW5nKSB7XG4gICAgYXNzZXJ0KCFmaWxlUGF0aC5zdGFydHNXaXRoKFwiLi9cIiksIGBcXGAke2ZpbGVQYXRofVxcYCBmb3IgaW5jbHVkZTpsb2NhbCBpcyBpbnZhbGlkLiBHaXRsYWIgZG9lcyBub3Qgc3VwcG9ydCByZWxhdGl2ZSBwYXRoIChpZS4gY2Fubm90IHN0YXJ0IHdpdGggXFxgLi9cXGApLmApO1xuICAgIGFzc2VydCghZmlsZVBhdGguaW5jbHVkZXMoXCIuLlwiKSwgYFxcYCR7ZmlsZVBhdGh9XFxgIGZvciBpbmNsdWRlOmxvY2FsIGlzIGludmFsaWQuIEdpdGxhYiBkb2VzIG5vdCBzdXBwb3J0IGRpcmVjdG9yeSB0cmF2ZXJzYWwuYCk7XG59XG4iXX0=
|
|
251
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLWluY2x1ZGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGFyc2VyLWluY2x1ZGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbUNBQThCO0FBQzlCLHdEQUEwQjtBQUcxQixpREFBOEM7QUFDOUMsa0RBQTBCO0FBQzFCLHFDQUFnQztBQUNoQyxrREFBMEI7QUFDMUIsb0RBQTRCO0FBQzVCLGdEQUF3QjtBQVl4QixNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsQ0FBQyxrR0FBa0c7QUFFL0gsTUFBYSxjQUFjO0lBQ2YsTUFBTSxDQUFDLEtBQUssR0FBVyxDQUFDLENBQUM7SUFFakMsTUFBTSxDQUFDLFVBQVU7UUFDYixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUUsVUFBZSxFQUFFLElBQStCO1FBQy9ELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUEsZ0JBQU0sRUFDRixJQUFJLENBQUMsS0FBSyxJQUFJLGVBQWUsR0FBRyxDQUFDLEVBQUUsK0JBQStCO1FBQ2xFLElBQUEsZUFBSyxFQUFBLG1FQUFtRSxlQUFlLGlDQUFpQyxDQUMzSCxDQUFDO1FBQ0YsSUFBSSxZQUFZLEdBQVUsRUFBRSxDQUFDO1FBQzdCLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNwQixNQUFNLEVBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBQyxHQUFHLElBQUksQ0FBQztRQUV0RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXhFLHlFQUF5RTtRQUN6RSxLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzFCLElBQUks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LElBQUEsZ0JBQU0sRUFBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxRQUFRLHdHQUF3RyxDQUFDLENBQUM7SUFDMUosSUFBQSxnQkFBTSxFQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFFBQVEsK0VBQStFLENBQUMsQ0FBQztBQUNuSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtVdGlsc30gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCB7V3JpdGVTdHJlYW1zfSBmcm9tIFwiLi93cml0ZS1zdHJlYW1zXCI7XG5pbXBvcnQge0dpdERhdGF9IGZyb20gXCIuL2dpdC1kYXRhXCI7XG5pbXBvcnQgYXNzZXJ0LCB7QXNzZXJ0aW9uRXJyb3J9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7UGFyc2VyfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCBnbG9iYnkgZnJvbSBcImdsb2JieVwiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxudHlwZSBQYXJzZXJJbmNsdWRlc0luaXRPcHRpb25zID0ge1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIHN0YXRlRGlyOiBzdHJpbmc7XG4gICAgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXM7XG4gICAgZ2l0RGF0YTogR2l0RGF0YTtcbiAgICBmZXRjaEluY2x1ZGVzOiBib29sZWFuO1xuICAgIHZhcmlhYmxlczoge1trZXk6IHN0cmluZ106IHN0cmluZ307XG4gICAgZXhwYW5kVmFyaWFibGVzOiBib29sZWFuO1xufTtcblxuY29uc3QgTUFYSU1VTV9JTkNMVURFID0gMTUwOyAvLyBodHRwczovL2RvY3MuZ2l0bGFiLmNvbS9lZS9hZG1pbmlzdHJhdGlvbi9zZXR0aW5ncy9jb250aW51b3VzX2ludGVncmF0aW9uLmh0bWwjbWF4aW11bS1pbmNsdWRlc1xuXG5leHBvcnQgY2xhc3MgUGFyc2VySW5jbHVkZXMge1xuICAgIHByaXZhdGUgc3RhdGljIGNvdW50OiBudW1iZXIgPSAwO1xuXG4gICAgc3RhdGljIHJlc2V0Q291bnQgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvdW50ID0gMDtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgaW5pdCAoZ2l0bGFiRGF0YTogYW55LCBvcHRzOiBQYXJzZXJJbmNsdWRlc0luaXRPcHRpb25zKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgICAgICB0aGlzLmNvdW50Kys7XG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICAgIHRoaXMuY291bnQgPD0gTUFYSU1VTV9JTkNMVURFICsgMSwgLy8gMXN0IGluaXQgY2FsbCBpcyBub3QgY291bnRlZFxuICAgICAgICAgICAgY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBNYXhpbXVtIG9mIHtibHVlQnJpZ2h0ICR7TUFYSU1VTV9JTkNMVURFfX0gbmVzdGVkIGluY2x1ZGVzIGFyZSBhbGxvd2VkIS5gXG4gICAgICAgICk7XG4gICAgICAgIGxldCBpbmNsdWRlRGF0YXM6IGFueVtdID0gW107XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgIGNvbnN0IHtzdGF0ZURpciwgY3dkLCBmZXRjaEluY2x1ZGVzLCBnaXREYXRhLCBleHBhbmRWYXJpYWJsZXN9ID0gb3B0cztcblxuICAgICAgICBjb25zdCBpbmNsdWRlID0gdGhpcy5leHBhbmRJbmNsdWRlKGdpdGxhYkRhdGE/LmluY2x1ZGUsIG9wdHMudmFyaWFibGVzKTtcblxuICAgICAgICAvLyBGaW5kIGZpbGVzIHRvIGZldGNoIGZyb20gcmVtb3RlIGFuZCBwbGFjZSBpbiAuZ2l0bGFiLWNpLWxvY2FsL2luY2x1ZGVzXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgaW5jbHVkZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlW1wicnVsZXNcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmNsdWRlX3J1bGVzID0gdmFsdWVbXCJydWxlc1wiXTtcbiAgICAgICAgICAgICAgICBjb25zdCBydWxlc1Jlc3VsdCA9IFV0aWxzLmdldFJ1bGVzUmVzdWx0KHtjd2QsIHJ1bGVzOiBpbmNsdWRlX3J1bGVzLCB2YXJpYWJsZXM6IG9wdHMudmFyaWFibGVzfSwgZ2l0RGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGVzUmVzdWx0LndoZW4gPT09IFwibmV2ZXJcIikge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWVbXCJsb2NhbFwiXSkge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlSW5jbHVkZUxvY2FsKHZhbHVlW1wibG9jYWxcIl0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZ2xvYmJ5KHZhbHVlW1wibG9jYWxcIl0ucmVwbGFjZSgvXlxcLy8sIFwiXCIpLCB7ZG90OiB0cnVlLCBjd2R9KTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKHttZXNzYWdlOiBgTG9jYWwgaW5jbHVkZSBmaWxlIGNhbm5vdCBiZSBmb3VuZCAke3ZhbHVlW1wibG9jYWxcIl19YH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJmaWxlXCJdKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWxlVmFsdWUgb2YgQXJyYXkuaXNBcnJheSh2YWx1ZVtcImZpbGVcIl0pID8gdmFsdWVbXCJmaWxlXCJdIDogW3ZhbHVlW1wiZmlsZVwiXV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLmRvd25sb2FkSW5jbHVkZVByb2plY3RGaWxlKGN3ZCwgc3RhdGVEaXIsIHZhbHVlW1wicHJvamVjdFwiXSwgdmFsdWVbXCJyZWZcIl0gfHwgXCJIRUFEXCIsIGZpbGVWYWx1ZSwgZ2l0RGF0YSwgZmV0Y2hJbmNsdWRlcykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJ0ZW1wbGF0ZVwiXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHtwcm9qZWN0LCByZWYsIGZpbGUsIGRvbWFpbn0gPSB0aGlzLmNvdmVydFRlbXBsYXRlVG9Qcm9qZWN0RmlsZSh2YWx1ZVtcInRlbXBsYXRlXCJdKTtcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBgaHR0cHM6Ly8ke2RvbWFpbn0vJHtwcm9qZWN0fS8tL3Jhdy8ke3JlZn0vJHtmaWxlfWA7XG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLmRvd25sb2FkSW5jbHVkZVJlbW90ZShjd2QsIHN0YXRlRGlyLCB1cmwsIGZldGNoSW5jbHVkZXMpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJyZW1vdGVcIl0pIHtcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuZG93bmxvYWRJbmNsdWRlUmVtb3RlKGN3ZCwgc3RhdGVEaXIsIHZhbHVlW1wicmVtb3RlXCJdLCBmZXRjaEluY2x1ZGVzKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGluY2x1ZGUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZVtcInJ1bGVzXCJdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5jbHVkZV9ydWxlcyA9IHZhbHVlW1wicnVsZXNcIl07XG4gICAgICAgICAgICAgICAgY29uc3QgcnVsZXNSZXN1bHQgPSBVdGlscy5nZXRSdWxlc1Jlc3VsdCh7Y3dkLCBydWxlczogaW5jbHVkZV9ydWxlcywgdmFyaWFibGVzOiBvcHRzLnZhcmlhYmxlc30sIGdpdERhdGEpO1xuICAgICAgICAgICAgICAgIGlmIChydWxlc1Jlc3VsdC53aGVuID09PSBcIm5ldmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlW1wibG9jYWxcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGdsb2JieShbdmFsdWVbXCJsb2NhbFwiXS5yZXBsYWNlKC9eXFwvLywgXCJcIildLCB7ZG90OiB0cnVlLCBjd2R9KTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGxvY2FsRmlsZSBvZiBmaWxlcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgUGFyc2VyLmxvYWRZYW1sKGAke2N3ZH0vJHtsb2NhbEZpbGV9YCwge2lucHV0czogdmFsdWUuaW5wdXRzIHx8IHt9fSwgZXhwYW5kVmFyaWFibGVzKTtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZURhdGFzID0gaW5jbHVkZURhdGFzLmNvbmNhdChhd2FpdCB0aGlzLmluaXQoY29udGVudCwgb3B0cykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJwcm9qZWN0XCJdKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWxlVmFsdWUgb2YgQXJyYXkuaXNBcnJheSh2YWx1ZVtcImZpbGVcIl0pID8gdmFsdWVbXCJmaWxlXCJdIDogW3ZhbHVlW1wiZmlsZVwiXV0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZURvYyA9IGF3YWl0IFBhcnNlci5sb2FkWWFtbChcbiAgICAgICAgICAgICAgICAgICAgICAgIGAke2N3ZH0vJHtzdGF0ZURpcn0vaW5jbHVkZXMvJHtnaXREYXRhLnJlbW90ZS5ob3N0fS8ke3ZhbHVlW1wicHJvamVjdFwiXX0vJHt2YWx1ZVtcInJlZlwiXSB8fCBcIkhFQURcIn0vJHtmaWxlVmFsdWV9YFxuICAgICAgICAgICAgICAgICAgICAgICAgLCB7aW5wdXRzOiB2YWx1ZS5pbnB1dHMgfHwge319XG4gICAgICAgICAgICAgICAgICAgICAgICAsIGV4cGFuZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4cGFuZCBsb2NhbCBpbmNsdWRlcyBpbnNpZGUgYSBcInByb2plY3RcIi1saWtlIGluY2x1ZGVcbiAgICAgICAgICAgICAgICAgICAgZmlsZURvY1tcImluY2x1ZGVcIl0gPSB0aGlzLmV4cGFuZEluY2x1ZGUoZmlsZURvY1tcImluY2x1ZGVcIl0sIG9wdHMudmFyaWFibGVzKTtcbiAgICAgICAgICAgICAgICAgICAgZmlsZURvY1tcImluY2x1ZGVcIl0uZm9yRWFjaCgoaW5uZXI6IGFueSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlubmVyW1wibG9jYWxcIl0pIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVEb2NbXCJpbmNsdWRlXCJdW2ldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3Q6IHZhbHVlW1wicHJvamVjdFwiXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOiBpbm5lcltcImxvY2FsXCJdLnJlcGxhY2UoL15cXC8vLCBcIlwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWY6IHZhbHVlW1wicmVmXCJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZURhdGFzID0gaW5jbHVkZURhdGFzLmNvbmNhdChhd2FpdCB0aGlzLmluaXQoZmlsZURvYywgb3B0cykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJjb21wb25lbnRcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7ZG9tYWluLCBwcm9qZWN0UGF0aCwgY29tcG9uZW50TmFtZSwgcmVmfSA9IHRoaXMucGFyc2VJbmNsdWRlQ29tcG9uZW50KHZhbHVlW1wiY29tcG9uZW50XCJdKTtcbiAgICAgICAgICAgICAgICAvLyBjb252ZXJ0cyBjb21wb25lbnQgdG8gcHJvamVjdFxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW2Ake2NvbXBvbmVudE5hbWV9LnltbGAsIGAke2NvbXBvbmVudE5hbWV9L3RlbXBsYXRlLnltbGAsIG51bGxdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZiBvZiBmaWxlcykge1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZiAhPT0gbnVsbCwgYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogY29tcG9uZW50OiBcXGAke3ZhbHVlW1wiY29tcG9uZW50XCJdfVxcYC4gT25lIG9mIHRoZSBmaWxlIFske2ZpbGVzfV0gbXVzdCBleGlzdHMgaW4gXFxgJHtkb21haW59LyR7cHJvamVjdFBhdGh9XFxgYCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGF3YWl0IFV0aWxzLnJlbW90ZUZpbGVFeGlzdChmLCByZWYsIGRvbWFpbiwgcHJvamVjdFBhdGgsIGdpdERhdGEucmVtb3RlLnNjaGVtYSkpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZURvYyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0OiBwcm9qZWN0UGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOiBmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZjogcmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZURhdGFzID0gaW5jbHVkZURhdGFzLmNvbmNhdChhd2FpdCB0aGlzLmluaXQoZmlsZURvYywgb3B0cykpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW1widGVtcGxhdGVcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7cHJvamVjdCwgcmVmLCBmaWxlLCBkb21haW59ID0gdGhpcy5jb3ZlcnRUZW1wbGF0ZVRvUHJvamVjdEZpbGUodmFsdWVbXCJ0ZW1wbGF0ZVwiXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZnNVcmwgPSBVdGlscy5mc1VybChgaHR0cHM6Ly8ke2RvbWFpbn0vJHtwcm9qZWN0fS8tL3Jhdy8ke3JlZn0vJHtmaWxlfWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVEb2MgPSBhd2FpdCBQYXJzZXIubG9hZFlhbWwoXG4gICAgICAgICAgICAgICAgICAgIGAke2N3ZH0vJHtzdGF0ZURpcn0vaW5jbHVkZXMvJHtmc1VybH1gLCB7aW5wdXRzOiB2YWx1ZS5pbnB1dHMgfHwge319LCBleHBhbmRWYXJpYWJsZXNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGluY2x1ZGVEYXRhcyA9IGluY2x1ZGVEYXRhcy5jb25jYXQoYXdhaXQgdGhpcy5pbml0KGZpbGVEb2MsIG9wdHMpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJyZW1vdGVcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmc1VybCA9IFV0aWxzLmZzVXJsKHZhbHVlW1wicmVtb3RlXCJdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlRG9jID0gYXdhaXQgUGFyc2VyLmxvYWRZYW1sKFxuICAgICAgICAgICAgICAgICAgICBgJHtjd2R9LyR7c3RhdGVEaXJ9L2luY2x1ZGVzLyR7ZnNVcmx9YCwge2lucHV0czogdmFsdWUuaW5wdXRzIHx8IHt9fSwgZXhwYW5kVmFyaWFibGVzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpbmNsdWRlRGF0YXMgPSBpbmNsdWRlRGF0YXMuY29uY2F0KGF3YWl0IHRoaXMuaW5pdChmaWxlRG9jLCBvcHRzKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcih7bWVzc2FnZTogYERpZG4ndCB1bmRlcnN0YW5kIGluY2x1ZGUgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW5jbHVkZURhdGFzLnB1c2goZ2l0bGFiRGF0YSk7XG4gICAgICAgIHJldHVybiBpbmNsdWRlRGF0YXM7XG4gICAgfVxuXG4gICAgc3RhdGljIGV4cGFuZEluY2x1ZGUgKGk6IGFueSwgdmFyaWFibGVzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSk6IGFueVtdIHtcbiAgICAgICAgbGV0IGluY2x1ZGUgPSBpIHx8IFtdO1xuICAgICAgICBpZiAoaW5jbHVkZSAmJiBpbmNsdWRlLmxlbmd0aCA9PSBudWxsKSB7XG4gICAgICAgICAgICBpbmNsdWRlID0gWyBpIF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBpbmNsdWRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBpbmNsdWRlID0gW2luY2x1ZGVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIGVudHJ5XSBvZiBPYmplY3QuZW50cmllcyhpbmNsdWRlKSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIiAmJiAoZW50cnkuc3RhcnRzV2l0aChcImh0dHBzOlwiKSB8fCBlbnRyeS5zdGFydHNXaXRoKFwiaHR0cDpcIikpKSB7XG4gICAgICAgICAgICAgICAgaW5jbHVkZVtpbmRleF0gPSB7XCJyZW1vdGVcIjogZW50cnl9O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW50cnkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBpbmNsdWRlW2luZGV4XSA9IHtcImxvY2FsXCI6IGVudHJ5fTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5jbHVkZVtpbmRleF0gPSBlbnRyeTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBpbmNsdWRlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbnRyeSkpIHtcbiAgICAgICAgICAgICAgICBlbnRyeVtrZXldID0gVXRpbHMuZXhwYW5kVGV4dCh2YWx1ZSwgdmFyaWFibGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbmNsdWRlO1xuICAgIH1cblxuICAgIHN0YXRpYyBjb3ZlcnRUZW1wbGF0ZVRvUHJvamVjdEZpbGUgKHRlbXBsYXRlOiBzdHJpbmcpOiB7cHJvamVjdDogc3RyaW5nOyByZWY6IHN0cmluZzsgZmlsZTogc3RyaW5nOyBkb21haW46IHN0cmluZ30ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZG9tYWluOiBcImdpdGxhYi5jb21cIixcbiAgICAgICAgICAgIHByb2plY3Q6IFwiZ2l0bGFiLW9yZy9naXRsYWJcIixcbiAgICAgICAgICAgIHJlZjogXCJIRUFEXCIsXG4gICAgICAgICAgICBmaWxlOiBgbGliL2dpdGxhYi9jaS90ZW1wbGF0ZXMvJHt0ZW1wbGF0ZX1gLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZUluY2x1ZGVDb21wb25lbnQgKGNvbXBvbmVudDogc3RyaW5nKToge2RvbWFpbjogc3RyaW5nOyBwcm9qZWN0UGF0aDogc3RyaW5nOyBjb21wb25lbnROYW1lOiBzdHJpbmc7IHJlZjogc3RyaW5nfSB7XG4gICAgICAgIGFzc2VydCghY29tcG9uZW50LmluY2x1ZGVzKFwiOi8vXCIpLCBgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBjb21wb25lbnQ6IFxcYCR7Y29tcG9uZW50fVxcYCBzaG91bGQgbm90IGNvbnRhaW4gcHJvdG9jb2xgKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSAvKD88ZG9tYWluPlteL1xcc10rKVxcLyg/PHByb2plY3RQYXRoPi4rKVxcLyg/PGNvbXBvbmVudE5hbWU+W15AXSspQCg/PHJlZj4uKykvOyAvLyByZWdleHIuY29tLzd2N2htXG4gICAgICAgIGNvbnN0IGdpdFJlbW90ZU1hdGNoID0gcGF0dGVybi5leGVjKGNvbXBvbmVudCk7XG5cbiAgICAgICAgaWYgKGdpdFJlbW90ZU1hdGNoPy5ncm91cHMgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKGBUaGlzIGlzIGEgYnVnLCBwbGVhc2UgY3JlYXRlIGEgZ2l0aHViIGlzc3VlIGlmIHRoaXMgaXMgc29tZXRoaW5nIHlvdSdyZSBleHBlY3RpbmcgdG8gd29yay4gaW5wdXQ6ICR7Y29tcG9uZW50fWApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZG9tYWluOiBnaXRSZW1vdGVNYXRjaC5ncm91cHNbXCJkb21haW5cIl0sXG4gICAgICAgICAgICBwcm9qZWN0UGF0aDogZ2l0UmVtb3RlTWF0Y2guZ3JvdXBzW1wicHJvamVjdFBhdGhcIl0sXG4gICAgICAgICAgICBjb21wb25lbnROYW1lOiBgdGVtcGxhdGVzLyR7Z2l0UmVtb3RlTWF0Y2guZ3JvdXBzW1wiY29tcG9uZW50TmFtZVwiXX1gLFxuICAgICAgICAgICAgcmVmOiBnaXRSZW1vdGVNYXRjaC5ncm91cHNbXCJyZWZcIl0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGRvd25sb2FkSW5jbHVkZVJlbW90ZSAoY3dkOiBzdHJpbmcsIHN0YXRlRGlyOiBzdHJpbmcsIHVybDogc3RyaW5nLCBmZXRjaEluY2x1ZGVzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGZzVXJsID0gVXRpbHMuZnNVcmwodXJsKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGAke2N3ZH0vJHtzdGF0ZURpcn0vaW5jbHVkZXMvJHtmc1VybH1gO1xuICAgICAgICAgICAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHModGFyZ2V0KSAmJiAhZmV0Y2hJbmNsdWRlcykgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgYXhpb3MuZ2V0KHVybCk7XG4gICAgICAgICAgICBhd2FpdCBmcy5vdXRwdXRGaWxlKHRhcmdldCwgcmVzLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3Ioe21lc3NhZ2U6IGBSZW1vdGUgaW5jbHVkZSBjb3VsZCBub3QgYmUgZmV0Y2hlZCAke3VybH1cXG4ke2V9YH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGRvd25sb2FkSW5jbHVkZVByb2plY3RGaWxlIChjd2Q6IHN0cmluZywgc3RhdGVEaXI6IHN0cmluZywgcHJvamVjdDogc3RyaW5nLCByZWY6IHN0cmluZywgZmlsZTogc3RyaW5nLCBnaXREYXRhOiBHaXREYXRhLCBmZXRjaEluY2x1ZGVzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHJlbW90ZSA9IGdpdERhdGEucmVtb3RlO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkRmlsZSA9IGZpbGUucmVwbGFjZSgvXlxcLysvLCBcIlwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGAke3N0YXRlRGlyfS9pbmNsdWRlcy8ke3JlbW90ZS5ob3N0fS8ke3Byb2plY3R9LyR7cmVmfWA7XG4gICAgICAgICAgICBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyhgJHtjd2R9LyR7dGFyZ2V0fS8ke25vcm1hbGl6ZWRGaWxlfWApICYmICFmZXRjaEluY2x1ZGVzKSByZXR1cm47XG5cbiAgICAgICAgICAgIGlmIChyZW1vdGUuc2NoZW1hLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXh0ID0gXCJ0bXAtXCIgKyBNYXRoLnJhbmRvbSgpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGZzLm1rZGlycChwYXRoLmRpcm5hbWUoYCR7Y3dkfS8ke3RhcmdldH0vJHtub3JtYWxpemVkRmlsZX1gKSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgVXRpbHMuYmFzaChgXG4gICAgICAgICAgICAgICAgICAgIGNkICR7Y3dkfS8ke3N0YXRlRGlyfSBcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBnaXQgY2xvbmUgLS1icmFuY2ggXCIke3JlZn1cIiAtbiAtLWRlcHRoPTEgLS1maWx0ZXI9dHJlZTowIFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtyZW1vdGUuc2NoZW1hfTovLyR7cmVtb3RlLmhvc3R9LyR7cHJvamVjdH0uZ2l0IFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjd2R9LyR7dGFyZ2V0fS4ke2V4dH0gXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgY2QgJHtjd2R9LyR7dGFyZ2V0fS4ke2V4dH0gXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgZ2l0IHNwYXJzZS1jaGVja291dCBzZXQgLS1uby1jb25lICR7bm9ybWFsaXplZEZpbGV9IFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGdpdCBjaGVja291dCBcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBjZCAke2N3ZH0vJHtzdGF0ZURpcn0gXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgY3AgJHtjd2R9LyR7dGFyZ2V0fS4ke2V4dH0vJHtub3JtYWxpemVkRmlsZX0gXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjd2R9LyR7dGFyZ2V0fS8ke25vcm1hbGl6ZWRGaWxlfVxuICAgICAgICAgICAgICAgICAgICBgLCBjd2QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5ta2RpcnAoYCR7Y3dkfS8ke3RhcmdldH1gKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5iYXNoKGBzZXQgLWVvdSBwaXBlZmFpbDsgZ2l0IGFyY2hpdmUgLS1yZW1vdGU9c3NoOi8vZ2l0QCR7cmVtb3RlLmhvc3R9OiR7cmVtb3RlLnBvcnR9LyR7cHJvamVjdH0uZ2l0ICR7cmVmfSAke25vcm1hbGl6ZWRGaWxlfSB8IHRhciAtZiAtIC14QyAke3RhcmdldH0vYCwgY3dkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKHttZXNzYWdlOiBgUHJvamVjdCBpbmNsdWRlIGNvdWxkIG5vdCBiZSBmZXRjaGVkIHsgcHJvamVjdDogJHtwcm9qZWN0fSwgcmVmOiAke3JlZn0sIGZpbGU6ICR7bm9ybWFsaXplZEZpbGV9IH1cXG4ke2V9YH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUluY2x1ZGVMb2NhbCAoZmlsZVBhdGg6IHN0cmluZykge1xuICAgIGFzc2VydCghZmlsZVBhdGguc3RhcnRzV2l0aChcIi4vXCIpLCBgXFxgJHtmaWxlUGF0aH1cXGAgZm9yIGluY2x1ZGU6bG9jYWwgaXMgaW52YWxpZC4gR2l0bGFiIGRvZXMgbm90IHN1cHBvcnQgcmVsYXRpdmUgcGF0aCAoaWUuIGNhbm5vdCBzdGFydCB3aXRoIFxcYC4vXFxgKS5gKTtcbiAgICBhc3NlcnQoIWZpbGVQYXRoLmluY2x1ZGVzKFwiLi5cIiksIGBcXGAke2ZpbGVQYXRofVxcYCBmb3IgaW5jbHVkZTpsb2NhbCBpcyBpbnZhbGlkLiBHaXRsYWIgZG9lcyBub3Qgc3VwcG9ydCBkaXJlY3RvcnkgdHJhdmVyc2FsLmApO1xufVxuIl19
|
package/src/parser.js
CHANGED
|
@@ -82,7 +82,7 @@ class Parser {
|
|
|
82
82
|
writeStreams.stderr((0, chalk_1.default) `{yellow ${warning}}\n`);
|
|
83
83
|
}
|
|
84
84
|
// # Second layer of check for errors that are not caught in Validator.run
|
|
85
|
-
if (parser.argv.
|
|
85
|
+
if (parser.argv.jsonSchemaValidation) {
|
|
86
86
|
const time = process.hrtime();
|
|
87
87
|
validator_1.Validator.jsonSchemaValidation(parser.gitlabData);
|
|
88
88
|
writeStreams.stderr((0, chalk_1.default) `{grey json schema validated} in {grey ${(0, pretty_hrtime_1.default)(process.hrtime(time))}}\n`);
|
|
@@ -149,12 +149,15 @@ class Parser {
|
|
|
149
149
|
(0, assert_1.default)(gitData != null, "gitData must be set");
|
|
150
150
|
(0, assert_1.default)(variablesFromFiles != null, "homeVariables must be set");
|
|
151
151
|
let nodeIndex = 1;
|
|
152
|
-
const parallelMatrixVariablesList = parallel.matrixVariablesList(jobData, jobName)
|
|
152
|
+
const parallelMatrixVariablesList = parallel.matrixVariablesList(jobData, jobName);
|
|
153
153
|
for (const parallelMatrixVariables of parallelMatrixVariablesList) {
|
|
154
154
|
let matrixJobName = jobName;
|
|
155
155
|
if (parallelMatrixVariables) {
|
|
156
156
|
matrixJobName = `${jobName}: [${Object.values(parallelMatrixVariables ?? []).join(",")}]`;
|
|
157
157
|
}
|
|
158
|
+
else if (parallel.isPlainParallel(jobData)) {
|
|
159
|
+
matrixJobName = `${jobName}: [${nodeIndex}/${parallelMatrixVariablesList.length}]`;
|
|
160
|
+
}
|
|
158
161
|
const job = new job_1.Job({
|
|
159
162
|
argv,
|
|
160
163
|
writeStreams,
|
|
@@ -167,7 +170,7 @@ class Parser {
|
|
|
167
170
|
gitData,
|
|
168
171
|
variablesFromFiles,
|
|
169
172
|
matrixVariables: parallelMatrixVariables,
|
|
170
|
-
nodeIndex:
|
|
173
|
+
nodeIndex: (jobData.parallel != null) ? nodeIndex : null,
|
|
171
174
|
nodesTotal: parallelMatrixVariablesList.length,
|
|
172
175
|
expandVariables: this.expandVariables,
|
|
173
176
|
});
|
|
@@ -341,4 +344,4 @@ function validateInput(inputValue, ctx) {
|
|
|
341
344
|
console.log((0, chalk_1.default) `{black.bgYellowBright WARN } spec:inputs:regex is currently not supported via gitlab-ci-local. This will just be a no-op.`);
|
|
342
345
|
}
|
|
343
346
|
}
|
|
344
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0RBQTBCO0FBQzFCLGdEQUF3QjtBQUN4Qiw4REFBcUM7QUFDckMsNkNBQStCO0FBQy9CLDhDQUFnQztBQUNoQyxrRUFBeUM7QUFDekMsK0JBQTBCO0FBQzFCLDhEQUFnRDtBQUNoRCxtQ0FBOEI7QUFDOUIsb0RBQTRCO0FBQzVCLDJDQUFzQztBQUN0QyxxREFBdUM7QUFDdkMseUNBQW1DO0FBQ25DLHVEQUFpRDtBQUNqRCwyQ0FBc0M7QUFDdEMsaUVBQTBEO0FBRzFELGlFQUF1RTtBQUV2RSxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDeEIsTUFBTSw4QkFBOEIsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFFdkUsTUFBYSxNQUFNO0lBRVAsT0FBTyxHQUFhLEVBQUUsQ0FBQztJQUN2QixXQUFXLENBQU07SUFDakIsV0FBVyxHQUFrQixJQUFJLENBQUM7SUFFakMsSUFBSSxDQUFRO0lBQ1osSUFBSSxDQUFPO0lBQ1gsWUFBWSxDQUFlO0lBQzNCLFdBQVcsQ0FBUztJQUNwQixlQUFlLENBQVU7SUFFbEMsWUFBcUIsSUFBVSxFQUFFLFlBQTBCLEVBQUUsV0FBbUIsRUFBRSxJQUFXLEVBQUUsZUFBd0I7UUFDbkgsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4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QUFDO0lBQzdMLElBQUEsZ0JBQU0sRUFBQyxPQUFPLFVBQVUsSUFBSSxJQUFJLEVBQzVCLElBQUEsZUFBSyxFQUFBLDBEQUEwRCxjQUFjLHNCQUFzQixnQkFBZ0Isa0RBQWtELElBQUksSUFBSSxDQUFDLENBQUM7SUFFbkwsTUFBTSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUN2RSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFBLGVBQUssRUFBQSw0SEFBNEgsQ0FBQyxDQUFDO0lBQ25KLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBkZWVwRXh0ZW5kIGZyb20gXCJkZWVwLWV4dGVuZFwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gXCJqcy15YW1sXCI7XG5pbXBvcnQgcHJldHR5SHJ0aW1lIGZyb20gXCJwcmV0dHktaHJ0aW1lXCI7XG5pbXBvcnQge0pvYn0gZnJvbSBcIi4vam9iXCI7XG5pbXBvcnQgKiBhcyBEYXRhRXhwYW5kZXIgZnJvbSBcIi4vZGF0YS1leHBhbmRlclwiO1xuaW1wb3J0IHtVdGlsc30gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHtWYWxpZGF0b3J9IGZyb20gXCIuL3ZhbGlkYXRvclwiO1xuaW1wb3J0ICogYXMgcGFyYWxsZWwgZnJvbSBcIi4vcGFyYWxsZWxcIjtcbmltcG9ydCB7R2l0RGF0YX0gZnJvbSBcIi4vZ2l0LWRhdGFcIjtcbmltcG9ydCB7UGFyc2VySW5jbHVkZXN9IGZyb20gXCIuL3BhcnNlci1pbmNsdWRlc1wiO1xuaW1wb3J0IHtQcm9kdWNlcnN9IGZyb20gXCIuL3Byb2R1Y2Vyc1wiO1xuaW1wb3J0IHtWYXJpYWJsZXNGcm9tRmlsZXN9IGZyb20gXCIuL3ZhcmlhYmxlcy1mcm9tLWZpbGVzXCI7XG5pbXBvcnQge0FyZ3Z9IGZyb20gXCIuL2FyZ3ZcIjtcbmltcG9ydCB7V3JpdGVTdHJlYW1zfSBmcm9tIFwiLi93cml0ZS1zdHJlYW1zXCI7XG5pbXBvcnQge2luaXQgYXMgaW5pdFByZWRlZmluZWRWYXJpYWJsZXN9IGZyb20gXCIuL3ByZWRlZmluZWQtdmFyaWFibGVzXCI7XG5cbmNvbnN0IE1BWF9GVU5DVElPTlMgPSAzO1xuY29uc3QgSU5DTFVERV9JTlBVVFNfU1VQUE9SVEVEX1RZUEVTID0gW1wic3RyaW5nXCIsIFwiYm9vbGVhblwiLCBcIm51bWJlclwiXTtcblxuZXhwb3J0IGNsYXNzIFBhcnNlciB7XG5cbiAgICBwcml2YXRlIF9zdGFnZXM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBfZ2l0bGFiRGF0YTogYW55O1xuICAgIHByaXZhdGUgX2pvYk5hbWVQYWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgcmVhZG9ubHkgam9iczogSm9iW107XG4gICAgcmVhZG9ubHkgYXJndjogQXJndjtcbiAgICByZWFkb25seSB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcztcbiAgICByZWFkb25seSBwaXBlbGluZUlpZDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGV4cGFuZFZhcmlhYmxlczogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IgKGFyZ3Y6IEFyZ3YsIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBwaXBlbGluZUlpZDogbnVtYmVyLCBqb2JzOiBKb2JbXSwgZXhwYW5kVmFyaWFibGVzOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuYXJndiA9IGFyZ3Y7XG4gICAgICAgIHRoaXMud3JpdGVTdHJlYW1zID0gd3JpdGVTdHJlYW1zO1xuICAgICAgICB0aGlzLnBpcGVsaW5lSWlkID0gcGlwZWxpbmVJaWQ7XG4gICAgICAgIHRoaXMuam9icyA9IGpvYnM7XG4gICAgICAgIHRoaXMuZXhwYW5kVmFyaWFibGVzID0gZXhwYW5kVmFyaWFibGVzO1xuICAgIH1cblxuICAgIGdldCBzdGFnZXMgKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YWdlcztcbiAgICB9XG5cbiAgICBnZXQgZ2l0bGFiRGF0YSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9naXRsYWJEYXRhO1xuICAgIH1cblxuICAgIGdldCBqb2JOYW1lUGFkICgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fam9iTmFtZVBhZCA/PyAwO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBjcmVhdGUgKGFyZ3Y6IEFyZ3YsIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBwaXBlbGluZUlpZDogbnVtYmVyLCBqb2JzOiBKb2JbXSwgZXhwYW5kVmFyaWFibGVzOiBib29sZWFuID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgUGFyc2VyKGFyZ3YsIHdyaXRlU3RyZWFtcywgcGlwZWxpbmVJaWQsIGpvYnMsIGV4cGFuZFZhcmlhYmxlcyk7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICBhd2FpdCBwYXJzZXIuaW5pdCgpO1xuICAgICAgICBjb25zdCB3YXJuaW5ncyA9IGF3YWl0IFZhbGlkYXRvci5ydW4ocGFyc2VyLmpvYnMsIHBhcnNlci5zdGFnZXMpO1xuICAgICAgICBjb25zdCBwYXJzaW5nVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHtncmV5IHBhcnNpbmcgYW5kIGRvd25sb2FkcyBmaW5pc2hlZH0gaW4ge2dyZXkgJHtwcmV0dHlIcnRpbWUocGFyc2luZ1RpbWUpfX1cXG5gKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHdhcm5pbmcgb2Ygd2FybmluZ3MpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtge3llbGxvdyAke3dhcm5pbmd9fVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gIyBTZWNvbmQgbGF5ZXIgb2YgY2hlY2sgZm9yIGVycm9ycyB0aGF0IGFyZSBub3QgY2F1Z2h0IGluIFZhbGlkYXRvci5ydW5cbiAgICAgICAgaWYgKHBhcnNlci5hcmd2LmVuYWJsZUpzb25TY2hlbWFWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgICAgIFZhbGlkYXRvci5qc29uU2NoZW1hVmFsaWRhdGlvbihwYXJzZXIuZ2l0bGFiRGF0YSk7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHtncmV5IGpzb24gc2NoZW1hIHZhbGlkYXRlZH0gaW4ge2dyZXkgJHtwcmV0dHlIcnRpbWUocHJvY2Vzcy5ocnRpbWUodGltZSkpfX1cXG5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VyO1xuICAgIH1cblxuICAgIGFzeW5jIGluaXQgKCkge1xuICAgICAgICBjb25zdCBhcmd2ID0gdGhpcy5hcmd2O1xuICAgICAgICBjb25zdCBjd2QgPSBhcmd2LmN3ZDtcbiAgICAgICAgY29uc3Qgc3RhdGVEaXIgPSBhcmd2LnN0YXRlRGlyO1xuICAgICAgICBjb25zdCB3cml0ZVN0cmVhbXMgPSB0aGlzLndyaXRlU3RyZWFtcztcbiAgICAgICAgY29uc3QgZmlsZSA9IGFyZ3YuZmlsZTtcbiAgICAgICAgY29uc3QgcGlwZWxpbmVJaWQgPSB0aGlzLnBpcGVsaW5lSWlkO1xuICAgICAgICBjb25zdCBmZXRjaEluY2x1ZGVzID0gYXJndi5mZXRjaEluY2x1ZGVzO1xuICAgICAgICBjb25zdCBnaXREYXRhID0gYXdhaXQgR2l0RGF0YS5pbml0KGN3ZCwgd3JpdGVTdHJlYW1zKTtcbiAgICAgICAgY29uc3QgdmFyaWFibGVzRnJvbUZpbGVzID0gYXdhaXQgVmFyaWFibGVzRnJvbUZpbGVzLmluaXQoYXJndiwgd3JpdGVTdHJlYW1zLCBnaXREYXRhKTtcbiAgICAgICAgY29uc3QgcHJlZGVmaW5lZFZhcmlhYmxlcyA9IGluaXRQcmVkZWZpbmVkVmFyaWFibGVzKHtnaXREYXRhLCBhcmd2fSk7XG4gICAgICAgIGNvbnN0IGVudk1hdGNoZWRWYXJpYWJsZXMgPSBVdGlscy5maW5kRW52TWF0Y2hlZFZhcmlhYmxlcyh2YXJpYWJsZXNGcm9tRmlsZXMpO1xuICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSB7Li4ucHJlZGVmaW5lZFZhcmlhYmxlcywgLi4uZW52TWF0Y2hlZFZhcmlhYmxlcywgLi4uYXJndi52YXJpYWJsZX07XG4gICAgICAgIGNvbnN0IGV4cGFuZGVkID0gVXRpbHMuZXhwYW5kVmFyaWFibGVzKHZhcmlhYmxlcyk7XG5cbiAgICAgICAgbGV0IHlhbWxEYXRhTGlzdDogYW55W10gPSBbe3N0YWdlczogW1wiLnByZVwiLCBcImJ1aWxkXCIsIFwidGVzdFwiLCBcImRlcGxveVwiLCBcIi5wb3N0XCJdfV07XG4gICAgICAgIGNvbnN0IGdpdGxhYkNpRGF0YSA9IGF3YWl0IFBhcnNlci5sb2FkWWFtbChgJHtjd2R9LyR7ZmlsZX1gLCB7fSwgdGhpcy5leHBhbmRWYXJpYWJsZXMpO1xuXG4gICAgICAgIHlhbWxEYXRhTGlzdCA9IHlhbWxEYXRhTGlzdC5jb25jYXQoYXdhaXQgUGFyc2VySW5jbHVkZXMuaW5pdChnaXRsYWJDaURhdGEsIHtjd2QsIHN0YXRlRGlyLCB3cml0ZVN0cmVhbXMsIGdpdERhdGEsIGZldGNoSW5jbHVkZXMsIHZhcmlhYmxlczogZXhwYW5kZWQsIGV4cGFuZFZhcmlhYmxlczogdGhpcy5leHBhbmRWYXJpYWJsZXN9KSk7XG4gICAgICAgIFBhcnNlckluY2x1ZGVzLnJlc2V0Q291bnQoKTtcblxuICAgICAgICBjb25zdCBnaXRsYWJDaUxvY2FsRGF0YSA9IGF3YWl0IFBhcnNlci5sb2FkWWFtbChgJHtjd2R9Ly5naXRsYWItY2ktbG9jYWwueW1sYCwge30sIHRoaXMuZXhwYW5kVmFyaWFibGVzKTtcbiAgICAgICAgeWFtbERhdGFMaXN0ID0geWFtbERhdGFMaXN0LmNvbmNhdChhd2FpdCBQYXJzZXJJbmNsdWRlcy5pbml0KGdpdGxhYkNpTG9jYWxEYXRhLCB7Y3dkLCBzdGF0ZURpciwgd3JpdGVTdHJlYW1zLCBnaXREYXRhLCBmZXRjaEluY2x1ZGVzLCB2YXJpYWJsZXM6IGV4cGFuZGVkLCBleHBhbmRWYXJpYWJsZXM6IHRoaXMuZXhwYW5kVmFyaWFibGVzfSkpO1xuICAgICAgICBQYXJzZXJJbmNsdWRlcy5yZXNldENvdW50KCk7XG5cbiAgICAgICAgY29uc3QgZ2l0bGFiRGF0YTogYW55ID0gZGVlcEV4dGVuZCh7fSwgLi4ueWFtbERhdGFMaXN0KTtcblxuICAgICAgICAvLyBFeHBhbmQgdmFyaW91cyBmaWVsZHMgaW4gZ2l0bGFiRGF0YVxuICAgICAgICBEYXRhRXhwYW5kZXIuam9iRXh0ZW5kcyhnaXRsYWJEYXRhKTtcbiAgICAgICAgRGF0YUV4cGFuZGVyLnJlZmVyZW5jZShnaXRsYWJEYXRhLCBnaXRsYWJEYXRhKTtcbiAgICAgICAgRGF0YUV4cGFuZGVyLmNvbXBsZXhPYmplY3RzKGdpdGxhYkRhdGEpO1xuICAgICAgICBEYXRhRXhwYW5kZXIuZGVmYXVsdHMoZ2l0bGFiRGF0YSk7XG4gICAgICAgIERhdGFFeHBhbmRlci5nbG9iYWxWYXJpYWJsZXMoZ2l0bGFiRGF0YSk7XG4gICAgICAgIERhdGFFeHBhbmRlci5mbGF0dGVuTGlzdHMoZ2l0bGFiRGF0YSk7XG5cbiAgICAgICAgYXNzZXJ0KGdpdGxhYkRhdGEuc3RhZ2VzICYmIEFycmF5LmlzQXJyYXkoZ2l0bGFiRGF0YS5zdGFnZXMpLCBjaGFsa2B7eWVsbG93IHN0YWdlczp9IG11c3QgYmUgYW4gYXJyYXlgKTtcbiAgICAgICAgaWYgKCFnaXRsYWJEYXRhLnN0YWdlcy5pbmNsdWRlcyhcIi5wcmVcIikpIHtcbiAgICAgICAgICAgIGdpdGxhYkRhdGEuc3RhZ2VzLnVuc2hpZnQoXCIucHJlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZ2l0bGFiRGF0YS5zdGFnZXMuaW5jbHVkZXMoXCIucG9zdFwiKSkge1xuICAgICAgICAgICAgZ2l0bGFiRGF0YS5zdGFnZXMucHVzaChcIi5wb3N0XCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3N0YWdlcyA9IGdpdGxhYkRhdGEuc3RhZ2VzO1xuXG4gICAgICAgIC8vIENoZWNrIGpvYiB2YXJpYWJsZXMgZm9yIGludmFsaWQgaGFzaCBvZiBrZXkgdmFsdWUgcGFpcnMsIGFuZCBjYXN0IG51bWJlcnMgdG8gc3RyaW5nc1xuICAgICAgICBVdGlscy5mb3JFYWNoUmVhbEpvYihnaXRsYWJEYXRhLCAoam9iTmFtZSwgam9iRGF0YSkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBfdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGpvYkRhdGEudmFyaWFibGVzIHx8IHt9KSkge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IF92YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHZhbHVlID0gXCJcIjsgLy8gdmFyaWFibGUncyB2YWx1ZXMgYXJlIG51bGxhYmxlXG4gICAgICAgICAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICBjaGFsa2B7Ymx1ZUJyaWdodCAke2pvYk5hbWV9fSBoYXMgaW52YWxpZCB2YXJpYWJsZXMgaGFzaCBvZiBrZXkgdmFsdWUgcGFpcnMuICR7a2V5fT0ke3ZhbHVlfWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGpvYkRhdGEudmFyaWFibGVzW2tleV0gPSBTdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IChqb2JEYXRhLnNlcnZpY2VzID8/IFtdKS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSBqb2JEYXRhLnNlcnZpY2VzW2ldO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNlcnZpY2UudmFyaWFibGVzIHx8IHt9KSkge1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbGtge2JsdWVCcmlnaHQgJHtqb2JOYW1lfS5zZXJ2aWNlc1ske2l9XX0gaGFzIGludmFsaWQgdmFyaWFibGVzIGhhc2ggb2Yga2V5IHZhbHVlIHBhaXJzLiAke2tleX09JHt2YWx1ZX1gXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGpvYkRhdGEuc2VydmljZXNbaV0udmFyaWFibGVzW2tleV0gPSBTdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fZ2l0bGFiRGF0YSA9IGdpdGxhYkRhdGE7XG5cbiAgICAgICAgLy8gR2VuZXJhdGUgam9icyBhbmQgcHV0IHRoZW0gaW50byBzdGFnZXNcbiAgICAgICAgVXRpbHMuZm9yRWFjaFJlYWxKb2IoZ2l0bGFiRGF0YSwgKGpvYk5hbWUsIGpvYkRhdGEpID0+IHtcbiAgICAgICAgICAgIGFzc2VydChnaXREYXRhICE9IG51bGwsIFwiZ2l0RGF0YSBtdXN0IGJlIHNldFwiKTtcbiAgICAgICAgICAgIGFzc2VydCh2YXJpYWJsZXNGcm9tRmlsZXMgIT0gbnVsbCwgXCJob21lVmFyaWFibGVzIG11c3QgYmUgc2V0XCIpO1xuXG4gICAgICAgICAgICBsZXQgbm9kZUluZGV4ID0gMTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFsbGVsTWF0cml4VmFyaWFibGVzTGlzdCA9IHBhcmFsbGVsLm1hdHJpeFZhcmlhYmxlc0xpc3Qoam9iRGF0YSwgam9iTmFtZSkgPz8gW251bGxdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXJhbGxlbE1hdHJpeFZhcmlhYmxlcyBvZiBwYXJhbGxlbE1hdHJpeFZhcmlhYmxlc0xpc3QpIHtcbiAgICAgICAgICAgICAgICBsZXQgbWF0cml4Sm9iTmFtZSA9IGpvYk5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmFsbGVsTWF0cml4VmFyaWFibGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdHJpeEpvYk5hbWUgPSBgJHtqb2JOYW1lfTogWyR7T2JqZWN0LnZhbHVlcyhwYXJhbGxlbE1hdHJpeFZhcmlhYmxlcyA/PyBbXSkuam9pbihcIixcIil9XWA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgam9iID0gbmV3IEpvYih7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3YsXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogam9iRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogbWF0cml4Sm9iTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgYmFzZU5hbWU6IGpvYk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhYmxlczogZ2l0bGFiRGF0YS52YXJpYWJsZXMsXG4gICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lSWlkOiBwaXBlbGluZUlpZCxcbiAgICAgICAgICAgICAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlcyxcbiAgICAgICAgICAgICAgICAgICAgZ2l0RGF0YSxcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzRnJvbUZpbGVzLFxuICAgICAgICAgICAgICAgICAgICBtYXRyaXhWYXJpYWJsZXM6IHBhcmFsbGVsTWF0cml4VmFyaWFibGVzLFxuICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXg6IHBhcmFsbGVsTWF0cml4VmFyaWFibGVzICE9PSBudWxsID8gbm9kZUluZGV4IDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbm9kZXNUb3RhbDogcGFyYWxsZWxNYXRyaXhWYXJpYWJsZXNMaXN0Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgZXhwYW5kVmFyaWFibGVzOiB0aGlzLmV4cGFuZFZhcmlhYmxlcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZFN0YWdlID0gdGhpcy5zdGFnZXMuaW5jbHVkZXMoam9iLnN0YWdlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZm91bmRTdGFnZSwgY2hhbGtge3llbGxvdyBzdGFnZToke2pvYi5zdGFnZX19IG5vdCBmb3VuZCBmb3Ige2JsdWVCcmlnaHQgJHtqb2IubmFtZX19YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5qb2JzLnB1c2goam9iKTtcbiAgICAgICAgICAgICAgICBub2RlSW5kZXgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQWRkIHNvbWUgcGFkZGluZyBzbyB0aGF0IGpvYiBsb2dzIGFyZSBuaWNlbHkgYWxpZ25lZFxuICAgICAgICAvLyBhbGxvdyB1c2VycyB0byBvdmVycmlkZSB0aGlzIGluIGNhc2UgdGhleSBoYXZlIHJlYWxseSBsb25nIGpvYiBuYW1lIChzZWUgIzg0MClcbiAgICAgICAgaWYgKHRoaXMuYXJndi5tYXhKb2JOYW1lUGFkZGluZyAhPT0gbnVsbCAmJiB0aGlzLmFyZ3YubWF4Sm9iTmFtZVBhZGRpbmcgPD0gMCkge1xuICAgICAgICAgICAgdGhpcy5fam9iTmFtZVBhZCA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBqb2JzID0gdGhpcy5hcmd2LmpvYi5sZW5ndGggIT09IDAgPyB0aGlzLmFyZ3Yuam9iIDogdGhpcy5qb2JzO1xuICAgICAgICAgICAgam9icy5mb3JFYWNoKChqb2IpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgam9iTmVlZHNMZW5ndGg6IG51bWJlcltdID0gW107XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hcmd2Lm5lZWRzICYmIHRoaXMuYXJndi5qb2IubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuam9icy5maW5kKGogPT4gai5iYXNlTmFtZSA9PT0gam9iKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kICE9PSB1bmRlZmluZWQgJiYgZm91bmQubmVlZHMgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpvYk5lZWRzTGVuZ3RoID0gZm91bmQubmVlZHMubWFwKGYgPT4gZi5qb2IubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBqb2JMZW5ndGggPSB0eXBlb2Ygam9iID09IFwic3RyaW5nXCIgPyBqb2IubGVuZ3RoIDogam9iLm5hbWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2pvYk5hbWVQYWQgPSBNYXRoLm1heChqb2JMZW5ndGgsIHRoaXMuX2pvYk5hbWVQYWQgPz8gMCwgLi4uam9iTmVlZHNMZW5ndGgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy5hcmd2Lm1heEpvYk5hbWVQYWRkaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fam9iTmFtZVBhZCA9IE1hdGgubWluKHRoaXMuYXJndi5tYXhKb2JOYW1lUGFkZGluZyA/PyAwLCB0aGlzLl9qb2JOYW1lUGFkID8/IDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IGpvYk5hbWVQYWQgb24gYWxsIGpvYnNcbiAgICAgICAgdGhpcy5qb2JzLmZvckVhY2goKGpvYikgPT4ge1xuICAgICAgICAgICAgam9iLmpvYk5hbWVQYWQgPSB0aGlzLmpvYk5hbWVQYWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEdlbmVyYXRlIHByb2R1Y2VycyBmb3IgZWFjaCBqb2JcbiAgICAgICAgdGhpcy5qb2JzLmZvckVhY2goKGpvYikgPT4ge1xuICAgICAgICAgICAgam9iLnByb2R1Y2VycyA9IFByb2R1Y2Vycy5pbml0KHRoaXMuam9icywgdGhpcy5zdGFnZXMsIGpvYik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBsb2FkWWFtbCAoZmlsZVBhdGg6IHN0cmluZywgY3R4OiBhbnkgPSB7fSwgZXhwYW5kVmFyaWFibGVzOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IHltbFBhdGggPSBgJHtmaWxlUGF0aH1gO1xuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoeW1sUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVDb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoYCR7ZmlsZVBhdGh9YCwgXCJ1dGY4XCIpO1xuICAgICAgICBjb25zdCBmaWxlU3BsaXQgPSBmaWxlQ29udGVudC5zcGxpdCgvXFxyP1xcbi9nKTtcbiAgICAgICAgY29uc3QgZmlsZVNwbGl0Q2xvbmUgPSBmaWxlU3BsaXQuc2xpY2UoKTtcblxuICAgICAgICBsZXQgaW50ZXJhY3RpdmVNYXRjaCA9IG51bGw7XG4gICAgICAgIGxldCBkZXNjcmlwdGlvbk1hdGNoID0gbnVsbDtcbiAgICAgICAgbGV0IGluamVjdFNTSEFnZW50ID0gbnVsbDtcbiAgICAgICAgbGV0IG5vQXJ0aWZhY3RzVG9Tb3VyY2VNYXRjaCA9IG51bGw7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGlmIChleHBhbmRWYXJpYWJsZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBmaWxlU3BsaXQpIHtcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZU1hdGNoID0gIWludGVyYWN0aXZlTWF0Y2ggPyAvI1xccz9AXFxzP1tJaV1udGVyYWN0aXZlLy5leGVjKGxpbmUpIDogaW50ZXJhY3RpdmVNYXRjaDtcbiAgICAgICAgICAgICAgICBpbmplY3RTU0hBZ2VudCA9ICFpbmplY3RTU0hBZ2VudCA/IC8jXFxzP0BcXHM/W0lpXW5qZWN0U1NIQWdlbnQvLmV4ZWMobGluZSkgOiBpbmplY3RTU0hBZ2VudDtcbiAgICAgICAgICAgICAgICBub0FydGlmYWN0c1RvU291cmNlTWF0Y2ggPSAhbm9BcnRpZmFjdHNUb1NvdXJjZU1hdGNoID8gLyNcXHM/QFxccz9Ob0FydGlmYWN0c1RvU291cmNlL2kuZXhlYyhsaW5lKSA6IG5vQXJ0aWZhY3RzVG9Tb3VyY2VNYXRjaDtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbk1hdGNoID0gIWRlc2NyaXB0aW9uTWF0Y2ggPyAvI1xccz9AXFxzP1tEZF1lc2NyaXB0aW9uICg/PGRlc2NyaXB0aW9uPi4qKS8uZXhlYyhsaW5lKSA6IGRlc2NyaXB0aW9uTWF0Y2g7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBqb2JNYXRjaCA9IC9cXHc6Ly5leGVjKGxpbmUpO1xuICAgICAgICAgICAgICAgIGlmIChqb2JNYXRjaCAmJiAoaW50ZXJhY3RpdmVNYXRjaCB8fCBkZXNjcmlwdGlvbk1hdGNoIHx8IGluamVjdFNTSEFnZW50IHx8IG5vQXJ0aWZhY3RzVG9Tb3VyY2VNYXRjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGludGVyYWN0aXZlTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVTcGxpdENsb25lLnNwbGljZShpbmRleCArIDEsIDAsIFwiICBnY2xJbnRlcmFjdGl2ZTogdHJ1ZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGluamVjdFNTSEFnZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlU3BsaXRDbG9uZS5zcGxpY2UoaW5kZXggKyAxLCAwLCBcIiAgZ2NsSW5qZWN0U1NIQWdlbnQ6IHRydWVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChub0FydGlmYWN0c1RvU291cmNlTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVTcGxpdENsb25lLnNwbGljZShpbmRleCArIDEsIDAsIFwiICBnY2xBcnRpZmFjdHNUb1NvdXJjZTogZmFsc2VcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbk1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlU3BsaXRDbG9uZS5zcGxpY2UoaW5kZXggKyAxLCAwLCBgICBnY2xEZXNjcmlwdGlvbjogJHtkZXNjcmlwdGlvbk1hdGNoPy5ncm91cHM/LmRlc2NyaXB0aW9uID8/IFwiXCJ9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlTWF0Y2ggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbk1hdGNoID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaW5qZWN0U1NIQWdlbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBub0FydGlmYWN0c1RvU291cmNlTWF0Y2ggPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVmZXJlbmNlVHlwZSA9IG5ldyB5YW1sLlR5cGUoXCIhcmVmZXJlbmNlXCIsIHtcbiAgICAgICAgICAgIGtpbmQ6IFwic2VxdWVuY2VcIixcbiAgICAgICAgICAgIGNvbnN0cnVjdDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge3JlZmVyZW5jZURhdGE6IGRhdGF9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHlhbWwuREVGQVVMVF9TQ0hFTUEuZXh0ZW5kKFtyZWZlcmVuY2VUeXBlXSk7XG4gICAgICAgIGxldCBmaWxlRGF0YTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZmlsZURhdGEgPSB5YW1sLmxvYWRBbGwoZmlsZVNwbGl0Q2xvbmUuam9pbihcIlxcblwiKSwgbnVsbCwge3NjaGVtYX0pIGFzIGFueVtdO1xuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgeWFtbC5ZQU1MRXhjZXB0aW9uICYmIGUucmVhc29uID09PSBcImR1cGxpY2F0ZWQgbWFwcGluZyBrZXlcIikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrYHtibGFjay5iZ1llbGxvd0JyaWdodCAgV0FSTiB9IGR1cGxpY2F0ZWQgbWFwcGluZyBrZXkgZGV0ZWN0ZWQhIFZhbHVlcyB3aWxsIGJlIG92ZXJ3cml0dGVuIWApO1xuICAgICAgICAgICAgICAgIGZpbGVEYXRhID0geWFtbC5sb2FkQWxsKGZpbGVTcGxpdENsb25lLmpvaW4oXCJcXG5cIiksIG51bGwsIHtzY2hlbWEsIGpzb246IHRydWV9KSBhcyBhbnlbXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlRGF0YS5sZW5ndGggPD0gMSkgcmV0dXJuIGZpbGVEYXRhWzBdO1xuXG4gICAgICAgIGlmIChpc0dpdGxhYlNwZWNGaWxlKGZpbGVEYXRhWzBdKSkge1xuICAgICAgICAgICAgY29uc3QgaW5wdXRzU3BlY2lmaWNhdGlvbjogYW55ID0gZmlsZURhdGFbMF07XG4gICAgICAgICAgICBjb25zdCB1bmludGVycG9sYXRlZENvbmZpZ3VyYXRpb25zOiBhbnkgPSBmaWxlRGF0YVsxXTtcblxuICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdGVkQ29uZmlndXJhdGlvbnMgPSBKU09OLnN0cmluZ2lmeSh1bmludGVycG9sYXRlZENvbmZpZ3VyYXRpb25zKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAvXFwkXFxbXFxbXFxzKmlucHV0cy4oPzxpbnRlcnBvbGF0aW9uS2V5PltcXHctXSspXFxzKlxcfD9cXHMqKD88aW50ZXJwb2xhdGlvbkZ1bmN0aW9ucz4uKj8pXFxzKlxcXVxcXS9nIC8vIHJlZ2V4ci5jb20vN3NoMTVcbiAgICAgICAgICAgICAgICAgICAgLCAoXzogc3RyaW5nLCBpbnRlcnBvbGF0aW9uS2V5OiBzdHJpbmcsIGludGVycG9sYXRpb25GdW5jdGlvbnM6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29uZmlnRmlsZVBhdGggPSBwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIGZpbGVQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGlvbktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnBvbGF0aW9uRnVuY3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0c1NwZWNpZmljYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3R4LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVJbnRlcnBvbGF0aW9uS2V5KGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVJbnRlcnBvbGF0aW9uRnVuY3Rpb25zKGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IGdldElucHV0VmFsdWUoY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUlucHV0KGlucHV0VmFsdWUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBqc29uVmFsdWUgPSBKU09OLnN0cmluZ2lmeShpbnB1dFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVucXVvdGUgc3RyaW5nIGlmIG5lY2Vzc2FyeVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZihqc29uVmFsdWUpID09IFwic3RyaW5nXCIgJiYganNvblZhbHVlLnN0YXJ0c1dpdGgoXCJcXFwiXCIpICYmIGpzb25WYWx1ZS5lbmRzV2l0aChcIlxcXCJcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNvblZhbHVlLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc29uVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoaW50ZXJwb2xhdGVkQ29uZmlndXJhdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWxlRGF0YVswXTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGlzR2l0bGFiU3BlY0ZpbGUgKGZpbGVEYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gXCJzcGVjXCIgaW4gZmlsZURhdGE7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSW50ZXJwb2xhdGlvbkZ1bmN0aW9ucyAoY3R4OiBhbnkpIHtcbiAgICBjb25zdCB7aW50ZXJwb2xhdGlvbkZ1bmN0aW9ucywgY29uZmlnRmlsZVBhdGh9ID0gY3R4O1xuICAgIGlmIChpbnRlcnBvbGF0aW9uRnVuY3Rpb25zICE9IFwiXCIpIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGtge2JsYWNrLmJnWWVsbG93QnJpZ2h0ICBXQVJOIH0gaW50ZXJwb2xhdGlvbiBmdW5jdGlvbnMgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgdmlhIGdpdGxhYi1jaS1sb2NhbC4gRnVuY3Rpb25zIHdpbGwganVzdCBiZSBhIG5vLW9wLmApO1xuICAgIH1cbiAgICBhc3NlcnQoaW50ZXJwb2xhdGlvbkZ1bmN0aW9ucy5zcGxpdChcInxcIikubGVuZ3RoIDw9IE1BWF9GVU5DVElPTlMsIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogXFxge2JsdWVCcmlnaHQgJHtjb25maWdGaWxlUGF0aH19XFxgOiB0b28gbWFueSBmdW5jdGlvbnMgaW4gaW50ZXJwb2xhdGlvbiBibG9jay5gKTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5wdXRWYWx1ZSAoY3R4OiBhbnkpIHtcbiAgICBjb25zdCB7aW5wdXRzLCBpbnRlcnBvbGF0aW9uS2V5LCBjb25maWdGaWxlUGF0aCwgaW5wdXRzU3BlY2lmaWNhdGlvbn0gPSBjdHg7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IGlucHV0c1tpbnRlcnBvbGF0aW9uS2V5XSB8fCBpbnB1dHNTcGVjaWZpY2F0aW9uLnNwZWMuaW5wdXRzW2ludGVycG9sYXRpb25LZXldPy5kZWZhdWx0O1xuICAgIGFzc2VydChpbnB1dFZhbHVlICE9PSB1bmRlZmluZWQsIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogXFxge2JsdWVCcmlnaHQgJHtjb25maWdGaWxlUGF0aH19XFxgOiBcXGB7Ymx1ZUJyaWdodCAke2ludGVycG9sYXRpb25LZXl9fVxcYCBpbnB1dDogcmVxdWlyZWQgdmFsdWUgaGFzIG5vdCBiZWVuIHByb3ZpZGVkLmApO1xuICAgIHJldHVybiBpbnB1dFZhbHVlO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUludGVycG9sYXRpb25LZXkgKGN0eDogYW55KTogYW55IHtcbiAgICBjb25zdCB7Y29uZmlnRmlsZVBhdGgsIGludGVycG9sYXRpb25LZXksIGlucHV0c1NwZWNpZmljYXRpb259ID0gY3R4O1xuICAgIGNvbnN0IGludmFsaWRJbnRlcnBvbGF0aW9uS2V5RXJyID0gY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBcXGB7Ymx1ZUJyaWdodCAke2NvbmZpZ0ZpbGVQYXRofX1cXGA6IHVua25vd24gaW50ZXJwb2xhdGlvbiBrZXk6IFxcYCR7aW50ZXJwb2xhdGlvbktleX1cXGAuYDtcbiAgICBhc3NlcnQoaW5wdXRzU3BlY2lmaWNhdGlvbi5zcGVjLmlucHV0cz8uW2ludGVycG9sYXRpb25LZXldICE9PSB1bmRlZmluZWQsIGludmFsaWRJbnRlcnBvbGF0aW9uS2V5RXJyKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJbnB1dCAoaW5wdXRWYWx1ZTogYW55LCBjdHg6IGFueSk6IGFueSB7XG4gICAgY29uc3Qge2NvbmZpZ0ZpbGVQYXRoLCBpbnRlcnBvbGF0aW9uS2V5LCBpbnB1dHNTcGVjaWZpY2F0aW9ufSA9IGN0eDtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSBpbnB1dHNTcGVjaWZpY2F0aW9uLnNwZWMuaW5wdXRzW2ludGVycG9sYXRpb25LZXldPy5vcHRpb25zO1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgIGFzc2VydChvcHRpb25zLmluY2x1ZGVzKGlucHV0VmFsdWUpLFxuICAgICAgICAgICAgY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBcXGB7Ymx1ZUJyaWdodCAke2NvbmZpZ0ZpbGVQYXRofX1cXGA6IFxcYHtibHVlQnJpZ2h0ICR7aW50ZXJwb2xhdGlvbktleX19XFxgIGlucHV0OiBcXGB7Ymx1ZUJyaWdodCAke2lucHV0VmFsdWV9fVxcYCBjYW5ub3QgYmUgdXNlZCBiZWNhdXNlIGl0IGlzIG5vdCBpbiB0aGUgbGlzdCBvZiBhbGxvd2VkIG9wdGlvbnMuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZSA9IGlucHV0c1NwZWNpZmljYXRpb24uc3BlYy5pbnB1dHNbaW50ZXJwb2xhdGlvbktleV0/LnR5cGUgfHwgXCJzdHJpbmdcIjtcbiAgICBhc3NlcnQoSU5DTFVERV9JTlBVVFNfU1VQUE9SVEVEX1RZUEVTLmluY2x1ZGVzKHR5cGUpLFxuICAgICAgICBjaGFsa2BUaGlzIEdpdExhYiBDSSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQ6IFxcYHtibHVlQnJpZ2h0ICR7Y29uZmlnRmlsZVBhdGh9fVxcYDogaGVhZGVyOnNwZWM6aW5wdXRzOntibHVlQnJpZ2h0ICR7aW50ZXJwb2xhdGlvbktleX19IGlucHV0IHR5cGUgdW5rbm93biB2YWx1ZToge2JsdWVCcmlnaHQgJHt0eXBlfX0uYCk7XG4gICAgYXNzZXJ0KHR5cGVvZiBpbnB1dFZhbHVlID09IHR5cGUsXG4gICAgICAgIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogXFxge2JsdWVCcmlnaHQgJHtjb25maWdGaWxlUGF0aH19XFxgOiBcXGB7Ymx1ZUJyaWdodCAke2ludGVycG9sYXRpb25LZXl9fVxcYCBpbnB1dDogcHJvdmlkZWQgdmFsdWUgaXMgbm90IGEge2JsdWVCcmlnaHQgJHt0eXBlfX0uYCk7XG5cbiAgICBjb25zdCByZWdleCA9IGlucHV0c1NwZWNpZmljYXRpb24uc3BlYy5pbnB1dHNbaW50ZXJwb2xhdGlvbktleV0/LnJlZ2V4O1xuICAgIGlmIChyZWdleCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsa2B7YmxhY2suYmdZZWxsb3dCcmlnaHQgIFdBUk4gfSBzcGVjOmlucHV0czpyZWdleCBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCB2aWEgZ2l0bGFiLWNpLWxvY2FsLiBUaGlzIHdpbGwganVzdCBiZSBhIG5vLW9wLmApO1xuICAgIH1cbn1cbiJdfQ==
|
|
347
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0RBQTBCO0FBQzFCLGdEQUF3QjtBQUN4Qiw4REFBcUM7QUFDckMsNkNBQStCO0FBQy9CLDhDQUFnQztBQUNoQyxrRUFBeUM7QUFDekMsK0JBQTBCO0FBQzFCLDhEQUFnRDtBQUNoRCxtQ0FBOEI7QUFDOUIsb0RBQTRCO0FBQzVCLDJDQUFzQztBQUN0QyxxREFBdUM7QUFDdkMseUNBQW1DO0FBQ25DLHVEQUFpRDtBQUNqRCwyQ0FBc0M7QUFDdEMsaUVBQTBEO0FBRzFELGlFQUF1RTtBQUV2RSxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDeEIsTUFBTSw4QkFBOEIsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFFdkUsTUFBYSxNQUFNO0lBRVAsT0FBTyxHQUFhLEVBQUUsQ0FBQztJQUN2QixXQUFXLENBQU07SUFDakIsV0FBVyxHQUFrQixJQUFJLENBQUM7SUFFakMsSUFBSSxDQUFRO0lBQ1osSUFBSSxDQUFPO0lBQ1gsWUFBWSxDQUFlO0lBQzNCLFdBQVcsQ0FBUztJQUNwQixlQUFlLENBQVU7SUFFbEMsWUFBcUIsSUFBVSxFQUFFLFlBQTBCLEVBQUUsV0FBbUIsRUFBRSxJQUFXLEVBQUUsZUFBd0I7UUFDbkgsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4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LENBQUM7SUFDakYsSUFBQSxnQkFBTSxFQUFDLDhCQUE4QixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFDaEQsSUFBQSxlQUFLLEVBQUEsMERBQTBELGNBQWMsdUNBQXVDLGdCQUFnQiwyQ0FBMkMsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUM3TCxJQUFBLGdCQUFNLEVBQUMsT0FBTyxVQUFVLElBQUksSUFBSSxFQUM1QixJQUFBLGVBQUssRUFBQSwwREFBMEQsY0FBYyxzQkFBc0IsZ0JBQWdCLGtEQUFrRCxJQUFJLElBQUksQ0FBQyxDQUFDO0lBRW5MLE1BQU0sS0FBSyxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDdkUsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNSLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBQSxlQUFLLEVBQUEsNEhBQTRILENBQUMsQ0FBQztJQUNuSixDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgZGVlcEV4dGVuZCBmcm9tIFwiZGVlcC1leHRlbmRcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tIFwianMteWFtbFwiO1xuaW1wb3J0IHByZXR0eUhydGltZSBmcm9tIFwicHJldHR5LWhydGltZVwiO1xuaW1wb3J0IHtKb2J9IGZyb20gXCIuL2pvYlwiO1xuaW1wb3J0ICogYXMgRGF0YUV4cGFuZGVyIGZyb20gXCIuL2RhdGEtZXhwYW5kZXJcIjtcbmltcG9ydCB7VXRpbHN9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7VmFsaWRhdG9yfSBmcm9tIFwiLi92YWxpZGF0b3JcIjtcbmltcG9ydCAqIGFzIHBhcmFsbGVsIGZyb20gXCIuL3BhcmFsbGVsXCI7XG5pbXBvcnQge0dpdERhdGF9IGZyb20gXCIuL2dpdC1kYXRhXCI7XG5pbXBvcnQge1BhcnNlckluY2x1ZGVzfSBmcm9tIFwiLi9wYXJzZXItaW5jbHVkZXNcIjtcbmltcG9ydCB7UHJvZHVjZXJzfSBmcm9tIFwiLi9wcm9kdWNlcnNcIjtcbmltcG9ydCB7VmFyaWFibGVzRnJvbUZpbGVzfSBmcm9tIFwiLi92YXJpYWJsZXMtZnJvbS1maWxlc1wiO1xuaW1wb3J0IHtBcmd2fSBmcm9tIFwiLi9hcmd2XCI7XG5pbXBvcnQge1dyaXRlU3RyZWFtc30gZnJvbSBcIi4vd3JpdGUtc3RyZWFtc1wiO1xuaW1wb3J0IHtpbml0IGFzIGluaXRQcmVkZWZpbmVkVmFyaWFibGVzfSBmcm9tIFwiLi9wcmVkZWZpbmVkLXZhcmlhYmxlc1wiO1xuXG5jb25zdCBNQVhfRlVOQ1RJT05TID0gMztcbmNvbnN0IElOQ0xVREVfSU5QVVRTX1NVUFBPUlRFRF9UWVBFUyA9IFtcInN0cmluZ1wiLCBcImJvb2xlYW5cIiwgXCJudW1iZXJcIl07XG5cbmV4cG9ydCBjbGFzcyBQYXJzZXIge1xuXG4gICAgcHJpdmF0ZSBfc3RhZ2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgX2dpdGxhYkRhdGE6IGFueTtcbiAgICBwcml2YXRlIF9qb2JOYW1lUGFkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIHJlYWRvbmx5IGpvYnM6IEpvYltdO1xuICAgIHJlYWRvbmx5IGFyZ3Y6IEFyZ3Y7XG4gICAgcmVhZG9ubHkgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXM7XG4gICAgcmVhZG9ubHkgcGlwZWxpbmVJaWQ6IG51bWJlcjtcbiAgICByZWFkb25seSBleHBhbmRWYXJpYWJsZXM6IGJvb2xlYW47XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yIChhcmd2OiBBcmd2LCB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgcGlwZWxpbmVJaWQ6IG51bWJlciwgam9iczogSm9iW10sIGV4cGFuZFZhcmlhYmxlczogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmFyZ3YgPSBhcmd2O1xuICAgICAgICB0aGlzLndyaXRlU3RyZWFtcyA9IHdyaXRlU3RyZWFtcztcbiAgICAgICAgdGhpcy5waXBlbGluZUlpZCA9IHBpcGVsaW5lSWlkO1xuICAgICAgICB0aGlzLmpvYnMgPSBqb2JzO1xuICAgICAgICB0aGlzLmV4cGFuZFZhcmlhYmxlcyA9IGV4cGFuZFZhcmlhYmxlcztcbiAgICB9XG5cbiAgICBnZXQgc3RhZ2VzICgpOiByZWFkb25seSBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFnZXM7XG4gICAgfVxuXG4gICAgZ2V0IGdpdGxhYkRhdGEgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2l0bGFiRGF0YTtcbiAgICB9XG5cbiAgICBnZXQgam9iTmFtZVBhZCAoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2pvYk5hbWVQYWQgPz8gMDtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgY3JlYXRlIChhcmd2OiBBcmd2LCB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgcGlwZWxpbmVJaWQ6IG51bWJlciwgam9iczogSm9iW10sIGV4cGFuZFZhcmlhYmxlczogYm9vbGVhbiA9IHRydWUpIHtcbiAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcihhcmd2LCB3cml0ZVN0cmVhbXMsIHBpcGVsaW5lSWlkLCBqb2JzLCBleHBhbmRWYXJpYWJsZXMpO1xuICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgYXdhaXQgcGFyc2VyLmluaXQoKTtcbiAgICAgICAgY29uc3Qgd2FybmluZ3MgPSBhd2FpdCBWYWxpZGF0b3IucnVuKHBhcnNlci5qb2JzLCBwYXJzZXIuc3RhZ2VzKTtcbiAgICAgICAgY29uc3QgcGFyc2luZ1RpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcbiAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7Z3JleSBwYXJzaW5nIGFuZCBkb3dubG9hZHMgZmluaXNoZWR9IGluIHtncmV5ICR7cHJldHR5SHJ0aW1lKHBhcnNpbmdUaW1lKX19XFxuYCk7XG5cbiAgICAgICAgZm9yIChjb25zdCB3YXJuaW5nIG9mIHdhcm5pbmdzKSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHt5ZWxsb3cgJHt3YXJuaW5nfX1cXG5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vICMgU2Vjb25kIGxheWVyIG9mIGNoZWNrIGZvciBlcnJvcnMgdGhhdCBhcmUgbm90IGNhdWdodCBpbiBWYWxpZGF0b3IucnVuXG4gICAgICAgIGlmIChwYXJzZXIuYXJndi5qc29uU2NoZW1hVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgICAgICBWYWxpZGF0b3IuanNvblNjaGVtYVZhbGlkYXRpb24ocGFyc2VyLmdpdGxhYkRhdGEpO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7Z3JleSBqc29uIHNjaGVtYSB2YWxpZGF0ZWR9IGluIHtncmV5ICR7cHJldHR5SHJ0aW1lKHByb2Nlc3MuaHJ0aW1lKHRpbWUpKX19XFxuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlcjtcbiAgICB9XG5cbiAgICBhc3luYyBpbml0ICgpIHtcbiAgICAgICAgY29uc3QgYXJndiA9IHRoaXMuYXJndjtcbiAgICAgICAgY29uc3QgY3dkID0gYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gYXJndi5zdGF0ZURpcjtcbiAgICAgICAgY29uc3Qgd3JpdGVTdHJlYW1zID0gdGhpcy53cml0ZVN0cmVhbXM7XG4gICAgICAgIGNvbnN0IGZpbGUgPSBhcmd2LmZpbGU7XG4gICAgICAgIGNvbnN0IHBpcGVsaW5lSWlkID0gdGhpcy5waXBlbGluZUlpZDtcbiAgICAgICAgY29uc3QgZmV0Y2hJbmNsdWRlcyA9IGFyZ3YuZmV0Y2hJbmNsdWRlcztcbiAgICAgICAgY29uc3QgZ2l0RGF0YSA9IGF3YWl0IEdpdERhdGEuaW5pdChjd2QsIHdyaXRlU3RyZWFtcyk7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlc0Zyb21GaWxlcyA9IGF3YWl0IFZhcmlhYmxlc0Zyb21GaWxlcy5pbml0KGFyZ3YsIHdyaXRlU3RyZWFtcywgZ2l0RGF0YSk7XG4gICAgICAgIGNvbnN0IHByZWRlZmluZWRWYXJpYWJsZXMgPSBpbml0UHJlZGVmaW5lZFZhcmlhYmxlcyh7Z2l0RGF0YSwgYXJndn0pO1xuICAgICAgICBjb25zdCBlbnZNYXRjaGVkVmFyaWFibGVzID0gVXRpbHMuZmluZEVudk1hdGNoZWRWYXJpYWJsZXModmFyaWFibGVzRnJvbUZpbGVzKTtcbiAgICAgICAgY29uc3QgdmFyaWFibGVzID0gey4uLnByZWRlZmluZWRWYXJpYWJsZXMsIC4uLmVudk1hdGNoZWRWYXJpYWJsZXMsIC4uLmFyZ3YudmFyaWFibGV9O1xuICAgICAgICBjb25zdCBleHBhbmRlZCA9IFV0aWxzLmV4cGFuZFZhcmlhYmxlcyh2YXJpYWJsZXMpO1xuXG4gICAgICAgIGxldCB5YW1sRGF0YUxpc3Q6IGFueVtdID0gW3tzdGFnZXM6IFtcIi5wcmVcIiwgXCJidWlsZFwiLCBcInRlc3RcIiwgXCJkZXBsb3lcIiwgXCIucG9zdFwiXX1dO1xuICAgICAgICBjb25zdCBnaXRsYWJDaURhdGEgPSBhd2FpdCBQYXJzZXIubG9hZFlhbWwoYCR7Y3dkfS8ke2ZpbGV9YCwge30sIHRoaXMuZXhwYW5kVmFyaWFibGVzKTtcblxuICAgICAgICB5YW1sRGF0YUxpc3QgPSB5YW1sRGF0YUxpc3QuY29uY2F0KGF3YWl0IFBhcnNlckluY2x1ZGVzLmluaXQoZ2l0bGFiQ2lEYXRhLCB7Y3dkLCBzdGF0ZURpciwgd3JpdGVTdHJlYW1zLCBnaXREYXRhLCBmZXRjaEluY2x1ZGVzLCB2YXJpYWJsZXM6IGV4cGFuZGVkLCBleHBhbmRWYXJpYWJsZXM6IHRoaXMuZXhwYW5kVmFyaWFibGVzfSkpO1xuICAgICAgICBQYXJzZXJJbmNsdWRlcy5yZXNldENvdW50KCk7XG5cbiAgICAgICAgY29uc3QgZ2l0bGFiQ2lMb2NhbERhdGEgPSBhd2FpdCBQYXJzZXIubG9hZFlhbWwoYCR7Y3dkfS8uZ2l0bGFiLWNpLWxvY2FsLnltbGAsIHt9LCB0aGlzLmV4cGFuZFZhcmlhYmxlcyk7XG4gICAgICAgIHlhbWxEYXRhTGlzdCA9IHlhbWxEYXRhTGlzdC5jb25jYXQoYXdhaXQgUGFyc2VySW5jbHVkZXMuaW5pdChnaXRsYWJDaUxvY2FsRGF0YSwge2N3ZCwgc3RhdGVEaXIsIHdyaXRlU3RyZWFtcywgZ2l0RGF0YSwgZmV0Y2hJbmNsdWRlcywgdmFyaWFibGVzOiBleHBhbmRlZCwgZXhwYW5kVmFyaWFibGVzOiB0aGlzLmV4cGFuZFZhcmlhYmxlc30pKTtcbiAgICAgICAgUGFyc2VySW5jbHVkZXMucmVzZXRDb3VudCgpO1xuXG4gICAgICAgIGNvbnN0IGdpdGxhYkRhdGE6IGFueSA9IGRlZXBFeHRlbmQoe30sIC4uLnlhbWxEYXRhTGlzdCk7XG5cbiAgICAgICAgLy8gRXhwYW5kIHZhcmlvdXMgZmllbGRzIGluIGdpdGxhYkRhdGFcbiAgICAgICAgRGF0YUV4cGFuZGVyLmpvYkV4dGVuZHMoZ2l0bGFiRGF0YSk7XG4gICAgICAgIERhdGFFeHBhbmRlci5yZWZlcmVuY2UoZ2l0bGFiRGF0YSwgZ2l0bGFiRGF0YSk7XG4gICAgICAgIERhdGFFeHBhbmRlci5jb21wbGV4T2JqZWN0cyhnaXRsYWJEYXRhKTtcbiAgICAgICAgRGF0YUV4cGFuZGVyLmRlZmF1bHRzKGdpdGxhYkRhdGEpO1xuICAgICAgICBEYXRhRXhwYW5kZXIuZ2xvYmFsVmFyaWFibGVzKGdpdGxhYkRhdGEpO1xuICAgICAgICBEYXRhRXhwYW5kZXIuZmxhdHRlbkxpc3RzKGdpdGxhYkRhdGEpO1xuXG4gICAgICAgIGFzc2VydChnaXRsYWJEYXRhLnN0YWdlcyAmJiBBcnJheS5pc0FycmF5KGdpdGxhYkRhdGEuc3RhZ2VzKSwgY2hhbGtge3llbGxvdyBzdGFnZXM6fSBtdXN0IGJlIGFuIGFycmF5YCk7XG4gICAgICAgIGlmICghZ2l0bGFiRGF0YS5zdGFnZXMuaW5jbHVkZXMoXCIucHJlXCIpKSB7XG4gICAgICAgICAgICBnaXRsYWJEYXRhLnN0YWdlcy51bnNoaWZ0KFwiLnByZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWdpdGxhYkRhdGEuc3RhZ2VzLmluY2x1ZGVzKFwiLnBvc3RcIikpIHtcbiAgICAgICAgICAgIGdpdGxhYkRhdGEuc3RhZ2VzLnB1c2goXCIucG9zdFwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zdGFnZXMgPSBnaXRsYWJEYXRhLnN0YWdlcztcblxuICAgICAgICAvLyBDaGVjayBqb2IgdmFyaWFibGVzIGZvciBpbnZhbGlkIGhhc2ggb2Yga2V5IHZhbHVlIHBhaXJzLCBhbmQgY2FzdCBudW1iZXJzIHRvIHN0cmluZ3NcbiAgICAgICAgVXRpbHMuZm9yRWFjaFJlYWxKb2IoZ2l0bGFiRGF0YSwgKGpvYk5hbWUsIGpvYkRhdGEpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgX3ZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhqb2JEYXRhLnZhcmlhYmxlcyB8fCB7fSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBfdmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB2YWx1ZSA9IFwiXCI7IC8vIHZhcmlhYmxlJ3MgdmFsdWVzIGFyZSBudWxsYWJsZVxuICAgICAgICAgICAgICAgIGFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgY2hhbGtge2JsdWVCcmlnaHQgJHtqb2JOYW1lfX0gaGFzIGludmFsaWQgdmFyaWFibGVzIGhhc2ggb2Yga2V5IHZhbHVlIHBhaXJzLiAke2tleX09JHt2YWx1ZX1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBqb2JEYXRhLnZhcmlhYmxlc1trZXldID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAoam9iRGF0YS5zZXJ2aWNlcyA/PyBbXSkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlID0gam9iRGF0YS5zZXJ2aWNlc1tpXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzZXJ2aWNlLnZhcmlhYmxlcyB8fCB7fSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYWxrYHtibHVlQnJpZ2h0ICR7am9iTmFtZX0uc2VydmljZXNbJHtpfV19IGhhcyBpbnZhbGlkIHZhcmlhYmxlcyBoYXNoIG9mIGtleSB2YWx1ZSBwYWlycy4gJHtrZXl9PSR7dmFsdWV9YFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBqb2JEYXRhLnNlcnZpY2VzW2ldLnZhcmlhYmxlc1trZXldID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2dpdGxhYkRhdGEgPSBnaXRsYWJEYXRhO1xuXG4gICAgICAgIC8vIEdlbmVyYXRlIGpvYnMgYW5kIHB1dCB0aGVtIGludG8gc3RhZ2VzXG4gICAgICAgIFV0aWxzLmZvckVhY2hSZWFsSm9iKGdpdGxhYkRhdGEsIChqb2JOYW1lLCBqb2JEYXRhKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnQoZ2l0RGF0YSAhPSBudWxsLCBcImdpdERhdGEgbXVzdCBiZSBzZXRcIik7XG4gICAgICAgICAgICBhc3NlcnQodmFyaWFibGVzRnJvbUZpbGVzICE9IG51bGwsIFwiaG9tZVZhcmlhYmxlcyBtdXN0IGJlIHNldFwiKTtcblxuICAgICAgICAgICAgbGV0IG5vZGVJbmRleCA9IDE7XG4gICAgICAgICAgICBjb25zdCBwYXJhbGxlbE1hdHJpeFZhcmlhYmxlc0xpc3QgPSBwYXJhbGxlbC5tYXRyaXhWYXJpYWJsZXNMaXN0KGpvYkRhdGEsIGpvYk5hbWUpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXJhbGxlbE1hdHJpeFZhcmlhYmxlcyBvZiBwYXJhbGxlbE1hdHJpeFZhcmlhYmxlc0xpc3QpIHtcbiAgICAgICAgICAgICAgICBsZXQgbWF0cml4Sm9iTmFtZSA9IGpvYk5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmFsbGVsTWF0cml4VmFyaWFibGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdHJpeEpvYk5hbWUgPSBgJHtqb2JOYW1lfTogWyR7T2JqZWN0LnZhbHVlcyhwYXJhbGxlbE1hdHJpeFZhcmlhYmxlcyA/PyBbXSkuam9pbihcIixcIil9XWA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbGxlbC5pc1BsYWluUGFyYWxsZWwoam9iRGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0cml4Sm9iTmFtZSA9IGAke2pvYk5hbWV9OiBbJHtub2RlSW5kZXh9LyR7cGFyYWxsZWxNYXRyaXhWYXJpYWJsZXNMaXN0Lmxlbmd0aH1dYDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBqb2IgPSBuZXcgSm9iKHtcbiAgICAgICAgICAgICAgICAgICAgYXJndixcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBqb2JEYXRhLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBtYXRyaXhKb2JOYW1lLFxuICAgICAgICAgICAgICAgICAgICBiYXNlTmFtZTogam9iTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVzOiBnaXRsYWJEYXRhLnZhcmlhYmxlcyxcbiAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmVJaWQ6IHBpcGVsaW5lSWlkLFxuICAgICAgICAgICAgICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzLFxuICAgICAgICAgICAgICAgICAgICBnaXREYXRhLFxuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXNGcm9tRmlsZXMsXG4gICAgICAgICAgICAgICAgICAgIG1hdHJpeFZhcmlhYmxlczogcGFyYWxsZWxNYXRyaXhWYXJpYWJsZXMsXG4gICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleDogKGpvYkRhdGEucGFyYWxsZWwgIT0gbnVsbCkgPyBub2RlSW5kZXggOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBub2Rlc1RvdGFsOiBwYXJhbGxlbE1hdHJpeFZhcmlhYmxlc0xpc3QubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBleHBhbmRWYXJpYWJsZXM6IHRoaXMuZXhwYW5kVmFyaWFibGVzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kU3RhZ2UgPSB0aGlzLnN0YWdlcy5pbmNsdWRlcyhqb2Iuc3RhZ2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChmb3VuZFN0YWdlLCBjaGFsa2B7eWVsbG93IHN0YWdlOiR7am9iLnN0YWdlfX0gbm90IGZvdW5kIGZvciB7Ymx1ZUJyaWdodCAke2pvYi5uYW1lfX1gKTtcbiAgICAgICAgICAgICAgICB0aGlzLmpvYnMucHVzaChqb2IpO1xuICAgICAgICAgICAgICAgIG5vZGVJbmRleCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBBZGQgc29tZSBwYWRkaW5nIHNvIHRoYXQgam9iIGxvZ3MgYXJlIG5pY2VseSBhbGlnbmVkXG4gICAgICAgIC8vIGFsbG93IHVzZXJzIHRvIG92ZXJyaWRlIHRoaXMgaW4gY2FzZSB0aGV5IGhhdmUgcmVhbGx5IGxvbmcgam9iIG5hbWUgKHNlZSAjODQwKVxuICAgICAgICBpZiAodGhpcy5hcmd2Lm1heEpvYk5hbWVQYWRkaW5nICE9PSBudWxsICYmIHRoaXMuYXJndi5tYXhKb2JOYW1lUGFkZGluZyA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9qb2JOYW1lUGFkID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGpvYnMgPSB0aGlzLmFyZ3Yuam9iLmxlbmd0aCAhPT0gMCA/IHRoaXMuYXJndi5qb2IgOiB0aGlzLmpvYnM7XG4gICAgICAgICAgICBqb2JzLmZvckVhY2goKGpvYikgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBqb2JOZWVkc0xlbmd0aDogbnVtYmVyW10gPSBbXTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFyZ3YubmVlZHMgJiYgdGhpcy5hcmd2LmpvYi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5qb2JzLmZpbmQoaiA9PiBqLmJhc2VOYW1lID09PSBqb2IpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQgIT09IHVuZGVmaW5lZCAmJiBmb3VuZC5uZWVkcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgam9iTmVlZHNMZW5ndGggPSBmb3VuZC5uZWVkcy5tYXAoZiA9PiBmLmpvYi5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGpvYkxlbmd0aCA9IHR5cGVvZiBqb2IgPT0gXCJzdHJpbmdcIiA/IGpvYi5sZW5ndGggOiBqb2IubmFtZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5fam9iTmFtZVBhZCA9IE1hdGgubWF4KGpvYkxlbmd0aCwgdGhpcy5fam9iTmFtZVBhZCA/PyAwLCAuLi5qb2JOZWVkc0xlbmd0aCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFyZ3YubWF4Sm9iTmFtZVBhZGRpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9qb2JOYW1lUGFkID0gTWF0aC5taW4odGhpcy5hcmd2Lm1heEpvYk5hbWVQYWRkaW5nID8/IDAsIHRoaXMuX2pvYk5hbWVQYWQgPz8gMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgam9iTmFtZVBhZCBvbiBhbGwgam9ic1xuICAgICAgICB0aGlzLmpvYnMuZm9yRWFjaCgoam9iKSA9PiB7XG4gICAgICAgICAgICBqb2Iuam9iTmFtZVBhZCA9IHRoaXMuam9iTmFtZVBhZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gR2VuZXJhdGUgcHJvZHVjZXJzIGZvciBlYWNoIGpvYlxuICAgICAgICB0aGlzLmpvYnMuZm9yRWFjaCgoam9iKSA9PiB7XG4gICAgICAgICAgICBqb2IucHJvZHVjZXJzID0gUHJvZHVjZXJzLmluaXQodGhpcy5qb2JzLCB0aGlzLnN0YWdlcywgam9iKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGxvYWRZYW1sIChmaWxlUGF0aDogc3RyaW5nLCBjdHg6IGFueSA9IHt9LCBleHBhbmRWYXJpYWJsZXM6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgeW1sUGF0aCA9IGAke2ZpbGVQYXRofWA7XG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh5bWxQYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShgJHtmaWxlUGF0aH1gLCBcInV0ZjhcIik7XG4gICAgICAgIGNvbnN0IGZpbGVTcGxpdCA9IGZpbGVDb250ZW50LnNwbGl0KC9cXHI/XFxuL2cpO1xuICAgICAgICBjb25zdCBmaWxlU3BsaXRDbG9uZSA9IGZpbGVTcGxpdC5zbGljZSgpO1xuXG4gICAgICAgIGxldCBpbnRlcmFjdGl2ZU1hdGNoID0gbnVsbDtcbiAgICAgICAgbGV0IGRlc2NyaXB0aW9uTWF0Y2ggPSBudWxsO1xuICAgICAgICBsZXQgaW5qZWN0U1NIQWdlbnQgPSBudWxsO1xuICAgICAgICBsZXQgbm9BcnRpZmFjdHNUb1NvdXJjZU1hdGNoID0gbnVsbDtcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgaWYgKGV4cGFuZFZhcmlhYmxlcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGZpbGVTcGxpdCkge1xuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlTWF0Y2ggPSAhaW50ZXJhY3RpdmVNYXRjaCA/IC8jXFxzP0BcXHM/W0lpXW50ZXJhY3RpdmUvLmV4ZWMobGluZSkgOiBpbnRlcmFjdGl2ZU1hdGNoO1xuICAgICAgICAgICAgICAgIGluamVjdFNTSEFnZW50ID0gIWluamVjdFNTSEFnZW50ID8gLyNcXHM/QFxccz9bSWldbmplY3RTU0hBZ2VudC8uZXhlYyhsaW5lKSA6IGluamVjdFNTSEFnZW50O1xuICAgICAgICAgICAgICAgIG5vQXJ0aWZhY3RzVG9Tb3VyY2VNYXRjaCA9ICFub0FydGlmYWN0c1RvU291cmNlTWF0Y2ggPyAvI1xccz9AXFxzP05vQXJ0aWZhY3RzVG9Tb3VyY2UvaS5leGVjKGxpbmUpIDogbm9BcnRpZmFjdHNUb1NvdXJjZU1hdGNoO1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uTWF0Y2ggPSAhZGVzY3JpcHRpb25NYXRjaCA/IC8jXFxzP0BcXHM/W0RkXWVzY3JpcHRpb24gKD88ZGVzY3JpcHRpb24+LiopLy5leGVjKGxpbmUpIDogZGVzY3JpcHRpb25NYXRjaDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGpvYk1hdGNoID0gL1xcdzovLmV4ZWMobGluZSk7XG4gICAgICAgICAgICAgICAgaWYgKGpvYk1hdGNoICYmIChpbnRlcmFjdGl2ZU1hdGNoIHx8IGRlc2NyaXB0aW9uTWF0Y2ggfHwgaW5qZWN0U1NIQWdlbnQgfHwgbm9BcnRpZmFjdHNUb1NvdXJjZU1hdGNoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW50ZXJhY3RpdmVNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVNwbGl0Q2xvbmUuc3BsaWNlKGluZGV4ICsgMSwgMCwgXCIgIGdjbEludGVyYWN0aXZlOiB0cnVlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5qZWN0U1NIQWdlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVTcGxpdENsb25lLnNwbGljZShpbmRleCArIDEsIDAsIFwiICBnY2xJbmplY3RTU0hBZ2VudDogdHJ1ZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vQXJ0aWZhY3RzVG9Tb3VyY2VNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVNwbGl0Q2xvbmUuc3BsaWNlKGluZGV4ICsgMSwgMCwgXCIgIGdjbEFydGlmYWN0c1RvU291cmNlOiBmYWxzZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVTcGxpdENsb25lLnNwbGljZShpbmRleCArIDEsIDAsIGAgIGdjbERlc2NyaXB0aW9uOiAke2Rlc2NyaXB0aW9uTWF0Y2g/Lmdyb3Vwcz8uZGVzY3JpcHRpb24gPz8gXCJcIn1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmVNYXRjaCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uTWF0Y2ggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpbmplY3RTU0hBZ2VudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIG5vQXJ0aWZhY3RzVG9Tb3VyY2VNYXRjaCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWZlcmVuY2VUeXBlID0gbmV3IHlhbWwuVHlwZShcIiFyZWZlcmVuY2VcIiwge1xuICAgICAgICAgICAga2luZDogXCJzZXF1ZW5jZVwiLFxuICAgICAgICAgICAgY29uc3RydWN0OiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7cmVmZXJlbmNlRGF0YTogZGF0YX07XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0geWFtbC5ERUZBVUxUX1NDSEVNQS5leHRlbmQoW3JlZmVyZW5jZVR5cGVdKTtcbiAgICAgICAgbGV0IGZpbGVEYXRhO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmaWxlRGF0YSA9IHlhbWwubG9hZEFsbChmaWxlU3BsaXRDbG9uZS5qb2luKFwiXFxuXCIpLCBudWxsLCB7c2NoZW1hfSkgYXMgYW55W107XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiB5YW1sLllBTUxFeGNlcHRpb24gJiYgZS5yZWFzb24gPT09IFwiZHVwbGljYXRlZCBtYXBwaW5nIGtleVwiKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGtge2JsYWNrLmJnWWVsbG93QnJpZ2h0ICBXQVJOIH0gZHVwbGljYXRlZCBtYXBwaW5nIGtleSBkZXRlY3RlZCEgVmFsdWVzIHdpbGwgYmUgb3ZlcndyaXR0ZW4hYCk7XG4gICAgICAgICAgICAgICAgZmlsZURhdGEgPSB5YW1sLmxvYWRBbGwoZmlsZVNwbGl0Q2xvbmUuam9pbihcIlxcblwiKSwgbnVsbCwge3NjaGVtYSwganNvbjogdHJ1ZX0pIGFzIGFueVtdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVEYXRhLmxlbmd0aCA8PSAxKSByZXR1cm4gZmlsZURhdGFbMF07XG5cbiAgICAgICAgaWYgKGlzR2l0bGFiU3BlY0ZpbGUoZmlsZURhdGFbMF0pKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dHNTcGVjaWZpY2F0aW9uOiBhbnkgPSBmaWxlRGF0YVswXTtcbiAgICAgICAgICAgIGNvbnN0IHVuaW50ZXJwb2xhdGVkQ29uZmlndXJhdGlvbnM6IGFueSA9IGZpbGVEYXRhWzFdO1xuXG4gICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0ZWRDb25maWd1cmF0aW9ucyA9IEpTT04uc3RyaW5naWZ5KHVuaW50ZXJwb2xhdGVkQ29uZmlndXJhdGlvbnMpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgIC9cXCRcXFtcXFtcXHMqaW5wdXRzLig/PGludGVycG9sYXRpb25LZXk+W1xcdy1dKylcXHMqXFx8P1xccyooPzxpbnRlcnBvbGF0aW9uRnVuY3Rpb25zPi4qPylcXHMqXFxdXFxdL2cgLy8gcmVnZXhyLmNvbS83c2gxNVxuICAgICAgICAgICAgICAgICAgICAsIChfOiBzdHJpbmcsIGludGVycG9sYXRpb25LZXk6IHN0cmluZywgaW50ZXJwb2xhdGlvbkZ1bmN0aW9uczogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25maWdGaWxlUGF0aCA9IHBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgZmlsZVBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnBvbGF0aW9uS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycG9sYXRpb25GdW5jdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRzU3BlY2lmaWNhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdHgsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUludGVycG9sYXRpb25LZXkoY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUludGVycG9sYXRpb25GdW5jdGlvbnMoY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dFZhbHVlID0gZ2V0SW5wdXRWYWx1ZShjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlSW5wdXQoaW5wdXRWYWx1ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzb25WYWx1ZSA9IEpTT04uc3RyaW5naWZ5KGlucHV0VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5xdW90ZSBzdHJpbmcgaWYgbmVjZXNzYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mKGpzb25WYWx1ZSkgPT0gXCJzdHJpbmdcIiAmJiBqc29uVmFsdWUuc3RhcnRzV2l0aChcIlxcXCJcIikgJiYganNvblZhbHVlLmVuZHNXaXRoKFwiXFxcIlwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc29uVmFsdWUuc2xpY2UoMSwgLTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzb25WYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShpbnRlcnBvbGF0ZWRDb25maWd1cmF0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbGVEYXRhWzBdO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNHaXRsYWJTcGVjRmlsZSAoZmlsZURhdGE6IGFueSkge1xuICAgIHJldHVybiBcInNwZWNcIiBpbiBmaWxlRGF0YTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJbnRlcnBvbGF0aW9uRnVuY3Rpb25zIChjdHg6IGFueSkge1xuICAgIGNvbnN0IHtpbnRlcnBvbGF0aW9uRnVuY3Rpb25zLCBjb25maWdGaWxlUGF0aH0gPSBjdHg7XG4gICAgaWYgKGludGVycG9sYXRpb25GdW5jdGlvbnMgIT0gXCJcIikge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsa2B7YmxhY2suYmdZZWxsb3dCcmlnaHQgIFdBUk4gfSBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9ucyBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCB2aWEgZ2l0bGFiLWNpLWxvY2FsLiBGdW5jdGlvbnMgd2lsbCBqdXN0IGJlIGEgbm8tb3AuYCk7XG4gICAgfVxuICAgIGFzc2VydChpbnRlcnBvbGF0aW9uRnVuY3Rpb25zLnNwbGl0KFwifFwiKS5sZW5ndGggPD0gTUFYX0ZVTkNUSU9OUywgY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBcXGB7Ymx1ZUJyaWdodCAke2NvbmZpZ0ZpbGVQYXRofX1cXGA6IHRvbyBtYW55IGZ1bmN0aW9ucyBpbiBpbnRlcnBvbGF0aW9uIGJsb2NrLmApO1xufVxuXG5mdW5jdGlvbiBnZXRJbnB1dFZhbHVlIChjdHg6IGFueSkge1xuICAgIGNvbnN0IHtpbnB1dHMsIGludGVycG9sYXRpb25LZXksIGNvbmZpZ0ZpbGVQYXRoLCBpbnB1dHNTcGVjaWZpY2F0aW9ufSA9IGN0eDtcbiAgICBjb25zdCBpbnB1dFZhbHVlID0gaW5wdXRzW2ludGVycG9sYXRpb25LZXldIHx8IGlucHV0c1NwZWNpZmljYXRpb24uc3BlYy5pbnB1dHNbaW50ZXJwb2xhdGlvbktleV0/LmRlZmF1bHQ7XG4gICAgYXNzZXJ0KGlucHV0VmFsdWUgIT09IHVuZGVmaW5lZCwgY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBcXGB7Ymx1ZUJyaWdodCAke2NvbmZpZ0ZpbGVQYXRofX1cXGA6IFxcYHtibHVlQnJpZ2h0ICR7aW50ZXJwb2xhdGlvbktleX19XFxgIGlucHV0OiByZXF1aXJlZCB2YWx1ZSBoYXMgbm90IGJlZW4gcHJvdmlkZWQuYCk7XG4gICAgcmV0dXJuIGlucHV0VmFsdWU7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSW50ZXJwb2xhdGlvbktleSAoY3R4OiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHtjb25maWdGaWxlUGF0aCwgaW50ZXJwb2xhdGlvbktleSwgaW5wdXRzU3BlY2lmaWNhdGlvbn0gPSBjdHg7XG4gICAgY29uc3QgaW52YWxpZEludGVycG9sYXRpb25LZXlFcnIgPSBjaGFsa2BUaGlzIEdpdExhYiBDSSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQ6IFxcYHtibHVlQnJpZ2h0ICR7Y29uZmlnRmlsZVBhdGh9fVxcYDogdW5rbm93biBpbnRlcnBvbGF0aW9uIGtleTogXFxgJHtpbnRlcnBvbGF0aW9uS2V5fVxcYC5gO1xuICAgIGFzc2VydChpbnB1dHNTcGVjaWZpY2F0aW9uLnNwZWMuaW5wdXRzPy5baW50ZXJwb2xhdGlvbktleV0gIT09IHVuZGVmaW5lZCwgaW52YWxpZEludGVycG9sYXRpb25LZXlFcnIpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUlucHV0IChpbnB1dFZhbHVlOiBhbnksIGN0eDogYW55KTogYW55IHtcbiAgICBjb25zdCB7Y29uZmlnRmlsZVBhdGgsIGludGVycG9sYXRpb25LZXksIGlucHV0c1NwZWNpZmljYXRpb259ID0gY3R4O1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IGlucHV0c1NwZWNpZmljYXRpb24uc3BlYy5pbnB1dHNbaW50ZXJwb2xhdGlvbktleV0/Lm9wdGlvbnM7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgYXNzZXJ0KG9wdGlvbnMuaW5jbHVkZXMoaW5wdXRWYWx1ZSksXG4gICAgICAgICAgICBjaGFsa2BUaGlzIEdpdExhYiBDSSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQ6IFxcYHtibHVlQnJpZ2h0ICR7Y29uZmlnRmlsZVBhdGh9fVxcYDogXFxge2JsdWVCcmlnaHQgJHtpbnRlcnBvbGF0aW9uS2V5fX1cXGAgaW5wdXQ6IFxcYHtibHVlQnJpZ2h0ICR7aW5wdXRWYWx1ZX19XFxgIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UgaXQgaXMgbm90IGluIHRoZSBsaXN0IG9mIGFsbG93ZWQgb3B0aW9ucy5gKTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlID0gaW5wdXRzU3BlY2lmaWNhdGlvbi5zcGVjLmlucHV0c1tpbnRlcnBvbGF0aW9uS2V5XT8udHlwZSB8fCBcInN0cmluZ1wiO1xuICAgIGFzc2VydChJTkNMVURFX0lOUFVUU19TVVBQT1JURURfVFlQRVMuaW5jbHVkZXModHlwZSksXG4gICAgICAgIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogXFxge2JsdWVCcmlnaHQgJHtjb25maWdGaWxlUGF0aH19XFxgOiBoZWFkZXI6c3BlYzppbnB1dHM6e2JsdWVCcmlnaHQgJHtpbnRlcnBvbGF0aW9uS2V5fX0gaW5wdXQgdHlwZSB1bmtub3duIHZhbHVlOiB7Ymx1ZUJyaWdodCAke3R5cGV9fS5gKTtcbiAgICBhc3NlcnQodHlwZW9mIGlucHV0VmFsdWUgPT0gdHlwZSxcbiAgICAgICAgY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBcXGB7Ymx1ZUJyaWdodCAke2NvbmZpZ0ZpbGVQYXRofX1cXGA6IFxcYHtibHVlQnJpZ2h0ICR7aW50ZXJwb2xhdGlvbktleX19XFxgIGlucHV0OiBwcm92aWRlZCB2YWx1ZSBpcyBub3QgYSB7Ymx1ZUJyaWdodCAke3R5cGV9fS5gKTtcblxuICAgIGNvbnN0IHJlZ2V4ID0gaW5wdXRzU3BlY2lmaWNhdGlvbi5zcGVjLmlucHV0c1tpbnRlcnBvbGF0aW9uS2V5XT8ucmVnZXg7XG4gICAgaWYgKHJlZ2V4KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrYHtibGFjay5iZ1llbGxvd0JyaWdodCAgV0FSTiB9IHNwZWM6aW5wdXRzOnJlZ2V4IGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIHZpYSBnaXRsYWItY2ktbG9jYWwuIFRoaXMgd2lsbCBqdXN0IGJlIGEgbm8tb3AuYCk7XG4gICAgfVxufVxuIl19
|