@cucumber/cucumber 13.0.0 → 13.1.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 (78) hide show
  1. package/lib/api/emit_support_code_messages.js +4 -38
  2. package/lib/api/run_cucumber.js +4 -4
  3. package/lib/api/wrapper.d.mts +5 -0
  4. package/lib/api/wrapper.mjs +6 -6
  5. package/lib/formatter/builder.d.ts +1 -1
  6. package/lib/formatter/builder.js +1 -1
  7. package/lib/formatter/create_stream.js +2 -3
  8. package/lib/formatter/helpers/event_data_collector.d.ts +14 -14
  9. package/lib/formatter/helpers/event_data_collector.js +14 -39
  10. package/lib/formatter/helpers/gherkin_document_parser.d.ts +5 -5
  11. package/lib/formatter/helpers/gherkin_document_parser.js +1 -1
  12. package/lib/formatter/helpers/issue_helpers.d.ts +6 -6
  13. package/lib/formatter/helpers/issue_helpers.js +1 -1
  14. package/lib/formatter/helpers/pickle_parser.d.ts +9 -9
  15. package/lib/formatter/helpers/pickle_parser.js +1 -1
  16. package/lib/formatter/helpers/step_argument_formatter.d.ts +2 -2
  17. package/lib/formatter/helpers/step_argument_formatter.js +1 -1
  18. package/lib/formatter/helpers/summary_helpers.d.ts +2 -2
  19. package/lib/formatter/helpers/summary_helpers.js +12 -45
  20. package/lib/formatter/helpers/test_case_attempt_formatter.js +12 -45
  21. package/lib/formatter/helpers/test_case_attempt_parser.d.ts +5 -5
  22. package/lib/formatter/helpers/test_case_attempt_parser.js +9 -37
  23. package/lib/formatter/helpers/usage_helpers/index.d.ts +3 -3
  24. package/lib/formatter/helpers/usage_helpers/index.js +9 -44
  25. package/lib/formatter/json_formatter.d.ts +20 -20
  26. package/lib/formatter/json_formatter.js +5 -38
  27. package/lib/formatter/progress_formatter.d.ts +3 -2
  28. package/lib/formatter/progress_formatter.js +8 -41
  29. package/lib/formatter/rerun_formatter.js +3 -36
  30. package/lib/formatter/snippets_formatter.js +3 -36
  31. package/lib/formatter/step_definition_snippet_builder/index.d.ts +3 -3
  32. package/lib/formatter/step_definition_snippet_builder/index.js +1 -1
  33. package/lib/formatter/summary_formatter.d.ts +2 -2
  34. package/lib/formatter/summary_formatter.js +1 -1
  35. package/lib/formatter/usage_formatter.js +4 -37
  36. package/lib/formatter/usage_json_formatter.js +1 -1
  37. package/lib/index.d.ts +3 -3
  38. package/lib/index.js +6 -7
  39. package/lib/models/data_table.d.ts +2 -2
  40. package/lib/models/data_table.js +1 -1
  41. package/lib/models/definition.d.ts +2 -2
  42. package/lib/models/definition.js +1 -1
  43. package/lib/models/test_case_hook_definition.d.ts +2 -2
  44. package/lib/models/test_case_hook_definition.js +1 -1
  45. package/lib/models/test_step_hook_definition.d.ts +2 -2
  46. package/lib/models/test_step_hook_definition.js +1 -1
  47. package/lib/pickle_filter.d.ts +8 -7
  48. package/lib/pickle_filter.js +1 -1
  49. package/lib/runtime/attachment_manager/index.d.ts +3 -3
  50. package/lib/runtime/attachment_manager/index.js +12 -45
  51. package/lib/runtime/coordinator.d.ts +4 -3
  52. package/lib/runtime/coordinator.js +14 -3
  53. package/lib/runtime/helpers.d.ts +3 -3
  54. package/lib/runtime/helpers.js +6 -39
  55. package/lib/runtime/make_runtime.js +2 -2
  56. package/lib/runtime/parallel/adapter.d.ts +5 -2
  57. package/lib/runtime/parallel/adapter.js +14 -2
  58. package/lib/runtime/step_runner.d.ts +3 -3
  59. package/lib/runtime/step_runner.js +6 -39
  60. package/lib/runtime/stopwatch.d.ts +1 -1
  61. package/lib/runtime/test_case_runner.d.ts +11 -12
  62. package/lib/runtime/test_case_runner.js +20 -57
  63. package/lib/runtime/types.d.ts +6 -1
  64. package/lib/runtime/types.js +1 -1
  65. package/lib/step_arguments.d.ts +4 -4
  66. package/lib/step_arguments.js +1 -1
  67. package/lib/support_code_library_builder/index.d.ts +2 -3
  68. package/lib/support_code_library_builder/index.js +1 -1
  69. package/lib/support_code_library_builder/parallel_can_assign_helpers.js +1 -1
  70. package/lib/support_code_library_builder/types.d.ts +10 -10
  71. package/lib/support_code_library_builder/types.js +1 -1
  72. package/lib/time.d.ts +2 -2
  73. package/lib/time.js +5 -38
  74. package/lib/version.d.ts +1 -1
  75. package/lib/version.js +3 -3
  76. package/lib/wrapper.d.mts +43 -0
  77. package/lib/wrapper.mjs +37 -41
  78. package/package.json +20 -22
@@ -9,4 +9,4 @@ export interface IStopwatch {
9
9
  duration: () => Duration;
10
10
  }
11
11
  export declare const create: (base?: Duration) => IStopwatch;
12
- export declare const timestamp: () => import("@cucumber/messages").Timestamp;
12
+ export declare const timestamp: () => import("@cucumber/messages", { with: { "resolution-mode": "import" } }).Timestamp;
@@ -1,6 +1,5 @@
1
1
  import type { EventEmitter } from 'node:events';
2
- import * as messages from '@cucumber/messages';
3
- import { type IdGenerator } from '@cucumber/messages';
2
+ import { type GherkinDocument, type IdGenerator, type Pickle, type PickleStep, type TestCase, type TestStep, type TestStepResult, TestStepResultStatus } from '@cucumber/messages';
4
3
  import type { JsonObject } from 'type-fest';
5
4
  import type StepDefinitionSnippetBuilder from '../formatter/step_definition_snippet_builder';
6
5
  import type { IDefinition } from '../models/definition';
@@ -11,10 +10,10 @@ import { type RunStepResult } from './step_runner';
11
10
  export interface INewTestCaseRunnerOptions {
12
11
  workerId?: string;
13
12
  eventBroadcaster: EventEmitter;
14
- gherkinDocument: messages.GherkinDocument;
13
+ gherkinDocument: GherkinDocument;
15
14
  newId: IdGenerator.NewId;
16
- pickle: messages.Pickle;
17
- testCase: messages.TestCase;
15
+ pickle: Pickle;
16
+ testCase: TestCase;
18
17
  retries: number;
19
18
  skip: boolean;
20
19
  filterStackTraces: boolean;
@@ -44,15 +43,15 @@ export default class TestCaseRunner {
44
43
  resetTestProgressData(): void;
45
44
  getBeforeStepHookDefinitions(): TestStepHookDefinition[];
46
45
  getAfterStepHookDefinitions(): TestStepHookDefinition[];
47
- getWorstStepResult(): messages.TestStepResult;
48
- invokeStep(step: messages.PickleStep, stepDefinition: IDefinition, hookParameter?: ITestCaseHookParameter): Promise<RunStepResult>;
46
+ getWorstStepResult(): TestStepResult;
47
+ invokeStep(step: PickleStep, stepDefinition: IDefinition, hookParameter?: ITestCaseHookParameter): Promise<RunStepResult>;
49
48
  isSkippingSteps(): boolean;
50
49
  isExplicitlySkipped(): boolean;
51
50
  shouldSkipHook(isBeforeHook: boolean): boolean;
52
- aroundTestStep(testStepId: string, runStepFn: () => Promise<messages.TestStepResult>): Promise<void>;
53
- run(): Promise<messages.TestStepResultStatus>;
51
+ aroundTestStep(testStepId: string, runStepFn: () => Promise<TestStepResult>): Promise<void>;
52
+ run(): Promise<TestStepResultStatus>;
54
53
  runAttempt(attempt: number, moreAttemptsRemaining: boolean): Promise<boolean>;
55
- runHook(hookDefinition: TestCaseHookDefinition, hookParameter: ITestCaseHookParameter, isBeforeHook: boolean): Promise<messages.TestStepResult>;
56
- runStepHooks(stepHooks: TestStepHookDefinition[], pickleStep: messages.PickleStep, stepResult?: RunStepResult): Promise<messages.TestStepResult[]>;
57
- runStep(pickleStep: messages.PickleStep, testStep: messages.TestStep): Promise<RunStepResult>;
54
+ runHook(hookDefinition: TestCaseHookDefinition, hookParameter: ITestCaseHookParameter, isBeforeHook: boolean): Promise<TestStepResult>;
55
+ runStepHooks(stepHooks: TestStepHookDefinition[], pickleStep: PickleStep, stepResult?: RunStepResult): Promise<TestStepResult[]>;
56
+ runStep(pickleStep: PickleStep, testStep: TestStep): Promise<RunStepResult>;
58
57
  }
@@ -1,42 +1,8 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
36
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
4
  };
38
5
  Object.defineProperty(exports, "__esModule", { value: true });
39
- const messages = __importStar(require("@cucumber/messages"));
40
6
  const messages_1 = require("@cucumber/messages");
41
7
  const value_checker_1 = require("../value_checker");
42
8
  const attachment_manager_1 = __importDefault(require("./attachment_manager"));
@@ -114,10 +80,8 @@ class TestCaseRunner {
114
80
  getWorstStepResult() {
115
81
  if (this.testStepResults.length === 0) {
116
82
  return {
117
- status: this.skip
118
- ? messages.TestStepResultStatus.SKIPPED
119
- : messages.TestStepResultStatus.PASSED,
120
- duration: messages.TimeConversion.millisecondsToDuration(0),
83
+ status: this.skip ? messages_1.TestStepResultStatus.SKIPPED : messages_1.TestStepResultStatus.PASSED,
84
+ duration: messages_1.TimeConversion.millisecondsToDuration(0),
121
85
  };
122
86
  }
123
87
  return (0, messages_1.getWorstTestStepResult)(this.testStepResults);
@@ -133,10 +97,10 @@ class TestCaseRunner {
133
97
  });
134
98
  }
135
99
  isSkippingSteps() {
136
- return this.getWorstStepResult().status !== messages.TestStepResultStatus.PASSED;
100
+ return this.getWorstStepResult().status !== messages_1.TestStepResultStatus.PASSED;
137
101
  }
138
102
  isExplicitlySkipped() {
139
- return !this.skip && this.getWorstStepResult().status === messages.TestStepResultStatus.SKIPPED;
103
+ return !this.skip && this.getWorstStepResult().status === messages_1.TestStepResultStatus.SKIPPED;
140
104
  }
141
105
  shouldSkipHook(isBeforeHook) {
142
106
  return this.skip || (this.isSkippingSteps() && isBeforeHook);
@@ -204,7 +168,7 @@ class TestCaseRunner {
204
168
  hookParameter.result = this.getWorstStepResult();
205
169
  hookParameter.error = error;
206
170
  hookParameter.willBeRetried =
207
- this.getWorstStepResult().status === messages.TestStepResultStatus.FAILED &&
171
+ this.getWorstStepResult().status === messages_1.TestStepResultStatus.FAILED &&
208
172
  moreAttemptsRemaining;
209
173
  }
210
174
  return await this.runHook(findHookDefinition(testStep.hookId, this.supportCodeLibrary), hookParameter, !didWeRunStepsYet);
@@ -218,8 +182,7 @@ class TestCaseRunner {
218
182
  }
219
183
  });
220
184
  }
