@aws-cdk/integ-runner 2.191.2 → 2.192.0

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/README.md CHANGED
@@ -73,6 +73,8 @@ If not, changes cannot be compared across systems and the [update workflow](#upd
73
73
  List of AWS Profiles to use when running tests in parallel
74
74
  - `--exclude` (default=`false`)
75
75
  If this is set to `true` then the list of tests provided will be excluded
76
+ - `--strict` (default=`false`)
77
+ Fail if any specified tests are not found. Cannot be used with `--exclude`
76
78
  - `--from-file`
77
79
  Read the list of tests from this file
78
80
  - `--disable-update-workflow` (default=`false`)
package/lib/cli.d.ts CHANGED
@@ -20,6 +20,7 @@ export declare function parseCliArgs(args?: string[]): {
20
20
  disableUpdateWorkflow: boolean;
21
21
  language: string[] | undefined;
22
22
  watch: boolean;
23
+ strict: boolean;
23
24
  unstable: string[];
24
25
  };
25
26
  export declare function main(args: string[]): Promise<void>;
package/lib/cli.js CHANGED
@@ -37,6 +37,7 @@ function parseCliArgs(args = []) {
37
37
  .options('profiles', { type: 'array', desc: 'list of AWS profiles to use. Tests will be run in parallel across each profile+regions', default: [] })
38
38
  .options('max-workers', { type: 'number', desc: 'The max number of workerpool workers to use when running integration tests in parallel', default: 16 })
39
39
  .options('exclude', { type: 'boolean', desc: 'Run all tests in the directory, except the specified TESTs', default: false })
40
+ .option('strict', { type: 'boolean', default: false, desc: 'Fail if any specified tests are not found' })
40
41
  .options('from-file', { type: 'string', desc: 'Read TEST names from a file (one TEST per line)' })
41
42
  .option('inspect-failures', { type: 'boolean', desc: 'Keep the integ test cloud assembly if a failure occurs for inspection', default: false })
42
43
  .option('disable-update-workflow', { type: 'boolean', default: false, desc: 'If this is "true" then the stack update workflow will be disabled' })
@@ -68,6 +69,9 @@ function parseCliArgs(args = []) {
68
69
  if (tests.length > 0 && fromFile) {
69
70
  throw new Error('A list of tests cannot be provided if "--from-file" is provided');
70
71
  }
72
+ if (argv.strict && argv.exclude) {
73
+ throw new Error('Cannot use --strict with --exclude');
74
+ }
71
75
  const requestedTests = fromFile
72
76
  ? (fs.readFileSync(fromFile, { encoding: 'utf8' })).split('\n').filter(x => x)
73
77
  : (tests.length > 0 ? tests : undefined); // 'undefined' means no request
@@ -93,6 +97,7 @@ function parseCliArgs(args = []) {
93
97
  disableUpdateWorkflow: argv['disable-update-workflow'],
94
98
  language: arrayFromYargs(argv.language),
95
99
  watch: argv.watch,
100
+ strict: argv.strict,
96
101
  unstable: arrayFromYargs(argv.unstable) ?? [],
97
102
  };
98
103
  }
@@ -297,4 +302,4 @@ function engineFromOptions(options) {
297
302
  }
298
303
  return { engine: 'toolkit-lib' };
299
304
  }
300
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa0JBLG9DQW1GQztBQUVELG9CQWNDO0FBc0xELGtCQUlDO0FBL1NELGdGQUFnRjtBQUNoRix5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLCtCQUErQjtBQUMvQix5Q0FBeUM7QUFDekMsbUNBQW1DO0FBR25DLGtFQUE4RDtBQUU5RCx1Q0FBa0U7QUFDbEUscUVBQW9FO0FBRXBFLDZDQUE2QztBQUM3QywrQ0FBK0M7QUFDL0MsaUVBQWlFO0FBQ2pFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUUvQixTQUFnQixZQUFZLENBQUMsT0FBaUIsRUFBRTtJQUM5QyxNQUFNLElBQUksR0FBRyxLQUFLO1NBQ2YsS0FBSyxDQUFDLCtCQUErQixDQUFDO1NBQ3RDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7UUFDaEIsTUFBTSxFQUFFLElBQUk7UUFDWixZQUFZLEVBQUUsY0FBYztRQUM1QixPQUFPLEVBQUUsbUJBQW1CO1FBQzVCLElBQUksRUFBRSx5RkFBeUY7S0FDaEcsQ0FBQztTQUNELE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLG1DQUFtQyxFQUFFLENBQUM7U0FDL0YsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsb0NBQW9DLEVBQUUsQ0FBQztTQUMvRixNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSw4RUFBOEUsRUFBRSxDQUFDO1NBQ3pJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVB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QztRQUN0WSxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFDRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDO0FBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBFeGVyY2lzZSBhbGwgaW50ZWcgc3RhY2tzIGFuZCBpZiB0aGV5IGRlcGxveSwgdXBkYXRlIHRoZSBleHBlY3RlZCBzeW50aCBmaWxlc1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCAqIGFzIHdvcmtlcnBvb2wgZnJvbSAnd29ya2VycG9vbCc7XG5pbXBvcnQgKiBhcyBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHR5cGUgeyBFbmdpbmVPcHRpb25zIH0gZnJvbSAnLi9ydW5uZXIvZW5naW5lJztcbmltcG9ydCB0eXBlIHsgSW50ZWdUZXN0LCBJbnRlZ1Rlc3RJbmZvIH0gZnJvbSAnLi9ydW5uZXIvaW50ZWdyYXRpb24tdGVzdHMnO1xuaW1wb3J0IHsgSW50ZWdyYXRpb25UZXN0cyB9IGZyb20gJy4vcnVubmVyL2ludGVncmF0aW9uLXRlc3RzJztcbmltcG9ydCB0eXBlIHsgSW50ZWdSdW5uZXJNZXRyaWNzLCBJbnRlZ1Rlc3RXb3JrZXJDb25maWcsIERlc3RydWN0aXZlQ2hhbmdlIH0gZnJvbSAnLi93b3JrZXJzJztcbmltcG9ydCB7IHJ1blNuYXBzaG90VGVzdHMsIHJ1bkludGVncmF0aW9uVGVzdHMgfSBmcm9tICcuL3dvcmtlcnMnO1xuaW1wb3J0IHsgd2F0Y2hJbnRlZ3JhdGlvblRlc3QgfSBmcm9tICcuL3dvcmtlcnMvaW50ZWctd2F0Y2gtd29ya2VyJztcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3lhcmdzL3lhcmdzL2lzc3Vlcy8xOTI5XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZXNidWlsZC9pc3N1ZXMvMTQ5MlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IHlhcmdzID0gcmVxdWlyZSgneWFyZ3MnKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ2xpQXJncyhhcmdzOiBzdHJpbmdbXSA9IFtdKSB7XG4gIGNvbnN0IGFyZ3YgPSB5YXJnc1xuICAgIC51c2FnZSgnVXNhZ2U6IGludGVnLXJ1bm5lciBbVEVTVC4uLl0nKVxuICAgIC5vcHRpb24oJ2NvbmZpZycsIHtcbiAgICAgIGNvbmZpZzogdHJ1ZSxcbiAgICAgIGNvbmZpZ1BhcnNlcjogY29uZmlnRnJvbUZpbGUsXG4gICAgICBkZWZhdWx0OiAnaW50ZWcuY29uZmlnLmpzb24nLFxuICAgICAgZGVzYzogJ0xvYWQgb3B0aW9ucyBmcm9tIGEgSlNPTiBjb25maWcgZmlsZS4gT3B0aW9ucyBwcm92aWRlZCBhcyBDTEkgYXJndW1lbnRzIHRha2UgcHJlY2VkZW50LicsXG4gICAgfSlcbiAgICAub3B0aW9uKCd3YXRjaCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ1BlcmZvcm0gaW50ZWcgdGVzdHMgaW4gd2F0Y2ggbW9kZScgfSlcbiAgICAub3B0aW9uKCdsaXN0JywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAnTGlzdCB0ZXN0cyBpbnN0ZWFkIG9mIHJ1bm5pbmcgdGhlbScgfSlcbiAgICAub3B0aW9uKCdjbGVhbicsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiB0cnVlLCBkZXNjOiAnQ2xlYW4gdXAgYW5kIGRlbGV0ZSBzdGFjayBhZnRlciB0ZXN0IGlzIGNvbXBsZXRlZCAodXNlIC0tbm8tY2xlYW4gdG8gbmVnYXRlKScgfSlcbiAgICAub3B0aW9uKCd2ZXJib3NlJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBhbGlhczogJ3YnLCBjb3VudDogdHJ1ZSwgZGVzYzogJ1ZlcmJvc2UgbG9ncyBhbmQgbWV0cmljcyBvbiBpbnRlZ3JhdGlvbiB0ZXN0cyBkdXJhdGlvbnMgKHNwZWNpZnkgbXVsdGlwbGUgdGltZXMgdG8gaW5jcmVhc2UgdmVyYm9zaXR5KScgfSlcbiAgICAub3B0aW9uKCdkcnktcnVuJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAnZG8gbm90IGFjdHVhbGx5IGRlcGxveSB0aGUgc3RhY2suIGp1c3QgdXBkYXRlIHRoZSBzbmFwc2hvdCAobm90IHJlY29tbWVuZGVkISknIH0pXG4gICAgLm9wdGlvbigndXBkYXRlLW9uLWZhaWxlZCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ3JlcnVuIGludGVncmF0aW9uIHRlc3RzIGFuZCB1cGRhdGUgc25hcHNob3RzIGZvciBmYWlsZWQgdGVzdHMuJyB9KVxuICAgIC5vcHRpb24oJ2ZvcmNlJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAnUmVydW4gYWxsIGludGVncmF0aW9uIHRlc3RzIGV2ZW4gaWYgdGVzdHMgYXJlIHBhc3NpbmcnIH0pXG4gICAgLm9wdGlvbigncGFyYWxsZWwtcmVnaW9ucycsIHsgdHlwZTogJ2FycmF5JywgZGVzYzogJ1Rlc3RzIGFyZSBydW4gaW4gcGFyYWxsZWwgYWNyb3NzIHRoZXNlIHJlZ2lvbnMuIFRvIHByZXZlbnQgdGVzdHMgZnJvbSBydW5uaW5nIGluIHBhcmFsbGVsLCBwcm92aWRlIG9ubHkgYSBzaW5nbGUgcmVnaW9uJywgZGVmYXVsdDogW10gfSlcbiAgICAub3B0aW9ucygnZGlyZWN0b3J5JywgeyB0eXBlOiAnc3RyaW5nJywgZGVmYXVsdDogJ3Rlc3QnLCBkZXNjOiAnc3RhcnRpbmcgZGlyZWN0b3J5IHRvIGRpc2NvdmVyIGludGVncmF0aW9uIHRlc3RzLiBUZXN0cyB3aWxsIGJlIGRpc2NvdmVyZWQgcmVjdXJzaXZlbHkgZnJvbSB0aGlzIGRpcmVjdG9yeScgfSlcbiAgICAub3B0aW9ucygncHJvZmlsZXMnLCB7IHR5cGU6ICdhcnJheScsIGRlc2M6ICdsaXN0IG9mIEFXUyBwcm9maWxlcyB0byB1c2UuIFRlc3RzIHdpbGwgYmUgcnVuIGluIHBhcmFsbGVsIGFjcm9zcyBlYWNoIHByb2ZpbGUrcmVnaW9ucycsIGRlZmF1bHQ6IFtdIH0pXG4gICAgLm9wdGlvbnMoJ21heC13b3JrZXJzJywgeyB0eXBlOiAnbnVtYmVyJywgZGVzYzogJ1RoZSBtYXggbnVtYmVyIG9mIHdvcmtlcnBvb2wgd29ya2VycyB0byB1c2Ugd2hlbiBydW5uaW5nIGludGVncmF0aW9uIHRlc3RzIGluIHBhcmFsbGVsJywgZGVmYXVsdDogMTYgfSlcbiAgICAub3B0aW9ucygnZXhjbHVkZScsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZXNjOiAnUnVuIGFsbCB0ZXN0cyBpbiB0aGUgZGlyZWN0b3J5LCBleGNlcHQgdGhlIHNwZWNpZmllZCBURVNUcycsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgLm9wdGlvbnMoJ2Zyb20tZmlsZScsIHsgdHlwZTogJ3N0cmluZycsIGRlc2M6ICdSZWFkIFRFU1QgbmFtZXMgZnJvbSBhIGZpbGUgKG9uZSBURVNUIHBlciBsaW5lKScgfSlcbiAgICAub3B0aW9uKCdpbnNwZWN0LWZhaWx1cmVzJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlc2M6ICdLZWVwIHRoZSBpbnRlZyB0ZXN0IGNsb3VkIGFzc2VtYmx5IGlmIGEgZmFpbHVyZSBvY2N1cnMgZm9yIGluc3BlY3Rpb24nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgIC5vcHRpb24oJ2Rpc2FibGUtdXBkYXRlLXdvcmtmbG93JywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAnSWYgdGhpcyBpcyBcInRydWVcIiB0aGVuIHRoZSBzdGFjayB1cGRhdGUgd29ya2Zsb3cgd2lsbCBiZSBkaXNhYmxlZCcgfSlcbiAgICAub3B0aW9uKCdsYW5ndWFnZScsIHtcbiAgICAgIGFsaWFzOiAnbCcsXG4gICAgICBkZWZhdWx0OiBbJ2phdmFzY3JpcHQnLCAndHlwZXNjcmlwdCcsICdweXRob24nLCAnZ28nXSxcbiAgICAgIGNob2ljZXM6IFsnamF2YXNjcmlwdCcsICd0eXBlc2NyaXB0JywgJ3B5dGhvbicsICdnbyddLFxuICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgIG5hcmdzOiAxLFxuICAgICAgZGVzYzogJ1VzZSB0aGVzZSBwcmVzZXRzIHRvIHJ1biBpbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgdGhlIHNlbGVjdGVkIGxhbmd1YWdlcycsXG4gICAgfSlcbiAgICAub3B0aW9uKCdhcHAnLCB7IHR5cGU6ICdzdHJpbmcnLCBkZWZhdWx0OiB1bmRlZmluZWQsIGRlc2M6ICdUaGUgY3VzdG9tIENMSSBjb21tYW5kIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJ1biB0aGUgdGVzdCBmaWxlcy4gWW91IGNhbiBpbmNsdWRlIHtmaWxlUGF0aH0gdG8gc3BlY2lmeSB3aGVyZSBpbiB0aGUgY29tbWFuZCB0aGUgdGVzdCBmaWxlIHBhdGggc2hvdWxkIGJlIGluc2VydGVkLiBFeGFtcGxlOiAtLWFwcD1cInB5dGhvbjMuOCB7ZmlsZVBhdGh9XCIuJyB9KVxuICAgIC5vcHRpb24oJ3Rlc3QtcmVnZXgnLCB7IHR5cGU6ICdhcnJheScsIGRlc2M6ICdEZXRlY3QgaW50ZWdyYXRpb24gdGVzdCBmaWxlcyBtYXRjaGluZyB0aGlzIEphdmFTY3JpcHQgcmVnZXggcGF0dGVybi4gSWYgdXNlZCBtdWx0aXBsZSB0aW1lcywgYWxsIGZpbGVzIG1hdGNoaW5nIGFueSBvbmUgb2YgdGhlIHBhdHRlcm5zIGFyZSBkZXRlY3RlZC4nLCBkZWZhdWx0OiBbXSB9KVxuICAgIC5vcHRpb24oJ3Vuc3RhYmxlJywgeyB0eXBlOiAnYXJyYXknLCBkZXNjOiAnT3B0LWluIHRvIHVzaW5nIHVuc3RhYmxlIGZlYXR1cmVzLiBCeSB1c2luZyB0aGVzZSBmbGFncyB5b3UgYWNrbm93bGVkZ2VzIHRoYXQgc2NvcGUgYW5kIEFQSXMgb2YgdW5zdGFibGUgZmVhdHVyZXMgbWF5IGNoYW5nZSB3aXRob3V0IG5vdGljZS4gU3BlY2lmeSBtdWx0aXBsZSB0aW1lcyBmb3IgZWFjaCB1bnN0YWJsZSBmZWF0dXJlIHlvdSB3YW50IHRvIG9wdC1pbiB0by4nLCBuYXJnczogMSwgY2hvaWNlczogWyd0b29sa2l0LWxpYi1lbmdpbmUnLCAnZGVwcmVjYXRlZC1jbGktZW5naW5lJ10sIGRlZmF1bHQ6IFtdIH0pXG4gICAgLnN0cmljdCgpXG4gICAgLnBhcnNlKGFyZ3MpO1xuXG4gIGNvbnN0IHRlc3RzOiBzdHJpbmdbXSA9IGFyZ3YuXztcbiAgY29uc3QgcGFyYWxsZWxSZWdpb25zID0gYXJyYXlGcm9tWWFyZ3MoYXJndlsncGFyYWxsZWwtcmVnaW9ucyddKTtcbiAgY29uc3QgdGVzdFJlZ2lvbnM6IHN0cmluZ1tdID0gcGFyYWxsZWxSZWdpb25zID8/IFsndXMtZWFzdC0xJywgJ3VzLWVhc3QtMicsICd1cy13ZXN0LTInXTtcbiAgY29uc3QgcHJvZmlsZXMgPSBhcnJheUZyb21ZYXJncyhhcmd2LnByb2ZpbGVzKTtcbiAgY29uc3QgZnJvbUZpbGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGFyZ3ZbJ2Zyb20tZmlsZSddO1xuICBjb25zdCBtYXhXb3JrZXJzOiBudW1iZXIgPSBhcmd2WydtYXgtd29ya2VycyddO1xuICBjb25zdCB2ZXJib3NpdHk6IG51bWJlciA9IGFyZ3YudmVyYm9zZTtcbiAgY29uc3QgdmVyYm9zZTogYm9vbGVhbiA9IHZlcmJvc2l0eSA+PSAxO1xuXG4gIGNvbnN0IG51bVRlc3RzID0gdGVzdFJlZ2lvbnMubGVuZ3RoICogKHByb2ZpbGVzID8/IFsxXSkubGVuZ3RoO1xuICBpZiAobWF4V29ya2VycyA8IG51bVRlc3RzKSB7XG4gICAgbG9nZ2VyLndhcm5pbmcoJ1lvdSBhcmUgYXR0ZW1wdGluZyB0byBydW4gJXMgdGVzdHMgaW4gcGFyYWxsZWwsIGJ1dCBvbmx5IGhhdmUgJXMgd29ya2Vycy4gTm90IGFsbCBvZiB5b3VyIHByb2ZpbGVzK3JlZ2lvbnMgd2lsbCBiZSB1dGlsaXplZCcsIG51bVRlc3RzLCBtYXhXb3JrZXJzKTtcbiAgfVxuXG4gIGlmICh0ZXN0cy5sZW5ndGggPiAwICYmIGZyb21GaWxlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBIGxpc3Qgb2YgdGVzdHMgY2Fubm90IGJlIHByb3ZpZGVkIGlmIFwiLS1mcm9tLWZpbGVcIiBpcyBwcm92aWRlZCcpO1xuICB9XG4gIGNvbnN0IHJlcXVlc3RlZFRlc3RzID0gZnJvbUZpbGVcbiAgICA/IChmcy5yZWFkRmlsZVN5bmMoZnJvbUZpbGUsIHsgZW5jb2Rpbmc6ICd1dGY4JyB9KSkuc3BsaXQoJ1xcbicpLmZpbHRlcih4ID0+IHgpXG4gICAgOiAodGVzdHMubGVuZ3RoID4gMCA/IHRlc3RzIDogdW5kZWZpbmVkKTsgLy8gJ3VuZGVmaW5lZCcgbWVhbnMgbm8gcmVxdWVzdFxuXG4gIHJldHVybiB7XG4gICAgdGVzdHM6IHJlcXVlc3RlZFRlc3RzLFxuICAgIGFwcDogYXJndi5hcHAgYXMgKHN0cmluZyB8IHVuZGVmaW5lZCksXG4gICAgdGVzdFJlZ2V4OiBhcnJheUZyb21ZYXJncyhhcmd2Wyd0ZXN0LXJlZ2V4J10pLFxuICAgIHRlc3RSZWdpb25zLFxuICAgIG9yaWdpbmFsUmVnaW9uczogcGFyYWxsZWxSZWdpb25zLFxuICAgIHByb2ZpbGVzLFxuICAgIHJ1blVwZGF0ZU9uRmFpbGVkOiAoYXJndlsndXBkYXRlLW9uLWZhaWxlZCddID8/IGZhbHNlKSBhcyBib29sZWFuLFxuICAgIGZyb21GaWxlLFxuICAgIGV4Y2x1ZGU6IGFyZ3YuZXhjbHVkZSBhcyBib29sZWFuLFxuICAgIG1heFdvcmtlcnMsXG4gICAgbGlzdDogYXJndi5saXN0IGFzIGJvb2xlYW4sXG4gICAgZGlyZWN0b3J5OiBhcmd2LmRpcmVjdG9yeSBhcyBzdHJpbmcsXG4gICAgaW5zcGVjdEZhaWx1cmVzOiBhcmd2WydpbnNwZWN0LWZhaWx1cmVzJ10gYXMgYm9vbGVhbixcbiAgICB2ZXJib3NpdHksXG4gICAgdmVyYm9zZSxcbiAgICBjbGVhbjogYXJndi5jbGVhbiBhcyBib29sZWFuLFxuICAgIGZvcmNlOiBhcmd2LmZvcmNlIGFzIGJvb2xlYW4sXG4gICAgZHJ5UnVuOiBhcmd2WydkcnktcnVuJ10gYXMgYm9vbGVhbixcbiAgICBkaXNhYmxlVXBkYXRlV29ya2Zsb3c6IGFyZ3ZbJ2Rpc2FibGUtdXBkYXRlLXdvcmtmbG93J10gYXMgYm9vbGVhbixcbiAgICBsYW5ndWFnZTogYXJyYXlGcm9tWWFyZ3MoYXJndi5sYW5ndWFnZSksXG4gICAgd2F0Y2g6IGFyZ3Yud2F0Y2ggYXMgYm9vbGVhbixcbiAgICB1bnN0YWJsZTogYXJyYXlGcm9tWWFyZ3MoYXJndi51bnN0YWJsZSkgPz8gW10sXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKGFyZ3M6IHN0cmluZ1tdKSB7XG4gIGxldCBlbmdpbmVGb3JFcnJvcjtcbiAgdHJ5IHtcbiAgICBjb25zdCBvcHRpb25zID0gcGFyc2VDbGlBcmdzKGFyZ3MpO1xuICAgIGNvbnN0IGVuZ2luZSA9IGVuZ2luZUZyb21PcHRpb25zKG9wdGlvbnMpO1xuICAgIGVuZ2luZUZvckVycm9yID0gZW5naW5lLmVuZ2luZTtcbiAgICBhd2FpdCBydW4ob3B0aW9ucywgZW5naW5lKTtcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBsb2dnZXIuZXJyb3IoZXJyKTtcbiAgICBpZiAoZW5naW5lRm9yRXJyb3IgPT09ICd0b29sa2l0LWxpYicpIHtcbiAgICAgIGxvZ2dlci53YXJuaW5nKCdcXG5bTm90aWNlXSBZb3UgYXJlIHVzaW5nIHRoZSBuZXcgZGVmYXVsdCBlbmdpbmUgdG8gcnVuIGludGVncmF0aW9uIHRlc3RzLiBJZiB5b3UgdGhpbmsgdGhlIGFib3ZlIGZhaWx1cmUgaGFzIGJlZW4gY2F1c2VkIGJ5IHRoZSBuZXcgZW5naW5lLCB5b3UgbWF5IGNob29zZSB0byB0ZW1wb3JhcmlseSByZXZlcnQgdG8gdGhlIG9sZCBlbmdpbmUgYnkgYWRkaW5nIHRoZSBgLS11bnN0YWJsZT1kZXByZWNhdGVkLWNsaS1lbmdpbmVgIG9wdGlvbi4gUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGVuZ2luZSBpcyBkZXByZWNhdGVkIGFuZCBzY2hlZHVsZWQgdG8gYmUgcmVtb3ZlZCBpbiBKYW51YXJ5IDIwMjYuXFxuXFxuSWYgcmV2ZXJ0aW5nIHRvIHRoZSBvbGQgZW5naW5lIHJlc29sdmVzIGFuIGlzc3VlIGZvciB5b3UsIHBsZWFzZSBsZXQgdXMga25vdyBzbyB3ZSBjYW4gYWRkcmVzcyB0aGlzIGluIHRoZSBuZXcgZW5naW5lLiBSZXBvcnQgaXNzdWVzIGhlcmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay1jbGkvaXNzdWVzL25ldy9jaG9vc2UnKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1bihvcHRpb25zOiBSZXR1cm5UeXBlPHR5cGVvZiBwYXJzZUNsaUFyZ3M+LCB7IGVuZ2luZSB9OiBFbmdpbmVPcHRpb25zKSB7XG4gIGNvbnN0IHRlc3RzRnJvbUFyZ3MgPSBhd2FpdCBuZXcgSW50ZWdyYXRpb25UZXN0cyhwYXRoLnJlc29sdmUob3B0aW9ucy5kaXJlY3RvcnkpKS5mcm9tQ2xpT3B0aW9ucyhvcHRpb25zKTtcblxuICAvLyBMaXN0IG9ubHkgcHJpbnRzIHRoZSBkaXNjb3ZlcmVkIHRlc3RzXG4gIGlmIChvcHRpb25zLmxpc3QpIHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSh0ZXN0c0Zyb21BcmdzLm1hcCh0ID0+IHQuZGlzY292ZXJ5UmVsYXRpdmVGaWxlTmFtZSkuam9pbignXFxuJykgKyAnXFxuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcG9vbCA9IHdvcmtlcnBvb2wucG9vbChwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnbGliJywgJ3dvcmtlcnMnLCAnZXh0cmFjdCcsICdpbmRleC5qcycpLCB7XG4gICAgbWF4V29ya2Vyczogb3B0aW9ucy53YXRjaCA/IDEgOiBvcHRpb25zLm1heFdvcmtlcnMsXG4gIH0pO1xuXG4gIGNvbnN0IHRlc3RzVG9SdW46IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdID0gW107XG4gIGxldCBkZXN0cnVjdGl2ZUNoYW5nZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbGV0IGZhaWxlZFNuYXBzaG90czogSW50ZWdUZXN0V29ya2VyQ29uZmlnW10gPSBbXTtcbiAgbGV0IHRlc3RzU3VjY2VlZGVkID0gZmFsc2U7XG4gIHZhbGlkYXRlV2F0Y2hBcmdzKHtcbiAgICAuLi5vcHRpb25zLFxuICAgIHRlc3RSZWdpb25zOiBvcHRpb25zLm9yaWdpbmFsUmVnaW9ucyxcbiAgICB0ZXN0czogdGVzdHNGcm9tQXJncyxcbiAgfSk7XG5cbiAgdHJ5IHtcbiAgICBpZiAoIW9wdGlvbnMud2F0Y2gpIHtcbiAgICAgIC8vIGFsd2F5cyBydW4gc25hcHNob3QgdGVzdHMsIGJ1dCBpZiAnLS1mb3JjZScgaXMgcGFzc2VkIHRoZW5cbiAgICAgIC8vIHJ1biBpbnRlZ3JhdGlvbiB0ZXN0cyBvbiBhbGwgZmFpbGVkIHRlc3RzLCBub3QganVzdCB0aG9zZSB0aGF0XG4gICAgICAvLyBmYWlsZWQgc25hcHNob3QgdGVzdHNcbiAgICAgIGZhaWxlZFNuYXBzaG90cyA9IGF3YWl0IHJ1blNuYXBzaG90VGVzdHMocG9vbCwgdGVzdHNGcm9tQXJncywge1xuICAgICAgICByZXRhaW46IG9wdGlvbnMuaW5zcGVjdEZhaWx1cmVzLFxuICAgICAgICB2ZXJib3NlOiBvcHRpb25zLnZlcmJvc2UsXG4gICAgICAgIGVuZ2luZSxcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCBmYWlsdXJlIG9mIGZhaWxlZFNuYXBzaG90cykge1xuICAgICAgICBsb2dnZXIud2FybmluZyhgRmFpbGVkOiAke2ZhaWx1cmUuZmlsZU5hbWV9YCk7XG4gICAgICAgIGlmIChmYWlsdXJlLmRlc3RydWN0aXZlQ2hhbmdlcyAmJiBmYWlsdXJlLmRlc3RydWN0aXZlQ2hhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcHJpbnREZXN0cnVjdGl2ZUNoYW5nZXMoZmFpbHVyZS5kZXN0cnVjdGl2ZUNoYW5nZXMpO1xuICAgICAgICAgIGRlc3RydWN0aXZlQ2hhbmdlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghb3B0aW9ucy5mb3JjZSkge1xuICAgICAgICB0ZXN0c1RvUnVuLnB1c2goLi4uZmFpbGVkU25hcHNob3RzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGlmIGFueSBvZiB0aGUgdGVzdCBmYWlsZWQgc25hcHNob3QgdGVzdHMsIGtlZXAgdGhvc2UgcmVzdWx0c1xuICAgICAgICAvLyBhbmQgbWVyZ2Ugd2l0aCB0aGUgcmVzdCBvZiB0aGUgdGVzdHMgZnJvbSBhcmdzXG4gICAgICAgIHRlc3RzVG9SdW4ucHVzaCguLi5tZXJnZVRlc3RzKHRlc3RzRnJvbUFyZ3MubWFwKHQgPT4gdC5pbmZvKSwgZmFpbGVkU25hcHNob3RzKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRlc3RzVG9SdW4ucHVzaCguLi50ZXN0c0Zyb21BcmdzLm1hcCh0ID0+IHQuaW5mbykpO1xuICAgIH1cblxuICAgIC8vIHJ1biBpbnRlZ3JhdGlvbiB0ZXN0cyBpZiBgLS11cGRhdGUtb24tZmFpbGVkYCBPUiBgLS1mb3JjZWAgaXMgdXNlZFxuICAgIGlmIChvcHRpb25zLnJ1blVwZGF0ZU9uRmFpbGVkIHx8IG9wdGlvbnMuZm9yY2UpIHtcbiAgICAgIGNvbnN0IHsgc3VjY2VzcywgbWV0cmljcyB9ID0gYXdhaXQgcnVuSW50ZWdyYXRpb25UZXN0cyh7XG4gICAgICAgIHBvb2wsXG4gICAgICAgIGVuZ2luZSxcbiAgICAgICAgdGVzdHM6IHRlc3RzVG9SdW4sXG4gICAgICAgIHJlZ2lvbnM6IG9wdGlvbnMudGVzdFJlZ2lvbnMsXG4gICAgICAgIHByb2ZpbGVzOiBvcHRpb25zLnByb2ZpbGVzLFxuICAgICAgICBjbGVhbjogb3B0aW9ucy5jbGVhbixcbiAgICAgICAgZHJ5UnVuOiBvcHRpb25zLmRyeVJ1bixcbiAgICAgICAgdmVyYm9zaXR5OiBvcHRpb25zLnZlcmJvc2l0eSxcbiAgICAgICAgdXBkYXRlV29ya2Zsb3c6ICFvcHRpb25zLmRpc2FibGVVcGRhdGVXb3JrZmxvdyxcbiAgICAgICAgd2F0Y2g6IG9wdGlvbnMud2F0Y2gsXG4gICAgICB9KTtcbiAgICAgIHRlc3RzU3VjY2VlZGVkID0gc3VjY2VzcztcblxuICAgICAgaWYgKG9wdGlvbnMuY2xlYW4gPT09IGZhbHNlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuaW5nKCdOb3QgY2xlYW5pbmcgdXAgc3RhY2tzIHNpbmNlIFwiLS1uby1jbGVhblwiIHdhcyB1c2VkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChCb29sZWFuKG9wdGlvbnMudmVyYm9zZSkpIHtcbiAgICAgICAgcHJpbnRNZXRyaWNzKG1ldHJpY3MpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTb21lIGludGVncmF0aW9uIHRlc3RzIGZhaWxlZCEnKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMud2F0Y2gpIHtcbiAgICAgIGF3YWl0IHdhdGNoSW50ZWdyYXRpb25UZXN0KHBvb2wsIHtcbiAgICAgICAgd2F0Y2g6IHRydWUsXG4gICAgICAgIGVuZ2luZSxcbiAgICAgICAgdmVyYm9zaXR5OiBvcHRpb25zLnZlcmJvc2l0eSxcbiAgICAgICAgLi4udGVzdHNUb1J1blswXSxcbiAgICAgICAgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlcyA/IG9wdGlvbnMucHJvZmlsZXNbMF0gOiB1bmRlZmluZWQsXG4gICAgICAgIHJlZ2lvbjogb3B0aW9ucy50ZXN0UmVnaW9uc1swXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICB2b2lkIHBvb2wudGVybWluYXRlKCk7XG4gIH1cblxuICBpZiAoZGVzdHJ1Y3RpdmVDaGFuZ2VzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTb21lIGNoYW5nZXMgd2VyZSBkZXN0cnVjdGl2ZSEnKTtcbiAgfVxuICBpZiAoZmFpbGVkU25hcHNob3RzLmxlbmd0aCA+IDApIHtcbiAgICBsZXQgbWVzc2FnZSA9ICcnO1xuICAgIGlmICghb3B0aW9ucy5ydW5VcGRhdGVPbkZhaWxlZCkge1xuICAgICAgbWVzc2FnZSA9ICdUbyByZS1ydW4gZmFpbGVkIHRlc3RzIHJ1bjogaW50ZWctcnVubmVyIC0tdXBkYXRlLW9uLWZhaWxlZCc7XG4gICAgfVxuICAgIGlmICghdGVzdHNTdWNjZWVkZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU29tZSB0ZXN0cyBmYWlsZWQhXFxuJHttZXNzYWdlfWApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVdhdGNoQXJncyhhcmdzOiB7XG4gIHRlc3RzOiBJbnRlZ1Rlc3RbXTtcbiAgdGVzdFJlZ2lvbnM/OiBzdHJpbmdbXTtcbiAgcHJvZmlsZXM/OiBzdHJpbmdbXTtcbiAgbWF4V29ya2VyczogbnVtYmVyO1xuICBmb3JjZTogYm9vbGVhbjtcbiAgZHJ5UnVuOiBib29sZWFuO1xuICBkaXNhYmxlVXBkYXRlV29ya2Zsb3c6IGJvb2xlYW47XG4gIHJ1blVwZGF0ZU9uRmFpbGVkOiBib29sZWFuO1xuICB3YXRjaDogYm9vbGVhbjtcbn0pIHtcbiAgaWYgKGFyZ3Mud2F0Y2gpIHtcbiAgICBpZiAoXG4gICAgICAoYXJncy50ZXN0UmVnaW9ucyAmJiBhcmdzLnRlc3RSZWdpb25zLmxlbmd0aCA+IDEpXG4gICAgICAgIHx8IChhcmdzLnByb2ZpbGVzICYmIGFyZ3MucHJvZmlsZXMubGVuZ3RoID4gMSlcbiAgICAgICAgfHwgYXJncy50ZXN0cy5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1J1bm5pbmcgd2l0aCB3YXRjaCBvbmx5IHN1cHBvcnRzIGEgc2luZ2xlIHRlc3QuIE9ubHkgcHJvdmlkZSBhIHNpbmdsZSBvcHRpb24nK1xuICAgICAgICAndG8gYC0tcHJvZmlsZXNgIGAtLXBhcmFsbGVsLXJlZ2lvbnNgIGAtLW1heC13b3JrZXJzJyk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3MucnVuVXBkYXRlT25GYWlsZWQgfHwgYXJncy5kaXNhYmxlVXBkYXRlV29ya2Zsb3cgfHwgYXJncy5mb3JjZSB8fCBhcmdzLmRyeVJ1bikge1xuICAgICAgbG9nZ2VyLndhcm5pbmcoJ2FyZ3MgYC0tdXBkYXRlLW9uLWZhaWxlZGAsIGAtLWRpc2FibGUtdXBkYXRlLXdvcmtmbG93YCwgYC0tZm9yY2VgLCBgLS1kcnktcnVuYCBoYXZlIG5vIGVmZmVjdCB3aGVuIHJ1bm5pbmcgd2l0aCBgLS13YXRjaGAnKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnREZXN0cnVjdGl2ZUNoYW5nZXMoY2hhbmdlczogRGVzdHJ1Y3RpdmVDaGFuZ2VbXSk6IHZvaWQge1xuICBpZiAoY2hhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgbG9nZ2VyLndhcm5pbmcoJyEhISBUaGlzIHRlc3QgY29udGFpbnMgJXMgISEhJywgY2hhbGsuYm9sZCgnZGVzdHJ1Y3RpdmUgY2hhbmdlcycpKTtcbiAgICBjaGFuZ2VzLmZvckVhY2goY2hhbmdlID0+IHtcbiAgICAgIGxvZ2dlci53YXJuaW5nKCcgICAgU3RhY2s6ICVzIC0gUmVzb3VyY2U6ICVzIC0gSW1wYWN0OiAlcycsIGNoYW5nZS5zdGFja05hbWUsIGNoYW5nZS5sb2dpY2FsSWQsIGNoYW5nZS5pbXBhY3QpO1xuICAgIH0pO1xuICAgIGxvZ2dlci53YXJuaW5nKCchISEgSWYgdGhlc2UgZGVzdHJ1Y3RpdmUgY2hhbmdlcyBhcmUgbmVjZXNzYXJ5LCBwbGVhc2UgaW5kaWNhdGUgdGhpcyBvbiB0aGUgUFIgISEhJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRNZXRyaWNzKG1ldHJpY3M6IEludGVnUnVubmVyTWV0cmljc1tdKTogdm9pZCB7XG4gIGxvZ2dlci5oaWdobGlnaHQoJyAgIC0tLSBJbnRlZ3JhdGlvbiB0ZXN0IG1ldHJpY3MgLS0tJyk7XG4gIGNvbnN0IHNvcnRlZE1ldHJpY3MgPSBtZXRyaWNzLnNvcnQoKGEsIGIpID0+IGEuZHVyYXRpb24gLSBiLmR1cmF0aW9uKTtcbiAgc29ydGVkTWV0cmljcy5mb3JFYWNoKG1ldHJpYyA9PiB7XG4gICAgbG9nZ2VyLnByaW50KCdQcm9maWxlICVzICsgUmVnaW9uICVzIHRvdGFsIHRpbWU6ICVzJywgbWV0cmljLnByb2ZpbGUsIG1ldHJpYy5yZWdpb24sIG1ldHJpYy5kdXJhdGlvbik7XG4gICAgY29uc3Qgc29ydGVkVGVzdHMgPSBPYmplY3QuZW50cmllcyhtZXRyaWMudGVzdHMpLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKTtcbiAgICBzb3J0ZWRUZXN0cy5mb3JFYWNoKHRlc3QgPT4gbG9nZ2VyLnByaW50KCcgICVzOiAlcycsIHRlc3RbMF0sIHRlc3RbMV0pKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVHJhbnNsYXRlIGEgWWFyZ3MgaW5wdXQgYXJyYXkgdG8gc29tZXRoaW5nIHRoYXQgbWFrZXMgbW9yZSBzZW5zZSBpbiBhIHByb2dyYW1taW5nIGxhbmd1YWdlXG4gKiBtb2RlbCAodGVsbGluZyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFic2VuY2UgYW5kIGFuIGVtcHR5IGFycmF5KVxuICpcbiAqIC0gQW4gZW1wdHkgYXJyYXkgaXMgdGhlIGRlZmF1bHQgY2FzZSwgbWVhbmluZyB0aGUgdXNlciBkaWRuJ3QgcGFzcyBhbnkgYXJndW1lbnRzLiBXZSByZXR1cm5cbiAqICAgdW5kZWZpbmVkLlxuICogLSBJZiB0aGUgdXNlciBwYXNzZWQgYSBzaW5nbGUgZW1wdHkgc3RyaW5nLCB0aGV5IGRpZCBzb21ldGhpbmcgbGlrZSBgLS1hcnJheT1gLCB3aGljaCB3ZSdsbFxuICogICB0YWtlIHRvIG1lYW4gdGhleSBwYXNzZWQgYW4gZW1wdHkgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RnJvbVlhcmdzKHhzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHhzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHhzLmZpbHRlcih4ID0+IHggIT09ICcnKTtcbn1cblxuLyoqXG4gKiBNZXJnZSB0aGUgdGVzdHMgd2UgcmVjZWl2ZWQgZnJvbSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHdpdGhcbiAqIHRlc3RzIHRoYXQgZmFpbGVkIHNuYXBzaG90IHRlc3RzLiBUaGUgZmFpbGVkIHNuYXBzaG90IHRlc3RzIGhhdmUgYWRkaXRpb25hbFxuICogaW5mb3JtYXRpb24gdGhhdCB3ZSB3YW50IHRvIGtlZXAgc28gdGhpcyBzaG91bGQgb3ZlcnJpZGUgYW55IHRlc3QgZnJvbSBhcmdzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlVGVzdHModGVzdEZyb21BcmdzOiBJbnRlZ1Rlc3RJbmZvW10sIGZhaWxlZFNuYXBzaG90VGVzdHM6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdKTogSW50ZWdUZXN0V29ya2VyQ29uZmlnW10ge1xuICBjb25zdCBmYWlsZWRUZXN0TmFtZXMgPSBuZXcgU2V0KGZhaWxlZFNuYXBzaG90VGVzdHMubWFwKHRlc3QgPT4gdGVzdC5maWxlTmFtZSkpO1xuICBjb25zdCBmaW5hbDogSW50ZWdUZXN0V29ya2VyQ29uZmlnW10gPSBmYWlsZWRTbmFwc2hvdFRlc3RzO1xuICBmaW5hbC5wdXNoKC4uLnRlc3RGcm9tQXJncy5maWx0ZXIodGVzdCA9PiAhZmFpbGVkVGVzdE5hbWVzLmhhcyh0ZXN0LmZpbGVOYW1lKSkpO1xuICByZXR1cm4gZmluYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGkoYXJnczogc3RyaW5nW10gPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMikpIHtcbiAgbWFpbihhcmdzKS50aGVuKCkuY2F0Y2goKCkgPT4ge1xuICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZWFkIENMSSBvcHRpb25zIGZyb20gYSBjb25maWcgZmlsZSBpZiBwcm92aWRlZC5cbiAqXG4gKiBAcmV0dXJucyBwYXJzZWQgQ0xJIGNvbmZpZyBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGNvbmZpZ0Zyb21GaWxlKGZpbGVOYW1lPzogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gIGlmICghZmlsZU5hbWUpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhmaWxlTmFtZSwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbmdpbmVGcm9tT3B0aW9ucyhvcHRpb25zOiB7IHVuc3RhYmxlPzogc3RyaW5nW10gfSk6IFJlcXVpcmVkPEVuZ2luZU9wdGlvbnM+IHtcbiAgaWYgKG9wdGlvbnMudW5zdGFibGU/LmluY2x1ZGVzKCdkZXByZWNhdGVkLWNsaS1lbmdpbmUnKSkge1xuICAgIGxvZ2dlci53YXJuaW5nKCdbRGVwcmVjYXRpb24gTm90aWNlXSBZb3UgaGF2ZSBvcHRlZC1pbiB0byB1c2UgdGhlIGRlcHJlY2F0ZWQgQ0xJIGVuZ2luZSB3aGljaCBpcyBzY2hlZHVsZWQgdG8gYmUgcmVtb3ZlZCBpbiBKYW51YXJ5IDIwMjYuIElmIHlvdSBoYXZlIGVuY291bnRlcmVkIGJsb2NrZXJzIHdoaWxlIHVzaW5nIHRoZSBuZXcgZGVmYXVsdCBlbmdpbmUsIHBsZWFzZSBsZXQgdXMga25vdyBieSBvcGVuaW5nIGFuIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGstY2xpL2lzc3Vlcy9uZXcvY2hvb3NlXFxuXFxuVG8gdXNlIHRoZSBuZXcgZGVmYXVsdCBlbmdpbmUsIHJlbW92ZSB0aGUgYC0tdW5zdGFibGU9ZGVwcmVjYXRlZC1jbGktZW5naW5lYCBvcHRpb24uJyk7XG4gICAgcmV0dXJuIHsgZW5naW5lOiAnY2xpLXdyYXBwZXInIH07XG4gIH1cbiAgcmV0dXJuIHsgZW5naW5lOiAndG9vbGtpdC1saWInIH07XG59XG4iXX0=
305
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa0JBLG9DQTBGQztBQUVELG9CQWNDO0FBc0xELGtCQUlDO0FBdFRELGdGQUFnRjtBQUNoRix5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLCtCQUErQjtBQUMvQix5Q0FBeUM7QUFDekMsbUNBQW1DO0FBR25DLGtFQUE4RDtBQUU5RCx1Q0FBa0U7QUFDbEUscUVBQW9FO0FBRXBFLDZDQUE2QztBQUM3QywrQ0FBK0M7QUFDL0MsaUVBQWlFO0FBQ2pFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUUvQixTQUFnQixZQUFZLENBQUMsT0FBaUIsRUFBRTtJQUM5QyxNQUFNLElBQUksR0FBRyxLQUFLO1NBQ2YsS0FBSyxDQUFDLCtCQUErQixDQUFDO1NBQ3RDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7UUFDaEIsTUFBTSxFQUFFLElBQUk7UUFDWixZQUFZLEVBQUUsY0FBYztRQUM1QixPQUFPLEVBQUUsbUJBQW1CO1FBQzVCLElBQUksRUFBRSx5RkFBeUY7S0FDaEcsQ0FBQztTQUNELE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLG1DQUFtQyxFQUFFLENBQUM7U0FDL0YsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsb0NBQW9DLEVBQUUsQ0FBQztTQUMvRixNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSw4RUFBOEUsRUFBRSxDQUFDO1NBQ3pJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVB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LEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsT0FBZ0M7SUFDekQsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUM7UUFDeEQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxxWEFBcVgsQ0FBQyxDQUFDO1FBQ3RZLE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUNELE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEV4ZXJjaXNlIGFsbCBpbnRlZyBzdGFja3MgYW5kIGlmIHRoZXkgZGVwbG95LCB1cGRhdGUgdGhlIGV4cGVjdGVkIHN5bnRoIGZpbGVzXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0ICogYXMgd29ya2VycG9vbCBmcm9tICd3b3JrZXJwb29sJztcbmltcG9ydCAqIGFzIGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgdHlwZSB7IEVuZ2luZU9wdGlvbnMgfSBmcm9tICcuL3J1bm5lci9lbmdpbmUnO1xuaW1wb3J0IHR5cGUgeyBJbnRlZ1Rlc3QsIEludGVnVGVzdEluZm8gfSBmcm9tICcuL3J1bm5lci9pbnRlZ3JhdGlvbi10ZXN0cyc7XG5pbXBvcnQgeyBJbnRlZ3JhdGlvblRlc3RzIH0gZnJvbSAnLi9ydW5uZXIvaW50ZWdyYXRpb24tdGVzdHMnO1xuaW1wb3J0IHR5cGUgeyBJbnRlZ1J1bm5lck1ldHJpY3MsIEludGVnVGVzdFdvcmtlckNvbmZpZywgRGVzdHJ1Y3RpdmVDaGFuZ2UgfSBmcm9tICcuL3dvcmtlcnMnO1xuaW1wb3J0IHsgcnVuU25hcHNob3RUZXN0cywgcnVuSW50ZWdyYXRpb25UZXN0cyB9IGZyb20gJy4vd29ya2Vycyc7XG5pbXBvcnQgeyB3YXRjaEludGVncmF0aW9uVGVzdCB9IGZyb20gJy4vd29ya2Vycy9pbnRlZy13YXRjaC13b3JrZXInO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20veWFyZ3MveWFyZ3MvaXNzdWVzLzE5Mjlcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9lc2J1aWxkL2lzc3Vlcy8xNDkyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuY29uc3QgeWFyZ3MgPSByZXF1aXJlKCd5YXJncycpO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDbGlBcmdzKGFyZ3M6IHN0cmluZ1tdID0gW10pIHtcbiAgY29uc3QgYXJndiA9IHlhcmdzXG4gICAgLnVzYWdlKCdVc2FnZTogaW50ZWctcnVubmVyIFtURVNULi4uXScpXG4gICAgLm9wdGlvbignY29uZmlnJywge1xuICAgICAgY29uZmlnOiB0cnVlLFxuICAgICAgY29uZmlnUGFyc2VyOiBjb25maWdGcm9tRmlsZSxcbiAgICAgIGRlZmF1bHQ6ICdpbnRlZy5jb25maWcuanNvbicsXG4gICAgICBkZXNjOiAnTG9hZCBvcHRpb25zIGZyb20gYSBKU09OIGNvbmZpZyBmaWxlLiBPcHRpb25zIHByb3ZpZGVkIGFzIENMSSBhcmd1bWVudHMgdGFrZSBwcmVjZWRlbnQuJyxcbiAgICB9KVxuICAgIC5vcHRpb24oJ3dhdGNoJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAnUGVyZm9ybSBpbnRlZyB0ZXN0cyBpbiB3YXRjaCBtb2RlJyB9KVxuICAgIC5vcHRpb24oJ2xpc3QnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdMaXN0IHRlc3RzIGluc3RlYWQgb2YgcnVubmluZyB0aGVtJyB9KVxuICAgIC5vcHRpb24oJ2NsZWFuJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IHRydWUsIGRlc2M6ICdDbGVhbiB1cCBhbmQgZGVsZXRlIHN0YWNrIGFmdGVyIHRlc3QgaXMgY29tcGxldGVkICh1c2UgLS1uby1jbGVhbiB0byBuZWdhdGUpJyB9KVxuICAgIC5vcHRpb24oJ3ZlcmJvc2UnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGFsaWFzOiAndicsIGNvdW50OiB0cnVlLCBkZXNjOiAnVmVyYm9zZSBsb2dzIGFuZCBtZXRyaWNzIG9uIGludGVncmF0aW9uIHRlc3RzIGR1cmF0aW9ucyAoc3BlY2lmeSBtdWx0aXBsZSB0aW1lcyB0byBpbmNyZWFzZSB2ZXJib3NpdHkpJyB9KVxuICAgIC5vcHRpb24oJ2RyeS1ydW4nLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdkbyBub3QgYWN0dWFsbHkgZGVwbG95IHRoZSBzdGFjay4ganVzdCB1cGRhdGUgdGhlIHNuYXBzaG90IChub3QgcmVjb21tZW5kZWQhKScgfSlcbiAgICAub3B0aW9uKCd1cGRhdGUtb24tZmFpbGVkJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAncmVydW4gaW50ZWdyYXRpb24gdGVzdHMgYW5kIHVwZGF0ZSBzbmFwc2hvdHMgZm9yIGZhaWxlZCB0ZXN0cy4nIH0pXG4gICAgLm9wdGlvbignZm9yY2UnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdSZXJ1biBhbGwgaW50ZWdyYXRpb24gdGVzdHMgZXZlbiBpZiB0ZXN0cyBhcmUgcGFzc2luZycgfSlcbiAgICAub3B0aW9uKCdwYXJhbGxlbC1yZWdpb25zJywgeyB0eXBlOiAnYXJyYXknLCBkZXNjOiAnVGVzdHMgYXJlIHJ1biBpbiBwYXJhbGxlbCBhY3Jvc3MgdGhlc2UgcmVnaW9ucy4gVG8gcHJldmVudCB0ZXN0cyBmcm9tIHJ1bm5pbmcgaW4gcGFyYWxsZWwsIHByb3ZpZGUgb25seSBhIHNpbmdsZSByZWdpb24nLCBkZWZhdWx0OiBbXSB9KVxuICAgIC5vcHRpb25zKCdkaXJlY3RvcnknLCB7IHR5cGU6ICdzdHJpbmcnLCBkZWZhdWx0OiAndGVzdCcsIGRlc2M6ICdzdGFydGluZyBkaXJlY3RvcnkgdG8gZGlzY292ZXIgaW50ZWdyYXRpb24gdGVzdHMuIFRlc3RzIHdpbGwgYmUgZGlzY292ZXJlZCByZWN1cnNpdmVseSBmcm9tIHRoaXMgZGlyZWN0b3J5JyB9KVxuICAgIC5vcHRpb25zKCdwcm9maWxlcycsIHsgdHlwZTogJ2FycmF5JywgZGVzYzogJ2xpc3Qgb2YgQVdTIHByb2ZpbGVzIHRvIHVzZS4gVGVzdHMgd2lsbCBiZSBydW4gaW4gcGFyYWxsZWwgYWNyb3NzIGVhY2ggcHJvZmlsZStyZWdpb25zJywgZGVmYXVsdDogW10gfSlcbiAgICAub3B0aW9ucygnbWF4LXdvcmtlcnMnLCB7IHR5cGU6ICdudW1iZXInLCBkZXNjOiAnVGhlIG1heCBudW1iZXIgb2Ygd29ya2VycG9vbCB3b3JrZXJzIHRvIHVzZSB3aGVuIHJ1bm5pbmcgaW50ZWdyYXRpb24gdGVzdHMgaW4gcGFyYWxsZWwnLCBkZWZhdWx0OiAxNiB9KVxuICAgIC5vcHRpb25zKCdleGNsdWRlJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlc2M6ICdSdW4gYWxsIHRlc3RzIGluIHRoZSBkaXJlY3RvcnksIGV4Y2VwdCB0aGUgc3BlY2lmaWVkIFRFU1RzJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAub3B0aW9uKCdzdHJpY3QnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdGYWlsIGlmIGFueSBzcGVjaWZpZWQgdGVzdHMgYXJlIG5vdCBmb3VuZCcgfSlcbiAgICAub3B0aW9ucygnZnJvbS1maWxlJywgeyB0eXBlOiAnc3RyaW5nJywgZGVzYzogJ1JlYWQgVEVTVCBuYW1lcyBmcm9tIGEgZmlsZSAob25lIFRFU1QgcGVyIGxpbmUpJyB9KVxuICAgIC5vcHRpb24oJ2luc3BlY3QtZmFpbHVyZXMnLCB7IHR5cGU6ICdib29sZWFuJywgZGVzYzogJ0tlZXAgdGhlIGludGVnIHRlc3QgY2xvdWQgYXNzZW1ibHkgaWYgYSBmYWlsdXJlIG9jY3VycyBmb3IgaW5zcGVjdGlvbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgLm9wdGlvbignZGlzYWJsZS11cGRhdGUtd29ya2Zsb3cnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdJZiB0aGlzIGlzIFwidHJ1ZVwiIHRoZW4gdGhlIHN0YWNrIHVwZGF0ZSB3b3JrZmxvdyB3aWxsIGJlIGRpc2FibGVkJyB9KVxuICAgIC5vcHRpb24oJ2xhbmd1YWdlJywge1xuICAgICAgYWxpYXM6ICdsJyxcbiAgICAgIGRlZmF1bHQ6IFsnamF2YXNjcmlwdCcsICd0eXBlc2NyaXB0JywgJ3B5dGhvbicsICdnbyddLFxuICAgICAgY2hvaWNlczogWydqYXZhc2NyaXB0JywgJ3R5cGVzY3JpcHQnLCAncHl0aG9uJywgJ2dvJ10sXG4gICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgbmFyZ3M6IDEsXG4gICAgICBkZXNjOiAnVXNlIHRoZXNlIHByZXNldHMgdG8gcnVuIGludGVncmF0aW9uIHRlc3RzIGZvciB0aGUgc2VsZWN0ZWQgbGFuZ3VhZ2VzJyxcbiAgICB9KVxuICAgIC5vcHRpb24oJ2FwcCcsIHsgdHlwZTogJ3N0cmluZycsIGRlZmF1bHQ6IHVuZGVmaW5lZCwgZGVzYzogJ1RoZSBjdXN0b20gQ0xJIGNvbW1hbmQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcnVuIHRoZSB0ZXN0IGZpbGVzLiBZb3UgY2FuIGluY2x1ZGUge2ZpbGVQYXRofSB0byBzcGVjaWZ5IHdoZXJlIGluIHRoZSBjb21tYW5kIHRoZSB0ZXN0IGZpbGUgcGF0aCBzaG91bGQgYmUgaW5zZXJ0ZWQuIEV4YW1wbGU6IC0tYXBwPVwicHl0aG9uMy44IHtmaWxlUGF0aH1cIi4nIH0pXG4gICAgLm9wdGlvbigndGVzdC1yZWdleCcsIHsgdHlwZTogJ2FycmF5JywgZGVzYzogJ0RldGVjdCBpbnRlZ3JhdGlvbiB0ZXN0IGZpbGVzIG1hdGNoaW5nIHRoaXMgSmF2YVNjcmlwdCByZWdleCBwYXR0ZXJuLiBJZiB1c2VkIG11bHRpcGxlIHRpbWVzLCBhbGwgZmlsZXMgbWF0Y2hpbmcgYW55IG9uZSBvZiB0aGUgcGF0dGVybnMgYXJlIGRldGVjdGVkLicsIGRlZmF1bHQ6IFtdIH0pXG4gICAgLm9wdGlvbigndW5zdGFibGUnLCB7IHR5cGU6ICdhcnJheScsIGRlc2M6ICdPcHQtaW4gdG8gdXNpbmcgdW5zdGFibGUgZmVhdHVyZXMuIEJ5IHVzaW5nIHRoZXNlIGZsYWdzIHlvdSBhY2tub3dsZWRnZXMgdGhhdCBzY29wZSBhbmQgQVBJcyBvZiB1bnN0YWJsZSBmZWF0dXJlcyBtYXkgY2hhbmdlIHdpdGhvdXQgbm90aWNlLiBTcGVjaWZ5IG11bHRpcGxlIHRpbWVzIGZvciBlYWNoIHVuc3RhYmxlIGZlYXR1cmUgeW91IHdhbnQgdG8gb3B0LWluIHRvLicsIG5hcmdzOiAxLCBjaG9pY2VzOiBbJ3Rvb2xraXQtbGliLWVuZ2luZScsICdkZXByZWNhdGVkLWNsaS1lbmdpbmUnXSwgZGVmYXVsdDogW10gfSlcbiAgICAuc3RyaWN0KClcbiAgICAucGFyc2UoYXJncyk7XG5cbiAgY29uc3QgdGVzdHM6IHN0cmluZ1tdID0gYXJndi5fO1xuICBjb25zdCBwYXJhbGxlbFJlZ2lvbnMgPSBhcnJheUZyb21ZYXJncyhhcmd2WydwYXJhbGxlbC1yZWdpb25zJ10pO1xuICBjb25zdCB0ZXN0UmVnaW9uczogc3RyaW5nW10gPSBwYXJhbGxlbFJlZ2lvbnMgPz8gWyd1cy1lYXN0LTEnLCAndXMtZWFzdC0yJywgJ3VzLXdlc3QtMiddO1xuICBjb25zdCBwcm9maWxlcyA9IGFycmF5RnJvbVlhcmdzKGFyZ3YucHJvZmlsZXMpO1xuICBjb25zdCBmcm9tRmlsZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gYXJndlsnZnJvbS1maWxlJ107XG4gIGNvbnN0IG1heFdvcmtlcnM6IG51bWJlciA9IGFyZ3ZbJ21heC13b3JrZXJzJ107XG4gIGNvbnN0IHZlcmJvc2l0eTogbnVtYmVyID0gYXJndi52ZXJib3NlO1xuICBjb25zdCB2ZXJib3NlOiBib29sZWFuID0gdmVyYm9zaXR5ID49IDE7XG5cbiAgY29uc3QgbnVtVGVzdHMgPSB0ZXN0UmVnaW9ucy5sZW5ndGggKiAocHJvZmlsZXMgPz8gWzFdKS5sZW5ndGg7XG4gIGlmIChtYXhXb3JrZXJzIDwgbnVtVGVzdHMpIHtcbiAgICBsb2dnZXIud2FybmluZygnWW91IGFyZSBhdHRlbXB0aW5nIHRvIHJ1biAlcyB0ZXN0cyBpbiBwYXJhbGxlbCwgYnV0IG9ubHkgaGF2ZSAlcyB3b3JrZXJzLiBOb3QgYWxsIG9mIHlvdXIgcHJvZmlsZXMrcmVnaW9ucyB3aWxsIGJlIHV0aWxpemVkJywgbnVtVGVzdHMsIG1heFdvcmtlcnMpO1xuICB9XG5cbiAgaWYgKHRlc3RzLmxlbmd0aCA+IDAgJiYgZnJvbUZpbGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgbGlzdCBvZiB0ZXN0cyBjYW5ub3QgYmUgcHJvdmlkZWQgaWYgXCItLWZyb20tZmlsZVwiIGlzIHByb3ZpZGVkJyk7XG4gIH1cblxuICBpZiAoYXJndi5zdHJpY3QgJiYgYXJndi5leGNsdWRlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgdXNlIC0tc3RyaWN0IHdpdGggLS1leGNsdWRlJyk7XG4gIH1cblxuICBjb25zdCByZXF1ZXN0ZWRUZXN0cyA9IGZyb21GaWxlXG4gICAgPyAoZnMucmVhZEZpbGVTeW5jKGZyb21GaWxlLCB7IGVuY29kaW5nOiAndXRmOCcgfSkpLnNwbGl0KCdcXG4nKS5maWx0ZXIoeCA9PiB4KVxuICAgIDogKHRlc3RzLmxlbmd0aCA+IDAgPyB0ZXN0cyA6IHVuZGVmaW5lZCk7IC8vICd1bmRlZmluZWQnIG1lYW5zIG5vIHJlcXVlc3RcblxuICByZXR1cm4ge1xuICAgIHRlc3RzOiByZXF1ZXN0ZWRUZXN0cyxcbiAgICBhcHA6IGFyZ3YuYXBwIGFzIChzdHJpbmcgfCB1bmRlZmluZWQpLFxuICAgIHRlc3RSZWdleDogYXJyYXlGcm9tWWFyZ3MoYXJndlsndGVzdC1yZWdleCddKSxcbiAgICB0ZXN0UmVnaW9ucyxcbiAgICBvcmlnaW5hbFJlZ2lvbnM6IHBhcmFsbGVsUmVnaW9ucyxcbiAgICBwcm9maWxlcyxcbiAgICBydW5VcGRhdGVPbkZhaWxlZDogKGFyZ3ZbJ3VwZGF0ZS1vbi1mYWlsZWQnXSA/PyBmYWxzZSkgYXMgYm9vbGVhbixcbiAgICBmcm9tRmlsZSxcbiAgICBleGNsdWRlOiBhcmd2LmV4Y2x1ZGUgYXMgYm9vbGVhbixcbiAgICBtYXhXb3JrZXJzLFxuICAgIGxpc3Q6IGFyZ3YubGlzdCBhcyBib29sZWFuLFxuICAgIGRpcmVjdG9yeTogYXJndi5kaXJlY3RvcnkgYXMgc3RyaW5nLFxuICAgIGluc3BlY3RGYWlsdXJlczogYXJndlsnaW5zcGVjdC1mYWlsdXJlcyddIGFzIGJvb2xlYW4sXG4gICAgdmVyYm9zaXR5LFxuICAgIHZlcmJvc2UsXG4gICAgY2xlYW46IGFyZ3YuY2xlYW4gYXMgYm9vbGVhbixcbiAgICBmb3JjZTogYXJndi5mb3JjZSBhcyBib29sZWFuLFxuICAgIGRyeVJ1bjogYXJndlsnZHJ5LXJ1biddIGFzIGJvb2xlYW4sXG4gICAgZGlzYWJsZVVwZGF0ZVdvcmtmbG93OiBhcmd2WydkaXNhYmxlLXVwZGF0ZS13b3JrZmxvdyddIGFzIGJvb2xlYW4sXG4gICAgbGFuZ3VhZ2U6IGFycmF5RnJvbVlhcmdzKGFyZ3YubGFuZ3VhZ2UpLFxuICAgIHdhdGNoOiBhcmd2LndhdGNoIGFzIGJvb2xlYW4sXG4gICAgc3RyaWN0OiBhcmd2LnN0cmljdCBhcyBib29sZWFuLFxuICAgIHVuc3RhYmxlOiBhcnJheUZyb21ZYXJncyhhcmd2LnVuc3RhYmxlKSA/PyBbXSxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4oYXJnczogc3RyaW5nW10pIHtcbiAgbGV0IGVuZ2luZUZvckVycm9yO1xuICB0cnkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBwYXJzZUNsaUFyZ3MoYXJncyk7XG4gICAgY29uc3QgZW5naW5lID0gZW5naW5lRnJvbU9wdGlvbnMob3B0aW9ucyk7XG4gICAgZW5naW5lRm9yRXJyb3IgPSBlbmdpbmUuZW5naW5lO1xuICAgIGF3YWl0IHJ1bihvcHRpb25zLCBlbmdpbmUpO1xuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIGxvZ2dlci5lcnJvcihlcnIpO1xuICAgIGlmIChlbmdpbmVGb3JFcnJvciA9PT0gJ3Rvb2xraXQtbGliJykge1xuICAgICAgbG9nZ2VyLndhcm5pbmcoJ1xcbltOb3RpY2VdIFlvdSBhcmUgdXNpbmcgdGhlIG5ldyBkZWZhdWx0IGVuZ2luZSB0byBydW4gaW50ZWdyYXRpb24gdGVzdHMuIElmIHlvdSB0aGluayB0aGUgYWJvdmUgZmFpbHVyZSBoYXMgYmVlbiBjYXVzZWQgYnkgdGhlIG5ldyBlbmdpbmUsIHlvdSBtYXkgY2hvb3NlIHRvIHRlbXBvcmFyaWx5IHJldmVydCB0byB0aGUgb2xkIGVuZ2luZSBieSBhZGRpbmcgdGhlIGAtLXVuc3RhYmxlPWRlcHJlY2F0ZWQtY2xpLWVuZ2luZWAgb3B0aW9uLiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgZW5naW5lIGlzIGRlcHJlY2F0ZWQgYW5kIHNjaGVkdWxlZCB0byBiZSByZW1vdmVkIGluIEphbnVhcnkgMjAyNi5cXG5cXG5JZiByZXZlcnRpbmcgdG8gdGhlIG9sZCBlbmdpbmUgcmVzb2x2ZXMgYW4gaXNzdWUgZm9yIHlvdSwgcGxlYXNlIGxldCB1cyBrbm93IHNvIHdlIGNhbiBhZGRyZXNzIHRoaXMgaW4gdGhlIG5ldyBlbmdpbmUuIFJlcG9ydCBpc3N1ZXMgaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrLWNsaS9pc3N1ZXMvbmV3L2Nob29zZScpO1xuICAgIH1cbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuKG9wdGlvbnM6IFJldHVyblR5cGU8dHlwZW9mIHBhcnNlQ2xpQXJncz4sIHsgZW5naW5lIH06IEVuZ2luZU9wdGlvbnMpIHtcbiAgY29uc3QgdGVzdHNGcm9tQXJncyA9IGF3YWl0IG5ldyBJbnRlZ3JhdGlvblRlc3RzKHBhdGgucmVzb2x2ZShvcHRpb25zLmRpcmVjdG9yeSkpLmZyb21DbGlPcHRpb25zKG9wdGlvbnMpO1xuXG4gIC8vIExpc3Qgb25seSBwcmludHMgdGhlIGRpc2NvdmVyZWQgdGVzdHNcbiAgaWYgKG9wdGlvbnMubGlzdCkge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHRlc3RzRnJvbUFyZ3MubWFwKHQgPT4gdC5kaXNjb3ZlcnlSZWxhdGl2ZUZpbGVOYW1lKS5qb2luKCdcXG4nKSArICdcXG4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwb29sID0gd29ya2VycG9vbC5wb29sKHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICdsaWInLCAnd29ya2VycycsICdleHRyYWN0JywgJ2luZGV4LmpzJyksIHtcbiAgICBtYXhXb3JrZXJzOiBvcHRpb25zLndhdGNoID8gMSA6IG9wdGlvbnMubWF4V29ya2VycyxcbiAgfSk7XG5cbiAgY29uc3QgdGVzdHNUb1J1bjogSW50ZWdUZXN0V29ya2VyQ29uZmlnW10gPSBbXTtcbiAgbGV0IGRlc3RydWN0aXZlQ2hhbmdlczogYm9vbGVhbiA9IGZhbHNlO1xuICBsZXQgZmFpbGVkU25hcHNob3RzOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSA9IFtdO1xuICBsZXQgdGVzdHNTdWNjZWVkZWQgPSBmYWxzZTtcbiAgdmFsaWRhdGVXYXRjaEFyZ3Moe1xuICAgIC4uLm9wdGlvbnMsXG4gICAgdGVzdFJlZ2lvbnM6IG9wdGlvbnMub3JpZ2luYWxSZWdpb25zLFxuICAgIHRlc3RzOiB0ZXN0c0Zyb21BcmdzLFxuICB9KTtcblxuICB0cnkge1xuICAgIGlmICghb3B0aW9ucy53YXRjaCkge1xuICAgICAgLy8gYWx3YXlzIHJ1biBzbmFwc2hvdCB0ZXN0cywgYnV0IGlmICctLWZvcmNlJyBpcyBwYXNzZWQgdGhlblxuICAgICAgLy8gcnVuIGludGVncmF0aW9uIHRlc3RzIG9uIGFsbCBmYWlsZWQgdGVzdHMsIG5vdCBqdXN0IHRob3NlIHRoYXRcbiAgICAgIC8vIGZhaWxlZCBzbmFwc2hvdCB0ZXN0c1xuICAgICAgZmFpbGVkU25hcHNob3RzID0gYXdhaXQgcnVuU25hcHNob3RUZXN0cyhwb29sLCB0ZXN0c0Zyb21BcmdzLCB7XG4gICAgICAgIHJldGFpbjogb3B0aW9ucy5pbnNwZWN0RmFpbHVyZXMsXG4gICAgICAgIHZlcmJvc2U6IG9wdGlvbnMudmVyYm9zZSxcbiAgICAgICAgZW5naW5lLFxuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IGZhaWx1cmUgb2YgZmFpbGVkU25hcHNob3RzKSB7XG4gICAgICAgIGxvZ2dlci53YXJuaW5nKGBGYWlsZWQ6ICR7ZmFpbHVyZS5maWxlTmFtZX1gKTtcbiAgICAgICAgaWYgKGZhaWx1cmUuZGVzdHJ1Y3RpdmVDaGFuZ2VzICYmIGZhaWx1cmUuZGVzdHJ1Y3RpdmVDaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwcmludERlc3RydWN0aXZlQ2hhbmdlcyhmYWlsdXJlLmRlc3RydWN0aXZlQ2hhbmdlcyk7XG4gICAgICAgICAgZGVzdHJ1Y3RpdmVDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFvcHRpb25zLmZvcmNlKSB7XG4gICAgICAgIHRlc3RzVG9SdW4ucHVzaCguLi5mYWlsZWRTbmFwc2hvdHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWYgYW55IG9mIHRoZSB0ZXN0IGZhaWxlZCBzbmFwc2hvdCB0ZXN0cywga2VlcCB0aG9zZSByZXN1bHRzXG4gICAgICAgIC8vIGFuZCBtZXJnZSB3aXRoIHRoZSByZXN0IG9mIHRoZSB0ZXN0cyBmcm9tIGFyZ3NcbiAgICAgICAgdGVzdHNUb1J1bi5wdXNoKC4uLm1lcmdlVGVzdHModGVzdHNGcm9tQXJncy5tYXAodCA9PiB0LmluZm8pLCBmYWlsZWRTbmFwc2hvdHMpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGVzdHNUb1J1bi5wdXNoKC4uLnRlc3RzRnJvbUFyZ3MubWFwKHQgPT4gdC5pbmZvKSk7XG4gICAgfVxuXG4gICAgLy8gcnVuIGludGVncmF0aW9uIHRlc3RzIGlmIGAtLXVwZGF0ZS1vbi1mYWlsZWRgIE9SIGAtLWZvcmNlYCBpcyB1c2VkXG4gICAgaWYgKG9wdGlvbnMucnVuVXBkYXRlT25GYWlsZWQgfHwgb3B0aW9ucy5mb3JjZSkge1xuICAgICAgY29uc3QgeyBzdWNjZXNzLCBtZXRyaWNzIH0gPSBhd2FpdCBydW5JbnRlZ3JhdGlvblRlc3RzKHtcbiAgICAgICAgcG9vbCxcbiAgICAgICAgZW5naW5lLFxuICAgICAgICB0ZXN0czogdGVzdHNUb1J1bixcbiAgICAgICAgcmVnaW9uczogb3B0aW9ucy50ZXN0UmVnaW9ucyxcbiAgICAgICAgcHJvZmlsZXM6IG9wdGlvbnMucHJvZmlsZXMsXG4gICAgICAgIGNsZWFuOiBvcHRpb25zLmNsZWFuLFxuICAgICAgICBkcnlSdW46IG9wdGlvbnMuZHJ5UnVuLFxuICAgICAgICB2ZXJib3NpdHk6IG9wdGlvbnMudmVyYm9zaXR5LFxuICAgICAgICB1cGRhdGVXb3JrZmxvdzogIW9wdGlvbnMuZGlzYWJsZVVwZGF0ZVdvcmtmbG93LFxuICAgICAgICB3YXRjaDogb3B0aW9ucy53YXRjaCxcbiAgICAgIH0pO1xuICAgICAgdGVzdHNTdWNjZWVkZWQgPSBzdWNjZXNzO1xuXG4gICAgICBpZiAob3B0aW9ucy5jbGVhbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ05vdCBjbGVhbmluZyB1cCBzdGFja3Mgc2luY2UgXCItLW5vLWNsZWFuXCIgd2FzIHVzZWQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKEJvb2xlYW4ob3B0aW9ucy52ZXJib3NlKSkge1xuICAgICAgICBwcmludE1ldHJpY3MobWV0cmljcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NvbWUgaW50ZWdyYXRpb24gdGVzdHMgZmFpbGVkIScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy53YXRjaCkge1xuICAgICAgYXdhaXQgd2F0Y2hJbnRlZ3JhdGlvblRlc3QocG9vbCwge1xuICAgICAgICB3YXRjaDogdHJ1ZSxcbiAgICAgICAgZW5naW5lLFxuICAgICAgICB2ZXJib3NpdHk6IG9wdGlvbnMudmVyYm9zaXR5LFxuICAgICAgICAuLi50ZXN0c1RvUnVuWzBdLFxuICAgICAgICBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGVzID8gb3B0aW9ucy5wcm9maWxlc1swXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVnaW9uOiBvcHRpb25zLnRlc3RSZWdpb25zWzBdLFxuICAgICAgfSk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHZvaWQgcG9vbC50ZXJtaW5hdGUoKTtcbiAgfVxuXG4gIGlmIChkZXN0cnVjdGl2ZUNoYW5nZXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NvbWUgY2hhbmdlcyB3ZXJlIGRlc3RydWN0aXZlIScpO1xuICB9XG4gIGlmIChmYWlsZWRTbmFwc2hvdHMubGVuZ3RoID4gMCkge1xuICAgIGxldCBtZXNzYWdlID0gJyc7XG4gICAgaWYgKCFvcHRpb25zLnJ1blVwZGF0ZU9uRmFpbGVkKSB7XG4gICAgICBtZXNzYWdlID0gJ1RvIHJlLXJ1biBmYWlsZWQgdGVzdHMgcnVuOiBpbnRlZy1ydW5uZXIgLS11cGRhdGUtb24tZmFpbGVkJztcbiAgICB9XG4gICAgaWYgKCF0ZXN0c1N1Y2NlZWRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTb21lIHRlc3RzIGZhaWxlZCFcXG4ke21lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlV2F0Y2hBcmdzKGFyZ3M6IHtcbiAgdGVzdHM6IEludGVnVGVzdFtdO1xuICB0ZXN0UmVnaW9ucz86IHN0cmluZ1tdO1xuICBwcm9maWxlcz86IHN0cmluZ1tdO1xuICBtYXhXb3JrZXJzOiBudW1iZXI7XG4gIGZvcmNlOiBib29sZWFuO1xuICBkcnlSdW46IGJvb2xlYW47XG4gIGRpc2FibGVVcGRhdGVXb3JrZmxvdzogYm9vbGVhbjtcbiAgcnVuVXBkYXRlT25GYWlsZWQ6IGJvb2xlYW47XG4gIHdhdGNoOiBib29sZWFuO1xufSkge1xuICBpZiAoYXJncy53YXRjaCkge1xuICAgIGlmIChcbiAgICAgIChhcmdzLnRlc3RSZWdpb25zICYmIGFyZ3MudGVzdFJlZ2lvbnMubGVuZ3RoID4gMSlcbiAgICAgICAgfHwgKGFyZ3MucHJvZmlsZXMgJiYgYXJncy5wcm9maWxlcy5sZW5ndGggPiAxKVxuICAgICAgICB8fCBhcmdzLnRlc3RzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUnVubmluZyB3aXRoIHdhdGNoIG9ubHkgc3VwcG9ydHMgYSBzaW5nbGUgdGVzdC4gT25seSBwcm92aWRlIGEgc2luZ2xlIG9wdGlvbicrXG4gICAgICAgICd0byBgLS1wcm9maWxlc2AgYC0tcGFyYWxsZWwtcmVnaW9uc2AgYC0tbWF4LXdvcmtlcnMnKTtcbiAgICB9XG5cbiAgICBpZiAoYXJncy5ydW5VcGRhdGVPbkZhaWxlZCB8fCBhcmdzLmRpc2FibGVVcGRhdGVXb3JrZmxvdyB8fCBhcmdzLmZvcmNlIHx8IGFyZ3MuZHJ5UnVuKSB7XG4gICAgICBsb2dnZXIud2FybmluZygnYXJncyBgLS11cGRhdGUtb24tZmFpbGVkYCwgYC0tZGlzYWJsZS11cGRhdGUtd29ya2Zsb3dgLCBgLS1mb3JjZWAsIGAtLWRyeS1ydW5gIGhhdmUgbm8gZWZmZWN0IHdoZW4gcnVubmluZyB3aXRoIGAtLXdhdGNoYCcpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludERlc3RydWN0aXZlQ2hhbmdlcyhjaGFuZ2VzOiBEZXN0cnVjdGl2ZUNoYW5nZVtdKTogdm9pZCB7XG4gIGlmIChjaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICBsb2dnZXIud2FybmluZygnISEhIFRoaXMgdGVzdCBjb250YWlucyAlcyAhISEnLCBjaGFsay5ib2xkKCdkZXN0cnVjdGl2ZSBjaGFuZ2VzJykpO1xuICAgIGNoYW5nZXMuZm9yRWFjaChjaGFuZ2UgPT4ge1xuICAgICAgbG9nZ2VyLndhcm5pbmcoJyAgICBTdGFjazogJXMgLSBSZXNvdXJjZTogJXMgLSBJbXBhY3Q6ICVzJywgY2hhbmdlLnN0YWNrTmFtZSwgY2hhbmdlLmxvZ2ljYWxJZCwgY2hhbmdlLmltcGFjdCk7XG4gICAgfSk7XG4gICAgbG9nZ2VyLndhcm5pbmcoJyEhISBJZiB0aGVzZSBkZXN0cnVjdGl2ZSBjaGFuZ2VzIGFyZSBuZWNlc3NhcnksIHBsZWFzZSBpbmRpY2F0ZSB0aGlzIG9uIHRoZSBQUiAhISEnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludE1ldHJpY3MobWV0cmljczogSW50ZWdSdW5uZXJNZXRyaWNzW10pOiB2b2lkIHtcbiAgbG9nZ2VyLmhpZ2hsaWdodCgnICAgLS0tIEludGVncmF0aW9uIHRlc3QgbWV0cmljcyAtLS0nKTtcbiAgY29uc3Qgc29ydGVkTWV0cmljcyA9IG1ldHJpY3Muc29ydCgoYSwgYikgPT4gYS5kdXJhdGlvbiAtIGIuZHVyYXRpb24pO1xuICBzb3J0ZWRNZXRyaWNzLmZvckVhY2gobWV0cmljID0+IHtcbiAgICBsb2dnZXIucHJpbnQoJ1Byb2ZpbGUgJXMgKyBSZWdpb24gJXMgdG90YWwgdGltZTogJXMnLCBtZXRyaWMucHJvZmlsZSwgbWV0cmljLnJlZ2lvbiwgbWV0cmljLmR1cmF0aW9uKTtcbiAgICBjb25zdCBzb3J0ZWRUZXN0cyA9IE9iamVjdC5lbnRyaWVzKG1ldHJpYy50ZXN0cykuc29ydCgoYSwgYikgPT4gYVsxXSAtIGJbMV0pO1xuICAgIHNvcnRlZFRlc3RzLmZvckVhY2godGVzdCA9PiBsb2dnZXIucHJpbnQoJyAgJXM6ICVzJywgdGVzdFswXSwgdGVzdFsxXSkpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUcmFuc2xhdGUgYSBZYXJncyBpbnB1dCBhcnJheSB0byBzb21ldGhpbmcgdGhhdCBtYWtlcyBtb3JlIHNlbnNlIGluIGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VcbiAqIG1vZGVsICh0ZWxsaW5nIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYWJzZW5jZSBhbmQgYW4gZW1wdHkgYXJyYXkpXG4gKlxuICogLSBBbiBlbXB0eSBhcnJheSBpcyB0aGUgZGVmYXVsdCBjYXNlLCBtZWFuaW5nIHRoZSB1c2VyIGRpZG4ndCBwYXNzIGFueSBhcmd1bWVudHMuIFdlIHJldHVyblxuICogICB1bmRlZmluZWQuXG4gKiAtIElmIHRoZSB1c2VyIHBhc3NlZCBhIHNpbmdsZSBlbXB0eSBzdHJpbmcsIHRoZXkgZGlkIHNvbWV0aGluZyBsaWtlIGAtLWFycmF5PWAsIHdoaWNoIHdlJ2xsXG4gKiAgIHRha2UgdG8gbWVhbiB0aGV5IHBhc3NlZCBhbiBlbXB0eSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlGcm9tWWFyZ3MoeHM6IHN0cmluZ1tdKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICBpZiAoeHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4geHMuZmlsdGVyKHggPT4geCAhPT0gJycpO1xufVxuXG4vKipcbiAqIE1lcmdlIHRoZSB0ZXN0cyB3ZSByZWNlaXZlZCBmcm9tIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgd2l0aFxuICogdGVzdHMgdGhhdCBmYWlsZWQgc25hcHNob3QgdGVzdHMuIFRoZSBmYWlsZWQgc25hcHNob3QgdGVzdHMgaGF2ZSBhZGRpdGlvbmFsXG4gKiBpbmZvcm1hdGlvbiB0aGF0IHdlIHdhbnQgdG8ga2VlcCBzbyB0aGlzIHNob3VsZCBvdmVycmlkZSBhbnkgdGVzdCBmcm9tIGFyZ3NcbiAqL1xuZnVuY3Rpb24gbWVyZ2VUZXN0cyh0ZXN0RnJvbUFyZ3M6IEludGVnVGVzdEluZm9bXSwgZmFpbGVkU25hcHNob3RUZXN0czogSW50ZWdUZXN0V29ya2VyQ29uZmlnW10pOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSB7XG4gIGNvbnN0IGZhaWxlZFRlc3ROYW1lcyA9IG5ldyBTZXQoZmFpbGVkU25hcHNob3RUZXN0cy5tYXAodGVzdCA9PiB0ZXN0LmZpbGVOYW1lKSk7XG4gIGNvbnN0IGZpbmFsOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSA9IGZhaWxlZFNuYXBzaG90VGVzdHM7XG4gIGZpbmFsLnB1c2goLi4udGVzdEZyb21BcmdzLmZpbHRlcih0ZXN0ID0+ICFmYWlsZWRUZXN0TmFtZXMuaGFzKHRlc3QuZmlsZU5hbWUpKSk7XG4gIHJldHVybiBmaW5hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsaShhcmdzOiBzdHJpbmdbXSA9IHByb2Nlc3MuYXJndi5zbGljZSgyKSkge1xuICBtYWluKGFyZ3MpLnRoZW4oKS5jYXRjaCgoKSA9PiB7XG4gICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlYWQgQ0xJIG9wdGlvbnMgZnJvbSBhIGNvbmZpZyBmaWxlIGlmIHByb3ZpZGVkLlxuICpcbiAqIEByZXR1cm5zIHBhcnNlZCBDTEkgY29uZmlnIG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gY29uZmlnRnJvbUZpbGUoZmlsZU5hbWU/OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgaWYgKCFmaWxlTmFtZSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGZpbGVOYW1lLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGVuZ2luZUZyb21PcHRpb25zKG9wdGlvbnM6IHsgdW5zdGFibGU/OiBzdHJpbmdbXSB9KTogUmVxdWlyZWQ8RW5naW5lT3B0aW9ucz4ge1xuICBpZiAob3B0aW9ucy51bnN0YWJsZT8uaW5jbHVkZXMoJ2RlcHJlY2F0ZWQtY2xpLWVuZ2luZScpKSB7XG4gICAgbG9nZ2VyLndhcm5pbmcoJ1tEZXByZWNhdGlvbiBOb3RpY2VdIFlvdSBoYXZlIG9wdGVkLWluIHRvIHVzZSB0aGUgZGVwcmVjYXRlZCBDTEkgZW5naW5lIHdoaWNoIGlzIHNjaGVkdWxlZCB0byBiZSByZW1vdmVkIGluIEphbnVhcnkgMjAyNi4gSWYgeW91IGhhdmUgZW5jb3VudGVyZWQgYmxvY2tlcnMgd2hpbGUgdXNpbmcgdGhlIG5ldyBkZWZhdWx0IGVuZ2luZSwgcGxlYXNlIGxldCB1cyBrbm93IGJ5IG9wZW5pbmcgYW4gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay1jbGkvaXNzdWVzL25ldy9jaG9vc2VcXG5cXG5UbyB1c2UgdGhlIG5ldyBkZWZhdWx0IGVuZ2luZSwgcmVtb3ZlIHRoZSBgLS11bnN0YWJsZT1kZXByZWNhdGVkLWNsaS1lbmdpbmVgIG9wdGlvbi4nKTtcbiAgICByZXR1cm4geyBlbmdpbmU6ICdjbGktd3JhcHBlcicgfTtcbiAgfVxuICByZXR1cm4geyBlbmdpbmU6ICd0b29sa2l0LWxpYicgfTtcbn1cbiJdfQ==
package/lib/index.js CHANGED
@@ -5414,7 +5414,8 @@ var init_integration_tests = __esm({
5414
5414
  async fromCliOptions(options) {
5415
5415
  const baseOptions = {
5416
5416
  tests: options.tests,
5417
- exclude: options.exclude
5417
+ exclude: options.exclude,
5418
+ strict: options.strict
5418
5419
  };
5419
5420
  if (options.app && options.testRegex) {
5420
5421
  return this.discover({
@@ -5470,7 +5471,7 @@ var init_integration_tests = __esm({
5470
5471
  * If they have provided a test name that we don't find, then we write out that error message.
5471
5472
  * - If it is a list of tests to exclude, then we discover all available tests and filter out the tests that were provided by the user.
5472
5473
  */
5473
- filterTests(discoveredTests, requestedTests, exclude) {
5474
+ filterTests(discoveredTests, requestedTests, exclude, strict) {
5474
5475
  if (!requestedTests) {
5475
5476
  return discoveredTests;
5476
5477
  }
@@ -5487,6 +5488,9 @@ var init_integration_tests = __esm({
5487
5488
  if (unmatchedPatterns.length > 0) {
5488
5489
  process.stderr.write(`Available tests: ${discoveredTests.map((t) => t.discoveryRelativeFileName).join(" ")}
5489
5490
  `);
5491
+ if (strict) {
5492
+ throw new Error(`Strict mode: ${unmatchedPatterns.length} test(s) not found: ${unmatchedPatterns.join(", ")}`);
5493
+ }
5490
5494
  return [];
5491
5495
  }
5492
5496
  }
@@ -5512,7 +5516,7 @@ var init_integration_tests = __esm({
5512
5516
  }))
5513
5517
  );
5514
5518
  const discoveredTests = ignoreUncompiledTypeScript ? this.filterUncompiledTypeScript(testCases) : testCases;
5515
- return this.filterTests(discoveredTests, options.tests, options.exclude);
5519
+ return this.filterTests(discoveredTests, options.tests, options.exclude, options.strict);
5516
5520
  }
5517
5521
  filterUncompiledTypeScript(testCases) {
5518
5522
  const jsTestCases = testCases.filter((t) => t.fileName.endsWith(".js"));
@@ -10487,7 +10491,7 @@ function parseCliArgs(args = []) {
10487
10491
  configParser: configFromFile,
10488
10492
  default: "integ.config.json",
10489
10493
  desc: "Load options from a JSON config file. Options provided as CLI arguments take precedent."
10490
- }).option("watch", { type: "boolean", default: false, desc: "Perform integ tests in watch mode" }).option("list", { type: "boolean", default: false, desc: "List tests instead of running them" }).option("clean", { type: "boolean", default: true, desc: "Clean up and delete stack after test is completed (use --no-clean to negate)" }).option("verbose", { type: "boolean", default: false, alias: "v", count: true, desc: "Verbose logs and metrics on integration tests durations (specify multiple times to increase verbosity)" }).option("dry-run", { type: "boolean", default: false, desc: "do not actually deploy the stack. just update the snapshot (not recommended!)" }).option("update-on-failed", { type: "boolean", default: false, desc: "rerun integration tests and update snapshots for failed tests." }).option("force", { type: "boolean", default: false, desc: "Rerun all integration tests even if tests are passing" }).option("parallel-regions", { type: "array", desc: "Tests are run in parallel across these regions. To prevent tests from running in parallel, provide only a single region", default: [] }).options("directory", { type: "string", default: "test", desc: "starting directory to discover integration tests. Tests will be discovered recursively from this directory" }).options("profiles", { type: "array", desc: "list of AWS profiles to use. Tests will be run in parallel across each profile+regions", default: [] }).options("max-workers", { type: "number", desc: "The max number of workerpool workers to use when running integration tests in parallel", default: 16 }).options("exclude", { type: "boolean", desc: "Run all tests in the directory, except the specified TESTs", default: false }).options("from-file", { type: "string", desc: "Read TEST names from a file (one TEST per line)" }).option("inspect-failures", { type: "boolean", desc: "Keep the integ test cloud assembly if a failure occurs for inspection", default: false }).option("disable-update-workflow", { type: "boolean", default: false, desc: 'If this is "true" then the stack update workflow will be disabled' }).option("language", {
10494
+ }).option("watch", { type: "boolean", default: false, desc: "Perform integ tests in watch mode" }).option("list", { type: "boolean", default: false, desc: "List tests instead of running them" }).option("clean", { type: "boolean", default: true, desc: "Clean up and delete stack after test is completed (use --no-clean to negate)" }).option("verbose", { type: "boolean", default: false, alias: "v", count: true, desc: "Verbose logs and metrics on integration tests durations (specify multiple times to increase verbosity)" }).option("dry-run", { type: "boolean", default: false, desc: "do not actually deploy the stack. just update the snapshot (not recommended!)" }).option("update-on-failed", { type: "boolean", default: false, desc: "rerun integration tests and update snapshots for failed tests." }).option("force", { type: "boolean", default: false, desc: "Rerun all integration tests even if tests are passing" }).option("parallel-regions", { type: "array", desc: "Tests are run in parallel across these regions. To prevent tests from running in parallel, provide only a single region", default: [] }).options("directory", { type: "string", default: "test", desc: "starting directory to discover integration tests. Tests will be discovered recursively from this directory" }).options("profiles", { type: "array", desc: "list of AWS profiles to use. Tests will be run in parallel across each profile+regions", default: [] }).options("max-workers", { type: "number", desc: "The max number of workerpool workers to use when running integration tests in parallel", default: 16 }).options("exclude", { type: "boolean", desc: "Run all tests in the directory, except the specified TESTs", default: false }).option("strict", { type: "boolean", default: false, desc: "Fail if any specified tests are not found" }).options("from-file", { type: "string", desc: "Read TEST names from a file (one TEST per line)" }).option("inspect-failures", { type: "boolean", desc: "Keep the integ test cloud assembly if a failure occurs for inspection", default: false }).option("disable-update-workflow", { type: "boolean", default: false, desc: 'If this is "true" then the stack update workflow will be disabled' }).option("language", {
10491
10495
  alias: "l",
10492
10496
  default: ["javascript", "typescript", "python", "go"],
10493
10497
  choices: ["javascript", "typescript", "python", "go"],
@@ -10510,6 +10514,9 @@ function parseCliArgs(args = []) {
10510
10514
  if (tests.length > 0 && fromFile) {
10511
10515
  throw new Error('A list of tests cannot be provided if "--from-file" is provided');
10512
10516
  }
10517
+ if (argv.strict && argv.exclude) {
10518
+ throw new Error("Cannot use --strict with --exclude");
10519
+ }
10513
10520
  const requestedTests = fromFile ? fs2.readFileSync(fromFile, { encoding: "utf8" }).split("\n").filter((x) => x) : tests.length > 0 ? tests : void 0;
10514
10521
  return {
10515
10522
  tests: requestedTests,
@@ -10533,6 +10540,7 @@ function parseCliArgs(args = []) {
10533
10540
  disableUpdateWorkflow: argv["disable-update-workflow"],
10534
10541
  language: arrayFromYargs(argv.language),
10535
10542
  watch: argv.watch,
10543
+ strict: argv.strict,
10536
10544
  unstable: arrayFromYargs(argv.unstable) ?? []
10537
10545
  };
10538
10546
  }
@@ -109,6 +109,12 @@ export interface IntegrationTestsDiscoveryOptions {
109
109
  * @default false
110
110
  */
111
111
  readonly exclude?: boolean;
112
+ /**
113
+ * If this is set to true, throw an error if any specified tests are not found
114
+ *
115
+ * @default false
116
+ */
117
+ readonly strict?: boolean;
112
118
  /**
113
119
  * List of tests to include (or exclude if `exclude=true`)
114
120
  *
@@ -140,6 +146,7 @@ export declare class IntegrationTests {
140
146
  language?: string[];
141
147
  testRegex?: string[];
142
148
  tests?: string[];
149
+ strict?: boolean;
143
150
  }): Promise<IntegTest[]>;
144
151
  /**
145
152
  * Get the default configuration for a language
@@ -74,6 +74,7 @@ class IntegrationTests {
74
74
  const baseOptions = {
75
75
  tests: options.tests,
76
76
  exclude: options.exclude,
77
+ strict: options.strict,
77
78
  };
78
79
  // Explicitly set both, app and test-regex
79
80
  if (options.app && options.testRegex) {
@@ -136,7 +137,7 @@ class IntegrationTests {
136
137
  * If they have provided a test name that we don't find, then we write out that error message.
137
138
  * - If it is a list of tests to exclude, then we discover all available tests and filter out the tests that were provided by the user.
138
139
  */
139
- filterTests(discoveredTests, requestedTests, exclude) {
140
+ filterTests(discoveredTests, requestedTests, exclude, strict) {
140
141
  if (!requestedTests) {
141
142
  return discoveredTests;
142
143
  }
@@ -152,6 +153,9 @@ class IntegrationTests {
152
153
  }
153
154
  if (unmatchedPatterns.length > 0) {
154
155
  process.stderr.write(`Available tests: ${discoveredTests.map(t => t.discoveryRelativeFileName).join(' ')}\n`);
156
+ if (strict) {
157
+ throw new Error(`Strict mode: ${unmatchedPatterns.length} test(s) not found: ${unmatchedPatterns.join(', ')}`);
158
+ }
155
159
  return [];
156
160
  }
157
161
  }
@@ -178,7 +182,7 @@ class IntegrationTests {
178
182
  appCommand,
179
183
  })));
180
184
  const discoveredTests = ignoreUncompiledTypeScript ? this.filterUncompiledTypeScript(testCases) : testCases;
181
- return this.filterTests(discoveredTests, options.tests, options.exclude);
185
+ return this.filterTests(discoveredTests, options.tests, options.exclude, options.strict);
182
186
  }
183
187
  filterUncompiledTypeScript(testCases) {
184
188
  const jsTestCases = testCases.filter(t => t.fileName.endsWith('.js'));
@@ -212,4 +216,4 @@ class IntegrationTests {
212
216
  }
213
217
  }
214
218
  exports.IntegrationTests = IntegrationTests;
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWdyYXRpb24tdGVzdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbnRlZ3JhdGlvbi10ZXN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBNkI7QUFDN0IsK0JBQStCO0FBRS9CLE1BQU0saUJBQWlCLEdBQUcsZUFBZSxDQUFDO0FBdUMxQzs7R0FFRztBQUNILE1BQWEsU0FBUztJQTJEcEIsWUFBNEIsSUFBbUI7UUFBbkIsU0FBSSxHQUFKLElBQUksQ0FBZTtRQUM3QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksaUJBQWlCLENBQUM7UUFDdkQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xGLHdEQUF3RDtRQUN4RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUV6RCxzRUFBc0U7UUFDdEUsb0VBQW9FO1FBQ3BFLG9FQUFvRTtRQUNwRSxFQUFFO1FBQ0YsbUVBQW1FO1FBQ25FLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFD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QyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3JCLENBQUM7Z0JBQ0QsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztvQkFDeEIsTUFBTSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzFCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7Q0FDRjtBQW5MRCw0Q0FtTEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuXG5jb25zdCBDREtfT1VURElSX1BSRUZJWCA9ICdjZGstaW50ZWcub3V0JztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2luZ2xlIGludGVncmF0aW9uIHRlc3RcbiAqXG4gKiBUaGlzIHR5cGUgaXMgYSBkYXRhLW9ubHkgc3RydWN0dXJlLCBzbyBpdCBjYW4gdHJpdmlhbGx5IGJlIHBhc3NlZCB0byB3b3JrZXJzLlxuICogRGVyaXZlZCBhdHRyaWJ1dGVzIGFyZSBjYWxjdWxhdGVkIHVzaW5nIHRoZSBgSW50ZWdUZXN0YCBjbGFzcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ1Rlc3RJbmZvIHtcbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGZpbGUgdG8gcnVuXG4gICAqXG4gICAqIFBhdGggaXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcm9vdCBkaXJlY3Rvcnkgd2UgZGlzY292ZXJlZCB0aGlzIHRlc3QgZnJvbVxuICAgKlxuICAgKiBQYXRoIGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzY292ZXJ5Um9vdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQ0xJIGNvbW1hbmQgdXNlZCB0byBydW4gdGhpcyB0ZXN0LlxuICAgKiBJZiBpdCBjb250YWlucyB7ZmlsZVBhdGh9LCB0aGUgdGVzdCBmaWxlIG5hbWVzIHdpbGwgYmUgc3Vic3RpdHV0ZWQgYXQgdGhhdCBwbGFjZSBpbiB0aGUgY29tbWFuZCBmb3IgZWFjaCBydW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGVzdCBydW4gY29tbWFuZCB3aWxsIGJlIGBub2RlIHtmaWxlUGF0aH1gXG4gICAqL1xuICByZWFkb25seSBhcHBDb21tYW5kPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiB0cnVlIGlmIHRoaXMgdGVzdCBpcyBydW5uaW5nIGluIHdhdGNoIG1vZGVcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHdhdGNoPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBEZXJpdmVkIGluZm9ybWF0aW9uIGZvciBJbnRlZ1Rlc3RzXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnRlZ1Rlc3Qge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gcnVuXG4gICAqXG4gICAqIFBhdGggaXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZmlsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogUmVsYXRpdmUgcGF0aCB0byB0aGUgZmlsZSB0byBydW5cbiAgICpcbiAgICogUmVsYXRpdmUgZnJvbSB0aGUgXCJkaXNjb3Zlcnkgcm9vdFwiLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRpc2NvdmVyeVJlbGF0aXZlRmlsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGZpbGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhYnNvbHV0ZUZpbGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBub3JtYWxpemVkIG5hbWUgb2YgdGhlIHRlc3QuIFRoaXMgbmFtZVxuICAgKiB3aWxsIGJlIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBkaXJlY3RvcnkgdGhlIHRvb2xcbiAgICogaXMgcnVuIGZyb20uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbm9ybWFsaXplZFRlc3ROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERpcmVjdG9yeSB0aGUgdGVzdCBpcyBpblxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEaXNwbGF5IG5hbWUgZm9yIHRoZSB0ZXN0XG4gICAqXG4gICAqIERlcGVuZHMgb24gdGhlIGRpc2NvdmVyeSBkaXJlY3RvcnkuXG4gICAqXG4gICAqIExvb2tzIGxpa2UgYGludGVnLm15dGVzdGAgb3IgYHBhY2thZ2UvdGVzdC9pbnRlZy5teXRlc3RgLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRlc3ROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggb2YgdGhlIHNuYXBzaG90IGRpcmVjdG9yeSBmb3IgdGhpcyB0ZXN0XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc25hcHNob3REaXI6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgdGVtcG9yYXJ5IG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoaXMgdGVzdFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRlbXBvcmFyeU91dHB1dERpcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQ0xJIGNvbW1hbmQgdXNlZCB0byBydW4gdGhpcyB0ZXN0LlxuICAgKiBJZiBpdCBjb250YWlucyB7ZmlsZVBhdGh9LCB0aGUgdGVzdCBmaWxlIG5hbWVzIHdpbGwgYmUgc3Vic3RpdHV0ZWQgYXQgdGhhdCBwbGFjZSBpbiB0aGUgY29tbWFuZCBmb3IgZWFjaCBydW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGVzdCBydW4gY29tbWFuZCB3aWxsIGJlIGBub2RlIHtmaWxlUGF0aH1gXG4gICAqL1xuICByZWFkb25seSBhcHBDb21tYW5kOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGluZm86IEludGVnVGVzdEluZm8pIHtcbiAgICB0aGlzLmFwcENvbW1hbmQgPSBpbmZvLmFwcENvbW1hbmQgPz8gJ25vZGUge2ZpbGVQYXRofSc7XG4gICAgdGhpcy5hYnNvbHV0ZUZpbGVOYW1lID0gcGF0aC5yZXNvbHZlKGluZm8uZmlsZU5hbWUpO1xuICAgIHRoaXMuZmlsZU5hbWUgPSBwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIGluZm8uZmlsZU5hbWUpO1xuXG4gICAgY29uc3QgcGFyc2VkID0gcGF0aC5wYXJzZSh0aGlzLmZpbGVOYW1lKTtcbiAgICB0aGlzLmRpc2NvdmVyeVJlbGF0aXZlRmlsZU5hbWUgPSBwYXRoLnJlbGF0aXZlKGluZm8uZGlzY292ZXJ5Um9vdCwgaW5mby5maWxlTmFtZSk7XG4gICAgLy8gaWYgYC0td2F0Y2hgIHRoZW4gd2UgbmVlZCB0aGUgZGlyZWN0b3J5IHRvIGJlIHRoZSBjd2RcbiAgICB0aGlzLmRpcmVjdG9yeSA9IGluZm8ud2F0Y2ggPyBwcm9jZXNzLmN3ZCgpIDogcGFyc2VkLmRpcjtcblxuICAgIC8vIGlmIHdlIGFyZSBydW5uaW5nIGluIGEgcGFja2FnZSBkaXJlY3RvcnkgdGhlbiBqdXN0IHVzZSB0aGUgZmlsZU5hbWVcbiAgICAvLyBhcyB0aGUgdGVzdG5hbWUsIGJ1dCBpZiB3ZSBhcmUgcnVubmluZyBpbiBhIHBhcmVudCBkaXJlY3Rvcnkgd2l0aFxuICAgIC8vIG11bHRpcGxlIHBhY2thZ2VzIHRoZW4gdXNlIHRoZSBkaXJlY3RvcnkvZmlsZW5hbWUgYXMgdGhlIHRlc3RuYW1lXG4gICAgLy9cbiAgICAvLyBMb29rcyBlaXRoZXIgbGlrZSBgaW50ZWcubXl0ZXN0YCBvciBgcGFja2FnZS90ZXN0L2ludGVnLm15dGVzdGAuXG4gICAgY29uc3QgcmVsRGlzY292ZXJ5Um9vdCA9IHBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgaW5mby5kaXNjb3ZlcnlSb290KTtcbiAgICB0aGlzLnRlc3ROYW1lID0gdGhpcy5kaXJlY3RvcnkgPT09IHBhdGguam9pbihyZWxEaXNjb3ZlcnlSb290LCAndGVzdCcpIHx8IHRoaXMuZGlyZWN0b3J5ID09PSBwYXRoLmpvaW4ocmVsRGlzY292ZXJ5Um9vdClcbiAgICAgID8gcGFyc2VkLm5hbWVcbiAgICAgIDogcGF0aC5qb2luKHBhdGgucmVsYXRpdmUodGhpcy5pbmZvLmRpc2NvdmVyeVJvb3QsIHBhcnNlZC5kaXIpLCBwYXJzZWQubmFtZSk7XG5cbiAgICB0aGlzLm5vcm1hbGl6ZWRUZXN0TmFtZSA9IHBhcnNlZC5uYW1lO1xuICAgIHRoaXMuc25hcHNob3REaXIgPSBwYXRoLmpvaW4ocGFyc2VkLmRpciwgYCR7cGFyc2VkLmJhc2V9LnNuYXBzaG90YCk7XG4gICAgdGhpcy50ZW1wb3JhcnlPdXRwdXREaXIgPSBwYXRoLmpvaW4ocGFyc2VkLmRpciwgYCR7Q0RLX09VVERJUl9QUkVGSVh9LiR7cGFyc2VkLmJhc2V9LnNuYXBzaG90YCk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHRlc3QgbWF0Y2hlcyB0aGUgdXNlci1naXZlbiBuYW1lXG4gICAqXG4gICAqIFdlIGFyZSB2ZXJ5IGxlbmllbnQgaGVyZS4gQSBuYW1lIG1hdGNoZXMgaWYgaXQgbWF0Y2hlczpcbiAgICpcbiAgICogLSBUaGUgQ1dELXJlbGF0aXZlIGZpbGVuYW1lXG4gICAqIC0gVGhlIGRpc2NvdmVyeSByb290LXJlbGF0aXZlIGZpbGVuYW1lXG4gICAqIC0gVGhlIHN1aXRlIG5hbWVcbiAgICogLSBUaGUgYWJzb2x1dGUgZmlsZW5hbWVcbiAgICovXG4gIHB1YmxpYyBtYXRjaGVzKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBbXG4gICAgICB0aGlzLmZpbGVOYW1lLFxuICAgICAgdGhpcy5kaXNjb3ZlcnlSZWxhdGl2ZUZpbGVOYW1lLFxuICAgICAgdGhpcy50ZXN0TmFtZSxcbiAgICAgIHRoaXMuYWJzb2x1dGVGaWxlTmFtZSxcbiAgICBdLmluY2x1ZGVzKG5hbWUpO1xuICB9XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGhvdyBpbnRlZ3JhdGlvbiB0ZXN0IGZpbGVzIGFyZSBkaXNjb3ZlcmVkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdyYXRpb25UZXN0c0Rpc2NvdmVyeU9wdGlvbnMge1xuICAvKipcbiAgICogSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZSBsaXN0IG9mIHRlc3RzXG4gICAqIHByb3ZpZGVkIHdpbGwgYmUgZXhjbHVkZWRcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHRlc3RzIHRvIGluY2x1ZGUgKG9yIGV4Y2x1ZGUgaWYgYGV4Y2x1ZGU9dHJ1ZWApXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYWxsIG1hdGNoZWQgZmlsZXNcbiAgICovXG4gIHJlYWRvbmx5IHRlc3RzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEEgbWFwIG9mIG9mIHRoZSBhcHAgY29tbWFuZHMgdG8gcnVuIGludGVncmF0aW9uIHRlc3RzIHdpdGgsXG4gICAqIGFuZCB0aGUgcmVnZXggcGF0dGVybnMgbWF0Y2hpbmcgdGhlIGludGVncmF0aW9uIHRlc3QgZmlsZXMgZWFjaCBhcHAgY29tbWFuZC5cbiAgICpcbiAgICogSWYgdGhlIGFwcCBjb21tYW5kIGNvbnRhaW5zIHtmaWxlUGF0aH0sIHRoZSB0ZXN0IGZpbGUgbmFtZXMgd2lsbCBiZSBzdWJzdGl0dXRlZCBhdCB0aGF0IHBsYWNlIGluIHRoZSBjb21tYW5kIGZvciBlYWNoIHJ1bi5cbiAgICovXG4gIHJlYWRvbmx5IHRlc3RDYXNlczoge1xuICAgIFthcHA6IHN0cmluZ106IHN0cmluZ1tdO1xuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIFB5dGhvbiBleGVjdXRhYmxlIGZvciB0aGUgY3VycmVudCBPU1xuICovXG5mdW5jdGlvbiBweXRob25FeGVjdXRhYmxlKCkge1xuICBsZXQgcHl0aG9uID0gJ3B5dGhvbjMnO1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIHB5dGhvbiA9ICdweXRob24nO1xuICB9XG4gIHJldHVybiBweXRob247XG59XG5cbi8qKlxuICogRGlzY292ZXIgaW50ZWdyYXRpb24gdGVzdHNcbiAqL1xuZXhwb3J0IGNsYXNzIEludGVncmF0aW9uVGVzdHMge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRpcmVjdG9yeTogc3RyaW5nKSB7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGludGVncmF0aW9uIHRlc3RzIGRpc2NvdmVyeSBvcHRpb25zIGZyb20gQ0xJIG9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBmcm9tQ2xpT3B0aW9ucyhvcHRpb25zOiB7XG4gICAgYXBwPzogc3RyaW5nO1xuICAgIGV4Y2x1ZGU/OiBib29sZWFuO1xuICAgIGxhbmd1YWdlPzogc3RyaW5nW107XG4gICAgdGVzdFJlZ2V4Pzogc3RyaW5nW107XG4gICAgdGVzdHM/OiBzdHJpbmdbXTtcbiAgfSk6IFByb21pc2U8SW50ZWdUZXN0W10+IHtcbiAgICBjb25zdCBiYXNlT3B0aW9ucyA9IHtcbiAgICAgIHRlc3RzOiBvcHRpb25zLnRlc3RzLFxuICAgICAgZXhjbHVkZTogb3B0aW9ucy5leGNsdWRlLFxuICAgIH07XG5cbiAgICAvLyBFeHBsaWNpdGx5IHNldCBib3RoLCBhcHAgYW5kIHRlc3QtcmVnZXhcbiAgICBpZiAob3B0aW9ucy5hcHAgJiYgb3B0aW9ucy50ZXN0UmVnZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2NvdmVyKHtcbiAgICAgICAgdGVzdENhc2VzOiB7XG4gICAgICAgICAgW29wdGlvbnMuYXBwXTogb3B0aW9ucy50ZXN0UmVnZXgsXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmJhc2VPcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVXNlIHRoZSBzZWxlY3RlZCBwcmVzZXRzXG4gICAgaWYgKCFvcHRpb25zLmFwcCAmJiAhb3B0aW9ucy50ZXN0UmVnZXgpIHtcbiAgICAgIC8vIE9ubHkgY2FzZSB3aXRoIG11bHRpcGxlIGxhbmd1YWdlcywgaS5lLiB0aGUgb25seSB0aW1lIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHNwZWNpYWwgY2FzZVxuICAgICAgY29uc3QgaWdub3JlVW5jb21waWxlZFR5cGVTY3JpcHQgPSBvcHRpb25zLmxhbmd1YWdlPy5pbmNsdWRlcygnamF2YXNjcmlwdCcpICYmIG9wdGlvbnMubGFuZ3VhZ2U/LmluY2x1ZGVzKCd0eXBlc2NyaXB0Jyk7XG5cbiAgICAgIHJldHVybiB0aGlzLmRpc2NvdmVyKHtcbiAgICAgICAgdGVzdENhc2VzOiB0aGlzLmdldExhbmd1YWdlUHJlc2V0cyhvcHRpb25zLmxhbmd1YWdlKSxcbiAgICAgICAgLi4uYmFzZU9wdGlvbnMsXG4gICAgICB9LCBpZ25vcmVVbmNvbXBpbGVkVHlwZVNjcmlwdCk7XG4gICAgfVxuXG4gICAgLy8gT25seSBvbmUgb2YgYXBwIG9yIHRlc3QtcmVnZXggaXMgc2V0LCB3aXRoIGEgc2luZ2xlIHByZXNldCBzZWxlY3RlZFxuICAgIC8vID0+IG92ZXJyaWRlIGVpdGhlciBhcHAgb3IgdGVzdC1yZWdleFxuICAgIGlmIChvcHRpb25zLmxhbmd1YWdlPy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IFtwcmVzZXRBcHAsIHByZXNldFRlc3RSZWdleF0gPSB0aGlzLmdldExhbmd1YWdlUHJlc2V0KG9wdGlvbnMubGFuZ3VhZ2VbMF0pO1xuICAgICAgcmV0dXJuIHRoaXMuZGlzY292ZXIoe1xuICAgICAgICB0ZXN0Q2FzZXM6IHtcbiAgICAgICAgICBbb3B0aW9ucy5hcHAgPz8gcHJlc2V0QXBwXTogb3B0aW9ucy50ZXN0UmVnZXggPz8gcHJlc2V0VGVzdFJlZ2V4LFxuICAgICAgICB9LFxuICAgICAgICAuLi5iYXNlT3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIE9ubHkgb25lIG9mIGFwcCBvciB0ZXN0LXJlZ2V4IGlzIHNldCwgd2l0aCBtdWx0aXBsZSBwcmVzZXRzXG4gICAgLy8gPT4gaW1wb3NzaWJsZSB0byByZXNvbHZlXG4gICAgY29uc3Qgb3B0aW9uID0gb3B0aW9ucy5hcHAgPyAnLS1hcHAnIDogJy0tdGVzdC1yZWdleCc7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBPbmx5IGEgc2luZ2xlIFwiLS1sYW5ndWFnZVwiIGNhbiBiZSB1c2VkIHdpdGggXCIke29wdGlvbn1cIi4gQWx0ZXJuYXRpdmVseSBwcm92aWRlIGJvdGggXCItLWFwcFwiIGFuZCBcIi0tdGVzdC1yZWdleFwiIHRvIGZ1bGx5IGN1c3RvbWl6ZSB0aGUgY29uZmlndXJhdGlvbi5gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgYSBsYW5ndWFnZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRMYW5ndWFnZVByZXNldChsYW5ndWFnZTogc3RyaW5nKSB7XG4gICAgY29uc3QgbGFuZ3VhZ2VQcmVzZXRzOiB7XG4gICAgICBbbGFuZ3VhZ2U6IHN0cmluZ106IFtzdHJpbmcsIHN0cmluZ1tdXTtcbiAgICB9ID0ge1xuICAgICAgamF2YXNjcmlwdDogWydub2RlIHtmaWxlUGF0aH0nLCBbJ15pbnRlZ1xcXFwuLipcXFxcLmpzJCddXSxcbiAgICAgIHR5cGVzY3JpcHQ6IFsnbm9kZSAtciB0cy1ub2RlL3JlZ2lzdGVyIHtmaWxlUGF0aH0nLCBbJ15pbnRlZ1xcXFwuKD8hLipcXFxcLmRcXFxcLnRzJCkuKlxcXFwudHMkJ11dLFxuICAgICAgcHl0aG9uOiBbYCR7cHl0aG9uRXhlY3V0YWJsZSgpfSB7ZmlsZVBhdGh9YCwgWydeaW50ZWdfLipcXFxcLnB5JCddXSxcbiAgICAgIGdvOiBbJ2dvIHJ1biB7ZmlsZVBhdGh9JywgWydeaW50ZWdfLipcXFxcLmdvJCddXSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGxhbmd1YWdlUHJlc2V0c1tsYW5ndWFnZV07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjb25maWcgZm9yIGFsbCBzZWxlY3RlZCBsYW5ndWFnZXNcbiAgICovXG4gIHByaXZhdGUgZ2V0TGFuZ3VhZ2VQcmVzZXRzKGxhbmd1YWdlczogc3RyaW5nW10gPSBbXSkge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBsYW5ndWFnZXNcbiAgICAgICAgLm1hcChsYW5ndWFnZSA9PiB0aGlzLmdldExhbmd1YWdlUHJlc2V0KGxhbmd1YWdlKSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSB1c2VyIHByb3ZpZGVzIGEgbGlzdCBvZiB0ZXN0cywgdGhlc2UgY2FuIGVpdGhlciBiZSBhIGxpc3Qgb2YgdGVzdHMgdG8gaW5jbHVkZSBvciBhIGxpc3Qgb2YgdGVzdHMgdG8gZXhjbHVkZS5cbiAgICpcbiAgICogLSBJZiBpdCBpcyBhIGxpc3Qgb2YgdGVzdHMgdG8gaW5jbHVkZSB0aGVuIHdlIGRpc2NvdmVyIGFsbCBhdmFpbGFibGUgdGVzdHMgYW5kIGNoZWNrIHdoZXRoZXIgdGhleSBoYXZlIHByb3ZpZGVkIHZhbGlkIHRlc3RzLlxuICAgKiAgIElmIHRoZXkgaGF2ZSBwcm92aWRlZCBhIHRlc3QgbmFtZSB0aGF0IHdlIGRvbid0IGZpbmQsIHRoZW4gd2Ugd3JpdGUgb3V0IHRoYXQgZXJyb3IgbWVzc2FnZS5cbiAgICogLSBJZiBpdCBpcyBhIGxpc3Qgb2YgdGVzdHMgdG8gZXhjbHVkZSwgdGhlbiB3ZSBkaXNjb3ZlciBhbGwgYXZhaWxhYmxlIHRlc3RzIGFuZCBmaWx0ZXIgb3V0IHRoZSB0ZXN0cyB0aGF0IHdlcmUgcHJvdmlkZWQgYnkgdGhlIHVzZXIuXG4gICAqL1xuICBwcml2YXRlIGZpbHRlclRlc3RzKGRpc2NvdmVyZWRUZXN0czogSW50ZWdUZXN0W10sIHJlcXVlc3RlZFRlc3RzPzogc3RyaW5nW10sIGV4Y2x1ZGU/OiBib29sZWFuKTogSW50ZWdUZXN0W10ge1xuICAgIGlmICghcmVxdWVzdGVkVGVzdHMpIHtcbiAgICAgIHJldHVybiBkaXNjb3ZlcmVkVGVzdHM7XG4gICAgfVxuXG4gICAgY29uc3QgYWxsVGVzdHMgPSBkaXNjb3ZlcmVkVGVzdHMuZmlsdGVyKHQgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IHJlcXVlc3RlZFRlc3RzLnNvbWUocGF0dGVybiA9PiB0Lm1hdGNoZXMocGF0dGVybikpO1xuICAgICAgcmV0dXJuIG1hdGNoZXMgIT09ICEhZXhjbHVkZTsgLy8gTG9va3Mgd2VpcmQgYnV0IGlzIGVxdWFsIHRvIChtYXRjaGVzICYmICFleGNsdWRlKSB8fCAoIW1hdGNoZXMgJiYgZXhjbHVkZSlcbiAgICB9KTtcblxuICAgIC8vIElmIG5vdCBleGNsdWRpbmcsIGFsbCBwYXR0ZXJucyBtdXN0IGhhdmUgbWF0Y2hlZCBhdCBsZWFzdCBvbmUgdGVzdFxuICAgIGlmICghZXhjbHVkZSkge1xuICAgICAgY29uc3QgdW5tYXRjaGVkUGF0dGVybnMgPSByZXF1ZXN0ZWRUZXN0cy5maWx0ZXIocGF0dGVybiA9PiAhZGlzY292ZXJlZFRlc3RzLnNvbWUodCA9PiB0Lm1hdGNoZXMocGF0dGVybikpKTtcbiAgICAgIGZvciAoY29uc3QgdW5tYXRjaGVkIG9mIHVubWF0Y2hlZFBhdHRlcm5zKSB7XG4gICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBObyBzdWNoIGludGVnIHRlc3Q6ICR7dW5tYXRjaGVkfVxcbmApO1xuICAgICAgfVxuICAgICAgaWYgKHVubWF0Y2hlZFBhdHRlcm5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoYEF2YWlsYWJsZSB0ZXN0czogJHtkaXNjb3ZlcmVkVGVzdHMubWFwKHQgPT4gdC5kaXNjb3ZlcnlSZWxhdGl2ZUZpbGVOYW1lKS5qb2luKCcgJyl9XFxuYCk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWxsVGVzdHM7XG4gIH1cblxuICAvKipcbiAgICogVGFrZXMgYW4gb3B0aW9uYWwgbGlzdCBvZiB0ZXN0cyB0byBsb29rIGZvciwgb3RoZXJ3aXNlXG4gICAqIGl0IHdpbGwgbG9vayBmb3IgYWxsIHRlc3RzIGZyb20gdGhlIGRpcmVjdG9yeVxuICAgKlxuICAgKiBAcGFyYW0gdGVzdHMgLSBUZXN0cyB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUsIHVuZGVmaW5lZCBtZWFucyBpbmNsdWRlIGFsbCB0ZXN0cy5cbiAgICogQHBhcmFtIGV4Y2x1ZGUgLSBXaGV0aGVyIHRoZSAndGVzdHMnIGxpc3QgaXMgaW5jbHVzaXZlIG9yIGV4Y2x1c2l2ZSAoaW5jbHVzaXZlIGJ5IGRlZmF1bHQpLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBkaXNjb3ZlcihvcHRpb25zOiBJbnRlZ3JhdGlvblRlc3RzRGlzY292ZXJ5T3B0aW9ucywgaWdub3JlVW5jb21waWxlZFR5cGVTY3JpcHQ6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8SW50ZWdUZXN0W10+IHtcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHRoaXMucmVhZFRyZWUoKTtcblxuICAgIGNvbnN0IHRlc3RDYXNlcyA9IE9iamVjdC5lbnRyaWVzKG9wdGlvbnMudGVzdENhc2VzKVxuICAgICAgLmZsYXRNYXAoKFthcHBDb21tYW5kLCBwYXR0ZXJuc10pID0+IGZpbGVzXG4gICAgICAgIC5maWx0ZXIoZmlsZU5hbWUgPT4gcGF0dGVybnMuc29tZSgocGF0dGVybikgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChwYXR0ZXJuKTtcbiAgICAgICAgICByZXR1cm4gcmVnZXgudGVzdChmaWxlTmFtZSkgfHwgcmVnZXgudGVzdChwYXRoLmJhc2VuYW1lKGZpbGVOYW1lKSk7XG4gICAgICAgIH0pKVxuICAgICAgICAubWFwKGZpbGVOYW1lID0+IG5ldyBJbnRlZ1Rlc3Qoe1xuICAgICAgICAgIGRpc2NvdmVyeVJvb3Q6IHRoaXMuZGlyZWN0b3J5LFxuICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgIGFwcENvbW1hbmQsXG4gICAgICAgIH0pKSxcbiAgICAgICk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcmVkVGVzdHMgPSBpZ25vcmVVbmNvbXBpbGVkVHlwZVNjcmlwdCA/IHRoaXMuZmlsdGVyVW5jb21waWxlZFR5cGVTY3JpcHQodGVzdENhc2VzKSA6IHRlc3RDYXNlcztcblxuICAgIHJldHVybiB0aGlzLmZpbHRlclRlc3RzKGRpc2NvdmVyZWRUZXN0cywgb3B0aW9ucy50ZXN0cywgb3B0aW9ucy5leGNsdWRlKTtcbiAgfVxuXG4gIHByaXZhdGUgZmlsdGVyVW5jb21waWxlZFR5cGVTY3JpcHQodGVzdENhc2VzOiBJbnRlZ1Rlc3RbXSk6IEludGVnVGVzdFtdIHtcbiAgICBjb25zdCBqc1Rlc3RDYXNlcyA9IHRlc3RDYXNlcy5maWx0ZXIodCA9PiB0LmZpbGVOYW1lLmVuZHNXaXRoKCcuanMnKSk7XG5cbiAgICByZXR1cm4gdGVzdENhc2VzXG4gICAgICAvLyBSZW1vdmUgYWxsIFR5cGVTY3JpcHQgdGVzdCBjYXNlcyAoZW5kaW5nIGluIC50cylcbiAgICAgIC8vIGZvciB3aGljaCBhIGNvbXBpbGVkIHZlcnNpb24gaXMgcHJlc2VudCAoc2FtZSBuYW1lLCBlbmRpbmcgaW4gLmpzKVxuICAgICAgLmZpbHRlcigodHNDYW5kaWRhdGUpID0+IHtcbiAgICAgICAgaWYgKCF0c0NhbmRpZGF0ZS5maWxlTmFtZS5lbmRzV2l0aCgnLnRzJykpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ganNUZXN0Q2FzZXMuZmluZEluZGV4KGpzVGVzdCA9PiBqc1Rlc3QudGVzdE5hbWUgPT09IHRzQ2FuZGlkYXRlLnRlc3ROYW1lKSA9PT0gLTE7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVhZFRyZWUoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHJldCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiByZWN1cnNlKGRpcjogc3RyaW5nKSB7XG4gICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIoZGlyKTtcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihkaXIsIGZpbGUpO1xuICAgICAgICBjb25zdCBzdGF0ZiA9IGF3YWl0IGZzLnN0YXQoZnVsbFBhdGgpO1xuICAgICAgICBpZiAoc3RhdGYuaXNGaWxlKCkpIHtcbiAgICAgICAgICByZXQucHVzaChmdWxsUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRmLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICBhd2FpdCByZWN1cnNlKGZ1bGxQYXRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IHJlY3Vyc2UodGhpcy5kaXJlY3RvcnkpO1xuICAgIHJldHVybiByZXQ7XG4gIH1cbn1cbiJdfQ==
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWdyYXRpb24tdGVzdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbnRlZ3JhdGlvbi10ZXN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBNkI7QUFDN0IsK0JBQStCO0FBRS9CLE1BQU0saUJBQWlCLEdBQUcsZUFBZSxDQUFDO0FBdUMxQzs7R0FFRztBQUNILE1BQWEsU0FBUztJQTJEcEIsWUFBNEIsSUFBbUI7UUFBbkIsU0FBSSxHQUFKLElBQUksQ0FBZTtRQUM3QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksaUJBQWlCLENBQUM7UUFDdkQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xGLHdEQUF3RDtRQUN4RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUV6RCxzRUFBc0U7UUFDdEUsb0VBQW9FO1FBQ3BFLG9FQUFvRTtRQUNwRSxFQUFFO1FBQ0YsbUVBQW1FO1FBQ25FLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFD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QUksS0FBSyxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN0QyxNQUFNLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3RDLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7b0JBQ25CLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3JCLENBQUM7Z0JBQ0QsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztvQkFDeEIsTUFBTSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzFCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7Q0FDRjtBQXhMRCw0Q0F3TEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuXG5jb25zdCBDREtfT1VURElSX1BSRUZJWCA9ICdjZGstaW50ZWcub3V0JztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2luZ2xlIGludGVncmF0aW9uIHRlc3RcbiAqXG4gKiBUaGlzIHR5cGUgaXMgYSBkYXRhLW9ubHkgc3RydWN0dXJlLCBzbyBpdCBjYW4gdHJpdmlhbGx5IGJlIHBhc3NlZCB0byB3b3JrZXJzLlxuICogRGVyaXZlZCBhdHRyaWJ1dGVzIGFyZSBjYWxjdWxhdGVkIHVzaW5nIHRoZSBgSW50ZWdUZXN0YCBjbGFzcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ1Rlc3RJbmZvIHtcbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGZpbGUgdG8gcnVuXG4gICAqXG4gICAqIFBhdGggaXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcm9vdCBkaXJlY3Rvcnkgd2UgZGlzY292ZXJlZCB0aGlzIHRlc3QgZnJvbVxuICAgKlxuICAgKiBQYXRoIGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzY292ZXJ5Um9vdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQ0xJIGNvbW1hbmQgdXNlZCB0byBydW4gdGhpcyB0ZXN0LlxuICAgKiBJZiBpdCBjb250YWlucyB7ZmlsZVBhdGh9LCB0aGUgdGVzdCBmaWxlIG5hbWVzIHdpbGwgYmUgc3Vic3RpdHV0ZWQgYXQgdGhhdCBwbGFjZSBpbiB0aGUgY29tbWFuZCBmb3IgZWFjaCBydW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGVzdCBydW4gY29tbWFuZCB3aWxsIGJlIGBub2RlIHtmaWxlUGF0aH1gXG4gICAqL1xuICByZWFkb25seSBhcHBDb21tYW5kPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiB0cnVlIGlmIHRoaXMgdGVzdCBpcyBydW5uaW5nIGluIHdhdGNoIG1vZGVcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHdhdGNoPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBEZXJpdmVkIGluZm9ybWF0aW9uIGZvciBJbnRlZ1Rlc3RzXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnRlZ1Rlc3Qge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gcnVuXG4gICAqXG4gICAqIFBhdGggaXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZmlsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogUmVsYXRpdmUgcGF0aCB0byB0aGUgZmlsZSB0byBydW5cbiAgICpcbiAgICogUmVsYXRpdmUgZnJvbSB0aGUgXCJkaXNjb3Zlcnkgcm9vdFwiLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRpc2NvdmVyeVJlbGF0aXZlRmlsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGZpbGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhYnNvbHV0ZUZpbGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBub3JtYWxpemVkIG5hbWUgb2YgdGhlIHRlc3QuIFRoaXMgbmFtZVxuICAgKiB3aWxsIGJlIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBkaXJlY3RvcnkgdGhlIHRvb2xcbiAgICogaXMgcnVuIGZyb20uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbm9ybWFsaXplZFRlc3ROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERpcmVjdG9yeSB0aGUgdGVzdCBpcyBpblxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEaXNwbGF5IG5hbWUgZm9yIHRoZSB0ZXN0XG4gICAqXG4gICAqIERlcGVuZHMgb24gdGhlIGRpc2NvdmVyeSBkaXJlY3RvcnkuXG4gICAqXG4gICAqIExvb2tzIGxpa2UgYGludGVnLm15dGVzdGAgb3IgYHBhY2thZ2UvdGVzdC9pbnRlZy5teXRlc3RgLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRlc3ROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggb2YgdGhlIHNuYXBzaG90IGRpcmVjdG9yeSBmb3IgdGhpcyB0ZXN0XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc25hcHNob3REaXI6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgdGVtcG9yYXJ5IG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoaXMgdGVzdFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRlbXBvcmFyeU91dHB1dERpcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQ0xJIGNvbW1hbmQgdXNlZCB0byBydW4gdGhpcyB0ZXN0LlxuICAgKiBJZiBpdCBjb250YWlucyB7ZmlsZVBhdGh9LCB0aGUgdGVzdCBmaWxlIG5hbWVzIHdpbGwgYmUgc3Vic3RpdHV0ZWQgYXQgdGhhdCBwbGFjZSBpbiB0aGUgY29tbWFuZCBmb3IgZWFjaCBydW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGVzdCBydW4gY29tbWFuZCB3aWxsIGJlIGBub2RlIHtmaWxlUGF0aH1gXG4gICAqL1xuICByZWFkb25seSBhcHBDb21tYW5kOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGluZm86IEludGVnVGVzdEluZm8pIHtcbiAgICB0aGlzLmFwcENvbW1hbmQgPSBpbmZvLmFwcENvbW1hbmQgPz8gJ25vZGUge2ZpbGVQYXRofSc7XG4gICAgdGhpcy5hYnNvbHV0ZUZpbGVOYW1lID0gcGF0aC5yZXNvbHZlKGluZm8uZmlsZU5hbWUpO1xuICAgIHRoaXMuZmlsZU5hbWUgPSBwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIGluZm8uZmlsZU5hbWUpO1xuXG4gICAgY29uc3QgcGFyc2VkID0gcGF0aC5wYXJzZSh0aGlzLmZpbGVOYW1lKTtcbiAgICB0aGlzLmRpc2NvdmVyeVJlbGF0aXZlRmlsZU5hbWUgPSBwYXRoLnJlbGF0aXZlKGluZm8uZGlzY292ZXJ5Um9vdCwgaW5mby5maWxlTmFtZSk7XG4gICAgLy8gaWYgYC0td2F0Y2hgIHRoZW4gd2UgbmVlZCB0aGUgZGlyZWN0b3J5IHRvIGJlIHRoZSBjd2RcbiAgICB0aGlzLmRpcmVjdG9yeSA9IGluZm8ud2F0Y2ggPyBwcm9jZXNzLmN3ZCgpIDogcGFyc2VkLmRpcjtcblxuICAgIC8vIGlmIHdlIGFyZSBydW5uaW5nIGluIGEgcGFja2FnZSBkaXJlY3RvcnkgdGhlbiBqdXN0IHVzZSB0aGUgZmlsZU5hbWVcbiAgICAvLyBhcyB0aGUgdGVzdG5hbWUsIGJ1dCBpZiB3ZSBhcmUgcnVubmluZyBpbiBhIHBhcmVudCBkaXJlY3Rvcnkgd2l0aFxuICAgIC8vIG11bHRpcGxlIHBhY2thZ2VzIHRoZW4gdXNlIHRoZSBkaXJlY3RvcnkvZmlsZW5hbWUgYXMgdGhlIHRlc3RuYW1lXG4gICAgLy9cbiAgICAvLyBMb29rcyBlaXRoZXIgbGlrZSBgaW50ZWcubXl0ZXN0YCBvciBgcGFja2FnZS90ZXN0L2ludGVnLm15dGVzdGAuXG4gICAgY29uc3QgcmVsRGlzY292ZXJ5Um9vdCA9IHBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgaW5mby5kaXNjb3ZlcnlSb290KTtcbiAgICB0aGlzLnRlc3ROYW1lID0gdGhpcy5kaXJlY3RvcnkgPT09IHBhdGguam9pbihyZWxEaXNjb3ZlcnlSb290LCAndGVzdCcpIHx8IHRoaXMuZGlyZWN0b3J5ID09PSBwYXRoLmpvaW4ocmVsRGlzY292ZXJ5Um9vdClcbiAgICAgID8gcGFyc2VkLm5hbWVcbiAgICAgIDogcGF0aC5qb2luKHBhdGgucmVsYXRpdmUodGhpcy5pbmZvLmRpc2NvdmVyeVJvb3QsIHBhcnNlZC5kaXIpLCBwYXJzZWQubmFtZSk7XG5cbiAgICB0aGlzLm5vcm1hbGl6ZWRUZXN0TmFtZSA9IHBhcnNlZC5uYW1lO1xuICAgIHRoaXMuc25hcHNob3REaXIgPSBwYXRoLmpvaW4ocGFyc2VkLmRpciwgYCR7cGFyc2VkLmJhc2V9LnNuYXBzaG90YCk7XG4gICAgdGhpcy50ZW1wb3JhcnlPdXRwdXREaXIgPSBwYXRoLmpvaW4ocGFyc2VkLmRpciwgYCR7Q0RLX09VVERJUl9QUkVGSVh9LiR7cGFyc2VkLmJhc2V9LnNuYXBzaG90YCk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHRlc3QgbWF0Y2hlcyB0aGUgdXNlci1naXZlbiBuYW1lXG4gICAqXG4gICAqIFdlIGFyZSB2ZXJ5IGxlbmllbnQgaGVyZS4gQSBuYW1lIG1hdGNoZXMgaWYgaXQgbWF0Y2hlczpcbiAgICpcbiAgICogLSBUaGUgQ1dELXJlbGF0aXZlIGZpbGVuYW1lXG4gICAqIC0gVGhlIGRpc2NvdmVyeSByb290LXJlbGF0aXZlIGZpbGVuYW1lXG4gICAqIC0gVGhlIHN1aXRlIG5hbWVcbiAgICogLSBUaGUgYWJzb2x1dGUgZmlsZW5hbWVcbiAgICovXG4gIHB1YmxpYyBtYXRjaGVzKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBbXG4gICAgICB0aGlzLmZpbGVOYW1lLFxuICAgICAgdGhpcy5kaXNjb3ZlcnlSZWxhdGl2ZUZpbGVOYW1lLFxuICAgICAgdGhpcy50ZXN0TmFtZSxcbiAgICAgIHRoaXMuYWJzb2x1dGVGaWxlTmFtZSxcbiAgICBdLmluY2x1ZGVzKG5hbWUpO1xuICB9XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGhvdyBpbnRlZ3JhdGlvbiB0ZXN0IGZpbGVzIGFyZSBkaXNjb3ZlcmVkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdyYXRpb25UZXN0c0Rpc2NvdmVyeU9wdGlvbnMge1xuICAvKipcbiAgICogSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZSBsaXN0IG9mIHRlc3RzXG4gICAqIHByb3ZpZGVkIHdpbGwgYmUgZXhjbHVkZWRcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiB0aGlzIGlzIHNldCB0byB0cnVlLCB0aHJvdyBhbiBlcnJvciBpZiBhbnkgc3BlY2lmaWVkIHRlc3RzIGFyZSBub3QgZm91bmRcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHN0cmljdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgdGVzdHMgdG8gaW5jbHVkZSAob3IgZXhjbHVkZSBpZiBgZXhjbHVkZT10cnVlYClcbiAgICpcbiAgICogQGRlZmF1bHQgLSBhbGwgbWF0Y2hlZCBmaWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgdGVzdHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQSBtYXAgb2Ygb2YgdGhlIGFwcCBjb21tYW5kcyB0byBydW4gaW50ZWdyYXRpb24gdGVzdHMgd2l0aCxcbiAgICogYW5kIHRoZSByZWdleCBwYXR0ZXJucyBtYXRjaGluZyB0aGUgaW50ZWdyYXRpb24gdGVzdCBmaWxlcyBlYWNoIGFwcCBjb21tYW5kLlxuICAgKlxuICAgKiBJZiB0aGUgYXBwIGNvbW1hbmQgY29udGFpbnMge2ZpbGVQYXRofSwgdGhlIHRlc3QgZmlsZSBuYW1lcyB3aWxsIGJlIHN1YnN0aXR1dGVkIGF0IHRoYXQgcGxhY2UgaW4gdGhlIGNvbW1hbmQgZm9yIGVhY2ggcnVuLlxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdENhc2VzOiB7XG4gICAgW2FwcDogc3RyaW5nXTogc3RyaW5nW107XG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgUHl0aG9uIGV4ZWN1dGFibGUgZm9yIHRoZSBjdXJyZW50IE9TXG4gKi9cbmZ1bmN0aW9uIHB5dGhvbkV4ZWN1dGFibGUoKSB7XG4gIGxldCBweXRob24gPSAncHl0aG9uMyc7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgcHl0aG9uID0gJ3B5dGhvbic7XG4gIH1cbiAgcmV0dXJuIHB5dGhvbjtcbn1cblxuLyoqXG4gKiBEaXNjb3ZlciBpbnRlZ3JhdGlvbiB0ZXN0c1xuICovXG5leHBvcnQgY2xhc3MgSW50ZWdyYXRpb25UZXN0cyB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZGlyZWN0b3J5OiBzdHJpbmcpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgaW50ZWdyYXRpb24gdGVzdHMgZGlzY292ZXJ5IG9wdGlvbnMgZnJvbSBDTEkgb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGZyb21DbGlPcHRpb25zKG9wdGlvbnM6IHtcbiAgICBhcHA/OiBzdHJpbmc7XG4gICAgZXhjbHVkZT86IGJvb2xlYW47XG4gICAgbGFuZ3VhZ2U/OiBzdHJpbmdbXTtcbiAgICB0ZXN0UmVnZXg/OiBzdHJpbmdbXTtcbiAgICB0ZXN0cz86IHN0cmluZ1tdO1xuICAgIHN0cmljdD86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPEludGVnVGVzdFtdPiB7XG4gICAgY29uc3QgYmFzZU9wdGlvbnMgPSB7XG4gICAgICB0ZXN0czogb3B0aW9ucy50ZXN0cyxcbiAgICAgIGV4Y2x1ZGU6IG9wdGlvbnMuZXhjbHVkZSxcbiAgICAgIHN0cmljdDogb3B0aW9ucy5zdHJpY3QsXG4gICAgfTtcblxuICAgIC8vIEV4cGxpY2l0bHkgc2V0IGJvdGgsIGFwcCBhbmQgdGVzdC1yZWdleFxuICAgIGlmIChvcHRpb25zLmFwcCAmJiBvcHRpb25zLnRlc3RSZWdleCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzY292ZXIoe1xuICAgICAgICB0ZXN0Q2FzZXM6IHtcbiAgICAgICAgICBbb3B0aW9ucy5hcHBdOiBvcHRpb25zLnRlc3RSZWdleCxcbiAgICAgICAgfSxcbiAgICAgICAgLi4uYmFzZU9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBVc2UgdGhlIHNlbGVjdGVkIHByZXNldHNcbiAgICBpZiAoIW9wdGlvbnMuYXBwICYmICFvcHRpb25zLnRlc3RSZWdleCkge1xuICAgICAgLy8gT25seSBjYXNlIHdpdGggbXVsdGlwbGUgbGFuZ3VhZ2VzLCBpLmUuIHRoZSBvbmx5IHRpbWUgd2UgbmVlZCB0byBjaGVjayB0aGUgc3BlY2lhbCBjYXNlXG4gICAgICBjb25zdCBpZ25vcmVVbmNvbXBpbGVkVHlwZVNjcmlwdCA9IG9wdGlvbnMubGFuZ3VhZ2U/LmluY2x1ZGVzKCdqYXZhc2NyaXB0JykgJiYgb3B0aW9ucy5sYW5ndWFnZT8uaW5jbHVkZXMoJ3R5cGVzY3JpcHQnKTtcblxuICAgICAgcmV0dXJuIHRoaXMuZGlzY292ZXIoe1xuICAgICAgICB0ZXN0Q2FzZXM6IHRoaXMuZ2V0TGFuZ3VhZ2VQcmVzZXRzKG9wdGlvbnMubGFuZ3VhZ2UpLFxuICAgICAgICAuLi5iYXNlT3B0aW9ucyxcbiAgICAgIH0sIGlnbm9yZVVuY29tcGlsZWRUeXBlU2NyaXB0KTtcbiAgICB9XG5cbiAgICAvLyBPbmx5IG9uZSBvZiBhcHAgb3IgdGVzdC1yZWdleCBpcyBzZXQsIHdpdGggYSBzaW5nbGUgcHJlc2V0IHNlbGVjdGVkXG4gICAgLy8gPT4gb3ZlcnJpZGUgZWl0aGVyIGFwcCBvciB0ZXN0LXJlZ2V4XG4gICAgaWYgKG9wdGlvbnMubGFuZ3VhZ2U/Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgW3ByZXNldEFwcCwgcHJlc2V0VGVzdFJlZ2V4XSA9IHRoaXMuZ2V0TGFuZ3VhZ2VQcmVzZXQob3B0aW9ucy5sYW5ndWFnZVswXSk7XG4gICAgICByZXR1cm4gdGhpcy5kaXNjb3Zlcih7XG4gICAgICAgIHRlc3RDYXNlczoge1xuICAgICAgICAgIFtvcHRpb25zLmFwcCA/PyBwcmVzZXRBcHBdOiBvcHRpb25zLnRlc3RSZWdleCA/PyBwcmVzZXRUZXN0UmVnZXgsXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmJhc2VPcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gT25seSBvbmUgb2YgYXBwIG9yIHRlc3QtcmVnZXggaXMgc2V0LCB3aXRoIG11bHRpcGxlIHByZXNldHNcbiAgICAvLyA9PiBpbXBvc3NpYmxlIHRvIHJlc29sdmVcbiAgICBjb25zdCBvcHRpb24gPSBvcHRpb25zLmFwcCA/ICctLWFwcCcgOiAnLS10ZXN0LXJlZ2V4JztcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE9ubHkgYSBzaW5nbGUgXCItLWxhbmd1YWdlXCIgY2FuIGJlIHVzZWQgd2l0aCBcIiR7b3B0aW9ufVwiLiBBbHRlcm5hdGl2ZWx5IHByb3ZpZGUgYm90aCBcIi0tYXBwXCIgYW5kIFwiLS10ZXN0LXJlZ2V4XCIgdG8gZnVsbHkgY3VzdG9taXplIHRoZSBjb25maWd1cmF0aW9uLmApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBhIGxhbmd1YWdlXG4gICAqL1xuICBwcml2YXRlIGdldExhbmd1YWdlUHJlc2V0KGxhbmd1YWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBsYW5ndWFnZVByZXNldHM6IHtcbiAgICAgIFtsYW5ndWFnZTogc3RyaW5nXTogW3N0cmluZywgc3RyaW5nW11dO1xuICAgIH0gPSB7XG4gICAgICBqYXZhc2NyaXB0OiBbJ25vZGUge2ZpbGVQYXRofScsIFsnXmludGVnXFxcXC4uKlxcXFwuanMkJ11dLFxuICAgICAgdHlwZXNjcmlwdDogWydub2RlIC1yIHRzLW5vZGUvcmVnaXN0ZXIge2ZpbGVQYXRofScsIFsnXmludGVnXFxcXC4oPyEuKlxcXFwuZFxcXFwudHMkKS4qXFxcXC50cyQnXV0sXG4gICAgICBweXRob246IFtgJHtweXRob25FeGVjdXRhYmxlKCl9IHtmaWxlUGF0aH1gLCBbJ15pbnRlZ18uKlxcXFwucHkkJ11dLFxuICAgICAgZ286IFsnZ28gcnVuIHtmaWxlUGF0aH0nLCBbJ15pbnRlZ18uKlxcXFwuZ28kJ11dLFxuICAgIH07XG5cbiAgICByZXR1cm4gbGFuZ3VhZ2VQcmVzZXRzW2xhbmd1YWdlXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGNvbmZpZyBmb3IgYWxsIHNlbGVjdGVkIGxhbmd1YWdlc1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRMYW5ndWFnZVByZXNldHMobGFuZ3VhZ2VzOiBzdHJpbmdbXSA9IFtdKSB7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIGxhbmd1YWdlc1xuICAgICAgICAubWFwKGxhbmd1YWdlID0+IHRoaXMuZ2V0TGFuZ3VhZ2VQcmVzZXQobGFuZ3VhZ2UpKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIHVzZXIgcHJvdmlkZXMgYSBsaXN0IG9mIHRlc3RzLCB0aGVzZSBjYW4gZWl0aGVyIGJlIGEgbGlzdCBvZiB0ZXN0cyB0byBpbmNsdWRlIG9yIGEgbGlzdCBvZiB0ZXN0cyB0byBleGNsdWRlLlxuICAgKlxuICAgKiAtIElmIGl0IGlzIGEgbGlzdCBvZiB0ZXN0cyB0byBpbmNsdWRlIHRoZW4gd2UgZGlzY292ZXIgYWxsIGF2YWlsYWJsZSB0ZXN0cyBhbmQgY2hlY2sgd2hldGhlciB0aGV5IGhhdmUgcHJvdmlkZWQgdmFsaWQgdGVzdHMuXG4gICAqICAgSWYgdGhleSBoYXZlIHByb3ZpZGVkIGEgdGVzdCBuYW1lIHRoYXQgd2UgZG9uJ3QgZmluZCwgdGhlbiB3ZSB3cml0ZSBvdXQgdGhhdCBlcnJvciBtZXNzYWdlLlxuICAgKiAtIElmIGl0IGlzIGEgbGlzdCBvZiB0ZXN0cyB0byBleGNsdWRlLCB0aGVuIHdlIGRpc2NvdmVyIGFsbCBhdmFpbGFibGUgdGVzdHMgYW5kIGZpbHRlciBvdXQgdGhlIHRlc3RzIHRoYXQgd2VyZSBwcm92aWRlZCBieSB0aGUgdXNlci5cbiAgICovXG4gIHByaXZhdGUgZmlsdGVyVGVzdHMoZGlzY292ZXJlZFRlc3RzOiBJbnRlZ1Rlc3RbXSwgcmVxdWVzdGVkVGVzdHM/OiBzdHJpbmdbXSwgZXhjbHVkZT86IGJvb2xlYW4sIHN0cmljdD86IGJvb2xlYW4pOiBJbnRlZ1Rlc3RbXSB7XG4gICAgaWYgKCFyZXF1ZXN0ZWRUZXN0cykge1xuICAgICAgcmV0dXJuIGRpc2NvdmVyZWRUZXN0cztcbiAgICB9XG5cbiAgICBjb25zdCBhbGxUZXN0cyA9IGRpc2NvdmVyZWRUZXN0cy5maWx0ZXIodCA9PiB7XG4gICAgICBjb25zdCBtYXRjaGVzID0gcmVxdWVzdGVkVGVzdHMuc29tZShwYXR0ZXJuID0+IHQubWF0Y2hlcyhwYXR0ZXJuKSk7XG4gICAgICByZXR1cm4gbWF0Y2hlcyAhPT0gISFleGNsdWRlOyAvLyBMb29rcyB3ZWlyZCBidXQgaXMgZXF1YWwgdG8gKG1hdGNoZXMgJiYgIWV4Y2x1ZGUpIHx8ICghbWF0Y2hlcyAmJiBleGNsdWRlKVxuICAgIH0pO1xuXG4gICAgLy8gSWYgbm90IGV4Y2x1ZGluZywgYWxsIHBhdHRlcm5zIG11c3QgaGF2ZSBtYXRjaGVkIGF0IGxlYXN0IG9uZSB0ZXN0XG4gICAgaWYgKCFleGNsdWRlKSB7XG4gICAgICBjb25zdCB1bm1hdGNoZWRQYXR0ZXJucyA9IHJlcXVlc3RlZFRlc3RzLmZpbHRlcihwYXR0ZXJuID0+ICFkaXNjb3ZlcmVkVGVzdHMuc29tZSh0ID0+IHQubWF0Y2hlcyhwYXR0ZXJuKSkpO1xuICAgICAgZm9yIChjb25zdCB1bm1hdGNoZWQgb2YgdW5tYXRjaGVkUGF0dGVybnMpIHtcbiAgICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoYE5vIHN1Y2ggaW50ZWcgdGVzdDogJHt1bm1hdGNoZWR9XFxuYCk7XG4gICAgICB9XG4gICAgICBpZiAodW5tYXRjaGVkUGF0dGVybnMubGVuZ3RoID4gMCkge1xuICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgQXZhaWxhYmxlIHRlc3RzOiAke2Rpc2NvdmVyZWRUZXN0cy5tYXAodCA9PiB0LmRpc2NvdmVyeVJlbGF0aXZlRmlsZU5hbWUpLmpvaW4oJyAnKX1cXG5gKTtcbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU3RyaWN0IG1vZGU6ICR7dW5tYXRjaGVkUGF0dGVybnMubGVuZ3RofSB0ZXN0KHMpIG5vdCBmb3VuZDogJHt1bm1hdGNoZWRQYXR0ZXJucy5qb2luKCcsICcpfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWxsVGVzdHM7XG4gIH1cblxuICAvKipcbiAgICogVGFrZXMgYW4gb3B0aW9uYWwgbGlzdCBvZiB0ZXN0cyB0byBsb29rIGZvciwgb3RoZXJ3aXNlXG4gICAqIGl0IHdpbGwgbG9vayBmb3IgYWxsIHRlc3RzIGZyb20gdGhlIGRpcmVjdG9yeVxuICAgKlxuICAgKiBAcGFyYW0gdGVzdHMgLSBUZXN0cyB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUsIHVuZGVmaW5lZCBtZWFucyBpbmNsdWRlIGFsbCB0ZXN0cy5cbiAgICogQHBhcmFtIGV4Y2x1ZGUgLSBXaGV0aGVyIHRoZSAndGVzdHMnIGxpc3QgaXMgaW5jbHVzaXZlIG9yIGV4Y2x1c2l2ZSAoaW5jbHVzaXZlIGJ5IGRlZmF1bHQpLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBkaXNjb3ZlcihvcHRpb25zOiBJbnRlZ3JhdGlvblRlc3RzRGlzY292ZXJ5T3B0aW9ucywgaWdub3JlVW5jb21waWxlZFR5cGVTY3JpcHQ6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8SW50ZWdUZXN0W10+IHtcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHRoaXMucmVhZFRyZWUoKTtcblxuICAgIGNvbnN0IHRlc3RDYXNlcyA9IE9iamVjdC5lbnRyaWVzKG9wdGlvbnMudGVzdENhc2VzKVxuICAgICAgLmZsYXRNYXAoKFthcHBDb21tYW5kLCBwYXR0ZXJuc10pID0+IGZpbGVzXG4gICAgICAgIC5maWx0ZXIoZmlsZU5hbWUgPT4gcGF0dGVybnMuc29tZSgocGF0dGVybikgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChwYXR0ZXJuKTtcbiAgICAgICAgICByZXR1cm4gcmVnZXgudGVzdChmaWxlTmFtZSkgfHwgcmVnZXgudGVzdChwYXRoLmJhc2VuYW1lKGZpbGVOYW1lKSk7XG4gICAgICAgIH0pKVxuICAgICAgICAubWFwKGZpbGVOYW1lID0+IG5ldyBJbnRlZ1Rlc3Qoe1xuICAgICAgICAgIGRpc2NvdmVyeVJvb3Q6IHRoaXMuZGlyZWN0b3J5LFxuICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgIGFwcENvbW1hbmQsXG4gICAgICAgIH0pKSxcbiAgICAgICk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcmVkVGVzdHMgPSBpZ25vcmVVbmNvbXBpbGVkVHlwZVNjcmlwdCA/IHRoaXMuZmlsdGVyVW5jb21waWxlZFR5cGVTY3JpcHQodGVzdENhc2VzKSA6IHRlc3RDYXNlcztcblxuICAgIHJldHVybiB0aGlzLmZpbHRlclRlc3RzKGRpc2NvdmVyZWRUZXN0cywgb3B0aW9ucy50ZXN0cywgb3B0aW9ucy5leGNsdWRlLCBvcHRpb25zLnN0cmljdCk7XG4gIH1cblxuICBwcml2YXRlIGZpbHRlclVuY29tcGlsZWRUeXBlU2NyaXB0KHRlc3RDYXNlczogSW50ZWdUZXN0W10pOiBJbnRlZ1Rlc3RbXSB7XG4gICAgY29uc3QganNUZXN0Q2FzZXMgPSB0ZXN0Q2FzZXMuZmlsdGVyKHQgPT4gdC5maWxlTmFtZS5lbmRzV2l0aCgnLmpzJykpO1xuXG4gICAgcmV0dXJuIHRlc3RDYXNlc1xuICAgICAgLy8gUmVtb3ZlIGFsbCBUeXBlU2NyaXB0IHRlc3QgY2FzZXMgKGVuZGluZyBpbiAudHMpXG4gICAgICAvLyBmb3Igd2hpY2ggYSBjb21waWxlZCB2ZXJzaW9uIGlzIHByZXNlbnQgKHNhbWUgbmFtZSwgZW5kaW5nIGluIC5qcylcbiAgICAgIC5maWx0ZXIoKHRzQ2FuZGlkYXRlKSA9PiB7XG4gICAgICAgIGlmICghdHNDYW5kaWRhdGUuZmlsZU5hbWUuZW5kc1dpdGgoJy50cycpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGpzVGVzdENhc2VzLmZpbmRJbmRleChqc1Rlc3QgPT4ganNUZXN0LnRlc3ROYW1lID09PSB0c0NhbmRpZGF0ZS50ZXN0TmFtZSkgPT09IC0xO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlYWRUcmVlKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCByZXQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gcmVjdXJzZShkaXI6IHN0cmluZykge1xuICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKGRpcik7XG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4oZGlyLCBmaWxlKTtcbiAgICAgICAgY29uc3Qgc3RhdGYgPSBhd2FpdCBmcy5zdGF0KGZ1bGxQYXRoKTtcbiAgICAgICAgaWYgKHN0YXRmLmlzRmlsZSgpKSB7XG4gICAgICAgICAgcmV0LnB1c2goZnVsbFBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0Zi5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgYXdhaXQgcmVjdXJzZShmdWxsUGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCByZWN1cnNlKHRoaXMuZGlyZWN0b3J5KTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG59XG4iXX0=
@@ -4878,7 +4878,7 @@ var require_semver2 = __commonJS({
4878
4878
  // ../cloud-assembly-schema/cli-version.json
4879
4879
  var require_cli_version = __commonJS({
4880
4880
  "../cloud-assembly-schema/cli-version.json"(exports2, module2) {
4881
- module2.exports = { version: "2.1031.1" };
4881
+ module2.exports = { version: "2.1031.2" };
4882
4882
  }
4883
4883
  });
4884
4884
 
@@ -322994,9 +322994,9 @@ var require_drawRow = __commonJS({
322994
322994
  }
322995
322995
  });
322996
322996
 
322997
- // ../../../node_modules/table/node_modules/ajv/dist/runtime/equal.js
322997
+ // ../../../node_modules/ajv/dist/runtime/equal.js
322998
322998
  var require_equal = __commonJS({
322999
- "../../../node_modules/table/node_modules/ajv/dist/runtime/equal.js"(exports2) {
322999
+ "../../../node_modules/ajv/dist/runtime/equal.js"(exports2) {
323000
323000
  "use strict";
323001
323001
  Object.defineProperty(exports2, "__esModule", { value: true });
323002
323002
  var equal = require_fast_deep_equal();
@@ -333695,6 +333695,15 @@ var init_digest = __esm({
333695
333695
  }
333696
333696
  });
333697
333697
 
333698
+ // ../toolkit-lib/lib/util/concurrency.ts
333699
+ var pLimit3;
333700
+ var init_concurrency = __esm({
333701
+ "../toolkit-lib/lib/util/concurrency.ts"() {
333702
+ "use strict";
333703
+ pLimit3 = require_p_limit();
333704
+ }
333705
+ });
333706
+
333698
333707
  // ../toolkit-lib/lib/api/refactoring/exclude.ts
333699
333708
  var import_cloud_assembly_schema6;
333700
333709
  var init_exclude = __esm({
@@ -334005,7 +334014,8 @@ async function getDeployedStacks(sdkProvider, environment) {
334005
334014
  template
334006
334015
  };
334007
334016
  }, "normalize");
334008
- return Promise.all(summaries.map(normalize3));
334017
+ const limit = pLimit3(20);
334018
+ return Promise.all(summaries.map((s3) => limit(() => normalize3(s3))));
334009
334019
  }
334010
334020
  function formatEnvironmentSectionHeader2(environment) {
334011
334021
  const env = `aws://${environment.account}/${environment.region}`;
@@ -334059,6 +334069,7 @@ var init_refactoring = __esm({
334059
334069
  init_cloudformation3();
334060
334070
  init_digest();
334061
334071
  init_toolkit_error();
334072
+ init_concurrency();
334062
334073
  init_exclude();
334063
334074
  init_context3();
334064
334075
  __name(getDeployedStacks, "getDeployedStacks");
@@ -336834,15 +336845,6 @@ var init_work_graph2 = __esm({
336834
336845
  }
336835
336846
  });
336836
336847
 
336837
- // ../toolkit-lib/lib/util/concurrency.ts
336838
- var pLimit3;
336839
- var init_concurrency = __esm({
336840
- "../toolkit-lib/lib/util/concurrency.ts"() {
336841
- "use strict";
336842
- pLimit3 = require_p_limit();
336843
- }
336844
- });
336845
-
336846
336848
  // ../toolkit-lib/lib/util/promises.ts
336847
336849
  function promiseWithResolvers2() {
336848
336850
  let resolve10, reject;
package/package.json CHANGED
@@ -62,16 +62,16 @@
62
62
  "node-backpack": "^1.1.7",
63
63
  "prettier": "^2.8",
64
64
  "ts-jest": "^29.4.4",
65
- "typescript": "5.8",
65
+ "typescript": "5.9",
66
66
  "@aws-cdk/aws-service-spec": "^0.1.98",
67
67
  "@aws-cdk/cdk-assets-lib": "1.0.4",
68
68
  "@aws-cdk/cdk-cli-wrapper": "0.0.0",
69
- "@aws-cdk/cloud-assembly-schema": ">=48.17.0",
69
+ "@aws-cdk/cloud-assembly-schema": ">=48.18.0",
70
70
  "@aws-cdk/cloudformation-diff": "2.184.1",
71
71
  "@aws-cdk/cx-api": "^2.215.0",
72
- "@aws-cdk/toolkit-lib": "1.10.2",
72
+ "@aws-cdk/toolkit-lib": "1.10.3",
73
73
  "@aws-sdk/client-cloudformation": "^3",
74
- "aws-cdk": "2.1031.1",
74
+ "aws-cdk": "2.1031.2",
75
75
  "chalk": "^4",
76
76
  "chokidar": "^3",
77
77
  "fs-extra": "^9",
@@ -80,7 +80,7 @@
80
80
  },
81
81
  "dependencies": {
82
82
  "@aws-cdk/aws-service-spec": "0.1.98",
83
- "aws-cdk": "2.1031.1"
83
+ "aws-cdk": "2.1031.2"
84
84
  },
85
85
  "keywords": [
86
86
  "aws",
@@ -95,7 +95,7 @@
95
95
  "publishConfig": {
96
96
  "access": "public"
97
97
  },
98
- "version": "2.191.2",
98
+ "version": "2.192.0",
99
99
  "types": "lib/index.d.ts",
100
100
  "//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\".",
101
101
  "optionalDependencies": {