gitlab-ci-local 4.47.0 → 4.48.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/package.json +3 -1
- package/src/argv.js +51 -3
- package/src/data-expander.js +13 -4
- package/src/handler.js +4 -3
- package/src/index.js +25 -8
- package/src/job.js +41 -31
- package/src/parser-includes.js +2 -2
- package/src/parser.js +20 -10
- package/src/schema/index.js +18 -0
- package/src/utils.js +9 -9
- package/src/validator.js +44 -1
package/src/job.js
CHANGED
|
@@ -36,6 +36,7 @@ const utils_1 = require("./utils");
|
|
|
36
36
|
const assert_1 = __importStar(require("assert"));
|
|
37
37
|
const mutex_1 = require("./mutex");
|
|
38
38
|
const execa_1 = __importDefault(require("execa"));
|
|
39
|
+
const CI_PROJECT_DIR = "/gcl-builds";
|
|
39
40
|
const dateFormatter = new Intl.DateTimeFormat(undefined, {
|
|
40
41
|
year: undefined,
|
|
41
42
|
month: undefined,
|
|
@@ -111,7 +112,7 @@ class Job {
|
|
|
111
112
|
this._variables = { ...globalVariables, ...jobVariables, ...matrixVariables, ...predefinedVariables, ...argvVariables };
|
|
112
113
|
let ciProjectDir = `${cwd}`;
|
|
113
114
|
if (this.jobData["image"]) {
|
|
114
|
-
ciProjectDir =
|
|
115
|
+
ciProjectDir = CI_PROJECT_DIR;
|
|
115
116
|
}
|
|
116
117
|
else if (argv.shellIsolation) {
|
|
117
118
|
ciProjectDir = `${cwd}/${stateDir}/builds/${this.safeJobName}`;
|
|
@@ -143,7 +144,7 @@ class Job {
|
|
|
143
144
|
this._variables = { ...globalVariables, ...jobVariables, ...matrixVariables, ...predefinedVariables, ...envMatchedVariables, ...argvVariables };
|
|
144
145
|
// Set {when, allowFailure} based on rules result
|
|
145
146
|
if (this.rules) {
|
|
146
|
-
const ruleResult = utils_1.Utils.getRulesResult({ cwd, rules: this.rules, variables: this._variables });
|
|
147
|
+
const ruleResult = utils_1.Utils.getRulesResult({ cwd, rules: this.rules, variables: this._variables }, this.when);
|
|
147
148
|
this.when = ruleResult.when;
|
|
148
149
|
this.allowFailure = ruleResult.allowFailure;
|
|
149
150
|
this._variables = { ...globalVariables, ...jobVariables, ...ruleResult.variables, ...matrixVariables, ...predefinedVariables, ...envMatchedVariables, ...argvVariables };
|
|
@@ -153,6 +154,7 @@ class Job {
|
|
|
153
154
|
delete this._variables[unsetVariable];
|
|
154
155
|
}
|
|
155
156
|
(0, assert_1.default)(this.scripts || this.trigger, (0, chalk_1.default) `{blueBright ${this.name}} must have script specified`);
|
|
157
|
+
(0, assert_1.default)(!(this.interactive && !this.argv.shellExecutorNoImage), (0, chalk_1.default) `${this.formattedJobName} @Interactive decorator cannot be used with --no-shell-executor-no-image`);
|
|
156
158
|
if (this.interactive && (this.when !== "manual" || this.imageName(this._variables) !== null)) {
|
|
157
159
|
throw new assert_1.AssertionError({ message: `${this.formattedJobName} @Interactive decorator cannot have image: and must be when:manual` });
|
|
158
160
|
}
|
|
@@ -208,8 +210,8 @@ class Job {
|
|
|
208
210
|
return allowedExitCodes.includes(this.preScriptsExitCode) ? "warning" : "failed";
|
|
209
211
|
}
|
|
210
212
|
get artifactsToSource() {
|
|
211
|
-
if (this.jobData["
|
|
212
|
-
return this.jobData["
|
|
213
|
+
if (this.jobData["gclArtifactsToSource"] != null)
|
|
214
|
+
return this.jobData["gclArtifactsToSource"];
|
|
213
215
|
return this.argv.artifactsToSource;
|
|
214
216
|
}
|
|
215
217
|
get prettyDuration() {
|
|
@@ -275,13 +277,13 @@ class Job {
|
|
|
275
277
|
return this.jobData["stage"] || "test";
|
|
276
278
|
}
|
|
277
279
|
get interactive() {
|
|
278
|
-
return this.jobData["
|
|
280
|
+
return this.jobData["gclInteractive"] || false;
|
|
279
281
|
}
|
|
280
282
|
get injectSSHAgent() {
|
|
281
|
-
return this.jobData["
|
|
283
|
+
return this.jobData["gclInjectSSHAgent"] || false;
|
|
282
284
|
}
|
|
283
285
|
get description() {
|
|
284
|
-
return this.jobData["
|
|
286
|
+
return this.jobData["gclDescription"] ?? "";
|
|
285
287
|
}
|
|
286
288
|
get artifacts() {
|
|
287
289
|
return this.jobData["artifacts"];
|
|
@@ -293,9 +295,14 @@ class Job {
|
|
|
293
295
|
if (typeof key === "string" || key == null) {
|
|
294
296
|
return utils_1.Utils.expandText(key ?? "default", expanded);
|
|
295
297
|
}
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
298
|
+
const files = key["files"].map((f) => {
|
|
299
|
+
let path = utils_1.Utils.expandText(f, expanded);
|
|
300
|
+
if (path.startsWith(`${CI_PROJECT_DIR}/`)) {
|
|
301
|
+
path = path.slice(`${CI_PROJECT_DIR}/`.length);
|
|
302
|
+
}
|
|
303
|
+
return `${cwd}/${path}`;
|
|
304
|
+
});
|
|
305
|
+
return "md-" + await utils_1.Utils.checksumFiles(files);
|
|
299
306
|
}
|
|
300
307
|
get beforeScripts() {
|
|
301
308
|
const beforeScripts = this.jobData["before_script"] || [];
|
|
@@ -412,13 +419,11 @@ class Job {
|
|
|
412
419
|
clearTimeout(this._longRunningSilentTimeout);
|
|
413
420
|
if (!this.argv.cleanup)
|
|
414
421
|
return;
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
(0, assert_1.default)(e instanceof Error, "e is not instanceof Error");
|
|
421
|
-
}
|
|
422
|
+
try {
|
|
423
|
+
await utils_1.Utils.spawn([this.argv.containerExecutable, "rm", "-vf", ...this._containersToClean]);
|
|
424
|
+
}
|
|
425
|
+
catch (e) {
|
|
426
|
+
(0, assert_1.default)(e instanceof Error, "e is not instanceof Error");
|
|
422
427
|
}
|
|
423
428
|
if (this._serviceNetworkId) {
|
|
424
429
|
try {
|
|
@@ -428,15 +433,11 @@ class Job {
|
|
|
428
433
|
(0, assert_1.default)(e instanceof Error, "e is not instanceof Error");
|
|
429
434
|
}
|
|
430
435
|
}
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
}
|
|
437
|
-
catch (e) {
|
|
438
|
-
(0, assert_1.default)(e instanceof Error, "e is not instanceof Error");
|
|
439
|
-
}
|
|
436
|
+
try {
|
|
437
|
+
await utils_1.Utils.spawn([this.argv.containerExecutable, "volume", "rm", ...this._containerVolumeNames]);
|
|
438
|
+
}
|
|
439
|
+
catch (e) {
|
|
440
|
+
(0, assert_1.default)(e instanceof Error, "e is not instanceof Error");
|
|
440
441
|
}
|
|
441
442
|
const rmPromises = [];
|
|
442
443
|
for (const file of this._filesToRm) {
|
|
@@ -567,7 +568,8 @@ class Job {
|
|
|
567
568
|
dockerCmd += `--add-host=${extraHost} `;
|
|
568
569
|
}
|
|
569
570
|
for (const [key, val] of Object.entries(expanded)) {
|
|
570
|
-
|
|
571
|
+
// Replacing `'` with `'\''` to correctly handle single quotes(if `val` contains `'`) in shell commands
|
|
572
|
+
dockerCmd += ` -e '${key}=${val.replace(/'/g, "'\\''")}' \\\n`;
|
|
571
573
|
}
|
|
572
574
|
if (this.imageEntrypoint) {
|
|
573
575
|
if (this.imageEntrypoint[0] == "") {
|
|
@@ -655,8 +657,15 @@ class Job {
|
|
|
655
657
|
}
|
|
656
658
|
imageName(vars = {}) {
|
|
657
659
|
const image = this.jobData["image"];
|
|
658
|
-
if (!image)
|
|
659
|
-
|
|
660
|
+
if (!image) {
|
|
661
|
+
if (this.argv.shellExecutorNoImage) {
|
|
662
|
+
return null;
|
|
663
|
+
}
|
|
664
|
+
else {
|
|
665
|
+
// https://docs.gitlab.com/ee/ci/runners/hosted_runners/linux.html#container-images
|
|
666
|
+
return "docker.io/ruby:3.1";
|
|
667
|
+
}
|
|
668
|
+
}
|
|
660
669
|
const expanded = utils_1.Utils.expandVariables(vars);
|
|
661
670
|
const imageName = utils_1.Utils.expandText(image.name, expanded);
|
|
662
671
|
return imageName.includes(":") ? imageName : `${imageName}:latest`;
|
|
@@ -947,7 +956,8 @@ class Job {
|
|
|
947
956
|
dockerCmd += `--network-alias=${alias} `;
|
|
948
957
|
}
|
|
949
958
|
for (const [key, val] of Object.entries(expanded)) {
|
|
950
|
-
|
|
959
|
+
// Replacing `'` with `'\''` to correctly handle single quotes(if `val` contains `'`) in shell commands
|
|
960
|
+
dockerCmd += ` -e '${key}=${val.replace(/'/g, "'\\''")}' \\\n`;
|
|
951
961
|
}
|
|
952
962
|
const serviceEntrypoint = service.entrypoint;
|
|
953
963
|
if (serviceEntrypoint) {
|
|
@@ -1036,4 +1046,4 @@ async function cleanupJobResources(jobs) {
|
|
|
1036
1046
|
await Promise.all(promises);
|
|
1037
1047
|
}
|
|
1038
1048
|
exports.cleanupJobResources = cleanupJobResources;
|
|
1039
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0RBQTBCO0FBQzFCLCtDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0Isa0VBQXlDO0FBQ3pDLG9EQUE0QjtBQUM1QixtQ0FBOEI7QUFHOUIsaURBQThDO0FBQzlDLG1DQUE4QjtBQUU5QixrREFBMEI7QUEyQzFCLE1BQU0sYUFBYSxHQUFHLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUU7SUFDckQsSUFBSSxFQUFFLFNBQVM7SUFDZixLQUFLLEVBQUUsU0FBUztJQUNoQixJQUFJLEVBQUUsU0FBUztJQUNmLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLE1BQU0sRUFBRSxLQUFLO0NBQ2hCLENBQUMsQ0FBQztBQUVILE1BQWEsR0FBRztJQUVaLE1BQU0sQ0FBVSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDdEMsU0FBUyxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxVQUFVO1FBQ3JELFFBQVEsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVM7UUFDN0MsY0FBYyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVTtLQUNuRCxDQUFDLENBQUM7SUFFTSxJQUFJLENBQU87SUFDWCxJQUFJLENBQVM7SUFDYixRQUFRLENBQVM7SUFDakIsWUFBWSxDQUFrQjtJQUM5QixXQUFXLENBQXNDO0lBQ2pELEtBQUssQ0FBUztJQUNkLEtBQUssQ0FNVjtJQUVLLFlBQVksQ0FFbkI7SUFDTyxJQUFJLENBQVM7SUFDYixNQUFNLENBQVc7SUFDakIsV0FBVyxDQUFTO0lBQ3BCLE9BQU8sQ0FBVTtJQUVULFVBQVUsR0FBNEIsRUFBRSxDQUFDO0lBQ2xELG1CQUFtQixHQUFrQixJQUFJLENBQUM7SUFDMUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO0lB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Q0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDbkYsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO29CQUFFLE9BQU87Z0JBQ25DLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNuRCxPQUFPLGFBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsbUJBQW1CLElBQUksQ0FBQyxLQUFLLElBQUksWUFBWSxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQztJQUNMLENBQUM7O0FBL21DTCxrQkFnbkNDO0FBRU0sS0FBSyxVQUFVLG1CQUFtQixDQUFFLElBQW9CO0lBQzNELElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTztJQUNsQixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDcEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNyQixRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUNELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBUEQsa0RBT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgKiBhcyBkb3RlbnYgZnJvbSBcImRvdGVudlwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgcHJldHR5SHJ0aW1lIGZyb20gXCJwcmV0dHktaHJ0aW1lXCI7XG5pbXBvcnQgc3BsaXQyIGZyb20gXCJzcGxpdDJcIjtcbmltcG9ydCB7VXRpbHN9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge1dyaXRlU3RyZWFtc30gZnJvbSBcIi4vd3JpdGUtc3RyZWFtc1wiO1xuaW1wb3J0IHtHaXREYXRhfSBmcm9tIFwiLi9naXQtZGF0YVwiO1xuaW1wb3J0IGFzc2VydCwge0Fzc2VydGlvbkVycm9yfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQge011dGV4fSBmcm9tIFwiLi9tdXRleFwiO1xuaW1wb3J0IHtBcmd2fSBmcm9tIFwiLi9hcmd2XCI7XG5pbXBvcnQgZXhlY2EgZnJvbSBcImV4ZWNhXCI7XG5pbXBvcnQge0NJQ0RWYXJpYWJsZX0gZnJvbSBcIi4vdmFyaWFibGVzLWZyb20tZmlsZXNcIjtcblxuaW50ZXJmYWNlIEpvYk9wdGlvbnMge1xuICAgIGFyZ3Y6IEFyZ3Y7XG4gICAgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXM7XG4gICAgZGF0YTogYW55O1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBiYXNlTmFtZTogc3RyaW5nO1xuICAgIHBpcGVsaW5lSWlkOiBudW1iZXI7XG4gICAgZ2l0RGF0YTogR2l0RGF0YTtcbiAgICBnbG9iYWxWYXJpYWJsZXM6IHtbbmFtZTogc3RyaW5nXTogc3RyaW5nfTtcbiAgICB2YXJpYWJsZXNGcm9tRmlsZXM6IHtbbmFtZTogc3RyaW5nXTogQ0lDRFZhcmlhYmxlfTtcbiAgICBwcmVkZWZpbmVkVmFyaWFibGVzOiB7W25hbWU6IHN0cmluZ106IGFueX07XG4gICAgbWF0cml4VmFyaWFibGVzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSB8IG51bGw7XG4gICAgbm9kZUluZGV4OiBudW1iZXIgfCBudWxsO1xuICAgIG5vZGVzVG90YWw6IG51bWJlcjtcbiAgICBleHBhbmRWYXJpYWJsZXM6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBDYWNoZSB7XG4gICAgcG9saWN5OiBcInB1bGxcIiB8IFwicHVsbC1wdXNoXCIgfCBcInB1c2hcIjtcbiAgICBrZXk6IHN0cmluZyB8IHtmaWxlczogc3RyaW5nW119O1xuICAgIHBhdGhzOiBzdHJpbmdbXTtcbiAgICB3aGVuOiBcIm9uX3N1Y2Nlc3NcIiB8IFwib25fZmFpbHVyZVwiIHwgXCJhbHdheXNcIjtcbn1cblxuaW50ZXJmYWNlIFNlcnZpY2Uge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBlbnRyeXBvaW50OiBzdHJpbmdbXSB8IG51bGw7XG4gICAgY29tbWFuZDogc3RyaW5nW10gfCBudWxsO1xuICAgIGFsaWFzOiBzdHJpbmcgfCBudWxsO1xuICAgIHZhcmlhYmxlczoge1tuYW1lOiBzdHJpbmddOiBzdHJpbmd9O1xufVxuXG5pbnRlcmZhY2UgTmVlZCB7XG4gICAgam9iOiBzdHJpbmc7XG4gICAgYXJ0aWZhY3RzOiBib29sZWFuO1xuICAgIG9wdGlvbmFsOiBib29sZWFuO1xuICAgIHBpcGVsaW5lOiBzdHJpbmcgfCBudWxsO1xuICAgIHByb2plY3Q6IHN0cmluZyB8IG51bGw7XG59XG5cbmNvbnN0IGRhdGVGb3JtYXR0ZXIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh1bmRlZmluZWQsIHtcbiAgICB5ZWFyOiB1bmRlZmluZWQsXG4gICAgbW9udGg6IHVuZGVmaW5lZCxcbiAgICBob3VyOiBcIm51bWVyaWNcIixcbiAgICBtaW51dGU6IFwibnVtZXJpY1wiLFxuICAgIHNlY29uZDogXCJudW1lcmljXCIsXG4gICAgaG91cjEyOiBmYWxzZSxcbn0pO1xuXG5leHBvcnQgY2xhc3MgSm9iIHtcblxuICAgIHN0YXRpYyByZWFkb25seSBpbGxlZ2FsSm9iTmFtZXMgPSBuZXcgU2V0KFtcbiAgICAgICAgXCJpbmNsdWRlXCIsIFwibG9jYWxfY29uZmlndXJhdGlvblwiLCBcImltYWdlXCIsIFwic2VydmljZXNcIixcbiAgICAgICAgXCJzdGFnZXNcIiwgXCJ0eXBlc1wiLCBcImJlZm9yZV9zY3JpcHRcIiwgXCJkZWZhdWx0XCIsXG4gICAgICAgIFwiYWZ0ZXJfc2NyaXB0XCIsIFwidmFyaWFibGVzXCIsIFwiY2FjaGVcIiwgXCJ3b3JrZmxvd1wiLFxuICAgIF0pO1xuXG4gICAgcmVhZG9ubHkgYXJndjogQXJndjtcbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgYmFzZU5hbWU6IHN0cmluZztcbiAgICByZWFkb25seSBkZXBlbmRlbmNpZXM6IHN0cmluZ1tdIHwgbnVsbDtcbiAgICByZWFkb25seSBlbnZpcm9ubWVudD86IHtuYW1lOiBzdHJpbmc7IHVybDogc3RyaW5nIHwgbnVsbH07XG4gICAgcmVhZG9ubHkgam9iSWQ6IG51bWJlcjtcbiAgICByZWFkb25seSBydWxlcz86IHtcbiAgICAgICAgaWY6IHN0cmluZztcbiAgICAgICAgd2hlbjogc3RyaW5nO1xuICAgICAgICBleGlzdHM6IHN0cmluZ1tdO1xuICAgICAgICBhbGxvd19mYWlsdXJlOiBib29sZWFuO1xuICAgICAgICB2YXJpYWJsZXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xuICAgIH1bXTtcblxuICAgIHJlYWRvbmx5IGFsbG93RmFpbHVyZTogYm9vbGVhbiB8IHtcbiAgICAgICAgZXhpdF9jb2RlczogbnVtYmVyIHwgbnVtYmVyW107XG4gICAgfTtcbiAgICByZWFkb25seSB3aGVuOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgZXhpc3RzOiBzdHJpbmdbXTtcbiAgICByZWFkb25seSBwaXBlbGluZUlpZDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGdpdERhdGE6IEdpdERhdGE7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF92YXJpYWJsZXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge307XG4gICAgcHJpdmF0ZSBfcHJlc2NyaXB0c0V4aXRDb2RlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9hZnRlclNjcmlwdHNFeGl0Q29kZSA9IDA7XG4gICAgcHJpdmF0ZSBfY292ZXJhZ2VQZXJjZW50OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9ydW5uaW5nID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfY29udGFpbmVySWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX3NlcnZpY2VOZXR3b3JrSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2NvbnRhaW5lclZvbHVtZU5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dDogTm9kZUpTLlRpbWVvdXQgPSAtMSBhcyBhbnk7XG4gICAgcHJpdmF0ZSBfcHJvZHVjZXJzOiB7bmFtZTogc3RyaW5nOyBkb3RlbnY6IHN0cmluZyB8IG51bGx9W10gfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9qb2JOYW1lUGFkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgX2NvbnRhaW5lcnNUb0NsZWFuOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgX2ZpbGVzVG9SbTogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIF9zdGFydFRpbWU/OiBbbnVtYmVyLCBudW1iZXJdO1xuICAgIHByaXZhdGUgX2VuZFRpbWU/OiBbbnVtYmVyLCBudW1iZXJdO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBqb2JEYXRhOiBhbnk7XG4gICAgcHJpdmF0ZSByZWFkb25seSB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcztcblxuICAgIGNvbnN0cnVjdG9yIChvcHQ6IEpvYk9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgam9iRGF0YSA9IG9wdC5kYXRhO1xuICAgICAgICBjb25zdCBnaXREYXRhID0gb3B0LmdpdERhdGE7XG4gICAgICAgIGNvbnN0IGpvYlZhcmlhYmxlcyA9IGpvYkRhdGEudmFyaWFibGVzID8/IHt9O1xuICAgICAgICBjb25zdCBnbG9iYWxWYXJpYWJsZXMgPSBvcHQuZ2xvYmFsVmFyaWFibGVzID8/IHt9O1xuICAgICAgICBjb25zdCB2YXJpYWJsZXNGcm9tRmlsZXMgPSBvcHQudmFyaWFibGVzRnJvbUZpbGVzO1xuICAgICAgICBjb25zdCBhcmd2ID0gb3B0LmFyZ3Y7XG4gICAgICAgIGNvbnN0IGN3ZCA9IGFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IGFyZ3Yuc3RhdGVEaXI7XG4gICAgICAgIGNvbnN0IGFyZ3ZWYXJpYWJsZXMgPSBhcmd2LnZhcmlhYmxlO1xuICAgICAgICBjb25zdCBwcmVkZWZpbmVkVmFyaWFibGVzID0gb3B0LnByZWRlZmluZWRWYXJpYWJsZXM7XG4gICAgICAgIGNvbnN0IGV4cGFuZFZhcmlhYmxlcyA9IG9wdC5leHBhbmRWYXJpYWJsZXMgPz8gdHJ1ZTtcblxuICAgICAgICB0aGlzLmFyZ3YgPSBhcmd2O1xuICAgICAgICB0aGlzLndyaXRlU3RyZWFtcyA9IG9wdC53cml0ZVN0cmVhbXM7XG4gICAgICAgIHRoaXMuZ2l0RGF0YSA9IG9wdC5naXREYXRhO1xuICAgICAgICB0aGlzLm5hbWUgPSBvcHQubmFtZTtcbiAgICAgICAgdGhpcy5iYXNlTmFtZSA9IG9wdC5iYXNlTmFtZTtcbiAgICAgICAgdGhpcy5qb2JJZCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDApO1xuICAgICAgICB0aGlzLmpvYkRhdGEgPSBvcHQuZGF0YTtcbiAgICAgICAgdGhpcy5waXBlbGluZUlpZCA9IG9wdC5waXBlbGluZUlpZDtcblxuICAgICAgICB0aGlzLndoZW4gPSBqb2JEYXRhLndoZW4gfHwgXCJvbl9zdWNjZXNzXCI7XG4gICAgICAgIHRoaXMuZXhpc3RzID0gam9iRGF0YS5leGlzdHMgfHwgW107XG4gICAgICAgIHRoaXMuYWxsb3dGYWlsdXJlID0gam9iRGF0YS5hbGxvd19mYWlsdXJlID8/IGZhbHNlO1xuICAgICAgICB0aGlzLmRlcGVuZGVuY2llcyA9IGpvYkRhdGEuZGVwZW5kZW5jaWVzIHx8IG51bGw7XG4gICAgICAgIHRoaXMucnVsZXMgPSBqb2JEYXRhLnJ1bGVzIHx8IG51bGw7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSB0eXBlb2Ygam9iRGF0YS5lbnZpcm9ubWVudCA9PT0gXCJzdHJpbmdcIiA/IHtuYW1lOiBqb2JEYXRhLmVudmlyb25tZW50fSA6IGpvYkRhdGEuZW52aXJvbm1lbnQ7XG5cbiAgICAgICAgLy8gU2V0IEZGX0RJU0FCTEVfVU1BU0tfRk9SX0RPQ0tFUl9FWEVDVVRPUlxuICAgICAgICBnbG9iYWxWYXJpYWJsZXNbXCJGRl9ESVNBQkxFX1VNQVNLX0ZPUl9ET0NLRVJfRVhFQ1VUT1JcIl0gPSBhcmd2LnVtYXNrID8gXCJmYWxzZVwiIDogXCJ0cnVlXCI7XG5cbiAgICAgICAgY29uc3QgbWF0cml4VmFyaWFibGVzID0gb3B0Lm1hdHJpeFZhcmlhYmxlcyA/PyB7fTtcbiAgICAgICAgdGhpcy5fdmFyaWFibGVzID0gey4uLmdsb2JhbFZhcmlhYmxlcywgLi4uam9iVmFyaWFibGVzLCAuLi5tYXRyaXhWYXJpYWJsZXMsIC4uLnByZWRlZmluZWRWYXJpYWJsZXMsIC4uLmFyZ3ZWYXJpYWJsZXN9O1xuXG4gICAgICAgIGxldCBjaVByb2plY3REaXIgPSBgJHtjd2R9YDtcbiAgICAgICAgaWYgKHRoaXMuam9iRGF0YVtcImltYWdlXCJdKSB7XG4gICAgICAgICAgICBjaVByb2plY3REaXIgPSBcIi9nY2wtYnVpbGRzXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoYXJndi5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgY2lQcm9qZWN0RGlyID0gYCR7Y3dkfS8ke3N0YXRlRGlyfS9idWlsZHMvJHt0aGlzLnNhZmVKb2JOYW1lfWA7XG4gICAgICAgIH1cblxuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfSk9CX0lEXCJdID0gYCR7dGhpcy5qb2JJZH1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfUElQRUxJTkVfSURcIl0gPSBgJHt0aGlzLnBpcGVsaW5lSWlkICsgMTAwMH1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfUElQRUxJTkVfSUlEXCJdID0gYCR7dGhpcy5waXBlbGluZUlpZH1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfSk9CX05BTUVcIl0gPSBgJHt0aGlzLm5hbWV9YDtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX0pPQl9OQU1FX1NMVUdcIl0gPSBgJHt0aGlzLm5hbWUucmVwbGFjZSgvW15hLXpcXGRdKy9pZywgXCItXCIpLnJlcGxhY2UoL14tLywgXCJcIikuc2xpY2UoMCwgNjMpLnJlcGxhY2UoLy0kLywgXCJcIikudG9Mb3dlckNhc2UoKX1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfSk9CX1NUQUdFXCJdID0gYCR7dGhpcy5zdGFnZX1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfUFJPSkVDVF9ESVJcIl0gPSBjaVByb2plY3REaXI7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9KT0JfVVJMXCJdID0gYGh0dHBzOi8vJHtnaXREYXRhLnJlbW90ZS5ob3N0fS8ke2dpdERhdGEucmVtb3RlLmdyb3VwfS8ke2dpdERhdGEucmVtb3RlLnByb2plY3R9Ly0vam9icy8ke3RoaXMuam9iSWR9YDsgLy8gQ2hhbmdlcyBvbiByZXJ1bi5cbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX1BJUEVMSU5FX1VSTFwiXSA9IGBodHRwczovLyR7Z2l0RGF0YS5yZW1vdGUuaG9zdH0vJHtnaXREYXRhLnJlbW90ZS5ncm91cH0vJHtnaXREYXRhLnJlbW90ZS5wcm9qZWN0fS9waXBlbGluZXMvJHt0aGlzLnBpcGVsaW5lSWlkfWA7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9FTlZJUk9OTUVOVF9OQU1FXCJdID0gdGhpcy5lbnZpcm9ubWVudD8ubmFtZSA/PyBcIlwiO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfRU5WSVJPTk1FTlRfU0xVR1wiXSA9IHRoaXMuZW52aXJvbm1lbnQ/Lm5hbWU/LnJlcGxhY2UoL1teYS16XFxkXSsvaWcsIFwiLVwiKS5yZXBsYWNlKC9eLS8sIFwiXCIpLnNsaWNlKDAsIDIzKS5yZXBsYWNlKC8tJC8sIFwiXCIpLnRvTG93ZXJDYXNlKCkgPz8gXCJcIjtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX0VOVklST05NRU5UX1VSTFwiXSA9IHRoaXMuZW52aXJvbm1lbnQ/LnVybCA/PyBcIlwiO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfTk9ERV9JTkRFWFwiXSA9IGAke29wdC5ub2RlSW5kZXh9YDtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX05PREVfVE9UQUxcIl0gPSBgJHtvcHQubm9kZXNUb3RhbH1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfUkVHSVNUUllcIl0gPSBgbG9jYWwtcmVnaXN0cnkuJHt0aGlzLmdpdERhdGEucmVtb3RlLmhvc3R9YDtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX1JFR0lTVFJZX0lNQUdFXCJdID0gYCRDSV9SRUdJU1RSWS8ke3RoaXMuX3ZhcmlhYmxlc1tcIkNJX1BST0pFQ1RfUEFUSFwiXS50b0xvd2VyQ2FzZSgpfWA7XG5cbiAgICAgICAgLy8gRmluZCBlbnZpcm9ubWVudCBtYXRjaGVkIHZhcmlhYmxlc1xuICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudCAmJiBleHBhbmRWYXJpYWJsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gVXRpbHMuZXhwYW5kVmFyaWFibGVzKHRoaXMuX3ZhcmlhYmxlcyk7XG4gICAgICAgICAgICB0aGlzLmVudmlyb25tZW50Lm5hbWUgPSBVdGlscy5leHBhbmRUZXh0KHRoaXMuZW52aXJvbm1lbnQubmFtZSwgZXhwYW5kZWQpO1xuICAgICAgICAgICAgdGhpcy5lbnZpcm9ubWVudC51cmwgPSBVdGlscy5leHBhbmRUZXh0KHRoaXMuZW52aXJvbm1lbnQudXJsLCBleHBhbmRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW52TWF0Y2hlZFZhcmlhYmxlcyA9IFV0aWxzLmZpbmRFbnZNYXRjaGVkVmFyaWFibGVzKHZhcmlhYmxlc0Zyb21GaWxlcywgdGhpcy5maWxlVmFyaWFibGVzRGlyLCB0aGlzLmVudmlyb25tZW50KTtcblxuICAgICAgICAvLyBNZXJnZSBhbmQgZXhwYW5kIGFmdGVyIGZpbmRpbmcgZW52IG1hdGNoZWQgdmFyaWFibGVzXG4gICAgICAgIHRoaXMuX3ZhcmlhYmxlcyA9IHsuLi5nbG9iYWxWYXJpYWJsZXMsIC4uLmpvYlZhcmlhYmxlcywgLi4ubWF0cml4VmFyaWFibGVzLCAuLi5wcmVkZWZpbmVkVmFyaWFibGVzLCAuLi5lbnZNYXRjaGVkVmFyaWFibGVzLCAuLi5hcmd2VmFyaWFibGVzfTtcblxuICAgICAgICAvLyBTZXQge3doZW4sIGFsbG93RmFpbHVyZX0gYmFzZWQgb24gcnVsZXMgcmVzdWx0XG4gICAgICAgIGlmICh0aGlzLnJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBydWxlUmVzdWx0ID0gVXRpbHMuZ2V0UnVsZXNSZXN1bHQoe2N3ZCwgcnVsZXM6IHRoaXMucnVsZXMsIHZhcmlhYmxlczogdGhpcy5fdmFyaWFibGVzfSk7XG4gICAgICAgICAgICB0aGlzLndoZW4gPSBydWxlUmVzdWx0LndoZW47XG4gICAgICAgICAgICB0aGlzLmFsbG93RmFpbHVyZSA9IHJ1bGVSZXN1bHQuYWxsb3dGYWlsdXJlO1xuICAgICAgICAgICAgdGhpcy5fdmFyaWFibGVzID0gey4uLmdsb2JhbFZhcmlhYmxlcywgLi4uam9iVmFyaWFibGVzLCAuLi5ydWxlUmVzdWx0LnZhcmlhYmxlcywgLi4ubWF0cml4VmFyaWFibGVzLCAuLi5wcmVkZWZpbmVkVmFyaWFibGVzLCAuLi5lbnZNYXRjaGVkVmFyaWFibGVzLCAuLi5hcmd2VmFyaWFibGVzfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBEZWxldGUgdmFyaWFibGVzIHRoZSB1c2VyIGludGVudGlvbmFsbHkgd2FudHMgdW5zZXRcbiAgICAgICAgZm9yIChjb25zdCB1bnNldFZhcmlhYmxlIG9mIGFyZ3YudW5zZXRWYXJpYWJsZXMpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl92YXJpYWJsZXNbdW5zZXRWYXJpYWJsZV07XG4gICAgICAgIH1cblxuICAgICAgICBhc3NlcnQodGhpcy5zY3JpcHRzIHx8IHRoaXMudHJpZ2dlciwgY2hhbGtge2JsdWVCcmlnaHQgJHt0aGlzLm5hbWV9fSBtdXN0IGhhdmUgc2NyaXB0IHNwZWNpZmllZGApO1xuXG4gICAgICAgIGlmICh0aGlzLmludGVyYWN0aXZlICYmICh0aGlzLndoZW4gIT09IFwibWFudWFsXCIgfHwgdGhpcy5pbWFnZU5hbWUodGhpcy5fdmFyaWFibGVzKSAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcih7bWVzc2FnZTogYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSBASW50ZXJhY3RpdmUgZGVjb3JhdG9yIGNhbm5vdCBoYXZlIGltYWdlOiBhbmQgbXVzdCBiZSB3aGVuOm1hbnVhbGB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmluamVjdFNTSEFnZW50ICYmIHRoaXMuaW1hZ2VOYW1lKHRoaXMuX3ZhcmlhYmxlcykgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcih7bWVzc2FnZTogYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSBASW5qZWN0U1NIQWdlbnQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGltYWdlOmB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4cGFuZGVkID0gVXRpbHMuZXhwYW5kVmFyaWFibGVzKHRoaXMuX3ZhcmlhYmxlcyk7XG4gICAgICAgIGZvciAoY29uc3QgW2ksIGNdIG9mIE9iamVjdC5lbnRyaWVzPGFueT4odGhpcy5jYWNoZSkpIHtcbiAgICAgICAgICAgIGMucG9saWN5ID0gVXRpbHMuZXhwYW5kVGV4dChjLnBvbGljeSwgZXhwYW5kZWQpO1xuICAgICAgICAgICAgYXNzZXJ0KFtcInB1bGxcIiwgXCJwdXNoXCIsIFwicHVsbC1wdXNoXCJdLmluY2x1ZGVzKGMucG9saWN5KSwgY2hhbGtge2JsdWUgJHt0aGlzLm5hbWV9fSBjYWNoZVske2l9XS5wb2xpY3kgaXMgbm90ICdwdWxsJywgJ3B1c2gnIG9yICdwdWxsLXB1c2gnYCk7XG4gICAgICAgICAgICBhc3NlcnQoW1wib25fc3VjY2Vzc1wiLCBcIm9uX2ZhaWx1cmVcIiwgXCJhbHdheXNcIl0uaW5jbHVkZXMoYy53aGVuKSwgY2hhbGtge2JsdWUgJHt0aGlzLm5hbWV9fSBjYWNoZVske2l9XS53aGVuIGlzIG5vdCAnb25fc3VjY2VzcycsICdvbl9mYWlsdXJlJyBvciAnYWx3YXlzJ2ApO1xuICAgICAgICAgICAgYXNzZXJ0KEFycmF5LmlzQXJyYXkoYy5wYXRocyksIGNoYWxrYHtibHVlICR7dGhpcy5uYW1lfX0gY2FjaGVbJHtpfV0ucGF0aHMgbXVzdCBiZSBhcnJheWApO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBbaSwgc10gb2YgT2JqZWN0LmVudHJpZXM8YW55Pih0aGlzLnNlcnZpY2VzKSkge1xuICAgICAgICAgICAgYXNzZXJ0KHMubmFtZSwgY2hhbGtge2JsdWUgJHt0aGlzLm5hbWV9fSBzZXJ2aWNlc1ske2l9XS5uYW1lIGlzIHVuZGVmaW5lZGApO1xuICAgICAgICAgICAgYXNzZXJ0KCFzLmNvbW1hbmQgfHwgQXJyYXkuaXNBcnJheShzLmNvbW1hbmQpLCBjaGFsa2B7Ymx1ZSAke3RoaXMubmFtZX19IHNlcnZpY2VzWyR7aX1dLmNvbW1hbmQgbXVzdCBiZSBhbiBhcnJheWApO1xuICAgICAgICAgICAgYXNzZXJ0KCFzLmVudHJ5cG9pbnQgfHwgQXJyYXkuaXNBcnJheShzLmVudHJ5cG9pbnQpLCBjaGFsa2B7Ymx1ZSAke3RoaXMubmFtZX19IHNlcnZpY2VzWyR7aX1dLmVudHJ5cG9pbnQgbXVzdCBiZSBhbiBhcnJheWApO1xuICAgICAgICB9XG5cbiAgICAgICAgYXNzZXJ0KCF0aGlzLmFydGlmYWN0cz8ucGF0aHMgfHwgQXJyYXkuaXNBcnJheSh0aGlzLmFydGlmYWN0cy5wYXRocyksIGNoYWxrYHtibHVlICR7dGhpcy5uYW1lfX0gYXJ0aWZhY3RzLnBhdGhzIG11c3QgYmUgYW4gYXJyYXlgKTtcblxuICAgICAgICBpZiAodGhpcy5pbWFnZU5hbWUodGhpcy5fdmFyaWFibGVzKSAmJiBhcmd2Lm1vdW50Q2FjaGUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICAgICAgYy5wYXRocy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBVdGlscy5leHBhbmRUZXh0KHAsIGV4cGFuZGVkKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KCFwYXRoLmluY2x1ZGVzKFwiKlwiKSwgY2hhbGtge2JsdWUgJHt0aGlzLm5hbWV9fSBjYW5ub3QgaGF2ZSAqIGluIGNhY2hlIHBhdGhzLCB3aGVuIC0tbW91bnQtY2FjaGUgaXMgZW5hYmxlZGApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGpvYlN0YXR1cyAoKSB7XG4gICAgICAgIGlmICh0aGlzLnByZVNjcmlwdHNFeGl0Q29kZSA9PSBudWxsKSByZXR1cm4gXCJwZW5kaW5nXCI7XG4gICAgICAgIGlmICh0aGlzLnByZVNjcmlwdHNFeGl0Q29kZSA9PSAwKSByZXR1cm4gXCJzdWNjZXNzXCI7XG5cbiAgICAgICAgbGV0IGFsbG93ZWRFeGl0Q29kZXMgPSBbMF07XG4gICAgICAgIGNvbnN0IGFsbG93RmFpbHVyZSA9IHRoaXMuYWxsb3dGYWlsdXJlO1xuICAgICAgICBzd2l0Y2ggKHR5cGVvZiBhbGxvd0ZhaWx1cmUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgICAgaWYgKGFsbG93RmFpbHVyZSkge1xuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkRXhpdENvZGVzID0gW3RoaXMucHJlU2NyaXB0c0V4aXRDb2RlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICAgICAgaWYgKCEgQXJyYXkuaXNBcnJheShhbGxvd0ZhaWx1cmUuZXhpdF9jb2RlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEV4aXRDb2RlcyA9IFthbGxvd0ZhaWx1cmUuZXhpdF9jb2Rlc107XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEV4aXRDb2RlcyA9IGFsbG93RmFpbHVyZS5leGl0X2NvZGVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHR5cGU6ICAke3R5cGVvZiBhbGxvd0ZhaWx1cmV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWxsb3dlZEV4aXRDb2Rlcy5pbmNsdWRlcyh0aGlzLnByZVNjcmlwdHNFeGl0Q29kZSkgPyBcIndhcm5pbmdcIiA6IFwiZmFpbGVkXCI7XG4gICAgfVxuXG4gICAgZ2V0IGFydGlmYWN0c1RvU291cmNlICgpIHtcbiAgICAgICAgaWYgKHRoaXMuam9iRGF0YVtcImFydGlmYWN0c1RvU291cmNlXCJdICE9IG51bGwpIHJldHVybiB0aGlzLmpvYkRhdGFbXCJhcnRpZmFjdHNUb1NvdXJjZVwiXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXJndi5hcnRpZmFjdHNUb1NvdXJjZTtcbiAgICB9XG5cbiAgICBnZXQgcHJldHR5RHVyYXRpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5fZW5kVGltZSkge1xuICAgICAgICAgICAgcmV0dXJuIHByZXR0eUhydGltZSh0aGlzLl9lbmRUaW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFydFRpbWVcbiAgICAgICAgICAgID8gcHJldHR5SHJ0aW1lKHByb2Nlc3MuaHJ0aW1lKHRoaXMuX3N0YXJ0VGltZSkpXG4gICAgICAgICAgICA6IFwiMCBtc1wiO1xuICAgIH1cblxuICAgIGdldCBmb3JtYXR0ZWRKb2JOYW1lICgpIHtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wUHJlZml4ID0gdGhpcy5hcmd2LnNob3dUaW1lc3RhbXBzXG4gICAgICAgICAgICA/IGBbJHtkYXRlRm9ybWF0dGVyLmZvcm1hdChuZXcgRGF0ZSgpKX0gJHt0aGlzLnByZXR0eUR1cmF0aW9uLnBhZFN0YXJ0KDcpfV0gYFxuICAgICAgICAgICAgOiBcIlwiO1xuXG4gICAgICAgIC8vIFsxNjozMzoxOSAxLjM3IG1pbl0gbXktam9iICAgICA+IGhlbGxvIHdvcmxkXG4gICAgICAgIHJldHVybiBjaGFsa2Ake3RpbWVzdGFtcFByZWZpeH17Ymx1ZUJyaWdodCAke3RoaXMubmFtZS5wYWRFbmQodGhpcy5qb2JOYW1lUGFkKX19YDtcbiAgICB9XG5cbiAgICBnZXQgc2FmZUpvYk5hbWUgKCkge1xuICAgICAgICByZXR1cm4gVXRpbHMuc2FmZURvY2tlclN0cmluZyh0aGlzLm5hbWUpO1xuICAgIH1cblxuICAgIGdldCBuZWVkcyAoKTogTmVlZFtdIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJuZWVkc1wiXSA/PyBudWxsO1xuICAgIH1cblxuICAgIGdldCBidWlsZFZvbHVtZU5hbWUgKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgZ2NsLSR7dGhpcy5zYWZlSm9iTmFtZX0tJHt0aGlzLmpvYklkfS1idWlsZGA7XG4gICAgfVxuXG4gICAgZ2V0IHRtcFZvbHVtZU5hbWUgKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgZ2NsLSR7dGhpcy5zYWZlSm9iTmFtZX0tJHt0aGlzLmpvYklkfS10bXBgO1xuICAgIH1cblxuICAgIGdldCBzZXJ2aWNlcyAoKTogU2VydmljZVtdIHtcbiAgICAgICAgY29uc3Qgc2VydmljZXM6IFNlcnZpY2VbXSA9IFtdO1xuICAgICAgICBpZiAoIXRoaXMuam9iRGF0YVtcInNlcnZpY2VzXCJdKSByZXR1cm4gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBzZXJ2aWNlIG9mIE9iamVjdC52YWx1ZXM8YW55Pih0aGlzLmpvYkRhdGFbXCJzZXJ2aWNlc1wiXSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gVXRpbHMuZXhwYW5kVmFyaWFibGVzKHsuLi50aGlzLl92YXJpYWJsZXMsIC4uLnNlcnZpY2VbXCJ2YXJpYWJsZXNcIl19KTtcbiAgICAgICAgICAgIGxldCBzZXJ2aWNlTmFtZSA9IFV0aWxzLmV4cGFuZFRleHQoc2VydmljZVtcIm5hbWVcIl0sIGV4cGFuZGVkKTtcbiAgICAgICAgICAgIHNlcnZpY2VOYW1lID0gc2VydmljZU5hbWUuaW5jbHVkZXMoXCI6XCIpID8gc2VydmljZU5hbWUgOiBgJHtzZXJ2aWNlTmFtZX06bGF0ZXN0YDtcbiAgICAgICAgICAgIHNlcnZpY2VzLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IHNlcnZpY2VOYW1lLFxuICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQ6IHNlcnZpY2VbXCJlbnRyeXBvaW50XCJdID8/IG51bGwsXG4gICAgICAgICAgICAgICAgY29tbWFuZDogc2VydmljZVtcImNvbW1hbmRcIl0gPz8gbnVsbCxcbiAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IGV4cGFuZGVkLFxuICAgICAgICAgICAgICAgIGFsaWFzOiBVdGlscy5leHBhbmRUZXh0KHNlcnZpY2VbXCJhbGlhc1wiXSwgZXhwYW5kZWQpID8/IG51bGwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VydmljZXM7XG4gICAgfVxuXG4gICAgc2V0IGpvYk5hbWVQYWQgKGpvYk5hbWVQYWQ6IG51bWJlcikge1xuICAgICAgICBhc3NlcnQodGhpcy5fam9iTmFtZVBhZCA9PSBudWxsLCBcInRoaXMuX2pvYk5hbWVQYWQgY2FuIG9ubHkgYmUgc2V0IG9uY2VcIik7XG4gICAgICAgIHRoaXMuX2pvYk5hbWVQYWQgPSBqb2JOYW1lUGFkO1xuICAgIH1cblxuICAgIGdldCBqb2JOYW1lUGFkICgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fam9iTmFtZVBhZCA/PyAwO1xuICAgIH1cblxuICAgIGdldCBwcm9kdWNlcnMgKCk6IHtuYW1lOiBzdHJpbmc7IGRvdGVudjogc3RyaW5nIHwgbnVsbH1bXSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvZHVjZXJzO1xuICAgIH1cblxuICAgIHNldCBwcm9kdWNlcnMgKHByb2R1Y2Vyczoge25hbWU6IHN0cmluZzsgZG90ZW52OiBzdHJpbmcgfCBudWxsfVtdIHwgbnVsbCkge1xuICAgICAgICBhc3NlcnQodGhpcy5fcHJvZHVjZXJzID09IG51bGwsIFwidGhpcy5fcHJvZHVjZXJzIGNhbiBvbmx5IGJlIHNldCBvbmNlXCIpO1xuICAgICAgICB0aGlzLl9wcm9kdWNlcnMgPSBwcm9kdWNlcnM7XG4gICAgfVxuXG4gICAgZ2V0IHN0YWdlICgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wic3RhZ2VcIl0gfHwgXCJ0ZXN0XCI7XG4gICAgfVxuXG4gICAgZ2V0IGludGVyYWN0aXZlICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcImludGVyYWN0aXZlXCJdIHx8IGZhbHNlO1xuICAgIH1cblxuICAgIGdldCBpbmplY3RTU0hBZ2VudCAoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJpbmplY3RTU0hBZ2VudFwiXSB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgZGVzY3JpcHRpb24gKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJkZXNjcmlwdGlvblwiXSA/PyBcIlwiO1xuICAgIH1cblxuICAgIGdldCBhcnRpZmFjdHMgKCk6IHtwYXRoczogc3RyaW5nW107IGV4Y2x1ZGU/OiBzdHJpbmdbXTsgcmVwb3J0cz86IHtkb3RlbnY/OiBzdHJpbmd9OyB3aGVuPzogc3RyaW5nfSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wiYXJ0aWZhY3RzXCJdO1xuICAgIH1cblxuICAgIGdldCBjYWNoZSAoKTogQ2FjaGVbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJjYWNoZVwiXSB8fCBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0VW5pcXVlQ2FjaGVOYW1lIChjd2Q6IHN0cmluZywgZXhwYW5kZWQ6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9LCBrZXk6IGFueSkge1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiB8fCBrZXkgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFV0aWxzLmV4cGFuZFRleHQoa2V5ID8/IFwiZGVmYXVsdFwiLCBleHBhbmRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwibWQtXCIgKyBhd2FpdCBVdGlscy5jaGVja3N1bUZpbGVzKGtleVtcImZpbGVzXCJdLm1hcCgoZjogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYCR7Y3dkfS8ke1V0aWxzLmV4cGFuZFRleHQoZiwgZXhwYW5kZWQpfWA7XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBnZXQgYmVmb3JlU2NyaXB0cyAoKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCBiZWZvcmVTY3JpcHRzID0gdGhpcy5qb2JEYXRhW1wiYmVmb3JlX3NjcmlwdFwiXSB8fCBbXTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBiZWZvcmVTY3JpcHRzID09PSBcInN0cmluZ1wiID8gW2JlZm9yZVNjcmlwdHNdIDogYmVmb3JlU2NyaXB0cztcbiAgICB9XG5cbiAgICBnZXQgYWZ0ZXJTY3JpcHRzICgpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IGFmdGVyU2NyaXB0cyA9IHRoaXMuam9iRGF0YVtcImFmdGVyX3NjcmlwdFwiXSB8fCBbXTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBhZnRlclNjcmlwdHMgPT09IFwic3RyaW5nXCIgPyBbYWZ0ZXJTY3JpcHRzXSA6IGFmdGVyU2NyaXB0cztcbiAgICB9XG5cbiAgICBnZXQgc2NyaXB0cyAoKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCBzY3JpcHQgPSB0aGlzLmpvYkRhdGFbXCJzY3JpcHRcIl07XG4gICAgICAgIHJldHVybiB0eXBlb2Ygc2NyaXB0ID09PSBcInN0cmluZ1wiID8gW3NjcmlwdF0gOiBzY3JpcHQ7XG4gICAgfVxuXG4gICAgZ2V0IHRyaWdnZXIgKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJ0cmlnZ2VyXCJdO1xuICAgIH1cblxuICAgIGdldCBwcmVTY3JpcHRzRXhpdENvZGUgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlO1xuICAgIH1cblxuICAgIGdldCBhZnRlclNjcmlwdHNFeGl0Q29kZSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZnRlclNjcmlwdHNFeGl0Q29kZTtcbiAgICB9XG5cbiAgICBnZXQgc3RhcnRlZCAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5uaW5nIHx8IHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgZmluaXNoZWQgKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuX3J1bm5pbmcgJiYgdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlICE9PSBudWxsO1xuICAgIH1cblxuICAgIGdldCBjb3ZlcmFnZVBlcmNlbnQgKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fY292ZXJhZ2VQZXJjZW50O1xuICAgIH1cblxuICAgIGdldCBmaWxlVmFyaWFibGVzRGlyICgpIHtcbiAgICAgICAgcmV0dXJuIGAvdG1wL2dpdGxhYi1jaS1sb2NhbC1maWxlLXZhcmlhYmxlcy0ke3RoaXMuX3ZhcmlhYmxlc1tcIkNJX1BST0pFQ1RfUEFUSF9TTFVHXCJdfS0ke3RoaXMuam9iSWR9YDtcbiAgICB9XG5cbiAgICBhc3luYyBzdGFydCAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuX3J1bm5pbmcgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IGFyZ3YgPSB0aGlzLmFyZ3Y7XG4gICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgIGNvbnN0IHdyaXRlU3RyZWFtcyA9IHRoaXMud3JpdGVTdHJlYW1zO1xuICAgICAgICBjb25zdCByZXBvcnRzRG90ZW52VmFyaWFibGVzID0gYXdhaXQgdGhpcy5pbml0UHJvZHVjZXJSZXBvcnRzRG90ZW52VmFyaWFibGVzKHdyaXRlU3RyZWFtcywgVXRpbHMuZXhwYW5kVmFyaWFibGVzKHRoaXMuX3ZhcmlhYmxlcykpO1xuICAgICAgICBjb25zdCBleHBhbmRlZCA9IFV0aWxzLnVuc2NhcGUkJFZhcmlhYmxlcyhVdGlscy5leHBhbmRWYXJpYWJsZXMoey4uLnRoaXMuX3ZhcmlhYmxlcywgLi4ucmVwb3J0c0RvdGVudlZhcmlhYmxlc30pKTtcbiAgICAgICAgY29uc3QgaW1hZ2VOYW1lID0gdGhpcy5pbWFnZU5hbWUoZXhwYW5kZWQpO1xuICAgICAgICBjb25zdCBzYWZlSm9iTmFtZSA9IHRoaXMuc2FmZUpvYk5hbWU7XG5cbiAgICAgICAgY29uc3Qgb3V0cHV0TG9nRmlsZVBhdGggPSBgJHthcmd2LmN3ZH0vJHthcmd2LnN0YXRlRGlyfS9vdXRwdXQvJHtzYWZlSm9iTmFtZX0ubG9nYDtcbiAgICAgICAgYXdhaXQgZnMuZW5zdXJlRmlsZShvdXRwdXRMb2dGaWxlUGF0aCk7XG4gICAgICAgIGF3YWl0IGZzLnRydW5jYXRlKG91dHB1dExvZ0ZpbGVQYXRoKTtcblxuICAgICAgICBpZiAoIXRoaXMuaW50ZXJhY3RpdmUpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IHN0YXJ0aW5nfSAke2ltYWdlTmFtZSA/PyBcInNoZWxsXCJ9ICh7eWVsbG93ICR7dGhpcy5zdGFnZX19KVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGltYWdlTmFtZSkge1xuICAgICAgICAgICAgY29uc3QgYnVpbGRWb2x1bWVOYW1lID0gdGhpcy5idWlsZFZvbHVtZU5hbWU7XG4gICAgICAgICAgICBjb25zdCB0bXBWb2x1bWVOYW1lID0gdGhpcy50bXBWb2x1bWVOYW1lO1xuICAgICAgICAgICAgY29uc3QgZmlsZVZhcmlhYmxlc0RpciA9IHRoaXMuZmlsZVZhcmlhYmxlc0RpcjtcblxuICAgICAgICAgICAgY29uc3Qgdm9sdW1lUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgIHZvbHVtZVByb21pc2VzLnB1c2goVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcInZvbHVtZVwiLCBcImNyZWF0ZVwiLCBgJHtidWlsZFZvbHVtZU5hbWV9YF0sIGFyZ3YuY3dkKSk7XG4gICAgICAgICAgICB2b2x1bWVQcm9taXNlcy5wdXNoKFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJ2b2x1bWVcIiwgXCJjcmVhdGVcIiwgYCR7dG1wVm9sdW1lTmFtZX1gXSwgYXJndi5jd2QpKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lclZvbHVtZU5hbWVzLnB1c2goYnVpbGRWb2x1bWVOYW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lclZvbHVtZU5hbWVzLnB1c2godG1wVm9sdW1lTmFtZSk7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh2b2x1bWVQcm9taXNlcyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG5cbiAgICAgICAgICAgIGxldCBjaG93bk9wdCA9IFwiMDowXCI7XG4gICAgICAgICAgICBsZXQgY2htb2RPcHQgPSBcImErcndcIjtcbiAgICAgICAgICAgIGlmIChleHBhbmRlZFtcIkZGX0RJU0FCTEVfVU1BU0tfRk9SX0RPQ0tFUl9FWEVDVVRPUlwiXSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcInJ1blwiLCBcIi0tcm1cIiwgaW1hZ2VOYW1lLCBcInNoXCIsIFwiLWNcIiwgXCJlY2hvIFxcXCIkKGlkIC11KTokKGlkIC1nKVxcXCJcIl0pO1xuICAgICAgICAgICAgICAgIGNob3duT3B0ID0gc3Rkb3V0O1xuICAgICAgICAgICAgICAgIGlmIChjaG93bk9wdCA9PSBcIjA6MFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNobW9kT3B0ID0gXCJnLXdcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7c3Rkb3V0OiBjb250YWluZXJJZH0gPSBhd2FpdCBVdGlscy5zcGF3bihbXG4gICAgICAgICAgICAgICAgdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwiY3JlYXRlXCIsIFwiLS11c2VyPTA6MFwiLCBgLS12b2x1bWU9JHtidWlsZFZvbHVtZU5hbWV9Oi9nY2wtYnVpbGRzYCwgYC0tdm9sdW1lPSR7dG1wVm9sdW1lTmFtZX06JHt0aGlzLmZpbGVWYXJpYWJsZXNEaXJ9YCwgXCJkb2NrZXIuaW8vZmlyZWNvdy9naXRsYWItY2ktbG9jYWwtdXRpbFwiLFxuICAgICAgICAgICAgICAgIC4uLltcInNoXCIsIFwiLWNcIiwgYGNob3duICR7Y2hvd25PcHR9IC1SIC9nY2wtYnVpbGRzLyAmJiBjaG1vZCAke2NobW9kT3B0fSAtUiAvZ2NsLWJ1aWxkcy8gJiYgY2hvd24gJHtjaG93bk9wdH0gLVIgL3RtcC8gJiYgY2htb2QgJHtjaG1vZE9wdH0gLVIgL3RtcC9gXSxcbiAgICAgICAgICAgIF0sIGFyZ3YuY3dkKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lcnNUb0NsZWFuLnB1c2goY29udGFpbmVySWQpO1xuICAgICAgICAgICAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHMoZmlsZVZhcmlhYmxlc0RpcikpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwiY3BcIiwgYCR7ZmlsZVZhcmlhYmxlc0Rpcn0vLmAsIGAke2NvbnRhaW5lcklkfToke2ZpbGVWYXJpYWJsZXNEaXJ9YF0sIGFyZ3YuY3dkKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hMb25nUnVubmluZ1NpbGVudFRpbWVvdXQod3JpdGVTdHJlYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJjcFwiLCBgJHthcmd2LnN0YXRlRGlyfS9idWlsZHMvLmRvY2tlci8uYCwgYCR7Y29udGFpbmVySWR9Oi9nY2wtYnVpbGRzYF0sIGFyZ3YuY3dkKTtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJzdGFydFwiLCBcIi0tYXR0YWNoXCIsIGNvbnRhaW5lcklkXSwgYXJndi5jd2QpO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcInJtXCIsIFwiLXZmXCIsIGNvbnRhaW5lcklkXSwgYXJndi5jd2QpO1xuICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgY29waWVkIHRvIGRvY2tlciB2b2x1bWVzfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZXJ2aWNlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNyZWF0ZURvY2tlck5ldHdvcmsoYGdpdGxhYi1jaS1sb2NhbC0ke3RoaXMuam9iSWR9YCk7XG5cbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZXMubWFwKGFzeW5jIChzZXJ2aWNlLCBzZXJ2aWNlSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VydmljZU5hbWUgPSBzZXJ2aWNlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHVsbEltYWdlKHdyaXRlU3RyZWFtcywgc2VydmljZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlQ29udGFpbmVySWQgPSBhd2FpdCB0aGlzLnN0YXJ0U2VydmljZSh3cml0ZVN0cmVhbXMsIFV0aWxzLmV4cGFuZFZhcmlhYmxlcyh7Li4uZXhwYW5kZWQsIC4uLnNlcnZpY2UudmFyaWFibGVzfSksIHNlcnZpY2UpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlQ29udGFpbmVyTG9nRmlsZSA9IGAke2FyZ3YuY3dkfS8ke2FyZ3Yuc3RhdGVEaXJ9L3NlcnZpY2VzLW91dHB1dC8ke3RoaXMuc2FmZUpvYk5hbWV9LyR7c2VydmljZU5hbWV9LSR7c2VydmljZUluZGV4fS5sb2dgO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNlcnZpY2VIZWFsdGhDaGVjayh3cml0ZVN0cmVhbXMsIHNlcnZpY2UsIHNlcnZpY2VJbmRleCwgc2VydmljZUNvbnRhaW5lckxvZ0ZpbGUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7c3Rkb3V0LCBzdGRlcnJ9ID0gYXdhaXQgVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcImxvZ3NcIiwgc2VydmljZUNvbnRhaW5lcklkXSk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGZzLmVuc3VyZUZpbGUoc2VydmljZUNvbnRhaW5lckxvZ0ZpbGUpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy53cml0ZUZpbGUoc2VydmljZUNvbnRhaW5lckxvZ0ZpbGUsIGAjIyMgc3Rkb3V0ICMjI1xcbiR7c3Rkb3V0fVxcbiMjIyBzdGRlcnIgIyMjXFxuJHtzdGRlcnJ9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLmV4ZWNQcmVTY3JpcHRzKGV4cGFuZGVkKTtcbiAgICAgICAgaWYgKHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSA9PSBudWxsKSB0aHJvdyBFcnJvcihcInRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSBtdXN0IGJlIGRlZmluZWQhXCIpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuZXhlY0FmdGVyU2NyaXB0cyhleHBhbmRlZCk7XG5cbiAgICAgICAgdGhpcy5fcnVubmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9lbmRUaW1lID0gdGhpcy5fZW5kVGltZSA/PyBwcm9jZXNzLmhydGltZSh0aGlzLl9zdGFydFRpbWUpO1xuICAgICAgICB0aGlzLnByaW50RmluaXNoZWRTdHJpbmcoKTtcblxuICAgICAgICBhd2FpdCB0aGlzLmNvcHlDYWNoZU91dCh0aGlzLndyaXRlU3RyZWFtcywgZXhwYW5kZWQpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvcHlBcnRpZmFjdHNPdXQodGhpcy53cml0ZVN0cmVhbXMsIGV4cGFuZGVkKTtcblxuICAgICAgICBpZiAodGhpcy5qb2JEYXRhW1wiY292ZXJhZ2VcIl0pIHtcbiAgICAgICAgICAgIHRoaXMuX2NvdmVyYWdlUGVyY2VudCA9IGF3YWl0IFV0aWxzLmdldENvdmVyYWdlUGVyY2VudChhcmd2LmN3ZCwgYXJndi5zdGF0ZURpciwgdGhpcy5qb2JEYXRhW1wiY292ZXJhZ2VcIl0sIHNhZmVKb2JOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xlYW51cFJlc291cmNlcygpO1xuICAgIH1cblxuICAgIGFzeW5jIGNsZWFudXBSZXNvdXJjZXMgKCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fbG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KTtcblxuICAgICAgICBpZiAoIXRoaXMuYXJndi5jbGVhbnVwKSByZXR1cm47XG5cbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiB0aGlzLl9jb250YWluZXJzVG9DbGVhbikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwicm1cIiwgXCItdmZcIiwgYCR7aWR9YF0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGFzc2VydChlIGluc3RhbmNlb2YgRXJyb3IsIFwiZSBpcyBub3QgaW5zdGFuY2VvZiBFcnJvclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9zZXJ2aWNlTmV0d29ya0lkKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJuZXR3b3JrXCIsIFwicm1cIiwgYCR7dGhpcy5fc2VydmljZU5ldHdvcmtJZH1gXSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGUgaW5zdGFuY2VvZiBFcnJvciwgXCJlIGlzIG5vdCBpbnN0YW5jZW9mIEVycm9yXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lclZvbHVtZU5hbWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb250YWluZXJWb2x1bWUgb2YgdGhpcy5fY29udGFpbmVyVm9sdW1lTmFtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcInZvbHVtZVwiLCBcInJtXCIsIGAke2NvbnRhaW5lclZvbHVtZX1gXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGFzc2VydChlIGluc3RhbmNlb2YgRXJyb3IsIFwiZSBpcyBub3QgaW5zdGFuY2VvZiBFcnJvclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJtUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHRoaXMuX2ZpbGVzVG9SbSkge1xuICAgICAgICAgICAgcm1Qcm9taXNlcy5wdXNoKGZzLnJtKGZpbGUsIHtyZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlfSkpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHJtUHJvbWlzZXMpO1xuXG4gICAgICAgIGNvbnN0IGZpbGVWYXJpYWJsZXNEaXIgPSB0aGlzLmZpbGVWYXJpYWJsZXNEaXI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBmcy5ybShmaWxlVmFyaWFibGVzRGlyLCB7cmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZX0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhc3NlcnQoZSBpbnN0YW5jZW9mIEVycm9yLCBcImUgaXMgbm90IGluc3RhbmNlb2YgRXJyb3JcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlSW5qZWN0U1NIQWdlbnRPcHRpb25zICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmluamVjdFNTSEFnZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJkYXJ3aW5cIiB8fCAvXmRhcndpbi8uZXhlYyhwcm9jZXNzLmVudi5PU1RZUEUgPz8gXCJcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBcIi0tZW52IFNTSF9BVVRIX1NPQ0s9L3J1bi9ob3N0LXNlcnZpY2VzL3NzaC1hdXRoLnNvY2sgLXYgL3J1bi9ob3N0LXNlcnZpY2VzL3NzaC1hdXRoLnNvY2s6L3J1bi9ob3N0LXNlcnZpY2VzL3NzaC1hdXRoLnNvY2tcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYC0tZW52IFNTSF9BVVRIX1NPQ0s9JHtwcm9jZXNzLmVudi5TU0hfQVVUSF9TT0NLfSAtdiAke3Byb2Nlc3MuZW52LlNTSF9BVVRIX1NPQ0t9OiR7cHJvY2Vzcy5lbnYuU1NIX0FVVEhfU09DS31gO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVTY3JpcHRDb21tYW5kcyAoc2NyaXB0czogc3RyaW5nW10pIHtcbiAgICAgICAgbGV0IGNtZCA9IFwiXCI7XG4gICAgICAgIHNjcmlwdHMuZm9yRWFjaCgoc2NyaXB0KSA9PiB7XG4gICAgICAgICAgICAvLyBQcmludCBjb21tYW5kIGVjaG8nZWQgaW4gY29sb3JcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0ID0gc2NyaXB0LnNwbGl0KC9cXHI/XFxuLyk7XG4gICAgICAgICAgICBjb25zdCBtdWx0aWxpbmVUZXh0ID0gc3BsaXQubGVuZ3RoID4gMSA/IFwiICMgY29sbGFwc2VkIG11bHRpLWxpbmUgY29tbWFuZFwiIDogXCJcIjtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBzcGxpdFswXT8ucmVwbGFjZSgvXFxcXC9nLCBcIlxcXFxcXFxcXCIpLnJlcGxhY2UoL1wiL2csIFwiXFxcXFxcXCJcIikucmVwbGFjZSgvWyRdL2csIFwiXFxcXCRcIik7XG4gICAgICAgICAgICBjbWQgKz0gY2hhbGtgZWNobyBcIntncmVlbiAkICR7dGV4dH0ke211bHRpbGluZVRleHR9fVwiXFxuYDtcblxuICAgICAgICAgICAgLy8gRXhlY3V0ZSBhY3R1YWwgc2NyaXB0XG4gICAgICAgICAgICBjbWQgKz0gYCR7c2NyaXB0fVxcbmA7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY21kO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbW91bnRDYWNoZUNtZCAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIGV4cGFuZGVkOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgICAgICBpZiAodGhpcy5pbWFnZU5hbWUoZXhwYW5kZWQpICYmICF0aGlzLmFyZ3YubW91bnRDYWNoZSkgcmV0dXJuIFtdO1xuXG4gICAgICAgIGNvbnN0IGNtZDogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2FjaGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHVuaXF1ZUNhY2hlTmFtZSA9IGF3YWl0IHRoaXMuZ2V0VW5pcXVlQ2FjaGVOYW1lKHRoaXMuYXJndi5jd2QsIGV4cGFuZGVkLCBjLmtleSk7XG4gICAgICAgICAgICBjLnBhdGhzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gVXRpbHMuZXhwYW5kVGV4dChwLCBleHBhbmRlZCk7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgbW91bnRpbmcgY2FjaGV9IGZvciBwYXRoICR7cGF0aH1cXG5gKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZU1vdW50ID0gVXRpbHMuc2FmZURvY2tlclN0cmluZyhgZ2NsLSR7ZXhwYW5kZWQuQ0lfUFJPSkVDVF9QQVRIX1NMVUd9LSR7dW5pcXVlQ2FjaGVOYW1lfWApO1xuICAgICAgICAgICAgICAgIGNtZC5wdXNoKFwiLXZcIiwgYCR7Y2FjaGVNb3VudH06L2djbC1idWlsZHMvJHtwYXRofWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNtZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGV4ZWNQcmVTY3JpcHRzIChleHBhbmRlZDoge1trZXk6IHN0cmluZ106IHN0cmluZ30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcHJlc2NyaXB0cyA9IHRoaXMuYmVmb3JlU2NyaXB0cy5jb25jYXQodGhpcy5zY3JpcHRzKTtcbiAgICAgICAgZXhwYW5kZWRbXCJDSV9KT0JfU1RBVFVTXCJdID0gXCJydW5uaW5nXCI7XG5cbiAgICAgICAgdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlID0gYXdhaXQgdGhpcy5leGVjU2NyaXB0cyhwcmVzY3JpcHRzLCBleHBhbmRlZCwgXCJcIik7XG4gICAgICAgIGV4cGFuZGVkW1wiQ0lfSk9CX1NUQVRVU1wiXSA9IHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSA9PT0gMCA/IFwic3VjY2Vzc1wiIDogXCJmYWlsZWRcIjtcblxuICAgICAgICB0aGlzLnByaW50RXhpdGVkU3RyaW5nKHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBleGVjQWZ0ZXJTY3JpcHRzIChleHBhbmRlZDoge1trZXk6IHN0cmluZ106IHN0cmluZ30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IFwiUnVubmluZyBhZnRlciBzY3JpcHQuLi5cIjtcbiAgICAgICAgdGhpcy5fYWZ0ZXJTY3JpcHRzRXhpdENvZGUgPSBhd2FpdCB0aGlzLmV4ZWNTY3JpcHRzKHRoaXMuYWZ0ZXJTY3JpcHRzLCBleHBhbmRlZCwgbWVzc2FnZSk7XG5cbiAgICAgICAgdGhpcy5wcmludEFmdGVyU2NyaXB0RXhpdGVkU3RyaW5nKHRoaXMuX2FmdGVyU2NyaXB0c0V4aXRDb2RlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGV4ZWNTY3JpcHRzIChzY3JpcHRzOiBzdHJpbmdbXSwgZXhwYW5kZWQ6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9LCBtZXNzYWdlOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICBjb25zdCBjd2QgPSB0aGlzLmFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IHRoaXMuYXJndi5zdGF0ZURpcjtcbiAgICAgICAgY29uc3Qgc2FmZUpvYk5hbWUgPSB0aGlzLnNhZmVKb2JOYW1lO1xuICAgICAgICBjb25zdCBvdXRwdXRGaWxlc1BhdGggPSBgJHtjd2R9LyR7c3RhdGVEaXJ9L291dHB1dC8ke3NhZmVKb2JOYW1lfS5sb2dgO1xuICAgICAgICBjb25zdCBidWlsZFZvbHVtZU5hbWUgPSB0aGlzLmJ1aWxkVm9sdW1lTmFtZTtcbiAgICAgICAgY29uc3QgdG1wVm9sdW1lTmFtZSA9IHRoaXMudG1wVm9sdW1lTmFtZTtcbiAgICAgICAgY29uc3QgaW1hZ2VOYW1lID0gdGhpcy5pbWFnZU5hbWUoZXhwYW5kZWQpO1xuICAgICAgICBjb25zdCB3cml0ZVN0cmVhbXMgPSB0aGlzLndyaXRlU3RyZWFtcztcblxuICAgICAgICBpZiAoc2NyaXB0cy5sZW5ndGggPT09IDAgfHwgc2NyaXB0c1swXSA9PSBudWxsKSByZXR1cm4gMDtcblxuICAgICAgICBpZiAobWVzc2FnZS5sZW5ndGggPiAwKSB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7bWFnZW50YUJyaWdodCAke21lc3NhZ2V9fVxcbmApO1xuXG4gICAgICAgIC8vIENvcHkgZ2l0IHRyYWNrZWQgZmlsZXMgdG8gYnVpbGQgZm9sZGVyIGlmIHNoZWxsIGlzb2xhdGlvbiBlbmFibGVkLlxuICAgICAgICBpZiAoIWltYWdlTmFtZSAmJiB0aGlzLmFyZ3Yuc2hlbGxJc29sYXRpb24pIHtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnJzeW5jVHJhY2tlZEZpbGVzKGN3ZCwgc3RhdGVEaXIsIGAke3NhZmVKb2JOYW1lfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW50ZXJhY3RpdmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGlDbWQgPSB0aGlzLmdlbmVyYXRlU2NyaXB0Q29tbWFuZHMoc2NyaXB0cyk7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUNwID0gZXhlY2EoaUNtZCwge1xuICAgICAgICAgICAgICAgIGN3ZCxcbiAgICAgICAgICAgICAgICBzaGVsbDogXCJiYXNoXCIsXG4gICAgICAgICAgICAgICAgc3RkaW86IFtcImluaGVyaXRcIiwgXCJpbmhlcml0XCIsIFwiaW5oZXJpdFwiXSxcbiAgICAgICAgICAgICAgICBlbnY6IHsuLi5leHBhbmRlZCwgLi4ucHJvY2Vzcy5lbnZ9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8bnVtYmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgdm9pZCBpbnRlcmFjdGl2ZUNwLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4gcmVzb2x2ZShjb2RlID8/IDApKTtcbiAgICAgICAgICAgICAgICB2b2lkIGludGVyYWN0aXZlQ3Aub24oXCJlcnJvclwiLCAoZXJyKSA9PiByZWplY3QoZXJyKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuXG4gICAgICAgIGlmIChpbWFnZU5hbWUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHVsbEltYWdlKHdyaXRlU3RyZWFtcywgaW1hZ2VOYW1lKTtcblxuICAgICAgICAgICAgbGV0IGRvY2tlckNtZCA9IGAke3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlfSBjcmVhdGUgLS1pbnRlcmFjdGl2ZSAke3RoaXMuZ2VuZXJhdGVJbmplY3RTU0hBZ2VudE9wdGlvbnMoKX0gYDtcbiAgICAgICAgICAgIGlmICh0aGlzLmFyZ3YucHJpdmlsZWdlZCkge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIi0tcHJpdmlsZWdlZCBcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuYXJndi51bGltaXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdWxpbWl0IG5vZmlsZT0ke3RoaXMuYXJndi51bGltaXR9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChleHBhbmRlZFtcIkZGX0RJU0FCTEVfVU1BU0tfRk9SX0RPQ0tFUl9FWEVDVVRPUlwiXSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiLS11c2VyIDA6MCBcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuYXJndi5jb250YWluZXJNYWNBZGRyZXNzKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLW1hYy1hZGRyZXNzIFwiJHt0aGlzLmFyZ3YuY29udGFpbmVyTWFjQWRkcmVzc31cIiBgO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpbWFnZVVzZXIgPSB0aGlzLmltYWdlVXNlcihleHBhbmRlZCk7XG4gICAgICAgICAgICBpZiAoaW1hZ2VVc2VyKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLXVzZXIgJHtpbWFnZVVzZXJ9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnNlcnZpY2VzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tbmV0d29yayBnaXRsYWItY2ktbG9jYWwtJHt0aGlzLmpvYklkfSBgO1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIi0tbmV0d29yay1hbGlhcz1idWlsZCBcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBuZXR3b3JrIG9mIHRoaXMuYXJndi5uZXR3b3JrKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLW5ldHdvcmsgJHtuZXR3b3JrfSBgO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdm9sdW1lICR7YnVpbGRWb2x1bWVOYW1lfTovZ2NsLWJ1aWxkcyBgO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLXZvbHVtZSAke3RtcFZvbHVtZU5hbWV9OiR7dGhpcy5maWxlVmFyaWFibGVzRGlyfSBgO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiLS13b3JrZGlyIC9nY2wtYnVpbGRzIFwiO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZvbHVtZSBvZiB0aGlzLmFyZ3Yudm9sdW1lKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLXZvbHVtZSAke3ZvbHVtZX0gYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBleHRyYUhvc3Qgb2YgdGhpcy5hcmd2LmV4dHJhSG9zdCkge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS1hZGQtaG9zdD0ke2V4dHJhSG9zdH0gYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGFuZGVkKSkge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLWUgJyR7a2V5fT0ke3ZhbH0nIGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmltYWdlRW50cnlwb2ludCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmltYWdlRW50cnlwb2ludFswXSA9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIi0tZW50cnlwb2ludCAnJyBcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tZW50cnlwb2ludCAke3RoaXMuaW1hZ2VFbnRyeXBvaW50WzBdfSBgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAkeyhhd2FpdCB0aGlzLm1vdW50Q2FjaGVDbWQod3JpdGVTdHJlYW1zLCBleHBhbmRlZCkpLmpvaW4oXCIgXCIpfSBgO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAke2ltYWdlTmFtZX0gYDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaW1hZ2VFbnRyeXBvaW50Py5sZW5ndGggPz8gMCA+IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmltYWdlRW50cnlwb2ludD8uc2xpY2UoMSkuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYFwiJHtlfVwiIGA7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcInNoIC1jIFxcXCJcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImlmIFsgLXggL3Vzci9sb2NhbC9iaW4vYmFzaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC91c3IvbG9jYWwvYmluL2Jhc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbGlmIFsgLXggL3Vzci9iaW4vYmFzaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC91c3IvYmluL2Jhc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbGlmIFsgLXggL2Jpbi9iYXNoIF07IHRoZW5cXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4ZWMgL2Jpbi9iYXNoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxpZiBbIC14IC91c3IvbG9jYWwvYmluL3NoIF07IHRoZW5cXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4ZWMgL3Vzci9sb2NhbC9iaW4vc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbGlmIFsgLXggL3Vzci9iaW4vc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvdXNyL2Jpbi9zaCBcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImVsaWYgWyAteCAvYmluL3NoIF07IHRoZW5cXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4ZWMgL2Jpbi9zaCBcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImVsaWYgWyAteCAvYnVzeWJveC9zaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC9idXN5Ym94L3NoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxzZVxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZWNobyBzaGVsbCBub3QgZm91bmRcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4aXQgMVxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZmlcXG5cXFwiXCI7XG5cbiAgICAgICAgICAgIGNvbnN0IHtzdGRvdXQ6IGNvbnRhaW5lcklkfSA9IGF3YWl0IFV0aWxzLmJhc2goZG9ja2VyQ21kLCBjd2QpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVySWQgPSBjb250YWluZXJJZDtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lcnNUb0NsZWFuLnB1c2godGhpcy5fY29udGFpbmVySWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5jb3B5Q2FjaGVJbih3cml0ZVN0cmVhbXMsIGV4cGFuZGVkKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb3B5QXJ0aWZhY3RzSW4od3JpdGVTdHJlYW1zKTtcblxuICAgICAgICBsZXQgY21kID0gXCJzZXQgLWVvIHBpcGVmYWlsXFxuXCI7XG4gICAgICAgIGNtZCArPSBcImV4ZWMgMDwgL2Rldi9udWxsXFxuXCI7XG5cbiAgICAgICAgaWYgKCFpbWFnZU5hbWUgJiYgdGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uKSB7XG4gICAgICAgICAgICBjbWQgKz0gYGNkICR7c3RhdGVEaXJ9L2J1aWxkcy8ke3NhZmVKb2JOYW1lfS9cXG5gO1xuICAgICAgICB9XG4gICAgICAgIGNtZCArPSB0aGlzLmdlbmVyYXRlU2NyaXB0Q29tbWFuZHMoc2NyaXB0cyk7XG5cbiAgICAgICAgY21kICs9IFwiZXhpdCAwXFxuXCI7XG5cbiAgICAgICAgY29uc3Qgam9iU2NyaXB0RmlsZSA9IGAke2N3ZH0vJHtzdGF0ZURpcn0vc2NyaXB0cy8ke3NhZmVKb2JOYW1lfV8ke3RoaXMuam9iSWR9YDtcbiAgICAgICAgYXdhaXQgZnMub3V0cHV0RmlsZShqb2JTY3JpcHRGaWxlLCBjbWQsIFwidXRmLThcIik7XG4gICAgICAgIGF3YWl0IGZzLmNobW9kKGpvYlNjcmlwdEZpbGUsIFwiMDc1NVwiKTtcbiAgICAgICAgdGhpcy5fZmlsZXNUb1JtLnB1c2goam9iU2NyaXB0RmlsZSk7XG5cbiAgICAgICAgaWYgKGltYWdlTmFtZSkge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcImNwXCIsIGAke3N0YXRlRGlyfS9zY3JpcHRzLyR7c2FmZUpvYk5hbWV9XyR7dGhpcy5qb2JJZH1gLCBgJHt0aGlzLl9jb250YWluZXJJZH06L2djbC1jbWRgXSwgY3dkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNwID0gZXhlY2EodGhpcy5fY29udGFpbmVySWQgPyBgJHt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZX0gc3RhcnQgLS1hdHRhY2ggLWkgJHt0aGlzLl9jb250YWluZXJJZH1gIDogXCJiYXNoXCIsIHtcbiAgICAgICAgICAgIGN3ZCxcbiAgICAgICAgICAgIHNoZWxsOiBcImJhc2hcIixcbiAgICAgICAgICAgIGVudjogaW1hZ2VOYW1lID8gcHJvY2Vzcy5lbnYgOiBleHBhbmRlZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgb3V0RnVuYyA9IChsaW5lOiBzdHJpbmcsIHN0cmVhbTogKHR4dDogc3RyaW5nKSA9PiB2b2lkLCBjb2xvcml6ZTogKHN0cjogc3RyaW5nKSA9PiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICAgICAgc3RyZWFtKGAke3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0gYCk7XG4gICAgICAgICAgICBpZiAoIWxpbmUuc3RhcnRzV2l0aChcIlxcdTAwMWJbMzJtJFwiKSkge1xuICAgICAgICAgICAgICAgIHN0cmVhbShgJHtjb2xvcml6ZShcIj5cIil9IGApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RyZWFtKGAke2xpbmV9XFxuYCk7XG4gICAgICAgICAgICBmcy5hcHBlbmRGaWxlU3luYyhvdXRwdXRGaWxlc1BhdGgsIGAke2xpbmV9XFxuYCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcXVpZXQgPSB0aGlzLmFyZ3YucXVpZXQ7XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFxdWlldCkge1xuICAgICAgICAgICAgICAgIGNwLnN0ZG91dD8ucGlwZShzcGxpdDIoKSkub24oXCJkYXRhXCIsIChlOiBzdHJpbmcpID0+IG91dEZ1bmMoZSwgd3JpdGVTdHJlYW1zLnN0ZG91dC5iaW5kKHdyaXRlU3RyZWFtcyksIChzKSA9PiBjaGFsa2B7Z3JlZW5CcmlnaHQgJHtzfX1gKSk7XG4gICAgICAgICAgICAgICAgY3Auc3RkZXJyPy5waXBlKHNwbGl0MigpKS5vbihcImRhdGFcIiwgKGU6IHN0cmluZykgPT4gb3V0RnVuYyhlLCB3cml0ZVN0cmVhbXMuc3RkZXJyLmJpbmQod3JpdGVTdHJlYW1zKSwgKHMpID0+IGNoYWxrYHtyZWRCcmlnaHQgJHtzfX1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2b2lkIGNwLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4gcmVzb2x2ZShjb2RlID8/IDApKTtcbiAgICAgICAgICAgIHZvaWQgY3Aub24oXCJlcnJvclwiLCAoZXJyKSA9PiByZWplY3QoZXJyKSk7XG5cbiAgICAgICAgICAgIGlmIChpbWFnZU5hbWUpIHtcbiAgICAgICAgICAgICAgICBjcC5zdGRpbj8uZW5kKFwiL2djbC1jbWRcIik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNwLnN0ZGluPy5lbmQoYC4vJHtzdGF0ZURpcn0vc2NyaXB0cy8ke3NhZmVKb2JOYW1lfV8ke3RoaXMuam9iSWR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW1hZ2VOYW1lICh2YXJzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSA9IHt9KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5qb2JEYXRhW1wiaW1hZ2VcIl07XG4gICAgICAgIGlmICghaW1hZ2UpIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBleHBhbmRlZCA9IFV0aWxzLmV4cGFuZFZhcmlhYmxlcyh2YXJzKTtcbiAgICAgICAgY29uc3QgaW1hZ2VOYW1lID0gVXRpbHMuZXhwYW5kVGV4dChpbWFnZS5uYW1lLCBleHBhbmRlZCk7XG4gICAgICAgIHJldHVybiBpbWFnZU5hbWUuaW5jbHVkZXMoXCI6XCIpID8gaW1hZ2VOYW1lIDogYCR7aW1hZ2VOYW1lfTpsYXRlc3RgO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW1hZ2VVc2VyICh2YXJzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSA9IHt9KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5qb2JEYXRhW1wiaW1hZ2VcIl07XG4gICAgICAgIGlmICghaW1hZ2UpIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoIWltYWdlW1wiZG9ja2VyXCJdKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIFV0aWxzLmV4cGFuZFRleHQoaW1hZ2VbXCJkb2NrZXJcIl1bXCJ1c2VyXCJdLCB2YXJzKTtcbiAgICB9XG5cbiAgICBnZXQgaW1hZ2VFbnRyeXBvaW50ICgpOiBzdHJpbmdbXSB8IG51bGwge1xuICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMuam9iRGF0YVtcImltYWdlXCJdO1xuXG4gICAgICAgIGlmICghaW1hZ2U/LmVudHJ5cG9pbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGFzc2VydChBcnJheS5pc0FycmF5KGltYWdlLmVudHJ5cG9pbnQpLCBcImltYWdlOmVudHJ5cG9pbnQgbXVzdCBiZSBhbiBhcnJheVwiKTtcbiAgICAgICAgcmV0dXJuIGltYWdlLmVudHJ5cG9pbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBwdWxsSW1hZ2UgKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBpbWFnZVRvUHVsbDogc3RyaW5nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwiaW1hZ2VcIiwgXCJpbnNwZWN0XCIsIGltYWdlVG9QdWxsXSk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwicHVsbFwiLCBpbWFnZVRvUHVsbF0pO1xuICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgcHVsbGVkfSAke2ltYWdlVG9QdWxsfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hMb25nUnVubmluZ1NpbGVudFRpbWVvdXQod3JpdGVTdHJlYW1zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgaW5pdFByb2R1Y2VyUmVwb3J0c0RvdGVudlZhcmlhYmxlcyAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIGV4cGFuZGVkOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgICAgICBjb25zdCBjd2QgPSB0aGlzLmFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IHRoaXMuYXJndi5zdGF0ZURpcjtcbiAgICAgICAgY29uc3QgcHJvZHVjZXJzID0gdGhpcy5wcm9kdWNlcnM7XG4gICAgICAgIGxldCBwcm9kdWNlclJlcG9ydHNFbnZzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgcHJvZHVjZXIgb2YgcHJvZHVjZXJzID8/IFtdKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9kdWNlckRvdGVudiA9IFV0aWxzLmV4cGFuZFRleHQocHJvZHVjZXIuZG90ZW52LCBleHBhbmRlZCk7XG4gICAgICAgICAgICBpZiAocHJvZHVjZXJEb3RlbnYgPT09IG51bGwpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCBzYWZlUHJvZHVjZXJOYW1lID0gVXRpbHMuc2FmZURvY2tlclN0cmluZyhwcm9kdWNlci5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGRvdGVudkZvbGRlciA9IGAke2N3ZH0vJHtzdGF0ZURpcn0vYXJ0aWZhY3RzLyR7c2FmZVByb2R1Y2VyTmFtZX0vLmdpdGxhYi1jaS1yZXBvcnRzL2RvdGVudi9gO1xuICAgICAgICAgICAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHMoZG90ZW52Rm9sZGVyKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvdGVudkZpbGVzID0gKGF3YWl0IFV0aWxzLnNwYXduKFtcImZpbmRcIiwgXCIuXCIsIFwiLXR5cGVcIiwgXCJmXCJdLCBkb3RlbnZGb2xkZXIpKS5zdGRvdXQuc3BsaXQoXCJcXG5cIik7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBkb3RlbnZGaWxlIG9mIGRvdGVudkZpbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkb3RlbnZGaWxlID09IFwiXCIpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9kdWNlclJlcG9ydEVudiA9IGRvdGVudi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShgJHtkb3RlbnZGb2xkZXJ9LyR7ZG90ZW52RmlsZX1gKSk7XG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y2VyUmVwb3J0c0VudnMgPSB7Li4ucHJvZHVjZXJSZXBvcnRzRW52cywgLi4ucHJvZHVjZXJSZXBvcnRFbnZ9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge3llbGxvdyByZXBvcnRzLmRvdGVudiBwcm9kdWNlZCBieSAnJHtwcm9kdWNlci5uYW1lfScgY291bGQgbm90IGJlIGZvdW5kfVxcbmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb2R1Y2VyUmVwb3J0c0VudnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjb3B5Q2FjaGVJbiAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIGV4cGFuZGVkOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgICAgICBpZiAodGhpcy5hcmd2Lm1vdW50Q2FjaGUgJiYgdGhpcy5pbWFnZU5hbWUoZXhwYW5kZWQpKSByZXR1cm47XG4gICAgICAgIGlmICgoIXRoaXMuaW1hZ2VOYW1lKGV4cGFuZGVkKSAmJiAhdGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uKSB8fCB0aGlzLmNhY2hlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGN3ZCA9IHRoaXMuYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gdGhpcy5hcmd2LnN0YXRlRGlyO1xuXG4gICAgICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICBpZiAoIVtcInB1bGxcIiwgXCJwdWxsLXB1c2hcIl0uaW5jbHVkZXMoYy5wb2xpY3kpKSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgY29uc3QgY2FjaGVOYW1lID0gYXdhaXQgdGhpcy5nZXRVbmlxdWVDYWNoZU5hbWUoY3dkLCBleHBhbmRlZCwgYy5rZXkpO1xuICAgICAgICAgICAgY29uc3QgY2FjaGVGb2xkZXIgPSBgJHtjd2R9LyR7c3RhdGVEaXJ9L2NhY2hlLyR7Y2FjaGVOYW1lfWA7XG4gICAgICAgICAgICBpZiAoIWF3YWl0IGZzLnBhdGhFeGlzdHMoY2FjaGVGb2xkZXIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF3YWl0IE11dGV4LmV4Y2x1c2l2ZShjYWNoZU5hbWUsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNvcHlJbihjYWNoZUZvbGRlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IGltcG9ydGVkIGNhY2hlICcke2NhY2hlTmFtZX0nfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNvcHlBcnRpZmFjdHNJbiAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpIHtcbiAgICAgICAgaWYgKCghdGhpcy5pbWFnZU5hbWUodGhpcy5fdmFyaWFibGVzKSAmJiAhdGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uKSB8fCAodGhpcy5wcm9kdWNlcnMgPz8gW10pLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGN3ZCA9IHRoaXMuYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gdGhpcy5hcmd2LnN0YXRlRGlyO1xuICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9kdWNlciBvZiB0aGlzLnByb2R1Y2VycyA/PyBbXSkge1xuICAgICAgICAgICAgY29uc3QgcHJvZHVjZXJTYWZlTmFtZSA9IFV0aWxzLnNhZmVEb2NrZXJTdHJpbmcocHJvZHVjZXIubmFtZSk7XG4gICAgICAgICAgICBjb25zdCBhcnRpZmFjdEZvbGRlciA9IGAke2N3ZH0vJHtzdGF0ZURpcn0vYXJ0aWZhY3RzLyR7cHJvZHVjZXJTYWZlTmFtZX1gO1xuICAgICAgICAgICAgaWYgKCFhd2FpdCBmcy5wYXRoRXhpc3RzKGFydGlmYWN0Rm9sZGVyKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGZzLm1rZGlycChhcnRpZmFjdEZvbGRlcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJlYWRkaXIgPSBhd2FpdCBmcy5yZWFkZGlyKGFydGlmYWN0Rm9sZGVyKTtcbiAgICAgICAgICAgIGlmIChyZWFkZGlyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHt5ZWxsb3cgYXJ0aWZhY3RzIGZyb20ge2JsdWVCcmlnaHQgJHtwcm9kdWNlclNhZmVOYW1lfX0gd2FzIGVtcHR5fVxcbmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuY29weUluKGFydGlmYWN0Rm9sZGVyKSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IGltcG9ydGVkIGFydGlmYWN0c30gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgIH1cblxuICAgIGNvcHlJbiAoc291cmNlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc2FmZUpvYk5hbWUgPSB0aGlzLnNhZmVKb2JOYW1lO1xuICAgICAgICBpZiAoIXRoaXMuaW1hZ2VOYW1lKHRoaXMuX3ZhcmlhYmxlcykgJiYgdGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gVXRpbHMuc3Bhd24oW1wicnN5bmNcIiwgXCItYVwiLCBgJHtzb3VyY2V9Ly5gLCBgJHt0aGlzLmFyZ3YuY3dkfS8ke3RoaXMuYXJndi5zdGF0ZURpcn0vYnVpbGRzLyR7c2FmZUpvYk5hbWV9YF0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBVdGlscy5zcGF3bihbdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwiY3BcIiwgYCR7c291cmNlfS8uYCwgYCR7dGhpcy5fY29udGFpbmVySWR9Oi9nY2wtYnVpbGRzYF0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weUNhY2hlT3V0ICh3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgZXhwYW5kZWQ6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9KSB7XG4gICAgICAgIGlmICh0aGlzLmFyZ3YubW91bnRDYWNoZSAmJiB0aGlzLmltYWdlTmFtZShleHBhbmRlZCkpIHJldHVybjtcbiAgICAgICAgaWYgKCghdGhpcy5pbWFnZU5hbWUoZXhwYW5kZWQpICYmICF0aGlzLmFyZ3Yuc2hlbGxJc29sYXRpb24pIHx8IHRoaXMuY2FjaGUubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY3dkID0gdGhpcy5hcmd2LmN3ZDtcbiAgICAgICAgY29uc3Qgc3RhdGVEaXIgPSB0aGlzLmFyZ3Yuc3RhdGVEaXI7XG5cbiAgICAgICAgbGV0IHRpbWUsIGVuZFRpbWU7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICBpZiAoIVtcInB1c2hcIiwgXCJwdWxsLXB1c2hcIl0uaW5jbHVkZXMoYy5wb2xpY3kpKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoXCJvbl9zdWNjZXNzXCIgPT09IGMud2hlbiAmJiB0aGlzLmpvYlN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChcIm9uX2ZhaWx1cmVcIiA9PT0gYy53aGVuICYmIHRoaXMuam9iU3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgY2FjaGVOYW1lID0gYXdhaXQgdGhpcy5nZXRVbmlxdWVDYWNoZU5hbWUoY3dkLCBleHBhbmRlZCwgYy5rZXkpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXRoIG9mIGMucGF0aHMpIHtcbiAgICAgICAgICAgICAgICB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBhbmRlZFBhdGggPSBVdGlscy5leHBhbmRUZXh0KHBhdGgsIGV4cGFuZGVkKS5yZXBsYWNlKGAke2V4cGFuZGVkLkNJX1BST0pFQ1RfRElSfS9gLCBcIlwiKTtcbiAgICAgICAgICAgICAgICBsZXQgY21kID0gXCJzaG9wdCAtcyBnbG9ic3RhciBudWxsZ2xvYiBkb3RnbG9iXFxuXCI7XG4gICAgICAgICAgICAgICAgY21kICs9IGBta2RpciAtcCAuLi8uLi9jYWNoZS8ke2NhY2hlTmFtZX1cXG5gO1xuICAgICAgICAgICAgICAgIGNtZCArPSBgcnN5bmMgLVJhICR7ZXhwYW5kZWRQYXRofSAuLi8uLi9jYWNoZS8ke2NhY2hlTmFtZX0vLiB8fCB0cnVlXFxuYDtcblxuICAgICAgICAgICAgICAgIGF3YWl0IE11dGV4LmV4Y2x1c2l2ZShjYWNoZU5hbWUsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb3B5T3V0KGNtZCwgc3RhdGVEaXIsIFwiY2FjaGVcIiwgW10pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlYWRkaXIgPSBhd2FpdCBmcy5yZWFkZGlyKGAke3RoaXMuYXJndi5jd2R9LyR7c3RhdGVEaXJ9L2NhY2hlLyR7Y2FjaGVOYW1lfWApO1xuICAgICAgICAgICAgICAgIGlmIChyZWFkZGlyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7eWVsbG93ICEhIG5vIGNhY2hlIHdhcyBjb3BpZWQgZm9yICR7cGF0aH0gISF9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgZXhwb3J0ZWQgY2FjaGUgJHtleHBhbmRlZFBhdGh9ICcke2NhY2hlTmFtZX0nfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjb3B5QXJ0aWZhY3RzT3V0ICh3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgZXhwYW5kZWQ6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9KSB7XG4gICAgICAgIC8vIFRPRE86IHVwZGF0ZSB0aGUgY29uZGl0aW9uIHRvIHN1cHBvcnQgd2hlbjpvbl9zdWNjZXNzIC8gd2hlbjpvbl9mYWlsdXJlXG4gICAgICAgIGlmICh0aGlzLmpvYlN0YXR1cyAhPT0gXCJzdWNjZXNzXCIgJiYgdGhpcy5hcnRpZmFjdHM/LndoZW4gIT09IFwiYWx3YXlzXCIpIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzLmFydGlmYWN0cykgcmV0dXJuO1xuICAgICAgICBpZiAoKHRoaXMuYXJ0aWZhY3RzLnBhdGhzPy5sZW5ndGggPz8gMCkgPT09IDAgJiYgdGhpcy5hcnRpZmFjdHMucmVwb3J0cz8uZG90ZW52ID09IG51bGwpIHJldHVybjtcblxuICAgICAgICBjb25zdCBzYWZlSm9iTmFtZSA9IHRoaXMuc2FmZUpvYk5hbWU7XG4gICAgICAgIGNvbnN0IGN3ZCA9IHRoaXMuYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gdGhpcy5hcmd2LnN0YXRlRGlyO1xuICAgICAgICBjb25zdCBhcnRpZmFjdHNQYXRoID0gIXRoaXMuYXJndi5zaGVsbElzb2xhdGlvbiAmJiAhdGhpcy5pbWFnZU5hbWUoZXhwYW5kZWQpID8gYCR7c3RhdGVEaXJ9L2FydGlmYWN0c2AgOiBcIi4uLy4uL2FydGlmYWN0c1wiO1xuXG4gICAgICAgIGxldCB0aW1lLCBlbmRUaW1lO1xuICAgICAgICBsZXQgY3BDbWQgPSBcInNob3B0IC1zIGdsb2JzdGFyIG51bGxnbG9iIGRvdGdsb2JcXG5cIjtcbiAgICAgICAgY3BDbWQgKz0gYG1rZGlyIC1wICR7YXJ0aWZhY3RzUGF0aH0vJHtzYWZlSm9iTmFtZX1cXG5gO1xuICAgICAgICBjcENtZCArPSBcInJzeW5jIC0tZXhjbHVkZSAnLmdpdGxhYi1jaS1sb2NhbC8qKicgLVJhIFwiO1xuICAgICAgICBmb3IgKGNvbnN0IGFydGlmYWN0RXhjbHVkZVBhdGggb2YgdGhpcy5hcnRpZmFjdHM/LmV4Y2x1ZGUgPz8gW10pIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkUGF0aCA9IFV0aWxzLmV4cGFuZFRleHQoYXJ0aWZhY3RFeGNsdWRlUGF0aCwgZXhwYW5kZWQpLnJlcGxhY2UoYCR7ZXhwYW5kZWQuQ0lfUFJPSkVDVF9ESVJ9L2AsIFwiXCIpO1xuICAgICAgICAgICAgY3BDbWQgKz0gYC0tZXhjbHVkZSAnJHtleHBhbmRlZFBhdGh9JyBgO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgYXJ0aWZhY3RQYXRoIG9mIHRoaXMuYXJ0aWZhY3RzPy5wYXRocyA/PyBbXSkge1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWRQYXRoID0gVXRpbHMuZXhwYW5kVGV4dChhcnRpZmFjdFBhdGgsIGV4cGFuZGVkKS5yZXBsYWNlKGAke2V4cGFuZGVkLkNJX1BST0pFQ1RfRElSfS9gLCBcIlwiKTtcbiAgICAgICAgICAgIGNwQ21kICs9IGAke2V4cGFuZGVkUGF0aH0gYDtcbiAgICAgICAgfVxuICAgICAgICBjcENtZCArPSBgJHthcnRpZmFjdHNQYXRofS8ke3NhZmVKb2JOYW1lfS8uIHx8IHRydWVcXG5gO1xuICAgICAgICBjb25zdCByZXBvcnREb3RlbnYgPSBVdGlscy5leHBhbmRUZXh0KHRoaXMuYXJ0aWZhY3RzLnJlcG9ydHM/LmRvdGVudiA/PyBudWxsLCBleHBhbmRlZCk7XG4gICAgICAgIGlmIChyZXBvcnREb3RlbnYgIT0gbnVsbCkge1xuICAgICAgICAgICAgY3BDbWQgKz0gYG1rZGlyIC1wICR7YXJ0aWZhY3RzUGF0aH0vJHtzYWZlSm9iTmFtZX0vLmdpdGxhYi1jaS1yZXBvcnRzL2RvdGVudlxcbmA7XG4gICAgICAgICAgICBjcENtZCArPSBgaWYgWyAtZiAke3JlcG9ydERvdGVudn0gXTsgdGhlblxcbmA7XG4gICAgICAgICAgICBjcENtZCArPSBgICByc3luYyAtUmEgJHtyZXBvcnREb3RlbnZ9ICR7YXJ0aWZhY3RzUGF0aH0vJHtzYWZlSm9iTmFtZX0vLmdpdGxhYi1jaS1yZXBvcnRzL2RvdGVudi8uXFxuYDtcbiAgICAgICAgICAgIGNwQ21kICs9IFwiZmlcXG5cIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICBjb25zdCBkb2NrZXJDbWRFeHRyYXMgPSB0aGlzLmFyZ3YubW91bnRDYWNoZSA/IGF3YWl0IHRoaXMubW91bnRDYWNoZUNtZCh3cml0ZVN0cmVhbXMsIGV4cGFuZGVkKSA6IFtdO1xuICAgICAgICBhd2FpdCB0aGlzLmNvcHlPdXQoY3BDbWQsIHN0YXRlRGlyLCBcImFydGlmYWN0c1wiLCBkb2NrZXJDbWRFeHRyYXMpO1xuICAgICAgICBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG5cbiAgICAgICAgaWYgKHJlcG9ydERvdGVudiAhPSBudWxsICYmICFhd2FpdCBmcy5wYXRoRXhpc3RzKGAke2N3ZH0vJHtzdGF0ZURpcn0vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9Ly5naXRsYWItY2ktcmVwb3J0cy9kb3RlbnYvJHtyZXBvcnREb3RlbnZ9YCkpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHt5ZWxsb3cgYXJ0aWZhY3QgcmVwb3J0cyBkb3RlbnYgJyR7cmVwb3J0RG90ZW52fScgY291bGQgbm90IGJlIGZvdW5kfVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVhZGRpciA9IGF3YWl0IGZzLnJlYWRkaXIoYCR7Y3dkfS8ke3N0YXRlRGlyfS9hcnRpZmFjdHMvJHtzYWZlSm9iTmFtZX1gKTtcbiAgICAgICAgaWYgKHJlYWRkaXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7eWVsbG93ICEhIG5vIGFydGlmYWN0cyB3YXMgY29waWVkICEhfVxcbmApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgZXhwb3J0ZWQgYXJ0aWZhY3RzfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hcnRpZmFjdHNUb1NvdXJjZSAmJiAodGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uIHx8IHRoaXMuaW1hZ2VOYW1lKGV4cGFuZGVkKSkpIHtcbiAgICAgICAgICAgIHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW1wicnN5bmNcIiwgXCItLWV4Y2x1ZGU9Ly5naXRsYWItY2ktcmVwb3J0cy9cIiwgXCItYVwiLCBgJHtjd2R9LyR7c3RhdGVEaXJ9L2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfS8uYCwgY3dkXSk7XG4gICAgICAgICAgICBpZiAocmVwb3J0RG90ZW52ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJyc3luY1wiLCBcIi1hXCIsIGAke2N3ZH0vJHtzdGF0ZURpcn0vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9Ly5naXRsYWItY2ktcmVwb3J0cy9kb3RlbnYvLmAsIGN3ZF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgY29waWVkIGFydGlmYWN0cyB0byBjd2R9IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weU91dCAoY21kOiBzdHJpbmcsIHN0YXRlRGlyOiBzdHJpbmcsIHR5cGU6IFwiYXJ0aWZhY3RzXCIgfCBcImNhY2hlXCIsIGRvY2tlckNtZEV4dHJhczogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3Qgc2FmZUpvYk5hbWUgPSB0aGlzLnNhZmVKb2JOYW1lO1xuICAgICAgICBjb25zdCBidWlsZFZvbHVtZU5hbWUgPSB0aGlzLmJ1aWxkVm9sdW1lTmFtZTtcbiAgICAgICAgY29uc3QgY3dkID0gdGhpcy5hcmd2LmN3ZDtcblxuICAgICAgICBhd2FpdCBmcy5ta2RpcnAoYCR7Y3dkfS8ke3N0YXRlRGlyfS8ke3R5cGV9YCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VOYW1lKHRoaXMuX3ZhcmlhYmxlcykpIHtcbiAgICAgICAgICAgIGNvbnN0IHtzdGRvdXQ6IGNvbnRhaW5lcklkfSA9IGF3YWl0IFV0aWxzLmJhc2goYCR7dGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGV9IGNyZWF0ZSAtaSAke2RvY2tlckNtZEV4dHJhcy5qb2luKFwiIFwiKX0gLXYgJHtidWlsZFZvbHVtZU5hbWV9Oi9nY2wtYnVpbGRzLyAtdyAvZ2NsLWJ1aWxkcyBkb2NrZXIuaW8vZmlyZWNvdy9naXRsYWItY2ktbG9jYWwtdXRpbCBiYXNoIC1jIFwiJHtjbWR9XCJgLCBjd2QpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyc1RvQ2xlYW4ucHVzaChjb250YWluZXJJZCk7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwic3RhcnRcIiwgY29udGFpbmVySWQsIFwiLS1hdHRhY2hcIl0pO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcImNwXCIsIGAke2NvbnRhaW5lcklkfTovJHt0eXBlfS8uYCwgYCR7c3RhdGVEaXJ9LyR7dHlwZX0vLmBdLCBjd2QpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuYmFzaChgYmFzaCAtZW8gcGlwZWZhaWwgLWMgXCIke2NtZH1cImAsIGAke2N3ZH0vJHtzdGF0ZURpcn0vYnVpbGRzLyR7c2FmZUpvYk5hbWV9YCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuYmFzaChgYmFzaCAtZW8gcGlwZWZhaWwgLWMgXCIke2NtZH1cImAsIGAke2N3ZH1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dCk7XG4gICAgICAgIHRoaXMuX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge2dyZXkgPiBzdGlsbCBydW5uaW5nLi4ufVxcbmApO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG4gICAgICAgIH0sIDEwMDAwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZpbmlzaGVkU3RyaW5nICgpIHtcbiAgICAgICAgcmV0dXJuIGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBmaW5pc2hlZH0gaW4ge21hZ2VudGEgJHt0aGlzLnByZXR0eUR1cmF0aW9ufX1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJpbnRGaW5pc2hlZFN0cmluZyAoKSB7XG4gICAgICAgIGlmICh0aGlzLmpvYlN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpIHJldHVybjtcbiAgICAgICAgdGhpcy53cml0ZVN0cmVhbXMuc3Rkb3V0KGAke3RoaXMuZ2V0RmluaXNoZWRTdHJpbmcoKX1cXG5gKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByaW50RXhpdGVkU3RyaW5nIChjb2RlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3Qgd3JpdGVTdHJlYW1zID0gdGhpcy53cml0ZVN0cmVhbXM7XG4gICAgICAgIGNvbnN0IGZpbmlzaGVkU3RyID0gdGhpcy5nZXRGaW5pc2hlZFN0cmluZygpO1xuXG4gICAgICAgIC8vIFdvbid0IHByaW50IGlmIGpvYlN0YXR1cyBpcyBcInN1Y2Nlc3NcIiBiZWNhdXNlIHRoYXQgd2lsbCBiZSBwcmludGVkIHZpYSB0aGUgYHByaW50RmluaXNoZWRTdHJpbmcoKWBcbiAgICAgICAgaWYgKHRoaXMuam9iU3RhdHVzID09PSBcIndhcm5pbmdcIikge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihcbiAgICAgICAgICAgICAgICBjaGFsa2Ake2ZpbmlzaGVkU3RyfSB7YmxhY2suYmdZZWxsb3dCcmlnaHQgIFdBUk4gJHtjb2RlLnRvU3RyaW5nKCl9IH1cXG5gXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuam9iU3RhdHVzID09PSBcImZhaWxlZFwiKSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKFxuICAgICAgICAgICAgICAgIGNoYWxrYCR7ZmluaXNoZWRTdHJ9IHtibGFjay5iZ1JlZCAgRkFJTCAke2NvZGUudG9TdHJpbmcoKX0gfVxcbmBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByaW50QWZ0ZXJTY3JpcHRFeGl0ZWRTdHJpbmcgKGNvZGU6IG51bWJlcikge1xuICAgICAgICBjb25zdCB3cml0ZVN0cmVhbXMgPSB0aGlzLndyaXRlU3RyZWFtcztcbiAgICAgICAgY29uc3QgZmluaXNoZWRTdHIgPSB0aGlzLmdldEZpbmlzaGVkU3RyaW5nKCk7XG5cbiAgICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoXG4gICAgICAgICAgICAgICAgY2hhbGtgJHtmaW5pc2hlZFN0cn0ge2JsYWNrLmJnWWVsbG93QnJpZ2h0ICBXQVJOICR7Y29kZS50b1N0cmluZygpfSB9IGFmdGVyX3NjcmlwdFxcbmBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNyZWF0ZURvY2tlck5ldHdvcmsgKG5ldHdvcmtOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qge3N0ZG91dDogbmV0d29ya0lkfSA9IGF3YWl0IFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJuZXR3b3JrXCIsIFwiY3JlYXRlXCIsIGAke25ldHdvcmtOYW1lfWBdKTtcbiAgICAgICAgdGhpcy5fc2VydmljZU5ldHdvcmtJZCA9IG5ldHdvcmtJZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHN0YXJ0U2VydmljZSAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIGV4cGFuZGVkOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSwgc2VydmljZTogU2VydmljZSkge1xuICAgICAgICBjb25zdCBjd2QgPSB0aGlzLmFyZ3YuY3dkO1xuICAgICAgICBsZXQgZG9ja2VyQ21kID0gYCR7dGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGV9IGNyZWF0ZSAtLWludGVyYWN0aXZlIC0tbmV0d29yayBnaXRsYWItY2ktbG9jYWwtJHt0aGlzLmpvYklkfSBgO1xuICAgICAgICB0aGlzLnJlZnJlc2hMb25nUnVubmluZ1NpbGVudFRpbWVvdXQod3JpdGVTdHJlYW1zKTtcblxuICAgICAgICBpZiAoZXhwYW5kZWRbXCJGRl9ESVNBQkxFX1VNQVNLX0ZPUl9ET0NLRVJfRVhFQ1VUT1JcIl0gPT09IFwiZmFsc2VcIikge1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiLS11c2VyIDA6MCBcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFyZ3YucHJpdmlsZWdlZCkge1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiLS1wcml2aWxlZ2VkIFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYXJndi51bGltaXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS11bGltaXQgbm9maWxlPSR7dGhpcy5hcmd2LnVsaW1pdH0gYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qgdm9sdW1lIG9mIHRoaXMuYXJndi52b2x1bWUpIHtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS12b2x1bWUgJHt2b2x1bWV9IGA7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGV4dHJhSG9zdCBvZiB0aGlzLmFyZ3YuZXh0cmFIb3N0KSB7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tYWRkLWhvc3Q9JHtleHRyYUhvc3R9IGA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZXJ2aWNlQWxpYXMgPSBzZXJ2aWNlLmFsaWFzO1xuICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHNlcnZpY2UubmFtZTtcbiAgICAgICAgY29uc3Qgc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbiA9IHNlcnZpY2VOYW1lLnJlcGxhY2UoLyguKikoOi4qKS8sIFwiJDFcIik7XG4gICAgICAgIGNvbnN0IGFsaWFzZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgYWxpYXNlcy5hZGQoc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbi5yZXBsYWNlQWxsKFwiL1wiLCBcIi1cIikpO1xuICAgICAgICBhbGlhc2VzLmFkZChzZXJ2aWNlTmFtZVdpdGhvdXRWZXJzaW9uLnJlcGxhY2VBbGwoXCIvXCIsIFwiX19cIikpO1xuICAgICAgICBpZiAoc2VydmljZUFsaWFzKSB7XG4gICAgICAgICAgICBhbGlhc2VzLmFkZChzZXJ2aWNlQWxpYXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBhbGlhcyBvZiBhbGlhc2VzKSB7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tbmV0d29yay1hbGlhcz0ke2FsaWFzfSBgO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGFuZGVkKSkge1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtZSAnJHtrZXl9PSR7dmFsfScgYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlcnZpY2VFbnRyeXBvaW50ID0gc2VydmljZS5lbnRyeXBvaW50O1xuICAgICAgICBpZiAoc2VydmljZUVudHJ5cG9pbnQpIHtcbiAgICAgICAgICAgIGlmIChzZXJ2aWNlRW50cnlwb2ludFswXSA9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiLS1lbnRyeXBvaW50ICcnIFwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tZW50cnlwb2ludCAke3NlcnZpY2VFbnRyeXBvaW50WzBdfSBgO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRvY2tlckNtZCArPSBgLS12b2x1bWUgJHt0aGlzLmJ1aWxkVm9sdW1lTmFtZX06L2djbC1idWlsZHMgYDtcbiAgICAgICAgZG9ja2VyQ21kICs9IGAtLXZvbHVtZSAke3RoaXMudG1wVm9sdW1lTmFtZX06JHt0aGlzLmZpbGVWYXJpYWJsZXNEaXJ9IGA7XG4gICAgICAgIGRvY2tlckNtZCArPSBgJHtzZXJ2aWNlTmFtZX0gYDtcblxuICAgICAgICBpZiAoc2VydmljZUVudHJ5cG9pbnQ/Lmxlbmd0aCA/PyAwID4gMSkge1xuICAgICAgICAgICAgc2VydmljZUVudHJ5cG9pbnQ/LnNsaWNlKDEpLmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYFwiJHtlfVwiIGA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAoc2VydmljZS5jb21tYW5kID8/IFtdKS5mb3JFYWNoKChlKSA9PiBkb2NrZXJDbWQgKz0gYFwiJHtlLnJlcGxhY2UoL1xcJC9nLCBcIlxcXFwkXCIpfVwiIGApO1xuXG4gICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuXG4gICAgICAgIGNvbnN0IHtzdGRvdXQ6IGNvbnRhaW5lcklkfSA9IGF3YWl0IFV0aWxzLmJhc2goZG9ja2VyQ21kLCBjd2QpO1xuICAgICAgICB0aGlzLl9jb250YWluZXJzVG9DbGVhbi5wdXNoKGNvbnRhaW5lcklkKTtcblxuICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwic3RhcnRcIiwgYCR7Y29udGFpbmVySWR9YF0pO1xuXG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcbiAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgc3RhcnRlZCBzZXJ2aWNlIGltYWdlOiAke3NlcnZpY2VOYW1lfSB3aXRoIGFsaWFzZXM6ICR7QXJyYXkuZnJvbShhbGlhc2VzKS5qb2luKFwiLCBcIil9fSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lcklkO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc2VydmljZUhlYWx0aENoZWNrICh3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgc2VydmljZTogU2VydmljZSwgc2VydmljZUluZGV4OiBudW1iZXIsIHNlcnZpY2VDb250YW5lckxvZ0ZpbGU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBzZXJ2aWNlQWxpYXMgPSBzZXJ2aWNlLmFsaWFzO1xuICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHNlcnZpY2UubmFtZTtcblxuICAgICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJpbWFnZVwiLCBcImluc3BlY3RcIiwgc2VydmljZU5hbWVdKTtcbiAgICAgICAgY29uc3QgaW1hZ2VJbnNwZWN0ID0gSlNPTi5wYXJzZShzdGRvdXQpO1xuXG4gICAgICAgIC8vIENvcGllZCBmcm9tIHRoZSBzdGFydFNlcnZpY2UgYmxvY2suIEltcG9ydGFudCB0aGluZyBpcyB0aGF0IHRoZSBhbGlhc2VzIG1hdGNoXG4gICAgICAgIGNvbnN0IHNlcnZpY2VOYW1lV2l0aG91dFZlcnNpb24gPSBzZXJ2aWNlTmFtZS5yZXBsYWNlKC8oLiopKDouKikvLCBcIiQxXCIpO1xuICAgICAgICBjb25zdCBhbGlhc2VzID0gW3NlcnZpY2VOYW1lV2l0aG91dFZlcnNpb24ucmVwbGFjZUFsbChcIi9cIiwgXCItXCIpLCBzZXJ2aWNlTmFtZVdpdGhvdXRWZXJzaW9uLnJlcGxhY2VBbGwoXCIvXCIsIFwiX19cIildO1xuICAgICAgICBpZiAoc2VydmljZUFsaWFzKSB7XG4gICAgICAgICAgICBhbGlhc2VzLnB1c2goc2VydmljZUFsaWFzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuaXF1ZUFsaWFzID0gYWxpYXNlc1thbGlhc2VzLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIGlmICgoaW1hZ2VJbnNwZWN0WzBdPy5Db25maWc/LkV4cG9zZWRQb3J0cyA/PyBudWxsKSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHt5ZWxsb3cgQ291bGQgbm90IGZpbmQgZXhwb3NlZCB0Y3AgcG9ydHMgJHtzZXJ2aWNlTmFtZX19XFxuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBvcnQgZGVmaW5lZCBpbiB0aGUgaW1hZ2UsIGFuZCB0cnkgdG8gY29ubmVjdCB0byB0aGUgYWxpYXNcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYW55KE9iamVjdC5rZXlzKGltYWdlSW5zcGVjdFswXS5Db25maWcuRXhwb3NlZFBvcnRzKS5tYXAoKHBvcnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXBvcnQuZW5kc1dpdGgoXCIvdGNwXCIpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgY29uc3QgcG9ydE51bSA9IHBhcnNlSW50KHBvcnQucmVwbGFjZShcIi90Y3BcIiwgXCJcIikpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwYXduQ21kID0gW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcInJ1blwiLCBcIi0tcm1cIiwgYC0tbmFtZT1nY2wtd2FpdC1mb3ItaXQtJHt0aGlzLmpvYklkfS0ke3NlcnZpY2VJbmRleH0tJHtwb3J0TnVtfWAsIFwiLS1uZXR3b3JrXCIsIGBnaXRsYWItY2ktbG9jYWwtJHt0aGlzLmpvYklkfWAsIFwiZG9ja2VyLmlvL3N1bWluYTQ2L3dhaXQtZm9yLWl0XCIsIGAke3VuaXF1ZUFsaWFzfToke3BvcnROdW19YCwgXCItdFwiLCBcIjMwXCJdO1xuICAgICAgICAgICAgICAgIHJldHVybiBVdGlscy5zcGF3bihzcGF3bkNtZCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7Z3JlZW5CcmlnaHQgc2VydmljZSBpbWFnZTogJHtzZXJ2aWNlTmFtZX0gaGVhbHRoY2hlY2sgcGFzc2VkIGluIHtncmVlbiAke3ByZXR0eUhydGltZShlbmRUaW1lKX19fVxcbmApO1xuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBBZ2dyZWdhdGVFcnJvcikpIHRocm93IGU7XG4gICAgICAgICAgICBlLmVycm9ycy5mb3JFYWNoKChzaW5nbGVFcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7cmVkQnJpZ2h0IHNlcnZpY2UgaW1hZ2U6ICR7c2VydmljZU5hbWV9IGhlYWx0aGNoZWNrIGZhaWxlZH1cXG5gKTtcbiAgICAgICAgICAgICAgICBzaW5nbGVFcnJvci5tZXNzYWdlLnNwbGl0KC9cXHI/XFxuL2cpLmZvckVhY2goKGxpbmU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7cmVkQnJpZ2h0ICAgJHtsaW5lfX1cXG5gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7cmVkQnJpZ2h0IGFsc28gc2VlICgke3NlcnZpY2VDb250YW5lckxvZ0ZpbGV9KX1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgLy8gS2lsbCBhbGwgd2FpdC1mb3ItaXQgY29udGFpbmVycywgd2hlbiBvbmUgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChPYmplY3Qua2V5cyhpbWFnZUluc3BlY3RbMF0uQ29uZmlnLkV4cG9zZWRQb3J0cykubWFwKChwb3J0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFwb3J0LmVuZHNXaXRoKFwiL3RjcFwiKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvcnROdW0gPSBwYXJzZUludChwb3J0LnJlcGxhY2UoXCIvdGNwXCIsIFwiXCIpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcInJtXCIsIFwiLXZmXCIsIGBnY2wtd2FpdC1mb3ItaXQtJHt0aGlzLmpvYklkfS0ke3NlcnZpY2VJbmRleH0tJHtwb3J0TnVtfWBdKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsZWFudXBKb2JSZXNvdXJjZXMgKGpvYnM/OiBJdGVyYWJsZTxKb2I+KSB7XG4gICAgaWYgKCFqb2JzKSByZXR1cm47XG4gICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGpvYiBvZiBqb2JzKSB7XG4gICAgICAgIHByb21pc2VzLnB1c2goam9iLmNsZWFudXBSZXNvdXJjZXMoKSk7XG4gICAgfVxuICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbn1cbiJdfQ==
|
|
1049
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0RBQTBCO0FBQzFCLCtDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0Isa0VBQXlDO0FBQ3pDLG9EQUE0QjtBQUM1QixtQ0FBOEI7QUFHOUIsaURBQThDO0FBQzlDLG1DQUE4QjtBQUU5QixrREFBMEI7QUFHMUIsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDO0FBMENyQyxNQUFNLGFBQWEsR0FBRyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFO0lBQ3JELElBQUksRUFBRSxTQUFTO0lBQ2YsS0FBSyxFQUFFLFNBQVM7SUFDaEIsSUFBSSxFQUFFLFNBQVM7SUFDZixNQUFNLEVBQUUsU0FBUztJQUNqQixNQUFNLEVBQUUsU0FBUztJQUNqQixNQUFNLEVBQUUsS0FBSztDQUNoQixDQUFDLENBQUM7QUFFSCxNQUFhLEdBQUc7SUFFWixNQUFNLENBQVUsZUFBZSxHQUFHLElBQUksR0FBRyxDQUFDO1FBQ3RDLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsVUFBVTtRQUNyRCxRQUFRLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTO1FBQzdDLGNBQWMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFVBQVU7S0FDbkQsQ0FBQyxDQUFDO0lBRU0sSUFBSSxDQUFPO0lBQ1gsSUFBSSxDQUFTO0lBQ2IsUUFBUSxDQUFTO0lBQ2pCLFlBQVksQ0FBa0I7SUFDOUIsV0FBVyxDQUFzQztJQUNqRCxLQUFLLENBQVM7SUFDZCxLQUFLLENBTVY7SUFFSyxZQUFZLENBRW5CO0lBQ08sSUFBSSxDQUFTO0lBQ2IsTUFBTSxDQUFXO0lBQ2pCLFdBQVcsQ0FBUztJQUNwQixPQUFPLENBQVU7SUFFVCxVQUFVLEdBQTRCLEVBQUUsQ0FBQztJQUNsRCxtQkFBbUIsR0FBa0IsSUFBSSxDQUFD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RSxJQUFvQjtJQUMzRCxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU87SUFDbEIsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDckIsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDRCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDaEMsQ0FBQztBQVBELGtEQU9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0ICogYXMgZG90ZW52IGZyb20gXCJkb3RlbnZcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0IHByZXR0eUhydGltZSBmcm9tIFwicHJldHR5LWhydGltZVwiO1xuaW1wb3J0IHNwbGl0MiBmcm9tIFwic3BsaXQyXCI7XG5pbXBvcnQge1V0aWxzfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHtXcml0ZVN0cmVhbXN9IGZyb20gXCIuL3dyaXRlLXN0cmVhbXNcIjtcbmltcG9ydCB7R2l0RGF0YX0gZnJvbSBcIi4vZ2l0LWRhdGFcIjtcbmltcG9ydCBhc3NlcnQsIHtBc3NlcnRpb25FcnJvcn0gZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHtNdXRleH0gZnJvbSBcIi4vbXV0ZXhcIjtcbmltcG9ydCB7QXJndn0gZnJvbSBcIi4vYXJndlwiO1xuaW1wb3J0IGV4ZWNhIGZyb20gXCJleGVjYVwiO1xuaW1wb3J0IHtDSUNEVmFyaWFibGV9IGZyb20gXCIuL3ZhcmlhYmxlcy1mcm9tLWZpbGVzXCI7XG5cbmNvbnN0IENJX1BST0pFQ1RfRElSID0gXCIvZ2NsLWJ1aWxkc1wiO1xuaW50ZXJmYWNlIEpvYk9wdGlvbnMge1xuICAgIGFyZ3Y6IEFyZ3Y7XG4gICAgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXM7XG4gICAgZGF0YTogYW55O1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBiYXNlTmFtZTogc3RyaW5nO1xuICAgIHBpcGVsaW5lSWlkOiBudW1iZXI7XG4gICAgZ2l0RGF0YTogR2l0RGF0YTtcbiAgICBnbG9iYWxWYXJpYWJsZXM6IHtbbmFtZTogc3RyaW5nXTogc3RyaW5nfTtcbiAgICB2YXJpYWJsZXNGcm9tRmlsZXM6IHtbbmFtZTogc3RyaW5nXTogQ0lDRFZhcmlhYmxlfTtcbiAgICBwcmVkZWZpbmVkVmFyaWFibGVzOiB7W25hbWU6IHN0cmluZ106IGFueX07XG4gICAgbWF0cml4VmFyaWFibGVzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSB8IG51bGw7XG4gICAgbm9kZUluZGV4OiBudW1iZXIgfCBudWxsO1xuICAgIG5vZGVzVG90YWw6IG51bWJlcjtcbiAgICBleHBhbmRWYXJpYWJsZXM6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBDYWNoZSB7XG4gICAgcG9saWN5OiBcInB1bGxcIiB8IFwicHVsbC1wdXNoXCIgfCBcInB1c2hcIjtcbiAgICBrZXk6IHN0cmluZyB8IHtmaWxlczogc3RyaW5nW119O1xuICAgIHBhdGhzOiBzdHJpbmdbXTtcbiAgICB3aGVuOiBcIm9uX3N1Y2Nlc3NcIiB8IFwib25fZmFpbHVyZVwiIHwgXCJhbHdheXNcIjtcbn1cblxuaW50ZXJmYWNlIFNlcnZpY2Uge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBlbnRyeXBvaW50OiBzdHJpbmdbXSB8IG51bGw7XG4gICAgY29tbWFuZDogc3RyaW5nW10gfCBudWxsO1xuICAgIGFsaWFzOiBzdHJpbmcgfCBudWxsO1xuICAgIHZhcmlhYmxlczoge1tuYW1lOiBzdHJpbmddOiBzdHJpbmd9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5lZWQge1xuICAgIGpvYjogc3RyaW5nO1xuICAgIGFydGlmYWN0czogYm9vbGVhbjtcbiAgICBvcHRpb25hbD86IGJvb2xlYW47XG4gICAgcmVmPzogc3RyaW5nO1xuICAgIHBpcGVsaW5lPzogc3RyaW5nO1xuICAgIHByb2plY3Q/OiBzdHJpbmc7XG59XG5cbmNvbnN0IGRhdGVGb3JtYXR0ZXIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh1bmRlZmluZWQsIHtcbiAgICB5ZWFyOiB1bmRlZmluZWQsXG4gICAgbW9udGg6IHVuZGVmaW5lZCxcbiAgICBob3VyOiBcIm51bWVyaWNcIixcbiAgICBtaW51dGU6IFwibnVtZXJpY1wiLFxuICAgIHNlY29uZDogXCJudW1lcmljXCIsXG4gICAgaG91cjEyOiBmYWxzZSxcbn0pO1xuXG5leHBvcnQgY2xhc3MgSm9iIHtcblxuICAgIHN0YXRpYyByZWFkb25seSBpbGxlZ2FsSm9iTmFtZXMgPSBuZXcgU2V0KFtcbiAgICAgICAgXCJpbmNsdWRlXCIsIFwibG9jYWxfY29uZmlndXJhdGlvblwiLCBcImltYWdlXCIsIFwic2VydmljZXNcIixcbiAgICAgICAgXCJzdGFnZXNcIiwgXCJ0eXBlc1wiLCBcImJlZm9yZV9zY3JpcHRcIiwgXCJkZWZhdWx0XCIsXG4gICAgICAgIFwiYWZ0ZXJfc2NyaXB0XCIsIFwidmFyaWFibGVzXCIsIFwiY2FjaGVcIiwgXCJ3b3JrZmxvd1wiLFxuICAgIF0pO1xuXG4gICAgcmVhZG9ubHkgYXJndjogQXJndjtcbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgYmFzZU5hbWU6IHN0cmluZztcbiAgICByZWFkb25seSBkZXBlbmRlbmNpZXM6IHN0cmluZ1tdIHwgbnVsbDtcbiAgICByZWFkb25seSBlbnZpcm9ubWVudD86IHtuYW1lOiBzdHJpbmc7IHVybDogc3RyaW5nIHwgbnVsbH07XG4gICAgcmVhZG9ubHkgam9iSWQ6IG51bWJlcjtcbiAgICByZWFkb25seSBydWxlcz86IHtcbiAgICAgICAgaWY6IHN0cmluZztcbiAgICAgICAgd2hlbjogc3RyaW5nO1xuICAgICAgICBleGlzdHM6IHN0cmluZ1tdO1xuICAgICAgICBhbGxvd19mYWlsdXJlOiBib29sZWFuO1xuICAgICAgICB2YXJpYWJsZXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xuICAgIH1bXTtcblxuICAgIHJlYWRvbmx5IGFsbG93RmFpbHVyZTogYm9vbGVhbiB8IHtcbiAgICAgICAgZXhpdF9jb2RlczogbnVtYmVyIHwgbnVtYmVyW107XG4gICAgfTtcbiAgICByZWFkb25seSB3aGVuOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgZXhpc3RzOiBzdHJpbmdbXTtcbiAgICByZWFkb25seSBwaXBlbGluZUlpZDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGdpdERhdGE6IEdpdERhdGE7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF92YXJpYWJsZXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge307XG4gICAgcHJpdmF0ZSBfcHJlc2NyaXB0c0V4aXRDb2RlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9hZnRlclNjcmlwdHNFeGl0Q29kZSA9IDA7XG4gICAgcHJpdmF0ZSBfY292ZXJhZ2VQZXJjZW50OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9ydW5uaW5nID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfY29udGFpbmVySWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX3NlcnZpY2VOZXR3b3JrSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2NvbnRhaW5lclZvbHVtZU5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dDogTm9kZUpTLlRpbWVvdXQgPSAtMSBhcyBhbnk7XG4gICAgcHJpdmF0ZSBfcHJvZHVjZXJzOiB7bmFtZTogc3RyaW5nOyBkb3RlbnY6IHN0cmluZyB8IG51bGx9W10gfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9qb2JOYW1lUGFkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgX2NvbnRhaW5lcnNUb0NsZWFuOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgX2ZpbGVzVG9SbTogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIF9zdGFydFRpbWU/OiBbbnVtYmVyLCBudW1iZXJdO1xuICAgIHByaXZhdGUgX2VuZFRpbWU/OiBbbnVtYmVyLCBudW1iZXJdO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBqb2JEYXRhOiBhbnk7XG4gICAgcHJpdmF0ZSByZWFkb25seSB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcztcblxuICAgIGNvbnN0cnVjdG9yIChvcHQ6IEpvYk9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgam9iRGF0YSA9IG9wdC5kYXRhO1xuICAgICAgICBjb25zdCBnaXREYXRhID0gb3B0LmdpdERhdGE7XG4gICAgICAgIGNvbnN0IGpvYlZhcmlhYmxlcyA9IGpvYkRhdGEudmFyaWFibGVzID8/IHt9O1xuICAgICAgICBjb25zdCBnbG9iYWxWYXJpYWJsZXMgPSBvcHQuZ2xvYmFsVmFyaWFibGVzID8/IHt9O1xuICAgICAgICBjb25zdCB2YXJpYWJsZXNGcm9tRmlsZXMgPSBvcHQudmFyaWFibGVzRnJvbUZpbGVzO1xuICAgICAgICBjb25zdCBhcmd2ID0gb3B0LmFyZ3Y7XG4gICAgICAgIGNvbnN0IGN3ZCA9IGFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IGFyZ3Yuc3RhdGVEaXI7XG4gICAgICAgIGNvbnN0IGFyZ3ZWYXJpYWJsZXMgPSBhcmd2LnZhcmlhYmxlO1xuICAgICAgICBjb25zdCBwcmVkZWZpbmVkVmFyaWFibGVzID0gb3B0LnByZWRlZmluZWRWYXJpYWJsZXM7XG4gICAgICAgIGNvbnN0IGV4cGFuZFZhcmlhYmxlcyA9IG9wdC5leHBhbmRWYXJpYWJsZXMgPz8gdHJ1ZTtcblxuICAgICAgICB0aGlzLmFyZ3YgPSBhcmd2O1xuICAgICAgICB0aGlzLndyaXRlU3RyZWFtcyA9IG9wdC53cml0ZVN0cmVhbXM7XG4gICAgICAgIHRoaXMuZ2l0RGF0YSA9IG9wdC5naXREYXRhO1xuICAgICAgICB0aGlzLm5hbWUgPSBvcHQubmFtZTtcbiAgICAgICAgdGhpcy5iYXNlTmFtZSA9IG9wdC5iYXNlTmFtZTtcbiAgICAgICAgdGhpcy5qb2JJZCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDApO1xuICAgICAgICB0aGlzLmpvYkRhdGEgPSBvcHQuZGF0YTtcbiAgICAgICAgdGhpcy5waXBlbGluZUlpZCA9IG9wdC5waXBlbGluZUlpZDtcblxuICAgICAgICB0aGlzLndoZW4gPSBqb2JEYXRhLndoZW4gfHwgXCJvbl9zdWNjZXNzXCI7XG4gICAgICAgIHRoaXMuZXhpc3RzID0gam9iRGF0YS5leGlzdHMgfHwgW107XG4gICAgICAgIHRoaXMuYWxsb3dGYWlsdXJlID0gam9iRGF0YS5hbGxvd19mYWlsdXJlID8/IGZhbHNlO1xuICAgICAgICB0aGlzLmRlcGVuZGVuY2llcyA9IGpvYkRhdGEuZGVwZW5kZW5jaWVzIHx8IG51bGw7XG4gICAgICAgIHRoaXMucnVsZXMgPSBqb2JEYXRhLnJ1bGVzIHx8IG51bGw7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSB0eXBlb2Ygam9iRGF0YS5lbnZpcm9ubWVudCA9PT0gXCJzdHJpbmdcIiA/IHtuYW1lOiBqb2JEYXRhLmVudmlyb25tZW50fSA6IGpvYkRhdGEuZW52aXJvbm1lbnQ7XG5cbiAgICAgICAgLy8gU2V0IEZGX0RJU0FCTEVfVU1BU0tfRk9SX0RPQ0tFUl9FWEVDVVRPUlxuICAgICAgICBnbG9iYWxWYXJpYWJsZXNbXCJGRl9ESVNBQkxFX1VNQVNLX0ZPUl9ET0NLRVJfRVhFQ1VUT1JcIl0gPSBhcmd2LnVtYXNrID8gXCJmYWxzZVwiIDogXCJ0cnVlXCI7XG5cbiAgICAgICAgY29uc3QgbWF0cml4VmFyaWFibGVzID0gb3B0Lm1hdHJpeFZhcmlhYmxlcyA/PyB7fTtcbiAgICAgICAgdGhpcy5fdmFyaWFibGVzID0gey4uLmdsb2JhbFZhcmlhYmxlcywgLi4uam9iVmFyaWFibGVzLCAuLi5tYXRyaXhWYXJpYWJsZXMsIC4uLnByZWRlZmluZWRWYXJpYWJsZXMsIC4uLmFyZ3ZWYXJpYWJsZXN9O1xuXG4gICAgICAgIGxldCBjaVByb2plY3REaXIgPSBgJHtjd2R9YDtcbiAgICAgICAgaWYgKHRoaXMuam9iRGF0YVtcImltYWdlXCJdKSB7XG4gICAgICAgICAgICBjaVByb2plY3REaXIgPSBDSV9QUk9KRUNUX0RJUjtcbiAgICAgICAgfSBlbHNlIGlmIChhcmd2LnNoZWxsSXNvbGF0aW9uKSB7XG4gICAgICAgICAgICBjaVByb2plY3REaXIgPSBgJHtjd2R9LyR7c3RhdGVEaXJ9L2J1aWxkcy8ke3RoaXMuc2FmZUpvYk5hbWV9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9KT0JfSURcIl0gPSBgJHt0aGlzLmpvYklkfWA7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9QSVBFTElORV9JRFwiXSA9IGAke3RoaXMucGlwZWxpbmVJaWQgKyAxMDAwfWA7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9QSVBFTElORV9JSURcIl0gPSBgJHt0aGlzLnBpcGVsaW5lSWlkfWA7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9KT0JfTkFNRVwiXSA9IGAke3RoaXMubmFtZX1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfSk9CX05BTUVfU0xVR1wiXSA9IGAke3RoaXMubmFtZS5yZXBsYWNlKC9bXmEtelxcZF0rL2lnLCBcIi1cIikucmVwbGFjZSgvXi0vLCBcIlwiKS5zbGljZSgwLCA2MykucmVwbGFjZSgvLSQvLCBcIlwiKS50b0xvd2VyQ2FzZSgpfWA7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9KT0JfU1RBR0VcIl0gPSBgJHt0aGlzLnN0YWdlfWA7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9QUk9KRUNUX0RJUlwiXSA9IGNpUHJvamVjdERpcjtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX0pPQl9VUkxcIl0gPSBgaHR0cHM6Ly8ke2dpdERhdGEucmVtb3RlLmhvc3R9LyR7Z2l0RGF0YS5yZW1vdGUuZ3JvdXB9LyR7Z2l0RGF0YS5yZW1vdGUucHJvamVjdH0vLS9qb2JzLyR7dGhpcy5qb2JJZH1gOyAvLyBDaGFuZ2VzIG9uIHJlcnVuLlxuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfUElQRUxJTkVfVVJMXCJdID0gYGh0dHBzOi8vJHtnaXREYXRhLnJlbW90ZS5ob3N0fS8ke2dpdERhdGEucmVtb3RlLmdyb3VwfS8ke2dpdERhdGEucmVtb3RlLnByb2plY3R9L3BpcGVsaW5lcy8ke3RoaXMucGlwZWxpbmVJaWR9YDtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX0VOVklST05NRU5UX05BTUVcIl0gPSB0aGlzLmVudmlyb25tZW50Py5uYW1lID8/IFwiXCI7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9FTlZJUk9OTUVOVF9TTFVHXCJdID0gdGhpcy5lbnZpcm9ubWVudD8ubmFtZT8ucmVwbGFjZSgvW15hLXpcXGRdKy9pZywgXCItXCIpLnJlcGxhY2UoL14tLywgXCJcIikuc2xpY2UoMCwgMjMpLnJlcGxhY2UoLy0kLywgXCJcIikudG9Mb3dlckNhc2UoKSA/PyBcIlwiO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfRU5WSVJPTk1FTlRfVVJMXCJdID0gdGhpcy5lbnZpcm9ubWVudD8udXJsID8/IFwiXCI7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9OT0RFX0lOREVYXCJdID0gYCR7b3B0Lm5vZGVJbmRleH1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfTk9ERV9UT1RBTFwiXSA9IGAke29wdC5ub2Rlc1RvdGFsfWA7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9SRUdJU1RSWVwiXSA9IGBsb2NhbC1yZWdpc3RyeS4ke3RoaXMuZ2l0RGF0YS5yZW1vdGUuaG9zdH1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfUkVHSVNUUllfSU1BR0VcIl0gPSBgJENJX1JFR0lTVFJZLyR7dGhpcy5fdmFyaWFibGVzW1wiQ0lfUFJPSkVDVF9QQVRIXCJdLnRvTG93ZXJDYXNlKCl9YDtcblxuICAgICAgICAvLyBGaW5kIGVudmlyb25tZW50IG1hdGNoZWQgdmFyaWFibGVzXG4gICAgICAgIGlmICh0aGlzLmVudmlyb25tZW50ICYmIGV4cGFuZFZhcmlhYmxlcykge1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWQgPSBVdGlscy5leHBhbmRWYXJpYWJsZXModGhpcy5fdmFyaWFibGVzKTtcbiAgICAgICAgICAgIHRoaXMuZW52aXJvbm1lbnQubmFtZSA9IFV0aWxzLmV4cGFuZFRleHQodGhpcy5lbnZpcm9ubWVudC5uYW1lLCBleHBhbmRlZCk7XG4gICAgICAgICAgICB0aGlzLmVudmlyb25tZW50LnVybCA9IFV0aWxzLmV4cGFuZFRleHQodGhpcy5lbnZpcm9ubWVudC51cmwsIGV4cGFuZGVkKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbnZNYXRjaGVkVmFyaWFibGVzID0gVXRpbHMuZmluZEVudk1hdGNoZWRWYXJpYWJsZXModmFyaWFibGVzRnJvbUZpbGVzLCB0aGlzLmZpbGVWYXJpYWJsZXNEaXIsIHRoaXMuZW52aXJvbm1lbnQpO1xuXG4gICAgICAgIC8vIE1lcmdlIGFuZCBleHBhbmQgYWZ0ZXIgZmluZGluZyBlbnYgbWF0Y2hlZCB2YXJpYWJsZXNcbiAgICAgICAgdGhpcy5fdmFyaWFibGVzID0gey4uLmdsb2JhbFZhcmlhYmxlcywgLi4uam9iVmFyaWFibGVzLCAuLi5tYXRyaXhWYXJpYWJsZXMsIC4uLnByZWRlZmluZWRWYXJpYWJsZXMsIC4uLmVudk1hdGNoZWRWYXJpYWJsZXMsIC4uLmFyZ3ZWYXJpYWJsZXN9O1xuXG4gICAgICAgIC8vIFNldCB7d2hlbiwgYWxsb3dGYWlsdXJlfSBiYXNlZCBvbiBydWxlcyByZXN1bHRcbiAgICAgICAgaWYgKHRoaXMucnVsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVSZXN1bHQgPSBVdGlscy5nZXRSdWxlc1Jlc3VsdCh7Y3dkLCBydWxlczogdGhpcy5ydWxlcywgdmFyaWFibGVzOiB0aGlzLl92YXJpYWJsZXN9LCB0aGlzLndoZW4pO1xuICAgICAgICAgICAgdGhpcy53aGVuID0gcnVsZVJlc3VsdC53aGVuO1xuICAgICAgICAgICAgdGhpcy5hbGxvd0ZhaWx1cmUgPSBydWxlUmVzdWx0LmFsbG93RmFpbHVyZTtcbiAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlcyA9IHsuLi5nbG9iYWxWYXJpYWJsZXMsIC4uLmpvYlZhcmlhYmxlcywgLi4ucnVsZVJlc3VsdC52YXJpYWJsZXMsIC4uLm1hdHJpeFZhcmlhYmxlcywgLi4ucHJlZGVmaW5lZFZhcmlhYmxlcywgLi4uZW52TWF0Y2hlZFZhcmlhYmxlcywgLi4uYXJndlZhcmlhYmxlc307XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGVsZXRlIHZhcmlhYmxlcyB0aGUgdXNlciBpbnRlbnRpb25hbGx5IHdhbnRzIHVuc2V0XG4gICAgICAgIGZvciAoY29uc3QgdW5zZXRWYXJpYWJsZSBvZiBhcmd2LnVuc2V0VmFyaWFibGVzKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fdmFyaWFibGVzW3Vuc2V0VmFyaWFibGVdO1xuICAgICAgICB9XG5cbiAgICAgICAgYXNzZXJ0KHRoaXMuc2NyaXB0cyB8fCB0aGlzLnRyaWdnZXIsIGNoYWxrYHtibHVlQnJpZ2h0ICR7dGhpcy5uYW1lfX0gbXVzdCBoYXZlIHNjcmlwdCBzcGVjaWZpZWRgKTtcblxuICAgICAgICBhc3NlcnQoISh0aGlzLmludGVyYWN0aXZlICYmICF0aGlzLmFyZ3Yuc2hlbGxFeGVjdXRvck5vSW1hZ2UpLCBjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0gQEludGVyYWN0aXZlIGRlY29yYXRvciBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tbm8tc2hlbGwtZXhlY3V0b3Itbm8taW1hZ2VgKTtcblxuICAgICAgICBpZiAodGhpcy5pbnRlcmFjdGl2ZSAmJiAodGhpcy53aGVuICE9PSBcIm1hbnVhbFwiIHx8IHRoaXMuaW1hZ2VOYW1lKHRoaXMuX3ZhcmlhYmxlcykgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3Ioe21lc3NhZ2U6IGAke3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0gQEludGVyYWN0aXZlIGRlY29yYXRvciBjYW5ub3QgaGF2ZSBpbWFnZTogYW5kIG11c3QgYmUgd2hlbjptYW51YWxgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pbmplY3RTU0hBZ2VudCAmJiB0aGlzLmltYWdlTmFtZSh0aGlzLl92YXJpYWJsZXMpID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3Ioe21lc3NhZ2U6IGAke3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0gQEluamVjdFNTSEFnZW50IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBpbWFnZTpgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleHBhbmRlZCA9IFV0aWxzLmV4cGFuZFZhcmlhYmxlcyh0aGlzLl92YXJpYWJsZXMpO1xuICAgICAgICBmb3IgKGNvbnN0IFtpLCBjXSBvZiBPYmplY3QuZW50cmllczxhbnk+KHRoaXMuY2FjaGUpKSB7XG4gICAgICAgICAgICBjLnBvbGljeSA9IFV0aWxzLmV4cGFuZFRleHQoYy5wb2xpY3ksIGV4cGFuZGVkKTtcbiAgICAgICAgICAgIGFzc2VydChbXCJwdWxsXCIsIFwicHVzaFwiLCBcInB1bGwtcHVzaFwiXS5pbmNsdWRlcyhjLnBvbGljeSksIGNoYWxrYHtibHVlICR7dGhpcy5uYW1lfX0gY2FjaGVbJHtpfV0ucG9saWN5IGlzIG5vdCAncHVsbCcsICdwdXNoJyBvciAncHVsbC1wdXNoJ2ApO1xuICAgICAgICAgICAgYXNzZXJ0KFtcIm9uX3N1Y2Nlc3NcIiwgXCJvbl9mYWlsdXJlXCIsIFwiYWx3YXlzXCJdLmluY2x1ZGVzKGMud2hlbiksIGNoYWxrYHtibHVlICR7dGhpcy5uYW1lfX0gY2FjaGVbJHtpfV0ud2hlbiBpcyBub3QgJ29uX3N1Y2Nlc3MnLCAnb25fZmFpbHVyZScgb3IgJ2Fsd2F5cydgKTtcbiAgICAgICAgICAgIGFzc2VydChBcnJheS5pc0FycmF5KGMucGF0aHMpLCBjaGFsa2B7Ymx1ZSAke3RoaXMubmFtZX19IGNhY2hlWyR7aX1dLnBhdGhzIG11c3QgYmUgYXJyYXlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgW2ksIHNdIG9mIE9iamVjdC5lbnRyaWVzPGFueT4odGhpcy5zZXJ2aWNlcykpIHtcbiAgICAgICAgICAgIGFzc2VydChzLm5hbWUsIGNoYWxrYHtibHVlICR7dGhpcy5uYW1lfX0gc2VydmljZXNbJHtpfV0ubmFtZSBpcyB1bmRlZmluZWRgKTtcbiAgICAgICAgICAgIGFzc2VydCghcy5jb21tYW5kIHx8IEFycmF5LmlzQXJyYXkocy5jb21tYW5kKSwgY2hhbGtge2JsdWUgJHt0aGlzLm5hbWV9fSBzZXJ2aWNlc1ske2l9XS5jb21tYW5kIG11c3QgYmUgYW4gYXJyYXlgKTtcbiAgICAgICAgICAgIGFzc2VydCghcy5lbnRyeXBvaW50IHx8IEFycmF5LmlzQXJyYXkocy5lbnRyeXBvaW50KSwgY2hhbGtge2JsdWUgJHt0aGlzLm5hbWV9fSBzZXJ2aWNlc1ske2l9XS5lbnRyeXBvaW50IG11c3QgYmUgYW4gYXJyYXlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFzc2VydCghdGhpcy5hcnRpZmFjdHM/LnBhdGhzIHx8IEFycmF5LmlzQXJyYXkodGhpcy5hcnRpZmFjdHMucGF0aHMpLCBjaGFsa2B7Ymx1ZSAke3RoaXMubmFtZX19IGFydGlmYWN0cy5wYXRocyBtdXN0IGJlIGFuIGFycmF5YCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VOYW1lKHRoaXMuX3ZhcmlhYmxlcykgJiYgYXJndi5tb3VudENhY2hlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jYWNoZSkge1xuICAgICAgICAgICAgICAgIGMucGF0aHMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gVXRpbHMuZXhwYW5kVGV4dChwLCBleHBhbmRlZCk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydCghcGF0aC5pbmNsdWRlcyhcIipcIiksIGNoYWxrYHtibHVlICR7dGhpcy5uYW1lfX0gY2Fubm90IGhhdmUgKiBpbiBjYWNoZSBwYXRocywgd2hlbiAtLW1vdW50LWNhY2hlIGlzIGVuYWJsZWRgKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBqb2JTdGF0dXMgKCkge1xuICAgICAgICBpZiAodGhpcy5wcmVTY3JpcHRzRXhpdENvZGUgPT0gbnVsbCkgcmV0dXJuIFwicGVuZGluZ1wiO1xuICAgICAgICBpZiAodGhpcy5wcmVTY3JpcHRzRXhpdENvZGUgPT0gMCkgcmV0dXJuIFwic3VjY2Vzc1wiO1xuXG4gICAgICAgIGxldCBhbGxvd2VkRXhpdENvZGVzID0gWzBdO1xuICAgICAgICBjb25zdCBhbGxvd0ZhaWx1cmUgPSB0aGlzLmFsbG93RmFpbHVyZTtcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgYWxsb3dGYWlsdXJlKSB7XG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICAgIGlmIChhbGxvd0ZhaWx1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEV4aXRDb2RlcyA9IFt0aGlzLnByZVNjcmlwdHNFeGl0Q29kZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgICAgIGlmICghIEFycmF5LmlzQXJyYXkoYWxsb3dGYWlsdXJlLmV4aXRfY29kZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRFeGl0Q29kZXMgPSBbYWxsb3dGYWlsdXJlLmV4aXRfY29kZXNdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRFeGl0Q29kZXMgPSBhbGxvd0ZhaWx1cmUuZXhpdF9jb2RlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB0eXBlOiAgJHt0eXBlb2YgYWxsb3dGYWlsdXJlfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFsbG93ZWRFeGl0Q29kZXMuaW5jbHVkZXModGhpcy5wcmVTY3JpcHRzRXhpdENvZGUpID8gXCJ3YXJuaW5nXCIgOiBcImZhaWxlZFwiO1xuICAgIH1cblxuICAgIGdldCBhcnRpZmFjdHNUb1NvdXJjZSAoKSB7XG4gICAgICAgIGlmICh0aGlzLmpvYkRhdGFbXCJnY2xBcnRpZmFjdHNUb1NvdXJjZVwiXSAhPSBudWxsKSByZXR1cm4gdGhpcy5qb2JEYXRhW1wiZ2NsQXJ0aWZhY3RzVG9Tb3VyY2VcIl07XG4gICAgICAgIHJldHVybiB0aGlzLmFyZ3YuYXJ0aWZhY3RzVG9Tb3VyY2U7XG4gICAgfVxuXG4gICAgZ2V0IHByZXR0eUR1cmF0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2VuZFRpbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBwcmV0dHlIcnRpbWUodGhpcy5fZW5kVGltZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRUaW1lXG4gICAgICAgICAgICA/IHByZXR0eUhydGltZShwcm9jZXNzLmhydGltZSh0aGlzLl9zdGFydFRpbWUpKVxuICAgICAgICAgICAgOiBcIjAgbXNcIjtcbiAgICB9XG5cbiAgICBnZXQgZm9ybWF0dGVkSm9iTmFtZSAoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcFByZWZpeCA9IHRoaXMuYXJndi5zaG93VGltZXN0YW1wc1xuICAgICAgICAgICAgPyBgWyR7ZGF0ZUZvcm1hdHRlci5mb3JtYXQobmV3IERhdGUoKSl9ICR7dGhpcy5wcmV0dHlEdXJhdGlvbi5wYWRTdGFydCg3KX1dIGBcbiAgICAgICAgICAgIDogXCJcIjtcblxuICAgICAgICAvLyBbMTY6MzM6MTkgMS4zNyBtaW5dIG15LWpvYiAgICAgPiBoZWxsbyB3b3JsZFxuICAgICAgICByZXR1cm4gY2hhbGtgJHt0aW1lc3RhbXBQcmVmaXh9e2JsdWVCcmlnaHQgJHt0aGlzLm5hbWUucGFkRW5kKHRoaXMuam9iTmFtZVBhZCl9fWA7XG4gICAgfVxuXG4gICAgZ2V0IHNhZmVKb2JOYW1lICgpIHtcbiAgICAgICAgcmV0dXJuIFV0aWxzLnNhZmVEb2NrZXJTdHJpbmcodGhpcy5uYW1lKTtcbiAgICB9XG5cbiAgICBnZXQgbmVlZHMgKCk6IE5lZWRbXSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wibmVlZHNcIl0gPz8gbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgYnVpbGRWb2x1bWVOYW1lICgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYGdjbC0ke3RoaXMuc2FmZUpvYk5hbWV9LSR7dGhpcy5qb2JJZH0tYnVpbGRgO1xuICAgIH1cblxuICAgIGdldCB0bXBWb2x1bWVOYW1lICgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYGdjbC0ke3RoaXMuc2FmZUpvYk5hbWV9LSR7dGhpcy5qb2JJZH0tdG1wYDtcbiAgICB9XG5cbiAgICBnZXQgc2VydmljZXMgKCk6IFNlcnZpY2VbXSB7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VzOiBTZXJ2aWNlW10gPSBbXTtcbiAgICAgICAgaWYgKCF0aGlzLmpvYkRhdGFbXCJzZXJ2aWNlc1wiXSkgcmV0dXJuIFtdO1xuXG4gICAgICAgIGZvciAoY29uc3Qgc2VydmljZSBvZiBPYmplY3QudmFsdWVzPGFueT4odGhpcy5qb2JEYXRhW1wic2VydmljZXNcIl0pKSB7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRlZCA9IFV0aWxzLmV4cGFuZFZhcmlhYmxlcyh7Li4udGhpcy5fdmFyaWFibGVzLCAuLi5zZXJ2aWNlW1widmFyaWFibGVzXCJdfSk7XG4gICAgICAgICAgICBsZXQgc2VydmljZU5hbWUgPSBVdGlscy5leHBhbmRUZXh0KHNlcnZpY2VbXCJuYW1lXCJdLCBleHBhbmRlZCk7XG4gICAgICAgICAgICBzZXJ2aWNlTmFtZSA9IHNlcnZpY2VOYW1lLmluY2x1ZGVzKFwiOlwiKSA/IHNlcnZpY2VOYW1lIDogYCR7c2VydmljZU5hbWV9OmxhdGVzdGA7XG4gICAgICAgICAgICBzZXJ2aWNlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBzZXJ2aWNlTmFtZSxcbiAgICAgICAgICAgICAgICBlbnRyeXBvaW50OiBzZXJ2aWNlW1wiZW50cnlwb2ludFwiXSA/PyBudWxsLFxuICAgICAgICAgICAgICAgIGNvbW1hbmQ6IHNlcnZpY2VbXCJjb21tYW5kXCJdID8/IG51bGwsXG4gICAgICAgICAgICAgICAgdmFyaWFibGVzOiBleHBhbmRlZCxcbiAgICAgICAgICAgICAgICBhbGlhczogVXRpbHMuZXhwYW5kVGV4dChzZXJ2aWNlW1wiYWxpYXNcIl0sIGV4cGFuZGVkKSA/PyBudWxsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlcnZpY2VzO1xuICAgIH1cblxuICAgIHNldCBqb2JOYW1lUGFkIChqb2JOYW1lUGFkOiBudW1iZXIpIHtcbiAgICAgICAgYXNzZXJ0KHRoaXMuX2pvYk5hbWVQYWQgPT0gbnVsbCwgXCJ0aGlzLl9qb2JOYW1lUGFkIGNhbiBvbmx5IGJlIHNldCBvbmNlXCIpO1xuICAgICAgICB0aGlzLl9qb2JOYW1lUGFkID0gam9iTmFtZVBhZDtcbiAgICB9XG5cbiAgICBnZXQgam9iTmFtZVBhZCAoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2pvYk5hbWVQYWQgPz8gMDtcbiAgICB9XG5cbiAgICBnZXQgcHJvZHVjZXJzICgpOiB7bmFtZTogc3RyaW5nOyBkb3RlbnY6IHN0cmluZyB8IG51bGx9W10gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2R1Y2VycztcbiAgICB9XG5cbiAgICBzZXQgcHJvZHVjZXJzIChwcm9kdWNlcnM6IHtuYW1lOiBzdHJpbmc7IGRvdGVudjogc3RyaW5nIHwgbnVsbH1bXSB8IG51bGwpIHtcbiAgICAgICAgYXNzZXJ0KHRoaXMuX3Byb2R1Y2VycyA9PSBudWxsLCBcInRoaXMuX3Byb2R1Y2VycyBjYW4gb25seSBiZSBzZXQgb25jZVwiKTtcbiAgICAgICAgdGhpcy5fcHJvZHVjZXJzID0gcHJvZHVjZXJzO1xuICAgIH1cblxuICAgIGdldCBzdGFnZSAoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcInN0YWdlXCJdIHx8IFwidGVzdFwiO1xuICAgIH1cblxuICAgIGdldCBpbnRlcmFjdGl2ZSAoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJnY2xJbnRlcmFjdGl2ZVwiXSB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgaW5qZWN0U1NIQWdlbnQgKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wiZ2NsSW5qZWN0U1NIQWdlbnRcIl0gfHwgZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IGRlc2NyaXB0aW9uICgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wiZ2NsRGVzY3JpcHRpb25cIl0gPz8gXCJcIjtcbiAgICB9XG5cbiAgICBnZXQgYXJ0aWZhY3RzICgpOiB7cGF0aHM6IHN0cmluZ1tdOyBleGNsdWRlPzogc3RyaW5nW107IHJlcG9ydHM/OiB7ZG90ZW52Pzogc3RyaW5nfTsgd2hlbj86IHN0cmluZ30gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcImFydGlmYWN0c1wiXTtcbiAgICB9XG5cbiAgICBnZXQgY2FjaGUgKCk6IENhY2hlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wiY2FjaGVcIl0gfHwgW107XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFVuaXF1ZUNhY2hlTmFtZSAoY3dkOiBzdHJpbmcsIGV4cGFuZGVkOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSwga2V5OiBhbnkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIgfHwga2V5ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBVdGlscy5leHBhbmRUZXh0KGtleSA/PyBcImRlZmF1bHRcIiwgZXhwYW5kZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZXMgPSBrZXlbXCJmaWxlc1wiXS5tYXAoKGY6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgbGV0IHBhdGggPSBVdGlscy5leHBhbmRUZXh0KGYsIGV4cGFuZGVkKTtcbiAgICAgICAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoYCR7Q0lfUFJPSkVDVF9ESVJ9L2ApKSB7XG4gICAgICAgICAgICAgICAgcGF0aCA9IHBhdGguc2xpY2UoYCR7Q0lfUFJPSkVDVF9ESVJ9L2AubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBgJHtjd2R9LyR7cGF0aH1gO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gXCJtZC1cIiArIGF3YWl0IFV0aWxzLmNoZWNrc3VtRmlsZXMoZmlsZXMpO1xuICAgIH1cblxuICAgIGdldCBiZWZvcmVTY3JpcHRzICgpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IGJlZm9yZVNjcmlwdHMgPSB0aGlzLmpvYkRhdGFbXCJiZWZvcmVfc2NyaXB0XCJdIHx8IFtdO1xuICAgICAgICByZXR1cm4gdHlwZW9mIGJlZm9yZVNjcmlwdHMgPT09IFwic3RyaW5nXCIgPyBbYmVmb3JlU2NyaXB0c10gOiBiZWZvcmVTY3JpcHRzO1xuICAgIH1cblxuICAgIGdldCBhZnRlclNjcmlwdHMgKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgYWZ0ZXJTY3JpcHRzID0gdGhpcy5qb2JEYXRhW1wiYWZ0ZXJfc2NyaXB0XCJdIHx8IFtdO1xuICAgICAgICByZXR1cm4gdHlwZW9mIGFmdGVyU2NyaXB0cyA9PT0gXCJzdHJpbmdcIiA/IFthZnRlclNjcmlwdHNdIDogYWZ0ZXJTY3JpcHRzO1xuICAgIH1cblxuICAgIGdldCBzY3JpcHRzICgpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IHNjcmlwdCA9IHRoaXMuam9iRGF0YVtcInNjcmlwdFwiXTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBzY3JpcHQgPT09IFwic3RyaW5nXCIgPyBbc2NyaXB0XSA6IHNjcmlwdDtcbiAgICB9XG5cbiAgICBnZXQgdHJpZ2dlciAoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcInRyaWdnZXJcIl07XG4gICAgfVxuXG4gICAgZ2V0IHByZVNjcmlwdHNFeGl0Q29kZSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGU7XG4gICAgfVxuXG4gICAgZ2V0IGFmdGVyU2NyaXB0c0V4aXRDb2RlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FmdGVyU2NyaXB0c0V4aXRDb2RlO1xuICAgIH1cblxuICAgIGdldCBzdGFydGVkICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bm5pbmcgfHwgdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlICE9PSBudWxsO1xuICAgIH1cblxuICAgIGdldCBmaW5pc2hlZCAoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5fcnVubmluZyAmJiB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUgIT09IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0IGNvdmVyYWdlUGVyY2VudCAoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb3ZlcmFnZVBlcmNlbnQ7XG4gICAgfVxuXG4gICAgZ2V0IGZpbGVWYXJpYWJsZXNEaXIgKCkge1xuICAgICAgICByZXR1cm4gYC90bXAvZ2l0bGFiLWNpLWxvY2FsLWZpbGUtdmFyaWFibGVzLSR7dGhpcy5fdmFyaWFibGVzW1wiQ0lfUFJPSkVDVF9QQVRIX1NMVUdcIl19LSR7dGhpcy5qb2JJZH1gO1xuICAgIH1cblxuICAgIGFzeW5jIHN0YXJ0ICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5fcnVubmluZyA9IHRydWU7XG5cbiAgICAgICAgY29uc3QgYXJndiA9IHRoaXMuYXJndjtcbiAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgY29uc3Qgd3JpdGVTdHJlYW1zID0gdGhpcy53cml0ZVN0cmVhbXM7XG4gICAgICAgIGNvbnN0IHJlcG9ydHNEb3RlbnZWYXJpYWJsZXMgPSBhd2FpdCB0aGlzLmluaXRQcm9kdWNlclJlcG9ydHNEb3RlbnZWYXJpYWJsZXMod3JpdGVTdHJlYW1zLCBVdGlscy5leHBhbmRWYXJpYWJsZXModGhpcy5fdmFyaWFibGVzKSk7XG4gICAgICAgIGNvbnN0IGV4cGFuZGVkID0gVXRpbHMudW5zY2FwZSQkVmFyaWFibGVzKFV0aWxzLmV4cGFuZFZhcmlhYmxlcyh7Li4udGhpcy5fdmFyaWFibGVzLCAuLi5yZXBvcnRzRG90ZW52VmFyaWFibGVzfSkpO1xuICAgICAgICBjb25zdCBpbWFnZU5hbWUgPSB0aGlzLmltYWdlTmFtZShleHBhbmRlZCk7XG4gICAgICAgIGNvbnN0IHNhZmVKb2JOYW1lID0gdGhpcy5zYWZlSm9iTmFtZTtcblxuICAgICAgICBjb25zdCBvdXRwdXRMb2dGaWxlUGF0aCA9IGAke2FyZ3YuY3dkfS8ke2FyZ3Yuc3RhdGVEaXJ9L291dHB1dC8ke3NhZmVKb2JOYW1lfS5sb2dgO1xuICAgICAgICBhd2FpdCBmcy5lbnN1cmVGaWxlKG91dHB1dExvZ0ZpbGVQYXRoKTtcbiAgICAgICAgYXdhaXQgZnMudHJ1bmNhdGUob3V0cHV0TG9nRmlsZVBhdGgpO1xuXG4gICAgICAgIGlmICghdGhpcy5pbnRlcmFjdGl2ZSkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgc3RhcnRpbmd9ICR7aW1hZ2VOYW1lID8/IFwic2hlbGxcIn0gKHt5ZWxsb3cgJHt0aGlzLnN0YWdlfX0pXFxuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW1hZ2VOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBidWlsZFZvbHVtZU5hbWUgPSB0aGlzLmJ1aWxkVm9sdW1lTmFtZTtcbiAgICAgICAgICAgIGNvbnN0IHRtcFZvbHVtZU5hbWUgPSB0aGlzLnRtcFZvbHVtZU5hbWU7XG4gICAgICAgICAgICBjb25zdCBmaWxlVmFyaWFibGVzRGlyID0gdGhpcy5maWxlVmFyaWFibGVzRGlyO1xuXG4gICAgICAgICAgICBjb25zdCB2b2x1bWVQcm9taXNlcyA9IFtdO1xuICAgICAgICAgICAgdm9sdW1lUHJvbWlzZXMucHVzaChVdGlscy5zcGF3bihbdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwidm9sdW1lXCIsIFwiY3JlYXRlXCIsIGAke2J1aWxkVm9sdW1lTmFtZX1gXSwgYXJndi5jd2QpKTtcbiAgICAgICAgICAgIHZvbHVtZVByb21pc2VzLnB1c2goVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcInZvbHVtZVwiLCBcImNyZWF0ZVwiLCBgJHt0bXBWb2x1bWVOYW1lfWBdLCBhcmd2LmN3ZCkpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyVm9sdW1lTmFtZXMucHVzaChidWlsZFZvbHVtZU5hbWUpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyVm9sdW1lTmFtZXMucHVzaCh0bXBWb2x1bWVOYW1lKTtcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHZvbHVtZVByb21pc2VzKTtcblxuICAgICAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hMb25nUnVubmluZ1NpbGVudFRpbWVvdXQod3JpdGVTdHJlYW1zKTtcblxuICAgICAgICAgICAgbGV0IGNob3duT3B0ID0gXCIwOjBcIjtcbiAgICAgICAgICAgIGxldCBjaG1vZE9wdCA9IFwiYStyd1wiO1xuICAgICAgICAgICAgaWYgKGV4cGFuZGVkW1wiRkZfRElTQUJMRV9VTUFTS19GT1JfRE9DS0VSX0VYRUNVVE9SXCJdID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgVXRpbHMuc3Bhd24oW1wiZG9ja2VyXCIsIFwicnVuXCIsIFwiLS1ybVwiLCBpbWFnZU5hbWUsIFwic2hcIiwgXCItY1wiLCBcImVjaG8gXFxcIiQoaWQgLXUpOiQoaWQgLWcpXFxcIlwiXSk7XG4gICAgICAgICAgICAgICAgY2hvd25PcHQgPSBzdGRvdXQ7XG4gICAgICAgICAgICAgICAgaWYgKGNob3duT3B0ID09IFwiMDowXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2htb2RPcHQgPSBcImctd1wiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHtzdGRvdXQ6IGNvbnRhaW5lcklkfSA9IGF3YWl0IFV0aWxzLnNwYXduKFtcbiAgICAgICAgICAgICAgICB0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJjcmVhdGVcIiwgXCItLXVzZXI9MDowXCIsIGAtLXZvbHVtZT0ke2J1aWxkVm9sdW1lTmFtZX06L2djbC1idWlsZHNgLCBgLS12b2x1bWU9JHt0bXBWb2x1bWVOYW1lfToke3RoaXMuZmlsZVZhcmlhYmxlc0Rpcn1gLCBcImRvY2tlci5pby9maXJlY293L2dpdGxhYi1jaS1sb2NhbC11dGlsXCIsXG4gICAgICAgICAgICAgICAgLi4uW1wic2hcIiwgXCItY1wiLCBgY2hvd24gJHtjaG93bk9wdH0gLVIgL2djbC1idWlsZHMvICYmIGNobW9kICR7Y2htb2RPcHR9IC1SIC9nY2wtYnVpbGRzLyAmJiBjaG93biAke2Nob3duT3B0fSAtUiAvdG1wLyAmJiBjaG1vZCAke2NobW9kT3B0fSAtUiAvdG1wL2BdLFxuICAgICAgICAgICAgXSwgYXJndi5jd2QpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyc1RvQ2xlYW4ucHVzaChjb250YWluZXJJZCk7XG4gICAgICAgICAgICBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyhmaWxlVmFyaWFibGVzRGlyKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJjcFwiLCBgJHtmaWxlVmFyaWFibGVzRGlyfS8uYCwgYCR7Y29udGFpbmVySWR9OiR7ZmlsZVZhcmlhYmxlc0Rpcn1gXSwgYXJndi5jd2QpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcImNwXCIsIGAke2FyZ3Yuc3RhdGVEaXJ9L2J1aWxkcy8uZG9ja2VyLy5gLCBgJHtjb250YWluZXJJZH06L2djbC1idWlsZHNgXSwgYXJndi5jd2QpO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcInN0YXJ0XCIsIFwiLS1hdHRhY2hcIiwgY29udGFpbmVySWRdLCBhcmd2LmN3ZCk7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwicm1cIiwgXCItdmZcIiwgY29udGFpbmVySWRdLCBhcmd2LmN3ZCk7XG4gICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBjb3BpZWQgdG8gZG9ja2VyIHZvbHVtZXN9IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlcnZpY2VzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlRG9ja2VyTmV0d29yayhgZ2l0bGFiLWNpLWxvY2FsLSR7dGhpcy5qb2JJZH1gKTtcblxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcy5tYXAoYXN5bmMgKHNlcnZpY2UsIHNlcnZpY2VJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHNlcnZpY2UubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wdWxsSW1hZ2Uod3JpdGVTdHJlYW1zLCBzZXJ2aWNlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VDb250YWluZXJJZCA9IGF3YWl0IHRoaXMuc3RhcnRTZXJ2aWNlKHdyaXRlU3RyZWFtcywgVXRpbHMuZXhwYW5kVmFyaWFibGVzKHsuLi5leHBhbmRlZCwgLi4uc2VydmljZS52YXJpYWJsZXN9KSwgc2VydmljZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VDb250YWluZXJMb2dGaWxlID0gYCR7YXJndi5jd2R9LyR7YXJndi5zdGF0ZURpcn0vc2VydmljZXMtb3V0cHV0LyR7dGhpcy5zYWZlSm9iTmFtZX0vJHtzZXJ2aWNlTmFtZX0tJHtzZXJ2aWNlSW5kZXh9LmxvZ2A7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2VydmljZUhlYWx0aENoZWNrKHdyaXRlU3RyZWFtcywgc2VydmljZSwgc2VydmljZUluZGV4LCBzZXJ2aWNlQ29udGFpbmVyTG9nRmlsZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHtzdGRvdXQsIHN0ZGVycn0gPSBhd2FpdCBVdGlscy5zcGF3bihbdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwibG9nc1wiLCBzZXJ2aWNlQ29udGFpbmVySWRdKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZnMuZW5zdXJlRmlsZShzZXJ2aWNlQ29udGFpbmVyTG9nRmlsZSk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGZzLnByb21pc2VzLndyaXRlRmlsZShzZXJ2aWNlQ29udGFpbmVyTG9nRmlsZSwgYCMjIyBzdGRvdXQgIyMjXFxuJHtzdGRvdXR9XFxuIyMjIHN0ZGVyciAjIyNcXG4ke3N0ZGVycn1cXG5gKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuZXhlY1ByZVNjcmlwdHMoZXhwYW5kZWQpO1xuICAgICAgICBpZiAodGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlID09IG51bGwpIHRocm93IEVycm9yKFwidGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlIG11c3QgYmUgZGVmaW5lZCFcIik7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5leGVjQWZ0ZXJTY3JpcHRzKGV4cGFuZGVkKTtcblxuICAgICAgICB0aGlzLl9ydW5uaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2VuZFRpbWUgPSB0aGlzLl9lbmRUaW1lID8/IHByb2Nlc3MuaHJ0aW1lKHRoaXMuX3N0YXJ0VGltZSk7XG4gICAgICAgIHRoaXMucHJpbnRGaW5pc2hlZFN0cmluZygpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuY29weUNhY2hlT3V0KHRoaXMud3JpdGVTdHJlYW1zLCBleHBhbmRlZCk7XG4gICAgICAgIGF3YWl0IHRoaXMuY29weUFydGlmYWN0c091dCh0aGlzLndyaXRlU3RyZWFtcywgZXhwYW5kZWQpO1xuXG4gICAgICAgIGlmICh0aGlzLmpvYkRhdGFbXCJjb3ZlcmFnZVwiXSkge1xuICAgICAgICAgICAgdGhpcy5fY292ZXJhZ2VQZXJjZW50ID0gYXdhaXQgVXRpbHMuZ2V0Q292ZXJhZ2VQZXJjZW50KGFyZ3YuY3dkLCBhcmd2LnN0YXRlRGlyLCB0aGlzLmpvYkRhdGFbXCJjb3ZlcmFnZVwiXSwgc2FmZUpvYk5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbGVhbnVwUmVzb3VyY2VzKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgY2xlYW51cFJlc291cmNlcyAoKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9sb25nUnVubmluZ1NpbGVudFRpbWVvdXQpO1xuXG4gICAgICAgIGlmICghdGhpcy5hcmd2LmNsZWFudXApIHJldHVybjtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcInJtXCIsIFwiLXZmXCIsIC4uLnRoaXMuX2NvbnRhaW5lcnNUb0NsZWFuXSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGFzc2VydChlIGluc3RhbmNlb2YgRXJyb3IsIFwiZSBpcyBub3QgaW5zdGFuY2VvZiBFcnJvclwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9zZXJ2aWNlTmV0d29ya0lkKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJuZXR3b3JrXCIsIFwicm1cIiwgYCR7dGhpcy5fc2VydmljZU5ldHdvcmtJZH1gXSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGUgaW5zdGFuY2VvZiBFcnJvciwgXCJlIGlzIG5vdCBpbnN0YW5jZW9mIEVycm9yXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJ2b2x1bWVcIiwgXCJybVwiLCAuLi50aGlzLl9jb250YWluZXJWb2x1bWVOYW1lc10pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhc3NlcnQoZSBpbnN0YW5jZW9mIEVycm9yLCBcImUgaXMgbm90IGluc3RhbmNlb2YgRXJyb3JcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBybVByb21pc2VzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiB0aGlzLl9maWxlc1RvUm0pIHtcbiAgICAgICAgICAgIHJtUHJvbWlzZXMucHVzaChmcy5ybShmaWxlLCB7cmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZX0pKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChybVByb21pc2VzKTtcblxuICAgICAgICBjb25zdCBmaWxlVmFyaWFibGVzRGlyID0gdGhpcy5maWxlVmFyaWFibGVzRGlyO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZnMucm0oZmlsZVZhcmlhYmxlc0Rpciwge3JlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWV9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXNzZXJ0KGUgaW5zdGFuY2VvZiBFcnJvciwgXCJlIGlzIG5vdCBpbnN0YW5jZW9mIEVycm9yXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUluamVjdFNTSEFnZW50T3B0aW9ucyAoKSB7XG4gICAgICAgIGlmICghdGhpcy5pbmplY3RTU0hBZ2VudCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09IFwiZGFyd2luXCIgfHwgL15kYXJ3aW4vLmV4ZWMocHJvY2Vzcy5lbnYuT1NUWVBFID8/IFwiXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCItLWVudiBTU0hfQVVUSF9TT0NLPS9ydW4vaG9zdC1zZXJ2aWNlcy9zc2gtYXV0aC5zb2NrIC12IC9ydW4vaG9zdC1zZXJ2aWNlcy9zc2gtYXV0aC5zb2NrOi9ydW4vaG9zdC1zZXJ2aWNlcy9zc2gtYXV0aC5zb2NrXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAtLWVudiBTU0hfQVVUSF9TT0NLPSR7cHJvY2Vzcy5lbnYuU1NIX0FVVEhfU09DS30gLXYgJHtwcm9jZXNzLmVudi5TU0hfQVVUSF9TT0NLfToke3Byb2Nlc3MuZW52LlNTSF9BVVRIX1NPQ0t9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlU2NyaXB0Q29tbWFuZHMgKHNjcmlwdHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIGxldCBjbWQgPSBcIlwiO1xuICAgICAgICBzY3JpcHRzLmZvckVhY2goKHNjcmlwdCkgPT4ge1xuICAgICAgICAgICAgLy8gUHJpbnQgY29tbWFuZCBlY2hvJ2VkIGluIGNvbG9yXG4gICAgICAgICAgICBjb25zdCBzcGxpdCA9IHNjcmlwdC5zcGxpdCgvXFxyP1xcbi8pO1xuICAgICAgICAgICAgY29uc3QgbXVsdGlsaW5lVGV4dCA9IHNwbGl0Lmxlbmd0aCA+IDEgPyBcIiAjIGNvbGxhcHNlZCBtdWx0aS1saW5lIGNvbW1hbmRcIiA6IFwiXCI7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gc3BsaXRbMF0/LnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKS5yZXBsYWNlKC9cIi9nLCBcIlxcXFxcXFwiXCIpLnJlcGxhY2UoL1skXS9nLCBcIlxcXFwkXCIpO1xuICAgICAgICAgICAgY21kICs9IGNoYWxrYGVjaG8gXCJ7Z3JlZW4gJCAke3RleHR9JHttdWx0aWxpbmVUZXh0fX1cIlxcbmA7XG5cbiAgICAgICAgICAgIC8vIEV4ZWN1dGUgYWN0dWFsIHNjcmlwdFxuICAgICAgICAgICAgY21kICs9IGAke3NjcmlwdH1cXG5gO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNtZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIG1vdW50Q2FjaGVDbWQgKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBleHBhbmRlZDoge1trZXk6IHN0cmluZ106IHN0cmluZ30pIHtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VOYW1lKGV4cGFuZGVkKSAmJiAhdGhpcy5hcmd2Lm1vdW50Q2FjaGUpIHJldHVybiBbXTtcblxuICAgICAgICBjb25zdCBjbWQ6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICBjb25zdCB1bmlxdWVDYWNoZU5hbWUgPSBhd2FpdCB0aGlzLmdldFVuaXF1ZUNhY2hlTmFtZSh0aGlzLmFyZ3YuY3dkLCBleHBhbmRlZCwgYy5rZXkpO1xuICAgICAgICAgICAgYy5wYXRocy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IFV0aWxzLmV4cGFuZFRleHQocCwgZXhwYW5kZWQpO1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IG1vdW50aW5nIGNhY2hlfSBmb3IgcGF0aCAke3BhdGh9XFxuYCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FjaGVNb3VudCA9IFV0aWxzLnNhZmVEb2NrZXJTdHJpbmcoYGdjbC0ke2V4cGFuZGVkLkNJX1BST0pFQ1RfUEFUSF9TTFVHfS0ke3VuaXF1ZUNhY2hlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICBjbWQucHVzaChcIi12XCIsIGAke2NhY2hlTW91bnR9Oi9nY2wtYnVpbGRzLyR7cGF0aH1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBleGVjUHJlU2NyaXB0cyAoZXhwYW5kZWQ6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHByZXNjcmlwdHMgPSB0aGlzLmJlZm9yZVNjcmlwdHMuY29uY2F0KHRoaXMuc2NyaXB0cyk7XG4gICAgICAgIGV4cGFuZGVkW1wiQ0lfSk9CX1NUQVRVU1wiXSA9IFwicnVubmluZ1wiO1xuXG4gICAgICAgIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSA9IGF3YWl0IHRoaXMuZXhlY1NjcmlwdHMocHJlc2NyaXB0cywgZXhwYW5kZWQsIFwiXCIpO1xuICAgICAgICBleHBhbmRlZFtcIkNJX0pPQl9TVEFUVVNcIl0gPSB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUgPT09IDAgPyBcInN1Y2Nlc3NcIiA6IFwiZmFpbGVkXCI7XG5cbiAgICAgICAgdGhpcy5wcmludEV4aXRlZFN0cmluZyh0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZXhlY0FmdGVyU2NyaXB0cyAoZXhwYW5kZWQ6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBcIlJ1bm5pbmcgYWZ0ZXIgc2NyaXB0Li4uXCI7XG4gICAgICAgIHRoaXMuX2FmdGVyU2NyaXB0c0V4aXRDb2RlID0gYXdhaXQgdGhpcy5leGVjU2NyaXB0cyh0aGlzLmFmdGVyU2NyaXB0cywgZXhwYW5kZWQsIG1lc3NhZ2UpO1xuXG4gICAgICAgIHRoaXMucHJpbnRBZnRlclNjcmlwdEV4aXRlZFN0cmluZyh0aGlzLl9hZnRlclNjcmlwdHNFeGl0Q29kZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBleGVjU2NyaXB0cyAoc2NyaXB0czogc3RyaW5nW10sIGV4cGFuZGVkOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSwgbWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3QgY3dkID0gdGhpcy5hcmd2LmN3ZDtcbiAgICAgICAgY29uc3Qgc3RhdGVEaXIgPSB0aGlzLmFyZ3Yuc3RhdGVEaXI7XG4gICAgICAgIGNvbnN0IHNhZmVKb2JOYW1lID0gdGhpcy5zYWZlSm9iTmFtZTtcbiAgICAgICAgY29uc3Qgb3V0cHV0RmlsZXNQYXRoID0gYCR7Y3dkfS8ke3N0YXRlRGlyfS9vdXRwdXQvJHtzYWZlSm9iTmFtZX0ubG9nYDtcbiAgICAgICAgY29uc3QgYnVpbGRWb2x1bWVOYW1lID0gdGhpcy5idWlsZFZvbHVtZU5hbWU7XG4gICAgICAgIGNvbnN0IHRtcFZvbHVtZU5hbWUgPSB0aGlzLnRtcFZvbHVtZU5hbWU7XG4gICAgICAgIGNvbnN0IGltYWdlTmFtZSA9IHRoaXMuaW1hZ2VOYW1lKGV4cGFuZGVkKTtcbiAgICAgICAgY29uc3Qgd3JpdGVTdHJlYW1zID0gdGhpcy53cml0ZVN0cmVhbXM7XG5cbiAgICAgICAgaWYgKHNjcmlwdHMubGVuZ3RoID09PSAwIHx8IHNjcmlwdHNbMF0gPT0gbnVsbCkgcmV0dXJuIDA7XG5cbiAgICAgICAgaWYgKG1lc3NhZ2UubGVuZ3RoID4gMCkgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgJHttZXNzYWdlfX1cXG5gKTtcblxuICAgICAgICAvLyBDb3B5IGdpdCB0cmFja2VkIGZpbGVzIHRvIGJ1aWxkIGZvbGRlciBpZiBzaGVsbCBpc29sYXRpb24gZW5hYmxlZC5cbiAgICAgICAgaWYgKCFpbWFnZU5hbWUgJiYgdGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uKSB7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5yc3luY1RyYWNrZWRGaWxlcyhjd2QsIHN0YXRlRGlyLCBgJHtzYWZlSm9iTmFtZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmludGVyYWN0aXZlKSB7XG4gICAgICAgICAgICBjb25zdCBpQ21kID0gdGhpcy5nZW5lcmF0ZVNjcmlwdENvbW1hbmRzKHNjcmlwdHMpO1xuICAgICAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVDcCA9IGV4ZWNhKGlDbWQsIHtcbiAgICAgICAgICAgICAgICBjd2QsXG4gICAgICAgICAgICAgICAgc2hlbGw6IFwiYmFzaFwiLFxuICAgICAgICAgICAgICAgIHN0ZGlvOiBbXCJpbmhlcml0XCIsIFwiaW5oZXJpdFwiLCBcImluaGVyaXRcIl0sXG4gICAgICAgICAgICAgICAgZW52OiB7Li4uZXhwYW5kZWQsIC4uLnByb2Nlc3MuZW52fSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIHZvaWQgaW50ZXJhY3RpdmVDcC5vbihcImV4aXRcIiwgKGNvZGUpID0+IHJlc29sdmUoY29kZSA/PyAwKSk7XG4gICAgICAgICAgICAgICAgdm9pZCBpbnRlcmFjdGl2ZUNwLm9uKFwiZXJyb3JcIiwgKGVycikgPT4gcmVqZWN0KGVycikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlZnJlc2hMb25nUnVubmluZ1NpbGVudFRpbWVvdXQod3JpdGVTdHJlYW1zKTtcblxuICAgICAgICBpZiAoaW1hZ2VOYW1lKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnB1bGxJbWFnZSh3cml0ZVN0cmVhbXMsIGltYWdlTmFtZSk7XG5cbiAgICAgICAgICAgIGxldCBkb2NrZXJDbWQgPSBgJHt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZX0gY3JlYXRlIC0taW50ZXJhY3RpdmUgJHt0aGlzLmdlbmVyYXRlSW5qZWN0U1NIQWdlbnRPcHRpb25zKCl9IGA7XG4gICAgICAgICAgICBpZiAodGhpcy5hcmd2LnByaXZpbGVnZWQpIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCItLXByaXZpbGVnZWQgXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmFyZ3YudWxpbWl0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLXVsaW1pdCBub2ZpbGU9JHt0aGlzLmFyZ3YudWxpbWl0fSBgO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZXhwYW5kZWRbXCJGRl9ESVNBQkxFX1VNQVNLX0ZPUl9ET0NLRVJfRVhFQ1VUT1JcIl0gPT09IFwiZmFsc2VcIikge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIi0tdXNlciAwOjAgXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmFyZ3YuY29udGFpbmVyTWFjQWRkcmVzcykge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS1tYWMtYWRkcmVzcyBcIiR7dGhpcy5hcmd2LmNvbnRhaW5lck1hY0FkZHJlc3N9XCIgYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaW1hZ2VVc2VyID0gdGhpcy5pbWFnZVVzZXIoZXhwYW5kZWQpO1xuICAgICAgICAgICAgaWYgKGltYWdlVXNlcikge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS11c2VyICR7aW1hZ2VVc2VyfSBgO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5zZXJ2aWNlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLW5ldHdvcmsgZ2l0bGFiLWNpLWxvY2FsLSR7dGhpcy5qb2JJZH0gYDtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCItLW5ldHdvcmstYWxpYXM9YnVpbGQgXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgbmV0d29yayBvZiB0aGlzLmFyZ3YubmV0d29yaykge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS1uZXR3b3JrICR7bmV0d29ya30gYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLXZvbHVtZSAke2J1aWxkVm9sdW1lTmFtZX06L2djbC1idWlsZHMgYDtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS12b2x1bWUgJHt0bXBWb2x1bWVOYW1lfToke3RoaXMuZmlsZVZhcmlhYmxlc0Rpcn0gYDtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIi0td29ya2RpciAvZ2NsLWJ1aWxkcyBcIjtcblxuICAgICAgICAgICAgZm9yIChjb25zdCB2b2x1bWUgb2YgdGhpcy5hcmd2LnZvbHVtZSkge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS12b2x1bWUgJHt2b2x1bWV9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZXh0cmFIb3N0IG9mIHRoaXMuYXJndi5leHRyYUhvc3QpIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tYWRkLWhvc3Q9JHtleHRyYUhvc3R9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhleHBhbmRlZCkpIHtcbiAgICAgICAgICAgICAgICAvLyBSZXBsYWNpbmcgYCdgIHdpdGggYCdcXCcnYCB0byBjb3JyZWN0bHkgaGFuZGxlIHNpbmdsZSBxdW90ZXMoaWYgYHZhbGAgY29udGFpbnMgYCdgKSBpbiBzaGVsbCBjb21tYW5kc1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgICAtZSAnJHtrZXl9PSR7dmFsLnJlcGxhY2UoLycvZywgXCInXFxcXCcnXCIpfScgXFxcXFxcbmA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmltYWdlRW50cnlwb2ludCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmltYWdlRW50cnlwb2ludFswXSA9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIi0tZW50cnlwb2ludCAnJyBcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tZW50cnlwb2ludCAke3RoaXMuaW1hZ2VFbnRyeXBvaW50WzBdfSBgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAkeyhhd2FpdCB0aGlzLm1vdW50Q2FjaGVDbWQod3JpdGVTdHJlYW1zLCBleHBhbmRlZCkpLmpvaW4oXCIgXCIpfSBgO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAke2ltYWdlTmFtZX0gYDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaW1hZ2VFbnRyeXBvaW50Py5sZW5ndGggPz8gMCA+IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmltYWdlRW50cnlwb2ludD8uc2xpY2UoMSkuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYFwiJHtlfVwiIGA7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcInNoIC1jIFxcXCJcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImlmIFsgLXggL3Vzci9sb2NhbC9iaW4vYmFzaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC91c3IvbG9jYWwvYmluL2Jhc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbGlmIFsgLXggL3Vzci9iaW4vYmFzaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC91c3IvYmluL2Jhc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbGlmIFsgLXggL2Jpbi9iYXNoIF07IHRoZW5cXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4ZWMgL2Jpbi9iYXNoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxpZiBbIC14IC91c3IvbG9jYWwvYmluL3NoIF07IHRoZW5cXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4ZWMgL3Vzci9sb2NhbC9iaW4vc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbGlmIFsgLXggL3Vzci9iaW4vc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvdXNyL2Jpbi9zaCBcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImVsaWYgWyAteCAvYmluL3NoIF07IHRoZW5cXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4ZWMgL2Jpbi9zaCBcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImVsaWYgWyAteCAvYnVzeWJveC9zaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC9idXN5Ym94L3NoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxzZVxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZWNobyBzaGVsbCBub3QgZm91bmRcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4aXQgMVxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZmlcXG5cXFwiXCI7XG5cbiAgICAgICAgICAgIGNvbnN0IHtzdGRvdXQ6IGNvbnRhaW5lcklkfSA9IGF3YWl0IFV0aWxzLmJhc2goZG9ja2VyQ21kLCBjd2QpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVySWQgPSBjb250YWluZXJJZDtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lcnNUb0NsZWFuLnB1c2godGhpcy5fY29udGFpbmVySWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5jb3B5Q2FjaGVJbih3cml0ZVN0cmVhbXMsIGV4cGFuZGVkKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb3B5QXJ0aWZhY3RzSW4od3JpdGVTdHJlYW1zKTtcblxuICAgICAgICBsZXQgY21kID0gXCJzZXQgLWVvIHBpcGVmYWlsXFxuXCI7XG4gICAgICAgIGNtZCArPSBcImV4ZWMgMDwgL2Rldi9udWxsXFxuXCI7XG5cbiAgICAgICAgaWYgKCFpbWFnZU5hbWUgJiYgdGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uKSB7XG4gICAgICAgICAgICBjbWQgKz0gYGNkICR7c3RhdGVEaXJ9L2J1aWxkcy8ke3NhZmVKb2JOYW1lfS9cXG5gO1xuICAgICAgICB9XG4gICAgICAgIGNtZCArPSB0aGlzLmdlbmVyYXRlU2NyaXB0Q29tbWFuZHMoc2NyaXB0cyk7XG5cbiAgICAgICAgY21kICs9IFwiZXhpdCAwXFxuXCI7XG5cbiAgICAgICAgY29uc3Qgam9iU2NyaXB0RmlsZSA9IGAke2N3ZH0vJHtzdGF0ZURpcn0vc2NyaXB0cy8ke3NhZmVKb2JOYW1lfV8ke3RoaXMuam9iSWR9YDtcbiAgICAgICAgYXdhaXQgZnMub3V0cHV0RmlsZShqb2JTY3JpcHRGaWxlLCBjbWQsIFwidXRmLThcIik7XG4gICAgICAgIGF3YWl0IGZzLmNobW9kKGpvYlNjcmlwdEZpbGUsIFwiMDc1NVwiKTtcbiAgICAgICAgdGhpcy5fZmlsZXNUb1JtLnB1c2goam9iU2NyaXB0RmlsZSk7XG5cbiAgICAgICAgaWYgKGltYWdlTmFtZSkge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcImNwXCIsIGAke3N0YXRlRGlyfS9zY3JpcHRzLyR7c2FmZUpvYk5hbWV9XyR7dGhpcy5qb2JJZH1gLCBgJHt0aGlzLl9jb250YWluZXJJZH06L2djbC1jbWRgXSwgY3dkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNwID0gZXhlY2EodGhpcy5fY29udGFpbmVySWQgPyBgJHt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZX0gc3RhcnQgLS1hdHRhY2ggLWkgJHt0aGlzLl9jb250YWluZXJJZH1gIDogXCJiYXNoXCIsIHtcbiAgICAgICAgICAgIGN3ZCxcbiAgICAgICAgICAgIHNoZWxsOiBcImJhc2hcIixcbiAgICAgICAgICAgIGVudjogaW1hZ2VOYW1lID8gcHJvY2Vzcy5lbnYgOiBleHBhbmRlZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgb3V0RnVuYyA9IChsaW5lOiBzdHJpbmcsIHN0cmVhbTogKHR4dDogc3RyaW5nKSA9PiB2b2lkLCBjb2xvcml6ZTogKHN0cjogc3RyaW5nKSA9PiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICAgICAgc3RyZWFtKGAke3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0gYCk7XG4gICAgICAgICAgICBpZiAoIWxpbmUuc3RhcnRzV2l0aChcIlxcdTAwMWJbMzJtJFwiKSkge1xuICAgICAgICAgICAgICAgIHN0cmVhbShgJHtjb2xvcml6ZShcIj5cIil9IGApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RyZWFtKGAke2xpbmV9XFxuYCk7XG4gICAgICAgICAgICBmcy5hcHBlbmRGaWxlU3luYyhvdXRwdXRGaWxlc1BhdGgsIGAke2xpbmV9XFxuYCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcXVpZXQgPSB0aGlzLmFyZ3YucXVpZXQ7XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFxdWlldCkge1xuICAgICAgICAgICAgICAgIGNwLnN0ZG91dD8ucGlwZShzcGxpdDIoKSkub24oXCJkYXRhXCIsIChlOiBzdHJpbmcpID0+IG91dEZ1bmMoZSwgd3JpdGVTdHJlYW1zLnN0ZG91dC5iaW5kKHdyaXRlU3RyZWFtcyksIChzKSA9PiBjaGFsa2B7Z3JlZW5CcmlnaHQgJHtzfX1gKSk7XG4gICAgICAgICAgICAgICAgY3Auc3RkZXJyPy5waXBlKHNwbGl0MigpKS5vbihcImRhdGFcIiwgKGU6IHN0cmluZykgPT4gb3V0RnVuYyhlLCB3cml0ZVN0cmVhbXMuc3RkZXJyLmJpbmQod3JpdGVTdHJlYW1zKSwgKHMpID0+IGNoYWxrYHtyZWRCcmlnaHQgJHtzfX1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2b2lkIGNwLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4gcmVzb2x2ZShjb2RlID8/IDApKTtcbiAgICAgICAgICAgIHZvaWQgY3Aub24oXCJlcnJvclwiLCAoZXJyKSA9PiByZWplY3QoZXJyKSk7XG5cbiAgICAgICAgICAgIGlmIChpbWFnZU5hbWUpIHtcbiAgICAgICAgICAgICAgICBjcC5zdGRpbj8uZW5kKFwiL2djbC1jbWRcIik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNwLnN0ZGluPy5lbmQoYC4vJHtzdGF0ZURpcn0vc2NyaXB0cy8ke3NhZmVKb2JOYW1lfV8ke3RoaXMuam9iSWR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW1hZ2VOYW1lICh2YXJzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSA9IHt9KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5qb2JEYXRhW1wiaW1hZ2VcIl07XG4gICAgICAgIGlmICghaW1hZ2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFyZ3Yuc2hlbGxFeGVjdXRvck5vSW1hZ2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLmdpdGxhYi5jb20vZWUvY2kvcnVubmVycy9ob3N0ZWRfcnVubmVycy9saW51eC5odG1sI2NvbnRhaW5lci1pbWFnZXNcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJkb2NrZXIuaW8vcnVieTozLjFcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleHBhbmRlZCA9IFV0aWxzLmV4cGFuZFZhcmlhYmxlcyh2YXJzKTtcbiAgICAgICAgY29uc3QgaW1hZ2VOYW1lID0gVXRpbHMuZXhwYW5kVGV4dChpbWFnZS5uYW1lLCBleHBhbmRlZCk7XG4gICAgICAgIHJldHVybiBpbWFnZU5hbWUuaW5jbHVkZXMoXCI6XCIpID8gaW1hZ2VOYW1lIDogYCR7aW1hZ2VOYW1lfTpsYXRlc3RgO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW1hZ2VVc2VyICh2YXJzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSA9IHt9KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5qb2JEYXRhW1wiaW1hZ2VcIl07XG4gICAgICAgIGlmICghaW1hZ2UpIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoIWltYWdlW1wiZG9ja2VyXCJdKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIFV0aWxzLmV4cGFuZFRleHQoaW1hZ2VbXCJkb2NrZXJcIl1bXCJ1c2VyXCJdLCB2YXJzKTtcbiAgICB9XG5cbiAgICBnZXQgaW1hZ2VFbnRyeXBvaW50ICgpOiBzdHJpbmdbXSB8IG51bGwge1xuICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMuam9iRGF0YVtcImltYWdlXCJdO1xuXG4gICAgICAgIGlmICghaW1hZ2U/LmVudHJ5cG9pbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGFzc2VydChBcnJheS5pc0FycmF5KGltYWdlLmVudHJ5cG9pbnQpLCBcImltYWdlOmVudHJ5cG9pbnQgbXVzdCBiZSBhbiBhcnJheVwiKTtcbiAgICAgICAgcmV0dXJuIGltYWdlLmVudHJ5cG9pbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBwdWxsSW1hZ2UgKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBpbWFnZVRvUHVsbDogc3RyaW5nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwiaW1hZ2VcIiwgXCJpbnNwZWN0XCIsIGltYWdlVG9QdWxsXSk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwicHVsbFwiLCBpbWFnZVRvUHVsbF0pO1xuICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgcHVsbGVkfSAke2ltYWdlVG9QdWxsfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hMb25nUnVubmluZ1NpbGVudFRpbWVvdXQod3JpdGVTdHJlYW1zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgaW5pdFByb2R1Y2VyUmVwb3J0c0RvdGVudlZhcmlhYmxlcyAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIGV4cGFuZGVkOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgICAgICBjb25zdCBjd2QgPSB0aGlzLmFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IHRoaXMuYXJndi5zdGF0ZURpcjtcbiAgICAgICAgY29uc3QgcHJvZHVjZXJzID0gdGhpcy5wcm9kdWNlcnM7XG4gICAgICAgIGxldCBwcm9kdWNlclJlcG9ydHNFbnZzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgcHJvZHVjZXIgb2YgcHJvZHVjZXJzID8/IFtdKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9kdWNlckRvdGVudiA9IFV0aWxzLmV4cGFuZFRleHQocHJvZHVjZXIuZG90ZW52LCBleHBhbmRlZCk7XG4gICAgICAgICAgICBpZiAocHJvZHVjZXJEb3RlbnYgPT09IG51bGwpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCBzYWZlUHJvZHVjZXJOYW1lID0gVXRpbHMuc2FmZURvY2tlclN0cmluZyhwcm9kdWNlci5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGRvdGVudkZvbGRlciA9IGAke2N3ZH0vJHtzdGF0ZURpcn0vYXJ0aWZhY3RzLyR7c2FmZVByb2R1Y2VyTmFtZX0vLmdpdGxhYi1jaS1yZXBvcnRzL2RvdGVudi9gO1xuICAgICAgICAgICAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHMoZG90ZW52Rm9sZGVyKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvdGVudkZpbGVzID0gKGF3YWl0IFV0aWxzLnNwYXduKFtcImZpbmRcIiwgXCIuXCIsIFwiLXR5cGVcIiwgXCJmXCJdLCBkb3RlbnZGb2xkZXIpKS5zdGRvdXQuc3BsaXQoXCJcXG5cIik7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBkb3RlbnZGaWxlIG9mIGRvdGVudkZpbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkb3RlbnZGaWxlID09IFwiXCIpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9kdWNlclJlcG9ydEVudiA9IGRvdGVudi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShgJHtkb3RlbnZGb2xkZXJ9LyR7ZG90ZW52RmlsZX1gKSk7XG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y2VyUmVwb3J0c0VudnMgPSB7Li4ucHJvZHVjZXJSZXBvcnRzRW52cywgLi4ucHJvZHVjZXJSZXBvcnRFbnZ9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge3llbGxvdyByZXBvcnRzLmRvdGVudiBwcm9kdWNlZCBieSAnJHtwcm9kdWNlci5uYW1lfScgY291bGQgbm90IGJlIGZvdW5kfVxcbmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb2R1Y2VyUmVwb3J0c0VudnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjb3B5Q2FjaGVJbiAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIGV4cGFuZGVkOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgICAgICBpZiAodGhpcy5hcmd2Lm1vdW50Q2FjaGUgJiYgdGhpcy5pbWFnZU5hbWUoZXhwYW5kZWQpKSByZXR1cm47XG4gICAgICAgIGlmICgoIXRoaXMuaW1hZ2VOYW1lKGV4cGFuZGVkKSAmJiAhdGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uKSB8fCB0aGlzLmNhY2hlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGN3ZCA9IHRoaXMuYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gdGhpcy5hcmd2LnN0YXRlRGlyO1xuXG4gICAgICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICBpZiAoIVtcInB1bGxcIiwgXCJwdWxsLXB1c2hcIl0uaW5jbHVkZXMoYy5wb2xpY3kpKSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgY29uc3QgY2FjaGVOYW1lID0gYXdhaXQgdGhpcy5nZXRVbmlxdWVDYWNoZU5hbWUoY3dkLCBleHBhbmRlZCwgYy5rZXkpO1xuICAgICAgICAgICAgY29uc3QgY2FjaGVGb2xkZXIgPSBgJHtjd2R9LyR7c3RhdGVEaXJ9L2NhY2hlLyR7Y2FjaGVOYW1lfWA7XG4gICAgICAgICAgICBpZiAoIWF3YWl0IGZzLnBhdGhFeGlzdHMoY2FjaGVGb2xkZXIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF3YWl0IE11dGV4LmV4Y2x1c2l2ZShjYWNoZU5hbWUsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNvcHlJbihjYWNoZUZvbGRlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IGltcG9ydGVkIGNhY2hlICcke2NhY2hlTmFtZX0nfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNvcHlBcnRpZmFjdHNJbiAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpIHtcbiAgICAgICAgaWYgKCghdGhpcy5pbWFnZU5hbWUodGhpcy5fdmFyaWFibGVzKSAmJiAhdGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uKSB8fCAodGhpcy5wcm9kdWNlcnMgPz8gW10pLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGN3ZCA9IHRoaXMuYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gdGhpcy5hcmd2LnN0YXRlRGlyO1xuICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9kdWNlciBvZiB0aGlzLnByb2R1Y2VycyA/PyBbXSkge1xuICAgICAgICAgICAgY29uc3QgcHJvZHVjZXJTYWZlTmFtZSA9IFV0aWxzLnNhZmVEb2NrZXJTdHJpbmcocHJvZHVjZXIubmFtZSk7XG4gICAgICAgICAgICBjb25zdCBhcnRpZmFjdEZvbGRlciA9IGAke2N3ZH0vJHtzdGF0ZURpcn0vYXJ0aWZhY3RzLyR7cHJvZHVjZXJTYWZlTmFtZX1gO1xuICAgICAgICAgICAgaWYgKCFhd2FpdCBmcy5wYXRoRXhpc3RzKGFydGlmYWN0Rm9sZGVyKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGZzLm1rZGlycChhcnRpZmFjdEZvbGRlcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJlYWRkaXIgPSBhd2FpdCBmcy5yZWFkZGlyKGFydGlmYWN0Rm9sZGVyKTtcbiAgICAgICAgICAgIGlmIChyZWFkZGlyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHt5ZWxsb3cgYXJ0aWZhY3RzIGZyb20ge2JsdWVCcmlnaHQgJHtwcm9kdWNlclNhZmVOYW1lfX0gd2FzIGVtcHR5fVxcbmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuY29weUluKGFydGlmYWN0Rm9sZGVyKSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IGltcG9ydGVkIGFydGlmYWN0c30gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgIH1cblxuICAgIGNvcHlJbiAoc291cmNlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc2FmZUpvYk5hbWUgPSB0aGlzLnNhZmVKb2JOYW1lO1xuICAgICAgICBpZiAoIXRoaXMuaW1hZ2VOYW1lKHRoaXMuX3ZhcmlhYmxlcykgJiYgdGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gVXRpbHMuc3Bhd24oW1wicnN5bmNcIiwgXCItYVwiLCBgJHtzb3VyY2V9Ly5gLCBgJHt0aGlzLmFyZ3YuY3dkfS8ke3RoaXMuYXJndi5zdGF0ZURpcn0vYnVpbGRzLyR7c2FmZUpvYk5hbWV9YF0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBVdGlscy5zcGF3bihbdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwiY3BcIiwgYCR7c291cmNlfS8uYCwgYCR7dGhpcy5fY29udGFpbmVySWR9Oi9nY2wtYnVpbGRzYF0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weUNhY2hlT3V0ICh3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgZXhwYW5kZWQ6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9KSB7XG4gICAgICAgIGlmICh0aGlzLmFyZ3YubW91bnRDYWNoZSAmJiB0aGlzLmltYWdlTmFtZShleHBhbmRlZCkpIHJldHVybjtcbiAgICAgICAgaWYgKCghdGhpcy5pbWFnZU5hbWUoZXhwYW5kZWQpICYmICF0aGlzLmFyZ3Yuc2hlbGxJc29sYXRpb24pIHx8IHRoaXMuY2FjaGUubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY3dkID0gdGhpcy5hcmd2LmN3ZDtcbiAgICAgICAgY29uc3Qgc3RhdGVEaXIgPSB0aGlzLmFyZ3Yuc3RhdGVEaXI7XG5cbiAgICAgICAgbGV0IHRpbWUsIGVuZFRpbWU7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICBpZiAoIVtcInB1c2hcIiwgXCJwdWxsLXB1c2hcIl0uaW5jbHVkZXMoYy5wb2xpY3kpKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoXCJvbl9zdWNjZXNzXCIgPT09IGMud2hlbiAmJiB0aGlzLmpvYlN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChcIm9uX2ZhaWx1cmVcIiA9PT0gYy53aGVuICYmIHRoaXMuam9iU3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgY2FjaGVOYW1lID0gYXdhaXQgdGhpcy5nZXRVbmlxdWVDYWNoZU5hbWUoY3dkLCBleHBhbmRlZCwgYy5rZXkpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXRoIG9mIGMucGF0aHMpIHtcbiAgICAgICAgICAgICAgICB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBhbmRlZFBhdGggPSBVdGlscy5leHBhbmRUZXh0KHBhdGgsIGV4cGFuZGVkKS5yZXBsYWNlKGAke2V4cGFuZGVkLkNJX1BST0pFQ1RfRElSfS9gLCBcIlwiKTtcbiAgICAgICAgICAgICAgICBsZXQgY21kID0gXCJzaG9wdCAtcyBnbG9ic3RhciBudWxsZ2xvYiBkb3RnbG9iXFxuXCI7XG4gICAgICAgICAgICAgICAgY21kICs9IGBta2RpciAtcCAuLi8uLi9jYWNoZS8ke2NhY2hlTmFtZX1cXG5gO1xuICAgICAgICAgICAgICAgIGNtZCArPSBgcnN5bmMgLVJhICR7ZXhwYW5kZWRQYXRofSAuLi8uLi9jYWNoZS8ke2NhY2hlTmFtZX0vLiB8fCB0cnVlXFxuYDtcblxuICAgICAgICAgICAgICAgIGF3YWl0IE11dGV4LmV4Y2x1c2l2ZShjYWNoZU5hbWUsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb3B5T3V0KGNtZCwgc3RhdGVEaXIsIFwiY2FjaGVcIiwgW10pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlYWRkaXIgPSBhd2FpdCBmcy5yZWFkZGlyKGAke3RoaXMuYXJndi5jd2R9LyR7c3RhdGVEaXJ9L2NhY2hlLyR7Y2FjaGVOYW1lfWApO1xuICAgICAgICAgICAgICAgIGlmIChyZWFkZGlyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7eWVsbG93ICEhIG5vIGNhY2hlIHdhcyBjb3BpZWQgZm9yICR7cGF0aH0gISF9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgZXhwb3J0ZWQgY2FjaGUgJHtleHBhbmRlZFBhdGh9ICcke2NhY2hlTmFtZX0nfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjb3B5QXJ0aWZhY3RzT3V0ICh3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgZXhwYW5kZWQ6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9KSB7XG4gICAgICAgIC8vIFRPRE86IHVwZGF0ZSB0aGUgY29uZGl0aW9uIHRvIHN1cHBvcnQgd2hlbjpvbl9zdWNjZXNzIC8gd2hlbjpvbl9mYWlsdXJlXG4gICAgICAgIGlmICh0aGlzLmpvYlN0YXR1cyAhPT0gXCJzdWNjZXNzXCIgJiYgdGhpcy5hcnRpZmFjdHM/LndoZW4gIT09IFwiYWx3YXlzXCIpIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzLmFydGlmYWN0cykgcmV0dXJuO1xuICAgICAgICBpZiAoKHRoaXMuYXJ0aWZhY3RzLnBhdGhzPy5sZW5ndGggPz8gMCkgPT09IDAgJiYgdGhpcy5hcnRpZmFjdHMucmVwb3J0cz8uZG90ZW52ID09IG51bGwpIHJldHVybjtcblxuICAgICAgICBjb25zdCBzYWZlSm9iTmFtZSA9IHRoaXMuc2FmZUpvYk5hbWU7XG4gICAgICAgIGNvbnN0IGN3ZCA9IHRoaXMuYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gdGhpcy5hcmd2LnN0YXRlRGlyO1xuICAgICAgICBjb25zdCBhcnRpZmFjdHNQYXRoID0gIXRoaXMuYXJndi5zaGVsbElzb2xhdGlvbiAmJiAhdGhpcy5pbWFnZU5hbWUoZXhwYW5kZWQpID8gYCR7c3RhdGVEaXJ9L2FydGlmYWN0c2AgOiBcIi4uLy4uL2FydGlmYWN0c1wiO1xuXG4gICAgICAgIGxldCB0aW1lLCBlbmRUaW1lO1xuICAgICAgICBsZXQgY3BDbWQgPSBcInNob3B0IC1zIGdsb2JzdGFyIG51bGxnbG9iIGRvdGdsb2JcXG5cIjtcbiAgICAgICAgY3BDbWQgKz0gYG1rZGlyIC1wICR7YXJ0aWZhY3RzUGF0aH0vJHtzYWZlSm9iTmFtZX1cXG5gO1xuICAgICAgICBjcENtZCArPSBcInJzeW5jIC0tZXhjbHVkZSAnLmdpdGxhYi1jaS1sb2NhbC8qKicgLVJhIFwiO1xuICAgICAgICBmb3IgKGNvbnN0IGFydGlmYWN0RXhjbHVkZVBhdGggb2YgdGhpcy5hcnRpZmFjdHM/LmV4Y2x1ZGUgPz8gW10pIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkUGF0aCA9IFV0aWxzLmV4cGFuZFRleHQoYXJ0aWZhY3RFeGNsdWRlUGF0aCwgZXhwYW5kZWQpLnJlcGxhY2UoYCR7ZXhwYW5kZWQuQ0lfUFJPSkVDVF9ESVJ9L2AsIFwiXCIpO1xuICAgICAgICAgICAgY3BDbWQgKz0gYC0tZXhjbHVkZSAnJHtleHBhbmRlZFBhdGh9JyBgO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgYXJ0aWZhY3RQYXRoIG9mIHRoaXMuYXJ0aWZhY3RzPy5wYXRocyA/PyBbXSkge1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWRQYXRoID0gVXRpbHMuZXhwYW5kVGV4dChhcnRpZmFjdFBhdGgsIGV4cGFuZGVkKS5yZXBsYWNlKGAke2V4cGFuZGVkLkNJX1BST0pFQ1RfRElSfS9gLCBcIlwiKTtcbiAgICAgICAgICAgIGNwQ21kICs9IGAke2V4cGFuZGVkUGF0aH0gYDtcbiAgICAgICAgfVxuICAgICAgICBjcENtZCArPSBgJHthcnRpZmFjdHNQYXRofS8ke3NhZmVKb2JOYW1lfS8uIHx8IHRydWVcXG5gO1xuICAgICAgICBjb25zdCByZXBvcnREb3RlbnYgPSBVdGlscy5leHBhbmRUZXh0KHRoaXMuYXJ0aWZhY3RzLnJlcG9ydHM/LmRvdGVudiA/PyBudWxsLCBleHBhbmRlZCk7XG4gICAgICAgIGlmIChyZXBvcnREb3RlbnYgIT0gbnVsbCkge1xuICAgICAgICAgICAgY3BDbWQgKz0gYG1rZGlyIC1wICR7YXJ0aWZhY3RzUGF0aH0vJHtzYWZlSm9iTmFtZX0vLmdpdGxhYi1jaS1yZXBvcnRzL2RvdGVudlxcbmA7XG4gICAgICAgICAgICBjcENtZCArPSBgaWYgWyAtZiAke3JlcG9ydERvdGVudn0gXTsgdGhlblxcbmA7XG4gICAgICAgICAgICBjcENtZCArPSBgICByc3luYyAtUmEgJHtyZXBvcnREb3RlbnZ9ICR7YXJ0aWZhY3RzUGF0aH0vJHtzYWZlSm9iTmFtZX0vLmdpdGxhYi1jaS1yZXBvcnRzL2RvdGVudi8uXFxuYDtcbiAgICAgICAgICAgIGNwQ21kICs9IFwiZmlcXG5cIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICBjb25zdCBkb2NrZXJDbWRFeHRyYXMgPSB0aGlzLmFyZ3YubW91bnRDYWNoZSA/IGF3YWl0IHRoaXMubW91bnRDYWNoZUNtZCh3cml0ZVN0cmVhbXMsIGV4cGFuZGVkKSA6IFtdO1xuICAgICAgICBhd2FpdCB0aGlzLmNvcHlPdXQoY3BDbWQsIHN0YXRlRGlyLCBcImFydGlmYWN0c1wiLCBkb2NrZXJDbWRFeHRyYXMpO1xuICAgICAgICBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG5cbiAgICAgICAgaWYgKHJlcG9ydERvdGVudiAhPSBudWxsICYmICFhd2FpdCBmcy5wYXRoRXhpc3RzKGAke2N3ZH0vJHtzdGF0ZURpcn0vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9Ly5naXRsYWItY2ktcmVwb3J0cy9kb3RlbnYvJHtyZXBvcnREb3RlbnZ9YCkpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHt5ZWxsb3cgYXJ0aWZhY3QgcmVwb3J0cyBkb3RlbnYgJyR7cmVwb3J0RG90ZW52fScgY291bGQgbm90IGJlIGZvdW5kfVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVhZGRpciA9IGF3YWl0IGZzLnJlYWRkaXIoYCR7Y3dkfS8ke3N0YXRlRGlyfS9hcnRpZmFjdHMvJHtzYWZlSm9iTmFtZX1gKTtcbiAgICAgICAgaWYgKHJlYWRkaXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7eWVsbG93ICEhIG5vIGFydGlmYWN0cyB3YXMgY29waWVkICEhfVxcbmApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgZXhwb3J0ZWQgYXJ0aWZhY3RzfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hcnRpZmFjdHNUb1NvdXJjZSAmJiAodGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uIHx8IHRoaXMuaW1hZ2VOYW1lKGV4cGFuZGVkKSkpIHtcbiAgICAgICAgICAgIHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW1wicnN5bmNcIiwgXCItLWV4Y2x1ZGU9Ly5naXRsYWItY2ktcmVwb3J0cy9cIiwgXCItYVwiLCBgJHtjd2R9LyR7c3RhdGVEaXJ9L2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfS8uYCwgY3dkXSk7XG4gICAgICAgICAgICBpZiAocmVwb3J0RG90ZW52ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJyc3luY1wiLCBcIi1hXCIsIGAke2N3ZH0vJHtzdGF0ZURpcn0vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9Ly5naXRsYWItY2ktcmVwb3J0cy9kb3RlbnYvLmAsIGN3ZF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgY29waWVkIGFydGlmYWN0cyB0byBjd2R9IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weU91dCAoY21kOiBzdHJpbmcsIHN0YXRlRGlyOiBzdHJpbmcsIHR5cGU6IFwiYXJ0aWZhY3RzXCIgfCBcImNhY2hlXCIsIGRvY2tlckNtZEV4dHJhczogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3Qgc2FmZUpvYk5hbWUgPSB0aGlzLnNhZmVKb2JOYW1lO1xuICAgICAgICBjb25zdCBidWlsZFZvbHVtZU5hbWUgPSB0aGlzLmJ1aWxkVm9sdW1lTmFtZTtcbiAgICAgICAgY29uc3QgY3dkID0gdGhpcy5hcmd2LmN3ZDtcblxuICAgICAgICBhd2FpdCBmcy5ta2RpcnAoYCR7Y3dkfS8ke3N0YXRlRGlyfS8ke3R5cGV9YCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VOYW1lKHRoaXMuX3ZhcmlhYmxlcykpIHtcbiAgICAgICAgICAgIGNvbnN0IHtzdGRvdXQ6IGNvbnRhaW5lcklkfSA9IGF3YWl0IFV0aWxzLmJhc2goYCR7dGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGV9IGNyZWF0ZSAtaSAke2RvY2tlckNtZEV4dHJhcy5qb2luKFwiIFwiKX0gLXYgJHtidWlsZFZvbHVtZU5hbWV9Oi9nY2wtYnVpbGRzLyAtdyAvZ2NsLWJ1aWxkcyBkb2NrZXIuaW8vZmlyZWNvdy9naXRsYWItY2ktbG9jYWwtdXRpbCBiYXNoIC1jIFwiJHtjbWR9XCJgLCBjd2QpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyc1RvQ2xlYW4ucHVzaChjb250YWluZXJJZCk7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwic3RhcnRcIiwgY29udGFpbmVySWQsIFwiLS1hdHRhY2hcIl0pO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcImNwXCIsIGAke2NvbnRhaW5lcklkfTovJHt0eXBlfS8uYCwgYCR7c3RhdGVEaXJ9LyR7dHlwZX0vLmBdLCBjd2QpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuYmFzaChgYmFzaCAtZW8gcGlwZWZhaWwgLWMgXCIke2NtZH1cImAsIGAke2N3ZH0vJHtzdGF0ZURpcn0vYnVpbGRzLyR7c2FmZUpvYk5hbWV9YCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuYmFzaChgYmFzaCAtZW8gcGlwZWZhaWwgLWMgXCIke2NtZH1cImAsIGAke2N3ZH1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dCk7XG4gICAgICAgIHRoaXMuX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge2dyZXkgPiBzdGlsbCBydW5uaW5nLi4ufVxcbmApO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG4gICAgICAgIH0sIDEwMDAwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZpbmlzaGVkU3RyaW5nICgpIHtcbiAgICAgICAgcmV0dXJuIGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBmaW5pc2hlZH0gaW4ge21hZ2VudGEgJHt0aGlzLnByZXR0eUR1cmF0aW9ufX1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJpbnRGaW5pc2hlZFN0cmluZyAoKSB7XG4gICAgICAgIGlmICh0aGlzLmpvYlN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpIHJldHVybjtcbiAgICAgICAgdGhpcy53cml0ZVN0cmVhbXMuc3Rkb3V0KGAke3RoaXMuZ2V0RmluaXNoZWRTdHJpbmcoKX1cXG5gKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByaW50RXhpdGVkU3RyaW5nIChjb2RlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3Qgd3JpdGVTdHJlYW1zID0gdGhpcy53cml0ZVN0cmVhbXM7XG4gICAgICAgIGNvbnN0IGZpbmlzaGVkU3RyID0gdGhpcy5nZXRGaW5pc2hlZFN0cmluZygpO1xuXG4gICAgICAgIC8vIFdvbid0IHByaW50IGlmIGpvYlN0YXR1cyBpcyBcInN1Y2Nlc3NcIiBiZWNhdXNlIHRoYXQgd2lsbCBiZSBwcmludGVkIHZpYSB0aGUgYHByaW50RmluaXNoZWRTdHJpbmcoKWBcbiAgICAgICAgaWYgKHRoaXMuam9iU3RhdHVzID09PSBcIndhcm5pbmdcIikge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihcbiAgICAgICAgICAgICAgICBjaGFsa2Ake2ZpbmlzaGVkU3RyfSB7YmxhY2suYmdZZWxsb3dCcmlnaHQgIFdBUk4gJHtjb2RlLnRvU3RyaW5nKCl9IH1cXG5gXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuam9iU3RhdHVzID09PSBcImZhaWxlZFwiKSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKFxuICAgICAgICAgICAgICAgIGNoYWxrYCR7ZmluaXNoZWRTdHJ9IHtibGFjay5iZ1JlZCAgRkFJTCAke2NvZGUudG9TdHJpbmcoKX0gfVxcbmBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByaW50QWZ0ZXJTY3JpcHRFeGl0ZWRTdHJpbmcgKGNvZGU6IG51bWJlcikge1xuICAgICAgICBjb25zdCB3cml0ZVN0cmVhbXMgPSB0aGlzLndyaXRlU3RyZWFtcztcbiAgICAgICAgY29uc3QgZmluaXNoZWRTdHIgPSB0aGlzLmdldEZpbmlzaGVkU3RyaW5nKCk7XG5cbiAgICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoXG4gICAgICAgICAgICAgICAgY2hhbGtgJHtmaW5pc2hlZFN0cn0ge2JsYWNrLmJnWWVsbG93QnJpZ2h0ICBXQVJOICR7Y29kZS50b1N0cmluZygpfSB9IGFmdGVyX3NjcmlwdFxcbmBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNyZWF0ZURvY2tlck5ldHdvcmsgKG5ldHdvcmtOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qge3N0ZG91dDogbmV0d29ya0lkfSA9IGF3YWl0IFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJuZXR3b3JrXCIsIFwiY3JlYXRlXCIsIGAke25ldHdvcmtOYW1lfWBdKTtcbiAgICAgICAgdGhpcy5fc2VydmljZU5ldHdvcmtJZCA9IG5ldHdvcmtJZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHN0YXJ0U2VydmljZSAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIGV4cGFuZGVkOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSwgc2VydmljZTogU2VydmljZSkge1xuICAgICAgICBjb25zdCBjd2QgPSB0aGlzLmFyZ3YuY3dkO1xuICAgICAgICBsZXQgZG9ja2VyQ21kID0gYCR7dGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGV9IGNyZWF0ZSAtLWludGVyYWN0aXZlIC0tbmV0d29yayBnaXRsYWItY2ktbG9jYWwtJHt0aGlzLmpvYklkfSBgO1xuICAgICAgICB0aGlzLnJlZnJlc2hMb25nUnVubmluZ1NpbGVudFRpbWVvdXQod3JpdGVTdHJlYW1zKTtcblxuICAgICAgICBpZiAoZXhwYW5kZWRbXCJGRl9ESVNBQkxFX1VNQVNLX0ZPUl9ET0NLRVJfRVhFQ1VUT1JcIl0gPT09IFwiZmFsc2VcIikge1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiLS11c2VyIDA6MCBcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFyZ3YucHJpdmlsZWdlZCkge1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiLS1wcml2aWxlZ2VkIFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYXJndi51bGltaXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS11bGltaXQgbm9maWxlPSR7dGhpcy5hcmd2LnVsaW1pdH0gYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qgdm9sdW1lIG9mIHRoaXMuYXJndi52b2x1bWUpIHtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS12b2x1bWUgJHt2b2x1bWV9IGA7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGV4dHJhSG9zdCBvZiB0aGlzLmFyZ3YuZXh0cmFIb3N0KSB7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tYWRkLWhvc3Q9JHtleHRyYUhvc3R9IGA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZXJ2aWNlQWxpYXMgPSBzZXJ2aWNlLmFsaWFzO1xuICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHNlcnZpY2UubmFtZTtcbiAgICAgICAgY29uc3Qgc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbiA9IHNlcnZpY2VOYW1lLnJlcGxhY2UoLyguKikoOi4qKS8sIFwiJDFcIik7XG4gICAgICAgIGNvbnN0IGFsaWFzZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgYWxpYXNlcy5hZGQoc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbi5yZXBsYWNlQWxsKFwiL1wiLCBcIi1cIikpO1xuICAgICAgICBhbGlhc2VzLmFkZChzZXJ2aWNlTmFtZVdpdGhvdXRWZXJzaW9uLnJlcGxhY2VBbGwoXCIvXCIsIFwiX19cIikpO1xuICAgICAgICBpZiAoc2VydmljZUFsaWFzKSB7XG4gICAgICAgICAgICBhbGlhc2VzLmFkZChzZXJ2aWNlQWxpYXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBhbGlhcyBvZiBhbGlhc2VzKSB7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tbmV0d29yay1hbGlhcz0ke2FsaWFzfSBgO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGFuZGVkKSkge1xuICAgICAgICAgICAgLy8gUmVwbGFjaW5nIGAnYCB3aXRoIGAnXFwnJ2AgdG8gY29ycmVjdGx5IGhhbmRsZSBzaW5nbGUgcXVvdGVzKGlmIGB2YWxgIGNvbnRhaW5zIGAnYCkgaW4gc2hlbGwgY29tbWFuZHNcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgICAtZSAnJHtrZXl9PSR7dmFsLnJlcGxhY2UoLycvZywgXCInXFxcXCcnXCIpfScgXFxcXFxcbmA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZXJ2aWNlRW50cnlwb2ludCA9IHNlcnZpY2UuZW50cnlwb2ludDtcbiAgICAgICAgaWYgKHNlcnZpY2VFbnRyeXBvaW50KSB7XG4gICAgICAgICAgICBpZiAoc2VydmljZUVudHJ5cG9pbnRbMF0gPT0gXCJcIikge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIi0tZW50cnlwb2ludCAnJyBcIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLWVudHJ5cG9pbnQgJHtzZXJ2aWNlRW50cnlwb2ludFswXX0gYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdm9sdW1lICR7dGhpcy5idWlsZFZvbHVtZU5hbWV9Oi9nY2wtYnVpbGRzIGA7XG4gICAgICAgIGRvY2tlckNtZCArPSBgLS12b2x1bWUgJHt0aGlzLnRtcFZvbHVtZU5hbWV9OiR7dGhpcy5maWxlVmFyaWFibGVzRGlyfSBgO1xuICAgICAgICBkb2NrZXJDbWQgKz0gYCR7c2VydmljZU5hbWV9IGA7XG5cbiAgICAgICAgaWYgKHNlcnZpY2VFbnRyeXBvaW50Py5sZW5ndGggPz8gMCA+IDEpIHtcbiAgICAgICAgICAgIHNlcnZpY2VFbnRyeXBvaW50Py5zbGljZSgxKS5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGBcIiR7ZX1cIiBgO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgKHNlcnZpY2UuY29tbWFuZCA/PyBbXSkuZm9yRWFjaCgoZSkgPT4gZG9ja2VyQ21kICs9IGBcIiR7ZS5yZXBsYWNlKC9cXCQvZywgXCJcXFxcJFwiKX1cIiBgKTtcblxuICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcblxuICAgICAgICBjb25zdCB7c3Rkb3V0OiBjb250YWluZXJJZH0gPSBhd2FpdCBVdGlscy5iYXNoKGRvY2tlckNtZCwgY3dkKTtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyc1RvQ2xlYW4ucHVzaChjb250YWluZXJJZCk7XG5cbiAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcInN0YXJ0XCIsIGAke2NvbnRhaW5lcklkfWBdKTtcblxuICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IHN0YXJ0ZWQgc2VydmljZSBpbWFnZTogJHtzZXJ2aWNlTmFtZX0gd2l0aCBhbGlhc2VzOiAke0FycmF5LmZyb20oYWxpYXNlcykuam9pbihcIiwgXCIpfX0gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuXG4gICAgICAgIHJldHVybiBjb250YWluZXJJZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHNlcnZpY2VIZWFsdGhDaGVjayAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIHNlcnZpY2U6IFNlcnZpY2UsIHNlcnZpY2VJbmRleDogbnVtYmVyLCBzZXJ2aWNlQ29udGFuZXJMb2dGaWxlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc2VydmljZUFsaWFzID0gc2VydmljZS5hbGlhcztcbiAgICAgICAgY29uc3Qgc2VydmljZU5hbWUgPSBzZXJ2aWNlLm5hbWU7XG5cbiAgICAgICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBVdGlscy5zcGF3bihbdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwiaW1hZ2VcIiwgXCJpbnNwZWN0XCIsIHNlcnZpY2VOYW1lXSk7XG4gICAgICAgIGNvbnN0IGltYWdlSW5zcGVjdCA9IEpTT04ucGFyc2Uoc3Rkb3V0KTtcblxuICAgICAgICAvLyBDb3BpZWQgZnJvbSB0aGUgc3RhcnRTZXJ2aWNlIGJsb2NrLiBJbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCB0aGUgYWxpYXNlcyBtYXRjaFxuICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZVdpdGhvdXRWZXJzaW9uID0gc2VydmljZU5hbWUucmVwbGFjZSgvKC4qKSg6LiopLywgXCIkMVwiKTtcbiAgICAgICAgY29uc3QgYWxpYXNlcyA9IFtzZXJ2aWNlTmFtZVdpdGhvdXRWZXJzaW9uLnJlcGxhY2VBbGwoXCIvXCIsIFwiLVwiKSwgc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbi5yZXBsYWNlQWxsKFwiL1wiLCBcIl9fXCIpXTtcbiAgICAgICAgaWYgKHNlcnZpY2VBbGlhcykge1xuICAgICAgICAgICAgYWxpYXNlcy5wdXNoKHNlcnZpY2VBbGlhcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bmlxdWVBbGlhcyA9IGFsaWFzZXNbYWxpYXNlcy5sZW5ndGggLSAxXTtcblxuICAgICAgICBpZiAoKGltYWdlSW5zcGVjdFswXT8uQ29uZmlnPy5FeHBvc2VkUG9ydHMgPz8gbnVsbCkgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7eWVsbG93IENvdWxkIG5vdCBmaW5kIGV4cG9zZWQgdGNwIHBvcnRzICR7c2VydmljZU5hbWV9fVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBwb3J0IGRlZmluZWQgaW4gdGhlIGltYWdlLCBhbmQgdHJ5IHRvIGNvbm5lY3QgdG8gdGhlIGFsaWFzXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFueShPYmplY3Qua2V5cyhpbWFnZUluc3BlY3RbMF0uQ29uZmlnLkV4cG9zZWRQb3J0cykubWFwKChwb3J0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFwb3J0LmVuZHNXaXRoKFwiL3RjcFwiKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvcnROdW0gPSBwYXJzZUludChwb3J0LnJlcGxhY2UoXCIvdGNwXCIsIFwiXCIpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGF3bkNtZCA9IFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJydW5cIiwgXCItLXJtXCIsIGAtLW5hbWU9Z2NsLXdhaXQtZm9yLWl0LSR7dGhpcy5qb2JJZH0tJHtzZXJ2aWNlSW5kZXh9LSR7cG9ydE51bX1gLCBcIi0tbmV0d29ya1wiLCBgZ2l0bGFiLWNpLWxvY2FsLSR7dGhpcy5qb2JJZH1gLCBcImRvY2tlci5pby9zdW1pbmE0Ni93YWl0LWZvci1pdFwiLCBgJHt1bmlxdWVBbGlhc306JHtwb3J0TnVtfWAsIFwiLXRcIiwgXCIzMFwiXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRpbHMuc3Bhd24oc3Bhd25DbWQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge2dyZWVuQnJpZ2h0IHNlcnZpY2UgaW1hZ2U6ICR7c2VydmljZU5hbWV9IGhlYWx0aGNoZWNrIHBhc3NlZCBpbiB7Z3JlZW4gJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fX1cXG5gKTtcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgQWdncmVnYXRlRXJyb3IpKSB0aHJvdyBlO1xuICAgICAgICAgICAgZS5lcnJvcnMuZm9yRWFjaCgoc2luZ2xlRXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge3JlZEJyaWdodCBzZXJ2aWNlIGltYWdlOiAke3NlcnZpY2VOYW1lfSBoZWFsdGhjaGVjayBmYWlsZWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgc2luZ2xlRXJyb3IubWVzc2FnZS5zcGxpdCgvXFxyP1xcbi9nKS5mb3JFYWNoKChsaW5lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge3JlZEJyaWdodCAgICR7bGluZX19XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge3JlZEJyaWdodCBhbHNvIHNlZSAoJHtzZXJ2aWNlQ29udGFuZXJMb2dGaWxlfSl9XFxuYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIC8vIEtpbGwgYWxsIHdhaXQtZm9yLWl0IGNvbnRhaW5lcnMsIHdoZW4gb25lIGhhdmUgYmVlbiBzdWNjZXNzZnVsXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoT2JqZWN0LmtleXMoaW1hZ2VJbnNwZWN0WzBdLkNvbmZpZy5FeHBvc2VkUG9ydHMpLm1hcCgocG9ydCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcG9ydC5lbmRzV2l0aChcIi90Y3BcIikpIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3J0TnVtID0gcGFyc2VJbnQocG9ydC5yZXBsYWNlKFwiL3RjcFwiLCBcIlwiKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJybVwiLCBcIi12ZlwiLCBgZ2NsLXdhaXQtZm9yLWl0LSR7dGhpcy5qb2JJZH0tJHtzZXJ2aWNlSW5kZXh9LSR7cG9ydE51bX1gXSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbGVhbnVwSm9iUmVzb3VyY2VzIChqb2JzPzogSXRlcmFibGU8Sm9iPikge1xuICAgIGlmICgham9icykgcmV0dXJuO1xuICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgZm9yIChjb25zdCBqb2Igb2Ygam9icykge1xuICAgICAgICBwcm9taXNlcy5wdXNoKGpvYi5jbGVhbnVwUmVzb3VyY2VzKCkpO1xuICAgIH1cbiAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59XG4iXX0=
|