@aws-cdk/integ-runner 2.198.0 → 2.200.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 +36 -0
- package/THIRD_PARTY_LICENSES +60 -60
- package/lib/cli.d.ts +2 -0
- package/lib/cli.d.ts.map +1 -1
- package/lib/cli.js +17 -1
- package/lib/engines/cdk-interface.d.ts +12 -2
- package/lib/engines/cdk-interface.d.ts.map +1 -1
- package/lib/engines/cdk-interface.js +1 -1
- package/lib/engines/toolkit-lib.d.ts +2 -2
- package/lib/engines/toolkit-lib.d.ts.map +1 -1
- package/lib/engines/toolkit-lib.js +5 -2
- package/lib/index.js +29 -7
- package/lib/runner/integ-test-runner.d.ts +26 -0
- package/lib/runner/integ-test-runner.d.ts.map +1 -1
- package/lib/runner/integ-test-runner.js +93 -24
- package/lib/workers/common.d.ts +16 -0
- package/lib/workers/common.d.ts.map +1 -1
- package/lib/workers/common.js +1 -1
- package/lib/workers/extract/extract_worker.d.ts.map +1 -1
- package/lib/workers/extract/extract_worker.js +3 -1
- package/lib/workers/extract/index.js +122746 -116569
- package/lib/workers/integ-test-worker.d.ts.map +1 -1
- package/lib/workers/integ-test-worker.js +3 -1
- package/package.json +14 -14
package/lib/cli.js
CHANGED
|
@@ -57,6 +57,8 @@ function parseCliArgs(args = []) {
|
|
|
57
57
|
.option('ca-bundle-path', { type: 'string', desc: 'Path to CA certificate to use when validating HTTPS requests. Will read from AWS_CA_BUNDLE environment variable if not specified', requiresArg: true })
|
|
58
58
|
.option('unstable', { type: 'array', desc: `Opt-in to using unstable features. By using these flags you acknowledge that scope and API of unstable features may change without notice. Specify multiple times for each unstable feature you want to opt-in to. ${(0, unstable_features_1.availableFeaturesDescription)()}`, nargs: 1, default: [] })
|
|
59
59
|
.option('role-arn', { type: 'string', desc: 'ARN of the IAM role for CloudFormation to assume during deploy/destroy', requiresArg: true })
|
|
60
|
+
.option('allow-delete-failures', { type: 'boolean', default: false, desc: 'Do not fail the test when resources fail to delete during a stack update' })
|
|
61
|
+
.option('update-from-tags', { type: 'string', desc: 'Deploy snapshots from the given git tags in sequence before deploying the current code. Implies --force. Only works if snapshots are region-agnostic.', requiresArg: true })
|
|
60
62
|
.strict()
|
|
61
63
|
.parse(args);
|
|
62
64
|
const tests = argv._;
|
|
@@ -87,6 +89,12 @@ function parseCliArgs(args = []) {
|
|
|
87
89
|
throw new Error('--disable-update-workflow and --[no-]update-workflow cannot be used together');
|
|
88
90
|
}
|
|
89
91
|
let updateWorkflow = argv['update-workflow'] !== undefined ? !!argv['update-workflow'] : !argv['disable-update-workflow'];
|
|
92
|
+
const updateFromTags = argv['update-from-tags']
|
|
93
|
+
? argv['update-from-tags'].split(',').map((t) => t.trim())
|
|
94
|
+
: undefined;
|
|
95
|
+
if (updateFromTags && argv['update-workflow'] === false) {
|
|
96
|
+
throw new Error('--update-from-tags and --no-update-workflow cannot be used together');
|
|
97
|
+
}
|
|
90
98
|
return {
|
|
91
99
|
tests: requestedTests,
|
|
92
100
|
app: argv.app,
|
|
@@ -114,6 +122,8 @@ function parseCliArgs(args = []) {
|
|
|
114
122
|
proxy: argv.proxy,
|
|
115
123
|
caBundlePath: argv['ca-bundle-path'],
|
|
116
124
|
roleArn: argv['role-arn'],
|
|
125
|
+
allowDeleteFailures: argv['allow-delete-failures'],
|
|
126
|
+
updateFromTags,
|
|
117
127
|
};
|
|
118
128
|
}
|
|
119
129
|
async function main(args) {
|
|
@@ -129,6 +139,10 @@ async function main(args) {
|
|
|
129
139
|
}
|
|
130
140
|
}
|
|
131
141
|
async function run(options) {
|
|
142
|
+
// --update-from-tags implies --force (always deploy all matched tests)
|
|
143
|
+
if (options.updateFromTags) {
|
|
144
|
+
options.force = true;
|
|
145
|
+
}
|
|
132
146
|
const testsFromArgs = await new integration_tests_1.IntegrationTests(path.resolve(options.directory)).fromCliOptions(options);
|
|
133
147
|
// List only prints the discovered tests
|
|
134
148
|
if (options.list) {
|
|
@@ -186,10 +200,12 @@ async function run(options) {
|
|
|
186
200
|
dryRun: options.dryRun,
|
|
187
201
|
verbosity: options.verbosity,
|
|
188
202
|
updateWorkflow: options.updateWorkflow,
|
|
203
|
+
updateFromTags: options.updateFromTags,
|
|
189
204
|
watch: options.watch,
|
|
190
205
|
proxy: options.proxy,
|
|
191
206
|
caBundlePath: options.caBundlePath,
|
|
192
207
|
roleArn: options.roleArn,
|
|
208
|
+
allowDeleteFailures: options.allowDeleteFailures,
|
|
193
209
|
});
|
|
194
210
|
testsSucceeded = success;
|
|
195
211
|
if (options.clean === false) {
|
|
@@ -316,4 +332,4 @@ function configFromFile(fileName) {
|
|
|
316
332
|
function splitByComma(xs) {
|
|
317
333
|
return xs.flatMap(x => x.split(',')).map(x => x.trim());
|
|
318
334
|
}
|
|
319
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa0JBLG9DQTBHQztBQUVELG9CQVlDO0FBeUxELGtCQUlDO0FBdlVELGdGQUFnRjtBQUNoRix5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLCtCQUErQjtBQUMvQix5Q0FBeUM7QUFDekMsbUNBQW1DO0FBRW5DLGtFQUE4RDtBQUM5RCwyREFBNEY7QUFFNUYsdUNBQWtFO0FBQ2xFLHFFQUFvRTtBQUVwRSw2Q0FBNkM7QUFDN0MsK0NBQStDO0FBQy9DLGlFQUFpRTtBQUNqRSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFL0IsU0FBZ0IsWUFBWSxDQUFDLE9BQWlCLEVBQUU7SUFDOUMsTUFBTSxJQUFJLEdBQUcsS0FBSztTQUNmLEtBQUssQ0FBQywrQkFBK0IsQ0FBQztTQUN0QyxNQUFNLENBQUMsUUFBUSxFQUFFO1FBQ2hCLE1BQU0sRUFBRSxJQUFJO1FBQ1osWUFBWSxFQUFFLGNBQWM7UUFDNUIsT0FBTyxFQUFFLG1CQUFtQjtRQUM1QixJQUFJLEVBQUUseUZBQXlGO0tBQ2hHLENBQUM7U0FDRCxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxtQ0FBbUMsRUFBRSxDQUFDO1NBQy9GLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLG9DQUFvQyxFQUFFLENBQUM7U0FDL0YsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsOEVBQThFLEVBQUUsQ0FBQztTQUN6SSxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFP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Q0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLFlBQVksQ0FBQyxFQUFZO0lBQ2hDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUMxRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRXhlcmNpc2UgYWxsIGludGVnIHN0YWNrcyBhbmQgaWYgdGhleSBkZXBsb3ksIHVwZGF0ZSB0aGUgZXhwZWN0ZWQgc3ludGggZmlsZXNcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgKiBhcyB3b3JrZXJwb29sIGZyb20gJ3dvcmtlcnBvb2wnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB0eXBlIHsgSW50ZWdUZXN0LCBJbnRlZ1Rlc3RJbmZvIH0gZnJvbSAnLi9ydW5uZXIvaW50ZWdyYXRpb24tdGVzdHMnO1xuaW1wb3J0IHsgSW50ZWdyYXRpb25UZXN0cyB9IGZyb20gJy4vcnVubmVyL2ludGVncmF0aW9uLXRlc3RzJztcbmltcG9ydCB7IHByb2Nlc3NVbnN0YWJsZUZlYXR1cmVzLCBhdmFpbGFibGVGZWF0dXJlc0Rlc2NyaXB0aW9uIH0gZnJvbSAnLi91bnN0YWJsZS1mZWF0dXJlcyc7XG5pbXBvcnQgdHlwZSB7IEludGVnUnVubmVyTWV0cmljcywgSW50ZWdUZXN0V29ya2VyQ29uZmlnLCBEZXN0cnVjdGl2ZUNoYW5nZSB9IGZyb20gJy4vd29ya2Vycyc7XG5pbXBvcnQgeyBydW5TbmFwc2hvdFRlc3RzLCBydW5JbnRlZ3JhdGlvblRlc3RzIH0gZnJvbSAnLi93b3JrZXJzJztcbmltcG9ydCB7IHdhdGNoSW50ZWdyYXRpb25UZXN0IH0gZnJvbSAnLi93b3JrZXJzL2ludGVnLXdhdGNoLXdvcmtlcic7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS95YXJncy95YXJncy9pc3N1ZXMvMTkyOVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2VzYnVpbGQvaXNzdWVzLzE0OTJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5jb25zdCB5YXJncyA9IHJlcXVpcmUoJ3lhcmdzJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNsaUFyZ3MoYXJnczogc3RyaW5nW10gPSBbXSkge1xuICBjb25zdCBhcmd2ID0geWFyZ3NcbiAgICAudXNhZ2UoJ1VzYWdlOiBpbnRlZy1ydW5uZXIgW1RFU1QuLi5dJylcbiAgICAub3B0aW9uKCdjb25maWcnLCB7XG4gICAgICBjb25maWc6IHRydWUsXG4gICAgICBjb25maWdQYXJzZXI6IGNvbmZpZ0Zyb21GaWxlLFxuICAgICAgZGVmYXVsdDogJ2ludGVnLmNvbmZpZy5qc29uJyxcbiAgICAgIGRlc2M6ICdMb2FkIG9wdGlvbnMgZnJvbSBhIEpTT04gY29uZmlnIGZpbGUuIE9wdGlvbnMgcHJvdmlkZWQgYXMgQ0xJIGFyZ3VtZW50cyB0YWtlIHByZWNlZGVudC4nLFxuICAgIH0pXG4gICAgLm9wdGlvbignd2F0Y2gnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdQZXJmb3JtIGludGVnIHRlc3RzIGluIHdhdGNoIG1vZGUnIH0pXG4gICAgLm9wdGlvbignbGlzdCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ0xpc3QgdGVzdHMgaW5zdGVhZCBvZiBydW5uaW5nIHRoZW0nIH0pXG4gICAgLm9wdGlvbignY2xlYW4nLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogdHJ1ZSwgZGVzYzogJ0NsZWFuIHVwIGFuZCBkZWxldGUgc3RhY2sgYWZ0ZXIgdGVzdCBpcyBjb21wbGV0ZWQgKHVzZSAtLW5vLWNsZWFuIHRvIG5lZ2F0ZSknIH0pXG4gICAgLm9wdGlvbigndmVyYm9zZScsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgYWxpYXM6ICd2JywgY291bnQ6IHRydWUsIGRlc2M6ICdWZXJib3NlIGxvZ3MgYW5kIG1ldHJpY3Mgb24gaW50ZWdyYXRpb24gdGVzdHMgZHVyYXRpb25zIChzcGVjaWZ5IG11bHRpcGxlIHRpbWVzIHRvIGluY3JlYXNlIHZlcmJvc2l0eSknIH0pXG4gICAgLm9wdGlvbignZHJ5LXJ1bicsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ2RvIG5vdCBhY3R1YWxseSBkZXBsb3kgdGhlIHN0YWNrLiBqdXN0IHVwZGF0ZSB0aGUgc25hcHNob3QgKG5vdCByZWNvbW1lbmRlZCEpJyB9KVxuICAgIC5vcHRpb24oJ3VwZGF0ZS1vbi1mYWlsZWQnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdyZXJ1biBpbnRlZ3JhdGlvbiB0ZXN0cyBhbmQgdXBkYXRlIHNuYXBzaG90cyBmb3IgZmFpbGVkIHRlc3RzLicgfSlcbiAgICAub3B0aW9uKCdmb3JjZScsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ1JlcnVuIGFsbCBpbnRlZ3JhdGlvbiB0ZXN0cyBldmVuIGlmIHRlc3RzIGFyZSBwYXNzaW5nJyB9KVxuICAgIC5vcHRpb24oJ3BhcmFsbGVsLXJlZ2lvbnMnLCB7IHR5cGU6ICdhcnJheScsIGRlc2M6ICdUZXN0cyBhcmUgcnVuIGluIHBhcmFsbGVsIGFjcm9zcyB0aGVzZSByZWdpb25zLiBUbyBwcmV2ZW50IHRlc3RzIGZyb20gcnVubmluZyBpbiBwYXJhbGxlbCwgcHJvdmlkZSBvbmx5IGEgc2luZ2xlIHJlZ2lvbicsIGRlZmF1bHQ6IFtdLCBjb2VyY2U6IHNwbGl0QnlDb21tYSB9KVxuICAgIC5vcHRpb25zKCdkaXJlY3RvcnknLCB7IHR5cGU6ICdzdHJpbmcnLCBkZWZhdWx0OiAndGVzdCcsIGRlc2M6ICdzdGFydGluZyBkaXJlY3RvcnkgdG8gZGlzY292ZXIgaW50ZWdyYXRpb24gdGVzdHMuIFRlc3RzIHdpbGwgYmUgZGlzY292ZXJlZCByZWN1cnNpdmVseSBmcm9tIHRoaXMgZGlyZWN0b3J5JyB9KVxuICAgIC5vcHRpb25zKCdwcm9maWxlcycsIHsgdHlwZTogJ2FycmF5JywgZGVzYzogJ2xpc3Qgb2YgQVdTIHByb2ZpbGVzIHRvIHVzZS4gVGVzdHMgd2lsbCBiZSBydW4gaW4gcGFyYWxsZWwgYWNyb3NzIGVhY2ggcHJvZmlsZStyZWdpb25zJywgZGVmYXVsdDogW10sIGNvZXJjZTogc3BsaXRCeUNvbW1hIH0pXG4gICAgLm9wdGlvbnMoJ21heC13b3JrZXJzJywgeyB0eXBlOiAnbnVtYmVyJywgZGVzYzogJ1RoZSBtYXggbnVtYmVyIG9mIHdvcmtlcnBvb2wgd29ya2VycyB0byB1c2Ugd2hlbiBydW5uaW5nIGludGVncmF0aW9uIHRlc3RzIGluIHBhcmFsbGVsJywgZGVmYXVsdDogMTYgfSlcbiAgICAub3B0aW9ucygnZXhjbHVkZScsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZXNjOiAnUnVuIGFsbCB0ZXN0cyBpbiB0aGUgZGlyZWN0b3J5LCBleGNlcHQgdGhlIHNwZWNpZmllZCBURVNUcycsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgLm9wdGlvbignc3RyaWN0JywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAnRmFpbCBpZiBhbnkgc3BlY2lmaWVkIHRlc3RzIGFyZSBub3QgZm91bmQnIH0pXG4gICAgLm9wdGlvbnMoJ2Zyb20tZmlsZScsIHsgdHlwZTogJ3N0cmluZycsIGRlc2M6ICdSZWFkIFRFU1QgbmFtZXMgZnJvbSBhIGZpbGUgKG9uZSBURVNUIHBlciBsaW5lKScgfSlcbiAgICAub3B0aW9uKCdpbnNwZWN0LWZhaWx1cmVzJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlc2M6ICdLZWVwIHRoZSBpbnRlZyB0ZXN0IGNsb3VkIGFzc2VtYmx5IGlmIGEgZmFpbHVyZSBvY2N1cnMgZm9yIGluc3BlY3Rpb24nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgIC5vcHRpb24oJ2Rpc2FibGUtdXBkYXRlLXdvcmtmbG93JywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IHVuZGVmaW5lZCwgZGVzYzogJ0RFUFJFQ0FURUQsIHVzZSAtLVtub10tdXBkYXRlLXdvcmtmbG93IGluc3RlYWQnIH0pXG4gICAgLm9wdGlvbigndXBkYXRlLXdvcmtmbG93JywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IHVuZGVmaW5lZCwgZGVzYzogJ0RlcGxveXMgdGhlIGNvbW1pdHRlZCBzbmFwc2hvdCBiZWZvcmUgdGhlIHVwZGF0ZWQgYXBwbGljYXRpb24uIE9ubHkgd29ya3MgaWYgc25hcHNob3RzIGFyZSByZWdpb24tYWdub3N0aWMuJyB9KVxuICAgIC5vcHRpb24oJ2xhbmd1YWdlJywge1xuICAgICAgYWxpYXM6ICdsJyxcbiAgICAgIGRlZmF1bHQ6IFsnamF2YXNjcmlwdCcsICd0eXBlc2NyaXB0JywgJ3B5dGhvbicsICdnbyddLFxuICAgICAgY2hvaWNlczogWydqYXZhc2NyaXB0JywgJ3R5cGVzY3JpcHQnLCAncHl0aG9uJywgJ2dvJ10sXG4gICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgbmFyZ3M6IDEsXG4gICAgICBkZXNjOiAnVXNlIHRoZXNlIHByZXNldHMgdG8gcnVuIGludGVncmF0aW9uIHRlc3RzIGZvciB0aGUgc2VsZWN0ZWQgbGFuZ3VhZ2VzJyxcbiAgICB9KVxuICAgIC5vcHRpb24oJ2FwcCcsIHsgdHlwZTogJ3N0cmluZycsIGRlZmF1bHQ6IHVuZGVmaW5lZCwgZGVzYzogJ1RoZSBjdXN0b20gQ0xJIGNvbW1hbmQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcnVuIHRoZSB0ZXN0IGZpbGVzLiBZb3UgY2FuIGluY2x1ZGUge2ZpbGVQYXRofSB0byBzcGVjaWZ5IHdoZXJlIGluIHRoZSBjb21tYW5kIHRoZSB0ZXN0IGZpbGUgcGF0aCBzaG91bGQgYmUgaW5zZXJ0ZWQuIEV4YW1wbGU6IC0tYXBwPVwicHl0aG9uMy44IHtmaWxlUGF0aH1cIi4nIH0pXG4gICAgLm9wdGlvbigndGVzdC1yZWdleCcsIHsgdHlwZTogJ2FycmF5JywgZGVzYzogJ0RldGVjdCBpbnRlZ3JhdGlvbiB0ZXN0IGZpbGVzIG1hdGNoaW5nIHRoaXMgSmF2YVNjcmlwdCByZWdleCBwYXR0ZXJuLiBJZiB1c2VkIG11bHRpcGxlIHRpbWVzLCBhbGwgZmlsZXMgbWF0Y2hpbmcgYW55IG9uZSBvZiB0aGUgcGF0dGVybnMgYXJlIGRldGVjdGVkLicsIGRlZmF1bHQ6IFtdIH0pXG4gICAgLm9wdGlvbigncHJveHknLCB7IHR5cGU6ICdzdHJpbmcnLCBkZXNjOiAnVXNlIHRoZSBpbmRpY2F0ZWQgcHJveHkuIFdpbGwgcmVhZCBmcm9tIEhUVFBTX1BST1hZIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIG5vdCBzcGVjaWZpZWQnLCByZXF1aXJlc0FyZzogdHJ1ZSB9KVxuICAgIC5vcHRpb24oJ2NhLWJ1bmRsZS1wYXRoJywgeyB0eXBlOiAnc3RyaW5nJywgZGVzYzogJ1BhdGggdG8gQ0EgY2VydGlmaWNhdGUgdG8gdXNlIHdoZW4gdmFsaWRhdGluZyBIVFRQUyByZXF1ZXN0cy4gV2lsbCByZWFkIGZyb20gQVdTX0NBX0JVTkRMRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiBub3Qgc3BlY2lmaWVkJywgcmVxdWlyZXNBcmc6IHRydWUgfSlcbiAgICAub3B0aW9uKCd1bnN0YWJsZScsIHsgdHlwZTogJ2FycmF5JywgZGVzYzogYE9wdC1pbiB0byB1c2luZyB1bnN0YWJsZSBmZWF0dXJlcy4gQnkgdXNpbmcgdGhlc2UgZmxhZ3MgeW91IGFja25vd2xlZGdlIHRoYXQgc2NvcGUgYW5kIEFQSSBvZiB1bnN0YWJsZSBmZWF0dXJlcyBtYXkgY2hhbmdlIHdpdGhvdXQgbm90aWNlLiBTcGVjaWZ5IG11bHRpcGxlIHRpbWVzIGZvciBlYWNoIHVuc3RhYmxlIGZlYXR1cmUgeW91IHdhbnQgdG8gb3B0LWluIHRvLiAke2F2YWlsYWJsZUZlYXR1cmVzRGVzY3JpcHRpb24oKX1gLCBuYXJnczogMSwgZGVmYXVsdDogW10gfSlcbiAgICAub3B0aW9uKCdyb2xlLWFybicsIHsgdHlwZTogJ3N0cmluZycsIGRlc2M6ICdBUk4gb2YgdGhlIElBTSByb2xlIGZvciBDbG91ZEZvcm1hdGlvbiB0byBhc3N1bWUgZHVyaW5nIGRlcGxveS9kZXN0cm95JywgcmVxdWlyZXNBcmc6IHRydWUgfSlcbiAgICAuc3RyaWN0KClcbiAgICAucGFyc2UoYXJncyk7XG5cbiAgY29uc3QgdGVzdHM6IHN0cmluZ1tdID0gYXJndi5fO1xuICBjb25zdCBwYXJhbGxlbFJlZ2lvbnMgPSBhcnJheUZyb21ZYXJncyhhcmd2WydwYXJhbGxlbC1yZWdpb25zJ10pO1xuICBjb25zdCB0ZXN0UmVnaW9uczogc3RyaW5nW10gPSBwYXJhbGxlbFJlZ2lvbnMgPz8gWyd1cy1lYXN0LTEnLCAndXMtZWFzdC0yJywgJ3VzLXdlc3QtMiddO1xuICBjb25zdCBwcm9maWxlcyA9IGFycmF5RnJvbVlhcmdzKGFyZ3YucHJvZmlsZXMpO1xuICBjb25zdCBmcm9tRmlsZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gYXJndlsnZnJvbS1maWxlJ107XG4gIGNvbnN0IG1heFdvcmtlcnM6IG51bWJlciA9IGFyZ3ZbJ21heC13b3JrZXJzJ107XG4gIGNvbnN0IHZlcmJvc2l0eTogbnVtYmVyID0gYXJndi52ZXJib3NlO1xuICBjb25zdCB2ZXJib3NlOiBib29sZWFuID0gdmVyYm9zaXR5ID49IDE7XG5cbiAgY29uc3QgbnVtVGVzdHMgPSB0ZXN0UmVnaW9ucy5sZW5ndGggKiAocHJvZmlsZXMgPz8gWzFdKS5sZW5ndGg7XG4gIGlmIChtYXhXb3JrZXJzIDwgbnVtVGVzdHMpIHtcbiAgICBsb2dnZXIud2FybmluZygnWW91IGFyZSBhdHRlbXB0aW5nIHRvIHJ1biAlcyB0ZXN0cyBpbiBwYXJhbGxlbCwgYnV0IG9ubHkgaGF2ZSAlcyB3b3JrZXJzLiBOb3QgYWxsIG9mIHlvdXIgcHJvZmlsZXMrcmVnaW9ucyB3aWxsIGJlIHV0aWxpemVkJywgbnVtVGVzdHMsIG1heFdvcmtlcnMpO1xuICB9XG5cbiAgaWYgKHRlc3RzLmxlbmd0aCA+IDAgJiYgZnJvbUZpbGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgbGlzdCBvZiB0ZXN0cyBjYW5ub3QgYmUgcHJvdmlkZWQgaWYgXCItLWZyb20tZmlsZVwiIGlzIHByb3ZpZGVkJyk7XG4gIH1cblxuICBpZiAoYXJndi5zdHJpY3QgJiYgYXJndi5leGNsdWRlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgdXNlIC0tc3RyaWN0IHdpdGggLS1leGNsdWRlJyk7XG4gIH1cblxuICBjb25zdCByZXF1ZXN0ZWRUZXN0cyA9IGZyb21GaWxlXG4gICAgPyAoZnMucmVhZEZpbGVTeW5jKGZyb21GaWxlLCB7IGVuY29kaW5nOiAndXRmOCcgfSkpXG4gICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAuZmlsdGVyKHggPT4geClcbiAgICAgIC5maWx0ZXIoeCA9PiAheC5zdGFydHNXaXRoKCcjJykpXG4gICAgOiAodGVzdHMubGVuZ3RoID4gMCA/IHRlc3RzIDogdW5kZWZpbmVkKTsgLy8gJ3VuZGVmaW5lZCcgbWVhbnMgbm8gcmVxdWVzdFxuXG4gIGlmIChhcmd2WydkaXNhYmxlLXVwZGF0ZS13b3JrZmxvdyddICE9PSB1bmRlZmluZWQgJiYgYXJndlsndXBkYXRlLXdvcmtmbG93J10gIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignLS1kaXNhYmxlLXVwZGF0ZS13b3JrZmxvdyBhbmQgLS1bbm8tXXVwZGF0ZS13b3JrZmxvdyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlcicpO1xuICB9XG5cbiAgbGV0IHVwZGF0ZVdvcmtmbG93ID0gYXJndlsndXBkYXRlLXdvcmtmbG93J10gIT09IHVuZGVmaW5lZCA/ICEhYXJndlsndXBkYXRlLXdvcmtmbG93J10gOiAhYXJndlsnZGlzYWJsZS11cGRhdGUtd29ya2Zsb3cnXTtcblxuICByZXR1cm4ge1xuICAgIHRlc3RzOiByZXF1ZXN0ZWRUZXN0cyxcbiAgICBhcHA6IGFyZ3YuYXBwIGFzIChzdHJpbmcgfCB1bmRlZmluZWQpLFxuICAgIHRlc3RSZWdleDogYXJyYXlGcm9tWWFyZ3MoYXJndlsndGVzdC1yZWdleCddKSxcbiAgICB0ZXN0UmVnaW9ucyxcbiAgICBvcmlnaW5hbFJlZ2lvbnM6IHBhcmFsbGVsUmVnaW9ucyxcbiAgICBwcm9maWxlcyxcbiAgICBydW5VcGRhdGVPbkZhaWxlZDogKGFyZ3ZbJ3VwZGF0ZS1vbi1mYWlsZWQnXSA/PyBmYWxzZSkgYXMgYm9vbGVhbixcbiAgICBmcm9tRmlsZSxcbiAgICBleGNsdWRlOiBhcmd2LmV4Y2x1ZGUgYXMgYm9vbGVhbixcbiAgICBtYXhXb3JrZXJzLFxuICAgIGxpc3Q6IGFyZ3YubGlzdCBhcyBib29sZWFuLFxuICAgIGRpcmVjdG9yeTogYXJndi5kaXJlY3RvcnkgYXMgc3RyaW5nLFxuICAgIGluc3BlY3RGYWlsdXJlczogYXJndlsnaW5zcGVjdC1mYWlsdXJlcyddIGFzIGJvb2xlYW4sXG4gICAgdmVyYm9zaXR5LFxuICAgIHZlcmJvc2UsXG4gICAgY2xlYW46IGFyZ3YuY2xlYW4gYXMgYm9vbGVhbixcbiAgICBmb3JjZTogYXJndi5mb3JjZSBhcyBib29sZWFuLFxuICAgIGRyeVJ1bjogYXJndlsnZHJ5LXJ1biddIGFzIGJvb2xlYW4sXG4gICAgdXBkYXRlV29ya2Zsb3csXG4gICAgbGFuZ3VhZ2U6IGFycmF5RnJvbVlhcmdzKGFyZ3YubGFuZ3VhZ2UpLFxuICAgIHdhdGNoOiBhcmd2LndhdGNoIGFzIGJvb2xlYW4sXG4gICAgc3RyaWN0OiBhcmd2LnN0cmljdCBhcyBib29sZWFuLFxuICAgIHVuc3RhYmxlOiBhcnJheUZyb21ZYXJncyhhcmd2LnVuc3RhYmxlKSA/PyBbXSxcbiAgICBwcm94eTogYXJndi5wcm94eSBhcyAoc3RyaW5nIHwgdW5kZWZpbmVkKSxcbiAgICBjYUJ1bmRsZVBhdGg6IGFyZ3ZbJ2NhLWJ1bmRsZS1wYXRoJ10gYXMgKHN0cmluZyB8IHVuZGVmaW5lZCksXG4gICAgcm9sZUFybjogYXJndlsncm9sZS1hcm4nXSBhcyAoc3RyaW5nIHwgdW5kZWZpbmVkKSxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4oYXJnczogc3RyaW5nW10pIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBvcHRpb25zID0gcGFyc2VDbGlBcmdzKGFyZ3MpO1xuXG4gICAgLy8gUHJvY2VzcyB1bnN0YWJsZSBmZWF0dXJlcyBhbmQgZW1pdCBhcHByb3ByaWF0ZSB3YXJuaW5nc1xuICAgIG9wdGlvbnMudW5zdGFibGUgPSBwcm9jZXNzVW5zdGFibGVGZWF0dXJlcyhvcHRpb25zLnVuc3RhYmxlKTtcblxuICAgIGF3YWl0IHJ1bihvcHRpb25zKTtcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBsb2dnZXIuZXJyb3IoZXJyKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuKG9wdGlvbnM6IFJldHVyblR5cGU8dHlwZW9mIHBhcnNlQ2xpQXJncz4pIHtcbiAgY29uc3QgdGVzdHNGcm9tQXJncyA9IGF3YWl0IG5ldyBJbnRlZ3JhdGlvblRlc3RzKHBhdGgucmVzb2x2ZShvcHRpb25zLmRpcmVjdG9yeSkpLmZyb21DbGlPcHRpb25zKG9wdGlvbnMpO1xuXG4gIC8vIExpc3Qgb25seSBwcmludHMgdGhlIGRpc2NvdmVyZWQgdGVzdHNcbiAgaWYgKG9wdGlvbnMubGlzdCkge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHRlc3RzRnJvbUFyZ3MubWFwKHQgPT4gdC5kaXNjb3ZlcnlSZWxhdGl2ZUZpbGVOYW1lKS5qb2luKCdcXG4nKSArICdcXG4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwb29sID0gd29ya2VycG9vbC5wb29sKHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICdsaWInLCAnd29ya2VycycsICdleHRyYWN0JywgJ2luZGV4LmpzJyksIHtcbiAgICBtYXhXb3JrZXJzOiBvcHRpb25zLndhdGNoID8gMSA6IG9wdGlvbnMubWF4V29ya2VycyxcbiAgfSk7XG5cbiAgY29uc3QgdGVzdHNUb1J1bjogSW50ZWdUZXN0V29ya2VyQ29uZmlnW10gPSBbXTtcbiAgbGV0IGRlc3RydWN0aXZlQ2hhbmdlczogYm9vbGVhbiA9IGZhbHNlO1xuICBsZXQgZmFpbGVkU25hcHNob3RzOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSA9IFtdO1xuICBsZXQgdGVzdHNTdWNjZWVkZWQgPSBmYWxzZTtcbiAgdmFsaWRhdGVXYXRjaEFyZ3Moe1xuICAgIC4uLm9wdGlvbnMsXG4gICAgdGVzdFJlZ2lvbnM6IG9wdGlvbnMub3JpZ2luYWxSZWdpb25zLFxuICAgIHRlc3RzOiB0ZXN0c0Zyb21BcmdzLFxuICB9KTtcblxuICB0cnkge1xuICAgIGlmICghb3B0aW9ucy53YXRjaCkge1xuICAgICAgLy8gYWx3YXlzIHJ1biBzbmFwc2hvdCB0ZXN0cywgYnV0IGlmICctLWZvcmNlJyBpcyBwYXNzZWQgdGhlblxuICAgICAgLy8gcnVuIGludGVncmF0aW9uIHRlc3RzIG9uIGFsbCBmYWlsZWQgdGVzdHMsIG5vdCBqdXN0IHRob3NlIHRoYXRcbiAgICAgIC8vIGZhaWxlZCBzbmFwc2hvdCB0ZXN0c1xuICAgICAgZmFpbGVkU25hcHNob3RzID0gYXdhaXQgcnVuU25hcHNob3RUZXN0cyhwb29sLCB0ZXN0c0Zyb21BcmdzLCB7XG4gICAgICAgIHJldGFpbjogb3B0aW9ucy5pbnNwZWN0RmFpbHVyZXMsXG4gICAgICAgIHZlcmJvc2U6IG9wdGlvbnMudmVyYm9zZSxcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCBmYWlsdXJlIG9mIGZhaWxlZFNuYXBzaG90cykge1xuICAgICAgICBsb2dnZXIud2FybmluZyhgRmFpbGVkOiAke2ZhaWx1cmUuZmlsZU5hbWV9YCk7XG4gICAgICAgIGlmIChmYWlsdXJlLmRlc3RydWN0aXZlQ2hhbmdlcyAmJiBmYWlsdXJlLmRlc3RydWN0aXZlQ2hhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcHJpbnREZXN0cnVjdGl2ZUNoYW5nZXMoZmFpbHVyZS5kZXN0cnVjdGl2ZUNoYW5nZXMpO1xuICAgICAgICAgIGRlc3RydWN0aXZlQ2hhbmdlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghb3B0aW9ucy5mb3JjZSkge1xuICAgICAgICB0ZXN0c1RvUnVuLnB1c2goLi4uZmFpbGVkU25hcHNob3RzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGlmIGFueSBvZiB0aGUgdGVzdCBmYWlsZWQgc25hcHNob3QgdGVzdHMsIGtlZXAgdGhvc2UgcmVzdWx0c1xuICAgICAgICAvLyBhbmQgbWVyZ2Ugd2l0aCB0aGUgcmVzdCBvZiB0aGUgdGVzdHMgZnJvbSBhcmdzXG4gICAgICAgIHRlc3RzVG9SdW4ucHVzaCguLi5tZXJnZVRlc3RzKHRlc3RzRnJvbUFyZ3MubWFwKHQgPT4gdC5pbmZvKSwgZmFpbGVkU25hcHNob3RzKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRlc3RzVG9SdW4ucHVzaCguLi50ZXN0c0Zyb21BcmdzLm1hcCh0ID0+IHQuaW5mbykpO1xuICAgIH1cblxuICAgIC8vIHJ1biBpbnRlZ3JhdGlvbiB0ZXN0cyBpZiBgLS11cGRhdGUtb24tZmFpbGVkYCBPUiBgLS1mb3JjZWAgaXMgdXNlZFxuICAgIGlmIChvcHRpb25zLnJ1blVwZGF0ZU9uRmFpbGVkIHx8IG9wdGlvbnMuZm9yY2UpIHtcbiAgICAgIGNvbnN0IHsgc3VjY2VzcywgbWV0cmljcyB9ID0gYXdhaXQgcnVuSW50ZWdyYXRpb25UZXN0cyh7XG4gICAgICAgIHBvb2wsXG4gICAgICAgIHRlc3RzOiB0ZXN0c1RvUnVuLFxuICAgICAgICByZWdpb25zOiBvcHRpb25zLnRlc3RSZWdpb25zLFxuICAgICAgICBwcm9maWxlczogb3B0aW9ucy5wcm9maWxlcyxcbiAgICAgICAgY2xlYW46IG9wdGlvbnMuY2xlYW4sXG4gICAgICAgIGRyeVJ1bjogb3B0aW9ucy5kcnlSdW4sXG4gICAgICAgIHZlcmJvc2l0eTogb3B0aW9ucy52ZXJib3NpdHksXG4gICAgICAgIHVwZGF0ZVdvcmtmbG93OiBvcHRpb25zLnVwZGF0ZVdvcmtmbG93LFxuICAgICAgICB3YXRjaDogb3B0aW9ucy53YXRjaCxcbiAgICAgICAgcHJveHk6IG9wdGlvbnMucHJveHksXG4gICAgICAgIGNhQnVuZGxlUGF0aDogb3B0aW9ucy5jYUJ1bmRsZVBhdGgsXG4gICAgICAgIHJvbGVBcm46IG9wdGlvbnMucm9sZUFybixcbiAgICAgIH0pO1xuICAgICAgdGVzdHNTdWNjZWVkZWQgPSBzdWNjZXNzO1xuXG4gICAgICBpZiAob3B0aW9ucy5jbGVhbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ05vdCBjbGVhbmluZyB1cCBzdGFja3Mgc2luY2UgXCItLW5vLWNsZWFuXCIgd2FzIHVzZWQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKEJvb2xlYW4ob3B0aW9ucy52ZXJib3NlKSkge1xuICAgICAgICBwcmludE1ldHJpY3MobWV0cmljcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NvbWUgaW50ZWdyYXRpb24gdGVzdHMgZmFpbGVkIScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy53YXRjaCkge1xuICAgICAgYXdhaXQgd2F0Y2hJbnRlZ3JhdGlvblRlc3QocG9vbCwge1xuICAgICAgICB3YXRjaDogdHJ1ZSxcbiAgICAgICAgdmVyYm9zaXR5OiBvcHRpb25zLnZlcmJvc2l0eSxcbiAgICAgICAgLi4udGVzdHNUb1J1blswXSxcbiAgICAgICAgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlcyA/IG9wdGlvbnMucHJvZmlsZXNbMF0gOiB1bmRlZmluZWQsXG4gICAgICAgIHJlZ2lvbjogb3B0aW9ucy50ZXN0UmVnaW9uc1swXSxcbiAgICAgICAgcHJveHk6IG9wdGlvbnMucHJveHksXG4gICAgICAgIGNhQnVuZGxlUGF0aDogb3B0aW9ucy5jYUJ1bmRsZVBhdGgsXG4gICAgICAgIHJvbGVBcm46IG9wdGlvbnMucm9sZUFybixcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICB2b2lkIHBvb2wudGVybWluYXRlKCk7XG4gIH1cblxuICBpZiAoZGVzdHJ1Y3RpdmVDaGFuZ2VzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTb21lIGNoYW5nZXMgd2VyZSBkZXN0cnVjdGl2ZSEnKTtcbiAgfVxuICBpZiAoZmFpbGVkU25hcHNob3RzLmxlbmd0aCA+IDApIHtcbiAgICBsZXQgbWVzc2FnZSA9ICcnO1xuICAgIGlmICghb3B0aW9ucy5ydW5VcGRhdGVPbkZhaWxlZCkge1xuICAgICAgbWVzc2FnZSA9ICdUbyByZS1ydW4gZmFpbGVkIHRlc3RzIHJ1bjogaW50ZWctcnVubmVyIC0tdXBkYXRlLW9uLWZhaWxlZCc7XG4gICAgfVxuICAgIGlmICghdGVzdHNTdWNjZWVkZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU29tZSB0ZXN0cyBmYWlsZWQhXFxuJHttZXNzYWdlfWApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVdhdGNoQXJncyhhcmdzOiB7XG4gIHRlc3RzOiBJbnRlZ1Rlc3RbXTtcbiAgdGVzdFJlZ2lvbnM/OiBzdHJpbmdbXTtcbiAgcHJvZmlsZXM/OiBzdHJpbmdbXTtcbiAgbWF4V29ya2VyczogbnVtYmVyO1xuICBmb3JjZTogYm9vbGVhbjtcbiAgZHJ5UnVuOiBib29sZWFuO1xuICB1cGRhdGVXb3JrZmxvdzogYm9vbGVhbjtcbiAgcnVuVXBkYXRlT25GYWlsZWQ6IGJvb2xlYW47XG4gIHdhdGNoOiBib29sZWFuO1xufSkge1xuICBpZiAoYXJncy53YXRjaCkge1xuICAgIGlmIChcbiAgICAgIChhcmdzLnRlc3RSZWdpb25zICYmIGFyZ3MudGVzdFJlZ2lvbnMubGVuZ3RoID4gMSlcbiAgICAgICAgfHwgKGFyZ3MucHJvZmlsZXMgJiYgYXJncy5wcm9maWxlcy5sZW5ndGggPiAxKVxuICAgICAgICB8fCBhcmdzLnRlc3RzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUnVubmluZyB3aXRoIHdhdGNoIG9ubHkgc3VwcG9ydHMgYSBzaW5nbGUgdGVzdC4gT25seSBwcm92aWRlIGEgc2luZ2xlIG9wdGlvbicrXG4gICAgICAgICd0byBgLS1wcm9maWxlc2AgYC0tcGFyYWxsZWwtcmVnaW9uc2AgYC0tbWF4LXdvcmtlcnMnKTtcbiAgICB9XG5cbiAgICBpZiAoYXJncy5ydW5VcGRhdGVPbkZhaWxlZCB8fCBhcmdzLnVwZGF0ZVdvcmtmbG93IHx8IGFyZ3MuZm9yY2UgfHwgYXJncy5kcnlSdW4pIHtcbiAgICAgIGxvZ2dlci53YXJuaW5nKCdhcmdzIGAtLXVwZGF0ZS1vbi1mYWlsZWRgLCBgLS11cGRhdGUtd29ya2Zsb3dgLCBgLS1mb3JjZWAsIGAtLWRyeS1ydW5gIGhhdmUgbm8gZWZmZWN0IHdoZW4gcnVubmluZyB3aXRoIGAtLXdhdGNoYCcpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludERlc3RydWN0aXZlQ2hhbmdlcyhjaGFuZ2VzOiBEZXN0cnVjdGl2ZUNoYW5nZVtdKTogdm9pZCB7XG4gIGlmIChjaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICBsb2dnZXIud2FybmluZygnISEhIFRoaXMgdGVzdCBjb250YWlucyAlcyAhISEnLCBjaGFsay5ib2xkKCdkZXN0cnVjdGl2ZSBjaGFuZ2VzJykpO1xuICAgIGNoYW5nZXMuZm9yRWFjaChjaGFuZ2UgPT4ge1xuICAgICAgbG9nZ2VyLndhcm5pbmcoJyAgICBTdGFjazogJXMgLSBSZXNvdXJjZTogJXMgLSBJbXBhY3Q6ICVzJywgY2hhbmdlLnN0YWNrTmFtZSwgY2hhbmdlLmxvZ2ljYWxJZCwgY2hhbmdlLmltcGFjdCk7XG4gICAgfSk7XG4gICAgbG9nZ2VyLndhcm5pbmcoJyEhISBJZiB0aGVzZSBkZXN0cnVjdGl2ZSBjaGFuZ2VzIGFyZSBuZWNlc3NhcnksIHBsZWFzZSBpbmRpY2F0ZSB0aGlzIG9uIHRoZSBQUiAhISEnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludE1ldHJpY3MobWV0cmljczogSW50ZWdSdW5uZXJNZXRyaWNzW10pOiB2b2lkIHtcbiAgbG9nZ2VyLmhpZ2hsaWdodCgnICAgLS0tIEludGVncmF0aW9uIHRlc3QgbWV0cmljcyAtLS0nKTtcbiAgY29uc3Qgc29ydGVkTWV0cmljcyA9IG1ldHJpY3Muc29ydCgoYSwgYikgPT4gYS5kdXJhdGlvbiAtIGIuZHVyYXRpb24pO1xuICBzb3J0ZWRNZXRyaWNzLmZvckVhY2gobWV0cmljID0+IHtcbiAgICBsb2dnZXIucHJpbnQoJ1Byb2ZpbGUgJXMgKyBSZWdpb24gJXMgdG90YWwgdGltZTogJXMnLCBtZXRyaWMucHJvZmlsZSwgbWV0cmljLnJlZ2lvbiwgbWV0cmljLmR1cmF0aW9uKTtcbiAgICBjb25zdCBzb3J0ZWRUZXN0cyA9IE9iamVjdC5lbnRyaWVzKG1ldHJpYy50ZXN0cykuc29ydCgoYSwgYikgPT4gYVsxXSAtIGJbMV0pO1xuICAgIHNvcnRlZFRlc3RzLmZvckVhY2godGVzdCA9PiBsb2dnZXIucHJpbnQoJyAgJXM6ICVzJywgdGVzdFswXSwgdGVzdFsxXSkpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUcmFuc2xhdGUgYSBZYXJncyBpbnB1dCBhcnJheSB0byBzb21ldGhpbmcgdGhhdCBtYWtlcyBtb3JlIHNlbnNlIGluIGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VcbiAqIG1vZGVsICh0ZWxsaW5nIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYWJzZW5jZSBhbmQgYW4gZW1wdHkgYXJyYXkpXG4gKlxuICogLSBBbiBlbXB0eSBhcnJheSBpcyB0aGUgZGVmYXVsdCBjYXNlLCBtZWFuaW5nIHRoZSB1c2VyIGRpZG4ndCBwYXNzIGFueSBhcmd1bWVudHMuIFdlIHJldHVyblxuICogICB1bmRlZmluZWQuXG4gKiAtIElmIHRoZSB1c2VyIHBhc3NlZCBhIHNpbmdsZSBlbXB0eSBzdHJpbmcsIHRoZXkgZGlkIHNvbWV0aGluZyBsaWtlIGAtLWFycmF5PWAsIHdoaWNoIHdlJ2xsXG4gKiAgIHRha2UgdG8gbWVhbiB0aGV5IHBhc3NlZCBhbiBlbXB0eSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlGcm9tWWFyZ3MoeHM6IHN0cmluZ1tdKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICBpZiAoeHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4geHMuZmlsdGVyKHggPT4geCAhPT0gJycpO1xufVxuXG4vKipcbiAqIE1lcmdlIHRoZSB0ZXN0cyB3ZSByZWNlaXZlZCBmcm9tIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgd2l0aFxuICogdGVzdHMgdGhhdCBmYWlsZWQgc25hcHNob3QgdGVzdHMuIFRoZSBmYWlsZWQgc25hcHNob3QgdGVzdHMgaGF2ZSBhZGRpdGlvbmFsXG4gKiBpbmZvcm1hdGlvbiB0aGF0IHdlIHdhbnQgdG8ga2VlcCBzbyB0aGlzIHNob3VsZCBvdmVycmlkZSBhbnkgdGVzdCBmcm9tIGFyZ3NcbiAqL1xuZnVuY3Rpb24gbWVyZ2VUZXN0cyh0ZXN0RnJvbUFyZ3M6IEludGVnVGVzdEluZm9bXSwgZmFpbGVkU25hcHNob3RUZXN0czogSW50ZWdUZXN0V29ya2VyQ29uZmlnW10pOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSB7XG4gIGNvbnN0IGZhaWxlZFRlc3ROYW1lcyA9IG5ldyBTZXQoZmFpbGVkU25hcHNob3RUZXN0cy5tYXAodGVzdCA9PiB0ZXN0LmZpbGVOYW1lKSk7XG4gIGNvbnN0IGZpbmFsOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSA9IGZhaWxlZFNuYXBzaG90VGVzdHM7XG4gIGZpbmFsLnB1c2goLi4udGVzdEZyb21BcmdzLmZpbHRlcih0ZXN0ID0+ICFmYWlsZWRUZXN0TmFtZXMuaGFzKHRlc3QuZmlsZU5hbWUpKSk7XG4gIHJldHVybiBmaW5hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsaShhcmdzOiBzdHJpbmdbXSA9IHByb2Nlc3MuYXJndi5zbGljZSgyKSkge1xuICBtYWluKGFyZ3MpLnRoZW4oKS5jYXRjaCgoKSA9PiB7XG4gICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlYWQgQ0xJIG9wdGlvbnMgZnJvbSBhIGNvbmZpZyBmaWxlIGlmIHByb3ZpZGVkLlxuICpcbiAqIEByZXR1cm5zIHBhcnNlZCBDTEkgY29uZmlnIG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gY29uZmlnRnJvbUZpbGUoZmlsZU5hbWU/OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgaWYgKCFmaWxlTmFtZSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGZpbGVOYW1lLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbi8qKlxuICogQ29lcmNlIGZ1bmN0aW9uIGZvciB5YXJncyBhcnJheSBvcHRpb25zIHRvIHN1cHBvcnQgY29tbWEtc2VwYXJhdGVkIHZhbHVlcy5cbiAqIFlhcmdzIGRvZXNuJ3QgbmF0aXZlbHkgc3BsaXQgYC0tb3B0aW9uPWEsYixjYCBpbnRvIFsnYScsICdiJywgJ2MnXS5cbiAqL1xuZnVuY3Rpb24gc3BsaXRCeUNvbW1hKHhzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHhzLmZsYXRNYXAoeCA9PiB4LnNwbGl0KCcsJykpLm1hcCh4ID0+IHgudHJpbSgpKTtcbn1cbiJdfQ==
|
|
335
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa0JBLG9DQXNIQztBQUVELG9CQVlDO0FBZ01ELGtCQUlDO0FBMVZELGdGQUFnRjtBQUNoRix5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLCtCQUErQjtBQUMvQix5Q0FBeUM7QUFDekMsbUNBQW1DO0FBRW5DLGtFQUE4RDtBQUM5RCwyREFBNEY7QUFFNUYsdUNBQWtFO0FBQ2xFLHFFQUFvRTtBQUVwRSw2Q0FBNkM7QUFDN0MsK0NBQStDO0FBQy9DLGlFQUFpRTtBQUNqRSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFL0IsU0FBZ0IsWUFBWSxDQUFDLE9BQWlCLEVBQUU7SUFDOUMsTUFBTSxJQUFJLEdBQUcsS0FBSztTQUNmLEtBQUssQ0FBQywrQkFBK0IsQ0FBQztTQUN0QyxNQUFNLENBQUMsUUFBUSxFQUFFO1FBQ2hCLE1BQU0sRUFBRSxJQUFJO1FBQ1osWUFBWSxFQUFFLGNBQWM7UUFDNUIsT0FBTyxFQUFFLG1CQUFtQjtRQUM1QixJQUFJLEVBQUUseUZBQXlGO0tBQ2hHLENBQUM7U0FDRCxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxtQ0FBbUMsRUFBRSxDQUFDO1NBQy9GLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLG9DQUFvQyxFQUFFLENBQUM7U0FDL0YsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsOEVBQThFLEVBQUUsQ0FBQztTQUN6SSxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFP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Q0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUMxRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRXhlcmNpc2UgYWxsIGludGVnIHN0YWNrcyBhbmQgaWYgdGhleSBkZXBsb3ksIHVwZGF0ZSB0aGUgZXhwZWN0ZWQgc3ludGggZmlsZXNcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgKiBhcyB3b3JrZXJwb29sIGZyb20gJ3dvcmtlcnBvb2wnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB0eXBlIHsgSW50ZWdUZXN0LCBJbnRlZ1Rlc3RJbmZvIH0gZnJvbSAnLi9ydW5uZXIvaW50ZWdyYXRpb24tdGVzdHMnO1xuaW1wb3J0IHsgSW50ZWdyYXRpb25UZXN0cyB9IGZyb20gJy4vcnVubmVyL2ludGVncmF0aW9uLXRlc3RzJztcbmltcG9ydCB7IHByb2Nlc3NVbnN0YWJsZUZlYXR1cmVzLCBhdmFpbGFibGVGZWF0dXJlc0Rlc2NyaXB0aW9uIH0gZnJvbSAnLi91bnN0YWJsZS1mZWF0dXJlcyc7XG5pbXBvcnQgdHlwZSB7IEludGVnUnVubmVyTWV0cmljcywgSW50ZWdUZXN0V29ya2VyQ29uZmlnLCBEZXN0cnVjdGl2ZUNoYW5nZSB9IGZyb20gJy4vd29ya2Vycyc7XG5pbXBvcnQgeyBydW5TbmFwc2hvdFRlc3RzLCBydW5JbnRlZ3JhdGlvblRlc3RzIH0gZnJvbSAnLi93b3JrZXJzJztcbmltcG9ydCB7IHdhdGNoSW50ZWdyYXRpb25UZXN0IH0gZnJvbSAnLi93b3JrZXJzL2ludGVnLXdhdGNoLXdvcmtlcic7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS95YXJncy95YXJncy9pc3N1ZXMvMTkyOVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2VzYnVpbGQvaXNzdWVzLzE0OTJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5jb25zdCB5YXJncyA9IHJlcXVpcmUoJ3lhcmdzJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNsaUFyZ3MoYXJnczogc3RyaW5nW10gPSBbXSkge1xuICBjb25zdCBhcmd2ID0geWFyZ3NcbiAgICAudXNhZ2UoJ1VzYWdlOiBpbnRlZy1ydW5uZXIgW1RFU1QuLi5dJylcbiAgICAub3B0aW9uKCdjb25maWcnLCB7XG4gICAgICBjb25maWc6IHRydWUsXG4gICAgICBjb25maWdQYXJzZXI6IGNvbmZpZ0Zyb21GaWxlLFxuICAgICAgZGVmYXVsdDogJ2ludGVnLmNvbmZpZy5qc29uJyxcbiAgICAgIGRlc2M6ICdMb2FkIG9wdGlvbnMgZnJvbSBhIEpTT04gY29uZmlnIGZpbGUuIE9wdGlvbnMgcHJvdmlkZWQgYXMgQ0xJIGFyZ3VtZW50cyB0YWtlIHByZWNlZGVudC4nLFxuICAgIH0pXG4gICAgLm9wdGlvbignd2F0Y2gnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdQZXJmb3JtIGludGVnIHRlc3RzIGluIHdhdGNoIG1vZGUnIH0pXG4gICAgLm9wdGlvbignbGlzdCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ0xpc3QgdGVzdHMgaW5zdGVhZCBvZiBydW5uaW5nIHRoZW0nIH0pXG4gICAgLm9wdGlvbignY2xlYW4nLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogdHJ1ZSwgZGVzYzogJ0NsZWFuIHVwIGFuZCBkZWxldGUgc3RhY2sgYWZ0ZXIgdGVzdCBpcyBjb21wbGV0ZWQgKHVzZSAtLW5vLWNsZWFuIHRvIG5lZ2F0ZSknIH0pXG4gICAgLm9wdGlvbigndmVyYm9zZScsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgYWxpYXM6ICd2JywgY291bnQ6IHRydWUsIGRlc2M6ICdWZXJib3NlIGxvZ3MgYW5kIG1ldHJpY3Mgb24gaW50ZWdyYXRpb24gdGVzdHMgZHVyYXRpb25zIChzcGVjaWZ5IG11bHRpcGxlIHRpbWVzIHRvIGluY3JlYXNlIHZlcmJvc2l0eSknIH0pXG4gICAgLm9wdGlvbignZHJ5LXJ1bicsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ2RvIG5vdCBhY3R1YWxseSBkZXBsb3kgdGhlIHN0YWNrLiBqdXN0IHVwZGF0ZSB0aGUgc25hcHNob3QgKG5vdCByZWNvbW1lbmRlZCEpJyB9KVxuICAgIC5vcHRpb24oJ3VwZGF0ZS1vbi1mYWlsZWQnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdyZXJ1biBpbnRlZ3JhdGlvbiB0ZXN0cyBhbmQgdXBkYXRlIHNuYXBzaG90cyBmb3IgZmFpbGVkIHRlc3RzLicgfSlcbiAgICAub3B0aW9uKCdmb3JjZScsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ1JlcnVuIGFsbCBpbnRlZ3JhdGlvbiB0ZXN0cyBldmVuIGlmIHRlc3RzIGFyZSBwYXNzaW5nJyB9KVxuICAgIC5vcHRpb24oJ3BhcmFsbGVsLXJlZ2lvbnMnLCB7IHR5cGU6ICdhcnJheScsIGRlc2M6ICdUZXN0cyBhcmUgcnVuIGluIHBhcmFsbGVsIGFjcm9zcyB0aGVzZSByZWdpb25zLiBUbyBwcmV2ZW50IHRlc3RzIGZyb20gcnVubmluZyBpbiBwYXJhbGxlbCwgcHJvdmlkZSBvbmx5IGEgc2luZ2xlIHJlZ2lvbicsIGRlZmF1bHQ6IFtdLCBjb2VyY2U6IHNwbGl0QnlDb21tYSB9KVxuICAgIC5vcHRpb25zKCdkaXJlY3RvcnknLCB7IHR5cGU6ICdzdHJpbmcnLCBkZWZhdWx0OiAndGVzdCcsIGRlc2M6ICdzdGFydGluZyBkaXJlY3RvcnkgdG8gZGlzY292ZXIgaW50ZWdyYXRpb24gdGVzdHMuIFRlc3RzIHdpbGwgYmUgZGlzY292ZXJlZCByZWN1cnNpdmVseSBmcm9tIHRoaXMgZGlyZWN0b3J5JyB9KVxuICAgIC5vcHRpb25zKCdwcm9maWxlcycsIHsgdHlwZTogJ2FycmF5JywgZGVzYzogJ2xpc3Qgb2YgQVdTIHByb2ZpbGVzIHRvIHVzZS4gVGVzdHMgd2lsbCBiZSBydW4gaW4gcGFyYWxsZWwgYWNyb3NzIGVhY2ggcHJvZmlsZStyZWdpb25zJywgZGVmYXVsdDogW10sIGNvZXJjZTogc3BsaXRCeUNvbW1hIH0pXG4gICAgLm9wdGlvbnMoJ21heC13b3JrZXJzJywgeyB0eXBlOiAnbnVtYmVyJywgZGVzYzogJ1RoZSBtYXggbnVtYmVyIG9mIHdvcmtlcnBvb2wgd29ya2VycyB0byB1c2Ugd2hlbiBydW5uaW5nIGludGVncmF0aW9uIHRlc3RzIGluIHBhcmFsbGVsJywgZGVmYXVsdDogMTYgfSlcbiAgICAub3B0aW9ucygnZXhjbHVkZScsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZXNjOiAnUnVuIGFsbCB0ZXN0cyBpbiB0aGUgZGlyZWN0b3J5LCBleGNlcHQgdGhlIHNwZWNpZmllZCBURVNUcycsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgLm9wdGlvbignc3RyaWN0JywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAnRmFpbCBpZiBhbnkgc3BlY2lmaWVkIHRlc3RzIGFyZSBub3QgZm91bmQnIH0pXG4gICAgLm9wdGlvbnMoJ2Zyb20tZmlsZScsIHsgdHlwZTogJ3N0cmluZycsIGRlc2M6ICdSZWFkIFRFU1QgbmFtZXMgZnJvbSBhIGZpbGUgKG9uZSBURVNUIHBlciBsaW5lKScgfSlcbiAgICAub3B0aW9uKCdpbnNwZWN0LWZhaWx1cmVzJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlc2M6ICdLZWVwIHRoZSBpbnRlZyB0ZXN0IGNsb3VkIGFzc2VtYmx5IGlmIGEgZmFpbHVyZSBvY2N1cnMgZm9yIGluc3BlY3Rpb24nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgIC5vcHRpb24oJ2Rpc2FibGUtdXBkYXRlLXdvcmtmbG93JywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IHVuZGVmaW5lZCwgZGVzYzogJ0RFUFJFQ0FURUQsIHVzZSAtLVtub10tdXBkYXRlLXdvcmtmbG93IGluc3RlYWQnIH0pXG4gICAgLm9wdGlvbigndXBkYXRlLXdvcmtmbG93JywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IHVuZGVmaW5lZCwgZGVzYzogJ0RlcGxveXMgdGhlIGNvbW1pdHRlZCBzbmFwc2hvdCBiZWZvcmUgdGhlIHVwZGF0ZWQgYXBwbGljYXRpb24uIE9ubHkgd29ya3MgaWYgc25hcHNob3RzIGFyZSByZWdpb24tYWdub3N0aWMuJyB9KVxuICAgIC5vcHRpb24oJ2xhbmd1YWdlJywge1xuICAgICAgYWxpYXM6ICdsJyxcbiAgICAgIGRlZmF1bHQ6IFsnamF2YXNjcmlwdCcsICd0eXBlc2NyaXB0JywgJ3B5dGhvbicsICdnbyddLFxuICAgICAgY2hvaWNlczogWydqYXZhc2NyaXB0JywgJ3R5cGVzY3JpcHQnLCAncHl0aG9uJywgJ2dvJ10sXG4gICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgbmFyZ3M6IDEsXG4gICAgICBkZXNjOiAnVXNlIHRoZXNlIHByZXNldHMgdG8gcnVuIGludGVncmF0aW9uIHRlc3RzIGZvciB0aGUgc2VsZWN0ZWQgbGFuZ3VhZ2VzJyxcbiAgICB9KVxuICAgIC5vcHRpb24oJ2FwcCcsIHsgdHlwZTogJ3N0cmluZycsIGRlZmF1bHQ6IHVuZGVmaW5lZCwgZGVzYzogJ1RoZSBjdXN0b20gQ0xJIGNvbW1hbmQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcnVuIHRoZSB0ZXN0IGZpbGVzLiBZb3UgY2FuIGluY2x1ZGUge2ZpbGVQYXRofSB0byBzcGVjaWZ5IHdoZXJlIGluIHRoZSBjb21tYW5kIHRoZSB0ZXN0IGZpbGUgcGF0aCBzaG91bGQgYmUgaW5zZXJ0ZWQuIEV4YW1wbGU6IC0tYXBwPVwicHl0aG9uMy44IHtmaWxlUGF0aH1cIi4nIH0pXG4gICAgLm9wdGlvbigndGVzdC1yZWdleCcsIHsgdHlwZTogJ2FycmF5JywgZGVzYzogJ0RldGVjdCBpbnRlZ3JhdGlvbiB0ZXN0IGZpbGVzIG1hdGNoaW5nIHRoaXMgSmF2YVNjcmlwdCByZWdleCBwYXR0ZXJuLiBJZiB1c2VkIG11bHRpcGxlIHRpbWVzLCBhbGwgZmlsZXMgbWF0Y2hpbmcgYW55IG9uZSBvZiB0aGUgcGF0dGVybnMgYXJlIGRldGVjdGVkLicsIGRlZmF1bHQ6IFtdIH0pXG4gICAgLm9wdGlvbigncHJveHknLCB7IHR5cGU6ICdzdHJpbmcnLCBkZXNjOiAnVXNlIHRoZSBpbmRpY2F0ZWQgcHJveHkuIFdpbGwgcmVhZCBmcm9tIEhUVFBTX1BST1hZIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIG5vdCBzcGVjaWZpZWQnLCByZXF1aXJlc0FyZzogdHJ1ZSB9KVxuICAgIC5vcHRpb24oJ2NhLWJ1bmRsZS1wYXRoJywgeyB0eXBlOiAnc3RyaW5nJywgZGVzYzogJ1BhdGggdG8gQ0EgY2VydGlmaWNhdGUgdG8gdXNlIHdoZW4gdmFsaWRhdGluZyBIVFRQUyByZXF1ZXN0cy4gV2lsbCByZWFkIGZyb20gQVdTX0NBX0JVTkRMRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiBub3Qgc3BlY2lmaWVkJywgcmVxdWlyZXNBcmc6IHRydWUgfSlcbiAgICAub3B0aW9uKCd1bnN0YWJsZScsIHsgdHlwZTogJ2FycmF5JywgZGVzYzogYE9wdC1pbiB0byB1c2luZyB1bnN0YWJsZSBmZWF0dXJlcy4gQnkgdXNpbmcgdGhlc2UgZmxhZ3MgeW91IGFja25vd2xlZGdlIHRoYXQgc2NvcGUgYW5kIEFQSSBvZiB1bnN0YWJsZSBmZWF0dXJlcyBtYXkgY2hhbmdlIHdpdGhvdXQgbm90aWNlLiBTcGVjaWZ5IG11bHRpcGxlIHRpbWVzIGZvciBlYWNoIHVuc3RhYmxlIGZlYXR1cmUgeW91IHdhbnQgdG8gb3B0LWluIHRvLiAke2F2YWlsYWJsZUZlYXR1cmVzRGVzY3JpcHRpb24oKX1gLCBuYXJnczogMSwgZGVmYXVsdDogW10gfSlcbiAgICAub3B0aW9uKCdyb2xlLWFybicsIHsgdHlwZTogJ3N0cmluZycsIGRlc2M6ICdBUk4gb2YgdGhlIElBTSByb2xlIGZvciBDbG91ZEZvcm1hdGlvbiB0byBhc3N1bWUgZHVyaW5nIGRlcGxveS9kZXN0cm95JywgcmVxdWlyZXNBcmc6IHRydWUgfSlcbiAgICAub3B0aW9uKCdhbGxvdy1kZWxldGUtZmFpbHVyZXMnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdEbyBub3QgZmFpbCB0aGUgdGVzdCB3aGVuIHJlc291cmNlcyBmYWlsIHRvIGRlbGV0ZSBkdXJpbmcgYSBzdGFjayB1cGRhdGUnIH0pXG4gICAgLm9wdGlvbigndXBkYXRlLWZyb20tdGFncycsIHsgdHlwZTogJ3N0cmluZycsIGRlc2M6ICdEZXBsb3kgc25hcHNob3RzIGZyb20gdGhlIGdpdmVuIGdpdCB0YWdzIGluIHNlcXVlbmNlIGJlZm9yZSBkZXBsb3lpbmcgdGhlIGN1cnJlbnQgY29kZS4gSW1wbGllcyAtLWZvcmNlLiBPbmx5IHdvcmtzIGlmIHNuYXBzaG90cyBhcmUgcmVnaW9uLWFnbm9zdGljLicsIHJlcXVpcmVzQXJnOiB0cnVlIH0pXG4gICAgLnN0cmljdCgpXG4gICAgLnBhcnNlKGFyZ3MpO1xuXG4gIGNvbnN0IHRlc3RzOiBzdHJpbmdbXSA9IGFyZ3YuXztcbiAgY29uc3QgcGFyYWxsZWxSZWdpb25zID0gYXJyYXlGcm9tWWFyZ3MoYXJndlsncGFyYWxsZWwtcmVnaW9ucyddKTtcbiAgY29uc3QgdGVzdFJlZ2lvbnM6IHN0cmluZ1tdID0gcGFyYWxsZWxSZWdpb25zID8/IFsndXMtZWFzdC0xJywgJ3VzLWVhc3QtMicsICd1cy13ZXN0LTInXTtcbiAgY29uc3QgcHJvZmlsZXMgPSBhcnJheUZyb21ZYXJncyhhcmd2LnByb2ZpbGVzKTtcbiAgY29uc3QgZnJvbUZpbGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGFyZ3ZbJ2Zyb20tZmlsZSddO1xuICBjb25zdCBtYXhXb3JrZXJzOiBudW1iZXIgPSBhcmd2WydtYXgtd29ya2VycyddO1xuICBjb25zdCB2ZXJib3NpdHk6IG51bWJlciA9IGFyZ3YudmVyYm9zZTtcbiAgY29uc3QgdmVyYm9zZTogYm9vbGVhbiA9IHZlcmJvc2l0eSA+PSAxO1xuXG4gIGNvbnN0IG51bVRlc3RzID0gdGVzdFJlZ2lvbnMubGVuZ3RoICogKHByb2ZpbGVzID8/IFsxXSkubGVuZ3RoO1xuICBpZiAobWF4V29ya2VycyA8IG51bVRlc3RzKSB7XG4gICAgbG9nZ2VyLndhcm5pbmcoJ1lvdSBhcmUgYXR0ZW1wdGluZyB0byBydW4gJXMgdGVzdHMgaW4gcGFyYWxsZWwsIGJ1dCBvbmx5IGhhdmUgJXMgd29ya2Vycy4gTm90IGFsbCBvZiB5b3VyIHByb2ZpbGVzK3JlZ2lvbnMgd2lsbCBiZSB1dGlsaXplZCcsIG51bVRlc3RzLCBtYXhXb3JrZXJzKTtcbiAgfVxuXG4gIGlmICh0ZXN0cy5sZW5ndGggPiAwICYmIGZyb21GaWxlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBIGxpc3Qgb2YgdGVzdHMgY2Fubm90IGJlIHByb3ZpZGVkIGlmIFwiLS1mcm9tLWZpbGVcIiBpcyBwcm92aWRlZCcpO1xuICB9XG5cbiAgaWYgKGFyZ3Yuc3RyaWN0ICYmIGFyZ3YuZXhjbHVkZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHVzZSAtLXN0cmljdCB3aXRoIC0tZXhjbHVkZScpO1xuICB9XG5cbiAgY29uc3QgcmVxdWVzdGVkVGVzdHMgPSBmcm9tRmlsZVxuICAgID8gKGZzLnJlYWRGaWxlU3luYyhmcm9tRmlsZSwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pKVxuICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgLmZpbHRlcih4ID0+IHgpXG4gICAgICAuZmlsdGVyKHggPT4gIXguc3RhcnRzV2l0aCgnIycpKVxuICAgIDogKHRlc3RzLmxlbmd0aCA+IDAgPyB0ZXN0cyA6IHVuZGVmaW5lZCk7IC8vICd1bmRlZmluZWQnIG1lYW5zIG5vIHJlcXVlc3RcblxuICBpZiAoYXJndlsnZGlzYWJsZS11cGRhdGUtd29ya2Zsb3cnXSAhPT0gdW5kZWZpbmVkICYmIGFyZ3ZbJ3VwZGF0ZS13b3JrZmxvdyddICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJy0tZGlzYWJsZS11cGRhdGUtd29ya2Zsb3cgYW5kIC0tW25vLV11cGRhdGUtd29ya2Zsb3cgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXInKTtcbiAgfVxuXG4gIGxldCB1cGRhdGVXb3JrZmxvdyA9IGFyZ3ZbJ3VwZGF0ZS13b3JrZmxvdyddICE9PSB1bmRlZmluZWQgPyAhIWFyZ3ZbJ3VwZGF0ZS13b3JrZmxvdyddIDogIWFyZ3ZbJ2Rpc2FibGUtdXBkYXRlLXdvcmtmbG93J107XG5cbiAgY29uc3QgdXBkYXRlRnJvbVRhZ3M6IHN0cmluZ1tdIHwgdW5kZWZpbmVkID0gYXJndlsndXBkYXRlLWZyb20tdGFncyddXG4gICAgPyBhcmd2Wyd1cGRhdGUtZnJvbS10YWdzJ10uc3BsaXQoJywnKS5tYXAoKHQ6IHN0cmluZykgPT4gdC50cmltKCkpXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKHVwZGF0ZUZyb21UYWdzICYmIGFyZ3ZbJ3VwZGF0ZS13b3JrZmxvdyddID09PSBmYWxzZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignLS11cGRhdGUtZnJvbS10YWdzIGFuZCAtLW5vLXVwZGF0ZS13b3JrZmxvdyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlcicpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0ZXN0czogcmVxdWVzdGVkVGVzdHMsXG4gICAgYXBwOiBhcmd2LmFwcCBhcyAoc3RyaW5nIHwgdW5kZWZpbmVkKSxcbiAgICB0ZXN0UmVnZXg6IGFycmF5RnJvbVlhcmdzKGFyZ3ZbJ3Rlc3QtcmVnZXgnXSksXG4gICAgdGVzdFJlZ2lvbnMsXG4gICAgb3JpZ2luYWxSZWdpb25zOiBwYXJhbGxlbFJlZ2lvbnMsXG4gICAgcHJvZmlsZXMsXG4gICAgcnVuVXBkYXRlT25GYWlsZWQ6IChhcmd2Wyd1cGRhdGUtb24tZmFpbGVkJ10gPz8gZmFsc2UpIGFzIGJvb2xlYW4sXG4gICAgZnJvbUZpbGUsXG4gICAgZXhjbHVkZTogYXJndi5leGNsdWRlIGFzIGJvb2xlYW4sXG4gICAgbWF4V29ya2VycyxcbiAgICBsaXN0OiBhcmd2Lmxpc3QgYXMgYm9vbGVhbixcbiAgICBkaXJlY3Rvcnk6IGFyZ3YuZGlyZWN0b3J5IGFzIHN0cmluZyxcbiAgICBpbnNwZWN0RmFpbHVyZXM6IGFyZ3ZbJ2luc3BlY3QtZmFpbHVyZXMnXSBhcyBib29sZWFuLFxuICAgIHZlcmJvc2l0eSxcbiAgICB2ZXJib3NlLFxuICAgIGNsZWFuOiBhcmd2LmNsZWFuIGFzIGJvb2xlYW4sXG4gICAgZm9yY2U6IGFyZ3YuZm9yY2UgYXMgYm9vbGVhbixcbiAgICBkcnlSdW46IGFyZ3ZbJ2RyeS1ydW4nXSBhcyBib29sZWFuLFxuICAgIHVwZGF0ZVdvcmtmbG93LFxuICAgIGxhbmd1YWdlOiBhcnJheUZyb21ZYXJncyhhcmd2Lmxhbmd1YWdlKSxcbiAgICB3YXRjaDogYXJndi53YXRjaCBhcyBib29sZWFuLFxuICAgIHN0cmljdDogYXJndi5zdHJpY3QgYXMgYm9vbGVhbixcbiAgICB1bnN0YWJsZTogYXJyYXlGcm9tWWFyZ3MoYXJndi51bnN0YWJsZSkgPz8gW10sXG4gICAgcHJveHk6IGFyZ3YucHJveHkgYXMgKHN0cmluZyB8IHVuZGVmaW5lZCksXG4gICAgY2FCdW5kbGVQYXRoOiBhcmd2WydjYS1idW5kbGUtcGF0aCddIGFzIChzdHJpbmcgfCB1bmRlZmluZWQpLFxuICAgIHJvbGVBcm46IGFyZ3ZbJ3JvbGUtYXJuJ10gYXMgKHN0cmluZyB8IHVuZGVmaW5lZCksXG4gICAgYWxsb3dEZWxldGVGYWlsdXJlczogYXJndlsnYWxsb3ctZGVsZXRlLWZhaWx1cmVzJ10gYXMgYm9vbGVhbixcbiAgICB1cGRhdGVGcm9tVGFncyxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4oYXJnczogc3RyaW5nW10pIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBvcHRpb25zID0gcGFyc2VDbGlBcmdzKGFyZ3MpO1xuXG4gICAgLy8gUHJvY2VzcyB1bnN0YWJsZSBmZWF0dXJlcyBhbmQgZW1pdCBhcHByb3ByaWF0ZSB3YXJuaW5nc1xuICAgIG9wdGlvbnMudW5zdGFibGUgPSBwcm9jZXNzVW5zdGFibGVGZWF0dXJlcyhvcHRpb25zLnVuc3RhYmxlKTtcblxuICAgIGF3YWl0IHJ1bihvcHRpb25zKTtcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBsb2dnZXIuZXJyb3IoZXJyKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuKG9wdGlvbnM6IFJldHVyblR5cGU8dHlwZW9mIHBhcnNlQ2xpQXJncz4pIHtcbiAgLy8gLS11cGRhdGUtZnJvbS10YWdzIGltcGxpZXMgLS1mb3JjZSAoYWx3YXlzIGRlcGxveSBhbGwgbWF0Y2hlZCB0ZXN0cylcbiAgaWYgKG9wdGlvbnMudXBkYXRlRnJvbVRhZ3MpIHtcbiAgICBvcHRpb25zLmZvcmNlID0gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IHRlc3RzRnJvbUFyZ3MgPSBhd2FpdCBuZXcgSW50ZWdyYXRpb25UZXN0cyhwYXRoLnJlc29sdmUob3B0aW9ucy5kaXJlY3RvcnkpKS5mcm9tQ2xpT3B0aW9ucyhvcHRpb25zKTtcblxuICAvLyBMaXN0IG9ubHkgcHJpbnRzIHRoZSBkaXNjb3ZlcmVkIHRlc3RzXG4gIGlmIChvcHRpb25zLmxpc3QpIHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSh0ZXN0c0Zyb21BcmdzLm1hcCh0ID0+IHQuZGlzY292ZXJ5UmVsYXRpdmVGaWxlTmFtZSkuam9pbignXFxuJykgKyAnXFxuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcG9vbCA9IHdvcmtlcnBvb2wucG9vbChwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnbGliJywgJ3dvcmtlcnMnLCAnZXh0cmFjdCcsICdpbmRleC5qcycpLCB7XG4gICAgbWF4V29ya2Vyczogb3B0aW9ucy53YXRjaCA/IDEgOiBvcHRpb25zLm1heFdvcmtlcnMsXG4gIH0pO1xuXG4gIGNvbnN0IHRlc3RzVG9SdW46IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdID0gW107XG4gIGxldCBkZXN0cnVjdGl2ZUNoYW5nZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbGV0IGZhaWxlZFNuYXBzaG90czogSW50ZWdUZXN0V29ya2VyQ29uZmlnW10gPSBbXTtcbiAgbGV0IHRlc3RzU3VjY2VlZGVkID0gZmFsc2U7XG4gIHZhbGlkYXRlV2F0Y2hBcmdzKHtcbiAgICAuLi5vcHRpb25zLFxuICAgIHRlc3RSZWdpb25zOiBvcHRpb25zLm9yaWdpbmFsUmVnaW9ucyxcbiAgICB0ZXN0czogdGVzdHNGcm9tQXJncyxcbiAgfSk7XG5cbiAgdHJ5IHtcbiAgICBpZiAoIW9wdGlvbnMud2F0Y2gpIHtcbiAgICAgIC8vIGFsd2F5cyBydW4gc25hcHNob3QgdGVzdHMsIGJ1dCBpZiAnLS1mb3JjZScgaXMgcGFzc2VkIHRoZW5cbiAgICAgIC8vIHJ1biBpbnRlZ3JhdGlvbiB0ZXN0cyBvbiBhbGwgZmFpbGVkIHRlc3RzLCBub3QganVzdCB0aG9zZSB0aGF0XG4gICAgICAvLyBmYWlsZWQgc25hcHNob3QgdGVzdHNcbiAgICAgIGZhaWxlZFNuYXBzaG90cyA9IGF3YWl0IHJ1blNuYXBzaG90VGVzdHMocG9vbCwgdGVzdHNGcm9tQXJncywge1xuICAgICAgICByZXRhaW46IG9wdGlvbnMuaW5zcGVjdEZhaWx1cmVzLFxuICAgICAgICB2ZXJib3NlOiBvcHRpb25zLnZlcmJvc2UsXG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgZmFpbHVyZSBvZiBmYWlsZWRTbmFwc2hvdHMpIHtcbiAgICAgICAgbG9nZ2VyLndhcm5pbmcoYEZhaWxlZDogJHtmYWlsdXJlLmZpbGVOYW1lfWApO1xuICAgICAgICBpZiAoZmFpbHVyZS5kZXN0cnVjdGl2ZUNoYW5nZXMgJiYgZmFpbHVyZS5kZXN0cnVjdGl2ZUNoYW5nZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHByaW50RGVzdHJ1Y3RpdmVDaGFuZ2VzKGZhaWx1cmUuZGVzdHJ1Y3RpdmVDaGFuZ2VzKTtcbiAgICAgICAgICBkZXN0cnVjdGl2ZUNoYW5nZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIW9wdGlvbnMuZm9yY2UpIHtcbiAgICAgICAgdGVzdHNUb1J1bi5wdXNoKC4uLmZhaWxlZFNuYXBzaG90cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZiBhbnkgb2YgdGhlIHRlc3QgZmFpbGVkIHNuYXBzaG90IHRlc3RzLCBrZWVwIHRob3NlIHJlc3VsdHNcbiAgICAgICAgLy8gYW5kIG1lcmdlIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHRlc3RzIGZyb20gYXJnc1xuICAgICAgICB0ZXN0c1RvUnVuLnB1c2goLi4ubWVyZ2VUZXN0cyh0ZXN0c0Zyb21BcmdzLm1hcCh0ID0+IHQuaW5mbyksIGZhaWxlZFNuYXBzaG90cykpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0ZXN0c1RvUnVuLnB1c2goLi4udGVzdHNGcm9tQXJncy5tYXAodCA9PiB0LmluZm8pKTtcbiAgICB9XG5cbiAgICAvLyBydW4gaW50ZWdyYXRpb24gdGVzdHMgaWYgYC0tdXBkYXRlLW9uLWZhaWxlZGAgT1IgYC0tZm9yY2VgIGlzIHVzZWRcbiAgICBpZiAob3B0aW9ucy5ydW5VcGRhdGVPbkZhaWxlZCB8fCBvcHRpb25zLmZvcmNlKSB7XG4gICAgICBjb25zdCB7IHN1Y2Nlc3MsIG1ldHJpY3MgfSA9IGF3YWl0IHJ1bkludGVncmF0aW9uVGVzdHMoe1xuICAgICAgICBwb29sLFxuICAgICAgICB0ZXN0czogdGVzdHNUb1J1bixcbiAgICAgICAgcmVnaW9uczogb3B0aW9ucy50ZXN0UmVnaW9ucyxcbiAgICAgICAgcHJvZmlsZXM6IG9wdGlvbnMucHJvZmlsZXMsXG4gICAgICAgIGNsZWFuOiBvcHRpb25zLmNsZWFuLFxuICAgICAgICBkcnlSdW46IG9wdGlvbnMuZHJ5UnVuLFxuICAgICAgICB2ZXJib3NpdHk6IG9wdGlvbnMudmVyYm9zaXR5LFxuICAgICAgICB1cGRhdGVXb3JrZmxvdzogb3B0aW9ucy51cGRhdGVXb3JrZmxvdyxcbiAgICAgICAgdXBkYXRlRnJvbVRhZ3M6IG9wdGlvbnMudXBkYXRlRnJvbVRhZ3MsXG4gICAgICAgIHdhdGNoOiBvcHRpb25zLndhdGNoLFxuICAgICAgICBwcm94eTogb3B0aW9ucy5wcm94eSxcbiAgICAgICAgY2FCdW5kbGVQYXRoOiBvcHRpb25zLmNhQnVuZGxlUGF0aCxcbiAgICAgICAgcm9sZUFybjogb3B0aW9ucy5yb2xlQXJuLFxuICAgICAgICBhbGxvd0RlbGV0ZUZhaWx1cmVzOiBvcHRpb25zLmFsbG93RGVsZXRlRmFpbHVyZXMsXG4gICAgICB9KTtcbiAgICAgIHRlc3RzU3VjY2VlZGVkID0gc3VjY2VzcztcblxuICAgICAgaWYgKG9wdGlvbnMuY2xlYW4gPT09IGZhbHNlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuaW5nKCdOb3QgY2xlYW5pbmcgdXAgc3RhY2tzIHNpbmNlIFwiLS1uby1jbGVhblwiIHdhcyB1c2VkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChCb29sZWFuKG9wdGlvbnMudmVyYm9zZSkpIHtcbiAgICAgICAgcHJpbnRNZXRyaWNzKG1ldHJpY3MpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTb21lIGludGVncmF0aW9uIHRlc3RzIGZhaWxlZCEnKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMud2F0Y2gpIHtcbiAgICAgIGF3YWl0IHdhdGNoSW50ZWdyYXRpb25UZXN0KHBvb2wsIHtcbiAgICAgICAgd2F0Y2g6IHRydWUsXG4gICAgICAgIHZlcmJvc2l0eTogb3B0aW9ucy52ZXJib3NpdHksXG4gICAgICAgIC4uLnRlc3RzVG9SdW5bMF0sXG4gICAgICAgIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZXMgPyBvcHRpb25zLnByb2ZpbGVzWzBdIDogdW5kZWZpbmVkLFxuICAgICAgICByZWdpb246IG9wdGlvbnMudGVzdFJlZ2lvbnNbMF0sXG4gICAgICAgIHByb3h5OiBvcHRpb25zLnByb3h5LFxuICAgICAgICBjYUJ1bmRsZVBhdGg6IG9wdGlvbnMuY2FCdW5kbGVQYXRoLFxuICAgICAgICByb2xlQXJuOiBvcHRpb25zLnJvbGVBcm4sXG4gICAgICB9KTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgdm9pZCBwb29sLnRlcm1pbmF0ZSgpO1xuICB9XG5cbiAgaWYgKGRlc3RydWN0aXZlQ2hhbmdlcykge1xuICAgIHRocm93IG5ldyBFcnJvcignU29tZSBjaGFuZ2VzIHdlcmUgZGVzdHJ1Y3RpdmUhJyk7XG4gIH1cbiAgaWYgKGZhaWxlZFNuYXBzaG90cy5sZW5ndGggPiAwKSB7XG4gICAgbGV0IG1lc3NhZ2UgPSAnJztcbiAgICBpZiAoIW9wdGlvbnMucnVuVXBkYXRlT25GYWlsZWQpIHtcbiAgICAgIG1lc3NhZ2UgPSAnVG8gcmUtcnVuIGZhaWxlZCB0ZXN0cyBydW46IGludGVnLXJ1bm5lciAtLXVwZGF0ZS1vbi1mYWlsZWQnO1xuICAgIH1cbiAgICBpZiAoIXRlc3RzU3VjY2VlZGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNvbWUgdGVzdHMgZmFpbGVkIVxcbiR7bWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVXYXRjaEFyZ3MoYXJnczoge1xuICB0ZXN0czogSW50ZWdUZXN0W107XG4gIHRlc3RSZWdpb25zPzogc3RyaW5nW107XG4gIHByb2ZpbGVzPzogc3RyaW5nW107XG4gIG1heFdvcmtlcnM6IG51bWJlcjtcbiAgZm9yY2U6IGJvb2xlYW47XG4gIGRyeVJ1bjogYm9vbGVhbjtcbiAgdXBkYXRlV29ya2Zsb3c6IGJvb2xlYW47XG4gIHJ1blVwZGF0ZU9uRmFpbGVkOiBib29sZWFuO1xuICB3YXRjaDogYm9vbGVhbjtcbn0pIHtcbiAgaWYgKGFyZ3Mud2F0Y2gpIHtcbiAgICBpZiAoXG4gICAgICAoYXJncy50ZXN0UmVnaW9ucyAmJiBhcmdzLnRlc3RSZWdpb25zLmxlbmd0aCA+IDEpXG4gICAgICAgIHx8IChhcmdzLnByb2ZpbGVzICYmIGFyZ3MucHJvZmlsZXMubGVuZ3RoID4gMSlcbiAgICAgICAgfHwgYXJncy50ZXN0cy5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1J1bm5pbmcgd2l0aCB3YXRjaCBvbmx5IHN1cHBvcnRzIGEgc2luZ2xlIHRlc3QuIE9ubHkgcHJvdmlkZSBhIHNpbmdsZSBvcHRpb24nK1xuICAgICAgICAndG8gYC0tcHJvZmlsZXNgIGAtLXBhcmFsbGVsLXJlZ2lvbnNgIGAtLW1heC13b3JrZXJzJyk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3MucnVuVXBkYXRlT25GYWlsZWQgfHwgYXJncy51cGRhdGVXb3JrZmxvdyB8fCBhcmdzLmZvcmNlIHx8IGFyZ3MuZHJ5UnVuKSB7XG4gICAgICBsb2dnZXIud2FybmluZygnYXJncyBgLS11cGRhdGUtb24tZmFpbGVkYCwgYC0tdXBkYXRlLXdvcmtmbG93YCwgYC0tZm9yY2VgLCBgLS1kcnktcnVuYCBoYXZlIG5vIGVmZmVjdCB3aGVuIHJ1bm5pbmcgd2l0aCBgLS13YXRjaGAnKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnREZXN0cnVjdGl2ZUNoYW5nZXMoY2hhbmdlczogRGVzdHJ1Y3RpdmVDaGFuZ2VbXSk6IHZvaWQge1xuICBpZiAoY2hhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgbG9nZ2VyLndhcm5pbmcoJyEhISBUaGlzIHRlc3QgY29udGFpbnMgJXMgISEhJywgY2hhbGsuYm9sZCgnZGVzdHJ1Y3RpdmUgY2hhbmdlcycpKTtcbiAgICBjaGFuZ2VzLmZvckVhY2goY2hhbmdlID0+IHtcbiAgICAgIGxvZ2dlci53YXJuaW5nKCcgICAgU3RhY2s6ICVzIC0gUmVzb3VyY2U6ICVzIC0gSW1wYWN0OiAlcycsIGNoYW5nZS5zdGFja05hbWUsIGNoYW5nZS5sb2dpY2FsSWQsIGNoYW5nZS5pbXBhY3QpO1xuICAgIH0pO1xuICAgIGxvZ2dlci53YXJuaW5nKCchISEgSWYgdGhlc2UgZGVzdHJ1Y3RpdmUgY2hhbmdlcyBhcmUgbmVjZXNzYXJ5LCBwbGVhc2UgaW5kaWNhdGUgdGhpcyBvbiB0aGUgUFIgISEhJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRNZXRyaWNzKG1ldHJpY3M6IEludGVnUnVubmVyTWV0cmljc1tdKTogdm9pZCB7XG4gIGxvZ2dlci5oaWdobGlnaHQoJyAgIC0tLSBJbnRlZ3JhdGlvbiB0ZXN0IG1ldHJpY3MgLS0tJyk7XG4gIGNvbnN0IHNvcnRlZE1ldHJpY3MgPSBtZXRyaWNzLnNvcnQoKGEsIGIpID0+IGEuZHVyYXRpb24gLSBiLmR1cmF0aW9uKTtcbiAgc29ydGVkTWV0cmljcy5mb3JFYWNoKG1ldHJpYyA9PiB7XG4gICAgbG9nZ2VyLnByaW50KCdQcm9maWxlICVzICsgUmVnaW9uICVzIHRvdGFsIHRpbWU6ICVzJywgbWV0cmljLnByb2ZpbGUsIG1ldHJpYy5yZWdpb24sIG1ldHJpYy5kdXJhdGlvbik7XG4gICAgY29uc3Qgc29ydGVkVGVzdHMgPSBPYmplY3QuZW50cmllcyhtZXRyaWMudGVzdHMpLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKTtcbiAgICBzb3J0ZWRUZXN0cy5mb3JFYWNoKHRlc3QgPT4gbG9nZ2VyLnByaW50KCcgICVzOiAlcycsIHRlc3RbMF0sIHRlc3RbMV0pKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVHJhbnNsYXRlIGEgWWFyZ3MgaW5wdXQgYXJyYXkgdG8gc29tZXRoaW5nIHRoYXQgbWFrZXMgbW9yZSBzZW5zZSBpbiBhIHByb2dyYW1taW5nIGxhbmd1YWdlXG4gKiBtb2RlbCAodGVsbGluZyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFic2VuY2UgYW5kIGFuIGVtcHR5IGFycmF5KVxuICpcbiAqIC0gQW4gZW1wdHkgYXJyYXkgaXMgdGhlIGRlZmF1bHQgY2FzZSwgbWVhbmluZyB0aGUgdXNlciBkaWRuJ3QgcGFzcyBhbnkgYXJndW1lbnRzLiBXZSByZXR1cm5cbiAqICAgdW5kZWZpbmVkLlxuICogLSBJZiB0aGUgdXNlciBwYXNzZWQgYSBzaW5nbGUgZW1wdHkgc3RyaW5nLCB0aGV5IGRpZCBzb21ldGhpbmcgbGlrZSBgLS1hcnJheT1gLCB3aGljaCB3ZSdsbFxuICogICB0YWtlIHRvIG1lYW4gdGhleSBwYXNzZWQgYW4gZW1wdHkgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RnJvbVlhcmdzKHhzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHhzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHhzLmZpbHRlcih4ID0+IHggIT09ICcnKTtcbn1cblxuLyoqXG4gKiBNZXJnZSB0aGUgdGVzdHMgd2UgcmVjZWl2ZWQgZnJvbSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHdpdGhcbiAqIHRlc3RzIHRoYXQgZmFpbGVkIHNuYXBzaG90IHRlc3RzLiBUaGUgZmFpbGVkIHNuYXBzaG90IHRlc3RzIGhhdmUgYWRkaXRpb25hbFxuICogaW5mb3JtYXRpb24gdGhhdCB3ZSB3YW50IHRvIGtlZXAgc28gdGhpcyBzaG91bGQgb3ZlcnJpZGUgYW55IHRlc3QgZnJvbSBhcmdzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlVGVzdHModGVzdEZyb21BcmdzOiBJbnRlZ1Rlc3RJbmZvW10sIGZhaWxlZFNuYXBzaG90VGVzdHM6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdKTogSW50ZWdUZXN0V29ya2VyQ29uZmlnW10ge1xuICBjb25zdCBmYWlsZWRUZXN0TmFtZXMgPSBuZXcgU2V0KGZhaWxlZFNuYXBzaG90VGVzdHMubWFwKHRlc3QgPT4gdGVzdC5maWxlTmFtZSkpO1xuICBjb25zdCBmaW5hbDogSW50ZWdUZXN0V29ya2VyQ29uZmlnW10gPSBmYWlsZWRTbmFwc2hvdFRlc3RzO1xuICBmaW5hbC5wdXNoKC4uLnRlc3RGcm9tQXJncy5maWx0ZXIodGVzdCA9PiAhZmFpbGVkVGVzdE5hbWVzLmhhcyh0ZXN0LmZpbGVOYW1lKSkpO1xuICByZXR1cm4gZmluYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGkoYXJnczogc3RyaW5nW10gPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMikpIHtcbiAgbWFpbihhcmdzKS50aGVuKCkuY2F0Y2goKCkgPT4ge1xuICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZWFkIENMSSBvcHRpb25zIGZyb20gYSBjb25maWcgZmlsZSBpZiBwcm92aWRlZC5cbiAqXG4gKiBAcmV0dXJucyBwYXJzZWQgQ0xJIGNvbmZpZyBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGNvbmZpZ0Zyb21GaWxlKGZpbGVOYW1lPzogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gIGlmICghZmlsZU5hbWUpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhmaWxlTmFtZSwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4vKipcbiAqIENvZXJjZSBmdW5jdGlvbiBmb3IgeWFyZ3MgYXJyYXkgb3B0aW9ucyB0byBzdXBwb3J0IGNvbW1hLXNlcGFyYXRlZCB2YWx1ZXMuXG4gKiBZYXJncyBkb2Vzbid0IG5hdGl2ZWx5IHNwbGl0IGAtLW9wdGlvbj1hLGIsY2AgaW50byBbJ2EnLCAnYicsICdjJ10uXG4gKi9cbmZ1bmN0aW9uIHNwbGl0QnlDb21tYSh4czogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiB4cy5mbGF0TWFwKHggPT4geC5zcGxpdCgnLCcpKS5tYXAoeCA9PiB4LnRyaW0oKSk7XG59XG4iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { DefaultCdkOptions, DestroyOptions as BaseDestroyOptions, DeployOptions as BaseDeployOptions } from '@aws-cdk/cloud-assembly-schema/lib/integ-tests';
|
|
2
|
-
import type { DeploymentMethod } from '@aws-cdk/toolkit-lib';
|
|
2
|
+
import type { DeploymentMethod, ResourceDeleteFailure } from '@aws-cdk/toolkit-lib';
|
|
3
3
|
/**
|
|
4
4
|
* Events emitted during watch mode
|
|
5
5
|
*/
|
|
@@ -98,6 +98,16 @@ export interface CxOptions extends DefaultCdkOptions {
|
|
|
98
98
|
* This interface defines the contract for CDK operations that can be
|
|
99
99
|
* performed by different engine implementations.
|
|
100
100
|
*/
|
|
101
|
+
/**
|
|
102
|
+
* Result of a deploy operation
|
|
103
|
+
*/
|
|
104
|
+
export interface CdkDeployResult {
|
|
105
|
+
/**
|
|
106
|
+
* Resources that CloudFormation failed to delete during a stack update.
|
|
107
|
+
* These resources are no longer managed by CloudFormation but still exist.
|
|
108
|
+
*/
|
|
109
|
+
readonly deleteFailures: ResourceDeleteFailure[];
|
|
110
|
+
}
|
|
101
111
|
export interface ICdk {
|
|
102
112
|
/**
|
|
103
113
|
* cdk synth
|
|
@@ -110,7 +120,7 @@ export interface ICdk {
|
|
|
110
120
|
/**
|
|
111
121
|
* cdk deploy
|
|
112
122
|
*/
|
|
113
|
-
deploy(options: DeployOptions): Promise<
|
|
123
|
+
deploy(options: DeployOptions): Promise<CdkDeployResult>;
|
|
114
124
|
/**
|
|
115
125
|
* cdk destroy
|
|
116
126
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdk-interface.d.ts","sourceRoot":"","sources":["cdk-interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,IAAI,kBAAkB,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AAClK,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"cdk-interface.d.ts","sourceRoot":"","sources":["cdk-interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,IAAI,kBAAkB,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AAClK,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAEpF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACzC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;;;OAOG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE1C;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE;QAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CACpD;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,iBAAiB;CACrD;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,iBAAiB;IACtD;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,aAAa;IACjD;;OAEG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,iBAAiB;IAClD;;;;OAIG;IACH,QAAQ,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAC7C;;;;;;OAMG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CACnD;AAED;;;;;GAKG;AACH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,QAAQ,CAAC,cAAc,EAAE,qBAAqB,EAAE,CAAC;CAClD;AAED,MAAM,WAAW,IAAI;IACnB;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5C;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE9C;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAEzD;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpE"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGVmYXVsdENka09wdGlvbnMsIERlc3Ryb3lPcHRpb25zIGFzIEJhc2VEZXN0cm95T3B0aW9ucywgRGVwbG95T3B0aW9ucyBhcyBCYXNlRGVwbG95T3B0aW9ucyB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYS9saWIvaW50ZWctdGVzdHMnO1xuaW1wb3J0IHR5cGUgeyBEZXBsb3ltZW50TWV0aG9kLCBSZXNvdXJjZURlbGV0ZUZhaWx1cmUgfSBmcm9tICdAYXdzLWNkay90b29sa2l0LWxpYic7XG5cbi8qKlxuICogRXZlbnRzIGVtaXR0ZWQgZHVyaW5nIHdhdGNoIG1vZGVcbiAqL1xuZXhwb3J0IHR5cGUgV2F0Y2hFdmVudHMgPSB7XG4gIG9uU3Rkb3V0PzogKGNodW5rOiBhbnkpID0+IHZvaWQ7XG4gIG9uU3RkZXJyPzogKGNodW5rOiBhbnkpID0+IHZvaWQ7XG4gIG9uQ2xvc2U/OiAoY29kZTogbnVtYmVyIHwgbnVsbCkgPT4gdm9pZDtcbn07XG5cbi8qKlxuICogT3B0aW9ucyB0byB1c2Ugd2l0aCBjZGsgc3ludGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeW50aE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGNvbW1hbmQgdG8gdXNlIHRvIGV4ZWN1dGUgdGhlIGFwcC5cbiAgICogVGhpcyBpcyB0eXBpY2FsbHkgdGhlIHNhbWUgdGhpbmcgdGhhdCBub3JtYWxseVxuICAgKiBnZXRzIHBhc3NlZCB0byBgLS1hcHBgXG4gICAqXG4gICAqIGUuZy4gXCJub2RlICdiaW4vbXktYXBwLnRzJ1wiXG4gICAqIG9yICdnbyBydW4gbWFpbi5nbydcbiAgICovXG4gIHJlYWRvbmx5IGFwcDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgc3ludGhlc2l6ZWQgY2xvdWQgYXNzZW1ibHkgaW50byBhIGRpcmVjdG9yeVxuICAgKlxuICAgKiBAZGVmYXVsdCBjZGsub3V0XG4gICAqL1xuICByZWFkb25seSBvdXRwdXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgY29udGV4dFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGFkZGl0aW9uYWwgY29udGV4dFxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBpbiB0aGVcbiAgICogZXhlY3V0aW9uIGVudmlyb25tZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gYWRkaXRpb25hbCBlbnZcbiAgICovXG4gIHJlYWRvbmx5IGVudj86IHsgcmVhZG9ubHkgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNkayBsaXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdE9wdGlvbnMgZXh0ZW5kcyBEZWZhdWx0Q2RrT3B0aW9ucyB7XG59XG5cbi8qKlxuICogT3B0aW9ucyB0byB1c2Ugd2l0aCBjZGsgZGVwbG95XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95T3B0aW9ucyBleHRlbmRzIEJhc2VEZXBsb3lPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2hvdyBDbG91ZFdhdGNoIGxvZ3MgZm9yIGhvdHN3YXBwZWQgcmVzb3VyY2VzXG4gICAqIGxvY2FsbHkgaW4gdGhlIHVzZXJzIHRlcm1pbmFsXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHRyYWNlTG9ncz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyB0byB1c2Ugd2l0aCBjZGsgd2F0Y2hcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXYXRjaE9wdGlvbnMgZXh0ZW5kcyBEZXBsb3lPcHRpb25zIHtcbiAgLyoqXG4gICAqIERlcGxveW1lbnQgbWV0aG9kXG4gICAqL1xuICByZWFkb25seSBkZXBsb3ltZW50TWV0aG9kPzogRGVwbG95bWVudE1ldGhvZDtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjZGsgZGVzdHJveVxuICovXG5leHBvcnQgdHlwZSBEZXN0cm95T3B0aW9ucyA9IEJhc2VEZXN0cm95T3B0aW9ucztcblxuLyoqXG4gKiBPcHRpb25zIHRvIGNyZWF0ZSBhIENsb3VkIEFzc2VtYmx5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3hPcHRpb25zIGV4dGVuZHMgRGVmYXVsdENka09wdGlvbnMge1xuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgY3VycmVudCBkZWZhdWx0IGVudmlyb25tZW50IGFuIHByb3ZpZGUgYXMgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHRoZSBhcHAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHJlc29sdmVEZWZhdWx0RW52aXJvbm1lbnQ/OiBib29sZWFuO1xuICAvKipcbiAgICogQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICpcbiAgICogVGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpbGwgYmUgc2V0IGluIGFkZGl0aW9uIHRvIHRoZSBlbnZpcm9ubWVudFxuICAgKiB2YXJpYWJsZXMgY3VycmVudGx5IHNldCBpbiB0aGUgcHJvY2Vzcy4gQSB2YWx1ZSBvZiBgdW5kZWZpbmVkYCB3aWxsXG4gICAqIHVuc2V0IGEgcGFydGljdWxhciBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD47XG59XG5cbi8qKlxuICogQVdTIENESyBDTEkgb3BlcmF0aW9ucyBpbnRlcmZhY2VcbiAqXG4gKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIHRoZSBjb250cmFjdCBmb3IgQ0RLIG9wZXJhdGlvbnMgdGhhdCBjYW4gYmVcbiAqIHBlcmZvcm1lZCBieSBkaWZmZXJlbnQgZW5naW5lIGltcGxlbWVudGF0aW9ucy5cbiAqL1xuLyoqXG4gKiBSZXN1bHQgb2YgYSBkZXBsb3kgb3BlcmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2RrRGVwbG95UmVzdWx0IHtcbiAgLyoqXG4gICAqIFJlc291cmNlcyB0aGF0IENsb3VkRm9ybWF0aW9uIGZhaWxlZCB0byBkZWxldGUgZHVyaW5nIGEgc3RhY2sgdXBkYXRlLlxuICAgKiBUaGVzZSByZXNvdXJjZXMgYXJlIG5vIGxvbmdlciBtYW5hZ2VkIGJ5IENsb3VkRm9ybWF0aW9uIGJ1dCBzdGlsbCBleGlzdC5cbiAgICovXG4gIHJlYWRvbmx5IGRlbGV0ZUZhaWx1cmVzOiBSZXNvdXJjZURlbGV0ZUZhaWx1cmVbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ2RrIHtcbiAgLyoqXG4gICAqIGNkayBzeW50aFxuICAgKi9cbiAgc3ludGgob3B0aW9uczogU3ludGhPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogY2RrIGxpc3RcbiAgICovXG4gIGxpc3Qob3B0aW9uczogTGlzdE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZ1tdPjtcblxuICAvKipcbiAgICogY2RrIGRlcGxveVxuICAgKi9cbiAgZGVwbG95KG9wdGlvbnM6IERlcGxveU9wdGlvbnMpOiBQcm9taXNlPENka0RlcGxveVJlc3VsdD47XG5cbiAgLyoqXG4gICAqIGNkayBkZXN0cm95XG4gICAqL1xuICBkZXN0cm95KG9wdGlvbnM6IERlc3Ryb3lPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogY2RrIHdhdGNoXG4gICAqL1xuICB3YXRjaChvcHRpb25zOiBEZXBsb3lPcHRpb25zLCBldmVudHM/OiBXYXRjaEV2ZW50cyk6IFByb21pc2U8dm9pZD47XG59XG4iXX0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DeployOptions, DestroyOptions, ICdk, ListOptions, SynthOptions, WatchEvents, WatchOptions } from './cdk-interface';
|
|
1
|
+
import type { CdkDeployResult, DeployOptions, DestroyOptions, ICdk, ListOptions, SynthOptions, WatchEvents, WatchOptions } from './cdk-interface';
|
|
2
2
|
export interface ToolkitLibEngineOptions {
|
|
3
3
|
/**
|
|
4
4
|
* The directory to run the cdk commands from
|
|
@@ -87,7 +87,7 @@ export declare class ToolkitLibRunnerEngine implements ICdk {
|
|
|
87
87
|
/**
|
|
88
88
|
* Deploys the CDK app
|
|
89
89
|
*/
|
|
90
|
-
deploy(options: DeployOptions): Promise<
|
|
90
|
+
deploy(options: DeployOptions): Promise<CdkDeployResult>;
|
|
91
91
|
/**
|
|
92
92
|
* Watches the CDK app for changes and deploys them automatically
|
|
93
93
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolkit-lib.d.ts","sourceRoot":"","sources":["toolkit-lib.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAa,aAAa,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"toolkit-lib.d.ts","sourceRoot":"","sources":["toolkit-lib.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAa,aAAa,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG7J,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAElC;;;;;;OAMG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAE1C;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAE9B;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAExB;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,sBAAuB,YAAW,IAAI;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA8B;gBAExC,OAAO,EAAE,uBAAuB;IAyBnD;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IA4B1B;;OAEG;IACU,KAAK,CAAC,OAAO,EAAE,YAAY;IAkCxC;;OAEG;IACU,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAU1D;;OAEG;IACU,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;IAiBrE;;OAEG;IACU,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,WAAW;IA0B9D;;OAEG;IACU,OAAO,CAAC,OAAO,EAAE,cAAc;IAU5C;;OAEG;YACW,EAAE;IAoChB;;OAEG;IACH,OAAO,CAAC,aAAa;IAQrB;;;;;;;;;;;;;;;;;;;;;;OAsBG;YACW,cAAc;CA4B7B"}
|
|
@@ -182,7 +182,7 @@ class ToolkitLibRunnerEngine {
|
|
|
182
182
|
async deploy(options) {
|
|
183
183
|
const toolkit = this.getOrCreateToolkit(options);
|
|
184
184
|
const cx = await this.cx(options);
|
|
185
|
-
await toolkit.deploy(cx, {
|
|
185
|
+
const result = await toolkit.deploy(cx, {
|
|
186
186
|
roleArn: options.roleArn,
|
|
187
187
|
traceLogs: options.traceLogs,
|
|
188
188
|
stacks: this.stackSelector(options),
|
|
@@ -191,6 +191,9 @@ class ToolkitLibRunnerEngine {
|
|
|
191
191
|
},
|
|
192
192
|
outputsFile: options.outputsFile ? path.join(this.options.workingDirectory, options.outputsFile) : undefined,
|
|
193
193
|
});
|
|
194
|
+
return {
|
|
195
|
+
deleteFailures: result.stacks.flatMap(s => s.deleteFailures),
|
|
196
|
+
};
|
|
194
197
|
}
|
|
195
198
|
/**
|
|
196
199
|
* Watches the CDK app for changes and deploys them automatically
|
|
@@ -365,4 +368,4 @@ class NoopIoHost {
|
|
|
365
368
|
return msg.defaultResponse;
|
|
366
369
|
}
|
|
367
370
|
}
|
|
368
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGtpdC1saWIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0b29sa2l0LWxpYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0NBQWtDO0FBQ2xDLG9FQUE2RDtBQUc3RCxzREFBbUo7QUFDbkosK0JBQStCO0FBQy9CLCtCQUErQjtBQUUvQiwrQ0FBbUQ7QUF1RW5EOztHQUVHO0FBQ0gsTUFBYSxzQkFBc0I7SUFDaEIsT0FBTyxDQUFVO0lBQ2pCLE9BQU8sQ0FBMEI7SUFDakMsVUFBVSxDQUFVO0lBQ3BCLE1BQU0sQ0FBb0I7SUFDMUIsWUFBWSxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO0lBRTNELFlBQW1CLE9BQWdDO1FBQ2pELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUM7UUFFOUMsd0VBQXdFO1FBQ3hFLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUV0QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRXpDLG9FQUFvRTtRQUNwRSx1REFBdUQ7UUFDdkQsdUNBQXVDO1FBQ3ZDLEVBQUU7UUFDRixjQUFjO1FBQ2QsK0RBQStEO1FBQy9ELFVBQVU7UUFDVixtQkFBbUI7UUFFbkIsd0ZBQXdGO1FBQ3hGLG1CQUFtQjtRQUNuQixxQkFBcUI7UUFDckIsa0JBQWtCO0lBQ3BCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssa0JBQWtCLENBQUMsYUFBNkI7UUFDdEQsTUFBTSxPQUFPLEdBQUcsYUFBYSxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUMvRCxNQUFNLEtBQUssR0FBRyxhQUFhLEVB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QUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDOUIsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNsQixHQUFHLEdBQUc7WUFDTixPQUFPLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVU7SUFDUCxLQUFLLENBQUMsTUFBTTtJQUNuQixDQUFDO0lBQ00sS0FBSyxDQUFDLGVBQWUsQ0FBSSxHQUEwQjtRQUN4RCxPQUFPLEdBQUcsQ0FBQyxlQUFlLENBQUM7SUFDN0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgVU5LTk9XTl9SRUdJT04gfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1hcGknO1xuaW1wb3J0IHR5cGUgeyBEZWZhdWx0Q2RrT3B0aW9ucyB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYS9saWIvaW50ZWctdGVzdHMnO1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRBc3NlbWJseVNvdXJjZSwgSUlvSG9zdCwgSW9NZXNzYWdlLCBJb1JlcXVlc3QsIElSZWFkYWJsZUNsb3VkQXNzZW1ibHksIE5vbkludGVyYWN0aXZlSW9Ib3N0UHJvcHMsIFN0YWNrU2VsZWN0b3IgfSBmcm9tICdAYXdzLWNkay90b29sa2l0LWxpYic7XG5pbXBvcnQgeyBCYXNlQ3JlZGVudGlhbHMsIEV4cGFuZFN0YWNrU2VsZWN0aW9uLCBNZW1vcnlDb250ZXh0LCBOb25JbnRlcmFjdGl2ZUlvSG9zdCwgU3RhY2tTZWxlY3Rpb25TdHJhdGVneSwgVG9vbGtpdCB9IGZyb20gJ0Bhd3MtY2RrL3Rvb2xraXQtbGliJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB0eXBlIHsgQ3hPcHRpb25zLCBEZXBsb3lPcHRpb25zLCBEZXN0cm95T3B0aW9ucywgSUNkaywgTGlzdE9wdGlvbnMsIFN5bnRoT3B0aW9ucywgV2F0Y2hFdmVudHMsIFdhdGNoT3B0aW9ucyB9IGZyb20gJy4vY2RrLWludGVyZmFjZSc7XG5pbXBvcnQgeyBQcm94eUFnZW50UHJvdmlkZXIgfSBmcm9tICcuL3Byb3h5LWFnZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBUb29sa2l0TGliRW5naW5lT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0b3J5IHRvIHJ1biB0aGUgY2RrIGNvbW1hbmRzIGZyb21cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtpbmdEaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0XG4gICAqIGluIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQgdGhhdCB3aWxsIGJlIHJ1bm5pbmdcbiAgICogdGhlIGNkayBhcHBcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIGVudiB2YXJzXG4gICAqL1xuICByZWFkb25seSBlbnY/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogU2hvdyB0aGUgb3V0cHV0IGZyb20gcnVubmluZyB0aGUgQ0RLIENMSVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2hvd091dHB1dD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSByZWdpb24gdGhlIENESyBhcHAgc2hvdWxkIHN5bnRoZXNpemUgaXRzZWxmIGZvclxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgcHJvZmlsZSB0byB1c2Ugd2hlbiBhdXRoZW50aWNhdGluZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHByb2ZpbGUgaXMgcGFzc2VkLCB0aGUgZGVmYXVsdCBwcm9maWxlIGlzIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZSB0aGUgaW5kaWNhdGVkIHByb3h5XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcHJveHksIFByb3h5QWdlbnQgYXV0by1kZXRlY3RzIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAqL1xuICByZWFkb25seSBwcm94eT86IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byBDQSBjZXJ0aWZpY2F0ZSB0byB1c2Ugd2hlbiB2YWxpZGF0aW5nIEhUVFBTIHJlcXVlc3RzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gYWRkaXRpb25hbCBDQSBidW5kbGVcbiAgICovXG4gIHJlYWRvbmx5IGNhQnVuZGxlUGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQZXItYWN0aW9uIG9wdGlvbnMgdGhhdCBjYW4gb3ZlcnJpZGUgdGhlIGVuZ2luZSBkZWZhdWx0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBBV1MgcHJvZmlsZSB0byB1c2VcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZSB0aGUgaW5kaWNhdGVkIHByb3h5XG4gICAqL1xuICByZWFkb25seSBwcm94eT86IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byBDQSBjZXJ0aWZpY2F0ZSB0byB1c2Ugd2hlbiB2YWxpZGF0aW5nIEhUVFBTIHJlcXVlc3RzXG4gICAqL1xuICByZWFkb25seSBjYUJ1bmRsZVBhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBydW5uZXIgZW5naW5lIHBvd2VyZWQgZGlyZWN0bHkgYnkgdGhlIHRvb2xraXQtbGliXG4gKi9cbmV4cG9ydCBjbGFzcyBUb29sa2l0TGliUnVubmVyRW5naW5lIGltcGxlbWVudHMgSUNkayB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdG9vbGtpdDogVG9vbGtpdDtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBUb29sa2l0TGliRW5naW5lT3B0aW9ucztcbiAgcHJpdmF0ZSByZWFkb25seSBzaG93T3V0cHV0OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IGlvSG9zdDogSW50ZWdSdW5uZXJJb0hvc3Q7XG4gIHByaXZhdGUgcmVhZG9ubHkgdG9vbGtpdENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFRvb2xraXQ+KCk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFRvb2xraXRMaWJFbmdpbmVPcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnNob3dPdXRwdXQgPSBvcHRpb25zLnNob3dPdXRwdXQgPz8gZmFsc2U7XG5cbiAgICAvLyBXZSBhbHdheXMgY3JlYXRlIHRoaXMgZm9yIG91cnNlbHZlcyB0byBlbWl0IHdhcm5pbmdzLCBidXQgcG90ZW50aWFsbHlcbiAgICAvLyBkb24ndCBwYXNzIGl0IHRvIHRoZSB0b29sa2l0LlxuICAgIHRoaXMuaW9Ib3N0ID0gbmV3IEludGVnUnVubmVySW9Ib3N0KCk7XG5cbiAgICB0aGlzLnRvb2xraXQgPSB0aGlzLmdldE9yQ3JlYXRlVG9vbGtpdCgpO1xuXG4gICAgLy8gQFRPRE8gLSB0aGVzZSBvcHRpb25zIGFyZSBjdXJyZW50bHkgYXZhaWxhYmxlIG9uIHRoZSBhY3Rpb24gY2FsbHNcbiAgICAvLyBidXQgdG9vbGtpdC1saWIgbmVlZHMgdGhlbSBhdCB0aGUgY29uc3RydWN0b3IgbGV2ZWwuXG4gICAgLy8gTmVlZCB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZW0uXG4gICAgLy9cbiAgICAvLyBWYWxpZGF0aW9uc1xuICAgIC8vICAtIGFzc2VtYmx5RmFpbHVyZUF0OiBvcHRpb25zLnN0cmljdCA/PyBvcHRpb25zLmlnbm9yZUVycm9yc1xuICAgIC8vIExvZ2dpbmdcbiAgICAvLyAgLSBvcHRpb25zLmNvbG9yXG5cbiAgICAvLyBAVE9ETyAtIHNpbWlsYXIgdG8gdGhlIGFib3ZlLCBidXQgaW4gdG9vbGtpdC1saWIgdGhlc2Ugb3B0aW9ucyB3b3VsZCBnbyBvbiB0aGUgSW9Ib3N0XG4gICAgLy8gIC0gb3B0aW9ucy50cmFjZVxuICAgIC8vICAtIG9wdGlvbnMudmVyYm9zZVxuICAgIC8vICAtIG9wdGlvbnMuanNvblxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBvciBjcmVhdGUgYSBUb29sa2l0IGluc3RhbmNlIGZvciB0aGUgZ2l2ZW4gYWN0aW9uIG9wdGlvbnMuXG4gICAqIENhY2hlcyBpbnN0YW5jZXMgYnkgdGhlaXIgcmVzb2x2ZWQgY29uZmlndXJhdGlvbiB0byBhdm9pZCBjcmVhdGluZ1xuICAgKiBkdXBsaWNhdGUgVG9vbGtpdCBpbnN0YW5jZXMgZm9yIGlkZW50aWNhbCBzZXR0aW5ncy5cbiAgICovXG4gIHByaXZhdGUgZ2V0T3JDcmVhdGVUb29sa2l0KGFjdGlvbk9wdGlvbnM/OiBBY3Rpb25PcHRpb25zKTogVG9vbGtpdCB7XG4gICAgY29uc3QgcHJvZmlsZSA9IGFjdGlvbk9wdGlvbnM/LnByb2ZpbGUgPz8gdGhpcy5vcHRpb25zLnByb2ZpbGU7XG4gICAgY29uc3QgcHJveHkgPSBhY3Rpb25PcHRpb25zPy5wcm94eSA/PyB0aGlzLm9wdGlvbnMucHJveHk7XG4gICAgY29uc3QgY2FCdW5kbGVQYXRoID0gYWN0aW9uT3B0aW9ucz8uY2FCdW5kbGVQYXRoID8/IHRoaXMub3B0aW9ucy5jYUJ1bmRsZVBhdGg7XG4gICAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoW3Byb2ZpbGUsIHByb3h5LCBjYUJ1bmRsZVBhdGhdKTtcblxuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMudG9vbGtpdENhY2hlLmdldChrZXkpO1xuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgdG9vbGtpdCA9IG5ldyBUb29sa2l0KHtcbiAgICAgIGlvSG9zdDogdGhpcy5zaG93T3V0cHV0ID8gdGhpcy5pb0hvc3QgOiBuZXcgTm9vcElvSG9zdCgpLFxuICAgICAgc2RrQ29uZmlnOiB7XG4gICAgICAgIGJhc2VDcmVkZW50aWFsczogQmFzZUNyZWRlbnRpYWxzLmF3c0NsaUNvbXBhdGlibGUoe1xuICAgICAgICAgIHByb2ZpbGUsXG4gICAgICAgICAgZGVmYXVsdFJlZ2lvbjogdGhpcy5vcHRpb25zLnJlZ2lvbixcbiAgICAgICAgfSksXG4gICAgICAgIGh0dHBPcHRpb25zOiB7XG4gICAgICAgICAgYWdlbnQ6IFByb3h5QWdlbnRQcm92aWRlci5nZXRPckNyZWF0ZSh7IHByb3h5QWRkcmVzczogcHJveHksIGNhQnVuZGxlUGF0aCB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLnRvb2xraXRDYWNoZS5zZXQoa2V5LCB0b29sa2l0KTtcbiAgICByZXR1cm4gdG9vbGtpdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW50aGVzaXplcyB0aGUgQ0RLIGFwcFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHN5bnRoKG9wdGlvbnM6IFN5bnRoT3B0aW9ucykge1xuICAgIGNvbnN0IGN4ID0gYXdhaXQgdGhpcy5jeCh7XG4gICAgICBhcHA6IG9wdGlvbnMuYXBwLFxuICAgICAgb3V0cHV0OiBvcHRpb25zLm91dHB1dCxcbiAgICAgIGNvbnRleHQ6IG9wdGlvbnMuY29udGV4dCxcbiAgICAgIGxvb2t1cHM6IGZhbHNlLFxuICAgICAgcmVzb2x2ZURlZmF1bHRFbnZpcm9ubWVudDogZmFsc2UsXG4gICAgICBlbnY6IG9wdGlvbnMuZW52LFxuICAgICAgdmVyc2lvblJlcG9ydGluZzogZmFsc2UsXG4gICAgICBwYXRoTWV0YWRhdGE6IGZhbHNlLFxuICAgICAgYXNzZXRNZXRhZGF0YTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdXNpbmcgbG9jayA9IGF3YWl0IHRoaXMudG9vbGtpdC5zeW50aChjeCwge1xuICAgICAgICB2YWxpZGF0ZVN0YWNrczogZmFsc2UsXG4gICAgICAgIHN0YWNrczoge1xuICAgICAgICAgIHN0cmF0ZWd5OiBTdGFja1NlbGVjdGlvblN0cmF0ZWd5LkFMTF9TVEFDS1MsXG4gICAgICAgICAgZmFpbE9uRW1wdHk6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlUmVnaW9uKGxvY2spO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgaWYgKGUubWVzc2FnZS5pbmNsdWRlcygnTWlzc2luZyBjb250ZXh0IGtleXMnKSkge1xuICAgICAgICAvLyBAVE9ETyAtIHNpbGVudGx5IGlnbm9yZSBtaXNzaW5nIGNvbnRleHRcbiAgICAgICAgLy8gVGhpcyBpcyBhY3R1YWxseSBhbiB1bmRlZmluZWQgY2FzZSBpbiB0aGUgb2xkIGltcGxlbWVudGF0aW9uLCB3aGljaCBkb2Vzbid0IHVzZSB0aGUgdG9vbGtpdCBjb2RlXG4gICAgICAgIC8vIGFuZCB3b24ndCBmYWlsIGZvciBtaXNzaW5nIGNvbnRleHQuIFRvIHByZXNlcnZlIGV4aXN0aW5nIGJlaGF2aW9yLCB3ZSBkbyB0aGUgc2FtZSBoZXJlLlxuICAgICAgICAvLyBIb3dldmVyIGluIGZ1dHVyZSB3ZSBuZWVkIHRvIGZpbmQgYSB3YXkgZm9yIGludGVnIHRlc3RzIHRvIHByb3ZpZGUgY29udGV4dCB0aHJvdWdoIHNuYXBzaG90cy5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdHMgdGhlIHN0YWNrcyBpbiB0aGUgQ0RLIGFwcFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxpc3Qob3B0aW9uczogTGlzdE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgdG9vbGtpdCA9IHRoaXMuZ2V0T3JDcmVhdGVUb29sa2l0KG9wdGlvbnMpO1xuICAgIGNvbnN0IGN4ID0gYXdhaXQgdGhpcy5jeChvcHRpb25zKTtcbiAgICBjb25zdCBzdGFja3MgPSBhd2FpdCB0b29sa2l0Lmxpc3QoY3gsIHtcbiAgICAgIHN0YWNrczogdGhpcy5zdGFja1NlbGVjdG9yKG9wdGlvbnMpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN0YWNrcy5tYXAocyA9PiBzLm5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlcGxveXMgdGhlIENESyBhcHBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZXBsb3kob3B0aW9uczogRGVwbG95T3B0aW9ucykge1xuICAgIGNvbnN0IHRvb2xraXQgPSB0aGlzLmdldE9yQ3JlYXRlVG9vbGtpdChvcHRpb25zKTtcbiAgICBjb25zdCBjeCA9IGF3YWl0IHRoaXMuY3gob3B0aW9ucyk7XG4gICAgYXdhaXQgdG9vbGtpdC5kZXBsb3koY3gsIHtcbiAgICAgIHJvbGVBcm46IG9wdGlvbnMucm9sZUFybixcbiAgICAgIHRyYWNlTG9nczogb3B0aW9ucy50cmFjZUxvZ3MsXG4gICAgICBzdGFja3M6IHRoaXMuc3RhY2tTZWxlY3RvcihvcHRpb25zKSxcbiAgICAgIGRlcGxveW1lbnRNZXRob2Q6IHtcbiAgICAgICAgbWV0aG9kOiAnY2hhbmdlLXNldCcsXG4gICAgICB9LFxuICAgICAgb3V0cHV0c0ZpbGU6IG9wdGlvbnMub3V0cHV0c0ZpbGUgPyBwYXRoLmpvaW4odGhpcy5vcHRpb25zLndvcmtpbmdEaXJlY3RvcnksIG9wdGlvbnMub3V0cHV0c0ZpbGUpIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFdhdGNoZXMgdGhlIENESyBhcHAgZm9yIGNoYW5nZXMgYW5kIGRlcGxveXMgdGhlbSBhdXRvbWF0aWNhbGx5XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgd2F0Y2gob3B0aW9uczogV2F0Y2hPcHRpb25zLCBldmVudHM/OiBXYXRjaEV2ZW50cykge1xuICAgIGNvbnN0IHRvb2xraXQgPSB0aGlzLmdldE9yQ3JlYXRlVG9vbGtpdChvcHRpb25zKTtcbiAgICBjb25zdCBjeCA9IGF3YWl0IHRoaXMuY3gob3B0aW9ucyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHdhdGNoZXIgPSBhd2FpdCB0b29sa2l0LndhdGNoKGN4LCB7XG4gICAgICAgIHJvbGVBcm46IG9wdGlvbnMucm9sZUFybixcbiAgICAgICAgdHJhY2VMb2dzOiBvcHRpb25zLnRyYWNlTG9ncyxcbiAgICAgICAgc3RhY2tzOiB0aGlzLnN0YWNrU2VsZWN0b3Iob3B0aW9ucyksXG4gICAgICAgIGRlcGxveW1lbnRNZXRob2Q6IG9wdGlvbnMuZGVwbG95bWVudE1ldGhvZCxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgd2F0Y2hlci53YWl0Rm9yRW5kKCk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgaWYgKGV2ZW50cz8ub25TdGRlcnIpIHtcbiAgICAgICAgZXZlbnRzLm9uU3RkZXJyKFN0cmluZyhlKSk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnRzPy5vbkNsb3NlKSB7XG4gICAgICAgIGV2ZW50cy5vbkNsb3NlKDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudHM/Lm9uQ2xvc2UpIHtcbiAgICAgIGV2ZW50cy5vbkNsb3NlKDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgQ0RLIGFwcFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRlc3Ryb3kob3B0aW9uczogRGVzdHJveU9wdGlvbnMpIHtcbiAgICBjb25zdCB0b29sa2l0ID0gdGhpcy5nZXRPckNyZWF0ZVRvb2xraXQob3B0aW9ucyk7XG4gICAgY29uc3QgY3ggPSBhd2FpdCB0aGlzLmN4KG9wdGlvbnMpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC5kZXN0cm95KGN4LCB7XG4gICAgICByb2xlQXJuOiBvcHRpb25zLnJvbGVBcm4sXG4gICAgICBzdGFja3M6IHRoaXMuc3RhY2tTZWxlY3RvcihvcHRpb25zKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgQ2xvdWQgQXNzZW1ibHkgU291cmNlIGZyb20gdGhlIHByb3ZpZGVkIG9wdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGN4KG9wdGlvbnM6IEN4T3B0aW9ucyk6IFByb21pc2U8SUNsb3VkQXNzZW1ibHlTb3VyY2U+IHtcbiAgICBpZiAoIW9wdGlvbnMuYXBwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGFwcCBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHRoZSBhcHAgaXMgYSBwYXRoIHRvIGV4aXN0aW5nIHNuYXBzaG90IGFuZCB0aGVuIHVzZSBpdCBhcyBhbiBhc3NlbWJseSBkaXJlY3RvcnlcbiAgICBjb25zdCBwb3RlbnRpYWxDeFBhdGggPSBwYXRoLmpvaW4odGhpcy5vcHRpb25zLndvcmtpbmdEaXJlY3RvcnksIG9wdGlvbnMuYXBwKTtcbiAgICBpZiAoZnMucGF0aEV4aXN0c1N5bmMocG90ZW50aWFsQ3hQYXRoKSAmJiBmcy5zdGF0U3luYyhwb3RlbnRpYWxDeFBhdGgpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvb2xraXQuZnJvbUFzc2VtYmx5RGlyZWN0b3J5KHBvdGVudGlhbEN4UGF0aCk7XG4gICAgfVxuXG4gICAgbGV0IG91dGRpcjtcbiAgICBpZiAob3B0aW9ucy5vdXRwdXQpIHtcbiAgICAgIG91dGRpciA9IHBhdGguam9pbih0aGlzLm9wdGlvbnMud29ya2luZ0RpcmVjdG9yeSwgb3B0aW9ucy5vdXRwdXQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRvb2xraXQuZnJvbUNka0FwcChvcHRpb25zLmFwcCwge1xuICAgICAgd29ya2luZ0RpcmVjdG9yeTogdGhpcy5vcHRpb25zLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICBvdXRkaXIsXG4gICAgICBsb29rdXBzOiBvcHRpb25zLmxvb2t1cHMsXG4gICAgICBjb250ZXh0U3RvcmU6IG5ldyBNZW1vcnlDb250ZXh0KG9wdGlvbnMuY29udGV4dCksXG4gICAgICByZXNvbHZlRGVmYXVsdEVudmlyb25tZW50OiBvcHRpb25zLnJlc29sdmVEZWZhdWx0RW52aXJvbm1lbnQsXG4gICAgICBlbnY6IHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zLmVudixcbiAgICAgICAgLi4ub3B0aW9ucy5lbnYsXG4gICAgICB9LFxuICAgICAgc3ludGhPcHRpb25zOiB7XG4gICAgICAgIGRlYnVnOiBvcHRpb25zLmRlYnVnLFxuICAgICAgICB2ZXJzaW9uUmVwb3J0aW5nOiBvcHRpb25zLnZlcnNpb25SZXBvcnRpbmcgPz8gZmFsc2UsXG4gICAgICAgIHBhdGhNZXRhZGF0YTogb3B0aW9ucy5wYXRoTWV0YWRhdGEgPz8gZmFsc2UsXG4gICAgICAgIGFzc2V0TWV0YWRhdGE6IG9wdGlvbnMuYXNzZXRNZXRhZGF0YSA/PyBmYWxzZSxcbiAgICAgICAgYXNzZXRTdGFnaW5nOiBvcHRpb25zLnN0YWdpbmcsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBTdGFja1NlbGVjdG9yIGZyb20gdGhlIHByb3ZpZGVkIG9wdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIHN0YWNrU2VsZWN0b3Iob3B0aW9uczogRGVmYXVsdENka09wdGlvbnMgJiB7IHJlYWRvbmx5IGV4Y2x1c2l2ZWx5PzogYm9vbGVhbiB9KTogU3RhY2tTZWxlY3RvciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0cmF0ZWd5OiBvcHRpb25zLmFsbCA/IFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3kuQUxMX1NUQUNLUyA6IFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3kuUEFUVEVSTl9NVVNUX01BVENILFxuICAgICAgcGF0dGVybnM6IG9wdGlvbnMuc3RhY2tzID8/IFsnKionXSxcbiAgICAgIGV4cGFuZDogb3B0aW9ucy5leGNsdXNpdmVseSA/IEV4cGFuZFN0YWNrU2VsZWN0aW9uLk5PTkUgOiBFeHBhbmRTdGFja1NlbGVjdGlvbi5VUFNUUkVBTSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoYXQgdGhlIHJlZ2lvbnMgZm9yIHRoZSBzdGFja3MgaW4gdGhlIENsb3VkQXNzZW1ibHkgbWF0Y2ggdGhlIHJlZ2lvbnMgcmVxdWVzdGVkIG9uIHRoZSBlbmdpbmVcbiAgICpcbiAgICogVGhpcyBwcmV2ZW50cyBtaXNjb25maWd1cmF0aW9uIG9mIHRoZSBpbnRlZyB0ZXN0IGFwcC4gUGVvcGxlIHRlbmQgdG8gcHV0OlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBuZXcgU3RhY2soYXBwLCAnU3RhY2snLCB7XG4gICAqICAgZW52OiB7XG4gICAqICAgICByZWdpb246ICdzb21lLXJlZ2lvbi10aGF0LXN1aXRzLW1lJyxcbiAgICogICB9XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogSW50byB0aGVpciBpbnRlZyB0ZXN0cywgaW5zdGVhZCBvZjpcbiAgICpcbiAgICogYGBgdHNcbiAgICoge1xuICAgKiAgIHJlZ2lvbjogcHJvY2Vzcy5lbnYuQ0RLX0RFRkFVTFRfUkVHSU9OLFxuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBUaGlzIGNhdGNoZXMgdGhhdCBtaXNjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZVJlZ2lvbihhc206IElSZWFkYWJsZUNsb3VkQXNzZW1ibHkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyB0aGlzIGhhcHBlbnMgZm9yIGV4aXN0aW5nIHNuYXBzaG90cywgaW4gdGhhdCBjYXNlIG5vdGhpbmcgdG8gY2hlY2tcbiAgICBpZiAodGhpcy5vcHRpb25zLnJlZ2lvbiA9PT0gVU5LTk9XTl9SRUdJT04pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHN0YWNrIG9mIGFzbS5jbG91ZEFzc2VtYmx5LnN0YWNrc1JlY3Vyc2l2ZWx5KSB7XG4gICAgICBpZiAoc3RhY2suZW52aXJvbm1lbnQucmVnaW9uICE9PSB0aGlzLm9wdGlvbnMucmVnaW9uICYmIHN0YWNrLmVudmlyb25tZW50LnJlZ2lvbiAhPT0gVU5LTk9XTl9SRUdJT04pIHtcbiAgICAgICAgdGhpcy5pb0hvc3Qubm90aWZ5KHtcbiAgICAgICAgICBhY3Rpb246ICdkZXBsb3knLFxuICAgICAgICAgIGNvZGU6ICdDREtfUlVOTkVSX1cwMDAwJyxcbiAgICAgICAgICB0aW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIGxldmVsOiAnd2FybicsXG4gICAgICAgICAgbWVzc2FnZTogYFN0YWNrICR7c3RhY2suZGlzcGxheU5hbWV9IHN5bnRoZXNpemVzIGZvciByZWdpb24gJHtzdGFjay5lbnZpcm9ubWVudC5yZWdpb259LCBldmVuIHRob3VnaCAke3RoaXMub3B0aW9ucy5yZWdpb259IHdhcyByZXF1ZXN0ZWQuIFBsZWFzZSBjb25maWd1cmUgXFxgeyBlbnY6IHsgcmVnaW9uOiBwcm9jZXNzLmVudi5DREtfREVGQVVMVF9SRUdJT04sIGFjY291bnQ6IHByb2Nlc3MuZW52LkNES19ERUZBVUxUX0FDQ09VTlQgfSB9XFxgLCBvciB1c2Ugbm8gZW52IGF0IGFsbC4gRG8gbm90IGhhcmRjb2RlIGEgcmVnaW9uIG9yIGFjY291bnQuYCxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBzdGFja05hbWU6IHN0YWNrLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgc3RhY2tSZWdpb246IHN0YWNrLmVudmlyb25tZW50LnJlZ2lvbixcbiAgICAgICAgICAgIHJlcXVlc3RlZFJlZ2lvbjogdGhpcy5vcHRpb25zLnJlZ2lvbixcbiAgICAgICAgICB9LFxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFuIElvSG9zdCB1c2VkIGluIHRoZSBpbnRlZy1ydW5uZXIgdG8gcHJvdmlkZSBub24taW50ZXJhY3RpdmUgb3V0cHV0XG4gKi9cbmNsYXNzIEludGVnUnVubmVySW9Ib3N0IGV4dGVuZHMgTm9uSW50ZXJhY3RpdmVJb0hvc3Qge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJvcHM6IE5vbkludGVyYWN0aXZlSW9Ib3N0UHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgaXNUVFk6IGZhbHNlLFxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBhc3luYyBub3RpZnkobXNnOiBJb01lc3NhZ2U8dW5rbm93bj4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgY29sb3I7XG4gICAgc3dpdGNoIChtc2cubGV2ZWwpIHtcbiAgICAgIGNhc2UgJ2Vycm9yJzogY29sb3IgPSBjaGFsay5yZWQ7IGJyZWFrO1xuICAgICAgY2FzZSAnd2Fybic6IGNvbG9yID0gY2hhbGsueWVsbG93OyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IGNvbG9yID0gY2hhbGsuZ3JheTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIubm90aWZ5KHtcbiAgICAgIC4uLm1zZyxcbiAgICAgIG1lc3NhZ2U6IGNvbG9yKG1zZy5tZXNzYWdlKSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIElvSG9zdCB0aGF0IGRvZXNuJ3QgZG8gYW55dGhpbmdcbiAqL1xuY2xhc3MgTm9vcElvSG9zdCBpbXBsZW1lbnRzIElJb0hvc3Qge1xuICBwdWJsaWMgYXN5bmMgbm90aWZ5KCk6IFByb21pc2U8dm9pZD4ge1xuICB9XG4gIHB1YmxpYyBhc3luYyByZXF1ZXN0UmVzcG9uc2U8VD4obXNnOiBJb1JlcXVlc3Q8dW5rbm93biwgVD4pOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gbXNnLmRlZmF1bHRSZXNwb25zZTtcbiAgfVxufVxuIl19
|
|
371
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGtpdC1saWIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0b29sa2l0LWxpYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0NBQWtDO0FBQ2xDLG9FQUE2RDtBQUc3RCxzREFBbUo7QUFDbkosK0JBQStCO0FBQy9CLCtCQUErQjtBQUUvQiwrQ0FBbUQ7QUF1RW5EOztHQUVHO0FBQ0gsTUFBYSxzQkFBc0I7SUFDaEIsT0FBTyxDQUFVO0lBQ2pCLE9BQU8sQ0FBMEI7SUFDakMsVUFBVSxDQUFVO0lBQ3BCLE1BQU0sQ0FBb0I7SUFDMUIsWUFBWSxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO0lBRTNELFlBQW1CLE9BQWdDO1FBQ2pELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUM7UUFFOUMsd0VBQXdFO1FBQ3hFLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUV0QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRXpDLG9FQUFvRTtRQUNwRSx1REFBdUQ7UUFDdkQsdUNBQXVDO1FBQ3ZDLEVBQUU7UUFDRixjQUFjO1FBQ2QsK0RBQStEO1FBQy9ELFVBQVU7UUFDVixtQkFBbUI7UUFFbkIsd0ZBQXdGO1FBQ3hGLG1CQUFtQjtRQUNuQixxQkFBcUI7UUFDckIsa0JBQWtCO0lBQ3BCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssa0JBQWtCLENBQUMsYUFBNkI7UUFDdEQsTUFBTSxPQUFPLEdBQUcsYUFBYSxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUMvRCxNQUFNLEtBQUssR0FBRyxhQUFhLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3pELE1BQU0sWUFBWSxHQUFHLGFBQWEsRUFBRSxZQUFZLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDOUUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUUzRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUkscUJBQU8sQ0FBQztZQUMxQixNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLEVBQUU7WUFDeEQsU0FBUyxFQUFFO2dCQUNULGVBQWUsRUFBRSw2QkFBZSxDQUFDLGdCQUFnQixDQUFDO29CQUNoRCxPQUFPO29CQUNQLGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07aUJBQ25DLENBQUM7Z0JBQ0YsV0FBVyxFQUFFO29CQUNYLEtBQUssRUFBRSxnQ0FBa0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxDQUFDO2lCQUM3RTthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBcUI7UUFDdEMsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztZQUNoQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07WUFDdEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3hCLE9BQU8sRUFBRSxLQUFLO1lBQ2QseUJBQXlCLEVBQUUsS0FBSztZQUNoQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDaEIsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixZQUFZLEVBQUUsS0FBSztZQUNuQixhQUFhLEVBQUUsS0FBSztTQUNyQixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUM7OztnQkFDSCxNQUFZLElBQUksa0NBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUU7b0JBQzlDLGNBQWMsRUFBRSxLQUFLO29CQUNyQixNQUFNLEVBQUU7d0JBQ04sUUFBUSxFQUFFLG9DQUFzQixDQUFDLFVBQVU7d0JBQzNDLFdBQVcsRUFBRSxLQUFLO3FCQUNuQjtpQkFDRixDQUFDLE9BQUEsQ0FBQztnQkFDSCxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7Ozs7Ozs7Ozs7O1NBQ2pDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQztnQkFDL0MsMENBQTBDO2dCQUMxQyxtR0FBbUc7Z0JBQ25HLDBGQUEwRjtnQkFDMUYsZ0dBQWdHO2dCQUNoRyxPQUFPO1lBQ1QsQ0FBQztZQUNELE1BQU0sQ0FBQyxDQUFDO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBb0I7UUFDcEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pELE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsQyxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ3BDLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQztTQUNwQyxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFzQjtRQUN4QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakQsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUU7WUFDdEMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3hCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztZQUM1QixNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7WUFDbkMsZ0JBQWdCLEVBQUU7Z0JBQ2hCLE1BQU0sRUFBRSxZQUFZO2FBQ3JCO1lBQ0QsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDN0csQ0FBQyxDQUFDO1FBQ0gsT0FBTztZQUNMLGNBQWMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7U0FDN0QsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBcUIsRUFBRSxNQUFvQjtRQUM1RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakQsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUU7Z0JBQ3RDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztnQkFDeEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO2dCQUM1QixNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7Z0JBQ25DLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxnQkFBZ0I7YUFDM0MsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDN0IsQ0FBQztRQUFDLE9BQU8sQ0FBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUM7Z0JBQ3JCLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsQ0FBQztZQUNELElBQUksTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUNwQixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBdUI7UUFDMUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pELE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVsQyxNQUFNLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFO1lBQ3hCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztZQUN4QixNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7U0FDcEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFrQjtRQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBRUQsMkZBQTJGO1FBQzNGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUUsSUFBSSxFQUFFLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUNyRixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDO1FBQ1gsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbkIsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUMxQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQjtZQUMvQyxNQUFNO1lBQ04sT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3hCLFlBQVksRUFBRSxJQUFJLDJCQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUNoRCx5QkFBeUIsRUFBRSxPQUFPLENBQUMseUJBQXlCO1lBQzVELEdBQUcsRUFBRTtnQkFDSCxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRztnQkFDbkIsR0FBRyxPQUFPLENBQUMsR0FBRzthQUNmO1lBQ0QsWUFBWSxFQUFFO2dCQUNaLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztnQkFDcEIsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixJQUFJLEtBQUs7Z0JBQ25ELFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWSxJQUFJLEtBQUs7Z0JBQzNDLGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYSxJQUFJLEtBQUs7Z0JBQzdDLFlBQVksRUFBRSxPQUFPLENBQUMsT0FBTzthQUM5QjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLGFBQWEsQ0FBQyxPQUErRDtRQUNuRixPQUFPO1lBQ0wsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLG9DQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsb0NBQXNCLENBQUMsa0JBQWtCO1lBQ3JHLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ2xDLE1BQU0sRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxrQ0FBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGtDQUFvQixDQUFDLFFBQVE7U0FDeEYsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXNCRztJQUNLLEtBQUssQ0FBQyxjQUFjLENBQUMsR0FBMkI7UUFDdEQscUVBQXFFO1FBQ3JFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssbUNBQWMsRUFBRSxDQUFDO1lBQzNDLE9BQU87UUFDVCxDQUFDO1FBRUQsS0FBSyxNQUFNLEtBQUssSUFBSSxHQUFHLENBQUMsYUFBYSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDeEQsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxtQ0FBYyxFQUFFLENBQUM7Z0JBQ3BHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO29CQUNqQixNQUFNLEVBQUUsUUFBUTtvQkFDaEIsSUFBSSxFQUFFLGtCQUFrQjtvQkFDeEIsSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFO29CQUNoQixLQUFLLEVBQUUsTUFBTTtvQkFDYixPQUFPLEVBQUUsU0FBUyxLQUFLLENBQUMsV0FBVywyQkFBMkIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLGlCQUFpQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sZ01BQWdNO29CQUMxVCxJQUFJLEVBQUU7d0JBQ0osU0FBUyxFQUFFLEtBQUssQ0FBQyxXQUFXO3dCQUM1QixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNO3dCQUNyQyxlQUFlLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO3FCQUNyQztpQkFDRixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLEVBQUUsQ0FBQzt3QkFDTixzQ0FBc0M7d0JBQ3RDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ25CLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXRSRCx3REFzUkM7QUFFRDs7R0FFRztBQUNILE1BQU0saUJBQWtCLFNBQVEsa0NBQW9CO0lBQ2xELFlBQW1CLFFBQW1DLEVBQUU7UUFDdEQsS0FBSyxDQUFDO1lBQ0osR0FBRyxLQUFLO1lBQ1IsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ00sS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUF1QjtRQUN6QyxJQUFJLEtBQUssQ0FBQztRQUNWLFFBQVEsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2xCLEtBQUssT0FBTztnQkFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQztnQkFBQyxNQUFNO1lBQ3ZDLEtBQUssTUFBTTtnQkFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFBQyxNQUFNO1lBQ3pDLE9BQU8sQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQzlCLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDbEIsR0FBRyxHQUFHO1lBQ04sT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1NBQzVCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVO0lBQ1AsS0FBSyxDQUFDLE1BQU07SUFDbkIsQ0FBQztJQUNNLEtBQUssQ0FBQyxlQUFlLENBQUksR0FBMEI7UUFDeEQsT0FBTyxHQUFHLENBQUMsZUFBZSxDQUFDO0lBQzdCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IFVOS05PV05fUkVHSU9OIH0gZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktYXBpJztcbmltcG9ydCB0eXBlIHsgRGVmYXVsdENka09wdGlvbnMgfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEvbGliL2ludGVnLXRlc3RzJztcbmltcG9ydCB0eXBlIHsgSUNsb3VkQXNzZW1ibHlTb3VyY2UsIElJb0hvc3QsIElvTWVzc2FnZSwgSW9SZXF1ZXN0LCBJUmVhZGFibGVDbG91ZEFzc2VtYmx5LCBOb25JbnRlcmFjdGl2ZUlvSG9zdFByb3BzLCBTdGFja1NlbGVjdG9yIH0gZnJvbSAnQGF3cy1jZGsvdG9vbGtpdC1saWInO1xuaW1wb3J0IHsgQmFzZUNyZWRlbnRpYWxzLCBFeHBhbmRTdGFja1NlbGVjdGlvbiwgTWVtb3J5Q29udGV4dCwgTm9uSW50ZXJhY3RpdmVJb0hvc3QsIFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3ksIFRvb2xraXQgfSBmcm9tICdAYXdzLWNkay90b29sa2l0LWxpYic7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgdHlwZSB7IENka0RlcGxveVJlc3VsdCwgQ3hPcHRpb25zLCBEZXBsb3lPcHRpb25zLCBEZXN0cm95T3B0aW9ucywgSUNkaywgTGlzdE9wdGlvbnMsIFN5bnRoT3B0aW9ucywgV2F0Y2hFdmVudHMsIFdhdGNoT3B0aW9ucyB9IGZyb20gJy4vY2RrLWludGVyZmFjZSc7XG5pbXBvcnQgeyBQcm94eUFnZW50UHJvdmlkZXIgfSBmcm9tICcuL3Byb3h5LWFnZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBUb29sa2l0TGliRW5naW5lT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0b3J5IHRvIHJ1biB0aGUgY2RrIGNvbW1hbmRzIGZyb21cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtpbmdEaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0XG4gICAqIGluIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQgdGhhdCB3aWxsIGJlIHJ1bm5pbmdcbiAgICogdGhlIGNkayBhcHBcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIGVudiB2YXJzXG4gICAqL1xuICByZWFkb25seSBlbnY/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogU2hvdyB0aGUgb3V0cHV0IGZyb20gcnVubmluZyB0aGUgQ0RLIENMSVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2hvd091dHB1dD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSByZWdpb24gdGhlIENESyBhcHAgc2hvdWxkIHN5bnRoZXNpemUgaXRzZWxmIGZvclxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgcHJvZmlsZSB0byB1c2Ugd2hlbiBhdXRoZW50aWNhdGluZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHByb2ZpbGUgaXMgcGFzc2VkLCB0aGUgZGVmYXVsdCBwcm9maWxlIGlzIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZSB0aGUgaW5kaWNhdGVkIHByb3h5XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcHJveHksIFByb3h5QWdlbnQgYXV0by1kZXRlY3RzIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAqL1xuICByZWFkb25seSBwcm94eT86IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byBDQSBjZXJ0aWZpY2F0ZSB0byB1c2Ugd2hlbiB2YWxpZGF0aW5nIEhUVFBTIHJlcXVlc3RzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gYWRkaXRpb25hbCBDQSBidW5kbGVcbiAgICovXG4gIHJlYWRvbmx5IGNhQnVuZGxlUGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQZXItYWN0aW9uIG9wdGlvbnMgdGhhdCBjYW4gb3ZlcnJpZGUgdGhlIGVuZ2luZSBkZWZhdWx0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBBV1MgcHJvZmlsZSB0byB1c2VcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZSB0aGUgaW5kaWNhdGVkIHByb3h5XG4gICAqL1xuICByZWFkb25seSBwcm94eT86IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byBDQSBjZXJ0aWZpY2F0ZSB0byB1c2Ugd2hlbiB2YWxpZGF0aW5nIEhUVFBTIHJlcXVlc3RzXG4gICAqL1xuICByZWFkb25seSBjYUJ1bmRsZVBhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBydW5uZXIgZW5naW5lIHBvd2VyZWQgZGlyZWN0bHkgYnkgdGhlIHRvb2xraXQtbGliXG4gKi9cbmV4cG9ydCBjbGFzcyBUb29sa2l0TGliUnVubmVyRW5naW5lIGltcGxlbWVudHMgSUNkayB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdG9vbGtpdDogVG9vbGtpdDtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBUb29sa2l0TGliRW5naW5lT3B0aW9ucztcbiAgcHJpdmF0ZSByZWFkb25seSBzaG93T3V0cHV0OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IGlvSG9zdDogSW50ZWdSdW5uZXJJb0hvc3Q7XG4gIHByaXZhdGUgcmVhZG9ubHkgdG9vbGtpdENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFRvb2xraXQ+KCk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFRvb2xraXRMaWJFbmdpbmVPcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnNob3dPdXRwdXQgPSBvcHRpb25zLnNob3dPdXRwdXQgPz8gZmFsc2U7XG5cbiAgICAvLyBXZSBhbHdheXMgY3JlYXRlIHRoaXMgZm9yIG91cnNlbHZlcyB0byBlbWl0IHdhcm5pbmdzLCBidXQgcG90ZW50aWFsbHlcbiAgICAvLyBkb24ndCBwYXNzIGl0IHRvIHRoZSB0b29sa2l0LlxuICAgIHRoaXMuaW9Ib3N0ID0gbmV3IEludGVnUnVubmVySW9Ib3N0KCk7XG5cbiAgICB0aGlzLnRvb2xraXQgPSB0aGlzLmdldE9yQ3JlYXRlVG9vbGtpdCgpO1xuXG4gICAgLy8gQFRPRE8gLSB0aGVzZSBvcHRpb25zIGFyZSBjdXJyZW50bHkgYXZhaWxhYmxlIG9uIHRoZSBhY3Rpb24gY2FsbHNcbiAgICAvLyBidXQgdG9vbGtpdC1saWIgbmVlZHMgdGhlbSBhdCB0aGUgY29uc3RydWN0b3IgbGV2ZWwuXG4gICAgLy8gTmVlZCB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZW0uXG4gICAgLy9cbiAgICAvLyBWYWxpZGF0aW9uc1xuICAgIC8vICAtIGFzc2VtYmx5RmFpbHVyZUF0OiBvcHRpb25zLnN0cmljdCA/PyBvcHRpb25zLmlnbm9yZUVycm9yc1xuICAgIC8vIExvZ2dpbmdcbiAgICAvLyAgLSBvcHRpb25zLmNvbG9yXG5cbiAgICAvLyBAVE9ETyAtIHNpbWlsYXIgdG8gdGhlIGFib3ZlLCBidXQgaW4gdG9vbGtpdC1saWIgdGhlc2Ugb3B0aW9ucyB3b3VsZCBnbyBvbiB0aGUgSW9Ib3N0XG4gICAgLy8gIC0gb3B0aW9ucy50cmFjZVxuICAgIC8vICAtIG9wdGlvbnMudmVyYm9zZVxuICAgIC8vICAtIG9wdGlvbnMuanNvblxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBvciBjcmVhdGUgYSBUb29sa2l0IGluc3RhbmNlIGZvciB0aGUgZ2l2ZW4gYWN0aW9uIG9wdGlvbnMuXG4gICAqIENhY2hlcyBpbnN0YW5jZXMgYnkgdGhlaXIgcmVzb2x2ZWQgY29uZmlndXJhdGlvbiB0byBhdm9pZCBjcmVhdGluZ1xuICAgKiBkdXBsaWNhdGUgVG9vbGtpdCBpbnN0YW5jZXMgZm9yIGlkZW50aWNhbCBzZXR0aW5ncy5cbiAgICovXG4gIHByaXZhdGUgZ2V0T3JDcmVhdGVUb29sa2l0KGFjdGlvbk9wdGlvbnM/OiBBY3Rpb25PcHRpb25zKTogVG9vbGtpdCB7XG4gICAgY29uc3QgcHJvZmlsZSA9IGFjdGlvbk9wdGlvbnM/LnByb2ZpbGUgPz8gdGhpcy5vcHRpb25zLnByb2ZpbGU7XG4gICAgY29uc3QgcHJveHkgPSBhY3Rpb25PcHRpb25zPy5wcm94eSA/PyB0aGlzLm9wdGlvbnMucHJveHk7XG4gICAgY29uc3QgY2FCdW5kbGVQYXRoID0gYWN0aW9uT3B0aW9ucz8uY2FCdW5kbGVQYXRoID8/IHRoaXMub3B0aW9ucy5jYUJ1bmRsZVBhdGg7XG4gICAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoW3Byb2ZpbGUsIHByb3h5LCBjYUJ1bmRsZVBhdGhdKTtcblxuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMudG9vbGtpdENhY2hlLmdldChrZXkpO1xuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgdG9vbGtpdCA9IG5ldyBUb29sa2l0KHtcbiAgICAgIGlvSG9zdDogdGhpcy5zaG93T3V0cHV0ID8gdGhpcy5pb0hvc3QgOiBuZXcgTm9vcElvSG9zdCgpLFxuICAgICAgc2RrQ29uZmlnOiB7XG4gICAgICAgIGJhc2VDcmVkZW50aWFsczogQmFzZUNyZWRlbnRpYWxzLmF3c0NsaUNvbXBhdGlibGUoe1xuICAgICAgICAgIHByb2ZpbGUsXG4gICAgICAgICAgZGVmYXVsdFJlZ2lvbjogdGhpcy5vcHRpb25zLnJlZ2lvbixcbiAgICAgICAgfSksXG4gICAgICAgIGh0dHBPcHRpb25zOiB7XG4gICAgICAgICAgYWdlbnQ6IFByb3h5QWdlbnRQcm92aWRlci5nZXRPckNyZWF0ZSh7IHByb3h5QWRkcmVzczogcHJveHksIGNhQnVuZGxlUGF0aCB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLnRvb2xraXRDYWNoZS5zZXQoa2V5LCB0b29sa2l0KTtcbiAgICByZXR1cm4gdG9vbGtpdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW50aGVzaXplcyB0aGUgQ0RLIGFwcFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHN5bnRoKG9wdGlvbnM6IFN5bnRoT3B0aW9ucykge1xuICAgIGNvbnN0IGN4ID0gYXdhaXQgdGhpcy5jeCh7XG4gICAgICBhcHA6IG9wdGlvbnMuYXBwLFxuICAgICAgb3V0cHV0OiBvcHRpb25zLm91dHB1dCxcbiAgICAgIGNvbnRleHQ6IG9wdGlvbnMuY29udGV4dCxcbiAgICAgIGxvb2t1cHM6IGZhbHNlLFxuICAgICAgcmVzb2x2ZURlZmF1bHRFbnZpcm9ubWVudDogZmFsc2UsXG4gICAgICBlbnY6IG9wdGlvbnMuZW52LFxuICAgICAgdmVyc2lvblJlcG9ydGluZzogZmFsc2UsXG4gICAgICBwYXRoTWV0YWRhdGE6IGZhbHNlLFxuICAgICAgYXNzZXRNZXRhZGF0YTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdXNpbmcgbG9jayA9IGF3YWl0IHRoaXMudG9vbGtpdC5zeW50aChjeCwge1xuICAgICAgICB2YWxpZGF0ZVN0YWNrczogZmFsc2UsXG4gICAgICAgIHN0YWNrczoge1xuICAgICAgICAgIHN0cmF0ZWd5OiBTdGFja1NlbGVjdGlvblN0cmF0ZWd5LkFMTF9TVEFDS1MsXG4gICAgICAgICAgZmFpbE9uRW1wdHk6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlUmVnaW9uKGxvY2spO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgaWYgKGUubWVzc2FnZS5pbmNsdWRlcygnTWlzc2luZyBjb250ZXh0IGtleXMnKSkge1xuICAgICAgICAvLyBAVE9ETyAtIHNpbGVudGx5IGlnbm9yZSBtaXNzaW5nIGNvbnRleHRcbiAgICAgICAgLy8gVGhpcyBpcyBhY3R1YWxseSBhbiB1bmRlZmluZWQgY2FzZSBpbiB0aGUgb2xkIGltcGxlbWVudGF0aW9uLCB3aGljaCBkb2Vzbid0IHVzZSB0aGUgdG9vbGtpdCBjb2RlXG4gICAgICAgIC8vIGFuZCB3b24ndCBmYWlsIGZvciBtaXNzaW5nIGNvbnRleHQuIFRvIHByZXNlcnZlIGV4aXN0aW5nIGJlaGF2aW9yLCB3ZSBkbyB0aGUgc2FtZSBoZXJlLlxuICAgICAgICAvLyBIb3dldmVyIGluIGZ1dHVyZSB3ZSBuZWVkIHRvIGZpbmQgYSB3YXkgZm9yIGludGVnIHRlc3RzIHRvIHByb3ZpZGUgY29udGV4dCB0aHJvdWdoIHNuYXBzaG90cy5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdHMgdGhlIHN0YWNrcyBpbiB0aGUgQ0RLIGFwcFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxpc3Qob3B0aW9uczogTGlzdE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgdG9vbGtpdCA9IHRoaXMuZ2V0T3JDcmVhdGVUb29sa2l0KG9wdGlvbnMpO1xuICAgIGNvbnN0IGN4ID0gYXdhaXQgdGhpcy5jeChvcHRpb25zKTtcbiAgICBjb25zdCBzdGFja3MgPSBhd2FpdCB0b29sa2l0Lmxpc3QoY3gsIHtcbiAgICAgIHN0YWNrczogdGhpcy5zdGFja1NlbGVjdG9yKG9wdGlvbnMpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN0YWNrcy5tYXAocyA9PiBzLm5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlcGxveXMgdGhlIENESyBhcHBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZXBsb3kob3B0aW9uczogRGVwbG95T3B0aW9ucyk6IFByb21pc2U8Q2RrRGVwbG95UmVzdWx0PiB7XG4gICAgY29uc3QgdG9vbGtpdCA9IHRoaXMuZ2V0T3JDcmVhdGVUb29sa2l0KG9wdGlvbnMpO1xuICAgIGNvbnN0IGN4ID0gYXdhaXQgdGhpcy5jeChvcHRpb25zKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0b29sa2l0LmRlcGxveShjeCwge1xuICAgICAgcm9sZUFybjogb3B0aW9ucy5yb2xlQXJuLFxuICAgICAgdHJhY2VMb2dzOiBvcHRpb25zLnRyYWNlTG9ncyxcbiAgICAgIHN0YWNrczogdGhpcy5zdGFja1NlbGVjdG9yKG9wdGlvbnMpLFxuICAgICAgZGVwbG95bWVudE1ldGhvZDoge1xuICAgICAgICBtZXRob2Q6ICdjaGFuZ2Utc2V0JyxcbiAgICAgIH0sXG4gICAgICBvdXRwdXRzRmlsZTogb3B0aW9ucy5vdXRwdXRzRmlsZSA/IHBhdGguam9pbih0aGlzLm9wdGlvbnMud29ya2luZ0RpcmVjdG9yeSwgb3B0aW9ucy5vdXRwdXRzRmlsZSkgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlbGV0ZUZhaWx1cmVzOiByZXN1bHQuc3RhY2tzLmZsYXRNYXAocyA9PiBzLmRlbGV0ZUZhaWx1cmVzKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFdhdGNoZXMgdGhlIENESyBhcHAgZm9yIGNoYW5nZXMgYW5kIGRlcGxveXMgdGhlbSBhdXRvbWF0aWNhbGx5XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgd2F0Y2gob3B0aW9uczogV2F0Y2hPcHRpb25zLCBldmVudHM/OiBXYXRjaEV2ZW50cykge1xuICAgIGNvbnN0IHRvb2xraXQgPSB0aGlzLmdldE9yQ3JlYXRlVG9vbGtpdChvcHRpb25zKTtcbiAgICBjb25zdCBjeCA9IGF3YWl0IHRoaXMuY3gob3B0aW9ucyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHdhdGNoZXIgPSBhd2FpdCB0b29sa2l0LndhdGNoKGN4LCB7XG4gICAgICAgIHJvbGVBcm46IG9wdGlvbnMucm9sZUFybixcbiAgICAgICAgdHJhY2VMb2dzOiBvcHRpb25zLnRyYWNlTG9ncyxcbiAgICAgICAgc3RhY2tzOiB0aGlzLnN0YWNrU2VsZWN0b3Iob3B0aW9ucyksXG4gICAgICAgIGRlcGxveW1lbnRNZXRob2Q6IG9wdGlvbnMuZGVwbG95bWVudE1ldGhvZCxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgd2F0Y2hlci53YWl0Rm9yRW5kKCk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgaWYgKGV2ZW50cz8ub25TdGRlcnIpIHtcbiAgICAgICAgZXZlbnRzLm9uU3RkZXJyKFN0cmluZyhlKSk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnRzPy5vbkNsb3NlKSB7XG4gICAgICAgIGV2ZW50cy5vbkNsb3NlKDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudHM/Lm9uQ2xvc2UpIHtcbiAgICAgIGV2ZW50cy5vbkNsb3NlKDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgQ0RLIGFwcFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRlc3Ryb3kob3B0aW9uczogRGVzdHJveU9wdGlvbnMpIHtcbiAgICBjb25zdCB0b29sa2l0ID0gdGhpcy5nZXRPckNyZWF0ZVRvb2xraXQob3B0aW9ucyk7XG4gICAgY29uc3QgY3ggPSBhd2FpdCB0aGlzLmN4KG9wdGlvbnMpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC5kZXN0cm95KGN4LCB7XG4gICAgICByb2xlQXJuOiBvcHRpb25zLnJvbGVBcm4sXG4gICAgICBzdGFja3M6IHRoaXMuc3RhY2tTZWxlY3RvcihvcHRpb25zKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgQ2xvdWQgQXNzZW1ibHkgU291cmNlIGZyb20gdGhlIHByb3ZpZGVkIG9wdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGN4KG9wdGlvbnM6IEN4T3B0aW9ucyk6IFByb21pc2U8SUNsb3VkQXNzZW1ibHlTb3VyY2U+IHtcbiAgICBpZiAoIW9wdGlvbnMuYXBwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGFwcCBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHRoZSBhcHAgaXMgYSBwYXRoIHRvIGV4aXN0aW5nIHNuYXBzaG90IGFuZCB0aGVuIHVzZSBpdCBhcyBhbiBhc3NlbWJseSBkaXJlY3RvcnlcbiAgICBjb25zdCBwb3RlbnRpYWxDeFBhdGggPSBwYXRoLmpvaW4odGhpcy5vcHRpb25zLndvcmtpbmdEaXJlY3RvcnksIG9wdGlvbnMuYXBwKTtcbiAgICBpZiAoZnMucGF0aEV4aXN0c1N5bmMocG90ZW50aWFsQ3hQYXRoKSAmJiBmcy5zdGF0U3luYyhwb3RlbnRpYWxDeFBhdGgpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvb2xraXQuZnJvbUFzc2VtYmx5RGlyZWN0b3J5KHBvdGVudGlhbEN4UGF0aCk7XG4gICAgfVxuXG4gICAgbGV0IG91dGRpcjtcbiAgICBpZiAob3B0aW9ucy5vdXRwdXQpIHtcbiAgICAgIG91dGRpciA9IHBhdGguam9pbih0aGlzLm9wdGlvbnMud29ya2luZ0RpcmVjdG9yeSwgb3B0aW9ucy5vdXRwdXQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRvb2xraXQuZnJvbUNka0FwcChvcHRpb25zLmFwcCwge1xuICAgICAgd29ya2luZ0RpcmVjdG9yeTogdGhpcy5vcHRpb25zLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICBvdXRkaXIsXG4gICAgICBsb29rdXBzOiBvcHRpb25zLmxvb2t1cHMsXG4gICAgICBjb250ZXh0U3RvcmU6IG5ldyBNZW1vcnlDb250ZXh0KG9wdGlvbnMuY29udGV4dCksXG4gICAgICByZXNvbHZlRGVmYXVsdEVudmlyb25tZW50OiBvcHRpb25zLnJlc29sdmVEZWZhdWx0RW52aXJvbm1lbnQsXG4gICAgICBlbnY6IHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zLmVudixcbiAgICAgICAgLi4ub3B0aW9ucy5lbnYsXG4gICAgICB9LFxuICAgICAgc3ludGhPcHRpb25zOiB7XG4gICAgICAgIGRlYnVnOiBvcHRpb25zLmRlYnVnLFxuICAgICAgICB2ZXJzaW9uUmVwb3J0aW5nOiBvcHRpb25zLnZlcnNpb25SZXBvcnRpbmcgPz8gZmFsc2UsXG4gICAgICAgIHBhdGhNZXRhZGF0YTogb3B0aW9ucy5wYXRoTWV0YWRhdGEgPz8gZmFsc2UsXG4gICAgICAgIGFzc2V0TWV0YWRhdGE6IG9wdGlvbnMuYXNzZXRNZXRhZGF0YSA/PyBmYWxzZSxcbiAgICAgICAgYXNzZXRTdGFnaW5nOiBvcHRpb25zLnN0YWdpbmcsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBTdGFja1NlbGVjdG9yIGZyb20gdGhlIHByb3ZpZGVkIG9wdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIHN0YWNrU2VsZWN0b3Iob3B0aW9uczogRGVmYXVsdENka09wdGlvbnMgJiB7IHJlYWRvbmx5IGV4Y2x1c2l2ZWx5PzogYm9vbGVhbiB9KTogU3RhY2tTZWxlY3RvciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0cmF0ZWd5OiBvcHRpb25zLmFsbCA/IFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3kuQUxMX1NUQUNLUyA6IFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3kuUEFUVEVSTl9NVVNUX01BVENILFxuICAgICAgcGF0dGVybnM6IG9wdGlvbnMuc3RhY2tzID8/IFsnKionXSxcbiAgICAgIGV4cGFuZDogb3B0aW9ucy5leGNsdXNpdmVseSA/IEV4cGFuZFN0YWNrU2VsZWN0aW9uLk5PTkUgOiBFeHBhbmRTdGFja1NlbGVjdGlvbi5VUFNUUkVBTSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoYXQgdGhlIHJlZ2lvbnMgZm9yIHRoZSBzdGFja3MgaW4gdGhlIENsb3VkQXNzZW1ibHkgbWF0Y2ggdGhlIHJlZ2lvbnMgcmVxdWVzdGVkIG9uIHRoZSBlbmdpbmVcbiAgICpcbiAgICogVGhpcyBwcmV2ZW50cyBtaXNjb25maWd1cmF0aW9uIG9mIHRoZSBpbnRlZyB0ZXN0IGFwcC4gUGVvcGxlIHRlbmQgdG8gcHV0OlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBuZXcgU3RhY2soYXBwLCAnU3RhY2snLCB7XG4gICAqICAgZW52OiB7XG4gICAqICAgICByZWdpb246ICdzb21lLXJlZ2lvbi10aGF0LXN1aXRzLW1lJyxcbiAgICogICB9XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogSW50byB0aGVpciBpbnRlZyB0ZXN0cywgaW5zdGVhZCBvZjpcbiAgICpcbiAgICogYGBgdHNcbiAgICoge1xuICAgKiAgIHJlZ2lvbjogcHJvY2Vzcy5lbnYuQ0RLX0RFRkFVTFRfUkVHSU9OLFxuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBUaGlzIGNhdGNoZXMgdGhhdCBtaXNjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZVJlZ2lvbihhc206IElSZWFkYWJsZUNsb3VkQXNzZW1ibHkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyB0aGlzIGhhcHBlbnMgZm9yIGV4aXN0aW5nIHNuYXBzaG90cywgaW4gdGhhdCBjYXNlIG5vdGhpbmcgdG8gY2hlY2tcbiAgICBpZiAodGhpcy5vcHRpb25zLnJlZ2lvbiA9PT0gVU5LTk9XTl9SRUdJT04pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHN0YWNrIG9mIGFzbS5jbG91ZEFzc2VtYmx5LnN0YWNrc1JlY3Vyc2l2ZWx5KSB7XG4gICAgICBpZiAoc3RhY2suZW52aXJvbm1lbnQucmVnaW9uICE9PSB0aGlzLm9wdGlvbnMucmVnaW9uICYmIHN0YWNrLmVudmlyb25tZW50LnJlZ2lvbiAhPT0gVU5LTk9XTl9SRUdJT04pIHtcbiAgICAgICAgdGhpcy5pb0hvc3Qubm90aWZ5KHtcbiAgICAgICAgICBhY3Rpb246ICdkZXBsb3knLFxuICAgICAgICAgIGNvZGU6ICdDREtfUlVOTkVSX1cwMDAwJyxcbiAgICAgICAgICB0aW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIGxldmVsOiAnd2FybicsXG4gICAgICAgICAgbWVzc2FnZTogYFN0YWNrICR7c3RhY2suZGlzcGxheU5hbWV9IHN5bnRoZXNpemVzIGZvciByZWdpb24gJHtzdGFjay5lbnZpcm9ubWVudC5yZWdpb259LCBldmVuIHRob3VnaCAke3RoaXMub3B0aW9ucy5yZWdpb259IHdhcyByZXF1ZXN0ZWQuIFBsZWFzZSBjb25maWd1cmUgXFxgeyBlbnY6IHsgcmVnaW9uOiBwcm9jZXNzLmVudi5DREtfREVGQVVMVF9SRUdJT04sIGFjY291bnQ6IHByb2Nlc3MuZW52LkNES19ERUZBVUxUX0FDQ09VTlQgfSB9XFxgLCBvciB1c2Ugbm8gZW52IGF0IGFsbC4gRG8gbm90IGhhcmRjb2RlIGEgcmVnaW9uIG9yIGFjY291bnQuYCxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBzdGFja05hbWU6IHN0YWNrLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgc3RhY2tSZWdpb246IHN0YWNrLmVudmlyb25tZW50LnJlZ2lvbixcbiAgICAgICAgICAgIHJlcXVlc3RlZFJlZ2lvbjogdGhpcy5vcHRpb25zLnJlZ2lvbixcbiAgICAgICAgICB9LFxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFuIElvSG9zdCB1c2VkIGluIHRoZSBpbnRlZy1ydW5uZXIgdG8gcHJvdmlkZSBub24taW50ZXJhY3RpdmUgb3V0cHV0XG4gKi9cbmNsYXNzIEludGVnUnVubmVySW9Ib3N0IGV4dGVuZHMgTm9uSW50ZXJhY3RpdmVJb0hvc3Qge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJvcHM6IE5vbkludGVyYWN0aXZlSW9Ib3N0UHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgaXNUVFk6IGZhbHNlLFxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBhc3luYyBub3RpZnkobXNnOiBJb01lc3NhZ2U8dW5rbm93bj4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgY29sb3I7XG4gICAgc3dpdGNoIChtc2cubGV2ZWwpIHtcbiAgICAgIGNhc2UgJ2Vycm9yJzogY29sb3IgPSBjaGFsay5yZWQ7IGJyZWFrO1xuICAgICAgY2FzZSAnd2Fybic6IGNvbG9yID0gY2hhbGsueWVsbG93OyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IGNvbG9yID0gY2hhbGsuZ3JheTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIubm90aWZ5KHtcbiAgICAgIC4uLm1zZyxcbiAgICAgIG1lc3NhZ2U6IGNvbG9yKG1zZy5tZXNzYWdlKSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIElvSG9zdCB0aGF0IGRvZXNuJ3QgZG8gYW55dGhpbmdcbiAqL1xuY2xhc3MgTm9vcElvSG9zdCBpbXBsZW1lbnRzIElJb0hvc3Qge1xuICBwdWJsaWMgYXN5bmMgbm90aWZ5KCk6IFByb21pc2U8dm9pZD4ge1xuICB9XG4gIHB1YmxpYyBhc3luYyByZXF1ZXN0UmVzcG9uc2U8VD4obXNnOiBJb1JlcXVlc3Q8dW5rbm93biwgVD4pOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gbXNnLmRlZmF1bHRSZXNwb25zZTtcbiAgfVxufVxuIl19
|
package/lib/index.js
CHANGED
|
@@ -6,11 +6,20 @@ var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
|
6
6
|
var __getProtoOf = Object.getPrototypeOf;
|
|
7
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
8
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
9
|
-
var __esm = (fn, res) => function __init() {
|
|
10
|
-
|
|
9
|
+
var __esm = (fn, res, err) => function __init() {
|
|
10
|
+
if (err) throw err[0];
|
|
11
|
+
try {
|
|
12
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
13
|
+
} catch (e) {
|
|
14
|
+
throw err = [e], e;
|
|
15
|
+
}
|
|
11
16
|
};
|
|
12
17
|
var __commonJS = (cb, mod) => function __require() {
|
|
13
|
-
|
|
18
|
+
try {
|
|
19
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
20
|
+
} catch (e) {
|
|
21
|
+
throw mod = 0, e;
|
|
22
|
+
}
|
|
14
23
|
};
|
|
15
24
|
var __export = (target, all) => {
|
|
16
25
|
for (var name in all)
|
|
@@ -5469,9 +5478,11 @@ async function runIntegrationTestsInParallel(options) {
|
|
|
5469
5478
|
dryRun: options.dryRun,
|
|
5470
5479
|
verbosity: options.verbosity,
|
|
5471
5480
|
updateWorkflow: options.updateWorkflow,
|
|
5481
|
+
updateFromTags: options.updateFromTags,
|
|
5472
5482
|
proxy: options.proxy,
|
|
5473
5483
|
caBundlePath: options.caBundlePath,
|
|
5474
|
-
roleArn: options.roleArn
|
|
5484
|
+
roleArn: options.roleArn,
|
|
5485
|
+
allowDeleteFailures: options.allowDeleteFailures
|
|
5475
5486
|
}], {
|
|
5476
5487
|
on: printResults
|
|
5477
5488
|
});
|
|
@@ -10250,7 +10261,7 @@ function parseCliArgs(args = []) {
|
|
|
10250
10261
|
type: "array",
|
|
10251
10262
|
nargs: 1,
|
|
10252
10263
|
desc: "Use these presets to run integration tests for the selected languages"
|
|
10253
|
-
}).option("app", { type: "string", default: void 0, desc: 'The custom CLI command that will be used to run the test files. You can include {filePath} to specify where in the command the test file path should be inserted. Example: --app="python3.8 {filePath}".' }).option("test-regex", { type: "array", desc: "Detect integration test files matching this JavaScript regex pattern. If used multiple times, all files matching any one of the patterns are detected.", default: [] }).option("proxy", { type: "string", desc: "Use the indicated proxy. Will read from HTTPS_PROXY environment variable if not specified", requiresArg: true }).option("ca-bundle-path", { type: "string", desc: "Path to CA certificate to use when validating HTTPS requests. Will read from AWS_CA_BUNDLE environment variable if not specified", requiresArg: true }).option("unstable", { type: "array", desc: `Opt-in to using unstable features. By using these flags you acknowledge that scope and API of unstable features may change without notice. Specify multiple times for each unstable feature you want to opt-in to. ${availableFeaturesDescription()}`, nargs: 1, default: [] }).option("role-arn", { type: "string", desc: "ARN of the IAM role for CloudFormation to assume during deploy/destroy", requiresArg: true }).strict().parse(args);
|
|
10264
|
+
}).option("app", { type: "string", default: void 0, desc: 'The custom CLI command that will be used to run the test files. You can include {filePath} to specify where in the command the test file path should be inserted. Example: --app="python3.8 {filePath}".' }).option("test-regex", { type: "array", desc: "Detect integration test files matching this JavaScript regex pattern. If used multiple times, all files matching any one of the patterns are detected.", default: [] }).option("proxy", { type: "string", desc: "Use the indicated proxy. Will read from HTTPS_PROXY environment variable if not specified", requiresArg: true }).option("ca-bundle-path", { type: "string", desc: "Path to CA certificate to use when validating HTTPS requests. Will read from AWS_CA_BUNDLE environment variable if not specified", requiresArg: true }).option("unstable", { type: "array", desc: `Opt-in to using unstable features. By using these flags you acknowledge that scope and API of unstable features may change without notice. Specify multiple times for each unstable feature you want to opt-in to. ${availableFeaturesDescription()}`, nargs: 1, default: [] }).option("role-arn", { type: "string", desc: "ARN of the IAM role for CloudFormation to assume during deploy/destroy", requiresArg: true }).option("allow-delete-failures", { type: "boolean", default: false, desc: "Do not fail the test when resources fail to delete during a stack update" }).option("update-from-tags", { type: "string", desc: "Deploy snapshots from the given git tags in sequence before deploying the current code. Implies --force. Only works if snapshots are region-agnostic.", requiresArg: true }).strict().parse(args);
|
|
10254
10265
|
const tests = argv._;
|
|
10255
10266
|
const parallelRegions = arrayFromYargs(argv["parallel-regions"]);
|
|
10256
10267
|
const testRegions = parallelRegions ?? ["us-east-1", "us-east-2", "us-west-2"];
|
|
@@ -10274,6 +10285,10 @@ function parseCliArgs(args = []) {
|
|
|
10274
10285
|
throw new Error("--disable-update-workflow and --[no-]update-workflow cannot be used together");
|
|
10275
10286
|
}
|
|
10276
10287
|
let updateWorkflow = argv["update-workflow"] !== void 0 ? !!argv["update-workflow"] : !argv["disable-update-workflow"];
|
|
10288
|
+
const updateFromTags = argv["update-from-tags"] ? argv["update-from-tags"].split(",").map((t) => t.trim()) : void 0;
|
|
10289
|
+
if (updateFromTags && argv["update-workflow"] === false) {
|
|
10290
|
+
throw new Error("--update-from-tags and --no-update-workflow cannot be used together");
|
|
10291
|
+
}
|
|
10277
10292
|
return {
|
|
10278
10293
|
tests: requestedTests,
|
|
10279
10294
|
app: argv.app,
|
|
@@ -10300,7 +10315,9 @@ function parseCliArgs(args = []) {
|
|
|
10300
10315
|
unstable: arrayFromYargs(argv.unstable) ?? [],
|
|
10301
10316
|
proxy: argv.proxy,
|
|
10302
10317
|
caBundlePath: argv["ca-bundle-path"],
|
|
10303
|
-
roleArn: argv["role-arn"]
|
|
10318
|
+
roleArn: argv["role-arn"],
|
|
10319
|
+
allowDeleteFailures: argv["allow-delete-failures"],
|
|
10320
|
+
updateFromTags
|
|
10304
10321
|
};
|
|
10305
10322
|
}
|
|
10306
10323
|
async function main(args) {
|
|
@@ -10314,6 +10331,9 @@ async function main(args) {
|
|
|
10314
10331
|
}
|
|
10315
10332
|
}
|
|
10316
10333
|
async function run(options) {
|
|
10334
|
+
if (options.updateFromTags) {
|
|
10335
|
+
options.force = true;
|
|
10336
|
+
}
|
|
10317
10337
|
const testsFromArgs = await new IntegrationTests(path2.resolve(options.directory)).fromCliOptions(options);
|
|
10318
10338
|
if (options.list) {
|
|
10319
10339
|
process.stdout.write(testsFromArgs.map((t) => t.discoveryRelativeFileName).join("\n") + "\n");
|
|
@@ -10362,10 +10382,12 @@ async function run(options) {
|
|
|
10362
10382
|
dryRun: options.dryRun,
|
|
10363
10383
|
verbosity: options.verbosity,
|
|
10364
10384
|
updateWorkflow: options.updateWorkflow,
|
|
10385
|
+
updateFromTags: options.updateFromTags,
|
|
10365
10386
|
watch: options.watch,
|
|
10366
10387
|
proxy: options.proxy,
|
|
10367
10388
|
caBundlePath: options.caBundlePath,
|
|
10368
|
-
roleArn: options.roleArn
|
|
10389
|
+
roleArn: options.roleArn,
|
|
10390
|
+
allowDeleteFailures: options.allowDeleteFailures
|
|
10369
10391
|
});
|
|
10370
10392
|
testsSucceeded = success2;
|
|
10371
10393
|
if (options.clean === false) {
|
|
@@ -56,12 +56,28 @@ export interface RunOptions extends CommonOptions {
|
|
|
56
56
|
* @default true
|
|
57
57
|
*/
|
|
58
58
|
readonly updateWorkflow?: boolean;
|
|
59
|
+
/**
|
|
60
|
+
* List of git tags to deploy in sequence before deploying the current code.
|
|
61
|
+
* When provided, replaces the normal merge-base update workflow.
|
|
62
|
+
*
|
|
63
|
+
* @default - use the normal update workflow
|
|
64
|
+
*/
|
|
65
|
+
readonly updateFromTags?: string[];
|
|
59
66
|
/**
|
|
60
67
|
* ARN of the IAM role for CloudFormation to assume during deploy/destroy
|
|
61
68
|
*
|
|
62
69
|
* @default - use the bootstrap cfn-exec role
|
|
63
70
|
*/
|
|
64
71
|
readonly roleArn?: string;
|
|
72
|
+
/**
|
|
73
|
+
* Whether to allow resources that fail to delete during a stack update.
|
|
74
|
+
*
|
|
75
|
+
* When false, the test will fail if CloudFormation skips deleting a resource
|
|
76
|
+
* during a stack update. When true, only a warning is printed.
|
|
77
|
+
*
|
|
78
|
+
* @default false
|
|
79
|
+
*/
|
|
80
|
+
readonly allowDeleteFailures?: boolean;
|
|
65
81
|
}
|
|
66
82
|
/**
|
|
67
83
|
* An integration test runner that orchestrates executing
|
|
@@ -73,6 +89,16 @@ export declare class IntegTestRunner extends IntegRunner {
|
|
|
73
89
|
[testName: string]: TestCase;
|
|
74
90
|
} | undefined>;
|
|
75
91
|
createCdkContextJson(): void;
|
|
92
|
+
/**
|
|
93
|
+
* Checkout the snapshot directory at a specific git ref (tag, commit, branch).
|
|
94
|
+
* Fails fast if the snapshot does not exist at the given ref.
|
|
95
|
+
*/
|
|
96
|
+
private checkoutSnapshotAtRef;
|
|
97
|
+
/**
|
|
98
|
+
* Deploy the snapshot from each git tag in sequence, then let the caller
|
|
99
|
+
* deploy the current code as the final update.
|
|
100
|
+
*/
|
|
101
|
+
private deployFromTags;
|
|
76
102
|
/**
|
|
77
103
|
* When running integration tests with the update path workflow
|
|
78
104
|
* it is important that the snapshot that is deployed is the current snapshot
|