221
- const willBeRetried = this.getWorstStepResult().status === messages.TestStepResultStatus.FAILED &&
222
- moreAttemptsRemaining;
185
+ const willBeRetried = this.getWorstStepResult().status === messages_1.TestStepResultStatus.FAILED && moreAttemptsRemaining;
223
186
  const testCaseFinished = {
224
187
  testCaseFinished: {
225
188
  testCaseStartedId: this.currentTestCaseStartedId,
@@ -233,8 +196,8 @@ class TestCaseRunner {
233
196
  async runHook(hookDefinition, hookParameter, isBeforeHook) {
234
197
  if (this.shouldSkipHook(isBeforeHook)) {
235
198
  return {
236
- status: messages.TestStepResultStatus.SKIPPED,
237
- duration: messages.TimeConversion.millisecondsToDuration(0),
199
+ status: messages_1.TestStepResultStatus.SKIPPED,
200
+ duration: messages_1.TimeConversion.millisecondsToDuration(0),
238
201
  };
239
202
  }
240
203
  const { result } = await this.invokeStep(null, hookDefinition, hookParameter);
@@ -261,8 +224,8 @@ class TestCaseRunner {
261
224
  if (this.isExplicitlySkipped()) {
262
225
  return {
263
226
  result: {
264
- status: messages.TestStepResultStatus.SKIPPED,
265
- duration: messages.TimeConversion.millisecondsToDuration(0),
227
+ status: messages_1.TestStepResultStatus.SKIPPED,
228
+ duration: messages_1.TimeConversion.millisecondsToDuration(0),
266
229
  },
267
230
  };
268
231
  }
@@ -279,31 +242,31 @@ class TestCaseRunner {
279
242
  });
280
243
  return {
281
244
  result: {
282
- status: messages.TestStepResultStatus.UNDEFINED,
283
- duration: messages.TimeConversion.millisecondsToDuration(0),
245
+ status: messages_1.TestStepResultStatus.UNDEFINED,
246
+ duration: messages_1.TimeConversion.millisecondsToDuration(0),
284
247
  },
285
248
  };
286
249
  }
287
250
  else if (stepDefinitions.length > 1) {
288
251
  return {
289
252
  result: {
290
- status: messages.TestStepResultStatus.AMBIGUOUS,
291
- duration: messages.TimeConversion.millisecondsToDuration(0),
253
+ status: messages_1.TestStepResultStatus.AMBIGUOUS,
254
+ duration: messages_1.TimeConversion.millisecondsToDuration(0),
292
255
  },
293
256
  };
294
257
  }
295
258
  else if (this.isSkippingSteps()) {
296
259
  return {
297
260
  result: {
298
- status: messages.TestStepResultStatus.SKIPPED,
299
- duration: messages.TimeConversion.millisecondsToDuration(0),
261
+ status: messages_1.TestStepResultStatus.SKIPPED,
262
+ duration: messages_1.TimeConversion.millisecondsToDuration(0),
300
263
  },
301
264
  };
302
265
  }
303
266
  let stepResult;
304
267
  let error;
305
268
  let stepResults = await this.runStepHooks(this.getBeforeStepHookDefinitions(), pickleStep);
306
- if ((0, messages_1.getWorstTestStepResult)(stepResults).status !== messages.TestStepResultStatus.FAILED) {
269
+ if ((0, messages_1.getWorstTestStepResult)(stepResults).status !== messages_1.TestStepResultStatus.FAILED) {
307
270
  stepResult = await this.invokeStep(pickleStep, stepDefinitions[0]);
308
271
  stepResults.push(stepResult.result);
309
272
  error = stepResult.error;
@@ -311,9 +274,9 @@ class TestCaseRunner {
311
274
  const afterStepHookResults = await this.runStepHooks(this.getAfterStepHookDefinitions(), pickleStep, stepResult);
312
275
  stepResults = stepResults.concat(afterStepHookResults);
313
276
  const finalStepResult = (0, messages_1.getWorstTestStepResult)(stepResults);
314
- let finalDuration = messages.TimeConversion.millisecondsToDuration(0);
277
+ let finalDuration = messages_1.TimeConversion.millisecondsToDuration(0);
315
278
  for (const result of stepResults) {
316
- finalDuration = messages.TimeConversion.addDurations(finalDuration, result.duration);
279
+ finalDuration = messages_1.TimeConversion.addDurations(finalDuration, result.duration);
317
280
  }
318
281
  finalStepResult.duration = finalDuration;
319
282
  return {
@@ -332,4 +295,4 @@ function findHookDefinition(id, supportCodeLibrary) {
332
295
  function findStepDefinition(id, supportCodeLibrary) {
333
296
  return supportCodeLibrary.stepDefinitions.find((definition) => definition.id === id);
334
297
  }
335
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF9jYXNlX3J1bm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL3Rlc3RfY2FzZV9ydW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSw2REFBOEM7QUFDOUMsaURBQTRGO0FBYTVGLG9EQUFrRTtBQUNsRSw4RUFBb0Q7QUFDcEQsdURBQWtEO0FBQ2xELGdFQUE4RDtBQUM5RCwyQ0FBdUM7QUFpQnZDLE1BQXFCLGNBQWM7SUFDaEIsUUFBUSxDQUFvQjtJQUM1QixpQkFBaUIsQ0FBbUI7SUFDN0Msd0JBQXdCLENBQVE7SUFDaEMsaUJBQWlCLENBQVE7SUFDaEIsZ0JBQWdCLENBQWM7SUFDOUIsZUFBZSxDQUEwQjtJQUN6QyxLQUFLLENBQW1CO0lBQ3hCLE1BQU0sQ0FBaUI7SUFDdkIsUUFBUSxDQUFtQjtJQUMzQixXQUFXLENBQVE7SUFDbkIsSUFBSSxDQUFTO0lBQ2IsaUJBQWlCLENBQVM7SUFDMUIsa0JBQWtCLENBQW9CO0lBQ3RDLGNBQWMsQ0FBOEI7SUFDckQsZUFBZSxDQUEyQjtJQUMxQyxLQUFLLENBQUs7SUFDRCxlQUFlLENBQVk7SUFFNUMsWUFBWSxFQUNWLFFBQVEsRUFDUixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLEtBQUssRUFDTCxNQUFNLEVBQ04sUUFBUSxFQUNSLE9BQU8sR0FBRyxDQUFDLEVBQ1gsSUFBSSxFQUNKLGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLGNBQWMsR0FDWTtRQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtRQUN4QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSw0QkFBaUIsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO1lBQzNFLElBQUksSUFBQSxnQ0FBZ0IsRUFBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO2dCQUM3QyxNQUFNLElBQUksS0FBSyxDQUNiLHNHQUFzRyxDQUN2RyxDQUFBO1lBQ0gsQ0FBQztZQUNELE1BQU0sVUFBVSxHQUFzQjtnQkFDcEMsVUFBVSxFQUFFO29CQUNWLElBQUksRUFBRSxJQUFJO29CQUNWLGVBQWUsRUFBRSxLQUFLLENBQUMsUUFBUTtvQkFDL0IsU0FBUyxFQUFFLEtBQUssQ0FBQyxXQUFXO29CQUM1QixRQUFRO29CQUNSLGlCQUFpQixFQUFFLElBQUksQ0FBQyx3QkFBd0I7b0JBQ2hELFVBQVUsRUFBRSxJQUFJLENBQUMsaUJBQWlCO29CQUNsQyxTQUFTLEVBQUUsSUFBQSxxQkFBUyxHQUFFO2lCQUN2QjthQUNGLENBQUE7WUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQTtRQUNwRCxDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQTtRQUN4QyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQTtRQUN0QyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUMzQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtRQUN4QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtRQUNoQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUE7UUFDMUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFBO1FBQzVDLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFBO1FBQ3RDLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFBO1FBQ3BDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFBO0lBQzlCLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7WUFDN0MsTUFBTSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUNsRSxHQUFHLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQzVELElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7WUFDOUQsVUFBVSxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1NBQzFCLENBQUMsQ0FBQTtRQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQTtJQUMzQixDQUFDO0lBRUQsNEJBQTRCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLDZCQUE2QixDQUFDLE1BQU0sQ0FBQyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQ3JGLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQzlDLENBQUE7SUFDSCxDQUFDO0lBRUQsMkJBQTJCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLDRCQUE0QjthQUN4RCxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ1IsT0FBTyxFQUFFO2FBQ1QsTUFBTSxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDOUUsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE9BQU87Z0JBQ0wsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNmLENBQUMsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsT0FBTztvQkFDdkMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNO2dCQUN4QyxRQUFRLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7YUFDNUQsQ0FBQTtRQUNILENBQUM7UUFDRCxPQUFPLElBQUEsaUNBQXNCLEVBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBQ3JELENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUNkLElBQXlCLEVBQ3pCLGNBQTJCLEVBQzNCLGFBQXNDO1FBRXRDLE9BQU8sTUFBTSxxQkFBVSxDQUFDLEdBQUcsQ0FBQztZQUMxQixjQUFjLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWM7WUFDdEQsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtZQUN6QyxhQUFhO1lBQ2IsSUFBSTtZQUNKLGNBQWM7WUFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7U0FDbEIsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFBO0lBQ2xGLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUE7SUFDakcsQ0FBQztJQUVELGNBQWMsQ0FBQyxZQUFxQjtRQUNsQyxPQUFPLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksWUFBWSxDQUFDLENBQUE7SUFDOUQsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQ2xCLFVBQWtCLEVBQ2xCLFNBQWlEO1FBRWpELE1BQU0sZUFBZSxHQUFzQjtZQUN6QyxlQUFlLEVBQUU7Z0JBQ2YsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLHdCQUF3QjtnQkFDaEQsVUFBVTtnQkFDVixTQUFTLEVBQUUsSUFBQSxxQkFBUyxHQUFFO2FBQ3ZCO1NBQ0YsQ0FBQTtRQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFBO1FBQ3ZELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUE7UUFDbkMsTUFBTSxjQUFjLEdBQUcsTUFBTSxTQUFTLEVBQUUsQ0FBQTtRQUN4QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFBO1FBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQ3pDLE1BQU0sZ0JBQWdCLEdBQXNCO1lBQzFDLGdCQUFnQixFQUFFO2dCQUNoQixpQkFBaUIsRUFBRSxJQUFJLENBQUMsd0JBQXdCO2dCQUNoRCxVQUFVO2dCQUNWLGNBQWM7Z0JBQ2QsU0FBUyxFQUFFLElBQUEscUJBQVMsR0FBRTthQUN2QjtTQUNGLENBQUE7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFBO0lBQzFELENBQUM7SUFFRCxLQUFLLENBQUMsR0FBRztRQUNQLEtBQUssSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTSxxQkFBcUIsR0FBRyxPQUFPLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUE7WUFFNUQsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsQ0FBQyxDQUFBO1lBRTNFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDbkIsTUFBSztZQUNQLENBQUM7WUFDRCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQTtRQUM5QixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxNQUFNLENBQUE7SUFDekMsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBZSxFQUFFLHFCQUE4QjtRQUM5RCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQzVDLE1BQU0sZUFBZSxHQUFzQjtZQUN6QyxlQUFlLEVBQUU7Z0JBQ2YsT0FBTztnQkFDUCxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUM1QixFQUFFLEVBQUUsSUFBSSxDQUFDLHdCQUF3QjtnQkFDakMsU0FBUyxFQUFFLElBQUEscUJBQVMsR0FBRTthQUN2QjtTQUNGLENBQUE7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixlQUFlLENBQUMsZUFBZSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFBO1FBQzFELENBQUM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQTtRQUN2RCx3REFBd0Q7UUFDeEQsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUE7UUFDNUIsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2pCLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMvQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDaEQsSUFBSSxJQUFBLDZCQUFhLEVBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0JBQ25DLE1BQU0sYUFBYSxHQUEyQjt3QkFDNUMsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO3dCQUNyQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07d0JBQ25CLGlCQUFpQixFQUFFLElBQUksQ0FBQyx3QkFBd0I7cUJBQ2pELENBQUE7b0JBQ0QsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO3dCQUNyQixhQUFhLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFBO3dCQUNoRCxhQUFhLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTt3QkFDM0IsYUFBYSxDQUFDLGFBQWE7NEJBQ3pCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsb0JBQW9CLENBQUMsTUFBTTtnQ0FDekUscUJBQXFCLENBQUE7b0JBQ3pCLENBQUM7b0JBQ0QsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQ3ZCLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQzVELGFBQWEsRUFDYixDQUFDLGdCQUFnQixDQUNsQixDQUFBO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQ3ZDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxZQUFZLENBQ3hELENBQUE7b0JBQ0QsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQTtvQkFDL0QsZ0JBQWdCLEdBQUcsSUFBSSxDQUFBO29CQUN2QixLQUFLLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQTtvQkFDNUIsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFBO2dCQUM5QixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQ2pCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsb0JBQW9CLENBQUMsTUFBTTtZQUN6RSxxQkFBcUIsQ0FBQTtRQUN2QixNQUFNLGdCQUFnQixHQUFzQjtZQUMxQyxnQkFBZ0IsRUFBRTtnQkFDaEIsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLHdCQUF3QjtnQkFDaEQsU0FBUyxFQUFFLElBQUEscUJBQVMsR0FBRTtnQkFDdEIsYUFBYTthQUNkO1NBQ0YsQ0FBQTtRQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUE7UUFFeEQsT0FBTyxhQUFhLENBQUE7SUFDdEIsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQ1gsY0FBc0MsRUFDdEMsYUFBcUMsRUFDckMsWUFBcUI7UUFFckIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDdEMsT0FBTztnQkFDTCxNQUFNLEVBQUUsUUFBUSxDQUFDLG9CQUFvQixDQUFDLE9BQU87Z0JBQzdDLFFBQVEsRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQzthQUM1RCxDQUFBO1FBQ0gsQ0FBQztRQUNELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUM3RSxPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUNoQixTQUFtQyxFQUNuQyxVQUErQixFQUMvQixVQUEwQjtRQUUxQixNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUE7UUFDMUIsTUFBTSxhQUFhLEdBQTJCO1lBQzVDLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtZQUNyQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsVUFBVTtZQUNWLGlCQUFpQixFQUFFLElBQUksQ0FBQyx3QkFBd0I7WUFDaEQsVUFBVSxFQUFFLElBQUksQ0FBQyxpQkFBaUI7WUFDbEMsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNO1lBQzFCLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSztTQUN6QixDQUFBO1FBQ0QsS0FBSyxNQUFNLGtCQUFrQixJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQzNDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLGFBQWEsQ0FBQyxDQUFBO1lBQ2pGLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDOUIsQ0FBQztRQUNELE9BQU8sZUFBZSxDQUFBO0lBQ3hCLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUNYLFVBQStCLEVBQy9CLFFBQTJCO1FBRTNCLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQztZQUMvQixPQUFPO2dCQUNMLE1BQU0sRUFBRTtvQkFDTixNQUFNLEVBQUUsUUFBUSxDQUFDLG9CQUFvQixDQUFDLE9BQU87b0JBQzdDLFFBQVEsRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztpQkFDNUQ7YUFDRixDQUFBO1FBQ0gsQ0FBQztRQUNELE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO1lBQzFFLE9BQU8sa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFDdEUsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLGVBQWUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ3JDLFVBQVUsRUFBRSxJQUFBLGdDQUFjLEVBQUM7b0JBQ3pCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztvQkFDakIsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO29CQUNuQyxVQUFVO2lCQUNYLENBQUM7YUFDZ0IsQ0FBQyxDQUFBO1lBQ3JCLE9BQU87Z0JBQ0wsTUFBTSxFQUFFO29CQUNOLE1BQU0sRUFBRSxRQUFRLENBQUMsb0JBQW9CLENBQUMsU0FBUztvQkFDL0MsUUFBUSxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO2lCQUM1RDthQUNGLENBQUE7UUFDSCxDQUFDO2FBQU0sSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE9BQU87Z0JBQ0wsTUFBTSxFQUFFO29CQUNOLE1BQU0sRUFBRSxRQUFRLENBQUMsb0JBQW9CLENBQUMsU0FBUztvQkFDL0MsUUFBUSxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO2lCQUM1RDthQUNGLENBQUE7UUFDSCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQztZQUNsQyxPQUFPO2dCQUNMLE1BQU0sRUFBRTtvQkFDTixNQUFNLEVBQUUsUUFBUSxDQUFDLG9CQUFvQixDQUFDLE9BQU87b0JBQzdDLFFBQVEsRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztpQkFDNUQ7YUFDRixDQUFBO1FBQ0gsQ0FBQztRQUVELElBQUksVUFBZSxDQUFBO1FBQ25CLElBQUksS0FBVSxDQUFBO1FBQ2QsSUFBSSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFBO1FBQzFGLElBQUksSUFBQSxpQ0FBc0IsRUFBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hGLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ2xFLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ25DLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFBO1FBQzFCLENBQUM7UUFDRCxNQUFNLG9CQUFvQixHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FDbEQsSUFBSSxDQUFDLDJCQUEyQixFQUFFLEVBQ2xDLFVBQVUsRUFDVixVQUFVLENBQ1gsQ0FBQTtRQUNELFdBQVcsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUE7UUFFdEQsTUFBTSxlQUFlLEdBQUcsSUFBQSxpQ0FBc0IsRUFBQyxXQUFXLENBQUMsQ0FBQTtRQUMzRCxJQUFJLGFBQWEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3JFLEtBQUssTUFBTSxNQUFNLElBQUksV0FBVyxFQUFFLENBQUM7WUFDakMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDdEYsQ0FBQztRQUNELGVBQWUsQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFBO1FBQ3hDLE9BQU87WUFDTCxNQUFNLEVBQUUsZUFBZTtZQUN2QixLQUFLO1NBQ04sQ0FBQTtJQUNILENBQUM7Q0FDRjtBQXRWRCxpQ0FzVkM7QUFFRCxTQUFTLGtCQUFrQixDQUN6QixFQUFVLEVBQ1Ysa0JBQXNDO0lBRXRDLE9BQU87UUFDTCxHQUFHLGtCQUFrQixDQUFDLDZCQUE2QjtRQUNuRCxHQUFHLGtCQUFrQixDQUFDLDRCQUE0QjtLQUNuRCxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQTtBQUM5QyxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxFQUFVLEVBQUUsa0JBQXNDO0lBQzVFLE9BQU8sa0JBQWtCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQTtBQUN0RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdub2RlOmV2ZW50cydcbmltcG9ydCAqIGFzIG1lc3NhZ2VzIGZyb20gJ0BjdWN1bWJlci9tZXNzYWdlcydcbmltcG9ydCB7IHR5cGUgRW52ZWxvcGUsIGdldFdvcnN0VGVzdFN0ZXBSZXN1bHQsIHR5cGUgSWRHZW5lcmF0b3IgfSBmcm9tICdAY3VjdW1iZXIvbWVzc2FnZXMnXG5pbXBvcnQgdHlwZSB7IEpzb25PYmplY3QgfSBmcm9tICd0eXBlLWZlc3QnXG5pbXBvcnQgdHlwZSBTdGVwRGVmaW5pdGlvblNuaXBwZXRCdWlsZGVyIGZyb20gJy4uL2Zvcm1hdHRlci9zdGVwX2RlZmluaXRpb25fc25pcHBldF9idWlsZGVyJ1xuaW1wb3J0IHR5cGUgeyBJRGVmaW5pdGlvbiB9IGZyb20gJy4uL21vZGVscy9kZWZpbml0aW9uJ1xuaW1wb3J0IHR5cGUgU3RlcERlZmluaXRpb24gZnJvbSAnLi4vbW9kZWxzL3N0ZXBfZGVmaW5pdGlvbidcbmltcG9ydCB0eXBlIFRlc3RDYXNlSG9va0RlZmluaXRpb24gZnJvbSAnLi4vbW9kZWxzL3Rlc3RfY2FzZV9ob29rX2RlZmluaXRpb24nXG5pbXBvcnQgdHlwZSBUZXN0U3RlcEhvb2tEZWZpbml0aW9uIGZyb20gJy4uL21vZGVscy90ZXN0X3N0ZXBfaG9va19kZWZpbml0aW9uJ1xuaW1wb3J0IHR5cGUge1xuICBJVGVzdENhc2VIb29rUGFyYW1ldGVyLFxuICBJVGVzdFN0ZXBIb29rUGFyYW1ldGVyLFxuICBTdXBwb3J0Q29kZUxpYnJhcnksXG59IGZyb20gJy4uL3N1cHBvcnRfY29kZV9saWJyYXJ5X2J1aWxkZXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IElXb3JsZE9wdGlvbnMgfSBmcm9tICcuLi9zdXBwb3J0X2NvZGVfbGlicmFyeV9idWlsZGVyL3dvcmxkJ1xuaW1wb3J0IHsgZG9lc0hhdmVWYWx1ZSwgZG9lc05vdEhhdmVWYWx1ZSB9IGZyb20gJy4uL3ZhbHVlX2NoZWNrZXInXG5pbXBvcnQgQXR0YWNobWVudE1hbmFnZXIgZnJvbSAnLi9hdHRhY2htZW50X21hbmFnZXInXG5pbXBvcnQgeyBtYWtlU3VnZ2VzdGlvbiB9IGZyb20gJy4vbWFrZV9zdWdnZXN0aW9uJ1xuaW1wb3J0IFN0ZXBSdW5uZXIsIHsgdHlwZSBSdW5TdGVwUmVzdWx0IH0gZnJvbSAnLi9zdGVwX3J1bm5lcidcbmltcG9ydCB7IHRpbWVzdGFtcCB9IGZyb20gJy4vc3RvcHdhdGNoJ1xuXG5leHBvcnQgaW50ZXJmYWNlIElOZXdUZXN0Q2FzZVJ1bm5lck9wdGlvbnMge1xuICB3b3JrZXJJZD86IHN0cmluZ1xuICBldmVudEJyb2FkY2FzdGVyOiBFdmVudEVtaXR0ZXJcbiAgZ2hlcmtpbkRvY3VtZW50OiBtZXNzYWdlcy5HaGVya2luRG9jdW1lbnRcbiAgbmV3SWQ6IElkR2VuZXJhdG9yLk5ld0lkXG4gIHBpY2tsZTogbWVzc2FnZXMuUGlja2xlXG4gIHRlc3RDYXNlOiBtZXNzYWdlcy5UZXN0Q2FzZVxuICByZXRyaWVzOiBudW1iZXJcbiAgc2tpcDogYm9vbGVhblxuICBmaWx0ZXJTdGFja1RyYWNlczogYm9vbGVhblxuICBzdXBwb3J0Q29kZUxpYnJhcnk6IFN1cHBvcnRDb2RlTGlicmFyeVxuICB3b3JsZFBhcmFtZXRlcnM6IEpzb25PYmplY3RcbiAgc25pcHBldEJ1aWxkZXI6IFN0ZXBEZWZpbml0aW9uU25pcHBldEJ1aWxkZXJcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVzdENhc2VSdW5uZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtlcklkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgcHJpdmF0ZSByZWFkb25seSBhdHRhY2htZW50TWFuYWdlcjogQXR0YWNobWVudE1hbmFnZXJcbiAgcHJpdmF0ZSBjdXJyZW50VGVzdENhc2VTdGFydGVkSWQ6IHN0cmluZ1xuICBwcml2YXRlIGN1cnJlbnRUZXN0U3RlcElkOiBzdHJpbmdcbiAgcHJpdmF0ZSByZWFkb25seSBldmVudEJyb2FkY2FzdGVyOiBFdmVudEVtaXR0ZXJcbiAgcHJpdmF0ZSByZWFkb25seSBnaGVya2luRG9jdW1lbnQ6IG1lc3NhZ2VzLkdoZXJraW5Eb2N1bWVudFxuICBwcml2YXRlIHJlYWRvbmx5IG5ld0lkOiBJZEdlbmVyYXRvci5OZXdJZFxuICBwcml2YXRlIHJlYWRvbmx5IHBpY2tsZTogbWVzc2FnZXMuUGlja2xlXG4gIHByaXZhdGUgcmVhZG9ubHkgdGVzdENhc2U6IG1lc3NhZ2VzLlRlc3RDYXNlXG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4QXR0ZW1wdHM6IG51bWJlclxuICBwcml2YXRlIHJlYWRvbmx5IHNraXA6IGJvb2xlYW5cbiAgcHJpdmF0ZSByZWFkb25seSBmaWx0ZXJTdGFja1RyYWNlczogYm9vbGVhblxuICBwcml2YXRlIHJlYWRvbmx5IHN1cHBvcnRDb2RlTGlicmFyeTogU3VwcG9ydENvZGVMaWJyYXJ5XG4gIHByaXZhdGUgcmVhZG9ubHkgc25pcHBldEJ1aWxkZXI6IFN0ZXBEZWZpbml0aW9uU25pcHBldEJ1aWxkZXJcbiAgcHJpdmF0ZSB0ZXN0U3RlcFJlc3VsdHM6IG1lc3NhZ2VzLlRlc3RTdGVwUmVzdWx0W11cbiAgcHJpdmF0ZSB3b3JsZDogYW55XG4gIHByaXZhdGUgcmVhZG9ubHkgd29ybGRQYXJhbWV0ZXJzOiBKc29uT2JqZWN0XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIHdvcmtlcklkLFxuICAgIGV2ZW50QnJvYWRjYXN0ZXIsXG4gICAgZ2hlcmtpbkRvY3VtZW50LFxuICAgIG5ld0lkLFxuICAgIHBpY2tsZSxcbiAgICB0ZXN0Q2FzZSxcbiAgICByZXRyaWVzID0gMCxcbiAgICBza2lwLFxuICAgIGZpbHRlclN0YWNrVHJhY2VzLFxuICAgIHN1cHBvcnRDb2RlTGlicmFyeSxcbiAgICB3b3JsZFBhcmFtZXRlcnMsXG4gICAgc25pcHBldEJ1aWxkZXIsXG4gIH06IElOZXdUZXN0Q2FzZVJ1bm5lck9wdGlvbnMpIHtcbiAgICB0aGlzLndvcmtlcklkID0gd29ya2VySWRcbiAgICB0aGlzLmF0dGFjaG1lbnRNYW5hZ2VyID0gbmV3IEF0dGFjaG1lbnRNYW5hZ2VyKCh7IGRhdGEsIG1lZGlhLCBmaWxlTmFtZSB9KSA9PiB7XG4gICAgICBpZiAoZG9lc05vdEhhdmVWYWx1ZSh0aGlzLmN1cnJlbnRUZXN0U3RlcElkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0Nhbm5vdCBhdHRhY2ggd2hlbiBhIHN0ZXAvaG9vayBpcyBub3QgcnVubmluZy4gRW5zdXJlIHlvdXIgc3RlcC9ob29rIHdhaXRzIGZvciB0aGUgYXR0YWNoIHRvIGZpbmlzaC4nXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGF0dGFjaG1lbnQ6IG1lc3NhZ2VzLkVudmVsb3BlID0ge1xuICAgICAgICBhdHRhY2htZW50OiB7XG4gICAgICAgICAgYm9keTogZGF0YSxcbiAgICAgICAgICBjb250ZW50RW5jb2Rpbmc6IG1lZGlhLmVuY29kaW5nLFxuICAgICAgICAgIG1lZGlhVHlwZTogbWVkaWEuY29udGVudFR5cGUsXG4gICAgICAgICAgZmlsZU5hbWUsXG4gICAgICAgICAgdGVzdENhc2VTdGFydGVkSWQ6IHRoaXMuY3VycmVudFRlc3RDYXNlU3RhcnRlZElkLFxuICAgICAgICAgIHRlc3RTdGVwSWQ6IHRoaXMuY3VycmVudFRlc3RTdGVwSWQsXG4gICAgICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXAoKSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICAgIHRoaXMuZXZlbnRCcm9hZGNhc3Rlci5lbWl0KCdlbnZlbG9wZScsIGF0dGFjaG1lbnQpXG4gICAgfSlcbiAgICB0aGlzLmV2ZW50QnJvYWRjYXN0ZXIgPSBldmVudEJyb2FkY2FzdGVyXG4gICAgdGhpcy5naGVya2luRG9jdW1lbnQgPSBnaGVya2luRG9jdW1lbnRcbiAgICB0aGlzLm1heEF0dGVtcHRzID0gMSArIChza2lwID8gMCA6IHJldHJpZXMpXG4gICAgdGhpcy5uZXdJZCA9IG5ld0lkXG4gICAgdGhpcy5waWNrbGUgPSBwaWNrbGVcbiAgICB0aGlzLnRlc3RDYXNlID0gdGVzdENhc2VcbiAgICB0aGlzLnNraXAgPSBza2lwXG4gICAgdGhpcy5maWx0ZXJTdGFja1RyYWNlcyA9IGZpbHRlclN0YWNrVHJhY2VzXG4gICAgdGhpcy5zdXBwb3J0Q29kZUxpYnJhcnkgPSBzdXBwb3J0Q29kZUxpYnJhcnlcbiAgICB0aGlzLndvcmxkUGFyYW1ldGVycyA9IHdvcmxkUGFyYW1ldGVyc1xuICAgIHRoaXMuc25pcHBldEJ1aWxkZXIgPSBzbmlwcGV0QnVpbGRlclxuICAgIHRoaXMucmVzZXRUZXN0UHJvZ3Jlc3NEYXRhKClcbiAgfVxuXG4gIHJlc2V0VGVzdFByb2dyZXNzRGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLndvcmxkID0gbmV3IHRoaXMuc3VwcG9ydENvZGVMaWJyYXJ5LldvcmxkKHtcbiAgICAgIGF0dGFjaDogdGhpcy5hdHRhY2htZW50TWFuYWdlci5jcmVhdGUuYmluZCh0aGlzLmF0dGFjaG1lbnRNYW5hZ2VyKSxcbiAgICAgIGxvZzogdGhpcy5hdHRhY2htZW50TWFuYWdlci5sb2cuYmluZCh0aGlzLmF0dGFjaG1lbnRNYW5hZ2VyKSxcbiAgICAgIGxpbms6IHRoaXMuYXR0YWNobWVudE1hbmFnZXIubGluay5iaW5kKHRoaXMuYXR0YWNobWVudE1hbmFnZXIpLFxuICAgICAgcGFyYW1ldGVyczogc3RydWN0dXJlZENsb25lKHRoaXMud29ybGRQYXJhbWV0ZXJzKSxcbiAgICB9IHNhdGlzZmllcyBJV29ybGRPcHRpb25zKVxuICAgIHRoaXMudGVzdFN0ZXBSZXN1bHRzID0gW11cbiAgfVxuXG4gIGdldEJlZm9yZVN0ZXBIb29rRGVmaW5pdGlvbnMoKTogVGVzdFN0ZXBIb29rRGVmaW5pdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5zdXBwb3J0Q29kZUxpYnJhcnkuYmVmb3JlVGVzdFN0ZXBIb29rRGVmaW5pdGlvbnMuZmlsdGVyKChob29rRGVmaW5pdGlvbikgPT5cbiAgICAgIGhvb2tEZWZpbml0aW9uLmFwcGxpZXNUb1Rlc3RDYXNlKHRoaXMucGlja2xlKVxuICAgIClcbiAgfVxuXG4gIGdldEFmdGVyU3RlcEhvb2tEZWZpbml0aW9ucygpOiBUZXN0U3RlcEhvb2tEZWZpbml0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLnN1cHBvcnRDb2RlTGlicmFyeS5hZnRlclRlc3RTdGVwSG9va0RlZmluaXRpb25zXG4gICAgICAuc2xpY2UoMClcbiAgICAgIC5yZXZlcnNlKClcbiAgICAgIC5maWx0ZXIoKGhvb2tEZWZpbml0aW9uKSA9PiBob29rRGVmaW5pdGlvbi5hcHBsaWVzVG9UZXN0Q2FzZSh0aGlzLnBpY2tsZSkpXG4gIH1cblxuICBnZXRXb3JzdFN0ZXBSZXN1bHQoKTogbWVzc2FnZXMuVGVzdFN0ZXBSZXN1bHQge1xuICAgIGlmICh0aGlzLnRlc3RTdGVwUmVzdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogdGhpcy5za2lwXG4gICAgICAgICAgPyBtZXNzYWdlcy5UZXN0U3RlcFJlc3VsdFN0YXR1cy5TS0lQUEVEXG4gICAgICAgICAgOiBtZXNzYWdlcy5UZXN0U3RlcFJlc3VsdFN0YXR1cy5QQVNTRUQsXG4gICAgICAgIGR1cmF0aW9uOiBtZXNzYWdlcy5UaW1lQ29udmVyc2lvbi5taWxsaXNlY29uZHNUb0R1cmF0aW9uKDApLFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZ2V0V29yc3RUZXN0U3RlcFJlc3VsdCh0aGlzLnRlc3RTdGVwUmVzdWx0cylcbiAgfVxuXG4gIGFzeW5jIGludm9rZVN0ZXAoXG4gICAgc3RlcDogbWVzc2FnZXMuUGlja2xlU3RlcCxcbiAgICBzdGVwRGVmaW5pdGlvbjogSURlZmluaXRpb24sXG4gICAgaG9va1BhcmFtZXRlcj86IElUZXN0Q2FzZUhvb2tQYXJhbWV0ZXJcbiAgKTogUHJvbWlzZTxSdW5TdGVwUmVzdWx0PiB7XG4gICAgcmV0dXJuIGF3YWl0IFN0ZXBSdW5uZXIucnVuKHtcbiAgICAgIGRlZmF1bHRUaW1lb3V0OiB0aGlzLnN1cHBvcnRDb2RlTGlicmFyeS5kZWZhdWx0VGltZW91dCxcbiAgICAgIGZpbHRlclN0YWNrVHJhY2VzOiB0aGlzLmZpbHRlclN0YWNrVHJhY2VzLFxuICAgICAgaG9va1BhcmFtZXRlcixcbiAgICAgIHN0ZXAsXG4gICAgICBzdGVwRGVmaW5pdGlvbixcbiAgICAgIHdvcmxkOiB0aGlzLndvcmxkLFxuICAgIH0pXG4gIH1cblxuICBpc1NraXBwaW5nU3RlcHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0V29yc3RTdGVwUmVzdWx0KCkuc3RhdHVzICE9PSBtZXNzYWdlcy5UZXN0U3RlcFJlc3VsdFN0YXR1cy5QQVNTRURcbiAgfVxuXG4gIGlzRXhwbGljaXRseVNraXBwZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnNraXAgJiYgdGhpcy5nZXRXb3JzdFN0ZXBSZXN1bHQoKS5zdGF0dXMgPT09IG1lc3NhZ2VzLlRlc3RTdGVwUmVzdWx0U3RhdHVzLlNLSVBQRURcbiAgfVxuXG4gIHNob3VsZFNraXBIb29rKGlzQmVmb3JlSG9vazogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNraXAgfHwgKHRoaXMuaXNTa2lwcGluZ1N0ZXBzKCkgJiYgaXNCZWZvcmVIb29rKVxuICB9XG5cbiAgYXN5bmMgYXJvdW5kVGVzdFN0ZXAoXG4gICAgdGVzdFN0ZXBJZDogc3RyaW5nLFxuICAgIHJ1blN0ZXBGbjogKCkgPT4gUHJvbWlzZTxtZXNzYWdlcy5UZXN0U3RlcFJlc3VsdD5cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGVzdFN0ZXBTdGFydGVkOiBtZXNzYWdlcy5FbnZlbG9wZSA9IHtcbiAgICAgIHRlc3RTdGVwU3RhcnRlZDoge1xuICAgICAgICB0ZXN0Q2FzZVN0YXJ0ZWRJZDogdGhpcy5jdXJyZW50VGVzdENhc2VTdGFydGVkSWQsXG4gICAgICAgIHRlc3RTdGVwSWQsXG4gICAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wKCksXG4gICAgICB9LFxuICAgIH1cbiAgICB0aGlzLmV2ZW50QnJvYWRjYXN0ZXIuZW1pdCgnZW52ZWxvcGUnLCB0ZXN0U3RlcFN0YXJ0ZWQpXG4gICAgdGhpcy5jdXJyZW50VGVzdFN0ZXBJZCA9IHRlc3RTdGVwSWRcbiAgICBjb25zdCB0ZXN0U3RlcFJlc3VsdCA9IGF3YWl0IHJ1blN0ZXBGbigpXG4gICAgdGhpcy5jdXJyZW50VGVzdFN0ZXBJZCA9IG51bGxcbiAgICB0aGlzLnRlc3RTdGVwUmVzdWx0cy5wdXNoKHRlc3RTdGVwUmVzdWx0KVxuICAgIGNvbnN0IHRlc3RTdGVwRmluaXNoZWQ6IG1lc3NhZ2VzLkVudmVsb3BlID0ge1xuICAgICAgdGVzdFN0ZXBGaW5pc2hlZDoge1xuICAgICAgICB0ZXN0Q2FzZVN0YXJ0ZWRJZDogdGhpcy5jdXJyZW50VGVzdENhc2VTdGFydGVkSWQsXG4gICAgICAgIHRlc3RTdGVwSWQsXG4gICAgICAgIHRlc3RTdGVwUmVzdWx0LFxuICAgICAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcCgpLFxuICAgICAgfSxcbiAgICB9XG4gICAgdGhpcy5ldmVudEJyb2FkY2FzdGVyLmVtaXQoJ2VudmVsb3BlJywgdGVzdFN0ZXBGaW5pc2hlZClcbiAgfVxuXG4gIGFzeW5jIHJ1bigpOiBQcm9taXNlPG1lc3NhZ2VzLlRlc3RTdGVwUmVzdWx0U3RhdHVzPiB7XG4gICAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPCB0aGlzLm1heEF0dGVtcHRzOyBhdHRlbXB0KyspIHtcbiAgICAgIGNvbnN0IG1vcmVBdHRlbXB0c1JlbWFpbmluZyA9IGF0dGVtcHQgKyAxIDwgdGhpcy5tYXhBdHRlbXB0c1xuXG4gICAgICBjb25zdCB3aWxsQmVSZXRyaWVkID0gYXdhaXQgdGhpcy5ydW5BdHRlbXB0KGF0dGVtcHQsIG1vcmVBdHRlbXB0c1JlbWFpbmluZylcblxuICAgICAgaWYgKCF3aWxsQmVSZXRyaWVkKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICB0aGlzLnJlc2V0VGVzdFByb2dyZXNzRGF0YSgpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFdvcnN0U3RlcFJlc3VsdCgpLnN0YXR1c1xuICB9XG5cbiAgYXN5bmMgcnVuQXR0ZW1wdChhdHRlbXB0OiBudW1iZXIsIG1vcmVBdHRlbXB0c1JlbWFpbmluZzogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMuY3VycmVudFRlc3RDYXNlU3RhcnRlZElkID0gdGhpcy5uZXdJZCgpXG4gICAgY29uc3QgdGVzdENhc2VTdGFydGVkOiBtZXNzYWdlcy5FbnZlbG9wZSA9IHtcbiAgICAgIHRlc3RDYXNlU3RhcnRlZDoge1xuICAgICAgICBhdHRlbXB0LFxuICAgICAgICB0ZXN0Q2FzZUlkOiB0aGlzLnRlc3RDYXNlLmlkLFxuICAgICAgICBpZDogdGhpcy5jdXJyZW50VGVzdENhc2VTdGFydGVkSWQsXG4gICAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wKCksXG4gICAgICB9LFxuICAgIH1cbiAgICBpZiAodGhpcy53b3JrZXJJZCkge1xuICAgICAgdGVzdENhc2VTdGFydGVkLnRlc3RDYXNlU3RhcnRlZC53b3JrZXJJZCA9IHRoaXMud29ya2VySWRcbiAgICB9XG4gICAgdGhpcy5ldmVudEJyb2FkY2FzdGVyLmVtaXQoJ2VudmVsb3BlJywgdGVzdENhc2VTdGFydGVkKVxuICAgIC8vIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBob29rIGlzIGEgQmVmb3JlIG9yIEFmdGVyXG4gICAgbGV0IGRpZFdlUnVuU3RlcHNZZXQgPSBmYWxzZVxuICAgIGxldCBlcnJvciA9IGZhbHNlXG4gICAgZm9yIChjb25zdCB0ZXN0U3RlcCBvZiB0aGlzLnRlc3RDYXNlLnRlc3RTdGVwcykge1xuICAgICAgYXdhaXQgdGhpcy5hcm91bmRUZXN0U3RlcCh0ZXN0U3RlcC5pZCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoZG9lc0hhdmVWYWx1ZSh0ZXN0U3RlcC5ob29rSWQpKSB7XG4gICAgICAgICAgY29uc3QgaG9va1BhcmFtZXRlcjogSVRlc3RDYXNlSG9va1BhcmFtZXRlciA9IHtcbiAgICAgICAgICAgIGdoZXJraW5Eb2N1bWVudDogdGhpcy5naGVya2luRG9jdW1lbnQsXG4gICAgICAgICAgICBwaWNrbGU6IHRoaXMucGlja2xlLFxuICAgICAgICAgICAgdGVzdENhc2VTdGFydGVkSWQ6IHRoaXMuY3VycmVudFRlc3RDYXNlU3RhcnRlZElkLFxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGlkV2VSdW5TdGVwc1lldCkge1xuICAgICAgICAgICAgaG9va1BhcmFtZXRlci5yZXN1bHQgPSB0aGlzLmdldFdvcnN0U3RlcFJlc3VsdCgpXG4gICAgICAgICAgICBob29rUGFyYW1ldGVyLmVycm9yID0gZXJyb3JcbiAgICAgICAgICAgIGhvb2tQYXJhbWV0ZXIud2lsbEJlUmV0cmllZCA9XG4gICAgICAgICAgICAgIHRoaXMuZ2V0V29yc3RTdGVwUmVzdWx0KCkuc3RhdHVzID09PSBtZXNzYWdlcy5UZXN0U3RlcFJlc3VsdFN0YXR1cy5GQUlMRUQgJiZcbiAgICAgICAgICAgICAgbW9yZUF0dGVtcHRzUmVtYWluaW5nXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJ1bkhvb2soXG4gICAgICAgICAgICBmaW5kSG9va0RlZmluaXRpb24odGVzdFN0ZXAuaG9va0lkLCB0aGlzLnN1cHBvcnRDb2RlTGlicmFyeSksXG4gICAgICAgICAgICBob29rUGFyYW1ldGVyLFxuICAgICAgICAgICAgIWRpZFdlUnVuU3RlcHNZZXRcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgcGlja2xlU3RlcCA9IHRoaXMucGlja2xlLnN0ZXBzLmZpbmQoXG4gICAgICAgICAgICAocGlja2xlU3RlcCkgPT4gcGlja2xlU3RlcC5pZCA9PT0gdGVzdFN0ZXAucGlja2xlU3RlcElkXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnN0IHRlc3RTdGVwUmVzdWx0ID0gYXdhaXQgdGhpcy5ydW5TdGVwKHBpY2tsZVN0ZXAsIHRlc3RTdGVwKVxuICAgICAgICAgIGRpZFdlUnVuU3RlcHNZZXQgPSB0cnVlXG4gICAgICAgICAgZXJyb3IgPSB0ZXN0U3RlcFJlc3VsdC5lcnJvclxuICAgICAgICAgIHJldHVybiB0ZXN0U3RlcFJlc3VsdC5yZXN1bHRcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCB3aWxsQmVSZXRyaWVkID1cbiAgICAgIHRoaXMuZ2V0V29yc3RTdGVwUmVzdWx0KCkuc3RhdHVzID09PSBtZXNzYWdlcy5UZXN0U3RlcFJlc3VsdFN0YXR1cy5GQUlMRUQgJiZcbiAgICAgIG1vcmVBdHRlbXB0c1JlbWFpbmluZ1xuICAgIGNvbnN0IHRlc3RDYXNlRmluaXNoZWQ6IG1lc3NhZ2VzLkVudmVsb3BlID0ge1xuICAgICAgdGVzdENhc2VGaW5pc2hlZDoge1xuICAgICAgICB0ZXN0Q2FzZVN0YXJ0ZWRJZDogdGhpcy5jdXJyZW50VGVzdENhc2VTdGFydGVkSWQsXG4gICAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wKCksXG4gICAgICAgIHdpbGxCZVJldHJpZWQsXG4gICAgICB9LFxuICAgIH1cbiAgICB0aGlzLmV2ZW50QnJvYWRjYXN0ZXIuZW1pdCgnZW52ZWxvcGUnLCB0ZXN0Q2FzZUZpbmlzaGVkKVxuXG4gICAgcmV0dXJuIHdpbGxCZVJldHJpZWRcbiAgfVxuXG4gIGFzeW5jIHJ1bkhvb2soXG4gICAgaG9va0RlZmluaXRpb246IFRlc3RDYXNlSG9va0RlZmluaXRpb24sXG4gICAgaG9va1BhcmFtZXRlcjogSVRlc3RDYXNlSG9va1BhcmFtZXRlcixcbiAgICBpc0JlZm9yZUhvb2s6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxtZXNzYWdlcy5UZXN0U3RlcFJlc3VsdD4ge1xuICAgIGlmICh0aGlzLnNob3VsZFNraXBIb29rKGlzQmVmb3JlSG9vaykpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogbWVzc2FnZXMuVGVzdFN0ZXBSZXN1bHRTdGF0dXMuU0tJUFBFRCxcbiAgICAgICAgZHVyYXRpb246IG1lc3NhZ2VzLlRpbWVDb252ZXJzaW9uLm1pbGxpc2Vjb25kc1RvRHVyYXRpb24oMCksXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHsgcmVzdWx0IH0gPSBhd2FpdCB0aGlzLmludm9rZVN0ZXAobnVsbCwgaG9va0RlZmluaXRpb24sIGhvb2tQYXJhbWV0ZXIpXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgYXN5bmMgcnVuU3RlcEhvb2tzKFxuICAgIHN0ZXBIb29rczogVGVzdFN0ZXBIb29rRGVmaW5pdGlvbltdLFxuICAgIHBpY2tsZVN0ZXA6IG1lc3NhZ2VzLlBpY2tsZVN0ZXAsXG4gICAgc3RlcFJlc3VsdD86IFJ1blN0ZXBSZXN1bHRcbiAgKTogUHJvbWlzZTxtZXNzYWdlcy5UZXN0U3RlcFJlc3VsdFtdPiB7XG4gICAgY29uc3Qgc3RlcEhvb2tzUmVzdWx0ID0gW11cbiAgICBjb25zdCBob29rUGFyYW1ldGVyOiBJVGVzdFN0ZXBIb29rUGFyYW1ldGVyID0ge1xuICAgICAgZ2hlcmtpbkRvY3VtZW50OiB0aGlzLmdoZXJraW5Eb2N1bWVudCxcbiAgICAgIHBpY2tsZTogdGhpcy5waWNrbGUsXG4gICAgICBwaWNrbGVTdGVwLFxuICAgICAgdGVzdENhc2VTdGFydGVkSWQ6IHRoaXMuY3VycmVudFRlc3RDYXNlU3RhcnRlZElkLFxuICAgICAgdGVzdFN0ZXBJZDogdGhpcy5jdXJyZW50VGVzdFN0ZXBJZCxcbiAgICAgIHJlc3VsdDogc3RlcFJlc3VsdD8ucmVzdWx0LFxuICAgICAgZXJyb3I6IHN0ZXBSZXN1bHQ/LmVycm9yLFxuICAgIH1cbiAgICBmb3IgKGNvbnN0IHN0ZXBIb29rRGVmaW5pdGlvbiBvZiBzdGVwSG9va3MpIHtcbiAgICAgIGNvbnN0IHsgcmVzdWx0IH0gPSBhd2FpdCB0aGlzLmludm9rZVN0ZXAobnVsbCwgc3RlcEhvb2tEZWZpbml0aW9uLCBob29rUGFyYW1ldGVyKVxuICAgICAgc3RlcEhvb2tzUmVzdWx0LnB1c2gocmVzdWx0KVxuICAgIH1cbiAgICByZXR1cm4gc3RlcEhvb2tzUmVzdWx0XG4gIH1cblxuICBhc3luYyBydW5TdGVwKFxuICAgIHBpY2tsZVN0ZXA6IG1lc3NhZ2VzLlBpY2tsZVN0ZXAsXG4gICAgdGVzdFN0ZXA6IG1lc3NhZ2VzLlRlc3RTdGVwXG4gICk6IFByb21pc2U8UnVuU3RlcFJlc3VsdD4ge1xuICAgIGlmICh0aGlzLmlzRXhwbGljaXRseVNraXBwZWQoKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgc3RhdHVzOiBtZXNzYWdlcy5UZXN0U3RlcFJlc3VsdFN0YXR1cy5TS0lQUEVELFxuICAgICAgICAgIGR1cmF0aW9uOiBtZXNzYWdlcy5UaW1lQ29udmVyc2lvbi5taWxsaXNlY29uZHNUb0R1cmF0aW9uKDApLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzdGVwRGVmaW5pdGlvbnMgPSB0ZXN0U3RlcC5zdGVwRGVmaW5pdGlvbklkcy5tYXAoKHN0ZXBEZWZpbml0aW9uSWQpID0+IHtcbiAgICAgIHJldHVybiBmaW5kU3RlcERlZmluaXRpb24oc3RlcERlZmluaXRpb25JZCwgdGhpcy5zdXBwb3J0Q29kZUxpYnJhcnkpXG4gICAgfSlcbiAgICBpZiAoc3RlcERlZmluaXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5ldmVudEJyb2FkY2FzdGVyLmVtaXQoJ2VudmVsb3BlJywge1xuICAgICAgICBzdWdnZXN0aW9uOiBtYWtlU3VnZ2VzdGlvbih7XG4gICAgICAgICAgbmV3SWQ6IHRoaXMubmV3SWQsXG4gICAgICAgICAgc25pcHBldEJ1aWxkZXI6IHRoaXMuc25pcHBldEJ1aWxkZXIsXG4gICAgICAgICAgcGlja2xlU3RlcCxcbiAgICAgICAgfSksXG4gICAgICB9IHNhdGlzZmllcyBFbnZlbG9wZSlcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIHN0YXR1czogbWVzc2FnZXMuVGVzdFN0ZXBSZXN1bHRTdGF0dXMuVU5ERUZJTkVELFxuICAgICAgICAgIGR1cmF0aW9uOiBtZXNzYWdlcy5UaW1lQ29udmVyc2lvbi5taWxsaXNlY29uZHNUb0R1cmF0aW9uKDApLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RlcERlZmluaXRpb25zLmxlbmd0aCA+IDEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIHN0YXR1czogbWVzc2FnZXMuVGVzdFN0ZXBSZXN1bHRTdGF0dXMuQU1CSUdVT1VTLFxuICAgICAgICAgIGR1cmF0aW9uOiBtZXNzYWdlcy5UaW1lQ29udmVyc2lvbi5taWxsaXNlY29uZHNUb0R1cmF0aW9uKDApLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5pc1NraXBwaW5nU3RlcHMoKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgc3RhdHVzOiBtZXNzYWdlcy5UZXN0U3RlcFJlc3VsdFN0YXR1cy5TS0lQUEVELFxuICAgICAgICAgIGR1cmF0aW9uOiBtZXNzYWdlcy5UaW1lQ29udmVyc2lvbi5taWxsaXNlY29uZHNUb0R1cmF0aW9uKDApLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBzdGVwUmVzdWx0OiBhbnlcbiAgICBsZXQgZXJyb3I6IGFueVxuICAgIGxldCBzdGVwUmVzdWx0cyA9IGF3YWl0IHRoaXMucnVuU3RlcEhvb2tzKHRoaXMuZ2V0QmVmb3JlU3RlcEhvb2tEZWZpbml0aW9ucygpLCBwaWNrbGVTdGVwKVxuICAgIGlmIChnZXRXb3JzdFRlc3RTdGVwUmVzdWx0KHN0ZXBSZXN1bHRzKS5zdGF0dXMgIT09IG1lc3NhZ2VzLlRlc3RTdGVwUmVzdWx0U3RhdHVzLkZBSUxFRCkge1xuICAgICAgc3RlcFJlc3VsdCA9IGF3YWl0IHRoaXMuaW52b2tlU3RlcChwaWNrbGVTdGVwLCBzdGVwRGVmaW5pdGlvbnNbMF0pXG4gICAgICBzdGVwUmVzdWx0cy5wdXNoKHN0ZXBSZXN1bHQucmVzdWx0KVxuICAgICAgZXJyb3IgPSBzdGVwUmVzdWx0LmVycm9yXG4gICAgfVxuICAgIGNvbnN0IGFmdGVyU3RlcEhvb2tSZXN1bHRzID0gYXdhaXQgdGhpcy5ydW5TdGVwSG9va3MoXG4gICAgICB0aGlzLmdldEFmdGVyU3RlcEhvb2tEZWZpbml0aW9ucygpLFxuICAgICAgcGlja2xlU3RlcCxcbiAgICAgIHN0ZXBSZXN1bHRcbiAgICApXG4gICAgc3RlcFJlc3VsdHMgPSBzdGVwUmVzdWx0cy5jb25jYXQoYWZ0ZXJTdGVwSG9va1Jlc3VsdHMpXG5cbiAgICBjb25zdCBmaW5hbFN0ZXBSZXN1bHQgPSBnZXRXb3JzdFRlc3RTdGVwUmVzdWx0KHN0ZXBSZXN1bHRzKVxuICAgIGxldCBmaW5hbER1cmF0aW9uID0gbWVzc2FnZXMuVGltZUNvbnZlcnNpb24ubWlsbGlzZWNvbmRzVG9EdXJhdGlvbigwKVxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHN0ZXBSZXN1bHRzKSB7XG4gICAgICBmaW5hbER1cmF0aW9uID0gbWVzc2FnZXMuVGltZUNvbnZlcnNpb24uYWRkRHVyYXRpb25zKGZpbmFsRHVyYXRpb24sIHJlc3VsdC5kdXJhdGlvbilcbiAgICB9XG4gICAgZmluYWxTdGVwUmVzdWx0LmR1cmF0aW9uID0gZmluYWxEdXJhdGlvblxuICAgIHJldHVybiB7XG4gICAgICByZXN1bHQ6IGZpbmFsU3RlcFJlc3VsdCxcbiAgICAgIGVycm9yLFxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kSG9va0RlZmluaXRpb24oXG4gIGlkOiBzdHJpbmcsXG4gIHN1cHBvcnRDb2RlTGlicmFyeTogU3VwcG9ydENvZGVMaWJyYXJ5XG4pOiBUZXN0Q2FzZUhvb2tEZWZpbml0aW9uIHtcbiAgcmV0dXJuIFtcbiAgICAuLi5zdXBwb3J0Q29kZUxpYnJhcnkuYmVmb3JlVGVzdENhc2VIb29rRGVmaW5pdGlvbnMsXG4gICAgLi4uc3VwcG9ydENvZGVMaWJyYXJ5LmFmdGVyVGVzdENhc2VIb29rRGVmaW5pdGlvbnMsXG4gIF0uZmluZCgoZGVmaW5pdGlvbikgPT4gZGVmaW5pdGlvbi5pZCA9PT0gaWQpXG59XG5cbmZ1bmN0aW9uIGZpbmRTdGVwRGVmaW5pdGlvbihpZDogc3RyaW5nLCBzdXBwb3J0Q29kZUxpYnJhcnk6IFN1cHBvcnRDb2RlTGlicmFyeSk6IFN0ZXBEZWZpbml0aW9uIHtcbiAgcmV0dXJuIHN1cHBvcnRDb2RlTGlicmFyeS5zdGVwRGVmaW5pdGlvbnMuZmluZCgoZGVmaW5pdGlvbikgPT4gZGVmaW5pdGlvbi5pZCA9PT0gaWQpXG59XG4iXX0=
298
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF9jYXNlX3J1bm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL3Rlc3RfY2FzZV9ydW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxpREFZMkI7QUFhM0Isb0RBQWtFO0FBQ2xFLDhFQUFvRDtBQUNwRCx1REFBa0Q7QUFDbEQsZ0VBQThEO0FBQzlELDJDQUF1QztBQWlCdkMsTUFBcUIsY0FBYztJQUNoQixRQUFRLENBQW9CO0lBQzVCLGlCQUFpQixDQUFtQjtJQUM3Qyx3QkFBd0IsQ0FBUTtJQUNoQyxpQkFBaUIsQ0FBUTtJQUNoQixnQkFBZ0IsQ0FBYztJQUM5QixlQUFlLENBQWlCO0lBQ2hDLEtBQUssQ0FBbUI7SUFDeEIsTUFBTSxDQUFRO0lBQ2QsUUFBUSxDQUFVO0lBQ2xCLFdBQVcsQ0FBUTtJQUNuQixJQUFJLENBQVM7SUFDYixpQkFBaUIsQ0FBUztJQUMxQixrQkFBa0IsQ0FBb0I7SUFDdEMsY0FBYyxDQUE4QjtJQUNyRCxlQUFlLENBQWtCO0lBQ2pDLEtBQUssQ0FBSztJQUNELGVBQWUsQ0FBWTtJQUU1QyxZQUFZLEVBQ1YsUUFBUSxFQUNSLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsS0FBSyxFQUNMLE1BQU0sRUFDTixRQUFRLEVBQ1IsT0FBTyxHQUFHLENBQUMsRUFDWCxJQUFJLEVBQ0osaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsY0FBYyxHQUNZO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO1FBQ3hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLDRCQUFpQixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUU7WUFDM0UsSUFBSSxJQUFBLGdDQUFnQixFQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7Z0JBQzdDLE1BQU0sSUFBSSxLQUFLLENBQ2Isc0dBQXNHLENBQ3ZHLENBQUE7WUFDSCxDQUFDO1lBQ0QsTUFBTSxVQUFVLEdBQWE7Z0JBQzNCLFVBQVUsRUFBRTtvQkFDVixJQUFJLEVBQUUsSUFBSTtvQkFDVixlQUFlLEVBQUUsS0FBSyxDQUFDLFFBQVE7b0JBQy9CLFNBQVMsRUFBRSxLQUFLLENBQUMsV0FBVztvQkFDNUIsUUFBUTtvQkFDUixpQkFBaUIsRUFBRSxJQUFJLENBQUMsd0JBQXdCO29CQUNoRCxVQUFVLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtvQkFDbEMsU0FBUyxFQUFFLElBQUEscUJBQVMsR0FBRTtpQkFDdkI7YUFDRixDQUFBO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUE7UUFDcEQsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUE7UUFDeEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUE7UUFDdEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDM0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7UUFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7UUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7UUFDeEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFBO1FBQzFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQTtRQUM1QyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQTtRQUN0QyxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQTtRQUNwQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQTtJQUM5QixDQUFDO0lBRUQscUJBQXFCO1FBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDO1lBQzdDLE1BQU0sRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7WUFDbEUsR0FBRyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUM1RCxJQUFJLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQzlELFVBQVUsRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztTQUMxQixDQUFDLENBQUE7UUFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUE7SUFDM0IsQ0FBQztJQUVELDRCQUE0QjtRQUMxQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUNyRixjQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUM5QyxDQUFBO0lBQ0gsQ0FBQztJQUVELDJCQUEyQjtRQUN6QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyw0QkFBNEI7YUFDeEQsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUNSLE9BQU8sRUFBRTthQUNULE1BQU0sQ0FBQyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQzlFLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxPQUFPO2dCQUNMLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQywrQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLCtCQUFvQixDQUFDLE1BQU07Z0JBQzlFLFFBQVEsRUFBRSx5QkFBYyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQzthQUNuRCxDQUFBO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBQSxpQ0FBc0IsRUFBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUE7SUFDckQsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQ2QsSUFBZ0IsRUFDaEIsY0FBMkIsRUFDM0IsYUFBc0M7UUFFdEMsT0FBTyxNQUFNLHFCQUFVLENBQUMsR0FBRyxDQUFDO1lBQzFCLGNBQWMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYztZQUN0RCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCO1lBQ3pDLGFBQWE7WUFDYixJQUFJO1lBQ0osY0FBYztZQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztTQUNsQixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsTUFBTSxLQUFLLCtCQUFvQixDQUFDLE1BQU0sQ0FBQTtJQUN6RSxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLE1BQU0sS0FBSywrQkFBb0IsQ0FBQyxPQUFPLENBQUE7SUFDeEYsQ0FBQztJQUVELGNBQWMsQ0FBQyxZQUFxQjtRQUNsQyxPQUFPLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksWUFBWSxDQUFDLENBQUE7SUFDOUQsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQ2xCLFVBQWtCLEVBQ2xCLFNBQXdDO1FBRXhDLE1BQU0sZUFBZSxHQUFhO1lBQ2hDLGVBQWUsRUFBRTtnQkFDZixpQkFBaUIsRUFBRSxJQUFJLENBQUMsd0JBQXdCO2dCQUNoRCxVQUFVO2dCQUNWLFNBQVMsRUFBRSxJQUFBLHFCQUFTLEdBQUU7YUFDdkI7U0FDRixDQUFBO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUE7UUFDdkQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQTtRQUNuQyxNQUFNLGNBQWMsR0FBRyxNQUFNLFNBQVMsRUFBRSxDQUFBO1FBQ3hDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUE7UUFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDekMsTUFBTSxnQkFBZ0IsR0FBYTtZQUNqQyxnQkFBZ0IsRUFBRTtnQkFDaEIsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLHdCQUF3QjtnQkFDaEQsVUFBVTtnQkFDVixjQUFjO2dCQUNkLFNBQVMsRUFBRSxJQUFBLHFCQUFTLEdBQUU7YUFDdkI7U0FDRixDQUFBO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtJQUMxRCxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUc7UUFDUCxLQUFLLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU0scUJBQXFCLEdBQUcsT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFBO1lBRTVELE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUscUJBQXFCLENBQUMsQ0FBQTtZQUUzRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ25CLE1BQUs7WUFDUCxDQUFDO1lBQ0QsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUE7UUFDOUIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsTUFBTSxDQUFBO0lBQ3pDLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQWUsRUFBRSxxQkFBOEI7UUFDOUQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUM1QyxNQUFNLGVBQWUsR0FBYTtZQUNoQyxlQUFlLEVBQUU7Z0JBQ2YsT0FBTztnQkFDUCxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUM1QixFQUFFLEVBQUUsSUFBSSxDQUFDLHdCQUF3QjtnQkFDakMsU0FBUyxFQUFFLElBQUEscUJBQVMsR0FBRTthQUN2QjtTQUNGLENBQUE7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixlQUFlLENBQUMsZUFBZSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFBO1FBQzFELENBQUM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQTtRQUN2RCx3REFBd0Q7UUFDeEQsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUE7UUFDNUIsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2pCLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMvQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDaEQsSUFBSSxJQUFBLDZCQUFhLEVBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0JBQ25DLE1BQU0sYUFBYSxHQUEyQjt3QkFDNUMsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO3dCQUNyQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07d0JBQ25CLGlCQUFpQixFQUFFLElBQUksQ0FBQyx3QkFBd0I7cUJBQ2pELENBQUE7b0JBQ0QsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO3dCQUNyQixhQUFhLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFBO3dCQUNoRCxhQUFhLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTt3QkFDM0IsYUFBYSxDQUFDLGFBQWE7NEJBQ3pCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLE1BQU0sS0FBSywrQkFBb0IsQ0FBQyxNQUFNO2dDQUNoRSxxQkFBcUIsQ0FBQTtvQkFDekIsQ0FBQztvQkFDRCxPQUFPLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FDdkIsa0JBQWtCLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFDNUQsYUFBYSxFQUNiLENBQUMsZ0JBQWdCLENBQ2xCLENBQUE7Z0JBQ0gsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDdkMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLFlBQVksQ0FDeEQsQ0FBQTtvQkFDRCxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFBO29CQUMvRCxnQkFBZ0IsR0FBRyxJQUFJLENBQUE7b0JBQ3ZCLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFBO29CQUM1QixPQUFPLGNBQWMsQ0FBQyxNQUFNLENBQUE7Z0JBQzlCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUM7UUFFRCxNQUFNLGFBQWEsR0FDakIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsTUFBTSxLQUFLLCtCQUFvQixDQUFDLE1BQU0sSUFBSSxxQkFBcUIsQ0FBQTtRQUMzRixNQUFNLGdCQUFnQixHQUFhO1lBQ2pDLGdCQUFnQixFQUFFO2dCQUNoQixpQkFBaUIsRUFBRSxJQUFJLENBQUMsd0JBQXdCO2dCQUNoRCxTQUFTLEVBQUUsSUFBQSxxQkFBUyxHQUFFO2dCQUN0QixhQUFhO2FBQ2Q7U0FDRixDQUFBO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtRQUV4RCxPQUFPLGFBQWEsQ0FBQTtJQUN0QixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FDWCxjQUFzQyxFQUN0QyxhQUFxQyxFQUNyQyxZQUFxQjtRQUVyQixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUN0QyxPQUFPO2dCQUNMLE1BQU0sRUFBRSwrQkFBb0IsQ0FBQyxPQUFPO2dCQUNwQyxRQUFRLEVBQUUseUJBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7YUFDbkQsQ0FBQTtRQUNILENBQUM7UUFDRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsYUFBYSxDQUFDLENBQUE7UUFDN0UsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVksQ0FDaEIsU0FBbUMsRUFDbkMsVUFBc0IsRUFDdEIsVUFBMEI7UUFFMUIsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFBO1FBQzFCLE1BQU0sYUFBYSxHQUEyQjtZQUM1QyxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDckMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFVBQVU7WUFDVixpQkFBaUIsRUFBRSxJQUFJLENBQUMsd0JBQXdCO1lBQ2hELFVBQVUsRUFBRSxJQUFJLENBQUMsaUJBQWlCO1lBQ2xDLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTTtZQUMxQixLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUs7U0FDekIsQ0FBQTtRQUNELEtBQUssTUFBTSxrQkFBa0IsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUMzQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRSxhQUFhLENBQUMsQ0FBQTtZQUNqRixlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzlCLENBQUM7UUFDRCxPQUFPLGVBQWUsQ0FBQTtJQUN4QixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFzQixFQUFFLFFBQWtCO1FBQ3RELElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQztZQUMvQixPQUFPO2dCQUNMLE1BQU0sRUFBRTtvQkFDTixNQUFNLEVBQUUsK0JBQW9CLENBQUMsT0FBTztvQkFDcEMsUUFBUSxFQUFFLHlCQUFjLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO2lCQUNuRDthQUNGLENBQUE7UUFDSCxDQUFDO1FBQ0QsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUU7WUFDMUUsT0FBTyxrQkFBa0IsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUN0RSxDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksZUFBZSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDckMsVUFBVSxFQUFFLElBQUEsZ0NBQWMsRUFBQztvQkFDekIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO29CQUNqQixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7b0JBQ25DLFVBQVU7aUJBQ1gsQ0FBQzthQUNnQixDQUFDLENBQUE7WUFDckIsT0FBTztnQkFDTCxNQUFNLEVBQUU7b0JBQ04sTUFBTSxFQUFFLCtCQUFvQixDQUFDLFNBQVM7b0JBQ3RDLFFBQVEsRUFBRSx5QkFBYyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztpQkFDbkQ7YUFDRixDQUFBO1FBQ0gsQ0FBQzthQUFNLElBQUksZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxPQUFPO2dCQUNMLE1BQU0sRUFBRTtvQkFDTixNQUFNLEVBQUUsK0JBQW9CLENBQUMsU0FBUztvQkFDdEMsUUFBUSxFQUFFLHlCQUFjLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO2lCQUNuRDthQUNGLENBQUE7UUFDSCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQztZQUNsQyxPQUFPO2dCQUNMLE1BQU0sRUFBRTtvQkFDTixNQUFNLEVBQUUsK0JBQW9CLENBQUMsT0FBTztvQkFDcEMsUUFBUSxFQUFFLHlCQUFjLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO2lCQUNuRDthQUNGLENBQUE7UUFDSCxDQUFDO1FBRUQsSUFBSSxVQUFlLENBQUE7UUFDbkIsSUFBSSxLQUFVLENBQUE7UUFDZCxJQUFJLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUE7UUFDMUYsSUFBSSxJQUFBLGlDQUFzQixFQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sS0FBSywrQkFBb0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMvRSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNsRSxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUNuQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQTtRQUMxQixDQUFDO1FBQ0QsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQ2xELElBQUksQ0FBQywyQkFBMkIsRUFBRSxFQUNsQyxVQUFVLEVBQ1YsVUFBVSxDQUNYLENBQUE7UUFDRCxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO1FBRXRELE1BQU0sZUFBZSxHQUFHLElBQUEsaUNBQXNCLEVBQUMsV0FBVyxDQUFDLENBQUE7UUFDM0QsSUFBSSxhQUFhLEdBQUcseUJBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUM1RCxLQUFLLE1BQU0sTUFBTSxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2pDLGFBQWEsR0FBRyx5QkFBYyxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQzdFLENBQUM7UUFDRCxlQUFlLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQTtRQUN4QyxPQUFPO1lBQ0wsTUFBTSxFQUFFLGVBQWU7WUFDdkIsS0FBSztTQUNOLENBQUE7SUFDSCxDQUFDO0NBQ0Y7QUFoVkQsaUNBZ1ZDO0FBRUQsU0FBUyxrQkFBa0IsQ0FDekIsRUFBVSxFQUNWLGtCQUFzQztJQUV0QyxPQUFPO1FBQ0wsR0FBRyxrQkFBa0IsQ0FBQyw2QkFBNkI7UUFDbkQsR0FBRyxrQkFBa0IsQ0FBQyw0QkFBNEI7S0FDbkQsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7QUFDOUMsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsRUFBVSxFQUFFLGtCQUFzQztJQUM1RSxPQUFPLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7QUFDdEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnbm9kZTpldmVudHMnXG5pbXBvcnQge1xuICB0eXBlIEVudmVsb3BlLFxuICB0eXBlIEdoZXJraW5Eb2N1bWVudCxcbiAgZ2V0V29yc3RUZXN0U3RlcFJlc3VsdCxcbiAgdHlwZSBJZEdlbmVyYXRvcixcbiAgdHlwZSBQaWNrbGUsXG4gIHR5cGUgUGlja2xlU3RlcCxcbiAgdHlwZSBUZXN0Q2FzZSxcbiAgdHlwZSBUZXN0U3RlcCxcbiAgdHlwZSBUZXN0U3RlcFJlc3VsdCxcbiAgVGVzdFN0ZXBSZXN1bHRTdGF0dXMsXG4gIFRpbWVDb252ZXJzaW9uLFxufSBmcm9tICdAY3VjdW1iZXIvbWVzc2FnZXMnXG5pbXBvcnQgdHlwZSB7IEpzb25PYmplY3QgfSBmcm9tICd0eXBlLWZlc3QnXG5pbXBvcnQgdHlwZSBTdGVwRGVmaW5pdGlvblNuaXBwZXRCdWlsZGVyIGZyb20gJy4uL2Zvcm1hdHRlci9zdGVwX2RlZmluaXRpb25fc25pcHBldF9idWlsZGVyJ1xuaW1wb3J0IHR5cGUgeyBJRGVmaW5pdGlvbiB9IGZyb20gJy4uL21vZGVscy9kZWZpbml0aW9uJ1xuaW1wb3J0IHR5cGUgU3RlcERlZmluaXRpb24gZnJvbSAnLi4vbW9kZWxzL3N0ZXBfZGVmaW5pdGlvbidcbmltcG9ydCB0eXBlIFRlc3RDYXNlSG9va0RlZmluaXRpb24gZnJvbSAnLi4vbW9kZWxzL3Rlc3RfY2FzZV9ob29rX2RlZmluaXRpb24nXG5pbXBvcnQgdHlwZSBUZXN0U3RlcEhvb2tEZWZpbml0aW9uIGZyb20gJy4uL21vZGVscy90ZXN0X3N0ZXBfaG9va19kZWZpbml0aW9uJ1xuaW1wb3J0IHR5cGUge1xuICBJVGVzdENhc2VIb29rUGFyYW1ldGVyLFxuICBJVGVzdFN0ZXBIb29rUGFyYW1ldGVyLFxuICBTdXBwb3J0Q29kZUxpYnJhcnksXG59IGZyb20gJy4uL3N1cHBvcnRfY29kZV9saWJyYXJ5X2J1aWxkZXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IElXb3JsZE9wdGlvbnMgfSBmcm9tICcuLi9zdXBwb3J0X2NvZGVfbGlicmFyeV9idWlsZGVyL3dvcmxkJ1xuaW1wb3J0IHsgZG9lc0hhdmVWYWx1ZSwgZG9lc05vdEhhdmVWYWx1ZSB9IGZyb20gJy4uL3ZhbHVlX2NoZWNrZXInXG5pbXBvcnQgQXR0YWNobWVudE1hbmFnZXIgZnJvbSAnLi9hdHRhY2htZW50X21hbmFnZXInXG5pbXBvcnQgeyBtYWtlU3VnZ2VzdGlvbiB9IGZyb20gJy4vbWFrZV9zdWdnZXN0aW9uJ1xuaW1wb3J0IFN0ZXBSdW5uZXIsIHsgdHlwZSBSdW5TdGVwUmVzdWx0IH0gZnJvbSAnLi9zdGVwX3J1bm5lcidcbmltcG9ydCB7IHRpbWVzdGFtcCB9IGZyb20gJy4vc3RvcHdhdGNoJ1xuXG5leHBvcnQgaW50ZXJmYWNlIElOZXdUZXN0Q2FzZVJ1bm5lck9wdGlvbnMge1xuICB3b3JrZXJJZD86IHN0cmluZ1xuICBldmVudEJyb2FkY2FzdGVyOiBFdmVudEVtaXR0ZXJcbiAgZ2hlcmtpbkRvY3VtZW50OiBHaGVya2luRG9jdW1lbnRcbiAgbmV3SWQ6IElkR2VuZXJhdG9yLk5ld0lkXG4gIHBpY2tsZTogUGlja2xlXG4gIHRlc3RDYXNlOiBUZXN0Q2FzZVxuICByZXRyaWVzOiBudW1iZXJcbiAgc2tpcDogYm9vbGVhblxuICBmaWx0ZXJTdGFja1RyYWNlczogYm9vbGVhblxuICBzdXBwb3J0Q29kZUxpYnJhcnk6IFN1cHBvcnRDb2RlTGlicmFyeVxuICB3b3JsZFBhcmFtZXRlcnM6IEpzb25PYmplY3RcbiAgc25pcHBldEJ1aWxkZXI6IFN0ZXBEZWZpbml0aW9uU25pcHBldEJ1aWxkZXJcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVzdENhc2VSdW5uZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtlcklkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgcHJpdmF0ZSByZWFkb25seSBhdHRhY2htZW50TWFuYWdlcjogQXR0YWNobWVudE1hbmFnZXJcbiAgcHJpdmF0ZSBjdXJyZW50VGVzdENhc2VTdGFydGVkSWQ6IHN0cmluZ1xuICBwcml2YXRlIGN1cnJlbnRUZXN0U3RlcElkOiBzdHJpbmdcbiAgcHJpdmF0ZSByZWFkb25seSBldmVudEJyb2FkY2FzdGVyOiBFdmVudEVtaXR0ZXJcbiAgcHJpdmF0ZSByZWFkb25seSBnaGVya2luRG9jdW1lbnQ6IEdoZXJraW5Eb2N1bWVudFxuICBwcml2YXRlIHJlYWRvbmx5IG5ld0lkOiBJZEdlbmVyYXRvci5OZXdJZFxuICBwcml2YXRlIHJlYWRvbmx5IHBpY2tsZTogUGlja2xlXG4gIHByaXZhdGUgcmVhZG9ubHkgdGVzdENhc2U6IFRlc3RDYXNlXG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4QXR0ZW1wdHM6IG51bWJlclxuICBwcml2YXRlIHJlYWRvbmx5IHNraXA6IGJvb2xlYW5cbiAgcHJpdmF0ZSByZWFkb25seSBmaWx0ZXJTdGFja1RyYWNlczogYm9vbGVhblxuICBwcml2YXRlIHJlYWRvbmx5IHN1cHBvcnRDb2RlTGlicmFyeTogU3VwcG9ydENvZGVMaWJyYXJ5XG4gIHByaXZhdGUgcmVhZG9ubHkgc25pcHBldEJ1aWxkZXI6IFN0ZXBEZWZpbml0aW9uU25pcHBldEJ1aWxkZXJcbiAgcHJpdmF0ZSB0ZXN0U3RlcFJlc3VsdHM6IFRlc3RTdGVwUmVzdWx0W11cbiAgcHJpdmF0ZSB3b3JsZDogYW55XG4gIHByaXZhdGUgcmVhZG9ubHkgd29ybGRQYXJhbWV0ZXJzOiBKc29uT2JqZWN0XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIHdvcmtlcklkLFxuICAgIGV2ZW50QnJvYWRjYXN0ZXIsXG4gICAgZ2hlcmtpbkRvY3VtZW50LFxuICAgIG5ld0lkLFxuICAgIHBpY2tsZSxcbiAgICB0ZXN0Q2FzZSxcbiAgICByZXRyaWVzID0gMCxcbiAgICBza2lwLFxuICAgIGZpbHRlclN0YWNrVHJhY2VzLFxuICAgIHN1cHBvcnRDb2RlTGlicmFyeSxcbiAgICB3b3JsZFBhcmFtZXRlcnMsXG4gICAgc25pcHBldEJ1aWxkZXIsXG4gIH06IElOZXdUZXN0Q2FzZVJ1bm5lck9wdGlvbnMpIHtcbiAgICB0aGlzLndvcmtlcklkID0gd29ya2VySWRcbiAgICB0aGlzLmF0dGFjaG1lbnRNYW5hZ2VyID0gbmV3IEF0dGFjaG1lbnRNYW5hZ2VyKCh7IGRhdGEsIG1lZGlhLCBmaWxlTmFtZSB9KSA9PiB7XG4gICAgICBpZiAoZG9lc05vdEhhdmVWYWx1ZSh0aGlzLmN1cnJlbnRUZXN0U3RlcElkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0Nhbm5vdCBhdHRhY2ggd2hlbiBhIHN0ZXAvaG9vayBpcyBub3QgcnVubmluZy4gRW5zdXJlIHlvdXIgc3RlcC9ob29rIHdhaXRzIGZvciB0aGUgYXR0YWNoIHRvIGZpbmlzaC4nXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGF0dGFjaG1lbnQ6IEVudmVsb3BlID0ge1xuICAgICAgICBhdHRhY2htZW50OiB7XG4gICAgICAgICAgYm9keTogZGF0YSxcbiAgICAgICAgICBjb250ZW50RW5jb2Rpbmc6IG1lZGlhLmVuY29kaW5nLFxuICAgICAgICAgIG1lZGlhVHlwZTogbWVkaWEuY29udGVudFR5cGUsXG4gICAgICAgICAgZmlsZU5hbWUsXG4gICAgICAgICAgdGVzdENhc2VTdGFydGVkSWQ6IHRoaXMuY3VycmVudFRlc3RDYXNlU3RhcnRlZElkLFxuICAgICAgICAgIHRlc3RTdGVwSWQ6IHRoaXMuY3VycmVudFRlc3RTdGVwSWQsXG4gICAgICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXAoKSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICAgIHRoaXMuZXZlbnRCcm9hZGNhc3Rlci5lbWl0KCdlbnZlbG9wZScsIGF0dGFjaG1lbnQpXG4gICAgfSlcbiAgICB0aGlzLmV2ZW50QnJvYWRjYXN0ZXIgPSBldmVudEJyb2FkY2FzdGVyXG4gICAgdGhpcy5naGVya2luRG9jdW1lbnQgPSBnaGVya2luRG9jdW1lbnRcbiAgICB0aGlzLm1heEF0dGVtcHRzID0gMSArIChza2lwID8gMCA6IHJldHJpZXMpXG4gICAgdGhpcy5uZXdJZCA9IG5ld0lkXG4gICAgdGhpcy5waWNrbGUgPSBwaWNrbGVcbiAgICB0aGlzLnRlc3RDYXNlID0gdGVzdENhc2VcbiAgICB0aGlzLnNraXAgPSBza2lwXG4gICAgdGhpcy5maWx0ZXJTdGFja1RyYWNlcyA9IGZpbHRlclN0YWNrVHJhY2VzXG4gICAgdGhpcy5zdXBwb3J0Q29kZUxpYnJhcnkgPSBzdXBwb3J0Q29kZUxpYnJhcnlcbiAgICB0aGlzLndvcmxkUGFyYW1ldGVycyA9IHdvcmxkUGFyYW1ldGVyc1xuICAgIHRoaXMuc25pcHBldEJ1aWxkZXIgPSBzbmlwcGV0QnVpbGRlclxuICAgIHRoaXMucmVzZXRUZXN0UHJvZ3Jlc3NEYXRhKClcbiAgfVxuXG4gIHJlc2V0VGVzdFByb2dyZXNzRGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLndvcmxkID0gbmV3IHRoaXMuc3VwcG9ydENvZGVMaWJyYXJ5LldvcmxkKHtcbiAgICAgIGF0dGFjaDogdGhpcy5hdHRhY2htZW50TWFuYWdlci5jcmVhdGUuYmluZCh0aGlzLmF0dGFjaG1lbnRNYW5hZ2VyKSxcbiAgICAgIGxvZzogdGhpcy5hdHRhY2htZW50TWFuYWdlci5sb2cuYmluZCh0aGlzLmF0dGFjaG1lbnRNYW5hZ2VyKSxcbiAgICAgIGxpbms6IHRoaXMuYXR0YWNobWVudE1hbmFnZXIubGluay5iaW5kKHRoaXMuYXR0YWNobWVudE1hbmFnZXIpLFxuICAgICAgcGFyYW1ldGVyczogc3RydWN0dXJlZENsb25lKHRoaXMud29ybGRQYXJhbWV0ZXJzKSxcbiAgICB9IHNhdGlzZmllcyBJV29ybGRPcHRpb25zKVxuICAgIHRoaXMudGVzdFN0ZXBSZXN1bHRzID0gW11cbiAgfVxuXG4gIGdldEJlZm9yZVN0ZXBIb29rRGVmaW5pdGlvbnMoKTogVGVzdFN0ZXBIb29rRGVmaW5pdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5zdXBwb3J0Q29kZUxpYnJhcnkuYmVmb3JlVGVzdFN0ZXBIb29rRGVmaW5pdGlvbnMuZmlsdGVyKChob29rRGVmaW5pdGlvbikgPT5cbiAgICAgIGhvb2tEZWZpbml0aW9uLmFwcGxpZXNUb1Rlc3RDYXNlKHRoaXMucGlja2xlKVxuICAgIClcbiAgfVxuXG4gIGdldEFmdGVyU3RlcEhvb2tEZWZpbml0aW9ucygpOiBUZXN0U3RlcEhvb2tEZWZpbml0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLnN1cHBvcnRDb2RlTGlicmFyeS5hZnRlclRlc3RTdGVwSG9va0RlZmluaXRpb25zXG4gICAgICAuc2xpY2UoMClcbiAgICAgIC5yZXZlcnNlKClcbiAgICAgIC5maWx0ZXIoKGhvb2tEZWZpbml0aW9uKSA9PiBob29rRGVmaW5pdGlvbi5hcHBsaWVzVG9UZXN0Q2FzZSh0aGlzLnBpY2tsZSkpXG4gIH1cblxuICBnZXRXb3JzdFN0ZXBSZXN1bHQoKTogVGVzdFN0ZXBSZXN1bHQge1xuICAgIGlmICh0aGlzLnRlc3RTdGVwUmVzdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogdGhpcy5za2lwID8gVGVzdFN0ZXBSZXN1bHRTdGF0dXMuU0tJUFBFRCA6IFRlc3RTdGVwUmVzdWx0U3RhdHVzLlBBU1NFRCxcbiAgICAgICAgZHVyYXRpb246IFRpbWVDb252ZXJzaW9uLm1pbGxpc2Vjb25kc1RvRHVyYXRpb24oMCksXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBnZXRXb3JzdFRlc3RTdGVwUmVzdWx0KHRoaXMudGVzdFN0ZXBSZXN1bHRzKVxuICB9XG5cbiAgYXN5bmMgaW52b2tlU3RlcChcbiAgICBzdGVwOiBQaWNrbGVTdGVwLFxuICAgIHN0ZXBEZWZpbml0aW9uOiBJRGVmaW5pdGlvbixcbiAgICBob29rUGFyYW1ldGVyPzogSVRlc3RDYXNlSG9va1BhcmFtZXRlclxuICApOiBQcm9taXNlPFJ1blN0ZXBSZXN1bHQ+IHtcbiAgICByZXR1cm4gYXdhaXQgU3RlcFJ1bm5lci5ydW4oe1xuICAgICAgZGVmYXVsdFRpbWVvdXQ6IHRoaXMuc3VwcG9ydENvZGVMaWJyYXJ5LmRlZmF1bHRUaW1lb3V0LFxuICAgICAgZmlsdGVyU3RhY2tUcmFjZXM6IHRoaXMuZmlsdGVyU3RhY2tUcmFjZXMsXG4gICAgICBob29rUGFyYW1ldGVyLFxuICAgICAgc3RlcCxcbiAgICAgIHN0ZXBEZWZpbml0aW9uLFxuICAgICAgd29ybGQ6IHRoaXMud29ybGQsXG4gICAgfSlcbiAgfVxuXG4gIGlzU2tpcHBpbmdTdGVwcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRXb3JzdFN0ZXBSZXN1bHQoKS5zdGF0dXMgIT09IFRlc3RTdGVwUmVzdWx0U3RhdHVzLlBBU1NFRFxuICB9XG5cbiAgaXNFeHBsaWNpdGx5U2tpcHBlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuc2tpcCAmJiB0aGlzLmdldFdvcnN0U3RlcFJlc3VsdCgpLnN0YXR1cyA9PT0gVGVzdFN0ZXBSZXN1bHRTdGF0dXMuU0tJUFBFRFxuICB9XG5cbiAgc2hvdWxkU2tpcEhvb2soaXNCZWZvcmVIb29rOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2tpcCB8fCAodGhpcy5pc1NraXBwaW5nU3RlcHMoKSAmJiBpc0JlZm9yZUhvb2spXG4gIH1cblxuICBhc3luYyBhcm91bmRUZXN0U3RlcChcbiAgICB0ZXN0U3RlcElkOiBzdHJpbmcsXG4gICAgcnVuU3RlcEZuOiAoKSA9PiBQcm9taXNlPFRlc3RTdGVwUmVzdWx0PlxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0ZXN0U3RlcFN0YXJ0ZWQ6IEVudmVsb3BlID0ge1xuICAgICAgdGVzdFN0ZXBTdGFydGVkOiB7XG4gICAgICAgIHRlc3RDYXNlU3RhcnRlZElkOiB0aGlzLmN1cnJlbnRUZXN0Q2FzZVN0YXJ0ZWRJZCxcbiAgICAgICAgdGVzdFN0ZXBJZCxcbiAgICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXAoKSxcbiAgICAgIH0sXG4gICAgfVxuICAgIHRoaXMuZXZlbnRCcm9hZGNhc3Rlci5lbWl0KCdlbnZlbG9wZScsIHRlc3RTdGVwU3RhcnRlZClcbiAgICB0aGlzLmN1cnJlbnRUZXN0U3RlcElkID0gdGVzdFN0ZXBJZFxuICAgIGNvbnN0IHRlc3RTdGVwUmVzdWx0ID0gYXdhaXQgcnVuU3RlcEZuKClcbiAgICB0aGlzLmN1cnJlbnRUZXN0U3RlcElkID0gbnVsbFxuICAgIHRoaXMudGVzdFN0ZXBSZXN1bHRzLnB1c2godGVzdFN0ZXBSZXN1bHQpXG4gICAgY29uc3QgdGVzdFN0ZXBGaW5pc2hlZDogRW52ZWxvcGUgPSB7XG4gICAgICB0ZXN0U3RlcEZpbmlzaGVkOiB7XG4gICAgICAgIHRlc3RDYXNlU3RhcnRlZElkOiB0aGlzLmN1cnJlbnRUZXN0Q2FzZVN0YXJ0ZWRJZCxcbiAgICAgICAgdGVzdFN0ZXBJZCxcbiAgICAgICAgdGVzdFN0ZXBSZXN1bHQsXG4gICAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wKCksXG4gICAgICB9LFxuICAgIH1cbiAgICB0aGlzLmV2ZW50QnJvYWRjYXN0ZXIuZW1pdCgnZW52ZWxvcGUnLCB0ZXN0U3RlcEZpbmlzaGVkKVxuICB9XG5cbiAgYXN5bmMgcnVuKCk6IFByb21pc2U8VGVzdFN0ZXBSZXN1bHRTdGF0dXM+IHtcbiAgICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IHRoaXMubWF4QXR0ZW1wdHM7IGF0dGVtcHQrKykge1xuICAgICAgY29uc3QgbW9yZUF0dGVtcHRzUmVtYWluaW5nID0gYXR0ZW1wdCArIDEgPCB0aGlzLm1heEF0dGVtcHRzXG5cbiAgICAgIGNvbnN0IHdpbGxCZVJldHJpZWQgPSBhd2FpdCB0aGlzLnJ1bkF0dGVtcHQoYXR0ZW1wdCwgbW9yZUF0dGVtcHRzUmVtYWluaW5nKVxuXG4gICAgICBpZiAoIXdpbGxCZVJldHJpZWQpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVzZXRUZXN0UHJvZ3Jlc3NEYXRhKClcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0V29yc3RTdGVwUmVzdWx0KCkuc3RhdHVzXG4gIH1cblxuICBhc3luYyBydW5BdHRlbXB0KGF0dGVtcHQ6IG51bWJlciwgbW9yZUF0dGVtcHRzUmVtYWluaW5nOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy5jdXJyZW50VGVzdENhc2VTdGFydGVkSWQgPSB0aGlzLm5ld0lkKClcbiAgICBjb25zdCB0ZXN0Q2FzZVN0YXJ0ZWQ6IEVudmVsb3BlID0ge1xuICAgICAgdGVzdENhc2VTdGFydGVkOiB7XG4gICAgICAgIGF0dGVtcHQsXG4gICAgICAgIHRlc3RDYXNlSWQ6IHRoaXMudGVzdENhc2UuaWQsXG4gICAgICAgIGlkOiB0aGlzLmN1cnJlbnRUZXN0Q2FzZVN0YXJ0ZWRJZCxcbiAgICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXAoKSxcbiAgICAgIH0sXG4gICAgfVxuICAgIGlmICh0aGlzLndvcmtlcklkKSB7XG4gICAgICB0ZXN0Q2FzZVN0YXJ0ZWQudGVzdENhc2VTdGFydGVkLndvcmtlcklkID0gdGhpcy53b3JrZXJJZFxuICAgIH1cbiAgICB0aGlzLmV2ZW50QnJvYWRjYXN0ZXIuZW1pdCgnZW52ZWxvcGUnLCB0ZXN0Q2FzZVN0YXJ0ZWQpXG4gICAgLy8gdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhIGhvb2sgaXMgYSBCZWZvcmUgb3IgQWZ0ZXJcbiAgICBsZXQgZGlkV2VSdW5TdGVwc1lldCA9IGZhbHNlXG4gICAgbGV0IGVycm9yID0gZmFsc2VcbiAgICBmb3IgKGNvbnN0IHRlc3RTdGVwIG9mIHRoaXMudGVzdENhc2UudGVzdFN0ZXBzKSB7XG4gICAgICBhd2FpdCB0aGlzLmFyb3VuZFRlc3RTdGVwKHRlc3RTdGVwLmlkLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChkb2VzSGF2ZVZhbHVlKHRlc3RTdGVwLmhvb2tJZCkpIHtcbiAgICAgICAgICBjb25zdCBob29rUGFyYW1ldGVyOiBJVGVzdENhc2VIb29rUGFyYW1ldGVyID0ge1xuICAgICAgICAgICAgZ2hlcmtpbkRvY3VtZW50OiB0aGlzLmdoZXJraW5Eb2N1bWVudCxcbiAgICAgICAgICAgIHBpY2tsZTogdGhpcy5waWNrbGUsXG4gICAgICAgICAgICB0ZXN0Q2FzZVN0YXJ0ZWRJZDogdGhpcy5jdXJyZW50VGVzdENhc2VTdGFydGVkSWQsXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkaWRXZVJ1blN0ZXBzWWV0KSB7XG4gICAgICAgICAgICBob29rUGFyYW1ldGVyLnJlc3VsdCA9IHRoaXMuZ2V0V29yc3RTdGVwUmVzdWx0KClcbiAgICAgICAgICAgIGhvb2tQYXJhbWV0ZXIuZXJyb3IgPSBlcnJvclxuICAgICAgICAgICAgaG9va1BhcmFtZXRlci53aWxsQmVSZXRyaWVkID1cbiAgICAgICAgICAgICAgdGhpcy5nZXRXb3JzdFN0ZXBSZXN1bHQoKS5zdGF0dXMgPT09IFRlc3RTdGVwUmVzdWx0U3RhdHVzLkZBSUxFRCAmJlxuICAgICAgICAgICAgICBtb3JlQXR0ZW1wdHNSZW1haW5pbmdcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucnVuSG9vayhcbiAgICAgICAgICAgIGZpbmRIb29rRGVmaW5pdGlvbih0ZXN0U3RlcC5ob29rSWQsIHRoaXMuc3VwcG9ydENvZGVMaWJyYXJ5KSxcbiAgICAgICAgICAgIGhvb2tQYXJhbWV0ZXIsXG4gICAgICAgICAgICAhZGlkV2VSdW5TdGVwc1lldFxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBwaWNrbGVTdGVwID0gdGhpcy5waWNrbGUuc3RlcHMuZmluZChcbiAgICAgICAgICAgIChwaWNrbGVTdGVwKSA9PiBwaWNrbGVTdGVwLmlkID09PSB0ZXN0U3RlcC5waWNrbGVTdGVwSWRcbiAgICAgICAgICApXG4gICAgICAgICAgY29uc3QgdGVzdFN0ZXBSZXN1bHQgPSBhd2FpdCB0aGlzLnJ1blN0ZXAocGlja2xlU3RlcCwgdGVzdFN0ZXApXG4gICAgICAgICAgZGlkV2VSdW5TdGVwc1lldCA9IHRydWVcbiAgICAgICAgICBlcnJvciA9IHRlc3RTdGVwUmVzdWx0LmVycm9yXG4gICAgICAgICAgcmV0dXJuIHRlc3RTdGVwUmVzdWx0LnJlc3VsdFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IHdpbGxCZVJldHJpZWQgPVxuICAgICAgdGhpcy5nZXRXb3JzdFN0ZXBSZXN1bHQoKS5zdGF0dXMgPT09IFRlc3RTdGVwUmVzdWx0U3RhdHVzLkZBSUxFRCAmJiBtb3JlQXR0ZW1wdHNSZW1haW5pbmdcbiAgICBjb25zdCB0ZXN0Q2FzZUZpbmlzaGVkOiBFbnZlbG9wZSA9IHtcbiAgICAgIHRlc3RDYXNlRmluaXNoZWQ6IHtcbiAgICAgICAgdGVzdENhc2VTdGFydGVkSWQ6IHRoaXMuY3VycmVudFRlc3RDYXNlU3RhcnRlZElkLFxuICAgICAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcCgpLFxuICAgICAgICB3aWxsQmVSZXRyaWVkLFxuICAgICAgfSxcbiAgICB9XG4gICAgdGhpcy5ldmVudEJyb2FkY2FzdGVyLmVtaXQoJ2VudmVsb3BlJywgdGVzdENhc2VGaW5pc2hlZClcblxuICAgIHJldHVybiB3aWxsQmVSZXRyaWVkXG4gIH1cblxuICBhc3luYyBydW5Ib29rKFxuICAgIGhvb2tEZWZpbml0aW9uOiBUZXN0Q2FzZUhvb2tEZWZpbml0aW9uLFxuICAgIGhvb2tQYXJhbWV0ZXI6IElUZXN0Q2FzZUhvb2tQYXJhbWV0ZXIsXG4gICAgaXNCZWZvcmVIb29rOiBib29sZWFuXG4gICk6IFByb21pc2U8VGVzdFN0ZXBSZXN1bHQ+IHtcbiAgICBpZiAodGhpcy5zaG91bGRTa2lwSG9vayhpc0JlZm9yZUhvb2spKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IFRlc3RTdGVwUmVzdWx0U3RhdHVzLlNLSVBQRUQsXG4gICAgICAgIGR1cmF0aW9uOiBUaW1lQ29udmVyc2lvbi5taWxsaXNlY29uZHNUb0R1cmF0aW9uKDApLFxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB7IHJlc3VsdCB9ID0gYXdhaXQgdGhpcy5pbnZva2VTdGVwKG51bGwsIGhvb2tEZWZpbml0aW9uLCBob29rUGFyYW1ldGVyKVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGFzeW5jIHJ1blN0ZXBIb29rcyhcbiAgICBzdGVwSG9va3M6IFRlc3RTdGVwSG9va0RlZmluaXRpb25bXSxcbiAgICBwaWNrbGVTdGVwOiBQaWNrbGVTdGVwLFxuICAgIHN0ZXBSZXN1bHQ/OiBSdW5TdGVwUmVzdWx0XG4gICk6IFByb21pc2U8VGVzdFN0ZXBSZXN1bHRbXT4ge1xuICAgIGNvbnN0IHN0ZXBIb29rc1Jlc3VsdCA9IFtdXG4gICAgY29uc3QgaG9va1BhcmFtZXRlcjogSVRlc3RTdGVwSG9va1BhcmFtZXRlciA9IHtcbiAgICAgIGdoZXJraW5Eb2N1bWVudDogdGhpcy5naGVya2luRG9jdW1lbnQsXG4gICAgICBwaWNrbGU6IHRoaXMucGlja2xlLFxuICAgICAgcGlja2xlU3RlcCxcbiAgICAgIHRlc3RDYXNlU3RhcnRlZElkOiB0aGlzLmN1cnJlbnRUZXN0Q2FzZVN0YXJ0ZWRJZCxcbiAgICAgIHRlc3RTdGVwSWQ6IHRoaXMuY3VycmVudFRlc3RTdGVwSWQsXG4gICAgICByZXN1bHQ6IHN0ZXBSZXN1bHQ/LnJlc3VsdCxcbiAgICAgIGVycm9yOiBzdGVwUmVzdWx0Py5lcnJvcixcbiAgICB9XG4gICAgZm9yIChjb25zdCBzdGVwSG9va0RlZmluaXRpb24gb2Ygc3RlcEhvb2tzKSB7XG4gICAgICBjb25zdCB7IHJlc3VsdCB9ID0gYXdhaXQgdGhpcy5pbnZva2VTdGVwKG51bGwsIHN0ZXBIb29rRGVmaW5pdGlvbiwgaG9va1BhcmFtZXRlcilcbiAgICAgIHN0ZXBIb29rc1Jlc3VsdC5wdXNoKHJlc3VsdClcbiAgICB9XG4gICAgcmV0dXJuIHN0ZXBIb29rc1Jlc3VsdFxuICB9XG5cbiAgYXN5bmMgcnVuU3RlcChwaWNrbGVTdGVwOiBQaWNrbGVTdGVwLCB0ZXN0U3RlcDogVGVzdFN0ZXApOiBQcm9taXNlPFJ1blN0ZXBSZXN1bHQ+IHtcbiAgICBpZiAodGhpcy5pc0V4cGxpY2l0bHlTa2lwcGVkKCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIHN0YXR1czogVGVzdFN0ZXBSZXN1bHRTdGF0dXMuU0tJUFBFRCxcbiAgICAgICAgICBkdXJhdGlvbjogVGltZUNvbnZlcnNpb24ubWlsbGlzZWNvbmRzVG9EdXJhdGlvbigwKSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3RlcERlZmluaXRpb25zID0gdGVzdFN0ZXAuc3RlcERlZmluaXRpb25JZHMubWFwKChzdGVwRGVmaW5pdGlvbklkKSA9PiB7XG4gICAgICByZXR1cm4gZmluZFN0ZXBEZWZpbml0aW9uKHN0ZXBEZWZpbml0aW9uSWQsIHRoaXMuc3VwcG9ydENvZGVMaWJyYXJ5KVxuICAgIH0pXG4gICAgaWYgKHN0ZXBEZWZpbml0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZXZlbnRCcm9hZGNhc3Rlci5lbWl0KCdlbnZlbG9wZScsIHtcbiAgICAgICAgc3VnZ2VzdGlvbjogbWFrZVN1Z2dlc3Rpb24oe1xuICAgICAgICAgIG5ld0lkOiB0aGlzLm5ld0lkLFxuICAgICAgICAgIHNuaXBwZXRCdWlsZGVyOiB0aGlzLnNuaXBwZXRCdWlsZGVyLFxuICAgICAgICAgIHBpY2tsZVN0ZXAsXG4gICAgICAgIH0pLFxuICAgICAgfSBzYXRpc2ZpZXMgRW52ZWxvcGUpXG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBzdGF0dXM6IFRlc3RTdGVwUmVzdWx0U3RhdHVzLlVOREVGSU5FRCxcbiAgICAgICAgICBkdXJhdGlvbjogVGltZUNvbnZlcnNpb24ubWlsbGlzZWNvbmRzVG9EdXJhdGlvbigwKSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0ZXBEZWZpbml0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBzdGF0dXM6IFRlc3RTdGVwUmVzdWx0U3RhdHVzLkFNQklHVU9VUyxcbiAgICAgICAgICBkdXJhdGlvbjogVGltZUNvbnZlcnNpb24ubWlsbGlzZWNvbmRzVG9EdXJhdGlvbigwKSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNTa2lwcGluZ1N0ZXBzKCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIHN0YXR1czogVGVzdFN0ZXBSZXN1bHRTdGF0dXMuU0tJUFBFRCxcbiAgICAgICAgICBkdXJhdGlvbjogVGltZUNvbnZlcnNpb24ubWlsbGlzZWNvbmRzVG9EdXJhdGlvbigwKSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgc3RlcFJlc3VsdDogYW55XG4gICAgbGV0IGVycm9yOiBhbnlcbiAgICBsZXQgc3RlcFJlc3VsdHMgPSBhd2FpdCB0aGlzLnJ1blN0ZXBIb29rcyh0aGlzLmdldEJlZm9yZVN0ZXBIb29rRGVmaW5pdGlvbnMoKSwgcGlja2xlU3RlcClcbiAgICBpZiAoZ2V0V29yc3RUZXN0U3RlcFJlc3VsdChzdGVwUmVzdWx0cykuc3RhdHVzICE9PSBUZXN0U3RlcFJlc3VsdFN0YXR1cy5GQUlMRUQpIHtcbiAgICAgIHN0ZXBSZXN1bHQgPSBhd2FpdCB0aGlzLmludm9rZVN0ZXAocGlja2xlU3RlcCwgc3RlcERlZmluaXRpb25zWzBdKVxuICAgICAgc3RlcFJlc3VsdHMucHVzaChzdGVwUmVzdWx0LnJlc3VsdClcbiAgICAgIGVycm9yID0gc3RlcFJlc3VsdC5lcnJvclxuICAgIH1cbiAgICBjb25zdCBhZnRlclN0ZXBIb29rUmVzdWx0cyA9IGF3YWl0IHRoaXMucnVuU3RlcEhvb2tzKFxuICAgICAgdGhpcy5nZXRBZnRlclN0ZXBIb29rRGVmaW5pdGlvbnMoKSxcbiAgICAgIHBpY2tsZVN0ZXAsXG4gICAgICBzdGVwUmVzdWx0XG4gICAgKVxuICAgIHN0ZXBSZXN1bHRzID0gc3RlcFJlc3VsdHMuY29uY2F0KGFmdGVyU3RlcEhvb2tSZXN1bHRzKVxuXG4gICAgY29uc3QgZmluYWxTdGVwUmVzdWx0ID0gZ2V0V29yc3RUZXN0U3RlcFJlc3VsdChzdGVwUmVzdWx0cylcbiAgICBsZXQgZmluYWxEdXJhdGlvbiA9IFRpbWVDb252ZXJzaW9uLm1pbGxpc2Vjb25kc1RvRHVyYXRpb24oMClcbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiBzdGVwUmVzdWx0cykge1xuICAgICAgZmluYWxEdXJhdGlvbiA9IFRpbWVDb252ZXJzaW9uLmFkZER1cmF0aW9ucyhmaW5hbER1cmF0aW9uLCByZXN1bHQuZHVyYXRpb24pXG4gICAgfVxuICAgIGZpbmFsU3RlcFJlc3VsdC5kdXJhdGlvbiA9IGZpbmFsRHVyYXRpb25cbiAgICByZXR1cm4ge1xuICAgICAgcmVzdWx0OiBmaW5hbFN0ZXBSZXN1bHQsXG4gICAgICBlcnJvcixcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEhvb2tEZWZpbml0aW9uKFxuICBpZDogc3RyaW5nLFxuICBzdXBwb3J0Q29kZUxpYnJhcnk6IFN1cHBvcnRDb2RlTGlicmFyeVxuKTogVGVzdENhc2VIb29rRGVmaW5pdGlvbiB7XG4gIHJldHVybiBbXG4gICAgLi4uc3VwcG9ydENvZGVMaWJyYXJ5LmJlZm9yZVRlc3RDYXNlSG9va0RlZmluaXRpb25zLFxuICAgIC4uLnN1cHBvcnRDb2RlTGlicmFyeS5hZnRlclRlc3RDYXNlSG9va0RlZmluaXRpb25zLFxuICBdLmZpbmQoKGRlZmluaXRpb24pID0+IGRlZmluaXRpb24uaWQgPT09IGlkKVxufVxuXG5mdW5jdGlvbiBmaW5kU3RlcERlZmluaXRpb24oaWQ6IHN0cmluZywgc3VwcG9ydENvZGVMaWJyYXJ5OiBTdXBwb3J0Q29kZUxpYnJhcnkpOiBTdGVwRGVmaW5pdGlvbiB7XG4gIHJldHVybiBzdXBwb3J0Q29kZUxpYnJhcnkuc3RlcERlZmluaXRpb25zLmZpbmQoKGRlZmluaXRpb24pID0+IGRlZmluaXRpb24uaWQgPT09IGlkKVxufVxuIl19
@@ -1,3 +1,4 @@
1
+ import type { Exception } from '@cucumber/messages';
1
2
  import type { JsonObject } from 'type-fest';
2
3
  import type { AssembledTestCase } from '../assemble';
3
4
  export interface RuntimeOptions {
@@ -9,8 +10,12 @@ export interface RuntimeOptions {
9
10
  strict: boolean;
10
11
  worldParameters: JsonObject;
11
12
  }
13
+ export interface RuntimeResult {
14
+ success: boolean;
15
+ exception?: Exception;
16
+ }
12
17
  export interface Runtime {
13
- run: () => Promise<boolean>;
18
+ run: () => Promise<RuntimeResult>;
14
19
  }
15
20
  export interface RuntimeAdapter {
16
21
  setup(): Promise<void>;
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBKc29uT2JqZWN0IH0gZnJvbSAndHlwZS1mZXN0J1xuaW1wb3J0IHR5cGUgeyBBc3NlbWJsZWRUZXN0Q2FzZSB9IGZyb20gJy4uL2Fzc2VtYmxlJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bnRpbWVPcHRpb25zIHtcbiAgZHJ5UnVuOiBib29sZWFuXG4gIGZhaWxGYXN0OiBib29sZWFuXG4gIGZpbHRlclN0YWNrdHJhY2VzOiBib29sZWFuXG4gIHJldHJ5OiBudW1iZXJcbiAgcmV0cnlUYWdGaWx0ZXI6IHN0cmluZ1xuICBzdHJpY3Q6IGJvb2xlYW5cbiAgd29ybGRQYXJhbWV0ZXJzOiBKc29uT2JqZWN0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVudGltZSB7XG4gIHJ1bjogKCkgPT4gUHJvbWlzZTxib29sZWFuPlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bnRpbWVBZGFwdGVyIHtcbiAgc2V0dXAoKTogUHJvbWlzZTx2b2lkPlxuICBydW5CZWZvcmVBbGxIb29rcygpOiBQcm9taXNlPGJvb2xlYW4+XG4gIHJ1blRlc3RDYXNlcyhhc3NlbWJsZWRUZXN0Q2FzZXM6IFJlYWRvbmx5QXJyYXk8QXNzZW1ibGVkVGVzdENhc2U+KTogUHJvbWlzZTxib29sZWFuPlxuICBydW5BZnRlckFsbEhvb2tzKCk6IFByb21pc2U8Ym9vbGVhbj5cbiAgdGVhcmRvd24oKTogUHJvbWlzZTx2b2lkPlxufVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFeGNlcHRpb24gfSBmcm9tICdAY3VjdW1iZXIvbWVzc2FnZXMnXG5pbXBvcnQgdHlwZSB7IEpzb25PYmplY3QgfSBmcm9tICd0eXBlLWZlc3QnXG5pbXBvcnQgdHlwZSB7IEFzc2VtYmxlZFRlc3RDYXNlIH0gZnJvbSAnLi4vYXNzZW1ibGUnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVudGltZU9wdGlvbnMge1xuICBkcnlSdW46IGJvb2xlYW5cbiAgZmFpbEZhc3Q6IGJvb2xlYW5cbiAgZmlsdGVyU3RhY2t0cmFjZXM6IGJvb2xlYW5cbiAgcmV0cnk6IG51bWJlclxuICByZXRyeVRhZ0ZpbHRlcjogc3RyaW5nXG4gIHN0cmljdDogYm9vbGVhblxuICB3b3JsZFBhcmFtZXRlcnM6IEpzb25PYmplY3Rcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdW50aW1lUmVzdWx0IHtcbiAgc3VjY2VzczogYm9vbGVhblxuICBleGNlcHRpb24/OiBFeGNlcHRpb25cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdW50aW1lIHtcbiAgcnVuOiAoKSA9PiBQcm9taXNlPFJ1bnRpbWVSZXN1bHQ+XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVudGltZUFkYXB0ZXIge1xuICBzZXR1cCgpOiBQcm9taXNlPHZvaWQ+XG4gIHJ1bkJlZm9yZUFsbEhvb2tzKCk6IFByb21pc2U8Ym9vbGVhbj5cbiAgcnVuVGVzdENhc2VzKGFzc2VtYmxlZFRlc3RDYXNlczogUmVhZG9ubHlBcnJheTxBc3NlbWJsZWRUZXN0Q2FzZT4pOiBQcm9taXNlPGJvb2xlYW4+XG4gIHJ1bkFmdGVyQWxsSG9va3MoKTogUHJvbWlzZTxib29sZWFuPlxuICB0ZWFyZG93bigpOiBQcm9taXNlPHZvaWQ+XG59XG4iXX0=
@@ -1,6 +1,6 @@
1
- import type * as messages from '@cucumber/messages';
1
+ import type { PickleDocString, PickleStepArgument, PickleTable } from '@cucumber/messages';
2
2
  export interface IPickleStepArgumentFunctionMap<T> {
3
- dataTable: (arg: messages.PickleTable) => T;
4
- docString: (arg: messages.PickleDocString) => T;
3
+ dataTable: (arg: PickleTable) => T;
4
+ docString: (arg: PickleDocString) => T;
5
5
  }
6
- export declare function parseStepArgument<T>(arg: messages.PickleStepArgument, mapping: IPickleStepArgumentFunctionMap<T>): T;
6
+ export declare function parseStepArgument<T>(arg: PickleStepArgument, mapping: IPickleStepArgumentFunctionMap<T>): T;
@@ -15,4 +15,4 @@ function parseStepArgument(arg, mapping) {
15
15
  }
16
16
  throw new Error(`Unknown step argument: ${node_util_1.default.inspect(arg)}`);
17
17
  }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcF9hcmd1bWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3RlcF9hcmd1bWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFTQSw4Q0FVQztBQW5CRCwwREFBNEI7QUFFNUIsbURBQStDO0FBTy9DLFNBQWdCLGlCQUFpQixDQUMvQixHQUFnQyxFQUNoQyxPQUEwQztJQUUxQyxJQUFJLElBQUEsNkJBQWEsRUFBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUNqQyxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3pDLENBQUM7U0FBTSxJQUFJLElBQUEsNkJBQWEsRUFBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUN4QyxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3pDLENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixtQkFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7QUFDaEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB1dGlsIGZyb20gJ25vZGU6dXRpbCdcbmltcG9ydCB0eXBlICogYXMgbWVzc2FnZXMgZnJvbSAnQGN1Y3VtYmVyL21lc3NhZ2VzJ1xuaW1wb3J0IHsgZG9lc0hhdmVWYWx1ZSB9IGZyb20gJy4vdmFsdWVfY2hlY2tlcidcblxuZXhwb3J0IGludGVyZmFjZSBJUGlja2xlU3RlcEFyZ3VtZW50RnVuY3Rpb25NYXA8VD4ge1xuICBkYXRhVGFibGU6IChhcmc6IG1lc3NhZ2VzLlBpY2tsZVRhYmxlKSA9PiBUXG4gIGRvY1N0cmluZzogKGFyZzogbWVzc2FnZXMuUGlja2xlRG9jU3RyaW5nKSA9PiBUXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0ZXBBcmd1bWVudDxUPihcbiAgYXJnOiBtZXNzYWdlcy5QaWNrbGVTdGVwQXJndW1lbnQsXG4gIG1hcHBpbmc6IElQaWNrbGVTdGVwQXJndW1lbnRGdW5jdGlvbk1hcDxUPlxuKTogVCB7XG4gIGlmIChkb2VzSGF2ZVZhbHVlKGFyZy5kYXRhVGFibGUpKSB7XG4gICAgcmV0dXJuIG1hcHBpbmcuZGF0YVRhYmxlKGFyZy5kYXRhVGFibGUpXG4gIH0gZWxzZSBpZiAoZG9lc0hhdmVWYWx1ZShhcmcuZG9jU3RyaW5nKSkge1xuICAgIHJldHVybiBtYXBwaW5nLmRvY1N0cmluZyhhcmcuZG9jU3RyaW5nKVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBzdGVwIGFyZ3VtZW50OiAke3V0aWwuaW5zcGVjdChhcmcpfWApXG59XG4iXX0=
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcF9hcmd1bWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3RlcF9hcmd1bWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFTQSw4Q0FVQztBQW5CRCwwREFBNEI7QUFFNUIsbURBQStDO0FBTy9DLFNBQWdCLGlCQUFpQixDQUMvQixHQUF1QixFQUN2QixPQUEwQztJQUUxQyxJQUFJLElBQUEsNkJBQWEsRUFBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUNqQyxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3pDLENBQUM7U0FBTSxJQUFJLElBQUEsNkJBQWEsRUFBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUN4QyxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3pDLENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixtQkFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7QUFDaEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB1dGlsIGZyb20gJ25vZGU6dXRpbCdcbmltcG9ydCB0eXBlIHsgUGlja2xlRG9jU3RyaW5nLCBQaWNrbGVTdGVwQXJndW1lbnQsIFBpY2tsZVRhYmxlIH0gZnJvbSAnQGN1Y3VtYmVyL21lc3NhZ2VzJ1xuaW1wb3J0IHsgZG9lc0hhdmVWYWx1ZSB9IGZyb20gJy4vdmFsdWVfY2hlY2tlcidcblxuZXhwb3J0IGludGVyZmFjZSBJUGlja2xlU3RlcEFyZ3VtZW50RnVuY3Rpb25NYXA8VD4ge1xuICBkYXRhVGFibGU6IChhcmc6IFBpY2tsZVRhYmxlKSA9PiBUXG4gIGRvY1N0cmluZzogKGFyZzogUGlja2xlRG9jU3RyaW5nKSA9PiBUXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0ZXBBcmd1bWVudDxUPihcbiAgYXJnOiBQaWNrbGVTdGVwQXJndW1lbnQsXG4gIG1hcHBpbmc6IElQaWNrbGVTdGVwQXJndW1lbnRGdW5jdGlvbk1hcDxUPlxuKTogVCB7XG4gIGlmIChkb2VzSGF2ZVZhbHVlKGFyZy5kYXRhVGFibGUpKSB7XG4gICAgcmV0dXJuIG1hcHBpbmcuZGF0YVRhYmxlKGFyZy5kYXRhVGFibGUpXG4gIH0gZWxzZSBpZiAoZG9lc0hhdmVWYWx1ZShhcmcuZG9jU3RyaW5nKSkge1xuICAgIHJldHVybiBtYXBwaW5nLmRvY1N0cmluZyhhcmcuZG9jU3RyaW5nKVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBzdGVwIGFyZ3VtZW50OiAke3V0aWwuaW5zcGVjdChhcmcpfWApXG59XG4iXX0=
@@ -1,5 +1,4 @@
1
- import type * as messages from '@cucumber/messages';
2
- import type { IdGenerator } from '@cucumber/messages';
1
+ import type { IdGenerator, UndefinedParameterType } from '@cucumber/messages';
3
2
  import type { GherkinStepKeyword } from '../models/gherkin_step_keyword';
4
3
  import StepDefinition from '../models/step_definition';
5
4
  import TestCaseHookDefinition from '../models/test_case_hook_definition';
@@ -70,7 +69,7 @@ export declare class SupportCodeLibraryBuilder {
70
69
  buildTestRunHookDefinitions(configs: ITestRunHookDefinitionConfig[], canonicalIds?: string[]): TestRunHookDefinition[];
71
70
  buildStepDefinitions(canonicalIds?: string[]): {
72
71
  stepDefinitions: StepDefinition[];
73
- undefinedParameterTypes: messages.UndefinedParameterType[];
72
+ undefinedParameterTypes: UndefinedParameterType[];
74
73
  };
75
74
  finalize(canonicalIds?: CanonicalSupportCodeIds): SupportCodeLibrary;
76
75
  reset(cwd: string, newId: IdGenerator.NewId, originalCoordinates?: ISupportCodeCoordinates): void;
@@ -331,4 +331,4 @@ class SupportCodeLibraryBuilder {
331
331
  }
332
332
  exports.SupportCodeLibraryBuilder = SupportCodeLibraryBuilder;
333
333
  exports.default = new SupportCodeLibraryBuilder();
334
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3VwcG9ydF9jb2RlX2xpYnJhcnlfYnVpbGRlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx5RUFBc0Y7QUFHdEYsNERBQThCO0FBQzlCLGtEQUFxRDtBQUVyRCxnRkFBc0Q7QUFDdEQsb0dBQXdFO0FBQ3hFLGtHQUUyQztBQUMzQyxvR0FBd0U7QUFDeEUsb0RBQWdEO0FBQ2hELGlFQUEyRDtBQUMzRCwrRUFBdUU7QUFDdkUsdUZBQWdGO0FBaUJoRiw4RUFBb0Q7QUFDcEQsb0RBQTJCO0FBc0MzQixNQUFhLHlCQUF5QjtJQUNwQixPQUFPLENBQTJCO0lBQzFDLG1CQUFtQixDQUF5QjtJQUM1QyxrQ0FBa0MsQ0FBaUM7SUFDbkUsaUNBQWlDLENBQWdDO0lBQ2pFLGtDQUFrQyxDQUFpQztJQUNuRSxtQ0FBbUMsQ0FBaUM7SUFDcEUsa0NBQWtDLENBQWdDO0lBQ2xFLG1DQUFtQyxDQUFpQztJQUNwRSxHQUFHLENBQVE7SUFDWCxjQUFjLENBQVE7SUFDdEIseUJBQXlCLENBQUs7SUFDOUIsZUFBZSxDQUFRO0lBQ3ZCLEtBQUssQ0FBbUI7SUFDeEIscUJBQXFCLENBQThCO0lBQ25ELHFCQUFxQixDQUF5QjtJQUM5QyxLQUFLLENBQUs7SUFDVixpQkFBaUIsQ0FBNkI7SUFDOUMsTUFBTSxHQUFrQixTQUFTLENBQUE7SUFFekM7UUFDRSxNQUFNLE9BQU8sR0FBOEI7WUFDekMsS0FBSyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0NBQWtDLENBQUM7WUFDN0UsUUFBUSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUNBQWlDLENBQUM7WUFDOUUsU0FBUyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0NBQWtDLENBQUM7WUFDakYsTUFBTSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUNBQW1DLENBQUM7WUFDL0UsU0FBUyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0NBQWtDLENBQUM7WUFDaEYsVUFBVSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUNBQW1DLENBQUM7WUFDbkYsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDeEQsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztZQUN4RSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1lBQ2pFLGlCQUFpQixFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyxjQUFjLEdBQUcsWUFBWSxDQUFBO1lBQ3BDLENBQUM7WUFDRCw0QkFBNEIsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO2dCQUNuQyxJQUFJLENBQUMseUJBQXlCLEdBQUcsRUFBRSxDQUFBO1lBQ3JDLENBQUM7WUFDRCxtQkFBbUIsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO2dCQUMxQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQTtZQUNqQixDQUFDO1lBQ0Qsb0JBQW9CLEVBQUUsQ0FBQyxFQUErQixFQUFRLEVBQUU7Z0JBQzlELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUE7WUFDN0IsQ0FBQztZQUNELElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUM7WUFDL0QsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztTQUNoRSxDQUFBO1FBQ0QsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtZQUN0QyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sSUFBSSxLQUFLLENBQ2I7NENBQ2tDLE1BQU0sNkRBQTZELElBQUksQ0FBQyxNQUFNOzs7Ozs7V0FNL0csQ0FDRixDQUFBO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQTtRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ2hDLEdBQUcsQ0FBQyxNQUFpQyxFQUFFLE1BQXVDO2dCQUM1RSxPQUFPLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRTtvQkFDeEIsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFBO29CQUNwQixvREFBb0Q7b0JBQ3BELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUE7Z0JBQ2hDLENBQUMsQ0FBQTtZQUNILENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsbUJBQW1CLENBQUMsT0FBc0M7UUFDeEQsTUFBTSxhQUFhLEdBQUcsSUFBQSx5Q0FBa0IsRUFBQyxPQUFPLENBQUMsQ0FBQTtRQUNqRCxNQUFNLE1BQU0sR0FBRyxJQUFBLHFEQUF1QixFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNoRCxJQUFJLENBQUMscUJBQXFCLENBQUMsMEJBQTBCLENBQ25ELGFBQWEsRUFDYixNQUFNLEVBQ04sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUN2QixDQUFBO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FDUixPQUEyQixFQUMzQixhQUE0QztRQUU1QyxPQUFPLENBQ0wsT0FBMEIsRUFDMUIsT0FBc0MsRUFDdEMsSUFBZSxFQUNmLEVBQUU7WUFDRixJQUFJLE9BQU8sT0FBTyxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLEdBQUcsT0FBTyxDQUFBO2dCQUNkLE9BQU8sR0FBRyxFQUFFLENBQUE7WUFDZCxDQUFDO1lBQ0QsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFBLHFEQUF1QixFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUN2RCxJQUFBLDRCQUFpQixFQUFDO2dCQUNoQixJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRTtnQkFDaEMsTUFBTSxFQUFFLFlBQVk7Z0JBQ3BCLFFBQVEsRUFBRSxJQUFBLHdCQUFjLEVBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7YUFDeEMsQ0FBQyxDQUFBO1lBQ0YsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDO2dCQUNuQixJQUFJO2dCQUNKLElBQUk7Z0JBQ0osT0FBTztnQkFDUCxLQUFLLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDN0IsT0FBTztnQkFDUCxPQUFPO2dCQUNQLEdBQUc7YUFDSixDQUFDLENBQUE7UUFDSixDQUFDLENBQUE7SUFDSCxDQUFDO0lBRUQsa0JBQWtCLENBQ2hCLGFBQW9EO1FBS3BELE9BQU8sQ0FDTCxPQUE4RSxFQUM5RSxJQUFzQyxFQUN0QyxFQUFFO1lBQ0YsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDaEMsT0FBTyxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFBO1lBQzdCLENBQUM7aUJBQU0sSUFBSSxPQUFPLE9BQU8sS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxHQUFHLE9BQU8sQ0FBQTtnQkFDZCxPQUFPLEdBQUcsRUFBRSxDQUFBO1lBQ2QsQ0FBQztZQUNELE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBQSxxREFBdUIsRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDdkQsSUFBQSw0QkFBaUIsRUFBQztnQkFDaEIsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtnQkFDdkIsTUFBTSxFQUFFLG9CQUFvQjtnQkFDNUIsUUFBUSxFQUFFLElBQUEsd0JBQWMsRUFBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQzthQUN4QyxDQUFDLENBQUE7WUFDRixhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUM7Z0JBQ25CLElBQUk7Z0JBQ0osSUFBSTtnQkFDSixPQUFPO2dCQUNQLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUM3QixHQUFHO2FBQ0osQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFBO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUNoQixhQUFvRDtRQUtwRCxPQUFPLENBQ0wsT0FBOEUsRUFDOUUsSUFBc0MsRUFDdEMsRUFBRTtZQUNGLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQTtZQUM3QixDQUFDO2lCQUFNLElBQUksT0FBTyxPQUFPLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQ3pDLElBQUksR0FBRyxPQUFPLENBQUE7Z0JBQ2QsT0FBTyxHQUFHLEVBQUUsQ0FBQTtZQUNkLENBQUM7WUFDRCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUEscURBQXVCLEVBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ3ZELElBQUEsNEJBQWlCLEVBQUM7Z0JBQ2hCLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7Z0JBQ3ZCLE1BQU0sRUFBRSxvQkFBb0I7Z0JBQzVCLFFBQVEsRUFBRSxJQUFBLHdCQUFjLEVBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7YUFDeEMsQ0FBQyxDQUFBO1lBQ0YsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDO2dCQUNuQixJQUFJO2dCQUNKLElBQUk7Z0JBQ0osT0FBTztnQkFDUCxLQUFLLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDN0IsR0FBRzthQUNKLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQTtJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FDZixhQUFtRDtRQUVuRCxPQUFPLENBQUMsT0FBNkMsRUFBRSxJQUFlLEVBQUUsRUFBRTtZQUN4RSxJQUFJLE9BQU8sT0FBTyxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLEdBQUcsT0FBTyxDQUFBO2dCQUNkLE9BQU8sR0FBRyxFQUFFLENBQUE7WUFDZCxDQUFDO1lBQ0QsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFBLHFEQUF1QixFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUN2RCxJQUFBLDRCQUFpQixFQUFDO2dCQUNoQixJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO2dCQUN2QixNQUFNLEVBQUUsbUJBQW1CO2dCQUMzQixRQUFRLEVBQUUsSUFBQSx3QkFBYyxFQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO2FBQ3hDLENBQUMsQ0FBQTtZQUNGLGFBQWEsRUFBRSxDQUFDLElBQUksQ0FBQztnQkFDbkIsSUFBSTtnQkFDSixJQUFJO2dCQUNKLE9BQU87Z0JBQ1AsS0FBSyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQzdCLEdBQUc7YUFDSixDQUFDLENBQUE7UUFDSixDQUFDLENBQUE7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBMkM7UUFDeEUsSUFBSSxJQUFBLDZCQUFhLEVBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEVBQUUsQ0FBQztZQUNsRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFBO1lBQzlCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUE7WUFDeEUsSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3pCLE9BQU8sSUFBQSxvQkFBSyxFQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQTtZQUN2QyxDQUFDO1lBQ0QsT0FBTyxXQUFXLENBQUE7UUFDcEIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELDRCQUE0QixDQUMxQixPQUF3QyxFQUN4QyxZQUF1QjtRQUV2QixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNoRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUNoQyxJQUFJO2dCQUNKLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYzthQUN2QyxDQUFDLENBQUE7WUFDRixPQUFPLElBQUksbUNBQXNCLENBQUM7Z0JBQ2hDLElBQUksRUFBRSxXQUFXO2dCQUNqQixFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ3JELElBQUk7Z0JBQ0osT0FBTztnQkFDUCxLQUFLO2dCQUNMLGFBQWEsRUFBRSxJQUFJO2dCQUNuQixHQUFHO2FBQ0osQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsNEJBQTRCLENBQUMsT0FBd0M7UUFDbkUsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTtZQUN6RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUNoQyxJQUFJO2dCQUNKLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYzthQUN2QyxDQUFDLENBQUE7WUFDRixPQUFPLElBQUksbUNBQXNCLENBQUM7Z0JBQ2hDLElBQUksRUFBRSxXQUFXO2dCQUNqQixFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDaEIsSUFBSTtnQkFDSixPQUFPO2dCQUNQLEtBQUs7Z0JBQ0wsYUFBYSxFQUFFLElBQUk7Z0JBQ25CLEdBQUc7YUFDSixDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCwyQkFBMkIsQ0FDekIsT0FBdUMsRUFDdkMsWUFBdUI7UUFFdkIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDaEUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDaEMsSUFBSTtnQkFDSixjQUFjLEVBQUUsT0FBTyxDQUFDLGNBQWM7YUFDdkMsQ0FBQyxDQUFBO1lBQ0YsT0FBTyxJQUFJLGtDQUFxQixDQUFDO2dCQUMvQixJQUFJLEVBQUUsV0FBVztnQkFDakIsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNyRCxJQUFJO2dCQUNKLE9BQU8sRUFBRSxPQUF3QztnQkFDakQsS0FBSztnQkFDTCxhQUFhLEVBQUUsSUFBSTtnQkFDbkIsR0FBRzthQUNKLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELG9CQUFvQixDQUFDLFlBQXVCO1FBSTFDLE1BQU0sZUFBZSxHQUFxQixFQUFFLENBQUE7UUFDNUMsTUFBTSx1QkFBdUIsR0FBc0MsRUFBRSxDQUFBO1FBQ3JFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQ2hDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMvRCxJQUFJLFVBQWUsQ0FBQTtZQUNuQixJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUM7b0JBQ0gsVUFBVSxHQUFHLElBQUkseUNBQWtCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO2dCQUMxRSxDQUFDO2dCQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ1gsSUFBSSxJQUFBLDZCQUFhLEVBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEVBQUUsQ0FBQzt3QkFDaEQsdUJBQXVCLENBQUMsSUFBSSxDQUFDOzRCQUMzQixJQUFJLEVBQUUsQ0FBQyxDQUFDLDBCQUEwQjs0QkFDbEMsVUFBVSxFQUFFLE9BQU87eUJBQ3BCLENBQUMsQ0FBQTt3QkFDRixPQUFNO29CQUNSLENBQUM7b0JBQ0QsTUFBTSxDQUFDLENBQUE7Z0JBQ1QsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixVQUFVLEdBQUcsSUFBSSx3Q0FBaUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUE7WUFDekUsQ0FBQztZQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQ2hDLElBQUk7Z0JBQ0osY0FBYyxFQUFFLE9BQU8sQ0FBQyxjQUFjO2FBQ3ZDLENBQUMsQ0FBQTtZQUNGLGVBQWUsQ0FBQyxJQUFJLENBQ2xCLElBQUkseUJBQWMsQ0FBQztnQkFDakIsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLFVBQVU7Z0JBQ1YsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNyRCxJQUFJO2dCQUNKLE9BQU87Z0JBQ1AsS0FBSztnQkFDTCxPQUFPO2dCQUNQLE9BQU87Z0JBQ1AsYUFBYSxFQUFFLElBQUk7Z0JBQ25CLEdBQUc7YUFDSixDQUFDLENBQ0gsQ0FBQTtRQUNILENBQUMsQ0FDRixDQUFBO1FBQ0QsT0FBTyxFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxDQUFBO0lBQ3JELENBQUM7SUFFRCxRQUFRLENBQUMsWUFBc0M7UUFDN0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUE7UUFDekIsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxFQUFFLGlCQUFpQixDQUFDLENBQUE7UUFDeEYsT0FBTztZQUNMLG1CQUFtQixFQUFFLElBQUksQ0FBQyxtQkFBbUI7WUFDN0MsNEJBQTRCLEVBQUUsSUFBSSxDQUFDLDRCQUE0QixDQUM3RCxJQUFJLENBQUMsa0NBQWtDLEVBQ3ZDLFlBQVksRUFBRSw4QkFBOEIsQ0FDN0M7WUFDRCwyQkFBMkIsRUFBRSxJQUFJLENBQUMsMkJBQTJCLENBQzNELElBQUksQ0FBQyxpQ0FBaUMsRUFDdEMsWUFBWSxFQUFFLDZCQUE2QixDQUM1QztZQUNELDRCQUE0QixFQUFFLElBQUksQ0FBQyw0QkFBNEIsQ0FDN0QsSUFBSSxDQUFDLGtDQUFrQyxDQUN4QztZQUNELDZCQUE2QixFQUFFLElBQUksQ0FBQyw0QkFBNEIsQ0FDOUQsSUFBSSxDQUFDLG1DQUFtQyxFQUN4QyxZQUFZLEVBQUUsK0JBQStCLENBQzlDO1lBQ0QsNEJBQTRCLEVBQUUsSUFBSSxDQUFDLDJCQUEyQixDQUM1RCxJQUFJLENBQUMsa0NBQWtDLEVBQ3ZDLFlBQVksRUFBRSw4QkFBOEIsQ0FDN0M7WUFDRCw2QkFBNkIsRUFBRSxJQUFJLENBQUMsNEJBQTRCLENBQzlELElBQUksQ0FBQyxtQ0FBbUMsQ0FDekM7WUFDRCxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDbkMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQjtZQUNqRCx1QkFBdUIsRUFBRSxxQkFBcUIsQ0FBQyx1QkFBdUI7WUFDdEUsZUFBZSxFQUFFLHFCQUFxQixDQUFDLGVBQWU7WUFDdEQsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLGlCQUFpQixFQUFFLElBQUksQ0FBQyxpQkFBaUI7U0FDMUMsQ0FBQTtJQUNILENBQUM7SUFFRCxLQUFLLENBQ0gsR0FBVyxFQUNYLEtBQXdCLEVBQ3hCLHNCQUErQztRQUM3QyxjQUFjLEVBQUUsRUFBRTtRQUNsQixZQUFZLEVBQUUsRUFBRTtRQUNoQixXQUFXLEVBQUUsRUFBRTtRQUNmLE9BQU8sRUFBRSxFQUFFO0tBQ1o7UUFFRCxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNkLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQTtRQUM5QyxJQUFJLENBQUMsa0NBQWtDLEdBQUcsRUFBRSxDQUFBO1FBQzVDLElBQUksQ0FBQyxpQ0FBaUMsR0FBRyxFQUFFLENBQUE7UUFDM0MsSUFBSSxDQUFDLGtDQUFrQyxHQUFHLEVBQUUsQ0FBQTtRQUM1QyxJQUFJLENBQUMsbUNBQW1DLEdBQUcsRUFBRSxDQUFBO1FBQzdDLElBQUksQ0FBQyxrQ0FBa0MsR0FBRyxFQUFFLENBQUE7UUFDNUMsSUFBSSxDQUFDLG1DQUFtQyxHQUFHLEVBQUUsQ0FBQTtRQUM3QyxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFBO1FBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFBO1FBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFBO1FBQzFCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLDhEQUE0QixFQUFFLENBQUE7UUFDL0QsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQTtRQUMvQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFBO1FBQ25DLElBQUksQ0FBQyxLQUFLLEdBQUcsZUFBSyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO0lBQ3RCLENBQUM7Q0FDRjtBQWpZRCw4REFpWUM7QUFFRCxrQkFBZSxJQUFJLHlCQUF5QixFQUFFLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdWN1bWJlckV4cHJlc3Npb24sIFJlZ3VsYXJFeHByZXNzaW9uIH0gZnJvbSAnQGN1Y3VtYmVyL2N1Y3VtYmVyLWV4cHJlc3Npb25zJ1xuaW1wb3J0IHR5cGUgKiBhcyBtZXNzYWdlcyBmcm9tICdAY3VjdW1iZXIvbWVzc2FnZXMnXG5pbXBvcnQgdHlwZSB7IElkR2VuZXJhdG9yIH0gZnJvbSAnQGN1Y3VtYmVyL21lc3NhZ2VzJ1xuaW1wb3J0IGFyaXR5IGZyb20gJ3V0aWwtYXJpdHknXG5pbXBvcnQgeyBmb3JtYXRMb2NhdGlvbiB9IGZyb20gJy4uL2Zvcm1hdHRlci9oZWxwZXJzJ1xuaW1wb3J0IHR5cGUgeyBHaGVya2luU3RlcEtleXdvcmQgfSBmcm9tICcuLi9tb2RlbHMvZ2hlcmtpbl9zdGVwX2tleXdvcmQnXG5pbXBvcnQgU3RlcERlZmluaXRpb24gZnJvbSAnLi4vbW9kZWxzL3N0ZXBfZGVmaW5pdGlvbidcbmltcG9ydCBUZXN0Q2FzZUhvb2tEZWZpbml0aW9uIGZyb20gJy4uL21vZGVscy90ZXN0X2Nhc2VfaG9va19kZWZpbml0aW9uJ1xuaW1wb3J0IFRlc3RSdW5Ib29rRGVmaW5pdGlvbiwge1xuICB0eXBlIElUZXN0UnVuSG9va0RlZmluaXRpb25PcHRpb25zLFxufSBmcm9tICcuLi9tb2RlbHMvdGVzdF9ydW5faG9va19kZWZpbml0aW9uJ1xuaW1wb3J0IFRlc3RTdGVwSG9va0RlZmluaXRpb24gZnJvbSAnLi4vbW9kZWxzL3Rlc3Rfc3RlcF9ob29rX2RlZmluaXRpb24nXG5pbXBvcnQgeyBkb2VzSGF2ZVZhbHVlIH0gZnJvbSAnLi4vdmFsdWVfY2hlY2tlcidcbmltcG9ydCB7IGJ1aWxkUGFyYW1ldGVyVHlwZSB9IGZyb20gJy4vYnVpbGRfcGFyYW1ldGVyX3R5cGUnXG5pbXBvcnQgeyBnZXREZWZpbml0aW9uTGluZUFuZFVyaSB9IGZyb20gJy4vZ2V0X2RlZmluaXRpb25fbGluZV9hbmRfdXJpJ1xuaW1wb3J0IHsgU291cmNlZFBhcmFtZXRlclR5cGVSZWdpc3RyeSB9IGZyb20gJy4vc291cmNlZF9wYXJhbWV0ZXJfdHlwZV9yZWdpc3RyeSdcbmltcG9ydCB0eXBlIHtcbiAgQ2Fub25pY2FsU3VwcG9ydENvZGVJZHMsXG4gIERlZmluZVN0ZXBQYXR0ZXJuLFxuICBJRGVmaW5lU3RlcCxcbiAgSURlZmluZVN0ZXBPcHRpb25zLFxuICBJRGVmaW5lU3VwcG9ydENvZGVNZXRob2RzLFxuICBJRGVmaW5lVGVzdENhc2VIb29rT3B0aW9ucyxcbiAgSURlZmluZVRlc3RSdW5Ib29rT3B0aW9ucyxcbiAgSURlZmluZVRlc3RTdGVwSG9va09wdGlvbnMsXG4gIElQYXJhbWV0ZXJUeXBlRGVmaW5pdGlvbixcbiAgSVN1cHBvcnRDb2RlQ29vcmRpbmF0ZXMsXG4gIFBhcmFsbGVsQXNzaWdubWVudFZhbGlkYXRvcixcbiAgU3VwcG9ydENvZGVMaWJyYXJ5LFxuICBUZXN0Q2FzZUhvb2tGdW5jdGlvbixcbiAgVGVzdFN0ZXBIb29rRnVuY3Rpb24sXG59IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgdmFsaWRhdGVBcmd1bWVudHMgZnJvbSAnLi92YWxpZGF0ZV9hcmd1bWVudHMnXG5pbXBvcnQgV29ybGQgZnJvbSAnLi93b3JsZCdcblxuaW50ZXJmYWNlIElTdGVwRGVmaW5pdGlvbkNvbmZpZyB7XG4gIGNvZGU6IEZ1bmN0aW9uXG4gIGxpbmU6IG51bWJlclxuICBvcHRpb25zOiBhbnlcbiAgb3JkZXI6IG51bWJlclxuICBrZXl3b3JkOiBHaGVya2luU3RlcEtleXdvcmRcbiAgcGF0dGVybjogc3RyaW5nIHwgUmVnRXhwXG4gIHVyaTogc3RyaW5nXG59XG5cbmludGVyZmFjZSBJVGVzdENhc2VIb29rRGVmaW5pdGlvbkNvbmZpZyB7XG4gIGNvZGU6IGFueVxuICBsaW5lOiBudW1iZXJcbiAgb3B0aW9uczogYW55XG4gIG9yZGVyOiBudW1iZXJcbiAgdXJpOiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIElUZXN0U3RlcEhvb2tEZWZpbml0aW9uQ29uZmlnIHtcbiAgY29kZTogRnVuY3Rpb25cbiAgbGluZTogbnVtYmVyXG4gIG9wdGlvbnM6IGFueVxuICBvcmRlcjogbnVtYmVyXG4gIHVyaTogc3RyaW5nXG59XG5cbmludGVyZmFjZSBJVGVzdFJ1bkhvb2tEZWZpbml0aW9uQ29uZmlnIHtcbiAgY29kZTogRnVuY3Rpb25cbiAgbGluZTogbnVtYmVyXG4gIG9wdGlvbnM6IGFueVxuICBvcmRlcjogbnVtYmVyXG4gIHVyaTogc3RyaW5nXG59XG5cbnR5cGUgTGlicmFyeVN0YXR1cyA9ICdQRU5ESU5HJyB8ICdPUEVOJyB8ICdGSU5BTElaRUQnXG5cbmV4cG9ydCBjbGFzcyBTdXBwb3J0Q29kZUxpYnJhcnlCdWlsZGVyIHtcbiAgcHVibGljIHJlYWRvbmx5IG1ldGhvZHM6IElEZWZpbmVTdXBwb3J0Q29kZU1ldGhvZHNcbiAgcHJpdmF0ZSBvcmlnaW5hbENvb3JkaW5hdGVzOiBJU3VwcG9ydENvZGVDb29yZGluYXRlc1xuICBwcml2YXRlIGFmdGVyVGVzdENhc2VIb29rRGVmaW5pdGlvbkNvbmZpZ3M6IElUZXN0Q2FzZUhvb2tEZWZpbml0aW9uQ29uZmlnW11cbiAgcHJpdmF0ZSBhZnRlclRlc3RSdW5Ib29rRGVmaW5pdGlvbkNvbmZpZ3M6IElUZXN0UnVuSG9va0RlZmluaXRpb25Db25maWdbXVxuICBwcml2YXRlIGFmdGVyVGVzdFN0ZXBIb29rRGVmaW5pdGlvbkNvbmZpZ3M6IElUZXN0U3RlcEhvb2tEZWZpbml0aW9uQ29uZmlnW11cbiAgcHJpdmF0ZSBiZWZvcmVUZXN0Q2FzZUhvb2tEZWZpbml0aW9uQ29uZmlnczogSVRlc3RDYXNlSG9va0RlZmluaXRpb25Db25maWdbXVxuICBwcml2YXRlIGJlZm9yZVRlc3RSdW5Ib29rRGVmaW5pdGlvbkNvbmZpZ3M6IElUZXN0UnVuSG9va0RlZmluaXRpb25Db25maWdbXVxuICBwcml2YXRlIGJlZm9yZVRlc3RTdGVwSG9va0RlZmluaXRpb25Db25maWdzOiBJVGVzdFN0ZXBIb29rRGVmaW5pdGlvbkNvbmZpZ1tdXG4gIHByaXZhdGUgY3dkOiBzdHJpbmdcbiAgcHJpdmF0ZSBkZWZhdWx0VGltZW91dDogbnVtYmVyXG4gIHByaXZhdGUgZGVmaW5pdGlvbkZ1bmN0aW9uV3JhcHBlcjogYW55XG4gIHByaXZhdGUgZGVmaW5pdGlvbk9yZGVyOiBudW1iZXJcbiAgcHJpdmF0ZSBuZXdJZDogSWRHZW5lcmF0b3IuTmV3SWRcbiAgcHJpdmF0ZSBwYXJhbWV0ZXJUeXBlUmVnaXN0cnk6IFNvdXJjZWRQYXJhbWV0ZXJUeXBlUmVnaXN0cnlcbiAgcHJpdmF0ZSBzdGVwRGVmaW5pdGlvbkNvbmZpZ3M6IElTdGVwRGVmaW5pdGlvbkNvbmZpZ1tdXG4gIHByaXZhdGUgV29ybGQ6IGFueVxuICBwcml2YXRlIHBhcmFsbGVsQ2FuQXNzaWduOiBQYXJhbGxlbEFzc2lnbm1lbnRWYWxpZGF0b3JcbiAgcHJpdmF0ZSBzdGF0dXM6IExpYnJhcnlTdGF0dXMgPSAnUEVORElORydcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBtZXRob2RzOiBJRGVmaW5lU3VwcG9ydENvZGVNZXRob2RzID0ge1xuICAgICAgQWZ0ZXI6IHRoaXMuZGVmaW5lVGVzdENhc2VIb29rKCgpID0+IHRoaXMuYWZ0ZXJUZXN0Q2FzZUhvb2tEZWZpbml0aW9uQ29uZmlncyksXG4gICAgICBBZnRlckFsbDogdGhpcy5kZWZpbmVUZXN0UnVuSG9vaygoKSA9PiB0aGlzLmFmdGVyVGVzdFJ1bkhvb2tEZWZpbml0aW9uQ29uZmlncyksXG4gICAgICBBZnRlclN0ZXA6IHRoaXMuZGVmaW5lVGVzdFN0ZXBIb29rKCgpID0+IHRoaXMuYWZ0ZXJUZXN0U3RlcEhvb2tEZWZpbml0aW9uQ29uZmlncyksXG4gICAgICBCZWZvcmU6IHRoaXMuZGVmaW5lVGVzdENhc2VIb29rKCgpID0+IHRoaXMuYmVmb3JlVGVzdENhc2VIb29rRGVmaW5pdGlvbkNvbmZpZ3MpLFxuICAgICAgQmVmb3JlQWxsOiB0aGlzLmRlZmluZVRlc3RSdW5Ib29rKCgpID0+IHRoaXMuYmVmb3JlVGVzdFJ1bkhvb2tEZWZpbml0aW9uQ29uZmlncyksXG4gICAgICBCZWZvcmVTdGVwOiB0aGlzLmRlZmluZVRlc3RTdGVwSG9vaygoKSA9PiB0aGlzLmJlZm9yZVRlc3RTdGVwSG9va0RlZmluaXRpb25Db25maWdzKSxcbiAgICAgIGRlZmluZVBhcmFtZXRlclR5cGU6IHRoaXMuZGVmaW5lUGFyYW1ldGVyVHlwZS5iaW5kKHRoaXMpLFxuICAgICAgZGVmaW5lU3RlcDogdGhpcy5kZWZpbmVTdGVwKCdVbmtub3duJywgKCkgPT4gdGhpcy5zdGVwRGVmaW5pdGlvbkNvbmZpZ3MpLFxuICAgICAgR2l2ZW46IHRoaXMuZGVmaW5lU3RlcCgnR2l2ZW4nLCAoKSA9PiB0aGlzLnN0ZXBEZWZpbml0aW9uQ29uZmlncyksXG4gICAgICBzZXREZWZhdWx0VGltZW91dDogKG1pbGxpc2Vjb25kcykgPT4ge1xuICAgICAgICB0aGlzLmRlZmF1bHRUaW1lb3V0ID0gbWlsbGlzZWNvbmRzXG4gICAgICB9LFxuICAgICAgc2V0RGVmaW5pdGlvbkZ1bmN0aW9uV3JhcHBlcjogKGZuKSA9PiB7XG4gICAgICAgIHRoaXMuZGVmaW5pdGlvbkZ1bmN0aW9uV3JhcHBlciA9IGZuXG4gICAgICB9LFxuICAgICAgc2V0V29ybGRDb25zdHJ1Y3RvcjogKGZuKSA9PiB7XG4gICAgICAgIHRoaXMuV29ybGQgPSBmblxuICAgICAgfSxcbiAgICAgIHNldFBhcmFsbGVsQ2FuQXNzaWduOiAoZm46IFBhcmFsbGVsQXNzaWdubWVudFZhbGlkYXRvcik6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLnBhcmFsbGVsQ2FuQXNzaWduID0gZm5cbiAgICAgIH0sXG4gICAgICBUaGVuOiB0aGlzLmRlZmluZVN0ZXAoJ1RoZW4nLCAoKSA9PiB0aGlzLnN0ZXBEZWZpbml0aW9uQ29uZmlncyksXG4gICAgICBXaGVuOiB0aGlzLmRlZmluZVN0ZXAoJ1doZW4nLCAoKSA9PiB0aGlzLnN0ZXBEZWZpbml0aW9uQ29uZmlncyksXG4gICAgfVxuICAgIGNvbnN0IGNoZWNrSW5zdGFsbCA9IChtZXRob2Q6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAnUEVORElORycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBcbiAgICAgICAgICBZb3UncmUgY2FsbGluZyBmdW5jdGlvbnMgKGUuZy4gXCIke21ldGhvZH1cIikgb24gYW4gaW5zdGFuY2Ugb2YgQ3VjdW1iZXIgdGhhdCBpc24ndCBydW5uaW5nIChzdGF0dXM6ICR7dGhpcy5zdGF0dXN9KS5cbiAgICAgICAgICBUaGlzIG1lYW5zIHlvdSBtYXkgaGF2ZSBhbiBpbnZhbGlkIGluc3RhbGxhdGlvbiwgcG90ZW50aWFsbHkgZHVlIHRvOlxuICAgICAgICAgIC0gQ3VjdW1iZXIgYmVpbmcgaW5zdGFsbGVkIGdsb2JhbGx5XG4gICAgICAgICAgLSBBIHByb2plY3Qgc3RydWN0dXJlIHdoZXJlIHlvdXIgc3VwcG9ydCBjb2RlIGlzIGRlcGVuZGluZyBvbiBhIGRpZmZlcmVudCBpbnN0YW5jZSBvZiBDdWN1bWJlclxuICAgICAgICAgIEVpdGhlciB3YXksIHlvdSdsbCBuZWVkIHRvIGFkZHJlc3MgdGhpcyBpbiBvcmRlciBmb3IgQ3VjdW1iZXIgdG8gd29yay5cbiAgICAgICAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2N1Y3VtYmVyL2N1Y3VtYmVyLWpzL2Jsb2IvbWFpbi9kb2NzL2luc3RhbGxhdGlvbi5tZCNpbnZhbGlkLWluc3RhbGxhdGlvbnNcbiAgICAgICAgICBgXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5tZXRob2RzID0gbmV3IFByb3h5KG1ldGhvZHMsIHtcbiAgICAgIGdldCh0YXJnZXQ6IElEZWZpbmVTdXBwb3J0Q29kZU1ldGhvZHMsIG1ldGhvZDoga2V5b2YgSURlZmluZVN1cHBvcnRDb2RlTWV0aG9kcyk6IGFueSB7XG4gICAgICAgIHJldHVybiAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgICAgICBjaGVja0luc3RhbGwobWV0aG9kKVxuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZGlmZmljdWx0IHRvIHR5cGUgdGhpcyBjb3JyZWN0bHlcbiAgICAgICAgICByZXR1cm4gdGFyZ2V0W21ldGhvZF0oLi4uYXJncylcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KVxuICB9XG5cbiAgZGVmaW5lUGFyYW1ldGVyVHlwZShvcHRpb25zOiBJUGFyYW1ldGVyVHlwZURlZmluaXRpb248YW55Pik6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtZXRlclR5cGUgPSBidWlsZFBhcmFtZXRlclR5cGUob3B0aW9ucylcbiAgICBjb25zdCBzb3VyY2UgPSBnZXREZWZpbml0aW9uTGluZUFuZFVyaSh0aGlzLmN3ZClcbiAgICB0aGlzLnBhcmFtZXRlclR5cGVSZWdpc3RyeS5kZWZpbmVTb3VyY2VkUGFyYW1ldGVyVHlwZShcbiAgICAgIHBhcmFtZXRlclR5cGUsXG4gICAgICBzb3VyY2UsXG4gICAgICB0aGlzLmRlZmluaXRpb25PcmRlcisrXG4gICAgKVxuICB9XG5cbiAgZGVmaW5lU3RlcChcbiAgICBrZXl3b3JkOiBHaGVya2luU3RlcEtleXdvcmQsXG4gICAgZ2V0Q29sbGVjdGlvbjogKCkgPT4gSVN0ZXBEZWZpbml0aW9uQ29uZmlnW11cbiAgKTogSURlZmluZVN0ZXAge1xuICAgIHJldHVybiAoXG4gICAgICBwYXR0ZXJuOiBEZWZpbmVTdGVwUGF0dGVybixcbiAgICAgIG9wdGlvbnM6IElEZWZpbmVTdGVwT3B0aW9ucyB8IEZ1bmN0aW9uLFxuICAgICAgY29kZT86IEZ1bmN0aW9uXG4gICAgKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29kZSA9IG9wdGlvbnNcbiAgICAgICAgb3B0aW9ucyA9IHt9XG4gICAgICB9XG4gICAgICBjb25zdCB7IGxpbmUsIHVyaSB9ID0gZ2V0RGVmaW5pdGlvbkxpbmVBbmRVcmkodGhpcy5jd2QpXG4gICAgICB2YWxpZGF0ZUFyZ3VtZW50cyh7XG4gICAgICAgIGFyZ3M6IHsgY29kZSwgcGF0dGVybiwgb3B0aW9ucyB9LFxuICAgICAgICBmbk5hbWU6ICdkZWZpbmVTdGVwJyxcbiAgICAgICAgbG9jYXRpb246IGZvcm1hdExvY2F0aW9uKHsgbGluZSwgdXJpIH0pLFxuICAgICAgfSlcbiAgICAgIGdldENvbGxlY3Rpb24oKS5wdXNoKHtcbiAgICAgICAgY29kZSxcbiAgICAgICAgbGluZSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgb3JkZXI6IHRoaXMuZGVmaW5pdGlvbk9yZGVyKyssXG4gICAgICAgIGtleXdvcmQsXG4gICAgICAgIHBhdHRlcm4sXG4gICAgICAgIHVyaSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZGVmaW5lVGVzdENhc2VIb29rKFxuICAgIGdldENvbGxlY3Rpb246ICgpID0+IElUZXN0Q2FzZUhvb2tEZWZpbml0aW9uQ29uZmlnW11cbiAgKTogPFdvcmxkVHlwZT4oXG4gICAgb3B0aW9uczogc3RyaW5nIHwgSURlZmluZVRlc3RDYXNlSG9va09wdGlvbnMgfCBUZXN0Q2FzZUhvb2tGdW5jdGlvbjxXb3JsZFR5cGU+LFxuICAgIGNvZGU/OiBUZXN0Q2FzZUhvb2tGdW5jdGlvbjxXb3JsZFR5cGU+XG4gICkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIDxXb3JsZFR5cGU+KFxuICAgICAgb3B0aW9uczogc3RyaW5nIHwgSURlZmluZVRlc3RDYXNlSG9va09wdGlvbnMgfCBUZXN0Q2FzZUhvb2tGdW5jdGlvbjxXb3JsZFR5cGU+LFxuICAgICAgY29kZT86IFRlc3RDYXNlSG9va0Z1bmN0aW9uPFdvcmxkVHlwZT5cbiAgICApID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgb3B0aW9ucyA9IHsgdGFnczogb3B0aW9ucyB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvZGUgPSBvcHRpb25zXG4gICAgICAgIG9wdGlvbnMgPSB7fVxuICAgICAgfVxuICAgICAgY29uc3QgeyBsaW5lLCB1cmkgfSA9IGdldERlZmluaXRpb25MaW5lQW5kVXJpKHRoaXMuY3dkKVxuICAgICAgdmFsaWRhdGVBcmd1bWVudHMoe1xuICAgICAgICBhcmdzOiB7IGNvZGUsIG9wdGlvbnMgfSxcbiAgICAgICAgZm5OYW1lOiAnZGVmaW5lVGVzdENhc2VIb29rJyxcbiAgICAgICAgbG9jYXRpb246IGZvcm1hdExvY2F0aW9uKHsgbGluZSwgdXJpIH0pLFxuICAgICAgfSlcbiAgICAgIGdldENvbGxlY3Rpb24oKS5wdXNoKHtcbiAgICAgICAgY29kZSxcbiAgICAgICAgbGluZSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgb3JkZXI6IHRoaXMuZGVmaW5pdGlvbk9yZGVyKyssXG4gICAgICAgIHVyaSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZGVmaW5lVGVzdFN0ZXBIb29rKFxuICAgIGdldENvbGxlY3Rpb246ICgpID0+IElUZXN0U3RlcEhvb2tEZWZpbml0aW9uQ29uZmlnW11cbiAgKTogPFdvcmxkVHlwZT4oXG4gICAgb3B0aW9uczogc3RyaW5nIHwgSURlZmluZVRlc3RTdGVwSG9va09wdGlvbnMgfCBUZXN0U3RlcEhvb2tGdW5jdGlvbjxXb3JsZFR5cGU+LFxuICAgIGNvZGU/OiBUZXN0U3RlcEhvb2tGdW5jdGlvbjxXb3JsZFR5cGU+XG4gICkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIDxXb3JsZFR5cGU+KFxuICAgICAgb3B0aW9uczogc3RyaW5nIHwgSURlZmluZVRlc3RTdGVwSG9va09wdGlvbnMgfCBUZXN0U3RlcEhvb2tGdW5jdGlvbjxXb3JsZFR5cGU+LFxuICAgICAgY29kZT86IFRlc3RTdGVwSG9va0Z1bmN0aW9uPFdvcmxkVHlwZT5cbiAgICApID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgb3B0aW9ucyA9IHsgdGFnczogb3B0aW9ucyB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvZGUgPSBvcHRpb25zXG4gICAgICAgIG9wdGlvbnMgPSB7fVxuICAgICAgfVxuICAgICAgY29uc3QgeyBsaW5lLCB1cmkgfSA9IGdldERlZmluaXRpb25MaW5lQW5kVXJpKHRoaXMuY3dkKVxuICAgICAgdmFsaWRhdGVBcmd1bWVudHMoe1xuICAgICAgICBhcmdzOiB7IGNvZGUsIG9wdGlvbnMgfSxcbiAgICAgICAgZm5OYW1lOiAnZGVmaW5lVGVzdFN0ZXBIb29rJyxcbiAgICAgICAgbG9jYXRpb246IGZvcm1hdExvY2F0aW9uKHsgbGluZSwgdXJpIH0pLFxuICAgICAgfSlcbiAgICAgIGdldENvbGxlY3Rpb24oKS5wdXNoKHtcbiAgICAgICAgY29kZSxcbiAgICAgICAgbGluZSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgb3JkZXI6IHRoaXMuZGVmaW5pdGlvbk9yZGVyKyssXG4gICAgICAgIHVyaSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZGVmaW5lVGVzdFJ1bkhvb2soXG4gICAgZ2V0Q29sbGVjdGlvbjogKCkgPT4gSVRlc3RSdW5Ib29rRGVmaW5pdGlvbkNvbmZpZ1tdXG4gICk6IChvcHRpb25zOiBJRGVmaW5lVGVzdFJ1bkhvb2tPcHRpb25zIHwgRnVuY3Rpb24sIGNvZGU/OiBGdW5jdGlvbikgPT4gdm9pZCB7XG4gICAgcmV0dXJuIChvcHRpb25zOiBJRGVmaW5lVGVzdFJ1bkhvb2tPcHRpb25zIHwgRnVuY3Rpb24sIGNvZGU/OiBGdW5jdGlvbikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvZGUgPSBvcHRpb25zXG4gICAgICAgIG9wdGlvbnMgPSB7fVxuICAgICAgfVxuICAgICAgY29uc3QgeyBsaW5lLCB1cmkgfSA9IGdldERlZmluaXRpb25MaW5lQW5kVXJpKHRoaXMuY3dkKVxuICAgICAgdmFsaWRhdGVBcmd1bWVudHMoe1xuICAgICAgICBhcmdzOiB7IGNvZGUsIG9wdGlvbnMgfSxcbiAgICAgICAgZm5OYW1lOiAnZGVmaW5lVGVzdFJ1bkhvb2snLFxuICAgICAgICBsb2NhdGlvbjogZm9ybWF0TG9jYXRpb24oeyBsaW5lLCB1cmkgfSksXG4gICAgICB9KVxuICAgICAgZ2V0Q29sbGVjdGlvbigpLnB1c2goe1xuICAgICAgICBjb2RlLFxuICAgICAgICBsaW5lLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBvcmRlcjogdGhpcy5kZWZpbml0aW9uT3JkZXIrKyxcbiAgICAgICAgdXJpLFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB3cmFwQ29kZSh7IGNvZGUsIHdyYXBwZXJPcHRpb25zIH06IHsgY29kZTogRnVuY3Rpb247IHdyYXBwZXJPcHRpb25zOiBhbnkgfSk6IEZ1bmN0aW9uIHtcbiAgICBpZiAoZG9lc0hhdmVWYWx1ZSh0aGlzLmRlZmluaXRpb25GdW5jdGlvbldyYXBwZXIpKSB7XG4gICAgICBjb25zdCBjb2RlTGVuZ3RoID0gY29kZS5sZW5ndGhcbiAgICAgIGNvbnN0IHdyYXBwZWRDb2RlID0gdGhpcy5kZWZpbml0aW9uRnVuY3Rpb25XcmFwcGVyKGNvZGUsIHdyYXBwZXJPcHRpb25zKVxuICAgICAgaWYgKHdyYXBwZWRDb2RlICE9PSBjb2RlKSB7XG4gICAgICAgIHJldHVybiBhcml0eShjb2RlTGVuZ3RoLCB3cmFwcGVkQ29kZSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB3cmFwcGVkQ29kZVxuICAgIH1cbiAgICByZXR1cm4gY29kZVxuICB9XG5cbiAgYnVpbGRUZXN0Q2FzZUhvb2tEZWZpbml0aW9ucyhcbiAgICBjb25maWdzOiBJVGVzdENhc2VIb29rRGVmaW5pdGlvbkNvbmZpZ1tdLFxuICAgIGNhbm9uaWNhbElkcz86IHN0cmluZ1tdXG4gICk6IFRlc3RDYXNlSG9va0RlZmluaXRpb25bXSB7XG4gICAgcmV0dXJuIGNvbmZpZ3MubWFwKCh7IGNvZGUsIGxpbmUsIG9wdGlvbnMsIG9yZGVyLCB1cmkgfSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHdyYXBwZWRDb2RlID0gdGhpcy53cmFwQ29kZSh7XG4gICAgICAgIGNvZGUsXG4gICAgICAgIHdyYXBwZXJPcHRpb25zOiBvcHRpb25zLndyYXBwZXJPcHRpb25zLFxuICAgICAgfSlcbiAgICAgIHJldHVybiBuZXcgVGVzdENhc2VIb29rRGVmaW5pdGlvbih7XG4gICAgICAgIGNvZGU6IHdyYXBwZWRDb2RlLFxuICAgICAgICBpZDogY2Fub25pY2FsSWRzID8gY2Fub25pY2FsSWRzW2luZGV4XSA6IHRoaXMubmV3SWQoKSxcbiAgICAgICAgbGluZSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgb3JkZXIsXG4gICAgICAgIHVud3JhcHBlZENvZGU6IGNvZGUsXG4gICAgICAgIHVyaSxcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIGJ1aWxkVGVzdFN0ZXBIb29rRGVmaW5pdGlvbnMoY29uZmlnczogSVRlc3RTdGVwSG9va0RlZmluaXRpb25Db25maWdbXSk6IFRlc3RTdGVwSG9va0RlZmluaXRpb25bXSB7XG4gICAgcmV0dXJuIGNvbmZpZ3MubWFwKCh7IGNvZGUsIGxpbmUsIG9wdGlvbnMsIG9yZGVyLCB1cmkgfSkgPT4ge1xuICAgICAgY29uc3Qgd3JhcHBlZENvZGUgPSB0aGlzLndyYXBDb2RlKHtcbiAgICAgICAgY29kZSxcbiAgICAgICAgd3JhcHBlck9wdGlvbnM6IG9wdGlvbnMud3JhcHBlck9wdGlvbnMsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIG5ldyBUZXN0U3RlcEhvb2tEZWZpbml0aW9uKHtcbiAgICAgICAgY29kZTogd3JhcHBlZENvZGUsXG4gICAgICAgIGlkOiB0aGlzLm5ld0lkKCksXG4gICAgICAgIGxpbmUsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIG9yZGVyLFxuICAgICAgICB1bndyYXBwZWRDb2RlOiBjb2RlLFxuICAgICAgICB1cmksXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICBidWlsZFRlc3RSdW5Ib29rRGVmaW5pdGlvbnMoXG4gICAgY29uZmlnczogSVRlc3RSdW5Ib29rRGVmaW5pdGlvbkNvbmZpZ1tdLFxuICAgIGNhbm9uaWNhbElkcz86IHN0cmluZ1tdXG4gICk6IFRlc3RSdW5Ib29rRGVmaW5pdGlvbltdIHtcbiAgICByZXR1cm4gY29uZmlncy5tYXAoKHsgY29kZSwgbGluZSwgb3B0aW9ucywgb3JkZXIsIHVyaSB9LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3Qgd3JhcHBlZENvZGUgPSB0aGlzLndyYXBDb2RlKHtcbiAgICAgICAgY29kZSxcbiAgICAgICAgd3JhcHBlck9wdGlvbnM6IG9wdGlvbnMud3JhcHBlck9wdGlvbnMsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIG5ldyBUZXN0UnVuSG9va0RlZmluaXRpb24oe1xuICAgICAgICBjb2RlOiB3cmFwcGVkQ29kZSxcbiAgICAgICAgaWQ6IGNhbm9uaWNhbElkcyA/IGNhbm9uaWNhbElkc1tpbmRleF0gOiB0aGlzLm5ld0lkKCksXG4gICAgICAgIGxpbmUsXG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnMgYXMgSVRlc3RSdW5Ib29rRGVmaW5pdGlvbk9wdGlvbnMsXG4gICAgICAgIG9yZGVyLFxuICAgICAgICB1bndyYXBwZWRDb2RlOiBjb2RlLFxuICAgICAgICB1cmksXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICBidWlsZFN0ZXBEZWZpbml0aW9ucyhjYW5vbmljYWxJZHM/OiBzdHJpbmdbXSk6IHtcbiAgICBzdGVwRGVmaW5pdGlvbnM6IFN0ZXBEZWZpbml0aW9uW11cbiAgICB1bmRlZmluZWRQYXJhbWV0ZXJUeXBlczogbWVzc2FnZXMuVW5kZWZpbmVkUGFyYW1ldGVyVHlwZVtdXG4gIH0ge1xuICAgIGNvbnN0IHN0ZXBEZWZpbml0aW9uczogU3RlcERlZmluaXRpb25bXSA9IFtdXG4gICAgY29uc3QgdW5kZWZpbmVkUGFyYW1ldGVyVHlwZXM6IG1lc3NhZ2VzLlVuZGVmaW5lZFBhcmFtZXRlclR5cGVbXSA9IFtdXG4gICAgdGhpcy5zdGVwRGVmaW5pdGlvbkNvbmZpZ3MuZm9yRWFjaChcbiAgICAgICh7IGNvZGUsIGxpbmUsIG9wdGlvbnMsIG9yZGVyLCBrZXl3b3JkLCBwYXR0ZXJuLCB1cmkgfSwgaW5kZXgpID0+IHtcbiAgICAgICAgbGV0IGV4cHJlc3Npb246IGFueVxuICAgICAgICBpZiAodHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGV4cHJlc3Npb24gPSBuZXcgQ3VjdW1iZXJFeHByZXNzaW9uKHBhdHRlcm4sIHRoaXMucGFyYW1ldGVyVHlwZVJlZ2lzdHJ5KVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChkb2VzSGF2ZVZhbHVlKGUudW5kZWZpbmVkUGFyYW1ldGVyVHlwZU5hbWUpKSB7XG4gICAgICAgICAgICAgIHVuZGVmaW5lZFBhcmFtZXRlclR5cGVzLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IGUudW5kZWZpbmVkUGFyYW1ldGVyVHlwZU5hbWUsXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogcGF0dGVybixcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV4cHJlc3Npb24gPSBuZXcgUmVndWxhckV4cHJlc3Npb24ocGF0dGVybiwgdGhpcy5wYXJhbWV0ZXJUeXBlUmVnaXN0cnkpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3cmFwcGVkQ29kZSA9IHRoaXMud3JhcENvZGUoe1xuICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgd3JhcHBlck9wdGlvbnM6IG9wdGlvbnMud3JhcHBlck9wdGlvbnMsXG4gICAgICAgIH0pXG4gICAgICAgIHN0ZXBEZWZpbml0aW9ucy5wdXNoKFxuICAgICAgICAgIG5ldyBTdGVwRGVmaW5pdGlvbih7XG4gICAgICAgICAgICBjb2RlOiB3cmFwcGVkQ29kZSxcbiAgICAgICAgICAgIGV4cHJlc3Npb24sXG4gICAgICAgICAgICBpZDogY2Fub25pY2FsSWRzID8gY2Fub25pY2FsSWRzW2luZGV4XSA6IHRoaXMubmV3SWQoKSxcbiAgICAgICAgICAgIGxpbmUsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgb3JkZXIsXG4gICAgICAgICAgICBrZXl3b3JkLFxuICAgICAgICAgICAgcGF0dGVybixcbiAgICAgICAgICAgIHVud3JhcHBlZENvZGU6IGNvZGUsXG4gICAgICAgICAgICB1cmksXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfVxuICAgIClcbiAgICByZXR1cm4geyBzdGVwRGVmaW5pdGlvbnMsIHVuZGVmaW5lZFBhcmFtZXRlclR5cGVzIH1cbiAgfVxuXG4gIGZpbmFsaXplKGNhbm9uaWNhbElkcz86IENhbm9uaWNhbFN1cHBvcnRDb2RlSWRzKTogU3VwcG9ydENvZGVMaWJyYXJ5IHtcbiAgICB0aGlzLnN0YXR1cyA9ICdGSU5BTElaRUQnXG4gICAgY29uc3Qgc3RlcERlZmluaXRpb25zUmVzdWx0ID0gdGhpcy5idWlsZFN0ZXBEZWZpbml0aW9ucyhjYW5vbmljYWxJZHM/LnN0ZXBEZWZpbml0aW9uSWRzKVxuICAgIHJldHVybiB7XG4gICAgICBvcmlnaW5hbENvb3JkaW5hdGVzOiB0aGlzLm9yaWdpbmFsQ29vcmRpbmF0ZXMsXG4gICAgICBhZnRlclRlc3RDYXNlSG9va0RlZmluaXRpb25zOiB0aGlzLmJ1aWxkVGVzdENhc2VIb29rRGVmaW5pdGlvbnMoXG4gICAgICAgIHRoaXMuYWZ0ZXJUZXN0Q2FzZUhvb2tEZWZpbml0aW9uQ29uZmlncyxcbiAgICAgICAgY2Fub25pY2FsSWRzPy5hZnRlclRlc3RDYXNlSG9va0RlZmluaXRpb25JZHNcbiAgICAgICksXG4gICAgICBhZnRlclRlc3RSdW5Ib29rRGVmaW5pdGlvbnM6IHRoaXMuYnVpbGRUZXN0UnVuSG9va0RlZmluaXRpb25zKFxuICAgICAgICB0aGlzLmFmdGVyVGVzdFJ1bkhvb2tEZWZpbml0aW9uQ29uZmlncyxcbiAgICAgICAgY2Fub25pY2FsSWRzPy5hZnRlclRlc3RSdW5Ib29rRGVmaW5pdGlvbklkc1xuICAgICAgKSxcbiAgICAgIGFmdGVyVGVzdFN0ZXBIb29rRGVmaW5pdGlvbnM6IHRoaXMuYnVpbGRUZXN0U3RlcEhvb2tEZWZpbml0aW9ucyhcbiAgICAgICAgdGhpcy5hZnRlclRlc3RTdGVwSG9va0RlZmluaXRpb25Db25maWdzXG4gICAgICApLFxuICAgICAgYmVmb3JlVGVzdENhc2VIb29rRGVmaW5pdGlvbnM6IHRoaXMuYnVpbGRUZXN0Q2FzZUhvb2tEZWZpbml0aW9ucyhcbiAgICAgICAgdGhpcy5iZWZvcmVUZXN0Q2FzZUhvb2tEZWZpbml0aW9uQ29uZmlncyxcbiAgICAgICAgY2Fub25pY2FsSWRzPy5iZWZvcmVUZXN0Q2FzZUhvb2tEZWZpbml0aW9uSWRzXG4gICAgICApLFxuICAgICAgYmVmb3JlVGVzdFJ1bkhvb2tEZWZpbml0aW9uczogdGhpcy5idWlsZFRlc3RSdW5Ib29rRGVmaW5pdGlvbnMoXG4gICAgICAgIHRoaXMuYmVmb3JlVGVzdFJ1bkhvb2tEZWZpbml0aW9uQ29uZmlncyxcbiAgICAgICAgY2Fub25pY2FsSWRzPy5iZWZvcmVUZXN0UnVuSG9va0RlZmluaXRpb25JZHNcbiAgICAgICksXG4gICAgICBiZWZvcmVUZXN0U3RlcEhvb2tEZWZpbml0aW9uczogdGhpcy5idWlsZFRlc3RTdGVwSG9va0RlZmluaXRpb25zKFxuICAgICAgICB0aGlzLmJlZm9yZVRlc3RTdGVwSG9va0RlZmluaXRpb25Db25maWdzXG4gICAgICApLFxuICAgICAgZGVmYXVsdFRpbWVvdXQ6IHRoaXMuZGVmYXVsdFRpbWVvdXQsXG4gICAgICBwYXJhbWV0ZXJUeXBlUmVnaXN0cnk6IHRoaXMucGFyYW1ldGVyVHlwZVJlZ2lzdHJ5LFxuICAgICAgdW5kZWZpbmVkUGFyYW1ldGVyVHlwZXM6IHN0ZXBEZWZpbml0aW9uc1Jlc3VsdC51bmRlZmluZWRQYXJhbWV0ZXJUeXBlcyxcbiAgICAgIHN0ZXBEZWZpbml0aW9uczogc3RlcERlZmluaXRpb25zUmVzdWx0LnN0ZXBEZWZpbml0aW9ucyxcbiAgICAgIFdvcmxkOiB0aGlzLldvcmxkLFxuICAgICAgcGFyYWxsZWxDYW5Bc3NpZ246IHRoaXMucGFyYWxsZWxDYW5Bc3NpZ24sXG4gICAgfVxuICB9XG5cbiAgcmVzZXQoXG4gICAgY3dkOiBzdHJpbmcsXG4gICAgbmV3SWQ6IElkR2VuZXJhdG9yLk5ld0lkLFxuICAgIG9yaWdpbmFsQ29vcmRpbmF0ZXM6IElTdXBwb3J0Q29kZUNvb3JkaW5hdGVzID0ge1xuICAgICAgcmVxdWlyZU1vZHVsZXM6IFtdLFxuICAgICAgcmVxdWlyZVBhdGhzOiBbXSxcbiAgICAgIGltcG9ydFBhdGhzOiBbXSxcbiAgICAgIGxvYWRlcnM6IFtdLFxuICAgIH1cbiAgKTogdm9pZCB7XG4gICAgdGhpcy5jd2QgPSBjd2RcbiAgICB0aGlzLm5ld0lkID0gbmV3SWRcbiAgICB0aGlzLm9yaWdpbmFsQ29vcmRpbmF0ZXMgPSBvcmlnaW5hbENvb3JkaW5hdGVzXG4gICAgdGhpcy5hZnRlclRlc3RDYXNlSG9va0RlZmluaXRpb25Db25maWdzID0gW11cbiAgICB0aGlzLmFmdGVyVGVzdFJ1bkhvb2tEZWZpbml0aW9uQ29uZmlncyA9IFtdXG4gICAgdGhpcy5hZnRlclRlc3RTdGVwSG9va0RlZmluaXRpb25Db25maWdzID0gW11cbiAgICB0aGlzLmJlZm9yZVRlc3RDYXNlSG9va0RlZmluaXRpb25Db25maWdzID0gW11cbiAgICB0aGlzLmJlZm9yZVRlc3RSdW5Ib29rRGVmaW5pdGlvbkNvbmZpZ3MgPSBbXVxuICAgIHRoaXMuYmVmb3JlVGVzdFN0ZXBIb29rRGVmaW5pdGlvbkNvbmZpZ3MgPSBbXVxuICAgIHRoaXMuZGVmaW5pdGlvbkZ1bmN0aW9uV3JhcHBlciA9IG51bGxcbiAgICB0aGlzLmRlZmluaXRpb25PcmRlciA9IDBcbiAgICB0aGlzLmRlZmF1bHRUaW1lb3V0ID0gNTAwMFxuICAgIHRoaXMucGFyYW1ldGVyVHlwZVJlZ2lzdHJ5ID0gbmV3IFNvdXJjZWRQYXJhbWV0ZXJUeXBlUmVnaXN0cnkoKVxuICAgIHRoaXMuc3RlcERlZmluaXRpb25Db25maWdzID0gW11cbiAgICB0aGlzLnBhcmFsbGVsQ2FuQXNzaWduID0gKCkgPT4gdHJ1ZVxuICAgIHRoaXMuV29ybGQgPSBXb3JsZFxuICAgIHRoaXMuc3RhdHVzID0gJ09QRU4nXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFN1cHBvcnRDb2RlTGlicmFyeUJ1aWxkZXIoKVxuIl19
334
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3VwcG9ydF9jb2RlX2xpYnJhcnlfYnVpbGRlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx5RUFBc0Y7QUFFdEYsNERBQThCO0FBQzlCLGtEQUFxRDtBQUVyRCxnRkFBc0Q7QUFDdEQsb0dBQXdFO0FBQ3hFLGtHQUUyQztBQUMzQyxvR0FBd0U7QUFDeEUsb0RBQWdEO0FBQ2hELGlFQUEyRDtBQUMzRCwrRUFBdUU7QUFDdkUsdUZBQWdGO0FBaUJoRiw4RUFBb0Q7QUFDcEQsb0RBQTJCO0FBc0MzQixNQUFhLHlCQUF5QjtJQUNwQixPQUFPLENBQTJCO0lBQzFDLG1CQUFtQixDQUF5QjtJQUM1QyxrQ0FBa0MsQ0FBaUM7SUFDbkUsaUNBQWlDLENBQWdDO0lBQ2pFLGtDQUFrQyxDQUFpQztJQUNuRSxtQ0FBbUMsQ0FBaUM7SUFDcEUsa0NBQWtDLENBQWdDO0lBQ2xFLG1DQUFtQyxDQUFpQztJQUNwRSxHQUFHLENBQVE7SUFDWCxjQUFjLENBQVE7SUFDdEIseUJBQXlCLENBQUs7SUFDOUIsZUFBZSxDQUFRO0lBQ3ZCLEtBQUssQ0FBbUI7SUFDeEIscUJBQXFCLENBQThCO0lBQ25ELHFCQUFxQixDQUF5QjtJQUM5QyxLQUFLLENBQUs7SUFDVixpQkFBaUIsQ0FBNkI7SUFDOUMsTUFBTSxHQUFrQixTQUFTLENBQUE7SUFFekM7UUFDRSxNQUFNLE9BQU8sR0FBOEI7WUFDekMsS0FBSyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0NBQWtDLENBQUM7WUFDN0UsUUFBUSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUNBQWlDLENBQUM7WUFDOUUsU0FBUyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0NB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aW9uIH0gZnJvbSAnQGN1Y3VtYmVyL2N1Y3VtYmVyLWV4cHJlc3Npb25zJ1xuaW1wb3J0IHR5cGUgeyBJZEdlbmVyYXRvciwgVW5kZWZpbmVkUGFyYW1ldGVyVHlwZSB9IGZyb20gJ0BjdWN1bWJlci9tZXNzYWdlcydcbmltcG9ydCBhcml0eSBmcm9tICd1dGlsLWFyaXR5J1xuaW1wb3J0IHsgZm9ybWF0TG9jYXRpb24gfSBmcm9tICcuLi9mb3JtYXR0ZXIvaGVscGVycydcbmltcG9ydCB0eXBlIHsgR2hlcmtpblN0ZXBLZXl3b3JkIH0gZnJvbSAnLi4vbW9kZWxzL2doZXJraW5fc3RlcF9rZXl3b3JkJ1xuaW1wb3J0IFN0ZXBEZWZpbml0aW9uIGZyb20gJy4uL21vZGVscy9zdGVwX2RlZmluaXRpb24nXG5pbXBvcnQgVGVzdENhc2VIb29rRGVmaW5pdGlvbiBmcm9tICcuLi9tb2RlbHMvdGVzdF9jYXNlX2hvb2tfZGVmaW5pdGlvbidcbmltcG9ydCBUZXN0UnVuSG9va0RlZmluaXRpb24sIHtcbiAgdHlwZSBJVGVzdFJ1bkhvb2tEZWZpbml0aW9uT3B0aW9ucyxcbn0gZnJvbSAnLi4vbW9kZWxzL3Rlc3RfcnVuX2hvb2tfZGVmaW5pdGlvbidcbmltcG9ydCBUZXN0U3RlcEhvb2tEZWZpbml0aW9uIGZyb20gJy4uL21vZGVscy90ZXN0X3N0ZXBfaG9va19kZWZpbml0aW9uJ1xuaW1wb3J0IHsgZG9lc0hhdmVWYWx1ZSB9IGZyb20gJy4uL3ZhbHVlX2NoZWNrZXInXG5pbXBvcnQgeyBidWlsZFBhcmFtZXRlclR5cGUgfSBmcm9tICcuL2J1aWxkX3BhcmFtZXRlcl90eXBlJ1xuaW1wb3J0IHsgZ2V0RGVmaW5pdGlvbkxpbmVBbmRVcmkgfSBmcm9tICcuL2dldF9kZWZpbml0aW9uX2xpbmVfYW5kX3VyaSdcbmltcG9ydCB7IFNvdXJjZWRQYXJhbWV0ZXJUeXBlUmVnaXN0cnkgfSBmcm9tICcuL3NvdXJjZWRfcGFyYW1ldGVyX3R5cGVfcmVnaXN0cnknXG5pbXBvcnQgdHlwZSB7XG4gIENhbm9uaWNhbFN1cHBvcnRDb2RlSWRzLFxuICBEZWZpbmVTdGVwUGF0dGVybixcbiAgSURlZmluZVN0ZXAsXG4gIElEZWZpbmVTdGVwT3B0aW9ucyxcbiAgSURlZmluZVN1cHBvcnRDb2RlTWV0aG9kcyxcbiAgSURlZmluZVRlc3RDYXNlSG9va09wdGlvbnMsXG4gIElEZWZpbmVUZXN0UnVuSG9va09wdGlvbnMsXG4gIElEZWZpbmVUZXN0U3RlcEhvb2tPcHRpb25zLFxuICBJUGFyYW1ldGVyVHlwZURlZmluaXRpb24sXG4gIElTdXBwb3J0Q29kZUNvb3JkaW5hdGVzLFxuICBQYXJhbGxlbEFzc2lnbm1lbnRWYWxpZGF0b3IsXG4gIFN1cHBvcnRDb2RlTGlicmFyeSxcbiAgVGVzdENhc2VIb29rRnVuY3Rpb24sXG4gIFRlc3RTdGVwSG9va0Z1bmN0aW9uLFxufSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHZhbGlkYXRlQXJndW1lbnRzIGZyb20gJy4vdmFsaWRhdGVfYXJndW1lbnRzJ1xuaW1wb3J0IFdvcmxkIGZyb20gJy4vd29ybGQnXG5cbmludGVyZmFjZSBJU3RlcERlZmluaXRpb25Db25maWcge1xuICBjb2RlOiBGdW5jdGlvblxuICBsaW5lOiBudW1iZXJcbiAgb3B0aW9uczogYW55XG4gIG9yZGVyOiBudW1iZXJcbiAga2V5d29yZDogR2hlcmtpblN0ZXBLZXl3b3JkXG4gIHBhdHRlcm46IHN0cmluZyB8IFJlZ0V4cFxuICB1cmk6IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgSVRlc3RDYXNlSG9va0RlZmluaXRpb25Db25maWcge1xuICBjb2RlOiBhbnlcbiAgbGluZTogbnVtYmVyXG4gIG9wdGlvbnM6IGFueVxuICBvcmRlcjogbnVtYmVyXG4gIHVyaTogc3RyaW5nXG59XG5cbmludGVyZmFjZSBJVGVzdFN0ZXBIb29rRGVmaW5pdGlvbkNvbmZpZyB7XG4gIGNvZGU6IEZ1bmN0aW9uXG4gIGxpbmU6IG51bWJlclxuICBvcHRpb25zOiBhbnlcbiAgb3JkZXI6IG51bWJlclxuICB1cmk6IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgSVRlc3RSdW5Ib29rRGVmaW5pdGlvbkNvbmZpZyB7XG4gIGNvZGU6IEZ1bmN0aW9uXG4gIGxpbmU6IG51bWJlclxuICBvcHRpb25zOiBhbnlcbiAgb3JkZXI6IG51bWJlclxuICB1cmk6IHN0cmluZ1xufVxuXG50eXBlIExpYnJhcnlTdGF0dXMgPSAnUEVORElORycgfCAnT1BFTicgfCAnRklOQUxJWkVEJ1xuXG5leHBvcnQgY2xhc3MgU3VwcG9ydENvZGVMaWJyYXJ5QnVpbGRlciB7XG4gIHB1YmxpYyByZWFkb25seSBtZXRob2RzOiBJRGVmaW5lU3VwcG9ydENvZGVNZXRob2RzXG4gIHByaXZhdGUgb3JpZ2luYWxDb29yZGluYXRlczogSVN1cHBvcnRDb2RlQ29vcmRpbmF0ZXNcbiAgcHJpdmF0ZSBhZnRlclRlc3RDYXNlSG9va0RlZmluaXRpb25Db25maWdzOiBJVGVzdENhc2VIb29rRGVmaW5pdGlvbkNvbmZpZ1tdXG4gIHByaXZhdGUgYWZ0ZXJUZXN0UnVuSG9va0RlZmluaXRpb25Db25maWdzOiBJVGVzdFJ1bkhvb2tEZWZpbml0aW9uQ29uZmlnW11cbiAgcHJpdmF0ZSBhZnRlclRlc3RTdGVwSG9va0RlZmluaXRpb25Db25maWdzOiBJVGVzdFN0ZXBIb29rRGVmaW5pdGlvbkNvbmZpZ1tdXG4gIHByaXZhdGUgYmVmb3JlVGVzdENhc2VIb29rRGVmaW5pdGlvbkNvbmZpZ3M6IElUZXN0Q2FzZUhvb2tEZWZpbml0aW9uQ29uZmlnW11cbiAgcHJpdmF0ZSBiZWZvcmVUZXN0UnVuSG9va0RlZmluaXRpb25Db25maWdzOiBJVGVzdFJ1bkhvb2tEZWZpbml0aW9uQ29uZmlnW11cbiAgcHJpdmF0ZSBiZWZvcmVUZXN0U3RlcEhvb2tEZWZpbml0aW9uQ29uZmlnczogSVRlc3RTdGVwSG9va0RlZmluaXRpb25Db25maWdbXVxuICBwcml2YXRlIGN3ZDogc3RyaW5nXG4gIHByaXZhdGUgZGVmYXVsdFRpbWVvdXQ6IG51bWJlclxuICBwcml2YXRlIGRlZmluaXRpb25GdW5jdGlvbldyYXBwZXI6IGFueVxuICBwcml2YXRlIGRlZmluaXRpb25PcmRlcjogbnVtYmVyXG4gIHByaXZhdGUgbmV3SWQ6IElkR2VuZXJhdG9yLk5ld0lkXG4gIHByaXZhdGUgcGFyYW1ldGVyVHlwZVJlZ2lzdHJ5OiBTb3VyY2VkUGFyYW1ldGVyVHlwZVJlZ2lzdHJ5XG4gIHByaXZhdGUgc3RlcERlZmluaXRpb25Db25maWdzOiBJU3RlcERlZmluaXRpb25Db25maWdbXVxuICBwcml2YXRlIFdvcmxkOiBhbnlcbiAgcHJpdmF0ZSBwYXJhbGxlbENhbkFzc2lnbjogUGFyYWxsZWxBc3NpZ25tZW50VmFsaWRhdG9yXG4gIHByaXZhdGUgc3RhdHVzOiBMaWJyYXJ5U3RhdHVzID0gJ1BFTkRJTkcnXG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbWV0aG9kczogSURlZmluZVN1cHBvcnRDb2RlTWV0aG9kcyA9IHtcbiAgICAgIEFmdGVyOiB0aGlzLmRlZmluZVRlc3RDYXNlSG9vaygoKSA9PiB0aGlzLmFmdGVyVGVzdENhc2VIb29rRGVmaW5pdGlvbkNvbmZpZ3MpLFxuICAgICAgQWZ0ZXJBbGw6IHRoaXMuZGVmaW5lVGVzdFJ1bkhvb2soKCkgPT4gdGhpcy5hZnRlclRlc3RSdW5Ib29rRGVmaW5pdGlvbkNvbmZpZ3MpLFxuICAgICAgQWZ0ZXJTdGVwOiB0aGlzLmRlZmluZVRlc3RTdGVwSG9vaygoKSA9PiB0aGlzLmFmdGVyVGVzdFN0ZXBIb29rRGVmaW5pdGlvbkNvbmZpZ3MpLFxuICAgICAgQmVmb3JlOiB0aGlzLmRlZmluZVRlc3RDYXNlSG9vaygoKSA9PiB0aGlzLmJlZm9yZVRlc3RDYXNlSG9va0RlZmluaXRpb25Db25maWdzKSxcbiAgICAgIEJlZm9yZUFsbDogdGhpcy5kZWZpbmVUZXN0UnVuSG9vaygoKSA9PiB0aGlzLmJlZm9yZVRlc3RSdW5Ib29rRGVmaW5pdGlvbkNvbmZpZ3MpLFxuICAgICAgQmVmb3JlU3RlcDogdGhpcy5kZWZpbmVUZXN0U3RlcEhvb2soKCkgPT4gdGhpcy5iZWZvcmVUZXN0U3RlcEhvb2tEZWZpbml0aW9uQ29uZmlncyksXG4gICAgICBkZWZpbmVQYXJhbWV0ZXJUeXBlOiB0aGlzLmRlZmluZVBhcmFtZXRlclR5cGUuYmluZCh0aGlzKSxcbiAgICAgIGRlZmluZVN0ZXA6IHRoaXMuZGVmaW5lU3RlcCgnVW5rbm93bicsICgpID0+IHRoaXMuc3RlcERlZmluaXRpb25Db25maWdzKSxcbiAgICAgIEdpdmVuOiB0aGlzLmRlZmluZVN0ZXAoJ0dpdmVuJywgKCkgPT4gdGhpcy5zdGVwRGVmaW5pdGlvbkNvbmZpZ3MpLFxuICAgICAgc2V0RGVmYXVsdFRpbWVvdXQ6IChtaWxsaXNlY29uZHMpID0+IHtcbiAgICAgICAgdGhpcy5kZWZhdWx0VGltZW91dCA9IG1pbGxpc2Vjb25kc1xuICAgICAgfSxcbiAgICAgIHNldERlZmluaXRpb25GdW5jdGlvbldyYXBwZXI6IChmbikgPT4ge1xuICAgICAgICB0aGlzLmRlZmluaXRpb25GdW5jdGlvbldyYXBwZXIgPSBmblxuICAgICAgfSxcbiAgICAgIHNldFdvcmxkQ29uc3RydWN0b3I6IChmbikgPT4ge1xuICAgICAgICB0aGlzLldvcmxkID0gZm5cbiAgICAgIH0sXG4gICAgICBzZXRQYXJhbGxlbENhbkFzc2lnbjogKGZuOiBQYXJhbGxlbEFzc2lnbm1lbnRWYWxpZGF0b3IpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5wYXJhbGxlbENhbkFzc2lnbiA9IGZuXG4gICAgICB9LFxuICAgICAgVGhlbjogdGhpcy5kZWZpbmVTdGVwKCdUaGVuJywgKCkgPT4gdGhpcy5zdGVwRGVmaW5pdGlvbkNvbmZpZ3MpLFxuICAgICAgV2hlbjogdGhpcy5kZWZpbmVTdGVwKCdXaGVuJywgKCkgPT4gdGhpcy5zdGVwRGVmaW5pdGlvbkNvbmZpZ3MpLFxuICAgIH1cbiAgICBjb25zdCBjaGVja0luc3RhbGwgPSAobWV0aG9kOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gJ1BFTkRJTkcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgXG4gICAgICAgICAgWW91J3JlIGNhbGxpbmcgZnVuY3Rpb25zIChlLmcuIFwiJHttZXRob2R9XCIpIG9uIGFuIGluc3RhbmNlIG9mIEN1Y3VtYmVyIHRoYXQgaXNuJ3QgcnVubmluZyAoc3RhdHVzOiAke3RoaXMuc3RhdHVzfSkuXG4gICAgICAgICAgVGhpcyBtZWFucyB5b3UgbWF5IGhhdmUgYW4gaW52YWxpZCBpbnN0YWxsYXRpb24sIHBvdGVudGlhbGx5IGR1ZSB0bzpcbiAgICAgICAgICAtIEN1Y3VtYmVyIGJlaW5nIGluc3RhbGxlZCBnbG9iYWxseVxuICAgICAgICAgIC0gQSBwcm9qZWN0IHN0cnVjdHVyZSB3aGVyZSB5b3VyIHN1cHBvcnQgY29kZSBpcyBkZXBlbmRpbmcgb24gYSBkaWZmZXJlbnQgaW5zdGFuY2Ugb2YgQ3VjdW1iZXJcbiAgICAgICAgICBFaXRoZXIgd2F5LCB5b3UnbGwgbmVlZCB0byBhZGRyZXNzIHRoaXMgaW4gb3JkZXIgZm9yIEN1Y3VtYmVyIHRvIHdvcmsuXG4gICAgICAgICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jdWN1bWJlci9jdWN1bWJlci1qcy9ibG9iL21haW4vZG9jcy9pbnN0YWxsYXRpb24ubWQjaW52YWxpZC1pbnN0YWxsYXRpb25zXG4gICAgICAgICAgYFxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMubWV0aG9kcyA9IG5ldyBQcm94eShtZXRob2RzLCB7XG4gICAgICBnZXQodGFyZ2V0OiBJRGVmaW5lU3VwcG9ydENvZGVNZXRob2RzLCBtZXRob2Q6IGtleW9mIElEZWZpbmVTdXBwb3J0Q29kZU1ldGhvZHMpOiBhbnkge1xuICAgICAgICByZXR1cm4gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICAgICAgY2hlY2tJbnN0YWxsKG1ldGhvZClcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGRpZmZpY3VsdCB0byB0eXBlIHRoaXMgY29ycmVjdGx5XG4gICAgICAgICAgcmV0dXJuIHRhcmdldFttZXRob2RdKC4uLmFyZ3MpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSlcbiAgfVxuXG4gIGRlZmluZVBhcmFtZXRlclR5cGUob3B0aW9uczogSVBhcmFtZXRlclR5cGVEZWZpbml0aW9uPGFueT4pOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJUeXBlID0gYnVpbGRQYXJhbWV0ZXJUeXBlKG9wdGlvbnMpXG4gICAgY29uc3Qgc291cmNlID0gZ2V0RGVmaW5pdGlvbkxpbmVBbmRVcmkodGhpcy5jd2QpXG4gICAgdGhpcy5wYXJhbWV0ZXJUeXBlUmVnaXN0cnkuZGVmaW5lU291cmNlZFBhcmFtZXRlclR5cGUoXG4gICAgICBwYXJhbWV0ZXJUeXBlLFxuICAgICAgc291cmNlLFxuICAgICAgdGhpcy5kZWZpbml0aW9uT3JkZXIrK1xuICAgIClcbiAgfVxuXG4gIGRlZmluZVN0ZXAoXG4gICAga2V5d29yZDogR2hlcmtpblN0ZXBLZXl3b3JkLFxuICAgIGdldENvbGxlY3Rpb246ICgpID0+IElTdGVwRGVmaW5pdGlvbkNvbmZpZ1tdXG4gICk6IElEZWZpbmVTdGVwIHtcbiAgICByZXR1cm4gKFxuICAgICAgcGF0dGVybjogRGVmaW5lU3RlcFBhdHRlcm4sXG4gICAgICBvcHRpb25zOiBJRGVmaW5lU3RlcE9wdGlvbnMgfCBGdW5jdGlvbixcbiAgICAgIGNvZGU/OiBGdW5jdGlvblxuICAgICkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvZGUgPSBvcHRpb25zXG4gICAgICAgIG9wdGlvbnMgPSB7fVxuICAgICAgfVxuICAgICAgY29uc3QgeyBsaW5lLCB1cmkgfSA9IGdldERlZmluaXRpb25MaW5lQW5kVXJpKHRoaXMuY3dkKVxuICAgICAgdmFsaWRhdGVBcmd1bWVudHMoe1xuICAgICAgICBhcmdzOiB7IGNvZGUsIHBhdHRlcm4sIG9wdGlvbnMgfSxcbiAgICAgICAgZm5OYW1lOiAnZGVmaW5lU3RlcCcsXG4gICAgICAgIGxvY2F0aW9uOiBmb3JtYXRMb2NhdGlvbih7IGxpbmUsIHVyaSB9KSxcbiAgICAgIH0pXG4gICAgICBnZXRDb2xsZWN0aW9uKCkucHVzaCh7XG4gICAgICAgIGNvZGUsXG4gICAgICAgIGxpbmUsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIG9yZGVyOiB0aGlzLmRlZmluaXRpb25PcmRlcisrLFxuICAgICAgICBrZXl3b3JkLFxuICAgICAgICBwYXR0ZXJuLFxuICAgICAgICB1cmksXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGRlZmluZVRlc3RDYXNlSG9vayhcbiAgICBnZXRDb2xsZWN0aW9uOiAoKSA9PiBJVGVzdENhc2VIb29rRGVmaW5pdGlvbkNvbmZpZ1tdXG4gICk6IDxXb3JsZFR5cGU+KFxuICAgIG9wdGlvbnM6IHN0cmluZyB8IElEZWZpbmVUZXN0Q2FzZUhvb2tPcHRpb25zIHwgVGVzdENhc2VIb29rRnVuY3Rpb248V29ybGRUeXBlPixcbiAgICBjb2RlPzogVGVzdENhc2VIb29rRnVuY3Rpb248V29ybGRUeXBlPlxuICApID0+IHZvaWQge1xuICAgIHJldHVybiA8V29ybGRUeXBlPihcbiAgICAgIG9wdGlvbnM6IHN0cmluZyB8IElEZWZpbmVUZXN0Q2FzZUhvb2tPcHRpb25zIHwgVGVzdENhc2VIb29rRnVuY3Rpb248V29ybGRUeXBlPixcbiAgICAgIGNvZGU/OiBUZXN0Q2FzZUhvb2tGdW5jdGlvbjxXb3JsZFR5cGU+XG4gICAgKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG9wdGlvbnMgPSB7IHRhZ3M6IG9wdGlvbnMgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb2RlID0gb3B0aW9uc1xuICAgICAgICBvcHRpb25zID0ge31cbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgbGluZSwgdXJpIH0gPSBnZXREZWZpbml0aW9uTGluZUFuZFVyaSh0aGlzLmN3ZClcbiAgICAgIHZhbGlkYXRlQXJndW1lbnRzKHtcbiAgICAgICAgYXJnczogeyBjb2RlLCBvcHRpb25zIH0sXG4gICAgICAgIGZuTmFtZTogJ2RlZmluZVRlc3RDYXNlSG9vaycsXG4gICAgICAgIGxvY2F0aW9uOiBmb3JtYXRMb2NhdGlvbih7IGxpbmUsIHVyaSB9KSxcbiAgICAgIH0pXG4gICAgICBnZXRDb2xsZWN0aW9uKCkucHVzaCh7XG4gICAgICAgIGNvZGUsXG4gICAgICAgIGxpbmUsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIG9yZGVyOiB0aGlzLmRlZmluaXRpb25PcmRlcisrLFxuICAgICAgICB1cmksXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGRlZmluZVRlc3RTdGVwSG9vayhcbiAgICBnZXRDb2xsZWN0aW9uOiAoKSA9PiBJVGVzdFN0ZXBIb29rRGVmaW5pdGlvbkNvbmZpZ1tdXG4gICk6IDxXb3JsZFR5cGU+KFxuICAgIG9wdGlvbnM6IHN0cmluZyB8IElEZWZpbmVUZXN0U3RlcEhvb2tPcHRpb25zIHwgVGVzdFN0ZXBIb29rRnVuY3Rpb248V29ybGRUeXBlPixcbiAgICBjb2RlPzogVGVzdFN0ZXBIb29rRnVuY3Rpb248V29ybGRUeXBlPlxuICApID0+IHZvaWQge1xuICAgIHJldHVybiA8V29ybGRUeXBlPihcbiAgICAgIG9wdGlvbnM6IHN0cmluZyB8IElEZWZpbmVUZXN0U3RlcEhvb2tPcHRpb25zIHwgVGVzdFN0ZXBIb29rRnVuY3Rpb248V29ybGRUeXBlPixcbiAgICAgIGNvZGU/OiBUZXN0U3RlcEhvb2tGdW5jdGlvbjxXb3JsZFR5cGU+XG4gICAgKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG9wdGlvbnMgPSB7IHRhZ3M6IG9wdGlvbnMgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb2RlID0gb3B0aW9uc1xuICAgICAgICBvcHRpb25zID0ge31cbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgbGluZSwgdXJpIH0gPSBnZXREZWZpbml0aW9uTGluZUFuZFVyaSh0aGlzLmN3ZClcbiAgICAgIHZhbGlkYXRlQXJndW1lbnRzKHtcbiAgICAgICAgYXJnczogeyBjb2RlLCBvcHRpb25zIH0sXG4gICAgICAgIGZuTmFtZTogJ2RlZmluZVRlc3RTdGVwSG9vaycsXG4gICAgICAgIGxvY2F0aW9uOiBmb3JtYXRMb2NhdGlvbih7IGxpbmUsIHVyaSB9KSxcbiAgICAgIH0pXG4gICAgICBnZXRDb2xsZWN0aW9uKCkucHVzaCh7XG4gICAgICAgIGNvZGUsXG4gICAgICAgIGxpbmUsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIG9yZGVyOiB0aGlzLmRlZmluaXRpb25PcmRlcisrLFxuICAgICAgICB1cmksXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGRlZmluZVRlc3RSdW5Ib29rKFxuICAgIGdldENvbGxlY3Rpb246ICgpID0+IElUZXN0UnVuSG9va0RlZmluaXRpb25Db25maWdbXVxuICApOiAob3B0aW9uczogSURlZmluZVRlc3RSdW5Ib29rT3B0aW9ucyB8IEZ1bmN0aW9uLCBjb2RlPzogRnVuY3Rpb24pID0+IHZvaWQge1xuICAgIHJldHVybiAob3B0aW9uczogSURlZmluZVRlc3RSdW5Ib29rT3B0aW9ucyB8IEZ1bmN0aW9uLCBjb2RlPzogRnVuY3Rpb24pID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb2RlID0gb3B0aW9uc1xuICAgICAgICBvcHRpb25zID0ge31cbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgbGluZSwgdXJpIH0gPSBnZXREZWZpbml0aW9uTGluZUFuZFVyaSh0aGlzLmN3ZClcbiAgICAgIHZhbGlkYXRlQXJndW1lbnRzKHtcbiAgICAgICAgYXJnczogeyBjb2RlLCBvcHRpb25zIH0sXG4gICAgICAgIGZuTmFtZTogJ2RlZmluZVRlc3RSdW5Ib29rJyxcbiAgICAgICAgbG9jYXRpb246IGZvcm1hdExvY2F0aW9uKHsgbGluZSwgdXJpIH0pLFxuICAgICAgfSlcbiAgICAgIGdldENvbGxlY3Rpb24oKS5wdXNoKHtcbiAgICAgICAgY29kZSxcbiAgICAgICAgbGluZSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgb3JkZXI6IHRoaXMuZGVmaW5pdGlvbk9yZGVyKyssXG4gICAgICAgIHVyaSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgd3JhcENvZGUoeyBjb2RlLCB3cmFwcGVyT3B0aW9ucyB9OiB7IGNvZGU6IEZ1bmN0aW9uOyB3cmFwcGVyT3B0aW9uczogYW55IH0pOiBGdW5jdGlvbiB7XG4gICAgaWYgKGRvZXNIYXZlVmFsdWUodGhpcy5kZWZpbml0aW9uRnVuY3Rpb25XcmFwcGVyKSkge1xuICAgICAgY29uc3QgY29kZUxlbmd0aCA9IGNvZGUubGVuZ3RoXG4gICAgICBjb25zdCB3cmFwcGVkQ29kZSA9IHRoaXMuZGVmaW5pdGlvbkZ1bmN0aW9uV3JhcHBlcihjb2RlLCB3cmFwcGVyT3B0aW9ucylcbiAgICAgIGlmICh3cmFwcGVkQ29kZSAhPT0gY29kZSkge1xuICAgICAgICByZXR1cm4gYXJpdHkoY29kZUxlbmd0aCwgd3JhcHBlZENvZGUpXG4gICAgICB9XG4gICAgICByZXR1cm4gd3JhcHBlZENvZGVcbiAgICB9XG4gICAgcmV0dXJuIGNvZGVcbiAgfVxuXG4gIGJ1aWxkVGVzdENhc2VIb29rRGVmaW5pdGlvbnMoXG4gICAgY29uZmlnczogSVRlc3RDYXNlSG9va0RlZmluaXRpb25Db25maWdbXSxcbiAgICBjYW5vbmljYWxJZHM/OiBzdHJpbmdbXVxuICApOiBUZXN0Q2FzZUhvb2tEZWZpbml0aW9uW10ge1xuICAgIHJldHVybiBjb25maWdzLm1hcCgoeyBjb2RlLCBsaW5lLCBvcHRpb25zLCBvcmRlciwgdXJpIH0sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCB3cmFwcGVkQ29kZSA9IHRoaXMud3JhcENvZGUoe1xuICAgICAgICBjb2RlLFxuICAgICAgICB3cmFwcGVyT3B0aW9uczogb3B0aW9ucy53cmFwcGVyT3B0aW9ucyxcbiAgICAgIH0pXG4gICAgICByZXR1cm4gbmV3IFRlc3RDYXNlSG9va0RlZmluaXRpb24oe1xuICAgICAgICBjb2RlOiB3cmFwcGVkQ29kZSxcbiAgICAgICAgaWQ6IGNhbm9uaWNhbElkcyA/IGNhbm9uaWNhbElkc1tpbmRleF0gOiB0aGlzLm5ld0lkKCksXG4gICAgICAgIGxpbmUsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIG9yZGVyLFxuICAgICAgICB1bndyYXBwZWRDb2RlOiBjb2RlLFxuICAgICAgICB1cmksXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICBidWlsZFRlc3RTdGVwSG9va0RlZmluaXRpb25zKGNvbmZpZ3M6IElUZXN0U3RlcEhvb2tEZWZpbml0aW9uQ29uZmlnW10pOiBUZXN0U3RlcEhvb2tEZWZpbml0aW9uW10ge1xuICAgIHJldHVybiBjb25maWdzLm1hcCgoeyBjb2RlLCBsaW5lLCBvcHRpb25zLCBvcmRlciwgdXJpIH0pID0+IHtcbiAgICAgIGNvbnN0IHdyYXBwZWRDb2RlID0gdGhpcy53cmFwQ29kZSh7XG4gICAgICAgIGNvZGUsXG4gICAgICAgIHdyYXBwZXJPcHRpb25zOiBvcHRpb25zLndyYXBwZXJPcHRpb25zLFxuICAgICAgfSlcbiAgICAgIHJldHVybiBuZXcgVGVzdFN0ZXBIb29rRGVmaW5pdGlvbih7XG4gICAgICAgIGNvZGU6IHdyYXBwZWRDb2RlLFxuICAgICAgICBpZDogdGhpcy5uZXdJZCgpLFxuICAgICAgICBsaW5lLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBvcmRlcixcbiAgICAgICAgdW53cmFwcGVkQ29kZTogY29kZSxcbiAgICAgICAgdXJpLFxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgYnVpbGRUZXN0UnVuSG9va0RlZmluaXRpb25zKFxuICAgIGNvbmZpZ3M6IElUZXN0UnVuSG9va0RlZmluaXRpb25Db25maWdbXSxcbiAgICBjYW5vbmljYWxJZHM/OiBzdHJpbmdbXVxuICApOiBUZXN0UnVuSG9va0RlZmluaXRpb25bXSB7XG4gICAgcmV0dXJuIGNvbmZpZ3MubWFwKCh7IGNvZGUsIGxpbmUsIG9wdGlvbnMsIG9yZGVyLCB1cmkgfSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHdyYXBwZWRDb2RlID0gdGhpcy53cmFwQ29kZSh7XG4gICAgICAgIGNvZGUsXG4gICAgICAgIHdyYXBwZXJPcHRpb25zOiBvcHRpb25zLndyYXBwZXJPcHRpb25zLFxuICAgICAgfSlcbiAgICAgIHJldHVybiBuZXcgVGVzdFJ1bkhvb2tEZWZpbml0aW9uKHtcbiAgICAgICAgY29kZTogd3JhcHBlZENvZGUsXG4gICAgICAgIGlkOiBjYW5vbmljYWxJZHMgPyBjYW5vbmljYWxJZHNbaW5kZXhdIDogdGhpcy5uZXdJZCgpLFxuICAgICAgICBsaW5lLFxuICAgICAgICBvcHRpb25zOiBvcHRpb25zIGFzIElUZXN0UnVuSG9va0RlZmluaXRpb25PcHRpb25zLFxuICAgICAgICBvcmRlcixcbiAgICAgICAgdW53cmFwcGVkQ29kZTogY29kZSxcbiAgICAgICAgdXJpLFxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgYnVpbGRTdGVwRGVmaW5pdGlvbnMoY2Fub25pY2FsSWRzPzogc3RyaW5nW10pOiB7XG4gICAgc3RlcERlZmluaXRpb25zOiBTdGVwRGVmaW5pdGlvbltdXG4gICAgdW5kZWZpbmVkUGFyYW1ldGVyVHlwZXM6IFVuZGVmaW5lZFBhcmFtZXRlclR5cGVbXVxuICB9IHtcbiAgICBjb25zdCBzdGVwRGVmaW5pdGlvbnM6IFN0ZXBEZWZpbml0aW9uW10gPSBbXVxuICAgIGNvbnN0IHVuZGVmaW5lZFBhcmFtZXRlclR5cGVzOiBVbmRlZmluZWRQYXJhbWV0ZXJUeXBlW10gPSBbXVxuICAgIHRoaXMuc3RlcERlZmluaXRpb25Db25maWdzLmZvckVhY2goXG4gICAgICAoeyBjb2RlLCBsaW5lLCBvcHRpb25zLCBvcmRlciwga2V5d29yZCwgcGF0dGVybiwgdXJpIH0sIGluZGV4KSA9PiB7XG4gICAgICAgIGxldCBleHByZXNzaW9uOiBhbnlcbiAgICAgICAgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBleHByZXNzaW9uID0gbmV3IEN1Y3VtYmVyRXhwcmVzc2lvbihwYXR0ZXJuLCB0aGlzLnBhcmFtZXRlclR5cGVSZWdpc3RyeSlcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZG9lc0hhdmVWYWx1ZShlLnVuZGVmaW5lZFBhcmFtZXRlclR5cGVOYW1lKSkge1xuICAgICAgICAgICAgICB1bmRlZmluZWRQYXJhbWV0ZXJUeXBlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBlLnVuZGVmaW5lZFBhcmFtZXRlclR5cGVOYW1lLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHBhdHRlcm4sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBleHByZXNzaW9uID0gbmV3IFJlZ3VsYXJFeHByZXNzaW9uKHBhdHRlcm4sIHRoaXMucGFyYW1ldGVyVHlwZVJlZ2lzdHJ5KVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgd3JhcHBlZENvZGUgPSB0aGlzLndyYXBDb2RlKHtcbiAgICAgICAgICBjb2RlLFxuICAgICAgICAgIHdyYXBwZXJPcHRpb25zOiBvcHRpb25zLndyYXBwZXJPcHRpb25zLFxuICAgICAgICB9KVxuICAgICAgICBzdGVwRGVmaW5pdGlvbnMucHVzaChcbiAgICAgICAgICBuZXcgU3RlcERlZmluaXRpb24oe1xuICAgICAgICAgICAgY29kZTogd3JhcHBlZENvZGUsXG4gICAgICAgICAgICBleHByZXNzaW9uLFxuICAgICAgICAgICAgaWQ6IGNhbm9uaWNhbElkcyA/IGNhbm9uaWNhbElkc1tpbmRleF0gOiB0aGlzLm5ld0lkKCksXG4gICAgICAgICAgICBsaW5lLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIG9yZGVyLFxuICAgICAgICAgICAga2V5d29yZCxcbiAgICAgICAgICAgIHBhdHRlcm4sXG4gICAgICAgICAgICB1bndyYXBwZWRDb2RlOiBjb2RlLFxuICAgICAgICAgICAgdXJpLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICApXG4gICAgcmV0dXJuIHsgc3RlcERlZmluaXRpb25zLCB1bmRlZmluZWRQYXJhbWV0ZXJUeXBlcyB9XG4gIH1cblxuICBmaW5hbGl6ZShjYW5vbmljYWxJZHM/OiBDYW5vbmljYWxTdXBwb3J0Q29kZUlkcyk6IFN1cHBvcnRDb2RlTGlicmFyeSB7XG4gICAgdGhpcy5zdGF0dXMgPSAnRklOQUxJWkVEJ1xuICAgIGNvbnN0IHN0ZXBEZWZpbml0aW9uc1Jlc3VsdCA9IHRoaXMuYnVpbGRTdGVwRGVmaW5pdGlvbnMoY2Fub25pY2FsSWRzPy5zdGVwRGVmaW5pdGlvbklkcylcbiAgICByZXR1cm4ge1xuICAgICAgb3JpZ2luYWxDb29yZGluYXRlczogdGhpcy5vcmlnaW5hbENvb3JkaW5hdGVzLFxuICAgICAgYWZ0ZXJUZXN0Q2FzZUhvb2tEZWZpbml0aW9uczogdGhpcy5idWlsZFRlc3RDYXNlSG9va0RlZmluaXRpb25zKFxuICAgICAgICB0aGlzLmFmdGVyVGVzdENhc2VIb29rRGVmaW5pdGlvbkNvbmZpZ3MsXG4gICAgICAgIGNhbm9uaWNhbElkcz8uYWZ0ZXJUZXN0Q2FzZUhvb2tEZWZpbml0aW9uSWRzXG4gICAgICApLFxuICAgICAgYWZ0ZXJUZXN0UnVuSG9va0RlZmluaXRpb25zOiB0aGlzLmJ1aWxkVGVzdFJ1bkhvb2tEZWZpbml0aW9ucyhcbiAgICAgICAgdGhpcy5hZnRlclRlc3RSdW5Ib29rRGVmaW5pdGlvbkNvbmZpZ3MsXG4gICAgICAgIGNhbm9uaWNhbElkcz8uYWZ0ZXJUZXN0UnVuSG9va0RlZmluaXRpb25JZHNcbiAgICAgICksXG4gICAgICBhZnRlclRlc3RTdGVwSG9va0RlZmluaXRpb25zOiB0aGlzLmJ1aWxkVGVzdFN0ZXBIb29rRGVmaW5pdGlvbnMoXG4gICAgICAgIHRoaXMuYWZ0ZXJUZXN0U3RlcEhvb2tEZWZpbml0aW9uQ29uZmlnc1xuICAgICAgKSxcbiAgICAgIGJlZm9yZVRlc3RDYXNlSG9va0RlZmluaXRpb25zOiB0aGlzLmJ1aWxkVGVzdENhc2VIb29rRGVmaW5pdGlvbnMoXG4gICAgICAgIHRoaXMuYmVmb3JlVGVzdENhc2VIb29rRGVmaW5pdGlvbkNvbmZpZ3MsXG4gICAgICAgIGNhbm9uaWNhbElkcz8uYmVmb3JlVGVzdENhc2VIb29rRGVmaW5pdGlvbklkc1xuICAgICAgKSxcbiAgICAgIGJlZm9yZVRlc3RSdW5Ib29rRGVmaW5pdGlvbnM6IHRoaXMuYnVpbGRUZXN0UnVuSG9va0RlZmluaXRpb25zKFxuICAgICAgICB0aGlzLmJlZm9yZVRlc3RSdW5Ib29rRGVmaW5pdGlvbkNvbmZpZ3MsXG4gICAgICAgIGNhbm9uaWNhbElkcz8uYmVmb3JlVGVzdFJ1bkhvb2tEZWZpbml0aW9uSWRzXG4gICAgICApLFxuICAgICAgYmVmb3JlVGVzdFN0ZXBIb29rRGVmaW5pdGlvbnM6IHRoaXMuYnVpbGRUZXN0U3RlcEhvb2tEZWZpbml0aW9ucyhcbiAgICAgICAgdGhpcy5iZWZvcmVUZXN0U3RlcEhvb2tEZWZpbml0aW9uQ29uZmlnc1xuICAgICAgKSxcbiAgICAgIGRlZmF1bHRUaW1lb3V0OiB0aGlzLmRlZmF1bHRUaW1lb3V0LFxuICAgICAgcGFyYW1ldGVyVHlwZVJlZ2lzdHJ5OiB0aGlzLnBhcmFtZXRlclR5cGVSZWdpc3RyeSxcbiAgICAgIHVuZGVmaW5lZFBhcmFtZXRlclR5cGVzOiBzdGVwRGVmaW5pdGlvbnNSZXN1bHQudW5kZWZpbmVkUGFyYW1ldGVyVHlwZXMsXG4gICAgICBzdGVwRGVmaW5pdGlvbnM6IHN0ZXBEZWZpbml0aW9uc1Jlc3VsdC5zdGVwRGVmaW5pdGlvbnMsXG4gICAgICBXb3JsZDogdGhpcy5Xb3JsZCxcbiAgICAgIHBhcmFsbGVsQ2FuQXNzaWduOiB0aGlzLnBhcmFsbGVsQ2FuQXNzaWduLFxuICAgIH1cbiAgfVxuXG4gIHJlc2V0KFxuICAgIGN3ZDogc3RyaW5nLFxuICAgIG5ld0lkOiBJZEdlbmVyYXRvci5OZXdJZCxcbiAgICBvcmlnaW5hbENvb3JkaW5hdGVzOiBJU3VwcG9ydENvZGVDb29yZGluYXRlcyA9IHtcbiAgICAgIHJlcXVpcmVNb2R1bGVzOiBbXSxcbiAgICAgIHJlcXVpcmVQYXRoczogW10sXG4gICAgICBpbXBvcnRQYXRoczogW10sXG4gICAgICBsb2FkZXJzOiBbXSxcbiAgICB9XG4gICk6IHZvaWQge1xuICAgIHRoaXMuY3dkID0gY3dkXG4gICAgdGhpcy5uZXdJZCA9IG5ld0lkXG4gICAgdGhpcy5vcmlnaW5hbENvb3JkaW5hdGVzID0gb3JpZ2luYWxDb29yZGluYXRlc1xuICAgIHRoaXMuYWZ0ZXJUZXN0Q2FzZUhvb2tEZWZpbml0aW9uQ29uZmlncyA9IFtdXG4gICAgdGhpcy5hZnRlclRlc3RSdW5Ib29rRGVmaW5pdGlvbkNvbmZpZ3MgPSBbXVxuICAgIHRoaXMuYWZ0ZXJUZXN0U3RlcEhvb2tEZWZpbml0aW9uQ29uZmlncyA9IFtdXG4gICAgdGhpcy5iZWZvcmVUZXN0Q2FzZUhvb2tEZWZpbml0aW9uQ29uZmlncyA9IFtdXG4gICAgdGhpcy5iZWZvcmVUZXN0UnVuSG9va0RlZmluaXRpb25Db25maWdzID0gW11cbiAgICB0aGlzLmJlZm9yZVRlc3RTdGVwSG9va0RlZmluaXRpb25Db25maWdzID0gW11cbiAgICB0aGlzLmRlZmluaXRpb25GdW5jdGlvbldyYXBwZXIgPSBudWxsXG4gICAgdGhpcy5kZWZpbml0aW9uT3JkZXIgPSAwXG4gICAgdGhpcy5kZWZhdWx0VGltZW91dCA9IDUwMDBcbiAgICB0aGlzLnBhcmFtZXRlclR5cGVSZWdpc3RyeSA9IG5ldyBTb3VyY2VkUGFyYW1ldGVyVHlwZVJlZ2lzdHJ5KClcbiAgICB0aGlzLnN0ZXBEZWZpbml0aW9uQ29uZmlncyA9IFtdXG4gICAgdGhpcy5wYXJhbGxlbENhbkFzc2lnbiA9ICgpID0+IHRydWVcbiAgICB0aGlzLldvcmxkID0gV29ybGRcbiAgICB0aGlzLnN0YXR1cyA9ICdPUEVOJ1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBTdXBwb3J0Q29kZUxpYnJhcnlCdWlsZGVyKClcbiJdfQ==
@@ -11,4 +11,4 @@ function atMostOnePicklePerTag(tagNames) {
11
11
  });
12
12
  };
13
13
  }
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYWxsZWxfY2FuX2Fzc2lnbl9oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N1cHBvcnRfY29kZV9saWJyYXJ5X2J1aWxkZXIvcGFyYWxsZWxfY2FuX2Fzc2lnbl9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBT0Esc0RBTUM7QUFWRCxTQUFTLE1BQU0sQ0FBQyxNQUF1QixFQUFFLE9BQWU7SUFDdEQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQTtBQUNwRCxDQUFDO0FBRUQsU0FBZ0IscUJBQXFCLENBQUMsUUFBa0I7SUFDdEQsT0FBTyxDQUFDLFVBQTJCLEVBQUUsVUFBNkIsRUFBRSxFQUFFO1FBQ3BFLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2hDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO1FBQ3JGLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlICogYXMgbWVzc2FnZXMgZnJvbSAnQGN1Y3VtYmVyL21lc3NhZ2VzJ1xuaW1wb3J0IHR5cGUgeyBQYXJhbGxlbEFzc2lnbm1lbnRWYWxpZGF0b3IgfSBmcm9tICcuL3R5cGVzJ1xuXG5mdW5jdGlvbiBoYXNUYWcocGlja2xlOiBtZXNzYWdlcy5QaWNrbGUsIHRhZ05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gcGlja2xlLnRhZ3Muc29tZSgodCkgPT4gdC5uYW1lID09PSB0YWdOYW1lKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXRNb3N0T25lUGlja2xlUGVyVGFnKHRhZ05hbWVzOiBzdHJpbmdbXSk6IFBhcmFsbGVsQXNzaWdubWVudFZhbGlkYXRvciB7XG4gIHJldHVybiAoaW5RdWVzdGlvbjogbWVzc2FnZXMuUGlja2xlLCBpblByb2dyZXNzOiBtZXNzYWdlcy5QaWNrbGVbXSkgPT4ge1xuICAgIHJldHVybiB0YWdOYW1lcy5ldmVyeSgodGFnTmFtZSkgPT4ge1xuICAgICAgcmV0dXJuICFoYXNUYWcoaW5RdWVzdGlvbiwgdGFnTmFtZSkgfHwgaW5Qcm9ncmVzcy5ldmVyeSgocCkgPT4gIWhhc1RhZyhwLCB0YWdOYW1lKSlcbiAgICB9KVxuICB9XG59XG4iXX0=
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYWxsZWxfY2FuX2Fzc2lnbl9oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N1cHBvcnRfY29kZV9saWJyYXJ5X2J1aWxkZXIvcGFyYWxsZWxfY2FuX2Fzc2lnbl9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBT0Esc0RBTUM7QUFWRCxTQUFTLE1BQU0sQ0FBQyxNQUFjLEVBQUUsT0FBZTtJQUM3QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFBO0FBQ3BELENBQUM7QUFFRCxTQUFnQixxQkFBcUIsQ0FBQyxRQUFrQjtJQUN0RCxPQUFPLENBQUMsVUFBa0IsRUFBRSxVQUFvQixFQUFFLEVBQUU7UUFDbEQsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDaEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7UUFDckYsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQaWNrbGUgfSBmcm9tICdAY3VjdW1iZXIvbWVzc2FnZXMnXG5pbXBvcnQgdHlwZSB7IFBhcmFsbGVsQXNzaWdubWVudFZhbGlkYXRvciB9IGZyb20gJy4vdHlwZXMnXG5cbmZ1bmN0aW9uIGhhc1RhZyhwaWNrbGU6IFBpY2tsZSwgdGFnTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBwaWNrbGUudGFncy5zb21lKCh0KSA9PiB0Lm5hbWUgPT09IHRhZ05hbWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdE1vc3RPbmVQaWNrbGVQZXJUYWcodGFnTmFtZXM6IHN0cmluZ1tdKTogUGFyYWxsZWxBc3NpZ25tZW50VmFsaWRhdG9yIHtcbiAgcmV0dXJuIChpblF1ZXN0aW9uOiBQaWNrbGUsIGluUHJvZ3Jlc3M6IFBpY2tsZVtdKSA9PiB7XG4gICAgcmV0dXJuIHRhZ05hbWVzLmV2ZXJ5KCh0YWdOYW1lKSA9PiB7XG4gICAgICByZXR1cm4gIWhhc1RhZyhpblF1ZXN0aW9uLCB0YWdOYW1lKSB8fCBpblByb2dyZXNzLmV2ZXJ5KChwKSA9PiAhaGFzVGFnKHAsIHRhZ05hbWUpKVxuICAgIH0pXG4gIH1cbn1cbiJdfQ==