aws-cdk 2.1125.0 → 2.1127.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/THIRD_PARTY_LICENSES +61 -61
- package/build-info.json +2 -2
- package/db.json.gz +0 -0
- package/lib/api-private.d.ts +1 -1
- package/lib/api-private.js +1 -1
- package/lib/cli/cdk-toolkit.d.ts +5 -1
- package/lib/cli/cdk-toolkit.js +417 -278
- package/lib/cli/cli-config.js +14 -2
- package/lib/cli/cli-type-registry.json +30 -2
- package/lib/cli/cli.js +21 -9
- package/lib/cli/convert-to-user-input.js +15 -1
- package/lib/cli/display-version.d.ts +1 -0
- package/lib/cli/display-version.js +5 -4
- package/lib/cli/io-host/cli-io-host.d.ts +84 -5
- package/lib/cli/io-host/cli-io-host.js +130 -17
- package/lib/cli/parse-command-line-arguments.js +18 -2
- package/lib/cli/telemetry/installation-id.d.ts +7 -0
- package/lib/cli/telemetry/installation-id.js +18 -10
- package/lib/cli/telemetry/messages.d.ts +7 -0
- package/lib/cli/telemetry/messages.js +16 -1
- package/lib/cli/telemetry/schema.d.ts +1 -1
- package/lib/cli/telemetry/schema.js +1 -1
- package/lib/cli/telemetry/session.d.ts +36 -1
- package/lib/cli/telemetry/session.js +79 -4
- package/lib/cli/telemetry/telemetry-state.d.ts +18 -0
- package/lib/cli/telemetry/telemetry-state.js +42 -0
- package/lib/cli/user-configuration.d.ts +2 -1
- package/lib/cli/user-configuration.js +16 -5
- package/lib/cli/user-input.d.ts +34 -1
- package/lib/cli/user-input.js +1 -1
- package/lib/cli/util/yargs-helpers.d.ts +9 -0
- package/lib/cli/util/yargs-helpers.js +20 -1
- package/lib/commands/context.js +1 -3
- package/lib/commands/doctor.d.ts +12 -3
- package/lib/commands/doctor.js +19 -4
- package/lib/commands/list-stacks.d.ts +13 -17
- package/lib/commands/list-stacks.js +41 -22
- package/lib/commands/migrate.js +3 -3
- package/lib/index.js +18852 -12410
- package/lib/index_bg.wasm +0 -0
- package/lib/init-templates/.init-version.json +1 -1
- package/lib/init-templates/.recommended-feature-flags.json +3 -1
- package/package.json +14 -13
package/lib/cli/cli.js
CHANGED
|
@@ -38,6 +38,9 @@ const check_unknown_options_1 = require("./util/check-unknown-options");
|
|
|
38
38
|
const ci_1 = require("./util/ci");
|
|
39
39
|
const guess_agent_1 = require("./util/guess-agent");
|
|
40
40
|
async function exec(args, synthesizer) {
|
|
41
|
+
// This is the very first code that runs, but libraries have been loaded already and that also costs time.
|
|
42
|
+
// Measure that.
|
|
43
|
+
const libraryLoadTime = performance.now();
|
|
41
44
|
const argv = await (0, parse_command_line_arguments_1.parseCommandLineArguments)(args);
|
|
42
45
|
argv.language = (0, language_1.getLanguageFromAlias)(argv.language) ?? argv.language;
|
|
43
46
|
// Handle color output settings
|
|
@@ -76,12 +79,8 @@ async function exec(args, synthesizer) {
|
|
|
76
79
|
autoRespond: argv.yes,
|
|
77
80
|
}, true);
|
|
78
81
|
const ioHelper = (0, api_private_1.asIoHelper)(ioHost, ioHost.currentAction);
|
|
79
|
-
//
|
|
80
|
-
|
|
81
|
-
// historically decided they then want more logging from the CLI as well.
|
|
82
|
-
// There is currently no way to get the CDK to emit tracing information that
|
|
83
|
-
// does not cause the CLI to barf logs to the console.
|
|
84
|
-
(0, aws_auth_1.setSdkTracing)(argv.debug || argv.verbose > 2);
|
|
82
|
+
// CLI debugging (and the highest verbosity, `-vvv`) turns on verbose AWS SDK tracing.
|
|
83
|
+
(0, aws_auth_1.setSdkTracing)(Boolean(argv.debugCli) || argv.verbose > 2);
|
|
85
84
|
try {
|
|
86
85
|
await (0, platform_warnings_1.checkForPlatformWarnings)(ioHelper);
|
|
87
86
|
}
|
|
@@ -107,11 +106,12 @@ async function exec(args, synthesizer) {
|
|
|
107
106
|
caBundlePath: configuration.settings.get(['caBundlePath']),
|
|
108
107
|
});
|
|
109
108
|
try {
|
|
110
|
-
await ioHost.startTelemetry(argv, configuration.context);
|
|
109
|
+
await ioHost.startTelemetry(argv, configuration.context, proxyAgent);
|
|
111
110
|
}
|
|
112
111
|
catch (e) {
|
|
113
112
|
await ioHost.asIoHelper().defaults.trace(`Telemetry instantiation failed: ${e.message}`);
|
|
114
113
|
}
|
|
114
|
+
ioHost.telemetry?.attachLoadTime(libraryLoadTime);
|
|
115
115
|
ioHost.telemetry?.attachLanguage(await (0, util_1.guessLanguage)(process.cwd()));
|
|
116
116
|
ioHost.telemetry?.attachAgent((0, guess_agent_1.guessAgent)());
|
|
117
117
|
/**
|
|
@@ -216,7 +216,9 @@ async function exec(args, synthesizer) {
|
|
|
216
216
|
// If we locked the 'cdk.out' directory, release it here.
|
|
217
217
|
await outDirLock?.release();
|
|
218
218
|
// Do PSAs here
|
|
219
|
-
|
|
219
|
+
if ((0, display_version_1.shouldDisplayVersionMessage)()) {
|
|
220
|
+
await (0, display_version_1.displayVersionMessage)(ioHelper);
|
|
221
|
+
}
|
|
220
222
|
await refreshNotices;
|
|
221
223
|
if (cmd === 'notices') {
|
|
222
224
|
// do not trap errors here
|
|
@@ -260,6 +262,7 @@ async function exec(args, synthesizer) {
|
|
|
260
262
|
configuration,
|
|
261
263
|
sdkProvider,
|
|
262
264
|
});
|
|
265
|
+
ioHost.telemetry?.markOperationStart();
|
|
263
266
|
switch (command) {
|
|
264
267
|
case 'context':
|
|
265
268
|
ioHost.currentAction = 'context';
|
|
@@ -282,6 +285,7 @@ async function exec(args, synthesizer) {
|
|
|
282
285
|
ioHost.currentAction = 'doctor';
|
|
283
286
|
return (0, doctor_1.doctor)({
|
|
284
287
|
ioHelper,
|
|
288
|
+
settings: configuration.settings,
|
|
285
289
|
});
|
|
286
290
|
case 'ls':
|
|
287
291
|
case 'list':
|
|
@@ -398,6 +402,14 @@ async function exec(args, synthesizer) {
|
|
|
398
402
|
: cdk_toolkit_1.AssetBuildTime.JUST_IN_TIME,
|
|
399
403
|
ignoreNoStacks: args.ignoreNoStacks,
|
|
400
404
|
});
|
|
405
|
+
case 'validate':
|
|
406
|
+
cliRequireUnstable(configuration, 'validate');
|
|
407
|
+
ioHost.currentAction = 'validate';
|
|
408
|
+
configuration.context.set('@aws-cdk/core:failSynthOnValidationErrors', false);
|
|
409
|
+
return cli.validate({
|
|
410
|
+
stacks: specificStacksOrAllRecursively(args.STACKS),
|
|
411
|
+
online: args.online,
|
|
412
|
+
});
|
|
401
413
|
case 'diagnose':
|
|
402
414
|
cliRequireUnstable(configuration, 'diagnose');
|
|
403
415
|
ioHost.currentAction = 'diagnose';
|
|
@@ -821,4 +833,4 @@ function cli(args = process.argv.slice(2)) {
|
|
|
821
833
|
});
|
|
822
834
|
}
|
|
823
835
|
/* c8 ignore stop */
|
|
824
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBNENBLG9CQXVtQkM7QUF5TkQsa0JBd0JDO0FBcDRCRCxpREFBaUQsQ0FBQyxRQUFRO0FBQzFELHlDQUF5QztBQUV6QyxzREFBMkc7QUFDM0csK0JBQStCO0FBQy9CLGtDQUF3QztBQUN4QywrQ0FBMkQ7QUFDM0QsNkNBQW9EO0FBQ3BELHVEQUEwRDtBQUUxRCx1Q0FBc0M7QUFDdEMsaUZBQTJFO0FBQzNFLDJEQUErRDtBQUMvRCw2REFBd0Q7QUFDeEQsK0NBQW1EO0FBQ25ELG1FQUE2RDtBQUM3RCw2Q0FBb0Q7QUFHcEQsNkRBQXFEO0FBQ3JELG9EQUFnRDtBQUNoRCx1Q0FBcUY7QUFDckYsdURBQW1EO0FBRW5ELGdDQUFxRjtBQUNyRiw4Q0FBaUc7QUFFakcsZ0RBQWdEO0FBQ2hELG9EQUFpRDtBQUNqRCw0Q0FBNkM7QUFFN0MsaURBQWdFO0FBQ2hFLDJDQUF3QztBQUN4QywrQ0FBNEM7QUFDNUMsbURBQTZEO0FBQzdELDJDQUFvRTtBQUNwRSxtREFBNEQ7QUFDNUQsaURBQXlEO0FBQ3pELG9DQUF3RDtBQUV4RCx3RUFBa0U7QUFDbEUsa0NBQWlDO0FBQ2pDLG9EQUFnRDtBQUV6QyxLQUFLLFVBQVUsSUFBSSxDQUFDLElBQWMsRUFBRSxXQUF5QjtJQUNsRSxNQUFNLElBQUksR0FBRyxNQUFNLElBQUEsd0RBQXlCLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFBLCtCQUFvQixFQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO0lBRXJFLCtCQUErQjtJQUMvQixpREFBaUQ7SUFDakQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0lBQ2hDLENBQUM7U0FBTSxJQUFJ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R0FBRztZQUNOLElBQUksRUFBRSxJQUFBLHVCQUFlLEVBQUMsR0FBRyxDQUFDO1NBQzNCLENBQUM7UUFDRixPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUN2QixDQUFDLENBQUM7U0FDRCxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDbEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxtQkFBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsTUFBTSxtQkFBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzlGLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDRCxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovIC8vIHlhcmdzXG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHR5cGUgeyBDaGFuZ2VTZXREZXBsb3ltZW50LCBEZXBsb3ltZW50TWV0aG9kLCBEaXJlY3REZXBsb3ltZW50LCBTdGFja1NlbGVjdG9yIGFzIExpYlN0YWNrU2VsZWN0b3IgfSBmcm9tICdAYXdzLWNkay90b29sa2l0LWxpYic7XG5pbXBvcnQgeyBFeHBhbmRTdGFja1NlbGVjdGlvbiwgU3RhY2tTZWxlY3Rpb25TdHJhdGVneSwgVG9vbGtpdEVycm9yLCBUb29sa2l0IH0gZnJvbSAnQGF3cy1jZGsvdG9vbGtpdC1saWInO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHsgZ3Vlc3NMYW5ndWFnZSB9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHsgQ2RrVG9vbGtpdCwgQXNzZXRCdWlsZFRpbWUgfSBmcm9tICcuL2Nkay10b29sa2l0JztcbmltcG9ydCB7IGNpU3lzdGVtSXNTdGRFcnJTYWZlIH0gZnJvbSAnLi9jaS1zeXN0ZW1zJztcbmltcG9ydCB7IGRpc3BsYXlWZXJzaW9uTWVzc2FnZSB9IGZyb20gJy4vZGlzcGxheS12ZXJzaW9uJztcbmltcG9ydCB0eXBlIHsgSW9NZXNzYWdlTGV2ZWwgfSBmcm9tICcuL2lvLWhvc3QnO1xuaW1wb3J0IHsgQ2xpSW9Ib3N0IH0gZnJvbSAnLi9pby1ob3N0JztcbmltcG9ydCB7IHBhcnNlQ29tbWFuZExpbmVBcmd1bWVudHMgfSBmcm9tICcuL3BhcnNlLWNvbW1hbmQtbGluZS1hcmd1bWVudHMnO1xuaW1wb3J0IHsgY2hlY2tGb3JQbGF0Zm9ybVdhcm5pbmdzIH0gZnJvbSAnLi9wbGF0Zm9ybS13YXJuaW5ncyc7XG5pbXBvcnQgeyBwcmV0dHlQcmludEVycm9yIH0gZnJvbSAnLi9wcmV0dHktcHJpbnQtZXJyb3InO1xuaW1wb3J0IHsgUHJveHlBZ2VudFByb3ZpZGVyIH0gZnJvbSAnLi9wcm94eS1hZ2VudCc7XG5pbXBvcnQgeyBHTE9CQUxfUExVR0lOX0hPU1QgfSBmcm9tICcuL3NpbmdsZXRvbi1wbHVnaW4taG9zdCc7XG5pbXBvcnQgeyBjZGtDbGlFcnJvck5hbWUgfSBmcm9tICcuL3RlbGVtZXRyeS9lcnJvcic7XG5pbXBvcnQgdHlwZSB7IEVycm9yRGV0YWlscyB9IGZyb20gJy4vdGVsZW1ldHJ5L3NjaGVtYSc7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tICcuL3VzZXItY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi91c2VyLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHsgdHJhcEVycm9ycyB9IGZyb20gJy4vdXRpbC90cmFwLWVycm9ycyc7XG5pbXBvcnQgeyBpc0RldmVsb3BlckJ1aWxkVmVyc2lvbiwgdmVyc2lvbldpdGhCdWlsZCwgdmVyc2lvbk51bWJlciB9IGZyb20gJy4vdmVyc2lvbic7XG5pbXBvcnQgeyBhc0lvSGVscGVyIH0gZnJvbSAnLi4vLi4vbGliL2FwaS1wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgSVJlYWRMb2NrIH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IFRvb2xraXRJbmZvLCBOb3RpY2VzLCBsb2FkVHJlZSwgZmluZENvbnN0cnVjdExpYnJhcnlWZXJzaW9uIH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IFNka1Byb3ZpZGVyLCBJb0hvc3RTZGtMb2dnZXIsIHNldFNka1RyYWNpbmcsIHNka1JlcXVlc3RIYW5kbGVyIH0gZnJvbSAnLi4vYXBpL2F3cy1hdXRoJztcbmltcG9ydCB0eXBlIHsgQm9vdHN0cmFwU291cmNlIH0gZnJvbSAnLi4vYXBpL2Jvb3RzdHJhcCc7XG5pbXBvcnQgeyBCb290c3RyYXBwZXIgfSBmcm9tICcuLi9hcGkvYm9vdHN0cmFwJztcbmltcG9ydCB7IERlcGxveW1lbnRzIH0gZnJvbSAnLi4vYXBpL2RlcGxveW1lbnRzJztcbmltcG9ydCB7IEhvdHN3YXBNb2RlIH0gZnJvbSAnLi4vYXBpL2hvdHN3YXAnO1xuaW1wb3J0IHR5cGUgeyBTZXR0aW5ncyB9IGZyb20gJy4uL2FwaS9zZXR0aW5ncyc7XG5pbXBvcnQgeyBjb250ZXh0SGFuZGxlciBhcyBjb250ZXh0IH0gZnJvbSAnLi4vY29tbWFuZHMvY29udGV4dCc7XG5pbXBvcnQgeyBkb2NzIH0gZnJvbSAnLi4vY29tbWFuZHMvZG9jcyc7XG5pbXBvcnQgeyBkb2N0b3IgfSBmcm9tICcuLi9jb21tYW5kcy9kb2N0b3InO1xuaW1wb3J0IHsgRmxhZ0NvbW1hbmRIYW5kbGVyIH0gZnJvbSAnLi4vY29tbWFuZHMvZmxhZ3MvZmxhZ3MnO1xuaW1wb3J0IHsgY2xpSW5pdCwgcHJpbnRBdmFpbGFibGVUZW1wbGF0ZXMgfSBmcm9tICcuLi9jb21tYW5kcy9pbml0JztcbmltcG9ydCB7IGdldExhbmd1YWdlRnJvbUFsaWFzIH0gZnJvbSAnLi4vY29tbWFuZHMvbGFuZ3VhZ2UnO1xuaW1wb3J0IHsgZ2V0TWlncmF0ZVNjYW5UeXBlIH0gZnJvbSAnLi4vY29tbWFuZHMvbWlncmF0ZSc7XG5pbXBvcnQgeyBleGVjUHJvZ3JhbSwgQ2xvdWRFeGVjdXRhYmxlIH0gZnJvbSAnLi4vY3hhcHAnO1xuaW1wb3J0IHR5cGUgeyBTdGFja1NlbGVjdG9yLCBTeW50aGVzaXplciB9IGZyb20gJy4uL2N4YXBwJztcbmltcG9ydCB7IGZpbmRVbmtub3duT3B0aW9ucyB9IGZyb20gJy4vdXRpbC9jaGVjay11bmtub3duLW9wdGlvbnMnO1xuaW1wb3J0IHsgaXNDSSB9IGZyb20gJy4vdXRpbC9jaSc7XG5pbXBvcnQgeyBndWVzc0FnZW50IH0gZnJvbSAnLi91dGlsL2d1ZXNzLWFnZW50JztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWMoYXJnczogc3RyaW5nW10sIHN5bnRoZXNpemVyPzogU3ludGhlc2l6ZXIpOiBQcm9taXNlPG51bWJlciB8IHZvaWQ+IHtcbiAgY29uc3QgYXJndiA9IGF3YWl0IHBhcnNlQ29tbWFuZExpbmVBcmd1bWVudHMoYXJncyk7XG4gIGFyZ3YubGFuZ3VhZ2UgPSBnZXRMYW5ndWFnZUZyb21BbGlhcyhhcmd2Lmxhbmd1YWdlKSA/PyBhcmd2Lmxhbmd1YWdlO1xuXG4gIC8vIEhhbmRsZSBjb2xvciBvdXRwdXQgc2V0dGluZ3NcbiAgLy8gUHJpb3JpdHk6IC0tbm8tY29sb3IgPiAtLWNvbG9yID4gVFRZIGRldGVjdGlvblxuICBpZiAoYXJndi5ub0NvbG9yKSB7XG4gICAgcHJvY2Vzcy5lbnYuRk9SQ0VfQ09MT1IgPSAnMCc7XG4gIH0gZWxzZSBpZiAoYXJndi5jb2xvcikge1xuICAgIHByb2Nlc3MuZW52LkZPUkNFX0NPTE9SID0gJzMnO1xuICB9IGVsc2UgaWYgKCFwcm9jZXNzLnN0ZG91dC5pc1RUWSkge1xuICAgIC8vIERlZmF1bHQgYmVoYXZpb3I6IGRpc2FibGUgY29sb3JzIGZvciBub24tVFRZXG4gICAgcHJvY2Vzcy5lbnYuRk9SQ0VfQ09MT1IgPSAnMCc7XG4gIH1cblxuICBjb25zdCBjbWQgPSBhcmd2Ll9bMF07XG5cbiAgLy8gaWYgb25lIC12LCBsb2cgYXQgYSBERUJVRyBsZXZlbFxuICAvLyBpZiAyIC12LCBsb2cgYXQgYSBUUkFDRSBsZXZlbFxuICBsZXQgaW9NZXNzYWdlTGV2ZWw6IElvTWVzc2FnZUxldmVsID0gJ2luZm8nO1xuICBpZiAoYXJndi52ZXJib3NlKSB7XG4gICAgc3dpdGNoIChhcmd2LnZlcmJvc2UpIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgaW9NZXNzYWdlTGV2ZWwgPSAnZGVidWcnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlvTWVzc2FnZUxldmVsID0gJ3RyYWNlJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgaW9Ib3N0ID0gQ2xpSW9Ib3N0Lmluc3RhbmNlKHtcbiAgICBsb2dMZXZlbDogaW9NZXNzYWdlTGV2ZWwsXG4gICAgaXNUVFk6IHByb2Nlc3Muc3Rkb3V0LmlzVFRZLFxuICAgIGlzQ0k6IEJvb2xlYW4oYXJndi5jaSksXG4gICAgY3VycmVudEFjdGlvbjogY21kLFxuICAgIHN0YWNrUHJvZ3Jlc3M6IGFyZ3YucHJvZ3Jlc3MsXG4gICAgYXV0b1Jlc3BvbmQ6IGFyZ3YueWVzLFxuICB9LCB0cnVlKTtcbiAgY29uc3QgaW9IZWxwZXIgPSBhc0lvSGVscGVyKGlvSG9zdCwgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gYXMgYW55KTtcblxuICAvLyBJZiB1c2VycyByZXF1ZXN0IGRlYnVnIGluZm9ybWF0aW9uICh3aGljaCBzd2l0Y2hlcyBvbiBDREtfREVCVUc9MSB0byBnZXQgdGhlXG4gIC8vIENESyBhcHAgdG8gZW1pdCBtb3JlIGluZm9ybWF0aW9uKSwgdGhleSBwcm9iYWJseSBhcmUgdHJvdWJsZXNob290aW5nIGFuZCB3ZSd2ZVxuICAvLyBoaXN0b3JpY2FsbHkgZGVjaWRlZCB0aGV5IHRoZW4gd2FudCBtb3JlIGxvZ2dpbmcgZnJvbSB0aGUgQ0xJIGFzIHdlbGwuXG4gIC8vIFRoZXJlIGlzIGN1cnJlbnRseSBubyB3YXkgdG8gZ2V0IHRoZSBDREsgdG8gZW1pdCB0cmFjaW5nIGluZm9ybWF0aW9uIHRoYXRcbiAgLy8gZG9lcyBub3QgY2F1c2UgdGhlIENMSSB0byBiYXJmIGxvZ3MgdG8gdGhlIGNvbnNvbGUuXG4gIHNldFNka1RyYWNpbmcoYXJndi5kZWJ1ZyB8fCBhcmd2LnZlcmJvc2UgPiAyKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGNoZWNrRm9yUGxhdGZvcm1XYXJuaW5ncyhpb0hlbHBlcik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBhd2FpdCBpb0hvc3QuZGVmYXVsdHMuZGVidWcoYEVycm9yIHdoaWxlIGNoZWNraW5nIGZvciBwbGF0Zm9ybSB3YXJuaW5nczogJHtlfWApO1xuICB9XG5cbiAgYXdhaXQgaW9Ib3N0LmRlZmF1bHRzLmRlYnVnKCdDREsgVG9vbGtpdCBDTEkgdmVyc2lvbjonLCB2ZXJzaW9uV2l0aEJ1aWxkKCkpO1xuICBhd2FpdCBpb0hvc3QuZGVmYXVsdHMuZGVidWcoJ0NvbW1hbmQgbGluZSBhcmd1bWVudHM6JywgYXJndik7XG5cbiAgY29uc3QgdW5rbm93bk9wdGlvbnMgPSBmaW5kVW5rbm93bk9wdGlvbnMoYXJndik7XG4gIGlmICh1bmtub3duT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZm9ybWF0dGVkID0gdW5rbm93bk9wdGlvbnMubWFwKChvKSA9PiBgLS0ke299YCkuam9pbignLCAnKTtcbiAgICBhd2FpdCBpb0hvc3QuZGVmYXVsdHMud2FybihgVW5rbm93biBvcHRpb24ocyk6ICR7Zm9ybWF0dGVkfS4gVGhlc2Ugd2lsbCBiZSBpZ25vcmVkLiBSdW4gJ2NkayAtLWhlbHAnIHRvIHNlZSBhdmFpbGFibGUgb3B0aW9ucy5gKTtcbiAgfVxuXG4gIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBhd2FpdCBDb25maWd1cmF0aW9uLmZyb21BcmdzQW5kRmlsZXMoaW9IZWxwZXIsXG4gICAge1xuICAgICAgY29tbWFuZExpbmVBcmd1bWVudHM6IHtcbiAgICAgICAgLi4uYXJndixcbiAgICAgICAgXzogYXJndi5fIGFzIFtDb21tYW5kLCAuLi5zdHJpbmdbXV0sIC8vIFR5cGVTY3JpcHQgYXQgaXRzIGJlc3RcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgLy8gQWx3YXlzIGNyZWF0ZSBhbmQgdXNlIFByb3h5QWdlbnQgdG8gc3VwcG9ydCBjb25maWd1cmF0aW9uIHZpYSBlbnYgdmFyc1xuICBjb25zdCBwcm94eUFnZW50ID0gYXdhaXQgbmV3IFByb3h5QWdlbnRQcm92aWRlcihpb0hlbHBlcikuY3JlYXRlKHtcbiAgICBwcm94eUFkZHJlc3M6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncHJveHknXSksXG4gICAgY2FCdW5kbGVQYXRoOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ2NhQnVuZGxlUGF0aCddKSxcbiAgfSk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBpb0hvc3Quc3RhcnRUZWxlbWV0cnkoYXJndiwgY29uZmlndXJhdGlvbi5jb250ZXh0KTtcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgYXdhaXQgaW9Ib3N0LmFzSW9IZWxwZXIoKS5kZWZhdWx0cy50cmFjZShgVGVsZW1ldHJ5IGluc3RhbnRpYXRpb24gZmFpbGVkOiAke2UubWVzc2FnZX1gKTtcbiAgfVxuXG4gIGlvSG9zdC50ZWxlbWV0cnk/LmF0dGFjaExhbmd1YWdlKGF3YWl0IGd1ZXNzTGFuZ3VhZ2UocHJvY2Vzcy5jd2QoKSkpO1xuICBpb0hvc3QudGVsZW1ldHJ5Py5hdHRhY2hBZ2VudChndWVzc0FnZW50KCkpO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgZGlzcGxheWluZyAoYW5kIHJlZnJlc2hpbmcpIG5vdGljZXMgb24gYWxsIGNvbW1hbmRzLlxuICAgKlxuICAgKiBJZiB0aGUgdXNlciBkaWRuJ3Qgc3VwcGx5IGVpdGhlciBgLS1ub3RpY2VzYCBvciBgLS1uby1ub3RpY2VzYCwgd2UgZG9cbiAgICogYXV0b2RldGVjdGlvbi4gVGhlIGF1dG9kZXRlY3Rpb24gY3VycmVudGx5IGlzOiBkbyB3cml0ZSBub3RpY2VzIGlmIHdlIGFyZVxuICAgKiBub3Qgb24gQ0ksIG9yIGFyZSBvbiBhIENJIHN5c3RlbSB3aGVyZSB3ZSBrbm93IHRoYXQgd3JpdGluZyB0byBzdGRlcnIgaXNcbiAgICogc2FmZS4gV2UgZmFpbCBcImNsb3NlZFwiOyB0aGF0IGlzLCB3ZSBkZWNpZGUgdG8gTk9UIHByaW50IGZvciB1bmtub3duIENJXG4gICAqIHN5c3RlbXMsIGV2ZW4gdGhvdWdoIHRlY2huaWNhbGx5IHdlIG1heWJlIGNvdWxkLlxuICAgKi9cbiAgY29uc3QgaXNTYWZlVG9Xcml0ZU5vdGljZXMgPSAhaXNDSSgpIHx8IEJvb2xlYW4oY2lTeXN0ZW1Jc1N0ZEVyclNhZmUoKSk7XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIG5vdGljZXMgc2hvdWxkIGJlIGRpc3BsYXllZCBiYXNlZCBvbiBDTEkgYXJncyBhbmQgY29uZmlndXJhdGlvblxuICBsZXQgc2hvdWxkRGlzcGxheU5vdGljZXM6IGJvb2xlYW47XG4gIGlmIChhcmd2Lm5vdGljZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIENMSSBhcmd1bWVudCB0YWtlcyBwcmVjZWRlbmNlXG4gICAgc2hvdWxkRGlzcGxheU5vdGljZXMgPSBhcmd2Lm5vdGljZXM7XG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbCBiYWNrIHRvIGNvbmZpZ3VyYXRpb24gZmlsZSBzZXR0aW5nLCB0aGVuIGF1dG9kZXRlY3Rpb25cbiAgICBjb25zdCBjb25maWdOb3RpY2VzID0gY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydub3RpY2VzJ10pO1xuICAgIGlmIChjb25maWdOb3RpY2VzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIENvbnNpZGVyIHN0cmluZyBcImZhbHNlXCIgdG8gYmUgZmFsc3kgaW4gdGhpcyBjb250ZXh0XG4gICAgICBzaG91bGREaXNwbGF5Tm90aWNlcyA9IGNvbmZpZ05vdGljZXMgIT09ICdmYWxzZScgJiYgQm9vbGVhbihjb25maWdOb3RpY2VzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGVmYXVsdCBhdXRvZGV0ZWN0aW9uIGJlaGF2aW9yXG4gICAgICBzaG91bGREaXNwbGF5Tm90aWNlcyA9IGlzU2FmZVRvV3JpdGVOb3RpY2VzO1xuICAgIH1cbiAgfVxuXG4gIC8vIE5vdGljZXMgZWl0aGVyIGdvIHRvIHN0ZGVyciwgb3Igbm93aGVyZVxuICBpb0hvc3Qubm90aWNlc0Rlc3RpbmF0aW9uID0gc2hvdWxkRGlzcGxheU5vdGljZXMgPyAnc3RkZXJyJyA6ICdkcm9wJztcbiAgY29uc3Qgbm90aWNlcyA9IE5vdGljZXMuY3JlYXRlKHtcbiAgICBpb0hvc3QsXG4gICAgY29udGV4dDogY29uZmlndXJhdGlvbi5jb250ZXh0LFxuICAgIG91dHB1dDogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydvdXRkaXInXSksXG4gICAgbGFuZ3VhZ2U6IGF3YWl0IGd1ZXNzTGFuZ3VhZ2UocHJvY2Vzcy5jd2QoKSksXG4gICAgaHR0cE9wdGlvbnM6IHsgYWdlbnQ6IHByb3h5QWdlbnQgfSxcbiAgICBjbGlWZXJzaW9uOiB2ZXJzaW9uTnVtYmVyKCksXG4gIH0pO1xuICBjb25zdCByZWZyZXNoTm90aWNlcyA9IChhc3luYyAoKSA9PiB7XG4gICAgLy8gdGhlIGNkayBub3RpY2VzIGNvbW1hbmQgaGFzIGl0J3Mgb3duIHJlZnJlc2hcbiAgICBpZiAoc2hvdWxkRGlzcGxheU5vdGljZXMgJiYgY21kICE9PSAnbm90aWNlcycpIHtcbiAgICAgIGF3YWl0IHRyYXBFcnJvcnMoaW9IZWxwZXIsICdDb3VsZCBub3QgcmVmcmVzaCBub3RpY2VzJywgKCkgPT4gbm90aWNlcy5yZWZyZXNoKCkpO1xuICAgIH1cbiAgfSkoKTtcblxuICBjb25zdCBzZGtQcm92aWRlciA9IGF3YWl0IFNka1Byb3ZpZGVyLndpdGhBd3NDbGlDb21wYXRpYmxlRGVmYXVsdHMoe1xuICAgIGlvSGVscGVyLFxuICAgIHJlcXVlc3RIYW5kbGVyOiBzZGtSZXF1ZXN0SGFuZGxlcihwcm94eUFnZW50KSxcbiAgICBsb2dnZXI6IG5ldyBJb0hvc3RTZGtMb2dnZXIoYXNJb0hlbHBlcihpb0hvc3QsIGlvSG9zdC5jdXJyZW50QWN0aW9uIGFzIGFueSkpLFxuICAgIHBsdWdpbkhvc3Q6IEdMT0JBTF9QTFVHSU5fSE9TVCxcbiAgfSwgY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydwcm9maWxlJ10pLCBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3JlZ2lvbiddKSk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBpb0hvc3QudGVsZW1ldHJ5Py5hdHRhY2hSZWdpb24oc2RrUHJvdmlkZXIuZGVmYXVsdFJlZ2lvbik7XG4gIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgIGF3YWl0IGlvSG9zdC5hc0lvSGVscGVyKCkuZGVmYXVsdHMudHJhY2UoYFRlbGVtZXRyeSBhdHRhY2ggcmVnaW9uIGZhaWxlZDogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBsZXQgb3V0RGlyTG9jazogSVJlYWRMb2NrIHwgdW5kZWZpbmVkO1xuICBjb25zdCBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICBjb25maWd1cmF0aW9uLFxuICAgIHNka1Byb3ZpZGVyLFxuICAgIHN5bnRoZXNpemVyOlxuICAgICAgc3ludGhlc2l6ZXIgPz9cbiAgICAgIChhc3luYyAoYXdzLCBjb25maWcpID0+IHtcbiAgICAgICAgLy8gSW52b2tlICdleGVjUHJvZ3JhbScsIGFuZCBjb3B5IHRoZSBsb2NrIGZvciB0aGUgZGlyZWN0b3J5IGluIHRoZSBnbG9iYWxcbiAgICAgICAgLy8gdmFyaWFibGUgaGVyZS4gSXQgd2lsbCBiZSByZWxlYXNlZCB3aGVuIHRoZSBDTEkgZXhpdHMuIExvY2tzIGFyZSBub3QgcmUtZW50cmFudFxuICAgICAgICAvLyBzbyByZWxlYXNlIGl0IGlmIHdlIGhhdmUgdG8gc3ludGhlc2l6ZSBtb3JlIHRoYW4gb25jZSAoYmVjYXVzZSBvZiBjb250ZXh0IGxvb2t1cHMpLlxuICAgICAgICBhd2FpdCBvdXREaXJMb2NrPy5yZWxlYXNlKCk7XG4gICAgICAgIGNvbnN0IHsgYXNzZW1ibHksIGxvY2ssIHBlcmZDb3VudGVycyB9ID0gYXdhaXQgZXhlY1Byb2dyYW0oYXdzLCBpb0hvc3QuYXNJb0hlbHBlcigpLCBjb25maWcpO1xuICAgICAgICBvdXREaXJMb2NrID0gbG9jaztcblxuICAgICAgICBjb25zdCB0cmVlID0gYXdhaXQgbG9hZFRyZWUoYXNzZW1ibHksIGlvSGVscGVyLmRlZmF1bHRzLnRyYWNlLmJpbmQoaW9IZWxwZXIuZGVmYXVsdHMpKTtcbiAgICAgICAgaWYgKHRyZWUpIHtcbiAgICAgICAgICBjb25zdCB2ID0gZmluZENvbnN0cnVjdExpYnJhcnlWZXJzaW9uKHRyZWUpO1xuICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICBpb0hvc3QudGVsZW1ldHJ5Py5hdHRhY2hDZGtMaWJWZXJzaW9uKHYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwZXJmQ291bnRlcnMpIHtcbiAgICAgICAgICBpb0hvc3QudGVsZW1ldHJ5Py5hdHRhY2hDb3VudGVyc1RvTmV4dEV2ZW50KHBlcmZDb3VudGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXNzZW1ibHk7XG4gICAgICB9KSxcbiAgICBpb0hlbHBlcjogaW9Ib3N0LmFzSW9IZWxwZXIoKSxcbiAgfSk7XG5cbiAgLyoqIEZ1bmN0aW9uIHRvIGxvYWQgcGx1Zy1pbnMsIHVzaW5nIGNvbmZpZ3VyYXRpb25zIGFkZGl0aXZlbHkuICovXG4gIGFzeW5jIGZ1bmN0aW9uIGxvYWRQbHVnaW5zKC4uLnNldHRpbmdzOiBTZXR0aW5nc1tdKSB7XG4gICAgZm9yIChjb25zdCBzb3VyY2Ugb2Ygc2V0dGluZ3MpIHtcbiAgICAgIGNvbnN0IHBsdWdpbnM6IHN0cmluZ1tdID0gc291cmNlLmdldChbJ3BsdWdpbiddKSB8fCBbXTtcbiAgICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIHBsdWdpbnMpIHtcbiAgICAgICAgYXdhaXQgR0xPQkFMX1BMVUdJTl9IT1NULmxvYWQocGx1Z2luLCBpb0hvc3QpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGF3YWl0IGxvYWRQbHVnaW5zKGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MpO1xuXG4gIGlmICgodHlwZW9mIGNtZCkgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignSW52YWxpZEFyZ1R5cGUnLCBgRmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGEgc3RyaW5nLiBHb3Q6ICR7Y21kfSAoJHt0eXBlb2YgY21kfSlgKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG1haW4oY21kLCBhcmd2KTtcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBJZiB3ZSBsb2NrZWQgdGhlICdjZGsub3V0JyBkaXJlY3RvcnksIHJlbGVhc2UgaXQgaGVyZS5cbiAgICBhd2FpdCBvdXREaXJMb2NrPy5yZWxlYXNlKCk7XG5cbiAgICAvLyBEbyBQU0FzIGhlcmVcbiAgICBhd2FpdCBkaXNwbGF5VmVyc2lvbk1lc3NhZ2UoaW9IZWxwZXIpO1xuXG4gICAgYXdhaXQgcmVmcmVzaE5vdGljZXM7XG4gICAgaWYgKGNtZCA9PT0gJ25vdGljZXMnKSB7XG4gICAgICAvLyBkbyBub3QgdHJhcCBlcnJvcnMgaGVyZVxuICAgICAgLy8gdGhpcyBpcyB0aGUgbm90aWNlcyBjb21tYW5kIGl0c2VsZiwgYW55IGVycm9yIHNob3VsZCBiZSBsb3VkXG4gICAgICBhd2FpdCBub3RpY2VzLnJlZnJlc2goeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IG5vdGljZXMuZGlzcGxheSh7XG4gICAgICAgIGluY2x1ZGVBY2tub3dsZWRnZWQ6ICFhcmd2LnVuYWNrbm93bGVkZ2VkLFxuICAgICAgICBzaG93VG90YWw6IGFyZ3YudW5hY2tub3dsZWRnZWQsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHNob3VsZERpc3BsYXlOb3RpY2VzICYmIGNtZCAhPT0gJ3ZlcnNpb24nKSB7XG4gICAgICBhd2FpdCB0cmFwRXJyb3JzKGlvSGVscGVyLCAnQ291bGQgbm90IGRpc3BsYXkgbm90aWNlcycsICgpID0+IG5vdGljZXMuZGlzcGxheSgpKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBtYWluKGNvbW1hbmQ6IHN0cmluZywgYXJnczogYW55KTogUHJvbWlzZTxudW1iZXIgfCB2b2lkPiB7XG4gICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSBjb21tYW5kIGFzIGFueTtcbiAgICBjb25zdCB0b29sa2l0U3RhY2tOYW1lOiBzdHJpbmcgPSBUb29sa2l0SW5mby5kZXRlcm1pbmVOYW1lKGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsndG9vbGtpdFN0YWNrTmFtZSddKSk7XG4gICAgYXdhaXQgaW9Ib3N0LmRlZmF1bHRzLmRlYnVnKGBUb29sa2l0IHN0YWNrOiAke2NoYWxrLmJvbGQodG9vbGtpdFN0YWNrTmFtZSl9YCk7XG5cbiAgICBjb25zdCBjbG91ZEZvcm1hdGlvbiA9IG5ldyBEZXBsb3ltZW50cyh7XG4gICAgICBzZGtQcm92aWRlcixcbiAgICAgIHRvb2xraXRTdGFja05hbWUsXG4gICAgICBpb0hlbHBlcjogYXNJb0hlbHBlcihpb0hvc3QsIGlvSG9zdC5jdXJyZW50QWN0aW9uIGFzIGFueSksXG4gICAgfSk7XG5cbiAgICBpZiAoYXJncy5hbGwgJiYgYXJncy5TVEFDS1MpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ1N0YWNrc09yQWxsUmVxdWlyZWQnLCAnWW91IG11c3QgZWl0aGVyIHNwZWNpZnkgYSBsaXN0IG9mIFN0YWNrcyBvciB0aGUgYC0tYWxsYCBhcmd1bWVudCcpO1xuICAgIH1cblxuICAgIGFyZ3MuU1RBQ0tTID0gYXJncy5TVEFDS1MgPz8gKGFyZ3MuU1RBQ0sgPyBbYXJncy5TVEFDS10gOiBbXSk7XG4gICAgYXJncy5FTlZJUk9OTUVOVFMgPSBhcmdzLkVOVklST05NRU5UUyA/PyBbXTtcblxuICAgIGNvbnN0IHNlbGVjdG9yOiBTdGFja1NlbGVjdG9yID0ge1xuICAgICAgYWxsVG9wTGV2ZWw6IGFyZ3MuYWxsLFxuICAgICAgcGF0dGVybnM6IGFyZ3MuU1RBQ0tTLFxuICAgIH07XG5cbiAgICBjb25zdCBjbGkgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICBpb0hvc3QsXG4gICAgICBjbG91ZEV4ZWN1dGFibGUsXG4gICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgZGVwbG95bWVudHM6IGNsb3VkRm9ybWF0aW9uLFxuICAgICAgdmVyYm9zZTogYXJndi50cmFjZSB8fCBhcmd2LnZlcmJvc2UgPiAwLFxuICAgICAgaWdub3JlRXJyb3JzOiBhcmd2WydpZ25vcmUtZXJyb3JzJ10sXG4gICAgICBzdHJpY3Q6IGFyZ3Yuc3RyaWN0LFxuICAgICAgY29uZmlndXJhdGlvbixcbiAgICAgIHNka1Byb3ZpZGVyLFxuICAgIH0pO1xuXG4gICAgc3dpdGNoIChjb21tYW5kKSB7XG4gICAgICBjYXNlICdjb250ZXh0JzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnY29udGV4dCc7XG4gICAgICAgIHJldHVybiBjb250ZXh0KHtcbiAgICAgICAgICBpb0hlbHBlcixcbiAgICAgICAgICBjb250ZXh0OiBjb25maWd1cmF0aW9uLmNvbnRleHQsXG4gICAgICAgICAgY2xlYXI6IGFyZ3YuY2xlYXIsXG4gICAgICAgICAganNvbjogYXJndi5qc29uLFxuICAgICAgICAgIGZvcmNlOiBhcmd2LmZvcmNlLFxuICAgICAgICAgIHJlc2V0OiBhcmd2LnJlc2V0LFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnZG9jcyc6XG4gICAgICBjYXNlICdkb2MnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdkb2NzJztcbiAgICAgICAgcmV0dXJuIGRvY3Moe1xuICAgICAgICAgIGlvSGVscGVyLFxuICAgICAgICAgIGJyb3dzZXI6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnYnJvd3NlciddKSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2RvY3Rvcic6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2RvY3Rvcic7XG4gICAgICAgIHJldHVybiBkb2N0b3Ioe1xuICAgICAgICAgIGlvSGVscGVyLFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnbHMnOlxuICAgICAgY2FzZSAnbGlzdCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2xpc3QnO1xuICAgICAgICByZXR1cm4gY2xpLmxpc3QoYXJncy5TVEFDS1MsIHtcbiAgICAgICAgICBsb25nOiBhcmdzLmxvbmcsXG4gICAgICAgICAganNvbjogYXJndi5qc29uLFxuICAgICAgICAgIHNob3dEZXBzOiBhcmdzLnNob3dEZXBlbmRlbmNpZXMsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdkaWZmJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnZGlmZic7XG4gICAgICAgIGNvbnN0IGVuYWJsZURpZmZOb0ZhaWwgPSBpc0ZlYXR1cmVFbmFibGVkKGNvbmZpZ3VyYXRpb24sIGN4YXBpLkVOQUJMRV9ESUZGX05PX0ZBSUxfQ09OVEVYVCk7XG4gICAgICAgIHJldHVybiBjbGkuZGlmZih7XG4gICAgICAgICAgc3RhY2tOYW1lczogYXJncy5TVEFDS1MsXG4gICAgICAgICAgZXhjbHVzaXZlbHk6IGFyZ3MuZXhjbHVzaXZlbHksXG4gICAgICAgICAgdGVtcGxhdGVQYXRoOiBhcmdzLnRlbXBsYXRlLFxuICAgICAgICAgIHN0cmljdDogYXJncy5zdHJpY3QsXG4gICAgICAgICAgY29udGV4dExpbmVzOiBhcmdzLmNvbnRleHRMaW5lcyxcbiAgICAgICAgICBzZWN1cml0eU9ubHk6IGFyZ3Muc2VjdXJpdHlPbmx5LFxuICAgICAgICAgIGZhaWw6IGFyZ3MuZmFpbCAhPSBudWxsID8gYXJncy5mYWlsIDogIWVuYWJsZURpZmZOb0ZhaWwsXG4gICAgICAgICAgY29tcGFyZUFnYWluc3RQcm9jZXNzZWRUZW1wbGF0ZTogYXJncy5wcm9jZXNzZWQsXG4gICAgICAgICAgcXVpZXQ6IGFyZ3MucXVpZXQsXG4gICAgICAgICAgbWV0aG9kOiBkZXRlcm1pbmVEaWZmTWV0aG9kKGFyZ3MpLFxuICAgICAgICAgIHRvb2xraXRTdGFja05hbWU6IHRvb2xraXRTdGFja05hbWUsXG4gICAgICAgICAgaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXM6IGFyZ3MuaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMsXG4gICAgICAgICAgaW5jbHVkZU1vdmVzOiBhcmdzWydpbmNsdWRlLW1vdmVzJ10sXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdkcmlmdCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2RyaWZ0JztcbiAgICAgICAgcmV0dXJuIGNsaS5kcmlmdCh7XG4gICAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgICAgZmFpbDogYXJncy5mYWlsLFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAncmVmYWN0b3InOlxuICAgICAgICBjbGlSZXF1aXJlVW5zdGFibGUoY29uZmlndXJhdGlvbiwgJ3JlZmFjdG9yJyk7XG5cbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAncmVmYWN0b3InO1xuICAgICAgICByZXR1cm4gY2xpLnJlZmFjdG9yKHtcbiAgICAgICAgICBkcnlSdW46IGFyZ3MuZHJ5UnVuLFxuICAgICAgICAgIG92ZXJyaWRlRmlsZTogYXJncy5vdmVycmlkZUZpbGUsXG4gICAgICAgICAgcmV2ZXJ0OiBhcmdzLnJldmVydCxcbiAgICAgICAgICBzdGFja3M6IHNlbGVjdG9yLFxuICAgICAgICAgIGFkZGl0aW9uYWxTdGFja05hbWVzOiBhcnJheUZyb21ZYXJncyhhcmdzLmFkZGl0aW9uYWxTdGFja05hbWUgPz8gW10pLFxuICAgICAgICAgIGZvcmNlOiBhcmdzLmZvcmNlID8/IGZhbHNlLFxuICAgICAgICAgIHJvbGVBcm46IGFyZ3Mucm9sZUFybixcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2Jvb3RzdHJhcCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2Jvb3RzdHJhcCc7XG4gICAgICAgIGNvbnN0IHNvdXJjZTogQm9vdHN0cmFwU291cmNlID0gYXdhaXQgZGV0ZXJtaW5lQm9vdHN0cmFwVmVyc2lvbihpb0hvc3QsIGFyZ3MpO1xuXG4gICAgICAgIGlmIChhcmdzLnNob3dUZW1wbGF0ZSkge1xuICAgICAgICAgIGNvbnN0IGJvb3RzdHJhcHBlciA9IG5ldyBCb290c3RyYXBwZXIoc291cmNlLCBhc0lvSGVscGVyKGlvSG9zdCwgaW9Ib3N0LmN1cnJlbnRBY3Rpb24pKTtcbiAgICAgICAgICByZXR1cm4gYm9vdHN0cmFwcGVyLnNob3dUZW1wbGF0ZShhcmdzLmpzb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNsaS5ib290c3RyYXAoYXJncy5FTlZJUk9OTUVOVFMsIHtcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgcm9sZUFybjogYXJncy5yb2xlQXJuLFxuICAgICAgICAgIGZvcmNlRGVwbG95bWVudDogYXJndi5mb3JjZSxcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lOiB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAgIGV4ZWN1dGU6IGFyZ3MuZXhlY3V0ZSxcbiAgICAgICAgICB0YWdzOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3RhZ3MnXSksXG4gICAgICAgICAgdGVybWluYXRpb25Qcm90ZWN0aW9uOiBhcmdzLnRlcm1pbmF0aW9uUHJvdGVjdGlvbixcbiAgICAgICAgICB1c2VQcmV2aW91c1BhcmFtZXRlcnM6IGFyZ3NbJ3ByZXZpb3VzLXBhcmFtZXRlcnMnXSxcbiAgICAgICAgICBpbXBvcnRFeGlzdGluZ1Jlc291cmNlczogYXJncy5pbXBvcnRFeGlzdGluZ1Jlc291cmNlcyxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBidWNrZXROYW1lOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Rvb2xraXRCdWNrZXQnLCAnYnVja2V0TmFtZSddKSxcbiAgICAgICAgICAgIGttc0tleUlkOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Rvb2xraXRCdWNrZXQnLCAna21zS2V5SWQnXSksXG4gICAgICAgICAgICBjcmVhdGVDdXN0b21lck1hc3RlcktleTogYXJncy5ib290c3RyYXBDdXN0b21lcktleSxcbiAgICAgICAgICAgIHF1YWxpZmllcjogYXJncy5xdWFsaWZpZXIgPz8gY29uZmlndXJhdGlvbi5jb250ZXh0LmdldCgnQGF3cy1jZGsvY29yZTpib290c3RyYXBRdWFsaWZpZXInKSxcbiAgICAgICAgICAgIHB1YmxpY0FjY2Vzc0Jsb2NrQ29uZmlndXJhdGlvbjogYXJncy5wdWJsaWNBY2Nlc3NCbG9ja0NvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgICBleGFtcGxlUGVybWlzc2lvbnNCb3VuZGFyeTogYXJndi5leGFtcGxlUGVybWlzc2lvbnNCb3VuZGFyeSxcbiAgICAgICAgICAgIGN1c3RvbVBlcm1pc3Npb25zQm91bmRhcnk6IGFyZ3YuY3VzdG9tUGVybWlzc2lvbnNCb3VuZGFyeSxcbiAgICAgICAgICAgIHRydXN0ZWRBY2NvdW50czogYXJyYXlGcm9tWWFyZ3MoYXJncy50cnVzdCksXG4gICAgICAgICAgICB0cnVzdGVkQWNjb3VudHNGb3JMb29rdXA6IGFycmF5RnJvbVlhcmdzKGFyZ3MudHJ1c3RGb3JMb29rdXApLFxuICAgICAgICAgICAgdW50cnVzdGVkQWNjb3VudHM6IGFycmF5RnJvbVlhcmdzKGFyZ3MudW50cnVzdCksXG4gICAgICAgICAgICBjbG91ZEZvcm1hdGlvbkV4ZWN1dGlvblBvbGljaWVzOiBhcnJheUZyb21ZYXJncyhhcmdzLmNsb3VkZm9ybWF0aW9uRXhlY3V0aW9uUG9saWNpZXMpLFxuICAgICAgICAgICAgZGVueUV4dGVybmFsSWQ6IGFyZ3MuZGVueUV4dGVybmFsSWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2RlcGxveSc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2RlcGxveSc7XG4gICAgICAgIGNvbnN0IHBhcmFtZXRlck1hcDogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgYXJncy5wYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbWV0ZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBrZXlWYWx1ZSA9IChwYXJhbWV0ZXIgYXMgc3RyaW5nKS5zcGxpdCgnPScpO1xuICAgICAgICAgICAgcGFyYW1ldGVyTWFwW2tleVZhbHVlWzBdXSA9IGtleVZhbHVlLnNsaWNlKDEpLmpvaW4oJz0nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJncy5leGVjdXRlICE9PSB1bmRlZmluZWQgJiYgYXJncy5tZXRob2QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0NvbmZsaWN0aW5nRXhlY3V0ZUFuZE1ldGhvZCcsICdDYW4gbm90IHN1cHBseSBib3RoIC0tW25vLV1leGVjdXRlIGFuZCAtLW1ldGhvZCBhdCB0aGUgc2FtZSB0aW1lJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2xpLmRlcGxveSh7XG4gICAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgICAgZXhjbHVzaXZlbHk6IGFyZ3MuZXhjbHVzaXZlbHksXG4gICAgICAgICAgdG9vbGtpdFN0YWNrTmFtZSxcbiAgICAgICAgICByb2xlQXJuOiBhcmdzLnJvbGVBcm4sXG4gICAgICAgICAgbm90aWZpY2F0aW9uQXJuczogYXJncy5ub3RpZmljYXRpb25Bcm5zLFxuICAgICAgICAgIHJlcXVpcmVBcHByb3ZhbDogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydyZXF1aXJlQXBwcm92YWwnXSksXG4gICAgICAgICAgcmV1c2VBc3NldHM6IGFyZ3NbJ2J1aWxkLWV4Y2x1ZGUnXSxcbiAgICAgICAgICB0YWdzOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3RhZ3MnXSksXG4gICAgICAgICAgZGVwbG95bWVudE1ldGhvZDogZGV0ZXJtaW5lRGVwbG95bWVudE1ldGhvZChhcmdzLCBjb25maWd1cmF0aW9uKSxcbiAgICAgICAgICBmb3JjZTogYXJncy5mb3JjZSxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiBwYXJhbWV0ZXJNYXAsXG4gICAgICAgICAgdXNlUHJldmlvdXNQYXJhbWV0ZXJzOiBhcmdzWydwcmV2aW91cy1wYXJhbWV0ZXJzJ10sXG4gICAgICAgICAgb3V0cHV0c0ZpbGU6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnb3V0cHV0c0ZpbGUnXSksXG4gICAgICAgICAgcHJvZ3Jlc3M6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncHJvZ3Jlc3MnXSksXG4gICAgICAgICAgY2k6IGFyZ3MuY2ksXG4gICAgICAgICAgcm9sbGJhY2s6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncm9sbGJhY2snXSksXG4gICAgICAgICAgd2F0Y2g6IGFyZ3Mud2F0Y2gsXG4gICAgICAgICAgdHJhY2VMb2dzOiBhcmdzLmxvZ3MsXG4gICAgICAgICAgY29uY3VycmVuY3k6IGFyZ3MuY29uY3VycmVuY3ksXG4gICAgICAgICAgYXNzZXRQYXJhbGxlbGlzbTogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydhc3NldFBhcmFsbGVsaXNtJ10pLFxuICAgICAgICAgIGFzc2V0QnVpbGRDb25jdXJyZW5jeTogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydhc3NldEJ1aWxkQ29uY3VycmVuY3knXSksXG4gICAgICAgICAgYXNzZXRCdWlsZFRpbWU6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnYXNzZXRQcmVidWlsZCddKVxuICAgICAgICAgICAgPyBBc3NldEJ1aWxkVGltZS5BTExfQkVGT1JFX0RFUExPWVxuICAgICAgICAgICAgOiBBc3NldEJ1aWxkVGltZS5KVVNUX0lOX1RJTUUsXG4gICAgICAgICAgaWdub3JlTm9TdGFja3M6IGFyZ3MuaWdub3JlTm9TdGFja3MsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdkaWFnbm9zZSc6XG4gICAgICAgIGNsaVJlcXVpcmVVbnN0YWJsZShjb25maWd1cmF0aW9uLCAnZGlhZ25vc2UnKTtcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnZGlhZ25vc2UnO1xuXG4gICAgICAgIC8vIEltcGxpY2l0bHkgc3dpdGNoICdkZWJ1ZycgbW9kZSB0byB0cnVlLCB0aGF0IGlzIGdvaW5nIHRvIGJlIG1vc3QgdXNlZnVsLlxuICAgICAgICBjb25maWd1cmF0aW9uLnNldHRpbmdzLnRlbXBvcmFyaWx5TXV0YWJsZSgoc2V0dGluZ3MpID0+IHtcbiAgICAgICAgICBzZXR0aW5ncy5zZXQoWydkZWJ1ZyddLCB0cnVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNsaS5kaWFnbm9zZSh7XG4gICAgICAgICAgc3RhY2tzOiBzcGVjaWZpY1N0YWNrc09yQWxsUmVjdXJzaXZlbHkoYXJncy5TVEFDS1MpLFxuICAgICAgICAgIGNvbmN1cnJlbmN5OiBhcmdzLmNvbmN1cnJlbmN5LFxuICAgICAgICAgIHRvb2xraXRTdGFja05hbWU6IGFyZ3MudG9vbGtpdFN0YWNrTmFtZSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3JvbGxiYWNrJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAncm9sbGJhY2snO1xuICAgICAgICByZXR1cm4gY2xpLnJvbGxiYWNrKHtcbiAgICAgICAgICBzZWxlY3RvcixcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAgIHJvbGVBcm46IGFyZ3Mucm9sZUFybixcbiAgICAgICAgICBmb3JjZTogYXJncy5mb3JjZSxcbiAgICAgICAgICB2YWxpZGF0ZUJvb3RzdHJhcFN0YWNrVmVyc2lvbjogYXJnc1sndmFsaWRhdGUtYm9vdHN0cmFwLXZlcnNpb24nXSxcbiAgICAgICAgICBvcnBoYW5Mb2dpY2FsSWRzOiBhcmdzLm9ycGhhbixcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3B1Ymxpc2gtYXNzZXRzJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAncHVibGlzaC1hc3NldHMnO1xuICAgICAgICBjbGlSZXF1aXJlVW5zdGFibGUoY29uZmlndXJhdGlvbiwgJ3B1Ymxpc2gtYXNzZXRzJyk7XG5cbiAgICAgICAgcmV0dXJuIGNsaS5wdWJsaXNoQXNzZXRzKHtcbiAgICAgICAgICBzdGFja3M6IGNvbnZlcnRTdGFja1NlbGVjdG9yKHNlbGVjdG9yLCBhcmdzLmV4Y2x1c2l2ZWx5KSxcbiAgICAgICAgICBmb3JjZTogYXJncy5mb3JjZSxcbiAgICAgICAgICBjb25jdXJyZW5jeTogYXJncy5jb25jdXJyZW5jeSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ29ycGhhbic6XG4gICAgICAgIGNsaVJlcXVpcmVVbnN0YWJsZShjb25maWd1cmF0aW9uLCAnb3JwaGFuJyk7XG5cbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnb3JwaGFuJztcbiAgICAgICAgcmV0dXJuIGNsaS5vcnBoYW4oe1xuICAgICAgICAgIGNvbnN0cnVjdFBhdGg6IGFyZ3MuUEFUSFMgPz8gW10sXG4gICAgICAgICAgcm9sZUFybjogYXJncy5yb2xlQXJuLFxuICAgICAgICAgIHRvb2xraXRTdGFja05hbWUsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdpbXBvcnQnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdpbXBvcnQnO1xuICAgICAgICByZXR1cm4gY2xpLmltcG9ydCh7XG4gICAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgICAgdG9vbGtpdFN0YWNrTmFtZSxcbiAgICAgICAgICByb2xlQXJuOiBhcmdzLnJvbGVBcm4sXG4gICAgICAgICAgZGVwbG95bWVudE1ldGhvZDoge1xuICAgICAgICAgICAgbWV0aG9kOiAnY2hhbmdlLXNldCcsXG4gICAgICAgICAgICBleGVjdXRlOiBhcmdzLmV4ZWN1dGUsXG4gICAgICAgICAgICBjaGFuZ2VTZXROYW1lOiBhcmdzLmNoYW5nZVNldE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcm9ncmVzczogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydwcm9ncmVzcyddKSxcbiAgICAgICAgICByb2xsYmFjazogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydyb2xsYmFjayddKSxcbiAgICAgICAgICByZWNvcmRSZXNvdXJjZU1hcHBpbmc6IGFyZ3NbJ3JlY29yZC1yZXNvdXJjZS1tYXBwaW5nJ10sXG4gICAgICAgICAgcmVzb3VyY2VNYXBwaW5nRmlsZTogYXJnc1sncmVzb3VyY2UtbWFwcGluZyddLFxuICAgICAgICAgIHJlc291cmNlTWFwcGluZ0lubGluZTogYXJnc1sncmVzb3VyY2UtbWFwcGluZy1pbmxpbmUnXSxcbiAgICAgICAgICBmb3JjZTogYXJncy5mb3JjZSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3dhdGNoJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnd2F0Y2gnO1xuICAgICAgICBhd2FpdCBjbGkud2F0Y2goe1xuICAgICAgICAgIHNlbGVjdG9yLFxuICAgICAgICAgIGV4Y2x1c2l2ZWx5OiBhcmdzLmV4Y2x1c2l2ZWx5LFxuICAgICAgICAgIHRvb2xraXRTdGFja05hbWUsXG4gICAgICAgICAgcm9sZUFybjogYXJncy5yb2xlQXJuLFxuICAgICAgICAgIHJldXNlQXNzZXRzOiBhcmdzWydidWlsZC1leGNsdWRlJ10sXG4gICAgICAgICAgZGVwbG95bWVudE1ldGhvZDogZGV0ZXJtaW5lRGVwbG95bWVudE1ldGhvZChhcmdzLCBjb25maWd1cmF0aW9uLCB0cnVlKSxcbiAgICAgICAgICBmb3JjZTogYXJncy5mb3JjZSxcbiAgICAgICAgICBwcm9ncmVzczogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydwcm9ncmVzcyddKSxcbiAgICAgICAgICByb2xsYmFjazogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydyb2xsYmFjayddKSxcbiAgICAgICAgICB0cmFjZUxvZ3M6IGFyZ3MubG9ncyxcbiAgICAgICAgICBjb25jdXJyZW5jeTogYXJncy5jb25jdXJyZW5jeSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcblxuICAgICAgY2FzZSAnZGVzdHJveSc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2Rlc3Ryb3knO1xuICAgICAgICByZXR1cm4gY2xpLmRlc3Ryb3koe1xuICAgICAgICAgIHNlbGVjdG9yLFxuICAgICAgICAgIGV4Y2x1c2l2ZWx5OiBhcmdzLmV4Y2x1c2l2ZWx5LFxuICAgICAgICAgIGZvcmNlOiBhcmdzLmZvcmNlLFxuICAgICAgICAgIHJvbGVBcm46IGFyZ3Mucm9sZUFybixcbiAgICAgICAgICBjb25jdXJyZW5jeTogYXJncy5jb25jdXJyZW5jeSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2djJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnZ2MnO1xuICAgICAgICBjbGlSZXF1aXJlVW5zdGFibGUoY29uZmlndXJhdGlvbiwgJ2djJyk7XG4gICAgICAgIGlmIChhcmdzLmJvb3RzdHJhcFN0YWNrTmFtZSkge1xuICAgICAgICAgIGF3YWl0IGlvSG9zdC5kZWZhdWx0cy53YXJuKCctLWJvb3RzdHJhcC1zdGFjay1uYW1lIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCB3aGVuIGdjIGlzIEdBLiBVc2UgLS10b29sa2l0LXN0YWNrLW5hbWUuJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcm9sZUFybiBpcyBkZWZpbmVkIGZvciB3aGVuIGNsb3VkZm9ybWF0aW9uIGlzIGludm9rZWRcbiAgICAgICAgLy8gVGhpcyBjb25mbGljdHMgd2l0aCBkaXJlY3Qgc2RrIGNhbGxzIGV4aXN0aW5nIGluIHRoZSBnYyBjb21tYW5kIHRvIHMzIGFuZCBlY3JcbiAgICAgICAgaWYgKGFyZ3Mucm9sZUFybikge1xuICAgICAgICAgIGF3YWl0IGlvSG9zdC5kZWZhdWx0cy53YXJuKCdUaGUgLS1yb2xlLWFybiBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhlIGdjIGNvbW1hbmQgYW5kIHdpbGwgYmUgaWdub3JlZC4nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xpLmdhcmJhZ2VDb2xsZWN0KGFyZ3MuRU5WSVJPTk1FTlRTLCB7XG4gICAgICAgICAgYWN0aW9uOiBhcmdzLmFjdGlvbixcbiAgICAgICAgICB0eXBlOiBhcmdzLnR5cGUsXG4gICAgICAgICAgcm9sbGJhY2tCdWZmZXJEYXlzOiBhcmdzWydyb2xsYmFjay1idWZmZXItZGF5cyddLFxuICAgICAgICAgIGNyZWF0ZWRCdWZmZXJEYXlzOiBhcmdzWydjcmVhdGVkLWJ1ZmZlci1kYXlzJ10sXG4gICAgICAgICAgYm9vdHN0cmFwU3RhY2tOYW1lOiBhcmdzLnRvb2xraXRTdGFja05hbWUgPz8gYXJncy5ib290c3RyYXBTdGFja05hbWUsXG4gICAgICAgICAgY29uZmlybTogYXJncy5jb25maXJtLFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnZmxhZ3MnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdmbGFncyc7XG5cbiAgICAgICAgY2xpUmVxdWlyZVVuc3RhYmxlKGNvbmZpZ3VyYXRpb24sICdmbGFncycpO1xuXG4gICAgICAgIGNvbnN0IHRvb2xraXQgPSBuZXcgVG9vbGtpdCh7XG4gICAgICAgICAgaW9Ib3N0LFxuICAgICAgICAgIHRvb2xraXRTdGFja05hbWUsXG4gICAgICAgICAgdW5zdGFibGVGZWF0dXJlczogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWyd1bnN0YWJsZSddKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGZsYWdzRGF0YSA9IGF3YWl0IHRvb2xraXQuZmxhZ3MoY2xvdWRFeGVjdXRhYmxlKTtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IG5ldyBGbGFnQ29tbWFuZEhhbmRsZXIoZmxhZ3NEYXRhLCBpb0hlbHBlciwgYXJncywgdG9vbGtpdCwgY29uZmlndXJhdGlvbi5jb250ZXh0LmFsbCk7XG4gICAgICAgIHJldHVybiBoYW5kbGVyLnByb2Nlc3NGbGFnc0NvbW1hbmQoKTtcblxuICAgICAgY2FzZSAnc3ludGhlc2l6ZSc6XG4gICAgICBjYXNlICdzeW50aCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ3N5bnRoJztcbiAgICAgICAgY29uc3QgcXVpZXQgPSBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3F1aWV0J10pID8/IGFyZ3MucXVpZXQ7XG4gICAgICAgIGlmIChhcmdzLmV4Y2x1c2l2ZWx5KSB7XG4gICAgICAgICAgcmV0dXJuIGNsaS5zeW50aChhcmdzLlNUQUNLUywgYXJncy5leGNsdXNpdmVseSwgcXVpZXQsIGFyZ3MudmFsaWRhdGlvbiwgYXJndi5qc29uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gY2xpLnN5bnRoKGFyZ3MuU1RBQ0tTLCB0cnVlLCBxdWlldCwgYXJncy52YWxpZGF0aW9uLCBhcmd2Lmpzb24pO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ25vdGljZXMnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdub3RpY2VzJztcbiAgICAgICAgLy8gSWYgdGhlIHVzZXIgZXhwbGljaXRseSBhc2tzIGZvciBub3RpY2VzLCB0aGV5IGFyZSBub3cgdGhlIHByaW1hcnkgb3V0cHV0XG4gICAgICAgIC8vIG9mIHRoZSBjb21tYW5kIGFuZCB0aGV5IHNob3VsZCBnbyB0byBzdGRvdXQuXG4gICAgICAgIGlvSG9zdC5ub3RpY2VzRGVzdGluYXRpb24gPSAnc3Rkb3V0JztcblxuICAgICAgICAvLyBUaGlzIGlzIGEgdmFsaWQgY29tbWFuZCwgYnV0IHdlJ3JlIHBvc3Rwb25pbmcgaXRzIGV4ZWN1dGlvbiBiZWNhdXNlIGRpc3BsYXlpbmdcbiAgICAgICAgLy8gbm90aWNlcyBhdXRvbWF0aWNhbGx5IGhhcHBlbnMgYWZ0ZXIgZXZlcnkgY29tbWFuZC5cbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBjYXNlICdtZXRhZGF0YSc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ21ldGFkYXRhJztcbiAgICAgICAgcmV0dXJuIGNsaS5tZXRhZGF0YShhcmdzLlNUQUNLLCBhcmd2Lmpzb24pO1xuXG4gICAgICBjYXNlICdhY2tub3dsZWRnZSc6XG4gICAgICBjYXNlICdhY2snOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdub3RpY2VzJztcbiAgICAgICAgcmV0dXJuIGNsaS5hY2tub3dsZWRnZShhcmdzLklEKTtcblxuICAgICAgY2FzZSAnY2xpLXRlbGVtZXRyeSc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2NsaS10ZWxlbWV0cnknO1xuICAgICAgICBpZiAoYXJncy5lbmFibGUgPT09IHVuZGVmaW5lZCAmJiBhcmdzLmRpc2FibGUgPT09IHVuZGVmaW5lZCAmJiBhcmdzLnN0YXR1cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignVGVsZW1ldHJ5QXJnUmVxdWlyZWQnLCAnTXVzdCBzcGVjaWZ5IFxcJy0tZW5hYmxlXFwnLCBcXCctLWRpc2FibGVcXCcsIG9yIFxcJy0tc3RhdHVzXFwnJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJncy5zdGF0dXMpIHtcbiAgICAgICAgICByZXR1cm4gY2xpLmNsaVRlbGVtZXRyeVN0YXR1cyhhcmdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBlbmFibGUgPSBhcmdzLmVuYWJsZSA/PyAhYXJncy5kaXNhYmxlO1xuICAgICAgICAgIHJldHVybiBjbGkuY2xpVGVsZW1ldHJ5KGVuYWJsZSk7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ2luaXQnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdpbml0JztcbiAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ2xhbmd1YWdlJ10pO1xuICAgICAgICBpZiAoYXJncy5saXN0KSB7XG4gICAgICAgICAgcmV0dXJuIHByaW50QXZhaWxhYmxlVGVtcGxhdGVzKGlvSGVscGVyLCBsYW5ndWFnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gR2F0ZSBjdXN0b20gdGVtcGxhdGUgc3VwcG9ydCB3aXRoIHVuc3RhYmxlIGZsYWdcbiAgICAgICAgICBpZiAoYXJnc1snZnJvbS1wYXRoJ10pIHtcbiAgICAgICAgICAgIGNsaVJlcXVpcmVVbnN0YWJsZShjb25maWd1cmF0aW9uLCAnaW5pdCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjbGlJbml0KHtcbiAgICAgICAgICAgIGlvSGVscGVyLFxuICAgICAgICAgICAgdHlwZTogYXJncy5URU1QTEFURSxcbiAgICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgICAgY2FuVXNlTmV0d29yazogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZ2VuZXJhdGVPbmx5OiBhcmdzLmdlbmVyYXRlT25seSxcbiAgICAgICAgICAgIGxpYlZlcnNpb246IGFyZ3MubGliVmVyc2lvbixcbiAgICAgICAgICAgIGZyb21QYXRoOiBhcmdzWydmcm9tLXBhdGgnXSxcbiAgICAgICAgICAgIHRlbXBsYXRlUGF0aDogYXJnc1sndGVtcGxhdGUtcGF0aCddLFxuICAgICAgICAgICAgcGFja2FnZU1hbmFnZXI6IGFyZ3NbJ3BhY2thZ2UtbWFuYWdlciddLFxuICAgICAgICAgICAgcHJvamVjdE5hbWU6IGFyZ3MubmFtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgY2FzZSAnbWlncmF0ZSc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ21pZ3JhdGUnO1xuICAgICAgICByZXR1cm4gY2xpLm1pZ3JhdGUoe1xuICAgICAgICAgIHN0YWNrTmFtZTogYXJnc1snc3RhY2stbmFtZSddLFxuICAgICAgICAgIGZyb21QYXRoOiBhcmdzWydmcm9tLXBhdGgnXSxcbiAgICAgICAgICBmcm9tU3RhY2s6IGFyZ3NbJ2Zyb20tc3RhY2snXSxcbiAgICAgICAgICBsYW5ndWFnZTogYXJncy5sYW5ndWFnZSxcbiAgICAgICAgICBvdXRwdXRQYXRoOiBhcmdzWydvdXRwdXQtcGF0aCddLFxuICAgICAgICAgIGZyb21TY2FuOiBnZXRNaWdyYXRlU2NhblR5cGUoYXJnc1snZnJvbS1zY2FuJ10pLFxuICAgICAgICAgIGZpbHRlcjogYXJncy5maWx0ZXIsXG4gICAgICAgICAgYWNjb3VudDogYXJncy5hY2NvdW50LFxuICAgICAgICAgIHJlZ2lvbjogYXJncy5yZWdpb24sXG4gICAgICAgICAgY29tcHJlc3M6IGFyZ3MuY29tcHJlc3MsXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAndmVyc2lvbic6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ3ZlcnNpb24nO1xuICAgICAgICByZXR1cm4gaW9Ib3N0LmRlZmF1bHRzLnJlc3VsdCh2ZXJzaW9uV2l0aEJ1aWxkKCkpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdVbmtub3duQ29tbWFuZCcsICdVbmtub3duIGNvbW1hbmQ6ICcgKyBjb21tYW5kKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgd2hpY2ggdmVyc2lvbiBvZiBib290c3RyYXBwaW5nXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRldGVybWluZUJvb3RzdHJhcFZlcnNpb24oaW9Ib3N0OiBDbGlJb0hvc3QsIGFyZ3M6IHsgdGVtcGxhdGU/OiBzdHJpbmcgfSk6IFByb21pc2U8Qm9vdHN0cmFwU291cmNlPiB7XG4gIGxldCBzb3VyY2U6IEJvb3RzdHJhcFNvdXJjZTtcbiAgaWYgKGFyZ3MudGVtcGxhdGUpIHtcbiAgICBhd2FpdCBpb0hvc3QuZGVmYXVsdHMuaW5mbyhgVXNpbmcgYm9vdHN0cmFwcGluZyB0ZW1wbGF0ZSBmcm9tICR7YXJncy50ZW1wbGF0ZX1gKTtcbiAgICBzb3VyY2UgPSB7IHNvdXJjZTogJ2N1c3RvbScsIHRlbXBsYXRlRmlsZTogYXJncy50ZW1wbGF0ZSB9O1xuICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52LkNES19MRUdBQ1lfQk9PVFNUUkFQKSB7XG4gICAgYXdhaXQgaW9Ib3N0LmRlZmF1bHRzLmluZm8oJ0NES19MRUdBQ1lfQk9PVFNUUkFQIHNldCwgdXNpbmcgbGVnYWN5LXN0eWxlIGJvb3RzdHJhcHBpbmcnKTtcbiAgICBzb3VyY2UgPSB7IHNvdXJjZTogJ2xlZ2FjeScgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBpbiBWMiwgdGhlIFwibmV3XCIgYm9vdHN0cmFwcGluZyBpcyB0aGUgZGVmYXVsdFxuICAgIHNvdXJjZSA9IHsgc291cmNlOiAnZGVmYXVsdCcgfTtcbiAgfVxuICByZXR1cm4gc291cmNlO1xufVxuXG5mdW5jdGlvbiBpc0ZlYXR1cmVFbmFibGVkKGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24sIGZlYXR1cmVGbGFnOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGNvbmZpZ3VyYXRpb24uY29udGV4dC5nZXQoZmVhdHVyZUZsYWcpID8/IGN4YXBpLmZ1dHVyZUZsYWdEZWZhdWx0KGZlYXR1cmVGbGFnKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgU3RhY2tTZWxlY3RvciBhbmQgZXhjbHVzaXZlbHkgZmxhZyB0byB0b29sa2l0LWxpYidzIFN0YWNrU2VsZWN0b3IgZm9ybWF0XG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRTdGFja1NlbGVjdG9yKHNlbGVjdG9yOiBTdGFja1NlbGVjdG9yLCBleGNsdXNpdmVseT86IGJvb2xlYW4pOiBMaWJTdGFja1NlbGVjdG9yIHtcbiAgcmV0dXJuIHtcbiAgICBwYXR0ZXJuczogc2VsZWN0b3IucGF0dGVybnMsXG4gICAgc3RyYXRlZ3k6IHNlbGVjdG9yLnBhdHRlcm5zLmxlbmd0aCA+IDAgPyBTdGFja1NlbGVjdGlvblN0cmF0ZWd5LlBBVFRFUk5fTUFUQ0ggOiBTdGFja1NlbGVjdGlvblN0cmF0ZWd5LkFMTF9TVEFDS1MsXG4gICAgZXhwYW5kOiBleGNsdXNpdmVseSA/IEV4cGFuZFN0YWNrU2VsZWN0aW9uLk5PTkUgOiBFeHBhbmRTdGFja1NlbGVjdGlvbi5VUFNUUkVBTSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIHRvb2xraXQtbGliIFN0YWNrU2VsZWN0b3IgZnJvbSBhIGdpdmVuIHNldCBvZiBzdGFjayBjb25zdHJ1Y3QgcGF0aCBwYXR0ZXJuc1xuICpcbiAqIElmIG5vIHBhdHRlcm5zIGFyZSBnaXZlbiwgYWxsIHN0YWNrcyBpbiB0aGUgYXNzZW1ibHkgYW5kIGFsbCBvZiBpdHMgc3RhZ2VzIGFyZSBzZWxlY3RlZC5cbiAqL1xuZnVuY3Rpb24gc3BlY2lmaWNTdGFja3NPckFsbFJlY3Vyc2l2ZWx5KHBhdHRlcm5zOiBzdHJpbmdbXSk6IExpYlN0YWNrU2VsZWN0b3Ige1xuICByZXR1cm4ge1xuICAgIHN0cmF0ZWd5OiBwYXR0ZXJucy5sZW5ndGggPiAwID8gU3RhY2tTZWxlY3Rpb25TdHJhdGVneS5QQVRURVJOX01BVENIIDogU3RhY2tTZWxlY3Rpb25TdHJhdGVneS5BTExfU1RBQ0tTLFxuICAgIHBhdHRlcm5zLFxuICB9O1xufVxuXG4vKipcbiAqIFRyYW5zbGF0ZSBhIFlhcmdzIGlucHV0IGFycmF5IHRvIHNvbWV0aGluZyB0aGF0IG1ha2VzIG1vcmUgc2Vuc2UgaW4gYSBwcm9ncmFtbWluZyBsYW5ndWFnZVxuICogbW9kZWwgKHRlbGxpbmcgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhYnNlbmNlIGFuZCBhbiBlbXB0eSBhcnJheSlcbiAqXG4gKiAtIEFuIGVtcHR5IGFycmF5IGlzIHRoZSBkZWZhdWx0IGNhc2UsIG1lYW5pbmcgdGhlIHVzZXIgZGlkbid0IHBhc3MgYW55IGFyZ3VtZW50cy4gV2UgcmV0dXJuXG4gKiAgIHVuZGVmaW5lZC5cbiAqIC0gSWYgdGhlIHVzZXIgcGFzc2VkIGEgc2luZ2xlIGVtcHR5IHN0cmluZywgdGhleSBkaWQgc29tZXRoaW5nIGxpa2UgYC0tYXJyYXk9YCwgd2hpY2ggd2UnbGxcbiAqICAgdGFrZSB0byBtZWFuIHRoZXkgcGFzc2VkIGFuIGVtcHR5IGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheUZyb21ZYXJncyh4czogc3RyaW5nW10pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gIGlmICh4cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiB4cy5maWx0ZXIoKHgpID0+IHggIT09ICcnKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBkaWZmIG1ldGhvZCBmcm9tIENMSSBhcmdzLlxuICogLS1tZXRob2QgdGFrZXMgcHJlY2VkZW5jZSwgdGhlbiBkZXByZWNhdGVkIC0tY2hhbmdlLXNldCwgdGhlbiAtLXRlbXBsYXRlIGltcGxpZXMgdGVtcGxhdGUuXG4gKi9cbmZ1bmN0aW9uIGRldGVybWluZURpZmZNZXRob2QoYXJnczogYW55KTogJ2NoYW5nZS1zZXQnIHwgJ3RlbXBsYXRlJyB8ICdhdXRvJyB7XG4gIGlmIChhcmdzLm1ldGhvZCAmJiBhcmdzLm1ldGhvZCAhPT0gJ2F1dG8nKSB7XG4gICAgcmV0dXJuIGFyZ3MubWV0aG9kO1xuICB9XG5cbiAgLy8gRGVwcmVjYXRlZCAtLW5vLWNoYW5nZS1zZXQgbWFwcyB0byB0ZW1wbGF0ZVxuICBpZiAoYXJnc1snY2hhbmdlLXNldCddID09PSBmYWxzZSkge1xuICAgIHJldHVybiAndGVtcGxhdGUnO1xuICB9XG5cbiAgLy8gLS10ZW1wbGF0ZSBpbXBsaWVzIHRlbXBsYXRlXG4gIGlmIChhcmdzLnRlbXBsYXRlKSB7XG4gICAgcmV0dXJuICd0ZW1wbGF0ZSc7XG4gIH1cblxuICByZXR1cm4gJ2F1dG8nO1xufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmVEZXBsb3ltZW50TWV0aG9kKGFyZ3M6IGFueSwgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbiwgd2F0Y2g/OiBib29sZWFuKTogRGVwbG95bWVudE1ldGhvZCB7XG4gIGxldCBkZXBsb3ltZW50TWV0aG9kOiBDaGFuZ2VTZXREZXBsb3ltZW50IHwgRGlyZWN0RGVwbG95bWVudCB8IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChhcmdzLm1ldGhvZCkge1xuICAgIGNhc2UgJ2V4ZWN1dGUtY2hhbmdlLXNldCc6XG4gICAgICBpZiAoIWFyZ3MuU1RBQ0tTIHx8IGFyZ3MuU1RBQ0tTLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdFeGFjdGx5T25lU3RhY2snLCAnLS1tZXRob2Q9ZXhlY3V0ZS1jaGFuZ2Utc2V0IHJlcXVpcmVzIGV4YWN0bHkgb25lIHN0YWNrJyk7XG4gICAgICB9XG4gICAgICBpZiAod2F0Y2ggfHwgYXJncy53YXRjaCkge1xuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdXYXRjaFdpdGhFeGVjdXRlQ2hhbmdlU2V0JywgJy0tbWV0aG9kPWV4ZWN1dGUtY2hhbmdlLXNldCBjYW5ub3QgYmUgdXNlZCB3aXRoIHdhdGNoJyk7XG4gICAgICB9XG4gICAgICByZWplY3RJbmNvbXBhdGlibGVPcHRpb25zKGFyZ3MsICctLW1ldGhvZD1leGVjdXRlLWNoYW5nZS1zZXQnLCB7XG4gICAgICAgIGZvcmNlOiAnLS1mb3JjZScsXG4gICAgICAgIHBhcmFtZXRlcnM6ICctLXBhcmFtZXRlcnMnLFxuICAgICAgICBpbXBvcnRFeGlzdGluZ1Jlc291cmNlczogJy0taW1wb3J0LWV4aXN0aW5nLXJlc291cmNlcycsXG4gICAgICAgIHJldmVydERyaWZ0OiAnLS1yZXZlcnQtZHJpZnQnLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtZXRob2Q6ICdleGVjdXRlLWNoYW5nZS1zZXQnLFxuICAgICAgICBjaGFuZ2VTZXROYW1lOiBhcmdzLmNoYW5nZVNldE5hbWUgPz8gJ2Nkay1kZXBsb3ktY2hhbmdlLXNldCcsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RpcmVjdCc6XG4gICAgICByZWplY3RJbmNvbXBhdGlibGVPcHRpb25zKGFyZ3MsICctLW1ldGhvZD1kaXJlY3QnLCB7XG4gICAgICAgIGNoYW5nZVNldE5hbWU6ICctLWNoYW5nZS1zZXQtbmFtZScsXG4gICAgICAgIGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzOiAnLS1pbXBvcnQtZXhpc3RpbmctcmVzb3VyY2VzJyxcbiAgICAgICAgcmV2ZXJ0RHJpZnQ6ICctLXJldmVydC1kcmlmdCcsXG4gICAgICB9KTtcbiAgICAgIGRlcGxveW1lbnRNZXRob2QgPSB7IG1ldGhvZDogJ2RpcmVjdCcgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NoYW5nZS1zZXQnOlxuICAgICAgZGVwbG95bWVudE1ldGhvZCA9IHtcbiAgICAgICAgbWV0aG9kOiAnY2hhbmdlLXNldCcsXG4gICAgICAgIGV4ZWN1dGU6IHRydWUsXG4gICAgICAgIGNoYW5nZVNldE5hbWU6IGFyZ3MuY2hhbmdlU2V0TmFtZSxcbiAgICAgICAgaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXM6IGFyZ3MuaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMsXG4gICAgICAgIHJldmVydERyaWZ0OiBhcmdzLnJldmVydERyaWZ0LFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ByZXBhcmUtY2hhbmdlLXNldCc6XG4gICAgICBkZXBsb3ltZW50TWV0aG9kID0ge1xuICAgICAgICBtZXRob2Q6ICdjaGFuZ2Utc2V0JyxcbiAgICAgICAgZXhlY3V0ZTogZmFsc2UsXG4gICAgICAgIGNoYW5nZVNldE5hbWU6IGFyZ3MuY2hhbmdlU2V0TmFtZSxcbiAgICAgICAgaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXM6IGFyZ3MuaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMsXG4gICAgICAgIHJldmVydERyaWZ0OiBhcmdzLnJldmVydERyaWZ0LFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgIGRlZmF1bHQ6XG4gICAgICBkZXBsb3ltZW50TWV0aG9kID0ge1xuICAgICAgICBtZXRob2Q6ICdjaGFuZ2Utc2V0JyxcbiAgICAgICAgZXhlY3V0ZTogd2F0Y2ggPyB0cnVlIDogYXJncy5leGVjdXRlID8/IHRydWUsXG4gICAgICAgIGNoYW5nZVNldE5hbWU6IGFyZ3MuY2hhbmdlU2V0TmFtZSxcbiAgICAgICAgaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXM6IGFyZ3MuaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMsXG4gICAgICAgIHJldmVydERyaWZ0OiBhcmdzLnJldmVydERyaWZ0LFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgY29uc3QgaG90c3dhcE1vZGUgPSBkZXRlcm1pbmVIb3Rzd2FwTW9kZShhcmdzLmhvdHN3YXAsIGFyZ3MuaG90c3dhcEZhbGxiYWNrLCB3YXRjaCk7XG4gIGNvbnN0IGhvdHN3YXBQcm9wZXJ0aWVzID0gY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydob3Rzd2FwJ10pIHx8IHt9O1xuICBzd2l0Y2ggKGhvdHN3YXBNb2RlKSB7XG4gICAgY2FzZSBIb3Rzd2FwTW9kZS5GQUxMX0JBQ0s6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtZXRob2Q6ICdob3Rzd2FwJyxcbiAgICAgICAgcHJvcGVydGllczogaG90c3dhcFByb3BlcnRpZXMsXG4gICAgICAgIGZhbGxiYWNrOiBkZXBsb3ltZW50TWV0aG9kLFxuICAgICAgfTtcbiAgICBjYXNlIEhvdHN3YXBNb2RlLkhPVFNXQVBfT05MWTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1ldGhvZDogJ2hvdHN3YXAnLFxuICAgICAgICBwcm9wZXJ0aWVzOiBob3Rzd2FwUHJvcGVydGllcyxcbiAgICAgIH07XG4gICAgZGVmYXVsdDpcbiAgICBjYXNlIEhvdHN3YXBNb2RlLkZVTExfREVQTE9ZTUVOVDpcbiAgICAgIHJldHVybiBkZXBsb3ltZW50TWV0aG9kO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsaVJlcXVpcmVVbnN0YWJsZShjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uLCBmZWF0dXJlOiBzdHJpbmcpIHtcbiAgaWYgKCFjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Vuc3RhYmxlJ10pLmluY2x1ZGVzKGZlYXR1cmUpKSB7XG4gICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgVW5zdGFibGUke3VjZmlyc3QoZmVhdHVyZSl9YCwgYFVuc3RhYmxlIGZlYXR1cmUgdXNlOiBcXCcke2ZlYXR1cmV9XFwnIGlzIHVuc3RhYmxlLiBJdCBtdXN0IGJlIG9wdGVkIGluIHZpYSBcXCctLXVuc3RhYmxlXFwnLCBlLmcuIFxcJ2NkayAke2ZlYXR1cmV9IC0tdW5zdGFibGU9JHtmZWF0dXJlfVxcJ2ApO1xuICB9XG5cbiAgZnVuY3Rpb24gdWNmaXJzdCh4OiBzdHJpbmcpIHtcbiAgICByZXR1cm4geFswXS50b1VwcGVyQ2FzZSgpICsgeC5zbGljZSgxKTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93IGlmIGFueSBvZiB0aGUgZ2l2ZW4gZmxhZ3MgYXJlIHNldCwgYXMgdGhleSBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlIGdpdmVuIG9wdGlvbi5cbiAqL1xuZnVuY3Rpb24gcmVqZWN0SW5jb21wYXRpYmxlT3B0aW9ucyhhcmdzOiBhbnksIG9wdGlvbjogc3RyaW5nLCBmbGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xuICBmb3IgKGNvbnN0IFtrZXksIGZsYWddIG9mIE9iamVjdC5lbnRyaWVzKGZsYWdzKSkge1xuICAgIGNvbnN0IHZhbHVlID0gYXJnc1trZXldO1xuXG4gICAgbGV0IGlzU2V0ID0gZmFsc2U7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAvLyB5YXJncyBtYXkgZGVmYXVsdCBhcnJheSBvcHRpb25zIHRvIFt7fV0sIHNvIG9ubHkgY291bnQgcmVhbCB2YWx1ZXNcbiAgICAgIGlzU2V0ID0gdmFsdWUuc29tZSgodjogdW5rbm93bikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2ID09PSAnbnVtYmVyJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzU2V0ID0gISF2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAoaXNTZXQpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0luY29tcGF0aWJsZU9wdGlvbnMnLCBgJHtmbGFnfSBjYW5ub3QgYmUgdXNlZCB3aXRoICR7b3B0aW9ufWApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmVIb3Rzd2FwTW9kZShob3Rzd2FwPzogYm9vbGVhbiwgaG90c3dhcEZhbGxiYWNrPzogYm9vbGVhbiwgd2F0Y2g/OiBib29sZWFuKTogSG90c3dhcE1vZGUge1xuICBpZiAoaG90c3dhcCAmJiBob3Rzd2FwRmFsbGJhY2spIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdDb25mbGljdGluZ0hvdHN3YXBBcmdzJywgJ0NhbiBub3Qgc3VwcGx5IGJvdGggLS1ob3Rzd2FwIGFuZCAtLWhvdHN3YXAtZmFsbGJhY2sgYXQgdGhlIHNhbWUgdGltZScpO1xuICB9IGVsc2UgaWYgKCFob3Rzd2FwICYmICFob3Rzd2FwRmFsbGJhY2spIHtcbiAgICBpZiAoaG90c3dhcCA9PT0gdW5kZWZpbmVkICYmIGhvdHN3YXBGYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gd2F0Y2ggPyBIb3Rzd2FwTW9kZS5IT1RTV0FQX09OTFkgOiBIb3Rzd2FwTW9kZS5GVUxMX0RFUExPWU1FTlQ7XG4gICAgfSBlbHNlIGlmIChob3Rzd2FwID09PSBmYWxzZSB8fCBob3Rzd2FwRmFsbGJhY2sgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gSG90c3dhcE1vZGUuRlVMTF9ERVBMT1lNRU5UO1xuICAgIH1cbiAgfVxuXG4gIGxldCBob3Rzd2FwTW9kZTogSG90c3dhcE1vZGU7XG4gIGlmIChob3Rzd2FwKSB7XG4gICAgaG90c3dhcE1vZGUgPSBIb3Rzd2FwTW9kZS5IT1RTV0FQX09OTFk7XG4gICAgLyogaWYgKGhvdHN3YXBGYWxsYmFjaykqL1xuICB9IGVsc2Uge1xuICAgIGhvdHN3YXBNb2RlID0gSG90c3dhcE1vZGUuRkFMTF9CQUNLO1xuICB9XG5cbiAgcmV0dXJuIGhvdHN3YXBNb2RlO1xufVxuXG4vKiBjOCBpZ25vcmUgc3RhcnQgKi8gLy8gd2UgbmV2ZXIgY2FsbCB0aGlzIGluIHVuaXQgdGVzdHNcbmV4cG9ydCBmdW5jdGlvbiBjbGkoYXJnczogc3RyaW5nW10gPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMikpIHtcbiAgbGV0IGVycm9yOiBFcnJvckRldGFpbHMgfCB1bmRlZmluZWQ7XG4gIGV4ZWMoYXJncylcbiAgICAudGhlbihhc3luYyAodmFsdWUpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5jYXRjaChhc3luYyAoZXJyKSA9PiB7XG4gICAgICAvLyBMb2cgdGhlIHN0YWNrIHRyYWNlIGlmIHdlJ3JlIG9uIGEgZGV2ZWxvcGVyIHdvcmtzdGF0aW9uLiBPdGhlcndpc2UgdGhpcyB3aWxsIGJlIGludG8gYSBtaW5pZmllZFxuICAgICAgLy8gZmlsZSBhbmQgdGhlIHByaW50ZWQgY29kZSBsaW5lIGFuZCBzdGFjayB0cmFjZSBhcmUgaHVnZSBhbmQgdXNlbGVzcy5cbiAgICAgIHByZXR0eVByaW50RXJyb3IoZXJyLCBpc0RldmVsb3BlckJ1aWxkVmVyc2lvbigpKTtcbiAgICAgIGVycm9yID0ge1xuICAgICAgICBuYW1lOiBjZGtDbGlFcnJvck5hbWUoZXJyKSxcbiAgICAgIH07XG4gICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICB9KVxuICAgIC5maW5hbGx5KGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IENsaUlvSG9zdC5nZXQoKT8udGVsZW1ldHJ5Py5lbmQoZXJyb3IpO1xuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIGF3YWl0IENsaUlvSG9zdC5nZXQoKT8uYXNJb0hlbHBlcigpLmRlZmF1bHRzLnRyYWNlKGBFbmRpbmcgVGVsZW1ldHJ5IGZhaWxlZDogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfSk7XG59XG4vKiBjOCBpZ25vcmUgc3RvcCAqL1xuIl19
|
|
836
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBNENBLG9CQXNuQkM7QUF5TkQsa0JBd0JDO0FBbjVCRCxpREFBaUQsQ0FBQyxRQUFRO0FBQzFELHlDQUF5QztBQUV6QyxzREFBMkc7QUFDM0csK0JBQStCO0FBQy9CLGtDQUF3QztBQUN4QywrQ0FBMkQ7QUFDM0QsNkNBQW9EO0FBQ3BELHVEQUF1RjtBQUV2Rix1Q0FBc0M7QUFDdEMsaUZBQTJFO0FBQzNFLDJEQUErRDtBQUMvRCw2REFBd0Q7QUFDeEQsK0NBQW1EO0FBQ25ELG1FQUE2RDtBQUM3RCw2Q0FBb0Q7QUFHcEQsNkRBQXFEO0FBQ3JELG9EQUFnRDtBQUNoRCx1Q0FBcUY7QUFDckYsdURBQW1EO0FBRW5ELGdDQUFxRjtBQUNyRiw4Q0FBaUc7QUFFakcsZ0RBQWdEO0FBQ2hELG9EQUFpRDtBQUNqRCw0Q0FBNkM7QUFFN0MsaURBQWdFO0FBQ2hFLDJDQUF3QztBQUN4QywrQ0FBNEM7QUFDNUMsbURBQTZEO0FBQzdELDJDQUFvRTtBQUNwRSxtREFBNEQ7QUFDNUQsaURBQXlEO0FBQ3pELG9DQUF3RDtBQUV4RCx3RUFBa0U7QUFDbEUsa0NBQWlDO0FBQ2pDLG9EQUFnRDtBQUV6QyxLQUFLLFVBQVUsSUFBSSxDQUFDLElBQWMsRUFBRSxXQUF5QjtJQUNsRSwwR0FBMEc7SUFDMUcsZ0JBQWdCO0lBQ2hCLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUUxQyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUEsd0RBQXlCLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFBLCtCQUFvQixFQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO0lBRXJFLCtCQUErQjtJQUMvQixpREFBaUQ7SUFDakQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFF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QUFDLENBQUM7QUFDUCxDQUFDO0FBQ0Qsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvdyAqLyAvLyB5YXJnc1xuaW1wb3J0ICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCB0eXBlIHsgQ2hhbmdlU2V0RGVwbG95bWVudCwgRGVwbG95bWVudE1ldGhvZCwgRGlyZWN0RGVwbG95bWVudCwgU3RhY2tTZWxlY3RvciBhcyBMaWJTdGFja1NlbGVjdG9yIH0gZnJvbSAnQGF3cy1jZGsvdG9vbGtpdC1saWInO1xuaW1wb3J0IHsgRXhwYW5kU3RhY2tTZWxlY3Rpb24sIFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3ksIFRvb2xraXRFcnJvciwgVG9vbGtpdCB9IGZyb20gJ0Bhd3MtY2RrL3Rvb2xraXQtbGliJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IGd1ZXNzTGFuZ3VhZ2UgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IENka1Rvb2xraXQsIEFzc2V0QnVpbGRUaW1lIH0gZnJvbSAnLi9jZGstdG9vbGtpdCc7XG5pbXBvcnQgeyBjaVN5c3RlbUlzU3RkRXJyU2FmZSB9IGZyb20gJy4vY2ktc3lzdGVtcyc7XG5pbXBvcnQgeyBkaXNwbGF5VmVyc2lvbk1lc3NhZ2UsIHNob3VsZERpc3BsYXlWZXJzaW9uTWVzc2FnZSB9IGZyb20gJy4vZGlzcGxheS12ZXJzaW9uJztcbmltcG9ydCB0eXBlIHsgSW9NZXNzYWdlTGV2ZWwgfSBmcm9tICcuL2lvLWhvc3QnO1xuaW1wb3J0IHsgQ2xpSW9Ib3N0IH0gZnJvbSAnLi9pby1ob3N0JztcbmltcG9ydCB7IHBhcnNlQ29tbWFuZExpbmVBcmd1bWVudHMgfSBmcm9tICcuL3BhcnNlLWNvbW1hbmQtbGluZS1hcmd1bWVudHMnO1xuaW1wb3J0IHsgY2hlY2tGb3JQbGF0Zm9ybVdhcm5pbmdzIH0gZnJvbSAnLi9wbGF0Zm9ybS13YXJuaW5ncyc7XG5pbXBvcnQgeyBwcmV0dHlQcmludEVycm9yIH0gZnJvbSAnLi9wcmV0dHktcHJpbnQtZXJyb3InO1xuaW1wb3J0IHsgUHJveHlBZ2VudFByb3ZpZGVyIH0gZnJvbSAnLi9wcm94eS1hZ2VudCc7XG5pbXBvcnQgeyBHTE9CQUxfUExVR0lOX0hPU1QgfSBmcm9tICcuL3NpbmdsZXRvbi1wbHVnaW4taG9zdCc7XG5pbXBvcnQgeyBjZGtDbGlFcnJvck5hbWUgfSBmcm9tICcuL3RlbGVtZXRyeS9lcnJvcic7XG5pbXBvcnQgdHlwZSB7IEVycm9yRGV0YWlscyB9IGZyb20gJy4vdGVsZW1ldHJ5L3NjaGVtYSc7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tICcuL3VzZXItY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi91c2VyLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHsgdHJhcEVycm9ycyB9IGZyb20gJy4vdXRpbC90cmFwLWVycm9ycyc7XG5pbXBvcnQgeyBpc0RldmVsb3BlckJ1aWxkVmVyc2lvbiwgdmVyc2lvbldpdGhCdWlsZCwgdmVyc2lvbk51bWJlciB9IGZyb20gJy4vdmVyc2lvbic7XG5pbXBvcnQgeyBhc0lvSGVscGVyIH0gZnJvbSAnLi4vLi4vbGliL2FwaS1wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgSVJlYWRMb2NrIH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IFRvb2xraXRJbmZvLCBOb3RpY2VzLCBsb2FkVHJlZSwgZmluZENvbnN0cnVjdExpYnJhcnlWZXJzaW9uIH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IFNka1Byb3ZpZGVyLCBJb0hvc3RTZGtMb2dnZXIsIHNldFNka1RyYWNpbmcsIHNka1JlcXVlc3RIYW5kbGVyIH0gZnJvbSAnLi4vYXBpL2F3cy1hdXRoJztcbmltcG9ydCB0eXBlIHsgQm9vdHN0cmFwU291cmNlIH0gZnJvbSAnLi4vYXBpL2Jvb3RzdHJhcCc7XG5pbXBvcnQgeyBCb290c3RyYXBwZXIgfSBmcm9tICcuLi9hcGkvYm9vdHN0cmFwJztcbmltcG9ydCB7IERlcGxveW1lbnRzIH0gZnJvbSAnLi4vYXBpL2RlcGxveW1lbnRzJztcbmltcG9ydCB7IEhvdHN3YXBNb2RlIH0gZnJvbSAnLi4vYXBpL2hvdHN3YXAnO1xuaW1wb3J0IHR5cGUgeyBTZXR0aW5ncyB9IGZyb20gJy4uL2FwaS9zZXR0aW5ncyc7XG5pbXBvcnQgeyBjb250ZXh0SGFuZGxlciBhcyBjb250ZXh0IH0gZnJvbSAnLi4vY29tbWFuZHMvY29udGV4dCc7XG5pbXBvcnQgeyBkb2NzIH0gZnJvbSAnLi4vY29tbWFuZHMvZG9jcyc7XG5pbXBvcnQgeyBkb2N0b3IgfSBmcm9tICcuLi9jb21tYW5kcy9kb2N0b3InO1xuaW1wb3J0IHsgRmxhZ0NvbW1hbmRIYW5kbGVyIH0gZnJvbSAnLi4vY29tbWFuZHMvZmxhZ3MvZmxhZ3MnO1xuaW1wb3J0IHsgY2xpSW5pdCwgcHJpbnRBdmFpbGFibGVUZW1wbGF0ZXMgfSBmcm9tICcuLi9jb21tYW5kcy9pbml0JztcbmltcG9ydCB7IGdldExhbmd1YWdlRnJvbUFsaWFzIH0gZnJvbSAnLi4vY29tbWFuZHMvbGFuZ3VhZ2UnO1xuaW1wb3J0IHsgZ2V0TWlncmF0ZVNjYW5UeXBlIH0gZnJvbSAnLi4vY29tbWFuZHMvbWlncmF0ZSc7XG5pbXBvcnQgeyBleGVjUHJvZ3JhbSwgQ2xvdWRFeGVjdXRhYmxlIH0gZnJvbSAnLi4vY3hhcHAnO1xuaW1wb3J0IHR5cGUgeyBTdGFja1NlbGVjdG9yLCBTeW50aGVzaXplciB9IGZyb20gJy4uL2N4YXBwJztcbmltcG9ydCB7IGZpbmRVbmtub3duT3B0aW9ucyB9IGZyb20gJy4vdXRpbC9jaGVjay11bmtub3duLW9wdGlvbnMnO1xuaW1wb3J0IHsgaXNDSSB9IGZyb20gJy4vdXRpbC9jaSc7XG5pbXBvcnQgeyBndWVzc0FnZW50IH0gZnJvbSAnLi91dGlsL2d1ZXNzLWFnZW50JztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWMoYXJnczogc3RyaW5nW10sIHN5bnRoZXNpemVyPzogU3ludGhlc2l6ZXIpOiBQcm9taXNlPG51bWJlciB8IHZvaWQ+IHtcbiAgLy8gVGhpcyBpcyB0aGUgdmVyeSBmaXJzdCBjb2RlIHRoYXQgcnVucywgYnV0IGxpYnJhcmllcyBoYXZlIGJlZW4gbG9hZGVkIGFscmVhZHkgYW5kIHRoYXQgYWxzbyBjb3N0cyB0aW1lLlxuICAvLyBNZWFzdXJlIHRoYXQuXG4gIGNvbnN0IGxpYnJhcnlMb2FkVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXG4gIGNvbnN0IGFyZ3YgPSBhd2FpdCBwYXJzZUNvbW1hbmRMaW5lQXJndW1lbnRzKGFyZ3MpO1xuICBhcmd2Lmxhbmd1YWdlID0gZ2V0TGFuZ3VhZ2VGcm9tQWxpYXMoYXJndi5sYW5ndWFnZSkgPz8gYXJndi5sYW5ndWFnZTtcblxuICAvLyBIYW5kbGUgY29sb3Igb3V0cHV0IHNldHRpbmdzXG4gIC8vIFByaW9yaXR5OiAtLW5vLWNvbG9yID4gLS1jb2xvciA+IFRUWSBkZXRlY3Rpb25cbiAgaWYgKGFyZ3Yubm9Db2xvcikge1xuICAgIHByb2Nlc3MuZW52LkZPUkNFX0NPTE9SID0gJzAnO1xuICB9IGVsc2UgaWYgKGFyZ3YuY29sb3IpIHtcbiAgICBwcm9jZXNzLmVudi5GT1JDRV9DT0xPUiA9ICczJztcbiAgfSBlbHNlIGlmICghcHJvY2Vzcy5zdGRvdXQuaXNUVFkpIHtcbiAgICAvLyBEZWZhdWx0IGJlaGF2aW9yOiBkaXNhYmxlIGNvbG9ycyBmb3Igbm9uLVRUWVxuICAgIHByb2Nlc3MuZW52LkZPUkNFX0NPTE9SID0gJzAnO1xuICB9XG5cbiAgY29uc3QgY21kID0gYXJndi5fWzBdO1xuXG4gIC8vIGlmIG9uZSAtdiwgbG9nIGF0IGEgREVCVUcgbGV2ZWxcbiAgLy8gaWYgMiAtdiwgbG9nIGF0IGEgVFJBQ0UgbGV2ZWxcbiAgbGV0IGlvTWVzc2FnZUxldmVsOiBJb01lc3NhZ2VMZXZlbCA9ICdpbmZvJztcbiAgaWYgKGFyZ3YudmVyYm9zZSkge1xuICAgIHN3aXRjaCAoYXJndi52ZXJib3NlKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIGlvTWVzc2FnZUxldmVsID0gJ2RlYnVnJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpb01lc3NhZ2VMZXZlbCA9ICd0cmFjZSc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGlvSG9zdCA9IENsaUlvSG9zdC5pbnN0YW5jZSh7XG4gICAgbG9nTGV2ZWw6IGlvTWVzc2FnZUxldmVsLFxuICAgIGlzVFRZOiBwcm9jZXNzLnN0ZG91dC5pc1RUWSxcbiAgICBpc0NJOiBCb29sZWFuKGFyZ3YuY2kpLFxuICAgIGN1cnJlbnRBY3Rpb246IGNtZCxcbiAgICBzdGFja1Byb2dyZXNzOiBhcmd2LnByb2dyZXNzLFxuICAgIGF1dG9SZXNwb25kOiBhcmd2LnllcyxcbiAgfSwgdHJ1ZSk7XG4gIGNvbnN0IGlvSGVscGVyID0gYXNJb0hlbHBlcihpb0hvc3QsIGlvSG9zdC5jdXJyZW50QWN0aW9uIGFzIGFueSk7XG5cbiAgLy8gQ0xJIGRlYnVnZ2luZyAoYW5kIHRoZSBoaWdoZXN0IHZlcmJvc2l0eSwgYC12dnZgKSB0dXJucyBvbiB2ZXJib3NlIEFXUyBTREsgdHJhY2luZy5cbiAgc2V0U2RrVHJhY2luZyhCb29sZWFuKGFyZ3YuZGVidWdDbGkpIHx8IGFyZ3YudmVyYm9zZSA+IDIpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgY2hlY2tGb3JQbGF0Zm9ybVdhcm5pbmdzKGlvSGVscGVyKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGF3YWl0IGlvSG9zdC5kZWZhdWx0cy5kZWJ1ZyhgRXJyb3Igd2hpbGUgY2hlY2tpbmcgZm9yIHBsYXRmb3JtIHdhcm5pbmdzOiAke2V9YCk7XG4gIH1cblxuICBhd2FpdCBpb0hvc3QuZGVmYXVsdHMuZGVidWcoJ0NESyBUb29sa2l0IENMSSB2ZXJzaW9uOicsIHZlcnNpb25XaXRoQnVpbGQoKSk7XG4gIGF3YWl0IGlvSG9zdC5kZWZhdWx0cy5kZWJ1ZygnQ29tbWFuZCBsaW5lIGFyZ3VtZW50czonLCBhcmd2KTtcblxuICBjb25zdCB1bmtub3duT3B0aW9ucyA9IGZpbmRVbmtub3duT3B0aW9ucyhhcmd2KTtcbiAgaWYgKHVua25vd25PcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSB1bmtub3duT3B0aW9ucy5tYXAoKG8pID0+IGAtLSR7b31gKS5qb2luKCcsICcpO1xuICAgIGF3YWl0IGlvSG9zdC5kZWZhdWx0cy53YXJuKGBVbmtub3duIG9wdGlvbihzKTogJHtmb3JtYXR0ZWR9LiBUaGVzZSB3aWxsIGJlIGlnbm9yZWQuIFJ1biAnY2RrIC0taGVscCcgdG8gc2VlIGF2YWlsYWJsZSBvcHRpb25zLmApO1xuICB9XG5cbiAgY29uc3QgY29uZmlndXJhdGlvbiA9IGF3YWl0IENvbmZpZ3VyYXRpb24uZnJvbUFyZ3NBbmRGaWxlcyhpb0hlbHBlcixcbiAgICB7XG4gICAgICBjb21tYW5kTGluZUFyZ3VtZW50czoge1xuICAgICAgICAuLi5hcmd2LFxuICAgICAgICBfOiBhcmd2Ll8gYXMgW0NvbW1hbmQsIC4uLnN0cmluZ1tdXSwgLy8gVHlwZVNjcmlwdCBhdCBpdHMgYmVzdFxuICAgICAgfSxcbiAgICB9KTtcblxuICAvLyBBbHdheXMgY3JlYXRlIGFuZCB1c2UgUHJveHlBZ2VudCB0byBzdXBwb3J0IGNvbmZpZ3VyYXRpb24gdmlhIGVudiB2YXJzXG4gIGNvbnN0IHByb3h5QWdlbnQgPSBhd2FpdCBuZXcgUHJveHlBZ2VudFByb3ZpZGVyKGlvSGVscGVyKS5jcmVhdGUoe1xuICAgIHByb3h5QWRkcmVzczogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydwcm94eSddKSxcbiAgICBjYUJ1bmRsZVBhdGg6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnY2FCdW5kbGVQYXRoJ10pLFxuICB9KTtcblxuICB0cnkge1xuICAgIGF3YWl0IGlvSG9zdC5zdGFydFRlbGVtZXRyeShhcmd2LCBjb25maWd1cmF0aW9uLmNvbnRleHQsIHByb3h5QWdlbnQpO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICBhd2FpdCBpb0hvc3QuYXNJb0hlbHBlcigpLmRlZmF1bHRzLnRyYWNlKGBUZWxlbWV0cnkgaW5zdGFudGlhdGlvbiBmYWlsZWQ6ICR7ZS5tZXNzYWdlfWApO1xuICB9XG5cbiAgaW9Ib3N0LnRlbGVtZXRyeT8uYXR0YWNoTG9hZFRpbWUobGlicmFyeUxvYWRUaW1lKTtcbiAgaW9Ib3N0LnRlbGVtZXRyeT8uYXR0YWNoTGFuZ3VhZ2UoYXdhaXQgZ3Vlc3NMYW5ndWFnZShwcm9jZXNzLmN3ZCgpKSk7XG4gIGlvSG9zdC50ZWxlbWV0cnk/LmF0dGFjaEFnZW50KGd1ZXNzQWdlbnQoKSk7XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBkaXNwbGF5aW5nIChhbmQgcmVmcmVzaGluZykgbm90aWNlcyBvbiBhbGwgY29tbWFuZHMuXG4gICAqXG4gICAqIElmIHRoZSB1c2VyIGRpZG4ndCBzdXBwbHkgZWl0aGVyIGAtLW5vdGljZXNgIG9yIGAtLW5vLW5vdGljZXNgLCB3ZSBkb1xuICAgKiBhdXRvZGV0ZWN0aW9uLiBUaGUgYXV0b2RldGVjdGlvbiBjdXJyZW50bHkgaXM6IGRvIHdyaXRlIG5vdGljZXMgaWYgd2UgYXJlXG4gICAqIG5vdCBvbiBDSSwgb3IgYXJlIG9uIGEgQ0kgc3lzdGVtIHdoZXJlIHdlIGtub3cgdGhhdCB3cml0aW5nIHRvIHN0ZGVyciBpc1xuICAgKiBzYWZlLiBXZSBmYWlsIFwiY2xvc2VkXCI7IHRoYXQgaXMsIHdlIGRlY2lkZSB0byBOT1QgcHJpbnQgZm9yIHVua25vd24gQ0lcbiAgICogc3lzdGVtcywgZXZlbiB0aG91Z2ggdGVjaG5pY2FsbHkgd2UgbWF5YmUgY291bGQuXG4gICAqL1xuICBjb25zdCBpc1NhZmVUb1dyaXRlTm90aWNlcyA9ICFpc0NJKCkgfHwgQm9vbGVhbihjaVN5c3RlbUlzU3RkRXJyU2FmZSgpKTtcblxuICAvLyBEZXRlcm1pbmUgaWYgbm90aWNlcyBzaG91bGQgYmUgZGlzcGxheWVkIGJhc2VkIG9uIENMSSBhcmdzIGFuZCBjb25maWd1cmF0aW9uXG4gIGxldCBzaG91bGREaXNwbGF5Tm90aWNlczogYm9vbGVhbjtcbiAgaWYgKGFyZ3Yubm90aWNlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gQ0xJIGFyZ3VtZW50IHRha2VzIHByZWNlZGVuY2VcbiAgICBzaG91bGREaXNwbGF5Tm90aWNlcyA9IGFyZ3Yubm90aWNlcztcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsIGJhY2sgdG8gY29uZmlndXJhdGlvbiBmaWxlIHNldHRpbmcsIHRoZW4gYXV0b2RldGVjdGlvblxuICAgIGNvbnN0IGNvbmZpZ05vdGljZXMgPSBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ25vdGljZXMnXSk7XG4gICAgaWYgKGNvbmZpZ05vdGljZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQ29uc2lkZXIgc3RyaW5nIFwiZmFsc2VcIiB0byBiZSBmYWxzeSBpbiB0aGlzIGNvbnRleHRcbiAgICAgIHNob3VsZERpc3BsYXlOb3RpY2VzID0gY29uZmlnTm90aWNlcyAhPT0gJ2ZhbHNlJyAmJiBCb29sZWFuKGNvbmZpZ05vdGljZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWZhdWx0IGF1dG9kZXRlY3Rpb24gYmVoYXZpb3JcbiAgICAgIHNob3VsZERpc3BsYXlOb3RpY2VzID0gaXNTYWZlVG9Xcml0ZU5vdGljZXM7XG4gICAgfVxuICB9XG5cbiAgLy8gTm90aWNlcyBlaXRoZXIgZ28gdG8gc3RkZXJyLCBvciBub3doZXJlXG4gIGlvSG9zdC5ub3RpY2VzRGVzdGluYXRpb24gPSBzaG91bGREaXNwbGF5Tm90aWNlcyA/ICdzdGRlcnInIDogJ2Ryb3AnO1xuICBjb25zdCBub3RpY2VzID0gTm90aWNlcy5jcmVhdGUoe1xuICAgIGlvSG9zdCxcbiAgICBjb250ZXh0OiBjb25maWd1cmF0aW9uLmNvbnRleHQsXG4gICAgb3V0cHV0OiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ291dGRpciddKSxcbiAgICBsYW5ndWFnZTogYXdhaXQgZ3Vlc3NMYW5ndWFnZShwcm9jZXNzLmN3ZCgpKSxcbiAgICBodHRwT3B0aW9uczogeyBhZ2VudDogcHJveHlBZ2VudCB9LFxuICAgIGNsaVZlcnNpb246IHZlcnNpb25OdW1iZXIoKSxcbiAgfSk7XG4gIGNvbnN0IHJlZnJlc2hOb3RpY2VzID0gKGFzeW5jICgpID0+IHtcbiAgICAvLyB0aGUgY2RrIG5vdGljZXMgY29tbWFuZCBoYXMgaXQncyBvd24gcmVmcmVzaFxuICAgIGlmIChzaG91bGREaXNwbGF5Tm90aWNlcyAmJiBjbWQgIT09ICdub3RpY2VzJykge1xuICAgICAgYXdhaXQgdHJhcEVycm9ycyhpb0hlbHBlciwgJ0NvdWxkIG5vdCByZWZyZXNoIG5vdGljZXMnLCAoKSA9PiBub3RpY2VzLnJlZnJlc2goKSk7XG4gICAgfVxuICB9KSgpO1xuXG4gIGNvbnN0IHNka1Byb3ZpZGVyID0gYXdhaXQgU2RrUHJvdmlkZXIud2l0aEF3c0NsaUNvbXBhdGlibGVEZWZhdWx0cyh7XG4gICAgaW9IZWxwZXIsXG4gICAgcmVxdWVzdEhhbmRsZXI6IHNka1JlcXVlc3RIYW5kbGVyKHByb3h5QWdlbnQpLFxuICAgIGxvZ2dlcjogbmV3IElvSG9zdFNka0xvZ2dlcihhc0lvSGVscGVyKGlvSG9zdCwgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gYXMgYW55KSksXG4gICAgcGx1Z2luSG9zdDogR0xPQkFMX1BMVUdJTl9IT1NULFxuICB9LCBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Byb2ZpbGUnXSksIGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncmVnaW9uJ10pKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGlvSG9zdC50ZWxlbWV0cnk/LmF0dGFjaFJlZ2lvbihzZGtQcm92aWRlci5kZWZhdWx0UmVnaW9uKTtcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgYXdhaXQgaW9Ib3N0LmFzSW9IZWxwZXIoKS5kZWZhdWx0cy50cmFjZShgVGVsZW1ldHJ5IGF0dGFjaCByZWdpb24gZmFpbGVkOiAke2UubWVzc2FnZX1gKTtcbiAgfVxuXG4gIGxldCBvdXREaXJMb2NrOiBJUmVhZExvY2sgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGNsb3VkRXhlY3V0YWJsZSA9IG5ldyBDbG91ZEV4ZWN1dGFibGUoe1xuICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgc2RrUHJvdmlkZXIsXG4gICAgc3ludGhlc2l6ZXI6XG4gICAgICBzeW50aGVzaXplciA/P1xuICAgICAgKGFzeW5jIChhd3MsIGNvbmZpZykgPT4ge1xuICAgICAgICAvLyBJbnZva2UgJ2V4ZWNQcm9ncmFtJywgYW5kIGNvcHkgdGhlIGxvY2sgZm9yIHRoZSBkaXJlY3RvcnkgaW4gdGhlIGdsb2JhbFxuICAgICAgICAvLyB2YXJpYWJsZSBoZXJlLiBJdCB3aWxsIGJlIHJlbGVhc2VkIHdoZW4gdGhlIENMSSBleGl0cy4gTG9ja3MgYXJlIG5vdCByZS1lbnRyYW50XG4gICAgICAgIC8vIHNvIHJlbGVhc2UgaXQgaWYgd2UgaGF2ZSB0byBzeW50aGVzaXplIG1vcmUgdGhhbiBvbmNlIChiZWNhdXNlIG9mIGNvbnRleHQgbG9va3VwcykuXG4gICAgICAgIGF3YWl0IG91dERpckxvY2s/LnJlbGVhc2UoKTtcbiAgICAgICAgY29uc3QgeyBhc3NlbWJseSwgbG9jaywgcGVyZkNvdW50ZXJzIH0gPSBhd2FpdCBleGVjUHJvZ3JhbShhd3MsIGlvSG9zdC5hc0lvSGVscGVyKCksIGNvbmZpZyk7XG4gICAgICAgIG91dERpckxvY2sgPSBsb2NrO1xuXG4gICAgICAgIGNvbnN0IHRyZWUgPSBhd2FpdCBsb2FkVHJlZShhc3NlbWJseSwgaW9IZWxwZXIuZGVmYXVsdHMudHJhY2UuYmluZChpb0hlbHBlci5kZWZhdWx0cykpO1xuICAgICAgICBpZiAodHJlZSkge1xuICAgICAgICAgIGNvbnN0IHYgPSBmaW5kQ29uc3RydWN0TGlicmFyeVZlcnNpb24odHJlZSk7XG4gICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgIGlvSG9zdC50ZWxlbWV0cnk/LmF0dGFjaENka0xpYlZlcnNpb24odik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBlcmZDb3VudGVycykge1xuICAgICAgICAgIGlvSG9zdC50ZWxlbWV0cnk/LmF0dGFjaENvdW50ZXJzVG9OZXh0RXZlbnQocGVyZkNvdW50ZXJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhc3NlbWJseTtcbiAgICAgIH0pLFxuICAgIGlvSGVscGVyOiBpb0hvc3QuYXNJb0hlbHBlcigpLFxuICB9KTtcblxuICAvKiogRnVuY3Rpb24gdG8gbG9hZCBwbHVnLWlucywgdXNpbmcgY29uZmlndXJhdGlvbnMgYWRkaXRpdmVseS4gKi9cbiAgYXN5bmMgZnVuY3Rpb24gbG9hZFBsdWdpbnMoLi4uc2V0dGluZ3M6IFNldHRpbmdzW10pIHtcbiAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBzZXR0aW5ncykge1xuICAgICAgY29uc3QgcGx1Z2luczogc3RyaW5nW10gPSBzb3VyY2UuZ2V0KFsncGx1Z2luJ10pIHx8IFtdO1xuICAgICAgZm9yIChjb25zdCBwbHVnaW4gb2YgcGx1Z2lucykge1xuICAgICAgICBhd2FpdCBHTE9CQUxfUExVR0lOX0hPU1QubG9hZChwbHVnaW4sIGlvSG9zdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXdhaXQgbG9hZFBsdWdpbnMoY29uZmlndXJhdGlvbi5zZXR0aW5ncyk7XG5cbiAgaWYgKCh0eXBlb2YgY21kKSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdJbnZhbGlkQXJnVHlwZScsIGBGaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgYSBzdHJpbmcuIEdvdDogJHtjbWR9ICgke3R5cGVvZiBjbWR9KWApO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgbWFpbihjbWQsIGFyZ3YpO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIElmIHdlIGxvY2tlZCB0aGUgJ2Nkay5vdXQnIGRpcmVjdG9yeSwgcmVsZWFzZSBpdCBoZXJlLlxuICAgIGF3YWl0IG91dERpckxvY2s/LnJlbGVhc2UoKTtcblxuICAgIC8vIERvIFBTQXMgaGVyZVxuICAgIGlmIChzaG91bGREaXNwbGF5VmVyc2lvbk1lc3NhZ2UoKSkge1xuICAgICAgYXdhaXQgZGlzcGxheVZlcnNpb25NZXNzYWdlKGlvSGVscGVyKTtcbiAgICB9XG5cbiAgICBhd2FpdCByZWZyZXNoTm90aWNlcztcbiAgICBpZiAoY21kID09PSAnbm90aWNlcycpIHtcbiAgICAgIC8vIGRvIG5vdCB0cmFwIGVycm9ycyBoZXJlXG4gICAgICAvLyB0aGlzIGlzIHRoZSBub3RpY2VzIGNvbW1hbmQgaXRzZWxmLCBhbnkgZXJyb3Igc2hvdWxkIGJlIGxvdWRcbiAgICAgIGF3YWl0IG5vdGljZXMucmVmcmVzaCh7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgYXdhaXQgbm90aWNlcy5kaXNwbGF5KHtcbiAgICAgICAgaW5jbHVkZUFja25vd2xlZGdlZDogIWFyZ3YudW5hY2tub3dsZWRnZWQsXG4gICAgICAgIHNob3dUb3RhbDogYXJndi51bmFja25vd2xlZGdlZCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoc2hvdWxkRGlzcGxheU5vdGljZXMgJiYgY21kICE9PSAndmVyc2lvbicpIHtcbiAgICAgIGF3YWl0IHRyYXBFcnJvcnMoaW9IZWxwZXIsICdDb3VsZCBub3QgZGlzcGxheSBub3RpY2VzJywgKCkgPT4gbm90aWNlcy5kaXNwbGF5KCkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIG1haW4oY29tbWFuZDogc3RyaW5nLCBhcmdzOiBhbnkpOiBQcm9taXNlPG51bWJlciB8IHZvaWQ+IHtcbiAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9IGNvbW1hbmQgYXMgYW55O1xuICAgIGNvbnN0IHRvb2xraXRTdGFja05hbWU6IHN0cmluZyA9IFRvb2xraXRJbmZvLmRldGVybWluZU5hbWUoY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWyd0b29sa2l0U3RhY2tOYW1lJ10pKTtcbiAgICBhd2FpdCBpb0hvc3QuZGVmYXVsdHMuZGVidWcoYFRvb2xraXQgc3RhY2s6ICR7Y2hhbGsuYm9sZCh0b29sa2l0U3RhY2tOYW1lKX1gKTtcblxuICAgIGNvbnN0IGNsb3VkRm9ybWF0aW9uID0gbmV3IERlcGxveW1lbnRzKHtcbiAgICAgIHNka1Byb3ZpZGVyLFxuICAgICAgdG9vbGtpdFN0YWNrTmFtZSxcbiAgICAgIGlvSGVscGVyOiBhc0lvSGVscGVyKGlvSG9zdCwgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gYXMgYW55KSxcbiAgICB9KTtcblxuICAgIGlmIChhcmdzLmFsbCAmJiBhcmdzLlNUQUNLUykge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignU3RhY2tzT3JBbGxSZXF1aXJlZCcsICdZb3UgbXVzdCBlaXRoZXIgc3BlY2lmeSBhIGxpc3Qgb2YgU3RhY2tzIG9yIHRoZSBgLS1hbGxgIGFyZ3VtZW50Jyk7XG4gICAgfVxuXG4gICAgYXJncy5TVEFDS1MgPSBhcmdzLlNUQUNLUyA/PyAoYXJncy5TVEFDSyA/IFthcmdzLlNUQUNLXSA6IFtdKTtcbiAgICBhcmdzLkVOVklST05NRU5UUyA9IGFyZ3MuRU5WSVJPTk1FTlRTID8/IFtdO1xuXG4gICAgY29uc3Qgc2VsZWN0b3I6IFN0YWNrU2VsZWN0b3IgPSB7XG4gICAgICBhbGxUb3BMZXZlbDogYXJncy5hbGwsXG4gICAgICBwYXR0ZXJuczogYXJncy5TVEFDS1MsXG4gICAgfTtcblxuICAgIGNvbnN0IGNsaSA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgIGlvSG9zdCxcbiAgICAgIGNsb3VkRXhlY3V0YWJsZSxcbiAgICAgIHRvb2xraXRTdGFja05hbWUsXG4gICAgICBkZXBsb3ltZW50czogY2xvdWRGb3JtYXRpb24sXG4gICAgICB2ZXJib3NlOiBhcmd2LnRyYWNlIHx8IGFyZ3YudmVyYm9zZSA+IDAsXG4gICAgICBpZ25vcmVFcnJvcnM6IGFyZ3ZbJ2lnbm9yZS1lcnJvcnMnXSxcbiAgICAgIHN0cmljdDogYXJndi5zdHJpY3QsXG4gICAgICBjb25maWd1cmF0aW9uLFxuICAgICAgc2RrUHJvdmlkZXIsXG4gICAgfSk7XG5cbiAgICBpb0hvc3QudGVsZW1ldHJ5Py5tYXJrT3BlcmF0aW9uU3RhcnQoKTtcblxuICAgIHN3aXRjaCAoY29tbWFuZCkge1xuICAgICAgY2FzZSAnY29udGV4dCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2NvbnRleHQnO1xuICAgICAgICByZXR1cm4gY29udGV4dCh7XG4gICAgICAgICAgaW9IZWxwZXIsXG4gICAgICAgICAgY29udGV4dDogY29uZmlndXJhdGlvbi5jb250ZXh0LFxuICAgICAgICAgIGNsZWFyOiBhcmd2LmNsZWFyLFxuICAgICAgICAgIGpzb246IGFyZ3YuanNvbixcbiAgICAgICAgICBmb3JjZTogYXJndi5mb3JjZSxcbiAgICAgICAgICByZXNldDogYXJndi5yZXNldCxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2RvY3MnOlxuICAgICAgY2FzZSAnZG9jJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnZG9jcyc7XG4gICAgICAgIHJldHVybiBkb2NzKHtcbiAgICAgICAgICBpb0hlbHBlcixcbiAgICAgICAgICBicm93c2VyOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ2Jyb3dzZXInXSksXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdkb2N0b3InOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdkb2N0b3InO1xuICAgICAgICByZXR1cm4gZG9jdG9yKHtcbiAgICAgICAgICBpb0hlbHBlcixcbiAgICAgICAgICBzZXR0aW5nczogY29uZmlndXJhdGlvbi5zZXR0aW5ncyxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2xzJzpcbiAgICAgIGNhc2UgJ2xpc3QnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdsaXN0JztcbiAgICAgICAgcmV0dXJuIGNsaS5saXN0KGFyZ3MuU1RBQ0tTLCB7XG4gICAgICAgICAgbG9uZzogYXJncy5sb25nLFxuICAgICAgICAgIGpzb246IGFyZ3YuanNvbixcbiAgICAgICAgICBzaG93RGVwczogYXJncy5zaG93RGVwZW5kZW5jaWVzLFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnZGlmZic6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2RpZmYnO1xuICAgICAgICBjb25zdCBlbmFibGVEaWZmTm9GYWlsID0gaXNGZWF0dXJlRW5hYmxlZChjb25maWd1cmF0aW9uLCBjeGFwaS5FTkFCTEVfRElGRl9OT19GQUlMX0NPTlRFWFQpO1xuICAgICAgICByZXR1cm4gY2xpLmRpZmYoe1xuICAgICAgICAgIHN0YWNrTmFtZXM6IGFyZ3MuU1RBQ0tTLFxuICAgICAgICAgIGV4Y2x1c2l2ZWx5OiBhcmdzLmV4Y2x1c2l2ZWx5LFxuICAgICAgICAgIHRlbXBsYXRlUGF0aDogYXJncy50ZW1wbGF0ZSxcbiAgICAgICAgICBzdHJpY3Q6IGFyZ3Muc3RyaWN0LFxuICAgICAgICAgIGNvbnRleHRMaW5lczogYXJncy5jb250ZXh0TGluZXMsXG4gICAgICAgICAgc2VjdXJpdHlPbmx5OiBhcmdzLnNlY3VyaXR5T25seSxcbiAgICAgICAgICBmYWlsOiBhcmdzLmZhaWwgIT0gbnVsbCA/IGFyZ3MuZmFpbCA6ICFlbmFibGVEaWZmTm9GYWlsLFxuICAgICAgICAgIGNvbXBhcmVBZ2FpbnN0UHJvY2Vzc2VkVGVtcGxhdGU6IGFyZ3MucHJvY2Vzc2VkLFxuICAgICAgICAgIHF1aWV0OiBhcmdzLnF1aWV0LFxuICAgICAgICAgIG1ldGhvZDogZGV0ZXJtaW5lRGlmZk1ldGhvZChhcmdzKSxcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lOiB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAgIGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzOiBhcmdzLmltcG9ydEV4aXN0aW5nUmVzb3VyY2VzLFxuICAgICAgICAgIGluY2x1ZGVNb3ZlczogYXJnc1snaW5jbHVkZS1tb3ZlcyddLFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnZHJpZnQnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdkcmlmdCc7XG4gICAgICAgIHJldHVybiBjbGkuZHJpZnQoe1xuICAgICAgICAgIHNlbGVjdG9yLFxuICAgICAgICAgIGZhaWw6IGFyZ3MuZmFpbCxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3JlZmFjdG9yJzpcbiAgICAgICAgY2xpUmVxdWlyZVVuc3RhYmxlKGNvbmZpZ3VyYXRpb24sICdyZWZhY3RvcicpO1xuXG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ3JlZmFjdG9yJztcbiAgICAgICAgcmV0dXJuIGNsaS5yZWZhY3Rvcih7XG4gICAgICAgICAgZHJ5UnVuOiBhcmdzLmRyeVJ1bixcbiAgICAgICAgICBvdmVycmlkZUZpbGU6IGFyZ3Mub3ZlcnJpZGVGaWxlLFxuICAgICAgICAgIHJldmVydDogYXJncy5yZXZlcnQsXG4gICAgICAgICAgc3RhY2tzOiBzZWxlY3RvcixcbiAgICAgICAgICBhZGRpdGlvbmFsU3RhY2tOYW1lczogYXJyYXlGcm9tWWFyZ3MoYXJncy5hZGRpdGlvbmFsU3RhY2tOYW1lID8/IFtdKSxcbiAgICAgICAgICBmb3JjZTogYXJncy5mb3JjZSA/PyBmYWxzZSxcbiAgICAgICAgICByb2xlQXJuOiBhcmdzLnJvbGVBcm4sXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdib290c3RyYXAnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdib290c3RyYXAnO1xuICAgICAgICBjb25zdCBzb3VyY2U6IEJvb3RzdHJhcFNvdXJjZSA9IGF3YWl0IGRldGVybWluZUJvb3RzdHJhcFZlcnNpb24oaW9Ib3N0LCBhcmdzKTtcblxuICAgICAgICBpZiAoYXJncy5zaG93VGVtcGxhdGUpIHtcbiAgICAgICAgICBjb25zdCBib290c3RyYXBwZXIgPSBuZXcgQm9vdHN0cmFwcGVyKHNvdXJjZSwgYXNJb0hlbHBlcihpb0hvc3QsIGlvSG9zdC5jdXJyZW50QWN0aW9uKSk7XG4gICAgICAgICAgcmV0dXJuIGJvb3RzdHJhcHBlci5zaG93VGVtcGxhdGUoYXJncy5qc29uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjbGkuYm9vdHN0cmFwKGFyZ3MuRU5WSVJPTk1FTlRTLCB7XG4gICAgICAgICAgc291cmNlLFxuICAgICAgICAgIHJvbGVBcm46IGFyZ3Mucm9sZUFybixcbiAgICAgICAgICBmb3JjZURlcGxveW1lbnQ6IGFyZ3YuZm9yY2UsXG4gICAgICAgICAgdG9vbGtpdFN0YWNrTmFtZTogdG9vbGtpdFN0YWNrTmFtZSxcbiAgICAgICAgICBleGVjdXRlOiBhcmdzLmV4ZWN1dGUsXG4gICAgICAgICAgdGFnczogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWyd0YWdzJ10pLFxuICAgICAgICAgIHRlcm1pbmF0aW9uUHJvdGVjdGlvbjogYXJncy50ZXJtaW5hdGlvblByb3RlY3Rpb24sXG4gICAgICAgICAgdXNlUHJldmlvdXNQYXJhbWV0ZXJzOiBhcmdzWydwcmV2aW91cy1wYXJhbWV0ZXJzJ10sXG4gICAgICAgICAgaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXM6IGFyZ3MuaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgYnVja2V0TmFtZTogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWyd0b29sa2l0QnVja2V0JywgJ2J1Y2tldE5hbWUnXSksXG4gICAgICAgICAgICBrbXNLZXlJZDogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWyd0b29sa2l0QnVja2V0JywgJ2ttc0tleUlkJ10pLFxuICAgICAgICAgICAgY3JlYXRlQ3VzdG9tZXJNYXN0ZXJLZXk6IGFyZ3MuYm9vdHN0cmFwQ3VzdG9tZXJLZXksXG4gICAgICAgICAgICBxdWFsaWZpZXI6IGFyZ3MucXVhbGlmaWVyID8/IGNvbmZpZ3VyYXRpb24uY29udGV4dC5nZXQoJ0Bhd3MtY2RrL2NvcmU6Ym9vdHN0cmFwUXVhbGlmaWVyJyksXG4gICAgICAgICAgICBwdWJsaWNBY2Nlc3NCbG9ja0NvbmZpZ3VyYXRpb246IGFyZ3MucHVibGljQWNjZXNzQmxvY2tDb25maWd1cmF0aW9uLFxuICAgICAgICAgICAgZXhhbXBsZVBlcm1pc3Npb25zQm91bmRhcnk6IGFyZ3YuZXhhbXBsZVBlcm1pc3Npb25zQm91bmRhcnksXG4gICAgICAgICAgICBjdXN0b21QZXJtaXNzaW9uc0JvdW5kYXJ5OiBhcmd2LmN1c3RvbVBlcm1pc3Npb25zQm91bmRhcnksXG4gICAgICAgICAgICB0cnVzdGVkQWNjb3VudHM6IGFycmF5RnJvbVlhcmdzKGFyZ3MudHJ1c3QpLFxuICAgICAgICAgICAgdHJ1c3RlZEFjY291bnRzRm9yTG9va3VwOiBhcnJheUZyb21ZYXJncyhhcmdzLnRydXN0Rm9yTG9va3VwKSxcbiAgICAgICAgICAgIHVudHJ1c3RlZEFjY291bnRzOiBhcnJheUZyb21ZYXJncyhhcmdzLnVudHJ1c3QpLFxuICAgICAgICAgICAgY2xvdWRGb3JtYXRpb25FeGVjdXRpb25Qb2xpY2llczogYXJyYXlGcm9tWWFyZ3MoYXJncy5jbG91ZGZvcm1hdGlvbkV4ZWN1dGlvblBvbGljaWVzKSxcbiAgICAgICAgICAgIGRlbnlFeHRlcm5hbElkOiBhcmdzLmRlbnlFeHRlcm5hbElkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdkZXBsb3knOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdkZXBsb3knO1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXJNYXA6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIGFyZ3MucGFyYW1ldGVycykge1xuICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1ldGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3Qga2V5VmFsdWUgPSAocGFyYW1ldGVyIGFzIHN0cmluZykuc3BsaXQoJz0nKTtcbiAgICAgICAgICAgIHBhcmFtZXRlck1hcFtrZXlWYWx1ZVswXV0gPSBrZXlWYWx1ZS5zbGljZSgxKS5qb2luKCc9Jyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3MuZXhlY3V0ZSAhPT0gdW5kZWZpbmVkICYmIGFyZ3MubWV0aG9kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdDb25mbGljdGluZ0V4ZWN1dGVBbmRNZXRob2QnLCAnQ2FuIG5vdCBzdXBwbHkgYm90aCAtLVtuby1dZXhlY3V0ZSBhbmQgLS1tZXRob2QgYXQgdGhlIHNhbWUgdGltZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNsaS5kZXBsb3koe1xuICAgICAgICAgIHNlbGVjdG9yLFxuICAgICAgICAgIGV4Y2x1c2l2ZWx5OiBhcmdzLmV4Y2x1c2l2ZWx5LFxuICAgICAgICAgIHRvb2xraXRTdGFja05hbWUsXG4gICAgICAgICAgcm9sZUFybjogYXJncy5yb2xlQXJuLFxuICAgICAgICAgIG5vdGlmaWNhdGlvbkFybnM6IGFyZ3Mubm90aWZpY2F0aW9uQXJucyxcbiAgICAgICAgICByZXF1aXJlQXBwcm92YWw6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncmVxdWlyZUFwcHJvdmFsJ10pLFxuICAgICAgICAgIHJldXNlQXNzZXRzOiBhcmdzWydidWlsZC1leGNsdWRlJ10sXG4gICAgICAgICAgdGFnczogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWyd0YWdzJ10pLFxuICAgICAgICAgIGRlcGxveW1lbnRNZXRob2Q6IGRldGVybWluZURlcGxveW1lbnRNZXRob2QoYXJncywgY29uZmlndXJhdGlvbiksXG4gICAgICAgICAgZm9yY2U6IGFyZ3MuZm9yY2UsXG4gICAgICAgICAgcGFyYW1ldGVyczogcGFyYW1ldGVyTWFwLFxuICAgICAgICAgIHVzZVByZXZpb3VzUGFyYW1ldGVyczogYXJnc1sncHJldmlvdXMtcGFyYW1ldGVycyddLFxuICAgICAgICAgIG91dHB1dHNGaWxlOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ291dHB1dHNGaWxlJ10pLFxuICAgICAgICAgIHByb2dyZXNzOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Byb2dyZXNzJ10pLFxuICAgICAgICAgIGNpOiBhcmdzLmNpLFxuICAgICAgICAgIHJvbGxiYWNrOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3JvbGxiYWNrJ10pLFxuICAgICAgICAgIHdhdGNoOiBhcmdzLndhdGNoLFxuICAgICAgICAgIHRyYWNlTG9nczogYXJncy5sb2dzLFxuICAgICAgICAgIGNvbmN1cnJlbmN5OiBhcmdzLmNvbmN1cnJlbmN5LFxuICAgICAgICAgIGFzc2V0UGFyYWxsZWxpc206IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnYXNzZXRQYXJhbGxlbGlzbSddKSxcbiAgICAgICAgICBhc3NldEJ1aWxkQ29uY3VycmVuY3k6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnYXNzZXRCdWlsZENvbmN1cnJlbmN5J10pLFxuICAgICAgICAgIGFzc2V0QnVpbGRUaW1lOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ2Fzc2V0UHJlYnVpbGQnXSlcbiAgICAgICAgICAgID8gQXNzZXRCdWlsZFRpbWUuQUxMX0JFRk9SRV9ERVBMT1lcbiAgICAgICAgICAgIDogQXNzZXRCdWlsZFRpbWUuSlVTVF9JTl9USU1FLFxuICAgICAgICAgIGlnbm9yZU5vU3RhY2tzOiBhcmdzLmlnbm9yZU5vU3RhY2tzLFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAndmFsaWRhdGUnOlxuICAgICAgICBjbGlSZXF1aXJlVW5zdGFibGUoY29uZmlndXJhdGlvbiwgJ3ZhbGlkYXRlJyk7XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ3ZhbGlkYXRlJztcbiAgICAgICAgY29uZmlndXJhdGlvbi5jb250ZXh0LnNldCgnQGF3cy1jZGsvY29yZTpmYWlsU3ludGhPblZhbGlkYXRpb25FcnJvcnMnLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiBjbGkudmFsaWRhdGUoe1xuICAgICAgICAgIHN0YWNrczogc3BlY2lmaWNTdGFja3NPckFsbFJlY3Vyc2l2ZWx5KGFyZ3MuU1RBQ0tTKSxcbiAgICAgICAgICBvbmxpbmU6IGFyZ3Mub25saW5lLFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnZGlhZ25vc2UnOlxuICAgICAgICBjbGlSZXF1aXJlVW5zdGFibGUoY29uZmlndXJhdGlvbiwgJ2RpYWdub3NlJyk7XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2RpYWdub3NlJztcblxuICAgICAgICAvLyBJbXBsaWNpdGx5IHN3aXRjaCAnZGVidWcnIG1vZGUgdG8gdHJ1ZSwgdGhhdCBpcyBnb2luZyB0byBiZSBtb3N0IHVzZWZ1bC5cbiAgICAgICAgY29uZmlndXJhdGlvbi5zZXR0aW5ncy50ZW1wb3JhcmlseU11dGFibGUoKHNldHRpbmdzKSA9PiB7XG4gICAgICAgICAgc2V0dGluZ3Muc2V0KFsnZGVidWcnXSwgdHJ1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjbGkuZGlhZ25vc2Uoe1xuICAgICAgICAgIHN0YWNrczogc3BlY2lmaWNTdGFja3NPckFsbFJlY3Vyc2l2ZWx5KGFyZ3MuU1RBQ0tTKSxcbiAgICAgICAgICBjb25jdXJyZW5jeTogYXJncy5jb25jdXJyZW5jeSxcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lOiBhcmdzLnRvb2xraXRTdGFja05hbWUsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdyb2xsYmFjayc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ3JvbGxiYWNrJztcbiAgICAgICAgcmV0dXJuIGNsaS5yb2xsYmFjayh7XG4gICAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgICAgdG9vbGtpdFN0YWNrTmFtZSxcbiAgICAgICAgICByb2xlQXJuOiBhcmdzLnJvbGVBcm4sXG4gICAgICAgICAgZm9yY2U6IGFyZ3MuZm9yY2UsXG4gICAgICAgICAgdmFsaWRhdGVCb290c3RyYXBTdGFja1ZlcnNpb246IGFyZ3NbJ3ZhbGlkYXRlLWJvb3RzdHJhcC12ZXJzaW9uJ10sXG4gICAgICAgICAgb3JwaGFuTG9naWNhbElkczogYXJncy5vcnBoYW4sXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdwdWJsaXNoLWFzc2V0cyc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ3B1Ymxpc2gtYXNzZXRzJztcbiAgICAgICAgY2xpUmVxdWlyZVVuc3RhYmxlKGNvbmZpZ3VyYXRpb24sICdwdWJsaXNoLWFzc2V0cycpO1xuXG4gICAgICAgIHJldHVybiBjbGkucHVibGlzaEFzc2V0cyh7XG4gICAgICAgICAgc3RhY2tzOiBjb252ZXJ0U3RhY2tTZWxlY3RvcihzZWxlY3RvciwgYXJncy5leGNsdXNpdmVseSksXG4gICAgICAgICAgZm9yY2U6IGFyZ3MuZm9yY2UsXG4gICAgICAgICAgY29uY3VycmVuY3k6IGFyZ3MuY29uY3VycmVuY3ksXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdvcnBoYW4nOlxuICAgICAgICBjbGlSZXF1aXJlVW5zdGFibGUoY29uZmlndXJhdGlvbiwgJ29ycGhhbicpO1xuXG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ29ycGhhbic7XG4gICAgICAgIHJldHVybiBjbGkub3JwaGFuKHtcbiAgICAgICAgICBjb25zdHJ1Y3RQYXRoOiBhcmdzLlBBVEhTID8/IFtdLFxuICAgICAgICAgIHJvbGVBcm46IGFyZ3Mucm9sZUFybixcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnaW1wb3J0JzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnaW1wb3J0JztcbiAgICAgICAgcmV0dXJuIGNsaS5pbXBvcnQoe1xuICAgICAgICAgIHNlbGVjdG9yLFxuICAgICAgICAgIHRvb2xraXRTdGFja05hbWUsXG4gICAgICAgICAgcm9sZUFybjogYXJncy5yb2xlQXJuLFxuICAgICAgICAgIGRlcGxveW1lbnRNZXRob2Q6IHtcbiAgICAgICAgICAgIG1ldGhvZDogJ2NoYW5nZS1zZXQnLFxuICAgICAgICAgICAgZXhlY3V0ZTogYXJncy5leGVjdXRlLFxuICAgICAgICAgICAgY2hhbmdlU2V0TmFtZTogYXJncy5jaGFuZ2VTZXROYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJvZ3Jlc3M6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncHJvZ3Jlc3MnXSksXG4gICAgICAgICAgcm9sbGJhY2s6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncm9sbGJhY2snXSksXG4gICAgICAgICAgcmVjb3JkUmVzb3VyY2VNYXBwaW5nOiBhcmdzWydyZWNvcmQtcmVzb3VyY2UtbWFwcGluZyddLFxuICAgICAgICAgIHJlc291cmNlTWFwcGluZ0ZpbGU6IGFyZ3NbJ3Jlc291cmNlLW1hcHBpbmcnXSxcbiAgICAgICAgICByZXNvdXJjZU1hcHBpbmdJbmxpbmU6IGFyZ3NbJ3Jlc291cmNlLW1hcHBpbmctaW5saW5lJ10sXG4gICAgICAgICAgZm9yY2U6IGFyZ3MuZm9yY2UsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICd3YXRjaCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ3dhdGNoJztcbiAgICAgICAgYXdhaXQgY2xpLndhdGNoKHtcbiAgICAgICAgICBzZWxlY3RvcixcbiAgICAgICAgICBleGNsdXNpdmVseTogYXJncy5leGNsdXNpdmVseSxcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAgIHJvbGVBcm46IGFyZ3Mucm9sZUFybixcbiAgICAgICAgICByZXVzZUFzc2V0czogYXJnc1snYnVpbGQtZXhjbHVkZSddLFxuICAgICAgICAgIGRlcGxveW1lbnRNZXRob2Q6IGRldGVybWluZURlcGxveW1lbnRNZXRob2QoYXJncywgY29uZmlndXJhdGlvbiwgdHJ1ZSksXG4gICAgICAgICAgZm9yY2U6IGFyZ3MuZm9yY2UsXG4gICAgICAgICAgcHJvZ3Jlc3M6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncHJvZ3Jlc3MnXSksXG4gICAgICAgICAgcm9sbGJhY2s6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncm9sbGJhY2snXSksXG4gICAgICAgICAgdHJhY2VMb2dzOiBhcmdzLmxvZ3MsXG4gICAgICAgICAgY29uY3VycmVuY3k6IGFyZ3MuY29uY3VycmVuY3ksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG5cbiAgICAgIGNhc2UgJ2Rlc3Ryb3knOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdkZXN0cm95JztcbiAgICAgICAgcmV0dXJuIGNsaS5kZXN0cm95KHtcbiAgICAgICAgICBzZWxlY3RvcixcbiAgICAgICAgICBleGNsdXNpdmVseTogYXJncy5leGNsdXNpdmVseSxcbiAgICAgICAgICBmb3JjZTogYXJncy5mb3JjZSxcbiAgICAgICAgICByb2xlQXJuOiBhcmdzLnJvbGVBcm4sXG4gICAgICAgICAgY29uY3VycmVuY3k6IGFyZ3MuY29uY3VycmVuY3ksXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdnYyc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2djJztcbiAgICAgICAgY2xpUmVxdWlyZVVuc3RhYmxlKGNvbmZpZ3VyYXRpb24sICdnYycpO1xuICAgICAgICBpZiAoYXJncy5ib290c3RyYXBTdGFja05hbWUpIHtcbiAgICAgICAgICBhd2FpdCBpb0hvc3QuZGVmYXVsdHMud2FybignLS1ib290c3RyYXAtc3RhY2stbmFtZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgd2hlbiBnYyBpcyBHQS4gVXNlIC0tdG9vbGtpdC1zdGFjay1uYW1lLicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJvbGVBcm4gaXMgZGVmaW5lZCBmb3Igd2hlbiBjbG91ZGZvcm1hdGlvbiBpcyBpbnZva2VkXG4gICAgICAgIC8vIFRoaXMgY29uZmxpY3RzIHdpdGggZGlyZWN0IHNkayBjYWxscyBleGlzdGluZyBpbiB0aGUgZ2MgY29tbWFuZCB0byBzMyBhbmQgZWNyXG4gICAgICAgIGlmIChhcmdzLnJvbGVBcm4pIHtcbiAgICAgICAgICBhd2FpdCBpb0hvc3QuZGVmYXVsdHMud2FybignVGhlIC0tcm9sZS1hcm4gb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBnYyBjb21tYW5kIGFuZCB3aWxsIGJlIGlnbm9yZWQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsaS5nYXJiYWdlQ29sbGVjdChhcmdzLkVOVklST05NRU5UUywge1xuICAgICAgICAgIGFjdGlvbjogYXJncy5hY3Rpb24sXG4gICAgICAgICAgdHlwZTogYXJncy50eXBlLFxuICAgICAgICAgIHJvbGxiYWNrQnVmZmVyRGF5czogYXJnc1sncm9sbGJhY2stYnVmZmVyLWRheXMnXSxcbiAgICAgICAgICBjcmVhdGVkQnVmZmVyRGF5czogYXJnc1snY3JlYXRlZC1idWZmZXItZGF5cyddLFxuICAgICAgICAgIGJvb3RzdHJhcFN0YWNrTmFtZTogYXJncy50b29sa2l0U3RhY2tOYW1lID8/IGFyZ3MuYm9vdHN0cmFwU3RhY2tOYW1lLFxuICAgICAgICAgIGNvbmZpcm06IGFyZ3MuY29uZmlybSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2ZsYWdzJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnZmxhZ3MnO1xuXG4gICAgICAgIGNsaVJlcXVpcmVVbnN0YWJsZShjb25maWd1cmF0aW9uLCAnZmxhZ3MnKTtcblxuICAgICAgICBjb25zdCB0b29sa2l0ID0gbmV3IFRvb2xraXQoe1xuICAgICAgICAgIGlvSG9zdCxcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAgIHVuc3RhYmxlRmVhdHVyZXM6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsndW5zdGFibGUnXSksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBmbGFnc0RhdGEgPSBhd2FpdCB0b29sa2l0LmZsYWdzKGNsb3VkRXhlY3V0YWJsZSk7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgRmxhZ0NvbW1hbmRIYW5kbGVyKGZsYWdzRGF0YSwgaW9IZWxwZXIsIGFyZ3MsIHRvb2xraXQsIGNvbmZpZ3VyYXRpb24uY29udGV4dC5hbGwpO1xuICAgICAgICByZXR1cm4gaGFuZGxlci5wcm9jZXNzRmxhZ3NDb21tYW5kKCk7XG5cbiAgICAgIGNhc2UgJ3N5bnRoZXNpemUnOlxuICAgICAgY2FzZSAnc3ludGgnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdzeW50aCc7XG4gICAgICAgIGNvbnN0IHF1aWV0ID0gY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydxdWlldCddKSA/PyBhcmdzLnF1aWV0O1xuICAgICAgICBpZiAoYXJncy5leGNsdXNpdmVseSkge1xuICAgICAgICAgIHJldHVybiBjbGkuc3ludGgoYXJncy5TVEFDS1MsIGFyZ3MuZXhjbHVzaXZlbHksIHF1aWV0LCBhcmdzLnZhbGlkYXRpb24sIGFyZ3YuanNvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGNsaS5zeW50aChhcmdzLlNUQUNLUywgdHJ1ZSwgcXVpZXQsIGFyZ3MudmFsaWRhdGlvbiwgYXJndi5qc29uKTtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdub3RpY2VzJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnbm90aWNlcyc7XG4gICAgICAgIC8vIElmIHRoZSB1c2VyIGV4cGxpY2l0bHkgYXNrcyBmb3Igbm90aWNlcywgdGhleSBhcmUgbm93IHRoZSBwcmltYXJ5IG91dHB1dFxuICAgICAgICAvLyBvZiB0aGUgY29tbWFuZCBhbmQgdGhleSBzaG91bGQgZ28gdG8gc3Rkb3V0LlxuICAgICAgICBpb0hvc3Qubm90aWNlc0Rlc3RpbmF0aW9uID0gJ3N0ZG91dCc7XG5cbiAgICAgICAgLy8gVGhpcyBpcyBhIHZhbGlkIGNvbW1hbmQsIGJ1dCB3ZSdyZSBwb3N0cG9uaW5nIGl0cyBleGVjdXRpb24gYmVjYXVzZSBkaXNwbGF5aW5nXG4gICAgICAgIC8vIG5vdGljZXMgYXV0b21hdGljYWxseSBoYXBwZW5zIGFmdGVyIGV2ZXJ5IGNvbW1hbmQuXG4gICAgICAgIHJldHVybjtcblxuICAgICAgY2FzZSAnbWV0YWRhdGEnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdtZXRhZGF0YSc7XG4gICAgICAgIHJldHVybiBjbGkubWV0YWRhdGEoYXJncy5TVEFDSywgYXJndi5qc29uKTtcblxuICAgICAgY2FzZSAnYWNrbm93bGVkZ2UnOlxuICAgICAgY2FzZSAnYWNrJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnbm90aWNlcyc7XG4gICAgICAgIHJldHVybiBjbGkuYWNrbm93bGVkZ2UoYXJncy5JRCk7XG5cbiAgICAgIGNhc2UgJ2NsaS10ZWxlbWV0cnknOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdjbGktdGVsZW1ldHJ5JztcbiAgICAgICAgaWYgKGFyZ3MuZW5hYmxlID09PSB1bmRlZmluZWQgJiYgYXJncy5kaXNhYmxlID09PSB1bmRlZmluZWQgJiYgYXJncy5zdGF0dXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ1RlbGVtZXRyeUFyZ1JlcXVpcmVkJywgJ011c3Qgc3BlY2lmeSBcXCctLWVuYWJsZVxcJywgXFwnLS1kaXNhYmxlXFwnLCBvciBcXCctLXN0YXR1c1xcJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3Muc3RhdHVzKSB7XG4gICAgICAgICAgcmV0dXJuIGNsaS5jbGlUZWxlbWV0cnlTdGF0dXMoYXJncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZW5hYmxlID0gYXJncy5lbmFibGUgPz8gIWFyZ3MuZGlzYWJsZTtcbiAgICAgICAgICByZXR1cm4gY2xpLmNsaVRlbGVtZXRyeShlbmFibGUpO1xuICAgICAgICB9XG4gICAgICBjYXNlICdpbml0JzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnaW5pdCc7XG4gICAgICAgIGNvbnN0IGxhbmd1YWdlID0gY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydsYW5ndWFnZSddKTtcbiAgICAgICAgaWYgKGFyZ3MubGlzdCkge1xuICAgICAgICAgIHJldHVybiBwcmludEF2YWlsYWJsZVRlbXBsYXRlcyhpb0hlbHBlciwgbGFuZ3VhZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEdhdGUgY3VzdG9tIHRlbXBsYXRlIHN1cHBvcnQgd2l0aCB1bnN0YWJsZSBmbGFnXG4gICAgICAgICAgaWYgKGFyZ3NbJ2Zyb20tcGF0aCddKSB7XG4gICAgICAgICAgICBjbGlSZXF1aXJlVW5zdGFibGUoY29uZmlndXJhdGlvbiwgJ2luaXQnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY2xpSW5pdCh7XG4gICAgICAgICAgICBpb0hlbHBlcixcbiAgICAgICAgICAgIHR5cGU6IGFyZ3MuVEVNUExBVEUsXG4gICAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICAgIGNhblVzZU5ldHdvcms6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGdlbmVyYXRlT25seTogYXJncy5nZW5lcmF0ZU9ubHksXG4gICAgICAgICAgICBsaWJWZXJzaW9uOiBhcmdzLmxpYlZlcnNpb24sXG4gICAgICAgICAgICBmcm9tUGF0aDogYXJnc1snZnJvbS1wYXRoJ10sXG4gICAgICAgICAgICB0ZW1wbGF0ZVBhdGg6IGFyZ3NbJ3RlbXBsYXRlLXBhdGgnXSxcbiAgICAgICAgICAgIHBhY2thZ2VNYW5hZ2VyOiBhcmdzWydwYWNrYWdlLW1hbmFnZXInXSxcbiAgICAgICAgICAgIHByb2plY3ROYW1lOiBhcmdzLm5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ21pZ3JhdGUnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdtaWdyYXRlJztcbiAgICAgICAgcmV0dXJuIGNsaS5taWdyYXRlKHtcbiAgICAgICAgICBzdGFja05hbWU6IGFyZ3NbJ3N0YWNrLW5hbWUnXSxcbiAgICAgICAgICBmcm9tUGF0aDogYXJnc1snZnJvbS1wYXRoJ10sXG4gICAgICAgICAgZnJvbVN0YWNrOiBhcmdzWydmcm9tLXN0YWNrJ10sXG4gICAgICAgICAgbGFuZ3VhZ2U6IGFyZ3MubGFuZ3VhZ2UsXG4gICAgICAgICAgb3V0cHV0UGF0aDogYXJnc1snb3V0cHV0LXBhdGgnXSxcbiAgICAgICAgICBmcm9tU2NhbjogZ2V0TWlncmF0ZVNjYW5UeXBlKGFyZ3NbJ2Zyb20tc2NhbiddKSxcbiAgICAgICAgICBmaWx0ZXI6IGFyZ3MuZmlsdGVyLFxuICAgICAgICAgIGFjY291bnQ6IGFyZ3MuYWNjb3VudCxcbiAgICAgICAgICByZWdpb246IGFyZ3MucmVnaW9uLFxuICAgICAgICAgIGNvbXByZXNzOiBhcmdzLmNvbXByZXNzLFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ3ZlcnNpb24nOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICd2ZXJzaW9uJztcbiAgICAgICAgcmV0dXJuIGlvSG9zdC5kZWZhdWx0cy5yZXN1bHQodmVyc2lvbldpdGhCdWlsZCgpKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignVW5rbm93bkNvbW1hbmQnLCAnVW5rbm93biBjb21tYW5kOiAnICsgY29tbWFuZCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoaWNoIHZlcnNpb24gb2YgYm9vdHN0cmFwcGluZ1xuICovXG5hc3luYyBmdW5jdGlvbiBkZXRlcm1pbmVCb290c3RyYXBWZXJzaW9uKGlvSG9zdDogQ2xpSW9Ib3N0LCBhcmdzOiB7IHRlbXBsYXRlPzogc3RyaW5nIH0pOiBQcm9taXNlPEJvb3RzdHJhcFNvdXJjZT4ge1xuICBsZXQgc291cmNlOiBCb290c3RyYXBTb3VyY2U7XG4gIGlmIChhcmdzLnRlbXBsYXRlKSB7XG4gICAgYXdhaXQgaW9Ib3N0LmRlZmF1bHRzLmluZm8oYFVzaW5nIGJvb3RzdHJhcHBpbmcgdGVtcGxhdGUgZnJvbSAke2FyZ3MudGVtcGxhdGV9YCk7XG4gICAgc291cmNlID0geyBzb3VyY2U6ICdjdXN0b20nLCB0ZW1wbGF0ZUZpbGU6IGFyZ3MudGVtcGxhdGUgfTtcbiAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5DREtfTEVHQUNZX0JPT1RTVFJBUCkge1xuICAgIGF3YWl0IGlvSG9zdC5kZWZhdWx0cy5pbmZvKCdDREtfTEVHQUNZX0JPT1RTVFJBUCBzZXQsIHVzaW5nIGxlZ2FjeS1zdHlsZSBib290c3RyYXBwaW5nJyk7XG4gICAgc291cmNlID0geyBzb3VyY2U6ICdsZWdhY3knIH07XG4gIH0gZWxzZSB7XG4gICAgLy8gaW4gVjIsIHRoZSBcIm5ld1wiIGJvb3RzdHJhcHBpbmcgaXMgdGhlIGRlZmF1bHRcbiAgICBzb3VyY2UgPSB7IHNvdXJjZTogJ2RlZmF1bHQnIH07XG4gIH1cbiAgcmV0dXJuIHNvdXJjZTtcbn1cblxuZnVuY3Rpb24gaXNGZWF0dXJlRW5hYmxlZChjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uLCBmZWF0dXJlRmxhZzogc3RyaW5nKSB7XG4gIHJldHVybiBjb25maWd1cmF0aW9uLmNvbnRleHQuZ2V0KGZlYXR1cmVGbGFnKSA/PyBjeGFwaS5mdXR1cmVGbGFnRGVmYXVsdChmZWF0dXJlRmxhZyk7XG59XG5cbi8qKlxuICogQ29udmVydCBhIFN0YWNrU2VsZWN0b3IgYW5kIGV4Y2x1c2l2ZWx5IGZsYWcgdG8gdG9vbGtpdC1saWIncyBTdGFja1NlbGVjdG9yIGZvcm1hdFxuICovXG5mdW5jdGlvbiBjb252ZXJ0U3RhY2tTZWxlY3RvcihzZWxlY3RvcjogU3RhY2tTZWxlY3RvciwgZXhjbHVzaXZlbHk/OiBib29sZWFuKTogTGliU3RhY2tTZWxlY3RvciB7XG4gIHJldHVybiB7XG4gICAgcGF0dGVybnM6IHNlbGVjdG9yLnBhdHRlcm5zLFxuICAgIHN0cmF0ZWd5OiBzZWxlY3Rvci5wYXR0ZXJucy5sZW5ndGggPiAwID8gU3RhY2tTZWxlY3Rpb25TdHJhdGVneS5QQVRURVJOX01BVENIIDogU3RhY2tTZWxlY3Rpb25TdHJhdGVneS5BTExfU1RBQ0tTLFxuICAgIGV4cGFuZDogZXhjbHVzaXZlbHkgPyBFeHBhbmRTdGFja1NlbGVjdGlvbi5OT05FIDogRXhwYW5kU3RhY2tTZWxlY3Rpb24uVVBTVFJFQU0sXG4gIH07XG59XG5cbi8qKlxuICogQnVpbGQgYSB0b29sa2l0LWxpYiBTdGFja1NlbGVjdG9yIGZyb20gYSBnaXZlbiBzZXQgb2Ygc3RhY2sgY29uc3RydWN0IHBhdGggcGF0dGVybnNcbiAqXG4gKiBJZiBubyBwYXR0ZXJucyBhcmUgZ2l2ZW4sIGFsbCBzdGFja3MgaW4gdGhlIGFzc2VtYmx5IGFuZCBhbGwgb2YgaXRzIHN0YWdlcyBhcmUgc2VsZWN0ZWQuXG4gKi9cbmZ1bmN0aW9uIHNwZWNpZmljU3RhY2tzT3JBbGxSZWN1cnNpdmVseShwYXR0ZXJuczogc3RyaW5nW10pOiBMaWJTdGFja1NlbGVjdG9yIHtcbiAgcmV0dXJuIHtcbiAgICBzdHJhdGVneTogcGF0dGVybnMubGVuZ3RoID4gMCA/IFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3kuUEFUVEVSTl9NQVRDSCA6IFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3kuQUxMX1NUQUNLUyxcbiAgICBwYXR0ZXJucyxcbiAgfTtcbn1cblxuLyoqXG4gKiBUcmFuc2xhdGUgYSBZYXJncyBpbnB1dCBhcnJheSB0byBzb21ldGhpbmcgdGhhdCBtYWtlcyBtb3JlIHNlbnNlIGluIGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VcbiAqIG1vZGVsICh0ZWxsaW5nIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYWJzZW5jZSBhbmQgYW4gZW1wdHkgYXJyYXkpXG4gKlxuICogLSBBbiBlbXB0eSBhcnJheSBpcyB0aGUgZGVmYXVsdCBjYXNlLCBtZWFuaW5nIHRoZSB1c2VyIGRpZG4ndCBwYXNzIGFueSBhcmd1bWVudHMuIFdlIHJldHVyblxuICogICB1bmRlZmluZWQuXG4gKiAtIElmIHRoZSB1c2VyIHBhc3NlZCBhIHNpbmdsZSBlbXB0eSBzdHJpbmcsIHRoZXkgZGlkIHNvbWV0aGluZyBsaWtlIGAtLWFycmF5PWAsIHdoaWNoIHdlJ2xsXG4gKiAgIHRha2UgdG8gbWVhbiB0aGV5IHBhc3NlZCBhbiBlbXB0eSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlGcm9tWWFyZ3MoeHM6IHN0cmluZ1tdKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICBpZiAoeHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4geHMuZmlsdGVyKCh4KSA9PiB4ICE9PSAnJyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgZGlmZiBtZXRob2QgZnJvbSBDTEkgYXJncy5cbiAqIC0tbWV0aG9kIHRha2VzIHByZWNlZGVuY2UsIHRoZW4gZGVwcmVjYXRlZCAtLWNoYW5nZS1zZXQsIHRoZW4gLS10ZW1wbGF0ZSBpbXBsaWVzIHRlbXBsYXRlLlxuICovXG5mdW5jdGlvbiBkZXRlcm1pbmVEaWZmTWV0aG9kKGFyZ3M6IGFueSk6ICdjaGFuZ2Utc2V0JyB8ICd0ZW1wbGF0ZScgfCAnYXV0bycge1xuICBpZiAoYXJncy5tZXRob2QgJiYgYXJncy5tZXRob2QgIT09ICdhdXRvJykge1xuICAgIHJldHVybiBhcmdzLm1ldGhvZDtcbiAgfVxuXG4gIC8vIERlcHJlY2F0ZWQgLS1uby1jaGFuZ2Utc2V0IG1hcHMgdG8gdGVtcGxhdGVcbiAgaWYgKGFyZ3NbJ2NoYW5nZS1zZXQnXSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gJ3RlbXBsYXRlJztcbiAgfVxuXG4gIC8vIC0tdGVtcGxhdGUgaW1wbGllcyB0ZW1wbGF0ZVxuICBpZiAoYXJncy50ZW1wbGF0ZSkge1xuICAgIHJldHVybiAndGVtcGxhdGUnO1xuICB9XG5cbiAgcmV0dXJuICdhdXRvJztcbn1cblxuZnVuY3Rpb24gZGV0ZXJtaW5lRGVwbG95bWVudE1ldGhvZChhcmdzOiBhbnksIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24sIHdhdGNoPzogYm9vbGVhbik6IERlcGxveW1lbnRNZXRob2Qge1xuICBsZXQgZGVwbG95bWVudE1ldGhvZDogQ2hhbmdlU2V0RGVwbG95bWVudCB8IERpcmVjdERlcGxveW1lbnQgfCB1bmRlZmluZWQ7XG4gIHN3aXRjaCAoYXJncy5tZXRob2QpIHtcbiAgICBjYXNlICdleGVjdXRlLWNoYW5nZS1zZXQnOlxuICAgICAgaWYgKCFhcmdzLlNUQUNLUyB8fCBhcmdzLlNUQUNLUy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignRXhhY3RseU9uZVN0YWNrJywgJy0tbWV0aG9kPWV4ZWN1dGUtY2hhbmdlLXNldCByZXF1aXJlcyBleGFjdGx5IG9uZSBzdGFjaycpO1xuICAgICAgfVxuICAgICAgaWYgKHdhdGNoIHx8IGFyZ3Mud2F0Y2gpIHtcbiAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignV2F0Y2hXaXRoRXhlY3V0ZUNoYW5nZVNldCcsICctLW1ldGhvZD1leGVjdXRlLWNoYW5nZS1zZXQgY2Fubm90IGJlIHVzZWQgd2l0aCB3YXRjaCcpO1xuICAgICAgfVxuICAgICAgcmVqZWN0SW5jb21wYXRpYmxlT3B0aW9ucyhhcmdzLCAnLS1tZXRob2Q9ZXhlY3V0ZS1jaGFuZ2Utc2V0Jywge1xuICAgICAgICBmb3JjZTogJy0tZm9yY2UnLFxuICAgICAgICBwYXJhbWV0ZXJzOiAnLS1wYXJhbWV0ZXJzJyxcbiAgICAgICAgaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXM6ICctLWltcG9ydC1leGlzdGluZy1yZXNvdXJjZXMnLFxuICAgICAgICByZXZlcnREcmlmdDogJy0tcmV2ZXJ0LWRyaWZ0JyxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWV0aG9kOiAnZXhlY3V0ZS1jaGFuZ2Utc2V0JyxcbiAgICAgICAgY2hhbmdlU2V0TmFtZTogYXJncy5jaGFuZ2VTZXROYW1lID8/ICdjZGstZGVwbG95LWNoYW5nZS1zZXQnLFxuICAgICAgfTtcbiAgICBjYXNlICdkaXJlY3QnOlxuICAgICAgcmVqZWN0SW5jb21wYXRpYmxlT3B0aW9ucyhhcmdzLCAnLS1tZXRob2Q9ZGlyZWN0Jywge1xuICAgICAgICBjaGFuZ2VTZXROYW1lOiAnLS1jaGFuZ2Utc2V0LW5hbWUnLFxuICAgICAgICBpbXBvcnRFeGlzdGluZ1Jlc291cmNlczogJy0taW1wb3J0LWV4aXN0aW5nLXJlc291cmNlcycsXG4gICAgICAgIHJldmVydERyaWZ0OiAnLS1yZXZlcnQtZHJpZnQnLFxuICAgICAgfSk7XG4gICAgICBkZXBsb3ltZW50TWV0aG9kID0geyBtZXRob2Q6ICdkaXJlY3QnIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjaGFuZ2Utc2V0JzpcbiAgICAgIGRlcGxveW1lbnRNZXRob2QgPSB7XG4gICAgICAgIG1ldGhvZDogJ2NoYW5nZS1zZXQnLFxuICAgICAgICBleGVjdXRlOiB0cnVlLFxuICAgICAgICBjaGFuZ2VTZXROYW1lOiBhcmdzLmNoYW5nZVNldE5hbWUsXG4gICAgICAgIGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzOiBhcmdzLmltcG9ydEV4aXN0aW5nUmVzb3VyY2VzLFxuICAgICAgICByZXZlcnREcmlmdDogYXJncy5yZXZlcnREcmlmdCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwcmVwYXJlLWNoYW5nZS1zZXQnOlxuICAgICAgZGVwbG95bWVudE1ldGhvZCA9IHtcbiAgICAgICAgbWV0aG9kOiAnY2hhbmdlLXNldCcsXG4gICAgICAgIGV4ZWN1dGU6IGZhbHNlLFxuICAgICAgICBjaGFuZ2VTZXROYW1lOiBhcmdzLmNoYW5nZVNldE5hbWUsXG4gICAgICAgIGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzOiBhcmdzLmltcG9ydEV4aXN0aW5nUmVzb3VyY2VzLFxuICAgICAgICByZXZlcnREcmlmdDogYXJncy5yZXZlcnREcmlmdCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICBkZWZhdWx0OlxuICAgICAgZGVwbG95bWVudE1ldGhvZCA9IHtcbiAgICAgICAgbWV0aG9kOiAnY2hhbmdlLXNldCcsXG4gICAgICAgIGV4ZWN1dGU6IHdhdGNoID8gdHJ1ZSA6IGFyZ3MuZXhlY3V0ZSA/PyB0cnVlLFxuICAgICAgICBjaGFuZ2VTZXROYW1lOiBhcmdzLmNoYW5nZVNldE5hbWUsXG4gICAgICAgIGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzOiBhcmdzLmltcG9ydEV4aXN0aW5nUmVzb3VyY2VzLFxuICAgICAgICByZXZlcnREcmlmdDogYXJncy5yZXZlcnREcmlmdCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGNvbnN0IGhvdHN3YXBNb2RlID0gZGV0ZXJtaW5lSG90c3dhcE1vZGUoYXJncy5ob3Rzd2FwLCBhcmdzLmhvdHN3YXBGYWxsYmFjaywgd2F0Y2gpO1xuICBjb25zdCBob3Rzd2FwUHJvcGVydGllcyA9IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnaG90c3dhcCddKSB8fCB7fTtcbiAgc3dpdGNoIChob3Rzd2FwTW9kZSkge1xuICAgIGNhc2UgSG90c3dhcE1vZGUuRkFMTF9CQUNLOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWV0aG9kOiAnaG90c3dhcCcsXG4gICAgICAgIHByb3BlcnRpZXM6IGhvdHN3YXBQcm9wZXJ0aWVzLFxuICAgICAgICBmYWxsYmFjazogZGVwbG95bWVudE1ldGhvZCxcbiAgICAgIH07XG4gICAgY2FzZSBIb3Rzd2FwTW9kZS5IT1RTV0FQX09OTFk6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtZXRob2Q6ICdob3Rzd2FwJyxcbiAgICAgICAgcHJvcGVydGllczogaG90c3dhcFByb3BlcnRpZXMsXG4gICAgICB9O1xuICAgIGRlZmF1bHQ6XG4gICAgY2FzZSBIb3Rzd2FwTW9kZS5GVUxMX0RFUExPWU1FTlQ6XG4gICAgICByZXR1cm4gZGVwbG95bWVudE1ldGhvZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjbGlSZXF1aXJlVW5zdGFibGUoY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbiwgZmVhdHVyZTogc3RyaW5nKSB7XG4gIGlmICghY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWyd1bnN0YWJsZSddKS5pbmNsdWRlcyhmZWF0dXJlKSkge1xuICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYFVuc3RhYmxlJHt1Y2ZpcnN0KGZlYXR1cmUpfWAsIGBVbnN0YWJsZSBmZWF0dXJlIHVzZTogXFwnJHtmZWF0dXJlfVxcJyBpcyB1bnN0YWJsZS4gSXQgbXVzdCBiZSBvcHRlZCBpbiB2aWEgXFwnLS11bnN0YWJsZVxcJywgZS5nLiBcXCdjZGsgJHtmZWF0dXJlfSAtLXVuc3RhYmxlPSR7ZmVhdHVyZX1cXCdgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVjZmlyc3QoeDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHhbMF0udG9VcHBlckNhc2UoKSArIHguc2xpY2UoMSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvdyBpZiBhbnkgb2YgdGhlIGdpdmVuIGZsYWdzIGFyZSBzZXQsIGFzIHRoZXkgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZSBnaXZlbiBvcHRpb24uXG4gKi9cbmZ1bmN0aW9uIHJlamVjdEluY29tcGF0aWJsZU9wdGlvbnMoYXJnczogYW55LCBvcHRpb246IHN0cmluZywgZmxhZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcbiAgZm9yIChjb25zdCBba2V5LCBmbGFnXSBvZiBPYmplY3QuZW50cmllcyhmbGFncykpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGFyZ3Nba2V5XTtcblxuICAgIGxldCBpc1NldCA9IGZhbHNlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgLy8geWFyZ3MgbWF5IGRlZmF1bHQgYXJyYXkgb3B0aW9ucyB0byBbe31dLCBzbyBvbmx5IGNvdW50IHJlYWwgdmFsdWVzXG4gICAgICBpc1NldCA9IHZhbHVlLnNvbWUoKHY6IHVua25vd24pID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdiA9PT0gJ251bWJlcicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpc1NldCA9ICEhdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKGlzU2V0KSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdJbmNvbXBhdGlibGVPcHRpb25zJywgYCR7ZmxhZ30gY2Fubm90IGJlIHVzZWQgd2l0aCAke29wdGlvbn1gKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGV0ZXJtaW5lSG90c3dhcE1vZGUoaG90c3dhcD86IGJvb2xlYW4sIGhvdHN3YXBGYWxsYmFjaz86IGJvb2xlYW4sIHdhdGNoPzogYm9vbGVhbik6IEhvdHN3YXBNb2RlIHtcbiAgaWYgKGhvdHN3YXAgJiYgaG90c3dhcEZhbGxiYWNrKSB7XG4gICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignQ29uZmxpY3RpbmdIb3Rzd2FwQXJncycsICdDYW4gbm90IHN1cHBseSBib3RoIC0taG90c3dhcCBhbmQgLS1ob3Rzd2FwLWZhbGxiYWNrIGF0IHRoZSBzYW1lIHRpbWUnKTtcbiAgfSBlbHNlIGlmICghaG90c3dhcCAmJiAhaG90c3dhcEZhbGxiYWNrKSB7XG4gICAgaWYgKGhvdHN3YXAgPT09IHVuZGVmaW5lZCAmJiBob3Rzd2FwRmFsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHdhdGNoID8gSG90c3dhcE1vZGUuSE9UU1dBUF9PTkxZIDogSG90c3dhcE1vZGUuRlVMTF9ERVBMT1lNRU5UO1xuICAgIH0gZWxzZSBpZiAoaG90c3dhcCA9PT0gZmFsc2UgfHwgaG90c3dhcEZhbGxiYWNrID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIEhvdHN3YXBNb2RlLkZVTExfREVQTE9ZTUVOVDtcbiAgICB9XG4gIH1cblxuICBsZXQgaG90c3dhcE1vZGU6IEhvdHN3YXBNb2RlO1xuICBpZiAoaG90c3dhcCkge1xuICAgIGhvdHN3YXBNb2RlID0gSG90c3dhcE1vZGUuSE9UU1dBUF9PTkxZO1xuICAgIC8qIGlmIChob3Rzd2FwRmFsbGJhY2spKi9cbiAgfSBlbHNlIHtcbiAgICBob3Rzd2FwTW9kZSA9IEhvdHN3YXBNb2RlLkZBTExfQkFDSztcbiAgfVxuXG4gIHJldHVybiBob3Rzd2FwTW9kZTtcbn1cblxuLyogYzggaWdub3JlIHN0YXJ0ICovIC8vIHdlIG5ldmVyIGNhbGwgdGhpcyBpbiB1bml0IHRlc3RzXG5leHBvcnQgZnVuY3Rpb24gY2xpKGFyZ3M6IHN0cmluZ1tdID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpKSB7XG4gIGxldCBlcnJvcjogRXJyb3JEZXRhaWxzIHwgdW5kZWZpbmVkO1xuICBleGVjKGFyZ3MpXG4gICAgLnRoZW4oYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSlcbiAgICAuY2F0Y2goYXN5bmMgKGVycikgPT4ge1xuICAgICAgLy8gTG9nIHRoZSBzdGFjayB0cmFjZSBpZiB3ZSdyZSBvbiBhIGRldmVsb3BlciB3b3Jrc3RhdGlvbi4gT3RoZXJ3aXNlIHRoaXMgd2lsbCBiZSBpbnRvIGEgbWluaWZpZWRcbiAgICAgIC8vIGZpbGUgYW5kIHRoZSBwcmludGVkIGNvZGUgbGluZSBhbmQgc3RhY2sgdHJhY2UgYXJlIGh1Z2UgYW5kIHVzZWxlc3MuXG4gICAgICBwcmV0dHlQcmludEVycm9yKGVyciwgaXNEZXZlbG9wZXJCdWlsZFZlcnNpb24oKSk7XG4gICAgICBlcnJvciA9IHtcbiAgICAgICAgbmFtZTogY2RrQ2xpRXJyb3JOYW1lKGVyciksXG4gICAgICB9O1xuICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgfSlcbiAgICAuZmluYWxseShhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBDbGlJb0hvc3QuZ2V0KCk/LnRlbGVtZXRyeT8uZW5kKGVycm9yKTtcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICBhd2FpdCBDbGlJb0hvc3QuZ2V0KCk/LmFzSW9IZWxwZXIoKS5kZWZhdWx0cy50cmFjZShgRW5kaW5nIFRlbGVtZXRyeSBmYWlsZWQ6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH0pO1xufVxuLyogYzggaWdub3JlIHN0b3AgKi9cbiJdfQ==
|