@cdktn/provider-generator 0.24.0-pre.3 → 0.24.0-pre.31

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.
Files changed (24) hide show
  1. package/.spec.swcrc +22 -0
  2. package/build/get/__tests__/generator/import-style.test.d.ts +2 -0
  3. package/build/get/__tests__/generator/import-style.test.js +101 -0
  4. package/build/get/__tests__/generator/module-generator.test.js +12 -12
  5. package/build/get/constructs-maker.d.ts +5 -1
  6. package/build/get/constructs-maker.js +5 -2
  7. package/build/get/generator/emitter/struct-emitter.d.ts +2 -1
  8. package/build/get/generator/emitter/struct-emitter.js +14 -11
  9. package/build/get/generator/module-generator.js +3 -3
  10. package/build/get/generator/provider-generator.d.ts +9 -1
  11. package/build/get/generator/provider-generator.js +9 -6
  12. package/eslint.config.mjs +13 -0
  13. package/jest.config.js +16 -9
  14. package/package.json +8 -9
  15. package/src/__tests__/__snapshots__/edge-provider-schema.test.ts.snap +8 -8
  16. package/src/__tests__/__snapshots__/provider.test.ts.snap +2951 -2951
  17. package/src/get/__tests__/generator/__snapshots__/complex-computed-types.test.ts.snap +5 -5
  18. package/src/get/__tests__/generator/__snapshots__/export-sharding.test.ts.snap +3310 -3310
  19. package/src/get/__tests__/generator/__snapshots__/module-generator.test.ts.snap +355 -355
  20. package/src/get/__tests__/generator/__snapshots__/nested-types.test.ts.snap +8 -8
  21. package/src/get/__tests__/generator/__snapshots__/provider.test.ts.snap +8 -8
  22. package/src/get/__tests__/generator/__snapshots__/resource-types.test.ts.snap +126 -126
  23. package/src/get/__tests__/generator/__snapshots__/skipped-attributes.test.ts.snap +17 -17
  24. package/src/get/__tests__/generator/__snapshots__/types.test.ts.snap +65 -65
