@rosen-bridge/config 0.2.0 → 0.3.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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @rosen-bridge/config
2
2
 
3
+ ## 0.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - Update versions of nodejs to 20.11 & typescript to 5.8
8
+
9
+ ## 0.2.1
10
+
11
+ ### Patch Changes
12
+
13
+ - add field validation for boolean type
14
+
3
15
  ## 0.2.0
4
16
 
5
17
  ### Minor Changes
package/dist/cli.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env -S node --experimental-specifier-resolution=node
2
2
  export {};
3
- //# sourceMappingURL=cli.d.ts.map
3
+ //# sourceMappingURL=cli.d.ts.map
package/dist/cli.js CHANGED
@@ -8,95 +8,79 @@ import * as fs from 'fs';
8
8
  import JsonBigIntFactory from 'json-bigint';
9
9
  import * as yaml from 'js-yaml';
10
10
  const JsonBigInt = JsonBigIntFactory({
11
- alwaysParseAsBig: false,
12
- useNativeBigInt: true,
11
+ alwaysParseAsBig: false,
12
+ useNativeBigInt: true,
13
13
  });
14
14
  yargs(hideBin(process.argv))
15
- .command(
16
- 'generate-default',
17
- 'generates an object using the default values of the passed schema',
18
- (yargs) =>
19
- yargs
20
- .option('schema', {
21
- alias: 's',
22
- demandOption: true,
23
- description: 'input schema file path which should be in json format',
24
- type: 'string',
25
- })
26
- .option('output', {
27
- alias: 'o',
28
- demandOption: true,
29
- description: 'generated default values output path',
30
- type: 'string',
31
- })
32
- .option('format', {
33
- alias: 'f',
34
- demandOption: true,
35
- description: 'generated default values output path',
36
- choices: ['json', 'yaml'],
37
- default: 'yaml',
38
- type: 'string',
39
- }),
40
- async (argv) => {
41
- const spinner = ora();
42
- spinner.start(`Generating config default values`);
43
- const rawSchemaData = fs.readFileSync(argv.schema, 'utf-8');
44
- const schema = JsonBigInt.parse(rawSchemaData);
45
- const confValidator = new ConfigValidator(schema);
46
- const defaultConf = confValidator.generateDefault();
47
- let output = '';
48
- switch (argv.format) {
15
+ .command('generate-default', 'generates an object using the default values of the passed schema', (yargs) => yargs
16
+ .option('schema', {
17
+ alias: 's',
18
+ demandOption: true,
19
+ description: 'input schema file path which should be in json format',
20
+ type: 'string',
21
+ })
22
+ .option('output', {
23
+ alias: 'o',
24
+ demandOption: true,
25
+ description: 'generated default values output path',
26
+ type: 'string',
27
+ })
28
+ .option('format', {
29
+ alias: 'f',
30
+ demandOption: true,
31
+ description: 'generated default values output path',
32
+ choices: ['json', 'yaml'],
33
+ default: 'yaml',
34
+ type: 'string',
35
+ }), async (argv) => {
36
+ const spinner = ora();
37
+ spinner.start(`Generating config default values`);
38
+ const rawSchemaData = fs.readFileSync(argv.schema, 'utf-8');
39
+ const schema = JsonBigInt.parse(rawSchemaData);
40
+ const confValidator = new ConfigValidator(schema);
41
+ const defaultConf = confValidator.generateDefault();
42
+ let output = '';
43
+ switch (argv.format) {
49
44
  case 'json': {
50
- output = JsonBigInt.stringify(defaultConf);
51
- break;
45
+ output = JsonBigInt.stringify(defaultConf);
46
+ break;
52
47
  }
53
48
  case 'yaml': {
54
- output = yaml.dump(defaultConf);
55
- break;
49
+ output = yaml.dump(defaultConf);
50
+ break;
56
51
  }
57
- }
58
- fs.writeFileSync(argv.output, output);
59
- spinner.succeed(
60
- chalk.green(`default config values were output at "${argv.output}"`)
61
- );
62
52
  }
63
- )
64
- .command(
65
- 'generate-ts-types',
66
- 'generates compatible TypeScript interface types for the passed schema',
67
- (yargs) =>
68
- yargs
69
- .option('schema', {
70
- alias: 's',
71
- demandOption: true,
72
- description: 'input schema file path which should be in json format',
73
- type: 'string',
74
- })
75
- .option('output', {
76
- alias: 'o',
77
- demandOption: true,
78
- description: 'generated TypeScript interfaces',
79
- type: 'string',
80
- })
81
- .option('root-type', {
82
- alias: 'r',
83
- demandOption: true,
84
- description: 'Name of top root interface',
85
- type: 'string',
86
- }),
87
- async (argv) => {
88
- const spinner = ora();
89
- spinner.start(`Generating TypeScript types`);
90
- const rawSchemaData = fs.readFileSync(argv.schema, 'utf-8');
91
- const schema = JsonBigInt.parse(rawSchemaData);
92
- const confValidator = new ConfigValidator(schema);
93
- const tsTypes = confValidator.generateTSTypes(argv.rootType);
94
- fs.writeFileSync(argv.output, tsTypes);
95
- spinner.succeed(
96
- chalk.green(`TypeScript types were output at "${argv.output}"`)
97
- );
98
- }
99
- )
100
- .demandCommand(1)
101
- .parse();
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQztBQUN0QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8saUJBQWlCLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDO0lBQ25DLGdCQUFnQixFQUFFLEtBQUs7SUFDdkIsZUFBZSxFQUFFLElBQUk7Q0FDdEIsQ0FBQyxDQUFDO0FBRUgsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekIsT0FBTyxDQUNOLGtCQUFrQixFQUNsQixtRUFBbUUsRUFDbkUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNSLEtBQUs7S0FDRixNQUFNLENBQUMsUUFBUSxFQUFFO0lBQ2hCLEtBQUssRUFBRSxHQUFHO0lBQ1YsWUFBWSxFQUFFLElBQUk7SUFDbEIsV0FBVyxFQUFFLHVEQUF1RDtJQUNwRSxJQUFJLEVBQUUsUUFBUTtDQUNmLENBQUM7S0FDRCxNQUFNLENBQUMsUUFBUSxFQUFFO0lBQ2hCLEtBQUssRUFBRSxHQUFHO0lBQ1YsWUFBWSxFQUFFLElBQUk7SUFDbEIsV0FBVyxFQUFFLHNDQUFzQztJQUNuRCxJQUFJLEVBQUUsUUFBUTtDQUNmLENBQUM7S0FDRCxNQUFNLENBQUMsUUFBUSxFQUFFO0lBQ2hCLEtBQUssRUFBRSxHQUFHO0lBQ1YsWUFBWSxFQUFFLElBQUk7SUFD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O0FBQ0osQ0FBQyxDQUNGO0tBQ0EsYUFBYSxDQUFDLENBQUMsQ0FBQztLQUNoQixLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IC1TIG5vZGUgLS1leHBlcmltZW50YWwtc3BlY2lmaWVyLXJlc29sdXRpb249bm9kZVxuXG5pbXBvcnQgeWFyZ3MgZnJvbSAneWFyZ3MnO1xuaW1wb3J0IHsgaGlkZUJpbiB9IGZyb20gJ3lhcmdzL2hlbHBlcnMnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCB7IENvbmZpZ1ZhbGlkYXRvciB9IGZyb20gJy4vaW5kZXgnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IEpzb25CaWdJbnRGYWN0b3J5IGZyb20gJ2pzb24tYmlnaW50JztcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAnanMteWFtbCc7XG5cbmNvbnN0IEpzb25CaWdJbnQgPSBKc29uQmlnSW50RmFjdG9yeSh7XG4gIGFsd2F5c1BhcnNlQXNCaWc6IGZhbHNlLFxuICB1c2VOYXRpdmVCaWdJbnQ6IHRydWUsXG59KTtcblxueWFyZ3MoaGlkZUJpbihwcm9jZXNzLmFyZ3YpKVxuICAuY29tbWFuZChcbiAgICAnZ2VuZXJhdGUtZGVmYXVsdCcsXG4gICAgJ2dlbmVyYXRlcyBhbiBvYmplY3QgdXNpbmcgdGhlIGRlZmF1bHQgdmFsdWVzIG9mIHRoZSBwYXNzZWQgc2NoZW1hJyxcbiAgICAoeWFyZ3MpID0+XG4gICAgICB5YXJnc1xuICAgICAgICAub3B0aW9uKCdzY2hlbWEnLCB7XG4gICAgICAgICAgYWxpYXM6ICdzJyxcbiAgICAgICAgICBkZW1hbmRPcHRpb246IHRydWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdpbnB1dCBzY2hlbWEgZmlsZSBwYXRoIHdoaWNoIHNob3VsZCBiZSBpbiBqc29uIGZvcm1hdCcsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oJ291dHB1dCcsIHtcbiAgICAgICAgICBhbGlhczogJ28nLFxuICAgICAgICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ2dlbmVyYXRlZCBkZWZhdWx0IHZhbHVlcyBvdXRwdXQgcGF0aCcsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oJ2Zvcm1hdCcsIHtcbiAgICAgICAgICBhbGlhczogJ2YnLFxuICAgICAgICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ2dlbmVyYXRlZCBkZWZhdWx0IHZhbHVlcyBvdXRwdXQgcGF0aCcsXG4gICAgICAgICAgY2hvaWNlczogWydqc29uJywgJ3lhbWwnXSxcbiAgICAgICAgICBkZWZhdWx0OiAneWFtbCcsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pLFxuICAgIGFzeW5jIChhcmd2KSA9PiB7XG4gICAgICBjb25zdCBzcGlubmVyID0gb3JhKCk7XG4gICAgICBzcGlubmVyLnN0YXJ0KGBHZW5lcmF0aW5nIGNvbmZpZyBkZWZhdWx0IHZhbHVlc2ApO1xuXG4gICAgICBjb25zdCByYXdTY2hlbWFEYXRhID0gZnMucmVhZEZpbGVTeW5jKGFyZ3Yuc2NoZW1hLCAndXRmLTgnKTtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IEpzb25CaWdJbnQucGFyc2UocmF3U2NoZW1hRGF0YSk7XG5cbiAgICAgIGNvbnN0IGNvbmZWYWxpZGF0b3IgPSBuZXcgQ29uZmlnVmFsaWRhdG9yKHNjaGVtYSk7XG4gICAgICBjb25zdCBkZWZhdWx0Q29uZiA9IGNvbmZWYWxpZGF0b3IuZ2VuZXJhdGVEZWZhdWx0KCk7XG5cbiAgICAgIGxldCBvdXRwdXQgPSAnJztcbiAgICAgIHN3aXRjaCAoYXJndi5mb3JtYXQpIHtcbiAgICAgICAgY2FzZSAnanNvbic6IHtcbiAgICAgICAgICBvdXRwdXQgPSBKc29uQmlnSW50LnN0cmluZ2lmeShkZWZhdWx0Q29uZik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAneWFtbCc6IHtcbiAgICAgICAgICBvdXRwdXQgPSB5YW1sLmR1bXAoZGVmYXVsdENvbmYpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoYXJndi5vdXRwdXQsIG91dHB1dCk7XG5cbiAgICAgIHNwaW5uZXIuc3VjY2VlZChcbiAgICAgICAgY2hhbGsuZ3JlZW4oYGRlZmF1bHQgY29uZmlnIHZhbHVlcyB3ZXJlIG91dHB1dCBhdCBcIiR7YXJndi5vdXRwdXR9XCJgKVxuICAgICAgKTtcbiAgICB9XG4gIClcbiAgLmNvbW1hbmQoXG4gICAgJ2dlbmVyYXRlLXRzLXR5cGVzJyxcbiAgICAnZ2VuZXJhdGVzIGNvbXBhdGlibGUgVHlwZVNjcmlwdCBpbnRlcmZhY2UgdHlwZXMgZm9yIHRoZSBwYXNzZWQgc2NoZW1hJyxcbiAgICAoeWFyZ3MpID0+XG4gICAgICB5YXJnc1xuICAgICAgICAub3B0aW9uKCdzY2hlbWEnLCB7XG4gICAgICAgICAgYWxpYXM6ICdzJyxcbiAgICAgICAgICBkZW1hbmRPcHRpb246IHRydWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdpbnB1dCBzY2hlbWEgZmlsZSBwYXRoIHdoaWNoIHNob3VsZCBiZSBpbiBqc29uIGZvcm1hdCcsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oJ291dHB1dCcsIHtcbiAgICAgICAgICBhbGlhczogJ28nLFxuICAgICAgICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ2dlbmVyYXRlZCBUeXBlU2NyaXB0IGludGVyZmFjZXMnLFxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICB9KVxuICAgICAgICAub3B0aW9uKCdyb290LXR5cGUnLCB7XG4gICAgICAgICAgYWxpYXM6ICdyJyxcbiAgICAgICAgICBkZW1hbmRPcHRpb246IHRydWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdOYW1lIG9mIHRvcCByb290IGludGVyZmFjZScsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pLFxuICAgIGFzeW5jIChhcmd2KSA9PiB7XG4gICAgICBjb25zdCBzcGlubmVyID0gb3JhKCk7XG4gICAgICBzcGlubmVyLnN0YXJ0KGBHZW5lcmF0aW5nIFR5cGVTY3JpcHQgdHlwZXNgKTtcblxuICAgICAgY29uc3QgcmF3U2NoZW1hRGF0YSA9IGZzLnJlYWRGaWxlU3luYyhhcmd2LnNjaGVtYSwgJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBzY2hlbWEgPSBKc29uQmlnSW50LnBhcnNlKHJhd1NjaGVtYURhdGEpO1xuXG4gICAgICBjb25zdCBjb25mVmFsaWRhdG9yID0gbmV3IENvbmZpZ1ZhbGlkYXRvcihzY2hlbWEpO1xuICAgICAgY29uc3QgdHNUeXBlcyA9IGNvbmZWYWxpZGF0b3IuZ2VuZXJhdGVUU1R5cGVzKGFyZ3Yucm9vdFR5cGUpO1xuXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGFyZ3Yub3V0cHV0LCB0c1R5cGVzKTtcblxuICAgICAgc3Bpbm5lci5zdWNjZWVkKFxuICAgICAgICBjaGFsay5ncmVlbihgVHlwZVNjcmlwdCB0eXBlcyB3ZXJlIG91dHB1dCBhdCBcIiR7YXJndi5vdXRwdXR9XCJgKVxuICAgICAgKTtcbiAgICB9XG4gIClcbiAgLmRlbWFuZENvbW1hbmQoMSlcbiAgLnBhcnNlKCk7XG4iXX0=
53
+ fs.writeFileSync(argv.output, output);
54
+ spinner.succeed(chalk.green(`default config values were output at "${argv.output}"`));
55
+ })
56
+ .command('generate-ts-types', 'generates compatible TypeScript interface types for the passed schema', (yargs) => yargs
57
+ .option('schema', {
58
+ alias: 's',
59
+ demandOption: true,
60
+ description: 'input schema file path which should be in json format',
61
+ type: 'string',
62
+ })
63
+ .option('output', {
64
+ alias: 'o',
65
+ demandOption: true,
66
+ description: 'generated TypeScript interfaces',
67
+ type: 'string',
68
+ })
69
+ .option('root-type', {
70
+ alias: 'r',
71
+ demandOption: true,
72
+ description: 'Name of top root interface',
73
+ type: 'string',
74
+ }), async (argv) => {
75
+ const spinner = ora();
76
+ spinner.start(`Generating TypeScript types`);
77
+ const rawSchemaData = fs.readFileSync(argv.schema, 'utf-8');
78
+ const schema = JsonBigInt.parse(rawSchemaData);
79
+ const confValidator = new ConfigValidator(schema);
80
+ const tsTypes = confValidator.generateTSTypes(argv.rootType);
81
+ fs.writeFileSync(argv.output, tsTypes);
82
+ spinner.succeed(chalk.green(`TypeScript types were output at "${argv.output}"`));
83
+ })
84
+ .demandCommand(1)
85
+ .parse();
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQztBQUN0QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8saUJBQWlCLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDO0lBQ25DLGdCQUFnQixFQUFFLEtBQUs7SUFDdkIsZUFBZSxFQUFFLElBQUk7Q0FDdEIsQ0FBQyxDQUFDO0FBRUgsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekIsT0FBTyxDQUNOLGtCQUFrQixFQUNsQixtRUFBbUUsRUFDbkUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNSLEtBQUs7S0FDRixNQUFNLENBQUMsUUFBUSxFQUFFO0lBQ2hCLEtBQUssRUFBRSxHQUFHO0lBQ1YsWUFBWSxFQUFFLElBQUk7SUFDbEIsV0FBVyxFQUFFLHVEQUF1RDtJQUNwRSxJQUFJLEVBQUUsUUFBUTtDQUNmLENBQUM7S0FDRCxNQUFNLENBQUMsUUFBUSxFQUFFO0lBQ2hCLEtBQUssRUFBRSxHQUFHO0lBQ1YsWUFBWSxFQUFFLElBQUk7SUFDbEIsV0FBVyxFQUFFLHNDQUFzQztJQUNuRCxJQUFJLEVBQUUsUUFBUTtDQUNmLENBQUM7S0FDRCxNQUFNLENBQUMsUUFBUSxFQUFFO0lBQ2hCLEtBQUssRUFBRSxHQUFHO0lBQ1YsWUFBWSxFQUFFLElBQUk7SUFD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Q0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUNoRSxDQUFDO0FBQ0osQ0FBQyxDQUNGO0tBQ0EsYUFBYSxDQUFDLENBQUMsQ0FBQztLQUNoQixLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IC1TIG5vZGUgLS1leHBlcmltZW50YWwtc3BlY2lmaWVyLXJlc29sdXRpb249bm9kZVxuXG5pbXBvcnQgeWFyZ3MgZnJvbSAneWFyZ3MnO1xuaW1wb3J0IHsgaGlkZUJpbiB9IGZyb20gJ3lhcmdzL2hlbHBlcnMnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCB7IENvbmZpZ1ZhbGlkYXRvciB9IGZyb20gJy4vaW5kZXgnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IEpzb25CaWdJbnRGYWN0b3J5IGZyb20gJ2pzb24tYmlnaW50JztcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAnanMteWFtbCc7XG5cbmNvbnN0IEpzb25CaWdJbnQgPSBKc29uQmlnSW50RmFjdG9yeSh7XG4gIGFsd2F5c1BhcnNlQXNCaWc6IGZhbHNlLFxuICB1c2VOYXRpdmVCaWdJbnQ6IHRydWUsXG59KTtcblxueWFyZ3MoaGlkZUJpbihwcm9jZXNzLmFyZ3YpKVxuICAuY29tbWFuZChcbiAgICAnZ2VuZXJhdGUtZGVmYXVsdCcsXG4gICAgJ2dlbmVyYXRlcyBhbiBvYmplY3QgdXNpbmcgdGhlIGRlZmF1bHQgdmFsdWVzIG9mIHRoZSBwYXNzZWQgc2NoZW1hJyxcbiAgICAoeWFyZ3MpID0+XG4gICAgICB5YXJnc1xuICAgICAgICAub3B0aW9uKCdzY2hlbWEnLCB7XG4gICAgICAgICAgYWxpYXM6ICdzJyxcbiAgICAgICAgICBkZW1hbmRPcHRpb246IHRydWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdpbnB1dCBzY2hlbWEgZmlsZSBwYXRoIHdoaWNoIHNob3VsZCBiZSBpbiBqc29uIGZvcm1hdCcsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oJ291dHB1dCcsIHtcbiAgICAgICAgICBhbGlhczogJ28nLFxuICAgICAgICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ2dlbmVyYXRlZCBkZWZhdWx0IHZhbHVlcyBvdXRwdXQgcGF0aCcsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oJ2Zvcm1hdCcsIHtcbiAgICAgICAgICBhbGlhczogJ2YnLFxuICAgICAgICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ2dlbmVyYXRlZCBkZWZhdWx0IHZhbHVlcyBvdXRwdXQgcGF0aCcsXG4gICAgICAgICAgY2hvaWNlczogWydqc29uJywgJ3lhbWwnXSxcbiAgICAgICAgICBkZWZhdWx0OiAneWFtbCcsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pLFxuICAgIGFzeW5jIChhcmd2KSA9PiB7XG4gICAgICBjb25zdCBzcGlubmVyID0gb3JhKCk7XG4gICAgICBzcGlubmVyLnN0YXJ0KGBHZW5lcmF0aW5nIGNvbmZpZyBkZWZhdWx0IHZhbHVlc2ApO1xuXG4gICAgICBjb25zdCByYXdTY2hlbWFEYXRhID0gZnMucmVhZEZpbGVTeW5jKGFyZ3Yuc2NoZW1hLCAndXRmLTgnKTtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IEpzb25CaWdJbnQucGFyc2UocmF3U2NoZW1hRGF0YSk7XG5cbiAgICAgIGNvbnN0IGNvbmZWYWxpZGF0b3IgPSBuZXcgQ29uZmlnVmFsaWRhdG9yKHNjaGVtYSk7XG4gICAgICBjb25zdCBkZWZhdWx0Q29uZiA9IGNvbmZWYWxpZGF0b3IuZ2VuZXJhdGVEZWZhdWx0KCk7XG5cbiAgICAgIGxldCBvdXRwdXQgPSAnJztcbiAgICAgIHN3aXRjaCAoYXJndi5mb3JtYXQpIHtcbiAgICAgICAgY2FzZSAnanNvbic6IHtcbiAgICAgICAgICBvdXRwdXQgPSBKc29uQmlnSW50LnN0cmluZ2lmeShkZWZhdWx0Q29uZik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAneWFtbCc6IHtcbiAgICAgICAgICBvdXRwdXQgPSB5YW1sLmR1bXAoZGVmYXVsdENvbmYpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoYXJndi5vdXRwdXQsIG91dHB1dCk7XG5cbiAgICAgIHNwaW5uZXIuc3VjY2VlZChcbiAgICAgICAgY2hhbGsuZ3JlZW4oYGRlZmF1bHQgY29uZmlnIHZhbHVlcyB3ZXJlIG91dHB1dCBhdCBcIiR7YXJndi5vdXRwdXR9XCJgKVxuICAgICAgKTtcbiAgICB9XG4gIClcbiAgLmNvbW1hbmQoXG4gICAgJ2dlbmVyYXRlLXRzLXR5cGVzJyxcbiAgICAnZ2VuZXJhdGVzIGNvbXBhdGlibGUgVHlwZVNjcmlwdCBpbnRlcmZhY2UgdHlwZXMgZm9yIHRoZSBwYXNzZWQgc2NoZW1hJyxcbiAgICAoeWFyZ3MpID0+XG4gICAgICB5YXJnc1xuICAgICAgICAub3B0aW9uKCdzY2hlbWEnLCB7XG4gICAgICAgICAgYWxpYXM6ICdzJyxcbiAgICAgICAgICBkZW1hbmRPcHRpb246IHRydWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdpbnB1dCBzY2hlbWEgZmlsZSBwYXRoIHdoaWNoIHNob3VsZCBiZSBpbiBqc29uIGZvcm1hdCcsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oJ291dHB1dCcsIHtcbiAgICAgICAgICBhbGlhczogJ28nLFxuICAgICAgICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ2dlbmVyYXRlZCBUeXBlU2NyaXB0IGludGVyZmFjZXMnLFxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICB9KVxuICAgICAgICAub3B0aW9uKCdyb290LXR5cGUnLCB7XG4gICAgICAgICAgYWxpYXM6ICdyJyxcbiAgICAgICAgICBkZW1hbmRPcHRpb246IHRydWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdOYW1lIG9mIHRvcCByb290IGludGVyZmFjZScsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pLFxuICAgIGFzeW5jIChhcmd2KSA9PiB7XG4gICAgICBjb25zdCBzcGlubmVyID0gb3JhKCk7XG4gICAgICBzcGlubmVyLnN0YXJ0KGBHZW5lcmF0aW5nIFR5cGVTY3JpcHQgdHlwZXNgKTtcblxuICAgICAgY29uc3QgcmF3U2NoZW1hRGF0YSA9IGZzLnJlYWRGaWxlU3luYyhhcmd2LnNjaGVtYSwgJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBzY2hlbWEgPSBKc29uQmlnSW50LnBhcnNlKHJhd1NjaGVtYURhdGEpO1xuXG4gICAgICBjb25zdCBjb25mVmFsaWRhdG9yID0gbmV3IENvbmZpZ1ZhbGlkYXRvcihzY2hlbWEpO1xuICAgICAgY29uc3QgdHNUeXBlcyA9IGNvbmZWYWxpZGF0b3IuZ2VuZXJhdGVUU1R5cGVzKGFyZ3Yucm9vdFR5cGUpO1xuXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGFyZ3Yub3V0cHV0LCB0c1R5cGVzKTtcblxuICAgICAgc3Bpbm5lci5zdWNjZWVkKFxuICAgICAgICBjaGFsay5ncmVlbihgVHlwZVNjcmlwdCB0eXBlcyB3ZXJlIG91dHB1dCBhdCBcIiR7YXJndi5vdXRwdXR9XCJgKVxuICAgICAgKTtcbiAgICB9XG4gIClcbiAgLmRlbWFuZENvbW1hbmQoMSlcbiAgLnBhcnNlKCk7XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAiB,MAAM,QAAQ,CAAC;AAShD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAIlD,qBAAa,eAAe;IACd,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAIxC;;;;OAIG;IACI,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAUjD;;;;;;;;;OASG;IACH,OAAO,CAAC,iBAAiB;IA0CzB;;;;;;;;;OASG;IACH,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE;IAgB3E;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa,CAmCnB;IAEF;;;;;;;OAOG;IACI,UAAU,SAAU,IAAI,UAAU,OAAO,MAAM,EAAE,GAAG,CAAC,KAAG,OAAO,CAIpE;IAEF;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,WAAY,OAAO,MAAM,EAAE,GAAG,CAAC,QAAQ,MAAM,EAAE,SAW3D;IAEF;;OAEG;IACH,OAAO,CAAC,cAAc,CAuDpB;IAEF;;;;OAIG;IACH,OAAO,CAAC,kBAAkB,CAIxB;IAEF;;;;OAIG;IACH,OAAO,CAAC,mBAAmB,CA2BzB;IAEF;;;;;OAKG;IACH,cAAc,SAAU,MAAM,EAAE,KAAG,WAAW,GAAG,SAAS,CAiBxD;IAEF;;;;OAIG;IACH,eAAe,QAAO,OAAO,MAAM,EAAE,GAAG,CAAC,CAuDvC;IAEF;;;;;OAKG;IACH,eAAe,SAAU,MAAM,KAAG,MAAM,CAsGtC;IAEF;;;;;;OAMG;IACH,OAAO,CAAC,cAAc,CAOpB;IAEF;;;;;;OAMG;IACH,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAmCtE;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IA6CxC;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAkDhC;IAEF;;;;;;;;OAQG;IACH,sBAAsB,cACT,OAAO,MAAM,EAAE,GAAG,CAAC,UACtB,OAAO,SACR,MAAM,UACL,MAAM,UAyDd;CACH"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAiB,MAAM,QAAQ,CAAC;AAShD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAIlD,qBAAa,eAAe;IACd,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAIxC;;;;OAIG;IACI,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAUjD;;;;;;;;;OASG;IACH,OAAO,CAAC,iBAAiB;IA0CzB;;;;;;;;;OASG;IACH,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE;IAgB3E;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa,CAmCnB;IAEF;;;;;;;OAOG;IACI,UAAU,GAAI,MAAM,IAAI,EAAE,QAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAG,OAAO,CAIpE;IAEF;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,MAAM,EAAE,SAW3D;IAEF;;OAEG;IACH,OAAO,CAAC,cAAc,CAuDpB;IAEF;;;;OAIG;IACH,OAAO,CAAC,kBAAkB,CAIxB;IAEF;;;;OAIG;IACH,OAAO,CAAC,mBAAmB,CA2BzB;IAEF;;;;;OAKG;IACH,cAAc,GAAI,MAAM,MAAM,EAAE,KAAG,WAAW,GAAG,SAAS,CAiBxD;IAEF;;;;OAIG;IACH,eAAe,QAAO,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAuDvC;IAEF;;;;;OAKG;IACH,eAAe,GAAI,MAAM,MAAM,KAAG,MAAM,CAsGtC;IAEF;;;;;;OAMG;IACH,OAAO,CAAC,cAAc,CAOpB;IAEF;;;;;;OAMG;IACH,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAmCtE;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IA6CxC;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAkDhC;IAEF;;;;;;;;OAQG;IACH,sBAAsB,GACpB,WAAW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC9B,QAAQ,OAAO,EACf,OAAO,MAAM,EACb,QAAQ,MAAM,UAyDd;CACH"}
package/dist/config.js CHANGED
@@ -589,4 +589,4 @@ export class ConfigValidator {
589
589
  }
