@cdktn/cli-core 0.25.0-pre.2 → 0.25.0-pre.21
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/build/lib/cdktf-config.d.ts.map +1 -1
- package/build/lib/cdktf-config.js +18 -8
- package/build/lib/cdktf-project.d.ts.map +1 -1
- package/build/lib/cdktf-project.js +3 -3
- package/build/lib/cdktf-stack.d.ts.map +1 -1
- package/build/lib/cdktf-stack.js +1 -1
- package/build/lib/convert.js +19 -10
- package/build/lib/dependencies/dependency-manager.d.ts.map +1 -1
- package/build/lib/dependencies/dependency-manager.js +18 -8
- package/build/lib/dependencies/package-manager.js +18 -8
- package/build/lib/dependencies/prebuilt-providers.js +25 -16
- package/build/lib/dependencies/registry-api.js +19 -10
- package/build/lib/dependencies/version-constraints.js +20 -11
- package/build/lib/error-reporting.d.ts.map +1 -1
- package/build/lib/error-reporting.js +22 -13
- package/build/lib/errors.d.ts.map +1 -1
- package/build/lib/execution-logs.js +2 -3
- package/build/lib/get.js +21 -11
- package/build/lib/helpers/stack-helpers.js +8 -9
- package/build/lib/init.js +21 -11
- package/build/lib/installed-binary-check.js +19 -10
- package/build/lib/local-provider-constraints.js +18 -8
- package/build/lib/models/deploy-machine.d.ts +3 -3
- package/build/lib/models/deploy-machine.d.ts.map +1 -1
- package/build/lib/models/deploy-machine.js +10 -10
- package/build/lib/models/interactive-process.js +2 -3
- package/build/lib/models/schema.js +18 -8
- package/build/lib/models/terraform-cli.d.ts.map +1 -1
- package/build/lib/models/terraform-cli.js +21 -11
- package/build/lib/models/terraform.js +3 -3
- package/build/lib/output.d.ts.map +1 -1
- package/build/lib/output.js +21 -11
- package/build/lib/provider-add.js +2 -3
- package/build/lib/server/terraform-logs.js +2 -3
- package/build/lib/synth-stack.js +18 -8
- package/build/lib/synth.js +19 -10
- package/build/lib/terraform-json.js +18 -8
- package/build/lib/watch.d.ts.map +1 -1
- package/build/lib/watch.js +19 -10
- package/package.json +12 -12
- package/templates/java/build.gradle +4 -0
- package/templates/python/Pipfile +1 -1
- package/templates/typescript/.hooks.sscaff.js +13 -8
- package/templates/typescript/cdktf.json +1 -1
- package/templates/typescript/tsconfig.json +7 -0
|
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
15
15
|
}) : function(o, v) {
|
|
16
16
|
o["default"] = v;
|
|
17
17
|
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
25
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
37
|
};
|
|
@@ -681,4 +691,4 @@ class GoPackageManager extends PackageManager {
|
|
|
681
691
|
}
|
|
682
692
|
}
|
|
683
693
|
}
|
|
684
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kZXBlbmRlbmNpZXMvcGFja2FnZS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyw0Q0FRd0I7QUFDeEIsdUNBQXNDO0FBQ3RDLGdEQUF3QjtBQUN4QixtQ0FBaUQ7QUFDakQsNkNBQStCO0FBQy9CLCtDQUFpQztBQUNqQyxtQ0FBa0U7QUFDbEUsdUNBQXlCO0FBRXpCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO0FBQy9ELE1BQU0sVUFBVSxHQUEyQixLQUFLO0lBQzlDLENBQUMsQ0FBQyxJQUFJLG1CQUFVLENBQUMsS0FBSyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFFZDs7O0dBR0c7QUFDSCxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQztBQUVsQyx5RUFBeUU7QUFDekUsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7QUFFdEM7O0dBRUc7QUFDSCxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztBQUVqQzs7R0FFRztBQUNILE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDO0FBRW5DOztHQUVHO0FBQ0gsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLENBQUM7QUFFbEM7O0dBRUc7QUFDSCxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUM7QUFFM0I7Ozs7OztHQU1HO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxNQUFjO0lBQ3ZDLE9BQU8sQ0FDTCxNQUFNLEtBQUssb0JBQW9CO1FBQy9CLE1BQU0sS0FBSyxzQkFBc0I7UUFDakMsTUFBTSxJQUFJLHFCQUFxQixDQUNoQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7OztHQUtHO0FB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TUFBTSxnQkFBTSxDQUFDLFFBQVEsQ0FDbkIseUZBQXlGLElBQUksRUFBRSxDQUNoRyxDQUFDO2dCQUNKLENBQUM7Z0JBRUQsK0RBQStEO2dCQUMvRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUV2RCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUV2QyxJQUFJLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNuQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ25DLENBQUM7Z0JBRUQsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUUvQixPQUFPO29CQUNMLElBQUk7b0JBQ0osT0FBTztpQkFDUixDQUFDO1lBQ0osQ0FBQyxDQUFDO2lCQUNELE1BQU0sQ0FDTCxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQ2hFLENBQUM7UUFDTixDQUFDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksS0FBSyxDQUNiLDhEQUE4RCxDQUFDLENBQUMsT0FBTyxFQUFFLENBQzFFLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7XG4gIExhbmd1YWdlLFxuICBleGVjLFxuICBFcnJvcnMsXG4gIGxvZ2dlcixcbiAgaXNHcmFkbGVQcm9qZWN0LFxuICBnZXRHcmFkbGVEZXBlbmRlbmNpZXMsXG4gIGdldERlcGVuZGVuY3lJbmZvcm1hdGlvbkZyb21MaW5lLFxufSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyB4bWwyanMsIGpzMnhtbCwgRWxlbWVudCB9IGZyb20gXCJ4bWwtanNcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0ICogYXMgc2VtdmVyIGZyb20gXCJzZW12ZXJcIjtcbmltcG9ydCB7IGZldGNoLCBQcm94eUFnZW50LCBSZXF1ZXN0SW5pdCwgUmVzcG9uc2UgfSBmcm9tIFwidW5kaWNpXCI7XG5pbXBvcnQgKiBhcyB6IGZyb20gXCJ6b2RcIjtcblxuY29uc3QgcHJveHkgPSBwcm9jZXNzLmVudi5odHRwX3Byb3h5IHx8IHByb2Nlc3MuZW52LkhUVFBfUFJPWFk7XG5jb25zdCBkaXNwYXRjaGVyOiBQcm94eUFnZW50IHwgdW5kZWZpbmVkID0gcHJveHlcbiAgPyBuZXcgUHJveHlBZ2VudChwcm94eSlcbiAgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogTnVtYmVyIG9mIGF0dGVtcHRzIChpbml0aWFsIHRyeSArIHJldHJpZXMpIGZvciBhIHJlZ2lzdHJ5IHByb2JlIGJlZm9yZSB3ZSBnaXZlIHVwIGFuZCB0cmVhdCB0aGUgcmVnaXN0cnkgYXNcbiAqIHVucmVhY2hhYmxlLiBUcmFuc2llbnQgZmFpbHVyZXMgKG5ldHdvcmsgZXJyb3JzIC8gNDA4IC8gNDI5IC8gNXh4KSBhcmUgcmV0cmllZDsgZGVmaW5pdGl2ZSByZXNwb25zZXMgYXJlIG5vdC5cbiAqL1xuY29uc3QgUkVHSVNUUllfUFJPQkVfQVRURU1QVFMgPSAzO1xuXG4vKiogQmFzZSBiYWNrb2ZmIGJldHdlZW4gcmV0cmllcywgZG91YmxlZCBlYWNoIGF0dGVtcHQgKDI1MG1zLCA1MDBtcykuICovXG5jb25zdCBSRUdJU1RSWV9QUk9CRV9CQUNLT0ZGX01TID0gMjUwO1xuXG4vKipcbiAqIEhUVFAgNDA4IFJlcXVlc3QgVGltZW91dCDigJQgYSB0cmFuc2llbnQgc3RhdHVzIHdvcnRoIHJldHJ5aW5nLlxuICovXG5jb25zdCBIVFRQX1JFUVVFU1RfVElNRU9VVCA9IDQwODtcblxuLyoqXG4gKiBIVFRQIDQyOSBUb28gTWFueSBSZXF1ZXN0cyAocmF0ZSBsaW1pdCkg4oCUIGEgdHJhbnNpZW50IHN0YXR1cyB3b3J0aCByZXRyeWluZy5cbiAqL1xuY29uc3QgSFRUUF9UT09fTUFOWV9SRVFVRVNUUyA9IDQyOTtcblxuLyoqXG4gKiBMb3dlc3QgSFRUUCA1eHggc3RhdHVzIOKAlCBhbnkgc3RhdHVzIGF0IG9yIGFib3ZlIHRoaXMgaXMgYSBzZXJ2ZXIgZXJyb3IgYW5kIHRyZWF0ZWQgYXMgYSB0cmFuc2llbnQgc3RhdHVzIHdvcnRoIHJldHJ5aW5nLlxuICovXG5jb25zdCBIVFRQX1NFUlZFUl9FUlJPUl9NSU4gPSA1MDA7XG5cbi8qKlxuICogSFRUUCA0MDQgTm90IEZvdW5kIOKAlCBhIGRlZmluaXRpdmUgXCJ0aGUgdmVyc2lvbiBpcyBub3QgcHVibGlzaGVkXCIgYW5zd2VyIGZyb20gYSByZWdpc3RyeSAobm90IHRyYW5zaWVudCkuXG4gKi9cbmNvbnN0IEhUVFBfTk9UX0ZPVU5EID0gNDA0O1xuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciBhbiBIVFRQIHN0YXR1cyBpcyB0cmFuc2llbnQgYW5kIHRoZXJlZm9yZSB3b3J0aCByZXRyeWluZzogcmVxdWVzdCB0aW1lb3V0ICg0MDgpLCByYXRlIGxpbWl0ICg0MjkpLFxuICogb3IgYW55IHNlcnZlciBlcnJvciAoNXh4KS4gRGVmaW5pdGl2ZSBzdGF0dXNlcyAoMnh4LCA0MDQsIG90aGVyIDR4eCkgYXJlIG5vdCB0cmFuc2llbnQuXG4gKlxuICogQHBhcmFtIHN0YXR1cyAtIFRoZSBIVFRQIHN0YXR1cyBjb2RlIGZyb20gYSByZWdpc3RyeSByZXNwb25zZS5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgc3RhdHVzIGlzIHRyYW5zaWVudCBhbmQgdGhlIHJlcXVlc3Qgc2hvdWxkIGJlIHJldHJpZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBpc1RyYW5zaWVudFN0YXR1cyhzdGF0dXM6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHN0YXR1cyA9PT0gSFRUUF9SRVFVRVNUX1RJTUVPVVQgfHxcbiAgICBzdGF0dXMgPT09IEhUVFBfVE9PX01BTllfUkVRVUVTVFMgfHxcbiAgICBzdGF0dXMgPj0gSFRUUF9TRVJWRVJfRVJST1JfTUlOXG4gICk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYWZ0ZXIgYG1zYCBtaWxsaXNlY29uZHM7IHVzZWQgdG8gYmFjayBvZmYgYmV0d2VlbiByZWdpc3RyeS1wcm9iZSByZXRyaWVzLlxuICpcbiAqIEBwYXJhbSBtcyAtIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBkZWxheSBoYXMgZWxhcHNlZC5cbiAqL1xuZnVuY3Rpb24gZGVsYXkobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuLyoqXG4gKiBGZXRjaGVzIGB1cmxgLCByZXRyeWluZyBvbmx5IG9uIHRyYW5zaWVudCBmYWlsdXJlcyDigJQgbmV0d29yayBlcnJvcnMgYW5kIEhUVFAgNDA4LzQyOS81eHgg4oCUIHNvIGEgcmVnaXN0cnkgaGljY3VwIGlzXG4gKiBub3QgbWlzdGFrZW4gZm9yIGEgZGVmaW5pdGl2ZSBhbnN3ZXIuIERlZmluaXRpdmUgcmVzcG9uc2VzICgyeHgsIDQwNCwgb3RoZXIgNHh4KSBhcmUgcmV0dXJuZWQgaW1tZWRpYXRlbHkgd2l0aG91dFxuICogcmV0cnkuIElmIGV2ZXJ5IGF0dGVtcHQgZmFpbHMgdHJhbnNpZW50bHksIHRocm93cyBhbiBgRXh0ZXJuYWxgIGVycm9yIHNvIGNhbGxlcnMgY2FuIGRpc3Rpbmd1aXNoIFwicmVnaXN0cnlcbiAqIHVucmVhY2hhYmxlXCIgZnJvbSBcInZlcnNpb24gYWJzZW50XCIgcmF0aGVyIHRoYW4gc2lsZW50bHkgdHJlYXRpbmcgYSBoaWNjdXAgYXMgYWJzZW5jZS5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIHJlZ2lzdHJ5IFVSTCB0byBmZXRjaC5cbiAqIEBwYXJhbSBpbml0IC0gT3B0aW9uYWwgYGZldGNoYCByZXF1ZXN0IG9wdGlvbnMgKGUuZy4gaGVhZGVycyksIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZCBvbiBldmVyeSBhdHRlbXB0LlxuICogQHJldHVybnMgVGhlIGBSZXNwb25zZWAgZm9yIHRoZSBmaXJzdCBkZWZpbml0aXZlIChub24tdHJhbnNpZW50KSByZXN1bHQuXG4gKiBAdGhyb3dzIEFuIGBFeHRlcm5hbGAgZXJyb3IgaWYgZXZlcnkgYXR0ZW1wdCAodXAgdG8gYFJFR0lTVFJZX1BST0JFX0FUVEVNUFRTYCkgZmFpbHMgdHJhbnNpZW50bHkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZldGNoV2l0aFJldHJ5KFxuICB1cmw6IHN0cmluZyxcbiAgaW5pdD86IFJlcXVlc3RJbml0LFxuKTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICBsZXQgbGFzdEVycm9yOiB1bmtub3duO1xuXG4gIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IFJFR0lTVFJZX1BST0JFX0FUVEVNUFRTOyBhdHRlbXB0KyspIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHsgLi4uaW5pdCwgZGlzcGF0Y2hlciB9KTtcbiAgICAgIGlmICghaXNUcmFuc2llbnRTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICB9XG4gICAgICBsYXN0RXJyb3IgPSBuZXcgRXJyb3IoYHJlZ2lzdHJ5IHJlc3BvbmRlZCBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgVHJhbnNpZW50IEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9IGZyb20gJyR7dXJsfScgKGF0dGVtcHQgJHthdHRlbXB0fS8ke1JFR0lTVFJZX1BST0JFX0FUVEVNUFRTfSlgLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIC8vIGZldGNoIHJlamVjdHMgb24gbmV0d29yay1sZXZlbCBmYWlsdXJlcyAoRE5TLCBjb25uZWN0aW9uIHJlc2V0LCB0aW1lb3V0KSDigJQgYWx3YXlzIHRyYW5zaWVudC5cbiAgICAgIGxhc3RFcnJvciA9IGU7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBOZXR3b3JrIGVycm9yIGZldGNoaW5nICcke3VybH0nIChhdHRlbXB0ICR7YXR0ZW1wdH0vJHtSRUdJU1RSWV9QUk9CRV9BVFRFTVBUU30pOiAke2V9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGF0dGVtcHQgPCBSRUdJU1RSWV9QUk9CRV9BVFRFTVBUUykge1xuICAgICAgYXdhaXQgZGVsYXkoUkVHSVNUUllfUFJPQkVfQkFDS09GRl9NUyAqIDIgKiogKGF0dGVtcHQgLSAxKSk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgRXJyb3JzLkV4dGVybmFsKFxuICAgIGBDb3VsZCBub3QgcmVhY2ggdGhlIHJlZ2lzdHJ5IGF0ICcke3VybH0nIGFmdGVyICR7UkVHSVNUUllfUFJPQkVfQVRURU1QVFN9IGF0dGVtcHRzOiAke2xhc3RFcnJvcn1gLFxuICApO1xufVxuXG4vLyBDYW4ndCB1c2UgQ0RLVEZfIGFzIHByZWZpeCBiZWNhdXNlIHlhcmdzIC5lbnYoXCJDREtURlwiKSBpbiBzdHJpY3QgbW9kZSBkb2VzIG5vdCBhbGxvdyB1cyB0b1xuLy8gUmVmZXIgdG86IGh0dHBzOi8vZ2l0aHViLmNvbS95YXJncy95YXJncy9pc3N1ZXMvODczXG5jb25zdCB7IEdJVEhVQl9BUElfVE9LRU5fQ0RLVEYgfSA9IHByb2Nlc3MuZW52O1xuXG4vLyB7XG4vLyAgIFwidmVyc2lvblwiOiBcIjEuMC4wXCIsXG4vLyAgIFwibmFtZVwiOiBcInRlc3RVU0hhc0ZcIixcbi8vICAgXCJwcm9ibGVtc1wiOiBbXG4vLyAgICAgXCJleHRyYW5lb3VzOiBhcmNoaXZlci11dGlsc0AyLjEuMCAvcHJpdmF0ZS92YXIvZm9sZGVycy96Xy92MDNsMzNkNTVmYjU3bnJyM2IxcTAzY2gwMDAwZ3EvVC90ZXN0VVNIYXNGL25vZGVfbW9kdWxlcy9hcmNoaXZlci11dGlsc1wiLFxuLy8gICBdLFxuLy8gICBcImRlcGVuZGVuY2llc1wiOiB7XG4vLyAgICAgXCJAY2RrdGYvcHJvdmlkZXItcmFuZG9tXCI6IHtcbi8vICAgICAgIFwidmVyc2lvblwiOiBcIjMuMC4xMVwiLFxuLy8gICAgICAgXCJyZXNvbHZlZFwiOiBcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BjZGt0Zi9wcm92aWRlci1yYW5kb20vLS9wcm92aWRlci1yYW5kb20tMy4wLjExLnRnelwiXG4vLyAgICAgfSxcbmNvbnN0IG5wbUxpc3RTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGRlcGVuZGVuY2llczogei5yZWNvcmQoXG4gICAgICB6LnN0cmluZygpLFxuICAgICAgelxuICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgICB2ZXJzaW9uOiB6LnN0cmluZygpLFxuICAgICAgICB9KVxuICAgICAgICAubG9vc2UoKSxcbiAgICApLFxuICB9KVxuICAucGFydGlhbCgpXG4gIC5sb29zZSgpO1xuXG4vLyB7XG4vLyAgIFwidHlwZVwiOiBcInRyZWVcIixcbi8vICAgXCJkYXRhXCI6IHtcbi8vICAgICBcInR5cGVcIjogXCJsaXN0XCIsXG4vLyAgICAgXCJ0cmVlc1wiOiBbXG4vLyAgICAgICB7XG4vLyAgICAgICAgIFwibmFtZVwiOiBcIkBjZGt0Zi9wcm92aWRlci1yYW5kb21AMy4wLjExXCIsXG4vLyAgICAgICAgIFwiY2hpbGRyZW5cIjogW10sXG4vLyAgICAgICAgIFwiaGludFwiOiBudWxsLFxuLy8gICAgICAgICBcImNvbG9yXCI6IFwiYm9sZFwiLFxuLy8gICAgICAgICBcImRlcHRoXCI6IDBcbi8vICAgICAgIH1cbi8vICAgICBdXG4vLyAgIH1cbi8vIH1cbmNvbnN0IHlhcm5MaXN0U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBkYXRhOiB6XG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgdHJlZXM6IHouYXJyYXkoXG4gICAgICAgICAgelxuICAgICAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBhcnRpYWwoKVxuICAgICAgICAgICAgLmxvb3NlKCksXG4gICAgICAgICksXG4gICAgICB9KVxuICAgICAgLnBhcnRpYWwoKVxuICAgICAgLmxvb3NlKCksXG4gIH0pXG4gIC5wYXJ0aWFsKClcbiAgLmxvb3NlKCk7XG5cbi8vIFtcbi8vICAge1xuLy8gICAgIFwibmFtZVwiOiBcImFwcGRpcnNcIixcbi8vICAgICBcInZlcnNpb25cIjogXCIxLjQuNFwiXG4vLyAgIH0sXG4vLyAgIHtcbmNvbnN0IHBpcFBhY2thZ2VTY2hlbWEgPSB6LmFycmF5KFxuICB6Lm9iamVjdCh7IG5hbWU6IHouc3RyaW5nKCksIHZlcnNpb246IHouc3RyaW5nKCkgfSkubG9vc2UoKSxcbik7XG5cbi8qKlxuICogbWFuYWdlcyBpbnN0YWxsaW5nLCB1cGRhdGluZywgYW5kIHJlbW92aW5nIGRlcGVuZGVuY2llc1xuICogaW4gdGhlIHBhY2thZ2Ugc3lzdGVtIHVzZWQgYnkgdGhlIHRhcmdldCBsYW5ndWFnZSBvZiBhIENES1ROXG4gKiBwcm9qZWN0XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQYWNrYWdlTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSB3b3JraW5nRGlyZWN0b3J5OiBzdHJpbmcpIHt9XG5cbiAgcHVibGljIHN0YXRpYyBmb3JMYW5ndWFnZShcbiAgICBsYW5ndWFnZTogTGFuZ3VhZ2UsXG4gICAgd29ya2luZ0RpcmVjdG9yeTogc3RyaW5nLFxuICApOiBQYWNrYWdlTWFuYWdlciB7XG4gICAgc3dpdGNoIChsYW5ndWFnZSkge1xuICAgICAgY2FzZSBMYW5ndWFnZS5HTzpcbiAgICAgICAgcmV0dXJuIG5ldyBHb1BhY2thZ2VNYW5hZ2VyKHdvcmtpbmdEaXJlY3RvcnkpO1xuICAgICAgY2FzZSBMYW5ndWFnZS5UWVBFU0NSSVBUOlxuICAgICAgICByZXR1cm4gbmV3IE5vZGVQYWNrYWdlTWFuYWdlcih3b3JraW5nRGlyZWN0b3J5KTtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuUFlUSE9OOlxuICAgICAgICByZXR1cm4gbmV3IFB5dGhvblBhY2thZ2VNYW5hZ2VyKHdvcmtpbmdEaXJlY3RvcnkpO1xuICAgICAgY2FzZSBMYW5ndWFnZS5DU0hBUlA6XG4gICAgICAgIHJldHVybiBuZXcgTnVnZXRQYWNrYWdlTWFuYWdlcih3b3JraW5nRGlyZWN0b3J5KTtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuSkFWQTpcbiAgICAgICAgaWYgKEdyYWRsZVBhY2thZ2VNYW5hZ2VyLmlzR3JhZGxlUHJvamVjdCh3b3JraW5nRGlyZWN0b3J5KSkge1xuICAgICAgICAgIHJldHVybiBuZXcgR3JhZGxlUGFja2FnZU1hbmFnZXIod29ya2luZ0RpcmVjdG9yeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNYXZlblBhY2thZ2VNYW5hZ2VyKHdvcmtpbmdEaXJlY3RvcnkpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxhbmd1YWdlOiAke2xhbmd1YWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhYnN0cmFjdCBhZGRQYWNrYWdlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb24/OiBzdHJpbmcsXG4gICAgc2lsZW50PzogYm9vbGVhbixcbiAgKTogUHJvbWlzZTx2b2lkPjtcbiAgLy8gYWRkIGNoZWNrIGlmIHBhY2thZ2UgZXhpc3RzIGFscmVhZHkuIG1pZ2h0IHF1ZXJ5IHZlcnNpb24gaW4gdGhlIGZ1dHVyZSBhbmQgb2ZmZXIgdG8gdXBncmFkZT9cblxuICBwdWJsaWMgYWJzdHJhY3QgaXNOcG1WZXJzaW9uQXZhaWxhYmxlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb246IHN0cmluZyxcbiAgKTogUHJvbWlzZTxib29sZWFuPjtcblxuICBwdWJsaWMgYWJzdHJhY3QgbGlzdFByb3ZpZGVyUGFja2FnZXMoKTogUHJvbWlzZTxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXVxuICA+O1xufVxuXG5jbGFzcyBOb2RlUGFja2FnZU1hbmFnZXIgZXh0ZW5kcyBQYWNrYWdlTWFuYWdlciB7XG4gIHByaXZhdGUgaGFzWWFybkxvY2tmaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBleGlzdHNTeW5jKHBhdGguam9pbih0aGlzLndvcmtpbmdEaXJlY3RvcnksIFwieWFybi5sb2NrXCIpKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRQYWNrYWdlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb24/OiBzdHJpbmcsXG4gICAgc2lsZW50PzogYm9vbGVhbixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5sb2coYEFkZGluZyBwYWNrYWdlICR7cGFja2FnZU5hbWV9IEAgJHtwYWNrYWdlVmVyc2lvbn1gKTtcblxuICAgIC8vIHByb2JlIGZvciBwYWNrYWdlLWxvY2suanNvbiBvciB5YXJuLmxvY2tcbiAgICBsZXQgY29tbWFuZCA9IFwibnBtXCI7XG4gICAgbGV0IGFyZ3MgPSBbXCJpbnN0YWxsXCJdO1xuXG4gICAgaWYgKHRoaXMuaGFzWWFybkxvY2tmaWxlKCkpIHtcbiAgICAgIGNvbW1hbmQgPSBcInlhcm5cIjtcbiAgICAgIGFyZ3MgPSBbXCJhZGRcIl07XG4gICAgfVxuICAgIGFyZ3MucHVzaChcbiAgICAgIHBhY2thZ2VWZXJzaW9uID8gcGFja2FnZU5hbWUgKyBcIkBcIiArIHBhY2thZ2VWZXJzaW9uIDogcGFja2FnZU5hbWUsXG4gICAgKTtcblxuICAgIGlmIChzaWxlbnQpIHtcbiAgICAgIGFyZ3MucHVzaChcIi0tc2lsZW50XCIpO1xuICAgICAgYXJncy5wdXNoKFwiLS1uby1wcm9ncmVzc1wiKTtcbiAgICB9XG5cbiAgICAvLyBJbnN0YWxsIGV4YWN0IHZlcnNpb25cbiAgICAvLyBZYXJuOiBodHRwczovL2NsYXNzaWMueWFybnBrZy5jb20vbGFuZy9lbi9kb2NzL2NsaS9hZGQvI3RvYy15YXJuLWFkZC1leGFjdC1lXG4gICAgLy8gTnBtOiBodHRwczovL2RvY3MubnBtanMuY29tL2NsaS92OC9jb21tYW5kcy9ucG0taW5zdGFsbCNzYXZlLWV4YWN0XG4gICAgYXJncy5wdXNoKFwiLUVcIik7XG5cbiAgICBsb2dnZXIuaW5mbyhcbiAgICAgIGBJbnN0YWxsaW5nIHBhY2thZ2UgJHtwYWNrYWdlTmFtZX0gQCAke3BhY2thZ2VWZXJzaW9ufSB1c2luZyAke2NvbW1hbmR9LmAsXG4gICAgKTtcblxuICAgIGF3YWl0IGV4ZWMoY29tbWFuZCwgYXJncywgeyBjd2Q6IHRoaXMud29ya2luZ0RpcmVjdG9yeSB9KTtcblxuICAgIGxvZ2dlci5pbmZvKFwiUGFja2FnZSBpbnN0YWxsZWQuXCIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGlzTnBtVmVyc2lvbkF2YWlsYWJsZShcbiAgICBfcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBfcGFja2FnZVZlcnNpb246IHN0cmluZyxcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gV2UgZ2V0IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSB2ZXJzaW9ucyBmcm9tIG5wbSwgbm8gbmVlZCB0byBjaGVjayBoZXJlXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxpc3RZYXJuUGFja2FnZXMoKTogUHJvbWlzZTxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXVxuICA+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgZXhlYyhcInlhcm5cIiwgW1wibGlzdFwiLCBcIi0tanNvblwiXSwge1xuICAgICAgICBjd2Q6IHRoaXMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgIH0pO1xuXG4gICAgICBsb2dnZXIuZGVidWcoYExpc3RpbmcgeWFybiBwYWNrYWdlcyB1c2luZyBcInlhcm4gbGlzdCAtLWpzb25cIjogJHtzdGRvdXR9YCk7XG5cbiAgICAgIGNvbnN0IGpzb24gPSB5YXJuTGlzdFNjaGVtYS5wYXJzZShKU09OLnBhcnNlKHN0ZG91dCkpO1xuXG4gICAgICByZXR1cm4gKGpzb24/LmRhdGE/LnRyZWVzIHx8IFtdKVxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChkZXA6IGFueSkgPT5cbiAgICAgICAgICAgIGRlcC5uYW1lLnN0YXJ0c1dpdGgoXCJAY2RrdGYvcHJvdmlkZXItXCIpIHx8XG4gICAgICAgICAgICBkZXAubmFtZS5zdGFydHNXaXRoKFwiQGNka3RuL3Byb3ZpZGVyLVwiKSxcbiAgICAgICAgKVxuICAgICAgICAubWFwKChkZXA6IGFueSkgPT4gKHtcbiAgICAgICAgICBuYW1lOiBgQCR7ZGVwLm5hbWUuc3BsaXQoXCJAXCIpWzFdfWAsXG4gICAgICAgICAgdmVyc2lvbjogZGVwLm5hbWUuc3BsaXQoXCJAXCIpWzJdLFxuICAgICAgICB9KSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIGluc3RhbGxlZCBwYWNrYWdlcyB1c2luZyAneWFybiBsaXN0IC0tanNvbic6ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxpc3ROcG1QYWNrYWdlcygpOiBQcm9taXNlPFxuICAgIHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfVtdXG4gID4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGRvdXQgPSBhd2FpdCBleGVjKFwibnBtXCIsIFtcImxpc3RcIiwgXCItLWpzb25cIl0sIHtcbiAgICAgICAgY3dkOiB0aGlzLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICB9KTtcblxuICAgICAgbG9nZ2VyLmRlYnVnKGBMaXN0aW5nIG5wbSBwYWNrYWdlcyB1c2luZyBcIm5wbSBsaXN0IC0tanNvblwiOiAke3N0ZG91dH1gKTtcbiAgICAgIGNvbnN0IGpzb24gPSBucG1MaXN0U2NoZW1hLnBhcnNlKEpTT04ucGFyc2Uoc3Rkb3V0KSk7XG5cbiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhqc29uPy5kZXBlbmRlbmNpZXMgfHwge30pXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKFtkZXBOYW1lXSkgPT5cbiAgICAgICAgICAgIGRlcE5hbWUuc3RhcnRzV2l0aChcIkBjZGt0Zi9wcm92aWRlci1cIikgfHxcbiAgICAgICAgICAgIGRlcE5hbWUuc3RhcnRzV2l0aChcIkBjZGt0bi9wcm92aWRlci1cIiksXG4gICAgICAgIClcbiAgICAgICAgLm1hcCgoW25hbWUsIGRlcF0pID0+ICh7IG5hbWUsIHZlcnNpb246IGRlcC52ZXJzaW9uIH0pKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgaW5zdGFsbGVkIHBhY2thZ2VzIHVzaW5nICducG0gbGlzdCAtLWpzb24nOiAke2V9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGxpc3RQcm92aWRlclBhY2thZ2VzKCk6IFByb21pc2U8XG4gICAgeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W11cbiAgPiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzWWFybkxvY2tmaWxlKClcbiAgICAgID8gdGhpcy5saXN0WWFyblBhY2thZ2VzKClcbiAgICAgIDogdGhpcy5saXN0TnBtUGFja2FnZXMoKTtcbiAgfVxufVxuXG5jbGFzcyBQeXRob25QYWNrYWdlTWFuYWdlciBleHRlbmRzIFBhY2thZ2VNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBnZXQgYXBwQ29tbWFuZCgpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoXG4gICAgICAgIGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICBwYXRoLnJlc29sdmUodGhpcy53b3JraW5nRGlyZWN0b3J5LCBcImNka3RmLmpzb25cIiksXG4gICAgICAgICAgXCJ1dGY4XCIsXG4gICAgICAgICksXG4gICAgICApW1wiYXBwXCJdO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFxuICAgICAgICBgQ291bGQgbm90IGZpbmQgZmluZCBhbmQgcGFyc2UgY2RrdGYuanNvbiBpbiAke3RoaXMud29ya2luZ0RpcmVjdG9yeX1gLFxuICAgICAgICBlLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkUGFja2FnZShcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICAgIHBhY2thZ2VWZXJzaW9uPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB1c2VQaXBlbnYgPSB0aGlzLmFwcENvbW1hbmQuaW5jbHVkZXMoXCJwaXBlbnZcIik7XG5cbiAgICBpZiAodXNlUGlwZW52KSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYEluc3RhbGxpbmcgcGFja2FnZSAke3BhY2thZ2VOYW1lfSBAICR7cGFja2FnZVZlcnNpb259IHVzaW5nIHBpcGVudi5gLFxuICAgICAgKTtcblxuICAgICAgYXdhaXQgZXhlYyhcInBpcGVudlwiLCBbXCJpbnN0YWxsXCIsIGAke3BhY2thZ2VOYW1lfX49JHtwYWNrYWdlVmVyc2lvbn1gXSwge1xuICAgICAgICBjd2Q6IHRoaXMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgICAgUElQRU5WX1FVSUVUOiBcIjFcIixcbiAgICAgICAgfSxcbiAgICAgICAgc3RkaW86IFtcImluaGVyaXRcIiwgMSwgMV0sXG4gICAgICB9KTtcblxuICAgICAgY29uc29sZS5sb2coXCJQYWNrYWdlIGluc3RhbGxlZC5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgSW5zdGFsbGluZyBwYWNrYWdlICR7cGFja2FnZU5hbWV9IEAgJHtwYWNrYWdlVmVyc2lvbn0gdXNpbmcgcGlwLmAsXG4gICAgICApO1xuXG4gICAgICBjb25zdCByZXF1aXJlbWVudHNGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgdGhpcy53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgICBcInJlcXVpcmVtZW50cy50eHRcIixcbiAgICAgICk7XG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocmVxdWlyZW1lbnRzRmlsZVBhdGgpKSB7XG4gICAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgICAgICBgQ291bGQgbm90IGZpbmQgcmVxdWlyZW1lbnRzLnR4dCBpbiAke3RoaXMud29ya2luZ0RpcmVjdG9yeX1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXF1aXJlbWVudHMgPSBhd2FpdCBmcy5yZWFkRmlsZShyZXF1aXJlbWVudHNGaWxlUGF0aCwgXCJ1dGY4XCIpO1xuICAgICAgY29uc3QgcmVxdWlyZW1lbnRMaW5lID0gcmVxdWlyZW1lbnRzXG4gICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAuZmluZCgobGluZSkgPT4gbGluZS5pbmNsdWRlcyhwYWNrYWdlTmFtZSkpO1xuXG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBSZWFkIHJlcXVpcmVtZW50cy50eHQgZmlsZSBhbmQgZm91bmQgbGluZSBpbmNsdWRpbmcgJHtwYWNrYWdlTmFtZX06ICR7cmVxdWlyZW1lbnRMaW5lfWAsXG4gICAgICApO1xuXG4gICAgICBpZiAocmVxdWlyZW1lbnRMaW5lKSB7XG4gICAgICAgIGlmIChwYWNrYWdlVmVyc2lvbiA/IHJlcXVpcmVtZW50TGluZS5pbmNsdWRlcyhwYWNrYWdlVmVyc2lvbikgOiB0cnVlKSB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICBgUGFja2FnZSAke3BhY2thZ2VOYW1lfSBhbHJlYWR5IGluc3RhbGxlZC4gU2tpcHBpbmcgaW5zdGFsbGF0aW9uLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgYEZvdW5kIHRoZSBwYWNrYWdlIGJ1dCB3aXRoIGEgZGlmZmVyZW50IHZlcnNpb24sIGNvbnRpbnVpbmdgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3UmVxdWlyZW1lbnRzID1cbiAgICAgICAgcmVxdWlyZW1lbnRzXG4gICAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgLmZpbHRlcigobGluZSkgPT4gIWxpbmUuc3RhcnRzV2l0aChwYWNrYWdlTmFtZSkpXG4gICAgICAgICAgLmpvaW4oXCJcXG5cIikgK1xuICAgICAgICBgXFxuJHtwYWNrYWdlTmFtZX0ke3BhY2thZ2VWZXJzaW9uID8gYH49JHtwYWNrYWdlVmVyc2lvbn1gIDogXCJcIn1gO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHJlcXVpcmVtZW50c0ZpbGVQYXRoLCBuZXdSZXF1aXJlbWVudHMsIFwidXRmOFwiKTtcblxuICAgICAgYXdhaXQgZXhlYyhcInBpcFwiLCBbXCJpbnN0YWxsXCIsIFwiLXJcIiwgXCJyZXF1aXJlbWVudHMudHh0XCJdLCB7XG4gICAgICAgIGN3ZDogdGhpcy53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgICBzdGRpbzogW1wiaW5oZXJpdFwiLCAxLCAxXSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zb2xlLmxvZyhcIlBhY2thZ2UgaW5zdGFsbGVkLlwiKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaXNOcG1WZXJzaW9uQXZhaWxhYmxlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb246IHN0cmluZyxcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYENoZWNraW5nIGlmICR7cGFja2FnZU5hbWV9QCR7cGFja2FnZVZlcnNpb259IGlzIGF2YWlsYWJsZSBmb3IgUHl0aG9uYCxcbiAgICApO1xuICAgIGNvbnN0IHVybCA9IGBodHRwczovL3B5cGkub3JnL3B5cGkvJHtwYWNrYWdlTmFtZX0vJHtwYWNrYWdlVmVyc2lvbn0vanNvbmA7XG4gICAgbG9nZ2VyLmRlYnVnKGBGZXRjaGluZyBwYWNrYWdlIGluZm9ybWF0aW9uIGZvciAke3BhY2thZ2VOYW1lfSBmcm9tICR7dXJsfWApO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaFdpdGhSZXRyeSh1cmwpO1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IEhUVFBfTk9UX0ZPVU5EKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYFB5UEkgcmVwb3J0cyAke3BhY2thZ2VOYW1lfUAke3BhY2thZ2VWZXJzaW9ufSBub3QgZm91bmRgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBqc29uID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMgYW55O1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBHb3QgcmVzcG9uc2UgZnJvbSBQeVBJIGZvciAke3BhY2thZ2VOYW1lfUAke3BhY2thZ2VWZXJzaW9ufTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAganNvbixcbiAgICAgICl9YCxcbiAgICApO1xuXG4gICAgcmV0dXJuIEJvb2xlYW4oanNvbi5pbmZvKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsaXN0UGlwZW52UGFja2FnZXMoKTogUHJvbWlzZTxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXVxuICA+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgZXhlYyhcbiAgICAgICAgXCJwaXBlbnZcIixcbiAgICAgICAgW1wicnVuXCIsIFwicGlwXCIsIFwibGlzdFwiLCBcIi0tZm9ybWF0PWpzb25cIl0sXG4gICAgICAgIHtcbiAgICAgICAgICBjd2Q6IHRoaXMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBMaXN0aW5nIHBpcGVudiBwYWNrYWdlcyB1c2luZyBcInBpcGVudiBydW4gcGlwIGxpc3QgLS1mb3JtYXQ9anNvblwiOiAke3N0ZG91dH1gLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgbGlzdCA9IHBpcFBhY2thZ2VTY2hlbWEucGFyc2UoSlNPTi5wYXJzZShzdGRvdXQpKTtcbiAgICAgIHJldHVybiBsaXN0LmZpbHRlcihcbiAgICAgICAgKGl0ZW0pID0+XG4gICAgICAgICAgaXRlbS5uYW1lLnN0YXJ0c1dpdGgoXCJjZGt0Zi1jZGt0Zi1wcm92aWRlclwiKSB8fFxuICAgICAgICAgIGl0ZW0ubmFtZS5zdGFydHNXaXRoKFwiY2RrdG4tcHJvdmlkZXJcIiksXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGRldGVybWluZSBpbnN0YWxsZWQgcGFja2FnZXMgdXNpbmcgJ3BpcGVudiBydW4gcGlwIGxpc3QgLS1mb3JtYXQ9anNvbic6ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbGlzdFBpcFBhY2thZ2VzKCk6IFByb21pc2U8eyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgZXhlYyhcInBpcFwiLCBbXCJsaXN0XCIsIFwiLS1mb3JtYXQ9anNvblwiXSwge1xuICAgICAgICBjd2Q6IHRoaXMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgTGlzdGluZyBwaXAgcGFja2FnZXMgdXNpbmcgXCJwaXAgbGlzdCAtLWZvcm1hdD1qc29uXCI6ICR7c3Rkb3V0fWAsXG4gICAgICApO1xuXG4gICAgICBjb25zdCBsaXN0ID0gcGlwUGFja2FnZVNjaGVtYS5wYXJzZShKU09OLnBhcnNlKHN0ZG91dCkpO1xuICAgICAgcmV0dXJuIGxpc3QuZmlsdGVyKFxuICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICBpdGVtLm5hbWUuc3RhcnRzV2l0aChcImNka3RmLWNka3RmLXByb3ZpZGVyXCIpIHx8XG4gICAgICAgICAgaXRlbS5uYW1lLnN0YXJ0c1dpdGgoXCJjZGt0bi1wcm92aWRlclwiKSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIGluc3RhbGxlZCBwYWNrYWdlcyB1c2luZyAncGlwIGxpc3QgLS1mb3JtYXQ9anNvbic6ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbGlzdFByb3ZpZGVyUGFja2FnZXMoKTogUHJvbWlzZTxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXVxuICA+IHtcbiAgICByZXR1cm4gdGhpcy5hcHBDb21tYW5kLmluY2x1ZGVzKFwicGlwZW52XCIpXG4gICAgICA/IHRoaXMubGlzdFBpcGVudlBhY2thZ2VzKClcbiAgICAgIDogdGhpcy5saXN0UGlwUGFja2FnZXMoKTtcbiAgfVxufVxuXG5jbGFzcyBOdWdldFBhY2thZ2VNYW5hZ2VyIGV4dGVuZHMgUGFja2FnZU1hbmFnZXIge1xuICBwdWJsaWMgYXN5bmMgYWRkUGFja2FnZShcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICAgIHBhY2thZ2VWZXJzaW9uPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjb21tYW5kID0gXCJkb3RuZXRcIjtcbiAgICBjb25zdCBhcmdzID0gW1wiYWRkXCIsIFwicGFja2FnZVwiLCBwYWNrYWdlTmFtZV07XG4gICAgaWYgKHBhY2thZ2VWZXJzaW9uKSB7XG4gICAgICBhcmdzLnB1c2goXCItLXZlcnNpb25cIiwgcGFja2FnZVZlcnNpb24pO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBJbnN0YWxsaW5nIHBhY2thZ2UgJHtwYWNrYWdlTmFtZX0gQCAke3BhY2thZ2VWZXJzaW9ufSB1c2luZyBcIiR7Y29tbWFuZH0gJHthcmdzLmpvaW4oXG4gICAgICAgIFwiIFwiLFxuICAgICAgKX1cIi5gLFxuICAgICk7XG5cbiAgICBhd2FpdCBleGVjKGNvbW1hbmQsIGFyZ3MsIHsgY3dkOiB0aGlzLndvcmtpbmdEaXJlY3RvcnkgfSk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlBhY2thZ2UgaW5zdGFsbGVkLlwiKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpc05wbVZlcnNpb25BdmFpbGFibGUoXG4gICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbjogc3RyaW5nLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsb2dnZXIuZGVidWcoYENoZWNraW5nIGlmICR7cGFja2FnZU5hbWV9QCR7cGFja2FnZVZlcnNpb259IGlzIGF2YWlsYWJsZWApO1xuXG4gICAgY29uc3QgW293bmVyLCAuLi5yZXN0XSA9IHBhY2thZ2VOYW1lLnNwbGl0KFwiLlwiKTtcbiAgICBjb25zdCBmaXhlZE93bmVyID0gcGFja2FnZU5hbWUuc3RhcnRzV2l0aChcIklvLkNka3RuXCIpID8gXCJjZGt0blwiIDogb3duZXI7XG4gICAgY29uc3QgaWQgPSByZXN0W3Jlc3QubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgdXJsID0gYGh0dHBzOi8vYXp1cmVzZWFyY2gtdXNuYy5udWdldC5vcmcvcXVlcnk/cT1vd25lcjoke2ZpeGVkT3duZXJ9JTIwaWQ6JHtpZH0mcHJlcmVsZWFzZT1mYWxzZSZzZW1WZXJMZXZlbD0yLjAuMGA7XG4gICAgbG9nZ2VyLmRlYnVnKGBGZXRjaGluZyBwYWNrYWdlIG1ldGFkYXRhIGZyb20gTnVnZXQ6ICcke3VybH0nYCk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoV2l0aFJldHJ5KHVybCk7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gSFRUUF9OT1RfRk9VTkQpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgTnVHZXQgcmVwb3J0cyAke3BhY2thZ2VOYW1lfUAke3BhY2thZ2VWZXJzaW9ufSBub3QgZm91bmRgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QganNvbiA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIHtcbiAgICAgIGRhdGE6IHsgaWQ6IHN0cmluZzsgdmVyc2lvbnM6IHsgdmVyc2lvbjogc3RyaW5nIH1bXSB9W107XG4gICAgfTtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgR290IHJlc3BvbnNlIGZyb20gTnVHZXQgZm9yICR7cGFja2FnZU5hbWV9IDogJHtKU09OLnN0cmluZ2lmeShqc29uKX1gLFxuICAgICk7XG5cbiAgICBpZiAoIWpzb24/LmRhdGE/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlOyAvLyBObyBwYWNrYWdlIGZvdW5kXG4gICAgfVxuXG4gICAgY29uc3QgcGFja2FnZVZlcnNpb25zID1cbiAgICAgIGpzb24uZGF0YS5maW5kKChwKSA9PiBwLmlkID09PSBwYWNrYWdlTmFtZSk/LnZlcnNpb25zID8/IFtdO1xuXG4gICAgaWYgKCFwYWNrYWdlVmVyc2lvbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7IC8vIE5vIHBhY2thZ2UgcmVsZWFzZSBtYXRjaGluZyB0aGUgaWQgZm91bmRcbiAgICB9XG5cbiAgICByZXR1cm4gcGFja2FnZVZlcnNpb25zLnNvbWUoKHYpID0+IHYudmVyc2lvbiA9PT0gcGFja2FnZVZlcnNpb24pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxpc3RQcm92aWRlclBhY2thZ2VzKCk6IFByb21pc2U8XG4gICAgeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W11cbiAgPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0ZG91dCA9IGF3YWl0IGV4ZWMoXCJkb3RuZXRcIiwgW1wibGlzdFwiLCBcInBhY2thZ2VcIl0sIHtcbiAgICAgICAgY3dkOiB0aGlzLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICB9KTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYExpc3RpbmcgbnVnZXQgcGFja2FnZXMgdXNpbmcgXCJkb3RuZXQgbGlzdCBwYWNrYWdlXCI6ICR7c3Rkb3V0fWAsXG4gICAgICApO1xuXG4gICAgICBjb25zdCByZWdleCA9XG4gICAgICAgIC9eXFxzKj5cXHMoKD86SGFzaGlDb3JwXFwuQ2RrdGZ8SW9cXC5DZGt0bilcXC5Qcm92aWRlcnNcXC5bXFx3Ll0rKVxccysoKD86XFxkK1xcLil7Mn1cXGQrKD86LVxcUyspPylcXHMrKCg/OlxcZCtcXC4pezJ9XFxkKyg/Oi1cXFMrKT8pXFxzKiQvO1xuXG4gICAgICByZXR1cm4gc3Rkb3V0XG4gICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAubWFwKChsaW5lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAvLyBFeGFtcGxlIG91dHB1dDpcbiAgICAgICAgICAvLyBQcm9qZWN0ICdNeVRlcnJhZm9ybVN0YWNrJyBoYXMgdGhlIGZvbGxvd2luZyBwYWNrYWdlIHJlZmVyZW5jZXNcbiAgICAgICAgICAvLyAgW25ldDYuMF06XG4gICAgICAgICAgLy8gIFRvcC1sZXZlbCBQYWNrYWdlICAgICAgUmVxdWVzdGVkICAgUmVzb2x2ZWRcbiAgICAgICAgICAvLyAgPiBIYXNoaUNvcnAuQ2RrdGYgICAgICAwLjAuMCAgICAgICAwLjAuMFxuICAgICAgICAgIC8vIG1hdGNoWzBdID0gZnVsbCBtYXRjaFxuICAgICAgICAgIC8vIG1hdGNoWzFdID0gcGFja2FnZSBuYW1lXG4gICAgICAgICAgLy8gbWF0Y2hbMl0gPSByZXF1ZXN0ZWQgdmVyc2lvblxuICAgICAgICAgIC8vIG1hdGNoWzNdID0gcmVzb2x2ZWQgdmVyc2lvblxuICAgICAgICAgIHJldHVybiByZWdleC5leGVjKGxpbmUpO1xuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKChtYXRjaCkgPT4gISFtYXRjaClcbiAgICAgICAgLm1hcCgobWF0Y2gpID0+ICh7IG5hbWU6IG1hdGNoIVsxXSwgdmVyc2lvbjogbWF0Y2ghWzNdIH0pKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgaW5zdGFsbGVkIHBhY2thZ2VzIHVzaW5nICdkb3RuZXQgbGlzdCBwYWNrYWdlJzogJHtlfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNoYXJlZCBiYXNlIGZvciB0aGUgSmF2YSBwYWNrYWdlIG1hbmFnZXJzIChNYXZlbiBhbmQgR3JhZGxlKS4gQm90aCBpbnN0YWxsIGZyb20gTWF2ZW4gQ2VudHJhbCwgc28gdGhlIGNoZWNrIGZvclxuICogd2hldGhlciBhIGdpdmVuIHByb3ZpZGVyIHZlcnNpb24gZXhpc3RzIGlzIGNvbW1vbiB0byBib3RoIGFuZCBsaXZlcyBoZXJlOyB0aGUgY29uY3JldGUgc3ViY2xhc3NlcyBkaWZmZXIgb25seSBpbiBob3dcbiAqIHRoZXkgZGVjbGFyZSBhbmQgbGlzdCBkZXBlbmRlbmNpZXMgKHBvbS54bWwgdnMgYnVpbGQuZ3JhZGxlKS5cbiAqL1xuYWJzdHJhY3QgY2xhc3MgSmF2YVBhY2thZ2VNYW5hZ2VyIGV4dGVuZHMgUGFja2FnZU1hbmFnZXIge1xuICAvKipcbiAgICogUmVwb3J0cyB3aGV0aGVyIGBwYWNrYWdlTmFtZUBwYWNrYWdlVmVyc2lvbmAgaXMgcHVibGlzaGVkIG9uIE1hdmVuIENlbnRyYWwgYnkgcHJvYmluZyB0aGUgYXJ0aWZhY3QgcmVwb3NpdG9yeSBmb3JcbiAgICogdGhlIHZlcnNpb24ncyBgLnBvbWAgZGlyZWN0bHk6IEhUVFAgMjAwIG1lYW5zIHByZXNlbnQsIGFueXRoaW5nIGVsc2UgbWVhbnMgbm90IGF2YWlsYWJsZS5cbiAgICpcbiAgICogQHBhcmFtIHBhY2thZ2VOYW1lIC0gVGhlIEphdmEgY29vcmRpbmF0ZXMgaW4gXCJncm91cC5hcnRpZmFjdFwiIGZvcm0sIGUuZy4gXCJjb20uaGFzaGljb3JwLmNka3RmLXByb3ZpZGVyLXJhbmRvbVwiLlxuICAgKiBAcGFyYW0gcGFja2FnZVZlcnNpb24gLSBUaGUgZXhhY3QgdmVyc2lvbiB0byBjaGVjayBmb3IuXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgYC5wb21gIGV4aXN0cyBvbiBNYXZlbiBDZW50cmFsLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICogQHRocm93cyBJZiBgcGFja2FnZU5hbWVgIGlzIG5vdCBpbiB0aGUgZXhwZWN0ZWQgXCJncm91cC5hcnRpZmFjdFwiIGZvcm1hdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpc05wbVZlcnNpb25BdmFpbGFibGUoXG4gICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbjogc3RyaW5nLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsb2dnZXIuZGVidWcoYENoZWNraW5nIGlmICR7cGFja2FnZU5hbWV9QCR7cGFja2FnZVZlcnNpb259IGlzIGF2YWlsYWJsZWApO1xuXG4gICAgY29uc3QgcGFydHMgPSBwYWNrYWdlTmFtZS5zcGxpdChcIi5cIik7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMykge1xuICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKFxuICAgICAgICBgRXhwZWN0ZWQgcGFja2FnZSBuYW1lIHRvIGJlIGluIGZvcm1hdCBcImdyb3VwLmFydGlmYWN0XCIsIGUuZy4gXCJjb20uaGFzaGljb3JwLmNka3RmLXByb3ZpZGVyLWdvb2dsZVwiLCBnb3Q6ICR7cGFja2FnZU5hbWV9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYXJ0aWZhY3RJZCA9IHBhcnRzLnBvcCgpO1xuICAgIGNvbnN0IGdyb3VwSWQgPSBwYXJ0cy5qb2luKFwiLlwiKTtcblxuICAgIC8vIFByb2JlIHRoZSBhcnRpZmFjdCBDRE4gZGlyZWN0bHkgZm9yIHRoZSAucG9tOiAyMDAgPSBwcmVzZW50LCBhbnl0aGluZyBlbHNlID0gbm90IGF2YWlsYWJsZS5cbiAgICBjb25zdCBncm91cFBhdGggPSBncm91cElkLnJlcGxhY2UoL1xcLi9nLCBcIi9cIik7XG4gICAgY29uc3QgdXJsID0gYGh0dHBzOi8vcmVwbzEubWF2ZW4ub3JnL21hdmVuMi8ke2dyb3VwUGF0aH0vJHthcnRpZmFjdElkfS8ke3BhY2thZ2VWZXJzaW9ufS8ke2FydGlmYWN0SWR9LSR7cGFja2FnZVZlcnNpb259LnBvbWA7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYENoZWNraW5nIHdoZXRoZXIgJHtwYWNrYWdlTmFtZX1AJHtwYWNrYWdlVmVyc2lvbn0gZXhpc3RzIG9uIE1hdmVuIENlbnRyYWwgdW5kZXIgJyR7dXJsfSdgLFxuICAgICk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaFdpdGhSZXRyeSh1cmwpO1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IEhUVFBfTk9UX0ZPVU5EKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBNYXZlbiBDZW50cmFsIHJlcG9ydHMgJHtwYWNrYWdlTmFtZX1AJHtwYWNrYWdlVmVyc2lvbn0gbm90IGZvdW5kYCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBNYXZlbiBDZW50cmFsIHJlc3BvbmRlZCBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfSBmb3IgJHtwYWNrYWdlTmFtZX1AJHtwYWNrYWdlVmVyc2lvbn1gLFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2Uub2s7XG4gIH1cbn1cblxuY2xhc3MgTWF2ZW5QYWNrYWdlTWFuYWdlciBleHRlbmRzIEphdmFQYWNrYWdlTWFuYWdlciB7XG4gIHB1YmxpYyBhc3luYyBhZGRQYWNrYWdlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb24gPSBcIkxBVEVTVFwiLCAvLyB0aGUgbGF0ZXN0IG9wdGlvbiBpcyBkZXByZWNhdGVkIGluIG1hdmVuIDMuNVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZyhgQWRkaW5nICR7cGFja2FnZU5hbWV9IEAgJHtwYWNrYWdlVmVyc2lvbn0gdG8gcG9tLnhtbGApO1xuICAgIC8vIEFzc2VydCBwb20ueG1sIGV4aXN0c1xuICAgIGNvbnN0IHBvbVBhdGggPSBwYXRoLmpvaW4odGhpcy53b3JraW5nRGlyZWN0b3J5LCBcInBvbS54bWxcIik7XG4gICAgaWYgKCFleGlzdHNTeW5jKHBvbVBhdGgpKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoXG4gICAgICAgIFwiTm8gcG9tLnhtbCBmb3VuZCBpbiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBQbGVhc2UgcnVuIHRoZSBjb21tYW5kIGZyb20gdGhlIHJvb3Qgb2YgeW91ciBwcm9qZWN0LlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwb20gPSBhd2FpdCBmcy5yZWFkRmlsZShwb21QYXRoLCBcInV0ZjhcIik7XG4gICAgY29uc3QgcG9tWG1sID0gKGF3YWl0IHhtbDJqcyhwb20sIHt9KSkgYXMgRWxlbWVudDtcblxuICAgIC8vIE11dGF0ZSBkZXBlbmRlbmNpZXNcbiAgICBjb25zdCBuYW1lUGFydHMgPSBwYWNrYWdlTmFtZS5zcGxpdChcIi5cIik7XG4gICAgY29uc3QgZ3JvdXBJZCA9IG5hbWVQYXJ0cy5zbGljZSgwLCBuYW1lUGFydHMubGVuZ3RoIC0gMSkuam9pbihcIi5cIik7XG4gICAgY29uc3QgYXJ0aWZhY3RJZCA9IG5hbWVQYXJ0c1tuYW1lUGFydHMubGVuZ3RoIC0gMV07XG5cbiAgICBjb25zdCBuZXdEZXBlbmRlbmN5ID0gKGF3YWl0IHhtbDJqcyhcbiAgICAgIGA8ZGVwZW5kZW5jeT5cbiAgICA8Z3JvdXBJZD4ke2dyb3VwSWR9PC9ncm91cElkPlxuICAgIDxhcnRpZmFjdElkPiR7YXJ0aWZhY3RJZH08L2FydGlmYWN0SWQ+XG4gICAgPHZlcnNpb24+JHtwYWNrYWdlVmVyc2lvbn08L3ZlcnNpb24+XG48L2RlcGVuZGVuY3k+YCxcbiAgICApKSBhcyBFbGVtZW50O1xuXG4gICAgY29uc3QgZGVwZW5kZW5jaWVzID0gcG9tWG1sLmVsZW1lbnRzXG4gICAgICA/LmZpbmQoKGVsKSA9PiBlbC5uYW1lID09PSBcInByb2plY3RcIilcbiAgICAgID8uZWxlbWVudHM/LmZpbmQoKGVsKSA9PiBlbC5uYW1lID09PSBcImRlcGVuZGVuY2llc1wiKTtcblxuICAgIGlmICghZGVwZW5kZW5jaWVzKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoYENvdWxkIG5vdCBmaW5kIGRlcGVuZGVuY2llcyBzZWN0aW9uIGluIHRoZSBwb20ueG1sYCk7XG4gICAgfVxuICAgIGRlcGVuZGVuY2llcy5lbGVtZW50cyA9IChkZXBlbmRlbmNpZXM/LmVsZW1lbnRzIHx8IFtdKS5maWx0ZXIoXG4gICAgICAoZWwpID0+XG4gICAgICAgIGVsLmVsZW1lbnRzPy5zb21lKFxuICAgICAgICAgIChncm91cCkgPT5cbiAgICAgICAgICAgIGdyb3VwLm5hbWUgPT09IFwiZ3JvdXBJZFwiICYmIGdyb3VwLmVsZW1lbnRzPy5bMF0udGV4dCAhPT0gZ3JvdXBJZCxcbiAgICAgICAgKSB8fFxuICAgICAgICBlbC5lbGVtZW50cz8uc29tZShcbiAgICAgICAgICAoYXJ0aWZhY3QpID0+XG4gICAgICAgICAgICBhcnRpZmFjdC5uYW1lID09PSBcImFydGlmYWN0SWRcIiAmJlxuICAgICAgICAgICAgYXJ0aWZhY3QuZWxlbWVudHM/LlswXS50ZXh0ICE9PSBhcnRpZmFjdElkLFxuICAgICAgICApLFxuICAgICk7XG4gICAgZGVwZW5kZW5jaWVzPy5lbGVtZW50cz8ucHVzaChuZXdEZXBlbmRlbmN5LmVsZW1lbnRzIVswXSk7XG5cbiAgICAvLyBXcml0ZSBuZXcgcG9tLnhtbFxuICAgIGF3YWl0IGZzLndyaXRlRmlsZShwb21QYXRoLCBqczJ4bWwocG9tWG1sLCB7IHNwYWNlczogMiB9KSk7XG5cbiAgICAvLyBJbnN0YWxsXG4gICAgYXdhaXQgZXhlYyhcIm12blwiLCBbXCJpbnN0YWxsXCJdLCB7IGN3ZDogdGhpcy53b3JraW5nRGlyZWN0b3J5IH0pO1xuICAgIGNvbnNvbGUubG9nKFwiUGFja2FnZSBpbnN0YWxsZWQuXCIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxpc3RQcm92aWRlclBhY2thZ2VzKCk6IFByb21pc2U8XG4gICAgeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W11cbiAgPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBvbVBhdGggPSBwYXRoLmpvaW4odGhpcy53b3JraW5nRGlyZWN0b3J5LCBcInBvbS54bWxcIik7XG4gICAgICBpZiAoIWV4aXN0c1N5bmMocG9tUGF0aCkpIHtcbiAgICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFxuICAgICAgICAgIFwiTm8gcG9tLnhtbCBmb3VuZCBpbiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBQbGVhc2UgcnVuIHRoZSBjb21tYW5kIGZyb20gdGhlIHJvb3Qgb2YgeW91ciBwcm9qZWN0LlwiLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwb20gPSBhd2FpdCBmcy5yZWFkRmlsZShwb21QYXRoLCBcInV0ZjhcIik7XG4gICAgICBjb25zdCBwb21YbWwgPSAoYXdhaXQgeG1sMmpzKHBvbSwge30pKSBhcyBFbGVtZW50O1xuXG4gICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPVxuICAgICAgICBwb21YbWwuZWxlbWVudHNcbiAgICAgICAgICA/LmZpbmQoKGVsKSA9PiBlbC5uYW1lID09PSBcInByb2plY3RcIilcbiAgICAgICAgICA/LmVsZW1lbnRzPy5maW5kKChlbCkgPT4gZWwubmFtZSA9PT0gXCJkZXBlbmRlbmNpZXNcIik/LmVsZW1lbnRzID8/IFtdO1xuXG4gICAgICByZXR1cm4gZGVwZW5kZW5jaWVzXG4gICAgICAgIC5tYXAoKGRlcCkgPT4gKHtcbiAgICAgICAgICBuYW1lOiBgJHtcbiAgICAgICAgICAgIGRlcC5lbGVtZW50cz8uZmluZCgoZWwpID0+IGVsLm5hbWUgPT09IFwiZ3JvdXBJZFwiKT8uZWxlbWVudHM/LlswXVxuICAgICAgICAgICAgICAudGV4dFxuICAgICAgICAgIH0uJHtcbiAgICAgICAgICAgIGRlcC5lbGVtZW50cz8uZmluZCgoZWwpID0+IGVsLm5hbWUgPT09IFwiYXJ0aWZhY3RJZFwiKT8uZWxlbWVudHM/LlswXVxuICAgICAgICAgICAgICAudGV4dFxuICAgICAgICAgIH1gLFxuICAgICAgICAgIHZlcnNpb246IGRlcC5lbGVtZW50cz8uZmluZCgoZWwpID0+IGVsLm5hbWUgPT09IFwidmVyc2lvblwiKVxuICAgICAgICAgICAgPy5lbGVtZW50cz8uWzBdLnRleHQgYXMgc3RyaW5nLFxuICAgICAgICB9KSlcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAoZGVwKSA9PlxuICAgICAgICAgICAgZGVwLm5hbWUuc3RhcnRzV2l0aChcImNvbS5oYXNoaWNvcnAuY2RrdGYtcHJvdmlkZXItXCIpIHx8XG4gICAgICAgICAgICBkZXAubmFtZS5zdGFydHNXaXRoKFwiaW8uY2RrdG4uY2RrdG4tcHJvdmlkZXItXCIpLFxuICAgICAgICApO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGRldGVybWluZSBpbnN0YWxsZWQgcGFja2FnZXMgcmVhZGluZyB0aGUgcG9tLnhtbDogJHtlLm1lc3NhZ2V9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIEdyYWRsZVBhY2thZ2VNYW5hZ2VyIGV4dGVuZHMgSmF2YVBhY2thZ2VNYW5hZ2VyIHtcbiAgcHVibGljIHN0YXRpYyBpc0dyYWRsZVByb2plY3Qod29ya2luZ0RpcmVjdG9yeTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzR3JhZGxlUHJvamVjdCh3b3JraW5nRGlyZWN0b3J5KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRQYWNrYWdlKFxuICAgIHBhY2thZ2VGUU46IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbiA9IFwibGF0ZXN0LnJlbGVhc2VcIixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYnVpbGRHcmFkbGVQYXRoID0gcGF0aC5qb2luKHRoaXMud29ya2luZ0RpcmVjdG9yeSwgXCJidWlsZC5ncmFkbGVcIik7XG4gICAgY29uc3QgYnVpbGRHcmFkbGUgPSBhd2FpdCBmcy5yZWFkRmlsZShidWlsZEdyYWRsZVBhdGgsIFwidXRmOFwiKTtcbiAgICBjb25zdCBidWlsZEdyYWRsZUxpbmVzID0gYnVpbGRHcmFkbGUuc3BsaXQoL1xccj9cXG4vKTtcblxuICAgIGNvbnN0IGRlcGVuZGVuY2llc1JlZ2V4ID0gL2RlcGVuZGVuY2llc1xccytcXHsvaTtcbiAgICBjb25zdCBkZXBlbmRlbmN5QmxvY2tTdGFydCA9IGJ1aWxkR3JhZGxlTGluZXMuZmluZEluZGV4KChsaW5lKSA9PlxuICAgICAgZGVwZW5kZW5jaWVzUmVnZXgudGVzdChsaW5lKSxcbiAgICApO1xuICAgIGlmIChkZXBlbmRlbmN5QmxvY2tTdGFydCA9PT0gLTEpIHtcbiAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgICAgXCJDb3VsZCBub3QgZmluZCBkZXBlbmRlbmNpZXMgc2VjdGlvbiBpbiB0aGUgYnVpbGQuZ3JhZGxlXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHBhY2thZ2VTZWdtZW50cyA9IHBhY2thZ2VGUU4uc3BsaXQoXCIuXCIpO1xuICAgIGNvbnN0IHBhY2thZ2VOYW1lID0gcGFja2FnZVNlZ21lbnRzLnBvcCgpO1xuICAgIGNvbnN0IGdyb3VwTmFtZSA9IHBhY2thZ2VTZWdtZW50cy5qb2luKFwiLlwiKTtcbiAgICBjb25zdCBkZXBlbmRlbmN5U3BlY2lmaWVyID0gYCR7Z3JvdXBOYW1lfToke3BhY2thZ2VOYW1lfWA7XG4gICAgY29uc3QgZGVwZW5kZW5jeUFuZFZlcnNpb25TcGVjaWZpZXIgPSBgJHtkZXBlbmRlbmN5U3BlY2lmaWVyfToke3BhY2thZ2VWZXJzaW9ufWA7XG5cbiAgICBjb25zdCBleGlzdGluZ0RlcGVuZGVuY3kgPSBidWlsZEdyYWRsZUxpbmVzLmZpbmRJbmRleCgobGluZSkgPT5cbiAgICAgIGxpbmUuaW5jbHVkZXMoZGVwZW5kZW5jeVNwZWNpZmllciksXG4gICAgKTtcbiAgICBpZiAoZXhpc3RpbmdEZXBlbmRlbmN5ICE9PSAtMSkge1xuICAgICAgYnVpbGRHcmFkbGVMaW5lcy5zcGxpY2UoZXhpc3RpbmdEZXBlbmRlbmN5LCAxKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdQYWNrYWdlRGVwZW5kZW5jeSA9IGBcXHRpbXBsZW1lbnRhdGlvbiAnJHtkZXBlbmRlbmN5QW5kVmVyc2lvblNwZWNpZmllcn0nYDtcbiAgICBidWlsZEdyYWRsZUxpbmVzLnNwbGljZShkZXBlbmRlbmN5QmxvY2tTdGFydCArIDEsIDAsIG5ld1BhY2thZ2VEZXBlbmRlbmN5KTtcblxuICAgIGF3YWl0IGZzLndyaXRlRmlsZShidWlsZEdyYWRsZVBhdGgsIGJ1aWxkR3JhZGxlTGluZXMuam9pbihcIlxcblwiKSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbGlzdFByb3ZpZGVyUGFja2FnZXMoKTogUHJvbWlzZTxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXVxuICA+IHtcbiAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBhd2FpdCBnZXRHcmFkbGVEZXBlbmRlbmNpZXMoKTtcbiAgICBpZiAoIWRlcGVuZGVuY2llcykge1xuICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFwiQ291bGQgbm90IGZpbmQgYW55IGRlcGVuZGVuY2llc1wiKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZXBlbmRlbmN5TGlzdCA9IGRlcGVuZGVuY2llc1xuICAgICAgLm1hcCgobGluZSkgPT4gZ2V0RGVwZW5kZW5jeUluZm9ybWF0aW9uRnJvbUxpbmUobGluZSkpXG4gICAgICAuZmlsdGVyKChkZXApID0+IHtcbiAgICAgICAgaWYgKCFkZXApIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBkZXAubmFtZS5pbmNsdWRlcyhcImNka3RmLXByb3ZpZGVyLVwiKSB8fFxuICAgICAgICAgIGRlcC5uYW1lLmluY2x1ZGVzKFwiY2RrdG4tcHJvdmlkZXItXCIpXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICAgLm1hcCgoZGVwKSA9PiAoe1xuICAgICAgICBuYW1lOiBgJHtkZXAhLmdyb3VwfS4ke2RlcCEubmFtZX1gLFxuICAgICAgICB2ZXJzaW9uOiBkZXAhLnZlcnNpb24sXG4gICAgICB9KSk7XG5cbiAgICByZXR1cm4gZGVwZW5kZW5jeUxpc3Q7XG4gIH1cbn1cblxuY2xhc3MgR29QYWNrYWdlTWFuYWdlciBleHRlbmRzIFBhY2thZ2VNYW5hZ2VyIHtcbiAgcHVibGljIGFzeW5jIGFkZFBhY2thZ2UoXG4gICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbj86IHN0cmluZyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5sb2coYEFkZGluZyBwYWNrYWdlICR7cGFja2FnZU5hbWV9IEAgJHtwYWNrYWdlVmVyc2lvbn1gKTtcblxuICAgIGNvbnN0IG1ham9yVmVyc2lvbjogbnVtYmVyIHwgdW5kZWZpbmVkID0gcGFja2FnZVZlcnNpb25cbiAgICAgID8gc2VtdmVyLm1ham9yKHBhY2thZ2VWZXJzaW9uKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBsZXQgdmVyc2lvblBhY2thZ2VTdWZmaXggPSBcIlwiO1xuICAgIGlmICh0eXBlb2YgbWFqb3JWZXJzaW9uID09PSBcIm51bWJlclwiICYmIG1ham9yVmVyc2lvbiA+IDEpIHtcbiAgICAgIHZlcnNpb25QYWNrYWdlU3VmZml4ID0gYC92JHttYWpvclZlcnNpb259YDtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgUnVubmluZyAnZ28gZ2V0ICR7cGFja2FnZU5hbWV9JHt2ZXJzaW9uUGFja2FnZVN1ZmZpeH1AdiR7cGFja2FnZVZlcnNpb259J2AsXG4gICAgKTtcbiAgICAvLyBJbnN0YWxsXG4gICAgYXdhaXQgZXhlYyhcbiAgICAgIFwiZ29cIixcbiAgICAgIFtcImdldFwiLCBgJHtwYWNrYWdlTmFtZX0ke3ZlcnNpb25QYWNrYWdlU3VmZml4fUB2JHtwYWNrYWdlVmVyc2lvbn1gXSxcbiAgICAgIHtcbiAgICAgICAgY3dkOiB0aGlzLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlBhY2thZ2UgaW5zdGFsbGVkLlwiKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpc05wbVZlcnNpb25BdmFpbGFibGUoXG4gICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbjogc3RyaW5nLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsb2dnZXIuZGVidWcoYENoZWNraW5nIGlmICR7cGFja2FnZU5hbWV9QCR7cGFja2FnZVZlcnNpb259IGlzIGF2YWlsYWJsZWApO1xuXG4gICAgLy8gZS5nLiBnaXRodWIuY29tL2Nka3RmL2Nka3RmLXByb3ZpZGVyLWdvb2dsZS1nby9nb29nbGVcbiAgICBjb25zdCBwYXJ0cyA9IHBhY2thZ2VOYW1lLnNwbGl0KFwiL1wiKTtcbiAgICBpZiAocGFydHMubGVuZ3RoICE9PSA0KSB7XG4gICAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoXG4gICAgICAgIGBFeHBlY3RpbmcgR28gcGFja2FnZSBuYW1lIHRvIGJlIGluIHRoZSBmb3JtYXQgb2YgZ2l0aHViLmNvbS88b3JnPi88cmVwbz4vPHBhY2thZ2U+LCBnb3QgJHtwYWNrYWdlTmFtZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmcgPSBwYXJ0c1sxXTtcbiAgICBjb25zdCByZXBvID0gcGFydHNbMl07XG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBwYXJ0c1szXTtcblxuICAgIGNvbnN0IHVybCA9IGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7b3JnfS8ke3JlcG99L2dpdC9yZWYvdGFncy8ke3BhY2thZ2VQYXRofS92JHtwYWNrYWdlVmVyc2lvbn1gO1xuICAgIGxvZ2dlci5kZWJ1ZyhgRmV0Y2hpbmcgdGFncyBmb3IgJHtvcmd9LyR7cmVwb30gZnJvbSAnJHt1cmx9J2ApO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hXaXRoUmV0cnkodXJsLCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi92bmQuZ2l0aHViK2pzb25cIixcbiAgICAgICAgXCJVc2VyLUFnZW50XCI6IFwiT3BlbkNvbnN0cnVjdHMvY2RrdG4tY2xpXCIsXG4gICAgICAgIC4uLihHSVRIVUJfQVBJX1RPS0VOX0NES1RGXG4gICAgICAgICAgPyB7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtHSVRIVUJfQVBJX1RPS0VOX0NES1RGfWAgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IEhUVFBfTk9UX0ZPVU5EKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYENvdWxkIG5vdCBmaW5kIHRoZSB0YWcgJHtwYWNrYWdlUGF0aH0vdiR7cGFja2FnZVZlcnNpb259IGluIHRoZSByZXBvc2l0b3J5ICR7b3JnfS8ke3JlcG99YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QganNvbiA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIGFueTtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgR290IHJlc3BvbnNlIGZyb20gR2l0SHVicyByZXBvc2l0b3J5IHRhZyBlbmRwb2ludCBmb3IgJHtwYWNrYWdlTmFtZX06ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGpzb24sXG4gICAgICApfWAsXG4gICAgKTtcblxuICAgIHJldHVybiBCb29sZWFuKGpzb24gJiYganNvbi5yZWYpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxpc3RQcm92aWRlclBhY2thZ2VzKCk6IFByb21pc2U8XG4gICAgeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W11cbiAgPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdvU3VtUGF0aCA9IHBhdGguam9pbih0aGlzLndvcmtpbmdEaXJlY3RvcnksIFwiZ28uc3VtXCIpO1xuICAgICAgaWYgKCFleGlzdHNTeW5jKGdvU3VtUGF0aCkpIHtcbiAgICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFxuICAgICAgICAgIFwiTm8gZ28uc3VtIGZvdW5kIGluIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIFBsZWFzZSBydW4gdGhlIGNvbW1hbmQgZnJvbSB0aGUgcm9vdCBvZiB5b3VyIHByb2plY3QuXCIsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdvU3VtID0gYXdhaXQgZnMucmVhZEZpbGUoZ29TdW1QYXRoLCBcInV0ZjhcIik7XG4gICAgICBjb25zdCBkZWR1cGVkUHJvdmlkZXJOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgICAgcmV0dXJuIGdvU3VtXG4gICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChsaW5lKSA9PlxuICAgICAgICAgICAgbGluZS5zdGFydHNXaXRoKFwiZ2l0aHViLmNvbS9oYXNoaWNvcnAvY2RrdGYtcHJvdmlkZXJcIikgfHxcbiAgICAgICAgICAgIGxpbmUuc3RhcnRzV2l0aChcImdpdGh1Yi5jb20vY2RrdGYvY2RrdGYtcHJvdmlkZXJcIikgfHxcbiAgICAgICAgICAgIGxpbmUuc3RhcnRzV2l0aChcImdpdGh1Yi5jb20vY2RrdG4taW8vY2RrdG4tcHJvdmlkZXJcIiksXG4gICAgICAgIClcbiAgICAgICAgLm1hcCgobGluZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcnRzID0gbGluZS5zcGxpdChcIiBcIik7XG4gICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMykge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKFxuICAgICAgICAgICAgICBgRXhwZWN0ZWQgbGluZSBpbiBnby5zdW0gdG8gYmUgaW4gdGhlIGZvcm1hdCBvZiAnPHBhY2thZ2U+IDx2ZXJzaW9uPiA8Y2hlY2tzdW0+JywgZ290OiAke2xpbmV9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gcGFydFswXSBjb3VsZCBiZSBnaXRodWIuY29tL2F3cy9jb25zdHJ1Y3RzLWdvL2NvbnN0cnVjdHMvdjEwXG4gICAgICAgICAgY29uc3QgbmFtZSA9IHBhcnRzWzBdLnNwbGl0KFwiL1wiKS5zbGljZSgwLCA0KS5qb2luKFwiL1wiKTtcblxuICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSBwYXJ0c1sxXS5zcGxpdChcIi9cIilbMF07XG5cbiAgICAgICAgICBpZiAoZGVkdXBlZFByb3ZpZGVyTmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBuYW1lOiBcIlwiLCB2ZXJzaW9uOiBcIlwiIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGVkdXBlZFByb3ZpZGVyTmFtZXMuYWRkKG5hbWUpO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKHByb3ZpZGVySW5mbykgPT4gISFwcm92aWRlckluZm8ubmFtZSAmJiAhIXByb3ZpZGVySW5mby52ZXJzaW9uLFxuICAgICAgICApO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGRldGVybWluZSBpbnN0YWxsZWQgcGFja2FnZXMgcmVhZGluZyB0aGUgZ28uc3VtOiAke2UubWVzc2FnZX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
694
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kZXBlbmRlbmNpZXMvcGFja2FnZS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsNENBUXdCO0FBQ3hCLHVDQUFzQztBQUN0QyxnREFBd0I7QUFDeEIsbUNBQWlEO0FBQ2pELDZDQUErQjtBQUMvQiwrQ0FBaUM7QUFDakMsbUNBQWtFO0FBQ2xFLHVDQUF5QjtBQUV6QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztBQUMvRCxNQUFNLFVBQVUsR0FBMkIsS0FBSztJQUM5QyxDQUFDLENBQUMsSUFBSSxtQkFBVSxDQUFDLEtBQUssQ0FBQztJQUN2QixDQUFDLENBQUMsU0FBUyxDQUFDO0FBRWQ7OztHQUdHO0FBQ0gsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLENBQUM7QUFFbEMseUVBQXlFO0FBQ3pFLE1BQU0seUJBQXlCLEdBQUcsR0FBRyxDQUFDO0FBRXRDOztHQUVHO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFFakM7O0dBRUc7QUFDSCxNQUFNLHNCQUFzQixHQUFHLEdBQUcsQ0FBQztBQUVuQzs7R0FFRztBQUNILE1BQU0scUJBQXFCLEdBQUcsR0FBRyxDQUFDO0FBRWxDOztHQUVHO0FBQ0gsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDO0FBRTNCOzs7Ozs7R0FNRztBQUNILFNBQVMsaUJBQWlCLENBQUMsTUFBYztJQUN2QyxPQUFPLENBQ0wsTUFBTSxLQUFLLG9CQUFvQjtRQUMvQixNQUFNLEtBQUssc0JBQXNCO1FBQ2pDLE1BQU0sSUFBSSxxQkFBcUIsQ0FDaEMsQ0FBQztBQUNKLENBQUM7QUFFRDs7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QUM7b0JBQ3ZCLE1BQU0sZ0JBQU0sQ0FBQyxRQUFRLENBQ25CLHlGQUF5RixJQUFJLEVBQUUsQ0FDaEcsQ0FBQztnQkFDSixDQUFDO2dCQUVELCtEQUErRDtnQkFDL0QsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFdkQsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFdkMsSUFBSSxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDbkMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUNuQyxDQUFDO2dCQUVELG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFL0IsT0FBTztvQkFDTCxJQUFJO29CQUNKLE9BQU87aUJBQ1IsQ0FBQztZQUNKLENBQUMsQ0FBQztpQkFDRCxNQUFNLENBQ0wsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUNoRSxDQUFDO1FBQ04sQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FDYiw4REFBOEQsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUMxRSxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQge1xuICBMYW5ndWFnZSxcbiAgZXhlYyxcbiAgRXJyb3JzLFxuICBsb2dnZXIsXG4gIGlzR3JhZGxlUHJvamVjdCxcbiAgZ2V0R3JhZGxlRGVwZW5kZW5jaWVzLFxuICBnZXREZXBlbmRlbmN5SW5mb3JtYXRpb25Gcm9tTGluZSxcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgeG1sMmpzLCBqczJ4bWwsIEVsZW1lbnQgfSBmcm9tIFwieG1sLWpzXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCAqIGFzIHNlbXZlciBmcm9tIFwic2VtdmVyXCI7XG5pbXBvcnQgeyBmZXRjaCwgUHJveHlBZ2VudCwgUmVxdWVzdEluaXQsIFJlc3BvbnNlIH0gZnJvbSBcInVuZGljaVwiO1xuaW1wb3J0ICogYXMgeiBmcm9tIFwiem9kXCI7XG5cbmNvbnN0IHByb3h5ID0gcHJvY2Vzcy5lbnYuaHR0cF9wcm94eSB8fCBwcm9jZXNzLmVudi5IVFRQX1BST1hZO1xuY29uc3QgZGlzcGF0Y2hlcjogUHJveHlBZ2VudCB8IHVuZGVmaW5lZCA9IHByb3h5XG4gID8gbmV3IFByb3h5QWdlbnQocHJveHkpXG4gIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIE51bWJlciBvZiBhdHRlbXB0cyAoaW5pdGlhbCB0cnkgKyByZXRyaWVzKSBmb3IgYSByZWdpc3RyeSBwcm9iZSBiZWZvcmUgd2UgZ2l2ZSB1cCBhbmQgdHJlYXQgdGhlIHJlZ2lzdHJ5IGFzXG4gKiB1bnJlYWNoYWJsZS4gVHJhbnNpZW50IGZhaWx1cmVzIChuZXR3b3JrIGVycm9ycyAvIDQwOCAvIDQyOSAvIDV4eCkgYXJlIHJldHJpZWQ7IGRlZmluaXRpdmUgcmVzcG9uc2VzIGFyZSBub3QuXG4gKi9cbmNvbnN0IFJFR0lTVFJZX1BST0JFX0FUVEVNUFRTID0gMztcblxuLyoqIEJhc2UgYmFja29mZiBiZXR3ZWVuIHJldHJpZXMsIGRvdWJsZWQgZWFjaCBhdHRlbXB0ICgyNTBtcywgNTAwbXMpLiAqL1xuY29uc3QgUkVHSVNUUllfUFJPQkVfQkFDS09GRl9NUyA9IDI1MDtcblxuLyoqXG4gKiBIVFRQIDQwOCBSZXF1ZXN0IFRpbWVvdXQg4oCUIGEgdHJhbnNpZW50IHN0YXR1cyB3b3J0aCByZXRyeWluZy5cbiAqL1xuY29uc3QgSFRUUF9SRVFVRVNUX1RJTUVPVVQgPSA0MDg7XG5cbi8qKlxuICogSFRUUCA0MjkgVG9vIE1hbnkgUmVxdWVzdHMgKHJhdGUgbGltaXQpIOKAlCBhIHRyYW5zaWVudCBzdGF0dXMgd29ydGggcmV0cnlpbmcuXG4gKi9cbmNvbnN0IEhUVFBfVE9PX01BTllfUkVRVUVTVFMgPSA0Mjk7XG5cbi8qKlxuICogTG93ZXN0IEhUVFAgNXh4IHN0YXR1cyDigJQgYW55IHN0YXR1cyBhdCBvciBhYm92ZSB0aGlzIGlzIGEgc2VydmVyIGVycm9yIGFuZCB0cmVhdGVkIGFzIGEgdHJhbnNpZW50IHN0YXR1cyB3b3J0aCByZXRyeWluZy5cbiAqL1xuY29uc3QgSFRUUF9TRVJWRVJfRVJST1JfTUlOID0gNTAwO1xuXG4vKipcbiAqIEhUVFAgNDA0IE5vdCBGb3VuZCDigJQgYSBkZWZpbml0aXZlIFwidGhlIHZlcnNpb24gaXMgbm90IHB1Ymxpc2hlZFwiIGFuc3dlciBmcm9tIGEgcmVnaXN0cnkgKG5vdCB0cmFuc2llbnQpLlxuICovXG5jb25zdCBIVFRQX05PVF9GT1VORCA9IDQwNDtcblxuLyoqXG4gKiBSZXBvcnRzIHdoZXRoZXIgYW4gSFRUUCBzdGF0dXMgaXMgdHJhbnNpZW50IGFuZCB0aGVyZWZvcmUgd29ydGggcmV0cnlpbmc6IHJlcXVlc3QgdGltZW91dCAoNDA4KSwgcmF0ZSBsaW1pdCAoNDI5KSxcbiAqIG9yIGFueSBzZXJ2ZXIgZXJyb3IgKDV4eCkuIERlZmluaXRpdmUgc3RhdHVzZXMgKDJ4eCwgNDA0LCBvdGhlciA0eHgpIGFyZSBub3QgdHJhbnNpZW50LlxuICpcbiAqIEBwYXJhbSBzdGF0dXMgLSBUaGUgSFRUUCBzdGF0dXMgY29kZSBmcm9tIGEgcmVnaXN0cnkgcmVzcG9uc2UuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHN0YXR1cyBpcyB0cmFuc2llbnQgYW5kIHRoZSByZXF1ZXN0IHNob3VsZCBiZSByZXRyaWVkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gaXNUcmFuc2llbnRTdGF0dXMoc3RhdHVzOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBzdGF0dXMgPT09IEhUVFBfUkVRVUVTVF9USU1FT1VUIHx8XG4gICAgc3RhdHVzID09PSBIVFRQX1RPT19NQU5ZX1JFUVVFU1RTIHx8XG4gICAgc3RhdHVzID49IEhUVFBfU0VSVkVSX0VSUk9SX01JTlxuICApO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGFmdGVyIGBtc2AgbWlsbGlzZWNvbmRzOyB1c2VkIHRvIGJhY2sgb2ZmIGJldHdlZW4gcmVnaXN0cnktcHJvYmUgcmV0cmllcy5cbiAqXG4gKiBAcGFyYW0gbXMgLSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0LlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgZGVsYXkgaGFzIGVsYXBzZWQuXG4gKi9cbmZ1bmN0aW9uIGRlbGF5KG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbi8qKlxuICogRmV0Y2hlcyBgdXJsYCwgcmV0cnlpbmcgb25seSBvbiB0cmFuc2llbnQgZmFpbHVyZXMg4oCUIG5ldHdvcmsgZXJyb3JzIGFuZCBIVFRQIDQwOC80MjkvNXh4IOKAlCBzbyBhIHJlZ2lzdHJ5IGhpY2N1cCBpc1xuICogbm90IG1pc3Rha2VuIGZvciBhIGRlZmluaXRpdmUgYW5zd2VyLiBEZWZpbml0aXZlIHJlc3BvbnNlcyAoMnh4LCA0MDQsIG90aGVyIDR4eCkgYXJlIHJldHVybmVkIGltbWVkaWF0ZWx5IHdpdGhvdXRcbiAqIHJldHJ5LiBJZiBldmVyeSBhdHRlbXB0IGZhaWxzIHRyYW5zaWVudGx5LCB0aHJvd3MgYW4gYEV4dGVybmFsYCBlcnJvciBzbyBjYWxsZXJzIGNhbiBkaXN0aW5ndWlzaCBcInJlZ2lzdHJ5XG4gKiB1bnJlYWNoYWJsZVwiIGZyb20gXCJ2ZXJzaW9uIGFic2VudFwiIHJhdGhlciB0aGFuIHNpbGVudGx5IHRyZWF0aW5nIGEgaGljY3VwIGFzIGFic2VuY2UuXG4gKlxuICogQHBhcmFtIHVybCAtIFRoZSByZWdpc3RyeSBVUkwgdG8gZmV0Y2guXG4gKiBAcGFyYW0gaW5pdCAtIE9wdGlvbmFsIGBmZXRjaGAgcmVxdWVzdCBvcHRpb25zIChlLmcuIGhlYWRlcnMpLCBwYXNzZWQgdGhyb3VnaCB1bmNoYW5nZWQgb24gZXZlcnkgYXR0ZW1wdC5cbiAqIEByZXR1cm5zIFRoZSBgUmVzcG9uc2VgIGZvciB0aGUgZmlyc3QgZGVmaW5pdGl2ZSAobm9uLXRyYW5zaWVudCkgcmVzdWx0LlxuICogQHRocm93cyBBbiBgRXh0ZXJuYWxgIGVycm9yIGlmIGV2ZXJ5IGF0dGVtcHQgKHVwIHRvIGBSRUdJU1RSWV9QUk9CRV9BVFRFTVBUU2ApIGZhaWxzIHRyYW5zaWVudGx5LlxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaFdpdGhSZXRyeShcbiAgdXJsOiBzdHJpbmcsXG4gIGluaXQ/OiBSZXF1ZXN0SW5pdCxcbik6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgbGV0IGxhc3RFcnJvcjogdW5rbm93bjtcblxuICBmb3IgKGxldCBhdHRlbXB0ID0gMTsgYXR0ZW1wdCA8PSBSRUdJU1RSWV9QUk9CRV9BVFRFTVBUUzsgYXR0ZW1wdCsrKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7IC4uLmluaXQsIGRpc3BhdGNoZXIgfSk7XG4gICAgICBpZiAoIWlzVHJhbnNpZW50U3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgfVxuICAgICAgbGFzdEVycm9yID0gbmV3IEVycm9yKGByZWdpc3RyeSByZXNwb25kZWQgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYFRyYW5zaWVudCBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfSBmcm9tICcke3VybH0nIChhdHRlbXB0ICR7YXR0ZW1wdH0vJHtSRUdJU1RSWV9QUk9CRV9BVFRFTVBUU30pYCxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAvLyBmZXRjaCByZWplY3RzIG9uIG5ldHdvcmstbGV2ZWwgZmFpbHVyZXMgKEROUywgY29ubmVjdGlvbiByZXNldCwgdGltZW91dCkg4oCUIGFsd2F5cyB0cmFuc2llbnQuXG4gICAgICBsYXN0RXJyb3IgPSBlO1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgTmV0d29yayBlcnJvciBmZXRjaGluZyAnJHt1cmx9JyAoYXR0ZW1wdCAke2F0dGVtcHR9LyR7UkVHSVNUUllfUFJPQkVfQVRURU1QVFN9KTogJHtlfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChhdHRlbXB0IDwgUkVHSVNUUllfUFJPQkVfQVRURU1QVFMpIHtcbiAgICAgIGF3YWl0IGRlbGF5KFJFR0lTVFJZX1BST0JFX0JBQ0tPRkZfTVMgKiAyICoqIChhdHRlbXB0IC0gMSkpO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IEVycm9ycy5FeHRlcm5hbChcbiAgICBgQ291bGQgbm90IHJlYWNoIHRoZSByZWdpc3RyeSBhdCAnJHt1cmx9JyBhZnRlciAke1JFR0lTVFJZX1BST0JFX0FUVEVNUFRTfSBhdHRlbXB0czogJHtsYXN0RXJyb3J9YCxcbiAgKTtcbn1cblxuLy8gQ2FuJ3QgdXNlIENES1RGXyBhcyBwcmVmaXggYmVjYXVzZSB5YXJncyAuZW52KFwiQ0RLVEZcIikgaW4gc3RyaWN0IG1vZGUgZG9lcyBub3QgYWxsb3cgdXMgdG9cbi8vIFJlZmVyIHRvOiBodHRwczovL2dpdGh1Yi5jb20veWFyZ3MveWFyZ3MvaXNzdWVzLzg3M1xuY29uc3QgeyBHSVRIVUJfQVBJX1RPS0VOX0NES1RGIH0gPSBwcm9jZXNzLmVudjtcblxuLy8ge1xuLy8gICBcInZlcnNpb25cIjogXCIxLjAuMFwiLFxuLy8gICBcIm5hbWVcIjogXCJ0ZXN0VVNIYXNGXCIsXG4vLyAgIFwicHJvYmxlbXNcIjogW1xuLy8gICAgIFwiZXh0cmFuZW91czogYXJjaGl2ZXItdXRpbHNAMi4xLjAgL3ByaXZhdGUvdmFyL2ZvbGRlcnMvel8vdjAzbDMzZDU1ZmI1N25ycjNiMXEwM2NoMDAwMGdxL1QvdGVzdFVTSGFzRi9ub2RlX21vZHVsZXMvYXJjaGl2ZXItdXRpbHNcIixcbi8vICAgXSxcbi8vICAgXCJkZXBlbmRlbmNpZXNcIjoge1xuLy8gICAgIFwiQGNka3RmL3Byb3ZpZGVyLXJhbmRvbVwiOiB7XG4vLyAgICAgICBcInZlcnNpb25cIjogXCIzLjAuMTFcIixcbi8vICAgICAgIFwicmVzb2x2ZWRcIjogXCJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY2RrdGYvcHJvdmlkZXItcmFuZG9tLy0vcHJvdmlkZXItcmFuZG9tLTMuMC4xMS50Z3pcIlxuLy8gICAgIH0sXG5jb25zdCBucG1MaXN0U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBkZXBlbmRlbmNpZXM6IHoucmVjb3JkKFxuICAgICAgei5zdHJpbmcoKSxcbiAgICAgIHpcbiAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgdmVyc2lvbjogei5zdHJpbmcoKSxcbiAgICAgICAgfSlcbiAgICAgICAgLmxvb3NlKCksXG4gICAgKSxcbiAgfSlcbiAgLnBhcnRpYWwoKVxuICAubG9vc2UoKTtcblxuLy8ge1xuLy8gICBcInR5cGVcIjogXCJ0cmVlXCIsXG4vLyAgIFwiZGF0YVwiOiB7XG4vLyAgICAgXCJ0eXBlXCI6IFwibGlzdFwiLFxuLy8gICAgIFwidHJlZXNcIjogW1xuLy8gICAgICAge1xuLy8gICAgICAgICBcIm5hbWVcIjogXCJAY2RrdGYvcHJvdmlkZXItcmFuZG9tQDMuMC4xMVwiLFxuLy8gICAgICAgICBcImNoaWxkcmVuXCI6IFtdLFxuLy8gICAgICAgICBcImhpbnRcIjogbnVsbCxcbi8vICAgICAgICAgXCJjb2xvclwiOiBcImJvbGRcIixcbi8vICAgICAgICAgXCJkZXB0aFwiOiAwXG4vLyAgICAgICB9XG4vLyAgICAgXVxuLy8gICB9XG4vLyB9XG5jb25zdCB5YXJuTGlzdFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgZGF0YTogelxuICAgICAgLm9iamVjdCh7XG4gICAgICAgIHRyZWVzOiB6LmFycmF5KFxuICAgICAgICAgIHpcbiAgICAgICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgICAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5wYXJ0aWFsKClcbiAgICAgICAgICAgIC5sb29zZSgpLFxuICAgICAgICApLFxuICAgICAgfSlcbiAgICAgIC5wYXJ0aWFsKClcbiAgICAgIC5sb29zZSgpLFxuICB9KVxuICAucGFydGlhbCgpXG4gIC5sb29zZSgpO1xuXG4vLyBbXG4vLyAgIHtcbi8vICAgICBcIm5hbWVcIjogXCJhcHBkaXJzXCIsXG4vLyAgICAgXCJ2ZXJzaW9uXCI6IFwiMS40LjRcIlxuLy8gICB9LFxuLy8gICB7XG5jb25zdCBwaXBQYWNrYWdlU2NoZW1hID0gei5hcnJheShcbiAgei5vYmplY3QoeyBuYW1lOiB6LnN0cmluZygpLCB2ZXJzaW9uOiB6LnN0cmluZygpIH0pLmxvb3NlKCksXG4pO1xuXG4vKipcbiAqIG1hbmFnZXMgaW5zdGFsbGluZywgdXBkYXRpbmcsIGFuZCByZW1vdmluZyBkZXBlbmRlbmNpZXNcbiAqIGluIHRoZSBwYWNrYWdlIHN5c3RlbSB1c2VkIGJ5IHRoZSB0YXJnZXQgbGFuZ3VhZ2Ugb2YgYSBDREtUTlxuICogcHJvamVjdFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUGFja2FnZU1hbmFnZXIge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgd29ya2luZ0RpcmVjdG9yeTogc3RyaW5nKSB7fVxuXG4gIHB1YmxpYyBzdGF0aWMgZm9yTGFuZ3VhZ2UoXG4gICAgbGFuZ3VhZ2U6IExhbmd1YWdlLFxuICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHN0cmluZyxcbiAgKTogUGFja2FnZU1hbmFnZXIge1xuICAgIHN3aXRjaCAobGFuZ3VhZ2UpIHtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuR086XG4gICAgICAgIHJldHVybiBuZXcgR29QYWNrYWdlTWFuYWdlcih3b3JraW5nRGlyZWN0b3J5KTtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuVFlQRVNDUklQVDpcbiAgICAgICAgcmV0dXJuIG5ldyBOb2RlUGFja2FnZU1hbmFnZXIod29ya2luZ0RpcmVjdG9yeSk7XG4gICAgICBjYXNlIExhbmd1YWdlLlBZVEhPTjpcbiAgICAgICAgcmV0dXJuIG5ldyBQeXRob25QYWNrYWdlTWFuYWdlcih3b3JraW5nRGlyZWN0b3J5KTtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuQ1NIQVJQOlxuICAgICAgICByZXR1cm4gbmV3IE51Z2V0UGFja2FnZU1hbmFnZXIod29ya2luZ0RpcmVjdG9yeSk7XG4gICAgICBjYXNlIExhbmd1YWdlLkpBVkE6XG4gICAgICAgIGlmIChHcmFkbGVQYWNrYWdlTWFuYWdlci5pc0dyYWRsZVByb2plY3Qod29ya2luZ0RpcmVjdG9yeSkpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IEdyYWRsZVBhY2thZ2VNYW5hZ2VyKHdvcmtpbmdEaXJlY3RvcnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgTWF2ZW5QYWNrYWdlTWFuYWdlcih3b3JraW5nRGlyZWN0b3J5KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBsYW5ndWFnZTogJHtsYW5ndWFnZX1gKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWJzdHJhY3QgYWRkUGFja2FnZShcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICAgIHBhY2thZ2VWZXJzaW9uPzogc3RyaW5nLFxuICAgIHNpbGVudD86IGJvb2xlYW4sXG4gICk6IFByb21pc2U8dm9pZD47XG4gIC8vIGFkZCBjaGVjayBpZiBwYWNrYWdlIGV4aXN0cyBhbHJlYWR5LiBtaWdodCBxdWVyeSB2ZXJzaW9uIGluIHRoZSBmdXR1cmUgYW5kIG9mZmVyIHRvIHVwZ3JhZGU/XG5cbiAgcHVibGljIGFic3RyYWN0IGlzTnBtVmVyc2lvbkF2YWlsYWJsZShcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICAgIHBhY2thZ2VWZXJzaW9uOiBzdHJpbmcsXG4gICk6IFByb21pc2U8Ym9vbGVhbj47XG5cbiAgcHVibGljIGFic3RyYWN0IGxpc3RQcm92aWRlclBhY2thZ2VzKCk6IFByb21pc2U8XG4gICAgeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W11cbiAgPjtcbn1cblxuY2xhc3MgTm9kZVBhY2thZ2VNYW5hZ2VyIGV4dGVuZHMgUGFja2FnZU1hbmFnZXIge1xuICBwcml2YXRlIGhhc1lhcm5Mb2NrZmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZXhpc3RzU3luYyhwYXRoLmpvaW4odGhpcy53b3JraW5nRGlyZWN0b3J5LCBcInlhcm4ubG9ja1wiKSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkUGFja2FnZShcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICAgIHBhY2thZ2VWZXJzaW9uPzogc3RyaW5nLFxuICAgIHNpbGVudD86IGJvb2xlYW4sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUubG9nKGBBZGRpbmcgcGFja2FnZSAke3BhY2thZ2VOYW1lfSBAICR7cGFja2FnZVZlcnNpb259YCk7XG5cbiAgICAvLyBwcm9iZSBmb3IgcGFja2FnZS1sb2NrLmpzb24gb3IgeWFybi5sb2NrXG4gICAgbGV0IGNvbW1hbmQgPSBcIm5wbVwiO1xuICAgIGxldCBhcmdzID0gW1wiaW5zdGFsbFwiXTtcblxuICAgIGlmICh0aGlzLmhhc1lhcm5Mb2NrZmlsZSgpKSB7XG4gICAgICBjb21tYW5kID0gXCJ5YXJuXCI7XG4gICAgICBhcmdzID0gW1wiYWRkXCJdO1xuICAgIH1cbiAgICBhcmdzLnB1c2goXG4gICAgICBwYWNrYWdlVmVyc2lvbiA/IHBhY2thZ2VOYW1lICsgXCJAXCIgKyBwYWNrYWdlVmVyc2lvbiA6IHBhY2thZ2VOYW1lLFxuICAgICk7XG5cbiAgICBpZiAoc2lsZW50KSB7XG4gICAgICBhcmdzLnB1c2goXCItLXNpbGVudFwiKTtcbiAgICAgIGFyZ3MucHVzaChcIi0tbm8tcHJvZ3Jlc3NcIik7XG4gICAgfVxuXG4gICAgLy8gSW5zdGFsbCBleGFjdCB2ZXJzaW9uXG4gICAgLy8gWWFybjogaHR0cHM6Ly9jbGFzc2ljLnlhcm5wa2cuY29tL2xhbmcvZW4vZG9jcy9jbGkvYWRkLyN0b2MteWFybi1hZGQtZXhhY3QtZVxuICAgIC8vIE5wbTogaHR0cHM6Ly9kb2NzLm5wbWpzLmNvbS9jbGkvdjgvY29tbWFuZHMvbnBtLWluc3RhbGwjc2F2ZS1leGFjdFxuICAgIGFyZ3MucHVzaChcIi1FXCIpO1xuXG4gICAgbG9nZ2VyLmluZm8oXG4gICAgICBgSW5zdGFsbGluZyBwYWNrYWdlICR7cGFja2FnZU5hbWV9IEAgJHtwYWNrYWdlVmVyc2lvbn0gdXNpbmcgJHtjb21tYW5kfS5gLFxuICAgICk7XG5cbiAgICBhd2FpdCBleGVjKGNvbW1hbmQsIGFyZ3MsIHsgY3dkOiB0aGlzLndvcmtpbmdEaXJlY3RvcnkgfSk7XG5cbiAgICBsb2dnZXIuaW5mbyhcIlBhY2thZ2UgaW5zdGFsbGVkLlwiKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpc05wbVZlcnNpb25BdmFpbGFibGUoXG4gICAgX3BhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgX3BhY2thZ2VWZXJzaW9uOiBzdHJpbmcsXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIFdlIGdldCB0aGUgbGlzdCBvZiBhdmFpbGFibGUgdmVyc2lvbnMgZnJvbSBucG0sIG5vIG5lZWQgdG8gY2hlY2sgaGVyZVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsaXN0WWFyblBhY2thZ2VzKCk6IFByb21pc2U8XG4gICAgeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W11cbiAgPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0ZG91dCA9IGF3YWl0IGV4ZWMoXCJ5YXJuXCIsIFtcImxpc3RcIiwgXCItLWpzb25cIl0sIHtcbiAgICAgICAgY3dkOiB0aGlzLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICB9KTtcblxuICAgICAgbG9nZ2VyLmRlYnVnKGBMaXN0aW5nIHlhcm4gcGFja2FnZXMgdXNpbmcgXCJ5YXJuIGxpc3QgLS1qc29uXCI6ICR7c3Rkb3V0fWApO1xuXG4gICAgICBjb25zdCBqc29uID0geWFybkxpc3RTY2hlbWEucGFyc2UoSlNPTi5wYXJzZShzdGRvdXQpKTtcblxuICAgICAgcmV0dXJuIChqc29uPy5kYXRhPy50cmVlcyB8fCBbXSlcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAoZGVwOiBhbnkpID0+XG4gICAgICAgICAgICBkZXAubmFtZS5zdGFydHNXaXRoKFwiQGNka3RmL3Byb3ZpZGVyLVwiKSB8fFxuICAgICAgICAgICAgZGVwLm5hbWUuc3RhcnRzV2l0aChcIkBjZGt0bi9wcm92aWRlci1cIiksXG4gICAgICAgIClcbiAgICAgICAgLm1hcCgoZGVwOiBhbnkpID0+ICh7XG4gICAgICAgICAgbmFtZTogYEAke2RlcC5uYW1lLnNwbGl0KFwiQFwiKVsxXX1gLFxuICAgICAgICAgIHZlcnNpb246IGRlcC5uYW1lLnNwbGl0KFwiQFwiKVsyXSxcbiAgICAgICAgfSkpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGRldGVybWluZSBpbnN0YWxsZWQgcGFja2FnZXMgdXNpbmcgJ3lhcm4gbGlzdCAtLWpzb24nOiAke2V9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsaXN0TnBtUGFja2FnZXMoKTogUHJvbWlzZTxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXVxuICA+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgZXhlYyhcIm5wbVwiLCBbXCJsaXN0XCIsIFwiLS1qc29uXCJdLCB7XG4gICAgICAgIGN3ZDogdGhpcy53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgfSk7XG5cbiAgICAgIGxvZ2dlci5kZWJ1ZyhgTGlzdGluZyBucG0gcGFja2FnZXMgdXNpbmcgXCJucG0gbGlzdCAtLWpzb25cIjogJHtzdGRvdXR9YCk7XG4gICAgICBjb25zdCBqc29uID0gbnBtTGlzdFNjaGVtYS5wYXJzZShKU09OLnBhcnNlKHN0ZG91dCkpO1xuXG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoanNvbj8uZGVwZW5kZW5jaWVzIHx8IHt9KVxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChbZGVwTmFtZV0pID0+XG4gICAgICAgICAgICBkZXBOYW1lLnN0YXJ0c1dpdGgoXCJAY2RrdGYvcHJvdmlkZXItXCIpIHx8XG4gICAgICAgICAgICBkZXBOYW1lLnN0YXJ0c1dpdGgoXCJAY2RrdG4vcHJvdmlkZXItXCIpLFxuICAgICAgICApXG4gICAgICAgIC5tYXAoKFtuYW1lLCBkZXBdKSA9PiAoeyBuYW1lLCB2ZXJzaW9uOiBkZXAudmVyc2lvbiB9KSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIGluc3RhbGxlZCBwYWNrYWdlcyB1c2luZyAnbnBtIGxpc3QgLS1qc29uJzogJHtlfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsaXN0UHJvdmlkZXJQYWNrYWdlcygpOiBQcm9taXNlPFxuICAgIHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfVtdXG4gID4ge1xuICAgIHJldHVybiB0aGlzLmhhc1lhcm5Mb2NrZmlsZSgpXG4gICAgICA/IHRoaXMubGlzdFlhcm5QYWNrYWdlcygpXG4gICAgICA6IHRoaXMubGlzdE5wbVBhY2thZ2VzKCk7XG4gIH1cbn1cblxuY2xhc3MgUHl0aG9uUGFja2FnZU1hbmFnZXIgZXh0ZW5kcyBQYWNrYWdlTWFuYWdlciB7XG4gIHByaXZhdGUgZ2V0IGFwcENvbW1hbmQoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKFxuICAgICAgICBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgcGF0aC5yZXNvbHZlKHRoaXMud29ya2luZ0RpcmVjdG9yeSwgXCJjZGt0Zi5qc29uXCIpLFxuICAgICAgICAgIFwidXRmOFwiLFxuICAgICAgICApLFxuICAgICAgKVtcImFwcFwiXTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgICAgYENvdWxkIG5vdCBmaW5kIGZpbmQgYW5kIHBhcnNlIGNka3RmLmpzb24gaW4gJHt0aGlzLndvcmtpbmdEaXJlY3Rvcnl9YCxcbiAgICAgICAgZSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGFkZFBhY2thZ2UoXG4gICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbj86IHN0cmluZyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdXNlUGlwZW52ID0gdGhpcy5hcHBDb21tYW5kLmluY2x1ZGVzKFwicGlwZW52XCIpO1xuXG4gICAgaWYgKHVzZVBpcGVudikge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBJbnN0YWxsaW5nIHBhY2thZ2UgJHtwYWNrYWdlTmFtZX0gQCAke3BhY2thZ2VWZXJzaW9ufSB1c2luZyBwaXBlbnYuYCxcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IGV4ZWMoXCJwaXBlbnZcIiwgW1wiaW5zdGFsbFwiLCBgJHtwYWNrYWdlTmFtZX1+PSR7cGFja2FnZVZlcnNpb259YF0sIHtcbiAgICAgICAgY3dkOiB0aGlzLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICAgIGVudjoge1xuICAgICAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgICAgIFBJUEVOVl9RVUlFVDogXCIxXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHN0ZGlvOiBbXCJpbmhlcml0XCIsIDEsIDFdLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnNvbGUubG9nKFwiUGFja2FnZSBpbnN0YWxsZWQuXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYEluc3RhbGxpbmcgcGFja2FnZSAke3BhY2thZ2VOYW1lfSBAICR7cGFja2FnZVZlcnNpb259IHVzaW5nIHBpcC5gLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgcmVxdWlyZW1lbnRzRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgIHRoaXMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgICAgXCJyZXF1aXJlbWVudHMudHh0XCIsXG4gICAgICApO1xuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHJlcXVpcmVtZW50c0ZpbGVQYXRoKSkge1xuICAgICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoXG4gICAgICAgICAgYENvdWxkIG5vdCBmaW5kIHJlcXVpcmVtZW50cy50eHQgaW4gJHt0aGlzLndvcmtpbmdEaXJlY3Rvcnl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVxdWlyZW1lbnRzID0gYXdhaXQgZnMucmVhZEZpbGUocmVxdWlyZW1lbnRzRmlsZVBhdGgsIFwidXRmOFwiKTtcbiAgICAgIGNvbnN0IHJlcXVpcmVtZW50TGluZSA9IHJlcXVpcmVtZW50c1xuICAgICAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAgICAgLmZpbmQoKGxpbmUpID0+IGxpbmUuaW5jbHVkZXMocGFja2FnZU5hbWUpKTtcblxuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgUmVhZCByZXF1aXJlbWVudHMudHh0IGZpbGUgYW5kIGZvdW5kIGxpbmUgaW5jbHVkaW5nICR7cGFja2FnZU5hbWV9OiAke3JlcXVpcmVtZW50TGluZX1gLFxuICAgICAgKTtcblxuICAgICAgaWYgKHJlcXVpcmVtZW50TGluZSkge1xuICAgICAgICBpZiAocGFja2FnZVZlcnNpb24gPyByZXF1aXJlbWVudExpbmUuaW5jbHVkZXMocGFja2FnZVZlcnNpb24pIDogdHJ1ZSkge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgYFBhY2thZ2UgJHtwYWNrYWdlTmFtZX0gYWxyZWFkeSBpbnN0YWxsZWQuIFNraXBwaW5nIGluc3RhbGxhdGlvbi5gLFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAgIGBGb3VuZCB0aGUgcGFja2FnZSBidXQgd2l0aCBhIGRpZmZlcmVudCB2ZXJzaW9uLCBjb250aW51aW5nYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld1JlcXVpcmVtZW50cyA9XG4gICAgICAgIHJlcXVpcmVtZW50c1xuICAgICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAgIC5maWx0ZXIoKGxpbmUpID0+ICFsaW5lLnN0YXJ0c1dpdGgocGFja2FnZU5hbWUpKVxuICAgICAgICAgIC5qb2luKFwiXFxuXCIpICtcbiAgICAgICAgYFxcbiR7cGFja2FnZU5hbWV9JHtwYWNrYWdlVmVyc2lvbiA/IGB+PSR7cGFja2FnZVZlcnNpb259YCA6IFwiXCJ9YDtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShyZXF1aXJlbWVudHNGaWxlUGF0aCwgbmV3UmVxdWlyZW1lbnRzLCBcInV0ZjhcIik7XG5cbiAgICAgIGF3YWl0IGV4ZWMoXCJwaXBcIiwgW1wiaW5zdGFsbFwiLCBcIi1yXCIsIFwicmVxdWlyZW1lbnRzLnR4dFwiXSwge1xuICAgICAgICBjd2Q6IHRoaXMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgICAgc3RkaW86IFtcImluaGVyaXRcIiwgMSwgMV0sXG4gICAgICB9KTtcblxuICAgICAgY29uc29sZS5sb2coXCJQYWNrYWdlIGluc3RhbGxlZC5cIik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGlzTnBtVmVyc2lvbkF2YWlsYWJsZShcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICAgIHBhY2thZ2VWZXJzaW9uOiBzdHJpbmcsXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBDaGVja2luZyBpZiAke3BhY2thZ2VOYW1lfUAke3BhY2thZ2VWZXJzaW9ufSBpcyBhdmFpbGFibGUgZm9yIFB5dGhvbmAsXG4gICAgKTtcbiAgICBjb25zdCB1cmwgPSBgaHR0cHM6Ly9weXBpLm9yZy9weXBpLyR7cGFja2FnZU5hbWV9LyR7cGFja2FnZVZlcnNpb259L2pzb25gO1xuICAgIGxvZ2dlci5kZWJ1ZyhgRmV0Y2hpbmcgcGFja2FnZSBpbmZvcm1hdGlvbiBmb3IgJHtwYWNrYWdlTmFtZX0gZnJvbSAke3VybH1gKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hXaXRoUmV0cnkodXJsKTtcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSBIVFRQX05PVF9GT1VORCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBQeVBJIHJlcG9ydHMgJHtwYWNrYWdlTmFtZX1AJHtwYWNrYWdlVmVyc2lvbn0gbm90IGZvdW5kYCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QganNvbiA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIGFueTtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgR290IHJlc3BvbnNlIGZyb20gUHlQSSBmb3IgJHtwYWNrYWdlTmFtZX1AJHtwYWNrYWdlVmVyc2lvbn06ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGpzb24sXG4gICAgICApfWAsXG4gICAgKTtcblxuICAgIHJldHVybiBCb29sZWFuKGpzb24uaW5mbyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbGlzdFBpcGVudlBhY2thZ2VzKCk6IFByb21pc2U8XG4gICAgeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W11cbiAgPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0ZG91dCA9IGF3YWl0IGV4ZWMoXG4gICAgICAgIFwicGlwZW52XCIsXG4gICAgICAgIFtcInJ1blwiLCBcInBpcFwiLCBcImxpc3RcIiwgXCItLWZvcm1hdD1qc29uXCJdLFxuICAgICAgICB7XG4gICAgICAgICAgY3dkOiB0aGlzLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgTGlzdGluZyBwaXBlbnYgcGFja2FnZXMgdXNpbmcgXCJwaXBlbnYgcnVuIHBpcCBsaXN0IC0tZm9ybWF0PWpzb25cIjogJHtzdGRvdXR9YCxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGxpc3QgPSBwaXBQYWNrYWdlU2NoZW1hLnBhcnNlKEpTT04ucGFyc2Uoc3Rkb3V0KSk7XG4gICAgICByZXR1cm4gbGlzdC5maWx0ZXIoXG4gICAgICAgIChpdGVtKSA9PlxuICAgICAgICAgIGl0ZW0ubmFtZS5zdGFydHNXaXRoKFwiY2RrdGYtY2RrdGYtcHJvdmlkZXJcIikgfHxcbiAgICAgICAgICBpdGVtLm5hbWUuc3RhcnRzV2l0aChcImNka3RuLXByb3ZpZGVyXCIpLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgaW5zdGFsbGVkIHBhY2thZ2VzIHVzaW5nICdwaXBlbnYgcnVuIHBpcCBsaXN0IC0tZm9ybWF0PWpzb24nOiAke2V9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGxpc3RQaXBQYWNrYWdlcygpOiBQcm9taXNlPHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfVtdPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0ZG91dCA9IGF3YWl0IGV4ZWMoXCJwaXBcIiwgW1wibGlzdFwiLCBcIi0tZm9ybWF0PWpzb25cIl0sIHtcbiAgICAgICAgY3dkOiB0aGlzLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICB9KTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYExpc3RpbmcgcGlwIHBhY2thZ2VzIHVzaW5nIFwicGlwIGxpc3QgLS1mb3JtYXQ9anNvblwiOiAke3N0ZG91dH1gLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgbGlzdCA9IHBpcFBhY2thZ2VTY2hlbWEucGFyc2UoSlNPTi5wYXJzZShzdGRvdXQpKTtcbiAgICAgIHJldHVybiBsaXN0LmZpbHRlcihcbiAgICAgICAgKGl0ZW0pID0+XG4gICAgICAgICAgaXRlbS5uYW1lLnN0YXJ0c1dpdGgoXCJjZGt0Zi1jZGt0Zi1wcm92aWRlclwiKSB8fFxuICAgICAgICAgIGl0ZW0ubmFtZS5zdGFydHNXaXRoKFwiY2RrdG4tcHJvdmlkZXJcIiksXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGRldGVybWluZSBpbnN0YWxsZWQgcGFja2FnZXMgdXNpbmcgJ3BpcCBsaXN0IC0tZm9ybWF0PWpzb24nOiAke2V9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGxpc3RQcm92aWRlclBhY2thZ2VzKCk6IFByb21pc2U8XG4gICAgeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W11cbiAgPiB7XG4gICAgcmV0dXJuIHRoaXMuYXBwQ29tbWFuZC5pbmNsdWRlcyhcInBpcGVudlwiKVxuICAgICAgPyB0aGlzLmxpc3RQaXBlbnZQYWNrYWdlcygpXG4gICAgICA6IHRoaXMubGlzdFBpcFBhY2thZ2VzKCk7XG4gIH1cbn1cblxuY2xhc3MgTnVnZXRQYWNrYWdlTWFuYWdlciBleHRlbmRzIFBhY2thZ2VNYW5hZ2VyIHtcbiAgcHVibGljIGFzeW5jIGFkZFBhY2thZ2UoXG4gICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbj86IHN0cmluZyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY29tbWFuZCA9IFwiZG90bmV0XCI7XG4gICAgY29uc3QgYXJncyA9IFtcImFkZFwiLCBcInBhY2thZ2VcIiwgcGFja2FnZU5hbWVdO1xuICAgIGlmIChwYWNrYWdlVmVyc2lvbikge1xuICAgICAgYXJncy5wdXNoKFwiLS12ZXJzaW9uXCIsIHBhY2thZ2VWZXJzaW9uKTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgSW5zdGFsbGluZyBwYWNrYWdlICR7cGFja2FnZU5hbWV9IEAgJHtwYWNrYWdlVmVyc2lvbn0gdXNpbmcgXCIke2NvbW1hbmR9ICR7YXJncy5qb2luKFxuICAgICAgICBcIiBcIixcbiAgICAgICl9XCIuYCxcbiAgICApO1xuXG4gICAgYXdhaXQgZXhlYyhjb21tYW5kLCBhcmdzLCB7IGN3ZDogdGhpcy53b3JraW5nRGlyZWN0b3J5IH0pO1xuXG4gICAgY29uc29sZS5sb2coXCJQYWNrYWdlIGluc3RhbGxlZC5cIik7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaXNOcG1WZXJzaW9uQXZhaWxhYmxlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb246IHN0cmluZyxcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBDaGVja2luZyBpZiAke3BhY2thZ2VOYW1lfUAke3BhY2thZ2VWZXJzaW9ufSBpcyBhdmFpbGFibGVgKTtcblxuICAgIGNvbnN0IFtvd25lciwgLi4ucmVzdF0gPSBwYWNrYWdlTmFtZS5zcGxpdChcIi5cIik7XG4gICAgY29uc3QgZml4ZWRPd25lciA9IHBhY2thZ2VOYW1lLnN0YXJ0c1dpdGgoXCJJby5DZGt0blwiKSA/IFwiY2RrdG5cIiA6IG93bmVyO1xuICAgIGNvbnN0IGlkID0gcmVzdFtyZXN0Lmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IHVybCA9IGBodHRwczovL2F6dXJlc2VhcmNoLXVzbmMubnVnZXQub3JnL3F1ZXJ5P3E9b3duZXI6JHtmaXhlZE93bmVyfSUyMGlkOiR7aWR9JnByZXJlbGVhc2U9ZmFsc2Umc2VtVmVyTGV2ZWw9Mi4wLjBgO1xuICAgIGxvZ2dlci5kZWJ1ZyhgRmV0Y2hpbmcgcGFja2FnZSBtZXRhZGF0YSBmcm9tIE51Z2V0OiAnJHt1cmx9J2ApO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaFdpdGhSZXRyeSh1cmwpO1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IEhUVFBfTk9UX0ZPVU5EKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYE51R2V0IHJlcG9ydHMgJHtwYWNrYWdlTmFtZX1AJHtwYWNrYWdlVmVyc2lvbn0gbm90IGZvdW5kYCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGpzb24gPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7XG4gICAgICBkYXRhOiB7IGlkOiBzdHJpbmc7IHZlcnNpb25zOiB7IHZlcnNpb246IHN0cmluZyB9W10gfVtdO1xuICAgIH07XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYEdvdCByZXNwb25zZSBmcm9tIE51R2V0IGZvciAke3BhY2thZ2VOYW1lfSA6ICR7SlNPTi5zdHJpbmdpZnkoanNvbil9YCxcbiAgICApO1xuXG4gICAgaWYgKCFqc29uPy5kYXRhPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTsgLy8gTm8gcGFja2FnZSBmb3VuZFxuICAgIH1cblxuICAgIGNvbnN0IHBhY2thZ2VWZXJzaW9ucyA9XG4gICAgICBqc29uLmRhdGEuZmluZCgocCkgPT4gcC5pZCA9PT0gcGFja2FnZU5hbWUpPy52ZXJzaW9ucyA/PyBbXTtcblxuICAgIGlmICghcGFja2FnZVZlcnNpb25zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlOyAvLyBObyBwYWNrYWdlIHJlbGVhc2UgbWF0Y2hpbmcgdGhlIGlkIGZvdW5kXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhY2thZ2VWZXJzaW9ucy5zb21lKCh2KSA9PiB2LnZlcnNpb24gPT09IHBhY2thZ2VWZXJzaW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsaXN0UHJvdmlkZXJQYWNrYWdlcygpOiBQcm9taXNlPFxuICAgIHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfVtdXG4gID4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGRvdXQgPSBhd2FpdCBleGVjKFwiZG90bmV0XCIsIFtcImxpc3RcIiwgXCJwYWNrYWdlXCJdLCB7XG4gICAgICAgIGN3ZDogdGhpcy53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgfSk7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBMaXN0aW5nIG51Z2V0IHBhY2thZ2VzIHVzaW5nIFwiZG90bmV0IGxpc3QgcGFja2FnZVwiOiAke3N0ZG91dH1gLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgcmVnZXggPVxuICAgICAgICAvXlxccyo+XFxzKCg/Okhhc2hpQ29ycFxcLkNka3RmfElvXFwuQ2RrdG4pXFwuUHJvdmlkZXJzXFwuW1xcdy5dKylcXHMrKCg/OlxcZCtcXC4pezJ9XFxkKyg/Oi1cXFMrKT8pXFxzKygoPzpcXGQrXFwuKXsyfVxcZCsoPzotXFxTKyk/KVxccyokLztcblxuICAgICAgcmV0dXJuIHN0ZG91dFxuICAgICAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAgICAgLm1hcCgobGluZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgLy8gRXhhbXBsZSBvdXRwdXQ6XG4gICAgICAgICAgLy8gUHJvamVjdCAnTXlUZXJyYWZvcm1TdGFjaycgaGFzIHRoZSBmb2xsb3dpbmcgcGFja2FnZSByZWZlcmVuY2VzXG4gICAgICAgICAgLy8gIFtuZXQ2LjBdOlxuICAgICAgICAgIC8vICBUb3AtbGV2ZWwgUGFja2FnZSAgICAgIFJlcXVlc3RlZCAgIFJlc29sdmVkXG4gICAgICAgICAgLy8gID4gSGFzaGlDb3JwLkNka3RmICAgICAgMC4wLjAgICAgICAgMC4wLjBcbiAgICAgICAgICAvLyBtYXRjaFswXSA9IGZ1bGwgbWF0Y2hcbiAgICAgICAgICAvLyBtYXRjaFsxXSA9IHBhY2thZ2UgbmFtZVxuICAgICAgICAgIC8vIG1hdGNoWzJdID0gcmVxdWVzdGVkIHZlcnNpb25cbiAgICAgICAgICAvLyBtYXRjaFszXSA9IHJlc29sdmVkIHZlcnNpb25cbiAgICAgICAgICByZXR1cm4gcmVnZXguZXhlYyhsaW5lKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcigobWF0Y2gpID0+ICEhbWF0Y2gpXG4gICAgICAgIC5tYXAoKG1hdGNoKSA9PiAoeyBuYW1lOiBtYXRjaCFbMV0sIHZlcnNpb246IG1hdGNoIVszXSB9KSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIGluc3RhbGxlZCBwYWNrYWdlcyB1c2luZyAnZG90bmV0IGxpc3QgcGFja2FnZSc6ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTaGFyZWQgYmFzZSBmb3IgdGhlIEphdmEgcGFja2FnZSBtYW5hZ2VycyAoTWF2ZW4gYW5kIEdyYWRsZSkuIEJvdGggaW5zdGFsbCBmcm9tIE1hdmVuIENlbnRyYWwsIHNvIHRoZSBjaGVjayBmb3JcbiAqIHdoZXRoZXIgYSBnaXZlbiBwcm92aWRlciB2ZXJzaW9uIGV4aXN0cyBpcyBjb21tb24gdG8gYm90aCBhbmQgbGl2ZXMgaGVyZTsgdGhlIGNvbmNyZXRlIHN1YmNsYXNzZXMgZGlmZmVyIG9ubHkgaW4gaG93XG4gKiB0aGV5IGRlY2xhcmUgYW5kIGxpc3QgZGVwZW5kZW5jaWVzIChwb20ueG1sIHZzIGJ1aWxkLmdyYWRsZSkuXG4gKi9cbmFic3RyYWN0IGNsYXNzIEphdmFQYWNrYWdlTWFuYWdlciBleHRlbmRzIFBhY2thZ2VNYW5hZ2VyIHtcbiAgLyoqXG4gICAqIFJlcG9ydHMgd2hldGhlciBgcGFja2FnZU5hbWVAcGFja2FnZVZlcnNpb25gIGlzIHB1Ymxpc2hlZCBvbiBNYXZlbiBDZW50cmFsIGJ5IHByb2JpbmcgdGhlIGFydGlmYWN0IHJlcG9zaXRvcnkgZm9yXG4gICAqIHRoZSB2ZXJzaW9uJ3MgYC5wb21gIGRpcmVjdGx5OiBIVFRQIDIwMCBtZWFucyBwcmVzZW50LCBhbnl0aGluZyBlbHNlIG1lYW5zIG5vdCBhdmFpbGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSBwYWNrYWdlTmFtZSAtIFRoZSBKYXZhIGNvb3JkaW5hdGVzIGluIFwiZ3JvdXAuYXJ0aWZhY3RcIiBmb3JtLCBlLmcuIFwiY29tLmhhc2hpY29ycC5jZGt0Zi1wcm92aWRlci1yYW5kb21cIi5cbiAgICogQHBhcmFtIHBhY2thZ2VWZXJzaW9uIC0gVGhlIGV4YWN0IHZlcnNpb24gdG8gY2hlY2sgZm9yLlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGAucG9tYCBleGlzdHMgb24gTWF2ZW4gQ2VudHJhbCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqIEB0aHJvd3MgSWYgYHBhY2thZ2VOYW1lYCBpcyBub3QgaW4gdGhlIGV4cGVjdGVkIFwiZ3JvdXAuYXJ0aWZhY3RcIiBmb3JtYXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaXNOcG1WZXJzaW9uQXZhaWxhYmxlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb246IHN0cmluZyxcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBDaGVja2luZyBpZiAke3BhY2thZ2VOYW1lfUAke3BhY2thZ2VWZXJzaW9ufSBpcyBhdmFpbGFibGVgKTtcblxuICAgIGNvbnN0IHBhcnRzID0gcGFja2FnZU5hbWUuc3BsaXQoXCIuXCIpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDMpIHtcbiAgICAgIHRocm93IEVycm9ycy5JbnRlcm5hbChcbiAgICAgICAgYEV4cGVjdGVkIHBhY2thZ2UgbmFtZSB0byBiZSBpbiBmb3JtYXQgXCJncm91cC5hcnRpZmFjdFwiLCBlLmcuIFwiY29tLmhhc2hpY29ycC5jZGt0Zi1wcm92aWRlci1nb29nbGVcIiwgZ290OiAke3BhY2thZ2VOYW1lfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGFydGlmYWN0SWQgPSBwYXJ0cy5wb3AoKTtcbiAgICBjb25zdCBncm91cElkID0gcGFydHMuam9pbihcIi5cIik7XG5cbiAgICAvLyBQcm9iZSB0aGUgYXJ0aWZhY3QgQ0ROIGRpcmVjdGx5IGZvciB0aGUgLnBvbTogMjAwID0gcHJlc2VudCwgYW55dGhpbmcgZWxzZSA9IG5vdCBhdmFpbGFibGUuXG4gICAgY29uc3QgZ3JvdXBQYXRoID0gZ3JvdXBJZC5yZXBsYWNlKC9cXC4vZywgXCIvXCIpO1xuICAgIGNvbnN0IHVybCA9IGBodHRwczovL3JlcG8xLm1hdmVuLm9yZy9tYXZlbjIvJHtncm91cFBhdGh9LyR7YXJ0aWZhY3RJZH0vJHtwYWNrYWdlVmVyc2lvbn0vJHthcnRpZmFjdElkfS0ke3BhY2thZ2VWZXJzaW9ufS5wb21gO1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBDaGVja2luZyB3aGV0aGVyICR7cGFja2FnZU5hbWV9QCR7cGFja2FnZVZlcnNpb259IGV4aXN0cyBvbiBNYXZlbiBDZW50cmFsIHVuZGVyICcke3VybH0nYCxcbiAgICApO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hXaXRoUmV0cnkodXJsKTtcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSBIVFRQX05PVF9GT1VORCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgTWF2ZW4gQ2VudHJhbCByZXBvcnRzICR7cGFja2FnZU5hbWV9QCR7cGFja2FnZVZlcnNpb259IG5vdCBmb3VuZGAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgTWF2ZW4gQ2VudHJhbCByZXNwb25kZWQgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c30gZm9yICR7cGFja2FnZU5hbWV9QCR7cGFja2FnZVZlcnNpb259YCxcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlLm9rO1xuICB9XG59XG5cbmNsYXNzIE1hdmVuUGFja2FnZU1hbmFnZXIgZXh0ZW5kcyBKYXZhUGFja2FnZU1hbmFnZXIge1xuICBwdWJsaWMgYXN5bmMgYWRkUGFja2FnZShcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICAgIHBhY2thZ2VWZXJzaW9uID0gXCJMQVRFU1RcIiwgLy8gdGhlIGxhdGVzdCBvcHRpb24gaXMgZGVwcmVjYXRlZCBpbiBtYXZlbiAzLjVcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5sb2coYEFkZGluZyAke3BhY2thZ2VOYW1lfSBAICR7cGFja2FnZVZlcnNpb259IHRvIHBvbS54bWxgKTtcbiAgICAvLyBBc3NlcnQgcG9tLnhtbCBleGlzdHNcbiAgICBjb25zdCBwb21QYXRoID0gcGF0aC5qb2luKHRoaXMud29ya2luZ0RpcmVjdG9yeSwgXCJwb20ueG1sXCIpO1xuICAgIGlmICghZXhpc3RzU3luYyhwb21QYXRoKSkge1xuICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFxuICAgICAgICBcIk5vIHBvbS54bWwgZm91bmQgaW4gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gUGxlYXNlIHJ1biB0aGUgY29tbWFuZCBmcm9tIHRoZSByb290IG9mIHlvdXIgcHJvamVjdC5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcG9tID0gYXdhaXQgZnMucmVhZEZpbGUocG9tUGF0aCwgXCJ1dGY4XCIpO1xuICAgIGNvbnN0IHBvbVhtbCA9IChhd2FpdCB4bWwyanMocG9tLCB7fSkpIGFzIEVsZW1lbnQ7XG5cbiAgICAvLyBNdXRhdGUgZGVwZW5kZW5jaWVzXG4gICAgY29uc3QgbmFtZVBhcnRzID0gcGFja2FnZU5hbWUuc3BsaXQoXCIuXCIpO1xuICAgIGNvbnN0IGdyb3VwSWQgPSBuYW1lUGFydHMuc2xpY2UoMCwgbmFtZVBhcnRzLmxlbmd0aCAtIDEpLmpvaW4oXCIuXCIpO1xuICAgIGNvbnN0IGFydGlmYWN0SWQgPSBuYW1lUGFydHNbbmFtZVBhcnRzLmxlbmd0aCAtIDFdO1xuXG4gICAgY29uc3QgbmV3RGVwZW5kZW5jeSA9IChhd2FpdCB4bWwyanMoXG4gICAgICBgPGRlcGVuZGVuY3k+XG4gICAgPGdyb3VwSWQ+JHtncm91cElkfTwvZ3JvdXBJZD5cbiAgICA8YXJ0aWZhY3RJZD4ke2FydGlmYWN0SWR9PC9hcnRpZmFjdElkPlxuICAgIDx2ZXJzaW9uPiR7cGFja2FnZVZlcnNpb259PC92ZXJzaW9uPlxuPC9kZXBlbmRlbmN5PmAsXG4gICAgKSkgYXMgRWxlbWVudDtcblxuICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IHBvbVhtbC5lbGVtZW50c1xuICAgICAgPy5maW5kKChlbCkgPT4gZWwubmFtZSA9PT0gXCJwcm9qZWN0XCIpXG4gICAgICA/LmVsZW1lbnRzPy5maW5kKChlbCkgPT4gZWwubmFtZSA9PT0gXCJkZXBlbmRlbmNpZXNcIik7XG5cbiAgICBpZiAoIWRlcGVuZGVuY2llcykge1xuICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKGBDb3VsZCBub3QgZmluZCBkZXBlbmRlbmNpZXMgc2VjdGlvbiBpbiB0aGUgcG9tLnhtbGApO1xuICAgIH1cbiAgICBkZXBlbmRlbmNpZXMuZWxlbWVudHMgPSAoZGVwZW5kZW5jaWVzPy5lbGVtZW50cyB8fCBbXSkuZmlsdGVyKFxuICAgICAgKGVsKSA9PlxuICAgICAgICBlbC5lbGVtZW50cz8uc29tZShcbiAgICAgICAgICAoZ3JvdXApID0+XG4gICAgICAgICAgICBncm91cC5uYW1lID09PSBcImdyb3VwSWRcIiAmJiBncm91cC5lbGVtZW50cz8uWzBdLnRleHQgIT09IGdyb3VwSWQsXG4gICAgICAgICkgfHxcbiAgICAgICAgZWwuZWxlbWVudHM/LnNvbWUoXG4gICAgICAgICAgKGFydGlmYWN0KSA9PlxuICAgICAgICAgICAgYXJ0aWZhY3QubmFtZSA9PT0gXCJhcnRpZmFjdElkXCIgJiZcbiAgICAgICAgICAgIGFydGlmYWN0LmVsZW1lbnRzPy5bMF0udGV4dCAhPT0gYXJ0aWZhY3RJZCxcbiAgICAgICAgKSxcbiAgICApO1xuICAgIGRlcGVuZGVuY2llcz8uZWxlbWVudHM/LnB1c2gobmV3RGVwZW5kZW5jeS5lbGVtZW50cyFbMF0pO1xuXG4gICAgLy8gV3JpdGUgbmV3IHBvbS54bWxcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUocG9tUGF0aCwganMyeG1sKHBvbVhtbCwgeyBzcGFjZXM6IDIgfSkpO1xuXG4gICAgLy8gSW5zdGFsbFxuICAgIGF3YWl0IGV4ZWMoXCJtdm5cIiwgW1wiaW5zdGFsbFwiXSwgeyBjd2Q6IHRoaXMud29ya2luZ0RpcmVjdG9yeSB9KTtcbiAgICBjb25zb2xlLmxvZyhcIlBhY2thZ2UgaW5zdGFsbGVkLlwiKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsaXN0UHJvdmlkZXJQYWNrYWdlcygpOiBQcm9taXNlPFxuICAgIHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfVtdXG4gID4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwb21QYXRoID0gcGF0aC5qb2luKHRoaXMud29ya2luZ0RpcmVjdG9yeSwgXCJwb20ueG1sXCIpO1xuICAgICAgaWYgKCFleGlzdHNTeW5jKHBvbVBhdGgpKSB7XG4gICAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgICAgICBcIk5vIHBvbS54bWwgZm91bmQgaW4gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gUGxlYXNlIHJ1biB0aGUgY29tbWFuZCBmcm9tIHRoZSByb290IG9mIHlvdXIgcHJvamVjdC5cIixcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcG9tID0gYXdhaXQgZnMucmVhZEZpbGUocG9tUGF0aCwgXCJ1dGY4XCIpO1xuICAgICAgY29uc3QgcG9tWG1sID0gKGF3YWl0IHhtbDJqcyhwb20sIHt9KSkgYXMgRWxlbWVudDtcblxuICAgICAgY29uc3QgZGVwZW5kZW5jaWVzID1cbiAgICAgICAgcG9tWG1sLmVsZW1lbnRzXG4gICAgICAgICAgPy5maW5kKChlbCkgPT4gZWwubmFtZSA9PT0gXCJwcm9qZWN0XCIpXG4gICAgICAgICAgPy5lbGVtZW50cz8uZmluZCgoZWwpID0+IGVsLm5hbWUgPT09IFwiZGVwZW5kZW5jaWVzXCIpPy5lbGVtZW50cyA/PyBbXTtcblxuICAgICAgcmV0dXJuIGRlcGVuZGVuY2llc1xuICAgICAgICAubWFwKChkZXApID0+ICh7XG4gICAgICAgICAgbmFtZTogYCR7XG4gICAgICAgICAgICBkZXAuZWxlbWVudHM/LmZpbmQoKGVsKSA9PiBlbC5uYW1lID09PSBcImdyb3VwSWRcIik/LmVsZW1lbnRzPy5bMF1cbiAgICAgICAgICAgICAgLnRleHRcbiAgICAgICAgICB9LiR7XG4gICAgICAgICAgICBkZXAuZWxlbWVudHM/LmZpbmQoKGVsKSA9PiBlbC5uYW1lID09PSBcImFydGlmYWN0SWRcIik/LmVsZW1lbnRzPy5bMF1cbiAgICAgICAgICAgICAgLnRleHRcbiAgICAgICAgICB9YCxcbiAgICAgICAgICB2ZXJzaW9uOiBkZXAuZWxlbWVudHM/LmZpbmQoKGVsKSA9PiBlbC5uYW1lID09PSBcInZlcnNpb25cIilcbiAgICAgICAgICAgID8uZWxlbWVudHM/LlswXS50ZXh0IGFzIHN0cmluZyxcbiAgICAgICAgfSkpXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKGRlcCkgPT5cbiAgICAgICAgICAgIGRlcC5uYW1lLnN0YXJ0c1dpdGgoXCJjb20uaGFzaGljb3JwLmNka3RmLXByb3ZpZGVyLVwiKSB8fFxuICAgICAgICAgICAgZGVwLm5hbWUuc3RhcnRzV2l0aChcImlvLmNka3RuLmNka3RuLXByb3ZpZGVyLVwiKSxcbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgaW5zdGFsbGVkIHBhY2thZ2VzIHJlYWRpbmcgdGhlIHBvbS54bWw6ICR7ZS5tZXNzYWdlfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBHcmFkbGVQYWNrYWdlTWFuYWdlciBleHRlbmRzIEphdmFQYWNrYWdlTWFuYWdlciB7XG4gIHB1YmxpYyBzdGF0aWMgaXNHcmFkbGVQcm9qZWN0KHdvcmtpbmdEaXJlY3Rvcnk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0dyYWRsZVByb2plY3Qod29ya2luZ0RpcmVjdG9yeSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkUGFja2FnZShcbiAgICBwYWNrYWdlRlFOOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb24gPSBcImxhdGVzdC5yZWxlYXNlXCIsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGJ1aWxkR3JhZGxlUGF0aCA9IHBhdGguam9pbih0aGlzLndvcmtpbmdEaXJlY3RvcnksIFwiYnVpbGQuZ3JhZGxlXCIpO1xuICAgIGNvbnN0IGJ1aWxkR3JhZGxlID0gYXdhaXQgZnMucmVhZEZpbGUoYnVpbGRHcmFkbGVQYXRoLCBcInV0ZjhcIik7XG4gICAgY29uc3QgYnVpbGRHcmFkbGVMaW5lcyA9IGJ1aWxkR3JhZGxlLnNwbGl0KC9cXHI/XFxuLyk7XG5cbiAgICBjb25zdCBkZXBlbmRlbmNpZXNSZWdleCA9IC9kZXBlbmRlbmNpZXNcXHMrXFx7L2k7XG4gICAgY29uc3QgZGVwZW5kZW5jeUJsb2NrU3RhcnQgPSBidWlsZEdyYWRsZUxpbmVzLmZpbmRJbmRleCgobGluZSkgPT5cbiAgICAgIGRlcGVuZGVuY2llc1JlZ2V4LnRlc3QobGluZSksXG4gICAgKTtcbiAgICBpZiAoZGVwZW5kZW5jeUJsb2NrU3RhcnQgPT09IC0xKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoXG4gICAgICAgIFwiQ291bGQgbm90IGZpbmQgZGVwZW5kZW5jaWVzIHNlY3Rpb24gaW4gdGhlIGJ1aWxkLmdyYWRsZVwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYWNrYWdlU2VnbWVudHMgPSBwYWNrYWdlRlFOLnNwbGl0KFwiLlwiKTtcbiAgICBjb25zdCBwYWNrYWdlTmFtZSA9IHBhY2thZ2VTZWdtZW50cy5wb3AoKTtcbiAgICBjb25zdCBncm91cE5hbWUgPSBwYWNrYWdlU2VnbWVudHMuam9pbihcIi5cIik7XG4gICAgY29uc3QgZGVwZW5kZW5jeVNwZWNpZmllciA9IGAke2dyb3VwTmFtZX06JHtwYWNrYWdlTmFtZX1gO1xuICAgIGNvbnN0IGRlcGVuZGVuY3lBbmRWZXJzaW9uU3BlY2lmaWVyID0gYCR7ZGVwZW5kZW5jeVNwZWNpZmllcn06JHtwYWNrYWdlVmVyc2lvbn1gO1xuXG4gICAgY29uc3QgZXhpc3RpbmdEZXBlbmRlbmN5ID0gYnVpbGRHcmFkbGVMaW5lcy5maW5kSW5kZXgoKGxpbmUpID0+XG4gICAgICBsaW5lLmluY2x1ZGVzKGRlcGVuZGVuY3lTcGVjaWZpZXIpLFxuICAgICk7XG4gICAgaWYgKGV4aXN0aW5nRGVwZW5kZW5jeSAhPT0gLTEpIHtcbiAgICAgIGJ1aWxkR3JhZGxlTGluZXMuc3BsaWNlKGV4aXN0aW5nRGVwZW5kZW5jeSwgMSk7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3UGFja2FnZURlcGVuZGVuY3kgPSBgXFx0aW1wbGVtZW50YXRpb24gJyR7ZGVwZW5kZW5jeUFuZFZlcnNpb25TcGVjaWZpZXJ9J2A7XG4gICAgYnVpbGRHcmFkbGVMaW5lcy5zcGxpY2UoZGVwZW5kZW5jeUJsb2NrU3RhcnQgKyAxLCAwLCBuZXdQYWNrYWdlRGVwZW5kZW5jeSk7XG5cbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoYnVpbGRHcmFkbGVQYXRoLCBidWlsZEdyYWRsZUxpbmVzLmpvaW4oXCJcXG5cIikpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxpc3RQcm92aWRlclBhY2thZ2VzKCk6IFByb21pc2U8XG4gICAgeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W11cbiAgPiB7XG4gICAgY29uc3QgZGVwZW5kZW5jaWVzID0gYXdhaXQgZ2V0R3JhZGxlRGVwZW5kZW5jaWVzKCk7XG4gICAgaWYgKCFkZXBlbmRlbmNpZXMpIHtcbiAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcIkNvdWxkIG5vdCBmaW5kIGFueSBkZXBlbmRlbmNpZXNcIik7XG4gICAgfVxuXG4gICAgY29uc3QgZGVwZW5kZW5jeUxpc3QgPSBkZXBlbmRlbmNpZXNcbiAgICAgIC5tYXAoKGxpbmUpID0+IGdldERlcGVuZGVuY3lJbmZvcm1hdGlvbkZyb21MaW5lKGxpbmUpKVxuICAgICAgLmZpbHRlcigoZGVwKSA9PiB7XG4gICAgICAgIGlmICghZGVwKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgZGVwLm5hbWUuaW5jbHVkZXMoXCJjZGt0Zi1wcm92aWRlci1cIikgfHxcbiAgICAgICAgICBkZXAubmFtZS5pbmNsdWRlcyhcImNka3RuLXByb3ZpZGVyLVwiKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICAgIC5tYXAoKGRlcCkgPT4gKHtcbiAgICAgICAgbmFtZTogYCR7ZGVwIS5ncm91cH0uJHtkZXAhLm5hbWV9YCxcbiAgICAgICAgdmVyc2lvbjogZGVwIS52ZXJzaW9uLFxuICAgICAgfSkpO1xuXG4gICAgcmV0dXJuIGRlcGVuZGVuY3lMaXN0O1xuICB9XG59XG5cbmNsYXNzIEdvUGFja2FnZU1hbmFnZXIgZXh0ZW5kcyBQYWNrYWdlTWFuYWdlciB7XG4gIHB1YmxpYyBhc3luYyBhZGRQYWNrYWdlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb24/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUubG9nKGBBZGRpbmcgcGFja2FnZSAke3BhY2thZ2VOYW1lfSBAICR7cGFja2FnZVZlcnNpb259YCk7XG5cbiAgICBjb25zdCBtYWpvclZlcnNpb246IG51bWJlciB8IHVuZGVmaW5lZCA9IHBhY2thZ2VWZXJzaW9uXG4gICAgICA/IHNlbXZlci5tYWpvcihwYWNrYWdlVmVyc2lvbilcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgbGV0IHZlcnNpb25QYWNrYWdlU3VmZml4ID0gXCJcIjtcbiAgICBpZiAodHlwZW9mIG1ham9yVmVyc2lvbiA9PT0gXCJudW1iZXJcIiAmJiBtYWpvclZlcnNpb24gPiAxKSB7XG4gICAgICB2ZXJzaW9uUGFja2FnZVN1ZmZpeCA9IGAvdiR7bWFqb3JWZXJzaW9ufWA7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYFJ1bm5pbmcgJ2dvIGdldCAke3BhY2thZ2VOYW1lfSR7dmVyc2lvblBhY2thZ2VTdWZmaXh9QHYke3BhY2thZ2VWZXJzaW9ufSdgLFxuICAgICk7XG4gICAgLy8gSW5zdGFsbFxuICAgIGF3YWl0IGV4ZWMoXG4gICAgICBcImdvXCIsXG4gICAgICBbXCJnZXRcIiwgYCR7cGFja2FnZU5hbWV9JHt2ZXJzaW9uUGFja2FnZVN1ZmZpeH1AdiR7cGFja2FnZVZlcnNpb259YF0sXG4gICAgICB7XG4gICAgICAgIGN3ZDogdGhpcy53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc29sZS5sb2coXCJQYWNrYWdlIGluc3RhbGxlZC5cIik7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaXNOcG1WZXJzaW9uQXZhaWxhYmxlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb246IHN0cmluZyxcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBDaGVja2luZyBpZiAke3BhY2thZ2VOYW1lfUAke3BhY2thZ2VWZXJzaW9ufSBpcyBhdmFpbGFibGVgKTtcblxuICAgIC8vIGUuZy4gZ2l0aHViLmNvbS9jZGt0Zi9jZGt0Zi1wcm92aWRlci1nb29nbGUtZ28vZ29vZ2xlXG4gICAgY29uc3QgcGFydHMgPSBwYWNrYWdlTmFtZS5zcGxpdChcIi9cIik7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gNCkge1xuICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKFxuICAgICAgICBgRXhwZWN0aW5nIEdvIHBhY2thZ2UgbmFtZSB0byBiZSBpbiB0aGUgZm9ybWF0IG9mIGdpdGh1Yi5jb20vPG9yZz4vPHJlcG8+LzxwYWNrYWdlPiwgZ290ICR7cGFja2FnZU5hbWV9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JnID0gcGFydHNbMV07XG4gICAgY29uc3QgcmVwbyA9IHBhcnRzWzJdO1xuICAgIGNvbnN0IHBhY2thZ2VQYXRoID0gcGFydHNbM107XG5cbiAgICBjb25zdCB1cmwgPSBgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8ke29yZ30vJHtyZXBvfS9naXQvcmVmL3RhZ3MvJHtwYWNrYWdlUGF0aH0vdiR7cGFja2FnZVZlcnNpb259YDtcbiAgICBsb2dnZXIuZGVidWcoYEZldGNoaW5nIHRhZ3MgZm9yICR7b3JnfS8ke3JlcG99IGZyb20gJyR7dXJsfSdgKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoV2l0aFJldHJ5KHVybCwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vdm5kLmdpdGh1Yitqc29uXCIsXG4gICAgICAgIFwiVXNlci1BZ2VudFwiOiBcIk9wZW5Db25zdHJ1Y3RzL2Nka3RuLWNsaVwiLFxuICAgICAgICAuLi4oR0lUSFVCX0FQSV9UT0tFTl9DREtURlxuICAgICAgICAgID8geyBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7R0lUSFVCX0FQSV9UT0tFTl9DREtURn1gIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSBIVFRQX05PVF9GT1VORCkge1xuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIGBDb3VsZCBub3QgZmluZCB0aGUgdGFnICR7cGFja2FnZVBhdGh9L3Yke3BhY2thZ2VWZXJzaW9ufSBpbiB0aGUgcmVwb3NpdG9yeSAke29yZ30vJHtyZXBvfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGpzb24gPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyBhbnk7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYEdvdCByZXNwb25zZSBmcm9tIEdpdEh1YnMgcmVwb3NpdG9yeSB0YWcgZW5kcG9pbnQgZm9yICR7cGFja2FnZU5hbWV9OiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBqc29uLFxuICAgICAgKX1gLFxuICAgICk7XG5cbiAgICByZXR1cm4gQm9vbGVhbihqc29uICYmIGpzb24ucmVmKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsaXN0UHJvdmlkZXJQYWNrYWdlcygpOiBQcm9taXNlPFxuICAgIHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfVtdXG4gID4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBnb1N1bVBhdGggPSBwYXRoLmpvaW4odGhpcy53b3JraW5nRGlyZWN0b3J5LCBcImdvLnN1bVwiKTtcbiAgICAgIGlmICghZXhpc3RzU3luYyhnb1N1bVBhdGgpKSB7XG4gICAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgICAgICBcIk5vIGdvLnN1bSBmb3VuZCBpbiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBQbGVhc2UgcnVuIHRoZSBjb21tYW5kIGZyb20gdGhlIHJvb3Qgb2YgeW91ciBwcm9qZWN0LlwiLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBnb1N1bSA9IGF3YWl0IGZzLnJlYWRGaWxlKGdvU3VtUGF0aCwgXCJ1dGY4XCIpO1xuICAgICAgY29uc3QgZGVkdXBlZFByb3ZpZGVyTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICAgIHJldHVybiBnb1N1bVxuICAgICAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAobGluZSkgPT5cbiAgICAgICAgICAgIGxpbmUuc3RhcnRzV2l0aChcImdpdGh1Yi5jb20vaGFzaGljb3JwL2Nka3RmLXByb3ZpZGVyXCIpIHx8XG4gICAgICAgICAgICBsaW5lLnN0YXJ0c1dpdGgoXCJnaXRodWIuY29tL2Nka3RmL2Nka3RmLXByb3ZpZGVyXCIpIHx8XG4gICAgICAgICAgICBsaW5lLnN0YXJ0c1dpdGgoXCJnaXRodWIuY29tL2Nka3RuLWlvL2Nka3RuLXByb3ZpZGVyXCIpLFxuICAgICAgICApXG4gICAgICAgIC5tYXAoKGxpbmUpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJ0cyA9IGxpbmUuc3BsaXQoXCIgXCIpO1xuICAgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDMpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9ycy5JbnRlcm5hbChcbiAgICAgICAgICAgICAgYEV4cGVjdGVkIGxpbmUgaW4gZ28uc3VtIHRvIGJlIGluIHRoZSBmb3JtYXQgb2YgJzxwYWNrYWdlPiA8dmVyc2lvbj4gPGNoZWNrc3VtPicsIGdvdDogJHtsaW5lfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHBhcnRbMF0gY291bGQgYmUgZ2l0aHViLmNvbS9hd3MvY29uc3RydWN0cy1nby9jb25zdHJ1Y3RzL3YxMFxuICAgICAgICAgIGNvbnN0IG5hbWUgPSBwYXJ0c1swXS5zcGxpdChcIi9cIikuc2xpY2UoMCwgNCkuam9pbihcIi9cIik7XG5cbiAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gcGFydHNbMV0uc3BsaXQoXCIvXCIpWzBdO1xuXG4gICAgICAgICAgaWYgKGRlZHVwZWRQcm92aWRlck5hbWVzLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgbmFtZTogXCJcIiwgdmVyc2lvbjogXCJcIiB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRlZHVwZWRQcm92aWRlck5hbWVzLmFkZChuYW1lKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdmVyc2lvbixcbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChwcm92aWRlckluZm8pID0+ICEhcHJvdmlkZXJJbmZvLm5hbWUgJiYgISFwcm92aWRlckluZm8udmVyc2lvbixcbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgaW5zdGFsbGVkIHBhY2thZ2VzIHJlYWRpbmcgdGhlIGdvLnN1bTogJHtlLm1lc3NhZ2V9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -17,15 +17,31 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
17
17
|
}) : function(o, v) {
|
|
18
18
|
o["default"] = v;
|
|
19
19
|
});
|
|
20
|
-
var __importStar = (this && this.__importStar) || function (
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
};
|
|
20
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
21
|
+
var ownKeys = function(o) {
|
|
22
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
23
|
+
var ar = [];
|
|
24
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
25
|
+
return ar;
|
|
26
|
+
};
|
|
27
|
+
return ownKeys(o);
|
|
28
|
+
};
|
|
29
|
+
return function (mod) {
|
|
30
|
+
if (mod && mod.__esModule) return mod;
|
|
31
|
+
var result = {};
|
|
32
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
33
|
+
__setModuleDefault(result, mod);
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
36
|
+
})();
|
|
27
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
-
exports.
|
|
38
|
+
exports.resetFetchCache = resetFetchCache;
|
|
39
|
+
exports.getAllPrebuiltProviders = getAllPrebuiltProviders;
|
|
40
|
+
exports.getNpmPackageName = getNpmPackageName;
|
|
41
|
+
exports.getPrebuiltProviderRepositoryName = getPrebuiltProviderRepositoryName;
|
|
42
|
+
exports.getAllPrebuiltProviderVersions = getAllPrebuiltProviderVersions;
|
|
43
|
+
exports.getPrebuiltProviderVersions = getPrebuiltProviderVersions;
|
|
44
|
+
exports.getPrebuiltProviderVersionInformation = getPrebuiltProviderVersionInformation;
|
|
29
45
|
const undici_1 = require("undici");
|
|
30
46
|
const semver = __importStar(require("semver"));
|
|
31
47
|
const commons_1 = require("@cdktn/commons");
|
|
@@ -52,7 +68,6 @@ async function cachedFetch(url) {
|
|
|
52
68
|
async function resetFetchCache() {
|
|
53
69
|
fetchCache.clear();
|
|
54
70
|
}
|
|
55
|
-
exports.resetFetchCache = resetFetchCache;
|
|
56
71
|
async function fetchWrapped(url) {
|
|
57
72
|
let response;
|
|
58
73
|
try {
|
|
@@ -85,7 +100,6 @@ async function fetchWrapped(url) {
|
|
|
85
100
|
async function getAllPrebuiltProviders() {
|
|
86
101
|
return cachedFetch(providersMapUrl);
|
|
87
102
|
}
|
|
88
|
-
exports.getAllPrebuiltProviders = getAllPrebuiltProviders;
|
|
89
103
|
async function getNpmPackageName(constraint, useCdktn) {
|
|
90
104
|
const providers = await getAllPrebuiltProviders();
|
|
91
105
|
const entry = Object.entries(providers).find(([, p]) => dependency_manager_1.ProviderConstraint.fromConfigEntry(p).source.toLowerCase() ===
|
|
@@ -96,7 +110,6 @@ async function getNpmPackageName(constraint, useCdktn) {
|
|
|
96
110
|
const name = entry[0];
|
|
97
111
|
return useCdktn ? `@cdktn/provider-${name}` : `@cdktf/provider-${name}`;
|
|
98
112
|
}
|
|
99
|
-
exports.getNpmPackageName = getNpmPackageName;
|
|
100
113
|
async function getPrebuiltProviderRepositoryName(packageName) {
|
|
101
114
|
var _a;
|
|
102
115
|
const url = `https://registry.npmjs.org/${packageName}`;
|
|
@@ -110,7 +123,6 @@ async function getPrebuiltProviderRepositoryName(packageName) {
|
|
|
110
123
|
return "";
|
|
111
124
|
return match[1];
|
|
112
125
|
}
|
|
113
|
-
exports.getPrebuiltProviderRepositoryName = getPrebuiltProviderRepositoryName;
|
|
114
126
|
async function getAllPrebuiltProviderVersions(packageName) {
|
|
115
127
|
const url = `https://registry.npmjs.org/${packageName}`;
|
|
116
128
|
const result = await cachedFetch(url);
|
|
@@ -146,7 +158,6 @@ async function getAllPrebuiltProviderVersions(packageName) {
|
|
|
146
158
|
});
|
|
147
159
|
return versions;
|
|
148
160
|
}
|
|
149
|
-
exports.getAllPrebuiltProviderVersions = getAllPrebuiltProviderVersions;
|
|
150
161
|
function cdktfVersionMatches(cdktfVersion, cdktfPeerDependencyConstraint) {
|
|
151
162
|
return semver.satisfies(cdktfVersion, cdktfPeerDependencyConstraint);
|
|
152
163
|
}
|
|
@@ -189,7 +200,6 @@ async function getPrebuiltProviderVersions(constraint, cdktfVersion) {
|
|
|
189
200
|
.reverse();
|
|
190
201
|
return npmPackageVersions;
|
|
191
202
|
}
|
|
192
|
-
exports.getPrebuiltProviderVersions = getPrebuiltProviderVersions;
|
|
193
203
|
async function getPrebuiltProviderVersionInformation(packageName, packageVersion) {
|
|
194
204
|
var _a, _b, _c, _d, _e, _f;
|
|
195
205
|
// Go packages include an extra `vX.Y.Z`
|
|
@@ -212,5 +222,4 @@ async function getPrebuiltProviderVersionInformation(packageName, packageVersion
|
|
|
212
222
|
cdktnVersion: result.peerDependencies["cdktn"],
|
|
213
223
|
};
|
|
214
224
|
}
|
|
215
|
-
exports.getPrebuiltProviderVersionInformation = getPrebuiltProviderVersionInformation;
|
|
216
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlYnVpbHQtcHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kZXBlbmRlbmNpZXMvcHJlYnVpbHQtcHJvdmlkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVuQyxtQ0FBMkM7QUFDM0MsK0NBQWlDO0FBQ2pDLDRDQUF3QztBQUN4Qyw2REFBMEQ7QUFDMUQsK0RBQWlFO0FBRWpFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO0FBQy9ELE1BQU0sVUFBVSxHQUEyQixLQUFLO0lBQzlDLENBQUMsQ0FBQyxJQUFJLG1CQUFVLENBQUMsS0FBSyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFFZCxxRkFBcUY7QUFDckYsOEVBQThFO0FBQzlFLG9GQUFvRjtBQUNwRixNQUFNLGVBQWUsR0FDbkIsbUdBQW1HLENBQUM7QUFLdEcsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQWUsQ0FBQztBQUMxQyxLQUFLLFVBQVUsV0FBVyxDQUFJLEdBQVc7SUFDdkMsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDeEIsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBTSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLFlBQVksQ0FBSSxHQUFHLENBQUMsQ0FBQztJQUNoRCxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUVsQyxPQUFPLFlBQWlCLENBQUM7QUFDM0IsQ0FBQztBQUVELDRCQUE0QjtBQUNyQixLQUFLLFVBQVUsZUFBZTtJQUNuQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckIsQ0FB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RUQsT0FBTztRQUNMLFdBQVcsRUFBRSxNQUFNLENBQUMsSUFBSTtRQUN4QixjQUFjLEVBQUUsTUFBTSxDQUFDLE9BQU87UUFDOUIsWUFBWTtRQUNaLGVBQWUsRUFDYixNQUFBLE1BQUEsTUFBTSxDQUFDLEtBQUssMENBQUUsUUFBUSxDQUFDLE9BQU8sbUNBQUksTUFBQSxNQUFNLENBQUMsS0FBSywwQ0FBRSxRQUFRLENBQUMsT0FBTztRQUNsRSxZQUFZLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztRQUM5QyxZQUFZLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztLQUMvQyxDQUFDO0FBQ0osQ0FBQztBQTNCRCxzRkEyQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuXG5pbXBvcnQgeyBmZXRjaCwgUHJveHlBZ2VudCB9IGZyb20gXCJ1bmRpY2lcIjtcbmltcG9ydCAqIGFzIHNlbXZlciBmcm9tIFwic2VtdmVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IFByb3ZpZGVyQ29uc3RyYWludCB9IGZyb20gXCIuL2RlcGVuZGVuY3ktbWFuYWdlclwiO1xuaW1wb3J0IHsgdmVyc2lvbk1hdGNoZXNDb25zdHJhaW50IH0gZnJvbSBcIi4vdmVyc2lvbi1jb25zdHJhaW50c1wiO1xuXG5jb25zdCBwcm94eSA9IHByb2Nlc3MuZW52Lmh0dHBfcHJveHkgfHwgcHJvY2Vzcy5lbnYuSFRUUF9QUk9YWTtcbmNvbnN0IGRpc3BhdGNoZXI6IFByb3h5QWdlbnQgfCB1bmRlZmluZWQgPSBwcm94eVxuICA/IG5ldyBQcm94eUFnZW50KHByb3h5KVxuICA6IHVuZGVmaW5lZDtcblxuLy8gdXNlcyBodHRwczovL2dpdGh1Yi5jb20vaGFzaGljb3JwL2Nka3RmLXJlcG9zaXRvcnktbWFuYWdlci9ibG9iL21haW4vcHJvdmlkZXIuanNvblxuLy8gSG93ZXZlciwgaXQgZ290IGNsZWFyZWQgb3V0LiBXZSdsbCBuZWVkIHRvIGhvc3QgdGhlIGV4aXN0aW5nIGxpc3Qgc29tZXdoZXJlXG4vLyBjb25zdCBwcm92aWRlcnNNYXBVcmwgPSBgaHR0cHM6Ly93d3cuY2RrLnRmLy53ZWxsLWtub3duL3ByZWJ1aWx0LXByb3ZpZGVycy5qc29uYDtcbmNvbnN0IHByb3ZpZGVyc01hcFVybCA9XG4gIFwiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Nka3RuLWlvL2Nka3RuLXJlcG9zaXRvcnktbWFuYWdlci9yZWZzL2hlYWRzL21haW4vcHJvdmlkZXIuanNvblwiO1xudHlwZSBQcm92aWRlcnNNYXAgPSB7XG4gIFtuYW1lOiBzdHJpbmddOiBzdHJpbmc7XG59O1xuXG5jb25zdCBmZXRjaENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbmFzeW5jIGZ1bmN0aW9uIGNhY2hlZEZldGNoPFQ+KHVybDogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gIGlmIChmZXRjaENhY2hlLmhhcyh1cmwpKSB7XG4gICAgcmV0dXJuIGZldGNoQ2FjaGUuZ2V0KHVybCkgYXMgVDtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlQm9keSA9IGF3YWl0IGZldGNoV3JhcHBlZDxUPih1cmwpO1xuICBmZXRjaENhY2hlLnNldCh1cmwsIHJlc3BvbnNlQm9keSk7XG5cbiAgcmV0dXJuIHJlc3BvbnNlQm9keSBhcyBUO1xufVxuXG4vLyBGb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzZXRGZXRjaENhY2hlKCkge1xuICBmZXRjaENhY2hlLmNsZWFyKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoV3JhcHBlZDxUPih1cmw6IHN0cmluZyk6IFByb21pc2U8VD4ge1xuICBsZXQgcmVzcG9uc2U7XG4gIHRyeSB7XG4gICAgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICAgIGRpc3BhdGNoZXIsXG4gICAgICBoZWFkZXJzOiB7IFwiVXNlci1BZ2VudFwiOiBcIk9wZW5Db25zdHJ1Y3RzL2Nka3RuLWNsaVwiIH0sXG4gICAgfSk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIEZldGNoIG9ubHkgZmFpbHMgaGVyZSBiZWNhdXNlIG9mIGNvbm5lY3Rpdml0eSBpc3N1ZXNcbiAgICBsb2dnZXIuZXJyb3IoXG4gICAgICBcIlVuYWJsZSB0byByZXF1ZXN0IHByZS1idWlsdCBwcm92aWRlciBpbmZvcm1hdGlvbjogTmV0d29yayBlcnJvciwgcGxlYXNlIGNoZWNrIGlmIHlvdSdyZSBjb25uZWN0ZWQgdG8gdGhlIGludGVybmV0IGFuZCB0cnkgYWdhaW5cIixcbiAgICApO1xuXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBlcnJvclwiKTtcbiAgfVxuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID49IDUwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlVuZXhwZWN0ZWQgZXJyb3Igd2hpbGUgZmluZGluZyBwcmUtYnVpbHQgcHJvdmlkZXIuIFBsZWFzZSB0cnkgYWdhaW4uXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJlLWJ1aWx0IHByb3ZpZGVyIGluZm9ybWF0aW9uIG5vdCBmb3VuZGApO1xuICAgIH1cbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID49IDQwMCkge1xuICAgICAgY29uc3QgcmVzcG9uc2VUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlJ3JlIHNlbmRpbmcgYSBiYWQgcmVxdWVzdC4gV2Ugc2hvdWxkIHJlY29yZCB0aGlzIGluIHNlbnRyeSB0b28uXG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgIGBSZWNlaXZlZCAke3Jlc3BvbnNlLnN0YXR1c30gcmVzcG9uc2UgZnJvbSAke3VybH06ICR7cmVzcG9uc2VUZXh0fWAsXG4gICAgICApO1xuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVW5leHBlY3RlZCBlcnJvciB3aGlsZSBmaW5kaW5nIHByZS1idWlsdCBwcm92aWRlci4gUGxlYXNlIHRyeSBhZ2Fpbi5cIixcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKSBhcyBQcm9taXNlPFQ+O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QWxsUHJlYnVpbHRQcm92aWRlcnMoKSB7XG4gIHJldHVybiBjYWNoZWRGZXRjaDxQcm92aWRlcnNNYXA+KHByb3ZpZGVyc01hcFVybCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXROcG1QYWNrYWdlTmFtZShcbiAgY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50LFxuICB1c2VDZGt0bjogYm9vbGVhbixcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHByb3ZpZGVycyA9IGF3YWl0IGdldEFsbFByZWJ1aWx0UHJvdmlkZXJzKCk7XG5cbiAgY29uc3QgZW50cnkgPSBPYmplY3QuZW50cmllcyhwcm92aWRlcnMpLmZpbmQoXG4gICAgKFssIHBdKSA9PlxuICAgICAgUHJvdmlkZXJDb25zdHJhaW50LmZyb21Db25maWdFbnRyeShwKS5zb3VyY2UudG9Mb3dlckNhc2UoKSA9PT1cbiAgICAgIGNvbnN0cmFpbnQuc291cmNlLnRvTG93ZXJDYXNlKCksXG4gICk7XG4gIGlmICghZW50cnkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBubyBwcmUtYnVpbHQgcHJvdmlkZXIgZm91bmQgZm9yIHRoaXMgY29uc3RyYWludFxuICB9XG4gIGNvbnN0IG5hbWUgPSBlbnRyeVswXTtcblxuICByZXR1cm4gdXNlQ2RrdG4gPyBgQGNka3RuL3Byb3ZpZGVyLSR7bmFtZX1gIDogYEBjZGt0Zi9wcm92aWRlci0ke25hbWV9YDtcbn1cblxudHlwZSBQYWNrYWdlSnNvbiA9IHtcbiAgLy8gaGFzIGJlZW4gaW50cm9kdWNlZCB2aWEgaHR0cHM6Ly9naXRodWIuY29tL2hhc2hpY29ycC9jZGt0Zi1wcm92aWRlci1wcm9qZWN0L3B1bGwvMjE3XG4gIGNka3RmPzoge1xuICAgIC8vIHByb3ZpZGVyIGlzIG9wdGlvbmFsIGFzIHdlIG1pZ2h0IHNldCBvdGhlciBjZGt0ZiByZWxhdGVkIGZpZWxkcyBpbiB0aGUgZnV0dXJlXG4gICAgLy8gZm9yIG90aGVyIGxpYnMgKGkuZS4gY29uc3RydWN0IHBhY2thZ2VzKSB3aGlsZSBzdGlsbCB1c2luZyB0aGUgY2RrdGYga2V5XG4gICAgcHJvdmlkZXI/OiB7XG4gICAgICAvKipcbiAgICAgICAqIG5hbWUgb2YgdGhlIHByb3ZpZGVyLCB3aWxsIHJlc29sdmUgdG8gdGhlIGZ1bGwgbmFtZSBhcyBpbiB0aGUgVGVycmFmb3JtIHNjaGVtYS5cbiAgICAgICAqIGUuZy4gcmVnaXN0cnkudGVycmFmb3JtLmlvL2hhc2hpY29ycC9hd3NcbiAgICAgICAqL1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgLyoqXG4gICAgICAgKiB0aGUgYWN0dWFsIHZlcnNpb24gdGhhdCB3YXMgdXNlZCB0byBidWlsZCB0aGUgcHJvdmlkZXJcbiAgICAgICAqIGUuZy4gNC4xMi4xXG4gICAgICAgKi9cbiAgICAgIHZlcnNpb246IHN0cmluZztcbiAgICB9O1xuICB9O1xuICAvLyBQcmUtYnVpbHQgcHJvdmlkZXJzIHVzaW5nIGNka3RuIG5vdyBnZW5lcmF0ZSBwcm92aWRlciBpbmZvcm1hdGlvbiB1bmRlciBjZGt0biBrZXlcbiAgLy8gQXQgc29tZSBwb2ludCBzdXBwb3J0IGZvciB0aGUgY2RrdGYga2V5IHdpbGwgYmUgZHJvcHBlZFxuICBjZGt0bj86IHtcbiAgICAvLyBwcm92aWRlciBpcyBvcHRpb25hbCBhcyB3ZSBtaWdodCBzZXQgb3RoZXIgY2RrdG4gcmVsYXRlZCBmaWVsZHMgaW4gdGhlIGZ1dHVyZVxuICAgIC8vIGZvciBvdGhlciBsaWJzIChpLmUuIGNvbnN0cnVjdCBwYWNrYWdlcykgd2hpbGUgc3RpbGwgdXNpbmcgdGhlIGNka3RuIGtleVxuICAgIHByb3ZpZGVyPzoge1xuICAgICAgLyoqXG4gICAgICAgKiBuYW1lIG9mIHRoZSBwcm92aWRlciwgd2lsbCByZXNvbHZlIHRvIHRoZSBmdWxsIG5hbWUgYXMgaW4gdGhlIFRlcnJhZm9ybSBzY2hlbWEuXG4gICAgICAgKiBlLmcuIHJlZ2lzdHJ5LnRlcnJhZm9ybS5pby9oYXNoaWNvcnAvYXdzXG4gICAgICAgKi9cbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIC8qKlxuICAgICAgICogdGhlIGFjdHVhbCB2ZXJzaW9uIHRoYXQgd2FzIHVzZWQgdG8gYnVpbGQgdGhlIHByb3ZpZGVyXG4gICAgICAgKiBlLmcuIDQuMTIuMVxuICAgICAgICovXG4gICAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbiAgcGVlckRlcGVuZGVuY2llcz86IHtcbiAgICBjZGt0Zj86IHN0cmluZztcbiAgICBjZGt0bj86IHN0cmluZztcbiAgfTtcbiAgcmVwb3NpdG9yeT86IHtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdXJsOiBzdHJpbmc7XG4gIH07XG4gIC8vIC4uLiBtYW55IG1vcmUgZmllbGRzXG59O1xudHlwZSBOcG1QYWNrYWdlUmVzdWx0ID0ge1xuICBuYW1lOiBzdHJpbmc7IC8vIGUuZy4gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCJcbiAgdmVyc2lvbnM6IHtcbiAgICBbdmVyc2lvbjogc3RyaW5nXTogUGFja2FnZUpzb247XG4gIH07XG4gIHJlcG9zaXRvcnk/OiB7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHVybDogc3RyaW5nO1xuICB9O1xufTtcblxudHlwZSBOcG1QYWNrYWdlU2luZ2xlVmVyc2lvblJlc3VsdCA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGNka3RmPzoge1xuICAgIHByb3ZpZGVyOiB7XG4gICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbiAgY2RrdG4/OiB7XG4gICAgcHJvdmlkZXI6IHtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIHZlcnNpb246IHN0cmluZztcbiAgICB9O1xuICB9O1xuICBwZWVyRGVwZW5kZW5jaWVzOiB7XG4gICAgW25hbWU6IHN0cmluZ106IHN0cmluZztcbiAgfTtcbn07XG5cbnR5cGUgUHJlYnVpbHRQcm92aWRlclZlcnNpb24gPSB7XG4gIHBhY2thZ2VWZXJzaW9uOiBzdHJpbmc7IC8vIGUuZy4gXCI3LjAuNDJcIlxuICBwcm92aWRlclZlcnNpb246IHN0cmluZzsgLy8gZS5nLiBcIjQuMTIuMVwiXG4gIGNka3RmUGVlckRlcGVuZGVuY3lDb25zdHJhaW50OiBzdHJpbmc7IC8vIGUuZy4gXCJeMTAuMC4wXCJcbiAgY2RrdG5QZWVyRGVwZW5kZW5jeUNvbnN0cmFpbnQ6IHN0cmluZztcbiAgcGFja2FnZU5hbWU6IHN0cmluZztcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQcmVidWlsdFByb3ZpZGVyUmVwb3NpdG9yeU5hbWUoXG4gIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB1cmwgPSBgaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvJHtwYWNrYWdlTmFtZX1gO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBjYWNoZWRGZXRjaDxOcG1QYWNrYWdlUmVzdWx0Pih1cmwpO1xuXG4gIGNvbnN0IHJlcG9zaXRvcnlVcmwgPSByZXN1bHQ/LnJlcG9zaXRvcnk/LnVybDtcblxuICBpZiAoIXJlcG9zaXRvcnlVcmwpIHJldHVybiBcIlwiO1xuXG4gIGNvbnN0IHJlcG9zaXRvcnlSZWdleCA9IC9eZ2l0XFwraHR0cHM6XFwvXFwvKGdpdGh1Yi5jb21cXC8uKilcXC5naXQkLztcbiAgY29uc3QgbWF0Y2ggPSByZXBvc2l0b3J5UmVnZXguZXhlYyhyZXBvc2l0b3J5VXJsKTtcblxuICBpZiAoIW1hdGNoKSByZXR1cm4gXCJcIjtcblxuICByZXR1cm4gbWF0Y2hbMV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBbGxQcmVidWlsdFByb3ZpZGVyVmVyc2lvbnMoXG4gIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPFByZWJ1aWx0UHJvdmlkZXJWZXJzaW9uW10+IHtcbiAgY29uc3QgdXJsID0gYGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLyR7cGFja2FnZU5hbWV9YDtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2FjaGVkRmV0Y2g8TnBtUGFja2FnZVJlc3VsdD4odXJsKTtcblxuICBjb25zdCB2ZXJzaW9ucyA9IE9iamVjdC5lbnRyaWVzKHJlc3VsdC52ZXJzaW9ucylcbiAgICAubWFwKChbdmVyc2lvbiwgcGFja2FnZUpzb25dKSA9PiB7XG4gICAgICBjb25zdCBwcm92aWRlciA9XG4gICAgICAgIHBhY2thZ2VKc29uLmNka3RuPy5wcm92aWRlciA/PyBwYWNrYWdlSnNvbi5jZGt0Zj8ucHJvdmlkZXI7XG4gICAgICBpZiAoXG4gICAgICAgICFwcm92aWRlciB8fFxuICAgICAgICAoIXBhY2thZ2VKc29uLnBlZXJEZXBlbmRlbmNpZXM/LmNka3RmICYmXG4gICAgICAgICAgIXBhY2thZ2VKc29uLnBlZXJEZXBlbmRlbmNpZXM/LmNka3RuKVxuICAgICAgKSB7XG4gICAgICAgIGxvZ2dlci50cmFjZShcbiAgICAgICAgICBgc2tpcHBpbmcgdmVyc2lvbiAke3ZlcnNpb259IG9mICR7cGFja2FnZU5hbWV9IGFzIGl0IGRvZXMgbm90IGhhdmUgYSBjZGt0bi9jZGt0Zi5wcm92aWRlciBvciBwZWVyRGVwZW5kZW5jaWVzLmNka3RmL2Nka3RuIGluIHBhY2thZ2UuanNvbmAsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYWNrYWdlTmFtZSxcbiAgICAgICAgcGFja2FnZVZlcnNpb246IHZlcnNpb24sXG4gICAgICAgIHByb3ZpZGVyVmVyc2lvbjogcHJvdmlkZXIudmVyc2lvbixcbiAgICAgICAgY2RrdGZQZWVyRGVwZW5kZW5jeUNvbnN0cmFpbnQ6IHBhY2thZ2VKc29uLnBlZXJEZXBlbmRlbmNpZXMuY2RrdGYsXG4gICAgICAgIGNka3RuUGVlckRlcGVuZGVuY3lDb25zdHJhaW50OiBwYWNrYWdlSnNvbi5wZWVyRGVwZW5kZW5jaWVzLmNka3RuLFxuICAgICAgfTtcbiAgICB9KVxuICAgIC5maWx0ZXIoKHYpID0+IHYgIT09IHVuZGVmaW5lZCkgYXMgUHJlYnVpbHRQcm92aWRlclZlcnNpb25bXTtcblxuICAvLyBsYXRlc3QgdmVyc2lvbiBmaXJzdCwgc29ydGVkIGJ5IHBhY2thZ2VWZXJzaW9uIGFzIHRoYXRcbiAgLy8gb25lIGFsd2F5cyBpbmNyZWFzZXMgd2hpbGUgdGhlIHByb3ZpZGVyVmVyc2lvbiBtYXkgbm90XG4gIHZlcnNpb25zLnNvcnQoKGEsIGIpID0+IHtcbiAgICBpZiAoc2VtdmVyLmd0KGEucGFja2FnZVZlcnNpb24sIGIucGFja2FnZVZlcnNpb24pKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmIChzZW12ZXIubHQoYS5wYWNrYWdlVmVyc2lvbiwgYi5wYWNrYWdlVmVyc2lvbikpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfSk7XG5cbiAgcmV0dXJuIHZlcnNpb25zO1xufVxuXG5mdW5jdGlvbiBjZGt0ZlZlcnNpb25NYXRjaGVzKFxuICBjZGt0ZlZlcnNpb246IHN0cmluZyxcbiAgY2RrdGZQZWVyRGVwZW5kZW5jeUNvbnN0cmFpbnQ6IHN0cmluZyxcbik6IGJvb2xlYW4ge1xuICByZXR1cm4gc2VtdmVyLnNhdGlzZmllcyhjZGt0ZlZlcnNpb24sIGNka3RmUGVlckRlcGVuZGVuY3lDb25zdHJhaW50KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFByZWJ1aWx0UHJvdmlkZXJWZXJzaW9ucyhcbiAgY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50LFxuICBjZGt0ZlZlcnNpb246IHN0cmluZyxcbik6IFByb21pc2U8eyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W10gfCBudWxsPiB7XG4gIGNvbnN0IGNka3RmUHJvdmlkZXJOYW1lID0gYXdhaXQgZ2V0TnBtUGFja2FnZU5hbWUoY29uc3RyYWludCwgZmFsc2UpO1xuICBjb25zdCBjZGt0blByb3ZpZGVyTmFtZSA9IGF3YWl0IGdldE5wbVBhY2thZ2VOYW1lKGNvbnN0cmFpbnQsIHRydWUpO1xuXG4gIC8vIG5vIHByZS1idWlsdCBwcm92aWRlciBleGlzdHNcbiAgaWYgKCFjZGt0ZlByb3ZpZGVyTmFtZSAmJiAhY2RrdG5Qcm92aWRlck5hbWUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGNka3RmVmVyc2lvbnMgPSBjZGt0ZlByb3ZpZGVyTmFtZVxuICAgID8gYXdhaXQgZ2V0QWxsUHJlYnVpbHRQcm92aWRlclZlcnNpb25zKGNka3RmUHJvdmlkZXJOYW1lKVxuICAgIDogKFtdIGFzIFByZWJ1aWx0UHJvdmlkZXJWZXJzaW9uW10pO1xuICBsb2dnZXIuZGVidWcoXG4gICAgYEZvdW5kIHZlcnNpb25zIGZvciAke2Nka3RmUHJvdmlkZXJOYW1lfTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgIGNka3RmVmVyc2lvbnMsXG4gICAgICBudWxsLFxuICAgICAgMixcbiAgICApfWAsXG4gICk7XG5cbiAgY29uc3QgY2RrdG5WZXJzaW9ucyA9IGNka3RuUHJvdmlkZXJOYW1lXG4gICAgPyBhd2FpdCBnZXRBbGxQcmVidWlsdFByb3ZpZGVyVmVyc2lvbnMoY2RrdG5Qcm92aWRlck5hbWUpXG4gICAgOiAoW10gYXMgUHJlYnVpbHRQcm92aWRlclZlcnNpb25bXSk7XG4gIGxvZ2dlci5kZWJ1ZyhcbiAgICBgRm91bmQgdmVyc2lvbnMgZm9yICR7Y2RrdG5Qcm92aWRlck5hbWV9OiAke0pTT04uc3RyaW5naWZ5KGNka3RuVmVyc2lvbnMsIG51bGwsIDIpfWAsXG4gICk7XG5cbiAgY29uc3QgdmVyc2lvbnMgPSBjZGt0ZlZlcnNpb25zLmNvbmNhdChjZGt0blZlcnNpb25zKTtcblxuICAvLyBmaW5kIGZpcnN0IHRoZSB2ZXJzaW9uIHRoYXQgbWF0Y2hlcyB0aGUgcmVxdWVzdGVkIHByb3ZpZGVyIHZlcnNpb24gYW5kIGNka3RmIHZlcnNpb25cbiAgY29uc3QgbWF0Y2hpbmdWZXJzaW9ucyA9IHZlcnNpb25zLmZpbHRlcigodikgPT4ge1xuICAgIGlmIChcbiAgICAgICFjZGt0ZlZlcnNpb25NYXRjaGVzKGNka3RmVmVyc2lvbiwgdi5jZGt0ZlBlZXJEZXBlbmRlbmN5Q29uc3RyYWludCkgJiZcbiAgICAgICFjZGt0ZlZlcnNpb25NYXRjaGVzKGNka3RmVmVyc2lvbiwgdi5jZGt0blBlZXJEZXBlbmRlbmN5Q29uc3RyYWludClcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTsgLy8gc2tpcCBpZiBjZGt0ZiB2ZXJzaW9uIGRvZXMgbm90IG1hdGNoXG4gICAgfVxuICAgIGlmIChjb25zdHJhaW50LnZlcnNpb24pIHtcbiAgICAgIHJldHVybiB2ZXJzaW9uTWF0Y2hlc0NvbnN0cmFpbnQodi5wcm92aWRlclZlcnNpb24sIGNvbnN0cmFpbnQudmVyc2lvbik7XG4gICAgfVxuICAgIHJldHVybiB0cnVlOyAvLyBpZiBubyB2ZXJzaW9uIGNvbnN0cmFpbnQgaXMgcGFzc2VkLCByZXR1cm4gdHJ1ZSBvbiB0aGUgZmlyc3QgbWF0Y2hcbiAgfSk7XG5cbiAgaWYgKCFtYXRjaGluZ1ZlcnNpb25zLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IG5wbVBhY2thZ2VWZXJzaW9ucyA9IG1hdGNoaW5nVmVyc2lvbnNcbiAgICAubWFwKChtYXRjaGluZ1ZlcnNpb24pID0+ICh7XG4gICAgICBuYW1lOiBtYXRjaGluZ1ZlcnNpb24ucGFja2FnZU5hbWUsXG4gICAgICB2ZXJzaW9uOiBtYXRjaGluZ1ZlcnNpb24ucGFja2FnZVZlcnNpb24sXG4gICAgfSkpXG4gICAgLnNvcnQoKGEsIGIpID0+IHNlbXZlci5jb21wYXJlKGEudmVyc2lvbiwgYi52ZXJzaW9uKSlcbiAgICAucmV2ZXJzZSgpO1xuICByZXR1cm4gbnBtUGFja2FnZVZlcnNpb25zO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UHJlYnVpbHRQcm92aWRlclZlcnNpb25JbmZvcm1hdGlvbihcbiAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgcGFja2FnZVZlcnNpb246IHN0cmluZyxcbik6IFByb21pc2U8YW55PiB7XG4gIC8vIEdvIHBhY2thZ2VzIGluY2x1ZGUgYW4gZXh0cmEgYHZYLlkuWmBcbiAgaWYgKHBhY2thZ2VWZXJzaW9uLnN0YXJ0c1dpdGgoXCJ2XCIpKSB7XG4gICAgcGFja2FnZVZlcnNpb24gPSBwYWNrYWdlVmVyc2lvbi5zbGljZSgxKTtcbiAgfVxuXG4gIGNvbnN0IHVybCA9IGBodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy8ke3BhY2thZ2VOYW1lfS8ke3BhY2thZ2VWZXJzaW9ufWA7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNhY2hlZEZldGNoPE5wbVBhY2thZ2VTaW5nbGVWZXJzaW9uUmVzdWx0Pih1cmwpO1xuXG4gIGxldCBwcm92aWRlck5hbWUgPSByZXN1bHQuY2RrdG4/LnByb3ZpZGVyLm5hbWUgPz8gcmVzdWx0LmNka3RmPy5wcm92aWRlci5uYW1lO1xuICBpZiAocHJvdmlkZXJOYW1lKSB7XG4gICAgcHJvdmlkZXJOYW1lID0gcHJvdmlkZXJOYW1lLnJlcGxhY2UoXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW8vXCIsIFwiXCIpO1xuICAgIHByb3ZpZGVyTmFtZSA9IHByb3ZpZGVyTmFtZS5yZXBsYWNlKFwiaGFzaGljb3JwL1wiLCBcIlwiKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGFja2FnZU5hbWU6IHJlc3VsdC5uYW1lLFxuICAgIHBhY2thZ2VWZXJzaW9uOiByZXN1bHQudmVyc2lvbixcbiAgICBwcm92aWRlck5hbWUsXG4gICAgcHJvdmlkZXJWZXJzaW9uOlxuICAgICAgcmVzdWx0LmNka3RuPy5wcm92aWRlci52ZXJzaW9uID8/IHJlc3VsdC5jZGt0Zj8ucHJvdmlkZXIudmVyc2lvbixcbiAgICBjZGt0ZlZlcnNpb246IHJlc3VsdC5wZWVyRGVwZW5kZW5jaWVzW1wiY2RrdGZcIl0sXG4gICAgY2RrdG5WZXJzaW9uOiByZXN1bHQucGVlckRlcGVuZGVuY2llc1tcImNka3RuXCJdLFxuICB9O1xufVxuIl19
|
|
225
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlYnVpbHQtcHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kZXBlbmRlbmNpZXMvcHJlYnVpbHQtcHJvdmlkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1DbkMsMENBRUM7QUEyQ0QsMERBRUM7QUFFRCw4Q0FpQkM7QUF1RkQsOEVBZ0JDO0FBRUQsd0VBMkNDO0FBU0Qsa0VBeURDO0FBRUQsc0ZBMkJDO0FBdFZELG1DQUEyQztBQUMzQywrQ0FBaUM7QUFDakMsNENBQXdDO0FBQ3hDLDZEQUEwRDtBQUMxRCwrREFBaUU7QUFFakUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7QUFDL0QsTUFBTSxVQUFVLEdBQTJCLEtBQUs7SUFDOUMsQ0FBQyxDQUFDLElBQUksbUJBQVUsQ0FBQyxLQUFLLENBQUM7SUFDdkIsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUVkLHFGQUFxRjtBQUNyRiw4RUFBOEU7QUFDOUUsb0ZBQW9GO0FBQ3BGLE1BQU0sZUFBZSxHQUNuQixtR0FBbUcsQ0FBQztBQUt0RyxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO0FBQzFDLEtBQUssVUFBVSxXQUFXLENBQUksR0FBVztJQUN2QyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN4QixPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLE1BQU0sWUFBWSxDQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRWxDLE9BQU8s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QUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsT0FBTztRQUNMLFdBQVcsRUFBRSxNQUFNLENBQUMsSUFBSTtRQUN4QixjQUFjLEVBQUUsTUFBTSxDQUFDLE9BQU87UUFDOUIsWUFBWTtRQUNaLGVBQWUsRUFDYixNQUFBLE1BQUEsTUFBTSxDQUFDLEtBQUssMENBQUUsUUFBUSxDQUFDLE9BQU8sbUNBQUksTUFBQSxNQUFNLENBQUMsS0FBSywwQ0FBRSxRQUFRLENBQUMsT0FBTztRQUNsRSxZQUFZLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztRQUM5QyxZQUFZLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztLQUMvQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5cbmltcG9ydCB7IGZldGNoLCBQcm94eUFnZW50IH0gZnJvbSBcInVuZGljaVwiO1xuaW1wb3J0ICogYXMgc2VtdmVyIGZyb20gXCJzZW12ZXJcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgUHJvdmlkZXJDb25zdHJhaW50IH0gZnJvbSBcIi4vZGVwZW5kZW5jeS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB2ZXJzaW9uTWF0Y2hlc0NvbnN0cmFpbnQgfSBmcm9tIFwiLi92ZXJzaW9uLWNvbnN0cmFpbnRzXCI7XG5cbmNvbnN0IHByb3h5ID0gcHJvY2Vzcy5lbnYuaHR0cF9wcm94eSB8fCBwcm9jZXNzLmVudi5IVFRQX1BST1hZO1xuY29uc3QgZGlzcGF0Y2hlcjogUHJveHlBZ2VudCB8IHVuZGVmaW5lZCA9IHByb3h5XG4gID8gbmV3IFByb3h5QWdlbnQocHJveHkpXG4gIDogdW5kZWZpbmVkO1xuXG4vLyB1c2VzIGh0dHBzOi8vZ2l0aHViLmNvbS9oYXNoaWNvcnAvY2RrdGYtcmVwb3NpdG9yeS1tYW5hZ2VyL2Jsb2IvbWFpbi9wcm92aWRlci5qc29uXG4vLyBIb3dldmVyLCBpdCBnb3QgY2xlYXJlZCBvdXQuIFdlJ2xsIG5lZWQgdG8gaG9zdCB0aGUgZXhpc3RpbmcgbGlzdCBzb21ld2hlcmVcbi8vIGNvbnN0IHByb3ZpZGVyc01hcFVybCA9IGBodHRwczovL3d3dy5jZGsudGYvLndlbGwta25vd24vcHJlYnVpbHQtcHJvdmlkZXJzLmpzb25gO1xuY29uc3QgcHJvdmlkZXJzTWFwVXJsID1cbiAgXCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vY2RrdG4taW8vY2RrdG4tcmVwb3NpdG9yeS1tYW5hZ2VyL3JlZnMvaGVhZHMvbWFpbi9wcm92aWRlci5qc29uXCI7XG50eXBlIFByb3ZpZGVyc01hcCA9IHtcbiAgW25hbWU6IHN0cmluZ106IHN0cmluZztcbn07XG5cbmNvbnN0IGZldGNoQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuYXN5bmMgZnVuY3Rpb24gY2FjaGVkRmV0Y2g8VD4odXJsOiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcbiAgaWYgKGZldGNoQ2FjaGUuaGFzKHVybCkpIHtcbiAgICByZXR1cm4gZmV0Y2hDYWNoZS5nZXQodXJsKSBhcyBUO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2VCb2R5ID0gYXdhaXQgZmV0Y2hXcmFwcGVkPFQ+KHVybCk7XG4gIGZldGNoQ2FjaGUuc2V0KHVybCwgcmVzcG9uc2VCb2R5KTtcblxuICByZXR1cm4gcmVzcG9uc2VCb2R5IGFzIFQ7XG59XG5cbi8vIEZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHlcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNldEZldGNoQ2FjaGUoKSB7XG4gIGZldGNoQ2FjaGUuY2xlYXIoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hXcmFwcGVkPFQ+KHVybDogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gIGxldCByZXNwb25zZTtcbiAgdHJ5IHtcbiAgICByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgICAgZGlzcGF0Y2hlcixcbiAgICAgIGhlYWRlcnM6IHsgXCJVc2VyLUFnZW50XCI6IFwiT3BlbkNvbnN0cnVjdHMvY2RrdG4tY2xpXCIgfSxcbiAgICB9KTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gRmV0Y2ggb25seSBmYWlscyBoZXJlIGJlY2F1c2Ugb2YgY29ubmVjdGl2aXR5IGlzc3Vlc1xuICAgIGxvZ2dlci5lcnJvcihcbiAgICAgIFwiVW5hYmxlIHRvIHJlcXVlc3QgcHJlLWJ1aWx0IHByb3ZpZGVyIGluZm9ybWF0aW9uOiBOZXR3b3JrIGVycm9yLCBwbGVhc2UgY2hlY2sgaWYgeW91J3JlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQgYW5kIHRyeSBhZ2FpblwiLFxuICAgICk7XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIGVycm9yXCIpO1xuICB9XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPj0gNTAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVW5leHBlY3RlZCBlcnJvciB3aGlsZSBmaW5kaW5nIHByZS1idWlsdCBwcm92aWRlci4gUGxlYXNlIHRyeSBhZ2Fpbi5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcmUtYnVpbHQgcHJvdmlkZXIgaW5mb3JtYXRpb24gbm90IGZvdW5kYCk7XG4gICAgfVxuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPj0gNDAwKSB7XG4gICAgICBjb25zdCByZXNwb25zZVRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UncmUgc2VuZGluZyBhIGJhZCByZXF1ZXN0LiBXZSBzaG91bGQgcmVjb3JkIHRoaXMgaW4gc2VudHJ5IHRvby5cbiAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgYFJlY2VpdmVkICR7cmVzcG9uc2Uuc3RhdHVzfSByZXNwb25zZSBmcm9tICR7dXJsfTogJHtyZXNwb25zZVRleHR9YCxcbiAgICAgICk7XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJVbmV4cGVjdGVkIGVycm9yIHdoaWxlIGZpbmRpbmcgcHJlLWJ1aWx0IHByb3ZpZGVyLiBQbGVhc2UgdHJ5IGFnYWluLlwiLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2UuanNvbigpIGFzIFByb21pc2U8VD47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBbGxQcmVidWlsdFByb3ZpZGVycygpIHtcbiAgcmV0dXJuIGNhY2hlZEZldGNoPFByb3ZpZGVyc01hcD4ocHJvdmlkZXJzTWFwVXJsKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE5wbVBhY2thZ2VOYW1lKFxuICBjb25zdHJhaW50OiBQcm92aWRlckNvbnN0cmFpbnQsXG4gIHVzZUNka3RuOiBib29sZWFuLFxuKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgcHJvdmlkZXJzID0gYXdhaXQgZ2V0QWxsUHJlYnVpbHRQcm92aWRlcnMoKTtcblxuICBjb25zdCBlbnRyeSA9IE9iamVjdC5lbnRyaWVzKHByb3ZpZGVycykuZmluZChcbiAgICAoWywgcF0pID0+XG4gICAgICBQcm92aWRlckNvbnN0cmFpbnQuZnJvbUNvbmZpZ0VudHJ5KHApLnNvdXJjZS50b0xvd2VyQ2FzZSgpID09PVxuICAgICAgY29uc3RyYWludC5zb3VyY2UudG9Mb3dlckNhc2UoKSxcbiAgKTtcbiAgaWYgKCFlbnRyeSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIG5vIHByZS1idWlsdCBwcm92aWRlciBmb3VuZCBmb3IgdGhpcyBjb25zdHJhaW50XG4gIH1cbiAgY29uc3QgbmFtZSA9IGVudHJ5WzBdO1xuXG4gIHJldHVybiB1c2VDZGt0biA/IGBAY2RrdG4vcHJvdmlkZXItJHtuYW1lfWAgOiBgQGNka3RmL3Byb3ZpZGVyLSR7bmFtZX1gO1xufVxuXG50eXBlIFBhY2thZ2VKc29uID0ge1xuICAvLyBoYXMgYmVlbiBpbnRyb2R1Y2VkIHZpYSBodHRwczovL2dpdGh1Yi5jb20vaGFzaGljb3JwL2Nka3RmLXByb3ZpZGVyLXByb2plY3QvcHVsbC8yMTdcbiAgY2RrdGY/OiB7XG4gICAgLy8gcHJvdmlkZXIgaXMgb3B0aW9uYWwgYXMgd2UgbWlnaHQgc2V0IG90aGVyIGNka3RmIHJlbGF0ZWQgZmllbGRzIGluIHRoZSBmdXR1cmVcbiAgICAvLyBmb3Igb3RoZXIgbGlicyAoaS5lLiBjb25zdHJ1Y3QgcGFja2FnZXMpIHdoaWxlIHN0aWxsIHVzaW5nIHRoZSBjZGt0ZiBrZXlcbiAgICBwcm92aWRlcj86IHtcbiAgICAgIC8qKlxuICAgICAgICogbmFtZSBvZiB0aGUgcHJvdmlkZXIsIHdpbGwgcmVzb2x2ZSB0byB0aGUgZnVsbCBuYW1lIGFzIGluIHRoZSBUZXJyYWZvcm0gc2NoZW1hLlxuICAgICAgICogZS5nLiByZWdpc3RyeS50ZXJyYWZvcm0uaW8vaGFzaGljb3JwL2F3c1xuICAgICAgICovXG4gICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAvKipcbiAgICAgICAqIHRoZSBhY3R1YWwgdmVyc2lvbiB0aGF0IHdhcyB1c2VkIHRvIGJ1aWxkIHRoZSBwcm92aWRlclxuICAgICAgICogZS5nLiA0LjEyLjFcbiAgICAgICAqL1xuICAgICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIH07XG4gIH07XG4gIC8vIFByZS1idWlsdCBwcm92aWRlcnMgdXNpbmcgY2RrdG4gbm93IGdlbmVyYXRlIHByb3ZpZGVyIGluZm9ybWF0aW9uIHVuZGVyIGNka3RuIGtleVxuICAvLyBBdCBzb21lIHBvaW50IHN1cHBvcnQgZm9yIHRoZSBjZGt0ZiBrZXkgd2lsbCBiZSBkcm9wcGVkXG4gIGNka3RuPzoge1xuICAgIC8vIHByb3ZpZGVyIGlzIG9wdGlvbmFsIGFzIHdlIG1pZ2h0IHNldCBvdGhlciBjZGt0biByZWxhdGVkIGZpZWxkcyBpbiB0aGUgZnV0dXJlXG4gICAgLy8gZm9yIG90aGVyIGxpYnMgKGkuZS4gY29uc3RydWN0IHBhY2thZ2VzKSB3aGlsZSBzdGlsbCB1c2luZyB0aGUgY2RrdG4ga2V5XG4gICAgcHJvdmlkZXI/OiB7XG4gICAgICAvKipcbiAgICAgICAqIG5hbWUgb2YgdGhlIHByb3ZpZGVyLCB3aWxsIHJlc29sdmUgdG8gdGhlIGZ1bGwgbmFtZSBhcyBpbiB0aGUgVGVycmFmb3JtIHNjaGVtYS5cbiAgICAgICAqIGUuZy4gcmVnaXN0cnkudGVycmFmb3JtLmlvL2hhc2hpY29ycC9hd3NcbiAgICAgICAqL1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgLyoqXG4gICAgICAgKiB0aGUgYWN0dWFsIHZlcnNpb24gdGhhdCB3YXMgdXNlZCB0byBidWlsZCB0aGUgcHJvdmlkZXJcbiAgICAgICAqIGUuZy4gNC4xMi4xXG4gICAgICAgKi9cbiAgICAgIHZlcnNpb246IHN0cmluZztcbiAgICB9O1xuICB9O1xuICBwZWVyRGVwZW5kZW5jaWVzPzoge1xuICAgIGNka3RmPzogc3RyaW5nO1xuICAgIGNka3RuPzogc3RyaW5nO1xuICB9O1xuICByZXBvc2l0b3J5Pzoge1xuICAgIHR5cGU6IHN0cmluZztcbiAgICB1cmw6IHN0cmluZztcbiAgfTtcbiAgLy8gLi4uIG1hbnkgbW9yZSBmaWVsZHNcbn07XG50eXBlIE5wbVBhY2thZ2VSZXN1bHQgPSB7XG4gIG5hbWU6IHN0cmluZzsgLy8gZS5nLiBcIkBjZGt0Zi9wcm92aWRlci1hd3NcIlxuICB2ZXJzaW9uczoge1xuICAgIFt2ZXJzaW9uOiBzdHJpbmddOiBQYWNrYWdlSnNvbjtcbiAgfTtcbiAgcmVwb3NpdG9yeT86IHtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdXJsOiBzdHJpbmc7XG4gIH07XG59O1xuXG50eXBlIE5wbVBhY2thZ2VTaW5nbGVWZXJzaW9uUmVzdWx0ID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgY2RrdGY/OiB7XG4gICAgcHJvdmlkZXI6IHtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIHZlcnNpb246IHN0cmluZztcbiAgICB9O1xuICB9O1xuICBjZGt0bj86IHtcbiAgICBwcm92aWRlcjoge1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIH07XG4gIH07XG4gIHBlZXJEZXBlbmRlbmNpZXM6IHtcbiAgICBbbmFtZTogc3RyaW5nXTogc3RyaW5nO1xuICB9O1xufTtcblxudHlwZSBQcmVidWlsdFByb3ZpZGVyVmVyc2lvbiA9IHtcbiAgcGFja2FnZVZlcnNpb246IHN0cmluZzsgLy8gZS5nLiBcIjcuMC40MlwiXG4gIHByb3ZpZGVyVmVyc2lvbjogc3RyaW5nOyAvLyBlLmcuIFwiNC4xMi4xXCJcbiAgY2RrdGZQZWVyRGVwZW5kZW5jeUNvbnN0cmFpbnQ6IHN0cmluZzsgLy8gZS5nLiBcIl4xMC4wLjBcIlxuICBjZGt0blBlZXJEZXBlbmRlbmN5Q29uc3RyYWludDogc3RyaW5nO1xuICBwYWNrYWdlTmFtZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFByZWJ1aWx0UHJvdmlkZXJSZXBvc2l0b3J5TmFtZShcbiAgcGFja2FnZU5hbWU6IHN0cmluZyxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHVybCA9IGBodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy8ke3BhY2thZ2VOYW1lfWA7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNhY2hlZEZldGNoPE5wbVBhY2thZ2VSZXN1bHQ+KHVybCk7XG5cbiAgY29uc3QgcmVwb3NpdG9yeVVybCA9IHJlc3VsdD8ucmVwb3NpdG9yeT8udXJsO1xuXG4gIGlmICghcmVwb3NpdG9yeVVybCkgcmV0dXJuIFwiXCI7XG5cbiAgY29uc3QgcmVwb3NpdG9yeVJlZ2V4ID0gL15naXRcXCtodHRwczpcXC9cXC8oZ2l0aHViLmNvbVxcLy4qKVxcLmdpdCQvO1xuICBjb25zdCBtYXRjaCA9IHJlcG9zaXRvcnlSZWdleC5leGVjKHJlcG9zaXRvcnlVcmwpO1xuXG4gIGlmICghbWF0Y2gpIHJldHVybiBcIlwiO1xuXG4gIHJldHVybiBtYXRjaFsxXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEFsbFByZWJ1aWx0UHJvdmlkZXJWZXJzaW9ucyhcbiAgcGFja2FnZU5hbWU6IHN0cmluZyxcbik6IFByb21pc2U8UHJlYnVpbHRQcm92aWRlclZlcnNpb25bXT4ge1xuICBjb25zdCB1cmwgPSBgaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvJHtwYWNrYWdlTmFtZX1gO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBjYWNoZWRGZXRjaDxOcG1QYWNrYWdlUmVzdWx0Pih1cmwpO1xuXG4gIGNvbnN0IHZlcnNpb25zID0gT2JqZWN0LmVudHJpZXMocmVzdWx0LnZlcnNpb25zKVxuICAgIC5tYXAoKFt2ZXJzaW9uLCBwYWNrYWdlSnNvbl0pID0+IHtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID1cbiAgICAgICAgcGFja2FnZUpzb24uY2RrdG4/LnByb3ZpZGVyID8/IHBhY2thZ2VKc29uLmNka3RmPy5wcm92aWRlcjtcbiAgICAgIGlmIChcbiAgICAgICAgIXByb3ZpZGVyIHx8XG4gICAgICAgICghcGFja2FnZUpzb24ucGVlckRlcGVuZGVuY2llcz8uY2RrdGYgJiZcbiAgICAgICAgICAhcGFja2FnZUpzb24ucGVlckRlcGVuZGVuY2llcz8uY2RrdG4pXG4gICAgICApIHtcbiAgICAgICAgbG9nZ2VyLnRyYWNlKFxuICAgICAgICAgIGBza2lwcGluZyB2ZXJzaW9uICR7dmVyc2lvbn0gb2YgJHtwYWNrYWdlTmFtZX0gYXMgaXQgZG9lcyBub3QgaGF2ZSBhIGNka3RuL2Nka3RmLnByb3ZpZGVyIG9yIHBlZXJEZXBlbmRlbmNpZXMuY2RrdGYvY2RrdG4gaW4gcGFja2FnZS5qc29uYCxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhY2thZ2VOYW1lLFxuICAgICAgICBwYWNrYWdlVmVyc2lvbjogdmVyc2lvbixcbiAgICAgICAgcHJvdmlkZXJWZXJzaW9uOiBwcm92aWRlci52ZXJzaW9uLFxuICAgICAgICBjZGt0ZlBlZXJEZXBlbmRlbmN5Q29uc3RyYWludDogcGFja2FnZUpzb24ucGVlckRlcGVuZGVuY2llcy5jZGt0ZixcbiAgICAgICAgY2RrdG5QZWVyRGVwZW5kZW5jeUNvbnN0cmFpbnQ6IHBhY2thZ2VKc29uLnBlZXJEZXBlbmRlbmNpZXMuY2RrdG4sXG4gICAgICB9O1xuICAgIH0pXG4gICAgLmZpbHRlcigodikgPT4gdiAhPT0gdW5kZWZpbmVkKSBhcyBQcmVidWlsdFByb3ZpZGVyVmVyc2lvbltdO1xuXG4gIC8vIGxhdGVzdCB2ZXJzaW9uIGZpcnN0LCBzb3J0ZWQgYnkgcGFja2FnZVZlcnNpb24gYXMgdGhhdFxuICAvLyBvbmUgYWx3YXlzIGluY3JlYXNlcyB3aGlsZSB0aGUgcHJvdmlkZXJWZXJzaW9uIG1heSBub3RcbiAgdmVyc2lvbnMuc29ydCgoYSwgYikgPT4ge1xuICAgIGlmIChzZW12ZXIuZ3QoYS5wYWNrYWdlVmVyc2lvbiwgYi5wYWNrYWdlVmVyc2lvbikpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgaWYgKHNlbXZlci5sdChhLnBhY2thZ2VWZXJzaW9uLCBiLnBhY2thZ2VWZXJzaW9uKSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9KTtcblxuICByZXR1cm4gdmVyc2lvbnM7XG59XG5cbmZ1bmN0aW9uIGNka3RmVmVyc2lvbk1hdGNoZXMoXG4gIGNka3RmVmVyc2lvbjogc3RyaW5nLFxuICBjZGt0ZlBlZXJEZXBlbmRlbmN5Q29uc3RyYWludDogc3RyaW5nLFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiBzZW12ZXIuc2F0aXNmaWVzKGNka3RmVmVyc2lvbiwgY2RrdGZQZWVyRGVwZW5kZW5jeUNvbnN0cmFpbnQpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UHJlYnVpbHRQcm92aWRlclZlcnNpb25zKFxuICBjb25zdHJhaW50OiBQcm92aWRlckNvbnN0cmFpbnQsXG4gIGNka3RmVmVyc2lvbjogc3RyaW5nLFxuKTogUHJvbWlzZTx7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXSB8IG51bGw+IHtcbiAgY29uc3QgY2RrdGZQcm92aWRlck5hbWUgPSBhd2FpdCBnZXROcG1QYWNrYWdlTmFtZShjb25zdHJhaW50LCBmYWxzZSk7XG4gIGNvbnN0IGNka3RuUHJvdmlkZXJOYW1lID0gYXdhaXQgZ2V0TnBtUGFja2FnZU5hbWUoY29uc3RyYWludCwgdHJ1ZSk7XG5cbiAgLy8gbm8gcHJlLWJ1aWx0IHByb3ZpZGVyIGV4aXN0c1xuICBpZiAoIWNka3RmUHJvdmlkZXJOYW1lICYmICFjZGt0blByb3ZpZGVyTmFtZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgY2RrdGZWZXJzaW9ucyA9IGNka3RmUHJvdmlkZXJOYW1lXG4gICAgPyBhd2FpdCBnZXRBbGxQcmVidWlsdFByb3ZpZGVyVmVyc2lvbnMoY2RrdGZQcm92aWRlck5hbWUpXG4gICAgOiAoW10gYXMgUHJlYnVpbHRQcm92aWRlclZlcnNpb25bXSk7XG4gIGxvZ2dlci5kZWJ1ZyhcbiAgICBgRm91bmQgdmVyc2lvbnMgZm9yICR7Y2RrdGZQcm92aWRlck5hbWV9OiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgY2RrdGZWZXJzaW9ucyxcbiAgICAgIG51bGwsXG4gICAgICAyLFxuICAgICl9YCxcbiAgKTtcblxuICBjb25zdCBjZGt0blZlcnNpb25zID0gY2RrdG5Qcm92aWRlck5hbWVcbiAgICA/IGF3YWl0IGdldEFsbFByZWJ1aWx0UHJvdmlkZXJWZXJzaW9ucyhjZGt0blByb3ZpZGVyTmFtZSlcbiAgICA6IChbXSBhcyBQcmVidWlsdFByb3ZpZGVyVmVyc2lvbltdKTtcbiAgbG9nZ2VyLmRlYnVnKFxuICAgIGBGb3VuZCB2ZXJzaW9ucyBmb3IgJHtjZGt0blByb3ZpZGVyTmFtZX06ICR7SlNPTi5zdHJpbmdpZnkoY2RrdG5WZXJzaW9ucywgbnVsbCwgMil9YCxcbiAgKTtcblxuICBjb25zdCB2ZXJzaW9ucyA9IGNka3RmVmVyc2lvbnMuY29uY2F0KGNka3RuVmVyc2lvbnMpO1xuXG4gIC8vIGZpbmQgZmlyc3QgdGhlIHZlcnNpb24gdGhhdCBtYXRjaGVzIHRoZSByZXF1ZXN0ZWQgcHJvdmlkZXIgdmVyc2lvbiBhbmQgY2RrdGYgdmVyc2lvblxuICBjb25zdCBtYXRjaGluZ1ZlcnNpb25zID0gdmVyc2lvbnMuZmlsdGVyKCh2KSA9PiB7XG4gICAgaWYgKFxuICAgICAgIWNka3RmVmVyc2lvbk1hdGNoZXMoY2RrdGZWZXJzaW9uLCB2LmNka3RmUGVlckRlcGVuZGVuY3lDb25zdHJhaW50KSAmJlxuICAgICAgIWNka3RmVmVyc2lvbk1hdGNoZXMoY2RrdGZWZXJzaW9uLCB2LmNka3RuUGVlckRlcGVuZGVuY3lDb25zdHJhaW50KVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlOyAvLyBza2lwIGlmIGNka3RmIHZlcnNpb24gZG9lcyBub3QgbWF0Y2hcbiAgICB9XG4gICAgaWYgKGNvbnN0cmFpbnQudmVyc2lvbikge1xuICAgICAgcmV0dXJuIHZlcnNpb25NYXRjaGVzQ29uc3RyYWludCh2LnByb3ZpZGVyVmVyc2lvbiwgY29uc3RyYWludC52ZXJzaW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7IC8vIGlmIG5vIHZlcnNpb24gY29uc3RyYWludCBpcyBwYXNzZWQsIHJldHVybiB0cnVlIG9uIHRoZSBmaXJzdCBtYXRjaFxuICB9KTtcblxuICBpZiAoIW1hdGNoaW5nVmVyc2lvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgbnBtUGFja2FnZVZlcnNpb25zID0gbWF0Y2hpbmdWZXJzaW9uc1xuICAgIC5tYXAoKG1hdGNoaW5nVmVyc2lvbikgPT4gKHtcbiAgICAgIG5hbWU6IG1hdGNoaW5nVmVyc2lvbi5wYWNrYWdlTmFtZSxcbiAgICAgIHZlcnNpb246IG1hdGNoaW5nVmVyc2lvbi5wYWNrYWdlVmVyc2lvbixcbiAgICB9KSlcbiAgICAuc29ydCgoYSwgYikgPT4gc2VtdmVyLmNvbXBhcmUoYS52ZXJzaW9uLCBiLnZlcnNpb24pKVxuICAgIC5yZXZlcnNlKCk7XG4gIHJldHVybiBucG1QYWNrYWdlVmVyc2lvbnM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQcmVidWlsdFByb3ZpZGVyVmVyc2lvbkluZm9ybWF0aW9uKFxuICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICBwYWNrYWdlVmVyc2lvbjogc3RyaW5nLFxuKTogUHJvbWlzZTxhbnk+IHtcbiAgLy8gR28gcGFja2FnZXMgaW5jbHVkZSBhbiBleHRyYSBgdlguWS5aYFxuICBpZiAocGFja2FnZVZlcnNpb24uc3RhcnRzV2l0aChcInZcIikpIHtcbiAgICBwYWNrYWdlVmVyc2lvbiA9IHBhY2thZ2VWZXJzaW9uLnNsaWNlKDEpO1xuICB9XG5cbiAgY29uc3QgdXJsID0gYGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLyR7cGFja2FnZU5hbWV9LyR7cGFja2FnZVZlcnNpb259YDtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2FjaGVkRmV0Y2g8TnBtUGFja2FnZVNpbmdsZVZlcnNpb25SZXN1bHQ+KHVybCk7XG5cbiAgbGV0IHByb3ZpZGVyTmFtZSA9IHJlc3VsdC5jZGt0bj8ucHJvdmlkZXIubmFtZSA/PyByZXN1bHQuY2RrdGY/LnByb3ZpZGVyLm5hbWU7XG4gIGlmIChwcm92aWRlck5hbWUpIHtcbiAgICBwcm92aWRlck5hbWUgPSBwcm92aWRlck5hbWUucmVwbGFjZShcInJlZ2lzdHJ5LnRlcnJhZm9ybS5pby9cIiwgXCJcIik7XG4gICAgcHJvdmlkZXJOYW1lID0gcHJvdmlkZXJOYW1lLnJlcGxhY2UoXCJoYXNoaWNvcnAvXCIsIFwiXCIpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYWNrYWdlTmFtZTogcmVzdWx0Lm5hbWUsXG4gICAgcGFja2FnZVZlcnNpb246IHJlc3VsdC52ZXJzaW9uLFxuICAgIHByb3ZpZGVyTmFtZSxcbiAgICBwcm92aWRlclZlcnNpb246XG4gICAgICByZXN1bHQuY2RrdG4/LnByb3ZpZGVyLnZlcnNpb24gPz8gcmVzdWx0LmNka3RmPy5wcm92aWRlci52ZXJzaW9uLFxuICAgIGNka3RmVmVyc2lvbjogcmVzdWx0LnBlZXJEZXBlbmRlbmNpZXNbXCJjZGt0ZlwiXSxcbiAgICBjZGt0blZlcnNpb246IHJlc3VsdC5wZWVyRGVwZW5kZW5jaWVzW1wiY2RrdG5cIl0sXG4gIH07XG59XG4iXX0=
|