@datagrok-libraries/utils 4.6.2 → 4.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "email": "aparamonov@datagrok.ai"
9
9
  },
10
10
  "fullName": "Utils",
11
- "version": "4.6.2",
11
+ "version": "4.6.3",
12
12
  "description": "Common utilities",
13
13
  "dependencies": {
14
14
  "cash-dom": "^8.1.1",
package/src/test.d.ts CHANGED
@@ -19,6 +19,22 @@ export interface TestOptions {
19
19
  owner?: string;
20
20
  tags?: string[];
21
21
  }
22
+ export interface TestResult {
23
+ date: string;
24
+ category: string;
25
+ name: string;
26
+ success: boolean;
27
+ result: any;
28
+ ms: number;
29
+ skipped: boolean;
30
+ logs: string;
31
+ owner: string;
32
+ package: string;
33
+ flaking: boolean;
34
+ }
35
+ export interface TestResultExtended extends TestResult {
36
+ widgetsDifference: number;
37
+ }
22
38
  export interface CategoryOptions {
23
39
  clear?: boolean;
24
40
  timeout?: number;
@@ -77,16 +93,7 @@ export declare function category(category: string, tests_: () => void, options?:
77
93
  export declare function before(before: () => Promise<void>): void;
78
94
  export declare function after(after: () => Promise<void>): void;
79
95
  export declare function initAutoTests(package_: DG.Package, module?: any): Promise<void>;
80
- export declare function runTests(options?: TestExecutionOptions): Promise<{
81
- category?: string | undefined;
82
- name?: string | undefined;
83
- success: boolean;
84
- result: string;
85
- ms: number;
86
- skipped: boolean;
87
- logs?: string | undefined;
88
- owner?: string | undefined;
89
- }[]>;
96
+ export declare function runTests(options?: TestExecutionOptions): Promise<TestResultExtended[]>;
90
97
  export declare function shuffle(array: any[]): any[];
91
98
  export declare function delay(ms: number): Promise<void>;
92
99
  export declare function awaitCheck(checkHandler: () => boolean, error?: string, wait?: number, interval?: number): Promise<any>;
package/src/test.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":"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"}
package/src/test.js CHANGED
@@ -234,18 +234,12 @@ function addNamespace(s, f) {
234
234
  return s.replace(new RegExp(f.name, 'gi'), f.nqName);
235
235
  }
236
236
  export function initAutoTests(package_, module) {
237
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
237
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
238
238
  return __awaiter(this, void 0, void 0, function* () {
239
239
  const packageId = package_.id;
240
240
  if (wasRegistered[packageId])
241
241
  return;
242
242
  const moduleTests = module ? module.tests : tests;
243
- if (moduleTests[autoTestsCatName] !== undefined ||
244
- moduleTests[demoCatName] !== undefined ||
245
- Object.keys(moduleTests).find((c) => c.startsWith(autoTestsCatName) || c.startsWith(coreCatName))) {
246
- wasRegistered[packageId] = true;
247
- return;
248
- }
249
243
  if (package_.name === 'DevTools' || (!!module && module._package.name === 'DevTools')) {
250
244
  for (const f of window.dartTests) {
251
245
  const arr = f.name.split(/\s*\|\s*!/g);
@@ -283,19 +277,21 @@ export function initAutoTests(package_, module) {
283
277
  else if (arr[0].startsWith('timeout'))
284
278
  map['timeout'] = parseInt(arr[4]);
285
279
  });
286
- const test = new Test(autoTestsCatName, tests.length === 1 ? f.name : `${f.name} ${i + 1}`, () => __awaiter(this, void 0, void 0, function* () {
280
+ const test = new Test((_h = map.cat) !== null && _h !== void 0 ? _h : autoTestsCatName, tests.length === 1 ? f.name : `${f.name} ${i + 1}`, () => __awaiter(this, void 0, void 0, function* () {
287
281
  const res = yield grok.functions.eval(addNamespace(tests[i], f));
288
282
  if (map.wait)
289
283
  yield delay(map.wait);
290
284
  // eslint-disable-next-line no-throw-literal
291
285
  if (typeof res === 'boolean' && !res)
292
286
  throw `Failed: ${tests[i]}, expected true, got ${res}`;
293
- }), { skipReason: map.skip, timeout: DG.Test.isInBenchmark ? (_h = map.benchmarkTimeout) !== null && _h !== void 0 ? _h : BENCHMARK_TIMEOUT : (_j = map.timeout) !== null && _j !== void 0 ? _j : STANDART_TIMEOUT });
287
+ }), { skipReason: map.skip, timeout: DG.Test.isInBenchmark ? (_j = map.benchmarkTimeout) !== null && _j !== void 0 ? _j : BENCHMARK_TIMEOUT : (_k = map.timeout) !== null && _k !== void 0 ? _k : STANDART_TIMEOUT });
294
288
  if (map.cat) {
295
- const cat = autoTestsCatName + ': ' + map.cat;
296
- test.category = cat;
289
+ const cat = map.cat;
297
290
  if (moduleTests[cat] === undefined)
298
291
  moduleTests[cat] = { tests: [], clear: true };
292
+ // only before/after can be defined in ts files tests under the category
293
+ if (!moduleTests[cat].tests)
294
+ moduleTests[cat].tests = [];
299
295
  moduleTests[cat].tests.push(test);
300
296
  }
301
297
  else
@@ -394,7 +390,7 @@ export function runTests(options) {
394
390
  return results;
395
391
  function invokeCategoryMethod(method, category) {
396
392
  return __awaiter(this, void 0, void 0, function* () {
397
- var invokationResult = undefined;
393
+ let invokationResult = undefined;
398
394
  try {
399
395
  if (method !== undefined) {
400
396
  yield timeout(() => __awaiter(this, void 0, void 0, function* () {
@@ -440,7 +436,7 @@ export function runTests(options) {
440
436
  // if (isGBEnable)
441
437
  // await (window as any).gc();
442
438
  if (testRun)
443
- res.push(Object.assign(Object.assign({}, testRun), { widgetsDelta: getWidgetsCountSafe() - widgetsBefore }));
439
+ res.push(Object.assign(Object.assign({}, testRun), { widgetsDifference: getWidgetsCountSafe() - widgetsBefore }));
444
440
  // res.push({ ...testRun, memoryDelta: (window?.performance as any)?.memory?.usedJSHeapSize - memoryUsageBefore, widgetsDelta: getWidgetsCountSafe() - widgetsBefore });
445
441
  grok.shell.closeAll();
446
442
  DG.Balloon.closeAll();
@@ -506,7 +502,7 @@ export function runTests(options) {
506
502
  let res;
507
503
  if (value.beforeStatus) {
508
504
  res = Array.from(t.map((testElem) => {
509
- return { date: new Date().toISOString(), logs: '', category: key, name: testElem.name, result: 'before() failed', success: false, ms: 0, skipped: false };
505
+ return { date: new Date().toISOString(), category: key, name: testElem.name, success: false, result: 'before() failed', ms: 0, skipped: false, logs: '', owner: package_ === null || package_ === void 0 ? void 0 : package_.packageOwner, package: package_.name, widgetsDifference: 0, flaking: DG.Test.isReproducing };
510
506
  }));
511
507
  res.forEach((test) => __awaiter(this, void 0, void 0, function* () { return reportTest('package', test); }));
512
508
  }
@@ -519,9 +515,9 @@ export function runTests(options) {
519
515
  // grok.shell.closeAll();
520
516
  // DG.Balloon.closeAll();
521
517
  if (value.afterStatus)
522
- data.push({ date: new Date().toISOString(), logs: '', category: key, name: 'after', result: value.afterStatus, success: false, ms: 0, skipped: false });
518
+ data.push({ date: new Date().toISOString(), category: key, name: 'after', success: false, result: value.afterStatus, ms: 0, skipped: false, logs: '', owner: package_ === null || package_ === void 0 ? void 0 : package_.packageOwner, package: package_.name, widgetsDifference: 0, flaking: DG.Test.isReproducing });
523
519
  if (value.beforeStatus)
524
- data.push({ date: new Date().toISOString(), logs: '', category: key, name: 'before', result: value.beforeStatus, success: false, ms: 0, skipped: false });
520
+ data.push({ date: new Date().toISOString(), category: key, name: 'before', success: false, result: value.beforeStatus, ms: 0, skipped: false, logs: '', owner: package_ === null || package_ === void 0 ? void 0 : package_.packageOwner, package: package_.name, widgetsDifference: 0, flaking: DG.Test.isReproducing });
525
521
  results.push(...data);
526
522
  }
527
523
  }
@@ -536,12 +532,15 @@ export function runTests(options) {
536
532
  date: new Date().toISOString(),
537
533
  category: 'Unhandled exceptions',
538
534
  name: 'Exception',
539
- result: error !== null && error !== void 0 ? error : '', success: !error, ms: 0, skipped: false,
540
- 'flaking': DG.Test.isReproducing && !error,
535
+ result: error !== null && error !== void 0 ? error : '',
536
+ success: !error,
537
+ ms: 0,
538
+ skipped: false,
541
539
  owner: packageOwner !== null && packageOwner !== void 0 ? packageOwner : '',
542
- 'package': package_.name
540
+ 'package': package_.name,
541
+ widgetsDifference: 0
543
542
  };
544
- results.push(params);
543
+ results.push(Object.assign(Object.assign({}, params), { 'flaking': DG.Test.isReproducing && !error }));
545
544
  params.package = package_.name;
546
545
  yield reportTest('package', params);
547
546
  }
@@ -568,7 +567,7 @@ function getResult(x) {
568
567
  });
569
568
  }
570
569
  function execTest(t, predicate, logs, testTimeout, packageName, verbose) {
571
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
570
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
572
571
  return __awaiter(this, void 0, void 0, function* () {
573
572
  logs.length = 0;
574
573
  let r;
@@ -587,12 +586,12 @@ function execTest(t, predicate, logs, testTimeout, packageName, verbose) {
587
586
  const startDate = new Date(start).toISOString();
588
587
  try {
589
588
  if (skip)
590
- r = { date: startDate, success: true, result: skipReason, ms: 0, skipped: true, package: packageName };
589
+ r = { name: t.name, owner: (_e = (_d = t.options) === null || _d === void 0 ? void 0 : _d.owner) !== null && _e !== void 0 ? _e : '', category: t.category, logs: '', date: startDate, success: true, result: skipReason, ms: 0, skipped: true, package: packageName !== null && packageName !== void 0 ? packageName : '', flaking: DG.Test.isReproducing };
591
590
  else {
592
591
  let timeout_ = testTimeout !== null && testTimeout !== void 0 ? testTimeout : STANDART_TIMEOUT;
593
592
  if (DG.Test.isProfiling)
594
593
  console.profile(`${t.category}: ${t.name}`);
595
- r = { date: startDate, success: true, result: (_d = yield timeout(t.test, timeout_)) !== null && _d !== void 0 ? _d : 'OK', ms: 0, skipped: false, package: packageName };
594
+ r = { name: t.name, owner: (_g = (_f = t.options) === null || _f === void 0 ? void 0 : _f.owner) !== null && _g !== void 0 ? _g : '', category: t.category, logs: '', date: startDate, success: true, result: (_h = yield timeout(t.test, timeout_)) !== null && _h !== void 0 ? _h : 'OK', ms: 0, skipped: false, package: packageName !== null && packageName !== void 0 ? packageName : '', flaking: DG.Test.isReproducing };
596
595
  if (DG.Test.isProfiling) {
597
596
  console.profileEnd(`${t.category}: ${t.name}`);
598
597
  grok.shell.info(`Profiling of ${t.category}: ${t.name} finished \n Please ensure that you have opened DevTools (F12) / Performance panel before test starts.`);
@@ -601,9 +600,9 @@ function execTest(t, predicate, logs, testTimeout, packageName, verbose) {
601
600
  }
602
601
  catch (x) {
603
602
  stdError(x);
604
- r = { date: startDate, success: false, result: yield getResult(x), ms: 0, skipped: false, package: packageName };
603
+ r = { name: t.name, owner: (_k = (_j = t.options) === null || _j === void 0 ? void 0 : _j.owner) !== null && _k !== void 0 ? _k : '', category: t.category, logs: '', date: startDate, success: false, result: yield getResult(x), ms: 0, skipped: false, package: packageName !== null && packageName !== void 0 ? packageName : '', flaking: false };
605
604
  }
606
- if (((_e = t.options) === null || _e === void 0 ? void 0 : _e.isAggregated) && r.result.constructor === DG.DataFrame) {
605
+ if (((_l = t.options) === null || _l === void 0 ? void 0 : _l.isAggregated) && r.result.constructor === DG.DataFrame) {
607
606
  const col = r.result.col('success');
608
607
  if (col)
609
608
  r.success = col.stats.sum === col.length;
@@ -621,20 +620,20 @@ function execTest(t, predicate, logs, testTimeout, packageName, verbose) {
621
620
  stdLog(`Finished ${t.category} ${t.name} for ${r.ms} ms`);
622
621
  r.category = t.category;
623
622
  r.name = t.name;
624
- r.owner = (_g = (_f = t.options) === null || _f === void 0 ? void 0 : _f.owner) !== null && _g !== void 0 ? _g : '';
623
+ r.owner = (_o = (_m = t.options) === null || _m === void 0 ? void 0 : _m.owner) !== null && _o !== void 0 ? _o : '';
625
624
  if (!filter) {
626
625
  let params = {
627
626
  'success': r.success, 'result': r.result, 'ms': r.ms, 'date': r.date,
628
627
  'skipped': r.skipped, 'category': t.category, 'name': t.name, 'logs': r.logs, 'owner': r.owner,
629
628
  'flaking': DG.Test.isReproducing && r.success,
630
- 'timeoutWarning': DG.Test.isInBenchmark && (((_h = t.options) === null || _h === void 0 ? void 0 : _h.benchmarkWarnTimeout) && r.ms > ((_j = t.options) === null || _j === void 0 ? void 0 : _j.benchmarkWarnTimeout))
629
+ 'package': r.package
631
630
  };
632
631
  if (r.result.constructor == Object) {
633
632
  const res = Object.keys(r.result).reduce((acc, k) => (Object.assign(Object.assign({}, acc), { ['result.' + k]: r.result[k] })), {});
634
633
  params = Object.assign(Object.assign({}, params), res);
635
634
  }
636
635
  if (params.result instanceof DG.DataFrame)
637
- params.result = JSON.stringify((_k = params.result) === null || _k === void 0 ? void 0 : _k.toJson()) || '';
636
+ params.result = JSON.stringify((_p = params.result) === null || _p === void 0 ? void 0 : _p.toJson()) || '';
638
637
  yield reportTest(type, params);
639
638
  }
640
639
  return r;
@@ -645,7 +644,6 @@ export function shuffle(array) {
645
644
  newArr.sort(() => Math.random() - 0.5);
646
645
  return newArr;
647
646
  }
648
- ;
649
647
  /* Waits [ms] milliseconds */
650
648
  export function delay(ms) {
651
649
  return __awaiter(this, void 0, void 0, function* () {
@@ -781,4 +779,4 @@ export function testViewer(v, df, options) {
781
779
  }
782
780
  });
783
781
  }
784
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRJLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0FBQy9CLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDO0FBRW5DLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRTdDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FFZCxFQUFFLENBQUM7QUFFUCxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQztBQUN0QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDM0IsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7QUFDckMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQzNCLE1BQU0sYUFBYSxHQUErQixFQUFFLENBQUM7QUFDckQsTUFBTSxDQUFDLElBQUksZUFBdUIsQ0FBQztBQUVuQyxNQUFNLEtBQVcsTUFBTSxDQUt0QjtBQUxE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QUFNLENBQUMsRUFBRTtnQkFDbkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3JDLE1BQU0sR0FBRyxHQUFJLEtBQUssQ0FBQyxDQUFDLENBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQy9DLE1BQU0sR0FBRyxHQUFnRyxFQUFFLENBQUM7b0JBQzVHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7d0JBQzlCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7NEJBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs2QkFDL0MsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQzs0QkFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzZCQUM5RCxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDOzRCQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7NkJBQ2xELElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7NEJBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDM0UsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcs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TUFBTSxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsT0FBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQzVHO1lBRUQsNkJBQTZCO1lBQzdCLE1BQU0sa0JBQWtCLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDckYsSUFBSSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsV0FBVztnQkFDdEIsTUFBTSxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsT0FBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBRTlHO2dCQUFTO1lBQ1IsaURBQWlEO1lBQ2pELHlCQUF5QjtZQUN6Qix5QkFBeUI7U0FDMUI7O0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0ZXN0RGF0YSB9IGZyb20gJy4vZGF0YWZyYW1lLXV0aWxzJztcbmltcG9ydCBUaW1lb3V0ID0gTm9kZUpTLlRpbWVvdXQ7XG5pbXBvcnQgeyBjaGFuZ2VPcHRpb25zU2F2ZUxheW91dCwgZmlsdGVyQXN5bmMsIGxvYWRMYXlvdXQsIHNlbGVjdEZpbHRlckNoYW5nZUN1cnJlbnQsIHRlc3RWaWV3ZXJJbnRlcm5hbCB9IGZyb20gJy4vdGVzdC12aWV3ZXItdXRpbHMnO1xuXG5jb25zdCBTVEFOREFSVF9USU1FT1VUID0gMzAwMDA7XG5jb25zdCBCRU5DSE1BUktfVElNRU9VVCA9IDEwODAwMDAwO1xuXG5jb25zdCBzdGRMb2cgPSBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpO1xuY29uc3Qgc3RkSW5mbyA9IGNvbnNvbGUuaW5mby5iaW5kKGNvbnNvbGUpO1xuY29uc3Qgc3RkV2FybiA9IGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO1xuY29uc3Qgc3RkRXJyb3IgPSBjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSk7XG5cbmV4cG9ydCBjb25zdCB0ZXN0czoge1xuICBba2V5OiBzdHJpbmddOiBDYXRlZ29yeVxufSA9IHt9O1xuXG5jb25zdCBhdXRvVGVzdHNDYXROYW1lID0gJ0F1dG8gVGVzdHMnO1xuY29uc3QgZGVtb0NhdE5hbWUgPSAnRGVtbyc7XG5jb25zdCBkZXRlY3RvcnNDYXROYW1lID0gJ0RldGVjdG9ycyc7XG5jb25zdCBjb3JlQ2F0TmFtZSA9ICdDb3JlJztcbmNvbnN0IHdhc1JlZ2lzdGVyZWQ6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG5leHBvcnQgbGV0IGN1cnJlbnRDYXRlZ29yeTogc3RyaW5nO1xuXG5leHBvcnQgbmFtZXNwYWNlIGFzc3VyZSB7XG4gIGV4cG9ydCBmdW5jdGlvbiBub3ROdWxsKHZhbHVlOiBhbnksIG5hbWU/OiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lID09IG51bGwgPyAnVmFsdWUnIDogbmFtZX0gbm90IGRlZmluZWRgKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RPcHRpb25zIHtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgYmVuY2htYXJrV2FyblRpbWVvdXQ/OiBudW1iZXI7XG4gIGJlbmNobWFya1RpbWVvdXQ/OiBudW1iZXI7XG4gIHVuaGFuZGxlZEV4Y2VwdGlvblRpbWVvdXQ/OiBudW1iZXI7XG4gIHNraXBSZWFzb24/OiBzdHJpbmc7XG4gIGlzQWdncmVnYXRlZD86IGJvb2xlYW47XG4gIGJlbmNobWFyaz86IGJvb2xlYW47XG4gIHN0cmVzc1Rlc3Q/OiBib29sZWFuO1xuICBvd25lcj86IHN0cmluZztcbiAgdGFncz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhdGVnb3J5T3B0aW9ucyB7XG4gIGNsZWFyPzogYm9vbGVhbjtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgYmVuY2htYXJrcz86IGJvb2xlYW47XG4gIHN0cmVzc1Rlc3RzPzogYm9vbGVhbjtcbiAgb3duZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBUZXN0Q29udGV4dCB7XG4gIHN0cmVzc1Rlc3Q/OiBib29sZWFuO1xuICBjYXRjaFVuaGFuZGxlZCA9IHRydWU7XG4gIHJlcG9ydCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKGNhdGNoVW5oYW5kbGVkPzogYm9vbGVhbiwgcmVwb3J0PzogYm9vbGVhbikge1xuICAgIGlmIChjYXRjaFVuaGFuZGxlZCAhPT0gdW5kZWZpbmVkKSB0aGlzLmNhdGNoVW5oYW5kbGVkID0gY2F0Y2hVbmhhbmRsZWQ7XG4gICAgaWYgKHJlcG9ydCAhPT0gdW5kZWZpbmVkKSB0aGlzLnJlcG9ydCA9IHJlcG9ydDtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIFRlc3Qge1xuICB0ZXN0OiAoKSA9PiBQcm9taXNlPGFueT47XG4gIG5hbWU6IHN0cmluZztcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgb3B0aW9ucz86IFRlc3RPcHRpb25zO1xuXG4gIGNvbnN0cnVjdG9yKGNhdGVnb3J5OiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdGVzdDogKCkgPT4gUHJvbWlzZTxhbnk+LCBvcHRpb25zPzogVGVzdE9wdGlvbnMpIHtcbiAgICB0aGlzLmNhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICBvcHRpb25zID8/PSB7fTtcbiAgICBvcHRpb25zLnRpbWVvdXQgPz89IFNUQU5EQVJUX1RJTUVPVVQ7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnRlc3QgPSBhc3luYyAoKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoREcuVGVzdC5pc0luRGVidWcpXG4gICAgICAgICAgICBkZWJ1Z2dlcjtcbiAgICAgICAgICBcbiAgICAgICAgICBsZXQgcmVzID0gYXdhaXQgdGVzdCgpO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXM/LnRvU3RyaW5nKCkgPz8gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhdGNoIChlKSB7IFxuICAgICAgICAgICAgcmVzdWx0ID0gJ0NhblxcJ3QgY29udmVydCB0ZXN0XFwncyByZXN1bHQgdG8gc3RyaW5nJztcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYENhblxcJ3QgY29udmVydCB0ZXN0XFwncyByZXN1bHQgdG8gc3RyaW5nIGluIHRoZSAke3RoaXMuY2F0ZWdvcnl9OiR7dGhpcy5uYW1lfSB0ZXN0YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2F0ZWdvcnkge1xuICB0ZXN0cz86IFRlc3RbXTtcbiAgYmVmb3JlPzogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgYWZ0ZXI/OiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIGJlZm9yZVN0YXR1cz86IHN0cmluZztcbiAgYWZ0ZXJTdGF0dXM/OiBzdHJpbmc7XG4gIGNsZWFyPzogYm9vbGVhbjtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgYmVuY2htYXJrcz86IGJvb2xlYW47XG4gIGJlbmNobWFya1RpbWVvdXQ/OiBudW1iZXI7XG4gIHN0cmVzc1Rlc3RzPzogYm9vbGVhbjtcbiAgb3duZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBUZXN0RXhlY3V0aW9uT3B0aW9ucyB7XG4gIGNhdGVnb3J5Pzogc3RyaW5nO1xuICB0ZXN0Pzogc3RyaW5nO1xuICB0ZXN0Q29udGV4dD86IFRlc3RDb250ZXh0O1xuICBleGNsdWRlPzogc3RyaW5nW107XG4gIHZlcmJvc2U/OiBib29sZWFuO1xuICBzdHJlc3NUZXN0PzogYm9vbGVhbjtcbiAgdGFncz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdEV2ZW50PFQ+KGV2ZW50OiBPYnNlcnZhYmxlPFQ+LFxuICBoYW5kbGVyOiAoYXJnczogVCkgPT4gdm9pZCwgdHJpZ2dlcjogKCkgPT4gdm9pZCwgbXM6IG51bWJlciA9IDAsIHJlYXNvbjogc3RyaW5nID0gYHRpbWVvdXRgXG4pOiBQcm9taXNlPGFueT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHN1YiA9IGV2ZW50LnN1YnNjcmliZSgoYXJnczogVCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaGFuZGxlcihhcmdzKTtcbiAgICAgICAgcmVzb2x2ZSgnT0snKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcHJvbWlzZS1yZWplY3QtZXJyb3JzXG4gICAgICByZWplY3QocmVhc29uKTtcbiAgICB9LCBtcyk7XG4gICAgdHJpZ2dlcigpO1xuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RFdmVudEFzeW5jPFQ+KGV2ZW50OiBPYnNlcnZhYmxlPFQ+LFxuICBoYW5kbGVyOiAoYXJnczogVCkgPT4gUHJvbWlzZTx2b2lkPiwgdHJpZ2dlcjogKCkgPT4gdm9pZCwgbXM6IG51bWJlciA9IDAsIHJlYXNvbjogc3RyaW5nID0gYHRpbWVvdXRgXG4pOiBQcm9taXNlPGFueT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHN1YiA9IGV2ZW50LnN1YnNjcmliZSgoYXJnczogVCkgPT4ge1xuICAgICAgaGFuZGxlcihhcmdzKS50aGVuKCgpID0+IHtcbiAgICAgICAgcmVzb2x2ZSgnT0snKTtcbiAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9yc1xuICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgfSwgbXMpO1xuICAgIHRyaWdnZXIoKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0KG5hbWU6IHN0cmluZywgdGVzdDogKCkgPT4gUHJvbWlzZTxhbnk+LCBvcHRpb25zPzogVGVzdE9wdGlvbnMpOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPSBbXTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyEucHVzaChuZXcgVGVzdChjdXJyZW50Q2F0ZWdvcnksIG5hbWUsIHRlc3QsIG9wdGlvbnMpKTtcbn1cblxuLyogVGVzdHMgdHdvIG9iamVjdHMgZm9yIGVxdWFsaXR5LCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZXkgYXJlIG5vdCBlcXVhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3QoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkgPSB0cnVlLCBlcnJvcj86IHN0cmluZyk6IHZvaWQge1xuICBpZiAoZXJyb3IpXG4gICAgZXJyb3IgPSBgJHtlcnJvcn0sIGA7XG4gIGVsc2UgZXJyb3IgPSAnJztcbiAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpXG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2Vycm9yfUV4cGVjdGVkIFwiJHtleHBlY3RlZH1cIiwgZ290IFwiJHthY3R1YWx9XCJgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdEZsb2F0KGFjdHVhbDogbnVtYmVyLCBleHBlY3RlZDogbnVtYmVyLCB0b2xlcmFuY2UgPSAwLjAwMSwgZXJyb3I/OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKChhY3R1YWwgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSB8fFxuICAgIChhY3R1YWwgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKSB8fFxuICAgIChhY3R1YWwgPT09IE51bWJlci5OYU4gJiYgZXhwZWN0ZWQgPT09IE51bWJlci5OYU4pIHx8IChpc05hTihhY3R1YWwpICYmIGlzTmFOKGV4cGVjdGVkKSkpXG4gICAgcmV0dXJuO1xuICBjb25zdCBhcmVFcXVhbCA9IE1hdGguYWJzKGFjdHVhbCAtIGV4cGVjdGVkKSA8IHRvbGVyYW5jZTtcbiAgZXhwZWN0KGFyZUVxdWFsLCB0cnVlLCBgJHtlcnJvciA/PyAnJ30gKHRvbGVyYW5jZSA9ICR7dG9sZXJhbmNlfSlgKTtcbiAgaWYgKCFhcmVFcXVhbClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXhwZWN0ZWR9LCBnb3QgJHthY3R1YWx9ICh0b2xlcmFuY2UgPSAke3RvbGVyYW5jZX0pYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RUYWJsZShhY3R1YWw6IERHLkRhdGFGcmFtZSwgZXhwZWN0ZWQ6IERHLkRhdGFGcmFtZSwgZXJyb3I/OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgZXhwZWN0ZWRSb3dDb3VudCA9IGV4cGVjdGVkLnJvd0NvdW50O1xuICBjb25zdCBhY3R1YWxSb3dDb3VudCA9IGFjdHVhbC5yb3dDb3VudDtcbiAgZXhwZWN0KGFjdHVhbFJvd0NvdW50LCBleHBlY3RlZFJvd0NvdW50LCBgJHtlcnJvciA/PyAnJ30sIHJvdyBjb3VudGApO1xuXG4gIGZvciAoY29uc3QgY29sdW1uIG9mIGV4cGVjdGVkLmNvbHVtbnMpIHtcbiAgICBjb25zdCBhY3R1YWxDb2x1bW4gPSBhY3R1YWwuY29sdW1ucy5ieU5hbWUoY29sdW1uLm5hbWUpO1xuICAgIGlmIChhY3R1YWxDb2x1bW4gPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uICR7Y29sdW1uLm5hbWV9IG5vdCBmb3VuZGApO1xuICAgIGlmIChhY3R1YWxDb2x1bW4udHlwZSAhPSBjb2x1bW4udHlwZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uICR7Y29sdW1uLm5hbWV9IHR5cGUgZXhwZWN0ZWQgJHtjb2x1bW4udHlwZX0gZ290ICR7YWN0dWFsQ29sdW1uLnR5cGV9YCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHBlY3RlZFJvd0NvdW50OyBpKyspIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY29sdW1uLmdldChpKTtcbiAgICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gYWN0dWFsQ29sdW1uLmdldChpKTtcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PSBERy5UWVBFLkZMT0FUKVxuICAgICAgICBleHBlY3RGbG9hdChhY3R1YWxWYWx1ZSwgdmFsdWUsIDAuMDAwMSwgZXJyb3IpO1xuICAgICAgZWxzZSBpZiAoY29sdW1uLnR5cGUgPT0gREcuVFlQRS5EQVRFX1RJTUUpXG4gICAgICAgIGV4cGVjdChhY3R1YWxWYWx1ZS5pc1NhbWUodmFsdWUpLCB0cnVlLCBlcnJvcik7XG4gICAgICBlbHNlXG4gICAgICAgIGV4cGVjdChhY3R1YWxWYWx1ZSwgdmFsdWUsIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdE9iamVjdChhY3R1YWw6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGV4cGVjdGVkOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XG4gIGZvciAoY29uc3QgW2V4cGVjdGVkS2V5LCBleHBlY3RlZFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhleHBlY3RlZCkpIHtcbiAgICBpZiAoIWFjdHVhbC5oYXNPd25Qcm9wZXJ0eShleHBlY3RlZEtleSkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHByb3BlcnR5IFwiJHtleHBlY3RlZEtleX1cIiBub3QgZm91bmRgKTtcblxuICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gYWN0dWFsW2V4cGVjdGVkS2V5XTtcbiAgICBpZiAoYWN0dWFsVmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZFZhbHVlIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICBleHBlY3RBcnJheShhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgZWxzZSBpZiAoYWN0dWFsVmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgZXhwZWN0ZWRWYWx1ZSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgIGV4cGVjdE9iamVjdChhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgZWxzZSBpZiAoTnVtYmVyLmlzRmluaXRlKGFjdHVhbFZhbHVlKSAmJiBOdW1iZXIuaXNGaW5pdGUoZXhwZWN0ZWRWYWx1ZSkpXG4gICAgICBleHBlY3RGbG9hdChhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgZWxzZSBpZiAoYWN0dWFsVmFsdWUgIT0gZXhwZWN0ZWRWYWx1ZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgKCR7ZXhwZWN0ZWRWYWx1ZX0pIGZvciBrZXkgJyR7ZXhwZWN0ZWRLZXl9JywgZ290ICgke2FjdHVhbFZhbHVlfSlgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0QXJyYXkoYWN0dWFsOiBBcnJheUxpa2U8YW55PiwgZXhwZWN0ZWQ6IEFycmF5TGlrZTxhbnk+KSB7XG4gIGNvbnN0IGFjdHVhbExlbmd0aCA9IGFjdHVhbC5sZW5ndGg7XG4gIGNvbnN0IGV4cGVjdGVkTGVuZ3RoID0gZXhwZWN0ZWQubGVuZ3RoO1xuXG4gIGlmIChhY3R1YWxMZW5ndGggIT0gZXhwZWN0ZWRMZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5cyBhcmUgb2YgZGlmZmVyZW50IGxlbmd0aDogYWN0dWFsIGFycmF5IGxlbmd0aCBpcyAke2FjdHVhbExlbmd0aH0gYCArXG4gICAgICBgYW5kIGV4cGVjdGVkIGFycmF5IGxlbmd0aCBpcyAke2V4cGVjdGVkTGVuZ3RofWApO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWxMZW5ndGg7IGkrKykge1xuICAgIGlmIChhY3R1YWxbaV0gaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgZXhwZWN0QXJyYXkoYWN0dWFsW2ldLCBleHBlY3RlZFtpXSk7XG4gICAgZWxzZSBpZiAoYWN0dWFsW2ldIGluc3RhbmNlb2YgT2JqZWN0ICYmIGV4cGVjdGVkW2ldIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgICAgZXhwZWN0T2JqZWN0KGFjdHVhbFtpXSwgZXhwZWN0ZWRbaV0pO1xuICAgIGVsc2UgaWYgKGFjdHVhbFtpXSAhPSBleHBlY3RlZFtpXSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtleHBlY3RlZFtpXX0gYXQgcG9zaXRpb24gJHtpfSwgZ290ICR7YWN0dWFsW2ldfWApO1xuICB9XG59XG5cbi8qIERlZmluZXMgYSB0ZXN0IHN1aXRlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhdGVnb3J5KGNhdGVnb3J5OiBzdHJpbmcsIHRlc3RzXzogKCkgPT4gdm9pZCwgb3B0aW9ucz86IENhdGVnb3J5T3B0aW9ucyk6IHZvaWQge1xuICBjdXJyZW50Q2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgdGVzdHNfKCk7XG4gIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldKSB7XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5jbGVhciA9IG9wdGlvbnM/LmNsZWFyID8/IHRydWU7XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50aW1lb3V0ID0gb3B0aW9ucz8udGltZW91dDtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmJlbmNobWFya3MgPSBvcHRpb25zPy5iZW5jaG1hcmtzO1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uc3RyZXNzVGVzdHMgPSBvcHRpb25zPy5zdHJlc3NUZXN0cztcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLm93bmVyID0gb3B0aW9ucz8ub3duZXI7XG4gIH1cbn1cblxuLyogRGVmaW5lcyBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYmVmb3JlKGJlZm9yZTogKCkgPT4gUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmJlZm9yZSA9IGJlZm9yZTtcbn1cblxuLyogRGVmaW5lcyBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSB0ZXN0cyBpbiB0aGlzIGNhdGVnb3J5IGFyZSBleGVjdXRlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZnRlcihhZnRlcjogKCkgPT4gUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmFmdGVyID0gYWZ0ZXI7XG59XG5cbmZ1bmN0aW9uIGFkZE5hbWVzcGFjZShzOiBzdHJpbmcsIGY6IERHLkZ1bmMpOiBzdHJpbmcge1xuICByZXR1cm4gcy5yZXBsYWNlKG5ldyBSZWdFeHAoZi5uYW1lLCAnZ2knKSwgZi5ucU5hbWUpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5pdEF1dG9UZXN0cyhwYWNrYWdlXzogREcuUGFja2FnZSwgbW9kdWxlPzogYW55KSB7XG4gIGNvbnN0IHBhY2thZ2VJZCA9IHBhY2thZ2VfLmlkO1xuICBpZiAod2FzUmVnaXN0ZXJlZFtwYWNrYWdlSWRdKSByZXR1cm47XG4gIGNvbnN0IG1vZHVsZVRlc3RzID0gbW9kdWxlID8gbW9kdWxlLnRlc3RzIDogdGVzdHM7XG4gIGlmIChtb2R1bGVUZXN0c1thdXRvVGVzdHNDYXROYW1lXSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgbW9kdWxlVGVzdHNbZGVtb0NhdE5hbWVdICE9PSB1bmRlZmluZWQgfHxcbiAgICBPYmplY3Qua2V5cyhtb2R1bGVUZXN0cykuZmluZCgoYykgPT4gYy5zdGFydHNXaXRoKGF1dG9UZXN0c0NhdE5hbWUpIHx8IGMuc3RhcnRzV2l0aChjb3JlQ2F0TmFtZSkpKSB7XG4gICAgd2FzUmVnaXN0ZXJlZFtwYWNrYWdlSWRdID0gdHJ1ZTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHBhY2thZ2VfLm5hbWUgPT09ICdEZXZUb29scycgfHwgKCEhbW9kdWxlICYmIG1vZHVsZS5fcGFja2FnZS5uYW1lID09PSAnRGV2VG9vbHMnKSkge1xuICAgIGZvciAoY29uc3QgZiBvZiAoPGFueT53aW5kb3cpLmRhcnRUZXN0cykge1xuICAgICAgY29uc3QgYXJyID0gZi5uYW1lLnNwbGl0KC9cXHMqXFx8XFxzKiEvZyk7XG4gICAgICBsZXQgbmFtZSA9IGFyci5wb3AoKSA/PyBmLm5hbWU7XG4gICAgICBsZXQgY2F0ID0gYXJyLmxlbmd0aCA/IGNvcmVDYXROYW1lICsgJzogJyArIGFyci5qb2luKCc6ICcpIDogY29yZUNhdE5hbWU7XG4gICAgICBsZXQgZnVsbE5hbWU6IHN0cmluZ1tdID0gbmFtZS5zcGxpdCgnIHwgJyk7XG4gICAgICBuYW1lID0gZnVsbE5hbWVbZnVsbE5hbWUubGVuZ3RoIC0gMV07XG4gICAgICBmdWxsTmFtZS51bnNoaWZ0KGNhdCk7XG4gICAgICBmdWxsTmFtZS5wb3AoKTtcbiAgICAgIGNhdCA9IGZ1bGxOYW1lLmpvaW4oJzogJyk7XG4gICAgICBpZiAobW9kdWxlVGVzdHNbY2F0XSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICBtb2R1bGVUZXN0c1tjYXRdID0geyB0ZXN0czogW10sIGNsZWFyOiB0cnVlIH07XG4gICAgICBtb2R1bGVUZXN0c1tjYXRdLnRlc3RzLnB1c2gobmV3IFRlc3QoY2F0LCBuYW1lLCBmLnRlc3QsIHsgaXNBZ2dyZWdhdGVkOiBmYWxzZSwgdGltZW91dDogZi5vcHRpb25zPy50aW1lb3V0ID8/IFNUQU5EQVJUX1RJTUVPVVQsIHNraXBSZWFzb246IGYub3B0aW9ucz8uc2tpcFJlYXNvbiwgb3duZXI6IGYub3B0aW9ucz8ub3duZXIsIGJlbmNobWFyazogZi5vcHRpb25zPy5iZW5jaG1hcmsgPz8gZmFsc2UgfSkpO1xuICAgIH1cbiAgfVxuICBjb25zdCBtb2R1bGVBdXRvVGVzdHMgPSBbXTtcbiAgY29uc3QgbW9kdWxlRGVtbyA9IFtdO1xuICBjb25zdCBtb2R1bGVEZXRlY3RvcnMgPSBbXTtcbiAgY29uc3QgcGFja0Z1bmN0aW9ucyA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuZmlsdGVyKGBwYWNrYWdlLmlkID0gXCIke3BhY2thZ2VJZH1cImApLmxpc3QoKTtcbiAgY29uc3QgcmVnID0gbmV3IFJlZ0V4cCgvc2tpcDpcXHMqKFteLFxcc10rKXx3YWl0OlxccyooXFxkKyl8Y2F0OlxccyooW14sXFxzXSspfHRpbWVvdXQ6XFxzKihcXGQrKS9nKTtcbiAgZm9yIChjb25zdCBmIG9mIHBhY2tGdW5jdGlvbnMpIHtcbiAgICBjb25zdCB0ZXN0cyA9IGYub3B0aW9uc1sndGVzdCddO1xuICAgIGNvbnN0IGRlbW8gPSBmLm9wdGlvbnNbJ2RlbW9QYXRoJ107XG4gICAgaWYgKCh0ZXN0cyAmJiBBcnJheS5pc0FycmF5KHRlc3RzKSAmJiB0ZXN0cy5sZW5ndGgpKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9ICh0ZXN0c1tpXSBhcyBzdHJpbmcpLm1hdGNoQWxsKHJlZyk7XG4gICAgICAgIGNvbnN0IG1hcDogeyBza2lwPzogc3RyaW5nLCB3YWl0PzogbnVtYmVyLCBjYXQ/OiBzdHJpbmcsIHRpbWVvdXQ/OiBudW1iZXIsIGJlbmNobWFya1RpbWVvdXQ/OiBudW1iZXIgfSA9IHt9O1xuICAgICAgICBBcnJheS5mcm9tKHJlcykuZm9yRWFjaCgoYXJyKSA9PiB7XG4gICAgICAgICAgaWYgKGFyclswXS5zdGFydHNXaXRoKCdza2lwJykpIG1hcFsnc2tpcCddID0gYXJyWzFdO1xuICAgICAgICAgIGVsc2UgaWYgKGFyclswXS5zdGFydHNXaXRoKCd3YWl0JykpIG1hcFsnd2FpdCddID0gcGFyc2VJbnQoYXJyWzJdKTtcbiAgICAgICAgICBlbHNlIGlmIChhcnJbMF0uc3RhcnRzV2l0aCgnY2F0JykpIG1hcFsnY2F0J10gPSBhcnJbM107XG4gICAgICAgICAgZWxzZSBpZiAoYXJyWzBdLnN0YXJ0c1dpdGgoJ3RpbWVvdXQnKSkgbWFwWyd0aW1lb3V0J10gPSBwYXJzZUludChhcnJbNF0pO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdGVzdCA9IG5ldyBUZXN0KGF1dG9UZXN0c0NhdE5hbWUsIHRlc3RzLmxlbmd0aCA9PT0gMSA/IGYubmFtZSA6IGAke2YubmFtZX0gJHtpICsgMX1gLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZ3Jvay5mdW5jdGlvbnMuZXZhbChhZGROYW1lc3BhY2UodGVzdHNbaV0sIGYpKTtcbiAgICAgICAgICBpZiAobWFwLndhaXQpIGF3YWl0IGRlbGF5KG1hcC53YWl0KTtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICAgICAgICAgIGlmICh0eXBlb2YgcmVzID09PSAnYm9vbGVhbicgJiYgIXJlcykgdGhyb3cgYEZhaWxlZDogJHt0ZXN0c1tpXX0sIGV4cGVjdGVkIHRydWUsIGdvdCAke3Jlc31gO1xuICAgICAgICB9LCB7IHNraXBSZWFzb246IG1hcC5za2lwLCB0aW1lb3V0OiBERy5UZXN0LmlzSW5CZW5jaG1hcmsgPyBtYXAuYmVuY2htYXJrVGltZW91dCA/PyBCRU5DSE1BUktfVElNRU9VVCA6IG1hcC50aW1lb3V0ID8/IFNUQU5EQVJUX1RJTUVPVVQgfSk7XG4gICAgICAgIGlmIChtYXAuY2F0KSB7XG4gICAgICAgICAgY29uc3QgY2F0OiBzdHJpbmcgPSBhdXRvVGVzdHNDYXROYW1lICsgJzogJyArIG1hcC5jYXQ7XG4gICAgICAgICAgdGVzdC5jYXRlZ29yeSA9IGNhdDtcbiAgICAgICAgICBpZiAobW9kdWxlVGVzdHNbY2F0XSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgbW9kdWxlVGVzdHNbY2F0XSA9IHsgdGVzdHM6IFtdLCBjbGVhcjogdHJ1ZSB9O1xuICAgICAgICAgIG1vZHVsZVRlc3RzW2NhdF0udGVzdHMucHVzaCh0ZXN0KTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgbW9kdWxlQXV0b1Rlc3RzLnB1c2godGVzdCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkZW1vKSB7XG4gICAgICBjb25zdCB3YWl0ID0gZi5vcHRpb25zWydkZW1vV2FpdCddID8gcGFyc2VJbnQoZi5vcHRpb25zWydkZW1vV2FpdCddKSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHRlc3QgPSBuZXcgVGVzdChkZW1vQ2F0TmFtZSwgZi5mcmllbmRseU5hbWUsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgZGVsYXkoMzAwKTtcbiAgICAgICAgZ3Jvay5zaGVsbC5jbGVhckxhc3RFcnJvcigpO1xuICAgICAgICBhd2FpdCBmLmFwcGx5KCk7XG4gICAgICAgIGF3YWl0IGRlbGF5KHdhaXQgPyB3YWl0IDogMjAwMCk7XG4gICAgICAgIGNvbnN0IHVuaGFuZGxlZCA9IGF3YWl0IGdyb2suc2hlbGwubGFzdEVycm9yO1xuICAgICAgICBpZiAodW5oYW5kbGVkKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcih1bmhhbmRsZWQpO1xuICAgICAgfSwgeyBza2lwUmVhc29uOiBmLm9wdGlvbnNbJ2RlbW9Ta2lwJ10gfSk7XG4gICAgICBtb2R1bGVEZW1vLnB1c2godGVzdCk7XG4gICAgfVxuICAgIGlmIChmLmhhc1RhZygnc2VtVHlwZURldGVjdG9yJykpIHtcbiAgICAgIGxldCBkZXRlY3RvcnNUZXN0RGF0YSA9IHRlc3REYXRhO1xuICAgICAgaWYgKGYub3B0aW9uc1sndGVzdERhdGEnXSkge1xuICAgICAgICBkZXRlY3RvcnNUZXN0RGF0YSA9IGF3YWl0IGdyb2suZGF0YS5maWxlcy5vcGVuVGFibGUoYFN5c3RlbTpBcHBEYXRhLyR7cGFja2FnZV8ubnFOYW1lfS8ke2Yub3B0aW9uc1sndGVzdERhdGEnXX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGVzdCA9IG5ldyBUZXN0KGRldGVjdG9yc0NhdE5hbWUsIGYuZnJpZW5kbHlOYW1lLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgICBjb25zb2xlLmxvZyhgU3lzdGVtOkFwcERhdGEvJHtwYWNrYWdlXy5ucU5hbWV9LyR7Zi5vcHRpb25zWyd0ZXN0RGF0YSddfWApO1xuXG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIGRldGVjdG9yc1Rlc3REYXRhLmNsb25lKCkuY29sdW1ucykge1xuICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGYuYXBwbHkoW2NvbF0pO1xuICAgICAgICAgIGFyci5wdXNoKHJlcyB8fCBjb2wuc2VtVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzQXJyID0gYXJyLmZpbHRlcigoaSkgPT4gaSk7XG4gICAgICAgIGV4cGVjdChyZXNBcnIubGVuZ3RoLCAxKTtcblxuICAgICAgICBpZiAoZi5vcHRpb25zWyd0ZXN0RGF0YUNvbHVtbk5hbWUnXSlcbiAgICAgICAgICBleHBlY3QocmVzQXJyWzBdLCBmLm9wdGlvbnNbJ3Rlc3REYXRhQ29sdW1uTmFtZSddKTtcblxuICAgICAgfSwgeyBza2lwUmVhc29uOiBmLm9wdGlvbnNbJ3NraXBUZXN0J10gfSk7XG4gICAgICBtb2R1bGVEZXRlY3RvcnMucHVzaCh0ZXN0KTtcbiAgICB9XG4gIH1cbiAgd2FzUmVnaXN0ZXJlZFtwYWNrYWdlSWRdID0gdHJ1ZTtcbiAgaWYgKG1vZHVsZUF1dG9UZXN0cy5sZW5ndGggPiAwKVxuICAgIG1vZHVsZVRlc3RzW2F1dG9UZXN0c0NhdE5hbWVdID0geyB0ZXN0czogbW9kdWxlQXV0b1Rlc3RzLCBjbGVhcjogdHJ1ZSB9O1xuICBpZiAobW9kdWxlRGVtby5sZW5ndGggPiAwKVxuICAgIG1vZHVsZVRlc3RzW2RlbW9DYXROYW1lXSA9IHsgdGVzdHM6IG1vZHVsZURlbW8sIGNsZWFyOiB0cnVlIH07XG4gIGlmIChtb2R1bGVEZXRlY3RvcnMubGVuZ3RoID4gMClcbiAgICBtb2R1bGVUZXN0c1tkZXRlY3RvcnNDYXROYW1lXSA9IHsgdGVzdHM6IG1vZHVsZURldGVjdG9ycywgY2xlYXI6IGZhbHNlIH07XG59XG5cbmZ1bmN0aW9uIHJlZGVmaW5lQ29uc29sZSgpOiBhbnlbXSB7XG4gIGNvbnN0IGxvZ3M6IGFueVtdID0gW107XG4gIGNvbnNvbGUubG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICBsb2dzLnB1c2goLi4uYXJncyk7XG4gICAgc3RkTG9nKC4uLmFyZ3MpO1xuICB9O1xuICBjb25zb2xlLmluZm8gPSAoLi4uYXJncykgPT4ge1xuICAgIGxvZ3MucHVzaCguLi5hcmdzKTtcbiAgICBzdGRJbmZvKC4uLmFyZ3MpO1xuICB9O1xuICBjb25zb2xlLndhcm4gPSAoLi4uYXJncykgPT4ge1xuICAgIGxvZ3MucHVzaCguLi5hcmdzKTtcbiAgICBzdGRXYXJuKC4uLmFyZ3MpO1xuICB9O1xuICBjb25zb2xlLmVycm9yID0gKC4uLmFyZ3MpID0+IHtcbiAgICBsb2dzLnB1c2goLi4uYXJncyk7XG4gICAgc3RkRXJyb3IoLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiBsb2dzO1xufVxuXG5mdW5jdGlvbiByZXNldENvbnNvbGUoKTogdm9pZCB7XG4gIGNvbnNvbGUubG9nID0gc3RkTG9nO1xuICBjb25zb2xlLmluZm8gPSBzdGRJbmZvO1xuICBjb25zb2xlLndhcm4gPSBzdGRXYXJuO1xuICBjb25zb2xlLmVycm9yID0gc3RkRXJyb3I7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5UZXN0cyhvcHRpb25zPzogVGVzdEV4ZWN1dGlvbk9wdGlvbnMpIHtcbiAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLS0tLS0tJylcbiAgY29uc3QgcGFja2FnZV8gPSBncm9rLmZ1bmN0aW9ucy5nZXRDdXJyZW50Q2FsbCgpPy5mdW5jPy5wYWNrYWdlITtcbiAgY29uc3QgcGFja2FnZU93bmVyID0gKChwYWNrYWdlXz8ucGFja2FnZU93bmVyID8/ICcnKS5tYXRjaChuZXcgUmVnRXhwKCdbXjxdKjwoW14+XSopPicpKSA/PyBbJycsICcnXSlbMV07XG4gIGF3YWl0IGluaXRBdXRvVGVzdHMocGFja2FnZV8pO1xuICBjb25zdCByZXN1bHRzOiB7XG4gICAgY2F0ZWdvcnk/OiBzdHJpbmcsIG5hbWU/OiBzdHJpbmcsIHN1Y2Nlc3M6IGJvb2xlYW4sXG4gICAgcmVzdWx0OiBzdHJpbmcsIG1zOiBudW1iZXIsIHNraXBwZWQ6IGJvb2xlYW4sIGxvZ3M/OiBzdHJpbmcsIG93bmVyPzogc3RyaW5nXG4gIH1bXSA9IFtdO1xuICBjb25zb2xlLmxvZyhgUnVubmluZyB0ZXN0c2ApO1xuICBjb25zb2xlLmxvZyhvcHRpb25zKTtcbiAgb3B0aW9ucyA/Pz0ge307XG4gIG9wdGlvbnMhLnRlc3RDb250ZXh0ID8/PSBuZXcgVGVzdENvbnRleHQoKTtcbiAgZ3Jvay5zaGVsbC5jbGVhckxhc3RFcnJvcigpO1xuICBjb25zdCBsb2dzID0gcmVkZWZpbmVDb25zb2xlKCk7XG5cbiAgYXdhaXQgaW52b2tlVGVzdHModGVzdHMsIG9wdGlvbnMpO1xuXG4gIGZvciAobGV0IHIgb2YgcmVzdWx0cykge1xuICAgIHIucmVzdWx0ID0gci5yZXN1bHQudG9TdHJpbmcoKS5yZXBsYWNlKC9cIi9nLCAnXFwnJyk7XG4gICAgaWYgKHIubG9ncyAhPSB1bmRlZmluZWQpXG4gICAgICByLmxvZ3MgPSByLmxvZ3MhLnRvU3RyaW5nKCkucmVwbGFjZSgvXCIvZywgJ1xcJycpO1xuICB9XG4gIHJldHVybiByZXN1bHRzO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGludm9rZUNhdGVnb3J5TWV0aG9kKG1ldGhvZDogKCgpID0+IFByb21pc2U8dm9pZD4pIHwgdW5kZWZpbmVkLCBjYXRlZ29yeTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICB2YXIgaW52b2thdGlvblJlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgaWYgKG1ldGhvZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGF3YWl0IHRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IG1ldGhvZCgpO1xuICAgICAgICB9LCAxMDAwMDAsIGBiZWZvcmUgJHtjYXRlZ29yeX06IHRpbWVvdXQgZXJyb3JgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoICh4OiBhbnkpIHtcbiAgICAgIGludm9rYXRpb25SZXN1bHQgPSBhd2FpdCBnZXRSZXN1bHQoeCk7XG4gICAgfVxuICAgIHJldHVybiBpbnZva2F0aW9uUmVzdWx0XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBpbnZva2VUZXN0c0luQ2F0ZWdvcnkoY2F0ZWdvcnk6IENhdGVnb3J5LCBvcHRpb25zOiBUZXN0RXhlY3V0aW9uT3B0aW9ucyk6IFByb21pc2U8YW55W10+IHtcbiAgICBsZXQgdCA9IGNhdGVnb3J5LnRlc3RzID8/IFtdO1xuICAgIGNvbnN0IHJlcyA9IFtdO1xuICAgIC8vIGxldCBtZW1vcnlVc2FnZUJlZm9yZSA9ICh3aW5kb3c/LnBlcmZvcm1hbmNlIGFzIGFueSk/Lm1lbW9yeT8udXNlZEpTSGVhcFNpemU7XG4gICAgY29uc3Qgd2lkZ2V0c0JlZm9yZSA9IGdldFdpZGdldHNDb3VudFNhZmUoKTtcblxuICAgIGlmIChjYXRlZ29yeS5jbGVhcikge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Lmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgICAgaWYgKHRbaV0ub3B0aW9ucykge1xuICAgICAgICAgIGlmICh0W2ldLm9wdGlvbnM/LmJlbmNobWFyayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoIXRbaV0ub3B0aW9ucylcbiAgICAgICAgICAgICAgdFtpXS5vcHRpb25zID0ge31cbiAgICAgICAgICAgIHRbaV0ub3B0aW9ucyEuYmVuY2htYXJrID0gY2F0ZWdvcnkuYmVuY2htYXJrcyA/PyBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRlc3QgPSB0W2ldO1xuICAgICAgICBpZiAob3B0aW9ucy50ZXN0KVxuICAgICAgICAgIGlmIChvcHRpb25zLnRlc3QudG9Mb3dlckNhc2UoKSAhPT0gdGVzdC5uYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKHRlc3Q/Lm9wdGlvbnMpIHtcbiAgICAgICAgICB0ZXN0Lm9wdGlvbnMub3duZXIgPSB0W2ldLm9wdGlvbnM/Lm93bmVyID8/IGNhdGVnb3J5Py5vd25lciA/PyBwYWNrYWdlT3duZXIgPz8gJyc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbGV0IGlzR0JFbmFibGUgPSAod2luZG93IGFzIGFueSkuZ2MgJiYgdGVzdC5vcHRpb25zPy5za2lwUmVhc29uID09IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYCoqKioqKioqJHtpc0dCRW5hYmxlfWApO1xuICAgICAgICAvLyBpZiAoaXNHQkVuYWJsZSlcbiAgICAgICAgLy8gICBhd2FpdCAod2luZG93IGFzIGFueSkuZ2MoKTtcbiAgICAgICAgLy8gbWVtb3J5VXNhZ2VCZWZvcmUgPSAod2luZG93Py5wZXJmb3JtYW5jZSBhcyBhbnkpPy5tZW1vcnk/LnVzZWRKU0hlYXBTaXplO1xuICAgICAgICBsZXQgdGVzdFJ1biA9IGF3YWl0IGV4ZWNUZXN0KHRlc3QsIG9wdGlvbnM/LnRlc3QsIGxvZ3MsIERHLlRlc3QuaXNJbkJlbmNobWFyayA/IHRbaV0ub3B0aW9ucz8uYmVuY2htYXJrVGltZW91dCA/PyBCRU5DSE1BUktfVElNRU9VVCA6IHRbaV0ub3B0aW9ucz8udGltZW91dCA/PyBTVEFOREFSVF9USU1FT1VULCBwYWNrYWdlXy5uYW1lLCBvcHRpb25zLnZlcmJvc2UpO1xuXG4gICAgICAgIC8vIGlmIChpc0dCRW5hYmxlKVxuICAgICAgICAvLyAgIGF3YWl0ICh3aW5kb3cgYXMgYW55KS5nYygpO1xuICAgICAgICBpZiAodGVzdFJ1bilcbiAgICAgICAgICByZXMucHVzaCh7IC4uLnRlc3RSdW4sICB3aWRnZXRzRGVsdGE6IGdldFdpZGdldHNDb3VudFNhZmUoKSAtIHdpZGdldHNCZWZvcmUgfSk7XG4gICAgICAgIC8vIHJlcy5wdXNoKHsgLi4udGVzdFJ1biwgbWVtb3J5RGVsdGE6ICh3aW5kb3c/LnBlcmZvcm1hbmNlIGFzIGFueSk/Lm1lbW9yeT8udXNlZEpTSGVhcFNpemUgLSBtZW1vcnlVc2FnZUJlZm9yZSwgd2lkZ2V0c0RlbHRhOiBnZXRXaWRnZXRzQ291bnRTYWZlKCkgLSB3aWRnZXRzQmVmb3JlIH0pO1xuXG4gICAgICAgIGdyb2suc2hlbGwuY2xvc2VBbGwoKTtcbiAgICAgICAgREcuQmFsbG9vbi5jbG9zZUFsbCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IHRlc3QgPSB0W2ldO1xuICAgICAgICBpZiAob3B0aW9ucy50ZXN0KVxuICAgICAgICAgIGlmIChvcHRpb25zLnRlc3QudG9Mb3dlckNhc2UoKSAhPT0gdGVzdC5uYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICBpZiAodGVzdD8ub3B0aW9ucykge1xuICAgICAgICAgIHRlc3Qub3B0aW9ucy5vd25lciA9IHRbaV0ub3B0aW9ucz8ub3duZXIgPz8gY2F0ZWdvcnk/Lm93bmVyID8/IHBhY2thZ2VPd25lciA/PyAnJztcbiAgICAgICAgfVxuICAgICAgICAvLyBsZXQgaXNHQkVuYWJsZSA9ICh3aW5kb3cgYXMgYW55KS5nYyAmJiB0ZXN0Lm9wdGlvbnM/LnNraXBSZWFzb24gPT0gdW5kZWZpbmVkO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgKioqKioqKioke2lzR0JFbmFibGV9YCk7XG4gICAgICAgIC8vIGlmIChpc0dCRW5hYmxlKVxuICAgICAgICAvLyAgIGF3YWl0ICh3aW5kb3cgYXMgYW55KS5nYygpO1xuICAgICAgICAvLyBtZW1vcnlVc2FnZUJlZm9yZSA9ICh3aW5kb3c/LnBlcmZvcm1hbmNlIGFzIGFueSk/Lm1lbW9yeT8udXNlZEpTSGVhcFNpemU7XG4gICAgICAgIGxldCB0ZXN0UnVuID0gYXdhaXQgZXhlY1Rlc3QodGVzdCwgb3B0aW9ucz8udGVzdCwgbG9ncywgREcuVGVzdC5pc0luQmVuY2htYXJrID8gdFtpXS5vcHRpb25zPy5iZW5jaG1hcmtUaW1lb3V0ID8/IEJFTkNITUFSS19USU1FT1VUIDogdFtpXS5vcHRpb25zPy50aW1lb3V0LCBwYWNrYWdlXy5uYW1lLCBvcHRpb25zLnZlcmJvc2UpO1xuXG4gICAgICAgIC8vIGlmIChpc0dCRW5hYmxlKVxuICAgICAgICAvLyAgIGF3YWl0ICh3aW5kb3cgYXMgYW55KS5nYygpO1xuICAgICAgICBcbiAgICAgICAgaWYgKHRlc3RSdW4pXG4gICAgICAgICAgcmVzLnB1c2goeyAuLi50ZXN0UnVuLCB3aWRnZXRzRGlmZmVyZW5jZTogZ2V0V2lkZ2V0c0NvdW50U2FmZSgpIC0gd2lkZ2V0c0JlZm9yZSB9KTtcbiAgICAgICAgLy8gcmVzLnB1c2goeyAuLi50ZXN0UnVuLCBtZW1vcnlEZWx0YTogKHdpbmRvdz8ucGVyZm9ybWFuY2UgYXMgYW55KT8ubWVtb3J5Py51c2VkSlNIZWFwU2l6ZSAtIG1lbW9yeVVzYWdlQmVmb3JlLCB3aWRnZXRzRGlmZmVyZW5jZTogZ2V0V2lkZ2V0c0NvdW50U2FmZSgpIC0gd2lkZ2V0c0JlZm9yZSB9KTtcblxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0V2lkZ2V0c0NvdW50U2FmZSgpIHtcbiAgICBsZXQgbGVuZ3RoID0gLTE7XG4gICAgdHJ5IHtcbiAgICAgIGxlbmd0aCA9IERHLldpZGdldC5nZXRBbGwoKS5sZW5ndGg7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBjb25zb2xlLndhcm4oZS5tZXNzYWdlID8/IGUpO1xuICAgIH1cbiAgICByZXR1cm4gbGVuZ3RoO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gaW52b2tlVGVzdHMoY2F0ZWdvcmllc1RvSW52b2tlOiB7IFtrZXk6IHN0cmluZ106IENhdGVnb3J5IH0sIG9wdGlvbnM6IFRlc3RFeGVjdXRpb25PcHRpb25zKSB7XG4gICAgdHJ5IHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNhdGVnb3JpZXNUb0ludm9rZSkpIHtcbiAgICAgICAgaWYgKCghIW9wdGlvbnM/LmNhdGVnb3J5ICYmICFrZXkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG9wdGlvbnM/LmNhdGVnb3J5LnRvTG93ZXJDYXNlKCkpKSB8fFxuICAgICAgICAgIG9wdGlvbnMuZXhjbHVkZT8uc29tZSgoYykgPT4ga2V5LnN0YXJ0c1dpdGgoYykpKVxuICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIHN0ZExvZyhgU3RhcnRlZCAke2tleX0gY2F0ZWdvcnlgKTtcbiAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgIGNvbnN0IHNraXBwZWQgPSB2YWx1ZS50ZXN0cz8uZXZlcnkoKHQ6IFRlc3QpID0+IHQub3B0aW9ucz8uc2tpcFJlYXNvbik7XG4gICAgICAgIGlmICghc2tpcHBlZClcbiAgICAgICAgICB2YWx1ZS5iZWZvcmVTdGF0dXMgPSBhd2FpdCBpbnZva2VDYXRlZ29yeU1ldGhvZCh2YWx1ZS5iZWZvcmUsIG9wdGlvbnMuY2F0ZWdvcnkgPz8gJycpO1xuXG4gICAgICAgIGxldCB0ID0gdmFsdWUudGVzdHMgPz8gW107XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc3RyZXNzVGVzdCkge1xuICAgICAgICAgIHQgPSB0LmZpbHRlcigoZSkgPT4gZS5vcHRpb25zPy5zdHJlc3NUZXN0KTtcbiAgICAgICAgICB0ID0gc2h1ZmZsZSh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgob3B0aW9ucy50YWdzPy5sZW5ndGggPz8gMCkgPiAwKSB7XG4gICAgICAgICAgdCA9IHQuZmlsdGVyKChlKSA9PlxuICAgICAgICAgICAgZS5vcHRpb25zPy50YWdzPy5zb21lKHRhZyA9PiAob3B0aW9ucz8udGFncyA/PyBbXSkuaW5jbHVkZXModGFnKSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlczogYW55W107XG4gICAgICAgIGlmICh2YWx1ZS5iZWZvcmVTdGF0dXMpIHtcbiAgICAgICAgICByZXMgPSBBcnJheS5mcm9tKHQubWFwKCh0ZXN0RWxlbSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLCBsb2dzOiAnJywgY2F0ZWdvcnk6IGtleSwgbmFtZTogdGVzdEVsZW0ubmFtZSwgcmVzdWx0OiAnYmVmb3JlKCkgZmFpbGVkJywgc3VjY2VzczogZmFsc2UsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgICByZXMuZm9yRWFjaChhc3luYyAodGVzdCkgPT4gcmVwb3J0VGVzdCgncGFja2FnZScsIHRlc3QpKTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgIHJlcyA9IGF3YWl0IGludm9rZVRlc3RzSW5DYXRlZ29yeSh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSByZXMuZmlsdGVyKChkKSA9PiBkLnJlc3VsdCAhPSAnc2tpcHBlZCcpO1xuXG4gICAgICAgIGlmICghc2tpcHBlZClcbiAgICAgICAgICB2YWx1ZS5hZnRlclN0YXR1cyA9IGF3YWl0IGludm9rZUNhdGVnb3J5TWV0aG9kKHZhbHVlLmFmdGVyLCBvcHRpb25zLmNhdGVnb3J5ID8/ICcnKTtcblxuICAgICAgICAvLyBDbGVhciBhZnRlciBjYXRlZ29yeVxuICAgICAgICAvLyBncm9rLnNoZWxsLmNsb3NlQWxsKCk7XG4gICAgICAgIC8vIERHLkJhbGxvb24uY2xvc2VBbGwoKTtcbiAgICAgICAgaWYgKHZhbHVlLmFmdGVyU3RhdHVzKVxuICAgICAgICAgIGRhdGEucHVzaCh7IGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwgbG9nczogJycsIGNhdGVnb3J5OiBrZXksIG5hbWU6ICdhZnRlcicsIHJlc3VsdDogdmFsdWUuYWZ0ZXJTdGF0dXMsIHN1Y2Nlc3M6IGZhbHNlLCBtczogMCwgc2tpcHBlZDogZmFsc2UgfSk7XG4gICAgICAgIGlmICh2YWx1ZS5iZWZvcmVTdGF0dXMpXG4gICAgICAgICAgZGF0YS5wdXNoKHsgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLCBsb2dzOiAnJywgY2F0ZWdvcnk6IGtleSwgbmFtZTogJ2JlZm9yZScsIHJlc3VsdDogdmFsdWUuYmVmb3JlU3RhdHVzLCBzdWNjZXNzOiBmYWxzZSwgbXM6IDAsIHNraXBwZWQ6IGZhbHNlIH0pO1xuICAgICAgICAgIHJlc3VsdHMucHVzaCguLi5kYXRhKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgcmVzZXRDb25zb2xlKCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRlc3RDb250ZXh0IS5jYXRjaFVuaGFuZGxlZCAmJiAoIURHLlRlc3QuaXNJbkJlbmNobWFyaykpIHtcbiAgICAgIGF3YWl0IGRlbGF5KDEwMDApO1xuICAgICAgY29uc3QgZXJyb3IgPSBhd2FpdCBncm9rLnNoZWxsLmxhc3RFcnJvcjtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgbG9nczogJycsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgY2F0ZWdvcnk6ICdVbmhhbmRsZWQgZXhjZXB0aW9ucycsXG4gICAgICAgIG5hbWU6ICdFeGNlcHRpb24nLFxuICAgICAgICByZXN1bHQ6IGVycm9yID8/ICcnLCBzdWNjZXNzOiAhZXJyb3IsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSxcbiAgICAgICAgJ2ZsYWtpbmcnOiBERy5UZXN0LmlzUmVwcm9kdWNpbmcgJiYgIWVycm9yLFxuICAgICAgICBvd25lcjogcGFja2FnZU93bmVyID8/ICcnLFxuICAgICAgICAncGFja2FnZSc6IHBhY2thZ2VfLm5hbWVcbiAgICAgIH07XG4gICAgICByZXN1bHRzLnB1c2gocGFyYW1zKTtcbiAgICAgICg8YW55PnBhcmFtcykucGFja2FnZSA9IHBhY2thZ2VfLm5hbWU7XG4gICAgICBhd2FpdCByZXBvcnRUZXN0KCdwYWNrYWdlJywgcGFyYW1zKTtcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVwb3J0VGVzdCh0eXBlOiBzdHJpbmcsIHBhcmFtczogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICgoPGFueT5ncm9rLnNoZWxsKS5yZXBvcnRUZXN0ICE9IG51bGwpXG4gICAgYXdhaXQgKDxhbnk+Z3Jvay5zaGVsbCkucmVwb3J0VGVzdCh0eXBlLCBwYXJhbXMpO1xuICBlbHNlIHtcbiAgICBhd2FpdCBmZXRjaChgJHtncm9rLmRhcGkucm9vdH0vbG9nL3Rlc3RzLyR7dHlwZX1gLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJywgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBhcmFtcylcbiAgICB9KTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZXN1bHQoeDogYW55KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGAke3gudG9TdHJpbmcoKX1cXG4ke3guc3RhY2sgPyAoYXdhaXQgREcuTG9nZ2VyLnRyYW5zbGF0ZVN0YWNrVHJhY2UoeC5zdGFjaykpIDogJyd9YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY1Rlc3QodDogVGVzdCwgcHJlZGljYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQsIGxvZ3M6IGFueVtdLFxuICB0ZXN0VGltZW91dD86IG51bWJlciwgcGFja2FnZU5hbWU/OiBzdHJpbmcsIHZlcmJvc2U/OiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcbiAgbG9ncy5sZW5ndGggPSAwO1xuICBsZXQgcjogeyBkYXRlOiBzdHJpbmcsIGNhdGVnb3J5Pzogc3RyaW5nLCBuYW1lPzogc3RyaW5nLCBzdWNjZXNzOiBib29sZWFuLCByZXN1bHQ6IGFueSwgbXM6IG51bWJlciwgc2tpcHBlZDogYm9vbGVhbiwgbG9ncz86IHN0cmluZywgb3duZXI/OiBzdHJpbmcgLCBwYWNrYWdlPzogc3RyaW5nIH07XG4gIGxldCB0eXBlOiBzdHJpbmcgPSAncGFja2FnZSc7XG4gIGNvbnN0IGZpbHRlciA9IHByZWRpY2F0ZSAhPSB1bmRlZmluZWQgJiYgKHQubmFtZS50b0xvd2VyQ2FzZSgpICE9PSBwcmVkaWNhdGUudG9Mb3dlckNhc2UoKSk7XG4gIGxldCBza2lwID0gdC5vcHRpb25zPy5za2lwUmVhc29uIHx8IGZpbHRlcjtcbiAgbGV0IHNraXBSZWFzb24gPSBmaWx0ZXIgPyAnc2tpcHBlZCcgOiB0Lm9wdGlvbnM/LnNraXBSZWFzb247XG4gIGNvbnNvbGUubG9nKHRlc3QubmFtZSwgc2tpcCk7XG5cbiAgaWYgKERHLlRlc3QuaXNJbkJlbmNobWFyayAmJiAhdC5vcHRpb25zPy5iZW5jaG1hcmspIHtcbiAgICBzdGRMb2coYFNLSVBQRUQ6ICR7dC5jYXRlZ29yeX0gJHt0Lm5hbWV9IGRvZXNudCBhdmFpbGFibGUgaW4gYmVuY2htYXJrIG1vZGVgKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKCFza2lwKVxuICAgIHN0ZExvZyhgU3RhcnRlZCAke3QuY2F0ZWdvcnl9ICR7dC5uYW1lfWApO1xuICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gIGNvbnN0IHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHN0YXJ0KS50b0lTT1N0cmluZygpO1xuICB0cnkge1xuICAgIGlmIChza2lwKVxuICAgICAgciA9IHsgZGF0ZTogc3RhcnREYXRlLCBzdWNjZXNzOiB0cnVlLCByZXN1bHQ6IHNraXBSZWFzb24hLCBtczogMCwgc2tpcHBlZDogdHJ1ZSwgcGFja2FnZTogcGFja2FnZU5hbWUgfTtcbiAgICBlbHNlIHtcbiAgICAgIGxldCB0aW1lb3V0XyA9IHRlc3RUaW1lb3V0ID8/IFNUQU5EQVJUX1RJTUVPVVQ7XG5cbiAgICAgIGlmIChERy5UZXN0LmlzUHJvZmlsaW5nKVxuICAgICAgICBjb25zb2xlLnByb2ZpbGUoYCR7dC5jYXRlZ29yeX06ICR7dC5uYW1lfWApO1xuXG4gICAgICByID0geyBkYXRlOiBzdGFydERhdGUsIHN1Y2Nlc3M6IHRydWUsIHJlc3VsdDogYXdhaXQgdGltZW91dCh0LnRlc3QsIHRpbWVvdXRfKSA/PyAnT0snLCBtczogMCwgc2tpcHBlZDogZmFsc2UgLCBwYWNrYWdlOiBwYWNrYWdlTmFtZX07XG5cbiAgICAgIGlmIChERy5UZXN0LmlzUHJvZmlsaW5nKSB7XG4gICAgICAgIGNvbnNvbGUucHJvZmlsZUVuZChgJHt0LmNhdGVnb3J5fTogJHt0Lm5hbWV9YCk7XG4gICAgICAgIGdyb2suc2hlbGwuaW5mbyhgUHJvZmlsaW5nIG9mICR7dC5jYXRlZ29yeX06ICR7dC5uYW1lfSBmaW5pc2hlZCBcXG4gUGxlYXNlIGVuc3VyZSB0aGF0IHlvdSBoYXZlIG9wZW5lZCBEZXZUb29scyAoRjEyKSAvIFBlcmZvcm1hbmNlIHBhbmVsIGJlZm9yZSB0ZXN0IHN0YXJ0cy5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKHg6IGFueSkge1xuICAgIHN0ZEVycm9yKHgpO1xuICAgIHIgPSB7IGRhdGU6IHN0YXJ0RGF0ZSwgc3VjY2VzczogZmFsc2UsIHJlc3VsdDogYXdhaXQgZ2V0UmVzdWx0KHgpLCBtczogMCwgc2tpcHBlZDogZmFsc2UsIHBhY2thZ2U6IHBhY2thZ2VOYW1lIH07XG4gIH1cbiAgaWYgKHQub3B0aW9ucz8uaXNBZ2dyZWdhdGVkICYmIHIucmVzdWx0LmNvbnN0cnVjdG9yID09PSBERy5EYXRhRnJhbWUpIHtcbiAgICBjb25zdCBjb2wgPSByLnJlc3VsdC5jb2woJ3N1Y2Nlc3MnKTtcbiAgICBpZiAoY29sKVxuICAgICAgci5zdWNjZXNzID0gY29sLnN0YXRzLnN1bSA9PT0gY29sLmxlbmd0aDtcbiAgICBpZiAoIXZlcmJvc2UpIHtcbiAgICAgIGNvbnN0IGRmID0gci5yZXN1bHQ7XG4gICAgICBkZi5jb2x1bW5zLnJlbW92ZSgnc3RhY2snKTtcbiAgICAgIGRmLnJvd3MucmVtb3ZlV2hlcmUoKHIpID0+IHIuZ2V0KCdzdWNjZXNzJykpO1xuICAgICAgci5yZXN1bHQgPSBkZjtcbiAgICB9XG4gICAgci5yZXN1bHQgPSByLnJlc3VsdC50b0NzdigpO1xuICB9XG4gIHIubG9ncyA9IGxvZ3Muam9pbignXFxuJyk7XG4gIHIubXMgPSBEYXRlLm5vdygpIC0gc3RhcnQ7XG4gIGlmICghc2tpcClcbiAgICBzdGRMb2coYEZpbmlzaGVkICR7dC5jYXRlZ29yeX0gJHt0Lm5hbWV9IGZvciAke3IubXN9IG1zYCk7XG4gIHIuY2F0ZWdvcnkgPSB0LmNhdGVnb3J5O1xuICByLm5hbWUgPSB0Lm5hbWU7XG4gIHIub3duZXIgPSB0Lm9wdGlvbnM/Lm93bmVyID8/ICcnO1xuICBpZiAoIWZpbHRlcikge1xuICAgIGxldCBwYXJhbXMgPSB7XG4gICAgICAnc3VjY2Vzcyc6IHIuc3VjY2VzcywgJ3Jlc3VsdCc6IHIucmVzdWx0LCAnbXMnOiByLm1zLCAnZGF0ZSc6IHIuZGF0ZSxcbiAgICAgICdza2lwcGVkJzogci5za2lwcGVkLCAnY2F0ZWdvcnknOiB0LmNhdGVnb3J5LCAnbmFtZSc6IHQubmFtZSwgJ2xvZ3MnOiByLmxvZ3MsICdvd25lcic6IHIub3duZXIsXG4gICAgICAnZmxha2luZyc6IERHLlRlc3QuaXNSZXByb2R1Y2luZyAmJiByLnN1Y2Nlc3MsXG4gICAgICAndGltZW91dFdhcm5pbmcnOiBERy5UZXN0LmlzSW5CZW5jaG1hcmsgJiYgKHQub3B0aW9ucz8uYmVuY2htYXJrV2FyblRpbWVvdXQgJiYgci5tcyA+IHQub3B0aW9ucz8uYmVuY2htYXJrV2FyblRpbWVvdXQpXG4gICAgfTtcbiAgICBpZiAoci5yZXN1bHQuY29uc3RydWN0b3IgPT0gT2JqZWN0KSB7XG4gICAgICBjb25zdCByZXMgPSBPYmplY3Qua2V5cyhyLnJlc3VsdCkucmVkdWNlKChhY2MsIGspID0+ICh7IC4uLmFjYywgWydyZXN1bHQuJyArIGtdOiByLnJlc3VsdFtrXSB9KSwge30pO1xuICAgICAgcGFyYW1zID0geyAuLi5wYXJhbXMsIC4uLnJlcyB9O1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMucmVzdWx0IGluc3RhbmNlb2YgREcuRGF0YUZyYW1lKVxuICAgICAgcGFyYW1zLnJlc3VsdCA9IEpTT04uc3RyaW5naWZ5KHBhcmFtcy5yZXN1bHQ/LnRvSnNvbigpKSB8fCAnJztcblxuICAgIGF3YWl0IHJlcG9ydFRlc3QodHlwZSwgcGFyYW1zKTtcbiAgfVxuICByZXR1cm4gcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNodWZmbGUoYXJyYXk6IGFueVtdKTogYW55W10ge1xuICBjb25zdCBuZXdBcnIgPSBhcnJheS5zbGljZSgpO1xuICBuZXdBcnIuc29ydCgoKSA9PiBNYXRoLnJhbmRvbSgpIC0gMC41KTtcbiAgcmV0dXJuIG5ld0Fycjtcbn07XG5cbi8qIFdhaXRzIFttc10gbWlsbGlzZWNvbmRzICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsYXkobXM6IG51bWJlcikge1xuICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCBtcykpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXdhaXRDaGVjayhjaGVja0hhbmRsZXI6ICgpID0+IGJvb2xlYW4sXG4gIGVycm9yOiBzdHJpbmcgPSAnVGltZW91dCBleGNlZWRlZCcsIHdhaXQ6IG51bWJlciA9IDUwMCwgaW50ZXJ2YWw6IG51bWJlciA9IDUwKTogUHJvbWlzZTxhbnk+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICByZWplY3QobmV3IEVycm9yKGVycm9yKSk7XG4gICAgfSwgd2FpdCk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGludGVydmFsSWQ6IFRpbWVvdXQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAoY2hlY2tIYW5kbGVyKCkpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgIH1cbiAgICB9LCBpbnRlcnZhbCk7XG4gIH0pO1xufVxuXG4vLyBSZXR1cm5zIHRlc3QgZXhlY3V0aW9uIHJlc3VsdCBvciBhbiBlcnJvciBpbiBjYXNlIG9mIHRpbWVvdXRcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0aW1lb3V0KGZ1bmM6ICgpID0+IFByb21pc2U8YW55PiwgdGVzdFRpbWVvdXQ6IG51bWJlciwgdGltZW91dFJlYXNvbjogc3RyaW5nID0gJ0VYRUNVVElPTiBUSU1FT1VUJyk6IFByb21pc2U8YW55PiB7XG4gIGxldCB0aW1lb3V0OiBhbnkgPSBudWxsO1xuICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlPGFueT4oKF8sIHJlamVjdCkgPT4ge1xuICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcHJvbWlzZS1yZWplY3QtZXJyb3JzXG4gICAgICByZWplY3QodGltZW91dFJlYXNvbik7XG4gICAgfSwgdGVzdFRpbWVvdXQpO1xuICB9KTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKFtmdW5jKCksIHRpbWVvdXRQcm9taXNlXSk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKHRpbWVvdXQpXG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlhbG9nUHJlc2VudChkaWFsb2dUaXRsZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGRpYWxvZ3MgPSBERy5EaWFsb2cuZ2V0T3BlbkRpYWxvZ3MoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWFsb2dzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGRpYWxvZ3NbaV0udGl0bGUgPT0gZGlhbG9nVGl0bGUpXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKiBFeHBlY3RzIGFuIGFzeW5jaHJvbm91cyB7QGxpbmsgYWN0aW9ufSB0byB0aHJvdyBhbiBleGNlcHRpb24uIFVzZSB7QGxpbmsgY2hlY2t9IHRvIHBlcmZvcm1cbiAqIGRlZXBlciBpbnNwZWN0aW9uIG9mIHRoZSBleGNlcHRpb24gaWYgbmVjZXNzYXJ5LlxuICogQHBhcmFtICB7ZnVuY3Rpb24oKTogUHJvbWlzZTx2b2lkPn0gYWN0aW9uXG4gKiBAcGFyYW0gIHtmdW5jdGlvbihhbnkpOiBib29sZWFufSBjaGVja1xuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4cGVjdEV4Y2VwdGlvbkFzeW5jKGFjdGlvbjogKCkgPT4gUHJvbWlzZTx2b2lkPixcbiAgY2hlY2s/OiAoZXhjZXB0aW9uOiBhbnkpID0+IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IGNhdWdodDogYm9vbGVhbiA9IGZhbHNlO1xuICBsZXQgY2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICB0cnkge1xuICAgIGF3YWl0IGFjdGlvbigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY2F1Z2h0ID0gdHJ1ZTtcbiAgICBjaGVja2VkID0gIWNoZWNrIHx8IGNoZWNrKGUpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmICghY2F1Z2h0KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBbiBleGNlcHRpb24gaXMgZXhwZWN0ZWQgYnV0IG5vdCB0aHJvd24nKTtcbiAgICBpZiAoIWNoZWNrZWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FuIGV4cGVjdGVkIGV4Y2VwdGlvbiBpcyB0aHJvd24sIGJ1dCBpdCBkb2VzIG5vdCBzYXRpc2Z5IHRoZSBjb25kaXRpb24nKTtcbiAgfVxufVxuXG5jb25zdCBjYXRERiA9IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhbREcuQ29sdW1uLmZyb21TdHJpbmdzKCdjb2wnLCBbJ3ZhbDEnLCAndmFsMicsICd2YWwzJ10pXSk7XG5cbi8qKlxuICogVW5pdmVyc2FsIHRlc3QgZm9yIHZpZXdlcnMuIEl0IHNlYXJjaCB2aWV3ZXJzIGluIERPTSBieSB0YWdzOiBjYW52YXMsIHN2ZywgaW1nLCBpbnB1dCwgaDEsIGFcbiAqIEBwYXJhbSAge3N0cmluZ30gdiBWaWV3ZXIgbmFtZVxuICogQHBhcmFtICB7REcuRGF0YUZyYW1lfSBkZiBEYXRhZnJhbWUgdG8gdXNlLiBTaG91bGQgaGF2ZSBhdCBsZWFzdCAzIHJvd3NcbiAqIEBwYXJhbSAge2Jvb2xlYW59IG9wdGlvbnMuZGV0ZWN0U2VtYW50aWNUeXBlcyBTcGVjaWZ5IHdoZXRoZXIgdG8gZGV0ZWN0IHNlbWFudGljIHR5cGVzIG9yIG5vdFxuICogQHBhcmFtICB7Ym9vbGVhbn0gb3B0aW9ucy5yZWFkT25seSBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGRhdGFmcmFtZSB3aWxsIG5vdCBiZSBtb2RpZmllZCBkdXJpbmcgdGhlIHRlc3RcbiAqIEBwYXJhbSAge2Jvb2xlYW59IG9wdGlvbnMuYXJiaXRyYXJ5RGZUZXN0IElmIHNldCB0byBmYWxzZSwgdGVzdCBvbiBhcmJpdHJhcnkgZGF0YWZyYW1lXG4gKiAob25lIGNhdGVnb3JpY2FsIGNvbHVtbikgd2lsbCBub3QgYmUgcGVyZm9ybWVkXG4gKiBAcGFyYW0gIHtvYmplY3R9IG9wdGlvbnMgTGlzdCBvZiBvcHRpb25zIChvcHRpb25hbClcbiAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IFRoZSB0ZXN0IGlzIGNvbnNpZGVyZWQgc3VjY2Vzc2Z1bCBpZiBpdCBjb21wbGV0ZXMgd2l0aG91dCBlcnJvcnNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RWaWV3ZXIodjogc3RyaW5nLCBkZjogREcuRGF0YUZyYW1lLCBvcHRpb25zPzoge1xuICBkZXRlY3RTZW1hbnRpY1R5cGVzPzogYm9vbGVhbiwgcmVhZE9ubHk/OiBib29sZWFuLCBhcmJpdHJhcnlEZlRlc3Q/OiBib29sZWFuLFxuICBwYWNrYWdlTmFtZT86IHN0cmluZywgYXdhaXRWaWV3ZXI/OiAodmlld2VyOiBERy5WaWV3ZXIpID0+IFByb21pc2U8dm9pZD5cbn0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcGFja2FnZU5hbWUgPSBvcHRpb25zPy5wYWNrYWdlTmFtZSA/PyAnJztcbiAgaWYgKG9wdGlvbnM/LmRldGVjdFNlbWFudGljVHlwZXMpXG4gICAgYXdhaXQgZ3Jvay5kYXRhLmRldGVjdFNlbWFudGljVHlwZXMoZGYpO1xuICBjb25zdCB0diA9IGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KGRmKTtcblxuICB0cnkge1xuICAgIC8vMS4gT3BlbiwgZG8gbm90aGluZyBhbmQgY2xvc2VcbiAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkKTtcbiAgICAvL2luIGNhc2Ugdmlld2VyIHdpdGggYXN5bmMgcmVuZGVyaW5nIC0gd2FpdCBmb3IgcmVuZGVyIHRvIGNvbXBsZXRlXG4gICAgaWYgKG9wdGlvbnM/LmF3YWl0Vmlld2VyKVxuICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgdW5kZWZpbmVkLCBvcHRpb25zIS5hd2FpdFZpZXdlcik7XG5cbiAgICAvLzIuIE9wZW4gdmlld2VyLCBydW4gc2VsZWN0aW9uLCBmaWx0ZXIsIGV0Yy4gYW5kIGNsb3NlXG4gICAgaWYgKCFvcHRpb25zPy5yZWFkT25seSkge1xuICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgc2VsZWN0RmlsdGVyQ2hhbmdlQ3VycmVudCk7XG4gICAgICBpZiAob3B0aW9ucz8uYXdhaXRWaWV3ZXIpXG4gICAgICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsIHNlbGVjdEZpbHRlckNoYW5nZUN1cnJlbnQsIG9wdGlvbnMhLmF3YWl0Vmlld2VyKTtcbiAgICB9XG5cbiAgICAvLzIuIE9wZW4gdmlld2VyLCBjaGFuZ2Ugb3B0aW9ucywgc2F2ZSBsYXlvdXQgYW5kIGNsb3NlXG4gICAgbGV0IHByb3BzQW5kTGF5b3V0OiB7IGxheW91dDogYW55LCBzYXZlZFByb3BzOiBhbnkgfSB8IG51bGwgPSBudWxsO1xuICAgIHByb3BzQW5kTGF5b3V0ID0gYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgY2hhbmdlT3B0aW9uc1NhdmVMYXlvdXQpO1xuICAgIGlmIChvcHRpb25zPy5hd2FpdFZpZXdlcilcbiAgICAgIHByb3BzQW5kTGF5b3V0ID0gYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCxcbiAgICAgICAgY2hhbmdlT3B0aW9uc1NhdmVMYXlvdXQsIG9wdGlvbnMhLmF3YWl0Vmlld2VyKVxuXG4gICAgLy8zLiBMb2FkIGxheW91dFxuICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld0xheW91dEFwcGxpZWQsIGxvYWRMYXlvdXQsIHVuZGVmaW5lZCwgcHJvcHNBbmRMYXlvdXQ/LmxheW91dCxcbiAgICAgIHsgc2F2ZWRQcm9wczogcHJvcHNBbmRMYXlvdXQ/LnNhdmVkUHJvcHMgfSk7XG4gICAgaWYgKG9wdGlvbnM/LmF3YWl0Vmlld2VyKVxuICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3TGF5b3V0QXBwbGllZCwgbG9hZExheW91dCwgb3B0aW9ucyEuYXdhaXRWaWV3ZXIsXG4gICAgICAgIHByb3BzQW5kTGF5b3V0Py5sYXlvdXQsIHsgc2F2ZWRQcm9wczogcHJvcHNBbmRMYXlvdXQ/LnNhdmVkUHJvcHMgfSk7XG5cbiAgICAvLzQuIE9wZW4gdmlld2VyIG9uIGFyYml0YXJ5IGRhdGFzZXRcbiAgICBpZiAob3B0aW9ucz8uYXJiaXRyYXJ5RGZUZXN0ICE9PSBmYWxzZSkge1xuICAgICAgdHYuZGF0YUZyYW1lID0gY2F0REY7XG4gICAgICBhd2FpdCBkZWxheSg1MCk7XG4gICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkKTtcbiAgICAgIGlmIChvcHRpb25zPy5hd2FpdFZpZXdlcilcbiAgICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgdW5kZWZpbmVkLCBvcHRpb25zIS5hd2FpdFZpZXdlcik7XG4gICAgfVxuXG4gICAgLy81LiBDYWxsIHBvc3Rwb25lZCBmaWx0ZXJpbmdcbiAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCBmaWx0ZXJBc3luYyk7XG4gICAgaWYgKG9wdGlvbnM/LmF3YWl0Vmlld2VyKVxuICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgZmlsdGVyQXN5bmMsIG9wdGlvbnMhLmF3YWl0Vmlld2VyKTtcblxuICB9IGZpbmFsbHkge1xuICAgIC8vIGNsb3NlQWxsKCkgaXMgaGFuZGxpbmcgYnkgY29tbW9uIHRlc3Qgd29ya2Zsb3dcbiAgICAvLyBncm9rLnNoZWxsLmNsb3NlQWxsKCk7XG4gICAgLy8gREcuQmFsbG9vbi5jbG9zZUFsbCgpO1xuICB9XG59XG4iXX0=
782
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRJLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0FBQy9CLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDO0FBRW5DLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRTdDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FFZCxFQUFFLENBQUM7QUFFUCxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQztBQUN0QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDM0IsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7QUFDckMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQzNCLE1BQU0sYUFBYSxHQUErQixFQUFFLENBQUM7QUFDckQsTUFBTSxDQUFDLElBQUksZUFBdUIsQ0FBQztBQUVuQyxNQUFNLEtBQVcsTUFBTSxDQUt0QjtBQUxE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QUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDckYsSUFBSSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsV0FBVztnQkFDdEIsTUFBTSxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsT0FBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBRTlHO2dCQUFTO1lBQ1IsaURBQWlEO1lBQ2pELHlCQUF5QjtZQUN6Qix5QkFBeUI7U0FDMUI7O0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0ZXN0RGF0YSB9IGZyb20gJy4vZGF0YWZyYW1lLXV0aWxzJztcbmltcG9ydCBUaW1lb3V0ID0gTm9kZUpTLlRpbWVvdXQ7XG5pbXBvcnQgeyBjaGFuZ2VPcHRpb25zU2F2ZUxheW91dCwgZmlsdGVyQXN5bmMsIGxvYWRMYXlvdXQsIHNlbGVjdEZpbHRlckNoYW5nZUN1cnJlbnQsIHRlc3RWaWV3ZXJJbnRlcm5hbCB9IGZyb20gJy4vdGVzdC12aWV3ZXItdXRpbHMnO1xuXG5jb25zdCBTVEFOREFSVF9USU1FT1VUID0gMzAwMDA7XG5jb25zdCBCRU5DSE1BUktfVElNRU9VVCA9IDEwODAwMDAwO1xuXG5jb25zdCBzdGRMb2cgPSBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpO1xuY29uc3Qgc3RkSW5mbyA9IGNvbnNvbGUuaW5mby5iaW5kKGNvbnNvbGUpO1xuY29uc3Qgc3RkV2FybiA9IGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO1xuY29uc3Qgc3RkRXJyb3IgPSBjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSk7XG5cbmV4cG9ydCBjb25zdCB0ZXN0czoge1xuICBba2V5OiBzdHJpbmddOiBDYXRlZ29yeVxufSA9IHt9O1xuXG5jb25zdCBhdXRvVGVzdHNDYXROYW1lID0gJ0F1dG8gVGVzdHMnO1xuY29uc3QgZGVtb0NhdE5hbWUgPSAnRGVtbyc7XG5jb25zdCBkZXRlY3RvcnNDYXROYW1lID0gJ0RldGVjdG9ycyc7XG5jb25zdCBjb3JlQ2F0TmFtZSA9ICdDb3JlJztcbmNvbnN0IHdhc1JlZ2lzdGVyZWQ6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG5leHBvcnQgbGV0IGN1cnJlbnRDYXRlZ29yeTogc3RyaW5nO1xuXG5leHBvcnQgbmFtZXNwYWNlIGFzc3VyZSB7XG4gIGV4cG9ydCBmdW5jdGlvbiBub3ROdWxsKHZhbHVlOiBhbnksIG5hbWU/OiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lID09IG51bGwgPyAnVmFsdWUnIDogbmFtZX0gbm90IGRlZmluZWRgKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RPcHRpb25zIHtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgYmVuY2htYXJrV2FyblRpbWVvdXQ/OiBudW1iZXI7XG4gIGJlbmNobWFya1RpbWVvdXQ/OiBudW1iZXI7XG4gIHVuaGFuZGxlZEV4Y2VwdGlvblRpbWVvdXQ/OiBudW1iZXI7XG4gIHNraXBSZWFzb24/OiBzdHJpbmc7XG4gIGlzQWdncmVnYXRlZD86IGJvb2xlYW47XG4gIGJlbmNobWFyaz86IGJvb2xlYW47XG4gIHN0cmVzc1Rlc3Q/OiBib29sZWFuO1xuICBvd25lcj86IHN0cmluZztcbiAgdGFncz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RSZXN1bHQgeyBcbiAgZGF0ZTogc3RyaW5nOyBcbiAgY2F0ZWdvcnk6IHN0cmluZzsgXG4gIG5hbWU6IHN0cmluZzsgXG4gIHN1Y2Nlc3M6IGJvb2xlYW47IFxuICByZXN1bHQ6IGFueTsgXG4gIG1zOiBudW1iZXI7IFxuICBza2lwcGVkOiBib29sZWFuOyBcbiAgbG9nczogc3RyaW5nOyBcbiAgb3duZXI6IHN0cmluZzsgXG4gIHBhY2thZ2U6IHN0cmluZztcbiAgZmxha2luZzogYm9vbGVhbjtcbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RSZXN1bHRFeHRlbmRlZCBleHRlbmRzIFRlc3RSZXN1bHR7IFxuICB3aWRnZXRzRGlmZmVyZW5jZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhdGVnb3J5T3B0aW9ucyB7XG4gIGNsZWFyPzogYm9vbGVhbjtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgYmVuY2htYXJrcz86IGJvb2xlYW47XG4gIHN0cmVzc1Rlc3RzPzogYm9vbGVhbjtcbiAgb3duZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBUZXN0Q29udGV4dCB7XG4gIHN0cmVzc1Rlc3Q/OiBib29sZWFuO1xuICBjYXRjaFVuaGFuZGxlZCA9IHRydWU7XG4gIHJlcG9ydCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKGNhdGNoVW5oYW5kbGVkPzogYm9vbGVhbiwgcmVwb3J0PzogYm9vbGVhbikge1xuICAgIGlmIChjYXRjaFVuaGFuZGxlZCAhPT0gdW5kZWZpbmVkKSB0aGlzLmNhdGNoVW5oYW5kbGVkID0gY2F0Y2hVbmhhbmRsZWQ7XG4gICAgaWYgKHJlcG9ydCAhPT0gdW5kZWZpbmVkKSB0aGlzLnJlcG9ydCA9IHJlcG9ydDtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIFRlc3Qge1xuICB0ZXN0OiAoKSA9PiBQcm9taXNlPGFueT47XG4gIG5hbWU6IHN0cmluZztcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgb3B0aW9ucz86IFRlc3RPcHRpb25zO1xuXG4gIGNvbnN0cnVjdG9yKGNhdGVnb3J5OiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdGVzdDogKCkgPT4gUHJvbWlzZTxhbnk+LCBvcHRpb25zPzogVGVzdE9wdGlvbnMpIHtcbiAgICB0aGlzLmNhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICBvcHRpb25zID8/PSB7fTtcbiAgICBvcHRpb25zLnRpbWVvdXQgPz89IFNUQU5EQVJUX1RJTUVPVVQ7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnRlc3QgPSBhc3luYyAoKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoREcuVGVzdC5pc0luRGVidWcpXG4gICAgICAgICAgICBkZWJ1Z2dlcjtcbiAgICAgICAgICBcbiAgICAgICAgICBsZXQgcmVzID0gYXdhaXQgdGVzdCgpO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXM/LnRvU3RyaW5nKCkgPz8gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhdGNoIChlKSB7IFxuICAgICAgICAgICAgcmVzdWx0ID0gJ0NhblxcJ3QgY29udmVydCB0ZXN0XFwncyByZXN1bHQgdG8gc3RyaW5nJztcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYENhblxcJ3QgY29udmVydCB0ZXN0XFwncyByZXN1bHQgdG8gc3RyaW5nIGluIHRoZSAke3RoaXMuY2F0ZWdvcnl9OiR7dGhpcy5uYW1lfSB0ZXN0YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2F0ZWdvcnkge1xuICB0ZXN0cz86IFRlc3RbXTtcbiAgYmVmb3JlPzogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgYWZ0ZXI/OiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIGJlZm9yZVN0YXR1cz86IHN0cmluZztcbiAgYWZ0ZXJTdGF0dXM/OiBzdHJpbmc7XG4gIGNsZWFyPzogYm9vbGVhbjtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgYmVuY2htYXJrcz86IGJvb2xlYW47XG4gIGJlbmNobWFya1RpbWVvdXQ/OiBudW1iZXI7XG4gIHN0cmVzc1Rlc3RzPzogYm9vbGVhbjtcbiAgb3duZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBUZXN0RXhlY3V0aW9uT3B0aW9ucyB7XG4gIGNhdGVnb3J5Pzogc3RyaW5nO1xuICB0ZXN0Pzogc3RyaW5nO1xuICB0ZXN0Q29udGV4dD86IFRlc3RDb250ZXh0O1xuICBleGNsdWRlPzogc3RyaW5nW107XG4gIHZlcmJvc2U/OiBib29sZWFuO1xuICBzdHJlc3NUZXN0PzogYm9vbGVhbjtcbiAgdGFncz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdEV2ZW50PFQ+KGV2ZW50OiBPYnNlcnZhYmxlPFQ+LFxuICBoYW5kbGVyOiAoYXJnczogVCkgPT4gdm9pZCwgdHJpZ2dlcjogKCkgPT4gdm9pZCwgbXM6IG51bWJlciA9IDAsIHJlYXNvbjogc3RyaW5nID0gYHRpbWVvdXRgXG4pOiBQcm9taXNlPGFueT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHN1YiA9IGV2ZW50LnN1YnNjcmliZSgoYXJnczogVCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaGFuZGxlcihhcmdzKTtcbiAgICAgICAgcmVzb2x2ZSgnT0snKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcHJvbWlzZS1yZWplY3QtZXJyb3JzXG4gICAgICByZWplY3QocmVhc29uKTtcbiAgICB9LCBtcyk7XG4gICAgdHJpZ2dlcigpO1xuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RFdmVudEFzeW5jPFQ+KGV2ZW50OiBPYnNlcnZhYmxlPFQ+LFxuICBoYW5kbGVyOiAoYXJnczogVCkgPT4gUHJvbWlzZTx2b2lkPiwgdHJpZ2dlcjogKCkgPT4gdm9pZCwgbXM6IG51bWJlciA9IDAsIHJlYXNvbjogc3RyaW5nID0gYHRpbWVvdXRgXG4pOiBQcm9taXNlPGFueT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHN1YiA9IGV2ZW50LnN1YnNjcmliZSgoYXJnczogVCkgPT4ge1xuICAgICAgaGFuZGxlcihhcmdzKS50aGVuKCgpID0+IHtcbiAgICAgICAgcmVzb2x2ZSgnT0snKTtcbiAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9yc1xuICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgfSwgbXMpO1xuICAgIHRyaWdnZXIoKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0KG5hbWU6IHN0cmluZywgdGVzdDogKCkgPT4gUHJvbWlzZTxhbnk+LCBvcHRpb25zPzogVGVzdE9wdGlvbnMpOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPSBbXTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyEucHVzaChuZXcgVGVzdChjdXJyZW50Q2F0ZWdvcnksIG5hbWUsIHRlc3QsIG9wdGlvbnMpKTtcbn1cblxuLyogVGVzdHMgdHdvIG9iamVjdHMgZm9yIGVxdWFsaXR5LCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZXkgYXJlIG5vdCBlcXVhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3QoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkgPSB0cnVlLCBlcnJvcj86IHN0cmluZyk6IHZvaWQge1xuICBpZiAoZXJyb3IpXG4gICAgZXJyb3IgPSBgJHtlcnJvcn0sIGA7XG4gIGVsc2UgZXJyb3IgPSAnJztcbiAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpXG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2Vycm9yfUV4cGVjdGVkIFwiJHtleHBlY3RlZH1cIiwgZ290IFwiJHthY3R1YWx9XCJgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdEZsb2F0KGFjdHVhbDogbnVtYmVyLCBleHBlY3RlZDogbnVtYmVyLCB0b2xlcmFuY2UgPSAwLjAwMSwgZXJyb3I/OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKChhY3R1YWwgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSB8fFxuICAgIChhY3R1YWwgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKSB8fFxuICAgIChhY3R1YWwgPT09IE51bWJlci5OYU4gJiYgZXhwZWN0ZWQgPT09IE51bWJlci5OYU4pIHx8IChpc05hTihhY3R1YWwpICYmIGlzTmFOKGV4cGVjdGVkKSkpXG4gICAgcmV0dXJuO1xuICBjb25zdCBhcmVFcXVhbCA9IE1hdGguYWJzKGFjdHVhbCAtIGV4cGVjdGVkKSA8IHRvbGVyYW5jZTtcbiAgZXhwZWN0KGFyZUVxdWFsLCB0cnVlLCBgJHtlcnJvciA/PyAnJ30gKHRvbGVyYW5jZSA9ICR7dG9sZXJhbmNlfSlgKTtcbiAgaWYgKCFhcmVFcXVhbClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXhwZWN0ZWR9LCBnb3QgJHthY3R1YWx9ICh0b2xlcmFuY2UgPSAke3RvbGVyYW5jZX0pYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RUYWJsZShhY3R1YWw6IERHLkRhdGFGcmFtZSwgZXhwZWN0ZWQ6IERHLkRhdGFGcmFtZSwgZXJyb3I/OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgZXhwZWN0ZWRSb3dDb3VudCA9IGV4cGVjdGVkLnJvd0NvdW50O1xuICBjb25zdCBhY3R1YWxSb3dDb3VudCA9IGFjdHVhbC5yb3dDb3VudDtcbiAgZXhwZWN0KGFjdHVhbFJvd0NvdW50LCBleHBlY3RlZFJvd0NvdW50LCBgJHtlcnJvciA/PyAnJ30sIHJvdyBjb3VudGApO1xuXG4gIGZvciAoY29uc3QgY29sdW1uIG9mIGV4cGVjdGVkLmNvbHVtbnMpIHtcbiAgICBjb25zdCBhY3R1YWxDb2x1bW4gPSBhY3R1YWwuY29sdW1ucy5ieU5hbWUoY29sdW1uLm5hbWUpO1xuICAgIGlmIChhY3R1YWxDb2x1bW4gPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uICR7Y29sdW1uLm5hbWV9IG5vdCBmb3VuZGApO1xuICAgIGlmIChhY3R1YWxDb2x1bW4udHlwZSAhPSBjb2x1bW4udHlwZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uICR7Y29sdW1uLm5hbWV9IHR5cGUgZXhwZWN0ZWQgJHtjb2x1bW4udHlwZX0gZ290ICR7YWN0dWFsQ29sdW1uLnR5cGV9YCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHBlY3RlZFJvd0NvdW50OyBpKyspIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY29sdW1uLmdldChpKTtcbiAgICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gYWN0dWFsQ29sdW1uLmdldChpKTtcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PSBERy5UWVBFLkZMT0FUKVxuICAgICAgICBleHBlY3RGbG9hdChhY3R1YWxWYWx1ZSwgdmFsdWUsIDAuMDAwMSwgZXJyb3IpO1xuICAgICAgZWxzZSBpZiAoY29sdW1uLnR5cGUgPT0gREcuVFlQRS5EQVRFX1RJTUUpXG4gICAgICAgIGV4cGVjdChhY3R1YWxWYWx1ZS5pc1NhbWUodmFsdWUpLCB0cnVlLCBlcnJvcik7XG4gICAgICBlbHNlXG4gICAgICAgIGV4cGVjdChhY3R1YWxWYWx1ZSwgdmFsdWUsIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdE9iamVjdChhY3R1YWw6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGV4cGVjdGVkOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XG4gIGZvciAoY29uc3QgW2V4cGVjdGVkS2V5LCBleHBlY3RlZFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhleHBlY3RlZCkpIHtcbiAgICBpZiAoIWFjdHVhbC5oYXNPd25Qcm9wZXJ0eShleHBlY3RlZEtleSkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHByb3BlcnR5IFwiJHtleHBlY3RlZEtleX1cIiBub3QgZm91bmRgKTtcblxuICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gYWN0dWFsW2V4cGVjdGVkS2V5XTtcbiAgICBpZiAoYWN0dWFsVmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZFZhbHVlIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICBleHBlY3RBcnJheShhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgZWxzZSBpZiAoYWN0dWFsVmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgZXhwZWN0ZWRWYWx1ZSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgIGV4cGVjdE9iamVjdChhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgZWxzZSBpZiAoTnVtYmVyLmlzRmluaXRlKGFjdHVhbFZhbHVlKSAmJiBOdW1iZXIuaXNGaW5pdGUoZXhwZWN0ZWRWYWx1ZSkpXG4gICAgICBleHBlY3RGbG9hdChhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgZWxzZSBpZiAoYWN0dWFsVmFsdWUgIT0gZXhwZWN0ZWRWYWx1ZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgKCR7ZXhwZWN0ZWRWYWx1ZX0pIGZvciBrZXkgJyR7ZXhwZWN0ZWRLZXl9JywgZ290ICgke2FjdHVhbFZhbHVlfSlgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0QXJyYXkoYWN0dWFsOiBBcnJheUxpa2U8YW55PiwgZXhwZWN0ZWQ6IEFycmF5TGlrZTxhbnk+KSB7XG4gIGNvbnN0IGFjdHVhbExlbmd0aCA9IGFjdHVhbC5sZW5ndGg7XG4gIGNvbnN0IGV4cGVjdGVkTGVuZ3RoID0gZXhwZWN0ZWQubGVuZ3RoO1xuXG4gIGlmIChhY3R1YWxMZW5ndGggIT0gZXhwZWN0ZWRMZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5cyBhcmUgb2YgZGlmZmVyZW50IGxlbmd0aDogYWN0dWFsIGFycmF5IGxlbmd0aCBpcyAke2FjdHVhbExlbmd0aH0gYCArXG4gICAgICBgYW5kIGV4cGVjdGVkIGFycmF5IGxlbmd0aCBpcyAke2V4cGVjdGVkTGVuZ3RofWApO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWxMZW5ndGg7IGkrKykge1xuICAgIGlmIChhY3R1YWxbaV0gaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgZXhwZWN0QXJyYXkoYWN0dWFsW2ldLCBleHBlY3RlZFtpXSk7XG4gICAgZWxzZSBpZiAoYWN0dWFsW2ldIGluc3RhbmNlb2YgT2JqZWN0ICYmIGV4cGVjdGVkW2ldIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgICAgZXhwZWN0T2JqZWN0KGFjdHVhbFtpXSwgZXhwZWN0ZWRbaV0pO1xuICAgIGVsc2UgaWYgKGFjdHVhbFtpXSAhPSBleHBlY3RlZFtpXSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtleHBlY3RlZFtpXX0gYXQgcG9zaXRpb24gJHtpfSwgZ290ICR7YWN0dWFsW2ldfWApO1xuICB9XG59XG5cbi8qIERlZmluZXMgYSB0ZXN0IHN1aXRlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhdGVnb3J5KGNhdGVnb3J5OiBzdHJpbmcsIHRlc3RzXzogKCkgPT4gdm9pZCwgb3B0aW9ucz86IENhdGVnb3J5T3B0aW9ucyk6IHZvaWQge1xuICBjdXJyZW50Q2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgdGVzdHNfKCk7XG4gIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldKSB7XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5jbGVhciA9IG9wdGlvbnM/LmNsZWFyID8/IHRydWU7XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50aW1lb3V0ID0gb3B0aW9ucz8udGltZW91dDtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmJlbmNobWFya3MgPSBvcHRpb25zPy5iZW5jaG1hcmtzO1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uc3RyZXNzVGVzdHMgPSBvcHRpb25zPy5zdHJlc3NUZXN0cztcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLm93bmVyID0gb3B0aW9ucz8ub3duZXI7XG4gIH1cbn1cblxuLyogRGVmaW5lcyBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYmVmb3JlKGJlZm9yZTogKCkgPT4gUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmJlZm9yZSA9IGJlZm9yZTtcbn1cblxuLyogRGVmaW5lcyBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSB0ZXN0cyBpbiB0aGlzIGNhdGVnb3J5IGFyZSBleGVjdXRlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZnRlcihhZnRlcjogKCkgPT4gUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmFmdGVyID0gYWZ0ZXI7XG59XG5cbmZ1bmN0aW9uIGFkZE5hbWVzcGFjZShzOiBzdHJpbmcsIGY6IERHLkZ1bmMpOiBzdHJpbmcge1xuICByZXR1cm4gcy5yZXBsYWNlKG5ldyBSZWdFeHAoZi5uYW1lLCAnZ2knKSwgZi5ucU5hbWUpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5pdEF1dG9UZXN0cyhwYWNrYWdlXzogREcuUGFja2FnZSwgbW9kdWxlPzogYW55KSB7XG4gIGNvbnN0IHBhY2thZ2VJZCA9IHBhY2thZ2VfLmlkO1xuICBpZiAod2FzUmVnaXN0ZXJlZFtwYWNrYWdlSWRdKSByZXR1cm47XG4gIGNvbnN0IG1vZHVsZVRlc3RzID0gbW9kdWxlID8gbW9kdWxlLnRlc3RzIDogdGVzdHM7XG4gIGlmIChwYWNrYWdlXy5uYW1lID09PSAnRGV2VG9vbHMnIHx8ICghIW1vZHVsZSAmJiBtb2R1bGUuX3BhY2thZ2UubmFtZSA9PT0gJ0RldlRvb2xzJykpIHtcbiAgICBmb3IgKGNvbnN0IGYgb2YgKDxhbnk+d2luZG93KS5kYXJ0VGVzdHMpIHtcbiAgICAgIGNvbnN0IGFyciA9IGYubmFtZS5zcGxpdCgvXFxzKlxcfFxccyohL2cpO1xuICAgICAgbGV0IG5hbWUgPSBhcnIucG9wKCkgPz8gZi5uYW1lO1xuICAgICAgbGV0IGNhdCA9IGFyci5sZW5ndGggPyBjb3JlQ2F0TmFtZSArICc6ICcgKyBhcnIuam9pbignOiAnKSA6IGNvcmVDYXROYW1lO1xuICAgICAgbGV0IGZ1bGxOYW1lOiBzdHJpbmdbXSA9IG5hbWUuc3BsaXQoJyB8ICcpO1xuICAgICAgbmFtZSA9IGZ1bGxOYW1lW2Z1bGxOYW1lLmxlbmd0aCAtIDFdO1xuICAgICAgZnVsbE5hbWUudW5zaGlmdChjYXQpO1xuICAgICAgZnVsbE5hbWUucG9wKCk7XG4gICAgICBjYXQgPSBmdWxsTmFtZS5qb2luKCc6ICcpO1xuICAgICAgaWYgKG1vZHVsZVRlc3RzW2NhdF0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgbW9kdWxlVGVzdHNbY2F0XSA9IHsgdGVzdHM6IFtdLCBjbGVhcjogdHJ1ZSB9O1xuICAgICAgbW9kdWxlVGVzdHNbY2F0XS50ZXN0cy5wdXNoKG5ldyBUZXN0KGNhdCwgbmFtZSwgZi50ZXN0LCB7IGlzQWdncmVnYXRlZDogZmFsc2UsIHRpbWVvdXQ6IGYub3B0aW9ucz8udGltZW91dCA/PyBTVEFOREFSVF9USU1FT1VULCBza2lwUmVhc29uOiBmLm9wdGlvbnM/LnNraXBSZWFzb24sIG93bmVyOiBmLm9wdGlvbnM/Lm93bmVyLCBiZW5jaG1hcms6IGYub3B0aW9ucz8uYmVuY2htYXJrID8/IGZhbHNlIH0pKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgbW9kdWxlQXV0b1Rlc3RzID0gW107XG4gIGNvbnN0IG1vZHVsZURlbW8gPSBbXTtcbiAgY29uc3QgbW9kdWxlRGV0ZWN0b3JzID0gW107XG4gIGNvbnN0IHBhY2tGdW5jdGlvbnMgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmZpbHRlcihgcGFja2FnZS5pZCA9IFwiJHtwYWNrYWdlSWR9XCJgKS5saXN0KCk7XG4gIGNvbnN0IHJlZyA9IG5ldyBSZWdFeHAoL3NraXA6XFxzKihbXixcXHNdKyl8d2FpdDpcXHMqKFxcZCspfGNhdDpcXHMqKFteLFxcc10rKXx0aW1lb3V0OlxccyooXFxkKykvZyk7XG4gIGZvciAoY29uc3QgZiBvZiBwYWNrRnVuY3Rpb25zKSB7XG4gICAgY29uc3QgdGVzdHMgPSBmLm9wdGlvbnNbJ3Rlc3QnXTtcbiAgICBjb25zdCBkZW1vID0gZi5vcHRpb25zWydkZW1vUGF0aCddO1xuICAgIGlmICgodGVzdHMgJiYgQXJyYXkuaXNBcnJheSh0ZXN0cykgJiYgdGVzdHMubGVuZ3RoKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByZXMgPSAodGVzdHNbaV0gYXMgc3RyaW5nKS5tYXRjaEFsbChyZWcpO1xuICAgICAgICBjb25zdCBtYXA6IHsgc2tpcD86IHN0cmluZywgd2FpdD86IG51bWJlciwgY2F0Pzogc3RyaW5nLCB0aW1lb3V0PzogbnVtYmVyLCBiZW5jaG1hcmtUaW1lb3V0PzogbnVtYmVyIH0gPSB7fTtcbiAgICAgICAgQXJyYXkuZnJvbShyZXMpLmZvckVhY2goKGFycikgPT4ge1xuICAgICAgICAgIGlmIChhcnJbMF0uc3RhcnRzV2l0aCgnc2tpcCcpKSBtYXBbJ3NraXAnXSA9IGFyclsxXTtcbiAgICAgICAgICBlbHNlIGlmIChhcnJbMF0uc3RhcnRzV2l0aCgnd2FpdCcpKSBtYXBbJ3dhaXQnXSA9IHBhcnNlSW50KGFyclsyXSk7XG4gICAgICAgICAgZWxzZSBpZiAoYXJyWzBdLnN0YXJ0c1dpdGgoJ2NhdCcpKSBtYXBbJ2NhdCddID0gYXJyWzNdO1xuICAgICAgICAgIGVsc2UgaWYgKGFyclswXS5zdGFydHNXaXRoKCd0aW1lb3V0JykpIG1hcFsndGltZW91dCddID0gcGFyc2VJbnQoYXJyWzRdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRlc3QgPSBuZXcgVGVzdChtYXAuY2F0ID8/IGF1dG9UZXN0c0NhdE5hbWUsIHRlc3RzLmxlbmd0aCA9PT0gMSA/IGYubmFtZSA6IGAke2YubmFtZX0gJHtpICsgMX1gLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZ3Jvay5mdW5jdGlvbnMuZXZhbChhZGROYW1lc3BhY2UodGVzdHNbaV0sIGYpKTtcbiAgICAgICAgICBpZiAobWFwLndhaXQpIGF3YWl0IGRlbGF5KG1hcC53YWl0KTtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICAgICAgICAgIGlmICh0eXBlb2YgcmVzID09PSAnYm9vbGVhbicgJiYgIXJlcykgdGhyb3cgYEZhaWxlZDogJHt0ZXN0c1tpXX0sIGV4cGVjdGVkIHRydWUsIGdvdCAke3Jlc31gO1xuICAgICAgICB9LCB7IHNraXBSZWFzb246IG1hcC5za2lwLCB0aW1lb3V0OiBERy5UZXN0LmlzSW5CZW5jaG1hcmsgPyBtYXAuYmVuY2htYXJrVGltZW91dCA/PyBCRU5DSE1BUktfVElNRU9VVCA6IG1hcC50aW1lb3V0ID8/IFNUQU5EQVJUX1RJTUVPVVQgfSk7XG4gICAgICAgIGlmIChtYXAuY2F0KSB7XG4gICAgICAgICAgY29uc3QgY2F0OiBzdHJpbmcgPSBtYXAuY2F0O1xuICAgICAgICAgIGlmIChtb2R1bGVUZXN0c1tjYXRdID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBtb2R1bGVUZXN0c1tjYXRdID0geyB0ZXN0czogW10sIGNsZWFyOiB0cnVlIH07XG5cbiAgICAgICAgICAvLyBvbmx5IGJlZm9yZS9hZnRlciBjYW4gYmUgZGVmaW5lZCBpbiB0cyBmaWxlcyB0ZXN0cyB1bmRlciB0aGUgY2F0ZWdvcnlcbiAgICAgICAgICBpZiAoIW1vZHVsZVRlc3RzW2NhdF0udGVzdHMpXG4gICAgICAgICAgICBtb2R1bGVUZXN0c1tjYXRdLnRlc3RzID0gW107XG4gICAgICAgICAgbW9kdWxlVGVzdHNbY2F0XS50ZXN0cy5wdXNoKHRlc3QpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBtb2R1bGVBdXRvVGVzdHMucHVzaCh0ZXN0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRlbW8pIHtcbiAgICAgIGNvbnN0IHdhaXQgPSBmLm9wdGlvbnNbJ2RlbW9XYWl0J10gPyBwYXJzZUludChmLm9wdGlvbnNbJ2RlbW9XYWl0J10pIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgdGVzdCA9IG5ldyBUZXN0KGRlbW9DYXROYW1lLCBmLmZyaWVuZGx5TmFtZSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBkZWxheSgzMDApO1xuICAgICAgICBncm9rLnNoZWxsLmNsZWFyTGFzdEVycm9yKCk7XG4gICAgICAgIGF3YWl0IGYuYXBwbHkoKTtcbiAgICAgICAgYXdhaXQgZGVsYXkod2FpdCA/IHdhaXQgOiAyMDAwKTtcbiAgICAgICAgY29uc3QgdW5oYW5kbGVkID0gYXdhaXQgZ3Jvay5zaGVsbC5sYXN0RXJyb3I7XG4gICAgICAgIGlmICh1bmhhbmRsZWQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHVuaGFuZGxlZCk7XG4gICAgICB9LCB7IHNraXBSZWFzb246IGYub3B0aW9uc1snZGVtb1NraXAnXSB9KTtcbiAgICAgIG1vZHVsZURlbW8ucHVzaCh0ZXN0KTtcbiAgICB9XG4gICAgaWYgKGYuaGFzVGFnKCdzZW1UeXBlRGV0ZWN0b3InKSkge1xuICAgICAgbGV0IGRldGVjdG9yc1Rlc3REYXRhID0gdGVzdERhdGE7XG4gICAgICBpZiAoZi5vcHRpb25zWyd0ZXN0RGF0YSddKSB7XG4gICAgICAgIGRldGVjdG9yc1Rlc3REYXRhID0gYXdhaXQgZ3Jvay5kYXRhLmZpbGVzLm9wZW5UYWJsZShgU3lzdGVtOkFwcERhdGEvJHtwYWNrYWdlXy5ucU5hbWV9LyR7Zi5vcHRpb25zWyd0ZXN0RGF0YSddfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0ZXN0ID0gbmV3IFRlc3QoZGV0ZWN0b3JzQ2F0TmFtZSwgZi5mcmllbmRseU5hbWUsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICAgIGNvbnNvbGUubG9nKGBTeXN0ZW06QXBwRGF0YS8ke3BhY2thZ2VfLm5xTmFtZX0vJHtmLm9wdGlvbnNbJ3Rlc3REYXRhJ119YCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgZGV0ZWN0b3JzVGVzdERhdGEuY2xvbmUoKS5jb2x1bW5zKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZi5hcHBseShbY29sXSk7XG4gICAgICAgICAgYXJyLnB1c2gocmVzIHx8IGNvbC5zZW1UeXBlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNBcnIgPSBhcnIuZmlsdGVyKChpKSA9PiBpKTtcbiAgICAgICAgZXhwZWN0KHJlc0Fyci5sZW5ndGgsIDEpO1xuXG4gICAgICAgIGlmIChmLm9wdGlvbnNbJ3Rlc3REYXRhQ29sdW1uTmFtZSddKVxuICAgICAgICAgIGV4cGVjdChyZXNBcnJbMF0sIGYub3B0aW9uc1sndGVzdERhdGFDb2x1bW5OYW1lJ10pO1xuXG4gICAgICB9LCB7IHNraXBSZWFzb246IGYub3B0aW9uc1snc2tpcFRlc3QnXSB9KTtcbiAgICAgIG1vZHVsZURldGVjdG9ycy5wdXNoKHRlc3QpO1xuICAgIH1cbiAgfVxuICB3YXNSZWdpc3RlcmVkW3BhY2thZ2VJZF0gPSB0cnVlO1xuICBpZiAobW9kdWxlQXV0b1Rlc3RzLmxlbmd0aCA+IDApXG4gICAgbW9kdWxlVGVzdHNbYXV0b1Rlc3RzQ2F0TmFtZV0gPSB7IHRlc3RzOiBtb2R1bGVBdXRvVGVzdHMsIGNsZWFyOiB0cnVlIH07XG4gIGlmIChtb2R1bGVEZW1vLmxlbmd0aCA+IDApXG4gICAgbW9kdWxlVGVzdHNbZGVtb0NhdE5hbWVdID0geyB0ZXN0czogbW9kdWxlRGVtbywgY2xlYXI6IHRydWUgfTtcbiAgaWYgKG1vZHVsZURldGVjdG9ycy5sZW5ndGggPiAwKVxuICAgIG1vZHVsZVRlc3RzW2RldGVjdG9yc0NhdE5hbWVdID0geyB0ZXN0czogbW9kdWxlRGV0ZWN0b3JzLCBjbGVhcjogZmFsc2UgfTtcbn1cblxuZnVuY3Rpb24gcmVkZWZpbmVDb25zb2xlKCk6IGFueVtdIHtcbiAgY29uc3QgbG9nczogYW55W10gPSBbXTtcbiAgY29uc29sZS5sb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIGxvZ3MucHVzaCguLi5hcmdzKTtcbiAgICBzdGRMb2coLi4uYXJncyk7XG4gIH07XG4gIGNvbnNvbGUuaW5mbyA9ICguLi5hcmdzKSA9PiB7XG4gICAgbG9ncy5wdXNoKC4uLmFyZ3MpO1xuICAgIHN0ZEluZm8oLi4uYXJncyk7XG4gIH07XG4gIGNvbnNvbGUud2FybiA9ICguLi5hcmdzKSA9PiB7XG4gICAgbG9ncy5wdXNoKC4uLmFyZ3MpO1xuICAgIHN0ZFdhcm4oLi4uYXJncyk7XG4gIH07XG4gIGNvbnNvbGUuZXJyb3IgPSAoLi4uYXJncykgPT4ge1xuICAgIGxvZ3MucHVzaCguLi5hcmdzKTtcbiAgICBzdGRFcnJvciguLi5hcmdzKTtcbiAgfTtcbiAgcmV0dXJuIGxvZ3M7XG59XG5cbmZ1bmN0aW9uIHJlc2V0Q29uc29sZSgpOiB2b2lkIHtcbiAgY29uc29sZS5sb2cgPSBzdGRMb2c7XG4gIGNvbnNvbGUuaW5mbyA9IHN0ZEluZm87XG4gIGNvbnNvbGUud2FybiA9IHN0ZFdhcm47XG4gIGNvbnNvbGUuZXJyb3IgPSBzdGRFcnJvcjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blRlc3RzKG9wdGlvbnM/OiBUZXN0RXhlY3V0aW9uT3B0aW9ucykgOiBQcm9taXNlPFRlc3RSZXN1bHRFeHRlbmRlZFtdPntcbiAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLS0tLS0tJylcbiAgY29uc3QgcGFja2FnZV8gPSBncm9rLmZ1bmN0aW9ucy5nZXRDdXJyZW50Q2FsbCgpPy5mdW5jPy5wYWNrYWdlITtcbiAgY29uc3QgcGFja2FnZU93bmVyID0gKChwYWNrYWdlXz8ucGFja2FnZU93bmVyID8/ICcnKS5tYXRjaChuZXcgUmVnRXhwKCdbXjxdKjwoW14+XSopPicpKSA/PyBbJycsICcnXSlbMV07XG4gIGF3YWl0IGluaXRBdXRvVGVzdHMocGFja2FnZV8pO1xuICBjb25zdCByZXN1bHRzOlRlc3RSZXN1bHRFeHRlbmRlZFtdID0gW107XG4gIGNvbnNvbGUubG9nKGBSdW5uaW5nIHRlc3RzYCk7XG4gIGNvbnNvbGUubG9nKG9wdGlvbnMpO1xuICBvcHRpb25zID8/PSB7fTtcbiAgb3B0aW9ucyEudGVzdENvbnRleHQgPz89IG5ldyBUZXN0Q29udGV4dCgpO1xuICBncm9rLnNoZWxsLmNsZWFyTGFzdEVycm9yKCk7XG4gIGNvbnN0IGxvZ3MgPSByZWRlZmluZUNvbnNvbGUoKTtcblxuICBhd2FpdCBpbnZva2VUZXN0cyh0ZXN0cywgb3B0aW9ucyk7XG5cbiAgZm9yIChsZXQgciBvZiByZXN1bHRzKSB7XG4gICAgci5yZXN1bHQgPSByLnJlc3VsdC50b1N0cmluZygpLnJlcGxhY2UoL1wiL2csICdcXCcnKTtcbiAgICBpZiAoci5sb2dzICE9IHVuZGVmaW5lZClcbiAgICAgIHIubG9ncyA9IHIubG9ncyEudG9TdHJpbmcoKS5yZXBsYWNlKC9cIi9nLCAnXFwnJyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG5cbiAgYXN5bmMgZnVuY3Rpb24gaW52b2tlQ2F0ZWdvcnlNZXRob2QobWV0aG9kOiAoKCkgPT4gUHJvbWlzZTx2b2lkPikgfCB1bmRlZmluZWQsIGNhdGVnb3J5OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGxldCBpbnZva2F0aW9uUmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBpZiAobWV0aG9kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYXdhaXQgdGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgbWV0aG9kKCk7XG4gICAgICAgIH0sIDEwMDAwMCwgYGJlZm9yZSAke2NhdGVnb3J5fTogdGltZW91dCBlcnJvcmApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKHg6IGFueSkge1xuICAgICAgaW52b2thdGlvblJlc3VsdCA9IGF3YWl0IGdldFJlc3VsdCh4KTtcbiAgICB9XG4gICAgcmV0dXJuIGludm9rYXRpb25SZXN1bHRcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGludm9rZVRlc3RzSW5DYXRlZ29yeShjYXRlZ29yeTogQ2F0ZWdvcnksIG9wdGlvbnM6IFRlc3RFeGVjdXRpb25PcHRpb25zKTogUHJvbWlzZTxUZXN0UmVzdWx0RXh0ZW5kZWRbXT4ge1xuICAgIGxldCB0ID0gY2F0ZWdvcnkudGVzdHMgPz8gW107XG4gICAgY29uc3QgcmVzIDogVGVzdFJlc3VsdEV4dGVuZGVkW10gPSBbXTtcbiAgICAvLyBsZXQgbWVtb3J5VXNhZ2VCZWZvcmUgPSAod2luZG93Py5wZXJmb3JtYW5jZSBhcyBhbnkpPy5tZW1vcnk/LnVzZWRKU0hlYXBTaXplO1xuICAgIGNvbnN0IHdpZGdldHNCZWZvcmUgPSBnZXRXaWRnZXRzQ291bnRTYWZlKCk7XG5cbiAgICBpZiAoY2F0ZWdvcnkuY2xlYXIpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdC5sZW5ndGg7IGkrKykge1xuXG4gICAgICAgIGlmICh0W2ldLm9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAodFtpXS5vcHRpb25zPy5iZW5jaG1hcmsgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKCF0W2ldLm9wdGlvbnMpXG4gICAgICAgICAgICAgIHRbaV0ub3B0aW9ucyA9IHt9XG4gICAgICAgICAgICB0W2ldLm9wdGlvbnMhLmJlbmNobWFyayA9IGNhdGVnb3J5LmJlbmNobWFya3MgPz8gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCB0ZXN0ID0gdFtpXTtcbiAgICAgICAgaWYgKG9wdGlvbnMudGVzdClcbiAgICAgICAgICBpZiAob3B0aW9ucy50ZXN0LnRvTG93ZXJDYXNlKCkgIT09IHRlc3QubmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmICh0ZXN0Py5vcHRpb25zKSB7XG4gICAgICAgICAgdGVzdC5vcHRpb25zLm93bmVyID0gdFtpXS5vcHRpb25zPy5vd25lciA/PyBjYXRlZ29yeT8ub3duZXIgPz8gcGFja2FnZU93bmVyID8/ICcnO1xuICAgICAgICB9XG4gICAgICAgIC8vIGxldCBpc0dCRW5hYmxlID0gKHdpbmRvdyBhcyBhbnkpLmdjICYmIHRlc3Qub3B0aW9ucz8uc2tpcFJlYXNvbiA9PSB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGAqKioqKioqKiR7aXNHQkVuYWJsZX1gKTtcbiAgICAgICAgLy8gaWYgKGlzR0JFbmFibGUpXG4gICAgICAgIC8vICAgYXdhaXQgKHdpbmRvdyBhcyBhbnkpLmdjKCk7XG4gICAgICAgIC8vIG1lbW9yeVVzYWdlQmVmb3JlID0gKHdpbmRvdz8ucGVyZm9ybWFuY2UgYXMgYW55KT8ubWVtb3J5Py51c2VkSlNIZWFwU2l6ZTtcbiAgICAgICAgbGV0IHRlc3RSdW4gPSBhd2FpdCBleGVjVGVzdCh0ZXN0LCBvcHRpb25zPy50ZXN0LCBsb2dzLCBERy5UZXN0LmlzSW5CZW5jaG1hcmsgPyB0W2ldLm9wdGlvbnM/LmJlbmNobWFya1RpbWVvdXQgPz8gQkVOQ0hNQVJLX1RJTUVPVVQgOiB0W2ldLm9wdGlvbnM/LnRpbWVvdXQgPz8gU1RBTkRBUlRfVElNRU9VVCwgcGFja2FnZV8ubmFtZSwgb3B0aW9ucy52ZXJib3NlKTtcblxuICAgICAgICAvLyBpZiAoaXNHQkVuYWJsZSlcbiAgICAgICAgLy8gICBhd2FpdCAod2luZG93IGFzIGFueSkuZ2MoKTtcbiAgICAgICAgaWYgKHRlc3RSdW4pXG4gICAgICAgICAgcmVzLnB1c2goeyAuLi50ZXN0UnVuLCAgd2lkZ2V0c0RpZmZlcmVuY2U6IGdldFdpZGdldHNDb3VudFNhZmUoKSAtIHdpZGdldHNCZWZvcmUgfSk7XG4gICAgICAgIC8vIHJlcy5wdXNoKHsgLi4udGVzdFJ1biwgbWVtb3J5RGVsdGE6ICh3aW5kb3c/LnBlcmZvcm1hbmNlIGFzIGFueSk/Lm1lbW9yeT8udXNlZEpTSGVhcFNpemUgLSBtZW1vcnlVc2FnZUJlZm9yZSwgd2lkZ2V0c0RlbHRhOiBnZXRXaWRnZXRzQ291bnRTYWZlKCkgLSB3aWRnZXRzQmVmb3JlIH0pO1xuXG4gICAgICAgIGdyb2suc2hlbGwuY2xvc2VBbGwoKTtcbiAgICAgICAgREcuQmFsbG9vbi5jbG9zZUFsbCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IHRlc3QgPSB0W2ldO1xuICAgICAgICBpZiAob3B0aW9ucy50ZXN0KVxuICAgICAgICAgIGlmIChvcHRpb25zLnRlc3QudG9Mb3dlckNhc2UoKSAhPT0gdGVzdC5uYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICBpZiAodGVzdD8ub3B0aW9ucykge1xuICAgICAgICAgIHRlc3Qub3B0aW9ucy5vd25lciA9IHRbaV0ub3B0aW9ucz8ub3duZXIgPz8gY2F0ZWdvcnk/Lm93bmVyID8/IHBhY2thZ2VPd25lciA/PyAnJztcbiAgICAgICAgfVxuICAgICAgICAvLyBsZXQgaXNHQkVuYWJsZSA9ICh3aW5kb3cgYXMgYW55KS5nYyAmJiB0ZXN0Lm9wdGlvbnM/LnNraXBSZWFzb24gPT0gdW5kZWZpbmVkO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgKioqKioqKioke2lzR0JFbmFibGV9YCk7XG4gICAgICAgIC8vIGlmIChpc0dCRW5hYmxlKVxuICAgICAgICAvLyAgIGF3YWl0ICh3aW5kb3cgYXMgYW55KS5nYygpO1xuICAgICAgICAvLyBtZW1vcnlVc2FnZUJlZm9yZSA9ICh3aW5kb3c/LnBlcmZvcm1hbmNlIGFzIGFueSk/Lm1lbW9yeT8udXNlZEpTSGVhcFNpemU7XG4gICAgICAgIGxldCB0ZXN0UnVuID0gYXdhaXQgZXhlY1Rlc3QodGVzdCwgb3B0aW9ucz8udGVzdCwgbG9ncywgREcuVGVzdC5pc0luQmVuY2htYXJrID8gdFtpXS5vcHRpb25zPy5iZW5jaG1hcmtUaW1lb3V0ID8/IEJFTkNITUFSS19USU1FT1VUIDogdFtpXS5vcHRpb25zPy50aW1lb3V0LCBwYWNrYWdlXy5uYW1lLCBvcHRpb25zLnZlcmJvc2UpO1xuXG4gICAgICAgIC8vIGlmIChpc0dCRW5hYmxlKVxuICAgICAgICAvLyAgIGF3YWl0ICh3aW5kb3cgYXMgYW55KS5nYygpO1xuICAgICAgICBcbiAgICAgICAgaWYgKHRlc3RSdW4pXG4gICAgICAgICAgcmVzLnB1c2goeyAuLi50ZXN0UnVuLCB3aWRnZXRzRGlmZmVyZW5jZTogZ2V0V2lkZ2V0c0NvdW50U2FmZSgpIC0gd2lkZ2V0c0JlZm9yZSB9KTtcbiAgICAgICAgLy8gcmVzLnB1c2goeyAuLi50ZXN0UnVuLCBtZW1vcnlEZWx0YTogKHdpbmRvdz8ucGVyZm9ybWFuY2UgYXMgYW55KT8ubWVtb3J5Py51c2VkSlNIZWFwU2l6ZSAtIG1lbW9yeVVzYWdlQmVmb3JlLCB3aWRnZXRzRGlmZmVyZW5jZTogZ2V0V2lkZ2V0c0NvdW50U2FmZSgpIC0gd2lkZ2V0c0JlZm9yZSB9KTtcblxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0V2lkZ2V0c0NvdW50U2FmZSgpIHtcbiAgICBsZXQgbGVuZ3RoID0gLTE7XG4gICAgdHJ5IHtcbiAgICAgIGxlbmd0aCA9IERHLldpZGdldC5nZXRBbGwoKS5sZW5ndGg7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBjb25zb2xlLndhcm4oZS5tZXNzYWdlID8/IGUpO1xuICAgIH1cbiAgICByZXR1cm4gbGVuZ3RoO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gaW52b2tlVGVzdHMoY2F0ZWdvcmllc1RvSW52b2tlOiB7IFtrZXk6IHN0cmluZ106IENhdGVnb3J5IH0sIG9wdGlvbnM6IFRlc3RFeGVjdXRpb25PcHRpb25zKSB7XG4gICAgdHJ5IHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNhdGVnb3JpZXNUb0ludm9rZSkpIHtcbiAgICAgICAgaWYgKCghIW9wdGlvbnM/LmNhdGVnb3J5ICYmICFrZXkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG9wdGlvbnM/LmNhdGVnb3J5LnRvTG93ZXJDYXNlKCkpKSB8fFxuICAgICAgICAgIG9wdGlvbnMuZXhjbHVkZT8uc29tZSgoYykgPT4ga2V5LnN0YXJ0c1dpdGgoYykpKVxuICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIHN0ZExvZyhgU3RhcnRlZCAke2tleX0gY2F0ZWdvcnlgKTtcbiAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgIGNvbnN0IHNraXBwZWQgPSB2YWx1ZS50ZXN0cz8uZXZlcnkoKHQ6IFRlc3QpID0+IHQub3B0aW9ucz8uc2tpcFJlYXNvbik7XG4gICAgICAgIGlmICghc2tpcHBlZClcbiAgICAgICAgICB2YWx1ZS5iZWZvcmVTdGF0dXMgPSBhd2FpdCBpbnZva2VDYXRlZ29yeU1ldGhvZCh2YWx1ZS5iZWZvcmUsIG9wdGlvbnMuY2F0ZWdvcnkgPz8gJycpO1xuXG4gICAgICAgIGxldCB0ID0gdmFsdWUudGVzdHMgPz8gW107XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc3RyZXNzVGVzdCkge1xuICAgICAgICAgIHQgPSB0LmZpbHRlcigoZSkgPT4gZS5vcHRpb25zPy5zdHJlc3NUZXN0KTtcbiAgICAgICAgICB0ID0gc2h1ZmZsZSh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgob3B0aW9ucy50YWdzPy5sZW5ndGggPz8gMCkgPiAwKSB7XG4gICAgICAgICAgdCA9IHQuZmlsdGVyKChlKSA9PlxuICAgICAgICAgICAgZS5vcHRpb25zPy50YWdzPy5zb21lKHRhZyA9PiAob3B0aW9ucz8udGFncyA/PyBbXSkuaW5jbHVkZXModGFnKSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlczogVGVzdFJlc3VsdEV4dGVuZGVkW107XG4gICAgICAgIGlmICh2YWx1ZS5iZWZvcmVTdGF0dXMpIHtcbiAgICAgICAgICByZXMgPSBBcnJheS5mcm9tKHQubWFwKCh0ZXN0RWxlbSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgIGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwgY2F0ZWdvcnk6IGtleSwgbmFtZTogdGVzdEVsZW0ubmFtZSwgc3VjY2VzczogZmFsc2UsIHJlc3VsdDogJ2JlZm9yZSgpIGZhaWxlZCcsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSwgbG9nczogJycsb3duZXI6IHBhY2thZ2VfPy5wYWNrYWdlT3duZXIsIHBhY2thZ2U6IHBhY2thZ2VfLm5hbWUsIHdpZGdldHNEaWZmZXJlbmNlOiAgMCwgZmxha2luZzogREcuVGVzdC5pc1JlcHJvZHVjaW5nIH07XG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIHJlcy5mb3JFYWNoKGFzeW5jICh0ZXN0KSA9PiByZXBvcnRUZXN0KCdwYWNrYWdlJywgdGVzdCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZXMgPSBhd2FpdCBpbnZva2VUZXN0c0luQ2F0ZWdvcnkodmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBkYXRhIDogVGVzdFJlc3VsdEV4dGVuZGVkW10gPSByZXMuZmlsdGVyKChkKSA9PiBkLnJlc3VsdCAhPSAnc2tpcHBlZCcpO1xuXG4gICAgICAgIGlmICghc2tpcHBlZClcbiAgICAgICAgICB2YWx1ZS5hZnRlclN0YXR1cyA9IGF3YWl0IGludm9rZUNhdGVnb3J5TWV0aG9kKHZhbHVlLmFmdGVyLCBvcHRpb25zLmNhdGVnb3J5ID8/ICcnKTtcblxuICAgICAgICAvLyBDbGVhciBhZnRlciBjYXRlZ29yeVxuICAgICAgICAvLyBncm9rLnNoZWxsLmNsb3NlQWxsKCk7XG4gICAgICAgIC8vIERHLkJhbGxvb24uY2xvc2VBbGwoKTtcbiAgICAgICAgaWYgKHZhbHVlLmFmdGVyU3RhdHVzKVxuICAgICAgICAgIGRhdGEucHVzaCh7IGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwgY2F0ZWdvcnk6IGtleSwgbmFtZTogJ2FmdGVyJywgc3VjY2VzczogZmFsc2UsIHJlc3VsdDogdmFsdWUuYWZ0ZXJTdGF0dXMsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSwgbG9nczogJycsb3duZXI6IHBhY2thZ2VfPy5wYWNrYWdlT3duZXIsIHBhY2thZ2U6IHBhY2thZ2VfLm5hbWUsIHdpZGdldHNEaWZmZXJlbmNlOiAgMCwgZmxha2luZzogREcuVGVzdC5pc1JlcHJvZHVjaW5nIH0pO1xuICAgICAgICBpZiAodmFsdWUuYmVmb3JlU3RhdHVzKVxuICAgICAgICAgIGRhdGEucHVzaCh7IGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwgY2F0ZWdvcnk6IGtleSwgbmFtZTogJ2JlZm9yZScsIHN1Y2Nlc3M6IGZhbHNlLCByZXN1bHQ6IHZhbHVlLmJlZm9yZVN0YXR1cywgbXM6IDAsIHNraXBwZWQ6IGZhbHNlLCBsb2dzOiAnJyxvd25lcjogcGFja2FnZV8/LnBhY2thZ2VPd25lciwgcGFja2FnZTogcGFja2FnZV8ubmFtZSwgd2lkZ2V0c0RpZmZlcmVuY2U6ICAwLCBmbGFraW5nOiBERy5UZXN0LmlzUmVwcm9kdWNpbmd9KTtcbiAgICAgICAgcmVzdWx0cy5wdXNoKC4uLmRhdGEpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICByZXNldENvbnNvbGUoKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudGVzdENvbnRleHQhLmNhdGNoVW5oYW5kbGVkICYmICghREcuVGVzdC5pc0luQmVuY2htYXJrKSkge1xuICAgICAgYXdhaXQgZGVsYXkoMTAwMCk7XG4gICAgICBjb25zdCBlcnJvciA9IGF3YWl0IGdyb2suc2hlbGwubGFzdEVycm9yO1xuICAgICAgY29uc3QgcGFyYW1zIDogYW55ID0ge1xuICAgICAgICBsb2dzOiAnJyxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBjYXRlZ29yeTogJ1VuaGFuZGxlZCBleGNlcHRpb25zJyxcbiAgICAgICAgbmFtZTogJ0V4Y2VwdGlvbicsXG4gICAgICAgIHJlc3VsdDogZXJyb3IgPz8gJycsIFxuICAgICAgICBzdWNjZXNzOiAhZXJyb3IsIFxuICAgICAgICBtczogMCwgXG4gICAgICAgIHNraXBwZWQ6IGZhbHNlLFxuICAgICAgICBvd25lcjogcGFja2FnZU93bmVyID8/ICcnLFxuICAgICAgICAncGFja2FnZSc6IHBhY2thZ2VfLm5hbWUsXG4gICAgICAgIHdpZGdldHNEaWZmZXJlbmNlOiAwXG4gICAgICB9O1xuICAgICAgICBcbiAgICAgIHJlc3VsdHMucHVzaCh7Li4ucGFyYW1zLCAnZmxha2luZyc6IERHLlRlc3QuaXNSZXByb2R1Y2luZyAmJiAhZXJyb3J9KTtcbiAgICAgICg8YW55PnBhcmFtcykucGFja2FnZSA9IHBhY2thZ2VfLm5hbWU7XG4gICAgICBhd2FpdCByZXBvcnRUZXN0KCdwYWNrYWdlJywgcGFyYW1zKTtcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVwb3J0VGVzdCh0eXBlOiBzdHJpbmcsIHBhcmFtczogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICgoPGFueT5ncm9rLnNoZWxsKS5yZXBvcnRUZXN0ICE9IG51bGwpXG4gICAgYXdhaXQgKDxhbnk+Z3Jvay5zaGVsbCkucmVwb3J0VGVzdCh0eXBlLCBwYXJhbXMpO1xuICBlbHNlIHtcbiAgICBhd2FpdCBmZXRjaChgJHtncm9rLmRhcGkucm9vdH0vbG9nL3Rlc3RzLyR7dHlwZX1gLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJywgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBhcmFtcylcbiAgICB9KTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZXN1bHQoeDogYW55KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGAke3gudG9TdHJpbmcoKX1cXG4ke3guc3RhY2sgPyAoYXdhaXQgREcuTG9nZ2VyLnRyYW5zbGF0ZVN0YWNrVHJhY2UoeC5zdGFjaykpIDogJyd9YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY1Rlc3QodDogVGVzdCwgcHJlZGljYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQsIGxvZ3M6IGFueVtdLFxuICB0ZXN0VGltZW91dD86IG51bWJlciwgcGFja2FnZU5hbWU/OiBzdHJpbmcsIHZlcmJvc2U/OiBib29sZWFuKTogUHJvbWlzZTxUZXN0UmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gIGxvZ3MubGVuZ3RoID0gMDtcbiAgbGV0IHI6IFRlc3RSZXN1bHQ7XG4gIGxldCB0eXBlOiBzdHJpbmcgPSAncGFja2FnZSc7XG4gIGNvbnN0IGZpbHRlciA9IHByZWRpY2F0ZSAhPSB1bmRlZmluZWQgJiYgKHQubmFtZS50b0xvd2VyQ2FzZSgpICE9PSBwcmVkaWNhdGUudG9Mb3dlckNhc2UoKSk7XG4gIGxldCBza2lwID0gdC5vcHRpb25zPy5za2lwUmVhc29uIHx8IGZpbHRlcjtcbiAgbGV0IHNraXBSZWFzb24gPSBmaWx0ZXIgPyAnc2tpcHBlZCcgOiB0Lm9wdGlvbnM/LnNraXBSZWFzb247XG4gIGNvbnNvbGUubG9nKHRlc3QubmFtZSwgc2tpcCk7XG5cbiAgaWYgKERHLlRlc3QuaXNJbkJlbmNobWFyayAmJiAhdC5vcHRpb25zPy5iZW5jaG1hcmspIHtcbiAgICBzdGRMb2coYFNLSVBQRUQ6ICR7dC5jYXRlZ29yeX0gJHt0Lm5hbWV9IGRvZXNudCBhdmFpbGFibGUgaW4gYmVuY2htYXJrIG1vZGVgKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKCFza2lwKVxuICAgIHN0ZExvZyhgU3RhcnRlZCAke3QuY2F0ZWdvcnl9ICR7dC5uYW1lfWApO1xuICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gIGNvbnN0IHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHN0YXJ0KS50b0lTT1N0cmluZygpO1xuICB0cnkge1xuICAgIGlmIChza2lwKVxuICAgICAgciA9IHsgbmFtZTogdC5uYW1lLCBvd25lcjp0Lm9wdGlvbnM/Lm93bmVyID8/ICcnLCBjYXRlZ29yeTogdC5jYXRlZ29yeSwgbG9nczogJycsIGRhdGU6IHN0YXJ0RGF0ZSwgc3VjY2VzczogdHJ1ZSwgcmVzdWx0OiBza2lwUmVhc29uISwgbXM6IDAsIHNraXBwZWQ6IHRydWUsIHBhY2thZ2U6IHBhY2thZ2VOYW1lID8/ICcnLCBmbGFraW5nOiBERy5UZXN0LmlzUmVwcm9kdWNpbmd9O1xuICAgIGVsc2Uge1xuICAgICAgbGV0IHRpbWVvdXRfID0gdGVzdFRpbWVvdXQgPz8gU1RBTkRBUlRfVElNRU9VVDtcblxuICAgICAgaWYgKERHLlRlc3QuaXNQcm9maWxpbmcpXG4gICAgICAgIGNvbnNvbGUucHJvZmlsZShgJHt0LmNhdGVnb3J5fTogJHt0Lm5hbWV9YCk7XG5cbiAgICAgIHIgPSB7IG5hbWU6IHQubmFtZSwgb3duZXI6dC5vcHRpb25zPy5vd25lciA/PyAnJywgY2F0ZWdvcnk6IHQuY2F0ZWdvcnksIGxvZ3M6ICcnLCBkYXRlOiBzdGFydERhdGUsIHN1Y2Nlc3M6IHRydWUsIHJlc3VsdDogYXdhaXQgdGltZW91dCh0LnRlc3QsIHRpbWVvdXRfKSA/PyAnT0snLCBtczogMCwgc2tpcHBlZDogZmFsc2UgLCBwYWNrYWdlOiBwYWNrYWdlTmFtZSA/PyAnJywgZmxha2luZzogREcuVGVzdC5pc1JlcHJvZHVjaW5nfTtcblxuICAgICAgaWYgKERHLlRlc3QuaXNQcm9maWxpbmcpIHtcbiAgICAgICAgY29uc29sZS5wcm9maWxlRW5kKGAke3QuY2F0ZWdvcnl9OiAke3QubmFtZX1gKTtcbiAgICAgICAgZ3Jvay5zaGVsbC5pbmZvKGBQcm9maWxpbmcgb2YgJHt0LmNhdGVnb3J5fTogJHt0Lm5hbWV9IGZpbmlzaGVkIFxcbiBQbGVhc2UgZW5zdXJlIHRoYXQgeW91IGhhdmUgb3BlbmVkIERldlRvb2xzIChGMTIpIC8gUGVyZm9ybWFuY2UgcGFuZWwgYmVmb3JlIHRlc3Qgc3RhcnRzLmApO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoeDogYW55KSB7XG4gICAgc3RkRXJyb3IoeCk7XG4gICAgciA9IHsgbmFtZTogdC5uYW1lLCBvd25lcjp0Lm9wdGlvbnM/Lm93bmVyID8/ICcnLCBjYXRlZ29yeTogdC5jYXRlZ29yeSwgbG9nczogJycsIGRhdGU6IHN0YXJ0RGF0ZSwgc3VjY2VzczogZmFsc2UsIHJlc3VsdDogYXdhaXQgZ2V0UmVzdWx0KHgpLCBtczogMCwgc2tpcHBlZDogZmFsc2UsIHBhY2thZ2U6IHBhY2thZ2VOYW1lID8/ICcnLCBmbGFraW5nOiBmYWxzZX07XG4gIH1cbiAgaWYgKHQub3B0aW9ucz8uaXNBZ2dyZWdhdGVkICYmIHIucmVzdWx0LmNvbnN0cnVjdG9yID09PSBERy5EYXRhRnJhbWUpIHtcbiAgICBjb25zdCBjb2wgPSByLnJlc3VsdC5jb2woJ3N1Y2Nlc3MnKTtcbiAgICBpZiAoY29sKVxuICAgICAgci5zdWNjZXNzID0gY29sLnN0YXRzLnN1bSA9PT0gY29sLmxlbmd0aDtcbiAgICBpZiAoIXZlcmJvc2UpIHtcbiAgICAgIGNvbnN0IGRmID0gci5yZXN1bHQ7XG4gICAgICBkZi5jb2x1bW5zLnJlbW92ZSgnc3RhY2snKTtcbiAgICAgIGRmLnJvd3MucmVtb3ZlV2hlcmUoKHIpID0+IHIuZ2V0KCdzdWNjZXNzJykpO1xuICAgICAgci5yZXN1bHQgPSBkZjtcbiAgICB9XG4gICAgci5yZXN1bHQgPSByLnJlc3VsdC50b0NzdigpO1xuICB9XG4gIHIubG9ncyA9IGxvZ3Muam9pbignXFxuJyk7XG4gIHIubXMgPSBEYXRlLm5vdygpIC0gc3RhcnQ7XG4gIGlmICghc2tpcClcbiAgICBzdGRMb2coYEZpbmlzaGVkICR7dC5jYXRlZ29yeX0gJHt0Lm5hbWV9IGZvciAke3IubXN9IG1zYCk7XG4gIHIuY2F0ZWdvcnkgPSB0LmNhdGVnb3J5O1xuICByLm5hbWUgPSB0Lm5hbWU7XG4gIHIub3duZXIgPSB0Lm9wdGlvbnM/Lm93bmVyID8/ICcnO1xuICBpZiAoIWZpbHRlcikge1xuICAgIGxldCBwYXJhbXMgPSB7XG4gICAgICAnc3VjY2Vzcyc6IHIuc3VjY2VzcywgJ3Jlc3VsdCc6IHIucmVzdWx0LCAnbXMnOiByLm1zLCAnZGF0ZSc6IHIuZGF0ZSxcbiAgICAgICdza2lwcGVkJzogci5za2lwcGVkLCAnY2F0ZWdvcnknOiB0LmNhdGVnb3J5LCAnbmFtZSc6IHQubmFtZSwgJ2xvZ3MnOiByLmxvZ3MsICdvd25lcic6IHIub3duZXIsXG4gICAgICAnZmxha2luZyc6IERHLlRlc3QuaXNSZXByb2R1Y2luZyAmJiByLnN1Y2Nlc3MsXG4gICAgICAncGFja2FnZSc6IHIucGFja2FnZVxuICAgIH07XG4gICAgaWYgKHIucmVzdWx0LmNvbnN0cnVjdG9yID09IE9iamVjdCkge1xuICAgICAgY29uc3QgcmVzID0gT2JqZWN0LmtleXMoci5yZXN1bHQpLnJlZHVjZSgoYWNjLCBrKSA9PiAoeyAuLi5hY2MsIFsncmVzdWx0LicgKyBrXTogci5yZXN1bHRba10gfSksIHt9KTtcbiAgICAgIHBhcmFtcyA9IHsgLi4ucGFyYW1zLCAuLi5yZXMgfTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnJlc3VsdCBpbnN0YW5jZW9mIERHLkRhdGFGcmFtZSlcbiAgICAgIHBhcmFtcy5yZXN1bHQgPSBKU09OLnN0cmluZ2lmeShwYXJhbXMucmVzdWx0Py50b0pzb24oKSkgfHwgJyc7XG5cbiAgICBhd2FpdCByZXBvcnRUZXN0KHR5cGUsIHBhcmFtcyk7XG4gIH1cbiAgcmV0dXJuIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaHVmZmxlKGFycmF5OiBhbnlbXSk6IGFueVtdIHtcbiAgY29uc3QgbmV3QXJyID0gYXJyYXkuc2xpY2UoKTtcbiAgbmV3QXJyLnNvcnQoKCkgPT4gTWF0aC5yYW5kb20oKSAtIDAuNSk7XG4gIHJldHVybiBuZXdBcnI7XG59XG5cbi8qIFdhaXRzIFttc10gbWlsbGlzZWNvbmRzICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsYXkobXM6IG51bWJlcikge1xuICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCBtcykpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXdhaXRDaGVjayhjaGVja0hhbmRsZXI6ICgpID0+IGJvb2xlYW4sXG4gIGVycm9yOiBzdHJpbmcgPSAnVGltZW91dCBleGNlZWRlZCcsIHdhaXQ6IG51bWJlciA9IDUwMCwgaW50ZXJ2YWw6IG51bWJlciA9IDUwKTogUHJvbWlzZTxhbnk+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICByZWplY3QobmV3IEVycm9yKGVycm9yKSk7XG4gICAgfSwgd2FpdCk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGludGVydmFsSWQ6IFRpbWVvdXQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAoY2hlY2tIYW5kbGVyKCkpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgIH1cbiAgICB9LCBpbnRlcnZhbCk7XG4gIH0pO1xufVxuXG4vLyBSZXR1cm5zIHRlc3QgZXhlY3V0aW9uIHJlc3VsdCBvciBhbiBlcnJvciBpbiBjYXNlIG9mIHRpbWVvdXRcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0aW1lb3V0KGZ1bmM6ICgpID0+IFByb21pc2U8YW55PiwgdGVzdFRpbWVvdXQ6IG51bWJlciwgdGltZW91dFJlYXNvbjogc3RyaW5nID0gJ0VYRUNVVElPTiBUSU1FT1VUJyk6IFByb21pc2U8YW55PiB7XG4gIGxldCB0aW1lb3V0OiBhbnkgPSBudWxsO1xuICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlPGFueT4oKF8sIHJlamVjdCkgPT4ge1xuICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcHJvbWlzZS1yZWplY3QtZXJyb3JzXG4gICAgICByZWplY3QodGltZW91dFJlYXNvbik7XG4gICAgfSwgdGVzdFRpbWVvdXQpO1xuICB9KTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKFtmdW5jKCksIHRpbWVvdXRQcm9taXNlXSk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKHRpbWVvdXQpXG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlhbG9nUHJlc2VudChkaWFsb2dUaXRsZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGRpYWxvZ3MgPSBERy5EaWFsb2cuZ2V0T3BlbkRpYWxvZ3MoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWFsb2dzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGRpYWxvZ3NbaV0udGl0bGUgPT0gZGlhbG9nVGl0bGUpXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKiBFeHBlY3RzIGFuIGFzeW5jaHJvbm91cyB7QGxpbmsgYWN0aW9ufSB0byB0aHJvdyBhbiBleGNlcHRpb24uIFVzZSB7QGxpbmsgY2hlY2t9IHRvIHBlcmZvcm1cbiAqIGRlZXBlciBpbnNwZWN0aW9uIG9mIHRoZSBleGNlcHRpb24gaWYgbmVjZXNzYXJ5LlxuICogQHBhcmFtICB7ZnVuY3Rpb24oKTogUHJvbWlzZTx2b2lkPn0gYWN0aW9uXG4gKiBAcGFyYW0gIHtmdW5jdGlvbihhbnkpOiBib29sZWFufSBjaGVja1xuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4cGVjdEV4Y2VwdGlvbkFzeW5jKGFjdGlvbjogKCkgPT4gUHJvbWlzZTx2b2lkPixcbiAgY2hlY2s/OiAoZXhjZXB0aW9uOiBhbnkpID0+IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IGNhdWdodDogYm9vbGVhbiA9IGZhbHNlO1xuICBsZXQgY2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICB0cnkge1xuICAgIGF3YWl0IGFjdGlvbigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY2F1Z2h0ID0gdHJ1ZTtcbiAgICBjaGVja2VkID0gIWNoZWNrIHx8IGNoZWNrKGUpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmICghY2F1Z2h0KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBbiBleGNlcHRpb24gaXMgZXhwZWN0ZWQgYnV0IG5vdCB0aHJvd24nKTtcbiAgICBpZiAoIWNoZWNrZWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FuIGV4cGVjdGVkIGV4Y2VwdGlvbiBpcyB0aHJvd24sIGJ1dCBpdCBkb2VzIG5vdCBzYXRpc2Z5IHRoZSBjb25kaXRpb24nKTtcbiAgfVxufVxuXG5jb25zdCBjYXRERiA9IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhbREcuQ29sdW1uLmZyb21TdHJpbmdzKCdjb2wnLCBbJ3ZhbDEnLCAndmFsMicsICd2YWwzJ10pXSk7XG5cbi8qKlxuICogVW5pdmVyc2FsIHRlc3QgZm9yIHZpZXdlcnMuIEl0IHNlYXJjaCB2aWV3ZXJzIGluIERPTSBieSB0YWdzOiBjYW52YXMsIHN2ZywgaW1nLCBpbnB1dCwgaDEsIGFcbiAqIEBwYXJhbSAge3N0cmluZ30gdiBWaWV3ZXIgbmFtZVxuICogQHBhcmFtICB7REcuRGF0YUZyYW1lfSBkZiBEYXRhZnJhbWUgdG8gdXNlLiBTaG91bGQgaGF2ZSBhdCBsZWFzdCAzIHJvd3NcbiAqIEBwYXJhbSAge2Jvb2xlYW59IG9wdGlvbnMuZGV0ZWN0U2VtYW50aWNUeXBlcyBTcGVjaWZ5IHdoZXRoZXIgdG8gZGV0ZWN0IHNlbWFudGljIHR5cGVzIG9yIG5vdFxuICogQHBhcmFtICB7Ym9vbGVhbn0gb3B0aW9ucy5yZWFkT25seSBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGRhdGFmcmFtZSB3aWxsIG5vdCBiZSBtb2RpZmllZCBkdXJpbmcgdGhlIHRlc3RcbiAqIEBwYXJhbSAge2Jvb2xlYW59IG9wdGlvbnMuYXJiaXRyYXJ5RGZUZXN0IElmIHNldCB0byBmYWxzZSwgdGVzdCBvbiBhcmJpdHJhcnkgZGF0YWZyYW1lXG4gKiAob25lIGNhdGVnb3JpY2FsIGNvbHVtbikgd2lsbCBub3QgYmUgcGVyZm9ybWVkXG4gKiBAcGFyYW0gIHtvYmplY3R9IG9wdGlvbnMgTGlzdCBvZiBvcHRpb25zIChvcHRpb25hbClcbiAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IFRoZSB0ZXN0IGlzIGNvbnNpZGVyZWQgc3VjY2Vzc2Z1bCBpZiBpdCBjb21wbGV0ZXMgd2l0aG91dCBlcnJvcnNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RWaWV3ZXIodjogc3RyaW5nLCBkZjogREcuRGF0YUZyYW1lLCBvcHRpb25zPzoge1xuICBkZXRlY3RTZW1hbnRpY1R5cGVzPzogYm9vbGVhbiwgcmVhZE9ubHk/OiBib29sZWFuLCBhcmJpdHJhcnlEZlRlc3Q/OiBib29sZWFuLFxuICBwYWNrYWdlTmFtZT86IHN0cmluZywgYXdhaXRWaWV3ZXI/OiAodmlld2VyOiBERy5WaWV3ZXIpID0+IFByb21pc2U8dm9pZD5cbn0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcGFja2FnZU5hbWUgPSBvcHRpb25zPy5wYWNrYWdlTmFtZSA/PyAnJztcbiAgaWYgKG9wdGlvbnM/LmRldGVjdFNlbWFudGljVHlwZXMpXG4gICAgYXdhaXQgZ3Jvay5kYXRhLmRldGVjdFNlbWFudGljVHlwZXMoZGYpO1xuICBjb25zdCB0diA9IGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KGRmKTtcblxuICB0cnkge1xuICAgIC8vMS4gT3BlbiwgZG8gbm90aGluZyBhbmQgY2xvc2VcbiAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkKTtcbiAgICAvL2luIGNhc2Ugdmlld2VyIHdpdGggYXN5bmMgcmVuZGVyaW5nIC0gd2FpdCBmb3IgcmVuZGVyIHRvIGNvbXBsZXRlXG4gICAgaWYgKG9wdGlvbnM/LmF3YWl0Vmlld2VyKVxuICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgdW5kZWZpbmVkLCBvcHRpb25zIS5hd2FpdFZpZXdlcik7XG5cbiAgICAvLzIuIE9wZW4gdmlld2VyLCBydW4gc2VsZWN0aW9uLCBmaWx0ZXIsIGV0Yy4gYW5kIGNsb3NlXG4gICAgaWYgKCFvcHRpb25zPy5yZWFkT25seSkge1xuICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgc2VsZWN0RmlsdGVyQ2hhbmdlQ3VycmVudCk7XG4gICAgICBpZiAob3B0aW9ucz8uYXdhaXRWaWV3ZXIpXG4gICAgICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsIHNlbGVjdEZpbHRlckNoYW5nZUN1cnJlbnQsIG9wdGlvbnMhLmF3YWl0Vmlld2VyKTtcbiAgICB9XG5cbiAgICAvLzIuIE9wZW4gdmlld2VyLCBjaGFuZ2Ugb3B0aW9ucywgc2F2ZSBsYXlvdXQgYW5kIGNsb3NlXG4gICAgbGV0IHByb3BzQW5kTGF5b3V0OiB7IGxheW91dDogYW55LCBzYXZlZFByb3BzOiBhbnkgfSB8IG51bGwgPSBudWxsO1xuICAgIHByb3BzQW5kTGF5b3V0ID0gYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgY2hhbmdlT3B0aW9uc1NhdmVMYXlvdXQpO1xuICAgIGlmIChvcHRpb25zPy5hd2FpdFZpZXdlcilcbiAgICAgIHByb3BzQW5kTGF5b3V0ID0gYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCxcbiAgICAgICAgY2hhbmdlT3B0aW9uc1NhdmVMYXlvdXQsIG9wdGlvbnMhLmF3YWl0Vmlld2VyKVxuXG4gICAgLy8zLiBMb2FkIGxheW91dFxuICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld0xheW91dEFwcGxpZWQsIGxvYWRMYXlvdXQsIHVuZGVmaW5lZCwgcHJvcHNBbmRMYXlvdXQ/LmxheW91dCxcbiAgICAgIHsgc2F2ZWRQcm9wczogcHJvcHNBbmRMYXlvdXQ/LnNhdmVkUHJvcHMgfSk7XG4gICAgaWYgKG9wdGlvbnM/LmF3YWl0Vmlld2VyKVxuICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3TGF5b3V0QXBwbGllZCwgbG9hZExheW91dCwgb3B0aW9ucyEuYXdhaXRWaWV3ZXIsXG4gICAgICAgIHByb3BzQW5kTGF5b3V0Py5sYXlvdXQsIHsgc2F2ZWRQcm9wczogcHJvcHNBbmRMYXlvdXQ/LnNhdmVkUHJvcHMgfSk7XG5cbiAgICAvLzQuIE9wZW4gdmlld2VyIG9uIGFyYml0YXJ5IGRhdGFzZXRcbiAgICBpZiAob3B0aW9ucz8uYXJiaXRyYXJ5RGZUZXN0ICE9PSBmYWxzZSkge1xuICAgICAgdHYuZGF0YUZyYW1lID0gY2F0REY7XG4gICAgICBhd2FpdCBkZWxheSg1MCk7XG4gICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkKTtcbiAgICAgIGlmIChvcHRpb25zPy5hd2FpdFZpZXdlcilcbiAgICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgdW5kZWZpbmVkLCBvcHRpb25zIS5hd2FpdFZpZXdlcik7XG4gICAgfVxuXG4gICAgLy81LiBDYWxsIHBvc3Rwb25lZCBmaWx0ZXJpbmdcbiAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCBmaWx0ZXJBc3luYyk7XG4gICAgaWYgKG9wdGlvbnM/LmF3YWl0Vmlld2VyKVxuICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgZmlsdGVyQXN5bmMsIG9wdGlvbnMhLmF3YWl0Vmlld2VyKTtcblxuICB9IGZpbmFsbHkge1xuICAgIC8vIGNsb3NlQWxsKCkgaXMgaGFuZGxpbmcgYnkgY29tbW9uIHRlc3Qgd29ya2Zsb3dcbiAgICAvLyBncm9rLnNoZWxsLmNsb3NlQWxsKCk7XG4gICAgLy8gREcuQmFsbG9vbi5jbG9zZUFsbCgpO1xuICB9XG59XG4iXX0=