@nikovirtala/projen-constructs 0.3.77 → 0.3.79

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 (35) hide show
  1. package/.jsii +111 -58
  2. package/README.md +18 -0
  3. package/docs/api/assets/search.js +1 -1
  4. package/docs/api/classes/AwsCdkConstructLibraryProject.html +1 -1
  5. package/docs/api/classes/AwsCdkTypeScriptAppProject.html +1 -1
  6. package/docs/api/classes/Colima.html +1 -1
  7. package/docs/api/classes/Homebrew.html +1 -1
  8. package/docs/api/classes/JsiiProject.html +1 -1
  9. package/docs/api/classes/LambdaFunctionCodeBundler.html +26 -15
  10. package/docs/api/classes/LambdaFunctionConstructGenerator.html +1 -1
  11. package/docs/api/classes/LocalStack.html +1 -1
  12. package/docs/api/classes/Mise.html +1 -1
  13. package/docs/api/classes/ProjectGenerator.html +1 -1
  14. package/docs/api/classes/TypeDoc.html +1 -1
  15. package/docs/api/classes/TypeScriptProject.html +1 -1
  16. package/docs/api/classes/Vitest.html +1 -1
  17. package/docs/api/index.html +8 -0
  18. package/docs/api/interfaces/ProjectGeneratorOptions.html +1 -1
  19. package/docs/api/interfaces/VitestOptions.html +48 -3
  20. package/lib/components/bundle-lambda-function-code.d.ts +5 -2
  21. package/lib/components/bundle-lambda-function-code.js +14 -9
  22. package/lib/components/colima.js +1 -1
  23. package/lib/components/homebrew.js +1 -1
  24. package/lib/components/lambda-function-construct-generator.js +1 -1
  25. package/lib/components/localstack.js +1 -1
  26. package/lib/components/mise.js +1 -1
  27. package/lib/components/typedoc.js +1 -1
  28. package/lib/components/vitest.d.ts +29 -0
  29. package/lib/components/vitest.js +38 -35
  30. package/lib/project-generator.js +1 -1
  31. package/lib/projects/awscdk-construct-library.generated.js +1 -1
  32. package/lib/projects/awscdk-typescript-app.generated.js +1 -1
  33. package/lib/projects/jsii.generated.js +1 -1
  34. package/lib/projects/typescript.generated.js +1 -1
  35. package/package.json +1 -1
@@ -140,7 +140,7 @@ var CoverageReporter;
140
140
  CoverageReporter["TEXT"] = "text";
141
141
  })(CoverageReporter || (exports.CoverageReporter = CoverageReporter = {}));
