@aws-cdk/toolkit-lib 0.1.7 → 0.1.8

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.
@@ -2,51 +2,61 @@ import * as cxapi from '@aws-cdk/cx-api';
2
2
  import type { ToolkitServices } from '../../../toolkit/private';
3
3
  import type { IoHelper } from '../../shared-private';
4
4
  import type { AppSynthOptions, LoadAssemblyOptions } from '../source-builder';
5
- export { guessExecutable } from '../../../api/aws-cdk';
6
5
  type Env = {
7
6
  [key: string]: string;
8
7
  };
9
8
  type Context = {
10
9
  [key: string]: any;
11
10
  };
12
- /**
13
- * Turn the given optional output directory into a fixed output directory
14
- */
15
- export declare function determineOutputDirectory(outdir?: string): string;
16
- /**
17
- * If we don't have region/account defined in context, we fall back to the default SDK behavior
18
- * where region is retrieved from ~/.aws/config and account is based on default credentials provider
19
- * chain and then STS is queried.
20
- *
21
- * This is done opportunistically: for example, if we can't access STS for some reason or the region
22
- * is not configured, the context value will be 'null' and there could failures down the line. In
23
- * some cases, synthesis does not require region/account information at all, so that might be perfectly
24
- * fine in certain scenarios.
25
- *
26
- * @param context The context key/value bash.
27
- */
28
- export declare function prepareDefaultEnvironment(services: ToolkitServices, props?: {
29
- outdir?: string;
30
- }): Promise<Env>;
31
- /**
32
- * Run code from a different working directory
33
- */
34
- export declare function changeDir<T>(block: () => Promise<T>, workingDir?: string): Promise<T>;
35
- /**
36
- * Run code with additional environment variables
37
- */
38
- export declare function withEnv<T>(env: Env | undefined, block: () => Promise<T>): Promise<T>;
39
- /**
40
- * Run code with context setup inside the environment
41
- */
42
- export declare function withContext<T>(inputContext: Context, env: Env, synthOpts: AppSynthOptions | undefined, block: (env: Env, context: Context) => Promise<T>): Promise<T>;
43
- /**
44
- * Checks if a given assembly supports context overflow, warn otherwise.
45
- *
46
- * @param assembly the assembly to check
47
- */
48
- export declare function checkContextOverflowSupport(assembly: cxapi.CloudAssembly, ioHelper: IoHelper): Promise<void>;
11
+ export declare class ExecutionEnvironment {
12
+ private readonly ioHelper;
13
+ private readonly sdkProvider;
14
+ private readonly debugFn;
15
+ private _outdir;
16
+ constructor(services: ToolkitServices, props?: {
17
+ outdir?: string;
18
+ });
19
+ /**
20
+ * Turn the given optional output directory into a fixed output directory
21
+ */
22
+ get outdir(): string;
23
+ /**
24
+ * Guess the executable from the command-line argument
25
+ *
26
+ * Only do this if the file is NOT marked as executable. If it is,
27
+ * we'll defer to the shebang inside the file itself.
28
+ *
29
+ * If we're on Windows, we ALWAYS take the handler, since it's hard to
30
+ * verify if registry associations have or have not been set up for this
31
+ * file type, so we'll assume the worst and take control.
32
+ */
33
+ guessExecutable(app: string): Promise<any>;
34
+ /**
35
+ * If we don't have region/account defined in context, we fall back to the default SDK behavior
36
+ * where region is retrieved from ~/.aws/config and account is based on default credentials provider
37
+ * chain and then STS is queried.
38
+ *
39
+ * This is done opportunistically: for example, if we can't access STS for some reason or the region
40
+ * is not configured, the context value will be 'null' and there could failures down the line. In
41
+ * some cases, synthesis does not require region/account information at all, so that might be perfectly
42
+ * fine in certain scenarios.
43
+ */
44
+ defaultEnvVars(): Promise<Env>;
45
+ /**
46
+ * Run code from a different working directory
47
+ */
48
+ changeDir<T>(block: () => Promise<T>, workingDir?: string): Promise<T>;
49
+ /**
50
+ * Run code with additional environment variables
51
+ */
52
+ withEnv<T>(env: Env | undefined, block: () => Promise<T>): Promise<T>;
53
+ /**
54
+ * Run code with context setup inside the environment
55
+ */
56
+ withContext<T>(inputContext: Context, env: Env, synthOpts: AppSynthOptions | undefined, block: (env: Env, context: Context) => Promise<T>): Promise<T>;
57
+ }
49
58
  /**
50
59
  * Safely create an assembly from a cloud assembly directory
51
60
  */
52
- export declare function assemblyFromDirectory(assemblyDir: string, ioHost: IoHelper, loadOptions?: LoadAssemblyOptions): Promise<cxapi.CloudAssembly>;
61
+ export declare function assemblyFromDirectory(assemblyDir: string, ioHelper: IoHelper, loadOptions?: LoadAssemblyOptions): Promise<cxapi.CloudAssembly>;
62
+ export {};
@@ -1,12 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.guessExecutable = void 0;
4
- exports.determineOutputDirectory = determineOutputDirectory;
5
- exports.prepareDefaultEnvironment = prepareDefaultEnvironment;
6
- exports.changeDir = changeDir;
7
- exports.withEnv = withEnv;
8
- exports.withContext = withContext;
9
- exports.checkContextOverflowSupport = checkContextOverflowSupport;
3
+ exports.ExecutionEnvironment = void 0;
10
4
  exports.assemblyFromDirectory = assemblyFromDirectory;
11
5
  const os = require("node:os");
12
6
  const path = require("node:path");
@@ -19,106 +13,131 @@ const aws_cdk_1 = require("../../../api/aws-cdk");
19
13
  const util_1 = require("../../../private/util");
20
14
  const private_1 = require("../../io/private");
21
15
  const shared_public_1 = require("../../shared-public");
