gitlab-ci-local 4.28.1 → 4.28.2
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 +10 -10
- package/src/job.js +6 -2
- package/src/parser-includes.js +11 -3
- package/src/test.js +0 -5
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "Tired of pushing to test your .gitlab-ci.yml?",
|
|
4
4
|
"main": "src/index.js",
|
|
5
5
|
"bin": "src/index.js",
|
|
6
|
-
"version": "4.28.
|
|
6
|
+
"version": "4.28.2",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"prepublishOnly": "npm run check-all && chmod +x src/index.js",
|
|
9
9
|
"pkg-linux": "pkg src/index.js --public -t node16-linux-x64 -o bin/linux/gitlab-ci-local && chmod +x bin/linux/gitlab-ci-local && gzip -c bin/linux/gitlab-ci-local > bin/linux.gz",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"pkg-all": "npm run pkg-linux && npm run pkg-macos && npm run pkg-win",
|
|
13
13
|
"pkg": "pkg",
|
|
14
14
|
"build": "rm -f src/*.js src/*.d.ts && tsc",
|
|
15
|
-
"check-all": "npm run build && npm run lint && npm run coverage
|
|
15
|
+
"check-all": "npm run build && npm run lint && npm run coverage",
|
|
16
16
|
"audit": "npm audit --parseable",
|
|
17
17
|
"lint": "npx eslint .",
|
|
18
18
|
"test": "jest --testTimeout 30000",
|
|
@@ -20,13 +20,13 @@
|
|
|
20
20
|
"start": "ts-node --log-error src/index.ts --cwd examples/docker-compose-nodejs"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"axios": "^0.
|
|
23
|
+
"axios": "^0.25.0",
|
|
24
24
|
"base64url": "^3.0.1",
|
|
25
25
|
"camelcase": "^6.3.0",
|
|
26
26
|
"chalk": "^4.1.2",
|
|
27
27
|
"checksum": "^1.0.0",
|
|
28
28
|
"deep-extend": "^0.6.0",
|
|
29
|
-
"dotenv": "^
|
|
29
|
+
"dotenv": "^14.3.2",
|
|
30
30
|
"fs-extra": "^10.0.0",
|
|
31
31
|
"js-yaml": "^4.1.0",
|
|
32
32
|
"pretty-hrtime": "^1.0.3",
|
|
@@ -43,17 +43,17 @@
|
|
|
43
43
|
"@types/pretty-hrtime": "1.0.1",
|
|
44
44
|
"@types/source-map-support": "0.5.4",
|
|
45
45
|
"@types/yargs": "17.0.8",
|
|
46
|
-
"@typescript-eslint/eslint-plugin": "5.
|
|
47
|
-
"@typescript-eslint/parser": "5.
|
|
46
|
+
"@typescript-eslint/eslint-plugin": "5.10.1",
|
|
47
|
+
"@typescript-eslint/parser": "5.10.1",
|
|
48
48
|
"axios-mock-adapter": "1.20.0",
|
|
49
49
|
"depcheck": "1.4.3",
|
|
50
|
-
"eslint": "8.
|
|
50
|
+
"eslint": "8.7.0",
|
|
51
51
|
"jest": "27.4.7",
|
|
52
52
|
"jest-when": "3.5.0",
|
|
53
|
-
"pkg": "5.5.
|
|
54
|
-
"ts-jest": "27.1.
|
|
53
|
+
"pkg": "5.5.2",
|
|
54
|
+
"ts-jest": "27.1.3",
|
|
55
55
|
"ts-node": "10.4.0",
|
|
56
|
-
"typescript": "4.5.
|
|
56
|
+
"typescript": "4.5.5"
|
|
57
57
|
},
|
|
58
58
|
"engines": {
|
|
59
59
|
"node": ">=16.10.0"
|
package/src/job.js
CHANGED
|
@@ -602,7 +602,11 @@ class Job {
|
|
|
602
602
|
const producerSafeName = utils_1.Utils.getSafeJobName(producer.name);
|
|
603
603
|
const artifactFolder = `${this.cwd}/.gitlab-ci-local/artifacts/${producerSafeName}`;
|
|
604
604
|
if (!await fs.pathExists(artifactFolder)) {
|
|
605
|
-
|
|
605
|
+
await fs.mkdirp(artifactFolder);
|
|
606
|
+
}
|
|
607
|
+
const readdir = await fs.readdir(artifactFolder);
|
|
608
|
+
if (readdir.length === 0) {
|
|
609
|
+
writeStreams.stderr((0, chalk_1.default) `${this.chalkJobName} {yellow artifacts from {blueBright ${producerSafeName}} was empty}\n`);
|
|
606
610
|
}
|
|
607
611
|
promises.push(this.copyIn(artifactFolder));
|
|
608
612
|
}
|
|
@@ -803,4 +807,4 @@ Job.illegalJobNames = [
|
|
|
803
807
|
"stages", "pages", "types", "before_script", "default",
|
|
804
808
|
"after_script", "variables", "cache", "workflow",
|
|
805
809
|
];
|
|
806
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrREFBMEI7QUFDMUIsK0NBQWlDO0FBQ2pDLDREQUE4QztBQUM5Qyw2Q0FBK0I7QUFDL0Isa0VBQXlDO0FBQ3pDLDBEQUFrQztBQUNsQyxtREFBNkM7QUFDN0MsbUNBQThCO0FBSzlCLHVDQUFpQztBQUNqQywrQ0FBeUM7QUFDekMsbUNBQThCO0FBRTlCLE1BQWEsR0FBRztJQXdDWixZQUFZLEdBQWU7UUFqQm5CLHdCQUFtQixHQUFrQixJQUFJLENBQUM7UUFDMUMsMEJBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLHFCQUFnQixHQUFrQixJQUFJLENBQUM7UUFDdkMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixpQkFBWSxHQUFrQixJQUFJLENBQUM7UUFDbkMsc0JBQWlCLEdBQWtCLElBQUksQ0FBQztRQUN4QywwQkFBcUIsR0FBYSxFQUFFLENBQUM7UUFDckMsOEJBQXlCLEdBQW1CLENBQUMsQ0FBUSxDQUFDO1FBQ3RELGVBQVUsR0FBcUQsSUFBSSxDQUFDO1FBRXBFLHVCQUFrQixHQUFhLEVBQUUsQ0FBQztRQVF0QyxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ3pCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDNUIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUM1QixNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQztRQUNsRCxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDO1FBRXRDLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFDakMsSUFBSSxDQUFDLE9BQU8sR0FB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QUFFLFVBQVU7Q0FDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCAqIGFzIGRvdGVudiBmcm9tIFwiZG90ZW52XCI7XG5pbXBvcnQgKiBhcyBjaGlsZFByb2Nlc3MgZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0IHByZXR0eUhydGltZSBmcm9tIFwicHJldHR5LWhydGltZVwiO1xuaW1wb3J0IGNhbWVsQ2FzZSBmcm9tIFwiY2FtZWxjYXNlXCI7XG5pbXBvcnQge0V4aXRFcnJvcn0gZnJvbSBcIi4vdHlwZXMvZXhpdC1lcnJvclwiO1xuaW1wb3J0IHtVdGlsc30gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7Sm9iT3B0aW9uc30gZnJvbSBcIi4vdHlwZXMvam9iLW9wdGlvbnNcIjtcbmltcG9ydCB7V3JpdGVTdHJlYW1zfSBmcm9tIFwiLi90eXBlcy93cml0ZS1zdHJlYW1zXCI7XG5pbXBvcnQge1NlcnZpY2V9IGZyb20gXCIuL3NlcnZpY2VcIjtcbmltcG9ydCB7R2l0RGF0YX0gZnJvbSBcIi4vZ2l0LWRhdGFcIjtcbmltcG9ydCB7YXNzZXJ0fSBmcm9tIFwiLi9hc3NlcnRzXCI7XG5pbXBvcnQge0NhY2hlRW50cnl9IGZyb20gXCIuL2NhY2hlLWVudHJ5XCI7XG5pbXBvcnQge011dGV4fSBmcm9tIFwiLi9tdXRleFwiO1xuXG5leHBvcnQgY2xhc3MgSm9iIHtcblxuICAgIHN0YXRpYyByZWFkb25seSBpbGxlZ2FsSm9iTmFtZXMgPSBbXG4gICAgICAgIFwiaW5jbHVkZVwiLCBcImxvY2FsX2NvbmZpZ3VyYXRpb25cIiwgXCJpbWFnZVwiLCBcInNlcnZpY2VzXCIsXG4gICAgICAgIFwic3RhZ2VzXCIsIFwicGFnZXNcIiwgXCJ0eXBlc1wiLCBcImJlZm9yZV9zY3JpcHRcIiwgXCJkZWZhdWx0XCIsXG4gICAgICAgIFwiYWZ0ZXJfc2NyaXB0XCIsIFwidmFyaWFibGVzXCIsIFwiY2FjaGVcIiwgXCJ3b3JrZmxvd1wiLFxuICAgIF07XG5cbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgam9iTmFtZVBhZDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGRlcGVuZGVuY2llczogc3RyaW5nW10gfCBudWxsO1xuICAgIHJlYWRvbmx5IGVudmlyb25tZW50PzogeyBuYW1lOiBzdHJpbmc7IHVybDogc3RyaW5nIHwgbnVsbCB9O1xuICAgIHJlYWRvbmx5IGpvYklkOiBudW1iZXI7XG4gICAgcmVhZG9ubHkgY3dkOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcnVsZXM/OiB7IGlmOiBzdHJpbmc7IHdoZW46IHN0cmluZzsgYWxsb3dfZmFpbHVyZTogYm9vbGVhbiB9W107XG4gICAgcmVhZG9ubHkgZXhwYW5kZWRWYXJpYWJsZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgcmVhZG9ubHkgYWxsb3dGYWlsdXJlOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IHdoZW46IHN0cmluZztcbiAgICByZWFkb25seSBwaXBlbGluZUlpZDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGdpdERhdGE6IEdpdERhdGE7XG4gICAgcmVhZG9ubHkgc2hlbGxJc29sYXRpb246IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgbW91bnRDYWNoZTogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgX3ByZXNjcmlwdHNFeGl0Q29kZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfYWZ0ZXJTY3JpcHRzRXhpdENvZGUgPSAwO1xuICAgIHByaXZhdGUgX2NvdmVyYWdlUGVyY2VudDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfcnVubmluZyA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2NvbnRhaW5lcklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9zZXJ2aWNlTmV0d29ya0lkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9jb250YWluZXJWb2x1bWVOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIF9sb25nUnVubmluZ1NpbGVudFRpbWVvdXQ6IE5vZGVKUy5UaW1lb3V0ID0gLTEgYXMgYW55O1xuICAgIHByaXZhdGUgX3Byb2R1Y2VyczogeyBuYW1lOiBzdHJpbmc7IGRvdGVudjogc3RyaW5nIHwgbnVsbCB9W10gfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgX2NvbnRhaW5lcnNUb0NsZWFuOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBqb2JEYXRhOiBhbnk7XG4gICAgcHJpdmF0ZSByZWFkb25seSB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGV4dHJhSG9zdHM6IHN0cmluZ1tdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdm9sdW1lczogc3RyaW5nW107XG5cbiAgICBjb25zdHJ1Y3RvcihvcHQ6IEpvYk9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgam9iRGF0YSA9IG9wdC5kYXRhO1xuICAgICAgICBjb25zdCBnaXREYXRhID0gb3B0LmdpdERhdGE7XG4gICAgICAgIGNvbnN0IGdsb2JhbHMgPSBvcHQuZ2xvYmFscztcbiAgICAgICAgY29uc3QgdmFyaWFibGVzRnJvbUZpbGVzID0gb3B0LnZhcmlhYmxlc0Zyb21GaWxlcztcbiAgICAgICAgY29uc3QgY2xpVmFyaWFibGVzID0gb3B0LmNsaVZhcmlhYmxlcztcblxuICAgICAgICB0aGlzLm1vdW50Q2FjaGUgPSBvcHQubW91bnRDYWNoZTtcbiAgICAgICAgdGhpcy5leHRyYUhvc3RzID0gb3B0LmV4dHJhSG9zdHM7XG4gICAgICAgIHRoaXMudm9sdW1lcyA9IG9wdC52b2x1bWVzO1xuICAgICAgICB0aGlzLndyaXRlU3RyZWFtcyA9IG9wdC53cml0ZVN0cmVhbXM7XG4gICAgICAgIHRoaXMuam9iTmFtZVBhZCA9IG9wdC5uYW1lUGFkO1xuICAgICAgICB0aGlzLmdpdERhdGEgPSBvcHQuZ2l0RGF0YTtcbiAgICAgICAgdGhpcy5uYW1lID0gb3B0Lm5hbWU7XG4gICAgICAgIHRoaXMuY3dkID0gb3B0LmN3ZDtcbiAgICAgICAgdGhpcy5qb2JJZCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDApO1xuICAgICAgICB0aGlzLmpvYkRhdGEgPSBvcHQuZGF0YTtcbiAgICAgICAgdGhpcy5waXBlbGluZUlpZCA9IG9wdC5waXBlbGluZUlpZDtcbiAgICAgICAgdGhpcy5zaGVsbElzb2xhdGlvbiA9IG9wdC5zaGVsbElzb2xhdGlvbjtcblxuICAgICAgICB0aGlzLndoZW4gPSBqb2JEYXRhLndoZW4gfHwgXCJvbl9zdWNjZXNzXCI7XG4gICAgICAgIHRoaXMuYWxsb3dGYWlsdXJlID0gam9iRGF0YS5hbGxvd19mYWlsdXJlID8/IGZhbHNlO1xuICAgICAgICB0aGlzLmRlcGVuZGVuY2llcyA9IGpvYkRhdGEuZGVwZW5kZW5jaWVzIHx8IG51bGw7XG4gICAgICAgIHRoaXMucnVsZXMgPSBqb2JEYXRhLnJ1bGVzIHx8IG51bGw7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSB0eXBlb2Ygam9iRGF0YS5lbnZpcm9ubWVudCA9PT0gXCJzdHJpbmdcIiA/IHtuYW1lOiBqb2JEYXRhLmVudmlyb25tZW50fSA6IGpvYkRhdGEuZW52aXJvbm1lbnQ7XG5cbiAgICAgICAgbGV0IENJX1BST0pFQ1RfRElSID0gYCR7dGhpcy5jd2R9YDtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VOYW1lKSB7XG4gICAgICAgICAgICBDSV9QUk9KRUNUX0RJUiA9IGAvYnVpbGRzLyR7dGhpcy5zYWZlSm9iTmFtZX1gO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2hlbGxJc29sYXRpb24pIHtcbiAgICAgICAgICAgIENJX1BST0pFQ1RfRElSID0gYCR7dGhpcy5jd2R9Ly5naXRsYWItY2ktbG9jYWwvYnVpbGRzLyR7dGhpcy5zYWZlSm9iTmFtZX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJlZGVmaW5lZFZhcmlhYmxlcyA9IHtcbiAgICAgICAgICAgIEdJVExBQl9VU0VSX0xPR0lOOiBnaXREYXRhLnVzZXJbXCJHSVRMQUJfVVNFUl9MT0dJTlwiXSxcbiAgICAgICAgICAgIEdJVExBQl9VU0VSX0VNQUlMOiBnaXREYXRhLnVzZXJbXCJHSVRMQUJfVVNFUl9FTUFJTFwiXSxcbiAgICAgICAgICAgIEdJVExBQl9VU0VSX05BTUU6IGdpdERhdGEudXNlcltcIkdJVExBQl9VU0VSX05BTUVcIl0sXG4gICAgICAgICAgICBHSVRMQUJfVVNFUl9JRDogZ2l0RGF0YS51c2VyW1wiR0lUTEFCX1VTRVJfSURcIl0sXG4gICAgICAgICAgICBDSV9DT01NSVRfU0hPUlRfU0hBOiBnaXREYXRhLmNvbW1pdC5TSE9SVF9TSEEsIC8vIENoYW5nZXNcbiAgICAgICAgICAgIENJX0NPTU1JVF9TSEE6IGdpdERhdGEuY29tbWl0LlNIQSxcbiAgICAgICAgICAgIENJX1BST0pFQ1RfRElSLFxuICAgICAgICAgICAgQ0lfUFJPSkVDVF9OQU1FOiBnaXREYXRhLnJlbW90ZS5wcm9qZWN0LFxuICAgICAgICAgICAgQ0lfUFJPSkVDVF9USVRMRTogYCR7Y2FtZWxDYXNlKGdpdERhdGEucmVtb3RlLnByb2plY3QpfWAsXG4gICAgICAgICAgICBDSV9QUk9KRUNUX1BBVEg6IGdpdERhdGEuQ0lfUFJPSkVDVF9QQVRILFxuICAgICAgICAgICAgQ0lfUFJPSkVDVF9QQVRIX1NMVUc6IGdpdERhdGEuQ0lfUFJPSkVDVF9QQVRIX1NMVUcsXG4gICAgICAgICAgICBDSV9QUk9KRUNUX05BTUVTUEFDRTogYCR7Z2l0RGF0YS5yZW1vdGUuZ3JvdXB9YCxcbiAgICAgICAgICAgIENJX1BST0pFQ1RfVklTSUJJTElUWTogXCJpbnRlcm5hbFwiLFxuICAgICAgICAgICAgQ0lfUFJPSkVDVF9JRDogXCIxMjE3XCIsXG4gICAgICAgICAgICBDSV9DT01NSVRfUkVGX1BST1RFQ1RFRDogXCJmYWxzZVwiLFxuICAgICAgICAgICAgQ0lfQ09NTUlUX0JSQU5DSDogZ2l0RGF0YS5jb21taXQuUkVGX05BTUUsIC8vIE5vdCBhdmFpbGFibGUgaW4gbWVyZ2UgcmVxdWVzdCBvciB0YWcgcGlwZWxpbmVzXG4gICAgICAgICAgICBDSV9DT01NSVRfUkVGX05BTUU6IGdpdERhdGEuY29tbWl0LlJFRl9OQU1FLCAvLyBUYWcgb3IgYnJhbmNoIG5hbWVcbiAgICAgICAgICAgIENJX0NPTU1JVF9SRUZfU0xVRzogZ2l0RGF0YS5jb21taXQuUkVGX05BTUUucmVwbGFjZSgvW15hLXowLTldKy9pZywgXCItXCIpLnJlcGxhY2UoL14tLywgXCJcIikucmVwbGFjZSgvLSQvLCBcIlwiKS5zbGljZSgwLCA2MykudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgIENJX0NPTU1JVF9USVRMRTogXCJDb21taXQgVGl0bGVcIiwgLy8gRmlyc3QgbGluZSBvZiBjb21taXQgbWVzc2FnZS5cbiAgICAgICAgICAgIENJX0NPTU1JVF9NRVNTQUdFOiBcIkNvbW1pdCBUaXRsZVxcbk1vcmUgY29tbWl0IHRleHRcIiwgLy8gRnVsbCBjb21taXQgbWVzc2FnZVxuICAgICAgICAgICAgQ0lfQ09NTUlUX0RFU0NSSVBUSU9OOiBcIk1vcmUgY29tbWl0IHRleHRcIixcbiAgICAgICAgICAgIENJX1BJUEVMSU5FX1NPVVJDRTogXCJwdXNoXCIsXG4gICAgICAgICAgICBDSV9KT0JfSUQ6IGAke3RoaXMuam9iSWR9YCxcbiAgICAgICAgICAgIENJX1BJUEVMSU5FX0lEOiBgJHt0aGlzLnBpcGVsaW5lSWlkICsgMTAwMH1gLFxuICAgICAgICAgICAgQ0lfUElQRUxJTkVfSUlEOiBgJHt0aGlzLnBpcGVsaW5lSWlkfWAsXG4gICAgICAgICAgICBDSV9TRVJWRVJfSE9TVDogYCR7Z2l0RGF0YS5yZW1vdGUuaG9zdH1gLFxuICAgICAgICAgICAgQ0lfU0VSVkVSX1BPUlQ6IGAke2dpdERhdGEucmVtb3RlLnBvcnR9YCxcbiAgICAgICAgICAgIENJX1NFUlZFUl9VUkw6IGBodHRwczovLyR7Z2l0RGF0YS5yZW1vdGUuaG9zdH06NDQzYCxcbiAgICAgICAgICAgIENJX1NFUlZFUl9QUk9UT0NPTDogXCJodHRwc1wiLFxuICAgICAgICAgICAgQ0lfQVBJX1Y0X1VSTDogYGh0dHBzOi8vJHtnaXREYXRhLnJlbW90ZS5ob3N0fS9hcGkvdjRgLFxuICAgICAgICAgICAgQ0lfUFJPSkVDVF9VUkw6IGBodHRwczovLyR7Z2l0RGF0YS5yZW1vdGUuaG9zdH0vJHtnaXREYXRhLnJlbW90ZS5ncm91cH0vJHtnaXREYXRhLnJlbW90ZS5wcm9qZWN0fWAsXG4gICAgICAgICAgICBDSV9KT0JfVVJMOiBgaHR0cHM6Ly8ke2dpdERhdGEucmVtb3RlLmhvc3R9LyR7Z2l0RGF0YS5yZW1vdGUuZ3JvdXB9LyR7Z2l0RGF0YS5yZW1vdGUucHJvamVjdH0vLS9qb2JzLyR7dGhpcy5qb2JJZH1gLCAvLyBDaGFuZ2VzIG9uIHJlcnVuLlxuICAgICAgICAgICAgQ0lfUElQRUxJTkVfVVJMOiBgaHR0cHM6Ly8ke2dpdERhdGEucmVtb3RlLmhvc3R9LyR7Z2l0RGF0YS5yZW1vdGUuZ3JvdXB9LyR7Z2l0RGF0YS5yZW1vdGUucHJvamVjdH0vcGlwZWxpbmVzLyR7dGhpcy5waXBlbGluZUlpZH1gLFxuICAgICAgICAgICAgQ0lfSk9CX05BTUU6IGAke3RoaXMubmFtZX1gLFxuICAgICAgICAgICAgQ0lfSk9CX1NUQUdFOiBgJHt0aGlzLnN0YWdlfWAsXG4gICAgICAgICAgICBDSV9SRUdJU1RSWTogZ2l0RGF0YS5DSV9SRUdJU1RSWSxcbiAgICAgICAgICAgIENJX1JFR0lTVFJZX0lNQUdFOiBnaXREYXRhLkNJX1JFR0lTVFJZX0lNQUdFLFxuICAgICAgICAgICAgR0lUTEFCX0NJOiBcImZhbHNlXCIsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gQ3JlYXRlIGV4cGFuZGVkIHZhcmlhYmxlc1xuICAgICAgICBjb25zdCBlbnZzID0gey4uLnByZWRlZmluZWRWYXJpYWJsZXMsIC4uLmdsb2JhbHMudmFyaWFibGVzIHx8IHt9LCAuLi5qb2JEYXRhLnZhcmlhYmxlcyB8fCB7fSwgLi4udmFyaWFibGVzRnJvbUZpbGVzLCAuLi5jbGlWYXJpYWJsZXN9O1xuICAgICAgICBjb25zdCBleHBhbmRlZEdsb2JhbFZhcmlhYmxlcyA9IFV0aWxzLmV4cGFuZFZhcmlhYmxlcyhnbG9iYWxzLnZhcmlhYmxlcyB8fCB7fSwgZW52cyk7XG4gICAgICAgIGNvbnN0IGV4cGFuZGVkSm9iVmFyaWFibGVzID0gVXRpbHMuZXhwYW5kVmFyaWFibGVzKGpvYkRhdGEudmFyaWFibGVzIHx8IHt9LCBlbnZzKTtcbiAgICAgICAgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyA9IHsuLi5wcmVkZWZpbmVkVmFyaWFibGVzLCAuLi5leHBhbmRlZEdsb2JhbFZhcmlhYmxlcywgLi4uZXhwYW5kZWRKb2JWYXJpYWJsZXMsIC4uLnZhcmlhYmxlc0Zyb21GaWxlcywgLi4uY2xpVmFyaWFibGVzfTtcblxuICAgICAgICAvLyBTZXQge3doZW4sIGFsbG93RmFpbHVyZX0gYmFzZWQgb24gcnVsZXMgcmVzdWx0XG4gICAgICAgIGlmICh0aGlzLnJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBydWxlUmVzdWx0ID0gVXRpbHMuZ2V0UnVsZXNSZXN1bHQodGhpcy5ydWxlcywgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICB0aGlzLndoZW4gPSBydWxlUmVzdWx0LndoZW47XG4gICAgICAgICAgICB0aGlzLmFsbG93RmFpbHVyZSA9IHJ1bGVSZXN1bHQuYWxsb3dGYWlsdXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW50ZXJhY3RpdmUgJiYgKHRoaXMud2hlbiAhPT0gXCJtYW51YWxcIiB8fCB0aGlzLmltYWdlTmFtZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGl0RXJyb3IoYCR7dGhpcy5jaGFsa0pvYk5hbWV9IEBJbnRlcmFjdGl2ZSBkZWNvcmF0b3IgY2Fubm90IGhhdmUgaW1hZ2U6IGFuZCBtdXN0IGJlIHdoZW46bWFudWFsYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pbmplY3RTU0hBZ2VudCAmJiB0aGlzLmltYWdlTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEV4aXRFcnJvcihgJHt0aGlzLmNoYWxrSm9iTmFtZX0gQEluamVjdFNTSEFnZW50IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBpbWFnZTpgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmltYWdlTmFtZSAmJiB0aGlzLm1vdW50Q2FjaGUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICAgICAgYy5wYXRocy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBVdGlscy5leHBhbmRUZXh0KHAsIHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGF0aC5pbmNsdWRlcyhcIipcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGl0RXJyb3IoYCR7dGhpcy5uYW1lfSBjYW5ub3QgaGF2ZSAqIGluIGNhY2hlIHBhdGhzLCB3aGVuIC0tbW91bnQtY2FjaGUgaXMgZW5hYmxlZGApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgYXJ0aWZhY3RzVG9Tb3VyY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJhcnRpZmFjdHNUb1NvdXJjZVwiXSA9PSBudWxsID8gdHJ1ZSA6IHRoaXMuam9iRGF0YVtcImFydGlmYWN0c1RvU291cmNlXCJdO1xuICAgIH1cblxuICAgIGdldCBjaGFsa0pvYk5hbWUoKSB7XG4gICAgICAgIHJldHVybiBjaGFsa2B7Ymx1ZUJyaWdodCAke3RoaXMubmFtZS5wYWRFbmQodGhpcy5qb2JOYW1lUGFkKX19YDtcbiAgICB9XG5cbiAgICBnZXQgc2FmZUpvYk5hbWUoKSB7XG4gICAgICAgIHJldHVybiBVdGlscy5nZXRTYWZlSm9iTmFtZSh0aGlzLm5hbWUpO1xuICAgIH1cblxuICAgIGdldCBuZWVkcygpOiB7am9iOiBzdHJpbmc7IGFydGlmYWN0czogYm9vbGVhbn1bXSB8IG51bGwge1xuICAgICAgICBjb25zdCBuZWVkcyA9IHRoaXMuam9iRGF0YVtcIm5lZWRzXCJdO1xuICAgICAgICBpZiAoIW5lZWRzKSByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgbGlzdDoge2pvYjogc3RyaW5nOyBhcnRpZmFjdHM6IGJvb2xlYW59W10gPSBbXTtcbiAgICAgICAgbmVlZHMuZm9yRWFjaCgobmVlZDogYW55KSA9PiB7XG4gICAgICAgICAgICBsaXN0LnB1c2goe1xuICAgICAgICAgICAgICAgIGpvYjogdHlwZW9mIG5lZWQgPT09IFwic3RyaW5nXCIgPyBuZWVkIDogbmVlZC5qb2IsXG4gICAgICAgICAgICAgICAgYXJ0aWZhY3RzOiB0eXBlb2YgbmVlZCA9PT0gXCJzdHJpbmdcIiA/IHRydWUgOiBuZWVkLmFydGlmYWN0cyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG4gICAgZ2V0IGNhY2hlKCk6IENhY2hlRW50cnlbXSB7XG4gICAgICAgIGxldCBjYWNoZURhdGEgPSB0aGlzLmpvYkRhdGFbXCJjYWNoZVwiXTtcbiAgICAgICAgY29uc3QgY2FjaGVMaXN0OiBDYWNoZUVudHJ5W10gPSBbXTtcbiAgICAgICAgaWYgKCFjYWNoZURhdGEpIHJldHVybiBbXTtcblxuICAgICAgICBjYWNoZURhdGEgPSBBcnJheS5pc0FycmF5KGNhY2hlRGF0YSkgPyBjYWNoZURhdGEgOiBbY2FjaGVEYXRhXTtcbiAgICAgICAgY2FjaGVEYXRhLmZvckVhY2goKGM6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gY1tcImtleVwiXTtcbiAgICAgICAgICAgIGNvbnN0IHBvbGljeSA9IGNbXCJwb2xpY3lcIl0gPz8gXCJwdWxsLXB1c2hcIjtcbiAgICAgICAgICAgIGlmICghW1wicHVsbFwiLCBcInB1c2hcIiwgXCJwdWxsLXB1c2hcIl0uaW5jbHVkZXMocG9saWN5KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGl0RXJyb3IoXCJjYWNoZSBwb2xpY3kgaXMgbm90ICdwdWxsJywgJ3B1c2gnIG9yICdwdWxsLXB1c2gnXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGF0aHMgPSBjW1wicGF0aHNcIl0gPz8gW107XG4gICAgICAgICAgICBjYWNoZUxpc3QucHVzaChuZXcgQ2FjaGVFbnRyeShrZXksIHBhdGhzLCBwb2xpY3kpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjYWNoZUxpc3Q7XG4gICAgfVxuXG4gICAgZ2V0IGJ1aWxkVm9sdW1lTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYGdjbC0ke3RoaXMuc2FmZUpvYk5hbWV9LSR7dGhpcy5qb2JJZH0tYnVpbGRgO1xuICAgIH1cblxuICAgIGdldCB0bXBWb2x1bWVOYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgZ2NsLSR7dGhpcy5zYWZlSm9iTmFtZX0tJHt0aGlzLmpvYklkfS10bXBgO1xuICAgIH1cblxuICAgIGdldCBpbWFnZU5hbWUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5qb2JEYXRhW1wiaW1hZ2VcIl07XG4gICAgICAgIGlmICghaW1hZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW1hZ2VOYW1lID0gVXRpbHMuZXhwYW5kVGV4dChpbWFnZS5uYW1lLCB0aGlzLmV4cGFuZGVkVmFyaWFibGVzKTtcbiAgICAgICAgcmV0dXJuIGltYWdlTmFtZS5pbmNsdWRlcyhcIjpcIikgPyBpbWFnZU5hbWUgOiBgJHtpbWFnZU5hbWV9OmxhdGVzdGA7XG4gICAgfVxuXG4gICAgZ2V0IGltYWdlRW50cnlwb2ludCgpOiBzdHJpbmdbXSB8IG51bGwge1xuICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMuam9iRGF0YVtcImltYWdlXCJdO1xuXG4gICAgICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLmVudHJ5cG9pbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGFzc2VydChBcnJheS5pc0FycmF5KGltYWdlLmVudHJ5cG9pbnQpLCBcImltYWdlOmVudHJ5cG9pbnQgbXVzdCBiZSBhbiBhcnJheVwiKTtcbiAgICAgICAgcmV0dXJuIGltYWdlLmVudHJ5cG9pbnQ7XG4gICAgfVxuXG4gICAgZ2V0IHNlcnZpY2VzKCk6IFNlcnZpY2VbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJzZXJ2aWNlc1wiXTtcbiAgICB9XG5cbiAgICBnZXQgcHJvZHVjZXJzKCk6IHsgbmFtZTogc3RyaW5nOyBkb3RlbnY6IHN0cmluZyB8IG51bGwgfVtdIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9kdWNlcnM7XG4gICAgfVxuXG4gICAgc2V0IHByb2R1Y2Vycyhwcm9kdWNlcnM6IHsgbmFtZTogc3RyaW5nOyBkb3RlbnY6IHN0cmluZyB8IG51bGwgfVtdIHwgbnVsbCkge1xuICAgICAgICBhc3NlcnQodGhpcy5fcHJvZHVjZXJzID09IG51bGwsIFwidGhpcy5fcHJvZHVjZXJzIGNhbiBvbmx5IGJlIHNldCBvbmNlXCIpO1xuICAgICAgICB0aGlzLl9wcm9kdWNlcnMgPSBwcm9kdWNlcnM7XG4gICAgfVxuXG4gICAgZ2V0IHN0YWdlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJzdGFnZVwiXSB8fCBcInRlc3RcIjtcbiAgICB9XG5cbiAgICBnZXQgaW50ZXJhY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJpbnRlcmFjdGl2ZVwiXSB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgaW5qZWN0U1NIQWdlbnQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJpbmplY3RTU0hBZ2VudFwiXSB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgZGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcImRlc2NyaXB0aW9uXCJdID8/IFwiXCI7XG4gICAgfVxuXG4gICAgZ2V0IGFydGlmYWN0cygpOiB7IHBhdGhzPzogc3RyaW5nW107IGV4Y2x1ZGU/OiBzdHJpbmdbXTsgcmVwb3J0cz86IHsgZG90ZW52Pzogc3RyaW5nIH0gfXxudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcImFydGlmYWN0c1wiXTtcbiAgICB9XG5cbiAgICBnZXQgYmVmb3JlU2NyaXB0cygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJiZWZvcmVfc2NyaXB0XCJdIHx8IFtdO1xuICAgIH1cblxuICAgIGdldCBhZnRlclNjcmlwdHMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wiYWZ0ZXJfc2NyaXB0XCJdIHx8IFtdO1xuICAgIH1cblxuICAgIGdldCBzY3JpcHRzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcInNjcmlwdFwiXTtcbiAgICB9XG5cbiAgICBnZXQgcHJlU2NyaXB0c0V4aXRDb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlO1xuICAgIH1cblxuICAgIGdldCBhZnRlclNjcmlwdHNFeGl0Q29kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FmdGVyU2NyaXB0c0V4aXRDb2RlO1xuICAgIH1cblxuICAgIGdldCBydW5uaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVubmluZztcbiAgICB9XG5cbiAgICBnZXQgc3RhcnRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bm5pbmcgfHwgdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlICE9PSBudWxsO1xuICAgIH1cblxuICAgIGdldCBmaW5pc2hlZCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLl9ydW5uaW5nICYmIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgY292ZXJhZ2VQZXJjZW50KCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fY292ZXJhZ2VQZXJjZW50O1xuICAgIH1cblxuICAgIGFzeW5jIHN0YXJ0KHByaXZpbGVnZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgY29uc3Qgd3JpdGVTdHJlYW1zID0gdGhpcy53cml0ZVN0cmVhbXM7XG4gICAgICAgIGNvbnN0IHNhZmVKb2JuYW1lID0gdGhpcy5zYWZlSm9iTmFtZTtcblxuICAgICAgICB0aGlzLl9ydW5uaW5nID0gdHJ1ZTtcblxuICAgICAgICBhd2FpdCBmcy5lbnN1cmVGaWxlKGAke3RoaXMuY3dkfS8uZ2l0bGFiLWNpLWxvY2FsL291dHB1dC8ke3NhZmVKb2JuYW1lfS5sb2dgKTtcbiAgICAgICAgYXdhaXQgZnMudHJ1bmNhdGUoYCR7dGhpcy5jd2R9Ly5naXRsYWItY2ktbG9jYWwvb3V0cHV0LyR7c2FmZUpvYm5hbWV9LmxvZ2ApO1xuXG4gICAgICAgIGlmICghdGhpcy5pbnRlcmFjdGl2ZSkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBzdGFydGluZ30gJHt0aGlzLmltYWdlTmFtZSA/PyBcInNoZWxsXCJ9ICh7eWVsbG93ICR7dGhpcy5zdGFnZX19KVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJlc2NyaXB0cyA9IHRoaXMuYmVmb3JlU2NyaXB0cy5jb25jYXQodGhpcy5zY3JpcHRzKTtcbiAgICAgICAgdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlID0gYXdhaXQgdGhpcy5leGVjU2NyaXB0cyhwcmVzY3JpcHRzLCBwcml2aWxlZ2VkKTtcbiAgICAgICAgaWYgKHRoaXMuYWZ0ZXJTY3JpcHRzLmxlbmd0aCA9PT0gMCAmJiB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUgPiAwICYmICF0aGlzLmFsbG93RmFpbHVyZSkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihgJHt0aGlzLmdldEV4aXRlZFN0cmluZyhzdGFydFRpbWUsIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSwgZmFsc2UpfVxcbmApO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGVhbnVwUmVzb3VyY2VzKCk7XG4gICAgICAgICAgICB0aGlzLl9ydW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hZnRlclNjcmlwdHMubGVuZ3RoID09PSAwICYmIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSA+IDAgJiYgdGhpcy5hbGxvd0ZhaWx1cmUpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoYCR7dGhpcy5nZXRFeGl0ZWRTdHJpbmcoc3RhcnRUaW1lLCB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUsIHRydWUpfVxcbmApO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGVhbnVwUmVzb3VyY2VzKCk7XG4gICAgICAgICAgICB0aGlzLl9ydW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlID4gMCAmJiB0aGlzLmFsbG93RmFpbHVyZSkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihgJHt0aGlzLmdldEV4aXRlZFN0cmluZyhzdGFydFRpbWUsIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSwgdHJ1ZSl9XFxuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlID4gMCAmJiAhdGhpcy5hbGxvd0ZhaWx1cmUpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoYCR7dGhpcy5nZXRFeGl0ZWRTdHJpbmcoc3RhcnRUaW1lLCB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUsIGZhbHNlKX1cXG5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFmdGVyU2NyaXB0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9hZnRlclNjcmlwdHNFeGl0Q29kZSA9IGF3YWl0IHRoaXMuZXhlY1NjcmlwdHModGhpcy5hZnRlclNjcmlwdHMsIHByaXZpbGVnZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2FmdGVyU2NyaXB0c0V4aXRDb2RlID4gMCkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihgJHt0aGlzLmdldEV4aXRlZFN0cmluZyhzdGFydFRpbWUsIHRoaXMuX2FmdGVyU2NyaXB0c0V4aXRDb2RlLCB0cnVlLCBcIiBhZnRlcl9zY3JpcHRcIil9XFxuYCk7XG4gICAgICAgIH1cblxuICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGAke3RoaXMuZ2V0RmluaXNoZWRTdHJpbmcoc3RhcnRUaW1lKX1cXG5gKTtcblxuICAgICAgICBpZiAodGhpcy5qb2JEYXRhLmNvdmVyYWdlKSB7XG4gICAgICAgICAgICB0aGlzLl9jb3ZlcmFnZVBlcmNlbnQgPSBhd2FpdCBVdGlscy5nZXRDb3ZlcmFnZVBlcmNlbnQodGhpcy5jd2QsIHRoaXMuam9iRGF0YS5jb3ZlcmFnZSwgc2FmZUpvYm5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5jbGVhbnVwUmVzb3VyY2VzKCk7XG4gICAgICAgIHRoaXMuX3J1bm5pbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBhc3luYyBjbGVhbnVwUmVzb3VyY2VzKCkge1xuICAgICAgICBjb25zdCB3cml0ZVN0cmVhbXMgPSB0aGlzLndyaXRlU3RyZWFtcztcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiB0aGlzLl9jb250YWluZXJzVG9DbGVhbikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgZG9ja2VyIHJtIC1mICR7aWR9YCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGUgaW5zdGFuY2VvZiBFcnJvciwgXCJlIGlzIG5vdCBpbnN0YW5jZW9mIEVycm9yXCIpO1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtge3llbGxvdyAke2UubWVzc2FnZX19YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fc2VydmljZU5ldHdvcmtJZCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgZG9ja2VyIG5ldHdvcmsgcm0gJHt0aGlzLl9zZXJ2aWNlTmV0d29ya0lkfWApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGFzc2VydChlIGluc3RhbmNlb2YgRXJyb3IsIFwiZSBpcyBub3QgaW5zdGFuY2VvZiBFcnJvclwiKTtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHt5ZWxsb3cgJHtlLm1lc3NhZ2V9fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lclZvbHVtZU5hbWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb250YWluZXJWb2x1bWUgb2YgdGhpcy5fY29udGFpbmVyVm9sdW1lTmFtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oYGRvY2tlciB2b2x1bWUgcm0gJHtjb250YWluZXJWb2x1bWV9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGFzc2VydChlIGluc3RhbmNlb2YgRXJyb3IsIFwiZSBpcyBub3QgaW5zdGFuY2VvZiBFcnJvclwiKTtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHt5ZWxsb3cgJHtlLm1lc3NhZ2V9fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUluamVjdFNTSEFnZW50T3B0aW9ucygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmluamVjdFNTSEFnZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJkYXJ3aW5cIiB8fCAocHJvY2Vzcy5lbnYuT1NUWVBFPy5tYXRjaCgvXmRhcndpbi8pID8/IG51bGwpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCItLWVudiBTU0hfQVVUSF9TT0NLPS9ydW4vaG9zdC1zZXJ2aWNlcy9zc2gtYXV0aC5zb2NrIC12IC9ydW4vaG9zdC1zZXJ2aWNlcy9zc2gtYXV0aC5zb2NrOi9ydW4vaG9zdC1zZXJ2aWNlcy9zc2gtYXV0aC5zb2NrXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAtLWVudiBTU0hfQVVUSF9TT0NLPSR7cHJvY2Vzcy5lbnYuU1NIX0FVVEhfU09DS30gLXYgJHtwcm9jZXNzLmVudi5TU0hfQVVUSF9TT0NLfToke3Byb2Nlc3MuZW52LlNTSF9BVVRIX1NPQ0t9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlU2NyaXB0Q29tbWFuZHMoc2NyaXB0czogc3RyaW5nW10pIHtcbiAgICAgICAgbGV0IGNtZCA9IFwiXCI7XG4gICAgICAgIHNjcmlwdHMuZm9yRWFjaCgoc2NyaXB0KSA9PiB7XG4gICAgICAgICAgICAvLyBQcmludCBjb21tYW5kIGVjaG8nZWQgaW4gY29sb3JcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0ID0gc2NyaXB0LnNwbGl0KC9cXHI/XFxuLyk7XG4gICAgICAgICAgICBjb25zdCBtdWx0aWxpbmVUZXh0ID0gc3BsaXQubGVuZ3RoID4gMSA/IFwiICMgY29sbGFwc2VkIG11bHRpLWxpbmUgY29tbWFuZFwiIDogXCJcIjtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBzcGxpdFswXT8ucmVwbGFjZSgvW1xcXFxdL2csIFwiXFxcXFxcXFxcIikucmVwbGFjZSgvW1wiXS9nLCBcIlxcXFxcXFwiXCIpLnJlcGxhY2UoL1skXS9nLCBcIlxcXFwkXCIpO1xuICAgICAgICAgICAgY21kICs9IGNoYWxrYGVjaG8gXCJ7Z3JlZW4gJCAke3RleHR9JHttdWx0aWxpbmVUZXh0fX1cIlxcbmA7XG5cbiAgICAgICAgICAgIC8vIEV4ZWN1dGUgYWN0dWFsIHNjcmlwdFxuICAgICAgICAgICAgY21kICs9IGAke3NjcmlwdH1cXG5gO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNtZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIG1vdW50Q2FjaGVDbWQoc2FmZUpvYk5hbWU6IHN0cmluZywgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpIHtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VOYW1lICYmICF0aGlzLm1vdW50Q2FjaGUpIHJldHVybiBcIlwiO1xuXG4gICAgICAgIGxldCBjbWQgPSBcIlwiO1xuICAgICAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jYWNoZSkge1xuICAgICAgICAgICAgY29uc3QgdW5pcXVlQ2FjaGVOYW1lID0gYXdhaXQgYy5nZXRVbmlxdWVDYWNoZU5hbWUodGhpcy5jd2QsIHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgYy5wYXRocy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IFV0aWxzLmV4cGFuZFRleHQocCwgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBtb3VudGluZyBjYWNoZX0gZm9yIHBhdGggJHtwYXRofVxcbmApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlTW91bnQgPSBgZ2NsLSR7dGhpcy5leHBhbmRlZFZhcmlhYmxlcy5DSV9QUk9KRUNUX1BBVEhfU0xVR30tJHt1bmlxdWVDYWNoZU5hbWV9YDtcbiAgICAgICAgICAgICAgICBjbWQgKz0gYC12ICR7Y2FjaGVNb3VudH06L2J1aWxkcy8ke3NhZmVKb2JOYW1lfS8ke3BhdGh9IGA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY21kO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZXhlY1NjcmlwdHMoc2NyaXB0czogc3RyaW5nW10sIHByaXZpbGVnZWQ6IGJvb2xlYW4pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICBjb25zdCBzYWZlSm9iTmFtZSA9IHRoaXMuc2FmZUpvYk5hbWU7XG4gICAgICAgIGNvbnN0IG91dHB1dEZpbGVzUGF0aCA9IGAke3RoaXMuY3dkfS8uZ2l0bGFiLWNpLWxvY2FsL291dHB1dC8ke3NhZmVKb2JOYW1lfS5sb2dgO1xuICAgICAgICBjb25zdCBidWlsZFZvbHVtZU5hbWUgPSB0aGlzLmJ1aWxkVm9sdW1lTmFtZTtcbiAgICAgICAgY29uc3QgdG1wVm9sdW1lTmFtZSA9IHRoaXMudG1wVm9sdW1lTmFtZTtcbiAgICAgICAgY29uc3Qgd3JpdGVTdHJlYW1zID0gdGhpcy53cml0ZVN0cmVhbXM7XG4gICAgICAgIGNvbnN0IHJlcG9ydHNEb3RlbnZWYXJpYWJsZXMgPSBhd2FpdCB0aGlzLmluaXRQcm9kdWNlclJlcG9ydHNEb3RlbnZWYXJpYWJsZXMod3JpdGVTdHJlYW1zKTtcbiAgICAgICAgbGV0IHRpbWU7XG4gICAgICAgIGxldCBlbmRUaW1lO1xuXG4gICAgICAgIGlmIChzY3JpcHRzLmxlbmd0aCA9PT0gMCB8fCBzY3JpcHRzWzBdID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29weSBnaXQgdHJhY2tlZCBmaWxlcyB0byBidWlsZCBmb2xkZXIgaWYgc2hlbGwgaXNvbGF0aW9uIGVuYWJsZWQuXG4gICAgICAgIGlmICghdGhpcy5pbWFnZU5hbWUgJiYgdGhpcy5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMucnN5bmNUcmFja2VkRmlsZXModGhpcy5jd2QsIGAke3NhZmVKb2JOYW1lfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW50ZXJhY3RpdmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGlDbWQgPSB0aGlzLmdlbmVyYXRlU2NyaXB0Q29tbWFuZHMoc2NyaXB0cyk7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUNwID0gY2hpbGRQcm9jZXNzLnNwYXduKGlDbWQsIHtcbiAgICAgICAgICAgICAgICBzaGVsbDogXCJiYXNoXCIsXG4gICAgICAgICAgICAgICAgc3RkaW86IFtcImluaGVyaXRcIiwgXCJpbmhlcml0XCIsIFwiaW5oZXJpdFwiXSxcbiAgICAgICAgICAgICAgICBjd2Q6IHRoaXMuY3dkLFxuICAgICAgICAgICAgICAgIGVudjogey4uLnRoaXMuZXhwYW5kZWRWYXJpYWJsZXMsIC4uLnByb2Nlc3MuZW52fSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlQ3Aub24oXCJleGl0XCIsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMCkpO1xuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlQ3Aub24oXCJlcnJvclwiLCAoZXJyKSA9PiByZWplY3QoZXJyKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuXG4gICAgICAgIGlmICh0aGlzLmltYWdlTmFtZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wdWxsSW1hZ2Uod3JpdGVTdHJlYW1zLCB0aGlzLmltYWdlTmFtZSk7XG5cbiAgICAgICAgICAgIGxldCBkb2NrZXJDbWQgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKHByaXZpbGVnZWQpIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYGRvY2tlciBjcmVhdGUgLS1wcml2aWxlZ2VkIC11IDA6MCAtaSAke3RoaXMuZ2VuZXJhdGVJbmplY3RTU0hBZ2VudE9wdGlvbnMoKX0gYDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGBkb2NrZXIgY3JlYXRlIC11IDA6MCAtaSAke3RoaXMuZ2VuZXJhdGVJbmplY3RTU0hBZ2VudE9wdGlvbnMoKX0gYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNlcnZpY2VzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNyZWF0ZURvY2tlck5ldHdvcmsoYGdpdGxhYi1jaS1sb2NhbC0ke3RoaXMuam9iSWR9YCk7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLW5ldHdvcmsgZ2l0bGFiLWNpLWxvY2FsLSR7dGhpcy5qb2JJZH0gYDtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHNlcnZpY2Ugb2YgdGhpcy5zZXJ2aWNlcykge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnB1bGxJbWFnZSh3cml0ZVN0cmVhbXMsIHNlcnZpY2UuZ2V0TmFtZSh0aGlzLmV4cGFuZGVkVmFyaWFibGVzKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lcklkID0gYXdhaXQgdGhpcy5zdGFydFNlcnZpY2Uod3JpdGVTdHJlYW1zLCBzZXJ2aWNlLCBwcml2aWxlZ2VkKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlSGVhbHRoQ2hlY2sod3JpdGVTdHJlYW1zLCBzZXJ2aWNlLCBjb250YWluZXJJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB2b2x1bWVQcm9taXNlcyA9IFtdO1xuICAgICAgICAgICAgdm9sdW1lUHJvbWlzZXMucHVzaChVdGlscy5zcGF3bihgZG9ja2VyIHZvbHVtZSBjcmVhdGUgJHtidWlsZFZvbHVtZU5hbWV9YCwgdGhpcy5jd2QpKTtcbiAgICAgICAgICAgIHZvbHVtZVByb21pc2VzLnB1c2goVXRpbHMuc3Bhd24oYGRvY2tlciB2b2x1bWUgY3JlYXRlICR7dG1wVm9sdW1lTmFtZX1gLCB0aGlzLmN3ZCkpO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLXZvbHVtZSAke2J1aWxkVm9sdW1lTmFtZX06L2J1aWxkcy8ke3NhZmVKb2JOYW1lfSBgO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLXZvbHVtZSAke3RtcFZvbHVtZU5hbWV9Oi90bXAvIGA7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJWb2x1bWVOYW1lcy5wdXNoKGJ1aWxkVm9sdW1lTmFtZSk7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJWb2x1bWVOYW1lcy5wdXNoKHRtcFZvbHVtZU5hbWUpO1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodm9sdW1lUHJvbWlzZXMpO1xuXG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0td29ya2RpciAvYnVpbGRzLyR7c2FmZUpvYk5hbWV9IGA7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgdm9sdW1lIG9mIHRoaXMudm9sdW1lcykge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS12b2x1bWUgJHt2b2x1bWV9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZXh0cmFIb3N0IG9mIHRoaXMuZXh0cmFIb3N0cykge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS1hZGQtaG9zdD0ke2V4dHJhSG9zdH0gYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaW1hZ2VFbnRyeXBvaW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbWFnZUVudHJ5cG9pbnQuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tZW50cnlwb2ludCBcIiR7ZX1cIiBgO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmV4cGFuZGVkVmFyaWFibGVzKSkge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLWUgJHtrZXl9PScke1N0cmluZyh2YWx1ZSkudHJpbSgpfScgYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlcG9ydHNEb3RlbnZWYXJpYWJsZXMpKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtZSAke2tleX09JyR7U3RyaW5nKHZhbHVlKS50cmltKCl9JyBgO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYXdhaXQgdGhpcy5tb3VudENhY2hlQ21kKHNhZmVKb2JOYW1lLCB3cml0ZVN0cmVhbXMpO1xuXG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYCR7dGhpcy5pbWFnZU5hbWV9IHNoIC1jIFwiXFxuYDtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImlmIFsgLXggL3Vzci9sb2NhbC9iaW4vYmFzaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC91c3IvbG9jYWwvYmluL2Jhc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbGlmIFsgLXggL3Vzci9iaW4vYmFzaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC91c3IvYmluL2Jhc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbGlmIFsgLXggL2Jpbi9iYXNoIF07IHRoZW5cXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4ZWMgL2Jpbi9iYXNoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxpZiBbIC14IC91c3IvbG9jYWwvYmluL3NoIF07IHRoZW5cXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4ZWMgL3Vzci9sb2NhbC9iaW4vc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbGlmIFsgLXggL3Vzci9iaW4vc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvdXNyL2Jpbi9zaCBcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImVsaWYgWyAteCAvYmluL3NoIF07IHRoZW5cXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4ZWMgL2Jpbi9zaCBcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImVsaWYgWyAteCAvYnVzeWJveC9zaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC9idXN5Ym94L3NoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxzZVxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZWNobyBzaGVsbCBub3QgZm91bmRcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4aXQgMVxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZmlcXG5cXFwiXCI7XG5cbiAgICAgICAgICAgIGNvbnN0IHtzdGRvdXQ6IGNvbnRhaW5lcklkfSA9IGF3YWl0IFV0aWxzLnNwYXduKGRvY2tlckNtZCwgdGhpcy5jd2QpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVySWQgPSBjb250YWluZXJJZC5yZXBsYWNlKC9cXHI/XFxuL2csIFwiXCIpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyc1RvQ2xlYW4ucHVzaCh0aGlzLl9jb250YWluZXJJZCk7XG5cbiAgICAgICAgICAgIHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgLy8gQ29weSBzb3VyY2UgZmlsZXMgaW50byBjb250YWluZXIuXG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgZG9ja2VyIGNwIC5naXRsYWItY2ktbG9jYWwvYnVpbGRzLy5kb2NrZXIvLiAke3RoaXMuX2NvbnRhaW5lcklkfTovYnVpbGRzLyR7c2FmZUpvYk5hbWV9YCwgdGhpcy5jd2QpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG5cbiAgICAgICAgICAgIC8vIENvcHkgZmlsZSB2YXJpYWJsZXMgaW50byBjb250YWluZXIuXG4gICAgICAgICAgICBjb25zdCBmaWxlVmFyaWFibGVzRm9sZGVyID0gYC90bXAvZ2l0bGFiLWNpLWxvY2FsLWZpbGUtdmFyaWFibGVzLSR7dGhpcy5naXREYXRhLkNJX1BST0pFQ1RfUEFUSF9TTFVHfS9gO1xuICAgICAgICAgICAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHMoZmlsZVZhcmlhYmxlc0ZvbGRlcikpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgZG9ja2VyIGNwICR7ZmlsZVZhcmlhYmxlc0ZvbGRlcn0gJHt0aGlzLl9jb250YWluZXJJZH06JHtmaWxlVmFyaWFibGVzRm9sZGVyfS9gLCB0aGlzLmN3ZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgY29waWVkIHRvIGNvbnRhaW5lcn0gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5jb3B5Q2FjaGVJbih3cml0ZVN0cmVhbXMpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvcHlBcnRpZmFjdHNJbih3cml0ZVN0cmVhbXMpO1xuXG4gICAgICAgIGlmICh0aGlzLmltYWdlTmFtZSkge1xuICAgICAgICAgICAgLy8gRmlsZXMgaW4gZG9ja2VyLWV4ZWN1dG9yIGJ1aWxkIGZvbGRlciBtdXN0IGJlIHJvb3Qgb3duZWQuXG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgZG9ja2VyIHJ1biAtLXJtIC12ICR7dG1wVm9sdW1lTmFtZX06L3RtcC8gLXYgJHtidWlsZFZvbHVtZU5hbWV9Oi9hcHAvIGZpcmVjb3cvZ2l0bGFiLWNpLWxvY2FsLXV0aWwgYmFzaCAtYyBcImNob3duIDA6MCAtUiAvYXBwLyAmJiBjaG1vZCBhK3J3IC1SIC9hcHAvICYmIGNobW9kIGErcncgLVIgL3RtcC9cImApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNtZCA9IFwic2V0IC1lbyBwaXBlZmFpbFxcblwiO1xuICAgICAgICBjbWQgKz0gXCJleGVjIDA8IC9kZXYvbnVsbFxcblwiO1xuXG4gICAgICAgIGlmICghdGhpcy5pbWFnZU5hbWUgJiYgdGhpcy5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgY21kICs9IGBjZCAuZ2l0bGFiLWNpLWxvY2FsL2J1aWxkcy8ke3NhZmVKb2JOYW1lfS9cXG5gO1xuICAgICAgICB9XG4gICAgICAgIGNtZCArPSB0aGlzLmdlbmVyYXRlU2NyaXB0Q29tbWFuZHMoc2NyaXB0cyk7XG5cbiAgICAgICAgY21kICs9IFwiZXhpdCAwXFxuXCI7XG5cbiAgICAgICAgYXdhaXQgZnMub3V0cHV0RmlsZShgJHt0aGlzLmN3ZH0vLmdpdGxhYi1jaS1sb2NhbC9zY3JpcHRzLyR7c2FmZUpvYk5hbWV9YCwgY21kLCBcInV0Zi04XCIpO1xuICAgICAgICBhd2FpdCBmcy5jaG1vZChgJHt0aGlzLmN3ZH0vLmdpdGxhYi1jaS1sb2NhbC9zY3JpcHRzLyR7c2FmZUpvYk5hbWV9YCwgXCIwNzU1XCIpO1xuXG4gICAgICAgIGlmICh0aGlzLmltYWdlTmFtZSkge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oYGRvY2tlciBjcCAuZ2l0bGFiLWNpLWxvY2FsL3NjcmlwdHMvLiAke3RoaXMuX2NvbnRhaW5lcklkfTovZ2NsLXNjcmlwdHMvYCwgdGhpcy5jd2QpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3AgPSBjaGlsZFByb2Nlc3Muc3Bhd24odGhpcy5fY29udGFpbmVySWQgPyBgZG9ja2VyIHN0YXJ0IC0tYXR0YWNoIC1pICR7dGhpcy5fY29udGFpbmVySWR9YCA6IFwiYmFzaFwiLCB7XG4gICAgICAgICAgICBzaGVsbDogXCJiYXNoXCIsXG4gICAgICAgICAgICBzdGRpbzogW1wicGlwZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdLFxuICAgICAgICAgICAgY3dkOiB0aGlzLmN3ZCxcbiAgICAgICAgICAgIGVudjogdGhpcy5pbWFnZU5hbWUgPyB7Li4ucHJvY2Vzcy5lbnZ9IDogey4uLnRoaXMuZXhwYW5kZWRWYXJpYWJsZXMsIC4uLnJlcG9ydHNEb3RlbnZWYXJpYWJsZXMsIC4uLnByb2Nlc3MuZW52fSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgb3V0RnVuYyA9IChlOiBhbnksIHN0cmVhbTogKHR4dDogc3RyaW5nKSA9PiB2b2lkLCBjb2xvcml6ZTogKHN0cjogc3RyaW5nKSA9PiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGAke2V9YC5zcGxpdCgvXFxyP1xcbi8pKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxpbmUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN0cmVhbShgJHt0aGlzLmNoYWxrSm9iTmFtZX0gYCk7XG4gICAgICAgICAgICAgICAgaWYgKCFsaW5lLnN0YXJ0c1dpdGgoXCJcXHUwMDFiWzMybSRcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtKGAke2NvbG9yaXplKFwiPlwiKX0gYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0cmVhbShgJHtsaW5lfVxcbmApO1xuICAgICAgICAgICAgICAgIGZzLmFwcGVuZEZpbGVTeW5jKG91dHB1dEZpbGVzUGF0aCwgYCR7bGluZX1cXG5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBleGl0Q29kZSA9IGF3YWl0IG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY3Auc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoZSkgPT4gb3V0RnVuYyhlLCB3cml0ZVN0cmVhbXMuc3Rkb3V0LmJpbmQod3JpdGVTdHJlYW1zKSwgKHMpID0+IGNoYWxrYHtncmVlbkJyaWdodCAke3N9fWApKTtcbiAgICAgICAgICAgIGNwLnN0ZGVyci5vbihcImRhdGFcIiwgKGUpID0+IG91dEZ1bmMoZSwgd3JpdGVTdHJlYW1zLnN0ZGVyci5iaW5kKHdyaXRlU3RyZWFtcyksIChzKSA9PiBjaGFsa2B7cmVkQnJpZ2h0ICR7c319YCkpO1xuXG4gICAgICAgICAgICBjcC5vbihcImV4aXRcIiwgKGNvZGUpID0+IHNldFRpbWVvdXQoKCkgPT4gcmVzb2x2ZShjb2RlID8/IDApLCAxMCkpO1xuICAgICAgICAgICAgY3Aub24oXCJlcnJvclwiLCAoZXJyKSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChlcnIpLCAxMCkpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5pbWFnZU5hbWUpIHtcbiAgICAgICAgICAgICAgICBjcC5zdGRpbi5lbmQoYC9nY2wtc2NyaXB0cy8ke3NhZmVKb2JOYW1lfWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjcC5zdGRpbi5lbmQoYC4vLmdpdGxhYi1jaS1sb2NhbC9zY3JpcHRzLyR7c2FmZUpvYk5hbWV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChleGl0Q29kZSA9PSAwKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvcHlDYWNoZU91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb3B5QXJ0aWZhY3RzT3V0KHdyaXRlU3RyZWFtcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhpdENvZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBwdWxsSW1hZ2Uod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIGltYWdlVG9QdWxsOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgIGxldCBwdWxsQ21kID0gXCJcIjtcbiAgICAgICAgcHVsbENtZCArPSBgZG9ja2VyIGltYWdlIGxzIC0tZm9ybWF0ICd7ey5SZXBvc2l0b3J5fX06e3suVGFnfX0nIHwgZ3JlcCAtRSAnXiR7aW1hZ2VUb1B1bGx9JCdcXG5gO1xuICAgICAgICBwdWxsQ21kICs9IFwiaWYgWyBcXFwiJD9cXFwiIC1uZSAwIF07IHRoZW5cXG5cIjtcbiAgICAgICAgcHVsbENtZCArPSBgXFx0ZWNobyBcIlB1bGxpbmcgJHtpbWFnZVRvUHVsbH1cIlxcbmA7XG4gICAgICAgIHB1bGxDbWQgKz0gYFxcdGRvY2tlciBwdWxsICR7aW1hZ2VUb1B1bGx9XFxuYDtcbiAgICAgICAgcHVsbENtZCArPSBcImZpXFxuXCI7XG4gICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKHB1bGxDbWQsIHRoaXMuY3dkKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcbiAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBwdWxsZWR9ICR7aW1hZ2VUb1B1bGx9IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGluaXRQcm9kdWNlclJlcG9ydHNEb3RlbnZWYXJpYWJsZXMod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpIHtcbiAgICAgICAgY29uc3QgcHJvZHVjZXJzID0gdGhpcy5wcm9kdWNlcnM7XG4gICAgICAgIGxldCBwcm9kdWNlclJlcG9ydHNFbnZzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgcHJvZHVjZXIgb2YgcHJvZHVjZXJzID8/IFtdKSB7XG4gICAgICAgICAgICBpZiAocHJvZHVjZXIuZG90ZW52ID09PSBudWxsKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3Qgc2FmZVByb2R1Y2VyTmFtZSA9IFV0aWxzLmdldFNhZmVKb2JOYW1lKHByb2R1Y2VyLm5hbWUpO1xuICAgICAgICAgICAgbGV0IGRvdGVudkZpbGU7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hlbGxJc29sYXRpb24gJiYgIXRoaXMuaW1hZ2VOYW1lKSB7XG4gICAgICAgICAgICAgICAgZG90ZW52RmlsZSA9IGAke3RoaXMuY3dkfS8ke3Byb2R1Y2VyLmRvdGVudn1gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkb3RlbnZGaWxlID0gYCR7dGhpcy5jd2R9Ly5naXRsYWItY2ktbG9jYWwvYXJ0aWZhY3RzLyR7c2FmZVByb2R1Y2VyTmFtZX0vLmdpdGxhYi1jaS1yZXBvcnRzL2RvdGVudi8ke3Byb2R1Y2VyLmRvdGVudn1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHMoZG90ZW52RmlsZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9kdWNlclJlcG9ydEVudiA9IGRvdGVudi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShkb3RlbnZGaWxlKSk7XG4gICAgICAgICAgICAgICAgcHJvZHVjZXJSZXBvcnRzRW52cyA9IHsuLi5wcm9kdWNlclJlcG9ydHNFbnZzLCAuLi5wcm9kdWNlclJlcG9ydEVudn07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge3llbGxvdyAnJHtwcm9kdWNlci5kb3RlbnZ9JyBwcm9kdWNlZCBieSAnJHtwcm9kdWNlci5uYW1lfScgY291bGQgbm90IGJlIGZvdW5kfVxcbmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb2R1Y2VyUmVwb3J0c0VudnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjb3B5Q2FjaGVJbih3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcykge1xuICAgICAgICBpZiAodGhpcy5tb3VudENhY2hlICYmIHRoaXMuaW1hZ2VOYW1lKSByZXR1cm47XG4gICAgICAgIGlmICgoIXRoaXMuaW1hZ2VOYW1lICYmICF0aGlzLnNoZWxsSXNvbGF0aW9uKSB8fCB0aGlzLmNhY2hlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICBpZiAoIVtcInB1bGxcIiwgXCJwdWxsLXB1c2hcIl0uaW5jbHVkZXMoYy5wb2xpY3kpKSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgY29uc3QgY2FjaGVOYW1lID0gYXdhaXQgYy5nZXRVbmlxdWVDYWNoZU5hbWUodGhpcy5jd2QsIHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgY29uc3QgY2FjaGVGb2xkZXIgPSBgJHt0aGlzLmN3ZH0vLmdpdGxhYi1jaS1sb2NhbC9jYWNoZS8ke2NhY2hlTmFtZX1gO1xuICAgICAgICAgICAgaWYgKCFhd2FpdCBmcy5wYXRoRXhpc3RzKGNhY2hlRm9sZGVyKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhd2FpdCBNdXRleC5leGNsdXNpdmUoY2FjaGVOYW1lLCBhc3luYygpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNvcHlJbihjYWNoZUZvbGRlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgaW1wb3J0ZWQgY2FjaGUgJyR7Y2FjaGVOYW1lfSd9IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weUFydGlmYWN0c0luKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKSB7XG4gICAgICAgIGlmICgoIXRoaXMuaW1hZ2VOYW1lICYmICF0aGlzLnNoZWxsSXNvbGF0aW9uKSB8fCAodGhpcy5wcm9kdWNlcnMgPz8gW10pLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHByb2R1Y2VyIG9mIHRoaXMucHJvZHVjZXJzID8/IFtdKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9kdWNlclNhZmVOYW1lID0gVXRpbHMuZ2V0U2FmZUpvYk5hbWUocHJvZHVjZXIubmFtZSk7XG4gICAgICAgICAgICBjb25zdCBhcnRpZmFjdEZvbGRlciA9IGAke3RoaXMuY3dkfS8uZ2l0bGFiLWNpLWxvY2FsL2FydGlmYWN0cy8ke3Byb2R1Y2VyU2FmZU5hbWV9YDtcbiAgICAgICAgICAgIGlmICghYXdhaXQgZnMucGF0aEV4aXN0cyhhcnRpZmFjdEZvbGRlcikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhpdEVycm9yKGAke2FydGlmYWN0Rm9sZGVyfSBkb2Vzbid0IGV4aXN0LCBkaWQgeW91IGZvcmdldCAtLW5lZWRzYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuY29weUluKGFydGlmYWN0Rm9sZGVyKSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgaW1wb3J0ZWQgYXJ0aWZhY3RzfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgfVxuXG4gICAgY29weUluKHNvdXJjZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHNhZmVKb2JOYW1lID0gdGhpcy5zYWZlSm9iTmFtZTtcbiAgICAgICAgaWYgKCF0aGlzLmltYWdlTmFtZSAmJiB0aGlzLnNoZWxsSXNvbGF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gVXRpbHMuc3Bhd24oYHJzeW5jIC1hICR7c291cmNlfS8uICR7dGhpcy5jd2R9Ly5naXRsYWItY2ktbG9jYWwvYnVpbGRzLyR7c2FmZUpvYk5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFV0aWxzLnNwYXduKGBkb2NrZXIgY3AgJHtzb3VyY2V9Ly4gJHt0aGlzLl9jb250YWluZXJJZH06L2J1aWxkcy8ke3NhZmVKb2JOYW1lfWApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weUNhY2hlT3V0KHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKSB7XG4gICAgICAgIGlmICh0aGlzLm1vdW50Q2FjaGUgJiYgdGhpcy5pbWFnZU5hbWUpIHJldHVybjtcbiAgICAgICAgaWYgKCghdGhpcy5pbWFnZU5hbWUgJiYgIXRoaXMuc2hlbGxJc29sYXRpb24pIHx8IHRoaXMuY2FjaGUubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAgICAgbGV0IHRpbWUsIGVuZFRpbWU7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICBpZiAoIVtcInB1c2hcIiwgXCJwdWxsLXB1c2hcIl0uaW5jbHVkZXMoYy5wb2xpY3kpKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBjYWNoZU5hbWUgPSBhd2FpdCBjLmdldFVuaXF1ZUNhY2hlTmFtZSh0aGlzLmN3ZCwgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhdGggb2YgYy5wYXRocykge1xuICAgICAgICAgICAgICAgIHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkUGF0aCA9IFV0aWxzLmV4cGFuZFRleHQocGF0aCwgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICAgICAgbGV0IGNtZCA9IFwic2hvcHQgLXMgZ2xvYnN0YXIgbnVsbGdsb2IgZG90Z2xvYlxcblwiO1xuICAgICAgICAgICAgICAgIGNtZCArPSBgbWtkaXIgLXAgLi4vLi4vY2FjaGUvJHtjYWNoZU5hbWV9XFxuYDtcbiAgICAgICAgICAgICAgICBjbWQgKz0gYHJzeW5jIC1SYSAke2V4cGFuZGVkUGF0aH0gLi4vLi4vY2FjaGUvJHtjYWNoZU5hbWV9Ly4gfHwgdHJ1ZVxcbmA7XG5cbiAgICAgICAgICAgICAgICBhd2FpdCBNdXRleC5leGNsdXNpdmUoY2FjaGVOYW1lLCBhc3luYygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb3B5T3V0KGNtZCwgXCJjYWNoZVwiLCBbXSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVhZGRpciA9IGF3YWl0IGZzLnJlYWRkaXIoYCR7dGhpcy5jd2R9Ly5naXRsYWItY2ktbG9jYWwvY2FjaGUvJHtjYWNoZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgaWYgKHJlYWRkaXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge3llbGxvdyAhISBubyBjYWNoZSB3YXMgY29waWVkIGZvciAke3BhdGh9ICEhfVxcbmApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgZXhwb3J0ZWQgY2FjaGUgJHtleHBhbmRlZFBhdGh9ICcke2NhY2hlTmFtZX0nfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjb3B5QXJ0aWZhY3RzT3V0KHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKSB7XG4gICAgICAgIGNvbnN0IHNhZmVKb2JOYW1lID0gdGhpcy5zYWZlSm9iTmFtZTtcblxuICAgICAgICBpZiAoIXRoaXMuc2hlbGxJc29sYXRpb24gJiYgIXRoaXMuaW1hZ2VOYW1lIHx8ICF0aGlzLmFydGlmYWN0cykgcmV0dXJuO1xuXG4gICAgICAgIGxldCB0aW1lLCBlbmRUaW1lO1xuICAgICAgICBsZXQgY3BDbWQgPSBcInNob3B0IC1zIGdsb2JzdGFyIG51bGxnbG9iIGRvdGdsb2JcXG5cIjtcbiAgICAgICAgY3BDbWQgKz0gYG1rZGlyIC1wIC4uLy4uL2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfVxcbmA7XG4gICAgICAgIGZvciAoY29uc3QgYXJ0aWZhY3RQYXRoIG9mIHRoaXMuYXJ0aWZhY3RzPy5wYXRocyA/PyBbXSkge1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWRQYXRoID0gVXRpbHMuZXhwYW5kVGV4dChhcnRpZmFjdFBhdGgsIHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgY3BDbWQgKz0gYHJzeW5jIC1SYSAke2V4cGFuZGVkUGF0aH0gLi4vLi4vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9Ly4gfHwgdHJ1ZVxcbmA7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGFydGlmYWN0RXhjbHVkZVBhdGggb2YgdGhpcy5hcnRpZmFjdHM/LmV4Y2x1ZGUgPz8gW10pIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkUGF0aCA9IFV0aWxzLmV4cGFuZFRleHQoYXJ0aWZhY3RFeGNsdWRlUGF0aCwgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICBjcENtZCArPSBgbHMgLTFkICcuLi8uLi9hcnRpZmFjdHMvJHtzYWZlSm9iTmFtZX0vJHtleHBhbmRlZFBhdGh9JyB8IHhhcmdzIC1uMSBybSAtcmYgfHwgdHJ1ZVxcbmA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXBvcnREb3RlbnYgPSB0aGlzLmFydGlmYWN0cy5yZXBvcnRzPy5kb3RlbnYgPz8gbnVsbDtcbiAgICAgICAgaWYgKHJlcG9ydERvdGVudiAhPSBudWxsKSB7XG4gICAgICAgICAgICBjcENtZCArPSBgbWtkaXIgLXAgLi4vLi4vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9Ly5naXRsYWItY2ktcmVwb3J0cy9kb3RlbnZcXG5gO1xuICAgICAgICAgICAgY3BDbWQgKz0gYHJzeW5jIC1SYSAke3JlcG9ydERvdGVudn0gLi4vLi4vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9Ly5naXRsYWItY2ktcmVwb3J0cy9kb3RlbnYvLlxcbmA7XG4gICAgICAgIH1cblxuICAgICAgICB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgY29uc3QgZG9ja2VyQ21kRXh0cmFzID0gdGhpcy5tb3VudENhY2hlID8gW2F3YWl0IHRoaXMubW91bnRDYWNoZUNtZCh0aGlzLnNhZmVKb2JOYW1lLCB3cml0ZVN0cmVhbXMpXSA6IFtdO1xuICAgICAgICBhd2FpdCB0aGlzLmNvcHlPdXQoY3BDbWQsIFwiYXJ0aWZhY3RzXCIsIGRvY2tlckNtZEV4dHJhcyk7XG4gICAgICAgIGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcblxuICAgICAgICBjb25zdCByZWFkZGlyID0gYXdhaXQgZnMucmVhZGRpcihgJHt0aGlzLmN3ZH0vLmdpdGxhYi1jaS1sb2NhbC9hcnRpZmFjdHMvJHtzYWZlSm9iTmFtZX1gKTtcbiAgICAgICAgaWYgKHJlYWRkaXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHt5ZWxsb3cgISEgbm8gYXJ0aWZhY3RzIHdhcyBjb3BpZWQgISF9XFxuYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IGV4cG9ydGVkIGFydGlmYWN0c30gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYXJ0aWZhY3RzVG9Tb3VyY2UpIHtcbiAgICAgICAgICAgIHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oYHJzeW5jIC0tZXhjbHVkZT0vLmdpdGxhYi1jaS1yZXBvcnRzLyAtYSAke3RoaXMuY3dkfS8uZ2l0bGFiLWNpLWxvY2FsL2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfS8uICR7dGhpcy5jd2R9YCk7XG4gICAgICAgICAgICBpZiAocmVwb3J0RG90ZW52ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgcnN5bmMgLWEgJHt0aGlzLmN3ZH0vLmdpdGxhYi1jaS1sb2NhbC9hcnRpZmFjdHMvJHtzYWZlSm9iTmFtZX0vLmdpdGxhYi1jaS1yZXBvcnRzL2RvdGVudi8uICR7dGhpcy5jd2R9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IGNvcGllZCBhcnRpZmFjdHMgdG8gY3dkfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNvcHlPdXQoY21kOiBzdHJpbmcsIHR5cGU6IFwiYXJ0aWZhY3RzXCIgfCBcImNhY2hlXCIsIGRvY2tlckNtZEV4dHJhczogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3Qgc2FmZUpvYk5hbWUgPSB0aGlzLnNhZmVKb2JOYW1lO1xuICAgICAgICBjb25zdCBidWlsZFZvbHVtZU5hbWUgPSB0aGlzLmJ1aWxkVm9sdW1lTmFtZTtcblxuICAgICAgICBhd2FpdCBmcy5ta2RpcnAoYCR7dGhpcy5jd2R9Ly5naXRsYWItY2ktbG9jYWwvJHt0eXBlfWApO1xuXG4gICAgICAgIGlmICh0aGlzLmltYWdlTmFtZSkge1xuICAgICAgICAgICAgY29uc3Qge3N0ZG91dDogY2lkfSA9IGF3YWl0IFV0aWxzLnNwYXduKGBkb2NrZXIgY3JlYXRlIC1pICR7ZG9ja2VyQ21kRXh0cmFzLmpvaW4oXCIgXCIpfSAtdiAke2J1aWxkVm9sdW1lTmFtZX06L2J1aWxkcy8ke3NhZmVKb2JOYW1lfS8gLXcgL2J1aWxkcy8ke3NhZmVKb2JOYW1lfS8gZmlyZWNvdy9naXRsYWItY2ktbG9jYWwtdXRpbCBiYXNoIC1jIFwiJHtjbWR9XCJgLCB0aGlzLmN3ZCk7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJJZCA9IGNpZC5yZXBsYWNlKC9cXHI/XFxuL2csIFwiXCIpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyc1RvQ2xlYW4ucHVzaChjb250YWluZXJJZCk7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgZG9ja2VyIHN0YXJ0ICR7Y29udGFpbmVySWR9IC0tYXR0YWNoYCk7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgZG9ja2VyIGNwICR7Y29udGFpbmVySWR9Oi8ke3R5cGV9Ly4gLmdpdGxhYi1jaS1sb2NhbC8ke3R5cGV9Ly5gLCB0aGlzLmN3ZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oYGJhc2ggLWVvIHBpcGVmYWlsIC1jIFwiJHtjbWR9XCJgLCBgJHt0aGlzLmN3ZH0vLmdpdGxhYi1jaS1sb2NhbC9idWlsZHMvJHtzYWZlSm9iTmFtZX1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcykge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fbG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KTtcbiAgICAgICAgdGhpcy5fbG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHtncmV5ID4gc3RpbGwgcnVubmluZy4uLn1cXG5gKTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICB9LCAxMDAwMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFeGl0ZWRTdHJpbmcoc3RhcnRUaW1lOiBbbnVtYmVyLCBudW1iZXJdLCBjb2RlOiBudW1iZXIsIHdhcm5pbmcgPSBmYWxzZSwgcHJlcGVuZFN0cmluZyA9IFwiXCIpIHtcbiAgICAgICAgY29uc3QgZmluaXNoZWRTdHIgPSB0aGlzLmdldEZpbmlzaGVkU3RyaW5nKHN0YXJ0VGltZSk7XG4gICAgICAgIGlmICh3YXJuaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hhbGtgJHtmaW5pc2hlZFN0cn0ge2JsYWNrLmJnWWVsbG93QnJpZ2h0ICBXQVJOICR7Y29kZS50b1N0cmluZygpfSB9JHtwcmVwZW5kU3RyaW5nfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hhbGtgJHtmaW5pc2hlZFN0cn0ge2JsYWNrLmJnUmVkICBGQUlMICR7Y29kZS50b1N0cmluZygpfSB9ICR7cHJlcGVuZFN0cmluZ31gO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RmluaXNoZWRTdHJpbmcoc3RhcnRUaW1lOiBbbnVtYmVyLCBudW1iZXJdKSB7XG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZShzdGFydFRpbWUpO1xuICAgICAgICBjb25zdCB0aW1lU3RyID0gcHJldHR5SHJ0aW1lKGVuZFRpbWUpO1xuICAgICAgICByZXR1cm4gY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgZmluaXNoZWR9IGluIHttYWdlbnRhICR7dGltZVN0cn19YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNyZWF0ZURvY2tlck5ldHdvcmsobmV0d29ya05hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCB7c3Rkb3V0OiBuZXR3b3JrSWR9ID0gYXdhaXQgVXRpbHMuc3Bhd24oYGRvY2tlciBuZXR3b3JrIGNyZWF0ZSAke25ldHdvcmtOYW1lfWApO1xuICAgICAgICB0aGlzLl9zZXJ2aWNlTmV0d29ya0lkID0gbmV0d29ya0lkLnJlcGxhY2UoL1xccj9cXG4vZywgXCJcIik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzdGFydFNlcnZpY2Uod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIHNlcnZpY2U6IFNlcnZpY2UsIHByaXZpbGVnZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgbGV0IGRvY2tlckNtZCA9IGBkb2NrZXIgcnVuIC1kIC0tbmV0d29yayBnaXRsYWItY2ktbG9jYWwtJHt0aGlzLmpvYklkfSBgO1xuXG4gICAgICAgIGlmIChwcml2aWxlZ2VkKSB7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCItLXByaXZpbGVnZWQgXCI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZXJ2aWNlQWxpYXMgPSBzZXJ2aWNlLmdldEFsaWFzKHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHNlcnZpY2UuZ2V0TmFtZSh0aGlzLmV4cGFuZGVkVmFyaWFibGVzKTtcbiAgICAgICAgY29uc3Qgc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbiA9IHNlcnZpY2VOYW1lLnJlcGxhY2UoLyguKikoOi4qKS8sIFwiJDFcIik7XG4gICAgICAgIGNvbnN0IGFsaWFzZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgYWxpYXNlcy5hZGQoc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbi5yZXBsYWNlKFwiL1wiLCBcIi1cIikpO1xuICAgICAgICBhbGlhc2VzLmFkZChzZXJ2aWNlTmFtZVdpdGhvdXRWZXJzaW9uLnJlcGxhY2UoXCIvXCIsIFwiX19cIikpO1xuICAgICAgICBpZiAoc2VydmljZUFsaWFzKSB7XG4gICAgICAgICAgICBhbGlhc2VzLmFkZChzZXJ2aWNlQWxpYXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yKGNvbnN0IGFsaWFzIG9mIGFsaWFzZXMpIHtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS1uZXR3b3JrLWFsaWFzPSR7YWxpYXN9IGA7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmV4cGFuZGVkVmFyaWFibGVzKSkge1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtZSAke2tleX09JyR7U3RyaW5nKHZhbHVlKS50cmltKCl9JyBgO1xuICAgICAgICB9XG5cbiAgICAgICAgKHNlcnZpY2UuZ2V0RW50cnlwb2ludCgpID8/IFtdKS5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tZW50cnlwb2ludCBcIiR7ZX1cIiBgO1xuICAgICAgICB9KTtcblxuICAgICAgICBkb2NrZXJDbWQgKz0gYCR7c2VydmljZU5hbWV9IGA7XG5cbiAgICAgICAgKHNlcnZpY2UuZ2V0Q29tbWFuZCgpID8/IFtdKS5mb3JFYWNoKChlKSA9PiBkb2NrZXJDbWQgKz0gYFwiJHtlfVwiIGApO1xuXG4gICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICBjb25zdCB7c3Rkb3V0OiBjb250YWluZXJJZH0gPSBhd2FpdCBVdGlscy5zcGF3bihkb2NrZXJDbWQsIHRoaXMuY3dkKTtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyc1RvQ2xlYW4ucHVzaChjb250YWluZXJJZC5yZXBsYWNlKC9cXHI/XFxuL2csIFwiXCIpKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcbiAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBzdGFydGVkIHNlcnZpY2UgaW1hZ2U6ICR7c2VydmljZU5hbWV9IHdpdGggYWxpYXNlczogJHtBcnJheS5mcm9tKGFsaWFzZXMpLmpvaW4oXCIsIFwiKX19IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lcklkLnJlcGxhY2UoL1xccj9cXG4vZywgXCJcIik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzZXJ2aWNlSGVhbHRoQ2hlY2sod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIHNlcnZpY2U6IFNlcnZpY2UsIGNvbnRhaW5lcklkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZG9ja2VySW5zcGVjdENtZCA9IGBkb2NrZXIgaW1hZ2UgaW5zcGVjdCAke3NlcnZpY2UuZ2V0TmFtZSh0aGlzLmV4cGFuZGVkVmFyaWFibGVzKX1gO1xuICAgICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IFV0aWxzLnNwYXduKGRvY2tlckluc3BlY3RDbWQsIHRoaXMuY3dkKTtcbiAgICAgICAgY29uc3QgaW1hZ2VJbnNwZWN0ID0gSlNPTi5wYXJzZShzdGRvdXQpO1xuXG4gICAgICAgIC8vIENvcGllZCBmcm9tIHRoZSBzdGFydFNlcnZpY2UgYmxvY2suIEltcG9ydGFudCB0aGluZyBpcyB0aGF0IHRoZSBhbGlhc2VzIG1hdGNoXG4gICAgICAgIGNvbnN0IHNlcnZpY2VBbGlhcyA9IHNlcnZpY2UuZ2V0QWxpYXModGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gc2VydmljZS5nZXROYW1lKHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZVdpdGhvdXRWZXJzaW9uID0gc2VydmljZU5hbWUucmVwbGFjZSgvKC4qKSg6LiopLywgXCIkMVwiKTtcbiAgICAgICAgY29uc3QgYWxpYXNlcyA9IFtzZXJ2aWNlTmFtZVdpdGhvdXRWZXJzaW9uLnJlcGxhY2UoXCIvXCIsIFwiLVwiKSwgc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbi5yZXBsYWNlKFwiL1wiLCBcIl9fXCIpXTtcbiAgICAgICAgaWYgKHNlcnZpY2VBbGlhcykge1xuICAgICAgICAgICAgYWxpYXNlcy5wdXNoKHNlcnZpY2VBbGlhcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKGltYWdlSW5zcGVjdFswXT8uQ29udGFpbmVyQ29uZmlnPy5FeHBvc2VkUG9ydHMgPz8gbnVsbCkgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge3llbGxvdyBDb3VsZCBub3QgZmluZCBleHBvc2VkIHRjcCBwb3J0cyAke3NlcnZpY2UuZ2V0TmFtZSh0aGlzLmV4cGFuZGVkVmFyaWFibGVzKX19XFxuYCk7XG4gICAgICAgICAgICBjb25zdCB7b3V0cHV0fSA9IGF3YWl0IFV0aWxzLnNwYXduKGBkb2NrZXIgbG9ncyAke2NvbnRhaW5lcklkfWApO1xuICAgICAgICAgICAgb3V0cHV0LnNwbGl0KC9cXHI/XFxuL2cpLnNsaWNlKDAsIC0xKS5mb3JFYWNoKGxpbmUgPT4gd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7Y3lhbiA+fSAke2xpbmV9XFxuYCkpO1xuICAgICAgICAgICAgcmV0dXJuIDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBvcnQgZGVmaW5lZCBpbiB0aGUgaW1hZ2UsIGFuZCB0cnkgdG8gY29ubmVjdCB0byB0aGUgYWxpYXNcbiAgICAgICAgZm9yKGNvbnN0IHBvcnQgb2YgT2JqZWN0LmtleXMoaW1hZ2VJbnNwZWN0WzBdLkNvbnRhaW5lckNvbmZpZy5FeHBvc2VkUG9ydHMpKSB7XG4gICAgICAgICAgICBpZihwb3J0LmVuZHNXaXRoKFwiL3RjcFwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvcnROdW0gPSBwYXJzZUludChwb3J0LnJlcGxhY2UoXCIvdGNwXCIsIFwiXCIpKTtcblxuICAgICAgICAgICAgICAgIGxldCBkb2NrZXJDbWQgPSBgZG9ja2VyIHJ1biAtZCAtLW5ldHdvcmsgZ2l0bGFiLWNpLWxvY2FsLSR7dGhpcy5qb2JJZH0gYDtcblxuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgIHdpbGx3aWxsL3dhaXQtZm9yLWl0IFwiJHthbGlhc2VzWzBdfToke3BvcnROdW19XCIgLXQgMzBgO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHtzdGF0dXM6IHJlc3VsdCwgc3Rkb3V0fSA9IGF3YWl0IFV0aWxzLnNwYXduKGRvY2tlckNtZCwgdGhpcy5jd2QpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lcnNUb0NsZWFuLnB1c2goc3Rkb3V0LnJlcGxhY2UoL1xccj9cXG4vZywgXCJcIikpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcbiAgICAgICAgICAgICAgICBpZihyZXN1bHQgPT0gMCl7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge2dyZWVuQnJpZ2h0IHNlcnZpY2UgaW1hZ2U6ICR7c2VydmljZU5hbWV9IGhlYWx0aGNoZWNrIHBhc3NlZDogJHthbGlhc2VzWzBdfToke3BvcnROdW19fSBpbiB7Z3JlZW4gJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHtyZWRCcmlnaHQgc2VydmljZSBpbWFnZTogJHtzZXJ2aWNlTmFtZX0gaGVhbHRoY2hlY2sgZmFpbGVkOiAke2FsaWFzZXNbMF19OiR7cG9ydE51bX19IGluIHtyZWQgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
810
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrREFBMEI7QUFDMUIsK0NBQWlDO0FBQ2pDLDREQUE4QztBQUM5Qyw2Q0FBK0I7QUFDL0Isa0VBQXlDO0FBQ3pDLDBEQUFrQztBQUNsQyxtREFBNkM7QUFDN0MsbUNBQThCO0FBSzlCLHVDQUFpQztBQUNqQywrQ0FBeUM7QUFDekMsbUNBQThCO0FBRTlCLE1BQWEsR0FBRztJQXdDWixZQUFZLEdBQWU7UUFqQm5CLHdCQUFtQixHQUFrQixJQUFJLENBQUM7UUFDMUMsMEJBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLHFCQUFnQixHQUFrQixJQUFJLENBQUM7UUFDdkMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixpQkFBWSxHQUFrQixJQUFJLENBQUM7UUFDbkMsc0JBQWlCLEdBQWtCLElBQUksQ0FBQztRQUN4QywwQkFBcUIsR0FBYSxFQUFFLENBQUM7UUFDckMsOEJBQXlCLEdBQW1CLENBQUMsQ0FBUSxDQUFDO1FBQ3RELGVBQVUsR0FBcUQsSUFBSSxDQUFDO1FBRXBFLHVCQUFrQixHQUFhLEVBQUUsQ0FBQztRQVF0QyxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ3pCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDNUIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUM1QixNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQztRQUNsRCxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDO1FBRXRDLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFDakMsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQztRQUNyQyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDO1FBQ25DLElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQztRQUV6QyxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksWUFBWSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxLQUFLLENBQUM7UUFDbkQsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQztRQUNqRCxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO1FBQ25DLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxPQUFPLENBQUMsV0FBVyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBRS9HLElBQUksY0FBYyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ25DLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNoQixjQUFjLEdBQUcsV0FBVyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDbEQ7YUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDNUIsY0FBYyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsNEJBQTRCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUM5RTtRQUVELE1BQU0sbUJBQW1CLEdBQUc7WUFDeEIsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztZQUNwRCxpQkFBaUIsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1lBQ3BELGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDbEQsY0FBYyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDOUMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTO1lBQzdDLGFBQWEsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUc7WUFDakMsY0FBYztZQUNkLGVBQWUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU87WUFDdkMsZ0JBQWdCLEVBQUUsR0FBRyxJQUFBLG1CQUFTLEVBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN4RCxlQUFlLEVBQUUsT0FBTyxDQUFDLGVBQWU7WUFDeEMsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLG9CQUFvQjtZQUNsRCxvQkFBb0IsRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1lBQy9DLHFCQUFxQixFQUFFLFVBQVU7WUFDakMsYUFBYSxFQUFFLE1BQU07WUFDckIsdUJBQXVCLEVBQUUsT0FBTztZQUNoQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVE7WUFDekMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRO1lBQzNDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFO1lBQ3ZJLGVBQWUsRUFBRSxjQUFjO1lBQy9CLGlCQUFpQixFQUFFLGdDQUFnQztZQUNuRCxxQkFBcUIsRUFBRSxrQkFBa0I7WUFDekMsa0JBQWtCLEVBQUUsTUFBTTtZQUMxQixTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQzFCLGNBQWMsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxFQUFFO1lBQzVDLGVBQWUsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDdEMsY0FBYyxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDeEMsY0FBYyxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDeEMsYUFBYSxFQUFFLFdBQVcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU07WUFDbkQsa0JBQWtCLEVBQUUsT0FBTztZQUMzQixhQUFhLEVBQUUsV0FBVyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksU0FBUztZQUN0RCxjQUFjLEVBQUUsV0FBVyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtZQUNsRyxVQUFVLEVBQUUsV0FBVyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sV0FBVyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ25ILGVBQWUsRUFBRSxXQUFXLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxjQUFjLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDakksV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRTtZQUMzQixZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQzdCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztZQUNoQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsaUJBQWlCO1lBQzVDLFNBQVMsRUFBRSxPQUFPO1NBQ3JCLENBQUM7UUFFRiw0QkFBNEI7UUFDNUIsTUFBTSxJQUFJLEdBQUcsRUFBQyxHQUFHLG1CQUFtQixFQUFFLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLEVBQUUsRUFBRSxHQUFHLGtCQUFrQixFQUFFLEdBQUcsWUFBWSxFQUFDLENBQUM7UUFDdEksTUFBTSx1QkFBdUIsR0FBRyxhQUFLLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JGLE1BQU0sb0JBQW9CLEdBQUcsYUFBSyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBQyxHQUFHLG1CQUFtQixFQUFFLEdBQUcsdUJBQXVCLEVBQUUsR0FBRyxvQkFBb0IsRUFBRSxHQUFHLGtCQUFrQixFQUFFLEdBQUcsWUFBWSxFQUFDLENBQUM7UUFFL0ksaURBQWlEO1FBQ2pELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNaLE1BQU0sVUFBVSxHQUFHLGFBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO1NBQy9DO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsRUFBRTtZQUN6RSxNQUFNLElBQUksc0JBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLG9FQUFvRSxDQUFDLENBQUM7U0FDakg7UUFFRCxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLEVBQUU7WUFDaEQsTUFBTSxJQUFJLHNCQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSwrQ0FBK0MsQ0FBQyxDQUFDO1NBQzVGO1FBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkMsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUN4QixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNsQixNQUFNLElBQUksR0FBRyxhQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztvQkFDekQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO3dCQUNwQixNQUFNLElBQUksc0JBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLDhEQUE4RCxDQUFDLENBQUM7cUJBQ25HO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2FBQ047U0FDSjtJQUNMLENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNqQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDWixPQUFPLElBQUEsZUFBSyxFQUFBLGVBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7SUFDcEUsQ0FBQztJQUVELElBQUksV0FBVztRQUNYLE9BQU8sYUFBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQUksS0FBSztRQUNMLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN4QixNQUFNLElBQUksR0FBd0MsRUFBRSxDQUFDO1FBQ3JELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNOLEdBQUcsRUFBRSxPQUFPLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUc7Z0JBQy9DLFNBQVMsRUFBRSxPQUFPLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVM7YUFDOUQsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ0wsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxNQUFNLFNBQVMsR0FBaUIsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFMUIsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvRCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7WUFDekIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxXQUFXLENBQUM7WUFDMUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ2pELE1BQU0sSUFBSSxzQkFBUyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7YUFDNUU7WUFDRCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQy9CLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSx3QkFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDZixPQUFPLE9BQU8sSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsS0FBSyxRQUFRLENBQUM7SUFDekQsQ0FBQztJQUVELElBQUksYUFBYTtRQUNiLE9BQU8sT0FBTyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxLQUFLLE1BQU0sQ0FBQztJQUN2RCxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1IsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELE1BQU0sU0FBUyxHQUFHLGFBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN2RSxPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLFNBQVMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVwQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRTtZQUM3QixPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsSUFBQSxnQkFBTSxFQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLG1DQUFtQyxDQUFDLENBQUM7UUFDN0UsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxTQUFTLENBQUMsU0FBMkQ7UUFDckUsSUFBQSxnQkFBTSxFQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFLHNDQUFzQyxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQUksV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxLQUFLLENBQUM7SUFDaEQsQ0FBQztJQUVELElBQUksY0FBYztRQUNkLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUNuRCxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDWixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQUksa0JBQWtCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFJLG9CQUFvQjtRQUNwQixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLG1CQUFtQixLQUFLLElBQUksQ0FBQztJQUM5RCxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1IsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLG1CQUFtQixLQUFLLElBQUksQ0FBQztJQUMvRCxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2YsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDakMsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBbUI7UUFDM0IsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25DLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDdkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUVyQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUVyQixNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyw0QkFBNEIsV0FBVyxNQUFNLENBQUMsQ0FBQztRQUM5RSxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyw0QkFBNEIsV0FBVyxNQUFNLENBQUMsQ0FBQztRQUU1RSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNuQixZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLEdBQUcsSUFBSSxDQUFDLFlBQVksNkJBQTZCLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxhQUFhLElBQUksQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDO1NBQ3JJO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzFFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3RGLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdGLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsT0FBTztTQUNWO1FBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JGLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVGLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsT0FBTztTQUNWO1FBRUQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkQsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDL0Y7UUFFRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3BELFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2hHO1FBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDOUIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQ3RGO1FBRUQsSUFBSSxJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxFQUFFO1lBQ2hDLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNsSDtRQUVELFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTlELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sYUFBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDeEc7UUFFRCxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCO1FBQ2xCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDdkMsWUFBWSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBRTdDLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQ3RDLElBQUk7Z0JBQ0EsTUFBTSxhQUFLLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQzNDO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1IsSUFBQSxnQkFBTSxFQUFDLENBQUMsWUFBWSxLQUFLLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztnQkFDeEQsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSxXQUFXLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO2FBQ3JEO1NBQ0o7UUFFRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUN4QixJQUFJO2dCQUNBLE1BQU0sYUFBSyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQzthQUNwRTtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNSLElBQUEsZ0JBQU0sRUFBQyxDQUFDLFlBQVksS0FBSyxFQUFFLDJCQUEyQixDQUFDLENBQUM7Z0JBQ3hELFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFLLEVBQUEsV0FBVyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQzthQUNyRDtTQUNKO1FBRUQsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2QyxJQUFJO2dCQUNBLEtBQUssTUFBTSxlQUFlLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO29CQUN0RCxNQUFNLGFBQUssQ0FBQyxLQUFLLENBQUMsb0JBQW9CLGVBQWUsRUFBRSxDQUFDLENBQUM7aUJBQzVEO2FBQ0o7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDUixJQUFBLGdCQUFNLEVBQUMsQ0FBQyxZQUFZLEtBQUssRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO2dCQUN4RCxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLFdBQVcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7YUFDckQ7U0FDSjtJQUNMLENBQUM7SUFFTyw2QkFBNkI7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdEIsT0FBTyxFQUFFLENBQUM7U0FDYjtRQUNELElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUU7WUFDakYsT0FBTywySEFBMkgsQ0FBQztTQUN0STtRQUNELE9BQU8sdUJBQXVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0gsQ0FBQztJQUVPLHNCQUFzQixDQUFDLE9BQWlCO1FBQzVDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNiLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN2QixpQ0FBaUM7WUFDakMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwQyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNoRixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDL0YsR0FBRyxJQUFJLElBQUEsZUFBSyxFQUFBLGtCQUFrQixJQUFJLEdBQUcsYUFBYSxNQUFNLENBQUM7WUFFekQsd0JBQXdCO1lBQ3hCLEdBQUcsSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRU8sS0FBSyxDQUFDLGFBQWEsQ0FBQyxXQUFtQixFQUFFLFlBQTBCO1FBQ3ZFLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFbEQsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2IsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ3hCLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDckYsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDbEIsTUFBTSxJQUFJLEdBQUcsYUFBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQ3pELFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFLLEVBQUEsR0FBRyxJQUFJLENBQUMsWUFBWSw0Q0FBNEMsSUFBSSxJQUFJLENBQUMsQ0FBQztnQkFDbkcsTUFBTSxVQUFVLEdBQUcsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsb0JBQW9CLElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQzNGLEdBQUcsSUFBSSxNQUFNLFVBQVUsWUFBWSxXQUFXLElBQUksSUFBSSxHQUFHLENBQUM7WUFDOUQsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVPLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBaUIsRUFBRSxVQUFtQjtRQUM1RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3JDLE1BQU0sZUFBZSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsNEJBQTRCLFdBQVcsTUFBTSxDQUFDO1FBQ2pGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDN0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN6QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3ZDLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxJQUFJLENBQUMsa0NBQWtDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDM0YsSUFBSSxJQUFJLENBQUM7UUFDVCxJQUFJLE9BQU8sQ0FBQztRQUVaLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRTtZQUM1QyxPQUFPLENBQUMsQ0FBQztTQUNaO1FBRUQscUVBQXFFO1FBQ3JFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDeEMsTUFBTSxhQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFdBQVcsRUFBRSxDQUFDLENBQUM7U0FDN0Q7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xELE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFO2dCQUMzQyxLQUFLLEVBQUUsTUFBTTtnQkFDYixLQUFLLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQztnQkFDeEMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO2dCQUNiLEdBQUcsRUFBRSxFQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBQzthQUNuRCxDQUFDLENBQUM7WUFDSCxPQUFPLElBQUksT0FBTyxDQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUMzQyxhQUFhLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2RCxhQUFhLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDcEQsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUVELElBQUksQ0FBQywrQkFBK0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVuRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDaEIsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFbkQsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ25CLElBQUksVUFBVSxFQUFFO2dCQUNaLFNBQVMsSUFBSSx3Q0FBd0MsSUFBSSxDQUFDLDZCQUE2QixFQUFFLEdBQUcsQ0FBQzthQUNoRztpQkFBTTtnQkFDSCxTQUFTLElBQUksMkJBQTJCLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxHQUFHLENBQUM7YUFDbkY7WUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFO2dCQUN2QixNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQ2hFLFNBQVMsSUFBSSw2QkFBNkIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDO2dCQUN4RCxLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQ2pDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO29CQUM1RSxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztvQkFDL0UsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztpQkFDckU7YUFDSjtZQUVELE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztZQUMxQixjQUFjLENBQUMsSUFBSSxDQUFDLGFBQUssQ0FBQyxLQUFLLENBQUMsd0JBQXdCLGVBQWUsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3RGLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBSyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsYUFBYSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDcEYsU0FBUyxJQUFJLFlBQVksZUFBZSxZQUFZLFdBQVcsR0FBRyxDQUFDO1lBQ25FLFNBQVMsSUFBSSxZQUFZLGFBQWEsU0FBUyxDQUFDO1lBQ2hELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMvQyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7WUFFbEMsU0FBUyxJQUFJLHFCQUFxQixXQUFXLEdBQUcsQ0FBQztZQUVqRCxLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQy9CLFNBQVMsSUFBSSxZQUFZLE1BQU0sR0FBRyxDQUFDO2FBQ3RDO1lBRUQsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNyQyxTQUFTLElBQUksY0FBYyxTQUFTLEdBQUcsQ0FBQzthQUMzQztZQUVELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDL0IsU0FBUyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQztnQkFDeEMsQ0FBQyxDQUFDLENBQUM7YUFDTjtZQUVELEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO2dCQUMvRCxTQUFTLElBQUksTUFBTSxHQUFHLEtBQUssTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7YUFDdkQ7WUFDRCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFO2dCQUMvRCxTQUFTLElBQUksTUFBTSxHQUFHLEtBQUssTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7YUFDdkQ7WUFFRCxTQUFTLElBQUksTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUVqRSxTQUFTLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxZQUFZLENBQUM7WUFDM0MsU0FBUyxJQUFJLHVDQUF1QyxDQUFDO1lBQ3JELFNBQVMsSUFBSSwrQkFBK0IsQ0FBQztZQUM3QyxTQUFTLElBQUksbUNBQW1DLENBQUM7WUFDakQsU0FBUyxJQUFJLHlCQUF5QixDQUFDO1lBQ3ZDLFNBQVMsSUFBSSwrQkFBK0IsQ0FBQztZQUM3QyxTQUFTLElBQUkscUJBQXFCLENBQUM7WUFDbkMsU0FBUyxJQUFJLHVDQUF1QyxDQUFDO1lBQ3JELFNBQVMsSUFBSSw2QkFBNkIsQ0FBQztZQUMzQyxTQUFTLElBQUksaUNBQWlDLENBQUM7WUFDL0MsU0FBUyxJQUFJLHVCQUF1QixDQUFDO1lBQ3JDLFNBQVMsSUFBSSw2QkFBNkIsQ0FBQztZQUMzQyxTQUFTLElBQUksbUJBQW1CLENBQUM7WUFDakMsU0FBUyxJQUFJLGlDQUFpQyxDQUFDO1lBQy9DLFNBQVMsSUFBSSx1QkFBdUIsQ0FBQztZQUNyQyxTQUFTLElBQUksUUFBUSxDQUFDO1lBQ3RCLFNBQVMsSUFBSSwwQkFBMEIsQ0FBQztZQUN4QyxTQUFTLElBQUksWUFBWSxDQUFDO1lBQzFCLFNBQVMsSUFBSSxRQUFRLENBQUM7WUFFdEIsTUFBTSxFQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUMsR0FBRyxNQUFNLGFBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRWhELElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDeEIsb0NBQW9DO1lBQ3BDLE1BQU0sYUFBSyxDQUFDLEtBQUssQ0FBQywrQ0FBK0MsSUFBSSxDQUFDLFlBQVksWUFBWSxXQUFXLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkgsSUFBSSxDQUFDLCtCQUErQixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRW5ELHNDQUFzQztZQUN0QyxNQUFNLG1CQUFtQixHQUFHLHVDQUF1QyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixHQUFHLENBQUM7WUFDeEcsSUFBSSxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsRUFBRTtnQkFDMUMsTUFBTSxhQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsbUJBQW1CLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxtQkFBbUIsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0csSUFBSSxDQUFDLCtCQUErQixDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ3REO1lBRUQsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0IsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSxHQUFHLElBQUksQ0FBQyxZQUFZLG9EQUFvRCxJQUFBLHVCQUFZLEVBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2hJO1FBRUQsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV6QyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDaEIsNERBQTREO1lBQzVELE1BQU0sYUFBSyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsYUFBYSxhQUFhLGVBQWUsZ0hBQWdILENBQUMsQ0FBQztTQUN0TTtRQUVELElBQUksR0FBRyxHQUFHLG9CQUFvQixDQUFDO1FBQy9CLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQztRQUU3QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3hDLEdBQUcsSUFBSSw4QkFBOEIsV0FBVyxLQUFLLENBQUM7U0FDekQ7UUFDRCxHQUFHLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTVDLEdBQUcsSUFBSSxVQUFVLENBQUM7UUFFbEIsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsNkJBQTZCLFdBQVcsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN6RixNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyw2QkFBNkIsV0FBVyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFOUUsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLE1BQU0sYUFBSyxDQUFDLEtBQUssQ0FBQyx3Q0FBd0MsSUFBSSxDQUFDLFlBQVksZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzFHO1FBRUQsTUFBTSxFQUFFLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7WUFDeEcsS0FBSyxFQUFFLE1BQU07WUFDYixLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztZQUMvQixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDYixHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLHNCQUFzQixFQUFFLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBQztTQUNsSCxDQUFDLENBQUM7UUFFSCxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQU0sRUFBRSxNQUE2QixFQUFFLFFBQWlDLEVBQUUsRUFBRTtZQUN6RixJQUFJLENBQUMsK0JBQStCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDbkQsS0FBSyxNQUFNLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDdEMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtvQkFDbkIsU0FBUztpQkFDWjtnQkFFRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUU7b0JBQ2pDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQy9CO2dCQUNELE1BQU0sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7Z0JBQ3BCLEVBQUUsQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQzthQUNuRDtRQUNMLENBQUMsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxPQUFPLENBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDM0QsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFBLGVBQUssRUFBQSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2xILEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBQSxlQUFLLEVBQUEsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFFaEgsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbEUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUUzRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2hCLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGdCQUFnQixXQUFXLEVBQUUsQ0FBQyxDQUFDO2FBQy9DO2lCQUFNO2dCQUNILEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLDhCQUE4QixXQUFXLEVBQUUsQ0FBQyxDQUFDO2FBQzdEO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUU7WUFDZixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdEMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDN0M7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBRU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxZQUEwQixFQUFFLFdBQW1CO1FBQ25FLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM5QixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDakIsT0FBTyxJQUFJLG1FQUFtRSxXQUFXLE1BQU0sQ0FBQztRQUNoRyxPQUFPLElBQUksNkJBQTZCLENBQUM7UUFDekMsT0FBTyxJQUFJLG1CQUFtQixXQUFXLEtBQUssQ0FBQztRQUMvQyxPQUFPLElBQUksaUJBQWlCLFdBQVcsSUFBSSxDQUFDO1FBQzVDLE9BQU8sSUFBSSxNQUFNLENBQUM7UUFDbEIsTUFBTSxhQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLCtCQUErQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25ELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSxHQUFHLElBQUksQ0FBQyxZQUFZLDJCQUEyQixXQUFXLGdCQUFnQixJQUFBLHVCQUFZLEVBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25JLENBQUM7SUFFTyxLQUFLLENBQUMsa0NBQWtDLENBQUMsWUFBMEI7UUFDdkUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNqQyxJQUFJLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUM3QixLQUFLLE1BQU0sUUFBUSxJQUFJLFNBQVMsSUFBSSxFQUFFLEVBQUU7WUFDcEMsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLElBQUk7Z0JBQUUsU0FBUztZQUV2QyxNQUFNLGdCQUFnQixHQUFHLGFBQUssQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdELElBQUksVUFBVSxDQUFDO1lBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUN6QyxVQUFVLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNqRDtpQkFBTTtnQkFDSCxVQUFVLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRywrQkFBK0IsZ0JBQWdCLDhCQUE4QixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDMUg7WUFDRCxJQUFJLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDakMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUN0RSxtQkFBbUIsR0FBRyxFQUFDLEdBQUcsbUJBQW1CLEVBQUUsR0FBRyxpQkFBaUIsRUFBQyxDQUFDO2FBQ3hFO2lCQUFNO2dCQUNILFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFLLEVBQUEsR0FBRyxJQUFJLENBQUMsWUFBWSxhQUFhLFFBQVEsQ0FBQyxNQUFNLGtCQUFrQixRQUFRLENBQUMsSUFBSSx5QkFBeUIsQ0FBQyxDQUFDO2FBQ3RJO1NBRUo7UUFDRCxPQUFPLG1CQUFtQixDQUFDO0lBQy9CLENBQUM7SUFFTyxLQUFLLENBQUMsV0FBVyxDQUFDLFlBQTBCO1FBQ2hELElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFDOUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTztRQUVqRixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDeEIsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUFFLE9BQU87WUFFdEQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzlCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDL0UsTUFBTSxXQUFXLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRywyQkFBMkIsU0FBUyxFQUFFLENBQUM7WUFDdEUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDbkMsU0FBUzthQUNaO1lBRUQsTUFBTSxhQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxLQUFLLElBQUcsRUFBRTtnQkFDdkMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ25DLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLEdBQUcsSUFBSSxDQUFDLFlBQVksbUNBQW1DLFNBQVMsa0JBQWtCLElBQUEsdUJBQVksRUFBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDMUk7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLGVBQWUsQ0FBQyxZQUEwQjtRQUNwRCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU87UUFFN0YsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzlCLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNwQixLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxFQUFFO1lBQ3pDLE1BQU0sZ0JBQWdCLEdBQUcsYUFBSyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0QsTUFBTSxjQUFjLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRywrQkFBK0IsZ0JBQWdCLEVBQUUsQ0FBQztZQUNwRixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUN0QyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDbkM7WUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDakQsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDdEIsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSxHQUFHLElBQUksQ0FBQyxZQUFZLHVDQUF1QyxnQkFBZ0IsZ0JBQWdCLENBQUMsQ0FBQzthQUN6SDtZQUVELFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSxHQUFHLElBQUksQ0FBQyxZQUFZLG1EQUFtRCxJQUFBLHVCQUFZLEVBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hJLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBYztRQUNqQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDeEMsT0FBTyxhQUFLLENBQUMsS0FBSyxDQUFDLFlBQVksTUFBTSxNQUFNLElBQUksQ0FBQyxHQUFHLDRCQUE0QixXQUFXLEVBQUUsQ0FBQyxDQUFDO1NBQ2pHO1FBQ0QsT0FBTyxhQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsTUFBTSxNQUFNLElBQUksQ0FBQyxZQUFZLFlBQVksV0FBVyxFQUFFLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRU8sS0FBSyxDQUFDLFlBQVksQ0FBQyxZQUEwQjtRQUNqRCxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPO1FBQzlDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU87UUFFakYsSUFBSSxJQUFJLEVBQUUsT0FBTyxDQUFDO1FBQ2xCLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUN4QixJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7Z0JBQUUsT0FBTztZQUN0RCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQy9FLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRTtnQkFDeEIsSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDeEIsTUFBTSxZQUFZLEdBQUcsYUFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQ3BFLElBQUksR0FBRyxHQUFHLHNDQUFzQyxDQUFDO2dCQUNqRCxHQUFHLElBQUksd0JBQXdCLFNBQVMsSUFBSSxDQUFDO2dCQUM3QyxHQUFHLElBQUksYUFBYSxZQUFZLGdCQUFnQixTQUFTLGNBQWMsQ0FBQztnQkFFeEUsTUFBTSxhQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxLQUFLLElBQUcsRUFBRTtvQkFDdkMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3pDLENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUUvQixNQUFNLE9BQU8sR0FBRyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRywyQkFBMkIsU0FBUyxFQUFFLENBQUMsQ0FBQztnQkFDcEYsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtvQkFDdEIsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSxHQUFHLElBQUksQ0FBQyxZQUFZLHVDQUF1QyxJQUFJLFFBQVEsQ0FBQyxDQUFDO2lCQUNyRztxQkFBTTtvQkFDSCxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLEdBQUcsSUFBSSxDQUFDLFlBQVksa0NBQWtDLFlBQVksS0FBSyxTQUFTLGtCQUFrQixJQUFBLHVCQUFZLEVBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUMxSjthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLGdCQUFnQixDQUFDLFlBQTBCO1FBQ3JELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFFckMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPO1FBRXZFLElBQUksSUFBSSxFQUFFLE9BQU8sQ0FBQztRQUNsQixJQUFJLEtBQUssR0FBRyxzQ0FBc0MsQ0FBQztRQUNuRCxLQUFLLElBQUksNEJBQTRCLFdBQVcsSUFBSSxDQUFDO1FBQ3JELEtBQUssTUFBTSxZQUFZLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFO1lBQ3BELE1BQU0sWUFBWSxHQUFHLGFBQUssQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQzVFLEtBQUssSUFBSSxhQUFhLFlBQVksb0JBQW9CLFdBQVcsY0FBYyxDQUFDO1NBQ25GO1FBRUQsS0FBSyxNQUFNLG1CQUFtQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxJQUFJLEVBQUUsRUFBRTtZQUM3RCxNQUFNLFlBQVksR0FBRyxhQUFLLENBQUMsVUFBVSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ25GLEtBQUssSUFBSSwyQkFBMkIsV0FBVyxJQUFJLFlBQVksZ0NBQWdDLENBQUM7U0FDbkc7UUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDO1FBQzVELElBQUksWUFBWSxJQUFJLElBQUksRUFBRTtZQUN0QixLQUFLLElBQUksNEJBQTRCLFdBQVcsOEJBQThCLENBQUM7WUFDL0UsS0FBSyxJQUFJLGFBQWEsWUFBWSxvQkFBb0IsV0FBVyxnQ0FBZ0MsQ0FBQztTQUNyRztRQUVELElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDeEIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDMUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDeEQsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFL0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsK0JBQStCLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDMUYsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN0QixZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLEdBQUcsSUFBSSxDQUFDLFlBQVksMkNBQTJDLENBQUMsQ0FBQztTQUM3RjthQUFNO1lBQ0gsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSxHQUFHLElBQUksQ0FBQyxZQUFZLG1EQUFtRCxJQUFBLHVCQUFZLEVBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQy9IO1FBRUQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDeEIsSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4QixNQUFNLGFBQUssQ0FBQyxLQUFLLENBQUMsMkNBQTJDLElBQUksQ0FBQyxHQUFHLCtCQUErQixXQUFXLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDakksSUFBSSxZQUFZLElBQUksSUFBSSxFQUFFO2dCQUN0QixNQUFNLGFBQUssQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLENBQUMsR0FBRywrQkFBK0IsV0FBVyxnQ0FBZ0MsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7YUFDL0g7WUFDRCxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLEdBQUcsSUFBSSxDQUFDLFlBQVksd0RBQXdELElBQUEsdUJBQVksRUFBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDcEk7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFXLEVBQUUsSUFBMkIsRUFBRSxlQUF5QjtRQUNyRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3JDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFFN0MsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcscUJBQXFCLElBQUksRUFBRSxDQUFDLENBQUM7UUFFeEQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLE1BQU0sRUFBQyxNQUFNLEVBQUUsR0FBRyxFQUFDLEdBQUcsTUFBTSxhQUFLLENBQUMsS0FBSyxDQUFDLG9CQUFvQixlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLGVBQWUsWUFBWSxXQUFXLGdCQUFnQixXQUFXLDJDQUEyQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMU4sTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMxQyxNQUFNLGFBQUssQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLFdBQVcsV0FBVyxDQUFDLENBQUM7WUFDMUQsTUFBTSxhQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsV0FBVyxLQUFLLElBQUksdUJBQXVCLElBQUksSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNqRzthQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUM1QixNQUFNLGFBQUssQ0FBQyxLQUFLLENBQUMseUJBQXlCLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsNEJBQTRCLFdBQVcsRUFBRSxDQUFDLENBQUM7U0FDNUc7SUFDTCxDQUFDO0lBRU8sK0JBQStCLENBQUMsWUFBMEI7UUFDOUQsWUFBWSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQzdDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFLLEVBQUEsR0FBRyxJQUFJLENBQUMsWUFBWSw4QkFBOEIsQ0FBQyxDQUFDO1lBQzdFLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2RCxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDZCxDQUFDO0lBRU8sZUFBZSxDQUFDLFNBQTJCLEVBQUUsSUFBWSxFQUFFLE9BQU8sR0FBRyxLQUFLLEVBQUUsYUFBYSxHQUFHLEVBQUU7UUFDbEcsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RELElBQUksT0FBTyxFQUFFO1lBQ1QsT0FBTyxJQUFBLGVBQUssRUFBQSxHQUFHLFdBQVcsZ0NBQWdDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxhQUFhLEVBQUUsQ0FBQztTQUNqRztRQUVELE9BQU8sSUFBQSxlQUFLLEVBQUEsR0FBRyxXQUFXLHVCQUF1QixJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sYUFBYSxFQUFFLENBQUM7SUFDMUYsQ0FBQztJQUVPLGlCQUFpQixDQUFDLFNBQTJCO1FBQ2pELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUMsTUFBTSxPQUFPLEdBQUcsSUFBQSx1QkFBWSxFQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sSUFBQSxlQUFLLEVBQUEsR0FBRyxJQUFJLENBQUMsWUFBWSx5Q0FBeUMsT0FBTyxHQUFHLENBQUM7SUFDeEYsQ0FBQztJQUVPLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxXQUFtQjtRQUNqRCxNQUFNLEVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBQyxHQUFHLE1BQU0sYUFBSyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN0RixJQUFJLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZLENBQUMsWUFBMEIsRUFBRSxPQUFnQixFQUFFLFVBQW1CO1FBQ3hGLElBQUksU0FBUyxHQUFHLDJDQUEyQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUM7UUFFekUsSUFBSSxVQUFVLEVBQUU7WUFDWixTQUFTLElBQUksZUFBZSxDQUFDO1NBQ2hDO1FBRUQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM5RCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzVELE1BQU0seUJBQXlCLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekUsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6RCxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMxRCxJQUFJLFlBQVksRUFBRTtZQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDN0I7UUFFRCxLQUFJLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRTtZQUN4QixTQUFTLElBQUksbUJBQW1CLEtBQUssR0FBRyxDQUFDO1NBQzVDO1FBRUQsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7WUFDL0QsU0FBUyxJQUFJLE1BQU0sR0FBRyxLQUFLLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO1NBQ3ZEO1FBRUQsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDMUMsU0FBUyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztRQUVILFNBQVMsSUFBSSxHQUFHLFdBQVcsR0FBRyxDQUFDO1FBRS9CLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVwRSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDOUIsTUFBTSxFQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUMsR0FBRyxNQUFNLGFBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLCtCQUErQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25ELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSxHQUFHLElBQUksQ0FBQyxZQUFZLDBDQUEwQyxXQUFXLGtCQUFrQixLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUEsdUJBQVksRUFBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0wsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU8sS0FBSyxDQUFDLGtCQUFrQixDQUFDLFlBQTBCLEVBQUUsT0FBZ0IsRUFBRSxXQUFtQjtRQUM5RixNQUFNLGdCQUFnQixHQUFHLHdCQUF3QixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7UUFDM0YsTUFBTSxFQUFDLE1BQU0sRUFBQyxHQUFHLE1BQU0sYUFBSyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV4QyxnRkFBZ0Y7UUFDaEYsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM5RCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzVELE1BQU0seUJBQXlCLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekUsTUFBTSxPQUFPLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM1RyxJQUFJLFlBQVksRUFBRTtZQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDOUI7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxZQUFZLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ25FLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFLLEVBQUEsR0FBRyxJQUFJLENBQUMsWUFBWSw2Q0FBNkMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEksTUFBTSxFQUFDLE1BQU0sRUFBQyxHQUFHLE1BQU0sYUFBSyxDQUFDLEtBQUssQ0FBQyxlQUFlLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDakUsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSxHQUFHLElBQUksQ0FBQyxZQUFZLGFBQWEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3pILE9BQVE7U0FDWDtRQUVELCtFQUErRTtRQUMvRSxLQUFJLE1BQU0sSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN6RSxJQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3RCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUVuRCxJQUFJLFNBQVMsR0FBRywyQ0FBMkMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDO2dCQUV6RSxTQUFTLElBQUksMEJBQTBCLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLFNBQVMsQ0FBQztnQkFDdEUsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUM5QixNQUFNLEVBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUMsR0FBRyxNQUFNLGFBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDeEUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMzRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNyQyxJQUFHLE1BQU0sSUFBSSxDQUFDLEVBQUM7b0JBQ1gsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSxHQUFHLElBQUksQ0FBQyxZQUFZLGdDQUFnQyxXQUFXLHdCQUF3QixPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxlQUFlLElBQUEsdUJBQVksRUFBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ25MO3FCQUFJO29CQUNELFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFLLEVBQUEsR0FBRyxJQUFJLENBQUMsWUFBWSw4QkFBOEIsV0FBVyx3QkFBd0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sYUFBYSxJQUFBLHVCQUFZLEVBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUMvSzthQUNKO1NBQ0o7SUFDTCxDQUFDOztBQWg1Qkwsa0JBaTVCQztBQS80Qm1CLG1CQUFlLEdBQUc7SUFDOUIsU0FBUyxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxVQUFVO0lBQ3JELFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTO0lBQ3RELGNBQWMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFVBQVU7Q0FDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCAqIGFzIGRvdGVudiBmcm9tIFwiZG90ZW52XCI7XG5pbXBvcnQgKiBhcyBjaGlsZFByb2Nlc3MgZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0IHByZXR0eUhydGltZSBmcm9tIFwicHJldHR5LWhydGltZVwiO1xuaW1wb3J0IGNhbWVsQ2FzZSBmcm9tIFwiY2FtZWxjYXNlXCI7XG5pbXBvcnQge0V4aXRFcnJvcn0gZnJvbSBcIi4vdHlwZXMvZXhpdC1lcnJvclwiO1xuaW1wb3J0IHtVdGlsc30gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7Sm9iT3B0aW9uc30gZnJvbSBcIi4vdHlwZXMvam9iLW9wdGlvbnNcIjtcbmltcG9ydCB7V3JpdGVTdHJlYW1zfSBmcm9tIFwiLi90eXBlcy93cml0ZS1zdHJlYW1zXCI7XG5pbXBvcnQge1NlcnZpY2V9IGZyb20gXCIuL3NlcnZpY2VcIjtcbmltcG9ydCB7R2l0RGF0YX0gZnJvbSBcIi4vZ2l0LWRhdGFcIjtcbmltcG9ydCB7YXNzZXJ0fSBmcm9tIFwiLi9hc3NlcnRzXCI7XG5pbXBvcnQge0NhY2hlRW50cnl9IGZyb20gXCIuL2NhY2hlLWVudHJ5XCI7XG5pbXBvcnQge011dGV4fSBmcm9tIFwiLi9tdXRleFwiO1xuXG5leHBvcnQgY2xhc3MgSm9iIHtcblxuICAgIHN0YXRpYyByZWFkb25seSBpbGxlZ2FsSm9iTmFtZXMgPSBbXG4gICAgICAgIFwiaW5jbHVkZVwiLCBcImxvY2FsX2NvbmZpZ3VyYXRpb25cIiwgXCJpbWFnZVwiLCBcInNlcnZpY2VzXCIsXG4gICAgICAgIFwic3RhZ2VzXCIsIFwicGFnZXNcIiwgXCJ0eXBlc1wiLCBcImJlZm9yZV9zY3JpcHRcIiwgXCJkZWZhdWx0XCIsXG4gICAgICAgIFwiYWZ0ZXJfc2NyaXB0XCIsIFwidmFyaWFibGVzXCIsIFwiY2FjaGVcIiwgXCJ3b3JrZmxvd1wiLFxuICAgIF07XG5cbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgam9iTmFtZVBhZDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGRlcGVuZGVuY2llczogc3RyaW5nW10gfCBudWxsO1xuICAgIHJlYWRvbmx5IGVudmlyb25tZW50PzogeyBuYW1lOiBzdHJpbmc7IHVybDogc3RyaW5nIHwgbnVsbCB9O1xuICAgIHJlYWRvbmx5IGpvYklkOiBudW1iZXI7XG4gICAgcmVhZG9ubHkgY3dkOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcnVsZXM/OiB7IGlmOiBzdHJpbmc7IHdoZW46IHN0cmluZzsgYWxsb3dfZmFpbHVyZTogYm9vbGVhbiB9W107XG4gICAgcmVhZG9ubHkgZXhwYW5kZWRWYXJpYWJsZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgcmVhZG9ubHkgYWxsb3dGYWlsdXJlOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IHdoZW46IHN0cmluZztcbiAgICByZWFkb25seSBwaXBlbGluZUlpZDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGdpdERhdGE6IEdpdERhdGE7XG4gICAgcmVhZG9ubHkgc2hlbGxJc29sYXRpb246IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgbW91bnRDYWNoZTogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgX3ByZXNjcmlwdHNFeGl0Q29kZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfYWZ0ZXJTY3JpcHRzRXhpdENvZGUgPSAwO1xuICAgIHByaXZhdGUgX2NvdmVyYWdlUGVyY2VudDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfcnVubmluZyA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2NvbnRhaW5lcklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9zZXJ2aWNlTmV0d29ya0lkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9jb250YWluZXJWb2x1bWVOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIF9sb25nUnVubmluZ1NpbGVudFRpbWVvdXQ6IE5vZGVKUy5UaW1lb3V0ID0gLTEgYXMgYW55O1xuICAgIHByaXZhdGUgX3Byb2R1Y2VyczogeyBuYW1lOiBzdHJpbmc7IGRvdGVudjogc3RyaW5nIHwgbnVsbCB9W10gfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgX2NvbnRhaW5lcnNUb0NsZWFuOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBqb2JEYXRhOiBhbnk7XG4gICAgcHJpdmF0ZSByZWFkb25seSB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGV4dHJhSG9zdHM6IHN0cmluZ1tdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdm9sdW1lczogc3RyaW5nW107XG5cbiAgICBjb25zdHJ1Y3RvcihvcHQ6IEpvYk9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgam9iRGF0YSA9IG9wdC5kYXRhO1xuICAgICAgICBjb25zdCBnaXREYXRhID0gb3B0LmdpdERhdGE7XG4gICAgICAgIGNvbnN0IGdsb2JhbHMgPSBvcHQuZ2xvYmFscztcbiAgICAgICAgY29uc3QgdmFyaWFibGVzRnJvbUZpbGVzID0gb3B0LnZhcmlhYmxlc0Zyb21GaWxlcztcbiAgICAgICAgY29uc3QgY2xpVmFyaWFibGVzID0gb3B0LmNsaVZhcmlhYmxlcztcblxuICAgICAgICB0aGlzLm1vdW50Q2FjaGUgPSBvcHQubW91bnRDYWNoZTtcbiAgICAgICAgdGhpcy5leHRyYUhvc3RzID0gb3B0LmV4dHJhSG9zdHM7XG4gICAgICAgIHRoaXMudm9sdW1lcyA9IG9wdC52b2x1bWVzO1xuICAgICAgICB0aGlzLndyaXRlU3RyZWFtcyA9IG9wdC53cml0ZVN0cmVhbXM7XG4gICAgICAgIHRoaXMuam9iTmFtZVBhZCA9IG9wdC5uYW1lUGFkO1xuICAgICAgICB0aGlzLmdpdERhdGEgPSBvcHQuZ2l0RGF0YTtcbiAgICAgICAgdGhpcy5uYW1lID0gb3B0Lm5hbWU7XG4gICAgICAgIHRoaXMuY3dkID0gb3B0LmN3ZDtcbiAgICAgICAgdGhpcy5qb2JJZCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDApO1xuICAgICAgICB0aGlzLmpvYkRhdGEgPSBvcHQuZGF0YTtcbiAgICAgICAgdGhpcy5waXBlbGluZUlpZCA9IG9wdC5waXBlbGluZUlpZDtcbiAgICAgICAgdGhpcy5zaGVsbElzb2xhdGlvbiA9IG9wdC5zaGVsbElzb2xhdGlvbjtcblxuICAgICAgICB0aGlzLndoZW4gPSBqb2JEYXRhLndoZW4gfHwgXCJvbl9zdWNjZXNzXCI7XG4gICAgICAgIHRoaXMuYWxsb3dGYWlsdXJlID0gam9iRGF0YS5hbGxvd19mYWlsdXJlID8/IGZhbHNlO1xuICAgICAgICB0aGlzLmRlcGVuZGVuY2llcyA9IGpvYkRhdGEuZGVwZW5kZW5jaWVzIHx8IG51bGw7XG4gICAgICAgIHRoaXMucnVsZXMgPSBqb2JEYXRhLnJ1bGVzIHx8IG51bGw7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSB0eXBlb2Ygam9iRGF0YS5lbnZpcm9ubWVudCA9PT0gXCJzdHJpbmdcIiA/IHtuYW1lOiBqb2JEYXRhLmVudmlyb25tZW50fSA6IGpvYkRhdGEuZW52aXJvbm1lbnQ7XG5cbiAgICAgICAgbGV0IENJX1BST0pFQ1RfRElSID0gYCR7dGhpcy5jd2R9YDtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VOYW1lKSB7XG4gICAgICAgICAgICBDSV9QUk9KRUNUX0RJUiA9IGAvYnVpbGRzLyR7dGhpcy5zYWZlSm9iTmFtZX1gO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2hlbGxJc29sYXRpb24pIHtcbiAgICAgICAgICAgIENJX1BST0pFQ1RfRElSID0gYCR7dGhpcy5jd2R9Ly5naXRsYWItY2ktbG9jYWwvYnVpbGRzLyR7dGhpcy5zYWZlSm9iTmFtZX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJlZGVmaW5lZFZhcmlhYmxlcyA9IHtcbiAgICAgICAgICAgIEdJVExBQl9VU0VSX0xPR0lOOiBnaXREYXRhLnVzZXJbXCJHSVRMQUJfVVNFUl9MT0dJTlwiXSxcbiAgICAgICAgICAgIEdJVExBQl9VU0VSX0VNQUlMOiBnaXREYXRhLnVzZXJbXCJHSVRMQUJfVVNFUl9FTUFJTFwiXSxcbiAgICAgICAgICAgIEdJVExBQl9VU0VSX05BTUU6IGdpdERhdGEudXNlcltcIkdJVExBQl9VU0VSX05BTUVcIl0sXG4gICAgICAgICAgICBHSVRMQUJfVVNFUl9JRDogZ2l0RGF0YS51c2VyW1wiR0lUTEFCX1VTRVJfSURcIl0sXG4gICAgICAgICAgICBDSV9DT01NSVRfU0hPUlRfU0hBOiBnaXREYXRhLmNvbW1pdC5TSE9SVF9TSEEsIC8vIENoYW5nZXNcbiAgICAgICAgICAgIENJX0NPTU1JVF9TSEE6IGdpdERhdGEuY29tbWl0LlNIQSxcbiAgICAgICAgICAgIENJX1BST0pFQ1RfRElSLFxuICAgICAgICAgICAgQ0lfUFJPSkVDVF9OQU1FOiBnaXREYXRhLnJlbW90ZS5wcm9qZWN0LFxuICAgICAgICAgICAgQ0lfUFJPSkVDVF9USVRMRTogYCR7Y2FtZWxDYXNlKGdpdERhdGEucmVtb3RlLnByb2plY3QpfWAsXG4gICAgICAgICAgICBDSV9QUk9KRUNUX1BBVEg6IGdpdERhdGEuQ0lfUFJPSkVDVF9QQVRILFxuICAgICAgICAgICAgQ0lfUFJPSkVDVF9QQVRIX1NMVUc6IGdpdERhdGEuQ0lfUFJPSkVDVF9QQVRIX1NMVUcsXG4gICAgICAgICAgICBDSV9QUk9KRUNUX05BTUVTUEFDRTogYCR7Z2l0RGF0YS5yZW1vdGUuZ3JvdXB9YCxcbiAgICAgICAgICAgIENJX1BST0pFQ1RfVklTSUJJTElUWTogXCJpbnRlcm5hbFwiLFxuICAgICAgICAgICAgQ0lfUFJPSkVDVF9JRDogXCIxMjE3XCIsXG4gICAgICAgICAgICBDSV9DT01NSVRfUkVGX1BST1RFQ1RFRDogXCJmYWxzZVwiLFxuICAgICAgICAgICAgQ0lfQ09NTUlUX0JSQU5DSDogZ2l0RGF0YS5jb21taXQuUkVGX05BTUUsIC8vIE5vdCBhdmFpbGFibGUgaW4gbWVyZ2UgcmVxdWVzdCBvciB0YWcgcGlwZWxpbmVzXG4gICAgICAgICAgICBDSV9DT01NSVRfUkVGX05BTUU6IGdpdERhdGEuY29tbWl0LlJFRl9OQU1FLCAvLyBUYWcgb3IgYnJhbmNoIG5hbWVcbiAgICAgICAgICAgIENJX0NPTU1JVF9SRUZfU0xVRzogZ2l0RGF0YS5jb21taXQuUkVGX05BTUUucmVwbGFjZSgvW15hLXowLTldKy9pZywgXCItXCIpLnJlcGxhY2UoL14tLywgXCJcIikucmVwbGFjZSgvLSQvLCBcIlwiKS5zbGljZSgwLCA2MykudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgIENJX0NPTU1JVF9USVRMRTogXCJDb21taXQgVGl0bGVcIiwgLy8gRmlyc3QgbGluZSBvZiBjb21taXQgbWVzc2FnZS5cbiAgICAgICAgICAgIENJX0NPTU1JVF9NRVNTQUdFOiBcIkNvbW1pdCBUaXRsZVxcbk1vcmUgY29tbWl0IHRleHRcIiwgLy8gRnVsbCBjb21taXQgbWVzc2FnZVxuICAgICAgICAgICAgQ0lfQ09NTUlUX0RFU0NSSVBUSU9OOiBcIk1vcmUgY29tbWl0IHRleHRcIixcbiAgICAgICAgICAgIENJX1BJUEVMSU5FX1NPVVJDRTogXCJwdXNoXCIsXG4gICAgICAgICAgICBDSV9KT0JfSUQ6IGAke3RoaXMuam9iSWR9YCxcbiAgICAgICAgICAgIENJX1BJUEVMSU5FX0lEOiBgJHt0aGlzLnBpcGVsaW5lSWlkICsgMTAwMH1gLFxuICAgICAgICAgICAgQ0lfUElQRUxJTkVfSUlEOiBgJHt0aGlzLnBpcGVsaW5lSWlkfWAsXG4gICAgICAgICAgICBDSV9TRVJWRVJfSE9TVDogYCR7Z2l0RGF0YS5yZW1vdGUuaG9zdH1gLFxuICAgICAgICAgICAgQ0lfU0VSVkVSX1BPUlQ6IGAke2dpdERhdGEucmVtb3RlLnBvcnR9YCxcbiAgICAgICAgICAgIENJX1NFUlZFUl9VUkw6IGBodHRwczovLyR7Z2l0RGF0YS5yZW1vdGUuaG9zdH06NDQzYCxcbiAgICAgICAgICAgIENJX1NFUlZFUl9QUk9UT0NPTDogXCJodHRwc1wiLFxuICAgICAgICAgICAgQ0lfQVBJX1Y0X1VSTDogYGh0dHBzOi8vJHtnaXREYXRhLnJlbW90ZS5ob3N0fS9hcGkvdjRgLFxuICAgICAgICAgICAgQ0lfUFJPSkVDVF9VUkw6IGBodHRwczovLyR7Z2l0RGF0YS5yZW1vdGUuaG9zdH0vJHtnaXREYXRhLnJlbW90ZS5ncm91cH0vJHtnaXREYXRhLnJlbW90ZS5wcm9qZWN0fWAsXG4gICAgICAgICAgICBDSV9KT0JfVVJMOiBgaHR0cHM6Ly8ke2dpdERhdGEucmVtb3RlLmhvc3R9LyR7Z2l0RGF0YS5yZW1vdGUuZ3JvdXB9LyR7Z2l0RGF0YS5yZW1vdGUucHJvamVjdH0vLS9qb2JzLyR7dGhpcy5qb2JJZH1gLCAvLyBDaGFuZ2VzIG9uIHJlcnVuLlxuICAgICAgICAgICAgQ0lfUElQRUxJTkVfVVJMOiBgaHR0cHM6Ly8ke2dpdERhdGEucmVtb3RlLmhvc3R9LyR7Z2l0RGF0YS5yZW1vdGUuZ3JvdXB9LyR7Z2l0RGF0YS5yZW1vdGUucHJvamVjdH0vcGlwZWxpbmVzLyR7dGhpcy5waXBlbGluZUlpZH1gLFxuICAgICAgICAgICAgQ0lfSk9CX05BTUU6IGAke3RoaXMubmFtZX1gLFxuICAgICAgICAgICAgQ0lfSk9CX1NUQUdFOiBgJHt0aGlzLnN0YWdlfWAsXG4gICAgICAgICAgICBDSV9SRUdJU1RSWTogZ2l0RGF0YS5DSV9SRUdJU1RSWSxcbiAgICAgICAgICAgIENJX1JFR0lTVFJZX0lNQUdFOiBnaXREYXRhLkNJX1JFR0lTVFJZX0lNQUdFLFxuICAgICAgICAgICAgR0lUTEFCX0NJOiBcImZhbHNlXCIsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gQ3JlYXRlIGV4cGFuZGVkIHZhcmlhYmxlc1xuICAgICAgICBjb25zdCBlbnZzID0gey4uLnByZWRlZmluZWRWYXJpYWJsZXMsIC4uLmdsb2JhbHMudmFyaWFibGVzIHx8IHt9LCAuLi5qb2JEYXRhLnZhcmlhYmxlcyB8fCB7fSwgLi4udmFyaWFibGVzRnJvbUZpbGVzLCAuLi5jbGlWYXJpYWJsZXN9O1xuICAgICAgICBjb25zdCBleHBhbmRlZEdsb2JhbFZhcmlhYmxlcyA9IFV0aWxzLmV4cGFuZFZhcmlhYmxlcyhnbG9iYWxzLnZhcmlhYmxlcyB8fCB7fSwgZW52cyk7XG4gICAgICAgIGNvbnN0IGV4cGFuZGVkSm9iVmFyaWFibGVzID0gVXRpbHMuZXhwYW5kVmFyaWFibGVzKGpvYkRhdGEudmFyaWFibGVzIHx8IHt9LCBlbnZzKTtcbiAgICAgICAgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyA9IHsuLi5wcmVkZWZpbmVkVmFyaWFibGVzLCAuLi5leHBhbmRlZEdsb2JhbFZhcmlhYmxlcywgLi4uZXhwYW5kZWRKb2JWYXJpYWJsZXMsIC4uLnZhcmlhYmxlc0Zyb21GaWxlcywgLi4uY2xpVmFyaWFibGVzfTtcblxuICAgICAgICAvLyBTZXQge3doZW4sIGFsbG93RmFpbHVyZX0gYmFzZWQgb24gcnVsZXMgcmVzdWx0XG4gICAgICAgIGlmICh0aGlzLnJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBydWxlUmVzdWx0ID0gVXRpbHMuZ2V0UnVsZXNSZXN1bHQodGhpcy5ydWxlcywgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICB0aGlzLndoZW4gPSBydWxlUmVzdWx0LndoZW47XG4gICAgICAgICAgICB0aGlzLmFsbG93RmFpbHVyZSA9IHJ1bGVSZXN1bHQuYWxsb3dGYWlsdXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW50ZXJhY3RpdmUgJiYgKHRoaXMud2hlbiAhPT0gXCJtYW51YWxcIiB8fCB0aGlzLmltYWdlTmFtZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGl0RXJyb3IoYCR7dGhpcy5jaGFsa0pvYk5hbWV9IEBJbnRlcmFjdGl2ZSBkZWNvcmF0b3IgY2Fubm90IGhhdmUgaW1hZ2U6IGFuZCBtdXN0IGJlIHdoZW46bWFudWFsYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pbmplY3RTU0hBZ2VudCAmJiB0aGlzLmltYWdlTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEV4aXRFcnJvcihgJHt0aGlzLmNoYWxrSm9iTmFtZX0gQEluamVjdFNTSEFnZW50IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBpbWFnZTpgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmltYWdlTmFtZSAmJiB0aGlzLm1vdW50Q2FjaGUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICAgICAgYy5wYXRocy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBVdGlscy5leHBhbmRUZXh0KHAsIHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGF0aC5pbmNsdWRlcyhcIipcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGl0RXJyb3IoYCR7dGhpcy5uYW1lfSBjYW5ub3QgaGF2ZSAqIGluIGNhY2hlIHBhdGhzLCB3aGVuIC0tbW91bnQtY2FjaGUgaXMgZW5hYmxlZGApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgYXJ0aWZhY3RzVG9Tb3VyY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJhcnRpZmFjdHNUb1NvdXJjZVwiXSA9PSBudWxsID8gdHJ1ZSA6IHRoaXMuam9iRGF0YVtcImFydGlmYWN0c1RvU291cmNlXCJdO1xuICAgIH1cblxuICAgIGdldCBjaGFsa0pvYk5hbWUoKSB7XG4gICAgICAgIHJldHVybiBjaGFsa2B7Ymx1ZUJyaWdodCAke3RoaXMubmFtZS5wYWRFbmQodGhpcy5qb2JOYW1lUGFkKX19YDtcbiAgICB9XG5cbiAgICBnZXQgc2FmZUpvYk5hbWUoKSB7XG4gICAgICAgIHJldHVybiBVdGlscy5nZXRTYWZlSm9iTmFtZSh0aGlzLm5hbWUpO1xuICAgIH1cblxuICAgIGdldCBuZWVkcygpOiB7am9iOiBzdHJpbmc7IGFydGlmYWN0czogYm9vbGVhbn1bXSB8IG51bGwge1xuICAgICAgICBjb25zdCBuZWVkcyA9IHRoaXMuam9iRGF0YVtcIm5lZWRzXCJdO1xuICAgICAgICBpZiAoIW5lZWRzKSByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgbGlzdDoge2pvYjogc3RyaW5nOyBhcnRpZmFjdHM6IGJvb2xlYW59W10gPSBbXTtcbiAgICAgICAgbmVlZHMuZm9yRWFjaCgobmVlZDogYW55KSA9PiB7XG4gICAgICAgICAgICBsaXN0LnB1c2goe1xuICAgICAgICAgICAgICAgIGpvYjogdHlwZW9mIG5lZWQgPT09IFwic3RyaW5nXCIgPyBuZWVkIDogbmVlZC5qb2IsXG4gICAgICAgICAgICAgICAgYXJ0aWZhY3RzOiB0eXBlb2YgbmVlZCA9PT0gXCJzdHJpbmdcIiA/IHRydWUgOiBuZWVkLmFydGlmYWN0cyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG4gICAgZ2V0IGNhY2hlKCk6IENhY2hlRW50cnlbXSB7XG4gICAgICAgIGxldCBjYWNoZURhdGEgPSB0aGlzLmpvYkRhdGFbXCJjYWNoZVwiXTtcbiAgICAgICAgY29uc3QgY2FjaGVMaXN0OiBDYWNoZUVudHJ5W10gPSBbXTtcbiAgICAgICAgaWYgKCFjYWNoZURhdGEpIHJldHVybiBbXTtcblxuICAgICAgICBjYWNoZURhdGEgPSBBcnJheS5pc0FycmF5KGNhY2hlRGF0YSkgPyBjYWNoZURhdGEgOiBbY2FjaGVEYXRhXTtcbiAgICAgICAgY2FjaGVEYXRhLmZvckVhY2goKGM6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gY1tcImtleVwiXTtcbiAgICAgICAgICAgIGNvbnN0IHBvbGljeSA9IGNbXCJwb2xpY3lcIl0gPz8gXCJwdWxsLXB1c2hcIjtcbiAgICAgICAgICAgIGlmICghW1wicHVsbFwiLCBcInB1c2hcIiwgXCJwdWxsLXB1c2hcIl0uaW5jbHVkZXMocG9saWN5KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGl0RXJyb3IoXCJjYWNoZSBwb2xpY3kgaXMgbm90ICdwdWxsJywgJ3B1c2gnIG9yICdwdWxsLXB1c2gnXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGF0aHMgPSBjW1wicGF0aHNcIl0gPz8gW107XG4gICAgICAgICAgICBjYWNoZUxpc3QucHVzaChuZXcgQ2FjaGVFbnRyeShrZXksIHBhdGhzLCBwb2xpY3kpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjYWNoZUxpc3Q7XG4gICAgfVxuXG4gICAgZ2V0IGJ1aWxkVm9sdW1lTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYGdjbC0ke3RoaXMuc2FmZUpvYk5hbWV9LSR7dGhpcy5qb2JJZH0tYnVpbGRgO1xuICAgIH1cblxuICAgIGdldCB0bXBWb2x1bWVOYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgZ2NsLSR7dGhpcy5zYWZlSm9iTmFtZX0tJHt0aGlzLmpvYklkfS10bXBgO1xuICAgIH1cblxuICAgIGdldCBpbWFnZU5hbWUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5qb2JEYXRhW1wiaW1hZ2VcIl07XG4gICAgICAgIGlmICghaW1hZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW1hZ2VOYW1lID0gVXRpbHMuZXhwYW5kVGV4dChpbWFnZS5uYW1lLCB0aGlzLmV4cGFuZGVkVmFyaWFibGVzKTtcbiAgICAgICAgcmV0dXJuIGltYWdlTmFtZS5pbmNsdWRlcyhcIjpcIikgPyBpbWFnZU5hbWUgOiBgJHtpbWFnZU5hbWV9OmxhdGVzdGA7XG4gICAgfVxuXG4gICAgZ2V0IGltYWdlRW50cnlwb2ludCgpOiBzdHJpbmdbXSB8IG51bGwge1xuICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMuam9iRGF0YVtcImltYWdlXCJdO1xuXG4gICAgICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLmVudHJ5cG9pbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGFzc2VydChBcnJheS5pc0FycmF5KGltYWdlLmVudHJ5cG9pbnQpLCBcImltYWdlOmVudHJ5cG9pbnQgbXVzdCBiZSBhbiBhcnJheVwiKTtcbiAgICAgICAgcmV0dXJuIGltYWdlLmVudHJ5cG9pbnQ7XG4gICAgfVxuXG4gICAgZ2V0IHNlcnZpY2VzKCk6IFNlcnZpY2VbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJzZXJ2aWNlc1wiXTtcbiAgICB9XG5cbiAgICBnZXQgcHJvZHVjZXJzKCk6IHsgbmFtZTogc3RyaW5nOyBkb3RlbnY6IHN0cmluZyB8IG51bGwgfVtdIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9kdWNlcnM7XG4gICAgfVxuXG4gICAgc2V0IHByb2R1Y2Vycyhwcm9kdWNlcnM6IHsgbmFtZTogc3RyaW5nOyBkb3RlbnY6IHN0cmluZyB8IG51bGwgfVtdIHwgbnVsbCkge1xuICAgICAgICBhc3NlcnQodGhpcy5fcHJvZHVjZXJzID09IG51bGwsIFwidGhpcy5fcHJvZHVjZXJzIGNhbiBvbmx5IGJlIHNldCBvbmNlXCIpO1xuICAgICAgICB0aGlzLl9wcm9kdWNlcnMgPSBwcm9kdWNlcnM7XG4gICAgfVxuXG4gICAgZ2V0IHN0YWdlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJzdGFnZVwiXSB8fCBcInRlc3RcIjtcbiAgICB9XG5cbiAgICBnZXQgaW50ZXJhY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJpbnRlcmFjdGl2ZVwiXSB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgaW5qZWN0U1NIQWdlbnQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJpbmplY3RTU0hBZ2VudFwiXSB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgZGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcImRlc2NyaXB0aW9uXCJdID8/IFwiXCI7XG4gICAgfVxuXG4gICAgZ2V0IGFydGlmYWN0cygpOiB7IHBhdGhzPzogc3RyaW5nW107IGV4Y2x1ZGU/OiBzdHJpbmdbXTsgcmVwb3J0cz86IHsgZG90ZW52Pzogc3RyaW5nIH0gfXxudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcImFydGlmYWN0c1wiXTtcbiAgICB9XG5cbiAgICBnZXQgYmVmb3JlU2NyaXB0cygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJiZWZvcmVfc2NyaXB0XCJdIHx8IFtdO1xuICAgIH1cblxuICAgIGdldCBhZnRlclNjcmlwdHMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wiYWZ0ZXJfc2NyaXB0XCJdIHx8IFtdO1xuICAgIH1cblxuICAgIGdldCBzY3JpcHRzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcInNjcmlwdFwiXTtcbiAgICB9XG5cbiAgICBnZXQgcHJlU2NyaXB0c0V4aXRDb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlO1xuICAgIH1cblxuICAgIGdldCBhZnRlclNjcmlwdHNFeGl0Q29kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FmdGVyU2NyaXB0c0V4aXRDb2RlO1xuICAgIH1cblxuICAgIGdldCBydW5uaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVubmluZztcbiAgICB9XG5cbiAgICBnZXQgc3RhcnRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bm5pbmcgfHwgdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlICE9PSBudWxsO1xuICAgIH1cblxuICAgIGdldCBmaW5pc2hlZCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLl9ydW5uaW5nICYmIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgY292ZXJhZ2VQZXJjZW50KCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fY292ZXJhZ2VQZXJjZW50O1xuICAgIH1cblxuICAgIGFzeW5jIHN0YXJ0KHByaXZpbGVnZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgY29uc3Qgd3JpdGVTdHJlYW1zID0gdGhpcy53cml0ZVN0cmVhbXM7XG4gICAgICAgIGNvbnN0IHNhZmVKb2JuYW1lID0gdGhpcy5zYWZlSm9iTmFtZTtcblxuICAgICAgICB0aGlzLl9ydW5uaW5nID0gdHJ1ZTtcblxuICAgICAgICBhd2FpdCBmcy5lbnN1cmVGaWxlKGAke3RoaXMuY3dkfS8uZ2l0bGFiLWNpLWxvY2FsL291dHB1dC8ke3NhZmVKb2JuYW1lfS5sb2dgKTtcbiAgICAgICAgYXdhaXQgZnMudHJ1bmNhdGUoYCR7dGhpcy5jd2R9Ly5naXRsYWItY2ktbG9jYWwvb3V0cHV0LyR7c2FmZUpvYm5hbWV9LmxvZ2ApO1xuXG4gICAgICAgIGlmICghdGhpcy5pbnRlcmFjdGl2ZSkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBzdGFydGluZ30gJHt0aGlzLmltYWdlTmFtZSA/PyBcInNoZWxsXCJ9ICh7eWVsbG93ICR7dGhpcy5zdGFnZX19KVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJlc2NyaXB0cyA9IHRoaXMuYmVmb3JlU2NyaXB0cy5jb25jYXQodGhpcy5zY3JpcHRzKTtcbiAgICAgICAgdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlID0gYXdhaXQgdGhpcy5leGVjU2NyaXB0cyhwcmVzY3JpcHRzLCBwcml2aWxlZ2VkKTtcbiAgICAgICAgaWYgKHRoaXMuYWZ0ZXJTY3JpcHRzLmxlbmd0aCA9PT0gMCAmJiB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUgPiAwICYmICF0aGlzLmFsbG93RmFpbHVyZSkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihgJHt0aGlzLmdldEV4aXRlZFN0cmluZyhzdGFydFRpbWUsIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSwgZmFsc2UpfVxcbmApO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGVhbnVwUmVzb3VyY2VzKCk7XG4gICAgICAgICAgICB0aGlzLl9ydW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hZnRlclNjcmlwdHMubGVuZ3RoID09PSAwICYmIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSA+IDAgJiYgdGhpcy5hbGxvd0ZhaWx1cmUpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoYCR7dGhpcy5nZXRFeGl0ZWRTdHJpbmcoc3RhcnRUaW1lLCB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUsIHRydWUpfVxcbmApO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGVhbnVwUmVzb3VyY2VzKCk7XG4gICAgICAgICAgICB0aGlzLl9ydW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlID4gMCAmJiB0aGlzLmFsbG93RmFpbHVyZSkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihgJHt0aGlzLmdldEV4aXRlZFN0cmluZyhzdGFydFRpbWUsIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSwgdHJ1ZSl9XFxuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlID4gMCAmJiAhdGhpcy5hbGxvd0ZhaWx1cmUpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoYCR7dGhpcy5nZXRFeGl0ZWRTdHJpbmcoc3RhcnRUaW1lLCB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUsIGZhbHNlKX1cXG5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFmdGVyU2NyaXB0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9hZnRlclNjcmlwdHNFeGl0Q29kZSA9IGF3YWl0IHRoaXMuZXhlY1NjcmlwdHModGhpcy5hZnRlclNjcmlwdHMsIHByaXZpbGVnZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2FmdGVyU2NyaXB0c0V4aXRDb2RlID4gMCkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihgJHt0aGlzLmdldEV4aXRlZFN0cmluZyhzdGFydFRpbWUsIHRoaXMuX2FmdGVyU2NyaXB0c0V4aXRDb2RlLCB0cnVlLCBcIiBhZnRlcl9zY3JpcHRcIil9XFxuYCk7XG4gICAgICAgIH1cblxuICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGAke3RoaXMuZ2V0RmluaXNoZWRTdHJpbmcoc3RhcnRUaW1lKX1cXG5gKTtcblxuICAgICAgICBpZiAodGhpcy5qb2JEYXRhLmNvdmVyYWdlKSB7XG4gICAgICAgICAgICB0aGlzLl9jb3ZlcmFnZVBlcmNlbnQgPSBhd2FpdCBVdGlscy5nZXRDb3ZlcmFnZVBlcmNlbnQodGhpcy5jd2QsIHRoaXMuam9iRGF0YS5jb3ZlcmFnZSwgc2FmZUpvYm5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5jbGVhbnVwUmVzb3VyY2VzKCk7XG4gICAgICAgIHRoaXMuX3J1bm5pbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBhc3luYyBjbGVhbnVwUmVzb3VyY2VzKCkge1xuICAgICAgICBjb25zdCB3cml0ZVN0cmVhbXMgPSB0aGlzLndyaXRlU3RyZWFtcztcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiB0aGlzLl9jb250YWluZXJzVG9DbGVhbikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgZG9ja2VyIHJtIC1mICR7aWR9YCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGUgaW5zdGFuY2VvZiBFcnJvciwgXCJlIGlzIG5vdCBpbnN0YW5jZW9mIEVycm9yXCIpO1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtge3llbGxvdyAke2UubWVzc2FnZX19YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fc2VydmljZU5ldHdvcmtJZCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgZG9ja2VyIG5ldHdvcmsgcm0gJHt0aGlzLl9zZXJ2aWNlTmV0d29ya0lkfWApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGFzc2VydChlIGluc3RhbmNlb2YgRXJyb3IsIFwiZSBpcyBub3QgaW5zdGFuY2VvZiBFcnJvclwiKTtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHt5ZWxsb3cgJHtlLm1lc3NhZ2V9fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lclZvbHVtZU5hbWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb250YWluZXJWb2x1bWUgb2YgdGhpcy5fY29udGFpbmVyVm9sdW1lTmFtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oYGRvY2tlciB2b2x1bWUgcm0gJHtjb250YWluZXJWb2x1bWV9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGFzc2VydChlIGluc3RhbmNlb2YgRXJyb3IsIFwiZSBpcyBub3QgaW5zdGFuY2VvZiBFcnJvclwiKTtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHt5ZWxsb3cgJHtlLm1lc3NhZ2V9fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUluamVjdFNTSEFnZW50T3B0aW9ucygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmluamVjdFNTSEFnZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJkYXJ3aW5cIiB8fCAocHJvY2Vzcy5lbnYuT1NUWVBFPy5tYXRjaCgvXmRhcndpbi8pID8/IG51bGwpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCItLWVudiBTU0hfQVVUSF9TT0NLPS9ydW4vaG9zdC1zZXJ2aWNlcy9zc2gtYXV0aC5zb2NrIC12IC9ydW4vaG9zdC1zZXJ2aWNlcy9zc2gtYXV0aC5zb2NrOi9ydW4vaG9zdC1zZXJ2aWNlcy9zc2gtYXV0aC5zb2NrXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAtLWVudiBTU0hfQVVUSF9TT0NLPSR7cHJvY2Vzcy5lbnYuU1NIX0FVVEhfU09DS30gLXYgJHtwcm9jZXNzLmVudi5TU0hfQVVUSF9TT0NLfToke3Byb2Nlc3MuZW52LlNTSF9BVVRIX1NPQ0t9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlU2NyaXB0Q29tbWFuZHMoc2NyaXB0czogc3RyaW5nW10pIHtcbiAgICAgICAgbGV0IGNtZCA9IFwiXCI7XG4gICAgICAgIHNjcmlwdHMuZm9yRWFjaCgoc2NyaXB0KSA9PiB7XG4gICAgICAgICAgICAvLyBQcmludCBjb21tYW5kIGVjaG8nZWQgaW4gY29sb3JcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0ID0gc2NyaXB0LnNwbGl0KC9cXHI/XFxuLyk7XG4gICAgICAgICAgICBjb25zdCBtdWx0aWxpbmVUZXh0ID0gc3BsaXQubGVuZ3RoID4gMSA/IFwiICMgY29sbGFwc2VkIG11bHRpLWxpbmUgY29tbWFuZFwiIDogXCJcIjtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBzcGxpdFswXT8ucmVwbGFjZSgvW1xcXFxdL2csIFwiXFxcXFxcXFxcIikucmVwbGFjZSgvW1wiXS9nLCBcIlxcXFxcXFwiXCIpLnJlcGxhY2UoL1skXS9nLCBcIlxcXFwkXCIpO1xuICAgICAgICAgICAgY21kICs9IGNoYWxrYGVjaG8gXCJ7Z3JlZW4gJCAke3RleHR9JHttdWx0aWxpbmVUZXh0fX1cIlxcbmA7XG5cbiAgICAgICAgICAgIC8vIEV4ZWN1dGUgYWN0dWFsIHNjcmlwdFxuICAgICAgICAgICAgY21kICs9IGAke3NjcmlwdH1cXG5gO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNtZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIG1vdW50Q2FjaGVDbWQoc2FmZUpvYk5hbWU6IHN0cmluZywgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpIHtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VOYW1lICYmICF0aGlzLm1vdW50Q2FjaGUpIHJldHVybiBcIlwiO1xuXG4gICAgICAgIGxldCBjbWQgPSBcIlwiO1xuICAgICAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jYWNoZSkge1xuICAgICAgICAgICAgY29uc3QgdW5pcXVlQ2FjaGVOYW1lID0gYXdhaXQgYy5nZXRVbmlxdWVDYWNoZU5hbWUodGhpcy5jd2QsIHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgYy5wYXRocy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IFV0aWxzLmV4cGFuZFRleHQocCwgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBtb3VudGluZyBjYWNoZX0gZm9yIHBhdGggJHtwYXRofVxcbmApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlTW91bnQgPSBgZ2NsLSR7dGhpcy5leHBhbmRlZFZhcmlhYmxlcy5DSV9QUk9KRUNUX1BBVEhfU0xVR30tJHt1bmlxdWVDYWNoZU5hbWV9YDtcbiAgICAgICAgICAgICAgICBjbWQgKz0gYC12ICR7Y2FjaGVNb3VudH06L2J1aWxkcy8ke3NhZmVKb2JOYW1lfS8ke3BhdGh9IGA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY21kO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZXhlY1NjcmlwdHMoc2NyaXB0czogc3RyaW5nW10sIHByaXZpbGVnZWQ6IGJvb2xlYW4pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICBjb25zdCBzYWZlSm9iTmFtZSA9IHRoaXMuc2FmZUpvYk5hbWU7XG4gICAgICAgIGNvbnN0IG91dHB1dEZpbGVzUGF0aCA9IGAke3RoaXMuY3dkfS8uZ2l0bGFiLWNpLWxvY2FsL291dHB1dC8ke3NhZmVKb2JOYW1lfS5sb2dgO1xuICAgICAgICBjb25zdCBidWlsZFZvbHVtZU5hbWUgPSB0aGlzLmJ1aWxkVm9sdW1lTmFtZTtcbiAgICAgICAgY29uc3QgdG1wVm9sdW1lTmFtZSA9IHRoaXMudG1wVm9sdW1lTmFtZTtcbiAgICAgICAgY29uc3Qgd3JpdGVTdHJlYW1zID0gdGhpcy53cml0ZVN0cmVhbXM7XG4gICAgICAgIGNvbnN0IHJlcG9ydHNEb3RlbnZWYXJpYWJsZXMgPSBhd2FpdCB0aGlzLmluaXRQcm9kdWNlclJlcG9ydHNEb3RlbnZWYXJpYWJsZXMod3JpdGVTdHJlYW1zKTtcbiAgICAgICAgbGV0IHRpbWU7XG4gICAgICAgIGxldCBlbmRUaW1lO1xuXG4gICAgICAgIGlmIChzY3JpcHRzLmxlbmd0aCA9PT0gMCB8fCBzY3JpcHRzWzBdID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29weSBnaXQgdHJhY2tlZCBmaWxlcyB0byBidWlsZCBmb2xkZXIgaWYgc2hlbGwgaXNvbGF0aW9uIGVuYWJsZWQuXG4gICAgICAgIGlmICghdGhpcy5pbWFnZU5hbWUgJiYgdGhpcy5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMucnN5bmNUcmFja2VkRmlsZXModGhpcy5jd2QsIGAke3NhZmVKb2JOYW1lfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW50ZXJhY3RpdmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGlDbWQgPSB0aGlzLmdlbmVyYXRlU2NyaXB0Q29tbWFuZHMoc2NyaXB0cyk7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUNwID0gY2hpbGRQcm9jZXNzLnNwYXduKGlDbWQsIHtcbiAgICAgICAgICAgICAgICBzaGVsbDogXCJiYXNoXCIsXG4gICAgICAgICAgICAgICAgc3RkaW86IFtcImluaGVyaXRcIiwgXCJpbmhlcml0XCIsIFwiaW5oZXJpdFwiXSxcbiAgICAgICAgICAgICAgICBjd2Q6IHRoaXMuY3dkLFxuICAgICAgICAgICAgICAgIGVudjogey4uLnRoaXMuZXhwYW5kZWRWYXJpYWJsZXMsIC4uLnByb2Nlc3MuZW52fSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlQ3Aub24oXCJleGl0XCIsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMCkpO1xuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlQ3Aub24oXCJlcnJvclwiLCAoZXJyKSA9PiByZWplY3QoZXJyKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuXG4gICAgICAgIGlmICh0aGlzLmltYWdlTmFtZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wdWxsSW1hZ2Uod3JpdGVTdHJlYW1zLCB0aGlzLmltYWdlTmFtZSk7XG5cbiAgICAgICAgICAgIGxldCBkb2NrZXJDbWQgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKHByaXZpbGVnZWQpIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYGRvY2tlciBjcmVhdGUgLS1wcml2aWxlZ2VkIC11IDA6MCAtaSAke3RoaXMuZ2VuZXJhdGVJbmplY3RTU0hBZ2VudE9wdGlvbnMoKX0gYDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGBkb2NrZXIgY3JlYXRlIC11IDA6MCAtaSAke3RoaXMuZ2VuZXJhdGVJbmplY3RTU0hBZ2VudE9wdGlvbnMoKX0gYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNlcnZpY2VzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNyZWF0ZURvY2tlck5ldHdvcmsoYGdpdGxhYi1jaS1sb2NhbC0ke3RoaXMuam9iSWR9YCk7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLW5ldHdvcmsgZ2l0bGFiLWNpLWxvY2FsLSR7dGhpcy5qb2JJZH0gYDtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHNlcnZpY2Ugb2YgdGhpcy5zZXJ2aWNlcykge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnB1bGxJbWFnZSh3cml0ZVN0cmVhbXMsIHNlcnZpY2UuZ2V0TmFtZSh0aGlzLmV4cGFuZGVkVmFyaWFibGVzKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lcklkID0gYXdhaXQgdGhpcy5zdGFydFNlcnZpY2Uod3JpdGVTdHJlYW1zLCBzZXJ2aWNlLCBwcml2aWxlZ2VkKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlSGVhbHRoQ2hlY2sod3JpdGVTdHJlYW1zLCBzZXJ2aWNlLCBjb250YWluZXJJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB2b2x1bWVQcm9taXNlcyA9IFtdO1xuICAgICAgICAgICAgdm9sdW1lUHJvbWlzZXMucHVzaChVdGlscy5zcGF3bihgZG9ja2VyIHZvbHVtZSBjcmVhdGUgJHtidWlsZFZvbHVtZU5hbWV9YCwgdGhpcy5jd2QpKTtcbiAgICAgICAgICAgIHZvbHVtZVByb21pc2VzLnB1c2goVXRpbHMuc3Bhd24oYGRvY2tlciB2b2x1bWUgY3JlYXRlICR7dG1wVm9sdW1lTmFtZX1gLCB0aGlzLmN3ZCkpO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLXZvbHVtZSAke2J1aWxkVm9sdW1lTmFtZX06L2J1aWxkcy8ke3NhZmVKb2JOYW1lfSBgO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLXZvbHVtZSAke3RtcFZvbHVtZU5hbWV9Oi90bXAvIGA7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJWb2x1bWVOYW1lcy5wdXNoKGJ1aWxkVm9sdW1lTmFtZSk7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJWb2x1bWVOYW1lcy5wdXNoKHRtcFZvbHVtZU5hbWUpO1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodm9sdW1lUHJvbWlzZXMpO1xuXG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0td29ya2RpciAvYnVpbGRzLyR7c2FmZUpvYk5hbWV9IGA7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgdm9sdW1lIG9mIHRoaXMudm9sdW1lcykge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS12b2x1bWUgJHt2b2x1bWV9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZXh0cmFIb3N0IG9mIHRoaXMuZXh0cmFIb3N0cykge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS1hZGQtaG9zdD0ke2V4dHJhSG9zdH0gYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaW1hZ2VFbnRyeXBvaW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbWFnZUVudHJ5cG9pbnQuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tZW50cnlwb2ludCBcIiR7ZX1cIiBgO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmV4cGFuZGVkVmFyaWFibGVzKSkge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLWUgJHtrZXl9PScke1N0cmluZyh2YWx1ZSkudHJpbSgpfScgYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlcG9ydHNEb3RlbnZWYXJpYWJsZXMpKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtZSAke2tleX09JyR7U3RyaW5nKHZhbHVlKS50cmltKCl9JyBgO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYXdhaXQgdGhpcy5tb3VudENhY2hlQ21kKHNhZmVKb2JOYW1lLCB3cml0ZVN0cmVhbXMpO1xuXG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYCR7dGhpcy5pbWFnZU5hbWV9IHNoIC1jIFwiXFxuYDtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImlmIFsgLXggL3Vzci9sb2NhbC9iaW4vYmFzaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC91c3IvbG9jYWwvYmluL2Jhc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbGlmIFsgLXggL3Vzci9iaW4vYmFzaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC91c3IvYmluL2Jhc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbGlmIFsgLXggL2Jpbi9iYXNoIF07IHRoZW5cXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4ZWMgL2Jpbi9iYXNoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxpZiBbIC14IC91c3IvbG9jYWwvYmluL3NoIF07IHRoZW5cXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4ZWMgL3Vzci9sb2NhbC9iaW4vc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbGlmIFsgLXggL3Vzci9iaW4vc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvdXNyL2Jpbi9zaCBcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImVsaWYgWyAteCAvYmluL3NoIF07IHRoZW5cXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4ZWMgL2Jpbi9zaCBcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImVsaWYgWyAteCAvYnVzeWJveC9zaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC9idXN5Ym94L3NoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxzZVxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZWNobyBzaGVsbCBub3QgZm91bmRcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4aXQgMVxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZmlcXG5cXFwiXCI7XG5cbiAgICAgICAgICAgIGNvbnN0IHtzdGRvdXQ6IGNvbnRhaW5lcklkfSA9IGF3YWl0IFV0aWxzLnNwYXduKGRvY2tlckNtZCwgdGhpcy5jd2QpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVySWQgPSBjb250YWluZXJJZC5yZXBsYWNlKC9cXHI/XFxuL2csIFwiXCIpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyc1RvQ2xlYW4ucHVzaCh0aGlzLl9jb250YWluZXJJZCk7XG5cbiAgICAgICAgICAgIHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgLy8gQ29weSBzb3VyY2UgZmlsZXMgaW50byBjb250YWluZXIuXG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgZG9ja2VyIGNwIC5naXRsYWItY2ktbG9jYWwvYnVpbGRzLy5kb2NrZXIvLiAke3RoaXMuX2NvbnRhaW5lcklkfTovYnVpbGRzLyR7c2FmZUpvYk5hbWV9YCwgdGhpcy5jd2QpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG5cbiAgICAgICAgICAgIC8vIENvcHkgZmlsZSB2YXJpYWJsZXMgaW50byBjb250YWluZXIuXG4gICAgICAgICAgICBjb25zdCBmaWxlVmFyaWFibGVzRm9sZGVyID0gYC90bXAvZ2l0bGFiLWNpLWxvY2FsLWZpbGUtdmFyaWFibGVzLSR7dGhpcy5naXREYXRhLkNJX1BST0pFQ1RfUEFUSF9TTFVHfS9gO1xuICAgICAgICAgICAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHMoZmlsZVZhcmlhYmxlc0ZvbGRlcikpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgZG9ja2VyIGNwICR7ZmlsZVZhcmlhYmxlc0ZvbGRlcn0gJHt0aGlzLl9jb250YWluZXJJZH06JHtmaWxlVmFyaWFibGVzRm9sZGVyfS9gLCB0aGlzLmN3ZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgY29waWVkIHRvIGNvbnRhaW5lcn0gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5jb3B5Q2FjaGVJbih3cml0ZVN0cmVhbXMpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvcHlBcnRpZmFjdHNJbih3cml0ZVN0cmVhbXMpO1xuXG4gICAgICAgIGlmICh0aGlzLmltYWdlTmFtZSkge1xuICAgICAgICAgICAgLy8gRmlsZXMgaW4gZG9ja2VyLWV4ZWN1dG9yIGJ1aWxkIGZvbGRlciBtdXN0IGJlIHJvb3Qgb3duZWQuXG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgZG9ja2VyIHJ1biAtLXJtIC12ICR7dG1wVm9sdW1lTmFtZX06L3RtcC8gLXYgJHtidWlsZFZvbHVtZU5hbWV9Oi9hcHAvIGZpcmVjb3cvZ2l0bGFiLWNpLWxvY2FsLXV0aWwgYmFzaCAtYyBcImNob3duIDA6MCAtUiAvYXBwLyAmJiBjaG1vZCBhK3J3IC1SIC9hcHAvICYmIGNobW9kIGErcncgLVIgL3RtcC9cImApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNtZCA9IFwic2V0IC1lbyBwaXBlZmFpbFxcblwiO1xuICAgICAgICBjbWQgKz0gXCJleGVjIDA8IC9kZXYvbnVsbFxcblwiO1xuXG4gICAgICAgIGlmICghdGhpcy5pbWFnZU5hbWUgJiYgdGhpcy5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgY21kICs9IGBjZCAuZ2l0bGFiLWNpLWxvY2FsL2J1aWxkcy8ke3NhZmVKb2JOYW1lfS9cXG5gO1xuICAgICAgICB9XG4gICAgICAgIGNtZCArPSB0aGlzLmdlbmVyYXRlU2NyaXB0Q29tbWFuZHMoc2NyaXB0cyk7XG5cbiAgICAgICAgY21kICs9IFwiZXhpdCAwXFxuXCI7XG5cbiAgICAgICAgYXdhaXQgZnMub3V0cHV0RmlsZShgJHt0aGlzLmN3ZH0vLmdpdGxhYi1jaS1sb2NhbC9zY3JpcHRzLyR7c2FmZUpvYk5hbWV9YCwgY21kLCBcInV0Zi04XCIpO1xuICAgICAgICBhd2FpdCBmcy5jaG1vZChgJHt0aGlzLmN3ZH0vLmdpdGxhYi1jaS1sb2NhbC9zY3JpcHRzLyR7c2FmZUpvYk5hbWV9YCwgXCIwNzU1XCIpO1xuXG4gICAgICAgIGlmICh0aGlzLmltYWdlTmFtZSkge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oYGRvY2tlciBjcCAuZ2l0bGFiLWNpLWxvY2FsL3NjcmlwdHMvLiAke3RoaXMuX2NvbnRhaW5lcklkfTovZ2NsLXNjcmlwdHMvYCwgdGhpcy5jd2QpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3AgPSBjaGlsZFByb2Nlc3Muc3Bhd24odGhpcy5fY29udGFpbmVySWQgPyBgZG9ja2VyIHN0YXJ0IC0tYXR0YWNoIC1pICR7dGhpcy5fY29udGFpbmVySWR9YCA6IFwiYmFzaFwiLCB7XG4gICAgICAgICAgICBzaGVsbDogXCJiYXNoXCIsXG4gICAgICAgICAgICBzdGRpbzogW1wicGlwZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdLFxuICAgICAgICAgICAgY3dkOiB0aGlzLmN3ZCxcbiAgICAgICAgICAgIGVudjogdGhpcy5pbWFnZU5hbWUgPyB7Li4ucHJvY2Vzcy5lbnZ9IDogey4uLnRoaXMuZXhwYW5kZWRWYXJpYWJsZXMsIC4uLnJlcG9ydHNEb3RlbnZWYXJpYWJsZXMsIC4uLnByb2Nlc3MuZW52fSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgb3V0RnVuYyA9IChlOiBhbnksIHN0cmVhbTogKHR4dDogc3RyaW5nKSA9PiB2b2lkLCBjb2xvcml6ZTogKHN0cjogc3RyaW5nKSA9PiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGAke2V9YC5zcGxpdCgvXFxyP1xcbi8pKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxpbmUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN0cmVhbShgJHt0aGlzLmNoYWxrSm9iTmFtZX0gYCk7XG4gICAgICAgICAgICAgICAgaWYgKCFsaW5lLnN0YXJ0c1dpdGgoXCJcXHUwMDFiWzMybSRcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtKGAke2NvbG9yaXplKFwiPlwiKX0gYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0cmVhbShgJHtsaW5lfVxcbmApO1xuICAgICAgICAgICAgICAgIGZzLmFwcGVuZEZpbGVTeW5jKG91dHB1dEZpbGVzUGF0aCwgYCR7bGluZX1cXG5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBleGl0Q29kZSA9IGF3YWl0IG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY3Auc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoZSkgPT4gb3V0RnVuYyhlLCB3cml0ZVN0cmVhbXMuc3Rkb3V0LmJpbmQod3JpdGVTdHJlYW1zKSwgKHMpID0+IGNoYWxrYHtncmVlbkJyaWdodCAke3N9fWApKTtcbiAgICAgICAgICAgIGNwLnN0ZGVyci5vbihcImRhdGFcIiwgKGUpID0+IG91dEZ1bmMoZSwgd3JpdGVTdHJlYW1zLnN0ZGVyci5iaW5kKHdyaXRlU3RyZWFtcyksIChzKSA9PiBjaGFsa2B7cmVkQnJpZ2h0ICR7c319YCkpO1xuXG4gICAgICAgICAgICBjcC5vbihcImV4aXRcIiwgKGNvZGUpID0+IHNldFRpbWVvdXQoKCkgPT4gcmVzb2x2ZShjb2RlID8/IDApLCAxMCkpO1xuICAgICAgICAgICAgY3Aub24oXCJlcnJvclwiLCAoZXJyKSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChlcnIpLCAxMCkpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5pbWFnZU5hbWUpIHtcbiAgICAgICAgICAgICAgICBjcC5zdGRpbi5lbmQoYC9nY2wtc2NyaXB0cy8ke3NhZmVKb2JOYW1lfWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjcC5zdGRpbi5lbmQoYC4vLmdpdGxhYi1jaS1sb2NhbC9zY3JpcHRzLyR7c2FmZUpvYk5hbWV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChleGl0Q29kZSA9PSAwKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvcHlDYWNoZU91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb3B5QXJ0aWZhY3RzT3V0KHdyaXRlU3RyZWFtcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhpdENvZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBwdWxsSW1hZ2Uod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIGltYWdlVG9QdWxsOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgIGxldCBwdWxsQ21kID0gXCJcIjtcbiAgICAgICAgcHVsbENtZCArPSBgZG9ja2VyIGltYWdlIGxzIC0tZm9ybWF0ICd7ey5SZXBvc2l0b3J5fX06e3suVGFnfX0nIHwgZ3JlcCAtRSAnXiR7aW1hZ2VUb1B1bGx9JCdcXG5gO1xuICAgICAgICBwdWxsQ21kICs9IFwiaWYgWyBcXFwiJD9cXFwiIC1uZSAwIF07IHRoZW5cXG5cIjtcbiAgICAgICAgcHVsbENtZCArPSBgXFx0ZWNobyBcIlB1bGxpbmcgJHtpbWFnZVRvUHVsbH1cIlxcbmA7XG4gICAgICAgIHB1bGxDbWQgKz0gYFxcdGRvY2tlciBwdWxsICR7aW1hZ2VUb1B1bGx9XFxuYDtcbiAgICAgICAgcHVsbENtZCArPSBcImZpXFxuXCI7XG4gICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKHB1bGxDbWQsIHRoaXMuY3dkKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcbiAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBwdWxsZWR9ICR7aW1hZ2VUb1B1bGx9IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGluaXRQcm9kdWNlclJlcG9ydHNEb3RlbnZWYXJpYWJsZXMod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpIHtcbiAgICAgICAgY29uc3QgcHJvZHVjZXJzID0gdGhpcy5wcm9kdWNlcnM7XG4gICAgICAgIGxldCBwcm9kdWNlclJlcG9ydHNFbnZzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgcHJvZHVjZXIgb2YgcHJvZHVjZXJzID8/IFtdKSB7XG4gICAgICAgICAgICBpZiAocHJvZHVjZXIuZG90ZW52ID09PSBudWxsKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3Qgc2FmZVByb2R1Y2VyTmFtZSA9IFV0aWxzLmdldFNhZmVKb2JOYW1lKHByb2R1Y2VyLm5hbWUpO1xuICAgICAgICAgICAgbGV0IGRvdGVudkZpbGU7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hlbGxJc29sYXRpb24gJiYgIXRoaXMuaW1hZ2VOYW1lKSB7XG4gICAgICAgICAgICAgICAgZG90ZW52RmlsZSA9IGAke3RoaXMuY3dkfS8ke3Byb2R1Y2VyLmRvdGVudn1gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkb3RlbnZGaWxlID0gYCR7dGhpcy5jd2R9Ly5naXRsYWItY2ktbG9jYWwvYXJ0aWZhY3RzLyR7c2FmZVByb2R1Y2VyTmFtZX0vLmdpdGxhYi1jaS1yZXBvcnRzL2RvdGVudi8ke3Byb2R1Y2VyLmRvdGVudn1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHMoZG90ZW52RmlsZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9kdWNlclJlcG9ydEVudiA9IGRvdGVudi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShkb3RlbnZGaWxlKSk7XG4gICAgICAgICAgICAgICAgcHJvZHVjZXJSZXBvcnRzRW52cyA9IHsuLi5wcm9kdWNlclJlcG9ydHNFbnZzLCAuLi5wcm9kdWNlclJlcG9ydEVudn07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge3llbGxvdyAnJHtwcm9kdWNlci5kb3RlbnZ9JyBwcm9kdWNlZCBieSAnJHtwcm9kdWNlci5uYW1lfScgY291bGQgbm90IGJlIGZvdW5kfVxcbmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb2R1Y2VyUmVwb3J0c0VudnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjb3B5Q2FjaGVJbih3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcykge1xuICAgICAgICBpZiAodGhpcy5tb3VudENhY2hlICYmIHRoaXMuaW1hZ2VOYW1lKSByZXR1cm47XG4gICAgICAgIGlmICgoIXRoaXMuaW1hZ2VOYW1lICYmICF0aGlzLnNoZWxsSXNvbGF0aW9uKSB8fCB0aGlzLmNhY2hlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICBpZiAoIVtcInB1bGxcIiwgXCJwdWxsLXB1c2hcIl0uaW5jbHVkZXMoYy5wb2xpY3kpKSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgY29uc3QgY2FjaGVOYW1lID0gYXdhaXQgYy5nZXRVbmlxdWVDYWNoZU5hbWUodGhpcy5jd2QsIHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgY29uc3QgY2FjaGVGb2xkZXIgPSBgJHt0aGlzLmN3ZH0vLmdpdGxhYi1jaS1sb2NhbC9jYWNoZS8ke2NhY2hlTmFtZX1gO1xuICAgICAgICAgICAgaWYgKCFhd2FpdCBmcy5wYXRoRXhpc3RzKGNhY2hlRm9sZGVyKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhd2FpdCBNdXRleC5leGNsdXNpdmUoY2FjaGVOYW1lLCBhc3luYygpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNvcHlJbihjYWNoZUZvbGRlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgaW1wb3J0ZWQgY2FjaGUgJyR7Y2FjaGVOYW1lfSd9IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weUFydGlmYWN0c0luKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKSB7XG4gICAgICAgIGlmICgoIXRoaXMuaW1hZ2VOYW1lICYmICF0aGlzLnNoZWxsSXNvbGF0aW9uKSB8fCAodGhpcy5wcm9kdWNlcnMgPz8gW10pLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHByb2R1Y2VyIG9mIHRoaXMucHJvZHVjZXJzID8/IFtdKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9kdWNlclNhZmVOYW1lID0gVXRpbHMuZ2V0U2FmZUpvYk5hbWUocHJvZHVjZXIubmFtZSk7XG4gICAgICAgICAgICBjb25zdCBhcnRpZmFjdEZvbGRlciA9IGAke3RoaXMuY3dkfS8uZ2l0bGFiLWNpLWxvY2FsL2FydGlmYWN0cy8ke3Byb2R1Y2VyU2FmZU5hbWV9YDtcbiAgICAgICAgICAgIGlmICghYXdhaXQgZnMucGF0aEV4aXN0cyhhcnRpZmFjdEZvbGRlcikpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5ta2RpcnAoYXJ0aWZhY3RGb2xkZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByZWFkZGlyID0gYXdhaXQgZnMucmVhZGRpcihhcnRpZmFjdEZvbGRlcik7XG4gICAgICAgICAgICBpZiAocmVhZGRpci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHt5ZWxsb3cgYXJ0aWZhY3RzIGZyb20ge2JsdWVCcmlnaHQgJHtwcm9kdWNlclNhZmVOYW1lfX0gd2FzIGVtcHR5fVxcbmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuY29weUluKGFydGlmYWN0Rm9sZGVyKSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgaW1wb3J0ZWQgYXJ0aWZhY3RzfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgfVxuXG4gICAgY29weUluKHNvdXJjZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHNhZmVKb2JOYW1lID0gdGhpcy5zYWZlSm9iTmFtZTtcbiAgICAgICAgaWYgKCF0aGlzLmltYWdlTmFtZSAmJiB0aGlzLnNoZWxsSXNvbGF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gVXRpbHMuc3Bhd24oYHJzeW5jIC1hICR7c291cmNlfS8uICR7dGhpcy5jd2R9Ly5naXRsYWItY2ktbG9jYWwvYnVpbGRzLyR7c2FmZUpvYk5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFV0aWxzLnNwYXduKGBkb2NrZXIgY3AgJHtzb3VyY2V9Ly4gJHt0aGlzLl9jb250YWluZXJJZH06L2J1aWxkcy8ke3NhZmVKb2JOYW1lfWApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weUNhY2hlT3V0KHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKSB7XG4gICAgICAgIGlmICh0aGlzLm1vdW50Q2FjaGUgJiYgdGhpcy5pbWFnZU5hbWUpIHJldHVybjtcbiAgICAgICAgaWYgKCghdGhpcy5pbWFnZU5hbWUgJiYgIXRoaXMuc2hlbGxJc29sYXRpb24pIHx8IHRoaXMuY2FjaGUubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAgICAgbGV0IHRpbWUsIGVuZFRpbWU7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICBpZiAoIVtcInB1c2hcIiwgXCJwdWxsLXB1c2hcIl0uaW5jbHVkZXMoYy5wb2xpY3kpKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBjYWNoZU5hbWUgPSBhd2FpdCBjLmdldFVuaXF1ZUNhY2hlTmFtZSh0aGlzLmN3ZCwgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhdGggb2YgYy5wYXRocykge1xuICAgICAgICAgICAgICAgIHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkUGF0aCA9IFV0aWxzLmV4cGFuZFRleHQocGF0aCwgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICAgICAgbGV0IGNtZCA9IFwic2hvcHQgLXMgZ2xvYnN0YXIgbnVsbGdsb2IgZG90Z2xvYlxcblwiO1xuICAgICAgICAgICAgICAgIGNtZCArPSBgbWtkaXIgLXAgLi4vLi4vY2FjaGUvJHtjYWNoZU5hbWV9XFxuYDtcbiAgICAgICAgICAgICAgICBjbWQgKz0gYHJzeW5jIC1SYSAke2V4cGFuZGVkUGF0aH0gLi4vLi4vY2FjaGUvJHtjYWNoZU5hbWV9Ly4gfHwgdHJ1ZVxcbmA7XG5cbiAgICAgICAgICAgICAgICBhd2FpdCBNdXRleC5leGNsdXNpdmUoY2FjaGVOYW1lLCBhc3luYygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb3B5T3V0KGNtZCwgXCJjYWNoZVwiLCBbXSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVhZGRpciA9IGF3YWl0IGZzLnJlYWRkaXIoYCR7dGhpcy5jd2R9Ly5naXRsYWItY2ktbG9jYWwvY2FjaGUvJHtjYWNoZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgaWYgKHJlYWRkaXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge3llbGxvdyAhISBubyBjYWNoZSB3YXMgY29waWVkIGZvciAke3BhdGh9ICEhfVxcbmApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgZXhwb3J0ZWQgY2FjaGUgJHtleHBhbmRlZFBhdGh9ICcke2NhY2hlTmFtZX0nfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjb3B5QXJ0aWZhY3RzT3V0KHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKSB7XG4gICAgICAgIGNvbnN0IHNhZmVKb2JOYW1lID0gdGhpcy5zYWZlSm9iTmFtZTtcblxuICAgICAgICBpZiAoIXRoaXMuc2hlbGxJc29sYXRpb24gJiYgIXRoaXMuaW1hZ2VOYW1lIHx8ICF0aGlzLmFydGlmYWN0cykgcmV0dXJuO1xuXG4gICAgICAgIGxldCB0aW1lLCBlbmRUaW1lO1xuICAgICAgICBsZXQgY3BDbWQgPSBcInNob3B0IC1zIGdsb2JzdGFyIG51bGxnbG9iIGRvdGdsb2JcXG5cIjtcbiAgICAgICAgY3BDbWQgKz0gYG1rZGlyIC1wIC4uLy4uL2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfVxcbmA7XG4gICAgICAgIGZvciAoY29uc3QgYXJ0aWZhY3RQYXRoIG9mIHRoaXMuYXJ0aWZhY3RzPy5wYXRocyA/PyBbXSkge1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWRQYXRoID0gVXRpbHMuZXhwYW5kVGV4dChhcnRpZmFjdFBhdGgsIHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgY3BDbWQgKz0gYHJzeW5jIC1SYSAke2V4cGFuZGVkUGF0aH0gLi4vLi4vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9Ly4gfHwgdHJ1ZVxcbmA7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGFydGlmYWN0RXhjbHVkZVBhdGggb2YgdGhpcy5hcnRpZmFjdHM/LmV4Y2x1ZGUgPz8gW10pIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkUGF0aCA9IFV0aWxzLmV4cGFuZFRleHQoYXJ0aWZhY3RFeGNsdWRlUGF0aCwgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICBjcENtZCArPSBgbHMgLTFkICcuLi8uLi9hcnRpZmFjdHMvJHtzYWZlSm9iTmFtZX0vJHtleHBhbmRlZFBhdGh9JyB8IHhhcmdzIC1uMSBybSAtcmYgfHwgdHJ1ZVxcbmA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXBvcnREb3RlbnYgPSB0aGlzLmFydGlmYWN0cy5yZXBvcnRzPy5kb3RlbnYgPz8gbnVsbDtcbiAgICAgICAgaWYgKHJlcG9ydERvdGVudiAhPSBudWxsKSB7XG4gICAgICAgICAgICBjcENtZCArPSBgbWtkaXIgLXAgLi4vLi4vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9Ly5naXRsYWItY2ktcmVwb3J0cy9kb3RlbnZcXG5gO1xuICAgICAgICAgICAgY3BDbWQgKz0gYHJzeW5jIC1SYSAke3JlcG9ydERvdGVudn0gLi4vLi4vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9Ly5naXRsYWItY2ktcmVwb3J0cy9kb3RlbnYvLlxcbmA7XG4gICAgICAgIH1cblxuICAgICAgICB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgY29uc3QgZG9ja2VyQ21kRXh0cmFzID0gdGhpcy5tb3VudENhY2hlID8gW2F3YWl0IHRoaXMubW91bnRDYWNoZUNtZCh0aGlzLnNhZmVKb2JOYW1lLCB3cml0ZVN0cmVhbXMpXSA6IFtdO1xuICAgICAgICBhd2FpdCB0aGlzLmNvcHlPdXQoY3BDbWQsIFwiYXJ0aWZhY3RzXCIsIGRvY2tlckNtZEV4dHJhcyk7XG4gICAgICAgIGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcblxuICAgICAgICBjb25zdCByZWFkZGlyID0gYXdhaXQgZnMucmVhZGRpcihgJHt0aGlzLmN3ZH0vLmdpdGxhYi1jaS1sb2NhbC9hcnRpZmFjdHMvJHtzYWZlSm9iTmFtZX1gKTtcbiAgICAgICAgaWYgKHJlYWRkaXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHt5ZWxsb3cgISEgbm8gYXJ0aWZhY3RzIHdhcyBjb3BpZWQgISF9XFxuYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IGV4cG9ydGVkIGFydGlmYWN0c30gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYXJ0aWZhY3RzVG9Tb3VyY2UpIHtcbiAgICAgICAgICAgIHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oYHJzeW5jIC0tZXhjbHVkZT0vLmdpdGxhYi1jaS1yZXBvcnRzLyAtYSAke3RoaXMuY3dkfS8uZ2l0bGFiLWNpLWxvY2FsL2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfS8uICR7dGhpcy5jd2R9YCk7XG4gICAgICAgICAgICBpZiAocmVwb3J0RG90ZW52ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgcnN5bmMgLWEgJHt0aGlzLmN3ZH0vLmdpdGxhYi1jaS1sb2NhbC9hcnRpZmFjdHMvJHtzYWZlSm9iTmFtZX0vLmdpdGxhYi1jaS1yZXBvcnRzL2RvdGVudi8uICR7dGhpcy5jd2R9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IGNvcGllZCBhcnRpZmFjdHMgdG8gY3dkfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNvcHlPdXQoY21kOiBzdHJpbmcsIHR5cGU6IFwiYXJ0aWZhY3RzXCIgfCBcImNhY2hlXCIsIGRvY2tlckNtZEV4dHJhczogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3Qgc2FmZUpvYk5hbWUgPSB0aGlzLnNhZmVKb2JOYW1lO1xuICAgICAgICBjb25zdCBidWlsZFZvbHVtZU5hbWUgPSB0aGlzLmJ1aWxkVm9sdW1lTmFtZTtcblxuICAgICAgICBhd2FpdCBmcy5ta2RpcnAoYCR7dGhpcy5jd2R9Ly5naXRsYWItY2ktbG9jYWwvJHt0eXBlfWApO1xuXG4gICAgICAgIGlmICh0aGlzLmltYWdlTmFtZSkge1xuICAgICAgICAgICAgY29uc3Qge3N0ZG91dDogY2lkfSA9IGF3YWl0IFV0aWxzLnNwYXduKGBkb2NrZXIgY3JlYXRlIC1pICR7ZG9ja2VyQ21kRXh0cmFzLmpvaW4oXCIgXCIpfSAtdiAke2J1aWxkVm9sdW1lTmFtZX06L2J1aWxkcy8ke3NhZmVKb2JOYW1lfS8gLXcgL2J1aWxkcy8ke3NhZmVKb2JOYW1lfS8gZmlyZWNvdy9naXRsYWItY2ktbG9jYWwtdXRpbCBiYXNoIC1jIFwiJHtjbWR9XCJgLCB0aGlzLmN3ZCk7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJJZCA9IGNpZC5yZXBsYWNlKC9cXHI/XFxuL2csIFwiXCIpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyc1RvQ2xlYW4ucHVzaChjb250YWluZXJJZCk7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgZG9ja2VyIHN0YXJ0ICR7Y29udGFpbmVySWR9IC0tYXR0YWNoYCk7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgZG9ja2VyIGNwICR7Y29udGFpbmVySWR9Oi8ke3R5cGV9Ly4gLmdpdGxhYi1jaS1sb2NhbC8ke3R5cGV9Ly5gLCB0aGlzLmN3ZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oYGJhc2ggLWVvIHBpcGVmYWlsIC1jIFwiJHtjbWR9XCJgLCBgJHt0aGlzLmN3ZH0vLmdpdGxhYi1jaS1sb2NhbC9idWlsZHMvJHtzYWZlSm9iTmFtZX1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcykge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fbG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KTtcbiAgICAgICAgdGhpcy5fbG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHtncmV5ID4gc3RpbGwgcnVubmluZy4uLn1cXG5gKTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICB9LCAxMDAwMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFeGl0ZWRTdHJpbmcoc3RhcnRUaW1lOiBbbnVtYmVyLCBudW1iZXJdLCBjb2RlOiBudW1iZXIsIHdhcm5pbmcgPSBmYWxzZSwgcHJlcGVuZFN0cmluZyA9IFwiXCIpIHtcbiAgICAgICAgY29uc3QgZmluaXNoZWRTdHIgPSB0aGlzLmdldEZpbmlzaGVkU3RyaW5nKHN0YXJ0VGltZSk7XG4gICAgICAgIGlmICh3YXJuaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hhbGtgJHtmaW5pc2hlZFN0cn0ge2JsYWNrLmJnWWVsbG93QnJpZ2h0ICBXQVJOICR7Y29kZS50b1N0cmluZygpfSB9JHtwcmVwZW5kU3RyaW5nfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hhbGtgJHtmaW5pc2hlZFN0cn0ge2JsYWNrLmJnUmVkICBGQUlMICR7Y29kZS50b1N0cmluZygpfSB9ICR7cHJlcGVuZFN0cmluZ31gO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RmluaXNoZWRTdHJpbmcoc3RhcnRUaW1lOiBbbnVtYmVyLCBudW1iZXJdKSB7XG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZShzdGFydFRpbWUpO1xuICAgICAgICBjb25zdCB0aW1lU3RyID0gcHJldHR5SHJ0aW1lKGVuZFRpbWUpO1xuICAgICAgICByZXR1cm4gY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgZmluaXNoZWR9IGluIHttYWdlbnRhICR7dGltZVN0cn19YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNyZWF0ZURvY2tlck5ldHdvcmsobmV0d29ya05hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCB7c3Rkb3V0OiBuZXR3b3JrSWR9ID0gYXdhaXQgVXRpbHMuc3Bhd24oYGRvY2tlciBuZXR3b3JrIGNyZWF0ZSAke25ldHdvcmtOYW1lfWApO1xuICAgICAgICB0aGlzLl9zZXJ2aWNlTmV0d29ya0lkID0gbmV0d29ya0lkLnJlcGxhY2UoL1xccj9cXG4vZywgXCJcIik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzdGFydFNlcnZpY2Uod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIHNlcnZpY2U6IFNlcnZpY2UsIHByaXZpbGVnZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgbGV0IGRvY2tlckNtZCA9IGBkb2NrZXIgcnVuIC1kIC0tbmV0d29yayBnaXRsYWItY2ktbG9jYWwtJHt0aGlzLmpvYklkfSBgO1xuXG4gICAgICAgIGlmIChwcml2aWxlZ2VkKSB7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCItLXByaXZpbGVnZWQgXCI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZXJ2aWNlQWxpYXMgPSBzZXJ2aWNlLmdldEFsaWFzKHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHNlcnZpY2UuZ2V0TmFtZSh0aGlzLmV4cGFuZGVkVmFyaWFibGVzKTtcbiAgICAgICAgY29uc3Qgc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbiA9IHNlcnZpY2VOYW1lLnJlcGxhY2UoLyguKikoOi4qKS8sIFwiJDFcIik7XG4gICAgICAgIGNvbnN0IGFsaWFzZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgYWxpYXNlcy5hZGQoc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbi5yZXBsYWNlKFwiL1wiLCBcIi1cIikpO1xuICAgICAgICBhbGlhc2VzLmFkZChzZXJ2aWNlTmFtZVdpdGhvdXRWZXJzaW9uLnJlcGxhY2UoXCIvXCIsIFwiX19cIikpO1xuICAgICAgICBpZiAoc2VydmljZUFsaWFzKSB7XG4gICAgICAgICAgICBhbGlhc2VzLmFkZChzZXJ2aWNlQWxpYXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yKGNvbnN0IGFsaWFzIG9mIGFsaWFzZXMpIHtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS1uZXR3b3JrLWFsaWFzPSR7YWxpYXN9IGA7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmV4cGFuZGVkVmFyaWFibGVzKSkge1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtZSAke2tleX09JyR7U3RyaW5nKHZhbHVlKS50cmltKCl9JyBgO1xuICAgICAgICB9XG5cbiAgICAgICAgKHNlcnZpY2UuZ2V0RW50cnlwb2ludCgpID8/IFtdKS5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tZW50cnlwb2ludCBcIiR7ZX1cIiBgO1xuICAgICAgICB9KTtcblxuICAgICAgICBkb2NrZXJDbWQgKz0gYCR7c2VydmljZU5hbWV9IGA7XG5cbiAgICAgICAgKHNlcnZpY2UuZ2V0Q29tbWFuZCgpID8/IFtdKS5mb3JFYWNoKChlKSA9PiBkb2NrZXJDbWQgKz0gYFwiJHtlfVwiIGApO1xuXG4gICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICBjb25zdCB7c3Rkb3V0OiBjb250YWluZXJJZH0gPSBhd2FpdCBVdGlscy5zcGF3bihkb2NrZXJDbWQsIHRoaXMuY3dkKTtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyc1RvQ2xlYW4ucHVzaChjb250YWluZXJJZC5yZXBsYWNlKC9cXHI/XFxuL2csIFwiXCIpKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcbiAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBzdGFydGVkIHNlcnZpY2UgaW1hZ2U6ICR7c2VydmljZU5hbWV9IHdpdGggYWxpYXNlczogJHtBcnJheS5mcm9tKGFsaWFzZXMpLmpvaW4oXCIsIFwiKX19IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lcklkLnJlcGxhY2UoL1xccj9cXG4vZywgXCJcIik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzZXJ2aWNlSGVhbHRoQ2hlY2sod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIHNlcnZpY2U6IFNlcnZpY2UsIGNvbnRhaW5lcklkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZG9ja2VySW5zcGVjdENtZCA9IGBkb2NrZXIgaW1hZ2UgaW5zcGVjdCAke3NlcnZpY2UuZ2V0TmFtZSh0aGlzLmV4cGFuZGVkVmFyaWFibGVzKX1gO1xuICAgICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IFV0aWxzLnNwYXduKGRvY2tlckluc3BlY3RDbWQsIHRoaXMuY3dkKTtcbiAgICAgICAgY29uc3QgaW1hZ2VJbnNwZWN0ID0gSlNPTi5wYXJzZShzdGRvdXQpO1xuXG4gICAgICAgIC8vIENvcGllZCBmcm9tIHRoZSBzdGFydFNlcnZpY2UgYmxvY2suIEltcG9ydGFudCB0aGluZyBpcyB0aGF0IHRoZSBhbGlhc2VzIG1hdGNoXG4gICAgICAgIGNvbnN0IHNlcnZpY2VBbGlhcyA9IHNlcnZpY2UuZ2V0QWxpYXModGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gc2VydmljZS5nZXROYW1lKHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZVdpdGhvdXRWZXJzaW9uID0gc2VydmljZU5hbWUucmVwbGFjZSgvKC4qKSg6LiopLywgXCIkMVwiKTtcbiAgICAgICAgY29uc3QgYWxpYXNlcyA9IFtzZXJ2aWNlTmFtZVdpdGhvdXRWZXJzaW9uLnJlcGxhY2UoXCIvXCIsIFwiLVwiKSwgc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbi5yZXBsYWNlKFwiL1wiLCBcIl9fXCIpXTtcbiAgICAgICAgaWYgKHNlcnZpY2VBbGlhcykge1xuICAgICAgICAgICAgYWxpYXNlcy5wdXNoKHNlcnZpY2VBbGlhcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKGltYWdlSW5zcGVjdFswXT8uQ29udGFpbmVyQ29uZmlnPy5FeHBvc2VkUG9ydHMgPz8gbnVsbCkgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge3llbGxvdyBDb3VsZCBub3QgZmluZCBleHBvc2VkIHRjcCBwb3J0cyAke3NlcnZpY2UuZ2V0TmFtZSh0aGlzLmV4cGFuZGVkVmFyaWFibGVzKX19XFxuYCk7XG4gICAgICAgICAgICBjb25zdCB7b3V0cHV0fSA9IGF3YWl0IFV0aWxzLnNwYXduKGBkb2NrZXIgbG9ncyAke2NvbnRhaW5lcklkfWApO1xuICAgICAgICAgICAgb3V0cHV0LnNwbGl0KC9cXHI/XFxuL2cpLnNsaWNlKDAsIC0xKS5mb3JFYWNoKGxpbmUgPT4gd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7Y3lhbiA+fSAke2xpbmV9XFxuYCkpO1xuICAgICAgICAgICAgcmV0dXJuIDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBvcnQgZGVmaW5lZCBpbiB0aGUgaW1hZ2UsIGFuZCB0cnkgdG8gY29ubmVjdCB0byB0aGUgYWxpYXNcbiAgICAgICAgZm9yKGNvbnN0IHBvcnQgb2YgT2JqZWN0LmtleXMoaW1hZ2VJbnNwZWN0WzBdLkNvbnRhaW5lckNvbmZpZy5FeHBvc2VkUG9ydHMpKSB7XG4gICAgICAgICAgICBpZihwb3J0LmVuZHNXaXRoKFwiL3RjcFwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvcnROdW0gPSBwYXJzZUludChwb3J0LnJlcGxhY2UoXCIvdGNwXCIsIFwiXCIpKTtcblxuICAgICAgICAgICAgICAgIGxldCBkb2NrZXJDbWQgPSBgZG9ja2VyIHJ1biAtZCAtLW5ldHdvcmsgZ2l0bGFiLWNpLWxvY2FsLSR7dGhpcy5qb2JJZH0gYDtcblxuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgIHdpbGx3aWxsL3dhaXQtZm9yLWl0IFwiJHthbGlhc2VzWzBdfToke3BvcnROdW19XCIgLXQgMzBgO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHtzdGF0dXM6IHJlc3VsdCwgc3Rkb3V0fSA9IGF3YWl0IFV0aWxzLnNwYXduKGRvY2tlckNtZCwgdGhpcy5jd2QpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lcnNUb0NsZWFuLnB1c2goc3Rkb3V0LnJlcGxhY2UoL1xccj9cXG4vZywgXCJcIikpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcbiAgICAgICAgICAgICAgICBpZihyZXN1bHQgPT0gMCl7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge2dyZWVuQnJpZ2h0IHNlcnZpY2UgaW1hZ2U6ICR7c2VydmljZU5hbWV9IGhlYWx0aGNoZWNrIHBhc3NlZDogJHthbGlhc2VzWzBdfToke3BvcnROdW19fSBpbiB7Z3JlZW4gJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHtyZWRCcmlnaHQgc2VydmljZSBpbWFnZTogJHtzZXJ2aWNlTmFtZX0gaGVhbHRoY2hlY2sgZmFpbGVkOiAke2FsaWFzZXNbMF19OiR7cG9ydE51bX19IGluIHtyZWQgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
package/src/parser-includes.js
CHANGED
|
@@ -105,10 +105,18 @@ class ParserIncludes {
|
|
|
105
105
|
include = [i];
|
|
106
106
|
}
|
|
107
107
|
if (typeof include === "string") {
|
|
108
|
-
include = [
|
|
108
|
+
include = [include];
|
|
109
109
|
}
|
|
110
110
|
for (const [index, entry] of Object.entries(include)) {
|
|
111
|
-
|
|
111
|
+
if (typeof entry === "string" && (entry.startsWith("https:") || entry.startsWith("http:"))) {
|
|
112
|
+
include[index] = { "remote": entry };
|
|
113
|
+
}
|
|
114
|
+
else if (typeof entry === "string") {
|
|
115
|
+
include[index] = { "local": entry };
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
include[index] = entry;
|
|
119
|
+
}
|
|
112
120
|
}
|
|
113
121
|
return include;
|
|
114
122
|
}
|
|
@@ -149,4 +157,4 @@ class ParserIncludes {
|
|
|
149
157
|
}
|
|
150
158
|
}
|
|
151
159
|
exports.ParserIncludes = ParserIncludes;
|
|
152
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLWluY2x1ZGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGFyc2VyLWluY2x1ZGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBOEI7QUFDOUIsbURBQTZDO0FBQzdDLDZDQUErQjtBQUcvQix1Q0FBaUM7QUFDakMsa0RBQTBCO0FBQzFCLHFDQUFnQztBQUNoQyxrREFBMEI7QUFFMUIsTUFBYSxjQUFjO0lBRXZCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQWUsRUFBRSxHQUFXLEVBQUUsWUFBMEIsRUFBRSxPQUFnQixFQUFFLEtBQWEsRUFBRSxhQUFzQjtRQUMvSCxJQUFJLFlBQVksR0FBVSxFQUFFLENBQUM7UUFDN0IsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBRXBCLElBQUEsZ0JBQU0sRUFBQyxLQUFLLEdBQUcsR0FBRyxFQUFFLElBQUEsZUFBSyxFQUFBLDZDQUE2QyxDQUFDLENBQUM7UUFDeEUsS0FBSyxFQUFFLENBQUM7UUFFUixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRTFELHlFQUF5RTtRQUN6RSxLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRTtZQUN6QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDaEIsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUNiLE1BQU0sSUFBSSxzQkFBUyxDQUFDLHNDQUFzQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUMvRTthQUNKO2lCQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUN0QixLQUFLLE1B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QyxhQUFhO2dCQUFFLE9BQU87WUFDeEYsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDcEMsTUFBTSxhQUFLLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksT0FBTyxRQUFRLEdBQUcsSUFBSSxjQUFjLG1CQUFtQixNQUFNLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUMzSjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1IsTUFBTSxJQUFJLHNCQUFTLENBQUMsbURBQW1ELE9BQU8sVUFBVSxHQUFHLFdBQVcsY0FBYyxJQUFJLENBQUMsQ0FBQztTQUM3SDtJQUNMLENBQUM7Q0FDSjtBQXRIRCx3Q0FzSEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1V0aWxzfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHtFeGl0RXJyb3J9IGZyb20gXCIuL3R5cGVzL2V4aXQtZXJyb3JcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0IHtXcml0ZVN0cmVhbXN9IGZyb20gXCIuL3R5cGVzL3dyaXRlLXN0cmVhbXNcIjtcbmltcG9ydCB7R2l0RGF0YX0gZnJvbSBcIi4vZ2l0LWRhdGFcIjtcbmltcG9ydCB7YXNzZXJ0fSBmcm9tIFwiLi9hc3NlcnRzXCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQge1BhcnNlcn0gZnJvbSBcIi4vcGFyc2VyXCI7XG5pbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XG5cbmV4cG9ydCBjbGFzcyBQYXJzZXJJbmNsdWRlcyB7XG5cbiAgICBzdGF0aWMgYXN5bmMgaW5pdChnaXRsYWJEYXRhOiBhbnksIGN3ZDogc3RyaW5nLCB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgZ2l0RGF0YTogR2l0RGF0YSwgZGVwdGg6IG51bWJlciwgZmV0Y2hJbmNsdWRlczogYm9vbGVhbik6IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgbGV0IGluY2x1ZGVEYXRhczogYW55W10gPSBbXTtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcblxuICAgICAgICBhc3NlcnQoZGVwdGggPCAxMDAsIGNoYWxrYGNpcmN1bGFyIGRlcGVuZGVuY3kgZGV0ZWN0ZWQgaW4gXFxgaW5jbHVkZVxcYGApO1xuICAgICAgICBkZXB0aCsrO1xuXG4gICAgICAgIGNvbnN0IGluY2x1ZGUgPSB0aGlzLmV4cGFuZEluY2x1ZGUoZ2l0bGFiRGF0YVtcImluY2x1ZGVcIl0pO1xuXG4gICAgICAgIC8vIEZpbmQgZmlsZXMgdG8gZmV0Y2ggZnJvbSByZW1vdGUgYW5kIHBsYWNlIGluIC5naXRsYWItY2ktbG9jYWwvaW5jbHVkZXNcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBpbmNsdWRlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWVbXCJsb2NhbFwiXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVFeGlzdHMgPSBmcy5leGlzdHNTeW5jKGAke2N3ZH0vJHt2YWx1ZVtcImxvY2FsXCJdfWApO1xuICAgICAgICAgICAgICAgIGlmICghZmlsZUV4aXN0cykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhpdEVycm9yKGBMb2NhbCBpbmNsdWRlIGZpbGUgY2Fubm90IGJlIGZvdW5kICR7dmFsdWVbXCJsb2NhbFwiXX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW1wiZmlsZVwiXSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmlsZVZhbHVlIG9mIEFycmF5LmlzQXJyYXkodmFsdWVbXCJmaWxlXCJdKSA/IHZhbHVlW1wiZmlsZVwiXSA6IFt2YWx1ZVtcImZpbGVcIl1dKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5kb3dubG9hZEluY2x1ZGVQcm9qZWN0RmlsZShjd2QsIHZhbHVlW1wicHJvamVjdFwiXSwgdmFsdWVbXCJyZWZcIl0gfHwgXCJtYXN0ZXJcIiwgZmlsZVZhbHVlLCBnaXREYXRhLCBmZXRjaEluY2x1ZGVzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVtcInRlbXBsYXRlXCJdKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qge3Byb2plY3QsIHJlZiwgZmlsZSwgZG9tYWlufSA9IHRoaXMuY292ZXJ0VGVtcGxhdGVUb1Byb2plY3RGaWxlKHZhbHVlW1widGVtcGxhdGVcIl0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IGBodHRwczovLyR7ZG9tYWlufS8ke3Byb2plY3R9Ly0vcmF3LyR7cmVmfS8ke2ZpbGV9YDtcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuZG93bmxvYWRJbmNsdWRlUmVtb3RlKGN3ZCwgdXJsLCBmZXRjaEluY2x1ZGVzKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW1wicmVtb3RlXCJdKSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLmRvd25sb2FkSW5jbHVkZVJlbW90ZShjd2QsIHZhbHVlW1wicmVtb3RlXCJdLCBmZXRjaEluY2x1ZGVzKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGluY2x1ZGUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZVtcImxvY2FsXCJdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9jYWxEb2MgPSBhd2FpdCBQYXJzZXIubG9hZFlhbWwoYCR7Y3dkfS8ke3ZhbHVlLmxvY2FsfWApO1xuICAgICAgICAgICAgICAgIGluY2x1ZGVEYXRhcyA9IGluY2x1ZGVEYXRhcy5jb25jYXQoYXdhaXQgdGhpcy5pbml0KGxvY2FsRG9jLCBjd2QsIHdyaXRlU3RyZWFtcywgZ2l0RGF0YSwgZGVwdGgsIGZldGNoSW5jbHVkZXMpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJwcm9qZWN0XCJdKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWxlVmFsdWUgb2YgQXJyYXkuaXNBcnJheSh2YWx1ZVtcImZpbGVcIl0pID8gdmFsdWVbXCJmaWxlXCJdIDogW3ZhbHVlW1wiZmlsZVwiXV0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZURvYyA9IGF3YWl0IFBhcnNlci5sb2FkWWFtbChgJHtjd2R9Ly5naXRsYWItY2ktbG9jYWwvaW5jbHVkZXMvJHtnaXREYXRhLnJlbW90ZS5ob3N0fS8ke3ZhbHVlW1wicHJvamVjdFwiXX0vJHt2YWx1ZVtcInJlZlwiXSB8fCBcIm1hc3RlclwifS8ke2ZpbGVWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRXhwYW5kIGxvY2FsIGluY2x1ZGVzIGluc2lkZSBhIFwicHJvamVjdFwiLWxpa2UgaW5jbHVkZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEluY2x1ZGUoZmlsZURvY1tcImluY2x1ZGVcIl0pLmZvckVhY2goKGlubmVyOiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbm5lcltcImxvY2FsXCJdKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlRG9jW1wiaW5jbHVkZVwiXVtpXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0OiB2YWx1ZVtcInByb2plY3RcIl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTogaW5uZXJbXCJsb2NhbFwiXS5yZXBsYWNlKC9eXFwvLywgXCJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmOiB2YWx1ZVtcInJlZlwiXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGVEYXRhcyA9IGluY2x1ZGVEYXRhcy5jb25jYXQoYXdhaXQgdGhpcy5pbml0KGZpbGVEb2MsIGN3ZCwgd3JpdGVTdHJlYW1zLCBnaXREYXRhLCBkZXB0aCwgZmV0Y2hJbmNsdWRlcykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJ0ZW1wbGF0ZVwiXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHtwcm9qZWN0LCByZWYsIGZpbGUsIGRvbWFpbn0gPSB0aGlzLmNvdmVydFRlbXBsYXRlVG9Qcm9qZWN0RmlsZSh2YWx1ZVtcInRlbXBsYXRlXCJdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmc1VybCA9IFV0aWxzLmZzVXJsKGBodHRwczovLyR7ZG9tYWlufS8ke3Byb2plY3R9Ly0vcmF3LyR7cmVmfS8ke2ZpbGV9YCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZURvYyA9IGF3YWl0IFBhcnNlci5sb2FkWWFtbChgJHtjd2R9Ly5naXRsYWItY2ktbG9jYWwvaW5jbHVkZXMvJHtmc1VybH1gKTtcbiAgICAgICAgICAgICAgICBpbmNsdWRlRGF0YXMgPSBpbmNsdWRlRGF0YXMuY29uY2F0KGF3YWl0IHRoaXMuaW5pdChmaWxlRG9jLCBjd2QsIHdyaXRlU3RyZWFtcywgZ2l0RGF0YSwgZGVwdGgsIGZldGNoSW5jbHVkZXMpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJyZW1vdGVcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmc1VybCA9IFV0aWxzLmZzVXJsKHZhbHVlW1wicmVtb3RlXCJdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlRG9jID0gYXdhaXQgUGFyc2VyLmxvYWRZYW1sKGAke2N3ZH0vLmdpdGxhYi1jaS1sb2NhbC9pbmNsdWRlcy8ke2ZzVXJsfWApO1xuICAgICAgICAgICAgICAgIGluY2x1ZGVEYXRhcyA9IGluY2x1ZGVEYXRhcy5jb25jYXQoYXdhaXQgdGhpcy5pbml0KGZpbGVEb2MsIGN3ZCwgd3JpdGVTdHJlYW1zLCBnaXREYXRhLCBkZXB0aCwgZmV0Y2hJbmNsdWRlcykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhpdEVycm9yKGBEaWRuJ3QgdW5kZXJzdGFuZCBpbmNsdWRlICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW5jbHVkZURhdGFzLnB1c2goZ2l0bGFiRGF0YSk7XG4gICAgICAgIHJldHVybiBpbmNsdWRlRGF0YXM7XG4gICAgfVxuXG4gICAgc3RhdGljIGV4cGFuZEluY2x1ZGUoaTogYW55KTogYW55W10ge1xuICAgICAgICBsZXQgaW5jbHVkZSA9IGkgfHwgW107XG4gICAgICAgIGlmIChpbmNsdWRlICYmIGluY2x1ZGUubGVuZ3RoID09IG51bGwpIHtcbiAgICAgICAgICAgIGluY2x1ZGUgPSBbIGkgXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGluY2x1ZGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGluY2x1ZGUgPSBbe1wibG9jYWxcIjogaW5jbHVkZX1dO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW2luZGV4LCBlbnRyeV0gb2YgT2JqZWN0LmVudHJpZXMoaW5jbHVkZSkpIHtcbiAgICAgICAgICAgIGluY2x1ZGVbaW5kZXhdID0gdHlwZW9mIGVudHJ5ID09PSBcInN0cmluZ1wiID8ge1wibG9jYWxcIjogZW50cnkgfSA6IGVudHJ5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmNsdWRlO1xuICAgIH1cblxuICAgIHN0YXRpYyBjb3ZlcnRUZW1wbGF0ZVRvUHJvamVjdEZpbGUodGVtcGxhdGU6IHN0cmluZyk6IHsgcHJvamVjdDogc3RyaW5nOyByZWY6IHN0cmluZzsgZmlsZTogc3RyaW5nOyBkb21haW46IHN0cmluZyB9IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRvbWFpbjogXCJnaXRsYWIuY29tXCIsXG4gICAgICAgICAgICBwcm9qZWN0OiBcImdpdGxhYi1vcmcvZ2l0bGFiXCIsXG4gICAgICAgICAgICByZWY6IFwibWFzdGVyXCIsXG4gICAgICAgICAgICBmaWxlOiBgbGliL2dpdGxhYi9jaS90ZW1wbGF0ZXMvJHt0ZW1wbGF0ZX1gLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBkb3dubG9hZEluY2x1ZGVSZW1vdGUoY3dkOiBzdHJpbmcsIHVybDogc3RyaW5nLCBmZXRjaEluY2x1ZGVzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGZzVXJsID0gVXRpbHMuZnNVcmwodXJsKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGAke2N3ZH0vLmdpdGxhYi1jaS1sb2NhbC9pbmNsdWRlcy8ke2ZzVXJsfWA7XG4gICAgICAgICAgICBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyh0YXJnZXQpICYmICFmZXRjaEluY2x1ZGVzKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBheGlvcy5nZXQodXJsKTtcbiAgICAgICAgICAgIGF3YWl0IGZzLm91dHB1dEZpbGUodGFyZ2V0LCByZXMuZGF0YSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGl0RXJyb3IoYFJlbW90ZSBpbmNsdWRlIGNvdWxkIG5vdCBiZSBmZXRjaGVkICR7dXJsfSAke2V9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgZG93bmxvYWRJbmNsdWRlUHJvamVjdEZpbGUoY3dkOiBzdHJpbmcsIHByb2plY3Q6IHN0cmluZywgcmVmOiBzdHJpbmcsIGZpbGU6IHN0cmluZywgZ2l0RGF0YTogR2l0RGF0YSwgZmV0Y2hJbmNsdWRlczogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCByZW1vdGUgPSBnaXREYXRhLnJlbW90ZTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEZpbGUgPSBmaWxlLnJlcGxhY2UoL15cXC8rLywgXCJcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBgLmdpdGxhYi1jaS1sb2NhbC9pbmNsdWRlcy8ke3JlbW90ZS5ob3N0fS8ke3Byb2plY3R9LyR7cmVmfS9gO1xuICAgICAgICAgICAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHMoYCR7Y3dkfS8ke3RhcmdldH0vJHtub3JtYWxpemVkRmlsZX1gKSAmJiAhZmV0Y2hJbmNsdWRlcykgcmV0dXJuO1xuICAgICAgICAgICAgYXdhaXQgZnMubWtkaXJwKGAke2N3ZH0vJHt0YXJnZXR9YCk7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgZ2l0IGFyY2hpdmUgLS1yZW1vdGU9c3NoOi8vZ2l0QCR7cmVtb3RlLmhvc3R9OiR7cmVtb3RlLnBvcnR9LyR7cHJvamVjdH0uZ2l0ICR7cmVmfSAke25vcm1hbGl6ZWRGaWxlfSB8IHRhciAtZiAtIC14QyAke3RhcmdldH1gLCBjd2QpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhpdEVycm9yKGBQcm9qZWN0IGluY2x1ZGUgY291bGQgbm90IGJlIGZldGNoZWQgeyBwcm9qZWN0OiAke3Byb2plY3R9LCByZWY6ICR7cmVmfSwgZmlsZTogJHtub3JtYWxpemVkRmlsZX0gfWApO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLWluY2x1ZGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGFyc2VyLWluY2x1ZGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBOEI7QUFDOUIsbURBQTZDO0FBQzdDLDZDQUErQjtBQUcvQix1Q0FBaUM7QUFDakMsa0RBQTBCO0FBQzFCLHFDQUFnQztBQUNoQyxrREFBMEI7QUFFMUIsTUFBYSxjQUFjO0lBRXZCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQWUsRUFBRSxHQUFXLEVBQUUsWUFBMEIsRUFBRSxPQUFnQixFQUFFLEtBQWEsRUFBRSxhQUFzQjtRQUMvSCxJQUFJLFlBQVksR0FBVSxFQUFFLENBQUM7UUFDN0IsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBRXBCLElBQUEsZ0JBQU0sRUFBQyxLQUFLLEdBQUcsR0FBRyxFQUFFLElBQUEsZUFBSyxFQUFBLDZDQUE2QyxDQUFDLENBQUM7UUFDeEUsS0FBSyxFQUFFLENBQUM7UUFFUixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRTFELHlFQUF5RTtRQUN6RSxLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRTtZQUN6QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDaEIsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUNiLE1BQU0sSUFBSSxzQkFBUyxDQUFDLHNDQUFzQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUMvRTthQUNKO2lCQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUN0QixLQUFLLE1B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QyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELElBQUk7WUFDQSxNQUFNLE1BQU0sR0FBRyw2QkFBNkIsTUFBTSxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksR0FBRyxHQUFHLENBQUM7WUFDN0UsSUFBSSxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLElBQUksTUFBTSxJQUFJLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhO2dCQUFFLE9BQU87WUFDeEYsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDcEMsTUFBTSxhQUFLLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksT0FBTyxRQUFRLEdBQUcsSUFBSSxjQUFjLG1CQUFtQixNQUFNLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUMzSjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1IsTUFBTSxJQUFJLHNCQUFTLENBQUMsbURBQW1ELE9BQU8sVUFBVSxHQUFHLFdBQVcsY0FBYyxJQUFJLENBQUMsQ0FBQztTQUM3SDtJQUNMLENBQUM7Q0FDSjtBQTdIRCx3Q0E2SEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1V0aWxzfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHtFeGl0RXJyb3J9IGZyb20gXCIuL3R5cGVzL2V4aXQtZXJyb3JcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0IHtXcml0ZVN0cmVhbXN9IGZyb20gXCIuL3R5cGVzL3dyaXRlLXN0cmVhbXNcIjtcbmltcG9ydCB7R2l0RGF0YX0gZnJvbSBcIi4vZ2l0LWRhdGFcIjtcbmltcG9ydCB7YXNzZXJ0fSBmcm9tIFwiLi9hc3NlcnRzXCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQge1BhcnNlcn0gZnJvbSBcIi4vcGFyc2VyXCI7XG5pbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XG5cbmV4cG9ydCBjbGFzcyBQYXJzZXJJbmNsdWRlcyB7XG5cbiAgICBzdGF0aWMgYXN5bmMgaW5pdChnaXRsYWJEYXRhOiBhbnksIGN3ZDogc3RyaW5nLCB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgZ2l0RGF0YTogR2l0RGF0YSwgZGVwdGg6IG51bWJlciwgZmV0Y2hJbmNsdWRlczogYm9vbGVhbik6IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgbGV0IGluY2x1ZGVEYXRhczogYW55W10gPSBbXTtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcblxuICAgICAgICBhc3NlcnQoZGVwdGggPCAxMDAsIGNoYWxrYGNpcmN1bGFyIGRlcGVuZGVuY3kgZGV0ZWN0ZWQgaW4gXFxgaW5jbHVkZVxcYGApO1xuICAgICAgICBkZXB0aCsrO1xuXG4gICAgICAgIGNvbnN0IGluY2x1ZGUgPSB0aGlzLmV4cGFuZEluY2x1ZGUoZ2l0bGFiRGF0YVtcImluY2x1ZGVcIl0pO1xuXG4gICAgICAgIC8vIEZpbmQgZmlsZXMgdG8gZmV0Y2ggZnJvbSByZW1vdGUgYW5kIHBsYWNlIGluIC5naXRsYWItY2ktbG9jYWwvaW5jbHVkZXNcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBpbmNsdWRlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWVbXCJsb2NhbFwiXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVFeGlzdHMgPSBmcy5leGlzdHNTeW5jKGAke2N3ZH0vJHt2YWx1ZVtcImxvY2FsXCJdfWApO1xuICAgICAgICAgICAgICAgIGlmICghZmlsZUV4aXN0cykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhpdEVycm9yKGBMb2NhbCBpbmNsdWRlIGZpbGUgY2Fubm90IGJlIGZvdW5kICR7dmFsdWVbXCJsb2NhbFwiXX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW1wiZmlsZVwiXSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmlsZVZhbHVlIG9mIEFycmF5LmlzQXJyYXkodmFsdWVbXCJmaWxlXCJdKSA/IHZhbHVlW1wiZmlsZVwiXSA6IFt2YWx1ZVtcImZpbGVcIl1dKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5kb3dubG9hZEluY2x1ZGVQcm9qZWN0RmlsZShjd2QsIHZhbHVlW1wicHJvamVjdFwiXSwgdmFsdWVbXCJyZWZcIl0gfHwgXCJtYXN0ZXJcIiwgZmlsZVZhbHVlLCBnaXREYXRhLCBmZXRjaEluY2x1ZGVzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVtcInRlbXBsYXRlXCJdKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qge3Byb2plY3QsIHJlZiwgZmlsZSwgZG9tYWlufSA9IHRoaXMuY292ZXJ0VGVtcGxhdGVUb1Byb2plY3RGaWxlKHZhbHVlW1widGVtcGxhdGVcIl0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IGBodHRwczovLyR7ZG9tYWlufS8ke3Byb2plY3R9Ly0vcmF3LyR7cmVmfS8ke2ZpbGV9YDtcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuZG93bmxvYWRJbmNsdWRlUmVtb3RlKGN3ZCwgdXJsLCBmZXRjaEluY2x1ZGVzKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW1wicmVtb3RlXCJdKSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLmRvd25sb2FkSW5jbHVkZVJlbW90ZShjd2QsIHZhbHVlW1wicmVtb3RlXCJdLCBmZXRjaEluY2x1ZGVzKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGluY2x1ZGUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZVtcImxvY2FsXCJdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9jYWxEb2MgPSBhd2FpdCBQYXJzZXIubG9hZFlhbWwoYCR7Y3dkfS8ke3ZhbHVlLmxvY2FsfWApO1xuICAgICAgICAgICAgICAgIGluY2x1ZGVEYXRhcyA9IGluY2x1ZGVEYXRhcy5jb25jYXQoYXdhaXQgdGhpcy5pbml0KGxvY2FsRG9jLCBjd2QsIHdyaXRlU3RyZWFtcywgZ2l0RGF0YSwgZGVwdGgsIGZldGNoSW5jbHVkZXMpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJwcm9qZWN0XCJdKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWxlVmFsdWUgb2YgQXJyYXkuaXNBcnJheSh2YWx1ZVtcImZpbGVcIl0pID8gdmFsdWVbXCJmaWxlXCJdIDogW3ZhbHVlW1wiZmlsZVwiXV0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZURvYyA9IGF3YWl0IFBhcnNlci5sb2FkWWFtbChgJHtjd2R9Ly5naXRsYWItY2ktbG9jYWwvaW5jbHVkZXMvJHtnaXREYXRhLnJlbW90ZS5ob3N0fS8ke3ZhbHVlW1wicHJvamVjdFwiXX0vJHt2YWx1ZVtcInJlZlwiXSB8fCBcIm1hc3RlclwifS8ke2ZpbGVWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRXhwYW5kIGxvY2FsIGluY2x1ZGVzIGluc2lkZSBhIFwicHJvamVjdFwiLWxpa2UgaW5jbHVkZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEluY2x1ZGUoZmlsZURvY1tcImluY2x1ZGVcIl0pLmZvckVhY2goKGlubmVyOiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbm5lcltcImxvY2FsXCJdKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlRG9jW1wiaW5jbHVkZVwiXVtpXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0OiB2YWx1ZVtcInByb2plY3RcIl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTogaW5uZXJbXCJsb2NhbFwiXS5yZXBsYWNlKC9eXFwvLywgXCJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmOiB2YWx1ZVtcInJlZlwiXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGVEYXRhcyA9IGluY2x1ZGVEYXRhcy5jb25jYXQoYXdhaXQgdGhpcy5pbml0KGZpbGVEb2MsIGN3ZCwgd3JpdGVTdHJlYW1zLCBnaXREYXRhLCBkZXB0aCwgZmV0Y2hJbmNsdWRlcykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJ0ZW1wbGF0ZVwiXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHtwcm9qZWN0LCByZWYsIGZpbGUsIGRvbWFpbn0gPSB0aGlzLmNvdmVydFRlbXBsYXRlVG9Qcm9qZWN0RmlsZSh2YWx1ZVtcInRlbXBsYXRlXCJdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmc1VybCA9IFV0aWxzLmZzVXJsKGBodHRwczovLyR7ZG9tYWlufS8ke3Byb2plY3R9Ly0vcmF3LyR7cmVmfS8ke2ZpbGV9YCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZURvYyA9IGF3YWl0IFBhcnNlci5sb2FkWWFtbChgJHtjd2R9Ly5naXRsYWItY2ktbG9jYWwvaW5jbHVkZXMvJHtmc1VybH1gKTtcbiAgICAgICAgICAgICAgICBpbmNsdWRlRGF0YXMgPSBpbmNsdWRlRGF0YXMuY29uY2F0KGF3YWl0IHRoaXMuaW5pdChmaWxlRG9jLCBjd2QsIHdyaXRlU3RyZWFtcywgZ2l0RGF0YSwgZGVwdGgsIGZldGNoSW5jbHVkZXMpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJyZW1vdGVcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmc1VybCA9IFV0aWxzLmZzVXJsKHZhbHVlW1wicmVtb3RlXCJdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlRG9jID0gYXdhaXQgUGFyc2VyLmxvYWRZYW1sKGAke2N3ZH0vLmdpdGxhYi1jaS1sb2NhbC9pbmNsdWRlcy8ke2ZzVXJsfWApO1xuICAgICAgICAgICAgICAgIGluY2x1ZGVEYXRhcyA9IGluY2x1ZGVEYXRhcy5jb25jYXQoYXdhaXQgdGhpcy5pbml0KGZpbGVEb2MsIGN3ZCwgd3JpdGVTdHJlYW1zLCBnaXREYXRhLCBkZXB0aCwgZmV0Y2hJbmNsdWRlcykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhpdEVycm9yKGBEaWRuJ3QgdW5kZXJzdGFuZCBpbmNsdWRlICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW5jbHVkZURhdGFzLnB1c2goZ2l0bGFiRGF0YSk7XG4gICAgICAgIHJldHVybiBpbmNsdWRlRGF0YXM7XG4gICAgfVxuXG4gICAgc3RhdGljIGV4cGFuZEluY2x1ZGUoaTogYW55KTogYW55W10ge1xuICAgICAgICBsZXQgaW5jbHVkZSA9IGkgfHwgW107XG4gICAgICAgIGlmIChpbmNsdWRlICYmIGluY2x1ZGUubGVuZ3RoID09IG51bGwpIHtcbiAgICAgICAgICAgIGluY2x1ZGUgPSBbIGkgXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGluY2x1ZGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGluY2x1ZGUgPSBbaW5jbHVkZV07XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIGVudHJ5XSBvZiBPYmplY3QuZW50cmllcyhpbmNsdWRlKSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIiAmJiAoZW50cnkuc3RhcnRzV2l0aChcImh0dHBzOlwiKSB8fCBlbnRyeS5zdGFydHNXaXRoKFwiaHR0cDpcIikpKSB7XG4gICAgICAgICAgICAgICAgaW5jbHVkZVtpbmRleF0gPSB7XCJyZW1vdGVcIjogZW50cnl9O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW50cnkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBpbmNsdWRlW2luZGV4XSA9IHtcImxvY2FsXCI6IGVudHJ5IH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGluY2x1ZGVbaW5kZXhdID0gZW50cnk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5jbHVkZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY292ZXJ0VGVtcGxhdGVUb1Byb2plY3RGaWxlKHRlbXBsYXRlOiBzdHJpbmcpOiB7IHByb2plY3Q6IHN0cmluZzsgcmVmOiBzdHJpbmc7IGZpbGU6IHN0cmluZzsgZG9tYWluOiBzdHJpbmcgfSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkb21haW46IFwiZ2l0bGFiLmNvbVwiLFxuICAgICAgICAgICAgcHJvamVjdDogXCJnaXRsYWItb3JnL2dpdGxhYlwiLFxuICAgICAgICAgICAgcmVmOiBcIm1hc3RlclwiLFxuICAgICAgICAgICAgZmlsZTogYGxpYi9naXRsYWIvY2kvdGVtcGxhdGVzLyR7dGVtcGxhdGV9YCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgZG93bmxvYWRJbmNsdWRlUmVtb3RlKGN3ZDogc3RyaW5nLCB1cmw6IHN0cmluZywgZmV0Y2hJbmNsdWRlczogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBmc1VybCA9IFV0aWxzLmZzVXJsKHVybCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBgJHtjd2R9Ly5naXRsYWItY2ktbG9jYWwvaW5jbHVkZXMvJHtmc1VybH1gO1xuICAgICAgICAgICAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHModGFyZ2V0KSAmJiAhZmV0Y2hJbmNsdWRlcykgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgYXhpb3MuZ2V0KHVybCk7XG4gICAgICAgICAgICBhd2FpdCBmcy5vdXRwdXRGaWxlKHRhcmdldCwgcmVzLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhpdEVycm9yKGBSZW1vdGUgaW5jbHVkZSBjb3VsZCBub3QgYmUgZmV0Y2hlZCAke3VybH0gJHtlfWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGRvd25sb2FkSW5jbHVkZVByb2plY3RGaWxlKGN3ZDogc3RyaW5nLCBwcm9qZWN0OiBzdHJpbmcsIHJlZjogc3RyaW5nLCBmaWxlOiBzdHJpbmcsIGdpdERhdGE6IEdpdERhdGEsIGZldGNoSW5jbHVkZXM6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcmVtb3RlID0gZ2l0RGF0YS5yZW1vdGU7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWxlID0gZmlsZS5yZXBsYWNlKC9eXFwvKy8sIFwiXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gYC5naXRsYWItY2ktbG9jYWwvaW5jbHVkZXMvJHtyZW1vdGUuaG9zdH0vJHtwcm9qZWN0fS8ke3JlZn0vYDtcbiAgICAgICAgICAgIGlmIChhd2FpdCBmcy5wYXRoRXhpc3RzKGAke2N3ZH0vJHt0YXJnZXR9LyR7bm9ybWFsaXplZEZpbGV9YCkgJiYgIWZldGNoSW5jbHVkZXMpIHJldHVybjtcbiAgICAgICAgICAgIGF3YWl0IGZzLm1rZGlycChgJHtjd2R9LyR7dGFyZ2V0fWApO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oYGdpdCBhcmNoaXZlIC0tcmVtb3RlPXNzaDovL2dpdEAke3JlbW90ZS5ob3N0fToke3JlbW90ZS5wb3J0fS8ke3Byb2plY3R9LmdpdCAke3JlZn0gJHtub3JtYWxpemVkRmlsZX0gfCB0YXIgLWYgLSAteEMgJHt0YXJnZXR9YCwgY3dkKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEV4aXRFcnJvcihgUHJvamVjdCBpbmNsdWRlIGNvdWxkIG5vdCBiZSBmZXRjaGVkIHsgcHJvamVjdDogJHtwcm9qZWN0fSwgcmVmOiAke3JlZn0sIGZpbGU6ICR7bm9ybWFsaXplZEZpbGV9IH1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
package/src/test.js
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const utils_1 = require("./utils");
|
|
4
|
-
console.log(utils_1.Utils.evaluateRuleIf("$CI_COMMIT_BRANCH =~ /master($|\\s)/", { CI_COMMIT_BRANCH: "master" }));
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxtQ0FBOEI7QUFFOUIsT0FBTyxDQUFDLEdBQUcsQ0FDUCxhQUFLLENBQUMsY0FBYyxDQUNoQixzQ0FBc0MsRUFDdEMsRUFBQyxnQkFBZ0IsRUFBRSxRQUFRLEVBQUMsQ0FDL0IsQ0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtVdGlsc30gZnJvbSBcIi4vdXRpbHNcIjtcblxuY29uc29sZS5sb2coXG4gICAgVXRpbHMuZXZhbHVhdGVSdWxlSWYoXG4gICAgICAgIFwiJENJX0NPTU1JVF9CUkFOQ0ggPX4gL21hc3RlcigkfFxcXFxzKS9cIixcbiAgICAgICAge0NJX0NPTU1JVF9CUkFOQ0g6IFwibWFzdGVyXCJ9XG4gICAgKVxuKTtcblxuIl19
|