@cdktn/cli-core 0.23.0-pre.27 → 0.23.0-pre.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cdktn/cli-core",
3
- "version": "0.23.0-pre.27",
3
+ "version": "0.23.0-pre.30",
4
4
  "description": "CDK Terrain CLI Core, meant for internal use only",
5
5
  "scripts": {
6
6
  "build": "tsc",
@@ -40,13 +40,13 @@
40
40
  ],
41
41
  "license": "MPL-2.0",
42
42
  "dependencies": {
43
- "@cdktn/commons": "0.23.0-pre.27",
44
- "@cdktn/hcl-tools": "0.23.0-pre.27",
45
- "@cdktn/hcl2cdk": "0.23.0-pre.27",
46
- "@cdktn/hcl2json": "0.23.0-pre.27",
47
- "@cdktn/provider-schema": "0.23.0-pre.27",
43
+ "@cdktn/commons": "0.23.0-pre.30",
44
+ "@cdktn/hcl-tools": "0.23.0-pre.30",
45
+ "@cdktn/hcl2cdk": "0.23.0-pre.30",
46
+ "@cdktn/hcl2json": "0.23.0-pre.30",
47
+ "@cdktn/provider-schema": "0.23.0-pre.30",
48
48
  "@sentry/node": "7.120.4",
49
- "cdktn": "0.23.0-pre.27",
49
+ "cdktn": "0.23.0-pre.30",
50
50
  "chalk": "4.1.2",
51
51
  "chokidar": "3.6.0",
52
52
  "cli-spinners": "2.9.2",
@@ -92,7 +92,7 @@
92
92
  "src/**/*.{ts,tsx}": "tsc-files ambient.d.ts --noEmit"
93
93
  },