22
- var aws_cdk_2 = require("../../../api/aws-cdk");
23
- Object.defineProperty(exports, "guessExecutable", { enumerable: true, get: function () { return aws_cdk_2.guessExecutable; } });
24
- /**
25
- * Turn the given optional output directory into a fixed output directory
26
- */
27
- function determineOutputDirectory(outdir) {
28
- return outdir ?? fs.mkdtempSync(path.join(fs.realpathSync(os.tmpdir()), 'cdk.out'));
29
- }
30
- /**
31
- * If we don't have region/account defined in context, we fall back to the default SDK behavior
32
- * where region is retrieved from ~/.aws/config and account is based on default credentials provider
33
- * chain and then STS is queried.
34
- *
35
- * This is done opportunistically: for example, if we can't access STS for some reason or the region
36
- * is not configured, the context value will be 'null' and there could failures down the line. In
37
- * some cases, synthesis does not require region/account information at all, so that might be perfectly
38
- * fine in certain scenarios.
39
- *
40
- * @param context The context key/value bash.
41
- */
42
- async function prepareDefaultEnvironment(services, props = {}) {
43
- const logFn = (msg, ...args) => services.ioHelper.notify(private_1.IO.CDK_ASSEMBLY_I0010.msg((0, node_util_1.format)(msg, ...args)));
44
- const env = await (0, aws_cdk_1.prepareDefaultEnvironment)(services.sdkProvider, logFn);
45
- if (props.outdir) {
46
- env[cxapi.OUTDIR_ENV] = props.outdir;
47
- await logFn('outdir:', props.outdir);
16
+ class ExecutionEnvironment {
17
+ ioHelper;
18
+ sdkProvider;
19
+ debugFn;
20
+ _outdir;
21
+ constructor(services, props = {}) {
22
+ this.ioHelper = services.ioHelper;
23
+ this.sdkProvider = services.sdkProvider;
24
+ this.debugFn = (msg) => this.ioHelper.notify(private_1.IO.DEFAULT_ASSEMBLY_DEBUG.msg(msg));
25
+ this._outdir = props.outdir;
48
26
  }
49
- // CLI version information
50
- env[cxapi.CLI_ASM_VERSION_ENV] = cxschema.Manifest.version();
51
- env[cxapi.CLI_VERSION_ENV] = (0, aws_cdk_1.versionNumber)();
52
- await logFn('env:', env);
53
- return env;
54
- }
55
- /**
56
- * Run code from a different working directory
57
- */
58
- async function changeDir(block, workingDir) {
59
- const originalWorkingDir = process.cwd();
60
- try {
61
- if (workingDir) {
62
- process.chdir(workingDir);
27
+ /**
28
+ * Turn the given optional output directory into a fixed output directory
29
+ */
30
+ get outdir() {
31
+ if (!this._outdir) {
32
+ const outdir = fs.mkdtempSync(path.join(fs.realpathSync(os.tmpdir()), 'cdk.out'));
33
+ this._outdir = outdir;
63
34
  }
64
- return await block();
35
+ return this._outdir;
65
36
  }
66
- finally {
67
- if (workingDir) {
68
- process.chdir(originalWorkingDir);
69
- }
37
+ /**
38
+ * Guess the executable from the command-line argument
39
+ *
40
+ * Only do this if the file is NOT marked as executable. If it is,
41
+ * we'll defer to the shebang inside the file itself.
42
+ *
43
+ * If we're on Windows, we ALWAYS take the handler, since it's hard to
44
+ * verify if registry associations have or have not been set up for this
45
+ * file type, so we'll assume the worst and take control.
46
+ */
47
+ guessExecutable(app) {
48
+ return (0, aws_cdk_1.guessExecutable)(app, this.debugFn);
70
49
  }
71
- }
72
- /**
73
- * Run code with additional environment variables
74
- */
75
- async function withEnv(env = {}, block) {
76
- const originalEnv = process.env;
77
- try {
78
- process.env = {
79
- ...originalEnv,
80
- ...env,
81
- };
82
- return await block();
50
+ /**
51
+ * If we don't have region/account defined in context, we fall back to the default SDK behavior
52
+ * where region is retrieved from ~/.aws/config and account is based on default credentials provider
53
+ * chain and then STS is queried.
54
+ *
55
+ * This is done opportunistically: for example, if we can't access STS for some reason or the region
56
+ * is not configured, the context value will be 'null' and there could failures down the line. In
57
+ * some cases, synthesis does not require region/account information at all, so that might be perfectly
58
+ * fine in certain scenarios.
59
+ */
60
+ async defaultEnvVars() {
61
+ const debugFn = (msg) => this.ioHelper.notify(private_1.IO.CDK_ASSEMBLY_I0010.msg(msg));
62
+ const env = await (0, aws_cdk_1.prepareDefaultEnvironment)(this.sdkProvider, debugFn);
63
+ env[cxapi.OUTDIR_ENV] = this.outdir;
64
+ await debugFn((0, node_util_1.format)('outdir:', this.outdir));
65
+ // CLI version information
66
+ env[cxapi.CLI_ASM_VERSION_ENV] = cxschema.Manifest.version();
67
+ env[cxapi.CLI_VERSION_ENV] = (0, aws_cdk_1.versionNumber)();
68
+ await debugFn((0, node_util_1.format)('env:', env));
69
+ return env;
83
70
  }
84
- finally {
85
- process.env = originalEnv;
71
+ /**
72
+ * Run code from a different working directory
73
+ */
74
+ async changeDir(block, workingDir) {
75
+ const originalWorkingDir = process.cwd();
76
+ try {
77
+ if (workingDir) {
78
+ process.chdir(workingDir);
79
+ }
80
+ return await block();
81
+ }
82
+ finally {
83
+ if (workingDir) {
84
+ process.chdir(originalWorkingDir);
85
+ }
86
+ }
86
87
  }
87
- }
88
- /**
89
- * Run code with context setup inside the environment
90
- */
91
- async function withContext(inputContext, env, synthOpts = {}, block) {
92
- const context = await (0, aws_cdk_1.prepareContext)(synthOptsDefaults(synthOpts), inputContext, env);
93
- let contextOverflowLocation = null;
94
- try {
95
- const envVariableSizeLimit = os.platform() === 'win32' ? 32760 : 131072;
96
- const [smallContext, overflow] = (0, util_1.splitBySize)(context, (0, aws_cdk_1.spaceAvailableForContext)(env, envVariableSizeLimit));
97
- // Store the safe part in the environment variable
98
- env[cxapi.CONTEXT_ENV] = JSON.stringify(smallContext);
99
- // If there was any overflow, write it to a temporary file
100
- if (Object.keys(overflow ?? {}).length > 0) {
101
- const contextDir = fs.mkdtempSync(path.join(os.tmpdir(), 'cdk-context'));
102
- contextOverflowLocation = path.join(contextDir, 'context-overflow.json');
103
- fs.writeJSONSync(contextOverflowLocation, overflow);
104
- env[cxapi.CONTEXT_OVERFLOW_LOCATION_ENV] = contextOverflowLocation;
88
+ /**
89
+ * Run code with additional environment variables
90
+ */
91
+ async withEnv(env = {}, block) {
92
+ const originalEnv = process.env;
93
+ try {
94
+ process.env = {
95
+ ...originalEnv,
96
+ ...env,
97
+ };
98
+ return await block();
99
+ }
100
+ finally {
101
+ process.env = originalEnv;
105
102
  }
106
- // call the block code with new environment
107
- return await block(env, context);
108
103
  }
109
- finally {
110
- if (contextOverflowLocation) {
111
- fs.removeSync(path.dirname(contextOverflowLocation));
104
+ /**
105
+ * Run code with context setup inside the environment
106
+ */
107
+ async withContext(inputContext, env, synthOpts = {}, block) {
108
+ const context = await (0, aws_cdk_1.prepareContext)(synthOptsDefaults(synthOpts), inputContext, env, this.debugFn);
109
+ let contextOverflowLocation = null;
110
+ try {
111
+ const envVariableSizeLimit = os.platform() === 'win32' ? 32760 : 131072;
112
+ const [smallContext, overflow] = (0, util_1.splitBySize)(context, (0, aws_cdk_1.spaceAvailableForContext)(env, envVariableSizeLimit));
113
+ // Store the safe part in the environment variable
114
+ env[cxapi.CONTEXT_ENV] = JSON.stringify(smallContext);
115
+ // If there was any overflow, write it to a temporary file
116
+ if (Object.keys(overflow ?? {}).length > 0) {
117
+ const contextDir = fs.mkdtempSync(path.join(os.tmpdir(), 'cdk-context'));
118
+ contextOverflowLocation = path.join(contextDir, 'context-overflow.json');
119
+ fs.writeJSONSync(contextOverflowLocation, overflow);
120
+ env[cxapi.CONTEXT_OVERFLOW_LOCATION_ENV] = contextOverflowLocation;
121
+ }
122
+ // call the block code with new environment
123
+ return await block(env, context);
124
+ }
125
+ finally {
126
+ if (contextOverflowLocation) {
127
+ fs.removeSync(path.dirname(contextOverflowLocation));
128
+ }
112
129
  }
113
130
  }
114
131
  }
132
+ exports.ExecutionEnvironment = ExecutionEnvironment;
115
133
  /**
116
134
  * Checks if a given assembly supports context overflow, warn otherwise.
117
135
  *
118
136
  * @param assembly the assembly to check
119
137
  */
120
138
  async function checkContextOverflowSupport(assembly, ioHelper) {
121
- const tree = (0, aws_cdk_1.loadTree)(assembly, (msg) => void ioHelper.notify(private_1.IO.DEFAULT_ASSEMBLY_TRACE.msg(msg)));
139
+ const traceFn = (msg) => ioHelper.notify(private_1.IO.DEFAULT_ASSEMBLY_TRACE.msg(msg));
140
+ const tree = await (0, aws_cdk_1.loadTree)(assembly, traceFn);
122
141
  const frameworkDoesNotSupportContextOverflow = (0, aws_cdk_1.some)(tree, node => {
123
142
  const fqn = node.constructInfo?.fqn;
124
143
  const version = node.constructInfo?.version;
@@ -134,7 +153,7 @@ async function checkContextOverflowSupport(assembly, ioHelper) {
134
153
  /**
135
154
  * Safely create an assembly from a cloud assembly directory
136
155
  */
137
- async function assemblyFromDirectory(assemblyDir, ioHost, loadOptions = {}) {
156
+ async function assemblyFromDirectory(assemblyDir, ioHelper, loadOptions = {}) {
138
157
  try {
139
158
  const assembly = new cxapi.CloudAssembly(assemblyDir, {
140
159
  skipVersionCheck: !(loadOptions.checkVersion ?? true),
@@ -142,7 +161,7 @@ async function assemblyFromDirectory(assemblyDir, ioHost, loadOptions = {}) {
142
161
  // We sort as we deploy
143
162
  topoSort: false,
144
163
  });
145
- await checkContextOverflowSupport(assembly, ioHost);
164
+ await checkContextOverflowSupport(assembly, ioHelper);
146
165
  return assembly;
147
166
  }
148
167
  catch (err) {
@@ -150,7 +169,7 @@ async function assemblyFromDirectory(assemblyDir, ioHost, loadOptions = {}) {
150
169
  // this means the CLI version is too old.
151
170
  // we instruct the user to upgrade.
152
171
  const message = 'This AWS CDK Toolkit is not compatible with the AWS CDK library used by your application. Please upgrade to the latest version.';
153
- await ioHost.notify(private_1.IO.CDK_ASSEMBLY_E1111.msg(message, { error: err }));
172
+ await ioHelper.notify(private_1.IO.CDK_ASSEMBLY_E1111.msg(message, { error: err }));
154
173
  throw new shared_public_1.ToolkitError(`${message}\n(${err.message}`);
155
174
  }
156
175
  throw err;
@@ -166,4 +185,4 @@ function synthOptsDefaults(synthOpts = {}) {
166
185
  ...synthOpts,
167
186
  }, true);
168
187
  }
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcGFyZS1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwcmVwYXJlLXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF1QkEsNERBRUM7QUFjRCw4REFlQztBQUtELDhCQWFDO0FBS0QsMEJBWUM7QUFLRCxrQ0ErQkM7QUFPRCxrRUFjQztBQUtELHNEQW9CQztBQTNLRCw4QkFBOEI7QUFDOUIsa0NBQWtDO0FBQ2xDLHlDQUFtQztBQUNuQywyREFBMkQ7QUFDM0QseUNBQXlDO0FBQ3pDLCtCQUErQjtBQUMvQixtQ0FBNkI7QUFDN0Isa0RBQWtLO0FBQ2xLLGdEQUFvRDtBQUVwRCw4Q0FBc0M7QUFFdEMsdURBQW1EO0FBR25ELGdEQUF1RDtBQUE5QywwR0FBQSxlQUFlLE9BQUE7QUFLeEI7O0dBRUc7QUFDSCxTQUFnQix3QkFBd0IsQ0FBQyxNQUFlO0lBQ3RELE9BQU8sTUFBTSxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDdEYsQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0ksS0FBSyxVQUFVLHlCQUF5QixDQUFDLFFBQXlCLEVBQUUsUUFBNkIsRUFBRTtJQUN4RyxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQVcsRUFBRSxHQUFHLElBQVMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBRSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFBLGtCQUFNLEVBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZILE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBQSxtQ0FBVSxFQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFMUQsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDakIsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ3JDLE1BQU0sS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELDBCQUEwQjtJQUMxQixHQUFHLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3RCxHQUFHLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUEsdUJBQWEsR0FBRSxDQUFDO0lBRTdDLE1BQU0sS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6QixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7R0FFRztBQUNJLEtBQUssVUFBVSxTQUFTLENBQUksS0FBdUIsRUFBRSxVQUFtQjtJQUM3RSxNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN6QyxJQUFJLENBQUM7UUFDSCxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBRUQsT0FBTyxNQUFNLEtBQUssRUFBRSxDQUFDO0lBQ3ZCLENBQUM7WUFBUyxDQUFDO1FBQ1QsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNJLEtBQUssVUFBVSxPQUFPLENBQUksTUFBVyxFQUFFLEVBQUUsS0FBdUI7SUFDckUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUNoQyxJQUFJLENBQUM7UUFDSCxPQUFPLENBQUMsR0FBRyxHQUFHO1lBQ1osR0FBRyxXQUFXO1lBQ2QsR0FBRyxHQUFHO1NBQ1AsQ0FBQztRQUVGLE9BQU8sTUFBTSxLQUFLLEVBQUUsQ0FBQztJQUN2QixDQUFDO1lBQVMsQ0FBQztRQUNULE9BQU8sQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDO0lBQzVCLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSSxLQUFLLFVBQVUsV0FBVyxDQUMvQixZQUFxQixFQUNyQixHQUFRLEVBQ1IsWUFBNkIsRUFBRSxFQUMvQixLQUFpRDtJQUVqRCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEsd0JBQWMsRUFBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdEYsSUFBSSx1QkFBdUIsR0FBRyxJQUFJLENBQUM7SUFFbkMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUN4RSxNQUFNLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxHQUFHLElBQUEsa0JBQVcsRUFBQyxPQUFPLEVBQUUsSUFBQSxrQ0FBd0IsRUFBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO1FBRTNHLGtEQUFrRDtRQUNsRCxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFdEQsMERBQTBEO1FBQzFELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNDLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUN6RSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1lBQ3pFLEVBQUUsQ0FBQyxhQUFhLENBQUMsdUJBQXVCLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDcEQsR0FBRyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLHVCQUF1QixDQUFDO1FBQ3JFLENBQUM7UUFFRCwyQ0FBMkM7UUFDM0MsT0FBTyxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztZQUFTLENBQUM7UUFDVCxJQUFJLHVCQUF1QixFQUFFLENBQUM7WUFDNUIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQztRQUN2RCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLDJCQUEyQixDQUFDLFFBQTZCLEVBQUUsUUFBa0I7SUFDakcsTUFBTSxJQUFJLEdBQUcsSUFBQSxrQkFBUSxFQUFDLFFBQVEsRUFBRSxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsS0FBSyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNHLE1BQU0sc0NBQXNDLEdBQUcsSUFBQSxjQUFJLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO1FBQy9ELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxHQUFHLEtBQUssaUJBQWlCLElBQUksT0FBTyxJQUFJLElBQUksSUFBSSxJQUFBLFlBQUcsRUFBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLO2VBQ2xGLEdBQUcsS0FBSyxtQkFBbUIsQ0FBQyxDQUFDLEtBQUs7SUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFFSCwwRkFBMEY7SUFDMUYsOERBQThEO0lBQzlELElBQUksc0NBQXNDLEVBQUUsQ0FBQztRQUMzQyxNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBRSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxvSEFBb0gsQ0FBQyxDQUFDLENBQUM7SUFDekssQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNJLEtBQUssVUFBVSxxQkFBcUIsQ0FBQyxXQUFtQixFQUFFLE1BQWdCLEVBQUUsY0FBbUMsRUFBRTtJQUN0SCxJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFO1lBQ3BELGdCQUFnQixFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQztZQUNyRCxhQUFhLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDO1lBQ2hELHVCQUF1QjtZQUN2QixRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUM7UUFDSCxNQUFNLDJCQUEyQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNwRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQUMsT0FBTyxHQUFRLEVBQUUsQ0FBQztRQUNsQixJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDcEQseUNBQXlDO1lBQ3pDLG1DQUFtQztZQUNuQyxNQUFNLE9BQU8sR0FBRyxpSUFBaUksQ0FBQztZQUNsSixNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBRSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLE1BQU0sSUFBSSw0QkFBWSxDQUFDLEdBQUcsT0FBTyxNQUFNLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFDRCxNQUFNLEdBQUcsQ0FBQztJQUNaLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxZQUE2QixFQUFFO0lBQ3hELE9BQU8sSUFBSSxrQkFBUSxDQUFDO1FBQ2xCLEtBQUssRUFBRSxLQUFLO1FBQ1osWUFBWSxFQUFFLElBQUk7UUFDbEIsZ0JBQWdCLEVBQUUsSUFBSTtRQUN0QixhQUFhLEVBQUUsSUFBSTtRQUNuQixZQUFZLEVBQUUsSUFBSTtRQUNsQixHQUFHLFNBQVM7S0FDYixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ1gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIG9zIGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnbm9kZTp1dGlsJztcbmltcG9ydCAqIGFzIGN4c2NoZW1hIGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgbHRlIH0gZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7IHByZXBhcmVEZWZhdWx0RW52aXJvbm1lbnQgYXMgb2xkUHJlcGFyZSwgcHJlcGFyZUNvbnRleHQsIHNwYWNlQXZhaWxhYmxlRm9yQ29udGV4dCwgU2V0dGluZ3MsIGxvYWRUcmVlLCBzb21lLCB2ZXJzaW9uTnVtYmVyIH0gZnJvbSAnLi4vLi4vLi4vYXBpL2F3cy1jZGsnO1xuaW1wb3J0IHsgc3BsaXRCeVNpemUgfSBmcm9tICcuLi8uLi8uLi9wcml2YXRlL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBUb29sa2l0U2VydmljZXMgfSBmcm9tICcuLi8uLi8uLi90b29sa2l0L3ByaXZhdGUnO1xuaW1wb3J0IHsgSU8gfSBmcm9tICcuLi8uLi9pby9wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgSW9IZWxwZXIgfSBmcm9tICcuLi8uLi9zaGFyZWQtcHJpdmF0ZSc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi9zaGFyZWQtcHVibGljJztcbmltcG9ydCB0eXBlIHsgQXBwU3ludGhPcHRpb25zLCBMb2FkQXNzZW1ibHlPcHRpb25zIH0gZnJvbSAnLi4vc291cmNlLWJ1aWxkZXInO1xuXG5leHBvcnQgeyBndWVzc0V4ZWN1dGFibGUgfSBmcm9tICcuLi8uLi8uLi9hcGkvYXdzLWNkayc7XG5cbnR5cGUgRW52ID0geyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbnR5cGUgQ29udGV4dCA9IHsgW2tleTogc3RyaW5nXTogYW55IH07XG5cbi8qKlxuICogVHVybiB0aGUgZ2l2ZW4gb3B0aW9uYWwgb3V0cHV0IGRpcmVjdG9yeSBpbnRvIGEgZml4ZWQgb3V0cHV0IGRpcmVjdG9yeVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV0ZXJtaW5lT3V0cHV0RGlyZWN0b3J5KG91dGRpcj86IHN0cmluZykge1xuICByZXR1cm4gb3V0ZGlyID8/IGZzLm1rZHRlbXBTeW5jKHBhdGguam9pbihmcy5yZWFscGF0aFN5bmMob3MudG1wZGlyKCkpLCAnY2RrLm91dCcpKTtcbn1cblxuLyoqXG4gKiBJZiB3ZSBkb24ndCBoYXZlIHJlZ2lvbi9hY2NvdW50IGRlZmluZWQgaW4gY29udGV4dCwgd2UgZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IFNESyBiZWhhdmlvclxuICogd2hlcmUgcmVnaW9uIGlzIHJldHJpZXZlZCBmcm9tIH4vLmF3cy9jb25maWcgYW5kIGFjY291bnQgaXMgYmFzZWQgb24gZGVmYXVsdCBjcmVkZW50aWFscyBwcm92aWRlclxuICogY2hhaW4gYW5kIHRoZW4gU1RTIGlzIHF1ZXJpZWQuXG4gKlxuICogVGhpcyBpcyBkb25lIG9wcG9ydHVuaXN0aWNhbGx5OiBmb3IgZXhhbXBsZSwgaWYgd2UgY2FuJ3QgYWNjZXNzIFNUUyBmb3Igc29tZSByZWFzb24gb3IgdGhlIHJlZ2lvblxuICogaXMgbm90IGNvbmZpZ3VyZWQsIHRoZSBjb250ZXh0IHZhbHVlIHdpbGwgYmUgJ251bGwnIGFuZCB0aGVyZSBjb3VsZCBmYWlsdXJlcyBkb3duIHRoZSBsaW5lLiBJblxuICogc29tZSBjYXNlcywgc3ludGhlc2lzIGRvZXMgbm90IHJlcXVpcmUgcmVnaW9uL2FjY291bnQgaW5mb3JtYXRpb24gYXQgYWxsLCBzbyB0aGF0IG1pZ2h0IGJlIHBlcmZlY3RseVxuICogZmluZSBpbiBjZXJ0YWluIHNjZW5hcmlvcy5cbiAqXG4gKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCBrZXkvdmFsdWUgYmFzaC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByZXBhcmVEZWZhdWx0RW52aXJvbm1lbnQoc2VydmljZXM6IFRvb2xraXRTZXJ2aWNlcywgcHJvcHM6IHsgb3V0ZGlyPzogc3RyaW5nIH0gPSB7fSk6IFByb21pc2U8RW52PiB7XG4gIGNvbnN0IGxvZ0ZuID0gKG1zZzogc3RyaW5nLCAuLi5hcmdzOiBhbnkpID0+IHNlcnZpY2VzLmlvSGVscGVyLm5vdGlmeShJTy5DREtfQVNTRU1CTFlfSTAwMTAubXNnKGZvcm1hdChtc2csIC4uLmFyZ3MpKSk7XG4gIGNvbnN0IGVudiA9IGF3YWl0IG9sZFByZXBhcmUoc2VydmljZXMuc2RrUHJvdmlkZXIsIGxvZ0ZuKTtcblxuICBpZiAocHJvcHMub3V0ZGlyKSB7XG4gICAgZW52W2N4YXBpLk9VVERJUl9FTlZdID0gcHJvcHMub3V0ZGlyO1xuICAgIGF3YWl0IGxvZ0ZuKCdvdXRkaXI6JywgcHJvcHMub3V0ZGlyKTtcbiAgfVxuXG4gIC8vIENMSSB2ZXJzaW9uIGluZm9ybWF0aW9uXG4gIGVudltjeGFwaS5DTElfQVNNX1ZFUlNJT05fRU5WXSA9IGN4c2NoZW1hLk1hbmlmZXN0LnZlcnNpb24oKTtcbiAgZW52W2N4YXBpLkNMSV9WRVJTSU9OX0VOVl0gPSB2ZXJzaW9uTnVtYmVyKCk7XG5cbiAgYXdhaXQgbG9nRm4oJ2VudjonLCBlbnYpO1xuICByZXR1cm4gZW52O1xufVxuXG4vKipcbiAqIFJ1biBjb2RlIGZyb20gYSBkaWZmZXJlbnQgd29ya2luZyBkaXJlY3RvcnlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoYW5nZURpcjxUPihibG9jazogKCkgPT4gUHJvbWlzZTxUPiwgd29ya2luZ0Rpcj86IHN0cmluZykge1xuICBjb25zdCBvcmlnaW5hbFdvcmtpbmdEaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICB0cnkge1xuICAgIGlmICh3b3JraW5nRGlyKSB7XG4gICAgICBwcm9jZXNzLmNoZGlyKHdvcmtpbmdEaXIpO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCBibG9jaygpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmICh3b3JraW5nRGlyKSB7XG4gICAgICBwcm9jZXNzLmNoZGlyKG9yaWdpbmFsV29ya2luZ0Rpcik7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUnVuIGNvZGUgd2l0aCBhZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aEVudjxUPihlbnY6IEVudiA9IHt9LCBibG9jazogKCkgPT4gUHJvbWlzZTxUPikge1xuICBjb25zdCBvcmlnaW5hbEVudiA9IHByb2Nlc3MuZW52O1xuICB0cnkge1xuICAgIHByb2Nlc3MuZW52ID0ge1xuICAgICAgLi4ub3JpZ2luYWxFbnYsXG4gICAgICAuLi5lbnYsXG4gICAgfTtcblxuICAgIHJldHVybiBhd2FpdCBibG9jaygpO1xuICB9IGZpbmFsbHkge1xuICAgIHByb2Nlc3MuZW52ID0gb3JpZ2luYWxFbnY7XG4gIH1cbn1cblxuLyoqXG4gKiBSdW4gY29kZSB3aXRoIGNvbnRleHQgc2V0dXAgaW5zaWRlIHRoZSBlbnZpcm9ubWVudFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aENvbnRleHQ8VD4oXG4gIGlucHV0Q29udGV4dDogQ29udGV4dCxcbiAgZW52OiBFbnYsXG4gIHN5bnRoT3B0czogQXBwU3ludGhPcHRpb25zID0ge30sXG4gIGJsb2NrOiAoZW52OiBFbnYsIGNvbnRleHQ6IENvbnRleHQpID0+IFByb21pc2U8VD4sXG4pIHtcbiAgY29uc3QgY29udGV4dCA9IGF3YWl0IHByZXBhcmVDb250ZXh0KHN5bnRoT3B0c0RlZmF1bHRzKHN5bnRoT3B0cyksIGlucHV0Q29udGV4dCwgZW52KTtcbiAgbGV0IGNvbnRleHRPdmVyZmxvd0xvY2F0aW9uID0gbnVsbDtcblxuICB0cnkge1xuICAgIGNvbnN0IGVudlZhcmlhYmxlU2l6ZUxpbWl0ID0gb3MucGxhdGZvcm0oKSA9PT0gJ3dpbjMyJyA/IDMyNzYwIDogMTMxMDcyO1xuICAgIGNvbnN0IFtzbWFsbENvbnRleHQsIG92ZXJmbG93XSA9IHNwbGl0QnlTaXplKGNvbnRleHQsIHNwYWNlQXZhaWxhYmxlRm9yQ29udGV4dChlbnYsIGVudlZhcmlhYmxlU2l6ZUxpbWl0KSk7XG5cbiAgICAvLyBTdG9yZSB0aGUgc2FmZSBwYXJ0IGluIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZVxuICAgIGVudltjeGFwaS5DT05URVhUX0VOVl0gPSBKU09OLnN0cmluZ2lmeShzbWFsbENvbnRleHQpO1xuXG4gICAgLy8gSWYgdGhlcmUgd2FzIGFueSBvdmVyZmxvdywgd3JpdGUgaXQgdG8gYSB0ZW1wb3JhcnkgZmlsZVxuICAgIGlmIChPYmplY3Qua2V5cyhvdmVyZmxvdyA/PyB7fSkubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY29udGV4dERpciA9IGZzLm1rZHRlbXBTeW5jKHBhdGguam9pbihvcy50bXBkaXIoKSwgJ2Nkay1jb250ZXh0JykpO1xuICAgICAgY29udGV4dE92ZXJmbG93TG9jYXRpb24gPSBwYXRoLmpvaW4oY29udGV4dERpciwgJ2NvbnRleHQtb3ZlcmZsb3cuanNvbicpO1xuICAgICAgZnMud3JpdGVKU09OU3luYyhjb250ZXh0T3ZlcmZsb3dMb2NhdGlvbiwgb3ZlcmZsb3cpO1xuICAgICAgZW52W2N4YXBpLkNPTlRFWFRfT1ZFUkZMT1dfTE9DQVRJT05fRU5WXSA9IGNvbnRleHRPdmVyZmxvd0xvY2F0aW9uO1xuICAgIH1cblxuICAgIC8vIGNhbGwgdGhlIGJsb2NrIGNvZGUgd2l0aCBuZXcgZW52aXJvbm1lbnRcbiAgICByZXR1cm4gYXdhaXQgYmxvY2soZW52LCBjb250ZXh0KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoY29udGV4dE92ZXJmbG93TG9jYXRpb24pIHtcbiAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5kaXJuYW1lKGNvbnRleHRPdmVyZmxvd0xvY2F0aW9uKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZ2l2ZW4gYXNzZW1ibHkgc3VwcG9ydHMgY29udGV4dCBvdmVyZmxvdywgd2FybiBvdGhlcndpc2UuXG4gKlxuICogQHBhcmFtIGFzc2VtYmx5IHRoZSBhc3NlbWJseSB0byBjaGVja1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tDb250ZXh0T3ZlcmZsb3dTdXBwb3J0KGFzc2VtYmx5OiBjeGFwaS5DbG91ZEFzc2VtYmx5LCBpb0hlbHBlcjogSW9IZWxwZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgdHJlZSA9IGxvYWRUcmVlKGFzc2VtYmx5LCAobXNnOiBzdHJpbmcpID0+IHZvaWQgaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfQVNTRU1CTFlfVFJBQ0UubXNnKG1zZykpKTtcbiAgY29uc3QgZnJhbWV3b3JrRG9lc05vdFN1cHBvcnRDb250ZXh0T3ZlcmZsb3cgPSBzb21lKHRyZWUsIG5vZGUgPT4ge1xuICAgIGNvbnN0IGZxbiA9IG5vZGUuY29uc3RydWN0SW5mbz8uZnFuO1xuICAgIGNvbnN0IHZlcnNpb24gPSBub2RlLmNvbnN0cnVjdEluZm8/LnZlcnNpb247XG4gICAgcmV0dXJuIChmcW4gPT09ICdhd3MtY2RrLWxpYi5BcHAnICYmIHZlcnNpb24gIT0gbnVsbCAmJiBsdGUodmVyc2lvbiwgJzIuMzguMCcpKSAvLyB2MlxuICAgIHx8IGZxbiA9PT0gJ0Bhd3MtY2RrL2NvcmUuQXBwJzsgLy8gdjFcbiAgfSk7XG5cbiAgLy8gV2UncmUgZGVhbGluZyB3aXRoIGFuIG9sZCB2ZXJzaW9uIG9mIHRoZSBmcmFtZXdvcmsgaGVyZS4gSXQgaXMgdW5hd2FyZSBvZiB0aGUgdGVtcG9yYXJ5XG4gIC8vIGZpbGUsIHdoaWNoIG1lYW5zIHRoYXQgaXQgd2lsbCBpZ25vcmUgdGhlIGNvbnRleHQgb3ZlcmZsb3cuXG4gIGlmIChmcmFtZXdvcmtEb2VzTm90U3VwcG9ydENvbnRleHRPdmVyZmxvdykge1xuICAgIGF3YWl0IGlvSGVscGVyLm5vdGlmeShJTy5DREtfQVNTRU1CTFlfVzAwMTAubXNnKCdQYXJ0IG9mIHRoZSBjb250ZXh0IGNvdWxkIG5vdCBiZSBzZW50IHRvIHRoZSBhcHBsaWNhdGlvbi4gUGxlYXNlIHVwZGF0ZSB0aGUgQVdTIENESyBsaWJyYXJ5IHRvIHRoZSBsYXRlc3QgdmVyc2lvbi4nKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTYWZlbHkgY3JlYXRlIGFuIGFzc2VtYmx5IGZyb20gYSBjbG91ZCBhc3NlbWJseSBkaXJlY3RvcnlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzc2VtYmx5RnJvbURpcmVjdG9yeShhc3NlbWJseURpcjogc3RyaW5nLCBpb0hvc3Q6IElvSGVscGVyLCBsb2FkT3B0aW9uczogTG9hZEFzc2VtYmx5T3B0aW9ucyA9IHt9KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgYXNzZW1ibHkgPSBuZXcgY3hhcGkuQ2xvdWRBc3NlbWJseShhc3NlbWJseURpciwge1xuICAgICAgc2tpcFZlcnNpb25DaGVjazogIShsb2FkT3B0aW9ucy5jaGVja1ZlcnNpb24gPz8gdHJ1ZSksXG4gICAgICBza2lwRW51bUNoZWNrOiAhKGxvYWRPcHRpb25zLmNoZWNrRW51bXMgPz8gdHJ1ZSksXG4gICAgICAvLyBXZSBzb3J0IGFzIHdlIGRlcGxveVxuICAgICAgdG9wb1NvcnQ6IGZhbHNlLFxuICAgIH0pO1xuICAgIGF3YWl0IGNoZWNrQ29udGV4dE92ZXJmbG93U3VwcG9ydChhc3NlbWJseSwgaW9Ib3N0KTtcbiAgICByZXR1cm4gYXNzZW1ibHk7XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgaWYgKGVyci5tZXNzYWdlLmluY2x1ZGVzKGN4c2NoZW1hLlZFUlNJT05fTUlTTUFUQ0gpKSB7XG4gICAgICAvLyB0aGlzIG1lYW5zIHRoZSBDTEkgdmVyc2lvbiBpcyB0b28gb2xkLlxuICAgICAgLy8gd2UgaW5zdHJ1Y3QgdGhlIHVzZXIgdG8gdXBncmFkZS5cbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnVGhpcyBBV1MgQ0RLIFRvb2xraXQgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgQVdTIENESyBsaWJyYXJ5IHVzZWQgYnkgeW91ciBhcHBsaWNhdGlvbi4gUGxlYXNlIHVwZ3JhZGUgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uLic7XG4gICAgICBhd2FpdCBpb0hvc3Qubm90aWZ5KElPLkNES19BU1NFTUJMWV9FMTExMS5tc2cobWVzc2FnZSwgeyBlcnJvcjogZXJyIH0pKTtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYCR7bWVzc2FnZX1cXG4oJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN5bnRoT3B0c0RlZmF1bHRzKHN5bnRoT3B0czogQXBwU3ludGhPcHRpb25zID0ge30pOiBTZXR0aW5ncyB7XG4gIHJldHVybiBuZXcgU2V0dGluZ3Moe1xuICAgIGRlYnVnOiBmYWxzZSxcbiAgICBwYXRoTWV0YWRhdGE6IHRydWUsXG4gICAgdmVyc2lvblJlcG9ydGluZzogdHJ1ZSxcbiAgICBhc3NldE1ldGFkYXRhOiB0cnVlLFxuICAgIGFzc2V0U3RhZ2luZzogdHJ1ZSxcbiAgICAuLi5zeW50aE9wdHMsXG4gIH0sIHRydWUpO1xufVxuIl19
188
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcGFyZS1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwcmVwYXJlLXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFtTEEsc0RBb0JDO0FBdk1ELDhCQUE4QjtBQUM5QixrQ0FBa0M7QUFDbEMseUNBQW1DO0FBQ25DLDJEQUEyRDtBQUMzRCx5Q0FBeUM7QUFDekMsK0JBQStCO0FBQy9CLG1DQUE2QjtBQUU3QixrREFBbUw7QUFDbkwsZ0RBQW9EO0FBRXBELDhDQUFzQztBQUV0Qyx1REFBbUQ7QUFNbkQsTUFBYSxvQkFBb0I7SUFDZCxRQUFRLENBQVc7SUFDbkIsV0FBVyxDQUFjO0lBQ3pCLE9BQU8sQ0FBaUM7SUFDakQsT0FBTyxDQUFxQjtJQUVwQyxZQUFtQixRQUF5QixFQUFFLFFBQTZCLEVBQUU7UUFDM0UsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztRQUN4QyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFFLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDekYsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsTUFBTTtRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNsRixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FB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Q3ZCLFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUMsQ0FBQztRQUNILE1BQU0sMkJBQTJCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFBQyxPQUFPLEdBQVEsRUFBRSxDQUFDO1FBQ2xCLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUNwRCx5Q0FBeUM7WUFDekMsbUNBQW1DO1lBQ25DLE1BQU0sT0FBTyxHQUFHLGlJQUFpSSxDQUFDO1lBQ2xKLE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFFLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDMUUsTUFBTSxJQUFJLDRCQUFZLENBQUMsR0FBRyxPQUFPLE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUNELE1BQU0sR0FBRyxDQUFDO0lBQ1osQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLFlBQTZCLEVBQUU7SUFDeEQsT0FBTyxJQUFJLGtCQUFRLENBQUM7UUFDbEIsS0FBSyxFQUFFLEtBQUs7UUFDWixZQUFZLEVBQUUsSUFBSTtRQUNsQixnQkFBZ0IsRUFBRSxJQUFJO1FBQ3RCLGFBQWEsRUFBRSxJQUFJO1FBQ25CLFlBQVksRUFBRSxJQUFJO1FBQ2xCLEdBQUcsU0FBUztLQUNiLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDWCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgb3MgZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBmb3JtYXQgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0ICogYXMgY3hzY2hlbWEgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBsdGUgfSBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHR5cGUgeyBTZGtQcm92aWRlciB9IGZyb20gJy4uLy4uLy4uL2FwaS9hd3MtY2RrJztcbmltcG9ydCB7IHByZXBhcmVEZWZhdWx0RW52aXJvbm1lbnQgYXMgb2xkUHJlcGFyZSwgcHJlcGFyZUNvbnRleHQsIHNwYWNlQXZhaWxhYmxlRm9yQ29udGV4dCwgU2V0dGluZ3MsIGxvYWRUcmVlLCBzb21lLCB2ZXJzaW9uTnVtYmVyLCBndWVzc0V4ZWN1dGFibGUgfSBmcm9tICcuLi8uLi8uLi9hcGkvYXdzLWNkayc7XG5pbXBvcnQgeyBzcGxpdEJ5U2l6ZSB9IGZyb20gJy4uLy4uLy4uL3ByaXZhdGUvdXRpbCc7XG5pbXBvcnQgdHlwZSB7IFRvb2xraXRTZXJ2aWNlcyB9IGZyb20gJy4uLy4uLy4uL3Rvb2xraXQvcHJpdmF0ZSc7XG5pbXBvcnQgeyBJTyB9IGZyb20gJy4uLy4uL2lvL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBJb0hlbHBlciB9IGZyb20gJy4uLy4uL3NoYXJlZC1wcml2YXRlJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uL3NoYXJlZC1wdWJsaWMnO1xuaW1wb3J0IHR5cGUgeyBBcHBTeW50aE9wdGlvbnMsIExvYWRBc3NlbWJseU9wdGlvbnMgfSBmcm9tICcuLi9zb3VyY2UtYnVpbGRlcic7XG5cbnR5cGUgRW52ID0geyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbnR5cGUgQ29udGV4dCA9IHsgW2tleTogc3RyaW5nXTogYW55IH07XG5cbmV4cG9ydCBjbGFzcyBFeGVjdXRpb25FbnZpcm9ubWVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW9IZWxwZXI6IElvSGVscGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBkZWJ1Z0ZuOiAobXNnOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgX291dGRpcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzZXJ2aWNlczogVG9vbGtpdFNlcnZpY2VzLCBwcm9wczogeyBvdXRkaXI/OiBzdHJpbmcgfSA9IHt9KSB7XG4gICAgdGhpcy5pb0hlbHBlciA9IHNlcnZpY2VzLmlvSGVscGVyO1xuICAgIHRoaXMuc2RrUHJvdmlkZXIgPSBzZXJ2aWNlcy5zZGtQcm92aWRlcjtcbiAgICB0aGlzLmRlYnVnRm4gPSAobXNnOiBzdHJpbmcpID0+IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfQVNTRU1CTFlfREVCVUcubXNnKG1zZykpO1xuICAgIHRoaXMuX291dGRpciA9IHByb3BzLm91dGRpcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUdXJuIHRoZSBnaXZlbiBvcHRpb25hbCBvdXRwdXQgZGlyZWN0b3J5IGludG8gYSBmaXhlZCBvdXRwdXQgZGlyZWN0b3J5XG4gICAqL1xuICBwdWJsaWMgZ2V0IG91dGRpcigpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fb3V0ZGlyKSB7XG4gICAgICBjb25zdCBvdXRkaXIgPSBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4oZnMucmVhbHBhdGhTeW5jKG9zLnRtcGRpcigpKSwgJ2Nkay5vdXQnKSk7XG4gICAgICB0aGlzLl9vdXRkaXIgPSBvdXRkaXI7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9vdXRkaXI7XG4gIH1cblxuICAvKipcbiAgICogR3Vlc3MgdGhlIGV4ZWN1dGFibGUgZnJvbSB0aGUgY29tbWFuZC1saW5lIGFyZ3VtZW50XG4gICAqXG4gICAqIE9ubHkgZG8gdGhpcyBpZiB0aGUgZmlsZSBpcyBOT1QgbWFya2VkIGFzIGV4ZWN1dGFibGUuIElmIGl0IGlzLFxuICAgKiB3ZSdsbCBkZWZlciB0byB0aGUgc2hlYmFuZyBpbnNpZGUgdGhlIGZpbGUgaXRzZWxmLlxuICAgKlxuICAgKiBJZiB3ZSdyZSBvbiBXaW5kb3dzLCB3ZSBBTFdBWVMgdGFrZSB0aGUgaGFuZGxlciwgc2luY2UgaXQncyBoYXJkIHRvXG4gICAqIHZlcmlmeSBpZiByZWdpc3RyeSBhc3NvY2lhdGlvbnMgaGF2ZSBvciBoYXZlIG5vdCBiZWVuIHNldCB1cCBmb3IgdGhpc1xuICAgKiBmaWxlIHR5cGUsIHNvIHdlJ2xsIGFzc3VtZSB0aGUgd29yc3QgYW5kIHRha2UgY29udHJvbC5cbiAgICovXG4gIHB1YmxpYyBndWVzc0V4ZWN1dGFibGUoYXBwOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZ3Vlc3NFeGVjdXRhYmxlKGFwcCwgdGhpcy5kZWJ1Z0ZuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB3ZSBkb24ndCBoYXZlIHJlZ2lvbi9hY2NvdW50IGRlZmluZWQgaW4gY29udGV4dCwgd2UgZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IFNESyBiZWhhdmlvclxuICAgKiB3aGVyZSByZWdpb24gaXMgcmV0cmlldmVkIGZyb20gfi8uYXdzL2NvbmZpZyBhbmQgYWNjb3VudCBpcyBiYXNlZCBvbiBkZWZhdWx0IGNyZWRlbnRpYWxzIHByb3ZpZGVyXG4gICAqIGNoYWluIGFuZCB0aGVuIFNUUyBpcyBxdWVyaWVkLlxuICAgKlxuICAgKiBUaGlzIGlzIGRvbmUgb3Bwb3J0dW5pc3RpY2FsbHk6IGZvciBleGFtcGxlLCBpZiB3ZSBjYW4ndCBhY2Nlc3MgU1RTIGZvciBzb21lIHJlYXNvbiBvciB0aGUgcmVnaW9uXG4gICAqIGlzIG5vdCBjb25maWd1cmVkLCB0aGUgY29udGV4dCB2YWx1ZSB3aWxsIGJlICdudWxsJyBhbmQgdGhlcmUgY291bGQgZmFpbHVyZXMgZG93biB0aGUgbGluZS4gSW5cbiAgICogc29tZSBjYXNlcywgc3ludGhlc2lzIGRvZXMgbm90IHJlcXVpcmUgcmVnaW9uL2FjY291bnQgaW5mb3JtYXRpb24gYXQgYWxsLCBzbyB0aGF0IG1pZ2h0IGJlIHBlcmZlY3RseVxuICAgKiBmaW5lIGluIGNlcnRhaW4gc2NlbmFyaW9zLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRlZmF1bHRFbnZWYXJzKCk6IFByb21pc2U8RW52PiB7XG4gICAgY29uc3QgZGVidWdGbiA9IChtc2c6IHN0cmluZykgPT4gdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uQ0RLX0FTU0VNQkxZX0kwMDEwLm1zZyhtc2cpKTtcbiAgICBjb25zdCBlbnYgPSBhd2FpdCBvbGRQcmVwYXJlKHRoaXMuc2RrUHJvdmlkZXIsIGRlYnVnRm4pO1xuXG4gICAgZW52W2N4YXBpLk9VVERJUl9FTlZdID0gdGhpcy5vdXRkaXI7XG4gICAgYXdhaXQgZGVidWdGbihmb3JtYXQoJ291dGRpcjonLCB0aGlzLm91dGRpcikpO1xuXG4gICAgLy8gQ0xJIHZlcnNpb24gaW5mb3JtYXRpb25cbiAgICBlbnZbY3hhcGkuQ0xJX0FTTV9WRVJTSU9OX0VOVl0gPSBjeHNjaGVtYS5NYW5pZmVzdC52ZXJzaW9uKCk7XG4gICAgZW52W2N4YXBpLkNMSV9WRVJTSU9OX0VOVl0gPSB2ZXJzaW9uTnVtYmVyKCk7XG5cbiAgICBhd2FpdCBkZWJ1Z0ZuKGZvcm1hdCgnZW52OicsIGVudikpO1xuICAgIHJldHVybiBlbnY7XG4gIH1cblxuICAvKipcbiAgICogUnVuIGNvZGUgZnJvbSBhIGRpZmZlcmVudCB3b3JraW5nIGRpcmVjdG9yeVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNoYW5nZURpcjxUPihibG9jazogKCkgPT4gUHJvbWlzZTxUPiwgd29ya2luZ0Rpcj86IHN0cmluZykge1xuICAgIGNvbnN0IG9yaWdpbmFsV29ya2luZ0RpciA9IHByb2Nlc3MuY3dkKCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh3b3JraW5nRGlyKSB7XG4gICAgICAgIHByb2Nlc3MuY2hkaXIod29ya2luZ0Rpcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCBibG9jaygpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAod29ya2luZ0Rpcikge1xuICAgICAgICBwcm9jZXNzLmNoZGlyKG9yaWdpbmFsV29ya2luZ0Rpcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1biBjb2RlIHdpdGggYWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICovXG4gIHB1YmxpYyBhc3luYyB3aXRoRW52PFQ+KGVudjogRW52ID0ge30sIGJsb2NrOiAoKSA9PiBQcm9taXNlPFQ+KSB7XG4gICAgY29uc3Qgb3JpZ2luYWxFbnYgPSBwcm9jZXNzLmVudjtcbiAgICB0cnkge1xuICAgICAgcHJvY2Vzcy5lbnYgPSB7XG4gICAgICAgIC4uLm9yaWdpbmFsRW52LFxuICAgICAgICAuLi5lbnYsXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gYXdhaXQgYmxvY2soKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcHJvY2Vzcy5lbnYgPSBvcmlnaW5hbEVudjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVuIGNvZGUgd2l0aCBjb250ZXh0IHNldHVwIGluc2lkZSB0aGUgZW52aXJvbm1lbnRcbiAgICovXG4gIHB1YmxpYyBhc3luYyB3aXRoQ29udGV4dDxUPihcbiAgICBpbnB1dENvbnRleHQ6IENvbnRleHQsXG4gICAgZW52OiBFbnYsXG4gICAgc3ludGhPcHRzOiBBcHBTeW50aE9wdGlvbnMgPSB7fSxcbiAgICBibG9jazogKGVudjogRW52LCBjb250ZXh0OiBDb250ZXh0KSA9PiBQcm9taXNlPFQ+LFxuICApIHtcbiAgICBjb25zdCBjb250ZXh0ID0gYXdhaXQgcHJlcGFyZUNvbnRleHQoc3ludGhPcHRzRGVmYXVsdHMoc3ludGhPcHRzKSwgaW5wdXRDb250ZXh0LCBlbnYsIHRoaXMuZGVidWdGbik7XG4gICAgbGV0IGNvbnRleHRPdmVyZmxvd0xvY2F0aW9uID0gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbnZWYXJpYWJsZVNpemVMaW1pdCA9IG9zLnBsYXRmb3JtKCkgPT09ICd3aW4zMicgPyAzMjc2MCA6IDEzMTA3MjtcbiAgICAgIGNvbnN0IFtzbWFsbENvbnRleHQsIG92ZXJmbG93XSA9IHNwbGl0QnlTaXplKGNvbnRleHQsIHNwYWNlQXZhaWxhYmxlRm9yQ29udGV4dChlbnYsIGVudlZhcmlhYmxlU2l6ZUxpbWl0KSk7XG5cbiAgICAgIC8vIFN0b3JlIHRoZSBzYWZlIHBhcnQgaW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlXG4gICAgICBlbnZbY3hhcGkuQ09OVEVYVF9FTlZdID0gSlNPTi5zdHJpbmdpZnkoc21hbGxDb250ZXh0KTtcblxuICAgICAgLy8gSWYgdGhlcmUgd2FzIGFueSBvdmVyZmxvdywgd3JpdGUgaXQgdG8gYSB0ZW1wb3JhcnkgZmlsZVxuICAgICAgaWYgKE9iamVjdC5rZXlzKG92ZXJmbG93ID8/IHt9KS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHREaXIgPSBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4ob3MudG1wZGlyKCksICdjZGstY29udGV4dCcpKTtcbiAgICAgICAgY29udGV4dE92ZXJmbG93TG9jYXRpb24gPSBwYXRoLmpvaW4oY29udGV4dERpciwgJ2NvbnRleHQtb3ZlcmZsb3cuanNvbicpO1xuICAgICAgICBmcy53cml0ZUpTT05TeW5jKGNvbnRleHRPdmVyZmxvd0xvY2F0aW9uLCBvdmVyZmxvdyk7XG4gICAgICAgIGVudltjeGFwaS5DT05URVhUX09WRVJGTE9XX0xPQ0FUSU9OX0VOVl0gPSBjb250ZXh0T3ZlcmZsb3dMb2NhdGlvbjtcbiAgICAgIH1cblxuICAgICAgLy8gY2FsbCB0aGUgYmxvY2sgY29kZSB3aXRoIG5ldyBlbnZpcm9ubWVudFxuICAgICAgcmV0dXJuIGF3YWl0IGJsb2NrKGVudiwgY29udGV4dCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChjb250ZXh0T3ZlcmZsb3dMb2NhdGlvbikge1xuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguZGlybmFtZShjb250ZXh0T3ZlcmZsb3dMb2NhdGlvbikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGdpdmVuIGFzc2VtYmx5IHN1cHBvcnRzIGNvbnRleHQgb3ZlcmZsb3csIHdhcm4gb3RoZXJ3aXNlLlxuICpcbiAqIEBwYXJhbSBhc3NlbWJseSB0aGUgYXNzZW1ibHkgdG8gY2hlY2tcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2hlY2tDb250ZXh0T3ZlcmZsb3dTdXBwb3J0KGFzc2VtYmx5OiBjeGFwaS5DbG91ZEFzc2VtYmx5LCBpb0hlbHBlcjogSW9IZWxwZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgdHJhY2VGbiA9IChtc2c6IHN0cmluZykgPT4gaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfQVNTRU1CTFlfVFJBQ0UubXNnKG1zZykpO1xuICBjb25zdCB0cmVlID0gYXdhaXQgbG9hZFRyZWUoYXNzZW1ibHksIHRyYWNlRm4pO1xuICBjb25zdCBmcmFtZXdvcmtEb2VzTm90U3VwcG9ydENvbnRleHRPdmVyZmxvdyA9IHNvbWUodHJlZSwgbm9kZSA9PiB7XG4gICAgY29uc3QgZnFuID0gbm9kZS5jb25zdHJ1Y3RJbmZvPy5mcW47XG4gICAgY29uc3QgdmVyc2lvbiA9IG5vZGUuY29uc3RydWN0SW5mbz8udmVyc2lvbjtcbiAgICByZXR1cm4gKGZxbiA9PT0gJ2F3cy1jZGstbGliLkFwcCcgJiYgdmVyc2lvbiAhPSBudWxsICYmIGx0ZSh2ZXJzaW9uLCAnMi4zOC4wJykpIC8vIHYyXG4gICAgfHwgZnFuID09PSAnQGF3cy1jZGsvY29yZS5BcHAnOyAvLyB2MVxuICB9KTtcblxuICAvLyBXZSdyZSBkZWFsaW5nIHdpdGggYW4gb2xkIHZlcnNpb24gb2YgdGhlIGZyYW1ld29yayBoZXJlLiBJdCBpcyB1bmF3YXJlIG9mIHRoZSB0ZW1wb3JhcnlcbiAgLy8gZmlsZSwgd2hpY2ggbWVhbnMgdGhhdCBpdCB3aWxsIGlnbm9yZSB0aGUgY29udGV4dCBvdmVyZmxvdy5cbiAgaWYgKGZyYW1ld29ya0RvZXNOb3RTdXBwb3J0Q29udGV4dE92ZXJmbG93KSB7XG4gICAgYXdhaXQgaW9IZWxwZXIubm90aWZ5KElPLkNES19BU1NFTUJMWV9XMDAxMC5tc2coJ1BhcnQgb2YgdGhlIGNvbnRleHQgY291bGQgbm90IGJlIHNlbnQgdG8gdGhlIGFwcGxpY2F0aW9uLiBQbGVhc2UgdXBkYXRlIHRoZSBBV1MgQ0RLIGxpYnJhcnkgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uLicpKTtcbiAgfVxufVxuXG4vKipcbiAqIFNhZmVseSBjcmVhdGUgYW4gYXNzZW1ibHkgZnJvbSBhIGNsb3VkIGFzc2VtYmx5IGRpcmVjdG9yeVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXNzZW1ibHlGcm9tRGlyZWN0b3J5KGFzc2VtYmx5RGlyOiBzdHJpbmcsIGlvSGVscGVyOiBJb0hlbHBlciwgbG9hZE9wdGlvbnM6IExvYWRBc3NlbWJseU9wdGlvbnMgPSB7fSkge1xuICB0cnkge1xuICAgIGNvbnN0IGFzc2VtYmx5ID0gbmV3IGN4YXBpLkNsb3VkQXNzZW1ibHkoYXNzZW1ibHlEaXIsIHtcbiAgICAgIHNraXBWZXJzaW9uQ2hlY2s6ICEobG9hZE9wdGlvbnMuY2hlY2tWZXJzaW9uID8/IHRydWUpLFxuICAgICAgc2tpcEVudW1DaGVjazogIShsb2FkT3B0aW9ucy5jaGVja0VudW1zID8/IHRydWUpLFxuICAgICAgLy8gV2Ugc29ydCBhcyB3ZSBkZXBsb3lcbiAgICAgIHRvcG9Tb3J0OiBmYWxzZSxcbiAgICB9KTtcbiAgICBhd2FpdCBjaGVja0NvbnRleHRPdmVyZmxvd1N1cHBvcnQoYXNzZW1ibHksIGlvSGVscGVyKTtcbiAgICByZXR1cm4gYXNzZW1ibHk7XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgaWYgKGVyci5tZXNzYWdlLmluY2x1ZGVzKGN4c2NoZW1hLlZFUlNJT05fTUlTTUFUQ0gpKSB7XG4gICAgICAvLyB0aGlzIG1lYW5zIHRoZSBDTEkgdmVyc2lvbiBpcyB0b28gb2xkLlxuICAgICAgLy8gd2UgaW5zdHJ1Y3QgdGhlIHVzZXIgdG8gdXBncmFkZS5cbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnVGhpcyBBV1MgQ0RLIFRvb2xraXQgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgQVdTIENESyBsaWJyYXJ5IHVzZWQgYnkgeW91ciBhcHBsaWNhdGlvbi4gUGxlYXNlIHVwZ3JhZGUgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uLic7XG4gICAgICBhd2FpdCBpb0hlbHBlci5ub3RpZnkoSU8uQ0RLX0FTU0VNQkxZX0UxMTExLm1zZyhtZXNzYWdlLCB7IGVycm9yOiBlcnIgfSkpO1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgJHttZXNzYWdlfVxcbigke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3ludGhPcHRzRGVmYXVsdHMoc3ludGhPcHRzOiBBcHBTeW50aE9wdGlvbnMgPSB7fSk6IFNldHRpbmdzIHtcbiAgcmV0dXJuIG5ldyBTZXR0aW5ncyh7XG4gICAgZGVidWc6IGZhbHNlLFxuICAgIHBhdGhNZXRhZGF0YTogdHJ1ZSxcbiAgICB2ZXJzaW9uUmVwb3J0aW5nOiB0cnVlLFxuICAgIGFzc2V0TWV0YWRhdGE6IHRydWUsXG4gICAgYXNzZXRTdGFnaW5nOiB0cnVlLFxuICAgIC4uLnN5bnRoT3B0cyxcbiAgfSwgdHJ1ZSk7XG59XG4iXX0=
@@ -26,12 +26,12 @@ class CloudAssemblySourceBuilder {
26
26
  };
27
27
  return new context_aware_source_1.ContextAwareCloudAssembly({
28
28
  produce: async () => {
29
- const outdir = (0, prepare_source_1.determineOutputDirectory)(props.outdir);
30
- const env = await (0, prepare_source_1.prepareDefaultEnvironment)(services, { outdir });
31
- const assembly = await (0, prepare_source_1.changeDir)(async () => (0, prepare_source_1.withContext)(context.all, env, props.synthOptions ?? {}, async (envWithContext, ctx) => (0, prepare_source_1.withEnv)(envWithContext, () => {
29
+ const execution = new prepare_source_1.ExecutionEnvironment(services, { outdir: props.outdir });
30
+ const env = await execution.defaultEnvVars();
31
+ const assembly = await execution.changeDir(async () => execution.withContext(context.all, env, props.synthOptions ?? {}, async (envWithContext, ctx) => execution.withEnv(envWithContext, () => {
32
32
  try {
33
33
  return builder({
34
- outdir,
34
+ outdir: execution.outdir,
35
35
  context: ctx,
36
36
  });
37
37
  }
@@ -94,7 +94,6 @@ class CloudAssemblySourceBuilder {
94
94
  // if (build) {
95
95
  // await execInChildProcess(build, { cwd: props.workingDirectory });
96
96
  // }
97
- const commandLine = await (0, prepare_source_1.guessExecutable)(app);
98
97
  const outdir = props.outdir ?? 'cdk.out';
99
98
  try {
100
99
  fs.mkdirpSync(outdir);
@@ -103,8 +102,10 @@ class CloudAssemblySourceBuilder {
103
102
  throw new shared_public_1.ToolkitError(`Could not create output directory at '${outdir}' (${e.message}).`);
104
103
  }
105
104
  lock = await new aws_cdk_1.RWLock(outdir).acquireWrite();
106
- const env = await (0, prepare_source_1.prepareDefaultEnvironment)(services, { outdir });
107
- return await (0, prepare_source_1.withContext)(context.all, env, props.synthOptions, async (envWithContext, _ctx) => {
105
+ const execution = new prepare_source_1.ExecutionEnvironment(services, { outdir });
106
+ const commandLine = await execution.guessExecutable(app);
107
+ const env = await execution.defaultEnvVars();
108
+ return await execution.withContext(context.all, env, props.synthOptions, async (envWithContext, _ctx) => {
108
109
  await (0, exec_1.execInChildProcess)(commandLine.join(' '), {
109
110
  eventPublisher: async (type, line) => {
110
111
  switch (type) {
@@ -130,4 +131,4 @@ class CloudAssemblySourceBuilder {
130
131
  }
131
132
  }
132
133
  exports.CloudAssemblySourceBuilder = CloudAssemblySourceBuilder;
133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzb3VyY2UtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBeUM7QUFDekMsK0JBQStCO0FBRy9CLGlFQUFtRTtBQUNuRSxpQ0FBNEM7QUFDNUMscURBQWdLO0FBR2hLLDJDQUEwRDtBQUMxRCw4Q0FBc0M7QUFDdEMsdURBQWtFO0FBR2xFLE1BQXNCLDBCQUEwQjtJQU85Qzs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBQyxtQkFBbUIsQ0FDOUIsT0FBd0IsRUFDeEIsUUFBNkIsRUFBRTtRQUUvQixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3BELE1BQU0sT0FBTyxHQUFHLElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLGtCQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEUsTUFBTSxvQkFBb0IsR0FBbUM7WUFDM0QsUUFBUTtZQUNSLE9BQU87WUFDUCxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87U0FDdkIsQ0FBQztRQUVGLE9BQU8sSUFBSSxnREFBeUIsQ0FDbEM7WUFDRSxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ2xCLE1BQU0sTUFBTSxHQUFHLElBQUEseUNBQXdCLEVBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN0RCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUEsMENBQXlCLEVBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztnQkFDbEUsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFBLDBCQUFTLEVBQUMsS0FBSyxJQUFJLEVBQUUsQ0FDMUMsSUFBQSw0QkFBVyxFQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksRUFBRSxFQUFFLEtBQUss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Q0FBQyxnQkFBZ0I7eUJBQzVCLENBQUMsQ0FBQzt3QkFDSCxPQUFPLElBQUEsc0NBQXFCLEVBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7b0JBQ3JGLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7d0JBQVMsQ0FBQztvQkFDVCxNQUFNLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztnQkFDeEIsQ0FBQztZQUNILENBQUM7U0FDRixFQUNELG9CQUFvQixDQUNyQixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBbkpELGdFQW1KQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgdHlwZSB7IEFzc2VtYmx5RGlyZWN0b3J5UHJvcHMsIEFzc2VtYmx5U291cmNlUHJvcHMsIElDbG91ZEFzc2VtYmx5U291cmNlIH0gZnJvbSAnLi4vJztcbmltcG9ydCB0eXBlIHsgQ29udGV4dEF3YXJlQ2xvdWRBc3NlbWJseVByb3BzIH0gZnJvbSAnLi9jb250ZXh0LWF3YXJlLXNvdXJjZSc7XG5pbXBvcnQgeyBDb250ZXh0QXdhcmVDbG91ZEFzc2VtYmx5IH0gZnJvbSAnLi9jb250ZXh0LWF3YXJlLXNvdXJjZSc7XG5pbXBvcnQgeyBleGVjSW5DaGlsZFByb2Nlc3MgfSBmcm9tICcuL2V4ZWMnO1xuaW1wb3J0IHsgYXNzZW1ibHlGcm9tRGlyZWN0b3J5LCBjaGFuZ2VEaXIsIGRldGVybWluZU91dHB1dERpcmVjdG9yeSwgZ3Vlc3NFeGVjdXRhYmxlLCBwcmVwYXJlRGVmYXVsdEVudmlyb25tZW50LCB3aXRoQ29udGV4dCwgd2l0aEVudiB9IGZyb20gJy4vcHJlcGFyZS1zb3VyY2UnO1xuaW1wb3J0IHR5cGUgeyBUb29sa2l0U2VydmljZXMgfSBmcm9tICcuLi8uLi8uLi90b29sa2l0L3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBJTG9jayB9IGZyb20gJy4uLy4uL2F3cy1jZGsnO1xuaW1wb3J0IHsgQ29udGV4dCwgUldMb2NrLCBTZXR0aW5ncyB9IGZyb20gJy4uLy4uL2F3cy1jZGsnO1xuaW1wb3J0IHsgSU8gfSBmcm9tICcuLi8uLi9pby9wcml2YXRlJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciwgQXNzZW1ibHlFcnJvciB9IGZyb20gJy4uLy4uL3NoYXJlZC1wdWJsaWMnO1xuaW1wb3J0IHR5cGUgeyBBc3NlbWJseUJ1aWxkZXIgfSBmcm9tICcuLi9zb3VyY2UtYnVpbGRlcic7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDbG91ZEFzc2VtYmx5U291cmNlQnVpbGRlciB7XG4gIC8qKlxuICAgKiBIZWxwZXIgdG8gcHJvdmlkZSB0aGUgQ2xvdWRBc3NlbWJseVNvdXJjZUJ1aWxkZXIgd2l0aCByZXF1aXJlZCB0b29sa2l0IHNlcnZpY2VzXG4gICAqIEBkZXByZWNhdGVkIHRoaXMgc2hvdWxkIG1vdmUgdG8gdGhlIHRvb2xraXQgcmVhbGx5LlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHNvdXJjZUJ1aWxkZXJTZXJ2aWNlcygpOiBQcm9taXNlPFRvb2xraXRTZXJ2aWNlcz47XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIENsb3VkIEFzc2VtYmx5IGZyb20gYSBDbG91ZCBBc3NlbWJseSBidWlsZGVyIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gYnVpbGRlciB0aGUgYnVpbGRlciBmdW5jdGlvblxuICAgKiBAcGFyYW0gcHJvcHMgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgdGhlIENsb3VkQXNzZW1ibHkgc291cmNlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZnJvbUFzc2VtYmx5QnVpbGRlcihcbiAgICBidWlsZGVyOiBBc3NlbWJseUJ1aWxkZXIsXG4gICAgcHJvcHM6IEFzc2VtYmx5U291cmNlUHJvcHMgPSB7fSxcbiAgKTogUHJvbWlzZTxJQ2xvdWRBc3NlbWJseVNvdXJjZT4ge1xuICAgIGNvbnN0IHNlcnZpY2VzID0gYXdhaXQgdGhpcy5zb3VyY2VCdWlsZGVyU2VydmljZXMoKTtcbiAgICBjb25zdCBjb250ZXh0ID0gbmV3IENvbnRleHQoeyBiYWc6IG5ldyBTZXR0aW5ncyhwcm9wcy5jb250ZXh0ID8/IHt9KSB9KTtcbiAgICBjb25zdCBjb250ZXh0QXNzZW1ibHlQcm9wczogQ29udGV4dEF3YXJlQ2xvdWRBc3NlbWJseVByb3BzID0ge1xuICAgICAgc2VydmljZXMsXG4gICAgICBjb250ZXh0LFxuICAgICAgbG9va3VwczogcHJvcHMubG9va3VwcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBDb250ZXh0QXdhcmVDbG91ZEFzc2VtYmx5KFxuICAgICAge1xuICAgICAgICBwcm9kdWNlOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgb3V0ZGlyID0gZGV0ZXJtaW5lT3V0cHV0RGlyZWN0b3J5KHByb3BzLm91dGRpcik7XG4gICAgICAgICAgY29uc3QgZW52ID0gYXdhaXQgcHJlcGFyZURlZmF1bHRFbnZpcm9ubWVudChzZXJ2aWNlcywgeyBvdXRkaXIgfSk7XG4gICAgICAgICAgY29uc3QgYXNzZW1ibHkgPSBhd2FpdCBjaGFuZ2VEaXIoYXN5bmMgKCkgPT5cbiAgICAgICAgICAgIHdpdGhDb250ZXh0KGNvbnRleHQuYWxsLCBlbnYsIHByb3BzLnN5bnRoT3B0aW9ucyA/PyB7fSwgYXN5bmMgKGVudldpdGhDb250ZXh0LCBjdHgpID0+XG4gICAgICAgICAgICAgIHdpdGhFbnYoZW52V2l0aENvbnRleHQsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXIoe1xuICAgICAgICAgICAgICAgICAgICBvdXRkaXIsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGN0eCxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgICAgICAgICAgICAvLyByZS10aHJvdyB0b29sa2l0IGVycm9ycyB1bmNoYW5nZWRcbiAgICAgICAgICAgICAgICAgIGlmIChUb29sa2l0RXJyb3IuaXNUb29sa2l0RXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCB3cmFwIGludG8gYW4gYXNzZW1ibHkgZXJyb3JcbiAgICAgICAgICAgICAgICAgIHRocm93IEFzc2VtYmx5RXJyb3Iud2l0aENhdXNlKCdBc3NlbWJseSBidWlsZGVyIGZhaWxlZCcsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKSwgcHJvcHMud29ya2luZ0RpcmVjdG9yeSk7XG5cbiAgICAgICAgICBpZiAoY3hhcGkuQ2xvdWRBc3NlbWJseS5pc0Nsb3VkQXNzZW1ibHkoYXNzZW1ibHkpKSB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZW1ibHk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGFzc2VtYmx5RnJvbURpcmVjdG9yeShhc3NlbWJseS5kaXJlY3RvcnksIHNlcnZpY2VzLmlvSGVscGVyLCBwcm9wcy5sb2FkQXNzZW1ibHlPcHRpb25zKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBjb250ZXh0QXNzZW1ibHlQcm9wcyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDbG91ZCBBc3NlbWJseSBmcm9tIGFuIGV4aXN0aW5nIGFzc2VtYmx5IGRpcmVjdG9yeS5cbiAgICogQHBhcmFtIGRpcmVjdG9yeSB0aGUgZGlyZWN0b3J5IG9mIGEgYWxyZWFkeSBwcm9kdWNlZCBDbG91ZCBBc3NlbWJseS5cbiAgICogQHJldHVybnMgdGhlIENsb3VkQXNzZW1ibHkgc291cmNlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZnJvbUFzc2VtYmx5RGlyZWN0b3J5KGRpcmVjdG9yeTogc3RyaW5nLCBwcm9wczogQXNzZW1ibHlEaXJlY3RvcnlQcm9wcyA9IHt9KTogUHJvbWlzZTxJQ2xvdWRBc3NlbWJseVNvdXJjZT4ge1xuICAgIGNvbnN0IHNlcnZpY2VzOiBUb29sa2l0U2VydmljZXMgPSBhd2FpdCB0aGlzLnNvdXJjZUJ1aWxkZXJTZXJ2aWNlcygpO1xuICAgIGNvbnN0IGNvbnRleHRBc3NlbWJseVByb3BzOiBDb250ZXh0QXdhcmVDbG91ZEFzc2VtYmx5UHJvcHMgPSB7XG4gICAgICBzZXJ2aWNlcyxcbiAgICAgIGNvbnRleHQ6IG5ldyBDb250ZXh0KCksIC8vIEB0b2RvIHRoZXJlIGlzIHByb2JhYmx5IGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGNvbnRleHRhd2FyZSBhbmQgY29udGV4dGxvb2t1cCBzb3VyY2VzXG4gICAgICBsb29rdXBzOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBDb250ZXh0QXdhcmVDbG91ZEFzc2VtYmx5KFxuICAgICAge1xuICAgICAgICBwcm9kdWNlOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgLy8gQHRvZG8gYnVpbGRcbiAgICAgICAgICBhd2FpdCBzZXJ2aWNlcy5pb0hlbHBlci5ub3RpZnkoSU8uQ0RLX0FTU0VNQkxZX0kwMTUwLm1zZygnLS1hcHAgcG9pbnRzIHRvIGEgY2xvdWQgYXNzZW1ibHksIHNvIHdlIGJ5cGFzcyBzeW50aCcpKTtcbiAgICAgICAgICByZXR1cm4gYXNzZW1ibHlGcm9tRGlyZWN0b3J5KGRpcmVjdG9yeSwgc2VydmljZXMuaW9IZWxwZXIsIHByb3BzLmxvYWRBc3NlbWJseU9wdGlvbnMpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGNvbnRleHRBc3NlbWJseVByb3BzLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSBhIGRpcmVjdG9yeSBjb250YWluaW5nIGFuIEFXUyBDREsgYXBwIGFzIHNvdXJjZS5cbiAgICogQHBhcmFtIHByb3BzIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIHRoZSBDbG91ZEFzc2VtYmx5IHNvdXJjZVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZyb21DZGtBcHAoYXBwOiBzdHJpbmcsIHByb3BzOiBBc3NlbWJseVNvdXJjZVByb3BzID0ge30pOiBQcm9taXNlPElDbG91ZEFzc2VtYmx5U291cmNlPiB7XG4gICAgY29uc3Qgc2VydmljZXM6IFRvb2xraXRTZXJ2aWNlcyA9IGF3YWl0IHRoaXMuc291cmNlQnVpbGRlclNlcnZpY2VzKCk7XG4gICAgLy8gQHRvZG8gdGhpcyBkZWZpbml0ZWx5IG5lZWRzIHRvIHJlYWQgZmlsZXMgZnJvbSB0aGUgQ1dEXG4gICAgY29uc3QgY29udGV4dCA9IG5ldyBDb250ZXh0KHsgYmFnOiBuZXcgU2V0dGluZ3MocHJvcHMuY29udGV4dCA/PyB7fSkgfSk7XG4gICAgY29uc3QgY29udGV4dEFzc2VtYmx5UHJvcHM6IENvbnRleHRBd2FyZUNsb3VkQXNzZW1ibHlQcm9wcyA9IHtcbiAgICAgIHNlcnZpY2VzLFxuICAgICAgY29udGV4dCxcbiAgICAgIGxvb2t1cHM6IHByb3BzLmxvb2t1cHMsXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgQ29udGV4dEF3YXJlQ2xvdWRBc3NlbWJseShcbiAgICAgIHtcbiAgICAgICAgcHJvZHVjZTogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGxldCBsb2NrOiBJTG9jayB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gQHRvZG8gYnVpbGRcbiAgICAgICAgICAgIC8vIGNvbnN0IGJ1aWxkID0gdGhpcy5wcm9wcy5jb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ2J1aWxkJ10pO1xuICAgICAgICAgICAgLy8gaWYgKGJ1aWxkKSB7XG4gICAgICAgICAgICAvLyAgIGF3YWl0IGV4ZWNJbkNoaWxkUHJvY2VzcyhidWlsZCwgeyBjd2Q6IHByb3BzLndvcmtpbmdEaXJlY3RvcnkgfSk7XG4gICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRMaW5lID0gYXdhaXQgZ3Vlc3NFeGVjdXRhYmxlKGFwcCk7XG4gICAgICAgICAgICBjb25zdCBvdXRkaXIgPSBwcm9wcy5vdXRkaXIgPz8gJ2Nkay5vdXQnO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBmcy5ta2RpcnBTeW5jKG91dGRpcik7XG4gICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgQ291bGQgbm90IGNyZWF0ZSBvdXRwdXQgZGlyZWN0b3J5IGF0ICcke291dGRpcn0nICgke2UubWVzc2FnZX0pLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsb2NrID0gYXdhaXQgbmV3IFJXTG9jayhvdXRkaXIpLmFjcXVpcmVXcml0ZSgpO1xuXG4gICAgICAgICAgICBjb25zdCBlbnYgPSBhd2FpdCBwcmVwYXJlRGVmYXVsdEVudmlyb25tZW50KHNlcnZpY2VzLCB7IG91dGRpciB9KTtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB3aXRoQ29udGV4dChjb250ZXh0LmFsbCwgZW52LCBwcm9wcy5zeW50aE9wdGlvbnMsIGFzeW5jIChlbnZXaXRoQ29udGV4dCwgX2N0eCkgPT4ge1xuICAgICAgICAgICAgICBhd2FpdCBleGVjSW5DaGlsZFByb2Nlc3MoY29tbWFuZExpbmUuam9pbignICcpLCB7XG4gICAgICAgICAgICAgICAgZXZlbnRQdWJsaXNoZXI6IGFzeW5jICh0eXBlLCBsaW5lKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGF0YV9zdGRvdXQnOlxuICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHNlcnZpY2VzLmlvSGVscGVyLm5vdGlmeShJTy5DREtfQVNTRU1CTFlfSTEwMDEubXNnKGxpbmUpKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGF0YV9zdGRlcnInOlxuICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHNlcnZpY2VzLmlvSGVscGVyLm5vdGlmeShJTy5DREtfQVNTRU1CTFlfRTEwMDIubXNnKGxpbmUpKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGV4dHJhRW52OiBlbnZXaXRoQ29udGV4dCxcbiAgICAgICAgICAgICAgICBjd2Q6IHByb3BzLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gYXNzZW1ibHlGcm9tRGlyZWN0b3J5KG91dGRpciwgc2VydmljZXMuaW9IZWxwZXIsIHByb3BzLmxvYWRBc3NlbWJseU9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGF3YWl0IGxvY2s/LnJlbGVhc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgY29udGV4dEFzc2VtYmx5UHJvcHMsXG4gICAgKTtcbiAgfVxufVxuXG4iXX0=
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzb3VyY2UtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBeUM7QUFDekMsK0JBQStCO0FBRy9CLGlFQUFtRTtBQUNuRSxpQ0FBNEM7QUFDNUMscURBQStFO0FBRy9FLDJDQUEwRDtBQUMxRCw4Q0FBc0M7QUFDdEMsdURBQWtFO0FBR2xFLE1BQXNCLDBCQUEwQjtJQU85Qzs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBQyxtQkFBbUIsQ0FDOUIsT0FBd0IsRUFDeEIsUUFBNkIsRUFBRTtRQUUvQixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3BELE1BQU0sT0FBTyxHQUFHLElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLGtCQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEUsTUFBTSxvQkFBb0IsR0FBbUM7WUFDM0QsUUFBUTtZQUNSLE9BQU87WUFDUCxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87U0FDdkIsQ0FBQztRQUVGLE9BQU8sSUFBSSxnREFBeUIsQ0FDbEM7WUFDRSxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ2xCLE1BQU0sU0FBUyxHQUFHLElBQUkscUNBQW9CLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRSxNQUFNLEdBQUcsR0FBRyxNQUFNLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQ3BELFNBQVMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUM5RixTQUFTLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7b0JBQ3JDLElBQUksQ0FBQzt3QkFDSCxPQUFPLE9BQU8sQ0FBQzs0QkFDYixNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU07NEJBQ3hCLE9BQU8sRUFBRSxHQUFHO3lCQUNiLENBQUMsQ0FBQztvQkFDTCxDQUFDO29CQUFDLE9BQU8sS0FBYyxFQUFFLENBQUM7d0JBQ3hCLG9DQUFvQzt3QkFDcEMsSUFBSSw0QkFBWSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDOzRCQUN2QyxNQUFNLEtBQUssQ0FBQzt3QkFDZCxDQUFDO3dCQUNELHlDQUF5Qzt3QkFDekMsTUFBTSw2QkFBYSxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDbEUsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FDSCxFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUU3QixJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7b0JBQ2xELE9BQU8sUUFBUSxDQUFDO2dCQUNsQixDQUFDO2dCQUVELE9BQU8sSUFBQSxzQ0FBcUIsRUFBQyxRQUFRLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDakcsQ0FBQztTQUNGLEVBQ0Qsb0JBQW9CLENBQ3JCLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxTQUFpQixFQUFFLFFBQWdDLEVBQUU7UUFDdEYsTUFBTSxRQUFRLEdBQW9CLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDckUsTUFBTSxvQkFBb0IsR0FBbUM7WUFDM0QsUUFBUTtZQUNSLE9BQU8sRUFBRSxJQUFJLGlCQUFPLEVBQUUsRUFBRSxzRkFBc0Y7WUFDOUcsT0FBTyxFQUFFLEtBQUs7U0FDZixDQUFDO1FBRUYsT0FBTyxJQUFJLGdEQUF5QixDQUNsQztZQUNFLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDbEIsY0FBYztnQkFDZCxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsc0RBQXNELENBQUMsQ0FBQyxDQUFDO2dCQUNsSCxPQUFPLElBQUEsc0NBQXFCLEVBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDeEYsQ0FBQztTQUNGLEVBQ0Qsb0JBQW9CLENBQ3JCLENBQUM7SUFDSixDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBVyxFQUFFLFFBQTZCLEVBQUU7UUFDbEUsTUFBTSxRQUFRLEdBQW9CLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDckUseURBQXlEO1FBQ3pELE1BQU0sT0FBTyxHQUFHLElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLGtCQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEUsTUFBTSxvQkFBb0IsR0FBbUM7WUFDM0QsUUFBUTtZQUNSLE9BQU87WUFDUCxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87U0FDdkIsQ0FBQztRQUVGLE9BQU8sSUFBSSxnREFBeUIsQ0FDbEM7WUFDRSxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ2xCLElBQUksSUFBSSxHQUFzQixTQUFTLENBQUM7Z0JBQ3hDLElBQUksQ0FBQztvQkFDSCxjQUFjO29CQUNkLGtFQUFrRTtvQkFDbEUsZUFBZTtvQkFDZixzRUFBc0U7b0JBQ3RFLElBQUk7b0JBRUosTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUM7b0JBQ3pDLElBQUksQ0FBQzt3QkFDSCxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN4QixDQUFDO29CQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7d0JBQ2hCLE1BQU0sSUFBSSw0QkFBWSxDQUFDLHlDQUF5QyxNQUFNLE1BQU0sQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7b0JBQzdGLENBQUM7b0JBRUQsSUFBSSxHQUFHLE1BQU0sSUFBSSxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUUvQyxNQUFNLFNBQVMsR0FBRyxJQUFJLHFDQUFvQixDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7b0JBQ2pFLE1BQU0sV0FBVyxHQUFHLE1BQU0sU0FBUyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDekQsTUFBTSxHQUFHLEdBQUcsTUFBTSxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQzdDLE9BQU8sTUFBTSxTQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsRUFBRTt3QkFDdEcsTUFBTSxJQUFBLHlCQUFrQixFQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7NEJBQzlDLGNBQWMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO2dDQUNuQyxRQUFRLElBQUksRUFBRSxDQUFDO29DQUNiLEtBQUssYUFBYTt3Q0FDaEIsTUFBTSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFFLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7d0NBQ2hFLE1BQU07b0NBQ1IsS0FBSyxhQUFhO3dDQUNoQixNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt3Q0FDaEUsTUFBTTtnQ0FDVixDQUFDOzRCQUNILENBQUM7NEJBQ0QsUUFBUSxFQUFFLGNBQWM7NEJBQ3hCLEdBQUcsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO3lCQUM1QixDQUFDLENBQUM7d0JBQ0gsT0FBTyxJQUFBLHNDQUFxQixFQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO29CQUNyRixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO3dCQUFTLENBQUM7b0JBQ1QsTUFBTSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQ3hCLENBQUM7WUFDSCxDQUFDO1NBQ0YsRUFDRCxvQkFBb0IsQ0FDckIsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQW5KRCxnRUFtSkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHR5cGUgeyBBc3NlbWJseURpcmVjdG9yeVByb3BzLCBBc3NlbWJseVNvdXJjZVByb3BzLCBJQ2xvdWRBc3NlbWJseVNvdXJjZSB9IGZyb20gJy4uLyc7XG5pbXBvcnQgdHlwZSB7IENvbnRleHRBd2FyZUNsb3VkQXNzZW1ibHlQcm9wcyB9IGZyb20gJy4vY29udGV4dC1hd2FyZS1zb3VyY2UnO1xuaW1wb3J0IHsgQ29udGV4dEF3YXJlQ2xvdWRBc3NlbWJseSB9IGZyb20gJy4vY29udGV4dC1hd2FyZS1zb3VyY2UnO1xuaW1wb3J0IHsgZXhlY0luQ2hpbGRQcm9jZXNzIH0gZnJvbSAnLi9leGVjJztcbmltcG9ydCB7IEV4ZWN1dGlvbkVudmlyb25tZW50LCBhc3NlbWJseUZyb21EaXJlY3RvcnkgfSBmcm9tICcuL3ByZXBhcmUtc291cmNlJztcbmltcG9ydCB0eXBlIHsgVG9vbGtpdFNlcnZpY2VzIH0gZnJvbSAnLi4vLi4vLi4vdG9vbGtpdC9wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgSUxvY2sgfSBmcm9tICcuLi8uLi9hd3MtY2RrJztcbmltcG9ydCB7IENvbnRleHQsIFJXTG9jaywgU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9hd3MtY2RrJztcbmltcG9ydCB7IElPIH0gZnJvbSAnLi4vLi4vaW8vcHJpdmF0ZSc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IsIEFzc2VtYmx5RXJyb3IgfSBmcm9tICcuLi8uLi9zaGFyZWQtcHVibGljJztcbmltcG9ydCB0eXBlIHsgQXNzZW1ibHlCdWlsZGVyIH0gZnJvbSAnLi4vc291cmNlLWJ1aWxkZXInO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ2xvdWRBc3NlbWJseVNvdXJjZUJ1aWxkZXIge1xuICAvKipcbiAgICogSGVscGVyIHRvIHByb3ZpZGUgdGhlIENsb3VkQXNzZW1ibHlTb3VyY2VCdWlsZGVyIHdpdGggcmVxdWlyZWQgdG9vbGtpdCBzZXJ2aWNlc1xuICAgKiBAZGVwcmVjYXRlZCB0aGlzIHNob3VsZCBtb3ZlIHRvIHRoZSB0b29sa2l0IHJlYWxseS5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBzb3VyY2VCdWlsZGVyU2VydmljZXMoKTogUHJvbWlzZTxUb29sa2l0U2VydmljZXM+O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBDbG91ZCBBc3NlbWJseSBmcm9tIGEgQ2xvdWQgQXNzZW1ibHkgYnVpbGRlciBmdW5jdGlvbi5cbiAgICogQHBhcmFtIGJ1aWxkZXIgdGhlIGJ1aWxkZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHByb3BzIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIHRoZSBDbG91ZEFzc2VtYmx5IHNvdXJjZVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZyb21Bc3NlbWJseUJ1aWxkZXIoXG4gICAgYnVpbGRlcjogQXNzZW1ibHlCdWlsZGVyLFxuICAgIHByb3BzOiBBc3NlbWJseVNvdXJjZVByb3BzID0ge30sXG4gICk6IFByb21pc2U8SUNsb3VkQXNzZW1ibHlTb3VyY2U+IHtcbiAgICBjb25zdCBzZXJ2aWNlcyA9IGF3YWl0IHRoaXMuc291cmNlQnVpbGRlclNlcnZpY2VzKCk7XG4gICAgY29uc3QgY29udGV4dCA9IG5ldyBDb250ZXh0KHsgYmFnOiBuZXcgU2V0dGluZ3MocHJvcHMuY29udGV4dCA/PyB7fSkgfSk7XG4gICAgY29uc3QgY29udGV4dEFzc2VtYmx5UHJvcHM6IENvbnRleHRBd2FyZUNsb3VkQXNzZW1ibHlQcm9wcyA9IHtcbiAgICAgIHNlcnZpY2VzLFxuICAgICAgY29udGV4dCxcbiAgICAgIGxvb2t1cHM6IHByb3BzLmxvb2t1cHMsXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgQ29udGV4dEF3YXJlQ2xvdWRBc3NlbWJseShcbiAgICAgIHtcbiAgICAgICAgcHJvZHVjZTogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV4ZWN1dGlvbiA9IG5ldyBFeGVjdXRpb25FbnZpcm9ubWVudChzZXJ2aWNlcywgeyBvdXRkaXI6IHByb3BzLm91dGRpciB9KTtcbiAgICAgICAgICBjb25zdCBlbnYgPSBhd2FpdCBleGVjdXRpb24uZGVmYXVsdEVudlZhcnMoKTtcbiAgICAgICAgICBjb25zdCBhc3NlbWJseSA9IGF3YWl0IGV4ZWN1dGlvbi5jaGFuZ2VEaXIoYXN5bmMgKCkgPT5cbiAgICAgICAgICAgIGV4ZWN1dGlvbi53aXRoQ29udGV4dChjb250ZXh0LmFsbCwgZW52LCBwcm9wcy5zeW50aE9wdGlvbnMgPz8ge30sIGFzeW5jIChlbnZXaXRoQ29udGV4dCwgY3R4KSA9PlxuICAgICAgICAgICAgICBleGVjdXRpb24ud2l0aEVudihlbnZXaXRoQ29udGV4dCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYnVpbGRlcih7XG4gICAgICAgICAgICAgICAgICAgIG91dGRpcjogZXhlY3V0aW9uLm91dGRpcixcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogY3R4LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgICAgICAgICAgIC8vIHJlLXRocm93IHRvb2xraXQgZXJyb3JzIHVuY2hhbmdlZFxuICAgICAgICAgICAgICAgICAgaWYgKFRvb2xraXRFcnJvci5pc1Rvb2xraXRFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UsIHdyYXAgaW50byBhbiBhc3NlbWJseSBlcnJvclxuICAgICAgICAgICAgICAgICAgdGhyb3cgQXNzZW1ibHlFcnJvci53aXRoQ2F1c2UoJ0Fzc2VtYmx5IGJ1aWxkZXIgZmFpbGVkJywgZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApLCBwcm9wcy53b3JraW5nRGlyZWN0b3J5KTtcblxuICAgICAgICAgIGlmIChjeGFwaS5DbG91ZEFzc2VtYmx5LmlzQ2xvdWRBc3NlbWJseShhc3NlbWJseSkpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3NlbWJseTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYXNzZW1ibHlGcm9tRGlyZWN0b3J5KGFzc2VtYmx5LmRpcmVjdG9yeSwgc2VydmljZXMuaW9IZWxwZXIsIHByb3BzLmxvYWRBc3NlbWJseU9wdGlvbnMpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGNvbnRleHRBc3NlbWJseVByb3BzLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIENsb3VkIEFzc2VtYmx5IGZyb20gYW4gZXhpc3RpbmcgYXNzZW1ibHkgZGlyZWN0b3J5LlxuICAgKiBAcGFyYW0gZGlyZWN0b3J5IHRoZSBkaXJlY3Rvcnkgb2YgYSBhbHJlYWR5IHByb2R1Y2VkIENsb3VkIEFzc2VtYmx5LlxuICAgKiBAcmV0dXJucyB0aGUgQ2xvdWRBc3NlbWJseSBzb3VyY2VcbiAgICovXG4gIHB1YmxpYyBhc3luYyBmcm9tQXNzZW1ibHlEaXJlY3RvcnkoZGlyZWN0b3J5OiBzdHJpbmcsIHByb3BzOiBBc3NlbWJseURpcmVjdG9yeVByb3BzID0ge30pOiBQcm9taXNlPElDbG91ZEFzc2VtYmx5U291cmNlPiB7XG4gICAgY29uc3Qgc2VydmljZXM6IFRvb2xraXRTZXJ2aWNlcyA9IGF3YWl0IHRoaXMuc291cmNlQnVpbGRlclNlcnZpY2VzKCk7XG4gICAgY29uc3QgY29udGV4dEFzc2VtYmx5UHJvcHM6IENvbnRleHRBd2FyZUNsb3VkQXNzZW1ibHlQcm9wcyA9IHtcbiAgICAgIHNlcnZpY2VzLFxuICAgICAgY29udGV4dDogbmV3IENvbnRleHQoKSwgLy8gQHRvZG8gdGhlcmUgaXMgcHJvYmFibHkgYSBkaWZmZXJlbmNlIGJldHdlZW4gY29udGV4dGF3YXJlIGFuZCBjb250ZXh0bG9va3VwIHNvdXJjZXNcbiAgICAgIGxvb2t1cHM6IGZhbHNlLFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IENvbnRleHRBd2FyZUNsb3VkQXNzZW1ibHkoXG4gICAgICB7XG4gICAgICAgIHByb2R1Y2U6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAvLyBAdG9kbyBidWlsZFxuICAgICAgICAgIGF3YWl0IHNlcnZpY2VzLmlvSGVscGVyLm5vdGlmeShJTy5DREtfQVNTRU1CTFlfSTAxNTAubXNnKCctLWFwcCBwb2ludHMgdG8gYSBjbG91ZCBhc3NlbWJseSwgc28gd2UgYnlwYXNzIHN5bnRoJykpO1xuICAgICAgICAgIHJldHVybiBhc3NlbWJseUZyb21EaXJlY3RvcnkoZGlyZWN0b3J5LCBzZXJ2aWNlcy5pb0hlbHBlciwgcHJvcHMubG9hZEFzc2VtYmx5T3B0aW9ucyk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgY29udGV4dEFzc2VtYmx5UHJvcHMsXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogVXNlIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYW4gQVdTIENESyBhcHAgYXMgc291cmNlLlxuICAgKiBAcGFyYW0gcHJvcHMgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgdGhlIENsb3VkQXNzZW1ibHkgc291cmNlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZnJvbUNka0FwcChhcHA6IHN0cmluZywgcHJvcHM6IEFzc2VtYmx5U291cmNlUHJvcHMgPSB7fSk6IFByb21pc2U8SUNsb3VkQXNzZW1ibHlTb3VyY2U+IHtcbiAgICBjb25zdCBzZXJ2aWNlczogVG9vbGtpdFNlcnZpY2VzID0gYXdhaXQgdGhpcy5zb3VyY2VCdWlsZGVyU2VydmljZXMoKTtcbiAgICAvLyBAdG9kbyB0aGlzIGRlZmluaXRlbHkgbmVlZHMgdG8gcmVhZCBmaWxlcyBmcm9tIHRoZSBDV0RcbiAgICBjb25zdCBjb250ZXh0ID0gbmV3IENvbnRleHQoeyBiYWc6IG5ldyBTZXR0aW5ncyhwcm9wcy5jb250ZXh0ID8/IHt9KSB9KTtcbiAgICBjb25zdCBjb250ZXh0QXNzZW1ibHlQcm9wczogQ29udGV4dEF3YXJlQ2xvdWRBc3NlbWJseVByb3BzID0ge1xuICAgICAgc2VydmljZXMsXG4gICAgICBjb250ZXh0LFxuICAgICAgbG9va3VwczogcHJvcHMubG9va3VwcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBDb250ZXh0QXdhcmVDbG91ZEFzc2VtYmx5KFxuICAgICAge1xuICAgICAgICBwcm9kdWNlOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgbGV0IGxvY2s6IElMb2NrIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBAdG9kbyBidWlsZFxuICAgICAgICAgICAgLy8gY29uc3QgYnVpbGQgPSB0aGlzLnByb3BzLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnYnVpbGQnXSk7XG4gICAgICAgICAgICAvLyBpZiAoYnVpbGQpIHtcbiAgICAgICAgICAgIC8vICAgYXdhaXQgZXhlY0luQ2hpbGRQcm9jZXNzKGJ1aWxkLCB7IGN3ZDogcHJvcHMud29ya2luZ0RpcmVjdG9yeSB9KTtcbiAgICAgICAgICAgIC8vIH1cblxuICAgICAgICAgICAgY29uc3Qgb3V0ZGlyID0gcHJvcHMub3V0ZGlyID8/ICdjZGsub3V0JztcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGZzLm1rZGlycFN5bmMob3V0ZGlyKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBDb3VsZCBub3QgY3JlYXRlIG91dHB1dCBkaXJlY3RvcnkgYXQgJyR7b3V0ZGlyfScgKCR7ZS5tZXNzYWdlfSkuYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxvY2sgPSBhd2FpdCBuZXcgUldMb2NrKG91dGRpcikuYWNxdWlyZVdyaXRlKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGV4ZWN1dGlvbiA9IG5ldyBFeGVjdXRpb25FbnZpcm9ubWVudChzZXJ2aWNlcywgeyBvdXRkaXIgfSk7XG4gICAgICAgICAgICBjb25zdCBjb21tYW5kTGluZSA9IGF3YWl0IGV4ZWN1dGlvbi5ndWVzc0V4ZWN1dGFibGUoYXBwKTtcbiAgICAgICAgICAgIGNvbnN0IGVudiA9IGF3YWl0IGV4ZWN1dGlvbi5kZWZhdWx0RW52VmFycygpO1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGV4ZWN1dGlvbi53aXRoQ29udGV4dChjb250ZXh0LmFsbCwgZW52LCBwcm9wcy5zeW50aE9wdGlvbnMsIGFzeW5jIChlbnZXaXRoQ29udGV4dCwgX2N0eCkgPT4ge1xuICAgICAgICAgICAgICBhd2FpdCBleGVjSW5DaGlsZFByb2Nlc3MoY29tbWFuZExpbmUuam9pbignICcpLCB7XG4gICAgICAgICAgICAgICAgZXZlbnRQdWJsaXNoZXI6IGFzeW5jICh0eXBlLCBsaW5lKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGF0YV9zdGRvdXQnOlxuICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHNlcnZpY2VzLmlvSGVscGVyLm5vdGlmeShJTy5DREtfQVNTRU1CTFlfSTEwMDEubXNnKGxpbmUpKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGF0YV9zdGRlcnInOlxuICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHNlcnZpY2VzLmlvSGVscGVyLm5vdGlmeShJTy5DREtfQVNTRU1CTFlfRTEwMDIubXNnKGxpbmUpKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGV4dHJhRW52OiBlbnZXaXRoQ29udGV4dCxcbiAgICAgICAgICAgICAgICBjd2Q6IHByb3BzLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gYXNzZW1ibHlGcm9tRGlyZWN0b3J5KG91dGRpciwgc2VydmljZXMuaW9IZWxwZXIsIHByb3BzLmxvYWRBc3NlbWJseU9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGF3YWl0IGxvY2s/LnJlbGVhc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgY29udGV4dEFzc2VtYmx5UHJvcHMsXG4gICAgKTtcbiAgfVxufVxuXG4iXX0=
@@ -12,7 +12,7 @@ export declare class StackAssembly extends CloudAssembly implements ICloudAssemb
12
12
  * @throws when the assembly does not contain any stacks, unless `selector.failOnEmpty` is `false`
13
13
  * @throws when individual selection strategies are not satisfied
14
14
  */
15
- selectStacksV2(selector: StackSelector): StackCollection;
15
+ selectStacksV2(selector: StackSelector): Promise<StackCollection>;
16
16
  /**
17
17
  * Select all stacks.
18
18
  *
@@ -17,7 +17,7 @@ class StackAssembly extends aws_cdk_1.CloudAssembly {
17
17
  * @throws when the assembly does not contain any stacks, unless `selector.failOnEmpty` is `false`
18
18
  * @throws when individual selection strategies are not satisfied
19
19
  */
20
- selectStacksV2(selector) {
20
+ async selectStacksV2(selector) {
21
21
  const asm = this.assembly;
22
22
  const topLevelStacks = asm.stacks;
23
23
  const allStacks = (0, semver_1.major)(asm.version) < 10 ? asm.stacks : asm.stacksRecursively;
@@ -43,7 +43,7 @@ class StackAssembly extends aws_cdk_1.CloudAssembly {
43
43
  }
44
44
  return new aws_cdk_1.StackCollection(this, topLevelStacks);
45
45
  default:
46
- const matched = this.selectMatchingStacks(allStacks, patterns, extend);
46
+ const matched = await this.selectMatchingStacks(allStacks, patterns, extend);
47
47
  if (selector.strategy === stack_selector_1.StackSelectionStrategy.PATTERN_MUST_MATCH_SINGLE
48
48
  && matched.stackCount !== 1) {
49
49
  // @todo text should probably be handled in io host
@@ -91,4 +91,4 @@ function expandToExtendEnum(extend) {
91
91
  return undefined;
92
92
  }
93
93
  }
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stYXNzZW1ibHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdGFjay1hc3NlbWJseS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxtQ0FBK0I7QUFDL0IsMkNBQXNJO0FBQ3RJLHVEQUFtRDtBQUVuRCxzREFBaUY7QUFHakY7O0dBRUc7QUFDSCxNQUFhLGFBQWMsU0FBUSx1QkFBYTtJQUN2QyxLQUFLLENBQUMsT0FBTztRQUNsQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxjQUFjLENBQUMsUUFBdUI7UUFDM0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUMxQixNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLElBQUEsY0FBSyxFQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQztRQUUvRSxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzdELE1BQU0sSUFBSSw0QkFBWSxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRCxNQUFNLFFBQVEsR0FBRyxJQUFBLDBCQUFnQixFQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7UUFFM0QsUUFBUSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUIsS0FBSyx1Q0FBc0IsQ0FBQyxVQUFVO2dCQUNwQyxPQUFPLElBQUkseUJBQWUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENB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LE9BQU8sZ0NBQXlCLENBQUMsSUFBSSxDQUFDO1FBQ3hDO1lBQ0UsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgeyBtYWpvciB9IGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgeyBDbG91ZEFzc2VtYmx5LCBzYW5pdGl6ZVBhdHRlcm5zLCBTdGFja0NvbGxlY3Rpb24sIEV4dGVuZGVkU3RhY2tTZWxlY3Rpb24gYXMgQ2xpRXh0ZW5kZWRTdGFja1NlbGVjdGlvbiB9IGZyb20gJy4uLy4uL2F3cy1jZGsnO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vc2hhcmVkLXB1YmxpYyc7XG5pbXBvcnQgdHlwZSB7IFN0YWNrU2VsZWN0b3IgfSBmcm9tICcuLi9zdGFjay1zZWxlY3Rvcic7XG5pbXBvcnQgeyBFeHBhbmRTdGFja1NlbGVjdGlvbiwgU3RhY2tTZWxlY3Rpb25TdHJhdGVneSB9IGZyb20gJy4uL3N0YWNrLXNlbGVjdG9yJztcbmltcG9ydCB0eXBlIHsgSUNsb3VkQXNzZW1ibHlTb3VyY2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogQSBzaW5nbGUgQ2xvdWQgQXNzZW1ibHkgd3JhcHBlZCB0byBwcm92aWRlIGFkZGl0aW9uYWwgc3RhY2sgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIFN0YWNrQXNzZW1ibHkgZXh0ZW5kcyBDbG91ZEFzc2VtYmx5IGltcGxlbWVudHMgSUNsb3VkQXNzZW1ibHlTb3VyY2Uge1xuICBwdWJsaWMgYXN5bmMgcHJvZHVjZSgpOiBQcm9taXNlPGN4YXBpLkNsb3VkQXNzZW1ibHk+IHtcbiAgICByZXR1cm4gdGhpcy5hc3NlbWJseTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXByb3ZlZCBzdGFjayBzZWxlY3Rpb24gaW50ZXJmYWNlIHdpdGggYSBzaW5nbGUgc2VsZWN0b3JcbiAgICogQHRocm93cyB3aGVuIHRoZSBhc3NlbWJseSBkb2VzIG5vdCBjb250YWluIGFueSBzdGFja3MsIHVubGVzcyBgc2VsZWN0b3IuZmFpbE9uRW1wdHlgIGlzIGBmYWxzZWBcbiAgICogQHRocm93cyB3aGVuIGluZGl2aWR1YWwgc2VsZWN0aW9uIHN0cmF0ZWdpZXMgYXJlIG5vdCBzYXRpc2ZpZWRcbiAgICovXG4gIHB1YmxpYyBzZWxlY3RTdGFja3NWMihzZWxlY3RvcjogU3RhY2tTZWxlY3Rvcik6IFN0YWNrQ29sbGVjdGlvbiB7XG4gICAgY29uc3QgYXNtID0gdGhpcy5hc3NlbWJseTtcbiAgICBjb25zdCB0b3BMZXZlbFN0YWNrcyA9IGFzbS5zdGFja3M7XG4gICAgY29uc3QgYWxsU3RhY2tzID0gbWFqb3IoYXNtLnZlcnNpb24pIDwgMTAgPyBhc20uc3RhY2tzIDogYXNtLnN0YWNrc1JlY3Vyc2l2ZWx5O1xuXG4gICAgaWYgKGFsbFN0YWNrcy5sZW5ndGggPT09IDAgJiYgKHNlbGVjdG9yLmZhaWxPbkVtcHR5ID8/IHRydWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdUaGlzIGFwcCBjb250YWlucyBubyBzdGFja3MnKTtcbiAgICB9XG5cbiAgICBjb25zdCBleHRlbmQgPSBleHBhbmRUb0V4dGVuZEVudW0oc2VsZWN0b3IuZXhwYW5kKTtcbiAgICBjb25zdCBwYXR0ZXJucyA9IHNhbml0aXplUGF0dGVybnMoc2VsZWN0b3IucGF0dGVybnMgPz8gW10pO1xuXG4gICAgc3dpdGNoIChzZWxlY3Rvci5zdHJhdGVneSkge1xuICAgICAgY2FzZSBTdGFja1NlbGVjdGlvblN0cmF0ZWd5LkFMTF9TVEFDS1M6XG4gICAgICAgIHJldHVybiBuZXcgU3RhY2tDb2xsZWN0aW9uKHRoaXMsIGFsbFN0YWNrcyk7XG4gICAgICBjYXNlIFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3kuTUFJTl9BU1NFTUJMWTpcbiAgICAgICAgaWYgKHRvcExldmVsU3RhY2tzLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAvLyBAdG9kbyB0ZXh0IHNob3VsZCBwcm9iYWJseSBiZSBoYW5kbGVkIGluIGlvIGhvc3RcbiAgICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdObyBzdGFjayBmb3VuZCBpbiB0aGUgbWFpbiBjbG91ZCBhc3NlbWJseS4gVXNlIFwibGlzdFwiIHRvIHByaW50IG1hbmlmZXN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5kU3RhY2tzKHRvcExldmVsU3RhY2tzLCBhbGxTdGFja3MsIGV4dGVuZCk7XG4gICAgICBjYXNlIFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3kuT05MWV9TSU5HTEU6XG4gICAgICAgIGlmICh0b3BMZXZlbFN0YWNrcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAvLyBAdG9kbyB0ZXh0IHNob3VsZCBwcm9iYWJseSBiZSBoYW5kbGVkIGluIGlvIGhvc3RcbiAgICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdTaW5jZSB0aGlzIGFwcCBpbmNsdWRlcyBtb3JlIHRoYW4gYSBzaW5nbGUgc3RhY2ssIHNwZWNpZnkgd2hpY2ggc3RhY2tzIHRvIHVzZSAod2lsZGNhcmRzIGFyZSBzdXBwb3J0ZWQpIG9yIHNwZWNpZnkgYC0tYWxsYFxcbicgK1xuICAgICAgICAgIGBTdGFja3M6ICR7YWxsU3RhY2tzLm1hcCh4ID0+IHguaGllcmFyY2hpY2FsSWQpLmpvaW4oJyDCtyAnKX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFN0YWNrQ29sbGVjdGlvbih0aGlzLCB0b3BMZXZlbFN0YWNrcyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zdCBtYXRjaGVkID0gdGhpcy5zZWxlY3RNYXRjaGluZ1N0YWNrcyhhbGxTdGFja3MsIHBhdHRlcm5zLCBleHRlbmQpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgc2VsZWN0b3Iuc3RyYXRlZ3kgPT09IFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3kuUEFUVEVSTl9NVVNUX01BVENIX1NJTkdMRVxuICAgICAgICAgICYmIG1hdGNoZWQuc3RhY2tDb3VudCAhPT0gMVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBAdG9kbyB0ZXh0IHNob3VsZCBwcm9iYWJseSBiZSBoYW5kbGVkIGluIGlvIGhvc3RcbiAgICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgICAgICAgYFN0YWNrIHNlbGVjdGlvbiBpcyBhbWJpZ3VvdXMsIHBsZWFzZSBjaG9vc2UgYSBzcGVjaWZpYyBzdGFjayBmb3IgaW1wb3J0IFske2FsbFN0YWNrcy5tYXAoeCA9PiB4LmhpZXJhcmNoaWNhbElkKS5qb2luKCcsJyl9XWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgc2VsZWN0b3Iuc3RyYXRlZ3kgPT09IFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3kuUEFUVEVSTl9NVVNUX01BVENIXG4gICAgICAgICAgJiYgbWF0Y2hlZC5zdGFja0NvdW50IDwgMVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBAdG9kbyB0ZXh0IHNob3VsZCBwcm9iYWJseSBiZSBoYW5kbGVkIGluIGlvIGhvc3RcbiAgICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgICAgICAgYFN0YWNrIHNlbGVjdGlvbiBpcyBhbWJpZ3VvdXMsIHBsZWFzZSBjaG9vc2UgYSBzcGVjaWZpYyBzdGFjayBmb3IgaW1wb3J0IFske2FsbFN0YWNrcy5tYXAoeCA9PiB4LmhpZXJhcmNoaWNhbElkKS5qb2luKCcsJyl9XWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtYXRjaGVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgYWxsIHN0YWNrcy5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgbmV2ZXIgdGhyb3dzIGFuZCBjYW4gc2FmZWx5IGJlIHVzZWQgYXMgYSBiYXNpcyBmb3Igb3RoZXIgY2FsY3VsYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyBhIGBTdGFja0NvbGxlY3Rpb25gIG9mIGFsbCBzdGFja3NcbiAgICovXG4gIHB1YmxpYyBzZWxlY3RBbGxTdGFja3MoKSB7XG4gICAgY29uc3QgYWxsU3RhY2tzID0gbWFqb3IodGhpcy5hc3NlbWJseS52ZXJzaW9uKSA8IDEwID8gdGhpcy5hc3NlbWJseS5zdGFja3MgOiB0aGlzLmFzc2VtYmx5LnN0YWNrc1JlY3Vyc2l2ZWx5O1xuICAgIHJldHVybiBuZXcgU3RhY2tDb2xsZWN0aW9uKHRoaXMsIGFsbFN0YWNrcyk7XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0IGFsbCBzdGFja3MgdGhhdCBoYXZlIHRoZSB2YWxpZGF0ZU9uU3ludGggZmxhZyBldC5cbiAgICpcbiAgICogQHJldHVybnMgYSBgU3RhY2tDb2xsZWN0aW9uYCBvZiBhbGwgc3RhY2tzIHRoYXQgbmVlZHMgdG8gYmUgdmFsaWRhdGVkXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0U3RhY2tzRm9yVmFsaWRhdGlvbigpIHtcbiAgICBjb25zdCBhbGxTdGFja3MgPSB0aGlzLnNlbGVjdEFsbFN0YWNrcygpO1xuICAgIHJldHVybiBhbGxTdGFja3MuZmlsdGVyKChhcnQpID0+IGFydC52YWxpZGF0ZU9uU3ludGggPz8gZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGV4cGFuZFRvRXh0ZW5kRW51bShleHRlbmQ/OiBFeHBhbmRTdGFja1NlbGVjdGlvbik6IENsaUV4dGVuZGVkU3RhY2tTZWxlY3Rpb24gfCB1bmRlZmluZWQge1xuICBzd2l0Y2ggKGV4dGVuZCkge1xuICAgIGNhc2UgRXhwYW5kU3RhY2tTZWxlY3Rpb24uRE9XTlNUUkVBTTpcbiAgICAgIHJldHVybiBDbGlFeHRlbmRlZFN0YWNrU2VsZWN0aW9uLkRvd25zdHJlYW07XG4gICAgY2FzZSBFeHBhbmRTdGFja1NlbGVjdGlvbi5VUFNUUkVBTTpcbiAgICAgIHJldHVybiBDbGlFeHRlbmRlZFN0YWNrU2VsZWN0aW9uLlVwc3RyZWFtO1xuICAgIGNhc2UgRXhwYW5kU3RhY2tTZWxlY3Rpb24uTk9ORTpcbiAgICAgIHJldHVybiBDbGlFeHRlbmRlZFN0YWNrU2VsZWN0aW9uLk5vbmU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stYXNzZW1ibHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdGFjay1hc3NlbWJseS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxtQ0FBK0I7QUFDL0IsMkNBQXNJO0FBQ3RJLHVEQUFtRDtBQUVuRCxzREFBaUY7QUFHakY7O0dBRUc7QUFDSCxNQUFhLGFBQWMsU0FBUSx1QkFBYTtJQUN2QyxLQUFLLENBQUMsT0FBTztRQUNsQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsY0FBYyxDQUFDLFFBQXVCO1FBQ2pELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDMUIsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUNsQyxNQUFNLFNBQVMsR0FBRyxJQUFBLGNBQUssRUFBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUM7UUFFL0UsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM3RCxNQUFNLElBQUksNEJBQVksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkQsTUFBTSxRQUFRLEdBQUcsSUFBQSwwQkFBZ0IsRUFBQyxRQUFRLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTNELFFBQVEsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzFCLEtBQUssdUNBQXNCLENBQUMsVUFBVTtnQkFDcEMsT0FBTyxJQUFJLHlCQUFlLENBQUMsSUFBSSxFQUFFLFNB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Q0FBQyxJQUFJO1lBQzVCLE9BQU8sZ0NBQXlCLENBQUMsSUFBSSxDQUFDO1FBQ3hDO1lBQ0UsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgeyBtYWpvciB9IGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgeyBDbG91ZEFzc2VtYmx5LCBzYW5pdGl6ZVBhdHRlcm5zLCBTdGFja0NvbGxlY3Rpb24sIEV4dGVuZGVkU3RhY2tTZWxlY3Rpb24gYXMgQ2xpRXh0ZW5kZWRTdGFja1NlbGVjdGlvbiB9IGZyb20gJy4uLy4uL2F3cy1jZGsnO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vc2hhcmVkLXB1YmxpYyc7XG5pbXBvcnQgdHlwZSB7IFN0YWNrU2VsZWN0b3IgfSBmcm9tICcuLi9zdGFjay1zZWxlY3Rvcic7XG5pbXBvcnQgeyBFeHBhbmRTdGFja1NlbGVjdGlvbiwgU3RhY2tTZWxlY3Rpb25TdHJhdGVneSB9IGZyb20gJy4uL3N0YWNrLXNlbGVjdG9yJztcbmltcG9ydCB0eXBlIHsgSUNsb3VkQXNzZW1ibHlTb3VyY2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogQSBzaW5nbGUgQ2xvdWQgQXNzZW1ibHkgd3JhcHBlZCB0byBwcm92aWRlIGFkZGl0aW9uYWwgc3RhY2sgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIFN0YWNrQXNzZW1ibHkgZXh0ZW5kcyBDbG91ZEFzc2VtYmx5IGltcGxlbWVudHMgSUNsb3VkQXNzZW1ibHlTb3VyY2Uge1xuICBwdWJsaWMgYXN5bmMgcHJvZHVjZSgpOiBQcm9taXNlPGN4YXBpLkNsb3VkQXNzZW1ibHk+IHtcbiAgICByZXR1cm4gdGhpcy5hc3NlbWJseTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXByb3ZlZCBzdGFjayBzZWxlY3Rpb24gaW50ZXJmYWNlIHdpdGggYSBzaW5nbGUgc2VsZWN0b3JcbiAgICogQHRocm93cyB3aGVuIHRoZSBhc3NlbWJseSBkb2VzIG5vdCBjb250YWluIGFueSBzdGFja3MsIHVubGVzcyBgc2VsZWN0b3IuZmFpbE9uRW1wdHlgIGlzIGBmYWxzZWBcbiAgICogQHRocm93cyB3aGVuIGluZGl2aWR1YWwgc2VsZWN0aW9uIHN0cmF0ZWdpZXMgYXJlIG5vdCBzYXRpc2ZpZWRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZWxlY3RTdGFja3NWMihzZWxlY3RvcjogU3RhY2tTZWxlY3Rvcik6IFByb21pc2U8U3RhY2tDb2xsZWN0aW9uPiB7XG4gICAgY29uc3QgYXNtID0gdGhpcy5hc3NlbWJseTtcbiAgICBjb25zdCB0b3BMZXZlbFN0YWNrcyA9IGFzbS5zdGFja3M7XG4gICAgY29uc3QgYWxsU3RhY2tzID0gbWFqb3IoYXNtLnZlcnNpb24pIDwgMTAgPyBhc20uc3RhY2tzIDogYXNtLnN0YWNrc1JlY3Vyc2l2ZWx5O1xuXG4gICAgaWYgKGFsbFN0YWNrcy5sZW5ndGggPT09IDAgJiYgKHNlbGVjdG9yLmZhaWxPbkVtcHR5ID8/IHRydWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdUaGlzIGFwcCBjb250YWlucyBubyBzdGFja3MnKTtcbiAgICB9XG5cbiAgICBjb25zdCBleHRlbmQgPSBleHBhbmRUb0V4dGVuZEVudW0oc2VsZWN0b3IuZXhwYW5kKTtcbiAgICBjb25zdCBwYXR0ZXJucyA9IHNhbml0aXplUGF0dGVybnMoc2VsZWN0b3IucGF0dGVybnMgPz8gW10pO1xuXG4gICAgc3dpdGNoIChzZWxlY3Rvci5zdHJhdGVneSkge1xuICAgICAgY2FzZSBTdGFja1NlbGVjdGlvblN0cmF0ZWd5LkFMTF9TVEFDS1M6XG4gICAgICAgIHJldHVybiBuZXcgU3RhY2tDb2xsZWN0aW9uKHRoaXMsIGFsbFN0YWNrcyk7XG4gICAgICBjYXNlIFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3kuTUFJTl9BU1NFTUJMWTpcbiAgICAgICAgaWYgKHRvcExldmVsU3RhY2tzLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAvLyBAdG9kbyB0ZXh0IHNob3VsZCBwcm9iYWJseSBiZSBoYW5kbGVkIGluIGlvIGhvc3RcbiAgICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdObyBzdGFjayBmb3VuZCBpbiB0aGUgbWFpbiBjbG91ZCBhc3NlbWJseS4gVXNlIFwibGlzdFwiIHRvIHByaW50IG1hbmlmZXN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5kU3RhY2tzKHRvcExldmVsU3RhY2tzLCBhbGxTdGFja3MsIGV4dGVuZCk7XG4gICAgICBjYXNlIFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3kuT05MWV9TSU5HTEU6XG4gICAgICAgIGlmICh0b3BMZXZlbFN0YWNrcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAvLyBAdG9kbyB0ZXh0IHNob3VsZCBwcm9iYWJseSBiZSBoYW5kbGVkIGluIGlvIGhvc3RcbiAgICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdTaW5jZSB0aGlzIGFwcCBpbmNsdWRlcyBtb3JlIHRoYW4gYSBzaW5nbGUgc3RhY2ssIHNwZWNpZnkgd2hpY2ggc3RhY2tzIHRvIHVzZSAod2lsZGNhcmRzIGFyZSBzdXBwb3J0ZWQpIG9yIHNwZWNpZnkgYC0tYWxsYFxcbicgK1xuICAgICAgICAgIGBTdGFja3M6ICR7YWxsU3RhY2tzLm1hcCh4ID0+IHguaGllcmFyY2hpY2FsSWQpLmpvaW4oJyDCtyAnKX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFN0YWNrQ29sbGVjdGlvbih0aGlzLCB0b3BMZXZlbFN0YWNrcyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zdCBtYXRjaGVkID0gYXdhaXQgdGhpcy5zZWxlY3RNYXRjaGluZ1N0YWNrcyhhbGxTdGFja3MsIHBhdHRlcm5zLCBleHRlbmQpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgc2VsZWN0b3Iuc3RyYXRlZ3kgPT09IFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3kuUEFUVEVSTl9NVVNUX01BVENIX1NJTkdMRVxuICAgICAgICAgICYmIG1hdGNoZWQuc3RhY2tDb3VudCAhPT0gMVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBAdG9kbyB0ZXh0IHNob3VsZCBwcm9iYWJseSBiZSBoYW5kbGVkIGluIGlvIGhvc3RcbiAgICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgICAgICAgYFN0YWNrIHNlbGVjdGlvbiBpcyBhbWJpZ3VvdXMsIHBsZWFzZSBjaG9vc2UgYSBzcGVjaWZpYyBzdGFjayBmb3IgaW1wb3J0IFske2FsbFN0YWNrcy5tYXAoeCA9PiB4LmhpZXJhcmNoaWNhbElkKS5qb2luKCcsJyl9XWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgc2VsZWN0b3Iuc3RyYXRlZ3kgPT09IFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3kuUEFUVEVSTl9NVVNUX01BVENIXG4gICAgICAgICAgJiYgbWF0Y2hlZC5zdGFja0NvdW50IDwgMVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBAdG9kbyB0ZXh0IHNob3VsZCBwcm9iYWJseSBiZSBoYW5kbGVkIGluIGlvIGhvc3RcbiAgICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgICAgICAgYFN0YWNrIHNlbGVjdGlvbiBpcyBhbWJpZ3VvdXMsIHBsZWFzZSBjaG9vc2UgYSBzcGVjaWZpYyBzdGFjayBmb3IgaW1wb3J0IFske2FsbFN0YWNrcy5tYXAoeCA9PiB4LmhpZXJhcmNoaWNhbElkKS5qb2luKCcsJyl9XWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtYXRjaGVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgYWxsIHN0YWNrcy5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgbmV2ZXIgdGhyb3dzIGFuZCBjYW4gc2FmZWx5IGJlIHVzZWQgYXMgYSBiYXNpcyBmb3Igb3RoZXIgY2FsY3VsYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyBhIGBTdGFja0NvbGxlY3Rpb25gIG9mIGFsbCBzdGFja3NcbiAgICovXG4gIHB1YmxpYyBzZWxlY3RBbGxTdGFja3MoKSB7XG4gICAgY29uc3QgYWxsU3RhY2tzID0gbWFqb3IodGhpcy5hc3NlbWJseS52ZXJzaW9uKSA8IDEwID8gdGhpcy5hc3NlbWJseS5zdGFja3MgOiB0aGlzLmFzc2VtYmx5LnN0YWNrc1JlY3Vyc2l2ZWx5O1xuICAgIHJldHVybiBuZXcgU3RhY2tDb2xsZWN0aW9uKHRoaXMsIGFsbFN0YWNrcyk7XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0IGFsbCBzdGFja3MgdGhhdCBoYXZlIHRoZSB2YWxpZGF0ZU9uU3ludGggZmxhZyBldC5cbiAgICpcbiAgICogQHJldHVybnMgYSBgU3RhY2tDb2xsZWN0aW9uYCBvZiBhbGwgc3RhY2tzIHRoYXQgbmVlZHMgdG8gYmUgdmFsaWRhdGVkXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0U3RhY2tzRm9yVmFsaWRhdGlvbigpIHtcbiAgICBjb25zdCBhbGxTdGFja3MgPSB0aGlzLnNlbGVjdEFsbFN0YWNrcygpO1xuICAgIHJldHVybiBhbGxTdGFja3MuZmlsdGVyKChhcnQpID0+IGFydC52YWxpZGF0ZU9uU3ludGggPz8gZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGV4cGFuZFRvRXh0ZW5kRW51bShleHRlbmQ/OiBFeHBhbmRTdGFja1NlbGVjdGlvbik6IENsaUV4dGVuZGVkU3RhY2tTZWxlY3Rpb24gfCB1bmRlZmluZWQge1xuICBzd2l0Y2ggKGV4dGVuZCkge1xuICAgIGNhc2UgRXhwYW5kU3RhY2tTZWxlY3Rpb24uRE9XTlNUUkVBTTpcbiAgICAgIHJldHVybiBDbGlFeHRlbmRlZFN0YWNrU2VsZWN0aW9uLkRvd25zdHJlYW07XG4gICAgY2FzZSBFeHBhbmRTdGFja1NlbGVjdGlvbi5VUFNUUkVBTTpcbiAgICAgIHJldHVybiBDbGlFeHRlbmRlZFN0YWNrU2VsZWN0aW9uLlVwc3RyZWFtO1xuICAgIGNhc2UgRXhwYW5kU3RhY2tTZWxlY3Rpb24uTk9ORTpcbiAgICAgIHJldHVybiBDbGlFeHRlbmRlZFN0YWNrU2VsZWN0aW9uLk5vbmU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==