aws-cdk 2.177.0 → 2.178.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.
Files changed (42) hide show
  1. package/THIRD_PARTY_LICENSES +5518 -181
  2. package/build-info.json +2 -2
  3. package/db.json.gz +0 -0
  4. package/lib/api/aws-auth/sdk-logger.d.ts +4 -0
  5. package/lib/api/aws-auth/sdk-logger.js +18 -7
  6. package/lib/api/aws-auth/sdk-provider.js +4 -3
  7. package/lib/api/aws-auth/sdk.d.ts +1 -0
  8. package/lib/api/aws-auth/sdk.js +4 -3
  9. package/lib/api/aws-auth/tracing.d.ts +11 -0
  10. package/lib/api/aws-auth/tracing.js +60 -0
  11. package/lib/api/deployments/asset-publishing.js +7 -1
  12. package/lib/cli/cdk-toolkit.d.ts +6 -0
  13. package/lib/cli/cdk-toolkit.js +11 -10
  14. package/lib/cli/cli.js +10 -5
  15. package/lib/cli/parse-command-line-arguments.js +11 -15
  16. package/lib/cli/user-input.d.ts +4 -4
  17. package/lib/cli/user-input.js +1 -1
  18. package/lib/commands/context.js +2 -2
  19. package/lib/index.js +204 -158
  20. package/lib/index_bg.wasm +0 -0
  21. package/lib/init-templates/.init-version.json +1 -1
  22. package/lib/init-templates/.recommended-feature-flags.json +2 -1
  23. package/lib/legacy-exports-source.d.ts +1 -1
  24. package/lib/legacy-exports-source.js +3 -3
  25. package/lib/logging.d.ts +6 -13
  26. package/lib/logging.js +25 -70
  27. package/lib/toolkit/cli-io-host.d.ts +16 -12
  28. package/lib/toolkit/cli-io-host.js +127 -30
  29. package/package.json +10 -10
  30. package/test/_helpers/prompts.d.ts +11 -0
  31. package/test/_helpers/prompts.js +22 -0
  32. package/test/api/aws-auth/sdk-logger.test.js +13 -11
  33. package/test/api/logs/logging.test.js +4 -54
  34. package/test/cli/cdk-toolkit.test.js +7 -7
  35. package/test/cli/cli-arguments.test.js +4 -4
  36. package/test/cli/cli.test.js +2 -2
  37. package/test/cli/user-config.test.js +28 -1
  38. package/test/toolkit/cli-io-host-corked.test.d.ts +1 -0
  39. package/test/toolkit/cli-io-host-corked.test.js +73 -0
  40. package/test/toolkit/cli-io-host.test.js +164 -60
  41. package/lib/util/tracing.d.ts +0 -9
  42. package/lib/util/tracing.js +0 -58
@@ -2,13 +2,17 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CliIoHost = exports.levelPriority = void 0;
4
4
  exports.isCI = isCI;
5
+ const util = require("node:util");
5
6
  const chalk = require("chalk");
7
+ const promptly = require("promptly");
8
+ const error_1 = require("./error");
6
9
  exports.levelPriority = {
7
10
  error: 0,
8
- warn: 1,
9
- info: 2,
10
- debug: 3,
11
- trace: 4,
11
+ result: 1,
12
+ warn: 2,
13
+ info: 3,
14
+ debug: 4,
15
+ trace: 5,
12
16
  };
13
17
  /**
14
18
  * A simple IO host for the CLI that writes messages to the console.
@@ -24,6 +28,9 @@ class CliIoHost {
24
28
  return CliIoHost._instance;
25
29
  }
26
30
  constructor(props = {}) {
31
+ // Corked Logging
32
+ this.corkedCounter = 0;
33
+ this.corkedLoggingBuffer = [];
27
34
  this._currentAction = props.currentAction ?? 'none';
28
35
  this._isTTY = props.isTTY ?? process.stdout.isTTY ?? false;
29
36
  this._logLevel = props.logLevel ?? 'info';
@@ -91,6 +98,31 @@ class CliIoHost {
91
98
  set logLevel(level) {
92
99
  this._logLevel = level;
93
100
  }
101
+ /**
102
+ * Executes a block of code with corked logging. All log messages during execution
103
+ * are buffered and only written when all nested cork blocks complete (when CORK_COUNTER reaches 0).
104
+ * The corking is bound to the specific instance of the CliIoHost.
105
+ *
106
+ * @param block - Async function to execute with corked logging
107
+ * @returns Promise that resolves with the block's return value
108
+ */
109
+ async withCorkedLogging(block) {
110
+ this.corkedCounter++;
111
+ try {
112
+ return await block();
113
+ }
114
+ finally {
115
+ this.corkedCounter--;
116
+ if (this.corkedCounter === 0) {
117
+ // Process each buffered message through notify
118
+ for (const ioMessage of this.corkedLoggingBuffer) {
119
+ await this.notify(ioMessage);
120
+ }
121
+ // remove all buffered messages in-place
122
+ this.corkedLoggingBuffer.splice(0);
123
+ }
124
+ }
125
+ }
94
126
  /**
95
127
  * Notifies the host of a message.
96
128
  * The caller waits until the notification completes.
@@ -102,34 +134,33 @@ class CliIoHost {
102
134
  if (exports.levelPriority[msg.level] > exports.levelPriority[this.logLevel]) {
103
135
  return;
104
136
  }
137
+ if (this.corkedCounter > 0) {
138
+ this.corkedLoggingBuffer.push(msg);
139
+ return;
140
+ }
105
141
  const output = this.formatMessage(msg);
106
- const stream = this.stream(msg.level, msg.forceStdout ?? false);
107
- return new Promise((resolve, reject) => {
108
- stream.write(output, (err) => {
109
- if (err) {
110
- reject(err);
111
- }
112
- else {
113
- resolve();
114
- }
115
- });
116
- });
142
+ const stream = this.selectStream(msg.level);
143
+ stream.write(output);
117
144
  }
118
145
  /**
119
- * Determines which output stream to use based on log level and configuration.
146
+ * Determines the output stream, based on message level and configuration.
120
147
  */