94
94
  "devDependencies": {
95
- "@cdktn/provider-generator": "0.23.0-pre.27",
95
+ "@cdktn/provider-generator": "0.23.0-pre.30",
96
96
  "@eslint/compat": "^1.4.1",
97
97
  "@eslint/eslintrc": "^3.3.5",
98
98
  "@eslint/js": "^9.39.4",
@@ -1 +1 @@
1
- {"version":3,"file":"prebuilt-providers.d.ts","sourceRoot":"","sources":["prebuilt-providers.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAc1D,KAAK,YAAY,GAAG;IAClB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB,CAAC;AAeF,wBAAsB,eAAe,kBAEpC;AA2CD,wBAAsB,uBAAuB,0BAE5C;AAED,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,kBAAkB,EAC9B,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAc7B;AAuDD,KAAK,uBAAuB,GAAG;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,6BAA6B,EAAE,MAAM,CAAC;IACtC,6BAA6B,EAAE,MAAM,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAsB,iCAAiC,CACrD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAcjB;AAED,wBAAsB,8BAA8B,CAClD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAwCpC;AASD,wBAAsB,2BAA2B,CAC/C,UAAU,EAAE,kBAAkB,EAC9B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,IAAI,CAAC,CAsDrD;AAED,wBAAsB,qCAAqC,CACzD,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,GAAG,CAAC,CAuBd"}
1
+ {"version":3,"file":"prebuilt-providers.d.ts","sourceRoot":"","sources":["prebuilt-providers.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAc1D,KAAK,YAAY,GAAG;IAClB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB,CAAC;AAeF,wBAAsB,eAAe,kBAEpC;AA2CD,wBAAsB,uBAAuB,0BAE5C;AAED,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,kBAAkB,EAC9B,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAc7B;AA+ED,KAAK,uBAAuB,GAAG;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,6BAA6B,EAAE,MAAM,CAAC;IACtC,6BAA6B,EAAE,MAAM,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAsB,iCAAiC,CACrD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAcjB;AAED,wBAAsB,8BAA8B,CAClD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAyCpC;AASD,wBAAsB,2BAA2B,CAC/C,UAAU,EAAE,kBAAkB,EAC9B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,IAAI,CAAC,CAsDrD;AAED,wBAAsB,qCAAqC,CACzD,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,GAAG,CAAC,CAwBd"}
@@ -121,12 +121,12 @@ async function getAllPrebuiltProviderVersions(packageName) {
121
121
  const result = await cachedFetch(url);
122
122
  const versions = Object.entries(result.versions)
123
123
  .map(([version, packageJson]) => {
124
- var _a, _b, _c;
125
- const provider = (_a = packageJson.cdktf) === null || _a === void 0 ? void 0 : _a.provider;
124
+ var _a, _b, _c, _d, _e;
125
+ const provider = (_b = (_a = packageJson.cdktn) === null || _a === void 0 ? void 0 : _a.provider) !== null && _b !== void 0 ? _b : (_c = packageJson.cdktf) === null || _c === void 0 ? void 0 : _c.provider;
126
126
  if (!provider ||
127
- (!((_b = packageJson.peerDependencies) === null || _b === void 0 ? void 0 : _b.cdktf) &&
128
- !((_c = packageJson.peerDependencies) === null || _c === void 0 ? void 0 : _c.cdktn))) {
129
- commons_1.logger.trace(`skipping version ${version} of ${packageName} as it does not have a cdktf.provider or peerDependencies.cdktf/cdktn in package.json`);
127
+ (!((_d = packageJson.peerDependencies) === null || _d === void 0 ? void 0 : _d.cdktf) &&
128
+ !((_e = packageJson.peerDependencies) === null || _e === void 0 ? void 0 : _e.cdktn))) {
129
+ commons_1.logger.trace(`skipping version ${version} of ${packageName} as it does not have a cdktn/cdktf.provider or peerDependencies.cdktf/cdktn in package.json`);
130
130
  return undefined;
131
131
  }
132
132
  return {
@@ -196,13 +196,14 @@ async function getPrebuiltProviderVersions(constraint, cdktfVersion) {
196
196
  }
197
197
  exports.getPrebuiltProviderVersions = getPrebuiltProviderVersions;
198
198
  async function getPrebuiltProviderVersionInformation(packageName, packageVersion) {
199
+ var _a, _b, _c, _d, _e, _f;
199
200
  // Go packages include an extra `vX.Y.Z`
200
201
  if (packageVersion.startsWith("v")) {
201
202
  packageVersion = packageVersion.slice(1);
202
203
  }
203
204
  const url = `https://registry.npmjs.org/${packageName}/${packageVersion}`;
204
205
  const result = await cachedFetch(url);
205
- let providerName = result.cdktf.provider.name;
206
+ let providerName = (_b = (_a = result.cdktn) === null || _a === void 0 ? void 0 : _a.provider.name) !== null && _b !== void 0 ? _b : (_c = result.cdktf) === null || _c === void 0 ? void 0 : _c.provider.name;
206
207
  if (providerName) {
207
208
  providerName = providerName.replace("registry.terraform.io/", "");
208
209
  providerName = providerName.replace("hashicorp/", "");
@@ -211,10 +212,10 @@ async function getPrebuiltProviderVersionInformation(packageName, packageVersion
211
212
  packageName: result.name,
212
213
  packageVersion: result.version,
213
214
  providerName,
214
- providerVersion: result.cdktf.provider.version,
215
+ providerVersion: (_e = (_d = result.cdktn) === null || _d === void 0 ? void 0 : _d.provider.version) !== null && _e !== void 0 ? _e : (_f = result.cdktf) === null || _f === void 0 ? void 0 : _f.provider.version,
215
216
  cdktfVersion: result.peerDependencies["cdktf"],
216
217
  cdktnVersion: result.peerDependencies["cdktn"],
217
218
  };
218
219
  }
219
220
  exports.getPrebuiltProviderVersionInformation = getPrebuiltProviderVersionInformation;
220
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlYnVpbHQtcHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicHJlYnVpbHQtcHJvdmlkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVuQyx5REFBb0Q7QUFDcEQsNERBQStCO0FBQy9CLCtDQUFpQztBQUNqQyw0Q0FBd0M7QUFDeEMsNkRBQTBEO0FBQzFELCtEQUFpRTtBQUVqRSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztBQUMvRCxJQUFJLEtBQWtDLENBQUM7QUFDdkMsSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUNWLEtBQUssR0FBRyxJQUFJLG1DQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELHFGQUFxRjtBQUNyRiw4RUFBOEU7QUFDOUUsb0ZBQW9GO0FBQ3BGLE1BQU0sZUFBZSxHQUNuQixtR0FBbUcsQ0FBQztBQUt0RyxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO0FBQzFDLEtBQUssVUFBVSxXQUFXLENBQUksR0FBVztJQUN2QyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN4QixPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLE1BQU0sWUFBWSxDQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRWxDLE9BQU8sWUFBaUIsQ0FBQztBQUMzQixDQUFDO0FBRUQsNEJBQTRCO0FBQ3JCLEtBQUssVUFBVSxlQUFlO0lBQ25DLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQixDQUFDO0FBRkQsMENBRUM7QUFFRCxLQUFLLFVBQVUsWUFBWSxDQUFJLEdBQVc7SUFDeEMsSUFBSSxRQUFRLENBQUM7SUFDYixJQUFJLENBQUM7UUFDSCxRQUFRLEdBQUcsTUFBTSxJQUFBLG9CQUFLLEVBQUMsR0FBRyxFQUFFO1lBQzFCLEtBQUs7WUFDTCxPQUFPLEVBQUUsRUFBRSxZQUFZLEVBQUUsMEJBQTBCLEVBQUU7U0FDdEQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCx1REFBdUQ7UUFDdkQsZ0JBQU0sQ0FBQyxLQUFLLENBQ1YsaUlBQWlJLENBQ2xJLENBQUM7UUFFRixNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDakIsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQ2Isc0VBQXNFLENBQ3ZFLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBQ0QsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQzNCLE1BQU0sWUFBWSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNDLG9GQUFvRjtZQUNwRixnQkFBTSxDQUFDLEtBQUssQ0FDVixZQUFZLFFBQVEsQ0FBQyxNQUFNLGtCQUFrQixHQUFHLEtBQUssWUFBWSxFQUFFLENBQ3BFLENBQUM7WUFFRixNQUFNLElBQUksS0FBSyxDQUNiLHNFQUFzRSxDQUN2RSxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQWdCLENBQUM7QUFDdkMsQ0FBQztBQUVNLEtBQUssVUFBVSx1QkFBdUI7SUFDM0MsT0FBTyxXQUFXLENBQWUsZUFBZSxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUZELDBEQUVDO0FBRU0sS0FBSyxVQUFVLGlCQUFpQixDQUNyQyxVQUE4QixFQUM5QixRQUFpQjtJQUVqQixNQUFNLFNBQVMsR0FBRyxNQUFNLHVCQUF1QixFQUFFLENBQUM7SUFFbEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQzFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDUix1Q0FBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtRQUMxRCxVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUNsQyxDQUFDO0lBQ0YsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsT0FBTyxTQUFTLENBQUMsQ0FBQyxrREFBa0Q7SUFDdEUsQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV0QixPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsSUFBSSxFQUFFLENBQUM7QUFDMUUsQ0FBQztBQWpCRCw4Q0FpQkM7QUErRE0sS0FBSyxVQUFVLGlDQUFpQyxDQUNyRCxXQUFtQjs7SUFFbkIsTUFBTSxHQUFHLEdBQUcsOEJBQThCLFdBQVcsRUFBRSxDQUFDO0lBQ3hELE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFtQixHQUFHLENBQUMsQ0FBQztJQUV4RCxNQUFNLGFBQWEsR0FBRyxNQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxVQUFVLDBDQUFFLEdBQUcsQ0FBQztJQUU5QyxJQUFJLENBQUMsYUFBYTtRQUFFLE9BQU8sRUFBRSxDQUFDO0lBRTlCLE1BQU0sZUFBZSxHQUFHLHdDQUF3QyxDQUFDO0lBQ2pFLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFbEQsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUV0QixPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixDQUFDO0FBaEJELDhFQWdCQztBQUVNLEtBQUssVUFBVSw4QkFBOEIsQ0FDbEQsV0FBbUI7SUFFbkIsTUFBTSxHQUFHLEdBQUcsOEJBQThCLFdBQVcsRUFBRSxDQUFDO0lBQ3hELE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFtQixHQUFHLENBQUMsQ0FBQztJQUV4RCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7U0FDN0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRTs7UUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBQSxXQUFXLENBQUMsS0FBSywwQ0FBRSxRQUFRLENBQUM7UUFDN0MsSUFDRSxDQUFDLFFBQVE7WUFDVCxDQUFDLENBQUMsQ0FBQSxNQUFBLFdBQVcsQ0FBQyxnQkFBZ0IsMENBQUUsS0FBSyxDQUFBO2dCQUNuQyxDQUFDLENBQUEsTUFBQSxXQUFXLENBQUMsZ0JBQWdCLDBDQUFFLEtBQUssQ0FBQSxDQUFDLEVBQ3ZDLENBQUM7WUFDRCxnQkFBTSxDQUFDLEtBQUssQ0FDVixvQkFBb0IsT0FBTyxPQUFPLFdBQVcsdUZBQXVGLENBQ3JJLENBQUM7WUFDRixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTztZQUNMLFdBQVc7WUFDWCxjQUFjLEVBQUUsT0FBTztZQUN2QixlQUFlLEVBQUUsUUFBUSxDQUFDLE9BQU87WUFDakMsNkJBQTZCLEVBQUUsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEtBQUs7WUFDakUsNkJBQTZCLEVBQUUsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEtBQUs7U0FDbEUsQ0FBQztJQUNKLENBQUMsQ0FBQztTQUNELE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBOEIsQ0FBQztJQUUvRCx5REFBeUQ7SUFDekQseURBQXlEO0lBQ3pELFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDckIsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDbEQsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNaLENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUNsRCxPQUFPLENBQUMsQ0FBQztRQUNYLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQTFDRCx3RUEwQ0M7QUFFRCxTQUFTLG1CQUFtQixDQUMxQixZQUFvQixFQUNwQiw2QkFBcUM7SUFFckMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSw2QkFBNkIsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFTSxLQUFLLFVBQVUsMkJBQTJCLENBQy9DLFVBQThCLEVBQzlCLFlBQW9CO0lBRXBCLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDckUsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUVwRSwrQkFBK0I7SUFDL0IsSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM3QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLGFBQWEsR0FBRyxpQkFBaUI7UUFDckMsQ0FBQyxDQUFDLE1BQU0sOEJBQThCLENBQUMsaUJBQWlCLENBQUM7UUFDekQsQ0FBQyxDQUFFLEVBQWdDLENBQUM7SUFDdEMsZ0JBQU0sQ0FBQyxLQUFLLENBQ1Ysc0JBQXNCLGlCQUFpQixLQUFLLElBQUksQ0FBQyxTQUFTLENBQ3hELGFBQWEsRUFDYixJQUFJLEVBQ0osQ0FBQyxDQUNGLEVBQUUsQ0FDSixDQUFDO0lBRUYsTUFBTSxhQUFhLEdBQUcsaUJBQWlCO1FBQ3JDLENBQUMsQ0FBQyxNQUFNLDhCQUE4QixDQUFDLGlCQUFpQixDQUFDO1FBQ3pELENBQUMsQ0FBRSxFQUFnQyxDQUFDO0lBQ3RDLGdCQUFNLENBQUMsS0FBSyxDQUNWLHNCQUFzQixpQkFBaUIsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FDckYsQ0FBQztJQUVGLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFckQsdUZBQXVGO0lBQ3ZGLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQzdDLElBQ0UsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLDZCQUE2QixDQUFDO1lBQ25FLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxFQUNuRSxDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUMsQ0FBQyx1Q0FBdUM7UUFDdkQsQ0FBQztRQUNELElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sSUFBQSw4Q0FBd0IsRUFBQyxDQUFDLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsQ0FBQyxxRUFBcUU7SUFDcEYsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsTUFBTSxrQkFBa0IsR0FBRyxnQkFBZ0I7U0FDeEMsR0FBRyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLElBQUksRUFBRSxlQUFlLENBQUMsV0FBVztRQUNqQyxPQUFPLEVBQUUsZUFBZSxDQUFDLGNBQWM7S0FDeEMsQ0FBQyxDQUFDO1NBQ0YsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNwRCxPQUFPLEVBQUUsQ0FBQztJQUNiLE9BQU8sa0JBQWtCLENBQUM7QUFDNUIsQ0FBQztBQXpERCxrRUF5REM7QUFFTSxLQUFLLFVBQVUscUNBQXFDLENBQ3pELFdBQW1CLEVBQ25CLGNBQXNCO0lBRXRCLHdDQUF3QztJQUN4QyxJQUFJLGNBQWMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNuQyxjQUFjLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsTUFBTSxHQUFHLEdBQUcsOEJBQThCLFdBQVcsSUFBSSxjQUFjLEVBQUUsQ0FBQztJQUMxRSxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBZ0MsR0FBRyxDQUFDLENBQUM7SUFFckUsSUFBSSxZQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQzlDLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakIsWUFBWSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbEUsWUFBWSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxPQUFPO1FBQ0wsV0FBVyxFQUFFLE1BQU0sQ0FBQyxJQUFJO1FBQ3hCLGNBQWMsRUFBRSxNQUFNLENBQUMsT0FBTztRQUM5QixZQUFZO1FBQ1osZUFBZSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU87UUFDOUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7UUFDOUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7S0FDL0MsQ0FBQztBQUNKLENBQUM7QUExQkQsc0ZBMEJDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcblxuaW1wb3J0IHsgSHR0cHNQcm94eUFnZW50IH0gZnJvbSBcImh0dHBzLXByb3h5LWFnZW50XCI7XG5pbXBvcnQgZmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIjtcbmltcG9ydCAqIGFzIHNlbXZlciBmcm9tIFwic2VtdmVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IFByb3ZpZGVyQ29uc3RyYWludCB9IGZyb20gXCIuL2RlcGVuZGVuY3ktbWFuYWdlclwiO1xuaW1wb3J0IHsgdmVyc2lvbk1hdGNoZXNDb25zdHJhaW50IH0gZnJvbSBcIi4vdmVyc2lvbi1jb25zdHJhaW50c1wiO1xuXG5jb25zdCBwcm94eSA9IHByb2Nlc3MuZW52Lmh0dHBfcHJveHkgfHwgcHJvY2Vzcy5lbnYuSFRUUF9QUk9YWTtcbmxldCBhZ2VudDogSHR0cHNQcm94eUFnZW50IHwgdW5kZWZpbmVkO1xuaWYgKHByb3h5KSB7XG4gIGFnZW50ID0gbmV3IEh0dHBzUHJveHlBZ2VudChwcm94eSk7XG59XG5cbi8vIHVzZXMgaHR0cHM6Ly9naXRodWIuY29tL2hhc2hpY29ycC9jZGt0Zi1yZXBvc2l0b3J5LW1hbmFnZXIvYmxvYi9tYWluL3Byb3ZpZGVyLmpzb25cbi8vIEhvd2V2ZXIsIGl0IGdvdCBjbGVhcmVkIG91dC4gV2UnbGwgbmVlZCB0byBob3N0IHRoZSBleGlzdGluZyBsaXN0IHNvbWV3aGVyZVxuLy8gY29uc3QgcHJvdmlkZXJzTWFwVXJsID0gYGh0dHBzOi8vd3d3LmNkay50Zi8ud2VsbC1rbm93bi9wcmVidWlsdC1wcm92aWRlcnMuanNvbmA7XG5jb25zdCBwcm92aWRlcnNNYXBVcmwgPVxuICBcImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9jZGt0bi1pby9jZGt0bi1yZXBvc2l0b3J5LW1hbmFnZXIvcmVmcy9oZWFkcy9tYWluL3Byb3ZpZGVyLmpzb25cIjtcbnR5cGUgUHJvdmlkZXJzTWFwID0ge1xuICBbbmFtZTogc3RyaW5nXTogc3RyaW5nO1xufTtcblxuY29uc3QgZmV0Y2hDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5hc3luYyBmdW5jdGlvbiBjYWNoZWRGZXRjaDxUPih1cmw6IHN0cmluZyk6IFByb21pc2U8VD4ge1xuICBpZiAoZmV0Y2hDYWNoZS5oYXModXJsKSkge1xuICAgIHJldHVybiBmZXRjaENhY2hlLmdldCh1cmwpIGFzIFQ7XG4gIH1cblxuICBjb25zdCByZXNwb25zZUJvZHkgPSBhd2FpdCBmZXRjaFdyYXBwZWQ8VD4odXJsKTtcbiAgZmV0Y2hDYWNoZS5zZXQodXJsLCByZXNwb25zZUJvZHkpO1xuXG4gIHJldHVybiByZXNwb25zZUJvZHkgYXMgVDtcbn1cblxuLy8gRm9yIHRlc3RpbmcgcHVycG9zZXMgb25seVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc2V0RmV0Y2hDYWNoZSgpIHtcbiAgZmV0Y2hDYWNoZS5jbGVhcigpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaFdyYXBwZWQ8VD4odXJsOiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcbiAgbGV0IHJlc3BvbnNlO1xuICB0cnkge1xuICAgIHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICBhZ2VudCxcbiAgICAgIGhlYWRlcnM6IHsgXCJVc2VyLUFnZW50XCI6IFwiT3BlbkNvbnN0cnVjdHMvY2RrdG4tY2xpXCIgfSxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIEZldGNoIG9ubHkgZmFpbHMgaGVyZSBiZWNhdXNlIG9mIGNvbm5lY3Rpdml0eSBpc3N1ZXNcbiAgICBsb2dnZXIuZXJyb3IoXG4gICAgICBcIlVuYWJsZSB0byByZXF1ZXN0IHByZS1idWlsdCBwcm92aWRlciBpbmZvcm1hdGlvbjogTmV0d29yayBlcnJvciwgcGxlYXNlIGNoZWNrIGlmIHlvdSdyZSBjb25uZWN0ZWQgdG8gdGhlIGludGVybmV0IGFuZCB0cnkgYWdhaW5cIixcbiAgICApO1xuXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBlcnJvclwiKTtcbiAgfVxuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID49IDUwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlVuZXhwZWN0ZWQgZXJyb3Igd2hpbGUgZmluZGluZyBwcmUtYnVpbHQgcHJvdmlkZXIuIFBsZWFzZSB0cnkgYWdhaW4uXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJlLWJ1aWx0IHByb3ZpZGVyIGluZm9ybWF0aW9uIG5vdCBmb3VuZGApO1xuICAgIH1cbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID49IDQwMCkge1xuICAgICAgY29uc3QgcmVzcG9uc2VUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlJ3JlIHNlbmRpbmcgYSBiYWQgcmVxdWVzdC4gV2Ugc2hvdWxkIHJlY29yZCB0aGlzIGluIHNlbnRyeSB0b28uXG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgIGBSZWNlaXZlZCAke3Jlc3BvbnNlLnN0YXR1c30gcmVzcG9uc2UgZnJvbSAke3VybH06ICR7cmVzcG9uc2VUZXh0fWAsXG4gICAgICApO1xuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVW5leHBlY3RlZCBlcnJvciB3aGlsZSBmaW5kaW5nIHByZS1idWlsdCBwcm92aWRlci4gUGxlYXNlIHRyeSBhZ2Fpbi5cIixcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKSBhcyBQcm9taXNlPFQ+O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QWxsUHJlYnVpbHRQcm92aWRlcnMoKSB7XG4gIHJldHVybiBjYWNoZWRGZXRjaDxQcm92aWRlcnNNYXA+KHByb3ZpZGVyc01hcFVybCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXROcG1QYWNrYWdlTmFtZShcbiAgY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50LFxuICB1c2VDZGt0bjogYm9vbGVhbixcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHByb3ZpZGVycyA9IGF3YWl0IGdldEFsbFByZWJ1aWx0UHJvdmlkZXJzKCk7XG5cbiAgY29uc3QgZW50cnkgPSBPYmplY3QuZW50cmllcyhwcm92aWRlcnMpLmZpbmQoXG4gICAgKFssIHBdKSA9PlxuICAgICAgUHJvdmlkZXJDb25zdHJhaW50LmZyb21Db25maWdFbnRyeShwKS5zb3VyY2UudG9Mb3dlckNhc2UoKSA9PT1cbiAgICAgIGNvbnN0cmFpbnQuc291cmNlLnRvTG93ZXJDYXNlKCksXG4gICk7XG4gIGlmICghZW50cnkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBubyBwcmUtYnVpbHQgcHJvdmlkZXIgZm91bmQgZm9yIHRoaXMgY29uc3RyYWludFxuICB9XG4gIGNvbnN0IG5hbWUgPSBlbnRyeVswXTtcblxuICByZXR1cm4gdXNlQ2RrdG4gPyBgQGNka3RuL3Byb3ZpZGVyLSR7bmFtZX1gIDogYEBjZGt0Zi9wcm92aWRlci0ke25hbWV9YDtcbn1cblxudHlwZSBQYWNrYWdlSnNvbiA9IHtcbiAgLy8gaGFzIGJlZW4gaW50cm9kdWNlZCB2aWEgaHR0cHM6Ly9naXRodWIuY29tL2hhc2hpY29ycC9jZGt0Zi1wcm92aWRlci1wcm9qZWN0L3B1bGwvMjE3XG4gIGNka3RmPzoge1xuICAgIC8vIHByb3ZpZGVyIGlzIG9wdGlvbmFsIGFzIHdlIG1pZ2h0IHNldCBvdGhlciBjZGt0ZiByZWxhdGVkIGZpZWxkcyBpbiB0aGUgZnV0dXJlXG4gICAgLy8gZm9yIG90aGVyIGxpYnMgKGkuZS4gY29uc3RydWN0IHBhY2thZ2VzKSB3aGlsZSBzdGlsbCB1c2luZyB0aGUgY2RrdGYga2V5XG4gICAgcHJvdmlkZXI/OiB7XG4gICAgICAvKipcbiAgICAgICAqIG5hbWUgb2YgdGhlIHByb3ZpZGVyLCB3aWxsIHJlc29sdmUgdG8gdGhlIGZ1bGwgbmFtZSBhcyBpbiB0aGUgVGVycmFmb3JtIHNjaGVtYS5cbiAgICAgICAqIGUuZy4gcmVnaXN0cnkudGVycmFmb3JtLmlvL2hhc2hpY29ycC9hd3NcbiAgICAgICAqL1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgLyoqXG4gICAgICAgKiB0aGUgYWN0dWFsIHZlcnNpb24gdGhhdCB3YXMgdXNlZCB0byBidWlsZCB0aGUgcHJvdmlkZXJcbiAgICAgICAqIGUuZy4gNC4xMi4xXG4gICAgICAgKi9cbiAgICAgIHZlcnNpb246IHN0cmluZztcbiAgICB9O1xuICB9O1xuICBwZWVyRGVwZW5kZW5jaWVzPzoge1xuICAgIGNka3RmPzogc3RyaW5nO1xuICAgIGNka3RuPzogc3RyaW5nO1xuICB9O1xuICByZXBvc2l0b3J5Pzoge1xuICAgIHR5cGU6IHN0cmluZztcbiAgICB1cmw6IHN0cmluZztcbiAgfTtcbiAgLy8gLi4uIG1hbnkgbW9yZSBmaWVsZHNcbn07XG50eXBlIE5wbVBhY2thZ2VSZXN1bHQgPSB7XG4gIG5hbWU6IHN0cmluZzsgLy8gZS5nLiBcIkBjZGt0Zi9wcm92aWRlci1hd3NcIlxuICB2ZXJzaW9uczoge1xuICAgIFt2ZXJzaW9uOiBzdHJpbmddOiBQYWNrYWdlSnNvbjtcbiAgfTtcbiAgcmVwb3NpdG9yeT86IHtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdXJsOiBzdHJpbmc7XG4gIH07XG59O1xuXG50eXBlIE5wbVBhY2thZ2VTaW5nbGVWZXJzaW9uUmVzdWx0ID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgY2RrdGY6IHtcbiAgICBwcm92aWRlcjoge1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIH07XG4gIH07XG4gIHBlZXJEZXBlbmRlbmNpZXM6IHtcbiAgICBbbmFtZTogc3RyaW5nXTogc3RyaW5nO1xuICB9O1xufTtcblxudHlwZSBQcmVidWlsdFByb3ZpZGVyVmVyc2lvbiA9IHtcbiAgcGFja2FnZVZlcnNpb246IHN0cmluZzsgLy8gZS5nLiBcIjcuMC40MlwiXG4gIHByb3ZpZGVyVmVyc2lvbjogc3RyaW5nOyAvLyBlLmcuIFwiNC4xMi4xXCJcbiAgY2RrdGZQZWVyRGVwZW5kZW5jeUNvbnN0cmFpbnQ6IHN0cmluZzsgLy8gZS5nLiBcIl4xMC4wLjBcIlxuICBjZGt0blBlZXJEZXBlbmRlbmN5Q29uc3RyYWludDogc3RyaW5nO1xuICBwYWNrYWdlTmFtZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFByZWJ1aWx0UHJvdmlkZXJSZXBvc2l0b3J5TmFtZShcbiAgcGFja2FnZU5hbWU6IHN0cmluZyxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHVybCA9IGBodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy8ke3BhY2thZ2VOYW1lfWA7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNhY2hlZEZldGNoPE5wbVBhY2thZ2VSZXN1bHQ+KHVybCk7XG5cbiAgY29uc3QgcmVwb3NpdG9yeVVybCA9IHJlc3VsdD8ucmVwb3NpdG9yeT8udXJsO1xuXG4gIGlmICghcmVwb3NpdG9yeVVybCkgcmV0dXJuIFwiXCI7XG5cbiAgY29uc3QgcmVwb3NpdG9yeVJlZ2V4ID0gL15naXRcXCtodHRwczpcXC9cXC8oZ2l0aHViLmNvbVxcLy4qKVxcLmdpdCQvO1xuICBjb25zdCBtYXRjaCA9IHJlcG9zaXRvcnlSZWdleC5leGVjKHJlcG9zaXRvcnlVcmwpO1xuXG4gIGlmICghbWF0Y2gpIHJldHVybiBcIlwiO1xuXG4gIHJldHVybiBtYXRjaFsxXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEFsbFByZWJ1aWx0UHJvdmlkZXJWZXJzaW9ucyhcbiAgcGFja2FnZU5hbWU6IHN0cmluZyxcbik6IFByb21pc2U8UHJlYnVpbHRQcm92aWRlclZlcnNpb25bXT4ge1xuICBjb25zdCB1cmwgPSBgaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvJHtwYWNrYWdlTmFtZX1gO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBjYWNoZWRGZXRjaDxOcG1QYWNrYWdlUmVzdWx0Pih1cmwpO1xuXG4gIGNvbnN0IHZlcnNpb25zID0gT2JqZWN0LmVudHJpZXMocmVzdWx0LnZlcnNpb25zKVxuICAgIC5tYXAoKFt2ZXJzaW9uLCBwYWNrYWdlSnNvbl0pID0+IHtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gcGFja2FnZUpzb24uY2RrdGY/LnByb3ZpZGVyO1xuICAgICAgaWYgKFxuICAgICAgICAhcHJvdmlkZXIgfHxcbiAgICAgICAgKCFwYWNrYWdlSnNvbi5wZWVyRGVwZW5kZW5jaWVzPy5jZGt0ZiAmJlxuICAgICAgICAgICFwYWNrYWdlSnNvbi5wZWVyRGVwZW5kZW5jaWVzPy5jZGt0bilcbiAgICAgICkge1xuICAgICAgICBsb2dnZXIudHJhY2UoXG4gICAgICAgICAgYHNraXBwaW5nIHZlcnNpb24gJHt2ZXJzaW9ufSBvZiAke3BhY2thZ2VOYW1lfSBhcyBpdCBkb2VzIG5vdCBoYXZlIGEgY2RrdGYucHJvdmlkZXIgb3IgcGVlckRlcGVuZGVuY2llcy5jZGt0Zi9jZGt0biBpbiBwYWNrYWdlLmpzb25gLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFja2FnZU5hbWUsXG4gICAgICAgIHBhY2thZ2VWZXJzaW9uOiB2ZXJzaW9uLFxuICAgICAgICBwcm92aWRlclZlcnNpb246IHByb3ZpZGVyLnZlcnNpb24sXG4gICAgICAgIGNka3RmUGVlckRlcGVuZGVuY3lDb25zdHJhaW50OiBwYWNrYWdlSnNvbi5wZWVyRGVwZW5kZW5jaWVzLmNka3RmLFxuICAgICAgICBjZGt0blBlZXJEZXBlbmRlbmN5Q29uc3RyYWludDogcGFja2FnZUpzb24ucGVlckRlcGVuZGVuY2llcy5jZGt0bixcbiAgICAgIH07XG4gICAgfSlcbiAgICAuZmlsdGVyKCh2KSA9PiB2ICE9PSB1bmRlZmluZWQpIGFzIFByZWJ1aWx0UHJvdmlkZXJWZXJzaW9uW107XG5cbiAgLy8gbGF0ZXN0IHZlcnNpb24gZmlyc3QsIHNvcnRlZCBieSBwYWNrYWdlVmVyc2lvbiBhcyB0aGF0XG4gIC8vIG9uZSBhbHdheXMgaW5jcmVhc2VzIHdoaWxlIHRoZSBwcm92aWRlclZlcnNpb24gbWF5IG5vdFxuICB2ZXJzaW9ucy5zb3J0KChhLCBiKSA9PiB7XG4gICAgaWYgKHNlbXZlci5ndChhLnBhY2thZ2VWZXJzaW9uLCBiLnBhY2thZ2VWZXJzaW9uKSkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBpZiAoc2VtdmVyLmx0KGEucGFja2FnZVZlcnNpb24sIGIucGFja2FnZVZlcnNpb24pKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH0pO1xuXG4gIHJldHVybiB2ZXJzaW9ucztcbn1cblxuZnVuY3Rpb24gY2RrdGZWZXJzaW9uTWF0Y2hlcyhcbiAgY2RrdGZWZXJzaW9uOiBzdHJpbmcsXG4gIGNka3RmUGVlckRlcGVuZGVuY3lDb25zdHJhaW50OiBzdHJpbmcsXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIHNlbXZlci5zYXRpc2ZpZXMoY2RrdGZWZXJzaW9uLCBjZGt0ZlBlZXJEZXBlbmRlbmN5Q29uc3RyYWludCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQcmVidWlsdFByb3ZpZGVyVmVyc2lvbnMoXG4gIGNvbnN0cmFpbnQ6IFByb3ZpZGVyQ29uc3RyYWludCxcbiAgY2RrdGZWZXJzaW9uOiBzdHJpbmcsXG4pOiBQcm9taXNlPHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfVtdIHwgbnVsbD4ge1xuICBjb25zdCBjZGt0ZlByb3ZpZGVyTmFtZSA9IGF3YWl0IGdldE5wbVBhY2thZ2VOYW1lKGNvbnN0cmFpbnQsIGZhbHNlKTtcbiAgY29uc3QgY2RrdG5Qcm92aWRlck5hbWUgPSBhd2FpdCBnZXROcG1QYWNrYWdlTmFtZShjb25zdHJhaW50LCB0cnVlKTtcblxuICAvLyBubyBwcmUtYnVpbHQgcHJvdmlkZXIgZXhpc3RzXG4gIGlmICghY2RrdGZQcm92aWRlck5hbWUgJiYgIWNka3RuUHJvdmlkZXJOYW1lKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjZGt0ZlZlcnNpb25zID0gY2RrdGZQcm92aWRlck5hbWVcbiAgICA/IGF3YWl0IGdldEFsbFByZWJ1aWx0UHJvdmlkZXJWZXJzaW9ucyhjZGt0ZlByb3ZpZGVyTmFtZSlcbiAgICA6IChbXSBhcyBQcmVidWlsdFByb3ZpZGVyVmVyc2lvbltdKTtcbiAgbG9nZ2VyLmRlYnVnKFxuICAgIGBGb3VuZCB2ZXJzaW9ucyBmb3IgJHtjZGt0ZlByb3ZpZGVyTmFtZX06ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICBjZGt0ZlZlcnNpb25zLFxuICAgICAgbnVsbCxcbiAgICAgIDIsXG4gICAgKX1gLFxuICApO1xuXG4gIGNvbnN0IGNka3RuVmVyc2lvbnMgPSBjZGt0blByb3ZpZGVyTmFtZVxuICAgID8gYXdhaXQgZ2V0QWxsUHJlYnVpbHRQcm92aWRlclZlcnNpb25zKGNka3RuUHJvdmlkZXJOYW1lKVxuICAgIDogKFtdIGFzIFByZWJ1aWx0UHJvdmlkZXJWZXJzaW9uW10pO1xuICBsb2dnZXIuZGVidWcoXG4gICAgYEZvdW5kIHZlcnNpb25zIGZvciAke2Nka3RuUHJvdmlkZXJOYW1lfTogJHtKU09OLnN0cmluZ2lmeShjZGt0blZlcnNpb25zLCBudWxsLCAyKX1gLFxuICApO1xuXG4gIGNvbnN0IHZlcnNpb25zID0gY2RrdGZWZXJzaW9ucy5jb25jYXQoY2RrdG5WZXJzaW9ucyk7XG5cbiAgLy8gZmluZCBmaXJzdCB0aGUgdmVyc2lvbiB0aGF0IG1hdGNoZXMgdGhlIHJlcXVlc3RlZCBwcm92aWRlciB2ZXJzaW9uIGFuZCBjZGt0ZiB2ZXJzaW9uXG4gIGNvbnN0IG1hdGNoaW5nVmVyc2lvbnMgPSB2ZXJzaW9ucy5maWx0ZXIoKHYpID0+IHtcbiAgICBpZiAoXG4gICAgICAhY2RrdGZWZXJzaW9uTWF0Y2hlcyhjZGt0ZlZlcnNpb24sIHYuY2RrdGZQZWVyRGVwZW5kZW5jeUNvbnN0cmFpbnQpICYmXG4gICAgICAhY2RrdGZWZXJzaW9uTWF0Y2hlcyhjZGt0ZlZlcnNpb24sIHYuY2RrdG5QZWVyRGVwZW5kZW5jeUNvbnN0cmFpbnQpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7IC8vIHNraXAgaWYgY2RrdGYgdmVyc2lvbiBkb2VzIG5vdCBtYXRjaFxuICAgIH1cbiAgICBpZiAoY29uc3RyYWludC52ZXJzaW9uKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbk1hdGNoZXNDb25zdHJhaW50KHYucHJvdmlkZXJWZXJzaW9uLCBjb25zdHJhaW50LnZlcnNpb24pO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTsgLy8gaWYgbm8gdmVyc2lvbiBjb25zdHJhaW50IGlzIHBhc3NlZCwgcmV0dXJuIHRydWUgb24gdGhlIGZpcnN0IG1hdGNoXG4gIH0pO1xuXG4gIGlmICghbWF0Y2hpbmdWZXJzaW9ucy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBucG1QYWNrYWdlVmVyc2lvbnMgPSBtYXRjaGluZ1ZlcnNpb25zXG4gICAgLm1hcCgobWF0Y2hpbmdWZXJzaW9uKSA9PiAoe1xuICAgICAgbmFtZTogbWF0Y2hpbmdWZXJzaW9uLnBhY2thZ2VOYW1lLFxuICAgICAgdmVyc2lvbjogbWF0Y2hpbmdWZXJzaW9uLnBhY2thZ2VWZXJzaW9uLFxuICAgIH0pKVxuICAgIC5zb3J0KChhLCBiKSA9PiBzZW12ZXIuY29tcGFyZShhLnZlcnNpb24sIGIudmVyc2lvbikpXG4gICAgLnJldmVyc2UoKTtcbiAgcmV0dXJuIG5wbVBhY2thZ2VWZXJzaW9ucztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFByZWJ1aWx0UHJvdmlkZXJWZXJzaW9uSW5mb3JtYXRpb24oXG4gIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gIHBhY2thZ2VWZXJzaW9uOiBzdHJpbmcsXG4pOiBQcm9taXNlPGFueT4ge1xuICAvLyBHbyBwYWNrYWdlcyBpbmNsdWRlIGFuIGV4dHJhIGB2WC5ZLlpgXG4gIGlmIChwYWNrYWdlVmVyc2lvbi5zdGFydHNXaXRoKFwidlwiKSkge1xuICAgIHBhY2thZ2VWZXJzaW9uID0gcGFja2FnZVZlcnNpb24uc2xpY2UoMSk7XG4gIH1cblxuICBjb25zdCB1cmwgPSBgaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvJHtwYWNrYWdlTmFtZX0vJHtwYWNrYWdlVmVyc2lvbn1gO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBjYWNoZWRGZXRjaDxOcG1QYWNrYWdlU2luZ2xlVmVyc2lvblJlc3VsdD4odXJsKTtcblxuICBsZXQgcHJvdmlkZXJOYW1lID0gcmVzdWx0LmNka3RmLnByb3ZpZGVyLm5hbWU7XG4gIGlmIChwcm92aWRlck5hbWUpIHtcbiAgICBwcm92aWRlck5hbWUgPSBwcm92aWRlck5hbWUucmVwbGFjZShcInJlZ2lzdHJ5LnRlcnJhZm9ybS5pby9cIiwgXCJcIik7XG4gICAgcHJvdmlkZXJOYW1lID0gcHJvdmlkZXJOYW1lLnJlcGxhY2UoXCJoYXNoaWNvcnAvXCIsIFwiXCIpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYWNrYWdlTmFtZTogcmVzdWx0Lm5hbWUsXG4gICAgcGFja2FnZVZlcnNpb246IHJlc3VsdC52ZXJzaW9uLFxuICAgIHByb3ZpZGVyTmFtZSxcbiAgICBwcm92aWRlclZlcnNpb246IHJlc3VsdC5jZGt0Zi5wcm92aWRlci52ZXJzaW9uLFxuICAgIGNka3RmVmVyc2lvbjogcmVzdWx0LnBlZXJEZXBlbmRlbmNpZXNbXCJjZGt0ZlwiXSxcbiAgICBjZGt0blZlcnNpb246IHJlc3VsdC5wZWVyRGVwZW5kZW5jaWVzW1wiY2RrdG5cIl0sXG4gIH07XG59XG4iXX0=
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlYnVpbHQtcHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicHJlYnVpbHQtcHJvdmlkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVuQyx5REFBb0Q7QUFDcEQsNERBQStCO0FBQy9CLCtDQUFpQztBQUNqQyw0Q0FBd0M7QUFDeEMsNkRBQTBEO0FBQzFELCtEQUFpRTtBQUVqRSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztBQUMvRCxJQUFJLEtBQWtDLENBQUM7QUFDdkMsSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUNWLEtBQUssR0FBRyxJQUFJLG1DQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELHFGQUFxRjtBQUNyRiw4RUFBOEU7QUFDOUUsb0ZBQW9GO0FBQ3BGLE1BQU0sZUFBZSxHQUNuQixtR0FBbUcsQ0FBQztBQUt0RyxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO0FBQzFDLEtBQUssVUFBVSxXQUFXLENBQUksR0FBVztJQUN2QyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN4QixPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLE1BQU0sWUFBWSxDQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRWxDLE9BQU8sWUFBaUIsQ0FBQztBQUMzQixDQUFDO0FBRUQsNEJBQTRCO0FBQ3JCLEtBQUssVUFBVSxlQUFlO0lBQ25DLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQixDQUFDO0FB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Q0FBQztJQUVELE9BQU87UUFDTCxXQUFXLEVBQUUsTUFBTSxDQUFDLElBQUk7UUFDeEIsY0FBYyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1FBQzlCLFlBQVk7UUFDWixlQUFlLEVBQ2IsTUFBQSxNQUFBLE1BQU0sQ0FBQyxLQUFLLDBDQUFFLFFBQVEsQ0FBQyxPQUFPLG1DQUFJLE1BQUEsTUFBTSxDQUFDLEtBQUssMENBQUUsUUFBUSxDQUFDLE9BQU87UUFDbEUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7UUFDOUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7S0FDL0MsQ0FBQztBQUNKLENBQUM7QUEzQkQsc0ZBMkJDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcblxuaW1wb3J0IHsgSHR0cHNQcm94eUFnZW50IH0gZnJvbSBcImh0dHBzLXByb3h5LWFnZW50XCI7XG5pbXBvcnQgZmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIjtcbmltcG9ydCAqIGFzIHNlbXZlciBmcm9tIFwic2VtdmVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IFByb3ZpZGVyQ29uc3RyYWludCB9IGZyb20gXCIuL2RlcGVuZGVuY3ktbWFuYWdlclwiO1xuaW1wb3J0IHsgdmVyc2lvbk1hdGNoZXNDb25zdHJhaW50IH0gZnJvbSBcIi4vdmVyc2lvbi1jb25zdHJhaW50c1wiO1xuXG5jb25zdCBwcm94eSA9IHByb2Nlc3MuZW52Lmh0dHBfcHJveHkgfHwgcHJvY2Vzcy5lbnYuSFRUUF9QUk9YWTtcbmxldCBhZ2VudDogSHR0cHNQcm94eUFnZW50IHwgdW5kZWZpbmVkO1xuaWYgKHByb3h5KSB7XG4gIGFnZW50ID0gbmV3IEh0dHBzUHJveHlBZ2VudChwcm94eSk7XG59XG5cbi8vIHVzZXMgaHR0cHM6Ly9naXRodWIuY29tL2hhc2hpY29ycC9jZGt0Zi1yZXBvc2l0b3J5LW1hbmFnZXIvYmxvYi9tYWluL3Byb3ZpZGVyLmpzb25cbi8vIEhvd2V2ZXIsIGl0IGdvdCBjbGVhcmVkIG91dC4gV2UnbGwgbmVlZCB0byBob3N0IHRoZSBleGlzdGluZyBsaXN0IHNvbWV3aGVyZVxuLy8gY29uc3QgcHJvdmlkZXJzTWFwVXJsID0gYGh0dHBzOi8vd3d3LmNkay50Zi8ud2VsbC1rbm93bi9wcmVidWlsdC1wcm92aWRlcnMuanNvbmA7XG5jb25zdCBwcm92aWRlcnNNYXBVcmwgPVxuICBcImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9jZGt0bi1pby9jZGt0bi1yZXBvc2l0b3J5LW1hbmFnZXIvcmVmcy9oZWFkcy9tYWluL3Byb3ZpZGVyLmpzb25cIjtcbnR5cGUgUHJvdmlkZXJzTWFwID0ge1xuICBbbmFtZTogc3RyaW5nXTogc3RyaW5nO1xufTtcblxuY29uc3QgZmV0Y2hDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5hc3luYyBmdW5jdGlvbiBjYWNoZWRGZXRjaDxUPih1cmw6IHN0cmluZyk6IFByb21pc2U8VD4ge1xuICBpZiAoZmV0Y2hDYWNoZS5oYXModXJsKSkge1xuICAgIHJldHVybiBmZXRjaENhY2hlLmdldCh1cmwpIGFzIFQ7XG4gIH1cblxuICBjb25zdCByZXNwb25zZUJvZHkgPSBhd2FpdCBmZXRjaFdyYXBwZWQ8VD4odXJsKTtcbiAgZmV0Y2hDYWNoZS5zZXQodXJsLCByZXNwb25zZUJvZHkpO1xuXG4gIHJldHVybiByZXNwb25zZUJvZHkgYXMgVDtcbn1cblxuLy8gRm9yIHRlc3RpbmcgcHVycG9zZXMgb25seVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc2V0RmV0Y2hDYWNoZSgpIHtcbiAgZmV0Y2hDYWNoZS5jbGVhcigpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaFdyYXBwZWQ8VD4odXJsOiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcbiAgbGV0IHJlc3BvbnNlO1xuICB0cnkge1xuICAgIHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICBhZ2VudCxcbiAgICAgIGhlYWRlcnM6IHsgXCJVc2VyLUFnZW50XCI6IFwiT3BlbkNvbnN0cnVjdHMvY2RrdG4tY2xpXCIgfSxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIEZldGNoIG9ubHkgZmFpbHMgaGVyZSBiZWNhdXNlIG9mIGNvbm5lY3Rpdml0eSBpc3N1ZXNcbiAgICBsb2dnZXIuZXJyb3IoXG4gICAgICBcIlVuYWJsZSB0byByZXF1ZXN0IHByZS1idWlsdCBwcm92aWRlciBpbmZvcm1hdGlvbjogTmV0d29yayBlcnJvciwgcGxlYXNlIGNoZWNrIGlmIHlvdSdyZSBjb25uZWN0ZWQgdG8gdGhlIGludGVybmV0IGFuZCB0cnkgYWdhaW5cIixcbiAgICApO1xuXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBlcnJvclwiKTtcbiAgfVxuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID49IDUwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlVuZXhwZWN0ZWQgZXJyb3Igd2hpbGUgZmluZGluZyBwcmUtYnVpbHQgcHJvdmlkZXIuIFBsZWFzZSB0cnkgYWdhaW4uXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJlLWJ1aWx0IHByb3ZpZGVyIGluZm9ybWF0aW9uIG5vdCBmb3VuZGApO1xuICAgIH1cbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID49IDQwMCkge1xuICAgICAgY29uc3QgcmVzcG9uc2VUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlJ3JlIHNlbmRpbmcgYSBiYWQgcmVxdWVzdC4gV2Ugc2hvdWxkIHJlY29yZCB0aGlzIGluIHNlbnRyeSB0b28uXG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgIGBSZWNlaXZlZCAke3Jlc3BvbnNlLnN0YXR1c30gcmVzcG9uc2UgZnJvbSAke3VybH06ICR7cmVzcG9uc2VUZXh0fWAsXG4gICAgICApO1xuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVW5leHBlY3RlZCBlcnJvciB3aGlsZSBmaW5kaW5nIHByZS1idWlsdCBwcm92aWRlci4gUGxlYXNlIHRyeSBhZ2Fpbi5cIixcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKSBhcyBQcm9taXNlPFQ+O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QWxsUHJlYnVpbHRQcm92aWRlcnMoKSB7XG4gIHJldHVybiBjYWNoZWRGZXRjaDxQcm92aWRlcnNNYXA+KHByb3ZpZGVyc01hcFVybCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXROcG1QYWNrYWdlTmFtZShcbiAgY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50LFxuICB1c2VDZGt0bjogYm9vbGVhbixcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHByb3ZpZGVycyA9IGF3YWl0IGdldEFsbFByZWJ1aWx0UHJvdmlkZXJzKCk7XG5cbiAgY29uc3QgZW50cnkgPSBPYmplY3QuZW50cmllcyhwcm92aWRlcnMpLmZpbmQoXG4gICAgKFssIHBdKSA9PlxuICAgICAgUHJvdmlkZXJDb25zdHJhaW50LmZyb21Db25maWdFbnRyeShwKS5zb3VyY2UudG9Mb3dlckNhc2UoKSA9PT1cbiAgICAgIGNvbnN0cmFpbnQuc291cmNlLnRvTG93ZXJDYXNlKCksXG4gICk7XG4gIGlmICghZW50cnkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBubyBwcmUtYnVpbHQgcHJvdmlkZXIgZm91bmQgZm9yIHRoaXMgY29uc3RyYWludFxuICB9XG4gIGNvbnN0IG5hbWUgPSBlbnRyeVswXTtcblxuICByZXR1cm4gdXNlQ2RrdG4gPyBgQGNka3RuL3Byb3ZpZGVyLSR7bmFtZX1gIDogYEBjZGt0Zi9wcm92aWRlci0ke25hbWV9YDtcbn1cblxudHlwZSBQYWNrYWdlSnNvbiA9IHtcbiAgLy8gaGFzIGJlZW4gaW50cm9kdWNlZCB2aWEgaHR0cHM6Ly9naXRodWIuY29tL2hhc2hpY29ycC9jZGt0Zi1wcm92aWRlci1wcm9qZWN0L3B1bGwvMjE3XG4gIGNka3RmPzoge1xuICAgIC8vIHByb3ZpZGVyIGlzIG9wdGlvbmFsIGFzIHdlIG1pZ2h0IHNldCBvdGhlciBjZGt0ZiByZWxhdGVkIGZpZWxkcyBpbiB0aGUgZnV0dXJlXG4gICAgLy8gZm9yIG90aGVyIGxpYnMgKGkuZS4gY29uc3RydWN0IHBhY2thZ2VzKSB3aGlsZSBzdGlsbCB1c2luZyB0aGUgY2RrdGYga2V5XG4gICAgcHJvdmlkZXI/OiB7XG4gICAgICAvKipcbiAgICAgICAqIG5hbWUgb2YgdGhlIHByb3ZpZGVyLCB3aWxsIHJlc29sdmUgdG8gdGhlIGZ1bGwgbmFtZSBhcyBpbiB0aGUgVGVycmFmb3JtIHNjaGVtYS5cbiAgICAgICAqIGUuZy4gcmVnaXN0cnkudGVycmFmb3JtLmlvL2hhc2hpY29ycC9hd3NcbiAgICAgICAqL1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgLyoqXG4gICAgICAgKiB0aGUgYWN0dWFsIHZlcnNpb24gdGhhdCB3YXMgdXNlZCB0byBidWlsZCB0aGUgcHJvdmlkZXJcbiAgICAgICAqIGUuZy4gNC4xMi4xXG4gICAgICAgKi9cbiAgICAgIHZlcnNpb246IHN0cmluZztcbiAgICB9O1xuICB9O1xuICAvLyBQcmUtYnVpbHQgcHJvdmlkZXJzIHVzaW5nIGNka3RuIG5vdyBnZW5lcmF0ZSBwcm92aWRlciBpbmZvcm1hdGlvbiB1bmRlciBjZGt0biBrZXlcbiAgLy8gQXQgc29tZSBwb2ludCBzdXBwb3J0IGZvciB0aGUgY2RrdGYga2V5IHdpbGwgYmUgZHJvcHBlZFxuICBjZGt0bj86IHtcbiAgICAvLyBwcm92aWRlciBpcyBvcHRpb25hbCBhcyB3ZSBtaWdodCBzZXQgb3RoZXIgY2RrdG4gcmVsYXRlZCBmaWVsZHMgaW4gdGhlIGZ1dHVyZVxuICAgIC8vIGZvciBvdGhlciBsaWJzIChpLmUuIGNvbnN0cnVjdCBwYWNrYWdlcykgd2hpbGUgc3RpbGwgdXNpbmcgdGhlIGNka3RuIGtleVxuICAgIHByb3ZpZGVyPzoge1xuICAgICAgLyoqXG4gICAgICAgKiBuYW1lIG9mIHRoZSBwcm92aWRlciwgd2lsbCByZXNvbHZlIHRvIHRoZSBmdWxsIG5hbWUgYXMgaW4gdGhlIFRlcnJhZm9ybSBzY2hlbWEuXG4gICAgICAgKiBlLmcuIHJlZ2lzdHJ5LnRlcnJhZm9ybS5pby9oYXNoaWNvcnAvYXdzXG4gICAgICAgKi9cbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIC8qKlxuICAgICAgICogdGhlIGFjdHVhbCB2ZXJzaW9uIHRoYXQgd2FzIHVzZWQgdG8gYnVpbGQgdGhlIHByb3ZpZGVyXG4gICAgICAgKiBlLmcuIDQuMTIuMVxuICAgICAgICovXG4gICAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbiAgcGVlckRlcGVuZGVuY2llcz86IHtcbiAgICBjZGt0Zj86IHN0cmluZztcbiAgICBjZGt0bj86IHN0cmluZztcbiAgfTtcbiAgcmVwb3NpdG9yeT86IHtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdXJsOiBzdHJpbmc7XG4gIH07XG4gIC8vIC4uLiBtYW55IG1vcmUgZmllbGRzXG59O1xudHlwZSBOcG1QYWNrYWdlUmVzdWx0ID0ge1xuICBuYW1lOiBzdHJpbmc7IC8vIGUuZy4gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCJcbiAgdmVyc2lvbnM6IHtcbiAgICBbdmVyc2lvbjogc3RyaW5nXTogUGFja2FnZUpzb247XG4gIH07XG4gIHJlcG9zaXRvcnk/OiB7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHVybDogc3RyaW5nO1xuICB9O1xufTtcblxudHlwZSBOcG1QYWNrYWdlU2luZ2xlVmVyc2lvblJlc3VsdCA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGNka3RmPzoge1xuICAgIHByb3ZpZGVyOiB7XG4gICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbiAgY2RrdG4/OiB7XG4gICAgcHJvdmlkZXI6IHtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIHZlcnNpb246IHN0cmluZztcbiAgICB9O1xuICB9O1xuICBwZWVyRGVwZW5kZW5jaWVzOiB7XG4gICAgW25hbWU6IHN0cmluZ106IHN0cmluZztcbiAgfTtcbn07XG5cbnR5cGUgUHJlYnVpbHRQcm92aWRlclZlcnNpb24gPSB7XG4gIHBhY2thZ2VWZXJzaW9uOiBzdHJpbmc7IC8vIGUuZy4gXCI3LjAuNDJcIlxuICBwcm92aWRlclZlcnNpb246IHN0cmluZzsgLy8gZS5nLiBcIjQuMTIuMVwiXG4gIGNka3RmUGVlckRlcGVuZGVuY3lDb25zdHJhaW50OiBzdHJpbmc7IC8vIGUuZy4gXCJeMTAuMC4wXCJcbiAgY2RrdG5QZWVyRGVwZW5kZW5jeUNvbnN0cmFpbnQ6IHN0cmluZztcbiAgcGFja2FnZU5hbWU6IHN0cmluZztcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQcmVidWlsdFByb3ZpZGVyUmVwb3NpdG9yeU5hbWUoXG4gIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB1cmwgPSBgaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvJHtwYWNrYWdlTmFtZX1gO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBjYWNoZWRGZXRjaDxOcG1QYWNrYWdlUmVzdWx0Pih1cmwpO1xuXG4gIGNvbnN0IHJlcG9zaXRvcnlVcmwgPSByZXN1bHQ/LnJlcG9zaXRvcnk/LnVybDtcblxuICBpZiAoIXJlcG9zaXRvcnlVcmwpIHJldHVybiBcIlwiO1xuXG4gIGNvbnN0IHJlcG9zaXRvcnlSZWdleCA9IC9eZ2l0XFwraHR0cHM6XFwvXFwvKGdpdGh1Yi5jb21cXC8uKilcXC5naXQkLztcbiAgY29uc3QgbWF0Y2ggPSByZXBvc2l0b3J5UmVnZXguZXhlYyhyZXBvc2l0b3J5VXJsKTtcblxuICBpZiAoIW1hdGNoKSByZXR1cm4gXCJcIjtcblxuICByZXR1cm4gbWF0Y2hbMV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBbGxQcmVidWlsdFByb3ZpZGVyVmVyc2lvbnMoXG4gIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPFByZWJ1aWx0UHJvdmlkZXJWZXJzaW9uW10+IHtcbiAgY29uc3QgdXJsID0gYGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLyR7cGFja2FnZU5hbWV9YDtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2FjaGVkRmV0Y2g8TnBtUGFja2FnZVJlc3VsdD4odXJsKTtcblxuICBjb25zdCB2ZXJzaW9ucyA9IE9iamVjdC5lbnRyaWVzKHJlc3VsdC52ZXJzaW9ucylcbiAgICAubWFwKChbdmVyc2lvbiwgcGFja2FnZUpzb25dKSA9PiB7XG4gICAgICBjb25zdCBwcm92aWRlciA9XG4gICAgICAgIHBhY2thZ2VKc29uLmNka3RuPy5wcm92aWRlciA/PyBwYWNrYWdlSnNvbi5jZGt0Zj8ucHJvdmlkZXI7XG4gICAgICBpZiAoXG4gICAgICAgICFwcm92aWRlciB8fFxuICAgICAgICAoIXBhY2thZ2VKc29uLnBlZXJEZXBlbmRlbmNpZXM/LmNka3RmICYmXG4gICAgICAgICAgIXBhY2thZ2VKc29uLnBlZXJEZXBlbmRlbmNpZXM/LmNka3RuKVxuICAgICAgKSB7XG4gICAgICAgIGxvZ2dlci50cmFjZShcbiAgICAgICAgICBgc2tpcHBpbmcgdmVyc2lvbiAke3ZlcnNpb259IG9mICR7cGFja2FnZU5hbWV9IGFzIGl0IGRvZXMgbm90IGhhdmUgYSBjZGt0bi9jZGt0Zi5wcm92aWRlciBvciBwZWVyRGVwZW5kZW5jaWVzLmNka3RmL2Nka3RuIGluIHBhY2thZ2UuanNvbmAsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYWNrYWdlTmFtZSxcbiAgICAgICAgcGFja2FnZVZlcnNpb246IHZlcnNpb24sXG4gICAgICAgIHByb3ZpZGVyVmVyc2lvbjogcHJvdmlkZXIudmVyc2lvbixcbiAgICAgICAgY2RrdGZQZWVyRGVwZW5kZW5jeUNvbnN0cmFpbnQ6IHBhY2thZ2VKc29uLnBlZXJEZXBlbmRlbmNpZXMuY2RrdGYsXG4gICAgICAgIGNka3RuUGVlckRlcGVuZGVuY3lDb25zdHJhaW50OiBwYWNrYWdlSnNvbi5wZWVyRGVwZW5kZW5jaWVzLmNka3RuLFxuICAgICAgfTtcbiAgICB9KVxuICAgIC5maWx0ZXIoKHYpID0+IHYgIT09IHVuZGVmaW5lZCkgYXMgUHJlYnVpbHRQcm92aWRlclZlcnNpb25bXTtcblxuICAvLyBsYXRlc3QgdmVyc2lvbiBmaXJzdCwgc29ydGVkIGJ5IHBhY2thZ2VWZXJzaW9uIGFzIHRoYXRcbiAgLy8gb25lIGFsd2F5cyBpbmNyZWFzZXMgd2hpbGUgdGhlIHByb3ZpZGVyVmVyc2lvbiBtYXkgbm90XG4gIHZlcnNpb25zLnNvcnQoKGEsIGIpID0+IHtcbiAgICBpZiAoc2VtdmVyLmd0KGEucGFja2FnZVZlcnNpb24sIGIucGFja2FnZVZlcnNpb24pKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmIChzZW12ZXIubHQoYS5wYWNrYWdlVmVyc2lvbiwgYi5wYWNrYWdlVmVyc2lvbikpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfSk7XG5cbiAgcmV0dXJuIHZlcnNpb25zO1xufVxuXG5mdW5jdGlvbiBjZGt0ZlZlcnNpb25NYXRjaGVzKFxuICBjZGt0ZlZlcnNpb246IHN0cmluZyxcbiAgY2RrdGZQZWVyRGVwZW5kZW5jeUNvbnN0cmFpbnQ6IHN0cmluZyxcbik6IGJvb2xlYW4ge1xuICByZXR1cm4gc2VtdmVyLnNhdGlzZmllcyhjZGt0ZlZlcnNpb24sIGNka3RmUGVlckRlcGVuZGVuY3lDb25zdHJhaW50KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFByZWJ1aWx0UHJvdmlkZXJWZXJzaW9ucyhcbiAgY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50LFxuICBjZGt0ZlZlcnNpb246IHN0cmluZyxcbik6IFByb21pc2U8eyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W10gfCBudWxsPiB7XG4gIGNvbnN0IGNka3RmUHJvdmlkZXJOYW1lID0gYXdhaXQgZ2V0TnBtUGFja2FnZU5hbWUoY29uc3RyYWludCwgZmFsc2UpO1xuICBjb25zdCBjZGt0blByb3ZpZGVyTmFtZSA9IGF3YWl0IGdldE5wbVBhY2thZ2VOYW1lKGNvbnN0cmFpbnQsIHRydWUpO1xuXG4gIC8vIG5vIHByZS1idWlsdCBwcm92aWRlciBleGlzdHNcbiAgaWYgKCFjZGt0ZlByb3ZpZGVyTmFtZSAmJiAhY2RrdG5Qcm92aWRlck5hbWUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGNka3RmVmVyc2lvbnMgPSBjZGt0ZlByb3ZpZGVyTmFtZVxuICAgID8gYXdhaXQgZ2V0QWxsUHJlYnVpbHRQcm92aWRlclZlcnNpb25zKGNka3RmUHJvdmlkZXJOYW1lKVxuICAgIDogKFtdIGFzIFByZWJ1aWx0UHJvdmlkZXJWZXJzaW9uW10pO1xuICBsb2dnZXIuZGVidWcoXG4gICAgYEZvdW5kIHZlcnNpb25zIGZvciAke2Nka3RmUHJvdmlkZXJOYW1lfTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgIGNka3RmVmVyc2lvbnMsXG4gICAgICBudWxsLFxuICAgICAgMixcbiAgICApfWAsXG4gICk7XG5cbiAgY29uc3QgY2RrdG5WZXJzaW9ucyA9IGNka3RuUHJvdmlkZXJOYW1lXG4gICAgPyBhd2FpdCBnZXRBbGxQcmVidWlsdFByb3ZpZGVyVmVyc2lvbnMoY2RrdG5Qcm92aWRlck5hbWUpXG4gICAgOiAoW10gYXMgUHJlYnVpbHRQcm92aWRlclZlcnNpb25bXSk7XG4gIGxvZ2dlci5kZWJ1ZyhcbiAgICBgRm91bmQgdmVyc2lvbnMgZm9yICR7Y2RrdG5Qcm92aWRlck5hbWV9OiAke0pTT04uc3RyaW5naWZ5KGNka3RuVmVyc2lvbnMsIG51bGwsIDIpfWAsXG4gICk7XG5cbiAgY29uc3QgdmVyc2lvbnMgPSBjZGt0ZlZlcnNpb25zLmNvbmNhdChjZGt0blZlcnNpb25zKTtcblxuICAvLyBmaW5kIGZpcnN0IHRoZSB2ZXJzaW9uIHRoYXQgbWF0Y2hlcyB0aGUgcmVxdWVzdGVkIHByb3ZpZGVyIHZlcnNpb24gYW5kIGNka3RmIHZlcnNpb25cbiAgY29uc3QgbWF0Y2hpbmdWZXJzaW9ucyA9IHZlcnNpb25zLmZpbHRlcigodikgPT4ge1xuICAgIGlmIChcbiAgICAgICFjZGt0ZlZlcnNpb25NYXRjaGVzKGNka3RmVmVyc2lvbiwgdi5jZGt0ZlBlZXJEZXBlbmRlbmN5Q29uc3RyYWludCkgJiZcbiAgICAgICFjZGt0ZlZlcnNpb25NYXRjaGVzKGNka3RmVmVyc2lvbiwgdi5jZGt0blBlZXJEZXBlbmRlbmN5Q29uc3RyYWludClcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTsgLy8gc2tpcCBpZiBjZGt0ZiB2ZXJzaW9uIGRvZXMgbm90IG1hdGNoXG4gICAgfVxuICAgIGlmIChjb25zdHJhaW50LnZlcnNpb24pIHtcbiAgICAgIHJldHVybiB2ZXJzaW9uTWF0Y2hlc0NvbnN0cmFpbnQodi5wcm92aWRlclZlcnNpb24sIGNvbnN0cmFpbnQudmVyc2lvbik7XG4gICAgfVxuICAgIHJldHVybiB0cnVlOyAvLyBpZiBubyB2ZXJzaW9uIGNvbnN0cmFpbnQgaXMgcGFzc2VkLCByZXR1cm4gdHJ1ZSBvbiB0aGUgZmlyc3QgbWF0Y2hcbiAgfSk7XG5cbiAgaWYgKCFtYXRjaGluZ1ZlcnNpb25zLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IG5wbVBhY2thZ2VWZXJzaW9ucyA9IG1hdGNoaW5nVmVyc2lvbnNcbiAgICAubWFwKChtYXRjaGluZ1ZlcnNpb24pID0+ICh7XG4gICAgICBuYW1lOiBtYXRjaGluZ1ZlcnNpb24ucGFja2FnZU5hbWUsXG4gICAgICB2ZXJzaW9uOiBtYXRjaGluZ1ZlcnNpb24ucGFja2FnZVZlcnNpb24sXG4gICAgfSkpXG4gICAgLnNvcnQoKGEsIGIpID0+IHNlbXZlci5jb21wYXJlKGEudmVyc2lvbiwgYi52ZXJzaW9uKSlcbiAgICAucmV2ZXJzZSgpO1xuICByZXR1cm4gbnBtUGFja2FnZVZlcnNpb25zO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UHJlYnVpbHRQcm92aWRlclZlcnNpb25JbmZvcm1hdGlvbihcbiAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgcGFja2FnZVZlcnNpb246IHN0cmluZyxcbik6IFByb21pc2U8YW55PiB7XG4gIC8vIEdvIHBhY2thZ2VzIGluY2x1ZGUgYW4gZXh0cmEgYHZYLlkuWmBcbiAgaWYgKHBhY2thZ2VWZXJzaW9uLnN0YXJ0c1dpdGgoXCJ2XCIpKSB7XG4gICAgcGFja2FnZVZlcnNpb24gPSBwYWNrYWdlVmVyc2lvbi5zbGljZSgxKTtcbiAgfVxuXG4gIGNvbnN0IHVybCA9IGBodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy8ke3BhY2thZ2VOYW1lfS8ke3BhY2thZ2VWZXJzaW9ufWA7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNhY2hlZEZldGNoPE5wbVBhY2thZ2VTaW5nbGVWZXJzaW9uUmVzdWx0Pih1cmwpO1xuXG4gIGxldCBwcm92aWRlck5hbWUgPSByZXN1bHQuY2RrdG4/LnByb3ZpZGVyLm5hbWUgPz8gcmVzdWx0LmNka3RmPy5wcm92aWRlci5uYW1lO1xuICBpZiAocHJvdmlkZXJOYW1lKSB7XG4gICAgcHJvdmlkZXJOYW1lID0gcHJvdmlkZXJOYW1lLnJlcGxhY2UoXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW8vXCIsIFwiXCIpO1xuICAgIHByb3ZpZGVyTmFtZSA9IHByb3ZpZGVyTmFtZS5yZXBsYWNlKFwiaGFzaGljb3JwL1wiLCBcIlwiKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGFja2FnZU5hbWU6IHJlc3VsdC5uYW1lLFxuICAgIHBhY2thZ2VWZXJzaW9uOiByZXN1bHQudmVyc2lvbixcbiAgICBwcm92aWRlck5hbWUsXG4gICAgcHJvdmlkZXJWZXJzaW9uOlxuICAgICAgcmVzdWx0LmNka3RuPy5wcm92aWRlci52ZXJzaW9uID8/IHJlc3VsdC5jZGt0Zj8ucHJvdmlkZXIudmVyc2lvbixcbiAgICBjZGt0ZlZlcnNpb246IHJlc3VsdC5wZWVyRGVwZW5kZW5jaWVzW1wiY2RrdGZcIl0sXG4gICAgY2RrdG5WZXJzaW9uOiByZXN1bHQucGVlckRlcGVuZGVuY2llc1tcImNka3RuXCJdLFxuICB9O1xufVxuIl19