package/.spec.swcrc ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "jsc": {
3
+ "target": "es2017",
4
+ "parser": {
5
+ "syntax": "typescript",
6
+ "decorators": true,
7
+ "dynamicImport": true
8
+ },
9
+ "transform": {
10
+ "decoratorMetadata": true,
11
+ "legacyDecorator": true
12
+ },
13
+ "keepClassNames": true,
14
+ "externalHelpers": true,
15
+ "loose": true
16
+ },
17
+ "module": {
18
+ "type": "commonjs"
19
+ },
20
+ "sourceMaps": true,
21
+ "exclude": []
22
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=import-style.test.d.ts.map
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ // Copyright (c) HashiCorp, Inc
27
+ // SPDX-License-Identifier: MPL-2.0
28
+ const fs = __importStar(require("fs"));
29
+ const os = __importStar(require("os"));
30
+ const path = __importStar(require("path"));
31
+ const codemaker_1 = require("codemaker");
32
+ const provider_generator_1 = require("../../generator/provider-generator");
33
+ const fixture = JSON.parse(fs.readFileSync(path.join(__dirname, "fixtures", "aws_wafv2_web_acl.test.fixture.json"), "utf-8"));
34
+ async function generate(options = {}) {
35
+ const code = new codemaker_1.CodeMaker();
36
+ const workdir = fs.mkdtempSync(path.join(os.tmpdir(), "import-style.test"));
37
+ new provider_generator_1.TerraformProviderGenerator(code, fixture, options).generateAll();
38
+ await code.save(workdir);
39
+ return workdir;
40
+ }
41
+ const RESOURCE_INDEX = "providers/test/wafv2-web-acl/index.ts";
42
+ const STRUCTS_INDEX = "providers/test/wafv2-web-acl/index-structs/index.ts";
43
+ const STRUCTS_DIR = "providers/test/wafv2-web-acl/index-structs";
44
+ const PROVIDER_INDEX = "providers/test/index.ts";
45
+ function readAllShards(workdir) {
46
+ return fs
47
+ .readdirSync(path.join(workdir, STRUCTS_DIR))
48
+ .filter((f) => /^structs\d+\.ts$/.test(f))
49
+ .map((f) => fs.readFileSync(path.join(workdir, STRUCTS_DIR, f), "utf-8"))
50
+ .join("\n");
51
+ }
52
+ test("default (no importExtension): emits explicit /index for folders, bare for files", async () => {
53
+ const workdir = await generate();
54
+ const resource = fs.readFileSync(path.join(workdir, RESOURCE_INDEX), "utf-8");
55
+ expect(resource).toContain(`} from './index-structs/index'`);
56
+ expect(resource).toContain(`export * from './index-structs/index'`);
57
+ expect(resource).not.toMatch(/from '\.\/[^']*\.(js|ts)'/);
58
+ const structsIndex = fs.readFileSync(path.join(workdir, STRUCTS_INDEX), "utf-8");
59
+ expect(structsIndex).toContain(`export * from './structs0'`);
60
+ expect(structsIndex).not.toMatch(/from '\.\/[^']*\.(js|ts)'/);
61
+ const providerIndex = fs.readFileSync(path.join(workdir, PROVIDER_INDEX), "utf-8");
62
+ expect(providerIndex).toMatch(/from '\.\/[^']+\/index';/);
63
+ });
64
+ test("importExtension '.js': emits fully-qualified ./<folder>/index.js and ./<file>.js", async () => {
65
+ const workdir = await generate({ importExtension: ".js" });
66
+ const resource = fs.readFileSync(path.join(workdir, RESOURCE_INDEX), "utf-8");
67
+ expect(resource).toContain(`} from './index-structs/index.js'`);
68
+ expect(resource).toContain(`export * from './index-structs/index.js'`);
69
+ const structsIndex = fs.readFileSync(path.join(workdir, STRUCTS_INDEX), "utf-8");
70
+ expect(structsIndex).toContain(`export * from './structs0.js'`);
71
+ const allShards = readAllShards(workdir);
72
+ expect(allShards).toMatch(/from '\.\/structs\d+\.js'/);
73
+ const providerIndex = fs.readFileSync(path.join(workdir, PROVIDER_INDEX), "utf-8");
74
+ expect(providerIndex).toMatch(/from '\.\/[^']+\/index\.js';/);
75
+ });
76
+ test("importExtension '.ts': emits fully-qualified ./<folder>/index.ts and ./<file>.ts", async () => {
77
+ const workdir = await generate({ importExtension: ".ts" });
78
+ const resource = fs.readFileSync(path.join(workdir, RESOURCE_INDEX), "utf-8");
79
+ expect(resource).toContain(`} from './index-structs/index.ts'`);
80
+ expect(resource).toContain(`export * from './index-structs/index.ts'`);
81
+ const structsIndex = fs.readFileSync(path.join(workdir, STRUCTS_INDEX), "utf-8");
82
+ expect(structsIndex).toContain(`export * from './structs0.ts'`);
83
+ const allShards = readAllShards(workdir);
84
+ expect(allShards).toMatch(/from '\.\/structs\d+\.ts'/);
85
+ const providerIndex = fs.readFileSync(path.join(workdir, PROVIDER_INDEX), "utf-8");
86
+ expect(providerIndex).toMatch(/from '\.\/[^']+\/index\.ts';/);
87
+ });
88
+ test("importExtension '': emits explicit /index for folders, bare for files", async () => {
89
+ const workdir = await generate({ importExtension: "" });
90
+ const resource = fs.readFileSync(path.join(workdir, RESOURCE_INDEX), "utf-8");
91
+ expect(resource).toContain(`} from './index-structs/index'`);
92
+ expect(resource).toContain(`export * from './index-structs/index'`);
93
+ expect(resource).not.toMatch(/from '\.\/[^']*\.(js|ts)'/);
94
+ const structsIndex = fs.readFileSync(path.join(workdir, STRUCTS_INDEX), "utf-8");
95
+ // file targets get the (empty) extension, so they stay bare
96
+ expect(structsIndex).toContain(`export * from './structs0'`);
97
+ expect(structsIndex).not.toMatch(/from '\.\/[^']*\.(js|ts)'/);
98
+ const providerIndex = fs.readFileSync(path.join(workdir, PROVIDER_INDEX), "utf-8");
99
+ expect(providerIndex).toMatch(/from '\.\/[^']+\/index';/);
100
+ });
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LXN0eWxlLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2V0L19fdGVzdHNfXy9nZW5lcmF0b3IvaW1wb3J0LXN0eWxlLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsdUNBQXlCO0FBQ3pCLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IseUNBQXNDO0FBQ3RDLDJFQUc0QztBQUU1QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUN4QixFQUFFLENBQUMsWUFBWSxDQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxxQ0FBcUMsQ0FBQyxFQUN2RSxPQUFPLENBQ1IsQ0FDRixDQUFDO0FBRUYsS0FBSyxVQUFVLFFBQVEsQ0FBQyxVQUE2QyxFQUFFO0lBQ3JFLE1BQU0sSUFBSSxHQUFHLElBQUkscUJBQVMsRUFBRSxDQUFDO0lBQzdCLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO0lBQzVFLElBQUksK0NBQTBCLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyRSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekIsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVELE1BQU0sY0FBYyxHQUFHLHVDQUF1QyxDQUFDO0FBQy9ELE1BQU0sYUFBYSxHQUFHLHFEQUFxRCxDQUFDO0FBQzVFLE1BQU0sV0FBVyxHQUFHLDRDQUE0QyxDQUFDO0FBQ2pFLE1BQU0sY0FBYyxHQUFHLHlCQUF5QixDQUFDO0FBRWpELFNBQVMsYUFBYSxDQUFD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RTtJQUN2RixNQUFNLE9BQU8sR0FBRyxNQUFNLFFBQVEsQ0FBQyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRXhELE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDOUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQzdELE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsdUNBQXVDLENBQUMsQ0FBQztJQUNwRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBRTFELE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxFQUNqQyxPQUFPLENBQ1IsQ0FBQztJQUNGLDREQUE0RDtJQUM1RCxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUyxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDN0QsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUU5RCxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsRUFDbEMsT0FBTyxDQUNSLENBQUM7SUFDRixNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFDNUQsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IENvZGVNYWtlciB9IGZyb20gXCJjb2RlbWFrZXJcIjtcbmltcG9ydCB7XG4gIFRlcnJhZm9ybVByb3ZpZGVyR2VuZXJhdG9yLFxuICB0eXBlIFRlcnJhZm9ybVByb3ZpZGVyR2VuZXJhdG9yT3B0aW9ucyxcbn0gZnJvbSBcIi4uLy4uL2dlbmVyYXRvci9wcm92aWRlci1nZW5lcmF0b3JcIjtcblxuY29uc3QgZml4dHVyZSA9IEpTT04ucGFyc2UoXG4gIGZzLnJlYWRGaWxlU3luYyhcbiAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCBcImZpeHR1cmVzXCIsIFwiYXdzX3dhZnYyX3dlYl9hY2wudGVzdC5maXh0dXJlLmpzb25cIiksXG4gICAgXCJ1dGYtOFwiLFxuICApLFxuKTtcblxuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGUob3B0aW9uczogVGVycmFmb3JtUHJvdmlkZXJHZW5lcmF0b3JPcHRpb25zID0ge30pIHtcbiAgY29uc3QgY29kZSA9IG5ldyBDb2RlTWFrZXIoKTtcbiAgY29uc3Qgd29ya2RpciA9IGZzLm1rZHRlbXBTeW5jKHBhdGguam9pbihvcy50bXBkaXIoKSwgXCJpbXBvcnQtc3R5bGUudGVzdFwiKSk7XG4gIG5ldyBUZXJyYWZvcm1Qcm92aWRlckdlbmVyYXRvcihjb2RlLCBmaXh0dXJlLCBvcHRpb25zKS5nZW5lcmF0ZUFsbCgpO1xuICBhd2FpdCBjb2RlLnNhdmUod29ya2Rpcik7XG4gIHJldHVybiB3b3JrZGlyO1xufVxuXG5jb25zdCBSRVNPVVJDRV9JTkRFWCA9IFwicHJvdmlkZXJzL3Rlc3Qvd2FmdjItd2ViLWFjbC9pbmRleC50c1wiO1xuY29uc3QgU1RSVUNUU19JTkRFWCA9IFwicHJvdmlkZXJzL3Rlc3Qvd2FmdjItd2ViLWFjbC9pbmRleC1zdHJ1Y3RzL2luZGV4LnRzXCI7XG5jb25zdCBTVFJVQ1RTX0RJUiA9IFwicHJvdmlkZXJzL3Rlc3Qvd2FmdjItd2ViLWFjbC9pbmRleC1zdHJ1Y3RzXCI7XG5jb25zdCBQUk9WSURFUl9JTkRFWCA9IFwicHJvdmlkZXJzL3Rlc3QvaW5kZXgudHNcIjtcblxuZnVuY3Rpb24gcmVhZEFsbFNoYXJkcyh3b3JrZGlyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gZnNcbiAgICAucmVhZGRpclN5bmMocGF0aC5qb2luKHdvcmtkaXIsIFNUUlVDVFNfRElSKSlcbiAgICAuZmlsdGVyKChmKSA9PiAvXnN0cnVjdHNcXGQrXFwudHMkLy50ZXN0KGYpKVxuICAgIC5tYXAoKGYpID0+IGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4od29ya2RpciwgU1RSVUNUU19ESVIsIGYpLCBcInV0Zi04XCIpKVxuICAgIC5qb2luKFwiXFxuXCIpO1xufVxuXG50ZXN0KFwiZGVmYXVsdCAobm8gaW1wb3J0RXh0ZW5zaW9uKTogZW1pdHMgZXhwbGljaXQgL2luZGV4IGZvciBmb2xkZXJzLCBiYXJlIGZvciBmaWxlc1wiLCBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHdvcmtkaXIgPSBhd2FpdCBnZW5lcmF0ZSgpO1xuXG4gIGNvbnN0IHJlc291cmNlID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbih3b3JrZGlyLCBSRVNPVVJDRV9JTkRFWCksIFwidXRmLThcIik7XG4gIGV4cGVjdChyZXNvdXJjZSkudG9Db250YWluKGB9IGZyb20gJy4vaW5kZXgtc3RydWN0cy9pbmRleCdgKTtcbiAgZXhwZWN0KHJlc291cmNlKS50b0NvbnRhaW4oYGV4cG9ydCAqIGZyb20gJy4vaW5kZXgtc3RydWN0cy9pbmRleCdgKTtcbiAgZXhwZWN0KHJlc291cmNlKS5ub3QudG9NYXRjaCgvZnJvbSAnXFwuXFwvW14nXSpcXC4oanN8dHMpJy8pO1xuXG4gIGNvbnN0IHN0cnVjdHNJbmRleCA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICBwYXRoLmpvaW4od29ya2RpciwgU1RSVUNUU19JTkRFWCksXG4gICAgXCJ1dGYtOFwiLFxuICApO1xuICBleHBlY3Qoc3RydWN0c0luZGV4KS50b0NvbnRhaW4oYGV4cG9ydCAqIGZyb20gJy4vc3RydWN0czAnYCk7XG4gIGV4cGVjdChzdHJ1Y3RzSW5kZXgpLm5vdC50b01hdGNoKC9mcm9tICdcXC5cXC9bXiddKlxcLihqc3x0cyknLyk7XG5cbiAgY29uc3QgcHJvdmlkZXJJbmRleCA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICBwYXRoLmpvaW4od29ya2RpciwgUFJPVklERVJfSU5ERVgpLFxuICAgIFwidXRmLThcIixcbiAgKTtcbiAgZXhwZWN0KHByb3ZpZGVySW5kZXgpLnRvTWF0Y2goL2Zyb20gJ1xcLlxcL1teJ10rXFwvaW5kZXgnOy8pO1xufSk7XG5cbnRlc3QoXCJpbXBvcnRFeHRlbnNpb24gJy5qcyc6IGVtaXRzIGZ1bGx5LXF1YWxpZmllZCAuLzxmb2xkZXI+L2luZGV4LmpzIGFuZCAuLzxmaWxlPi5qc1wiLCBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHdvcmtkaXIgPSBhd2FpdCBnZW5lcmF0ZSh7IGltcG9ydEV4dGVuc2lvbjogXCIuanNcIiB9KTtcblxuICBjb25zdCByZXNvdXJjZSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4od29ya2RpciwgUkVTT1VSQ0VfSU5ERVgpLCBcInV0Zi04XCIpO1xuICBleHBlY3QocmVzb3VyY2UpLnRvQ29udGFpbihgfSBmcm9tICcuL2luZGV4LXN0cnVjdHMvaW5kZXguanMnYCk7XG4gIGV4cGVjdChyZXNvdXJjZSkudG9Db250YWluKGBleHBvcnQgKiBmcm9tICcuL2luZGV4LXN0cnVjdHMvaW5kZXguanMnYCk7XG5cbiAgY29uc3Qgc3RydWN0c0luZGV4ID0gZnMucmVhZEZpbGVTeW5jKFxuICAgIHBhdGguam9pbih3b3JrZGlyLCBTVFJVQ1RTX0lOREVYKSxcbiAgICBcInV0Zi04XCIsXG4gICk7XG4gIGV4cGVjdChzdHJ1Y3RzSW5kZXgpLnRvQ29udGFpbihgZXhwb3J0ICogZnJvbSAnLi9zdHJ1Y3RzMC5qcydgKTtcblxuICBjb25zdCBhbGxTaGFyZHMgPSByZWFkQWxsU2hhcmRzKHdvcmtkaXIpO1xuICBleHBlY3QoYWxsU2hhcmRzKS50b01hdGNoKC9mcm9tICdcXC5cXC9zdHJ1Y3RzXFxkK1xcLmpzJy8pO1xuXG4gIGNvbnN0IHByb3ZpZGVySW5kZXggPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgcGF0aC5qb2luKHdvcmtkaXIsIFBST1ZJREVSX0lOREVYKSxcbiAgICBcInV0Zi04XCIsXG4gICk7XG4gIGV4cGVjdChwcm92aWRlckluZGV4KS50b01hdGNoKC9mcm9tICdcXC5cXC9bXiddK1xcL2luZGV4XFwuanMnOy8pO1xufSk7XG5cbnRlc3QoXCJpbXBvcnRFeHRlbnNpb24gJy50cyc6IGVtaXRzIGZ1bGx5LXF1YWxpZmllZCAuLzxmb2xkZXI+L2luZGV4LnRzIGFuZCAuLzxmaWxlPi50c1wiLCBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHdvcmtkaXIgPSBhd2FpdCBnZW5lcmF0ZSh7IGltcG9ydEV4dGVuc2lvbjogXCIudHNcIiB9KTtcblxuICBjb25zdCByZXNvdXJjZSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4od29ya2RpciwgUkVTT1VSQ0VfSU5ERVgpLCBcInV0Zi04XCIpO1xuICBleHBlY3QocmVzb3VyY2UpLnRvQ29udGFpbihgfSBmcm9tICcuL2luZGV4LXN0cnVjdHMvaW5kZXgudHMnYCk7XG4gIGV4cGVjdChyZXNvdXJjZSkudG9Db250YWluKGBleHBvcnQgKiBmcm9tICcuL2luZGV4LXN0cnVjdHMvaW5kZXgudHMnYCk7XG5cbiAgY29uc3Qgc3RydWN0c0luZGV4ID0gZnMucmVhZEZpbGVTeW5jKFxuICAgIHBhdGguam9pbih3b3JrZGlyLCBTVFJVQ1RTX0lOREVYKSxcbiAgICBcInV0Zi04XCIsXG4gICk7XG4gIGV4cGVjdChzdHJ1Y3RzSW5kZXgpLnRvQ29udGFpbihgZXhwb3J0ICogZnJvbSAnLi9zdHJ1Y3RzMC50cydgKTtcblxuICBjb25zdCBhbGxTaGFyZHMgPSByZWFkQWxsU2hhcmRzKHdvcmtkaXIpO1xuICBleHBlY3QoYWxsU2hhcmRzKS50b01hdGNoKC9mcm9tICdcXC5cXC9zdHJ1Y3RzXFxkK1xcLnRzJy8pO1xuXG4gIGNvbnN0IHByb3ZpZGVySW5kZXggPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgcGF0aC5qb2luKHdvcmtkaXIsIFBST1ZJREVSX0lOREVYKSxcbiAgICBcInV0Zi04XCIsXG4gICk7XG4gIGV4cGVjdChwcm92aWRlckluZGV4KS50b01hdGNoKC9mcm9tICdcXC5cXC9bXiddK1xcL2luZGV4XFwudHMnOy8pO1xufSk7XG5cbnRlc3QoXCJpbXBvcnRFeHRlbnNpb24gJyc6IGVtaXRzIGV4cGxpY2l0IC9pbmRleCBmb3IgZm9sZGVycywgYmFyZSBmb3IgZmlsZXNcIiwgYXN5bmMgKCkgPT4ge1xuICBjb25zdCB3b3JrZGlyID0gYXdhaXQgZ2VuZXJhdGUoeyBpbXBvcnRFeHRlbnNpb246IFwiXCIgfSk7XG5cbiAgY29uc3QgcmVzb3VyY2UgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHdvcmtkaXIsIFJFU09VUkNFX0lOREVYKSwgXCJ1dGYtOFwiKTtcbiAgZXhwZWN0KHJlc291cmNlKS50b0NvbnRhaW4oYH0gZnJvbSAnLi9pbmRleC1zdHJ1Y3RzL2luZGV4J2ApO1xuICBleHBlY3QocmVzb3VyY2UpLnRvQ29udGFpbihgZXhwb3J0ICogZnJvbSAnLi9pbmRleC1zdHJ1Y3RzL2luZGV4J2ApO1xuICBleHBlY3QocmVzb3VyY2UpLm5vdC50b01hdGNoKC9mcm9tICdcXC5cXC9bXiddKlxcLihqc3x0cyknLyk7XG5cbiAgY29uc3Qgc3RydWN0c0luZGV4ID0gZnMucmVhZEZpbGVTeW5jKFxuICAgIHBhdGguam9pbih3b3JrZGlyLCBTVFJVQ1RTX0lOREVYKSxcbiAgICBcInV0Zi04XCIsXG4gICk7XG4gIC8vIGZpbGUgdGFyZ2V0cyBnZXQgdGhlIChlbXB0eSkgZXh0ZW5zaW9uLCBzbyB0aGV5IHN0YXkgYmFyZVxuICBleHBlY3Qoc3RydWN0c0luZGV4KS50b0NvbnRhaW4oYGV4cG9ydCAqIGZyb20gJy4vc3RydWN0czAnYCk7XG4gIGV4cGVjdChzdHJ1Y3RzSW5kZXgpLm5vdC50b01hdGNoKC9mcm9tICdcXC5cXC9bXiddKlxcLihqc3x0cyknLyk7XG5cbiAgY29uc3QgcHJvdmlkZXJJbmRleCA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICBwYXRoLmpvaW4od29ya2RpciwgUFJPVklERVJfSU5ERVgpLFxuICAgIFwidXRmLThcIixcbiAgKTtcbiAgZXhwZWN0KHByb3ZpZGVySW5kZXgpLnRvTWF0Y2goL2Zyb20gJ1xcLlxcL1teJ10rXFwvaW5kZXgnOy8pO1xufSk7XG4iXX0=
@@ -239,7 +239,7 @@ onTf1_6AndNewer("generate module that can't be initialized", async () => {
239
239
  * Docs at Terraform Registry: {@link https://registry.terraform.io/modules/milliHQ/next-js/aws/1.0.0-canary.5 milliHQ/next-js/aws}
240
240
  */
241
241
  export class NextJs extends TerraformModule {
242
- private readonly inputs: { [name: string]: any } = { }
242
+ private readonly inputs: { [name: string]: any } = { };
243
243
  public constructor(scope: Construct, id: string, config: NextJsConfig = {}) {
244
244
  super(scope, id, {
245
245
  ...config,
@@ -423,34 +423,34 @@ onTf1_6AndNewer("generate module that can't be initialized", async () => {
423
423
  this.inputs['vpc_subnet_ids'] = value;
424
424
  }
425
425
  public get apiEndpointOutput() {
426
- return this.getString('api_endpoint')
426
+ return this.getString('api_endpoint');
427
427
  }
428
428
  public get apiEndpointAccessPolicyArnOutput() {
429
- return this.getString('api_endpoint_access_policy_arn')
429
+ return this.getString('api_endpoint_access_policy_arn');
430
430
  }
431
431
  public get cloudfrontCustomErrorResponseOutput() {
432
- return this.getString('cloudfront_custom_error_response')
432
+ return this.getString('cloudfront_custom_error_response');
433
433
  }
434
434
  public get cloudfrontDefaultCacheBehaviorOutput() {
435
- return this.getString('cloudfront_default_cache_behavior')
435
+ return this.getString('cloudfront_default_cache_behavior');
436
436
  }
437
437
  public get cloudfrontDefaultRootObjectOutput() {
438
- return this.getString('cloudfront_default_root_object')
438
+ return this.getString('cloudfront_default_root_object');
439
439
  }
440
440
  public get cloudfrontDomainNameOutput() {
441
- return this.getString('cloudfront_domain_name')
441
+ return this.getString('cloudfront_domain_name');
442
442
  }
443
443
  public get cloudfrontHostedZoneIdOutput() {
444
- return this.getString('cloudfront_hosted_zone_id')
444
+ return this.getString('cloudfront_hosted_zone_id');
445
445
  }
446
446
  public get cloudfrontOrderedCacheBehaviorsOutput() {
447
- return this.getString('cloudfront_ordered_cache_behaviors')
447
+ return this.getString('cloudfront_ordered_cache_behaviors');
448
448
  }
449
449
  public get cloudfrontOriginsOutput() {
450
- return this.getString('cloudfront_origins')
450
+ return this.getString('cloudfront_origins');
451
451
  }
452
452
  public get uploadBucketIdOutput() {
453
- return this.getString('upload_bucket_id')
453
+ return this.getString('upload_bucket_id');
454
454
  }
455
455
  protected synthesizeAttributes() {
456
456
  return this.inputs;
@@ -474,4 +474,4 @@ onTf1_6AndNewer("generate module that can't be initialized", async () => {
474
474
  "
475
475
  `);
476
476
  }, 120000);
477
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLWdlbmVyYXRvci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dldC9fX3Rlc3RzX18vZ2VuZXJhdG9yL21vZHVsZS1nZW5lcmF0b3IudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLDRDQUFxRTtBQUNyRSw2REFBeUQ7QUFDekQsa0NBQXNEO0FBQ3RELGlEQUF5QztBQUN6QyxrQ0FBMEM7QUFFMUMsTUFBTSxHQUFHLEdBQUcsSUFBQSxzQkFBZSxHQUFFLENBQUM7QUFFOUIsTUFBTSxlQUFlLEdBQUcsQ0FDdEIsSUFBWSxFQUNaLEVBQXVCLEVBQ3ZCLE9BQWdCLEVBQ2hCLEVBQUU7SUFDRixNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLElBQUksV0FBVyxDQUFDO0lBQzdFLE1BQU0sTUFBTSxHQUFHLElBQUEsd0JBQVEsRUFBQyxHQUFHLG1CQUFtQixnQkFBZ0IsQ0FBQyxDQUFDO0lBRWhFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztJQUVsRSxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkQsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsS0FB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QUFDO0lBQ0YsTUFBTSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUVuQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsWUFBWSxDQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxnQ0FBZ0MsQ0FBQyxFQUNwRCxPQUFPLENBQ1IsQ0FBQztJQUVGLG1GQUFtRjtJQUNuRiw4REFBOEQ7SUFDOUQsMkRBQTJEO0lBQzNELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXNXcEMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxFQUNELE1BQU0sQ0FDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgTGFuZ3VhZ2UsIFRlcnJhZm9ybU1vZHVsZUNvbnN0cmFpbnQgfSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IENvbnN0cnVjdHNNYWtlciB9IGZyb20gXCIuLi8uLi9jb25zdHJ1Y3RzLW1ha2VyXCI7XG5pbXBvcnQgeyBleHBlY3RNb2R1bGVUb01hdGNoU25hcHNob3QgfSBmcm9tIFwiLi4vdXRpbFwiO1xuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgY3JlYXRlVG1wSGVscGVyIH0gZnJvbSBcIi4uL3V0aWxcIjtcblxuY29uc3QgdG1wID0gY3JlYXRlVG1wSGVscGVyKCk7XG5cbmNvbnN0IG9uVGYxXzZBbmROZXdlciA9IChcbiAgbmFtZTogc3RyaW5nLFxuICBmbjogKCkgPT4gUHJvbWlzZTx2b2lkPixcbiAgdGltZW91dD86IG51bWJlcixcbikgPT4ge1xuICBjb25zdCB0ZXJyYWZvcm1CaW5hcnlOYW1lID0gcHJvY2Vzcy5lbnYuVEVSUkFGT1JNX0JJTkFSWV9OQU1FIHx8IFwidGVycmFmb3JtXCI7XG4gIGNvbnN0IG91dHB1dCA9IGV4ZWNTeW5jKGAke3RlcnJhZm9ybUJpbmFyeU5hbWV9IHZlcnNpb24gLWpzb25gKTtcblxuICBpZiAoIW91dHB1dCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBkZXRlcm1pbmUgVGVycmFmb3JtIHZlcnNpb25cIik7XG4gIH1cblxuICBjb25zdCB0ZlZlcnNpb24gPSBKU09OLnBhcnNlKG91dHB1dC50b1N0cmluZygpKS50ZXJyYWZvcm1fdmVyc2lvbjtcblxuICBjb25zdCBbbWFqb3IsIG1pbm9yXSA9IHRmVmVyc2lvbi50b1N0cmluZygpLnNwbGl0KFwiLlwiKTtcbiAgaWYgKE51bWJlcihtYWpvcikgPCAxIHx8IChOdW1iZXIobWFqb3IpID09PSAxICYmIE51bWJlcihtaW5vcikgPCA2KSkge1xuICAgIHRlc3Quc2tpcChcbiAgICAgIGAke25hbWV9IChyZXF1aXJlcyBUZXJyYWZvcm0gPj0gMS42LjA7IGJ1dCBpcyAke3RmVmVyc2lvbn0pYCxcbiAgICAgIGZuLFxuICAgICAgdGltZW91dCxcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRlc3QobmFtZSwgZm4sIHRpbWVvdXQpO1xuICB9XG59O1xuXG50ZXN0KFwiZ2VuZXJhdGUgc29tZSBtb2R1bGVzXCIsIGFzeW5jICgpID0+IHtcbiAgY29uc3Qgd29ya2RpciA9IHRtcChcIm1vZHVsZS1nZW5lcmF0b3IudGVzdFwiKTtcbiAgY29uc3QgY29uc3RyYWludCA9IG5ldyBUZXJyYWZvcm1Nb2R1bGVDb25zdHJhaW50KFxuICAgIFwidGVycmFmb3JtLWF3cy1tb2R1bGVzL2Vrcy9hd3NANy4wLjFcIixcbiAgKTtcblxuICBjb25zdCBtYWtlciA9IG5ldyBDb25zdHJ1Y3RzTWFrZXIoXG4gICAge1xuICAgICAgY29kZU1ha2VyT3V0cHV0OiB3b3JrZGlyLFxuICAgICAgdGFyZ2V0TGFuZ3VhZ2U6IExhbmd1YWdlLlRZUEVTQ1JJUFQsXG4gICAgfSxcbiAgICBwcm9jZXNzLmVudi5DREtURl9FWFBFUklNRU5UQUxfUFJPVklERVJfU0NIRU1BX0NBQ0hFX1BBVEgsXG4gICk7XG4gIGF3YWl0IG1ha2VyLmdlbmVyYXRlKFtjb25zdHJhaW50XSk7XG5cbiAgY29uc3Qgb3V0cHV0ID0gZnMucmVhZEZpbGVTeW5jKFxuICAgIHBhdGguam9pbih3b3JrZGlyLCBcIm1vZHVsZXMvdGVycmFmb3JtLWF3cy1tb2R1bGVzL2F3cy9la3MudHNcIiksXG4gICAgXCJ1dGYtOFwiLFxuICApO1xuICBleHBlY3Qob3V0cHV0KS50b01hdGNoU25hcHNob3QoKTtcbn0sIDEyMDAwMCk7XG5cbmV4cGVjdE1vZHVsZVRvTWF0Y2hTbmFwc2hvdChcIm5vIG1vZHVsZSBvdXRwdXRzXCIsIFwiZ2VuZXJhdG9yXCIsIFtcbiAgXCJtb2R1bGUtbm8tb3V0cHV0cy50ZXN0LmZpeHR1cmUudGZcIixcbl0pO1xuXG5leHBlY3RNb2R1bGVUb01hdGNoU25hcHNob3QoXCJ0eXBlbGVzcyB2YXJpYWJsZXNcIiwgXCJnZW5lcmF0b3JcIiwgW1xuICBcIm1vZHVsZS1uby12YXJpYWJsZS10eXBlLnRlc3QuZml4dHVyZS50ZlwiLFxuXSk7XG5cbmV4cGVjdE1vZHVsZVRvTWF0Y2hTbmFwc2hvdChcIm5vIG5ld2xpbmVcIiwgXCJnZW5lcmF0b3JcIiwgW1xuICBcIm1vZHVsZS1uby1uZXdsaW5lLTEudGVzdC5maXh0dXJlLnRmXCIsXG4gIFwibW9kdWxlLW5vLW5ld2xpbmUtMi50ZXN0LmZpeHR1cmUudGZcIixcbl0pO1xuXG50ZXN0KFwiZ2VuZXJhdGUgbXVsdGlwbGUgYXdzIG1vZHVsZXNcIiwgYXN5bmMgKCkgPT4ge1xuICBqZXN0LnNldFRpbWVvdXQoMTIwMDAwKTtcblxuICBjb25zdCB3b3JrZGlyID0gdG1wKFwibW9kdWxlLWdlbmVyYXRvci1hd3MudGVzdFwiKTtcbiAgY29uc3QgY29uc3RyYWludHMgPSBbXG4gICAgbmV3IFRlcnJhZm9ybU1vZHVsZUNvbnN0cmFpbnQoXCJ0ZXJyYWZvcm0tYXdzLW1vZHVsZXMvdnBjL2F3c0AyLjc4LjBcIiksXG4gICAgbmV3IFRlcnJhZm9ybU1vZHVsZUNvbnN0cmFpbnQoXCJ0ZXJyYWZvcm0tYXdzLW1vZHVsZXMvcmRzLWF1cm9yYS9hd3NANC4xLjBcIiksXG4gIF07XG5cbiAgY29uc3QgbWFrZXIgPSBuZXcgQ29uc3RydWN0c01ha2VyKFxuICAgIHtcbiAgICAgIGNvZGVNYWtlck91dHB1dDogd29ya2RpcixcbiAgICAgIHRhcmdldExhbmd1YWdlOiBMYW5ndWFnZS5UWVBFU0NSSVBULFxuICAgIH0sXG4gICAgcHJvY2Vzcy5lbnYuQ0RLVEZfRVhQRVJJTUVOVEFMX1BST1ZJREVSX1NDSEVNQV9DQUNIRV9QQVRILFxuICApO1xuICBhd2FpdCBtYWtlci5nZW5lcmF0ZShjb25zdHJhaW50cyk7XG5cbiAgY29uc3QgdnBjT3V0cHV0ID0gZnMucmVhZEZpbGVTeW5jKFxuICAgIHBhdGguam9pbih3b3JrZGlyLCBcIm1vZHVsZXMvdGVycmFmb3JtLWF3cy1tb2R1bGVzL2F3cy92cGMudHNcIiksXG4gICAgXCJ1dGYtOFwiLFxuICApO1xuICBleHBlY3QodnBjT3V0cHV0KS50b01hdGNoU25hcHNob3QoKTtcblxuICBjb25zdCByZHNPdXRwdXQgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgcGF0aC5qb2luKHdvcmtkaXIsIFwibW9kdWxlcy90ZXJyYWZvcm0tYXdzLW1vZHVsZXMvYXdzL3Jkcy1hdXJvcmEudHNcIiksXG4gICAgXCJ1dGYtOFwiLFxuICApO1xuICBleHBlY3QocmRzT3V0cHV0KS50b01hdGNoU25hcHNob3QoKTtcbn0sIDEyMDAwMCk7XG5cbnRlc3QoXCJnZW5lcmF0ZSBuZXN0ZWQgbW9kdWxlXCIsIGFzeW5jICgpID0+IHtcbiAgY29uc3Qgd29ya2RpciA9IHRtcChcIm1vZHVsZS1nZW5lcmF0b3ItbmVzdGVkLnRlc3RcIik7XG4gIGNvbnN0IGNvbnN0cmFpbnQgPSBuZXcgVGVycmFmb3JtTW9kdWxlQ29uc3RyYWludChcbiAgICBcInRlcnJhZm9ybS1hd3MtbW9kdWxlcy92cGMvYXdzLy9tb2R1bGVzL3ZwYy1lbmRwb2ludHNAMy4xOS4wXCIsXG4gICk7XG5cbiAgY29uc3QgbWFrZXIgPSBuZXcgQ29uc3RydWN0c01ha2VyKFxuICAgIHtcbiAgICAgIGNvZGVNYWtlck91dHB1dDogd29ya2RpcixcbiAgICAgIHRhcmdldExhbmd1YWdlOiBMYW5ndWFnZS5UWVBFU0NSSVBULFxuICAgIH0sXG4gICAgcHJvY2Vzcy5lbnYuQ0RLVEZfRVhQRVJJTUVOVEFMX1BST1ZJREVSX1NDSEVNQV9DQUNIRV9QQVRILFxuICApO1xuICBhd2FpdCBtYWtlci5nZW5lcmF0ZShbY29uc3RyYWludF0pO1xuXG4gIGNvbnN0IG91dHB1dCA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICBwYXRoLmpvaW4oXG4gICAgICB3b3JrZGlyLFxuICAgICAgXCJtb2R1bGVzL3RlcnJhZm9ybS1hd3MtbW9kdWxlcy9hd3MvdnBjL21vZHVsZXMvdnBjLWVuZHBvaW50cy50c1wiLFxuICAgICksXG4gICAgXCJ1dGYtOFwiLFxuICApO1xuICBleHBlY3Qob3V0cHV0KS50b01hdGNoU25hcHNob3QoKTtcbn0sIDEyMDAwMCk7XG5cbmV4cGVjdE1vZHVsZVRvTWF0Y2hTbmFwc2hvdChcImdldFggdmFyaWFibGVzXCIsIFwiZ2VuZXJhdG9yXCIsIFtcbiAgXCJtb2R1bGUtZ2V0LXgudGVzdC5maXh0dXJlLnRmXCIsXG5dKTtcblxuZXhwZWN0TW9kdWxlVG9NYXRjaFNuYXBzaG90KFxuICBcImhhbmRsZSAqLyogaW4gbW9kdWxlIHZhcmlhYmxlIGRlZmF1bHQgc3RyaW5nXCIsXG4gIFwiZ2VuZXJhdG9yXCIsXG4gIFtcIm1vZHVsZS13aXRoLXN0YXItZGVmYXVsdC50ZXN0LmZpeHR1cmUudGZcIl0sXG4pO1xuXG5vblRmMV82QW5kTmV3ZXIoXG4gIFwiZ2VuZXJhdGUgbW9kdWxlIHRoYXQgY2FuJ3QgYmUgaW5pdGlhbGl6ZWRcIixcbiAgYXN5bmMgKCkgPT4ge1xuICAgIGplc3Quc2V0VGltZW91dCgxMjAwMDApO1xuXG4gICAgY29uc3Qgd29ya2RpciA9IHRtcChcIm1vZHVsZS1nZW5lcmF0b3IudGVzdC1uby1pbml0XCIpO1xuICAgIGNvbnN0IGNvbnN0cmFpbnQgPSBuZXcgVGVycmFmb3JtTW9kdWxlQ29uc3RyYWludChcbiAgICAgIFwibWlsbGlIUS9uZXh0LWpzL2F3c0AxLjAuMC1jYW5hcnkuNVwiLFxuICAgICk7XG5cbiAgICBjb25zdCBtYWtlciA9IG5ldyBDb25zdHJ1Y3RzTWFrZXIoXG4gICAgICB7XG4gICAgICAgIGNvZGVNYWtlck91dHB1dDogd29ya2RpcixcbiAgICAgICAgdGFyZ2V0TGFuZ3VhZ2U6IExhbmd1YWdlLlRZUEVTQ1JJUFQsXG4gICAgICB9LFxuICAgICAgcHJvY2Vzcy5lbnYuQ0RLVEZfRVhQRVJJTUVOVEFMX1BST1ZJREVSX1NDSEVNQV9DQUNIRV9QQVRILFxuICAgICk7XG4gICAgYXdhaXQgbWFrZXIuZ2VuZXJhdGUoW2NvbnN0cmFpbnRdKTtcblxuICAgIGNvbnN0IG91dHB1dCA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgIHBhdGguam9pbih3b3JrZGlyLCBcIm1vZHVsZXMvbWlsbGlIUS9hd3MvbmV4dC1qcy50c1wiKSxcbiAgICAgIFwidXRmLThcIixcbiAgICApO1xuXG4gICAgLy8geWVzLCB0aGlzIGlzIGEgbG90IG9mIGNvZGUsIGJ1dCB0aGlzIHRlc3QgaXMgc2tpcHBlZCBmb3Igc29tZSBUZXJyYWZvcm0gdmVyc2lvbnNcbiAgICAvLyB3aGljaCB0aGVuIHNob3dzIHNuYXBzaG90cyBhcyBvYnNvbGV0ZSB3aGljaCBmYWlscyB0aGUgdGVzdFxuICAgIC8vIHRoaXMgd2F5LCB0aGVyZSdzIG5vIHN1Y2ggcHJvYmxlbSBpZiB0aGUgdGVzdCBpcyBza2lwcGVkXG4gICAgZXhwZWN0KG91dHB1dCkudG9NYXRjaElubGluZVNuYXBzaG90KGBcbiAgICAgIFwiLy8gZ2VuZXJhdGVkIGJ5IGNka3RuIGdldFxuICAgICAgLy8gbWlsbGlIUS9uZXh0LWpzL2F3c1xuICAgICAgaW1wb3J0IHsgVGVycmFmb3JtTW9kdWxlLCB0eXBlIFRlcnJhZm9ybU1vZHVsZVVzZXJDb25maWcgfSBmcm9tICdjZGt0bic7XG4gICAgICBpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbiAgICAgIGV4cG9ydCBpbnRlcmZhY2UgTmV4dEpzQ29uZmlnIGV4dGVuZHMgVGVycmFmb3JtTW9kdWxlVXNlckNvbmZpZyB7XG4gICAgICAgIC8qKlxuICAgICAgICAqIEFDTSBjZXJ0aWZpY2F0ZSBhcm4gZm9yIGN1c3RvbV9kb21haW5cbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgY2xvdWRmcm9udEFjbUNlcnRpZmljYXRlQXJuPzogc3RyaW5nO1xuICAgICAgICAvKipcbiAgICAgICAgKiBBbGlhc2VzIGZvciBjdXN0b21fZG9tYWluXG4gICAgICAgICpcbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgY2xvdWRmcm9udEFsaWFzZXM/OiBzdHJpbmdbXTtcbiAgICAgICAgLyoqXG4gICAgICAgICogSGVhZGVyIGtleXMgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGNhY2hlIGtleSBpbiBDbG91ZEZyb250LlxuICAgICAgICAqIEF1dGhvcml6YXRpb25cbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgY2xvdWRmcm9udENhY2hlS2V5SGVhZGVycz86IHN0cmluZ1tdO1xuICAgICAgICAvKipcbiAgICAgICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBtYWluIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHNob3VsZCBiZSBjcmVhdGVkLlxuICAgICAgICAqIHRydWVcbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgY2xvdWRmcm9udENyZWF0ZURpc3RyaWJ1dGlvbj86IGJvb2xlYW47XG4gICAgICAgIC8qKlxuICAgICAgICAqIFdoZW4gdXNpbmcgYW4gZXh0ZXJuYWwgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gcHJvdmlkZSBpdHMgYXJuLlxuICAgICAgICAqL1xuICAgICAgICByZWFkb25seSBjbG91ZGZyb250RXh0ZXJuYWxBcm4/OiBzdHJpbmc7XG4gICAgICAgIC8qKlxuICAgICAgICAqIFdoZW4gdXNpbmcgYW4gZXh0ZXJuYWwgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gcHJvdmlkZSBpdHMgaWQuXG4gICAgICAgICovXG4gICAgICAgIHJlYWRvbmx5IGNsb3VkZnJvbnRFeHRlcm5hbElkPzogc3RyaW5nO1xuICAgICAgICAvKipcbiAgICAgICAgKiBUaGUgbWluaW11bSB2ZXJzaW9uIG9mIHRoZSBTU0wgcHJvdG9jb2wgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHVzZSBmb3IgSFRUUFMgY29ubmVjdGlvbnMuIE9uZSBvZiBTU0x2MywgVExTdjEsIFRMU3YxXzIwMTYsIFRMU3YxLjFfMjAxNiwgVExTdjEuMl8yMDE4IG9yIFRMU3YxLjJfMjAxOS5cbiAgICAgICAgKiBUTFN2MVxuICAgICAgICAqL1xuICAgICAgICByZWFkb25seSBjbG91ZGZyb250TWluaW11bVByb3RvY29sVmVyc2lvbj86IHN0cmluZztcbiAgICAgICAgLyoqXG4gICAgICAgICogSWQgb2YgYSBjdXN0b20gcmVxdWVzdCBwb2xpY3kgdGhhdCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgcG9saWN5IChBbGxWaWV3ZXIpLiBDYW4gYmUgY3VzdG9tIG9yIG1hbmFnZWQuXG4gICAgICAgICovXG4gICAgICAgIHJlYWRvbmx5IGNsb3VkZnJvbnRPcmlnaW5SZXF1ZXN0UG9saWN5Pzogc3RyaW5nO1xuICAgICAgICAvKipcbiAgICAgICAgKiBQcmljZSBjbGFzcyBmb3IgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9ucyAobWFpbiAmIHByb3h5IGNvbmZpZykuIE9uZSBvZiBQcmljZUNsYXNzX0FsbCwgUHJpY2VDbGFzc18yMDAsIFByaWNlQ2xhc3NfMTAwLlxuICAgICAgICAqIFByaWNlQ2xhc3NfMTAwXG4gICAgICAgICovXG4gICAgICAgIHJlYWRvbmx5IGNsb3VkZnJvbnRQcmljZUNsYXNzPzogc3RyaW5nO1xuICAgICAgICAvKipcbiAgICAgICAgKiBJZCBvZiBhIHJlc3BvbnNlIGhlYWRlcnMgcG9saWN5LiBDYW4gYmUgY3VzdG9tIG9yIG1hbmFnZWQuIERlZmF1bHQgaXMgZW1wdHkuXG4gICAgICAgICovXG4gICAgICAgIHJlYWRvbmx5IGNsb3VkZnJvbnRSZXNwb25zZUhlYWRlcnNQb2xpY3k/OiBzdHJpbmc7XG4gICAgICAgIC8qKlxuICAgICAgICAqIEFuIG9wdGlvbmFsIHdlYmFjbDIgYXJuIG9yIHdlYmFjbCBpZCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgY2xvdWRmcm9udCBkaXN0cmlidXRpb25cbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgY2xvdWRmcm9udFdlYmFjbElkPzogc3RyaW5nO1xuICAgICAgICAvKipcbiAgICAgICAgKiBDb250cm9scyB3aGV0aGVyIHJlc291cmNlcyBmb3IgaW1hZ2Ugb3B0aW1pemF0aW9uIHN1cHBvcnQgc2hvdWxkIGJlIGNyZWF0ZWQgb3Igbm90LlxuICAgICAgICAqIHRydWVcbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgY3JlYXRlSW1hZ2VPcHRpbWl6YXRpb24/OiBib29sZWFuO1xuICAgICAgICAvKipcbiAgICAgICAgKiBVc2UgbG9jYWxseSBidWlsdCBwYWNrYWdlcyByYXRoZXIgdGhhbiBkb3dubG9hZCB0aGVtIGZyb20gbnBtLlxuICAgICAgICAqL1xuICAgICAgICByZWFkb25seSBkZWJ1Z1VzZUxvY2FsUGFja2FnZXM/OiBib29sZWFuO1xuICAgICAgICAvKipcbiAgICAgICAgKiBJZGVudGlmaWVyIGZvciB0aGUgZGVwbG95bWVudCBncm91cCAob25seSBsb3dlcmNhc2UgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5kIGh5cGhlbnMgYXJlIGFsbG93ZWQpLlxuICAgICAgICAqIHRmLW5leHRcbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgZGVwbG95bWVudE5hbWU/OiBzdHJpbmc7XG4gICAgICAgIC8qKlxuICAgICAgICAqIENvbnRyb2xzIHdoZXRoZXIgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHJ1biBtdWx0aXBsZSBkZXBsb3ltZW50cyBpbiBwYXJhbGxlbCAocmVxdWlyZXMgbXVsdGlwbGVfZGVwbG95bWVudHNfYmFzZV9kb21haW4pLlxuICAgICAgICAqL1xuICAgICAgICByZWFkb25seSBlbmFibGVNdWx0aXBsZURlcGxveW1lbnRzPzogYm9vbGVhbjtcbiAgICAgICAgLyoqXG4gICAgICAgICogQW1vdW50IG9mIG1lbW9yeSBpbiBNQiB0aGUgd29ya2VyIExhbWJkYSBGdW5jdGlvbiBmb3IgaW1hZ2Ugb3B0aW1pemF0aW9uIGNhbiB1c2UuIFZhbGlkIHZhbHVlIGJldHdlZW4gMTI4IE1CIHRvIDEwLDI0MCBNQiwgaW4gMSBNQiBpbmNyZW1lbnRzLlxuICAgICAgICAqIDIsMDQ4XG4gICAgICAgICovXG4gICAgICAgIHJlYWRvbmx5IGltYWdlT3B0aW1pemF0aW9uTGFtYmRhTWVtb3J5U2l6ZT86IG51bWJlcjtcbiAgICAgICAgLyoqXG4gICAgICAgICogV2hldGhlciB0byBkZXBsb3kgYWRkaXRpb25hbCBsYW1iZGEgSlNPTiBwb2xpY2llcy4gSWYgZmFsc2UsIGxhbWJkYV9wb2xpY3lfanNvbiB3aWxsIG5vdCBiZSBhdHRhY2hlZCB0byB0aGUgbGFtYmRhIGZ1bmN0aW9uLiAoTmVjZXNzYXJ5IHNpbmNlIHBvbGljeSBzdHJpbmdzIGFyZSBvbmx5IGtub3duIGFmdGVyIGFwcGx5IHdoZW4gdXNpbmcgVGVycmFmb3JtcyBkYXRhLmF3c19pYW1fcG9saWN5X2RvY3VtZW50KVxuICAgICAgICAqL1xuICAgICAgICByZWFkb25seSBsYW1iZGFBdHRhY2hQb2xpY3lKc29uPzogYm9vbGVhbjtcbiAgICAgICAgLyoqXG4gICAgICAgICogU2V0IHRvIHRydWUgaWYgdGhlIExhbWJkYSBmdW5jdGlvbnMgc2hvdWxkIGJlIGF0dGFjaGVkIHRvIGEgVlBDLiBVc2UgdGhpcyBzZXR0aW5nIGlmIFZQQyByZXNvdXJjZXMgc2hvdWxkIGJlIGFjY2Vzc2VkIGJ5IHRoZSBMYW1iZGEgZnVuY3Rpb25zLiBXaGVuIHNldHRpbmcgdGhpcyB0byB0cnVlLCB1c2UgdnBjX3NlY3VyaXR5X2dyb3VwX2lkcyBhbmQgdnBjX3N1Ym5ldF9pZHMgdG8gc3BlY2lmeSB0aGUgVlBDIG5ldHdvcmtpbmcuIE5vdGUgdGhhdCBhdHRhY2hpbmcgdG8gYSBWUEMgd291bGQgaW50cm9kdWNlIGEgZGVsYXkgb24gdG8gY29sZCBzdGFydHNcbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgbGFtYmRhQXR0YWNoVG9WcGM/OiBib29sZWFuO1xuICAgICAgICAvKipcbiAgICAgICAgKiBBZGRpdGlvbmFsIHBvbGljeSBkb2N1bWVudCBhcyBKU09OIHRvIGF0dGFjaCB0byB0aGUgTGFtYmRhIEZ1bmN0aW9uIHJvbGVcbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgbGFtYmRhUG9saWN5SnNvbj86IHN0cmluZztcbiAgICAgICAgLyoqXG4gICAgICAgICogQVJOIG9mIElBTSBwb2xpY3kgdGhhdCBzY29wZXMgYXdzX2lhbV9yb2xlIGFjY2VzcyBmb3IgdGhlIGxhbWJkYVxuICAgICAgICAqL1xuICAgICAgICByZWFkb25seSBsYW1iZGFSb2xlUGVybWlzc2lvbnNCb3VuZGFyeT86IHN0cmluZztcbiAgICAgICAgLyoqXG4gICAgICAgICogRGVmYXVsdCB3aWxkY2FyZCBkb21haW4gd2hlcmUgbmV3IGRlcGxveW1lbnRzIHNob3VsZCBiZSBhdmFpbGFibGUuIFNob3VsZCBiZSBpbiB0aGUgZm9ybSBvZiAqLmV4YW1wbGUuY29tLlxuICAgICAgICAqL1xuICAgICAgICByZWFkb25seSBtdWx0aXBsZURlcGxveW1lbnRzQmFzZURvbWFpbj86IHN0cmluZztcbiAgICAgICAgLyoqXG4gICAgICAgICogVGFnIG1ldGFkYXRhIHRvIGxhYmVsIEFXUyByZXNvdXJjZXMgdGhhdCBzdXBwb3J0IHRhZ3MuXG4gICAgICAgICogVGhlIHByb3BlcnR5IHR5cGUgY29udGFpbnMgYSBtYXAsIHRoZXkgaGF2ZSBzcGVjaWFsIGhhbmRsaW5nLCBwbGVhc2Ugc2VlIHtAbGluayBjZGsudGYvbW9kdWxlLW1hcC1pbnB1dHMgdGhlIGRvY3N9XG4gICAgICAgICovXG4gICAgICAgIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAgICAgICAvKipcbiAgICAgICAgKiBUYWcgbWV0YWRhdGEgdG8gbGFiZWwgQVdTIFMzIGJ1Y2tldHMuIE92ZXJyaWRlcyB0YWdzIHdpdGggdGhlIHNhbWUgbmFtZSBpbiBpbnB1dCB2YXJpYWJsZSB0YWdzLlxuICAgICAgICAqIFRoZSBwcm9wZXJ0eSB0eXBlIGNvbnRhaW5zIGEgbWFwLCB0aGV5IGhhdmUgc3BlY2lhbCBoYW5kbGluZywgcGxlYXNlIHNlZSB7QGxpbmsgY2RrLnRmL21vZHVsZS1tYXAtaW5wdXRzIHRoZSBkb2NzfVxuICAgICAgICAqL1xuICAgICAgICByZWFkb25seSB0YWdzUzNCdWNrZXQ/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAgICAgICAvKipcbiAgICAgICAgKiBUaGUgbGlzdCBvZiBTZWN1cml0eSBHcm91cCBJRHMgdG8gYmUgdXNlZCBieSB0aGUgTGFtYmRhIGZ1bmN0aW9ucy4gbGFtYmRhX2F0dGFjaF90b192cGMgc2hvdWxkIGJlIHNldCB0byB0cnVlIGZvciB0aGVzZSB0byBiZSBhcHBsaWVkLlxuICAgICAgICAqXG4gICAgICAgICovXG4gICAgICAgIHJlYWRvbmx5IHZwY1NlY3VyaXR5R3JvdXBJZHM/OiBzdHJpbmdbXTtcbiAgICAgICAgLyoqXG4gICAgICAgICogVGhlIGxpc3Qgb2YgVlBDIHN1Ym5ldCBJRHMgdG8gYXR0YWNoIHRoZSBMYW1iZGEgZnVuY3Rpb25zLiBsYW1iZGFfYXR0YWNoX3RvX3ZwYyBzaG91bGQgYmUgc2V0IHRvIHRydWUgZm9yIHRoZXNlIHRvIGJlIGFwcGxpZWQuXG4gICAgICAgICpcbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgdnBjU3VibmV0SWRzPzogc3RyaW5nW107XG4gICAgICB9XG4gICAgICAvKipcbiAgICAgICogRGVmaW5lcyBhbiBOZXh0SnMgYmFzZWQgb24gYSBUZXJyYWZvcm0gbW9kdWxlXG4gICAgICAqXG4gICAgICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vbW9kdWxlcy9taWxsaUhRL25leHQtanMvYXdzLzEuMC4wLWNhbmFyeS41IG1pbGxpSFEvbmV4dC1qcy9hd3N9XG4gICAgICAqL1xuICAgICAgZXhwb3J0IGNsYXNzIE5leHRKcyBleHRlbmRzIFRlcnJhZm9ybU1vZHVsZSB7XG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW5wdXRzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSA9IHsgfVxuICAgICAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY29uZmlnOiBOZXh0SnNDb25maWcgPSB7fSkge1xuICAgICAgICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgc291cmNlOiAnbWlsbGlIUS9uZXh0LWpzL2F3cycsXG4gICAgICAgICAgICB2ZXJzaW9uOiAnMS4wLjAtY2FuYXJ5LjUnLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY2xvdWRmcm9udEFjbUNlcnRpZmljYXRlQXJuID0gY29uZmlnLmNsb3VkZnJvbnRBY21DZXJ0aWZpY2F0ZUFybjtcbiAgICAgICAgICB0aGlzLmNsb3VkZnJvbnRBbGlhc2VzID0gY29uZmlnLmNsb3VkZnJvbnRBbGlhc2VzO1xuICAgICAgICAgIHRoaXMuY2xvdWRmcm9udENhY2hlS2V5SGVhZGVycyA9IGNvbmZpZy5jbG91ZGZyb250Q2FjaGVLZXlIZWFkZXJzO1xuICAgICAgICAgIHRoaXMuY2xvdWRmcm9udENyZWF0ZURpc3RyaWJ1dGlvbiA9IGNvbmZpZy5jbG91ZGZyb250Q3JlYXRlRGlzdHJpYnV0aW9uO1xuICAgICAgICAgIHRoaXMuY2xvdWRmcm9udEV4dGVybmFsQXJuID0gY29uZmlnLmNsb3VkZnJvbnRFeHRlcm5hbEFybjtcbiAgICAgICAgICB0aGlzLmNsb3VkZnJvbnRFeHRlcm5hbElkID0gY29uZmlnLmNsb3VkZnJvbnRFeHRlcm5hbElkO1xuICAgICAgICAgIHRoaXMuY2xvdWRmcm9udE1pbmltdW1Qcm90b2NvbFZlcnNpb24gPSBjb25maWcuY2xvdWRmcm9udE1pbmltdW1Qcm90b2NvbFZlcnNpb247XG4gICAgICAgICAgdGhpcy5jbG91ZGZyb250T3JpZ2luUmVxdWVzdFBvbGljeSA9IGNvbmZpZy5jbG91ZGZyb250T3JpZ2luUmVxdWVzdFBvbGljeTtcbiAgICAgICAgICB0aGlzLmNsb3VkZnJvbnRQcmljZUNsYXNzID0gY29uZmlnLmNsb3VkZnJvbnRQcmljZUNsYXNzO1xuICAgICAgICAgIHRoaXMuY2xvdWRmcm9udFJlc3BvbnNlSGVhZGVyc1BvbGljeSA9IGNvbmZpZy5jbG91ZGZyb250UmVzcG9uc2VIZWFkZXJzUG9saWN5O1xuICAgICAgICAgIHRoaXMuY2xvdWRmcm9udFdlYmFjbElkID0gY29uZmlnLmNsb3VkZnJvbnRXZWJhY2xJZDtcbiAgICAgICAgICB0aGlzLmNyZWF0ZUltYWdlT3B0aW1pemF0aW9uID0gY29uZmlnLmNyZWF0ZUltYWdlT3B0aW1pemF0aW9uO1xuICAgICAgICAgIHRoaXMuZGVidWdVc2VMb2NhbFBhY2thZ2VzID0gY29uZmlnLmRlYnVnVXNlTG9jYWxQYWNrYWdlcztcbiAgICAgICAgICB0aGlzLmRlcGxveW1lbnROYW1lID0gY29uZmlnLmRlcGxveW1lbnROYW1lO1xuICAgICAgICAgIHRoaXMuZW5hYmxlTXVsdGlwbGVEZXBsb3ltZW50cyA9IGNvbmZpZy5lbmFibGVNdWx0aXBsZURlcGxveW1lbnRzO1xuICAgICAgICAgIHRoaXMuaW1hZ2VPcHRpbWl6YXRpb25MYW1iZGFNZW1vcnlTaXplID0gY29uZmlnLmltYWdlT3B0aW1pemF0aW9uTGFtYmRhTWVtb3J5U2l6ZTtcbiAgICAgICAgICB0aGlzLmxhbWJkYUF0dGFjaFBvbGljeUpzb24gPSBjb25maWcubGFtYmRhQXR0YWNoUG9saWN5SnNvbjtcbiAgICAgICAgICB0aGlzLmxhbWJkYUF0dGFjaFRvVnBjID0gY29uZmlnLmxhbWJkYUF0dGFjaFRvVnBjO1xuICAgICAgICAgIHRoaXMubGFtYmRhUG9saWN5SnNvbiA9IGNvbmZpZy5sYW1iZGFQb2xpY3lKc29uO1xuICAgICAgICAgIHRoaXMubGFtYmRhUm9sZVBlcm1pc3Npb25zQm91bmRhcnkgPSBjb25maWcubGFtYmRhUm9sZVBlcm1pc3Npb25zQm91bmRhcnk7XG4gICAgICAgICAgdGhpcy5tdWx0aXBsZURlcGxveW1lbnRzQmFzZURvbWFpbiA9IGNvbmZpZy5tdWx0aXBsZURlcGxveW1lbnRzQmFzZURvbWFpbjtcbiAgICAgICAgICB0aGlzLnRhZ3MgPSBjb25maWcudGFncztcbiAgICAgICAgICB0aGlzLnRhZ3NTM0J1Y2tldCA9IGNvbmZpZy50YWdzUzNCdWNrZXQ7XG4gICAgICAgICAgdGhpcy52cGNTZWN1cml0eUdyb3VwSWRzID0gY29uZmlnLnZwY1NlY3VyaXR5R3JvdXBJZHM7XG4gICAgICAgICAgdGhpcy52cGNTdWJuZXRJZHMgPSBjb25maWcudnBjU3VibmV0SWRzO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgY2xvdWRmcm9udEFjbUNlcnRpZmljYXRlQXJuKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRzWydjbG91ZGZyb250X2FjbV9jZXJ0aWZpY2F0ZV9hcm4nXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCBjbG91ZGZyb250QWNtQ2VydGlmaWNhdGVBcm4odmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW5wdXRzWydjbG91ZGZyb250X2FjbV9jZXJ0aWZpY2F0ZV9hcm4nXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgY2xvdWRmcm9udEFsaWFzZXMoKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9hbGlhc2VzJ10gYXMgc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCBjbG91ZGZyb250QWxpYXNlcyh2YWx1ZTogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9hbGlhc2VzJ10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGNsb3VkZnJvbnRDYWNoZUtleUhlYWRlcnMoKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9jYWNoZV9rZXlfaGVhZGVycyddIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBzZXQgY2xvdWRmcm9udENhY2hlS2V5SGVhZGVycyh2YWx1ZTogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9jYWNoZV9rZXlfaGVhZGVycyddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBjbG91ZGZyb250Q3JlYXRlRGlzdHJpYnV0aW9uKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9jcmVhdGVfZGlzdHJpYnV0aW9uJ10gYXMgYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgc2V0IGNsb3VkZnJvbnRDcmVhdGVEaXN0cmlidXRpb24odmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9jcmVhdGVfZGlzdHJpYnV0aW9uJ10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGNsb3VkZnJvbnRFeHRlcm5hbEFybigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9leHRlcm5hbF9hcm4nXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCBjbG91ZGZyb250RXh0ZXJuYWxBcm4odmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW5wdXRzWydjbG91ZGZyb250X2V4dGVybmFsX2FybiddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBjbG91ZGZyb250RXh0ZXJuYWxJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9leHRlcm5hbF9pZCddIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgc2V0IGNsb3VkZnJvbnRFeHRlcm5hbElkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9leHRlcm5hbF9pZCddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBjbG91ZGZyb250TWluaW11bVByb3RvY29sVmVyc2lvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9taW5pbXVtX3Byb3RvY29sX3ZlcnNpb24nXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCBjbG91ZGZyb250TWluaW11bVByb3RvY29sVmVyc2lvbih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5pbnB1dHNbJ2Nsb3VkZnJvbnRfbWluaW11bV9wcm90b2NvbF92ZXJzaW9uJ10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGNsb3VkZnJvbnRPcmlnaW5SZXF1ZXN0UG9saWN5KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRzWydjbG91ZGZyb250X29yaWdpbl9yZXF1ZXN0X3BvbGljeSddIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgc2V0IGNsb3VkZnJvbnRPcmlnaW5SZXF1ZXN0UG9saWN5KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9vcmlnaW5fcmVxdWVzdF9wb2xpY3knXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgY2xvdWRmcm9udFByaWNlQ2xhc3MoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dHNbJ2Nsb3VkZnJvbnRfcHJpY2VfY2xhc3MnXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCBjbG91ZGZyb250UHJpY2VDbGFzcyh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5pbnB1dHNbJ2Nsb3VkZnJvbnRfcHJpY2VfY2xhc3MnXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgY2xvdWRmcm9udFJlc3BvbnNlSGVhZGVyc1BvbGljeSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9yZXNwb25zZV9oZWFkZXJzX3BvbGljeSddIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgc2V0IGNsb3VkZnJvbnRSZXNwb25zZUhlYWRlcnNQb2xpY3kodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW5wdXRzWydjbG91ZGZyb250X3Jlc3BvbnNlX2hlYWRlcnNfcG9saWN5J10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGNsb3VkZnJvbnRXZWJhY2xJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1snY2xvdWRmcm9udF93ZWJhY2xfaWQnXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCBjbG91ZGZyb250V2ViYWNsSWQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW5wdXRzWydjbG91ZGZyb250X3dlYmFjbF9pZCddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBjcmVhdGVJbWFnZU9wdGltaXphdGlvbigpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dHNbJ2NyZWF0ZV9pbWFnZV9vcHRpbWl6YXRpb24nXSBhcyBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBzZXQgY3JlYXRlSW1hZ2VPcHRpbWl6YXRpb24odmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1snY3JlYXRlX2ltYWdlX29wdGltaXphdGlvbiddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBkZWJ1Z1VzZUxvY2FsUGFja2FnZXMoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRzWydkZWJ1Z191c2VfbG9jYWxfcGFja2FnZXMnXSBhcyBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBzZXQgZGVidWdVc2VMb2NhbFBhY2thZ2VzKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5pbnB1dHNbJ2RlYnVnX3VzZV9sb2NhbF9wYWNrYWdlcyddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBkZXBsb3ltZW50TmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1snZGVwbG95bWVudF9uYW1lJ10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBzZXQgZGVwbG95bWVudE5hbWUodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW5wdXRzWydkZXBsb3ltZW50X25hbWUnXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgZW5hYmxlTXVsdGlwbGVEZXBsb3ltZW50cygpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dHNbJ2VuYWJsZV9tdWx0aXBsZV9kZXBsb3ltZW50cyddIGFzIGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCBlbmFibGVNdWx0aXBsZURlcGxveW1lbnRzKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5pbnB1dHNbJ2VuYWJsZV9tdWx0aXBsZV9kZXBsb3ltZW50cyddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBpbWFnZU9wdGltaXphdGlvbkxhbWJkYU1lbW9yeVNpemUoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dHNbJ2ltYWdlX29wdGltaXphdGlvbl9sYW1iZGFfbWVtb3J5X3NpemUnXSBhcyBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCBpbWFnZU9wdGltaXphdGlvbkxhbWJkYU1lbW9yeVNpemUodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW5wdXRzWydpbWFnZV9vcHRpbWl6YXRpb25fbGFtYmRhX21lbW9yeV9zaXplJ10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGxhbWJkYUF0dGFjaFBvbGljeUpzb24oKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRzWydsYW1iZGFfYXR0YWNoX3BvbGljeV9qc29uJ10gYXMgYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgc2V0IGxhbWJkYUF0dGFjaFBvbGljeUpzb24odmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1snbGFtYmRhX2F0dGFjaF9wb2xpY3lfanNvbiddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBsYW1iZGFBdHRhY2hUb1ZwYygpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dHNbJ2xhbWJkYV9hdHRhY2hfdG9fdnBjJ10gYXMgYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgc2V0IGxhbWJkYUF0dGFjaFRvVnBjKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5pbnB1dHNbJ2xhbWJkYV9hdHRhY2hfdG9fdnBjJ10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGxhbWJkYVBvbGljeUpzb24oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dHNbJ2xhbWJkYV9wb2xpY3lfanNvbiddIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgc2V0IGxhbWJkYVBvbGljeUpzb24odmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW5wdXRzWydsYW1iZGFfcG9saWN5X2pzb24nXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgbGFtYmRhUm9sZVBlcm1pc3Npb25zQm91bmRhcnkoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dHNbJ2xhbWJkYV9yb2xlX3Blcm1pc3Npb25zX2JvdW5kYXJ5J10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBzZXQgbGFtYmRhUm9sZVBlcm1pc3Npb25zQm91bmRhcnkodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW5wdXRzWydsYW1iZGFfcm9sZV9wZXJtaXNzaW9uc19ib3VuZGFyeSddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBtdWx0aXBsZURlcGxveW1lbnRzQmFzZURvbWFpbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1snbXVsdGlwbGVfZGVwbG95bWVudHNfYmFzZV9kb21haW4nXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCBtdWx0aXBsZURlcGxveW1lbnRzQmFzZURvbWFpbih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5pbnB1dHNbJ211bHRpcGxlX2RlcGxveW1lbnRzX2Jhc2VfZG9tYWluJ10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IHRhZ3MoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRzWyd0YWdzJ10gYXMgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgc2V0IHRhZ3ModmFsdWU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1sndGFncyddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCB0YWdzUzNCdWNrZXQoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRzWyd0YWdzX3MzX2J1Y2tldCddIGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCB0YWdzUzNCdWNrZXQodmFsdWU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1sndGFnc19zM19idWNrZXQnXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgdnBjU2VjdXJpdHlHcm91cElkcygpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRzWyd2cGNfc2VjdXJpdHlfZ3JvdXBfaWRzJ10gYXMgc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCB2cGNTZWN1cml0eUdyb3VwSWRzKHZhbHVlOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW5wdXRzWyd2cGNfc2VjdXJpdHlfZ3JvdXBfaWRzJ10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IHZwY1N1Ym5ldElkcygpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRzWyd2cGNfc3VibmV0X2lkcyddIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBzZXQgdnBjU3VibmV0SWRzKHZhbHVlOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW5wdXRzWyd2cGNfc3VibmV0X2lkcyddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBhcGlFbmRwb2ludE91dHB1dCgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmcoJ2FwaV9lbmRwb2ludCcpXG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBhcGlFbmRwb2ludEFjY2Vzc1BvbGljeUFybk91dHB1dCgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmcoJ2FwaV9lbmRwb2ludF9hY2Nlc3NfcG9saWN5X2FybicpXG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBjbG91ZGZyb250Q3VzdG9tRXJyb3JSZXNwb25zZU91dHB1dCgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmcoJ2Nsb3VkZnJvbnRfY3VzdG9tX2Vycm9yX3Jlc3BvbnNlJylcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGNsb3VkZnJvbnREZWZhdWx0Q2FjaGVCZWhhdmlvck91dHB1dCgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmcoJ2Nsb3VkZnJvbnRfZGVmYXVsdF9jYWNoZV9iZWhhdmlvcicpXG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBjbG91ZGZyb250RGVmYXVsdFJvb3RPYmplY3RPdXRwdXQoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nKCdjbG91ZGZyb250X2RlZmF1bHRfcm9vdF9vYmplY3QnKVxuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgY2xvdWRmcm9udERvbWFpbk5hbWVPdXRwdXQoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nKCdjbG91ZGZyb250X2RvbWFpbl9uYW1lJylcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGNsb3VkZnJvbnRIb3N0ZWRab25lSWRPdXRwdXQoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nKCdjbG91ZGZyb250X2hvc3RlZF96b25lX2lkJylcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGNsb3VkZnJvbnRPcmRlcmVkQ2FjaGVCZWhhdmlvcnNPdXRwdXQoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nKCdjbG91ZGZyb250X29yZGVyZWRfY2FjaGVfYmVoYXZpb3JzJylcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGNsb3VkZnJvbnRPcmlnaW5zT3V0cHV0KCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0cmluZygnY2xvdWRmcm9udF9vcmlnaW5zJylcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IHVwbG9hZEJ1Y2tldElkT3V0cHV0KCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0cmluZygndXBsb2FkX2J1Y2tldF9pZCcpXG4gICAgICAgIH1cbiAgICAgICAgcHJvdGVjdGVkIHN5bnRoZXNpemVBdHRyaWJ1dGVzKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0cztcbiAgICAgICAgfVxuICAgICAgICBwcm90ZWN0ZWQgc3ludGhlc2l6ZUhjbEF0dHJpYnV0ZXMoKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0ge1xuICAgICAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyh0aGlzLmlucHV0cylcbiAgICAgICAgICAgICAgLmZpbHRlcigoWywgdmFsXSkgPT4gdmFsICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIC5tYXAoKFtrZXksIHZhbF0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImFueVwiLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFwiXG4gICAgYCk7XG4gIH0sXG4gIDEyMDAwMCxcbik7XG4iXX0=
477
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLWdlbmVyYXRvci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dldC9fX3Rlc3RzX18vZ2VuZXJhdG9yL21vZHVsZS1nZW5lcmF0b3IudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLDRDQUFxRTtBQUNyRSw2REFBeUQ7QUFDekQsa0NBQXNEO0FBQ3RELGlEQUF5QztBQUN6QyxrQ0FBMEM7QUFFMUMsTUFBTSxHQUFHLEdBQUcsSUFBQSxzQkFBZSxHQUFFLENBQUM7QUFFOUIsTUFBTSxlQUFlLEdBQUcsQ0FDdEIsSUFBWSxFQUNaLEVBQXVCLEVBQ3ZCLE9BQWdCLEVBQ2hCLEVBQUU7SUFDRixNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLElBQUksV0FBVyxDQUFDO0lBQzdFLE1BQU0sTUFBTSxHQUFHLElBQUEsd0JBQVEsRUFBQyxHQUFHLG1CQUFtQixnQkFBZ0IsQ0FBQyxDQUFDO0lBRWhFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztJQUVsRSxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkQsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsS0FB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QUFDO0lBQ0YsTUFBTSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUVuQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsWUFBWSxDQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxnQ0FBZ0MsQ0FBQyxFQUNwRCxPQUFPLENBQ1IsQ0FBQztJQUVGLG1GQUFtRjtJQUNuRiw4REFBOEQ7SUFDOUQsMkRBQTJEO0lBQzNELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXNXcEMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxFQUNELE1BQU0sQ0FDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgTGFuZ3VhZ2UsIFRlcnJhZm9ybU1vZHVsZUNvbnN0cmFpbnQgfSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IENvbnN0cnVjdHNNYWtlciB9IGZyb20gXCIuLi8uLi9jb25zdHJ1Y3RzLW1ha2VyXCI7XG5pbXBvcnQgeyBleHBlY3RNb2R1bGVUb01hdGNoU25hcHNob3QgfSBmcm9tIFwiLi4vdXRpbFwiO1xuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgY3JlYXRlVG1wSGVscGVyIH0gZnJvbSBcIi4uL3V0aWxcIjtcblxuY29uc3QgdG1wID0gY3JlYXRlVG1wSGVscGVyKCk7XG5cbmNvbnN0IG9uVGYxXzZBbmROZXdlciA9IChcbiAgbmFtZTogc3RyaW5nLFxuICBmbjogKCkgPT4gUHJvbWlzZTx2b2lkPixcbiAgdGltZW91dD86IG51bWJlcixcbikgPT4ge1xuICBjb25zdCB0ZXJyYWZvcm1CaW5hcnlOYW1lID0gcHJvY2Vzcy5lbnYuVEVSUkFGT1JNX0JJTkFSWV9OQU1FIHx8IFwidGVycmFmb3JtXCI7XG4gIGNvbnN0IG91dHB1dCA9IGV4ZWNTeW5jKGAke3RlcnJhZm9ybUJpbmFyeU5hbWV9IHZlcnNpb24gLWpzb25gKTtcblxuICBpZiAoIW91dHB1dCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBkZXRlcm1pbmUgVGVycmFmb3JtIHZlcnNpb25cIik7XG4gIH1cblxuICBjb25zdCB0ZlZlcnNpb24gPSBKU09OLnBhcnNlKG91dHB1dC50b1N0cmluZygpKS50ZXJyYWZvcm1fdmVyc2lvbjtcblxuICBjb25zdCBbbWFqb3IsIG1pbm9yXSA9IHRmVmVyc2lvbi50b1N0cmluZygpLnNwbGl0KFwiLlwiKTtcbiAgaWYgKE51bWJlcihtYWpvcikgPCAxIHx8IChOdW1iZXIobWFqb3IpID09PSAxICYmIE51bWJlcihtaW5vcikgPCA2KSkge1xuICAgIHRlc3Quc2tpcChcbiAgICAgIGAke25hbWV9IChyZXF1aXJlcyBUZXJyYWZvcm0gPj0gMS42LjA7IGJ1dCBpcyAke3RmVmVyc2lvbn0pYCxcbiAgICAgIGZuLFxuICAgICAgdGltZW91dCxcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRlc3QobmFtZSwgZm4sIHRpbWVvdXQpO1xuICB9XG59O1xuXG50ZXN0KFwiZ2VuZXJhdGUgc29tZSBtb2R1bGVzXCIsIGFzeW5jICgpID0+IHtcbiAgY29uc3Qgd29ya2RpciA9IHRtcChcIm1vZHVsZS1nZW5lcmF0b3IudGVzdFwiKTtcbiAgY29uc3QgY29uc3RyYWludCA9IG5ldyBUZXJyYWZvcm1Nb2R1bGVDb25zdHJhaW50KFxuICAgIFwidGVycmFmb3JtLWF3cy1tb2R1bGVzL2Vrcy9hd3NANy4wLjFcIixcbiAgKTtcblxuICBjb25zdCBtYWtlciA9IG5ldyBDb25zdHJ1Y3RzTWFrZXIoXG4gICAge1xuICAgICAgY29kZU1ha2VyT3V0cHV0OiB3b3JrZGlyLFxuICAgICAgdGFyZ2V0TGFuZ3VhZ2U6IExhbmd1YWdlLlRZUEVTQ1JJUFQsXG4gICAgfSxcbiAgICBwcm9jZXNzLmVudi5DREtURl9FWFBFUklNRU5UQUxfUFJPVklERVJfU0NIRU1BX0NBQ0hFX1BBVEgsXG4gICk7XG4gIGF3YWl0IG1ha2VyLmdlbmVyYXRlKFtjb25zdHJhaW50XSk7XG5cbiAgY29uc3Qgb3V0cHV0ID0gZnMucmVhZEZpbGVTeW5jKFxuICAgIHBhdGguam9pbih3b3JrZGlyLCBcIm1vZHVsZXMvdGVycmFmb3JtLWF3cy1tb2R1bGVzL2F3cy9la3MudHNcIiksXG4gICAgXCJ1dGYtOFwiLFxuICApO1xuICBleHBlY3Qob3V0cHV0KS50b01hdGNoU25hcHNob3QoKTtcbn0sIDEyMDAwMCk7XG5cbmV4cGVjdE1vZHVsZVRvTWF0Y2hTbmFwc2hvdChcIm5vIG1vZHVsZSBvdXRwdXRzXCIsIFwiZ2VuZXJhdG9yXCIsIFtcbiAgXCJtb2R1bGUtbm8tb3V0cHV0cy50ZXN0LmZpeHR1cmUudGZcIixcbl0pO1xuXG5leHBlY3RNb2R1bGVUb01hdGNoU25hcHNob3QoXCJ0eXBlbGVzcyB2YXJpYWJsZXNcIiwgXCJnZW5lcmF0b3JcIiwgW1xuICBcIm1vZHVsZS1uby12YXJpYWJsZS10eXBlLnRlc3QuZml4dHVyZS50ZlwiLFxuXSk7XG5cbmV4cGVjdE1vZHVsZVRvTWF0Y2hTbmFwc2hvdChcIm5vIG5ld2xpbmVcIiwgXCJnZW5lcmF0b3JcIiwgW1xuICBcIm1vZHVsZS1uby1uZXdsaW5lLTEudGVzdC5maXh0dXJlLnRmXCIsXG4gIFwibW9kdWxlLW5vLW5ld2xpbmUtMi50ZXN0LmZpeHR1cmUudGZcIixcbl0pO1xuXG50ZXN0KFwiZ2VuZXJhdGUgbXVsdGlwbGUgYXdzIG1vZHVsZXNcIiwgYXN5bmMgKCkgPT4ge1xuICBqZXN0LnNldFRpbWVvdXQoMTIwMDAwKTtcblxuICBjb25zdCB3b3JrZGlyID0gdG1wKFwibW9kdWxlLWdlbmVyYXRvci1hd3MudGVzdFwiKTtcbiAgY29uc3QgY29uc3RyYWludHMgPSBbXG4gICAgbmV3IFRlcnJhZm9ybU1vZHVsZUNvbnN0cmFpbnQoXCJ0ZXJyYWZvcm0tYXdzLW1vZHVsZXMvdnBjL2F3c0AyLjc4LjBcIiksXG4gICAgbmV3IFRlcnJhZm9ybU1vZHVsZUNvbnN0cmFpbnQoXCJ0ZXJyYWZvcm0tYXdzLW1vZHVsZXMvcmRzLWF1cm9yYS9hd3NANC4xLjBcIiksXG4gIF07XG5cbiAgY29uc3QgbWFrZXIgPSBuZXcgQ29uc3RydWN0c01ha2VyKFxuICAgIHtcbiAgICAgIGNvZGVNYWtlck91dHB1dDogd29ya2RpcixcbiAgICAgIHRhcmdldExhbmd1YWdlOiBMYW5ndWFnZS5UWVBFU0NSSVBULFxuICAgIH0sXG4gICAgcHJvY2Vzcy5lbnYuQ0RLVEZfRVhQRVJJTUVOVEFMX1BST1ZJREVSX1NDSEVNQV9DQUNIRV9QQVRILFxuICApO1xuICBhd2FpdCBtYWtlci5nZW5lcmF0ZShjb25zdHJhaW50cyk7XG5cbiAgY29uc3QgdnBjT3V0cHV0ID0gZnMucmVhZEZpbGVTeW5jKFxuICAgIHBhdGguam9pbih3b3JrZGlyLCBcIm1vZHVsZXMvdGVycmFmb3JtLWF3cy1tb2R1bGVzL2F3cy92cGMudHNcIiksXG4gICAgXCJ1dGYtOFwiLFxuICApO1xuICBleHBlY3QodnBjT3V0cHV0KS50b01hdGNoU25hcHNob3QoKTtcblxuICBjb25zdCByZHNPdXRwdXQgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgcGF0aC5qb2luKHdvcmtkaXIsIFwibW9kdWxlcy90ZXJyYWZvcm0tYXdzLW1vZHVsZXMvYXdzL3Jkcy1hdXJvcmEudHNcIiksXG4gICAgXCJ1dGYtOFwiLFxuICApO1xuICBleHBlY3QocmRzT3V0cHV0KS50b01hdGNoU25hcHNob3QoKTtcbn0sIDEyMDAwMCk7XG5cbnRlc3QoXCJnZW5lcmF0ZSBuZXN0ZWQgbW9kdWxlXCIsIGFzeW5jICgpID0+IHtcbiAgY29uc3Qgd29ya2RpciA9IHRtcChcIm1vZHVsZS1nZW5lcmF0b3ItbmVzdGVkLnRlc3RcIik7XG4gIGNvbnN0IGNvbnN0cmFpbnQgPSBuZXcgVGVycmFmb3JtTW9kdWxlQ29uc3RyYWludChcbiAgICBcInRlcnJhZm9ybS1hd3MtbW9kdWxlcy92cGMvYXdzLy9tb2R1bGVzL3ZwYy1lbmRwb2ludHNAMy4xOS4wXCIsXG4gICk7XG5cbiAgY29uc3QgbWFrZXIgPSBuZXcgQ29uc3RydWN0c01ha2VyKFxuICAgIHtcbiAgICAgIGNvZGVNYWtlck91dHB1dDogd29ya2RpcixcbiAgICAgIHRhcmdldExhbmd1YWdlOiBMYW5ndWFnZS5UWVBFU0NSSVBULFxuICAgIH0sXG4gICAgcHJvY2Vzcy5lbnYuQ0RLVEZfRVhQRVJJTUVOVEFMX1BST1ZJREVSX1NDSEVNQV9DQUNIRV9QQVRILFxuICApO1xuICBhd2FpdCBtYWtlci5nZW5lcmF0ZShbY29uc3RyYWludF0pO1xuXG4gIGNvbnN0IG91dHB1dCA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICBwYXRoLmpvaW4oXG4gICAgICB3b3JrZGlyLFxuICAgICAgXCJtb2R1bGVzL3RlcnJhZm9ybS1hd3MtbW9kdWxlcy9hd3MvdnBjL21vZHVsZXMvdnBjLWVuZHBvaW50cy50c1wiLFxuICAgICksXG4gICAgXCJ1dGYtOFwiLFxuICApO1xuICBleHBlY3Qob3V0cHV0KS50b01hdGNoU25hcHNob3QoKTtcbn0sIDEyMDAwMCk7XG5cbmV4cGVjdE1vZHVsZVRvTWF0Y2hTbmFwc2hvdChcImdldFggdmFyaWFibGVzXCIsIFwiZ2VuZXJhdG9yXCIsIFtcbiAgXCJtb2R1bGUtZ2V0LXgudGVzdC5maXh0dXJlLnRmXCIsXG5dKTtcblxuZXhwZWN0TW9kdWxlVG9NYXRjaFNuYXBzaG90KFxuICBcImhhbmRsZSAqLyogaW4gbW9kdWxlIHZhcmlhYmxlIGRlZmF1bHQgc3RyaW5nXCIsXG4gIFwiZ2VuZXJhdG9yXCIsXG4gIFtcIm1vZHVsZS13aXRoLXN0YXItZGVmYXVsdC50ZXN0LmZpeHR1cmUudGZcIl0sXG4pO1xuXG5vblRmMV82QW5kTmV3ZXIoXG4gIFwiZ2VuZXJhdGUgbW9kdWxlIHRoYXQgY2FuJ3QgYmUgaW5pdGlhbGl6ZWRcIixcbiAgYXN5bmMgKCkgPT4ge1xuICAgIGplc3Quc2V0VGltZW91dCgxMjAwMDApO1xuXG4gICAgY29uc3Qgd29ya2RpciA9IHRtcChcIm1vZHVsZS1nZW5lcmF0b3IudGVzdC1uby1pbml0XCIpO1xuICAgIGNvbnN0IGNvbnN0cmFpbnQgPSBuZXcgVGVycmFmb3JtTW9kdWxlQ29uc3RyYWludChcbiAgICAgIFwibWlsbGlIUS9uZXh0LWpzL2F3c0AxLjAuMC1jYW5hcnkuNVwiLFxuICAgICk7XG5cbiAgICBjb25zdCBtYWtlciA9IG5ldyBDb25zdHJ1Y3RzTWFrZXIoXG4gICAgICB7XG4gICAgICAgIGNvZGVNYWtlck91dHB1dDogd29ya2RpcixcbiAgICAgICAgdGFyZ2V0TGFuZ3VhZ2U6IExhbmd1YWdlLlRZUEVTQ1JJUFQsXG4gICAgICB9LFxuICAgICAgcHJvY2Vzcy5lbnYuQ0RLVEZfRVhQRVJJTUVOVEFMX1BST1ZJREVSX1NDSEVNQV9DQUNIRV9QQVRILFxuICAgICk7XG4gICAgYXdhaXQgbWFrZXIuZ2VuZXJhdGUoW2NvbnN0cmFpbnRdKTtcblxuICAgIGNvbnN0IG91dHB1dCA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgIHBhdGguam9pbih3b3JrZGlyLCBcIm1vZHVsZXMvbWlsbGlIUS9hd3MvbmV4dC1qcy50c1wiKSxcbiAgICAgIFwidXRmLThcIixcbiAgICApO1xuXG4gICAgLy8geWVzLCB0aGlzIGlzIGEgbG90IG9mIGNvZGUsIGJ1dCB0aGlzIHRlc3QgaXMgc2tpcHBlZCBmb3Igc29tZSBUZXJyYWZvcm0gdmVyc2lvbnNcbiAgICAvLyB3aGljaCB0aGVuIHNob3dzIHNuYXBzaG90cyBhcyBvYnNvbGV0ZSB3aGljaCBmYWlscyB0aGUgdGVzdFxuICAgIC8vIHRoaXMgd2F5LCB0aGVyZSdzIG5vIHN1Y2ggcHJvYmxlbSBpZiB0aGUgdGVzdCBpcyBza2lwcGVkXG4gICAgZXhwZWN0KG91dHB1dCkudG9NYXRjaElubGluZVNuYXBzaG90KGBcbiAgICAgIFwiLy8gZ2VuZXJhdGVkIGJ5IGNka3RuIGdldFxuICAgICAgLy8gbWlsbGlIUS9uZXh0LWpzL2F3c1xuICAgICAgaW1wb3J0IHsgVGVycmFmb3JtTW9kdWxlLCB0eXBlIFRlcnJhZm9ybU1vZHVsZVVzZXJDb25maWcgfSBmcm9tICdjZGt0bic7XG4gICAgICBpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbiAgICAgIGV4cG9ydCBpbnRlcmZhY2UgTmV4dEpzQ29uZmlnIGV4dGVuZHMgVGVycmFmb3JtTW9kdWxlVXNlckNvbmZpZyB7XG4gICAgICAgIC8qKlxuICAgICAgICAqIEFDTSBjZXJ0aWZpY2F0ZSBhcm4gZm9yIGN1c3RvbV9kb21haW5cbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgY2xvdWRmcm9udEFjbUNlcnRpZmljYXRlQXJuPzogc3RyaW5nO1xuICAgICAgICAvKipcbiAgICAgICAgKiBBbGlhc2VzIGZvciBjdXN0b21fZG9tYWluXG4gICAgICAgICpcbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgY2xvdWRmcm9udEFsaWFzZXM/OiBzdHJpbmdbXTtcbiAgICAgICAgLyoqXG4gICAgICAgICogSGVhZGVyIGtleXMgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGNhY2hlIGtleSBpbiBDbG91ZEZyb250LlxuICAgICAgICAqIEF1dGhvcml6YXRpb25cbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgY2xvdWRmcm9udENhY2hlS2V5SGVhZGVycz86IHN0cmluZ1tdO1xuICAgICAgICAvKipcbiAgICAgICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBtYWluIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHNob3VsZCBiZSBjcmVhdGVkLlxuICAgICAgICAqIHRydWVcbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgY2xvdWRmcm9udENyZWF0ZURpc3RyaWJ1dGlvbj86IGJvb2xlYW47XG4gICAgICAgIC8qKlxuICAgICAgICAqIFdoZW4gdXNpbmcgYW4gZXh0ZXJuYWwgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gcHJvdmlkZSBpdHMgYXJuLlxuICAgICAgICAqL1xuICAgICAgICByZWFkb25seSBjbG91ZGZyb250RXh0ZXJuYWxBcm4/OiBzdHJpbmc7XG4gICAgICAgIC8qKlxuICAgICAgICAqIFdoZW4gdXNpbmcgYW4gZXh0ZXJuYWwgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gcHJvdmlkZSBpdHMgaWQuXG4gICAgICAgICovXG4gICAgICAgIHJlYWRvbmx5IGNsb3VkZnJvbnRFeHRlcm5hbElkPzogc3RyaW5nO1xuICAgICAgICAvKipcbiAgICAgICAgKiBUaGUgbWluaW11bSB2ZXJzaW9uIG9mIHRoZSBTU0wgcHJvdG9jb2wgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHVzZSBmb3IgSFRUUFMgY29ubmVjdGlvbnMuIE9uZSBvZiBTU0x2MywgVExTdjEsIFRMU3YxXzIwMTYsIFRMU3YxLjFfMjAxNiwgVExTdjEuMl8yMDE4IG9yIFRMU3YxLjJfMjAxOS5cbiAgICAgICAgKiBUTFN2MVxuICAgICAgICAqL1xuICAgICAgICByZWFkb25seSBjbG91ZGZyb250TWluaW11bVByb3RvY29sVmVyc2lvbj86IHN0cmluZztcbiAgICAgICAgLyoqXG4gICAgICAgICogSWQgb2YgYSBjdXN0b20gcmVxdWVzdCBwb2xpY3kgdGhhdCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgcG9saWN5IChBbGxWaWV3ZXIpLiBDYW4gYmUgY3VzdG9tIG9yIG1hbmFnZWQuXG4gICAgICAgICovXG4gICAgICAgIHJlYWRvbmx5IGNsb3VkZnJvbnRPcmlnaW5SZXF1ZXN0UG9saWN5Pzogc3RyaW5nO1xuICAgICAgICAvKipcbiAgICAgICAgKiBQcmljZSBjbGFzcyBmb3IgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9ucyAobWFpbiAmIHByb3h5IGNvbmZpZykuIE9uZSBvZiBQcmljZUNsYXNzX0FsbCwgUHJpY2VDbGFzc18yMDAsIFByaWNlQ2xhc3NfMTAwLlxuICAgICAgICAqIFByaWNlQ2xhc3NfMTAwXG4gICAgICAgICovXG4gICAgICAgIHJlYWRvbmx5IGNsb3VkZnJvbnRQcmljZUNsYXNzPzogc3RyaW5nO1xuICAgICAgICAvKipcbiAgICAgICAgKiBJZCBvZiBhIHJlc3BvbnNlIGhlYWRlcnMgcG9saWN5LiBDYW4gYmUgY3VzdG9tIG9yIG1hbmFnZWQuIERlZmF1bHQgaXMgZW1wdHkuXG4gICAgICAgICovXG4gICAgICAgIHJlYWRvbmx5IGNsb3VkZnJvbnRSZXNwb25zZUhlYWRlcnNQb2xpY3k/OiBzdHJpbmc7XG4gICAgICAgIC8qKlxuICAgICAgICAqIEFuIG9wdGlvbmFsIHdlYmFjbDIgYXJuIG9yIHdlYmFjbCBpZCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgY2xvdWRmcm9udCBkaXN0cmlidXRpb25cbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgY2xvdWRmcm9udFdlYmFjbElkPzogc3RyaW5nO1xuICAgICAgICAvKipcbiAgICAgICAgKiBDb250cm9scyB3aGV0aGVyIHJlc291cmNlcyBmb3IgaW1hZ2Ugb3B0aW1pemF0aW9uIHN1cHBvcnQgc2hvdWxkIGJlIGNyZWF0ZWQgb3Igbm90LlxuICAgICAgICAqIHRydWVcbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgY3JlYXRlSW1hZ2VPcHRpbWl6YXRpb24/OiBib29sZWFuO1xuICAgICAgICAvKipcbiAgICAgICAgKiBVc2UgbG9jYWxseSBidWlsdCBwYWNrYWdlcyByYXRoZXIgdGhhbiBkb3dubG9hZCB0aGVtIGZyb20gbnBtLlxuICAgICAgICAqL1xuICAgICAgICByZWFkb25seSBkZWJ1Z1VzZUxvY2FsUGFja2FnZXM/OiBib29sZWFuO1xuICAgICAgICAvKipcbiAgICAgICAgKiBJZGVudGlmaWVyIGZvciB0aGUgZGVwbG95bWVudCBncm91cCAob25seSBsb3dlcmNhc2UgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5kIGh5cGhlbnMgYXJlIGFsbG93ZWQpLlxuICAgICAgICAqIHRmLW5leHRcbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgZGVwbG95bWVudE5hbWU/OiBzdHJpbmc7XG4gICAgICAgIC8qKlxuICAgICAgICAqIENvbnRyb2xzIHdoZXRoZXIgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHJ1biBtdWx0aXBsZSBkZXBsb3ltZW50cyBpbiBwYXJhbGxlbCAocmVxdWlyZXMgbXVsdGlwbGVfZGVwbG95bWVudHNfYmFzZV9kb21haW4pLlxuICAgICAgICAqL1xuICAgICAgICByZWFkb25seSBlbmFibGVNdWx0aXBsZURlcGxveW1lbnRzPzogYm9vbGVhbjtcbiAgICAgICAgLyoqXG4gICAgICAgICogQW1vdW50IG9mIG1lbW9yeSBpbiBNQiB0aGUgd29ya2VyIExhbWJkYSBGdW5jdGlvbiBmb3IgaW1hZ2Ugb3B0aW1pemF0aW9uIGNhbiB1c2UuIFZhbGlkIHZhbHVlIGJldHdlZW4gMTI4IE1CIHRvIDEwLDI0MCBNQiwgaW4gMSBNQiBpbmNyZW1lbnRzLlxuICAgICAgICAqIDIsMDQ4XG4gICAgICAgICovXG4gICAgICAgIHJlYWRvbmx5IGltYWdlT3B0aW1pemF0aW9uTGFtYmRhTWVtb3J5U2l6ZT86IG51bWJlcjtcbiAgICAgICAgLyoqXG4gICAgICAgICogV2hldGhlciB0byBkZXBsb3kgYWRkaXRpb25hbCBsYW1iZGEgSlNPTiBwb2xpY2llcy4gSWYgZmFsc2UsIGxhbWJkYV9wb2xpY3lfanNvbiB3aWxsIG5vdCBiZSBhdHRhY2hlZCB0byB0aGUgbGFtYmRhIGZ1bmN0aW9uLiAoTmVjZXNzYXJ5IHNpbmNlIHBvbGljeSBzdHJpbmdzIGFyZSBvbmx5IGtub3duIGFmdGVyIGFwcGx5IHdoZW4gdXNpbmcgVGVycmFmb3JtcyBkYXRhLmF3c19pYW1fcG9saWN5X2RvY3VtZW50KVxuICAgICAgICAqL1xuICAgICAgICByZWFkb25seSBsYW1iZGFBdHRhY2hQb2xpY3lKc29uPzogYm9vbGVhbjtcbiAgICAgICAgLyoqXG4gICAgICAgICogU2V0IHRvIHRydWUgaWYgdGhlIExhbWJkYSBmdW5jdGlvbnMgc2hvdWxkIGJlIGF0dGFjaGVkIHRvIGEgVlBDLiBVc2UgdGhpcyBzZXR0aW5nIGlmIFZQQyByZXNvdXJjZXMgc2hvdWxkIGJlIGFjY2Vzc2VkIGJ5IHRoZSBMYW1iZGEgZnVuY3Rpb25zLiBXaGVuIHNldHRpbmcgdGhpcyB0byB0cnVlLCB1c2UgdnBjX3NlY3VyaXR5X2dyb3VwX2lkcyBhbmQgdnBjX3N1Ym5ldF9pZHMgdG8gc3BlY2lmeSB0aGUgVlBDIG5ldHdvcmtpbmcuIE5vdGUgdGhhdCBhdHRhY2hpbmcgdG8gYSBWUEMgd291bGQgaW50cm9kdWNlIGEgZGVsYXkgb24gdG8gY29sZCBzdGFydHNcbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgbGFtYmRhQXR0YWNoVG9WcGM/OiBib29sZWFuO1xuICAgICAgICAvKipcbiAgICAgICAgKiBBZGRpdGlvbmFsIHBvbGljeSBkb2N1bWVudCBhcyBKU09OIHRvIGF0dGFjaCB0byB0aGUgTGFtYmRhIEZ1bmN0aW9uIHJvbGVcbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgbGFtYmRhUG9saWN5SnNvbj86IHN0cmluZztcbiAgICAgICAgLyoqXG4gICAgICAgICogQVJOIG9mIElBTSBwb2xpY3kgdGhhdCBzY29wZXMgYXdzX2lhbV9yb2xlIGFjY2VzcyBmb3IgdGhlIGxhbWJkYVxuICAgICAgICAqL1xuICAgICAgICByZWFkb25seSBsYW1iZGFSb2xlUGVybWlzc2lvbnNCb3VuZGFyeT86IHN0cmluZztcbiAgICAgICAgLyoqXG4gICAgICAgICogRGVmYXVsdCB3aWxkY2FyZCBkb21haW4gd2hlcmUgbmV3IGRlcGxveW1lbnRzIHNob3VsZCBiZSBhdmFpbGFibGUuIFNob3VsZCBiZSBpbiB0aGUgZm9ybSBvZiAqLmV4YW1wbGUuY29tLlxuICAgICAgICAqL1xuICAgICAgICByZWFkb25seSBtdWx0aXBsZURlcGxveW1lbnRzQmFzZURvbWFpbj86IHN0cmluZztcbiAgICAgICAgLyoqXG4gICAgICAgICogVGFnIG1ldGFkYXRhIHRvIGxhYmVsIEFXUyByZXNvdXJjZXMgdGhhdCBzdXBwb3J0IHRhZ3MuXG4gICAgICAgICogVGhlIHByb3BlcnR5IHR5cGUgY29udGFpbnMgYSBtYXAsIHRoZXkgaGF2ZSBzcGVjaWFsIGhhbmRsaW5nLCBwbGVhc2Ugc2VlIHtAbGluayBjZGsudGYvbW9kdWxlLW1hcC1pbnB1dHMgdGhlIGRvY3N9XG4gICAgICAgICovXG4gICAgICAgIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAgICAgICAvKipcbiAgICAgICAgKiBUYWcgbWV0YWRhdGEgdG8gbGFiZWwgQVdTIFMzIGJ1Y2tldHMuIE92ZXJyaWRlcyB0YWdzIHdpdGggdGhlIHNhbWUgbmFtZSBpbiBpbnB1dCB2YXJpYWJsZSB0YWdzLlxuICAgICAgICAqIFRoZSBwcm9wZXJ0eSB0eXBlIGNvbnRhaW5zIGEgbWFwLCB0aGV5IGhhdmUgc3BlY2lhbCBoYW5kbGluZywgcGxlYXNlIHNlZSB7QGxpbmsgY2RrLnRmL21vZHVsZS1tYXAtaW5wdXRzIHRoZSBkb2NzfVxuICAgICAgICAqL1xuICAgICAgICByZWFkb25seSB0YWdzUzNCdWNrZXQ/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAgICAgICAvKipcbiAgICAgICAgKiBUaGUgbGlzdCBvZiBTZWN1cml0eSBHcm91cCBJRHMgdG8gYmUgdXNlZCBieSB0aGUgTGFtYmRhIGZ1bmN0aW9ucy4gbGFtYmRhX2F0dGFjaF90b192cGMgc2hvdWxkIGJlIHNldCB0byB0cnVlIGZvciB0aGVzZSB0byBiZSBhcHBsaWVkLlxuICAgICAgICAqXG4gICAgICAgICovXG4gICAgICAgIHJlYWRvbmx5IHZwY1NlY3VyaXR5R3JvdXBJZHM/OiBzdHJpbmdbXTtcbiAgICAgICAgLyoqXG4gICAgICAgICogVGhlIGxpc3Qgb2YgVlBDIHN1Ym5ldCBJRHMgdG8gYXR0YWNoIHRoZSBMYW1iZGEgZnVuY3Rpb25zLiBsYW1iZGFfYXR0YWNoX3RvX3ZwYyBzaG91bGQgYmUgc2V0IHRvIHRydWUgZm9yIHRoZXNlIHRvIGJlIGFwcGxpZWQuXG4gICAgICAgICpcbiAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgdnBjU3VibmV0SWRzPzogc3RyaW5nW107XG4gICAgICB9XG4gICAgICAvKipcbiAgICAgICogRGVmaW5lcyBhbiBOZXh0SnMgYmFzZWQgb24gYSBUZXJyYWZvcm0gbW9kdWxlXG4gICAgICAqXG4gICAgICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vbW9kdWxlcy9taWxsaUhRL25leHQtanMvYXdzLzEuMC4wLWNhbmFyeS41IG1pbGxpSFEvbmV4dC1qcy9hd3N9XG4gICAgICAqL1xuICAgICAgZXhwb3J0IGNsYXNzIE5leHRKcyBleHRlbmRzIFRlcnJhZm9ybU1vZHVsZSB7XG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW5wdXRzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSA9IHsgfTtcbiAgICAgICAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbmZpZzogTmV4dEpzQ29uZmlnID0ge30pIHtcbiAgICAgICAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgICAgIHNvdXJjZTogJ21pbGxpSFEvbmV4dC1qcy9hd3MnLFxuICAgICAgICAgICAgdmVyc2lvbjogJzEuMC4wLWNhbmFyeS41JyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmNsb3VkZnJvbnRBY21DZXJ0aWZpY2F0ZUFybiA9IGNvbmZpZy5jbG91ZGZyb250QWNtQ2VydGlmaWNhdGVBcm47XG4gICAgICAgICAgdGhpcy5jbG91ZGZyb250QWxpYXNlcyA9IGNvbmZpZy5jbG91ZGZyb250QWxpYXNlcztcbiAgICAgICAgICB0aGlzLmNsb3VkZnJvbnRDYWNoZUtleUhlYWRlcnMgPSBjb25maWcuY2xvdWRmcm9udENhY2hlS2V5SGVhZGVycztcbiAgICAgICAgICB0aGlzLmNsb3VkZnJvbnRDcmVhdGVEaXN0cmlidXRpb24gPSBjb25maWcuY2xvdWRmcm9udENyZWF0ZURpc3RyaWJ1dGlvbjtcbiAgICAgICAgICB0aGlzLmNsb3VkZnJvbnRFeHRlcm5hbEFybiA9IGNvbmZpZy5jbG91ZGZyb250RXh0ZXJuYWxBcm47XG4gICAgICAgICAgdGhpcy5jbG91ZGZyb250RXh0ZXJuYWxJZCA9IGNvbmZpZy5jbG91ZGZyb250RXh0ZXJuYWxJZDtcbiAgICAgICAgICB0aGlzLmNsb3VkZnJvbnRNaW5pbXVtUHJvdG9jb2xWZXJzaW9uID0gY29uZmlnLmNsb3VkZnJvbnRNaW5pbXVtUHJvdG9jb2xWZXJzaW9uO1xuICAgICAgICAgIHRoaXMuY2xvdWRmcm9udE9yaWdpblJlcXVlc3RQb2xpY3kgPSBjb25maWcuY2xvdWRmcm9udE9yaWdpblJlcXVlc3RQb2xpY3k7XG4gICAgICAgICAgdGhpcy5jbG91ZGZyb250UHJpY2VDbGFzcyA9IGNvbmZpZy5jbG91ZGZyb250UHJpY2VDbGFzcztcbiAgICAgICAgICB0aGlzLmNsb3VkZnJvbnRSZXNwb25zZUhlYWRlcnNQb2xpY3kgPSBjb25maWcuY2xvdWRmcm9udFJlc3BvbnNlSGVhZGVyc1BvbGljeTtcbiAgICAgICAgICB0aGlzLmNsb3VkZnJvbnRXZWJhY2xJZCA9IGNvbmZpZy5jbG91ZGZyb250V2ViYWNsSWQ7XG4gICAgICAgICAgdGhpcy5jcmVhdGVJbWFnZU9wdGltaXphdGlvbiA9IGNvbmZpZy5jcmVhdGVJbWFnZU9wdGltaXphdGlvbjtcbiAgICAgICAgICB0aGlzLmRlYnVnVXNlTG9jYWxQYWNrYWdlcyA9IGNvbmZpZy5kZWJ1Z1VzZUxvY2FsUGFja2FnZXM7XG4gICAgICAgICAgdGhpcy5kZXBsb3ltZW50TmFtZSA9IGNvbmZpZy5kZXBsb3ltZW50TmFtZTtcbiAgICAgICAgICB0aGlzLmVuYWJsZU11bHRpcGxlRGVwbG95bWVudHMgPSBjb25maWcuZW5hYmxlTXVsdGlwbGVEZXBsb3ltZW50cztcbiAgICAgICAgICB0aGlzLmltYWdlT3B0aW1pemF0aW9uTGFtYmRhTWVtb3J5U2l6ZSA9IGNvbmZpZy5pbWFnZU9wdGltaXphdGlvbkxhbWJkYU1lbW9yeVNpemU7XG4gICAgICAgICAgdGhpcy5sYW1iZGFBdHRhY2hQb2xpY3lKc29uID0gY29uZmlnLmxhbWJkYUF0dGFjaFBvbGljeUpzb247XG4gICAgICAgICAgdGhpcy5sYW1iZGFBdHRhY2hUb1ZwYyA9IGNvbmZpZy5sYW1iZGFBdHRhY2hUb1ZwYztcbiAgICAgICAgICB0aGlzLmxhbWJkYVBvbGljeUpzb24gPSBjb25maWcubGFtYmRhUG9saWN5SnNvbjtcbiAgICAgICAgICB0aGlzLmxhbWJkYVJvbGVQZXJtaXNzaW9uc0JvdW5kYXJ5ID0gY29uZmlnLmxhbWJkYVJvbGVQZXJtaXNzaW9uc0JvdW5kYXJ5O1xuICAgICAgICAgIHRoaXMubXVsdGlwbGVEZXBsb3ltZW50c0Jhc2VEb21haW4gPSBjb25maWcubXVsdGlwbGVEZXBsb3ltZW50c0Jhc2VEb21haW47XG4gICAgICAgICAgdGhpcy50YWdzID0gY29uZmlnLnRhZ3M7XG4gICAgICAgICAgdGhpcy50YWdzUzNCdWNrZXQgPSBjb25maWcudGFnc1MzQnVja2V0O1xuICAgICAgICAgIHRoaXMudnBjU2VjdXJpdHlHcm91cElkcyA9IGNvbmZpZy52cGNTZWN1cml0eUdyb3VwSWRzO1xuICAgICAgICAgIHRoaXMudnBjU3VibmV0SWRzID0gY29uZmlnLnZwY1N1Ym5ldElkcztcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGNsb3VkZnJvbnRBY21DZXJ0aWZpY2F0ZUFybigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9hY21fY2VydGlmaWNhdGVfYXJuJ10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBzZXQgY2xvdWRmcm9udEFjbUNlcnRpZmljYXRlQXJuKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9hY21fY2VydGlmaWNhdGVfYXJuJ10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGNsb3VkZnJvbnRBbGlhc2VzKCk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dHNbJ2Nsb3VkZnJvbnRfYWxpYXNlcyddIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBzZXQgY2xvdWRmcm9udEFsaWFzZXModmFsdWU6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5pbnB1dHNbJ2Nsb3VkZnJvbnRfYWxpYXNlcyddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBjbG91ZGZyb250Q2FjaGVLZXlIZWFkZXJzKCk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dHNbJ2Nsb3VkZnJvbnRfY2FjaGVfa2V5X2hlYWRlcnMnXSBhcyBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgc2V0IGNsb3VkZnJvbnRDYWNoZUtleUhlYWRlcnModmFsdWU6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5pbnB1dHNbJ2Nsb3VkZnJvbnRfY2FjaGVfa2V5X2hlYWRlcnMnXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgY2xvdWRmcm9udENyZWF0ZURpc3RyaWJ1dGlvbigpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dHNbJ2Nsb3VkZnJvbnRfY3JlYXRlX2Rpc3RyaWJ1dGlvbiddIGFzIGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCBjbG91ZGZyb250Q3JlYXRlRGlzdHJpYnV0aW9uKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5pbnB1dHNbJ2Nsb3VkZnJvbnRfY3JlYXRlX2Rpc3RyaWJ1dGlvbiddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBjbG91ZGZyb250RXh0ZXJuYWxBcm4oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dHNbJ2Nsb3VkZnJvbnRfZXh0ZXJuYWxfYXJuJ10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBzZXQgY2xvdWRmcm9udEV4dGVybmFsQXJuKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9leHRlcm5hbF9hcm4nXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgY2xvdWRmcm9udEV4dGVybmFsSWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dHNbJ2Nsb3VkZnJvbnRfZXh0ZXJuYWxfaWQnXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCBjbG91ZGZyb250RXh0ZXJuYWxJZCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5pbnB1dHNbJ2Nsb3VkZnJvbnRfZXh0ZXJuYWxfaWQnXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgY2xvdWRmcm9udE1pbmltdW1Qcm90b2NvbFZlcnNpb24oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dHNbJ2Nsb3VkZnJvbnRfbWluaW11bV9wcm90b2NvbF92ZXJzaW9uJ10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBzZXQgY2xvdWRmcm9udE1pbmltdW1Qcm90b2NvbFZlcnNpb24odmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW5wdXRzWydjbG91ZGZyb250X21pbmltdW1fcHJvdG9jb2xfdmVyc2lvbiddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBjbG91ZGZyb250T3JpZ2luUmVxdWVzdFBvbGljeSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9vcmlnaW5fcmVxdWVzdF9wb2xpY3knXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCBjbG91ZGZyb250T3JpZ2luUmVxdWVzdFBvbGljeSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5pbnB1dHNbJ2Nsb3VkZnJvbnRfb3JpZ2luX3JlcXVlc3RfcG9saWN5J10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGNsb3VkZnJvbnRQcmljZUNsYXNzKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRzWydjbG91ZGZyb250X3ByaWNlX2NsYXNzJ10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBzZXQgY2xvdWRmcm9udFByaWNlQ2xhc3ModmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW5wdXRzWydjbG91ZGZyb250X3ByaWNlX2NsYXNzJ10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGNsb3VkZnJvbnRSZXNwb25zZUhlYWRlcnNQb2xpY3koKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dHNbJ2Nsb3VkZnJvbnRfcmVzcG9uc2VfaGVhZGVyc19wb2xpY3knXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCBjbG91ZGZyb250UmVzcG9uc2VIZWFkZXJzUG9saWN5KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1snY2xvdWRmcm9udF9yZXNwb25zZV9oZWFkZXJzX3BvbGljeSddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBjbG91ZGZyb250V2ViYWNsSWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dHNbJ2Nsb3VkZnJvbnRfd2ViYWNsX2lkJ10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBzZXQgY2xvdWRmcm9udFdlYmFjbElkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1snY2xvdWRmcm9udF93ZWJhY2xfaWQnXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgY3JlYXRlSW1hZ2VPcHRpbWl6YXRpb24oKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRzWydjcmVhdGVfaW1hZ2Vfb3B0aW1pemF0aW9uJ10gYXMgYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgc2V0IGNyZWF0ZUltYWdlT3B0aW1pemF0aW9uKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5pbnB1dHNbJ2NyZWF0ZV9pbWFnZV9vcHRpbWl6YXRpb24nXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgZGVidWdVc2VMb2NhbFBhY2thZ2VzKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1snZGVidWdfdXNlX2xvY2FsX3BhY2thZ2VzJ10gYXMgYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgc2V0IGRlYnVnVXNlTG9jYWxQYWNrYWdlcyh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW5wdXRzWydkZWJ1Z191c2VfbG9jYWxfcGFja2FnZXMnXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgZGVwbG95bWVudE5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dHNbJ2RlcGxveW1lbnRfbmFtZSddIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgc2V0IGRlcGxveW1lbnROYW1lKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1snZGVwbG95bWVudF9uYW1lJ10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGVuYWJsZU11bHRpcGxlRGVwbG95bWVudHMoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRzWydlbmFibGVfbXVsdGlwbGVfZGVwbG95bWVudHMnXSBhcyBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBzZXQgZW5hYmxlTXVsdGlwbGVEZXBsb3ltZW50cyh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW5wdXRzWydlbmFibGVfbXVsdGlwbGVfZGVwbG95bWVudHMnXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgaW1hZ2VPcHRpbWl6YXRpb25MYW1iZGFNZW1vcnlTaXplKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRzWydpbWFnZV9vcHRpbWl6YXRpb25fbGFtYmRhX21lbW9yeV9zaXplJ10gYXMgbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBzZXQgaW1hZ2VPcHRpbWl6YXRpb25MYW1iZGFNZW1vcnlTaXplKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1snaW1hZ2Vfb3B0aW1pemF0aW9uX2xhbWJkYV9tZW1vcnlfc2l6ZSddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBsYW1iZGFBdHRhY2hQb2xpY3lKc29uKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1snbGFtYmRhX2F0dGFjaF9wb2xpY3lfanNvbiddIGFzIGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCBsYW1iZGFBdHRhY2hQb2xpY3lKc29uKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5pbnB1dHNbJ2xhbWJkYV9hdHRhY2hfcG9saWN5X2pzb24nXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgbGFtYmRhQXR0YWNoVG9WcGMoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRzWydsYW1iZGFfYXR0YWNoX3RvX3ZwYyddIGFzIGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCBsYW1iZGFBdHRhY2hUb1ZwYyh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW5wdXRzWydsYW1iZGFfYXR0YWNoX3RvX3ZwYyddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBsYW1iZGFQb2xpY3lKc29uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRzWydsYW1iZGFfcG9saWN5X2pzb24nXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCBsYW1iZGFQb2xpY3lKc29uKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1snbGFtYmRhX3BvbGljeV9qc29uJ10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGxhbWJkYVJvbGVQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRzWydsYW1iZGFfcm9sZV9wZXJtaXNzaW9uc19ib3VuZGFyeSddIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgc2V0IGxhbWJkYVJvbGVQZXJtaXNzaW9uc0JvdW5kYXJ5KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1snbGFtYmRhX3JvbGVfcGVybWlzc2lvbnNfYm91bmRhcnknXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgbXVsdGlwbGVEZXBsb3ltZW50c0Jhc2VEb21haW4oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dHNbJ211bHRpcGxlX2RlcGxveW1lbnRzX2Jhc2VfZG9tYWluJ10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBzZXQgbXVsdGlwbGVEZXBsb3ltZW50c0Jhc2VEb21haW4odmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW5wdXRzWydtdWx0aXBsZV9kZXBsb3ltZW50c19iYXNlX2RvbWFpbiddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCB0YWdzKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1sndGFncyddIGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIHNldCB0YWdzKHZhbHVlOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHwgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5pbnB1dHNbJ3RhZ3MnXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgdGFnc1MzQnVja2V0KCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1sndGFnc19zM19idWNrZXQnXSBhcyB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBzZXQgdGFnc1MzQnVja2V0KHZhbHVlOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHwgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5pbnB1dHNbJ3RhZ3NfczNfYnVja2V0J10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IHZwY1NlY3VyaXR5R3JvdXBJZHMoKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1sndnBjX3NlY3VyaXR5X2dyb3VwX2lkcyddIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBzZXQgdnBjU2VjdXJpdHlHcm91cElkcyh2YWx1ZTogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1sndnBjX3NlY3VyaXR5X2dyb3VwX2lkcyddID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCB2cGNTdWJuZXRJZHMoKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0c1sndnBjX3N1Ym5ldF9pZHMnXSBhcyBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgc2V0IHZwY1N1Ym5ldElkcyh2YWx1ZTogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0c1sndnBjX3N1Ym5ldF9pZHMnXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgYXBpRW5kcG9pbnRPdXRwdXQoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nKCdhcGlfZW5kcG9pbnQnKTtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGFwaUVuZHBvaW50QWNjZXNzUG9saWN5QXJuT3V0cHV0KCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0cmluZygnYXBpX2VuZHBvaW50X2FjY2Vzc19wb2xpY3lfYXJuJyk7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBjbG91ZGZyb250Q3VzdG9tRXJyb3JSZXNwb25zZU91dHB1dCgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmcoJ2Nsb3VkZnJvbnRfY3VzdG9tX2Vycm9yX3Jlc3BvbnNlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBjbG91ZGZyb250RGVmYXVsdENhY2hlQmVoYXZpb3JPdXRwdXQoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nKCdjbG91ZGZyb250X2RlZmF1bHRfY2FjaGVfYmVoYXZpb3InKTtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGNsb3VkZnJvbnREZWZhdWx0Um9vdE9iamVjdE91dHB1dCgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmcoJ2Nsb3VkZnJvbnRfZGVmYXVsdF9yb290X29iamVjdCcpO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgY2xvdWRmcm9udERvbWFpbk5hbWVPdXRwdXQoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nKCdjbG91ZGZyb250X2RvbWFpbl9uYW1lJyk7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCBjbG91ZGZyb250SG9zdGVkWm9uZUlkT3V0cHV0KCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0cmluZygnY2xvdWRmcm9udF9ob3N0ZWRfem9uZV9pZCcpO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpYyBnZXQgY2xvdWRmcm9udE9yZGVyZWRDYWNoZUJlaGF2aW9yc091dHB1dCgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmcoJ2Nsb3VkZnJvbnRfb3JkZXJlZF9jYWNoZV9iZWhhdmlvcnMnKTtcbiAgICAgICAgfVxuICAgICAgICBwdWJsaWMgZ2V0IGNsb3VkZnJvbnRPcmlnaW5zT3V0cHV0KCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0cmluZygnY2xvdWRmcm9udF9vcmlnaW5zJyk7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljIGdldCB1cGxvYWRCdWNrZXRJZE91dHB1dCgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmcoJ3VwbG9hZF9idWNrZXRfaWQnKTtcbiAgICAgICAgfVxuICAgICAgICBwcm90ZWN0ZWQgc3ludGhlc2l6ZUF0dHJpYnV0ZXMoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRzO1xuICAgICAgICB9XG4gICAgICAgIHByb3RlY3RlZCBzeW50aGVzaXplSGNsQXR0cmlidXRlcygpOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB7XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuaW5wdXRzKVxuICAgICAgICAgICAgICAuZmlsdGVyKChbLCB2YWxdKSA9PiB2YWwgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgLm1hcCgoW2tleSwgdmFsXSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYW55XCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXCJcbiAgICBgKTtcbiAgfSxcbiAgMTIwMDAwLFxuKTtcbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { CodeMaker } from "codemaker";
2
- import { TerraformDependencyConstraint } from "@cdktn/commons";
2
+ import { TerraformDependencyConstraint, type LanguageOptions } from "@cdktn/commons";
3
3
  import { Language } from "@cdktn/commons";
4
4
  export interface GenerateJSIIOptions {
5
5
  entrypoint: string;
@@ -51,6 +51,10 @@ export interface GetOptions {
51
51
  * @default - jsii file is not emitted
52
52
  */
53
53
  readonly outputJsii?: string;
54
+ /**
55
+ * Language-specific code generation options.
56
+ */
57
+ readonly languageOptions?: LanguageOptions;
54
58
  }
55
59
  export declare class ConstructsMaker {
56
60
  private readonly options;