121
- stream(level, forceStdout) {
122
- // For legacy purposes all log streams are written to stderr by default, unless
123
- // specified otherwise, by passing `forceStdout`, which is used by the `data()` logging function, or
124
- // if the CDK is running in a CI environment. This is because some CI environments will immediately
125
- // fail if stderr is written to. In these cases, we detect if we are in a CI environment and
126
- // write all messages to stdout instead.
127
- if (forceStdout) {
128
- return process.stdout;
148
+ selectStream(level) {
149
+ // The stream selection policy for the CLI is the following:
150
+ //
151
+ // (1) Messages of level `result` always go to `stdout`
152
+ // (2) Messages of level `error` always go to `stderr`.
153
+ // (3a) All remaining messages go to `stderr`.
154
+ // (3b) If we are in CI mode, all remaining messages go to `stdout`.
155
+ //
156
+ switch (level) {
157
+ case 'error':
158
+ return process.stderr;
159
+ case 'result':
160
+ return process.stdout;
161
+ default:
162
+ return this.isCI ? process.stdout : process.stderr;
129
163
  }
130
- if (level == 'error')
131
- return process.stderr;
132
- return CliIoHost.instance().isCI ? process.stdout : process.stderr;
133
164
  }
134
165
  /**
135
166
  * Notifies the host of a message that requires a response.
@@ -138,11 +169,49 @@ class CliIoHost {
138
169
  * default response from the input message will be used.
139
170
  */
140
171
  async requestResponse(msg) {
172
+ // First call out to a registered instance if we have one
141
173
  if (this._internalIoHost) {
142
174
  return this._internalIoHost.requestResponse(msg);
143
175
  }
144
- await this.notify(msg);
145
- return msg.defaultResponse;
176
+ // If the request cannot be prompted for by the CliIoHost, we just accept the default
177
+ if (!isPromptableRequest(msg)) {
178
+ await this.notify(msg);
179
+ return msg.defaultResponse;
180
+ }
181
+ const response = await this.withCorkedLogging(async () => {
182
+ // prepare prompt data
183
+ // @todo this format is not defined anywhere, probably should be
184
+ const data = msg.data ?? {};
185
+ const motivation = data.motivation ?? 'User input is needed';
186
+ const concurrency = data.concurrency ?? 0;
187
+ // only talk to user if STDIN is a terminal (otherwise, fail)
188
+ if (!this.isTTY) {
189
+ throw new error_1.ToolkitError(`${motivation}, but terminal (TTY) is not attached so we are unable to get a confirmation from the user`);
190
+ }
191
+ // only talk to user if concurrency is 1 (otherwise, fail)
192
+ if (concurrency > 1) {
193
+ throw new error_1.ToolkitError(`${motivation}, but concurrency is greater than 1 so we are unable to get a confirmation from the user`);
194
+ }
195
+ // Basic confirmation prompt
196
+ // We treat all requests with a boolean response as confirmation prompts
197
+ if (isConfirmationPrompt(msg)) {
198
+ const confirmed = await promptly.confirm(`${chalk.cyan(msg.message)} (y/n)`);
199
+ if (!confirmed) {
200
+ throw new error_1.ToolkitError('Aborted by user');
201
+ }
202
+ return confirmed;
203
+ }
204
+ // Asking for a specific value
205
+ const prompt = extractPromptInfo(msg);
206
+ const answer = await promptly.prompt(`${chalk.cyan(msg.message)} (${prompt.default})`, {
207
+ default: prompt.default,
208
+ });
209
+ return prompt.convertAnswer(answer);
210
+ });
211
+ // We need to cast this because it is impossible to narrow the generic type
212
+ // isPromptableRequest ensures that the response type is one we can prompt for
213
+ // the remaining code ensure we are indeed returning the correct type
214
+ return response;
146
215
  }
147
216
  /**
148
217
  * Formats a message for console output with optional color support
@@ -166,9 +235,37 @@ class CliIoHost {
166
235
  }
167
236
  }
168
237
  exports.CliIoHost = CliIoHost;
238
+ /**
239
+ * This IoHost implementation considers a request promptable, if:
240
+ * - it's a yes/no confirmation
241
+ * - asking for a string or number value
242
+ */
243
+ function isPromptableRequest(msg) {
244
+ return isConfirmationPrompt(msg)
245
+ || typeof msg.defaultResponse === 'string'
246
+ || typeof msg.defaultResponse === 'number';
247
+ }
248
+ /**
249
+ * Check if the request is a confirmation prompt
250
+ * We treat all requests with a boolean response as confirmation prompts
251
+ */
252
+ function isConfirmationPrompt(msg) {
253
+ return typeof msg.defaultResponse === 'boolean';
254
+ }
255
+ /**
256
+ * Helper to extract information for promptly from the request
257
+ */
258
+ function extractPromptInfo(msg) {
259
+ const isNumber = (typeof msg.defaultResponse === 'number');
260
+ return {
261
+ default: util.format(msg.defaultResponse),
262
+ convertAnswer: isNumber ? (v) => Number(v) : (v) => String(v),
263
+ };
264
+ }
169
265
  const styleMap = {
170
266
  error: chalk.red,
171
267
  warn: chalk.yellow,
268
+ result: chalk.white,
172
269
  info: chalk.white,
173
270
  debug: chalk.gray,
174
271
  trace: chalk.gray,
@@ -180,4 +277,4 @@ const styleMap = {
180
277
  function isCI() {
181
278
  return process.env.CI !== undefined && process.env.CI !== 'false' && process.env.CI !== '0';
182
279
  }
183
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLWlvLWhvc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbGktaW8taG9zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFtV0Esb0JBRUM7QUFyV0QsK0JBQStCO0FBeUVsQixRQUFBLGFBQWEsR0FBbUM7SUFDM0QsS0FBSyxFQUFFLENBQUM7SUFDUixJQUFJLEVBQUUsQ0FBQztJQUNQLElBQUksRUFBRSxDQUFDO0lBQ1AsS0FBSyxFQUFFLENBQUM7SUFDUixLQUFLLEVBQUUsQ0FBQztDQUNULENBQUM7QUErRUY7O0dBRUc7QUFDSCxNQUFhLFNBQVM7SUFDcEI7O09BRUc7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQXdCLEVBQUUsRUFBRSxRQUFRLEdBQUcsS0FBSztRQUMxRCxJQUFJLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNyQyxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQWFELFlBQW9CLFFBQXdCLEVBQUU7UUFDNUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsYUFBYSxJQUFJLE1BQXVCLENBQUM7UUFDckUsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztRQUMzRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDO1FBQzFDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxjQUFjLENBQUMsTUFBZTtRQUNuQyxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsZUFB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Q0FBQyxNQUFNO0lBQ2xCLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSztJQUNqQixLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUk7SUFDakIsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJO0NBQ2xCLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxTQUFnQixJQUFJO0lBQ2xCLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUM7QUFDOUYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcblxuZXhwb3J0IHR5cGUgSW9NZXNzYWdlQ29kZUNhdGVnb3J5ID0gJ1RPT0xLSVQnIHwgJ1NESycgfCAnQVNTRVRTJztcbmV4cG9ydCB0eXBlIElvQ29kZUxldmVsID0gJ0UnIHwgJ1cnIHwgJ0knO1xuZXhwb3J0IHR5cGUgSW9NZXNzYWdlU3BlY2lmaWNDb2RlPEwgZXh0ZW5kcyBJb0NvZGVMZXZlbD4gPSBgQ0RLXyR7SW9NZXNzYWdlQ29kZUNhdGVnb3J5fV8ke0x9JHtudW1iZXJ9JHtudW1iZXJ9JHtudW1iZXJ9JHtudW1iZXJ9YDtcbmV4cG9ydCB0eXBlIElvTWVzc2FnZUNvZGUgPSBJb01lc3NhZ2VTcGVjaWZpY0NvZGU8SW9Db2RlTGV2ZWw+O1xuXG4vKipcbiAqIEJhc2ljIG1lc3NhZ2Ugc3RydWN0dXJlIGZvciB0b29sa2l0IG5vdGlmaWNhdGlvbnMuXG4gKiBNZXNzYWdlcyBhcmUgZW1pdHRlZCBieSB0aGUgdG9vbGtpdCBhbmQgaGFuZGxlZCBieSB0aGUgSW9Ib3N0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElvTWVzc2FnZTxUPiB7XG4gIC8qKlxuICAgKiBUaGUgdGltZSB0aGUgbWVzc2FnZSB3YXMgZW1pdHRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHRpbWU6IERhdGU7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2cgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UuXG4gICAqL1xuICByZWFkb25seSBsZXZlbDogSW9NZXNzYWdlTGV2ZWw7XG5cbiAgLyoqXG4gICAqIFRoZSBhY3Rpb24gdGhhdCB0cmlnZ2VyZWQgdGhlIG1lc3NhZ2UuXG4gICAqL1xuICByZWFkb25seSBhY3Rpb246IFRvb2xraXRBY3Rpb247XG5cbiAgLyoqXG4gICAqIEEgc2hvcnQgbWVzc2FnZSBjb2RlIHVuaXF1ZWx5IGlkZW50aWZ5aW5nIGEgbWVzc2FnZSB0eXBlIHVzaW5nIHRoZSBmb3JtYXQgQ0RLX1tDQVRFR09SWV1fW0UvVy9JXVswMDAtOTk5XS5cbiAgICpcbiAgICogVGhlIGxldmVsIGluZGljYXRvciBmb2xsb3dzIHRoZXNlIHJ1bGVzOlxuICAgKiAtICdFJyBmb3IgZXJyb3IgbGV2ZWwgbWVzc2FnZXNcbiAgICogLSAnVycgZm9yIHdhcm5pbmcgbGV2ZWwgbWVzc2FnZXNcbiAgICogLSAnSScgZm9yIGluZm8vZGVidWcvdHJhY2UgbGV2ZWwgbWVzc2FnZXNcbiAgICpcbiAgICogQ29kZXMgZW5kaW5nIGluIDAwMCBhcmUgZ2VuZXJpYyBtZXNzYWdlcywgd2hpbGUgY29kZXMgZW5kaW5nIGluIDAwMS05OTkgYXJlIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciBtZXNzYWdlLlxuICAgKiBUaGUgZm9sbG93aW5nIGFyZSBleGFtcGxlcyBvZiB2YWxpZCBhbmQgaW52YWxpZCBtZXNzYWdlIGNvZGVzOlxuICAgKiBgYGB0c1xuICAgKiAnQ0RLX0FTU0VUU19JMDAwJyAgICAgICAvLyB2YWxpZDogZ2VuZXJpYyBhc3NldHMgaW5mbyBtZXNzYWdlXG4gICAqICdDREtfVE9PTEtJVF9FMDAyJyAgICAgIC8vIHZhbGlkOiBzcGVjaWZpYyB0b29sa2l0IGVycm9yIG1lc3NhZ2VcbiAgICogJ0NES19TREtfVzAyMycgICAgICAgICAgLy8gdmFsaWQ6IHNwZWNpZmljIHNkayB3YXJuaW5nIG1lc3NhZ2VcbiAgICogYGBgXG4gICAqL1xuICByZWFkb25seSBjb2RlOiBJb01lc3NhZ2VDb2RlO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSB0ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCB0aGUgbWVzc2FnZSB3aWxsIGJlIHdyaXR0ZW4gdG8gc3Rkb3V0XG4gICAqIHJlZ2FyZGxlc3Mgb2YgYW55IG90aGVyIHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBmb3JjZVN0ZG91dD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIGF0dGFjaGVkIHRvIHRoZSBtZXNzYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YT86IFQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW9SZXF1ZXN0PFQsIFU+IGV4dGVuZHMgSW9NZXNzYWdlPFQ+IHtcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHJlc3BvbnNlIHRoYXQgd2lsbCBiZSB1c2VkIGlmIG5vIGRhdGEgaXMgcmV0dXJuZWQuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0UmVzcG9uc2U6IFU7XG59XG5cbmV4cG9ydCB0eXBlIElvTWVzc2FnZUxldmVsID0gJ2Vycm9yJyB8ICd3YXJuJyB8ICdpbmZvJyB8ICdkZWJ1ZycgfCAndHJhY2UnO1xuXG5leHBvcnQgY29uc3QgbGV2ZWxQcmlvcml0eTogUmVjb3JkPElvTWVzc2FnZUxldmVsLCBudW1iZXI+ID0ge1xuICBlcnJvcjogMCxcbiAgd2FybjogMSxcbiAgaW5mbzogMixcbiAgZGVidWc6IDMsXG4gIHRyYWNlOiA0LFxufTtcblxuLyoqXG4gKiBUaGUgY3VycmVudCBhY3Rpb24gYmVpbmcgcGVyZm9ybWVkIGJ5IHRoZSBDTEkuICdub25lJyByZXByZXNlbnRzIHRoZSBhYnNlbmNlIG9mIGFuIGFjdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgVG9vbGtpdEFjdGlvbiA9XG58ICdib290c3RyYXAnXG58ICdzeW50aCdcbnwgJ2xpc3QnXG58ICdkaWZmJ1xufCAnZGVwbG95J1xufCAncm9sbGJhY2snXG58ICd3YXRjaCdcbnwgJ2Rlc3Ryb3knXG58ICdjb250ZXh0J1xufCAnZG9jcydcbnwgJ2RvY3RvcidcbnwgJ2djJ1xufCAnaW1wb3J0J1xufCAnbWV0YWRhdGEnXG58ICdub3RpY2VzJ1xufCAnaW5pdCdcbnwgJ21pZ3JhdGUnXG58ICd2ZXJzaW9uJztcblxuZXhwb3J0IGludGVyZmFjZSBJSW9Ib3N0IHtcbiAgLyoqXG4gICAqIE5vdGlmaWVzIHRoZSBob3N0IG9mIGEgbWVzc2FnZS5cbiAgICogVGhlIGNhbGxlciB3YWl0cyB1bnRpbCB0aGUgbm90aWZpY2F0aW9uIGNvbXBsZXRlcy5cbiAgICovXG4gIG5vdGlmeTxUPihtc2c6IElvTWVzc2FnZTxUPik6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIE5vdGlmaWVzIHRoZSBob3N0IG9mIGEgbWVzc2FnZSB0aGF0IHJlcXVpcmVzIGEgcmVzcG9uc2UuXG4gICAqXG4gICAqIElmIHRoZSBob3N0IGRvZXMgbm90IHJldHVybiBhIHJlc3BvbnNlIHRoZSBzdWdnZXN0ZWRcbiAgICogZGVmYXVsdCByZXNwb25zZSBmcm9tIHRoZSBpbnB1dCBtZXNzYWdlIHdpbGwgYmUgdXNlZC5cbiAgICovXG4gIHJlcXVlc3RSZXNwb25zZTxULCBVPihtc2c6IElvUmVxdWVzdDxULCBVPik6IFByb21pc2U8VT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpSW9Ib3N0UHJvcHMge1xuICAvKipcbiAgICogVGhlIGluaXRpYWwgVG9vbGtpdCBhY3Rpb24gdGhlIGhvc3RzIHN0YXJ0cyB3aXRoLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICovXG4gIHJlYWRvbmx5IGN1cnJlbnRBY3Rpb24/OiBUb29sa2l0QWN0aW9uO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSB2ZXJib3NpdHkgb2YgdGhlIG91dHB1dC5cbiAgICpcbiAgICogVGhlIENsaUlvSG9zdCB3aWxsIHN0aWxsIHJlY2VpdmUgYWxsIG1lc3NhZ2VzIGFuZCByZXF1ZXN0cyxcbiAgICogYnV0IG9ubHkgdGhlIG1lc3NhZ2VzIGluY2x1ZGVkIGluIHRoaXMgbGV2ZWwgd2lsbCBiZSBwcmludGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnaW5mbydcbiAgICovXG4gIHJlYWRvbmx5IGxvZ0xldmVsPzogSW9NZXNzYWdlTGV2ZWw7XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlcyB0aGUgYXV0b21hdGljIFRUWSBkZXRlY3Rpb24uXG4gICAqXG4gICAqIFdoZW4gVFRZIGlzIGRpc2FibGVkLCB0aGUgQ0xJIHdpbGwgaGF2ZSBubyBpbnRlcmFjdGlvbnMgb3IgY29sb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGV0ZXJtaW5lZCBmcm9tIHRoZSBjdXJyZW50IHByb2Nlc3NcbiAgICovXG4gIHJlYWRvbmx5IGlzVFRZPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgQ2xpSW9Ib3N0IGlzIHJ1bm5pbmcgaW4gQ0kgbW9kZS5cbiAgICpcbiAgICogSW4gQ0kgbW9kZSwgYWxsIG5vbi1lcnJvciBvdXRwdXQgZ29lcyB0byBzdGRvdXQgaW5zdGVhZCBvZiBzdGRlcnIuXG4gICAqIFNldCB0byBmYWxzZSBpbiB0aGUgQ2xpSW9Ib3N0IGNvbnN0cnVjdG9yIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gaWYgdGhlIENMSSBDSSBhcmd1bWVudCBpcyBwYXNzZWRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZXRlcm1pbmVkIGZyb20gdGhlIGVudmlyb25tZW50LCBzcGVjaWZpY2FsbHkgYmFzZWQgb24gYHByb2Nlc3MuZW52LkNJYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNDST86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBzaW1wbGUgSU8gaG9zdCBmb3IgdGhlIENMSSB0aGF0IHdyaXRlcyBtZXNzYWdlcyB0byB0aGUgY29uc29sZS5cbiAqL1xuZXhwb3J0IGNsYXNzIENsaUlvSG9zdCBpbXBsZW1lbnRzIElJb0hvc3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgaW5zdGFuY2UocHJvcHM6IENsaUlvSG9zdFByb3BzID0ge30sIGZvcmNlTmV3ID0gZmFsc2UpOiBDbGlJb0hvc3Qge1xuICAgIGlmIChmb3JjZU5ldyB8fCAhQ2xpSW9Ib3N0Ll9pbnN0YW5jZSkge1xuICAgICAgQ2xpSW9Ib3N0Ll9pbnN0YW5jZSA9IG5ldyBDbGlJb0hvc3QocHJvcHMpO1xuICAgIH1cbiAgICByZXR1cm4gQ2xpSW9Ib3N0Ll9pbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIENsaUlvSG9zdFxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBDbGlJb0hvc3QgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBfY3VycmVudEFjdGlvbjogVG9vbGtpdEFjdGlvbjtcbiAgcHJpdmF0ZSBfaXNDSTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfaXNUVFk6IGJvb2xlYW47XG4gIHByaXZhdGUgX2xvZ0xldmVsOiBJb01lc3NhZ2VMZXZlbDtcbiAgcHJpdmF0ZSBfaW50ZXJuYWxJb0hvc3Q/OiBJSW9Ib3N0O1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHJvcHM6IENsaUlvSG9zdFByb3BzID0ge30pIHtcbiAgICB0aGlzLl9jdXJyZW50QWN0aW9uID0gcHJvcHMuY3VycmVudEFjdGlvbiA/PyAnbm9uZScgYXMgVG9vbGtpdEFjdGlvbjtcbiAgICB0aGlzLl9pc1RUWSA9IHByb3BzLmlzVFRZID8/IHByb2Nlc3Muc3Rkb3V0LmlzVFRZID8/IGZhbHNlO1xuICAgIHRoaXMuX2xvZ0xldmVsID0gcHJvcHMubG9nTGV2ZWwgPz8gJ2luZm8nO1xuICAgIHRoaXMuX2lzQ0kgPSBwcm9wcy5pc0NJID8/IGlzQ0koKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2VcbiAgICovXG4gIHB1YmxpYyByZWdpc3RlcklvSG9zdChpb0hvc3Q6IElJb0hvc3QpIHtcbiAgICBpZiAoaW9Ib3N0ICE9PSB0aGlzKSB7XG4gICAgICB0aGlzLl9pbnRlcm5hbElvSG9zdCA9IGlvSG9zdDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgYWN0aW9uIGJlaW5nIHBlcmZvcm1lZCBieSB0aGUgQ0xJLlxuICAgKi9cbiAgcHVibGljIGdldCBjdXJyZW50QWN0aW9uKCk6IFRvb2xraXRBY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50QWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGN1cnJlbnQgYWN0aW9uIGJlaW5nIHBlcmZvcm1lZCBieSB0aGUgQ0xJLlxuICAgKlxuICAgKiBAcGFyYW0gYWN0aW9uIFRoZSBhY3Rpb24gYmVpbmcgcGVyZm9ybWVkIGJ5IHRoZSBDTEkuXG4gICAqL1xuICBwdWJsaWMgc2V0IGN1cnJlbnRBY3Rpb24oYWN0aW9uOiBUb29sa2l0QWN0aW9uKSB7XG4gICAgdGhpcy5fY3VycmVudEFjdGlvbiA9IGFjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBob3N0IGNhbiB1c2UgaW50ZXJhY3Rpb25zIGFuZCBtZXNzYWdlIHN0eWxpbmcuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzVFRZKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1RUWTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgVFRZIG1vZGUsIGkuZSBjYW4gdGhlIGhvc3QgdXNlIGludGVyYWN0aW9ucyBhbmQgbWVzc2FnZSBzdHlsaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgc2V0IFRUWSBtb2RlXG4gICAqL1xuICBwdWJsaWMgc2V0IGlzVFRZKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faXNUVFkgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBDbGlJb0hvc3QgaXMgcnVubmluZyBpbiBDSSBtb2RlLiBJbiBDSSBtb2RlLCBhbGwgbm9uLWVycm9yIG91dHB1dCBnb2VzIHRvIHN0ZG91dCBpbnN0ZWFkIG9mIHN0ZGVyci5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNDSSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNDSTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIENJIG1vZGUuIEluIENJIG1vZGUsIGFsbCBub24tZXJyb3Igb3V0cHV0IGdvZXMgdG8gc3Rkb3V0IGluc3RlYWQgb2Ygc3RkZXJyLlxuICAgKiBAcGFyYW0gdmFsdWUgc2V0IHRoZSBDSSBtb2RlXG4gICAqL1xuICBwdWJsaWMgc2V0IGlzQ0kodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pc0NJID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgdGhyZXNob2xkLiBNZXNzYWdlcyB3aXRoIGEgbG93ZXIgcHJpb3JpdHkgbGV2ZWwgd2lsbCBiZSBpZ25vcmVkLlxuICAgKi9cbiAgcHVibGljIGdldCBsb2dMZXZlbCgpOiBJb01lc3NhZ2VMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX2xvZ0xldmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGN1cnJlbnQgdGhyZXNob2xkLiBNZXNzYWdlcyB3aXRoIGEgbG93ZXIgcHJpb3JpdHkgbGV2ZWwgd2lsbCBiZSBpZ25vcmVkLlxuICAgKiBAcGFyYW0gbGV2ZWwgVGhlIG5ldyBsb2cgbGV2ZWwgdGhyZXNob2xkXG4gICAqL1xuICBwdWJsaWMgc2V0IGxvZ0xldmVsKGxldmVsOiBJb01lc3NhZ2VMZXZlbCkge1xuICAgIHRoaXMuX2xvZ0xldmVsID0gbGV2ZWw7XG4gIH1cblxuICAvKipcbiAgICogTm90aWZpZXMgdGhlIGhvc3Qgb2YgYSBtZXNzYWdlLlxuICAgKiBUaGUgY2FsbGVyIHdhaXRzIHVudGlsIHRoZSBub3RpZmljYXRpb24gY29tcGxldGVzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIG5vdGlmeTxUPihtc2c6IElvTWVzc2FnZTxUPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9pbnRlcm5hbElvSG9zdCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ludGVybmFsSW9Ib3N0Lm5vdGlmeShtc2cpO1xuICAgIH1cblxuICAgIGlmIChsZXZlbFByaW9yaXR5W21zZy5sZXZlbF0gPiBsZXZlbFByaW9yaXR5W3RoaXMubG9nTGV2ZWxdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gdGhpcy5mb3JtYXRNZXNzYWdlKG1zZyk7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW0obXNnLmxldmVsLCBtc2cuZm9yY2VTdGRvdXQgPz8gZmFsc2UpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHN0cmVhbS53cml0ZShvdXRwdXQsIChlcnIpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGljaCBvdXRwdXQgc3RyZWFtIHRvIHVzZSBiYXNlZCBvbiBsb2cgbGV2ZWwgYW5kIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwcml2YXRlIHN0cmVhbShsZXZlbDogSW9NZXNzYWdlTGV2ZWwsIGZvcmNlU3Rkb3V0OiBib29sZWFuKSB7XG4gICAgLy8gRm9yIGxlZ2FjeSBwdXJwb3NlcyBhbGwgbG9nIHN0cmVhbXMgYXJlIHdyaXR0ZW4gdG8gc3RkZXJyIGJ5IGRlZmF1bHQsIHVubGVzc1xuICAgIC8vIHNwZWNpZmllZCBvdGhlcndpc2UsIGJ5IHBhc3NpbmcgYGZvcmNlU3Rkb3V0YCwgd2hpY2ggaXMgdXNlZCBieSB0aGUgYGRhdGEoKWAgbG9nZ2luZyBmdW5jdGlvbiwgb3JcbiAgICAvLyBpZiB0aGUgQ0RLIGlzIHJ1bm5pbmcgaW4gYSBDSSBlbnZpcm9ubWVudC4gVGhpcyBpcyBiZWNhdXNlIHNvbWUgQ0kgZW52aXJvbm1lbnRzIHdpbGwgaW1tZWRpYXRlbHlcbiAgICAvLyBmYWlsIGlmIHN0ZGVyciBpcyB3cml0dGVuIHRvLiBJbiB0aGVzZSBjYXNlcywgd2UgZGV0ZWN0IGlmIHdlIGFyZSBpbiBhIENJIGVudmlyb25tZW50IGFuZFxuICAgIC8vIHdyaXRlIGFsbCBtZXNzYWdlcyB0byBzdGRvdXQgaW5zdGVhZC5cbiAgICBpZiAoZm9yY2VTdGRvdXQpIHtcbiAgICAgIHJldHVybiBwcm9jZXNzLnN0ZG91dDtcbiAgICB9XG4gICAgaWYgKGxldmVsID09ICdlcnJvcicpIHJldHVybiBwcm9jZXNzLnN0ZGVycjtcbiAgICByZXR1cm4gQ2xpSW9Ib3N0Lmluc3RhbmNlKCkuaXNDSSA/IHByb2Nlc3Muc3Rkb3V0IDogcHJvY2Vzcy5zdGRlcnI7XG4gIH1cblxuICAvKipcbiAgICogTm90aWZpZXMgdGhlIGhvc3Qgb2YgYSBtZXNzYWdlIHRoYXQgcmVxdWlyZXMgYSByZXNwb25zZS5cbiAgICpcbiAgICogSWYgdGhlIGhvc3QgZG9lcyBub3QgcmV0dXJuIGEgcmVzcG9uc2UgdGhlIHN1Z2dlc3RlZFxuICAgKiBkZWZhdWx0IHJlc3BvbnNlIGZyb20gdGhlIGlucHV0IG1lc3NhZ2Ugd2lsbCBiZSB1c2VkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlcXVlc3RSZXNwb25zZTxULCBVPihtc2c6IElvUmVxdWVzdDxULCBVPik6IFByb21pc2U8VT4ge1xuICAgIGlmICh0aGlzLl9pbnRlcm5hbElvSG9zdCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ludGVybmFsSW9Ib3N0LnJlcXVlc3RSZXNwb25zZShtc2cpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMubm90aWZ5KG1zZyk7XG4gICAgcmV0dXJuIG1zZy5kZWZhdWx0UmVzcG9uc2U7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0cyBhIG1lc3NhZ2UgZm9yIGNvbnNvbGUgb3V0cHV0IHdpdGggb3B0aW9uYWwgY29sb3Igc3VwcG9ydFxuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXRNZXNzYWdlKG1zZzogSW9NZXNzYWdlPGFueT4pOiBzdHJpbmcge1xuICAgIC8vIGFwcGx5IHByb3ZpZGVkIHN0eWxlIG9yIGEgZGVmYXVsdCBzdHlsZSBpZiB3ZSdyZSBpbiBUVFkgbW9kZVxuICAgIGxldCBtZXNzYWdlX3RleHQgPSB0aGlzLl9pc1RUWVxuICAgICAgPyBzdHlsZU1hcFttc2cubGV2ZWxdKG1zZy5tZXNzYWdlKVxuICAgICAgOiBtc2cubWVzc2FnZTtcblxuICAgIC8vIHByZXBlbmQgdGltZXN0YW1wIGlmIElvTWVzc2FnZUxldmVsIGlzIERFQlVHIG9yIFRSQUNFLiBQb3N0cGVuZCBhIG5ld2xpbmUuXG4gICAgcmV0dXJuICgobXNnLmxldmVsID09PSAnZGVidWcnIHx8IG1zZy5sZXZlbCA9PT0gJ3RyYWNlJylcbiAgICAgID8gYFske3RoaXMuZm9ybWF0VGltZShtc2cudGltZSl9XSAke21lc3NhZ2VfdGV4dH1gXG4gICAgICA6IG1lc3NhZ2VfdGV4dCkgKyAnXFxuJztcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXRzIGRhdGUgdG8gSEg6TU06U1NcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0VGltZShkOiBEYXRlKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYWQgPSAobjogbnVtYmVyKTogc3RyaW5nID0+IG4udG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIHJldHVybiBgJHtwYWQoZC5nZXRIb3VycygpKX06JHtwYWQoZC5nZXRNaW51dGVzKCkpfToke3BhZChkLmdldFNlY29uZHMoKSl9YDtcbiAgfVxufVxuXG5jb25zdCBzdHlsZU1hcDogUmVjb3JkPElvTWVzc2FnZUxldmVsLCAoc3RyOiBzdHJpbmcpID0+IHN0cmluZz4gPSB7XG4gIGVycm9yOiBjaGFsay5yZWQsXG4gIHdhcm46IGNoYWxrLnllbGxvdyxcbiAgaW5mbzogY2hhbGsud2hpdGUsXG4gIGRlYnVnOiBjaGFsay5ncmF5LFxuICB0cmFjZTogY2hhbGsuZ3JheSxcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IHByb2Nlc3MgaXMgcnVubmluZyBpbiBhIENJIGVudmlyb25tZW50XG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IHByb2Nlc3MgaXMgcnVubmluZyBpbiBhIENJIGVudmlyb25tZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NJKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuQ0kgIT09IHVuZGVmaW5lZCAmJiBwcm9jZXNzLmVudi5DSSAhPT0gJ2ZhbHNlJyAmJiBwcm9jZXNzLmVudi5DSSAhPT0gJzAnO1xufVxuIl19
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLWlvLWhvc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbGktaW8taG9zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFpZEEsb0JBRUM7QUFuZEQsa0NBQWtDO0FBQ2xDLCtCQUErQjtBQUMvQixxQ0FBcUM7QUFDckMsbUNBQXVDO0FBaUUxQixRQUFBLGFBQWEsR0FBbUM7SUFDM0QsS0FBSyxFQUFFLENBQUM7SUFDUixNQUFNLEVBQUUsQ0FBQztJQUNULElBQUksRUFBRSxDQUFDO0lBQ1AsSUFBSSxFQUFFLENBQUM7SUFDUCxLQUFLLEVBQUUsQ0FBQztJQUNSLEtBQUssRUFBRSxDQUFDO0NBQ1QsQ0FBQztBQWdGRjs7R0FFRztBQUNILE1BQWEsU0FBUztJQUNwQjs7T0FFRztJQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBd0IsRUFBRSxFQUFFLFFBQVEsR0FBRyxLQUFLO1FBQzFELElBQUksUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3JDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBa0JELFlBQW9CLFFBQXdCLEVBQUU7UUFKOUMsaUJBQWlCO1FBQ1Qsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDVCx3QkFBbUIsR0FBcUIsRUFBRSxDQUFDO1FBRzFELElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLGFBQWEsSUFBSSxNQUF1QixDQUFDO1FBQ3JFLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7UUFDM0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQztRQUMxQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUss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QU8sT0FBTyxHQUFHLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FBQztBQUNsRCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGlCQUFpQixDQUFDLEdBQXdCO0lBSWpELE1BQU0sUUFBUSxHQUFHLENBQUMsT0FBTyxHQUFHLENBQUMsZUFBZSxLQUFLLFFBQVEsQ0FBQyxDQUFDO0lBQzNELE9BQU87UUFDTCxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDO1FBQ3pDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0tBQzlELENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxRQUFRLEdBQW9EO0lBQ2hFLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRztJQUNoQixJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU07SUFDbEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLO0lBQ25CLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSztJQUNqQixLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUk7SUFDakIsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJO0NBQ2xCLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxTQUFnQixJQUFJO0lBQ2xCLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUM7QUFDOUYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0aWwgZnJvbSAnbm9kZTp1dGlsJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCAqIGFzIHByb21wdGx5IGZyb20gJ3Byb21wdGx5JztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4vZXJyb3InO1xuXG5leHBvcnQgdHlwZSBJb01lc3NhZ2VDb2RlQ2F0ZWdvcnkgPSAnVE9PTEtJVCcgfCAnU0RLJyB8ICdBU1NFVFMnO1xuZXhwb3J0IHR5cGUgSW9Db2RlTGV2ZWwgPSAnRScgfCAnVycgfCAnSSc7XG5leHBvcnQgdHlwZSBJb01lc3NhZ2VTcGVjaWZpY0NvZGU8TCBleHRlbmRzIElvQ29kZUxldmVsPiA9IGBDREtfJHtJb01lc3NhZ2VDb2RlQ2F0ZWdvcnl9XyR7TH0ke251bWJlcn0ke251bWJlcn0ke251bWJlcn0ke251bWJlcn1gO1xuZXhwb3J0IHR5cGUgSW9NZXNzYWdlQ29kZSA9IElvTWVzc2FnZVNwZWNpZmljQ29kZTxJb0NvZGVMZXZlbD47XG5cbi8qKlxuICogQmFzaWMgbWVzc2FnZSBzdHJ1Y3R1cmUgZm9yIHRvb2xraXQgbm90aWZpY2F0aW9ucy5cbiAqIE1lc3NhZ2VzIGFyZSBlbWl0dGVkIGJ5IHRoZSB0b29sa2l0IGFuZCBoYW5kbGVkIGJ5IHRoZSBJb0hvc3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW9NZXNzYWdlPFQ+IHtcbiAgLyoqXG4gICAqIFRoZSB0aW1lIHRoZSBtZXNzYWdlIHdhcyBlbWl0dGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZTogRGF0ZTtcblxuICAvKipcbiAgICogVGhlIGxvZyBsZXZlbCBvZiB0aGUgbWVzc2FnZS5cbiAgICovXG4gIHJlYWRvbmx5IGxldmVsOiBJb01lc3NhZ2VMZXZlbDtcblxuICAvKipcbiAgICogVGhlIGFjdGlvbiB0aGF0IHRyaWdnZXJlZCB0aGUgbWVzc2FnZS5cbiAgICovXG4gIHJlYWRvbmx5IGFjdGlvbjogVG9vbGtpdEFjdGlvbjtcblxuICAvKipcbiAgICogQSBzaG9ydCBtZXNzYWdlIGNvZGUgdW5pcXVlbHkgaWRlbnRpZnlpbmcgYSBtZXNzYWdlIHR5cGUgdXNpbmcgdGhlIGZvcm1hdCBDREtfW0NBVEVHT1JZXV9bRS9XL0ldWzAwMC05OTldLlxuICAgKlxuICAgKiBUaGUgbGV2ZWwgaW5kaWNhdG9yIGZvbGxvd3MgdGhlc2UgcnVsZXM6XG4gICAqIC0gJ0UnIGZvciBlcnJvciBsZXZlbCBtZXNzYWdlc1xuICAgKiAtICdXJyBmb3Igd2FybmluZyBsZXZlbCBtZXNzYWdlc1xuICAgKiAtICdJJyBmb3IgaW5mby9kZWJ1Zy90cmFjZSBsZXZlbCBtZXNzYWdlc1xuICAgKlxuICAgKiBDb2RlcyBlbmRpbmcgaW4gMDAwIGFyZSBnZW5lcmljIG1lc3NhZ2VzLCB3aGlsZSBjb2RlcyBlbmRpbmcgaW4gMDAxLTk5OSBhcmUgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyIG1lc3NhZ2UuXG4gICAqIFRoZSBmb2xsb3dpbmcgYXJlIGV4YW1wbGVzIG9mIHZhbGlkIGFuZCBpbnZhbGlkIG1lc3NhZ2UgY29kZXM6XG4gICAqIGBgYHRzXG4gICAqICdDREtfQVNTRVRTX0kwMDAnICAgICAgIC8vIHZhbGlkOiBnZW5lcmljIGFzc2V0cyBpbmZvIG1lc3NhZ2VcbiAgICogJ0NES19UT09MS0lUX0UwMDInICAgICAgLy8gdmFsaWQ6IHNwZWNpZmljIHRvb2xraXQgZXJyb3IgbWVzc2FnZVxuICAgKiAnQ0RLX1NES19XMDIzJyAgICAgICAgICAvLyB2YWxpZDogc3BlY2lmaWMgc2RrIHdhcm5pbmcgbWVzc2FnZVxuICAgKiBgYGBcbiAgICovXG4gIHJlYWRvbmx5IGNvZGU6IElvTWVzc2FnZUNvZGU7XG5cbiAgLyoqXG4gICAqIFRoZSBtZXNzYWdlIHRleHQuXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIGF0dGFjaGVkIHRvIHRoZSBtZXNzYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YT86IFQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW9SZXF1ZXN0PFQsIFU+IGV4dGVuZHMgSW9NZXNzYWdlPFQ+IHtcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHJlc3BvbnNlIHRoYXQgd2lsbCBiZSB1c2VkIGlmIG5vIGRhdGEgaXMgcmV0dXJuZWQuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0UmVzcG9uc2U6IFU7XG59XG5cbmV4cG9ydCB0eXBlIElvTWVzc2FnZUxldmVsID0gJ2Vycm9yJyB8ICdyZXN1bHQnIHwgJ3dhcm4nIHwgJ2luZm8nIHwgJ2RlYnVnJyB8ICd0cmFjZSc7XG5cbmV4cG9ydCBjb25zdCBsZXZlbFByaW9yaXR5OiBSZWNvcmQ8SW9NZXNzYWdlTGV2ZWwsIG51bWJlcj4gPSB7XG4gIGVycm9yOiAwLFxuICByZXN1bHQ6IDEsXG4gIHdhcm46IDIsXG4gIGluZm86IDMsXG4gIGRlYnVnOiA0LFxuICB0cmFjZTogNSxcbn07XG5cbi8qKlxuICogVGhlIGN1cnJlbnQgYWN0aW9uIGJlaW5nIHBlcmZvcm1lZCBieSB0aGUgQ0xJLiAnbm9uZScgcmVwcmVzZW50cyB0aGUgYWJzZW5jZSBvZiBhbiBhY3Rpb24uXG4gKi9cbmV4cG9ydCB0eXBlIFRvb2xraXRBY3Rpb24gPVxufCAnYXNzZW1ibHknXG58ICdib290c3RyYXAnXG58ICdzeW50aCdcbnwgJ2xpc3QnXG58ICdkaWZmJ1xufCAnZGVwbG95J1xufCAncm9sbGJhY2snXG58ICd3YXRjaCdcbnwgJ2Rlc3Ryb3knXG58ICdjb250ZXh0J1xufCAnZG9jcydcbnwgJ2RvY3RvcidcbnwgJ2djJ1xufCAnaW1wb3J0J1xufCAnbWV0YWRhdGEnXG58ICdub3RpY2VzJ1xufCAnaW5pdCdcbnwgJ21pZ3JhdGUnXG58ICd2ZXJzaW9uJztcblxuZXhwb3J0IGludGVyZmFjZSBJSW9Ib3N0IHtcbiAgLyoqXG4gICAqIE5vdGlmaWVzIHRoZSBob3N0IG9mIGEgbWVzc2FnZS5cbiAgICogVGhlIGNhbGxlciB3YWl0cyB1bnRpbCB0aGUgbm90aWZpY2F0aW9uIGNvbXBsZXRlcy5cbiAgICovXG4gIG5vdGlmeTxUPihtc2c6IElvTWVzc2FnZTxUPik6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIE5vdGlmaWVzIHRoZSBob3N0IG9mIGEgbWVzc2FnZSB0aGF0IHJlcXVpcmVzIGEgcmVzcG9uc2UuXG4gICAqXG4gICAqIElmIHRoZSBob3N0IGRvZXMgbm90IHJldHVybiBhIHJlc3BvbnNlIHRoZSBzdWdnZXN0ZWRcbiAgICogZGVmYXVsdCByZXNwb25zZSBmcm9tIHRoZSBpbnB1dCBtZXNzYWdlIHdpbGwgYmUgdXNlZC5cbiAgICovXG4gIHJlcXVlc3RSZXNwb25zZTxULCBVPihtc2c6IElvUmVxdWVzdDxULCBVPik6IFByb21pc2U8VT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpSW9Ib3N0UHJvcHMge1xuICAvKipcbiAgICogVGhlIGluaXRpYWwgVG9vbGtpdCBhY3Rpb24gdGhlIGhvc3RzIHN0YXJ0cyB3aXRoLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICovXG4gIHJlYWRvbmx5IGN1cnJlbnRBY3Rpb24/OiBUb29sa2l0QWN0aW9uO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSB2ZXJib3NpdHkgb2YgdGhlIG91dHB1dC5cbiAgICpcbiAgICogVGhlIENsaUlvSG9zdCB3aWxsIHN0aWxsIHJlY2VpdmUgYWxsIG1lc3NhZ2VzIGFuZCByZXF1ZXN0cyxcbiAgICogYnV0IG9ubHkgdGhlIG1lc3NhZ2VzIGluY2x1ZGVkIGluIHRoaXMgbGV2ZWwgd2lsbCBiZSBwcmludGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnaW5mbydcbiAgICovXG4gIHJlYWRvbmx5IGxvZ0xldmVsPzogSW9NZXNzYWdlTGV2ZWw7XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlcyB0aGUgYXV0b21hdGljIFRUWSBkZXRlY3Rpb24uXG4gICAqXG4gICAqIFdoZW4gVFRZIGlzIGRpc2FibGVkLCB0aGUgQ0xJIHdpbGwgaGF2ZSBubyBpbnRlcmFjdGlvbnMgb3IgY29sb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGV0ZXJtaW5lZCBmcm9tIHRoZSBjdXJyZW50IHByb2Nlc3NcbiAgICovXG4gIHJlYWRvbmx5IGlzVFRZPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgQ2xpSW9Ib3N0IGlzIHJ1bm5pbmcgaW4gQ0kgbW9kZS5cbiAgICpcbiAgICogSW4gQ0kgbW9kZSwgYWxsIG5vbi1lcnJvciBvdXRwdXQgZ29lcyB0byBzdGRvdXQgaW5zdGVhZCBvZiBzdGRlcnIuXG4gICAqIFNldCB0byBmYWxzZSBpbiB0aGUgQ2xpSW9Ib3N0IGNvbnN0cnVjdG9yIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gaWYgdGhlIENMSSBDSSBhcmd1bWVudCBpcyBwYXNzZWRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZXRlcm1pbmVkIGZyb20gdGhlIGVudmlyb25tZW50LCBzcGVjaWZpY2FsbHkgYmFzZWQgb24gYHByb2Nlc3MuZW52LkNJYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNDST86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBzaW1wbGUgSU8gaG9zdCBmb3IgdGhlIENMSSB0aGF0IHdyaXRlcyBtZXNzYWdlcyB0byB0aGUgY29uc29sZS5cbiAqL1xuZXhwb3J0IGNsYXNzIENsaUlvSG9zdCBpbXBsZW1lbnRzIElJb0hvc3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgaW5zdGFuY2UocHJvcHM6IENsaUlvSG9zdFByb3BzID0ge30sIGZvcmNlTmV3ID0gZmFsc2UpOiBDbGlJb0hvc3Qge1xuICAgIGlmIChmb3JjZU5ldyB8fCAhQ2xpSW9Ib3N0Ll9pbnN0YW5jZSkge1xuICAgICAgQ2xpSW9Ib3N0Ll9pbnN0YW5jZSA9IG5ldyBDbGlJb0hvc3QocHJvcHMpO1xuICAgIH1cbiAgICByZXR1cm4gQ2xpSW9Ib3N0Ll9pbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIENsaUlvSG9zdFxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBDbGlJb0hvc3QgfCB1bmRlZmluZWQ7XG5cbiAgLy8gaW50ZXJuYWwgc3RhdGUgZm9yIGdldHRlcnMvc2V0dGVyXG4gIHByaXZhdGUgX2N1cnJlbnRBY3Rpb246IFRvb2xraXRBY3Rpb247XG4gIHByaXZhdGUgX2lzQ0k6IGJvb2xlYW47XG4gIHByaXZhdGUgX2lzVFRZOiBib29sZWFuO1xuICBwcml2YXRlIF9sb2dMZXZlbDogSW9NZXNzYWdlTGV2ZWw7XG4gIHByaXZhdGUgX2ludGVybmFsSW9Ib3N0PzogSUlvSG9zdDtcblxuICAvLyBDb3JrZWQgTG9nZ2luZ1xuICBwcml2YXRlIGNvcmtlZENvdW50ZXIgPSAwO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvcmtlZExvZ2dpbmdCdWZmZXI6IElvTWVzc2FnZTxhbnk+W10gPSBbXTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHByb3BzOiBDbGlJb0hvc3RQcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5fY3VycmVudEFjdGlvbiA9IHByb3BzLmN1cnJlbnRBY3Rpb24gPz8gJ25vbmUnIGFzIFRvb2xraXRBY3Rpb247XG4gICAgdGhpcy5faXNUVFkgPSBwcm9wcy5pc1RUWSA/PyBwcm9jZXNzLnN0ZG91dC5pc1RUWSA/PyBmYWxzZTtcbiAgICB0aGlzLl9sb2dMZXZlbCA9IHByb3BzLmxvZ0xldmVsID8/ICdpbmZvJztcbiAgICB0aGlzLl9pc0NJID0gcHJvcHMuaXNDSSA/PyBpc0NJKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJJb0hvc3QoaW9Ib3N0OiBJSW9Ib3N0KSB7XG4gICAgaWYgKGlvSG9zdCAhPT0gdGhpcykge1xuICAgICAgdGhpcy5faW50ZXJuYWxJb0hvc3QgPSBpb0hvc3Q7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IGFjdGlvbiBiZWluZyBwZXJmb3JtZWQgYnkgdGhlIENMSS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY3VycmVudEFjdGlvbigpOiBUb29sa2l0QWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEFjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjdXJyZW50IGFjdGlvbiBiZWluZyBwZXJmb3JtZWQgYnkgdGhlIENMSS5cbiAgICpcbiAgICogQHBhcmFtIGFjdGlvbiBUaGUgYWN0aW9uIGJlaW5nIHBlcmZvcm1lZCBieSB0aGUgQ0xJLlxuICAgKi9cbiAgcHVibGljIHNldCBjdXJyZW50QWN0aW9uKGFjdGlvbjogVG9vbGtpdEFjdGlvbikge1xuICAgIHRoaXMuX2N1cnJlbnRBY3Rpb24gPSBhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgaG9zdCBjYW4gdXNlIGludGVyYWN0aW9ucyBhbmQgbWVzc2FnZSBzdHlsaW5nLlxuICAgKi9cbiAgcHVibGljIGdldCBpc1RUWSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNUVFk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IFRUWSBtb2RlLCBpLmUgY2FuIHRoZSBob3N0IHVzZSBpbnRlcmFjdGlvbnMgYW5kIG1lc3NhZ2Ugc3R5bGluZy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIHNldCBUVFkgbW9kZVxuICAgKi9cbiAgcHVibGljIHNldCBpc1RUWSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2lzVFRZID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgQ2xpSW9Ib3N0IGlzIHJ1bm5pbmcgaW4gQ0kgbW9kZS4gSW4gQ0kgbW9kZSwgYWxsIG5vbi1lcnJvciBvdXRwdXQgZ29lcyB0byBzdGRvdXQgaW5zdGVhZCBvZiBzdGRlcnIuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzQ0koKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQ0k7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBDSSBtb2RlLiBJbiBDSSBtb2RlLCBhbGwgbm9uLWVycm9yIG91dHB1dCBnb2VzIHRvIHN0ZG91dCBpbnN0ZWFkIG9mIHN0ZGVyci5cbiAgICogQHBhcmFtIHZhbHVlIHNldCB0aGUgQ0kgbW9kZVxuICAgKi9cbiAgcHVibGljIHNldCBpc0NJKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faXNDSSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHRocmVzaG9sZC4gTWVzc2FnZXMgd2l0aCBhIGxvd2VyIHByaW9yaXR5IGxldmVsIHdpbGwgYmUgaWdub3JlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgbG9nTGV2ZWwoKTogSW9NZXNzYWdlTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl9sb2dMZXZlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjdXJyZW50IHRocmVzaG9sZC4gTWVzc2FnZXMgd2l0aCBhIGxvd2VyIHByaW9yaXR5IGxldmVsIHdpbGwgYmUgaWdub3JlZC5cbiAgICogQHBhcmFtIGxldmVsIFRoZSBuZXcgbG9nIGxldmVsIHRocmVzaG9sZFxuICAgKi9cbiAgcHVibGljIHNldCBsb2dMZXZlbChsZXZlbDogSW9NZXNzYWdlTGV2ZWwpIHtcbiAgICB0aGlzLl9sb2dMZXZlbCA9IGxldmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGEgYmxvY2sgb2YgY29kZSB3aXRoIGNvcmtlZCBsb2dnaW5nLiBBbGwgbG9nIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb25cbiAgICogYXJlIGJ1ZmZlcmVkIGFuZCBvbmx5IHdyaXR0ZW4gd2hlbiBhbGwgbmVzdGVkIGNvcmsgYmxvY2tzIGNvbXBsZXRlICh3aGVuIENPUktfQ09VTlRFUiByZWFjaGVzIDApLlxuICAgKiBUaGUgY29ya2luZyBpcyBib3VuZCB0byB0aGUgc3BlY2lmaWMgaW5zdGFuY2Ugb2YgdGhlIENsaUlvSG9zdC5cbiAgICpcbiAgICogQHBhcmFtIGJsb2NrIC0gQXN5bmMgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aXRoIGNvcmtlZCBsb2dnaW5nXG4gICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBibG9jaydzIHJldHVybiB2YWx1ZVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHdpdGhDb3JrZWRMb2dnaW5nPFQ+KGJsb2NrOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgdGhpcy5jb3JrZWRDb3VudGVyKys7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBibG9jaygpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmNvcmtlZENvdW50ZXItLTtcbiAgICAgIGlmICh0aGlzLmNvcmtlZENvdW50ZXIgPT09IDApIHtcbiAgICAgICAgLy8gUHJvY2VzcyBlYWNoIGJ1ZmZlcmVkIG1lc3NhZ2UgdGhyb3VnaCBub3RpZnlcbiAgICAgICAgZm9yIChjb25zdCBpb01lc3NhZ2Ugb2YgdGhpcy5jb3JrZWRMb2dnaW5nQnVmZmVyKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5ub3RpZnkoaW9NZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZW1vdmUgYWxsIGJ1ZmZlcmVkIG1lc3NhZ2VzIGluLXBsYWNlXG4gICAgICAgIHRoaXMuY29ya2VkTG9nZ2luZ0J1ZmZlci5zcGxpY2UoMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5vdGlmaWVzIHRoZSBob3N0IG9mIGEgbWVzc2FnZS5cbiAgICogVGhlIGNhbGxlciB3YWl0cyB1bnRpbCB0aGUgbm90aWZpY2F0aW9uIGNvbXBsZXRlcy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBub3RpZnk8VD4obXNnOiBJb01lc3NhZ2U8VD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5faW50ZXJuYWxJb0hvc3QpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbElvSG9zdC5ub3RpZnkobXNnKTtcbiAgICB9XG5cbiAgICBpZiAobGV2ZWxQcmlvcml0eVttc2cubGV2ZWxdID4gbGV2ZWxQcmlvcml0eVt0aGlzLmxvZ0xldmVsXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvcmtlZENvdW50ZXIgPiAwKSB7XG4gICAgICB0aGlzLmNvcmtlZExvZ2dpbmdCdWZmZXIucHVzaChtc2cpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IHRoaXMuZm9ybWF0TWVzc2FnZShtc2cpO1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc2VsZWN0U3RyZWFtKG1zZy5sZXZlbCk7XG4gICAgc3RyZWFtLndyaXRlKG91dHB1dCk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgb3V0cHV0IHN0cmVhbSwgYmFzZWQgb24gbWVzc2FnZSBsZXZlbCBhbmQgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHByaXZhdGUgc2VsZWN0U3RyZWFtKGxldmVsOiBJb01lc3NhZ2VMZXZlbCkge1xuICAgIC8vIFRoZSBzdHJlYW0gc2VsZWN0aW9uIHBvbGljeSBmb3IgdGhlIENMSSBpcyB0aGUgZm9sbG93aW5nOlxuICAgIC8vXG4gICAgLy8gICAoMSkgTWVzc2FnZXMgb2YgbGV2ZWwgYHJlc3VsdGAgYWx3YXlzIGdvIHRvIGBzdGRvdXRgXG4gICAgLy8gICAoMikgTWVzc2FnZXMgb2YgbGV2ZWwgYGVycm9yYCBhbHdheXMgZ28gdG8gYHN0ZGVycmAuXG4gICAgLy8gICAoM2EpIEFsbCByZW1haW5pbmcgbWVzc2FnZXMgZ28gdG8gYHN0ZGVycmAuXG4gICAgLy8gICAoM2IpIElmIHdlIGFyZSBpbiBDSSBtb2RlLCBhbGwgcmVtYWluaW5nIG1lc3NhZ2VzIGdvIHRvIGBzdGRvdXRgLlxuICAgIC8vXG4gICAgc3dpdGNoIChsZXZlbCkge1xuICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICByZXR1cm4gcHJvY2Vzcy5zdGRlcnI7XG4gICAgICBjYXNlICdyZXN1bHQnOlxuICAgICAgICByZXR1cm4gcHJvY2Vzcy5zdGRvdXQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5pc0NJID8gcHJvY2Vzcy5zdGRvdXQgOiBwcm9jZXNzLnN0ZGVycjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm90aWZpZXMgdGhlIGhvc3Qgb2YgYSBtZXNzYWdlIHRoYXQgcmVxdWlyZXMgYSByZXNwb25zZS5cbiAgICpcbiAgICogSWYgdGhlIGhvc3QgZG9lcyBub3QgcmV0dXJuIGEgcmVzcG9uc2UgdGhlIHN1Z2dlc3RlZFxuICAgKiBkZWZhdWx0IHJlc3BvbnNlIGZyb20gdGhlIGlucHV0IG1lc3NhZ2Ugd2lsbCBiZSB1c2VkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlcXVlc3RSZXNwb25zZTxEYXRhVHlwZSwgUmVzcG9uc2VUeXBlPihtc2c6IElvUmVxdWVzdDxEYXRhVHlwZSwgUmVzcG9uc2VUeXBlPik6IFByb21pc2U8UmVzcG9uc2VUeXBlPiB7XG4gICAgLy8gRmlyc3QgY2FsbCBvdXQgdG8gYSByZWdpc3RlcmVkIGluc3RhbmNlIGlmIHdlIGhhdmUgb25lXG4gICAgaWYgKHRoaXMuX2ludGVybmFsSW9Ib3N0KSB7XG4gICAgICByZXR1cm4gdGhpcy5faW50ZXJuYWxJb0hvc3QucmVxdWVzdFJlc3BvbnNlKG1zZyk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHJlcXVlc3QgY2Fubm90IGJlIHByb21wdGVkIGZvciBieSB0aGUgQ2xpSW9Ib3N0LCB3ZSBqdXN0IGFjY2VwdCB0aGUgZGVmYXVsdFxuICAgIGlmICghaXNQcm9tcHRhYmxlUmVxdWVzdChtc2cpKSB7XG4gICAgICBhd2FpdCB0aGlzLm5vdGlmeShtc2cpO1xuICAgICAgcmV0dXJuIG1zZy5kZWZhdWx0UmVzcG9uc2U7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndpdGhDb3JrZWRMb2dnaW5nKGFzeW5jICgpOiBQcm9taXNlPHN0cmluZyB8IG51bWJlciB8IHRydWU+ID0+IHtcbiAgICAgIC8vIHByZXBhcmUgcHJvbXB0IGRhdGFcbiAgICAgIC8vIEB0b2RvIHRoaXMgZm9ybWF0IGlzIG5vdCBkZWZpbmVkIGFueXdoZXJlLCBwcm9iYWJseSBzaG91bGQgYmVcbiAgICAgIGNvbnN0IGRhdGE6IHtcbiAgICAgICAgbW90aXZhdGlvbj86IHN0cmluZztcbiAgICAgICAgY29uY3VycmVuY3k/OiBudW1iZXI7XG4gICAgICB9ID0gbXNnLmRhdGEgPz8ge307XG5cbiAgICAgIGNvbnN0IG1vdGl2YXRpb24gPSBkYXRhLm1vdGl2YXRpb24gPz8gJ1VzZXIgaW5wdXQgaXMgbmVlZGVkJztcbiAgICAgIGNvbnN0IGNvbmN1cnJlbmN5ID0gZGF0YS5jb25jdXJyZW5jeSA/PyAwO1xuXG4gICAgICAvLyBvbmx5IHRhbGsgdG8gdXNlciBpZiBTVERJTiBpcyBhIHRlcm1pbmFsIChvdGhlcndpc2UsIGZhaWwpXG4gICAgICBpZiAoIXRoaXMuaXNUVFkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgJHttb3RpdmF0aW9ufSwgYnV0IHRlcm1pbmFsIChUVFkpIGlzIG5vdCBhdHRhY2hlZCBzbyB3ZSBhcmUgdW5hYmxlIHRvIGdldCBhIGNvbmZpcm1hdGlvbiBmcm9tIHRoZSB1c2VyYCk7XG4gICAgICB9XG5cbiAgICAgIC8vIG9ubHkgdGFsayB0byB1c2VyIGlmIGNvbmN1cnJlbmN5IGlzIDEgKG90aGVyd2lzZSwgZmFpbClcbiAgICAgIGlmIChjb25jdXJyZW5jeSA+IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgJHttb3RpdmF0aW9ufSwgYnV0IGNvbmN1cnJlbmN5IGlzIGdyZWF0ZXIgdGhhbiAxIHNvIHdlIGFyZSB1bmFibGUgdG8gZ2V0IGEgY29uZmlybWF0aW9uIGZyb20gdGhlIHVzZXJgKTtcbiAgICAgIH1cblxuICAgICAgLy8gQmFzaWMgY29uZmlybWF0aW9uIHByb21wdFxuICAgICAgLy8gV2UgdHJlYXQgYWxsIHJlcXVlc3RzIHdpdGggYSBib29sZWFuIHJlc3BvbnNlIGFzIGNvbmZpcm1hdGlvbiBwcm9tcHRzXG4gICAgICBpZiAoaXNDb25maXJtYXRpb25Qcm9tcHQobXNnKSkge1xuICAgICAgICBjb25zdCBjb25maXJtZWQgPSBhd2FpdCBwcm9tcHRseS5jb25maXJtKGAke2NoYWxrLmN5YW4obXNnLm1lc3NhZ2UpfSAoeS9uKWApO1xuICAgICAgICBpZiAoIWNvbmZpcm1lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0Fib3J0ZWQgYnkgdXNlcicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb25maXJtZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIEFza2luZyBmb3IgYSBzcGVjaWZpYyB2YWx1ZVxuICAgICAgY29uc3QgcHJvbXB0ID0gZXh0cmFjdFByb21wdEluZm8obXNnKTtcbiAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IHByb21wdGx5LnByb21wdChgJHtjaGFsay5jeWFuKG1zZy5tZXNzYWdlKX0gKCR7cHJvbXB0LmRlZmF1bHR9KWAsIHtcbiAgICAgICAgZGVmYXVsdDogcHJvbXB0LmRlZmF1bHQsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBwcm9tcHQuY29udmVydEFuc3dlcihhbnN3ZXIpO1xuICAgIH0pO1xuXG4gICAgLy8gV2UgbmVlZCB0byBjYXN0IHRoaXMgYmVjYXVzZSBpdCBpcyBpbXBvc3NpYmxlIHRvIG5hcnJvdyB0aGUgZ2VuZXJpYyB0eXBlXG4gICAgLy8gaXNQcm9tcHRhYmxlUmVxdWVzdCBlbnN1cmVzIHRoYXQgdGhlIHJlc3BvbnNlIHR5cGUgaXMgb25lIHdlIGNhbiBwcm9tcHQgZm9yXG4gICAgLy8gdGhlIHJlbWFpbmluZyBjb2RlIGVuc3VyZSB3ZSBhcmUgaW5kZWVkIHJldHVybmluZyB0aGUgY29ycmVjdCB0eXBlXG4gICAgcmV0dXJuIHJlc3BvbnNlIGFzIFJlc3BvbnNlVHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXRzIGEgbWVzc2FnZSBmb3IgY29uc29sZSBvdXRwdXQgd2l0aCBvcHRpb25hbCBjb2xvciBzdXBwb3J0XG4gICAqL1xuICBwcml2YXRlIGZvcm1hdE1lc3NhZ2UobXNnOiBJb01lc3NhZ2U8YW55Pik6IHN0cmluZyB7XG4gICAgLy8gYXBwbHkgcHJvdmlkZWQgc3R5bGUgb3IgYSBkZWZhdWx0IHN0eWxlIGlmIHdlJ3JlIGluIFRUWSBtb2RlXG4gICAgbGV0IG1lc3NhZ2VfdGV4dCA9IHRoaXMuX2lzVFRZXG4gICAgICA/IHN0eWxlTWFwW21zZy5sZXZlbF0obXNnLm1lc3NhZ2UpXG4gICAgICA6IG1zZy5tZXNzYWdlO1xuXG4gICAgLy8gcHJlcGVuZCB0aW1lc3RhbXAgaWYgSW9NZXNzYWdlTGV2ZWwgaXMgREVCVUcgb3IgVFJBQ0UuIFBvc3RwZW5kIGEgbmV3bGluZS5cbiAgICByZXR1cm4gKChtc2cubGV2ZWwgPT09ICdkZWJ1ZycgfHwgbXNnLmxldmVsID09PSAndHJhY2UnKVxuICAgICAgPyBgWyR7dGhpcy5mb3JtYXRUaW1lKG1zZy50aW1lKX1dICR7bWVzc2FnZV90ZXh0fWBcbiAgICAgIDogbWVzc2FnZV90ZXh0KSArICdcXG4nO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgZGF0ZSB0byBISDpNTTpTU1xuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXRUaW1lKGQ6IERhdGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhZCA9IChuOiBudW1iZXIpOiBzdHJpbmcgPT4gbi50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgcmV0dXJuIGAke3BhZChkLmdldEhvdXJzKCkpfToke3BhZChkLmdldE1pbnV0ZXMoKSl9OiR7cGFkKGQuZ2V0U2Vjb25kcygpKX1gO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBJb0hvc3QgaW1wbGVtZW50YXRpb24gY29uc2lkZXJzIGEgcmVxdWVzdCBwcm9tcHRhYmxlLCBpZjpcbiAqIC0gaXQncyBhIHllcy9ubyBjb25maXJtYXRpb25cbiAqIC0gYXNraW5nIGZvciBhIHN0cmluZyBvciBudW1iZXIgdmFsdWVcbiAqL1xuZnVuY3Rpb24gaXNQcm9tcHRhYmxlUmVxdWVzdChtc2c6IElvUmVxdWVzdDxhbnksIGFueT4pOiBtc2cgaXMgSW9SZXF1ZXN0PGFueSwgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4ge1xuICByZXR1cm4gaXNDb25maXJtYXRpb25Qcm9tcHQobXNnKVxuICAgIHx8IHR5cGVvZiBtc2cuZGVmYXVsdFJlc3BvbnNlID09PSAnc3RyaW5nJ1xuICAgIHx8IHR5cGVvZiBtc2cuZGVmYXVsdFJlc3BvbnNlID09PSAnbnVtYmVyJztcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcmVxdWVzdCBpcyBhIGNvbmZpcm1hdGlvbiBwcm9tcHRcbiAqIFdlIHRyZWF0IGFsbCByZXF1ZXN0cyB3aXRoIGEgYm9vbGVhbiByZXNwb25zZSBhcyBjb25maXJtYXRpb24gcHJvbXB0c1xuICovXG5mdW5jdGlvbiBpc0NvbmZpcm1hdGlvblByb21wdChtc2c6IElvUmVxdWVzdDxhbnksIGFueT4pOiBtc2cgaXMgSW9SZXF1ZXN0PGFueSwgYm9vbGVhbj4ge1xuICByZXR1cm4gdHlwZW9mIG1zZy5kZWZhdWx0UmVzcG9uc2UgPT09ICdib29sZWFuJztcbn1cblxuLyoqXG4gKiBIZWxwZXIgdG8gZXh0cmFjdCBpbmZvcm1hdGlvbiBmb3IgcHJvbXB0bHkgZnJvbSB0aGUgcmVxdWVzdFxuICovXG5mdW5jdGlvbiBleHRyYWN0UHJvbXB0SW5mbyhtc2c6IElvUmVxdWVzdDxhbnksIGFueT4pOiB7XG4gIGRlZmF1bHQ6IHN0cmluZztcbiAgY29udmVydEFuc3dlcjogKGlucHV0OiBzdHJpbmcpID0+IHN0cmluZyB8IG51bWJlcjtcbn0ge1xuICBjb25zdCBpc051bWJlciA9ICh0eXBlb2YgbXNnLmRlZmF1bHRSZXNwb25zZSA9PT0gJ251bWJlcicpO1xuICByZXR1cm4ge1xuICAgIGRlZmF1bHQ6IHV0aWwuZm9ybWF0KG1zZy5kZWZhdWx0UmVzcG9uc2UpLFxuICAgIGNvbnZlcnRBbnN3ZXI6IGlzTnVtYmVyID8gKHYpID0+IE51bWJlcih2KSA6ICh2KSA9PiBTdHJpbmcodiksXG4gIH07XG59XG5cbmNvbnN0IHN0eWxlTWFwOiBSZWNvcmQ8SW9NZXNzYWdlTGV2ZWwsIChzdHI6IHN0cmluZykgPT4gc3RyaW5nPiA9IHtcbiAgZXJyb3I6IGNoYWxrLnJlZCxcbiAgd2FybjogY2hhbGsueWVsbG93LFxuICByZXN1bHQ6IGNoYWxrLndoaXRlLFxuICBpbmZvOiBjaGFsay53aGl0ZSxcbiAgZGVidWc6IGNoYWxrLmdyYXksXG4gIHRyYWNlOiBjaGFsay5ncmF5LFxufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgcHJvY2VzcyBpcyBydW5uaW5nIGluIGEgQ0kgZW52aXJvbm1lbnRcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgcHJvY2VzcyBpcyBydW5uaW5nIGluIGEgQ0kgZW52aXJvbm1lbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ0koKTogYm9vbGVhbiB7XG4gIHJldHVybiBwcm9jZXNzLmVudi5DSSAhPT0gdW5kZWZpbmVkICYmIHByb2Nlc3MuZW52LkNJICE9PSAnZmFsc2UnICYmIHByb2Nlc3MuZW52LkNJICE9PSAnMCc7XG59XG4iXX0=
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "aws-cdk",
3
3
  "description": "CDK Toolkit, the command line tool for CDK apps",
4
- "version": "2.177.0",
4
+ "version": "2.178.0",
5
5
  "bin": {
6
6
  "cdk": "bin/cdk"
7
7
  },
@@ -103,10 +103,10 @@
103
103
  },
104
104
  "license": "Apache-2.0",
105
105
  "devDependencies": {
106
- "@aws-cdk/cdk-build-tools": "2.177.0-alpha.0",
107
- "@aws-cdk/cli-plugin-contract": "2.177.0",
108
- "@aws-cdk/pkglint": "2.177.0-alpha.0",
109
- "@aws-cdk/user-input-gen": "2.177.0-alpha.0",
106
+ "@aws-cdk/cdk-build-tools": "2.178.0-alpha.0",
107
+ "@aws-cdk/cli-plugin-contract": "2.178.0",
108
+ "@aws-cdk/pkglint": "2.178.0-alpha.0",
109
+ "@aws-cdk/user-input-gen": "2.178.0-alpha.0",
110
110
  "@octokit/rest": "^18.12.0",
111
111
  "@types/archiver": "^5.3.4",
112
112
  "@types/fs-extra": "^9.0.13",
@@ -121,7 +121,7 @@
121
121
  "@types/uuid": "^8.3.4",
122
122
  "@types/wrap-ansi": "^3.0.0",
123
123
  "@types/yargs": "^15.0.19",
124
- "aws-cdk-lib": "2.177.0",
124
+ "aws-cdk-lib": "2.178.0",
125
125
  "aws-sdk-client-mock": "^4.0.1",
126
126
  "aws-sdk-client-mock-jest": "^4.0.1",
127
127
  "axios": "^1.7.7",
@@ -139,9 +139,9 @@
139
139
  "ts-mock-imports": "^1.3.16",
140
140
  "xml-js": "^1.6.11",
141
141
  "@aws-cdk/cloud-assembly-schema": "^39.2.0",
142
- "@aws-cdk/cloudformation-diff": "2.177.0",
143
- "@aws-cdk/cx-api": "2.177.0",
144
- "@aws-cdk/region-info": "2.177.0",
142
+ "@aws-cdk/cloudformation-diff": "2.178.0",
143
+ "@aws-cdk/cx-api": "2.178.0",
144
+ "@aws-cdk/region-info": "2.178.0",
145
145
  "@aws-sdk/client-appsync": "^3.699.0",
146
146
  "@aws-sdk/client-cloudformation": "^3.699.0",
147
147
  "@aws-sdk/client-cloudwatch-logs": "^3.699.0",
@@ -173,7 +173,7 @@
173
173
  "@smithy/util-waiter": "^3.2.0",
174
174
  "archiver": "^5.3.2",
175
175
  "camelcase": "^6.3.0",
176
- "cdk-assets": "^3.0.0-rc.123",
176
+ "cdk-assets": "^3.0.0-rc.127",
177
177
  "cdk-from-cfn": "^0.162.0",
178
178
  "chalk": "^4",
179
179
  "chokidar": "^3.6.0",
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Sends a response to a prompt to stdin
3
+ * When using this in tests, call just before the prompt runs.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * sendResponse('y');
8
+ * await prompt('Confirm (y/n)?');
9
+ * ```
10
+ */
11
+ export declare function sendResponse(res: string, delay?: number): void;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sendResponse = sendResponse;
4
+ /**
5
+ * Sends a response to a prompt to stdin
6
+ * When using this in tests, call just before the prompt runs.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * sendResponse('y');
11
+ * await prompt('Confirm (y/n)?');
12
+ * ```
13
+ */
14
+ function sendResponse(res, delay = 0) {
15
+ if (!delay) {
16
+ setImmediate(() => process.stdin.emit('data', `${res}\n`));
17
+ }
18
+ else {
19
+ setTimeout(() => process.stdin.emit('data', `${res}\n`), delay);
20
+ }
21
+ }
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbXB0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByb21wdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFVQSxvQ0FNQztBQWhCRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixZQUFZLENBQUMsR0FBVyxFQUFFLEtBQUssR0FBRyxDQUFDO0lBQ2pELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztTQUFNLENBQUM7UUFDTixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsRSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2VuZHMgYSByZXNwb25zZSB0byBhIHByb21wdCB0byBzdGRpblxuICogV2hlbiB1c2luZyB0aGlzIGluIHRlc3RzLCBjYWxsIGp1c3QgYmVmb3JlIHRoZSBwcm9tcHQgcnVucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIHNlbmRSZXNwb25zZSgneScpO1xuICogYXdhaXQgcHJvbXB0KCdDb25maXJtICh5L24pPycpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW5kUmVzcG9uc2UocmVzOiBzdHJpbmcsIGRlbGF5ID0gMCkge1xuICBpZiAoIWRlbGF5KSB7XG4gICAgc2V0SW1tZWRpYXRlKCgpID0+IHByb2Nlc3Muc3RkaW4uZW1pdCgnZGF0YScsIGAke3Jlc31cXG5gKSk7XG4gIH0gZWxzZSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiBwcm9jZXNzLnN0ZGluLmVtaXQoJ2RhdGEnLCBgJHtyZXN9XFxuYCksIGRlbGF5KTtcbiAgfVxufVxuIl19
@@ -1,20 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const sdk_logger_1 = require("../../../lib/api/aws-auth/sdk-logger");
4
- const logging = require("../../../lib/logging");
5
4
  describe(sdk_logger_1.SdkToCliLogger, () => {
6
- const logger = new sdk_logger_1.SdkToCliLogger();
7
- const trace = jest.spyOn(logging, 'trace');
5
+ const ioHost = {
6
+ notify: jest.fn(),
7
+ requestResponse: jest.fn(),
8
+ };
9
+ const logger = new sdk_logger_1.SdkToCliLogger(ioHost);
8
10
  beforeEach(() => {
9
- trace.mockReset();
11
+ ioHost.notify.mockReset();
10
12
  });
11
- test.each(['trace', 'debug'])('%s method does not call trace', (meth) => {
12
- logger[meth]('test');
13
- expect(trace).not.toHaveBeenCalled();
13
+ test.each(['trace', 'debug'])('%s method does not call notify', (method) => {
14
+ logger[method]('test');
15
+ expect(ioHost.notify).not.toHaveBeenCalled();
14
16
  });
15
- test.each(['info', 'warn', 'error'])('%s method logs to trace', (meth) => {
16
- logger[meth]('test');
17
- expect(trace).toHaveBeenCalled();
17
+ test.each(['info', 'warn', 'error'])('%s method logs to notify', (method) => {
18
+ logger[method]('test');
19
+ expect(ioHost.notify).toHaveBeenCalled();
18
20
  });
19
21
  });
20
22
  const SUCCESS_CALL = {
@@ -70,4 +72,4 @@ test('formatting a failing SDK call includes the error', () => {
70
72
  const output = (0, sdk_logger_1.formatSdkLoggerContent)([ERROR_CALL]);
71
73
  expect(output).toContain('it failed');
72
74
  });
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLWxvZ2dlci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2RrLWxvZ2dlci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscUVBQThGO0FBQzlGLGdEQUFnRDtBQUVoRCxRQUFRLENBQUMsMkJBQWMsRUFBRSxHQUFHLEVBQUU7SUFDNUIsTUFBTSxNQUFNLEdBQUcsSUFBSSwyQkFBYyxFQUFFLENBQUM7SUFDcEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFM0MsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNwQixDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFnQyxDQUFDLENBQUMsK0JBQStCLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNyRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckIsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFnQyxDQUFDLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUN0RyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckIsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDbkMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILE1BQU0sWUFBWSxHQUFHO0lBQ25CLFVBQVUsRUFBRSxVQUFVO0lBQ3RCLFdBQVcsRUFBRSwwQkFBMEI7SUFDdkMsS0FBSyxFQUFFO1FBQ0wsTUFBTSxFQUFFLE9BQU87UUFDZixtQkFBbUIsRUFBRSxTQUFTO0tBQy9CO0lBQ0QsTUFBTSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFO0lBQzlDLFFBQVEsRUFBRTtRQUNSLGNBQWMsRUFBRSxHQUFHO1FBQ25CLFNBQVMsRUFBRSxNQUFNO1FBQ2pCLGlCQUFpQixFQUFFLEtBQUs7UUFDeEIsSUFBSSxFQUFFLFNBQVM7UUFDZixRQUFRLEVBQUUsQ0FBQztRQUNYLGVBQWUsRUFBRSxFQUFFO0tBQ3BCO0NBQ0YsQ0FBQztBQUVGLE1BQU0sVUFBVSxHQUFHO0lBQ2pCLFVBQVUsRUFBRSxVQUFVO0lBQ3RCLFdBQVcsRUFBRSwwQkFBMEI7SUFDdkMsS0FBSyxFQUFFO1FBQ0wsTUFBTSxFQUFFLE9BQU87UUFDZixtQkFBbUIsRUFBRSxTQUFTO0tBQy9CO0lBQ0QsS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQztJQUM3QixRQUFRLEVBQUU7UUFDUixjQUFjLEVBQUUsR0FBRztRQUNuQixRQUFRLEVBQUUsQ0FBQztRQUNYLGVBQWUsRUFBRSxFQUFFO0tBQ3BCO0NBQ0YsQ0FBQztBQUVGLElBQUksQ0FBQywyREFBMkQsRUFBRSxHQUFHLEVBQUU7SUFDckUsTUFBTSxNQUFNLEdBQUcsSUFBQSxtQ0FBc0IsRUFBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDdEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQ25DLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLHdEQUF3RCxFQUFFLEdBQUcsRUFBRTtJQUNsRSxNQUFNLE1BQU0sR0FBRyxJQUFBLG1DQUFzQixFQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNwRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDbkMsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsa0ZBQWtGLEVBQUUsR0FBRyxFQUFFO0lBQzVGLE1BQU0sTUFBTSxHQUFHLElBQUEsbUNBQXNCLEVBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNuQyxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQywrRUFBK0UsRUFBRSxHQUFHLEVBQUU7SUFDekYsTUFBTSxNQUFNLEdBQUcsSUFBQSxtQ0FBc0IsRUFBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDcEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLGtEQUFrRCxFQUFFLEdBQUcsRUFBRTtJQUM1RCxNQUFNLE1BQU0sR0FBRyxJQUFBLG1DQUFzQixFQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNwRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3hDLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0U2RrTG9nZ2VyQ29udGVudCwgU2RrVG9DbGlMb2dnZXIgfSBmcm9tICcuLi8uLi8uLi9saWIvYXBpL2F3cy1hdXRoL3Nkay1sb2dnZXInO1xuaW1wb3J0ICogYXMgbG9nZ2luZyBmcm9tICcuLi8uLi8uLi9saWIvbG9nZ2luZyc7XG5cbmRlc2NyaWJlKFNka1RvQ2xpTG9nZ2VyLCAoKSA9PiB7XG4gIGNvbnN0IGxvZ2dlciA9IG5ldyBTZGtUb0NsaUxvZ2dlcigpO1xuICBjb25zdCB0cmFjZSA9IGplc3Quc3B5T24obG9nZ2luZywgJ3RyYWNlJyk7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgdHJhY2UubW9ja1Jlc2V0KCk7XG4gIH0pO1xuXG4gIHRlc3QuZWFjaChbJ3RyYWNlJywgJ2RlYnVnJ10gYXMgQXJyYXk8a2V5b2YgU2RrVG9DbGlMb2dnZXI+KSgnJXMgbWV0aG9kIGRvZXMgbm90IGNhbGwgdHJhY2UnLCAobWV0aCkgPT4ge1xuICAgIGxvZ2dlclttZXRoXSgndGVzdCcpO1xuICAgIGV4cGVjdCh0cmFjZSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgfSk7XG5cbiAgdGVzdC5lYWNoKFsnaW5mbycsICd3YXJuJywgJ2Vycm9yJ10gYXMgQXJyYXk8a2V5b2YgU2RrVG9DbGlMb2dnZXI+KSgnJXMgbWV0aG9kIGxvZ3MgdG8gdHJhY2UnLCAobWV0aCkgPT4ge1xuICAgIGxvZ2dlclttZXRoXSgndGVzdCcpO1xuICAgIGV4cGVjdCh0cmFjZSkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICB9KTtcbn0pO1xuXG5jb25zdCBTVUNDRVNTX0NBTEwgPSB7XG4gIGNsaWVudE5hbWU6ICdTM0NsaWVudCcsXG4gIGNvbW1hbmROYW1lOiAnR2V0QnVja2V0TG9jYXRpb25Db21tYW5kJyxcbiAgaW5wdXQ6IHtcbiAgICBCdWNrZXQ6ICcuLi4uLicsXG4gICAgRXhwZWN0ZWRCdWNrZXRPd25lcjogdW5kZWZpbmVkLFxuICB9LFxuICBvdXRwdXQ6IHsgTG9jYXRpb25Db25zdHJhaW50OiAnZXUtY2VudHJhbC0xJyB9LFxuICBtZXRhZGF0YToge1xuICAgIGh0dHBTdGF0dXNDb2RlOiAyMDAsXG4gICAgcmVxdWVzdElkOiAnLi4uLicsXG4gICAgZXh0ZW5kZWRSZXF1ZXN0SWQ6ICcuLi4nLFxuICAgIGNmSWQ6IHVuZGVmaW5lZCxcbiAgICBhdHRlbXB0czogMixcbiAgICB0b3RhbFJldHJ5RGVsYXk6IDMwLFxuICB9LFxufTtcblxuY29uc3QgRVJST1JfQ0FMTCA9IHtcbiAgY2xpZW50TmFtZTogJ1MzQ2xpZW50JyxcbiAgY29tbWFuZE5hbWU6ICdHZXRCdWNrZXRMb2NhdGlvbkNvbW1hbmQnLFxuICBpbnB1dDoge1xuICAgIEJ1Y2tldDogJy4uLi4uJyxcbiAgICBFeHBlY3RlZEJ1Y2tldE93bmVyOiB1bmRlZmluZWQsXG4gIH0sXG4gIGVycm9yOiBuZXcgRXJyb3IoJ2l0IGZhaWxlZCcpLFxuICBtZXRhZGF0YToge1xuICAgIGh0dHBTdGF0dXNDb2RlOiAyMDAsXG4gICAgYXR0ZW1wdHM6IDIsXG4gICAgdG90YWxSZXRyeURlbGF5OiAzMCxcbiAgfSxcbn07XG5cbnRlc3QoJ2Zvcm1hdHRpbmcgYSBzdWNjZXNzZnVsIFNESyBjYWxsIGxvb2tzIGJyb2FkbHkgcmVhc29uYWJsZScsICgpID0+IHtcbiAgY29uc3Qgb3V0cHV0ID0gZm9ybWF0U2RrTG9nZ2VyQ29udGVudChbU1VDQ0VTU19DQUxMXSk7XG4gIGV4cGVjdChvdXRwdXQpLnRvTWF0Y2hTbmFwc2hvdCgpO1xufSk7XG5cbnRlc3QoJ2Zvcm1hdHRpbmcgYSBmYWlsaW5nIFNESyBjYWxsIGxvb2tzIGJyb2FkbHkgcmVhc29uYWJsZScsICgpID0+IHtcbiAgY29uc3Qgb3V0cHV0ID0gZm9ybWF0U2RrTG9nZ2VyQ29udGVudChbRVJST1JfQ0FMTF0pO1xuICBleHBlY3Qob3V0cHV0KS50b01hdGNoU25hcHNob3QoKTtcbn0pO1xuXG50ZXN0KCdmb3JtYXR0aW5nIGEgc3VjY2Vzc2Z1bCBTREsgY2FsbCBpbmNsdWRlcyBhdHRlbXB0cyBhbmQgcmV0cmllcyBpZiBncmVhdGVyIHRoYW4gMScsICgpID0+IHtcbiAgY29uc3Qgb3V0cHV0ID0gZm9ybWF0U2RrTG9nZ2VyQ29udGVudChbU1VDQ0VTU19DQUxMXSk7XG4gIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignMiBhdHRlbXB0cycpO1xuICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oJzMwbXMnKTtcbn0pO1xuXG50ZXN0KCdmb3JtYXR0aW5nIGEgZmFpbGluZyBTREsgY2FsbCBpbmNsdWRlcyBhdHRlbXB0cyBhbmQgcmV0cmllcyBpZiBncmVhdGVyIHRoYW4gMScsICgpID0+IHtcbiAgY29uc3Qgb3V0cHV0ID0gZm9ybWF0U2RrTG9nZ2VyQ29udGVudChbRVJST1JfQ0FMTF0pO1xuICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oJzIgYXR0ZW1wdHMnKTtcbiAgZXhwZWN0KG91dHB1dCkudG9Db250YWluKCczMG1zJyk7XG59KTtcblxudGVzdCgnZm9ybWF0dGluZyBhIGZhaWxpbmcgU0RLIGNhbGwgaW5jbHVkZXMgdGhlIGVycm9yJywgKCkgPT4ge1xuICBjb25zdCBvdXRwdXQgPSBmb3JtYXRTZGtMb2dnZXJDb250ZW50KFtFUlJPUl9DQUxMXSk7XG4gIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignaXQgZmFpbGVkJyk7XG59KTtcbiJdfQ==
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLWxvZ2dlci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2RrLWxvZ2dlci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscUVBQThGO0FBRTlGLFFBQVEsQ0FBQywyQkFBYyxFQUFFLEdBQUcsRUFBRTtJQUM1QixNQUFNLE1BQU0sR0FBRztRQUNiLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO1FBQ2pCLGVBQWUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO0tBQzNCLENBQUM7SUFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLDJCQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFMUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBZ0MsQ0FBQyxDQUFDLGdDQUFnQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFDeEcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQWdDLENBQUMsQ0FBQywwQkFBMEIsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQ3pHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDM0MsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILE1BQU0sWUFBWSxHQUFHO0lBQ25CLFVBQVUsRUFBRSxVQUFVO0lBQ3RCLFdBQVcsRUFBRSwwQkFBMEI7SUFDdkMsS0FBSyxFQUFFO1FBQ0wsTUFBTSxFQUFFLE9BQU87UUFDZixtQkFBbUIsRUFBRSxTQUFTO0tBQy9CO0lBQ0QsTUFBTSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFO0lBQzlDLFFBQVEsRUFBRTtRQUNSLGNBQWMsRUFBRSxHQUFHO1FBQ25CLFNBQVMsRUFBRSxNQUFNO1FBQ2pCLGlCQUFpQixFQUFFLEtBQUs7UUFDeEIsSUFBSSxFQUFFLFNBQVM7UUFDZixRQUFRLEVBQUUsQ0FBQztRQUNYLGVBQWUsRUFBRSxFQUFFO0tBQ3BCO0NBQ0YsQ0FBQztBQUVGLE1BQU0sVUFBVSxHQUFHO0lBQ2pCLFVBQVUsRUFBRSxVQUFVO0lBQ3RCLFdBQVcsRUFBRSwwQkFBMEI7SUFDdkMsS0FBSyxFQUFFO1FBQ0wsTUFBTSxFQUFFLE9BQU87UUFDZixtQkFBbUIsRUFBRSxTQUFTO0tBQy9CO0lBQ0QsS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQztJQUM3QixRQUFRLEVBQUU7UUFDUixjQUFjLEVBQUUsR0FBRztRQUNuQixRQUFRLEVBQUUsQ0FBQztRQUNYLGVBQWUsRUFBRSxFQUFFO0tBQ3BCO0NBQ0YsQ0FBQztBQUVGLElBQUksQ0FBQywyREFBMkQsRUFBRSxHQUFHLEVBQUU7SUFDckUsTUFBTSxNQUFNLEdBQUcsSUFBQSxtQ0FBc0IsRUFBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDdEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQ25DLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLHdEQUF3RCxFQUFFLEdBQUcsRUFBRTtJQUNsRSxNQUFNLE1BQU0sR0FBRyxJQUFBLG1DQUFzQixFQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNwRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDbkMsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsa0ZBQWtGLEVBQUUsR0FBRyxFQUFFO0lBQzVGLE1BQU0sTUFBTSxHQUFHLElBQUEsbUNBQXNCLEVBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNuQyxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQywrRUFBK0UsRUFBRSxHQUFHLEVBQUU7SUFDekYsTUFBTSxNQUFNLEdBQUcsSUFBQSxtQ0FBc0IsRUFBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDcEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLGtEQUFrRCxFQUFFLEdBQUcsRUFBRTtJQUM1RCxNQUFNLE1BQU0sR0FBRyxJQUFBLG1DQUFzQixFQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNwRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3hDLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0U2RrTG9nZ2VyQ29udGVudCwgU2RrVG9DbGlMb2dnZXIgfSBmcm9tICcuLi8uLi8uLi9saWIvYXBpL2F3cy1hdXRoL3Nkay1sb2dnZXInO1xuXG5kZXNjcmliZShTZGtUb0NsaUxvZ2dlciwgKCkgPT4ge1xuICBjb25zdCBpb0hvc3QgPSB7XG4gICAgbm90aWZ5OiBqZXN0LmZuKCksXG4gICAgcmVxdWVzdFJlc3BvbnNlOiBqZXN0LmZuKCksXG4gIH07XG4gIGNvbnN0IGxvZ2dlciA9IG5ldyBTZGtUb0NsaUxvZ2dlcihpb0hvc3QpO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGlvSG9zdC5ub3RpZnkubW9ja1Jlc2V0KCk7XG4gIH0pO1xuXG4gIHRlc3QuZWFjaChbJ3RyYWNlJywgJ2RlYnVnJ10gYXMgQXJyYXk8a2V5b2YgU2RrVG9DbGlMb2dnZXI+KSgnJXMgbWV0aG9kIGRvZXMgbm90IGNhbGwgbm90aWZ5JywgKG1ldGhvZCkgPT4ge1xuICAgIGxvZ2dlclttZXRob2RdKCd0ZXN0Jyk7XG4gICAgZXhwZWN0KGlvSG9zdC5ub3RpZnkpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xuXG4gIHRlc3QuZWFjaChbJ2luZm8nLCAnd2FybicsICdlcnJvciddIGFzIEFycmF5PGtleW9mIFNka1RvQ2xpTG9nZ2VyPikoJyVzIG1ldGhvZCBsb2dzIHRvIG5vdGlmeScsIChtZXRob2QpID0+IHtcbiAgICBsb2dnZXJbbWV0aG9kXSgndGVzdCcpO1xuICAgIGV4cGVjdChpb0hvc3Qubm90aWZ5KS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xufSk7XG5cbmNvbnN0IFNVQ0NFU1NfQ0FMTCA9IHtcbiAgY2xpZW50TmFtZTogJ1MzQ2xpZW50JyxcbiAgY29tbWFuZE5hbWU6ICdHZXRCdWNrZXRMb2NhdGlvbkNvbW1hbmQnLFxuICBpbnB1dDoge1xuICAgIEJ1Y2tldDogJy4uLi4uJyxcbiAgICBFeHBlY3RlZEJ1Y2tldE93bmVyOiB1bmRlZmluZWQsXG4gIH0sXG4gIG91dHB1dDogeyBMb2NhdGlvbkNvbnN0cmFpbnQ6ICdldS1jZW50cmFsLTEnIH0sXG4gIG1ldGFkYXRhOiB7XG4gICAgaHR0cFN0YXR1c0NvZGU6IDIwMCxcbiAgICByZXF1ZXN0SWQ6ICcuLi4uJyxcbiAgICBleHRlbmRlZFJlcXVlc3RJZDogJy4uLicsXG4gICAgY2ZJZDogdW5kZWZpbmVkLFxuICAgIGF0dGVtcHRzOiAyLFxuICAgIHRvdGFsUmV0cnlEZWxheTogMzAsXG4gIH0sXG59O1xuXG5jb25zdCBFUlJPUl9DQUxMID0ge1xuICBjbGllbnROYW1lOiAnUzNDbGllbnQnLFxuICBjb21tYW5kTmFtZTogJ0dldEJ1Y2tldExvY2F0aW9uQ29tbWFuZCcsXG4gIGlucHV0OiB7XG4gICAgQnVja2V0OiAnLi4uLi4nLFxuICAgIEV4cGVjdGVkQnVja2V0T3duZXI6IHVuZGVmaW5lZCxcbiAgfSxcbiAgZXJyb3I6IG5ldyBFcnJvcignaXQgZmFpbGVkJyksXG4gIG1ldGFkYXRhOiB7XG4gICAgaHR0cFN0YXR1c0NvZGU6IDIwMCxcbiAgICBhdHRlbXB0czogMixcbiAgICB0b3RhbFJldHJ5RGVsYXk6IDMwLFxuICB9LFxufTtcblxudGVzdCgnZm9ybWF0dGluZyBhIHN1Y2Nlc3NmdWwgU0RLIGNhbGwgbG9va3MgYnJvYWRseSByZWFzb25hYmxlJywgKCkgPT4ge1xuICBjb25zdCBvdXRwdXQgPSBmb3JtYXRTZGtMb2dnZXJDb250ZW50KFtTVUNDRVNTX0NBTExdKTtcbiAgZXhwZWN0KG91dHB1dCkudG9NYXRjaFNuYXBzaG90KCk7XG59KTtcblxudGVzdCgnZm9ybWF0dGluZyBhIGZhaWxpbmcgU0RLIGNhbGwgbG9va3MgYnJvYWRseSByZWFzb25hYmxlJywgKCkgPT4ge1xuICBjb25zdCBvdXRwdXQgPSBmb3JtYXRTZGtMb2dnZXJDb250ZW50KFtFUlJPUl9DQUxMXSk7XG4gIGV4cGVjdChvdXRwdXQpLnRvTWF0Y2hTbmFwc2hvdCgpO1xufSk7XG5cbnRlc3QoJ2Zvcm1hdHRpbmcgYSBzdWNjZXNzZnVsIFNESyBjYWxsIGluY2x1ZGVzIGF0dGVtcHRzIGFuZCByZXRyaWVzIGlmIGdyZWF0ZXIgdGhhbiAxJywgKCkgPT4ge1xuICBjb25zdCBvdXRwdXQgPSBmb3JtYXRTZGtMb2dnZXJDb250ZW50KFtTVUNDRVNTX0NBTExdKTtcbiAgZXhwZWN0KG91dHB1dCkudG9Db250YWluKCcyIGF0dGVtcHRzJyk7XG4gIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignMzBtcycpO1xufSk7XG5cbnRlc3QoJ2Zvcm1hdHRpbmcgYSBmYWlsaW5nIFNESyBjYWxsIGluY2x1ZGVzIGF0dGVtcHRzIGFuZCByZXRyaWVzIGlmIGdyZWF0ZXIgdGhhbiAxJywgKCkgPT4ge1xuICBjb25zdCBvdXRwdXQgPSBmb3JtYXRTZGtMb2dnZXJDb250ZW50KFtFUlJPUl9DQUxMXSk7XG4gIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignMiBhdHRlbXB0cycpO1xuICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oJzMwbXMnKTtcbn0pO1xuXG50ZXN0KCdmb3JtYXR0aW5nIGEgZmFpbGluZyBTREsgY2FsbCBpbmNsdWRlcyB0aGUgZXJyb3InLCAoKSA9PiB7XG4gIGNvbnN0IG91dHB1dCA9IGZvcm1hdFNka0xvZ2dlckNvbnRlbnQoW0VSUk9SX0NBTExdKTtcbiAgZXhwZWN0KG91dHB1dCkudG9Db250YWluKCdpdCBmYWlsZWQnKTtcbn0pO1xuIl19