590
590
  };
591
591
  }
592
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLGlCQUFpQixNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixjQUFjLEdBQ2YsTUFBTSxxQ0FBcUMsQ0FBQztBQUc3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLHlCQUF5QixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV2RSxNQUFNLE9BQU8sZUFBZTtJQUNOO0lBQXBCLFlBQW9CLE1BQW9CO1FBQXBCLFdBQU0sR0FBTixNQUFNLENBQWM7UUFDdEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksY0FBYyxDQUFDLE1BQTJCO1FBQy9DLElBQUksQ0FBQyxhQUFhLENBQ2hCLE1BQU0sRUFDTixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFDekMsTUFBTSxDQUNQLENBQUM7UUFFRixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSyxpQkFBaUIsQ0FDdkIsTUFBMkIsRUFDM0IsU0FBOEIsRUFDOUIsU0FBdUIsRUFDdkIsSUFBYztRQUVkLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBbUIsRUFBRSxFQUFFLENBQzVDLGlDQUFpQyxJQUFJLENBQUMsSUFBSSxD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bXBvcnQgeyBJQ29uZmlnLCBJQ29uZmlnU291cmNlIH0gZnJvbSAnY29uZmlnJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAnanMteWFtbCc7XG5pbXBvcnQgSnNvbkJpZ0ludEZhY3RvcnkgZnJvbSAnanNvbi1iaWdpbnQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQge1xuICBwcm9wZXJ0eVZhbGlkYXRvcnMsXG4gIHN1cHBvcnRlZFR5cGVzLFxufSBmcm9tICcuL3NjaGVtYS9WYWxpZGF0b3JzL2ZpZWxkUHJvcGVydGllcyc7XG5pbXBvcnQgeyBDb25maWdGaWVsZCwgQ29uZmlnU2NoZW1hIH0gZnJvbSAnLi9zY2hlbWEvdHlwZXMvZmllbGRzJztcbmltcG9ydCB7IFdoZW4gfSBmcm9tICcuL3NjaGVtYS90eXBlcy92YWxpZGF0aW9ucyc7XG5pbXBvcnQgeyBnZXRTb3VyY2VOYW1lLCBnZXRWYWx1ZUZyb21Db25maWdTb3VyY2VzIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyB2YWx1ZVZhbGlkYXRpb25zLCB2YWx1ZVZhbGlkYXRvcnMgfSBmcm9tICcuL3ZhbHVlL3ZhbGlkYXRvcnMnO1xuXG5leHBvcnQgY2xhc3MgQ29uZmlnVmFsaWRhdG9yIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzY2hlbWE6IENvbmZpZ1NjaGVtYSkge1xuICAgIHRoaXMudmFsaWRhdGVTY2hlbWEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB2YWxpZGF0ZXMgdGhlIHBhc3NlZCBjb25maWcgYWdhaW5zdCB0aGUgaW5zdGFuY2UncyBzY2hlbWFcbiAgICpcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBjb25maWdcbiAgICovXG4gIHB1YmxpYyB2YWxpZGF0ZUNvbmZpZyhjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICB0aGlzLnZhbGlkYXRlVmFsdWUoXG4gICAgICBjb25maWcsXG4gICAgICB7IHR5cGU6ICdvYmplY3QnLCBjaGlsZHJlbjogdGhpcy5zY2hlbWEgfSxcbiAgICAgIGNvbmZpZ1xuICAgICk7XG5cbiAgICB0aGlzLnZhbGlkYXRlU3ViQ29uZmlnKGNvbmZpZywgY29uZmlnLCB0aGlzLnNjaGVtYSwgW10pO1xuICB9XG5cbiAgLyoqXG4gICAqIHRyYXZlcnNlcyBhbmQgdmFsaWRhdGVzIGEgc3ViY29uZmlnIHVzaW5nIHRoZSBzdWJzY2hlbWFcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBjb25maWdcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBzdWJDb25maWdcbiAgICogQHBhcmFtIHtDb25maWdTY2hlbWF9IHN1YlNjaGVtYVxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoXG4gICAqIEBtZW1iZXJvZiBDb25maWdWYWxpZGF0b3JcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVTdWJDb25maWcoXG4gICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIHN1YkNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBzdWJTY2hlbWE6IENvbmZpZ1NjaGVtYSxcbiAgICBwYXRoOiBzdHJpbmdbXVxuICApIHtcbiAgICBjb25zdCBlcnJvclByZWFtYmxlID0gKHBhdGg6IEFycmF5PHN0cmluZz4pID0+XG4gICAgICBgY29uZmlnIHZhbGlkYXRpb24gZmFpbGVkIGZvciBcIiR7cGF0aC5qb2luKCcuJyl9XCIgZmllbGRgO1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhzdWJTY2hlbWEpKSB7XG4gICAgICBjb25zdCBjaGlsZFBhdGggPSBwYXRoLmNvbmNhdChbbmFtZV0pO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBzdWJTY2hlbWFbbmFtZV07XG4gICAgICAgIGxldCB2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHN1YkNvbmZpZyAhPSB1bmRlZmluZWQgJiYgT2JqZWN0Lmhhc093bihzdWJDb25maWcsIG5hbWUpKSB7XG4gICAgICAgICAgdmFsdWUgPSBzdWJDb25maWdbbmFtZV07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZhbGlkYXRlVmFsdWUodmFsdWUsIGZpZWxkLCBjb25maWcpO1xuXG4gICAgICAgIC8vIGlmIGEgbm9kZS9maWVsZCBpcyBvZiB0eXBlIG9iamVjdCBhbmQgdGh1cyBpcyBhIHN1YnRyZWUsIHRyYXZlcnNlIGl0XG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGVTdWJDb25maWcoY29uZmlnLCB2YWx1ZSwgZmllbGQuY2hpbGRyZW4sIGNoaWxkUGF0aCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgIENvbmZpZ1ZhbGlkYXRvci5tb2RpZnlPYmplY3QoY29uZmlnLCBpdGVtLCBjaGlsZFBhdGgpO1xuICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlU3ViQ29uZmlnKFxuICAgICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgICB7IFtuYW1lXTogaXRlbSB9LFxuICAgICAgICAgICAgICAgIHsgW25hbWVdOiBmaWVsZC5pdGVtcyB9LFxuICAgICAgICAgICAgICAgIGNoaWxkUGF0aFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBDb25maWdWYWxpZGF0b3IubW9kaWZ5T2JqZWN0KGNvbmZpZywgdmFsdWUsIGNoaWxkUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlcnJvclByZWFtYmxlKGNoaWxkUGF0aCl9OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHNldHMgYW4gb2JqZWN0J3Mgc3BlY2lmaWMgc3VidHJlZSB0byB0aGUgc3BlY2lmaWVkIHZhbHVlXG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBvYmpcbiAgICogQHBhcmFtIHsqfSBuZXdWYWx1ZVxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoXG4gICAqIEByZXR1cm4geyp9XG4gICAqIEBtZW1iZXJvZiBDb25maWdWYWxpZGF0b3JcbiAgICovXG4gIHN0YXRpYyBtb2RpZnlPYmplY3Qob2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBuZXdWYWx1ZTogYW55LCBwYXRoOiBzdHJpbmdbXSkge1xuICAgIGxldCB2YWx1ZTogYW55ID0gb2JqO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIHBhdGguc2xpY2UoMCwgLTEpKSB7XG4gICAgICBpZiAodmFsdWUgIT0gdW5kZWZpbmVkICYmIE9iamVjdC5oYXNPd24odmFsdWUsIGtleSkpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZVtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGxhc3RLZXkgPSBwYXRoLmF0KC0xKTtcbiAgICBpZiAobGFzdEtleSAhPSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbHVlW2xhc3RLZXldID0gbmV3VmFsdWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHZhbGlkYXRlcyBhIHZhbHVlIGluIGNvbmZpZyBvYmplY3RcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0NvbmZpZ0ZpZWxkfSBmaWVsZCB0aGUgZmllbGQgc3BlY2lmaWNhdGlvbiBpbiBzY2hlbWFcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBjb25maWcgdGhlIGNvbmZpZyBvYmplY3RcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVWYWx1ZSA9IChcbiAgICB2YWx1ZTogYW55LFxuICAgIGZpZWxkOiBDb25maWdGaWVsZCxcbiAgICBjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgKSA9PiB7XG4gICAgaWYgKHZhbHVlICE9IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdiaWdpbnQnKSB7XG4gICAgICAgIHZhbHVlID0gQmlnSW50KHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICB9XG4gICAgICB2YWx1ZVZhbGlkYXRvcnNbZmllbGQudHlwZV0odmFsdWUsIGZpZWxkKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBmaWVsZC50eXBlICE9PSAnb2JqZWN0JyAmJlxuICAgICAgZmllbGQudHlwZSAhPT0gJ2FycmF5JyAmJlxuICAgICAgZmllbGQudmFsaWRhdGlvbnNcbiAgICApIHtcbiAgICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbiBvZiBmaWVsZC52YWxpZGF0aW9ucykge1xuICAgICAgICBjb25zdCBuYW1lID0gT2JqZWN0LmtleXModmFsaWRhdGlvbikuZmlsdGVyKFxuICAgICAgICAgIChrZXkpID0+IGtleSAhPT0gJ3doZW4nICYmIGtleSAhPT0gJ2Vycm9yJ1xuICAgICAgICApWzBdO1xuICAgICAgICBpZiAoT2JqZWN0Lmhhc093bih2YWx1ZVZhbGlkYXRpb25zW2ZpZWxkLnR5cGVdLCBuYW1lKSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YWx1ZVZhbGlkYXRpb25zW2ZpZWxkLnR5cGVdW25hbWVdKHZhbHVlLCB2YWxpZGF0aW9uLCBjb25maWcsIHRoaXMpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uLmVycm9yICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodmFsaWRhdGlvbi5lcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIGRldGVybWluZXMgaWYgYSB3aGVuIGNsYXVzZSBpbiB2YWxpZGF0aW9ucyBzZWN0aW9uIG9mIGEgc2NoZW1hIGZpZWxkIGlzXG4gICAqIHNhdGlzZmllZFxuICAgKlxuICAgKiBAcGFyYW0ge1doZW59IHdoZW5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBjb25maWdcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIHB1YmxpYyBpc1doZW5UcnVlID0gKHdoZW46IFdoZW4sIGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55Pik6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IHBhdGhQYXJ0cyA9IHdoZW4ucGF0aC5zcGxpdCgnLicpO1xuICAgIGNvbnN0IHZhbHVlID0gQ29uZmlnVmFsaWRhdG9yLnZhbHVlQXQoY29uZmlnLCBwYXRoUGFydHMpO1xuICAgIHJldHVybiB2YWx1ZSAhPSB1bmRlZmluZWQgJiYgdmFsdWUgPT09IHdoZW4udmFsdWU7XG4gIH07XG5cbiAgLyoqXG4gICAqIHJldHVybnMgdGhlIHZhbHVlIGF0IHNwZWNpZmllZCBwYXRoIGluIGNvbmZpZyBvYmplY3RcbiAgICpcbiAgICogQHN0YXRpY1xuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGNvbmZpZ1xuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoXG4gICAqIEByZXR1cm4geyp9XG4gICAqL1xuICBzdGF0aWMgdmFsdWVBdCA9IChjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4sIHBhdGg6IHN0cmluZ1tdKSA9PiB7XG4gICAgbGV0IHZhbHVlOiBhbnkgPSBjb25maWc7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgcGF0aCkge1xuICAgICAgaWYgKHZhbHVlICE9IHVuZGVmaW5lZCAmJiBPYmplY3QuaGFzT3duKHZhbHVlLCBrZXkpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWVba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiB2YWxpZGF0ZXMgdGhpcy5zY2hlbWEgYW5kIHRocm93cyBleGNlcHRpb24gaWYgYW55IGVycm9ycyBmb3VuZFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVNjaGVtYSA9ICgpID0+IHtcbiAgICBjb25zdCBlcnJvclByZWFtYmxlID0gKHBhdGg6IEFycmF5PHN0cmluZz4pID0+XG4gICAgICBgU2NoZW1hIHZhbGlkYXRpb24gZmFpbGVkIGZvciBcIiR7cGF0aC5qb2luKCcuJyl9XCIgZmllbGRgO1xuXG4gICAgY29uc3Qgc3RhY2s6IEFycmF5PHtcbiAgICAgIHN1YlNjaGVtYTogQ29uZmlnU2NoZW1hO1xuICAgICAgcGFyZW50UGF0aDogQXJyYXk8c3RyaW5nPjtcbiAgICB9PiA9IFtcbiAgICAgIHtcbiAgICAgICAgc3ViU2NoZW1hOiB0aGlzLnNjaGVtYSxcbiAgICAgICAgcGFyZW50UGF0aDogW10sXG4gICAgICB9LFxuICAgIF07XG5cbiAgICAvLyBUcmF2ZXJzZXMgdGhlIHNjaGVtYSBvYmplY3QgdHJlZSBkZXB0aCBmaXJzdCBhbmQgdmFsaWRhdGUgZmllbGRzXG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHsgc3ViU2NoZW1hLCBwYXJlbnRQYXRoIH0gPSBzdGFjay5wb3AoKSE7XG5cbiAgICAgIC8vIHByb2Nlc3MgY2hpbGRyZW4gb2YgY3VycmVudCBvYmplY3QgZmllbGRcbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhzdWJTY2hlbWEpLnJldmVyc2UoKSkge1xuICAgICAgICBjb25zdCBwYXRoID0gcGFyZW50UGF0aC5jb25jYXQoW25hbWVdKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlQ29uZmlnTmFtZShuYW1lKTtcbiAgICAgICAgICBjb25zdCBmaWVsZCA9IHN1YlNjaGVtYVtuYW1lXTtcblxuICAgICAgICAgIGlmICghT2JqZWN0Lmhhc093bihmaWVsZCwgJ3R5cGUnKSB8fCB0eXBlb2YgZmllbGQudHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYGV2ZXJ5IHNjaGVtYSBmaWVsZCBtdXN0IGhhdmUgYSBcInR5cGVcIiBwcm9wZXJ0eSBvZiB0eXBlIFwic3RyaW5nXCJgXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghc3VwcG9ydGVkVHlwZXMuaW5jbHVkZXMoZmllbGQudHlwZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgZmllbGQgdHlwZSBcIiR7ZmllbGQudHlwZX1cImApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMudmFsaWRhdGVTY2hlbWFGaWVsZChmaWVsZCk7XG5cbiAgICAgICAgICAvLyBpZiB0aGUgY2hpbGQgaXMgYW4gb2JqZWN0IGZpZWxkIGl0c2VsZiBhZGQgaXQgdG8gc3RhY2sgZm9yXG4gICAgICAgICAgLy8gcHJvY2Vzc2luZ1xuICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgIHN1YlNjaGVtYTogZmllbGQuY2hpbGRyZW4sXG4gICAgICAgICAgICAgIHBhcmVudFBhdGg6IHBhdGgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgICBzdWJTY2hlbWE6IHsgW25hbWVdOiBmaWVsZC5pdGVtcyB9LFxuICAgICAgICAgICAgICBwYXJlbnRQYXRoOiBwYXRoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Vycm9yUHJlYW1ibGUocGF0aCl9OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIHZhbGlkYXRlcyBjb25maWcga2V5IG5hbWVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVDb25maWdOYW1lID0gKG5hbWU6IHN0cmluZykgPT4ge1xuICAgIGlmIChuYW1lLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgY29uZmlnIGtleSBuYW1lIGNhbiBub3QgY29udGFpbiB0aGUgJy4nIGNoYXJhY3RlcmApO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogdmFsaWRhdGVzIHBhc3NlZCBzY2hlbWEgZmllbGQgc3RydWN0dXJlXG4gICAqXG4gICAqIEBwYXJhbSB7Q29uZmlnRmllbGR9IGZpZWxkXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlU2NoZW1hRmllbGQgPSAoZmllbGQ6IENvbmZpZ0ZpZWxkKSA9PiB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZmllbGQpKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFPYmplY3QuaGFzT3duKHByb3BlcnR5VmFsaWRhdG9ycy5hbGwsIGtleSkgJiZcbiAgICAgICAgIShcbiAgICAgICAgICAhWydvYmplY3QnLCAnYXJyYXknXS5pbmNsdWRlcyhmaWVsZC50eXBlKSAmJlxuICAgICAgICAgIE9iamVjdC5oYXNPd24ocHJvcGVydHlWYWxpZGF0b3JzLnByaW1pdGl2ZSwga2V5KVxuICAgICAgICApICYmXG4gICAgICAgICFPYmplY3QuaGFzT3duKHByb3BlcnR5VmFsaWRhdG9yc1tmaWVsZC50eXBlXSwga2V5KVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgc2NoZW1hIGZpZWxkIGhhcyB1bmtub3duIHByb3BlcnR5IFwiJHtrZXl9XCJgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHZhbGlkYXRvciBvZiBPYmplY3QudmFsdWVzKHByb3BlcnR5VmFsaWRhdG9ycy5hbGwpKSB7XG4gICAgICB2YWxpZGF0b3IoZmllbGQsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmIChmaWVsZC50eXBlICE9PSAnb2JqZWN0JyAmJiBmaWVsZC50eXBlICE9PSAnYXJyYXknKSB7XG4gICAgICBmb3IgKGNvbnN0IHZhbGlkYXRvciBvZiBPYmplY3QudmFsdWVzKHByb3BlcnR5VmFsaWRhdG9ycy5wcmltaXRpdmUpKSB7XG4gICAgICAgIHZhbGlkYXRvcihmaWVsZCwgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB2YWxpZGF0b3Igb2YgT2JqZWN0LnZhbHVlcyhwcm9wZXJ0eVZhbGlkYXRvcnNbZmllbGQudHlwZV0pKSB7XG4gICAgICB2YWxpZGF0b3IoZmllbGQsIHRoaXMpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogcmV0dXJucyBhIGZpZWxkIGNvcnJlc3BvbmRpbmcgdG8gYSBwYXRoIGluIHNjaGVtYSB0cmVlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhcbiAgICogQHJldHVybiB7KENvbmZpZ0ZpZWxkIHwgdW5kZWZpbmVkKX0gcmV0dXJucyB1bmRlZmluZWQgaWYgZmllbGQgaXMgbm90IGZvdW5kXG4gICAqL1xuICBnZXRTY2hlbWFGaWVsZCA9IChwYXRoOiBzdHJpbmdbXSk6IENvbmZpZ0ZpZWxkIHwgdW5kZWZpbmVkID0+IHtcbiAgICBsZXQgc3ViVHJlZTogQ29uZmlnU2NoZW1hIHwgdW5kZWZpbmVkID0gdGhpcy5zY2hlbWE7XG4gICAgbGV0IGZpZWxkOiBDb25maWdGaWVsZCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGF0aCkge1xuICAgICAgaWYgKHN1YlRyZWUgIT0gdW5kZWZpbmVkICYmIE9iamVjdC5oYXNPd24oc3ViVHJlZSwgcGFydCkpIHtcbiAgICAgICAgZmllbGQgPSBzdWJUcmVlW3BhcnRdO1xuICAgICAgICBzdWJUcmVlID1cbiAgICAgICAgICAnY2hpbGRyZW4nIGluIGZpZWxkXG4gICAgICAgICAgICA/IGZpZWxkLmNoaWxkcmVuXG4gICAgICAgICAgICA6ICdpdGVtcycgaW4gZmllbGQgJiYgJ2NoaWxkcmVuJyBpbiBmaWVsZC5pdGVtc1xuICAgICAgICAgICAgPyBmaWVsZC5pdGVtcy5jaGlsZHJlblxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmllbGQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIGV4dHJhY3RzIGRlZmF1bHQgdmFsdWVzIGZyb20gYSBzY2hlbWFcbiAgICpcbiAgICogQHJldHVybiB7UmVjb3JkPHN0cmluZywgYW55Pn0gb2JqZWN0IG9mIGRlZmF1bHQgdmFsdWVzXG4gICAqL1xuICBnZW5lcmF0ZURlZmF1bHQgPSAoKTogUmVjb3JkPHN0cmluZywgYW55PiA9PiB7XG4gICAgY29uc3QgdmFsdWVUcmVlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIGNvbnN0IHN0YWNrOiB7XG4gICAgICBzY2hlbWE6IENvbmZpZ1NjaGVtYTtcbiAgICAgIHBhcmVudFZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkO1xuICAgICAgZmllbGROYW1lOiBzdHJpbmc7XG4gICAgICBjaGlsZHJlbjogc3RyaW5nW107XG4gICAgfVtdID0gW1xuICAgICAge1xuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hLFxuICAgICAgICBwYXJlbnRWYWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICBmaWVsZE5hbWU6ICcnLFxuICAgICAgICBjaGlsZHJlbjogT2JqZWN0LmtleXModGhpcy5zY2hlbWEpLnJldmVyc2UoKSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIC8vIFRyYXZlcnNlcyB0aGUgc2NoZW1hIG9iamVjdCB0cmVlIGRlcHRoIGZpcnN0XG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hLCBwYXJlbnRWYWx1ZSwgZmllbGROYW1lLCBjaGlsZHJlbiB9ID0gc3RhY2suYXQoLTEpITtcblxuICAgICAgLy8gaWYgYSBzdWJ0cmVlJ3MgcHJvY2Vzc2luZyBpcyBmaW5pc2hlZCBnbyB0byB0aGUgcHJldmlvdXMgbGV2ZWxcbiAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gaWYgYSBzdWJ0cmVlIGlzIGVtcHR5IChoYXMgbm8gdmFsdWVzKSByZW1vdmUgaXQgZnJvbSB0aGUgcmVzdWx0XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwYXJlbnRWYWx1ZSAhPSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBPYmplY3Qua2V5cyhwYXJlbnRWYWx1ZVtmaWVsZE5hbWVdKS5sZW5ndGggPT09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgZGVsZXRlIHBhcmVudFZhbHVlW2ZpZWxkTmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgc3RhY2sucG9wKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjaGlsZE5hbWUgPSBjaGlsZHJlbi5wb3AoKSE7XG4gICAgICBjb25zdCB2YWx1ZSA9XG4gICAgICAgIHBhcmVudFZhbHVlICE9IHVuZGVmaW5lZCA/IHBhcmVudFZhbHVlW2ZpZWxkTmFtZV0gOiB2YWx1ZVRyZWU7XG4gICAgICBjb25zdCBmaWVsZCA9IHNjaGVtYVtjaGlsZE5hbWVdO1xuICAgICAgLy8gaWYgYSBub2RlL2ZpZWxkIGlzIG9mIHR5cGUgb2JqZWN0IGFuZCB0aHVzIGlzIGEgc3VidHJlZSwgYWRkIGl0IGJvdGggdG9cbiAgICAgIC8vIHZhbHVlIHRyZWUgYW5kIHRvIHRoZSBzdGFjayB0byBiZSB0cmF2ZXJzZWQgbGF0ZXIuIE90aGVyd2lzZSBpdCdzIGFcbiAgICAgIC8vIGxlYWYgYW5kIG5lZWRzIG5vIHRyYXZlcnNhbCwgc28gYWRkIGl0IG9ubHkgdG8gdGhlIHZhbHVlIHRyZWUuXG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdmFsdWVbY2hpbGROYW1lXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgIHNjaGVtYTogZmllbGQuY2hpbGRyZW4sXG4gICAgICAgICAgcGFyZW50VmFsdWU6IHZhbHVlLFxuICAgICAgICAgIGZpZWxkTmFtZTogY2hpbGROYW1lLFxuICAgICAgICAgIGNoaWxkcmVuOiBPYmplY3Qua2V5cyhmaWVsZC5jaGlsZHJlbikucmV2ZXJzZSgpLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSAhPT0gJ2FycmF5JyAmJiBmaWVsZC5kZWZhdWx0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWx1ZVtjaGlsZE5hbWVdID0gZmllbGQuZGVmYXVsdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVUcmVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBnZW5lcmF0ZXMgY29tcGF0aWJsZSBUeXBlU2NyaXB0IGludGVyZmFjZSBmb3IgdGhpcyBpbnN0YW5jZSdzIHNjaGVtYVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiByb290IHR5cGVcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZ2VuZXJhdGVUU1R5cGVzID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgZXJyb3JQcmVhbWJsZSA9IChwYXRoOiBBcnJheTxzdHJpbmc+KSA9PlxuICAgICAgYFR5cGVTY3JpcHQgdHlwZSBnZW5lcmF0aW9uIGZhaWxlZCBmb3IgXCIke3BhdGguam9pbignLicpfVwiIGZpZWxkYDtcblxuICAgIGNvbnN0IHR5cGVzOiBBcnJheTxzdHJpbmc+ID0gW107XG5cbiAgICBjb25zdCB0eXBlTmFtZXM6IE1hcDxzdHJpbmcsIGJpZ2ludD4gPSBuZXcgTWFwPHN0cmluZywgYmlnaW50PigpO1xuICAgIHR5cGVOYW1lcy5zZXQobmFtZSwgMW4pO1xuXG4gICAgY29uc3Qgc3RhY2s6IEFycmF5PHtcbiAgICAgIHN1YlNjaGVtYTogQ29uZmlnU2NoZW1hO1xuICAgICAgY2hpbGRyZW46IHN0cmluZ1tdO1xuICAgICAgcGFyZW50UGF0aDogQXJyYXk8c3RyaW5nPjtcbiAgICAgIHR5cGVOYW1lOiBzdHJpbmc7XG4gICAgICBhdHRyaWJ1dGVzOiBBcnJheTxbc3RyaW5nLCBzdHJpbmddPjtcbiAgICB9PiA9IFtcbiAgICAgIHtcbiAgICAgICAgc3ViU2NoZW1hOiB0aGlzLnNjaGVtYSxcbiAgICAgICAgY2hpbGRyZW46IE9iamVjdC5rZXlzKHRoaXMuc2NoZW1hKSxcbiAgICAgICAgcGFyZW50UGF0aDogW10sXG4gICAgICAgIHR5cGVOYW1lOiBuYW1lLFxuICAgICAgICBhdHRyaWJ1dGVzOiBbXSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIC8vIFRyYXZlcnNlcyB0aGUgc2NoZW1hIG9iamVjdCB0cmVlIGRlcHRoIGZpcnN0XG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHsgc3ViU2NoZW1hLCBjaGlsZHJlbiwgcGFyZW50UGF0aCwgdHlwZU5hbWUsIGF0dHJpYnV0ZXMgfSA9XG4gICAgICAgIHN0YWNrLmF0KC0xKSE7XG4gICAgICBjb25zdCBwYXRoID0gcGFyZW50UGF0aC5jb25jYXQoW25hbWVdKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIGlmIGEgc3VidHJlZSdzIHByb2Nlc3NpbmcgaXMgZmluaXNoZWQgZ28gdG8gdGhlIHByZXZpb3VzIGxldmVsXG4gICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT0gMCkge1xuICAgICAgICAgIHR5cGVzLnB1c2godGhpcy5nZW5UU0ludGVyZmFjZSh0eXBlTmFtZSwgYXR0cmlidXRlcykpO1xuICAgICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2hpbGROYW1lID0gY2hpbGRyZW4ucG9wKCkhO1xuICAgICAgICBjb25zdCBmaWVsZCA9IHN1YlNjaGVtYVtjaGlsZE5hbWVdO1xuXG4gICAgICAgIC8vIGlmIGEgbm9kZS9maWVsZCBpcyBvZiB0eXBlIG9iamVjdCBhbmQgdGh1cyBpcyBhIHN1YnRyZWUsIGFkZCBpdCB0b1xuICAgICAgICAvLyB0aGUgc3RhY2sgdG8gYmUgdHJhdmVyc2VkIGxhdGVyLiBPdGhlcndpc2UgaXQncyBhIGxlYWYgYW5kIG5lZWRzIG5vXG4gICAgICAgIC8vIHRyYXZlcnNhbC5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZpZWxkLnR5cGUgPT09ICdvYmplY3QnIHx8XG4gICAgICAgICAgKGZpZWxkLnR5cGUgPT09ICdhcnJheScgJiYgZmllbGQuaXRlbXMudHlwZSA9PT0gJ29iamVjdCcpXG4gICAgICAgICkge1xuICAgICAgICAgIGxldCBjaGlsZFR5cGVOYW1lID0gYCR7Y2hpbGROYW1lWzBdLnRvVXBwZXJDYXNlKCl9JHtjaGlsZE5hbWUuc3Vic3RyaW5nKFxuICAgICAgICAgICAgMVxuICAgICAgICAgICl9YDtcbiAgICAgICAgICBjb25zdCB0eXBlTmFtZUNvdW50ID0gdHlwZU5hbWVzLmdldChjaGlsZFR5cGVOYW1lKTtcbiAgICAgICAgICB0eXBlTmFtZXMuc2V0KGNoaWxkVHlwZU5hbWUsICh0eXBlTmFtZXMuZ2V0KGNoaWxkTmFtZSkgfHwgMG4pICsgMW4pO1xuICAgICAgICAgIGlmICh0eXBlTmFtZUNvdW50KSB7XG4gICAgICAgICAgICBjaGlsZFR5cGVOYW1lICs9IHR5cGVOYW1lQ291bnQudG9TdHJpbmcoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9XG4gICAgICAgICAgICBmaWVsZC50eXBlID09PSAnYXJyYXknICYmIGZpZWxkLml0ZW1zLnR5cGUgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgID8gZmllbGQuaXRlbXMuY2hpbGRyZW5cbiAgICAgICAgICAgICAgOiBmaWVsZC50eXBlID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICA/IGZpZWxkLmNoaWxkcmVuXG4gICAgICAgICAgICAgIDoge307XG5cbiAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHN1YlNjaGVtYTogY2hpbGRyZW4sXG4gICAgICAgICAgICBjaGlsZHJlbjogT2JqZWN0LmtleXMoY2hpbGRyZW4pLnJldmVyc2UoKSxcbiAgICAgICAgICAgIHBhcmVudFBhdGg6IHBhdGgsXG4gICAgICAgICAgICB0eXBlTmFtZTogY2hpbGRUeXBlTmFtZSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYXR0cmlidXRlcy5wdXNoKFtcbiAgICAgICAgICAgIGNoaWxkTmFtZSxcbiAgICAgICAgICAgIGZpZWxkLnR5cGUgPT09ICdhcnJheScgPyBgJHtjaGlsZFR5cGVOYW1lfVtdYCA6IGNoaWxkVHlwZU5hbWUsXG4gICAgICAgICAgXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IGZpZWxkVHlwZTogc3RyaW5nID1cbiAgICAgICAgICAgIGZpZWxkLnR5cGUgPT09ICdhcnJheScgPyBmaWVsZC5pdGVtcy50eXBlIDogZmllbGQudHlwZTtcbiAgICAgICAgICBsZXQgaXNPcHRpb25hbCA9IHRydWU7XG4gICAgICAgICAgaWYgKGZpZWxkLnR5cGUgIT09ICdhcnJheScgJiYgZmllbGQudmFsaWRhdGlvbnMgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbGlkYXRpb24gb2YgZmllbGQudmFsaWRhdGlvbnMpIHtcbiAgICAgICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdzdHJpbmcnICYmICdjaG9pY2VzJyBpbiB2YWxpZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgZmllbGRUeXBlID0gdmFsaWRhdGlvbi5jaG9pY2VzLm1hcCgoYykgPT4gYCcke2N9J2ApLmpvaW4oJyB8ICcpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCdyZXF1aXJlZCcgaW4gdmFsaWRhdGlvbiAmJiAhKCd3aGVuJyBpbiB2YWxpZGF0aW9uKSkge1xuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBhdHRyaWJ1dGVzLnB1c2goW1xuICAgICAgICAgICAgaXNPcHRpb25hbCA/IGAke2NoaWxkTmFtZX0/YCA6IGNoaWxkTmFtZSxcbiAgICAgICAgICAgIGZpZWxkLnR5cGUgPT09ICdhcnJheScgPyBgJHtmaWVsZFR5cGV9W11gIDogZmllbGRUeXBlLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlcnJvclByZWFtYmxlKHBhdGgpfTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0eXBlcy5yZXZlcnNlKCkuam9pbignXFxuXFxuJykgKyAnXFxuJztcbiAgfTtcblxuICAvKipcbiAgICogZ2VuZXJhdGVzIGEgVHlwZVNjcmlwdCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmb3IgcGFzc2VkIG5hbWUgYW5kIGF0dHJpYnV0ZXNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtBcnJheTxbc3RyaW5nLCBzdHJpbmddPn0gYXR0cmlidXRlc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBwcml2YXRlIGdlblRTSW50ZXJmYWNlID0gKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBhdHRyaWJ1dGVzOiBBcnJheTxbc3RyaW5nLCBzdHJpbmddPlxuICApOiBzdHJpbmcgPT4ge1xuICAgIHJldHVybiBgZXhwb3J0IGludGVyZmFjZSAke25hbWV9IHtcbiAgJHthdHRyaWJ1dGVzLm1hcCgoYXR0cikgPT4gYCR7YXR0clswXX06ICR7YXR0clsxXX07YCkuam9pbignXFxuICAnKX1cbn1gO1xuICB9O1xuXG4gIC8qKlxuICAgKiByZXR1cm5zIGEgY2hhcmFjdGVyaXN0aWMgb2JqZWN0IGZvciB2YWx1ZXMgYXQgYSBzcGVjaWZpYyBub2RlIGNvbmZpZyBsZXZlbFxuICAgKlxuICAgKiBAcGFyYW0ge0lDb25maWd9IGNvbmZpZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gbGV2ZWxcbiAgICogQHJldHVybiB7UmVjb3JkPHN0cmluZywgYW55Pn1cbiAgICovXG4gIGdldENvbmZpZ0ZvckxldmVsKGNvbmZpZzogSUNvbmZpZywgbGV2ZWw6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGNvbnN0IGNvbmZMZXZlbHMgPSBDb25maWdWYWxpZGF0b3IuZ2V0Tm9kZUNvbmZpZ0xldmVscyhjb25maWcpO1xuICAgIGNvbnN0IGxldmVsSW5kZXggPSBjb25mTGV2ZWxzLmluZGV4T2YobGV2ZWwpO1xuICAgIGlmIChsZXZlbEluZGV4ID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlIFwiJHtsZXZlbH1cIiBsZXZlbCBub3QgZm91bmQgaW4gdGhlIGN1cnJlbnQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gbGV2ZWxzYFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgaGlnaGVyTGV2ZWxTb3VyY2VzID0gY29uZmlnLnV0aWxcbiAgICAgIC5nZXRDb25maWdTb3VyY2VzKClcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChzb3VyY2UpID0+IGNvbmZMZXZlbHMuaW5kZXhPZihnZXRTb3VyY2VOYW1lKHNvdXJjZSkpID4gbGV2ZWxJbmRleFxuICAgICAgKTtcbiAgICBjb25zdCBjdXJyZW50TGV2ZWxTb3VyY2UgPSBjb25maWcudXRpbFxuICAgICAgLmdldENvbmZpZ1NvdXJjZXMoKVxuICAgICAgLmZpbHRlcigoc291cmNlKSA9PiBnZXRTb3VyY2VOYW1lKHNvdXJjZSkgPT09IGxldmVsKVxuICAgICAgLmF0KDApO1xuICAgIGNvbnN0IGxvd2VyTGV2ZWxTb3VyY2VzID0gY29uZmlnLnV0aWxcbiAgICAgIC5nZXRDb25maWdTb3VyY2VzKClcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChzb3VyY2UpID0+IGNvbmZMZXZlbHMuaW5kZXhPZihnZXRTb3VyY2VOYW1lKHNvdXJjZSkpIDwgbGV2ZWxJbmRleFxuICAgICAgKTtcblxuICAgIC8vIFRyYXZlcnNlcyB0aGUgc2NoZW1hIG9iamVjdCB0cmVlIGRlcHRoIGZpcnN0XG4gICAgY29uc3QgdmFsdWVUcmVlID0gQ29uZmlnVmFsaWRhdG9yLnByb2Nlc3NDb25maWdGb3JMZXZlbE5vZGUoXG4gICAgICB0aGlzLnNjaGVtYSxcbiAgICAgIFtdLFxuICAgICAgaGlnaGVyTGV2ZWxTb3VyY2VzLFxuICAgICAgY3VycmVudExldmVsU291cmNlLFxuICAgICAgbG93ZXJMZXZlbFNvdXJjZXNcbiAgICApO1xuXG4gICAgcmV0dXJuIHZhbHVlVHJlZTtcbiAgfVxuXG4gIC8qKlxuICAgKnRyYXZlcnNlcyB0aGUgY29uZmlnIHNjaGVtYSBkZXB0aCBmaXJzdCB0byBwcm9kdWNlIGNoYXJhY3RlcmlzdGljIG9iamVjdFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAc3RhdGljXG4gICAqIEBwYXJhbSB7Q29uZmlnU2NoZW1hfSBzY2hlbWFcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aFxuICAgKiBAcGFyYW0ge0lDb25maWdTb3VyY2VbXX0gaGlnaGVyTGV2ZWxTb3VyY2VzXG4gICAqIEBwYXJhbSB7KElDb25maWdTb3VyY2UgfCB1bmRlZmluZWQpfSBjdXJyZW50TGV2ZWxTb3VyY2VcbiAgICogQHBhcmFtIHtJQ29uZmlnU291cmNlW119IGxvd2VyTGV2ZWxTb3VyY2VzXG4gICAqIEByZXR1cm4ge1JlY29yZDxzdHJpbmcsIGFueT59XG4gICAqIEBtZW1iZXJvZiBDb25maWdWYWxpZGF0b3JcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHByb2Nlc3NDb25maWdGb3JMZXZlbE5vZGUoXG4gICAgc2NoZW1hOiBDb25maWdTY2hlbWEsXG4gICAgcGF0aDogc3RyaW5nW10sXG4gICAgaGlnaGVyTGV2ZWxTb3VyY2VzOiBJQ29uZmlnU291cmNlW10sXG4gICAgY3VycmVudExldmVsU291cmNlOiBJQ29uZmlnU291cmNlIHwgdW5kZWZpbmVkLFxuICAgIGxvd2VyTGV2ZWxTb3VyY2VzOiBJQ29uZmlnU291cmNlW11cbiAgKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgY29uc3QgdmFsdWUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGZvciAoY29uc3QgY2hpbGROYW1lIG9mIE9iamVjdC5rZXlzKHNjaGVtYSkucmV2ZXJzZSgpKSB7XG4gICAgICBjb25zdCBjaGlsZFBhdGggPSBwYXRoLmNvbmNhdChbY2hpbGROYW1lXSk7XG4gICAgICBjb25zdCBmaWVsZCA9IHNjaGVtYVtjaGlsZE5hbWVdO1xuICAgICAgLy8gaWYgYSBmaWVsZCBpcyBvZiB0eXBlIG9iamVjdCBhbmQgdGh1cyBpcyBhIHN1YnRyZWUsIHJlY3Vyc2Ugb24gaXQuXG4gICAgICAvLyBPdGhlcndpc2UgaXQncyBhIGxlYWYgYW5kIG5lZWRzIG5vIHRyYXZlcnNhbC5cbiAgICAgIHZhbHVlW2NoaWxkTmFtZV0gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHZhbHVlW2NoaWxkTmFtZV0gPSBDb25maWdWYWxpZGF0b3IucHJvY2Vzc0NvbmZpZ0ZvckxldmVsTm9kZShcbiAgICAgICAgICBmaWVsZC5jaGlsZHJlbixcbiAgICAgICAgICBjaGlsZFBhdGgsXG4gICAgICAgICAgaGlnaGVyTGV2ZWxTb3VyY2VzLFxuICAgICAgICAgIGN1cnJlbnRMZXZlbFNvdXJjZSxcbiAgICAgICAgICBsb3dlckxldmVsU291cmNlc1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWVbY2hpbGROYW1lXVsnbGFiZWwnXSA9XG4gICAgICAgICAgZmllbGQubGFiZWwgIT0gdW5kZWZpbmVkID8gZmllbGQubGFiZWwgOiBudWxsO1xuICAgICAgICB2YWx1ZVtjaGlsZE5hbWVdWydkZXNjcmlwdGlvbiddID1cbiAgICAgICAgICBmaWVsZC5kZXNjcmlwdGlvbiAhPSB1bmRlZmluZWQgPyBmaWVsZC5kZXNjcmlwdGlvbiA6IG51bGw7XG4gICAgICAgIHZhbHVlW2NoaWxkTmFtZV1bJ2RlZmF1bHQnXSA9IGdldFZhbHVlRnJvbUNvbmZpZ1NvdXJjZXMoXG4gICAgICAgICAgbG93ZXJMZXZlbFNvdXJjZXMsXG4gICAgICAgICAgY2hpbGRQYXRoXG4gICAgICAgICk7XG4gICAgICAgIHZhbHVlW2NoaWxkTmFtZV1bJ3ZhbHVlJ10gPSBnZXRWYWx1ZUZyb21Db25maWdTb3VyY2VzKFxuICAgICAgICAgIFsuLi4oY3VycmVudExldmVsU291cmNlICE9IHVuZGVmaW5lZCA/IFtjdXJyZW50TGV2ZWxTb3VyY2VdIDogW10pXSxcbiAgICAgICAgICBjaGlsZFBhdGhcbiAgICAgICAgKTtcbiAgICAgICAgdmFsdWVbY2hpbGROYW1lXVsnb3ZlcnJpZGUnXSA9IGdldFZhbHVlRnJvbUNvbmZpZ1NvdXJjZXMoXG4gICAgICAgICAgaGlnaGVyTGV2ZWxTb3VyY2VzLFxuICAgICAgICAgIGNoaWxkUGF0aFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm5zIGEgbGlzdCBvZiBjb25maWcgc291cmNlcyB1c2VkIGJ5IG5vZGUgY29uZmlnIHBhY2thZ2UsIG9yZGVyZWQgZnJvbVxuICAgKiB0aGUgbG93ZXN0IHRvIHRoZSBoaWdoZXN0IHByaW9yaXR5XG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQHBhcmFtIHtJQ29uZmlnfSBjb25maWdcbiAgICogQHJldHVybiAge3N0cmluZ1tdfVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0Tm9kZUNvbmZpZ0xldmVscyA9IChjb25maWc6IElDb25maWcpOiBzdHJpbmdbXSA9PiB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBjb25maWcudXRpbC5nZXRFbnYoJ05PREVfQVBQX0lOU1RBTkNFJyk7XG4gICAgbGV0IGRlcGxveW1lbnQgPSBjb25maWcudXRpbC5nZXRFbnYoJ05PREVfRU5WJyk7XG4gICAgZGVwbG95bWVudCA9IGNvbmZpZy51dGlsLmdldEVudignTk9ERV9DT05GSUdfRU5WJyk7XG4gICAgY29uc3QgZnVsbEhvc3RuYW1lID0gY29uZmlnLnV0aWwuZ2V0RW52KCdIT1NUTkFNRScpO1xuICAgIGNvbnN0IHNob3J0SG9zdG5hbWUgPVxuICAgICAgZnVsbEhvc3RuYW1lICE9IHVuZGVmaW5lZCA/IGZ1bGxIb3N0bmFtZS5zcGxpdCgnLicpWzBdIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgY29uZmlnTGV2ZWxzID0gW1xuICAgICAgJ2RlZmF1bHQnLFxuICAgICAgLi4uKGluc3RhbmNlICE9IHVuZGVmaW5lZCA/IFtgZGVmYXVsdC0ke2luc3RhbmNlfWBdIDogW10pLFxuICAgICAgLi4uKGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkID8gW2Ake2RlcGxveW1lbnR9YF0gOiBbXSksXG4gICAgICAuLi4oaW5zdGFuY2UgIT0gdW5kZWZpbmVkICYmIGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkXG4gICAgICAgID8gW2Ake2RlcGxveW1lbnR9LSR7aW5zdGFuY2V9YF1cbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4oc2hvcnRIb3N0bmFtZSAhPSB1bmRlZmluZWQgPyBbYCR7c2hvcnRIb3N0bmFtZX1gXSA6IFtdKSxcbiAgICAgIC4uLihzaG9ydEhvc3RuYW1lICE9IHVuZGVmaW5lZCAmJiBpbnN0YW5jZSAhPSB1bmRlZmluZWRcbiAgICAgICAgPyBbYCR7c2hvcnRIb3N0bmFtZX0tJHtpbnN0YW5jZX1gXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLihzaG9ydEhvc3RuYW1lICE9IHVuZGVmaW5lZCAmJiBkZXBsb3ltZW50ICE9IHVuZGVmaW5lZFxuICAgICAgICA/IFtgJHtzaG9ydEhvc3RuYW1lfS0ke2RlcGxveW1lbnR9YF1cbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4oc2hvcnRIb3N0bmFtZSAhPSB1bmRlZmluZWQgJiZcbiAgICAgIGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkICYmXG4gICAgICBpbnN0YW5jZSAhPSB1bmRlZmluZWRcbiAgICAgICAgPyBbYCR7c2hvcnRIb3N0bmFtZX0tJHtkZXBsb3ltZW50fS0ke2luc3RhbmNlfWBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKGZ1bGxIb3N0bmFtZSAhPSB1bmRlZmluZWQgPyBbYCR7ZnVsbEhvc3RuYW1lfWBdIDogW10pLFxuICAgICAgLi4uKGZ1bGxIb3N0bmFtZSAhPSB1bmRlZmluZWQgJiYgaW5zdGFuY2UgIT0gdW5kZWZpbmVkXG4gICAgICAgID8gW2Ake2Z1bGxIb3N0bmFtZX0tJHtpbnN0YW5jZX1gXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLihmdWxsSG9zdG5hbWUgIT0gdW5kZWZpbmVkICYmIGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkXG4gICAgICAgID8gW2Ake2Z1bGxIb3N0bmFtZX0tJHtkZXBsb3ltZW50fWBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKGZ1bGxIb3N0bmFtZSAhPSB1bmRlZmluZWQgJiZcbiAgICAgIGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkICYmXG4gICAgICBpbnN0YW5jZSAhPSB1bmRlZmluZWRcbiAgICAgICAgPyBbYCR7ZnVsbEhvc3RuYW1lfS0ke2RlcGxveW1lbnR9LSR7aW5zdGFuY2V9YF1cbiAgICAgICAgOiBbXSksXG4gICAgICBgbG9jYWxgLFxuICAgICAgLi4uKGluc3RhbmNlICE9IHVuZGVmaW5lZCA/IFtgbG9jYWwtJHtpbnN0YW5jZX1gXSA6IFtdKSxcbiAgICAgIC4uLihkZXBsb3ltZW50ICE9IHVuZGVmaW5lZCA/IFtgbG9jYWwtJHtkZXBsb3ltZW50fWBdIDogW10pLFxuICAgICAgLi4uKGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkICYmIGluc3RhbmNlICE9IHVuZGVmaW5lZFxuICAgICAgICA/IFtgbG9jYWwtJHtkZXBsb3ltZW50fS0ke2luc3RhbmNlfWBdXG4gICAgICAgIDogW10pLFxuICAgICAgJyROT0RFX0NPTkZJRycsXG4gICAgICAnY3VzdG9tLWVudmlyb25tZW50LXZhcmlhYmxlcycsXG4gICAgXTtcblxuICAgIHJldHVybiBjb25maWdMZXZlbHM7XG4gIH07XG5cbiAgLyoqXG4gICAqIHZhbGlkYXRlcyBhIGNvbmZpZyBvYmplY3QgYW5kIHdyaXRlcyBpdCB0byB0aGUgbm9kZS1jb25maWcgZmlsZVxuICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXNzZWQgbGV2ZWxcbiAgICpcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBjb25maWdPYmpcbiAgICogQHBhcmFtIHtJQ29uZmlnfSBjb25maWdcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxldmVsIG91dHB1dCBub2RlLWNvbmZpZyBmaWxlIGxldmVsXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgdGhlIGZvcm1hdCBvZiB0aGUgb3V0cHV0IGZpbGVcbiAgICovXG4gIHZhbGlkYXRlQW5kV3JpdGVDb25maWcgPSAoXG4gICAgY29uZmlnT2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIGNvbmZpZzogSUNvbmZpZyxcbiAgICBsZXZlbDogc3RyaW5nLFxuICAgIGZvcm1hdDogc3RyaW5nXG4gICkgPT4ge1xuICAgIGNvbnN0IGNvbmZMZXZlbHMgPSBDb25maWdWYWxpZGF0b3IuZ2V0Tm9kZUNvbmZpZ0xldmVscyhjb25maWcpLmZpbHRlcihcbiAgICAgIChsKSA9PiBsICE9PSAnY3VzdG9tLWVudmlyb25tZW50LXZhcmlhYmxlcydcbiAgICApO1xuICAgIGNvbnN0IGxldmVsSW5kZXggPSBjb25mTGV2ZWxzLmluZGV4T2YobGV2ZWwpO1xuICAgIGlmIChsZXZlbEluZGV4ID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlIFske2xldmVsfV0gbGV2ZWwgbm90IGZvdW5kIGluIHRoZSBjdXJyZW50IHN5c3RlbSdzIGNvbmZpZ3VyYXRpb24gbGV2ZWxzYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWdEaXIgPVxuICAgICAgcHJvY2Vzcy5lbnZbJ05PREVfQ09ORklHX0RJUiddICE9IHVuZGVmaW5lZFxuICAgICAgICA/IHByb2Nlc3MuZW52WydOT0RFX0NPTkZJR19ESVInXVxuICAgICAgICA6ICcuL2NvbmZpZyc7XG4gICAgbGV0IG91dHB1dCA9ICcnO1xuICAgIGxldCBleHQgPSAnJztcbiAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgY2FzZSAnanNvbic6IHtcbiAgICAgICAgY29uc3QgSnNvbkJpZ0ludCA9IEpzb25CaWdJbnRGYWN0b3J5KHtcbiAgICAgICAgICBhbHdheXNQYXJzZUFzQmlnOiBmYWxzZSxcbiAgICAgICAgICB1c2VOYXRpdmVCaWdJbnQ6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBvdXRwdXQgPSBKc29uQmlnSW50LnN0cmluZ2lmeShjb25maWdPYmopO1xuICAgICAgICBleHQgPSAnanNvbic7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAneWFtbCc6IHtcbiAgICAgICAgb3V0cHV0ID0geWFtbC5kdW1wKGNvbmZpZ09iaik7XG4gICAgICAgIGV4dCA9ICd5YW1sJztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBmb3JtYXQ6ICR7Zm9ybWF0fWApO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dFBhdGggPSBwYXRoLmpvaW4oY29uZmlnRGlyLCBgJHtsZXZlbH0uJHtleHR9YCk7XG4gICAgY29uc3QgYmFja3VwUGF0aCA9IHBhdGguam9pbihjb25maWdEaXIsIGAke2xldmVsfS1iYWNrdXAuJHtleHR9YCk7XG4gICAgY29uc3QgY29uZkZpbGVFeGlzdHMgPSBmcy5leGlzdHNTeW5jKG91dHB1dFBhdGgpO1xuICAgIGlmIChjb25mRmlsZUV4aXN0cykge1xuICAgICAgZnMucmVuYW1lU3luYyhvdXRwdXRQYXRoLCBiYWNrdXBQYXRoKTtcbiAgICB9XG4gICAgZnMud3JpdGVGaWxlU3luYyhvdXRwdXRQYXRoLCBvdXRwdXQpO1xuXG4gICAgY29uc3QgdXBkYXRlZENvbmZPYmogPSBjb25maWcudXRpbC5sb2FkRmlsZUNvbmZpZ3MoKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnZhbGlkYXRlQ29uZmlnKHVwZGF0ZWRDb25mT2JqKTtcbiAgICAgIGZzLnVubGlua1N5bmMoYmFja3VwUGF0aCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGZzLnVubGlua1N5bmMob3V0cHV0UGF0aCk7XG4gICAgICBpZiAoY29uZkZpbGVFeGlzdHMpIHtcbiAgICAgICAgZnMucmVuYW1lU3luYyhiYWNrdXBQYXRoLCBvdXRwdXRQYXRoKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
592
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLGlCQUFpQixNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixjQUFjLEdBQ2YsTUFBTSxxQ0FBcUMsQ0FBQztBQUc3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLHlCQUF5QixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV2RSxNQUFNLE9BQU8sZUFBZTtJQUNOO0lBQXBCLFlBQW9CLE1BQW9CO1FBQXBCLFdBQU0sR0FBTixNQUFNLENBQWM7UUFDdEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksY0FBYyxDQUFDLE1BQTJCO1FBQy9DLElBQUksQ0FBQyxhQUFhLENBQ2hCLE1BQU0sRUFDTixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFDekMsTUFBTSxDQUNQLENBQUM7UUFFRixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSyxpQkFBaUIsQ0FDdkIsTUFBMkIsRUFDM0IsU0FBOEIsRUFDOUIsU0FBdUIsRUFDdkIsSUFBYztRQUVkLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBbUIsRUFBRSxFQUFFLENBQzVDLGlDQUFpQyxJQUFJLENBQUMsSUFBSSxD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LEdBQUcsS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDM0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxLQUFLLFdBQVcsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNsRSxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUNELEVBQUUsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXJDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFckQsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNwQyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMxQixJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNuQixFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN4QyxDQUFDO1lBQ0QsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUNvbmZpZywgSUNvbmZpZ1NvdXJjZSB9IGZyb20gJ2NvbmZpZyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IEpzb25CaWdJbnRGYWN0b3J5IGZyb20gJ2pzb24tYmlnaW50JztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtcbiAgcHJvcGVydHlWYWxpZGF0b3JzLFxuICBzdXBwb3J0ZWRUeXBlcyxcbn0gZnJvbSAnLi9zY2hlbWEvVmFsaWRhdG9ycy9maWVsZFByb3BlcnRpZXMnO1xuaW1wb3J0IHsgQ29uZmlnRmllbGQsIENvbmZpZ1NjaGVtYSB9IGZyb20gJy4vc2NoZW1hL3R5cGVzL2ZpZWxkcyc7XG5pbXBvcnQgeyBXaGVuIH0gZnJvbSAnLi9zY2hlbWEvdHlwZXMvdmFsaWRhdGlvbnMnO1xuaW1wb3J0IHsgZ2V0U291cmNlTmFtZSwgZ2V0VmFsdWVGcm9tQ29uZmlnU291cmNlcyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgdmFsdWVWYWxpZGF0aW9ucywgdmFsdWVWYWxpZGF0b3JzIH0gZnJvbSAnLi92YWx1ZS92YWxpZGF0b3JzJztcblxuZXhwb3J0IGNsYXNzIENvbmZpZ1ZhbGlkYXRvciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2NoZW1hOiBDb25maWdTY2hlbWEpIHtcbiAgICB0aGlzLnZhbGlkYXRlU2NoZW1hKCk7XG4gIH1cblxuICAvKipcbiAgICogdmFsaWRhdGVzIHRoZSBwYXNzZWQgY29uZmlnIGFnYWluc3QgdGhlIGluc3RhbmNlJ3Mgc2NoZW1hXG4gICAqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gY29uZmlnXG4gICAqL1xuICBwdWJsaWMgdmFsaWRhdGVDb25maWcoY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgdGhpcy52YWxpZGF0ZVZhbHVlKFxuICAgICAgY29uZmlnLFxuICAgICAgeyB0eXBlOiAnb2JqZWN0JywgY2hpbGRyZW46IHRoaXMuc2NoZW1hIH0sXG4gICAgICBjb25maWdcbiAgICApO1xuXG4gICAgdGhpcy52YWxpZGF0ZVN1YkNvbmZpZyhjb25maWcsIGNvbmZpZywgdGhpcy5zY2hlbWEsIFtdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0cmF2ZXJzZXMgYW5kIHZhbGlkYXRlcyBhIHN1YmNvbmZpZyB1c2luZyB0aGUgc3Vic2NoZW1hXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gY29uZmlnXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gc3ViQ29uZmlnXG4gICAqIEBwYXJhbSB7Q29uZmlnU2NoZW1hfSBzdWJTY2hlbWFcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aFxuICAgKiBAbWVtYmVyb2YgQ29uZmlnVmFsaWRhdG9yXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlU3ViQ29uZmlnKFxuICAgIGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBzdWJDb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgc3ViU2NoZW1hOiBDb25maWdTY2hlbWEsXG4gICAgcGF0aDogc3RyaW5nW11cbiAgKSB7XG4gICAgY29uc3QgZXJyb3JQcmVhbWJsZSA9IChwYXRoOiBBcnJheTxzdHJpbmc+KSA9PlxuICAgICAgYGNvbmZpZyB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgXCIke3BhdGguam9pbignLicpfVwiIGZpZWxkYDtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoc3ViU2NoZW1hKSkge1xuICAgICAgY29uc3QgY2hpbGRQYXRoID0gcGF0aC5jb25jYXQoW25hbWVdKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gc3ViU2NoZW1hW25hbWVdO1xuICAgICAgICBsZXQgdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChzdWJDb25maWcgIT0gdW5kZWZpbmVkICYmIE9iamVjdC5oYXNPd24oc3ViQ29uZmlnLCBuYW1lKSkge1xuICAgICAgICAgIHZhbHVlID0gc3ViQ29uZmlnW25hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YWxpZGF0ZVZhbHVlKHZhbHVlLCBmaWVsZCwgY29uZmlnKTtcblxuICAgICAgICAvLyBpZiBhIG5vZGUvZmllbGQgaXMgb2YgdHlwZSBvYmplY3QgYW5kIHRodXMgaXMgYSBzdWJ0cmVlLCB0cmF2ZXJzZSBpdFxuICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlU3ViQ29uZmlnKGNvbmZpZywgdmFsdWUsIGZpZWxkLmNoaWxkcmVuLCBjaGlsZFBhdGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICBDb25maWdWYWxpZGF0b3IubW9kaWZ5T2JqZWN0KGNvbmZpZywgaXRlbSwgY2hpbGRQYXRoKTtcbiAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVN1YkNvbmZpZyhcbiAgICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgICAgeyBbbmFtZV06IGl0ZW0gfSxcbiAgICAgICAgICAgICAgICB7IFtuYW1lXTogZmllbGQuaXRlbXMgfSxcbiAgICAgICAgICAgICAgICBjaGlsZFBhdGhcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgQ29uZmlnVmFsaWRhdG9yLm1vZGlmeU9iamVjdChjb25maWcsIHZhbHVlLCBjaGlsZFBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZXJyb3JQcmVhbWJsZShjaGlsZFBhdGgpfTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzZXRzIGFuIG9iamVjdCdzIHNwZWNpZmljIHN1YnRyZWUgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZVxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gb2JqXG4gICAqIEBwYXJhbSB7Kn0gbmV3VmFsdWVcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aFxuICAgKiBAcmV0dXJuIHsqfVxuICAgKiBAbWVtYmVyb2YgQ29uZmlnVmFsaWRhdG9yXG4gICAqL1xuICBzdGF0aWMgbW9kaWZ5T2JqZWN0KG9iajogUmVjb3JkPHN0cmluZywgYW55PiwgbmV3VmFsdWU6IGFueSwgcGF0aDogc3RyaW5nW10pIHtcbiAgICBsZXQgdmFsdWU6IGFueSA9IG9iajtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBwYXRoLnNsaWNlKDAsIC0xKSkge1xuICAgICAgaWYgKHZhbHVlICE9IHVuZGVmaW5lZCAmJiBPYmplY3QuaGFzT3duKHZhbHVlLCBrZXkpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWVba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBsYXN0S2V5ID0gcGF0aC5hdCgtMSk7XG4gICAgaWYgKGxhc3RLZXkgIT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWx1ZVtsYXN0S2V5XSA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB2YWxpZGF0ZXMgYSB2YWx1ZSBpbiBjb25maWcgb2JqZWN0XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtDb25maWdGaWVsZH0gZmllbGQgdGhlIGZpZWxkIHNwZWNpZmljYXRpb24gaW4gc2NoZW1hXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gY29uZmlnIHRoZSBjb25maWcgb2JqZWN0XG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlVmFsdWUgPSAoXG4gICAgdmFsdWU6IGFueSxcbiAgICBmaWVsZDogQ29uZmlnRmllbGQsXG4gICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICkgPT4ge1xuICAgIGlmICh2YWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnYmlnaW50Jykge1xuICAgICAgICB2YWx1ZSA9IEJpZ0ludCh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09ICdudW1iZXInICYmIHZhbHVlICYmICFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuICAgICAgfVxuICAgICAgdmFsdWVWYWxpZGF0b3JzW2ZpZWxkLnR5cGVdKHZhbHVlLCBmaWVsZCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZmllbGQudHlwZSAhPT0gJ29iamVjdCcgJiZcbiAgICAgIGZpZWxkLnR5cGUgIT09ICdhcnJheScgJiZcbiAgICAgIGZpZWxkLnZhbGlkYXRpb25zXG4gICAgKSB7XG4gICAgICBmb3IgKGNvbnN0IHZhbGlkYXRpb24gb2YgZmllbGQudmFsaWRhdGlvbnMpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IE9iamVjdC5rZXlzKHZhbGlkYXRpb24pLmZpbHRlcihcbiAgICAgICAgICAoa2V5KSA9PiBrZXkgIT09ICd3aGVuJyAmJiBrZXkgIT09ICdlcnJvcidcbiAgICAgICAgKVswXTtcbiAgICAgICAgaWYgKE9iamVjdC5oYXNPd24odmFsdWVWYWxpZGF0aW9uc1tmaWVsZC50eXBlXSwgbmFtZSkpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFsdWVWYWxpZGF0aW9uc1tmaWVsZC50eXBlXVtuYW1lXSh2YWx1ZSwgdmFsaWRhdGlvbiwgY29uZmlnLCB0aGlzKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgICBpZiAodmFsaWRhdGlvbi5lcnJvciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHZhbGlkYXRpb24uZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBkZXRlcm1pbmVzIGlmIGEgd2hlbiBjbGF1c2UgaW4gdmFsaWRhdGlvbnMgc2VjdGlvbiBvZiBhIHNjaGVtYSBmaWVsZCBpc1xuICAgKiBzYXRpc2ZpZWRcbiAgICpcbiAgICogQHBhcmFtIHtXaGVufSB3aGVuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gY29uZmlnXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBwdWJsaWMgaXNXaGVuVHJ1ZSA9ICh3aGVuOiBXaGVuLCBjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBwYXRoUGFydHMgPSB3aGVuLnBhdGguc3BsaXQoJy4nKTtcbiAgICBjb25zdCB2YWx1ZSA9IENvbmZpZ1ZhbGlkYXRvci52YWx1ZUF0KGNvbmZpZywgcGF0aFBhcnRzKTtcbiAgICByZXR1cm4gdmFsdWUgIT0gdW5kZWZpbmVkICYmIHZhbHVlID09PSB3aGVuLnZhbHVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiByZXR1cm5zIHRoZSB2YWx1ZSBhdCBzcGVjaWZpZWQgcGF0aCBpbiBjb25maWcgb2JqZWN0XG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBjb25maWdcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aFxuICAgKiBAcmV0dXJuIHsqfVxuICAgKi9cbiAgc3RhdGljIHZhbHVlQXQgPSAoY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBwYXRoOiBzdHJpbmdbXSkgPT4ge1xuICAgIGxldCB2YWx1ZTogYW55ID0gY29uZmlnO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIHBhdGgpIHtcbiAgICAgIGlmICh2YWx1ZSAhPSB1bmRlZmluZWQgJiYgT2JqZWN0Lmhhc093bih2YWx1ZSwga2V5KSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlW2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcblxuICAvKipcbiAgICogdmFsaWRhdGVzIHRoaXMuc2NoZW1hIGFuZCB0aHJvd3MgZXhjZXB0aW9uIGlmIGFueSBlcnJvcnMgZm91bmRcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVTY2hlbWEgPSAoKSA9PiB7XG4gICAgY29uc3QgZXJyb3JQcmVhbWJsZSA9IChwYXRoOiBBcnJheTxzdHJpbmc+KSA9PlxuICAgICAgYFNjaGVtYSB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgXCIke3BhdGguam9pbignLicpfVwiIGZpZWxkYDtcblxuICAgIGNvbnN0IHN0YWNrOiBBcnJheTx7XG4gICAgICBzdWJTY2hlbWE6IENvbmZpZ1NjaGVtYTtcbiAgICAgIHBhcmVudFBhdGg6IEFycmF5PHN0cmluZz47XG4gICAgfT4gPSBbXG4gICAgICB7XG4gICAgICAgIHN1YlNjaGVtYTogdGhpcy5zY2hlbWEsXG4gICAgICAgIHBhcmVudFBhdGg6IFtdLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgLy8gVHJhdmVyc2VzIHRoZSBzY2hlbWEgb2JqZWN0IHRyZWUgZGVwdGggZmlyc3QgYW5kIHZhbGlkYXRlIGZpZWxkc1xuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB7IHN1YlNjaGVtYSwgcGFyZW50UGF0aCB9ID0gc3RhY2sucG9wKCkhO1xuXG4gICAgICAvLyBwcm9jZXNzIGNoaWxkcmVuIG9mIGN1cnJlbnQgb2JqZWN0IGZpZWxkXG4gICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoc3ViU2NoZW1hKS5yZXZlcnNlKCkpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IHBhcmVudFBhdGguY29uY2F0KFtuYW1lXSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZUNvbmZpZ05hbWUobmFtZSk7XG4gICAgICAgICAgY29uc3QgZmllbGQgPSBzdWJTY2hlbWFbbmFtZV07XG5cbiAgICAgICAgICBpZiAoIU9iamVjdC5oYXNPd24oZmllbGQsICd0eXBlJykgfHwgdHlwZW9mIGZpZWxkLnR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBldmVyeSBzY2hlbWEgZmllbGQgbXVzdCBoYXZlIGEgXCJ0eXBlXCIgcHJvcGVydHkgb2YgdHlwZSBcInN0cmluZ1wiYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXN1cHBvcnRlZFR5cGVzLmluY2x1ZGVzKGZpZWxkLnR5cGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGZpZWxkIHR5cGUgXCIke2ZpZWxkLnR5cGV9XCJgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnZhbGlkYXRlU2NoZW1hRmllbGQoZmllbGQpO1xuXG4gICAgICAgICAgLy8gaWYgdGhlIGNoaWxkIGlzIGFuIG9iamVjdCBmaWVsZCBpdHNlbGYgYWRkIGl0IHRvIHN0YWNrIGZvclxuICAgICAgICAgIC8vIHByb2Nlc3NpbmdcbiAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgICBzdWJTY2hlbWE6IGZpZWxkLmNoaWxkcmVuLFxuICAgICAgICAgICAgICBwYXJlbnRQYXRoOiBwYXRoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgc3ViU2NoZW1hOiB7IFtuYW1lXTogZmllbGQuaXRlbXMgfSxcbiAgICAgICAgICAgICAgcGFyZW50UGF0aDogcGF0aCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlcnJvclByZWFtYmxlKHBhdGgpfTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiB2YWxpZGF0ZXMgY29uZmlnIGtleSBuYW1lXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlQ29uZmlnTmFtZSA9IChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICBpZiAobmFtZS5pbmNsdWRlcygnLicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbmZpZyBrZXkgbmFtZSBjYW4gbm90IGNvbnRhaW4gdGhlICcuJyBjaGFyYWN0ZXJgKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIHZhbGlkYXRlcyBwYXNzZWQgc2NoZW1hIGZpZWxkIHN0cnVjdHVyZVxuICAgKlxuICAgKiBAcGFyYW0ge0NvbmZpZ0ZpZWxkfSBmaWVsZFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVNjaGVtYUZpZWxkID0gKGZpZWxkOiBDb25maWdGaWVsZCkgPT4ge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGZpZWxkKSkge1xuICAgICAgaWYgKFxuICAgICAgICAhT2JqZWN0Lmhhc093bihwcm9wZXJ0eVZhbGlkYXRvcnMuYWxsLCBrZXkpICYmXG4gICAgICAgICEoXG4gICAgICAgICAgIVsnb2JqZWN0JywgJ2FycmF5J10uaW5jbHVkZXMoZmllbGQudHlwZSkgJiZcbiAgICAgICAgICBPYmplY3QuaGFzT3duKHByb3BlcnR5VmFsaWRhdG9ycy5wcmltaXRpdmUsIGtleSlcbiAgICAgICAgKSAmJlxuICAgICAgICAhT2JqZWN0Lmhhc093bihwcm9wZXJ0eVZhbGlkYXRvcnNbZmllbGQudHlwZV0sIGtleSlcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNjaGVtYSBmaWVsZCBoYXMgdW5rbm93biBwcm9wZXJ0eSBcIiR7a2V5fVwiYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB2YWxpZGF0b3Igb2YgT2JqZWN0LnZhbHVlcyhwcm9wZXJ0eVZhbGlkYXRvcnMuYWxsKSkge1xuICAgICAgdmFsaWRhdG9yKGZpZWxkLCB0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGQudHlwZSAhPT0gJ29iamVjdCcgJiYgZmllbGQudHlwZSAhPT0gJ2FycmF5Jykge1xuICAgICAgZm9yIChjb25zdCB2YWxpZGF0b3Igb2YgT2JqZWN0LnZhbHVlcyhwcm9wZXJ0eVZhbGlkYXRvcnMucHJpbWl0aXZlKSkge1xuICAgICAgICB2YWxpZGF0b3IoZmllbGQsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIE9iamVjdC52YWx1ZXMocHJvcGVydHlWYWxpZGF0b3JzW2ZpZWxkLnR5cGVdKSkge1xuICAgICAgdmFsaWRhdG9yKGZpZWxkLCB0aGlzKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIHJldHVybnMgYSBmaWVsZCBjb3JyZXNwb25kaW5nIHRvIGEgcGF0aCBpbiBzY2hlbWEgdHJlZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoXG4gICAqIEByZXR1cm4geyhDb25maWdGaWVsZCB8IHVuZGVmaW5lZCl9IHJldHVybnMgdW5kZWZpbmVkIGlmIGZpZWxkIGlzIG5vdCBmb3VuZFxuICAgKi9cbiAgZ2V0U2NoZW1hRmllbGQgPSAocGF0aDogc3RyaW5nW10pOiBDb25maWdGaWVsZCB8IHVuZGVmaW5lZCA9PiB7XG4gICAgbGV0IHN1YlRyZWU6IENvbmZpZ1NjaGVtYSB8IHVuZGVmaW5lZCA9IHRoaXMuc2NoZW1hO1xuICAgIGxldCBmaWVsZDogQ29uZmlnRmllbGQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhdGgpIHtcbiAgICAgIGlmIChzdWJUcmVlICE9IHVuZGVmaW5lZCAmJiBPYmplY3QuaGFzT3duKHN1YlRyZWUsIHBhcnQpKSB7XG4gICAgICAgIGZpZWxkID0gc3ViVHJlZVtwYXJ0XTtcbiAgICAgICAgc3ViVHJlZSA9XG4gICAgICAgICAgJ2NoaWxkcmVuJyBpbiBmaWVsZFxuICAgICAgICAgICAgPyBmaWVsZC5jaGlsZHJlblxuICAgICAgICAgICAgOiAnaXRlbXMnIGluIGZpZWxkICYmICdjaGlsZHJlbicgaW4gZmllbGQuaXRlbXNcbiAgICAgICAgICAgID8gZmllbGQuaXRlbXMuY2hpbGRyZW5cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpZWxkO1xuICB9O1xuXG4gIC8qKlxuICAgKiBleHRyYWN0cyBkZWZhdWx0IHZhbHVlcyBmcm9tIGEgc2NoZW1hXG4gICAqXG4gICAqIEByZXR1cm4ge1JlY29yZDxzdHJpbmcsIGFueT59IG9iamVjdCBvZiBkZWZhdWx0IHZhbHVlc1xuICAgKi9cbiAgZ2VuZXJhdGVEZWZhdWx0ID0gKCk6IFJlY29yZDxzdHJpbmcsIGFueT4gPT4ge1xuICAgIGNvbnN0IHZhbHVlVHJlZTogUmVjb3JkPHN0cmluZywgYW55PiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICBjb25zdCBzdGFjazoge1xuICAgICAgc2NoZW1hOiBDb25maWdTY2hlbWE7XG4gICAgICBwYXJlbnRWYWx1ZTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZDtcbiAgICAgIGZpZWxkTmFtZTogc3RyaW5nO1xuICAgICAgY2hpbGRyZW46IHN0cmluZ1tdO1xuICAgIH1bXSA9IFtcbiAgICAgIHtcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYSxcbiAgICAgICAgcGFyZW50VmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgZmllbGROYW1lOiAnJyxcbiAgICAgICAgY2hpbGRyZW46IE9iamVjdC5rZXlzKHRoaXMuc2NoZW1hKS5yZXZlcnNlKCksXG4gICAgICB9LFxuICAgIF07XG5cbiAgICAvLyBUcmF2ZXJzZXMgdGhlIHNjaGVtYSBvYmplY3QgdHJlZSBkZXB0aCBmaXJzdFxuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYSwgcGFyZW50VmFsdWUsIGZpZWxkTmFtZSwgY2hpbGRyZW4gfSA9IHN0YWNrLmF0KC0xKSE7XG5cbiAgICAgIC8vIGlmIGEgc3VidHJlZSdzIHByb2Nlc3NpbmcgaXMgZmluaXNoZWQgZ28gdG8gdGhlIHByZXZpb3VzIGxldmVsXG4gICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIGlmIGEgc3VidHJlZSBpcyBlbXB0eSAoaGFzIG5vIHZhbHVlcykgcmVtb3ZlIGl0IGZyb20gdGhlIHJlc3VsdFxuICAgICAgICBpZiAoXG4gICAgICAgICAgcGFyZW50VmFsdWUgIT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgT2JqZWN0LmtleXMocGFyZW50VmFsdWVbZmllbGROYW1lXSkubGVuZ3RoID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgIGRlbGV0ZSBwYXJlbnRWYWx1ZVtmaWVsZE5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2hpbGROYW1lID0gY2hpbGRyZW4ucG9wKCkhO1xuICAgICAgY29uc3QgdmFsdWUgPVxuICAgICAgICBwYXJlbnRWYWx1ZSAhPSB1bmRlZmluZWQgPyBwYXJlbnRWYWx1ZVtmaWVsZE5hbWVdIDogdmFsdWVUcmVlO1xuICAgICAgY29uc3QgZmllbGQgPSBzY2hlbWFbY2hpbGROYW1lXTtcbiAgICAgIC8vIGlmIGEgbm9kZS9maWVsZCBpcyBvZiB0eXBlIG9iamVjdCBhbmQgdGh1cyBpcyBhIHN1YnRyZWUsIGFkZCBpdCBib3RoIHRvXG4gICAgICAvLyB2YWx1ZSB0cmVlIGFuZCB0byB0aGUgc3RhY2sgdG8gYmUgdHJhdmVyc2VkIGxhdGVyLiBPdGhlcndpc2UgaXQncyBhXG4gICAgICAvLyBsZWFmIGFuZCBuZWVkcyBubyB0cmF2ZXJzYWwsIHNvIGFkZCBpdCBvbmx5IHRvIHRoZSB2YWx1ZSB0cmVlLlxuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHZhbHVlW2NoaWxkTmFtZV0gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICBzY2hlbWE6IGZpZWxkLmNoaWxkcmVuLFxuICAgICAgICAgIHBhcmVudFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBmaWVsZE5hbWU6IGNoaWxkTmFtZSxcbiAgICAgICAgICBjaGlsZHJlbjogT2JqZWN0LmtleXMoZmllbGQuY2hpbGRyZW4pLnJldmVyc2UoKSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgIT09ICdhcnJheScgJiYgZmllbGQuZGVmYXVsdCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFsdWVbY2hpbGROYW1lXSA9IGZpZWxkLmRlZmF1bHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlVHJlZTtcbiAgfTtcblxuICAvKipcbiAgICogZ2VuZXJhdGVzIGNvbXBhdGlibGUgVHlwZVNjcmlwdCBpbnRlcmZhY2UgZm9yIHRoaXMgaW5zdGFuY2UncyBzY2hlbWFcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgdGhlIG5hbWUgb2Ygcm9vdCB0eXBlXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIGdlbmVyYXRlVFNUeXBlcyA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IGVycm9yUHJlYW1ibGUgPSAocGF0aDogQXJyYXk8c3RyaW5nPikgPT5cbiAgICAgIGBUeXBlU2NyaXB0IHR5cGUgZ2VuZXJhdGlvbiBmYWlsZWQgZm9yIFwiJHtwYXRoLmpvaW4oJy4nKX1cIiBmaWVsZGA7XG5cbiAgICBjb25zdCB0eXBlczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gICAgY29uc3QgdHlwZU5hbWVzOiBNYXA8c3RyaW5nLCBiaWdpbnQ+ID0gbmV3IE1hcDxzdHJpbmcsIGJpZ2ludD4oKTtcbiAgICB0eXBlTmFtZXMuc2V0KG5hbWUsIDFuKTtcblxuICAgIGNvbnN0IHN0YWNrOiBBcnJheTx7XG4gICAgICBzdWJTY2hlbWE6IENvbmZpZ1NjaGVtYTtcbiAgICAgIGNoaWxkcmVuOiBzdHJpbmdbXTtcbiAgICAgIHBhcmVudFBhdGg6IEFycmF5PHN0cmluZz47XG4gICAgICB0eXBlTmFtZTogc3RyaW5nO1xuICAgICAgYXR0cmlidXRlczogQXJyYXk8W3N0cmluZywgc3RyaW5nXT47XG4gICAgfT4gPSBbXG4gICAgICB7XG4gICAgICAgIHN1YlNjaGVtYTogdGhpcy5zY2hlbWEsXG4gICAgICAgIGNoaWxkcmVuOiBPYmplY3Qua2V5cyh0aGlzLnNjaGVtYSksXG4gICAgICAgIHBhcmVudFBhdGg6IFtdLFxuICAgICAgICB0eXBlTmFtZTogbmFtZSxcbiAgICAgICAgYXR0cmlidXRlczogW10sXG4gICAgICB9LFxuICAgIF07XG5cbiAgICAvLyBUcmF2ZXJzZXMgdGhlIHNjaGVtYSBvYmplY3QgdHJlZSBkZXB0aCBmaXJzdFxuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB7IHN1YlNjaGVtYSwgY2hpbGRyZW4sIHBhcmVudFBhdGgsIHR5cGVOYW1lLCBhdHRyaWJ1dGVzIH0gPVxuICAgICAgICBzdGFjay5hdCgtMSkhO1xuICAgICAgY29uc3QgcGF0aCA9IHBhcmVudFBhdGguY29uY2F0KFtuYW1lXSk7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBpZiBhIHN1YnRyZWUncyBwcm9jZXNzaW5nIGlzIGZpbmlzaGVkIGdvIHRvIHRoZSBwcmV2aW91cyBsZXZlbFxuICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09IDApIHtcbiAgICAgICAgICB0eXBlcy5wdXNoKHRoaXMuZ2VuVFNJbnRlcmZhY2UodHlwZU5hbWUsIGF0dHJpYnV0ZXMpKTtcbiAgICAgICAgICBzdGFjay5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNoaWxkTmFtZSA9IGNoaWxkcmVuLnBvcCgpITtcbiAgICAgICAgY29uc3QgZmllbGQgPSBzdWJTY2hlbWFbY2hpbGROYW1lXTtcblxuICAgICAgICAvLyBpZiBhIG5vZGUvZmllbGQgaXMgb2YgdHlwZSBvYmplY3QgYW5kIHRodXMgaXMgYSBzdWJ0cmVlLCBhZGQgaXQgdG9cbiAgICAgICAgLy8gdGhlIHN0YWNrIHRvIGJlIHRyYXZlcnNlZCBsYXRlci4gT3RoZXJ3aXNlIGl0J3MgYSBsZWFmIGFuZCBuZWVkcyBub1xuICAgICAgICAvLyB0cmF2ZXJzYWwuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBmaWVsZC50eXBlID09PSAnb2JqZWN0JyB8fFxuICAgICAgICAgIChmaWVsZC50eXBlID09PSAnYXJyYXknICYmIGZpZWxkLml0ZW1zLnR5cGUgPT09ICdvYmplY3QnKVxuICAgICAgICApIHtcbiAgICAgICAgICBsZXQgY2hpbGRUeXBlTmFtZSA9IGAke2NoaWxkTmFtZVswXS50b1VwcGVyQ2FzZSgpfSR7Y2hpbGROYW1lLnN1YnN0cmluZyhcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApfWA7XG4gICAgICAgICAgY29uc3QgdHlwZU5hbWVDb3VudCA9IHR5cGVOYW1lcy5nZXQoY2hpbGRUeXBlTmFtZSk7XG4gICAgICAgICAgdHlwZU5hbWVzLnNldChjaGlsZFR5cGVOYW1lLCAodHlwZU5hbWVzLmdldChjaGlsZE5hbWUpIHx8IDBuKSArIDFuKTtcbiAgICAgICAgICBpZiAodHlwZU5hbWVDb3VudCkge1xuICAgICAgICAgICAgY2hpbGRUeXBlTmFtZSArPSB0eXBlTmFtZUNvdW50LnRvU3RyaW5nKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY2hpbGRyZW4gPVxuICAgICAgICAgICAgZmllbGQudHlwZSA9PT0gJ2FycmF5JyAmJiBmaWVsZC5pdGVtcy50eXBlID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICA/IGZpZWxkLml0ZW1zLmNoaWxkcmVuXG4gICAgICAgICAgICAgIDogZmllbGQudHlwZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgPyBmaWVsZC5jaGlsZHJlblxuICAgICAgICAgICAgICA6IHt9O1xuXG4gICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBzdWJTY2hlbWE6IGNoaWxkcmVuLFxuICAgICAgICAgICAgY2hpbGRyZW46IE9iamVjdC5rZXlzKGNoaWxkcmVuKS5yZXZlcnNlKCksXG4gICAgICAgICAgICBwYXJlbnRQYXRoOiBwYXRoLFxuICAgICAgICAgICAgdHlwZU5hbWU6IGNoaWxkVHlwZU5hbWUsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiBbXSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGF0dHJpYnV0ZXMucHVzaChbXG4gICAgICAgICAgICBjaGlsZE5hbWUsXG4gICAgICAgICAgICBmaWVsZC50eXBlID09PSAnYXJyYXknID8gYCR7Y2hpbGRUeXBlTmFtZX1bXWAgOiBjaGlsZFR5cGVOYW1lLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBmaWVsZFR5cGU6IHN0cmluZyA9XG4gICAgICAgICAgICBmaWVsZC50eXBlID09PSAnYXJyYXknID8gZmllbGQuaXRlbXMudHlwZSA6IGZpZWxkLnR5cGU7XG4gICAgICAgICAgbGV0IGlzT3B0aW9uYWwgPSB0cnVlO1xuICAgICAgICAgIGlmIChmaWVsZC50eXBlICE9PSAnYXJyYXknICYmIGZpZWxkLnZhbGlkYXRpb25zICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCB2YWxpZGF0aW9uIG9mIGZpZWxkLnZhbGlkYXRpb25zKSB7XG4gICAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnc3RyaW5nJyAmJiAnY2hvaWNlcycgaW4gdmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgIGZpZWxkVHlwZSA9IHZhbGlkYXRpb24uY2hvaWNlcy5tYXAoKGMpID0+IGAnJHtjfSdgKS5qb2luKCcgfCAnKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICgncmVxdWlyZWQnIGluIHZhbGlkYXRpb24gJiYgISgnd2hlbicgaW4gdmFsaWRhdGlvbikpIHtcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYXR0cmlidXRlcy5wdXNoKFtcbiAgICAgICAgICAgIGlzT3B0aW9uYWwgPyBgJHtjaGlsZE5hbWV9P2AgOiBjaGlsZE5hbWUsXG4gICAgICAgICAgICBmaWVsZC50eXBlID09PSAnYXJyYXknID8gYCR7ZmllbGRUeXBlfVtdYCA6IGZpZWxkVHlwZSxcbiAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZXJyb3JQcmVhbWJsZShwYXRoKX06ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZXMucmV2ZXJzZSgpLmpvaW4oJ1xcblxcbicpICsgJ1xcbic7XG4gIH07XG5cbiAgLyoqXG4gICAqIGdlbmVyYXRlcyBhIFR5cGVTY3JpcHQgaW50ZXJmYWNlIGRlZmluaXRpb24gZm9yIHBhc3NlZCBuYW1lIGFuZCBhdHRyaWJ1dGVzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7QXJyYXk8W3N0cmluZywgc3RyaW5nXT59IGF0dHJpYnV0ZXNcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgcHJpdmF0ZSBnZW5UU0ludGVyZmFjZSA9IChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgYXR0cmlidXRlczogQXJyYXk8W3N0cmluZywgc3RyaW5nXT5cbiAgKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gYGV4cG9ydCBpbnRlcmZhY2UgJHtuYW1lfSB7XG4gICR7YXR0cmlidXRlcy5tYXAoKGF0dHIpID0+IGAke2F0dHJbMF19OiAke2F0dHJbMV19O2ApLmpvaW4oJ1xcbiAgJyl9XG59YDtcbiAgfTtcblxuICAvKipcbiAgICogcmV0dXJucyBhIGNoYXJhY3RlcmlzdGljIG9iamVjdCBmb3IgdmFsdWVzIGF0IGEgc3BlY2lmaWMgbm9kZSBjb25maWcgbGV2ZWxcbiAgICpcbiAgICogQHBhcmFtIHtJQ29uZmlnfSBjb25maWdcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxldmVsXG4gICAqIEByZXR1cm4ge1JlY29yZDxzdHJpbmcsIGFueT59XG4gICAqL1xuICBnZXRDb25maWdGb3JMZXZlbChjb25maWc6IElDb25maWcsIGxldmVsOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCBjb25mTGV2ZWxzID0gQ29uZmlnVmFsaWRhdG9yLmdldE5vZGVDb25maWdMZXZlbHMoY29uZmlnKTtcbiAgICBjb25zdCBsZXZlbEluZGV4ID0gY29uZkxldmVscy5pbmRleE9mKGxldmVsKTtcbiAgICBpZiAobGV2ZWxJbmRleCA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBcIiR7bGV2ZWx9XCIgbGV2ZWwgbm90IGZvdW5kIGluIHRoZSBjdXJyZW50IHN5c3RlbSBjb25maWd1cmF0aW9uIGxldmVsc2BcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGhpZ2hlckxldmVsU291cmNlcyA9IGNvbmZpZy51dGlsXG4gICAgICAuZ2V0Q29uZmlnU291cmNlcygpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoc291cmNlKSA9PiBjb25mTGV2ZWxzLmluZGV4T2YoZ2V0U291cmNlTmFtZShzb3VyY2UpKSA+IGxldmVsSW5kZXhcbiAgICAgICk7XG4gICAgY29uc3QgY3VycmVudExldmVsU291cmNlID0gY29uZmlnLnV0aWxcbiAgICAgIC5nZXRDb25maWdTb3VyY2VzKClcbiAgICAgIC5maWx0ZXIoKHNvdXJjZSkgPT4gZ2V0U291cmNlTmFtZShzb3VyY2UpID09PSBsZXZlbClcbiAgICAgIC5hdCgwKTtcbiAgICBjb25zdCBsb3dlckxldmVsU291cmNlcyA9IGNvbmZpZy51dGlsXG4gICAgICAuZ2V0Q29uZmlnU291cmNlcygpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoc291cmNlKSA9PiBjb25mTGV2ZWxzLmluZGV4T2YoZ2V0U291cmNlTmFtZShzb3VyY2UpKSA8IGxldmVsSW5kZXhcbiAgICAgICk7XG5cbiAgICAvLyBUcmF2ZXJzZXMgdGhlIHNjaGVtYSBvYmplY3QgdHJlZSBkZXB0aCBmaXJzdFxuICAgIGNvbnN0IHZhbHVlVHJlZSA9IENvbmZpZ1ZhbGlkYXRvci5wcm9jZXNzQ29uZmlnRm9yTGV2ZWxOb2RlKFxuICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICBbXSxcbiAgICAgIGhpZ2hlckxldmVsU291cmNlcyxcbiAgICAgIGN1cnJlbnRMZXZlbFNvdXJjZSxcbiAgICAgIGxvd2VyTGV2ZWxTb3VyY2VzXG4gICAgKTtcblxuICAgIHJldHVybiB2YWx1ZVRyZWU7XG4gIH1cblxuICAvKipcbiAgICp0cmF2ZXJzZXMgdGhlIGNvbmZpZyBzY2hlbWEgZGVwdGggZmlyc3QgdG8gcHJvZHVjZSBjaGFyYWN0ZXJpc3RpYyBvYmplY3RcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHN0YXRpY1xuICAgKiBAcGFyYW0ge0NvbmZpZ1NjaGVtYX0gc2NoZW1hXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhcbiAgICogQHBhcmFtIHtJQ29uZmlnU291cmNlW119IGhpZ2hlckxldmVsU291cmNlc1xuICAgKiBAcGFyYW0geyhJQ29uZmlnU291cmNlIHwgdW5kZWZpbmVkKX0gY3VycmVudExldmVsU291cmNlXG4gICAqIEBwYXJhbSB7SUNvbmZpZ1NvdXJjZVtdfSBsb3dlckxldmVsU291cmNlc1xuICAgKiBAcmV0dXJuIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fVxuICAgKiBAbWVtYmVyb2YgQ29uZmlnVmFsaWRhdG9yXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBwcm9jZXNzQ29uZmlnRm9yTGV2ZWxOb2RlKFxuICAgIHNjaGVtYTogQ29uZmlnU2NoZW1hLFxuICAgIHBhdGg6IHN0cmluZ1tdLFxuICAgIGhpZ2hlckxldmVsU291cmNlczogSUNvbmZpZ1NvdXJjZVtdLFxuICAgIGN1cnJlbnRMZXZlbFNvdXJjZTogSUNvbmZpZ1NvdXJjZSB8IHVuZGVmaW5lZCxcbiAgICBsb3dlckxldmVsU291cmNlczogSUNvbmZpZ1NvdXJjZVtdXG4gICk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGNvbnN0IHZhbHVlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBmb3IgKGNvbnN0IGNoaWxkTmFtZSBvZiBPYmplY3Qua2V5cyhzY2hlbWEpLnJldmVyc2UoKSkge1xuICAgICAgY29uc3QgY2hpbGRQYXRoID0gcGF0aC5jb25jYXQoW2NoaWxkTmFtZV0pO1xuICAgICAgY29uc3QgZmllbGQgPSBzY2hlbWFbY2hpbGROYW1lXTtcbiAgICAgIC8vIGlmIGEgZmllbGQgaXMgb2YgdHlwZSBvYmplY3QgYW5kIHRodXMgaXMgYSBzdWJ0cmVlLCByZWN1cnNlIG9uIGl0LlxuICAgICAgLy8gT3RoZXJ3aXNlIGl0J3MgYSBsZWFmIGFuZCBuZWVkcyBubyB0cmF2ZXJzYWwuXG4gICAgICB2YWx1ZVtjaGlsZE5hbWVdID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICB2YWx1ZVtjaGlsZE5hbWVdID0gQ29uZmlnVmFsaWRhdG9yLnByb2Nlc3NDb25maWdGb3JMZXZlbE5vZGUoXG4gICAgICAgICAgZmllbGQuY2hpbGRyZW4sXG4gICAgICAgICAgY2hpbGRQYXRoLFxuICAgICAgICAgIGhpZ2hlckxldmVsU291cmNlcyxcbiAgICAgICAgICBjdXJyZW50TGV2ZWxTb3VyY2UsXG4gICAgICAgICAgbG93ZXJMZXZlbFNvdXJjZXNcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlW2NoaWxkTmFtZV1bJ2xhYmVsJ10gPVxuICAgICAgICAgIGZpZWxkLmxhYmVsICE9IHVuZGVmaW5lZCA/IGZpZWxkLmxhYmVsIDogbnVsbDtcbiAgICAgICAgdmFsdWVbY2hpbGROYW1lXVsnZGVzY3JpcHRpb24nXSA9XG4gICAgICAgICAgZmllbGQuZGVzY3JpcHRpb24gIT0gdW5kZWZpbmVkID8gZmllbGQuZGVzY3JpcHRpb24gOiBudWxsO1xuICAgICAgICB2YWx1ZVtjaGlsZE5hbWVdWydkZWZhdWx0J10gPSBnZXRWYWx1ZUZyb21Db25maWdTb3VyY2VzKFxuICAgICAgICAgIGxvd2VyTGV2ZWxTb3VyY2VzLFxuICAgICAgICAgIGNoaWxkUGF0aFxuICAgICAgICApO1xuICAgICAgICB2YWx1ZVtjaGlsZE5hbWVdWyd2YWx1ZSddID0gZ2V0VmFsdWVGcm9tQ29uZmlnU291cmNlcyhcbiAgICAgICAgICBbLi4uKGN1cnJlbnRMZXZlbFNvdXJjZSAhPSB1bmRlZmluZWQgPyBbY3VycmVudExldmVsU291cmNlXSA6IFtdKV0sXG4gICAgICAgICAgY2hpbGRQYXRoXG4gICAgICAgICk7XG4gICAgICAgIHZhbHVlW2NoaWxkTmFtZV1bJ292ZXJyaWRlJ10gPSBnZXRWYWx1ZUZyb21Db25maWdTb3VyY2VzKFxuICAgICAgICAgIGhpZ2hlckxldmVsU291cmNlcyxcbiAgICAgICAgICBjaGlsZFBhdGhcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJucyBhIGxpc3Qgb2YgY29uZmlnIHNvdXJjZXMgdXNlZCBieSBub2RlIGNvbmZpZyBwYWNrYWdlLCBvcmRlcmVkIGZyb21cbiAgICogdGhlIGxvd2VzdCB0byB0aGUgaGlnaGVzdCBwcmlvcml0eVxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqIEBwYXJhbSB7SUNvbmZpZ30gY29uZmlnXG4gICAqIEByZXR1cm4gIHtzdHJpbmdbXX1cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGdldE5vZGVDb25maWdMZXZlbHMgPSAoY29uZmlnOiBJQ29uZmlnKTogc3RyaW5nW10gPT4ge1xuICAgIGNvbnN0IGluc3RhbmNlID0gY29uZmlnLnV0aWwuZ2V0RW52KCdOT0RFX0FQUF9JTlNUQU5DRScpO1xuICAgIGxldCBkZXBsb3ltZW50ID0gY29uZmlnLnV0aWwuZ2V0RW52KCdOT0RFX0VOVicpO1xuICAgIGRlcGxveW1lbnQgPSBjb25maWcudXRpbC5nZXRFbnYoJ05PREVfQ09ORklHX0VOVicpO1xuICAgIGNvbnN0IGZ1bGxIb3N0bmFtZSA9IGNvbmZpZy51dGlsLmdldEVudignSE9TVE5BTUUnKTtcbiAgICBjb25zdCBzaG9ydEhvc3RuYW1lID1cbiAgICAgIGZ1bGxIb3N0bmFtZSAhPSB1bmRlZmluZWQgPyBmdWxsSG9zdG5hbWUuc3BsaXQoJy4nKVswXSA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGNvbmZpZ0xldmVscyA9IFtcbiAgICAgICdkZWZhdWx0JyxcbiAgICAgIC4uLihpbnN0YW5jZSAhPSB1bmRlZmluZWQgPyBbYGRlZmF1bHQtJHtpbnN0YW5jZX1gXSA6IFtdKSxcbiAgICAgIC4uLihkZXBsb3ltZW50ICE9IHVuZGVmaW5lZCA/IFtgJHtkZXBsb3ltZW50fWBdIDogW10pLFxuICAgICAgLi4uKGluc3RhbmNlICE9IHVuZGVmaW5lZCAmJiBkZXBsb3ltZW50ICE9IHVuZGVmaW5lZFxuICAgICAgICA/IFtgJHtkZXBsb3ltZW50fS0ke2luc3RhbmNlfWBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKHNob3J0SG9zdG5hbWUgIT0gdW5kZWZpbmVkID8gW2Ake3Nob3J0SG9zdG5hbWV9YF0gOiBbXSksXG4gICAgICAuLi4oc2hvcnRIb3N0bmFtZSAhPSB1bmRlZmluZWQgJiYgaW5zdGFuY2UgIT0gdW5kZWZpbmVkXG4gICAgICAgID8gW2Ake3Nob3J0SG9zdG5hbWV9LSR7aW5zdGFuY2V9YF1cbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4oc2hvcnRIb3N0bmFtZSAhPSB1bmRlZmluZWQgJiYgZGVwbG95bWVudCAhPSB1bmRlZmluZWRcbiAgICAgICAgPyBbYCR7c2hvcnRIb3N0bmFtZX0tJHtkZXBsb3ltZW50fWBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKHNob3J0SG9zdG5hbWUgIT0gdW5kZWZpbmVkICYmXG4gICAgICBkZXBsb3ltZW50ICE9IHVuZGVmaW5lZCAmJlxuICAgICAgaW5zdGFuY2UgIT0gdW5kZWZpbmVkXG4gICAgICAgID8gW2Ake3Nob3J0SG9zdG5hbWV9LSR7ZGVwbG95bWVudH0tJHtpbnN0YW5jZX1gXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLihmdWxsSG9zdG5hbWUgIT0gdW5kZWZpbmVkID8gW2Ake2Z1bGxIb3N0bmFtZX1gXSA6IFtdKSxcbiAgICAgIC4uLihmdWxsSG9zdG5hbWUgIT0gdW5kZWZpbmVkICYmIGluc3RhbmNlICE9IHVuZGVmaW5lZFxuICAgICAgICA/IFtgJHtmdWxsSG9zdG5hbWV9LSR7aW5zdGFuY2V9YF1cbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4oZnVsbEhvc3RuYW1lICE9IHVuZGVmaW5lZCAmJiBkZXBsb3ltZW50ICE9IHVuZGVmaW5lZFxuICAgICAgICA/IFtgJHtmdWxsSG9zdG5hbWV9LSR7ZGVwbG95bWVudH1gXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLihmdWxsSG9zdG5hbWUgIT0gdW5kZWZpbmVkICYmXG4gICAgICBkZXBsb3ltZW50ICE9IHVuZGVmaW5lZCAmJlxuICAgICAgaW5zdGFuY2UgIT0gdW5kZWZpbmVkXG4gICAgICAgID8gW2Ake2Z1bGxIb3N0bmFtZX0tJHtkZXBsb3ltZW50fS0ke2luc3RhbmNlfWBdXG4gICAgICAgIDogW10pLFxuICAgICAgYGxvY2FsYCxcbiAgICAgIC4uLihpbnN0YW5jZSAhPSB1bmRlZmluZWQgPyBbYGxvY2FsLSR7aW5zdGFuY2V9YF0gOiBbXSksXG4gICAgICAuLi4oZGVwbG95bWVudCAhPSB1bmRlZmluZWQgPyBbYGxvY2FsLSR7ZGVwbG95bWVudH1gXSA6IFtdKSxcbiAgICAgIC4uLihkZXBsb3ltZW50ICE9IHVuZGVmaW5lZCAmJiBpbnN0YW5jZSAhPSB1bmRlZmluZWRcbiAgICAgICAgPyBbYGxvY2FsLSR7ZGVwbG95bWVudH0tJHtpbnN0YW5jZX1gXVxuICAgICAgICA6IFtdKSxcbiAgICAgICckTk9ERV9DT05GSUcnLFxuICAgICAgJ2N1c3RvbS1lbnZpcm9ubWVudC12YXJpYWJsZXMnLFxuICAgIF07XG5cbiAgICByZXR1cm4gY29uZmlnTGV2ZWxzO1xuICB9O1xuXG4gIC8qKlxuICAgKiB2YWxpZGF0ZXMgYSBjb25maWcgb2JqZWN0IGFuZCB3cml0ZXMgaXQgdG8gdGhlIG5vZGUtY29uZmlnIGZpbGVcbiAgICogY29ycmVzcG9uZGluZyB0byB0aGUgcGFzc2VkIGxldmVsXG4gICAqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gY29uZmlnT2JqXG4gICAqIEBwYXJhbSB7SUNvbmZpZ30gY29uZmlnXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsZXZlbCBvdXRwdXQgbm9kZS1jb25maWcgZmlsZSBsZXZlbFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm9ybWF0IHRoZSBmb3JtYXQgb2YgdGhlIG91dHB1dCBmaWxlXG4gICAqL1xuICB2YWxpZGF0ZUFuZFdyaXRlQ29uZmlnID0gKFxuICAgIGNvbmZpZ09iajogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBjb25maWc6IElDb25maWcsXG4gICAgbGV2ZWw6IHN0cmluZyxcbiAgICBmb3JtYXQ6IHN0cmluZ1xuICApID0+IHtcbiAgICBjb25zdCBjb25mTGV2ZWxzID0gQ29uZmlnVmFsaWRhdG9yLmdldE5vZGVDb25maWdMZXZlbHMoY29uZmlnKS5maWx0ZXIoXG4gICAgICAobCkgPT4gbCAhPT0gJ2N1c3RvbS1lbnZpcm9ubWVudC12YXJpYWJsZXMnXG4gICAgKTtcbiAgICBjb25zdCBsZXZlbEluZGV4ID0gY29uZkxldmVscy5pbmRleE9mKGxldmVsKTtcbiAgICBpZiAobGV2ZWxJbmRleCA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBbJHtsZXZlbH1dIGxldmVsIG5vdCBmb3VuZCBpbiB0aGUgY3VycmVudCBzeXN0ZW0ncyBjb25maWd1cmF0aW9uIGxldmVsc2BcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnRGlyID1cbiAgICAgIHByb2Nlc3MuZW52WydOT0RFX0NPTkZJR19ESVInXSAhPSB1bmRlZmluZWRcbiAgICAgICAgPyBwcm9jZXNzLmVudlsnTk9ERV9DT05GSUdfRElSJ11cbiAgICAgICAgOiAnLi9jb25maWcnO1xuICAgIGxldCBvdXRwdXQgPSAnJztcbiAgICBsZXQgZXh0ID0gJyc7XG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgJ2pzb24nOiB7XG4gICAgICAgIGNvbnN0IEpzb25CaWdJbnQgPSBKc29uQmlnSW50RmFjdG9yeSh7XG4gICAgICAgICAgYWx3YXlzUGFyc2VBc0JpZzogZmFsc2UsXG4gICAgICAgICAgdXNlTmF0aXZlQmlnSW50OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgb3V0cHV0ID0gSnNvbkJpZ0ludC5zdHJpbmdpZnkoY29uZmlnT2JqKTtcbiAgICAgICAgZXh0ID0gJ2pzb24nO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3lhbWwnOiB7XG4gICAgICAgIG91dHB1dCA9IHlhbWwuZHVtcChjb25maWdPYmopO1xuICAgICAgICBleHQgPSAneWFtbCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgZm9ybWF0OiAke2Zvcm1hdH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXRQYXRoID0gcGF0aC5qb2luKGNvbmZpZ0RpciwgYCR7bGV2ZWx9LiR7ZXh0fWApO1xuICAgIGNvbnN0IGJhY2t1cFBhdGggPSBwYXRoLmpvaW4oY29uZmlnRGlyLCBgJHtsZXZlbH0tYmFja3VwLiR7ZXh0fWApO1xuICAgIGNvbnN0IGNvbmZGaWxlRXhpc3RzID0gZnMuZXhpc3RzU3luYyhvdXRwdXRQYXRoKTtcbiAgICBpZiAoY29uZkZpbGVFeGlzdHMpIHtcbiAgICAgIGZzLnJlbmFtZVN5bmMob3V0cHV0UGF0aCwgYmFja3VwUGF0aCk7XG4gICAgfVxuICAgIGZzLndyaXRlRmlsZVN5bmMob3V0cHV0UGF0aCwgb3V0cHV0KTtcblxuICAgIGNvbnN0IHVwZGF0ZWRDb25mT2JqID0gY29uZmlnLnV0aWwubG9hZEZpbGVDb25maWdzKCk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy52YWxpZGF0ZUNvbmZpZyh1cGRhdGVkQ29uZk9iaik7XG4gICAgICBmcy51bmxpbmtTeW5jKGJhY2t1cFBhdGgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBmcy51bmxpbmtTeW5jKG91dHB1dFBhdGgpO1xuICAgICAgaWYgKGNvbmZGaWxlRXhpc3RzKSB7XG4gICAgICAgIGZzLnJlbmFtZVN5bmMoYmFja3VwUGF0aCwgb3V0cHV0UGF0aCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG59XG4iXX0=
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export * from './config';
2
- //# sourceMappingURL=index.d.ts.map
2
+ //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fieldProperties.d.ts","sourceRoot":"","sources":["../../../lib/schema/Validators/fieldProperties.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAC;AAGzC,eAAO,MAAM,kBAAkB;;sBAEb,MAAM,WAAW,UAAU,eAAe;uBAWzC,MAAM,WAAW,UAAU,eAAe;6BAKpC,MAAM,WAAW,UAAU,eAAe;;;6BAU1C,MAAM,cAAc,UAAU,eAAe;;;0BAuEhD,MAAM,WAAW,UAAU,eAAe;;;uBAa7C,MAAM,UAAU,UAAU,eAAe;;;yBASvC,MAAM,WAAW,UAAU,eAAe;;;yBAY1C,MAAM,YAAY,UAAU,eAAe;;;yBAY3C,MAAM,WAAW,UAAU,eAAe;;;yBAY1C,MAAM,WAAW,UAAU,eAAe;;CAW9D,CAAC;AAEF,eAAO,MAAM,cAAc,UAE1B,CAAC"}
1
+ {"version":3,"file":"fieldProperties.d.ts","sourceRoot":"","sources":["../../../lib/schema/Validators/fieldProperties.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAC;AAGzC,eAAO,MAAM,kBAAkB;;sBAEb,KAAK,CAAC,WAAW,UAAU,eAAe;uBAWzC,KAAK,CAAC,WAAW,UAAU,eAAe;6BAKpC,KAAK,CAAC,WAAW,UAAU,eAAe;;;6BAU1C,KAAK,CAAC,cAAc,UAAU,eAAe;;;0BAuEhD,KAAK,CAAC,WAAW,UAAU,eAAe;;;uBAa7C,KAAK,CAAC,UAAU,UAAU,eAAe;;;yBASvC,KAAK,CAAC,WAAW,UAAU,eAAe;;;yBAY1C,KAAK,CAAC,YAAY,UAAU,eAAe;;;yBAY3C,KAAK,CAAC,WAAW,UAAU,eAAe;;;yBAY1C,KAAK,CAAC,WAAW,UAAU,eAAe;;CAW9D,CAAC;AAEF,eAAO,MAAM,cAAc,UAE1B,CAAC"}