@cdktn/provider-generator 0.24.0-pre.64 → 0.24.0-pre.67
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.
|
@@ -38,6 +38,22 @@ const glob_1 = require("glob");
|
|
|
38
38
|
const provider_schema_1 = require("@cdktn/provider-schema");
|
|
39
39
|
const pacmakModule = require.resolve("jsii-pacmak/bin/jsii-pacmak");
|
|
40
40
|
const jsiiModule = require.resolve("jsii/bin/jsii");
|
|
41
|
+
/**
|
|
42
|
+
* Returns the files `npm pack` would publish for the package at `dir`, as paths relative to `dir`. This is the set
|
|
43
|
+
* jsii needs to compile against a dependency — its sources and declared metadata — and excludes build outputs
|
|
44
|
+
* (`dist`, `.pack-staging`, `node_modules`, tsbuildinfo, ...) that a blanket directory copy would otherwise pull in.
|
|
45
|
+
*
|
|
46
|
+
* @param dir - Absolute path to the package directory to inspect (must contain a package.json).
|
|
47
|
+
* @returns Publishable file paths, relative to `dir`, with `..`-escape paths (from following pnpm symlinks) dropped.
|
|
48
|
+
*/
|
|
49
|
+
async function resolvePublishableFiles(dir) {
|
|
50
|
+
const stdout = await (0, commons_1.exec)("npm", ["pack", "--dry-run", "--json"], {
|
|
51
|
+
cwd: dir,
|
|
52
|
+
});
|
|
53
|
+
const packInfo = JSON.parse(stdout);
|
|
54
|
+
// Drop `..`-escape paths npm emits when following pnpm's node_modules symlinks.
|
|
55
|
+
return packInfo[0].files.map((f) => f.path).filter((p) => !p.includes(".."));
|
|
56
|
+
}
|
|
41
57
|
async function generateJsiiLanguage(code, opts, outputPath, disallowedFileGlobs = []) {
|
|
42
58
|
await (0, commons_1.mkdtemp)(async (staging) => {
|
|
43
59
|
// this is not typescript, so we generate in a staging directory and
|
|
@@ -62,8 +78,14 @@ async function generateJsiiLanguage(code, opts, outputPath, disallowedFileGlobs
|
|
|
62
78
|
const moduleName = metadata.name;
|
|
63
79
|
const moduleVersion = metadata.version;
|
|
64
80
|
const targetdir = path.join(path.join(staging, "node_modules"), moduleName);
|
|
65
|
-
await fs.mkdirp(
|
|
66
|
-
|
|
81
|
+
await fs.mkdirp(targetdir);
|
|
82
|
+
// Copy only the dep's publishable files (what `npm pack` would ship) into the jsii compile bundle.
|
|
83
|
+
for (const relPath of await resolvePublishableFiles(dir)) {
|
|
84
|
+
const src = path.join(dir, relPath);
|
|
85
|
+
const dst = path.join(targetdir, relPath);
|
|
86
|
+
await fs.mkdirp(path.dirname(dst));
|
|
87
|
+
await fs.copy(src, dst, { dereference: true });
|
|
88
|
+
}
|
|
67
89
|
// add to "deps" and "peer deps"
|
|
68
90
|
if (!moduleName.startsWith("@types/")) {
|
|
69
91
|
deps[moduleName] = moduleVersion;
|
|
@@ -538,4 +560,4 @@ const determineGoModuleName = async (dir) => {
|
|
|
538
560
|
throw new Error(`Could not determine the root Go module name. No go.mod found in ${dir} and any parent directories`);
|
|
539
561
|
};
|
|
540
562
|
exports.determineGoModuleName = determineGoModuleName;
|
|
541
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0cy1tYWtlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZXQvY29uc3RydWN0cy1tYWtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsNkNBQStCO0FBQy9CLDJDQUE2QjtBQUM3Qix5Q0FBc0M7QUFDdEMsNENBQStDO0FBQy9DLDRDQVd3QjtBQUN4Qiw0Q0FBMkQ7QUFDM0QsdUVBQTRFO0FBQzVFLG1FQUErRDtBQUMvRCwrQkFBNEI7QUFDNUIsNERBQW9EO0FBRXBELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQUNwRSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBaUQ3QyxLQUFLLFVBQVUsb0JBQW9CLENBQ3hDLElBQWUsRUFDZixJQUF5QixFQUN6QixVQUFrQixFQUNsQixzQkFBZ0MsRUFBRTtJQUVsQyxNQUFNLElBQUEsaUJBQU8sRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDOUIsb0VBQW9FO1FBQ3BFLHNFQUFzRTtRQUN0RSxvQkFBb0I7UUFDcEIsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXpCLDRFQUE0RTtRQUM1RSw0R0FBNEc7UUFDNUcsTUFBTSxhQUFhLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDNUQsV0FBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FDckMsQ0FBQztRQUNGLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElB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LENBQUM7QUFDSixDQUFDLENBQUM7QUFuQ1csUUFBQSxxQkFBcUIseUJBbUNoQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IENvZGVNYWtlciB9IGZyb20gXCJjb2RlbWFrZXJcIjtcbmltcG9ydCB7IGV4ZWMsIG1rZHRlbXAgfSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7XG4gIFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50LFxuICBsb2dnZXIsXG4gIGxvZ1RpbWVzcGFuLFxuICBDb25zdHJ1Y3RzTWFrZXJQcm92aWRlclRhcmdldCxcbiAgQ29uc3RydWN0c01ha2VyTW9kdWxlVGFyZ2V0LFxuICBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gIFByb3ZpZGVyU2NoZW1hLFxuICBNb2R1bGVTY2hlbWEsXG4gIEVycm9ycyxcbiAgdHlwZSBMYW5ndWFnZU9wdGlvbnMsXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgRElTUExBWV9WRVJTSU9OLCBMYW5ndWFnZSB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgVGVycmFmb3JtUHJvdmlkZXJHZW5lcmF0b3IgfSBmcm9tIFwiLi9nZW5lcmF0b3IvcHJvdmlkZXItZ2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBNb2R1bGVHZW5lcmF0b3IgfSBmcm9tIFwiLi9nZW5lcmF0b3IvbW9kdWxlLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgZ2xvYiB9IGZyb20gXCJnbG9iXCI7XG5pbXBvcnQgeyByZWFkU2NoZW1hIH0gZnJvbSBcIkBjZGt0bi9wcm92aWRlci1zY2hlbWFcIjtcblxuY29uc3QgcGFjbWFrTW9kdWxlID0gcmVxdWlyZS5yZXNvbHZlKFwianNpaS1wYWNtYWsvYmluL2pzaWktcGFjbWFrXCIpO1xuY29uc3QganNpaU1vZHVsZSA9IHJlcXVpcmUucmVzb2x2ZShcImpzaWkvYmluL2pzaWlcIik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVKU0lJT3B0aW9ucyB7XG4gIGVudHJ5cG9pbnQ6IHN0cmluZztcbiAgZGVwczogc3RyaW5nW107XG4gIG1vZHVsZUtleTogc3RyaW5nO1xuICBleHBvcnRzPzogUmVjb3JkPHN0cmluZywgRXhwb3J0RGVmaW5pdGlvbiB8IHN0cmluZz47XG4gIGpzaWk/OiBKc2lpT3V0cHV0T3B0aW9ucztcbiAgcHl0aG9uPzogUHl0aG9uT3V0cHV0T3B0aW9ucztcbiAgamF2YT86IEphdmFPdXRwdXRPcHRpb25zO1xuICBjc2hhcnA/OiBDU2hhcnBPdXRwdXRPcHRpb25zO1xuICBnb2xhbmc/OiBHb0xhbmdPdXRwdXRPcHRpb25zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEpzaWlPdXRwdXRPcHRpb25zIHtcbiAgcGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFB5dGhvbk91dHB1dE9wdGlvbnMge1xuICBvdXRkaXI6IHN0cmluZztcbiAgbW9kdWxlTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEphdmFPdXRwdXRPcHRpb25zIHtcbiAgb3V0ZGlyOiBzdHJpbmc7XG4gIHBhY2thZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDU2hhcnBPdXRwdXRPcHRpb25zIHtcbiAgb3V0ZGlyOiBzdHJpbmc7XG4gIG5hbWVzcGFjZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdvTGFuZ091dHB1dE9wdGlvbnMge1xuICBvdXRkaXI6IHN0cmluZztcbiAgbW9kdWxlTmFtZTogc3RyaW5nO1xuICBwYWNrYWdlTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlZSBodHRwczovL25vZGVqcy5vcmcvYXBpL3BhY2thZ2VzLmh0bWwjY29uZGl0aW9uYWwtZXhwb3J0cyBmb3IgbW9yZSBpbmZvcm1hdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydERlZmluaXRpb24ge1xuICBub2RlPzogc3RyaW5nO1xuICBpbXBvcnQ/OiBzdHJpbmc7XG4gIHJlcXVpcmU/OiBzdHJpbmc7XG4gIGRlZmF1bHQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUpzaWlMYW5ndWFnZShcbiAgY29kZTogQ29kZU1ha2VyLFxuICBvcHRzOiBHZW5lcmF0ZUpTSUlPcHRpb25zLFxuICBvdXRwdXRQYXRoOiBzdHJpbmcsXG4gIGRpc2FsbG93ZWRGaWxlR2xvYnM6IHN0cmluZ1tdID0gW10sXG4pIHtcbiAgYXdhaXQgbWtkdGVtcChhc3luYyAoc3RhZ2luZykgPT4ge1xuICAgIC8vIHRoaXMgaXMgbm90IHR5cGVzY3JpcHQsIHNvIHdlIGdlbmVyYXRlIGluIGEgc3RhZ2luZyBkaXJlY3RvcnkgYW5kXG4gICAgLy8gdXNlIGpzaWktc3JjbWFrIHRvIGNvbXBpbGUgYW5kIGV4dHJhY3QgdGhlIGxhbmd1YWdlLXNwZWNpZmljIHNvdXJjZVxuICAgIC8vIGludG8gb3VyIHByb2plY3QuXG4gICAgYXdhaXQgY29kZS5zYXZlKHN0YWdpbmcpO1xuXG4gICAgLy8gYXMgdGhlIGFib3ZlIGdlbmVyYXRlZCB0aGUgVHlwZXNjcmlwdCBjb2RlIGZvciBhbGwgcHJvdmlkZXJzIGFuZCBtb2R1bGVzLFxuICAgIC8vIHdlIG5lZWQgdG8gZmlsdGVyIG91dCB0aGUgb25lcyB3ZSBkb24ndCBuZWVkIHNvIHRoZXkgZG9uJ3QgZW5kIHVwIGluIHRoZSBKU0lJIGJ1bmRsZSBvdmVyIGFuZCBvdmVyIGFnYWluLlxuICAgIGNvbnN0IGZpbGVzVG9EZWxldGUgPSBkaXNhbGxvd2VkRmlsZUdsb2JzLmZsYXRNYXAoKHBhdHRlcm4pID0+XG4gICAgICBnbG9iLnN5bmMocGF0dGVybiwgeyBjd2Q6IHN0YWdpbmcgfSksXG4gICAgKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGZpbGVzVG9EZWxldGUubWFwKChmaWxlKSA9PiBmcy5yZW1vdmUocGF0aC5qb2luKHN0YWdpbmcsIGZpbGUpKSksXG4gICAgKTtcblxuICAgIC8vIENvbXBpbGUgd2l0aCBKU0lJXG4gICAgY29uc3QganNpaUFyZ3MgPSBbXCItLXNpbGVuY2Utd2FybmluZ3NcIiwgXCJyZXNlcnZlZC13b3JkXCJdO1xuICAgIGNvbnN0IGpzaWlFbnRyeXBvaW50ID0gb3B0cy5lbnRyeXBvaW50O1xuICAgIGNvbnN0IGJhc2VwYXRoID0gcGF0aC5qb2luKFxuICAgICAgcGF0aC5kaXJuYW1lKGpzaWlFbnRyeXBvaW50KSxcbiAgICAgIHBhdGguYmFzZW5hbWUoanNpaUVudHJ5cG9pbnQsIFwiLnRzXCIpLFxuICAgICk7XG5cbiAgICBjb25zdCBtb2R1bGVLZXkgPSBvcHRzLm1vZHVsZUtleS5yZXBsYWNlKC9cXC4vZywgXCJcIikucmVwbGFjZSgvXFwvL2csIFwiXCIpO1xuICAgIGNvbnN0IG1vZHVsZURpcnMgPSBvcHRzLmRlcHM7XG4gICAgY29uc3QgdGFyZ2V0czogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIGNvbnN0IGRlcHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGRpciBvZiBtb2R1bGVEaXJzKSB7XG4gICAgICAvLyByZWFkIG1vZHVsZSBtZXRhZGF0YVxuICAgICAgY29uc3QgbWV0YWRhdGEgPSBhd2FpdCBmcy5yZWFkSnNvbihwYXRoLmpvaW4oZGlyLCBcInBhY2thZ2UuanNvblwiKSk7XG4gICAgICBjb25zdCBtb2R1bGVOYW1lOiBzdHJpbmcgPSBtZXRhZGF0YS5uYW1lO1xuICAgICAgY29uc3QgbW9kdWxlVmVyc2lvbjogc3RyaW5nID0gbWV0YWRhdGEudmVyc2lvbjtcblxuICAgICAgY29uc3QgdGFyZ2V0ZGlyID0gcGF0aC5qb2luKFxuICAgICAgICBwYXRoLmpvaW4oc3RhZ2luZywgXCJub2RlX21vZHVsZXNcIiksXG4gICAgICAgIG1vZHVsZU5hbWUsXG4gICAgICApO1xuICAgICAgYXdhaXQgZnMubWtkaXJwKHBhdGguZGlybmFtZSh0YXJnZXRkaXIpKTtcbiAgICAgIGF3YWl0IGZzLmNvcHkoZGlyLCB0YXJnZXRkaXIsIHsgZGVyZWZlcmVuY2U6IHRydWUgfSk7XG5cbiAgICAgIC8vIGFkZCB0byBcImRlcHNcIiBhbmQgXCJwZWVyIGRlcHNcIlxuICAgICAgaWYgKCFtb2R1bGVOYW1lLnN0YXJ0c1dpdGgoXCJAdHlwZXMvXCIpKSB7XG4gICAgICAgIGRlcHNbbW9kdWxlTmFtZV0gPSBtb2R1bGVWZXJzaW9uO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBwa2cgPSB7XG4gICAgICBuYW1lOiBtb2R1bGVLZXksXG4gICAgICB2ZXJzaW9uOiBcIjAuMC4wXCIsXG4gICAgICBhdXRob3I6IFwiZ2VuZXJhdGVkQGdlbmVyYXRlZC5jb21cIixcbiAgICAgIG1haW46IGAke2Jhc2VwYXRofS5qc2AsXG4gICAgICB0eXBlczogYCR7YmFzZXBhdGh9LmQudHNgLFxuICAgICAgbGljZW5zZTogXCJVTkxJQ0VOU0VEXCIsXG4gICAgICByZXBvc2l0b3J5OiB7IHVybDogXCJodHRwOi8vZ2VuZXJhdGVkXCIsIHR5cGU6IFwiZ2l0XCIgfSxcbiAgICAgIGpzaWk6IHtcbiAgICAgICAgb3V0ZGlyOiBcImRpc3RcIixcbiAgICAgICAgdGFyZ2V0czogdGFyZ2V0cyxcbiAgICAgIH0sXG4gICAgICBkZXBlbmRlbmNpZXM6IGRlcHMsXG4gICAgICBwZWVyRGVwZW5kZW5jaWVzOiBkZXBzLFxuICAgIH07XG5cbiAgICBpZiAob3B0cy5leHBvcnRzKSB7XG4gICAgICAocGtnIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pLmV4cG9ydHMgPSBvcHRzLmV4cG9ydHM7XG4gICAgfVxuICAgIGlmIChvcHRzLnB5dGhvbikge1xuICAgICAgdGFyZ2V0cy5weXRob24gPSB7XG4gICAgICAgIGRpc3ROYW1lOiBcImdlbmVyYXRlZFwiLFxuICAgICAgICBtb2R1bGU6IG9wdHMucHl0aG9uLm1vZHVsZU5hbWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChvcHRzLmphdmEpIHtcbiAgICAgIHRhcmdldHMuamF2YSA9IHtcbiAgICAgICAgcGFja2FnZTogb3B0cy5qYXZhLnBhY2thZ2UsXG4gICAgICAgIG1hdmVuOiB7XG4gICAgICAgICAgZ3JvdXBJZDogXCJnZW5lcmF0ZWRcIixcbiAgICAgICAgICBhcnRpZmFjdElkOiBcImdlbmVyYXRlZFwiLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5jc2hhcnApIHtcbiAgICAgIHRhcmdldHMuZG90bmV0ID0ge1xuICAgICAgICBuYW1lc3BhY2U6IG9wdHMuY3NoYXJwLm5hbWVzcGFjZSxcbiAgICAgICAgcGFja2FnZUlkOiBvcHRzLmNzaGFycC5uYW1lc3BhY2UsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChvcHRzLmdvbGFuZykge1xuICAgICAgdGFyZ2V0cy5nbyA9IHtcbiAgICAgICAgbW9kdWxlTmFtZTogb3B0cy5nb2xhbmcubW9kdWxlTmFtZSxcbiAgICAgICAgcGFja2FnZU5hbWU6IG9wdHMuZ29sYW5nLnBhY2thZ2VOYW1lLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgICBwYXRoLmpvaW4oc3RhZ2luZywgXCJwYWNrYWdlLmpzb25cIiksXG4gICAgICBKU09OLnN0cmluZ2lmeShwa2csIHVuZGVmaW5lZCwgMiksXG4gICAgKTtcblxuICAgIGNvbnN0IGVuZEpzaWlUaW1lciA9IGxvZ1RpbWVzcGFuKFwianNpaVwiKTtcbiAgICBhd2FpdCBleGVjKGpzaWlNb2R1bGUsIGpzaWlBcmdzLCB7XG4gICAgICBjd2Q6IHN0YWdpbmcsXG4gICAgfSk7XG4gICAgZW5kSnNpaVRpbWVyKCk7XG5cbiAgICAvLyBleHRyYWN0IC5qc2lpIGlmIHJlcXVlc3RlZFxuICAgIGlmIChvcHRzLmpzaWkpIHtcbiAgICAgIGF3YWl0IGZzLmNvcHkocGF0aC5qb2luKHN0YWdpbmcsIFwiLmpzaWlcIiksIG9wdHMuanNpaS5wYXRoKTtcbiAgICB9XG5cbiAgICAvLyBydW4gcGFjbWFrIHRvIGdlbmVyYXRlIGNvZGVcbiAgICBjb25zdCBlbmRKc2lpUGFjbWFrVGltZXIgPSBsb2dUaW1lc3BhbihcImpzaWktcGFjbWFrXCIpO1xuICAgIGF3YWl0IGV4ZWMocGFjbWFrTW9kdWxlLCBbXCItLWNvZGUtb25seVwiXSwgeyBjd2Q6IHN0YWdpbmcgfSk7XG4gICAgZW5kSnNpaVBhY21ha1RpbWVyKCk7XG5cbiAgICBpZiAob3B0cy5weXRob24pIHtcbiAgICAgIGNvbnN0IHJlbGRpciA9IG9wdHMucHl0aG9uLm1vZHVsZU5hbWUucmVwbGFjZSgvXFwuL2csIFwiL1wiKTsgLy8ganNpaSByZXBsYWNlcyBcIi5cIiB3aXRoIFwiL1wiXG4gICAgICBjb25zdCBzb3VyY2UgPSBwYXRoLnJlc29sdmUoXG4gICAgICAgIHBhdGguam9pbihzdGFnaW5nLCBcImRpc3QvcHl0aG9uL3NyY1wiLCByZWxkaXIpLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHBhdGguam9pbihvcHRzLnB5dGhvbi5vdXRkaXIsIHJlbGRpcik7XG4gICAgICBhd2FpdCBmcy5tb3ZlKHNvdXJjZSwgdGFyZ2V0LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5qYXZhKSB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBwYXRoLnJlc29sdmUocGF0aC5qb2luKHN0YWdpbmcsIFwiZGlzdC9qYXZhL3NyYy9cIikpO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gcGF0aC5qb2luKG9wdHMuamF2YS5vdXRkaXIsIFwic3JjL1wiKTtcbiAgICAgIC8vIFByZS1jcmVhdGUgc2hhcmVkIHBhY2thZ2UgZGlyZWN0b3JpZXMuXG4gICAgICBjb25zdCBwYWNrYWdlRGlyID0gb3B0cy5qYXZhLnBhY2thZ2UucmVwbGFjZSgvXFwuL2csIFwiL1wiKTtcbiAgICAgIGF3YWl0IGZzLm1rZGlycChwYXRoLmpvaW4odGFyZ2V0LCBcIm1haW4vamF2YVwiLCBwYWNrYWdlRGlyKSk7XG4gICAgICBhd2FpdCBmcy5ta2RpcnAocGF0aC5qb2luKHRhcmdldCwgXCJtYWluL3Jlc291cmNlc1wiLCBwYWNrYWdlRGlyKSk7XG4gICAgICBhd2FpdCBmcy5jb3B5KHNvdXJjZSwgdGFyZ2V0LCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgb3ZlcndyaXRlOiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5jc2hhcnApIHtcbiAgICAgIGNvbnN0IHJlbGRpciA9IG9wdHMuY3NoYXJwLm5hbWVzcGFjZTtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHBhdGgucmVzb2x2ZShwYXRoLmpvaW4oc3RhZ2luZywgXCJkaXN0L2RvdG5ldC9cIiwgcmVsZGlyKSk7XG4gICAgICBjb25zdCB0YXJnZXQgPSBwYXRoLmpvaW4ob3B0cy5jc2hhcnAub3V0ZGlyLCByZWxkaXIpO1xuICAgICAgYXdhaXQgZnMubW92ZShzb3VyY2UsIHRhcmdldCwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuZ29sYW5nKSB7XG4gICAgICBjb25zdCByZWxkaXIgPSBvcHRzLmdvbGFuZy5wYWNrYWdlTmFtZTtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHBhdGgucmVzb2x2ZShwYXRoLmpvaW4oc3RhZ2luZywgXCJkaXN0L2dvL1wiLCByZWxkaXIpKTtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHBhdGguam9pbihvcHRzLmdvbGFuZy5vdXRkaXIsIHJlbGRpcik7XG4gICAgICBhd2FpdCBmcy5tb3ZlKHNvdXJjZSwgdGFyZ2V0LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICAgIC8vIHJlbW92ZSBnby5tb2QgYXMgdGhpcyB3b3VsZCBtYWtlIGl0IGEgc3VibW9kdWxlXG4gICAgICBhd2FpdCBmcy5yZW1vdmUocGF0aC5qb2luKHRhcmdldCwgXCJnby5tb2RcIikpO1xuICAgIH1cblxuICAgIFtcInZlcnNpb25zLmpzb25cIiwgXCJjb25zdHJhaW50cy5qc29uXCJdLmZvckVhY2goKGZpbGUpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZzLmNvcHlTeW5jKFxuICAgICAgICAgIHBhdGgucmVzb2x2ZShzdGFnaW5nLCBmaWxlKSxcbiAgICAgICAgICBwYXRoLnJlc29sdmUob3V0cHV0UGF0aCwgZmlsZSksXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgRmFpbGVkIHRvIGNvcHkgJHtmaWxlfTogJHtlfWApO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxudHlwZSBDb25zdHJhaW50RmlsZSA9IHsgcHJvdmlkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+OyBjZGt0Zjogc3RyaW5nIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0T3B0aW9ucyB7XG4gIHJlYWRvbmx5IHRhcmdldExhbmd1YWdlOiBMYW5ndWFnZTtcbiAgcmVhZG9ubHkgY29kZU1ha2VyT3V0cHV0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGpzaWlQYXJhbGxlbGlzbT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFBhdGggdG8gY29weSB0aGUgb3V0cHV0IC5qc2lpIGZpbGUuXG4gICAqIEBkZWZhdWx0IC0ganNpaSBmaWxlIGlzIG5vdCBlbWl0dGVkXG4gICAqL1xuICByZWFkb25seSBvdXRwdXRKc2lpPzogc3RyaW5nO1xuICAvKipcbiAgICogTGFuZ3VhZ2Utc3BlY2lmaWMgY29kZSBnZW5lcmF0aW9uIG9wdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBsYW5ndWFnZU9wdGlvbnM/OiBMYW5ndWFnZU9wdGlvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBDb25zdHJ1Y3RzTWFrZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvZGVNYWtlck91dGRpcjogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvZGU6IENvZGVNYWtlcjtcbiAgcHJpdmF0ZSB2ZXJzaW9uczogeyBbcHJvdmlkZXJOYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IEdldE9wdGlvbnMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzY2hlbWFDYWNoZVBhdGg/OiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXBvcnRUZWxlbWV0cnk6IChwYXlsb2FkOiB7XG4gICAgICB0YXJnZXRMYW5ndWFnZTogc3RyaW5nO1xuICAgICAgdHJhY2tpbmdQYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIH0pID0+IFByb21pc2U8dm9pZD4gPSBhc3luYyAoKSA9PiB7fSxcbiAgKSB7XG4gICAgdGhpcy5jb2RlTWFrZXJPdXRkaXIgPSBwYXRoLnJlc29sdmUodGhpcy5vcHRpb25zLmNvZGVNYWtlck91dHB1dCk7XG4gICAgZnMubWtkaXJwU3luYyh0aGlzLmNvZGVNYWtlck91dGRpcik7XG4gICAgdGhpcy5jb2RlID0gbmV3IENvZGVNYWtlcigpO1xuICAgIHRoaXMudmVyc2lvbnMgPSB7fTtcbiAgfVxuICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlVHlwZXNjcmlwdFByb3ZpZGVyKFxuICAgIHRhcmdldDogQ29uc3RydWN0c01ha2VyUHJvdmlkZXJUYXJnZXQsXG4gICAgc2NoZW1hOiBQcm92aWRlclNjaGVtYSxcbiAgKSB7XG4gICAgY29uc3QgZW5kVFNUaW1lciA9IGxvZ1RpbWVzcGFuKGBHZW5lcmF0ZSBUeXBlc2NyaXB0IGZvciAke3RhcmdldC5uYW1lfWApO1xuICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBUZXJyYWZvcm1Qcm92aWRlckdlbmVyYXRvcih0aGlzLmNvZGUsIHNjaGVtYSwge1xuICAgICAgaW1wb3J0RXh0ZW5zaW9uOiB0aGlzLm9wdGlvbnMubGFuZ3VhZ2VPcHRpb25zPy5pbXBvcnRFeHRlbnNpb24sXG4gICAgfSk7XG4gICAgZ2VuZXJhdG9yLmdlbmVyYXRlKHRhcmdldCk7XG5cbiAgICB0aGlzLnZlcnNpb25zID0geyAuLi50aGlzLnZlcnNpb25zLCAuLi5nZW5lcmF0b3IudmVyc2lvbnMgfTtcbiAgICBlbmRUU1RpbWVyKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZmlsdGVyQWxyZWFkeUdlbmVyYXRlZChcbiAgICBjb25zdHJhaW50czogVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnRbXSxcbiAgKSB7XG4gICAgbGV0IGNvbnN0cmFpbnRzRmlsZSA9IFwie31cIjtcbiAgICB0cnkge1xuICAgICAgY29uc3RyYWludHNGaWxlID0gYXdhaXQgZnMucmVhZEZpbGUoXG4gICAgICAgIHBhdGguam9pbih0aGlzLmNvZGVNYWtlck91dGRpciwgXCJjb25zdHJhaW50cy5qc29uXCIpLFxuICAgICAgICBcInV0ZjhcIixcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgQ291bGQgbm90IGZpbmQgY29uc3RyYWludHMuanNvbiBmaWxlIHdoaWxlIGZpbHRlcmluZzogJHtlfS4gVGhpcyBtZWFucyBubyBwcm92aWRlcnMgd2VyZSBnZW5lcmF0ZWQsIHNvIGFsbCBjb25zdHJhaW50cyBuZWVkIHRvIGJlIGdlbmVyYXRlZC5gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBjb25zdHJhaW50cztcbiAgICB9XG4gICAgbG9nZ2VyLmRlYnVnKGBGb3VuZCBjb25zdHJhaW50cy5qc29uIGZpbGU6ICR7Y29uc3RyYWludHNGaWxlfWApO1xuXG4gICAgbGV0IHByZXZpb3VzQ29uc3RyYWludHM6IFBhcnRpYWw8Q29uc3RyYWludEZpbGU+ID0ge307XG4gICAgdHJ5IHtcbiAgICAgIHByZXZpb3VzQ29uc3RyYWludHMgPSBKU09OLnBhcnNlKGNvbnN0cmFpbnRzRmlsZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIGBDb3VsZCBub3QgcGFyc2UgY29uc3RyYWludHMuanNvbiBmaWxlIHdoaWxlIGZpbHRlcmluZzogJHtlfS4gR2VuZXJhdGluZyBhbGwgY29uc3RyYWludHMuYCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gY29uc3RyYWludHM7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYEZvdW5kIHByZXZpb3VzIGNvbnN0cmFpbnRzOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBwcmV2aW91c0NvbnN0cmFpbnRzLFxuICAgICAgICBudWxsLFxuICAgICAgICAyLFxuICAgICAgKX1gLFxuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICAhcHJldmlvdXNDb25zdHJhaW50cy5wcm92aWRlcnMgfHxcbiAgICAgIHR5cGVvZiBwcmV2aW91c0NvbnN0cmFpbnRzLnByb3ZpZGVycyAhPT0gXCJvYmplY3RcIlxuICAgICkge1xuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIGBDb3VsZCBub3QgZmluZCBwcm92aWRlcnMgaW4gY29uc3RyYWludHMuanNvbiBmaWxlLCBnZW5lcmF0aW5nIGFsbCBjb25zdHJhaW50cy4gVGhlIGNvbnN0cmFpbnRzIGZpbGUgd2FzICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgcHJldmlvdXNDb25zdHJhaW50cyxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIDIsXG4gICAgICAgICl9YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gY29uc3RyYWludHM7XG4gICAgfVxuXG4gICAgaWYgKHByZXZpb3VzQ29uc3RyYWludHMuY2RrdGYgIT09IERJU1BMQVlfVkVSU0lPTikge1xuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIGBUaGUgQ0RLVE4gdmVyc2lvbiBoYXMgY2hhbmdlZCwgZ2VuZXJhdGluZyBhbGwgY29uc3RyYWludHMuIFRoZSBwcmV2aW91cyB2ZXJzaW9uIHdhcyAke3ByZXZpb3VzQ29uc3RyYWludHMuY2RrdGZ9LCB0aGUgY3VycmVudCB2ZXJzaW9uIGlzICR7RElTUExBWV9WRVJTSU9OfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGNvbnN0cmFpbnRzO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnN0cmFpbnRzVG9HZW5lcmF0ZSA9IGNvbnN0cmFpbnRzLmZpbHRlcigoY29uc3RyYWludCkgPT4ge1xuICAgICAgY29uc3QgY29uc3RyYWludE1hdGNoZXMgPVxuICAgICAgICBwcmV2aW91c0NvbnN0cmFpbnRzLnByb3ZpZGVycyFbY29uc3RyYWludC5mcW5dID09PSBjb25zdHJhaW50LnZlcnNpb247XG4gICAgICBsZXQgcHJvdmlkZXJGb2xkZXJFeGlzdHMgPSBmYWxzZTtcblxuICAgICAgc3dpdGNoICh0aGlzLm9wdGlvbnMudGFyZ2V0TGFuZ3VhZ2UpIHtcbiAgICAgICAgY2FzZSBMYW5ndWFnZS5UWVBFU0NSSVBUOlxuICAgICAgICAgIHByb3ZpZGVyRm9sZGVyRXhpc3RzID0gZnMuZXhpc3RzU3luYyhcbiAgICAgICAgICAgIHBhdGguam9pbih0aGlzLmNvZGVNYWtlck91dGRpciwgXCJwcm92aWRlcnNcIiwgY29uc3RyYWludC5uYW1lKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIExhbmd1YWdlLlBZVEhPTjpcbiAgICAgICAgY2FzZSBMYW5ndWFnZS5KQVZBOlxuICAgICAgICBjYXNlIExhbmd1YWdlLkNTSEFSUDpcbiAgICAgICAgICBwcm92aWRlckZvbGRlckV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICBwYXRoLmpvaW4odGhpcy5jb2RlTWFrZXJPdXRkaXIsIGNvbnN0cmFpbnQubmFtZSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBMYW5ndWFnZS5HTzpcbiAgICAgICAgICBwcm92aWRlckZvbGRlckV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgIHRoaXMuY29kZU1ha2VyT3V0ZGlyLFxuICAgICAgICAgICAgICBjb25zdHJhaW50Lm5hbWVzcGFjZSB8fCBcImhhc2hpY29ycFwiLFxuICAgICAgICAgICAgICBjb25zdHJhaW50Lm5hbWUsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb3ZpZGVyRXhpc3RzID0gY29uc3RyYWludE1hdGNoZXMgJiYgcHJvdmlkZXJGb2xkZXJFeGlzdHM7XG4gICAgICByZXR1cm4gIXByb3ZpZGVyRXhpc3RzO1xuICAgIH0pO1xuXG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYENvbnN0cmFpbnRzIHRvIGdlbmVyYXRlOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBjb25zdHJhaW50c1RvR2VuZXJhdGUsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApfWAsXG4gICAgKTtcblxuICAgIHJldHVybiBjb25zdHJhaW50c1RvR2VuZXJhdGU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlVHlwZXNjcmlwdE1vZHVsZShcbiAgICB0YXJnZXQ6IENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldCxcbiAgICBzY2hlbWE6IE1vZHVsZVNjaGVtYSxcbiAgKSB7XG4gICAgY29uc3QgZW5kVFNUaW1lciA9IGxvZ1RpbWVzcGFuKGBHZW5lcmF0ZSBUeXBlc2NyaXB0IGZvciAke3RhcmdldC5uYW1lfWApO1xuICAgIHRhcmdldC5zcGVjID0gc2NoZW1hO1xuICAgIG5ldyBNb2R1bGVHZW5lcmF0b3IodGhpcy5jb2RlLCBbdGFyZ2V0XSk7XG4gICAgZW5kVFNUaW1lcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZW5lcmF0ZVR5cGVzY3JpcHQoXG4gICAgdGFyZ2V0OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gICAgc2NoZW1hczogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiByZWFkU2NoZW1hPj4sXG4gICkge1xuICAgIGlmICh0YXJnZXQuaXNNb2R1bGUpIHtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IHNjaGVtYXMubW9kdWxlU2NoZW1hPy5bdGFyZ2V0Lm1vZHVsZUtleV07XG4gICAgICBpZiAoIXNjaGVtYSkge1xuICAgICAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoXG4gICAgICAgICAgYENvdWxkIG5vdCBnZW5lcmF0ZSBzY2hlbWEgZm9yIG1vZHVsZSAke3RhcmdldC5tb2R1bGVLZXl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5nZW5lcmF0ZVR5cGVzY3JpcHRNb2R1bGUoXG4gICAgICAgIHRhcmdldCBhcyBDb25zdHJ1Y3RzTWFrZXJNb2R1bGVUYXJnZXQsXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0YXJnZXQuaXNQcm92aWRlcikge1xuICAgICAgaWYgKCFzY2hlbWFzLnByb3ZpZGVyU2NoZW1hKSB7XG4gICAgICAgIHRocm93IEVycm9ycy5JbnRlcm5hbChgQ291bGQgbm90IGdlbmVyYXRlIHNjaGVtYSBmb3IgcHJvdmlkZXJzYCk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuZ2VuZXJhdGVUeXBlc2NyaXB0UHJvdmlkZXIoXG4gICAgICAgIHRhcmdldCBhcyBDb25zdHJ1Y3RzTWFrZXJQcm92aWRlclRhcmdldCxcbiAgICAgICAgc2NoZW1hcy5wcm92aWRlclNjaGVtYSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFVua25vd24gdGFyZ2V0IHR5cGUgdXNlZCB0byBnZW5lcmF0ZSBiaW5kaW5nczogJHt0YXJnZXQubmFtZX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBlbWl0cyBhIHZlcnNpb25zLmpzb24gZmlsZSB3aXRoIGEgbWFwIG9mIHRoZSB1c2VkIHZlcnNpb24gZm9yIGVhY2ggcHJvdmlkZXIgZnFwblxuICBwcml2YXRlIHVwZGF0ZVZlcnNpb25zRmlsZShcbiAgICBhbGxvd2VkQ29uc3RyYWludHM6IFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50W10sXG4gICkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBVcGRhdGluZyB2ZXJzaW9ucyBmaWxlIHdpdGggZ2VuZXJhdGVkIHZlcnNpb25zICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHRoaXMudmVyc2lvbnMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApfSB3aXRoIGFsbG93ZWQgY29uc3RyYWludHMgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgYWxsb3dlZENvbnN0cmFpbnRzLFxuICAgICAgICBudWxsLFxuICAgICAgICAyLFxuICAgICAgKX1gLFxuICAgICk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBcInZlcnNpb25zLmpzb25cIjtcbiAgICBsZXQgcHJldmlvdXNWZXJzaW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIHRyeSB7XG4gICAgICBwcmV2aW91c1ZlcnNpb25zID0gSlNPTi5wYXJzZShcbiAgICAgICAgZnMucmVhZEZpbGVTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmNvZGVNYWtlck91dGRpciwgZmlsZVBhdGgpLCBcInV0ZjhcIiksXG4gICAgICApO1xuXG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBSZWFkIGV4aXN0aW5nIHZlcnNpb25zIGZpbGU6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgcHJldmlvdXNWZXJzaW9ucyxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIDIsXG4gICAgICAgICl9YCxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWdub3JlXG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBDb3VsZCBub3QgcmVhZCB2ZXJzaW9ucyBmaWxlLCB0aGlzIGlzIGV4cGVjdGVkIGlmIHRoZXJlIGFyZSBubyBwcmUtZXhpc3RpbmcgbG9jYWwgcHJvdmlkZXJzOiAke2V9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgdmVyc2lvbnMgPSBhbGxvd2VkQ29uc3RyYWludHMucmVkdWNlKChhY2MsIGNvbnN0cmFpbnQpID0+IHtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gT2JqZWN0LmVudHJpZXMocHJldmlvdXNWZXJzaW9ucykuZmluZCgoW25hbWVdKSA9PlxuICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIG1vcmUgcmVmaW5lZCwgYnV0IGl0J3MgZ29vZCBlbm91Z2ggZm9yIG5vd1xuICAgICAgICBuYW1lLmVuZHNXaXRoKGNvbnN0cmFpbnQuZnFuKSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChwcm92aWRlcikge1xuICAgICAgICBjb25zdCBbbmFtZSwgdmVyc2lvbl0gPSBwcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIHsgLi4uYWNjLCBbbmFtZV06IHZlcnNpb24gfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgV3JpdGluZyB2ZXJzaW9ucyBmaWxlICgke2ZpbGVQYXRofSk6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHZlcnNpb25zLFxuICAgICAgICBudWxsLFxuICAgICAgICAyLFxuICAgICAgKX1gLFxuICAgICk7XG5cbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKEpTT04uc3RyaW5naWZ5KHsgLi4udmVyc2lvbnMsIC4uLnRoaXMudmVyc2lvbnMgfSwgbnVsbCwgMikpO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICAgIHJldHVybiBmaWxlUGF0aDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZW1vdmVGb2xkZXJzVGhhdFNob3VsZE5vdEV4aXN0KFxuICAgIGNvbnN0cmFpbnRzVGhhdFNob3VsZEV4aXN0OiBUZXJyYWZvcm1EZXBlbmRlbmN5Q29uc3RyYWludFtdLFxuICApIHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgUmVtb3ZpbmcgcHJvdmlkZXJzIGV4Y2VwdCBmb3IgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgY29uc3RyYWludHNUaGF0U2hvdWxkRXhpc3QsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApfWAsXG4gICAgKTtcblxuICAgIC8vIEFsbCBsYW5ndWFnZXMgYmVzaWRlcyBUUyBrZWVwIHRoZWlyIHByb3ZpZGVycyBpbiB0aGUgc2FtZSBmb2xkZXJzIGFzIG1vZHVsZXNcbiAgICAvLyB0aGlzIG1ha2VzIGl0IGltcG9zc2libGUgZm9yIHVzIHRvIGRpc3Rpbmd1aXNoIGEgbm8gbG9uZ2VyIHJlcXVpcmVkIHByb3ZpZGVyXG4gICAgLy8gZnJvbSBhIG1hbnVhbGx5IHdyaXR0ZW4gY29uc3RydWN0IG9yIGEgbW9kdWxlXG4gICAgaWYgKCF0aGlzLmlzSmF2YXNjcmlwdFRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBmaWxlc0luUHJvdmlkZXJzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHByb3ZpZGVyc0ZvbGRlciA9IHBhdGgucmVzb2x2ZSh0aGlzLmNvZGVNYWtlck91dGRpciwgXCJwcm92aWRlcnNcIik7XG4gICAgdHJ5IHtcbiAgICAgIGZpbGVzSW5Qcm92aWRlcnMgPSBhd2FpdCBmcy5yZWFkZGlyKHByb3ZpZGVyc0ZvbGRlcik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgRXJyb3IgbGlzdGluZyBmaWxlcyBpbiBwcm92aWRlcnMgZm9sZGVyICcke3Byb3ZpZGVyc0ZvbGRlcn0nOiAke2V9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZm9sZGVycyA9IGZpbGVzSW5Qcm92aWRlcnMuZmlsdGVyKChmaWxlKSA9PlxuICAgICAgZnNcbiAgICAgICAgLnN0YXRTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmNvZGVNYWtlck91dGRpciwgXCJwcm92aWRlcnNcIiwgZmlsZSkpXG4gICAgICAgIC5pc0RpcmVjdG9yeSgpLFxuICAgICk7XG5cbiAgICByZXR1cm4gZm9sZGVycy5mb3JFYWNoKChmb2xkZXIpID0+IHtcbiAgICAgIGNvbnN0IHNob3VsZEV4aXN0ID0gY29uc3RyYWludHNUaGF0U2hvdWxkRXhpc3Quc29tZShcbiAgICAgICAgKGNvbnN0cmFpbnQpID0+IGNvbnN0cmFpbnQubmFtZSA9PT0gZm9sZGVyLFxuICAgICAgKTtcblxuICAgICAgaWYgKCFzaG91bGRFeGlzdCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFJlbW92aW5nIGZvbGRlciAke2ZvbGRlcn0gZnJvbSBwcm92aWRlcnNgKTtcbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLnJlc29sdmUodGhpcy5jb2RlTWFrZXJPdXRkaXIsIFwicHJvdmlkZXJzXCIsIGZvbGRlcikpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gZW1pdHMgYSBjb25zdHJhaW50cy5qc29uIGZpbGUgd2l0aCBhIG1hcCBvZiB0aGUgdXNlZCBwcm92aWRlciBmcXBucyBhbmQgdmVyc2lvbiBjb25zdHJhaW50c1xuICAvLyB0aGlzIGlzIHVzZWQgZm9yIGNhY2hpbmcgcHVycG9zZXNcbiAgcHJpdmF0ZSBlbWl0Q29uc3RyYWludHNGaWxlKFxuICAgIGFsbG93ZWRDb25zdHJhaW50czogVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnRbXSxcbiAgKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBcImNvbnN0cmFpbnRzLmpzb25cIjtcblxuICAgIGNvbnN0IGNvbnRlbnQ6IENvbnN0cmFpbnRGaWxlID0ge1xuICAgICAgY2RrdGY6IERJU1BMQVlfVkVSU0lPTixcbiAgICAgIHByb3ZpZGVyczogYWxsb3dlZENvbnN0cmFpbnRzXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmZxbi5sb2NhbGVDb21wYXJlKGIuZnFuKSlcbiAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAoY2FycnksIGl0ZW0pID0+ICh7XG4gICAgICAgICAgICAuLi5jYXJyeSxcbiAgICAgICAgICAgIFtpdGVtLmZxbl06IGl0ZW0udmVyc2lvbixcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7fSxcbiAgICAgICAgKSxcbiAgICB9O1xuXG4gICAgdGhpcy5jb2RlLm9wZW5GaWxlKGZpbGVQYXRoKTtcbiAgICB0aGlzLmNvZGUubGluZShKU09OLnN0cmluZ2lmeShjb250ZW50LCBudWxsLCAyKSk7XG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZShmaWxlUGF0aCk7XG4gICAgcmV0dXJuIGZpbGVQYXRoO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZW5lcmF0ZUpzaWlMYW5ndWFnZSh0YXJnZXQ6IENvbnN0cnVjdHNNYWtlclRhcmdldCkge1xuICAgIC8vIE1vZHVsZSBkZXBlbmRlbmNpZXMgd2UgY29tcGlsZSBhZ2FpbnN0LiBTdGF0aWMgcmVxdWlyZS5yZXNvbHZlIGNhbGxzIHNvXG4gICAgLy8ga25pcCAvIHBucG0gc3RyaWN0IGlzb2xhdGlvbiBjYW4gc2VlIHRoZSBkZXBzLlxuICAgIGNvbnN0IGRlcHMgPSBbXG4gICAgICBwYXRoLmRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKFwiQHR5cGVzL25vZGUvcGFja2FnZS5qc29uXCIpKSxcbiAgICAgIHBhdGguZGlybmFtZShyZXF1aXJlLnJlc29sdmUoXCJjb25zdHJ1Y3RzL3BhY2thZ2UuanNvblwiKSksXG4gICAgICBwYXRoLmRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKFwiY2RrdG4vcGFja2FnZS5qc29uXCIpKSxcbiAgICBdO1xuICAgIGNvbnN0IG9wdHM6IEdlbmVyYXRlSlNJSU9wdGlvbnMgPSB7XG4gICAgICBlbnRyeXBvaW50OiB0YXJnZXQuZmlsZU5hbWUsXG4gICAgICBkZXBzLFxuICAgICAgbW9kdWxlS2V5OiB0YXJnZXQubW9kdWxlS2V5LFxuICAgICAgZXhwb3J0czogdGFyZ2V0LmlzUHJvdmlkZXIgLy8gTW9kdWxlcyBhcmUgc21hbGwgZW5vdWdoIHRoYXQgd2UgZG9uJ3QgbmVlZCB0aGlzIG9wdGltaXphdGlvblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIFwiLlwiOiB7XG4gICAgICAgICAgICAgIGltcG9ydDogYC4vcHJvdmlkZXJzLyR7dGFyZ2V0Lm5hbWV9L2luZGV4LmpzYCxcbiAgICAgICAgICAgICAgcmVxdWlyZTogYC4vcHJvdmlkZXJzLyR7dGFyZ2V0Lm5hbWV9L2xhenktaW5kZXguanNgLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH07XG5cbiAgICAvLyB1c2VkIGZvciB0ZXN0aW5nLlxuICAgIGlmICh0aGlzLm9wdGlvbnMub3V0cHV0SnNpaSkge1xuICAgICAgb3B0cy5qc2lpID0geyBwYXRoOiB0aGlzLm9wdGlvbnMub3V0cHV0SnNpaSB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzUHl0aG9uVGFyZ2V0KSB7XG4gICAgICBvcHRzLnB5dGhvbiA9IHtcbiAgICAgICAgb3V0ZGlyOiB0aGlzLmNvZGVNYWtlck91dGRpcixcbiAgICAgICAgbW9kdWxlTmFtZTogdGFyZ2V0LnNyY01ha05hbWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzSmF2YVRhcmdldCkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLm9wdGlvbnMuY29kZU1ha2VyT3V0cHV0LmluY2x1ZGVzKFwiL1wiKSB8fFxuICAgICAgICB0aGlzLm9wdGlvbnMuY29kZU1ha2VyT3V0cHV0LmluY2x1ZGVzKFwiXFxcXFwiKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgICAgICBgV2hlbiB1c2luZyBKYXZhIHRoZSBcImNvZGVNYWtlck91dHB1dFwiIG9wdGlvbiBpbiB0aGUgY2RrdGYuanNvbiBtdXN0IGJlIHRoZSBvcmdhbml6YXRpb24gaWRlbnRpZmllciBmb3IgeW91ciBwcm9qZWN0IChlLmcuIGNvbS5teS1jb21wYW55KSwgbm90IGEgcGF0aC4gVGhlIGdlbmVyYXRlZCBKYXZhIGNvZGUgd2lsbCBiZSBwbGFjZWQgaW4gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIGdpdmVuIGRpcmVjdG9yeS4gSWYgeW91IGFyZSBtaWdyYXRpbmcgZnJvbSBhIDwgMC4xOSB2ZXJzaW9uIG9mIGNka3RmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgY29kZW1ha2VyT3V0cHV0IHRvIFwiaW1wb3J0c1wiLmAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIG9wdHMuamF2YSA9IHtcbiAgICAgICAgb3V0ZGlyOiBcIi5cIiwgLy8gZ2VuZXJhdGVkIGphdmEgZmlsZXMgYXJlbid0IHBhY2thZ2VkLCBzbyBqdXN0IGluY2x1ZGUgZGlyZWN0bHkgaW4gYXBwXG4gICAgICAgIHBhY2thZ2U6IGAke3RoaXMub3B0aW9ucy5jb2RlTWFrZXJPdXRwdXR9LiR7dGFyZ2V0LnNyY01ha05hbWV9YCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNDc2hhcnBUYXJnZXQpIHtcbiAgICAgIG9wdHMuY3NoYXJwID0ge1xuICAgICAgICBvdXRkaXI6IHRoaXMuY29kZU1ha2VyT3V0ZGlyLFxuICAgICAgICBuYW1lc3BhY2U6IHRhcmdldC5zcmNNYWtOYW1lLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0dvVGFyZ2V0KSB7XG4gICAgICAvLyBUT0RPOiBjaGVjayBpZiBuZWVkZWQgZm9yIG1vZHVsZXMgc29tZWhvd1xuICAgICAgLy8gY29uc3QgdGFyZ2V0VHlwZSA9IHRhcmdldC5pc1Byb3ZpZGVyID8gJ3Byb3ZpZGVyJyA6ICdtb2R1bGUnO1xuXG4gICAgICAvLyBqc2lpLXNyY21hYyB3aWxsIHByb2R1Y2UgYSBmb2xkZXIgaW5zaWRlIHRoaXMgZGlyIG5hbWVkIGFmdGVyIFwicGFja2FnZU5hbWVcIlxuICAgICAgLy8gc28gdGhpcyByZXN1bHRzIGluIGUuZy4gLmdlbi9oYXNoaWNvcnAvcmFuZG9tXG4gICAgICBjb25zdCBvdXRkaXIgPSBwYXRoLmpvaW4odGhpcy5jb2RlTWFrZXJPdXRkaXIsIHRhcmdldC5uYW1lc3BhY2UgPz8gXCJcIik7XG5cbiAgICAgIG9wdHMuZ29sYW5nID0ge1xuICAgICAgICBvdXRkaXIsXG4gICAgICAgIG1vZHVsZU5hbWU6IGF3YWl0IGRldGVybWluZUdvTW9kdWxlTmFtZShvdXRkaXIpLCAvLyBlLmcuIGBnaXRodWIuY29tL29yZy91c2VycHJvamVjdC8uZ2VuL2hhc2hpY29ycGBcbiAgICAgICAgcGFja2FnZU5hbWU6IHRhcmdldC5zcmNNYWtOYW1lLCAvLyBwYWNrYWdlIHdpbGwgYmUgbmFtZWQgZS5nLiByYW5kb20gZm9yIGhhc2hpY29ycC9yYW5kb21cbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9PUFRJT05TICYmXG4gICAgICAhcHJvY2Vzcy5lbnYuTk9ERV9PUFRJT05TLmluY2x1ZGVzKGAtLW1heC1vbGQtc3BhY2Utc2l6ZWApXG4gICAgKSB7XG4gICAgICBsb2dnZXIud2FybihgZm91bmQgTk9ERV9PUFRJT05TIGVudmlyb25tZW50IHZhcmlhYmxlIHdpdGhvdXQgYSBzZXR0aW5nIGZvciAtLW1heC1vbGQtc3BhY2Utc2l6ZS5cblRoZSBwcm92aWRlciBnZW5lcmF0aW9uIG5lZWRzIGEgc3Vic3RhbnRpYWwgYW1vdW50IG9mIG1lbW9yeSAofjEzR0IpIGZvciBzb21lIHByb3ZpZGVycyBhbmQgbGFuZ3VhZ2VzLlxuU28gY2RrdG4tY2xpIHNldHMgaXQgdG8gTk9ERV9PUFRJT05TPVwiLS1tYXgtb2xkLXNwYWNlLXNpemU9MTYzODRcIiBieSBkZWZhdWx0LiBBcyB5b3VyIGVudmlyb25tZW50IGFscmVhZHkgY29udGFpbnNcbmEgTk9ERV9PUFRJT05TIHZhcmlhYmxlLCB3ZSB3b24ndCBvdmVycmlkZSBpdC4gSGVuY2UsIHRoZSBwcm92aWRlciBnZW5lcmF0aW9uIG1pZ2h0IGZhaWwgd2l0aCBhbiBvdXQgb2YgbWVtb3J5IGVycm9yLmApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmNyZWFzZSBtZW1vcnkgdG8gYWxsb3cgZ2VuZXJhdGluZyBsYXJnZSBwcm92aWRlcnMgKGkuZS4gYXdzIG9yIGF6dXJlcm0gZm9yIEdvKVxuICAgICAgLy8gc3JjbWFrIGlzIGdvaW5nIHRvIHNwYXduIGEgY2hpbGRwcm9jZXNzIChmb3IganNpaS1wYWNtYWspIHdoaWNoIGlzIGdvaW5nIHRvIGJlIGFmZmVjdGVkIGJ5IHRoaXMgZW52IHZhclxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9PUFRJT05TID0gXCItLW1heC1vbGQtc3BhY2Utc2l6ZT0xNjM4NFwiO1xuICAgIH1cblxuICAgIGNvbnN0IGpzaWlUaW1lciA9IGxvZ1RpbWVzcGFuKFwiSlNJSVwiKTtcbiAgICBhd2FpdCBnZW5lcmF0ZUpzaWlMYW5ndWFnZSh0aGlzLmNvZGUsIG9wdHMsIHRoaXMuY29kZU1ha2VyT3V0ZGlyLCBbXG4gICAgICB0YXJnZXQuaXNNb2R1bGUgPyBcInByb3ZpZGVycy8qKlwiIDogXCJtb2R1bGVzLyoqXCIsXG4gICAgXSk7XG4gICAganNpaVRpbWVyKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U2NoZW1hcyh0YXJnZXRzOiBUZXJyYWZvcm1EZXBlbmRlbmN5Q29uc3RyYWludFtdKSB7XG4gICAgcmV0dXJuIGF3YWl0IHJlYWRTY2hlbWEodGFyZ2V0cywgdGhpcy5zY2hlbWFDYWNoZVBhdGgpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdlbmVyYXRlKFxuICAgIGFsbENvbnN0cmFpbnRzOiBUZXJyYWZvcm1EZXBlbmRlbmN5Q29uc3RyYWludFtdLFxuICAgIGNvbnN0cmFpbnRzVG9HZW5lcmF0ZSA9IGFsbENvbnN0cmFpbnRzLFxuICApIHtcbiAgICBjb25zdCB0YXJnZXRzID0gY29uc3RyYWludHNUb0dlbmVyYXRlLm1hcCgoY29uc3RyYWludCkgPT5cbiAgICAgIENvbnN0cnVjdHNNYWtlclRhcmdldC5mcm9tKGNvbnN0cmFpbnQsIHRoaXMub3B0aW9ucy50YXJnZXRMYW5ndWFnZSksXG4gICAgKTtcblxuICAgIGNvbnN0IGVuZFNjaGVtYVRpbWVyID0gbG9nVGltZXNwYW4oXCJHYXRoZXJpbmcgc2NoZW1hXCIpO1xuICAgIGNvbnN0IHNjaGVtYXMgPSBhd2FpdCB0aGlzLmdldFNjaGVtYXMoY29uc3RyYWludHNUb0dlbmVyYXRlKTtcbiAgICBlbmRTY2hlbWFUaW1lcigpO1xuXG4gICAgY29uc3QgZW5kR2VuZXJhdGVUaW1lciA9IGxvZ1RpbWVzcGFuKFwiR2VuZXJhdGUgVFNcIik7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB0YXJnZXRzLm1hcCgodGFyZ2V0KSA9PiB0aGlzLmdlbmVyYXRlVHlwZXNjcmlwdCh0YXJnZXQsIHNjaGVtYXMpKSxcbiAgICApO1xuICAgIGVuZEdlbmVyYXRlVGltZXIoKTtcblxuICAgIHRoaXMudXBkYXRlVmVyc2lvbnNGaWxlKGFsbENvbnN0cmFpbnRzKTtcbiAgICB0aGlzLmVtaXRDb25zdHJhaW50c0ZpbGUoYWxsQ29uc3RyYWludHMpO1xuXG4gICAgaWYgKHRoaXMuaXNKYXZhc2NyaXB0VGFyZ2V0KSB7XG4gICAgICBhd2FpdCB0aGlzLnNhdmUoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNKYXZhc2NyaXB0VGFyZ2V0IHx8IHRoaXMub3B0aW9ucy5vdXRwdXRKc2lpKSB7XG4gICAgICBjb25zdCBudW1iZXJPZldvcmtlcnMgPSBNYXRoLm1heChcbiAgICAgICAgMSxcbiAgICAgICAgdGhpcy5vcHRpb25zLmpzaWlQYXJhbGxlbGlzbSA9PT0gLTFcbiAgICAgICAgICA/IHRhcmdldHMubGVuZ3RoXG4gICAgICAgICAgOiB0aGlzLm9wdGlvbnMuanNpaVBhcmFsbGVsaXNtIHx8IDEsXG4gICAgICApO1xuXG4gICAgICBjb25zdCB3b3JrID0gWy4uLnRhcmdldHNdO1xuICAgICAgY29uc3Qgd29ya2VycyA9IG5ldyBBcnJheShudW1iZXJPZldvcmtlcnMpLmZpbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgdGFyZ2V0OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQgfCB1bmRlZmluZWQ7XG4gICAgICAgIHdoaWxlICgodGFyZ2V0ID0gd29yay5wb3AoKSkpIHtcbiAgICAgICAgICBjb25zdCBlbmRKc2lpVGFyZ2V0ID0gbG9nVGltZXNwYW4oXG4gICAgICAgICAgICBgR2VuZXJhdGluZyBKU0lJIGJpbmRpbmdzIGZvciAke3RhcmdldC5uYW1lfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmdlbmVyYXRlSnNpaUxhbmd1YWdlKHRhcmdldCk7XG4gICAgICAgICAgZW5kSnNpaVRhcmdldCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwod29ya2Vycy5tYXAoKGZuKSA9PiBmbigpKSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgYXdhaXQgdGhpcy5yZXBvcnRUZWxlbWV0cnkoe1xuICAgICAgICB0cmFja2luZ1BheWxvYWQ6IHRhcmdldC50cmFja2luZ1BheWxvYWQsXG4gICAgICAgIHRhcmdldExhbmd1YWdlOiB0YXJnZXQudGFyZ2V0TGFuZ3VhZ2UsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1B5dGhvblRhcmdldCkge1xuICAgICAgY29uc3QgZW5kUHl0aG9uVGltZXIgPSBsb2dUaW1lc3BhbihcIlB5dGhvbiBwb3N0LXByb2Nlc3NpbmdcIik7XG4gICAgICAvLyBSZW1vdmUgZnJvbSAuIGltcG9ydCAuLi4gc3RhdGVtZW50cyBmcm9tIHJvb3QgbGV2ZWwgX19pbml0X18ucHlcbiAgICAgIC8vIFRoaXMgcmVtb3ZlcyByb290LWxldmVsIGltcG9ydHMgb2YgbmFtZXNwYWNlcywgYnV0IHNhdmVzIDI1cyBzeW50aCB0aW1lIGZvciB0aGUgYXdzIHByb3ZpZGVyIGFsb25lXG4gICAgICBjb25zdCBhbGxJbml0UHlQYXRocyA9IGdsb2JcbiAgICAgICAgLnN5bmMoXCIqKi9fX2luaXRfXy5weVwiLCB7XG4gICAgICAgICAgY3dkOiB0aGlzLmNvZGVNYWtlck91dGRpcixcbiAgICAgICAgfSlcbiAgICAgICAgLy8gc29ydCBieSBkZXB0aCwgc28gd2Ugc3RhcnQgd2l0aCB0aGUgc2hhbGxvd2VzdCBmaWxlc1xuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5zcGxpdChcIi9cIikubGVuZ3RoIC0gYi5zcGxpdChcIi9cIikubGVuZ3RoKTtcblxuICAgICAgY29uc3QgdmlzaXRlZERpcmVjdG9yaWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBpbml0UHlQYXRoIG9mIGFsbEluaXRQeVBhdGhzKSB7XG4gICAgICAgIGNvbnN0IGRpcmVjdG9yeVBhdGggPSBwYXRoLmRpcm5hbWUoaW5pdFB5UGF0aCk7XG4gICAgICAgIGlmICh2aXNpdGVkRGlyZWN0b3JpZXMuc29tZSgoZGlyKSA9PiBkaXJlY3RvcnlQYXRoLnN0YXJ0c1dpdGgoZGlyKSkpIHtcbiAgICAgICAgICAvLyB3ZSBhbHJlYWR5IHByb2Nlc3NlZCB0aGlzIGRpcmVjdG9yeVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZpc2l0ZWREaXJlY3Rvcmllcy5wdXNoKGRpcmVjdG9yeVBhdGgpO1xuXG4gICAgICAgIGNvbnN0IGFic29sdXRlSW5pdFB5UGF0aCA9IHBhdGguam9pbih0aGlzLmNvZGVNYWtlck91dGRpciwgaW5pdFB5UGF0aCk7XG4gICAgICAgIGNvbnN0IGluaXRQeSA9IGF3YWl0IGZzLnJlYWRGaWxlKGFic29sdXRlSW5pdFB5UGF0aCwgXCJ1dGY4XCIpO1xuICAgICAgICBjb25zdCBpbml0UHlXaXRob3V0SW1wb3J0cyA9IGluaXRQeS5yZXBsYWNlKC9mcm9tIFxcLiBpbXBvcnQgLipcXG4vZywgXCJcIik7XG4gICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShhYnNvbHV0ZUluaXRQeVBhdGgsIGluaXRQeVdpdGhvdXRJbXBvcnRzKTtcbiAgICAgIH1cblxuICAgICAgZW5kUHl0aG9uVGltZXIoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNhdmUob3V0ZGlyID0gdGhpcy5jb2RlTWFrZXJPdXRkaXIpIHtcbiAgICBhd2FpdCB0aGlzLmNvZGUuc2F2ZShvdXRkaXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaXNKYXZhc2NyaXB0VGFyZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudGFyZ2V0TGFuZ3VhZ2UgPT09IExhbmd1YWdlLlRZUEVTQ1JJUFQ7XG4gIH1cblxuICBwcml2YXRlIGdldCBpc1B5dGhvblRhcmdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRhcmdldExhbmd1YWdlID09PSBMYW5ndWFnZS5QWVRIT047XG4gIH1cblxuICBwcml2YXRlIGdldCBpc0phdmFUYXJnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50YXJnZXRMYW5ndWFnZSA9PT0gTGFuZ3VhZ2UuSkFWQTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzQ3NoYXJwVGFyZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudGFyZ2V0TGFuZ3VhZ2UgPT09IExhbmd1YWdlLkNTSEFSUDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzR29UYXJnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50YXJnZXRMYW5ndWFnZSA9PT0gTGFuZ3VhZ2UuR087XG4gIH1cbn1cblxuLyoqXG4gKiBzZWFyY2hlcyBmb3IgdGhlIGNsb3Nlc3QgYGdvLm1vZGAgZmlsZSBhbmQgcmV0dXJucyB0aGUgbmVzdGVkIGdvIG1vZHVsZSBuYW1lIGZvciBgZGlyYFxuICogZS5nLiAoL2Rpci8uZ2VuLykgPT4gY2RrLnRmL3N0YWNrLy5nZW4gaWYgdGhlIHBhcmVudCBkaXIgb2YgLmdlbiBoYXMgYSBnby5tb2QgZm9yIFwibW9kdWxlIGNkay50Zi9zdGFja1wiXG4gKlxuICogQHBhcmFtIGRpciB0aGUgZGlyZWN0b3J5IHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbSAoc2VhcmNoZXMgdXB3YXJkcylcbiAqIEByZXR1cm5zIHRoZSBwYWNrYWdlIG5hbWUgZm9yIGBkaXJgXG4gKiBAdGhyb3dzIGFuIEVycm9yIGlmIG5vIGdvLm1vZCB3YXMgZm91bmRcbiAqL1xuZXhwb3J0IGNvbnN0IGRldGVybWluZUdvTW9kdWxlTmFtZSA9IGFzeW5jIChkaXI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGxldCBwcmV2aW91c0RpcjtcbiAgbGV0IGN1cnJlbnREaXIgPSBwYXRoLnJlc29sdmUoZGlyKTtcblxuICBkbyB7XG4gICAgbGV0IGZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBmaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIoY3VycmVudERpcik7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAvLyBkaXJlY3RvcnkgbWlnaHQgbm90IGV4aXN0IHlldCwgYnV0IHdlIHN0aWxsIHdhbGsgdXB3YXJkcyBmcm9tIHRoZXJlLCBzbyBpZ25vcmUgJ0VOT0VOVCdcbiAgICAgIGlmIChlLmNvZGUgIT09IFwiRU5PRU5UXCIpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZpbGVzLmluY2x1ZGVzKFwiZ28ubW9kXCIpKSB7XG4gICAgICBjb25zdCBmaWxlID0gcGF0aC5yZXNvbHZlKGN1cnJlbnREaXIsIFwiZ28ubW9kXCIpO1xuICAgICAgY29uc3QgZ29tb2QgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlKTtcbiAgICAgIGNvbnN0IG1hdGNoID0gL15tb2R1bGVcXHMqKFxcUyopXFxzKiQvbS5leGVjKGdvbW9kLnRvU3RyaW5nKCkpO1xuICAgICAgaWYgKG1hdGNoICYmIG1hdGNoWzFdKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkZGlyID0gcGF0aC5yZWxhdGl2ZShjdXJyZW50RGlyLCBkaXIpLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpOyAvLyByZXBsYWNlICdcXCcgd2l0aCAnLycgZm9yIHdpbmRvd3MgcGF0aHNcbiAgICAgICAgcmV0dXJuIGNoaWxkZGlyLmxlbmd0aCA+IDAgPyBgJHttYXRjaFsxXX0vJHtjaGlsZGRpcn1gIDogbWF0Y2hbMV07XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSByb290IEdvIG1vZHVsZSBuYW1lLiBGb3VuZCAke2ZpbGV9IGJ1dCBmYWlsZWQgdG8gcmVnZXggbWF0Y2ggdGhlIG1vZHVsZSBuYW1lIGRpcmVjdGl2ZWAsXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBnbyB1cCBvbmUgZGlyZWN0b3J5LiBBcyBkaXJuYW1lKCcvJykgd2lsbCByZXR1cm4gJy8nIHdlIGNhbmNlbCB0aGUgbG9vcFxuICAgIC8vIGFzIHNvb24gYXMgdGhlIGRpciBkb2VzIG5vdCBjaGFuZ2UgYW55bW9yZS5cbiAgICBwcmV2aW91c0RpciA9IGN1cnJlbnREaXI7XG4gICAgY3VycmVudERpciA9IHBhdGguZGlybmFtZShjdXJyZW50RGlyKTtcbiAgfSB3aGlsZSAoY3VycmVudERpciAhPT0gcHJldmlvdXNEaXIpO1xuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgQ291bGQgbm90IGRldGVybWluZSB0aGUgcm9vdCBHbyBtb2R1bGUgbmFtZS4gTm8gZ28ubW9kIGZvdW5kIGluICR7ZGlyfSBhbmQgYW55IHBhcmVudCBkaXJlY3Rvcmllc2AsXG4gICk7XG59O1xuIl19
|
|
563
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0cy1tYWtlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZXQvY29uc3RydWN0cy1tYWtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsNkNBQStCO0FBQy9CLDJDQUE2QjtBQUM3Qix5Q0FBc0M7QUFDdEMsNENBQStDO0FBQy9DLDRDQVd3QjtBQUN4Qiw0Q0FBMkQ7QUFDM0QsdUVBQTRFO0FBQzVFLG1FQUErRDtBQUMvRCwrQkFBNEI7QUFDNUIsNERBQW9EO0FBRXBELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQUNwRSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRXBEOzs7Ozs7O0dBT0c7QUFDSCxLQUFLLFVBQVUsdUJBQXVCLENBQUMsR0FBVztJQUNoRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsY0FBSSxFQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQUU7UUFDaEUsR0FBRyxFQUFFLEdBQUc7S0FDVCxDQUFDLENBQUM7SUFDSCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBeUMsQ0FBQztJQUM1RSxnRkFBZ0Y7SUFDaEYsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0UsQ0FBQztBQWlETSxLQUFLLFVBQVUsb0JBQW9CLENBQ3hDLElBQWUs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QUFRLENBQUMsQ0FBQztZQUNoRCxNQUFNLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsTUFBTSxLQUFLLEdBQUcsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzVELElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN0QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMseUNBQXlDO2dCQUM5RyxPQUFPLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLHNEQUFzRCxJQUFJLHNEQUFzRCxDQUNqSCxDQUFDO1FBQ0osQ0FBQztRQUNELDBFQUEwRTtRQUMxRSw4Q0FBOEM7UUFDOUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUN6QixVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4QyxDQUFDLFFBQVEsVUFBVSxLQUFLLFdBQVcsRUFBRTtJQUVyQyxNQUFNLElBQUksS0FBSyxDQUNiLG1FQUFtRSxHQUFHLDZCQUE2QixDQUNwRyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBbkNXLFFBQUEscUJBQXFCLHlCQW1DaEMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBDb2RlTWFrZXIgfSBmcm9tIFwiY29kZW1ha2VyXCI7XG5pbXBvcnQgeyBleGVjLCBta2R0ZW1wIH0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQge1xuICBUZXJyYWZvcm1EZXBlbmRlbmN5Q29uc3RyYWludCxcbiAgbG9nZ2VyLFxuICBsb2dUaW1lc3BhbixcbiAgQ29uc3RydWN0c01ha2VyUHJvdmlkZXJUYXJnZXQsXG4gIENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldCxcbiAgQ29uc3RydWN0c01ha2VyVGFyZ2V0LFxuICBQcm92aWRlclNjaGVtYSxcbiAgTW9kdWxlU2NoZW1hLFxuICBFcnJvcnMsXG4gIHR5cGUgTGFuZ3VhZ2VPcHRpb25zLFxufSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IERJU1BMQVlfVkVSU0lPTiwgTGFuZ3VhZ2UgfSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IFRlcnJhZm9ybVByb3ZpZGVyR2VuZXJhdG9yIH0gZnJvbSBcIi4vZ2VuZXJhdG9yL3Byb3ZpZGVyLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgTW9kdWxlR2VuZXJhdG9yIH0gZnJvbSBcIi4vZ2VuZXJhdG9yL21vZHVsZS1nZW5lcmF0b3JcIjtcbmltcG9ydCB7IGdsb2IgfSBmcm9tIFwiZ2xvYlwiO1xuaW1wb3J0IHsgcmVhZFNjaGVtYSB9IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItc2NoZW1hXCI7XG5cbmNvbnN0IHBhY21ha01vZHVsZSA9IHJlcXVpcmUucmVzb2x2ZShcImpzaWktcGFjbWFrL2Jpbi9qc2lpLXBhY21ha1wiKTtcbmNvbnN0IGpzaWlNb2R1bGUgPSByZXF1aXJlLnJlc29sdmUoXCJqc2lpL2Jpbi9qc2lpXCIpO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGZpbGVzIGBucG0gcGFja2Agd291bGQgcHVibGlzaCBmb3IgdGhlIHBhY2thZ2UgYXQgYGRpcmAsIGFzIHBhdGhzIHJlbGF0aXZlIHRvIGBkaXJgLiBUaGlzIGlzIHRoZSBzZXRcbiAqIGpzaWkgbmVlZHMgdG8gY29tcGlsZSBhZ2FpbnN0IGEgZGVwZW5kZW5jeSDigJQgaXRzIHNvdXJjZXMgYW5kIGRlY2xhcmVkIG1ldGFkYXRhIOKAlCBhbmQgZXhjbHVkZXMgYnVpbGQgb3V0cHV0c1xuICogKGBkaXN0YCwgYC5wYWNrLXN0YWdpbmdgLCBgbm9kZV9tb2R1bGVzYCwgdHNidWlsZGluZm8sIC4uLikgdGhhdCBhIGJsYW5rZXQgZGlyZWN0b3J5IGNvcHkgd291bGQgb3RoZXJ3aXNlIHB1bGwgaW4uXG4gKlxuICogQHBhcmFtIGRpciAtIEFic29sdXRlIHBhdGggdG8gdGhlIHBhY2thZ2UgZGlyZWN0b3J5IHRvIGluc3BlY3QgKG11c3QgY29udGFpbiBhIHBhY2thZ2UuanNvbikuXG4gKiBAcmV0dXJucyBQdWJsaXNoYWJsZSBmaWxlIHBhdGhzLCByZWxhdGl2ZSB0byBgZGlyYCwgd2l0aCBgLi5gLWVzY2FwZSBwYXRocyAoZnJvbSBmb2xsb3dpbmcgcG5wbSBzeW1saW5rcykgZHJvcHBlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVB1Ymxpc2hhYmxlRmlsZXMoZGlyOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IHN0ZG91dCA9IGF3YWl0IGV4ZWMoXCJucG1cIiwgW1wicGFja1wiLCBcIi0tZHJ5LXJ1blwiLCBcIi0tanNvblwiXSwge1xuICAgIGN3ZDogZGlyLFxuICB9KTtcbiAgY29uc3QgcGFja0luZm8gPSBKU09OLnBhcnNlKHN0ZG91dCkgYXMgQXJyYXk8eyBmaWxlczogeyBwYXRoOiBzdHJpbmcgfVtdIH0+O1xuICAvLyBEcm9wIGAuLmAtZXNjYXBlIHBhdGhzIG5wbSBlbWl0cyB3aGVuIGZvbGxvd2luZyBwbnBtJ3Mgbm9kZV9tb2R1bGVzIHN5bWxpbmtzLlxuICByZXR1cm4gcGFja0luZm9bMF0uZmlsZXMubWFwKChmKSA9PiBmLnBhdGgpLmZpbHRlcigocCkgPT4gIXAuaW5jbHVkZXMoXCIuLlwiKSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVKU0lJT3B0aW9ucyB7XG4gIGVudHJ5cG9pbnQ6IHN0cmluZztcbiAgZGVwczogc3RyaW5nW107XG4gIG1vZHVsZUtleTogc3RyaW5nO1xuICBleHBvcnRzPzogUmVjb3JkPHN0cmluZywgRXhwb3J0RGVmaW5pdGlvbiB8IHN0cmluZz47XG4gIGpzaWk/OiBKc2lpT3V0cHV0T3B0aW9ucztcbiAgcHl0aG9uPzogUHl0aG9uT3V0cHV0T3B0aW9ucztcbiAgamF2YT86IEphdmFPdXRwdXRPcHRpb25zO1xuICBjc2hhcnA/OiBDU2hhcnBPdXRwdXRPcHRpb25zO1xuICBnb2xhbmc/OiBHb0xhbmdPdXRwdXRPcHRpb25zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEpzaWlPdXRwdXRPcHRpb25zIHtcbiAgcGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFB5dGhvbk91dHB1dE9wdGlvbnMge1xuICBvdXRkaXI6IHN0cmluZztcbiAgbW9kdWxlTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEphdmFPdXRwdXRPcHRpb25zIHtcbiAgb3V0ZGlyOiBzdHJpbmc7XG4gIHBhY2thZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDU2hhcnBPdXRwdXRPcHRpb25zIHtcbiAgb3V0ZGlyOiBzdHJpbmc7XG4gIG5hbWVzcGFjZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdvTGFuZ091dHB1dE9wdGlvbnMge1xuICBvdXRkaXI6IHN0cmluZztcbiAgbW9kdWxlTmFtZTogc3RyaW5nO1xuICBwYWNrYWdlTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlZSBodHRwczovL25vZGVqcy5vcmcvYXBpL3BhY2thZ2VzLmh0bWwjY29uZGl0aW9uYWwtZXhwb3J0cyBmb3IgbW9yZSBpbmZvcm1hdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydERlZmluaXRpb24ge1xuICBub2RlPzogc3RyaW5nO1xuICBpbXBvcnQ/OiBzdHJpbmc7XG4gIHJlcXVpcmU/OiBzdHJpbmc7XG4gIGRlZmF1bHQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUpzaWlMYW5ndWFnZShcbiAgY29kZTogQ29kZU1ha2VyLFxuICBvcHRzOiBHZW5lcmF0ZUpTSUlPcHRpb25zLFxuICBvdXRwdXRQYXRoOiBzdHJpbmcsXG4gIGRpc2FsbG93ZWRGaWxlR2xvYnM6IHN0cmluZ1tdID0gW10sXG4pIHtcbiAgYXdhaXQgbWtkdGVtcChhc3luYyAoc3RhZ2luZykgPT4ge1xuICAgIC8vIHRoaXMgaXMgbm90IHR5cGVzY3JpcHQsIHNvIHdlIGdlbmVyYXRlIGluIGEgc3RhZ2luZyBkaXJlY3RvcnkgYW5kXG4gICAgLy8gdXNlIGpzaWktc3JjbWFrIHRvIGNvbXBpbGUgYW5kIGV4dHJhY3QgdGhlIGxhbmd1YWdlLXNwZWNpZmljIHNvdXJjZVxuICAgIC8vIGludG8gb3VyIHByb2plY3QuXG4gICAgYXdhaXQgY29kZS5zYXZlKHN0YWdpbmcpO1xuXG4gICAgLy8gYXMgdGhlIGFib3ZlIGdlbmVyYXRlZCB0aGUgVHlwZXNjcmlwdCBjb2RlIGZvciBhbGwgcHJvdmlkZXJzIGFuZCBtb2R1bGVzLFxuICAgIC8vIHdlIG5lZWQgdG8gZmlsdGVyIG91dCB0aGUgb25lcyB3ZSBkb24ndCBuZWVkIHNvIHRoZXkgZG9uJ3QgZW5kIHVwIGluIHRoZSBKU0lJIGJ1bmRsZSBvdmVyIGFuZCBvdmVyIGFnYWluLlxuICAgIGNvbnN0IGZpbGVzVG9EZWxldGUgPSBkaXNhbGxvd2VkRmlsZUdsb2JzLmZsYXRNYXAoKHBhdHRlcm4pID0+XG4gICAgICBnbG9iLnN5bmMocGF0dGVybiwgeyBjd2Q6IHN0YWdpbmcgfSksXG4gICAgKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGZpbGVzVG9EZWxldGUubWFwKChmaWxlKSA9PiBmcy5yZW1vdmUocGF0aC5qb2luKHN0YWdpbmcsIGZpbGUpKSksXG4gICAgKTtcblxuICAgIC8vIENvbXBpbGUgd2l0aCBKU0lJXG4gICAgY29uc3QganNpaUFyZ3MgPSBbXCItLXNpbGVuY2Utd2FybmluZ3NcIiwgXCJyZXNlcnZlZC13b3JkXCJdO1xuICAgIGNvbnN0IGpzaWlFbnRyeXBvaW50ID0gb3B0cy5lbnRyeXBvaW50O1xuICAgIGNvbnN0IGJhc2VwYXRoID0gcGF0aC5qb2luKFxuICAgICAgcGF0aC5kaXJuYW1lKGpzaWlFbnRyeXBvaW50KSxcbiAgICAgIHBhdGguYmFzZW5hbWUoanNpaUVudHJ5cG9pbnQsIFwiLnRzXCIpLFxuICAgICk7XG5cbiAgICBjb25zdCBtb2R1bGVLZXkgPSBvcHRzLm1vZHVsZUtleS5yZXBsYWNlKC9cXC4vZywgXCJcIikucmVwbGFjZSgvXFwvL2csIFwiXCIpO1xuICAgIGNvbnN0IG1vZHVsZURpcnMgPSBvcHRzLmRlcHM7XG4gICAgY29uc3QgdGFyZ2V0czogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIGNvbnN0IGRlcHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGRpciBvZiBtb2R1bGVEaXJzKSB7XG4gICAgICAvLyByZWFkIG1vZHVsZSBtZXRhZGF0YVxuICAgICAgY29uc3QgbWV0YWRhdGEgPSBhd2FpdCBmcy5yZWFkSnNvbihwYXRoLmpvaW4oZGlyLCBcInBhY2thZ2UuanNvblwiKSk7XG4gICAgICBjb25zdCBtb2R1bGVOYW1lOiBzdHJpbmcgPSBtZXRhZGF0YS5uYW1lO1xuICAgICAgY29uc3QgbW9kdWxlVmVyc2lvbjogc3RyaW5nID0gbWV0YWRhdGEudmVyc2lvbjtcblxuICAgICAgY29uc3QgdGFyZ2V0ZGlyID0gcGF0aC5qb2luKFxuICAgICAgICBwYXRoLmpvaW4oc3RhZ2luZywgXCJub2RlX21vZHVsZXNcIiksXG4gICAgICAgIG1vZHVsZU5hbWUsXG4gICAgICApO1xuICAgICAgYXdhaXQgZnMubWtkaXJwKHRhcmdldGRpcik7XG4gICAgICAvLyBDb3B5IG9ubHkgdGhlIGRlcCdzIHB1Ymxpc2hhYmxlIGZpbGVzICh3aGF0IGBucG0gcGFja2Agd291bGQgc2hpcCkgaW50byB0aGUganNpaSBjb21waWxlIGJ1bmRsZS5cbiAgICAgIGZvciAoY29uc3QgcmVsUGF0aCBvZiBhd2FpdCByZXNvbHZlUHVibGlzaGFibGVGaWxlcyhkaXIpKSB7XG4gICAgICAgIGNvbnN0IHNyYyA9IHBhdGguam9pbihkaXIsIHJlbFBhdGgpO1xuICAgICAgICBjb25zdCBkc3QgPSBwYXRoLmpvaW4odGFyZ2V0ZGlyLCByZWxQYXRoKTtcbiAgICAgICAgYXdhaXQgZnMubWtkaXJwKHBhdGguZGlybmFtZShkc3QpKTtcbiAgICAgICAgYXdhaXQgZnMuY29weShzcmMsIGRzdCwgeyBkZXJlZmVyZW5jZTogdHJ1ZSB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gYWRkIHRvIFwiZGVwc1wiIGFuZCBcInBlZXIgZGVwc1wiXG4gICAgICBpZiAoIW1vZHVsZU5hbWUuc3RhcnRzV2l0aChcIkB0eXBlcy9cIikpIHtcbiAgICAgICAgZGVwc1ttb2R1bGVOYW1lXSA9IG1vZHVsZVZlcnNpb247XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHBrZyA9IHtcbiAgICAgIG5hbWU6IG1vZHVsZUtleSxcbiAgICAgIHZlcnNpb246IFwiMC4wLjBcIixcbiAgICAgIGF1dGhvcjogXCJnZW5lcmF0ZWRAZ2VuZXJhdGVkLmNvbVwiLFxuICAgICAgbWFpbjogYCR7YmFzZXBhdGh9LmpzYCxcbiAgICAgIHR5cGVzOiBgJHtiYXNlcGF0aH0uZC50c2AsXG4gICAgICBsaWNlbnNlOiBcIlVOTElDRU5TRURcIixcbiAgICAgIHJlcG9zaXRvcnk6IHsgdXJsOiBcImh0dHA6Ly9nZW5lcmF0ZWRcIiwgdHlwZTogXCJnaXRcIiB9LFxuICAgICAganNpaToge1xuICAgICAgICBvdXRkaXI6IFwiZGlzdFwiLFxuICAgICAgICB0YXJnZXRzOiB0YXJnZXRzLFxuICAgICAgfSxcbiAgICAgIGRlcGVuZGVuY2llczogZGVwcyxcbiAgICAgIHBlZXJEZXBlbmRlbmNpZXM6IGRlcHMsXG4gICAgfTtcblxuICAgIGlmIChvcHRzLmV4cG9ydHMpIHtcbiAgICAgIChwa2cgYXMgUmVjb3JkPHN0cmluZywgYW55PikuZXhwb3J0cyA9IG9wdHMuZXhwb3J0cztcbiAgICB9XG4gICAgaWYgKG9wdHMucHl0aG9uKSB7XG4gICAgICB0YXJnZXRzLnB5dGhvbiA9IHtcbiAgICAgICAgZGlzdE5hbWU6IFwiZ2VuZXJhdGVkXCIsXG4gICAgICAgIG1vZHVsZTogb3B0cy5weXRob24ubW9kdWxlTmFtZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuamF2YSkge1xuICAgICAgdGFyZ2V0cy5qYXZhID0ge1xuICAgICAgICBwYWNrYWdlOiBvcHRzLmphdmEucGFja2FnZSxcbiAgICAgICAgbWF2ZW46IHtcbiAgICAgICAgICBncm91cElkOiBcImdlbmVyYXRlZFwiLFxuICAgICAgICAgIGFydGlmYWN0SWQ6IFwiZ2VuZXJhdGVkXCIsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChvcHRzLmNzaGFycCkge1xuICAgICAgdGFyZ2V0cy5kb3RuZXQgPSB7XG4gICAgICAgIG5hbWVzcGFjZTogb3B0cy5jc2hhcnAubmFtZXNwYWNlLFxuICAgICAgICBwYWNrYWdlSWQ6IG9wdHMuY3NoYXJwLm5hbWVzcGFjZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuZ29sYW5nKSB7XG4gICAgICB0YXJnZXRzLmdvID0ge1xuICAgICAgICBtb2R1bGVOYW1lOiBvcHRzLmdvbGFuZy5tb2R1bGVOYW1lLFxuICAgICAgICBwYWNrYWdlTmFtZTogb3B0cy5nb2xhbmcucGFja2FnZU5hbWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGF3YWl0IGZzLndyaXRlRmlsZShcbiAgICAgIHBhdGguam9pbihzdGFnaW5nLCBcInBhY2thZ2UuanNvblwiKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHBrZywgdW5kZWZpbmVkLCAyKSxcbiAgICApO1xuXG4gICAgY29uc3QgZW5kSnNpaVRpbWVyID0gbG9nVGltZXNwYW4oXCJqc2lpXCIpO1xuICAgIGF3YWl0IGV4ZWMoanNpaU1vZHVsZSwganNpaUFyZ3MsIHtcbiAgICAgIGN3ZDogc3RhZ2luZyxcbiAgICB9KTtcbiAgICBlbmRKc2lpVGltZXIoKTtcblxuICAgIC8vIGV4dHJhY3QgLmpzaWkgaWYgcmVxdWVzdGVkXG4gICAgaWYgKG9wdHMuanNpaSkge1xuICAgICAgYXdhaXQgZnMuY29weShwYXRoLmpvaW4oc3RhZ2luZywgXCIuanNpaVwiKSwgb3B0cy5qc2lpLnBhdGgpO1xuICAgIH1cblxuICAgIC8vIHJ1biBwYWNtYWsgdG8gZ2VuZXJhdGUgY29kZVxuICAgIGNvbnN0IGVuZEpzaWlQYWNtYWtUaW1lciA9IGxvZ1RpbWVzcGFuKFwianNpaS1wYWNtYWtcIik7XG4gICAgYXdhaXQgZXhlYyhwYWNtYWtNb2R1bGUsIFtcIi0tY29kZS1vbmx5XCJdLCB7IGN3ZDogc3RhZ2luZyB9KTtcbiAgICBlbmRKc2lpUGFjbWFrVGltZXIoKTtcblxuICAgIGlmIChvcHRzLnB5dGhvbikge1xuICAgICAgY29uc3QgcmVsZGlyID0gb3B0cy5weXRob24ubW9kdWxlTmFtZS5yZXBsYWNlKC9cXC4vZywgXCIvXCIpOyAvLyBqc2lpIHJlcGxhY2VzIFwiLlwiIHdpdGggXCIvXCJcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHBhdGgucmVzb2x2ZShcbiAgICAgICAgcGF0aC5qb2luKHN0YWdpbmcsIFwiZGlzdC9weXRob24vc3JjXCIsIHJlbGRpciksXG4gICAgICApO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gcGF0aC5qb2luKG9wdHMucHl0aG9uLm91dGRpciwgcmVsZGlyKTtcbiAgICAgIGF3YWl0IGZzLm1vdmUoc291cmNlLCB0YXJnZXQsIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmphdmEpIHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHBhdGgucmVzb2x2ZShwYXRoLmpvaW4oc3RhZ2luZywgXCJkaXN0L2phdmEvc3JjL1wiKSk7XG4gICAgICBjb25zdCB0YXJnZXQgPSBwYXRoLmpvaW4ob3B0cy5qYXZhLm91dGRpciwgXCJzcmMvXCIpO1xuICAgICAgLy8gUHJlLWNyZWF0ZSBzaGFyZWQgcGFja2FnZSBkaXJlY3Rvcmllcy5cbiAgICAgIGNvbnN0IHBhY2thZ2VEaXIgPSBvcHRzLmphdmEucGFja2FnZS5yZXBsYWNlKC9cXC4vZywgXCIvXCIpO1xuICAgICAgYXdhaXQgZnMubWtkaXJwKHBhdGguam9pbih0YXJnZXQsIFwibWFpbi9qYXZhXCIsIHBhY2thZ2VEaXIpKTtcbiAgICAgIGF3YWl0IGZzLm1rZGlycChwYXRoLmpvaW4odGFyZ2V0LCBcIm1haW4vcmVzb3VyY2VzXCIsIHBhY2thZ2VEaXIpKTtcbiAgICAgIGF3YWl0IGZzLmNvcHkoc291cmNlLCB0YXJnZXQsIHsgcmVjdXJzaXZlOiB0cnVlLCBvdmVyd3JpdGU6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmNzaGFycCkge1xuICAgICAgY29uc3QgcmVsZGlyID0gb3B0cy5jc2hhcnAubmFtZXNwYWNlO1xuICAgICAgY29uc3Qgc291cmNlID0gcGF0aC5yZXNvbHZlKHBhdGguam9pbihzdGFnaW5nLCBcImRpc3QvZG90bmV0L1wiLCByZWxkaXIpKTtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHBhdGguam9pbihvcHRzLmNzaGFycC5vdXRkaXIsIHJlbGRpcik7XG4gICAgICBhd2FpdCBmcy5tb3ZlKHNvdXJjZSwgdGFyZ2V0LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5nb2xhbmcpIHtcbiAgICAgIGNvbnN0IHJlbGRpciA9IG9wdHMuZ29sYW5nLnBhY2thZ2VOYW1lO1xuICAgICAgY29uc3Qgc291cmNlID0gcGF0aC5yZXNvbHZlKHBhdGguam9pbihzdGFnaW5nLCBcImRpc3QvZ28vXCIsIHJlbGRpcikpO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gcGF0aC5qb2luKG9wdHMuZ29sYW5nLm91dGRpciwgcmVsZGlyKTtcbiAgICAgIGF3YWl0IGZzLm1vdmUoc291cmNlLCB0YXJnZXQsIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xuICAgICAgLy8gcmVtb3ZlIGdvLm1vZCBhcyB0aGlzIHdvdWxkIG1ha2UgaXQgYSBzdWJtb2R1bGVcbiAgICAgIGF3YWl0IGZzLnJlbW92ZShwYXRoLmpvaW4odGFyZ2V0LCBcImdvLm1vZFwiKSk7XG4gICAgfVxuXG4gICAgW1widmVyc2lvbnMuanNvblwiLCBcImNvbnN0cmFpbnRzLmpzb25cIl0uZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZnMuY29weVN5bmMoXG4gICAgICAgICAgcGF0aC5yZXNvbHZlKHN0YWdpbmcsIGZpbGUpLFxuICAgICAgICAgIHBhdGgucmVzb2x2ZShvdXRwdXRQYXRoLCBmaWxlKSxcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBGYWlsZWQgdG8gY29weSAke2ZpbGV9OiAke2V9YCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG50eXBlIENvbnN0cmFpbnRGaWxlID0geyBwcm92aWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47IGNka3RmOiBzdHJpbmcgfTtcblxuZXhwb3J0IGludGVyZmFjZSBHZXRPcHRpb25zIHtcbiAgcmVhZG9ubHkgdGFyZ2V0TGFuZ3VhZ2U6IExhbmd1YWdlO1xuICByZWFkb25seSBjb2RlTWFrZXJPdXRwdXQ6IHN0cmluZztcbiAgcmVhZG9ubHkganNpaVBhcmFsbGVsaXNtPzogbnVtYmVyO1xuICAvKipcbiAgICogUGF0aCB0byBjb3B5IHRoZSBvdXRwdXQgLmpzaWkgZmlsZS5cbiAgICogQGRlZmF1bHQgLSBqc2lpIGZpbGUgaXMgbm90IGVtaXR0ZWRcbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dEpzaWk/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBMYW5ndWFnZS1zcGVjaWZpYyBjb2RlIGdlbmVyYXRpb24gb3B0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IGxhbmd1YWdlT3B0aW9ucz86IExhbmd1YWdlT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIENvbnN0cnVjdHNNYWtlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29kZU1ha2VyT3V0ZGlyOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29kZTogQ29kZU1ha2VyO1xuICBwcml2YXRlIHZlcnNpb25zOiB7IFtwcm92aWRlck5hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogR2V0T3B0aW9ucyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNjaGVtYUNhY2hlUGF0aD86IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlcG9ydFRlbGVtZXRyeTogKHBheWxvYWQ6IHtcbiAgICAgIHRhcmdldExhbmd1YWdlOiBzdHJpbmc7XG4gICAgICB0cmFja2luZ1BheWxvYWQ6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgfSkgPT4gUHJvbWlzZTx2b2lkPiA9IGFzeW5jICgpID0+IHt9LFxuICApIHtcbiAgICB0aGlzLmNvZGVNYWtlck91dGRpciA9IHBhdGgucmVzb2x2ZSh0aGlzLm9wdGlvbnMuY29kZU1ha2VyT3V0cHV0KTtcbiAgICBmcy5ta2RpcnBTeW5jKHRoaXMuY29kZU1ha2VyT3V0ZGlyKTtcbiAgICB0aGlzLmNvZGUgPSBuZXcgQ29kZU1ha2VyKCk7XG4gICAgdGhpcy52ZXJzaW9ucyA9IHt9O1xuICB9XG4gIHByaXZhdGUgYXN5bmMgZ2VuZXJhdGVUeXBlc2NyaXB0UHJvdmlkZXIoXG4gICAgdGFyZ2V0OiBDb25zdHJ1Y3RzTWFrZXJQcm92aWRlclRhcmdldCxcbiAgICBzY2hlbWE6IFByb3ZpZGVyU2NoZW1hLFxuICApIHtcbiAgICBjb25zdCBlbmRUU1RpbWVyID0gbG9nVGltZXNwYW4oYEdlbmVyYXRlIFR5cGVzY3JpcHQgZm9yICR7dGFyZ2V0Lm5hbWV9YCk7XG4gICAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IFRlcnJhZm9ybVByb3ZpZGVyR2VuZXJhdG9yKHRoaXMuY29kZSwgc2NoZW1hLCB7XG4gICAgICBpbXBvcnRFeHRlbnNpb246IHRoaXMub3B0aW9ucy5sYW5ndWFnZU9wdGlvbnM/LmltcG9ydEV4dGVuc2lvbixcbiAgICB9KTtcbiAgICBnZW5lcmF0b3IuZ2VuZXJhdGUodGFyZ2V0KTtcblxuICAgIHRoaXMudmVyc2lvbnMgPSB7IC4uLnRoaXMudmVyc2lvbnMsIC4uLmdlbmVyYXRvci52ZXJzaW9ucyB9O1xuICAgIGVuZFRTVGltZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBmaWx0ZXJBbHJlYWR5R2VuZXJhdGVkKFxuICAgIGNvbnN0cmFpbnRzOiBUZXJyYWZvcm1EZXBlbmRlbmN5Q29uc3RyYWludFtdLFxuICApIHtcbiAgICBsZXQgY29uc3RyYWludHNGaWxlID0gXCJ7fVwiO1xuICAgIHRyeSB7XG4gICAgICBjb25zdHJhaW50c0ZpbGUgPSBhd2FpdCBmcy5yZWFkRmlsZShcbiAgICAgICAgcGF0aC5qb2luKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCBcImNvbnN0cmFpbnRzLmpzb25cIiksXG4gICAgICAgIFwidXRmOFwiLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBDb3VsZCBub3QgZmluZCBjb25zdHJhaW50cy5qc29uIGZpbGUgd2hpbGUgZmlsdGVyaW5nOiAke2V9LiBUaGlzIG1lYW5zIG5vIHByb3ZpZGVycyB3ZXJlIGdlbmVyYXRlZCwgc28gYWxsIGNvbnN0cmFpbnRzIG5lZWQgdG8gYmUgZ2VuZXJhdGVkLmAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGNvbnN0cmFpbnRzO1xuICAgIH1cbiAgICBsb2dnZXIuZGVidWcoYEZvdW5kIGNvbnN0cmFpbnRzLmpzb24gZmlsZTogJHtjb25zdHJhaW50c0ZpbGV9YCk7XG5cbiAgICBsZXQgcHJldmlvdXNDb25zdHJhaW50czogUGFydGlhbDxDb25zdHJhaW50RmlsZT4gPSB7fTtcbiAgICB0cnkge1xuICAgICAgcHJldmlvdXNDb25zdHJhaW50cyA9IEpTT04ucGFyc2UoY29uc3RyYWludHNGaWxlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYENvdWxkIG5vdCBwYXJzZSBjb25zdHJhaW50cy5qc29uIGZpbGUgd2hpbGUgZmlsdGVyaW5nOiAke2V9LiBHZW5lcmF0aW5nIGFsbCBjb25zdHJhaW50cy5gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBjb25zdHJhaW50cztcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgRm91bmQgcHJldmlvdXMgY29uc3RyYWludHM6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHByZXZpb3VzQ29uc3RyYWludHMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApfWAsXG4gICAgKTtcblxuICAgIGlmIChcbiAgICAgICFwcmV2aW91c0NvbnN0cmFpbnRzLnByb3ZpZGVycyB8fFxuICAgICAgdHlwZW9mIHByZXZpb3VzQ29uc3RyYWludHMucHJvdmlkZXJzICE9PSBcIm9iamVjdFwiXG4gICAgKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYENvdWxkIG5vdCBmaW5kIHByb3ZpZGVycyBpbiBjb25zdHJhaW50cy5qc29uIGZpbGUsIGdlbmVyYXRpbmcgYWxsIGNvbnN0cmFpbnRzLiBUaGUgY29uc3RyYWludHMgZmlsZSB3YXMgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBwcmV2aW91c0NvbnN0cmFpbnRzLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgMixcbiAgICAgICAgKX1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBjb25zdHJhaW50cztcbiAgICB9XG5cbiAgICBpZiAocHJldmlvdXNDb25zdHJhaW50cy5jZGt0ZiAhPT0gRElTUExBWV9WRVJTSU9OKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYFRoZSBDREtUTiB2ZXJzaW9uIGhhcyBjaGFuZ2VkLCBnZW5lcmF0aW5nIGFsbCBjb25zdHJhaW50cy4gVGhlIHByZXZpb3VzIHZlcnNpb24gd2FzICR7cHJldmlvdXNDb25zdHJhaW50cy5jZGt0Zn0sIHRoZSBjdXJyZW50IHZlcnNpb24gaXMgJHtESVNQTEFZX1ZFUlNJT059YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gY29uc3RyYWludHM7XG4gICAgfVxuXG4gICAgY29uc3QgY29uc3RyYWludHNUb0dlbmVyYXRlID0gY29uc3RyYWludHMuZmlsdGVyKChjb25zdHJhaW50KSA9PiB7XG4gICAgICBjb25zdCBjb25zdHJhaW50TWF0Y2hlcyA9XG4gICAgICAgIHByZXZpb3VzQ29uc3RyYWludHMucHJvdmlkZXJzIVtjb25zdHJhaW50LmZxbl0gPT09IGNvbnN0cmFpbnQudmVyc2lvbjtcbiAgICAgIGxldCBwcm92aWRlckZvbGRlckV4aXN0cyA9IGZhbHNlO1xuXG4gICAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy50YXJnZXRMYW5ndWFnZSkge1xuICAgICAgICBjYXNlIExhbmd1YWdlLlRZUEVTQ1JJUFQ6XG4gICAgICAgICAgcHJvdmlkZXJGb2xkZXJFeGlzdHMgPSBmcy5leGlzdHNTeW5jKFxuICAgICAgICAgICAgcGF0aC5qb2luKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCBcInByb3ZpZGVyc1wiLCBjb25zdHJhaW50Lm5hbWUpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTGFuZ3VhZ2UuUFlUSE9OOlxuICAgICAgICBjYXNlIExhbmd1YWdlLkpBVkE6XG4gICAgICAgIGNhc2UgTGFuZ3VhZ2UuQ1NIQVJQOlxuICAgICAgICAgIHByb3ZpZGVyRm9sZGVyRXhpc3RzID0gZnMuZXhpc3RzU3luYyhcbiAgICAgICAgICAgIHBhdGguam9pbih0aGlzLmNvZGVNYWtlck91dGRpciwgY29uc3RyYWludC5uYW1lKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIExhbmd1YWdlLkdPOlxuICAgICAgICAgIHByb3ZpZGVyRm9sZGVyRXhpc3RzID0gZnMuZXhpc3RzU3luYyhcbiAgICAgICAgICAgIHBhdGguam9pbihcbiAgICAgICAgICAgICAgdGhpcy5jb2RlTWFrZXJPdXRkaXIsXG4gICAgICAgICAgICAgIGNvbnN0cmFpbnQubmFtZXNwYWNlIHx8IFwiaGFzaGljb3JwXCIsXG4gICAgICAgICAgICAgIGNvbnN0cmFpbnQubmFtZSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvdmlkZXJFeGlzdHMgPSBjb25zdHJhaW50TWF0Y2hlcyAmJiBwcm92aWRlckZvbGRlckV4aXN0cztcbiAgICAgIHJldHVybiAhcHJvdmlkZXJFeGlzdHM7XG4gICAgfSk7XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgQ29uc3RyYWludHMgdG8gZ2VuZXJhdGU6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGNvbnN0cmFpbnRzVG9HZW5lcmF0ZSxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgMixcbiAgICAgICl9YCxcbiAgICApO1xuXG4gICAgcmV0dXJuIGNvbnN0cmFpbnRzVG9HZW5lcmF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2VuZXJhdGVUeXBlc2NyaXB0TW9kdWxlKFxuICAgIHRhcmdldDogQ29uc3RydWN0c01ha2VyTW9kdWxlVGFyZ2V0LFxuICAgIHNjaGVtYTogTW9kdWxlU2NoZW1hLFxuICApIHtcbiAgICBjb25zdCBlbmRUU1RpbWVyID0gbG9nVGltZXNwYW4oYEdlbmVyYXRlIFR5cGVzY3JpcHQgZm9yICR7dGFyZ2V0Lm5hbWV9YCk7XG4gICAgdGFyZ2V0LnNwZWMgPSBzY2hlbWE7XG4gICAgbmV3IE1vZHVsZUdlbmVyYXRvcih0aGlzLmNvZGUsIFt0YXJnZXRdKTtcbiAgICBlbmRUU1RpbWVyKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlVHlwZXNjcmlwdChcbiAgICB0YXJnZXQ6IENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgICBzY2hlbWFzOiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIHJlYWRTY2hlbWE+PixcbiAgKSB7XG4gICAgaWYgKHRhcmdldC5pc01vZHVsZSkge1xuICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hcy5tb2R1bGVTY2hlbWE/Llt0YXJnZXQubW9kdWxlS2V5XTtcbiAgICAgIGlmICghc2NoZW1hKSB7XG4gICAgICAgIHRocm93IEVycm9ycy5JbnRlcm5hbChcbiAgICAgICAgICBgQ291bGQgbm90IGdlbmVyYXRlIHNjaGVtYSBmb3IgbW9kdWxlICR7dGFyZ2V0Lm1vZHVsZUtleX1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLmdlbmVyYXRlVHlwZXNjcmlwdE1vZHVsZShcbiAgICAgICAgdGFyZ2V0IGFzIENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldCxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRhcmdldC5pc1Byb3ZpZGVyKSB7XG4gICAgICBpZiAoIXNjaGVtYXMucHJvdmlkZXJTY2hlbWEpIHtcbiAgICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKGBDb3VsZCBub3QgZ2VuZXJhdGUgc2NoZW1hIGZvciBwcm92aWRlcnNgKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5nZW5lcmF0ZVR5cGVzY3JpcHRQcm92aWRlcihcbiAgICAgICAgdGFyZ2V0IGFzIENvbnN0cnVjdHNNYWtlclByb3ZpZGVyVGFyZ2V0LFxuICAgICAgICBzY2hlbWFzLnByb3ZpZGVyU2NoZW1hLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVW5rbm93biB0YXJnZXQgdHlwZSB1c2VkIHRvIGdlbmVyYXRlIGJpbmRpbmdzOiAke3RhcmdldC5uYW1lfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVtaXRzIGEgdmVyc2lvbnMuanNvbiBmaWxlIHdpdGggYSBtYXAgb2YgdGhlIHVzZWQgdmVyc2lvbiBmb3IgZWFjaCBwcm92aWRlciBmcXBuXG4gIHByaXZhdGUgdXBkYXRlVmVyc2lvbnNGaWxlKFxuICAgIGFsbG93ZWRDb25zdHJhaW50czogVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnRbXSxcbiAgKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYFVwZGF0aW5nIHZlcnNpb25zIGZpbGUgd2l0aCBnZW5lcmF0ZWQgdmVyc2lvbnMgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgdGhpcy52ZXJzaW9ucyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgMixcbiAgICAgICl9IHdpdGggYWxsb3dlZCBjb25zdHJhaW50cyAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBhbGxvd2VkQ29uc3RyYWludHMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApfWAsXG4gICAgKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IFwidmVyc2lvbnMuanNvblwiO1xuICAgIGxldCBwcmV2aW91c1ZlcnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgdHJ5IHtcbiAgICAgIHByZXZpb3VzVmVyc2lvbnMgPSBKU09OLnBhcnNlKFxuICAgICAgICBmcy5yZWFkRmlsZVN5bmMocGF0aC5yZXNvbHZlKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCBmaWxlUGF0aCksIFwidXRmOFwiKSxcbiAgICAgICk7XG5cbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYFJlYWQgZXhpc3RpbmcgdmVyc2lvbnMgZmlsZTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBwcmV2aW91c1ZlcnNpb25zLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgMixcbiAgICAgICAgKX1gLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYENvdWxkIG5vdCByZWFkIHZlcnNpb25zIGZpbGUsIHRoaXMgaXMgZXhwZWN0ZWQgaWYgdGhlcmUgYXJlIG5vIHByZS1leGlzdGluZyBsb2NhbCBwcm92aWRlcnM6ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB2ZXJzaW9ucyA9IGFsbG93ZWRDb25zdHJhaW50cy5yZWR1Y2UoKGFjYywgY29uc3RyYWludCkgPT4ge1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBPYmplY3QuZW50cmllcyhwcmV2aW91c1ZlcnNpb25zKS5maW5kKChbbmFtZV0pID0+XG4gICAgICAgIC8vIFRoaXMgY291bGQgYmUgbW9yZSByZWZpbmVkLCBidXQgaXQncyBnb29kIGVub3VnaCBmb3Igbm93XG4gICAgICAgIG5hbWUuZW5kc1dpdGgoY29uc3RyYWludC5mcW4pLFxuICAgICAgKTtcblxuICAgICAgaWYgKHByb3ZpZGVyKSB7XG4gICAgICAgIGNvbnN0IFtuYW1lLCB2ZXJzaW9uXSA9IHByb3ZpZGVyO1xuICAgICAgICByZXR1cm4geyAuLi5hY2MsIFtuYW1lXTogdmVyc2lvbiB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcblxuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBXcml0aW5nIHZlcnNpb25zIGZpbGUgKCR7ZmlsZVBhdGh9KTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgdmVyc2lvbnMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApfWAsXG4gICAgKTtcblxuICAgIHRoaXMuY29kZS5vcGVuRmlsZShmaWxlUGF0aCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoSlNPTi5zdHJpbmdpZnkoeyAuLi52ZXJzaW9ucywgLi4udGhpcy52ZXJzaW9ucyB9LCBudWxsLCAyKSk7XG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZShmaWxlUGF0aCk7XG4gICAgcmV0dXJuIGZpbGVQYXRoO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlbW92ZUZvbGRlcnNUaGF0U2hvdWxkTm90RXhpc3QoXG4gICAgY29uc3RyYWludHNUaGF0U2hvdWxkRXhpc3Q6IFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50W10sXG4gICkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBSZW1vdmluZyBwcm92aWRlcnMgZXhjZXB0IGZvciAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBjb25zdHJhaW50c1RoYXRTaG91bGRFeGlzdCxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgMixcbiAgICAgICl9YCxcbiAgICApO1xuXG4gICAgLy8gQWxsIGxhbmd1YWdlcyBiZXNpZGVzIFRTIGtlZXAgdGhlaXIgcHJvdmlkZXJzIGluIHRoZSBzYW1lIGZvbGRlcnMgYXMgbW9kdWxlc1xuICAgIC8vIHRoaXMgbWFrZXMgaXQgaW1wb3NzaWJsZSBmb3IgdXMgdG8gZGlzdGluZ3Vpc2ggYSBubyBsb25nZXIgcmVxdWlyZWQgcHJvdmlkZXJcbiAgICAvLyBmcm9tIGEgbWFudWFsbHkgd3JpdHRlbiBjb25zdHJ1Y3Qgb3IgYSBtb2R1bGVcbiAgICBpZiAoIXRoaXMuaXNKYXZhc2NyaXB0VGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGZpbGVzSW5Qcm92aWRlcnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgcHJvdmlkZXJzRm9sZGVyID0gcGF0aC5yZXNvbHZlKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCBcInByb3ZpZGVyc1wiKTtcbiAgICB0cnkge1xuICAgICAgZmlsZXNJblByb3ZpZGVycyA9IGF3YWl0IGZzLnJlYWRkaXIocHJvdmlkZXJzRm9sZGVyKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBFcnJvciBsaXN0aW5nIGZpbGVzIGluIHByb3ZpZGVycyBmb2xkZXIgJyR7cHJvdmlkZXJzRm9sZGVyfSc6ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBmb2xkZXJzID0gZmlsZXNJblByb3ZpZGVycy5maWx0ZXIoKGZpbGUpID0+XG4gICAgICBmc1xuICAgICAgICAuc3RhdFN5bmMocGF0aC5yZXNvbHZlKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCBcInByb3ZpZGVyc1wiLCBmaWxlKSlcbiAgICAgICAgLmlzRGlyZWN0b3J5KCksXG4gICAgKTtcblxuICAgIHJldHVybiBmb2xkZXJzLmZvckVhY2goKGZvbGRlcikgPT4ge1xuICAgICAgY29uc3Qgc2hvdWxkRXhpc3QgPSBjb25zdHJhaW50c1RoYXRTaG91bGRFeGlzdC5zb21lKFxuICAgICAgICAoY29uc3RyYWludCkgPT4gY29uc3RyYWludC5uYW1lID09PSBmb2xkZXIsXG4gICAgICApO1xuXG4gICAgICBpZiAoIXNob3VsZEV4aXN0KSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgUmVtb3ZpbmcgZm9sZGVyICR7Zm9sZGVyfSBmcm9tIHByb3ZpZGVyc2ApO1xuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmNvZGVNYWtlck91dGRpciwgXCJwcm92aWRlcnNcIiwgZm9sZGVyKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBlbWl0cyBhIGNvbnN0cmFpbnRzLmpzb24gZmlsZSB3aXRoIGEgbWFwIG9mIHRoZSB1c2VkIHByb3ZpZGVyIGZxcG5zIGFuZCB2ZXJzaW9uIGNvbnN0cmFpbnRzXG4gIC8vIHRoaXMgaXMgdXNlZCBmb3IgY2FjaGluZyBwdXJwb3Nlc1xuICBwcml2YXRlIGVtaXRDb25zdHJhaW50c0ZpbGUoXG4gICAgYWxsb3dlZENvbnN0cmFpbnRzOiBUZXJyYWZvcm1EZXBlbmRlbmN5Q29uc3RyYWludFtdLFxuICApIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IFwiY29uc3RyYWludHMuanNvblwiO1xuXG4gICAgY29uc3QgY29udGVudDogQ29uc3RyYWludEZpbGUgPSB7XG4gICAgICBjZGt0ZjogRElTUExBWV9WRVJTSU9OLFxuICAgICAgcHJvdmlkZXJzOiBhbGxvd2VkQ29uc3RyYWludHNcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuZnFuLmxvY2FsZUNvbXBhcmUoYi5mcW4pKVxuICAgICAgICAucmVkdWNlKFxuICAgICAgICAgIChjYXJyeSwgaXRlbSkgPT4gKHtcbiAgICAgICAgICAgIC4uLmNhcnJ5LFxuICAgICAgICAgICAgW2l0ZW0uZnFuXTogaXRlbS52ZXJzaW9uLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHt9LFxuICAgICAgICApLFxuICAgIH07XG5cbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKEpTT04uc3RyaW5naWZ5KGNvbnRlbnQsIG51bGwsIDIpKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VGaWxlKGZpbGVQYXRoKTtcbiAgICByZXR1cm4gZmlsZVBhdGg7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlSnNpaUxhbmd1YWdlKHRhcmdldDogQ29uc3RydWN0c01ha2VyVGFyZ2V0KSB7XG4gICAgLy8gTW9kdWxlIGRlcGVuZGVuY2llcyB3ZSBjb21waWxlIGFnYWluc3QuIFN0YXRpYyByZXF1aXJlLnJlc29sdmUgY2FsbHMgc29cbiAgICAvLyBrbmlwIC8gcG5wbSBzdHJpY3QgaXNvbGF0aW9uIGNhbiBzZWUgdGhlIGRlcHMuXG4gICAgY29uc3QgZGVwcyA9IFtcbiAgICAgIHBhdGguZGlybmFtZShyZXF1aXJlLnJlc29sdmUoXCJAdHlwZXMvbm9kZS9wYWNrYWdlLmpzb25cIikpLFxuICAgICAgcGF0aC5kaXJuYW1lKHJlcXVpcmUucmVzb2x2ZShcImNvbnN0cnVjdHMvcGFja2FnZS5qc29uXCIpKSxcbiAgICAgIHBhdGguZGlybmFtZShyZXF1aXJlLnJlc29sdmUoXCJjZGt0bi9wYWNrYWdlLmpzb25cIikpLFxuICAgIF07XG4gICAgY29uc3Qgb3B0czogR2VuZXJhdGVKU0lJT3B0aW9ucyA9IHtcbiAgICAgIGVudHJ5cG9pbnQ6IHRhcmdldC5maWxlTmFtZSxcbiAgICAgIGRlcHMsXG4gICAgICBtb2R1bGVLZXk6IHRhcmdldC5tb2R1bGVLZXksXG4gICAgICBleHBvcnRzOiB0YXJnZXQuaXNQcm92aWRlciAvLyBNb2R1bGVzIGFyZSBzbWFsbCBlbm91Z2ggdGhhdCB3ZSBkb24ndCBuZWVkIHRoaXMgb3B0aW1pemF0aW9uXG4gICAgICAgID8ge1xuICAgICAgICAgICAgXCIuXCI6IHtcbiAgICAgICAgICAgICAgaW1wb3J0OiBgLi9wcm92aWRlcnMvJHt0YXJnZXQubmFtZX0vaW5kZXguanNgLFxuICAgICAgICAgICAgICByZXF1aXJlOiBgLi9wcm92aWRlcnMvJHt0YXJnZXQubmFtZX0vbGF6eS1pbmRleC5qc2AsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfTtcblxuICAgIC8vIHVzZWQgZm9yIHRlc3RpbmcuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5vdXRwdXRKc2lpKSB7XG4gICAgICBvcHRzLmpzaWkgPSB7IHBhdGg6IHRoaXMub3B0aW9ucy5vdXRwdXRKc2lpIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNQeXRob25UYXJnZXQpIHtcbiAgICAgIG9wdHMucHl0aG9uID0ge1xuICAgICAgICBvdXRkaXI6IHRoaXMuY29kZU1ha2VyT3V0ZGlyLFxuICAgICAgICBtb2R1bGVOYW1lOiB0YXJnZXQuc3JjTWFrTmFtZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNKYXZhVGFyZ2V0KSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMub3B0aW9ucy5jb2RlTWFrZXJPdXRwdXQuaW5jbHVkZXMoXCIvXCIpIHx8XG4gICAgICAgIHRoaXMub3B0aW9ucy5jb2RlTWFrZXJPdXRwdXQuaW5jbHVkZXMoXCJcXFxcXCIpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFxuICAgICAgICAgIGBXaGVuIHVzaW5nIEphdmEgdGhlIFwiY29kZU1ha2VyT3V0cHV0XCIgb3B0aW9uIGluIHRoZSBjZGt0Zi5qc29uIG11c3QgYmUgdGhlIG9yZ2FuaXphdGlvbiBpZGVudGlmaWVyIGZvciB5b3VyIHByb2plY3QgKGUuZy4gY29tLm15LWNvbXBhbnkpLCBub3QgYSBwYXRoLiBUaGUgZ2VuZXJhdGVkIEphdmEgY29kZSB3aWxsIGJlIHBsYWNlZCBpbiBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgZ2l2ZW4gZGlyZWN0b3J5LiBJZiB5b3UgYXJlIG1pZ3JhdGluZyBmcm9tIGEgPCAwLjE5IHZlcnNpb24gb2YgY2RrdGYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBjb2RlbWFrZXJPdXRwdXQgdG8gXCJpbXBvcnRzXCIuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgb3B0cy5qYXZhID0ge1xuICAgICAgICBvdXRkaXI6IFwiLlwiLCAvLyBnZW5lcmF0ZWQgamF2YSBmaWxlcyBhcmVuJ3QgcGFja2FnZWQsIHNvIGp1c3QgaW5jbHVkZSBkaXJlY3RseSBpbiBhcHBcbiAgICAgICAgcGFja2FnZTogYCR7dGhpcy5vcHRpb25zLmNvZGVNYWtlck91dHB1dH0uJHt0YXJnZXQuc3JjTWFrTmFtZX1gLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0NzaGFycFRhcmdldCkge1xuICAgICAgb3B0cy5jc2hhcnAgPSB7XG4gICAgICAgIG91dGRpcjogdGhpcy5jb2RlTWFrZXJPdXRkaXIsXG4gICAgICAgIG5hbWVzcGFjZTogdGFyZ2V0LnNyY01ha05hbWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzR29UYXJnZXQpIHtcbiAgICAgIC8vIFRPRE86IGNoZWNrIGlmIG5lZWRlZCBmb3IgbW9kdWxlcyBzb21laG93XG4gICAgICAvLyBjb25zdCB0YXJnZXRUeXBlID0gdGFyZ2V0LmlzUHJvdmlkZXIgPyAncHJvdmlkZXInIDogJ21vZHVsZSc7XG5cbiAgICAgIC8vIGpzaWktc3JjbWFjIHdpbGwgcHJvZHVjZSBhIGZvbGRlciBpbnNpZGUgdGhpcyBkaXIgbmFtZWQgYWZ0ZXIgXCJwYWNrYWdlTmFtZVwiXG4gICAgICAvLyBzbyB0aGlzIHJlc3VsdHMgaW4gZS5nLiAuZ2VuL2hhc2hpY29ycC9yYW5kb21cbiAgICAgIGNvbnN0IG91dGRpciA9IHBhdGguam9pbih0aGlzLmNvZGVNYWtlck91dGRpciwgdGFyZ2V0Lm5hbWVzcGFjZSA/PyBcIlwiKTtcblxuICAgICAgb3B0cy5nb2xhbmcgPSB7XG4gICAgICAgIG91dGRpcixcbiAgICAgICAgbW9kdWxlTmFtZTogYXdhaXQgZGV0ZXJtaW5lR29Nb2R1bGVOYW1lKG91dGRpciksIC8vIGUuZy4gYGdpdGh1Yi5jb20vb3JnL3VzZXJwcm9qZWN0Ly5nZW4vaGFzaGljb3JwYFxuICAgICAgICBwYWNrYWdlTmFtZTogdGFyZ2V0LnNyY01ha05hbWUsIC8vIHBhY2thZ2Ugd2lsbCBiZSBuYW1lZCBlLmcuIHJhbmRvbSBmb3IgaGFzaGljb3JwL3JhbmRvbVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX09QVElPTlMgJiZcbiAgICAgICFwcm9jZXNzLmVudi5OT0RFX09QVElPTlMuaW5jbHVkZXMoYC0tbWF4LW9sZC1zcGFjZS1zaXplYClcbiAgICApIHtcbiAgICAgIGxvZ2dlci53YXJuKGBmb3VuZCBOT0RFX09QVElPTlMgZW52aXJvbm1lbnQgdmFyaWFibGUgd2l0aG91dCBhIHNldHRpbmcgZm9yIC0tbWF4LW9sZC1zcGFjZS1zaXplLlxuVGhlIHByb3ZpZGVyIGdlbmVyYXRpb24gbmVlZHMgYSBzdWJzdGFudGlhbCBhbW91bnQgb2YgbWVtb3J5ICh+MTNHQikgZm9yIHNvbWUgcHJvdmlkZXJzIGFuZCBsYW5ndWFnZXMuXG5TbyBjZGt0bi1jbGkgc2V0cyBpdCB0byBOT0RFX09QVElPTlM9XCItLW1heC1vbGQtc3BhY2Utc2l6ZT0xNjM4NFwiIGJ5IGRlZmF1bHQuIEFzIHlvdXIgZW52aXJvbm1lbnQgYWxyZWFkeSBjb250YWluc1xuYSBOT0RFX09QVElPTlMgdmFyaWFibGUsIHdlIHdvbid0IG92ZXJyaWRlIGl0LiBIZW5jZSwgdGhlIHByb3ZpZGVyIGdlbmVyYXRpb24gbWlnaHQgZmFpbCB3aXRoIGFuIG91dCBvZiBtZW1vcnkgZXJyb3IuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluY3JlYXNlIG1lbW9yeSB0byBhbGxvdyBnZW5lcmF0aW5nIGxhcmdlIHByb3ZpZGVycyAoaS5lLiBhd3Mgb3IgYXp1cmVybSBmb3IgR28pXG4gICAgICAvLyBzcmNtYWsgaXMgZ29pbmcgdG8gc3Bhd24gYSBjaGlsZHByb2Nlc3MgKGZvciBqc2lpLXBhY21haykgd2hpY2ggaXMgZ29pbmcgdG8gYmUgYWZmZWN0ZWQgYnkgdGhpcyBlbnYgdmFyXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX09QVElPTlMgPSBcIi0tbWF4LW9sZC1zcGFjZS1zaXplPTE2Mzg0XCI7XG4gICAgfVxuXG4gICAgY29uc3QganNpaVRpbWVyID0gbG9nVGltZXNwYW4oXCJKU0lJXCIpO1xuICAgIGF3YWl0IGdlbmVyYXRlSnNpaUxhbmd1YWdlKHRoaXMuY29kZSwgb3B0cywgdGhpcy5jb2RlTWFrZXJPdXRkaXIsIFtcbiAgICAgIHRhcmdldC5pc01vZHVsZSA/IFwicHJvdmlkZXJzLyoqXCIgOiBcIm1vZHVsZXMvKipcIixcbiAgICBdKTtcbiAgICBqc2lpVGltZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRTY2hlbWFzKHRhcmdldHM6IFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50W10pIHtcbiAgICByZXR1cm4gYXdhaXQgcmVhZFNjaGVtYSh0YXJnZXRzLCB0aGlzLnNjaGVtYUNhY2hlUGF0aCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2VuZXJhdGUoXG4gICAgYWxsQ29uc3RyYWludHM6IFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50W10sXG4gICAgY29uc3RyYWludHNUb0dlbmVyYXRlID0gYWxsQ29uc3RyYWludHMsXG4gICkge1xuICAgIGNvbnN0IHRhcmdldHMgPSBjb25zdHJhaW50c1RvR2VuZXJhdGUubWFwKChjb25zdHJhaW50KSA9PlxuICAgICAgQ29uc3RydWN0c01ha2VyVGFyZ2V0LmZyb20oY29uc3RyYWludCwgdGhpcy5vcHRpb25zLnRhcmdldExhbmd1YWdlKSxcbiAgICApO1xuXG4gICAgY29uc3QgZW5kU2NoZW1hVGltZXIgPSBsb2dUaW1lc3BhbihcIkdhdGhlcmluZyBzY2hlbWFcIik7XG4gICAgY29uc3Qgc2NoZW1hcyA9IGF3YWl0IHRoaXMuZ2V0U2NoZW1hcyhjb25zdHJhaW50c1RvR2VuZXJhdGUpO1xuICAgIGVuZFNjaGVtYVRpbWVyKCk7XG5cbiAgICBjb25zdCBlbmRHZW5lcmF0ZVRpbWVyID0gbG9nVGltZXNwYW4oXCJHZW5lcmF0ZSBUU1wiKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHRhcmdldHMubWFwKCh0YXJnZXQpID0+IHRoaXMuZ2VuZXJhdGVUeXBlc2NyaXB0KHRhcmdldCwgc2NoZW1hcykpLFxuICAgICk7XG4gICAgZW5kR2VuZXJhdGVUaW1lcigpO1xuXG4gICAgdGhpcy51cGRhdGVWZXJzaW9uc0ZpbGUoYWxsQ29uc3RyYWludHMpO1xuICAgIHRoaXMuZW1pdENvbnN0cmFpbnRzRmlsZShhbGxDb25zdHJhaW50cyk7XG5cbiAgICBpZiAodGhpcy5pc0phdmFzY3JpcHRUYXJnZXQpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2F2ZSgpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc0phdmFzY3JpcHRUYXJnZXQgfHwgdGhpcy5vcHRpb25zLm91dHB1dEpzaWkpIHtcbiAgICAgIGNvbnN0IG51bWJlck9mV29ya2VycyA9IE1hdGgubWF4KFxuICAgICAgICAxLFxuICAgICAgICB0aGlzLm9wdGlvbnMuanNpaVBhcmFsbGVsaXNtID09PSAtMVxuICAgICAgICAgID8gdGFyZ2V0cy5sZW5ndGhcbiAgICAgICAgICA6IHRoaXMub3B0aW9ucy5qc2lpUGFyYWxsZWxpc20gfHwgMSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHdvcmsgPSBbLi4udGFyZ2V0c107XG4gICAgICBjb25zdCB3b3JrZXJzID0gbmV3IEFycmF5KG51bWJlck9mV29ya2VycykuZmlsbChhc3luYyAoKSA9PiB7XG4gICAgICAgIGxldCB0YXJnZXQ6IENvbnN0cnVjdHNNYWtlclRhcmdldCB8IHVuZGVmaW5lZDtcbiAgICAgICAgd2hpbGUgKCh0YXJnZXQgPSB3b3JrLnBvcCgpKSkge1xuICAgICAgICAgIGNvbnN0IGVuZEpzaWlUYXJnZXQgPSBsb2dUaW1lc3BhbihcbiAgICAgICAgICAgIGBHZW5lcmF0aW5nIEpTSUkgYmluZGluZ3MgZm9yICR7dGFyZ2V0Lm5hbWV9YCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGF3YWl0IHRoaXMuZ2VuZXJhdGVKc2lpTGFuZ3VhZ2UodGFyZ2V0KTtcbiAgICAgICAgICBlbmRKc2lpVGFyZ2V0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbCh3b3JrZXJzLm1hcCgoZm4pID0+IGZuKCkpKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICBhd2FpdCB0aGlzLnJlcG9ydFRlbGVtZXRyeSh7XG4gICAgICAgIHRyYWNraW5nUGF5bG9hZDogdGFyZ2V0LnRyYWNraW5nUGF5bG9hZCxcbiAgICAgICAgdGFyZ2V0TGFuZ3VhZ2U6IHRhcmdldC50YXJnZXRMYW5ndWFnZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzUHl0aG9uVGFyZ2V0KSB7XG4gICAgICBjb25zdCBlbmRQeXRob25UaW1lciA9IGxvZ1RpbWVzcGFuKFwiUHl0aG9uIHBvc3QtcHJvY2Vzc2luZ1wiKTtcbiAgICAgIC8vIFJlbW92ZSBmcm9tIC4gaW1wb3J0IC4uLiBzdGF0ZW1lbnRzIGZyb20gcm9vdCBsZXZlbCBfX2luaXRfXy5weVxuICAgICAgLy8gVGhpcyByZW1vdmVzIHJvb3QtbGV2ZWwgaW1wb3J0cyBvZiBuYW1lc3BhY2VzLCBidXQgc2F2ZXMgMjVzIHN5bnRoIHRpbWUgZm9yIHRoZSBhd3MgcHJvdmlkZXIgYWxvbmVcbiAgICAgIGNvbnN0IGFsbEluaXRQeVBhdGhzID0gZ2xvYlxuICAgICAgICAuc3luYyhcIioqL19faW5pdF9fLnB5XCIsIHtcbiAgICAgICAgICBjd2Q6IHRoaXMuY29kZU1ha2VyT3V0ZGlyLFxuICAgICAgICB9KVxuICAgICAgICAvLyBzb3J0IGJ5IGRlcHRoLCBzbyB3ZSBzdGFydCB3aXRoIHRoZSBzaGFsbG93ZXN0IGZpbGVzXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnNwbGl0KFwiL1wiKS5sZW5ndGggLSBiLnNwbGl0KFwiL1wiKS5sZW5ndGgpO1xuXG4gICAgICBjb25zdCB2aXNpdGVkRGlyZWN0b3JpZXM6IHN0cmluZ1tdID0gW107XG4gICAgICBmb3IgKGNvbnN0IGluaXRQeVBhdGggb2YgYWxsSW5pdFB5UGF0aHMpIHtcbiAgICAgICAgY29uc3QgZGlyZWN0b3J5UGF0aCA9IHBhdGguZGlybmFtZShpbml0UHlQYXRoKTtcbiAgICAgICAgaWYgKHZpc2l0ZWREaXJlY3Rvcmllcy5zb21lKChkaXIpID0+IGRpcmVjdG9yeVBhdGguc3RhcnRzV2l0aChkaXIpKSkge1xuICAgICAgICAgIC8vIHdlIGFscmVhZHkgcHJvY2Vzc2VkIHRoaXMgZGlyZWN0b3J5XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmlzaXRlZERpcmVjdG9yaWVzLnB1c2goZGlyZWN0b3J5UGF0aCk7XG5cbiAgICAgICAgY29uc3QgYWJzb2x1dGVJbml0UHlQYXRoID0gcGF0aC5qb2luKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCBpbml0UHlQYXRoKTtcbiAgICAgICAgY29uc3QgaW5pdFB5ID0gYXdhaXQgZnMucmVhZEZpbGUoYWJzb2x1dGVJbml0UHlQYXRoLCBcInV0ZjhcIik7XG4gICAgICAgIGNvbnN0IGluaXRQeVdpdGhvdXRJbXBvcnRzID0gaW5pdFB5LnJlcGxhY2UoL2Zyb20gXFwuIGltcG9ydCAuKlxcbi9nLCBcIlwiKTtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKGFic29sdXRlSW5pdFB5UGF0aCwgaW5pdFB5V2l0aG91dEltcG9ydHMpO1xuICAgICAgfVxuXG4gICAgICBlbmRQeXRob25UaW1lcigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2F2ZShvdXRkaXIgPSB0aGlzLmNvZGVNYWtlck91dGRpcikge1xuICAgIGF3YWl0IHRoaXMuY29kZS5zYXZlKG91dGRpcik7XG4gIH1cblxuICBwcml2YXRlIGdldCBpc0phdmFzY3JpcHRUYXJnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50YXJnZXRMYW5ndWFnZSA9PT0gTGFuZ3VhZ2UuVFlQRVNDUklQVDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzUHl0aG9uVGFyZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudGFyZ2V0TGFuZ3VhZ2UgPT09IExhbmd1YWdlLlBZVEhPTjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzSmF2YVRhcmdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRhcmdldExhbmd1YWdlID09PSBMYW5ndWFnZS5KQVZBO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaXNDc2hhcnBUYXJnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50YXJnZXRMYW5ndWFnZSA9PT0gTGFuZ3VhZ2UuQ1NIQVJQO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaXNHb1RhcmdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRhcmdldExhbmd1YWdlID09PSBMYW5ndWFnZS5HTztcbiAgfVxufVxuXG4vKipcbiAqIHNlYXJjaGVzIGZvciB0aGUgY2xvc2VzdCBgZ28ubW9kYCBmaWxlIGFuZCByZXR1cm5zIHRoZSBuZXN0ZWQgZ28gbW9kdWxlIG5hbWUgZm9yIGBkaXJgXG4gKiBlLmcuICgvZGlyLy5nZW4vKSA9PiBjZGsudGYvc3RhY2svLmdlbiBpZiB0aGUgcGFyZW50IGRpciBvZiAuZ2VuIGhhcyBhIGdvLm1vZCBmb3IgXCJtb2R1bGUgY2RrLnRmL3N0YWNrXCJcbiAqXG4gKiBAcGFyYW0gZGlyIHRoZSBkaXJlY3RvcnkgdG8gc3RhcnQgdGhlIHNlYXJjaCBmcm9tIChzZWFyY2hlcyB1cHdhcmRzKVxuICogQHJldHVybnMgdGhlIHBhY2thZ2UgbmFtZSBmb3IgYGRpcmBcbiAqIEB0aHJvd3MgYW4gRXJyb3IgaWYgbm8gZ28ubW9kIHdhcyBmb3VuZFxuICovXG5leHBvcnQgY29uc3QgZGV0ZXJtaW5lR29Nb2R1bGVOYW1lID0gYXN5bmMgKGRpcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgbGV0IHByZXZpb3VzRGlyO1xuICBsZXQgY3VycmVudERpciA9IHBhdGgucmVzb2x2ZShkaXIpO1xuXG4gIGRvIHtcbiAgICBsZXQgZmlsZXM6IHN0cmluZ1tdID0gW107XG4gICAgdHJ5IHtcbiAgICAgIGZpbGVzID0gYXdhaXQgZnMucmVhZGRpcihjdXJyZW50RGlyKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIC8vIGRpcmVjdG9yeSBtaWdodCBub3QgZXhpc3QgeWV0LCBidXQgd2Ugc3RpbGwgd2FsayB1cHdhcmRzIGZyb20gdGhlcmUsIHNvIGlnbm9yZSAnRU5PRU5UJ1xuICAgICAgaWYgKGUuY29kZSAhPT0gXCJFTk9FTlRcIikge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZmlsZXMuaW5jbHVkZXMoXCJnby5tb2RcIikpIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBwYXRoLnJlc29sdmUoY3VycmVudERpciwgXCJnby5tb2RcIik7XG4gICAgICBjb25zdCBnb21vZCA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGUpO1xuICAgICAgY29uc3QgbWF0Y2ggPSAvXm1vZHVsZVxccyooXFxTKilcXHMqJC9tLmV4ZWMoZ29tb2QudG9TdHJpbmcoKSk7XG4gICAgICBpZiAobWF0Y2ggJiYgbWF0Y2hbMV0pIHtcbiAgICAgICAgY29uc3QgY2hpbGRkaXIgPSBwYXRoLnJlbGF0aXZlKGN1cnJlbnREaXIsIGRpcikucmVwbGFjZSgvXFxcXC9nLCBcIi9cIik7IC8vIHJlcGxhY2UgJ1xcJyB3aXRoICcvJyBmb3Igd2luZG93cyBwYXRoc1xuICAgICAgICByZXR1cm4gY2hpbGRkaXIubGVuZ3RoID4gMCA/IGAke21hdGNoWzFdfS8ke2NoaWxkZGlyfWAgOiBtYXRjaFsxXTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIHJvb3QgR28gbW9kdWxlIG5hbWUuIEZvdW5kICR7ZmlsZX0gYnV0IGZhaWxlZCB0byByZWdleCBtYXRjaCB0aGUgbW9kdWxlIG5hbWUgZGlyZWN0aXZlYCxcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIGdvIHVwIG9uZSBkaXJlY3RvcnkuIEFzIGRpcm5hbWUoJy8nKSB3aWxsIHJldHVybiAnLycgd2UgY2FuY2VsIHRoZSBsb29wXG4gICAgLy8gYXMgc29vbiBhcyB0aGUgZGlyIGRvZXMgbm90IGNoYW5nZSBhbnltb3JlLlxuICAgIHByZXZpb3VzRGlyID0gY3VycmVudERpcjtcbiAgICBjdXJyZW50RGlyID0gcGF0aC5kaXJuYW1lKGN1cnJlbnREaXIpO1xuICB9IHdoaWxlIChjdXJyZW50RGlyICE9PSBwcmV2aW91c0Rpcik7XG5cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSByb290IEdvIG1vZHVsZSBuYW1lLiBObyBnby5tb2QgZm91bmQgaW4gJHtkaXJ9IGFuZCBhbnkgcGFyZW50IGRpcmVjdG9yaWVzYCxcbiAgKTtcbn07XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cdktn/provider-generator",
|
|
3
|
-
"version": "0.24.0-pre.
|
|
3
|
+
"version": "0.24.0-pre.67",
|
|
4
4
|
"description": "Exposes API to generate Terraform CDK provider bindings",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -35,9 +35,9 @@
|
|
|
35
35
|
"glob": "10.5.0",
|
|
36
36
|
"jsii": "~5.9.0",
|
|
37
37
|
"jsii-pacmak": "1.128.0",
|
|
38
|
-
"@cdktn/commons": "0.24.0-pre.
|
|
39
|
-
"@cdktn/provider-schema": "0.24.0-pre.
|
|
40
|
-
"cdktn": "0.24.0-pre.
|
|
38
|
+
"@cdktn/commons": "0.24.0-pre.67",
|
|
39
|
+
"@cdktn/provider-schema": "0.24.0-pre.67",
|
|
40
|
+
"cdktn": "0.24.0-pre.67"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@types/fs-extra": "8.1.5",
|
|
@@ -25,6 +25,23 @@ import { readSchema } from "@cdktn/provider-schema";
|
|
|
25
25
|
const pacmakModule = require.resolve("jsii-pacmak/bin/jsii-pacmak");
|
|
26
26
|
const jsiiModule = require.resolve("jsii/bin/jsii");
|
|
27
27
|
|
|
28
|
+
/**
|
|
29
|
+
* Returns the files `npm pack` would publish for the package at `dir`, as paths relative to `dir`. This is the set
|
|
30
|
+
* jsii needs to compile against a dependency — its sources and declared metadata — and excludes build outputs
|
|
31
|
+
* (`dist`, `.pack-staging`, `node_modules`, tsbuildinfo, ...) that a blanket directory copy would otherwise pull in.
|
|
32
|
+
*
|
|
33
|
+
* @param dir - Absolute path to the package directory to inspect (must contain a package.json).
|
|
34
|
+
* @returns Publishable file paths, relative to `dir`, with `..`-escape paths (from following pnpm symlinks) dropped.
|
|
35
|
+
*/
|
|
36
|
+
async function resolvePublishableFiles(dir: string): Promise<string[]> {
|
|
37
|
+
const stdout = await exec("npm", ["pack", "--dry-run", "--json"], {
|
|
38
|
+
cwd: dir,
|
|
39
|
+
});
|
|
40
|
+
const packInfo = JSON.parse(stdout) as Array<{ files: { path: string }[] }>;
|
|
41
|
+
// Drop `..`-escape paths npm emits when following pnpm's node_modules symlinks.
|
|
42
|
+
return packInfo[0].files.map((f) => f.path).filter((p) => !p.includes(".."));
|
|
43
|
+
}
|
|
44
|
+
|
|
28
45
|
export interface GenerateJSIIOptions {
|
|
29
46
|
entrypoint: string;
|
|
30
47
|
deps: string[];
|
|
@@ -115,8 +132,14 @@ export async function generateJsiiLanguage(
|
|
|
115
132
|
path.join(staging, "node_modules"),
|
|
116
133
|
moduleName,
|
|
117
134
|
);
|
|
118
|
-
await fs.mkdirp(
|
|
119
|
-
|
|
135
|
+
await fs.mkdirp(targetdir);
|
|
136
|
+
// Copy only the dep's publishable files (what `npm pack` would ship) into the jsii compile bundle.
|
|
137
|
+
for (const relPath of await resolvePublishableFiles(dir)) {
|
|
138
|
+
const src = path.join(dir, relPath);
|
|
139
|
+
const dst = path.join(targetdir, relPath);
|
|
140
|
+
await fs.mkdirp(path.dirname(dst));
|
|
141
|
+
await fs.copy(src, dst, { dereference: true });
|
|
142
|
+
}
|
|
120
143
|
|
|
121
144
|
// add to "deps" and "peer deps"
|
|
122
145
|
if (!moduleName.startsWith("@types/")) {
|