142
142
  class Vitest extends component_1.Component {
143
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.Vitest", version: "0.3.77" };
143
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.Vitest", version: "0.3.79" };
144
144
  static of(project) {
145
145
  const isVitest = (c) => c instanceof Vitest;
146
146
  return project.components.find(isVitest);
@@ -165,8 +165,15 @@ class Vitest extends component_1.Component {
165
165
  version;
166
166
  printConsoleTrace;
167
167
  slowTestThreshold;
168
+ extraTestConfig;
169
+ extraConfig;
168
170
  constructor(project, options = {}) {
169
171
  super(project);
172
+ if (options.extraConfig && "test" in options.extraConfig) {
173
+ throw new Error("vitest extraConfig must not contain `test`, use extraTestConfig for test options");
174
+ }
175
+ this.extraTestConfig = options.extraTestConfig ?? {};
176
+ this.extraConfig = options.extraConfig ?? {};
170
177
  this.configFilePath = options.configFilePath ?? "vitest.config.ts";
171
178
  this.include = new Set(options.config?.include ?? ["**/*.{test,spec}.?(c|m)[jt]s?(x)"]);
172
179
  this.exclude = new Set(options.config?.exclude ?? [
@@ -293,42 +300,38 @@ class Vitest extends component_1.Component {
293
300
  const defineConfigImport = packageName === "@nikovirtala/projen-constructs"
294
301
  ? 'import { defineConfig } from "./lib/vitest-define-config";'
295
302
  : 'import { defineConfig } from "@nikovirtala/projen-constructs/lib/vitest-define-config";';
296
- return [
297
- defineConfigImport,
298
- "",
299
- "export default defineConfig({",
300
- " test: {",
301
- ...this.renderTestOptions(),
302
- " },",
303
- "});",
304
- ];
303
+ const config = {
304
+ ...this.extraConfig,
305
+ test: (0, utils_1.deepMerge)(this.renderTestOptions(), this.extraTestConfig),
306
+ };
307
+ return [defineConfigImport, "", `export default defineConfig(${JSON.stringify(config, null, 2)});`];
305
308
  }
306
309
  renderTestOptions() {
307
- const lines = [];
308
- lines.push(` bail: ${this.bail},`);
309
- lines.push(" coverage: {");
310
- lines.push(` enabled: ${this.coverageEnabled},`);
311
- lines.push(` provider: "${this.coverageProvider}",`);
312
- lines.push(` reporter: ${JSON.stringify(this.coverageReporters)},`);
313
- lines.push(` reportsDirectory: "${this.coverageDirectory}",`);
314
- lines.push(" },");
315
- lines.push(` environment: "${this.environment}",`);
316
- lines.push(` exclude: ${JSON.stringify(Array.from(this.exclude))},`);
317
- lines.push(` globals: ${this.globals},`);
318
- lines.push(` include: ${JSON.stringify(Array.from(this.include))},`);
319
- lines.push(` isolate: ${this.isolate},`);
320
- lines.push(` passWithNoTests: ${this.passWithNoTests},`);
321
- lines.push(` printConsoleTrace: ${this.printConsoleTrace},`);
322
- lines.push(` pool: "${this.pool}",`);
323
- lines.push(` slowTestThreshold: ${this.slowTestThreshold},`);
324
- lines.push(" typecheck: {");
325
- lines.push(` enabled: ${this.typecheckEnabled},`);
326
- lines.push(` checker: "${this.typecheckChecker}",`);
327
- lines.push(` tsconfig: "${this.typecheckTsconfig}",`);
328
- lines.push(" },");
329
- lines.push(` update: ${this.updateSnapshots},`);
330
- return lines;
310
+ return {
311
+ bail: this.bail,
312
+ coverage: {
313
+ enabled: this.coverageEnabled,
314
+ provider: this.coverageProvider,
315
+ reporter: this.coverageReporters,
316
+ reportsDirectory: this.coverageDirectory,
317
+ },
318
+ environment: this.environment,
319
+ exclude: Array.from(this.exclude),
320
+ globals: this.globals,
321
+ include: Array.from(this.include),
322
+ isolate: this.isolate,
323
+ passWithNoTests: this.passWithNoTests,
324
+ printConsoleTrace: this.printConsoleTrace,
325
+ pool: this.pool,
326
+ slowTestThreshold: this.slowTestThreshold,
327
+ typecheck: {
328
+ enabled: this.typecheckEnabled,
329
+ checker: this.typecheckChecker,
330
+ tsconfig: this.typecheckTsconfig,
331
+ },
332
+ update: this.updateSnapshots,
333
+ };
331
334
  }
332
335
  }
333
336
  exports.Vitest = Vitest;
334
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvdml0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnREFBa0M7QUFDbEMsbUNBQXFDO0FBQ3JDLG9EQUFpRDtBQUNqRCwwREFBeUQ7QUFDekQsc0RBQStEO0FBQy9ELGtEQUErQztBQUMvQyxvQ0FBMkM7QUFFM0MsSUFBWSxXQTBCWDtBQTFCRCxXQUFZLFdBQVc7SUFDbkI7Ozs7T0FJRztJQUNILDRDQUE2QixDQUFBO0lBRTdCOzs7O09BSUc7SUFDSCxzQ0FBdUIsQ0FBQTtJQUV2Qjs7OztPQUlHO0lBQ0gsOEJBQWUsQ0FBQTtJQUVmOztPQUVHO0lBQ0gsNEJBQWEsQ0FBQTtBQUNqQixDQUFDLEVBMUJXLFdBQVcsMkJBQVgsV0FBVyxRQTBCdEI7QUFFRCxJQUFZLElBbUNYO0FBbkNELFdBQVksSUFBSTtJQUNaOzs7Ozs7T0FNRztJQUNILHVCQUFlLENBQUE7SUFFZjs7OztPQUlHO0lBQ0gsMkJBQW1CLENBQUE7SUFFbkI7Ozs7Ozs7O09BUUc7SUFDSCwyQkFBbUIsQ0FBQTtJQUVuQjs7Ozs7T0FLRztJQUNILCtCQUF1QixDQUFBO0FBQzNCLENBQUMsRUFuQ1csSUFBSSxvQkFBSixJQUFJLFFBbUNmO0FBRUQsSUFBWSxnQkFjWDtBQWRELFdBQVksZ0JBQWdCO0lBQ3hCOzs7O09BSUc7SUFDSCx5Q0FBcUIsQ0FBQTtJQUVyQjs7OztPQUlHO0lBQ0gsNkJBQVMsQ0FBQTtBQUNiLENBQUMsRUFkVyxnQkFBZ0IsZ0NBQWhCLGdCQUFnQixRQWMzQjtBQUVELElBQVksZ0JBeUJYO0FBekJELFdBQVksZ0JBQWdCO0lBQ3hCOztPQUVHO0lBQ0gscUNBQWlCLENBQUE7SUFFakI7O09BRUc7SUFDSCxpQ0FBYSxDQUFBO0lBRWI7O09BRUc7SUFDSCxpQ0FBYSxDQUFBO0lBRWI7O09BRUc7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c0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBhd3NjZGssIGNkayB9IGZyb20gXCJwcm9qZW5cIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCJwcm9qZW4vbGliL2NvbXBvbmVudFwiO1xuaW1wb3J0IHsgRGVwZW5kZW5jeVR5cGUgfSBmcm9tIFwicHJvamVuL2xpYi9kZXBlbmRlbmNpZXNcIjtcbmltcG9ydCB7IEplc3QsIHR5cGUgTm9kZVByb2plY3QgfSBmcm9tIFwicHJvamVuL2xpYi9qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBUZXh0RmlsZSB9IGZyb20gXCJwcm9qZW4vbGliL3RleHRmaWxlXCI7XG5pbXBvcnQgeyB0c2NvbmZpZ0RldlBhdGggfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZXhwb3J0IGVudW0gRW52aXJvbm1lbnQge1xuICAgIC8qKlxuICAgICAqIFJ1biB0ZXN0cyBpbiBWZXJjZWwncyBFZGdlIFJ1bnRpbWUgVk0uXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZWRnZS1ydW50aW1lLnZlcmNlbC5hcHAvcGFja2FnZXMvdm1cbiAgICAgKi9cbiAgICBFREdFX1JVTlRJTUUgPSBcImVkZ2UtcnVudGltZVwiLFxuXG4gICAgLyoqXG4gICAgICogUnVuIHRlc3RzIGluIGBoYXBweS1kb21gIGVudmlyb25tZW50LlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2Fwcmljb3JuODYvaGFwcHktZG9tXG4gICAgICovXG4gICAgSEFQUFlfRE9NID0gXCJoYXBweS1kb21cIixcblxuICAgIC8qKlxuICAgICAqIFJ1biB0ZXN0cyBpbiBganNkb21gIGVudmlyb25tZW50LlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vanNkb20vanNkb21cbiAgICAgKi9cbiAgICBKU0RPTSA9IFwianNkb21cIixcblxuICAgIC8qKlxuICAgICAqIFJ1biB0ZXN0cyBpbiBhIE5vZGUuanMgZW52aXJvbm1lbnQuXG4gICAgICovXG4gICAgTk9ERSA9IFwibm9kZVwiLFxufVxuXG5leHBvcnQgZW51bSBQb29sIHtcbiAgICAvKipcbiAgICAgKiBSdW4gdGVzdHMgaW4gYG5vZGU6Y2hpbGRfcHJvY2Vzc2AgdXNpbmcgZm9yaygpXG4gICAgICpcbiAgICAgKiBUZXN0IGlzb2xhdGlvbiAod2hlbiBlbmFibGVkKSBpcyBkb25lIGJ5IHNwYXduaW5nIGEgbmV3IGNoaWxkIHByb2Nlc3MgZm9yIGVhY2ggdGVzdCBmaWxlLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL25vZGVqcy5vcmcvYXBpL2NoaWxkX3Byb2Nlc3MuaHRtbCNjaGlsZF9wcm9jZXNzZm9ya21vZHVsZXBhdGgtYXJncy1vcHRpb25zXG4gICAgICovXG4gICAgRk9SS1MgPSBcImZvcmtzXCIsXG5cbiAgICAvKipcbiAgICAgKiBSdW4gdGVzdHMgaW4gYG5vZGU6d29ya2VyX3RocmVhZHNgLlxuICAgICAqXG4gICAgICogVGVzdCBpc29sYXRpb24gKHdoZW4gZW5hYmxlZCkgaXMgZG9uZSBieSBzcGF3bmluZyBhIG5ldyB0aHJlYWQgZm9yIGVhY2ggdGVzdCBmaWxlLlxuICAgICAqL1xuICAgIFRIUkVBRFMgPSBcInRocmVhZHNcIixcblxuICAgIC8qKlxuICAgICAqIFJ1biB0ZXN0cyBpbiBpc29sYXRlZCBgbm9kZTp2bWAuXG4gICAgICpcbiAgICAgKiBUZXN0IGZpbGVzIGFyZSBydW4gcGFyYWxsZWwgdXNpbmcgYG5vZGU6Y2hpbGRfcHJvY2Vzc2AgZm9yaygpXG4gICAgICpcbiAgICAgKiBUaGlzIG1ha2VzIHRlc3RzIHJ1biBmYXN0ZXIsIGJ1dCBWTSBtb2R1bGUgaXMgdW5zdGFibGUuIFlvdXIgdGVzdHMgbWlnaHQgbGVhayBtZW1vcnkuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvY2hpbGRfcHJvY2Vzcy5odG1sI2NoaWxkX3Byb2Nlc3Nmb3JrbW9kdWxlcGF0aC1hcmdzLW9wdGlvbnNcbiAgICAgKi9cbiAgICBWTUZPUktTID0gXCJ2bWZvcmtzXCIsXG5cbiAgICAvKipcbiAgICAgKiBSdW4gdGVzdHMgaW4gaXNvbGF0ZWQgYG5vZGU6dm1gLlxuICAgICAqIFRlc3QgZmlsZXMgYXJlIHJ1biBwYXJhbGxlbCB1c2luZyBgbm9kZTp3b3JrZXJfdGhyZWFkc2AuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ha2VzIHRlc3RzIHJ1biBmYXN0ZXIsIGJ1dCBWTSBtb2R1bGUgaXMgdW5zdGFibGUuIFlvdXIgdGVzdHMgbWlnaHQgbGVhayBtZW1vcnkuXG4gICAgICovXG4gICAgVk1USFJFQURTID0gXCJ2bXRocmVhZHNcIixcbn1cblxuZXhwb3J0IGVudW0gQ292ZXJhZ2VQcm92aWRlciB7XG4gICAgLyoqXG4gICAgICogUHJvdmlkZSBjb3ZlcmFnZSByZXBvcnQgdXNpbmcgaXN0YW5idWwuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vaXN0YW5idWwuanMub3JnXG4gICAgICovXG4gICAgSVNUQU5CVUwgPSBcImlzdGFuYnVsXCIsXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIGNvdmVyYWdlIHJlcG9ydHMgdXNpbmcgdjguXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vdjguZGV2L2Jsb2cvamF2YXNjcmlwdC1jb2RlLWNvdmVyYWdlXG4gICAgICovXG4gICAgVjggPSBcInY4XCIsXG59XG5cbmV4cG9ydCBlbnVtIENvdmVyYWdlUmVwb3J0ZXIge1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGBjbG92ZXJgIHJlcG9ydC5cbiAgICAgKi9cbiAgICBDTE9WRVIgPSBcImNsb3ZlclwiLFxuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYEhUTUxgIHJlcG9ydC5cbiAgICAgKi9cbiAgICBIVE1MID0gXCJodG1sXCIsXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBgSlNPTmAgcmVwb3J0LlxuICAgICAqL1xuICAgIEpTT04gPSBcImpzb25cIixcblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGBMQ09WYCByZXBvcnQuXG4gICAgICovXG4gICAgTENPViA9IFwibGNvdlwiLFxuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYHRleHRgIHJlcG9ydC5cbiAgICAgKi9cbiAgICBURVhUID0gXCJ0ZXh0XCIsXG59XG5cbi8qKlxuICogVml0ZXN0IENvbmZpZy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9jb25maWcvXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVml0ZXN0Q29uZmlnT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIGdsb2IgcGF0dGVybnMgdGhhdCBtYXRjaCB5b3VyIHRlc3QgZmlsZXMuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAtIFZpdGVzdCdzIGBjb25maWdEZWZhdWx0cy5pbmNsdWRlYFxuICAgICAqIEBzZWUgaHR0cHM6Ly92aXRlc3QuZGV2L2NvbmZpZy8jaW5jbHVkZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGluY2x1ZGU/OiBBcnJheTxzdHJpbmc+O1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIGdsb2IgcGF0dGVybnMgdGhhdCBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSB5b3VyIHRlc3QgZmlsZXMuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAtIFZpdGVzdCdzIGBjb25maWdEZWZhdWx0cy5leGNsdWRlYFxuICAgICAqIEBzZWUgaHR0cHM6Ly92aXRlc3QuZGV2L2NvbmZpZy8jZXhjbHVkZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGV4Y2x1ZGU/OiBBcnJheTxzdHJpbmc+O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVudmlyb25tZW50IHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0ZXN0aW5nLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJub2RlXCJcbiAgICAgKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9jb25maWcvI2Vudmlyb25tZW50XG4gICAgICovXG4gICAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiBFbnZpcm9ubWVudDtcblxuICAgIC8qKlxuICAgICAqIFJ1biB0ZXN0cyBpbiBhbiBpc29sYXRlZCBlbnZpcm9ubWVudC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB2bVRocmVhZHMgcG9vbC5cbiAgICAgKlxuICAgICAqIERpc2FibGluZyB0aGlzIG9wdGlvbiBtaWdodCBpbXByb3ZlIHBlcmZvcm1hbmNlIGlmIHlvdXIgY29kZSBkb2Vzbid0IHJlbHkgb24gc2lkZSBlZmZlY3RzLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqIEBzZWUgaHR0cHM6Ly92aXRlc3QuZGV2L2NvbmZpZy8jaXNvbGF0ZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGlzb2xhdGU/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogUG9vbCB1c2VkIHRvIHJ1biB0ZXN0cyBpbi5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiZm9ya3NcIlxuICAgICAqIEBzZWUgaHR0cHM6Ly92aXRlc3QuZGV2L2NvbmZpZy8jcG9vbFxuICAgICAqL1xuICAgIHJlYWRvbmx5IHBvb2w/OiBQb29sO1xuXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgYXBpcyBnbG9iYWxseS4gSWYgeW91IHByZWZlciB0byB1c2UgdGhlIEFQSXMgZ2xvYmFsbHkgbGlrZSBKZXN0LCBzZXQgdG8gYHRydWVgLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9jb25maWcvI2dsb2JhbHNcbiAgICAgKi9cbiAgICByZWFkb25seSBnbG9iYWxzPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIENvdmVyYWdlIGVuYWJsZWQuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICogQHNlZSBodHRwczovL3ZpdGVzdC5kZXYvY29uZmlnLyNjb3ZlcmFnZS1lbmFibGVkXG4gICAgICovXG4gICAgcmVhZG9ubHkgY292ZXJhZ2VFbmFibGVkPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIENvdmVyYWdlIHByb3ZpZGVyIHR5cGUuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcInY4XCJcbiAgICAgKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9jb25maWcvI2NvdmVyYWdlLXByb3ZpZGVyXG4gICAgICovXG4gICAgcmVhZG9ubHkgY292ZXJhZ2VQcm92aWRlcj86IENvdmVyYWdlUHJvdmlkZXI7XG5cbiAgICAvKipcbiAgICAgKiBDb3ZlcmFnZSByZXBvcnRlcnMuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnW1widGV4dFwiLCBcImxjb3ZcIl0nXG4gICAgICogQHNlZSBodHRwczovL3ZpdGVzdC5kZXYvY29uZmlnLyNjb3ZlcmFnZS1yZXBvcnRlclxuICAgICAqL1xuICAgIHJlYWRvbmx5IGNvdmVyYWdlUmVwb3J0ZXJzPzogQXJyYXk8Q292ZXJhZ2VSZXBvcnRlcj47XG5cbiAgICAvKipcbiAgICAgKiBDb3ZlcmFnZSBvdXRwdXQgZGlyZWN0b3J5LlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJjb3ZlcmFnZVwiXG4gICAgICovXG4gICAgcmVhZG9ubHkgY292ZXJhZ2VEaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGUgdHlwZWNoZWNraW5nIGFsb25nc2lkZSB5b3VyIHJlZ3VsYXIgdGVzdHMuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlIChmb3IgVHlwZVNjcmlwdCBwcm9qZWN0cylcbiAgICAgKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9jb25maWcvI3R5cGVjaGVjay1lbmFibGVkXG4gICAgICovXG4gICAgcmVhZG9ubHkgdHlwZWNoZWNrRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBUb29sIHRvIHVzZSBmb3IgdHlwZSBjaGVja2luZy4gQ2hlY2tlciBzaG91bGQgaW1wbGVtZW50IHRoZSBzYW1lIG91dHB1dCBmb3JtYXQgYXMgYHRzY2AuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcInRzYyAtLW5vRW1pdFwiXG4gICAgICogQHNlZSBodHRwczovL3ZpdGVzdC5kZXYvY29uZmlnLyN0eXBlY2hlY2stY2hlY2tlclxuICAgICAqL1xuICAgIHJlYWRvbmx5IHR5cGVjaGVja0NoZWNrZXI/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGN1c3RvbSB0c2NvbmZpZywgcmVsYXRpdmUgdG8gdGhlIHByb2plY3Qgcm9vdC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IC0gdGhlIHByb2plY3QncyBkZXZlbG9wbWVudCB0c2NvbmZpZyAoZS5nLiBcInRlc3QvdHNjb25maWcuanNvblwiKVxuICAgICAqIEBzZWUgaHR0cHM6Ly92aXRlc3QuZGV2L2NvbmZpZy8jdHlwZWNoZWNrLXRzY29uZmlnXG4gICAgICovXG4gICAgcmVhZG9ubHkgdHlwZWNoZWNrVHNjb25maWc/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBWaXRlc3Qgd2lsbCBub3QgZmFpbCwgaWYgbm8gdGVzdHMgd2lsbCBiZSBmb3VuZC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9jb25maWcvI3Bhc3N3aXRobm90ZXN0c1xuICAgICAqL1xuICAgIHJlYWRvbmx5IHBhc3NXaXRoTm9UZXN0cz86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBTdG9wIHJ1bm5pbmcgdGVzdHMgYWZ0ZXIgY2VydGFpbiBudW1iZXIgb2YgZmFpbHVyZXMuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICogQHNlZSBodHRwczovL3ZpdGVzdC5kZXYvY29uZmlnLyNiYWlsXG4gICAgICovXG4gICAgcmVhZG9ubHkgYmFpbD86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBzbmFwc2hvdCBmaWxlcy4gVGhpcyB3aWxsIHVwZGF0ZSBhbGwgY2hhbmdlZCBzbmFwc2hvdHMgYW5kIGRlbGV0ZSBvYnNvbGV0ZSBvbmVzLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqIEBzZWUgaHR0cHM6Ly92aXRlc3QuZGV2L2d1aWRlL3NuYXBzaG90Lmh0bWwjdXBkYXRpbmctc25hcHNob3RzXG4gICAgICovXG4gICAgcmVhZG9ubHkgdXBkYXRlU25hcHNob3RzPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEFsd2F5cyBwcmludCBjb25zb2xlIHRyYWNlcyB3aGVuIGNhbGxpbmcgYW55IGNvbnNvbGUgbWV0aG9kLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqIEBzZWUgaHR0cHM6Ly92aXRlc3QuZGV2L2NvbmZpZy8jY29uc29sZXRyYWNlXG4gICAgICovXG4gICAgcmVhZG9ubHkgcHJpbnRDb25zb2xlVHJhY2U/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYWZ0ZXIgd2hpY2ggYSB0ZXN0IG9yIHN1aXRlIGlzIGNvbnNpZGVyZWQgc2xvdy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IDMwMFxuICAgICAqIEBzZWUgaHR0cHM6Ly92aXRlc3QuZGV2L2NvbmZpZy8jc2xvd3Rlc3R0aHJlc2hvbGRcbiAgICAgKi9cbiAgICByZWFkb25seSBzbG93VGVzdFRocmVzaG9sZD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaXRlc3RPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBDb25maWcgZmlsZSBwYXRoLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJ2aXRlc3QuY29uZmlnLnRzXCJcbiAgICAgKi9cbiAgICByZWFkb25seSBjb25maWdGaWxlUGF0aD86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWwgY29uZmlnIG9wdGlvbnMuXG4gICAgICovXG4gICAgcmVhZG9ubHkgY29uZmlnPzogVml0ZXN0Q29uZmlnT3B0aW9ucztcblxuICAgIC8qKlxuICAgICAqIFZpdGVzdCB2ZXJzaW9uLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJeNFwiXG4gICAgICovXG4gICAgcmVhZG9ubHkgdml0ZXN0VmVyc2lvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFZpdGVzdCBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgcHVibGljIHN0YXRpYyBvZihwcm9qZWN0OiBOb2RlUHJvamVjdCk6IFZpdGVzdCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IGlzVml0ZXN0ID0gKGM6IENvbXBvbmVudCk6IGMgaXMgVml0ZXN0ID0+IGMgaW5zdGFuY2VvZiBWaXRlc3Q7XG4gICAgICAgIHJldHVybiBwcm9qZWN0LmNvbXBvbmVudHMuZmluZChpc1ZpdGVzdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWdGaWxlUGF0aDogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5jbHVkZTogU2V0PHN0cmluZz47XG4gICAgcHJpdmF0ZSByZWFkb25seSBleGNsdWRlOiBTZXQ8c3RyaW5nPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlzb2xhdGU6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBwb29sOiBQb29sO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY292ZXJhZ2VFbmFibGVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdHlwZWNoZWNrRW5hYmxlZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHR5cGVjaGVja0NoZWNrZXI6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IHR5cGVjaGVja1RzY29uZmlnOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwYXNzV2l0aE5vVGVzdHM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBiYWlsOiBudW1iZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSB1cGRhdGVTbmFwc2hvdHM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBlbnZpcm9ubWVudDogc3RyaW5nO1xuICAgIHByaXZhdGUgZ2xvYmFsczogYm9vbGVhbjtcbiAgICBwcml2YXRlIGNvdmVyYWdlUHJvdmlkZXI6IENvdmVyYWdlUHJvdmlkZXI7XG4gICAgcHJpdmF0ZSBjb3ZlcmFnZVJlcG9ydGVyczogQXJyYXk8Q292ZXJhZ2VSZXBvcnRlcj47XG4gICAgcHJpdmF0ZSBjb3ZlcmFnZURpcmVjdG9yeTogc3RyaW5nO1xuICAgIHByaXZhdGUgdmVyc2lvbjogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJpbnRDb25zb2xlVHJhY2U6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBzbG93VGVzdFRocmVzaG9sZDogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IocHJvamVjdDogTm9kZVByb2plY3QsIG9wdGlvbnM6IFZpdGVzdE9wdGlvbnMgPSB7fSkge1xuICAgICAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgICAgICB0aGlzLmNvbmZpZ0ZpbGVQYXRoID0gb3B0aW9ucy5jb25maWdGaWxlUGF0aCA/PyBcInZpdGVzdC5jb25maWcudHNcIjtcbiAgICAgICAgdGhpcy5pbmNsdWRlID0gbmV3IFNldChvcHRpb25zLmNvbmZpZz8uaW5jbHVkZSA/PyBbXCIqKi8qLnt0ZXN0LHNwZWN9Lj8oY3xtKVtqdF1zPyh4KVwiXSk7XG4gICAgICAgIHRoaXMuZXhjbHVkZSA9IG5ldyBTZXQoXG4gICAgICAgICAgICBvcHRpb25zLmNvbmZpZz8uZXhjbHVkZSA/PyBbXG4gICAgICAgICAgICAgICAgXCIqKi9ub2RlX21vZHVsZXMvKipcIixcbiAgICAgICAgICAgICAgICBcIioqL2Rpc3QvKipcIixcbiAgICAgICAgICAgICAgICBcIioqL2N5cHJlc3MvKipcIixcbiAgICAgICAgICAgICAgICBcIioqLy57aWRlYSxnaXQsY2FjaGUsb3V0cHV0LHRlbXB9LyoqXCIsXG4gICAgICAgICAgICAgICAgXCIqKi97a2FybWEscm9sbHVwLHdlYnBhY2ssdml0ZSx2aXRlc3QsamVzdCxhdmEsYmFiZWwsbnljLGN5cHJlc3MsdHN1cCxidWlsZCxlc2xpbnQscHJldHRpZXJ9LmNvbmZpZy4qXCIsXG4gICAgICAgICAgICBdLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmlzb2xhdGUgPSBvcHRpb25zLmNvbmZpZz8uaXNvbGF0ZSA/PyB0cnVlO1xuICAgICAgICB0aGlzLnBvb2wgPSBvcHRpb25zLmNvbmZpZz8ucG9vbCA/PyBQb29sLkZPUktTO1xuICAgICAgICB0aGlzLmNvdmVyYWdlRW5hYmxlZCA9IG9wdGlvbnMuY29uZmlnPy5jb3ZlcmFnZUVuYWJsZWQgPz8gdHJ1ZTtcbiAgICAgICAgdGhpcy50eXBlY2hlY2tFbmFibGVkID0gb3B0aW9ucy5jb25maWc/LnR5cGVjaGVja0VuYWJsZWQgPz8gdGhpcy5pc1R5cGVzY3JpcHRQcm9qZWN0KCk7XG4gICAgICAgIHRoaXMudHlwZWNoZWNrQ2hlY2tlciA9IG9wdGlvbnMuY29uZmlnPy50eXBlY2hlY2tDaGVja2VyID8/IFwidHNjIC0tbm9FbWl0XCI7XG4gICAgICAgIHRoaXMudHlwZWNoZWNrVHNjb25maWcgPSBvcHRpb25zLmNvbmZpZz8udHlwZWNoZWNrVHNjb25maWcgPz8gdHNjb25maWdEZXZQYXRoKHByb2plY3QpO1xuICAgICAgICB0aGlzLnBhc3NXaXRoTm9UZXN0cyA9IG9wdGlvbnMuY29uZmlnPy5wYXNzV2l0aE5vVGVzdHMgPz8gdHJ1ZTtcbiAgICAgICAgdGhpcy5iYWlsID0gb3B0aW9ucy5jb25maWc/LmJhaWwgPz8gMDtcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IG9wdGlvbnMuY29uZmlnPy5lbnZpcm9ubWVudCA/PyBFbnZpcm9ubWVudC5OT0RFO1xuICAgICAgICB0aGlzLmdsb2JhbHMgPSBvcHRpb25zLmNvbmZpZz8uZ2xvYmFscyA/PyBmYWxzZTtcbiAgICAgICAgdGhpcy5jb3ZlcmFnZVByb3ZpZGVyID0gb3B0aW9ucy5jb25maWc/LmNvdmVyYWdlUHJvdmlkZXIgPz8gQ292ZXJhZ2VQcm92aWRlci5WODtcbiAgICAgICAgdGhpcy5jb3ZlcmFnZVJlcG9ydGVycyA9IG9wdGlvbnMuY29uZmlnPy5jb3ZlcmFnZVJlcG9ydGVycyA/PyBbQ292ZXJhZ2VSZXBvcnRlci5URVhULCBDb3ZlcmFnZVJlcG9ydGVyLkxDT1ZdO1xuICAgICAgICB0aGlzLmNvdmVyYWdlRGlyZWN0b3J5ID0gb3B0aW9ucy5jb25maWc/LmNvdmVyYWdlRGlyZWN0b3J5ID8/IFwiY292ZXJhZ2VcIjtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gb3B0aW9ucy52aXRlc3RWZXJzaW9uID8/IFwiXjRcIjtcbiAgICAgICAgdGhpcy51cGRhdGVTbmFwc2hvdHMgPSBvcHRpb25zLmNvbmZpZz8udXBkYXRlU25hcHNob3RzID8/IHRydWU7XG4gICAgICAgIHRoaXMucHJpbnRDb25zb2xlVHJhY2UgPSBvcHRpb25zLmNvbmZpZz8ucHJpbnRDb25zb2xlVHJhY2UgPz8gdHJ1ZTtcbiAgICAgICAgdGhpcy5zbG93VGVzdFRocmVzaG9sZCA9IG9wdGlvbnMuY29uZmlnPy5zbG93VGVzdFRocmVzaG9sZCA/PyAzMDA7XG5cbiAgICAgICAgcHJvamVjdC5hZGREZXZEZXBzKGB2aXRlc3RAJHt0aGlzLnZlcnNpb259YCk7XG4gICAgICAgIHRoaXMuY29uZmlndXJlQ292ZXJhZ2VQcm92aWRlcih0aGlzLmNvdmVyYWdlUHJvdmlkZXIpO1xuXG4gICAgICAgIGlmICh0aGlzLmdsb2JhbHMgJiYgdGhpcy5pc1R5cGVzY3JpcHRQcm9qZWN0KCkgJiYgdGhpcy5wcm9qZWN0LnRyeUZpbmRPYmplY3RGaWxlKHRoaXMudHlwZWNoZWNrVHNjb25maWcpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3VyZUdsb2JhbHMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvdmVyYWdlRGlyZWN0b3J5UGF0aCA9IHBhdGgucG9zaXguam9pbihcIi9cIiwgdGhpcy5jb3ZlcmFnZURpcmVjdG9yeSwgXCIvXCIpO1xuICAgICAgICBwcm9qZWN0Lm5wbWlnbm9yZT8uZXhjbHVkZShjb3ZlcmFnZURpcmVjdG9yeVBhdGgpO1xuICAgICAgICBwcm9qZWN0LmdpdGlnbm9yZS5leGNsdWRlKGNvdmVyYWdlRGlyZWN0b3J5UGF0aCk7XG5cbiAgICAgICAgdGhpcy5hZGRUZXN0Q29tbWFuZCgpO1xuICAgICAgICB0aGlzLnN5bnRoZXNpemVDb25maWcoKTtcblxuICAgICAgICBpZiAocHJvamVjdCBpbnN0YW5jZW9mIGNkay5Kc2lpUHJvamVjdCB8fCBwcm9qZWN0IGluc3RhbmNlb2YgYXdzY2RrLkF3c0Nka0NvbnN0cnVjdExpYnJhcnkpIHtcbiAgICAgICAgICAgIHByb2plY3QubnBtaWdub3JlPy5hZGRQYXR0ZXJucyhcInZpdGVzdC5jb25maWcudHNcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgcHJlU3ludGhlc2l6ZSgpIHtcbiAgICAgICAgc3VwZXIucHJlU3ludGhlc2l6ZSgpO1xuXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMucHJvamVjdC5jb21wb25lbnRzKSB7XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgSmVzdCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInZpdGVzdCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIGplc3RcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkSW5jbHVkZShwYXR0ZXJuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbmNsdWRlLmFkZChwYXR0ZXJuKTtcbiAgICAgICAgdGhpcy5zeW50aGVzaXplQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEV4Y2x1ZGUocGF0dGVybjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXhjbHVkZS5hZGQocGF0dGVybik7XG4gICAgICAgIHRoaXMuc3ludGhlc2l6ZUNvbmZpZygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb25maWd1cmVFbnZpcm9ubWVudChlbnZpcm9ubWVudDogRW52aXJvbm1lbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICAgICAgICB0aGlzLnN5bnRoZXNpemVDb25maWcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29uZmlndXJlQ292ZXJhZ2VQcm92aWRlcihwcm92aWRlcjogQ292ZXJhZ2VQcm92aWRlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBwcm92aWRlclBhY2thZ2VzID0ge1xuICAgICAgICAgICAgW0NvdmVyYWdlUHJvdmlkZXIuVjhdOiBgQHZpdGVzdC9jb3ZlcmFnZS12OEAke3RoaXMudmVyc2lvbn1gLFxuICAgICAgICAgICAgW0NvdmVyYWdlUHJvdmlkZXIuSVNUQU5CVUxdOiBgQHZpdGVzdC9jb3ZlcmFnZS1pc3RhbmJ1bEAke3RoaXMudmVyc2lvbn1gLFxuICAgICAgICB9O1xuXG4gICAgICAgIGZvciAoY29uc3QgcHJvdmlkZXJQYWNrYWdlIG9mIE9iamVjdC52YWx1ZXMocHJvdmlkZXJQYWNrYWdlcykpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9qZWN0LmRlcHMucmVtb3ZlRGVwZW5kZW5jeShwcm92aWRlclBhY2thZ2UpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb2plY3QuZGVwcy5hZGREZXBlbmRlbmN5KHByb3ZpZGVyUGFja2FnZXNbcHJvdmlkZXJdLCBEZXBlbmRlbmN5VHlwZS5ERVZFTlYpO1xuICAgICAgICB0aGlzLmNvdmVyYWdlUHJvdmlkZXIgPSBwcm92aWRlcjtcbiAgICAgICAgdGhpcy5zeW50aGVzaXplQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbmZpZ3VyZUNvdmVyYWdlUmVwb3J0ZXJzKHJlcG9ydGVyczogQXJyYXk8Q292ZXJhZ2VSZXBvcnRlcj4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb3ZlcmFnZVJlcG9ydGVycyA9IHJlcG9ydGVycztcbiAgICAgICAgdGhpcy5zeW50aGVzaXplQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbmZpZ3VyZUdsb2JhbHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlVHNDb25maWcoKTtcbiAgICAgICAgdGhpcy5zeW50aGVzaXplQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVUc0NvbmZpZygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdHNjb25maWcgPSB0aGlzLnByb2plY3QudHJ5RmluZE9iamVjdEZpbGUodGhpcy50eXBlY2hlY2tUc2NvbmZpZyk7XG5cbiAgICAgICAgaWYgKCF0c2NvbmZpZykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5hYmxlIHRvIGZpbmQgdHNjb25maWdcIik7XG4gICAgICAgIH1cblxuICAgICAgICB0c2NvbmZpZy5hZGRUb0FycmF5KFwiY29tcGlsZXJPcHRpb25zLnR5cGVzXCIsIFwidml0ZXN0L2dsb2JhbHNcIik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1R5cGVzY3JpcHRQcm9qZWN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9qZWN0LmRlcHMudHJ5R2V0RGVwZW5kZW5jeShcInR5cGVzY3JpcHRcIikgIT09IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFRlc3RDb21tYW5kKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb2plY3QudGVzdFRhc2suZXhlYyhcInZpdGVzdCBydW5cIiwge1xuICAgICAgICAgICAgcmVjZWl2ZUFyZ3M6IHRydWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHRlc3RXYXRjaCA9IHRoaXMucHJvamVjdC50YXNrcy50cnlGaW5kKFwidGVzdDp3YXRjaFwiKTtcbiAgICAgICAgaWYgKCF0ZXN0V2F0Y2gpIHtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKFwidGVzdDp3YXRjaFwiLCB7XG4gICAgICAgICAgICAgICAgZXhlYzogXCJ2aXRlc3Qgd2F0Y2hcIixcbiAgICAgICAgICAgICAgICByZWNlaXZlQXJnczogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGVzdFVwZGF0ZVNuYXBzaG90cyA9IHRoaXMucHJvamVjdC50YXNrcy50cnlGaW5kKFwidGVzdDp1cGRhdGVcIik7XG4gICAgICAgIGlmICghdGVzdFVwZGF0ZVNuYXBzaG90cykge1xuICAgICAgICAgICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soXCJ0ZXN0OnVwZGF0ZVwiLCB7XG4gICAgICAgICAgICAgICAgZXhlYzogXCJ2aXRlc3QgLS11cGRhdGVcIixcbiAgICAgICAgICAgICAgICByZWNlaXZlQXJnczogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzeW50aGVzaXplQ29uZmlnKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb2plY3QudHJ5UmVtb3ZlRmlsZSh0aGlzLmNvbmZpZ0ZpbGVQYXRoKTtcblxuICAgICAgICBuZXcgVGV4dEZpbGUodGhpcywgdGhpcy5jb25maWdGaWxlUGF0aCwge1xuICAgICAgICAgICAgbGluZXM6IHRoaXMucmVuZGVyQ29uZmlnKCksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ29uZmlnKCk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICBjb25zdCBwcm9qZWN0ID0gdGhpcy5wcm9qZWN0IGFzIE5vZGVQcm9qZWN0O1xuICAgICAgICBjb25zdCBwYWNrYWdlTmFtZSA9IHByb2plY3QucGFja2FnZS5wYWNrYWdlTmFtZTtcbiAgICAgICAgY29uc3QgZGVmaW5lQ29uZmlnSW1wb3J0ID1cbiAgICAgICAgICAgIHBhY2thZ2VOYW1lID09PSBcIkBuaWtvdmlydGFsYS9wcm9qZW4tY29uc3RydWN0c1wiXG4gICAgICAgICAgICAgICAgPyAnaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcIi4vbGliL3ZpdGVzdC1kZWZpbmUtY29uZmlnXCI7J1xuICAgICAgICAgICAgICAgIDogJ2ltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCJAbmlrb3ZpcnRhbGEvcHJvamVuLWNvbnN0cnVjdHMvbGliL3ZpdGVzdC1kZWZpbmUtY29uZmlnXCI7JztcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgZGVmaW5lQ29uZmlnSW1wb3J0LFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIFwiZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKHtcIixcbiAgICAgICAgICAgIFwiICB0ZXN0OiB7XCIsXG4gICAgICAgICAgICAuLi50aGlzLnJlbmRlclRlc3RPcHRpb25zKCksXG4gICAgICAgICAgICBcIiAgfSxcIixcbiAgICAgICAgICAgIFwifSk7XCIsXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJUZXN0T3B0aW9ucygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgbGluZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcblxuICAgICAgICBsaW5lcy5wdXNoKGAgICAgYmFpbDogJHt0aGlzLmJhaWx9LGApO1xuICAgICAgICBsaW5lcy5wdXNoKFwiICAgIGNvdmVyYWdlOiB7XCIpO1xuICAgICAgICBsaW5lcy5wdXNoKGAgICAgICBlbmFibGVkOiAke3RoaXMuY292ZXJhZ2VFbmFibGVkfSxgKTtcbiAgICAgICAgbGluZXMucHVzaChgICAgICAgcHJvdmlkZXI6IFwiJHt0aGlzLmNvdmVyYWdlUHJvdmlkZXJ9XCIsYCk7XG4gICAgICAgIGxpbmVzLnB1c2goYCAgICAgIHJlcG9ydGVyOiAke0pTT04uc3RyaW5naWZ5KHRoaXMuY292ZXJhZ2VSZXBvcnRlcnMpfSxgKTtcbiAgICAgICAgbGluZXMucHVzaChgICAgICAgcmVwb3J0c0RpcmVjdG9yeTogXCIke3RoaXMuY292ZXJhZ2VEaXJlY3Rvcnl9XCIsYCk7XG4gICAgICAgIGxpbmVzLnB1c2goXCIgICAgfSxcIik7XG4gICAgICAgIGxpbmVzLnB1c2goYCAgICBlbnZpcm9ubWVudDogXCIke3RoaXMuZW52aXJvbm1lbnR9XCIsYCk7XG4gICAgICAgIGxpbmVzLnB1c2goYCAgICBleGNsdWRlOiAke0pTT04uc3RyaW5naWZ5KEFycmF5LmZyb20odGhpcy5leGNsdWRlKSl9LGApO1xuICAgICAgICBsaW5lcy5wdXNoKGAgICAgZ2xvYmFsczogJHt0aGlzLmdsb2JhbHN9LGApO1xuICAgICAgICBsaW5lcy5wdXNoKGAgICAgaW5jbHVkZTogJHtKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHRoaXMuaW5jbHVkZSkpfSxgKTtcbiAgICAgICAgbGluZXMucHVzaChgICAgIGlzb2xhdGU6ICR7dGhpcy5pc29sYXRlfSxgKTtcbiAgICAgICAgbGluZXMucHVzaChgICAgIHBhc3NXaXRoTm9UZXN0czogJHt0aGlzLnBhc3NXaXRoTm9UZXN0c30sYCk7XG4gICAgICAgIGxpbmVzLnB1c2goYCAgICBwcmludENvbnNvbGVUcmFjZTogJHt0aGlzLnByaW50Q29uc29sZVRyYWNlfSxgKTtcbiAgICAgICAgbGluZXMucHVzaChgICAgIHBvb2w6IFwiJHt0aGlzLnBvb2x9XCIsYCk7XG4gICAgICAgIGxpbmVzLnB1c2goYCAgICBzbG93VGVzdFRocmVzaG9sZDogJHt0aGlzLnNsb3dUZXN0VGhyZXNob2xkfSxgKTtcbiAgICAgICAgbGluZXMucHVzaChcIiAgICB0eXBlY2hlY2s6IHtcIik7XG4gICAgICAgIGxpbmVzLnB1c2goYCAgICAgIGVuYWJsZWQ6ICR7dGhpcy50eXBlY2hlY2tFbmFibGVkfSxgKTtcbiAgICAgICAgbGluZXMucHVzaChgICAgICAgY2hlY2tlcjogXCIke3RoaXMudHlwZWNoZWNrQ2hlY2tlcn1cIixgKTtcbiAgICAgICAgbGluZXMucHVzaChgICAgICAgdHNjb25maWc6IFwiJHt0aGlzLnR5cGVjaGVja1RzY29uZmlnfVwiLGApO1xuICAgICAgICBsaW5lcy5wdXNoKFwiICAgIH0sXCIpO1xuICAgICAgICBsaW5lcy5wdXNoKGAgICAgdXBkYXRlOiAke3RoaXMudXBkYXRlU25hcHNob3RzfSxgKTtcblxuICAgICAgICByZXR1cm4gbGluZXM7XG4gICAgfVxufVxuIl19
337
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvdml0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnREFBa0M7QUFDbEMsbUNBQXFDO0FBQ3JDLG9EQUFpRDtBQUNqRCwwREFBeUQ7QUFDekQsc0RBQStEO0FBQy9ELGtEQUErQztBQUMvQyxvQ0FBc0Q7QUFFdEQsSUFBWSxXQTBCWDtBQTFCRCxXQUFZLFdBQVc7SUFDbkI7Ozs7T0FJRztJQUNILDRDQUE2QixDQUFBO0lBRTdCOzs7O09BSUc7SUFDSCxzQ0FBdUIsQ0FBQTtJQUV2Qjs7OztPQUlHO0lBQ0gsOEJBQWUsQ0FBQTtJQUVmOztPQUVHO0lBQ0gsNEJBQWEsQ0FBQTtBQUNqQixDQUFDLEVBMUJXLFdBQVcsMkJBQVgsV0FBVyxRQTBCdEI7QUFFRCxJQUFZLElBbUNYO0FBbkNELFdBQVksSUFBSTtJQUNaOzs7Ozs7T0FNRztJQUNILHVCQUFlLENBQUE7SUFFZjs7OztPQUlHO0lBQ0gsMkJBQW1CLENBQUE7SUFFbkI7Ozs7Ozs7O09BUUc7SUFDSCwyQkFBbUIsQ0FBQTtJQUVuQjs7Ozs7T0FLRztJQUNILCtCQUF1QixDQUFBO0FBQzNCLENBQUMsRUFuQ1csSUFBSSxvQkFBSixJQUFJLFFBbUNmO0FBRUQsSUFBWSxnQkFjWDtBQWRELFdBQVksZ0JBQWdCO0lBQ3hCOzs7O09BSUc7SUFDSCx5Q0FBcUIsQ0FBQTtJQUVyQjs7OztPQUlHO0lBQ0gsNkJBQVMsQ0FBQTtBQUNiLENBQUMsRUFkVyxnQkFBZ0IsZ0NBQWhCLGdCQUFnQixRQWMzQjtBQUVELElBQVksZ0JBeUJYO0FBekJELFdBQVksZ0JBQWdCO0lBQ3hCOztPQUVHO0lBQ0gscUNBQWlCLENBQUE7SUFFakI7O09BRUc7SUFDSCxpQ0FBYSxDQUFBO0lBRWI7O09BRUc7SUFDSCxpQ0FBYSxDQUFBO0lBRWI7O09BRUc7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QixPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDckMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtZQUN6QyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCO1lBQ3pDLFNBQVMsRUFBRTtnQkFDUCxPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtnQkFDOUIsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQzlCLFFBQVEsRUFBRSxJQUFJLENBQUMsaUJBQWlCO2FBQ25DO1lBQ0QsTUFBTSxFQUFFLElBQUksQ0FBQyxlQUFlO1NBQy9CLENBQUM7SUFDTixDQUFDOztBQWxPTCx3QkFtT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGF3c2NkaywgY2RrIH0gZnJvbSBcInByb2plblwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcInByb2plbi9saWIvY29tcG9uZW50XCI7XG5pbXBvcnQgeyBEZXBlbmRlbmN5VHlwZSB9IGZyb20gXCJwcm9qZW4vbGliL2RlcGVuZGVuY2llc1wiO1xuaW1wb3J0IHsgSmVzdCwgdHlwZSBOb2RlUHJvamVjdCB9IGZyb20gXCJwcm9qZW4vbGliL2phdmFzY3JpcHRcIjtcbmltcG9ydCB7IFRleHRGaWxlIH0gZnJvbSBcInByb2plbi9saWIvdGV4dGZpbGVcIjtcbmltcG9ydCB7IGRlZXBNZXJnZSwgdHNjb25maWdEZXZQYXRoIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmV4cG9ydCBlbnVtIEVudmlyb25tZW50IHtcbiAgICAvKipcbiAgICAgKiBSdW4gdGVzdHMgaW4gVmVyY2VsJ3MgRWRnZSBSdW50aW1lIFZNLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2VkZ2UtcnVudGltZS52ZXJjZWwuYXBwL3BhY2thZ2VzL3ZtXG4gICAgICovXG4gICAgRURHRV9SVU5USU1FID0gXCJlZGdlLXJ1bnRpbWVcIixcblxuICAgIC8qKlxuICAgICAqIFJ1biB0ZXN0cyBpbiBgaGFwcHktZG9tYCBlbnZpcm9ubWVudC5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2NhcHJpY29ybjg2L2hhcHB5LWRvbVxuICAgICAqL1xuICAgIEhBUFBZX0RPTSA9IFwiaGFwcHktZG9tXCIsXG5cbiAgICAvKipcbiAgICAgKiBSdW4gdGVzdHMgaW4gYGpzZG9tYCBlbnZpcm9ubWVudC5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pzZG9tL2pzZG9tXG4gICAgICovXG4gICAgSlNET00gPSBcImpzZG9tXCIsXG5cbiAgICAvKipcbiAgICAgKiBSdW4gdGVzdHMgaW4gYSBOb2RlLmpzIGVudmlyb25tZW50LlxuICAgICAqL1xuICAgIE5PREUgPSBcIm5vZGVcIixcbn1cblxuZXhwb3J0IGVudW0gUG9vbCB7XG4gICAgLyoqXG4gICAgICogUnVuIHRlc3RzIGluIGBub2RlOmNoaWxkX3Byb2Nlc3NgIHVzaW5nIGZvcmsoKVxuICAgICAqXG4gICAgICogVGVzdCBpc29sYXRpb24gKHdoZW4gZW5hYmxlZCkgaXMgZG9uZSBieSBzcGF3bmluZyBhIG5ldyBjaGlsZCBwcm9jZXNzIGZvciBlYWNoIHRlc3QgZmlsZS5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9jaGlsZF9wcm9jZXNzLmh0bWwjY2hpbGRfcHJvY2Vzc2Zvcmttb2R1bGVwYXRoLWFyZ3Mtb3B0aW9uc1xuICAgICAqL1xuICAgIEZPUktTID0gXCJmb3Jrc1wiLFxuXG4gICAgLyoqXG4gICAgICogUnVuIHRlc3RzIGluIGBub2RlOndvcmtlcl90aHJlYWRzYC5cbiAgICAgKlxuICAgICAqIFRlc3QgaXNvbGF0aW9uICh3aGVuIGVuYWJsZWQpIGlzIGRvbmUgYnkgc3Bhd25pbmcgYSBuZXcgdGhyZWFkIGZvciBlYWNoIHRlc3QgZmlsZS5cbiAgICAgKi9cbiAgICBUSFJFQURTID0gXCJ0aHJlYWRzXCIsXG5cbiAgICAvKipcbiAgICAgKiBSdW4gdGVzdHMgaW4gaXNvbGF0ZWQgYG5vZGU6dm1gLlxuICAgICAqXG4gICAgICogVGVzdCBmaWxlcyBhcmUgcnVuIHBhcmFsbGVsIHVzaW5nIGBub2RlOmNoaWxkX3Byb2Nlc3NgIGZvcmsoKVxuICAgICAqXG4gICAgICogVGhpcyBtYWtlcyB0ZXN0cyBydW4gZmFzdGVyLCBidXQgVk0gbW9kdWxlIGlzIHVuc3RhYmxlLiBZb3VyIHRlc3RzIG1pZ2h0IGxlYWsgbWVtb3J5LlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL25vZGVqcy5vcmcvYXBpL2NoaWxkX3Byb2Nlc3MuaHRtbCNjaGlsZF9wcm9jZXNzZm9ya21vZHVsZXBhdGgtYXJncy1vcHRpb25zXG4gICAgICovXG4gICAgVk1GT1JLUyA9IFwidm1mb3Jrc1wiLFxuXG4gICAgLyoqXG4gICAgICogUnVuIHRlc3RzIGluIGlzb2xhdGVkIGBub2RlOnZtYC5cbiAgICAgKiBUZXN0IGZpbGVzIGFyZSBydW4gcGFyYWxsZWwgdXNpbmcgYG5vZGU6d29ya2VyX3RocmVhZHNgLlxuICAgICAqXG4gICAgICogVGhpcyBtYWtlcyB0ZXN0cyBydW4gZmFzdGVyLCBidXQgVk0gbW9kdWxlIGlzIHVuc3RhYmxlLiBZb3VyIHRlc3RzIG1pZ2h0IGxlYWsgbWVtb3J5LlxuICAgICAqL1xuICAgIFZNVEhSRUFEUyA9IFwidm10aHJlYWRzXCIsXG59XG5cbmV4cG9ydCBlbnVtIENvdmVyYWdlUHJvdmlkZXIge1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgY292ZXJhZ2UgcmVwb3J0IHVzaW5nIGlzdGFuYnVsLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2lzdGFuYnVsLmpzLm9yZ1xuICAgICAqL1xuICAgIElTVEFOQlVMID0gXCJpc3RhbmJ1bFwiLFxuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSBjb3ZlcmFnZSByZXBvcnRzIHVzaW5nIHY4LlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL3Y4LmRldi9ibG9nL2phdmFzY3JpcHQtY29kZS1jb3ZlcmFnZVxuICAgICAqL1xuICAgIFY4ID0gXCJ2OFwiLFxufVxuXG5leHBvcnQgZW51bSBDb3ZlcmFnZVJlcG9ydGVyIHtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBgY2xvdmVyYCByZXBvcnQuXG4gICAgICovXG4gICAgQ0xPVkVSID0gXCJjbG92ZXJcIixcblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGBIVE1MYCByZXBvcnQuXG4gICAgICovXG4gICAgSFRNTCA9IFwiaHRtbFwiLFxuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYEpTT05gIHJlcG9ydC5cbiAgICAgKi9cbiAgICBKU09OID0gXCJqc29uXCIsXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBgTENPVmAgcmVwb3J0LlxuICAgICAqL1xuICAgIExDT1YgPSBcImxjb3ZcIixcblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGB0ZXh0YCByZXBvcnQuXG4gICAgICovXG4gICAgVEVYVCA9IFwidGV4dFwiLFxufVxuXG4vKipcbiAqIFZpdGVzdCBDb25maWcuXG4gKlxuICogQHNlZSBodHRwczovL3ZpdGVzdC5kZXYvY29uZmlnL1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFZpdGVzdENvbmZpZ09wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiBnbG9iIHBhdHRlcm5zIHRoYXQgbWF0Y2ggeW91ciB0ZXN0IGZpbGVzLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgLSBWaXRlc3QncyBgY29uZmlnRGVmYXVsdHMuaW5jbHVkZWBcbiAgICAgKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9jb25maWcvI2luY2x1ZGVcbiAgICAgKi9cbiAgICByZWFkb25seSBpbmNsdWRlPzogQXJyYXk8c3RyaW5nPjtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiBnbG9iIHBhdHRlcm5zIHRoYXQgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20geW91ciB0ZXN0IGZpbGVzLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgLSBWaXRlc3QncyBgY29uZmlnRGVmYXVsdHMuZXhjbHVkZWBcbiAgICAgKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9jb25maWcvI2V4Y2x1ZGVcbiAgICAgKi9cbiAgICByZWFkb25seSBleGNsdWRlPzogQXJyYXk8c3RyaW5nPjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlbnZpcm9ubWVudCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdGVzdGluZy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwibm9kZVwiXG4gICAgICogQHNlZSBodHRwczovL3ZpdGVzdC5kZXYvY29uZmlnLyNlbnZpcm9ubWVudFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGVudmlyb25tZW50PzogRW52aXJvbm1lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBSdW4gdGVzdHMgaW4gYW4gaXNvbGF0ZWQgZW52aXJvbm1lbnQuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdm1UaHJlYWRzIHBvb2wuXG4gICAgICpcbiAgICAgKiBEaXNhYmxpbmcgdGhpcyBvcHRpb24gbWlnaHQgaW1wcm92ZSBwZXJmb3JtYW5jZSBpZiB5b3VyIGNvZGUgZG9lc24ndCByZWx5IG9uIHNpZGUgZWZmZWN0cy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9jb25maWcvI2lzb2xhdGVcbiAgICAgKi9cbiAgICByZWFkb25seSBpc29sYXRlPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFBvb2wgdXNlZCB0byBydW4gdGVzdHMgaW4uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcImZvcmtzXCJcbiAgICAgKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9jb25maWcvI3Bvb2xcbiAgICAgKi9cbiAgICByZWFkb25seSBwb29sPzogUG9vbDtcblxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIGFwaXMgZ2xvYmFsbHkuIElmIHlvdSBwcmVmZXIgdG8gdXNlIHRoZSBBUElzIGdsb2JhbGx5IGxpa2UgSmVzdCwgc2V0IHRvIGB0cnVlYC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICogQHNlZSBodHRwczovL3ZpdGVzdC5kZXYvY29uZmlnLyNnbG9iYWxzXG4gICAgICovXG4gICAgcmVhZG9ubHkgZ2xvYmFscz86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBDb3ZlcmFnZSBlbmFibGVkLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqIEBzZWUgaHR0cHM6Ly92aXRlc3QuZGV2L2NvbmZpZy8jY292ZXJhZ2UtZW5hYmxlZFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGNvdmVyYWdlRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBDb3ZlcmFnZSBwcm92aWRlciB0eXBlLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJ2OFwiXG4gICAgICogQHNlZSBodHRwczovL3ZpdGVzdC5kZXYvY29uZmlnLyNjb3ZlcmFnZS1wcm92aWRlclxuICAgICAqL1xuICAgIHJlYWRvbmx5IGNvdmVyYWdlUHJvdmlkZXI/OiBDb3ZlcmFnZVByb3ZpZGVyO1xuXG4gICAgLyoqXG4gICAgICogQ292ZXJhZ2UgcmVwb3J0ZXJzLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ1tcInRleHRcIiwgXCJsY292XCJdJ1xuICAgICAqIEBzZWUgaHR0cHM6Ly92aXRlc3QuZGV2L2NvbmZpZy8jY292ZXJhZ2UtcmVwb3J0ZXJcbiAgICAgKi9cbiAgICByZWFkb25seSBjb3ZlcmFnZVJlcG9ydGVycz86IEFycmF5PENvdmVyYWdlUmVwb3J0ZXI+O1xuXG4gICAgLyoqXG4gICAgICogQ292ZXJhZ2Ugb3V0cHV0IGRpcmVjdG9yeS5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiY292ZXJhZ2VcIlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGNvdmVyYWdlRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogRW5hYmxlIHR5cGVjaGVja2luZyBhbG9uZ3NpZGUgeW91ciByZWd1bGFyIHRlc3RzLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZSAoZm9yIFR5cGVTY3JpcHQgcHJvamVjdHMpXG4gICAgICogQHNlZSBodHRwczovL3ZpdGVzdC5kZXYvY29uZmlnLyN0eXBlY2hlY2stZW5hYmxlZFxuICAgICAqL1xuICAgIHJlYWRvbmx5IHR5cGVjaGVja0VuYWJsZWQ/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogVG9vbCB0byB1c2UgZm9yIHR5cGUgY2hlY2tpbmcuIENoZWNrZXIgc2hvdWxkIGltcGxlbWVudCB0aGUgc2FtZSBvdXRwdXQgZm9ybWF0IGFzIGB0c2NgLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJ0c2MgLS1ub0VtaXRcIlxuICAgICAqIEBzZWUgaHR0cHM6Ly92aXRlc3QuZGV2L2NvbmZpZy8jdHlwZWNoZWNrLWNoZWNrZXJcbiAgICAgKi9cbiAgICByZWFkb25seSB0eXBlY2hlY2tDaGVja2VyPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogUGF0aCB0byBjdXN0b20gdHNjb25maWcsIHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHJvb3QuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAtIHRoZSBwcm9qZWN0J3MgZGV2ZWxvcG1lbnQgdHNjb25maWcgKGUuZy4gXCJ0ZXN0L3RzY29uZmlnLmpzb25cIilcbiAgICAgKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9jb25maWcvI3R5cGVjaGVjay10c2NvbmZpZ1xuICAgICAqL1xuICAgIHJlYWRvbmx5IHR5cGVjaGVja1RzY29uZmlnPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVml0ZXN0IHdpbGwgbm90IGZhaWwsIGlmIG5vIHRlc3RzIHdpbGwgYmUgZm91bmQuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICogQHNlZSBodHRwczovL3ZpdGVzdC5kZXYvY29uZmlnLyNwYXNzd2l0aG5vdGVzdHNcbiAgICAgKi9cbiAgICByZWFkb25seSBwYXNzV2l0aE5vVGVzdHM/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogU3RvcCBydW5uaW5nIHRlc3RzIGFmdGVyIGNlcnRhaW4gbnVtYmVyIG9mIGZhaWx1cmVzLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqIEBzZWUgaHR0cHM6Ly92aXRlc3QuZGV2L2NvbmZpZy8jYmFpbFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGJhaWw/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgc25hcHNob3QgZmlsZXMuIFRoaXMgd2lsbCB1cGRhdGUgYWxsIGNoYW5nZWQgc25hcHNob3RzIGFuZCBkZWxldGUgb2Jzb2xldGUgb25lcy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9ndWlkZS9zbmFwc2hvdC5odG1sI3VwZGF0aW5nLXNuYXBzaG90c1xuICAgICAqL1xuICAgIHJlYWRvbmx5IHVwZGF0ZVNuYXBzaG90cz86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBBbHdheXMgcHJpbnQgY29uc29sZSB0cmFjZXMgd2hlbiBjYWxsaW5nIGFueSBjb25zb2xlIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9jb25maWcvI2NvbnNvbGV0cmFjZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IHByaW50Q29uc29sZVRyYWNlPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGFmdGVyIHdoaWNoIGEgdGVzdCBvciBzdWl0ZSBpcyBjb25zaWRlcmVkIHNsb3cuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAzMDBcbiAgICAgKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9jb25maWcvI3Nsb3d0ZXN0dGhyZXNob2xkXG4gICAgICovXG4gICAgcmVhZG9ubHkgc2xvd1Rlc3RUaHJlc2hvbGQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVml0ZXN0T3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogQ29uZmlnIGZpbGUgcGF0aC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwidml0ZXN0LmNvbmZpZy50c1wiXG4gICAgICovXG4gICAgcmVhZG9ubHkgY29uZmlnRmlsZVBhdGg/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsIGNvbmZpZyBvcHRpb25zLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGNvbmZpZz86IFZpdGVzdENvbmZpZ09wdGlvbnM7XG5cbiAgICAvKipcbiAgICAgKiBWaXRlc3QgdmVyc2lvbi5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiXjRcIlxuICAgICAqL1xuICAgIHJlYWRvbmx5IHZpdGVzdFZlcnNpb24/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBZGRpdGlvbmFsIGB0ZXN0YCBvcHRpb25zIGZvciBzZXR0aW5ncyB0aGF0IGBjb25maWdgIGRvZXNuJ3QgY292ZXIsIHN1Y2ggYXMgYHNldHVwRmlsZXNgIG9yIGBleHBlY3RgLlxuICAgICAqXG4gICAgICogRGVlcC1tZXJnZWQgb3ZlciB0aGUgb3B0aW9ucyBnZW5lcmF0ZWQgZnJvbSBgY29uZmlnYDogb2JqZWN0cyBhcmUgbWVyZ2VkLCBvdGhlciB2YWx1ZXMgKGluY2x1ZGluZ1xuICAgICAqIGFycmF5cykgcmVwbGFjZSB0aGUgZ2VuZXJhdGVkIHZhbHVlLiBWYWx1ZXMgYXJlIHJlbmRlcmVkIGFzIEpTT04sIHNvIHRoZXkgbXVzdCBiZSBKU09OLXNlcmlhbGl6YWJsZVxuICAgICAqIChubyBmdW5jdGlvbnMgb3IgcmVndWxhciBleHByZXNzaW9ucykuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSB7IHNldHVwRmlsZXM6IFtcInRlc3Qvc2V0dXAudHNcIl0sIGV4cGVjdDogeyByZXF1aXJlQXNzZXJ0aW9uczogdHJ1ZSB9IH1cbiAgICAgKiBAZGVmYXVsdCAtIG5vIGFkZGl0aW9uYWwgdGVzdCBvcHRpb25zXG4gICAgICogQHNlZSBodHRwczovL3ZpdGVzdC5kZXYvY29uZmlnL1xuICAgICAqL1xuICAgIHJlYWRvbmx5IGV4dHJhVGVzdENvbmZpZz86IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9O1xuXG4gICAgLyoqXG4gICAgICogQWRkaXRpb25hbCB0b3AtbGV2ZWwgY29uZmlnIG9wdGlvbnMsIG5leHQgdG8gYHRlc3RgLCBzdWNoIGFzIGByZXNvbHZlYC5cbiAgICAgKlxuICAgICAqIFZhbHVlcyBhcmUgcmVuZGVyZWQgYXMgSlNPTiwgc28gdGhleSBtdXN0IGJlIEpTT04tc2VyaWFsaXphYmxlIChubyBmdW5jdGlvbnMgb3IgcmVndWxhciBleHByZXNzaW9ucyxcbiAgICAgKiB3aGljaCBydWxlcyBvdXQgcGx1Z2lucykuIFVzZSBgZXh0cmFUZXN0Q29uZmlnYCBmb3IgYHRlc3RgIG9wdGlvbnMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSB7IHJlc29sdmU6IHsgYWxpYXM6IHsgXCJAXCI6IFwiL3NyY1wiIH0gfSB9XG4gICAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIHRvcC1sZXZlbCBvcHRpb25zXG4gICAgICogQHNlZSBodHRwczovL3ZpdGVzdC5kZXYvY29uZmlnL1xuICAgICAqL1xuICAgIHJlYWRvbmx5IGV4dHJhQ29uZmlnPzogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH07XG59XG5cbmV4cG9ydCBjbGFzcyBWaXRlc3QgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIHB1YmxpYyBzdGF0aWMgb2YocHJvamVjdDogTm9kZVByb2plY3QpOiBWaXRlc3QgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBpc1ZpdGVzdCA9IChjOiBDb21wb25lbnQpOiBjIGlzIFZpdGVzdCA9PiBjIGluc3RhbmNlb2YgVml0ZXN0O1xuICAgICAgICByZXR1cm4gcHJvamVjdC5jb21wb25lbnRzLmZpbmQoaXNWaXRlc3QpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnRmlsZVBhdGg6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluY2x1ZGU6IFNldDxzdHJpbmc+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXhjbHVkZTogU2V0PHN0cmluZz47XG4gICAgcHJpdmF0ZSByZWFkb25seSBpc29sYXRlOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcG9vbDogUG9vbDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvdmVyYWdlRW5hYmxlZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHR5cGVjaGVja0VuYWJsZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSB0eXBlY2hlY2tDaGVja2VyOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSB0eXBlY2hlY2tUc2NvbmZpZzogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFzc1dpdGhOb1Rlc3RzOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYmFpbDogbnVtYmVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXBkYXRlU25hcHNob3RzOiBib29sZWFuO1xuICAgIHByaXZhdGUgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgICBwcml2YXRlIGdsb2JhbHM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBjb3ZlcmFnZVByb3ZpZGVyOiBDb3ZlcmFnZVByb3ZpZGVyO1xuICAgIHByaXZhdGUgY292ZXJhZ2VSZXBvcnRlcnM6IEFycmF5PENvdmVyYWdlUmVwb3J0ZXI+O1xuICAgIHByaXZhdGUgY292ZXJhZ2VEaXJlY3Rvcnk6IHN0cmluZztcbiAgICBwcml2YXRlIHZlcnNpb246IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByaW50Q29uc29sZVRyYWNlOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2xvd1Rlc3RUaHJlc2hvbGQ6IG51bWJlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGV4dHJhVGVzdENvbmZpZzogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH07XG4gICAgcHJpdmF0ZSByZWFkb25seSBleHRyYUNvbmZpZzogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH07XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBOb2RlUHJvamVjdCwgb3B0aW9uczogVml0ZXN0T3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmV4dHJhQ29uZmlnICYmIFwidGVzdFwiIGluIG9wdGlvbnMuZXh0cmFDb25maWcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInZpdGVzdCBleHRyYUNvbmZpZyBtdXN0IG5vdCBjb250YWluIGB0ZXN0YCwgdXNlIGV4dHJhVGVzdENvbmZpZyBmb3IgdGVzdCBvcHRpb25zXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5leHRyYVRlc3RDb25maWcgPSBvcHRpb25zLmV4dHJhVGVzdENvbmZpZyA/PyB7fTtcbiAgICAgICAgdGhpcy5leHRyYUNvbmZpZyA9IG9wdGlvbnMuZXh0cmFDb25maWcgPz8ge307XG5cbiAgICAgICAgdGhpcy5jb25maWdGaWxlUGF0aCA9IG9wdGlvbnMuY29uZmlnRmlsZVBhdGggPz8gXCJ2aXRlc3QuY29uZmlnLnRzXCI7XG4gICAgICAgIHRoaXMuaW5jbHVkZSA9IG5ldyBTZXQob3B0aW9ucy5jb25maWc/LmluY2x1ZGUgPz8gW1wiKiovKi57dGVzdCxzcGVjfS4/KGN8bSlbanRdcz8oeClcIl0pO1xuICAgICAgICB0aGlzLmV4Y2x1ZGUgPSBuZXcgU2V0KFxuICAgICAgICAgICAgb3B0aW9ucy5jb25maWc/LmV4Y2x1ZGUgPz8gW1xuICAgICAgICAgICAgICAgIFwiKiovbm9kZV9tb2R1bGVzLyoqXCIsXG4gICAgICAgICAgICAgICAgXCIqKi9kaXN0LyoqXCIsXG4gICAgICAgICAgICAgICAgXCIqKi9jeXByZXNzLyoqXCIsXG4gICAgICAgICAgICAgICAgXCIqKi8ue2lkZWEsZ2l0LGNhY2hlLG91dHB1dCx0ZW1wfS8qKlwiLFxuICAgICAgICAgICAgICAgIFwiKiove2thcm1hLHJvbGx1cCx3ZWJwYWNrLHZpdGUsdml0ZXN0LGplc3QsYXZhLGJhYmVsLG55YyxjeXByZXNzLHRzdXAsYnVpbGQsZXNsaW50LHByZXR0aWVyfS5jb25maWcuKlwiLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pc29sYXRlID0gb3B0aW9ucy5jb25maWc/Lmlzb2xhdGUgPz8gdHJ1ZTtcbiAgICAgICAgdGhpcy5wb29sID0gb3B0aW9ucy5jb25maWc/LnBvb2wgPz8gUG9vbC5GT1JLUztcbiAgICAgICAgdGhpcy5jb3ZlcmFnZUVuYWJsZWQgPSBvcHRpb25zLmNvbmZpZz8uY292ZXJhZ2VFbmFibGVkID8/IHRydWU7XG4gICAgICAgIHRoaXMudHlwZWNoZWNrRW5hYmxlZCA9IG9wdGlvbnMuY29uZmlnPy50eXBlY2hlY2tFbmFibGVkID8/IHRoaXMuaXNUeXBlc2NyaXB0UHJvamVjdCgpO1xuICAgICAgICB0aGlzLnR5cGVjaGVja0NoZWNrZXIgPSBvcHRpb25zLmNvbmZpZz8udHlwZWNoZWNrQ2hlY2tlciA/PyBcInRzYyAtLW5vRW1pdFwiO1xuICAgICAgICB0aGlzLnR5cGVjaGVja1RzY29uZmlnID0gb3B0aW9ucy5jb25maWc/LnR5cGVjaGVja1RzY29uZmlnID8/IHRzY29uZmlnRGV2UGF0aChwcm9qZWN0KTtcbiAgICAgICAgdGhpcy5wYXNzV2l0aE5vVGVzdHMgPSBvcHRpb25zLmNvbmZpZz8ucGFzc1dpdGhOb1Rlc3RzID8/IHRydWU7XG4gICAgICAgIHRoaXMuYmFpbCA9IG9wdGlvbnMuY29uZmlnPy5iYWlsID8/IDA7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBvcHRpb25zLmNvbmZpZz8uZW52aXJvbm1lbnQgPz8gRW52aXJvbm1lbnQuTk9ERTtcbiAgICAgICAgdGhpcy5nbG9iYWxzID0gb3B0aW9ucy5jb25maWc/Lmdsb2JhbHMgPz8gZmFsc2U7XG4gICAgICAgIHRoaXMuY292ZXJhZ2VQcm92aWRlciA9IG9wdGlvbnMuY29uZmlnPy5jb3ZlcmFnZVByb3ZpZGVyID8/IENvdmVyYWdlUHJvdmlkZXIuVjg7XG4gICAgICAgIHRoaXMuY292ZXJhZ2VSZXBvcnRlcnMgPSBvcHRpb25zLmNvbmZpZz8uY292ZXJhZ2VSZXBvcnRlcnMgPz8gW0NvdmVyYWdlUmVwb3J0ZXIuVEVYVCwgQ292ZXJhZ2VSZXBvcnRlci5MQ09WXTtcbiAgICAgICAgdGhpcy5jb3ZlcmFnZURpcmVjdG9yeSA9IG9wdGlvbnMuY29uZmlnPy5jb3ZlcmFnZURpcmVjdG9yeSA/PyBcImNvdmVyYWdlXCI7XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IG9wdGlvbnMudml0ZXN0VmVyc2lvbiA/PyBcIl40XCI7XG4gICAgICAgIHRoaXMudXBkYXRlU25hcHNob3RzID0gb3B0aW9ucy5jb25maWc/LnVwZGF0ZVNuYXBzaG90cyA/PyB0cnVlO1xuICAgICAgICB0aGlzLnByaW50Q29uc29sZVRyYWNlID0gb3B0aW9ucy5jb25maWc/LnByaW50Q29uc29sZVRyYWNlID8/IHRydWU7XG4gICAgICAgIHRoaXMuc2xvd1Rlc3RUaHJlc2hvbGQgPSBvcHRpb25zLmNvbmZpZz8uc2xvd1Rlc3RUaHJlc2hvbGQgPz8gMzAwO1xuXG4gICAgICAgIHByb2plY3QuYWRkRGV2RGVwcyhgdml0ZXN0QCR7dGhpcy52ZXJzaW9ufWApO1xuICAgICAgICB0aGlzLmNvbmZpZ3VyZUNvdmVyYWdlUHJvdmlkZXIodGhpcy5jb3ZlcmFnZVByb3ZpZGVyKTtcblxuICAgICAgICBpZiAodGhpcy5nbG9iYWxzICYmIHRoaXMuaXNUeXBlc2NyaXB0UHJvamVjdCgpICYmIHRoaXMucHJvamVjdC50cnlGaW5kT2JqZWN0RmlsZSh0aGlzLnR5cGVjaGVja1RzY29uZmlnKSkge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmVHbG9iYWxzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb3ZlcmFnZURpcmVjdG9yeVBhdGggPSBwYXRoLnBvc2l4LmpvaW4oXCIvXCIsIHRoaXMuY292ZXJhZ2VEaXJlY3RvcnksIFwiL1wiKTtcbiAgICAgICAgcHJvamVjdC5ucG1pZ25vcmU/LmV4Y2x1ZGUoY292ZXJhZ2VEaXJlY3RvcnlQYXRoKTtcbiAgICAgICAgcHJvamVjdC5naXRpZ25vcmUuZXhjbHVkZShjb3ZlcmFnZURpcmVjdG9yeVBhdGgpO1xuXG4gICAgICAgIHRoaXMuYWRkVGVzdENvbW1hbmQoKTtcbiAgICAgICAgdGhpcy5zeW50aGVzaXplQ29uZmlnKCk7XG5cbiAgICAgICAgaWYgKHByb2plY3QgaW5zdGFuY2VvZiBjZGsuSnNpaVByb2plY3QgfHwgcHJvamVjdCBpbnN0YW5jZW9mIGF3c2Nkay5Bd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5KSB7XG4gICAgICAgICAgICBwcm9qZWN0Lm5wbWlnbm9yZT8uYWRkUGF0dGVybnMoXCJ2aXRlc3QuY29uZmlnLnRzXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHByZVN5bnRoZXNpemUoKSB7XG4gICAgICAgIHN1cGVyLnByZVN5bnRoZXNpemUoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLnByb2plY3QuY29tcG9uZW50cykge1xuICAgICAgICAgICAgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIEplc3QpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ2aXRlc3QgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBqZXN0XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEluY2x1ZGUocGF0dGVybjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5jbHVkZS5hZGQocGF0dGVybik7XG4gICAgICAgIHRoaXMuc3ludGhlc2l6ZUNvbmZpZygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRFeGNsdWRlKHBhdHRlcm46IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmV4Y2x1ZGUuYWRkKHBhdHRlcm4pO1xuICAgICAgICB0aGlzLnN5bnRoZXNpemVDb25maWcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29uZmlndXJlRW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IEVudmlyb25tZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICAgICAgdGhpcy5zeW50aGVzaXplQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbmZpZ3VyZUNvdmVyYWdlUHJvdmlkZXIocHJvdmlkZXI6IENvdmVyYWdlUHJvdmlkZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJvdmlkZXJQYWNrYWdlcyA9IHtcbiAgICAgICAgICAgIFtDb3ZlcmFnZVByb3ZpZGVyLlY4XTogYEB2aXRlc3QvY292ZXJhZ2UtdjhAJHt0aGlzLnZlcnNpb259YCxcbiAgICAgICAgICAgIFtDb3ZlcmFnZVByb3ZpZGVyLklTVEFOQlVMXTogYEB2aXRlc3QvY292ZXJhZ2UtaXN0YW5idWxAJHt0aGlzLnZlcnNpb259YCxcbiAgICAgICAgfTtcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3ZpZGVyUGFja2FnZSBvZiBPYmplY3QudmFsdWVzKHByb3ZpZGVyUGFja2FnZXMpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvamVjdC5kZXBzLnJlbW92ZURlcGVuZGVuY3kocHJvdmlkZXJQYWNrYWdlKTtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm9qZWN0LmRlcHMuYWRkRGVwZW5kZW5jeShwcm92aWRlclBhY2thZ2VzW3Byb3ZpZGVyXSwgRGVwZW5kZW5jeVR5cGUuREVWRU5WKTtcbiAgICAgICAgdGhpcy5jb3ZlcmFnZVByb3ZpZGVyID0gcHJvdmlkZXI7XG4gICAgICAgIHRoaXMuc3ludGhlc2l6ZUNvbmZpZygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb25maWd1cmVDb3ZlcmFnZVJlcG9ydGVycyhyZXBvcnRlcnM6IEFycmF5PENvdmVyYWdlUmVwb3J0ZXI+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuY292ZXJhZ2VSZXBvcnRlcnMgPSByZXBvcnRlcnM7XG4gICAgICAgIHRoaXMuc3ludGhlc2l6ZUNvbmZpZygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb25maWd1cmVHbG9iYWxzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVwZGF0ZVRzQ29uZmlnKCk7XG4gICAgICAgIHRoaXMuc3ludGhlc2l6ZUNvbmZpZygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVHNDb25maWcoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRzY29uZmlnID0gdGhpcy5wcm9qZWN0LnRyeUZpbmRPYmplY3RGaWxlKHRoaXMudHlwZWNoZWNrVHNjb25maWcpO1xuXG4gICAgICAgIGlmICghdHNjb25maWcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVuYWJsZSB0byBmaW5kIHRzY29uZmlnXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdHNjb25maWcuYWRkVG9BcnJheShcImNvbXBpbGVyT3B0aW9ucy50eXBlc1wiLCBcInZpdGVzdC9nbG9iYWxzXCIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNUeXBlc2NyaXB0UHJvamVjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvamVjdC5kZXBzLnRyeUdldERlcGVuZGVuY3koXCJ0eXBlc2NyaXB0XCIpICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRUZXN0Q29tbWFuZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0LnRlc3RUYXNrLmV4ZWMoXCJ2aXRlc3QgcnVuXCIsIHtcbiAgICAgICAgICAgIHJlY2VpdmVBcmdzOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0ZXN0V2F0Y2ggPSB0aGlzLnByb2plY3QudGFza3MudHJ5RmluZChcInRlc3Q6d2F0Y2hcIik7XG4gICAgICAgIGlmICghdGVzdFdhdGNoKSB7XG4gICAgICAgICAgICB0aGlzLnByb2plY3QuYWRkVGFzayhcInRlc3Q6d2F0Y2hcIiwge1xuICAgICAgICAgICAgICAgIGV4ZWM6IFwidml0ZXN0IHdhdGNoXCIsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZUFyZ3M6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRlc3RVcGRhdGVTbmFwc2hvdHMgPSB0aGlzLnByb2plY3QudGFza3MudHJ5RmluZChcInRlc3Q6dXBkYXRlXCIpO1xuICAgICAgICBpZiAoIXRlc3RVcGRhdGVTbmFwc2hvdHMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKFwidGVzdDp1cGRhdGVcIiwge1xuICAgICAgICAgICAgICAgIGV4ZWM6IFwidml0ZXN0IC0tdXBkYXRlXCIsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZUFyZ3M6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3ludGhlc2l6ZUNvbmZpZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0LnRyeVJlbW92ZUZpbGUodGhpcy5jb25maWdGaWxlUGF0aCk7XG5cbiAgICAgICAgbmV3IFRleHRGaWxlKHRoaXMsIHRoaXMuY29uZmlnRmlsZVBhdGgsIHtcbiAgICAgICAgICAgIGxpbmVzOiB0aGlzLnJlbmRlckNvbmZpZygpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNvbmZpZygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcHJvamVjdCA9IHRoaXMucHJvamVjdCBhcyBOb2RlUHJvamVjdDtcbiAgICAgICAgY29uc3QgcGFja2FnZU5hbWUgPSBwcm9qZWN0LnBhY2thZ2UucGFja2FnZU5hbWU7XG4gICAgICAgIGNvbnN0IGRlZmluZUNvbmZpZ0ltcG9ydCA9XG4gICAgICAgICAgICBwYWNrYWdlTmFtZSA9PT0gXCJAbmlrb3ZpcnRhbGEvcHJvamVuLWNvbnN0cnVjdHNcIlxuICAgICAgICAgICAgICAgID8gJ2ltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCIuL2xpYi92aXRlc3QtZGVmaW5lLWNvbmZpZ1wiOydcbiAgICAgICAgICAgICAgICA6ICdpbXBvcnQgeyBkZWZpbmVDb25maWcgfSBmcm9tIFwiQG5pa292aXJ0YWxhL3Byb2plbi1jb25zdHJ1Y3RzL2xpYi92aXRlc3QtZGVmaW5lLWNvbmZpZ1wiOyc7XG5cbiAgICAgICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgICAgICAgLi4udGhpcy5leHRyYUNvbmZpZyxcbiAgICAgICAgICAgIHRlc3Q6IGRlZXBNZXJnZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odGhpcy5yZW5kZXJUZXN0T3B0aW9ucygpLCB0aGlzLmV4dHJhVGVzdENvbmZpZyksXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIFtkZWZpbmVDb25maWdJbXBvcnQsIFwiXCIsIGBleHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoJHtKU09OLnN0cmluZ2lmeShjb25maWcsIG51bGwsIDIpfSk7YF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJUZXN0T3B0aW9ucygpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBiYWlsOiB0aGlzLmJhaWwsXG4gICAgICAgICAgICBjb3ZlcmFnZToge1xuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRoaXMuY292ZXJhZ2VFbmFibGVkLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyOiB0aGlzLmNvdmVyYWdlUHJvdmlkZXIsXG4gICAgICAgICAgICAgICAgcmVwb3J0ZXI6IHRoaXMuY292ZXJhZ2VSZXBvcnRlcnMsXG4gICAgICAgICAgICAgICAgcmVwb3J0c0RpcmVjdG9yeTogdGhpcy5jb3ZlcmFnZURpcmVjdG9yeSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogdGhpcy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGV4Y2x1ZGU6IEFycmF5LmZyb20odGhpcy5leGNsdWRlKSxcbiAgICAgICAgICAgIGdsb2JhbHM6IHRoaXMuZ2xvYmFscyxcbiAgICAgICAgICAgIGluY2x1ZGU6IEFycmF5LmZyb20odGhpcy5pbmNsdWRlKSxcbiAgICAgICAgICAgIGlzb2xhdGU6IHRoaXMuaXNvbGF0ZSxcbiAgICAgICAgICAgIHBhc3NXaXRoTm9UZXN0czogdGhpcy5wYXNzV2l0aE5vVGVzdHMsXG4gICAgICAgICAgICBwcmludENvbnNvbGVUcmFjZTogdGhpcy5wcmludENvbnNvbGVUcmFjZSxcbiAgICAgICAgICAgIHBvb2w6IHRoaXMucG9vbCxcbiAgICAgICAgICAgIHNsb3dUZXN0VGhyZXNob2xkOiB0aGlzLnNsb3dUZXN0VGhyZXNob2xkLFxuICAgICAgICAgICAgdHlwZWNoZWNrOiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZDogdGhpcy50eXBlY2hlY2tFbmFibGVkLFxuICAgICAgICAgICAgICAgIGNoZWNrZXI6IHRoaXMudHlwZWNoZWNrQ2hlY2tlcixcbiAgICAgICAgICAgICAgICB0c2NvbmZpZzogdGhpcy50eXBlY2hlY2tUc2NvbmZpZyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1cGRhdGU6IHRoaXMudXBkYXRlU25hcHNob3RzLFxuICAgICAgICB9O1xuICAgIH1cbn1cbiJdfQ==
@@ -428,7 +428,7 @@ class TypeScriptClassRenderer {
428
428
  */
429
429
  class ProjectGenerator extends projen.Component {
430
430
  options;
431
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.ProjectGenerator", version: "0.3.77" };
431
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.ProjectGenerator", version: "0.3.79" };
432
432
  renderer;
433
433
  static enumGenerated = false;
434
434
  /**
@@ -15,7 +15,7 @@ const utils_1 = require("../utils");
15
15
  * Extends Projen's base class with opinionated defaults and automatic component setup.
16
16
  */
17
17
  class AwsCdkConstructLibraryProject extends projen_1.awscdk.AwsCdkConstructLibrary {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.AwsCdkConstructLibraryProject", version: "0.3.77" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.AwsCdkConstructLibraryProject", version: "0.3.79" };
19
19
  /**
20
20
  * @param options - Project configuration
21
21
  */
@@ -15,7 +15,7 @@ const utils_1 = require("../utils");
15
15
  * Extends Projen's base class with opinionated defaults and automatic component setup.
16
16
  */
17
17
  class AwsCdkTypeScriptAppProject extends projen_1.awscdk.AwsCdkTypeScriptApp {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.AwsCdkTypeScriptAppProject", version: "0.3.77" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.AwsCdkTypeScriptAppProject", version: "0.3.79" };
19
19
  /**
20
20
  * @param options - Project configuration
21
21
  */
@@ -16,7 +16,7 @@ const utils_1 = require("../utils");
16
16
  * Extends Projen's base class with opinionated defaults and automatic component setup.
17
17
  */
18
18
  class JsiiProject extends projen_1.cdk.JsiiProject {
19
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.JsiiProject", version: "0.3.77" };
19
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.JsiiProject", version: "0.3.79" };
20
20
  /**
21
21
  * @param options - Project configuration
22
22
  */
@@ -15,7 +15,7 @@ const utils_1 = require("../utils");
15
15
  * Extends Projen's base class with opinionated defaults and automatic component setup.
16
16
  */
17
17
  class TypeScriptProject extends projen_1.typescript.TypeScriptProject {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.TypeScriptProject", version: "0.3.77" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.TypeScriptProject", version: "0.3.79" };
19
19
  /**
20
20
  * @param options - Project configuration
21
21
  */
package/package.json CHANGED
@@ -60,7 +60,7 @@
60
60
  "publishConfig": {
61
61
  "access": "public"
62
62
  },
63
- "version": "0.3.77",
63
+ "version": "0.3.79",
64
64
  "types": "lib/index.d.ts",
65
65
  "jsii": {
66
66
  "outdir": "dist",