@aws-cdk/integ-runner 1.164.0 → 1.167.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js CHANGED
@@ -1,27 +1,10 @@
1
1
  "use strict";
2
2
  var __create = Object.create;
3
3
  var __defProp = Object.defineProperty;
4
- var __defProps = Object.defineProperties;
5
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
7
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
8
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
9
6
  var __getProtoOf = Object.getPrototypeOf;
10
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
11
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
12
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
13
- var __spreadValues = (a, b) => {
14
- for (var prop in b || (b = {}))
15
- if (__hasOwnProp.call(b, prop))
16
- __defNormalProp(a, prop, b[prop]);
17
- if (__getOwnPropSymbols)
18
- for (var prop of __getOwnPropSymbols(b)) {
19
- if (__propIsEnum.call(b, prop))
20
- __defNormalProp(a, prop, b[prop]);
21
- }
22
- return a;
23
- };
24
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
25
8
  var __esm = (fn, res) => function __init() {
26
9
  return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
27
10
  };
@@ -40,7 +23,10 @@ var __copyProps = (to, from, except, desc) => {
40
23
  }
41
24
  return to;
42
25
  };
43
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
26
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
27
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
28
+ mod
29
+ ));
44
30
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
45
31
 
46
32
  // ../../../node_modules/color-name/index.js
@@ -1493,7 +1479,8 @@ var require_source = __commonJS({
1493
1479
  };
1494
1480
  }
1495
1481
  var proto = Object.defineProperties(() => {
1496
- }, __spreadProps(__spreadValues({}, styles), {
1482
+ }, {
1483
+ ...styles,
1497
1484
  level: {
1498
1485
  enumerable: true,
1499
1486
  get() {
@@ -1503,7 +1490,7 @@ var require_source = __commonJS({
1503
1490
  this._generator.level = level;
1504
1491
  }
1505
1492
  }
1506
- }));
1493
+ });
1507
1494
  var createStyler = (open, close, parent) => {
1508
1495
  let openAll;
1509
1496
  let closeAll;
@@ -1565,7 +1552,10 @@ var require_source = __commonJS({
1565
1552
  const arguments_ = strings.slice(1);
1566
1553
  const parts = [firstString.raw[0]];
1567
1554
  for (let i = 1; i < firstString.length; i++) {
1568
- parts.push(String(arguments_[i - 1]).replace(/[{}\\]/g, "\\$&"), String(firstString.raw[i]));
1555
+ parts.push(
1556
+ String(arguments_[i - 1]).replace(/[{}\\]/g, "\\$&"),
1557
+ String(firstString.raw[i])
1558
+ );
1569
1559
  }
1570
1560
  if (template === void 0) {
1571
1561
  template = require_templates();
@@ -1584,7 +1574,9 @@ var require_source = __commonJS({
1584
1574
  // ../../../node_modules/workerpool/src/requireFoolWebpack.js
1585
1575
  var require_requireFoolWebpack = __commonJS({
1586
1576
  "../../../node_modules/workerpool/src/requireFoolWebpack.js"(exports, module) {
1587
- var requireFoolWebpack = eval(`typeof require !== 'undefined' ? require : function (module) { throw new Error('Module " + module + " not found.') }`);
1577
+ var requireFoolWebpack = eval(
1578
+ `typeof require !== 'undefined' ? require : function (module) { throw new Error('Module " + module + " not found.') }`
1579
+ );
1588
1580
  module.exports = requireFoolWebpack;
1589
1581
  }
1590
1582
  });
@@ -1871,7 +1863,11 @@ var require_WorkerHandler = __commonJS({
1871
1863
  return worker2;
1872
1864
  }
1873
1865
  function setupProcessWorker(script, options, child_process) {
1874
- var worker2 = child_process.fork(script, options.forkArgs, options.forkOpts);
1866
+ var worker2 = child_process.fork(
1867
+ script,
1868
+ options.forkArgs,
1869
+ options.forkOpts
1870
+ );
1875
1871
  worker2.isChildProcess = true;
1876
1872
  return worker2;
1877
1873
  }
@@ -2384,7 +2380,9 @@ var require_Pool = __commonJS({
2384
2380
  // ../../../node_modules/workerpool/src/worker.js
2385
2381
  var require_worker = __commonJS({
2386
2382
  "../../../node_modules/workerpool/src/worker.js"(exports, module) {
2387
- var requireFoolWebpack = eval(`typeof require !== 'undefined' ? require : function (module) { throw new Error('Module " + module + " not found.') }`);
2383
+ var requireFoolWebpack = eval(
2384
+ `typeof require !== 'undefined' ? require : function (module) { throw new Error('Module " + module + " not found.') }`
2385
+ );
2388
2386
  var TERMINATE_METHOD_ID = "__workerpool-terminate__";
2389
2387
  var worker = {
2390
2388
  exit: function() {
@@ -2542,6 +2540,7 @@ var require_src = __commonJS({
2542
2540
  var util, chalk, stderr, logger, print, error, warning, success, highlight;
2543
2541
  var init_logger = __esm({
2544
2542
  "lib/logger.ts"() {
2543
+ "use strict";
2545
2544
  util = __toESM(require("util"));
2546
2545
  chalk = __toESM(require_source());
2547
2546
  ({ stderr } = process);
@@ -2570,7 +2569,11 @@ var require_universalify = __commonJS({
2570
2569
  fn.apply(this, args);
2571
2570
  else {
2572
2571
  return new Promise((resolve3, reject) => {
2573
- fn.call(this, ...args, (err, res) => err != null ? reject(err) : resolve3(res));
2572
+ fn.call(
2573
+ this,
2574
+ ...args,
2575
+ (err, res) => err != null ? reject(err) : resolve3(res)
2576
+ );
2574
2577
  });
2575
2578
  }
2576
2579
  }, "name", { value: fn.name });
@@ -2720,19 +2723,24 @@ var require_polyfills = __commonJS({
2720
2723
  }(fs3.readSync);
2721
2724
  function patchLchmod(fs4) {
2722
2725
  fs4.lchmod = function(path3, mode, callback) {
2723
- fs4.open(path3, constants.O_WRONLY | constants.O_SYMLINK, mode, function(err, fd) {
2724
- if (err) {
2725
- if (callback)
2726
- callback(err);
2727
- return;
2728
- }
2729
- fs4.fchmod(fd, mode, function(err2) {
2730
- fs4.close(fd, function(err22) {
2726
+ fs4.open(
2727
+ path3,
2728
+ constants.O_WRONLY | constants.O_SYMLINK,
2729
+ mode,
2730
+ function(err, fd) {
2731
+ if (err) {
2731
2732
  if (callback)
2732
- callback(err2 || err22);
2733
+ callback(err);
2734
+ return;
2735
+ }
2736
+ fs4.fchmod(fd, mode, function(err2) {
2737
+ fs4.close(fd, function(err22) {
2738
+ if (callback)
2739
+ callback(err2 || err22);
2740
+ });
2733
2741
  });
2734
- });
2735
- });
2742
+ }
2743
+ );
2736
2744
  };
2737
2745
  fs4.lchmodSync = function(path3, mode) {
2738
2746
  var fd = fs4.openSync(path3, constants.O_WRONLY | constants.O_SYMLINK, mode);
@@ -2929,12 +2937,12 @@ var require_legacy_streams = __commonJS({
2929
2937
  if (this.encoding)
2930
2938
  this.setEncoding(this.encoding);
2931
2939
  if (this.start !== void 0) {
2932
- if (typeof this.start !== "number") {
2940
+ if ("number" !== typeof this.start) {
2933
2941
  throw TypeError("start must be a Number");
2934
2942
  }
2935
2943
  if (this.end === void 0) {
2936
2944
  this.end = Infinity;
2937
- } else if (typeof this.end !== "number") {
2945
+ } else if ("number" !== typeof this.end) {
2938
2946
  throw TypeError("end must be a Number");
2939
2947
  }
2940
2948
  if (this.start > this.end) {
@@ -2977,7 +2985,7 @@ var require_legacy_streams = __commonJS({
2977
2985
  this[key] = options[key];
2978
2986
  }
2979
2987
  if (this.start !== void 0) {
2980
- if (typeof this.start !== "number") {
2988
+ if ("number" !== typeof this.start) {
2981
2989
  throw TypeError("start must be a Number");
2982
2990
  }
2983
2991
  if (this.start < 0) {
@@ -3183,9 +3191,19 @@ var require_graceful_fs = __commonJS({
3183
3191
  if (typeof options === "function")
3184
3192
  cb = options, options = null;
3185
3193
  var go$readdir = noReaddirOptionVersions.test(process.version) ? function go$readdir2(path4, options2, cb2, startTime) {
3186
- return fs$readdir(path4, fs$readdirCallback(path4, options2, cb2, startTime));
3194
+ return fs$readdir(path4, fs$readdirCallback(
3195
+ path4,
3196
+ options2,
3197
+ cb2,
3198
+ startTime
3199
+ ));
3187
3200
  } : function go$readdir2(path4, options2, cb2, startTime) {
3188
- return fs$readdir(path4, options2, fs$readdirCallback(path4, options2, cb2, startTime));
3201
+ return fs$readdir(path4, options2, fs$readdirCallback(
3202
+ path4,
3203
+ options2,
3204
+ cb2,
3205
+ startTime
3206
+ ));
3189
3207
  };
3190
3208
  return go$readdir(path3, options, cb);
3191
3209
  function fs$readdirCallback(path4, options2, cb2, startTime) {
@@ -3518,7 +3536,7 @@ var require_make_dir = __commonJS({
3518
3536
  const defaults = { mode: 511 };
3519
3537
  if (typeof options === "number")
3520
3538
  options = { mode: options };
3521
- return __spreadValues(__spreadValues({}, defaults), options);
3539
+ return { ...defaults, ...options };
3522
3540
  };
3523
3541
  var permissionError = (pth) => {
3524
3542
  const error2 = new Error(`operation not permitted, mkdir '${pth}'`);
@@ -5170,7 +5188,20 @@ var require_move2 = __commonJS({
5170
5188
  var require_lib = __commonJS({
5171
5189
  "../../../node_modules/fs-extra/lib/index.js"(exports2, module2) {
5172
5190
  "use strict";
5173
- module2.exports = __spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues({}, require_fs()), require_copy_sync2()), require_copy2()), require_empty()), require_ensure()), require_json()), require_mkdirs()), require_move_sync2()), require_move2()), require_output()), require_path_exists()), require_remove());
5191
+ module2.exports = {
5192
+ ...require_fs(),
5193
+ ...require_copy_sync2(),
5194
+ ...require_copy2(),
5195
+ ...require_empty(),
5196
+ ...require_ensure(),
5197
+ ...require_json(),
5198
+ ...require_mkdirs(),
5199
+ ...require_move_sync2(),
5200
+ ...require_move2(),
5201
+ ...require_output(),
5202
+ ...require_path_exists(),
5203
+ ...require_remove()
5204
+ };
5174
5205
  var fs3 = require("fs");
5175
5206
  if (Object.getOwnPropertyDescriptor(fs3, "promises")) {
5176
5207
  Object.defineProperty(module2.exports, "promises", {
@@ -5186,6 +5217,7 @@ var require_lib = __commonJS({
5186
5217
  var path, fs, CDK_OUTDIR_PREFIX, IntegTest, IntegrationTests;
5187
5218
  var init_integration_tests = __esm({
5188
5219
  "lib/runner/integration-tests.ts"() {
5220
+ "use strict";
5189
5221
  path = __toESM(require("path"));
5190
5222
  fs = __toESM(require_lib());
5191
5223
  CDK_OUTDIR_PREFIX = "cdk-integ.out";
@@ -5328,6 +5360,7 @@ function printLaggards(testNames) {
5328
5360
  var chalk2;
5329
5361
  var init_common = __esm({
5330
5362
  "lib/workers/common.ts"() {
5363
+ "use strict";
5331
5364
  chalk2 = __toESM(require_source());
5332
5365
  init_logger();
5333
5366
  }
@@ -5340,6 +5373,7 @@ function flatten(xs) {
5340
5373
  var WorkList;
5341
5374
  var init_utils = __esm({
5342
5375
  "lib/utils.ts"() {
5376
+ "use strict";
5343
5377
  WorkList = class {
5344
5378
  constructor(items, options = {}) {
5345
5379
  this.items = items;
@@ -5379,7 +5413,11 @@ var init_utils = __esm({
5379
5413
  // lib/workers/integ-test-worker.ts
5380
5414
  async function runIntegrationTests(options) {
5381
5415
  highlight("\nRunning integration tests for failed tests...\n");
5382
- print("Running in parallel across %sregions: %s", options.profiles ? `profiles ${options.profiles.join(", ")} and ` : "", options.regions.join(", "));
5416
+ print(
5417
+ "Running in parallel across %sregions: %s",
5418
+ options.profiles ? `profiles ${options.profiles.join(", ")} and ` : "",
5419
+ options.regions.join(", ")
5420
+ );
5383
5421
  const totalTests = options.tests.length;
5384
5422
  const responses = await runIntegrationTestsInParallel(options);
5385
5423
  highlight("\nTest Results: \n");
@@ -5454,6 +5492,7 @@ async function runIntegrationTestsInParallel(options) {
5454
5492
  }
5455
5493
  var init_integ_test_worker = __esm({
5456
5494
  "lib/workers/integ-test-worker.ts"() {
5495
+ "use strict";
5457
5496
  init_logger();
5458
5497
  init_utils();
5459
5498
  init_common();
@@ -5466,12 +5505,14 @@ async function runSnapshotTests(pool2, tests, options) {
5466
5505
  const todo = new WorkList(tests.map((t) => t.testName), {
5467
5506
  onTimeout: printLaggards
5468
5507
  });
5469
- const failedTests = await Promise.all(tests.map((test) => pool2.exec("snapshotTestWorker", [test.info, options], {
5470
- on: (x) => {
5471
- todo.crossOff(x.testName);
5472
- printResults(x);
5473
- }
5474
- })));
5508
+ const failedTests = await Promise.all(
5509
+ tests.map((test) => pool2.exec("snapshotTestWorker", [test.info, options], {
5510
+ on: (x) => {
5511
+ todo.crossOff(x.testName);
5512
+ printResults(x);
5513
+ }
5514
+ }))
5515
+ );
5475
5516
  todo.done();
5476
5517
  const testsToRun = flatten(failedTests);
5477
5518
  highlight("\nSnapshot Results: \n");
@@ -5480,6 +5521,7 @@ async function runSnapshotTests(pool2, tests, options) {
5480
5521
  }
5481
5522
  var init_integ_snapshot_worker = __esm({
5482
5523
  "lib/workers/integ-snapshot-worker.ts"() {
5524
+ "use strict";
5483
5525
  init_logger();
5484
5526
  init_utils();
5485
5527
  init_common();
@@ -5489,6 +5531,7 @@ var init_integ_snapshot_worker = __esm({
5489
5531
  // lib/workers/index.ts
5490
5532
  var init_workers = __esm({
5491
5533
  "lib/workers/index.ts"() {
5534
+ "use strict";
5492
5535
  init_common();
5493
5536
  init_integ_test_worker();
5494
5537
  init_integ_snapshot_worker();
@@ -10137,6 +10180,7 @@ function cli() {
10137
10180
  var import_fs, path2, chalk3, workerpool, yargs;
10138
10181
  var init_cli = __esm({
10139
10182
  "lib/cli.ts"() {
10183
+ "use strict";
10140
10184
  import_fs = require("fs");
10141
10185
  path2 = __toESM(require("path"));
10142
10186
  chalk3 = __toESM(require_source());
@@ -10154,4 +10198,4 @@ var cli_1 = (init_cli(), __toCommonJS(cli_exports));
10154
10198
  Object.defineProperty(exports, "cli", { enumerable: true, get: function() {
10155
10199
  return cli_1.cli;
10156
10200
  } });
10157
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLW5hbWUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvY29udmVyc2lvbnMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvcm91dGUuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9oYXMtZmxhZy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3VwcG9ydHMtY29sb3IvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NoYWxrL3NvdXJjZS91dGlsLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jaGFsay9zb3VyY2UvdGVtcGxhdGVzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jaGFsay9zb3VyY2UvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL3JlcXVpcmVGb29sV2VicGFjay5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvZW52aXJvbm1lbnQuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL1Byb21pc2UuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL2dlbmVyYXRlZC9lbWJlZGRlZFdvcmtlci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvV29ya2VySGFuZGxlci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvZGVidWctcG9ydC1hbGxvY2F0b3IuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL1Bvb2wuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL3dvcmtlci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvaW5kZXguanMiLCAibG9nZ2VyLnRzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9ub2RlX21vZHVsZXMvdW5pdmVyc2FsaWZ5L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9wb2x5ZmlsbHMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2dyYWNlZnVsLWZzL2xlZ2FjeS1zdHJlYW1zLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9jbG9uZS5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMvZ3JhY2VmdWwtZnMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9mcy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXQtbGVhc3Qtbm9kZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21rZGlycy9tYWtlLWRpci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21rZGlycy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL3V0aWwvdXRpbWVzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvdXRpbC9zdGF0LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvY29weS1zeW5jL2NvcHktc3luYy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2NvcHktc3luYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL3BhdGgtZXhpc3RzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvY29weS9jb3B5LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvY29weS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL3JlbW92ZS9yaW1yYWYuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9yZW1vdmUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbXB0eS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9maWxlLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL2xpbmsuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvc3ltbGluay1wYXRocy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9zeW1saW5rLXR5cGUuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvc3ltbGluay5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbm9kZV9tb2R1bGVzL2pzb25maWxlL3V0aWxzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9ub2RlX21vZHVsZXMvanNvbmZpbGUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9qc29uL2pzb25maWxlLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvb3V0cHV0L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvanNvbi9vdXRwdXQtanNvbi5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2pzb24vb3V0cHV0LWpzb24tc3luYy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2pzb24vaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9tb3ZlLXN5bmMvbW92ZS1zeW5jLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvbW92ZS1zeW5jL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvbW92ZS9tb3ZlLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvbW92ZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2luZGV4LmpzIiwgInJ1bm5lci9pbnRlZ3JhdGlvbi10ZXN0cy50cyIsICJ3b3JrZXJzL2NvbW1vbi50cyIsICJ1dGlscy50cyIsICJ3b3JrZXJzL2ludGVnLXRlc3Qtd29ya2VyLnRzIiwgIndvcmtlcnMvaW50ZWctc25hcHNob3Qtd29ya2VyLnRzIiwgIndvcmtlcnMvaW5kZXgudHMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3kxOG4vYnVpbGQvaW5kZXguY2pzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy95YXJncy1wYXJzZXIvYnVpbGQvaW5kZXguY2pzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9hbnNpLXJlZ2V4L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHJpcC1hbnNpL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9pcy1mdWxsd2lkdGgtY29kZS1wb2ludC9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZW1vamktcmVnZXgvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmluZy13aWR0aC9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd3JhcC1hbnNpL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jbGl1aS9idWlsZC9pbmRleC5janMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2VzY2FsYWRlL3N5bmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2dldC1jYWxsZXItZmlsZS9pbmRleC50cyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVxdWlyZS1kaXJlY3RvcnkvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2luZGV4LmNqcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMveWFyZ3MvaW5kZXguY2pzIiwgImNsaS50cyIsICJpbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBzdHJpY3QnXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHRcImFsaWNlYmx1ZVwiOiBbMjQwLCAyNDgsIDI1NV0sXHJcblx0XCJhbnRpcXVld2hpdGVcIjogWzI1MCwgMjM1LCAyMTVdLFxyXG5cdFwiYXF1YVwiOiBbMCwgMjU1LCAyNTVdLFxyXG5cdFwiYXF1YW1hcmluZVwiOiBbMTI3LCAyNTUsIDIxMl0sXHJcblx0XCJhenVyZVwiOiBbMjQwLCAyNTUsIDI1NV0sXHJcblx0XCJiZWlnZVwiOiBbMjQ1LCAyNDUsIDIyMF0sXHJcblx0XCJiaXNxdWVcIjogWzI1NSwgMjI4LCAxOTZdLFxyXG5cdFwiYmxhY2tcIjogWzAsIDAsIDBdLFxyXG5cdFwiYmxhbmNoZWRhbG1vbmRcIjogWzI1NSwgMjM1LCAyMDVdLFxyXG5cdFwiYmx1ZVwiOiBbMCwgMCwgMjU1XSxcclxuXHRcImJsdWV2aW9sZXRcIjogWzEzOCwgNDMsIDIyNl0sXHJcblx0XCJicm93blwiOiBbMTY1LCA0MiwgNDJdLFxyXG5cdFwiYnVybHl3b29kXCI6IFsyMjIsIDE4NCwgMTM1XSxcclxuXHRcImNhZGV0Ymx1ZVwiOiBbOTUsIDE1OCwgMTYwXSxcclxuXHRcImNoYXJ0cmV1c2VcIjogWzEyNywgMjU1LCAwXSxcclxuXHRcImNob2NvbGF0ZVwiOiBbMjEwLCAxMDUsIDMwXSxcclxuXHRcImNvcmFsXCI6IFsyNTUsIDEyNywgODBdLFxyXG5cdFwiY29ybmZsb3dlcmJsdWVcIjogWzEwMCwgMTQ5LCAyMzddLFxyXG5cdFwiY29ybnNpbGtcIjogWzI1NSwgMjQ4LCAyMjBdLFxyXG5cdFwiY3JpbXNvblwiOiBbMjIwLCAyMCwgNjBdLFxyXG5cdFwiY3lhblwiOiBbMCwgMjU1LCAyNTVdLFxyXG5cdFwiZGFya2JsdWVcIjogWzAsIDAsIDEzOV0sXHJcblx0XCJkYXJrY3lhblwiOiBbMCwgMTM5LCAxMzldLFxyXG5cdFwiZGFya2dvbGRlbnJvZFwiOiBbMTg0LCAxMzQsIDExXSxcclxuXHRcImRhcmtncmF5XCI6IFsxNjksIDE2OSwgMTY5XSxcclxuXHRcImRhcmtncmVlblwiOiBbMCwgMTAwLCAwXSxcclxuXHRcImRhcmtncmV5XCI6IFsxNjksIDE2OSwgMTY5XSxcclxuXHRcImRhcmtraGFraVwiOiBbMTg5LCAxODMsIDEwN10sXHJcblx0XCJkYXJrbWFnZW50YVwiOiBbMTM5LCAwLCAxMzldLFxyXG5cdFwiZGFya29saXZlZ3JlZW5cIjogWzg1LCAxMDcsIDQ3XSxcclxuXHRcImRhcmtvcmFuZ2VcIjogWzI1NSwgMTQwLCAwXSxcclxuXHRcImRhcmtvcmNoaWRcIjogWzE1MywgNTAsIDIwNF0sXHJcblx0XCJkYXJrcmVkXCI6IFsxMzksIDAsIDBdLFxyXG5cdFwiZGFya3NhbG1vblwiOiBbMjMzLCAxNTAsIDEyMl0sXHJcblx0XCJkYXJrc2VhZ3JlZW5cIjogWzE0MywgMTg4LCAxNDNdLFxyXG5cdFwiZGFya3NsYXRlYmx1ZVwiOiBbNzIsIDYxLCAxMzldLFxyXG5cdFwiZGFya3NsYXRlZ3JheVwiOiBbNDcsIDc5LCA3OV0sXHJcblx0XCJkYXJrc2xhdGVncmV5XCI6IFs0NywgNzksIDc5XSxcclxuXHRcImRhcmt0dXJxdW9pc2VcIjogWzAsIDIwNiwgMjA5XSxcclxuXHRcImRhcmt2aW9sZXRcIjogWzE0OCwgMCwgMjExXSxcclxuXHRcImRlZXBwaW5rXCI6IFsyNTUsIDIwLCAxNDddLFxyXG5cdFwiZGVlcHNreWJsdWVcIjogWzAsIDE5MSwgMjU1XSxcclxuXHRcImRpbWdyYXlcIjogWzEwNSwgMTA1LCAxMDVdLFxyXG5cdFwiZGltZ3JleVwiOiBbMTA1LCAxMDUsIDEwNV0sXHJcblx0XCJkb2RnZXJibHVlXCI6IFszMCwgMTQ0LCAyNTVdLFxyXG5cdFwiZmlyZWJyaWNrXCI6IFsxNzgsIDM0LCAzNF0sXHJcblx0XCJmbG9yYWx3aGl0ZVwiOiBbMjU1LCAyNTAsIDI0MF0sXHJcblx0XCJmb3Jlc3RncmVlblwiOiBbMzQsIDEzOSwgMzRdLFxyXG5cdFwiZnVjaHNpYVwiOiBbMjU1LCAwLCAyNTVdLFxyXG5cdFwiZ2FpbnNib3JvXCI6IFsyMjAsIDIyMCwgMjIwXSxcclxuXHRcImdob3N0d2hpdGVcIjogWzI0OCwgMjQ4LCAyNTVdLFxyXG5cdFwiZ29sZFwiOiBbMjU1LCAyMTUsIDBdLFxyXG5cdFwiZ29sZGVucm9kXCI6IFsyMTgsIDE2NSwgMzJdLFxyXG5cdFwiZ3JheVwiOiBbMTI4LCAxMjgsIDEyOF0sXHJcblx0XCJncmVlblwiOiBbMCwgMTI4LCAwXSxcclxuXHRcImdyZWVueWVsbG93XCI6IFsxNzMsIDI1NSwgNDddLFxyXG5cdFwiZ3JleVwiOiBbMTI4LCAxMjgsIDEyOF0sXHJcblx0XCJob25leWRld1wiOiBbMjQwLCAyNTUsIDI0MF0sXHJcblx0XCJob3RwaW5rXCI6IFsyNTUsIDEwNSwgMTgwXSxcclxuXHRcImluZGlhbnJlZFwiOiBbMjA1LCA5MiwgOTJdLFxyXG5cdFwiaW5kaWdvXCI6IFs3NSwgMCwgMTMwXSxcclxuXHRcIml2b3J5XCI6IFsyNTUsIDI1NSwgMjQwXSxcclxuXHRcImtoYWtpXCI6IFsyNDAsIDIzMCwgMTQwXSxcclxuXHRcImxhdmVuZGVyXCI6IFsyMzAsIDIzMCwgMjUwXSxcclxuXHRcImxhdmVuZGVyYmx1c2hcIjogWzI1NSwgMjQwLCAyNDVdLFxyXG5cdFwibGF3bmdyZWVuXCI6IFsxMjQsIDI1MiwgMF0sXHJcblx0XCJsZW1vbmNoaWZmb25cIjogWzI1NSwgMjUwLCAyMDVdLFxyXG5cdFwibGlnaHRibHVlXCI6IFsxNzMsIDIxNiwgMjMwXSxcclxuXHRcImxpZ2h0Y29yYWxcIjogWzI0MCwgMTI4LCAxMjhdLFxyXG5cdFwibGlnaHRjeWFuXCI6IFsyMjQsIDI1NSwgMjU1XSxcclxuXHRcImxpZ2h0Z29sZGVucm9keWVsbG93XCI6IFsyNTAsIDI1MCwgMjEwXSxcclxuXHRcImxpZ2h0Z3JheVwiOiBbMjExLCAyMTEsIDIxMV0sXHJcblx0XCJsaWdodGdyZWVuXCI6IFsxNDQsIDIzOCwgMTQ0XSxcclxuXHRcImxpZ2h0Z3JleVwiOiBbMjExLCAyMTEsIDIxMV0sXHJcblx0XCJsaWdodHBpbmtcIjogWzI1NSwgMTgyLCAxOTNdLFxyXG5cdFwibGlnaHRzYWxtb25cIjogWzI1NSwgMTYwLCAxMjJdLFxyXG5cdFwibGlnaHRzZWFncmVlblwiOiBbMzIsIDE3OCwgMTcwXSxcclxuXHRcImxpZ2h0c2t5Ymx1ZVwiOiBbMTM1LCAyMDYsIDI1MF0sXHJcblx0XCJsaWdodHNsYXRlZ3JheVwiOiBbMTE5LCAxMzYsIDE1M10sXHJcblx0XCJsaWdodHNsYXRlZ3JleVwiOiBbMTE5LCAxMzYsIDE1M10sXHJcblx0XCJsaWdodHN0ZWVsYmx1ZVwiOiBbMTc2LCAxOTYsIDIyMl0sXHJcblx0XCJsaWdodHllbGxvd1wiOiBbMjU1LCAyNTUsIDIyNF0sXHJcblx0XCJsaW1lXCI6IFswLCAyNTUsIDBdLFxyXG5cdFwibGltZWdyZWVuXCI6IFs1MCwgMjA1LCA1MF0sXHJcblx0XCJsaW5lblwiOiBbMjUwLCAyNDAsIDIzMF0sXHJcblx0XCJtYWdlbnRhXCI6IFsyNTUsIDAsIDI1NV0sXHJcblx0XCJtYXJvb25cIjogWzEyOCwgMCwgMF0sXHJcblx0XCJtZWRpdW1hcXVhbWFyaW5lXCI6IFsxMDIsIDIwNSwgMTcwXSxcclxuXHRcIm1lZGl1bWJsdWVcIjogWzAsIDAsIDIwNV0sXHJcblx0XCJtZWRpdW1vcmNoaWRcIjogWzE4NiwgODUsIDIxMV0sXHJcblx0XCJtZWRpdW1wdXJwbGVcIjogWzE0NywgMTEyLCAyMTldLFxyXG5cdFwibWVkaXVtc2VhZ3JlZW5cIjogWzYwLCAxNzksIDExM10sXHJcblx0XCJtZWRpdW1zbGF0ZWJsdWVcIjogWzEyMywgMTA0LCAyMzhdLFxyXG5cdFwibWVkaXVtc3ByaW5nZ3JlZW5cIjogWzAsIDI1MCwgMTU0XSxcclxuXHRcIm1lZGl1bXR1cnF1b2lzZVwiOiBbNzIsIDIwOSwgMjA0XSxcclxuXHRcIm1lZGl1bXZpb2xldHJlZFwiOiBbMTk5LCAyMSwgMTMzXSxcclxuXHRcIm1pZG5pZ2h0Ymx1ZVwiOiBbMjUsIDI1LCAxMTJdLFxyXG5cdFwibWludGNyZWFtXCI6IFsyNDUsIDI1NSwgMjUwXSxcclxuXHRcIm1pc3R5cm9zZVwiOiBbMjU1LCAyMjgsIDIyNV0sXHJcblx0XCJtb2NjYXNpblwiOiBbMjU1LCAyMjgsIDE4MV0sXHJcblx0XCJuYXZham93aGl0ZVwiOiBbMjU1LCAyMjIsIDE3M10sXHJcblx0XCJuYXZ5XCI6IFswLCAwLCAxMjhdLFxyXG5cdFwib2xkbGFjZVwiOiBbMjUzLCAyNDUsIDIzMF0sXHJcblx0XCJvbGl2ZVwiOiBbMTI4LCAxMjgsIDBdLFxyXG5cdFwib2xpdmVkcmFiXCI6IFsxMDcsIDE0MiwgMzVdLFxyXG5cdFwib3JhbmdlXCI6IFsyNTUsIDE2NSwgMF0sXHJcblx0XCJvcmFuZ2VyZWRcIjogWzI1NSwgNjksIDBdLFxyXG5cdFwib3JjaGlkXCI6IFsyMTgsIDExMiwgMjE0XSxcclxuXHRcInBhbGVnb2xkZW5yb2RcIjogWzIzOCwgMjMyLCAxNzBdLFxyXG5cdFwicGFsZWdyZWVuXCI6IFsxNTIsIDI1MSwgMTUyXSxcclxuXHRcInBhbGV0dXJxdW9pc2VcIjogWzE3NSwgMjM4LCAyMzhdLFxyXG5cdFwicGFsZXZpb2xldHJlZFwiOiBbMjE5LCAxMTIsIDE0N10sXHJcblx0XCJwYXBheWF3aGlwXCI6IFsyNTUsIDIzOSwgMjEzXSxcclxuXHRcInBlYWNocHVmZlwiOiBbMjU1LCAyMTgsIDE4NV0sXHJcblx0XCJwZXJ1XCI6IFsyMDUsIDEzMywgNjNdLFxyXG5cdFwicGlua1wiOiBbMjU1LCAxOTIsIDIwM10sXHJcblx0XCJwbHVtXCI6IFsyMjEsIDE2MCwgMjIxXSxcclxuXHRcInBvd2RlcmJsdWVcIjogWzE3NiwgMjI0LCAyMzBdLFxyXG5cdFwicHVycGxlXCI6IFsxMjgsIDAsIDEyOF0sXHJcblx0XCJyZWJlY2NhcHVycGxlXCI6IFsxMDIsIDUxLCAxNTNdLFxyXG5cdFwicmVkXCI6IFsyNTUsIDAsIDBdLFxyXG5cdFwicm9zeWJyb3duXCI6IFsxODgsIDE0MywgMTQzXSxcclxuXHRcInJveWFsYmx1ZVwiOiBbNjUsIDEwNSwgMjI1XSxcclxuXHRcInNhZGRsZWJyb3duXCI6IFsxMzksIDY5LCAxOV0sXHJcblx0XCJzYWxtb25cIjogWzI1MCwgMTI4LCAxMTRdLFxyXG5cdFwic2FuZHlicm93blwiOiBbMjQ0LCAxNjQsIDk2XSxcclxuXHRcInNlYWdyZWVuXCI6IFs0NiwgMTM5LCA4N10sXHJcblx0XCJzZWFzaGVsbFwiOiBbMjU1LCAyNDUsIDIzOF0sXHJcblx0XCJzaWVubmFcIjogWzE2MCwgODIsIDQ1XSxcclxuXHRcInNpbHZlclwiOiBbMTkyLCAxOTIsIDE5Ml0sXHJcblx0XCJza3libHVlXCI6IFsxMzUsIDIwNiwgMjM1XSxcclxuXHRcInNsYXRlYmx1ZVwiOiBbMTA2LCA5MCwgMjA1XSxcclxuXHRcInNsYXRlZ3JheVwiOiBbMTEyLCAxMjgsIDE0NF0sXHJcblx0XCJzbGF0ZWdyZXlcIjogWzExMiwgMTI4LCAxNDRdLFxyXG5cdFwic25vd1wiOiBbMjU1LCAyNTAsIDI1MF0sXHJcblx0XCJzcHJpbmdncmVlblwiOiBbMCwgMjU1LCAxMjddLFxyXG5cdFwic3RlZWxibHVlXCI6IFs3MCwgMTMwLCAxODBdLFxyXG5cdFwidGFuXCI6IFsyMTAsIDE4MCwgMTQwXSxcclxuXHRcInRlYWxcIjogWzAsIDEyOCwgMTI4XSxcclxuXHRcInRoaXN0bGVcIjogWzIxNiwgMTkxLCAyMTZdLFxyXG5cdFwidG9tYXRvXCI6IFsyNTUsIDk5LCA3MV0sXHJcblx0XCJ0dXJxdW9pc2VcIjogWzY0LCAyMjQsIDIwOF0sXHJcblx0XCJ2aW9sZXRcIjogWzIzOCwgMTMwLCAyMzhdLFxyXG5cdFwid2hlYXRcIjogWzI0NSwgMjIyLCAxNzldLFxyXG5cdFwid2hpdGVcIjogWzI1NSwgMjU1LCAyNTVdLFxyXG5cdFwid2hpdGVzbW9rZVwiOiBbMjQ1LCAyNDUsIDI0NV0sXHJcblx0XCJ5ZWxsb3dcIjogWzI1NSwgMjU1LCAwXSxcclxuXHRcInllbGxvd2dyZWVuXCI6IFsxNTQsIDIwNSwgNTBdXHJcbn07XHJcbiIsICIvKiBNSVQgbGljZW5zZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbWl4ZWQtb3BlcmF0b3JzICovXG5jb25zdCBjc3NLZXl3b3JkcyA9IHJlcXVpcmUoJ2NvbG9yLW5hbWUnKTtcblxuLy8gTk9URTogY29udmVyc2lvbnMgc2hvdWxkIG9ubHkgcmV0dXJuIHByaW1pdGl2ZSB2YWx1ZXMgKGkuZS4gYXJyYXlzLCBvclxuLy8gICAgICAgdmFsdWVzIHRoYXQgZ2l2ZSBjb3JyZWN0IGB0eXBlb2ZgIHJlc3VsdHMpLlxuLy8gICAgICAgZG8gbm90IHVzZSBib3ggdmFsdWVzIHR5cGVzIChpLmUuIE51bWJlcigpLCBTdHJpbmcoKSwgZXRjLilcblxuY29uc3QgcmV2ZXJzZUtleXdvcmRzID0ge307XG5mb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjc3NLZXl3b3JkcykpIHtcblx0cmV2ZXJzZUtleXdvcmRzW2Nzc0tleXdvcmRzW2tleV1dID0ga2V5O1xufVxuXG5jb25zdCBjb252ZXJ0ID0ge1xuXHRyZ2I6IHtjaGFubmVsczogMywgbGFiZWxzOiAncmdiJ30sXG5cdGhzbDoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdoc2wnfSxcblx0aHN2OiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ2hzdid9LFxuXHRod2I6IHtjaGFubmVsczogMywgbGFiZWxzOiAnaHdiJ30sXG5cdGNteWs6IHtjaGFubmVsczogNCwgbGFiZWxzOiAnY215ayd9LFxuXHR4eXo6IHtjaGFubmVsczogMywgbGFiZWxzOiAneHl6J30sXG5cdGxhYjoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdsYWInfSxcblx0bGNoOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ2xjaCd9LFxuXHRoZXg6IHtjaGFubmVsczogMSwgbGFiZWxzOiBbJ2hleCddfSxcblx0a2V5d29yZDoge2NoYW5uZWxzOiAxLCBsYWJlbHM6IFsna2V5d29yZCddfSxcblx0YW5zaTE2OiB7Y2hhbm5lbHM6IDEsIGxhYmVsczogWydhbnNpMTYnXX0sXG5cdGFuc2kyNTY6IHtjaGFubmVsczogMSwgbGFiZWxzOiBbJ2Fuc2kyNTYnXX0sXG5cdGhjZzoge2NoYW5uZWxzOiAzLCBsYWJlbHM6IFsnaCcsICdjJywgJ2cnXX0sXG5cdGFwcGxlOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogWydyMTYnLCAnZzE2JywgJ2IxNiddfSxcblx0Z3JheToge2NoYW5uZWxzOiAxLCBsYWJlbHM6IFsnZ3JheSddfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb252ZXJ0O1xuXG4vLyBIaWRlIC5jaGFubmVscyBhbmQgLmxhYmVscyBwcm9wZXJ0aWVzXG5mb3IgKGNvbnN0IG1vZGVsIG9mIE9iamVjdC5rZXlzKGNvbnZlcnQpKSB7XG5cdGlmICghKCdjaGFubmVscycgaW4gY29udmVydFttb2RlbF0pKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGNoYW5uZWxzIHByb3BlcnR5OiAnICsgbW9kZWwpO1xuXHR9XG5cblx0aWYgKCEoJ2xhYmVscycgaW4gY29udmVydFttb2RlbF0pKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGNoYW5uZWwgbGFiZWxzIHByb3BlcnR5OiAnICsgbW9kZWwpO1xuXHR9XG5cblx0aWYgKGNvbnZlcnRbbW9kZWxdLmxhYmVscy5sZW5ndGggIT09IGNvbnZlcnRbbW9kZWxdLmNoYW5uZWxzKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdjaGFubmVsIGFuZCBsYWJlbCBjb3VudHMgbWlzbWF0Y2g6ICcgKyBtb2RlbCk7XG5cdH1cblxuXHRjb25zdCB7Y2hhbm5lbHMsIGxhYmVsc30gPSBjb252ZXJ0W21vZGVsXTtcblx0ZGVsZXRlIGNvbnZlcnRbbW9kZWxdLmNoYW5uZWxzO1xuXHRkZWxldGUgY29udmVydFttb2RlbF0ubGFiZWxzO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udmVydFttb2RlbF0sICdjaGFubmVscycsIHt2YWx1ZTogY2hhbm5lbHN9KTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnZlcnRbbW9kZWxdLCAnbGFiZWxzJywge3ZhbHVlOiBsYWJlbHN9KTtcbn1cblxuY29udmVydC5yZ2IuaHNsID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCByID0gcmdiWzBdIC8gMjU1O1xuXHRjb25zdCBnID0gcmdiWzFdIC8gMjU1O1xuXHRjb25zdCBiID0gcmdiWzJdIC8gMjU1O1xuXHRjb25zdCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKTtcblx0Y29uc3QgbWF4ID0gTWF0aC5tYXgociwgZywgYik7XG5cdGNvbnN0IGRlbHRhID0gbWF4IC0gbWluO1xuXHRsZXQgaDtcblx0bGV0IHM7XG5cblx0aWYgKG1heCA9PT0gbWluKSB7XG5cdFx0aCA9IDA7XG5cdH0gZWxzZSBpZiAociA9PT0gbWF4KSB7XG5cdFx0aCA9IChnIC0gYikgLyBkZWx0YTtcblx0fSBlbHNlIGlmIChnID09PSBtYXgpIHtcblx0XHRoID0gMiArIChiIC0gcikgLyBkZWx0YTtcblx0fSBlbHNlIGlmIChiID09PSBtYXgpIHtcblx0XHRoID0gNCArIChyIC0gZykgLyBkZWx0YTtcblx0fVxuXG5cdGggPSBNYXRoLm1pbihoICogNjAsIDM2MCk7XG5cblx0aWYgKGggPCAwKSB7XG5cdFx0aCArPSAzNjA7XG5cdH1cblxuXHRjb25zdCBsID0gKG1pbiArIG1heCkgLyAyO1xuXG5cdGlmIChtYXggPT09IG1pbikge1xuXHRcdHMgPSAwO1xuXHR9IGVsc2UgaWYgKGwgPD0gMC41KSB7XG5cdFx0cyA9IGRlbHRhIC8gKG1heCArIG1pbik7XG5cdH0gZWxzZSB7XG5cdFx0cyA9IGRlbHRhIC8gKDIgLSBtYXggLSBtaW4pO1xuXHR9XG5cblx0cmV0dXJuIFtoLCBzICogMTAwLCBsICogMTAwXTtcbn07XG5cbmNvbnZlcnQucmdiLmhzdiA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0bGV0IHJkaWY7XG5cdGxldCBnZGlmO1xuXHRsZXQgYmRpZjtcblx0bGV0IGg7XG5cdGxldCBzO1xuXG5cdGNvbnN0IHIgPSByZ2JbMF0gLyAyNTU7XG5cdGNvbnN0IGcgPSByZ2JbMV0gLyAyNTU7XG5cdGNvbnN0IGIgPSByZ2JbMl0gLyAyNTU7XG5cdGNvbnN0IHYgPSBNYXRoLm1heChyLCBnLCBiKTtcblx0Y29uc3QgZGlmZiA9IHYgLSBNYXRoLm1pbihyLCBnLCBiKTtcblx0Y29uc3QgZGlmZmMgPSBmdW5jdGlvbiAoYykge1xuXHRcdHJldHVybiAodiAtIGMpIC8gNiAvIGRpZmYgKyAxIC8gMjtcblx0fTtcblxuXHRpZiAoZGlmZiA9PT0gMCkge1xuXHRcdGggPSAwO1xuXHRcdHMgPSAwO1xuXHR9IGVsc2Uge1xuXHRcdHMgPSBkaWZmIC8gdjtcblx0XHRyZGlmID0gZGlmZmMocik7XG5cdFx0Z2RpZiA9IGRpZmZjKGcpO1xuXHRcdGJkaWYgPSBkaWZmYyhiKTtcblxuXHRcdGlmIChyID09PSB2KSB7XG5cdFx0XHRoID0gYmRpZiAtIGdkaWY7XG5cdFx0fSBlbHNlIGlmIChnID09PSB2KSB7XG5cdFx0XHRoID0gKDEgLyAzKSArIHJkaWYgLSBiZGlmO1xuXHRcdH0gZWxzZSBpZiAoYiA9PT0gdikge1xuXHRcdFx0aCA9ICgyIC8gMykgKyBnZGlmIC0gcmRpZjtcblx0XHR9XG5cblx0XHRpZiAoaCA8IDApIHtcblx0XHRcdGggKz0gMTtcblx0XHR9IGVsc2UgaWYgKGggPiAxKSB7XG5cdFx0XHRoIC09IDE7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIFtcblx0XHRoICogMzYwLFxuXHRcdHMgKiAxMDAsXG5cdFx0diAqIDEwMFxuXHRdO1xufTtcblxuY29udmVydC5yZ2IuaHdiID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCByID0gcmdiWzBdO1xuXHRjb25zdCBnID0gcmdiWzFdO1xuXHRsZXQgYiA9IHJnYlsyXTtcblx0Y29uc3QgaCA9IGNvbnZlcnQucmdiLmhzbChyZ2IpWzBdO1xuXHRjb25zdCB3ID0gMSAvIDI1NSAqIE1hdGgubWluKHIsIE1hdGgubWluKGcsIGIpKTtcblxuXHRiID0gMSAtIDEgLyAyNTUgKiBNYXRoLm1heChyLCBNYXRoLm1heChnLCBiKSk7XG5cblx0cmV0dXJuIFtoLCB3ICogMTAwLCBiICogMTAwXTtcbn07XG5cbmNvbnZlcnQucmdiLmNteWsgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHIgPSByZ2JbMF0gLyAyNTU7XG5cdGNvbnN0IGcgPSByZ2JbMV0gLyAyNTU7XG5cdGNvbnN0IGIgPSByZ2JbMl0gLyAyNTU7XG5cblx0Y29uc3QgayA9IE1hdGgubWluKDEgLSByLCAxIC0gZywgMSAtIGIpO1xuXHRjb25zdCBjID0gKDEgLSByIC0gaykgLyAoMSAtIGspIHx8IDA7XG5cdGNvbnN0IG0gPSAoMSAtIGcgLSBrKSAvICgxIC0gaykgfHwgMDtcblx0Y29uc3QgeSA9ICgxIC0gYiAtIGspIC8gKDEgLSBrKSB8fCAwO1xuXG5cdHJldHVybiBbYyAqIDEwMCwgbSAqIDEwMCwgeSAqIDEwMCwgayAqIDEwMF07XG59O1xuXG5mdW5jdGlvbiBjb21wYXJhdGl2ZURpc3RhbmNlKHgsIHkpIHtcblx0Lypcblx0XHRTZWUgaHR0cHM6Ly9lbi5tLndpa2lwZWRpYS5vcmcvd2lraS9FdWNsaWRlYW5fZGlzdGFuY2UjU3F1YXJlZF9FdWNsaWRlYW5fZGlzdGFuY2Vcblx0Ki9cblx0cmV0dXJuIChcblx0XHQoKHhbMF0gLSB5WzBdKSAqKiAyKSArXG5cdFx0KCh4WzFdIC0geVsxXSkgKiogMikgK1xuXHRcdCgoeFsyXSAtIHlbMl0pICoqIDIpXG5cdCk7XG59XG5cbmNvbnZlcnQucmdiLmtleXdvcmQgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHJldmVyc2VkID0gcmV2ZXJzZUtleXdvcmRzW3JnYl07XG5cdGlmIChyZXZlcnNlZCkge1xuXHRcdHJldHVybiByZXZlcnNlZDtcblx0fVxuXG5cdGxldCBjdXJyZW50Q2xvc2VzdERpc3RhbmNlID0gSW5maW5pdHk7XG5cdGxldCBjdXJyZW50Q2xvc2VzdEtleXdvcmQ7XG5cblx0Zm9yIChjb25zdCBrZXl3b3JkIG9mIE9iamVjdC5rZXlzKGNzc0tleXdvcmRzKSkge1xuXHRcdGNvbnN0IHZhbHVlID0gY3NzS2V5d29yZHNba2V5d29yZF07XG5cblx0XHQvLyBDb21wdXRlIGNvbXBhcmF0aXZlIGRpc3RhbmNlXG5cdFx0Y29uc3QgZGlzdGFuY2UgPSBjb21wYXJhdGl2ZURpc3RhbmNlKHJnYiwgdmFsdWUpO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgaXRzIGxlc3MsIGlmIHNvIHNldCBhcyBjbG9zZXN0XG5cdFx0aWYgKGRpc3RhbmNlIDwgY3VycmVudENsb3Nlc3REaXN0YW5jZSkge1xuXHRcdFx0Y3VycmVudENsb3Nlc3REaXN0YW5jZSA9IGRpc3RhbmNlO1xuXHRcdFx0Y3VycmVudENsb3Nlc3RLZXl3b3JkID0ga2V5d29yZDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY3VycmVudENsb3Nlc3RLZXl3b3JkO1xufTtcblxuY29udmVydC5rZXl3b3JkLnJnYiA9IGZ1bmN0aW9uIChrZXl3b3JkKSB7XG5cdHJldHVybiBjc3NLZXl3b3Jkc1trZXl3b3JkXTtcbn07XG5cbmNvbnZlcnQucmdiLnh5eiA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0bGV0IHIgPSByZ2JbMF0gLyAyNTU7XG5cdGxldCBnID0gcmdiWzFdIC8gMjU1O1xuXHRsZXQgYiA9IHJnYlsyXSAvIDI1NTtcblxuXHQvLyBBc3N1bWUgc1JHQlxuXHRyID0gciA+IDAuMDQwNDUgPyAoKChyICsgMC4wNTUpIC8gMS4wNTUpICoqIDIuNCkgOiAociAvIDEyLjkyKTtcblx0ZyA9IGcgPiAwLjA0MDQ1ID8gKCgoZyArIDAuMDU1KSAvIDEuMDU1KSAqKiAyLjQpIDogKGcgLyAxMi45Mik7XG5cdGIgPSBiID4gMC4wNDA0NSA/ICgoKGIgKyAwLjA1NSkgLyAxLjA1NSkgKiogMi40KSA6IChiIC8gMTIuOTIpO1xuXG5cdGNvbnN0IHggPSAociAqIDAuNDEyNCkgKyAoZyAqIDAuMzU3NikgKyAoYiAqIDAuMTgwNSk7XG5cdGNvbnN0IHkgPSAociAqIDAuMjEyNikgKyAoZyAqIDAuNzE1MikgKyAoYiAqIDAuMDcyMik7XG5cdGNvbnN0IHogPSAociAqIDAuMDE5MykgKyAoZyAqIDAuMTE5MikgKyAoYiAqIDAuOTUwNSk7XG5cblx0cmV0dXJuIFt4ICogMTAwLCB5ICogMTAwLCB6ICogMTAwXTtcbn07XG5cbmNvbnZlcnQucmdiLmxhYiA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgeHl6ID0gY29udmVydC5yZ2IueHl6KHJnYik7XG5cdGxldCB4ID0geHl6WzBdO1xuXHRsZXQgeSA9IHh5elsxXTtcblx0bGV0IHogPSB4eXpbMl07XG5cblx0eCAvPSA5NS4wNDc7XG5cdHkgLz0gMTAwO1xuXHR6IC89IDEwOC44ODM7XG5cblx0eCA9IHggPiAwLjAwODg1NiA/ICh4ICoqICgxIC8gMykpIDogKDcuNzg3ICogeCkgKyAoMTYgLyAxMTYpO1xuXHR5ID0geSA+IDAuMDA4ODU2ID8gKHkgKiogKDEgLyAzKSkgOiAoNy43ODcgKiB5KSArICgxNiAvIDExNik7XG5cdHogPSB6ID4gMC4wMDg4NTYgPyAoeiAqKiAoMSAvIDMpKSA6ICg3Ljc4NyAqIHopICsgKDE2IC8gMTE2KTtcblxuXHRjb25zdCBsID0gKDExNiAqIHkpIC0gMTY7XG5cdGNvbnN0IGEgPSA1MDAgKiAoeCAtIHkpO1xuXHRjb25zdCBiID0gMjAwICogKHkgLSB6KTtcblxuXHRyZXR1cm4gW2wsIGEsIGJdO1xufTtcblxuY29udmVydC5oc2wucmdiID0gZnVuY3Rpb24gKGhzbCkge1xuXHRjb25zdCBoID0gaHNsWzBdIC8gMzYwO1xuXHRjb25zdCBzID0gaHNsWzFdIC8gMTAwO1xuXHRjb25zdCBsID0gaHNsWzJdIC8gMTAwO1xuXHRsZXQgdDI7XG5cdGxldCB0Mztcblx0bGV0IHZhbDtcblxuXHRpZiAocyA9PT0gMCkge1xuXHRcdHZhbCA9IGwgKiAyNTU7XG5cdFx0cmV0dXJuIFt2YWwsIHZhbCwgdmFsXTtcblx0fVxuXG5cdGlmIChsIDwgMC41KSB7XG5cdFx0dDIgPSBsICogKDEgKyBzKTtcblx0fSBlbHNlIHtcblx0XHR0MiA9IGwgKyBzIC0gbCAqIHM7XG5cdH1cblxuXHRjb25zdCB0MSA9IDIgKiBsIC0gdDI7XG5cblx0Y29uc3QgcmdiID0gWzAsIDAsIDBdO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xuXHRcdHQzID0gaCArIDEgLyAzICogLShpIC0gMSk7XG5cdFx0aWYgKHQzIDwgMCkge1xuXHRcdFx0dDMrKztcblx0XHR9XG5cblx0XHRpZiAodDMgPiAxKSB7XG5cdFx0XHR0My0tO1xuXHRcdH1cblxuXHRcdGlmICg2ICogdDMgPCAxKSB7XG5cdFx0XHR2YWwgPSB0MSArICh0MiAtIHQxKSAqIDYgKiB0Mztcblx0XHR9IGVsc2UgaWYgKDIgKiB0MyA8IDEpIHtcblx0XHRcdHZhbCA9IHQyO1xuXHRcdH0gZWxzZSBpZiAoMyAqIHQzIDwgMikge1xuXHRcdFx0dmFsID0gdDEgKyAodDIgLSB0MSkgKiAoMiAvIDMgLSB0MykgKiA2O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YWwgPSB0MTtcblx0XHR9XG5cblx0XHRyZ2JbaV0gPSB2YWwgKiAyNTU7XG5cdH1cblxuXHRyZXR1cm4gcmdiO1xufTtcblxuY29udmVydC5oc2wuaHN2ID0gZnVuY3Rpb24gKGhzbCkge1xuXHRjb25zdCBoID0gaHNsWzBdO1xuXHRsZXQgcyA9IGhzbFsxXSAvIDEwMDtcblx0bGV0IGwgPSBoc2xbMl0gLyAxMDA7XG5cdGxldCBzbWluID0gcztcblx0Y29uc3QgbG1pbiA9IE1hdGgubWF4KGwsIDAuMDEpO1xuXG5cdGwgKj0gMjtcblx0cyAqPSAobCA8PSAxKSA/IGwgOiAyIC0gbDtcblx0c21pbiAqPSBsbWluIDw9IDEgPyBsbWluIDogMiAtIGxtaW47XG5cdGNvbnN0IHYgPSAobCArIHMpIC8gMjtcblx0Y29uc3Qgc3YgPSBsID09PSAwID8gKDIgKiBzbWluKSAvIChsbWluICsgc21pbikgOiAoMiAqIHMpIC8gKGwgKyBzKTtcblxuXHRyZXR1cm4gW2gsIHN2ICogMTAwLCB2ICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaHN2LnJnYiA9IGZ1bmN0aW9uIChoc3YpIHtcblx0Y29uc3QgaCA9IGhzdlswXSAvIDYwO1xuXHRjb25zdCBzID0gaHN2WzFdIC8gMTAwO1xuXHRsZXQgdiA9IGhzdlsyXSAvIDEwMDtcblx0Y29uc3QgaGkgPSBNYXRoLmZsb29yKGgpICUgNjtcblxuXHRjb25zdCBmID0gaCAtIE1hdGguZmxvb3IoaCk7XG5cdGNvbnN0IHAgPSAyNTUgKiB2ICogKDEgLSBzKTtcblx0Y29uc3QgcSA9IDI1NSAqIHYgKiAoMSAtIChzICogZikpO1xuXHRjb25zdCB0ID0gMjU1ICogdiAqICgxIC0gKHMgKiAoMSAtIGYpKSk7XG5cdHYgKj0gMjU1O1xuXG5cdHN3aXRjaCAoaGkpIHtcblx0XHRjYXNlIDA6XG5cdFx0XHRyZXR1cm4gW3YsIHQsIHBdO1xuXHRcdGNhc2UgMTpcblx0XHRcdHJldHVybiBbcSwgdiwgcF07XG5cdFx0Y2FzZSAyOlxuXHRcdFx0cmV0dXJuIFtwLCB2LCB0XTtcblx0XHRjYXNlIDM6XG5cdFx0XHRyZXR1cm4gW3AsIHEsIHZdO1xuXHRcdGNhc2UgNDpcblx0XHRcdHJldHVybiBbdCwgcCwgdl07XG5cdFx0Y2FzZSA1OlxuXHRcdFx0cmV0dXJuIFt2LCBwLCBxXTtcblx0fVxufTtcblxuY29udmVydC5oc3YuaHNsID0gZnVuY3Rpb24gKGhzdikge1xuXHRjb25zdCBoID0gaHN2WzBdO1xuXHRjb25zdCBzID0gaHN2WzFdIC8gMTAwO1xuXHRjb25zdCB2ID0gaHN2WzJdIC8gMTAwO1xuXHRjb25zdCB2bWluID0gTWF0aC5tYXgodiwgMC4wMSk7XG5cdGxldCBzbDtcblx0bGV0IGw7XG5cblx0bCA9ICgyIC0gcykgKiB2O1xuXHRjb25zdCBsbWluID0gKDIgLSBzKSAqIHZtaW47XG5cdHNsID0gcyAqIHZtaW47XG5cdHNsIC89IChsbWluIDw9IDEpID8gbG1pbiA6IDIgLSBsbWluO1xuXHRzbCA9IHNsIHx8IDA7XG5cdGwgLz0gMjtcblxuXHRyZXR1cm4gW2gsIHNsICogMTAwLCBsICogMTAwXTtcbn07XG5cbi8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzcy1jb2xvci8jaHdiLXRvLXJnYlxuY29udmVydC5od2IucmdiID0gZnVuY3Rpb24gKGh3Yikge1xuXHRjb25zdCBoID0gaHdiWzBdIC8gMzYwO1xuXHRsZXQgd2ggPSBod2JbMV0gLyAxMDA7XG5cdGxldCBibCA9IGh3YlsyXSAvIDEwMDtcblx0Y29uc3QgcmF0aW8gPSB3aCArIGJsO1xuXHRsZXQgZjtcblxuXHQvLyBXaCArIGJsIGNhbnQgYmUgPiAxXG5cdGlmIChyYXRpbyA+IDEpIHtcblx0XHR3aCAvPSByYXRpbztcblx0XHRibCAvPSByYXRpbztcblx0fVxuXG5cdGNvbnN0IGkgPSBNYXRoLmZsb29yKDYgKiBoKTtcblx0Y29uc3QgdiA9IDEgLSBibDtcblx0ZiA9IDYgKiBoIC0gaTtcblxuXHRpZiAoKGkgJiAweDAxKSAhPT0gMCkge1xuXHRcdGYgPSAxIC0gZjtcblx0fVxuXG5cdGNvbnN0IG4gPSB3aCArIGYgKiAodiAtIHdoKTsgLy8gTGluZWFyIGludGVycG9sYXRpb25cblxuXHRsZXQgcjtcblx0bGV0IGc7XG5cdGxldCBiO1xuXHQvKiBlc2xpbnQtZGlzYWJsZSBtYXgtc3RhdGVtZW50cy1wZXItbGluZSxuby1tdWx0aS1zcGFjZXMgKi9cblx0c3dpdGNoIChpKSB7XG5cdFx0ZGVmYXVsdDpcblx0XHRjYXNlIDY6XG5cdFx0Y2FzZSAwOiByID0gdjsgIGcgPSBuOyAgYiA9IHdoOyBicmVhaztcblx0XHRjYXNlIDE6IHIgPSBuOyAgZyA9IHY7ICBiID0gd2g7IGJyZWFrO1xuXHRcdGNhc2UgMjogciA9IHdoOyBnID0gdjsgIGIgPSBuOyBicmVhaztcblx0XHRjYXNlIDM6IHIgPSB3aDsgZyA9IG47ICBiID0gdjsgYnJlYWs7XG5cdFx0Y2FzZSA0OiByID0gbjsgIGcgPSB3aDsgYiA9IHY7IGJyZWFrO1xuXHRcdGNhc2UgNTogciA9IHY7ICBnID0gd2g7IGIgPSBuOyBicmVhaztcblx0fVxuXHQvKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzLXBlci1saW5lLG5vLW11bHRpLXNwYWNlcyAqL1xuXG5cdHJldHVybiBbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NV07XG59O1xuXG5jb252ZXJ0LmNteWsucmdiID0gZnVuY3Rpb24gKGNteWspIHtcblx0Y29uc3QgYyA9IGNteWtbMF0gLyAxMDA7XG5cdGNvbnN0IG0gPSBjbXlrWzFdIC8gMTAwO1xuXHRjb25zdCB5ID0gY215a1syXSAvIDEwMDtcblx0Y29uc3QgayA9IGNteWtbM10gLyAxMDA7XG5cblx0Y29uc3QgciA9IDEgLSBNYXRoLm1pbigxLCBjICogKDEgLSBrKSArIGspO1xuXHRjb25zdCBnID0gMSAtIE1hdGgubWluKDEsIG0gKiAoMSAtIGspICsgayk7XG5cdGNvbnN0IGIgPSAxIC0gTWF0aC5taW4oMSwgeSAqICgxIC0gaykgKyBrKTtcblxuXHRyZXR1cm4gW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTVdO1xufTtcblxuY29udmVydC54eXoucmdiID0gZnVuY3Rpb24gKHh5eikge1xuXHRjb25zdCB4ID0geHl6WzBdIC8gMTAwO1xuXHRjb25zdCB5ID0geHl6WzFdIC8gMTAwO1xuXHRjb25zdCB6ID0geHl6WzJdIC8gMTAwO1xuXHRsZXQgcjtcblx0bGV0IGc7XG5cdGxldCBiO1xuXG5cdHIgPSAoeCAqIDMuMjQwNikgKyAoeSAqIC0xLjUzNzIpICsgKHogKiAtMC40OTg2KTtcblx0ZyA9ICh4ICogLTAuOTY4OSkgKyAoeSAqIDEuODc1OCkgKyAoeiAqIDAuMDQxNSk7XG5cdGIgPSAoeCAqIDAuMDU1NykgKyAoeSAqIC0wLjIwNDApICsgKHogKiAxLjA1NzApO1xuXG5cdC8vIEFzc3VtZSBzUkdCXG5cdHIgPSByID4gMC4wMDMxMzA4XG5cdFx0PyAoKDEuMDU1ICogKHIgKiogKDEuMCAvIDIuNCkpKSAtIDAuMDU1KVxuXHRcdDogciAqIDEyLjkyO1xuXG5cdGcgPSBnID4gMC4wMDMxMzA4XG5cdFx0PyAoKDEuMDU1ICogKGcgKiogKDEuMCAvIDIuNCkpKSAtIDAuMDU1KVxuXHRcdDogZyAqIDEyLjkyO1xuXG5cdGIgPSBiID4gMC4wMDMxMzA4XG5cdFx0PyAoKDEuMDU1ICogKGIgKiogKDEuMCAvIDIuNCkpKSAtIDAuMDU1KVxuXHRcdDogYiAqIDEyLjkyO1xuXG5cdHIgPSBNYXRoLm1pbihNYXRoLm1heCgwLCByKSwgMSk7XG5cdGcgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBnKSwgMSk7XG5cdGIgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBiKSwgMSk7XG5cblx0cmV0dXJuIFtyICogMjU1LCBnICogMjU1LCBiICogMjU1XTtcbn07XG5cbmNvbnZlcnQueHl6LmxhYiA9IGZ1bmN0aW9uICh4eXopIHtcblx0bGV0IHggPSB4eXpbMF07XG5cdGxldCB5ID0geHl6WzFdO1xuXHRsZXQgeiA9IHh5elsyXTtcblxuXHR4IC89IDk1LjA0Nztcblx0eSAvPSAxMDA7XG5cdHogLz0gMTA4Ljg4MztcblxuXHR4ID0geCA+IDAuMDA4ODU2ID8gKHggKiogKDEgLyAzKSkgOiAoNy43ODcgKiB4KSArICgxNiAvIDExNik7XG5cdHkgPSB5ID4gMC4wMDg4NTYgPyAoeSAqKiAoMSAvIDMpKSA6ICg3Ljc4NyAqIHkpICsgKDE2IC8gMTE2KTtcblx0eiA9IHogPiAwLjAwODg1NiA/ICh6ICoqICgxIC8gMykpIDogKDcuNzg3ICogeikgKyAoMTYgLyAxMTYpO1xuXG5cdGNvbnN0IGwgPSAoMTE2ICogeSkgLSAxNjtcblx0Y29uc3QgYSA9IDUwMCAqICh4IC0geSk7XG5cdGNvbnN0IGIgPSAyMDAgKiAoeSAtIHopO1xuXG5cdHJldHVybiBbbCwgYSwgYl07XG59O1xuXG5jb252ZXJ0LmxhYi54eXogPSBmdW5jdGlvbiAobGFiKSB7XG5cdGNvbnN0IGwgPSBsYWJbMF07XG5cdGNvbnN0IGEgPSBsYWJbMV07XG5cdGNvbnN0IGIgPSBsYWJbMl07XG5cdGxldCB4O1xuXHRsZXQgeTtcblx0bGV0IHo7XG5cblx0eSA9IChsICsgMTYpIC8gMTE2O1xuXHR4ID0gYSAvIDUwMCArIHk7XG5cdHogPSB5IC0gYiAvIDIwMDtcblxuXHRjb25zdCB5MiA9IHkgKiogMztcblx0Y29uc3QgeDIgPSB4ICoqIDM7XG5cdGNvbnN0IHoyID0geiAqKiAzO1xuXHR5ID0geTIgPiAwLjAwODg1NiA/IHkyIDogKHkgLSAxNiAvIDExNikgLyA3Ljc4Nztcblx0eCA9IHgyID4gMC4wMDg4NTYgPyB4MiA6ICh4IC0gMTYgLyAxMTYpIC8gNy43ODc7XG5cdHogPSB6MiA+IDAuMDA4ODU2ID8gejIgOiAoeiAtIDE2IC8gMTE2KSAvIDcuNzg3O1xuXG5cdHggKj0gOTUuMDQ3O1xuXHR5ICo9IDEwMDtcblx0eiAqPSAxMDguODgzO1xuXG5cdHJldHVybiBbeCwgeSwgel07XG59O1xuXG5jb252ZXJ0LmxhYi5sY2ggPSBmdW5jdGlvbiAobGFiKSB7XG5cdGNvbnN0IGwgPSBsYWJbMF07XG5cdGNvbnN0IGEgPSBsYWJbMV07XG5cdGNvbnN0IGIgPSBsYWJbMl07XG5cdGxldCBoO1xuXG5cdGNvbnN0IGhyID0gTWF0aC5hdGFuMihiLCBhKTtcblx0aCA9IGhyICogMzYwIC8gMiAvIE1hdGguUEk7XG5cblx0aWYgKGggPCAwKSB7XG5cdFx0aCArPSAzNjA7XG5cdH1cblxuXHRjb25zdCBjID0gTWF0aC5zcXJ0KGEgKiBhICsgYiAqIGIpO1xuXG5cdHJldHVybiBbbCwgYywgaF07XG59O1xuXG5jb252ZXJ0LmxjaC5sYWIgPSBmdW5jdGlvbiAobGNoKSB7XG5cdGNvbnN0IGwgPSBsY2hbMF07XG5cdGNvbnN0IGMgPSBsY2hbMV07XG5cdGNvbnN0IGggPSBsY2hbMl07XG5cblx0Y29uc3QgaHIgPSBoIC8gMzYwICogMiAqIE1hdGguUEk7XG5cdGNvbnN0IGEgPSBjICogTWF0aC5jb3MoaHIpO1xuXHRjb25zdCBiID0gYyAqIE1hdGguc2luKGhyKTtcblxuXHRyZXR1cm4gW2wsIGEsIGJdO1xufTtcblxuY29udmVydC5yZ2IuYW5zaTE2ID0gZnVuY3Rpb24gKGFyZ3MsIHNhdHVyYXRpb24gPSBudWxsKSB7XG5cdGNvbnN0IFtyLCBnLCBiXSA9IGFyZ3M7XG5cdGxldCB2YWx1ZSA9IHNhdHVyYXRpb24gPT09IG51bGwgPyBjb252ZXJ0LnJnYi5oc3YoYXJncylbMl0gOiBzYXR1cmF0aW9uOyAvLyBIc3YgLT4gYW5zaTE2IG9wdGltaXphdGlvblxuXG5cdHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSAvIDUwKTtcblxuXHRpZiAodmFsdWUgPT09IDApIHtcblx0XHRyZXR1cm4gMzA7XG5cdH1cblxuXHRsZXQgYW5zaSA9IDMwXG5cdFx0KyAoKE1hdGgucm91bmQoYiAvIDI1NSkgPDwgMilcblx0XHR8IChNYXRoLnJvdW5kKGcgLyAyNTUpIDw8IDEpXG5cdFx0fCBNYXRoLnJvdW5kKHIgLyAyNTUpKTtcblxuXHRpZiAodmFsdWUgPT09IDIpIHtcblx0XHRhbnNpICs9IDYwO1xuXHR9XG5cblx0cmV0dXJuIGFuc2k7XG59O1xuXG5jb252ZXJ0Lmhzdi5hbnNpMTYgPSBmdW5jdGlvbiAoYXJncykge1xuXHQvLyBPcHRpbWl6YXRpb24gaGVyZTsgd2UgYWxyZWFkeSBrbm93IHRoZSB2YWx1ZSBhbmQgZG9uJ3QgbmVlZCB0byBnZXRcblx0Ly8gaXQgY29udmVydGVkIGZvciB1cy5cblx0cmV0dXJuIGNvbnZlcnQucmdiLmFuc2kxNihjb252ZXJ0Lmhzdi5yZ2IoYXJncyksIGFyZ3NbMl0pO1xufTtcblxuY29udmVydC5yZ2IuYW5zaTI1NiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdGNvbnN0IHIgPSBhcmdzWzBdO1xuXHRjb25zdCBnID0gYXJnc1sxXTtcblx0Y29uc3QgYiA9IGFyZ3NbMl07XG5cblx0Ly8gV2UgdXNlIHRoZSBleHRlbmRlZCBncmV5c2NhbGUgcGFsZXR0ZSBoZXJlLCB3aXRoIHRoZSBleGNlcHRpb24gb2Zcblx0Ly8gYmxhY2sgYW5kIHdoaXRlLiBub3JtYWwgcGFsZXR0ZSBvbmx5IGhhcyA0IGdyZXlzY2FsZSBzaGFkZXMuXG5cdGlmIChyID09PSBnICYmIGcgPT09IGIpIHtcblx0XHRpZiAociA8IDgpIHtcblx0XHRcdHJldHVybiAxNjtcblx0XHR9XG5cblx0XHRpZiAociA+IDI0OCkge1xuXHRcdFx0cmV0dXJuIDIzMTtcblx0XHR9XG5cblx0XHRyZXR1cm4gTWF0aC5yb3VuZCgoKHIgLSA4KSAvIDI0NykgKiAyNCkgKyAyMzI7XG5cdH1cblxuXHRjb25zdCBhbnNpID0gMTZcblx0XHQrICgzNiAqIE1hdGgucm91bmQociAvIDI1NSAqIDUpKVxuXHRcdCsgKDYgKiBNYXRoLnJvdW5kKGcgLyAyNTUgKiA1KSlcblx0XHQrIE1hdGgucm91bmQoYiAvIDI1NSAqIDUpO1xuXG5cdHJldHVybiBhbnNpO1xufTtcblxuY29udmVydC5hbnNpMTYucmdiID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0bGV0IGNvbG9yID0gYXJncyAlIDEwO1xuXG5cdC8vIEhhbmRsZSBncmV5c2NhbGVcblx0aWYgKGNvbG9yID09PSAwIHx8IGNvbG9yID09PSA3KSB7XG5cdFx0aWYgKGFyZ3MgPiA1MCkge1xuXHRcdFx0Y29sb3IgKz0gMy41O1xuXHRcdH1cblxuXHRcdGNvbG9yID0gY29sb3IgLyAxMC41ICogMjU1O1xuXG5cdFx0cmV0dXJuIFtjb2xvciwgY29sb3IsIGNvbG9yXTtcblx0fVxuXG5cdGNvbnN0IG11bHQgPSAofn4oYXJncyA+IDUwKSArIDEpICogMC41O1xuXHRjb25zdCByID0gKChjb2xvciAmIDEpICogbXVsdCkgKiAyNTU7XG5cdGNvbnN0IGcgPSAoKChjb2xvciA+PiAxKSAmIDEpICogbXVsdCkgKiAyNTU7XG5cdGNvbnN0IGIgPSAoKChjb2xvciA+PiAyKSAmIDEpICogbXVsdCkgKiAyNTU7XG5cblx0cmV0dXJuIFtyLCBnLCBiXTtcbn07XG5cbmNvbnZlcnQuYW5zaTI1Ni5yZ2IgPSBmdW5jdGlvbiAoYXJncykge1xuXHQvLyBIYW5kbGUgZ3JleXNjYWxlXG5cdGlmIChhcmdzID49IDIzMikge1xuXHRcdGNvbnN0IGMgPSAoYXJncyAtIDIzMikgKiAxMCArIDg7XG5cdFx0cmV0dXJuIFtjLCBjLCBjXTtcblx0fVxuXG5cdGFyZ3MgLT0gMTY7XG5cblx0bGV0IHJlbTtcblx0Y29uc3QgciA9IE1hdGguZmxvb3IoYXJncyAvIDM2KSAvIDUgKiAyNTU7XG5cdGNvbnN0IGcgPSBNYXRoLmZsb29yKChyZW0gPSBhcmdzICUgMzYpIC8gNikgLyA1ICogMjU1O1xuXHRjb25zdCBiID0gKHJlbSAlIDYpIC8gNSAqIDI1NTtcblxuXHRyZXR1cm4gW3IsIGcsIGJdO1xufTtcblxuY29udmVydC5yZ2IuaGV4ID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0Y29uc3QgaW50ZWdlciA9ICgoTWF0aC5yb3VuZChhcmdzWzBdKSAmIDB4RkYpIDw8IDE2KVxuXHRcdCsgKChNYXRoLnJvdW5kKGFyZ3NbMV0pICYgMHhGRikgPDwgOClcblx0XHQrIChNYXRoLnJvdW5kKGFyZ3NbMl0pICYgMHhGRik7XG5cblx0Y29uc3Qgc3RyaW5nID0gaW50ZWdlci50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblx0cmV0dXJuICcwMDAwMDAnLnN1YnN0cmluZyhzdHJpbmcubGVuZ3RoKSArIHN0cmluZztcbn07XG5cbmNvbnZlcnQuaGV4LnJnYiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdGNvbnN0IG1hdGNoID0gYXJncy50b1N0cmluZygxNikubWF0Y2goL1thLWYwLTldezZ9fFthLWYwLTldezN9L2kpO1xuXHRpZiAoIW1hdGNoKSB7XG5cdFx0cmV0dXJuIFswLCAwLCAwXTtcblx0fVxuXG5cdGxldCBjb2xvclN0cmluZyA9IG1hdGNoWzBdO1xuXG5cdGlmIChtYXRjaFswXS5sZW5ndGggPT09IDMpIHtcblx0XHRjb2xvclN0cmluZyA9IGNvbG9yU3RyaW5nLnNwbGl0KCcnKS5tYXAoY2hhciA9PiB7XG5cdFx0XHRyZXR1cm4gY2hhciArIGNoYXI7XG5cdFx0fSkuam9pbignJyk7XG5cdH1cblxuXHRjb25zdCBpbnRlZ2VyID0gcGFyc2VJbnQoY29sb3JTdHJpbmcsIDE2KTtcblx0Y29uc3QgciA9IChpbnRlZ2VyID4+IDE2KSAmIDB4RkY7XG5cdGNvbnN0IGcgPSAoaW50ZWdlciA+PiA4KSAmIDB4RkY7XG5cdGNvbnN0IGIgPSBpbnRlZ2VyICYgMHhGRjtcblxuXHRyZXR1cm4gW3IsIGcsIGJdO1xufTtcblxuY29udmVydC5yZ2IuaGNnID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCByID0gcmdiWzBdIC8gMjU1O1xuXHRjb25zdCBnID0gcmdiWzFdIC8gMjU1O1xuXHRjb25zdCBiID0gcmdiWzJdIC8gMjU1O1xuXHRjb25zdCBtYXggPSBNYXRoLm1heChNYXRoLm1heChyLCBnKSwgYik7XG5cdGNvbnN0IG1pbiA9IE1hdGgubWluKE1hdGgubWluKHIsIGcpLCBiKTtcblx0Y29uc3QgY2hyb21hID0gKG1heCAtIG1pbik7XG5cdGxldCBncmF5c2NhbGU7XG5cdGxldCBodWU7XG5cblx0aWYgKGNocm9tYSA8IDEpIHtcblx0XHRncmF5c2NhbGUgPSBtaW4gLyAoMSAtIGNocm9tYSk7XG5cdH0gZWxzZSB7XG5cdFx0Z3JheXNjYWxlID0gMDtcblx0fVxuXG5cdGlmIChjaHJvbWEgPD0gMCkge1xuXHRcdGh1ZSA9IDA7XG5cdH0gZWxzZVxuXHRpZiAobWF4ID09PSByKSB7XG5cdFx0aHVlID0gKChnIC0gYikgLyBjaHJvbWEpICUgNjtcblx0fSBlbHNlXG5cdGlmIChtYXggPT09IGcpIHtcblx0XHRodWUgPSAyICsgKGIgLSByKSAvIGNocm9tYTtcblx0fSBlbHNlIHtcblx0XHRodWUgPSA0ICsgKHIgLSBnKSAvIGNocm9tYTtcblx0fVxuXG5cdGh1ZSAvPSA2O1xuXHRodWUgJT0gMTtcblxuXHRyZXR1cm4gW2h1ZSAqIDM2MCwgY2hyb21hICogMTAwLCBncmF5c2NhbGUgKiAxMDBdO1xufTtcblxuY29udmVydC5oc2wuaGNnID0gZnVuY3Rpb24gKGhzbCkge1xuXHRjb25zdCBzID0gaHNsWzFdIC8gMTAwO1xuXHRjb25zdCBsID0gaHNsWzJdIC8gMTAwO1xuXG5cdGNvbnN0IGMgPSBsIDwgMC41ID8gKDIuMCAqIHMgKiBsKSA6ICgyLjAgKiBzICogKDEuMCAtIGwpKTtcblxuXHRsZXQgZiA9IDA7XG5cdGlmIChjIDwgMS4wKSB7XG5cdFx0ZiA9IChsIC0gMC41ICogYykgLyAoMS4wIC0gYyk7XG5cdH1cblxuXHRyZXR1cm4gW2hzbFswXSwgYyAqIDEwMCwgZiAqIDEwMF07XG59O1xuXG5jb252ZXJ0Lmhzdi5oY2cgPSBmdW5jdGlvbiAoaHN2KSB7XG5cdGNvbnN0IHMgPSBoc3ZbMV0gLyAxMDA7XG5cdGNvbnN0IHYgPSBoc3ZbMl0gLyAxMDA7XG5cblx0Y29uc3QgYyA9IHMgKiB2O1xuXHRsZXQgZiA9IDA7XG5cblx0aWYgKGMgPCAxLjApIHtcblx0XHRmID0gKHYgLSBjKSAvICgxIC0gYyk7XG5cdH1cblxuXHRyZXR1cm4gW2hzdlswXSwgYyAqIDEwMCwgZiAqIDEwMF07XG59O1xuXG5jb252ZXJ0LmhjZy5yZ2IgPSBmdW5jdGlvbiAoaGNnKSB7XG5cdGNvbnN0IGggPSBoY2dbMF0gLyAzNjA7XG5cdGNvbnN0IGMgPSBoY2dbMV0gLyAxMDA7XG5cdGNvbnN0IGcgPSBoY2dbMl0gLyAxMDA7XG5cblx0aWYgKGMgPT09IDAuMCkge1xuXHRcdHJldHVybiBbZyAqIDI1NSwgZyAqIDI1NSwgZyAqIDI1NV07XG5cdH1cblxuXHRjb25zdCBwdXJlID0gWzAsIDAsIDBdO1xuXHRjb25zdCBoaSA9IChoICUgMSkgKiA2O1xuXHRjb25zdCB2ID0gaGkgJSAxO1xuXHRjb25zdCB3ID0gMSAtIHY7XG5cdGxldCBtZyA9IDA7XG5cblx0LyogZXNsaW50LWRpc2FibGUgbWF4LXN0YXRlbWVudHMtcGVyLWxpbmUgKi9cblx0c3dpdGNoIChNYXRoLmZsb29yKGhpKSkge1xuXHRcdGNhc2UgMDpcblx0XHRcdHB1cmVbMF0gPSAxOyBwdXJlWzFdID0gdjsgcHVyZVsyXSA9IDA7IGJyZWFrO1xuXHRcdGNhc2UgMTpcblx0XHRcdHB1cmVbMF0gPSB3OyBwdXJlWzFdID0gMTsgcHVyZVsyXSA9IDA7IGJyZWFrO1xuXHRcdGNhc2UgMjpcblx0XHRcdHB1cmVbMF0gPSAwOyBwdXJlWzFdID0gMTsgcHVyZVsyXSA9IHY7IGJyZWFrO1xuXHRcdGNhc2UgMzpcblx0XHRcdHB1cmVbMF0gPSAwOyBwdXJlWzFdID0gdzsgcHVyZVsyXSA9IDE7IGJyZWFrO1xuXHRcdGNhc2UgNDpcblx0XHRcdHB1cmVbMF0gPSB2OyBwdXJlWzFdID0gMDsgcHVyZVsyXSA9IDE7IGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRwdXJlWzBdID0gMTsgcHVyZVsxXSA9IDA7IHB1cmVbMl0gPSB3O1xuXHR9XG5cdC8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMtcGVyLWxpbmUgKi9cblxuXHRtZyA9ICgxLjAgLSBjKSAqIGc7XG5cblx0cmV0dXJuIFtcblx0XHQoYyAqIHB1cmVbMF0gKyBtZykgKiAyNTUsXG5cdFx0KGMgKiBwdXJlWzFdICsgbWcpICogMjU1LFxuXHRcdChjICogcHVyZVsyXSArIG1nKSAqIDI1NVxuXHRdO1xufTtcblxuY29udmVydC5oY2cuaHN2ID0gZnVuY3Rpb24gKGhjZykge1xuXHRjb25zdCBjID0gaGNnWzFdIC8gMTAwO1xuXHRjb25zdCBnID0gaGNnWzJdIC8gMTAwO1xuXG5cdGNvbnN0IHYgPSBjICsgZyAqICgxLjAgLSBjKTtcblx0bGV0IGYgPSAwO1xuXG5cdGlmICh2ID4gMC4wKSB7XG5cdFx0ZiA9IGMgLyB2O1xuXHR9XG5cblx0cmV0dXJuIFtoY2dbMF0sIGYgKiAxMDAsIHYgKiAxMDBdO1xufTtcblxuY29udmVydC5oY2cuaHNsID0gZnVuY3Rpb24gKGhjZykge1xuXHRjb25zdCBjID0gaGNnWzFdIC8gMTAwO1xuXHRjb25zdCBnID0gaGNnWzJdIC8gMTAwO1xuXG5cdGNvbnN0IGwgPSBnICogKDEuMCAtIGMpICsgMC41ICogYztcblx0bGV0IHMgPSAwO1xuXG5cdGlmIChsID4gMC4wICYmIGwgPCAwLjUpIHtcblx0XHRzID0gYyAvICgyICogbCk7XG5cdH0gZWxzZVxuXHRpZiAobCA+PSAwLjUgJiYgbCA8IDEuMCkge1xuXHRcdHMgPSBjIC8gKDIgKiAoMSAtIGwpKTtcblx0fVxuXG5cdHJldHVybiBbaGNnWzBdLCBzICogMTAwLCBsICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaGNnLmh3YiA9IGZ1bmN0aW9uIChoY2cpIHtcblx0Y29uc3QgYyA9IGhjZ1sxXSAvIDEwMDtcblx0Y29uc3QgZyA9IGhjZ1syXSAvIDEwMDtcblx0Y29uc3QgdiA9IGMgKyBnICogKDEuMCAtIGMpO1xuXHRyZXR1cm4gW2hjZ1swXSwgKHYgLSBjKSAqIDEwMCwgKDEgLSB2KSAqIDEwMF07XG59O1xuXG5jb252ZXJ0Lmh3Yi5oY2cgPSBmdW5jdGlvbiAoaHdiKSB7XG5cdGNvbnN0IHcgPSBod2JbMV0gLyAxMDA7XG5cdGNvbnN0IGIgPSBod2JbMl0gLyAxMDA7XG5cdGNvbnN0IHYgPSAxIC0gYjtcblx0Y29uc3QgYyA9IHYgLSB3O1xuXHRsZXQgZyA9IDA7XG5cblx0aWYgKGMgPCAxKSB7XG5cdFx0ZyA9ICh2IC0gYykgLyAoMSAtIGMpO1xuXHR9XG5cblx0cmV0dXJuIFtod2JbMF0sIGMgKiAxMDAsIGcgKiAxMDBdO1xufTtcblxuY29udmVydC5hcHBsZS5yZ2IgPSBmdW5jdGlvbiAoYXBwbGUpIHtcblx0cmV0dXJuIFsoYXBwbGVbMF0gLyA2NTUzNSkgKiAyNTUsIChhcHBsZVsxXSAvIDY1NTM1KSAqIDI1NSwgKGFwcGxlWzJdIC8gNjU1MzUpICogMjU1XTtcbn07XG5cbmNvbnZlcnQucmdiLmFwcGxlID0gZnVuY3Rpb24gKHJnYikge1xuXHRyZXR1cm4gWyhyZ2JbMF0gLyAyNTUpICogNjU1MzUsIChyZ2JbMV0gLyAyNTUpICogNjU1MzUsIChyZ2JbMl0gLyAyNTUpICogNjU1MzVdO1xufTtcblxuY29udmVydC5ncmF5LnJnYiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdHJldHVybiBbYXJnc1swXSAvIDEwMCAqIDI1NSwgYXJnc1swXSAvIDEwMCAqIDI1NSwgYXJnc1swXSAvIDEwMCAqIDI1NV07XG59O1xuXG5jb252ZXJ0LmdyYXkuaHNsID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0cmV0dXJuIFswLCAwLCBhcmdzWzBdXTtcbn07XG5cbmNvbnZlcnQuZ3JheS5oc3YgPSBjb252ZXJ0LmdyYXkuaHNsO1xuXG5jb252ZXJ0LmdyYXkuaHdiID0gZnVuY3Rpb24gKGdyYXkpIHtcblx0cmV0dXJuIFswLCAxMDAsIGdyYXlbMF1dO1xufTtcblxuY29udmVydC5ncmF5LmNteWsgPSBmdW5jdGlvbiAoZ3JheSkge1xuXHRyZXR1cm4gWzAsIDAsIDAsIGdyYXlbMF1dO1xufTtcblxuY29udmVydC5ncmF5LmxhYiA9IGZ1bmN0aW9uIChncmF5KSB7XG5cdHJldHVybiBbZ3JheVswXSwgMCwgMF07XG59O1xuXG5jb252ZXJ0LmdyYXkuaGV4ID0gZnVuY3Rpb24gKGdyYXkpIHtcblx0Y29uc3QgdmFsID0gTWF0aC5yb3VuZChncmF5WzBdIC8gMTAwICogMjU1KSAmIDB4RkY7XG5cdGNvbnN0IGludGVnZXIgPSAodmFsIDw8IDE2KSArICh2YWwgPDwgOCkgKyB2YWw7XG5cblx0Y29uc3Qgc3RyaW5nID0gaW50ZWdlci50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblx0cmV0dXJuICcwMDAwMDAnLnN1YnN0cmluZyhzdHJpbmcubGVuZ3RoKSArIHN0cmluZztcbn07XG5cbmNvbnZlcnQucmdiLmdyYXkgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHZhbCA9IChyZ2JbMF0gKyByZ2JbMV0gKyByZ2JbMl0pIC8gMztcblx0cmV0dXJuIFt2YWwgLyAyNTUgKiAxMDBdO1xufTtcbiIsICJjb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoJy4vY29udmVyc2lvbnMnKTtcblxuLypcblx0VGhpcyBmdW5jdGlvbiByb3V0ZXMgYSBtb2RlbCB0byBhbGwgb3RoZXIgbW9kZWxzLlxuXG5cdGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgcm91dGVkIGhhdmUgYSBwcm9wZXJ0eSBgLmNvbnZlcnNpb25gIGF0dGFjaGVkXG5cdHRvIHRoZSByZXR1cm5lZCBzeW50aGV0aWMgZnVuY3Rpb24uIFRoaXMgcHJvcGVydHkgaXMgYW4gYXJyYXlcblx0b2Ygc3RyaW5ncywgZWFjaCB3aXRoIHRoZSBzdGVwcyBpbiBiZXR3ZWVuIHRoZSAnZnJvbScgYW5kICd0bydcblx0Y29sb3IgbW9kZWxzIChpbmNsdXNpdmUpLlxuXG5cdGNvbnZlcnNpb25zIHRoYXQgYXJlIG5vdCBwb3NzaWJsZSBzaW1wbHkgYXJlIG5vdCBpbmNsdWRlZC5cbiovXG5cbmZ1bmN0aW9uIGJ1aWxkR3JhcGgoKSB7XG5cdGNvbnN0IGdyYXBoID0ge307XG5cdC8vIGh0dHBzOi8vanNwZXJmLmNvbS9vYmplY3Qta2V5cy12cy1mb3ItaW4td2l0aC1jbG9zdXJlLzNcblx0Y29uc3QgbW9kZWxzID0gT2JqZWN0LmtleXMoY29udmVyc2lvbnMpO1xuXG5cdGZvciAobGV0IGxlbiA9IG1vZGVscy5sZW5ndGgsIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRncmFwaFttb2RlbHNbaV1dID0ge1xuXHRcdFx0Ly8gaHR0cDovL2pzcGVyZi5jb20vMS12cy1pbmZpbml0eVxuXHRcdFx0Ly8gbWljcm8tb3B0LCBidXQgdGhpcyBpcyBzaW1wbGUuXG5cdFx0XHRkaXN0YW5jZTogLTEsXG5cdFx0XHRwYXJlbnQ6IG51bGxcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIGdyYXBoO1xufVxuXG4vLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CcmVhZHRoLWZpcnN0X3NlYXJjaFxuZnVuY3Rpb24gZGVyaXZlQkZTKGZyb21Nb2RlbCkge1xuXHRjb25zdCBncmFwaCA9IGJ1aWxkR3JhcGgoKTtcblx0Y29uc3QgcXVldWUgPSBbZnJvbU1vZGVsXTsgLy8gVW5zaGlmdCAtPiBxdWV1ZSAtPiBwb3BcblxuXHRncmFwaFtmcm9tTW9kZWxdLmRpc3RhbmNlID0gMDtcblxuXHR3aGlsZSAocXVldWUubGVuZ3RoKSB7XG5cdFx0Y29uc3QgY3VycmVudCA9IHF1ZXVlLnBvcCgpO1xuXHRcdGNvbnN0IGFkamFjZW50cyA9IE9iamVjdC5rZXlzKGNvbnZlcnNpb25zW2N1cnJlbnRdKTtcblxuXHRcdGZvciAobGV0IGxlbiA9IGFkamFjZW50cy5sZW5ndGgsIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGNvbnN0IGFkamFjZW50ID0gYWRqYWNlbnRzW2ldO1xuXHRcdFx0Y29uc3Qgbm9kZSA9IGdyYXBoW2FkamFjZW50XTtcblxuXHRcdFx0aWYgKG5vZGUuZGlzdGFuY2UgPT09IC0xKSB7XG5cdFx0XHRcdG5vZGUuZGlzdGFuY2UgPSBncmFwaFtjdXJyZW50XS5kaXN0YW5jZSArIDE7XG5cdFx0XHRcdG5vZGUucGFyZW50ID0gY3VycmVudDtcblx0XHRcdFx0cXVldWUudW5zaGlmdChhZGphY2VudCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGdyYXBoO1xufVxuXG5mdW5jdGlvbiBsaW5rKGZyb20sIHRvKSB7XG5cdHJldHVybiBmdW5jdGlvbiAoYXJncykge1xuXHRcdHJldHVybiB0byhmcm9tKGFyZ3MpKTtcblx0fTtcbn1cblxuZnVuY3Rpb24gd3JhcENvbnZlcnNpb24odG9Nb2RlbCwgZ3JhcGgpIHtcblx0Y29uc3QgcGF0aCA9IFtncmFwaFt0b01vZGVsXS5wYXJlbnQsIHRvTW9kZWxdO1xuXHRsZXQgZm4gPSBjb252ZXJzaW9uc1tncmFwaFt0b01vZGVsXS5wYXJlbnRdW3RvTW9kZWxdO1xuXG5cdGxldCBjdXIgPSBncmFwaFt0b01vZGVsXS5wYXJlbnQ7XG5cdHdoaWxlIChncmFwaFtjdXJdLnBhcmVudCkge1xuXHRcdHBhdGgudW5zaGlmdChncmFwaFtjdXJdLnBhcmVudCk7XG5cdFx0Zm4gPSBsaW5rKGNvbnZlcnNpb25zW2dyYXBoW2N1cl0ucGFyZW50XVtjdXJdLCBmbik7XG5cdFx0Y3VyID0gZ3JhcGhbY3VyXS5wYXJlbnQ7XG5cdH1cblxuXHRmbi5jb252ZXJzaW9uID0gcGF0aDtcblx0cmV0dXJuIGZuO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmcm9tTW9kZWwpIHtcblx0Y29uc3QgZ3JhcGggPSBkZXJpdmVCRlMoZnJvbU1vZGVsKTtcblx0Y29uc3QgY29udmVyc2lvbiA9IHt9O1xuXG5cdGNvbnN0IG1vZGVscyA9IE9iamVjdC5rZXlzKGdyYXBoKTtcblx0Zm9yIChsZXQgbGVuID0gbW9kZWxzLmxlbmd0aCwgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdGNvbnN0IHRvTW9kZWwgPSBtb2RlbHNbaV07XG5cdFx0Y29uc3Qgbm9kZSA9IGdyYXBoW3RvTW9kZWxdO1xuXG5cdFx0aWYgKG5vZGUucGFyZW50ID09PSBudWxsKSB7XG5cdFx0XHQvLyBObyBwb3NzaWJsZSBjb252ZXJzaW9uLCBvciB0aGlzIG5vZGUgaXMgdGhlIHNvdXJjZSBtb2RlbC5cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGNvbnZlcnNpb25bdG9Nb2RlbF0gPSB3cmFwQ29udmVyc2lvbih0b01vZGVsLCBncmFwaCk7XG5cdH1cblxuXHRyZXR1cm4gY29udmVyc2lvbjtcbn07XG5cbiIsICJjb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoJy4vY29udmVyc2lvbnMnKTtcbmNvbnN0IHJvdXRlID0gcmVxdWlyZSgnLi9yb3V0ZScpO1xuXG5jb25zdCBjb252ZXJ0ID0ge307XG5cbmNvbnN0IG1vZGVscyA9IE9iamVjdC5rZXlzKGNvbnZlcnNpb25zKTtcblxuZnVuY3Rpb24gd3JhcFJhdyhmbikge1xuXHRjb25zdCB3cmFwcGVkRm4gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuXHRcdGNvbnN0IGFyZzAgPSBhcmdzWzBdO1xuXHRcdGlmIChhcmcwID09PSB1bmRlZmluZWQgfHwgYXJnMCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIGFyZzA7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZzAubGVuZ3RoID4gMSkge1xuXHRcdFx0YXJncyA9IGFyZzA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZuKGFyZ3MpO1xuXHR9O1xuXG5cdC8vIFByZXNlcnZlIC5jb252ZXJzaW9uIHByb3BlcnR5IGlmIHRoZXJlIGlzIG9uZVxuXHRpZiAoJ2NvbnZlcnNpb24nIGluIGZuKSB7XG5cdFx0d3JhcHBlZEZuLmNvbnZlcnNpb24gPSBmbi5jb252ZXJzaW9uO1xuXHR9XG5cblx0cmV0dXJuIHdyYXBwZWRGbjtcbn1cblxuZnVuY3Rpb24gd3JhcFJvdW5kZWQoZm4pIHtcblx0Y29uc3Qgd3JhcHBlZEZuID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcblx0XHRjb25zdCBhcmcwID0gYXJnc1swXTtcblxuXHRcdGlmIChhcmcwID09PSB1bmRlZmluZWQgfHwgYXJnMCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIGFyZzA7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZzAubGVuZ3RoID4gMSkge1xuXHRcdFx0YXJncyA9IGFyZzA7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVzdWx0ID0gZm4oYXJncyk7XG5cblx0XHQvLyBXZSdyZSBhc3N1bWluZyB0aGUgcmVzdWx0IGlzIGFuIGFycmF5IGhlcmUuXG5cdFx0Ly8gc2VlIG5vdGljZSBpbiBjb252ZXJzaW9ucy5qczsgZG9uJ3QgdXNlIGJveCB0eXBlc1xuXHRcdC8vIGluIGNvbnZlcnNpb24gZnVuY3Rpb25zLlxuXHRcdGlmICh0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0Jykge1xuXHRcdFx0Zm9yIChsZXQgbGVuID0gcmVzdWx0Lmxlbmd0aCwgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0XHRyZXN1bHRbaV0gPSBNYXRoLnJvdW5kKHJlc3VsdFtpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcblxuXHQvLyBQcmVzZXJ2ZSAuY29udmVyc2lvbiBwcm9wZXJ0eSBpZiB0aGVyZSBpcyBvbmVcblx0aWYgKCdjb252ZXJzaW9uJyBpbiBmbikge1xuXHRcdHdyYXBwZWRGbi5jb252ZXJzaW9uID0gZm4uY29udmVyc2lvbjtcblx0fVxuXG5cdHJldHVybiB3cmFwcGVkRm47XG59XG5cbm1vZGVscy5mb3JFYWNoKGZyb21Nb2RlbCA9PiB7XG5cdGNvbnZlcnRbZnJvbU1vZGVsXSA9IHt9O1xuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb252ZXJ0W2Zyb21Nb2RlbF0sICdjaGFubmVscycsIHt2YWx1ZTogY29udmVyc2lvbnNbZnJvbU1vZGVsXS5jaGFubmVsc30pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udmVydFtmcm9tTW9kZWxdLCAnbGFiZWxzJywge3ZhbHVlOiBjb252ZXJzaW9uc1tmcm9tTW9kZWxdLmxhYmVsc30pO1xuXG5cdGNvbnN0IHJvdXRlcyA9IHJvdXRlKGZyb21Nb2RlbCk7XG5cdGNvbnN0IHJvdXRlTW9kZWxzID0gT2JqZWN0LmtleXMocm91dGVzKTtcblxuXHRyb3V0ZU1vZGVscy5mb3JFYWNoKHRvTW9kZWwgPT4ge1xuXHRcdGNvbnN0IGZuID0gcm91dGVzW3RvTW9kZWxdO1xuXG5cdFx0Y29udmVydFtmcm9tTW9kZWxdW3RvTW9kZWxdID0gd3JhcFJvdW5kZWQoZm4pO1xuXHRcdGNvbnZlcnRbZnJvbU1vZGVsXVt0b01vZGVsXS5yYXcgPSB3cmFwUmF3KGZuKTtcblx0fSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb252ZXJ0O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3Qgd3JhcEFuc2kxNiA9IChmbiwgb2Zmc2V0KSA9PiAoLi4uYXJncykgPT4ge1xuXHRjb25zdCBjb2RlID0gZm4oLi4uYXJncyk7XG5cdHJldHVybiBgXFx1MDAxQlske2NvZGUgKyBvZmZzZXR9bWA7XG59O1xuXG5jb25zdCB3cmFwQW5zaTI1NiA9IChmbiwgb2Zmc2V0KSA9PiAoLi4uYXJncykgPT4ge1xuXHRjb25zdCBjb2RlID0gZm4oLi4uYXJncyk7XG5cdHJldHVybiBgXFx1MDAxQlskezM4ICsgb2Zmc2V0fTs1OyR7Y29kZX1tYDtcbn07XG5cbmNvbnN0IHdyYXBBbnNpMTZtID0gKGZuLCBvZmZzZXQpID0+ICguLi5hcmdzKSA9PiB7XG5cdGNvbnN0IHJnYiA9IGZuKC4uLmFyZ3MpO1xuXHRyZXR1cm4gYFxcdTAwMUJbJHszOCArIG9mZnNldH07Mjske3JnYlswXX07JHtyZ2JbMV19OyR7cmdiWzJdfW1gO1xufTtcblxuY29uc3QgYW5zaTJhbnNpID0gbiA9PiBuO1xuY29uc3QgcmdiMnJnYiA9IChyLCBnLCBiKSA9PiBbciwgZywgYl07XG5cbmNvbnN0IHNldExhenlQcm9wZXJ0eSA9IChvYmplY3QsIHByb3BlcnR5LCBnZXQpID0+IHtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIHtcblx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdGNvbnN0IHZhbHVlID0gZ2V0KCk7XG5cblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCB7XG5cdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWVcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fSxcblx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHR9KTtcbn07XG5cbi8qKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnY29sb3ItY29udmVydCcpfSAqL1xubGV0IGNvbG9yQ29udmVydDtcbmNvbnN0IG1ha2VEeW5hbWljU3R5bGVzID0gKHdyYXAsIHRhcmdldFNwYWNlLCBpZGVudGl0eSwgaXNCYWNrZ3JvdW5kKSA9PiB7XG5cdGlmIChjb2xvckNvbnZlcnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdGNvbG9yQ29udmVydCA9IHJlcXVpcmUoJ2NvbG9yLWNvbnZlcnQnKTtcblx0fVxuXG5cdGNvbnN0IG9mZnNldCA9IGlzQmFja2dyb3VuZCA/IDEwIDogMDtcblx0Y29uc3Qgc3R5bGVzID0ge307XG5cblx0Zm9yIChjb25zdCBbc291cmNlU3BhY2UsIHN1aXRlXSBvZiBPYmplY3QuZW50cmllcyhjb2xvckNvbnZlcnQpKSB7XG5cdFx0Y29uc3QgbmFtZSA9IHNvdXJjZVNwYWNlID09PSAnYW5zaTE2JyA/ICdhbnNpJyA6IHNvdXJjZVNwYWNlO1xuXHRcdGlmIChzb3VyY2VTcGFjZSA9PT0gdGFyZ2V0U3BhY2UpIHtcblx0XHRcdHN0eWxlc1tuYW1lXSA9IHdyYXAoaWRlbnRpdHksIG9mZnNldCk7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2Ygc3VpdGUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRzdHlsZXNbbmFtZV0gPSB3cmFwKHN1aXRlW3RhcmdldFNwYWNlXSwgb2Zmc2V0KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gc3R5bGVzO1xufTtcblxuZnVuY3Rpb24gYXNzZW1ibGVTdHlsZXMoKSB7XG5cdGNvbnN0IGNvZGVzID0gbmV3IE1hcCgpO1xuXHRjb25zdCBzdHlsZXMgPSB7XG5cdFx0bW9kaWZpZXI6IHtcblx0XHRcdHJlc2V0OiBbMCwgMF0sXG5cdFx0XHQvLyAyMSBpc24ndCB3aWRlbHkgc3VwcG9ydGVkIGFuZCAyMiBkb2VzIHRoZSBzYW1lIHRoaW5nXG5cdFx0XHRib2xkOiBbMSwgMjJdLFxuXHRcdFx0ZGltOiBbMiwgMjJdLFxuXHRcdFx0aXRhbGljOiBbMywgMjNdLFxuXHRcdFx0dW5kZXJsaW5lOiBbNCwgMjRdLFxuXHRcdFx0aW52ZXJzZTogWzcsIDI3XSxcblx0XHRcdGhpZGRlbjogWzgsIDI4XSxcblx0XHRcdHN0cmlrZXRocm91Z2g6IFs5LCAyOV1cblx0XHR9LFxuXHRcdGNvbG9yOiB7XG5cdFx0XHRibGFjazogWzMwLCAzOV0sXG5cdFx0XHRyZWQ6IFszMSwgMzldLFxuXHRcdFx0Z3JlZW46IFszMiwgMzldLFxuXHRcdFx0eWVsbG93OiBbMzMsIDM5XSxcblx0XHRcdGJsdWU6IFszNCwgMzldLFxuXHRcdFx0bWFnZW50YTogWzM1LCAzOV0sXG5cdFx0XHRjeWFuOiBbMzYsIDM5XSxcblx0XHRcdHdoaXRlOiBbMzcsIDM5XSxcblxuXHRcdFx0Ly8gQnJpZ2h0IGNvbG9yXG5cdFx0XHRibGFja0JyaWdodDogWzkwLCAzOV0sXG5cdFx0XHRyZWRCcmlnaHQ6IFs5MSwgMzldLFxuXHRcdFx0Z3JlZW5CcmlnaHQ6IFs5MiwgMzldLFxuXHRcdFx0eWVsbG93QnJpZ2h0OiBbOTMsIDM5XSxcblx0XHRcdGJsdWVCcmlnaHQ6IFs5NCwgMzldLFxuXHRcdFx0bWFnZW50YUJyaWdodDogWzk1LCAzOV0sXG5cdFx0XHRjeWFuQnJpZ2h0OiBbOTYsIDM5XSxcblx0XHRcdHdoaXRlQnJpZ2h0OiBbOTcsIDM5XVxuXHRcdH0sXG5cdFx0YmdDb2xvcjoge1xuXHRcdFx0YmdCbGFjazogWzQwLCA0OV0sXG5cdFx0XHRiZ1JlZDogWzQxLCA0OV0sXG5cdFx0XHRiZ0dyZWVuOiBbNDIsIDQ5XSxcblx0XHRcdGJnWWVsbG93OiBbNDMsIDQ5XSxcblx0XHRcdGJnQmx1ZTogWzQ0LCA0OV0sXG5cdFx0XHRiZ01hZ2VudGE6IFs0NSwgNDldLFxuXHRcdFx0YmdDeWFuOiBbNDYsIDQ5XSxcblx0XHRcdGJnV2hpdGU6IFs0NywgNDldLFxuXG5cdFx0XHQvLyBCcmlnaHQgY29sb3Jcblx0XHRcdGJnQmxhY2tCcmlnaHQ6IFsxMDAsIDQ5XSxcblx0XHRcdGJnUmVkQnJpZ2h0OiBbMTAxLCA0OV0sXG5cdFx0XHRiZ0dyZWVuQnJpZ2h0OiBbMTAyLCA0OV0sXG5cdFx0XHRiZ1llbGxvd0JyaWdodDogWzEwMywgNDldLFxuXHRcdFx0YmdCbHVlQnJpZ2h0OiBbMTA0LCA0OV0sXG5cdFx0XHRiZ01hZ2VudGFCcmlnaHQ6IFsxMDUsIDQ5XSxcblx0XHRcdGJnQ3lhbkJyaWdodDogWzEwNiwgNDldLFxuXHRcdFx0YmdXaGl0ZUJyaWdodDogWzEwNywgNDldXG5cdFx0fVxuXHR9O1xuXG5cdC8vIEFsaWFzIGJyaWdodCBibGFjayBhcyBncmF5IChhbmQgZ3JleSlcblx0c3R5bGVzLmNvbG9yLmdyYXkgPSBzdHlsZXMuY29sb3IuYmxhY2tCcmlnaHQ7XG5cdHN0eWxlcy5iZ0NvbG9yLmJnR3JheSA9IHN0eWxlcy5iZ0NvbG9yLmJnQmxhY2tCcmlnaHQ7XG5cdHN0eWxlcy5jb2xvci5ncmV5ID0gc3R5bGVzLmNvbG9yLmJsYWNrQnJpZ2h0O1xuXHRzdHlsZXMuYmdDb2xvci5iZ0dyZXkgPSBzdHlsZXMuYmdDb2xvci5iZ0JsYWNrQnJpZ2h0O1xuXG5cdGZvciAoY29uc3QgW2dyb3VwTmFtZSwgZ3JvdXBdIG9mIE9iamVjdC5lbnRyaWVzKHN0eWxlcykpIHtcblx0XHRmb3IgKGNvbnN0IFtzdHlsZU5hbWUsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhncm91cCkpIHtcblx0XHRcdHN0eWxlc1tzdHlsZU5hbWVdID0ge1xuXHRcdFx0XHRvcGVuOiBgXFx1MDAxQlske3N0eWxlWzBdfW1gLFxuXHRcdFx0XHRjbG9zZTogYFxcdTAwMUJbJHtzdHlsZVsxXX1tYFxuXHRcdFx0fTtcblxuXHRcdFx0Z3JvdXBbc3R5bGVOYW1lXSA9IHN0eWxlc1tzdHlsZU5hbWVdO1xuXG5cdFx0XHRjb2Rlcy5zZXQoc3R5bGVbMF0sIHN0eWxlWzFdKTtcblx0XHR9XG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoc3R5bGVzLCBncm91cE5hbWUsIHtcblx0XHRcdHZhbHVlOiBncm91cCxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlXG5cdFx0fSk7XG5cdH1cblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoc3R5bGVzLCAnY29kZXMnLCB7XG5cdFx0dmFsdWU6IGNvZGVzLFxuXHRcdGVudW1lcmFibGU6IGZhbHNlXG5cdH0pO1xuXG5cdHN0eWxlcy5jb2xvci5jbG9zZSA9ICdcXHUwMDFCWzM5bSc7XG5cdHN0eWxlcy5iZ0NvbG9yLmNsb3NlID0gJ1xcdTAwMUJbNDltJztcblxuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmNvbG9yLCAnYW5zaScsICgpID0+IG1ha2VEeW5hbWljU3R5bGVzKHdyYXBBbnNpMTYsICdhbnNpMTYnLCBhbnNpMmFuc2ksIGZhbHNlKSk7XG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuY29sb3IsICdhbnNpMjU2JywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kyNTYsICdhbnNpMjU2JywgYW5zaTJhbnNpLCBmYWxzZSkpO1xuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmNvbG9yLCAnYW5zaTE2bScsICgpID0+IG1ha2VEeW5hbWljU3R5bGVzKHdyYXBBbnNpMTZtLCAncmdiJywgcmdiMnJnYiwgZmFsc2UpKTtcblx0c2V0TGF6eVByb3BlcnR5KHN0eWxlcy5iZ0NvbG9yLCAnYW5zaScsICgpID0+IG1ha2VEeW5hbWljU3R5bGVzKHdyYXBBbnNpMTYsICdhbnNpMTYnLCBhbnNpMmFuc2ksIHRydWUpKTtcblx0c2V0TGF6eVByb3BlcnR5KHN0eWxlcy5iZ0NvbG9yLCAnYW5zaTI1NicsICgpID0+IG1ha2VEeW5hbWljU3R5bGVzKHdyYXBBbnNpMjU2LCAnYW5zaTI1NicsIGFuc2kyYW5zaSwgdHJ1ZSkpO1xuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmJnQ29sb3IsICdhbnNpMTZtJywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kxNm0sICdyZ2InLCByZ2IycmdiLCB0cnVlKSk7XG5cblx0cmV0dXJuIHN0eWxlcztcbn1cblxuLy8gTWFrZSB0aGUgZXhwb3J0IGltbXV0YWJsZVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgJ2V4cG9ydHMnLCB7XG5cdGVudW1lcmFibGU6IHRydWUsXG5cdGdldDogYXNzZW1ibGVTdHlsZXNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSAoZmxhZywgYXJndiA9IHByb2Nlc3MuYXJndikgPT4ge1xuXHRjb25zdCBwcmVmaXggPSBmbGFnLnN0YXJ0c1dpdGgoJy0nKSA/ICcnIDogKGZsYWcubGVuZ3RoID09PSAxID8gJy0nIDogJy0tJyk7XG5cdGNvbnN0IHBvc2l0aW9uID0gYXJndi5pbmRleE9mKHByZWZpeCArIGZsYWcpO1xuXHRjb25zdCB0ZXJtaW5hdG9yUG9zaXRpb24gPSBhcmd2LmluZGV4T2YoJy0tJyk7XG5cdHJldHVybiBwb3NpdGlvbiAhPT0gLTEgJiYgKHRlcm1pbmF0b3JQb3NpdGlvbiA9PT0gLTEgfHwgcG9zaXRpb24gPCB0ZXJtaW5hdG9yUG9zaXRpb24pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBvcyA9IHJlcXVpcmUoJ29zJyk7XG5jb25zdCB0dHkgPSByZXF1aXJlKCd0dHknKTtcbmNvbnN0IGhhc0ZsYWcgPSByZXF1aXJlKCdoYXMtZmxhZycpO1xuXG5jb25zdCB7ZW52fSA9IHByb2Nlc3M7XG5cbmxldCBmb3JjZUNvbG9yO1xuaWYgKGhhc0ZsYWcoJ25vLWNvbG9yJykgfHxcblx0aGFzRmxhZygnbm8tY29sb3JzJykgfHxcblx0aGFzRmxhZygnY29sb3I9ZmFsc2UnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1uZXZlcicpKSB7XG5cdGZvcmNlQ29sb3IgPSAwO1xufSBlbHNlIGlmIChoYXNGbGFnKCdjb2xvcicpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9ycycpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPXRydWUnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1hbHdheXMnKSkge1xuXHRmb3JjZUNvbG9yID0gMTtcbn1cblxuaWYgKCdGT1JDRV9DT0xPUicgaW4gZW52KSB7XG5cdGlmIChlbnYuRk9SQ0VfQ09MT1IgPT09ICd0cnVlJykge1xuXHRcdGZvcmNlQ29sb3IgPSAxO1xuXHR9IGVsc2UgaWYgKGVudi5GT1JDRV9DT0xPUiA9PT0gJ2ZhbHNlJykge1xuXHRcdGZvcmNlQ29sb3IgPSAwO1xuXHR9IGVsc2Uge1xuXHRcdGZvcmNlQ29sb3IgPSBlbnYuRk9SQ0VfQ09MT1IubGVuZ3RoID09PSAwID8gMSA6IE1hdGgubWluKHBhcnNlSW50KGVudi5GT1JDRV9DT0xPUiwgMTApLCAzKTtcblx0fVxufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVMZXZlbChsZXZlbCkge1xuXHRpZiAobGV2ZWwgPT09IDApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGxldmVsLFxuXHRcdGhhc0Jhc2ljOiB0cnVlLFxuXHRcdGhhczI1NjogbGV2ZWwgPj0gMixcblx0XHRoYXMxNm06IGxldmVsID49IDNcblx0fTtcbn1cblxuZnVuY3Rpb24gc3VwcG9ydHNDb2xvcihoYXZlU3RyZWFtLCBzdHJlYW1Jc1RUWSkge1xuXHRpZiAoZm9yY2VDb2xvciA9PT0gMCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTE2bScpIHx8XG5cdFx0aGFzRmxhZygnY29sb3I9ZnVsbCcpIHx8XG5cdFx0aGFzRmxhZygnY29sb3I9dHJ1ZWNvbG9yJykpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmIChoYXNGbGFnKCdjb2xvcj0yNTYnKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cblx0aWYgKGhhdmVTdHJlYW0gJiYgIXN0cmVhbUlzVFRZICYmIGZvcmNlQ29sb3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Y29uc3QgbWluID0gZm9yY2VDb2xvciB8fCAwO1xuXG5cdGlmIChlbnYuVEVSTSA9PT0gJ2R1bWInKSB7XG5cdFx0cmV0dXJuIG1pbjtcblx0fVxuXG5cdGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG5cdFx0Ly8gV2luZG93cyAxMCBidWlsZCAxMDU4NiBpcyB0aGUgZmlyc3QgV2luZG93cyByZWxlYXNlIHRoYXQgc3VwcG9ydHMgMjU2IGNvbG9ycy5cblx0XHQvLyBXaW5kb3dzIDEwIGJ1aWxkIDE0OTMxIGlzIHRoZSBmaXJzdCByZWxlYXNlIHRoYXQgc3VwcG9ydHMgMTZtL1RydWVDb2xvci5cblx0XHRjb25zdCBvc1JlbGVhc2UgPSBvcy5yZWxlYXNlKCkuc3BsaXQoJy4nKTtcblx0XHRpZiAoXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzBdKSA+PSAxMCAmJlxuXHRcdFx0TnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTA1ODZcblx0XHQpIHtcblx0XHRcdHJldHVybiBOdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxNDkzMSA/IDMgOiAyO1xuXHRcdH1cblxuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDSScgaW4gZW52KSB7XG5cdFx0aWYgKFsnVFJBVklTJywgJ0NJUkNMRUNJJywgJ0FQUFZFWU9SJywgJ0dJVExBQl9DSScsICdHSVRIVUJfQUNUSU9OUycsICdCVUlMREtJVEUnXS5zb21lKHNpZ24gPT4gc2lnbiBpbiBlbnYpIHx8IGVudi5DSV9OQU1FID09PSAnY29kZXNoaXAnKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0aWYgKCdURUFNQ0lUWV9WRVJTSU9OJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gL14oOVxcLigwKlsxLTldXFxkKilcXC58XFxkezIsfVxcLikvLnRlc3QoZW52LlRFQU1DSVRZX1ZFUlNJT04pID8gMSA6IDA7XG5cdH1cblxuXHRpZiAoZW52LkNPTE9SVEVSTSA9PT0gJ3RydWVjb2xvcicpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmICgnVEVSTV9QUk9HUkFNJyBpbiBlbnYpIHtcblx0XHRjb25zdCB2ZXJzaW9uID0gcGFyc2VJbnQoKGVudi5URVJNX1BST0dSQU1fVkVSU0lPTiB8fCAnJykuc3BsaXQoJy4nKVswXSwgMTApO1xuXG5cdFx0c3dpdGNoIChlbnYuVEVSTV9QUk9HUkFNKSB7XG5cdFx0XHRjYXNlICdpVGVybS5hcHAnOlxuXHRcdFx0XHRyZXR1cm4gdmVyc2lvbiA+PSAzID8gMyA6IDI7XG5cdFx0XHRjYXNlICdBcHBsZV9UZXJtaW5hbCc6XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0Ly8gTm8gZGVmYXVsdFxuXHRcdH1cblx0fVxuXG5cdGlmICgvLTI1Nihjb2xvcik/JC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblxuXHRpZiAoL15zY3JlZW58Xnh0ZXJtfF52dDEwMHxednQyMjB8XnJ4dnR8Y29sb3J8YW5zaXxjeWd3aW58bGludXgvaS50ZXN0KGVudi5URVJNKSkge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDT0xPUlRFUk0nIGluIGVudikge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0cmV0dXJuIG1pbjtcbn1cblxuZnVuY3Rpb24gZ2V0U3VwcG9ydExldmVsKHN0cmVhbSkge1xuXHRjb25zdCBsZXZlbCA9IHN1cHBvcnRzQ29sb3Ioc3RyZWFtLCBzdHJlYW0gJiYgc3RyZWFtLmlzVFRZKTtcblx0cmV0dXJuIHRyYW5zbGF0ZUxldmVsKGxldmVsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHN1cHBvcnRzQ29sb3I6IGdldFN1cHBvcnRMZXZlbCxcblx0c3Rkb3V0OiB0cmFuc2xhdGVMZXZlbChzdXBwb3J0c0NvbG9yKHRydWUsIHR0eS5pc2F0dHkoMSkpKSxcblx0c3RkZXJyOiB0cmFuc2xhdGVMZXZlbChzdXBwb3J0c0NvbG9yKHRydWUsIHR0eS5pc2F0dHkoMikpKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHN0cmluZ1JlcGxhY2VBbGwgPSAoc3RyaW5nLCBzdWJzdHJpbmcsIHJlcGxhY2VyKSA9PiB7XG5cdGxldCBpbmRleCA9IHN0cmluZy5pbmRleE9mKHN1YnN0cmluZyk7XG5cdGlmIChpbmRleCA9PT0gLTEpIHtcblx0XHRyZXR1cm4gc3RyaW5nO1xuXHR9XG5cblx0Y29uc3Qgc3Vic3RyaW5nTGVuZ3RoID0gc3Vic3RyaW5nLmxlbmd0aDtcblx0bGV0IGVuZEluZGV4ID0gMDtcblx0bGV0IHJldHVyblZhbHVlID0gJyc7XG5cdGRvIHtcblx0XHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc3Vic3RyKGVuZEluZGV4LCBpbmRleCAtIGVuZEluZGV4KSArIHN1YnN0cmluZyArIHJlcGxhY2VyO1xuXHRcdGVuZEluZGV4ID0gaW5kZXggKyBzdWJzdHJpbmdMZW5ndGg7XG5cdFx0aW5kZXggPSBzdHJpbmcuaW5kZXhPZihzdWJzdHJpbmcsIGVuZEluZGV4KTtcblx0fSB3aGlsZSAoaW5kZXggIT09IC0xKTtcblxuXHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc3Vic3RyKGVuZEluZGV4KTtcblx0cmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxuY29uc3Qgc3RyaW5nRW5jYXNlQ1JMRldpdGhGaXJzdEluZGV4ID0gKHN0cmluZywgcHJlZml4LCBwb3N0Zml4LCBpbmRleCkgPT4ge1xuXHRsZXQgZW5kSW5kZXggPSAwO1xuXHRsZXQgcmV0dXJuVmFsdWUgPSAnJztcblx0ZG8ge1xuXHRcdGNvbnN0IGdvdENSID0gc3RyaW5nW2luZGV4IC0gMV0gPT09ICdcXHInO1xuXHRcdHJldHVyblZhbHVlICs9IHN0cmluZy5zdWJzdHIoZW5kSW5kZXgsIChnb3RDUiA/IGluZGV4IC0gMSA6IGluZGV4KSAtIGVuZEluZGV4KSArIHByZWZpeCArIChnb3RDUiA/ICdcXHJcXG4nIDogJ1xcbicpICsgcG9zdGZpeDtcblx0XHRlbmRJbmRleCA9IGluZGV4ICsgMTtcblx0XHRpbmRleCA9IHN0cmluZy5pbmRleE9mKCdcXG4nLCBlbmRJbmRleCk7XG5cdH0gd2hpbGUgKGluZGV4ICE9PSAtMSk7XG5cblx0cmV0dXJuVmFsdWUgKz0gc3RyaW5nLnN1YnN0cihlbmRJbmRleCk7XG5cdHJldHVybiByZXR1cm5WYWx1ZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRzdHJpbmdSZXBsYWNlQWxsLFxuXHRzdHJpbmdFbmNhc2VDUkxGV2l0aEZpcnN0SW5kZXhcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuY29uc3QgVEVNUExBVEVfUkVHRVggPSAvKD86XFxcXCh1KD86W2EtZlxcZF17NH18XFx7W2EtZlxcZF17MSw2fVxcfSl8eFthLWZcXGRdezJ9fC4pKXwoPzpcXHsofik/KFxcdysoPzpcXChbXildKlxcKSk/KD86XFwuXFx3Kyg/OlxcKFteKV0qXFwpKT8pKikoPzpbIFxcdF18KD89XFxyP1xcbikpKXwoXFx9KXwoKD86LnxbXFxyXFxuXFxmXSkrPykvZ2k7XG5jb25zdCBTVFlMRV9SRUdFWCA9IC8oPzpefFxcLikoXFx3KykoPzpcXCgoW14pXSopXFwpKT8vZztcbmNvbnN0IFNUUklOR19SRUdFWCA9IC9eKFsnXCJdKSgoPzpcXFxcLnwoPyFcXDEpW15cXFxcXSkqKVxcMSQvO1xuY29uc3QgRVNDQVBFX1JFR0VYID0gL1xcXFwodSg/OlthLWZcXGRdezR9fHtbYS1mXFxkXXsxLDZ9fSl8eFthLWZcXGRdezJ9fC4pfChbXlxcXFxdKS9naTtcblxuY29uc3QgRVNDQVBFUyA9IG5ldyBNYXAoW1xuXHRbJ24nLCAnXFxuJ10sXG5cdFsncicsICdcXHInXSxcblx0Wyd0JywgJ1xcdCddLFxuXHRbJ2InLCAnXFxiJ10sXG5cdFsnZicsICdcXGYnXSxcblx0Wyd2JywgJ1xcdiddLFxuXHRbJzAnLCAnXFwwJ10sXG5cdFsnXFxcXCcsICdcXFxcJ10sXG5cdFsnZScsICdcXHUwMDFCJ10sXG5cdFsnYScsICdcXHUwMDA3J11cbl0pO1xuXG5mdW5jdGlvbiB1bmVzY2FwZShjKSB7XG5cdGNvbnN0IHUgPSBjWzBdID09PSAndSc7XG5cdGNvbnN0IGJyYWNrZXQgPSBjWzFdID09PSAneyc7XG5cblx0aWYgKCh1ICYmICFicmFja2V0ICYmIGMubGVuZ3RoID09PSA1KSB8fCAoY1swXSA9PT0gJ3gnICYmIGMubGVuZ3RoID09PSAzKSkge1xuXHRcdHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGMuc2xpY2UoMSksIDE2KSk7XG5cdH1cblxuXHRpZiAodSAmJiBicmFja2V0KSB7XG5cdFx0cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KHBhcnNlSW50KGMuc2xpY2UoMiwgLTEpLCAxNikpO1xuXHR9XG5cblx0cmV0dXJuIEVTQ0FQRVMuZ2V0KGMpIHx8IGM7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQXJndW1lbnRzKG5hbWUsIGFyZ3VtZW50c18pIHtcblx0Y29uc3QgcmVzdWx0cyA9IFtdO1xuXHRjb25zdCBjaHVua3MgPSBhcmd1bWVudHNfLnRyaW0oKS5zcGxpdCgvXFxzKixcXHMqL2cpO1xuXHRsZXQgbWF0Y2hlcztcblxuXHRmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rcykge1xuXHRcdGNvbnN0IG51bWJlciA9IE51bWJlcihjaHVuayk7XG5cdFx0aWYgKCFOdW1iZXIuaXNOYU4obnVtYmVyKSkge1xuXHRcdFx0cmVzdWx0cy5wdXNoKG51bWJlcik7XG5cdFx0fSBlbHNlIGlmICgobWF0Y2hlcyA9IGNodW5rLm1hdGNoKFNUUklOR19SRUdFWCkpKSB7XG5cdFx0XHRyZXN1bHRzLnB1c2gobWF0Y2hlc1syXS5yZXBsYWNlKEVTQ0FQRV9SRUdFWCwgKG0sIGVzY2FwZSwgY2hhcmFjdGVyKSA9PiBlc2NhcGUgPyB1bmVzY2FwZShlc2NhcGUpIDogY2hhcmFjdGVyKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBDaGFsayB0ZW1wbGF0ZSBzdHlsZSBhcmd1bWVudDogJHtjaHVua30gKGluIHN0eWxlICcke25hbWV9JylgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gcGFyc2VTdHlsZShzdHlsZSkge1xuXHRTVFlMRV9SRUdFWC5sYXN0SW5kZXggPSAwO1xuXG5cdGNvbnN0IHJlc3VsdHMgPSBbXTtcblx0bGV0IG1hdGNoZXM7XG5cblx0d2hpbGUgKChtYXRjaGVzID0gU1RZTEVfUkVHRVguZXhlYyhzdHlsZSkpICE9PSBudWxsKSB7XG5cdFx0Y29uc3QgbmFtZSA9IG1hdGNoZXNbMV07XG5cblx0XHRpZiAobWF0Y2hlc1syXSkge1xuXHRcdFx0Y29uc3QgYXJncyA9IHBhcnNlQXJndW1lbnRzKG5hbWUsIG1hdGNoZXNbMl0pO1xuXHRcdFx0cmVzdWx0cy5wdXNoKFtuYW1lXS5jb25jYXQoYXJncykpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXN1bHRzLnB1c2goW25hbWVdKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gYnVpbGRTdHlsZShjaGFsaywgc3R5bGVzKSB7XG5cdGNvbnN0IGVuYWJsZWQgPSB7fTtcblxuXHRmb3IgKGNvbnN0IGxheWVyIG9mIHN0eWxlcykge1xuXHRcdGZvciAoY29uc3Qgc3R5bGUgb2YgbGF5ZXIuc3R5bGVzKSB7XG5cdFx0XHRlbmFibGVkW3N0eWxlWzBdXSA9IGxheWVyLmludmVyc2UgPyBudWxsIDogc3R5bGUuc2xpY2UoMSk7XG5cdFx0fVxuXHR9XG5cblx0bGV0IGN1cnJlbnQgPSBjaGFsaztcblx0Zm9yIChjb25zdCBbc3R5bGVOYW1lLCBzdHlsZXNdIG9mIE9iamVjdC5lbnRyaWVzKGVuYWJsZWQpKSB7XG5cdFx0aWYgKCFBcnJheS5pc0FycmF5KHN0eWxlcykpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmICghKHN0eWxlTmFtZSBpbiBjdXJyZW50KSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIENoYWxrIHN0eWxlOiAke3N0eWxlTmFtZX1gKTtcblx0XHR9XG5cblx0XHRjdXJyZW50ID0gc3R5bGVzLmxlbmd0aCA+IDAgPyBjdXJyZW50W3N0eWxlTmFtZV0oLi4uc3R5bGVzKSA6IGN1cnJlbnRbc3R5bGVOYW1lXTtcblx0fVxuXG5cdHJldHVybiBjdXJyZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IChjaGFsaywgdGVtcG9yYXJ5KSA9PiB7XG5cdGNvbnN0IHN0eWxlcyA9IFtdO1xuXHRjb25zdCBjaHVua3MgPSBbXTtcblx0bGV0IGNodW5rID0gW107XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcblx0dGVtcG9yYXJ5LnJlcGxhY2UoVEVNUExBVEVfUkVHRVgsIChtLCBlc2NhcGVDaGFyYWN0ZXIsIGludmVyc2UsIHN0eWxlLCBjbG9zZSwgY2hhcmFjdGVyKSA9PiB7XG5cdFx0aWYgKGVzY2FwZUNoYXJhY3Rlcikge1xuXHRcdFx0Y2h1bmsucHVzaCh1bmVzY2FwZShlc2NhcGVDaGFyYWN0ZXIpKTtcblx0XHR9IGVsc2UgaWYgKHN0eWxlKSB7XG5cdFx0XHRjb25zdCBzdHJpbmcgPSBjaHVuay5qb2luKCcnKTtcblx0XHRcdGNodW5rID0gW107XG5cdFx0XHRjaHVua3MucHVzaChzdHlsZXMubGVuZ3RoID09PSAwID8gc3RyaW5nIDogYnVpbGRTdHlsZShjaGFsaywgc3R5bGVzKShzdHJpbmcpKTtcblx0XHRcdHN0eWxlcy5wdXNoKHtpbnZlcnNlLCBzdHlsZXM6IHBhcnNlU3R5bGUoc3R5bGUpfSk7XG5cdFx0fSBlbHNlIGlmIChjbG9zZSkge1xuXHRcdFx0aWYgKHN0eWxlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdGb3VuZCBleHRyYW5lb3VzIH0gaW4gQ2hhbGsgdGVtcGxhdGUgbGl0ZXJhbCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRjaHVua3MucHVzaChidWlsZFN0eWxlKGNoYWxrLCBzdHlsZXMpKGNodW5rLmpvaW4oJycpKSk7XG5cdFx0XHRjaHVuayA9IFtdO1xuXHRcdFx0c3R5bGVzLnBvcCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjaHVuay5wdXNoKGNoYXJhY3Rlcik7XG5cdFx0fVxuXHR9KTtcblxuXHRjaHVua3MucHVzaChjaHVuay5qb2luKCcnKSk7XG5cblx0aWYgKHN0eWxlcy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgZXJyTWVzc2FnZSA9IGBDaGFsayB0ZW1wbGF0ZSBsaXRlcmFsIGlzIG1pc3NpbmcgJHtzdHlsZXMubGVuZ3RofSBjbG9zaW5nIGJyYWNrZXQke3N0eWxlcy5sZW5ndGggPT09IDEgPyAnJyA6ICdzJ30gKFxcYH1cXGApYDtcblx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyTWVzc2FnZSk7XG5cdH1cblxuXHRyZXR1cm4gY2h1bmtzLmpvaW4oJycpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBhbnNpU3R5bGVzID0gcmVxdWlyZSgnYW5zaS1zdHlsZXMnKTtcbmNvbnN0IHtzdGRvdXQ6IHN0ZG91dENvbG9yLCBzdGRlcnI6IHN0ZGVyckNvbG9yfSA9IHJlcXVpcmUoJ3N1cHBvcnRzLWNvbG9yJyk7XG5jb25zdCB7XG5cdHN0cmluZ1JlcGxhY2VBbGwsXG5cdHN0cmluZ0VuY2FzZUNSTEZXaXRoRmlyc3RJbmRleFxufSA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG5jb25zdCB7aXNBcnJheX0gPSBBcnJheTtcblxuLy8gYHN1cHBvcnRzQ29sb3IubGV2ZWxgIFx1MjE5MiBgYW5zaVN0eWxlcy5jb2xvcltuYW1lXWAgbWFwcGluZ1xuY29uc3QgbGV2ZWxNYXBwaW5nID0gW1xuXHQnYW5zaScsXG5cdCdhbnNpJyxcblx0J2Fuc2kyNTYnLFxuXHQnYW5zaTE2bSdcbl07XG5cbmNvbnN0IHN0eWxlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmNvbnN0IGFwcGx5T3B0aW9ucyA9IChvYmplY3QsIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRpZiAob3B0aW9ucy5sZXZlbCAmJiAhKE51bWJlci5pc0ludGVnZXIob3B0aW9ucy5sZXZlbCkgJiYgb3B0aW9ucy5sZXZlbCA+PSAwICYmIG9wdGlvbnMubGV2ZWwgPD0gMykpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1RoZSBgbGV2ZWxgIG9wdGlvbiBzaG91bGQgYmUgYW4gaW50ZWdlciBmcm9tIDAgdG8gMycpO1xuXHR9XG5cblx0Ly8gRGV0ZWN0IGxldmVsIGlmIG5vdCBzZXQgbWFudWFsbHlcblx0Y29uc3QgY29sb3JMZXZlbCA9IHN0ZG91dENvbG9yID8gc3Rkb3V0Q29sb3IubGV2ZWwgOiAwO1xuXHRvYmplY3QubGV2ZWwgPSBvcHRpb25zLmxldmVsID09PSB1bmRlZmluZWQgPyBjb2xvckxldmVsIDogb3B0aW9ucy5sZXZlbDtcbn07XG5cbmNsYXNzIENoYWxrQ2xhc3Mge1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0cnVjdG9yLXJldHVyblxuXHRcdHJldHVybiBjaGFsa0ZhY3Rvcnkob3B0aW9ucyk7XG5cdH1cbn1cblxuY29uc3QgY2hhbGtGYWN0b3J5ID0gb3B0aW9ucyA9PiB7XG5cdGNvbnN0IGNoYWxrID0ge307XG5cdGFwcGx5T3B0aW9ucyhjaGFsaywgb3B0aW9ucyk7XG5cblx0Y2hhbGsudGVtcGxhdGUgPSAoLi4uYXJndW1lbnRzXykgPT4gY2hhbGtUYWcoY2hhbGsudGVtcGxhdGUsIC4uLmFyZ3VtZW50c18pO1xuXG5cdE9iamVjdC5zZXRQcm90b3R5cGVPZihjaGFsaywgQ2hhbGsucHJvdG90eXBlKTtcblx0T2JqZWN0LnNldFByb3RvdHlwZU9mKGNoYWxrLnRlbXBsYXRlLCBjaGFsayk7XG5cblx0Y2hhbGsudGVtcGxhdGUuY29uc3RydWN0b3IgPSAoKSA9PiB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdgY2hhbGsuY29uc3RydWN0b3IoKWAgaXMgZGVwcmVjYXRlZC4gVXNlIGBuZXcgY2hhbGsuSW5zdGFuY2UoKWAgaW5zdGVhZC4nKTtcblx0fTtcblxuXHRjaGFsay50ZW1wbGF0ZS5JbnN0YW5jZSA9IENoYWxrQ2xhc3M7XG5cblx0cmV0dXJuIGNoYWxrLnRlbXBsYXRlO1xufTtcblxuZnVuY3Rpb24gQ2hhbGsob3B0aW9ucykge1xuXHRyZXR1cm4gY2hhbGtGYWN0b3J5KG9wdGlvbnMpO1xufVxuXG5mb3IgKGNvbnN0IFtzdHlsZU5hbWUsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhhbnNpU3R5bGVzKSkge1xuXHRzdHlsZXNbc3R5bGVOYW1lXSA9IHtcblx0XHRnZXQoKSB7XG5cdFx0XHRjb25zdCBidWlsZGVyID0gY3JlYXRlQnVpbGRlcih0aGlzLCBjcmVhdGVTdHlsZXIoc3R5bGUub3Blbiwgc3R5bGUuY2xvc2UsIHRoaXMuX3N0eWxlciksIHRoaXMuX2lzRW1wdHkpO1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHN0eWxlTmFtZSwge3ZhbHVlOiBidWlsZGVyfSk7XG5cdFx0XHRyZXR1cm4gYnVpbGRlcjtcblx0XHR9XG5cdH07XG59XG5cbnN0eWxlcy52aXNpYmxlID0ge1xuXHRnZXQoKSB7XG5cdFx0Y29uc3QgYnVpbGRlciA9IGNyZWF0ZUJ1aWxkZXIodGhpcywgdGhpcy5fc3R5bGVyLCB0cnVlKTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3Zpc2libGUnLCB7dmFsdWU6IGJ1aWxkZXJ9KTtcblx0XHRyZXR1cm4gYnVpbGRlcjtcblx0fVxufTtcblxuY29uc3QgdXNlZE1vZGVscyA9IFsncmdiJywgJ2hleCcsICdrZXl3b3JkJywgJ2hzbCcsICdoc3YnLCAnaHdiJywgJ2Fuc2knLCAnYW5zaTI1NiddO1xuXG5mb3IgKGNvbnN0IG1vZGVsIG9mIHVzZWRNb2RlbHMpIHtcblx0c3R5bGVzW21vZGVsXSA9IHtcblx0XHRnZXQoKSB7XG5cdFx0XHRjb25zdCB7bGV2ZWx9ID0gdGhpcztcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoLi4uYXJndW1lbnRzXykge1xuXHRcdFx0XHRjb25zdCBzdHlsZXIgPSBjcmVhdGVTdHlsZXIoYW5zaVN0eWxlcy5jb2xvcltsZXZlbE1hcHBpbmdbbGV2ZWxdXVttb2RlbF0oLi4uYXJndW1lbnRzXyksIGFuc2lTdHlsZXMuY29sb3IuY2xvc2UsIHRoaXMuX3N0eWxlcik7XG5cdFx0XHRcdHJldHVybiBjcmVhdGVCdWlsZGVyKHRoaXMsIHN0eWxlciwgdGhpcy5faXNFbXB0eSk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fTtcbn1cblxuZm9yIChjb25zdCBtb2RlbCBvZiB1c2VkTW9kZWxzKSB7XG5cdGNvbnN0IGJnTW9kZWwgPSAnYmcnICsgbW9kZWxbMF0udG9VcHBlckNhc2UoKSArIG1vZGVsLnNsaWNlKDEpO1xuXHRzdHlsZXNbYmdNb2RlbF0gPSB7XG5cdFx0Z2V0KCkge1xuXHRcdFx0Y29uc3Qge2xldmVsfSA9IHRoaXM7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3VtZW50c18pIHtcblx0XHRcdFx0Y29uc3Qgc3R5bGVyID0gY3JlYXRlU3R5bGVyKGFuc2lTdHlsZXMuYmdDb2xvcltsZXZlbE1hcHBpbmdbbGV2ZWxdXVttb2RlbF0oLi4uYXJndW1lbnRzXyksIGFuc2lTdHlsZXMuYmdDb2xvci5jbG9zZSwgdGhpcy5fc3R5bGVyKTtcblx0XHRcdFx0cmV0dXJuIGNyZWF0ZUJ1aWxkZXIodGhpcywgc3R5bGVyLCB0aGlzLl9pc0VtcHR5KTtcblx0XHRcdH07XG5cdFx0fVxuXHR9O1xufVxuXG5jb25zdCBwcm90byA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCgpID0+IHt9LCB7XG5cdC4uLnN0eWxlcyxcblx0bGV2ZWw6IHtcblx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdGdldCgpIHtcblx0XHRcdHJldHVybiB0aGlzLl9nZW5lcmF0b3IubGV2ZWw7XG5cdFx0fSxcblx0XHRzZXQobGV2ZWwpIHtcblx0XHRcdHRoaXMuX2dlbmVyYXRvci5sZXZlbCA9IGxldmVsO1xuXHRcdH1cblx0fVxufSk7XG5cbmNvbnN0IGNyZWF0ZVN0eWxlciA9IChvcGVuLCBjbG9zZSwgcGFyZW50KSA9PiB7XG5cdGxldCBvcGVuQWxsO1xuXHRsZXQgY2xvc2VBbGw7XG5cdGlmIChwYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdG9wZW5BbGwgPSBvcGVuO1xuXHRcdGNsb3NlQWxsID0gY2xvc2U7XG5cdH0gZWxzZSB7XG5cdFx0b3BlbkFsbCA9IHBhcmVudC5vcGVuQWxsICsgb3Blbjtcblx0XHRjbG9zZUFsbCA9IGNsb3NlICsgcGFyZW50LmNsb3NlQWxsO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRvcGVuLFxuXHRcdGNsb3NlLFxuXHRcdG9wZW5BbGwsXG5cdFx0Y2xvc2VBbGwsXG5cdFx0cGFyZW50XG5cdH07XG59O1xuXG5jb25zdCBjcmVhdGVCdWlsZGVyID0gKHNlbGYsIF9zdHlsZXIsIF9pc0VtcHR5KSA9PiB7XG5cdGNvbnN0IGJ1aWxkZXIgPSAoLi4uYXJndW1lbnRzXykgPT4ge1xuXHRcdGlmIChpc0FycmF5KGFyZ3VtZW50c19bMF0pICYmIGlzQXJyYXkoYXJndW1lbnRzX1swXS5yYXcpKSB7XG5cdFx0XHQvLyBDYWxsZWQgYXMgYSB0ZW1wbGF0ZSBsaXRlcmFsLCBmb3IgZXhhbXBsZTogY2hhbGsucmVkYDIgKyAzID0ge2JvbGQgJHsyKzN9fWBcblx0XHRcdHJldHVybiBhcHBseVN0eWxlKGJ1aWxkZXIsIGNoYWxrVGFnKGJ1aWxkZXIsIC4uLmFyZ3VtZW50c18pKTtcblx0XHR9XG5cblx0XHQvLyBTaW5nbGUgYXJndW1lbnQgaXMgaG90IHBhdGgsIGltcGxpY2l0IGNvZXJjaW9uIGlzIGZhc3RlciB0aGFuIGFueXRoaW5nXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWltcGxpY2l0LWNvZXJjaW9uXG5cdFx0cmV0dXJuIGFwcGx5U3R5bGUoYnVpbGRlciwgKGFyZ3VtZW50c18ubGVuZ3RoID09PSAxKSA/ICgnJyArIGFyZ3VtZW50c19bMF0pIDogYXJndW1lbnRzXy5qb2luKCcgJykpO1xuXHR9O1xuXG5cdC8vIFdlIGFsdGVyIHRoZSBwcm90b3R5cGUgYmVjYXVzZSB3ZSBtdXN0IHJldHVybiBhIGZ1bmN0aW9uLCBidXQgdGhlcmUgaXNcblx0Ly8gbm8gd2F5IHRvIGNyZWF0ZSBhIGZ1bmN0aW9uIHdpdGggYSBkaWZmZXJlbnQgcHJvdG90eXBlXG5cdE9iamVjdC5zZXRQcm90b3R5cGVPZihidWlsZGVyLCBwcm90byk7XG5cblx0YnVpbGRlci5fZ2VuZXJhdG9yID0gc2VsZjtcblx0YnVpbGRlci5fc3R5bGVyID0gX3N0eWxlcjtcblx0YnVpbGRlci5faXNFbXB0eSA9IF9pc0VtcHR5O1xuXG5cdHJldHVybiBidWlsZGVyO1xufTtcblxuY29uc3QgYXBwbHlTdHlsZSA9IChzZWxmLCBzdHJpbmcpID0+IHtcblx0aWYgKHNlbGYubGV2ZWwgPD0gMCB8fCAhc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHNlbGYuX2lzRW1wdHkgPyAnJyA6IHN0cmluZztcblx0fVxuXG5cdGxldCBzdHlsZXIgPSBzZWxmLl9zdHlsZXI7XG5cblx0aWYgKHN0eWxlciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHN0cmluZztcblx0fVxuXG5cdGNvbnN0IHtvcGVuQWxsLCBjbG9zZUFsbH0gPSBzdHlsZXI7XG5cdGlmIChzdHJpbmcuaW5kZXhPZignXFx1MDAxQicpICE9PSAtMSkge1xuXHRcdHdoaWxlIChzdHlsZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gUmVwbGFjZSBhbnkgaW5zdGFuY2VzIGFscmVhZHkgcHJlc2VudCB3aXRoIGEgcmUtb3BlbmluZyBjb2RlXG5cdFx0XHQvLyBvdGhlcndpc2Ugb25seSB0aGUgcGFydCBvZiB0aGUgc3RyaW5nIHVudGlsIHNhaWQgY2xvc2luZyBjb2RlXG5cdFx0XHQvLyB3aWxsIGJlIGNvbG9yZWQsIGFuZCB0aGUgcmVzdCB3aWxsIHNpbXBseSBiZSAncGxhaW4nLlxuXHRcdFx0c3RyaW5nID0gc3RyaW5nUmVwbGFjZUFsbChzdHJpbmcsIHN0eWxlci5jbG9zZSwgc3R5bGVyLm9wZW4pO1xuXG5cdFx0XHRzdHlsZXIgPSBzdHlsZXIucGFyZW50O1xuXHRcdH1cblx0fVxuXG5cdC8vIFdlIGNhbiBtb3ZlIGJvdGggbmV4dCBhY3Rpb25zIG91dCBvZiBsb29wLCBiZWNhdXNlIHJlbWFpbmluZyBhY3Rpb25zIGluIGxvb3Agd29uJ3QgaGF2ZVxuXHQvLyBhbnkvdmlzaWJsZSBlZmZlY3Qgb24gcGFydHMgd2UgYWRkIGhlcmUuIENsb3NlIHRoZSBzdHlsaW5nIGJlZm9yZSBhIGxpbmVicmVhayBhbmQgcmVvcGVuXG5cdC8vIGFmdGVyIG5leHQgbGluZSB0byBmaXggYSBibGVlZCBpc3N1ZSBvbiBtYWNPUzogaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL2NoYWxrL3B1bGwvOTJcblx0Y29uc3QgbGZJbmRleCA9IHN0cmluZy5pbmRleE9mKCdcXG4nKTtcblx0aWYgKGxmSW5kZXggIT09IC0xKSB7XG5cdFx0c3RyaW5nID0gc3RyaW5nRW5jYXNlQ1JMRldpdGhGaXJzdEluZGV4KHN0cmluZywgY2xvc2VBbGwsIG9wZW5BbGwsIGxmSW5kZXgpO1xuXHR9XG5cblx0cmV0dXJuIG9wZW5BbGwgKyBzdHJpbmcgKyBjbG9zZUFsbDtcbn07XG5cbmxldCB0ZW1wbGF0ZTtcbmNvbnN0IGNoYWxrVGFnID0gKGNoYWxrLCAuLi5zdHJpbmdzKSA9PiB7XG5cdGNvbnN0IFtmaXJzdFN0cmluZ10gPSBzdHJpbmdzO1xuXG5cdGlmICghaXNBcnJheShmaXJzdFN0cmluZykgfHwgIWlzQXJyYXkoZmlyc3RTdHJpbmcucmF3KSkge1xuXHRcdC8vIElmIGNoYWxrKCkgd2FzIGNhbGxlZCBieSBpdHNlbGYgb3Igd2l0aCBhIHN0cmluZyxcblx0XHQvLyByZXR1cm4gdGhlIHN0cmluZyBpdHNlbGYgYXMgYSBzdHJpbmcuXG5cdFx0cmV0dXJuIHN0cmluZ3Muam9pbignICcpO1xuXHR9XG5cblx0Y29uc3QgYXJndW1lbnRzXyA9IHN0cmluZ3Muc2xpY2UoMSk7XG5cdGNvbnN0IHBhcnRzID0gW2ZpcnN0U3RyaW5nLnJhd1swXV07XG5cblx0Zm9yIChsZXQgaSA9IDE7IGkgPCBmaXJzdFN0cmluZy5sZW5ndGg7IGkrKykge1xuXHRcdHBhcnRzLnB1c2goXG5cdFx0XHRTdHJpbmcoYXJndW1lbnRzX1tpIC0gMV0pLnJlcGxhY2UoL1t7fVxcXFxdL2csICdcXFxcJCYnKSxcblx0XHRcdFN0cmluZyhmaXJzdFN0cmluZy5yYXdbaV0pXG5cdFx0KTtcblx0fVxuXG5cdGlmICh0ZW1wbGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGVtcGxhdGUgPSByZXF1aXJlKCcuL3RlbXBsYXRlcycpO1xuXHR9XG5cblx0cmV0dXJuIHRlbXBsYXRlKGNoYWxrLCBwYXJ0cy5qb2luKCcnKSk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDaGFsay5wcm90b3R5cGUsIHN0eWxlcyk7XG5cbmNvbnN0IGNoYWxrID0gQ2hhbGsoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwXG5jaGFsay5zdXBwb3J0c0NvbG9yID0gc3Rkb3V0Q29sb3I7XG5jaGFsay5zdGRlcnIgPSBDaGFsayh7bGV2ZWw6IHN0ZGVyckNvbG9yID8gc3RkZXJyQ29sb3IubGV2ZWwgOiAwfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuY2hhbGsuc3RkZXJyLnN1cHBvcnRzQ29sb3IgPSBzdGRlcnJDb2xvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBjaGFsaztcbiIsICIvLyBzb3VyY2Ugb2YgaW5zcGlyYXRpb246IGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvcmVxdWlyZS1mb29sLXdlYnBhY2tcbnZhciByZXF1aXJlRm9vbFdlYnBhY2sgPSBldmFsKFxuICAgICd0eXBlb2YgcmVxdWlyZSAhPT0gXFwndW5kZWZpbmVkXFwnICcgK1xuICAgICc/IHJlcXVpcmUgJyArXG4gICAgJzogZnVuY3Rpb24gKG1vZHVsZSkgeyB0aHJvdyBuZXcgRXJyb3IoXFwnTW9kdWxlIFwiICsgbW9kdWxlICsgXCIgbm90IGZvdW5kLlxcJykgfSdcbik7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZUZvb2xXZWJwYWNrO1xuIiwgInZhciByZXF1aXJlRm9vbFdlYnBhY2sgPSByZXF1aXJlKCcuL3JlcXVpcmVGb29sV2VicGFjaycpO1xuXG4vLyBzb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9mbGV4ZGluZXNoL2Jyb3dzZXItb3Itbm9kZVxudmFyIGlzTm9kZSA9IGZ1bmN0aW9uIChub2RlUHJvY2Vzcykge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBub2RlUHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICBub2RlUHJvY2Vzcy52ZXJzaW9ucyAhPSBudWxsICYmXG4gICAgbm9kZVByb2Nlc3MudmVyc2lvbnMubm9kZSAhPSBudWxsXG4gICk7XG59XG5tb2R1bGUuZXhwb3J0cy5pc05vZGUgPSBpc05vZGVcblxuLy8gZGV0ZXJtaW5lcyB0aGUgSmF2YVNjcmlwdCBwbGF0Zm9ybTogYnJvd3NlciBvciBub2RlXG5tb2R1bGUuZXhwb3J0cy5wbGF0Zm9ybSA9IHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBpc05vZGUocHJvY2VzcylcbiAgPyAnbm9kZSdcbiAgOiAnYnJvd3Nlcic7XG5cbi8vIGRldGVybWluZXMgd2hldGhlciB0aGUgY29kZSBpcyBydW5uaW5nIGluIG1haW4gdGhyZWFkIG9yIG5vdFxuLy8gbm90ZSB0aGF0IGluIG5vZGUuanMgd2UgaGF2ZSB0byBjaGVjayBib3RoIHdvcmtlcl90aHJlYWQgYW5kIGNoaWxkX3Byb2Nlc3NcbnZhciB3b3JrZXJfdGhyZWFkcyA9IHRyeVJlcXVpcmVGb29sV2VicGFjaygnd29ya2VyX3RocmVhZHMnKTtcbm1vZHVsZS5leHBvcnRzLmlzTWFpblRocmVhZCA9IG1vZHVsZS5leHBvcnRzLnBsYXRmb3JtID09PSAnbm9kZSdcbiAgPyAoKCF3b3JrZXJfdGhyZWFkcyB8fCB3b3JrZXJfdGhyZWFkcy5pc01haW5UaHJlYWQpICYmICFwcm9jZXNzLmNvbm5lY3RlZClcbiAgOiB0eXBlb2YgV2luZG93ICE9PSAndW5kZWZpbmVkJztcblxuLy8gZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGNwdXMgYXZhaWxhYmxlXG5tb2R1bGUuZXhwb3J0cy5jcHVzID0gbW9kdWxlLmV4cG9ydHMucGxhdGZvcm0gPT09ICdicm93c2VyJ1xuICA/IHNlbGYubmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3lcbiAgOiByZXF1aXJlRm9vbFdlYnBhY2soJ29zJykuY3B1cygpLmxlbmd0aDtcblxuZnVuY3Rpb24gdHJ5UmVxdWlyZUZvb2xXZWJwYWNrIChtb2R1bGUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcmVxdWlyZUZvb2xXZWJwYWNrKG1vZHVsZSk7XG4gIH0gY2F0Y2goZXJyKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBQcm9taXNlXG4gKlxuICogSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vUnViYVhhLzg1MDEzNTkgZnJvbSBSdWJhWGEgPHRyYXNoQHJ1YmF4YS5vcmc+XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciAgIENhbGxlZCBhcyBoYW5kbGVyKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKVxuICogQHBhcmFtIHtQcm9taXNlfSBbcGFyZW50XSAgIFBhcmVudCBwcm9taXNlIGZvciBwcm9wYWdhdGlvbiBvZiBjYW5jZWwgYW5kIHRpbWVvdXRcbiAqL1xuZnVuY3Rpb24gUHJvbWlzZShoYW5kbGVyLCBwYXJlbnQpIHtcbiAgdmFyIG1lID0gdGhpcztcblxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdGdW5jdGlvbiBwYXJhbWV0ZXIgaGFuZGxlcihyZXNvbHZlLCByZWplY3QpIG1pc3NpbmcnKTtcbiAgfVxuXG4gIHZhciBfb25TdWNjZXNzID0gW107XG4gIHZhciBfb25GYWlsID0gW107XG5cbiAgLy8gc3RhdHVzXG4gIHRoaXMucmVzb2x2ZWQgPSBmYWxzZTtcbiAgdGhpcy5yZWplY3RlZCA9IGZhbHNlO1xuICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBQcm9jZXNzIG9uU3VjY2VzcyBhbmQgb25GYWlsIGNhbGxiYWNrczogYWRkIHRoZW0gdG8gdGhlIHF1ZXVlLlxuICAgKiBPbmNlIHRoZSBwcm9taXNlIGlzIHJlc29sdmUsIHRoZSBmdW5jdGlvbiBfcHJvbWlzZSBpcyByZXBsYWNlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvblN1Y2Nlc3NcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gb25GYWlsXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB2YXIgX3Byb2Nlc3MgPSBmdW5jdGlvbiAob25TdWNjZXNzLCBvbkZhaWwpIHtcbiAgICBfb25TdWNjZXNzLnB1c2gob25TdWNjZXNzKTtcbiAgICBfb25GYWlsLnB1c2gob25GYWlsKTtcbiAgfTtcblxuICAvKipcbiAgICogQWRkIGFuIG9uU3VjY2VzcyBjYWxsYmFjayBhbmQgb3B0aW9uYWxseSBhbiBvbkZhaWwgY2FsbGJhY2sgdG8gdGhlIFByb21pc2VcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gb25TdWNjZXNzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvbkZhaWxdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBwcm9taXNlXG4gICAqL1xuICB0aGlzLnRoZW4gPSBmdW5jdGlvbiAob25TdWNjZXNzLCBvbkZhaWwpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHMgPSBvblN1Y2Nlc3MgPyBfdGhlbihvblN1Y2Nlc3MsIHJlc29sdmUsIHJlamVjdCkgOiByZXNvbHZlO1xuICAgICAgdmFyIGYgPSBvbkZhaWwgICAgPyBfdGhlbihvbkZhaWwsICAgIHJlc29sdmUsIHJlamVjdCkgOiByZWplY3Q7XG5cbiAgICAgIF9wcm9jZXNzKHMsIGYpO1xuICAgIH0sIG1lKTtcbiAgfTtcblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgcHJvbWlzZVxuICAgKiBAcGFyYW0geyp9IHJlc3VsdFxuICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAqL1xuICB2YXIgX3Jlc29sdmUgPSBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgLy8gdXBkYXRlIHN0YXR1c1xuICAgIG1lLnJlc29sdmVkID0gdHJ1ZTtcbiAgICBtZS5yZWplY3RlZCA9IGZhbHNlO1xuICAgIG1lLnBlbmRpbmcgPSBmYWxzZTtcblxuICAgIF9vblN1Y2Nlc3MuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgIGZuKHJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICBfcHJvY2VzcyA9IGZ1bmN0aW9uIChvblN1Y2Nlc3MsIG9uRmFpbCkge1xuICAgICAgb25TdWNjZXNzKHJlc3VsdCk7XG4gICAgfTtcblxuICAgIF9yZXNvbHZlID0gX3JlamVjdCA9IGZ1bmN0aW9uICgpIHsgfTtcblxuICAgIHJldHVybiBtZTtcbiAgfTtcblxuICAvKipcbiAgICogUmVqZWN0IHRoZSBwcm9taXNlXG4gICAqIEBwYXJhbSB7RXJyb3J9IGVycm9yXG4gICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICovXG4gIHZhciBfcmVqZWN0ID0gZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgLy8gdXBkYXRlIHN0YXR1c1xuICAgIG1lLnJlc29sdmVkID0gZmFsc2U7XG4gICAgbWUucmVqZWN0ZWQgPSB0cnVlO1xuICAgIG1lLnBlbmRpbmcgPSBmYWxzZTtcblxuICAgIF9vbkZhaWwuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgIGZuKGVycm9yKTtcbiAgICB9KTtcblxuICAgIF9wcm9jZXNzID0gZnVuY3Rpb24gKG9uU3VjY2Vzcywgb25GYWlsKSB7XG4gICAgICBvbkZhaWwoZXJyb3IpO1xuICAgIH07XG5cbiAgICBfcmVzb2x2ZSA9IF9yZWplY3QgPSBmdW5jdGlvbiAoKSB7IH1cblxuICAgIHJldHVybiBtZTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FuY2VsIHRlIHByb21pc2UuIFRoaXMgd2lsbCByZWplY3QgdGhlIHByb21pc2Ugd2l0aCBhIENhbmNlbGxhdGlvbkVycm9yXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBzZWxmXG4gICAqL1xuICB0aGlzLmNhbmNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBwYXJlbnQuY2FuY2VsKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgX3JlamVjdChuZXcgQ2FuY2VsbGF0aW9uRXJyb3IoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXQgYSB0aW1lb3V0IGZvciB0aGUgcHJvbWlzZS4gSWYgdGhlIHByb21pc2UgaXMgbm90IHJlc29sdmVkIHdpdGhpblxuICAgKiB0aGUgdGltZSwgdGhlIHByb21pc2Ugd2lsbCBiZSBjYW5jZWxsZWQgYW5kIGEgVGltZW91dEVycm9yIGlzIHRocm93bi5cbiAgICogSWYgdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgaW4gdGltZSwgdGhlIHRpbWVvdXQgaXMgcmVtb3ZlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbGF5ICAgICBEZWxheSBpbiBtaWxsaXNlY29uZHNcbiAgICogQHJldHVybnMge1Byb21pc2V9IHNlbGZcbiAgICovXG4gIHRoaXMudGltZW91dCA9IGZ1bmN0aW9uIChkZWxheSkge1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHBhcmVudC50aW1lb3V0KGRlbGF5KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3JlamVjdChuZXcgVGltZW91dEVycm9yKCdQcm9taXNlIHRpbWVkIG91dCBhZnRlciAnICsgZGVsYXkgKyAnIG1zJykpO1xuICAgICAgfSwgZGVsYXkpO1xuXG4gICAgICBtZS5hbHdheXMoZnVuY3Rpb24gKCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lO1xuICB9O1xuXG4gIC8vIGF0dGFjaCBoYW5kbGVyIHBhc3NpbmcgdGhlIHJlc29sdmUgYW5kIHJlamVjdCBmdW5jdGlvbnNcbiAgaGFuZGxlcihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgX3Jlc29sdmUocmVzdWx0KTtcbiAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgX3JlamVjdChlcnJvcik7XG4gIH0pO1xufVxuXG4vKipcbiAqIEV4ZWN1dGUgZ2l2ZW4gY2FsbGJhY2ssIHRoZW4gY2FsbCByZXNvbHZlL3JlamVjdCBiYXNlZCBvbiB0aGUgcmV0dXJuZWQgcmVzdWx0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0XG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfdGhlbihjYWxsYmFjaywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciByZXMgPSBjYWxsYmFjayhyZXN1bHQpO1xuICAgICAgaWYgKHJlcyAmJiB0eXBlb2YgcmVzLnRoZW4gPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHJlc1snY2F0Y2gnXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBtZXRob2QgcmV0dXJuZWQgYSBwcm9taXNlXG4gICAgICAgIHJlcy50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJlamVjdChlcnJvcik7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWRkIGFuIG9uRmFpbCBjYWxsYmFjayB0byB0aGUgUHJvbWlzZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gb25GYWlsXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gcHJvbWlzZVxuICovXG5Qcm9taXNlLnByb3RvdHlwZVsnY2F0Y2gnXSA9IGZ1bmN0aW9uIChvbkZhaWwpIHtcbiAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvbkZhaWwpO1xufTtcblxuLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIFByb21pc2UuY2F0Y2goRXJyb3IsIGNhbGxiYWNrKVxuLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIFByb21pc2UuY2F0Y2goRXJyb3IsIEVycm9yLCBjYWxsYmFjaylcblxuLyoqXG4gKiBFeGVjdXRlIGdpdmVuIGNhbGxiYWNrIHdoZW4gdGhlIHByb21pc2UgZWl0aGVyIHJlc29sdmVzIG9yIHJlamVjdHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybnMge1Byb21pc2V9IHByb21pc2VcbiAqL1xuUHJvbWlzZS5wcm90b3R5cGUuYWx3YXlzID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiB0aGlzLnRoZW4oZm4sIGZuKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aGVuIGFsbCBwcm92aWRlZCBwcm9taXNlcyBhcmUgcmVzb2x2ZWQsXG4gKiBhbmQgZmFpbHMgd2hlbiBhbnkgb2YgdGhlIHByb21pc2VzIHJlc29sdmVzLlxuICogQHBhcmFtIHtQcm9taXNlW119IHByb21pc2VzXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gcHJvbWlzZVxuICovXG5Qcm9taXNlLmFsbCA9IGZ1bmN0aW9uIChwcm9taXNlcyl7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlbWFpbmluZyA9IHByb21pc2VzLmxlbmd0aCxcbiAgICAgICAgcmVzdWx0cyA9IFtdO1xuXG4gICAgaWYgKHJlbWFpbmluZykge1xuICAgICAgcHJvbWlzZXMuZm9yRWFjaChmdW5jdGlvbiAocCwgaSkge1xuICAgICAgICBwLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdHNbaV0gPSByZXN1bHQ7XG4gICAgICAgICAgcmVtYWluaW5nLS07XG4gICAgICAgICAgaWYgKHJlbWFpbmluZyA9PSAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgcmVtYWluaW5nID0gMDtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJlc29sdmUocmVzdWx0cyk7XG4gICAgfVxuICB9KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgcHJvbWlzZSByZXNvbHZlclxuICogQHJldHVybnMge3twcm9taXNlOiBQcm9taXNlLCByZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbn19IHJlc29sdmVyXG4gKi9cblByb21pc2UuZGVmZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciByZXNvbHZlciA9IHt9O1xuXG4gIHJlc29sdmVyLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgcmVzb2x2ZXIucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgcmVzb2x2ZXIucmVqZWN0ID0gcmVqZWN0O1xuICB9KTtcblxuICByZXR1cm4gcmVzb2x2ZXI7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIGNhbmNlbGxhdGlvbiBlcnJvclxuICogQHBhcmFtIHtTdHJpbmd9IFttZXNzYWdlXVxuICogQGV4dGVuZHMgRXJyb3JcbiAqL1xuZnVuY3Rpb24gQ2FuY2VsbGF0aW9uRXJyb3IobWVzc2FnZSkge1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdwcm9taXNlIGNhbmNlbGxlZCc7XG4gIHRoaXMuc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNrO1xufVxuXG5DYW5jZWxsYXRpb25FcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbkNhbmNlbGxhdGlvbkVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVycm9yO1xuQ2FuY2VsbGF0aW9uRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnQ2FuY2VsbGF0aW9uRXJyb3InO1xuXG5Qcm9taXNlLkNhbmNlbGxhdGlvbkVycm9yID0gQ2FuY2VsbGF0aW9uRXJyb3I7XG5cblxuLyoqXG4gKiBDcmVhdGUgYSB0aW1lb3V0IGVycm9yXG4gKiBAcGFyYW0ge1N0cmluZ30gW21lc3NhZ2VdXG4gKiBAZXh0ZW5kcyBFcnJvclxuICovXG5mdW5jdGlvbiBUaW1lb3V0RXJyb3IobWVzc2FnZSkge1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgdGhpcy5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2s7XG59XG5cblRpbWVvdXRFcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcblRpbWVvdXRFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFcnJvcjtcblRpbWVvdXRFcnJvci5wcm90b3R5cGUubmFtZSA9ICdUaW1lb3V0RXJyb3InO1xuXG5Qcm9taXNlLlRpbWVvdXRFcnJvciA9IFRpbWVvdXRFcnJvcjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IFByb21pc2U7XG4iLCAiLyoqXG4gKiBlbWJlZGRlZFdvcmtlci5qcyBjb250YWlucyBhbiBlbWJlZGRlZCB2ZXJzaW9uIG9mIHdvcmtlci5qcy5cbiAqIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCxcbiAqIGNoYW5nZXMgbWFkZSBpbiB0aGlzIGZpbGUgd2lsbCBiZSBvdmVyd3JpdHRlbi5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBcIiFmdW5jdGlvbigpe3ZhciBfX3dlYnBhY2tfZXhwb3J0c19fPXt9OyFmdW5jdGlvbigpe3ZhciBleHBvcnRzPV9fd2VicGFja19leHBvcnRzX18sX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXztmdW5jdGlvbiBfdHlwZW9mKHIpe3JldHVybihfdHlwZW9mPVxcXCJmdW5jdGlvblxcXCI9PXR5cGVvZiBTeW1ib2wmJlxcXCJzeW1ib2xcXFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcn06ZnVuY3Rpb24ocil7cmV0dXJuIHImJlxcXCJmdW5jdGlvblxcXCI9PXR5cGVvZiBTeW1ib2wmJnIuY29uc3RydWN0b3I9PT1TeW1ib2wmJnIhPT1TeW1ib2wucHJvdG90eXBlP1xcXCJzeW1ib2xcXFwiOnR5cGVvZiByfSkocil9dmFyIHJlcXVpcmVGb29sV2VicGFjaz1ldmFsKFxcXCJ0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcgPyByZXF1aXJlIDogZnVuY3Rpb24gKG1vZHVsZSkgeyB0aHJvdyBuZXcgRXJyb3IoJ01vZHVsZSBcXFxcXFxcIiArIG1vZHVsZSArIFxcXFxcXFwiIG5vdCBmb3VuZC4nKSB9XFxcIiksVEVSTUlOQVRFX01FVEhPRF9JRD1cXFwiX193b3JrZXJwb29sLXRlcm1pbmF0ZV9fXFxcIix3b3JrZXI9e2V4aXQ6ZnVuY3Rpb24oKXt9fSxXb3JrZXJUaHJlYWRzLHBhcmVudFBvcnQ7aWYoXFxcInVuZGVmaW5lZFxcXCIhPXR5cGVvZiBzZWxmJiZcXFwiZnVuY3Rpb25cXFwiPT10eXBlb2YgcG9zdE1lc3NhZ2UmJlxcXCJmdW5jdGlvblxcXCI9PXR5cGVvZiBhZGRFdmVudExpc3RlbmVyKXdvcmtlci5vbj1mdW5jdGlvbihyLGUpe2FkZEV2ZW50TGlzdGVuZXIocixmdW5jdGlvbihyKXtlKHIuZGF0YSl9KX0sd29ya2VyLnNlbmQ9ZnVuY3Rpb24ocil7cG9zdE1lc3NhZ2Uocil9O2Vsc2V7aWYoXFxcInVuZGVmaW5lZFxcXCI9PXR5cGVvZiBwcm9jZXNzKXRocm93IG5ldyBFcnJvcihcXFwiU2NyaXB0IG11c3QgYmUgZXhlY3V0ZWQgYXMgYSB3b3JrZXJcXFwiKTt0cnl7V29ya2VyVGhyZWFkcz1yZXF1aXJlRm9vbFdlYnBhY2soXFxcIndvcmtlcl90aHJlYWRzXFxcIil9Y2F0Y2goZXJyb3Ipe2lmKFxcXCJvYmplY3RcXFwiIT09X3R5cGVvZihlcnJvcil8fG51bGw9PT1lcnJvcnx8XFxcIk1PRFVMRV9OT1RfRk9VTkRcXFwiIT09ZXJyb3IuY29kZSl0aHJvdyBlcnJvcn1Xb3JrZXJUaHJlYWRzJiZudWxsIT09V29ya2VyVGhyZWFkcy5wYXJlbnRQb3J0PyhwYXJlbnRQb3J0PVdvcmtlclRocmVhZHMucGFyZW50UG9ydCx3b3JrZXIuc2VuZD1wYXJlbnRQb3J0LnBvc3RNZXNzYWdlLmJpbmQocGFyZW50UG9ydCksd29ya2VyLm9uPXBhcmVudFBvcnQub24uYmluZChwYXJlbnRQb3J0KSk6KHdvcmtlci5vbj1wcm9jZXNzLm9uLmJpbmQocHJvY2Vzcyksd29ya2VyLnNlbmQ9cHJvY2Vzcy5zZW5kLmJpbmQocHJvY2Vzcyksd29ya2VyLm9uKFxcXCJkaXNjb25uZWN0XFxcIixmdW5jdGlvbigpe3Byb2Nlc3MuZXhpdCgxKX0pLHdvcmtlci5leGl0PXByb2Nlc3MuZXhpdC5iaW5kKHByb2Nlc3MpKX1mdW5jdGlvbiBjb252ZXJ0RXJyb3Iobyl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG8pLnJlZHVjZShmdW5jdGlvbihyLGUpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocixlLHt2YWx1ZTpvW2VdLGVudW1lcmFibGU6ITB9KX0se30pfWZ1bmN0aW9uIGlzUHJvbWlzZShyKXtyZXR1cm4gciYmXFxcImZ1bmN0aW9uXFxcIj09dHlwZW9mIHIudGhlbiYmXFxcImZ1bmN0aW9uXFxcIj09dHlwZW9mIHIuY2F0Y2h9d29ya2VyLm1ldGhvZHM9e30sd29ya2VyLm1ldGhvZHMucnVuPWZ1bmN0aW9uKHIsZSl7cj1uZXcgRnVuY3Rpb24oXFxcInJldHVybiAoXFxcIityK1xcXCIpLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XFxcIik7cmV0dXJuIHIuYXBwbHkocixlKX0sd29ya2VyLm1ldGhvZHMubWV0aG9kcz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh3b3JrZXIubWV0aG9kcyl9O3ZhciBjdXJyZW50UmVxdWVzdElkPW51bGw7d29ya2VyLm9uKFxcXCJtZXNzYWdlXFxcIixmdW5jdGlvbihlKXtpZihlPT09VEVSTUlOQVRFX01FVEhPRF9JRClyZXR1cm4gd29ya2VyLmV4aXQoMCk7dHJ5e3ZhciByPXdvcmtlci5tZXRob2RzW2UubWV0aG9kXTtpZighcil0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbWV0aG9kIFxcXCInK2UubWV0aG9kKydcXFwiJyk7Y3VycmVudFJlcXVlc3RJZD1lLmlkO3ZhciBvPXIuYXBwbHkocixlLnBhcmFtcyk7aXNQcm9taXNlKG8pP28udGhlbihmdW5jdGlvbihyKXt3b3JrZXIuc2VuZCh7aWQ6ZS5pZCxyZXN1bHQ6cixlcnJvcjpudWxsfSksY3VycmVudFJlcXVlc3RJZD1udWxsfSkuY2F0Y2goZnVuY3Rpb24ocil7d29ya2VyLnNlbmQoe2lkOmUuaWQscmVzdWx0Om51bGwsZXJyb3I6Y29udmVydEVycm9yKHIpfSksY3VycmVudFJlcXVlc3RJZD1udWxsfSk6KHdvcmtlci5zZW5kKHtpZDplLmlkLHJlc3VsdDpvLGVycm9yOm51bGx9KSxjdXJyZW50UmVxdWVzdElkPW51bGwpfWNhdGNoKHIpe3dvcmtlci5zZW5kKHtpZDplLmlkLHJlc3VsdDpudWxsLGVycm9yOmNvbnZlcnRFcnJvcihyKX0pfX0pLHdvcmtlci5yZWdpc3Rlcj1mdW5jdGlvbihyKXtpZihyKWZvcih2YXIgZSBpbiByKXIuaGFzT3duUHJvcGVydHkoZSkmJih3b3JrZXIubWV0aG9kc1tlXT1yW2VdKTt3b3JrZXIuc2VuZChcXFwicmVhZHlcXFwiKX0sd29ya2VyLmVtaXQ9ZnVuY3Rpb24ocil7Y3VycmVudFJlcXVlc3RJZCYmd29ya2VyLnNlbmQoe2lkOmN1cnJlbnRSZXF1ZXN0SWQsaXNFdmVudDohMCxwYXlsb2FkOnJ9KX0sX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXz13b3JrZXIucmVnaXN0ZXIsd29ya2VyLmVtaXR9KCl9KCk7XCI7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgUHJvbWlzZSA9IHJlcXVpcmUoJy4vUHJvbWlzZScpO1xudmFyIGVudmlyb25tZW50ID0gcmVxdWlyZSgnLi9lbnZpcm9ubWVudCcpO1xudmFyIHJlcXVpcmVGb29sV2VicGFjayA9IHJlcXVpcmUoJy4vcmVxdWlyZUZvb2xXZWJwYWNrJyk7XG5cbi8qKlxuICogU3BlY2lhbCBtZXNzYWdlIHNlbnQgYnkgcGFyZW50IHdoaWNoIGNhdXNlcyBhIGNoaWxkIHByb2Nlc3Mgd29ya2VyIHRvIHRlcm1pbmF0ZSBpdHNlbGYuXG4gKiBOb3QgYSBcIm1lc3NhZ2Ugb2JqZWN0XCI7IHRoaXMgc3RyaW5nIGlzIHRoZSBlbnRpcmUgbWVzc2FnZS5cbiAqL1xudmFyIFRFUk1JTkFURV9NRVRIT0RfSUQgPSAnX193b3JrZXJwb29sLXRlcm1pbmF0ZV9fJztcblxuLyoqXG4gKiBJZiBzZW5kaW5nIGBURVJNSU5BVEVfTUVUSE9EX0lEYCBkb2VzIG5vdCBjYXVzZSB0aGUgY2hpbGQgcHJvY2VzcyB0byBleGl0IGluIHRoaXMgbWFueSBtaWxsaXNlY29uZHMsXG4gKiBmb3JjZS1raWxsIHRoZSBjaGlsZCBwcm9jZXNzLlxuICovXG52YXIgQ0hJTERfUFJPQ0VTU19FWElUX1RJTUVPVVQgPSAxMDAwO1xuXG5mdW5jdGlvbiBlbnN1cmVXb3JrZXJUaHJlYWRzKCkge1xuICB2YXIgV29ya2VyVGhyZWFkcyA9IHRyeVJlcXVpcmVXb3JrZXJUaHJlYWRzKClcbiAgaWYgKCFXb3JrZXJUaHJlYWRzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdXb3JrZXJQb29sOiB3b3JrZXJUeXBlID0gXFwndGhyZWFkXFwnIGlzIG5vdCBzdXBwb3J0ZWQsIE5vZGUgPj0gMTEuNy4wIHJlcXVpcmVkJylcbiAgfVxuXG4gIHJldHVybiBXb3JrZXJUaHJlYWRzO1xufVxuXG4vLyBjaGVjayB3aGV0aGVyIFdvcmtlciBpcyBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXJcbmZ1bmN0aW9uIGVuc3VyZVdlYldvcmtlcigpIHtcbiAgLy8gV29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gUGhhbnRvbUpTIChPciBRdFdlYmtpdCk6IGh0dHBzOi8vZ2l0aHViLmNvbS9hcml5YS9waGFudG9tanMvaXNzdWVzLzE0NTM0XG4gIGlmICh0eXBlb2YgV29ya2VyICE9PSAnZnVuY3Rpb24nICYmICh0eXBlb2YgV29ya2VyICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgV29ya2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciAhPT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1dvcmtlclBvb2w6IFdlYiBXb3JrZXJzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlSZXF1aXJlV29ya2VyVGhyZWFkcygpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcmVxdWlyZUZvb2xXZWJwYWNrKCd3b3JrZXJfdGhyZWFkcycpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcgJiYgZXJyb3IgIT09IG51bGwgJiYgZXJyb3IuY29kZSA9PT0gJ01PRFVMRV9OT1RfRk9VTkQnKSB7XG4gICAgICAvLyBubyB3b3JrZXJfdGhyZWFkcyBhdmFpbGFibGUgKG9sZCB2ZXJzaW9uIG9mIG5vZGUuanMpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG59XG5cbi8vIGdldCB0aGUgZGVmYXVsdCB3b3JrZXIgc2NyaXB0XG5mdW5jdGlvbiBnZXREZWZhdWx0V29ya2VyKCkge1xuICBpZiAoZW52aXJvbm1lbnQucGxhdGZvcm0gPT09ICdicm93c2VyJykge1xuICAgIC8vIHRlc3Qgd2hldGhlciB0aGUgYnJvd3NlciBzdXBwb3J0cyBhbGwgZmVhdHVyZXMgdGhhdCB3ZSBuZWVkXG4gICAgaWYgKHR5cGVvZiBCbG9iID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdCbG9iIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXInKTtcbiAgICB9XG4gICAgaWYgKCF3aW5kb3cuVVJMIHx8IHR5cGVvZiB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVUkwuY3JlYXRlT2JqZWN0VVJMIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXInKTtcbiAgICB9XG5cbiAgICAvLyB1c2UgZW1iZWRkZWQgd29ya2VyLmpzXG4gICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbcmVxdWlyZSgnLi9nZW5lcmF0ZWQvZW1iZWRkZWRXb3JrZXInKV0sIHt0eXBlOiAndGV4dC9qYXZhc2NyaXB0J30pO1xuICAgIHJldHVybiB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgfVxuICBlbHNlIHtcbiAgICAvLyB1c2UgZXh0ZXJuYWwgd29ya2VyLmpzIGluIGN1cnJlbnQgZGlyZWN0b3J5XG4gICAgcmV0dXJuIF9fZGlybmFtZSArICcvd29ya2VyLmpzJztcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXR1cFdvcmtlcihzY3JpcHQsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMud29ya2VyVHlwZSA9PT0gJ3dlYicpIHsgLy8gYnJvd3NlciBvbmx5XG4gICAgZW5zdXJlV2ViV29ya2VyKCk7XG4gICAgcmV0dXJuIHNldHVwQnJvd3NlcldvcmtlcihzY3JpcHQsIFdvcmtlcik7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy53b3JrZXJUeXBlID09PSAndGhyZWFkJykgeyAvLyBub2RlLmpzIG9ubHlcbiAgICBXb3JrZXJUaHJlYWRzID0gZW5zdXJlV29ya2VyVGhyZWFkcygpO1xuICAgIHJldHVybiBzZXR1cFdvcmtlclRocmVhZFdvcmtlcihzY3JpcHQsIFdvcmtlclRocmVhZHMpO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMud29ya2VyVHlwZSA9PT0gJ3Byb2Nlc3MnIHx8ICFvcHRpb25zLndvcmtlclR5cGUpIHsgLy8gbm9kZS5qcyBvbmx5XG4gICAgcmV0dXJuIHNldHVwUHJvY2Vzc1dvcmtlcihzY3JpcHQsIHJlc29sdmVGb3JrT3B0aW9ucyhvcHRpb25zKSwgcmVxdWlyZUZvb2xXZWJwYWNrKCdjaGlsZF9wcm9jZXNzJykpO1xuICB9IGVsc2UgeyAvLyBvcHRpb25zLndvcmtlclR5cGUgPT09ICdhdXRvJyBvciB1bmRlZmluZWRcbiAgICBpZiAoZW52aXJvbm1lbnQucGxhdGZvcm0gPT09ICdicm93c2VyJykge1xuICAgICAgZW5zdXJlV2ViV29ya2VyKCk7XG4gICAgICByZXR1cm4gc2V0dXBCcm93c2VyV29ya2VyKHNjcmlwdCwgV29ya2VyKTtcbiAgICB9XG4gICAgZWxzZSB7IC8vIGVudmlyb25tZW50LnBsYXRmb3JtID09PSAnbm9kZSdcbiAgICAgIHZhciBXb3JrZXJUaHJlYWRzID0gdHJ5UmVxdWlyZVdvcmtlclRocmVhZHMoKTtcbiAgICAgIGlmIChXb3JrZXJUaHJlYWRzKSB7XG4gICAgICAgIHJldHVybiBzZXR1cFdvcmtlclRocmVhZFdvcmtlcihzY3JpcHQsIFdvcmtlclRocmVhZHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNldHVwUHJvY2Vzc1dvcmtlcihzY3JpcHQsIHJlc29sdmVGb3JrT3B0aW9ucyhvcHRpb25zKSwgcmVxdWlyZUZvb2xXZWJwYWNrKCdjaGlsZF9wcm9jZXNzJykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXR1cEJyb3dzZXJXb3JrZXIoc2NyaXB0LCBXb3JrZXIpIHtcbiAgLy8gY3JlYXRlIHRoZSB3ZWIgd29ya2VyXG4gIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKHNjcmlwdCk7XG5cbiAgd29ya2VyLmlzQnJvd3NlcldvcmtlciA9IHRydWU7XG4gIC8vIGFkZCBub2RlLmpzIEFQSSB0byB0aGUgd2ViIHdvcmtlclxuICB3b3JrZXIub24gPSBmdW5jdGlvbiAoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgICAgY2FsbGJhY2sobWVzc2FnZS5kYXRhKTtcbiAgICB9KTtcbiAgfTtcbiAgd29ya2VyLnNlbmQgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgIHRoaXMucG9zdE1lc3NhZ2UobWVzc2FnZSk7XG4gIH07XG4gIHJldHVybiB3b3JrZXI7XG59XG5cbmZ1bmN0aW9uIHNldHVwV29ya2VyVGhyZWFkV29ya2VyKHNjcmlwdCwgV29ya2VyVGhyZWFkcykge1xuICB2YXIgd29ya2VyID0gbmV3IFdvcmtlclRocmVhZHMuV29ya2VyKHNjcmlwdCwge1xuICAgIHN0ZG91dDogZmFsc2UsIC8vIGF1dG9tYXRpY2FsbHkgcGlwZSB3b3JrZXIuU1RET1VUIHRvIHByb2Nlc3MuU1RET1VUXG4gICAgc3RkZXJyOiBmYWxzZSAgLy8gYXV0b21hdGljYWxseSBwaXBlIHdvcmtlci5TVERFUlIgdG8gcHJvY2Vzcy5TVERFUlJcbiAgfSk7XG4gIHdvcmtlci5pc1dvcmtlclRocmVhZCA9IHRydWU7XG4gIC8vIG1ha2UgdGhlIHdvcmtlciBtaW1pYyBhIGNoaWxkX3Byb2Nlc3NcbiAgd29ya2VyLnNlbmQgPSBmdW5jdGlvbihtZXNzYWdlKSB7XG4gICAgdGhpcy5wb3N0TWVzc2FnZShtZXNzYWdlKTtcbiAgfTtcblxuICB3b3JrZXIua2lsbCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudGVybWluYXRlKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgd29ya2VyLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRlcm1pbmF0ZSgpO1xuICB9O1xuXG4gIHJldHVybiB3b3JrZXI7XG59XG5cbmZ1bmN0aW9uIHNldHVwUHJvY2Vzc1dvcmtlcihzY3JpcHQsIG9wdGlvbnMsIGNoaWxkX3Byb2Nlc3MpIHtcbiAgLy8gbm8gV29ya2VyVGhyZWFkcywgZmFsbGJhY2sgdG8gc3ViLXByb2Nlc3MgYmFzZWQgd29ya2Vyc1xuICB2YXIgd29ya2VyID0gY2hpbGRfcHJvY2Vzcy5mb3JrKFxuICAgIHNjcmlwdCxcbiAgICBvcHRpb25zLmZvcmtBcmdzLFxuICAgIG9wdGlvbnMuZm9ya09wdHNcbiAgKTtcblxuICB3b3JrZXIuaXNDaGlsZFByb2Nlc3MgPSB0cnVlO1xuICByZXR1cm4gd29ya2VyO1xufVxuXG4vLyBhZGQgZGVidWcgZmxhZ3MgdG8gY2hpbGQgcHJvY2Vzc2VzIGlmIHRoZSBub2RlIGluc3BlY3RvciBpcyBhY3RpdmVcbmZ1bmN0aW9uIHJlc29sdmVGb3JrT3B0aW9ucyhvcHRzKSB7XG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gIHZhciBwcm9jZXNzRXhlY0FyZ3YgPSBwcm9jZXNzLmV4ZWNBcmd2LmpvaW4oJyAnKTtcbiAgdmFyIGluc3BlY3RvckFjdGl2ZSA9IHByb2Nlc3NFeGVjQXJndi5pbmRleE9mKCctLWluc3BlY3QnKSAhPT0gLTE7XG4gIHZhciBkZWJ1Z0JyayA9IHByb2Nlc3NFeGVjQXJndi5pbmRleE9mKCctLWRlYnVnLWJyaycpICE9PSAtMTtcblxuICB2YXIgZXhlY0FyZ3YgPSBbXTtcbiAgaWYgKGluc3BlY3RvckFjdGl2ZSkge1xuICAgIGV4ZWNBcmd2LnB1c2goJy0taW5zcGVjdD0nICsgb3B0cy5kZWJ1Z1BvcnQpO1xuXG4gICAgaWYgKGRlYnVnQnJrKSB7XG4gICAgICBleGVjQXJndi5wdXNoKCctLWRlYnVnLWJyaycpO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3MuZXhlY0FyZ3YuZm9yRWFjaChmdW5jdGlvbihhcmcpIHtcbiAgICBpZiAoYXJnLmluZGV4T2YoJy0tbWF4LW9sZC1zcGFjZS1zaXplJykgPiAtMSkge1xuICAgICAgZXhlY0FyZ3YucHVzaChhcmcpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBvcHRzLCB7XG4gICAgZm9ya0FyZ3M6IG9wdHMuZm9ya0FyZ3MsXG4gICAgZm9ya09wdHM6IE9iamVjdC5hc3NpZ24oe30sIG9wdHMuZm9ya09wdHMsIHtcbiAgICAgIGV4ZWNBcmd2OiAob3B0cy5mb3JrT3B0cyAmJiBvcHRzLmZvcmtPcHRzLmV4ZWNBcmd2IHx8IFtdKVxuICAgICAgLmNvbmNhdChleGVjQXJndilcbiAgICB9KVxuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHNlcmlhbGl6ZWQgZXJyb3IgdG8gRXJyb3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogRXJyb3IgdGhhdCBoYXMgYmVlbiBzZXJpYWxpemVkIGFuZCBwYXJzZWQgdG8gb2JqZWN0XG4gKiBAcmV0dXJuIHtFcnJvcn0gVGhlIGVxdWl2YWxlbnQgRXJyb3IuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvRXJyb3IgKG9iaikge1xuICB2YXIgdGVtcCA9IG5ldyBFcnJvcignJylcbiAgdmFyIHByb3BzID0gT2JqZWN0LmtleXMob2JqKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB0ZW1wW3Byb3BzW2ldXSA9IG9ialtwcm9wc1tpXV1cbiAgfVxuXG4gIHJldHVybiB0ZW1wXG59XG5cbi8qKlxuICogQSBXb3JrZXJIYW5kbGVyIGNvbnRyb2xzIGEgc2luZ2xlIHdvcmtlci4gVGhpcyB3b3JrZXIgY2FuIGJlIGEgY2hpbGQgcHJvY2Vzc1xuICogb24gbm9kZS5qcyBvciBhIFdlYldvcmtlciBpbiBhIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0ge1N0cmluZ30gW3NjcmlwdF0gSWYgbm8gc2NyaXB0IGlzIHByb3ZpZGVkLCBhIGRlZmF1bHQgd29ya2VyIHdpdGggYVxuICogICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJ1biB3aWxsIGJlIGNyZWF0ZWQuXG4gKiBAcGFyYW0ge1dvcmtlclBvb2xPcHRpb25zfSBfb3B0aW9ucyBTZWUgZG9jc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFdvcmtlckhhbmRsZXIoc2NyaXB0LCBfb3B0aW9ucykge1xuICB2YXIgbWUgPSB0aGlzO1xuICB2YXIgb3B0aW9ucyA9IF9vcHRpb25zIHx8IHt9O1xuXG4gIHRoaXMuc2NyaXB0ID0gc2NyaXB0IHx8IGdldERlZmF1bHRXb3JrZXIoKTtcbiAgdGhpcy53b3JrZXIgPSBzZXR1cFdvcmtlcih0aGlzLnNjcmlwdCwgb3B0aW9ucyk7XG4gIHRoaXMuZGVidWdQb3J0ID0gb3B0aW9ucy5kZWJ1Z1BvcnQ7XG4gIHRoaXMuZm9ya09wdHMgPSBvcHRpb25zLmZvcmtPcHRzO1xuICB0aGlzLmZvcmtBcmdzID0gb3B0aW9ucy5mb3JrQXJncztcblxuICAvLyBUaGUgcmVhZHkgbWVzc2FnZSBpcyBvbmx5IHNlbnQgaWYgdGhlIHdvcmtlci5hZGQgbWV0aG9kIGlzIGNhbGxlZCAoQW5kIHRoZSBkZWZhdWx0IHNjcmlwdCBpcyBub3QgdXNlZClcbiAgaWYgKCFzY3JpcHQpIHtcbiAgICB0aGlzLndvcmtlci5yZWFkeSA9IHRydWU7XG4gIH1cblxuICAvLyBxdWV1ZSBmb3IgcmVxdWVzdHMgdGhhdCBhcmUgcmVjZWl2ZWQgYmVmb3JlIHRoZSB3b3JrZXIgaXMgcmVhZHlcbiAgdGhpcy5yZXF1ZXN0UXVldWUgPSBbXTtcbiAgdGhpcy53b3JrZXIub24oJ21lc3NhZ2UnLCBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICBpZiAobWUudGVybWluYXRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3BvbnNlID09PSAnc3RyaW5nJyAmJiByZXNwb25zZSA9PT0gJ3JlYWR5Jykge1xuICAgICAgbWUud29ya2VyLnJlYWR5ID0gdHJ1ZTtcbiAgICAgIGRpc3BhdGNoUXVldWVkUmVxdWVzdHMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmluZCB0aGUgdGFzayBmcm9tIHRoZSBwcm9jZXNzaW5nIHF1ZXVlLCBhbmQgcnVuIHRoZSB0YXNrcyBjYWxsYmFja1xuICAgICAgdmFyIGlkID0gcmVzcG9uc2UuaWQ7XG4gICAgICB2YXIgdGFzayA9IG1lLnByb2Nlc3NpbmdbaWRdO1xuICAgICAgaWYgKHRhc2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocmVzcG9uc2UuaXNFdmVudCkge1xuICAgICAgICAgIGlmICh0YXNrLm9wdGlvbnMgJiYgdHlwZW9mIHRhc2sub3B0aW9ucy5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGFzay5vcHRpb25zLm9uKHJlc3BvbnNlLnBheWxvYWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyByZW1vdmUgdGhlIHRhc2sgZnJvbSB0aGUgcXVldWVcbiAgICAgICAgICBkZWxldGUgbWUucHJvY2Vzc2luZ1tpZF07XG5cbiAgICAgICAgICAvLyB0ZXN0IGlmIHdlIG5lZWQgdG8gdGVybWluYXRlXG4gICAgICAgICAgaWYgKG1lLnRlcm1pbmF0aW5nID09PSB0cnVlKSB7XG4gICAgICAgICAgICAvLyBjb21wbGV0ZSB3b3JrZXIgdGVybWluYXRpb24gaWYgYWxsIHRhc2tzIGFyZSBmaW5pc2hlZFxuICAgICAgICAgICAgbWUudGVybWluYXRlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gcmVzb2x2ZSB0aGUgdGFzaydzIHByb21pc2VcbiAgICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRhc2sucmVzb2x2ZXIucmVqZWN0KG9iamVjdFRvRXJyb3IocmVzcG9uc2UuZXJyb3IpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0YXNrLnJlc29sdmVyLnJlc29sdmUocmVzcG9uc2UucmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8vIHJlamVjdCBhbGwgcnVubmluZyB0YXNrcyBvbiB3b3JrZXIgZXJyb3JcbiAgZnVuY3Rpb24gb25FcnJvcihlcnJvcikge1xuICAgIG1lLnRlcm1pbmF0ZWQgPSB0cnVlO1xuXG4gICAgZm9yICh2YXIgaWQgaW4gbWUucHJvY2Vzc2luZykge1xuICAgICAgaWYgKG1lLnByb2Nlc3NpbmdbaWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbWUucHJvY2Vzc2luZ1tpZF0ucmVzb2x2ZXIucmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbWUucHJvY2Vzc2luZyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH1cblxuICAvLyBzZW5kIGFsbCBxdWV1ZWQgcmVxdWVzdHMgdG8gd29ya2VyXG4gIGZ1bmN0aW9uIGRpc3BhdGNoUXVldWVkUmVxdWVzdHMoKVxuICB7XG4gICAgZm9yKGNvbnN0IHJlcXVlc3Qgb2YgbWUucmVxdWVzdFF1ZXVlLnNwbGljZSgwKSkge1xuICAgICAgbWUud29ya2VyLnNlbmQocmVxdWVzdCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHdvcmtlciA9IHRoaXMud29ya2VyO1xuICAvLyBsaXN0ZW4gZm9yIHdvcmtlciBtZXNzYWdlcyBlcnJvciBhbmQgZXhpdFxuICB0aGlzLndvcmtlci5vbignZXJyb3InLCBvbkVycm9yKTtcbiAgdGhpcy53b3JrZXIub24oJ2V4aXQnLCBmdW5jdGlvbiAoZXhpdENvZGUsIHNpZ25hbENvZGUpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXb3JrZXJwb29sIFdvcmtlciB0ZXJtaW5hdGVkIFVuZXhwZWN0ZWRseVxcbic7XG5cbiAgICBtZXNzYWdlICs9ICcgICAgZXhpdENvZGU6IGAnICsgZXhpdENvZGUgKyAnYFxcbic7XG4gICAgbWVzc2FnZSArPSAnICAgIHNpZ25hbENvZGU6IGAnICsgc2lnbmFsQ29kZSArICdgXFxuJztcblxuICAgIG1lc3NhZ2UgKz0gJyAgICB3b3JrZXJwb29sLnNjcmlwdDogYCcgKyAgbWUuc2NyaXB0ICsgJ2BcXG4nO1xuICAgIG1lc3NhZ2UgKz0gJyAgICBzcGF3bkFyZ3M6IGAnICsgIHdvcmtlci5zcGF3bmFyZ3MgKyAnYFxcbic7XG4gICAgbWVzc2FnZSArPSAnICAgIHNwYXduZmlsZTogYCcgKyB3b3JrZXIuc3Bhd25maWxlICsgJ2BcXG4nXG5cbiAgICBtZXNzYWdlICs9ICcgICAgc3Rkb3V0OiBgJyArIHdvcmtlci5zdGRvdXQgKyAnYFxcbidcbiAgICBtZXNzYWdlICs9ICcgICAgc3RkZXJyOiBgJyArIHdvcmtlci5zdGRlcnIgKyAnYFxcbidcblxuICAgIG9uRXJyb3IobmV3IEVycm9yKG1lc3NhZ2UpKTtcbiAgfSk7XG5cbiAgdGhpcy5wcm9jZXNzaW5nID0gT2JqZWN0LmNyZWF0ZShudWxsKTsgLy8gcXVldWUgd2l0aCB0YXNrcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3NcblxuICB0aGlzLnRlcm1pbmF0aW5nID0gZmFsc2U7XG4gIHRoaXMudGVybWluYXRlZCA9IGZhbHNlO1xuICB0aGlzLnRlcm1pbmF0aW9uSGFuZGxlciA9IG51bGw7XG4gIHRoaXMubGFzdElkID0gMDtcbn1cblxuLyoqXG4gKiBHZXQgYSBsaXN0IHdpdGggbWV0aG9kcyBhdmFpbGFibGUgb24gdGhlIHdvcmtlci5cbiAqIEByZXR1cm4ge1Byb21pc2UuPFN0cmluZ1tdLCBFcnJvcj59IG1ldGhvZHNcbiAqL1xuV29ya2VySGFuZGxlci5wcm90b3R5cGUubWV0aG9kcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuZXhlYygnbWV0aG9kcycpO1xufTtcblxuLyoqXG4gKiBFeGVjdXRlIGEgbWV0aG9kIHdpdGggZ2l2ZW4gcGFyYW1ldGVycyBvbiB0aGUgd29ya2VyXG4gKiBAcGFyYW0ge1N0cmluZ30gbWV0aG9kXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFyYW1zXVxuICogQHBhcmFtIHt7cmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb259fSBbcmVzb2x2ZXJdXG4gKiBAcGFyYW0ge0V4ZWNPcHRpb25zfSAgW29wdGlvbnNdXG4gKiBAcmV0dXJuIHtQcm9taXNlLjwqLCBFcnJvcj59IHJlc3VsdFxuICovXG5Xb3JrZXJIYW5kbGVyLnByb3RvdHlwZS5leGVjID0gZnVuY3Rpb24obWV0aG9kLCBwYXJhbXMsIHJlc29sdmVyLCBvcHRpb25zKSB7XG4gIGlmICghcmVzb2x2ZXIpIHtcbiAgICByZXNvbHZlciA9IFByb21pc2UuZGVmZXIoKTtcbiAgfVxuXG4gIC8vIGdlbmVyYXRlIGEgdW5pcXVlIGlkIGZvciB0aGUgdGFza1xuICB2YXIgaWQgPSArK3RoaXMubGFzdElkO1xuXG4gIC8vIHJlZ2lzdGVyIGEgbmV3IHRhc2sgYXMgYmVpbmcgaW4gcHJvZ3Jlc3NcbiAgdGhpcy5wcm9jZXNzaW5nW2lkXSA9IHtcbiAgICBpZDogaWQsXG4gICAgcmVzb2x2ZXI6IHJlc29sdmVyLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfTtcblxuICAvLyBidWlsZCBhIEpTT04tUlBDIHJlcXVlc3RcbiAgdmFyIHJlcXVlc3QgPSB7XG4gICAgaWQ6IGlkLFxuICAgIG1ldGhvZDogbWV0aG9kLFxuICAgIHBhcmFtczogcGFyYW1zXG4gIH07XG5cbiAgaWYgKHRoaXMudGVybWluYXRlZCkge1xuICAgIHJlc29sdmVyLnJlamVjdChuZXcgRXJyb3IoJ1dvcmtlciBpcyB0ZXJtaW5hdGVkJykpO1xuICB9IGVsc2UgaWYgKHRoaXMud29ya2VyLnJlYWR5KSB7XG4gICAgLy8gc2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgd29ya2VyXG4gICAgdGhpcy53b3JrZXIuc2VuZChyZXF1ZXN0KTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlcXVlc3RRdWV1ZS5wdXNoKHJlcXVlc3QpO1xuICB9XG5cbiAgLy8gb24gY2FuY2VsbGF0aW9uLCBmb3JjZSB0aGUgd29ya2VyIHRvIHRlcm1pbmF0ZVxuICB2YXIgbWUgPSB0aGlzO1xuICByZXR1cm4gcmVzb2x2ZXIucHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBQcm9taXNlLkNhbmNlbGxhdGlvbkVycm9yIHx8IGVycm9yIGluc3RhbmNlb2YgUHJvbWlzZS5UaW1lb3V0RXJyb3IpIHtcbiAgICAgIC8vIHJlbW92ZSB0aGlzIHRhc2sgZnJvbSB0aGUgcXVldWUuIEl0IGlzIGFscmVhZHkgcmVqZWN0ZWQgKGhlbmNlIHRoaXNcbiAgICAgIC8vIGNhdGNoIGV2ZW50KSwgYW5kIGVsc2UgaXQgd2lsbCBiZSByZWplY3RlZCBhZ2FpbiB3aGVuIHRlcm1pbmF0aW5nXG4gICAgICBkZWxldGUgbWUucHJvY2Vzc2luZ1tpZF07XG5cbiAgICAgIC8vIHRlcm1pbmF0ZSB3b3JrZXJcbiAgICAgIHJldHVybiBtZS50ZXJtaW5hdGVBbmROb3RpZnkodHJ1ZSlcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfSlcbn07XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIHRoZSB3b3JrZXIgaXMgd29ya2luZyBvciBub3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgd29ya2VyIGlzIGJ1c3lcbiAqL1xuV29ya2VySGFuZGxlci5wcm90b3R5cGUuYnVzeSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucHJvY2Vzc2luZykubGVuZ3RoID4gMDtcbn07XG5cbi8qKlxuICogVGVybWluYXRlIHRoZSB3b3JrZXIuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gICBJZiBmYWxzZSAoZGVmYXVsdCksIHRoZSB3b3JrZXIgaXMgdGVybWluYXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgZmluaXNoaW5nIGFsbCB0YXNrcyBjdXJyZW50bHkgaW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzLiBJZiB0cnVlLCB0aGUgd29ya2VyIHdpbGwgYmVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgaW1tZWRpYXRlbHkuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbY2FsbGJhY2s9bnVsbF0gSWYgcHJvdmlkZWQsIHdpbGwgYmUgY2FsbGVkIHdoZW4gcHJvY2VzcyB0ZXJtaW5hdGVzLlxuICovXG5Xb3JrZXJIYW5kbGVyLnByb3RvdHlwZS50ZXJtaW5hdGUgPSBmdW5jdGlvbiAoZm9yY2UsIGNhbGxiYWNrKSB7XG4gIHZhciBtZSA9IHRoaXM7XG4gIGlmIChmb3JjZSkge1xuICAgIC8vIGNhbmNlbCBhbGwgdGFza3MgaW4gcHJvZ3Jlc3NcbiAgICBmb3IgKHZhciBpZCBpbiB0aGlzLnByb2Nlc3NpbmcpIHtcbiAgICAgIGlmICh0aGlzLnByb2Nlc3NpbmdbaWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzaW5nW2lkXS5yZXNvbHZlci5yZWplY3QobmV3IEVycm9yKCdXb3JrZXIgdGVybWluYXRlZCcpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLnRlcm1pbmF0aW9uSGFuZGxlciA9IGNhbGxiYWNrO1xuICB9XG4gIGlmICghdGhpcy5idXN5KCkpIHtcbiAgICAvLyBhbGwgdGFza3MgYXJlIGZpbmlzaGVkLiBraWxsIHRoZSB3b3JrZXJcbiAgICB2YXIgY2xlYW51cCA9IGZ1bmN0aW9uKGVycikge1xuICAgICAgbWUudGVybWluYXRlZCA9IHRydWU7XG4gICAgICBpZiAobWUud29ya2VyICE9IG51bGwgJiYgbWUud29ya2VyLnJlbW92ZUFsbExpc3RlbmVycykge1xuICAgICAgICAvLyByZW1vdmVBbGxMaXN0ZW5lcnMgaXMgb25seSBhdmFpbGFibGUgZm9yIGNoaWxkX3Byb2Nlc3NcbiAgICAgICAgbWUud29ya2VyLnJlbW92ZUFsbExpc3RlbmVycygnbWVzc2FnZScpO1xuICAgICAgfVxuICAgICAgbWUud29ya2VyID0gbnVsbDtcbiAgICAgIG1lLnRlcm1pbmF0aW5nID0gZmFsc2U7XG4gICAgICBpZiAobWUudGVybWluYXRpb25IYW5kbGVyKSB7XG4gICAgICAgIG1lLnRlcm1pbmF0aW9uSGFuZGxlcihlcnIsIG1lKTtcbiAgICAgIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy53b3JrZXIpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy53b3JrZXIua2lsbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAodGhpcy53b3JrZXIua2lsbGVkKSB7XG4gICAgICAgICAgY2xlYW51cChuZXcgRXJyb3IoJ3dvcmtlciBhbHJlYWR5IGtpbGxlZCEnKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMud29ya2VyLmlzQ2hpbGRQcm9jZXNzKSB7XG4gICAgICAgICAgdmFyIGNsZWFuRXhpdFRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKG1lLndvcmtlcikge1xuICAgICAgICAgICAgICBtZS53b3JrZXIua2lsbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIENISUxEX1BST0NFU1NfRVhJVF9USU1FT1VUKTtcblxuICAgICAgICAgIHRoaXMud29ya2VyLm9uY2UoJ2V4aXQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChjbGVhbkV4aXRUaW1lb3V0KTtcbiAgICAgICAgICAgIGlmIChtZS53b3JrZXIpIHtcbiAgICAgICAgICAgICAgbWUud29ya2VyLmtpbGxlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAodGhpcy53b3JrZXIucmVhZHkpIHtcbiAgICAgICAgICAgIHRoaXMud29ya2VyLnNlbmQoVEVSTUlOQVRFX01FVEhPRF9JRCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdFF1ZXVlLnB1c2goVEVSTUlOQVRFX01FVEhPRF9JRClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gd29ya2VyX3RocmVhZFxuICAgICAgICAgIHRoaXMud29ya2VyLmtpbGwoKTtcbiAgICAgICAgICB0aGlzLndvcmtlci5raWxsZWQgPSB0cnVlO1xuICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0eXBlb2YgdGhpcy53b3JrZXIudGVybWluYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMud29ya2VyLnRlcm1pbmF0ZSgpOyAvLyB3ZWIgd29ya2VyXG4gICAgICAgIHRoaXMud29ya2VyLmtpbGxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gdGVybWluYXRlIHdvcmtlcicpO1xuICAgICAgfVxuICAgIH1cbiAgICBjbGVhbnVwKCk7XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gd2UgY2FuJ3QgdGVybWluYXRlIGltbWVkaWF0ZWx5LCB0aGVyZSBhcmUgc3RpbGwgdGFza3MgYmVpbmcgZXhlY3V0ZWRcbiAgICB0aGlzLnRlcm1pbmF0aW5nID0gdHJ1ZTtcbiAgfVxufTtcblxuLyoqXG4gKiBUZXJtaW5hdGUgdGhlIHdvcmtlciwgcmV0dXJuaW5nIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRlcm1pbmF0aW9uIGhhcyBiZWVuIGRvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gICBJZiBmYWxzZSAoZGVmYXVsdCksIHRoZSB3b3JrZXIgaXMgdGVybWluYXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgZmluaXNoaW5nIGFsbCB0YXNrcyBjdXJyZW50bHkgaW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzLiBJZiB0cnVlLCB0aGUgd29ya2VyIHdpbGwgYmVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgaW1tZWRpYXRlbHkuXG4gKiBAcGFyYW0ge251bWJlcn0gW3RpbWVvdXRdICAgICAgICBJZiBwcm92aWRlZCBhbmQgbm9uLXplcm8sIHdvcmtlciB0ZXJtaW5hdGlvbiBwcm9taXNlIHdpbGwgYmUgcmVqZWN0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyIHRpbWVvdXQgaWYgd29ya2VyIHByb2Nlc3MgaGFzIG5vdCBiZWVuIHRlcm1pbmF0ZWQuXG4gKiBAcmV0dXJuIHtQcm9taXNlLjxXb3JrZXJIYW5kbGVyLCBFcnJvcj59XG4gKi9cbldvcmtlckhhbmRsZXIucHJvdG90eXBlLnRlcm1pbmF0ZUFuZE5vdGlmeSA9IGZ1bmN0aW9uIChmb3JjZSwgdGltZW91dCkge1xuICB2YXIgcmVzb2x2ZXIgPSBQcm9taXNlLmRlZmVyKCk7XG4gIGlmICh0aW1lb3V0KSB7XG4gICAgcmVzb2x2ZXIucHJvbWlzZS50aW1lb3V0ID0gdGltZW91dDtcbiAgfVxuICB0aGlzLnRlcm1pbmF0ZShmb3JjZSwgZnVuY3Rpb24oZXJyLCB3b3JrZXIpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICByZXNvbHZlci5yZWplY3QoZXJyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb2x2ZXIucmVzb2x2ZSh3b3JrZXIpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXNvbHZlci5wcm9taXNlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBXb3JrZXJIYW5kbGVyO1xubW9kdWxlLmV4cG9ydHMuX3RyeVJlcXVpcmVXb3JrZXJUaHJlYWRzID0gdHJ5UmVxdWlyZVdvcmtlclRocmVhZHM7XG5tb2R1bGUuZXhwb3J0cy5fc2V0dXBQcm9jZXNzV29ya2VyID0gc2V0dXBQcm9jZXNzV29ya2VyO1xubW9kdWxlLmV4cG9ydHMuX3NldHVwQnJvd3NlcldvcmtlciA9IHNldHVwQnJvd3Nlcldvcmtlcjtcbm1vZHVsZS5leHBvcnRzLl9zZXR1cFdvcmtlclRocmVhZFdvcmtlciA9IHNldHVwV29ya2VyVGhyZWFkV29ya2VyO1xubW9kdWxlLmV4cG9ydHMuZW5zdXJlV29ya2VyVGhyZWFkcyA9IGVuc3VyZVdvcmtlclRocmVhZHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgTUFYX1BPUlRTID0gNjU1MzU7XG5tb2R1bGUuZXhwb3J0cyA9IERlYnVnUG9ydEFsbG9jYXRvcjtcbmZ1bmN0aW9uIERlYnVnUG9ydEFsbG9jYXRvcigpIHtcbiAgdGhpcy5wb3J0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHRoaXMubGVuZ3RoID0gMDtcbn1cblxuRGVidWdQb3J0QWxsb2NhdG9yLnByb3RvdHlwZS5uZXh0QXZhaWxhYmxlU3RhcnRpbmdBdCA9IGZ1bmN0aW9uKHN0YXJ0aW5nKSB7XG4gIHdoaWxlICh0aGlzLnBvcnRzW3N0YXJ0aW5nXSA9PT0gdHJ1ZSkge1xuICAgIHN0YXJ0aW5nKys7XG4gIH1cblxuICBpZiAoc3RhcnRpbmcgPj0gTUFYX1BPUlRTKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdXb3JrZXJQb29sIGRlYnVnIHBvcnQgbGltaXQgcmVhY2hlZDogJyArIHN0YXJ0aW5nICsgJz49ICcgKyBNQVhfUE9SVFMgKTtcbiAgfVxuXG4gIHRoaXMucG9ydHNbc3RhcnRpbmddID0gdHJ1ZTtcbiAgdGhpcy5sZW5ndGgrKztcbiAgcmV0dXJuIHN0YXJ0aW5nO1xufTtcblxuRGVidWdQb3J0QWxsb2NhdG9yLnByb3RvdHlwZS5yZWxlYXNlUG9ydCA9IGZ1bmN0aW9uKHBvcnQpIHtcbiAgZGVsZXRlIHRoaXMucG9ydHNbcG9ydF07XG4gIHRoaXMubGVuZ3RoLS07XG59O1xuXG4iLCAidmFyIFByb21pc2UgPSByZXF1aXJlKCcuL1Byb21pc2UnKTtcbnZhciBXb3JrZXJIYW5kbGVyID0gcmVxdWlyZSgnLi9Xb3JrZXJIYW5kbGVyJyk7XG52YXIgZW52aXJvbm1lbnQgPSByZXF1aXJlKCcuL2Vudmlyb25tZW50Jyk7XG52YXIgRGVidWdQb3J0QWxsb2NhdG9yID0gcmVxdWlyZSgnLi9kZWJ1Zy1wb3J0LWFsbG9jYXRvcicpO1xudmFyIERFQlVHX1BPUlRfQUxMT0NBVE9SID0gbmV3IERlYnVnUG9ydEFsbG9jYXRvcigpO1xuLyoqXG4gKiBBIHBvb2wgdG8gbWFuYWdlIHdvcmtlcnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBbc2NyaXB0XSAgIE9wdGlvbmFsIHdvcmtlciBzY3JpcHRcbiAqIEBwYXJhbSB7V29ya2VyUG9vbE9wdGlvbnN9IFtvcHRpb25zXSAgU2VlIGRvY3NcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBQb29sKHNjcmlwdCwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIHNjcmlwdCA9PT0gJ3N0cmluZycpIHtcbiAgICB0aGlzLnNjcmlwdCA9IHNjcmlwdCB8fCBudWxsO1xuICB9XG4gIGVsc2Uge1xuICAgIHRoaXMuc2NyaXB0ID0gbnVsbDtcbiAgICBvcHRpb25zID0gc2NyaXB0O1xuICB9XG5cbiAgdGhpcy53b3JrZXJzID0gW107ICAvLyBxdWV1ZSB3aXRoIGFsbCB3b3JrZXJzXG4gIHRoaXMudGFza3MgPSBbXTsgICAgLy8gcXVldWUgd2l0aCB0YXNrcyBhd2FpdGluZyBleGVjdXRpb25cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICB0aGlzLmZvcmtBcmdzID0gT2JqZWN0LmZyZWV6ZShvcHRpb25zLmZvcmtBcmdzIHx8IFtdKTtcbiAgdGhpcy5mb3JrT3B0cyA9IE9iamVjdC5mcmVlemUob3B0aW9ucy5mb3JrT3B0cyB8fCB7fSk7XG4gIHRoaXMuZGVidWdQb3J0U3RhcnQgPSAob3B0aW9ucy5kZWJ1Z1BvcnRTdGFydCB8fCA0MzIxMCk7XG4gIHRoaXMubm9kZVdvcmtlciA9IG9wdGlvbnMubm9kZVdvcmtlcjtcbiAgdGhpcy53b3JrZXJUeXBlID0gb3B0aW9ucy53b3JrZXJUeXBlIHx8IG9wdGlvbnMubm9kZVdvcmtlciB8fCAnYXV0bydcbiAgdGhpcy5tYXhRdWV1ZVNpemUgPSBvcHRpb25zLm1heFF1ZXVlU2l6ZSB8fCBJbmZpbml0eTtcblxuICB0aGlzLm9uQ3JlYXRlV29ya2VyID0gb3B0aW9ucy5vbkNyZWF0ZVdvcmtlciB8fCAoKCkgPT4gbnVsbCk7XG4gIHRoaXMub25UZXJtaW5hdGVXb3JrZXIgPSBvcHRpb25zLm9uVGVybWluYXRlV29ya2VyIHx8ICgoKSA9PiBudWxsKTtcblxuICAvLyBjb25maWd1cmF0aW9uXG4gIGlmIChvcHRpb25zICYmICdtYXhXb3JrZXJzJyBpbiBvcHRpb25zKSB7XG4gICAgdmFsaWRhdGVNYXhXb3JrZXJzKG9wdGlvbnMubWF4V29ya2Vycyk7XG4gICAgdGhpcy5tYXhXb3JrZXJzID0gb3B0aW9ucy5tYXhXb3JrZXJzO1xuICB9XG4gIGVsc2Uge1xuICAgIHRoaXMubWF4V29ya2VycyA9IE1hdGgubWF4KChlbnZpcm9ubWVudC5jcHVzIHx8IDQpIC0gMSwgMSk7XG4gIH1cblxuICBpZiAob3B0aW9ucyAmJiAnbWluV29ya2VycycgaW4gb3B0aW9ucykge1xuICAgIGlmKG9wdGlvbnMubWluV29ya2VycyA9PT0gJ21heCcpIHtcbiAgICAgIHRoaXMubWluV29ya2VycyA9IHRoaXMubWF4V29ya2VycztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsaWRhdGVNaW5Xb3JrZXJzKG9wdGlvbnMubWluV29ya2Vycyk7XG4gICAgICB0aGlzLm1pbldvcmtlcnMgPSBvcHRpb25zLm1pbldvcmtlcnM7XG4gICAgICB0aGlzLm1heFdvcmtlcnMgPSBNYXRoLm1heCh0aGlzLm1pbldvcmtlcnMsIHRoaXMubWF4V29ya2Vycyk7ICAgICAvLyBpbiBjYXNlIG1pbldvcmtlcnMgaXMgaGlnaGVyIHRoYW4gbWF4V29ya2Vyc1xuICAgIH1cbiAgICB0aGlzLl9lbnN1cmVNaW5Xb3JrZXJzKCk7XG4gIH1cblxuICB0aGlzLl9ib3VuZE5leHQgPSB0aGlzLl9uZXh0LmJpbmQodGhpcyk7XG5cblxuICBpZiAodGhpcy53b3JrZXJUeXBlID09PSAndGhyZWFkJykge1xuICAgIFdvcmtlckhhbmRsZXIuZW5zdXJlV29ya2VyVGhyZWFkcygpO1xuICB9XG59XG5cblxuLyoqXG4gKiBFeGVjdXRlIGEgZnVuY3Rpb24gb24gYSB3b3JrZXIuXG4gKlxuICogRXhhbXBsZSB1c2FnZTpcbiAqXG4gKiAgIHZhciBwb29sID0gbmV3IFBvb2woKVxuICpcbiAqICAgLy8gY2FsbCBhIGZ1bmN0aW9uIGF2YWlsYWJsZSBvbiB0aGUgd29ya2VyXG4gKiAgIHBvb2wuZXhlYygnZmlib25hY2NpJywgWzZdKVxuICpcbiAqICAgLy8gb2ZmbG9hZCBhIGZ1bmN0aW9uXG4gKiAgIGZ1bmN0aW9uIGFkZChhLCBiKSB7XG4gKiAgICAgcmV0dXJuIGEgKyBiXG4gKiAgIH07XG4gKiAgIHBvb2wuZXhlYyhhZGQsIFsyLCA0XSlcbiAqICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTsgLy8gb3V0cHV0cyA2XG4gKiAgICAgICB9KVxuICogICAgICAgLmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7XG4gKiAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAqICAgICAgIH0pO1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nIHwgRnVuY3Rpb259IG1ldGhvZCAgRnVuY3Rpb24gbmFtZSBvciBmdW5jdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgYG1ldGhvZGAgaXMgYSBzdHJpbmcsIHRoZSBjb3JyZXNwb25kaW5nXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCBvbiB0aGUgd29ya2VyIHdpbGwgYmUgZXhlY3V0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgYG1ldGhvZGAgaXMgYSBGdW5jdGlvbiwgdGhlIGZ1bmN0aW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgc3RyaW5naWZpZWQgYW5kIGV4ZWN1dGVkIHZpYSB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VycyBidWlsdC1pbiBmdW5jdGlvbiBgcnVuKGZuLCBhcmdzKWAuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFyYW1zXSAgRnVuY3Rpb24gYXJndW1lbnRzIGFwcGxpZWQgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvblxuICogQHBhcmFtIHtFeGVjT3B0aW9uc30gW29wdGlvbnNdICBPcHRpb25zIG9iamVjdFxuICogQHJldHVybiB7UHJvbWlzZS48KiwgRXJyb3I+fSByZXN1bHRcbiAqL1xuUG9vbC5wcm90b3R5cGUuZXhlYyA9IGZ1bmN0aW9uIChtZXRob2QsIHBhcmFtcywgb3B0aW9ucykge1xuICAvLyB2YWxpZGF0ZSB0eXBlIG9mIGFyZ3VtZW50c1xuICBpZiAocGFyYW1zICYmICFBcnJheS5pc0FycmF5KHBhcmFtcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBleHBlY3RlZCBhcyBhcmd1bWVudCBcInBhcmFtc1wiJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIG1ldGhvZCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgcmVzb2x2ZXIgPSBQcm9taXNlLmRlZmVyKCk7XG5cbiAgICBpZiAodGhpcy50YXNrcy5sZW5ndGggPj0gdGhpcy5tYXhRdWV1ZVNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWF4IHF1ZXVlIHNpemUgb2YgJyArIHRoaXMubWF4UXVldWVTaXplICsgJyByZWFjaGVkJyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGEgbmV3IHRhc2sgdG8gdGhlIHF1ZXVlXG4gICAgdmFyIHRhc2tzID0gdGhpcy50YXNrcztcbiAgICB2YXIgdGFzayA9IHtcbiAgICAgIG1ldGhvZDogIG1ldGhvZCxcbiAgICAgIHBhcmFtczogIHBhcmFtcyxcbiAgICAgIHJlc29sdmVyOiByZXNvbHZlcixcbiAgICAgIHRpbWVvdXQ6IG51bGwsXG4gICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgfTtcbiAgICB0YXNrcy5wdXNoKHRhc2spO1xuXG4gICAgLy8gcmVwbGFjZSB0aGUgdGltZW91dCBtZXRob2Qgb2YgdGhlIFByb21pc2Ugd2l0aCBvdXIgb3duLFxuICAgIC8vIHdoaWNoIHN0YXJ0cyB0aGUgdGltZXIgYXMgc29vbiBhcyB0aGUgdGFzayBpcyBhY3R1YWxseSBzdGFydGVkXG4gICAgdmFyIG9yaWdpbmFsVGltZW91dCA9IHJlc29sdmVyLnByb21pc2UudGltZW91dDtcbiAgICByZXNvbHZlci5wcm9taXNlLnRpbWVvdXQgPSBmdW5jdGlvbiB0aW1lb3V0IChkZWxheSkge1xuICAgICAgaWYgKHRhc2tzLmluZGV4T2YodGFzaykgIT09IC0xKSB7XG4gICAgICAgIC8vIHRhc2sgaXMgc3RpbGwgcXVldWVkIC0+IHN0YXJ0IHRoZSB0aW1lciBsYXRlciBvblxuICAgICAgICB0YXNrLnRpbWVvdXQgPSBkZWxheTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVyLnByb21pc2U7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gdGFzayBpcyBhbHJlYWR5IGJlaW5nIGV4ZWN1dGVkIC0+IHN0YXJ0IHRpbWVyIGltbWVkaWF0ZWx5XG4gICAgICAgIHJldHVybiBvcmlnaW5hbFRpbWVvdXQuY2FsbChyZXNvbHZlci5wcm9taXNlLCBkZWxheSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIHRyaWdnZXIgdGFzayBleGVjdXRpb25cbiAgICB0aGlzLl9uZXh0KCk7XG5cbiAgICByZXR1cm4gcmVzb2x2ZXIucHJvbWlzZTtcbiAgfVxuICBlbHNlIGlmICh0eXBlb2YgbWV0aG9kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gc2VuZCBzdHJpbmdpZmllZCBmdW5jdGlvbiBhbmQgZnVuY3Rpb24gYXJndW1lbnRzIHRvIHdvcmtlclxuICAgIHJldHVybiB0aGlzLmV4ZWMoJ3J1bicsIFtTdHJpbmcobWV0aG9kKSwgcGFyYW1zXSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRnVuY3Rpb24gb3Igc3RyaW5nIGV4cGVjdGVkIGFzIGFyZ3VtZW50IFwibWV0aG9kXCInKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBwcm94eSBmb3IgY3VycmVudCB3b3JrZXIuIFJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsXG4gKiBtZXRob2RzIGF2YWlsYWJsZSBvbiB0aGUgd29ya2VyLiBUaGUgbWV0aG9kcyBhbHdheXMgcmV0dXJuIGEgcHJvbWlzZS5cbiAqXG4gKiBAcmV0dXJuIHtQcm9taXNlLjxPYmplY3QsIEVycm9yPn0gcHJveHlcbiAqL1xuUG9vbC5wcm90b3R5cGUucHJveHkgPSBmdW5jdGlvbiAoKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gYXJndW1lbnRzIGV4cGVjdGVkJyk7XG4gIH1cblxuICB2YXIgcG9vbCA9IHRoaXM7XG4gIHJldHVybiB0aGlzLmV4ZWMoJ21ldGhvZHMnKVxuICAgICAgLnRoZW4oZnVuY3Rpb24gKG1ldGhvZHMpIHtcbiAgICAgICAgdmFyIHByb3h5ID0ge307XG5cbiAgICAgICAgbWV0aG9kcy5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgICAgICBwcm94eVttZXRob2RdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHBvb2wuZXhlYyhtZXRob2QsIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHByb3h5O1xuICAgICAgfSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgbmV3IGFycmF5IHdpdGggdGhlIHJlc3VsdHMgb2YgY2FsbGluZyBhIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKiBvbiBldmVyeSBlbGVtZW50IGluIHRoaXMgYXJyYXkuXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgIEZ1bmN0aW9uIHRha2luZyB0d28gYXJndW1lbnRzOlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBjYWxsYmFjayhjdXJyZW50VmFsdWUsIGluZGV4KWBcbiAqIEByZXR1cm4ge1Byb21pc2UuPEFycmF5Pn0gUmV0dXJucyBhIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgIHdpdGggYW4gQXJyYXlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZyB0aGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZWQgZm9yIGVhY2ggb2YgdGhlIGFycmF5IGVsZW1lbnRzLlxuICovXG4vKiBUT0RPOiBpbXBsZW1lbnQgbWFwXG5Qb29sLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoYXJyYXksIGNhbGxiYWNrKSB7XG59O1xuKi9cblxuLyoqXG4gKiBHcmFiIHRoZSBmaXJzdCB0YXNrIGZyb20gdGhlIHF1ZXVlLCBmaW5kIGEgZnJlZSB3b3JrZXIsIGFuZCBhc3NpZ24gdGhlXG4gKiB3b3JrZXIgdG8gdGhlIHRhc2suXG4gKiBAcHJvdGVjdGVkXG4gKi9cblBvb2wucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy50YXNrcy5sZW5ndGggPiAwKSB7XG4gICAgLy8gdGhlcmUgYXJlIHRhc2tzIGluIHRoZSBxdWV1ZVxuXG4gICAgLy8gZmluZCBhbiBhdmFpbGFibGUgd29ya2VyXG4gICAgdmFyIHdvcmtlciA9IHRoaXMuX2dldFdvcmtlcigpO1xuICAgIGlmICh3b3JrZXIpIHtcbiAgICAgIC8vIGdldCB0aGUgZmlyc3QgdGFzayBmcm9tIHRoZSBxdWV1ZVxuICAgICAgdmFyIG1lID0gdGhpcztcbiAgICAgIHZhciB0YXNrID0gdGhpcy50YXNrcy5zaGlmdCgpO1xuXG4gICAgICAvLyBjaGVjayBpZiB0aGUgdGFzayBpcyBzdGlsbCBwZW5kaW5nIChhbmQgbm90IGNhbmNlbGxlZCAtPiBwcm9taXNlIHJlamVjdGVkKVxuICAgICAgaWYgKHRhc2sucmVzb2x2ZXIucHJvbWlzZS5wZW5kaW5nKSB7XG4gICAgICAgIC8vIHNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIHdvcmtlclxuICAgICAgICB2YXIgcHJvbWlzZSA9IHdvcmtlci5leGVjKHRhc2subWV0aG9kLCB0YXNrLnBhcmFtcywgdGFzay5yZXNvbHZlciwgdGFzay5vcHRpb25zKVxuICAgICAgICAgIC50aGVuKG1lLl9ib3VuZE5leHQpXG4gICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSB3b3JrZXIgY3Jhc2hlZCBhbmQgdGVybWluYXRlZCwgcmVtb3ZlIGl0IGZyb20gdGhlIHBvb2xcbiAgICAgICAgICAgIGlmICh3b3JrZXIudGVybWluYXRlZCkge1xuICAgICAgICAgICAgICByZXR1cm4gbWUuX3JlbW92ZVdvcmtlcih3b3JrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBtZS5fbmV4dCgpOyAvLyB0cmlnZ2VyIG5leHQgdGFzayBpbiB0aGUgcXVldWVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBzdGFydCBxdWV1ZWQgdGltZXIgbm93XG4gICAgICAgIGlmICh0eXBlb2YgdGFzay50aW1lb3V0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHByb21pc2UudGltZW91dCh0YXNrLnRpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGUgdGFzayB0YWtlbiB3YXMgYWxyZWFkeSBjb21wbGV0ZSAoZWl0aGVyIHJlamVjdGVkIG9yIHJlc29sdmVkKSwgc28ganVzdCB0cmlnZ2VyIG5leHQgdGFzayBpbiB0aGUgcXVldWVcbiAgICAgICAgbWUuX25leHQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogR2V0IGFuIGF2YWlsYWJsZSB3b3JrZXIuIElmIG5vIHdvcmtlciBpcyBhdmFpbGFibGUgYW5kIHRoZSBtYXhpbXVtIG51bWJlclxuICogb2Ygd29ya2VycyBpc24ndCB5ZXQgcmVhY2hlZCwgYSBuZXcgd29ya2VyIHdpbGwgYmUgY3JlYXRlZCBhbmQgcmV0dXJuZWQuXG4gKiBJZiBubyB3b3JrZXIgaXMgYXZhaWxhYmxlIGFuZCB0aGUgbWF4aW11bSBudW1iZXIgb2Ygd29ya2VycyBpcyByZWFjaGVkLFxuICogbnVsbCB3aWxsIGJlIHJldHVybmVkLlxuICpcbiAqIEByZXR1cm4ge1dvcmtlckhhbmRsZXIgfCBudWxsfSB3b3JrZXJcbiAqIEBwcml2YXRlXG4gKi9cblBvb2wucHJvdG90eXBlLl9nZXRXb3JrZXIgPSBmdW5jdGlvbigpIHtcbiAgLy8gZmluZCBhIG5vbi1idXN5IHdvcmtlclxuICB2YXIgd29ya2VycyA9IHRoaXMud29ya2VycztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3JrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHdvcmtlciA9IHdvcmtlcnNbaV07XG4gICAgaWYgKHdvcmtlci5idXN5KCkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gd29ya2VyO1xuICAgIH1cbiAgfVxuXG4gIGlmICh3b3JrZXJzLmxlbmd0aCA8IHRoaXMubWF4V29ya2Vycykge1xuICAgIC8vIGNyZWF0ZSBhIG5ldyB3b3JrZXJcbiAgICB3b3JrZXIgPSB0aGlzLl9jcmVhdGVXb3JrZXJIYW5kbGVyKCk7XG4gICAgd29ya2Vycy5wdXNoKHdvcmtlcik7XG4gICAgcmV0dXJuIHdvcmtlcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB3b3JrZXIgZnJvbSB0aGUgcG9vbC5cbiAqIEF0dGVtcHRzIHRvIHRlcm1pbmF0ZSB3b3JrZXIgaWYgbm90IGFscmVhZHkgdGVybWluYXRlZCwgYW5kIGVuc3VyZXMgdGhlIG1pbmltdW1cbiAqIHBvb2wgc2l6ZSBpcyBtZXQuXG4gKiBAcGFyYW0ge1dvcmtlckhhbmRsZXJ9IHdvcmtlclxuICogQHJldHVybiB7UHJvbWlzZTxXb3JrZXJIYW5kbGVyPn1cbiAqIEBwcm90ZWN0ZWRcbiAqL1xuUG9vbC5wcm90b3R5cGUuX3JlbW92ZVdvcmtlciA9IGZ1bmN0aW9uKHdvcmtlcikge1xuICB2YXIgbWUgPSB0aGlzO1xuXG4gIERFQlVHX1BPUlRfQUxMT0NBVE9SLnJlbGVhc2VQb3J0KHdvcmtlci5kZWJ1Z1BvcnQpO1xuICAvLyBfcmVtb3ZlV29ya2VyIHdpbGwgY2FsbCB0aGlzLCBidXQgd2UgbmVlZCBpdCB0byBiZSByZW1vdmVkIHN5bmNocm9ub3VzbHlcbiAgdGhpcy5fcmVtb3ZlV29ya2VyRnJvbUxpc3Qod29ya2VyKTtcbiAgLy8gSWYgbWluV29ya2VycyBzZXQsIHNwaW4gdXAgbmV3IHdvcmtlcnMgdG8gcmVwbGFjZSB0aGUgY3Jhc2hlZCBvbmVzXG4gIHRoaXMuX2Vuc3VyZU1pbldvcmtlcnMoKTtcbiAgLy8gdGVybWluYXRlIHRoZSB3b3JrZXIgKGlmIG5vdCBhbHJlYWR5IHRlcm1pbmF0ZWQpXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB3b3JrZXIudGVybWluYXRlKGZhbHNlLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgIG1lLm9uVGVybWluYXRlV29ya2VyKHtcbiAgICAgICAgZm9ya0FyZ3M6IHdvcmtlci5mb3JrQXJncyxcbiAgICAgICAgZm9ya09wdHM6IHdvcmtlci5mb3JrT3B0cyxcbiAgICAgICAgc2NyaXB0OiB3b3JrZXIuc2NyaXB0XG4gICAgICB9KTtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKHdvcmtlcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB3b3JrZXIgZnJvbSB0aGUgcG9vbCBsaXN0LlxuICogQHBhcmFtIHtXb3JrZXJIYW5kbGVyfSB3b3JrZXJcbiAqIEBwcm90ZWN0ZWRcbiAqL1xuUG9vbC5wcm90b3R5cGUuX3JlbW92ZVdvcmtlckZyb21MaXN0ID0gZnVuY3Rpb24od29ya2VyKSB7XG4gIC8vIHJlbW92ZSBmcm9tIHRoZSBsaXN0IHdpdGggd29ya2Vyc1xuICB2YXIgaW5kZXggPSB0aGlzLndvcmtlcnMuaW5kZXhPZih3b3JrZXIpO1xuICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgdGhpcy53b3JrZXJzLnNwbGljZShpbmRleCwgMSk7XG4gIH1cbn07XG5cbi8qKlxuICogQ2xvc2UgYWxsIGFjdGl2ZSB3b3JrZXJzLiBUYXNrcyBjdXJyZW50bHkgYmVpbmcgZXhlY3V0ZWQgd2lsbCBiZSBmaW5pc2hlZCBmaXJzdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlPWZhbHNlXSAgIElmIGZhbHNlIChkZWZhdWx0KSwgdGhlIHdvcmtlcnMgYXJlIHRlcm1pbmF0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyIGZpbmlzaGluZyBhbGwgdGFza3MgY3VycmVudGx5IGluXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcy4gSWYgdHJ1ZSwgdGhlIHdvcmtlcnMgd2lsbCBiZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlZCBpbW1lZGlhdGVseS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbdGltZW91dF0gICAgICAgIElmIHByb3ZpZGVkIGFuZCBub24temVybywgd29ya2VyIHRlcm1pbmF0aW9uIHByb21pc2Ugd2lsbCBiZSByZWplY3RlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgdGltZW91dCBpZiB3b3JrZXIgcHJvY2VzcyBoYXMgbm90IGJlZW4gdGVybWluYXRlZC5cbiAqIEByZXR1cm4ge1Byb21pc2UuPHZvaWQsIEVycm9yPn1cbiAqL1xuUG9vbC5wcm90b3R5cGUudGVybWluYXRlID0gZnVuY3Rpb24gKGZvcmNlLCB0aW1lb3V0KSB7XG4gIHZhciBtZSA9IHRoaXM7XG5cbiAgLy8gY2FuY2VsIGFueSBwZW5kaW5nIHRhc2tzXG4gIHRoaXMudGFza3MuZm9yRWFjaChmdW5jdGlvbiAodGFzaykge1xuICAgIHRhc2sucmVzb2x2ZXIucmVqZWN0KG5ldyBFcnJvcignUG9vbCB0ZXJtaW5hdGVkJykpO1xuICB9KTtcbiAgdGhpcy50YXNrcy5sZW5ndGggPSAwO1xuXG4gIHZhciBmID0gZnVuY3Rpb24gKHdvcmtlcikge1xuICAgIHRoaXMuX3JlbW92ZVdvcmtlckZyb21MaXN0KHdvcmtlcik7XG4gIH07XG4gIHZhciByZW1vdmVXb3JrZXIgPSBmLmJpbmQodGhpcyk7XG5cbiAgdmFyIHByb21pc2VzID0gW107XG4gIHZhciB3b3JrZXJzID0gdGhpcy53b3JrZXJzLnNsaWNlKCk7XG4gIHdvcmtlcnMuZm9yRWFjaChmdW5jdGlvbiAod29ya2VyKSB7XG4gICAgdmFyIHRlcm1Qcm9taXNlID0gd29ya2VyLnRlcm1pbmF0ZUFuZE5vdGlmeShmb3JjZSwgdGltZW91dClcbiAgICAgIC50aGVuKHJlbW92ZVdvcmtlcilcbiAgICAgIC5hbHdheXMoZnVuY3Rpb24oKSB7XG4gICAgICAgIG1lLm9uVGVybWluYXRlV29ya2VyKHtcbiAgICAgICAgICBmb3JrQXJnczogd29ya2VyLmZvcmtBcmdzLFxuICAgICAgICAgIGZvcmtPcHRzOiB3b3JrZXIuZm9ya09wdHMsXG4gICAgICAgICAgc2NyaXB0OiB3b3JrZXIuc2NyaXB0XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgcHJvbWlzZXMucHVzaCh0ZXJtUHJvbWlzZSk7XG4gIH0pO1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSBzdGF0aXN0aWNzIG9uIHRhc2tzIGFuZCB3b3JrZXJzLlxuICogQHJldHVybiB7e3RvdGFsV29ya2VyczogbnVtYmVyLCBidXN5V29ya2VyczogbnVtYmVyLCBpZGxlV29ya2VyczogbnVtYmVyLCBwZW5kaW5nVGFza3M6IG51bWJlciwgYWN0aXZlVGFza3M6IG51bWJlcn19IFJldHVybnMgYW4gb2JqZWN0IHdpdGggc3RhdGlzdGljc1xuICovXG5Qb29sLnByb3RvdHlwZS5zdGF0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRvdGFsV29ya2VycyA9IHRoaXMud29ya2Vycy5sZW5ndGg7XG4gIHZhciBidXN5V29ya2VycyA9IHRoaXMud29ya2Vycy5maWx0ZXIoZnVuY3Rpb24gKHdvcmtlcikge1xuICAgIHJldHVybiB3b3JrZXIuYnVzeSgpO1xuICB9KS5sZW5ndGg7XG5cbiAgcmV0dXJuIHtcbiAgICB0b3RhbFdvcmtlcnM6ICB0b3RhbFdvcmtlcnMsXG4gICAgYnVzeVdvcmtlcnM6ICAgYnVzeVdvcmtlcnMsXG4gICAgaWRsZVdvcmtlcnM6ICAgdG90YWxXb3JrZXJzIC0gYnVzeVdvcmtlcnMsXG5cbiAgICBwZW5kaW5nVGFza3M6ICB0aGlzLnRhc2tzLmxlbmd0aCxcbiAgICBhY3RpdmVUYXNrczogICBidXN5V29ya2Vyc1xuICB9O1xufTtcblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgYSBtaW5pbXVtIG9mIG1pbldvcmtlcnMgaXMgdXAgYW5kIHJ1bm5pbmdcbiAqIEBwcm90ZWN0ZWRcbiAqL1xuUG9vbC5wcm90b3R5cGUuX2Vuc3VyZU1pbldvcmtlcnMgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMubWluV29ya2Vycykge1xuICAgIGZvcih2YXIgaSA9IHRoaXMud29ya2Vycy5sZW5ndGg7IGkgPCB0aGlzLm1pbldvcmtlcnM7IGkrKykge1xuICAgICAgdGhpcy53b3JrZXJzLnB1c2godGhpcy5fY3JlYXRlV29ya2VySGFuZGxlcigpKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBXb3JrZXJIYW5kbGVyIGFuZCBwYXNzIGFsbCBvcHRpb25zLlxuICogQHJldHVybiB7V29ya2VySGFuZGxlcn1cbiAqIEBwcml2YXRlXG4gKi9cblBvb2wucHJvdG90eXBlLl9jcmVhdGVXb3JrZXJIYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBvdmVycmlkZW5QYXJhbXMgPSB0aGlzLm9uQ3JlYXRlV29ya2VyKHtcbiAgICBmb3JrQXJnczogdGhpcy5mb3JrQXJncyxcbiAgICBmb3JrT3B0czogdGhpcy5mb3JrT3B0cyxcbiAgICBzY3JpcHQ6IHRoaXMuc2NyaXB0XG4gIH0pIHx8IHt9O1xuXG4gIHJldHVybiBuZXcgV29ya2VySGFuZGxlcihvdmVycmlkZW5QYXJhbXMuc2NyaXB0IHx8IHRoaXMuc2NyaXB0LCB7XG4gICAgZm9ya0FyZ3M6IG92ZXJyaWRlblBhcmFtcy5mb3JrQXJncyB8fCB0aGlzLmZvcmtBcmdzLFxuICAgIGZvcmtPcHRzOiBvdmVycmlkZW5QYXJhbXMuZm9ya09wdHMgfHwgdGhpcy5mb3JrT3B0cyxcbiAgICBkZWJ1Z1BvcnQ6IERFQlVHX1BPUlRfQUxMT0NBVE9SLm5leHRBdmFpbGFibGVTdGFydGluZ0F0KHRoaXMuZGVidWdQb3J0U3RhcnQpLFxuICAgIHdvcmtlclR5cGU6IHRoaXMud29ya2VyVHlwZVxuICB9KTtcbn1cblxuLyoqXG4gKiBFbnN1cmUgdGhhdCB0aGUgbWF4V29ya2VycyBvcHRpb24gaXMgYW4gaW50ZWdlciA+PSAxXG4gKiBAcGFyYW0geyp9IG1heFdvcmtlcnNcbiAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm5zIHRydWUgbWF4V29ya2VycyBoYXMgYSB2YWxpZCB2YWx1ZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZU1heFdvcmtlcnMobWF4V29ya2Vycykge1xuICBpZiAoIWlzTnVtYmVyKG1heFdvcmtlcnMpIHx8ICFpc0ludGVnZXIobWF4V29ya2VycykgfHwgbWF4V29ya2VycyA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPcHRpb24gbWF4V29ya2VycyBtdXN0IGJlIGFuIGludGVnZXIgbnVtYmVyID49IDEnKTtcbiAgfVxufVxuXG4vKipcbiAqIEVuc3VyZSB0aGF0IHRoZSBtaW5Xb3JrZXJzIG9wdGlvbiBpcyBhbiBpbnRlZ2VyID49IDBcbiAqIEBwYXJhbSB7Kn0gbWluV29ya2Vyc1xuICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSB3aGVuIG1pbldvcmtlcnMgaGFzIGEgdmFsaWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVNaW5Xb3JrZXJzKG1pbldvcmtlcnMpIHtcbiAgaWYgKCFpc051bWJlcihtaW5Xb3JrZXJzKSB8fCAhaXNJbnRlZ2VyKG1pbldvcmtlcnMpIHx8IG1pbldvcmtlcnMgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignT3B0aW9uIG1pbldvcmtlcnMgbXVzdCBiZSBhbiBpbnRlZ2VyIG51bWJlciA+PSAwJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgYSB2YXJpYWJsZSBpcyBhIG51bWJlclxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSB3aGVuIHZhbHVlIGlzIGEgbnVtYmVyXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInO1xufVxuXG4vKipcbiAqIFRlc3Qgd2hldGhlciBhIG51bWJlciBpcyBhbiBpbnRlZ2VyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdmFsdWUgaXMgYW4gaW50ZWdlclxuICovXG5mdW5jdGlvbiBpc0ludGVnZXIodmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUpID09IHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBvb2w7XG4iLCAiLyoqXG4gKiB3b3JrZXIgbXVzdCBiZSBzdGFydGVkIGFzIGEgY2hpbGQgcHJvY2VzcyBvciBhIHdlYiB3b3JrZXIuXG4gKiBJdCBsaXN0ZW5zIGZvciBSUEMgbWVzc2FnZXMgZnJvbSB0aGUgcGFyZW50IHByb2Nlc3MuXG4gKi9cblxuLy8gc291cmNlIG9mIGluc3BpcmF0aW9uOiBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL3JlcXVpcmUtZm9vbC13ZWJwYWNrXG52YXIgcmVxdWlyZUZvb2xXZWJwYWNrID0gZXZhbChcbiAgICAndHlwZW9mIHJlcXVpcmUgIT09IFxcJ3VuZGVmaW5lZFxcJycgK1xuICAgICcgPyByZXF1aXJlJyArXG4gICAgJyA6IGZ1bmN0aW9uIChtb2R1bGUpIHsgdGhyb3cgbmV3IEVycm9yKFxcJ01vZHVsZSBcIiArIG1vZHVsZSArIFwiIG5vdCBmb3VuZC5cXCcpIH0nXG4pO1xuXG4vKipcbiAqIFNwZWNpYWwgbWVzc2FnZSBzZW50IGJ5IHBhcmVudCB3aGljaCBjYXVzZXMgdGhlIHdvcmtlciB0byB0ZXJtaW5hdGUgaXRzZWxmLlxuICogTm90IGEgXCJtZXNzYWdlIG9iamVjdFwiOyB0aGlzIHN0cmluZyBpcyB0aGUgZW50aXJlIG1lc3NhZ2UuXG4gKi9cbnZhciBURVJNSU5BVEVfTUVUSE9EX0lEID0gJ19fd29ya2VycG9vbC10ZXJtaW5hdGVfXyc7XG5cbi8vIHZhciBub2RlT1NQbGF0Zm9ybSA9IHJlcXVpcmUoJy4vZW52aXJvbm1lbnQnKS5ub2RlT1NQbGF0Zm9ybTtcblxuLy8gY3JlYXRlIGEgd29ya2VyIEFQSSBmb3Igc2VuZGluZyBhbmQgcmVjZWl2aW5nIG1lc3NhZ2VzIHdoaWNoIHdvcmtzIGJvdGggb25cbi8vIG5vZGUuanMgYW5kIGluIHRoZSBicm93c2VyXG52YXIgd29ya2VyID0ge1xuICBleGl0OiBmdW5jdGlvbigpIHt9XG59O1xuaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgLy8gd29ya2VyIGluIHRoZSBicm93c2VyXG4gIHdvcmtlci5vbiA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHtcbiAgICBhZGRFdmVudExpc3RlbmVyKGV2ZW50LCBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgICAgY2FsbGJhY2sobWVzc2FnZS5kYXRhKTtcbiAgICB9KVxuICB9O1xuICB3b3JrZXIuc2VuZCA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgcG9zdE1lc3NhZ2UobWVzc2FnZSk7XG4gIH07XG59XG5lbHNlIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgLy8gbm9kZS5qc1xuXG4gIHZhciBXb3JrZXJUaHJlYWRzO1xuICB0cnkge1xuICAgIFdvcmtlclRocmVhZHMgPSByZXF1aXJlRm9vbFdlYnBhY2soJ3dvcmtlcl90aHJlYWRzJyk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvci5jb2RlID09PSAnTU9EVUxFX05PVF9GT1VORCcpIHtcbiAgICAgIC8vIG5vIHdvcmtlcl90aHJlYWRzLCBmYWxsYmFjayB0byBzdWItcHJvY2VzcyBiYXNlZCB3b3JrZXJzXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGlmIChXb3JrZXJUaHJlYWRzICYmXG4gICAgLyogaWYgdGhlcmUgaXMgYSBwYXJlbnRQb3J0LCB3ZSBhcmUgaW4gYSBXb3JrZXJUaHJlYWQgKi9cbiAgICBXb3JrZXJUaHJlYWRzLnBhcmVudFBvcnQgIT09IG51bGwpIHtcbiAgICB2YXIgcGFyZW50UG9ydCAgPSBXb3JrZXJUaHJlYWRzLnBhcmVudFBvcnQ7XG4gICAgd29ya2VyLnNlbmQgPSBwYXJlbnRQb3J0LnBvc3RNZXNzYWdlLmJpbmQocGFyZW50UG9ydCk7XG4gICAgd29ya2VyLm9uID0gcGFyZW50UG9ydC5vbi5iaW5kKHBhcmVudFBvcnQpO1xuICB9IGVsc2Uge1xuICAgIHdvcmtlci5vbiA9IHByb2Nlc3Mub24uYmluZChwcm9jZXNzKTtcbiAgICB3b3JrZXIuc2VuZCA9IHByb2Nlc3Muc2VuZC5iaW5kKHByb2Nlc3MpO1xuICAgIC8vIHJlZ2lzdGVyIGRpc2Nvbm5lY3QgaGFuZGxlciBvbmx5IGZvciBzdWJwcm9jZXNzIHdvcmtlciB0byBleGl0IHdoZW4gcGFyZW50IGlzIGtpbGxlZCB1bmV4cGVjdGVkbHlcbiAgICB3b3JrZXIub24oJ2Rpc2Nvbm5lY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfSk7XG4gICAgd29ya2VyLmV4aXQgPSBwcm9jZXNzLmV4aXQuYmluZChwcm9jZXNzKTtcbiAgfVxufVxuZWxzZSB7XG4gIHRocm93IG5ldyBFcnJvcignU2NyaXB0IG11c3QgYmUgZXhlY3V0ZWQgYXMgYSB3b3JrZXInKTtcbn1cblxuZnVuY3Rpb24gY29udmVydEVycm9yKGVycm9yKSB7XG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcikucmVkdWNlKGZ1bmN0aW9uKHByb2R1Y3QsIG5hbWUpIHtcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb2R1Y3QsIG5hbWUsIHtcblx0dmFsdWU6IGVycm9yW25hbWVdLFxuXHRlbnVtZXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBhIFByb21pc2UgdmlhIGR1Y2sgdHlwaW5nLlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIGdpdmVuIHZhbHVlIGlzIGFuIG9iamVjdFxuICogICAgICAgICAgICAgICAgICAgIGhhdmluZyBmdW5jdGlvbnMgYHRoZW5gIGFuZCBgY2F0Y2hgLlxuICovXG5mdW5jdGlvbiBpc1Byb21pc2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICYmICh0eXBlb2YgdmFsdWUudGhlbiA9PT0gJ2Z1bmN0aW9uJykgJiYgKHR5cGVvZiB2YWx1ZS5jYXRjaCA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5cbi8vIGZ1bmN0aW9ucyBhdmFpbGFibGUgZXh0ZXJuYWxseVxud29ya2VyLm1ldGhvZHMgPSB7fTtcblxuLyoqXG4gKiBFeGVjdXRlIGEgZnVuY3Rpb24gd2l0aCBwcm92aWRlZCBhcmd1bWVudHNcbiAqIEBwYXJhbSB7U3RyaW5nfSBmbiAgICAgU3RyaW5naWZpZWQgZnVuY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl9IFthcmdzXSAgRnVuY3Rpb24gYXJndW1lbnRzXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xud29ya2VyLm1ldGhvZHMucnVuID0gZnVuY3Rpb24gcnVuKGZuLCBhcmdzKSB7XG4gIHZhciBmID0gbmV3IEZ1bmN0aW9uKCdyZXR1cm4gKCcgKyBmbiArICcpLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Jyk7XG4gIHJldHVybiBmLmFwcGx5KGYsIGFyZ3MpO1xufTtcblxuLyoqXG4gKiBHZXQgYSBsaXN0IHdpdGggbWV0aG9kcyBhdmFpbGFibGUgb24gdGhpcyB3b3JrZXJcbiAqIEByZXR1cm4ge1N0cmluZ1tdfSBtZXRob2RzXG4gKi9cbndvcmtlci5tZXRob2RzLm1ldGhvZHMgPSBmdW5jdGlvbiBtZXRob2RzKCkge1xuICByZXR1cm4gT2JqZWN0LmtleXMod29ya2VyLm1ldGhvZHMpO1xufTtcblxudmFyIGN1cnJlbnRSZXF1ZXN0SWQgPSBudWxsO1xuXG53b3JrZXIub24oJ21lc3NhZ2UnLCBmdW5jdGlvbiAocmVxdWVzdCkge1xuICBpZiAocmVxdWVzdCA9PT0gVEVSTUlOQVRFX01FVEhPRF9JRCkge1xuICAgIHJldHVybiB3b3JrZXIuZXhpdCgwKTtcbiAgfVxuICB0cnkge1xuICAgIHZhciBtZXRob2QgPSB3b3JrZXIubWV0aG9kc1tyZXF1ZXN0Lm1ldGhvZF07XG5cbiAgICBpZiAobWV0aG9kKSB7XG4gICAgICBjdXJyZW50UmVxdWVzdElkID0gcmVxdWVzdC5pZDtcbiAgICAgIFxuICAgICAgLy8gZXhlY3V0ZSB0aGUgZnVuY3Rpb25cbiAgICAgIHZhciByZXN1bHQgPSBtZXRob2QuYXBwbHkobWV0aG9kLCByZXF1ZXN0LnBhcmFtcyk7XG5cbiAgICAgIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICAvLyBwcm9taXNlIHJldHVybmVkLCByZXNvbHZlIHRoaXMgYW5kIHRoZW4gcmV0dXJuXG4gICAgICAgIHJlc3VsdFxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICB3b3JrZXIuc2VuZCh7XG4gICAgICAgICAgICAgICAgaWQ6IHJlcXVlc3QuaWQsXG4gICAgICAgICAgICAgICAgcmVzdWx0OiByZXN1bHQsXG4gICAgICAgICAgICAgICAgZXJyb3I6IG51bGxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGN1cnJlbnRSZXF1ZXN0SWQgPSBudWxsO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgIHdvcmtlci5zZW5kKHtcbiAgICAgICAgICAgICAgICBpZDogcmVxdWVzdC5pZCxcbiAgICAgICAgICAgICAgICByZXN1bHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGNvbnZlcnRFcnJvcihlcnIpXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjdXJyZW50UmVxdWVzdElkID0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIGltbWVkaWF0ZSByZXN1bHRcbiAgICAgICAgd29ya2VyLnNlbmQoe1xuICAgICAgICAgIGlkOiByZXF1ZXN0LmlkLFxuICAgICAgICAgIHJlc3VsdDogcmVzdWx0LFxuICAgICAgICAgIGVycm9yOiBudWxsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN1cnJlbnRSZXF1ZXN0SWQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBtZXRob2QgXCInICsgcmVxdWVzdC5tZXRob2QgKyAnXCInKTtcbiAgICB9XG4gIH1cbiAgY2F0Y2ggKGVycikge1xuICAgIHdvcmtlci5zZW5kKHtcbiAgICAgIGlkOiByZXF1ZXN0LmlkLFxuICAgICAgcmVzdWx0OiBudWxsLFxuICAgICAgZXJyb3I6IGNvbnZlcnRFcnJvcihlcnIpXG4gICAgfSk7XG4gIH1cbn0pO1xuXG4vKipcbiAqIFJlZ2lzdGVyIG1ldGhvZHMgdG8gdGhlIHdvcmtlclxuICogQHBhcmFtIHtPYmplY3R9IG1ldGhvZHNcbiAqL1xud29ya2VyLnJlZ2lzdGVyID0gZnVuY3Rpb24gKG1ldGhvZHMpIHtcblxuICBpZiAobWV0aG9kcykge1xuICAgIGZvciAodmFyIG5hbWUgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKG1ldGhvZHMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgd29ya2VyLm1ldGhvZHNbbmFtZV0gPSBtZXRob2RzW25hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHdvcmtlci5zZW5kKCdyZWFkeScpO1xuXG59O1xuXG53b3JrZXIuZW1pdCA9IGZ1bmN0aW9uIChwYXlsb2FkKSB7XG4gIGlmIChjdXJyZW50UmVxdWVzdElkKSB7XG4gICAgd29ya2VyLnNlbmQoe1xuICAgICAgaWQ6IGN1cnJlbnRSZXF1ZXN0SWQsXG4gICAgICBpc0V2ZW50OiB0cnVlLFxuICAgICAgcGF5bG9hZFxuICAgIH0pO1xuICB9XG59O1xuXG5pZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gIGV4cG9ydHMuYWRkID0gd29ya2VyLnJlZ2lzdGVyO1xuICBleHBvcnRzLmVtaXQgPSB3b3JrZXIuZW1pdDtcbn1cbiIsICJ2YXIgZW52aXJvbm1lbnQgPSByZXF1aXJlKCcuL2Vudmlyb25tZW50Jyk7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IHdvcmtlciBwb29sXG4gKiBAcGFyYW0ge3N0cmluZ30gW3NjcmlwdF1cbiAqIEBwYXJhbSB7V29ya2VyUG9vbE9wdGlvbnN9IFtvcHRpb25zXVxuICogQHJldHVybnMge1Bvb2x9IHBvb2xcbiAqL1xuZXhwb3J0cy5wb29sID0gZnVuY3Rpb24gcG9vbChzY3JpcHQsIG9wdGlvbnMpIHtcbiAgdmFyIFBvb2wgPSByZXF1aXJlKCcuL1Bvb2wnKTtcblxuICByZXR1cm4gbmV3IFBvb2woc2NyaXB0LCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgd29ya2VyIGFuZCBvcHRpb25hbGx5IHJlZ2lzdGVyIGEgc2V0IG9mIG1ldGhvZHMgdG8gdGhlIHdvcmtlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbbWV0aG9kc11cbiAqL1xuZXhwb3J0cy53b3JrZXIgPSBmdW5jdGlvbiB3b3JrZXIobWV0aG9kcykge1xuICB2YXIgd29ya2VyID0gcmVxdWlyZSgnLi93b3JrZXInKTtcbiAgd29ya2VyLmFkZChtZXRob2RzKTtcbn07XG5cbi8qKlxuICogU2VuZHMgYW4gZXZlbnQgdG8gdGhlIHBhcmVudCB3b3JrZXIgcG9vbC5cbiAqIEBwYXJhbSB7YW55fSBwYXlsb2FkIFxuICovXG5leHBvcnRzLndvcmtlckVtaXQgPSBmdW5jdGlvbiB3b3JrZXJFbWl0KHBheWxvYWQpIHtcbiAgdmFyIHdvcmtlciA9IHJlcXVpcmUoJy4vd29ya2VyJyk7XG4gIHdvcmtlci5lbWl0KHBheWxvYWQpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBwcm9taXNlLlxuICogQHR5cGUge1Byb21pc2V9IHByb21pc2VcbiAqL1xuZXhwb3J0cy5Qcm9taXNlID0gcmVxdWlyZSgnLi9Qcm9taXNlJyk7XG5cbmV4cG9ydHMucGxhdGZvcm0gPSBlbnZpcm9ubWVudC5wbGF0Zm9ybTtcbmV4cG9ydHMuaXNNYWluVGhyZWFkID0gZW52aXJvbm1lbnQuaXNNYWluVGhyZWFkO1xuZXhwb3J0cy5jcHVzID0gZW52aXJvbm1lbnQuY3B1czsiLCAiaW1wb3J0IHsgV3JpdGFibGUgfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICd1dGlsJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcblxudHlwZSBTdHlsZUZuID0gKHN0cjogc3RyaW5nKSA9PiBzdHJpbmc7XG5jb25zdCB7IHN0ZGVyciB9ID0gcHJvY2VzcztcblxuY29uc3QgbG9nZ2VyID0gKHN0cmVhbTogV3JpdGFibGUsIHN0eWxlcz86IFN0eWxlRm5bXSkgPT4gKGZtdDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkgPT4ge1xuICBsZXQgc3RyID0gdXRpbC5mb3JtYXQoZm10LCAuLi5hcmdzKTtcbiAgaWYgKHN0eWxlcyAmJiBzdHlsZXMubGVuZ3RoKSB7XG4gICAgc3RyID0gc3R5bGVzLnJlZHVjZSgoYSwgc3R5bGUpID0+IHN0eWxlKGEpLCBzdHIpO1xuICB9XG4gIHN0cmVhbS53cml0ZShzdHIgKyAnXFxuJyk7XG59O1xuXG5leHBvcnQgY29uc3QgcHJpbnQgPSBsb2dnZXIoc3RkZXJyKTtcbmV4cG9ydCBjb25zdCBlcnJvciA9IGxvZ2dlcihzdGRlcnIsIFtjaGFsay5yZWRdKTtcbmV4cG9ydCBjb25zdCB3YXJuaW5nID0gbG9nZ2VyKHN0ZGVyciwgW2NoYWxrLnllbGxvd10pO1xuZXhwb3J0IGNvbnN0IHN1Y2Nlc3MgPSBsb2dnZXIoc3RkZXJyLCBbY2hhbGsuZ3JlZW5dKTtcbmV4cG9ydCBjb25zdCBoaWdobGlnaHQgPSBsb2dnZXIoc3RkZXJyLCBbY2hhbGsuYm9sZF0pO1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmZyb21DYWxsYmFjayA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIGZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBmbi5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgLi4uYXJncyxcbiAgICAgICAgICAoZXJyLCByZXMpID0+IChlcnIgIT0gbnVsbCkgPyByZWplY3QoZXJyKSA6IHJlc29sdmUocmVzKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH1cbiAgfSwgJ25hbWUnLCB7IHZhbHVlOiBmbi5uYW1lIH0pXG59XG5cbmV4cG9ydHMuZnJvbVByb21pc2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGNvbnN0IGNiID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdXG4gICAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgZWxzZSBmbi5hcHBseSh0aGlzLCBhcmdzLnNsaWNlKDAsIC0xKSkudGhlbihyID0+IGNiKG51bGwsIHIpLCBjYilcbiAgfSwgJ25hbWUnLCB7IHZhbHVlOiBmbi5uYW1lIH0pXG59XG4iLCAidmFyIGNvbnN0YW50cyA9IHJlcXVpcmUoJ2NvbnN0YW50cycpXG5cbnZhciBvcmlnQ3dkID0gcHJvY2Vzcy5jd2RcbnZhciBjd2QgPSBudWxsXG5cbnZhciBwbGF0Zm9ybSA9IHByb2Nlc3MuZW52LkdSQUNFRlVMX0ZTX1BMQVRGT1JNIHx8IHByb2Nlc3MucGxhdGZvcm1cblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCFjd2QpXG4gICAgY3dkID0gb3JpZ0N3ZC5jYWxsKHByb2Nlc3MpXG4gIHJldHVybiBjd2Rcbn1cbnRyeSB7XG4gIHByb2Nlc3MuY3dkKClcbn0gY2F0Y2ggKGVyKSB7fVxuXG4vLyBUaGlzIGNoZWNrIGlzIG5lZWRlZCB1bnRpbCBub2RlLmpzIDEyIGlzIHJlcXVpcmVkXG5pZiAodHlwZW9mIHByb2Nlc3MuY2hkaXIgPT09ICdmdW5jdGlvbicpIHtcbiAgdmFyIGNoZGlyID0gcHJvY2Vzcy5jaGRpclxuICBwcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGQpIHtcbiAgICBjd2QgPSBudWxsXG4gICAgY2hkaXIuY2FsbChwcm9jZXNzLCBkKVxuICB9XG4gIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm9jZXNzLmNoZGlyLCBjaGRpcilcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaFxuXG5mdW5jdGlvbiBwYXRjaCAoZnMpIHtcbiAgLy8gKHJlLSlpbXBsZW1lbnQgc29tZSB0aGluZ3MgdGhhdCBhcmUga25vd24gYnVzdGVkIG9yIG1pc3NpbmcuXG5cbiAgLy8gbGNobW9kLCBicm9rZW4gcHJpb3IgdG8gMC42LjJcbiAgLy8gYmFjay1wb3J0IHRoZSBmaXggaGVyZS5cbiAgaWYgKGNvbnN0YW50cy5oYXNPd25Qcm9wZXJ0eSgnT19TWU1MSU5LJykgJiZcbiAgICAgIHByb2Nlc3MudmVyc2lvbi5tYXRjaCgvXnYwXFwuNlxcLlswLTJdfF52MFxcLjVcXC4vKSkge1xuICAgIHBhdGNoTGNobW9kKGZzKVxuICB9XG5cbiAgLy8gbHV0aW1lcyBpbXBsZW1lbnRhdGlvbiwgb3Igbm8tb3BcbiAgaWYgKCFmcy5sdXRpbWVzKSB7XG4gICAgcGF0Y2hMdXRpbWVzKGZzKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2lzYWFjcy9ub2RlLWdyYWNlZnVsLWZzL2lzc3Vlcy80XG4gIC8vIENob3duIHNob3VsZCBub3QgZmFpbCBvbiBlaW52YWwgb3IgZXBlcm0gaWYgbm9uLXJvb3QuXG4gIC8vIEl0IHNob3VsZCBub3QgZmFpbCBvbiBlbm9zeXMgZXZlciwgYXMgdGhpcyBqdXN0IGluZGljYXRlc1xuICAvLyB0aGF0IGEgZnMgZG9lc24ndCBzdXBwb3J0IHRoZSBpbnRlbmRlZCBvcGVyYXRpb24uXG5cbiAgZnMuY2hvd24gPSBjaG93bkZpeChmcy5jaG93bilcbiAgZnMuZmNob3duID0gY2hvd25GaXgoZnMuZmNob3duKVxuICBmcy5sY2hvd24gPSBjaG93bkZpeChmcy5sY2hvd24pXG5cbiAgZnMuY2htb2QgPSBjaG1vZEZpeChmcy5jaG1vZClcbiAgZnMuZmNobW9kID0gY2htb2RGaXgoZnMuZmNobW9kKVxuICBmcy5sY2htb2QgPSBjaG1vZEZpeChmcy5sY2htb2QpXG5cbiAgZnMuY2hvd25TeW5jID0gY2hvd25GaXhTeW5jKGZzLmNob3duU3luYylcbiAgZnMuZmNob3duU3luYyA9IGNob3duRml4U3luYyhmcy5mY2hvd25TeW5jKVxuICBmcy5sY2hvd25TeW5jID0gY2hvd25GaXhTeW5jKGZzLmxjaG93blN5bmMpXG5cbiAgZnMuY2htb2RTeW5jID0gY2htb2RGaXhTeW5jKGZzLmNobW9kU3luYylcbiAgZnMuZmNobW9kU3luYyA9IGNobW9kRml4U3luYyhmcy5mY2htb2RTeW5jKVxuICBmcy5sY2htb2RTeW5jID0gY2htb2RGaXhTeW5jKGZzLmxjaG1vZFN5bmMpXG5cbiAgZnMuc3RhdCA9IHN0YXRGaXgoZnMuc3RhdClcbiAgZnMuZnN0YXQgPSBzdGF0Rml4KGZzLmZzdGF0KVxuICBmcy5sc3RhdCA9IHN0YXRGaXgoZnMubHN0YXQpXG5cbiAgZnMuc3RhdFN5bmMgPSBzdGF0Rml4U3luYyhmcy5zdGF0U3luYylcbiAgZnMuZnN0YXRTeW5jID0gc3RhdEZpeFN5bmMoZnMuZnN0YXRTeW5jKVxuICBmcy5sc3RhdFN5bmMgPSBzdGF0Rml4U3luYyhmcy5sc3RhdFN5bmMpXG5cbiAgLy8gaWYgbGNobW9kL2xjaG93biBkbyBub3QgZXhpc3QsIHRoZW4gbWFrZSB0aGVtIG5vLW9wc1xuICBpZiAoZnMuY2htb2QgJiYgIWZzLmxjaG1vZCkge1xuICAgIGZzLmxjaG1vZCA9IGZ1bmN0aW9uIChwYXRoLCBtb2RlLCBjYikge1xuICAgICAgaWYgKGNiKSBwcm9jZXNzLm5leHRUaWNrKGNiKVxuICAgIH1cbiAgICBmcy5sY2htb2RTeW5jID0gZnVuY3Rpb24gKCkge31cbiAgfVxuICBpZiAoZnMuY2hvd24gJiYgIWZzLmxjaG93bikge1xuICAgIGZzLmxjaG93biA9IGZ1bmN0aW9uIChwYXRoLCB1aWQsIGdpZCwgY2IpIHtcbiAgICAgIGlmIChjYikgcHJvY2Vzcy5uZXh0VGljayhjYilcbiAgICB9XG4gICAgZnMubGNob3duU3luYyA9IGZ1bmN0aW9uICgpIHt9XG4gIH1cblxuICAvLyBvbiBXaW5kb3dzLCBBL1Ygc29mdHdhcmUgY2FuIGxvY2sgdGhlIGRpcmVjdG9yeSwgY2F1c2luZyB0aGlzXG4gIC8vIHRvIGZhaWwgd2l0aCBhbiBFQUNDRVMgb3IgRVBFUk0gaWYgdGhlIGRpcmVjdG9yeSBjb250YWlucyBuZXdseVxuICAvLyBjcmVhdGVkIGZpbGVzLiAgVHJ5IGFnYWluIG9uIGZhaWx1cmUsIGZvciB1cCB0byA2MCBzZWNvbmRzLlxuXG4gIC8vIFNldCB0aGUgdGltZW91dCB0aGlzIGxvbmcgYmVjYXVzZSBzb21lIFdpbmRvd3MgQW50aS1WaXJ1cywgc3VjaCBhcyBQYXJpdHlcbiAgLy8gYml0OSwgbWF5IGxvY2sgZmlsZXMgZm9yIHVwIHRvIGEgbWludXRlLCBjYXVzaW5nIG5wbSBwYWNrYWdlIGluc3RhbGxcbiAgLy8gZmFpbHVyZXMuIEFsc28sIHRha2UgY2FyZSB0byB5aWVsZCB0aGUgc2NoZWR1bGVyLiBXaW5kb3dzIHNjaGVkdWxpbmcgZ2l2ZXNcbiAgLy8gQ1BVIHRvIGEgYnVzeSBsb29waW5nIHByb2Nlc3MsIHdoaWNoIGNhbiBjYXVzZSB0aGUgcHJvZ3JhbSBjYXVzaW5nIHRoZSBsb2NrXG4gIC8vIGNvbnRlbnRpb24gdG8gYmUgc3RhcnZlZCBvZiBDUFUgYnkgbm9kZSwgc28gdGhlIGNvbnRlbnRpb24gZG9lc24ndCByZXNvbHZlLlxuICBpZiAocGxhdGZvcm0gPT09IFwid2luMzJcIikge1xuICAgIGZzLnJlbmFtZSA9IHR5cGVvZiBmcy5yZW5hbWUgIT09ICdmdW5jdGlvbicgPyBmcy5yZW5hbWVcbiAgICA6IChmdW5jdGlvbiAoZnMkcmVuYW1lKSB7XG4gICAgICBmdW5jdGlvbiByZW5hbWUgKGZyb20sIHRvLCBjYikge1xuICAgICAgICB2YXIgc3RhcnQgPSBEYXRlLm5vdygpXG4gICAgICAgIHZhciBiYWNrb2ZmID0gMDtcbiAgICAgICAgZnMkcmVuYW1lKGZyb20sIHRvLCBmdW5jdGlvbiBDQiAoZXIpIHtcbiAgICAgICAgICBpZiAoZXJcbiAgICAgICAgICAgICAgJiYgKGVyLmNvZGUgPT09IFwiRUFDQ0VTXCIgfHwgZXIuY29kZSA9PT0gXCJFUEVSTVwiKVxuICAgICAgICAgICAgICAmJiBEYXRlLm5vdygpIC0gc3RhcnQgPCA2MDAwMCkge1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgZnMuc3RhdCh0bywgZnVuY3Rpb24gKHN0YXRlciwgc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGVyICYmIHN0YXRlci5jb2RlID09PSBcIkVOT0VOVFwiKVxuICAgICAgICAgICAgICAgICAgZnMkcmVuYW1lKGZyb20sIHRvLCBDQik7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgY2IoZXIpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LCBiYWNrb2ZmKVxuICAgICAgICAgICAgaWYgKGJhY2tvZmYgPCAxMDApXG4gICAgICAgICAgICAgIGJhY2tvZmYgKz0gMTA7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjYikgY2IoZXIpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSBPYmplY3Quc2V0UHJvdG90eXBlT2YocmVuYW1lLCBmcyRyZW5hbWUpXG4gICAgICByZXR1cm4gcmVuYW1lXG4gICAgfSkoZnMucmVuYW1lKVxuICB9XG5cbiAgLy8gaWYgcmVhZCgpIHJldHVybnMgRUFHQUlOLCB0aGVuIGp1c3QgdHJ5IGl0IGFnYWluLlxuICBmcy5yZWFkID0gdHlwZW9mIGZzLnJlYWQgIT09ICdmdW5jdGlvbicgPyBmcy5yZWFkXG4gIDogKGZ1bmN0aW9uIChmcyRyZWFkKSB7XG4gICAgZnVuY3Rpb24gcmVhZCAoZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFja18pIHtcbiAgICAgIHZhciBjYWxsYmFja1xuICAgICAgaWYgKGNhbGxiYWNrXyAmJiB0eXBlb2YgY2FsbGJhY2tfID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBlYWdDb3VudGVyID0gMFxuICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uIChlciwgXywgX18pIHtcbiAgICAgICAgICBpZiAoZXIgJiYgZXIuY29kZSA9PT0gJ0VBR0FJTicgJiYgZWFnQ291bnRlciA8IDEwKSB7XG4gICAgICAgICAgICBlYWdDb3VudGVyICsrXG4gICAgICAgICAgICByZXR1cm4gZnMkcmVhZC5jYWxsKGZzLCBmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjYWxsYmFja18uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZnMkcmVhZC5jYWxsKGZzLCBmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKVxuICAgIH1cblxuICAgIC8vIFRoaXMgZW5zdXJlcyBgdXRpbC5wcm9taXNpZnlgIHdvcmtzIGFzIGl0IGRvZXMgZm9yIG5hdGl2ZSBgZnMucmVhZGAuXG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikgT2JqZWN0LnNldFByb3RvdHlwZU9mKHJlYWQsIGZzJHJlYWQpXG4gICAgcmV0dXJuIHJlYWRcbiAgfSkoZnMucmVhZClcblxuICBmcy5yZWFkU3luYyA9IHR5cGVvZiBmcy5yZWFkU3luYyAhPT0gJ2Z1bmN0aW9uJyA/IGZzLnJlYWRTeW5jXG4gIDogKGZ1bmN0aW9uIChmcyRyZWFkU3luYykgeyByZXR1cm4gZnVuY3Rpb24gKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbikge1xuICAgIHZhciBlYWdDb3VudGVyID0gMFxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZnMkcmVhZFN5bmMuY2FsbChmcywgZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uKVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgaWYgKGVyLmNvZGUgPT09ICdFQUdBSU4nICYmIGVhZ0NvdW50ZXIgPCAxMCkge1xuICAgICAgICAgIGVhZ0NvdW50ZXIgKytcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIHRocm93IGVyXG4gICAgICB9XG4gICAgfVxuICB9fSkoZnMucmVhZFN5bmMpXG5cbiAgZnVuY3Rpb24gcGF0Y2hMY2htb2QgKGZzKSB7XG4gICAgZnMubGNobW9kID0gZnVuY3Rpb24gKHBhdGgsIG1vZGUsIGNhbGxiYWNrKSB7XG4gICAgICBmcy5vcGVuKCBwYXRoXG4gICAgICAgICAgICAgLCBjb25zdGFudHMuT19XUk9OTFkgfCBjb25zdGFudHMuT19TWU1MSU5LXG4gICAgICAgICAgICAgLCBtb2RlXG4gICAgICAgICAgICAgLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJlZmVyIHRvIHJldHVybiB0aGUgY2htb2QgZXJyb3IsIGlmIG9uZSBvY2N1cnMsXG4gICAgICAgIC8vIGJ1dCBzdGlsbCB0cnkgdG8gY2xvc2UsIGFuZCByZXBvcnQgY2xvc2luZyBlcnJvcnMgaWYgdGhleSBvY2N1ci5cbiAgICAgICAgZnMuZmNobW9kKGZkLCBtb2RlLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgZnMuY2xvc2UoZmQsIGZ1bmN0aW9uKGVycjIpIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZXJyIHx8IGVycjIpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZnMubGNobW9kU3luYyA9IGZ1bmN0aW9uIChwYXRoLCBtb2RlKSB7XG4gICAgICB2YXIgZmQgPSBmcy5vcGVuU3luYyhwYXRoLCBjb25zdGFudHMuT19XUk9OTFkgfCBjb25zdGFudHMuT19TWU1MSU5LLCBtb2RlKVxuXG4gICAgICAvLyBwcmVmZXIgdG8gcmV0dXJuIHRoZSBjaG1vZCBlcnJvciwgaWYgb25lIG9jY3VycyxcbiAgICAgIC8vIGJ1dCBzdGlsbCB0cnkgdG8gY2xvc2UsIGFuZCByZXBvcnQgY2xvc2luZyBlcnJvcnMgaWYgdGhleSBvY2N1ci5cbiAgICAgIHZhciB0aHJldyA9IHRydWVcbiAgICAgIHZhciByZXRcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldCA9IGZzLmZjaG1vZFN5bmMoZmQsIG1vZGUpXG4gICAgICAgIHRocmV3ID0gZmFsc2VcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmICh0aHJldykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgICAgfSBjYXRjaCAoZXIpIHt9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGF0Y2hMdXRpbWVzIChmcykge1xuICAgIGlmIChjb25zdGFudHMuaGFzT3duUHJvcGVydHkoXCJPX1NZTUxJTktcIikgJiYgZnMuZnV0aW1lcykge1xuICAgICAgZnMubHV0aW1lcyA9IGZ1bmN0aW9uIChwYXRoLCBhdCwgbXQsIGNiKSB7XG4gICAgICAgIGZzLm9wZW4ocGF0aCwgY29uc3RhbnRzLk9fU1lNTElOSywgZnVuY3Rpb24gKGVyLCBmZCkge1xuICAgICAgICAgIGlmIChlcikge1xuICAgICAgICAgICAgaWYgKGNiKSBjYihlcilcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBmcy5mdXRpbWVzKGZkLCBhdCwgbXQsIGZ1bmN0aW9uIChlcikge1xuICAgICAgICAgICAgZnMuY2xvc2UoZmQsIGZ1bmN0aW9uIChlcjIpIHtcbiAgICAgICAgICAgICAgaWYgKGNiKSBjYihlciB8fCBlcjIpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGZzLmx1dGltZXNTeW5jID0gZnVuY3Rpb24gKHBhdGgsIGF0LCBtdCkge1xuICAgICAgICB2YXIgZmQgPSBmcy5vcGVuU3luYyhwYXRoLCBjb25zdGFudHMuT19TWU1MSU5LKVxuICAgICAgICB2YXIgcmV0XG4gICAgICAgIHZhciB0aHJldyA9IHRydWVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXQgPSBmcy5mdXRpbWVzU3luYyhmZCwgYXQsIG10KVxuICAgICAgICAgIHRocmV3ID0gZmFsc2VcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpZiAodGhyZXcpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVyKSB7fVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXRcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoZnMuZnV0aW1lcykge1xuICAgICAgZnMubHV0aW1lcyA9IGZ1bmN0aW9uIChfYSwgX2IsIF9jLCBjYikgeyBpZiAoY2IpIHByb2Nlc3MubmV4dFRpY2soY2IpIH1cbiAgICAgIGZzLmx1dGltZXNTeW5jID0gZnVuY3Rpb24gKCkge31cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaG1vZEZpeCAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgbW9kZSwgY2IpIHtcbiAgICAgIHJldHVybiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgbW9kZSwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICAgIGlmIChjaG93bkVyT2soZXIpKSBlciA9IG51bGxcbiAgICAgICAgaWYgKGNiKSBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNobW9kRml4U3luYyAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgbW9kZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCBtb2RlKVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgaWYgKCFjaG93bkVyT2soZXIpKSB0aHJvdyBlclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgZnVuY3Rpb24gY2hvd25GaXggKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIHVpZCwgZ2lkLCBjYikge1xuICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCB1aWQsIGdpZCwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICAgIGlmIChjaG93bkVyT2soZXIpKSBlciA9IG51bGxcbiAgICAgICAgaWYgKGNiKSBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNob3duRml4U3luYyAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgdWlkLCBnaWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgdWlkLCBnaWQpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBpZiAoIWNob3duRXJPayhlcikpIHRocm93IGVyXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhdEZpeCAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICAvLyBPbGRlciB2ZXJzaW9ucyBvZiBOb2RlIGVycm9uZW91c2x5IHJldHVybmVkIHNpZ25lZCBpbnRlZ2VycyBmb3JcbiAgICAvLyB1aWQgKyBnaWQuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIG9wdGlvbnMsIGNiKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zXG4gICAgICAgIG9wdGlvbnMgPSBudWxsXG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBjYWxsYmFjayAoZXIsIHN0YXRzKSB7XG4gICAgICAgIGlmIChzdGF0cykge1xuICAgICAgICAgIGlmIChzdGF0cy51aWQgPCAwKSBzdGF0cy51aWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgICAgICBpZiAoc3RhdHMuZ2lkIDwgMCkgc3RhdHMuZ2lkICs9IDB4MTAwMDAwMDAwXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNiKSBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9ucyA/IG9yaWcuY2FsbChmcywgdGFyZ2V0LCBvcHRpb25zLCBjYWxsYmFjaylcbiAgICAgICAgOiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgY2FsbGJhY2spXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhdEZpeFN5bmMgKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgLy8gT2xkZXIgdmVyc2lvbnMgb2YgTm9kZSBlcnJvbmVvdXNseSByZXR1cm5lZCBzaWduZWQgaW50ZWdlcnMgZm9yXG4gICAgLy8gdWlkICsgZ2lkLlxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgICB2YXIgc3RhdHMgPSBvcHRpb25zID8gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIG9wdGlvbnMpXG4gICAgICAgIDogb3JpZy5jYWxsKGZzLCB0YXJnZXQpXG4gICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgaWYgKHN0YXRzLnVpZCA8IDApIHN0YXRzLnVpZCArPSAweDEwMDAwMDAwMFxuICAgICAgICBpZiAoc3RhdHMuZ2lkIDwgMCkgc3RhdHMuZ2lkICs9IDB4MTAwMDAwMDAwXG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdHM7XG4gICAgfVxuICB9XG5cbiAgLy8gRU5PU1lTIG1lYW5zIHRoYXQgdGhlIGZzIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgb3AuIEp1c3QgaWdub3JlXG4gIC8vIHRoYXQsIGJlY2F1c2UgaXQgZG9lc24ndCBtYXR0ZXIuXG4gIC8vXG4gIC8vIGlmIHRoZXJlJ3Mgbm8gZ2V0dWlkLCBvciBpZiBnZXR1aWQoKSBpcyBzb21ldGhpbmcgb3RoZXJcbiAgLy8gdGhhbiAwLCBhbmQgdGhlIGVycm9yIGlzIEVJTlZBTCBvciBFUEVSTSwgdGhlbiBqdXN0IGlnbm9yZVxuICAvLyBpdC5cbiAgLy9cbiAgLy8gVGhpcyBzcGVjaWZpYyBjYXNlIGlzIGEgc2lsZW50IGZhaWx1cmUgaW4gY3AsIGluc3RhbGwsIHRhcixcbiAgLy8gYW5kIG1vc3Qgb3RoZXIgdW5peCB0b29scyB0aGF0IG1hbmFnZSBwZXJtaXNzaW9ucy5cbiAgLy9cbiAgLy8gV2hlbiBydW5uaW5nIGFzIHJvb3QsIG9yIGlmIG90aGVyIHR5cGVzIG9mIGVycm9ycyBhcmVcbiAgLy8gZW5jb3VudGVyZWQsIHRoZW4gaXQncyBzdHJpY3QuXG4gIGZ1bmN0aW9uIGNob3duRXJPayAoZXIpIHtcbiAgICBpZiAoIWVyKVxuICAgICAgcmV0dXJuIHRydWVcblxuICAgIGlmIChlci5jb2RlID09PSBcIkVOT1NZU1wiKVxuICAgICAgcmV0dXJuIHRydWVcblxuICAgIHZhciBub25yb290ID0gIXByb2Nlc3MuZ2V0dWlkIHx8IHByb2Nlc3MuZ2V0dWlkKCkgIT09IDBcbiAgICBpZiAobm9ucm9vdCkge1xuICAgICAgaWYgKGVyLmNvZGUgPT09IFwiRUlOVkFMXCIgfHwgZXIuY29kZSA9PT0gXCJFUEVSTVwiKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iLCAidmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxlZ2FjeVxuXG5mdW5jdGlvbiBsZWdhY3kgKGZzKSB7XG4gIHJldHVybiB7XG4gICAgUmVhZFN0cmVhbTogUmVhZFN0cmVhbSxcbiAgICBXcml0ZVN0cmVhbTogV3JpdGVTdHJlYW1cbiAgfVxuXG4gIGZ1bmN0aW9uIFJlYWRTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVhZFN0cmVhbSkpIHJldHVybiBuZXcgUmVhZFN0cmVhbShwYXRoLCBvcHRpb25zKTtcblxuICAgIFN0cmVhbS5jYWxsKHRoaXMpO1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLmZkID0gbnVsbDtcbiAgICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5mbGFncyA9ICdyJztcbiAgICB0aGlzLm1vZGUgPSA0Mzg7IC8qPTA2NjYqL1xuICAgIHRoaXMuYnVmZmVyU2l6ZSA9IDY0ICogMTAyNDtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLy8gTWl4aW4gb3B0aW9ucyBpbnRvIHRoaXNcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgICB0aGlzW2tleV0gPSBvcHRpb25zW2tleV07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5jb2RpbmcpIHRoaXMuc2V0RW5jb2RpbmcodGhpcy5lbmNvZGluZyk7XG5cbiAgICBpZiAodGhpcy5zdGFydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoJ251bWJlcicgIT09IHR5cGVvZiB0aGlzLnN0YXJ0KSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcignc3RhcnQgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5lbmQgPSBJbmZpbml0eTtcbiAgICAgIH0gZWxzZSBpZiAoJ251bWJlcicgIT09IHR5cGVvZiB0aGlzLmVuZCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ2VuZCBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN0YXJ0ID4gdGhpcy5lbmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGFydCBtdXN0IGJlIDw9IGVuZCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmQgIT09IG51bGwpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYuX3JlYWQoKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZzLm9wZW4odGhpcy5wYXRoLCB0aGlzLmZsYWdzLCB0aGlzLm1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICBzZWxmLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2VsZi5mZCA9IGZkO1xuICAgICAgc2VsZi5lbWl0KCdvcGVuJywgZmQpO1xuICAgICAgc2VsZi5fcmVhZCgpO1xuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBXcml0ZVN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBXcml0ZVN0cmVhbSkpIHJldHVybiBuZXcgV3JpdGVTdHJlYW0ocGF0aCwgb3B0aW9ucyk7XG5cbiAgICBTdHJlYW0uY2FsbCh0aGlzKTtcblxuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy5mZCA9IG51bGw7XG4gICAgdGhpcy53cml0YWJsZSA9IHRydWU7XG5cbiAgICB0aGlzLmZsYWdzID0gJ3cnO1xuICAgIHRoaXMuZW5jb2RpbmcgPSAnYmluYXJ5JztcbiAgICB0aGlzLm1vZGUgPSA0Mzg7IC8qPTA2NjYqL1xuICAgIHRoaXMuYnl0ZXNXcml0dGVuID0gMDtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLy8gTWl4aW4gb3B0aW9ucyBpbnRvIHRoaXNcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgICB0aGlzW2tleV0gPSBvcHRpb25zW2tleV07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCdudW1iZXInICE9PSB0eXBlb2YgdGhpcy5zdGFydCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ3N0YXJ0IG11c3QgYmUgYSBOdW1iZXInKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnN0YXJ0IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXJ0IG11c3QgYmUgPj0gemVybycpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQ7XG4gICAgfVxuXG4gICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gICAgdGhpcy5fcXVldWUgPSBbXTtcblxuICAgIGlmICh0aGlzLmZkID09PSBudWxsKSB7XG4gICAgICB0aGlzLl9vcGVuID0gZnMub3BlbjtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goW3RoaXMuX29wZW4sIHRoaXMucGF0aCwgdGhpcy5mbGFncywgdGhpcy5tb2RlLCB1bmRlZmluZWRdKTtcbiAgICAgIHRoaXMuZmx1c2goKTtcbiAgICB9XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVxuXG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gb2JqLl9fcHJvdG9fX1xufVxuXG5mdW5jdGlvbiBjbG9uZSAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpXG4gICAgcmV0dXJuIG9ialxuXG4gIGlmIChvYmogaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgdmFyIGNvcHkgPSB7IF9fcHJvdG9fXzogZ2V0UHJvdG90eXBlT2Yob2JqKSB9XG4gIGVsc2VcbiAgICB2YXIgY29weSA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb3B5LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpKVxuICB9KVxuXG4gIHJldHVybiBjb3B5XG59XG4iLCAidmFyIGZzID0gcmVxdWlyZSgnZnMnKVxudmFyIHBvbHlmaWxscyA9IHJlcXVpcmUoJy4vcG9seWZpbGxzLmpzJylcbnZhciBsZWdhY3kgPSByZXF1aXJlKCcuL2xlZ2FjeS1zdHJlYW1zLmpzJylcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4vY2xvbmUuanMnKVxuXG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIG5vZGUgMC54IHBvbHlmaWxsICovXG52YXIgZ3JhY2VmdWxRdWV1ZVxudmFyIHByZXZpb3VzU3ltYm9sXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlIC0gbm9kZSAwLnggcG9seWZpbGwgKi9cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuZm9yID09PSAnZnVuY3Rpb24nKSB7XG4gIGdyYWNlZnVsUXVldWUgPSBTeW1ib2wuZm9yKCdncmFjZWZ1bC1mcy5xdWV1ZScpXG4gIC8vIFRoaXMgaXMgdXNlZCBpbiB0ZXN0aW5nIGJ5IGZ1dHVyZSB2ZXJzaW9uc1xuICBwcmV2aW91c1N5bWJvbCA9IFN5bWJvbC5mb3IoJ2dyYWNlZnVsLWZzLnByZXZpb3VzJylcbn0gZWxzZSB7XG4gIGdyYWNlZnVsUXVldWUgPSAnX19fZ3JhY2VmdWwtZnMucXVldWUnXG4gIHByZXZpb3VzU3ltYm9sID0gJ19fX2dyYWNlZnVsLWZzLnByZXZpb3VzJ1xufVxuXG5mdW5jdGlvbiBub29wICgpIHt9XG5cbmZ1bmN0aW9uIHB1Ymxpc2hRdWV1ZShjb250ZXh0LCBxdWV1ZSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udGV4dCwgZ3JhY2VmdWxRdWV1ZSwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcXVldWVcbiAgICB9XG4gIH0pXG59XG5cbnZhciBkZWJ1ZyA9IG5vb3BcbmlmICh1dGlsLmRlYnVnbG9nKVxuICBkZWJ1ZyA9IHV0aWwuZGVidWdsb2coJ2dmczQnKVxuZWxzZSBpZiAoL1xcYmdmczRcXGIvaS50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcgfHwgJycpKVxuICBkZWJ1ZyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBtID0gdXRpbC5mb3JtYXQuYXBwbHkodXRpbCwgYXJndW1lbnRzKVxuICAgIG0gPSAnR0ZTNDogJyArIG0uc3BsaXQoL1xcbi8pLmpvaW4oJ1xcbkdGUzQ6ICcpXG4gICAgY29uc29sZS5lcnJvcihtKVxuICB9XG5cbi8vIE9uY2UgdGltZSBpbml0aWFsaXphdGlvblxuaWYgKCFmc1tncmFjZWZ1bFF1ZXVlXSkge1xuICAvLyBUaGlzIHF1ZXVlIGNhbiBiZSBzaGFyZWQgYnkgbXVsdGlwbGUgbG9hZGVkIGluc3RhbmNlc1xuICB2YXIgcXVldWUgPSBnbG9iYWxbZ3JhY2VmdWxRdWV1ZV0gfHwgW11cbiAgcHVibGlzaFF1ZXVlKGZzLCBxdWV1ZSlcblxuICAvLyBQYXRjaCBmcy5jbG9zZS9jbG9zZVN5bmMgdG8gc2hhcmVkIHF1ZXVlIHZlcnNpb24sIGJlY2F1c2Ugd2UgbmVlZFxuICAvLyB0byByZXRyeSgpIHdoZW5ldmVyIGEgY2xvc2UgaGFwcGVucyAqYW55d2hlcmUqIGluIHRoZSBwcm9ncmFtLlxuICAvLyBUaGlzIGlzIGVzc2VudGlhbCB3aGVuIG11bHRpcGxlIGdyYWNlZnVsLWZzIGluc3RhbmNlcyBhcmVcbiAgLy8gaW4gcGxheSBhdCB0aGUgc2FtZSB0aW1lLlxuICBmcy5jbG9zZSA9IChmdW5jdGlvbiAoZnMkY2xvc2UpIHtcbiAgICBmdW5jdGlvbiBjbG9zZSAoZmQsIGNiKSB7XG4gICAgICByZXR1cm4gZnMkY2xvc2UuY2FsbChmcywgZmQsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBncmFjZWZ1bC1mcyBzaGFyZWQgcXVldWVcbiAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICByZXNldFF1ZXVlKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2xvc2UsIHByZXZpb3VzU3ltYm9sLCB7XG4gICAgICB2YWx1ZTogZnMkY2xvc2VcbiAgICB9KVxuICAgIHJldHVybiBjbG9zZVxuICB9KShmcy5jbG9zZSlcblxuICBmcy5jbG9zZVN5bmMgPSAoZnVuY3Rpb24gKGZzJGNsb3NlU3luYykge1xuICAgIGZ1bmN0aW9uIGNsb3NlU3luYyAoZmQpIHtcbiAgICAgIC8vIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgZ3JhY2VmdWwtZnMgc2hhcmVkIHF1ZXVlXG4gICAgICBmcyRjbG9zZVN5bmMuYXBwbHkoZnMsIGFyZ3VtZW50cylcbiAgICAgIHJlc2V0UXVldWUoKVxuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbG9zZVN5bmMsIHByZXZpb3VzU3ltYm9sLCB7XG4gICAgICB2YWx1ZTogZnMkY2xvc2VTeW5jXG4gICAgfSlcbiAgICByZXR1cm4gY2xvc2VTeW5jXG4gIH0pKGZzLmNsb3NlU3luYylcblxuICBpZiAoL1xcYmdmczRcXGIvaS50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcgfHwgJycpKSB7XG4gICAgcHJvY2Vzcy5vbignZXhpdCcsIGZ1bmN0aW9uKCkge1xuICAgICAgZGVidWcoZnNbZ3JhY2VmdWxRdWV1ZV0pXG4gICAgICByZXF1aXJlKCdhc3NlcnQnKS5lcXVhbChmc1tncmFjZWZ1bFF1ZXVlXS5sZW5ndGgsIDApXG4gICAgfSlcbiAgfVxufVxuXG5pZiAoIWdsb2JhbFtncmFjZWZ1bFF1ZXVlXSkge1xuICBwdWJsaXNoUXVldWUoZ2xvYmFsLCBmc1tncmFjZWZ1bFF1ZXVlXSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2goY2xvbmUoZnMpKVxuaWYgKHByb2Nlc3MuZW52LlRFU1RfR1JBQ0VGVUxfRlNfR0xPQkFMX1BBVENIICYmICFmcy5fX3BhdGNoZWQpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHBhdGNoKGZzKVxuICAgIGZzLl9fcGF0Y2hlZCA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIHBhdGNoIChmcykge1xuICAvLyBFdmVyeXRoaW5nIHRoYXQgcmVmZXJlbmNlcyB0aGUgb3BlbigpIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGluIGhlcmVcbiAgcG9seWZpbGxzKGZzKVxuICBmcy5ncmFjZWZ1bGlmeSA9IHBhdGNoXG5cbiAgZnMuY3JlYXRlUmVhZFN0cmVhbSA9IGNyZWF0ZVJlYWRTdHJlYW1cbiAgZnMuY3JlYXRlV3JpdGVTdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbVxuICB2YXIgZnMkcmVhZEZpbGUgPSBmcy5yZWFkRmlsZVxuICBmcy5yZWFkRmlsZSA9IHJlYWRGaWxlXG4gIGZ1bmN0aW9uIHJlYWRGaWxlIChwYXRoLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHJldHVybiBnbyRyZWFkRmlsZShwYXRoLCBvcHRpb25zLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJHJlYWRGaWxlIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkcmVhZEZpbGUocGF0aCwgb3B0aW9ucywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRyZWFkRmlsZSwgW3BhdGgsIG9wdGlvbnMsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJHdyaXRlRmlsZSA9IGZzLndyaXRlRmlsZVxuICBmcy53cml0ZUZpbGUgPSB3cml0ZUZpbGVcbiAgZnVuY3Rpb24gd3JpdGVGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHJldHVybiBnbyR3cml0ZUZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyR3cml0ZUZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyR3cml0ZUZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyR3cml0ZUZpbGUsIFtwYXRoLCBkYXRhLCBvcHRpb25zLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcyRhcHBlbmRGaWxlID0gZnMuYXBwZW5kRmlsZVxuICBpZiAoZnMkYXBwZW5kRmlsZSlcbiAgICBmcy5hcHBlbmRGaWxlID0gYXBwZW5kRmlsZVxuICBmdW5jdGlvbiBhcHBlbmRGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHJldHVybiBnbyRhcHBlbmRGaWxlKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kYXBwZW5kRmlsZSAocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJGFwcGVuZEZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRhcHBlbmRGaWxlLCBbcGF0aCwgZGF0YSwgb3B0aW9ucywgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgZnMkY29weUZpbGUgPSBmcy5jb3B5RmlsZVxuICBpZiAoZnMkY29weUZpbGUpXG4gICAgZnMuY29weUZpbGUgPSBjb3B5RmlsZVxuICBmdW5jdGlvbiBjb3B5RmlsZSAoc3JjLCBkZXN0LCBmbGFncywgY2IpIHtcbiAgICBpZiAodHlwZW9mIGZsYWdzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYiA9IGZsYWdzXG4gICAgICBmbGFncyA9IDBcbiAgICB9XG4gICAgcmV0dXJuIGdvJGNvcHlGaWxlKHNyYywgZGVzdCwgZmxhZ3MsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kY29weUZpbGUgKHNyYywgZGVzdCwgZmxhZ3MsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyRjb3B5RmlsZShzcmMsIGRlc3QsIGZsYWdzLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJGNvcHlGaWxlLCBbc3JjLCBkZXN0LCBmbGFncywgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgZnMkcmVhZGRpciA9IGZzLnJlYWRkaXJcbiAgZnMucmVhZGRpciA9IHJlYWRkaXJcbiAgdmFyIG5vUmVhZGRpck9wdGlvblZlcnNpb25zID0gL152WzAtNV1cXC4vXG4gIGZ1bmN0aW9uIHJlYWRkaXIgKHBhdGgsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgdmFyIGdvJHJlYWRkaXIgPSBub1JlYWRkaXJPcHRpb25WZXJzaW9ucy50ZXN0KHByb2Nlc3MudmVyc2lvbilcbiAgICAgID8gZnVuY3Rpb24gZ28kcmVhZGRpciAocGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgICByZXR1cm4gZnMkcmVhZGRpcihwYXRoLCBmcyRyZWFkZGlyQ2FsbGJhY2soXG4gICAgICAgICAgcGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZVxuICAgICAgICApKVxuICAgICAgfVxuICAgICAgOiBmdW5jdGlvbiBnbyRyZWFkZGlyIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICAgIHJldHVybiBmcyRyZWFkZGlyKHBhdGgsIG9wdGlvbnMsIGZzJHJlYWRkaXJDYWxsYmFjayhcbiAgICAgICAgICBwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lXG4gICAgICAgICkpXG4gICAgICB9XG5cbiAgICByZXR1cm4gZ28kcmVhZGRpcihwYXRoLCBvcHRpb25zLCBjYilcblxuICAgIGZ1bmN0aW9uIGZzJHJlYWRkaXJDYWxsYmFjayAocGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIsIGZpbGVzKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW1xuICAgICAgICAgICAgZ28kcmVhZGRpcixcbiAgICAgICAgICAgIFtwYXRoLCBvcHRpb25zLCBjYl0sXG4gICAgICAgICAgICBlcnIsXG4gICAgICAgICAgICBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIERhdGUubm93KClcbiAgICAgICAgICBdKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAoZmlsZXMgJiYgZmlsZXMuc29ydClcbiAgICAgICAgICAgIGZpbGVzLnNvcnQoKVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmNhbGwodGhpcywgZXJyLCBmaWxlcylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9jZXNzLnZlcnNpb24uc3Vic3RyKDAsIDQpID09PSAndjAuOCcpIHtcbiAgICB2YXIgbGVnU3RyZWFtcyA9IGxlZ2FjeShmcylcbiAgICBSZWFkU3RyZWFtID0gbGVnU3RyZWFtcy5SZWFkU3RyZWFtXG4gICAgV3JpdGVTdHJlYW0gPSBsZWdTdHJlYW1zLldyaXRlU3RyZWFtXG4gIH1cblxuICB2YXIgZnMkUmVhZFN0cmVhbSA9IGZzLlJlYWRTdHJlYW1cbiAgaWYgKGZzJFJlYWRTdHJlYW0pIHtcbiAgICBSZWFkU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZnMkUmVhZFN0cmVhbS5wcm90b3R5cGUpXG4gICAgUmVhZFN0cmVhbS5wcm90b3R5cGUub3BlbiA9IFJlYWRTdHJlYW0kb3BlblxuICB9XG5cbiAgdmFyIGZzJFdyaXRlU3RyZWFtID0gZnMuV3JpdGVTdHJlYW1cbiAgaWYgKGZzJFdyaXRlU3RyZWFtKSB7XG4gICAgV3JpdGVTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShmcyRXcml0ZVN0cmVhbS5wcm90b3R5cGUpXG4gICAgV3JpdGVTdHJlYW0ucHJvdG90eXBlLm9wZW4gPSBXcml0ZVN0cmVhbSRvcGVuXG4gIH1cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdSZWFkU3RyZWFtJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFJlYWRTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgUmVhZFN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZzLCAnV3JpdGVTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gV3JpdGVTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgV3JpdGVTdHJlYW0gPSB2YWxcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG5cbiAgLy8gbGVnYWN5IG5hbWVzXG4gIHZhciBGaWxlUmVhZFN0cmVhbSA9IFJlYWRTdHJlYW1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZzLCAnRmlsZVJlYWRTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gRmlsZVJlYWRTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgRmlsZVJlYWRTdHJlYW0gPSB2YWxcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG4gIHZhciBGaWxlV3JpdGVTdHJlYW0gPSBXcml0ZVN0cmVhbVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdGaWxlV3JpdGVTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gRmlsZVdyaXRlU3RyZWFtXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIEZpbGVXcml0ZVN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcblxuICBmdW5jdGlvbiBSZWFkU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBSZWFkU3RyZWFtKVxuICAgICAgcmV0dXJuIGZzJFJlYWRTdHJlYW0uYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdGhpc1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBSZWFkU3RyZWFtLmFwcGx5KE9iamVjdC5jcmVhdGUoUmVhZFN0cmVhbS5wcm90b3R5cGUpLCBhcmd1bWVudHMpXG4gIH1cblxuICBmdW5jdGlvbiBSZWFkU3RyZWFtJG9wZW4gKCkge1xuICAgIHZhciB0aGF0ID0gdGhpc1xuICAgIG9wZW4odGhhdC5wYXRoLCB0aGF0LmZsYWdzLCB0aGF0Lm1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGF0LmF1dG9DbG9zZSlcbiAgICAgICAgICB0aGF0LmRlc3Ryb3koKVxuXG4gICAgICAgIHRoYXQuZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGF0LmZkID0gZmRcbiAgICAgICAgdGhhdC5lbWl0KCdvcGVuJywgZmQpXG4gICAgICAgIHRoYXQucmVhZCgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIFdyaXRlU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBXcml0ZVN0cmVhbSlcbiAgICAgIHJldHVybiBmcyRXcml0ZVN0cmVhbS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0aGlzXG4gICAgZWxzZVxuICAgICAgcmV0dXJuIFdyaXRlU3RyZWFtLmFwcGx5KE9iamVjdC5jcmVhdGUoV3JpdGVTdHJlYW0ucHJvdG90eXBlKSwgYXJndW1lbnRzKVxuICB9XG5cbiAgZnVuY3Rpb24gV3JpdGVTdHJlYW0kb3BlbiAoKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzXG4gICAgb3Blbih0aGF0LnBhdGgsIHRoYXQuZmxhZ3MsIHRoYXQubW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgdGhhdC5kZXN0cm95KClcbiAgICAgICAgdGhhdC5lbWl0KCdlcnJvcicsIGVycilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoYXQuZmQgPSBmZFxuICAgICAgICB0aGF0LmVtaXQoJ29wZW4nLCBmZClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUmVhZFN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgZnMuUmVhZFN0cmVhbShwYXRoLCBvcHRpb25zKVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlV3JpdGVTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IGZzLldyaXRlU3RyZWFtKHBhdGgsIG9wdGlvbnMpXG4gIH1cblxuICB2YXIgZnMkb3BlbiA9IGZzLm9wZW5cbiAgZnMub3BlbiA9IG9wZW5cbiAgZnVuY3Rpb24gb3BlbiAocGF0aCwgZmxhZ3MsIG1vZGUsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBtb2RlID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBtb2RlLCBtb2RlID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJG9wZW4ocGF0aCwgZmxhZ3MsIG1vZGUsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kb3BlbiAocGF0aCwgZmxhZ3MsIG1vZGUsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyRvcGVuKHBhdGgsIGZsYWdzLCBtb2RlLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRvcGVuLCBbcGF0aCwgZmxhZ3MsIG1vZGUsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZzXG59XG5cbmZ1bmN0aW9uIGVucXVldWUgKGVsZW0pIHtcbiAgZGVidWcoJ0VOUVVFVUUnLCBlbGVtWzBdLm5hbWUsIGVsZW1bMV0pXG4gIGZzW2dyYWNlZnVsUXVldWVdLnB1c2goZWxlbSlcbiAgcmV0cnkoKVxufVxuXG4vLyBrZWVwIHRyYWNrIG9mIHRoZSB0aW1lb3V0IGJldHdlZW4gcmV0cnkoKSBjYWxsc1xudmFyIHJldHJ5VGltZXJcblxuLy8gcmVzZXQgdGhlIHN0YXJ0VGltZSBhbmQgbGFzdFRpbWUgdG8gbm93XG4vLyB0aGlzIHJlc2V0cyB0aGUgc3RhcnQgb2YgdGhlIDYwIHNlY29uZCBvdmVyYWxsIHRpbWVvdXQgYXMgd2VsbCBhcyB0aGVcbi8vIGRlbGF5IGJldHdlZW4gYXR0ZW1wdHMgc28gdGhhdCB3ZSdsbCByZXRyeSB0aGVzZSBqb2JzIHNvb25lclxuZnVuY3Rpb24gcmVzZXRRdWV1ZSAoKSB7XG4gIHZhciBub3cgPSBEYXRlLm5vdygpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZnNbZ3JhY2VmdWxRdWV1ZV0ubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBlbnRyaWVzIHRoYXQgYXJlIG9ubHkgYSBsZW5ndGggb2YgMiBhcmUgZnJvbSBhbiBvbGRlciB2ZXJzaW9uLCBkb24ndFxuICAgIC8vIGJvdGhlciBtb2RpZnlpbmcgdGhvc2Ugc2luY2UgdGhleSdsbCBiZSByZXRyaWVkIGFueXdheS5cbiAgICBpZiAoZnNbZ3JhY2VmdWxRdWV1ZV1baV0ubGVuZ3RoID4gMikge1xuICAgICAgZnNbZ3JhY2VmdWxRdWV1ZV1baV1bM10gPSBub3cgLy8gc3RhcnRUaW1lXG4gICAgICBmc1tncmFjZWZ1bFF1ZXVlXVtpXVs0XSA9IG5vdyAvLyBsYXN0VGltZVxuICAgIH1cbiAgfVxuICAvLyBjYWxsIHJldHJ5IHRvIG1ha2Ugc3VyZSB3ZSdyZSBhY3RpdmVseSBwcm9jZXNzaW5nIHRoZSBxdWV1ZVxuICByZXRyeSgpXG59XG5cbmZ1bmN0aW9uIHJldHJ5ICgpIHtcbiAgLy8gY2xlYXIgdGhlIHRpbWVyIGFuZCByZW1vdmUgaXQgdG8gaGVscCBwcmV2ZW50IHVuaW50ZW5kZWQgY29uY3VycmVuY3lcbiAgY2xlYXJUaW1lb3V0KHJldHJ5VGltZXIpXG4gIHJldHJ5VGltZXIgPSB1bmRlZmluZWRcblxuICBpZiAoZnNbZ3JhY2VmdWxRdWV1ZV0ubGVuZ3RoID09PSAwKVxuICAgIHJldHVyblxuXG4gIHZhciBlbGVtID0gZnNbZ3JhY2VmdWxRdWV1ZV0uc2hpZnQoKVxuICB2YXIgZm4gPSBlbGVtWzBdXG4gIHZhciBhcmdzID0gZWxlbVsxXVxuICAvLyB0aGVzZSBpdGVtcyBtYXkgYmUgdW5zZXQgaWYgdGhleSB3ZXJlIGFkZGVkIGJ5IGFuIG9sZGVyIGdyYWNlZnVsLWZzXG4gIHZhciBlcnIgPSBlbGVtWzJdXG4gIHZhciBzdGFydFRpbWUgPSBlbGVtWzNdXG4gIHZhciBsYXN0VGltZSA9IGVsZW1bNF1cblxuICAvLyBpZiB3ZSBkb24ndCBoYXZlIGEgc3RhcnRUaW1lIHdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgaWYgd2UndmUgd2FpdGVkXG4gIC8vIGxvbmcgZW5vdWdoLCBzbyBnbyBhaGVhZCBhbmQgcmV0cnkgdGhpcyBpdGVtIG5vd1xuICBpZiAoc3RhcnRUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICBkZWJ1ZygnUkVUUlknLCBmbi5uYW1lLCBhcmdzKVxuICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpXG4gIH0gZWxzZSBpZiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA+PSA2MDAwMCkge1xuICAgIC8vIGl0J3MgYmVlbiBtb3JlIHRoYW4gNjAgc2Vjb25kcyB0b3RhbCwgYmFpbCBub3dcbiAgICBkZWJ1ZygnVElNRU9VVCcsIGZuLm5hbWUsIGFyZ3MpXG4gICAgdmFyIGNiID0gYXJncy5wb3AoKVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYi5jYWxsKG51bGwsIGVycilcbiAgfSBlbHNlIHtcbiAgICAvLyB0aGUgYW1vdW50IG9mIHRpbWUgYmV0d2VlbiB0aGUgbGFzdCBhdHRlbXB0IGFuZCByaWdodCBub3dcbiAgICB2YXIgc2luY2VBdHRlbXB0ID0gRGF0ZS5ub3coKSAtIGxhc3RUaW1lXG4gICAgLy8gdGhlIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gd2hlbiB3ZSBmaXJzdCB0cmllZCwgYW5kIHdoZW4gd2UgbGFzdCB0cmllZFxuICAgIC8vIHJvdW5kZWQgdXAgdG8gYXQgbGVhc3QgMVxuICAgIHZhciBzaW5jZVN0YXJ0ID0gTWF0aC5tYXgobGFzdFRpbWUgLSBzdGFydFRpbWUsIDEpXG4gICAgLy8gYmFja29mZi4gd2FpdCBsb25nZXIgdGhhbiB0aGUgdG90YWwgdGltZSB3ZSd2ZSBiZWVuIHJldHJ5aW5nLCBidXQgb25seVxuICAgIC8vIHVwIHRvIGEgbWF4aW11bSBvZiAxMDBtc1xuICAgIHZhciBkZXNpcmVkRGVsYXkgPSBNYXRoLm1pbihzaW5jZVN0YXJ0ICogMS4yLCAxMDApXG4gICAgLy8gaXQncyBiZWVuIGxvbmcgZW5vdWdoIHNpbmNlIHRoZSBsYXN0IHJldHJ5LCBkbyBpdCBhZ2FpblxuICAgIGlmIChzaW5jZUF0dGVtcHQgPj0gZGVzaXJlZERlbGF5KSB7XG4gICAgICBkZWJ1ZygnUkVUUlknLCBmbi5uYW1lLCBhcmdzKVxuICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW3N0YXJ0VGltZV0pKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiB3ZSBjYW4ndCBkbyB0aGlzIGpvYiB5ZXQsIHB1c2ggaXQgdG8gdGhlIGVuZCBvZiB0aGUgcXVldWVcbiAgICAgIC8vIGFuZCBsZXQgdGhlIG5leHQgaXRlcmF0aW9uIGNoZWNrIGFnYWluXG4gICAgICBmc1tncmFjZWZ1bFF1ZXVlXS5wdXNoKGVsZW0pXG4gICAgfVxuICB9XG5cbiAgLy8gc2NoZWR1bGUgb3VyIG5leHQgcnVuIGlmIG9uZSBpc24ndCBhbHJlYWR5IHNjaGVkdWxlZFxuICBpZiAocmV0cnlUaW1lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0cnlUaW1lciA9IHNldFRpbWVvdXQocmV0cnksIDApXG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcbi8vIFRoaXMgaXMgYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ub3JtYWxpemUvbXpcbi8vIENvcHlyaWdodCAoYykgMjAxNC0yMDE2IEpvbmF0aGFuIE9uZyBtZUBqb25nbGViZXJyeS5jb20gYW5kIENvbnRyaWJ1dG9yc1xuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5cbmNvbnN0IGFwaSA9IFtcbiAgJ2FjY2VzcycsXG4gICdhcHBlbmRGaWxlJyxcbiAgJ2NobW9kJyxcbiAgJ2Nob3duJyxcbiAgJ2Nsb3NlJyxcbiAgJ2NvcHlGaWxlJyxcbiAgJ2ZjaG1vZCcsXG4gICdmY2hvd24nLFxuICAnZmRhdGFzeW5jJyxcbiAgJ2ZzdGF0JyxcbiAgJ2ZzeW5jJyxcbiAgJ2Z0cnVuY2F0ZScsXG4gICdmdXRpbWVzJyxcbiAgJ2xjaG1vZCcsXG4gICdsY2hvd24nLFxuICAnbGluaycsXG4gICdsc3RhdCcsXG4gICdta2RpcicsXG4gICdta2R0ZW1wJyxcbiAgJ29wZW4nLFxuICAnb3BlbmRpcicsXG4gICdyZWFkZGlyJyxcbiAgJ3JlYWRGaWxlJyxcbiAgJ3JlYWRsaW5rJyxcbiAgJ3JlYWxwYXRoJyxcbiAgJ3JlbmFtZScsXG4gICdybScsXG4gICdybWRpcicsXG4gICdzdGF0JyxcbiAgJ3N5bWxpbmsnLFxuICAndHJ1bmNhdGUnLFxuICAndW5saW5rJyxcbiAgJ3V0aW1lcycsXG4gICd3cml0ZUZpbGUnXG5dLmZpbHRlcihrZXkgPT4ge1xuICAvLyBTb21lIGNvbW1hbmRzIGFyZSBub3QgYXZhaWxhYmxlIG9uIHNvbWUgc3lzdGVtcy4gRXg6XG4gIC8vIGZzLm9wZW5kaXIgd2FzIGFkZGVkIGluIE5vZGUuanMgdjEyLjEyLjBcbiAgLy8gZnMucm0gd2FzIGFkZGVkIGluIE5vZGUuanMgdjE0LjE0LjBcbiAgLy8gZnMubGNob3duIGlzIG5vdCBhdmFpbGFibGUgb24gYXQgbGVhc3Qgc29tZSBMaW51eFxuICByZXR1cm4gdHlwZW9mIGZzW2tleV0gPT09ICdmdW5jdGlvbidcbn0pXG5cbi8vIEV4cG9ydCBhbGwga2V5czpcbk9iamVjdC5rZXlzKGZzKS5mb3JFYWNoKGtleSA9PiB7XG4gIGlmIChrZXkgPT09ICdwcm9taXNlcycpIHtcbiAgICAvLyBmcy5wcm9taXNlcyBpcyBhIGdldHRlciBwcm9wZXJ0eSB0aGF0IHRyaWdnZXJzIEV4cGVyaW1lbnRhbFdhcm5pbmdcbiAgICAvLyBEb24ndCByZS1leHBvcnQgaXQgaGVyZSwgdGhlIGdldHRlciBpcyBkZWZpbmVkIGluIFwibGliL2luZGV4LmpzXCJcbiAgICByZXR1cm5cbiAgfVxuICBleHBvcnRzW2tleV0gPSBmc1trZXldXG59KVxuXG4vLyBVbml2ZXJzYWxpZnkgYXN5bmMgbWV0aG9kczpcbmFwaS5mb3JFYWNoKG1ldGhvZCA9PiB7XG4gIGV4cG9ydHNbbWV0aG9kXSA9IHUoZnNbbWV0aG9kXSlcbn0pXG5cbi8vIFdlIGRpZmZlciBmcm9tIG16L2ZzIGluIHRoYXQgd2Ugc3RpbGwgc2hpcCB0aGUgb2xkLCBicm9rZW4sIGZzLmV4aXN0cygpXG4vLyBzaW5jZSB3ZSBhcmUgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciB0aGUgbmF0aXZlIG1vZHVsZVxuZXhwb3J0cy5leGlzdHMgPSBmdW5jdGlvbiAoZmlsZW5hbWUsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZnMuZXhpc3RzKGZpbGVuYW1lLCBjYWxsYmFjaylcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgcmV0dXJuIGZzLmV4aXN0cyhmaWxlbmFtZSwgcmVzb2x2ZSlcbiAgfSlcbn1cblxuLy8gZnMucmVhZCgpLCBmcy53cml0ZSgpLCAmIGZzLndyaXRldigpIG5lZWQgc3BlY2lhbCB0cmVhdG1lbnQgZHVlIHRvIG11bHRpcGxlIGNhbGxiYWNrIGFyZ3NcblxuZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmcy5yZWFkKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spXG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBmcy5yZWFkKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgKGVyciwgYnl0ZXNSZWFkLCBidWZmZXIpID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKVxuICAgICAgcmVzb2x2ZSh7IGJ5dGVzUmVhZCwgYnVmZmVyIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuLy8gRnVuY3Rpb24gc2lnbmF0dXJlIGNhbiBiZVxuLy8gZnMud3JpdGUoZmQsIGJ1ZmZlclssIG9mZnNldFssIGxlbmd0aFssIHBvc2l0aW9uXV1dLCBjYWxsYmFjaylcbi8vIE9SXG4vLyBmcy53cml0ZShmZCwgc3RyaW5nWywgcG9zaXRpb25bLCBlbmNvZGluZ11dLCBjYWxsYmFjaylcbi8vIFdlIG5lZWQgdG8gaGFuZGxlIGJvdGggY2FzZXMsIHNvIHdlIHVzZSAuLi5hcmdzXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGZkLCBidWZmZXIsIC4uLmFyZ3MpIHtcbiAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZnMud3JpdGUoZmQsIGJ1ZmZlciwgLi4uYXJncylcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZnMud3JpdGUoZmQsIGJ1ZmZlciwgLi4uYXJncywgKGVyciwgYnl0ZXNXcml0dGVuLCBidWZmZXIpID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKVxuICAgICAgcmVzb2x2ZSh7IGJ5dGVzV3JpdHRlbiwgYnVmZmVyIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuLy8gZnMud3JpdGV2IG9ubHkgYXZhaWxhYmxlIGluIE5vZGUgdjEyLjkuMCtcbmlmICh0eXBlb2YgZnMud3JpdGV2ID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIEZ1bmN0aW9uIHNpZ25hdHVyZSBpc1xuICAvLyBzLndyaXRldihmZCwgYnVmZmVyc1ssIHBvc2l0aW9uXSwgY2FsbGJhY2spXG4gIC8vIFdlIG5lZWQgdG8gaGFuZGxlIHRoZSBvcHRpb25hbCBhcmcsIHNvIHdlIHVzZSAuLi5hcmdzXG4gIGV4cG9ydHMud3JpdGV2ID0gZnVuY3Rpb24gKGZkLCBidWZmZXJzLCAuLi5hcmdzKSB7XG4gICAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBmcy53cml0ZXYoZmQsIGJ1ZmZlcnMsIC4uLmFyZ3MpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGZzLndyaXRldihmZCwgYnVmZmVycywgLi4uYXJncywgKGVyciwgYnl0ZXNXcml0dGVuLCBidWZmZXJzKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKVxuICAgICAgICByZXNvbHZlKHsgYnl0ZXNXcml0dGVuLCBidWZmZXJzIH0pXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cblxuLy8gZnMucmVhbHBhdGgubmF0aXZlIG9ubHkgYXZhaWxhYmxlIGluIE5vZGUgdjkuMitcbmlmICh0eXBlb2YgZnMucmVhbHBhdGgubmF0aXZlID09PSAnZnVuY3Rpb24nKSB7XG4gIGV4cG9ydHMucmVhbHBhdGgubmF0aXZlID0gdShmcy5yZWFscGF0aC5uYXRpdmUpXG59XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByID0+IHtcbiAgY29uc3QgbiA9IHByb2Nlc3MudmVyc2lvbnMubm9kZS5zcGxpdCgnLicpLm1hcCh4ID0+IHBhcnNlSW50KHgsIDEwKSlcbiAgciA9IHIuc3BsaXQoJy4nKS5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpXG4gIHJldHVybiBuWzBdID4gclswXSB8fCAoblswXSA9PT0gclswXSAmJiAoblsxXSA+IHJbMV0gfHwgKG5bMV0gPT09IHJbMV0gJiYgblsyXSA+PSByWzJdKSkpXG59XG4iLCAiLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvbWFrZS1kaXJcbi8vIENvcHlyaWdodCAoYykgU2luZHJlIFNvcmh1cyA8c2luZHJlc29yaHVzQGdtYWlsLmNvbT4gKHNpbmRyZXNvcmh1cy5jb20pXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbid1c2Ugc3RyaWN0J1xuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBhdExlYXN0Tm9kZSA9IHJlcXVpcmUoJ2F0LWxlYXN0LW5vZGUnKVxuXG5jb25zdCB1c2VOYXRpdmVSZWN1cnNpdmVPcHRpb24gPSBhdExlYXN0Tm9kZSgnMTAuMTIuMCcpXG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvODk4N1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2xpYnV2L2xpYnV2L3B1bGwvMTA4OFxuY29uc3QgY2hlY2tQYXRoID0gcHRoID0+IHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICBjb25zdCBwYXRoSGFzSW52YWxpZFdpbkNoYXJhY3RlcnMgPSAvWzw+OlwifD8qXS8udGVzdChwdGgucmVwbGFjZShwYXRoLnBhcnNlKHB0aCkucm9vdCwgJycpKVxuXG4gICAgaWYgKHBhdGhIYXNJbnZhbGlkV2luQ2hhcmFjdGVycykge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYFBhdGggY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzOiAke3B0aH1gKVxuICAgICAgZXJyb3IuY29kZSA9ICdFSU5WQUwnXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBwcm9jZXNzT3B0aW9ucyA9IG9wdGlvbnMgPT4ge1xuICBjb25zdCBkZWZhdWx0cyA9IHsgbW9kZTogMG83NzcgfVxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdudW1iZXInKSBvcHRpb25zID0geyBtb2RlOiBvcHRpb25zIH1cbiAgcmV0dXJuIHsgLi4uZGVmYXVsdHMsIC4uLm9wdGlvbnMgfVxufVxuXG5jb25zdCBwZXJtaXNzaW9uRXJyb3IgPSBwdGggPT4ge1xuICAvLyBUaGlzIHJlcGxpY2F0ZXMgdGhlIGV4Y2VwdGlvbiBvZiBgZnMubWtkaXJgIHdpdGggbmF0aXZlIHRoZVxuICAvLyBgcmVjdXNpdmVgIG9wdGlvbiB3aGVuIHJ1biBvbiBhbiBpbnZhbGlkIGRyaXZlIHVuZGVyIFdpbmRvd3MuXG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGBvcGVyYXRpb24gbm90IHBlcm1pdHRlZCwgbWtkaXIgJyR7cHRofSdgKVxuICBlcnJvci5jb2RlID0gJ0VQRVJNJ1xuICBlcnJvci5lcnJubyA9IC00MDQ4XG4gIGVycm9yLnBhdGggPSBwdGhcbiAgZXJyb3Iuc3lzY2FsbCA9ICdta2RpcidcbiAgcmV0dXJuIGVycm9yXG59XG5cbm1vZHVsZS5leHBvcnRzLm1ha2VEaXIgPSBhc3luYyAoaW5wdXQsIG9wdGlvbnMpID0+IHtcbiAgY2hlY2tQYXRoKGlucHV0KVxuICBvcHRpb25zID0gcHJvY2Vzc09wdGlvbnMob3B0aW9ucylcblxuICBpZiAodXNlTmF0aXZlUmVjdXJzaXZlT3B0aW9uKSB7XG4gICAgY29uc3QgcHRoID0gcGF0aC5yZXNvbHZlKGlucHV0KVxuXG4gICAgcmV0dXJuIGZzLm1rZGlyKHB0aCwge1xuICAgICAgbW9kZTogb3B0aW9ucy5tb2RlLFxuICAgICAgcmVjdXJzaXZlOiB0cnVlXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IG1ha2UgPSBhc3luYyBwdGggPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5ta2RpcihwdGgsIG9wdGlvbnMubW9kZSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yLmNvZGUgPT09ICdFUEVSTScpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGlmIChwYXRoLmRpcm5hbWUocHRoKSA9PT0gcHRoKSB7XG4gICAgICAgICAgdGhyb3cgcGVybWlzc2lvbkVycm9yKHB0aClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdudWxsIGJ5dGVzJykpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgbWFrZShwYXRoLmRpcm5hbWUocHRoKSlcbiAgICAgICAgcmV0dXJuIG1ha2UocHRoKVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGZzLnN0YXQocHRoKVxuICAgICAgICBpZiAoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAvLyBUaGlzIGVycm9yIGlzIG5ldmVyIGV4cG9zZWQgdG8gdGhlIHVzZXJcbiAgICAgICAgICAvLyBpdCBpcyBjYXVnaHQgYmVsb3csIGFuZCB0aGUgb3JpZ2luYWwgZXJyb3IgaXMgdGhyb3duXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcGF0aCBpcyBub3QgYSBkaXJlY3RvcnknKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWFrZShwYXRoLnJlc29sdmUoaW5wdXQpKVxufVxuXG5tb2R1bGUuZXhwb3J0cy5tYWtlRGlyU3luYyA9IChpbnB1dCwgb3B0aW9ucykgPT4ge1xuICBjaGVja1BhdGgoaW5wdXQpXG4gIG9wdGlvbnMgPSBwcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXG4gIGlmICh1c2VOYXRpdmVSZWN1cnNpdmVPcHRpb24pIHtcbiAgICBjb25zdCBwdGggPSBwYXRoLnJlc29sdmUoaW5wdXQpXG5cbiAgICByZXR1cm4gZnMubWtkaXJTeW5jKHB0aCwge1xuICAgICAgbW9kZTogb3B0aW9ucy5tb2RlLFxuICAgICAgcmVjdXJzaXZlOiB0cnVlXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IG1ha2UgPSBwdGggPT4ge1xuICAgIHRyeSB7XG4gICAgICBmcy5ta2RpclN5bmMocHRoLCBvcHRpb25zLm1vZGUpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRVBFUk0nKSB7XG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG5cbiAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICBpZiAocGF0aC5kaXJuYW1lKHB0aCkgPT09IHB0aCkge1xuICAgICAgICAgIHRocm93IHBlcm1pc3Npb25FcnJvcihwdGgpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnbnVsbCBieXRlcycpKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuXG4gICAgICAgIG1ha2UocGF0aC5kaXJuYW1lKHB0aCkpXG4gICAgICAgIHJldHVybiBtYWtlKHB0aClcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFmcy5zdGF0U3luYyhwdGgpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAvLyBUaGlzIGVycm9yIGlzIG5ldmVyIGV4cG9zZWQgdG8gdGhlIHVzZXJcbiAgICAgICAgICAvLyBpdCBpcyBjYXVnaHQgYmVsb3csIGFuZCB0aGUgb3JpZ2luYWwgZXJyb3IgaXMgdGhyb3duXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcGF0aCBpcyBub3QgYSBkaXJlY3RvcnknKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWFrZShwYXRoLnJlc29sdmUoaW5wdXQpKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCB7IG1ha2VEaXI6IF9tYWtlRGlyLCBtYWtlRGlyU3luYyB9ID0gcmVxdWlyZSgnLi9tYWtlLWRpcicpXG5jb25zdCBtYWtlRGlyID0gdShfbWFrZURpcilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1rZGlyczogbWFrZURpcixcbiAgbWtkaXJzU3luYzogbWFrZURpclN5bmMsXG4gIC8vIGFsaWFzXG4gIG1rZGlycDogbWFrZURpcixcbiAgbWtkaXJwU3luYzogbWFrZURpclN5bmMsXG4gIGVuc3VyZURpcjogbWFrZURpcixcbiAgZW5zdXJlRGlyU3luYzogbWFrZURpclN5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5cbmZ1bmN0aW9uIHV0aW1lc01pbGxpcyAocGF0aCwgYXRpbWUsIG10aW1lLCBjYWxsYmFjaykge1xuICAvLyBpZiAoIUhBU19NSUxMSVNfUkVTKSByZXR1cm4gZnMudXRpbWVzKHBhdGgsIGF0aW1lLCBtdGltZSwgY2FsbGJhY2spXG4gIGZzLm9wZW4ocGF0aCwgJ3IrJywgKGVyciwgZmQpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgIGZzLmZ1dGltZXMoZmQsIGF0aW1lLCBtdGltZSwgZnV0aW1lc0VyciA9PiB7XG4gICAgICBmcy5jbG9zZShmZCwgY2xvc2VFcnIgPT4ge1xuICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGZ1dGltZXNFcnIgfHwgY2xvc2VFcnIpXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHV0aW1lc01pbGxpc1N5bmMgKHBhdGgsIGF0aW1lLCBtdGltZSkge1xuICBjb25zdCBmZCA9IGZzLm9wZW5TeW5jKHBhdGgsICdyKycpXG4gIGZzLmZ1dGltZXNTeW5jKGZkLCBhdGltZSwgbXRpbWUpXG4gIHJldHVybiBmcy5jbG9zZVN5bmMoZmQpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB1dGltZXNNaWxsaXMsXG4gIHV0aW1lc01pbGxpc1N5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCBhdExlYXN0Tm9kZSA9IHJlcXVpcmUoJ2F0LWxlYXN0LW5vZGUnKVxuXG5jb25zdCBub2RlU3VwcG9ydHNCaWdJbnQgPSBhdExlYXN0Tm9kZSgnMTAuNS4wJylcbmNvbnN0IHN0YXQgPSAoZmlsZSkgPT4gbm9kZVN1cHBvcnRzQmlnSW50ID8gZnMuc3RhdChmaWxlLCB7IGJpZ2ludDogdHJ1ZSB9KSA6IGZzLnN0YXQoZmlsZSlcbmNvbnN0IHN0YXRTeW5jID0gKGZpbGUpID0+IG5vZGVTdXBwb3J0c0JpZ0ludCA/IGZzLnN0YXRTeW5jKGZpbGUsIHsgYmlnaW50OiB0cnVlIH0pIDogZnMuc3RhdFN5bmMoZmlsZSlcblxuZnVuY3Rpb24gZ2V0U3RhdHMgKHNyYywgZGVzdCkge1xuICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgIHN0YXQoc3JjKSxcbiAgICBzdGF0KGRlc3QpLmNhdGNoKGVyciA9PiB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSByZXR1cm4gbnVsbFxuICAgICAgdGhyb3cgZXJyXG4gICAgfSlcbiAgXSkudGhlbigoW3NyY1N0YXQsIGRlc3RTdGF0XSkgPT4gKHsgc3JjU3RhdCwgZGVzdFN0YXQgfSkpXG59XG5cbmZ1bmN0aW9uIGdldFN0YXRzU3luYyAoc3JjLCBkZXN0KSB7XG4gIGxldCBkZXN0U3RhdFxuICBjb25zdCBzcmNTdGF0ID0gc3RhdFN5bmMoc3JjKVxuICB0cnkge1xuICAgIGRlc3RTdGF0ID0gc3RhdFN5bmMoZGVzdClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykgcmV0dXJuIHsgc3JjU3RhdCwgZGVzdFN0YXQ6IG51bGwgfVxuICAgIHRocm93IGVyclxuICB9XG4gIHJldHVybiB7IHNyY1N0YXQsIGRlc3RTdGF0IH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQYXRocyAoc3JjLCBkZXN0LCBmdW5jTmFtZSwgY2IpIHtcbiAgdXRpbC5jYWxsYmFja2lmeShnZXRTdGF0cykoc3JjLCBkZXN0LCAoZXJyLCBzdGF0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gc3RhdHNcbiAgICBpZiAoZGVzdFN0YXQgJiYgYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcignU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IG5vdCBiZSB0aGUgc2FtZS4nKSlcbiAgICB9XG4gICAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSAmJiBpc1NyY1N1YmRpcihzcmMsIGRlc3QpKSB7XG4gICAgICByZXR1cm4gY2IobmV3IEVycm9yKGVyck1zZyhzcmMsIGRlc3QsIGZ1bmNOYW1lKSkpXG4gICAgfVxuICAgIHJldHVybiBjYihudWxsLCB7IHNyY1N0YXQsIGRlc3RTdGF0IH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNoZWNrUGF0aHNTeW5jIChzcmMsIGRlc3QsIGZ1bmNOYW1lKSB7XG4gIGNvbnN0IHsgc3JjU3RhdCwgZGVzdFN0YXQgfSA9IGdldFN0YXRzU3luYyhzcmMsIGRlc3QpXG4gIGlmIChkZXN0U3RhdCAmJiBhcmVJZGVudGljYWwoc3JjU3RhdCwgZGVzdFN0YXQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG11c3Qgbm90IGJlIHRoZSBzYW1lLicpXG4gIH1cbiAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSAmJiBpc1NyY1N1YmRpcihzcmMsIGRlc3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyhzcmMsIGRlc3QsIGZ1bmNOYW1lKSlcbiAgfVxuICByZXR1cm4geyBzcmNTdGF0LCBkZXN0U3RhdCB9XG59XG5cbi8vIHJlY3Vyc2l2ZWx5IGNoZWNrIGlmIGRlc3QgcGFyZW50IGlzIGEgc3ViZGlyZWN0b3J5IG9mIHNyYy5cbi8vIEl0IHdvcmtzIGZvciBhbGwgZmlsZSB0eXBlcyBpbmNsdWRpbmcgc3ltbGlua3Mgc2luY2UgaXRcbi8vIGNoZWNrcyB0aGUgc3JjIGFuZCBkZXN0IGlub2Rlcy4gSXQgc3RhcnRzIGZyb20gdGhlIGRlZXBlc3Rcbi8vIHBhcmVudCBhbmQgc3RvcHMgb25jZSBpdCByZWFjaGVzIHRoZSBzcmMgcGFyZW50IG9yIHRoZSByb290IHBhdGguXG5mdW5jdGlvbiBjaGVja1BhcmVudFBhdGhzIChzcmMsIHNyY1N0YXQsIGRlc3QsIGZ1bmNOYW1lLCBjYikge1xuICBjb25zdCBzcmNQYXJlbnQgPSBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKHNyYykpXG4gIGNvbnN0IGRlc3RQYXJlbnQgPSBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKGRlc3QpKVxuICBpZiAoZGVzdFBhcmVudCA9PT0gc3JjUGFyZW50IHx8IGRlc3RQYXJlbnQgPT09IHBhdGgucGFyc2UoZGVzdFBhcmVudCkucm9vdCkgcmV0dXJuIGNiKClcbiAgY29uc3QgY2FsbGJhY2sgPSAoZXJyLCBkZXN0U3RhdCkgPT4ge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIHJldHVybiBjYigpXG4gICAgICByZXR1cm4gY2IoZXJyKVxuICAgIH1cbiAgICBpZiAoYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcihlcnJNc2coc3JjLCBkZXN0LCBmdW5jTmFtZSkpKVxuICAgIH1cbiAgICByZXR1cm4gY2hlY2tQYXJlbnRQYXRocyhzcmMsIHNyY1N0YXQsIGRlc3RQYXJlbnQsIGZ1bmNOYW1lLCBjYilcbiAgfVxuICBpZiAobm9kZVN1cHBvcnRzQmlnSW50KSBmcy5zdGF0KGRlc3RQYXJlbnQsIHsgYmlnaW50OiB0cnVlIH0sIGNhbGxiYWNrKVxuICBlbHNlIGZzLnN0YXQoZGVzdFBhcmVudCwgY2FsbGJhY2spXG59XG5cbmZ1bmN0aW9uIGNoZWNrUGFyZW50UGF0aHNTeW5jIChzcmMsIHNyY1N0YXQsIGRlc3QsIGZ1bmNOYW1lKSB7XG4gIGNvbnN0IHNyY1BhcmVudCA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoc3JjKSlcbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoZGVzdCkpXG4gIGlmIChkZXN0UGFyZW50ID09PSBzcmNQYXJlbnQgfHwgZGVzdFBhcmVudCA9PT0gcGF0aC5wYXJzZShkZXN0UGFyZW50KS5yb290KSByZXR1cm5cbiAgbGV0IGRlc3RTdGF0XG4gIHRyeSB7XG4gICAgZGVzdFN0YXQgPSBzdGF0U3luYyhkZXN0UGFyZW50KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSByZXR1cm5cbiAgICB0aHJvdyBlcnJcbiAgfVxuICBpZiAoYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2coc3JjLCBkZXN0LCBmdW5jTmFtZSkpXG4gIH1cbiAgcmV0dXJuIGNoZWNrUGFyZW50UGF0aHNTeW5jKHNyYywgc3JjU3RhdCwgZGVzdFBhcmVudCwgZnVuY05hbWUpXG59XG5cbmZ1bmN0aW9uIGFyZUlkZW50aWNhbCAoc3JjU3RhdCwgZGVzdFN0YXQpIHtcbiAgaWYgKGRlc3RTdGF0LmlubyAmJiBkZXN0U3RhdC5kZXYgJiYgZGVzdFN0YXQuaW5vID09PSBzcmNTdGF0LmlubyAmJiBkZXN0U3RhdC5kZXYgPT09IHNyY1N0YXQuZGV2KSB7XG4gICAgaWYgKG5vZGVTdXBwb3J0c0JpZ0ludCB8fCBkZXN0U3RhdC5pbm8gPCBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikge1xuICAgICAgLy8gZGVmaW5pdGl2ZSBhbnN3ZXJcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIC8vIFVzZSBhZGRpdGlvbmFsIGhldXJpc3RpY3MgaWYgd2UgY2FuJ3QgdXNlICdiaWdpbnQnLlxuICAgIC8vIERpZmZlcmVudCAnaW5vJyBjb3VsZCBiZSByZXByZXNlbnRlZCB0aGUgc2FtZSBpZiB0aGV5IGFyZSA+PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxuICAgIC8vIFNlZSBpc3N1ZSA2NTdcbiAgICBpZiAoZGVzdFN0YXQuc2l6ZSA9PT0gc3JjU3RhdC5zaXplICYmXG4gICAgICAgIGRlc3RTdGF0Lm1vZGUgPT09IHNyY1N0YXQubW9kZSAmJlxuICAgICAgICBkZXN0U3RhdC5ubGluayA9PT0gc3JjU3RhdC5ubGluayAmJlxuICAgICAgICBkZXN0U3RhdC5hdGltZU1zID09PSBzcmNTdGF0LmF0aW1lTXMgJiZcbiAgICAgICAgZGVzdFN0YXQubXRpbWVNcyA9PT0gc3JjU3RhdC5tdGltZU1zICYmXG4gICAgICAgIGRlc3RTdGF0LmN0aW1lTXMgPT09IHNyY1N0YXQuY3RpbWVNcyAmJlxuICAgICAgICBkZXN0U3RhdC5iaXJ0aHRpbWVNcyA9PT0gc3JjU3RhdC5iaXJ0aHRpbWVNcykge1xuICAgICAgLy8gaGV1cmlzdGljIGFuc3dlclxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIHJldHVybiB0cnVlIGlmIGRlc3QgaXMgYSBzdWJkaXIgb2Ygc3JjLCBvdGhlcndpc2UgZmFsc2UuXG4vLyBJdCBvbmx5IGNoZWNrcyB0aGUgcGF0aCBzdHJpbmdzLlxuZnVuY3Rpb24gaXNTcmNTdWJkaXIgKHNyYywgZGVzdCkge1xuICBjb25zdCBzcmNBcnIgPSBwYXRoLnJlc29sdmUoc3JjKS5zcGxpdChwYXRoLnNlcCkuZmlsdGVyKGkgPT4gaSlcbiAgY29uc3QgZGVzdEFyciA9IHBhdGgucmVzb2x2ZShkZXN0KS5zcGxpdChwYXRoLnNlcCkuZmlsdGVyKGkgPT4gaSlcbiAgcmV0dXJuIHNyY0Fyci5yZWR1Y2UoKGFjYywgY3VyLCBpKSA9PiBhY2MgJiYgZGVzdEFycltpXSA9PT0gY3VyLCB0cnVlKVxufVxuXG5mdW5jdGlvbiBlcnJNc2cgKHNyYywgZGVzdCwgZnVuY05hbWUpIHtcbiAgcmV0dXJuIGBDYW5ub3QgJHtmdW5jTmFtZX0gJyR7c3JjfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtkZXN0fScuYFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY2hlY2tQYXRocyxcbiAgY2hlY2tQYXRoc1N5bmMsXG4gIGNoZWNrUGFyZW50UGF0aHMsXG4gIGNoZWNrUGFyZW50UGF0aHNTeW5jLFxuICBpc1NyY1N1YmRpclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IG1rZGlyc1N5bmMgPSByZXF1aXJlKCcuLi9ta2RpcnMnKS5ta2RpcnNTeW5jXG5jb25zdCB1dGltZXNNaWxsaXNTeW5jID0gcmVxdWlyZSgnLi4vdXRpbC91dGltZXMnKS51dGltZXNNaWxsaXNTeW5jXG5jb25zdCBzdGF0ID0gcmVxdWlyZSgnLi4vdXRpbC9zdGF0JylcblxuZnVuY3Rpb24gY29weVN5bmMgKHNyYywgZGVzdCwgb3B0cykge1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRzID0geyBmaWx0ZXI6IG9wdHMgfVxuICB9XG5cbiAgb3B0cyA9IG9wdHMgfHwge31cbiAgb3B0cy5jbG9iYmVyID0gJ2Nsb2JiZXInIGluIG9wdHMgPyAhIW9wdHMuY2xvYmJlciA6IHRydWUgLy8gZGVmYXVsdCB0byB0cnVlIGZvciBub3dcbiAgb3B0cy5vdmVyd3JpdGUgPSAnb3ZlcndyaXRlJyBpbiBvcHRzID8gISFvcHRzLm92ZXJ3cml0ZSA6IG9wdHMuY2xvYmJlciAvLyBvdmVyd3JpdGUgZmFsbHMgYmFjayB0byBjbG9iYmVyXG5cbiAgLy8gV2FybiBhYm91dCB1c2luZyBwcmVzZXJ2ZVRpbWVzdGFtcHMgb24gMzItYml0IG5vZGVcbiAgaWYgKG9wdHMucHJlc2VydmVUaW1lc3RhbXBzICYmIHByb2Nlc3MuYXJjaCA9PT0gJ2lhMzInKSB7XG4gICAgY29uc29sZS53YXJuKGBmcy1leHRyYTogVXNpbmcgdGhlIHByZXNlcnZlVGltZXN0YW1wcyBvcHRpb24gaW4gMzItYml0IG5vZGUgaXMgbm90IHJlY29tbWVuZGVkO1xcblxuICAgIHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMtZXh0cmEvaXNzdWVzLzI2OWApXG4gIH1cblxuICBjb25zdCB7IHNyY1N0YXQsIGRlc3RTdGF0IH0gPSBzdGF0LmNoZWNrUGF0aHNTeW5jKHNyYywgZGVzdCwgJ2NvcHknKVxuICBzdGF0LmNoZWNrUGFyZW50UGF0aHNTeW5jKHNyYywgc3JjU3RhdCwgZGVzdCwgJ2NvcHknKVxuICByZXR1cm4gaGFuZGxlRmlsdGVyQW5kQ29weShkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxufVxuXG5mdW5jdGlvbiBoYW5kbGVGaWx0ZXJBbmRDb3B5IChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmIChvcHRzLmZpbHRlciAmJiAhb3B0cy5maWx0ZXIoc3JjLCBkZXN0KSkgcmV0dXJuXG4gIGNvbnN0IGRlc3RQYXJlbnQgPSBwYXRoLmRpcm5hbWUoZGVzdClcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGRlc3RQYXJlbnQpKSBta2RpcnNTeW5jKGRlc3RQYXJlbnQpXG4gIHJldHVybiBzdGFydENvcHkoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cylcbn1cblxuZnVuY3Rpb24gc3RhcnRDb3B5IChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmIChvcHRzLmZpbHRlciAmJiAhb3B0cy5maWx0ZXIoc3JjLCBkZXN0KSkgcmV0dXJuXG4gIHJldHVybiBnZXRTdGF0cyhkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxufVxuXG5mdW5jdGlvbiBnZXRTdGF0cyAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBjb25zdCBzdGF0U3luYyA9IG9wdHMuZGVyZWZlcmVuY2UgPyBmcy5zdGF0U3luYyA6IGZzLmxzdGF0U3luY1xuICBjb25zdCBzcmNTdGF0ID0gc3RhdFN5bmMoc3JjKVxuXG4gIGlmIChzcmNTdGF0LmlzRGlyZWN0b3J5KCkpIHJldHVybiBvbkRpcihzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICBlbHNlIGlmIChzcmNTdGF0LmlzRmlsZSgpIHx8XG4gICAgICAgICAgIHNyY1N0YXQuaXNDaGFyYWN0ZXJEZXZpY2UoKSB8fFxuICAgICAgICAgICBzcmNTdGF0LmlzQmxvY2tEZXZpY2UoKSkgcmV0dXJuIG9uRmlsZShzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICBlbHNlIGlmIChzcmNTdGF0LmlzU3ltYm9saWNMaW5rKCkpIHJldHVybiBvbkxpbmsoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cylcbn1cblxuZnVuY3Rpb24gb25GaWxlIChzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmICghZGVzdFN0YXQpIHJldHVybiBjb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG4gIHJldHVybiBtYXlDb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG59XG5cbmZ1bmN0aW9uIG1heUNvcHlGaWxlIChzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgaWYgKG9wdHMub3ZlcndyaXRlKSB7XG4gICAgZnMudW5saW5rU3luYyhkZXN0KVxuICAgIHJldHVybiBjb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG4gIH0gZWxzZSBpZiAob3B0cy5lcnJvck9uRXhpc3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2Rlc3R9JyBhbHJlYWR5IGV4aXN0c2ApXG4gIH1cbn1cblxuZnVuY3Rpb24gY29weUZpbGUgKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBmcy5jb3B5RmlsZVN5bmMoc3JjLCBkZXN0KVxuICBpZiAob3B0cy5wcmVzZXJ2ZVRpbWVzdGFtcHMpIGhhbmRsZVRpbWVzdGFtcHMoc3JjU3RhdC5tb2RlLCBzcmMsIGRlc3QpXG4gIHJldHVybiBzZXREZXN0TW9kZShkZXN0LCBzcmNTdGF0Lm1vZGUpXG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRpbWVzdGFtcHMgKHNyY01vZGUsIHNyYywgZGVzdCkge1xuICAvLyBNYWtlIHN1cmUgdGhlIGZpbGUgaXMgd3JpdGFibGUgYmVmb3JlIHNldHRpbmcgdGhlIHRpbWVzdGFtcFxuICAvLyBvdGhlcndpc2Ugb3BlbiBmYWlscyB3aXRoIEVQRVJNIHdoZW4gaW52b2tlZCB3aXRoICdyKydcbiAgLy8gKHRocm91Z2ggdXRpbWVzIGNhbGwpXG4gIGlmIChmaWxlSXNOb3RXcml0YWJsZShzcmNNb2RlKSkgbWFrZUZpbGVXcml0YWJsZShkZXN0LCBzcmNNb2RlKVxuICByZXR1cm4gc2V0RGVzdFRpbWVzdGFtcHMoc3JjLCBkZXN0KVxufVxuXG5mdW5jdGlvbiBmaWxlSXNOb3RXcml0YWJsZSAoc3JjTW9kZSkge1xuICByZXR1cm4gKHNyY01vZGUgJiAwbzIwMCkgPT09IDBcbn1cblxuZnVuY3Rpb24gbWFrZUZpbGVXcml0YWJsZSAoZGVzdCwgc3JjTW9kZSkge1xuICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjTW9kZSB8IDBvMjAwKVxufVxuXG5mdW5jdGlvbiBzZXREZXN0TW9kZSAoZGVzdCwgc3JjTW9kZSkge1xuICByZXR1cm4gZnMuY2htb2RTeW5jKGRlc3QsIHNyY01vZGUpXG59XG5cbmZ1bmN0aW9uIHNldERlc3RUaW1lc3RhbXBzIChzcmMsIGRlc3QpIHtcbiAgLy8gVGhlIGluaXRpYWwgc3JjU3RhdC5hdGltZSBjYW5ub3QgYmUgdHJ1c3RlZFxuICAvLyBiZWNhdXNlIGl0IGlzIG1vZGlmaWVkIGJ5IHRoZSByZWFkKDIpIHN5c3RlbSBjYWxsXG4gIC8vIChTZWUgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9mcy5odG1sI2ZzX3N0YXRfdGltZV92YWx1ZXMpXG4gIGNvbnN0IHVwZGF0ZWRTcmNTdGF0ID0gZnMuc3RhdFN5bmMoc3JjKVxuICByZXR1cm4gdXRpbWVzTWlsbGlzU3luYyhkZXN0LCB1cGRhdGVkU3JjU3RhdC5hdGltZSwgdXBkYXRlZFNyY1N0YXQubXRpbWUpXG59XG5cbmZ1bmN0aW9uIG9uRGlyIChzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmICghZGVzdFN0YXQpIHJldHVybiBta0RpckFuZENvcHkoc3JjU3RhdC5tb2RlLCBzcmMsIGRlc3QsIG9wdHMpXG4gIGlmIChkZXN0U3RhdCAmJiAhZGVzdFN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBub24tZGlyZWN0b3J5ICcke2Rlc3R9JyB3aXRoIGRpcmVjdG9yeSAnJHtzcmN9Jy5gKVxuICB9XG4gIHJldHVybiBjb3B5RGlyKHNyYywgZGVzdCwgb3B0cylcbn1cblxuZnVuY3Rpb24gbWtEaXJBbmRDb3B5IChzcmNNb2RlLCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgZnMubWtkaXJTeW5jKGRlc3QpXG4gIGNvcHlEaXIoc3JjLCBkZXN0LCBvcHRzKVxuICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjTW9kZSlcbn1cblxuZnVuY3Rpb24gY29weURpciAoc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGZzLnJlYWRkaXJTeW5jKHNyYykuZm9yRWFjaChpdGVtID0+IGNvcHlEaXJJdGVtKGl0ZW0sIHNyYywgZGVzdCwgb3B0cykpXG59XG5cbmZ1bmN0aW9uIGNvcHlEaXJJdGVtIChpdGVtLCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgY29uc3Qgc3JjSXRlbSA9IHBhdGguam9pbihzcmMsIGl0ZW0pXG4gIGNvbnN0IGRlc3RJdGVtID0gcGF0aC5qb2luKGRlc3QsIGl0ZW0pXG4gIGNvbnN0IHsgZGVzdFN0YXQgfSA9IHN0YXQuY2hlY2tQYXRoc1N5bmMoc3JjSXRlbSwgZGVzdEl0ZW0sICdjb3B5JylcbiAgcmV0dXJuIHN0YXJ0Q29weShkZXN0U3RhdCwgc3JjSXRlbSwgZGVzdEl0ZW0sIG9wdHMpXG59XG5cbmZ1bmN0aW9uIG9uTGluayAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBsZXQgcmVzb2x2ZWRTcmMgPSBmcy5yZWFkbGlua1N5bmMoc3JjKVxuICBpZiAob3B0cy5kZXJlZmVyZW5jZSkge1xuICAgIHJlc29sdmVkU3JjID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHJlc29sdmVkU3JjKVxuICB9XG5cbiAgaWYgKCFkZXN0U3RhdCkge1xuICAgIHJldHVybiBmcy5zeW1saW5rU3luYyhyZXNvbHZlZFNyYywgZGVzdClcbiAgfSBlbHNlIHtcbiAgICBsZXQgcmVzb2x2ZWREZXN0XG4gICAgdHJ5IHtcbiAgICAgIHJlc29sdmVkRGVzdCA9IGZzLnJlYWRsaW5rU3luYyhkZXN0KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gZGVzdCBleGlzdHMgYW5kIGlzIGEgcmVndWxhciBmaWxlIG9yIGRpcmVjdG9yeSxcbiAgICAgIC8vIFdpbmRvd3MgbWF5IHRocm93IFVOS05PV04gZXJyb3IuIElmIGRlc3QgYWxyZWFkeSBleGlzdHMsXG4gICAgICAvLyBmcyB0aHJvd3MgZXJyb3IgYW55d2F5LCBzbyBubyBuZWVkIHRvIGd1YXJkIGFnYWluc3QgaXQgaGVyZS5cbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VJTlZBTCcgfHwgZXJyLmNvZGUgPT09ICdVTktOT1dOJykgcmV0dXJuIGZzLnN5bWxpbmtTeW5jKHJlc29sdmVkU3JjLCBkZXN0KVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGlmIChvcHRzLmRlcmVmZXJlbmNlKSB7XG4gICAgICByZXNvbHZlZERlc3QgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVzb2x2ZWREZXN0KVxuICAgIH1cbiAgICBpZiAoc3RhdC5pc1NyY1N1YmRpcihyZXNvbHZlZFNyYywgcmVzb2x2ZWREZXN0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29weSAnJHtyZXNvbHZlZFNyY30nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7cmVzb2x2ZWREZXN0fScuYClcbiAgICB9XG5cbiAgICAvLyBwcmV2ZW50IGNvcHkgaWYgc3JjIGlzIGEgc3ViZGlyIG9mIGRlc3Qgc2luY2UgdW5saW5raW5nXG4gICAgLy8gZGVzdCBpbiB0aGlzIGNhc2Ugd291bGQgcmVzdWx0IGluIHJlbW92aW5nIHNyYyBjb250ZW50c1xuICAgIC8vIGFuZCB0aGVyZWZvcmUgYSBicm9rZW4gc3ltbGluayB3b3VsZCBiZSBjcmVhdGVkLlxuICAgIGlmIChmcy5zdGF0U3luYyhkZXN0KS5pc0RpcmVjdG9yeSgpICYmIHN0YXQuaXNTcmNTdWJkaXIocmVzb2x2ZWREZXN0LCByZXNvbHZlZFNyYykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSAnJHtyZXNvbHZlZERlc3R9JyB3aXRoICcke3Jlc29sdmVkU3JjfScuYClcbiAgICB9XG4gICAgcmV0dXJuIGNvcHlMaW5rKHJlc29sdmVkU3JjLCBkZXN0KVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvcHlMaW5rIChyZXNvbHZlZFNyYywgZGVzdCkge1xuICBmcy51bmxpbmtTeW5jKGRlc3QpXG4gIHJldHVybiBmcy5zeW1saW5rU3luYyhyZXNvbHZlZFNyYywgZGVzdClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5U3luY1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29weVN5bmM6IHJlcXVpcmUoJy4vY29weS1zeW5jJylcbn1cbiIsICIndXNlIHN0cmljdCdcbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5cbmZ1bmN0aW9uIHBhdGhFeGlzdHMgKHBhdGgpIHtcbiAgcmV0dXJuIGZzLmFjY2VzcyhwYXRoKS50aGVuKCgpID0+IHRydWUpLmNhdGNoKCgpID0+IGZhbHNlKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcGF0aEV4aXN0czogdShwYXRoRXhpc3RzKSxcbiAgcGF0aEV4aXN0c1N5bmM6IGZzLmV4aXN0c1N5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBta2RpcnMgPSByZXF1aXJlKCcuLi9ta2RpcnMnKS5ta2RpcnNcbmNvbnN0IHBhdGhFeGlzdHMgPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpLnBhdGhFeGlzdHNcbmNvbnN0IHV0aW1lc01pbGxpcyA9IHJlcXVpcmUoJy4uL3V0aWwvdXRpbWVzJykudXRpbWVzTWlsbGlzXG5jb25zdCBzdGF0ID0gcmVxdWlyZSgnLi4vdXRpbC9zdGF0JylcblxuZnVuY3Rpb24gY29weSAoc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicgJiYgIWNiKSB7XG4gICAgY2IgPSBvcHRzXG4gICAgb3B0cyA9IHt9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRzID0geyBmaWx0ZXI6IG9wdHMgfVxuICB9XG5cbiAgY2IgPSBjYiB8fCBmdW5jdGlvbiAoKSB7fVxuICBvcHRzID0gb3B0cyB8fCB7fVxuXG4gIG9wdHMuY2xvYmJlciA9ICdjbG9iYmVyJyBpbiBvcHRzID8gISFvcHRzLmNsb2JiZXIgOiB0cnVlIC8vIGRlZmF1bHQgdG8gdHJ1ZSBmb3Igbm93XG4gIG9wdHMub3ZlcndyaXRlID0gJ292ZXJ3cml0ZScgaW4gb3B0cyA/ICEhb3B0cy5vdmVyd3JpdGUgOiBvcHRzLmNsb2JiZXIgLy8gb3ZlcndyaXRlIGZhbGxzIGJhY2sgdG8gY2xvYmJlclxuXG4gIC8vIFdhcm4gYWJvdXQgdXNpbmcgcHJlc2VydmVUaW1lc3RhbXBzIG9uIDMyLWJpdCBub2RlXG4gIGlmIChvcHRzLnByZXNlcnZlVGltZXN0YW1wcyAmJiBwcm9jZXNzLmFyY2ggPT09ICdpYTMyJykge1xuICAgIGNvbnNvbGUud2FybihgZnMtZXh0cmE6IFVzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFtcHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcXG5cbiAgICBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjlgKVxuICB9XG5cbiAgc3RhdC5jaGVja1BhdGhzKHNyYywgZGVzdCwgJ2NvcHknLCAoZXJyLCBzdGF0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gc3RhdHNcbiAgICBzdGF0LmNoZWNrUGFyZW50UGF0aHMoc3JjLCBzcmNTdGF0LCBkZXN0LCAnY29weScsIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgaWYgKG9wdHMuZmlsdGVyKSByZXR1cm4gaGFuZGxlRmlsdGVyKGNoZWNrUGFyZW50RGlyLCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICAgIHJldHVybiBjaGVja1BhcmVudERpcihkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBjaGVja1BhcmVudERpciAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGguZGlybmFtZShkZXN0KVxuICBwYXRoRXhpc3RzKGRlc3RQYXJlbnQsIChlcnIsIGRpckV4aXN0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgaWYgKGRpckV4aXN0cykgcmV0dXJuIHN0YXJ0Q29weShkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICBta2RpcnMoZGVzdFBhcmVudCwgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICByZXR1cm4gc3RhcnRDb3B5KGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZpbHRlciAob25JbmNsdWRlLCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBQcm9taXNlLnJlc29sdmUob3B0cy5maWx0ZXIoc3JjLCBkZXN0KSkudGhlbihpbmNsdWRlID0+IHtcbiAgICBpZiAoaW5jbHVkZSkgcmV0dXJuIG9uSW5jbHVkZShkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICByZXR1cm4gY2IoKVxuICB9LCBlcnJvciA9PiBjYihlcnJvcikpXG59XG5cbmZ1bmN0aW9uIHN0YXJ0Q29weSAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgaWYgKG9wdHMuZmlsdGVyKSByZXR1cm4gaGFuZGxlRmlsdGVyKGdldFN0YXRzLCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgcmV0dXJuIGdldFN0YXRzKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxufVxuXG5mdW5jdGlvbiBnZXRTdGF0cyAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgY29uc3Qgc3RhdCA9IG9wdHMuZGVyZWZlcmVuY2UgPyBmcy5zdGF0IDogZnMubHN0YXRcbiAgc3RhdChzcmMsIChlcnIsIHNyY1N0YXQpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuXG4gICAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSkgcmV0dXJuIG9uRGlyKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICAgIGVsc2UgaWYgKHNyY1N0YXQuaXNGaWxlKCkgfHxcbiAgICAgICAgICAgICBzcmNTdGF0LmlzQ2hhcmFjdGVyRGV2aWNlKCkgfHxcbiAgICAgICAgICAgICBzcmNTdGF0LmlzQmxvY2tEZXZpY2UoKSkgcmV0dXJuIG9uRmlsZShzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICBlbHNlIGlmIChzcmNTdGF0LmlzU3ltYm9saWNMaW5rKCkpIHJldHVybiBvbkxpbmsoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIG9uRmlsZSAoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgaWYgKCFkZXN0U3RhdCkgcmV0dXJuIGNvcHlGaWxlKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gIHJldHVybiBtYXlDb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxufVxuXG5mdW5jdGlvbiBtYXlDb3B5RmlsZSAoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBpZiAob3B0cy5vdmVyd3JpdGUpIHtcbiAgICBmcy51bmxpbmsoZGVzdCwgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICByZXR1cm4gY29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICB9KVxuICB9IGVsc2UgaWYgKG9wdHMuZXJyb3JPbkV4aXN0KSB7XG4gICAgcmV0dXJuIGNiKG5ldyBFcnJvcihgJyR7ZGVzdH0nIGFscmVhZHkgZXhpc3RzYCkpXG4gIH0gZWxzZSByZXR1cm4gY2IoKVxufVxuXG5mdW5jdGlvbiBjb3B5RmlsZSAoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBmcy5jb3B5RmlsZShzcmMsIGRlc3QsIGVyciA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBpZiAob3B0cy5wcmVzZXJ2ZVRpbWVzdGFtcHMpIHJldHVybiBoYW5kbGVUaW1lc3RhbXBzQW5kTW9kZShzcmNTdGF0Lm1vZGUsIHNyYywgZGVzdCwgY2IpXG4gICAgcmV0dXJuIHNldERlc3RNb2RlKGRlc3QsIHNyY1N0YXQubW9kZSwgY2IpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRpbWVzdGFtcHNBbmRNb2RlIChzcmNNb2RlLCBzcmMsIGRlc3QsIGNiKSB7XG4gIC8vIE1ha2Ugc3VyZSB0aGUgZmlsZSBpcyB3cml0YWJsZSBiZWZvcmUgc2V0dGluZyB0aGUgdGltZXN0YW1wXG4gIC8vIG90aGVyd2lzZSBvcGVuIGZhaWxzIHdpdGggRVBFUk0gd2hlbiBpbnZva2VkIHdpdGggJ3IrJ1xuICAvLyAodGhyb3VnaCB1dGltZXMgY2FsbClcbiAgaWYgKGZpbGVJc05vdFdyaXRhYmxlKHNyY01vZGUpKSB7XG4gICAgcmV0dXJuIG1ha2VGaWxlV3JpdGFibGUoZGVzdCwgc3JjTW9kZSwgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICByZXR1cm4gc2V0RGVzdFRpbWVzdGFtcHNBbmRNb2RlKHNyY01vZGUsIHNyYywgZGVzdCwgY2IpXG4gICAgfSlcbiAgfVxuICByZXR1cm4gc2V0RGVzdFRpbWVzdGFtcHNBbmRNb2RlKHNyY01vZGUsIHNyYywgZGVzdCwgY2IpXG59XG5cbmZ1bmN0aW9uIGZpbGVJc05vdFdyaXRhYmxlIChzcmNNb2RlKSB7XG4gIHJldHVybiAoc3JjTW9kZSAmIDBvMjAwKSA9PT0gMFxufVxuXG5mdW5jdGlvbiBtYWtlRmlsZVdyaXRhYmxlIChkZXN0LCBzcmNNb2RlLCBjYikge1xuICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjTW9kZSB8IDBvMjAwLCBjYilcbn1cblxuZnVuY3Rpb24gc2V0RGVzdFRpbWVzdGFtcHNBbmRNb2RlIChzcmNNb2RlLCBzcmMsIGRlc3QsIGNiKSB7XG4gIHNldERlc3RUaW1lc3RhbXBzKHNyYywgZGVzdCwgZXJyID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIHJldHVybiBzZXREZXN0TW9kZShkZXN0LCBzcmNNb2RlLCBjYilcbiAgfSlcbn1cblxuZnVuY3Rpb24gc2V0RGVzdE1vZGUgKGRlc3QsIHNyY01vZGUsIGNiKSB7XG4gIHJldHVybiBmcy5jaG1vZChkZXN0LCBzcmNNb2RlLCBjYilcbn1cblxuZnVuY3Rpb24gc2V0RGVzdFRpbWVzdGFtcHMgKHNyYywgZGVzdCwgY2IpIHtcbiAgLy8gVGhlIGluaXRpYWwgc3JjU3RhdC5hdGltZSBjYW5ub3QgYmUgdHJ1c3RlZFxuICAvLyBiZWNhdXNlIGl0IGlzIG1vZGlmaWVkIGJ5IHRoZSByZWFkKDIpIHN5c3RlbSBjYWxsXG4gIC8vIChTZWUgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9mcy5odG1sI2ZzX3N0YXRfdGltZV92YWx1ZXMpXG4gIGZzLnN0YXQoc3JjLCAoZXJyLCB1cGRhdGVkU3JjU3RhdCkgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgcmV0dXJuIHV0aW1lc01pbGxpcyhkZXN0LCB1cGRhdGVkU3JjU3RhdC5hdGltZSwgdXBkYXRlZFNyY1N0YXQubXRpbWUsIGNiKVxuICB9KVxufVxuXG5mdW5jdGlvbiBvbkRpciAoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgaWYgKCFkZXN0U3RhdCkgcmV0dXJuIG1rRGlyQW5kQ29weShzcmNTdGF0Lm1vZGUsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gIGlmIChkZXN0U3RhdCAmJiAhZGVzdFN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgIHJldHVybiBjYihuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtkZXN0fScgd2l0aCBkaXJlY3RvcnkgJyR7c3JjfScuYCkpXG4gIH1cbiAgcmV0dXJuIGNvcHlEaXIoc3JjLCBkZXN0LCBvcHRzLCBjYilcbn1cblxuZnVuY3Rpb24gbWtEaXJBbmRDb3B5IChzcmNNb2RlLCBzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGZzLm1rZGlyKGRlc3QsIGVyciA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBjb3B5RGlyKHNyYywgZGVzdCwgb3B0cywgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjTW9kZSwgY2IpXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gY29weURpciAoc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBmcy5yZWFkZGlyKHNyYywgKGVyciwgaXRlbXMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIHJldHVybiBjb3B5RGlySXRlbXMoaXRlbXMsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNvcHlEaXJJdGVtcyAoaXRlbXMsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgY29uc3QgaXRlbSA9IGl0ZW1zLnBvcCgpXG4gIGlmICghaXRlbSkgcmV0dXJuIGNiKClcbiAgcmV0dXJuIGNvcHlEaXJJdGVtKGl0ZW1zLCBpdGVtLCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxufVxuXG5mdW5jdGlvbiBjb3B5RGlySXRlbSAoaXRlbXMsIGl0ZW0sIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgY29uc3Qgc3JjSXRlbSA9IHBhdGguam9pbihzcmMsIGl0ZW0pXG4gIGNvbnN0IGRlc3RJdGVtID0gcGF0aC5qb2luKGRlc3QsIGl0ZW0pXG4gIHN0YXQuY2hlY2tQYXRocyhzcmNJdGVtLCBkZXN0SXRlbSwgJ2NvcHknLCAoZXJyLCBzdGF0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgY29uc3QgeyBkZXN0U3RhdCB9ID0gc3RhdHNcbiAgICBzdGFydENvcHkoZGVzdFN0YXQsIHNyY0l0ZW0sIGRlc3RJdGVtLCBvcHRzLCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIHJldHVybiBjb3B5RGlySXRlbXMoaXRlbXMsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gb25MaW5rIChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBmcy5yZWFkbGluayhzcmMsIChlcnIsIHJlc29sdmVkU3JjKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBpZiAob3B0cy5kZXJlZmVyZW5jZSkge1xuICAgICAgcmVzb2x2ZWRTcmMgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVzb2x2ZWRTcmMpXG4gICAgfVxuXG4gICAgaWYgKCFkZXN0U3RhdCkge1xuICAgICAgcmV0dXJuIGZzLnN5bWxpbmsocmVzb2x2ZWRTcmMsIGRlc3QsIGNiKVxuICAgIH0gZWxzZSB7XG4gICAgICBmcy5yZWFkbGluayhkZXN0LCAoZXJyLCByZXNvbHZlZERlc3QpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIC8vIGRlc3QgZXhpc3RzIGFuZCBpcyBhIHJlZ3VsYXIgZmlsZSBvciBkaXJlY3RvcnksXG4gICAgICAgICAgLy8gV2luZG93cyBtYXkgdGhyb3cgVU5LTk9XTiBlcnJvci4gSWYgZGVzdCBhbHJlYWR5IGV4aXN0cyxcbiAgICAgICAgICAvLyBmcyB0aHJvd3MgZXJyb3IgYW55d2F5LCBzbyBubyBuZWVkIHRvIGd1YXJkIGFnYWluc3QgaXQgaGVyZS5cbiAgICAgICAgICBpZiAoZXJyLmNvZGUgPT09ICdFSU5WQUwnIHx8IGVyci5jb2RlID09PSAnVU5LTk9XTicpIHJldHVybiBmcy5zeW1saW5rKHJlc29sdmVkU3JjLCBkZXN0LCBjYilcbiAgICAgICAgICByZXR1cm4gY2IoZXJyKVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmRlcmVmZXJlbmNlKSB7XG4gICAgICAgICAgcmVzb2x2ZWREZXN0ID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHJlc29sdmVkRGVzdClcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdC5pc1NyY1N1YmRpcihyZXNvbHZlZFNyYywgcmVzb2x2ZWREZXN0KSkge1xuICAgICAgICAgIHJldHVybiBjYihuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke3Jlc29sdmVkU3JjfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtyZXNvbHZlZERlc3R9Jy5gKSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRvIG5vdCBjb3B5IGlmIHNyYyBpcyBhIHN1YmRpciBvZiBkZXN0IHNpbmNlIHVubGlua2luZ1xuICAgICAgICAvLyBkZXN0IGluIHRoaXMgY2FzZSB3b3VsZCByZXN1bHQgaW4gcmVtb3Zpbmcgc3JjIGNvbnRlbnRzXG4gICAgICAgIC8vIGFuZCB0aGVyZWZvcmUgYSBicm9rZW4gc3ltbGluayB3b3VsZCBiZSBjcmVhdGVkLlxuICAgICAgICBpZiAoZGVzdFN0YXQuaXNEaXJlY3RvcnkoKSAmJiBzdGF0LmlzU3JjU3ViZGlyKHJlc29sdmVkRGVzdCwgcmVzb2x2ZWRTcmMpKSB7XG4gICAgICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSAnJHtyZXNvbHZlZERlc3R9JyB3aXRoICcke3Jlc29sdmVkU3JjfScuYCkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvcHlMaW5rKHJlc29sdmVkU3JjLCBkZXN0LCBjYilcbiAgICAgIH0pXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiBjb3B5TGluayAocmVzb2x2ZWRTcmMsIGRlc3QsIGNiKSB7XG4gIGZzLnVubGluayhkZXN0LCBlcnIgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgcmV0dXJuIGZzLnN5bWxpbmsocmVzb2x2ZWRTcmMsIGRlc3QsIGNiKVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvcHk6IHUocmVxdWlyZSgnLi9jb3B5JykpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuY29uc3QgaXNXaW5kb3dzID0gKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpXG5cbmZ1bmN0aW9uIGRlZmF1bHRzIChvcHRpb25zKSB7XG4gIGNvbnN0IG1ldGhvZHMgPSBbXG4gICAgJ3VubGluaycsXG4gICAgJ2NobW9kJyxcbiAgICAnc3RhdCcsXG4gICAgJ2xzdGF0JyxcbiAgICAncm1kaXInLFxuICAgICdyZWFkZGlyJ1xuICBdXG4gIG1ldGhvZHMuZm9yRWFjaChtID0+IHtcbiAgICBvcHRpb25zW21dID0gb3B0aW9uc1ttXSB8fCBmc1ttXVxuICAgIG0gPSBtICsgJ1N5bmMnXG4gICAgb3B0aW9uc1ttXSA9IG9wdGlvbnNbbV0gfHwgZnNbbV1cbiAgfSlcblxuICBvcHRpb25zLm1heEJ1c3lUcmllcyA9IG9wdGlvbnMubWF4QnVzeVRyaWVzIHx8IDNcbn1cblxuZnVuY3Rpb24gcmltcmFmIChwLCBvcHRpb25zLCBjYikge1xuICBsZXQgYnVzeVRyaWVzID0gMFxuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gb3B0aW9uc1xuICAgIG9wdGlvbnMgPSB7fVxuICB9XG5cbiAgYXNzZXJ0KHAsICdyaW1yYWY6IG1pc3NpbmcgcGF0aCcpXG4gIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgcCwgJ3N0cmluZycsICdyaW1yYWY6IHBhdGggc2hvdWxkIGJlIGEgc3RyaW5nJylcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBjYiwgJ2Z1bmN0aW9uJywgJ3JpbXJhZjogY2FsbGJhY2sgZnVuY3Rpb24gcmVxdWlyZWQnKVxuICBhc3NlcnQob3B0aW9ucywgJ3JpbXJhZjogaW52YWxpZCBvcHRpb25zIGFyZ3VtZW50IHByb3ZpZGVkJylcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBvcHRpb25zLCAnb2JqZWN0JywgJ3JpbXJhZjogb3B0aW9ucyBzaG91bGQgYmUgb2JqZWN0JylcblxuICBkZWZhdWx0cyhvcHRpb25zKVxuXG4gIHJpbXJhZl8ocCwgb3B0aW9ucywgZnVuY3Rpb24gQ0IgKGVyKSB7XG4gICAgaWYgKGVyKSB7XG4gICAgICBpZiAoKGVyLmNvZGUgPT09ICdFQlVTWScgfHwgZXIuY29kZSA9PT0gJ0VOT1RFTVBUWScgfHwgZXIuY29kZSA9PT0gJ0VQRVJNJykgJiZcbiAgICAgICAgICBidXN5VHJpZXMgPCBvcHRpb25zLm1heEJ1c3lUcmllcykge1xuICAgICAgICBidXN5VHJpZXMrK1xuICAgICAgICBjb25zdCB0aW1lID0gYnVzeVRyaWVzICogMTAwXG4gICAgICAgIC8vIHRyeSBhZ2Fpbiwgd2l0aCB0aGUgc2FtZSBleGFjdCBjYWxsYmFjayBhcyB0aGlzIG9uZS5cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoKCkgPT4gcmltcmFmXyhwLCBvcHRpb25zLCBDQiksIHRpbWUpXG4gICAgICB9XG5cbiAgICAgIC8vIGFscmVhZHkgZ29uZVxuICAgICAgaWYgKGVyLmNvZGUgPT09ICdFTk9FTlQnKSBlciA9IG51bGxcbiAgICB9XG5cbiAgICBjYihlcilcbiAgfSlcbn1cblxuLy8gVHdvIHBvc3NpYmxlIHN0cmF0ZWdpZXMuXG4vLyAxLiBBc3N1bWUgaXQncyBhIGZpbGUuICB1bmxpbmsgaXQsIHRoZW4gZG8gdGhlIGRpciBzdHVmZiBvbiBFUEVSTSBvciBFSVNESVJcbi8vIDIuIEFzc3VtZSBpdCdzIGEgZGlyZWN0b3J5LiAgcmVhZGRpciwgdGhlbiBkbyB0aGUgZmlsZSBzdHVmZiBvbiBFTk9URElSXG4vL1xuLy8gQm90aCByZXN1bHQgaW4gYW4gZXh0cmEgc3lzY2FsbCB3aGVuIHlvdSBndWVzcyB3cm9uZy4gIEhvd2V2ZXIsIHRoZXJlXG4vLyBhcmUgbGlrZWx5IGZhciBtb3JlIG5vcm1hbCBmaWxlcyBpbiB0aGUgd29ybGQgdGhhbiBkaXJlY3Rvcmllcy4gIFRoaXNcbi8vIGlzIGJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgYSB0aGUgYXZlcmFnZSBudW1iZXIgb2YgZmlsZXMgcGVyXG4vLyBkaXJlY3RvcnkgaXMgPj0gMS5cbi8vXG4vLyBJZiBhbnlvbmUgZXZlciBjb21wbGFpbnMgYWJvdXQgdGhpcywgdGhlbiBJIGd1ZXNzIHRoZSBzdHJhdGVneSBjb3VsZFxuLy8gYmUgbWFkZSBjb25maWd1cmFibGUgc29tZWhvdy4gIEJ1dCB1bnRpbCB0aGVuLCBZQUdOSS5cbmZ1bmN0aW9uIHJpbXJhZl8gKHAsIG9wdGlvbnMsIGNiKSB7XG4gIGFzc2VydChwKVxuICBhc3NlcnQob3B0aW9ucylcbiAgYXNzZXJ0KHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcblxuICAvLyBzdW5vcyBsZXRzIHRoZSByb290IHVzZXIgdW5saW5rIGRpcmVjdG9yaWVzLCB3aGljaCBpcy4uLiB3ZWlyZC5cbiAgLy8gc28gd2UgaGF2ZSB0byBsc3RhdCBoZXJlIGFuZCBtYWtlIHN1cmUgaXQncyBub3QgYSBkaXIuXG4gIG9wdGlvbnMubHN0YXQocCwgKGVyLCBzdCkgPT4ge1xuICAgIGlmIChlciAmJiBlci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgcmV0dXJuIGNiKG51bGwpXG4gICAgfVxuXG4gICAgLy8gV2luZG93cyBjYW4gRVBFUk0gb24gc3RhdC4gIExpZmUgaXMgc3VmZmVyaW5nLlxuICAgIGlmIChlciAmJiBlci5jb2RlID09PSAnRVBFUk0nICYmIGlzV2luZG93cykge1xuICAgICAgcmV0dXJuIGZpeFdpbkVQRVJNKHAsIG9wdGlvbnMsIGVyLCBjYilcbiAgICB9XG5cbiAgICBpZiAoc3QgJiYgc3QuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgcmV0dXJuIHJtZGlyKHAsIG9wdGlvbnMsIGVyLCBjYilcbiAgICB9XG5cbiAgICBvcHRpb25zLnVubGluayhwLCBlciA9PiB7XG4gICAgICBpZiAoZXIpIHtcbiAgICAgICAgaWYgKGVyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgcmV0dXJuIGNiKG51bGwpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVyLmNvZGUgPT09ICdFUEVSTScpIHtcbiAgICAgICAgICByZXR1cm4gKGlzV2luZG93cylcbiAgICAgICAgICAgID8gZml4V2luRVBFUk0ocCwgb3B0aW9ucywgZXIsIGNiKVxuICAgICAgICAgICAgOiBybWRpcihwLCBvcHRpb25zLCBlciwgY2IpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVyLmNvZGUgPT09ICdFSVNESVInKSB7XG4gICAgICAgICAgcmV0dXJuIHJtZGlyKHAsIG9wdGlvbnMsIGVyLCBjYilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNiKGVyKVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGZpeFdpbkVQRVJNIChwLCBvcHRpb25zLCBlciwgY2IpIHtcbiAgYXNzZXJ0KHApXG4gIGFzc2VydChvcHRpb25zKVxuICBhc3NlcnQodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuXG4gIG9wdGlvbnMuY2htb2QocCwgMG82NjYsIGVyMiA9PiB7XG4gICAgaWYgKGVyMikge1xuICAgICAgY2IoZXIyLmNvZGUgPT09ICdFTk9FTlQnID8gbnVsbCA6IGVyKVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLnN0YXQocCwgKGVyMywgc3RhdHMpID0+IHtcbiAgICAgICAgaWYgKGVyMykge1xuICAgICAgICAgIGNiKGVyMy5jb2RlID09PSAnRU5PRU5UJyA/IG51bGwgOiBlcilcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgcm1kaXIocCwgb3B0aW9ucywgZXIsIGNiKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMudW5saW5rKHAsIGNiKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gZml4V2luRVBFUk1TeW5jIChwLCBvcHRpb25zLCBlcikge1xuICBsZXQgc3RhdHNcblxuICBhc3NlcnQocClcbiAgYXNzZXJ0KG9wdGlvbnMpXG5cbiAgdHJ5IHtcbiAgICBvcHRpb25zLmNobW9kU3luYyhwLCAwbzY2NilcbiAgfSBjYXRjaCAoZXIyKSB7XG4gICAgaWYgKGVyMi5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVyXG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBzdGF0cyA9IG9wdGlvbnMuc3RhdFN5bmMocClcbiAgfSBjYXRjaCAoZXIzKSB7XG4gICAgaWYgKGVyMy5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVyXG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICBybWRpclN5bmMocCwgb3B0aW9ucywgZXIpXG4gIH0gZWxzZSB7XG4gICAgb3B0aW9ucy51bmxpbmtTeW5jKHApXG4gIH1cbn1cblxuZnVuY3Rpb24gcm1kaXIgKHAsIG9wdGlvbnMsIG9yaWdpbmFsRXIsIGNiKSB7XG4gIGFzc2VydChwKVxuICBhc3NlcnQob3B0aW9ucylcbiAgYXNzZXJ0KHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcblxuICAvLyB0cnkgdG8gcm1kaXIgZmlyc3QsIGFuZCBvbmx5IHJlYWRkaXIgb24gRU5PVEVNUFRZIG9yIEVFWElTVCAoU3VuT1MpXG4gIC8vIGlmIHdlIGd1ZXNzZWQgd3JvbmcsIGFuZCBpdCdzIG5vdCBhIGRpcmVjdG9yeSwgdGhlblxuICAvLyByYWlzZSB0aGUgb3JpZ2luYWwgZXJyb3IuXG4gIG9wdGlvbnMucm1kaXIocCwgZXIgPT4ge1xuICAgIGlmIChlciAmJiAoZXIuY29kZSA9PT0gJ0VOT1RFTVBUWScgfHwgZXIuY29kZSA9PT0gJ0VFWElTVCcgfHwgZXIuY29kZSA9PT0gJ0VQRVJNJykpIHtcbiAgICAgIHJta2lkcyhwLCBvcHRpb25zLCBjYilcbiAgICB9IGVsc2UgaWYgKGVyICYmIGVyLmNvZGUgPT09ICdFTk9URElSJykge1xuICAgICAgY2Iob3JpZ2luYWxFcilcbiAgICB9IGVsc2Uge1xuICAgICAgY2IoZXIpXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiBybWtpZHMgKHAsIG9wdGlvbnMsIGNiKSB7XG4gIGFzc2VydChwKVxuICBhc3NlcnQob3B0aW9ucylcbiAgYXNzZXJ0KHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcblxuICBvcHRpb25zLnJlYWRkaXIocCwgKGVyLCBmaWxlcykgPT4ge1xuICAgIGlmIChlcikgcmV0dXJuIGNiKGVyKVxuXG4gICAgbGV0IG4gPSBmaWxlcy5sZW5ndGhcbiAgICBsZXQgZXJyU3RhdGVcblxuICAgIGlmIChuID09PSAwKSByZXR1cm4gb3B0aW9ucy5ybWRpcihwLCBjYilcblxuICAgIGZpbGVzLmZvckVhY2goZiA9PiB7XG4gICAgICByaW1yYWYocGF0aC5qb2luKHAsIGYpLCBvcHRpb25zLCBlciA9PiB7XG4gICAgICAgIGlmIChlcnJTdGF0ZSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChlcikgcmV0dXJuIGNiKGVyclN0YXRlID0gZXIpXG4gICAgICAgIGlmICgtLW4gPT09IDApIHtcbiAgICAgICAgICBvcHRpb25zLnJtZGlyKHAsIGNiKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbi8vIHRoaXMgbG9va3Mgc2ltcGxlciwgYW5kIGlzIHN0cmljdGx5ICpmYXN0ZXIqLCBidXQgd2lsbFxuLy8gdGllIHVwIHRoZSBKYXZhU2NyaXB0IHRocmVhZCBhbmQgZmFpbCBvbiBleGNlc3NpdmVseVxuLy8gZGVlcCBkaXJlY3RvcnkgdHJlZXMuXG5mdW5jdGlvbiByaW1yYWZTeW5jIChwLCBvcHRpb25zKSB7XG4gIGxldCBzdFxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIGRlZmF1bHRzKG9wdGlvbnMpXG5cbiAgYXNzZXJ0KHAsICdyaW1yYWY6IG1pc3NpbmcgcGF0aCcpXG4gIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgcCwgJ3N0cmluZycsICdyaW1yYWY6IHBhdGggc2hvdWxkIGJlIGEgc3RyaW5nJylcbiAgYXNzZXJ0KG9wdGlvbnMsICdyaW1yYWY6IG1pc3Npbmcgb3B0aW9ucycpXG4gIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2Ygb3B0aW9ucywgJ29iamVjdCcsICdyaW1yYWY6IG9wdGlvbnMgc2hvdWxkIGJlIG9iamVjdCcpXG5cbiAgdHJ5IHtcbiAgICBzdCA9IG9wdGlvbnMubHN0YXRTeW5jKHApXG4gIH0gY2F0Y2ggKGVyKSB7XG4gICAgaWYgKGVyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBXaW5kb3dzIGNhbiBFUEVSTSBvbiBzdGF0LiAgTGlmZSBpcyBzdWZmZXJpbmcuXG4gICAgaWYgKGVyLmNvZGUgPT09ICdFUEVSTScgJiYgaXNXaW5kb3dzKSB7XG4gICAgICBmaXhXaW5FUEVSTVN5bmMocCwgb3B0aW9ucywgZXIpXG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBzdW5vcyBsZXRzIHRoZSByb290IHVzZXIgdW5saW5rIGRpcmVjdG9yaWVzLCB3aGljaCBpcy4uLiB3ZWlyZC5cbiAgICBpZiAoc3QgJiYgc3QuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgcm1kaXJTeW5jKHAsIG9wdGlvbnMsIG51bGwpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMudW5saW5rU3luYyhwKVxuICAgIH1cbiAgfSBjYXRjaCAoZXIpIHtcbiAgICBpZiAoZXIuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIHJldHVyblxuICAgIH0gZWxzZSBpZiAoZXIuY29kZSA9PT0gJ0VQRVJNJykge1xuICAgICAgcmV0dXJuIGlzV2luZG93cyA/IGZpeFdpbkVQRVJNU3luYyhwLCBvcHRpb25zLCBlcikgOiBybWRpclN5bmMocCwgb3B0aW9ucywgZXIpXG4gICAgfSBlbHNlIGlmIChlci5jb2RlICE9PSAnRUlTRElSJykge1xuICAgICAgdGhyb3cgZXJcbiAgICB9XG4gICAgcm1kaXJTeW5jKHAsIG9wdGlvbnMsIGVyKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJtZGlyU3luYyAocCwgb3B0aW9ucywgb3JpZ2luYWxFcikge1xuICBhc3NlcnQocClcbiAgYXNzZXJ0KG9wdGlvbnMpXG5cbiAgdHJ5IHtcbiAgICBvcHRpb25zLnJtZGlyU3luYyhwKVxuICB9IGNhdGNoIChlcikge1xuICAgIGlmIChlci5jb2RlID09PSAnRU5PVERJUicpIHtcbiAgICAgIHRocm93IG9yaWdpbmFsRXJcbiAgICB9IGVsc2UgaWYgKGVyLmNvZGUgPT09ICdFTk9URU1QVFknIHx8IGVyLmNvZGUgPT09ICdFRVhJU1QnIHx8IGVyLmNvZGUgPT09ICdFUEVSTScpIHtcbiAgICAgIHJta2lkc1N5bmMocCwgb3B0aW9ucylcbiAgICB9IGVsc2UgaWYgKGVyLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICB0aHJvdyBlclxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBybWtpZHNTeW5jIChwLCBvcHRpb25zKSB7XG4gIGFzc2VydChwKVxuICBhc3NlcnQob3B0aW9ucylcbiAgb3B0aW9ucy5yZWFkZGlyU3luYyhwKS5mb3JFYWNoKGYgPT4gcmltcmFmU3luYyhwYXRoLmpvaW4ocCwgZiksIG9wdGlvbnMpKVxuXG4gIGlmIChpc1dpbmRvd3MpIHtcbiAgICAvLyBXZSBvbmx5IGVuZCB1cCBoZXJlIG9uY2Ugd2UgZ290IEVOT1RFTVBUWSBhdCBsZWFzdCBvbmNlLCBhbmRcbiAgICAvLyBhdCB0aGlzIHBvaW50LCB3ZSBhcmUgZ3VhcmFudGVlZCB0byBoYXZlIHJlbW92ZWQgYWxsIHRoZSBraWRzLlxuICAgIC8vIFNvLCB3ZSBrbm93IHRoYXQgaXQgd29uJ3QgYmUgRU5PRU5UIG9yIEVOT1RESVIgb3IgYW55dGhpbmcgZWxzZS5cbiAgICAvLyB0cnkgcmVhbGx5IGhhcmQgdG8gZGVsZXRlIHN0dWZmIG9uIHdpbmRvd3MsIGJlY2F1c2UgaXQgaGFzIGFcbiAgICAvLyBQUk9GT1VORExZIGFubm95aW5nIGhhYml0IG9mIG5vdCBjbG9zaW5nIGhhbmRsZXMgcHJvbXB0bHkgd2hlblxuICAgIC8vIGZpbGVzIGFyZSBkZWxldGVkLCByZXN1bHRpbmcgaW4gc3B1cmlvdXMgRU5PVEVNUFRZIGVycm9ycy5cbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpXG4gICAgZG8ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmV0ID0gb3B0aW9ucy5ybWRpclN5bmMocCwgb3B0aW9ucylcbiAgICAgICAgcmV0dXJuIHJldFxuICAgICAgfSBjYXRjaCB7fVxuICAgIH0gd2hpbGUgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPCA1MDApIC8vIGdpdmUgdXAgYWZ0ZXIgNTAwbXNcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByZXQgPSBvcHRpb25zLnJtZGlyU3luYyhwLCBvcHRpb25zKVxuICAgIHJldHVybiByZXRcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJpbXJhZlxucmltcmFmLnN5bmMgPSByaW1yYWZTeW5jXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tQ2FsbGJhY2tcbmNvbnN0IHJpbXJhZiA9IHJlcXVpcmUoJy4vcmltcmFmJylcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHJlbW92ZTogdShyaW1yYWYpLFxuICByZW1vdmVTeW5jOiByaW1yYWYuc3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbmNvbnN0IHJlbW92ZSA9IHJlcXVpcmUoJy4uL3JlbW92ZScpXG5cbmNvbnN0IGVtcHR5RGlyID0gdShmdW5jdGlvbiBlbXB0eURpciAoZGlyLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9XG4gIGZzLnJlYWRkaXIoZGlyLCAoZXJyLCBpdGVtcykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBta2Rpci5ta2RpcnMoZGlyLCBjYWxsYmFjaylcblxuICAgIGl0ZW1zID0gaXRlbXMubWFwKGl0ZW0gPT4gcGF0aC5qb2luKGRpciwgaXRlbSkpXG5cbiAgICBkZWxldGVJdGVtKClcblxuICAgIGZ1bmN0aW9uIGRlbGV0ZUl0ZW0gKCkge1xuICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zLnBvcCgpXG4gICAgICBpZiAoIWl0ZW0pIHJldHVybiBjYWxsYmFjaygpXG4gICAgICByZW1vdmUucmVtb3ZlKGl0ZW0sIGVyciA9PiB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgIGRlbGV0ZUl0ZW0oKVxuICAgICAgfSlcbiAgICB9XG4gIH0pXG59KVxuXG5mdW5jdGlvbiBlbXB0eURpclN5bmMgKGRpcikge1xuICBsZXQgaXRlbXNcbiAgdHJ5IHtcbiAgICBpdGVtcyA9IGZzLnJlYWRkaXJTeW5jKGRpcilcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG1rZGlyLm1rZGlyc1N5bmMoZGlyKVxuICB9XG5cbiAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICBpdGVtID0gcGF0aC5qb2luKGRpciwgaXRlbSlcbiAgICByZW1vdmUucmVtb3ZlU3luYyhpdGVtKVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZW1wdHlEaXJTeW5jLFxuICBlbXB0eWRpclN5bmM6IGVtcHR5RGlyU3luYyxcbiAgZW1wdHlEaXIsXG4gIGVtcHR5ZGlyOiBlbXB0eURpclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcblxuZnVuY3Rpb24gY3JlYXRlRmlsZSAoZmlsZSwgY2FsbGJhY2spIHtcbiAgZnVuY3Rpb24gbWFrZUZpbGUgKCkge1xuICAgIGZzLndyaXRlRmlsZShmaWxlLCAnJywgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICBjYWxsYmFjaygpXG4gICAgfSlcbiAgfVxuXG4gIGZzLnN0YXQoZmlsZSwgKGVyciwgc3RhdHMpID0+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBoYW5kbGUtY2FsbGJhY2stZXJyXG4gICAgaWYgKCFlcnIgJiYgc3RhdHMuaXNGaWxlKCkpIHJldHVybiBjYWxsYmFjaygpXG4gICAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGUpXG4gICAgZnMuc3RhdChkaXIsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIC8vIGlmIHRoZSBkaXJlY3RvcnkgZG9lc24ndCBleGlzdCwgbWFrZSBpdFxuICAgICAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgcmV0dXJuIG1rZGlyLm1rZGlycyhkaXIsIGVyciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICAgICAgbWFrZUZpbGUoKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIG1ha2VGaWxlKClcbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBwYXJlbnQgaXMgbm90IGEgZGlyZWN0b3J5XG4gICAgICAgIC8vIFRoaXMgaXMganVzdCB0byBjYXVzZSBhbiBpbnRlcm5hbCBFTk9URElSIGVycm9yIHRvIGJlIHRocm93blxuICAgICAgICBmcy5yZWFkZGlyKGRpciwgZXJyID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbGVTeW5jIChmaWxlKSB7XG4gIGxldCBzdGF0c1xuICB0cnkge1xuICAgIHN0YXRzID0gZnMuc3RhdFN5bmMoZmlsZSlcbiAgfSBjYXRjaCB7fVxuICBpZiAoc3RhdHMgJiYgc3RhdHMuaXNGaWxlKCkpIHJldHVyblxuXG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShmaWxlKVxuICB0cnkge1xuICAgIGlmICghZnMuc3RhdFN5bmMoZGlyKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAvLyBwYXJlbnQgaXMgbm90IGEgZGlyZWN0b3J5XG4gICAgICAvLyBUaGlzIGlzIGp1c3QgdG8gY2F1c2UgYW4gaW50ZXJuYWwgRU5PVERJUiBlcnJvciB0byBiZSB0aHJvd25cbiAgICAgIGZzLnJlYWRkaXJTeW5jKGRpcilcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIElmIHRoZSBzdGF0IGNhbGwgYWJvdmUgZmFpbGVkIGJlY2F1c2UgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgaXRcbiAgICBpZiAoZXJyICYmIGVyci5jb2RlID09PSAnRU5PRU5UJykgbWtkaXIubWtkaXJzU3luYyhkaXIpXG4gICAgZWxzZSB0aHJvdyBlcnJcbiAgfVxuXG4gIGZzLndyaXRlRmlsZVN5bmMoZmlsZSwgJycpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjcmVhdGVGaWxlOiB1KGNyZWF0ZUZpbGUpLFxuICBjcmVhdGVGaWxlU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbmNvbnN0IHBhdGhFeGlzdHMgPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpLnBhdGhFeGlzdHNcblxuZnVuY3Rpb24gY3JlYXRlTGluayAoc3JjcGF0aCwgZHN0cGF0aCwgY2FsbGJhY2spIHtcbiAgZnVuY3Rpb24gbWFrZUxpbmsgKHNyY3BhdGgsIGRzdHBhdGgpIHtcbiAgICBmcy5saW5rKHNyY3BhdGgsIGRzdHBhdGgsIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgY2FsbGJhY2sobnVsbClcbiAgICB9KVxuICB9XG5cbiAgcGF0aEV4aXN0cyhkc3RwYXRoLCAoZXJyLCBkZXN0aW5hdGlvbkV4aXN0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgaWYgKGRlc3RpbmF0aW9uRXhpc3RzKSByZXR1cm4gY2FsbGJhY2sobnVsbClcbiAgICBmcy5sc3RhdChzcmNwYXRoLCAoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGVyci5tZXNzYWdlID0gZXJyLm1lc3NhZ2UucmVwbGFjZSgnbHN0YXQnLCAnZW5zdXJlTGluaycpXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICAgICAgcGF0aEV4aXN0cyhkaXIsIChlcnIsIGRpckV4aXN0cykgPT4ge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICBpZiAoZGlyRXhpc3RzKSByZXR1cm4gbWFrZUxpbmsoc3JjcGF0aCwgZHN0cGF0aClcbiAgICAgICAgbWtkaXIubWtkaXJzKGRpciwgZXJyID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICAgIG1ha2VMaW5rKHNyY3BhdGgsIGRzdHBhdGgpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxpbmtTeW5jIChzcmNwYXRoLCBkc3RwYXRoKSB7XG4gIGNvbnN0IGRlc3RpbmF0aW9uRXhpc3RzID0gZnMuZXhpc3RzU3luYyhkc3RwYXRoKVxuICBpZiAoZGVzdGluYXRpb25FeGlzdHMpIHJldHVybiB1bmRlZmluZWRcblxuICB0cnkge1xuICAgIGZzLmxzdGF0U3luYyhzcmNwYXRoKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnIubWVzc2FnZSA9IGVyci5tZXNzYWdlLnJlcGxhY2UoJ2xzdGF0JywgJ2Vuc3VyZUxpbmsnKVxuICAgIHRocm93IGVyclxuICB9XG5cbiAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gIGNvbnN0IGRpckV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoZGlyKVxuICBpZiAoZGlyRXhpc3RzKSByZXR1cm4gZnMubGlua1N5bmMoc3JjcGF0aCwgZHN0cGF0aClcbiAgbWtkaXIubWtkaXJzU3luYyhkaXIpXG5cbiAgcmV0dXJuIGZzLmxpbmtTeW5jKHNyY3BhdGgsIGRzdHBhdGgpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjcmVhdGVMaW5rOiB1KGNyZWF0ZUxpbmspLFxuICBjcmVhdGVMaW5rU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHBhdGhFeGlzdHMgPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpLnBhdGhFeGlzdHNcblxuLyoqXG4gKiBGdW5jdGlvbiB0aGF0IHJldHVybnMgdHdvIHR5cGVzIG9mIHBhdGhzLCBvbmUgcmVsYXRpdmUgdG8gc3ltbGluaywgYW5kIG9uZVxuICogcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIENoZWNrcyBpZiBwYXRoIGlzIGFic29sdXRlIG9yXG4gKiByZWxhdGl2ZS4gSWYgdGhlIHBhdGggaXMgcmVsYXRpdmUsIHRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBwYXRoIGlzXG4gKiByZWxhdGl2ZSB0byBzeW1saW5rIG9yIHJlbGF0aXZlIHRvIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIFRoaXMgaXMgYW5cbiAqIGluaXRpYXRpdmUgdG8gZmluZCBhIHNtYXJ0ZXIgYHNyY3BhdGhgIHRvIHN1cHBseSB3aGVuIGJ1aWxkaW5nIHN5bWxpbmtzLlxuICogVGhpcyBhbGxvd3MgeW91IHRvIGRldGVybWluZSB3aGljaCBwYXRoIHRvIHVzZSBvdXQgb2Ygb25lIG9mIHRocmVlIHBvc3NpYmxlXG4gKiB0eXBlcyBvZiBzb3VyY2UgcGF0aHMuIFRoZSBmaXJzdCBpcyBhbiBhYnNvbHV0ZSBwYXRoLiBUaGlzIGlzIGRldGVjdGVkIGJ5XG4gKiBgcGF0aC5pc0Fic29sdXRlKClgLiBXaGVuIGFuIGFic29sdXRlIHBhdGggaXMgcHJvdmlkZWQsIGl0IGlzIGNoZWNrZWQgdG9cbiAqIHNlZSBpZiBpdCBleGlzdHMuIElmIGl0IGRvZXMgaXQncyB1c2VkLCBpZiBub3QgYW4gZXJyb3IgaXMgcmV0dXJuZWRcbiAqIChjYWxsYmFjaykvIHRocm93biAoc3luYykuIFRoZSBvdGhlciB0d28gb3B0aW9ucyBmb3IgYHNyY3BhdGhgIGFyZSBhXG4gKiByZWxhdGl2ZSB1cmwuIEJ5IGRlZmF1bHQgTm9kZSdzIGBmcy5zeW1saW5rYCB3b3JrcyBieSBjcmVhdGluZyBhIHN5bWxpbmtcbiAqIHVzaW5nIGBkc3RwYXRoYCBhbmQgZXhwZWN0cyB0aGUgYHNyY3BhdGhgIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBuZXdseVxuICogY3JlYXRlZCBzeW1saW5rLiBJZiB5b3UgcHJvdmlkZSBhIGBzcmNwYXRoYCB0aGF0IGRvZXMgbm90IGV4aXN0IG9uIHRoZSBmaWxlXG4gKiBzeXN0ZW0gaXQgcmVzdWx0cyBpbiBhIGJyb2tlbiBzeW1saW5rLiBUbyBtaW5pbWl6ZSB0aGlzLCB0aGUgZnVuY3Rpb25cbiAqIGNoZWNrcyB0byBzZWUgaWYgdGhlICdyZWxhdGl2ZSB0byBzeW1saW5rJyBzb3VyY2UgZmlsZSBleGlzdHMsIGFuZCBpZiBpdFxuICogZG9lcyBpdCB3aWxsIHVzZSBpdC4gSWYgaXQgZG9lcyBub3QsIGl0IGNoZWNrcyBpZiB0aGVyZSdzIGEgZmlsZSB0aGF0XG4gKiBleGlzdHMgdGhhdCBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSwgaWYgZG9lcyBpdHMgdXNlZC5cbiAqIFRoaXMgcHJlc2VydmVzIHRoZSBleHBlY3RhdGlvbnMgb2YgdGhlIG9yaWdpbmFsIGZzLnN5bWxpbmsgc3BlYyBhbmQgYWRkc1xuICogdGhlIGFiaWxpdHkgdG8gcGFzcyBpbiBgcmVsYXRpdmUgdG8gY3VycmVudCB3b3JraW5nIGRpcmVjb3RyeWAgcGF0aHMuXG4gKi9cblxuZnVuY3Rpb24gc3ltbGlua1BhdGhzIChzcmNwYXRoLCBkc3RwYXRoLCBjYWxsYmFjaykge1xuICBpZiAocGF0aC5pc0Fic29sdXRlKHNyY3BhdGgpKSB7XG4gICAgcmV0dXJuIGZzLmxzdGF0KHNyY3BhdGgsIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgZXJyLm1lc3NhZ2UgPSBlcnIubWVzc2FnZS5yZXBsYWNlKCdsc3RhdCcsICdlbnN1cmVTeW1saW5rJylcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCB7XG4gICAgICAgIHRvQ3dkOiBzcmNwYXRoLFxuICAgICAgICB0b0RzdDogc3JjcGF0aFxuICAgICAgfSlcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRzdGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICAgIGNvbnN0IHJlbGF0aXZlVG9Ec3QgPSBwYXRoLmpvaW4oZHN0ZGlyLCBzcmNwYXRoKVxuICAgIHJldHVybiBwYXRoRXhpc3RzKHJlbGF0aXZlVG9Ec3QsIChlcnIsIGV4aXN0cykgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIGlmIChleGlzdHMpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHtcbiAgICAgICAgICB0b0N3ZDogcmVsYXRpdmVUb0RzdCxcbiAgICAgICAgICB0b0RzdDogc3JjcGF0aFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZzLmxzdGF0KHNyY3BhdGgsIChlcnIpID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBlcnIubWVzc2FnZSA9IGVyci5tZXNzYWdlLnJlcGxhY2UoJ2xzdGF0JywgJ2Vuc3VyZVN5bWxpbmsnKVxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHtcbiAgICAgICAgICAgIHRvQ3dkOiBzcmNwYXRoLFxuICAgICAgICAgICAgdG9Ec3Q6IHBhdGgucmVsYXRpdmUoZHN0ZGlyLCBzcmNwYXRoKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBzeW1saW5rUGF0aHNTeW5jIChzcmNwYXRoLCBkc3RwYXRoKSB7XG4gIGxldCBleGlzdHNcbiAgaWYgKHBhdGguaXNBYnNvbHV0ZShzcmNwYXRoKSkge1xuICAgIGV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoc3JjcGF0aClcbiAgICBpZiAoIWV4aXN0cykgdGhyb3cgbmV3IEVycm9yKCdhYnNvbHV0ZSBzcmNwYXRoIGRvZXMgbm90IGV4aXN0JylcbiAgICByZXR1cm4ge1xuICAgICAgdG9Dd2Q6IHNyY3BhdGgsXG4gICAgICB0b0RzdDogc3JjcGF0aFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkc3RkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcbiAgICBjb25zdCByZWxhdGl2ZVRvRHN0ID0gcGF0aC5qb2luKGRzdGRpciwgc3JjcGF0aClcbiAgICBleGlzdHMgPSBmcy5leGlzdHNTeW5jKHJlbGF0aXZlVG9Ec3QpXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9Dd2Q6IHJlbGF0aXZlVG9Ec3QsXG4gICAgICAgIHRvRHN0OiBzcmNwYXRoXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoc3JjcGF0aClcbiAgICAgIGlmICghZXhpc3RzKSB0aHJvdyBuZXcgRXJyb3IoJ3JlbGF0aXZlIHNyY3BhdGggZG9lcyBub3QgZXhpc3QnKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9Dd2Q6IHNyY3BhdGgsXG4gICAgICAgIHRvRHN0OiBwYXRoLnJlbGF0aXZlKGRzdGRpciwgc3JjcGF0aClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN5bWxpbmtQYXRocyxcbiAgc3ltbGlua1BhdGhzU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcblxuZnVuY3Rpb24gc3ltbGlua1R5cGUgKHNyY3BhdGgsIHR5cGUsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrID0gKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSA/IHR5cGUgOiBjYWxsYmFja1xuICB0eXBlID0gKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSA/IGZhbHNlIDogdHlwZVxuICBpZiAodHlwZSkgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHR5cGUpXG4gIGZzLmxzdGF0KHNyY3BhdGgsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKG51bGwsICdmaWxlJylcbiAgICB0eXBlID0gKHN0YXRzICYmIHN0YXRzLmlzRGlyZWN0b3J5KCkpID8gJ2RpcicgOiAnZmlsZSdcbiAgICBjYWxsYmFjayhudWxsLCB0eXBlKVxuICB9KVxufVxuXG5mdW5jdGlvbiBzeW1saW5rVHlwZVN5bmMgKHNyY3BhdGgsIHR5cGUpIHtcbiAgbGV0IHN0YXRzXG5cbiAgaWYgKHR5cGUpIHJldHVybiB0eXBlXG4gIHRyeSB7XG4gICAgc3RhdHMgPSBmcy5sc3RhdFN5bmMoc3JjcGF0aClcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICdmaWxlJ1xuICB9XG4gIHJldHVybiAoc3RhdHMgJiYgc3RhdHMuaXNEaXJlY3RvcnkoKSkgPyAnZGlyJyA6ICdmaWxlJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3ltbGlua1R5cGUsXG4gIHN5bWxpbmtUeXBlU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IF9ta2RpcnMgPSByZXF1aXJlKCcuLi9ta2RpcnMnKVxuY29uc3QgbWtkaXJzID0gX21rZGlycy5ta2RpcnNcbmNvbnN0IG1rZGlyc1N5bmMgPSBfbWtkaXJzLm1rZGlyc1N5bmNcblxuY29uc3QgX3N5bWxpbmtQYXRocyA9IHJlcXVpcmUoJy4vc3ltbGluay1wYXRocycpXG5jb25zdCBzeW1saW5rUGF0aHMgPSBfc3ltbGlua1BhdGhzLnN5bWxpbmtQYXRoc1xuY29uc3Qgc3ltbGlua1BhdGhzU3luYyA9IF9zeW1saW5rUGF0aHMuc3ltbGlua1BhdGhzU3luY1xuXG5jb25zdCBfc3ltbGlua1R5cGUgPSByZXF1aXJlKCcuL3N5bWxpbmstdHlwZScpXG5jb25zdCBzeW1saW5rVHlwZSA9IF9zeW1saW5rVHlwZS5zeW1saW5rVHlwZVxuY29uc3Qgc3ltbGlua1R5cGVTeW5jID0gX3N5bWxpbmtUeXBlLnN5bWxpbmtUeXBlU3luY1xuXG5jb25zdCBwYXRoRXhpc3RzID0gcmVxdWlyZSgnLi4vcGF0aC1leGlzdHMnKS5wYXRoRXhpc3RzXG5cbmZ1bmN0aW9uIGNyZWF0ZVN5bWxpbmsgKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrID0gKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSA/IHR5cGUgOiBjYWxsYmFja1xuICB0eXBlID0gKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSA/IGZhbHNlIDogdHlwZVxuXG4gIHBhdGhFeGlzdHMoZHN0cGF0aCwgKGVyciwgZGVzdGluYXRpb25FeGlzdHMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgIGlmIChkZXN0aW5hdGlvbkV4aXN0cykgcmV0dXJuIGNhbGxiYWNrKG51bGwpXG4gICAgc3ltbGlua1BhdGhzKHNyY3BhdGgsIGRzdHBhdGgsIChlcnIsIHJlbGF0aXZlKSA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgc3JjcGF0aCA9IHJlbGF0aXZlLnRvRHN0XG4gICAgICBzeW1saW5rVHlwZShyZWxhdGl2ZS50b0N3ZCwgdHlwZSwgKGVyciwgdHlwZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcbiAgICAgICAgcGF0aEV4aXN0cyhkaXIsIChlcnIsIGRpckV4aXN0cykgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgaWYgKGRpckV4aXN0cykgcmV0dXJuIGZzLnN5bWxpbmsoc3JjcGF0aCwgZHN0cGF0aCwgdHlwZSwgY2FsbGJhY2spXG4gICAgICAgICAgbWtkaXJzKGRpciwgZXJyID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgICBmcy5zeW1saW5rKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUsIGNhbGxiYWNrKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN5bWxpbmtTeW5jIChzcmNwYXRoLCBkc3RwYXRoLCB0eXBlKSB7XG4gIGNvbnN0IGRlc3RpbmF0aW9uRXhpc3RzID0gZnMuZXhpc3RzU3luYyhkc3RwYXRoKVxuICBpZiAoZGVzdGluYXRpb25FeGlzdHMpIHJldHVybiB1bmRlZmluZWRcblxuICBjb25zdCByZWxhdGl2ZSA9IHN5bWxpbmtQYXRoc1N5bmMoc3JjcGF0aCwgZHN0cGF0aClcbiAgc3JjcGF0aCA9IHJlbGF0aXZlLnRvRHN0XG4gIHR5cGUgPSBzeW1saW5rVHlwZVN5bmMocmVsYXRpdmUudG9Dd2QsIHR5cGUpXG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICBjb25zdCBleGlzdHMgPSBmcy5leGlzdHNTeW5jKGRpcilcbiAgaWYgKGV4aXN0cykgcmV0dXJuIGZzLnN5bWxpbmtTeW5jKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUpXG4gIG1rZGlyc1N5bmMoZGlyKVxuICByZXR1cm4gZnMuc3ltbGlua1N5bmMoc3JjcGF0aCwgZHN0cGF0aCwgdHlwZSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNyZWF0ZVN5bWxpbms6IHUoY3JlYXRlU3ltbGluayksXG4gIGNyZWF0ZVN5bWxpbmtTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZpbGUgPSByZXF1aXJlKCcuL2ZpbGUnKVxuY29uc3QgbGluayA9IHJlcXVpcmUoJy4vbGluaycpXG5jb25zdCBzeW1saW5rID0gcmVxdWlyZSgnLi9zeW1saW5rJylcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGZpbGVcbiAgY3JlYXRlRmlsZTogZmlsZS5jcmVhdGVGaWxlLFxuICBjcmVhdGVGaWxlU3luYzogZmlsZS5jcmVhdGVGaWxlU3luYyxcbiAgZW5zdXJlRmlsZTogZmlsZS5jcmVhdGVGaWxlLFxuICBlbnN1cmVGaWxlU3luYzogZmlsZS5jcmVhdGVGaWxlU3luYyxcbiAgLy8gbGlua1xuICBjcmVhdGVMaW5rOiBsaW5rLmNyZWF0ZUxpbmssXG4gIGNyZWF0ZUxpbmtTeW5jOiBsaW5rLmNyZWF0ZUxpbmtTeW5jLFxuICBlbnN1cmVMaW5rOiBsaW5rLmNyZWF0ZUxpbmssXG4gIGVuc3VyZUxpbmtTeW5jOiBsaW5rLmNyZWF0ZUxpbmtTeW5jLFxuICAvLyBzeW1saW5rXG4gIGNyZWF0ZVN5bWxpbms6IHN5bWxpbmsuY3JlYXRlU3ltbGluayxcbiAgY3JlYXRlU3ltbGlua1N5bmM6IHN5bWxpbmsuY3JlYXRlU3ltbGlua1N5bmMsXG4gIGVuc3VyZVN5bWxpbms6IHN5bWxpbmsuY3JlYXRlU3ltbGluayxcbiAgZW5zdXJlU3ltbGlua1N5bmM6IHN5bWxpbmsuY3JlYXRlU3ltbGlua1N5bmNcbn1cbiIsICJmdW5jdGlvbiBzdHJpbmdpZnkgKG9iaiwgeyBFT0wgPSAnXFxuJywgZmluYWxFT0wgPSB0cnVlLCByZXBsYWNlciA9IG51bGwsIHNwYWNlcyB9ID0ge30pIHtcbiAgY29uc3QgRU9GID0gZmluYWxFT0wgPyBFT0wgOiAnJ1xuICBjb25zdCBzdHIgPSBKU09OLnN0cmluZ2lmeShvYmosIHJlcGxhY2VyLCBzcGFjZXMpXG5cbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXG4vZywgRU9MKSArIEVPRlxufVxuXG5mdW5jdGlvbiBzdHJpcEJvbSAoY29udGVudCkge1xuICAvLyB3ZSBkbyB0aGlzIGJlY2F1c2UgSlNPTi5wYXJzZSB3b3VsZCBjb252ZXJ0IGl0IHRvIGEgdXRmOCBzdHJpbmcgaWYgZW5jb2Rpbmcgd2Fzbid0IHNwZWNpZmllZFxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGNvbnRlbnQpKSBjb250ZW50ID0gY29udGVudC50b1N0cmluZygndXRmOCcpXG4gIHJldHVybiBjb250ZW50LnJlcGxhY2UoL15cXHVGRUZGLywgJycpXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBzdHJpbmdpZnksIHN0cmlwQm9tIH1cbiIsICJsZXQgX2ZzXG50cnkge1xuICBfZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG59IGNhdGNoIChfKSB7XG4gIF9mcyA9IHJlcXVpcmUoJ2ZzJylcbn1cbmNvbnN0IHVuaXZlcnNhbGlmeSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpXG5jb25zdCB7IHN0cmluZ2lmeSwgc3RyaXBCb20gfSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuXG5hc3luYyBmdW5jdGlvbiBfcmVhZEZpbGUgKGZpbGUsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6IG9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHNob3VsZFRocm93ID0gJ3Rocm93cycgaW4gb3B0aW9ucyA/IG9wdGlvbnMudGhyb3dzIDogdHJ1ZVxuXG4gIGxldCBkYXRhID0gYXdhaXQgdW5pdmVyc2FsaWZ5LmZyb21DYWxsYmFjayhmcy5yZWFkRmlsZSkoZmlsZSwgb3B0aW9ucylcblxuICBkYXRhID0gc3RyaXBCb20oZGF0YSlcblxuICBsZXQgb2JqXG4gIHRyeSB7XG4gICAgb2JqID0gSlNPTi5wYXJzZShkYXRhLCBvcHRpb25zID8gb3B0aW9ucy5yZXZpdmVyIDogbnVsbClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgICBlcnIubWVzc2FnZSA9IGAke2ZpbGV9OiAke2Vyci5tZXNzYWdlfWBcbiAgICAgIHRocm93IGVyclxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmpcbn1cblxuY29uc3QgcmVhZEZpbGUgPSB1bml2ZXJzYWxpZnkuZnJvbVByb21pc2UoX3JlYWRGaWxlKVxuXG5mdW5jdGlvbiByZWFkRmlsZVN5bmMgKGZpbGUsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6IG9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHNob3VsZFRocm93ID0gJ3Rocm93cycgaW4gb3B0aW9ucyA/IG9wdGlvbnMudGhyb3dzIDogdHJ1ZVxuXG4gIHRyeSB7XG4gICAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZSwgb3B0aW9ucylcbiAgICBjb250ZW50ID0gc3RyaXBCb20oY29udGVudClcbiAgICByZXR1cm4gSlNPTi5wYXJzZShjb250ZW50LCBvcHRpb25zLnJldml2ZXIpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChzaG91bGRUaHJvdykge1xuICAgICAgZXJyLm1lc3NhZ2UgPSBgJHtmaWxlfTogJHtlcnIubWVzc2FnZX1gXG4gICAgICB0aHJvdyBlcnJcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gX3dyaXRlRmlsZSAoZmlsZSwgb2JqLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShvYmosIG9wdGlvbnMpXG5cbiAgYXdhaXQgdW5pdmVyc2FsaWZ5LmZyb21DYWxsYmFjayhmcy53cml0ZUZpbGUpKGZpbGUsIHN0ciwgb3B0aW9ucylcbn1cblxuY29uc3Qgd3JpdGVGaWxlID0gdW5pdmVyc2FsaWZ5LmZyb21Qcm9taXNlKF93cml0ZUZpbGUpXG5cbmZ1bmN0aW9uIHdyaXRlRmlsZVN5bmMgKGZpbGUsIG9iaiwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGZzID0gb3B0aW9ucy5mcyB8fCBfZnNcblxuICBjb25zdCBzdHIgPSBzdHJpbmdpZnkob2JqLCBvcHRpb25zKVxuICAvLyBub3Qgc3VyZSBpZiBmcy53cml0ZUZpbGVTeW5jIHJldHVybnMgYW55dGhpbmcsIGJ1dCBqdXN0IGluIGNhc2VcbiAgcmV0dXJuIGZzLndyaXRlRmlsZVN5bmMoZmlsZSwgc3RyLCBvcHRpb25zKVxufVxuXG5jb25zdCBqc29uZmlsZSA9IHtcbiAgcmVhZEZpbGUsXG4gIHJlYWRGaWxlU3luYyxcbiAgd3JpdGVGaWxlLFxuICB3cml0ZUZpbGVTeW5jXG59XG5cbm1vZHVsZS5leHBvcnRzID0ganNvbmZpbGVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QganNvbkZpbGUgPSByZXF1aXJlKCdqc29uZmlsZScpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBqc29uZmlsZSBleHBvcnRzXG4gIHJlYWRKc29uOiBqc29uRmlsZS5yZWFkRmlsZSxcbiAgcmVhZEpzb25TeW5jOiBqc29uRmlsZS5yZWFkRmlsZVN5bmMsXG4gIHdyaXRlSnNvbjoganNvbkZpbGUud3JpdGVGaWxlLFxuICB3cml0ZUpzb25TeW5jOiBqc29uRmlsZS53cml0ZUZpbGVTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tQ2FsbGJhY2tcbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgbWtkaXIgPSByZXF1aXJlKCcuLi9ta2RpcnMnKVxuY29uc3QgcGF0aEV4aXN0cyA9IHJlcXVpcmUoJy4uL3BhdGgtZXhpc3RzJykucGF0aEV4aXN0c1xuXG5mdW5jdGlvbiBvdXRwdXRGaWxlIChmaWxlLCBkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gZW5jb2RpbmdcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGUpXG4gIHBhdGhFeGlzdHMoZGlyLCAoZXJyLCBpdERvZXMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgIGlmIChpdERvZXMpIHJldHVybiBmcy53cml0ZUZpbGUoZmlsZSwgZGF0YSwgZW5jb2RpbmcsIGNhbGxiYWNrKVxuXG4gICAgbWtkaXIubWtkaXJzKGRpciwgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG5cbiAgICAgIGZzLndyaXRlRmlsZShmaWxlLCBkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gb3V0cHV0RmlsZVN5bmMgKGZpbGUsIC4uLmFyZ3MpIHtcbiAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGUpXG4gIGlmIChmcy5leGlzdHNTeW5jKGRpcikpIHtcbiAgICByZXR1cm4gZnMud3JpdGVGaWxlU3luYyhmaWxlLCAuLi5hcmdzKVxuICB9XG4gIG1rZGlyLm1rZGlyc1N5bmMoZGlyKVxuICBmcy53cml0ZUZpbGVTeW5jKGZpbGUsIC4uLmFyZ3MpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBvdXRwdXRGaWxlOiB1KG91dHB1dEZpbGUpLFxuICBvdXRwdXRGaWxlU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHN0cmluZ2lmeSB9ID0gcmVxdWlyZSgnanNvbmZpbGUvdXRpbHMnKVxuY29uc3QgeyBvdXRwdXRGaWxlIH0gPSByZXF1aXJlKCcuLi9vdXRwdXQnKVxuXG5hc3luYyBmdW5jdGlvbiBvdXRwdXRKc29uIChmaWxlLCBkYXRhLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qgc3RyID0gc3RyaW5naWZ5KGRhdGEsIG9wdGlvbnMpXG5cbiAgYXdhaXQgb3V0cHV0RmlsZShmaWxlLCBzdHIsIG9wdGlvbnMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3V0cHV0SnNvblxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHN0cmluZ2lmeSB9ID0gcmVxdWlyZSgnanNvbmZpbGUvdXRpbHMnKVxuY29uc3QgeyBvdXRwdXRGaWxlU3luYyB9ID0gcmVxdWlyZSgnLi4vb3V0cHV0JylcblxuZnVuY3Rpb24gb3V0cHV0SnNvblN5bmMgKGZpbGUsIGRhdGEsIG9wdGlvbnMpIHtcbiAgY29uc3Qgc3RyID0gc3RyaW5naWZ5KGRhdGEsIG9wdGlvbnMpXG5cbiAgb3V0cHV0RmlsZVN5bmMoZmlsZSwgc3RyLCBvcHRpb25zKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG91dHB1dEpzb25TeW5jXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuY29uc3QganNvbkZpbGUgPSByZXF1aXJlKCcuL2pzb25maWxlJylcblxuanNvbkZpbGUub3V0cHV0SnNvbiA9IHUocmVxdWlyZSgnLi9vdXRwdXQtanNvbicpKVxuanNvbkZpbGUub3V0cHV0SnNvblN5bmMgPSByZXF1aXJlKCcuL291dHB1dC1qc29uLXN5bmMnKVxuLy8gYWxpYXNlc1xuanNvbkZpbGUub3V0cHV0SlNPTiA9IGpzb25GaWxlLm91dHB1dEpzb25cbmpzb25GaWxlLm91dHB1dEpTT05TeW5jID0ganNvbkZpbGUub3V0cHV0SnNvblN5bmNcbmpzb25GaWxlLndyaXRlSlNPTiA9IGpzb25GaWxlLndyaXRlSnNvblxuanNvbkZpbGUud3JpdGVKU09OU3luYyA9IGpzb25GaWxlLndyaXRlSnNvblN5bmNcbmpzb25GaWxlLnJlYWRKU09OID0ganNvbkZpbGUucmVhZEpzb25cbmpzb25GaWxlLnJlYWRKU09OU3luYyA9IGpzb25GaWxlLnJlYWRKc29uU3luY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGpzb25GaWxlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgY29weVN5bmMgPSByZXF1aXJlKCcuLi9jb3B5LXN5bmMnKS5jb3B5U3luY1xuY29uc3QgcmVtb3ZlU3luYyA9IHJlcXVpcmUoJy4uL3JlbW92ZScpLnJlbW92ZVN5bmNcbmNvbnN0IG1rZGlycFN5bmMgPSByZXF1aXJlKCcuLi9ta2RpcnMnKS5ta2RpcnBTeW5jXG5jb25zdCBzdGF0ID0gcmVxdWlyZSgnLi4vdXRpbC9zdGF0JylcblxuZnVuY3Rpb24gbW92ZVN5bmMgKHNyYywgZGVzdCwgb3B0cykge1xuICBvcHRzID0gb3B0cyB8fCB7fVxuICBjb25zdCBvdmVyd3JpdGUgPSBvcHRzLm92ZXJ3cml0ZSB8fCBvcHRzLmNsb2JiZXIgfHwgZmFsc2VcblxuICBjb25zdCB7IHNyY1N0YXQgfSA9IHN0YXQuY2hlY2tQYXRoc1N5bmMoc3JjLCBkZXN0LCAnbW92ZScpXG4gIHN0YXQuY2hlY2tQYXJlbnRQYXRoc1N5bmMoc3JjLCBzcmNTdGF0LCBkZXN0LCAnbW92ZScpXG4gIG1rZGlycFN5bmMocGF0aC5kaXJuYW1lKGRlc3QpKVxuICByZXR1cm4gZG9SZW5hbWUoc3JjLCBkZXN0LCBvdmVyd3JpdGUpXG59XG5cbmZ1bmN0aW9uIGRvUmVuYW1lIChzcmMsIGRlc3QsIG92ZXJ3cml0ZSkge1xuICBpZiAob3ZlcndyaXRlKSB7XG4gICAgcmVtb3ZlU3luYyhkZXN0KVxuICAgIHJldHVybiByZW5hbWUoc3JjLCBkZXN0LCBvdmVyd3JpdGUpXG4gIH1cbiAgaWYgKGZzLmV4aXN0c1N5bmMoZGVzdCkpIHRocm93IG5ldyBFcnJvcignZGVzdCBhbHJlYWR5IGV4aXN0cy4nKVxuICByZXR1cm4gcmVuYW1lKHNyYywgZGVzdCwgb3ZlcndyaXRlKVxufVxuXG5mdW5jdGlvbiByZW5hbWUgKHNyYywgZGVzdCwgb3ZlcndyaXRlKSB7XG4gIHRyeSB7XG4gICAgZnMucmVuYW1lU3luYyhzcmMsIGRlc3QpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIuY29kZSAhPT0gJ0VYREVWJykgdGhyb3cgZXJyXG4gICAgcmV0dXJuIG1vdmVBY3Jvc3NEZXZpY2Uoc3JjLCBkZXN0LCBvdmVyd3JpdGUpXG4gIH1cbn1cblxuZnVuY3Rpb24gbW92ZUFjcm9zc0RldmljZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUpIHtcbiAgY29uc3Qgb3B0cyA9IHtcbiAgICBvdmVyd3JpdGUsXG4gICAgZXJyb3JPbkV4aXN0OiB0cnVlXG4gIH1cbiAgY29weVN5bmMoc3JjLCBkZXN0LCBvcHRzKVxuICByZXR1cm4gcmVtb3ZlU3luYyhzcmMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbW92ZVN5bmNcbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1vdmVTeW5jOiByZXF1aXJlKCcuL21vdmUtc3luYycpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgY29weSA9IHJlcXVpcmUoJy4uL2NvcHknKS5jb3B5XG5jb25zdCByZW1vdmUgPSByZXF1aXJlKCcuLi9yZW1vdmUnKS5yZW1vdmVcbmNvbnN0IG1rZGlycCA9IHJlcXVpcmUoJy4uL21rZGlycycpLm1rZGlycFxuY29uc3QgcGF0aEV4aXN0cyA9IHJlcXVpcmUoJy4uL3BhdGgtZXhpc3RzJykucGF0aEV4aXN0c1xuY29uc3Qgc3RhdCA9IHJlcXVpcmUoJy4uL3V0aWwvc3RhdCcpXG5cbmZ1bmN0aW9uIG1vdmUgKHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBvcHRzXG4gICAgb3B0cyA9IHt9XG4gIH1cblxuICBjb25zdCBvdmVyd3JpdGUgPSBvcHRzLm92ZXJ3cml0ZSB8fCBvcHRzLmNsb2JiZXIgfHwgZmFsc2VcblxuICBzdGF0LmNoZWNrUGF0aHMoc3JjLCBkZXN0LCAnbW92ZScsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBjb25zdCB7IHNyY1N0YXQgfSA9IHN0YXRzXG4gICAgc3RhdC5jaGVja1BhcmVudFBhdGhzKHNyYywgc3JjU3RhdCwgZGVzdCwgJ21vdmUnLCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIG1rZGlycChwYXRoLmRpcm5hbWUoZGVzdCksIGVyciA9PiB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICAgIHJldHVybiBkb1JlbmFtZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSwgY2IpXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGRvUmVuYW1lIChzcmMsIGRlc3QsIG92ZXJ3cml0ZSwgY2IpIHtcbiAgaWYgKG92ZXJ3cml0ZSkge1xuICAgIHJldHVybiByZW1vdmUoZGVzdCwgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICByZXR1cm4gcmVuYW1lKHNyYywgZGVzdCwgb3ZlcndyaXRlLCBjYilcbiAgICB9KVxuICB9XG4gIHBhdGhFeGlzdHMoZGVzdCwgKGVyciwgZGVzdEV4aXN0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgaWYgKGRlc3RFeGlzdHMpIHJldHVybiBjYihuZXcgRXJyb3IoJ2Rlc3QgYWxyZWFkeSBleGlzdHMuJykpXG4gICAgcmV0dXJuIHJlbmFtZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSwgY2IpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJlbmFtZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGNiKSB7XG4gIGZzLnJlbmFtZShzcmMsIGRlc3QsIGVyciA9PiB7XG4gICAgaWYgKCFlcnIpIHJldHVybiBjYigpXG4gICAgaWYgKGVyci5jb2RlICE9PSAnRVhERVYnKSByZXR1cm4gY2IoZXJyKVxuICAgIHJldHVybiBtb3ZlQWNyb3NzRGV2aWNlKHNyYywgZGVzdCwgb3ZlcndyaXRlLCBjYilcbiAgfSlcbn1cblxuZnVuY3Rpb24gbW92ZUFjcm9zc0RldmljZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGNiKSB7XG4gIGNvbnN0IG9wdHMgPSB7XG4gICAgb3ZlcndyaXRlLFxuICAgIGVycm9yT25FeGlzdDogdHJ1ZVxuICB9XG4gIGNvcHkoc3JjLCBkZXN0LCBvcHRzLCBlcnIgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgcmV0dXJuIHJlbW92ZShzcmMsIGNiKVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1vdmVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1vdmU6IHUocmVxdWlyZSgnLi9tb3ZlJykpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBFeHBvcnQgcHJvbWlzZWlmaWVkIGdyYWNlZnVsLWZzOlxuICAuLi5yZXF1aXJlKCcuL2ZzJyksXG4gIC8vIEV4cG9ydCBleHRyYSBtZXRob2RzOlxuICAuLi5yZXF1aXJlKCcuL2NvcHktc3luYycpLFxuICAuLi5yZXF1aXJlKCcuL2NvcHknKSxcbiAgLi4ucmVxdWlyZSgnLi9lbXB0eScpLFxuICAuLi5yZXF1aXJlKCcuL2Vuc3VyZScpLFxuICAuLi5yZXF1aXJlKCcuL2pzb24nKSxcbiAgLi4ucmVxdWlyZSgnLi9ta2RpcnMnKSxcbiAgLi4ucmVxdWlyZSgnLi9tb3ZlLXN5bmMnKSxcbiAgLi4ucmVxdWlyZSgnLi9tb3ZlJyksXG4gIC4uLnJlcXVpcmUoJy4vb3V0cHV0JyksXG4gIC4uLnJlcXVpcmUoJy4vcGF0aC1leGlzdHMnKSxcbiAgLi4ucmVxdWlyZSgnLi9yZW1vdmUnKVxufVxuXG4vLyBFeHBvcnQgZnMucHJvbWlzZXMgYXMgYSBnZXR0ZXIgcHJvcGVydHkgc28gdGhhdCB3ZSBkb24ndCB0cmlnZ2VyXG4vLyBFeHBlcmltZW50YWxXYXJuaW5nIGJlZm9yZSBmcy5wcm9taXNlcyBpcyBhY3R1YWxseSBhY2Nlc3NlZC5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKVxuaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZnMsICdwcm9taXNlcycpKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ3Byb21pc2VzJywge1xuICAgIGdldCAoKSB7IHJldHVybiBmcy5wcm9taXNlcyB9XG4gIH0pXG59XG4iLCAiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcblxuY29uc3QgQ0RLX09VVERJUl9QUkVGSVggPSAnY2RrLWludGVnLm91dCc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHNpbmdsZSBpbnRlZ3JhdGlvbiB0ZXN0XG4gKlxuICogVGhpcyB0eXBlIGlzIGEgZGF0YS1vbmx5IHN0cnVjdHVyZSwgc28gaXQgY2FuIHRyaXZpYWxseSBiZSBwYXNzZWQgdG8gd29ya2Vycy5cbiAqIERlcml2ZWQgYXR0cmlidXRlcyBhcmUgY2FsY3VsYXRlZCB1c2luZyB0aGUgYEludGVnVGVzdGAgY2xhc3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdUZXN0SW5mbyB7XG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBmaWxlIHRvIHJ1blxuICAgKlxuICAgKiBQYXRoIGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJvb3QgZGlyZWN0b3J5IHdlIGRpc2NvdmVyZWQgdGhpcyB0ZXN0IGZyb21cbiAgICpcbiAgICogUGF0aCBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICovXG4gIHJlYWRvbmx5IGRpc2NvdmVyeVJvb3Q6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZXJpdmVkIGluZm9ybWF0aW9uIGZvciBJbnRlZ1Rlc3RzXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnRlZ1Rlc3Qge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gcnVuXG4gICAqXG4gICAqIFBhdGggaXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZmlsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogUmVsYXRpdmUgcGF0aCB0byB0aGUgZmlsZSB0byBydW5cbiAgICpcbiAgICogUmVsYXRpdmUgZnJvbSB0aGUgXCJkaXNjb3Zlcnkgcm9vdFwiLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRpc2NvdmVyeVJlbGF0aXZlRmlsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGZpbGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhYnNvbHV0ZUZpbGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERpcmVjdG9yeSB0aGUgdGVzdCBpcyBpblxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEaXNwbGF5IG5hbWUgZm9yIHRoZSB0ZXN0XG4gICAqXG4gICAqIERlcGVuZHMgb24gdGhlIGRpc2NvdmVyeSBkaXJlY3RvcnkuXG4gICAqXG4gICAqIExvb2tzIGxpa2UgYGludGVnLm15dGVzdGAgb3IgYHBhY2thZ2UvdGVzdC9pbnRlZy5teXRlc3RgLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRlc3ROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggb2YgdGhlIHNuYXBzaG90IGRpcmVjdG9yeSBmb3IgdGhpcyB0ZXN0XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc25hcHNob3REaXI6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgdGVtcG9yYXJ5IG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoaXMgdGVzdFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRlbXBvcmFyeU91dHB1dERpcjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBpbmZvOiBJbnRlZ1Rlc3RJbmZvKSB7XG4gICAgdGhpcy5hYnNvbHV0ZUZpbGVOYW1lID0gcGF0aC5yZXNvbHZlKGluZm8uZmlsZU5hbWUpO1xuICAgIHRoaXMuZmlsZU5hbWUgPSBwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIGluZm8uZmlsZU5hbWUpO1xuXG4gICAgY29uc3QgcGFyc2VkID0gcGF0aC5wYXJzZSh0aGlzLmZpbGVOYW1lKTtcbiAgICB0aGlzLmRpc2NvdmVyeVJlbGF0aXZlRmlsZU5hbWUgPSBwYXRoLnJlbGF0aXZlKGluZm8uZGlzY292ZXJ5Um9vdCwgaW5mby5maWxlTmFtZSk7XG4gICAgdGhpcy5kaXJlY3RvcnkgPSBwYXJzZWQuZGlyO1xuXG4gICAgLy8gaWYgd2UgYXJlIHJ1bm5pbmcgaW4gYSBwYWNrYWdlIGRpcmVjdG9yeSB0aGVuIGp1c3QgdXNlIHRoZSBmaWxlTmFtZVxuICAgIC8vIGFzIHRoZSB0ZXN0bmFtZSwgYnV0IGlmIHdlIGFyZSBydW5uaW5nIGluIGEgcGFyZW50IGRpcmVjdG9yeSB3aXRoXG4gICAgLy8gbXVsdGlwbGUgcGFja2FnZXMgdGhlbiB1c2UgdGhlIGRpcmVjdG9yeS9maWxlbmFtZSBhcyB0aGUgdGVzdG5hbWVcbiAgICAvL1xuICAgIC8vIExvb2tzIGVpdGhlciBsaWtlIGBpbnRlZy5teXRlc3RgIG9yIGBwYWNrYWdlL3Rlc3QvaW50ZWcubXl0ZXN0YC5cbiAgICBjb25zdCByZWxEaXNjb3ZlcnlSb290ID0gcGF0aC5yZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBpbmZvLmRpc2NvdmVyeVJvb3QpO1xuICAgIHRoaXMudGVzdE5hbWUgPSB0aGlzLmRpcmVjdG9yeSA9PT0gcGF0aC5qb2luKHJlbERpc2NvdmVyeVJvb3QsICd0ZXN0JykgfHwgdGhpcy5kaXJlY3RvcnkgPT09IHBhdGguam9pbihyZWxEaXNjb3ZlcnlSb290KVxuICAgICAgPyBwYXJzZWQubmFtZVxuICAgICAgOiBwYXRoLmpvaW4ocGF0aC5yZWxhdGl2ZSh0aGlzLmluZm8uZGlzY292ZXJ5Um9vdCwgcGFyc2VkLmRpciksIHBhcnNlZC5uYW1lKTtcblxuICAgIGNvbnN0IG5ha2VkVGVzdE5hbWUgPSBwYXJzZWQubmFtZS5zbGljZSg2KTsgLy8gTGVhdmUgbmFtZSB3aXRob3V0ICdpbnRlZy4nIGFuZCAnLnRzJ1xuICAgIHRoaXMuc25hcHNob3REaXIgPSBwYXRoLmpvaW4odGhpcy5kaXJlY3RvcnksIGAke25ha2VkVGVzdE5hbWV9LmludGVnLnNuYXBzaG90YCk7XG4gICAgdGhpcy50ZW1wb3JhcnlPdXRwdXREaXIgPSBwYXRoLmpvaW4odGhpcy5kaXJlY3RvcnksIGAke0NES19PVVRESVJfUFJFRklYfS4ke25ha2VkVGVzdE5hbWV9YCk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHRlc3QgbWF0Y2hlcyB0aGUgdXNlci1naXZlbiBuYW1lXG4gICAqXG4gICAqIFdlIGFyZSB2ZXJ5IGxlbmllbnQgaGVyZS4gQSBuYW1lIG1hdGNoZXMgaWYgaXQgbWF0Y2hlczpcbiAgICpcbiAgICogLSBUaGUgQ1dELXJlbGF0aXZlIGZpbGVuYW1lXG4gICAqIC0gVGhlIGRpc2NvdmVyeSByb290LXJlbGF0aXZlIGZpbGVuYW1lXG4gICAqIC0gVGhlIHN1aXRlIG5hbWVcbiAgICogLSBUaGUgYWJzb2x1dGUgZmlsZW5hbWVcbiAgICovXG4gIHB1YmxpYyBtYXRjaGVzKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBbXG4gICAgICB0aGlzLmZpbGVOYW1lLFxuICAgICAgdGhpcy5kaXNjb3ZlcnlSZWxhdGl2ZUZpbGVOYW1lLFxuICAgICAgdGhpcy50ZXN0TmFtZSxcbiAgICAgIHRoaXMuYWJzb2x1dGVGaWxlTmFtZSxcbiAgICBdLmluY2x1ZGVzKG5hbWUpO1xuICB9XG59XG5cbi8qKlxuICogVGhlIGxpc3Qgb2YgdGVzdHMgdG8gcnVuIGNhbiBiZSBwcm92aWRlZCBpbiBhIGZpbGVcbiAqIGluc3RlYWQgb2YgYXMgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ3JhdGlvblRlc3RGaWxlQ29uZmlnIHtcbiAgLyoqXG4gICAqIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgbGlzdCBvZiB0ZXN0c1xuICAgKiBwcm92aWRlZCB3aWxsIGJlIGV4Y2x1ZGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTGlzdCBvZiB0ZXN0cyB0byBpbmNsdWRlIChvciBleGNsdWRlIGlmIGBleGNsdWRlPXRydWVgKVxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdHM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIERpc2NvdmVyIGludGVncmF0aW9uIHRlc3RzXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnRlZ3JhdGlvblRlc3RzIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBkaXJlY3Rvcnk6IHN0cmluZykge1xuICB9XG5cbiAgLyoqXG4gICAqIFRha2VzIGEgZmlsZSBuYW1lIG9mIGEgZmlsZSB0aGF0IGNvbnRhaW5zIGEgbGlzdCBvZiB0ZXN0XG4gICAqIHRvIGVpdGhlciBydW4gb3IgZXhjbHVkZSBhbmQgcmV0dXJucyBhIGxpc3Qgb2YgSW50ZWdyYXRpb24gVGVzdHMgdG8gcnVuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZnJvbUZpbGUoZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8SW50ZWdUZXN0W10+IHtcbiAgICBjb25zdCBmaWxlOiBJbnRlZ3JhdGlvblRlc3RGaWxlQ29uZmlnID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoZmlsZU5hbWUsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpO1xuICAgIGNvbnN0IGZvdW5kVGVzdHMgPSBhd2FpdCB0aGlzLmRpc2NvdmVyKCk7XG5cbiAgICBjb25zdCBhbGxUZXN0cyA9IHRoaXMuZmlsdGVyVGVzdHMoZm91bmRUZXN0cywgZmlsZS50ZXN0cywgZmlsZS5leGNsdWRlKTtcblxuICAgIHJldHVybiBhbGxUZXN0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgdXNlciBwcm92aWRlcyBhIGxpc3Qgb2YgdGVzdHMsIHRoZXNlIGNhbiBlaXRoZXIgYmUgYSBsaXN0IG9mIHRlc3RzIHRvIGluY2x1ZGUgb3IgYSBsaXN0IG9mIHRlc3RzIHRvIGV4Y2x1ZGUuXG4gICAqXG4gICAqIC0gSWYgaXQgaXMgYSBsaXN0IG9mIHRlc3RzIHRvIGluY2x1ZGUgdGhlbiB3ZSBkaXNjb3ZlciBhbGwgYXZhaWxhYmxlIHRlc3RzIGFuZCBjaGVjayB3aGV0aGVyIHRoZXkgaGF2ZSBwcm92aWRlZCB2YWxpZCB0ZXN0cy5cbiAgICogICBJZiB0aGV5IGhhdmUgcHJvdmlkZWQgYSB0ZXN0IG5hbWUgdGhhdCB3ZSBkb24ndCBmaW5kLCB0aGVuIHdlIHdyaXRlIG91dCB0aGF0IGVycm9yIG1lc3NhZ2UuXG4gICAqIC0gSWYgaXQgaXMgYSBsaXN0IG9mIHRlc3RzIHRvIGV4Y2x1ZGUsIHRoZW4gd2UgZGlzY292ZXIgYWxsIGF2YWlsYWJsZSB0ZXN0cyBhbmQgZmlsdGVyIG91dCB0aGUgdGVzdHMgdGhhdCB3ZXJlIHByb3ZpZGVkIGJ5IHRoZSB1c2VyLlxuICAgKi9cbiAgcHJpdmF0ZSBmaWx0ZXJUZXN0cyhkaXNjb3ZlcmVkVGVzdHM6IEludGVnVGVzdFtdLCByZXF1ZXN0ZWRUZXN0cz86IHN0cmluZ1tdLCBleGNsdWRlPzogYm9vbGVhbik6IEludGVnVGVzdFtdIHtcbiAgICBpZiAoIXJlcXVlc3RlZFRlc3RzKSB7XG4gICAgICByZXR1cm4gZGlzY292ZXJlZFRlc3RzO1xuICAgIH1cblxuXG4gICAgY29uc3QgYWxsVGVzdHMgPSBkaXNjb3ZlcmVkVGVzdHMuZmlsdGVyKHQgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IHJlcXVlc3RlZFRlc3RzLnNvbWUocGF0dGVybiA9PiB0Lm1hdGNoZXMocGF0dGVybikpO1xuICAgICAgcmV0dXJuIG1hdGNoZXMgIT09ICEhZXhjbHVkZTsgLy8gTG9va3Mgd2VpcmQgYnV0IGlzIGVxdWFsIHRvIChtYXRjaGVzICYmICFleGNsdWRlKSB8fCAoIW1hdGNoZXMgJiYgZXhjbHVkZSlcbiAgICB9KTtcblxuICAgIC8vIElmIG5vdCBleGNsdWRpbmcsIGFsbCBwYXR0ZXJucyBtdXN0IGhhdmUgbWF0Y2hlZCBhdCBsZWFzdCBvbmUgdGVzdFxuICAgIGlmICghZXhjbHVkZSkge1xuICAgICAgY29uc3QgdW5tYXRjaGVkUGF0dGVybnMgPSByZXF1ZXN0ZWRUZXN0cy5maWx0ZXIocGF0dGVybiA9PiAhZGlzY292ZXJlZFRlc3RzLnNvbWUodCA9PiB0Lm1hdGNoZXMocGF0dGVybikpKTtcbiAgICAgIGZvciAoY29uc3QgdW5tYXRjaGVkIG9mIHVubWF0Y2hlZFBhdHRlcm5zKSB7XG4gICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBObyBzdWNoIGludGVnIHRlc3Q6ICR7dW5tYXRjaGVkfVxcbmApO1xuICAgICAgfVxuICAgICAgaWYgKHVubWF0Y2hlZFBhdHRlcm5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoYEF2YWlsYWJsZSB0ZXN0czogJHtkaXNjb3ZlcmVkVGVzdHMubWFwKHQgPT4gdC5kaXNjb3ZlcnlSZWxhdGl2ZUZpbGVOYW1lKS5qb2luKCcgJyl9XFxuYCk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWxsVGVzdHM7XG4gIH1cblxuICAvKipcbiAgICogVGFrZXMgYW4gb3B0aW9uYWwgbGlzdCBvZiB0ZXN0cyB0byBsb29rIGZvciwgb3RoZXJ3aXNlXG4gICAqIGl0IHdpbGwgbG9vayBmb3IgYWxsIHRlc3RzIGZyb20gdGhlIGRpcmVjdG9yeVxuICAgKlxuICAgKiBAcGFyYW0gdGVzdHMgVGVzdHMgdG8gaW5jbHVkZSBvciBleGNsdWRlLCB1bmRlZmluZWQgbWVhbnMgaW5jbHVkZSBhbGwgdGVzdHMuXG4gICAqIEBwYXJhbSBleGNsdWRlIFdoZXRoZXIgdGhlICd0ZXN0cycgbGlzdCBpcyBpbmNsdXNpdmUgb3IgZXhjbHVzaXZlIChpbmNsdXNpdmUgYnkgZGVmYXVsdCkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZnJvbUNsaUFyZ3ModGVzdHM/OiBzdHJpbmdbXSwgZXhjbHVkZT86IGJvb2xlYW4pOiBQcm9taXNlPEludGVnVGVzdFtdPiB7XG4gICAgY29uc3QgZGlzY292ZXJlZFRlc3RzID0gYXdhaXQgdGhpcy5kaXNjb3ZlcigpO1xuXG4gICAgY29uc3QgYWxsVGVzdHMgPSB0aGlzLmZpbHRlclRlc3RzKGRpc2NvdmVyZWRUZXN0cywgdGVzdHMsIGV4Y2x1ZGUpO1xuXG4gICAgcmV0dXJuIGFsbFRlc3RzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkaXNjb3ZlcigpOiBQcm9taXNlPEludGVnVGVzdFtdPiB7XG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB0aGlzLnJlYWRUcmVlKCk7XG4gICAgY29uc3QgaW50ZWdzID0gZmlsZXMuZmlsdGVyKGZpbGVOYW1lID0+IHBhdGguYmFzZW5hbWUoZmlsZU5hbWUpLnN0YXJ0c1dpdGgoJ2ludGVnLicpICYmIHBhdGguYmFzZW5hbWUoZmlsZU5hbWUpLmVuZHNXaXRoKCcuanMnKSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChpbnRlZ3MpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXF1ZXN0KGZpbGVzOiBzdHJpbmdbXSk6IEludGVnVGVzdFtdIHtcbiAgICByZXR1cm4gZmlsZXMubWFwKGZpbGVOYW1lID0+IG5ldyBJbnRlZ1Rlc3QoeyBkaXNjb3ZlcnlSb290OiB0aGlzLmRpcmVjdG9yeSwgZmlsZU5hbWUgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWFkVHJlZSgpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgcmV0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlY3Vyc2UoZGlyOiBzdHJpbmcpIHtcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZnMucmVhZGRpcihkaXIpO1xuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKGRpciwgZmlsZSk7XG4gICAgICAgIGNvbnN0IHN0YXRmID0gYXdhaXQgZnMuc3RhdChmdWxsUGF0aCk7XG4gICAgICAgIGlmIChzdGF0Zi5pc0ZpbGUoKSkgeyByZXQucHVzaChmdWxsUGF0aCk7IH1cbiAgICAgICAgaWYgKHN0YXRmLmlzRGlyZWN0b3J5KCkpIHsgYXdhaXQgcmVjdXJzZShwYXRoLmpvaW4oZnVsbFBhdGgpKTsgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IHJlY3Vyc2UodGhpcy5kaXJlY3RvcnkpO1xuICAgIHJldHVybiByZXQ7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBmb3JtYXQgfSBmcm9tICd1dGlsJztcbmltcG9ydCB7IFJlc291cmNlSW1wYWN0IH0gZnJvbSAnQGF3cy1jZGsvY2xvdWRmb3JtYXRpb24tZGlmZic7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgKiBhcyBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IEludGVnVGVzdEluZm8gfSBmcm9tICcuLi9ydW5uZXIvaW50ZWdyYXRpb24tdGVzdHMnO1xuXG4vKipcbiAqIFRoZSBhZ2dyZWdhdGUgcmVzdWx0cyBmcm9tIHJ1bm5pbmcgYXNzZXJ0aW9ucyBvbiBhIHRlc3QgY2FzZVxuICovXG5leHBvcnQgdHlwZSBBc3NlcnRpb25SZXN1bHRzID0geyBbaWQ6IHN0cmluZ106IEFzc2VydGlvblJlc3VsdCB9O1xuXG4vKipcbiAqIFRoZSByZXN1bHQgb2YgYW4gaW5kaXZpZHVhbCBhc3NlcnRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3NlcnRpb25SZXN1bHQge1xuICAvKipcbiAgICogVGhlIGFzc2VydGlvbiBtZXNzYWdlLiBJZiB0aGUgYXNzZXJ0aW9uIGZhaWxlZCwgdGhpcyB3aWxsXG4gICAqIGluY2x1ZGUgdGhlIHJlYXNvbi5cbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYXNzZXJ0aW9uIHN1Y2NlZWRlZCBvciBmYWlsZWRcbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1czogJ3N1Y2Nlc3MnIHwgJ2ZhaWwnO1xufVxuXG4vKipcbiAqIENvbmZpZyBmb3IgYW4gaW50ZWdyYXRpb24gdGVzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVnVGVzdFdvcmtlckNvbmZpZyBleHRlbmRzIEludGVnVGVzdEluZm8ge1xuICAvKipcbiAgICogQSBsaXN0IG9mIGFueSBkZXN0cnVjdGl2ZSBjaGFuZ2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICByZWFkb25seSBkZXN0cnVjdGl2ZUNoYW5nZXM/OiBEZXN0cnVjdGl2ZUNoYW5nZVtdO1xufVxuXG4vKipcbiAqIEluZm9ybWF0aW9uIG9uIGFueSBkZXN0cnVjdGl2ZSBjaGFuZ2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVzdHJ1Y3RpdmVDaGFuZ2Uge1xuICAvKipcbiAgICogVGhlIGxvZ2ljYWxJZCBvZiB0aGUgcmVzb3VyY2Ugd2l0aCBhIGRlc3RydWN0aXZlIGNoYW5nZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9naWNhbElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzdGFjayB0aGF0IGNvbnRhaW5zIHRoZSBkZXN0cnVjdGl2ZSBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW1wYWN0IG9mIHRoZSBkZXN0cnVjdGl2ZSBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IGltcGFjdDogUmVzb3VyY2VJbXBhY3Q7XG59XG5cblxuLyoqXG4gKiBSZXByZXNlbnRzIGludGVncmF0aW9uIHRlc3RzIG1ldHJpY3MgZm9yIGEgZ2l2ZW4gd29ya2VyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdSdW5uZXJNZXRyaWNzIHtcbiAgLyoqXG4gICAqIFRoZSByZWdpb24gdGhlIHRlc3Qgd2FzIHJ1biBpblxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0b3RhbCBkdXJhdGlvbiBvZiB0aGUgd29ya2VyLlxuICAgKiBUaGlzIHdpbGwgYmUgdGhlIHN1bSBvZiBhbGwgaW5kaXZpZHVhbCB0ZXN0IGR1cmF0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgZHVyYXRpb246IG51bWJlcjtcblxuICAvKipcbiAgICogQ29udGFpbnMgdGhlIGR1cmF0aW9uIG9mIGluZGl2aWR1YWwgdGVzdHMgdGhhdCB0aGVcbiAgICogd29ya2VyIGV4ZWN1dGVkLlxuICAgKlxuICAgKiBNYXAgb2YgdGVzdE5hbWUgdG8gZHVyYXRpb24uXG4gICAqL1xuICByZWFkb25seSB0ZXN0czogeyBbdGVzdE5hbWU6IHN0cmluZ106IG51bWJlciB9O1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvZmlsZSB0aGF0IHdhcyB1c2VkIHRvIHJ1biB0aGUgdGVzdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgcHJvZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTbmFwc2hvdFZlcmlmaWNhdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogUmV0YWluIGZhaWxlZCBzbmFwc2hvdCBjb21wYXJpc29uc1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcmV0YWluPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVmVyYm9zZSBtb2RlXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB2ZXJib3NlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBJbnRlZ3JhdGlvbiB0ZXN0IHJlc3VsdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ0JhdGNoUmVzcG9uc2Uge1xuICAvKipcbiAgICogTGlzdCBvZiBmYWlsZWQgdGVzdHNcbiAgICovXG4gIHJlYWRvbmx5IGZhaWxlZFRlc3RzOiBJbnRlZ1Rlc3RJbmZvW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgSW50ZWdyYXRpb24gdGVzdCBtZXRyaWNzLiBFYWNoIGVudHJ5IGluIHRoZVxuICAgKiBsaXN0IHJlcHJlc2VudHMgbWV0cmljcyBmcm9tIGEgc2luZ2xlIHdvcmtlciAoYWNjb3VudCArIHJlZ2lvbikuXG4gICAqL1xuICByZWFkb25seSBtZXRyaWNzOiBJbnRlZ1J1bm5lck1ldHJpY3NbXTtcbn1cblxuLyoqXG4gKiBDb21tb24gb3B0aW9ucyBmb3IgcnVubmluZyBpbnRlZ3JhdGlvbiB0ZXN0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVnVGVzdE9wdGlvbnMge1xuICAvKipcbiAgICogQSBsaXN0IG9mIGludGVncmF0aW9uIHRlc3RzIHRvIHJ1blxuICAgKiBpbiB0aGlzIGJhdGNoXG4gICAqL1xuICByZWFkb25seSB0ZXN0czogSW50ZWdUZXN0V29ya2VyQ29uZmlnW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIGRlc3Ryb3kgdGhlIHN0YWNrcyBhdCB0aGVcbiAgICogZW5kIG9mIHRoZSB0ZXN0XG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNsZWFuPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hlbiB0aGlzIGlzIHNldCB0byBgdHJ1ZWAgdGhlIHNuYXBzaG90IHdpbGxcbiAgICogYmUgY3JlYXRlZCBfd2l0aG91dF8gcnVubmluZyB0aGUgaW50ZWdyYXRpb24gdGVzdFxuICAgKiBUaGUgcmVzdWx0aW5nIHNuYXBzaG90IFNIT1VMRCBOT1QgYmUgY2hlY2tlZCBpblxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZHJ5UnVuPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBlbmFibGUgdmVyYm9zZSBsb2dnaW5nXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB2ZXJib3NlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZSBzdGFjayB1cGRhdGUgd29ya2Zsb3cgd2lsbCBiZSBkaXNhYmxlZFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSB1cGRhdGVXb3JrZmxvdz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBwb3NzaWJsZSByZWFzb25zIGZvciBhIGRpYWdub3N0aWNcbiAqL1xuZXhwb3J0IGVudW0gRGlhZ25vc3RpY1JlYXNvbiB7XG4gIC8qKlxuICAgKiBUaGUgaW50ZWdyYXRpb24gdGVzdCBmYWlsZWQgYmVjYXVzZSB0aGVyZVxuICAgKiBpcyBub3QgZXhpc3Rpbmcgc25hcHNob3RcbiAgICovXG4gIE5PX1NOQVBTSE9UID0gJ05PX1NOQVBTSE9UJyxcblxuICAvKipcbiAgICogVGhlIGludGVncmF0aW9uIHRlc3QgZmFpbGVkXG4gICAqL1xuICBURVNUX0ZBSUxFRCA9ICdURVNUX0ZBSUxFRCcsXG5cbiAgLyoqXG4gICAqIFRoZXJlIHdhcyBhbiBlcnJvciBydW5uaW5nIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0XG4gICAqL1xuICBURVNUX0VSUk9SID0gJ1RFU1RfRVJST1InLFxuXG4gIC8qKlxuICAgKiBUaGUgc25hcHNob3QgdGVzdCBmYWlsZWQgYmVjYXVzZSB0aGUgYWN0dWFsXG4gICAqIHNuYXBzaG90IHdhcyBkaWZmZXJlbnQgdGhhbiB0aGUgZXhwZWN0ZWQgc25hcHNob3RcbiAgICovXG4gIFNOQVBTSE9UX0ZBSUxFRCA9ICdTTkFQU0hPVF9GQUlMRUQnLFxuXG4gIC8qKlxuICAgKiBUaGUgc25hcHNob3QgdGVzdCBmYWlsZWQgYmVjYXVzZSB0aGVyZSB3YXMgYW4gZXJyb3IgZXhlY3V0aW5nIGl0XG4gICAqL1xuICBTTkFQU0hPVF9FUlJPUiA9ICdTTkFQU0hPVF9FUlJPUicsXG5cbiAgLyoqXG4gICAqIFRoZSBzbmFwc2hvdCB0ZXN0IHN1Y2NlZWRlZFxuICAgKi9cbiAgU05BUFNIT1RfU1VDQ0VTUyA9ICdTTkFQU0hPVF9TVUNDRVNTJyxcblxuICAvKipcbiAgICogVGhlIGludGVncmF0aW9uIHRlc3Qgc3VjY2VlZGVkXG4gICAqL1xuICBURVNUX1NVQ0NFU1MgPSAnVEVTVF9TVUNDRVNTJyxcblxuICAvKipcbiAgICogVGhlIGFzc2VydGlvbiBmYWlsZWRcbiAgICovXG4gIEFTU0VSVElPTl9GQUlMRUQgPSAnQVNTRVJUSU9OX0ZBSUxFRCcsXG59XG5cbi8qKlxuICogSW50ZWdyYXRpb24gdGVzdCBkaWFnbm9zdGljc1xuICogVGhpcyBpcyB1c2VkIHRvIHJlcG9ydCBiYWNrIHRoZSBzdGF0dXMgb2YgZWFjaCB0ZXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlhZ25vc3RpYyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdGVzdFxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRpYWdub3N0aWMgbWVzc2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZSBpdCB0b29rIHRvIHJ1biB0aGUgdGVzdFxuICAgKi9cbiAgcmVhZG9ubHkgZHVyYXRpb24/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSByZWFzb24gZm9yIHRoZSBkaWFnbm9zdGljXG4gICAqL1xuICByZWFkb25seSByZWFzb246IERpYWdub3N0aWNSZWFzb247XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgbWVzc2FnZXMgdG8gcHJpbnRcbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxNZXNzYWdlcz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRTdW1tYXJ5KHRvdGFsOiBudW1iZXIsIGZhaWxlZDogbnVtYmVyKTogdm9pZCB7XG4gIGlmIChmYWlsZWQgPiAwKSB7XG4gICAgbG9nZ2VyLnByaW50KCclczogICAgJXMgJXMsICVzIHRvdGFsJywgY2hhbGsuYm9sZCgnVGVzdHMnKSwgY2hhbGsucmVkKGZhaWxlZCksIGNoYWxrLnJlZCgnZmFpbGVkJyksIHRvdGFsKTtcbiAgfSBlbHNlIHtcbiAgICBsb2dnZXIucHJpbnQoJyVzOiAgICAlcyAlcywgJXMgdG90YWwnLCBjaGFsay5ib2xkKCdUZXN0cycpLCBjaGFsay5ncmVlbih0b3RhbCksIGNoYWxrLmdyZWVuKCdwYXNzZWQnKSwgdG90YWwpO1xuICB9XG59XG5cbi8qKlxuICogRm9ybWF0IHRoZSBhc3NlcnRpb24gcmVzdWx0cyBzbyB0aGF0IHRoZSByZXN1bHRzIGNhbiBiZVxuICogcHJpbnRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0QXNzZXJ0aW9uUmVzdWx0cyhyZXN1bHRzOiBBc3NlcnRpb25SZXN1bHRzKTogc3RyaW5nIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdHMpXG4gICAgLm1hcCgoW2lkLCByZXN1bHRdKSA9PiBmb3JtYXQoJyVzXFxuJXMnLCBpZCwgcmVzdWx0Lm1lc3NhZ2UpKVxuICAgIC5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBQcmludCBvdXQgdGhlIHJlc3VsdHMgZnJvbSB0ZXN0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRSZXN1bHRzKGRpYWdub3N0aWM6IERpYWdub3N0aWMpOiB2b2lkIHtcbiAgc3dpdGNoIChkaWFnbm9zdGljLnJlYXNvbikge1xuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5TTkFQU0hPVF9TVUNDRVNTOlxuICAgICAgbG9nZ2VyLnN1Y2Nlc3MoJyAgVU5DSEFOR0VEICAlcyAlcycsIGRpYWdub3N0aWMudGVzdE5hbWUsIGNoYWxrLmdyYXkoYCR7ZGlhZ25vc3RpYy5kdXJhdGlvbn1zYCkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEaWFnbm9zdGljUmVhc29uLlRFU1RfU1VDQ0VTUzpcbiAgICAgIGxvZ2dlci5zdWNjZXNzKCcgIFNVQ0NFU1MgICAgJXMgJXMnLCBkaWFnbm9zdGljLnRlc3ROYW1lLCBjaGFsay5ncmF5KGAke2RpYWdub3N0aWMuZHVyYXRpb259c2ApKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5OT19TTkFQU0hPVDpcbiAgICAgIGxvZ2dlci5lcnJvcignICBORVcgICAgICAgICVzICVzJywgZGlhZ25vc3RpYy50ZXN0TmFtZSwgY2hhbGsuZ3JheShgJHtkaWFnbm9zdGljLmR1cmF0aW9ufXNgKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uU05BUFNIT1RfRkFJTEVEOlxuICAgICAgbG9nZ2VyLmVycm9yKCcgIENIQU5HRUQgICAgJXMgJXNcXG4gICAgICAlcycsIGRpYWdub3N0aWMudGVzdE5hbWUsIGNoYWxrLmdyYXkoYCR7ZGlhZ25vc3RpYy5kdXJhdGlvbn1zYCksIGRpYWdub3N0aWMubWVzc2FnZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uU05BUFNIT1RfRVJST1I6XG4gICAgY2FzZSBEaWFnbm9zdGljUmVhc29uLlRFU1RfRVJST1I6XG4gICAgICBsb2dnZXIuZXJyb3IoJyAgRVJST1IgICAgICAlcyAlc1xcbiAgICAgICVzJywgZGlhZ25vc3RpYy50ZXN0TmFtZSwgY2hhbGsuZ3JheShgJHtkaWFnbm9zdGljLmR1cmF0aW9ufXNgKSwgZGlhZ25vc3RpYy5tZXNzYWdlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5URVNUX0ZBSUxFRDpcbiAgICAgIGxvZ2dlci5lcnJvcignICBGQUlMRUQgICAgICVzICVzXFxuICAgICAgJXMnLCBkaWFnbm9zdGljLnRlc3ROYW1lLCBjaGFsay5ncmF5KGAke2RpYWdub3N0aWMuZHVyYXRpb259c2ApLCBkaWFnbm9zdGljLm1lc3NhZ2UpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEaWFnbm9zdGljUmVhc29uLkFTU0VSVElPTl9GQUlMRUQ6XG4gICAgICBsb2dnZXIuZXJyb3IoJyAgQVNTRVJUICAgICAlcyAlc1xcbiAgICAgICVzJywgZGlhZ25vc3RpYy50ZXN0TmFtZSwgY2hhbGsuZ3JheShgJHtkaWFnbm9zdGljLmR1cmF0aW9ufXNgKSwgZGlhZ25vc3RpYy5tZXNzYWdlKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGZvciAoY29uc3QgYWRkbCBvZiBkaWFnbm9zdGljLmFkZGl0aW9uYWxNZXNzYWdlcyA/PyBbXSkge1xuICAgIGxvZ2dlci5wcmludChgICAgICAgJHthZGRsfWApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmludExhZ2dhcmRzKHRlc3ROYW1lczogU2V0PHN0cmluZz4pIHtcbiAgY29uc3QgcGFydHMgPSBbXG4gICAgJyAgJyxcbiAgICBgV2FpdGluZyBmb3IgJHt0ZXN0TmFtZXMuc2l6ZX0gbW9yZWAsXG4gICAgdGVzdE5hbWVzLnNpemUgPCAxMCA/IFsnKCcsIEFycmF5LmZyb20odGVzdE5hbWVzKS5qb2luKCcsICcpLCAnKSddLmpvaW4oJycpIDogJycsXG4gIF07XG5cbiAgbG9nZ2VyLnByaW50KGNoYWxrLmdyZXkocGFydHMuZmlsdGVyKHggPT4geCkuam9pbignICcpKSk7XG59IiwgIi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIENESyBFeGVjXG5pbXBvcnQgeyBzcGF3blN5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcblxuLyoqXG4gKiBPdXIgb3duIGV4ZWN1dGUgZnVuY3Rpb24gd2hpY2ggZG9lc24ndCB1c2Ugc2hlbGxzIGFuZCBzdHJpbmdzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjb21tYW5kTGluZTogc3RyaW5nW10sIG9wdGlvbnM6IHsgY3dkPzogc3RyaW5nLCB2ZXJib3NlPzogYm9vbGVhbiwgZW52PzogYW55IH0gPSB7IH0pOiBhbnkge1xuICBjb25zdCBwcm9jID0gc3Bhd25TeW5jKGNvbW1hbmRMaW5lWzBdLCBjb21tYW5kTGluZS5zbGljZSgxKSwge1xuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgb3B0aW9ucy52ZXJib3NlID8gJ2luaGVyaXQnIDogJ3BpcGUnXSwgLy8gaW5oZXJpdCBTVERFUlIgaW4gdmVyYm9zZSBtb2RlXG4gICAgZW52OiB7XG4gICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgIC4uLm9wdGlvbnMuZW52LFxuICAgIH0sXG4gICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgfSk7XG5cbiAgaWYgKHByb2MuZXJyb3IpIHsgdGhyb3cgcHJvYy5lcnJvcjsgfVxuICBpZiAocHJvYy5zdGF0dXMgIT09IDApIHtcbiAgICBpZiAocHJvY2Vzcy5zdGRlcnIpIHsgLy8gd2lsbCBiZSAnbnVsbCcgaW4gdmVyYm9zZSBtb2RlXG4gICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShwcm9jLnN0ZGVycik7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgQ29tbWFuZCBleGl0ZWQgd2l0aCAke3Byb2Muc3RhdHVzID8gYHN0YXR1cyAke3Byb2Muc3RhdHVzfWAgOiBgc2lnbmFsICR7cHJvYy5zaWduYWx9YH1gKTtcbiAgfVxuXG4gIGNvbnN0IG91dHB1dCA9IHByb2Muc3Rkb3V0LnRvU3RyaW5nKCd1dGYtOCcpLnRyaW0oKTtcblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vKipcbiAqIEZsYXR0ZW4gYSBsaXN0IG9mIGxpc3RzIGludG8gYSBsaXN0IG9mIGVsZW1lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuPFQ+KHhzOiBUW11bXSk6IFRbXSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCB4cyk7XG59XG5cbi8qKlxuICogQ2hhaW4gY29tbWFuZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYWluKGNvbW1hbmRzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBjb21tYW5kcy5maWx0ZXIoYyA9PiAhIWMpLmpvaW4oJyAmJiAnKTtcbn1cblxuXG4vKipcbiAqIEEgY2xhc3MgaG9sZGluZyBhIHNldCBvZiBpdGVtcyB3aGljaCBhcmUgYmVpbmcgY3Jvc3NlZCBvZmYgaW4gdGltZVxuICpcbiAqIElmIGl0IHRha2VzIHRvbyBsb25nIHRvIGNyb3NzIG9mZiBhIG5ldyBpdGVtLCBwcmludCB0aGUgbGlzdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtMaXN0PEE+IHtcbiAgcHJpdmF0ZSByZWFkb25seSByZW1haW5pbmcgPSBuZXcgU2V0KHRoaXMuaXRlbXMpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSB0aW1lcj86IE5vZGVKUy5UaW1lb3V0O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaXRlbXM6IEFbXSwgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBXb3JrTGlzdE9wdGlvbnM8QT4gPSB7fSkge1xuICAgIHRoaXMudGltZW91dCA9IG9wdGlvbnMudGltZW91dCA/PyA2MF8wMDA7XG4gICAgdGhpcy5zY2hlZHVsZVRpbWVyKCk7XG4gIH1cblxuICBwdWJsaWMgY3Jvc3NPZmYoaXRlbTogQSkge1xuICAgIHRoaXMucmVtYWluaW5nLmRlbGV0ZShpdGVtKTtcbiAgICB0aGlzLnN0b3BUaW1lcigpO1xuICAgIGlmICh0aGlzLnJlbWFpbmluZy5zaXplID4gMCkge1xuICAgICAgdGhpcy5zY2hlZHVsZVRpbWVyKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRvbmUoKSB7XG4gICAgdGhpcy5yZW1haW5pbmcuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcFRpbWVyKCkge1xuICAgIGlmICh0aGlzLnRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XG4gICAgICB0aGlzLnRpbWVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2NoZWR1bGVUaW1lcigpIHtcbiAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlcG9ydCgpLCB0aGlzLnRpbWVvdXQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBvcnQoKSB7XG4gICAgdGhpcy5vcHRpb25zLm9uVGltZW91dD8uKHRoaXMucmVtYWluaW5nKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtMaXN0T3B0aW9uczxBPiB7XG4gIC8qKlxuICAgKiBXaGVuIHRvIHJlcGx5IHdpdGggcmVtYWluaW5nIGl0ZW1zXG4gICAqXG4gICAqIEBkZWZhdWx0IDYwMDAwXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGltZW91dCBoaXRzXG4gICAqL1xuICByZWFkb25seSBvblRpbWVvdXQ/OiAoeDogU2V0PEE+KSA9PiB2b2lkO1xufSIsICJpbXBvcnQgKiBhcyB3b3JrZXJwb29sIGZyb20gJ3dvcmtlcnBvb2wnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBJbnRlZ1Rlc3RJbmZvIH0gZnJvbSAnLi4vcnVubmVyL2ludGVncmF0aW9uLXRlc3RzJztcbmltcG9ydCB7IGZsYXR0ZW4gfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBwcmludFJlc3VsdHMsIHByaW50U3VtbWFyeSwgSW50ZWdCYXRjaFJlc3BvbnNlLCBJbnRlZ1Rlc3RPcHRpb25zLCBJbnRlZ1J1bm5lck1ldHJpY3MgfSBmcm9tICcuL2NvbW1vbic7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYW4gaW50ZWdyYXRpb24gdGVzdCBiYXRjaFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVnVGVzdEJhdGNoUmVxdWVzdCBleHRlbmRzIEludGVnVGVzdE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIEFXUyByZWdpb24gdG8gcnVuIHRoaXMgYmF0Y2ggaW5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIHByb2ZpbGUgdG8gdXNlIHdoZW4gcnVubmluZyB0aGlzIHRlc3RcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcnVubmluZyBhbGwgaW50ZWdyYXRpb24gdGVzdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ1Rlc3RSdW5PcHRpb25zIGV4dGVuZHMgSW50ZWdUZXN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgcmVnaW9ucyB0byBydW4gdGhlIGludGVncmF0aW9uIHRlc3RzIGFjcm9zcy5cbiAgICogVGhpcyBhbGxvd3MgdGhlIHJ1bm5lciB0byBydW4gaW50ZWdyYXRpb24gdGVzdHMgaW4gcGFyYWxsZWxcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbnM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIEFXUyBwcm9maWxlcy4gVGhpcyB3aWxsIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgcmVnaW9uc2BcbiAgICogdG8gcnVuIHRlc3RzIGluIHBhcmFsbGVsIGFjcm9zcyBhY2NvdW50cyArIHJlZ2lvbnNcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSB3b3JrZXJwb29sIHRvIHVzZVxuICAgKi9cbiAgcmVhZG9ubHkgcG9vbDogd29ya2VycG9vbC5Xb3JrZXJQb29sO1xufVxuXG4vKipcbiAqIFJ1biBJbnRlZ3JhdGlvbiB0ZXN0cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkludGVncmF0aW9uVGVzdHMob3B0aW9uczogSW50ZWdUZXN0UnVuT3B0aW9ucyk6IFByb21pc2U8eyBzdWNjZXNzOiBib29sZWFuLCBtZXRyaWNzOiBJbnRlZ1J1bm5lck1ldHJpY3NbXSB9PiB7XG4gIGxvZ2dlci5oaWdobGlnaHQoJ1xcblJ1bm5pbmcgaW50ZWdyYXRpb24gdGVzdHMgZm9yIGZhaWxlZCB0ZXN0cy4uLlxcbicpO1xuICBsb2dnZXIucHJpbnQoXG4gICAgJ1J1bm5pbmcgaW4gcGFyYWxsZWwgYWNyb3NzICVzcmVnaW9uczogJXMnLFxuICAgIG9wdGlvbnMucHJvZmlsZXMgPyBgcHJvZmlsZXMgJHtvcHRpb25zLnByb2ZpbGVzLmpvaW4oJywgJyl9IGFuZCBgOiAnJyxcbiAgICBvcHRpb25zLnJlZ2lvbnMuam9pbignLCAnKSk7XG4gIGNvbnN0IHRvdGFsVGVzdHMgPSBvcHRpb25zLnRlc3RzLmxlbmd0aDtcblxuICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBydW5JbnRlZ3JhdGlvblRlc3RzSW5QYXJhbGxlbChvcHRpb25zKTtcbiAgbG9nZ2VyLmhpZ2hsaWdodCgnXFxuVGVzdCBSZXN1bHRzOiBcXG4nKTtcbiAgcHJpbnRTdW1tYXJ5KHRvdGFsVGVzdHMsIHJlc3BvbnNlcy5mYWlsZWRUZXN0cy5sZW5ndGgpO1xuICByZXR1cm4ge1xuICAgIHN1Y2Nlc3M6IHJlc3BvbnNlcy5mYWlsZWRUZXN0cy5sZW5ndGggPT09IDAsXG4gICAgbWV0cmljczogcmVzcG9uc2VzLm1ldHJpY3MsXG4gIH07XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHdvcmtlciBmb3IgYSBzaW5nbGUgYWNjb3VudCArIHJlZ2lvblxuICovXG5pbnRlcmZhY2UgQWNjb3VudFdvcmtlciB7XG4gIC8qKlxuICAgKiBUaGUgcmVnaW9uIHRoZSB3b3JrZXIgc2hvdWxkIHJ1biBpblxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgcHJvZmlsZSB0aGF0IHRoZSB3b3JrZXIgc2hvdWxkIHVzZVxuICAgKiBUaGlzIHdpbGwgYmUgcGFzc2VkIGFzIHRoZSAnLS1wcm9maWxlJyBvcHRpb24gdG8gdGhlIENESyBDTElcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IHByb2ZpbGVcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGxpc3Qgb2YgQWNjb3VudFdvcmtlcnMgYmFzZWQgb24gdGhlIGxpc3Qgb2YgcmVnaW9ucyBhbmQgcHJvZmlsZXNcbiAqIGdpdmVuIHRvIHRoZSBDTEkuXG4gKi9cbmZ1bmN0aW9uIGdldEFjY291bnRXb3JrZXJzKHJlZ2lvbnM6IHN0cmluZ1tdLCBwcm9maWxlcz86IHN0cmluZ1tdKTogQWNjb3VudFdvcmtlcltdIHtcbiAgY29uc3Qgd29ya2VyczogQWNjb3VudFdvcmtlcltdID0gW107XG4gIGZ1bmN0aW9uIHB1c2hXb3JrZXIocHJvZmlsZT86IHN0cmluZykge1xuICAgIGZvciAoY29uc3QgcmVnaW9uIG9mIHJlZ2lvbnMpIHtcbiAgICAgIHdvcmtlcnMucHVzaCh7XG4gICAgICAgIHJlZ2lvbixcbiAgICAgICAgcHJvZmlsZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBpZiAocHJvZmlsZXMgJiYgcHJvZmlsZXMubGVuZ3RoID4gMCkge1xuICAgIGZvciAoY29uc3QgcHJvZmlsZSBvZiBwcm9maWxlcyA/PyBbXSkge1xuICAgICAgcHVzaFdvcmtlcihwcm9maWxlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcHVzaFdvcmtlcigpO1xuICB9XG4gIHJldHVybiB3b3JrZXJzO1xufVxuXG4vKipcbiAqIFJ1bnMgYSBzZXQgb2YgaW50ZWdyYXRpb24gdGVzdHMgaW4gcGFyYWxsZWwgYWNyb3NzIGEgbGlzdCBvZiBBV1MgcmVnaW9ucy5cbiAqIE9ubHkgYSBzaW5nbGUgdGVzdCBjYW4gYmUgcnVuIGF0IGEgdGltZSBpbiBhIGdpdmVuIHJlZ2lvbi4gT25jZSBhIHJlZ2lvblxuICogaXMgZG9uZSBydW5uaW5nIGEgdGVzdCwgdGhlIG5leHQgdGVzdCB3aWxsIGJlIHB1bGxlZCBmcm9tIHRoZSBxdWV1ZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuSW50ZWdyYXRpb25UZXN0c0luUGFyYWxsZWwoXG4gIG9wdGlvbnM6IEludGVnVGVzdFJ1bk9wdGlvbnMsXG4pOiBQcm9taXNlPEludGVnQmF0Y2hSZXNwb25zZT4ge1xuXG4gIGNvbnN0IHF1ZXVlID0gb3B0aW9ucy50ZXN0cztcbiAgY29uc3QgcmVzdWx0czogSW50ZWdCYXRjaFJlc3BvbnNlID0ge1xuICAgIG1ldHJpY3M6IFtdLFxuICAgIGZhaWxlZFRlc3RzOiBbXSxcbiAgfTtcbiAgY29uc3QgYWNjb3VudFdvcmtlcnM6IEFjY291bnRXb3JrZXJbXSA9IGdldEFjY291bnRXb3JrZXJzKG9wdGlvbnMucmVnaW9ucywgb3B0aW9ucy5wcm9maWxlcyk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gcnVuVGVzdCh3b3JrZXI6IEFjY291bnRXb3JrZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgdGVzdHM6IHsgW3Rlc3ROYW1lOiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IHRlc3QgPSBxdWV1ZS5wb3AoKTtcbiAgICAgIGlmICghdGVzdCkgYnJlYWs7XG4gICAgICBjb25zdCB0ZXN0U3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgbG9nZ2VyLmhpZ2hsaWdodChgUnVubmluZyB0ZXN0ICR7dGVzdC5maWxlTmFtZX0gaW4gJHt3b3JrZXIucHJvZmlsZSA/IHdvcmtlci5wcm9maWxlICsgJy8nIDogJyd9JHt3b3JrZXIucmVnaW9ufWApO1xuICAgICAgY29uc3QgcmVzcG9uc2U6IEludGVnVGVzdEluZm9bXVtdID0gYXdhaXQgb3B0aW9ucy5wb29sLmV4ZWMoJ2ludGVnVGVzdFdvcmtlcicsIFt7XG4gICAgICAgIHJlZ2lvbjogd29ya2VyLnJlZ2lvbixcbiAgICAgICAgcHJvZmlsZTogd29ya2VyLnByb2ZpbGUsXG4gICAgICAgIHRlc3RzOiBbdGVzdF0sXG4gICAgICAgIGNsZWFuOiBvcHRpb25zLmNsZWFuLFxuICAgICAgICBkcnlSdW46IG9wdGlvbnMuZHJ5UnVuLFxuICAgICAgICB2ZXJib3NlOiBvcHRpb25zLnZlcmJvc2UsXG4gICAgICAgIHVwZGF0ZVdvcmtmbG93OiBvcHRpb25zLnVwZGF0ZVdvcmtmbG93LFxuICAgICAgfV0sIHtcbiAgICAgICAgb246IHByaW50UmVzdWx0cyxcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHRzLmZhaWxlZFRlc3RzLnB1c2goLi4uZmxhdHRlbihyZXNwb25zZSkpO1xuICAgICAgdGVzdHNbdGVzdC5maWxlTmFtZV0gPSAoRGF0ZS5ub3coKSAtIHRlc3RTdGFydCkgLyAxMDAwO1xuICAgIH0gd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApO1xuICAgIGNvbnN0IG1ldHJpY3M6IEludGVnUnVubmVyTWV0cmljcyA9IHtcbiAgICAgIHJlZ2lvbjogd29ya2VyLnJlZ2lvbixcbiAgICAgIHByb2ZpbGU6IHdvcmtlci5wcm9maWxlLFxuICAgICAgZHVyYXRpb246IChEYXRlLm5vdygpIC0gc3RhcnQpIC8gMTAwMCxcbiAgICAgIHRlc3RzLFxuICAgIH07XG4gICAgaWYgKE9iamVjdC5rZXlzKHRlc3RzKS5sZW5ndGggPiAwKSB7XG4gICAgICByZXN1bHRzLm1ldHJpY3MucHVzaChtZXRyaWNzKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB3b3JrZXJzID0gYWNjb3VudFdvcmtlcnMubWFwKCh3b3JrZXIpID0+IHJ1blRlc3Qod29ya2VyKSk7XG4gIGF3YWl0IFByb21pc2UuYWxsKHdvcmtlcnMpO1xuICByZXR1cm4gcmVzdWx0cztcbn1cbiIsICJpbXBvcnQgKiBhcyB3b3JrZXJwb29sIGZyb20gJ3dvcmtlcnBvb2wnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBJbnRlZ1Rlc3QgfSBmcm9tICcuLi9ydW5uZXIvaW50ZWdyYXRpb24tdGVzdHMnO1xuaW1wb3J0IHsgZmxhdHRlbiwgV29ya0xpc3QgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBwcmludFN1bW1hcnksIHByaW50UmVzdWx0cywgSW50ZWdUZXN0V29ya2VyQ29uZmlnLCBTbmFwc2hvdFZlcmlmaWNhdGlvbk9wdGlvbnMsIHByaW50TGFnZ2FyZHMgfSBmcm9tICcuL2NvbW1vbic7XG5cbi8qKlxuICogUnVuIFNuYXBzaG90IHRlc3RzXG4gKiBGaXJzdCBiYXRjaCB1cCB0aGUgdGVzdHMuIEJ5IGRlZmF1bHQgdGhlcmUgd2lsbCBiZSAzIHRlc3RzIHBlciBiYXRjaC5cbiAqIFVzZSBhIHdvcmtlcnBvb2wgdG8gcnVuIHRoZSBiYXRjaGVzIGluIHBhcmFsbGVsLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuU25hcHNob3RUZXN0cyhcbiAgcG9vbDogd29ya2VycG9vbC5Xb3JrZXJQb29sLFxuICB0ZXN0czogSW50ZWdUZXN0W10sXG4gIG9wdGlvbnM6IFNuYXBzaG90VmVyaWZpY2F0aW9uT3B0aW9ucyxcbik6IFByb21pc2U8SW50ZWdUZXN0V29ya2VyQ29uZmlnW10+IHtcbiAgbG9nZ2VyLmhpZ2hsaWdodCgnXFxuVmVyaWZ5aW5nIGludGVncmF0aW9uIHRlc3Qgc25hcHNob3RzLi4uXFxuJyk7XG5cbiAgY29uc3QgdG9kbyA9IG5ldyBXb3JrTGlzdCh0ZXN0cy5tYXAodCA9PiB0LnRlc3ROYW1lKSwge1xuICAgIG9uVGltZW91dDogcHJpbnRMYWdnYXJkcyxcbiAgfSk7XG5cbiAgY29uc3QgZmFpbGVkVGVzdHM6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdW10gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICB0ZXN0cy5tYXAoKHRlc3QpID0+IHBvb2wuZXhlYygnc25hcHNob3RUZXN0V29ya2VyJywgW3Rlc3QuaW5mbyAvKiBEZWh5ZHJhdGUgY2xhc3MgLT4gZGF0YSAqLywgb3B0aW9uc10sIHtcbiAgICAgIG9uOiAoeCkgPT4ge1xuICAgICAgICB0b2RvLmNyb3NzT2ZmKHgudGVzdE5hbWUpO1xuICAgICAgICBwcmludFJlc3VsdHMoeCk7XG4gICAgICB9LFxuICAgIH0pKSxcbiAgKTtcbiAgdG9kby5kb25lKCk7XG4gIGNvbnN0IHRlc3RzVG9SdW4gPSBmbGF0dGVuKGZhaWxlZFRlc3RzKTtcblxuICBsb2dnZXIuaGlnaGxpZ2h0KCdcXG5TbmFwc2hvdCBSZXN1bHRzOiBcXG4nKTtcbiAgcHJpbnRTdW1tYXJ5KHRlc3RzLmxlbmd0aCwgdGVzdHNUb1J1bi5sZW5ndGgpO1xuICByZXR1cm4gdGVzdHNUb1J1bjtcblxufVxuIiwgImV4cG9ydCAqIGZyb20gJy4vY29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZWctdGVzdC13b3JrZXInO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlZy1zbmFwc2hvdC13b3JrZXInO1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cbmxldCBzaGltO1xuY2xhc3MgWTE4TiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICAvLyBjb25maWd1cmFibGUgb3B0aW9ucy5cbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgICAgIHRoaXMuZGlyZWN0b3J5ID0gb3B0cy5kaXJlY3RvcnkgfHwgJy4vbG9jYWxlcyc7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsZXMgPSB0eXBlb2Ygb3B0cy51cGRhdGVGaWxlcyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy51cGRhdGVGaWxlcyA6IHRydWU7XG4gICAgICAgIHRoaXMubG9jYWxlID0gb3B0cy5sb2NhbGUgfHwgJ2VuJztcbiAgICAgICAgdGhpcy5mYWxsYmFja1RvTGFuZ3VhZ2UgPSB0eXBlb2Ygb3B0cy5mYWxsYmFja1RvTGFuZ3VhZ2UgPT09ICdib29sZWFuJyA/IG9wdHMuZmFsbGJhY2tUb0xhbmd1YWdlIDogdHJ1ZTtcbiAgICAgICAgLy8gaW50ZXJuYWwgc3R1ZmYuXG4gICAgICAgIHRoaXMuY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLndyaXRlUXVldWUgPSBbXTtcbiAgICB9XG4gICAgX18oLi4uYXJncykge1xuICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90YWdnZWRMaXRlcmFsKGFyZ3VtZW50c1swXSwgLi4uYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdHIgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgIGxldCBjYiA9IGZ1bmN0aW9uICgpIHsgfTsgLy8gc3RhcnQgd2l0aCBub29wLlxuICAgICAgICBpZiAodHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiID0gYXJncy5wb3AoKTtcbiAgICAgICAgY2IgPSBjYiB8fCBmdW5jdGlvbiAoKSB7IH07IC8vIG5vb3AuXG4gICAgICAgIGlmICghdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV0pXG4gICAgICAgICAgICB0aGlzLl9yZWFkTG9jYWxlRmlsZSgpO1xuICAgICAgICAvLyB3ZSd2ZSBvYnNlcnZlZCBhIG5ldyBzdHJpbmcsIHVwZGF0ZSB0aGUgbGFuZ3VhZ2UgZmlsZS5cbiAgICAgICAgaWYgKCF0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzdHJdICYmIHRoaXMudXBkYXRlRmlsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW3N0cl0gPSBzdHI7XG4gICAgICAgICAgICAvLyBpbmNsdWRlIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgbG9jYWxlLFxuICAgICAgICAgICAgLy8gc2luY2UgdGhlc2UgdmFsdWVzIGNvdWxkIGNoYW5nZSBiZWZvcmUgdGhlXG4gICAgICAgICAgICAvLyB3cml0ZSBpcyBwZXJmb3JtZWQuXG4gICAgICAgICAgICB0aGlzLl9lbnF1ZXVlV3JpdGUoe1xuICAgICAgICAgICAgICAgIGRpcmVjdG9yeTogdGhpcy5kaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzaGltLmZvcm1hdC5hcHBseShzaGltLmZvcm1hdCwgW3RoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW3N0cl0gfHwgc3RyXS5jb25jYXQoYXJncykpO1xuICAgIH1cbiAgICBfX24oKSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICBjb25zdCBzaW5ndWxhciA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgY29uc3QgcGx1cmFsID0gYXJncy5zaGlmdCgpO1xuICAgICAgICBjb25zdCBxdWFudGl0eSA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgbGV0IGNiID0gZnVuY3Rpb24gKCkgeyB9OyAvLyBzdGFydCB3aXRoIG5vb3AuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IgPSBhcmdzLnBvcCgpO1xuICAgICAgICBpZiAoIXRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdKVxuICAgICAgICAgICAgdGhpcy5fcmVhZExvY2FsZUZpbGUoKTtcbiAgICAgICAgbGV0IHN0ciA9IHF1YW50aXR5ID09PSAxID8gc2luZ3VsYXIgOiBwbHVyYWw7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzaW5ndWxhcl0pIHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc2luZ3VsYXJdO1xuICAgICAgICAgICAgc3RyID0gZW50cnlbcXVhbnRpdHkgPT09IDEgPyAnb25lJyA6ICdvdGhlciddO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdlJ3ZlIG9ic2VydmVkIGEgbmV3IHN0cmluZywgdXBkYXRlIHRoZSBsYW5ndWFnZSBmaWxlLlxuICAgICAgICBpZiAoIXRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW3Npbmd1bGFyXSAmJiB0aGlzLnVwZGF0ZUZpbGVzKSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzaW5ndWxhcl0gPSB7XG4gICAgICAgICAgICAgICAgb25lOiBzaW5ndWxhcixcbiAgICAgICAgICAgICAgICBvdGhlcjogcGx1cmFsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gaW5jbHVkZSB0aGUgY3VycmVudCBkaXJlY3RvcnkgYW5kIGxvY2FsZSxcbiAgICAgICAgICAgIC8vIHNpbmNlIHRoZXNlIHZhbHVlcyBjb3VsZCBjaGFuZ2UgYmVmb3JlIHRoZVxuICAgICAgICAgICAgLy8gd3JpdGUgaXMgcGVyZm9ybWVkLlxuICAgICAgICAgICAgdGhpcy5fZW5xdWV1ZVdyaXRlKHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rvcnk6IHRoaXMuZGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBhICVkIHBsYWNlaG9sZGVyIGlzIHByb3ZpZGVkLCBhZGQgcXVhbnRpdHlcbiAgICAgICAgLy8gdG8gdGhlIGFyZ3VtZW50cyBleHBhbmRlZCBieSB1dGlsLmZvcm1hdC5cbiAgICAgICAgY29uc3QgdmFsdWVzID0gW3N0cl07XG4gICAgICAgIGlmICh+c3RyLmluZGV4T2YoJyVkJykpXG4gICAgICAgICAgICB2YWx1ZXMucHVzaChxdWFudGl0eSk7XG4gICAgICAgIHJldHVybiBzaGltLmZvcm1hdC5hcHBseShzaGltLmZvcm1hdCwgdmFsdWVzLmNvbmNhdChhcmdzKSk7XG4gICAgfVxuICAgIHNldExvY2FsZShsb2NhbGUpIHtcbiAgICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGU7XG4gICAgfVxuICAgIGdldExvY2FsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlO1xuICAgIH1cbiAgICB1cGRhdGVMb2NhbGUob2JqKSB7XG4gICAgICAgIGlmICghdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV0pXG4gICAgICAgICAgICB0aGlzLl9yZWFkTG9jYWxlRmlsZSgpO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1ba2V5XSA9IG9ialtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIF90YWdnZWRMaXRlcmFsKHBhcnRzLCAuLi5hcmdzKSB7XG4gICAgICAgIGxldCBzdHIgPSAnJztcbiAgICAgICAgcGFydHMuZm9yRWFjaChmdW5jdGlvbiAocGFydCwgaSkge1xuICAgICAgICAgICAgY29uc3QgYXJnID0gYXJnc1tpICsgMV07XG4gICAgICAgICAgICBzdHIgKz0gcGFydDtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHN0ciArPSAnJXMnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX18uYXBwbHkodGhpcywgW3N0cl0uY29uY2F0KFtdLnNsaWNlLmNhbGwoYXJncywgMSkpKTtcbiAgICB9XG4gICAgX2VucXVldWVXcml0ZSh3b3JrKSB7XG4gICAgICAgIHRoaXMud3JpdGVRdWV1ZS5wdXNoKHdvcmspO1xuICAgICAgICBpZiAodGhpcy53cml0ZVF1ZXVlLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NXcml0ZVF1ZXVlKCk7XG4gICAgfVxuICAgIF9wcm9jZXNzV3JpdGVRdWV1ZSgpIHtcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgICAgICBjb25zdCB3b3JrID0gdGhpcy53cml0ZVF1ZXVlWzBdO1xuICAgICAgICAvLyBkZXN0cnVjdHVyZSB0aGUgZW5xdWV1ZWQgd29yay5cbiAgICAgICAgY29uc3QgZGlyZWN0b3J5ID0gd29yay5kaXJlY3Rvcnk7XG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IHdvcmsubG9jYWxlO1xuICAgICAgICBjb25zdCBjYiA9IHdvcmsuY2I7XG4gICAgICAgIGNvbnN0IGxhbmd1YWdlRmlsZSA9IHRoaXMuX3Jlc29sdmVMb2NhbGVGaWxlKGRpcmVjdG9yeSwgbG9jYWxlKTtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZExvY2FsZSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY2FjaGVbbG9jYWxlXSwgbnVsbCwgMik7XG4gICAgICAgIHNoaW0uZnMud3JpdGVGaWxlKGxhbmd1YWdlRmlsZSwgc2VyaWFsaXplZExvY2FsZSwgJ3V0Zi04JywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgX3RoaXMud3JpdGVRdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgaWYgKF90aGlzLndyaXRlUXVldWUubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICBfdGhpcy5fcHJvY2Vzc1dyaXRlUXVldWUoKTtcbiAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfcmVhZExvY2FsZUZpbGUoKSB7XG4gICAgICAgIGxldCBsb2NhbGVMb29rdXAgPSB7fTtcbiAgICAgICAgY29uc3QgbGFuZ3VhZ2VGaWxlID0gdGhpcy5fcmVzb2x2ZUxvY2FsZUZpbGUodGhpcy5kaXJlY3RvcnksIHRoaXMubG9jYWxlKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gdXNpbmcgYSBidW5kbGVyIHN1Y2ggYXMgd2VicGFjaywgcmVhZEZpbGVTeW5jIG1heSBub3QgYmUgZGVmaW5lZDpcbiAgICAgICAgICAgIGlmIChzaGltLmZzLnJlYWRGaWxlU3luYykge1xuICAgICAgICAgICAgICAgIGxvY2FsZUxvb2t1cCA9IEpTT04ucGFyc2Uoc2hpbS5mcy5yZWFkRmlsZVN5bmMobGFuZ3VhZ2VGaWxlLCAndXRmLTgnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPSAnc3ludGF4IGVycm9yIGluICcgKyBsYW5ndWFnZUZpbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKVxuICAgICAgICAgICAgICAgIGxvY2FsZUxvb2t1cCA9IHt9O1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhY2hlW3RoaXMubG9jYWxlXSA9IGxvY2FsZUxvb2t1cDtcbiAgICB9XG4gICAgX3Jlc29sdmVMb2NhbGVGaWxlKGRpcmVjdG9yeSwgbG9jYWxlKSB7XG4gICAgICAgIGxldCBmaWxlID0gc2hpbS5yZXNvbHZlKGRpcmVjdG9yeSwgJy4vJywgbG9jYWxlICsgJy5qc29uJyk7XG4gICAgICAgIGlmICh0aGlzLmZhbGxiYWNrVG9MYW5ndWFnZSAmJiAhdGhpcy5fZmlsZUV4aXN0c1N5bmMoZmlsZSkgJiYgfmxvY2FsZS5sYXN0SW5kZXhPZignXycpKSB7XG4gICAgICAgICAgICAvLyBhdHRlbXB0IGZhbGxiYWNrIHRvIGxhbmd1YWdlIG9ubHlcbiAgICAgICAgICAgIGNvbnN0IGxhbmd1YWdlRmlsZSA9IHNoaW0ucmVzb2x2ZShkaXJlY3RvcnksICcuLycsIGxvY2FsZS5zcGxpdCgnXycpWzBdICsgJy5qc29uJyk7XG4gICAgICAgICAgICBpZiAodGhpcy5fZmlsZUV4aXN0c1N5bmMobGFuZ3VhZ2VGaWxlKSlcbiAgICAgICAgICAgICAgICBmaWxlID0gbGFuZ3VhZ2VGaWxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWxlO1xuICAgIH1cbiAgICBfZmlsZUV4aXN0c1N5bmMoZmlsZSkge1xuICAgICAgICByZXR1cm4gc2hpbS5leGlzdHMoZmlsZSk7XG4gICAgfVxufVxuZnVuY3Rpb24geTE4biQxKG9wdHMsIF9zaGltKSB7XG4gICAgc2hpbSA9IF9zaGltO1xuICAgIGNvbnN0IHkxOG4gPSBuZXcgWTE4TihvcHRzKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBfXzogeTE4bi5fXy5iaW5kKHkxOG4pLFxuICAgICAgICBfX246IHkxOG4uX19uLmJpbmQoeTE4biksXG4gICAgICAgIHNldExvY2FsZTogeTE4bi5zZXRMb2NhbGUuYmluZCh5MThuKSxcbiAgICAgICAgZ2V0TG9jYWxlOiB5MThuLmdldExvY2FsZS5iaW5kKHkxOG4pLFxuICAgICAgICB1cGRhdGVMb2NhbGU6IHkxOG4udXBkYXRlTG9jYWxlLmJpbmQoeTE4biksXG4gICAgICAgIGxvY2FsZTogeTE4bi5sb2NhbGVcbiAgICB9O1xufVxuXG52YXIgbm9kZVBsYXRmb3JtU2hpbSA9IHtcbiAgICBmczoge1xuICAgICAgICByZWFkRmlsZVN5bmM6IGZzLnJlYWRGaWxlU3luYyxcbiAgICAgICAgd3JpdGVGaWxlOiBmcy53cml0ZUZpbGVcbiAgICB9LFxuICAgIGZvcm1hdDogdXRpbC5mb3JtYXQsXG4gICAgcmVzb2x2ZTogcGF0aC5yZXNvbHZlLFxuICAgIGV4aXN0czogKGZpbGUpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBmcy5zdGF0U3luYyhmaWxlKS5pc0ZpbGUoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5jb25zdCB5MThuID0gKG9wdHMpID0+IHtcbiAgICByZXR1cm4geTE4biQxKG9wdHMsIG5vZGVQbGF0Zm9ybVNoaW0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB5MThuO1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cbmZ1bmN0aW9uIGNhbWVsQ2FzZShzdHIpIHtcbiAgICBjb25zdCBpc0NhbWVsQ2FzZSA9IHN0ciAhPT0gc3RyLnRvTG93ZXJDYXNlKCkgJiYgc3RyICE9PSBzdHIudG9VcHBlckNhc2UoKTtcbiAgICBpZiAoIWlzQ2FtZWxDYXNlKSB7XG4gICAgICAgIHN0ciA9IHN0ci50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBpZiAoc3RyLmluZGV4T2YoJy0nKSA9PT0gLTEgJiYgc3RyLmluZGV4T2YoJ18nKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxldCBjYW1lbGNhc2UgPSAnJztcbiAgICAgICAgbGV0IG5leHRDaHJVcHBlciA9IGZhbHNlO1xuICAgICAgICBjb25zdCBsZWFkaW5nSHlwaGVucyA9IHN0ci5tYXRjaCgvXi0rLyk7XG4gICAgICAgIGZvciAobGV0IGkgPSBsZWFkaW5nSHlwaGVucyA/IGxlYWRpbmdIeXBoZW5zWzBdLmxlbmd0aCA6IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBjaHIgPSBzdHIuY2hhckF0KGkpO1xuICAgICAgICAgICAgaWYgKG5leHRDaHJVcHBlcikge1xuICAgICAgICAgICAgICAgIG5leHRDaHJVcHBlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNociA9IGNoci50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGkgIT09IDAgJiYgKGNociA9PT0gJy0nIHx8IGNociA9PT0gJ18nKSkge1xuICAgICAgICAgICAgICAgIG5leHRDaHJVcHBlciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaHIgIT09ICctJyAmJiBjaHIgIT09ICdfJykge1xuICAgICAgICAgICAgICAgIGNhbWVsY2FzZSArPSBjaHI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbWVsY2FzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWNhbWVsaXplKHN0ciwgam9pblN0cmluZykge1xuICAgIGNvbnN0IGxvd2VyY2FzZSA9IHN0ci50b0xvd2VyQ2FzZSgpO1xuICAgIGpvaW5TdHJpbmcgPSBqb2luU3RyaW5nIHx8ICctJztcbiAgICBsZXQgbm90Q2FtZWxjYXNlID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hyTG93ZXIgPSBsb3dlcmNhc2UuY2hhckF0KGkpO1xuICAgICAgICBjb25zdCBjaHJTdHJpbmcgPSBzdHIuY2hhckF0KGkpO1xuICAgICAgICBpZiAoY2hyTG93ZXIgIT09IGNoclN0cmluZyAmJiBpID4gMCkge1xuICAgICAgICAgICAgbm90Q2FtZWxjYXNlICs9IGAke2pvaW5TdHJpbmd9JHtsb3dlcmNhc2UuY2hhckF0KGkpfWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBub3RDYW1lbGNhc2UgKz0gY2hyU3RyaW5nO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBub3RDYW1lbGNhc2U7XG59XG5mdW5jdGlvbiBsb29rc0xpa2VOdW1iZXIoeCkge1xuICAgIGlmICh4ID09PSBudWxsIHx8IHggPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmICgvXjB4WzAtOWEtZl0rJC9pLnRlc3QoeCkpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmICgvXjBbXi5dLy50ZXN0KHgpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIC9eWy1dPyg/OlxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykoZVstK10/XFxkKyk/JC8udGVzdCh4KTtcbn1cblxuZnVuY3Rpb24gdG9rZW5pemVBcmdTdHJpbmcoYXJnU3RyaW5nKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnU3RyaW5nKSkge1xuICAgICAgICByZXR1cm4gYXJnU3RyaW5nLm1hcChlID0+IHR5cGVvZiBlICE9PSAnc3RyaW5nJyA/IGUgKyAnJyA6IGUpO1xuICAgIH1cbiAgICBhcmdTdHJpbmcgPSBhcmdTdHJpbmcudHJpbSgpO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgcHJldkMgPSBudWxsO1xuICAgIGxldCBjID0gbnVsbDtcbiAgICBsZXQgb3BlbmluZyA9IG51bGw7XG4gICAgY29uc3QgYXJncyA9IFtdO1xuICAgIGZvciAobGV0IGlpID0gMDsgaWkgPCBhcmdTdHJpbmcubGVuZ3RoOyBpaSsrKSB7XG4gICAgICAgIHByZXZDID0gYztcbiAgICAgICAgYyA9IGFyZ1N0cmluZy5jaGFyQXQoaWkpO1xuICAgICAgICBpZiAoYyA9PT0gJyAnICYmICFvcGVuaW5nKSB7XG4gICAgICAgICAgICBpZiAoIShwcmV2QyA9PT0gJyAnKSkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjID09PSBvcGVuaW5nKSB7XG4gICAgICAgICAgICBvcGVuaW5nID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoYyA9PT0gXCInXCIgfHwgYyA9PT0gJ1wiJykgJiYgIW9wZW5pbmcpIHtcbiAgICAgICAgICAgIG9wZW5pbmcgPSBjO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYXJnc1tpXSlcbiAgICAgICAgICAgIGFyZ3NbaV0gPSAnJztcbiAgICAgICAgYXJnc1tpXSArPSBjO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cblxudmFyIERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5O1xuKGZ1bmN0aW9uIChEZWZhdWx0VmFsdWVzRm9yVHlwZUtleSkge1xuICAgIERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5W1wiQk9PTEVBTlwiXSA9IFwiYm9vbGVhblwiO1xuICAgIERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5W1wiU1RSSU5HXCJdID0gXCJzdHJpbmdcIjtcbiAgICBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleVtcIk5VTUJFUlwiXSA9IFwibnVtYmVyXCI7XG4gICAgRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXlbXCJBUlJBWVwiXSA9IFwiYXJyYXlcIjtcbn0pKERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5IHx8IChEZWZhdWx0VmFsdWVzRm9yVHlwZUtleSA9IHt9KSk7XG5cbmxldCBtaXhpbjtcbmNsYXNzIFlhcmdzUGFyc2VyIHtcbiAgICBjb25zdHJ1Y3RvcihfbWl4aW4pIHtcbiAgICAgICAgbWl4aW4gPSBfbWl4aW47XG4gICAgfVxuICAgIHBhcnNlKGFyZ3NJbnB1dCwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICBhbGlhczogdW5kZWZpbmVkLFxuICAgICAgICAgICAgYXJyYXk6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGJvb2xlYW46IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbmZpZzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY29uZmlnT2JqZWN0czogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY29uZmlndXJhdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY29lcmNlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBjb3VudDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZW52UHJlZml4OiB1bmRlZmluZWQsXG4gICAgICAgICAgICBuYXJnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBub3JtYWxpemU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHN0cmluZzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbnVtYmVyOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBfXzogdW5kZWZpbmVkLFxuICAgICAgICAgICAga2V5OiB1bmRlZmluZWRcbiAgICAgICAgfSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0b2tlbml6ZUFyZ1N0cmluZyhhcmdzSW5wdXQpO1xuICAgICAgICBjb25zdCBhbGlhc2VzID0gY29tYmluZUFsaWFzZXMoT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLCBvcHRzLmFsaWFzKSk7XG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgICdib29sZWFuLW5lZ2F0aW9uJzogdHJ1ZSxcbiAgICAgICAgICAgICdjYW1lbC1jYXNlLWV4cGFuc2lvbic6IHRydWUsXG4gICAgICAgICAgICAnY29tYmluZS1hcnJheXMnOiBmYWxzZSxcbiAgICAgICAgICAgICdkb3Qtbm90YXRpb24nOiB0cnVlLFxuICAgICAgICAgICAgJ2R1cGxpY2F0ZS1hcmd1bWVudHMtYXJyYXknOiB0cnVlLFxuICAgICAgICAgICAgJ2ZsYXR0ZW4tZHVwbGljYXRlLWFycmF5cyc6IHRydWUsXG4gICAgICAgICAgICAnZ3JlZWR5LWFycmF5cyc6IHRydWUsXG4gICAgICAgICAgICAnaGFsdC1hdC1ub24tb3B0aW9uJzogZmFsc2UsXG4gICAgICAgICAgICAnbmFyZ3MtZWF0cy1vcHRpb25zJzogZmFsc2UsXG4gICAgICAgICAgICAnbmVnYXRpb24tcHJlZml4JzogJ25vLScsXG4gICAgICAgICAgICAncGFyc2UtbnVtYmVycyc6IHRydWUsXG4gICAgICAgICAgICAncGFyc2UtcG9zaXRpb25hbC1udW1iZXJzJzogdHJ1ZSxcbiAgICAgICAgICAgICdwb3B1bGF0ZS0tJzogZmFsc2UsXG4gICAgICAgICAgICAnc2V0LXBsYWNlaG9sZGVyLWtleSc6IGZhbHNlLFxuICAgICAgICAgICAgJ3Nob3J0LW9wdGlvbi1ncm91cHMnOiB0cnVlLFxuICAgICAgICAgICAgJ3N0cmlwLWFsaWFzZWQnOiBmYWxzZSxcbiAgICAgICAgICAgICdzdHJpcC1kYXNoZWQnOiBmYWxzZSxcbiAgICAgICAgICAgICd1bmtub3duLW9wdGlvbnMtYXMtYXJncyc6IGZhbHNlXG4gICAgICAgIH0sIG9wdHMuY29uZmlndXJhdGlvbik7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLCBvcHRzLmRlZmF1bHQpO1xuICAgICAgICBjb25zdCBjb25maWdPYmplY3RzID0gb3B0cy5jb25maWdPYmplY3RzIHx8IFtdO1xuICAgICAgICBjb25zdCBlbnZQcmVmaXggPSBvcHRzLmVudlByZWZpeDtcbiAgICAgICAgY29uc3Qgbm90RmxhZ3NPcHRpb24gPSBjb25maWd1cmF0aW9uWydwb3B1bGF0ZS0tJ107XG4gICAgICAgIGNvbnN0IG5vdEZsYWdzQXJndiA9IG5vdEZsYWdzT3B0aW9uID8gJy0tJyA6ICdfJztcbiAgICAgICAgY29uc3QgbmV3QWxpYXNlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRlZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGNvbnN0IF9fID0gb3B0cy5fXyB8fCBtaXhpbi5mb3JtYXQ7XG4gICAgICAgIGNvbnN0IGZsYWdzID0ge1xuICAgICAgICAgICAgYWxpYXNlczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIGFycmF5czogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIGJvb2xzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgc3RyaW5nczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIG51bWJlcnM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBjb3VudHM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBub3JtYWxpemU6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBjb25maWdzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgbmFyZ3M6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBjb2VyY2lvbnM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBrZXlzOiBbXVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBuZWdhdGl2ZSA9IC9eLShbMC05XSsoXFwuWzAtOV0rKT98XFwuWzAtOV0rKSQvO1xuICAgICAgICBjb25zdCBuZWdhdGVkQm9vbGVhbiA9IG5ldyBSZWdFeHAoJ14tLScgKyBjb25maWd1cmF0aW9uWyduZWdhdGlvbi1wcmVmaXgnXSArICcoLispJyk7XG4gICAgICAgIFtdLmNvbmNhdChvcHRzLmFycmF5IHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAob3B0KSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSB0eXBlb2Ygb3B0ID09PSAnb2JqZWN0JyA/IG9wdC5rZXkgOiBvcHQ7XG4gICAgICAgICAgICBjb25zdCBhc3NpZ25tZW50ID0gT2JqZWN0LmtleXMob3B0KS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5RmxhZ0tleXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGJvb2xlYW46ICdib29scycsXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZzogJ3N0cmluZ3MnLFxuICAgICAgICAgICAgICAgICAgICBudW1iZXI6ICdudW1iZXJzJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5RmxhZ0tleXNba2V5XTtcbiAgICAgICAgICAgIH0pLmZpbHRlcihCb29sZWFuKS5wb3AoKTtcbiAgICAgICAgICAgIGlmIChhc3NpZ25tZW50KSB7XG4gICAgICAgICAgICAgICAgZmxhZ3NbYXNzaWdubWVudF1ba2V5XSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbGFncy5hcnJheXNba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFtdLmNvbmNhdChvcHRzLmJvb2xlYW4gfHwgW10pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGZsYWdzLmJvb2xzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBbXS5jb25jYXQob3B0cy5zdHJpbmcgfHwgW10pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGZsYWdzLnN0cmluZ3Nba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFtdLmNvbmNhdChvcHRzLm51bWJlciB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgZmxhZ3MubnVtYmVyc1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGZsYWdzLmtleXMucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgW10uY29uY2F0KG9wdHMuY291bnQgfHwgW10pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGZsYWdzLmNvdW50c1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGZsYWdzLmtleXMucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgW10uY29uY2F0KG9wdHMubm9ybWFsaXplIHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBmbGFncy5ub3JtYWxpemVba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5uYXJnID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMob3B0cy5uYXJnKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5uYXJnc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5jb2VyY2UgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhvcHRzLmNvZXJjZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5jb2VyY2lvbnNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG9wdHMuY29uZmlnICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0cy5jb25maWcpIHx8IHR5cGVvZiBvcHRzLmNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBbXS5jb25jYXQob3B0cy5jb25maWcpLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY29uZmlnc1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvcHRzLmNvbmZpZyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhvcHRzLmNvbmZpZykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLmNvbmZpZ3Nba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZXh0ZW5kQWxpYXNlcyhvcHRzLmtleSwgYWxpYXNlcywgb3B0cy5kZWZhdWx0LCBmbGFncy5hcnJheXMpO1xuICAgICAgICBPYmplY3Qua2V5cyhkZWZhdWx0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAoZmxhZ3MuYWxpYXNlc1trZXldIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChhbGlhcykge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW2FsaWFzXSA9IGRlZmF1bHRzW2tleV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBlcnJvciA9IG51bGw7XG4gICAgICAgIGNoZWNrQ29uZmlndXJhdGlvbigpO1xuICAgICAgICBsZXQgbm90RmxhZ3MgPSBbXTtcbiAgICAgICAgY29uc3QgYXJndiA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSwgeyBfOiBbXSB9KTtcbiAgICAgICAgY29uc3QgYXJndlJldHVybiA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZyA9IGFyZ3NbaV07XG4gICAgICAgICAgICBjb25zdCB0cnVuY2F0ZWRBcmcgPSBhcmcucmVwbGFjZSgvXi17Myx9LywgJy0tLScpO1xuICAgICAgICAgICAgbGV0IGJyb2tlbjtcbiAgICAgICAgICAgIGxldCBrZXk7XG4gICAgICAgICAgICBsZXQgbGV0dGVycztcbiAgICAgICAgICAgIGxldCBtO1xuICAgICAgICAgICAgbGV0IG5leHQ7XG4gICAgICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgICAgICBpZiAoYXJnICE9PSAnLS0nICYmIGlzVW5rbm93bk9wdGlvbkFzQXJnKGFyZykpIHtcbiAgICAgICAgICAgICAgICBwdXNoUG9zaXRpb25hbChhcmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHJ1bmNhdGVkQXJnLm1hdGNoKC8tLS0rKD18JCkvKSkge1xuICAgICAgICAgICAgICAgIHB1c2hQb3NpdGlvbmFsKGFyZyk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tLS4rPS8pIHx8ICghY29uZmlndXJhdGlvblsnc2hvcnQtb3B0aW9uLWdyb3VwcyddICYmIGFyZy5tYXRjaCgvXi0uKz0vKSkpIHtcbiAgICAgICAgICAgICAgICBtID0gYXJnLm1hdGNoKC9eLS0/KFtePV0rKT0oW1xcc1xcU10qKSQvKTtcbiAgICAgICAgICAgICAgICBpZiAobSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KG0pICYmIG0ubGVuZ3RoID49IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhtWzFdLCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0QXJyYXkoaSwgbVsxXSwgYXJncywgbVsyXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKG1bMV0sIGZsYWdzLm5hcmdzKSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXROYXJncyhpLCBtWzFdLCBhcmdzLCBtWzJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhtWzFdLCBtWzJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZy5tYXRjaChuZWdhdGVkQm9vbGVhbikgJiYgY29uZmlndXJhdGlvblsnYm9vbGVhbi1uZWdhdGlvbiddKSB7XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaChuZWdhdGVkQm9vbGVhbik7XG4gICAgICAgICAgICAgICAgaWYgKG0gIT09IG51bGwgJiYgQXJyYXkuaXNBcnJheShtKSAmJiBtLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG1bMV07XG4gICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykgPyBbZmFsc2VdIDogZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZy5tYXRjaCgvXi0tLisvKSB8fCAoIWNvbmZpZ3VyYXRpb25bJ3Nob3J0LW9wdGlvbi1ncm91cHMnXSAmJiBhcmcubWF0Y2goL14tW14tXSsvKSkpIHtcbiAgICAgICAgICAgICAgICBtID0gYXJnLm1hdGNoKC9eLS0/KC4rKS8pO1xuICAgICAgICAgICAgICAgIGlmIChtICE9PSBudWxsICYmIEFycmF5LmlzQXJyYXkobSkgJiYgbS5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBtWzFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdEFycmF5KGksIGtleSwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdE5hcmdzKGksIGtleSwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gYXJnc1tpICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkICYmICghbmV4dC5tYXRjaCgvXi0vKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQubWF0Y2gobmVnYXRpdmUpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKC9eKHRydWV8ZmFsc2UpJC8udGVzdChuZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGRlZmF1bHRWYWx1ZShrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZy5tYXRjaCgvXi0uXFwuLis9LykpIHtcbiAgICAgICAgICAgICAgICBtID0gYXJnLm1hdGNoKC9eLShbXj1dKyk9KFtcXHNcXFNdKikkLyk7XG4gICAgICAgICAgICAgICAgaWYgKG0gIT09IG51bGwgJiYgQXJyYXkuaXNBcnJheShtKSAmJiBtLmxlbmd0aCA+PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEFyZyhtWzFdLCBtWzJdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tLlxcLi4rLykgJiYgIWFyZy5tYXRjaChuZWdhdGl2ZSkpIHtcbiAgICAgICAgICAgICAgICBuZXh0ID0gYXJnc1tpICsgMV07XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaCgvXi0oLlxcLi4rKS8pO1xuICAgICAgICAgICAgICAgIGlmIChtICE9PSBudWxsICYmIEFycmF5LmlzQXJyYXkobSkgJiYgbS5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBtWzFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkICYmICFuZXh0Lm1hdGNoKC9eLS8pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBkZWZhdWx0VmFsdWUoa2V5KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tW14tXSsvKSAmJiAhYXJnLm1hdGNoKG5lZ2F0aXZlKSkge1xuICAgICAgICAgICAgICAgIGxldHRlcnMgPSBhcmcuc2xpY2UoMSwgLTEpLnNwbGl0KCcnKTtcbiAgICAgICAgICAgICAgICBicm9rZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxldHRlcnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGFyZy5zbGljZShqICsgMik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsZXR0ZXJzW2ogKyAxXSAmJiBsZXR0ZXJzW2ogKyAxXSA9PT0gJz0nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFyZy5zbGljZShqICsgMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBsZXR0ZXJzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0QXJyYXkoaSwga2V5LCBhcmdzLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5uYXJncykgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdE5hcmdzKGksIGtleSwgYXJncywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJva2VuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ID09PSAnLScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhsZXR0ZXJzW2pdLCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgvW0EtWmEtel0vLnRlc3QobGV0dGVyc1tqXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIC9eLT9cXGQrKFxcLlxcZCopPyhlLT9cXGQrKT8kLy50ZXN0KG5leHQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja0FsbEFsaWFzZXMobmV4dCwgZmxhZ3MuYm9vbHMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGxldHRlcnNbal0sIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJva2VuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChsZXR0ZXJzW2ogKyAxXSAmJiBsZXR0ZXJzW2ogKyAxXS5tYXRjaCgvXFxXLykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhsZXR0ZXJzW2pdLCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhsZXR0ZXJzW2pdLCBkZWZhdWx0VmFsdWUobGV0dGVyc1tqXSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGtleSA9IGFyZy5zbGljZSgtMSlbMF07XG4gICAgICAgICAgICAgICAgaWYgKCFicm9rZW4gJiYga2V5ICE9PSAnLScpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXRBcnJheShpLCBrZXksIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXROYXJncyhpLCBrZXksIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGFyZ3NbaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCAmJiAoIS9eKC18LS0pW14tXS8udGVzdChuZXh0KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQubWF0Y2gobmVnYXRpdmUpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKC9eKHRydWV8ZmFsc2UpJC8udGVzdChuZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGRlZmF1bHRWYWx1ZShrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZy5tYXRjaCgvXi1bMC05XSQvKSAmJlxuICAgICAgICAgICAgICAgIGFyZy5tYXRjaChuZWdhdGl2ZSkgJiZcbiAgICAgICAgICAgICAgICBjaGVja0FsbEFsaWFzZXMoYXJnLnNsaWNlKDEpLCBmbGFncy5ib29scykpIHtcbiAgICAgICAgICAgICAgICBrZXkgPSBhcmcuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgZGVmYXVsdFZhbHVlKGtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnID09PSAnLS0nKSB7XG4gICAgICAgICAgICAgICAgbm90RmxhZ3MgPSBhcmdzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbmZpZ3VyYXRpb25bJ2hhbHQtYXQtbm9uLW9wdGlvbiddKSB7XG4gICAgICAgICAgICAgICAgbm90RmxhZ3MgPSBhcmdzLnNsaWNlKGkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcHVzaFBvc2l0aW9uYWwoYXJnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhcHBseUVudlZhcnMoYXJndiwgdHJ1ZSk7XG4gICAgICAgIGFwcGx5RW52VmFycyhhcmd2LCBmYWxzZSk7XG4gICAgICAgIHNldENvbmZpZyhhcmd2KTtcbiAgICAgICAgc2V0Q29uZmlnT2JqZWN0cygpO1xuICAgICAgICBhcHBseURlZmF1bHRzQW5kQWxpYXNlcyhhcmd2LCBmbGFncy5hbGlhc2VzLCBkZWZhdWx0cywgdHJ1ZSk7XG4gICAgICAgIGFwcGx5Q29lcmNpb25zKGFyZ3YpO1xuICAgICAgICBpZiAoY29uZmlndXJhdGlvblsnc2V0LXBsYWNlaG9sZGVyLWtleSddKVxuICAgICAgICAgICAgc2V0UGxhY2Vob2xkZXJLZXlzKGFyZ3YpO1xuICAgICAgICBPYmplY3Qua2V5cyhmbGFncy5jb3VudHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaWYgKCFoYXNLZXkoYXJndiwga2V5LnNwbGl0KCcuJykpKVxuICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIDApO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG5vdEZsYWdzT3B0aW9uICYmIG5vdEZsYWdzLmxlbmd0aClcbiAgICAgICAgICAgIGFyZ3Zbbm90RmxhZ3NBcmd2XSA9IFtdO1xuICAgICAgICBub3RGbGFncy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGFyZ3Zbbm90RmxhZ3NBcmd2XS5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY29uZmlndXJhdGlvblsnY2FtZWwtY2FzZS1leHBhbnNpb24nXSAmJiBjb25maWd1cmF0aW9uWydzdHJpcC1kYXNoZWQnXSkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoYXJndikuZmlsdGVyKGtleSA9PiBrZXkgIT09ICctLScgJiYga2V5LmluY2x1ZGVzKCctJykpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBkZWxldGUgYXJndltrZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ3N0cmlwLWFsaWFzZWQnXSkge1xuICAgICAgICAgICAgW10uY29uY2F0KC4uLk9iamVjdC5rZXlzKGFsaWFzZXMpLm1hcChrID0+IGFsaWFzZXNba10pKS5mb3JFYWNoKGFsaWFzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvblsnY2FtZWwtY2FzZS1leHBhbnNpb24nXSAmJiBhbGlhcy5pbmNsdWRlcygnLScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhcmd2W2FsaWFzLnNwbGl0KCcuJykubWFwKHByb3AgPT4gY2FtZWxDYXNlKHByb3ApKS5qb2luKCcuJyldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWxldGUgYXJndlthbGlhc107XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBwdXNoUG9zaXRpb25hbChhcmcpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heWJlQ29lcmNlZE51bWJlciA9IG1heWJlQ29lcmNlTnVtYmVyKCdfJywgYXJnKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWF5YmVDb2VyY2VkTnVtYmVyID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbWF5YmVDb2VyY2VkTnVtYmVyID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIGFyZ3YuXy5wdXNoKG1heWJlQ29lcmNlZE51bWJlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZWF0TmFyZ3MoaSwga2V5LCBhcmdzLCBhcmdBZnRlckVxdWFsU2lnbikge1xuICAgICAgICAgICAgbGV0IGlpO1xuICAgICAgICAgICAgbGV0IHRvRWF0ID0gY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpO1xuICAgICAgICAgICAgdG9FYXQgPSB0eXBlb2YgdG9FYXQgIT09ICdudW1iZXInIHx8IGlzTmFOKHRvRWF0KSA/IDEgOiB0b0VhdDtcbiAgICAgICAgICAgIGlmICh0b0VhdCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoYXJnQWZ0ZXJFcXVhbFNpZ24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ0FyZ3VtZW50IHVuZXhwZWN0ZWQgZm9yOiAlcycsIGtleSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBkZWZhdWx0VmFsdWUoa2V5KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgYXZhaWxhYmxlID0gaXNVbmRlZmluZWQoYXJnQWZ0ZXJFcXVhbFNpZ24pID8gMCA6IDE7XG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvblsnbmFyZ3MtZWF0cy1vcHRpb25zJ10pIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggLSAoaSArIDEpICsgYXZhaWxhYmxlIDwgdG9FYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFcnJvcihfXygnTm90IGVub3VnaCBhcmd1bWVudHMgZm9sbG93aW5nOiAlcycsIGtleSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSB0b0VhdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoaWkgPSBpICsgMTsgaWkgPCBhcmdzLmxlbmd0aDsgaWkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZ3NbaWldLm1hdGNoKC9eLVteMC05XS8pIHx8IGFyZ3NbaWldLm1hdGNoKG5lZ2F0aXZlKSB8fCBpc1Vua25vd25PcHRpb25Bc0FyZyhhcmdzW2lpXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUrKztcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUgPCB0b0VhdClcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFcnJvcihfXygnTm90IGVub3VnaCBhcmd1bWVudHMgZm9sbG93aW5nOiAlcycsIGtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGNvbnN1bWVkID0gTWF0aC5taW4oYXZhaWxhYmxlLCB0b0VhdCk7XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSAmJiBjb25zdW1lZCA+IDApIHtcbiAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBhcmdBZnRlckVxdWFsU2lnbik7XG4gICAgICAgICAgICAgICAgY29uc3VtZWQtLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoaWkgPSBpICsgMTsgaWkgPCAoY29uc3VtZWQgKyBpICsgMSk7IGlpKyspIHtcbiAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBhcmdzW2lpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKGkgKyBjb25zdW1lZCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZWF0QXJyYXkoaSwga2V5LCBhcmdzLCBhcmdBZnRlckVxdWFsU2lnbikge1xuICAgICAgICAgICAgbGV0IGFyZ3NUb1NldCA9IFtdO1xuICAgICAgICAgICAgbGV0IG5leHQgPSBhcmdBZnRlckVxdWFsU2lnbiB8fCBhcmdzW2kgKyAxXTtcbiAgICAgICAgICAgIGNvbnN0IG5hcmdzQ291bnQgPSBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5uYXJncyk7XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmICEoL14odHJ1ZXxmYWxzZSkkLy50ZXN0KG5leHQpKSkge1xuICAgICAgICAgICAgICAgIGFyZ3NUb1NldC5wdXNoKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNVbmRlZmluZWQobmV4dCkgfHxcbiAgICAgICAgICAgICAgICAoaXNVbmRlZmluZWQoYXJnQWZ0ZXJFcXVhbFNpZ24pICYmIC9eLS8udGVzdChuZXh0KSAmJiAhbmVnYXRpdmUudGVzdChuZXh0KSAmJiAhaXNVbmtub3duT3B0aW9uQXNBcmcobmV4dCkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRzW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWZWYWwgPSBkZWZhdWx0c1trZXldO1xuICAgICAgICAgICAgICAgICAgICBhcmdzVG9TZXQgPSBBcnJheS5pc0FycmF5KGRlZlZhbCkgPyBkZWZWYWwgOiBbZGVmVmFsXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzVG9TZXQucHVzaChwcm9jZXNzVmFsdWUoa2V5LCBhcmdBZnRlckVxdWFsU2lnbikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpaSA9IGkgKyAxOyBpaSA8IGFyZ3MubGVuZ3RoOyBpaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoIWNvbmZpZ3VyYXRpb25bJ2dyZWVkeS1hcnJheXMnXSAmJiBhcmdzVG9TZXQubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChuYXJnc0NvdW50ICYmIHR5cGVvZiBuYXJnc0NvdW50ID09PSAnbnVtYmVyJyAmJiBhcmdzVG9TZXQubGVuZ3RoID49IG5hcmdzQ291bnQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSBhcmdzW2lpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eLS8udGVzdChuZXh0KSAmJiAhbmVnYXRpdmUudGVzdChuZXh0KSAmJiAhaXNVbmtub3duT3B0aW9uQXNBcmcobmV4dCkpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgaSA9IGlpO1xuICAgICAgICAgICAgICAgICAgICBhcmdzVG9TZXQucHVzaChwcm9jZXNzVmFsdWUoa2V5LCBuZXh0KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBuYXJnc0NvdW50ID09PSAnbnVtYmVyJyAmJiAoKG5hcmdzQ291bnQgJiYgYXJnc1RvU2V0Lmxlbmd0aCA8IG5hcmdzQ291bnQpIHx8XG4gICAgICAgICAgICAgICAgKGlzTmFOKG5hcmdzQ291bnQpICYmIGFyZ3NUb1NldC5sZW5ndGggPT09IDApKSkge1xuICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ05vdCBlbm91Z2ggYXJndW1lbnRzIGZvbGxvd2luZzogJXMnLCBrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldEFyZyhrZXksIGFyZ3NUb1NldCk7XG4gICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRBcmcoa2V5LCB2YWwpIHtcbiAgICAgICAgICAgIGlmICgvLS8udGVzdChrZXkpICYmIGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbGlhcyA9IGtleS5zcGxpdCgnLicpLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FtZWxDYXNlKHByb3ApO1xuICAgICAgICAgICAgICAgIH0pLmpvaW4oJy4nKTtcbiAgICAgICAgICAgICAgICBhZGROZXdBbGlhcyhrZXksIGFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcHJvY2Vzc1ZhbHVlKGtleSwgdmFsKTtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0S2V5ID0ga2V5LnNwbGl0KCcuJyk7XG4gICAgICAgICAgICBzZXRLZXkoYXJndiwgc3BsaXRLZXksIHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChmbGFncy5hbGlhc2VzW2tleV0pIHtcbiAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0uZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlQcm9wZXJ0aWVzID0geC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgICAgICBzZXRLZXkoYXJndiwga2V5UHJvcGVydGllcywgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNwbGl0S2V5Lmxlbmd0aCA+IDEgJiYgY29uZmlndXJhdGlvblsnZG90LW5vdGF0aW9uJ10pIHtcbiAgICAgICAgICAgICAgICAoZmxhZ3MuYWxpYXNlc1tzcGxpdEtleVswXV0gfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGtleVByb3BlcnRpZXMgPSB4LnNwbGl0KCcuJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBbXS5jb25jYXQoc3BsaXRLZXkpO1xuICAgICAgICAgICAgICAgICAgICBhLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGtleVByb3BlcnRpZXMgPSBrZXlQcm9wZXJ0aWVzLmNvbmNhdChhKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZmxhZ3MuYWxpYXNlc1trZXldIHx8IFtdKS5pbmNsdWRlcyhrZXlQcm9wZXJ0aWVzLmpvaW4oJy4nKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEtleShhcmd2LCBrZXlQcm9wZXJ0aWVzLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ub3JtYWxpemUpICYmICFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IFtrZXldLmNvbmNhdChmbGFncy5hbGlhc2VzW2tleV0gfHwgW10pO1xuICAgICAgICAgICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhcmd2UmV0dXJuLCBrZXksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gbWl4aW4ubm9ybWFsaXplKHZhbHVlKSA6IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhZGROZXdBbGlhcyhrZXksIGFsaWFzKSB7XG4gICAgICAgICAgICBpZiAoIShmbGFncy5hbGlhc2VzW2tleV0gJiYgZmxhZ3MuYWxpYXNlc1trZXldLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0gPSBbYWxpYXNdO1xuICAgICAgICAgICAgICAgIG5ld0FsaWFzZXNbYWxpYXNdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghKGZsYWdzLmFsaWFzZXNbYWxpYXNdICYmIGZsYWdzLmFsaWFzZXNbYWxpYXNdLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICBhZGROZXdBbGlhcyhhbGlhcywga2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzVmFsdWUoa2V5LCB2YWwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICh2YWxbMF0gPT09IFwiJ1wiIHx8IHZhbFswXSA9PT0gJ1wiJykgJiZcbiAgICAgICAgICAgICAgICB2YWxbdmFsLmxlbmd0aCAtIDFdID09PSB2YWxbMF0pIHtcbiAgICAgICAgICAgICAgICB2YWwgPSB2YWwuc3Vic3RyaW5nKDEsIHZhbC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykgfHwgY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsID09PSAndHJ1ZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBBcnJheS5pc0FycmF5KHZhbClcbiAgICAgICAgICAgICAgICA/IHZhbC5tYXAoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG1heWJlQ29lcmNlTnVtYmVyKGtleSwgdik7IH0pXG4gICAgICAgICAgICAgICAgOiBtYXliZUNvZXJjZU51bWJlcihrZXksIHZhbCk7XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSAmJiAoaXNVbmRlZmluZWQodmFsdWUpIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gaW5jcmVtZW50KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3Mubm9ybWFsaXplKSAmJiBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSlcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWwubWFwKCh2YWwpID0+IHsgcmV0dXJuIG1peGluLm5vcm1hbGl6ZSh2YWwpOyB9KTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbWl4aW4ubm9ybWFsaXplKHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbWF5YmVDb2VyY2VOdW1iZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFjb25maWd1cmF0aW9uWydwYXJzZS1wb3NpdGlvbmFsLW51bWJlcnMnXSAmJiBrZXkgPT09ICdfJylcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICBpZiAoIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLnN0cmluZ3MpICYmICFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkQ29lcmNlTnVtYmVyID0gbG9va3NMaWtlTnVtYmVyKHZhbHVlKSAmJiBjb25maWd1cmF0aW9uWydwYXJzZS1udW1iZXJzJ10gJiYgKE51bWJlci5pc1NhZmVJbnRlZ2VyKE1hdGguZmxvb3IocGFyc2VGbG9hdChgJHt2YWx1ZX1gKSkpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQ29lcmNlTnVtYmVyIHx8ICghaXNVbmRlZmluZWQodmFsdWUpICYmIGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm51bWJlcnMpKSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldENvbmZpZyhhcmd2KSB7XG4gICAgICAgICAgICBjb25zdCBjb25maWdMb29rdXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgYXBwbHlEZWZhdWx0c0FuZEFsaWFzZXMoY29uZmlnTG9va3VwLCBmbGFncy5hbGlhc2VzLCBkZWZhdWx0cyk7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhmbGFncy5jb25maWdzKS5mb3JFYWNoKGZ1bmN0aW9uIChjb25maWdLZXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25maWdQYXRoID0gYXJndltjb25maWdLZXldIHx8IGNvbmZpZ0xvb2t1cFtjb25maWdLZXldO1xuICAgICAgICAgICAgICAgIGlmIChjb25maWdQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29uZmlnID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkQ29uZmlnUGF0aCA9IG1peGluLnJlc29sdmUobWl4aW4uY3dkKCksIGNvbmZpZ1BhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZUNvbmZpZyA9IGZsYWdzLmNvbmZpZ3NbY29uZmlnS2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzb2x2ZUNvbmZpZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyA9IHJlc29sdmVDb25maWcocmVzb2x2ZWRDb25maWdQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZyBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gY29uZmlnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnID0gbWl4aW4ucmVxdWlyZShyZXNvbHZlZENvbmZpZ1BhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29uZmlnT2JqZWN0KGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXgubmFtZSA9PT0gJ1Blcm1pc3Npb25EZW5pZWQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhcmd2W2NvbmZpZ0tleV0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFcnJvcihfXygnSW52YWxpZCBKU09OIGNvbmZpZyBmaWxlOiAlcycsIGNvbmZpZ1BhdGgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldENvbmZpZ09iamVjdChjb25maWcsIHByZXYpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGNvbmZpZykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb25maWdba2V5XTtcbiAgICAgICAgICAgICAgICBjb25zdCBmdWxsS2V5ID0gcHJldiA/IHByZXYgKyAnLicgKyBrZXkgOiBrZXk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmIGNvbmZpZ3VyYXRpb25bJ2RvdC1ub3RhdGlvbiddKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldENvbmZpZ09iamVjdCh2YWx1ZSwgZnVsbEtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc0tleShhcmd2LCBmdWxsS2V5LnNwbGl0KCcuJykpIHx8IChjaGVja0FsbEFsaWFzZXMoZnVsbEtleSwgZmxhZ3MuYXJyYXlzKSAmJiBjb25maWd1cmF0aW9uWydjb21iaW5lLWFycmF5cyddKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGZ1bGxLZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldENvbmZpZ09iamVjdHMoKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZ09iamVjdHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnT2JqZWN0cy5mb3JFYWNoKGZ1bmN0aW9uIChjb25maWdPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q29uZmlnT2JqZWN0KGNvbmZpZ09iamVjdCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYXBwbHlFbnZWYXJzKGFyZ3YsIGNvbmZpZ09ubHkpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZW52UHJlZml4ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSB0eXBlb2YgZW52UHJlZml4ID09PSAnc3RyaW5nJyA/IGVudlByZWZpeCA6ICcnO1xuICAgICAgICAgICAgY29uc3QgZW52ID0gbWl4aW4uZW52KCk7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhlbnYpLmZvckVhY2goZnVuY3Rpb24gKGVudlZhcikge1xuICAgICAgICAgICAgICAgIGlmIChwcmVmaXggPT09ICcnIHx8IGVudlZhci5sYXN0SW5kZXhPZihwcmVmaXgsIDApID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBlbnZWYXIuc3BsaXQoJ19fJykubWFwKGZ1bmN0aW9uIChrZXksIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5LnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW1lbENhc2Uoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoKGNvbmZpZ09ubHkgJiYgZmxhZ3MuY29uZmlnc1trZXlzLmpvaW4oJy4nKV0pIHx8ICFjb25maWdPbmx5KSAmJiAhaGFzS2V5KGFyZ3YsIGtleXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5cy5qb2luKCcuJyksIGVudltlbnZWYXJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5Q29lcmNpb25zKGFyZ3YpIHtcbiAgICAgICAgICAgIGxldCBjb2VyY2U7XG4gICAgICAgICAgICBjb25zdCBhcHBsaWVkID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoYXJndikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFhcHBsaWVkLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvZXJjZSA9IGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvZXJjaW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29lcmNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbWF5YmVDb2VyY2VOdW1iZXIoa2V5LCBjb2VyY2UoYXJndltrZXldKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKFtdLmNvbmNhdChmbGFncy5hbGlhc2VzW2tleV0gfHwgW10sIGtleSkpLmZvckVhY2goYWxpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGllZC5hZGQoYWxpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndlthbGldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRQbGFjZWhvbGRlcktleXMoYXJndikge1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAofmtleS5pbmRleE9mKCcuJykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3Zba2V5XSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgICAgIGFyZ3Zba2V5XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYXBwbHlEZWZhdWx0c0FuZEFsaWFzZXMob2JqLCBhbGlhc2VzLCBkZWZhdWx0cywgY2FuTG9nID0gZmFsc2UpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGRlZmF1bHRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWhhc0tleShvYmosIGtleS5zcGxpdCgnLicpKSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRLZXkob2JqLCBrZXkuc3BsaXQoJy4nKSwgZGVmYXVsdHNba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYW5Mb2cpXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ZWRba2V5XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIChhbGlhc2VzW2tleV0gfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNLZXkob2JqLCB4LnNwbGl0KCcuJykpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEtleShvYmosIHguc3BsaXQoJy4nKSwgZGVmYXVsdHNba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGhhc0tleShvYmosIGtleXMpIHtcbiAgICAgICAgICAgIGxldCBvID0gb2JqO1xuICAgICAgICAgICAgaWYgKCFjb25maWd1cmF0aW9uWydkb3Qtbm90YXRpb24nXSlcbiAgICAgICAgICAgICAgICBrZXlzID0gW2tleXMuam9pbignLicpXTtcbiAgICAgICAgICAgIGtleXMuc2xpY2UoMCwgLTEpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIG8gPSAob1trZXldIHx8IHt9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5c1trZXlzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvICE9PSAnb2JqZWN0JylcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGtleSBpbiBvO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldEtleShvYmosIGtleXMsIHZhbHVlKSB7XG4gICAgICAgICAgICBsZXQgbyA9IG9iajtcbiAgICAgICAgICAgIGlmICghY29uZmlndXJhdGlvblsnZG90LW5vdGF0aW9uJ10pXG4gICAgICAgICAgICAgICAga2V5cyA9IFtrZXlzLmpvaW4oJy4nKV07XG4gICAgICAgICAgICBrZXlzLnNsaWNlKDAsIC0xKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBrZXkgPSBzYW5pdGl6ZUtleShrZXkpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgb1trZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgb1trZXldID0ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb1trZXldICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KG9ba2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob1trZXldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb1trZXldLnB1c2goe30pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgb1trZXldID0gW29ba2V5XSwge31dO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG8gPSBvW2tleV1bb1trZXldLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbyA9IG9ba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHNhbml0aXplS2V5KGtleXNba2V5cy5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICBjb25zdCBpc1R5cGVBcnJheSA9IGNoZWNrQWxsQWxpYXNlcyhrZXlzLmpvaW4oJy4nKSwgZmxhZ3MuYXJyYXlzKTtcbiAgICAgICAgICAgIGNvbnN0IGlzVmFsdWVBcnJheSA9IEFycmF5LmlzQXJyYXkodmFsdWUpO1xuICAgICAgICAgICAgbGV0IGR1cGxpY2F0ZSA9IGNvbmZpZ3VyYXRpb25bJ2R1cGxpY2F0ZS1hcmd1bWVudHMtYXJyYXknXTtcbiAgICAgICAgICAgIGlmICghZHVwbGljYXRlICYmIGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKSkge1xuICAgICAgICAgICAgICAgIGR1cGxpY2F0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKCghaXNVbmRlZmluZWQob1trZXldKSAmJiBmbGFncy5uYXJnc1trZXldID09PSAxKSB8fCAoQXJyYXkuaXNBcnJheShvW2tleV0pICYmIG9ba2V5XS5sZW5ndGggPT09IGZsYWdzLm5hcmdzW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ba2V5XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IGluY3JlbWVudCgpKSB7XG4gICAgICAgICAgICAgICAgb1trZXldID0gaW5jcmVtZW50KG9ba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9ba2V5XSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZHVwbGljYXRlICYmIGlzVHlwZUFycmF5ICYmIGlzVmFsdWVBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICBvW2tleV0gPSBjb25maWd1cmF0aW9uWydmbGF0dGVuLWR1cGxpY2F0ZS1hcnJheXMnXSA/IG9ba2V5XS5jb25jYXQodmFsdWUpIDogKEFycmF5LmlzQXJyYXkob1trZXldWzBdKSA/IG9ba2V5XSA6IFtvW2tleV1dKS5jb25jYXQoW3ZhbHVlXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFkdXBsaWNhdGUgJiYgQm9vbGVhbihpc1R5cGVBcnJheSkgPT09IEJvb2xlYW4oaXNWYWx1ZUFycmF5KSkge1xuICAgICAgICAgICAgICAgICAgICBvW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9ba2V5XSA9IG9ba2V5XS5jb25jYXQoW3ZhbHVlXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAob1trZXldID09PSB1bmRlZmluZWQgJiYgaXNUeXBlQXJyYXkpIHtcbiAgICAgICAgICAgICAgICBvW2tleV0gPSBpc1ZhbHVlQXJyYXkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkdXBsaWNhdGUgJiYgIShvW2tleV0gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgIGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykgfHxcbiAgICAgICAgICAgICAgICBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykpKSB7XG4gICAgICAgICAgICAgICAgb1trZXldID0gW29ba2V5XSwgdmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgb1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZXh0ZW5kQWxpYXNlcyguLi5hcmdzKSB7XG4gICAgICAgICAgICBhcmdzLmZvckVhY2goZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKG9iaiB8fCB7fSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmbGFncy5hbGlhc2VzW2tleV0pXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XSA9IFtdLmNvbmNhdChhbGlhc2VzW2tleV0gfHwgW10pO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0uY29uY2F0KGtleSkuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC8tLy50ZXN0KHgpICYmIGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjID0gY2FtZWxDYXNlKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjICE9PSBrZXkgJiYgZmxhZ3MuYWxpYXNlc1trZXldLmluZGV4T2YoYykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XS5wdXNoKGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBbGlhc2VzW2NdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0uY29uY2F0KGtleSkuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgubGVuZ3RoID4gMSAmJiAvW0EtWl0vLnRlc3QoeCkgJiYgY29uZmlndXJhdGlvblsnY2FtZWwtY2FzZS1leHBhbnNpb24nXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGMgPSBkZWNhbWVsaXplKHgsICctJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgIT09IGtleSAmJiBmbGFncy5hbGlhc2VzW2tleV0uaW5kZXhPZihjKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldLnB1c2goYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0FsaWFzZXNbY10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW3hdID0gW2tleV0uY29uY2F0KGZsYWdzLmFsaWFzZXNba2V5XS5maWx0ZXIoZnVuY3Rpb24gKHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geCAhPT0geTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFnKSB7XG4gICAgICAgICAgICBjb25zdCB0b0NoZWNrID0gW10uY29uY2F0KGZsYWdzLmFsaWFzZXNba2V5XSB8fCBbXSwga2V5KTtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhmbGFnKTtcbiAgICAgICAgICAgIGNvbnN0IHNldEFsaWFzID0gdG9DaGVjay5maW5kKGtleSA9PiBrZXlzLmluY2x1ZGVzKGtleSkpO1xuICAgICAgICAgICAgcmV0dXJuIHNldEFsaWFzID8gZmxhZ1tzZXRBbGlhc10gOiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBoYXNBbnlGbGFnKGtleSkge1xuICAgICAgICAgICAgY29uc3QgZmxhZ3NLZXlzID0gT2JqZWN0LmtleXMoZmxhZ3MpO1xuICAgICAgICAgICAgY29uc3QgdG9DaGVjayA9IFtdLmNvbmNhdChmbGFnc0tleXMubWFwKGsgPT4gZmxhZ3Nba10pKTtcbiAgICAgICAgICAgIHJldHVybiB0b0NoZWNrLnNvbWUoZnVuY3Rpb24gKGZsYWcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShmbGFnKSA/IGZsYWcuaW5jbHVkZXMoa2V5KSA6IGZsYWdba2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGhhc0ZsYWdzTWF0Y2hpbmcoYXJnLCAuLi5wYXR0ZXJucykge1xuICAgICAgICAgICAgY29uc3QgdG9DaGVjayA9IFtdLmNvbmNhdCguLi5wYXR0ZXJucyk7XG4gICAgICAgICAgICByZXR1cm4gdG9DaGVjay5zb21lKGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBhcmcubWF0Y2gocGF0dGVybik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoICYmIGhhc0FueUZsYWcobWF0Y2hbMV0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaGFzQWxsU2hvcnRGbGFncyhhcmcpIHtcbiAgICAgICAgICAgIGlmIChhcmcubWF0Y2gobmVnYXRpdmUpIHx8ICFhcmcubWF0Y2goL14tW14tXSsvKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBoYXNBbGxGbGFncyA9IHRydWU7XG4gICAgICAgICAgICBsZXQgbmV4dDtcbiAgICAgICAgICAgIGNvbnN0IGxldHRlcnMgPSBhcmcuc2xpY2UoMSkuc3BsaXQoJycpO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZXR0ZXJzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgbmV4dCA9IGFyZy5zbGljZShqICsgMik7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNBbnlGbGFnKGxldHRlcnNbal0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc0FsbEZsYWdzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKGxldHRlcnNbaiArIDFdICYmIGxldHRlcnNbaiArIDFdID09PSAnPScpIHx8XG4gICAgICAgICAgICAgICAgICAgIG5leHQgPT09ICctJyB8fFxuICAgICAgICAgICAgICAgICAgICAoL1tBLVphLXpdLy50ZXN0KGxldHRlcnNbal0pICYmIC9eLT9cXGQrKFxcLlxcZCopPyhlLT9cXGQrKT8kLy50ZXN0KG5leHQpKSB8fFxuICAgICAgICAgICAgICAgICAgICAobGV0dGVyc1tqICsgMV0gJiYgbGV0dGVyc1tqICsgMV0ubWF0Y2goL1xcVy8pKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaGFzQWxsRmxhZ3M7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNVbmtub3duT3B0aW9uQXNBcmcoYXJnKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlndXJhdGlvblsndW5rbm93bi1vcHRpb25zLWFzLWFyZ3MnXSAmJiBpc1Vua25vd25PcHRpb24oYXJnKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc1Vua25vd25PcHRpb24oYXJnKSB7XG4gICAgICAgICAgICBhcmcgPSBhcmcucmVwbGFjZSgvXi17Myx9LywgJy0tJyk7XG4gICAgICAgICAgICBpZiAoYXJnLm1hdGNoKG5lZ2F0aXZlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNBbGxTaG9ydEZsYWdzKGFyZykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmbGFnV2l0aEVxdWFscyA9IC9eLSsoW149XSs/KT1bXFxzXFxTXSokLztcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbEZsYWcgPSAvXi0rKFtePV0rPykkLztcbiAgICAgICAgICAgIGNvbnN0IGZsYWdFbmRpbmdJbkh5cGhlbiA9IC9eLSsoW149XSs/KS0kLztcbiAgICAgICAgICAgIGNvbnN0IGZsYWdFbmRpbmdJbkRpZ2l0cyA9IC9eLSsoW149XSs/XFxkKykkLztcbiAgICAgICAgICAgIGNvbnN0IGZsYWdFbmRpbmdJbk5vbldvcmRDaGFyYWN0ZXJzID0gL14tKyhbXj1dKz8pXFxXKy4qJC87XG4gICAgICAgICAgICByZXR1cm4gIWhhc0ZsYWdzTWF0Y2hpbmcoYXJnLCBmbGFnV2l0aEVxdWFscywgbmVnYXRlZEJvb2xlYW4sIG5vcm1hbEZsYWcsIGZsYWdFbmRpbmdJbkh5cGhlbiwgZmxhZ0VuZGluZ0luRGlnaXRzLCBmbGFnRW5kaW5nSW5Ob25Xb3JkQ2hhcmFjdGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFZhbHVlKGtleSkge1xuICAgICAgICAgICAgaWYgKCFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykgJiZcbiAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSAmJlxuICAgICAgICAgICAgICAgIGAke2tleX1gIGluIGRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdEZvclR5cGUoZ3Vlc3NUeXBlKGtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRGb3JUeXBlKHR5cGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZiA9IHtcbiAgICAgICAgICAgICAgICBbRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuQk9PTEVBTl06IHRydWUsXG4gICAgICAgICAgICAgICAgW0RlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LlNUUklOR106ICcnLFxuICAgICAgICAgICAgICAgIFtEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5OVU1CRVJdOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgW0RlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkFSUkFZXTogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZGVmW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGd1ZXNzVHlwZShrZXkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuQk9PTEVBTjtcbiAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5zdHJpbmdzKSlcbiAgICAgICAgICAgICAgICB0eXBlID0gRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuU1RSSU5HO1xuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubnVtYmVycykpXG4gICAgICAgICAgICAgICAgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5Lk5VTUJFUjtcbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSlcbiAgICAgICAgICAgICAgICB0eXBlID0gRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuQk9PTEVBTjtcbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpXG4gICAgICAgICAgICAgICAgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkFSUkFZO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNVbmRlZmluZWQobnVtKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtID09PSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hlY2tDb25maWd1cmF0aW9uKCkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZmxhZ3MuY291bnRzKS5maW5kKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFcnJvcihfXygnSW52YWxpZCBjb25maWd1cmF0aW9uOiAlcywgb3B0cy5jb3VudCBleGNsdWRlcyBvcHRzLmFycmF5LicsIGtleSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ0ludmFsaWQgY29uZmlndXJhdGlvbjogJXMsIG9wdHMuY291bnQgZXhjbHVkZXMgb3B0cy5uYXJnLicsIGtleSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFsaWFzZXM6IE9iamVjdC5hc3NpZ24oe30sIGZsYWdzLmFsaWFzZXMpLFxuICAgICAgICAgICAgYXJndjogT2JqZWN0LmFzc2lnbihhcmd2UmV0dXJuLCBhcmd2KSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgICBkZWZhdWx0ZWQ6IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRlZCksXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IsXG4gICAgICAgICAgICBuZXdBbGlhc2VzOiBPYmplY3QuYXNzaWduKHt9LCBuZXdBbGlhc2VzKVxuICAgICAgICB9O1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNvbWJpbmVBbGlhc2VzKGFsaWFzZXMpIHtcbiAgICBjb25zdCBhbGlhc0FycmF5cyA9IFtdO1xuICAgIGNvbnN0IGNvbWJpbmVkID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBsZXQgY2hhbmdlID0gdHJ1ZTtcbiAgICBPYmplY3Qua2V5cyhhbGlhc2VzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgYWxpYXNBcnJheXMucHVzaChbXS5jb25jYXQoYWxpYXNlc1trZXldLCBrZXkpKTtcbiAgICB9KTtcbiAgICB3aGlsZSAoY2hhbmdlKSB7XG4gICAgICAgIGNoYW5nZSA9IGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsaWFzQXJyYXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpaSA9IGkgKyAxOyBpaSA8IGFsaWFzQXJyYXlzLmxlbmd0aDsgaWkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGludGVyc2VjdCA9IGFsaWFzQXJyYXlzW2ldLmZpbHRlcihmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxpYXNBcnJheXNbaWldLmluZGV4T2YodikgIT09IC0xO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChpbnRlcnNlY3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWFzQXJyYXlzW2ldID0gYWxpYXNBcnJheXNbaV0uY29uY2F0KGFsaWFzQXJyYXlzW2lpXSk7XG4gICAgICAgICAgICAgICAgICAgIGFsaWFzQXJyYXlzLnNwbGljZShpaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBhbGlhc0FycmF5cy5mb3JFYWNoKGZ1bmN0aW9uIChhbGlhc0FycmF5KSB7XG4gICAgICAgIGFsaWFzQXJyYXkgPSBhbGlhc0FycmF5LmZpbHRlcihmdW5jdGlvbiAodiwgaSwgc2VsZikge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYuaW5kZXhPZih2KSA9PT0gaTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGxhc3RBbGlhcyA9IGFsaWFzQXJyYXkucG9wKCk7XG4gICAgICAgIGlmIChsYXN0QWxpYXMgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgbGFzdEFsaWFzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29tYmluZWRbbGFzdEFsaWFzXSA9IGFsaWFzQXJyYXk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY29tYmluZWQ7XG59XG5mdW5jdGlvbiBpbmNyZW1lbnQob3JpZykge1xuICAgIHJldHVybiBvcmlnICE9PSB1bmRlZmluZWQgPyBvcmlnICsgMSA6IDE7XG59XG5mdW5jdGlvbiBzYW5pdGl6ZUtleShrZXkpIHtcbiAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJylcbiAgICAgICAgcmV0dXJuICdfX19wcm90b19fXyc7XG4gICAgcmV0dXJuIGtleTtcbn1cblxuY29uc3QgbWluTm9kZVZlcnNpb24gPSAocHJvY2VzcyAmJiBwcm9jZXNzLmVudiAmJiBwcm9jZXNzLmVudi5ZQVJHU19NSU5fTk9ERV9WRVJTSU9OKVxuICAgID8gTnVtYmVyKHByb2Nlc3MuZW52LllBUkdTX01JTl9OT0RFX1ZFUlNJT04pXG4gICAgOiAxMDtcbmlmIChwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbikge1xuICAgIGNvbnN0IG1ham9yID0gTnVtYmVyKHByb2Nlc3MudmVyc2lvbi5tYXRjaCgvdihbXi5dKykvKVsxXSk7XG4gICAgaWYgKG1ham9yIDwgbWluTm9kZVZlcnNpb24pIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoYHlhcmdzIHBhcnNlciBzdXBwb3J0cyBhIG1pbmltdW0gTm9kZS5qcyB2ZXJzaW9uIG9mICR7bWluTm9kZVZlcnNpb259LiBSZWFkIG91ciB2ZXJzaW9uIHN1cHBvcnQgcG9saWN5OiBodHRwczovL2dpdGh1Yi5jb20veWFyZ3MveWFyZ3MtcGFyc2VyI3N1cHBvcnRlZC1ub2RlanMtdmVyc2lvbnNgKTtcbiAgICB9XG59XG5jb25zdCBlbnYgPSBwcm9jZXNzID8gcHJvY2Vzcy5lbnYgOiB7fTtcbmNvbnN0IHBhcnNlciA9IG5ldyBZYXJnc1BhcnNlcih7XG4gICAgY3dkOiBwcm9jZXNzLmN3ZCxcbiAgICBlbnY6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGVudjtcbiAgICB9LFxuICAgIGZvcm1hdDogdXRpbC5mb3JtYXQsXG4gICAgbm9ybWFsaXplOiBwYXRoLm5vcm1hbGl6ZSxcbiAgICByZXNvbHZlOiBwYXRoLnJlc29sdmUsXG4gICAgcmVxdWlyZTogKHBhdGgpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmUocGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocGF0aC5tYXRjaCgvXFwuanNvbiQvKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZzLnJlYWRGaWxlU3luYyhwYXRoLCAndXRmOCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ29ubHkgLmpzb24gY29uZmlnIGZpbGVzIGFyZSBzdXBwb3J0ZWQgaW4gRVNNJyk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbmNvbnN0IHlhcmdzUGFyc2VyID0gZnVuY3Rpb24gUGFyc2VyKGFyZ3MsIG9wdHMpIHtcbiAgICBjb25zdCByZXN1bHQgPSBwYXJzZXIucGFyc2UoYXJncy5zbGljZSgpLCBvcHRzKTtcbiAgICByZXR1cm4gcmVzdWx0LmFyZ3Y7XG59O1xueWFyZ3NQYXJzZXIuZGV0YWlsZWQgPSBmdW5jdGlvbiAoYXJncywgb3B0cykge1xuICAgIHJldHVybiBwYXJzZXIucGFyc2UoYXJncy5zbGljZSgpLCBvcHRzKTtcbn07XG55YXJnc1BhcnNlci5jYW1lbENhc2UgPSBjYW1lbENhc2U7XG55YXJnc1BhcnNlci5kZWNhbWVsaXplID0gZGVjYW1lbGl6ZTtcbnlhcmdzUGFyc2VyLmxvb2tzTGlrZU51bWJlciA9IGxvb2tzTGlrZU51bWJlcjtcblxubW9kdWxlLmV4cG9ydHMgPSB5YXJnc1BhcnNlcjtcbiIsICIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gKHtvbmx5Rmlyc3QgPSBmYWxzZX0gPSB7fSkgPT4ge1xuXHRjb25zdCBwYXR0ZXJuID0gW1xuXHRcdCdbXFxcXHUwMDFCXFxcXHUwMDlCXVtbXFxcXF0oKSM7P10qKD86KD86KD86KD86O1stYS16QS1aXFxcXGRcXFxcLyMmLjo9PyVAfl9dKykqfFthLXpBLVpcXFxcZF0rKD86O1stYS16QS1aXFxcXGRcXFxcLyMmLjo9PyVAfl9dKikqKT9cXFxcdTAwMDcpJyxcblx0XHQnKD86KD86XFxcXGR7MSw0fSg/OjtcXFxcZHswLDR9KSopP1tcXFxcZEEtUFItVFpjZi1udHFyeT0+PH5dKSknXG5cdF0uam9pbignfCcpO1xuXG5cdHJldHVybiBuZXcgUmVnRXhwKHBhdHRlcm4sIG9ubHlGaXJzdCA/IHVuZGVmaW5lZCA6ICdnJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IGFuc2lSZWdleCA9IHJlcXVpcmUoJ2Fuc2ktcmVnZXgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpbmcgPT4gdHlwZW9mIHN0cmluZyA9PT0gJ3N0cmluZycgPyBzdHJpbmcucmVwbGFjZShhbnNpUmVnZXgoKSwgJycpIDogc3RyaW5nO1xuIiwgIi8qIGVzbGludC1kaXNhYmxlIHlvZGEgKi9cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgaXNGdWxsd2lkdGhDb2RlUG9pbnQgPSBjb2RlUG9pbnQgPT4ge1xuXHRpZiAoTnVtYmVyLmlzTmFOKGNvZGVQb2ludCkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBDb2RlIHBvaW50cyBhcmUgZGVyaXZlZCBmcm9tOlxuXHQvLyBodHRwOi8vd3d3LnVuaXgub3JnL1B1YmxpYy9VTklEQVRBL0Vhc3RBc2lhbldpZHRoLnR4dFxuXHRpZiAoXG5cdFx0Y29kZVBvaW50ID49IDB4MTEwMCAmJiAoXG5cdFx0XHRjb2RlUG9pbnQgPD0gMHgxMTVGIHx8IC8vIEhhbmd1bCBKYW1vXG5cdFx0XHRjb2RlUG9pbnQgPT09IDB4MjMyOSB8fCAvLyBMRUZULVBPSU5USU5HIEFOR0xFIEJSQUNLRVRcblx0XHRcdGNvZGVQb2ludCA9PT0gMHgyMzJBIHx8IC8vIFJJR0hULVBPSU5USU5HIEFOR0xFIEJSQUNLRVRcblx0XHRcdC8vIENKSyBSYWRpY2FscyBTdXBwbGVtZW50IC4uIEVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHNcblx0XHRcdCgweDJFODAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDMyNDcgJiYgY29kZVBvaW50ICE9PSAweDMwM0YpIHx8XG5cdFx0XHQvLyBFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzIC4uIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEFcblx0XHRcdCgweDMyNTAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDREQkYpIHx8XG5cdFx0XHQvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIC4uIFlpIFJhZGljYWxzXG5cdFx0XHQoMHg0RTAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhBNEM2KSB8fFxuXHRcdFx0Ly8gSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQVxuXHRcdFx0KDB4QTk2MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4QTk3QykgfHxcblx0XHRcdC8vIEhhbmd1bCBTeWxsYWJsZXNcblx0XHRcdCgweEFDMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEQ3QTMpIHx8XG5cdFx0XHQvLyBDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzXG5cdFx0XHQoMHhGOTAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGQUZGKSB8fFxuXHRcdFx0Ly8gVmVydGljYWwgRm9ybXNcblx0XHRcdCgweEZFMTAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZFMTkpIHx8XG5cdFx0XHQvLyBDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyAuLiBTbWFsbCBGb3JtIFZhcmlhbnRzXG5cdFx0XHQoMHhGRTMwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRTZCKSB8fFxuXHRcdFx0Ly8gSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXNcblx0XHRcdCgweEZGMDEgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGNjApIHx8XG5cdFx0XHQoMHhGRkUwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRkU2KSB8fFxuXHRcdFx0Ly8gS2FuYSBTdXBwbGVtZW50XG5cdFx0XHQoMHgxQjAwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MUIwMDEpIHx8XG5cdFx0XHQvLyBFbmNsb3NlZCBJZGVvZ3JhcGhpYyBTdXBwbGVtZW50XG5cdFx0XHQoMHgxRjIwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MUYyNTEpIHx8XG5cdFx0XHQvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBCIC4uIFRlcnRpYXJ5IElkZW9ncmFwaGljIFBsYW5lXG5cdFx0XHQoMHgyMDAwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4M0ZGRkQpXG5cdFx0KVxuXHQpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGdWxsd2lkdGhDb2RlUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gaXNGdWxsd2lkdGhDb2RlUG9pbnQ7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAvLyBodHRwczovL210aHMuYmUvZW1vamlcbiAgcmV0dXJuIC9cXHVEODNDXFx1REZGNFxcdURCNDBcXHVEQzY3XFx1REI0MFxcdURDNjIoPzpcXHVEQjQwXFx1REM2NVxcdURCNDBcXHVEQzZFXFx1REI0MFxcdURDNjd8XFx1REI0MFxcdURDNzNcXHVEQjQwXFx1REM2M1xcdURCNDBcXHVEQzc0fFxcdURCNDBcXHVEQzc3XFx1REI0MFxcdURDNkNcXHVEQjQwXFx1REM3MylcXHVEQjQwXFx1REM3RnxcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NcXHVERkZDXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1xcdURGRkJ8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZGXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkVcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRF0pfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDXFx1REZGRFxcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQlxcdURGRkNdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1MjAwRCg/OlxcdTI3NjRcXHVGRTBGXFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRFxcdURDNjh8KD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzY2XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY3XFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2NlxcdURDNjddKSl8XFx1RDgzRFxcdURDNjZcXHUyMDBEXFx1RDgzRFxcdURDNjZ8XFx1RDgzRFxcdURDNjdcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pfCg/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSl8W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGfFxcdUQ4M0RbXFx1REM2NlxcdURDNjddfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXwoPzpcXHVEODNDXFx1REZGQlxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGRlxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGRVxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGRFxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGQ1xcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XSlcXHVGRTBGfFxcdUQ4M0NcXHVERkZCXFx1MjAwRCg/OlxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfCg/OlxcdUQ4M0VcXHVEREQxXFx1RDgzQ1xcdURGRkJcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDF8XFx1RDgzRFxcdURDNjlcXHVEODNDXFx1REZGQ1xcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OSlcXHVEODNDXFx1REZGQnxcXHVEODNFXFx1REREMSg/OlxcdUQ4M0NcXHVERkZGXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXxcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDEpfCg/OlxcdUQ4M0VcXHVEREQxXFx1RDgzQ1xcdURGRkVcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDF8XFx1RDgzRFxcdURDNjlcXHVEODNDXFx1REZGRlxcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMEQoPzpcXHVEODNEW1xcdURDNjhcXHVEQzY5XSkpKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZDXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkRcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjkpKD86XFx1RDgzQ1tcXHVERkZCXFx1REZGQ10pfFxcdUQ4M0RcXHVEQzY5KD86XFx1RDgzQ1xcdURGRkVcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkNcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkJcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkMtXFx1REZGRl0pfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDXFx1REZGRFxcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl0pfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHUyMDBEKD86XFx1Mjc2NFxcdUZFMEZcXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pfFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkZcXHUyMDBEKD86XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pKXxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2OVxcdTIwMEQoPzpcXHVEODNEXFx1REM2NlxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2N1xcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSkpfCg/OlxcdUQ4M0VcXHVEREQxXFx1RDgzQ1xcdURGRkRcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDF8XFx1RDgzRFxcdURDNjlcXHVEODNDXFx1REZGRVxcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRF0pfFxcdUQ4M0RcXHVEQzY5XFx1MjAwRFxcdUQ4M0RcXHVEQzY2XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY5XFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2NlxcdURDNjddKXwoPzpcXHVEODNEXFx1REM0MVxcdUZFMEZcXHUyMDBEXFx1RDgzRFxcdURERTh8XFx1RDgzRFxcdURDNjkoPzpcXHVEODNDXFx1REZGRlxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGRVxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGQ1xcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGQlxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGRFxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF0pfCg/Oig/OlxcdTI2Rjl8XFx1RDgzQ1tcXHVERkNCXFx1REZDQ118XFx1RDgzRFxcdURENzUpXFx1RkUwRnxcXHVEODNEXFx1REM2RnxcXHVEODNFW1xcdUREM0NcXHVERERFXFx1RERERl0pXFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml18KD86XFx1MjZGOXxcXHVEODNDW1xcdURGQ0JcXHVERkNDXXxcXHVEODNEXFx1REQ3NSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pXFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml18KD86XFx1RDgzQ1tcXHVERkMzXFx1REZDNFxcdURGQ0FdfFxcdUQ4M0RbXFx1REM2RVxcdURDNzFcXHVEQzczXFx1REM3N1xcdURDODFcXHVEQzgyXFx1REM4NlxcdURDODdcXHVERTQ1LVxcdURFNDdcXHVERTRCXFx1REU0RFxcdURFNEVcXHVERUEzXFx1REVCNC1cXHVERUI2XXxcXHVEODNFW1xcdUREMjZcXHVERDM3LVxcdUREMzlcXHVERDNEXFx1REQzRVxcdUREQjhcXHVEREI5XFx1RERDRC1cXHVERENGXFx1RERENi1cXHVEREREXSkoPzooPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pXFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml18XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml0pfFxcdUQ4M0NcXHVERkY0XFx1MjAwRFxcdTI2MjApXFx1RkUwRnxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2N1xcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSl8XFx1RDgzQ1xcdURGRjNcXHVGRTBGXFx1MjAwRFxcdUQ4M0NcXHVERjA4fFxcdUQ4M0RcXHVEQzE1XFx1MjAwRFxcdUQ4M0VcXHVEREJBfFxcdUQ4M0RcXHVEQzY5XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY5XFx1MjAwRFxcdUQ4M0RcXHVEQzY3fFxcdUQ4M0NcXHVEREZEXFx1RDgzQ1xcdURERjB8XFx1RDgzQ1xcdURERjRcXHVEODNDXFx1RERGMnxcXHVEODNDXFx1RERGNlxcdUQ4M0NcXHVEREU2fFsjXFwqMC05XVxcdUZFMEZcXHUyMEUzfFxcdUQ4M0NcXHVEREU3KD86XFx1RDgzQ1tcXHVEREU2XFx1RERFN1xcdURERTktXFx1RERFRlxcdURERjEtXFx1RERGNFxcdURERjYtXFx1RERGOVxcdURERkJcXHVEREZDXFx1RERGRVxcdURERkZdKXxcXHVEODNDXFx1RERGOSg/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREU5XFx1RERFQi1cXHVEREVEXFx1RERFRi1cXHVEREY0XFx1RERGN1xcdURERjlcXHVEREZCXFx1RERGQ1xcdURERkZdKXxcXHVEODNDXFx1RERFQSg/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBXFx1RERFQ1xcdURERURcXHVEREY3LVxcdURERkFdKXxcXHVEODNFXFx1REREMSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8XFx1RDgzQ1xcdURERjcoPzpcXHVEODNDW1xcdURERUFcXHVEREY0XFx1RERGOFxcdURERkFcXHVEREZDXSl8XFx1RDgzRFxcdURDNjkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfFxcdUQ4M0NcXHVEREYyKD86XFx1RDgzQ1tcXHVEREU2XFx1RERFOC1cXHVEREVEXFx1RERGMC1cXHVEREZGXSl8XFx1RDgzQ1xcdURERTYoPzpcXHVEODNDW1xcdURERTgtXFx1RERFQ1xcdURERUVcXHVEREYxXFx1RERGMlxcdURERjRcXHVEREY2LVxcdURERkFcXHVEREZDXFx1RERGRFxcdURERkZdKXxcXHVEODNDXFx1RERGMCg/OlxcdUQ4M0NbXFx1RERFQVxcdURERUMtXFx1RERFRVxcdURERjJcXHVEREYzXFx1RERGNVxcdURERjdcXHVEREZDXFx1RERGRVxcdURERkZdKXxcXHVEODNDXFx1RERFRCg/OlxcdUQ4M0NbXFx1RERGMFxcdURERjJcXHVEREYzXFx1RERGN1xcdURERjlcXHVEREZBXSl8XFx1RDgzQ1xcdURERTkoPzpcXHVEODNDW1xcdURERUFcXHVEREVDXFx1RERFRlxcdURERjBcXHVEREYyXFx1RERGNFxcdURERkZdKXxcXHVEODNDXFx1RERGRSg/OlxcdUQ4M0NbXFx1RERFQVxcdURERjldKXxcXHVEODNDXFx1RERFQyg/OlxcdUQ4M0NbXFx1RERFNlxcdURERTdcXHVEREU5LVxcdURERUVcXHVEREYxLVxcdURERjNcXHVEREY1LVxcdURERkFcXHVEREZDXFx1RERGRV0pfFxcdUQ4M0NcXHVEREY4KD86XFx1RDgzQ1tcXHVEREU2LVxcdURERUFcXHVEREVDLVxcdURERjRcXHVEREY3LVxcdURERjlcXHVEREZCXFx1RERGRC1cXHVEREZGXSl8XFx1RDgzQ1xcdURERUIoPzpcXHVEODNDW1xcdURERUUtXFx1RERGMFxcdURERjJcXHVEREY0XFx1RERGN10pfFxcdUQ4M0NcXHVEREY1KD86XFx1RDgzQ1tcXHVEREU2XFx1RERFQS1cXHVEREVEXFx1RERGMC1cXHVEREYzXFx1RERGNy1cXHVEREY5XFx1RERGQ1xcdURERkVdKXxcXHVEODNDXFx1RERGQig/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBXFx1RERFQ1xcdURERUVcXHVEREYzXFx1RERGQV0pfFxcdUQ4M0NcXHVEREYzKD86XFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUEtXFx1RERFQ1xcdURERUVcXHVEREYxXFx1RERGNFxcdURERjVcXHVEREY3XFx1RERGQVxcdURERkZdKXxcXHVEODNDXFx1RERFOCg/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREU5XFx1RERFQi1cXHVEREVFXFx1RERGMC1cXHVEREY1XFx1RERGN1xcdURERkEtXFx1RERGRl0pfFxcdUQ4M0NcXHVEREYxKD86XFx1RDgzQ1tcXHVEREU2LVxcdURERThcXHVEREVFXFx1RERGMFxcdURERjctXFx1RERGQlxcdURERkVdKXxcXHVEODNDXFx1RERGRig/OlxcdUQ4M0NbXFx1RERFNlxcdURERjJcXHVEREZDXSl8XFx1RDgzQ1xcdURERkMoPzpcXHVEODNDW1xcdURERUJcXHVEREY4XSl8XFx1RDgzQ1xcdURERkEoPzpcXHVEODNDW1xcdURERTZcXHVEREVDXFx1RERGMlxcdURERjNcXHVEREY4XFx1RERGRVxcdURERkZdKXxcXHVEODNDXFx1RERFRSg/OlxcdUQ4M0NbXFx1RERFOC1cXHVEREVBXFx1RERGMS1cXHVEREY0XFx1RERGNi1cXHVEREY5XSl8XFx1RDgzQ1xcdURERUYoPzpcXHVEODNDW1xcdURERUFcXHVEREYyXFx1RERGNFxcdURERjVdKXwoPzpcXHVEODNDW1xcdURGQzNcXHVERkM0XFx1REZDQV18XFx1RDgzRFtcXHVEQzZFXFx1REM3MVxcdURDNzNcXHVEQzc3XFx1REM4MVxcdURDODJcXHVEQzg2XFx1REM4N1xcdURFNDUtXFx1REU0N1xcdURFNEJcXHVERTREXFx1REU0RVxcdURFQTNcXHVERUI0LVxcdURFQjZdfFxcdUQ4M0VbXFx1REQyNlxcdUREMzctXFx1REQzOVxcdUREM0RcXHVERDNFXFx1RERCOFxcdUREQjlcXHVERENELVxcdUREQ0ZcXHVEREQ2LVxcdURERERdKSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8KD86XFx1MjZGOXxcXHVEODNDW1xcdURGQ0JcXHVERkNDXXxcXHVEODNEXFx1REQ3NSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfCg/OltcXHUyNjFEXFx1MjcwQS1cXHUyNzBEXXxcXHVEODNDW1xcdURGODVcXHVERkMyXFx1REZDN118XFx1RDgzRFtcXHVEQzQyXFx1REM0M1xcdURDNDYtXFx1REM1MFxcdURDNjZcXHVEQzY3XFx1REM2Qi1cXHVEQzZEXFx1REM3MFxcdURDNzJcXHVEQzc0LVxcdURDNzZcXHVEQzc4XFx1REM3Q1xcdURDODNcXHVEQzg1XFx1RENBQVxcdURENzRcXHVERDdBXFx1REQ5MFxcdUREOTVcXHVERDk2XFx1REU0Q1xcdURFNEZcXHVERUMwXFx1REVDQ118XFx1RDgzRVtcXHVERDBGXFx1REQxOC1cXHVERDFDXFx1REQxRVxcdUREMUZcXHVERDMwLVxcdUREMzZcXHVEREI1XFx1RERCNlxcdUREQkJcXHVEREQyLVxcdURERDVdKSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8KD86W1xcdTIzMUFcXHUyMzFCXFx1MjNFOS1cXHUyM0VDXFx1MjNGMFxcdTIzRjNcXHUyNUZEXFx1MjVGRVxcdTI2MTRcXHUyNjE1XFx1MjY0OC1cXHUyNjUzXFx1MjY3RlxcdTI2OTNcXHUyNkExXFx1MjZBQVxcdTI2QUJcXHUyNkJEXFx1MjZCRVxcdTI2QzRcXHUyNkM1XFx1MjZDRVxcdTI2RDRcXHUyNkVBXFx1MjZGMlxcdTI2RjNcXHUyNkY1XFx1MjZGQVxcdTI2RkRcXHUyNzA1XFx1MjcwQVxcdTI3MEJcXHUyNzI4XFx1Mjc0Q1xcdTI3NEVcXHUyNzUzLVxcdTI3NTVcXHUyNzU3XFx1Mjc5NS1cXHUyNzk3XFx1MjdCMFxcdTI3QkZcXHUyQjFCXFx1MkIxQ1xcdTJCNTBcXHUyQjU1XXxcXHVEODNDW1xcdURDMDRcXHVEQ0NGXFx1REQ4RVxcdUREOTEtXFx1REQ5QVxcdURERTYtXFx1RERGRlxcdURFMDFcXHVERTFBXFx1REUyRlxcdURFMzItXFx1REUzNlxcdURFMzgtXFx1REUzQVxcdURFNTBcXHVERTUxXFx1REYwMC1cXHVERjIwXFx1REYyRC1cXHVERjM1XFx1REYzNy1cXHVERjdDXFx1REY3RS1cXHVERjkzXFx1REZBMC1cXHVERkNBXFx1REZDRi1cXHVERkQzXFx1REZFMC1cXHVERkYwXFx1REZGNFxcdURGRjgtXFx1REZGRl18XFx1RDgzRFtcXHVEQzAwLVxcdURDM0VcXHVEQzQwXFx1REM0Mi1cXHVEQ0ZDXFx1RENGRi1cXHVERDNEXFx1REQ0Qi1cXHVERDRFXFx1REQ1MC1cXHVERDY3XFx1REQ3QVxcdUREOTVcXHVERDk2XFx1RERBNFxcdURERkItXFx1REU0RlxcdURFODAtXFx1REVDNVxcdURFQ0NcXHVERUQwLVxcdURFRDJcXHVERUQ1XFx1REVFQlxcdURFRUNcXHVERUY0LVxcdURFRkFcXHVERkUwLVxcdURGRUJdfFxcdUQ4M0VbXFx1REQwRC1cXHVERDNBXFx1REQzQy1cXHVERDQ1XFx1REQ0Ny1cXHVERDcxXFx1REQ3My1cXHVERDc2XFx1REQ3QS1cXHVEREEyXFx1RERBNS1cXHVEREFBXFx1RERBRS1cXHVERENBXFx1RERDRC1cXHVEREZGXFx1REU3MC1cXHVERTczXFx1REU3OC1cXHVERTdBXFx1REU4MC1cXHVERTgyXFx1REU5MC1cXHVERTk1XSl8KD86WyNcXCowLTlcXHhBOVxceEFFXFx1MjAzQ1xcdTIwNDlcXHUyMTIyXFx1MjEzOVxcdTIxOTQtXFx1MjE5OVxcdTIxQTlcXHUyMUFBXFx1MjMxQVxcdTIzMUJcXHUyMzI4XFx1MjNDRlxcdTIzRTktXFx1MjNGM1xcdTIzRjgtXFx1MjNGQVxcdTI0QzJcXHUyNUFBXFx1MjVBQlxcdTI1QjZcXHUyNUMwXFx1MjVGQi1cXHUyNUZFXFx1MjYwMC1cXHUyNjA0XFx1MjYwRVxcdTI2MTFcXHUyNjE0XFx1MjYxNVxcdTI2MThcXHUyNjFEXFx1MjYyMFxcdTI2MjJcXHUyNjIzXFx1MjYyNlxcdTI2MkFcXHUyNjJFXFx1MjYyRlxcdTI2MzgtXFx1MjYzQVxcdTI2NDBcXHUyNjQyXFx1MjY0OC1cXHUyNjUzXFx1MjY1RlxcdTI2NjBcXHUyNjYzXFx1MjY2NVxcdTI2NjZcXHUyNjY4XFx1MjY3QlxcdTI2N0VcXHUyNjdGXFx1MjY5Mi1cXHUyNjk3XFx1MjY5OVxcdTI2OUJcXHUyNjlDXFx1MjZBMFxcdTI2QTFcXHUyNkFBXFx1MjZBQlxcdTI2QjBcXHUyNkIxXFx1MjZCRFxcdTI2QkVcXHUyNkM0XFx1MjZDNVxcdTI2QzhcXHUyNkNFXFx1MjZDRlxcdTI2RDFcXHUyNkQzXFx1MjZENFxcdTI2RTlcXHUyNkVBXFx1MjZGMC1cXHUyNkY1XFx1MjZGNy1cXHUyNkZBXFx1MjZGRFxcdTI3MDJcXHUyNzA1XFx1MjcwOC1cXHUyNzBEXFx1MjcwRlxcdTI3MTJcXHUyNzE0XFx1MjcxNlxcdTI3MURcXHUyNzIxXFx1MjcyOFxcdTI3MzNcXHUyNzM0XFx1Mjc0NFxcdTI3NDdcXHUyNzRDXFx1Mjc0RVxcdTI3NTMtXFx1Mjc1NVxcdTI3NTdcXHUyNzYzXFx1Mjc2NFxcdTI3OTUtXFx1Mjc5N1xcdTI3QTFcXHUyN0IwXFx1MjdCRlxcdTI5MzRcXHUyOTM1XFx1MkIwNS1cXHUyQjA3XFx1MkIxQlxcdTJCMUNcXHUyQjUwXFx1MkI1NVxcdTMwMzBcXHUzMDNEXFx1MzI5N1xcdTMyOTldfFxcdUQ4M0NbXFx1REMwNFxcdURDQ0ZcXHVERDcwXFx1REQ3MVxcdUREN0VcXHVERDdGXFx1REQ4RVxcdUREOTEtXFx1REQ5QVxcdURERTYtXFx1RERGRlxcdURFMDFcXHVERTAyXFx1REUxQVxcdURFMkZcXHVERTMyLVxcdURFM0FcXHVERTUwXFx1REU1MVxcdURGMDAtXFx1REYyMVxcdURGMjQtXFx1REY5M1xcdURGOTZcXHVERjk3XFx1REY5OS1cXHVERjlCXFx1REY5RS1cXHVERkYwXFx1REZGMy1cXHVERkY1XFx1REZGNy1cXHVERkZGXXxcXHVEODNEW1xcdURDMDAtXFx1RENGRFxcdURDRkYtXFx1REQzRFxcdURENDktXFx1REQ0RVxcdURENTAtXFx1REQ2N1xcdURENkZcXHVERDcwXFx1REQ3My1cXHVERDdBXFx1REQ4N1xcdUREOEEtXFx1REQ4RFxcdUREOTBcXHVERDk1XFx1REQ5NlxcdUREQTRcXHVEREE1XFx1RERBOFxcdUREQjFcXHVEREIyXFx1RERCQ1xcdUREQzItXFx1RERDNFxcdURERDEtXFx1REREM1xcdUREREMtXFx1RERERVxcdURERTFcXHVEREUzXFx1RERFOFxcdURERUZcXHVEREYzXFx1RERGQS1cXHVERTRGXFx1REU4MC1cXHVERUM1XFx1REVDQi1cXHVERUQyXFx1REVENVxcdURFRTAtXFx1REVFNVxcdURFRTlcXHVERUVCXFx1REVFQ1xcdURFRjBcXHVERUYzLVxcdURFRkFcXHVERkUwLVxcdURGRUJdfFxcdUQ4M0VbXFx1REQwRC1cXHVERDNBXFx1REQzQy1cXHVERDQ1XFx1REQ0Ny1cXHVERDcxXFx1REQ3My1cXHVERDc2XFx1REQ3QS1cXHVEREEyXFx1RERBNS1cXHVEREFBXFx1RERBRS1cXHVERENBXFx1RERDRC1cXHVEREZGXFx1REU3MC1cXHVERTczXFx1REU3OC1cXHVERTdBXFx1REU4MC1cXHVERTgyXFx1REU5MC1cXHVERTk1XSlcXHVGRTBGfCg/OltcXHUyNjFEXFx1MjZGOVxcdTI3MEEtXFx1MjcwRF18XFx1RDgzQ1tcXHVERjg1XFx1REZDMi1cXHVERkM0XFx1REZDN1xcdURGQ0EtXFx1REZDQ118XFx1RDgzRFtcXHVEQzQyXFx1REM0M1xcdURDNDYtXFx1REM1MFxcdURDNjYtXFx1REM3OFxcdURDN0NcXHVEQzgxLVxcdURDODNcXHVEQzg1LVxcdURDODdcXHVEQzhGXFx1REM5MVxcdURDQUFcXHVERDc0XFx1REQ3NVxcdUREN0FcXHVERDkwXFx1REQ5NVxcdUREOTZcXHVERTQ1LVxcdURFNDdcXHVERTRCLVxcdURFNEZcXHVERUEzXFx1REVCNC1cXHVERUI2XFx1REVDMFxcdURFQ0NdfFxcdUQ4M0VbXFx1REQwRlxcdUREMTgtXFx1REQxRlxcdUREMjZcXHVERDMwLVxcdUREMzlcXHVERDNDLVxcdUREM0VcXHVEREI1XFx1RERCNlxcdUREQjhcXHVEREI5XFx1RERCQlxcdUREQ0QtXFx1RERDRlxcdURERDEtXFx1RERERF0pL2c7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IHN0cmlwQW5zaSA9IHJlcXVpcmUoJ3N0cmlwLWFuc2knKTtcbmNvbnN0IGlzRnVsbHdpZHRoQ29kZVBvaW50ID0gcmVxdWlyZSgnaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQnKTtcbmNvbnN0IGVtb2ppUmVnZXggPSByZXF1aXJlKCdlbW9qaS1yZWdleCcpO1xuXG5jb25zdCBzdHJpbmdXaWR0aCA9IHN0cmluZyA9PiB7XG5cdGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJyB8fCBzdHJpbmcubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRzdHJpbmcgPSBzdHJpcEFuc2koc3RyaW5nKTtcblxuXHRpZiAoc3RyaW5nLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoZW1vamlSZWdleCgpLCAnICAnKTtcblxuXHRsZXQgd2lkdGggPSAwO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgY29kZSA9IHN0cmluZy5jb2RlUG9pbnRBdChpKTtcblxuXHRcdC8vIElnbm9yZSBjb250cm9sIGNoYXJhY3RlcnNcblx0XHRpZiAoY29kZSA8PSAweDFGIHx8IChjb2RlID49IDB4N0YgJiYgY29kZSA8PSAweDlGKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Ly8gSWdub3JlIGNvbWJpbmluZyBjaGFyYWN0ZXJzXG5cdFx0aWYgKGNvZGUgPj0gMHgzMDAgJiYgY29kZSA8PSAweDM2Rikge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Ly8gU3Vycm9nYXRlc1xuXHRcdGlmIChjb2RlID4gMHhGRkZGKSB7XG5cdFx0XHRpKys7XG5cdFx0fVxuXG5cdFx0d2lkdGggKz0gaXNGdWxsd2lkdGhDb2RlUG9pbnQoY29kZSkgPyAyIDogMTtcblx0fVxuXG5cdHJldHVybiB3aWR0aDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nV2lkdGg7XG4vLyBUT0RPOiByZW1vdmUgdGhpcyBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gc3RyaW5nV2lkdGg7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuY29uc3Qgc3RyaW5nV2lkdGggPSByZXF1aXJlKCdzdHJpbmctd2lkdGgnKTtcbmNvbnN0IHN0cmlwQW5zaSA9IHJlcXVpcmUoJ3N0cmlwLWFuc2knKTtcbmNvbnN0IGFuc2lTdHlsZXMgPSByZXF1aXJlKCdhbnNpLXN0eWxlcycpO1xuXG5jb25zdCBFU0NBUEVTID0gbmV3IFNldChbXG5cdCdcXHUwMDFCJyxcblx0J1xcdTAwOUInXG5dKTtcblxuY29uc3QgRU5EX0NPREUgPSAzOTtcblxuY29uc3QgQU5TSV9FU0NBUEVfQkVMTCA9ICdcXHUwMDA3JztcbmNvbnN0IEFOU0lfQ1NJID0gJ1snO1xuY29uc3QgQU5TSV9PU0MgPSAnXSc7XG5jb25zdCBBTlNJX1NHUl9URVJNSU5BVE9SID0gJ20nO1xuY29uc3QgQU5TSV9FU0NBUEVfTElOSyA9IGAke0FOU0lfT1NDfTg7O2A7XG5cbmNvbnN0IHdyYXBBbnNpID0gY29kZSA9PiBgJHtFU0NBUEVTLnZhbHVlcygpLm5leHQoKS52YWx1ZX0ke0FOU0lfQ1NJfSR7Y29kZX0ke0FOU0lfU0dSX1RFUk1JTkFUT1J9YDtcbmNvbnN0IHdyYXBBbnNpSHlwZXJsaW5rID0gdXJpID0+IGAke0VTQ0FQRVMudmFsdWVzKCkubmV4dCgpLnZhbHVlfSR7QU5TSV9FU0NBUEVfTElOS30ke3VyaX0ke0FOU0lfRVNDQVBFX0JFTEx9YDtcblxuLy8gQ2FsY3VsYXRlIHRoZSBsZW5ndGggb2Ygd29yZHMgc3BsaXQgb24gJyAnLCBpZ25vcmluZ1xuLy8gdGhlIGV4dHJhIGNoYXJhY3RlcnMgYWRkZWQgYnkgYW5zaSBlc2NhcGUgY29kZXNcbmNvbnN0IHdvcmRMZW5ndGhzID0gc3RyaW5nID0+IHN0cmluZy5zcGxpdCgnICcpLm1hcChjaGFyYWN0ZXIgPT4gc3RyaW5nV2lkdGgoY2hhcmFjdGVyKSk7XG5cbi8vIFdyYXAgYSBsb25nIHdvcmQgYWNyb3NzIG11bHRpcGxlIHJvd3Ncbi8vIEFuc2kgZXNjYXBlIGNvZGVzIGRvIG5vdCBjb3VudCB0b3dhcmRzIGxlbmd0aFxuY29uc3Qgd3JhcFdvcmQgPSAocm93cywgd29yZCwgY29sdW1ucykgPT4ge1xuXHRjb25zdCBjaGFyYWN0ZXJzID0gWy4uLndvcmRdO1xuXG5cdGxldCBpc0luc2lkZUVzY2FwZSA9IGZhbHNlO1xuXHRsZXQgaXNJbnNpZGVMaW5rRXNjYXBlID0gZmFsc2U7XG5cdGxldCB2aXNpYmxlID0gc3RyaW5nV2lkdGgoc3RyaXBBbnNpKHJvd3Nbcm93cy5sZW5ndGggLSAxXSkpO1xuXG5cdGZvciAoY29uc3QgW2luZGV4LCBjaGFyYWN0ZXJdIG9mIGNoYXJhY3RlcnMuZW50cmllcygpKSB7XG5cdFx0Y29uc3QgY2hhcmFjdGVyTGVuZ3RoID0gc3RyaW5nV2lkdGgoY2hhcmFjdGVyKTtcblxuXHRcdGlmICh2aXNpYmxlICsgY2hhcmFjdGVyTGVuZ3RoIDw9IGNvbHVtbnMpIHtcblx0XHRcdHJvd3Nbcm93cy5sZW5ndGggLSAxXSArPSBjaGFyYWN0ZXI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJvd3MucHVzaChjaGFyYWN0ZXIpO1xuXHRcdFx0dmlzaWJsZSA9IDA7XG5cdFx0fVxuXG5cdFx0aWYgKEVTQ0FQRVMuaGFzKGNoYXJhY3RlcikpIHtcblx0XHRcdGlzSW5zaWRlRXNjYXBlID0gdHJ1ZTtcblx0XHRcdGlzSW5zaWRlTGlua0VzY2FwZSA9IGNoYXJhY3RlcnMuc2xpY2UoaW5kZXggKyAxKS5qb2luKCcnKS5zdGFydHNXaXRoKEFOU0lfRVNDQVBFX0xJTkspO1xuXHRcdH1cblxuXHRcdGlmIChpc0luc2lkZUVzY2FwZSkge1xuXHRcdFx0aWYgKGlzSW5zaWRlTGlua0VzY2FwZSkge1xuXHRcdFx0XHRpZiAoY2hhcmFjdGVyID09PSBBTlNJX0VTQ0FQRV9CRUxMKSB7XG5cdFx0XHRcdFx0aXNJbnNpZGVFc2NhcGUgPSBmYWxzZTtcblx0XHRcdFx0XHRpc0luc2lkZUxpbmtFc2NhcGUgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChjaGFyYWN0ZXIgPT09IEFOU0lfU0dSX1RFUk1JTkFUT1IpIHtcblx0XHRcdFx0aXNJbnNpZGVFc2NhcGUgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0dmlzaWJsZSArPSBjaGFyYWN0ZXJMZW5ndGg7XG5cblx0XHRpZiAodmlzaWJsZSA9PT0gY29sdW1ucyAmJiBpbmRleCA8IGNoYXJhY3RlcnMubGVuZ3RoIC0gMSkge1xuXHRcdFx0cm93cy5wdXNoKCcnKTtcblx0XHRcdHZpc2libGUgPSAwO1xuXHRcdH1cblx0fVxuXG5cdC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgbGFzdCByb3cgd2UgY29weSBvdmVyIGlzIG9ubHlcblx0Ly8gYW5zaSBlc2NhcGUgY2hhcmFjdGVycywgaGFuZGxlIHRoaXMgZWRnZS1jYXNlXG5cdGlmICghdmlzaWJsZSAmJiByb3dzW3Jvd3MubGVuZ3RoIC0gMV0ubGVuZ3RoID4gMCAmJiByb3dzLmxlbmd0aCA+IDEpIHtcblx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMl0gKz0gcm93cy5wb3AoKTtcblx0fVxufTtcblxuLy8gVHJpbXMgc3BhY2VzIGZyb20gYSBzdHJpbmcgaWdub3JpbmcgaW52aXNpYmxlIHNlcXVlbmNlc1xuY29uc3Qgc3RyaW5nVmlzaWJsZVRyaW1TcGFjZXNSaWdodCA9IHN0cmluZyA9PiB7XG5cdGNvbnN0IHdvcmRzID0gc3RyaW5nLnNwbGl0KCcgJyk7XG5cdGxldCBsYXN0ID0gd29yZHMubGVuZ3RoO1xuXG5cdHdoaWxlIChsYXN0ID4gMCkge1xuXHRcdGlmIChzdHJpbmdXaWR0aCh3b3Jkc1tsYXN0IC0gMV0pID4gMCkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0bGFzdC0tO1xuXHR9XG5cblx0aWYgKGxhc3QgPT09IHdvcmRzLmxlbmd0aCkge1xuXHRcdHJldHVybiBzdHJpbmc7XG5cdH1cblxuXHRyZXR1cm4gd29yZHMuc2xpY2UoMCwgbGFzdCkuam9pbignICcpICsgd29yZHMuc2xpY2UobGFzdCkuam9pbignJyk7XG59O1xuXG4vLyBUaGUgd3JhcC1hbnNpIG1vZHVsZSBjYW4gYmUgaW52b2tlZCBpbiBlaXRoZXIgJ2hhcmQnIG9yICdzb2Z0JyB3cmFwIG1vZGVcbi8vXG4vLyAnaGFyZCcgd2lsbCBuZXZlciBhbGxvdyBhIHN0cmluZyB0byB0YWtlIHVwIG1vcmUgdGhhbiBjb2x1bW5zIGNoYXJhY3RlcnNcbi8vXG4vLyAnc29mdCcgYWxsb3dzIGxvbmcgd29yZHMgdG8gZXhwYW5kIHBhc3QgdGhlIGNvbHVtbiBsZW5ndGhcbmNvbnN0IGV4ZWMgPSAoc3RyaW5nLCBjb2x1bW5zLCBvcHRpb25zID0ge30pID0+IHtcblx0aWYgKG9wdGlvbnMudHJpbSAhPT0gZmFsc2UgJiYgc3RyaW5nLnRyaW0oKSA9PT0gJycpIHtcblx0XHRyZXR1cm4gJyc7XG5cdH1cblxuXHRsZXQgcmV0dXJuVmFsdWUgPSAnJztcblx0bGV0IGVzY2FwZUNvZGU7XG5cdGxldCBlc2NhcGVVcmw7XG5cblx0Y29uc3QgbGVuZ3RocyA9IHdvcmRMZW5ndGhzKHN0cmluZyk7XG5cdGxldCByb3dzID0gWycnXTtcblxuXHRmb3IgKGNvbnN0IFtpbmRleCwgd29yZF0gb2Ygc3RyaW5nLnNwbGl0KCcgJykuZW50cmllcygpKSB7XG5cdFx0aWYgKG9wdGlvbnMudHJpbSAhPT0gZmFsc2UpIHtcblx0XHRcdHJvd3Nbcm93cy5sZW5ndGggLSAxXSA9IHJvd3Nbcm93cy5sZW5ndGggLSAxXS50cmltU3RhcnQoKTtcblx0XHR9XG5cblx0XHRsZXQgcm93TGVuZ3RoID0gc3RyaW5nV2lkdGgocm93c1tyb3dzLmxlbmd0aCAtIDFdKTtcblxuXHRcdGlmIChpbmRleCAhPT0gMCkge1xuXHRcdFx0aWYgKHJvd0xlbmd0aCA+PSBjb2x1bW5zICYmIChvcHRpb25zLndvcmRXcmFwID09PSBmYWxzZSB8fCBvcHRpb25zLnRyaW0gPT09IGZhbHNlKSkge1xuXHRcdFx0XHQvLyBJZiB3ZSBzdGFydCB3aXRoIGEgbmV3IHdvcmQgYnV0IHRoZSBjdXJyZW50IHJvdyBsZW5ndGggZXF1YWxzIHRoZSBsZW5ndGggb2YgdGhlIGNvbHVtbnMsIGFkZCBhIG5ldyByb3dcblx0XHRcdFx0cm93cy5wdXNoKCcnKTtcblx0XHRcdFx0cm93TGVuZ3RoID0gMDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHJvd0xlbmd0aCA+IDAgfHwgb3B0aW9ucy50cmltID09PSBmYWxzZSkge1xuXHRcdFx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gKz0gJyAnO1xuXHRcdFx0XHRyb3dMZW5ndGgrKztcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJbiAnaGFyZCcgd3JhcCBtb2RlLCB0aGUgbGVuZ3RoIG9mIGEgbGluZSBpcyBuZXZlciBhbGxvd2VkIHRvIGV4dGVuZCBwYXN0ICdjb2x1bW5zJ1xuXHRcdGlmIChvcHRpb25zLmhhcmQgJiYgbGVuZ3Roc1tpbmRleF0gPiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCByZW1haW5pbmdDb2x1bW5zID0gKGNvbHVtbnMgLSByb3dMZW5ndGgpO1xuXHRcdFx0Y29uc3QgYnJlYWtzU3RhcnRpbmdUaGlzTGluZSA9IDEgKyBNYXRoLmZsb29yKChsZW5ndGhzW2luZGV4XSAtIHJlbWFpbmluZ0NvbHVtbnMgLSAxKSAvIGNvbHVtbnMpO1xuXHRcdFx0Y29uc3QgYnJlYWtzU3RhcnRpbmdOZXh0TGluZSA9IE1hdGguZmxvb3IoKGxlbmd0aHNbaW5kZXhdIC0gMSkgLyBjb2x1bW5zKTtcblx0XHRcdGlmIChicmVha3NTdGFydGluZ05leHRMaW5lIDwgYnJlYWtzU3RhcnRpbmdUaGlzTGluZSkge1xuXHRcdFx0XHRyb3dzLnB1c2goJycpO1xuXHRcdFx0fVxuXG5cdFx0XHR3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChyb3dMZW5ndGggKyBsZW5ndGhzW2luZGV4XSA+IGNvbHVtbnMgJiYgcm93TGVuZ3RoID4gMCAmJiBsZW5ndGhzW2luZGV4XSA+IDApIHtcblx0XHRcdGlmIChvcHRpb25zLndvcmRXcmFwID09PSBmYWxzZSAmJiByb3dMZW5ndGggPCBjb2x1bW5zKSB7XG5cdFx0XHRcdHdyYXBXb3JkKHJvd3MsIHdvcmQsIGNvbHVtbnMpO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0cm93cy5wdXNoKCcnKTtcblx0XHR9XG5cblx0XHRpZiAocm93TGVuZ3RoICsgbGVuZ3Roc1tpbmRleF0gPiBjb2x1bW5zICYmIG9wdGlvbnMud29yZFdyYXAgPT09IGZhbHNlKSB7XG5cdFx0XHR3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdHJvd3Nbcm93cy5sZW5ndGggLSAxXSArPSB3b3JkO1xuXHR9XG5cblx0aWYgKG9wdGlvbnMudHJpbSAhPT0gZmFsc2UpIHtcblx0XHRyb3dzID0gcm93cy5tYXAoc3RyaW5nVmlzaWJsZVRyaW1TcGFjZXNSaWdodCk7XG5cdH1cblxuXHRjb25zdCBwcmUgPSBbLi4ucm93cy5qb2luKCdcXG4nKV07XG5cblx0Zm9yIChjb25zdCBbaW5kZXgsIGNoYXJhY3Rlcl0gb2YgcHJlLmVudHJpZXMoKSkge1xuXHRcdHJldHVyblZhbHVlICs9IGNoYXJhY3RlcjtcblxuXHRcdGlmIChFU0NBUEVTLmhhcyhjaGFyYWN0ZXIpKSB7XG5cdFx0XHRjb25zdCB7Z3JvdXBzfSA9IG5ldyBSZWdFeHAoYCg/OlxcXFwke0FOU0lfQ1NJfSg/PGNvZGU+XFxcXGQrKW18XFxcXCR7QU5TSV9FU0NBUEVfTElOS30oPzx1cmk+LiopJHtBTlNJX0VTQ0FQRV9CRUxMfSlgKS5leGVjKHByZS5zbGljZShpbmRleCkuam9pbignJykpIHx8IHtncm91cHM6IHt9fTtcblx0XHRcdGlmIChncm91cHMuY29kZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnN0IGNvZGUgPSBOdW1iZXIucGFyc2VGbG9hdChncm91cHMuY29kZSk7XG5cdFx0XHRcdGVzY2FwZUNvZGUgPSBjb2RlID09PSBFTkRfQ09ERSA/IHVuZGVmaW5lZCA6IGNvZGU7XG5cdFx0XHR9IGVsc2UgaWYgKGdyb3Vwcy51cmkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRlc2NhcGVVcmwgPSBncm91cHMudXJpLmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IGdyb3Vwcy51cmk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgY29kZSA9IGFuc2lTdHlsZXMuY29kZXMuZ2V0KE51bWJlcihlc2NhcGVDb2RlKSk7XG5cblx0XHRpZiAocHJlW2luZGV4ICsgMV0gPT09ICdcXG4nKSB7XG5cdFx0XHRpZiAoZXNjYXBlVXJsKSB7XG5cdFx0XHRcdHJldHVyblZhbHVlICs9IHdyYXBBbnNpSHlwZXJsaW5rKCcnKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGVzY2FwZUNvZGUgJiYgY29kZSkge1xuXHRcdFx0XHRyZXR1cm5WYWx1ZSArPSB3cmFwQW5zaShjb2RlKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGNoYXJhY3RlciA9PT0gJ1xcbicpIHtcblx0XHRcdGlmIChlc2NhcGVDb2RlICYmIGNvZGUpIHtcblx0XHRcdFx0cmV0dXJuVmFsdWUgKz0gd3JhcEFuc2koZXNjYXBlQ29kZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlc2NhcGVVcmwpIHtcblx0XHRcdFx0cmV0dXJuVmFsdWUgKz0gd3JhcEFuc2lIeXBlcmxpbmsoZXNjYXBlVXJsKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmV0dXJuVmFsdWU7XG59O1xuXG4vLyBGb3IgZWFjaCBuZXdsaW5lLCBpbnZva2UgdGhlIG1ldGhvZCBzZXBhcmF0ZWx5XG5tb2R1bGUuZXhwb3J0cyA9IChzdHJpbmcsIGNvbHVtbnMsIG9wdGlvbnMpID0+IHtcblx0cmV0dXJuIFN0cmluZyhzdHJpbmcpXG5cdFx0Lm5vcm1hbGl6ZSgpXG5cdFx0LnJlcGxhY2UoL1xcclxcbi9nLCAnXFxuJylcblx0XHQuc3BsaXQoJ1xcbicpXG5cdFx0Lm1hcChsaW5lID0+IGV4ZWMobGluZSwgY29sdW1ucywgb3B0aW9ucykpXG5cdFx0LmpvaW4oJ1xcbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IGFsaWduID0ge1xuICAgIHJpZ2h0OiBhbGlnblJpZ2h0LFxuICAgIGNlbnRlcjogYWxpZ25DZW50ZXJcbn07XG5jb25zdCB0b3AgPSAwO1xuY29uc3QgcmlnaHQgPSAxO1xuY29uc3QgYm90dG9tID0gMjtcbmNvbnN0IGxlZnQgPSAzO1xuY2xhc3MgVUkge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLndpZHRoID0gb3B0cy53aWR0aDtcbiAgICAgICAgdGhpcy53cmFwID0gKF9hID0gb3B0cy53cmFwKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0cnVlO1xuICAgICAgICB0aGlzLnJvd3MgPSBbXTtcbiAgICB9XG4gICAgc3BhbiguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IGNvbHMgPSB0aGlzLmRpdiguLi5hcmdzKTtcbiAgICAgICAgY29scy5zcGFuID0gdHJ1ZTtcbiAgICB9XG4gICAgcmVzZXRPdXRwdXQoKSB7XG4gICAgICAgIHRoaXMucm93cyA9IFtdO1xuICAgIH1cbiAgICBkaXYoLi4uYXJncykge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGl2KCcnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy53cmFwICYmIHRoaXMuc2hvdWxkQXBwbHlMYXlvdXREU0woLi4uYXJncykgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBseUxheW91dERTTChhcmdzWzBdKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2xzID0gYXJncy5tYXAoYXJnID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbEZyb21TdHJpbmcoYXJnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJvd3MucHVzaChjb2xzKTtcbiAgICAgICAgcmV0dXJuIGNvbHM7XG4gICAgfVxuICAgIHNob3VsZEFwcGx5TGF5b3V0RFNMKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgL1tcXHRcXG5dLy50ZXN0KGFyZ3NbMF0pO1xuICAgIH1cbiAgICBhcHBseUxheW91dERTTChzdHIpIHtcbiAgICAgICAgY29uc3Qgcm93cyA9IHN0ci5zcGxpdCgnXFxuJykubWFwKHJvdyA9PiByb3cuc3BsaXQoJ1xcdCcpKTtcbiAgICAgICAgbGV0IGxlZnRDb2x1bW5XaWR0aCA9IDA7XG4gICAgICAgIC8vIHNpbXBsZSBoZXVyaXN0aWMgZm9yIGxheW91dCwgbWFrZSBzdXJlIHRoZVxuICAgICAgICAvLyBzZWNvbmQgY29sdW1uIGxpbmVzIHVwIGFsb25nIHRoZSBsZWZ0LWhhbmQuXG4gICAgICAgIC8vIGRvbid0IGFsbG93IHRoZSBmaXJzdCBjb2x1bW4gdG8gdGFrZSB1cCBtb3JlXG4gICAgICAgIC8vIHRoYW4gNTAlIG9mIHRoZSBzY3JlZW4uXG4gICAgICAgIHJvd3MuZm9yRWFjaChjb2x1bW5zID0+IHtcbiAgICAgICAgICAgIGlmIChjb2x1bW5zLmxlbmd0aCA+IDEgJiYgbWl4aW4uc3RyaW5nV2lkdGgoY29sdW1uc1swXSkgPiBsZWZ0Q29sdW1uV2lkdGgpIHtcbiAgICAgICAgICAgICAgICBsZWZ0Q29sdW1uV2lkdGggPSBNYXRoLm1pbihNYXRoLmZsb29yKHRoaXMud2lkdGggKiAwLjUpLCBtaXhpbi5zdHJpbmdXaWR0aChjb2x1bW5zWzBdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBnZW5lcmF0ZSBhIHRhYmxlOlxuICAgICAgICAvLyAgcmVwbGFjaW5nICcgJyB3aXRoIHBhZGRpbmcgY2FsY3VsYXRpb25zLlxuICAgICAgICAvLyAgdXNpbmcgdGhlIGFsZ29yaXRobWljYWxseSBnZW5lcmF0ZWQgd2lkdGguXG4gICAgICAgIHJvd3MuZm9yRWFjaChjb2x1bW5zID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGl2KC4uLmNvbHVtbnMubWFwKChyLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogci50cmltKCksXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IHRoaXMubWVhc3VyZVBhZGRpbmcociksXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAoaSA9PT0gMCAmJiBjb2x1bW5zLmxlbmd0aCA+IDEpID8gbGVmdENvbHVtbldpZHRoIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd3NbdGhpcy5yb3dzLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICBjb2xGcm9tU3RyaW5nKHRleHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICBwYWRkaW5nOiB0aGlzLm1lYXN1cmVQYWRkaW5nKHRleHQpXG4gICAgICAgIH07XG4gICAgfVxuICAgIG1lYXN1cmVQYWRkaW5nKHN0cikge1xuICAgICAgICAvLyBtZWFzdXJlIHBhZGRpbmcgd2l0aG91dCBhbnNpIGVzY2FwZSBjb2Rlc1xuICAgICAgICBjb25zdCBub0Fuc2kgPSBtaXhpbi5zdHJpcEFuc2koc3RyKTtcbiAgICAgICAgcmV0dXJuIFswLCBub0Fuc2kubWF0Y2goL1xccyokLylbMF0ubGVuZ3RoLCAwLCBub0Fuc2kubWF0Y2goL15cXHMqLylbMF0ubGVuZ3RoXTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGNvbnN0IGxpbmVzID0gW107XG4gICAgICAgIHRoaXMucm93cy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICB0aGlzLnJvd1RvU3RyaW5nKHJvdywgbGluZXMpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gZG9uJ3QgZGlzcGxheSBhbnkgbGluZXMgd2l0aCB0aGVcbiAgICAgICAgLy8gaGlkZGVuIGZsYWcgc2V0LlxuICAgICAgICByZXR1cm4gbGluZXNcbiAgICAgICAgICAgIC5maWx0ZXIobGluZSA9PiAhbGluZS5oaWRkZW4pXG4gICAgICAgICAgICAubWFwKGxpbmUgPT4gbGluZS50ZXh0KVxuICAgICAgICAgICAgLmpvaW4oJ1xcbicpO1xuICAgIH1cbiAgICByb3dUb1N0cmluZyhyb3csIGxpbmVzKSB7XG4gICAgICAgIHRoaXMucmFzdGVyaXplKHJvdykuZm9yRWFjaCgocnJvdywgcikgPT4ge1xuICAgICAgICAgICAgbGV0IHN0ciA9ICcnO1xuICAgICAgICAgICAgcnJvdy5mb3JFYWNoKChjb2wsIGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHdpZHRoIH0gPSByb3dbY107IC8vIHRoZSB3aWR0aCB3aXRoIHBhZGRpbmcuXG4gICAgICAgICAgICAgICAgY29uc3Qgd3JhcFdpZHRoID0gdGhpcy5uZWdhdGVQYWRkaW5nKHJvd1tjXSk7IC8vIHRoZSB3aWR0aCB3aXRob3V0IHBhZGRpbmcuXG4gICAgICAgICAgICAgICAgbGV0IHRzID0gY29sOyAvLyB0ZW1wb3Jhcnkgc3RyaW5nIHVzZWQgZHVyaW5nIGFsaWdubWVudC9wYWRkaW5nLlxuICAgICAgICAgICAgICAgIGlmICh3cmFwV2lkdGggPiBtaXhpbi5zdHJpbmdXaWR0aChjb2wpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRzICs9ICcgJy5yZXBlYXQod3JhcFdpZHRoIC0gbWl4aW4uc3RyaW5nV2lkdGgoY29sKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGFsaWduIHRoZSBzdHJpbmcgd2l0aGluIGl0cyBjb2x1bW4uXG4gICAgICAgICAgICAgICAgaWYgKHJvd1tjXS5hbGlnbiAmJiByb3dbY10uYWxpZ24gIT09ICdsZWZ0JyAmJiB0aGlzLndyYXApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm4gPSBhbGlnbltyb3dbY10uYWxpZ25dO1xuICAgICAgICAgICAgICAgICAgICB0cyA9IGZuKHRzLCB3cmFwV2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWl4aW4uc3RyaW5nV2lkdGgodHMpIDwgd3JhcFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cyArPSAnICcucmVwZWF0KCh3aWR0aCB8fCAwKSAtIG1peGluLnN0cmluZ1dpZHRoKHRzKSAtIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGFwcGx5IGJvcmRlciBhbmQgcGFkZGluZyB0byBzdHJpbmcuXG4gICAgICAgICAgICAgICAgY29uc3QgcGFkZGluZyA9IHJvd1tjXS5wYWRkaW5nIHx8IFswLCAwLCAwLCAwXTtcbiAgICAgICAgICAgICAgICBpZiAocGFkZGluZ1tsZWZ0XSkge1xuICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJyAnLnJlcGVhdChwYWRkaW5nW2xlZnRdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RyICs9IGFkZEJvcmRlcihyb3dbY10sIHRzLCAnfCAnKTtcbiAgICAgICAgICAgICAgICBzdHIgKz0gdHM7XG4gICAgICAgICAgICAgICAgc3RyICs9IGFkZEJvcmRlcihyb3dbY10sIHRzLCAnIHwnKTtcbiAgICAgICAgICAgICAgICBpZiAocGFkZGluZ1tyaWdodF0pIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyICs9ICcgJy5yZXBlYXQocGFkZGluZ1tyaWdodF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBpZiBwcmlvciByb3cgaXMgc3BhbiwgdHJ5IHRvIHJlbmRlciB0aGVcbiAgICAgICAgICAgICAgICAvLyBjdXJyZW50IHJvdyBvbiB0aGUgcHJpb3IgbGluZS5cbiAgICAgICAgICAgICAgICBpZiAociA9PT0gMCAmJiBsaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMucmVuZGVySW5saW5lKHN0ciwgbGluZXNbbGluZXMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2UuXG4gICAgICAgICAgICBsaW5lcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBzdHIucmVwbGFjZSgvICskLywgJycpLFxuICAgICAgICAgICAgICAgIHNwYW46IHJvdy5zcGFuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBsaW5lcztcbiAgICB9XG4gICAgLy8gaWYgdGhlIGZ1bGwgJ3NvdXJjZScgY2FuIHJlbmRlciBpblxuICAgIC8vIHRoZSB0YXJnZXQgbGluZSwgZG8gc28uXG4gICAgcmVuZGVySW5saW5lKHNvdXJjZSwgcHJldmlvdXNMaW5lKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gc291cmNlLm1hdGNoKC9eICovKTtcbiAgICAgICAgY29uc3QgbGVhZGluZ1doaXRlc3BhY2UgPSBtYXRjaCA/IG1hdGNoWzBdLmxlbmd0aCA6IDA7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHByZXZpb3VzTGluZS50ZXh0O1xuICAgICAgICBjb25zdCB0YXJnZXRUZXh0V2lkdGggPSBtaXhpbi5zdHJpbmdXaWR0aCh0YXJnZXQudHJpbVJpZ2h0KCkpO1xuICAgICAgICBpZiAoIXByZXZpb3VzTGluZS5zcGFuKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHdlJ3JlIG5vdCBhcHBseWluZyB3cmFwcGluZyBsb2dpYyxcbiAgICAgICAgLy8ganVzdCBhbHdheXMgYXBwZW5kIHRvIHRoZSBzcGFuLlxuICAgICAgICBpZiAoIXRoaXMud3JhcCkge1xuICAgICAgICAgICAgcHJldmlvdXNMaW5lLmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0ICsgc291cmNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZWFkaW5nV2hpdGVzcGFjZSA8IHRhcmdldFRleHRXaWR0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgICBwcmV2aW91c0xpbmUuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRhcmdldC50cmltUmlnaHQoKSArICcgJy5yZXBlYXQobGVhZGluZ1doaXRlc3BhY2UgLSB0YXJnZXRUZXh0V2lkdGgpICsgc291cmNlLnRyaW1MZWZ0KCk7XG4gICAgfVxuICAgIHJhc3Rlcml6ZShyb3cpIHtcbiAgICAgICAgY29uc3QgcnJvd3MgPSBbXTtcbiAgICAgICAgY29uc3Qgd2lkdGhzID0gdGhpcy5jb2x1bW5XaWR0aHMocm93KTtcbiAgICAgICAgbGV0IHdyYXBwZWQ7XG4gICAgICAgIC8vIHdvcmQgd3JhcCBhbGwgY29sdW1ucywgYW5kIGNyZWF0ZVxuICAgICAgICAvLyBhIGRhdGEtc3RydWN0dXJlIHRoYXQgaXMgZWFzeSB0byByYXN0ZXJpemUuXG4gICAgICAgIHJvdy5mb3JFYWNoKChjb2wsIGMpID0+IHtcbiAgICAgICAgICAgIC8vIGxlYXZlIHJvb20gZm9yIGxlZnQgYW5kIHJpZ2h0IHBhZGRpbmcuXG4gICAgICAgICAgICBjb2wud2lkdGggPSB3aWR0aHNbY107XG4gICAgICAgICAgICBpZiAodGhpcy53cmFwKSB7XG4gICAgICAgICAgICAgICAgd3JhcHBlZCA9IG1peGluLndyYXAoY29sLnRleHQsIHRoaXMubmVnYXRlUGFkZGluZyhjb2wpLCB7IGhhcmQ6IHRydWUgfSkuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgd3JhcHBlZCA9IGNvbC50ZXh0LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb2wuYm9yZGVyKSB7XG4gICAgICAgICAgICAgICAgd3JhcHBlZC51bnNoaWZ0KCcuJyArICctJy5yZXBlYXQodGhpcy5uZWdhdGVQYWRkaW5nKGNvbCkgKyAyKSArICcuJyk7XG4gICAgICAgICAgICAgICAgd3JhcHBlZC5wdXNoKFwiJ1wiICsgJy0nLnJlcGVhdCh0aGlzLm5lZ2F0ZVBhZGRpbmcoY29sKSArIDIpICsgXCInXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYWRkIHRvcCBhbmQgYm90dG9tIHBhZGRpbmcuXG4gICAgICAgICAgICBpZiAoY29sLnBhZGRpbmcpIHtcbiAgICAgICAgICAgICAgICB3cmFwcGVkLnVuc2hpZnQoLi4ubmV3IEFycmF5KGNvbC5wYWRkaW5nW3RvcF0gfHwgMCkuZmlsbCgnJykpO1xuICAgICAgICAgICAgICAgIHdyYXBwZWQucHVzaCguLi5uZXcgQXJyYXkoY29sLnBhZGRpbmdbYm90dG9tXSB8fCAwKS5maWxsKCcnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3cmFwcGVkLmZvckVhY2goKHN0ciwgcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcnJvd3Nbcl0pIHtcbiAgICAgICAgICAgICAgICAgICAgcnJvd3MucHVzaChbXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJyb3cgPSBycm93c1tyXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAocnJvd1tpXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBycm93LnB1c2goJycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJyb3cucHVzaChzdHIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcnJvd3M7XG4gICAgfVxuICAgIG5lZ2F0ZVBhZGRpbmcoY29sKSB7XG4gICAgICAgIGxldCB3cmFwV2lkdGggPSBjb2wud2lkdGggfHwgMDtcbiAgICAgICAgaWYgKGNvbC5wYWRkaW5nKSB7XG4gICAgICAgICAgICB3cmFwV2lkdGggLT0gKGNvbC5wYWRkaW5nW2xlZnRdIHx8IDApICsgKGNvbC5wYWRkaW5nW3JpZ2h0XSB8fCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sLmJvcmRlcikge1xuICAgICAgICAgICAgd3JhcFdpZHRoIC09IDQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdyYXBXaWR0aDtcbiAgICB9XG4gICAgY29sdW1uV2lkdGhzKHJvdykge1xuICAgICAgICBpZiAoIXRoaXMud3JhcCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdy5tYXAoY29sID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sLndpZHRoIHx8IG1peGluLnN0cmluZ1dpZHRoKGNvbC50ZXh0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGxldCB1bnNldCA9IHJvdy5sZW5ndGg7XG4gICAgICAgIGxldCByZW1haW5pbmdXaWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgIC8vIGNvbHVtbiB3aWR0aHMgY2FuIGJlIHNldCBpbiBjb25maWcuXG4gICAgICAgIGNvbnN0IHdpZHRocyA9IHJvdy5tYXAoY29sID0+IHtcbiAgICAgICAgICAgIGlmIChjb2wud2lkdGgpIHtcbiAgICAgICAgICAgICAgICB1bnNldC0tO1xuICAgICAgICAgICAgICAgIHJlbWFpbmluZ1dpZHRoIC09IGNvbC53aWR0aDtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sLndpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGFueSB1bnNldCB3aWR0aHMgc2hvdWxkIGJlIGNhbGN1bGF0ZWQuXG4gICAgICAgIGNvbnN0IHVuc2V0V2lkdGggPSB1bnNldCA/IE1hdGguZmxvb3IocmVtYWluaW5nV2lkdGggLyB1bnNldCkgOiAwO1xuICAgICAgICByZXR1cm4gd2lkdGhzLm1hcCgodywgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKHcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCh1bnNldFdpZHRoLCBfbWluV2lkdGgocm93W2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdztcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZnVuY3Rpb24gYWRkQm9yZGVyKGNvbCwgdHMsIHN0eWxlKSB7XG4gICAgaWYgKGNvbC5ib3JkZXIpIHtcbiAgICAgICAgaWYgKC9bLiddLStbLiddLy50ZXN0KHRzKSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0cy50cmltKCkubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcgICc7XG4gICAgfVxuICAgIHJldHVybiAnJztcbn1cbi8vIGNhbGN1bGF0ZXMgdGhlIG1pbmltdW0gd2lkdGggb2Zcbi8vIGEgY29sdW1uLCBiYXNlZCBvbiBwYWRkaW5nIHByZWZlcmVuY2VzLlxuZnVuY3Rpb24gX21pbldpZHRoKGNvbCkge1xuICAgIGNvbnN0IHBhZGRpbmcgPSBjb2wucGFkZGluZyB8fCBbXTtcbiAgICBjb25zdCBtaW5XaWR0aCA9IDEgKyAocGFkZGluZ1tsZWZ0XSB8fCAwKSArIChwYWRkaW5nW3JpZ2h0XSB8fCAwKTtcbiAgICBpZiAoY29sLmJvcmRlcikge1xuICAgICAgICByZXR1cm4gbWluV2lkdGggKyA0O1xuICAgIH1cbiAgICByZXR1cm4gbWluV2lkdGg7XG59XG5mdW5jdGlvbiBnZXRXaW5kb3dXaWR0aCgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGVwZW5kcyBvbiB0ZXJtaW5hbCAqL1xuICAgIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgcHJvY2Vzcy5zdGRvdXQgJiYgcHJvY2Vzcy5zdGRvdXQuY29sdW1ucykge1xuICAgICAgICByZXR1cm4gcHJvY2Vzcy5zdGRvdXQuY29sdW1ucztcbiAgICB9XG4gICAgcmV0dXJuIDgwO1xufVxuZnVuY3Rpb24gYWxpZ25SaWdodChzdHIsIHdpZHRoKSB7XG4gICAgc3RyID0gc3RyLnRyaW0oKTtcbiAgICBjb25zdCBzdHJXaWR0aCA9IG1peGluLnN0cmluZ1dpZHRoKHN0cik7XG4gICAgaWYgKHN0cldpZHRoIDwgd2lkdGgpIHtcbiAgICAgICAgcmV0dXJuICcgJy5yZXBlYXQod2lkdGggLSBzdHJXaWR0aCkgKyBzdHI7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59XG5mdW5jdGlvbiBhbGlnbkNlbnRlcihzdHIsIHdpZHRoKSB7XG4gICAgc3RyID0gc3RyLnRyaW0oKTtcbiAgICBjb25zdCBzdHJXaWR0aCA9IG1peGluLnN0cmluZ1dpZHRoKHN0cik7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoc3RyV2lkdGggPj0gd2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgcmV0dXJuICcgJy5yZXBlYXQoKHdpZHRoIC0gc3RyV2lkdGgpID4+IDEpICsgc3RyO1xufVxubGV0IG1peGluO1xuZnVuY3Rpb24gY2xpdWkob3B0cywgX21peGluKSB7XG4gICAgbWl4aW4gPSBfbWl4aW47XG4gICAgcmV0dXJuIG5ldyBVSSh7XG4gICAgICAgIHdpZHRoOiAob3B0cyA9PT0gbnVsbCB8fCBvcHRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRzLndpZHRoKSB8fCBnZXRXaW5kb3dXaWR0aCgpLFxuICAgICAgICB3cmFwOiBvcHRzID09PSBudWxsIHx8IG9wdHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdHMud3JhcFxuICAgIH0pO1xufVxuXG4vLyBCb290c3RyYXAgY2xpdWkgd2l0aCBDb21tb25KUyBkZXBlbmRlbmNpZXM6XG5jb25zdCBzdHJpbmdXaWR0aCA9IHJlcXVpcmUoJ3N0cmluZy13aWR0aCcpO1xuY29uc3Qgc3RyaXBBbnNpID0gcmVxdWlyZSgnc3RyaXAtYW5zaScpO1xuY29uc3Qgd3JhcCA9IHJlcXVpcmUoJ3dyYXAtYW5zaScpO1xuZnVuY3Rpb24gdWkob3B0cykge1xuICAgIHJldHVybiBjbGl1aShvcHRzLCB7XG4gICAgICAgIHN0cmluZ1dpZHRoLFxuICAgICAgICBzdHJpcEFuc2ksXG4gICAgICAgIHdyYXBcbiAgICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1aTtcbiIsICJjb25zdCB7IGRpcm5hbWUsIHJlc29sdmUgfSA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IHsgcmVhZGRpclN5bmMsIHN0YXRTeW5jIH0gPSByZXF1aXJlKCdmcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdGFydCwgY2FsbGJhY2spIHtcblx0bGV0IGRpciA9IHJlc29sdmUoJy4nLCBzdGFydCk7XG5cdGxldCB0bXAsIHN0YXRzID0gc3RhdFN5bmMoZGlyKTtcblxuXHRpZiAoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcblx0XHRkaXIgPSBkaXJuYW1lKGRpcik7XG5cdH1cblxuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdHRtcCA9IGNhbGxiYWNrKGRpciwgcmVhZGRpclN5bmMoZGlyKSk7XG5cdFx0aWYgKHRtcCkgcmV0dXJuIHJlc29sdmUoZGlyLCB0bXApO1xuXHRcdGRpciA9IGRpcm5hbWUodG1wID0gZGlyKTtcblx0XHRpZiAodG1wID09PSBkaXIpIGJyZWFrO1xuXHR9XG59XG4iLCBudWxsLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZnMgPSByZXF1aXJlKCdmcycpLFxuICBqb2luID0gcmVxdWlyZSgncGF0aCcpLmpvaW4sXG4gIHJlc29sdmUgPSByZXF1aXJlKCdwYXRoJykucmVzb2x2ZSxcbiAgZGlybmFtZSA9IHJlcXVpcmUoJ3BhdGgnKS5kaXJuYW1lLFxuICBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBleHRlbnNpb25zOiBbJ2pzJywgJ2pzb24nLCAnY29mZmVlJ10sXG4gICAgcmVjdXJzZTogdHJ1ZSxcbiAgICByZW5hbWU6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICByZXR1cm4gbmFtZTtcbiAgICB9LFxuICAgIHZpc2l0OiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH1cbiAgfTtcblxuZnVuY3Rpb24gY2hlY2tGaWxlSW5jbHVzaW9uKHBhdGgsIGZpbGVuYW1lLCBvcHRpb25zKSB7XG4gIHJldHVybiAoXG4gICAgLy8gdmVyaWZ5IGZpbGUgaGFzIHZhbGlkIGV4dGVuc2lvblxuICAgIChuZXcgUmVnRXhwKCdcXFxcLignICsgb3B0aW9ucy5leHRlbnNpb25zLmpvaW4oJ3wnKSArICcpJCcsICdpJykudGVzdChmaWxlbmFtZSkpICYmXG5cbiAgICAvLyBpZiBvcHRpb25zLmluY2x1ZGUgaXMgYSBSZWdFeHAsIGV2YWx1YXRlIGl0IGFuZCBtYWtlIHN1cmUgdGhlIHBhdGggcGFzc2VzXG4gICAgIShvcHRpb25zLmluY2x1ZGUgJiYgb3B0aW9ucy5pbmNsdWRlIGluc3RhbmNlb2YgUmVnRXhwICYmICFvcHRpb25zLmluY2x1ZGUudGVzdChwYXRoKSkgJiZcblxuICAgIC8vIGlmIG9wdGlvbnMuaW5jbHVkZSBpcyBhIGZ1bmN0aW9uLCBldmFsdWF0ZSBpdCBhbmQgbWFrZSBzdXJlIHRoZSBwYXRoIHBhc3Nlc1xuICAgICEob3B0aW9ucy5pbmNsdWRlICYmIHR5cGVvZiBvcHRpb25zLmluY2x1ZGUgPT09ICdmdW5jdGlvbicgJiYgIW9wdGlvbnMuaW5jbHVkZShwYXRoLCBmaWxlbmFtZSkpICYmXG5cbiAgICAvLyBpZiBvcHRpb25zLmV4Y2x1ZGUgaXMgYSBSZWdFeHAsIGV2YWx1YXRlIGl0IGFuZCBtYWtlIHN1cmUgdGhlIHBhdGggZG9lc24ndCBwYXNzXG4gICAgIShvcHRpb25zLmV4Y2x1ZGUgJiYgb3B0aW9ucy5leGNsdWRlIGluc3RhbmNlb2YgUmVnRXhwICYmIG9wdGlvbnMuZXhjbHVkZS50ZXN0KHBhdGgpKSAmJlxuXG4gICAgLy8gaWYgb3B0aW9ucy5leGNsdWRlIGlzIGEgZnVuY3Rpb24sIGV2YWx1YXRlIGl0IGFuZCBtYWtlIHN1cmUgdGhlIHBhdGggZG9lc24ndCBwYXNzXG4gICAgIShvcHRpb25zLmV4Y2x1ZGUgJiYgdHlwZW9mIG9wdGlvbnMuZXhjbHVkZSA9PT0gJ2Z1bmN0aW9uJyAmJiBvcHRpb25zLmV4Y2x1ZGUocGF0aCwgZmlsZW5hbWUpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZXF1aXJlRGlyZWN0b3J5KG0sIHBhdGgsIG9wdGlvbnMpIHtcbiAgdmFyIHJldHZhbCA9IHt9O1xuXG4gIC8vIHBhdGggaXMgb3B0aW9uYWxcbiAgaWYgKHBhdGggJiYgIW9wdGlvbnMgJiYgdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHBhdGg7XG4gICAgcGF0aCA9IG51bGw7XG4gIH1cblxuICAvLyBkZWZhdWx0IG9wdGlvbnNcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGZvciAodmFyIHByb3AgaW4gZGVmYXVsdE9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnNbcHJvcF0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBvcHRpb25zW3Byb3BdID0gZGVmYXVsdE9wdGlvbnNbcHJvcF07XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgbm8gcGF0aCB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhlIGVxdWl2ZWxhbnQgb2YgX19kaXJuYW1lIGZyb20gY2FsbGVyXG4gIC8vIG90aGVyd2lzZSwgcmVzb2x2ZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBlcXVpdmFsZW50IG9mIF9fZGlybmFtZVxuICBwYXRoID0gIXBhdGggPyBkaXJuYW1lKG0uZmlsZW5hbWUpIDogcmVzb2x2ZShkaXJuYW1lKG0uZmlsZW5hbWUpLCBwYXRoKTtcblxuICAvLyBnZXQgdGhlIHBhdGggb2YgZWFjaCBmaWxlIGluIHNwZWNpZmllZCBkaXJlY3RvcnksIGFwcGVuZCB0byBjdXJyZW50IHRyZWUgbm9kZSwgcmVjdXJzZVxuICBmcy5yZWFkZGlyU3luYyhwYXRoKS5mb3JFYWNoKGZ1bmN0aW9uIChmaWxlbmFtZSkge1xuICAgIHZhciBqb2luZWQgPSBqb2luKHBhdGgsIGZpbGVuYW1lKSxcbiAgICAgIGZpbGVzLFxuICAgICAga2V5LFxuICAgICAgb2JqO1xuXG4gICAgaWYgKGZzLnN0YXRTeW5jKGpvaW5lZCkuaXNEaXJlY3RvcnkoKSAmJiBvcHRpb25zLnJlY3Vyc2UpIHtcbiAgICAgIC8vIHRoaXMgbm9kZSBpcyBhIGRpcmVjdG9yeTsgcmVjdXJzZVxuICAgICAgZmlsZXMgPSByZXF1aXJlRGlyZWN0b3J5KG0sIGpvaW5lZCwgb3B0aW9ucyk7XG4gICAgICAvLyBleGNsdWRlIGVtcHR5IGRpcmVjdG9yaWVzXG4gICAgICBpZiAoT2JqZWN0LmtleXMoZmlsZXMpLmxlbmd0aCkge1xuICAgICAgICByZXR2YWxbb3B0aW9ucy5yZW5hbWUoZmlsZW5hbWUsIGpvaW5lZCwgZmlsZW5hbWUpXSA9IGZpbGVzO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoam9pbmVkICE9PSBtLmZpbGVuYW1lICYmIGNoZWNrRmlsZUluY2x1c2lvbihqb2luZWQsIGZpbGVuYW1lLCBvcHRpb25zKSkge1xuICAgICAgICAvLyBoYXNoIG5vZGUga2V5IHNob3VsZG4ndCBpbmNsdWRlIGZpbGUgZXh0ZW5zaW9uXG4gICAgICAgIGtleSA9IGZpbGVuYW1lLnN1YnN0cmluZygwLCBmaWxlbmFtZS5sYXN0SW5kZXhPZignLicpKTtcbiAgICAgICAgb2JqID0gbS5yZXF1aXJlKGpvaW5lZCk7XG4gICAgICAgIHJldHZhbFtvcHRpb25zLnJlbmFtZShrZXksIGpvaW5lZCwgZmlsZW5hbWUpXSA9IG9wdGlvbnMudmlzaXQob2JqLCBqb2luZWQsIGZpbGVuYW1lKSB8fCBvYmo7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmV0dmFsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmVEaXJlY3Rvcnk7XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0cyA9IGRlZmF1bHRPcHRpb25zO1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpO1xuXG5jbGFzcyBZRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobXNnKSB7XG4gICAgICAgIHN1cGVyKG1zZyB8fCAneWFyZ3MgZXJyb3InKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ1lFcnJvcic7XG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFlFcnJvcik7XG4gICAgfVxufVxuXG5sZXQgcHJldmlvdXNseVZpc2l0ZWRDb25maWdzID0gW107XG5sZXQgc2hpbTtcbmZ1bmN0aW9uIGFwcGx5RXh0ZW5kcyhjb25maWcsIGN3ZCwgbWVyZ2VFeHRlbmRzLCBfc2hpbSkge1xuICAgIHNoaW0gPSBfc2hpbTtcbiAgICBsZXQgZGVmYXVsdENvbmZpZyA9IHt9O1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAnZXh0ZW5kcycpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLmV4dGVuZHMgIT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRDb25maWc7XG4gICAgICAgIGNvbnN0IGlzUGF0aCA9IC9cXC5qc29ufFxcLi4qcmMkLy50ZXN0KGNvbmZpZy5leHRlbmRzKTtcbiAgICAgICAgbGV0IHBhdGhUb0RlZmF1bHQgPSBudWxsO1xuICAgICAgICBpZiAoIWlzUGF0aCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXRoVG9EZWZhdWx0ID0gcmVxdWlyZS5yZXNvbHZlKGNvbmZpZy5leHRlbmRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChfZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBhdGhUb0RlZmF1bHQgPSBnZXRQYXRoVG9EZWZhdWx0Q29uZmlnKGN3ZCwgY29uZmlnLmV4dGVuZHMpO1xuICAgICAgICB9XG4gICAgICAgIGNoZWNrRm9yQ2lyY3VsYXJFeHRlbmRzKHBhdGhUb0RlZmF1bHQpO1xuICAgICAgICBwcmV2aW91c2x5VmlzaXRlZENvbmZpZ3MucHVzaChwYXRoVG9EZWZhdWx0KTtcbiAgICAgICAgZGVmYXVsdENvbmZpZyA9IGlzUGF0aFxuICAgICAgICAgICAgPyBKU09OLnBhcnNlKHNoaW0ucmVhZEZpbGVTeW5jKHBhdGhUb0RlZmF1bHQsICd1dGY4JykpXG4gICAgICAgICAgICA6IHJlcXVpcmUoY29uZmlnLmV4dGVuZHMpO1xuICAgICAgICBkZWxldGUgY29uZmlnLmV4dGVuZHM7XG4gICAgICAgIGRlZmF1bHRDb25maWcgPSBhcHBseUV4dGVuZHMoZGVmYXVsdENvbmZpZywgc2hpbS5wYXRoLmRpcm5hbWUocGF0aFRvRGVmYXVsdCksIG1lcmdlRXh0ZW5kcywgc2hpbSk7XG4gICAgfVxuICAgIHByZXZpb3VzbHlWaXNpdGVkQ29uZmlncyA9IFtdO1xuICAgIHJldHVybiBtZXJnZUV4dGVuZHNcbiAgICAgICAgPyBtZXJnZURlZXAoZGVmYXVsdENvbmZpZywgY29uZmlnKVxuICAgICAgICA6IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRDb25maWcsIGNvbmZpZyk7XG59XG5mdW5jdGlvbiBjaGVja0ZvckNpcmN1bGFyRXh0ZW5kcyhjZmdQYXRoKSB7XG4gICAgaWYgKHByZXZpb3VzbHlWaXNpdGVkQ29uZmlncy5pbmRleE9mKGNmZ1BhdGgpID4gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihgQ2lyY3VsYXIgZXh0ZW5kZWQgY29uZmlndXJhdGlvbnM6ICcke2NmZ1BhdGh9Jy5gKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRQYXRoVG9EZWZhdWx0Q29uZmlnKGN3ZCwgcGF0aFRvRXh0ZW5kKSB7XG4gICAgcmV0dXJuIHNoaW0ucGF0aC5yZXNvbHZlKGN3ZCwgcGF0aFRvRXh0ZW5kKTtcbn1cbmZ1bmN0aW9uIG1lcmdlRGVlcChjb25maWcxLCBjb25maWcyKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0ge307XG4gICAgZnVuY3Rpb24gaXNPYmplY3Qob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkob2JqKTtcbiAgICB9XG4gICAgT2JqZWN0LmFzc2lnbih0YXJnZXQsIGNvbmZpZzEpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbmZpZzIpKSB7XG4gICAgICAgIGlmIChpc09iamVjdChjb25maWcyW2tleV0pICYmIGlzT2JqZWN0KHRhcmdldFtrZXldKSkge1xuICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBtZXJnZURlZXAoY29uZmlnMVtrZXldLCBjb25maWcyW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBjb25maWcyW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gcGFyc2VDb21tYW5kKGNtZCkge1xuICAgIGNvbnN0IGV4dHJhU3BhY2VzU3RyaXBwZWRDb21tYW5kID0gY21kLnJlcGxhY2UoL1xcc3syLH0vZywgJyAnKTtcbiAgICBjb25zdCBzcGxpdENvbW1hbmQgPSBleHRyYVNwYWNlc1N0cmlwcGVkQ29tbWFuZC5zcGxpdCgvXFxzKyg/IVteW10qXXxbXjxdKj4pLyk7XG4gICAgY29uc3QgYnJlZ2V4ID0gL1xcLipbXFxdWzw+XS9nO1xuICAgIGNvbnN0IGZpcnN0Q29tbWFuZCA9IHNwbGl0Q29tbWFuZC5zaGlmdCgpO1xuICAgIGlmICghZmlyc3RDb21tYW5kKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGNvbW1hbmQgZm91bmQgaW46ICR7Y21kfWApO1xuICAgIGNvbnN0IHBhcnNlZENvbW1hbmQgPSB7XG4gICAgICAgIGNtZDogZmlyc3RDb21tYW5kLnJlcGxhY2UoYnJlZ2V4LCAnJyksXG4gICAgICAgIGRlbWFuZGVkOiBbXSxcbiAgICAgICAgb3B0aW9uYWw6IFtdLFxuICAgIH07XG4gICAgc3BsaXRDb21tYW5kLmZvckVhY2goKGNtZCwgaSkgPT4ge1xuICAgICAgICBsZXQgdmFyaWFkaWMgPSBmYWxzZTtcbiAgICAgICAgY21kID0gY21kLnJlcGxhY2UoL1xccy9nLCAnJyk7XG4gICAgICAgIGlmICgvXFwuK1tcXF0+XS8udGVzdChjbWQpICYmIGkgPT09IHNwbGl0Q29tbWFuZC5sZW5ndGggLSAxKVxuICAgICAgICAgICAgdmFyaWFkaWMgPSB0cnVlO1xuICAgICAgICBpZiAoL15cXFsvLnRlc3QoY21kKSkge1xuICAgICAgICAgICAgcGFyc2VkQ29tbWFuZC5vcHRpb25hbC5wdXNoKHtcbiAgICAgICAgICAgICAgICBjbWQ6IGNtZC5yZXBsYWNlKGJyZWdleCwgJycpLnNwbGl0KCd8JyksXG4gICAgICAgICAgICAgICAgdmFyaWFkaWMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlZENvbW1hbmQuZGVtYW5kZWQucHVzaCh7XG4gICAgICAgICAgICAgICAgY21kOiBjbWQucmVwbGFjZShicmVnZXgsICcnKS5zcGxpdCgnfCcpLFxuICAgICAgICAgICAgICAgIHZhcmlhZGljLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcGFyc2VkQ29tbWFuZDtcbn1cblxuY29uc3QgcG9zaXRpb25OYW1lID0gWydmaXJzdCcsICdzZWNvbmQnLCAndGhpcmQnLCAnZm91cnRoJywgJ2ZpZnRoJywgJ3NpeHRoJ107XG5mdW5jdGlvbiBhcmdzZXJ0KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICBmdW5jdGlvbiBwYXJzZUFyZ3MoKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgYXJnMSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgID8gW3sgZGVtYW5kZWQ6IFtdLCBvcHRpb25hbDogW10gfSwgYXJnMSwgYXJnMl1cbiAgICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAgIHBhcnNlQ29tbWFuZChgY21kICR7YXJnMX1gKSxcbiAgICAgICAgICAgICAgICBhcmcyLFxuICAgICAgICAgICAgICAgIGFyZzMsXG4gICAgICAgICAgICBdO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBsZXQgcG9zaXRpb24gPSAwO1xuICAgICAgICBjb25zdCBbcGFyc2VkLCBjYWxsZXJBcmd1bWVudHMsIF9sZW5ndGhdID0gcGFyc2VBcmdzKCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBbXS5zbGljZS5jYWxsKGNhbGxlckFyZ3VtZW50cyk7XG4gICAgICAgIHdoaWxlIChhcmdzLmxlbmd0aCAmJiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGFyZ3MucG9wKCk7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IF9sZW5ndGggfHwgYXJncy5sZW5ndGg7XG4gICAgICAgIGlmIChsZW5ndGggPCBwYXJzZWQuZGVtYW5kZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgWUVycm9yKGBOb3QgZW5vdWdoIGFyZ3VtZW50cyBwcm92aWRlZC4gRXhwZWN0ZWQgJHtwYXJzZWQuZGVtYW5kZWQubGVuZ3RofSBidXQgcmVjZWl2ZWQgJHthcmdzLmxlbmd0aH0uYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG90YWxDb21tYW5kcyA9IHBhcnNlZC5kZW1hbmRlZC5sZW5ndGggKyBwYXJzZWQub3B0aW9uYWwubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoID4gdG90YWxDb21tYW5kcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihgVG9vIG1hbnkgYXJndW1lbnRzIHByb3ZpZGVkLiBFeHBlY3RlZCBtYXggJHt0b3RhbENvbW1hbmRzfSBidXQgcmVjZWl2ZWQgJHtsZW5ndGh9LmApO1xuICAgICAgICB9XG4gICAgICAgIHBhcnNlZC5kZW1hbmRlZC5mb3JFYWNoKGRlbWFuZGVkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFyZyA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmVkVHlwZSA9IGd1ZXNzVHlwZShhcmcpO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdUeXBlcyA9IGRlbWFuZGVkLmNtZC5maWx0ZXIodHlwZSA9PiB0eXBlID09PSBvYnNlcnZlZFR5cGUgfHwgdHlwZSA9PT0gJyonKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGluZ1R5cGVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICBhcmd1bWVudFR5cGVFcnJvcihvYnNlcnZlZFR5cGUsIGRlbWFuZGVkLmNtZCwgcG9zaXRpb24pO1xuICAgICAgICAgICAgcG9zaXRpb24gKz0gMTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBhcnNlZC5vcHRpb25hbC5mb3JFYWNoKG9wdGlvbmFsID0+IHtcbiAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgICAgICBjb25zdCBvYnNlcnZlZFR5cGUgPSBndWVzc1R5cGUoYXJnKTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nVHlwZXMgPSBvcHRpb25hbC5jbWQuZmlsdGVyKHR5cGUgPT4gdHlwZSA9PT0gb2JzZXJ2ZWRUeXBlIHx8IHR5cGUgPT09ICcqJyk7XG4gICAgICAgICAgICBpZiAobWF0Y2hpbmdUeXBlcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgYXJndW1lbnRUeXBlRXJyb3Iob2JzZXJ2ZWRUeXBlLCBvcHRpb25hbC5jbWQsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgIHBvc2l0aW9uICs9IDE7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihlcnIuc3RhY2spO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGd1ZXNzVHlwZShhcmcpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgIHJldHVybiAnYXJyYXknO1xuICAgIH1cbiAgICBlbHNlIGlmIChhcmcgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICdudWxsJztcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBhcmc7XG59XG5mdW5jdGlvbiBhcmd1bWVudFR5cGVFcnJvcihvYnNlcnZlZFR5cGUsIGFsbG93ZWRUeXBlcywgcG9zaXRpb24pIHtcbiAgICB0aHJvdyBuZXcgWUVycm9yKGBJbnZhbGlkICR7cG9zaXRpb25OYW1lW3Bvc2l0aW9uXSB8fCAnbWFueWl0aCd9IGFyZ3VtZW50LiBFeHBlY3RlZCAke2FsbG93ZWRUeXBlcy5qb2luKCcgb3IgJyl9IGJ1dCByZWNlaXZlZCAke29ic2VydmVkVHlwZX0uYCk7XG59XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZShtYXliZVByb21pc2UpIHtcbiAgICByZXR1cm4gKCEhbWF5YmVQcm9taXNlICYmXG4gICAgICAgICEhbWF5YmVQcm9taXNlLnRoZW4gJiZcbiAgICAgICAgdHlwZW9mIG1heWJlUHJvbWlzZS50aGVuID09PSAnZnVuY3Rpb24nKTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0Tm90U3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgc2hpbSwgbWVzc2FnZSkge1xuICAgIHNoaW0uYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpO1xufVxuZnVuY3Rpb24gYXNzZXJ0U2luZ2xlS2V5KGFjdHVhbCwgc2hpbSkge1xuICAgIHNoaW0uYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBhY3R1YWwsICdzdHJpbmcnKTtcbn1cbmZ1bmN0aW9uIG9iamVjdEtleXMob2JqZWN0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCk7XG59XG5cbmZ1bmN0aW9uIG9iakZpbHRlcihvcmlnaW5hbCA9IHt9LCBmaWx0ZXIgPSAoKSA9PiB0cnVlKSB7XG4gICAgY29uc3Qgb2JqID0ge307XG4gICAgb2JqZWN0S2V5cyhvcmlnaW5hbCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBpZiAoZmlsdGVyKGtleSwgb3JpZ2luYWxba2V5XSkpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gb3JpZ2luYWxba2V5XTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIGdsb2JhbE1pZGRsZXdhcmVGYWN0b3J5KGdsb2JhbE1pZGRsZXdhcmUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrLCBhcHBseUJlZm9yZVZhbGlkYXRpb24gPSBmYWxzZSkge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8ZnVuY3Rpb24+IFtib29sZWFuXScsIFtjYWxsYmFjaywgYXBwbHlCZWZvcmVWYWxpZGF0aW9uXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsYmFjay5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2tbaV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ21pZGRsZXdhcmUgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrW2ldLmFwcGx5QmVmb3JlVmFsaWRhdGlvbiA9IGFwcGx5QmVmb3JlVmFsaWRhdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGdsb2JhbE1pZGRsZXdhcmUsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5QmVmb3JlVmFsaWRhdGlvbiA9IGFwcGx5QmVmb3JlVmFsaWRhdGlvbjtcbiAgICAgICAgICAgIGdsb2JhbE1pZGRsZXdhcmUucHVzaChjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNvbW1hbmRNaWRkbGV3YXJlRmFjdG9yeShjb21tYW5kTWlkZGxld2FyZSkge1xuICAgIGlmICghY29tbWFuZE1pZGRsZXdhcmUpXG4gICAgICAgIHJldHVybiBbXTtcbiAgICByZXR1cm4gY29tbWFuZE1pZGRsZXdhcmUubWFwKG1pZGRsZXdhcmUgPT4ge1xuICAgICAgICBtaWRkbGV3YXJlLmFwcGx5QmVmb3JlVmFsaWRhdGlvbiA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gbWlkZGxld2FyZTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGFwcGx5TWlkZGxld2FyZShhcmd2LCB5YXJncywgbWlkZGxld2FyZXMsIGJlZm9yZVZhbGlkYXRpb24pIHtcbiAgICBjb25zdCBiZWZvcmVWYWxpZGF0aW9uRXJyb3IgPSBuZXcgRXJyb3IoJ21pZGRsZXdhcmUgY2Fubm90IHJldHVybiBhIHByb21pc2Ugd2hlbiBhcHBseUJlZm9yZVZhbGlkYXRpb24gaXMgdHJ1ZScpO1xuICAgIHJldHVybiBtaWRkbGV3YXJlcy5yZWR1Y2UoKGFjYywgbWlkZGxld2FyZSkgPT4ge1xuICAgICAgICBpZiAobWlkZGxld2FyZS5hcHBseUJlZm9yZVZhbGlkYXRpb24gIT09IGJlZm9yZVZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShhY2MpKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjXG4gICAgICAgICAgICAgICAgLnRoZW4oaW5pdGlhbE9iaiA9PiBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgaW5pdGlhbE9iaixcbiAgICAgICAgICAgICAgICBtaWRkbGV3YXJlKGluaXRpYWxPYmosIHlhcmdzKSxcbiAgICAgICAgICAgIF0pKVxuICAgICAgICAgICAgICAgIC50aGVuKChbaW5pdGlhbE9iaiwgbWlkZGxld2FyZU9ial0pID0+IE9iamVjdC5hc3NpZ24oaW5pdGlhbE9iaiwgbWlkZGxld2FyZU9iaikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbWlkZGxld2FyZShhY2MsIHlhcmdzKTtcbiAgICAgICAgICAgIGlmIChiZWZvcmVWYWxpZGF0aW9uICYmIGlzUHJvbWlzZShyZXN1bHQpKVxuICAgICAgICAgICAgICAgIHRocm93IGJlZm9yZVZhbGlkYXRpb25FcnJvcjtcbiAgICAgICAgICAgIHJldHVybiBpc1Byb21pc2UocmVzdWx0KVxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRoZW4obWlkZGxld2FyZU9iaiA9PiBPYmplY3QuYXNzaWduKGFjYywgbWlkZGxld2FyZU9iaikpXG4gICAgICAgICAgICAgICAgOiBPYmplY3QuYXNzaWduKGFjYywgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgIH0sIGFyZ3YpO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9jZXNzQXJndkJpbkluZGV4KCkge1xuICAgIGlmIChpc0J1bmRsZWRFbGVjdHJvbkFwcCgpKVxuICAgICAgICByZXR1cm4gMDtcbiAgICByZXR1cm4gMTtcbn1cbmZ1bmN0aW9uIGlzQnVuZGxlZEVsZWN0cm9uQXBwKCkge1xuICAgIHJldHVybiBpc0VsZWN0cm9uQXBwKCkgJiYgIXByb2Nlc3MuZGVmYXVsdEFwcDtcbn1cbmZ1bmN0aW9uIGlzRWxlY3Ryb25BcHAoKSB7XG4gICAgcmV0dXJuICEhcHJvY2Vzcy52ZXJzaW9ucy5lbGVjdHJvbjtcbn1cbmZ1bmN0aW9uIGhpZGVCaW4oYXJndikge1xuICAgIHJldHVybiBhcmd2LnNsaWNlKGdldFByb2Nlc3NBcmd2QmluSW5kZXgoKSArIDEpO1xufVxuZnVuY3Rpb24gZ2V0UHJvY2Vzc0FyZ3ZCaW4oKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuYXJndltnZXRQcm9jZXNzQXJndkJpbkluZGV4KCldO1xufVxuXG52YXIgcHJvY2Vzc0FyZ3YgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgaGlkZUJpbjogaGlkZUJpbixcbiAgZ2V0UHJvY2Vzc0FyZ3ZCaW46IGdldFByb2Nlc3NBcmd2QmluXG59KTtcblxuZnVuY3Rpb24gd2hpY2hNb2R1bGUoZXhwb3J0ZWQpIHtcbiAgICBpZiAodHlwZW9mIHJlcXVpcmUgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBmb3IgKGxldCBpID0gMCwgZmlsZXMgPSBPYmplY3Qua2V5cyhyZXF1aXJlLmNhY2hlKSwgbW9kOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbW9kID0gcmVxdWlyZS5jYWNoZVtmaWxlc1tpXV07XG4gICAgICAgIGlmIChtb2QuZXhwb3J0cyA9PT0gZXhwb3J0ZWQpXG4gICAgICAgICAgICByZXR1cm4gbW9kO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuY29uc3QgREVGQVVMVF9NQVJLRVIgPSAvKF5cXCopfCheXFwkMCkvO1xuZnVuY3Rpb24gY29tbWFuZCh5YXJncywgdXNhZ2UsIHZhbGlkYXRpb24sIGdsb2JhbE1pZGRsZXdhcmUgPSBbXSwgc2hpbSkge1xuICAgIGNvbnN0IHNlbGYgPSB7fTtcbiAgICBsZXQgaGFuZGxlcnMgPSB7fTtcbiAgICBsZXQgYWxpYXNNYXAgPSB7fTtcbiAgICBsZXQgZGVmYXVsdENvbW1hbmQ7XG4gICAgc2VsZi5hZGRIYW5kbGVyID0gZnVuY3Rpb24gYWRkSGFuZGxlcihjbWQsIGRlc2NyaXB0aW9uLCBidWlsZGVyLCBoYW5kbGVyLCBjb21tYW5kTWlkZGxld2FyZSwgZGVwcmVjYXRlZCkge1xuICAgICAgICBsZXQgYWxpYXNlcyA9IFtdO1xuICAgICAgICBjb25zdCBtaWRkbGV3YXJlcyA9IGNvbW1hbmRNaWRkbGV3YXJlRmFjdG9yeShjb21tYW5kTWlkZGxld2FyZSk7XG4gICAgICAgIGhhbmRsZXIgPSBoYW5kbGVyIHx8ICgoKSA9PiB7IH0pO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjbWQpKSB7XG4gICAgICAgICAgICBpZiAoaXNDb21tYW5kQW5kQWxpYXNlcyhjbWQpKSB7XG4gICAgICAgICAgICAgICAgW2NtZCwgLi4uYWxpYXNlc10gPSBjbWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbW1hbmQgb2YgY21kKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkSGFuZGxlcihjb21tYW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNDb21tYW5kSGFuZGxlckRlZmluaXRpb24oY21kKSkge1xuICAgICAgICAgICAgbGV0IGNvbW1hbmQgPSBBcnJheS5pc0FycmF5KGNtZC5jb21tYW5kKSB8fCB0eXBlb2YgY21kLmNvbW1hbmQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyBjbWQuY29tbWFuZFxuICAgICAgICAgICAgICAgIDogbW9kdWxlTmFtZShjbWQpO1xuICAgICAgICAgICAgaWYgKGNtZC5hbGlhc2VzKVxuICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBbXS5jb25jYXQoY29tbWFuZCkuY29uY2F0KGNtZC5hbGlhc2VzKTtcbiAgICAgICAgICAgIHNlbGYuYWRkSGFuZGxlcihjb21tYW5kLCBleHRyYWN0RGVzYyhjbWQpLCBjbWQuYnVpbGRlciwgY21kLmhhbmRsZXIsIGNtZC5taWRkbGV3YXJlcywgY21kLmRlcHJlY2F0ZWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzQ29tbWFuZEJ1aWxkZXJEZWZpbml0aW9uKGJ1aWxkZXIpKSB7XG4gICAgICAgICAgICBzZWxmLmFkZEhhbmRsZXIoW2NtZF0uY29uY2F0KGFsaWFzZXMpLCBkZXNjcmlwdGlvbiwgYnVpbGRlci5idWlsZGVyLCBidWlsZGVyLmhhbmRsZXIsIGJ1aWxkZXIubWlkZGxld2FyZXMsIGJ1aWxkZXIuZGVwcmVjYXRlZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBjbWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRDb21tYW5kID0gcGFyc2VDb21tYW5kKGNtZCk7XG4gICAgICAgICAgICBhbGlhc2VzID0gYWxpYXNlcy5tYXAoYWxpYXMgPT4gcGFyc2VDb21tYW5kKGFsaWFzKS5jbWQpO1xuICAgICAgICAgICAgbGV0IGlzRGVmYXVsdCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkQWxpYXNlcyA9IFtwYXJzZWRDb21tYW5kLmNtZF0uY29uY2F0KGFsaWFzZXMpLmZpbHRlcihjID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoREVGQVVMVF9NQVJLRVIudGVzdChjKSkge1xuICAgICAgICAgICAgICAgICAgICBpc0RlZmF1bHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocGFyc2VkQWxpYXNlcy5sZW5ndGggPT09IDAgJiYgaXNEZWZhdWx0KVxuICAgICAgICAgICAgICAgIHBhcnNlZEFsaWFzZXMucHVzaCgnJDAnKTtcbiAgICAgICAgICAgIGlmIChpc0RlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICBwYXJzZWRDb21tYW5kLmNtZCA9IHBhcnNlZEFsaWFzZXNbMF07XG4gICAgICAgICAgICAgICAgYWxpYXNlcyA9IHBhcnNlZEFsaWFzZXMuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgY21kID0gY21kLnJlcGxhY2UoREVGQVVMVF9NQVJLRVIsIHBhcnNlZENvbW1hbmQuY21kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFsaWFzZXMuZm9yRWFjaChhbGlhcyA9PiB7XG4gICAgICAgICAgICAgICAgYWxpYXNNYXBbYWxpYXNdID0gcGFyc2VkQ29tbWFuZC5jbWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB1c2FnZS5jb21tYW5kKGNtZCwgZGVzY3JpcHRpb24sIGlzRGVmYXVsdCwgYWxpYXNlcywgZGVwcmVjYXRlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoYW5kbGVyc1twYXJzZWRDb21tYW5kLmNtZF0gPSB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWw6IGNtZCxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgICAgICAgIGJ1aWxkZXI6IGJ1aWxkZXIgfHwge30sXG4gICAgICAgICAgICAgICAgbWlkZGxld2FyZXMsXG4gICAgICAgICAgICAgICAgZGVwcmVjYXRlZCxcbiAgICAgICAgICAgICAgICBkZW1hbmRlZDogcGFyc2VkQ29tbWFuZC5kZW1hbmRlZCxcbiAgICAgICAgICAgICAgICBvcHRpb25hbDogcGFyc2VkQ29tbWFuZC5vcHRpb25hbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaXNEZWZhdWx0KVxuICAgICAgICAgICAgICAgIGRlZmF1bHRDb21tYW5kID0gaGFuZGxlcnNbcGFyc2VkQ29tbWFuZC5jbWRdO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLmFkZERpcmVjdG9yeSA9IGZ1bmN0aW9uIGFkZERpcmVjdG9yeShkaXIsIGNvbnRleHQsIHJlcSwgY2FsbGVyRmlsZSwgb3B0cykge1xuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRzLnJlY3Vyc2UgIT09ICdib29sZWFuJylcbiAgICAgICAgICAgIG9wdHMucmVjdXJzZSA9IGZhbHNlO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob3B0cy5leHRlbnNpb25zKSlcbiAgICAgICAgICAgIG9wdHMuZXh0ZW5zaW9ucyA9IFsnanMnXTtcbiAgICAgICAgY29uc3QgcGFyZW50VmlzaXQgPSB0eXBlb2Ygb3B0cy52aXNpdCA9PT0gJ2Z1bmN0aW9uJyA/IG9wdHMudmlzaXQgOiAobykgPT4gbztcbiAgICAgICAgb3B0cy52aXNpdCA9IGZ1bmN0aW9uIHZpc2l0KG9iaiwgam9pbmVkLCBmaWxlbmFtZSkge1xuICAgICAgICAgICAgY29uc3QgdmlzaXRlZCA9IHBhcmVudFZpc2l0KG9iaiwgam9pbmVkLCBmaWxlbmFtZSk7XG4gICAgICAgICAgICBpZiAodmlzaXRlZCkge1xuICAgICAgICAgICAgICAgIGlmICh+Y29udGV4dC5maWxlcy5pbmRleE9mKGpvaW5lZCkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2aXNpdGVkO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsZXMucHVzaChqb2luZWQpO1xuICAgICAgICAgICAgICAgIHNlbGYuYWRkSGFuZGxlcih2aXNpdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2aXNpdGVkO1xuICAgICAgICB9O1xuICAgICAgICBzaGltLnJlcXVpcmVEaXJlY3RvcnkoeyByZXF1aXJlOiByZXEsIGZpbGVuYW1lOiBjYWxsZXJGaWxlIH0sIGRpciwgb3B0cyk7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBtb2R1bGVOYW1lKG9iaikge1xuICAgICAgICBjb25zdCBtb2QgPSB3aGljaE1vZHVsZShvYmopO1xuICAgICAgICBpZiAoIW1vZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gY29tbWFuZCBuYW1lIGdpdmVuIGZvciBtb2R1bGU6ICR7c2hpbS5pbnNwZWN0KG9iail9YCk7XG4gICAgICAgIHJldHVybiBjb21tYW5kRnJvbUZpbGVuYW1lKG1vZC5maWxlbmFtZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1hbmRGcm9tRmlsZW5hbWUoZmlsZW5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHNoaW0ucGF0aC5iYXNlbmFtZShmaWxlbmFtZSwgc2hpbS5wYXRoLmV4dG5hbWUoZmlsZW5hbWUpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZXh0cmFjdERlc2MoeyBkZXNjcmliZSwgZGVzY3JpcHRpb24sIGRlc2MsIH0pIHtcbiAgICAgICAgZm9yIChjb25zdCB0ZXN0IG9mIFtkZXNjcmliZSwgZGVzY3JpcHRpb24sIGRlc2NdKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRlc3QgPT09ICdzdHJpbmcnIHx8IHRlc3QgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0O1xuICAgICAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwodGVzdCwgdHJ1ZSwgc2hpbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzZWxmLmdldENvbW1hbmRzID0gKCkgPT4gT2JqZWN0LmtleXMoaGFuZGxlcnMpLmNvbmNhdChPYmplY3Qua2V5cyhhbGlhc01hcCkpO1xuICAgIHNlbGYuZ2V0Q29tbWFuZEhhbmRsZXJzID0gKCkgPT4gaGFuZGxlcnM7XG4gICAgc2VsZi5oYXNEZWZhdWx0Q29tbWFuZCA9ICgpID0+ICEhZGVmYXVsdENvbW1hbmQ7XG4gICAgc2VsZi5ydW5Db21tYW5kID0gZnVuY3Rpb24gcnVuQ29tbWFuZChjb21tYW5kLCB5YXJncywgcGFyc2VkLCBjb21tYW5kSW5kZXgpIHtcbiAgICAgICAgbGV0IGFsaWFzZXMgPSBwYXJzZWQuYWxpYXNlcztcbiAgICAgICAgY29uc3QgY29tbWFuZEhhbmRsZXIgPSBoYW5kbGVyc1tjb21tYW5kXSB8fCBoYW5kbGVyc1thbGlhc01hcFtjb21tYW5kXV0gfHwgZGVmYXVsdENvbW1hbmQ7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb250ZXh0ID0geWFyZ3MuZ2V0Q29udGV4dCgpO1xuICAgICAgICBsZXQgbnVtRmlsZXMgPSBjdXJyZW50Q29udGV4dC5maWxlcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHBhcmVudENvbW1hbmRzID0gY3VycmVudENvbnRleHQuY29tbWFuZHMuc2xpY2UoKTtcbiAgICAgICAgbGV0IGlubmVyQXJndiA9IHBhcnNlZC5hcmd2O1xuICAgICAgICBsZXQgcG9zaXRpb25hbE1hcCA9IHt9O1xuICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgY3VycmVudENvbnRleHQuY29tbWFuZHMucHVzaChjb21tYW5kKTtcbiAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0LmZ1bGxDb21tYW5kcy5wdXNoKGNvbW1hbmRIYW5kbGVyLm9yaWdpbmFsKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWlsZGVyID0gY29tbWFuZEhhbmRsZXIuYnVpbGRlcjtcbiAgICAgICAgaWYgKGlzQ29tbWFuZEJ1aWxkZXJDYWxsYmFjayhidWlsZGVyKSkge1xuICAgICAgICAgICAgY29uc3QgYnVpbGRlck91dHB1dCA9IGJ1aWxkZXIoeWFyZ3MucmVzZXQocGFyc2VkLmFsaWFzZXMpKTtcbiAgICAgICAgICAgIGNvbnN0IGlubmVyWWFyZ3MgPSBpc1lhcmdzSW5zdGFuY2UoYnVpbGRlck91dHB1dCkgPyBidWlsZGVyT3V0cHV0IDogeWFyZ3M7XG4gICAgICAgICAgICBpZiAoc2hvdWxkVXBkYXRlVXNhZ2UoaW5uZXJZYXJncykpIHtcbiAgICAgICAgICAgICAgICBpbm5lcllhcmdzXG4gICAgICAgICAgICAgICAgICAgIC5nZXRVc2FnZUluc3RhbmNlKClcbiAgICAgICAgICAgICAgICAgICAgLnVzYWdlKHVzYWdlRnJvbVBhcmVudENvbW1hbmRzQ29tbWFuZEhhbmRsZXIocGFyZW50Q29tbWFuZHMsIGNvbW1hbmRIYW5kbGVyKSwgY29tbWFuZEhhbmRsZXIuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5uZXJBcmd2ID0gaW5uZXJZYXJncy5fcGFyc2VBcmdzKG51bGwsIG51bGwsIHRydWUsIGNvbW1hbmRJbmRleCk7XG4gICAgICAgICAgICBhbGlhc2VzID0gaW5uZXJZYXJncy5wYXJzZWQuYWxpYXNlcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0NvbW1hbmRCdWlsZGVyT3B0aW9uRGVmaW5pdGlvbnMoYnVpbGRlcikpIHtcbiAgICAgICAgICAgIGNvbnN0IGlubmVyWWFyZ3MgPSB5YXJncy5yZXNldChwYXJzZWQuYWxpYXNlcyk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkVXBkYXRlVXNhZ2UoaW5uZXJZYXJncykpIHtcbiAgICAgICAgICAgICAgICBpbm5lcllhcmdzXG4gICAgICAgICAgICAgICAgICAgIC5nZXRVc2FnZUluc3RhbmNlKClcbiAgICAgICAgICAgICAgICAgICAgLnVzYWdlKHVzYWdlRnJvbVBhcmVudENvbW1hbmRzQ29tbWFuZEhhbmRsZXIocGFyZW50Q29tbWFuZHMsIGNvbW1hbmRIYW5kbGVyKSwgY29tbWFuZEhhbmRsZXIuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT2JqZWN0LmtleXMoY29tbWFuZEhhbmRsZXIuYnVpbGRlcikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGlubmVyWWFyZ3Mub3B0aW9uKGtleSwgYnVpbGRlcltrZXldKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaW5uZXJBcmd2ID0gaW5uZXJZYXJncy5fcGFyc2VBcmdzKG51bGwsIG51bGwsIHRydWUsIGNvbW1hbmRJbmRleCk7XG4gICAgICAgICAgICBhbGlhc2VzID0gaW5uZXJZYXJncy5wYXJzZWQuYWxpYXNlcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXlhcmdzLl9oYXNPdXRwdXQoKSkge1xuICAgICAgICAgICAgcG9zaXRpb25hbE1hcCA9IHBvcHVsYXRlUG9zaXRpb25hbHMoY29tbWFuZEhhbmRsZXIsIGlubmVyQXJndiwgY3VycmVudENvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1pZGRsZXdhcmVzID0gZ2xvYmFsTWlkZGxld2FyZVxuICAgICAgICAgICAgLnNsaWNlKDApXG4gICAgICAgICAgICAuY29uY2F0KGNvbW1hbmRIYW5kbGVyLm1pZGRsZXdhcmVzKTtcbiAgICAgICAgYXBwbHlNaWRkbGV3YXJlKGlubmVyQXJndiwgeWFyZ3MsIG1pZGRsZXdhcmVzLCB0cnVlKTtcbiAgICAgICAgaWYgKCF5YXJncy5faGFzT3V0cHV0KCkpIHtcbiAgICAgICAgICAgIHlhcmdzLl9ydW5WYWxpZGF0aW9uKGlubmVyQXJndiwgYWxpYXNlcywgcG9zaXRpb25hbE1hcCwgeWFyZ3MucGFyc2VkLmVycm9yLCAhY29tbWFuZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbW1hbmRIYW5kbGVyLmhhbmRsZXIgJiYgIXlhcmdzLl9oYXNPdXRwdXQoKSkge1xuICAgICAgICAgICAgeWFyZ3MuX3NldEhhc091dHB1dCgpO1xuICAgICAgICAgICAgY29uc3QgcG9wdWxhdGVEb3VibGVEYXNoID0gISF5YXJncy5nZXRPcHRpb25zKCkuY29uZmlndXJhdGlvblsncG9wdWxhdGUtLSddO1xuICAgICAgICAgICAgeWFyZ3MuX3Bvc3RQcm9jZXNzKGlubmVyQXJndiwgcG9wdWxhdGVEb3VibGVEYXNoKTtcbiAgICAgICAgICAgIGlubmVyQXJndiA9IGFwcGx5TWlkZGxld2FyZShpbm5lckFyZ3YsIHlhcmdzLCBtaWRkbGV3YXJlcywgZmFsc2UpO1xuICAgICAgICAgICAgbGV0IGhhbmRsZXJSZXN1bHQ7XG4gICAgICAgICAgICBpZiAoaXNQcm9taXNlKGlubmVyQXJndikpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVyUmVzdWx0ID0gaW5uZXJBcmd2LnRoZW4oYXJndiA9PiBjb21tYW5kSGFuZGxlci5oYW5kbGVyKGFyZ3YpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGhhbmRsZXJSZXN1bHQgPSBjb21tYW5kSGFuZGxlci5oYW5kbGVyKGlubmVyQXJndik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyRmluaXNoQ29tbWFuZCA9IHlhcmdzLmdldEhhbmRsZXJGaW5pc2hDb21tYW5kKCk7XG4gICAgICAgICAgICBpZiAoaXNQcm9taXNlKGhhbmRsZXJSZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgeWFyZ3MuZ2V0VXNhZ2VJbnN0YW5jZSgpLmNhY2hlSGVscE1lc3NhZ2UoKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyUmVzdWx0XG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXJGaW5pc2hDb21tYW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyRmluaXNoQ29tbWFuZCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgeWFyZ3MuZ2V0VXNhZ2VJbnN0YW5jZSgpLmZhaWwobnVsbCwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3MuZ2V0VXNhZ2VJbnN0YW5jZSgpLmNsZWFyQ2FjaGVkSGVscE1lc3NhZ2UoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyRmluaXNoQ29tbWFuZCkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyRmluaXNoQ29tbWFuZChoYW5kbGVyUmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLnBvcCgpO1xuICAgICAgICAgICAgY3VycmVudENvbnRleHQuZnVsbENvbW1hbmRzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICAgIG51bUZpbGVzID0gY3VycmVudENvbnRleHQuZmlsZXMubGVuZ3RoIC0gbnVtRmlsZXM7XG4gICAgICAgIGlmIChudW1GaWxlcyA+IDApXG4gICAgICAgICAgICBjdXJyZW50Q29udGV4dC5maWxlcy5zcGxpY2UobnVtRmlsZXMgKiAtMSwgbnVtRmlsZXMpO1xuICAgICAgICByZXR1cm4gaW5uZXJBcmd2O1xuICAgIH07XG4gICAgZnVuY3Rpb24gc2hvdWxkVXBkYXRlVXNhZ2UoeWFyZ3MpIHtcbiAgICAgICAgcmV0dXJuICgheWFyZ3MuZ2V0VXNhZ2VJbnN0YW5jZSgpLmdldFVzYWdlRGlzYWJsZWQoKSAmJlxuICAgICAgICAgICAgeWFyZ3MuZ2V0VXNhZ2VJbnN0YW5jZSgpLmdldFVzYWdlKCkubGVuZ3RoID09PSAwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXNhZ2VGcm9tUGFyZW50Q29tbWFuZHNDb21tYW5kSGFuZGxlcihwYXJlbnRDb21tYW5kcywgY29tbWFuZEhhbmRsZXIpIHtcbiAgICAgICAgY29uc3QgYyA9IERFRkFVTFRfTUFSS0VSLnRlc3QoY29tbWFuZEhhbmRsZXIub3JpZ2luYWwpXG4gICAgICAgICAgICA/IGNvbW1hbmRIYW5kbGVyLm9yaWdpbmFsLnJlcGxhY2UoREVGQVVMVF9NQVJLRVIsICcnKS50cmltKClcbiAgICAgICAgICAgIDogY29tbWFuZEhhbmRsZXIub3JpZ2luYWw7XG4gICAgICAgIGNvbnN0IHBjID0gcGFyZW50Q29tbWFuZHMuZmlsdGVyKGMgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICFERUZBVUxUX01BUktFUi50ZXN0KGMpO1xuICAgICAgICB9KTtcbiAgICAgICAgcGMucHVzaChjKTtcbiAgICAgICAgcmV0dXJuIGAkMCAke3BjLmpvaW4oJyAnKX1gO1xuICAgIH1cbiAgICBzZWxmLnJ1bkRlZmF1bHRCdWlsZGVyT24gPSBmdW5jdGlvbiAoeWFyZ3MpIHtcbiAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwoZGVmYXVsdENvbW1hbmQsIHVuZGVmaW5lZCwgc2hpbSk7XG4gICAgICAgIGlmIChzaG91bGRVcGRhdGVVc2FnZSh5YXJncykpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRTdHJpbmcgPSBERUZBVUxUX01BUktFUi50ZXN0KGRlZmF1bHRDb21tYW5kLm9yaWdpbmFsKVxuICAgICAgICAgICAgICAgID8gZGVmYXVsdENvbW1hbmQub3JpZ2luYWxcbiAgICAgICAgICAgICAgICA6IGRlZmF1bHRDb21tYW5kLm9yaWdpbmFsLnJlcGxhY2UoL15bXltcXF08Pl0qLywgJyQwICcpO1xuICAgICAgICAgICAgeWFyZ3MuZ2V0VXNhZ2VJbnN0YW5jZSgpLnVzYWdlKGNvbW1hbmRTdHJpbmcsIGRlZmF1bHRDb21tYW5kLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWlsZGVyID0gZGVmYXVsdENvbW1hbmQuYnVpbGRlcjtcbiAgICAgICAgaWYgKGlzQ29tbWFuZEJ1aWxkZXJDYWxsYmFjayhidWlsZGVyKSkge1xuICAgICAgICAgICAgYnVpbGRlcih5YXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWlzQ29tbWFuZEJ1aWxkZXJEZWZpbml0aW9uKGJ1aWxkZXIpKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhidWlsZGVyKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgeWFyZ3Mub3B0aW9uKGtleSwgYnVpbGRlcltrZXldKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBmdW5jdGlvbiBwb3B1bGF0ZVBvc2l0aW9uYWxzKGNvbW1hbmRIYW5kbGVyLCBhcmd2LCBjb250ZXh0KSB7XG4gICAgICAgIGFyZ3YuXyA9IGFyZ3YuXy5zbGljZShjb250ZXh0LmNvbW1hbmRzLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGRlbWFuZGVkID0gY29tbWFuZEhhbmRsZXIuZGVtYW5kZWQuc2xpY2UoMCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbmFsID0gY29tbWFuZEhhbmRsZXIub3B0aW9uYWwuc2xpY2UoMCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uYWxNYXAgPSB7fTtcbiAgICAgICAgdmFsaWRhdGlvbi5wb3NpdGlvbmFsQ291bnQoZGVtYW5kZWQubGVuZ3RoLCBhcmd2Ll8ubGVuZ3RoKTtcbiAgICAgICAgd2hpbGUgKGRlbWFuZGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZGVtYW5kID0gZGVtYW5kZWQuc2hpZnQoKTtcbiAgICAgICAgICAgIHBvcHVsYXRlUG9zaXRpb25hbChkZW1hbmQsIGFyZ3YsIHBvc2l0aW9uYWxNYXApO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChvcHRpb25hbC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heWJlID0gb3B0aW9uYWwuc2hpZnQoKTtcbiAgICAgICAgICAgIHBvcHVsYXRlUG9zaXRpb25hbChtYXliZSwgYXJndiwgcG9zaXRpb25hbE1hcCk7XG4gICAgICAgIH1cbiAgICAgICAgYXJndi5fID0gY29udGV4dC5jb21tYW5kcy5jb25jYXQoYXJndi5fLm1hcChhID0+ICcnICsgYSkpO1xuICAgICAgICBwb3N0UHJvY2Vzc1Bvc2l0aW9uYWxzKGFyZ3YsIHBvc2l0aW9uYWxNYXAsIHNlbGYuY21kVG9QYXJzZU9wdGlvbnMoY29tbWFuZEhhbmRsZXIub3JpZ2luYWwpKTtcbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uYWxNYXA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcHVsYXRlUG9zaXRpb25hbChwb3NpdGlvbmFsLCBhcmd2LCBwb3NpdGlvbmFsTWFwKSB7XG4gICAgICAgIGNvbnN0IGNtZCA9IHBvc2l0aW9uYWwuY21kWzBdO1xuICAgICAgICBpZiAocG9zaXRpb25hbC52YXJpYWRpYykge1xuICAgICAgICAgICAgcG9zaXRpb25hbE1hcFtjbWRdID0gYXJndi5fLnNwbGljZSgwKS5tYXAoU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChhcmd2Ll8ubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHBvc2l0aW9uYWxNYXBbY21kXSA9IFtTdHJpbmcoYXJndi5fLnNoaWZ0KCkpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwb3N0UHJvY2Vzc1Bvc2l0aW9uYWxzKGFyZ3YsIHBvc2l0aW9uYWxNYXAsIHBhcnNlT3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgeWFyZ3MuZ2V0T3B0aW9ucygpKTtcbiAgICAgICAgb3B0aW9ucy5kZWZhdWx0ID0gT2JqZWN0LmFzc2lnbihwYXJzZU9wdGlvbnMuZGVmYXVsdCwgb3B0aW9ucy5kZWZhdWx0KTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocGFyc2VPcHRpb25zLmFsaWFzKSkge1xuICAgICAgICAgICAgb3B0aW9ucy5hbGlhc1trZXldID0gKG9wdGlvbnMuYWxpYXNba2V5XSB8fCBbXSkuY29uY2F0KHBhcnNlT3B0aW9ucy5hbGlhc1trZXldKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLmFycmF5ID0gb3B0aW9ucy5hcnJheS5jb25jYXQocGFyc2VPcHRpb25zLmFycmF5KTtcbiAgICAgICAgb3B0aW9ucy5jb25maWcgPSB7fTtcbiAgICAgICAgY29uc3QgdW5wYXJzZWQgPSBbXTtcbiAgICAgICAgT2JqZWN0LmtleXMocG9zaXRpb25hbE1hcCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgcG9zaXRpb25hbE1hcFtrZXldLm1hcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuY29uZmlndXJhdGlvblsndW5rbm93bi1vcHRpb25zLWFzLWFyZ3MnXSlcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5rZXlba2V5XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdW5wYXJzZWQucHVzaChgLS0ke2tleX1gKTtcbiAgICAgICAgICAgICAgICB1bnBhcnNlZC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF1bnBhcnNlZC5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZmlndXJhdGlvbiwge1xuICAgICAgICAgICAgJ3BvcHVsYXRlLS0nOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gc2hpbS5QYXJzZXIuZGV0YWlsZWQodW5wYXJzZWQsIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZyxcbiAgICAgICAgfSkpO1xuICAgICAgICBpZiAocGFyc2VkLmVycm9yKSB7XG4gICAgICAgICAgICB5YXJncy5nZXRVc2FnZUluc3RhbmNlKCkuZmFpbChwYXJzZWQuZXJyb3IubWVzc2FnZSwgcGFyc2VkLmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uYWxLZXlzID0gT2JqZWN0LmtleXMocG9zaXRpb25hbE1hcCk7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhwb3NpdGlvbmFsTWFwKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25hbEtleXMucHVzaCguLi5wYXJzZWQuYWxpYXNlc1trZXldKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMocGFyc2VkLmFyZ3YpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb25hbEtleXMuaW5kZXhPZihrZXkpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXBvc2l0aW9uYWxNYXBba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uYWxNYXBba2V5XSA9IHBhcnNlZC5hcmd2W2tleV07XG4gICAgICAgICAgICAgICAgICAgIGFyZ3Zba2V5XSA9IHBhcnNlZC5hcmd2W2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2VsZi5jbWRUb1BhcnNlT3B0aW9ucyA9IGZ1bmN0aW9uIChjbWRTdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcGFyc2VPcHRpb25zID0ge1xuICAgICAgICAgICAgYXJyYXk6IFtdLFxuICAgICAgICAgICAgZGVmYXVsdDoge30sXG4gICAgICAgICAgICBhbGlhczoge30sXG4gICAgICAgICAgICBkZW1hbmQ6IHt9LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUNvbW1hbmQoY21kU3RyaW5nKTtcbiAgICAgICAgcGFyc2VkLmRlbWFuZGVkLmZvckVhY2goZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBbY21kLCAuLi5hbGlhc2VzXSA9IGQuY21kO1xuICAgICAgICAgICAgaWYgKGQudmFyaWFkaWMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZU9wdGlvbnMuYXJyYXkucHVzaChjbWQpO1xuICAgICAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5kZWZhdWx0W2NtZF0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5hbGlhc1tjbWRdID0gYWxpYXNlcztcbiAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5kZW1hbmRbY21kXSA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBwYXJzZWQub3B0aW9uYWwuZm9yRWFjaChvID0+IHtcbiAgICAgICAgICAgIGNvbnN0IFtjbWQsIC4uLmFsaWFzZXNdID0gby5jbWQ7XG4gICAgICAgICAgICBpZiAoby52YXJpYWRpYykge1xuICAgICAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5hcnJheS5wdXNoKGNtZCk7XG4gICAgICAgICAgICAgICAgcGFyc2VPcHRpb25zLmRlZmF1bHRbY21kXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyc2VPcHRpb25zLmFsaWFzW2NtZF0gPSBhbGlhc2VzO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBhcnNlT3B0aW9ucztcbiAgICB9O1xuICAgIHNlbGYucmVzZXQgPSAoKSA9PiB7XG4gICAgICAgIGhhbmRsZXJzID0ge307XG4gICAgICAgIGFsaWFzTWFwID0ge307XG4gICAgICAgIGRlZmF1bHRDb21tYW5kID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGNvbnN0IGZyb3plbnMgPSBbXTtcbiAgICBzZWxmLmZyZWV6ZSA9ICgpID0+IHtcbiAgICAgICAgZnJvemVucy5wdXNoKHtcbiAgICAgICAgICAgIGhhbmRsZXJzLFxuICAgICAgICAgICAgYWxpYXNNYXAsXG4gICAgICAgICAgICBkZWZhdWx0Q29tbWFuZCxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBzZWxmLnVuZnJlZXplID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBmcm96ZW4gPSBmcm96ZW5zLnBvcCgpO1xuICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChmcm96ZW4sIHVuZGVmaW5lZCwgc2hpbSk7XG4gICAgICAgICh7IGhhbmRsZXJzLCBhbGlhc01hcCwgZGVmYXVsdENvbW1hbmQgfSA9IGZyb3plbik7XG4gICAgfTtcbiAgICByZXR1cm4gc2VsZjtcbn1cbmZ1bmN0aW9uIGlzQ29tbWFuZEJ1aWxkZXJEZWZpbml0aW9uKGJ1aWxkZXIpIHtcbiAgICByZXR1cm4gKHR5cGVvZiBidWlsZGVyID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAhIWJ1aWxkZXIuYnVpbGRlciAmJlxuICAgICAgICB0eXBlb2YgYnVpbGRlci5oYW5kbGVyID09PSAnZnVuY3Rpb24nKTtcbn1cbmZ1bmN0aW9uIGlzQ29tbWFuZEFuZEFsaWFzZXMoY21kKSB7XG4gICAgaWYgKGNtZC5ldmVyeShjID0+IHR5cGVvZiBjID09PSAnc3RyaW5nJykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNDb21tYW5kQnVpbGRlckNhbGxiYWNrKGJ1aWxkZXIpIHtcbiAgICByZXR1cm4gdHlwZW9mIGJ1aWxkZXIgPT09ICdmdW5jdGlvbic7XG59XG5mdW5jdGlvbiBpc0NvbW1hbmRCdWlsZGVyT3B0aW9uRGVmaW5pdGlvbnMoYnVpbGRlcikge1xuICAgIHJldHVybiB0eXBlb2YgYnVpbGRlciA9PT0gJ29iamVjdCc7XG59XG5mdW5jdGlvbiBpc0NvbW1hbmRIYW5kbGVyRGVmaW5pdGlvbihjbWQpIHtcbiAgICByZXR1cm4gdHlwZW9mIGNtZCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoY21kKTtcbn1cblxuZnVuY3Rpb24gc2V0QmxvY2tpbmcoYmxvY2tpbmcpIHtcbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICByZXR1cm47XG4gICAgW3Byb2Nlc3Muc3Rkb3V0LCBwcm9jZXNzLnN0ZGVycl0uZm9yRWFjaChfc3RyZWFtID0+IHtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gX3N0cmVhbTtcbiAgICAgICAgaWYgKHN0cmVhbS5faGFuZGxlICYmXG4gICAgICAgICAgICBzdHJlYW0uaXNUVFkgJiZcbiAgICAgICAgICAgIHR5cGVvZiBzdHJlYW0uX2hhbmRsZS5zZXRCbG9ja2luZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgc3RyZWFtLl9oYW5kbGUuc2V0QmxvY2tpbmcoYmxvY2tpbmcpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIHVzYWdlKHlhcmdzLCB5MThuLCBzaGltKSB7XG4gICAgY29uc3QgX18gPSB5MThuLl9fO1xuICAgIGNvbnN0IHNlbGYgPSB7fTtcbiAgICBjb25zdCBmYWlscyA9IFtdO1xuICAgIHNlbGYuZmFpbEZuID0gZnVuY3Rpb24gZmFpbEZuKGYpIHtcbiAgICAgICAgZmFpbHMucHVzaChmKTtcbiAgICB9O1xuICAgIGxldCBmYWlsTWVzc2FnZSA9IG51bGw7XG4gICAgbGV0IHNob3dIZWxwT25GYWlsID0gdHJ1ZTtcbiAgICBzZWxmLnNob3dIZWxwT25GYWlsID0gZnVuY3Rpb24gc2hvd0hlbHBPbkZhaWxGbihhcmcxID0gdHJ1ZSwgYXJnMikge1xuICAgICAgICBmdW5jdGlvbiBwYXJzZUZ1bmN0aW9uQXJncygpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYXJnMSA9PT0gJ3N0cmluZycgPyBbdHJ1ZSwgYXJnMV0gOiBbYXJnMSwgYXJnMl07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgW2VuYWJsZWQsIG1lc3NhZ2VdID0gcGFyc2VGdW5jdGlvbkFyZ3MoKTtcbiAgICAgICAgZmFpbE1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICBzaG93SGVscE9uRmFpbCA9IGVuYWJsZWQ7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgbGV0IGZhaWx1cmVPdXRwdXQgPSBmYWxzZTtcbiAgICBzZWxmLmZhaWwgPSBmdW5jdGlvbiBmYWlsKG1zZywgZXJyKSB7XG4gICAgICAgIGNvbnN0IGxvZ2dlciA9IHlhcmdzLl9nZXRMb2dnZXJJbnN0YW5jZSgpO1xuICAgICAgICBpZiAoZmFpbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gZmFpbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICBmYWlsc1tpXShtc2csIGVyciwgc2VsZik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoeWFyZ3MuZ2V0RXhpdFByb2Nlc3MoKSlcbiAgICAgICAgICAgICAgICBzZXRCbG9ja2luZyh0cnVlKTtcbiAgICAgICAgICAgIGlmICghZmFpbHVyZU91dHB1dCkge1xuICAgICAgICAgICAgICAgIGZhaWx1cmVPdXRwdXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChzaG93SGVscE9uRmFpbCkge1xuICAgICAgICAgICAgICAgICAgICB5YXJncy5zaG93SGVscCgnZXJyb3InKTtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChtc2cgfHwgZXJyKVxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IobXNnIHx8IGVycik7XG4gICAgICAgICAgICAgICAgaWYgKGZhaWxNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtc2cgfHwgZXJyKVxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGZhaWxNZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlcnIgPSBlcnIgfHwgbmV3IFlFcnJvcihtc2cpO1xuICAgICAgICAgICAgaWYgKHlhcmdzLmdldEV4aXRQcm9jZXNzKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geWFyZ3MuZXhpdCgxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHlhcmdzLl9oYXNQYXJzZUNhbGxiYWNrKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geWFyZ3MuZXhpdCgxLCBlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBsZXQgdXNhZ2VzID0gW107XG4gICAgbGV0IHVzYWdlRGlzYWJsZWQgPSBmYWxzZTtcbiAgICBzZWxmLnVzYWdlID0gKG1zZywgZGVzY3JpcHRpb24pID0+IHtcbiAgICAgICAgaWYgKG1zZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdXNhZ2VEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB1c2FnZXMgPSBbXTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgICAgIHVzYWdlRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdXNhZ2VzLnB1c2goW21zZywgZGVzY3JpcHRpb24gfHwgJyddKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldFVzYWdlID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdXNhZ2VzO1xuICAgIH07XG4gICAgc2VsZi5nZXRVc2FnZURpc2FibGVkID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdXNhZ2VEaXNhYmxlZDtcbiAgICB9O1xuICAgIHNlbGYuZ2V0UG9zaXRpb25hbEdyb3VwTmFtZSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIF9fKCdQb3NpdGlvbmFsczonKTtcbiAgICB9O1xuICAgIGxldCBleGFtcGxlcyA9IFtdO1xuICAgIHNlbGYuZXhhbXBsZSA9IChjbWQsIGRlc2NyaXB0aW9uKSA9PiB7XG4gICAgICAgIGV4YW1wbGVzLnB1c2goW2NtZCwgZGVzY3JpcHRpb24gfHwgJyddKTtcbiAgICB9O1xuICAgIGxldCBjb21tYW5kcyA9IFtdO1xuICAgIHNlbGYuY29tbWFuZCA9IGZ1bmN0aW9uIGNvbW1hbmQoY21kLCBkZXNjcmlwdGlvbiwgaXNEZWZhdWx0LCBhbGlhc2VzLCBkZXByZWNhdGVkID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGlzRGVmYXVsdCkge1xuICAgICAgICAgICAgY29tbWFuZHMgPSBjb21tYW5kcy5tYXAoY21kQXJyYXkgPT4ge1xuICAgICAgICAgICAgICAgIGNtZEFycmF5WzJdID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNtZEFycmF5O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29tbWFuZHMucHVzaChbY21kLCBkZXNjcmlwdGlvbiB8fCAnJywgaXNEZWZhdWx0LCBhbGlhc2VzLCBkZXByZWNhdGVkXSk7XG4gICAgfTtcbiAgICBzZWxmLmdldENvbW1hbmRzID0gKCkgPT4gY29tbWFuZHM7XG4gICAgbGV0IGRlc2NyaXB0aW9ucyA9IHt9O1xuICAgIHNlbGYuZGVzY3JpYmUgPSBmdW5jdGlvbiBkZXNjcmliZShrZXlPcktleXMsIGRlc2MpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5T3JLZXlzKSkge1xuICAgICAgICAgICAga2V5T3JLZXlzLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgc2VsZi5kZXNjcmliZShrLCBkZXNjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBrZXlPcktleXMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhrZXlPcktleXMpLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgc2VsZi5kZXNjcmliZShrLCBrZXlPcktleXNba10pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbnNba2V5T3JLZXlzXSA9IGRlc2M7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYuZ2V0RGVzY3JpcHRpb25zID0gKCkgPT4gZGVzY3JpcHRpb25zO1xuICAgIGxldCBlcGlsb2dzID0gW107XG4gICAgc2VsZi5lcGlsb2cgPSBtc2cgPT4ge1xuICAgICAgICBlcGlsb2dzLnB1c2gobXNnKTtcbiAgICB9O1xuICAgIGxldCB3cmFwU2V0ID0gZmFsc2U7XG4gICAgbGV0IHdyYXA7XG4gICAgc2VsZi53cmFwID0gY29scyA9PiB7XG4gICAgICAgIHdyYXBTZXQgPSB0cnVlO1xuICAgICAgICB3cmFwID0gY29scztcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFdyYXAoKSB7XG4gICAgICAgIGlmICghd3JhcFNldCkge1xuICAgICAgICAgICAgd3JhcCA9IHdpbmRvd1dpZHRoKCk7XG4gICAgICAgICAgICB3cmFwU2V0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd3JhcDtcbiAgICB9XG4gICAgY29uc3QgZGVmZXJZMThuTG9va3VwUHJlZml4ID0gJ19feWFyZ3NTdHJpbmdfXzonO1xuICAgIHNlbGYuZGVmZXJZMThuTG9va3VwID0gc3RyID0+IGRlZmVyWTE4bkxvb2t1cFByZWZpeCArIHN0cjtcbiAgICBzZWxmLmhlbHAgPSBmdW5jdGlvbiBoZWxwKCkge1xuICAgICAgICBpZiAoY2FjaGVkSGVscE1lc3NhZ2UpXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkSGVscE1lc3NhZ2U7XG4gICAgICAgIG5vcm1hbGl6ZUFsaWFzZXMoKTtcbiAgICAgICAgY29uc3QgYmFzZSQwID0geWFyZ3MuY3VzdG9tU2NyaXB0TmFtZVxuICAgICAgICAgICAgPyB5YXJncy4kMFxuICAgICAgICAgICAgOiBzaGltLnBhdGguYmFzZW5hbWUoeWFyZ3MuJDApO1xuICAgICAgICBjb25zdCBkZW1hbmRlZE9wdGlvbnMgPSB5YXJncy5nZXREZW1hbmRlZE9wdGlvbnMoKTtcbiAgICAgICAgY29uc3QgZGVtYW5kZWRDb21tYW5kcyA9IHlhcmdzLmdldERlbWFuZGVkQ29tbWFuZHMoKTtcbiAgICAgICAgY29uc3QgZGVwcmVjYXRlZE9wdGlvbnMgPSB5YXJncy5nZXREZXByZWNhdGVkT3B0aW9ucygpO1xuICAgICAgICBjb25zdCBncm91cHMgPSB5YXJncy5nZXRHcm91cHMoKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgbGV0IGtleXMgPSBbXTtcbiAgICAgICAga2V5cyA9IGtleXMuY29uY2F0KE9iamVjdC5rZXlzKGRlc2NyaXB0aW9ucykpO1xuICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoT2JqZWN0LmtleXMoZGVtYW5kZWRPcHRpb25zKSk7XG4gICAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhkZW1hbmRlZENvbW1hbmRzKSk7XG4gICAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhvcHRpb25zLmRlZmF1bHQpKTtcbiAgICAgICAga2V5cyA9IGtleXMuZmlsdGVyKGZpbHRlckhpZGRlbk9wdGlvbnMpO1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXMoa2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5ICE9PSAnXycpXG4gICAgICAgICAgICAgICAgYWNjW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pKTtcbiAgICAgICAgY29uc3QgdGhlV3JhcCA9IGdldFdyYXAoKTtcbiAgICAgICAgY29uc3QgdWkgPSBzaGltLmNsaXVpKHtcbiAgICAgICAgICAgIHdpZHRoOiB0aGVXcmFwLFxuICAgICAgICAgICAgd3JhcDogISF0aGVXcmFwLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF1c2FnZURpc2FibGVkKSB7XG4gICAgICAgICAgICBpZiAodXNhZ2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHVzYWdlcy5mb3JFYWNoKHVzYWdlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdWkuZGl2KGAke3VzYWdlWzBdLnJlcGxhY2UoL1xcJDAvZywgYmFzZSQwKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVzYWdlWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1aS5kaXYoeyB0ZXh0OiBgJHt1c2FnZVsxXX1gLCBwYWRkaW5nOiBbMSwgMCwgMCwgMF0gfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB1aS5kaXYoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbW1hbmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGxldCB1ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoZGVtYW5kZWRDb21tYW5kcy5fKSB7XG4gICAgICAgICAgICAgICAgICAgIHUgPSBgJHtiYXNlJDB9IDwke19fKCdjb21tYW5kJyl9PlxcbmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1ID0gYCR7YmFzZSQwfSBbJHtfXygnY29tbWFuZCcpfV1cXG5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB1aS5kaXYoYCR7dX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tbWFuZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB1aS5kaXYoX18oJ0NvbW1hbmRzOicpKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB5YXJncy5nZXRDb250ZXh0KCk7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRDb21tYW5kcyA9IGNvbnRleHQuY29tbWFuZHMubGVuZ3RoXG4gICAgICAgICAgICAgICAgPyBgJHtjb250ZXh0LmNvbW1hbmRzLmpvaW4oJyAnKX0gYFxuICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICBpZiAoeWFyZ3MuZ2V0UGFyc2VyQ29uZmlndXJhdGlvbigpWydzb3J0LWNvbW1hbmRzJ10gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBjb21tYW5kcyA9IGNvbW1hbmRzLnNvcnQoKGEsIGIpID0+IGFbMF0ubG9jYWxlQ29tcGFyZShiWzBdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21tYW5kcy5mb3JFYWNoKGNvbW1hbmQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRTdHJpbmcgPSBgJHtiYXNlJDB9ICR7cGFyZW50Q29tbWFuZHN9JHtjb21tYW5kWzBdLnJlcGxhY2UoL15cXCQwID8vLCAnJyl9YDtcbiAgICAgICAgICAgICAgICB1aS5zcGFuKHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogY29tbWFuZFN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogWzAsIDIsIDAsIDJdLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogbWF4V2lkdGgoY29tbWFuZHMsIHRoZVdyYXAsIGAke2Jhc2UkMH0ke3BhcmVudENvbW1hbmRzfWApICsgNCxcbiAgICAgICAgICAgICAgICB9LCB7IHRleHQ6IGNvbW1hbmRbMV0gfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGludHMgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAoY29tbWFuZFsyXSlcbiAgICAgICAgICAgICAgICAgICAgaGludHMucHVzaChgWyR7X18oJ2RlZmF1bHQnKX1dYCk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRbM10gJiYgY29tbWFuZFszXS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaGludHMucHVzaChgWyR7X18oJ2FsaWFzZXM6Jyl9ICR7Y29tbWFuZFszXS5qb2luKCcsICcpfV1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRbNF0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb21tYW5kWzRdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGludHMucHVzaChgWyR7X18oJ2RlcHJlY2F0ZWQ6ICVzJywgY29tbWFuZFs0XSl9XWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGludHMucHVzaChgWyR7X18oJ2RlcHJlY2F0ZWQnKX1dYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGhpbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogaGludHMuam9pbignICcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogWzAsIDAsIDAsIDJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ246ICdyaWdodCcsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB1aS5kaXYoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbGlhc0tleXMgPSAoT2JqZWN0LmtleXMob3B0aW9ucy5hbGlhcykgfHwgW10pLmNvbmNhdChPYmplY3Qua2V5cyh5YXJncy5wYXJzZWQubmV3QWxpYXNlcykgfHwgW10pO1xuICAgICAgICBrZXlzID0ga2V5cy5maWx0ZXIoa2V5ID0+ICF5YXJncy5wYXJzZWQubmV3QWxpYXNlc1trZXldICYmXG4gICAgICAgICAgICBhbGlhc0tleXMuZXZlcnkoYWxpYXMgPT4gKG9wdGlvbnMuYWxpYXNbYWxpYXNdIHx8IFtdKS5pbmRleE9mKGtleSkgPT09IC0xKSk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRHcm91cCA9IF9fKCdPcHRpb25zOicpO1xuICAgICAgICBpZiAoIWdyb3Vwc1tkZWZhdWx0R3JvdXBdKVxuICAgICAgICAgICAgZ3JvdXBzW2RlZmF1bHRHcm91cF0gPSBbXTtcbiAgICAgICAgYWRkVW5ncm91cGVkS2V5cyhrZXlzLCBvcHRpb25zLmFsaWFzLCBncm91cHMsIGRlZmF1bHRHcm91cCk7XG4gICAgICAgIGNvbnN0IGlzTG9uZ1N3aXRjaCA9IChzdykgPT4gL14tLS8udGVzdChnZXRUZXh0KHN3KSk7XG4gICAgICAgIGNvbnN0IGRpc3BsYXllZEdyb3VwcyA9IE9iamVjdC5rZXlzKGdyb3VwcylcbiAgICAgICAgICAgIC5maWx0ZXIoZ3JvdXBOYW1lID0+IGdyb3Vwc1tncm91cE5hbWVdLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAubWFwKGdyb3VwTmFtZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkS2V5cyA9IGdyb3Vwc1tncm91cE5hbWVdXG4gICAgICAgICAgICAgICAgLmZpbHRlcihmaWx0ZXJIaWRkZW5PcHRpb25zKVxuICAgICAgICAgICAgICAgIC5tYXAoa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAofmFsaWFzS2V5cy5pbmRleE9mKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGFsaWFzS2V5OyAoYWxpYXNLZXkgPSBhbGlhc0tleXNbaV0pICE9PSB1bmRlZmluZWQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAofihvcHRpb25zLmFsaWFzW2FsaWFzS2V5XSB8fCBbXSkuaW5kZXhPZihrZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsaWFzS2V5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4geyBncm91cE5hbWUsIG5vcm1hbGl6ZWRLZXlzIH07XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKCh7IG5vcm1hbGl6ZWRLZXlzIH0pID0+IG5vcm1hbGl6ZWRLZXlzLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAubWFwKCh7IGdyb3VwTmFtZSwgbm9ybWFsaXplZEtleXMgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3dpdGNoZXMgPSBub3JtYWxpemVkS2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgYWNjW2tleV0gPSBba2V5XVxuICAgICAgICAgICAgICAgICAgICAuY29uY2F0KG9wdGlvbnMuYWxpYXNba2V5XSB8fCBbXSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcChzdyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChncm91cE5hbWUgPT09IHNlbGYuZ2V0UG9zaXRpb25hbEdyb3VwTmFtZSgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN3O1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKC9eWzAtOV0kLy50ZXN0KHN3KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gfm9wdGlvbnMuYm9vbGVhbi5pbmRleE9mKGtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnLSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnLS0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzdy5sZW5ndGggPiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJy0tJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICctJykgKyBzdyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoc3cxLCBzdzIpID0+IGlzTG9uZ1N3aXRjaChzdzEpID09PSBpc0xvbmdTd2l0Y2goc3cyKVxuICAgICAgICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgICAgICAgOiBpc0xvbmdTd2l0Y2goc3cxKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICAgICAgICAgICAgICA6IC0xKVxuICAgICAgICAgICAgICAgICAgICAuam9pbignLCAnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgcmV0dXJuIHsgZ3JvdXBOYW1lLCBub3JtYWxpemVkS2V5cywgc3dpdGNoZXMgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNob3J0U3dpdGNoZXNVc2VkID0gZGlzcGxheWVkR3JvdXBzXG4gICAgICAgICAgICAuZmlsdGVyKCh7IGdyb3VwTmFtZSB9KSA9PiBncm91cE5hbWUgIT09IHNlbGYuZ2V0UG9zaXRpb25hbEdyb3VwTmFtZSgpKVxuICAgICAgICAgICAgLnNvbWUoKHsgbm9ybWFsaXplZEtleXMsIHN3aXRjaGVzIH0pID0+ICFub3JtYWxpemVkS2V5cy5ldmVyeShrZXkgPT4gaXNMb25nU3dpdGNoKHN3aXRjaGVzW2tleV0pKSk7XG4gICAgICAgIGlmIChzaG9ydFN3aXRjaGVzVXNlZCkge1xuICAgICAgICAgICAgZGlzcGxheWVkR3JvdXBzXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoeyBncm91cE5hbWUgfSkgPT4gZ3JvdXBOYW1lICE9PSBzZWxmLmdldFBvc2l0aW9uYWxHcm91cE5hbWUoKSlcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgoeyBub3JtYWxpemVkS2V5cywgc3dpdGNoZXMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTG9uZ1N3aXRjaChzd2l0Y2hlc1trZXldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoZXNba2V5XSA9IGFkZEluZGVudGF0aW9uKHN3aXRjaGVzW2tleV0sICcteCwgJy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBkaXNwbGF5ZWRHcm91cHMuZm9yRWFjaCgoeyBncm91cE5hbWUsIG5vcm1hbGl6ZWRLZXlzLCBzd2l0Y2hlcyB9KSA9PiB7XG4gICAgICAgICAgICB1aS5kaXYoZ3JvdXBOYW1lKTtcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrc3dpdGNoID0gc3dpdGNoZXNba2V5XTtcbiAgICAgICAgICAgICAgICBsZXQgZGVzYyA9IGRlc2NyaXB0aW9uc1trZXldIHx8ICcnO1xuICAgICAgICAgICAgICAgIGxldCB0eXBlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAofmRlc2MubGFzdEluZGV4T2YoZGVmZXJZMThuTG9va3VwUHJlZml4KSlcbiAgICAgICAgICAgICAgICAgICAgZGVzYyA9IF9fKGRlc2Muc3Vic3RyaW5nKGRlZmVyWTE4bkxvb2t1cFByZWZpeC5sZW5ndGgpKTtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMuYm9vbGVhbi5pbmRleE9mKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ2Jvb2xlYW4nKX1dYDtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMuY291bnQuaW5kZXhPZihrZXkpKVxuICAgICAgICAgICAgICAgICAgICB0eXBlID0gYFske19fKCdjb3VudCcpfV1gO1xuICAgICAgICAgICAgICAgIGlmICh+b3B0aW9ucy5zdHJpbmcuaW5kZXhPZihrZXkpKVxuICAgICAgICAgICAgICAgICAgICB0eXBlID0gYFske19fKCdzdHJpbmcnKX1dYDtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMubm9ybWFsaXplLmluZGV4T2Yoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnc3RyaW5nJyl9XWA7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLmFycmF5LmluZGV4T2Yoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnYXJyYXknKX1dYDtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMubnVtYmVyLmluZGV4T2Yoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnbnVtYmVyJyl9XWA7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwcmVjYXRlZEV4dHJhID0gKGRlcHJlY2F0ZWQpID0+IHR5cGVvZiBkZXByZWNhdGVkID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IGBbJHtfXygnZGVwcmVjYXRlZDogJXMnLCBkZXByZWNhdGVkKX1dYFxuICAgICAgICAgICAgICAgICAgICA6IGBbJHtfXygnZGVwcmVjYXRlZCcpfV1gO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4dHJhID0gW1xuICAgICAgICAgICAgICAgICAgICBrZXkgaW4gZGVwcmVjYXRlZE9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZGVwcmVjYXRlZEV4dHJhKGRlcHJlY2F0ZWRPcHRpb25zW2tleV0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGtleSBpbiBkZW1hbmRlZE9wdGlvbnMgPyBgWyR7X18oJ3JlcXVpcmVkJyl9XWAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNob2ljZXMgJiYgb3B0aW9ucy5jaG9pY2VzW2tleV1cbiAgICAgICAgICAgICAgICAgICAgICAgID8gYFske19fKCdjaG9pY2VzOicpfSAke3NlbGYuc3RyaW5naWZpZWRWYWx1ZXMob3B0aW9ucy5jaG9pY2VzW2tleV0pfV1gXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRTdHJpbmcob3B0aW9ucy5kZWZhdWx0W2tleV0sIG9wdGlvbnMuZGVmYXVsdERlc2NyaXB0aW9uW2tleV0pLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgICAgICAgICAuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHVpLnNwYW4oe1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBnZXRUZXh0KGtzd2l0Y2gpLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBbMCwgMiwgMCwgMiArIGdldEluZGVudGF0aW9uKGtzd2l0Y2gpXSxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG1heFdpZHRoKHN3aXRjaGVzLCB0aGVXcmFwKSArIDQsXG4gICAgICAgICAgICAgICAgfSwgZGVzYyk7XG4gICAgICAgICAgICAgICAgaWYgKGV4dHJhKVxuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoeyB0ZXh0OiBleHRyYSwgcGFkZGluZzogWzAsIDAsIDAsIDJdLCBhbGlnbjogJ3JpZ2h0JyB9KTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB1aS5kaXYoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChleGFtcGxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHVpLmRpdihfXygnRXhhbXBsZXM6JykpO1xuICAgICAgICAgICAgZXhhbXBsZXMuZm9yRWFjaChleGFtcGxlID0+IHtcbiAgICAgICAgICAgICAgICBleGFtcGxlWzBdID0gZXhhbXBsZVswXS5yZXBsYWNlKC9cXCQwL2csIGJhc2UkMCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGV4YW1wbGVzLmZvckVhY2goZXhhbXBsZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV4YW1wbGVbMV0gPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdih7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBleGFtcGxlWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogWzAsIDIsIDAsIDJdLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdih7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBleGFtcGxlWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogWzAsIDIsIDAsIDJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG1heFdpZHRoKGV4YW1wbGVzLCB0aGVXcmFwKSArIDQsXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGV4YW1wbGVbMV0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVwaWxvZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZSA9IGVwaWxvZ3NcbiAgICAgICAgICAgICAgICAubWFwKGVwaWxvZyA9PiBlcGlsb2cucmVwbGFjZSgvXFwkMC9nLCBiYXNlJDApKVxuICAgICAgICAgICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICAgICAgICAgIHVpLmRpdihgJHtlfVxcbmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1aS50b1N0cmluZygpLnJlcGxhY2UoL1xccyokLywgJycpO1xuICAgIH07XG4gICAgZnVuY3Rpb24gbWF4V2lkdGgodGFibGUsIHRoZVdyYXAsIG1vZGlmaWVyKSB7XG4gICAgICAgIGxldCB3aWR0aCA9IDA7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0YWJsZSkpIHtcbiAgICAgICAgICAgIHRhYmxlID0gT2JqZWN0LnZhbHVlcyh0YWJsZSkubWFwKHYgPT4gW3ZdKTtcbiAgICAgICAgfVxuICAgICAgICB0YWJsZS5mb3JFYWNoKHYgPT4ge1xuICAgICAgICAgICAgd2lkdGggPSBNYXRoLm1heChzaGltLnN0cmluZ1dpZHRoKG1vZGlmaWVyID8gYCR7bW9kaWZpZXJ9ICR7Z2V0VGV4dCh2WzBdKX1gIDogZ2V0VGV4dCh2WzBdKSkgKyBnZXRJbmRlbnRhdGlvbih2WzBdKSwgd2lkdGgpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoZVdyYXApXG4gICAgICAgICAgICB3aWR0aCA9IE1hdGgubWluKHdpZHRoLCBwYXJzZUludCgodGhlV3JhcCAqIDAuNSkudG9TdHJpbmcoKSwgMTApKTtcbiAgICAgICAgcmV0dXJuIHdpZHRoO1xuICAgIH1cbiAgICBmdW5jdGlvbiBub3JtYWxpemVBbGlhc2VzKCkge1xuICAgICAgICBjb25zdCBkZW1hbmRlZE9wdGlvbnMgPSB5YXJncy5nZXREZW1hbmRlZE9wdGlvbnMoKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgKE9iamVjdC5rZXlzKG9wdGlvbnMuYWxpYXMpIHx8IFtdKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBvcHRpb25zLmFsaWFzW2tleV0uZm9yRWFjaChhbGlhcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uc1thbGlhc10pXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZGVzY3JpYmUoa2V5LCBkZXNjcmlwdGlvbnNbYWxpYXNdKTtcbiAgICAgICAgICAgICAgICBpZiAoYWxpYXMgaW4gZGVtYW5kZWRPcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICB5YXJncy5kZW1hbmRPcHRpb24oa2V5LCBkZW1hbmRlZE9wdGlvbnNbYWxpYXNdKTtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMuYm9vbGVhbi5pbmRleE9mKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3MuYm9vbGVhbihrZXkpO1xuICAgICAgICAgICAgICAgIGlmICh+b3B0aW9ucy5jb3VudC5pbmRleE9mKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3MuY291bnQoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMuc3RyaW5nLmluZGV4T2YoYWxpYXMpKVxuICAgICAgICAgICAgICAgICAgICB5YXJncy5zdHJpbmcoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMubm9ybWFsaXplLmluZGV4T2YoYWxpYXMpKVxuICAgICAgICAgICAgICAgICAgICB5YXJncy5ub3JtYWxpemUoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMuYXJyYXkuaW5kZXhPZihhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLmFycmF5KGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLm51bWJlci5pbmRleE9mKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3MubnVtYmVyKGtleSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGxldCBjYWNoZWRIZWxwTWVzc2FnZTtcbiAgICBzZWxmLmNhY2hlSGVscE1lc3NhZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNhY2hlZEhlbHBNZXNzYWdlID0gdGhpcy5oZWxwKCk7XG4gICAgfTtcbiAgICBzZWxmLmNsZWFyQ2FjaGVkSGVscE1lc3NhZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNhY2hlZEhlbHBNZXNzYWdlID0gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgZnVuY3Rpb24gYWRkVW5ncm91cGVkS2V5cyhrZXlzLCBhbGlhc2VzLCBncm91cHMsIGRlZmF1bHRHcm91cCkge1xuICAgICAgICBsZXQgZ3JvdXBlZEtleXMgPSBbXTtcbiAgICAgICAgbGV0IHRvQ2hlY2sgPSBudWxsO1xuICAgICAgICBPYmplY3Qua2V5cyhncm91cHMpLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICAgICAgZ3JvdXBlZEtleXMgPSBncm91cGVkS2V5cy5jb25jYXQoZ3JvdXBzW2dyb3VwXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHRvQ2hlY2sgPSBba2V5XS5jb25jYXQoYWxpYXNlc1trZXldKTtcbiAgICAgICAgICAgIGlmICghdG9DaGVjay5zb21lKGsgPT4gZ3JvdXBlZEtleXMuaW5kZXhPZihrKSAhPT0gLTEpKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBzW2RlZmF1bHRHcm91cF0ucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGdyb3VwZWRLZXlzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaWx0ZXJIaWRkZW5PcHRpb25zKGtleSkge1xuICAgICAgICByZXR1cm4gKHlhcmdzLmdldE9wdGlvbnMoKS5oaWRkZW5PcHRpb25zLmluZGV4T2Yoa2V5KSA8IDAgfHxcbiAgICAgICAgICAgIHlhcmdzLnBhcnNlZC5hcmd2W3lhcmdzLmdldE9wdGlvbnMoKS5zaG93SGlkZGVuT3B0XSk7XG4gICAgfVxuICAgIHNlbGYuc2hvd0hlbHAgPSAobGV2ZWwpID0+IHtcbiAgICAgICAgY29uc3QgbG9nZ2VyID0geWFyZ3MuX2dldExvZ2dlckluc3RhbmNlKCk7XG4gICAgICAgIGlmICghbGV2ZWwpXG4gICAgICAgICAgICBsZXZlbCA9ICdlcnJvcic7XG4gICAgICAgIGNvbnN0IGVtaXQgPSB0eXBlb2YgbGV2ZWwgPT09ICdmdW5jdGlvbicgPyBsZXZlbCA6IGxvZ2dlcltsZXZlbF07XG4gICAgICAgIGVtaXQoc2VsZi5oZWxwKCkpO1xuICAgIH07XG4gICAgc2VsZi5mdW5jdGlvbkRlc2NyaXB0aW9uID0gZm4gPT4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGZuLm5hbWVcbiAgICAgICAgICAgID8gc2hpbS5QYXJzZXIuZGVjYW1lbGl6ZShmbi5uYW1lLCAnLScpXG4gICAgICAgICAgICA6IF9fKCdnZW5lcmF0ZWQtdmFsdWUnKTtcbiAgICAgICAgcmV0dXJuIFsnKCcsIGRlc2NyaXB0aW9uLCAnKSddLmpvaW4oJycpO1xuICAgIH07XG4gICAgc2VsZi5zdHJpbmdpZmllZFZhbHVlcyA9IGZ1bmN0aW9uIHN0cmluZ2lmaWVkVmFsdWVzKHZhbHVlcywgc2VwYXJhdG9yKSB7XG4gICAgICAgIGxldCBzdHJpbmcgPSAnJztcbiAgICAgICAgY29uc3Qgc2VwID0gc2VwYXJhdG9yIHx8ICcsICc7XG4gICAgICAgIGNvbnN0IGFycmF5ID0gW10uY29uY2F0KHZhbHVlcyk7XG4gICAgICAgIGlmICghdmFsdWVzIHx8ICFhcnJheS5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgICBhcnJheS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgIGlmIChzdHJpbmcubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBzZXA7XG4gICAgICAgICAgICBzdHJpbmcgKz0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGRlZmF1bHRTdHJpbmcodmFsdWUsIGRlZmF1bHREZXNjcmlwdGlvbikge1xuICAgICAgICBsZXQgc3RyaW5nID0gYFske19fKCdkZWZhdWx0OicpfSBgO1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhZGVmYXVsdERlc2NyaXB0aW9uKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmIChkZWZhdWx0RGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHN0cmluZyArPSBkZWZhdWx0RGVzY3JpcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBgXCIke3ZhbHVlfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHtzdHJpbmd9XWA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdpbmRvd1dpZHRoKCkge1xuICAgICAgICBjb25zdCBtYXhXaWR0aCA9IDgwO1xuICAgICAgICBpZiAoc2hpbS5wcm9jZXNzLnN0ZENvbHVtbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbihtYXhXaWR0aCwgc2hpbS5wcm9jZXNzLnN0ZENvbHVtbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG1heFdpZHRoO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCB2ZXJzaW9uID0gbnVsbDtcbiAgICBzZWxmLnZlcnNpb24gPSB2ZXIgPT4ge1xuICAgICAgICB2ZXJzaW9uID0gdmVyO1xuICAgIH07XG4gICAgc2VsZi5zaG93VmVyc2lvbiA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgbG9nZ2VyID0geWFyZ3MuX2dldExvZ2dlckluc3RhbmNlKCk7XG4gICAgICAgIGxvZ2dlci5sb2codmVyc2lvbik7XG4gICAgfTtcbiAgICBzZWxmLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQobG9jYWxMb29rdXApIHtcbiAgICAgICAgZmFpbE1lc3NhZ2UgPSBudWxsO1xuICAgICAgICBmYWlsdXJlT3V0cHV0ID0gZmFsc2U7XG4gICAgICAgIHVzYWdlcyA9IFtdO1xuICAgICAgICB1c2FnZURpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIGVwaWxvZ3MgPSBbXTtcbiAgICAgICAgZXhhbXBsZXMgPSBbXTtcbiAgICAgICAgY29tbWFuZHMgPSBbXTtcbiAgICAgICAgZGVzY3JpcHRpb25zID0gb2JqRmlsdGVyKGRlc2NyaXB0aW9ucywgayA9PiAhbG9jYWxMb29rdXBba10pO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGNvbnN0IGZyb3plbnMgPSBbXTtcbiAgICBzZWxmLmZyZWV6ZSA9IGZ1bmN0aW9uIGZyZWV6ZSgpIHtcbiAgICAgICAgZnJvemVucy5wdXNoKHtcbiAgICAgICAgICAgIGZhaWxNZXNzYWdlLFxuICAgICAgICAgICAgZmFpbHVyZU91dHB1dCxcbiAgICAgICAgICAgIHVzYWdlcyxcbiAgICAgICAgICAgIHVzYWdlRGlzYWJsZWQsXG4gICAgICAgICAgICBlcGlsb2dzLFxuICAgICAgICAgICAgZXhhbXBsZXMsXG4gICAgICAgICAgICBjb21tYW5kcyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBzZWxmLnVuZnJlZXplID0gZnVuY3Rpb24gdW5mcmVlemUoKSB7XG4gICAgICAgIGNvbnN0IGZyb3plbiA9IGZyb3plbnMucG9wKCk7XG4gICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKGZyb3plbiwgdW5kZWZpbmVkLCBzaGltKTtcbiAgICAgICAgKHtcbiAgICAgICAgICAgIGZhaWxNZXNzYWdlLFxuICAgICAgICAgICAgZmFpbHVyZU91dHB1dCxcbiAgICAgICAgICAgIHVzYWdlcyxcbiAgICAgICAgICAgIHVzYWdlRGlzYWJsZWQsXG4gICAgICAgICAgICBlcGlsb2dzLFxuICAgICAgICAgICAgZXhhbXBsZXMsXG4gICAgICAgICAgICBjb21tYW5kcyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9ucyxcbiAgICAgICAgfSA9IGZyb3plbik7XG4gICAgfTtcbiAgICByZXR1cm4gc2VsZjtcbn1cbmZ1bmN0aW9uIGlzSW5kZW50ZWRUZXh0KHRleHQpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRleHQgPT09ICdvYmplY3QnO1xufVxuZnVuY3Rpb24gYWRkSW5kZW50YXRpb24odGV4dCwgaW5kZW50KSB7XG4gICAgcmV0dXJuIGlzSW5kZW50ZWRUZXh0KHRleHQpXG4gICAgICAgID8geyB0ZXh0OiB0ZXh0LnRleHQsIGluZGVudGF0aW9uOiB0ZXh0LmluZGVudGF0aW9uICsgaW5kZW50IH1cbiAgICAgICAgOiB7IHRleHQsIGluZGVudGF0aW9uOiBpbmRlbnQgfTtcbn1cbmZ1bmN0aW9uIGdldEluZGVudGF0aW9uKHRleHQpIHtcbiAgICByZXR1cm4gaXNJbmRlbnRlZFRleHQodGV4dCkgPyB0ZXh0LmluZGVudGF0aW9uIDogMDtcbn1cbmZ1bmN0aW9uIGdldFRleHQodGV4dCkge1xuICAgIHJldHVybiBpc0luZGVudGVkVGV4dCh0ZXh0KSA/IHRleHQudGV4dCA6IHRleHQ7XG59XG5cbmNvbnN0IGNvbXBsZXRpb25TaFRlbXBsYXRlID0gYCMjIy1iZWdpbi17e2FwcF9uYW1lfX0tY29tcGxldGlvbnMtIyMjXG4jXG4jIHlhcmdzIGNvbW1hbmQgY29tcGxldGlvbiBzY3JpcHRcbiNcbiMgSW5zdGFsbGF0aW9uOiB7e2FwcF9wYXRofX0ge3tjb21wbGV0aW9uX2NvbW1hbmR9fSA+PiB+Ly5iYXNocmNcbiMgICAgb3Ige3thcHBfcGF0aH19IHt7Y29tcGxldGlvbl9jb21tYW5kfX0gPj4gfi8uYmFzaF9wcm9maWxlIG9uIE9TWC5cbiNcbl95YXJnc19jb21wbGV0aW9ucygpXG57XG4gICAgbG9jYWwgY3VyX3dvcmQgYXJncyB0eXBlX2xpc3RcblxuICAgIGN1cl93b3JkPVwiXFwke0NPTVBfV09SRFNbQ09NUF9DV09SRF19XCJcbiAgICBhcmdzPShcIlxcJHtDT01QX1dPUkRTW0BdfVwiKVxuXG4gICAgIyBhc2sgeWFyZ3MgdG8gZ2VuZXJhdGUgY29tcGxldGlvbnMuXG4gICAgdHlwZV9saXN0PSQoe3thcHBfcGF0aH19IC0tZ2V0LXlhcmdzLWNvbXBsZXRpb25zIFwiXFwke2FyZ3NbQF19XCIpXG5cbiAgICBDT01QUkVQTFk9KCAkKGNvbXBnZW4gLVcgXCJcXCR7dHlwZV9saXN0fVwiIC0tIFxcJHtjdXJfd29yZH0pIClcblxuICAgICMgaWYgbm8gbWF0Y2ggd2FzIGZvdW5kLCBmYWxsIGJhY2sgdG8gZmlsZW5hbWUgY29tcGxldGlvblxuICAgIGlmIFsgXFwkeyNDT01QUkVQTFlbQF19IC1lcSAwIF07IHRoZW5cbiAgICAgIENPTVBSRVBMWT0oKVxuICAgIGZpXG5cbiAgICByZXR1cm4gMFxufVxuY29tcGxldGUgLW8gZGVmYXVsdCAtRiBfeWFyZ3NfY29tcGxldGlvbnMge3thcHBfbmFtZX19XG4jIyMtZW5kLXt7YXBwX25hbWV9fS1jb21wbGV0aW9ucy0jIyNcbmA7XG5jb25zdCBjb21wbGV0aW9uWnNoVGVtcGxhdGUgPSBgIyMjLWJlZ2luLXt7YXBwX25hbWV9fS1jb21wbGV0aW9ucy0jIyNcbiNcbiMgeWFyZ3MgY29tbWFuZCBjb21wbGV0aW9uIHNjcmlwdFxuI1xuIyBJbnN0YWxsYXRpb246IHt7YXBwX3BhdGh9fSB7e2NvbXBsZXRpb25fY29tbWFuZH19ID4+IH4vLnpzaHJjXG4jICAgIG9yIHt7YXBwX3BhdGh9fSB7e2NvbXBsZXRpb25fY29tbWFuZH19ID4+IH4vLnpzaF9wcm9maWxlIG9uIE9TWC5cbiNcbl97e2FwcF9uYW1lfX1feWFyZ3NfY29tcGxldGlvbnMoKVxue1xuICBsb2NhbCByZXBseVxuICBsb2NhbCBzaT0kSUZTXG4gIElGUz0kJ1xcbicgcmVwbHk9KCQoQ09NUF9DV09SRD1cIiQoKENVUlJFTlQtMSkpXCIgQ09NUF9MSU5FPVwiJEJVRkZFUlwiIENPTVBfUE9JTlQ9XCIkQ1VSU09SXCIge3thcHBfcGF0aH19IC0tZ2V0LXlhcmdzLWNvbXBsZXRpb25zIFwiXFwke3dvcmRzW0BdfVwiKSlcbiAgSUZTPSRzaVxuICBfZGVzY3JpYmUgJ3ZhbHVlcycgcmVwbHlcbn1cbmNvbXBkZWYgX3t7YXBwX25hbWV9fV95YXJnc19jb21wbGV0aW9ucyB7e2FwcF9uYW1lfX1cbiMjIy1lbmQte3thcHBfbmFtZX19LWNvbXBsZXRpb25zLSMjI1xuYDtcblxuZnVuY3Rpb24gY29tcGxldGlvbih5YXJncywgdXNhZ2UsIGNvbW1hbmQsIHNoaW0pIHtcbiAgICBjb25zdCBzZWxmID0ge1xuICAgICAgICBjb21wbGV0aW9uS2V5OiAnZ2V0LXlhcmdzLWNvbXBsZXRpb25zJyxcbiAgICB9O1xuICAgIGxldCBhbGlhc2VzO1xuICAgIHNlbGYuc2V0UGFyc2VkID0gZnVuY3Rpb24gc2V0UGFyc2VkKHBhcnNlZCkge1xuICAgICAgICBhbGlhc2VzID0gcGFyc2VkLmFsaWFzZXM7XG4gICAgfTtcbiAgICBjb25zdCB6c2hTaGVsbCA9IChzaGltLmdldEVudignU0hFTEwnKSAmJiBzaGltLmdldEVudignU0hFTEwnKS5pbmRleE9mKCd6c2gnKSAhPT0gLTEpIHx8XG4gICAgICAgIChzaGltLmdldEVudignWlNIX05BTUUnKSAmJiBzaGltLmdldEVudignWlNIX05BTUUnKS5pbmRleE9mKCd6c2gnKSAhPT0gLTEpO1xuICAgIHNlbGYuZ2V0Q29tcGxldGlvbiA9IGZ1bmN0aW9uIGdldENvbXBsZXRpb24oYXJncywgZG9uZSkge1xuICAgICAgICBjb25zdCBjb21wbGV0aW9ucyA9IFtdO1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gYXJncy5sZW5ndGggPyBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gOiAnJztcbiAgICAgICAgY29uc3QgYXJndiA9IHlhcmdzLnBhcnNlKGFyZ3MsIHRydWUpO1xuICAgICAgICBjb25zdCBwYXJlbnRDb21tYW5kcyA9IHlhcmdzLmdldENvbnRleHQoKS5jb21tYW5kcztcbiAgICAgICAgZnVuY3Rpb24gcnVuQ29tcGxldGlvbkZ1bmN0aW9uKGFyZ3YpIHtcbiAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKGNvbXBsZXRpb25GdW5jdGlvbiwgbnVsbCwgc2hpbSk7XG4gICAgICAgICAgICBpZiAoaXNTeW5jQ29tcGxldGlvbkZ1bmN0aW9uKGNvbXBsZXRpb25GdW5jdGlvbikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb21wbGV0aW9uRnVuY3Rpb24oY3VycmVudCwgYXJndik7XG4gICAgICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGxpc3QgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hpbS5wcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lKGxpc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoaW0ucHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25GdW5jdGlvbihjdXJyZW50LCBhcmd2LCBjb21wbGV0aW9ucyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoY29tcGxldGlvbnMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wbGV0aW9uRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBpc1Byb21pc2UoYXJndilcbiAgICAgICAgICAgICAgICA/IGFyZ3YudGhlbihydW5Db21wbGV0aW9uRnVuY3Rpb24pXG4gICAgICAgICAgICAgICAgOiBydW5Db21wbGV0aW9uRnVuY3Rpb24oYXJndik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBjb21tYW5kLmdldENvbW1hbmRIYW5kbGVycygpO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBhcmdzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChoYW5kbGVyc1thcmdzW2ldXSAmJiBoYW5kbGVyc1thcmdzW2ldXS5idWlsZGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnVpbGRlciA9IGhhbmRsZXJzW2FyZ3NbaV1dLmJ1aWxkZXI7XG4gICAgICAgICAgICAgICAgaWYgKGlzQ29tbWFuZEJ1aWxkZXJDYWxsYmFjayhidWlsZGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB5ID0geWFyZ3MucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgYnVpbGRlcih5KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHkuYXJndjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjdXJyZW50Lm1hdGNoKC9eLS8pICYmXG4gICAgICAgICAgICBwYXJlbnRDb21tYW5kc1twYXJlbnRDb21tYW5kcy5sZW5ndGggLSAxXSAhPT0gY3VycmVudCkge1xuICAgICAgICAgICAgdXNhZ2UuZ2V0Q29tbWFuZHMoKS5mb3JFYWNoKHVzYWdlQ29tbWFuZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBwYXJzZUNvbW1hbmQodXNhZ2VDb21tYW5kWzBdKS5jbWQ7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MuaW5kZXhPZihjb21tYW5kTmFtZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghenNoU2hlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25zLnB1c2goY29tbWFuZE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVzYyA9IHVzYWdlQ29tbWFuZFsxXSB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25zLnB1c2goY29tbWFuZE5hbWUucmVwbGFjZSgvOi9nLCAnXFxcXDonKSArICc6JyArIGRlc2MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnQubWF0Y2goL14tLykgfHwgKGN1cnJlbnQgPT09ICcnICYmIGNvbXBsZXRpb25zLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlc2NzID0gdXNhZ2UuZ2V0RGVzY3JpcHRpb25zKCk7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0geWFyZ3MuZ2V0T3B0aW9ucygpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMob3B0aW9ucy5rZXkpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZWdhYmxlID0gISFvcHRpb25zLmNvbmZpZ3VyYXRpb25bJ2Jvb2xlYW4tbmVnYXRpb24nXSAmJlxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmJvb2xlYW4uaW5jbHVkZXMoa2V5KTtcbiAgICAgICAgICAgICAgICBsZXQga2V5QW5kQWxpYXNlcyA9IFtrZXldLmNvbmNhdChhbGlhc2VzW2tleV0gfHwgW10pO1xuICAgICAgICAgICAgICAgIGlmIChuZWdhYmxlKVxuICAgICAgICAgICAgICAgICAgICBrZXlBbmRBbGlhc2VzID0ga2V5QW5kQWxpYXNlcy5jb25jYXQoa2V5QW5kQWxpYXNlcy5tYXAoa2V5ID0+IGBuby0ke2tleX1gKSk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY29tcGxldGVPcHRpb25LZXkoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vdEluQXJncyA9IGtleUFuZEFsaWFzZXMuZXZlcnkodmFsID0+IGFyZ3MuaW5kZXhPZihgLS0ke3ZhbH1gKSA9PT0gLTEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobm90SW5BcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydHNCeVR3b0Rhc2hlcyA9IChzKSA9PiAvXi0tLy50ZXN0KHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNTaG9ydE9wdGlvbiA9IChzKSA9PiAvXlteMC05XSQvLnRlc3Qocyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXNoZXMgPSAhc3RhcnRzQnlUd29EYXNoZXMoY3VycmVudCkgJiYgaXNTaG9ydE9wdGlvbihrZXkpID8gJy0nIDogJy0tJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghenNoU2hlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9ucy5wdXNoKGRhc2hlcyArIGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXNjID0gZGVzY3Nba2V5XSB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9ucy5wdXNoKGRhc2hlcyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2tleS5yZXBsYWNlKC86L2csICdcXFxcOicpfToke2Rlc2MucmVwbGFjZSgnX195YXJnc1N0cmluZ19fOicsICcnKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb21wbGV0ZU9wdGlvbktleShrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChuZWdhYmxlICYmICEhb3B0aW9ucy5kZWZhdWx0W2tleV0pXG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlT3B0aW9uS2V5KGBuby0ke2tleX1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGRvbmUoY29tcGxldGlvbnMpO1xuICAgIH07XG4gICAgc2VsZi5nZW5lcmF0ZUNvbXBsZXRpb25TY3JpcHQgPSBmdW5jdGlvbiBnZW5lcmF0ZUNvbXBsZXRpb25TY3JpcHQoJDAsIGNtZCkge1xuICAgICAgICBsZXQgc2NyaXB0ID0genNoU2hlbGxcbiAgICAgICAgICAgID8gY29tcGxldGlvblpzaFRlbXBsYXRlXG4gICAgICAgICAgICA6IGNvbXBsZXRpb25TaFRlbXBsYXRlO1xuICAgICAgICBjb25zdCBuYW1lID0gc2hpbS5wYXRoLmJhc2VuYW1lKCQwKTtcbiAgICAgICAgaWYgKCQwLm1hdGNoKC9cXC5qcyQvKSlcbiAgICAgICAgICAgICQwID0gYC4vJHskMH1gO1xuICAgICAgICBzY3JpcHQgPSBzY3JpcHQucmVwbGFjZSgve3thcHBfbmFtZX19L2csIG5hbWUpO1xuICAgICAgICBzY3JpcHQgPSBzY3JpcHQucmVwbGFjZSgve3tjb21wbGV0aW9uX2NvbW1hbmR9fS9nLCBjbWQpO1xuICAgICAgICByZXR1cm4gc2NyaXB0LnJlcGxhY2UoL3t7YXBwX3BhdGh9fS9nLCAkMCk7XG4gICAgfTtcbiAgICBsZXQgY29tcGxldGlvbkZ1bmN0aW9uID0gbnVsbDtcbiAgICBzZWxmLnJlZ2lzdGVyRnVuY3Rpb24gPSBmbiA9PiB7XG4gICAgICAgIGNvbXBsZXRpb25GdW5jdGlvbiA9IGZuO1xuICAgIH07XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBpc1N5bmNDb21wbGV0aW9uRnVuY3Rpb24oY29tcGxldGlvbkZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIGNvbXBsZXRpb25GdW5jdGlvbi5sZW5ndGggPCAzO1xufVxuXG5mdW5jdGlvbiBsZXZlbnNodGVpbihhLCBiKSB7XG4gICAgaWYgKGEubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm4gYi5sZW5ndGg7XG4gICAgaWYgKGIubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm4gYS5sZW5ndGg7XG4gICAgY29uc3QgbWF0cml4ID0gW107XG4gICAgbGV0IGk7XG4gICAgZm9yIChpID0gMDsgaSA8PSBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1hdHJpeFtpXSA9IFtpXTtcbiAgICB9XG4gICAgbGV0IGo7XG4gICAgZm9yIChqID0gMDsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIG1hdHJpeFswXVtqXSA9IGo7XG4gICAgfVxuICAgIGZvciAoaSA9IDE7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKGogPSAxOyBqIDw9IGEubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChiLmNoYXJBdChpIC0gMSkgPT09IGEuY2hhckF0KGogLSAxKSkge1xuICAgICAgICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IG1hdHJpeFtpIC0gMV1baiAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbWF0cml4W2ldW2pdID0gTWF0aC5taW4obWF0cml4W2kgLSAxXVtqIC0gMV0gKyAxLCBNYXRoLm1pbihtYXRyaXhbaV1baiAtIDFdICsgMSwgbWF0cml4W2kgLSAxXVtqXSArIDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWF0cml4W2IubGVuZ3RoXVthLmxlbmd0aF07XG59XG5cbmNvbnN0IHNwZWNpYWxLZXlzID0gWyckMCcsICctLScsICdfJ107XG5mdW5jdGlvbiB2YWxpZGF0aW9uKHlhcmdzLCB1c2FnZSwgeTE4biwgc2hpbSkge1xuICAgIGNvbnN0IF9fID0geTE4bi5fXztcbiAgICBjb25zdCBfX24gPSB5MThuLl9fbjtcbiAgICBjb25zdCBzZWxmID0ge307XG4gICAgc2VsZi5ub25PcHRpb25Db3VudCA9IGZ1bmN0aW9uIG5vbk9wdGlvbkNvdW50KGFyZ3YpIHtcbiAgICAgICAgY29uc3QgZGVtYW5kZWRDb21tYW5kcyA9IHlhcmdzLmdldERlbWFuZGVkQ29tbWFuZHMoKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb25hbENvdW50ID0gYXJndi5fLmxlbmd0aCArIChhcmd2WyctLSddID8gYXJndlsnLS0nXS5sZW5ndGggOiAwKTtcbiAgICAgICAgY29uc3QgX3MgPSBwb3NpdGlvbmFsQ291bnQgLSB5YXJncy5nZXRDb250ZXh0KCkuY29tbWFuZHMubGVuZ3RoO1xuICAgICAgICBpZiAoZGVtYW5kZWRDb21tYW5kcy5fICYmXG4gICAgICAgICAgICAoX3MgPCBkZW1hbmRlZENvbW1hbmRzLl8ubWluIHx8IF9zID4gZGVtYW5kZWRDb21tYW5kcy5fLm1heCkpIHtcbiAgICAgICAgICAgIGlmIChfcyA8IGRlbWFuZGVkQ29tbWFuZHMuXy5taW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoZGVtYW5kZWRDb21tYW5kcy5fLm1pbk1zZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwoZGVtYW5kZWRDb21tYW5kcy5fLm1pbk1zZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBkZW1hbmRlZENvbW1hbmRzLl8ubWluTXNnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcJDAvZywgX3MudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwkMS8sIGRlbWFuZGVkQ29tbWFuZHMuXy5taW4udG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKF9fbignTm90IGVub3VnaCBub24tb3B0aW9uIGFyZ3VtZW50czogZ290ICVzLCBuZWVkIGF0IGxlYXN0ICVzJywgJ05vdCBlbm91Z2ggbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbmVlZCBhdCBsZWFzdCAlcycsIF9zLCBfcy50b1N0cmluZygpLCBkZW1hbmRlZENvbW1hbmRzLl8ubWluLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChfcyA+IGRlbWFuZGVkQ29tbWFuZHMuXy5tYXgpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGVtYW5kZWRDb21tYW5kcy5fLm1heE1zZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwoZGVtYW5kZWRDb21tYW5kcy5fLm1heE1zZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBkZW1hbmRlZENvbW1hbmRzLl8ubWF4TXNnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcJDAvZywgX3MudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwkMS8sIGRlbWFuZGVkQ29tbWFuZHMuXy5tYXgudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKF9fbignVG9vIG1hbnkgbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbWF4aW11bSBvZiAlcycsICdUb28gbWFueSBub24tb3B0aW9uIGFyZ3VtZW50czogZ290ICVzLCBtYXhpbXVtIG9mICVzJywgX3MsIF9zLnRvU3RyaW5nKCksIGRlbWFuZGVkQ29tbWFuZHMuXy5tYXgudG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5wb3NpdGlvbmFsQ291bnQgPSBmdW5jdGlvbiBwb3NpdGlvbmFsQ291bnQocmVxdWlyZWQsIG9ic2VydmVkKSB7XG4gICAgICAgIGlmIChvYnNlcnZlZCA8IHJlcXVpcmVkKSB7XG4gICAgICAgICAgICB1c2FnZS5mYWlsKF9fbignTm90IGVub3VnaCBub24tb3B0aW9uIGFyZ3VtZW50czogZ290ICVzLCBuZWVkIGF0IGxlYXN0ICVzJywgJ05vdCBlbm91Z2ggbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbmVlZCBhdCBsZWFzdCAlcycsIG9ic2VydmVkLCBvYnNlcnZlZCArICcnLCByZXF1aXJlZCArICcnKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYucmVxdWlyZWRBcmd1bWVudHMgPSBmdW5jdGlvbiByZXF1aXJlZEFyZ3VtZW50cyhhcmd2KSB7XG4gICAgICAgIGNvbnN0IGRlbWFuZGVkT3B0aW9ucyA9IHlhcmdzLmdldERlbWFuZGVkT3B0aW9ucygpO1xuICAgICAgICBsZXQgbWlzc2luZyA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGRlbWFuZGVkT3B0aW9ucykpIHtcbiAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFyZ3YsIGtleSkgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgYXJndltrZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIG1pc3NpbmcgPSBtaXNzaW5nIHx8IHt9O1xuICAgICAgICAgICAgICAgIG1pc3Npbmdba2V5XSA9IGRlbWFuZGVkT3B0aW9uc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtaXNzaW5nKSB7XG4gICAgICAgICAgICBjb25zdCBjdXN0b21Nc2dzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhtaXNzaW5nKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IG1pc3Npbmdba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAobXNnICYmIGN1c3RvbU1zZ3MuaW5kZXhPZihtc2cpIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21Nc2dzLnB1c2gobXNnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjdXN0b21Nc2cgPSBjdXN0b21Nc2dzLmxlbmd0aCA/IGBcXG4ke2N1c3RvbU1zZ3Muam9pbignXFxuJyl9YCA6ICcnO1xuICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ01pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQ6ICVzJywgJ01pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnRzOiAlcycsIE9iamVjdC5rZXlzKG1pc3NpbmcpLmxlbmd0aCwgT2JqZWN0LmtleXMobWlzc2luZykuam9pbignLCAnKSArIGN1c3RvbU1zZykpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLnVua25vd25Bcmd1bWVudHMgPSBmdW5jdGlvbiB1bmtub3duQXJndW1lbnRzKGFyZ3YsIGFsaWFzZXMsIHBvc2l0aW9uYWxNYXAsIGlzRGVmYXVsdENvbW1hbmQsIGNoZWNrUG9zaXRpb25hbHMgPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRLZXlzID0geWFyZ3MuZ2V0Q29tbWFuZEluc3RhbmNlKCkuZ2V0Q29tbWFuZHMoKTtcbiAgICAgICAgY29uc3QgdW5rbm93biA9IFtdO1xuICAgICAgICBjb25zdCBjdXJyZW50Q29udGV4dCA9IHlhcmdzLmdldENvbnRleHQoKTtcbiAgICAgICAgT2JqZWN0LmtleXMoYXJndikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKHNwZWNpYWxLZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBvc2l0aW9uYWxNYXAsIGtleSkgJiZcbiAgICAgICAgICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHlhcmdzLl9nZXRQYXJzZUNvbnRleHQoKSwga2V5KSAmJlxuICAgICAgICAgICAgICAgICFzZWxmLmlzVmFsaWRBbmRTb21lQWxpYXNJc05vdE5ldyhrZXksIGFsaWFzZXMpKSB7XG4gICAgICAgICAgICAgICAgdW5rbm93bi5wdXNoKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY2hlY2tQb3NpdGlvbmFscyAmJlxuICAgICAgICAgICAgKGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICAgICAgICBjb21tYW5kS2V5cy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgICAgICAgaXNEZWZhdWx0Q29tbWFuZCkpIHtcbiAgICAgICAgICAgIGFyZ3YuXy5zbGljZShjdXJyZW50Q29udGV4dC5jb21tYW5kcy5sZW5ndGgpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29tbWFuZEtleXMuaW5kZXhPZignJyArIGtleSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHVua25vd24ucHVzaCgnJyArIGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVua25vd24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ1Vua25vd24gYXJndW1lbnQ6ICVzJywgJ1Vua25vd24gYXJndW1lbnRzOiAlcycsIHVua25vd24ubGVuZ3RoLCB1bmtub3duLmpvaW4oJywgJykpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi51bmtub3duQ29tbWFuZHMgPSBmdW5jdGlvbiB1bmtub3duQ29tbWFuZHMoYXJndikge1xuICAgICAgICBjb25zdCBjb21tYW5kS2V5cyA9IHlhcmdzLmdldENvbW1hbmRJbnN0YW5jZSgpLmdldENvbW1hbmRzKCk7XG4gICAgICAgIGNvbnN0IHVua25vd24gPSBbXTtcbiAgICAgICAgY29uc3QgY3VycmVudENvbnRleHQgPSB5YXJncy5nZXRDb250ZXh0KCk7XG4gICAgICAgIGlmIChjdXJyZW50Q29udGV4dC5jb21tYW5kcy5sZW5ndGggPiAwIHx8IGNvbW1hbmRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGFyZ3YuXy5zbGljZShjdXJyZW50Q29udGV4dC5jb21tYW5kcy5sZW5ndGgpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29tbWFuZEtleXMuaW5kZXhPZignJyArIGtleSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHVua25vd24ucHVzaCgnJyArIGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVua25vd24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ1Vua25vd24gY29tbWFuZDogJXMnLCAnVW5rbm93biBjb21tYW5kczogJXMnLCB1bmtub3duLmxlbmd0aCwgdW5rbm93bi5qb2luKCcsICcpKSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5pc1ZhbGlkQW5kU29tZUFsaWFzSXNOb3ROZXcgPSBmdW5jdGlvbiBpc1ZhbGlkQW5kU29tZUFsaWFzSXNOb3ROZXcoa2V5LCBhbGlhc2VzKSB7XG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFsaWFzZXMsIGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdBbGlhc2VzID0geWFyZ3MucGFyc2VkLm5ld0FsaWFzZXM7XG4gICAgICAgIGZvciAoY29uc3QgYSBvZiBba2V5LCAuLi5hbGlhc2VzW2tleV1dKSB7XG4gICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuZXdBbGlhc2VzLCBhKSB8fFxuICAgICAgICAgICAgICAgICFuZXdBbGlhc2VzW2tleV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBzZWxmLmxpbWl0ZWRDaG9pY2VzID0gZnVuY3Rpb24gbGltaXRlZENob2ljZXMoYXJndikge1xuICAgICAgICBjb25zdCBvcHRpb25zID0geWFyZ3MuZ2V0T3B0aW9ucygpO1xuICAgICAgICBjb25zdCBpbnZhbGlkID0ge307XG4gICAgICAgIGlmICghT2JqZWN0LmtleXMob3B0aW9ucy5jaG9pY2VzKS5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChzcGVjaWFsS2V5cy5pbmRleE9mKGtleSkgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMuY2hvaWNlcywga2V5KSkge1xuICAgICAgICAgICAgICAgIFtdLmNvbmNhdChhcmd2W2tleV0pLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5jaG9pY2VzW2tleV0uaW5kZXhPZih2YWx1ZSkgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkW2tleV0gPSAoaW52YWxpZFtrZXldIHx8IFtdKS5jb25jYXQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBpbnZhbGlkS2V5cyA9IE9iamVjdC5rZXlzKGludmFsaWQpO1xuICAgICAgICBpZiAoIWludmFsaWRLZXlzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IG1zZyA9IF9fKCdJbnZhbGlkIHZhbHVlczonKTtcbiAgICAgICAgaW52YWxpZEtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgbXNnICs9IGBcXG4gICR7X18oJ0FyZ3VtZW50OiAlcywgR2l2ZW46ICVzLCBDaG9pY2VzOiAlcycsIGtleSwgdXNhZ2Uuc3RyaW5naWZpZWRWYWx1ZXMoaW52YWxpZFtrZXldKSwgdXNhZ2Uuc3RyaW5naWZpZWRWYWx1ZXMob3B0aW9ucy5jaG9pY2VzW2tleV0pKX1gO1xuICAgICAgICB9KTtcbiAgICAgICAgdXNhZ2UuZmFpbChtc2cpO1xuICAgIH07XG4gICAgbGV0IGNoZWNrcyA9IFtdO1xuICAgIHNlbGYuY2hlY2sgPSBmdW5jdGlvbiBjaGVjayhmLCBnbG9iYWwpIHtcbiAgICAgICAgY2hlY2tzLnB1c2goe1xuICAgICAgICAgICAgZnVuYzogZixcbiAgICAgICAgICAgIGdsb2JhbCxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBzZWxmLmN1c3RvbUNoZWNrcyA9IGZ1bmN0aW9uIGN1c3RvbUNoZWNrcyhhcmd2LCBhbGlhc2VzKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBmOyAoZiA9IGNoZWNrc1tpXSkgIT09IHVuZGVmaW5lZDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBmdW5jID0gZi5mdW5jO1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMoYXJndiwgYWxpYXNlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChlcnIubWVzc2FnZSA/IGVyci5tZXNzYWdlIDogZXJyLCBlcnIpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKF9fKCdBcmd1bWVudCBjaGVjayBmYWlsZWQ6ICVzJywgZnVuYy50b1N0cmluZygpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJyB8fCByZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwocmVzdWx0LnRvU3RyaW5nKCksIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGxldCBpbXBsaWVkID0ge307XG4gICAgc2VsZi5pbXBsaWVzID0gZnVuY3Rpb24gaW1wbGllcyhrZXksIHZhbHVlKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8b2JqZWN0PiBbYXJyYXl8bnVtYmVyfHN0cmluZ10nLCBba2V5LCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGtleSkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICBzZWxmLmltcGxpZXMoaywga2V5W2tdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgeWFyZ3MuZ2xvYmFsKGtleSk7XG4gICAgICAgICAgICBpZiAoIWltcGxpZWRba2V5XSkge1xuICAgICAgICAgICAgICAgIGltcGxpZWRba2V5XSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaChpID0+IHNlbGYuaW1wbGllcyhrZXksIGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKHZhbHVlLCB1bmRlZmluZWQsIHNoaW0pO1xuICAgICAgICAgICAgICAgIGltcGxpZWRba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5nZXRJbXBsaWVkID0gZnVuY3Rpb24gZ2V0SW1wbGllZCgpIHtcbiAgICAgICAgcmV0dXJuIGltcGxpZWQ7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBrZXlFeGlzdHMoYXJndiwgdmFsKSB7XG4gICAgICAgIGNvbnN0IG51bSA9IE51bWJlcih2YWwpO1xuICAgICAgICB2YWwgPSBpc05hTihudW0pID8gdmFsIDogbnVtO1xuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHZhbCA9IGFyZ3YuXy5sZW5ndGggPj0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbC5tYXRjaCgvXi0tbm8tLisvKSkge1xuICAgICAgICAgICAgdmFsID0gdmFsLm1hdGNoKC9eLS1uby0oLispLylbMV07XG4gICAgICAgICAgICB2YWwgPSAhYXJndlt2YWxdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFsID0gYXJndlt2YWxdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHNlbGYuaW1wbGljYXRpb25zID0gZnVuY3Rpb24gaW1wbGljYXRpb25zKGFyZ3YpIHtcbiAgICAgICAgY29uc3QgaW1wbHlGYWlsID0gW107XG4gICAgICAgIE9iamVjdC5rZXlzKGltcGxpZWQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdLZXkgPSBrZXk7XG4gICAgICAgICAgICAoaW1wbGllZFtrZXldIHx8IFtdKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBsZXQga2V5ID0gb3JpZ0tleTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBrZXkgPSBrZXlFeGlzdHMoYXJndiwga2V5KTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGtleUV4aXN0cyhhcmd2LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGtleSAmJiAhdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaW1wbHlGYWlsLnB1c2goYCAke29yaWdLZXl9IC0+ICR7b3JpZ1ZhbHVlfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGltcGx5RmFpbC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCBtc2cgPSBgJHtfXygnSW1wbGljYXRpb25zIGZhaWxlZDonKX1cXG5gO1xuICAgICAgICAgICAgaW1wbHlGYWlsLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIG1zZyArPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdXNhZ2UuZmFpbChtc2cpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBsZXQgY29uZmxpY3RpbmcgPSB7fTtcbiAgICBzZWxmLmNvbmZsaWN0cyA9IGZ1bmN0aW9uIGNvbmZsaWN0cyhrZXksIHZhbHVlKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8b2JqZWN0PiBbYXJyYXl8c3RyaW5nXScsIFtrZXksIHZhbHVlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoa2V5KS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmxpY3RzKGssIGtleVtrXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHlhcmdzLmdsb2JhbChrZXkpO1xuICAgICAgICAgICAgaWYgKCFjb25mbGljdGluZ1trZXldKSB7XG4gICAgICAgICAgICAgICAgY29uZmxpY3Rpbmdba2V5XSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaChpID0+IHNlbGYuY29uZmxpY3RzKGtleSwgaSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uZmxpY3Rpbmdba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5nZXRDb25mbGljdGluZyA9ICgpID0+IGNvbmZsaWN0aW5nO1xuICAgIHNlbGYuY29uZmxpY3RpbmcgPSBmdW5jdGlvbiBjb25mbGljdGluZ0ZuKGFyZ3YpIHtcbiAgICAgICAgT2JqZWN0LmtleXMoYXJndikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbmZsaWN0aW5nW2tleV0pIHtcbiAgICAgICAgICAgICAgICBjb25mbGljdGluZ1trZXldLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgYXJndltrZXldICE9PSB1bmRlZmluZWQgJiYgYXJndlt2YWx1ZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChfXygnQXJndW1lbnRzICVzIGFuZCAlcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlJywga2V5LCB2YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgc2VsZi5yZWNvbW1lbmRDb21tYW5kcyA9IGZ1bmN0aW9uIHJlY29tbWVuZENvbW1hbmRzKGNtZCwgcG90ZW50aWFsQ29tbWFuZHMpIHtcbiAgICAgICAgY29uc3QgdGhyZXNob2xkID0gMztcbiAgICAgICAgcG90ZW50aWFsQ29tbWFuZHMgPSBwb3RlbnRpYWxDb21tYW5kcy5zb3J0KChhLCBiKSA9PiBiLmxlbmd0aCAtIGEubGVuZ3RoKTtcbiAgICAgICAgbGV0IHJlY29tbWVuZGVkID0gbnVsbDtcbiAgICAgICAgbGV0IGJlc3REaXN0YW5jZSA9IEluZmluaXR5O1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgY2FuZGlkYXRlOyAoY2FuZGlkYXRlID0gcG90ZW50aWFsQ29tbWFuZHNbaV0pICE9PSB1bmRlZmluZWQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZCA9IGxldmVuc2h0ZWluKGNtZCwgY2FuZGlkYXRlKTtcbiAgICAgICAgICAgIGlmIChkIDw9IHRocmVzaG9sZCAmJiBkIDwgYmVzdERpc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgYmVzdERpc3RhbmNlID0gZDtcbiAgICAgICAgICAgICAgICByZWNvbW1lbmRlZCA9IGNhbmRpZGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocmVjb21tZW5kZWQpXG4gICAgICAgICAgICB1c2FnZS5mYWlsKF9fKCdEaWQgeW91IG1lYW4gJXM/JywgcmVjb21tZW5kZWQpKTtcbiAgICB9O1xuICAgIHNlbGYucmVzZXQgPSBmdW5jdGlvbiByZXNldChsb2NhbExvb2t1cCkge1xuICAgICAgICBpbXBsaWVkID0gb2JqRmlsdGVyKGltcGxpZWQsIGsgPT4gIWxvY2FsTG9va3VwW2tdKTtcbiAgICAgICAgY29uZmxpY3RpbmcgPSBvYmpGaWx0ZXIoY29uZmxpY3RpbmcsIGsgPT4gIWxvY2FsTG9va3VwW2tdKTtcbiAgICAgICAgY2hlY2tzID0gY2hlY2tzLmZpbHRlcihjID0+IGMuZ2xvYmFsKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBjb25zdCBmcm96ZW5zID0gW107XG4gICAgc2VsZi5mcmVlemUgPSBmdW5jdGlvbiBmcmVlemUoKSB7XG4gICAgICAgIGZyb3plbnMucHVzaCh7XG4gICAgICAgICAgICBpbXBsaWVkLFxuICAgICAgICAgICAgY2hlY2tzLFxuICAgICAgICAgICAgY29uZmxpY3RpbmcsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgc2VsZi51bmZyZWV6ZSA9IGZ1bmN0aW9uIHVuZnJlZXplKCkge1xuICAgICAgICBjb25zdCBmcm96ZW4gPSBmcm96ZW5zLnBvcCgpO1xuICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChmcm96ZW4sIHVuZGVmaW5lZCwgc2hpbSk7XG4gICAgICAgICh7IGltcGxpZWQsIGNoZWNrcywgY29uZmxpY3RpbmcgfSA9IGZyb3plbik7XG4gICAgfTtcbiAgICByZXR1cm4gc2VsZjtcbn1cblxubGV0IHNoaW0kMTtcbmZ1bmN0aW9uIFlhcmdzV2l0aFNoaW0oX3NoaW0pIHtcbiAgICBzaGltJDEgPSBfc2hpbTtcbiAgICByZXR1cm4gWWFyZ3M7XG59XG5mdW5jdGlvbiBZYXJncyhwcm9jZXNzQXJncyA9IFtdLCBjd2QgPSBzaGltJDEucHJvY2Vzcy5jd2QoKSwgcGFyZW50UmVxdWlyZSkge1xuICAgIGNvbnN0IHNlbGYgPSB7fTtcbiAgICBsZXQgY29tbWFuZCQxO1xuICAgIGxldCBjb21wbGV0aW9uJDEgPSBudWxsO1xuICAgIGxldCBncm91cHMgPSB7fTtcbiAgICBjb25zdCBnbG9iYWxNaWRkbGV3YXJlID0gW107XG4gICAgbGV0IG91dHB1dCA9ICcnO1xuICAgIGNvbnN0IHByZXNlcnZlZEdyb3VwcyA9IHt9O1xuICAgIGxldCB1c2FnZSQxO1xuICAgIGxldCB2YWxpZGF0aW9uJDE7XG4gICAgbGV0IGhhbmRsZXJGaW5pc2hDb21tYW5kID0gbnVsbDtcbiAgICBjb25zdCB5MThuID0gc2hpbSQxLnkxOG47XG4gICAgc2VsZi5taWRkbGV3YXJlID0gZ2xvYmFsTWlkZGxld2FyZUZhY3RvcnkoZ2xvYmFsTWlkZGxld2FyZSwgc2VsZik7XG4gICAgc2VsZi5zY3JpcHROYW1lID0gZnVuY3Rpb24gKHNjcmlwdE5hbWUpIHtcbiAgICAgICAgc2VsZi5jdXN0b21TY3JpcHROYW1lID0gdHJ1ZTtcbiAgICAgICAgc2VsZi4kMCA9IHNjcmlwdE5hbWU7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgbGV0IGRlZmF1bHQkMDtcbiAgICBpZiAoL1xcYihub2RlfGlvanN8ZWxlY3Ryb24pKFxcLmV4ZSk/JC8udGVzdChzaGltJDEucHJvY2Vzcy5hcmd2KClbMF0pKSB7XG4gICAgICAgIGRlZmF1bHQkMCA9IHNoaW0kMS5wcm9jZXNzLmFyZ3YoKS5zbGljZSgxLCAyKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGRlZmF1bHQkMCA9IHNoaW0kMS5wcm9jZXNzLmFyZ3YoKS5zbGljZSgwLCAxKTtcbiAgICB9XG4gICAgc2VsZi4kMCA9IGRlZmF1bHQkMFxuICAgICAgICAubWFwKHggPT4ge1xuICAgICAgICBjb25zdCBiID0gcmViYXNlKGN3ZCwgeCk7XG4gICAgICAgIHJldHVybiB4Lm1hdGNoKC9eKFxcL3woW2EtekEtWl06KT9cXFxcKS8pICYmIGIubGVuZ3RoIDwgeC5sZW5ndGggPyBiIDogeDtcbiAgICB9KVxuICAgICAgICAuam9pbignICcpXG4gICAgICAgIC50cmltKCk7XG4gICAgaWYgKHNoaW0kMS5nZXRFbnYoJ18nKSAmJiBzaGltJDEuZ2V0UHJvY2Vzc0FyZ3ZCaW4oKSA9PT0gc2hpbSQxLmdldEVudignXycpKSB7XG4gICAgICAgIHNlbGYuJDAgPSBzaGltJDFcbiAgICAgICAgICAgIC5nZXRFbnYoJ18nKVxuICAgICAgICAgICAgLnJlcGxhY2UoYCR7c2hpbSQxLnBhdGguZGlybmFtZShzaGltJDEucHJvY2Vzcy5leGVjUGF0aCgpKX0vYCwgJycpO1xuICAgIH1cbiAgICBjb25zdCBjb250ZXh0ID0geyByZXNldHM6IC0xLCBjb21tYW5kczogW10sIGZ1bGxDb21tYW5kczogW10sIGZpbGVzOiBbXSB9O1xuICAgIHNlbGYuZ2V0Q29udGV4dCA9ICgpID0+IGNvbnRleHQ7XG4gICAgbGV0IGhhc091dHB1dCA9IGZhbHNlO1xuICAgIGxldCBleGl0RXJyb3IgPSBudWxsO1xuICAgIHNlbGYuZXhpdCA9IChjb2RlLCBlcnIpID0+IHtcbiAgICAgICAgaGFzT3V0cHV0ID0gdHJ1ZTtcbiAgICAgICAgZXhpdEVycm9yID0gZXJyO1xuICAgICAgICBpZiAoZXhpdFByb2Nlc3MpXG4gICAgICAgICAgICBzaGltJDEucHJvY2Vzcy5leGl0KGNvZGUpO1xuICAgIH07XG4gICAgbGV0IGNvbXBsZXRpb25Db21tYW5kID0gbnVsbDtcbiAgICBzZWxmLmNvbXBsZXRpb24gPSBmdW5jdGlvbiAoY21kLCBkZXNjLCBmbikge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nXSBbc3RyaW5nfGJvb2xlYW58ZnVuY3Rpb25dIFtmdW5jdGlvbl0nLCBbY21kLCBkZXNjLCBmbl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGRlc2MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGZuID0gZGVzYztcbiAgICAgICAgICAgIGRlc2MgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29tcGxldGlvbkNvbW1hbmQgPSBjbWQgfHwgY29tcGxldGlvbkNvbW1hbmQgfHwgJ2NvbXBsZXRpb24nO1xuICAgICAgICBpZiAoIWRlc2MgJiYgZGVzYyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGRlc2MgPSAnZ2VuZXJhdGUgY29tcGxldGlvbiBzY3JpcHQnO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYuY29tbWFuZChjb21wbGV0aW9uQ29tbWFuZCwgZGVzYyk7XG4gICAgICAgIGlmIChmbilcbiAgICAgICAgICAgIGNvbXBsZXRpb24kMS5yZWdpc3RlckZ1bmN0aW9uKGZuKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBsZXQgb3B0aW9ucztcbiAgICBzZWxmLnJlc2V0T3B0aW9ucyA9IHNlbGYucmVzZXQgPSBmdW5jdGlvbiByZXNldE9wdGlvbnMoYWxpYXNlcyA9IHt9KSB7XG4gICAgICAgIGNvbnRleHQucmVzZXRzKys7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBjb25zdCB0bXBPcHRpb25zID0ge307XG4gICAgICAgIHRtcE9wdGlvbnMubG9jYWwgPSBvcHRpb25zLmxvY2FsID8gb3B0aW9ucy5sb2NhbCA6IFtdO1xuICAgICAgICB0bXBPcHRpb25zLmNvbmZpZ09iamVjdHMgPSBvcHRpb25zLmNvbmZpZ09iamVjdHNcbiAgICAgICAgICAgID8gb3B0aW9ucy5jb25maWdPYmplY3RzXG4gICAgICAgICAgICA6IFtdO1xuICAgICAgICBjb25zdCBsb2NhbExvb2t1cCA9IHt9O1xuICAgICAgICB0bXBPcHRpb25zLmxvY2FsLmZvckVhY2gobCA9PiB7XG4gICAgICAgICAgICBsb2NhbExvb2t1cFtsXSA9IHRydWU7XG4gICAgICAgICAgICAoYWxpYXNlc1tsXSB8fCBbXSkuZm9yRWFjaChhID0+IHtcbiAgICAgICAgICAgICAgICBsb2NhbExvb2t1cFthXSA9IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24ocHJlc2VydmVkR3JvdXBzLCBPYmplY3Qua2V5cyhncm91cHMpLnJlZHVjZSgoYWNjLCBncm91cE5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBncm91cHNbZ3JvdXBOYW1lXS5maWx0ZXIoa2V5ID0+ICEoa2V5IGluIGxvY2FsTG9va3VwKSk7XG4gICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYWNjW2dyb3VwTmFtZV0gPSBrZXlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pKTtcbiAgICAgICAgZ3JvdXBzID0ge307XG4gICAgICAgIGNvbnN0IGFycmF5T3B0aW9ucyA9IFtcbiAgICAgICAgICAgICdhcnJheScsXG4gICAgICAgICAgICAnYm9vbGVhbicsXG4gICAgICAgICAgICAnc3RyaW5nJyxcbiAgICAgICAgICAgICdza2lwVmFsaWRhdGlvbicsXG4gICAgICAgICAgICAnY291bnQnLFxuICAgICAgICAgICAgJ25vcm1hbGl6ZScsXG4gICAgICAgICAgICAnbnVtYmVyJyxcbiAgICAgICAgICAgICdoaWRkZW5PcHRpb25zJyxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3Qgb2JqZWN0T3B0aW9ucyA9IFtcbiAgICAgICAgICAgICduYXJnJyxcbiAgICAgICAgICAgICdrZXknLFxuICAgICAgICAgICAgJ2FsaWFzJyxcbiAgICAgICAgICAgICdkZWZhdWx0JyxcbiAgICAgICAgICAgICdkZWZhdWx0RGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgJ2NvbmZpZycsXG4gICAgICAgICAgICAnY2hvaWNlcycsXG4gICAgICAgICAgICAnZGVtYW5kZWRPcHRpb25zJyxcbiAgICAgICAgICAgICdkZW1hbmRlZENvbW1hbmRzJyxcbiAgICAgICAgICAgICdjb2VyY2UnLFxuICAgICAgICAgICAgJ2RlcHJlY2F0ZWRPcHRpb25zJyxcbiAgICAgICAgXTtcbiAgICAgICAgYXJyYXlPcHRpb25zLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICB0bXBPcHRpb25zW2tdID0gKG9wdGlvbnNba10gfHwgW10pLmZpbHRlcigoaykgPT4gIWxvY2FsTG9va3VwW2tdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9iamVjdE9wdGlvbnMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICAgdG1wT3B0aW9uc1trXSA9IG9iakZpbHRlcihvcHRpb25zW2tdLCBrID0+ICFsb2NhbExvb2t1cFtrXSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0bXBPcHRpb25zLmVudlByZWZpeCA9IG9wdGlvbnMuZW52UHJlZml4O1xuICAgICAgICBvcHRpb25zID0gdG1wT3B0aW9ucztcbiAgICAgICAgdXNhZ2UkMSA9IHVzYWdlJDEgPyB1c2FnZSQxLnJlc2V0KGxvY2FsTG9va3VwKSA6IHVzYWdlKHNlbGYsIHkxOG4sIHNoaW0kMSk7XG4gICAgICAgIHZhbGlkYXRpb24kMSA9IHZhbGlkYXRpb24kMVxuICAgICAgICAgICAgPyB2YWxpZGF0aW9uJDEucmVzZXQobG9jYWxMb29rdXApXG4gICAgICAgICAgICA6IHZhbGlkYXRpb24oc2VsZiwgdXNhZ2UkMSwgeTE4biwgc2hpbSQxKTtcbiAgICAgICAgY29tbWFuZCQxID0gY29tbWFuZCQxXG4gICAgICAgICAgICA/IGNvbW1hbmQkMS5yZXNldCgpXG4gICAgICAgICAgICA6IGNvbW1hbmQoc2VsZiwgdXNhZ2UkMSwgdmFsaWRhdGlvbiQxLCBnbG9iYWxNaWRkbGV3YXJlLCBzaGltJDEpO1xuICAgICAgICBpZiAoIWNvbXBsZXRpb24kMSlcbiAgICAgICAgICAgIGNvbXBsZXRpb24kMSA9IGNvbXBsZXRpb24oc2VsZiwgdXNhZ2UkMSwgY29tbWFuZCQxLCBzaGltJDEpO1xuICAgICAgICBjb21wbGV0aW9uQ29tbWFuZCA9IG51bGw7XG4gICAgICAgIG91dHB1dCA9ICcnO1xuICAgICAgICBleGl0RXJyb3IgPSBudWxsO1xuICAgICAgICBoYXNPdXRwdXQgPSBmYWxzZTtcbiAgICAgICAgc2VsZi5wYXJzZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnJlc2V0T3B0aW9ucygpO1xuICAgIGNvbnN0IGZyb3plbnMgPSBbXTtcbiAgICBmdW5jdGlvbiBmcmVlemUoKSB7XG4gICAgICAgIGZyb3plbnMucHVzaCh7XG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgY29uZmlnT2JqZWN0czogb3B0aW9ucy5jb25maWdPYmplY3RzLnNsaWNlKDApLFxuICAgICAgICAgICAgZXhpdFByb2Nlc3MsXG4gICAgICAgICAgICBncm91cHMsXG4gICAgICAgICAgICBzdHJpY3QsXG4gICAgICAgICAgICBzdHJpY3RDb21tYW5kcyxcbiAgICAgICAgICAgIHN0cmljdE9wdGlvbnMsXG4gICAgICAgICAgICBjb21wbGV0aW9uQ29tbWFuZCxcbiAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgIGV4aXRFcnJvcixcbiAgICAgICAgICAgIGhhc091dHB1dCxcbiAgICAgICAgICAgIHBhcnNlZDogc2VsZi5wYXJzZWQsXG4gICAgICAgICAgICBwYXJzZUZuLFxuICAgICAgICAgICAgcGFyc2VDb250ZXh0LFxuICAgICAgICAgICAgaGFuZGxlckZpbmlzaENvbW1hbmQsXG4gICAgICAgIH0pO1xuICAgICAgICB1c2FnZSQxLmZyZWV6ZSgpO1xuICAgICAgICB2YWxpZGF0aW9uJDEuZnJlZXplKCk7XG4gICAgICAgIGNvbW1hbmQkMS5mcmVlemUoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdW5mcmVlemUoKSB7XG4gICAgICAgIGNvbnN0IGZyb3plbiA9IGZyb3plbnMucG9wKCk7XG4gICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKGZyb3plbiwgdW5kZWZpbmVkLCBzaGltJDEpO1xuICAgICAgICBsZXQgY29uZmlnT2JqZWN0cztcbiAgICAgICAgKHtcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBjb25maWdPYmplY3RzLFxuICAgICAgICAgICAgZXhpdFByb2Nlc3MsXG4gICAgICAgICAgICBncm91cHMsXG4gICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICBleGl0RXJyb3IsXG4gICAgICAgICAgICBoYXNPdXRwdXQsXG4gICAgICAgICAgICBwYXJzZWQ6IHNlbGYucGFyc2VkLFxuICAgICAgICAgICAgc3RyaWN0LFxuICAgICAgICAgICAgc3RyaWN0Q29tbWFuZHMsXG4gICAgICAgICAgICBzdHJpY3RPcHRpb25zLFxuICAgICAgICAgICAgY29tcGxldGlvbkNvbW1hbmQsXG4gICAgICAgICAgICBwYXJzZUZuLFxuICAgICAgICAgICAgcGFyc2VDb250ZXh0LFxuICAgICAgICAgICAgaGFuZGxlckZpbmlzaENvbW1hbmQsXG4gICAgICAgIH0gPSBmcm96ZW4pO1xuICAgICAgICBvcHRpb25zLmNvbmZpZ09iamVjdHMgPSBjb25maWdPYmplY3RzO1xuICAgICAgICB1c2FnZSQxLnVuZnJlZXplKCk7XG4gICAgICAgIHZhbGlkYXRpb24kMS51bmZyZWV6ZSgpO1xuICAgICAgICBjb21tYW5kJDEudW5mcmVlemUoKTtcbiAgICB9XG4gICAgc2VsZi5ib29sZWFuID0gZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheSgnYm9vbGVhbicsIGtleXMpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuYXJyYXkgPSBmdW5jdGlvbiAoa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nPicsIFtrZXlzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludEFycmF5KCdhcnJheScsIGtleXMpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYubnVtYmVyID0gZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheSgnbnVtYmVyJywga2V5cyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5ub3JtYWxpemUgPSBmdW5jdGlvbiAoa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nPicsIFtrZXlzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludEFycmF5KCdub3JtYWxpemUnLCBrZXlzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmNvdW50ID0gZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheSgnY291bnQnLCBrZXlzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnN0cmluZyA9IGZ1bmN0aW9uIChrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXkoJ3N0cmluZycsIGtleXMpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYucmVxdWlyZXNBcmcgPSBmdW5jdGlvbiAoa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nfG9iamVjdD4gW251bWJlcl0nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleXMgPT09ICdzdHJpbmcnICYmIG9wdGlvbnMubmFyZ1trZXlzXSkge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnkoc2VsZi5yZXF1aXJlc0FyZywgJ25hcmcnLCBrZXlzLCBOYU4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5za2lwVmFsaWRhdGlvbiA9IGZ1bmN0aW9uIChrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXkoJ3NraXBWYWxpZGF0aW9uJywga2V5cyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgZnVuY3Rpb24gcG9wdWxhdGVQYXJzZXJIaW50QXJyYXkodHlwZSwga2V5cykge1xuICAgICAgICBrZXlzID0gW10uY29uY2F0KGtleXMpO1xuICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGtleSA9IHNhbml0aXplS2V5KGtleSk7XG4gICAgICAgICAgICBvcHRpb25zW3R5cGVdLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNlbGYubmFyZ3MgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG9iamVjdHxhcnJheT4gW251bWJlcl0nLCBba2V5LCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnkoc2VsZi5uYXJncywgJ25hcmcnLCBrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmNob2ljZXMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8b2JqZWN0fHN0cmluZ3xhcnJheT4gW3N0cmluZ3xhcnJheV0nLCBba2V5LCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheURpY3Rpb25hcnkoc2VsZi5jaG9pY2VzLCAnY2hvaWNlcycsIGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuYWxpYXMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8b2JqZWN0fHN0cmluZ3xhcnJheT4gW3N0cmluZ3xhcnJheV0nLCBba2V5LCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheURpY3Rpb25hcnkoc2VsZi5hbGlhcywgJ2FsaWFzJywga2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5kZWZhdWx0ID0gc2VsZi5kZWZhdWx0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlLCBkZWZhdWx0RGVzY3JpcHRpb24pIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFsqXSBbc3RyaW5nXScsIFtrZXksIHZhbHVlLCBkZWZhdWx0RGVzY3JpcHRpb25dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKGRlZmF1bHREZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgYXNzZXJ0U2luZ2xlS2V5KGtleSwgc2hpbSQxKTtcbiAgICAgICAgICAgIG9wdGlvbnMuZGVmYXVsdERlc2NyaXB0aW9uW2tleV0gPSBkZWZhdWx0RGVzY3JpcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgYXNzZXJ0U2luZ2xlS2V5KGtleSwgc2hpbSQxKTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5kZWZhdWx0RGVzY3JpcHRpb25ba2V5XSlcbiAgICAgICAgICAgICAgICBvcHRpb25zLmRlZmF1bHREZXNjcmlwdGlvbltrZXldID0gdXNhZ2UkMS5mdW5jdGlvbkRlc2NyaXB0aW9uKHZhbHVlKTtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuY2FsbCgpO1xuICAgICAgICB9XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludFNpbmdsZVZhbHVlRGljdGlvbmFyeShzZWxmLmRlZmF1bHQsICdkZWZhdWx0Jywga2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5kZXNjcmliZSA9IGZ1bmN0aW9uIChrZXksIGRlc2MpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtzdHJpbmddJywgW2tleSwgZGVzY10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBzZXRLZXkoa2V5LCB0cnVlKTtcbiAgICAgICAgdXNhZ2UkMS5kZXNjcmliZShrZXksIGRlc2MpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHNldEtleShrZXksIHNldCkge1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnkoc2V0S2V5LCAna2V5Jywga2V5LCBzZXQpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVtYW5kT3B0aW9uKGtleXMsIG1zZykge1xuICAgICAgICBhcmdzZXJ0KCc8b2JqZWN0fHN0cmluZ3xhcnJheT4gW3N0cmluZ10nLCBba2V5cywgbXNnXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludFNpbmdsZVZhbHVlRGljdGlvbmFyeShzZWxmLmRlbWFuZE9wdGlvbiwgJ2RlbWFuZGVkT3B0aW9ucycsIGtleXMsIG1zZyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH1cbiAgICBzZWxmLmRlbWFuZE9wdGlvbiA9IGRlbWFuZE9wdGlvbjtcbiAgICBzZWxmLmNvZXJjZSA9IGZ1bmN0aW9uIChrZXlzLCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8b2JqZWN0fHN0cmluZ3xhcnJheT4gW2Z1bmN0aW9uXScsIFtrZXlzLCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnkoc2VsZi5jb2VyY2UsICdjb2VyY2UnLCBrZXlzLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgZnVuY3Rpb24gcG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5KGJ1aWxkZXIsIHR5cGUsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50RGljdGlvbmFyeShidWlsZGVyLCB0eXBlLCBrZXksIHZhbHVlLCAodHlwZSwga2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgb3B0aW9uc1t0eXBlXVtrZXldID0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheURpY3Rpb25hcnkoYnVpbGRlciwgdHlwZSwga2V5LCB2YWx1ZSkge1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnREaWN0aW9uYXJ5KGJ1aWxkZXIsIHR5cGUsIGtleSwgdmFsdWUsICh0eXBlLCBrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBvcHRpb25zW3R5cGVdW2tleV0gPSAob3B0aW9uc1t0eXBlXVtrZXldIHx8IFtdKS5jb25jYXQodmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wdWxhdGVQYXJzZXJIaW50RGljdGlvbmFyeShidWlsZGVyLCB0eXBlLCBrZXksIHZhbHVlLCBzaW5nbGVLZXlIYW5kbGVyKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleSkpIHtcbiAgICAgICAgICAgIGtleS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIGJ1aWxkZXIoaywgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKChrZXkpID0+IHR5cGVvZiBrZXkgPT09ICdvYmplY3QnKShrZXkpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2Ygb2JqZWN0S2V5cyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgYnVpbGRlcihrLCBrZXlba10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2luZ2xlS2V5SGFuZGxlcih0eXBlLCBzYW5pdGl6ZUtleShrZXkpLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2FuaXRpemVLZXkoa2V5KSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdfX3Byb3RvX18nKVxuICAgICAgICAgICAgcmV0dXJuICdfX19wcm90b19fXyc7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlbGV0ZUZyb21QYXJzZXJIaW50T2JqZWN0KG9wdGlvbktleSkge1xuICAgICAgICBvYmplY3RLZXlzKG9wdGlvbnMpLmZvckVhY2goKGhpbnRLZXkpID0+IHtcbiAgICAgICAgICAgIGlmICgoKGtleSkgPT4ga2V5ID09PSAnY29uZmlnT2JqZWN0cycpKGhpbnRLZXkpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGhpbnQgPSBvcHRpb25zW2hpbnRLZXldO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaGludCkpIHtcbiAgICAgICAgICAgICAgICBpZiAofmhpbnQuaW5kZXhPZihvcHRpb25LZXkpKVxuICAgICAgICAgICAgICAgICAgICBoaW50LnNwbGljZShoaW50LmluZGV4T2Yob3B0aW9uS2V5KSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgaGludCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgaGludFtvcHRpb25LZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZGVsZXRlIHVzYWdlJDEuZ2V0RGVzY3JpcHRpb25zKClbb3B0aW9uS2V5XTtcbiAgICB9XG4gICAgc2VsZi5jb25maWcgPSBmdW5jdGlvbiBjb25maWcoa2V5ID0gJ2NvbmZpZycsIG1zZywgcGFyc2VGbikge1xuICAgICAgICBhcmdzZXJ0KCdbb2JqZWN0fHN0cmluZ10gW3N0cmluZ3xmdW5jdGlvbl0gW2Z1bmN0aW9uXScsIFtrZXksIG1zZywgcGFyc2VGbl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoa2V5KSkge1xuICAgICAgICAgICAga2V5ID0gYXBwbHlFeHRlbmRzKGtleSwgY3dkLCBzZWxmLmdldFBhcnNlckNvbmZpZ3VyYXRpb24oKVsnZGVlcC1tZXJnZS1jb25maWcnXSB8fCBmYWxzZSwgc2hpbSQxKTtcbiAgICAgICAgICAgIG9wdGlvbnMuY29uZmlnT2JqZWN0cyA9IChvcHRpb25zLmNvbmZpZ09iamVjdHMgfHwgW10pLmNvbmNhdChrZXkpO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBtc2cgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlRm4gPSBtc2c7XG4gICAgICAgICAgICBtc2cgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5kZXNjcmliZShrZXksIG1zZyB8fCB1c2FnZSQxLmRlZmVyWTE4bkxvb2t1cCgnUGF0aCB0byBKU09OIGNvbmZpZyBmaWxlJykpO1xuICAgICAgICAoQXJyYXkuaXNBcnJheShrZXkpID8ga2V5IDogW2tleV0pLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICBvcHRpb25zLmNvbmZpZ1trXSA9IHBhcnNlRm4gfHwgdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5leGFtcGxlID0gZnVuY3Rpb24gKGNtZCwgZGVzY3JpcHRpb24pIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xhcnJheT4gW3N0cmluZ10nLCBbY21kLCBkZXNjcmlwdGlvbl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjbWQpKSB7XG4gICAgICAgICAgICBjbWQuZm9yRWFjaChleGFtcGxlUGFyYW1zID0+IHNlbGYuZXhhbXBsZSguLi5leGFtcGxlUGFyYW1zKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB1c2FnZSQxLmV4YW1wbGUoY21kLCBkZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmNvbW1hbmQgPSBmdW5jdGlvbiAoY21kLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlciwgbWlkZGxld2FyZXMsIGRlcHJlY2F0ZWQpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xhcnJheXxvYmplY3Q+IFtzdHJpbmd8Ym9vbGVhbl0gW2Z1bmN0aW9ufG9iamVjdF0gW2Z1bmN0aW9uXSBbYXJyYXldIFtib29sZWFufHN0cmluZ10nLCBbY21kLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlciwgbWlkZGxld2FyZXMsIGRlcHJlY2F0ZWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgY29tbWFuZCQxLmFkZEhhbmRsZXIoY21kLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlciwgbWlkZGxld2FyZXMsIGRlcHJlY2F0ZWQpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuY29tbWFuZERpciA9IGZ1bmN0aW9uIChkaXIsIG9wdHMpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4gW29iamVjdF0nLCBbZGlyLCBvcHRzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHJlcSA9IHBhcmVudFJlcXVpcmUgfHwgc2hpbSQxLnJlcXVpcmU7XG4gICAgICAgIGNvbW1hbmQkMS5hZGREaXJlY3RvcnkoZGlyLCBzZWxmLmdldENvbnRleHQoKSwgcmVxLCBzaGltJDEuZ2V0Q2FsbGVyRmlsZSgpLCBvcHRzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmRlbWFuZCA9IHNlbGYucmVxdWlyZWQgPSBzZWxmLnJlcXVpcmUgPSBmdW5jdGlvbiBkZW1hbmQoa2V5cywgbWF4LCBtc2cpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWF4KSkge1xuICAgICAgICAgICAgbWF4LmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChtc2csIHRydWUsIHNoaW0kMSk7XG4gICAgICAgICAgICAgICAgZGVtYW5kT3B0aW9uKGtleSwgbXNnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbWF4ID0gSW5maW5pdHk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG1heCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIG1zZyA9IG1heDtcbiAgICAgICAgICAgIG1heCA9IEluZmluaXR5O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Yga2V5cyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKG1zZywgdHJ1ZSwgc2hpbSQxKTtcbiAgICAgICAgICAgIHNlbGYuZGVtYW5kQ29tbWFuZChrZXlzLCBtYXgsIG1zZywgbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGtleXMpKSB7XG4gICAgICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChtc2csIHRydWUsIHNoaW0kMSk7XG4gICAgICAgICAgICAgICAgZGVtYW5kT3B0aW9uKGtleSwgbXNnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZGVtYW5kT3B0aW9uKGtleXMsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtc2cgPT09IHRydWUgfHwgdHlwZW9mIG1zZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBkZW1hbmRPcHRpb24oa2V5cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmRlbWFuZENvbW1hbmQgPSBmdW5jdGlvbiBkZW1hbmRDb21tYW5kKG1pbiA9IDEsIG1heCwgbWluTXNnLCBtYXhNc2cpIHtcbiAgICAgICAgYXJnc2VydCgnW251bWJlcl0gW251bWJlcnxzdHJpbmddIFtzdHJpbmd8bnVsbHx1bmRlZmluZWRdIFtzdHJpbmd8bnVsbHx1bmRlZmluZWRdJywgW21pbiwgbWF4LCBtaW5Nc2csIG1heE1zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIG1heCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIG1pbk1zZyA9IG1heDtcbiAgICAgICAgICAgIG1heCA9IEluZmluaXR5O1xuICAgICAgICB9XG4gICAgICAgIHNlbGYuZ2xvYmFsKCdfJywgZmFsc2UpO1xuICAgICAgICBvcHRpb25zLmRlbWFuZGVkQ29tbWFuZHMuXyA9IHtcbiAgICAgICAgICAgIG1pbixcbiAgICAgICAgICAgIG1heCxcbiAgICAgICAgICAgIG1pbk1zZyxcbiAgICAgICAgICAgIG1heE1zZyxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldERlbWFuZGVkT3B0aW9ucyA9ICgpID0+IHtcbiAgICAgICAgYXJnc2VydChbXSwgMCk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmRlbWFuZGVkT3B0aW9ucztcbiAgICB9O1xuICAgIHNlbGYuZ2V0RGVtYW5kZWRDb21tYW5kcyA9ICgpID0+IHtcbiAgICAgICAgYXJnc2VydChbXSwgMCk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmRlbWFuZGVkQ29tbWFuZHM7XG4gICAgfTtcbiAgICBzZWxmLmRlcHJlY2F0ZU9wdGlvbiA9IGZ1bmN0aW9uIGRlcHJlY2F0ZU9wdGlvbihvcHRpb24sIG1lc3NhZ2UpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4gW3N0cmluZ3xib29sZWFuXScsIFtvcHRpb24sIG1lc3NhZ2VdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgb3B0aW9ucy5kZXByZWNhdGVkT3B0aW9uc1tvcHRpb25dID0gbWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldERlcHJlY2F0ZWRPcHRpb25zID0gKCkgPT4ge1xuICAgICAgICBhcmdzZXJ0KFtdLCAwKTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuZGVwcmVjYXRlZE9wdGlvbnM7XG4gICAgfTtcbiAgICBzZWxmLmltcGxpZXMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG9iamVjdD4gW251bWJlcnxzdHJpbmd8YXJyYXldJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdmFsaWRhdGlvbiQxLmltcGxpZXMoa2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5jb25mbGljdHMgPSBmdW5jdGlvbiAoa2V5MSwga2V5Mikge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG9iamVjdD4gW3N0cmluZ3xhcnJheV0nLCBba2V5MSwga2V5Ml0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB2YWxpZGF0aW9uJDEuY29uZmxpY3RzKGtleTEsIGtleTIpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYudXNhZ2UgPSBmdW5jdGlvbiAobXNnLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlcikge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG51bGx8dW5kZWZpbmVkPiBbc3RyaW5nfGJvb2xlYW5dIFtmdW5jdGlvbnxvYmplY3RdIFtmdW5jdGlvbl0nLCBbbXNnLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlcl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwobXNnLCBudWxsLCBzaGltJDEpO1xuICAgICAgICAgICAgaWYgKChtc2cgfHwgJycpLm1hdGNoKC9eXFwkMCggfCQpLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21tYW5kKG1zZywgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcignLnVzYWdlKCkgZGVzY3JpcHRpb24gbXVzdCBzdGFydCB3aXRoICQwIGlmIGJlaW5nIHVzZWQgYXMgYWxpYXMgZm9yIC5jb21tYW5kKCknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHVzYWdlJDEudXNhZ2UobXNnKTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLmVwaWxvZ3VlID0gc2VsZi5lcGlsb2cgPSBmdW5jdGlvbiAobXNnKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmc+JywgW21zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB1c2FnZSQxLmVwaWxvZyhtc2cpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZmFpbCA9IGZ1bmN0aW9uIChmKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxmdW5jdGlvbj4nLCBbZl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB1c2FnZSQxLmZhaWxGbihmKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLm9uRmluaXNoQ29tbWFuZCA9IGZ1bmN0aW9uIChmKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxmdW5jdGlvbj4nLCBbZl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBoYW5kbGVyRmluaXNoQ29tbWFuZCA9IGY7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRIYW5kbGVyRmluaXNoQ29tbWFuZCA9ICgpID0+IGhhbmRsZXJGaW5pc2hDb21tYW5kO1xuICAgIHNlbGYuY2hlY2sgPSBmdW5jdGlvbiAoZiwgX2dsb2JhbCkge1xuICAgICAgICBhcmdzZXJ0KCc8ZnVuY3Rpb24+IFtib29sZWFuXScsIFtmLCBfZ2xvYmFsXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHZhbGlkYXRpb24kMS5jaGVjayhmLCBfZ2xvYmFsICE9PSBmYWxzZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nbG9iYWwgPSBmdW5jdGlvbiBnbG9iYWwoZ2xvYmFscywgZ2xvYmFsKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8YXJyYXk+IFtib29sZWFuXScsIFtnbG9iYWxzLCBnbG9iYWxdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgZ2xvYmFscyA9IFtdLmNvbmNhdChnbG9iYWxzKTtcbiAgICAgICAgaWYgKGdsb2JhbCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG9wdGlvbnMubG9jYWwgPSBvcHRpb25zLmxvY2FsLmZpbHRlcihsID0+IGdsb2JhbHMuaW5kZXhPZihsKSA9PT0gLTEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2xvYmFscy5mb3JFYWNoKGcgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmxvY2FsLmluZGV4T2YoZykgPT09IC0xKVxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmxvY2FsLnB1c2goZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYucGtnQ29uZiA9IGZ1bmN0aW9uIHBrZ0NvbmYoa2V5LCByb290UGF0aCkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nPiBbc3RyaW5nXScsIFtrZXksIHJvb3RQYXRoXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGxldCBjb25mID0gbnVsbDtcbiAgICAgICAgY29uc3Qgb2JqID0gcGtnVXAocm9vdFBhdGggfHwgY3dkKTtcbiAgICAgICAgaWYgKG9ialtrZXldICYmIHR5cGVvZiBvYmpba2V5XSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGNvbmYgPSBhcHBseUV4dGVuZHMob2JqW2tleV0sIHJvb3RQYXRoIHx8IGN3ZCwgc2VsZi5nZXRQYXJzZXJDb25maWd1cmF0aW9uKClbJ2RlZXAtbWVyZ2UtY29uZmlnJ10gfHwgZmFsc2UsIHNoaW0kMSk7XG4gICAgICAgICAgICBvcHRpb25zLmNvbmZpZ09iamVjdHMgPSAob3B0aW9ucy5jb25maWdPYmplY3RzIHx8IFtdKS5jb25jYXQoY29uZik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBjb25zdCBwa2dzID0ge307XG4gICAgZnVuY3Rpb24gcGtnVXAocm9vdFBhdGgpIHtcbiAgICAgICAgY29uc3QgbnBhdGggPSByb290UGF0aCB8fCAnKic7XG4gICAgICAgIGlmIChwa2dzW25wYXRoXSlcbiAgICAgICAgICAgIHJldHVybiBwa2dzW25wYXRoXTtcbiAgICAgICAgbGV0IG9iaiA9IHt9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHN0YXJ0RGlyID0gcm9vdFBhdGggfHwgc2hpbSQxLm1haW5GaWxlbmFtZTtcbiAgICAgICAgICAgIGlmICghcm9vdFBhdGggJiYgc2hpbSQxLnBhdGguZXh0bmFtZShzdGFydERpcikpIHtcbiAgICAgICAgICAgICAgICBzdGFydERpciA9IHNoaW0kMS5wYXRoLmRpcm5hbWUoc3RhcnREaXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGtnSnNvblBhdGggPSBzaGltJDEuZmluZFVwKHN0YXJ0RGlyLCAoZGlyLCBuYW1lcykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChuYW1lcy5pbmNsdWRlcygncGFja2FnZS5qc29uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdwYWNrYWdlLmpzb24nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKHBrZ0pzb25QYXRoLCB1bmRlZmluZWQsIHNoaW0kMSk7XG4gICAgICAgICAgICBvYmogPSBKU09OLnBhcnNlKHNoaW0kMS5yZWFkRmlsZVN5bmMocGtnSnNvblBhdGgsICd1dGY4JykpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfbm9vcCkgeyB9XG4gICAgICAgIHBrZ3NbbnBhdGhdID0gb2JqIHx8IHt9O1xuICAgICAgICByZXR1cm4gcGtnc1tucGF0aF07XG4gICAgfVxuICAgIGxldCBwYXJzZUZuID0gbnVsbDtcbiAgICBsZXQgcGFyc2VDb250ZXh0ID0gbnVsbDtcbiAgICBzZWxmLnBhcnNlID0gZnVuY3Rpb24gcGFyc2UoYXJncywgc2hvcnRDaXJjdWl0LCBfcGFyc2VGbikge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nfGFycmF5XSBbZnVuY3Rpb258Ym9vbGVhbnxvYmplY3RdIFtmdW5jdGlvbl0nLCBbYXJncywgc2hvcnRDaXJjdWl0LCBfcGFyc2VGbl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBmcmVlemUoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgYXJndiA9IHNlbGYuX3BhcnNlQXJncyhwcm9jZXNzQXJncyk7XG4gICAgICAgICAgICBjb25zdCB0bXBQYXJzZWQgPSBzZWxmLnBhcnNlZDtcbiAgICAgICAgICAgIHVuZnJlZXplKCk7XG4gICAgICAgICAgICBzZWxmLnBhcnNlZCA9IHRtcFBhcnNlZDtcbiAgICAgICAgICAgIHJldHVybiBhcmd2O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygc2hvcnRDaXJjdWl0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcGFyc2VDb250ZXh0ID0gc2hvcnRDaXJjdWl0O1xuICAgICAgICAgICAgc2hvcnRDaXJjdWl0ID0gX3BhcnNlRm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBzaG9ydENpcmN1aXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlRm4gPSBzaG9ydENpcmN1aXQ7XG4gICAgICAgICAgICBzaG9ydENpcmN1aXQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNob3J0Q2lyY3VpdClcbiAgICAgICAgICAgIHByb2Nlc3NBcmdzID0gYXJncztcbiAgICAgICAgaWYgKHBhcnNlRm4pXG4gICAgICAgICAgICBleGl0UHJvY2VzcyA9IGZhbHNlO1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBzZWxmLl9wYXJzZUFyZ3MoYXJncywgISFzaG9ydENpcmN1aXQpO1xuICAgICAgICBjb21wbGV0aW9uJDEuc2V0UGFyc2VkKHNlbGYucGFyc2VkKTtcbiAgICAgICAgaWYgKHBhcnNlRm4pXG4gICAgICAgICAgICBwYXJzZUZuKGV4aXRFcnJvciwgcGFyc2VkLCBvdXRwdXQpO1xuICAgICAgICB1bmZyZWV6ZSgpO1xuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH07XG4gICAgc2VsZi5fZ2V0UGFyc2VDb250ZXh0ID0gKCkgPT4gcGFyc2VDb250ZXh0IHx8IHt9O1xuICAgIHNlbGYuX2hhc1BhcnNlQ2FsbGJhY2sgPSAoKSA9PiAhIXBhcnNlRm47XG4gICAgc2VsZi5vcHRpb24gPSBzZWxmLm9wdGlvbnMgPSBmdW5jdGlvbiBvcHRpb24oa2V5LCBvcHQpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xvYmplY3Q+IFtvYmplY3RdJywgW2tleSwgb3B0XSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoa2V5KS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGYub3B0aW9ucyhrLCBrZXlba10pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBvcHQgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wdGlvbnMua2V5W2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICBzZWxmLmFsaWFzKGtleSwgb3B0LmFsaWFzKTtcbiAgICAgICAgICAgIGNvbnN0IGRlcHJlY2F0ZSA9IG9wdC5kZXByZWNhdGUgfHwgb3B0LmRlcHJlY2F0ZWQ7XG4gICAgICAgICAgICBpZiAoZGVwcmVjYXRlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5kZXByZWNhdGVPcHRpb24oa2V5LCBkZXByZWNhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGVtYW5kID0gb3B0LmRlbWFuZCB8fCBvcHQucmVxdWlyZWQgfHwgb3B0LnJlcXVpcmU7XG4gICAgICAgICAgICBpZiAoZGVtYW5kKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5kZW1hbmQoa2V5LCBkZW1hbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5kZW1hbmRPcHRpb24pIHtcbiAgICAgICAgICAgICAgICBzZWxmLmRlbWFuZE9wdGlvbihrZXksIHR5cGVvZiBvcHQuZGVtYW5kT3B0aW9uID09PSAnc3RyaW5nJyA/IG9wdC5kZW1hbmRPcHRpb24gOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5jb25mbGljdHMpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZsaWN0cyhrZXksIG9wdC5jb25mbGljdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCdkZWZhdWx0JyBpbiBvcHQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmRlZmF1bHQoa2V5LCBvcHQuZGVmYXVsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmltcGxpZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlbGYuaW1wbGllcyhrZXksIG9wdC5pbXBsaWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQubmFyZ3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlbGYubmFyZ3Moa2V5LCBvcHQubmFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5jb25maWcpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZyhrZXksIG9wdC5jb25maWdQYXJzZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5ub3JtYWxpemUpIHtcbiAgICAgICAgICAgICAgICBzZWxmLm5vcm1hbGl6ZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5jaG9pY2VzKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jaG9pY2VzKGtleSwgb3B0LmNob2ljZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5jb2VyY2UpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvZXJjZShrZXksIG9wdC5jb2VyY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5ncm91cCkge1xuICAgICAgICAgICAgICAgIHNlbGYuZ3JvdXAoa2V5LCBvcHQuZ3JvdXApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5ib29sZWFuIHx8IG9wdC50eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmJvb2xlYW4oa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAob3B0LmFsaWFzKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmJvb2xlYW4ob3B0LmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuYXJyYXkgfHwgb3B0LnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmFycmF5KGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5hcnJheShvcHQuYWxpYXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5udW1iZXIgfHwgb3B0LnR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5udW1iZXIoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAob3B0LmFsaWFzKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLm51bWJlcihvcHQuYWxpYXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5zdHJpbmcgfHwgb3B0LnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5zdHJpbmcoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAob3B0LmFsaWFzKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLnN0cmluZyhvcHQuYWxpYXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5jb3VudCB8fCBvcHQudHlwZSA9PT0gJ2NvdW50Jykge1xuICAgICAgICAgICAgICAgIHNlbGYuY291bnQoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0Lmdsb2JhbCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5nbG9iYWwoa2V5LCBvcHQuZ2xvYmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuZGVmYXVsdERlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5kZWZhdWx0RGVzY3JpcHRpb25ba2V5XSA9IG9wdC5kZWZhdWx0RGVzY3JpcHRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LnNraXBWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5za2lwVmFsaWRhdGlvbihrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGVzYyA9IG9wdC5kZXNjcmliZSB8fCBvcHQuZGVzY3JpcHRpb24gfHwgb3B0LmRlc2M7XG4gICAgICAgICAgICBzZWxmLmRlc2NyaWJlKGtleSwgZGVzYyk7XG4gICAgICAgICAgICBpZiAob3B0LmhpZGRlbikge1xuICAgICAgICAgICAgICAgIHNlbGYuaGlkZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5yZXF1aXJlc0FyZykge1xuICAgICAgICAgICAgICAgIHNlbGYucmVxdWlyZXNBcmcoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2V0T3B0aW9ucyA9ICgpID0+IG9wdGlvbnM7XG4gICAgc2VsZi5wb3NpdGlvbmFsID0gZnVuY3Rpb24gKGtleSwgb3B0cykge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nPiA8b2JqZWN0PicsIFtrZXksIG9wdHNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKGNvbnRleHQucmVzZXRzID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgWUVycm9yKFwiLnBvc2l0aW9uYWwoKSBjYW4gb25seSBiZSBjYWxsZWQgaW4gYSBjb21tYW5kJ3MgYnVpbGRlciBmdW5jdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdXBwb3J0ZWRPcHRzID0gW1xuICAgICAgICAgICAgJ2RlZmF1bHQnLFxuICAgICAgICAgICAgJ2RlZmF1bHREZXNjcmlwdGlvbicsXG4gICAgICAgICAgICAnaW1wbGllcycsXG4gICAgICAgICAgICAnbm9ybWFsaXplJyxcbiAgICAgICAgICAgICdjaG9pY2VzJyxcbiAgICAgICAgICAgICdjb25mbGljdHMnLFxuICAgICAgICAgICAgJ2NvZXJjZScsXG4gICAgICAgICAgICAndHlwZScsXG4gICAgICAgICAgICAnZGVzY3JpYmUnLFxuICAgICAgICAgICAgJ2Rlc2MnLFxuICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgICAgICAgICdhbGlhcycsXG4gICAgICAgIF07XG4gICAgICAgIG9wdHMgPSBvYmpGaWx0ZXIob3B0cywgKGssIHYpID0+IHtcbiAgICAgICAgICAgIGxldCBhY2NlcHQgPSBzdXBwb3J0ZWRPcHRzLmluZGV4T2YoaykgIT09IC0xO1xuICAgICAgICAgICAgaWYgKGsgPT09ICd0eXBlJyAmJiBbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbiddLmluZGV4T2YodikgPT09IC0xKVxuICAgICAgICAgICAgICAgIGFjY2VwdCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIGFjY2VwdDtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGZ1bGxDb21tYW5kID0gY29udGV4dC5mdWxsQ29tbWFuZHNbY29udGV4dC5mdWxsQ29tbWFuZHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGNvbnN0IHBhcnNlT3B0aW9ucyA9IGZ1bGxDb21tYW5kXG4gICAgICAgICAgICA/IGNvbW1hbmQkMS5jbWRUb1BhcnNlT3B0aW9ucyhmdWxsQ29tbWFuZClcbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIGFycmF5OiBbXSxcbiAgICAgICAgICAgICAgICBhbGlhczoge30sXG4gICAgICAgICAgICAgICAgZGVmYXVsdDoge30sXG4gICAgICAgICAgICAgICAgZGVtYW5kOiB7fSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIG9iamVjdEtleXMocGFyc2VPcHRpb25zKS5mb3JFYWNoKHBrID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlT3B0aW9uID0gcGFyc2VPcHRpb25zW3BrXTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcnNlT3B0aW9uKSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZU9wdGlvbi5pbmRleE9mKGtleSkgIT09IC0xKVxuICAgICAgICAgICAgICAgICAgICBvcHRzW3BrXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VPcHRpb25ba2V5XSAmJiAhKHBrIGluIG9wdHMpKVxuICAgICAgICAgICAgICAgICAgICBvcHRzW3BrXSA9IHBhcnNlT3B0aW9uW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzZWxmLmdyb3VwKGtleSwgdXNhZ2UkMS5nZXRQb3NpdGlvbmFsR3JvdXBOYW1lKCkpO1xuICAgICAgICByZXR1cm4gc2VsZi5vcHRpb24oa2V5LCBvcHRzKTtcbiAgICB9O1xuICAgIHNlbGYuZ3JvdXAgPSBmdW5jdGlvbiBncm91cChvcHRzLCBncm91cE5hbWUpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xhcnJheT4gPHN0cmluZz4nLCBbb3B0cywgZ3JvdXBOYW1lXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gcHJlc2VydmVkR3JvdXBzW2dyb3VwTmFtZV0gfHwgZ3JvdXBzW2dyb3VwTmFtZV07XG4gICAgICAgIGlmIChwcmVzZXJ2ZWRHcm91cHNbZ3JvdXBOYW1lXSkge1xuICAgICAgICAgICAgZGVsZXRlIHByZXNlcnZlZEdyb3Vwc1tncm91cE5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlZW4gPSB7fTtcbiAgICAgICAgZ3JvdXBzW2dyb3VwTmFtZV0gPSAoZXhpc3RpbmcgfHwgW10pLmNvbmNhdChvcHRzKS5maWx0ZXIoa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChzZWVuW2tleV0pXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIChzZWVuW2tleV0gPSB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRHcm91cHMgPSAoKSA9PiBPYmplY3QuYXNzaWduKHt9LCBncm91cHMsIHByZXNlcnZlZEdyb3Vwcyk7XG4gICAgc2VsZi5lbnYgPSBmdW5jdGlvbiAocHJlZml4KSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tzdHJpbmd8Ym9vbGVhbl0nLCBbcHJlZml4XSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChwcmVmaXggPT09IGZhbHNlKVxuICAgICAgICAgICAgZGVsZXRlIG9wdGlvbnMuZW52UHJlZml4O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBvcHRpb25zLmVudlByZWZpeCA9IHByZWZpeCB8fCAnJztcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLndyYXAgPSBmdW5jdGlvbiAoY29scykge1xuICAgICAgICBhcmdzZXJ0KCc8bnVtYmVyfG51bGx8dW5kZWZpbmVkPicsIFtjb2xzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHVzYWdlJDEud3JhcChjb2xzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBsZXQgc3RyaWN0ID0gZmFsc2U7XG4gICAgc2VsZi5zdHJpY3QgPSBmdW5jdGlvbiAoZW5hYmxlZCkge1xuICAgICAgICBhcmdzZXJ0KCdbYm9vbGVhbl0nLCBbZW5hYmxlZF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBzdHJpY3QgPSBlbmFibGVkICE9PSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldFN0cmljdCA9ICgpID0+IHN0cmljdDtcbiAgICBsZXQgc3RyaWN0Q29tbWFuZHMgPSBmYWxzZTtcbiAgICBzZWxmLnN0cmljdENvbW1hbmRzID0gZnVuY3Rpb24gKGVuYWJsZWQpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW2VuYWJsZWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgc3RyaWN0Q29tbWFuZHMgPSBlbmFibGVkICE9PSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldFN0cmljdENvbW1hbmRzID0gKCkgPT4gc3RyaWN0Q29tbWFuZHM7XG4gICAgbGV0IHN0cmljdE9wdGlvbnMgPSBmYWxzZTtcbiAgICBzZWxmLnN0cmljdE9wdGlvbnMgPSBmdW5jdGlvbiAoZW5hYmxlZCkge1xuICAgICAgICBhcmdzZXJ0KCdbYm9vbGVhbl0nLCBbZW5hYmxlZF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBzdHJpY3RPcHRpb25zID0gZW5hYmxlZCAhPT0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRTdHJpY3RPcHRpb25zID0gKCkgPT4gc3RyaWN0T3B0aW9ucztcbiAgICBsZXQgcGFyc2VyQ29uZmlnID0ge307XG4gICAgc2VsZi5wYXJzZXJDb25maWd1cmF0aW9uID0gZnVuY3Rpb24gcGFyc2VyQ29uZmlndXJhdGlvbihjb25maWcpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdD4nLCBbY29uZmlnXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHBhcnNlckNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldFBhcnNlckNvbmZpZ3VyYXRpb24gPSAoKSA9PiBwYXJzZXJDb25maWc7XG4gICAgc2VsZi5zaG93SGVscCA9IGZ1bmN0aW9uIChsZXZlbCkge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nfGZ1bmN0aW9uXScsIFtsZXZlbF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoIXNlbGYucGFyc2VkKVxuICAgICAgICAgICAgc2VsZi5fcGFyc2VBcmdzKHByb2Nlc3NBcmdzKTtcbiAgICAgICAgaWYgKGNvbW1hbmQkMS5oYXNEZWZhdWx0Q29tbWFuZCgpKSB7XG4gICAgICAgICAgICBjb250ZXh0LnJlc2V0cysrO1xuICAgICAgICAgICAgY29tbWFuZCQxLnJ1bkRlZmF1bHRCdWlsZGVyT24oc2VsZik7XG4gICAgICAgIH1cbiAgICAgICAgdXNhZ2UkMS5zaG93SGVscChsZXZlbCk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgbGV0IHZlcnNpb25PcHQgPSBudWxsO1xuICAgIHNlbGYudmVyc2lvbiA9IGZ1bmN0aW9uIHZlcnNpb24ob3B0LCBtc2csIHZlcikge1xuICAgICAgICBjb25zdCBkZWZhdWx0VmVyc2lvbk9wdCA9ICd2ZXJzaW9uJztcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW58c3RyaW5nXSBbc3RyaW5nXSBbc3RyaW5nXScsIFtvcHQsIG1zZywgdmVyXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmICh2ZXJzaW9uT3B0KSB7XG4gICAgICAgICAgICBkZWxldGVGcm9tUGFyc2VySGludE9iamVjdCh2ZXJzaW9uT3B0KTtcbiAgICAgICAgICAgIHVzYWdlJDEudmVyc2lvbih1bmRlZmluZWQpO1xuICAgICAgICAgICAgdmVyc2lvbk9wdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHZlciA9IGd1ZXNzVmVyc2lvbigpO1xuICAgICAgICAgICAgb3B0ID0gZGVmYXVsdFZlcnNpb25PcHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKG9wdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZlciA9IG9wdDtcbiAgICAgICAgICAgIG9wdCA9IGRlZmF1bHRWZXJzaW9uT3B0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIHZlciA9IG1zZztcbiAgICAgICAgICAgIG1zZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB2ZXJzaW9uT3B0ID0gdHlwZW9mIG9wdCA9PT0gJ3N0cmluZycgPyBvcHQgOiBkZWZhdWx0VmVyc2lvbk9wdDtcbiAgICAgICAgbXNnID0gbXNnIHx8IHVzYWdlJDEuZGVmZXJZMThuTG9va3VwKCdTaG93IHZlcnNpb24gbnVtYmVyJyk7XG4gICAgICAgIHVzYWdlJDEudmVyc2lvbih2ZXIgfHwgdW5kZWZpbmVkKTtcbiAgICAgICAgc2VsZi5ib29sZWFuKHZlcnNpb25PcHQpO1xuICAgICAgICBzZWxmLmRlc2NyaWJlKHZlcnNpb25PcHQsIG1zZyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgZnVuY3Rpb24gZ3Vlc3NWZXJzaW9uKCkge1xuICAgICAgICBjb25zdCBvYmogPSBwa2dVcCgpO1xuICAgICAgICByZXR1cm4gb2JqLnZlcnNpb24gfHwgJ3Vua25vd24nO1xuICAgIH1cbiAgICBsZXQgaGVscE9wdCA9IG51bGw7XG4gICAgc2VsZi5hZGRIZWxwT3B0ID0gc2VsZi5oZWxwID0gZnVuY3Rpb24gYWRkSGVscE9wdChvcHQsIG1zZykge1xuICAgICAgICBjb25zdCBkZWZhdWx0SGVscE9wdCA9ICdoZWxwJztcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xib29sZWFuXSBbc3RyaW5nXScsIFtvcHQsIG1zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoaGVscE9wdCkge1xuICAgICAgICAgICAgZGVsZXRlRnJvbVBhcnNlckhpbnRPYmplY3QoaGVscE9wdCk7XG4gICAgICAgICAgICBoZWxwT3B0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKG9wdCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICAgIH1cbiAgICAgICAgaGVscE9wdCA9IHR5cGVvZiBvcHQgPT09ICdzdHJpbmcnID8gb3B0IDogZGVmYXVsdEhlbHBPcHQ7XG4gICAgICAgIHNlbGYuYm9vbGVhbihoZWxwT3B0KTtcbiAgICAgICAgc2VsZi5kZXNjcmliZShoZWxwT3B0LCBtc2cgfHwgdXNhZ2UkMS5kZWZlclkxOG5Mb29rdXAoJ1Nob3cgaGVscCcpKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBjb25zdCBkZWZhdWx0U2hvd0hpZGRlbk9wdCA9ICdzaG93LWhpZGRlbic7XG4gICAgb3B0aW9ucy5zaG93SGlkZGVuT3B0ID0gZGVmYXVsdFNob3dIaWRkZW5PcHQ7XG4gICAgc2VsZi5hZGRTaG93SGlkZGVuT3B0ID0gc2VsZi5zaG93SGlkZGVuID0gZnVuY3Rpb24gYWRkU2hvd0hpZGRlbk9wdChvcHQsIG1zZykge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nfGJvb2xlYW5dIFtzdHJpbmddJywgW29wdCwgbXNnXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBpZiAob3B0ID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaG93SGlkZGVuT3B0ID0gdHlwZW9mIG9wdCA9PT0gJ3N0cmluZycgPyBvcHQgOiBkZWZhdWx0U2hvd0hpZGRlbk9wdDtcbiAgICAgICAgc2VsZi5ib29sZWFuKHNob3dIaWRkZW5PcHQpO1xuICAgICAgICBzZWxmLmRlc2NyaWJlKHNob3dIaWRkZW5PcHQsIG1zZyB8fCB1c2FnZSQxLmRlZmVyWTE4bkxvb2t1cCgnU2hvdyBoaWRkZW4gb3B0aW9ucycpKTtcbiAgICAgICAgb3B0aW9ucy5zaG93SGlkZGVuT3B0ID0gc2hvd0hpZGRlbk9wdDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmhpZGUgPSBmdW5jdGlvbiBoaWRlKGtleSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nPicsIFtrZXldLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgb3B0aW9ucy5oaWRkZW5PcHRpb25zLnB1c2goa2V5KTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnNob3dIZWxwT25GYWlsID0gZnVuY3Rpb24gc2hvd0hlbHBPbkZhaWwoZW5hYmxlZCwgbWVzc2FnZSkge1xuICAgICAgICBhcmdzZXJ0KCdbYm9vbGVhbnxzdHJpbmddIFtzdHJpbmddJywgW2VuYWJsZWQsIG1lc3NhZ2VdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdXNhZ2UkMS5zaG93SGVscE9uRmFpbChlbmFibGVkLCBtZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBsZXQgZXhpdFByb2Nlc3MgPSB0cnVlO1xuICAgIHNlbGYuZXhpdFByb2Nlc3MgPSBmdW5jdGlvbiAoZW5hYmxlZCA9IHRydWUpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW2VuYWJsZWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgZXhpdFByb2Nlc3MgPSBlbmFibGVkO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2V0RXhpdFByb2Nlc3MgPSAoKSA9PiBleGl0UHJvY2VzcztcbiAgICBzZWxmLnNob3dDb21wbGV0aW9uU2NyaXB0ID0gZnVuY3Rpb24gKCQwLCBjbWQpIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ10gW3N0cmluZ10nLCBbJDAsIGNtZF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICAkMCA9ICQwIHx8IHNlbGYuJDA7XG4gICAgICAgIF9sb2dnZXIubG9nKGNvbXBsZXRpb24kMS5nZW5lcmF0ZUNvbXBsZXRpb25TY3JpcHQoJDAsIGNtZCB8fCBjb21wbGV0aW9uQ29tbWFuZCB8fCAnY29tcGxldGlvbicpKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldENvbXBsZXRpb24gPSBmdW5jdGlvbiAoYXJncywgZG9uZSkge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXk+IDxmdW5jdGlvbj4nLCBbYXJncywgZG9uZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBjb21wbGV0aW9uJDEuZ2V0Q29tcGxldGlvbihhcmdzLCBkb25lKTtcbiAgICB9O1xuICAgIHNlbGYubG9jYWxlID0gZnVuY3Rpb24gKGxvY2FsZSkge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nXScsIFtsb2NhbGVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKCFsb2NhbGUpIHtcbiAgICAgICAgICAgIGd1ZXNzTG9jYWxlKCk7XG4gICAgICAgICAgICByZXR1cm4geTE4bi5nZXRMb2NhbGUoKTtcbiAgICAgICAgfVxuICAgICAgICBkZXRlY3RMb2NhbGUgPSBmYWxzZTtcbiAgICAgICAgeTE4bi5zZXRMb2NhbGUobG9jYWxlKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnVwZGF0ZVN0cmluZ3MgPSBzZWxmLnVwZGF0ZUxvY2FsZSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdD4nLCBbb2JqXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGRldGVjdExvY2FsZSA9IGZhbHNlO1xuICAgICAgICB5MThuLnVwZGF0ZUxvY2FsZShvYmopO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGxldCBkZXRlY3RMb2NhbGUgPSB0cnVlO1xuICAgIHNlbGYuZGV0ZWN0TG9jYWxlID0gZnVuY3Rpb24gKGRldGVjdCkge1xuICAgICAgICBhcmdzZXJ0KCc8Ym9vbGVhbj4nLCBbZGV0ZWN0XSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGRldGVjdExvY2FsZSA9IGRldGVjdDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldERldGVjdExvY2FsZSA9ICgpID0+IGRldGVjdExvY2FsZTtcbiAgICBjb25zdCBfbG9nZ2VyID0ge1xuICAgICAgICBsb2coLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKCFzZWxmLl9oYXNQYXJzZUNhbGxiYWNrKCkpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coLi4uYXJncyk7XG4gICAgICAgICAgICBoYXNPdXRwdXQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKG91dHB1dC5sZW5ndGgpXG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9ICdcXG4nO1xuICAgICAgICAgICAgb3V0cHV0ICs9IGFyZ3Muam9pbignICcpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvciguLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAoIXNlbGYuX2hhc1BhcnNlQ2FsbGJhY2soKSlcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKC4uLmFyZ3MpO1xuICAgICAgICAgICAgaGFzT3V0cHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChvdXRwdXQubGVuZ3RoKVxuICAgICAgICAgICAgICAgIG91dHB1dCArPSAnXFxuJztcbiAgICAgICAgICAgIG91dHB1dCArPSBhcmdzLmpvaW4oJyAnKTtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIHNlbGYuX2dldExvZ2dlckluc3RhbmNlID0gKCkgPT4gX2xvZ2dlcjtcbiAgICBzZWxmLl9oYXNPdXRwdXQgPSAoKSA9PiBoYXNPdXRwdXQ7XG4gICAgc2VsZi5fc2V0SGFzT3V0cHV0ID0gKCkgPT4ge1xuICAgICAgICBoYXNPdXRwdXQgPSB0cnVlO1xuICAgIH07XG4gICAgbGV0IHJlY29tbWVuZENvbW1hbmRzO1xuICAgIHNlbGYucmVjb21tZW5kQ29tbWFuZHMgPSBmdW5jdGlvbiAocmVjb21tZW5kID0gdHJ1ZSkge1xuICAgICAgICBhcmdzZXJ0KCdbYm9vbGVhbl0nLCBbcmVjb21tZW5kXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHJlY29tbWVuZENvbW1hbmRzID0gcmVjb21tZW5kO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2V0VXNhZ2VJbnN0YW5jZSA9ICgpID0+IHVzYWdlJDE7XG4gICAgc2VsZi5nZXRWYWxpZGF0aW9uSW5zdGFuY2UgPSAoKSA9PiB2YWxpZGF0aW9uJDE7XG4gICAgc2VsZi5nZXRDb21tYW5kSW5zdGFuY2UgPSAoKSA9PiBjb21tYW5kJDE7XG4gICAgc2VsZi50ZXJtaW5hbFdpZHRoID0gKCkgPT4ge1xuICAgICAgICBhcmdzZXJ0KFtdLCAwKTtcbiAgICAgICAgcmV0dXJuIHNoaW0kMS5wcm9jZXNzLnN0ZENvbHVtbnM7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgJ2FyZ3YnLCB7XG4gICAgICAgIGdldDogKCkgPT4gc2VsZi5fcGFyc2VBcmdzKHByb2Nlc3NBcmdzKSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBzZWxmLl9wYXJzZUFyZ3MgPSBmdW5jdGlvbiBwYXJzZUFyZ3MoYXJncywgc2hvcnRDaXJjdWl0LCBfY2FsbGVkRnJvbUNvbW1hbmQsIGNvbW1hbmRJbmRleCkge1xuICAgICAgICBsZXQgc2tpcFZhbGlkYXRpb24gPSAhIV9jYWxsZWRGcm9tQ29tbWFuZDtcbiAgICAgICAgYXJncyA9IGFyZ3MgfHwgcHJvY2Vzc0FyZ3M7XG4gICAgICAgIG9wdGlvbnMuX18gPSB5MThuLl9fO1xuICAgICAgICBvcHRpb25zLmNvbmZpZ3VyYXRpb24gPSBzZWxmLmdldFBhcnNlckNvbmZpZ3VyYXRpb24oKTtcbiAgICAgICAgY29uc3QgcG9wdWxhdGVEb3VibGVEYXNoID0gISFvcHRpb25zLmNvbmZpZ3VyYXRpb25bJ3BvcHVsYXRlLS0nXTtcbiAgICAgICAgY29uc3QgY29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25maWd1cmF0aW9uLCB7XG4gICAgICAgICAgICAncG9wdWxhdGUtLSc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBzaGltJDEuUGFyc2VyLmRldGFpbGVkKGFyZ3MsIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IE9iamVjdC5hc3NpZ24oeyAncGFyc2UtcG9zaXRpb25hbC1udW1iZXJzJzogZmFsc2UgfSwgY29uZmlnKSxcbiAgICAgICAgfSkpO1xuICAgICAgICBsZXQgYXJndiA9IHBhcnNlZC5hcmd2O1xuICAgICAgICBpZiAocGFyc2VDb250ZXh0KVxuICAgICAgICAgICAgYXJndiA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3YsIHBhcnNlQ29udGV4dCk7XG4gICAgICAgIGNvbnN0IGFsaWFzZXMgPSBwYXJzZWQuYWxpYXNlcztcbiAgICAgICAgYXJndi4kMCA9IHNlbGYuJDA7XG4gICAgICAgIHNlbGYucGFyc2VkID0gcGFyc2VkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZ3Vlc3NMb2NhbGUoKTtcbiAgICAgICAgICAgIGlmIChzaG9ydENpcmN1aXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9zdFByb2Nlc3MoYXJndiwgcG9wdWxhdGVEb3VibGVEYXNoLCBfY2FsbGVkRnJvbUNvbW1hbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhlbHBPcHQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWxwQ21kcyA9IFtoZWxwT3B0XVxuICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGFsaWFzZXNbaGVscE9wdF0gfHwgW10pXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoayA9PiBrLmxlbmd0aCA+IDEpO1xuICAgICAgICAgICAgICAgIGlmICh+aGVscENtZHMuaW5kZXhPZignJyArIGFyZ3YuX1thcmd2Ll8ubGVuZ3RoIC0gMV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3YuXy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgYXJndltoZWxwT3B0XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaGFuZGxlcktleXMgPSBjb21tYW5kJDEuZ2V0Q29tbWFuZHMoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RDb21wbGV0aW9ucyA9IGNvbXBsZXRpb24kMS5jb21wbGV0aW9uS2V5IGluIGFyZ3Y7XG4gICAgICAgICAgICBjb25zdCBza2lwUmVjb21tZW5kYXRpb24gPSBhcmd2W2hlbHBPcHRdIHx8IHJlcXVlc3RDb21wbGV0aW9ucztcbiAgICAgICAgICAgIGNvbnN0IHNraXBEZWZhdWx0Q29tbWFuZCA9IHNraXBSZWNvbW1lbmRhdGlvbiAmJlxuICAgICAgICAgICAgICAgIChoYW5kbGVyS2V5cy5sZW5ndGggPiAxIHx8IGhhbmRsZXJLZXlzWzBdICE9PSAnJDAnKTtcbiAgICAgICAgICAgIGlmIChhcmd2Ll8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZXJLZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmlyc3RVbmtub3duQ29tbWFuZDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGNvbW1hbmRJbmRleCB8fCAwLCBjbWQ7IGFyZ3YuX1tpXSAhPT0gdW5kZWZpbmVkOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9IFN0cmluZyhhcmd2Ll9baV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH5oYW5kbGVyS2V5cy5pbmRleE9mKGNtZCkgJiYgY21kICE9PSBjb21wbGV0aW9uQ29tbWFuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlubmVyQXJndiA9IGNvbW1hbmQkMS5ydW5Db21tYW5kKGNtZCwgc2VsZiwgcGFyc2VkLCBpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Bvc3RQcm9jZXNzKGlubmVyQXJndiwgcG9wdWxhdGVEb3VibGVEYXNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFmaXJzdFVua25vd25Db21tYW5kICYmIGNtZCAhPT0gY29tcGxldGlvbkNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFVua25vd25Db21tYW5kID0gY21kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21tYW5kJDEuaGFzRGVmYXVsdENvbW1hbmQoKSAmJiAhc2tpcERlZmF1bHRDb21tYW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbm5lckFyZ3YgPSBjb21tYW5kJDEucnVuQ29tbWFuZChudWxsLCBzZWxmLCBwYXJzZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Bvc3RQcm9jZXNzKGlubmVyQXJndiwgcG9wdWxhdGVEb3VibGVEYXNoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocmVjb21tZW5kQ29tbWFuZHMgJiYgZmlyc3RVbmtub3duQ29tbWFuZCAmJiAhc2tpcFJlY29tbWVuZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uJDEucmVjb21tZW5kQ29tbWFuZHMoZmlyc3RVbmtub3duQ29tbWFuZCwgaGFuZGxlcktleXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0aW9uQ29tbWFuZCAmJlxuICAgICAgICAgICAgICAgICAgICB+YXJndi5fLmluZGV4T2YoY29tcGxldGlvbkNvbW1hbmQpICYmXG4gICAgICAgICAgICAgICAgICAgICFyZXF1ZXN0Q29tcGxldGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXRQcm9jZXNzKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmxvY2tpbmcodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2hvd0NvbXBsZXRpb25TY3JpcHQoKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5leGl0KDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbW1hbmQkMS5oYXNEZWZhdWx0Q29tbWFuZCgpICYmICFza2lwRGVmYXVsdENvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbm5lckFyZ3YgPSBjb21tYW5kJDEucnVuQ29tbWFuZChudWxsLCBzZWxmLCBwYXJzZWQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wb3N0UHJvY2Vzcyhpbm5lckFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVxdWVzdENvbXBsZXRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4aXRQcm9jZXNzKVxuICAgICAgICAgICAgICAgICAgICBzZXRCbG9ja2luZyh0cnVlKTtcbiAgICAgICAgICAgICAgICBhcmdzID0gW10uY29uY2F0KGFyZ3MpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXRpb25BcmdzID0gYXJncy5zbGljZShhcmdzLmluZGV4T2YoYC0tJHtjb21wbGV0aW9uJDEuY29tcGxldGlvbktleX1gKSArIDEpO1xuICAgICAgICAgICAgICAgIGNvbXBsZXRpb24kMS5nZXRDb21wbGV0aW9uKGNvbXBsZXRpb25BcmdzLCBjb21wbGV0aW9ucyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIChjb21wbGV0aW9ucyB8fCBbXSkuZm9yRWFjaChjb21wbGV0aW9uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKGNvbXBsZXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5leGl0KDApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wb3N0UHJvY2Vzcyhhcmd2LCAhcG9wdWxhdGVEb3VibGVEYXNoLCBfY2FsbGVkRnJvbUNvbW1hbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFoYXNPdXRwdXQpIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhhcmd2KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IGhlbHBPcHQgJiYgYXJndltrZXldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhpdFByb2Nlc3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmxvY2tpbmcodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwVmFsaWRhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNob3dIZWxwKCdsb2cnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhpdCgwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChrZXkgPT09IHZlcnNpb25PcHQgJiYgYXJndltrZXldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhpdFByb2Nlc3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmxvY2tpbmcodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwVmFsaWRhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2FnZSQxLnNob3dWZXJzaW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV4aXQoMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2tpcFZhbGlkYXRpb24gJiYgb3B0aW9ucy5za2lwVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24gPSBPYmplY3Qua2V5cyhhcmd2KS5zb21lKGtleSA9PiBvcHRpb25zLnNraXBWYWxpZGF0aW9uLmluZGV4T2Yoa2V5KSA+PSAwICYmIGFyZ3Zba2V5XSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXNraXBWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZC5lcnJvcilcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihwYXJzZWQuZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXF1ZXN0Q29tcGxldGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fcnVuVmFsaWRhdGlvbihhcmd2LCBhbGlhc2VzLCB7fSwgcGFyc2VkLmVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFlFcnJvcilcbiAgICAgICAgICAgICAgICB1c2FnZSQxLmZhaWwoZXJyLm1lc3NhZ2UsIGVycik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmLl9wb3N0UHJvY2Vzcyhhcmd2LCBwb3B1bGF0ZURvdWJsZURhc2gsIF9jYWxsZWRGcm9tQ29tbWFuZCk7XG4gICAgfTtcbiAgICBzZWxmLl9wb3N0UHJvY2VzcyA9IGZ1bmN0aW9uIChhcmd2LCBwb3B1bGF0ZURvdWJsZURhc2gsIGNhbGxlZEZyb21Db21tYW5kID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGlzUHJvbWlzZShhcmd2KSlcbiAgICAgICAgICAgIHJldHVybiBhcmd2O1xuICAgICAgICBpZiAoY2FsbGVkRnJvbUNvbW1hbmQpXG4gICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgaWYgKCFwb3B1bGF0ZURvdWJsZURhc2gpIHtcbiAgICAgICAgICAgIGFyZ3YgPSBzZWxmLl9jb3B5RG91YmxlRGFzaChhcmd2KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJzZVBvc2l0aW9uYWxOdW1iZXJzID0gc2VsZi5nZXRQYXJzZXJDb25maWd1cmF0aW9uKClbJ3BhcnNlLXBvc2l0aW9uYWwtbnVtYmVycyddIHx8XG4gICAgICAgICAgICBzZWxmLmdldFBhcnNlckNvbmZpZ3VyYXRpb24oKVsncGFyc2UtcG9zaXRpb25hbC1udW1iZXJzJ10gPT09IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHBhcnNlUG9zaXRpb25hbE51bWJlcnMpIHtcbiAgICAgICAgICAgIGFyZ3YgPSBzZWxmLl9wYXJzZVBvc2l0aW9uYWxOdW1iZXJzKGFyZ3YpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcmd2O1xuICAgIH07XG4gICAgc2VsZi5fY29weURvdWJsZURhc2ggPSBmdW5jdGlvbiAoYXJndikge1xuICAgICAgICBpZiAoIWFyZ3YuXyB8fCAhYXJndlsnLS0nXSlcbiAgICAgICAgICAgIHJldHVybiBhcmd2O1xuICAgICAgICBhcmd2Ll8ucHVzaC5hcHBseShhcmd2Ll8sIGFyZ3ZbJy0tJ10pO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGVsZXRlIGFyZ3ZbJy0tJ107XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9lcnIpIHsgfVxuICAgICAgICByZXR1cm4gYXJndjtcbiAgICB9O1xuICAgIHNlbGYuX3BhcnNlUG9zaXRpb25hbE51bWJlcnMgPSBmdW5jdGlvbiAoYXJndikge1xuICAgICAgICBjb25zdCBhcmdzID0gYXJndlsnLS0nXSA/IGFyZ3ZbJy0tJ10gOiBhcmd2Ll87XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBhcmc7IChhcmcgPSBhcmdzW2ldKSAhPT0gdW5kZWZpbmVkOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChzaGltJDEuUGFyc2VyLmxvb2tzTGlrZU51bWJlcihhcmcpICYmXG4gICAgICAgICAgICAgICAgTnVtYmVyLmlzU2FmZUludGVnZXIoTWF0aC5mbG9vcihwYXJzZUZsb2F0KGAke2FyZ31gKSkpKSB7XG4gICAgICAgICAgICAgICAgYXJnc1tpXSA9IE51bWJlcihhcmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcmd2O1xuICAgIH07XG4gICAgc2VsZi5fcnVuVmFsaWRhdGlvbiA9IGZ1bmN0aW9uIHJ1blZhbGlkYXRpb24oYXJndiwgYWxpYXNlcywgcG9zaXRpb25hbE1hcCwgcGFyc2VFcnJvcnMsIGlzRGVmYXVsdENvbW1hbmQgPSBmYWxzZSkge1xuICAgICAgICBpZiAocGFyc2VFcnJvcnMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgWUVycm9yKHBhcnNlRXJyb3JzLm1lc3NhZ2UpO1xuICAgICAgICB2YWxpZGF0aW9uJDEubm9uT3B0aW9uQ291bnQoYXJndik7XG4gICAgICAgIHZhbGlkYXRpb24kMS5yZXF1aXJlZEFyZ3VtZW50cyhhcmd2KTtcbiAgICAgICAgbGV0IGZhaWxlZFN0cmljdENvbW1hbmRzID0gZmFsc2U7XG4gICAgICAgIGlmIChzdHJpY3RDb21tYW5kcykge1xuICAgICAgICAgICAgZmFpbGVkU3RyaWN0Q29tbWFuZHMgPSB2YWxpZGF0aW9uJDEudW5rbm93bkNvbW1hbmRzKGFyZ3YpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJpY3QgJiYgIWZhaWxlZFN0cmljdENvbW1hbmRzKSB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uJDEudW5rbm93bkFyZ3VtZW50cyhhcmd2LCBhbGlhc2VzLCBwb3NpdGlvbmFsTWFwLCBpc0RlZmF1bHRDb21tYW5kKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdHJpY3RPcHRpb25zKSB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uJDEudW5rbm93bkFyZ3VtZW50cyhhcmd2LCBhbGlhc2VzLCB7fSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICB2YWxpZGF0aW9uJDEuY3VzdG9tQ2hlY2tzKGFyZ3YsIGFsaWFzZXMpO1xuICAgICAgICB2YWxpZGF0aW9uJDEubGltaXRlZENob2ljZXMoYXJndik7XG4gICAgICAgIHZhbGlkYXRpb24kMS5pbXBsaWNhdGlvbnMoYXJndik7XG4gICAgICAgIHZhbGlkYXRpb24kMS5jb25mbGljdGluZyhhcmd2KTtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGd1ZXNzTG9jYWxlKCkge1xuICAgICAgICBpZiAoIWRldGVjdExvY2FsZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbG9jYWxlID0gc2hpbSQxLmdldEVudignTENfQUxMJykgfHxcbiAgICAgICAgICAgIHNoaW0kMS5nZXRFbnYoJ0xDX01FU1NBR0VTJykgfHxcbiAgICAgICAgICAgIHNoaW0kMS5nZXRFbnYoJ0xBTkcnKSB8fFxuICAgICAgICAgICAgc2hpbSQxLmdldEVudignTEFOR1VBR0UnKSB8fFxuICAgICAgICAgICAgJ2VuX1VTJztcbiAgICAgICAgc2VsZi5sb2NhbGUobG9jYWxlLnJlcGxhY2UoL1suOl0uKi8sICcnKSk7XG4gICAgfVxuICAgIHNlbGYuaGVscCgpO1xuICAgIHNlbGYudmVyc2lvbigpO1xuICAgIHJldHVybiBzZWxmO1xufVxuY29uc3QgcmViYXNlID0gKGJhc2UsIGRpcikgPT4gc2hpbSQxLnBhdGgucmVsYXRpdmUoYmFzZSwgZGlyKTtcbmZ1bmN0aW9uIGlzWWFyZ3NJbnN0YW5jZSh5KSB7XG4gICAgcmV0dXJuICEheSAmJiB0eXBlb2YgeS5fcGFyc2VBcmdzID09PSAnZnVuY3Rpb24nO1xufVxuXG52YXIgX2EsIF9iO1xuY29uc3QgeyByZWFkRmlsZVN5bmMgfSA9IHJlcXVpcmUoJ2ZzJyk7XG5jb25zdCB7IGluc3BlY3QgfSA9IHJlcXVpcmUoJ3V0aWwnKTtcbmNvbnN0IHsgcmVzb2x2ZSB9ID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3QgeTE4biA9IHJlcXVpcmUoJ3kxOG4nKTtcbmNvbnN0IFBhcnNlciA9IHJlcXVpcmUoJ3lhcmdzLXBhcnNlcicpO1xudmFyIGNqc1BsYXRmb3JtU2hpbSA9IHtcbiAgICBhc3NlcnQ6IHtcbiAgICAgICAgbm90U3RyaWN0RXF1YWw6IGFzc2VydC5ub3RTdHJpY3RFcXVhbCxcbiAgICAgICAgc3RyaWN0RXF1YWw6IGFzc2VydC5zdHJpY3RFcXVhbCxcbiAgICB9LFxuICAgIGNsaXVpOiByZXF1aXJlKCdjbGl1aScpLFxuICAgIGZpbmRVcDogcmVxdWlyZSgnZXNjYWxhZGUvc3luYycpLFxuICAgIGdldEVudjogKGtleSkgPT4ge1xuICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnZba2V5XTtcbiAgICB9LFxuICAgIGdldENhbGxlckZpbGU6IHJlcXVpcmUoJ2dldC1jYWxsZXItZmlsZScpLFxuICAgIGdldFByb2Nlc3NBcmd2QmluOiBnZXRQcm9jZXNzQXJndkJpbixcbiAgICBpbnNwZWN0LFxuICAgIG1haW5GaWxlbmFtZTogKF9iID0gKF9hID0gcmVxdWlyZSA9PT0gbnVsbCB8fCByZXF1aXJlID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXF1aXJlLm1haW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5maWxlbmFtZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogcHJvY2Vzcy5jd2QoKSxcbiAgICBQYXJzZXIsXG4gICAgcGF0aDogcmVxdWlyZSgncGF0aCcpLFxuICAgIHByb2Nlc3M6IHtcbiAgICAgICAgYXJndjogKCkgPT4gcHJvY2Vzcy5hcmd2LFxuICAgICAgICBjd2Q6IHByb2Nlc3MuY3dkLFxuICAgICAgICBleGVjUGF0aDogKCkgPT4gcHJvY2Vzcy5leGVjUGF0aCxcbiAgICAgICAgZXhpdDogKGNvZGUpID0+IHtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdChjb2RlKTtcbiAgICAgICAgfSxcbiAgICAgICAgbmV4dFRpY2s6IHByb2Nlc3MubmV4dFRpY2ssXG4gICAgICAgIHN0ZENvbHVtbnM6IHR5cGVvZiBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgPyBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgfSxcbiAgICByZWFkRmlsZVN5bmMsXG4gICAgcmVxdWlyZTogcmVxdWlyZSxcbiAgICByZXF1aXJlRGlyZWN0b3J5OiByZXF1aXJlKCdyZXF1aXJlLWRpcmVjdG9yeScpLFxuICAgIHN0cmluZ1dpZHRoOiByZXF1aXJlKCdzdHJpbmctd2lkdGgnKSxcbiAgICB5MThuOiB5MThuKHtcbiAgICAgICAgZGlyZWN0b3J5OiByZXNvbHZlKF9fZGlybmFtZSwgJy4uL2xvY2FsZXMnKSxcbiAgICAgICAgdXBkYXRlRmlsZXM6IGZhbHNlLFxuICAgIH0pLFxufTtcblxuY29uc3QgbWluTm9kZVZlcnNpb24gPSBwcm9jZXNzICYmIHByb2Nlc3MuZW52ICYmIHByb2Nlc3MuZW52LllBUkdTX01JTl9OT0RFX1ZFUlNJT05cbiAgICA/IE51bWJlcihwcm9jZXNzLmVudi5ZQVJHU19NSU5fTk9ERV9WRVJTSU9OKVxuICAgIDogMTA7XG5pZiAocHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb24pIHtcbiAgICBjb25zdCBtYWpvciA9IE51bWJlcihwcm9jZXNzLnZlcnNpb24ubWF0Y2goL3YoW14uXSspLylbMV0pO1xuICAgIGlmIChtYWpvciA8IG1pbk5vZGVWZXJzaW9uKSB7XG4gICAgICAgIHRocm93IEVycm9yKGB5YXJncyBzdXBwb3J0cyBhIG1pbmltdW0gTm9kZS5qcyB2ZXJzaW9uIG9mICR7bWluTm9kZVZlcnNpb259LiBSZWFkIG91ciB2ZXJzaW9uIHN1cHBvcnQgcG9saWN5OiBodHRwczovL2dpdGh1Yi5jb20veWFyZ3MveWFyZ3Mjc3VwcG9ydGVkLW5vZGVqcy12ZXJzaW9uc2ApO1xuICAgIH1cbn1cbmNvbnN0IFBhcnNlciQxID0gcmVxdWlyZSgneWFyZ3MtcGFyc2VyJyk7XG5jb25zdCBZYXJncyQxID0gWWFyZ3NXaXRoU2hpbShjanNQbGF0Zm9ybVNoaW0pO1xudmFyIGNqcyA9IHtcbiAgICBhcHBseUV4dGVuZHMsXG4gICAgY2pzUGxhdGZvcm1TaGltLFxuICAgIFlhcmdzOiBZYXJncyQxLFxuICAgIGFyZ3NlcnQsXG4gICAgZ2xvYmFsTWlkZGxld2FyZUZhY3RvcnksXG4gICAgaXNQcm9taXNlLFxuICAgIG9iakZpbHRlcixcbiAgICBwYXJzZUNvbW1hbmQsXG4gICAgUGFyc2VyOiBQYXJzZXIkMSxcbiAgICBwcm9jZXNzQXJndixcbiAgICByZWJhc2UsXG4gICAgWUVycm9yLFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjanM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gY2xhc3NpYyBzaW5nbGV0b24geWFyZ3MgQVBJLCB0byB1c2UgeWFyZ3Ncbi8vIHdpdGhvdXQgcnVubmluZyBhcyBhIHNpbmdsZXRvbiBkbzpcbi8vIHJlcXVpcmUoJ3lhcmdzL3lhcmdzJykocHJvY2Vzcy5hcmd2LnNsaWNlKDIpKVxuY29uc3Qge1lhcmdzLCBwcm9jZXNzQXJndn0gPSByZXF1aXJlKCcuL2J1aWxkL2luZGV4LmNqcycpO1xuXG5Bcmd2KHByb2Nlc3NBcmd2LmhpZGVCaW4ocHJvY2Vzcy5hcmd2KSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXJndjtcblxuZnVuY3Rpb24gQXJndihwcm9jZXNzQXJncywgY3dkKSB7XG4gIGNvbnN0IGFyZ3YgPSBZYXJncyhwcm9jZXNzQXJncywgY3dkLCByZXF1aXJlKTtcbiAgc2luZ2xldG9uaWZ5KGFyZ3YpO1xuICByZXR1cm4gYXJndjtcbn1cblxuLyogIEhhY2sgYW4gaW5zdGFuY2Ugb2YgQXJndiB3aXRoIHByb2Nlc3MuYXJndiBpbnRvIEFyZ3ZcbiAgICBzbyBwZW9wbGUgY2FuIGRvXG4gICAgcmVxdWlyZSgneWFyZ3MnKShbJy0tYmVlYmxlPTEnLCcteicsJ3ppenpsZSddKS5hcmd2XG4gICAgdG8gcGFyc2UgYSBsaXN0IG9mIGFyZ3MgYW5kXG4gICAgcmVxdWlyZSgneWFyZ3MnKS5hcmd2XG4gICAgdG8gZ2V0IGEgcGFyc2VkIHZlcnNpb24gb2YgcHJvY2Vzcy5hcmd2LlxuKi9cbmZ1bmN0aW9uIHNpbmdsZXRvbmlmeShpbnN0KSB7XG4gIE9iamVjdC5rZXlzKGluc3QpLmZvckVhY2goa2V5ID0+IHtcbiAgICBpZiAoa2V5ID09PSAnYXJndicpIHtcbiAgICAgIEFyZ3YuX19kZWZpbmVHZXR0ZXJfXyhrZXksIGluc3QuX19sb29rdXBHZXR0ZXJfXyhrZXkpKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnN0W2tleV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIEFyZ3Zba2V5XSA9IGluc3Rba2V5XS5iaW5kKGluc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICBBcmd2Ll9fZGVmaW5lR2V0dGVyX18oJyQwJywgKCkgPT4ge1xuICAgICAgICByZXR1cm4gaW5zdC4kMDtcbiAgICAgIH0pO1xuICAgICAgQXJndi5fX2RlZmluZUdldHRlcl9fKCdwYXJzZWQnLCAoKSA9PiB7XG4gICAgICAgIHJldHVybiBpbnN0LnBhcnNlZDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG4iLCAiLy8gRXhlcmNpc2UgYWxsIGludGVnIHN0YWNrcyBhbmQgaWYgdGhleSBkZXBsb3ksIHVwZGF0ZSB0aGUgZXhwZWN0ZWQgc3ludGggZmlsZXNcbmltcG9ydCB7IHByb21pc2VzIGFzIGZzIH0gZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCAqIGFzIHdvcmtlcnBvb2wgZnJvbSAnd29ya2VycG9vbCc7XG5pbXBvcnQgKiBhcyBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgSW50ZWdyYXRpb25UZXN0cywgSW50ZWdUZXN0SW5mbywgSW50ZWdUZXN0IH0gZnJvbSAnLi9ydW5uZXIvaW50ZWdyYXRpb24tdGVzdHMnO1xuaW1wb3J0IHsgcnVuU25hcHNob3RUZXN0cywgcnVuSW50ZWdyYXRpb25UZXN0cywgSW50ZWdSdW5uZXJNZXRyaWNzLCBJbnRlZ1Rlc3RXb3JrZXJDb25maWcsIERlc3RydWN0aXZlQ2hhbmdlIH0gZnJvbSAnLi93b3JrZXJzJztcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3lhcmdzL3lhcmdzL2lzc3Vlcy8xOTI5XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZXNidWlsZC9pc3N1ZXMvMTQ5MlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IHlhcmdzID0gcmVxdWlyZSgneWFyZ3MnKTtcblxuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuICBjb25zdCBhcmd2ID0geWFyZ3NcbiAgICAudXNhZ2UoJ1VzYWdlOiBpbnRlZy1ydW5uZXIgW1RFU1QuLi5dJylcbiAgICAub3B0aW9uKCdsaXN0JywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAnTGlzdCB0ZXN0cyBpbnN0ZWFkIG9mIHJ1bm5pbmcgdGhlbScgfSlcbiAgICAub3B0aW9uKCdjbGVhbicsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiB0cnVlLCBkZXNjOiAnU2tpcHMgc3RhY2sgY2xlYW4gdXAgYWZ0ZXIgdGVzdCBpcyBjb21wbGV0ZWQgKHVzZSAtLW5vLWNsZWFuIHRvIG5lZ2F0ZSknIH0pXG4gICAgLm9wdGlvbigndmVyYm9zZScsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgYWxpYXM6ICd2JywgZGVzYzogJ1ZlcmJvc2UgbG9ncyBhbmQgbWV0cmljcyBvbiBpbnRlZ3JhdGlvbiB0ZXN0cyBkdXJhdGlvbnMnIH0pXG4gICAgLm9wdGlvbignZHJ5LXJ1bicsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ2RvIG5vdCBhY3R1YWxseSBkZXBsb3kgdGhlIHN0YWNrLiBqdXN0IHVwZGF0ZSB0aGUgc25hcHNob3QgKG5vdCByZWNvbW1lbmRlZCEpJyB9KVxuICAgIC5vcHRpb24oJ3VwZGF0ZS1vbi1mYWlsZWQnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdyZXJ1biBpbnRlZ3JhdGlvbiB0ZXN0cyBhbmQgdXBkYXRlIHNuYXBzaG90cyBmb3IgZmFpbGVkIHRlc3RzLicgfSlcbiAgICAub3B0aW9uKCdmb3JjZScsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ1JlcnVuIGFsbCBpbnRlZ3JhdGlvbiB0ZXN0cyBldmVuIGlmIHRlc3RzIGFyZSBwYXNzaW5nJyB9KVxuICAgIC5vcHRpb24oJ3BhcmFsbGVsLXJlZ2lvbnMnLCB7IHR5cGU6ICdhcnJheScsIGRlc2M6ICdUZXN0cyBhcmUgcnVuIGluIHBhcmFsbGVsIGFjcm9zcyB0aGVzZSByZWdpb25zLiBUbyBwcmV2ZW50IHRlc3RzIGZyb20gcnVubmluZyBpbiBwYXJhbGxlbCwgcHJvdmlkZSBvbmx5IGEgc2luZ2xlIHJlZ2lvbicsIG5hcmdzOiAxLCBkZWZhdWx0OiBbXSB9KVxuICAgIC5vcHRpb25zKCdkaXJlY3RvcnknLCB7IHR5cGU6ICdzdHJpbmcnLCBkZWZhdWx0OiAndGVzdCcsIGRlc2M6ICdzdGFydGluZyBkaXJlY3RvcnkgdG8gZGlzY292ZXIgaW50ZWdyYXRpb24gdGVzdHMuIFRlc3RzIHdpbGwgYmUgZGlzY292ZXJlZCByZWN1cnNpdmVseSBmcm9tIHRoaXMgZGlyZWN0b3J5JyB9KVxuICAgIC5vcHRpb25zKCdwcm9maWxlcycsIHsgdHlwZTogJ2FycmF5JywgZGVzYzogJ2xpc3Qgb2YgQVdTIHByb2ZpbGVzIHRvIHVzZS4gVGVzdHMgd2lsbCBiZSBydW4gaW4gcGFyYWxsZWwgYWNyb3NzIGVhY2ggcHJvZmlsZStyZWdpb25zJywgbmFyZ3M6IDEsIGRlZmF1bHQ6IFtdIH0pXG4gICAgLm9wdGlvbnMoJ21heC13b3JrZXJzJywgeyB0eXBlOiAnbnVtYmVyJywgZGVzYzogJ1RoZSBtYXggbnVtYmVyIG9mIHdvcmtlcnBvb2wgd29ya2VycyB0byB1c2Ugd2hlbiBydW5uaW5nIGludGVncmF0aW9uIHRlc3RzIGluIHBhcmFsbGVsJywgZGVmYXVsdDogMTYgfSlcbiAgICAub3B0aW9ucygnZXhjbHVkZScsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZXNjOiAnUnVuIGFsbCB0ZXN0cyBpbiB0aGUgZGlyZWN0b3J5LCBleGNlcHQgdGhlIHNwZWNpZmllZCBURVNUcycsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgLm9wdGlvbnMoJ2Zyb20tZmlsZScsIHsgdHlwZTogJ3N0cmluZycsIGRlc2M6ICdSZWFkIFRFU1QgbmFtZXMgZnJvbSBhIGZpbGUgKG9uZSBURVNUIHBlciBsaW5lKScgfSlcbiAgICAub3B0aW9uKCdpbnNwZWN0LWZhaWx1cmVzJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlc2M6ICdLZWVwIHRoZSBpbnRlZyB0ZXN0IGNsb3VkIGFzc2VtYmx5IGlmIGEgZmFpbHVyZSBvY2N1cnMgZm9yIGluc3BlY3Rpb24nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgIC5vcHRpb24oJ2Rpc2FibGUtdXBkYXRlLXdvcmtmbG93JywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAnSWYgdGhpcyBpcyBcInRydWVcIiB0aGVuIHRoZSBzdGFjayB1cGRhdGUgd29ya2Zsb3cgd2lsbCBiZSBkaXNhYmxlZCcgfSlcbiAgICAuc3RyaWN0KClcbiAgICAuYXJndjtcblxuICBjb25zdCBwb29sID0gd29ya2VycG9vbC5wb29sKHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9saWIvd29ya2Vycy9leHRyYWN0L2luZGV4LmpzJyksIHtcbiAgICBtYXhXb3JrZXJzOiBhcmd2WydtYXgtd29ya2VycyddLFxuICB9KTtcblxuICAvLyBsaXN0IG9mIGludGVncmF0aW9uIHRlc3RzIHRoYXQgd2lsbCBiZSBleGVjdXRlZFxuICBjb25zdCB0ZXN0c1RvUnVuOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSA9IFtdO1xuICBjb25zdCBkZXN0cnVjdGl2ZUNoYW5nZXM6IERlc3RydWN0aXZlQ2hhbmdlW10gPSBbXTtcbiAgY29uc3QgdGVzdHNGcm9tQXJnczogSW50ZWdUZXN0W10gPSBbXTtcbiAgY29uc3QgcGFyYWxsZWxSZWdpb25zID0gYXJyYXlGcm9tWWFyZ3MoYXJndlsncGFyYWxsZWwtcmVnaW9ucyddKTtcbiAgY29uc3QgdGVzdFJlZ2lvbnM6IHN0cmluZ1tdID0gcGFyYWxsZWxSZWdpb25zID8/IFsndXMtZWFzdC0xJywgJ3VzLWVhc3QtMicsICd1cy13ZXN0LTInXTtcbiAgY29uc3QgcHJvZmlsZXMgPSBhcnJheUZyb21ZYXJncyhhcmd2LnByb2ZpbGVzKTtcbiAgY29uc3QgcnVuVXBkYXRlT25GYWlsZWQgPSBhcmd2Wyd1cGRhdGUtb24tZmFpbGVkJ10gPz8gZmFsc2U7XG4gIGNvbnN0IGZyb21GaWxlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBhcmd2Wydmcm9tLWZpbGUnXTtcbiAgY29uc3QgZXhjbHVkZTogYm9vbGVhbiA9IGFyZ3YuZXhjbHVkZTtcblxuICBsZXQgZmFpbGVkU25hcHNob3RzOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSA9IFtdO1xuICBpZiAoYXJndlsnbWF4LXdvcmtlcnMnXSA8IHRlc3RSZWdpb25zLmxlbmd0aCAqIChwcm9maWxlcyA/PyBbMV0pLmxlbmd0aCkge1xuICAgIGxvZ2dlci53YXJuaW5nKCdZb3UgYXJlIGF0dGVtcHRpbmcgdG8gcnVuICVzIHRlc3RzIGluIHBhcmFsbGVsLCBidXQgb25seSBoYXZlICVzIHdvcmtlcnMuIE5vdCBhbGwgb2YgeW91ciBwcm9maWxlcytyZWdpb25zIHdpbGwgYmUgdXRpbGl6ZWQnLCBhcmd2LnByb2ZpbGVzICogYXJndlsncGFyYWxsZWwtcmVnaW9ucyddLCBhcmd2WydtYXgtd29ya2VycyddKTtcbiAgfVxuXG4gIGxldCB0ZXN0c1N1Y2NlZWRlZCA9IGZhbHNlO1xuICB0cnkge1xuICAgIGlmIChhcmd2Lmxpc3QpIHtcbiAgICAgIGNvbnN0IHRlc3RzID0gYXdhaXQgbmV3IEludGVncmF0aW9uVGVzdHMoYXJndi5kaXJlY3RvcnkpLmZyb21DbGlBcmdzKCk7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSh0ZXN0cy5tYXAodCA9PiB0LmRpc2NvdmVyeVJlbGF0aXZlRmlsZU5hbWUpLmpvaW4oJ1xcbicpICsgJ1xcbicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChhcmd2Ll8ubGVuZ3RoID4gMCAmJiBmcm9tRmlsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIGxpc3Qgb2YgdGVzdHMgY2Fubm90IGJlIHByb3ZpZGVkIGlmIFwiLS1mcm9tLWZpbGVcIiBpcyBwcm92aWRlZCcpO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0ZWRUZXN0cyA9IGZyb21GaWxlXG4gICAgICA/IChhd2FpdCBmcy5yZWFkRmlsZShmcm9tRmlsZSwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pKS5zcGxpdCgnXFxuJykuZmlsdGVyKHggPT4geClcbiAgICAgIDogKGFyZ3YuXy5sZW5ndGggPiAwID8gYXJndi5fIDogdW5kZWZpbmVkKTsgLy8gJ3VuZGVmaW5lZCcgbWVhbnMgbm8gcmVxdWVzdFxuXG4gICAgdGVzdHNGcm9tQXJncy5wdXNoKC4uLihhd2FpdCBuZXcgSW50ZWdyYXRpb25UZXN0cyhwYXRoLnJlc29sdmUoYXJndi5kaXJlY3RvcnkpKS5mcm9tQ2xpQXJncyhyZXF1ZXN0ZWRUZXN0cywgZXhjbHVkZSkpKTtcblxuICAgIC8vIGFsd2F5cyBydW4gc25hcHNob3QgdGVzdHMsIGJ1dCBpZiAnLS1mb3JjZScgaXMgcGFzc2VkIHRoZW5cbiAgICAvLyBydW4gaW50ZWdyYXRpb24gdGVzdHMgb24gYWxsIGZhaWxlZCB0ZXN0cywgbm90IGp1c3QgdGhvc2UgdGhhdFxuICAgIC8vIGZhaWxlZCBzbmFwc2hvdCB0ZXN0c1xuICAgIGZhaWxlZFNuYXBzaG90cyA9IGF3YWl0IHJ1blNuYXBzaG90VGVzdHMocG9vbCwgdGVzdHNGcm9tQXJncywge1xuICAgICAgcmV0YWluOiBhcmd2WydpbnNwZWN0LWZhaWx1cmVzJ10sXG4gICAgICB2ZXJib3NlOiBhcmd2LnZlcmJvc2UsXG4gICAgfSk7XG4gICAgZm9yIChjb25zdCBmYWlsdXJlIG9mIGZhaWxlZFNuYXBzaG90cykge1xuICAgICAgZGVzdHJ1Y3RpdmVDaGFuZ2VzLnB1c2goLi4uZmFpbHVyZS5kZXN0cnVjdGl2ZUNoYW5nZXMgPz8gW10pO1xuICAgIH1cbiAgICBpZiAoIWFyZ3YuZm9yY2UpIHtcbiAgICAgIHRlc3RzVG9SdW4ucHVzaCguLi5mYWlsZWRTbmFwc2hvdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBhbnkgb2YgdGhlIHRlc3QgZmFpbGVkIHNuYXBzaG90IHRlc3RzLCBrZWVwIHRob3NlIHJlc3VsdHNcbiAgICAgIC8vIGFuZCBtZXJnZSB3aXRoIHRoZSByZXN0IG9mIHRoZSB0ZXN0cyBmcm9tIGFyZ3NcbiAgICAgIHRlc3RzVG9SdW4ucHVzaCguLi5tZXJnZVRlc3RzKHRlc3RzRnJvbUFyZ3MubWFwKHQgPT4gdC5pbmZvKSwgZmFpbGVkU25hcHNob3RzKSk7XG4gICAgfVxuXG4gICAgLy8gcnVuIGludGVncmF0aW9uIHRlc3RzIGlmIGAtLXVwZGF0ZS1vbi1mYWlsZWRgIE9SIGAtLWZvcmNlYCBpcyB1c2VkXG4gICAgaWYgKHJ1blVwZGF0ZU9uRmFpbGVkIHx8IGFyZ3YuZm9yY2UpIHtcbiAgICAgIGNvbnN0IHsgc3VjY2VzcywgbWV0cmljcyB9ID0gYXdhaXQgcnVuSW50ZWdyYXRpb25UZXN0cyh7XG4gICAgICAgIHBvb2wsXG4gICAgICAgIHRlc3RzOiB0ZXN0c1RvUnVuLFxuICAgICAgICByZWdpb25zOiB0ZXN0UmVnaW9ucyxcbiAgICAgICAgcHJvZmlsZXMsXG4gICAgICAgIGNsZWFuOiBhcmd2LmNsZWFuLFxuICAgICAgICBkcnlSdW46IGFyZ3ZbJ2RyeS1ydW4nXSxcbiAgICAgICAgdmVyYm9zZTogYXJndi52ZXJib3NlLFxuICAgICAgICB1cGRhdGVXb3JrZmxvdzogIWFyZ3ZbJ2Rpc2FibGUtdXBkYXRlLXdvcmtmbG93J10sXG4gICAgICB9KTtcbiAgICAgIHRlc3RzU3VjY2VlZGVkID0gc3VjY2VzcztcblxuXG4gICAgICBpZiAoYXJndi5jbGVhbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ05vdCBjbGVhbmluZyB1cCBzdGFja3Mgc2luY2UgXCItLW5vLWNsZWFuXCIgd2FzIHVzZWQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFyZ3YudmVyYm9zZSkge1xuICAgICAgICBwcmludE1ldHJpY3MobWV0cmljcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NvbWUgaW50ZWdyYXRpb24gdGVzdHMgZmFpbGVkIScpO1xuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICB2b2lkIHBvb2wudGVybWluYXRlKCk7XG4gIH1cblxuICBpZiAoZGVzdHJ1Y3RpdmVDaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICBwcmludERlc3RydWN0aXZlQ2hhbmdlcyhkZXN0cnVjdGl2ZUNoYW5nZXMpO1xuICAgIHRocm93IG5ldyBFcnJvcignU29tZSBjaGFuZ2VzIHdlcmUgZGVzdHJ1Y3RpdmUhJyk7XG4gIH1cbiAgaWYgKGZhaWxlZFNuYXBzaG90cy5sZW5ndGggPiAwKSB7XG4gICAgbGV0IG1lc3NhZ2UgPSAnJztcbiAgICBpZiAoIXJ1blVwZGF0ZU9uRmFpbGVkKSB7XG4gICAgICBtZXNzYWdlID0gJ1RvIHJlLXJ1biBmYWlsZWQgdGVzdHMgcnVuOiB5YXJuIGludGVnLXJ1bm5lciAtLXVwZGF0ZS1vbi1mYWlsZWQnO1xuICAgIH1cbiAgICBpZiAoIXRlc3RzU3VjY2VlZGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNvbWUgdGVzdHMgZmFpbGVkIVxcbiR7bWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxufVxuXG5mdW5jdGlvbiBwcmludERlc3RydWN0aXZlQ2hhbmdlcyhjaGFuZ2VzOiBEZXN0cnVjdGl2ZUNoYW5nZVtdKTogdm9pZCB7XG4gIGlmIChjaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICBsb2dnZXIud2FybmluZygnISEhIFRoaXMgdGVzdCBjb250YWlucyAlcyAhISEnLCBjaGFsay5ib2xkKCdkZXN0cnVjdGl2ZSBjaGFuZ2VzJykpO1xuICAgIGNoYW5nZXMuZm9yRWFjaChjaGFuZ2UgPT4ge1xuICAgICAgbG9nZ2VyLndhcm5pbmcoJyAgICBTdGFjazogJXMgLSBSZXNvdXJjZTogJXMgLSBJbXBhY3Q6ICVzJywgY2hhbmdlLnN0YWNrTmFtZSwgY2hhbmdlLmxvZ2ljYWxJZCwgY2hhbmdlLmltcGFjdCk7XG4gICAgfSk7XG4gICAgbG9nZ2VyLndhcm5pbmcoJyEhISBJZiB0aGVzZSBkZXN0cnVjdGl2ZSBjaGFuZ2VzIGFyZSBuZWNlc3NhcnksIHBsZWFzZSBpbmRpY2F0ZSB0aGlzIG9uIHRoZSBQUiAhISEnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludE1ldHJpY3MobWV0cmljczogSW50ZWdSdW5uZXJNZXRyaWNzW10pOiB2b2lkIHtcbiAgbG9nZ2VyLmhpZ2hsaWdodCgnICAgLS0tIEludGVncmF0aW9uIHRlc3QgbWV0cmljcyAtLS0nKTtcbiAgY29uc3Qgc29ydGVkTWV0cmljcyA9IG1ldHJpY3Muc29ydCgoYSwgYikgPT4gYS5kdXJhdGlvbiAtIGIuZHVyYXRpb24pO1xuICBzb3J0ZWRNZXRyaWNzLmZvckVhY2gobWV0cmljID0+IHtcbiAgICBsb2dnZXIucHJpbnQoJ1Byb2ZpbGUgJXMgKyBSZWdpb24gJXMgdG90YWwgdGltZTogJXMnLCBtZXRyaWMucHJvZmlsZSwgbWV0cmljLnJlZ2lvbiwgbWV0cmljLmR1cmF0aW9uKTtcbiAgICBjb25zdCBzb3J0ZWRUZXN0cyA9IE9iamVjdC5lbnRyaWVzKG1ldHJpYy50ZXN0cykuc29ydCgoYSwgYikgPT4gYVsxXSAtIGJbMV0pO1xuICAgIHNvcnRlZFRlc3RzLmZvckVhY2godGVzdCA9PiBsb2dnZXIucHJpbnQoJyAgJXM6ICVzJywgdGVzdFswXSwgdGVzdFsxXSkpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUcmFuc2xhdGUgYSBZYXJncyBpbnB1dCBhcnJheSB0byBzb21ldGhpbmcgdGhhdCBtYWtlcyBtb3JlIHNlbnNlIGluIGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VcbiAqIG1vZGVsICh0ZWxsaW5nIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYWJzZW5jZSBhbmQgYW4gZW1wdHkgYXJyYXkpXG4gKlxuICogLSBBbiBlbXB0eSBhcnJheSBpcyB0aGUgZGVmYXVsdCBjYXNlLCBtZWFuaW5nIHRoZSB1c2VyIGRpZG4ndCBwYXNzIGFueSBhcmd1bWVudHMuIFdlIHJldHVyblxuICogICB1bmRlZmluZWQuXG4gKiAtIElmIHRoZSB1c2VyIHBhc3NlZCBhIHNpbmdsZSBlbXB0eSBzdHJpbmcsIHRoZXkgZGlkIHNvbWV0aGluZyBsaWtlIGAtLWFycmF5PWAsIHdoaWNoIHdlJ2xsXG4gKiAgIHRha2UgdG8gbWVhbiB0aGV5IHBhc3NlZCBhbiBlbXB0eSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlGcm9tWWFyZ3MoeHM6IHN0cmluZ1tdKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICBpZiAoeHMubGVuZ3RoID09PSAwKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgcmV0dXJuIHhzLmZpbHRlcih4ID0+IHggIT09ICcnKTtcbn1cblxuLyoqXG4gKiBNZXJnZSB0aGUgdGVzdHMgd2UgcmVjZWl2ZWQgZnJvbSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHdpdGhcbiAqIHRlc3RzIHRoYXQgZmFpbGVkIHNuYXBzaG90IHRlc3RzLiBUaGUgZmFpbGVkIHNuYXBzaG90IHRlc3RzIGhhdmUgYWRkaXRpb25hbFxuICogaW5mb3JtYXRpb24gdGhhdCB3ZSB3YW50IHRvIGtlZXAgc28gdGhpcyBzaG91bGQgb3ZlcnJpZGUgYW55IHRlc3QgZnJvbSBhcmdzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlVGVzdHModGVzdEZyb21BcmdzOiBJbnRlZ1Rlc3RJbmZvW10sIGZhaWxlZFNuYXBzaG90VGVzdHM6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdKTogSW50ZWdUZXN0V29ya2VyQ29uZmlnW10ge1xuICBjb25zdCBmYWlsZWRUZXN0TmFtZXMgPSBuZXcgU2V0KGZhaWxlZFNuYXBzaG90VGVzdHMubWFwKHRlc3QgPT4gdGVzdC5maWxlTmFtZSkpO1xuICBjb25zdCBmaW5hbDogSW50ZWdUZXN0V29ya2VyQ29uZmlnW10gPSBmYWlsZWRTbmFwc2hvdFRlc3RzO1xuICBmaW5hbC5wdXNoKC4uLnRlc3RGcm9tQXJncy5maWx0ZXIodGVzdCA9PiAhZmFpbGVkVGVzdE5hbWVzLmhhcyh0ZXN0LmZpbGVOYW1lKSkpO1xuICByZXR1cm4gZmluYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGkoKSB7XG4gIG1haW4oKS50aGVuKCkuY2F0Y2goZXJyID0+IHtcbiAgICBsb2dnZXIuZXJyb3IoZXJyKTtcbiAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgfSk7XG59XG4iLCAiZXhwb3J0IHsgY2xpIH0gZnJvbSAnLi9jbGknO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUssS0FBSyxHQUFHO0FBQUEsTUFDM0IsYUFBYSxDQUFDLElBQUksS0FBSyxHQUFHO0FBQUEsTUFDMUIsZUFBZSxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQUEsTUFDM0IsVUFBVSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDeEIsY0FBYyxDQUFDLEtBQUssS0FBSyxFQUFFO0FBQUEsTUFDM0IsWUFBWSxDQUFDLElBQUksS0FBSyxFQUFFO0FBQUEsTUFDeEIsWUFBWSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDMUIsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQUEsTUFDdEIsVUFBVSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDeEIsV0FBVyxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDekIsYUFBYSxDQUFDLEtBQUssSUFBSSxHQUFHO0FBQUEsTUFDMUIsYUFBYSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDM0IsYUFBYSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDM0IsUUFBUSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDdEIsZUFBZSxDQUFDLEdBQUcsS0FBSyxHQUFHO0FBQUEsTUFDM0IsYUFBYSxDQUFDLElBQUksS0FBSyxHQUFHO0FBQUEsTUFDMUIsT0FBTyxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDckIsUUFBUSxDQUFDLEdBQUcsS0FBSyxHQUFHO0FBQUEsTUFDcEIsV0FBVyxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDekIsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQUEsTUFDdEIsYUFBYSxDQUFDLElBQUksS0FBSyxHQUFHO0FBQUEsTUFDMUIsVUFBVSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDeEIsU0FBUyxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDdkIsU0FBUyxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDdkIsY0FBYyxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDNUIsVUFBVSxDQUFDLEtB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
10201
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLW5hbWUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvY29udmVyc2lvbnMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvcm91dGUuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9oYXMtZmxhZy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3VwcG9ydHMtY29sb3IvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NoYWxrL3NvdXJjZS91dGlsLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jaGFsay9zb3VyY2UvdGVtcGxhdGVzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jaGFsay9zb3VyY2UvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL3JlcXVpcmVGb29sV2VicGFjay5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvZW52aXJvbm1lbnQuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL1Byb21pc2UuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL2dlbmVyYXRlZC9lbWJlZGRlZFdvcmtlci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvV29ya2VySGFuZGxlci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvZGVidWctcG9ydC1hbGxvY2F0b3IuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL1Bvb2wuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL3dvcmtlci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvaW5kZXguanMiLCAibG9nZ2VyLnRzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9ub2RlX21vZHVsZXMvdW5pdmVyc2FsaWZ5L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9wb2x5ZmlsbHMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2dyYWNlZnVsLWZzL2xlZ2FjeS1zdHJlYW1zLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9jbG9uZS5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMvZ3JhY2VmdWwtZnMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9mcy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXQtbGVhc3Qtbm9kZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21rZGlycy9tYWtlLWRpci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21rZGlycy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL3V0aWwvdXRpbWVzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvdXRpbC9zdGF0LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvY29weS1zeW5jL2NvcHktc3luYy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2NvcHktc3luYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL3BhdGgtZXhpc3RzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvY29weS9jb3B5LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvY29weS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL3JlbW92ZS9yaW1yYWYuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9yZW1vdmUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbXB0eS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9maWxlLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL2xpbmsuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvc3ltbGluay1wYXRocy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9zeW1saW5rLXR5cGUuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvc3ltbGluay5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbm9kZV9tb2R1bGVzL2pzb25maWxlL3V0aWxzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9ub2RlX21vZHVsZXMvanNvbmZpbGUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9qc29uL2pzb25maWxlLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvb3V0cHV0L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvanNvbi9vdXRwdXQtanNvbi5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2pzb24vb3V0cHV0LWpzb24tc3luYy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2pzb24vaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9tb3ZlLXN5bmMvbW92ZS1zeW5jLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvbW92ZS1zeW5jL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvbW92ZS9tb3ZlLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvbW92ZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2luZGV4LmpzIiwgInJ1bm5lci9pbnRlZ3JhdGlvbi10ZXN0cy50cyIsICJ3b3JrZXJzL2NvbW1vbi50cyIsICJ1dGlscy50cyIsICJ3b3JrZXJzL2ludGVnLXRlc3Qtd29ya2VyLnRzIiwgIndvcmtlcnMvaW50ZWctc25hcHNob3Qtd29ya2VyLnRzIiwgIndvcmtlcnMvaW5kZXgudHMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3kxOG4vYnVpbGQvaW5kZXguY2pzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy95YXJncy1wYXJzZXIvYnVpbGQvaW5kZXguY2pzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9hbnNpLXJlZ2V4L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHJpcC1hbnNpL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9pcy1mdWxsd2lkdGgtY29kZS1wb2ludC9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZW1vamktcmVnZXgvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmluZy13aWR0aC9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd3JhcC1hbnNpL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jbGl1aS9idWlsZC9pbmRleC5janMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2VzY2FsYWRlL3N5bmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2dldC1jYWxsZXItZmlsZS9pbmRleC50cyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVxdWlyZS1kaXJlY3RvcnkvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2luZGV4LmNqcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMveWFyZ3MvaW5kZXguY2pzIiwgImNsaS50cyIsICJpbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBzdHJpY3QnXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHRcImFsaWNlYmx1ZVwiOiBbMjQwLCAyNDgsIDI1NV0sXHJcblx0XCJhbnRpcXVld2hpdGVcIjogWzI1MCwgMjM1LCAyMTVdLFxyXG5cdFwiYXF1YVwiOiBbMCwgMjU1LCAyNTVdLFxyXG5cdFwiYXF1YW1hcmluZVwiOiBbMTI3LCAyNTUsIDIxMl0sXHJcblx0XCJhenVyZVwiOiBbMjQwLCAyNTUsIDI1NV0sXHJcblx0XCJiZWlnZVwiOiBbMjQ1LCAyNDUsIDIyMF0sXHJcblx0XCJiaXNxdWVcIjogWzI1NSwgMjI4LCAxOTZdLFxyXG5cdFwiYmxhY2tcIjogWzAsIDAsIDBdLFxyXG5cdFwiYmxhbmNoZWRhbG1vbmRcIjogWzI1NSwgMjM1LCAyMDVdLFxyXG5cdFwiYmx1ZVwiOiBbMCwgMCwgMjU1XSxcclxuXHRcImJsdWV2aW9sZXRcIjogWzEzOCwgNDMsIDIyNl0sXHJcblx0XCJicm93blwiOiBbMTY1LCA0MiwgNDJdLFxyXG5cdFwiYnVybHl3b29kXCI6IFsyMjIsIDE4NCwgMTM1XSxcclxuXHRcImNhZGV0Ymx1ZVwiOiBbOTUsIDE1OCwgMTYwXSxcclxuXHRcImNoYXJ0cmV1c2VcIjogWzEyNywgMjU1LCAwXSxcclxuXHRcImNob2NvbGF0ZVwiOiBbMjEwLCAxMDUsIDMwXSxcclxuXHRcImNvcmFsXCI6IFsyNTUsIDEyNywgODBdLFxyXG5cdFwiY29ybmZsb3dlcmJsdWVcIjogWzEwMCwgMTQ5LCAyMzddLFxyXG5cdFwiY29ybnNpbGtcIjogWzI1NSwgMjQ4LCAyMjBdLFxyXG5cdFwiY3JpbXNvblwiOiBbMjIwLCAyMCwgNjBdLFxyXG5cdFwiY3lhblwiOiBbMCwgMjU1LCAyNTVdLFxyXG5cdFwiZGFya2JsdWVcIjogWzAsIDAsIDEzOV0sXHJcblx0XCJkYXJrY3lhblwiOiBbMCwgMTM5LCAxMzldLFxyXG5cdFwiZGFya2dvbGRlbnJvZFwiOiBbMTg0LCAxMzQsIDExXSxcclxuXHRcImRhcmtncmF5XCI6IFsxNjksIDE2OSwgMTY5XSxcclxuXHRcImRhcmtncmVlblwiOiBbMCwgMTAwLCAwXSxcclxuXHRcImRhcmtncmV5XCI6IFsxNjksIDE2OSwgMTY5XSxcclxuXHRcImRhcmtraGFraVwiOiBbMTg5LCAxODMsIDEwN10sXHJcblx0XCJkYXJrbWFnZW50YVwiOiBbMTM5LCAwLCAxMzldLFxyXG5cdFwiZGFya29saXZlZ3JlZW5cIjogWzg1LCAxMDcsIDQ3XSxcclxuXHRcImRhcmtvcmFuZ2VcIjogWzI1NSwgMTQwLCAwXSxcclxuXHRcImRhcmtvcmNoaWRcIjogWzE1MywgNTAsIDIwNF0sXHJcblx0XCJkYXJrcmVkXCI6IFsxMzksIDAsIDBdLFxyXG5cdFwiZGFya3NhbG1vblwiOiBbMjMzLCAxNTAsIDEyMl0sXHJcblx0XCJkYXJrc2VhZ3JlZW5cIjogWzE0MywgMTg4LCAxNDNdLFxyXG5cdFwiZGFya3NsYXRlYmx1ZVwiOiBbNzIsIDYxLCAxMzldLFxyXG5cdFwiZGFya3NsYXRlZ3JheVwiOiBbNDcsIDc5LCA3OV0sXHJcblx0XCJkYXJrc2xhdGVncmV5XCI6IFs0NywgNzksIDc5XSxcclxuXHRcImRhcmt0dXJxdW9pc2VcIjogWzAsIDIwNiwgMjA5XSxcclxuXHRcImRhcmt2aW9sZXRcIjogWzE0OCwgMCwgMjExXSxcclxuXHRcImRlZXBwaW5rXCI6IFsyNTUsIDIwLCAxNDddLFxyXG5cdFwiZGVlcHNreWJsdWVcIjogWzAsIDE5MSwgMjU1XSxcclxuXHRcImRpbWdyYXlcIjogWzEwNSwgMTA1LCAxMDVdLFxyXG5cdFwiZGltZ3JleVwiOiBbMTA1LCAxMDUsIDEwNV0sXHJcblx0XCJkb2RnZXJibHVlXCI6IFszMCwgMTQ0LCAyNTVdLFxyXG5cdFwiZmlyZWJyaWNrXCI6IFsxNzgsIDM0LCAzNF0sXHJcblx0XCJmbG9yYWx3aGl0ZVwiOiBbMjU1LCAyNTAsIDI0MF0sXHJcblx0XCJmb3Jlc3RncmVlblwiOiBbMzQsIDEzOSwgMzRdLFxyXG5cdFwiZnVjaHNpYVwiOiBbMjU1LCAwLCAyNTVdLFxyXG5cdFwiZ2FpbnNib3JvXCI6IFsyMjAsIDIyMCwgMjIwXSxcclxuXHRcImdob3N0d2hpdGVcIjogWzI0OCwgMjQ4LCAyNTVdLFxyXG5cdFwiZ29sZFwiOiBbMjU1LCAyMTUsIDBdLFxyXG5cdFwiZ29sZGVucm9kXCI6IFsyMTgsIDE2NSwgMzJdLFxyXG5cdFwiZ3JheVwiOiBbMTI4LCAxMjgsIDEyOF0sXHJcblx0XCJncmVlblwiOiBbMCwgMTI4LCAwXSxcclxuXHRcImdyZWVueWVsbG93XCI6IFsxNzMsIDI1NSwgNDddLFxyXG5cdFwiZ3JleVwiOiBbMTI4LCAxMjgsIDEyOF0sXHJcblx0XCJob25leWRld1wiOiBbMjQwLCAyNTUsIDI0MF0sXHJcblx0XCJob3RwaW5rXCI6IFsyNTUsIDEwNSwgMTgwXSxcclxuXHRcImluZGlhbnJlZFwiOiBbMjA1LCA5MiwgOTJdLFxyXG5cdFwiaW5kaWdvXCI6IFs3NSwgMCwgMTMwXSxcclxuXHRcIml2b3J5XCI6IFsyNTUsIDI1NSwgMjQwXSxcclxuXHRcImtoYWtpXCI6IFsyNDAsIDIzMCwgMTQwXSxcclxuXHRcImxhdmVuZGVyXCI6IFsyMzAsIDIzMCwgMjUwXSxcclxuXHRcImxhdmVuZGVyYmx1c2hcIjogWzI1NSwgMjQwLCAyNDVdLFxyXG5cdFwibGF3bmdyZWVuXCI6IFsxMjQsIDI1MiwgMF0sXHJcblx0XCJsZW1vbmNoaWZmb25cIjogWzI1NSwgMjUwLCAyMDVdLFxyXG5cdFwibGlnaHRibHVlXCI6IFsxNzMsIDIxNiwgMjMwXSxcclxuXHRcImxpZ2h0Y29yYWxcIjogWzI0MCwgMTI4LCAxMjhdLFxyXG5cdFwibGlnaHRjeWFuXCI6IFsyMjQsIDI1NSwgMjU1XSxcclxuXHRcImxpZ2h0Z29sZGVucm9keWVsbG93XCI6IFsyNTAsIDI1MCwgMjEwXSxcclxuXHRcImxpZ2h0Z3JheVwiOiBbMjExLCAyMTEsIDIxMV0sXHJcblx0XCJsaWdodGdyZWVuXCI6IFsxNDQsIDIzOCwgMTQ0XSxcclxuXHRcImxpZ2h0Z3JleVwiOiBbMjExLCAyMTEsIDIxMV0sXHJcblx0XCJsaWdodHBpbmtcIjogWzI1NSwgMTgyLCAxOTNdLFxyXG5cdFwibGlnaHRzYWxtb25cIjogWzI1NSwgMTYwLCAxMjJdLFxyXG5cdFwibGlnaHRzZWFncmVlblwiOiBbMzIsIDE3OCwgMTcwXSxcclxuXHRcImxpZ2h0c2t5Ymx1ZVwiOiBbMTM1LCAyMDYsIDI1MF0sXHJcblx0XCJsaWdodHNsYXRlZ3JheVwiOiBbMTE5LCAxMzYsIDE1M10sXHJcblx0XCJsaWdodHNsYXRlZ3JleVwiOiBbMTE5LCAxMzYsIDE1M10sXHJcblx0XCJsaWdodHN0ZWVsYmx1ZVwiOiBbMTc2LCAxOTYsIDIyMl0sXHJcblx0XCJsaWdodHllbGxvd1wiOiBbMjU1LCAyNTUsIDIyNF0sXHJcblx0XCJsaW1lXCI6IFswLCAyNTUsIDBdLFxyXG5cdFwibGltZWdyZWVuXCI6IFs1MCwgMjA1LCA1MF0sXHJcblx0XCJsaW5lblwiOiBbMjUwLCAyNDAsIDIzMF0sXHJcblx0XCJtYWdlbnRhXCI6IFsyNTUsIDAsIDI1NV0sXHJcblx0XCJtYXJvb25cIjogWzEyOCwgMCwgMF0sXHJcblx0XCJtZWRpdW1hcXVhbWFyaW5lXCI6IFsxMDIsIDIwNSwgMTcwXSxcclxuXHRcIm1lZGl1bWJsdWVcIjogWzAsIDAsIDIwNV0sXHJcblx0XCJtZWRpdW1vcmNoaWRcIjogWzE4NiwgODUsIDIxMV0sXHJcblx0XCJtZWRpdW1wdXJwbGVcIjogWzE0NywgMTEyLCAyMTldLFxyXG5cdFwibWVkaXVtc2VhZ3JlZW5cIjogWzYwLCAxNzksIDExM10sXHJcblx0XCJtZWRpdW1zbGF0ZWJsdWVcIjogWzEyMywgMTA0LCAyMzhdLFxyXG5cdFwibWVkaXVtc3ByaW5nZ3JlZW5cIjogWzAsIDI1MCwgMTU0XSxcclxuXHRcIm1lZGl1bXR1cnF1b2lzZVwiOiBbNzIsIDIwOSwgMjA0XSxcclxuXHRcIm1lZGl1bXZpb2xldHJlZFwiOiBbMTk5LCAyMSwgMTMzXSxcclxuXHRcIm1pZG5pZ2h0Ymx1ZVwiOiBbMjUsIDI1LCAxMTJdLFxyXG5cdFwibWludGNyZWFtXCI6IFsyNDUsIDI1NSwgMjUwXSxcclxuXHRcIm1pc3R5cm9zZVwiOiBbMjU1LCAyMjgsIDIyNV0sXHJcblx0XCJtb2NjYXNpblwiOiBbMjU1LCAyMjgsIDE4MV0sXHJcblx0XCJuYXZham93aGl0ZVwiOiBbMjU1LCAyMjIsIDE3M10sXHJcblx0XCJuYXZ5XCI6IFswLCAwLCAxMjhdLFxyXG5cdFwib2xkbGFjZVwiOiBbMjUzLCAyNDUsIDIzMF0sXHJcblx0XCJvbGl2ZVwiOiBbMTI4LCAxMjgsIDBdLFxyXG5cdFwib2xpdmVkcmFiXCI6IFsxMDcsIDE0MiwgMzVdLFxyXG5cdFwib3JhbmdlXCI6IFsyNTUsIDE2NSwgMF0sXHJcblx0XCJvcmFuZ2VyZWRcIjogWzI1NSwgNjksIDBdLFxyXG5cdFwib3JjaGlkXCI6IFsyMTgsIDExMiwgMjE0XSxcclxuXHRcInBhbGVnb2xkZW5yb2RcIjogWzIzOCwgMjMyLCAxNzBdLFxyXG5cdFwicGFsZWdyZWVuXCI6IFsxNTIsIDI1MSwgMTUyXSxcclxuXHRcInBhbGV0dXJxdW9pc2VcIjogWzE3NSwgMjM4LCAyMzhdLFxyXG5cdFwicGFsZXZpb2xldHJlZFwiOiBbMjE5LCAxMTIsIDE0N10sXHJcblx0XCJwYXBheWF3aGlwXCI6IFsyNTUsIDIzOSwgMjEzXSxcclxuXHRcInBlYWNocHVmZlwiOiBbMjU1LCAyMTgsIDE4NV0sXHJcblx0XCJwZXJ1XCI6IFsyMDUsIDEzMywgNjNdLFxyXG5cdFwicGlua1wiOiBbMjU1LCAxOTIsIDIwM10sXHJcblx0XCJwbHVtXCI6IFsyMjEsIDE2MCwgMjIxXSxcclxuXHRcInBvd2RlcmJsdWVcIjogWzE3NiwgMjI0LCAyMzBdLFxyXG5cdFwicHVycGxlXCI6IFsxMjgsIDAsIDEyOF0sXHJcblx0XCJyZWJlY2NhcHVycGxlXCI6IFsxMDIsIDUxLCAxNTNdLFxyXG5cdFwicmVkXCI6IFsyNTUsIDAsIDBdLFxyXG5cdFwicm9zeWJyb3duXCI6IFsxODgsIDE0MywgMTQzXSxcclxuXHRcInJveWFsYmx1ZVwiOiBbNjUsIDEwNSwgMjI1XSxcclxuXHRcInNhZGRsZWJyb3duXCI6IFsxMzksIDY5LCAxOV0sXHJcblx0XCJzYWxtb25cIjogWzI1MCwgMTI4LCAxMTRdLFxyXG5cdFwic2FuZHlicm93blwiOiBbMjQ0LCAxNjQsIDk2XSxcclxuXHRcInNlYWdyZWVuXCI6IFs0NiwgMTM5LCA4N10sXHJcblx0XCJzZWFzaGVsbFwiOiBbMjU1LCAyNDUsIDIzOF0sXHJcblx0XCJzaWVubmFcIjogWzE2MCwgODIsIDQ1XSxcclxuXHRcInNpbHZlclwiOiBbMTkyLCAxOTIsIDE5Ml0sXHJcblx0XCJza3libHVlXCI6IFsxMzUsIDIwNiwgMjM1XSxcclxuXHRcInNsYXRlYmx1ZVwiOiBbMTA2LCA5MCwgMjA1XSxcclxuXHRcInNsYXRlZ3JheVwiOiBbMTEyLCAxMjgsIDE0NF0sXHJcblx0XCJzbGF0ZWdyZXlcIjogWzExMiwgMTI4LCAxNDRdLFxyXG5cdFwic25vd1wiOiBbMjU1LCAyNTAsIDI1MF0sXHJcblx0XCJzcHJpbmdncmVlblwiOiBbMCwgMjU1LCAxMjddLFxyXG5cdFwic3RlZWxibHVlXCI6IFs3MCwgMTMwLCAxODBdLFxyXG5cdFwidGFuXCI6IFsyMTAsIDE4MCwgMTQwXSxcclxuXHRcInRlYWxcIjogWzAsIDEyOCwgMTI4XSxcclxuXHRcInRoaXN0bGVcIjogWzIxNiwgMTkxLCAyMTZdLFxyXG5cdFwidG9tYXRvXCI6IFsyNTUsIDk5LCA3MV0sXHJcblx0XCJ0dXJxdW9pc2VcIjogWzY0LCAyMjQsIDIwOF0sXHJcblx0XCJ2aW9sZXRcIjogWzIzOCwgMTMwLCAyMzhdLFxyXG5cdFwid2hlYXRcIjogWzI0NSwgMjIyLCAxNzldLFxyXG5cdFwid2hpdGVcIjogWzI1NSwgMjU1LCAyNTVdLFxyXG5cdFwid2hpdGVzbW9rZVwiOiBbMjQ1LCAyNDUsIDI0NV0sXHJcblx0XCJ5ZWxsb3dcIjogWzI1NSwgMjU1LCAwXSxcclxuXHRcInllbGxvd2dyZWVuXCI6IFsxNTQsIDIwNSwgNTBdXHJcbn07XHJcbiIsICIvKiBNSVQgbGljZW5zZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbWl4ZWQtb3BlcmF0b3JzICovXG5jb25zdCBjc3NLZXl3b3JkcyA9IHJlcXVpcmUoJ2NvbG9yLW5hbWUnKTtcblxuLy8gTk9URTogY29udmVyc2lvbnMgc2hvdWxkIG9ubHkgcmV0dXJuIHByaW1pdGl2ZSB2YWx1ZXMgKGkuZS4gYXJyYXlzLCBvclxuLy8gICAgICAgdmFsdWVzIHRoYXQgZ2l2ZSBjb3JyZWN0IGB0eXBlb2ZgIHJlc3VsdHMpLlxuLy8gICAgICAgZG8gbm90IHVzZSBib3ggdmFsdWVzIHR5cGVzIChpLmUuIE51bWJlcigpLCBTdHJpbmcoKSwgZXRjLilcblxuY29uc3QgcmV2ZXJzZUtleXdvcmRzID0ge307XG5mb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjc3NLZXl3b3JkcykpIHtcblx0cmV2ZXJzZUtleXdvcmRzW2Nzc0tleXdvcmRzW2tleV1dID0ga2V5O1xufVxuXG5jb25zdCBjb252ZXJ0ID0ge1xuXHRyZ2I6IHtjaGFubmVsczogMywgbGFiZWxzOiAncmdiJ30sXG5cdGhzbDoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdoc2wnfSxcblx0aHN2OiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ2hzdid9LFxuXHRod2I6IHtjaGFubmVsczogMywgbGFiZWxzOiAnaHdiJ30sXG5cdGNteWs6IHtjaGFubmVsczogNCwgbGFiZWxzOiAnY215ayd9LFxuXHR4eXo6IHtjaGFubmVsczogMywgbGFiZWxzOiAneHl6J30sXG5cdGxhYjoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdsYWInfSxcblx0bGNoOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ2xjaCd9LFxuXHRoZXg6IHtjaGFubmVsczogMSwgbGFiZWxzOiBbJ2hleCddfSxcblx0a2V5d29yZDoge2NoYW5uZWxzOiAxLCBsYWJlbHM6IFsna2V5d29yZCddfSxcblx0YW5zaTE2OiB7Y2hhbm5lbHM6IDEsIGxhYmVsczogWydhbnNpMTYnXX0sXG5cdGFuc2kyNTY6IHtjaGFubmVsczogMSwgbGFiZWxzOiBbJ2Fuc2kyNTYnXX0sXG5cdGhjZzoge2NoYW5uZWxzOiAzLCBsYWJlbHM6IFsnaCcsICdjJywgJ2cnXX0sXG5cdGFwcGxlOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogWydyMTYnLCAnZzE2JywgJ2IxNiddfSxcblx0Z3JheToge2NoYW5uZWxzOiAxLCBsYWJlbHM6IFsnZ3JheSddfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb252ZXJ0O1xuXG4vLyBIaWRlIC5jaGFubmVscyBhbmQgLmxhYmVscyBwcm9wZXJ0aWVzXG5mb3IgKGNvbnN0IG1vZGVsIG9mIE9iamVjdC5rZXlzKGNvbnZlcnQpKSB7XG5cdGlmICghKCdjaGFubmVscycgaW4gY29udmVydFttb2RlbF0pKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGNoYW5uZWxzIHByb3BlcnR5OiAnICsgbW9kZWwpO1xuXHR9XG5cblx0aWYgKCEoJ2xhYmVscycgaW4gY29udmVydFttb2RlbF0pKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGNoYW5uZWwgbGFiZWxzIHByb3BlcnR5OiAnICsgbW9kZWwpO1xuXHR9XG5cblx0aWYgKGNvbnZlcnRbbW9kZWxdLmxhYmVscy5sZW5ndGggIT09IGNvbnZlcnRbbW9kZWxdLmNoYW5uZWxzKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdjaGFubmVsIGFuZCBsYWJlbCBjb3VudHMgbWlzbWF0Y2g6ICcgKyBtb2RlbCk7XG5cdH1cblxuXHRjb25zdCB7Y2hhbm5lbHMsIGxhYmVsc30gPSBjb252ZXJ0W21vZGVsXTtcblx0ZGVsZXRlIGNvbnZlcnRbbW9kZWxdLmNoYW5uZWxzO1xuXHRkZWxldGUgY29udmVydFttb2RlbF0ubGFiZWxzO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udmVydFttb2RlbF0sICdjaGFubmVscycsIHt2YWx1ZTogY2hhbm5lbHN9KTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnZlcnRbbW9kZWxdLCAnbGFiZWxzJywge3ZhbHVlOiBsYWJlbHN9KTtcbn1cblxuY29udmVydC5yZ2IuaHNsID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCByID0gcmdiWzBdIC8gMjU1O1xuXHRjb25zdCBnID0gcmdiWzFdIC8gMjU1O1xuXHRjb25zdCBiID0gcmdiWzJdIC8gMjU1O1xuXHRjb25zdCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKTtcblx0Y29uc3QgbWF4ID0gTWF0aC5tYXgociwgZywgYik7XG5cdGNvbnN0IGRlbHRhID0gbWF4IC0gbWluO1xuXHRsZXQgaDtcblx0bGV0IHM7XG5cblx0aWYgKG1heCA9PT0gbWluKSB7XG5cdFx0aCA9IDA7XG5cdH0gZWxzZSBpZiAociA9PT0gbWF4KSB7XG5cdFx0aCA9IChnIC0gYikgLyBkZWx0YTtcblx0fSBlbHNlIGlmIChnID09PSBtYXgpIHtcblx0XHRoID0gMiArIChiIC0gcikgLyBkZWx0YTtcblx0fSBlbHNlIGlmIChiID09PSBtYXgpIHtcblx0XHRoID0gNCArIChyIC0gZykgLyBkZWx0YTtcblx0fVxuXG5cdGggPSBNYXRoLm1pbihoICogNjAsIDM2MCk7XG5cblx0aWYgKGggPCAwKSB7XG5cdFx0aCArPSAzNjA7XG5cdH1cblxuXHRjb25zdCBsID0gKG1pbiArIG1heCkgLyAyO1xuXG5cdGlmIChtYXggPT09IG1pbikge1xuXHRcdHMgPSAwO1xuXHR9IGVsc2UgaWYgKGwgPD0gMC41KSB7XG5cdFx0cyA9IGRlbHRhIC8gKG1heCArIG1pbik7XG5cdH0gZWxzZSB7XG5cdFx0cyA9IGRlbHRhIC8gKDIgLSBtYXggLSBtaW4pO1xuXHR9XG5cblx0cmV0dXJuIFtoLCBzICogMTAwLCBsICogMTAwXTtcbn07XG5cbmNvbnZlcnQucmdiLmhzdiA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0bGV0IHJkaWY7XG5cdGxldCBnZGlmO1xuXHRsZXQgYmRpZjtcblx0bGV0IGg7XG5cdGxldCBzO1xuXG5cdGNvbnN0IHIgPSByZ2JbMF0gLyAyNTU7XG5cdGNvbnN0IGcgPSByZ2JbMV0gLyAyNTU7XG5cdGNvbnN0IGIgPSByZ2JbMl0gLyAyNTU7XG5cdGNvbnN0IHYgPSBNYXRoLm1heChyLCBnLCBiKTtcblx0Y29uc3QgZGlmZiA9IHYgLSBNYXRoLm1pbihyLCBnLCBiKTtcblx0Y29uc3QgZGlmZmMgPSBmdW5jdGlvbiAoYykge1xuXHRcdHJldHVybiAodiAtIGMpIC8gNiAvIGRpZmYgKyAxIC8gMjtcblx0fTtcblxuXHRpZiAoZGlmZiA9PT0gMCkge1xuXHRcdGggPSAwO1xuXHRcdHMgPSAwO1xuXHR9IGVsc2Uge1xuXHRcdHMgPSBkaWZmIC8gdjtcblx0XHRyZGlmID0gZGlmZmMocik7XG5cdFx0Z2RpZiA9IGRpZmZjKGcpO1xuXHRcdGJkaWYgPSBkaWZmYyhiKTtcblxuXHRcdGlmIChyID09PSB2KSB7XG5cdFx0XHRoID0gYmRpZiAtIGdkaWY7XG5cdFx0fSBlbHNlIGlmIChnID09PSB2KSB7XG5cdFx0XHRoID0gKDEgLyAzKSArIHJkaWYgLSBiZGlmO1xuXHRcdH0gZWxzZSBpZiAoYiA9PT0gdikge1xuXHRcdFx0aCA9ICgyIC8gMykgKyBnZGlmIC0gcmRpZjtcblx0XHR9XG5cblx0XHRpZiAoaCA8IDApIHtcblx0XHRcdGggKz0gMTtcblx0XHR9IGVsc2UgaWYgKGggPiAxKSB7XG5cdFx0XHRoIC09IDE7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIFtcblx0XHRoICogMzYwLFxuXHRcdHMgKiAxMDAsXG5cdFx0diAqIDEwMFxuXHRdO1xufTtcblxuY29udmVydC5yZ2IuaHdiID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCByID0gcmdiWzBdO1xuXHRjb25zdCBnID0gcmdiWzFdO1xuXHRsZXQgYiA9IHJnYlsyXTtcblx0Y29uc3QgaCA9IGNvbnZlcnQucmdiLmhzbChyZ2IpWzBdO1xuXHRjb25zdCB3ID0gMSAvIDI1NSAqIE1hdGgubWluKHIsIE1hdGgubWluKGcsIGIpKTtcblxuXHRiID0gMSAtIDEgLyAyNTUgKiBNYXRoLm1heChyLCBNYXRoLm1heChnLCBiKSk7XG5cblx0cmV0dXJuIFtoLCB3ICogMTAwLCBiICogMTAwXTtcbn07XG5cbmNvbnZlcnQucmdiLmNteWsgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHIgPSByZ2JbMF0gLyAyNTU7XG5cdGNvbnN0IGcgPSByZ2JbMV0gLyAyNTU7XG5cdGNvbnN0IGIgPSByZ2JbMl0gLyAyNTU7XG5cblx0Y29uc3QgayA9IE1hdGgubWluKDEgLSByLCAxIC0gZywgMSAtIGIpO1xuXHRjb25zdCBjID0gKDEgLSByIC0gaykgLyAoMSAtIGspIHx8IDA7XG5cdGNvbnN0IG0gPSAoMSAtIGcgLSBrKSAvICgxIC0gaykgfHwgMDtcblx0Y29uc3QgeSA9ICgxIC0gYiAtIGspIC8gKDEgLSBrKSB8fCAwO1xuXG5cdHJldHVybiBbYyAqIDEwMCwgbSAqIDEwMCwgeSAqIDEwMCwgayAqIDEwMF07XG59O1xuXG5mdW5jdGlvbiBjb21wYXJhdGl2ZURpc3RhbmNlKHgsIHkpIHtcblx0Lypcblx0XHRTZWUgaHR0cHM6Ly9lbi5tLndpa2lwZWRpYS5vcmcvd2lraS9FdWNsaWRlYW5fZGlzdGFuY2UjU3F1YXJlZF9FdWNsaWRlYW5fZGlzdGFuY2Vcblx0Ki9cblx0cmV0dXJuIChcblx0XHQoKHhbMF0gLSB5WzBdKSAqKiAyKSArXG5cdFx0KCh4WzFdIC0geVsxXSkgKiogMikgK1xuXHRcdCgoeFsyXSAtIHlbMl0pICoqIDIpXG5cdCk7XG59XG5cbmNvbnZlcnQucmdiLmtleXdvcmQgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHJldmVyc2VkID0gcmV2ZXJzZUtleXdvcmRzW3JnYl07XG5cdGlmIChyZXZlcnNlZCkge1xuXHRcdHJldHVybiByZXZlcnNlZDtcblx0fVxuXG5cdGxldCBjdXJyZW50Q2xvc2VzdERpc3RhbmNlID0gSW5maW5pdHk7XG5cdGxldCBjdXJyZW50Q2xvc2VzdEtleXdvcmQ7XG5cblx0Zm9yIChjb25zdCBrZXl3b3JkIG9mIE9iamVjdC5rZXlzKGNzc0tleXdvcmRzKSkge1xuXHRcdGNvbnN0IHZhbHVlID0gY3NzS2V5d29yZHNba2V5d29yZF07XG5cblx0XHQvLyBDb21wdXRlIGNvbXBhcmF0aXZlIGRpc3RhbmNlXG5cdFx0Y29uc3QgZGlzdGFuY2UgPSBjb21wYXJhdGl2ZURpc3RhbmNlKHJnYiwgdmFsdWUpO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgaXRzIGxlc3MsIGlmIHNvIHNldCBhcyBjbG9zZXN0XG5cdFx0aWYgKGRpc3RhbmNlIDwgY3VycmVudENsb3Nlc3REaXN0YW5jZSkge1xuXHRcdFx0Y3VycmVudENsb3Nlc3REaXN0YW5jZSA9IGRpc3RhbmNlO1xuXHRcdFx0Y3VycmVudENsb3Nlc3RLZXl3b3JkID0ga2V5d29yZDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY3VycmVudENsb3Nlc3RLZXl3b3JkO1xufTtcblxuY29udmVydC5rZXl3b3JkLnJnYiA9IGZ1bmN0aW9uIChrZXl3b3JkKSB7XG5cdHJldHVybiBjc3NLZXl3b3Jkc1trZXl3b3JkXTtcbn07XG5cbmNvbnZlcnQucmdiLnh5eiA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0bGV0IHIgPSByZ2JbMF0gLyAyNTU7XG5cdGxldCBnID0gcmdiWzFdIC8gMjU1O1xuXHRsZXQgYiA9IHJnYlsyXSAvIDI1NTtcblxuXHQvLyBBc3N1bWUgc1JHQlxuXHRyID0gciA+IDAuMDQwNDUgPyAoKChyICsgMC4wNTUpIC8gMS4wNTUpICoqIDIuNCkgOiAociAvIDEyLjkyKTtcblx0ZyA9IGcgPiAwLjA0MDQ1ID8gKCgoZyArIDAuMDU1KSAvIDEuMDU1KSAqKiAyLjQpIDogKGcgLyAxMi45Mik7XG5cdGIgPSBiID4gMC4wNDA0NSA/ICgoKGIgKyAwLjA1NSkgLyAxLjA1NSkgKiogMi40KSA6IChiIC8gMTIuOTIpO1xuXG5cdGNvbnN0IHggPSAociAqIDAuNDEyNCkgKyAoZyAqIDAuMzU3NikgKyAoYiAqIDAuMTgwNSk7XG5cdGNvbnN0IHkgPSAociAqIDAuMjEyNikgKyAoZyAqIDAuNzE1MikgKyAoYiAqIDAuMDcyMik7XG5cdGNvbnN0IHogPSAociAqIDAuMDE5MykgKyAoZyAqIDAuMTE5MikgKyAoYiAqIDAuOTUwNSk7XG5cblx0cmV0dXJuIFt4ICogMTAwLCB5ICogMTAwLCB6ICogMTAwXTtcbn07XG5cbmNvbnZlcnQucmdiLmxhYiA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgeHl6ID0gY29udmVydC5yZ2IueHl6KHJnYik7XG5cdGxldCB4ID0geHl6WzBdO1xuXHRsZXQgeSA9IHh5elsxXTtcblx0bGV0IHogPSB4eXpbMl07XG5cblx0eCAvPSA5NS4wNDc7XG5cdHkgLz0gMTAwO1xuXHR6IC89IDEwOC44ODM7XG5cblx0eCA9IHggPiAwLjAwODg1NiA/ICh4ICoqICgxIC8gMykpIDogKDcuNzg3ICogeCkgKyAoMTYgLyAxMTYpO1xuXHR5ID0geSA+IDAuMDA4ODU2ID8gKHkgKiogKDEgLyAzKSkgOiAoNy43ODcgKiB5KSArICgxNiAvIDExNik7XG5cdHogPSB6ID4gMC4wMDg4NTYgPyAoeiAqKiAoMSAvIDMpKSA6ICg3Ljc4NyAqIHopICsgKDE2IC8gMTE2KTtcblxuXHRjb25zdCBsID0gKDExNiAqIHkpIC0gMTY7XG5cdGNvbnN0IGEgPSA1MDAgKiAoeCAtIHkpO1xuXHRjb25zdCBiID0gMjAwICogKHkgLSB6KTtcblxuXHRyZXR1cm4gW2wsIGEsIGJdO1xufTtcblxuY29udmVydC5oc2wucmdiID0gZnVuY3Rpb24gKGhzbCkge1xuXHRjb25zdCBoID0gaHNsWzBdIC8gMzYwO1xuXHRjb25zdCBzID0gaHNsWzFdIC8gMTAwO1xuXHRjb25zdCBsID0gaHNsWzJdIC8gMTAwO1xuXHRsZXQgdDI7XG5cdGxldCB0Mztcblx0bGV0IHZhbDtcblxuXHRpZiAocyA9PT0gMCkge1xuXHRcdHZhbCA9IGwgKiAyNTU7XG5cdFx0cmV0dXJuIFt2YWwsIHZhbCwgdmFsXTtcblx0fVxuXG5cdGlmIChsIDwgMC41KSB7XG5cdFx0dDIgPSBsICogKDEgKyBzKTtcblx0fSBlbHNlIHtcblx0XHR0MiA9IGwgKyBzIC0gbCAqIHM7XG5cdH1cblxuXHRjb25zdCB0MSA9IDIgKiBsIC0gdDI7XG5cblx0Y29uc3QgcmdiID0gWzAsIDAsIDBdO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xuXHRcdHQzID0gaCArIDEgLyAzICogLShpIC0gMSk7XG5cdFx0aWYgKHQzIDwgMCkge1xuXHRcdFx0dDMrKztcblx0XHR9XG5cblx0XHRpZiAodDMgPiAxKSB7XG5cdFx0XHR0My0tO1xuXHRcdH1cblxuXHRcdGlmICg2ICogdDMgPCAxKSB7XG5cdFx0XHR2YWwgPSB0MSArICh0MiAtIHQxKSAqIDYgKiB0Mztcblx0XHR9IGVsc2UgaWYgKDIgKiB0MyA8IDEpIHtcblx0XHRcdHZhbCA9IHQyO1xuXHRcdH0gZWxzZSBpZiAoMyAqIHQzIDwgMikge1xuXHRcdFx0dmFsID0gdDEgKyAodDIgLSB0MSkgKiAoMiAvIDMgLSB0MykgKiA2O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YWwgPSB0MTtcblx0XHR9XG5cblx0XHRyZ2JbaV0gPSB2YWwgKiAyNTU7XG5cdH1cblxuXHRyZXR1cm4gcmdiO1xufTtcblxuY29udmVydC5oc2wuaHN2ID0gZnVuY3Rpb24gKGhzbCkge1xuXHRjb25zdCBoID0gaHNsWzBdO1xuXHRsZXQgcyA9IGhzbFsxXSAvIDEwMDtcblx0bGV0IGwgPSBoc2xbMl0gLyAxMDA7XG5cdGxldCBzbWluID0gcztcblx0Y29uc3QgbG1pbiA9IE1hdGgubWF4KGwsIDAuMDEpO1xuXG5cdGwgKj0gMjtcblx0cyAqPSAobCA8PSAxKSA/IGwgOiAyIC0gbDtcblx0c21pbiAqPSBsbWluIDw9IDEgPyBsbWluIDogMiAtIGxtaW47XG5cdGNvbnN0IHYgPSAobCArIHMpIC8gMjtcblx0Y29uc3Qgc3YgPSBsID09PSAwID8gKDIgKiBzbWluKSAvIChsbWluICsgc21pbikgOiAoMiAqIHMpIC8gKGwgKyBzKTtcblxuXHRyZXR1cm4gW2gsIHN2ICogMTAwLCB2ICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaHN2LnJnYiA9IGZ1bmN0aW9uIChoc3YpIHtcblx0Y29uc3QgaCA9IGhzdlswXSAvIDYwO1xuXHRjb25zdCBzID0gaHN2WzFdIC8gMTAwO1xuXHRsZXQgdiA9IGhzdlsyXSAvIDEwMDtcblx0Y29uc3QgaGkgPSBNYXRoLmZsb29yKGgpICUgNjtcblxuXHRjb25zdCBmID0gaCAtIE1hdGguZmxvb3IoaCk7XG5cdGNvbnN0IHAgPSAyNTUgKiB2ICogKDEgLSBzKTtcblx0Y29uc3QgcSA9IDI1NSAqIHYgKiAoMSAtIChzICogZikpO1xuXHRjb25zdCB0ID0gMjU1ICogdiAqICgxIC0gKHMgKiAoMSAtIGYpKSk7XG5cdHYgKj0gMjU1O1xuXG5cdHN3aXRjaCAoaGkpIHtcblx0XHRjYXNlIDA6XG5cdFx0XHRyZXR1cm4gW3YsIHQsIHBdO1xuXHRcdGNhc2UgMTpcblx0XHRcdHJldHVybiBbcSwgdiwgcF07XG5cdFx0Y2FzZSAyOlxuXHRcdFx0cmV0dXJuIFtwLCB2LCB0XTtcblx0XHRjYXNlIDM6XG5cdFx0XHRyZXR1cm4gW3AsIHEsIHZdO1xuXHRcdGNhc2UgNDpcblx0XHRcdHJldHVybiBbdCwgcCwgdl07XG5cdFx0Y2FzZSA1OlxuXHRcdFx0cmV0dXJuIFt2LCBwLCBxXTtcblx0fVxufTtcblxuY29udmVydC5oc3YuaHNsID0gZnVuY3Rpb24gKGhzdikge1xuXHRjb25zdCBoID0gaHN2WzBdO1xuXHRjb25zdCBzID0gaHN2WzFdIC8gMTAwO1xuXHRjb25zdCB2ID0gaHN2WzJdIC8gMTAwO1xuXHRjb25zdCB2bWluID0gTWF0aC5tYXgodiwgMC4wMSk7XG5cdGxldCBzbDtcblx0bGV0IGw7XG5cblx0bCA9ICgyIC0gcykgKiB2O1xuXHRjb25zdCBsbWluID0gKDIgLSBzKSAqIHZtaW47XG5cdHNsID0gcyAqIHZtaW47XG5cdHNsIC89IChsbWluIDw9IDEpID8gbG1pbiA6IDIgLSBsbWluO1xuXHRzbCA9IHNsIHx8IDA7XG5cdGwgLz0gMjtcblxuXHRyZXR1cm4gW2gsIHNsICogMTAwLCBsICogMTAwXTtcbn07XG5cbi8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzcy1jb2xvci8jaHdiLXRvLXJnYlxuY29udmVydC5od2IucmdiID0gZnVuY3Rpb24gKGh3Yikge1xuXHRjb25zdCBoID0gaHdiWzBdIC8gMzYwO1xuXHRsZXQgd2ggPSBod2JbMV0gLyAxMDA7XG5cdGxldCBibCA9IGh3YlsyXSAvIDEwMDtcblx0Y29uc3QgcmF0aW8gPSB3aCArIGJsO1xuXHRsZXQgZjtcblxuXHQvLyBXaCArIGJsIGNhbnQgYmUgPiAxXG5cdGlmIChyYXRpbyA+IDEpIHtcblx0XHR3aCAvPSByYXRpbztcblx0XHRibCAvPSByYXRpbztcblx0fVxuXG5cdGNvbnN0IGkgPSBNYXRoLmZsb29yKDYgKiBoKTtcblx0Y29uc3QgdiA9IDEgLSBibDtcblx0ZiA9IDYgKiBoIC0gaTtcblxuXHRpZiAoKGkgJiAweDAxKSAhPT0gMCkge1xuXHRcdGYgPSAxIC0gZjtcblx0fVxuXG5cdGNvbnN0IG4gPSB3aCArIGYgKiAodiAtIHdoKTsgLy8gTGluZWFyIGludGVycG9sYXRpb25cblxuXHRsZXQgcjtcblx0bGV0IGc7XG5cdGxldCBiO1xuXHQvKiBlc2xpbnQtZGlzYWJsZSBtYXgtc3RhdGVtZW50cy1wZXItbGluZSxuby1tdWx0aS1zcGFjZXMgKi9cblx0c3dpdGNoIChpKSB7XG5cdFx0ZGVmYXVsdDpcblx0XHRjYXNlIDY6XG5cdFx0Y2FzZSAwOiByID0gdjsgIGcgPSBuOyAgYiA9IHdoOyBicmVhaztcblx0XHRjYXNlIDE6IHIgPSBuOyAgZyA9IHY7ICBiID0gd2g7IGJyZWFrO1xuXHRcdGNhc2UgMjogciA9IHdoOyBnID0gdjsgIGIgPSBuOyBicmVhaztcblx0XHRjYXNlIDM6IHIgPSB3aDsgZyA9IG47ICBiID0gdjsgYnJlYWs7XG5cdFx0Y2FzZSA0OiByID0gbjsgIGcgPSB3aDsgYiA9IHY7IGJyZWFrO1xuXHRcdGNhc2UgNTogciA9IHY7ICBnID0gd2g7IGIgPSBuOyBicmVhaztcblx0fVxuXHQvKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzLXBlci1saW5lLG5vLW11bHRpLXNwYWNlcyAqL1xuXG5cdHJldHVybiBbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NV07XG59O1xuXG5jb252ZXJ0LmNteWsucmdiID0gZnVuY3Rpb24gKGNteWspIHtcblx0Y29uc3QgYyA9IGNteWtbMF0gLyAxMDA7XG5cdGNvbnN0IG0gPSBjbXlrWzFdIC8gMTAwO1xuXHRjb25zdCB5ID0gY215a1syXSAvIDEwMDtcblx0Y29uc3QgayA9IGNteWtbM10gLyAxMDA7XG5cblx0Y29uc3QgciA9IDEgLSBNYXRoLm1pbigxLCBjICogKDEgLSBrKSArIGspO1xuXHRjb25zdCBnID0gMSAtIE1hdGgubWluKDEsIG0gKiAoMSAtIGspICsgayk7XG5cdGNvbnN0IGIgPSAxIC0gTWF0aC5taW4oMSwgeSAqICgxIC0gaykgKyBrKTtcblxuXHRyZXR1cm4gW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTVdO1xufTtcblxuY29udmVydC54eXoucmdiID0gZnVuY3Rpb24gKHh5eikge1xuXHRjb25zdCB4ID0geHl6WzBdIC8gMTAwO1xuXHRjb25zdCB5ID0geHl6WzFdIC8gMTAwO1xuXHRjb25zdCB6ID0geHl6WzJdIC8gMTAwO1xuXHRsZXQgcjtcblx0bGV0IGc7XG5cdGxldCBiO1xuXG5cdHIgPSAoeCAqIDMuMjQwNikgKyAoeSAqIC0xLjUzNzIpICsgKHogKiAtMC40OTg2KTtcblx0ZyA9ICh4ICogLTAuOTY4OSkgKyAoeSAqIDEuODc1OCkgKyAoeiAqIDAuMDQxNSk7XG5cdGIgPSAoeCAqIDAuMDU1NykgKyAoeSAqIC0wLjIwNDApICsgKHogKiAxLjA1NzApO1xuXG5cdC8vIEFzc3VtZSBzUkdCXG5cdHIgPSByID4gMC4wMDMxMzA4XG5cdFx0PyAoKDEuMDU1ICogKHIgKiogKDEuMCAvIDIuNCkpKSAtIDAuMDU1KVxuXHRcdDogciAqIDEyLjkyO1xuXG5cdGcgPSBnID4gMC4wMDMxMzA4XG5cdFx0PyAoKDEuMDU1ICogKGcgKiogKDEuMCAvIDIuNCkpKSAtIDAuMDU1KVxuXHRcdDogZyAqIDEyLjkyO1xuXG5cdGIgPSBiID4gMC4wMDMxMzA4XG5cdFx0PyAoKDEuMDU1ICogKGIgKiogKDEuMCAvIDIuNCkpKSAtIDAuMDU1KVxuXHRcdDogYiAqIDEyLjkyO1xuXG5cdHIgPSBNYXRoLm1pbihNYXRoLm1heCgwLCByKSwgMSk7XG5cdGcgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBnKSwgMSk7XG5cdGIgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBiKSwgMSk7XG5cblx0cmV0dXJuIFtyICogMjU1LCBnICogMjU1LCBiICogMjU1XTtcbn07XG5cbmNvbnZlcnQueHl6LmxhYiA9IGZ1bmN0aW9uICh4eXopIHtcblx0bGV0IHggPSB4eXpbMF07XG5cdGxldCB5ID0geHl6WzFdO1xuXHRsZXQgeiA9IHh5elsyXTtcblxuXHR4IC89IDk1LjA0Nztcblx0eSAvPSAxMDA7XG5cdHogLz0gMTA4Ljg4MztcblxuXHR4ID0geCA+IDAuMDA4ODU2ID8gKHggKiogKDEgLyAzKSkgOiAoNy43ODcgKiB4KSArICgxNiAvIDExNik7XG5cdHkgPSB5ID4gMC4wMDg4NTYgPyAoeSAqKiAoMSAvIDMpKSA6ICg3Ljc4NyAqIHkpICsgKDE2IC8gMTE2KTtcblx0eiA9IHogPiAwLjAwODg1NiA/ICh6ICoqICgxIC8gMykpIDogKDcuNzg3ICogeikgKyAoMTYgLyAxMTYpO1xuXG5cdGNvbnN0IGwgPSAoMTE2ICogeSkgLSAxNjtcblx0Y29uc3QgYSA9IDUwMCAqICh4IC0geSk7XG5cdGNvbnN0IGIgPSAyMDAgKiAoeSAtIHopO1xuXG5cdHJldHVybiBbbCwgYSwgYl07XG59O1xuXG5jb252ZXJ0LmxhYi54eXogPSBmdW5jdGlvbiAobGFiKSB7XG5cdGNvbnN0IGwgPSBsYWJbMF07XG5cdGNvbnN0IGEgPSBsYWJbMV07XG5cdGNvbnN0IGIgPSBsYWJbMl07XG5cdGxldCB4O1xuXHRsZXQgeTtcblx0bGV0IHo7XG5cblx0eSA9IChsICsgMTYpIC8gMTE2O1xuXHR4ID0gYSAvIDUwMCArIHk7XG5cdHogPSB5IC0gYiAvIDIwMDtcblxuXHRjb25zdCB5MiA9IHkgKiogMztcblx0Y29uc3QgeDIgPSB4ICoqIDM7XG5cdGNvbnN0IHoyID0geiAqKiAzO1xuXHR5ID0geTIgPiAwLjAwODg1NiA/IHkyIDogKHkgLSAxNiAvIDExNikgLyA3Ljc4Nztcblx0eCA9IHgyID4gMC4wMDg4NTYgPyB4MiA6ICh4IC0gMTYgLyAxMTYpIC8gNy43ODc7XG5cdHogPSB6MiA+IDAuMDA4ODU2ID8gejIgOiAoeiAtIDE2IC8gMTE2KSAvIDcuNzg3O1xuXG5cdHggKj0gOTUuMDQ3O1xuXHR5ICo9IDEwMDtcblx0eiAqPSAxMDguODgzO1xuXG5cdHJldHVybiBbeCwgeSwgel07XG59O1xuXG5jb252ZXJ0LmxhYi5sY2ggPSBmdW5jdGlvbiAobGFiKSB7XG5cdGNvbnN0IGwgPSBsYWJbMF07XG5cdGNvbnN0IGEgPSBsYWJbMV07XG5cdGNvbnN0IGIgPSBsYWJbMl07XG5cdGxldCBoO1xuXG5cdGNvbnN0IGhyID0gTWF0aC5hdGFuMihiLCBhKTtcblx0aCA9IGhyICogMzYwIC8gMiAvIE1hdGguUEk7XG5cblx0aWYgKGggPCAwKSB7XG5cdFx0aCArPSAzNjA7XG5cdH1cblxuXHRjb25zdCBjID0gTWF0aC5zcXJ0KGEgKiBhICsgYiAqIGIpO1xuXG5cdHJldHVybiBbbCwgYywgaF07XG59O1xuXG5jb252ZXJ0LmxjaC5sYWIgPSBmdW5jdGlvbiAobGNoKSB7XG5cdGNvbnN0IGwgPSBsY2hbMF07XG5cdGNvbnN0IGMgPSBsY2hbMV07XG5cdGNvbnN0IGggPSBsY2hbMl07XG5cblx0Y29uc3QgaHIgPSBoIC8gMzYwICogMiAqIE1hdGguUEk7XG5cdGNvbnN0IGEgPSBjICogTWF0aC5jb3MoaHIpO1xuXHRjb25zdCBiID0gYyAqIE1hdGguc2luKGhyKTtcblxuXHRyZXR1cm4gW2wsIGEsIGJdO1xufTtcblxuY29udmVydC5yZ2IuYW5zaTE2ID0gZnVuY3Rpb24gKGFyZ3MsIHNhdHVyYXRpb24gPSBudWxsKSB7XG5cdGNvbnN0IFtyLCBnLCBiXSA9IGFyZ3M7XG5cdGxldCB2YWx1ZSA9IHNhdHVyYXRpb24gPT09IG51bGwgPyBjb252ZXJ0LnJnYi5oc3YoYXJncylbMl0gOiBzYXR1cmF0aW9uOyAvLyBIc3YgLT4gYW5zaTE2IG9wdGltaXphdGlvblxuXG5cdHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSAvIDUwKTtcblxuXHRpZiAodmFsdWUgPT09IDApIHtcblx0XHRyZXR1cm4gMzA7XG5cdH1cblxuXHRsZXQgYW5zaSA9IDMwXG5cdFx0KyAoKE1hdGgucm91bmQoYiAvIDI1NSkgPDwgMilcblx0XHR8IChNYXRoLnJvdW5kKGcgLyAyNTUpIDw8IDEpXG5cdFx0fCBNYXRoLnJvdW5kKHIgLyAyNTUpKTtcblxuXHRpZiAodmFsdWUgPT09IDIpIHtcblx0XHRhbnNpICs9IDYwO1xuXHR9XG5cblx0cmV0dXJuIGFuc2k7XG59O1xuXG5jb252ZXJ0Lmhzdi5hbnNpMTYgPSBmdW5jdGlvbiAoYXJncykge1xuXHQvLyBPcHRpbWl6YXRpb24gaGVyZTsgd2UgYWxyZWFkeSBrbm93IHRoZSB2YWx1ZSBhbmQgZG9uJ3QgbmVlZCB0byBnZXRcblx0Ly8gaXQgY29udmVydGVkIGZvciB1cy5cblx0cmV0dXJuIGNvbnZlcnQucmdiLmFuc2kxNihjb252ZXJ0Lmhzdi5yZ2IoYXJncyksIGFyZ3NbMl0pO1xufTtcblxuY29udmVydC5yZ2IuYW5zaTI1NiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdGNvbnN0IHIgPSBhcmdzWzBdO1xuXHRjb25zdCBnID0gYXJnc1sxXTtcblx0Y29uc3QgYiA9IGFyZ3NbMl07XG5cblx0Ly8gV2UgdXNlIHRoZSBleHRlbmRlZCBncmV5c2NhbGUgcGFsZXR0ZSBoZXJlLCB3aXRoIHRoZSBleGNlcHRpb24gb2Zcblx0Ly8gYmxhY2sgYW5kIHdoaXRlLiBub3JtYWwgcGFsZXR0ZSBvbmx5IGhhcyA0IGdyZXlzY2FsZSBzaGFkZXMuXG5cdGlmIChyID09PSBnICYmIGcgPT09IGIpIHtcblx0XHRpZiAociA8IDgpIHtcblx0XHRcdHJldHVybiAxNjtcblx0XHR9XG5cblx0XHRpZiAociA+IDI0OCkge1xuXHRcdFx0cmV0dXJuIDIzMTtcblx0XHR9XG5cblx0XHRyZXR1cm4gTWF0aC5yb3VuZCgoKHIgLSA4KSAvIDI0NykgKiAyNCkgKyAyMzI7XG5cdH1cblxuXHRjb25zdCBhbnNpID0gMTZcblx0XHQrICgzNiAqIE1hdGgucm91bmQociAvIDI1NSAqIDUpKVxuXHRcdCsgKDYgKiBNYXRoLnJvdW5kKGcgLyAyNTUgKiA1KSlcblx0XHQrIE1hdGgucm91bmQoYiAvIDI1NSAqIDUpO1xuXG5cdHJldHVybiBhbnNpO1xufTtcblxuY29udmVydC5hbnNpMTYucmdiID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0bGV0IGNvbG9yID0gYXJncyAlIDEwO1xuXG5cdC8vIEhhbmRsZSBncmV5c2NhbGVcblx0aWYgKGNvbG9yID09PSAwIHx8IGNvbG9yID09PSA3KSB7XG5cdFx0aWYgKGFyZ3MgPiA1MCkge1xuXHRcdFx0Y29sb3IgKz0gMy41O1xuXHRcdH1cblxuXHRcdGNvbG9yID0gY29sb3IgLyAxMC41ICogMjU1O1xuXG5cdFx0cmV0dXJuIFtjb2xvciwgY29sb3IsIGNvbG9yXTtcblx0fVxuXG5cdGNvbnN0IG11bHQgPSAofn4oYXJncyA+IDUwKSArIDEpICogMC41O1xuXHRjb25zdCByID0gKChjb2xvciAmIDEpICogbXVsdCkgKiAyNTU7XG5cdGNvbnN0IGcgPSAoKChjb2xvciA+PiAxKSAmIDEpICogbXVsdCkgKiAyNTU7XG5cdGNvbnN0IGIgPSAoKChjb2xvciA+PiAyKSAmIDEpICogbXVsdCkgKiAyNTU7XG5cblx0cmV0dXJuIFtyLCBnLCBiXTtcbn07XG5cbmNvbnZlcnQuYW5zaTI1Ni5yZ2IgPSBmdW5jdGlvbiAoYXJncykge1xuXHQvLyBIYW5kbGUgZ3JleXNjYWxlXG5cdGlmIChhcmdzID49IDIzMikge1xuXHRcdGNvbnN0IGMgPSAoYXJncyAtIDIzMikgKiAxMCArIDg7XG5cdFx0cmV0dXJuIFtjLCBjLCBjXTtcblx0fVxuXG5cdGFyZ3MgLT0gMTY7XG5cblx0bGV0IHJlbTtcblx0Y29uc3QgciA9IE1hdGguZmxvb3IoYXJncyAvIDM2KSAvIDUgKiAyNTU7XG5cdGNvbnN0IGcgPSBNYXRoLmZsb29yKChyZW0gPSBhcmdzICUgMzYpIC8gNikgLyA1ICogMjU1O1xuXHRjb25zdCBiID0gKHJlbSAlIDYpIC8gNSAqIDI1NTtcblxuXHRyZXR1cm4gW3IsIGcsIGJdO1xufTtcblxuY29udmVydC5yZ2IuaGV4ID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0Y29uc3QgaW50ZWdlciA9ICgoTWF0aC5yb3VuZChhcmdzWzBdKSAmIDB4RkYpIDw8IDE2KVxuXHRcdCsgKChNYXRoLnJvdW5kKGFyZ3NbMV0pICYgMHhGRikgPDwgOClcblx0XHQrIChNYXRoLnJvdW5kKGFyZ3NbMl0pICYgMHhGRik7XG5cblx0Y29uc3Qgc3RyaW5nID0gaW50ZWdlci50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblx0cmV0dXJuICcwMDAwMDAnLnN1YnN0cmluZyhzdHJpbmcubGVuZ3RoKSArIHN0cmluZztcbn07XG5cbmNvbnZlcnQuaGV4LnJnYiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdGNvbnN0IG1hdGNoID0gYXJncy50b1N0cmluZygxNikubWF0Y2goL1thLWYwLTldezZ9fFthLWYwLTldezN9L2kpO1xuXHRpZiAoIW1hdGNoKSB7XG5cdFx0cmV0dXJuIFswLCAwLCAwXTtcblx0fVxuXG5cdGxldCBjb2xvclN0cmluZyA9IG1hdGNoWzBdO1xuXG5cdGlmIChtYXRjaFswXS5sZW5ndGggPT09IDMpIHtcblx0XHRjb2xvclN0cmluZyA9IGNvbG9yU3RyaW5nLnNwbGl0KCcnKS5tYXAoY2hhciA9PiB7XG5cdFx0XHRyZXR1cm4gY2hhciArIGNoYXI7XG5cdFx0fSkuam9pbignJyk7XG5cdH1cblxuXHRjb25zdCBpbnRlZ2VyID0gcGFyc2VJbnQoY29sb3JTdHJpbmcsIDE2KTtcblx0Y29uc3QgciA9IChpbnRlZ2VyID4+IDE2KSAmIDB4RkY7XG5cdGNvbnN0IGcgPSAoaW50ZWdlciA+PiA4KSAmIDB4RkY7XG5cdGNvbnN0IGIgPSBpbnRlZ2VyICYgMHhGRjtcblxuXHRyZXR1cm4gW3IsIGcsIGJdO1xufTtcblxuY29udmVydC5yZ2IuaGNnID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCByID0gcmdiWzBdIC8gMjU1O1xuXHRjb25zdCBnID0gcmdiWzFdIC8gMjU1O1xuXHRjb25zdCBiID0gcmdiWzJdIC8gMjU1O1xuXHRjb25zdCBtYXggPSBNYXRoLm1heChNYXRoLm1heChyLCBnKSwgYik7XG5cdGNvbnN0IG1pbiA9IE1hdGgubWluKE1hdGgubWluKHIsIGcpLCBiKTtcblx0Y29uc3QgY2hyb21hID0gKG1heCAtIG1pbik7XG5cdGxldCBncmF5c2NhbGU7XG5cdGxldCBodWU7XG5cblx0aWYgKGNocm9tYSA8IDEpIHtcblx0XHRncmF5c2NhbGUgPSBtaW4gLyAoMSAtIGNocm9tYSk7XG5cdH0gZWxzZSB7XG5cdFx0Z3JheXNjYWxlID0gMDtcblx0fVxuXG5cdGlmIChjaHJvbWEgPD0gMCkge1xuXHRcdGh1ZSA9IDA7XG5cdH0gZWxzZVxuXHRpZiAobWF4ID09PSByKSB7XG5cdFx0aHVlID0gKChnIC0gYikgLyBjaHJvbWEpICUgNjtcblx0fSBlbHNlXG5cdGlmIChtYXggPT09IGcpIHtcblx0XHRodWUgPSAyICsgKGIgLSByKSAvIGNocm9tYTtcblx0fSBlbHNlIHtcblx0XHRodWUgPSA0ICsgKHIgLSBnKSAvIGNocm9tYTtcblx0fVxuXG5cdGh1ZSAvPSA2O1xuXHRodWUgJT0gMTtcblxuXHRyZXR1cm4gW2h1ZSAqIDM2MCwgY2hyb21hICogMTAwLCBncmF5c2NhbGUgKiAxMDBdO1xufTtcblxuY29udmVydC5oc2wuaGNnID0gZnVuY3Rpb24gKGhzbCkge1xuXHRjb25zdCBzID0gaHNsWzFdIC8gMTAwO1xuXHRjb25zdCBsID0gaHNsWzJdIC8gMTAwO1xuXG5cdGNvbnN0IGMgPSBsIDwgMC41ID8gKDIuMCAqIHMgKiBsKSA6ICgyLjAgKiBzICogKDEuMCAtIGwpKTtcblxuXHRsZXQgZiA9IDA7XG5cdGlmIChjIDwgMS4wKSB7XG5cdFx0ZiA9IChsIC0gMC41ICogYykgLyAoMS4wIC0gYyk7XG5cdH1cblxuXHRyZXR1cm4gW2hzbFswXSwgYyAqIDEwMCwgZiAqIDEwMF07XG59O1xuXG5jb252ZXJ0Lmhzdi5oY2cgPSBmdW5jdGlvbiAoaHN2KSB7XG5cdGNvbnN0IHMgPSBoc3ZbMV0gLyAxMDA7XG5cdGNvbnN0IHYgPSBoc3ZbMl0gLyAxMDA7XG5cblx0Y29uc3QgYyA9IHMgKiB2O1xuXHRsZXQgZiA9IDA7XG5cblx0aWYgKGMgPCAxLjApIHtcblx0XHRmID0gKHYgLSBjKSAvICgxIC0gYyk7XG5cdH1cblxuXHRyZXR1cm4gW2hzdlswXSwgYyAqIDEwMCwgZiAqIDEwMF07XG59O1xuXG5jb252ZXJ0LmhjZy5yZ2IgPSBmdW5jdGlvbiAoaGNnKSB7XG5cdGNvbnN0IGggPSBoY2dbMF0gLyAzNjA7XG5cdGNvbnN0IGMgPSBoY2dbMV0gLyAxMDA7XG5cdGNvbnN0IGcgPSBoY2dbMl0gLyAxMDA7XG5cblx0aWYgKGMgPT09IDAuMCkge1xuXHRcdHJldHVybiBbZyAqIDI1NSwgZyAqIDI1NSwgZyAqIDI1NV07XG5cdH1cblxuXHRjb25zdCBwdXJlID0gWzAsIDAsIDBdO1xuXHRjb25zdCBoaSA9IChoICUgMSkgKiA2O1xuXHRjb25zdCB2ID0gaGkgJSAxO1xuXHRjb25zdCB3ID0gMSAtIHY7XG5cdGxldCBtZyA9IDA7XG5cblx0LyogZXNsaW50LWRpc2FibGUgbWF4LXN0YXRlbWVudHMtcGVyLWxpbmUgKi9cblx0c3dpdGNoIChNYXRoLmZsb29yKGhpKSkge1xuXHRcdGNhc2UgMDpcblx0XHRcdHB1cmVbMF0gPSAxOyBwdXJlWzFdID0gdjsgcHVyZVsyXSA9IDA7IGJyZWFrO1xuXHRcdGNhc2UgMTpcblx0XHRcdHB1cmVbMF0gPSB3OyBwdXJlWzFdID0gMTsgcHVyZVsyXSA9IDA7IGJyZWFrO1xuXHRcdGNhc2UgMjpcblx0XHRcdHB1cmVbMF0gPSAwOyBwdXJlWzFdID0gMTsgcHVyZVsyXSA9IHY7IGJyZWFrO1xuXHRcdGNhc2UgMzpcblx0XHRcdHB1cmVbMF0gPSAwOyBwdXJlWzFdID0gdzsgcHVyZVsyXSA9IDE7IGJyZWFrO1xuXHRcdGNhc2UgNDpcblx0XHRcdHB1cmVbMF0gPSB2OyBwdXJlWzFdID0gMDsgcHVyZVsyXSA9IDE7IGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRwdXJlWzBdID0gMTsgcHVyZVsxXSA9IDA7IHB1cmVbMl0gPSB3O1xuXHR9XG5cdC8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMtcGVyLWxpbmUgKi9cblxuXHRtZyA9ICgxLjAgLSBjKSAqIGc7XG5cblx0cmV0dXJuIFtcblx0XHQoYyAqIHB1cmVbMF0gKyBtZykgKiAyNTUsXG5cdFx0KGMgKiBwdXJlWzFdICsgbWcpICogMjU1LFxuXHRcdChjICogcHVyZVsyXSArIG1nKSAqIDI1NVxuXHRdO1xufTtcblxuY29udmVydC5oY2cuaHN2ID0gZnVuY3Rpb24gKGhjZykge1xuXHRjb25zdCBjID0gaGNnWzFdIC8gMTAwO1xuXHRjb25zdCBnID0gaGNnWzJdIC8gMTAwO1xuXG5cdGNvbnN0IHYgPSBjICsgZyAqICgxLjAgLSBjKTtcblx0bGV0IGYgPSAwO1xuXG5cdGlmICh2ID4gMC4wKSB7XG5cdFx0ZiA9IGMgLyB2O1xuXHR9XG5cblx0cmV0dXJuIFtoY2dbMF0sIGYgKiAxMDAsIHYgKiAxMDBdO1xufTtcblxuY29udmVydC5oY2cuaHNsID0gZnVuY3Rpb24gKGhjZykge1xuXHRjb25zdCBjID0gaGNnWzFdIC8gMTAwO1xuXHRjb25zdCBnID0gaGNnWzJdIC8gMTAwO1xuXG5cdGNvbnN0IGwgPSBnICogKDEuMCAtIGMpICsgMC41ICogYztcblx0bGV0IHMgPSAwO1xuXG5cdGlmIChsID4gMC4wICYmIGwgPCAwLjUpIHtcblx0XHRzID0gYyAvICgyICogbCk7XG5cdH0gZWxzZVxuXHRpZiAobCA+PSAwLjUgJiYgbCA8IDEuMCkge1xuXHRcdHMgPSBjIC8gKDIgKiAoMSAtIGwpKTtcblx0fVxuXG5cdHJldHVybiBbaGNnWzBdLCBzICogMTAwLCBsICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaGNnLmh3YiA9IGZ1bmN0aW9uIChoY2cpIHtcblx0Y29uc3QgYyA9IGhjZ1sxXSAvIDEwMDtcblx0Y29uc3QgZyA9IGhjZ1syXSAvIDEwMDtcblx0Y29uc3QgdiA9IGMgKyBnICogKDEuMCAtIGMpO1xuXHRyZXR1cm4gW2hjZ1swXSwgKHYgLSBjKSAqIDEwMCwgKDEgLSB2KSAqIDEwMF07XG59O1xuXG5jb252ZXJ0Lmh3Yi5oY2cgPSBmdW5jdGlvbiAoaHdiKSB7XG5cdGNvbnN0IHcgPSBod2JbMV0gLyAxMDA7XG5cdGNvbnN0IGIgPSBod2JbMl0gLyAxMDA7XG5cdGNvbnN0IHYgPSAxIC0gYjtcblx0Y29uc3QgYyA9IHYgLSB3O1xuXHRsZXQgZyA9IDA7XG5cblx0aWYgKGMgPCAxKSB7XG5cdFx0ZyA9ICh2IC0gYykgLyAoMSAtIGMpO1xuXHR9XG5cblx0cmV0dXJuIFtod2JbMF0sIGMgKiAxMDAsIGcgKiAxMDBdO1xufTtcblxuY29udmVydC5hcHBsZS5yZ2IgPSBmdW5jdGlvbiAoYXBwbGUpIHtcblx0cmV0dXJuIFsoYXBwbGVbMF0gLyA2NTUzNSkgKiAyNTUsIChhcHBsZVsxXSAvIDY1NTM1KSAqIDI1NSwgKGFwcGxlWzJdIC8gNjU1MzUpICogMjU1XTtcbn07XG5cbmNvbnZlcnQucmdiLmFwcGxlID0gZnVuY3Rpb24gKHJnYikge1xuXHRyZXR1cm4gWyhyZ2JbMF0gLyAyNTUpICogNjU1MzUsIChyZ2JbMV0gLyAyNTUpICogNjU1MzUsIChyZ2JbMl0gLyAyNTUpICogNjU1MzVdO1xufTtcblxuY29udmVydC5ncmF5LnJnYiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdHJldHVybiBbYXJnc1swXSAvIDEwMCAqIDI1NSwgYXJnc1swXSAvIDEwMCAqIDI1NSwgYXJnc1swXSAvIDEwMCAqIDI1NV07XG59O1xuXG5jb252ZXJ0LmdyYXkuaHNsID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0cmV0dXJuIFswLCAwLCBhcmdzWzBdXTtcbn07XG5cbmNvbnZlcnQuZ3JheS5oc3YgPSBjb252ZXJ0LmdyYXkuaHNsO1xuXG5jb252ZXJ0LmdyYXkuaHdiID0gZnVuY3Rpb24gKGdyYXkpIHtcblx0cmV0dXJuIFswLCAxMDAsIGdyYXlbMF1dO1xufTtcblxuY29udmVydC5ncmF5LmNteWsgPSBmdW5jdGlvbiAoZ3JheSkge1xuXHRyZXR1cm4gWzAsIDAsIDAsIGdyYXlbMF1dO1xufTtcblxuY29udmVydC5ncmF5LmxhYiA9IGZ1bmN0aW9uIChncmF5KSB7XG5cdHJldHVybiBbZ3JheVswXSwgMCwgMF07XG59O1xuXG5jb252ZXJ0LmdyYXkuaGV4ID0gZnVuY3Rpb24gKGdyYXkpIHtcblx0Y29uc3QgdmFsID0gTWF0aC5yb3VuZChncmF5WzBdIC8gMTAwICogMjU1KSAmIDB4RkY7XG5cdGNvbnN0IGludGVnZXIgPSAodmFsIDw8IDE2KSArICh2YWwgPDwgOCkgKyB2YWw7XG5cblx0Y29uc3Qgc3RyaW5nID0gaW50ZWdlci50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblx0cmV0dXJuICcwMDAwMDAnLnN1YnN0cmluZyhzdHJpbmcubGVuZ3RoKSArIHN0cmluZztcbn07XG5cbmNvbnZlcnQucmdiLmdyYXkgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHZhbCA9IChyZ2JbMF0gKyByZ2JbMV0gKyByZ2JbMl0pIC8gMztcblx0cmV0dXJuIFt2YWwgLyAyNTUgKiAxMDBdO1xufTtcbiIsICJjb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoJy4vY29udmVyc2lvbnMnKTtcblxuLypcblx0VGhpcyBmdW5jdGlvbiByb3V0ZXMgYSBtb2RlbCB0byBhbGwgb3RoZXIgbW9kZWxzLlxuXG5cdGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgcm91dGVkIGhhdmUgYSBwcm9wZXJ0eSBgLmNvbnZlcnNpb25gIGF0dGFjaGVkXG5cdHRvIHRoZSByZXR1cm5lZCBzeW50aGV0aWMgZnVuY3Rpb24uIFRoaXMgcHJvcGVydHkgaXMgYW4gYXJyYXlcblx0b2Ygc3RyaW5ncywgZWFjaCB3aXRoIHRoZSBzdGVwcyBpbiBiZXR3ZWVuIHRoZSAnZnJvbScgYW5kICd0bydcblx0Y29sb3IgbW9kZWxzIChpbmNsdXNpdmUpLlxuXG5cdGNvbnZlcnNpb25zIHRoYXQgYXJlIG5vdCBwb3NzaWJsZSBzaW1wbHkgYXJlIG5vdCBpbmNsdWRlZC5cbiovXG5cbmZ1bmN0aW9uIGJ1aWxkR3JhcGgoKSB7XG5cdGNvbnN0IGdyYXBoID0ge307XG5cdC8vIGh0dHBzOi8vanNwZXJmLmNvbS9vYmplY3Qta2V5cy12cy1mb3ItaW4td2l0aC1jbG9zdXJlLzNcblx0Y29uc3QgbW9kZWxzID0gT2JqZWN0LmtleXMoY29udmVyc2lvbnMpO1xuXG5cdGZvciAobGV0IGxlbiA9IG1vZGVscy5sZW5ndGgsIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRncmFwaFttb2RlbHNbaV1dID0ge1xuXHRcdFx0Ly8gaHR0cDovL2pzcGVyZi5jb20vMS12cy1pbmZpbml0eVxuXHRcdFx0Ly8gbWljcm8tb3B0LCBidXQgdGhpcyBpcyBzaW1wbGUuXG5cdFx0XHRkaXN0YW5jZTogLTEsXG5cdFx0XHRwYXJlbnQ6IG51bGxcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIGdyYXBoO1xufVxuXG4vLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CcmVhZHRoLWZpcnN0X3NlYXJjaFxuZnVuY3Rpb24gZGVyaXZlQkZTKGZyb21Nb2RlbCkge1xuXHRjb25zdCBncmFwaCA9IGJ1aWxkR3JhcGgoKTtcblx0Y29uc3QgcXVldWUgPSBbZnJvbU1vZGVsXTsgLy8gVW5zaGlmdCAtPiBxdWV1ZSAtPiBwb3BcblxuXHRncmFwaFtmcm9tTW9kZWxdLmRpc3RhbmNlID0gMDtcblxuXHR3aGlsZSAocXVldWUubGVuZ3RoKSB7XG5cdFx0Y29uc3QgY3VycmVudCA9IHF1ZXVlLnBvcCgpO1xuXHRcdGNvbnN0IGFkamFjZW50cyA9IE9iamVjdC5rZXlzKGNvbnZlcnNpb25zW2N1cnJlbnRdKTtcblxuXHRcdGZvciAobGV0IGxlbiA9IGFkamFjZW50cy5sZW5ndGgsIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGNvbnN0IGFkamFjZW50ID0gYWRqYWNlbnRzW2ldO1xuXHRcdFx0Y29uc3Qgbm9kZSA9IGdyYXBoW2FkamFjZW50XTtcblxuXHRcdFx0aWYgKG5vZGUuZGlzdGFuY2UgPT09IC0xKSB7XG5cdFx0XHRcdG5vZGUuZGlzdGFuY2UgPSBncmFwaFtjdXJyZW50XS5kaXN0YW5jZSArIDE7XG5cdFx0XHRcdG5vZGUucGFyZW50ID0gY3VycmVudDtcblx0XHRcdFx0cXVldWUudW5zaGlmdChhZGphY2VudCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGdyYXBoO1xufVxuXG5mdW5jdGlvbiBsaW5rKGZyb20sIHRvKSB7XG5cdHJldHVybiBmdW5jdGlvbiAoYXJncykge1xuXHRcdHJldHVybiB0byhmcm9tKGFyZ3MpKTtcblx0fTtcbn1cblxuZnVuY3Rpb24gd3JhcENvbnZlcnNpb24odG9Nb2RlbCwgZ3JhcGgpIHtcblx0Y29uc3QgcGF0aCA9IFtncmFwaFt0b01vZGVsXS5wYXJlbnQsIHRvTW9kZWxdO1xuXHRsZXQgZm4gPSBjb252ZXJzaW9uc1tncmFwaFt0b01vZGVsXS5wYXJlbnRdW3RvTW9kZWxdO1xuXG5cdGxldCBjdXIgPSBncmFwaFt0b01vZGVsXS5wYXJlbnQ7XG5cdHdoaWxlIChncmFwaFtjdXJdLnBhcmVudCkge1xuXHRcdHBhdGgudW5zaGlmdChncmFwaFtjdXJdLnBhcmVudCk7XG5cdFx0Zm4gPSBsaW5rKGNvbnZlcnNpb25zW2dyYXBoW2N1cl0ucGFyZW50XVtjdXJdLCBmbik7XG5cdFx0Y3VyID0gZ3JhcGhbY3VyXS5wYXJlbnQ7XG5cdH1cblxuXHRmbi5jb252ZXJzaW9uID0gcGF0aDtcblx0cmV0dXJuIGZuO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmcm9tTW9kZWwpIHtcblx0Y29uc3QgZ3JhcGggPSBkZXJpdmVCRlMoZnJvbU1vZGVsKTtcblx0Y29uc3QgY29udmVyc2lvbiA9IHt9O1xuXG5cdGNvbnN0IG1vZGVscyA9IE9iamVjdC5rZXlzKGdyYXBoKTtcblx0Zm9yIChsZXQgbGVuID0gbW9kZWxzLmxlbmd0aCwgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdGNvbnN0IHRvTW9kZWwgPSBtb2RlbHNbaV07XG5cdFx0Y29uc3Qgbm9kZSA9IGdyYXBoW3RvTW9kZWxdO1xuXG5cdFx0aWYgKG5vZGUucGFyZW50ID09PSBudWxsKSB7XG5cdFx0XHQvLyBObyBwb3NzaWJsZSBjb252ZXJzaW9uLCBvciB0aGlzIG5vZGUgaXMgdGhlIHNvdXJjZSBtb2RlbC5cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGNvbnZlcnNpb25bdG9Nb2RlbF0gPSB3cmFwQ29udmVyc2lvbih0b01vZGVsLCBncmFwaCk7XG5cdH1cblxuXHRyZXR1cm4gY29udmVyc2lvbjtcbn07XG5cbiIsICJjb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoJy4vY29udmVyc2lvbnMnKTtcbmNvbnN0IHJvdXRlID0gcmVxdWlyZSgnLi9yb3V0ZScpO1xuXG5jb25zdCBjb252ZXJ0ID0ge307XG5cbmNvbnN0IG1vZGVscyA9IE9iamVjdC5rZXlzKGNvbnZlcnNpb25zKTtcblxuZnVuY3Rpb24gd3JhcFJhdyhmbikge1xuXHRjb25zdCB3cmFwcGVkRm4gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuXHRcdGNvbnN0IGFyZzAgPSBhcmdzWzBdO1xuXHRcdGlmIChhcmcwID09PSB1bmRlZmluZWQgfHwgYXJnMCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIGFyZzA7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZzAubGVuZ3RoID4gMSkge1xuXHRcdFx0YXJncyA9IGFyZzA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZuKGFyZ3MpO1xuXHR9O1xuXG5cdC8vIFByZXNlcnZlIC5jb252ZXJzaW9uIHByb3BlcnR5IGlmIHRoZXJlIGlzIG9uZVxuXHRpZiAoJ2NvbnZlcnNpb24nIGluIGZuKSB7XG5cdFx0d3JhcHBlZEZuLmNvbnZlcnNpb24gPSBmbi5jb252ZXJzaW9uO1xuXHR9XG5cblx0cmV0dXJuIHdyYXBwZWRGbjtcbn1cblxuZnVuY3Rpb24gd3JhcFJvdW5kZWQoZm4pIHtcblx0Y29uc3Qgd3JhcHBlZEZuID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcblx0XHRjb25zdCBhcmcwID0gYXJnc1swXTtcblxuXHRcdGlmIChhcmcwID09PSB1bmRlZmluZWQgfHwgYXJnMCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIGFyZzA7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZzAubGVuZ3RoID4gMSkge1xuXHRcdFx0YXJncyA9IGFyZzA7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVzdWx0ID0gZm4oYXJncyk7XG5cblx0XHQvLyBXZSdyZSBhc3N1bWluZyB0aGUgcmVzdWx0IGlzIGFuIGFycmF5IGhlcmUuXG5cdFx0Ly8gc2VlIG5vdGljZSBpbiBjb252ZXJzaW9ucy5qczsgZG9uJ3QgdXNlIGJveCB0eXBlc1xuXHRcdC8vIGluIGNvbnZlcnNpb24gZnVuY3Rpb25zLlxuXHRcdGlmICh0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0Jykge1xuXHRcdFx0Zm9yIChsZXQgbGVuID0gcmVzdWx0Lmxlbmd0aCwgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0XHRyZXN1bHRbaV0gPSBNYXRoLnJvdW5kKHJlc3VsdFtpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcblxuXHQvLyBQcmVzZXJ2ZSAuY29udmVyc2lvbiBwcm9wZXJ0eSBpZiB0aGVyZSBpcyBvbmVcblx0aWYgKCdjb252ZXJzaW9uJyBpbiBmbikge1xuXHRcdHdyYXBwZWRGbi5jb252ZXJzaW9uID0gZm4uY29udmVyc2lvbjtcblx0fVxuXG5cdHJldHVybiB3cmFwcGVkRm47XG59XG5cbm1vZGVscy5mb3JFYWNoKGZyb21Nb2RlbCA9PiB7XG5cdGNvbnZlcnRbZnJvbU1vZGVsXSA9IHt9O1xuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb252ZXJ0W2Zyb21Nb2RlbF0sICdjaGFubmVscycsIHt2YWx1ZTogY29udmVyc2lvbnNbZnJvbU1vZGVsXS5jaGFubmVsc30pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udmVydFtmcm9tTW9kZWxdLCAnbGFiZWxzJywge3ZhbHVlOiBjb252ZXJzaW9uc1tmcm9tTW9kZWxdLmxhYmVsc30pO1xuXG5cdGNvbnN0IHJvdXRlcyA9IHJvdXRlKGZyb21Nb2RlbCk7XG5cdGNvbnN0IHJvdXRlTW9kZWxzID0gT2JqZWN0LmtleXMocm91dGVzKTtcblxuXHRyb3V0ZU1vZGVscy5mb3JFYWNoKHRvTW9kZWwgPT4ge1xuXHRcdGNvbnN0IGZuID0gcm91dGVzW3RvTW9kZWxdO1xuXG5cdFx0Y29udmVydFtmcm9tTW9kZWxdW3RvTW9kZWxdID0gd3JhcFJvdW5kZWQoZm4pO1xuXHRcdGNvbnZlcnRbZnJvbU1vZGVsXVt0b01vZGVsXS5yYXcgPSB3cmFwUmF3KGZuKTtcblx0fSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb252ZXJ0O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3Qgd3JhcEFuc2kxNiA9IChmbiwgb2Zmc2V0KSA9PiAoLi4uYXJncykgPT4ge1xuXHRjb25zdCBjb2RlID0gZm4oLi4uYXJncyk7XG5cdHJldHVybiBgXFx1MDAxQlske2NvZGUgKyBvZmZzZXR9bWA7XG59O1xuXG5jb25zdCB3cmFwQW5zaTI1NiA9IChmbiwgb2Zmc2V0KSA9PiAoLi4uYXJncykgPT4ge1xuXHRjb25zdCBjb2RlID0gZm4oLi4uYXJncyk7XG5cdHJldHVybiBgXFx1MDAxQlskezM4ICsgb2Zmc2V0fTs1OyR7Y29kZX1tYDtcbn07XG5cbmNvbnN0IHdyYXBBbnNpMTZtID0gKGZuLCBvZmZzZXQpID0+ICguLi5hcmdzKSA9PiB7XG5cdGNvbnN0IHJnYiA9IGZuKC4uLmFyZ3MpO1xuXHRyZXR1cm4gYFxcdTAwMUJbJHszOCArIG9mZnNldH07Mjske3JnYlswXX07JHtyZ2JbMV19OyR7cmdiWzJdfW1gO1xufTtcblxuY29uc3QgYW5zaTJhbnNpID0gbiA9PiBuO1xuY29uc3QgcmdiMnJnYiA9IChyLCBnLCBiKSA9PiBbciwgZywgYl07XG5cbmNvbnN0IHNldExhenlQcm9wZXJ0eSA9IChvYmplY3QsIHByb3BlcnR5LCBnZXQpID0+IHtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIHtcblx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdGNvbnN0IHZhbHVlID0gZ2V0KCk7XG5cblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCB7XG5cdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWVcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fSxcblx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHR9KTtcbn07XG5cbi8qKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnY29sb3ItY29udmVydCcpfSAqL1xubGV0IGNvbG9yQ29udmVydDtcbmNvbnN0IG1ha2VEeW5hbWljU3R5bGVzID0gKHdyYXAsIHRhcmdldFNwYWNlLCBpZGVudGl0eSwgaXNCYWNrZ3JvdW5kKSA9PiB7XG5cdGlmIChjb2xvckNvbnZlcnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdGNvbG9yQ29udmVydCA9IHJlcXVpcmUoJ2NvbG9yLWNvbnZlcnQnKTtcblx0fVxuXG5cdGNvbnN0IG9mZnNldCA9IGlzQmFja2dyb3VuZCA/IDEwIDogMDtcblx0Y29uc3Qgc3R5bGVzID0ge307XG5cblx0Zm9yIChjb25zdCBbc291cmNlU3BhY2UsIHN1aXRlXSBvZiBPYmplY3QuZW50cmllcyhjb2xvckNvbnZlcnQpKSB7XG5cdFx0Y29uc3QgbmFtZSA9IHNvdXJjZVNwYWNlID09PSAnYW5zaTE2JyA/ICdhbnNpJyA6IHNvdXJjZVNwYWNlO1xuXHRcdGlmIChzb3VyY2VTcGFjZSA9PT0gdGFyZ2V0U3BhY2UpIHtcblx0XHRcdHN0eWxlc1tuYW1lXSA9IHdyYXAoaWRlbnRpdHksIG9mZnNldCk7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2Ygc3VpdGUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRzdHlsZXNbbmFtZV0gPSB3cmFwKHN1aXRlW3RhcmdldFNwYWNlXSwgb2Zmc2V0KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gc3R5bGVzO1xufTtcblxuZnVuY3Rpb24gYXNzZW1ibGVTdHlsZXMoKSB7XG5cdGNvbnN0IGNvZGVzID0gbmV3IE1hcCgpO1xuXHRjb25zdCBzdHlsZXMgPSB7XG5cdFx0bW9kaWZpZXI6IHtcblx0XHRcdHJlc2V0OiBbMCwgMF0sXG5cdFx0XHQvLyAyMSBpc24ndCB3aWRlbHkgc3VwcG9ydGVkIGFuZCAyMiBkb2VzIHRoZSBzYW1lIHRoaW5nXG5cdFx0XHRib2xkOiBbMSwgMjJdLFxuXHRcdFx0ZGltOiBbMiwgMjJdLFxuXHRcdFx0aXRhbGljOiBbMywgMjNdLFxuXHRcdFx0dW5kZXJsaW5lOiBbNCwgMjRdLFxuXHRcdFx0aW52ZXJzZTogWzcsIDI3XSxcblx0XHRcdGhpZGRlbjogWzgsIDI4XSxcblx0XHRcdHN0cmlrZXRocm91Z2g6IFs5LCAyOV1cblx0XHR9LFxuXHRcdGNvbG9yOiB7XG5cdFx0XHRibGFjazogWzMwLCAzOV0sXG5cdFx0XHRyZWQ6IFszMSwgMzldLFxuXHRcdFx0Z3JlZW46IFszMiwgMzldLFxuXHRcdFx0eWVsbG93OiBbMzMsIDM5XSxcblx0XHRcdGJsdWU6IFszNCwgMzldLFxuXHRcdFx0bWFnZW50YTogWzM1LCAzOV0sXG5cdFx0XHRjeWFuOiBbMzYsIDM5XSxcblx0XHRcdHdoaXRlOiBbMzcsIDM5XSxcblxuXHRcdFx0Ly8gQnJpZ2h0IGNvbG9yXG5cdFx0XHRibGFja0JyaWdodDogWzkwLCAzOV0sXG5cdFx0XHRyZWRCcmlnaHQ6IFs5MSwgMzldLFxuXHRcdFx0Z3JlZW5CcmlnaHQ6IFs5MiwgMzldLFxuXHRcdFx0eWVsbG93QnJpZ2h0OiBbOTMsIDM5XSxcblx0XHRcdGJsdWVCcmlnaHQ6IFs5NCwgMzldLFxuXHRcdFx0bWFnZW50YUJyaWdodDogWzk1LCAzOV0sXG5cdFx0XHRjeWFuQnJpZ2h0OiBbOTYsIDM5XSxcblx0XHRcdHdoaXRlQnJpZ2h0OiBbOTcsIDM5XVxuXHRcdH0sXG5cdFx0YmdDb2xvcjoge1xuXHRcdFx0YmdCbGFjazogWzQwLCA0OV0sXG5cdFx0XHRiZ1JlZDogWzQxLCA0OV0sXG5cdFx0XHRiZ0dyZWVuOiBbNDIsIDQ5XSxcblx0XHRcdGJnWWVsbG93OiBbNDMsIDQ5XSxcblx0XHRcdGJnQmx1ZTogWzQ0LCA0OV0sXG5cdFx0XHRiZ01hZ2VudGE6IFs0NSwgNDldLFxuXHRcdFx0YmdDeWFuOiBbNDYsIDQ5XSxcblx0XHRcdGJnV2hpdGU6IFs0NywgNDldLFxuXG5cdFx0XHQvLyBCcmlnaHQgY29sb3Jcblx0XHRcdGJnQmxhY2tCcmlnaHQ6IFsxMDAsIDQ5XSxcblx0XHRcdGJnUmVkQnJpZ2h0OiBbMTAxLCA0OV0sXG5cdFx0XHRiZ0dyZWVuQnJpZ2h0OiBbMTAyLCA0OV0sXG5cdFx0XHRiZ1llbGxvd0JyaWdodDogWzEwMywgNDldLFxuXHRcdFx0YmdCbHVlQnJpZ2h0OiBbMTA0LCA0OV0sXG5cdFx0XHRiZ01hZ2VudGFCcmlnaHQ6IFsxMDUsIDQ5XSxcblx0XHRcdGJnQ3lhbkJyaWdodDogWzEwNiwgNDldLFxuXHRcdFx0YmdXaGl0ZUJyaWdodDogWzEwNywgNDldXG5cdFx0fVxuXHR9O1xuXG5cdC8vIEFsaWFzIGJyaWdodCBibGFjayBhcyBncmF5IChhbmQgZ3JleSlcblx0c3R5bGVzLmNvbG9yLmdyYXkgPSBzdHlsZXMuY29sb3IuYmxhY2tCcmlnaHQ7XG5cdHN0eWxlcy5iZ0NvbG9yLmJnR3JheSA9IHN0eWxlcy5iZ0NvbG9yLmJnQmxhY2tCcmlnaHQ7XG5cdHN0eWxlcy5jb2xvci5ncmV5ID0gc3R5bGVzLmNvbG9yLmJsYWNrQnJpZ2h0O1xuXHRzdHlsZXMuYmdDb2xvci5iZ0dyZXkgPSBzdHlsZXMuYmdDb2xvci5iZ0JsYWNrQnJpZ2h0O1xuXG5cdGZvciAoY29uc3QgW2dyb3VwTmFtZSwgZ3JvdXBdIG9mIE9iamVjdC5lbnRyaWVzKHN0eWxlcykpIHtcblx0XHRmb3IgKGNvbnN0IFtzdHlsZU5hbWUsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhncm91cCkpIHtcblx0XHRcdHN0eWxlc1tzdHlsZU5hbWVdID0ge1xuXHRcdFx0XHRvcGVuOiBgXFx1MDAxQlske3N0eWxlWzBdfW1gLFxuXHRcdFx0XHRjbG9zZTogYFxcdTAwMUJbJHtzdHlsZVsxXX1tYFxuXHRcdFx0fTtcblxuXHRcdFx0Z3JvdXBbc3R5bGVOYW1lXSA9IHN0eWxlc1tzdHlsZU5hbWVdO1xuXG5cdFx0XHRjb2Rlcy5zZXQoc3R5bGVbMF0sIHN0eWxlWzFdKTtcblx0XHR9XG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoc3R5bGVzLCBncm91cE5hbWUsIHtcblx0XHRcdHZhbHVlOiBncm91cCxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlXG5cdFx0fSk7XG5cdH1cblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoc3R5bGVzLCAnY29kZXMnLCB7XG5cdFx0dmFsdWU6IGNvZGVzLFxuXHRcdGVudW1lcmFibGU6IGZhbHNlXG5cdH0pO1xuXG5cdHN0eWxlcy5jb2xvci5jbG9zZSA9ICdcXHUwMDFCWzM5bSc7XG5cdHN0eWxlcy5iZ0NvbG9yLmNsb3NlID0gJ1xcdTAwMUJbNDltJztcblxuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmNvbG9yLCAnYW5zaScsICgpID0+IG1ha2VEeW5hbWljU3R5bGVzKHdyYXBBbnNpMTYsICdhbnNpMTYnLCBhbnNpMmFuc2ksIGZhbHNlKSk7XG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuY29sb3IsICdhbnNpMjU2JywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kyNTYsICdhbnNpMjU2JywgYW5zaTJhbnNpLCBmYWxzZSkpO1xuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmNvbG9yLCAnYW5zaTE2bScsICgpID0+IG1ha2VEeW5hbWljU3R5bGVzKHdyYXBBbnNpMTZtLCAncmdiJywgcmdiMnJnYiwgZmFsc2UpKTtcblx0c2V0TGF6eVByb3BlcnR5KHN0eWxlcy5iZ0NvbG9yLCAnYW5zaScsICgpID0+IG1ha2VEeW5hbWljU3R5bGVzKHdyYXBBbnNpMTYsICdhbnNpMTYnLCBhbnNpMmFuc2ksIHRydWUpKTtcblx0c2V0TGF6eVByb3BlcnR5KHN0eWxlcy5iZ0NvbG9yLCAnYW5zaTI1NicsICgpID0+IG1ha2VEeW5hbWljU3R5bGVzKHdyYXBBbnNpMjU2LCAnYW5zaTI1NicsIGFuc2kyYW5zaSwgdHJ1ZSkpO1xuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmJnQ29sb3IsICdhbnNpMTZtJywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kxNm0sICdyZ2InLCByZ2IycmdiLCB0cnVlKSk7XG5cblx0cmV0dXJuIHN0eWxlcztcbn1cblxuLy8gTWFrZSB0aGUgZXhwb3J0IGltbXV0YWJsZVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgJ2V4cG9ydHMnLCB7XG5cdGVudW1lcmFibGU6IHRydWUsXG5cdGdldDogYXNzZW1ibGVTdHlsZXNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSAoZmxhZywgYXJndiA9IHByb2Nlc3MuYXJndikgPT4ge1xuXHRjb25zdCBwcmVmaXggPSBmbGFnLnN0YXJ0c1dpdGgoJy0nKSA/ICcnIDogKGZsYWcubGVuZ3RoID09PSAxID8gJy0nIDogJy0tJyk7XG5cdGNvbnN0IHBvc2l0aW9uID0gYXJndi5pbmRleE9mKHByZWZpeCArIGZsYWcpO1xuXHRjb25zdCB0ZXJtaW5hdG9yUG9zaXRpb24gPSBhcmd2LmluZGV4T2YoJy0tJyk7XG5cdHJldHVybiBwb3NpdGlvbiAhPT0gLTEgJiYgKHRlcm1pbmF0b3JQb3NpdGlvbiA9PT0gLTEgfHwgcG9zaXRpb24gPCB0ZXJtaW5hdG9yUG9zaXRpb24pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBvcyA9IHJlcXVpcmUoJ29zJyk7XG5jb25zdCB0dHkgPSByZXF1aXJlKCd0dHknKTtcbmNvbnN0IGhhc0ZsYWcgPSByZXF1aXJlKCdoYXMtZmxhZycpO1xuXG5jb25zdCB7ZW52fSA9IHByb2Nlc3M7XG5cbmxldCBmb3JjZUNvbG9yO1xuaWYgKGhhc0ZsYWcoJ25vLWNvbG9yJykgfHxcblx0aGFzRmxhZygnbm8tY29sb3JzJykgfHxcblx0aGFzRmxhZygnY29sb3I9ZmFsc2UnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1uZXZlcicpKSB7XG5cdGZvcmNlQ29sb3IgPSAwO1xufSBlbHNlIGlmIChoYXNGbGFnKCdjb2xvcicpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9ycycpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPXRydWUnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1hbHdheXMnKSkge1xuXHRmb3JjZUNvbG9yID0gMTtcbn1cblxuaWYgKCdGT1JDRV9DT0xPUicgaW4gZW52KSB7XG5cdGlmIChlbnYuRk9SQ0VfQ09MT1IgPT09ICd0cnVlJykge1xuXHRcdGZvcmNlQ29sb3IgPSAxO1xuXHR9IGVsc2UgaWYgKGVudi5GT1JDRV9DT0xPUiA9PT0gJ2ZhbHNlJykge1xuXHRcdGZvcmNlQ29sb3IgPSAwO1xuXHR9IGVsc2Uge1xuXHRcdGZvcmNlQ29sb3IgPSBlbnYuRk9SQ0VfQ09MT1IubGVuZ3RoID09PSAwID8gMSA6IE1hdGgubWluKHBhcnNlSW50KGVudi5GT1JDRV9DT0xPUiwgMTApLCAzKTtcblx0fVxufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVMZXZlbChsZXZlbCkge1xuXHRpZiAobGV2ZWwgPT09IDApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGxldmVsLFxuXHRcdGhhc0Jhc2ljOiB0cnVlLFxuXHRcdGhhczI1NjogbGV2ZWwgPj0gMixcblx0XHRoYXMxNm06IGxldmVsID49IDNcblx0fTtcbn1cblxuZnVuY3Rpb24gc3VwcG9ydHNDb2xvcihoYXZlU3RyZWFtLCBzdHJlYW1Jc1RUWSkge1xuXHRpZiAoZm9yY2VDb2xvciA9PT0gMCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTE2bScpIHx8XG5cdFx0aGFzRmxhZygnY29sb3I9ZnVsbCcpIHx8XG5cdFx0aGFzRmxhZygnY29sb3I9dHJ1ZWNvbG9yJykpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmIChoYXNGbGFnKCdjb2xvcj0yNTYnKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cblx0aWYgKGhhdmVTdHJlYW0gJiYgIXN0cmVhbUlzVFRZICYmIGZvcmNlQ29sb3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Y29uc3QgbWluID0gZm9yY2VDb2xvciB8fCAwO1xuXG5cdGlmIChlbnYuVEVSTSA9PT0gJ2R1bWInKSB7XG5cdFx0cmV0dXJuIG1pbjtcblx0fVxuXG5cdGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG5cdFx0Ly8gV2luZG93cyAxMCBidWlsZCAxMDU4NiBpcyB0aGUgZmlyc3QgV2luZG93cyByZWxlYXNlIHRoYXQgc3VwcG9ydHMgMjU2IGNvbG9ycy5cblx0XHQvLyBXaW5kb3dzIDEwIGJ1aWxkIDE0OTMxIGlzIHRoZSBmaXJzdCByZWxlYXNlIHRoYXQgc3VwcG9ydHMgMTZtL1RydWVDb2xvci5cblx0XHRjb25zdCBvc1JlbGVhc2UgPSBvcy5yZWxlYXNlKCkuc3BsaXQoJy4nKTtcblx0XHRpZiAoXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzBdKSA+PSAxMCAmJlxuXHRcdFx0TnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTA1ODZcblx0XHQpIHtcblx0XHRcdHJldHVybiBOdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxNDkzMSA/IDMgOiAyO1xuXHRcdH1cblxuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDSScgaW4gZW52KSB7XG5cdFx0aWYgKFsnVFJBVklTJywgJ0NJUkNMRUNJJywgJ0FQUFZFWU9SJywgJ0dJVExBQl9DSScsICdHSVRIVUJfQUNUSU9OUycsICdCVUlMREtJVEUnXS5zb21lKHNpZ24gPT4gc2lnbiBpbiBlbnYpIHx8IGVudi5DSV9OQU1FID09PSAnY29kZXNoaXAnKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0aWYgKCdURUFNQ0lUWV9WRVJTSU9OJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gL14oOVxcLigwKlsxLTldXFxkKilcXC58XFxkezIsfVxcLikvLnRlc3QoZW52LlRFQU1DSVRZX1ZFUlNJT04pID8gMSA6IDA7XG5cdH1cblxuXHRpZiAoZW52LkNPTE9SVEVSTSA9PT0gJ3RydWVjb2xvcicpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmICgnVEVSTV9QUk9HUkFNJyBpbiBlbnYpIHtcblx0XHRjb25zdCB2ZXJzaW9uID0gcGFyc2VJbnQoKGVudi5URVJNX1BST0dSQU1fVkVSU0lPTiB8fCAnJykuc3BsaXQoJy4nKVswXSwgMTApO1xuXG5cdFx0c3dpdGNoIChlbnYuVEVSTV9QUk9HUkFNKSB7XG5cdFx0XHRjYXNlICdpVGVybS5hcHAnOlxuXHRcdFx0XHRyZXR1cm4gdmVyc2lvbiA+PSAzID8gMyA6IDI7XG5cdFx0XHRjYXNlICdBcHBsZV9UZXJtaW5hbCc6XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0Ly8gTm8gZGVmYXVsdFxuXHRcdH1cblx0fVxuXG5cdGlmICgvLTI1Nihjb2xvcik/JC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblxuXHRpZiAoL15zY3JlZW58Xnh0ZXJtfF52dDEwMHxednQyMjB8XnJ4dnR8Y29sb3J8YW5zaXxjeWd3aW58bGludXgvaS50ZXN0KGVudi5URVJNKSkge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDT0xPUlRFUk0nIGluIGVudikge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0cmV0dXJuIG1pbjtcbn1cblxuZnVuY3Rpb24gZ2V0U3VwcG9ydExldmVsKHN0cmVhbSkge1xuXHRjb25zdCBsZXZlbCA9IHN1cHBvcnRzQ29sb3Ioc3RyZWFtLCBzdHJlYW0gJiYgc3RyZWFtLmlzVFRZKTtcblx0cmV0dXJuIHRyYW5zbGF0ZUxldmVsKGxldmVsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHN1cHBvcnRzQ29sb3I6IGdldFN1cHBvcnRMZXZlbCxcblx0c3Rkb3V0OiB0cmFuc2xhdGVMZXZlbChzdXBwb3J0c0NvbG9yKHRydWUsIHR0eS5pc2F0dHkoMSkpKSxcblx0c3RkZXJyOiB0cmFuc2xhdGVMZXZlbChzdXBwb3J0c0NvbG9yKHRydWUsIHR0eS5pc2F0dHkoMikpKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHN0cmluZ1JlcGxhY2VBbGwgPSAoc3RyaW5nLCBzdWJzdHJpbmcsIHJlcGxhY2VyKSA9PiB7XG5cdGxldCBpbmRleCA9IHN0cmluZy5pbmRleE9mKHN1YnN0cmluZyk7XG5cdGlmIChpbmRleCA9PT0gLTEpIHtcblx0XHRyZXR1cm4gc3RyaW5nO1xuXHR9XG5cblx0Y29uc3Qgc3Vic3RyaW5nTGVuZ3RoID0gc3Vic3RyaW5nLmxlbmd0aDtcblx0bGV0IGVuZEluZGV4ID0gMDtcblx0bGV0IHJldHVyblZhbHVlID0gJyc7XG5cdGRvIHtcblx0XHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc3Vic3RyKGVuZEluZGV4LCBpbmRleCAtIGVuZEluZGV4KSArIHN1YnN0cmluZyArIHJlcGxhY2VyO1xuXHRcdGVuZEluZGV4ID0gaW5kZXggKyBzdWJzdHJpbmdMZW5ndGg7XG5cdFx0aW5kZXggPSBzdHJpbmcuaW5kZXhPZihzdWJzdHJpbmcsIGVuZEluZGV4KTtcblx0fSB3aGlsZSAoaW5kZXggIT09IC0xKTtcblxuXHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc3Vic3RyKGVuZEluZGV4KTtcblx0cmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxuY29uc3Qgc3RyaW5nRW5jYXNlQ1JMRldpdGhGaXJzdEluZGV4ID0gKHN0cmluZywgcHJlZml4LCBwb3N0Zml4LCBpbmRleCkgPT4ge1xuXHRsZXQgZW5kSW5kZXggPSAwO1xuXHRsZXQgcmV0dXJuVmFsdWUgPSAnJztcblx0ZG8ge1xuXHRcdGNvbnN0IGdvdENSID0gc3RyaW5nW2luZGV4IC0gMV0gPT09ICdcXHInO1xuXHRcdHJldHVyblZhbHVlICs9IHN0cmluZy5zdWJzdHIoZW5kSW5kZXgsIChnb3RDUiA/IGluZGV4IC0gMSA6IGluZGV4KSAtIGVuZEluZGV4KSArIHByZWZpeCArIChnb3RDUiA/ICdcXHJcXG4nIDogJ1xcbicpICsgcG9zdGZpeDtcblx0XHRlbmRJbmRleCA9IGluZGV4ICsgMTtcblx0XHRpbmRleCA9IHN0cmluZy5pbmRleE9mKCdcXG4nLCBlbmRJbmRleCk7XG5cdH0gd2hpbGUgKGluZGV4ICE9PSAtMSk7XG5cblx0cmV0dXJuVmFsdWUgKz0gc3RyaW5nLnN1YnN0cihlbmRJbmRleCk7XG5cdHJldHVybiByZXR1cm5WYWx1ZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRzdHJpbmdSZXBsYWNlQWxsLFxuXHRzdHJpbmdFbmNhc2VDUkxGV2l0aEZpcnN0SW5kZXhcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuY29uc3QgVEVNUExBVEVfUkVHRVggPSAvKD86XFxcXCh1KD86W2EtZlxcZF17NH18XFx7W2EtZlxcZF17MSw2fVxcfSl8eFthLWZcXGRdezJ9fC4pKXwoPzpcXHsofik/KFxcdysoPzpcXChbXildKlxcKSk/KD86XFwuXFx3Kyg/OlxcKFteKV0qXFwpKT8pKikoPzpbIFxcdF18KD89XFxyP1xcbikpKXwoXFx9KXwoKD86LnxbXFxyXFxuXFxmXSkrPykvZ2k7XG5jb25zdCBTVFlMRV9SRUdFWCA9IC8oPzpefFxcLikoXFx3KykoPzpcXCgoW14pXSopXFwpKT8vZztcbmNvbnN0IFNUUklOR19SRUdFWCA9IC9eKFsnXCJdKSgoPzpcXFxcLnwoPyFcXDEpW15cXFxcXSkqKVxcMSQvO1xuY29uc3QgRVNDQVBFX1JFR0VYID0gL1xcXFwodSg/OlthLWZcXGRdezR9fHtbYS1mXFxkXXsxLDZ9fSl8eFthLWZcXGRdezJ9fC4pfChbXlxcXFxdKS9naTtcblxuY29uc3QgRVNDQVBFUyA9IG5ldyBNYXAoW1xuXHRbJ24nLCAnXFxuJ10sXG5cdFsncicsICdcXHInXSxcblx0Wyd0JywgJ1xcdCddLFxuXHRbJ2InLCAnXFxiJ10sXG5cdFsnZicsICdcXGYnXSxcblx0Wyd2JywgJ1xcdiddLFxuXHRbJzAnLCAnXFwwJ10sXG5cdFsnXFxcXCcsICdcXFxcJ10sXG5cdFsnZScsICdcXHUwMDFCJ10sXG5cdFsnYScsICdcXHUwMDA3J11cbl0pO1xuXG5mdW5jdGlvbiB1bmVzY2FwZShjKSB7XG5cdGNvbnN0IHUgPSBjWzBdID09PSAndSc7XG5cdGNvbnN0IGJyYWNrZXQgPSBjWzFdID09PSAneyc7XG5cblx0aWYgKCh1ICYmICFicmFja2V0ICYmIGMubGVuZ3RoID09PSA1KSB8fCAoY1swXSA9PT0gJ3gnICYmIGMubGVuZ3RoID09PSAzKSkge1xuXHRcdHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGMuc2xpY2UoMSksIDE2KSk7XG5cdH1cblxuXHRpZiAodSAmJiBicmFja2V0KSB7XG5cdFx0cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KHBhcnNlSW50KGMuc2xpY2UoMiwgLTEpLCAxNikpO1xuXHR9XG5cblx0cmV0dXJuIEVTQ0FQRVMuZ2V0KGMpIHx8IGM7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQXJndW1lbnRzKG5hbWUsIGFyZ3VtZW50c18pIHtcblx0Y29uc3QgcmVzdWx0cyA9IFtdO1xuXHRjb25zdCBjaHVua3MgPSBhcmd1bWVudHNfLnRyaW0oKS5zcGxpdCgvXFxzKixcXHMqL2cpO1xuXHRsZXQgbWF0Y2hlcztcblxuXHRmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rcykge1xuXHRcdGNvbnN0IG51bWJlciA9IE51bWJlcihjaHVuayk7XG5cdFx0aWYgKCFOdW1iZXIuaXNOYU4obnVtYmVyKSkge1xuXHRcdFx0cmVzdWx0cy5wdXNoKG51bWJlcik7XG5cdFx0fSBlbHNlIGlmICgobWF0Y2hlcyA9IGNodW5rLm1hdGNoKFNUUklOR19SRUdFWCkpKSB7XG5cdFx0XHRyZXN1bHRzLnB1c2gobWF0Y2hlc1syXS5yZXBsYWNlKEVTQ0FQRV9SRUdFWCwgKG0sIGVzY2FwZSwgY2hhcmFjdGVyKSA9PiBlc2NhcGUgPyB1bmVzY2FwZShlc2NhcGUpIDogY2hhcmFjdGVyKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBDaGFsayB0ZW1wbGF0ZSBzdHlsZSBhcmd1bWVudDogJHtjaHVua30gKGluIHN0eWxlICcke25hbWV9JylgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gcGFyc2VTdHlsZShzdHlsZSkge1xuXHRTVFlMRV9SRUdFWC5sYXN0SW5kZXggPSAwO1xuXG5cdGNvbnN0IHJlc3VsdHMgPSBbXTtcblx0bGV0IG1hdGNoZXM7XG5cblx0d2hpbGUgKChtYXRjaGVzID0gU1RZTEVfUkVHRVguZXhlYyhzdHlsZSkpICE9PSBudWxsKSB7XG5cdFx0Y29uc3QgbmFtZSA9IG1hdGNoZXNbMV07XG5cblx0XHRpZiAobWF0Y2hlc1syXSkge1xuXHRcdFx0Y29uc3QgYXJncyA9IHBhcnNlQXJndW1lbnRzKG5hbWUsIG1hdGNoZXNbMl0pO1xuXHRcdFx0cmVzdWx0cy5wdXNoKFtuYW1lXS5jb25jYXQoYXJncykpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXN1bHRzLnB1c2goW25hbWVdKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gYnVpbGRTdHlsZShjaGFsaywgc3R5bGVzKSB7XG5cdGNvbnN0IGVuYWJsZWQgPSB7fTtcblxuXHRmb3IgKGNvbnN0IGxheWVyIG9mIHN0eWxlcykge1xuXHRcdGZvciAoY29uc3Qgc3R5bGUgb2YgbGF5ZXIuc3R5bGVzKSB7XG5cdFx0XHRlbmFibGVkW3N0eWxlWzBdXSA9IGxheWVyLmludmVyc2UgPyBudWxsIDogc3R5bGUuc2xpY2UoMSk7XG5cdFx0fVxuXHR9XG5cblx0bGV0IGN1cnJlbnQgPSBjaGFsaztcblx0Zm9yIChjb25zdCBbc3R5bGVOYW1lLCBzdHlsZXNdIG9mIE9iamVjdC5lbnRyaWVzKGVuYWJsZWQpKSB7XG5cdFx0aWYgKCFBcnJheS5pc0FycmF5KHN0eWxlcykpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmICghKHN0eWxlTmFtZSBpbiBjdXJyZW50KSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIENoYWxrIHN0eWxlOiAke3N0eWxlTmFtZX1gKTtcblx0XHR9XG5cblx0XHRjdXJyZW50ID0gc3R5bGVzLmxlbmd0aCA+IDAgPyBjdXJyZW50W3N0eWxlTmFtZV0oLi4uc3R5bGVzKSA6IGN1cnJlbnRbc3R5bGVOYW1lXTtcblx0fVxuXG5cdHJldHVybiBjdXJyZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IChjaGFsaywgdGVtcG9yYXJ5KSA9PiB7XG5cdGNvbnN0IHN0eWxlcyA9IFtdO1xuXHRjb25zdCBjaHVua3MgPSBbXTtcblx0bGV0IGNodW5rID0gW107XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcblx0dGVtcG9yYXJ5LnJlcGxhY2UoVEVNUExBVEVfUkVHRVgsIChtLCBlc2NhcGVDaGFyYWN0ZXIsIGludmVyc2UsIHN0eWxlLCBjbG9zZSwgY2hhcmFjdGVyKSA9PiB7XG5cdFx0aWYgKGVzY2FwZUNoYXJhY3Rlcikge1xuXHRcdFx0Y2h1bmsucHVzaCh1bmVzY2FwZShlc2NhcGVDaGFyYWN0ZXIpKTtcblx0XHR9IGVsc2UgaWYgKHN0eWxlKSB7XG5cdFx0XHRjb25zdCBzdHJpbmcgPSBjaHVuay5qb2luKCcnKTtcblx0XHRcdGNodW5rID0gW107XG5cdFx0XHRjaHVua3MucHVzaChzdHlsZXMubGVuZ3RoID09PSAwID8gc3RyaW5nIDogYnVpbGRTdHlsZShjaGFsaywgc3R5bGVzKShzdHJpbmcpKTtcblx0XHRcdHN0eWxlcy5wdXNoKHtpbnZlcnNlLCBzdHlsZXM6IHBhcnNlU3R5bGUoc3R5bGUpfSk7XG5cdFx0fSBlbHNlIGlmIChjbG9zZSkge1xuXHRcdFx0aWYgKHN0eWxlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdGb3VuZCBleHRyYW5lb3VzIH0gaW4gQ2hhbGsgdGVtcGxhdGUgbGl0ZXJhbCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRjaHVua3MucHVzaChidWlsZFN0eWxlKGNoYWxrLCBzdHlsZXMpKGNodW5rLmpvaW4oJycpKSk7XG5cdFx0XHRjaHVuayA9IFtdO1xuXHRcdFx0c3R5bGVzLnBvcCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjaHVuay5wdXNoKGNoYXJhY3Rlcik7XG5cdFx0fVxuXHR9KTtcblxuXHRjaHVua3MucHVzaChjaHVuay5qb2luKCcnKSk7XG5cblx0aWYgKHN0eWxlcy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgZXJyTWVzc2FnZSA9IGBDaGFsayB0ZW1wbGF0ZSBsaXRlcmFsIGlzIG1pc3NpbmcgJHtzdHlsZXMubGVuZ3RofSBjbG9zaW5nIGJyYWNrZXQke3N0eWxlcy5sZW5ndGggPT09IDEgPyAnJyA6ICdzJ30gKFxcYH1cXGApYDtcblx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyTWVzc2FnZSk7XG5cdH1cblxuXHRyZXR1cm4gY2h1bmtzLmpvaW4oJycpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBhbnNpU3R5bGVzID0gcmVxdWlyZSgnYW5zaS1zdHlsZXMnKTtcbmNvbnN0IHtzdGRvdXQ6IHN0ZG91dENvbG9yLCBzdGRlcnI6IHN0ZGVyckNvbG9yfSA9IHJlcXVpcmUoJ3N1cHBvcnRzLWNvbG9yJyk7XG5jb25zdCB7XG5cdHN0cmluZ1JlcGxhY2VBbGwsXG5cdHN0cmluZ0VuY2FzZUNSTEZXaXRoRmlyc3RJbmRleFxufSA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG5jb25zdCB7aXNBcnJheX0gPSBBcnJheTtcblxuLy8gYHN1cHBvcnRzQ29sb3IubGV2ZWxgIFx1MjE5MiBgYW5zaVN0eWxlcy5jb2xvcltuYW1lXWAgbWFwcGluZ1xuY29uc3QgbGV2ZWxNYXBwaW5nID0gW1xuXHQnYW5zaScsXG5cdCdhbnNpJyxcblx0J2Fuc2kyNTYnLFxuXHQnYW5zaTE2bSdcbl07XG5cbmNvbnN0IHN0eWxlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmNvbnN0IGFwcGx5T3B0aW9ucyA9IChvYmplY3QsIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRpZiAob3B0aW9ucy5sZXZlbCAmJiAhKE51bWJlci5pc0ludGVnZXIob3B0aW9ucy5sZXZlbCkgJiYgb3B0aW9ucy5sZXZlbCA+PSAwICYmIG9wdGlvbnMubGV2ZWwgPD0gMykpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1RoZSBgbGV2ZWxgIG9wdGlvbiBzaG91bGQgYmUgYW4gaW50ZWdlciBmcm9tIDAgdG8gMycpO1xuXHR9XG5cblx0Ly8gRGV0ZWN0IGxldmVsIGlmIG5vdCBzZXQgbWFudWFsbHlcblx0Y29uc3QgY29sb3JMZXZlbCA9IHN0ZG91dENvbG9yID8gc3Rkb3V0Q29sb3IubGV2ZWwgOiAwO1xuXHRvYmplY3QubGV2ZWwgPSBvcHRpb25zLmxldmVsID09PSB1bmRlZmluZWQgPyBjb2xvckxldmVsIDogb3B0aW9ucy5sZXZlbDtcbn07XG5cbmNsYXNzIENoYWxrQ2xhc3Mge1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0cnVjdG9yLXJldHVyblxuXHRcdHJldHVybiBjaGFsa0ZhY3Rvcnkob3B0aW9ucyk7XG5cdH1cbn1cblxuY29uc3QgY2hhbGtGYWN0b3J5ID0gb3B0aW9ucyA9PiB7XG5cdGNvbnN0IGNoYWxrID0ge307XG5cdGFwcGx5T3B0aW9ucyhjaGFsaywgb3B0aW9ucyk7XG5cblx0Y2hhbGsudGVtcGxhdGUgPSAoLi4uYXJndW1lbnRzXykgPT4gY2hhbGtUYWcoY2hhbGsudGVtcGxhdGUsIC4uLmFyZ3VtZW50c18pO1xuXG5cdE9iamVjdC5zZXRQcm90b3R5cGVPZihjaGFsaywgQ2hhbGsucHJvdG90eXBlKTtcblx0T2JqZWN0LnNldFByb3RvdHlwZU9mKGNoYWxrLnRlbXBsYXRlLCBjaGFsayk7XG5cblx0Y2hhbGsudGVtcGxhdGUuY29uc3RydWN0b3IgPSAoKSA9PiB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdgY2hhbGsuY29uc3RydWN0b3IoKWAgaXMgZGVwcmVjYXRlZC4gVXNlIGBuZXcgY2hhbGsuSW5zdGFuY2UoKWAgaW5zdGVhZC4nKTtcblx0fTtcblxuXHRjaGFsay50ZW1wbGF0ZS5JbnN0YW5jZSA9IENoYWxrQ2xhc3M7XG5cblx0cmV0dXJuIGNoYWxrLnRlbXBsYXRlO1xufTtcblxuZnVuY3Rpb24gQ2hhbGsob3B0aW9ucykge1xuXHRyZXR1cm4gY2hhbGtGYWN0b3J5KG9wdGlvbnMpO1xufVxuXG5mb3IgKGNvbnN0IFtzdHlsZU5hbWUsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhhbnNpU3R5bGVzKSkge1xuXHRzdHlsZXNbc3R5bGVOYW1lXSA9IHtcblx0XHRnZXQoKSB7XG5cdFx0XHRjb25zdCBidWlsZGVyID0gY3JlYXRlQnVpbGRlcih0aGlzLCBjcmVhdGVTdHlsZXIoc3R5bGUub3Blbiwgc3R5bGUuY2xvc2UsIHRoaXMuX3N0eWxlciksIHRoaXMuX2lzRW1wdHkpO1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHN0eWxlTmFtZSwge3ZhbHVlOiBidWlsZGVyfSk7XG5cdFx0XHRyZXR1cm4gYnVpbGRlcjtcblx0XHR9XG5cdH07XG59XG5cbnN0eWxlcy52aXNpYmxlID0ge1xuXHRnZXQoKSB7XG5cdFx0Y29uc3QgYnVpbGRlciA9IGNyZWF0ZUJ1aWxkZXIodGhpcywgdGhpcy5fc3R5bGVyLCB0cnVlKTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3Zpc2libGUnLCB7dmFsdWU6IGJ1aWxkZXJ9KTtcblx0XHRyZXR1cm4gYnVpbGRlcjtcblx0fVxufTtcblxuY29uc3QgdXNlZE1vZGVscyA9IFsncmdiJywgJ2hleCcsICdrZXl3b3JkJywgJ2hzbCcsICdoc3YnLCAnaHdiJywgJ2Fuc2knLCAnYW5zaTI1NiddO1xuXG5mb3IgKGNvbnN0IG1vZGVsIG9mIHVzZWRNb2RlbHMpIHtcblx0c3R5bGVzW21vZGVsXSA9IHtcblx0XHRnZXQoKSB7XG5cdFx0XHRjb25zdCB7bGV2ZWx9ID0gdGhpcztcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoLi4uYXJndW1lbnRzXykge1xuXHRcdFx0XHRjb25zdCBzdHlsZXIgPSBjcmVhdGVTdHlsZXIoYW5zaVN0eWxlcy5jb2xvcltsZXZlbE1hcHBpbmdbbGV2ZWxdXVttb2RlbF0oLi4uYXJndW1lbnRzXyksIGFuc2lTdHlsZXMuY29sb3IuY2xvc2UsIHRoaXMuX3N0eWxlcik7XG5cdFx0XHRcdHJldHVybiBjcmVhdGVCdWlsZGVyKHRoaXMsIHN0eWxlciwgdGhpcy5faXNFbXB0eSk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fTtcbn1cblxuZm9yIChjb25zdCBtb2RlbCBvZiB1c2VkTW9kZWxzKSB7XG5cdGNvbnN0IGJnTW9kZWwgPSAnYmcnICsgbW9kZWxbMF0udG9VcHBlckNhc2UoKSArIG1vZGVsLnNsaWNlKDEpO1xuXHRzdHlsZXNbYmdNb2RlbF0gPSB7XG5cdFx0Z2V0KCkge1xuXHRcdFx0Y29uc3Qge2xldmVsfSA9IHRoaXM7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3VtZW50c18pIHtcblx0XHRcdFx0Y29uc3Qgc3R5bGVyID0gY3JlYXRlU3R5bGVyKGFuc2lTdHlsZXMuYmdDb2xvcltsZXZlbE1hcHBpbmdbbGV2ZWxdXVttb2RlbF0oLi4uYXJndW1lbnRzXyksIGFuc2lTdHlsZXMuYmdDb2xvci5jbG9zZSwgdGhpcy5fc3R5bGVyKTtcblx0XHRcdFx0cmV0dXJuIGNyZWF0ZUJ1aWxkZXIodGhpcywgc3R5bGVyLCB0aGlzLl9pc0VtcHR5KTtcblx0XHRcdH07XG5cdFx0fVxuXHR9O1xufVxuXG5jb25zdCBwcm90byA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCgpID0+IHt9LCB7XG5cdC4uLnN0eWxlcyxcblx0bGV2ZWw6IHtcblx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdGdldCgpIHtcblx0XHRcdHJldHVybiB0aGlzLl9nZW5lcmF0b3IubGV2ZWw7XG5cdFx0fSxcblx0XHRzZXQobGV2ZWwpIHtcblx0XHRcdHRoaXMuX2dlbmVyYXRvci5sZXZlbCA9IGxldmVsO1xuXHRcdH1cblx0fVxufSk7XG5cbmNvbnN0IGNyZWF0ZVN0eWxlciA9IChvcGVuLCBjbG9zZSwgcGFyZW50KSA9PiB7XG5cdGxldCBvcGVuQWxsO1xuXHRsZXQgY2xvc2VBbGw7XG5cdGlmIChwYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdG9wZW5BbGwgPSBvcGVuO1xuXHRcdGNsb3NlQWxsID0gY2xvc2U7XG5cdH0gZWxzZSB7XG5cdFx0b3BlbkFsbCA9IHBhcmVudC5vcGVuQWxsICsgb3Blbjtcblx0XHRjbG9zZUFsbCA9IGNsb3NlICsgcGFyZW50LmNsb3NlQWxsO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRvcGVuLFxuXHRcdGNsb3NlLFxuXHRcdG9wZW5BbGwsXG5cdFx0Y2xvc2VBbGwsXG5cdFx0cGFyZW50XG5cdH07XG59O1xuXG5jb25zdCBjcmVhdGVCdWlsZGVyID0gKHNlbGYsIF9zdHlsZXIsIF9pc0VtcHR5KSA9PiB7XG5cdGNvbnN0IGJ1aWxkZXIgPSAoLi4uYXJndW1lbnRzXykgPT4ge1xuXHRcdGlmIChpc0FycmF5KGFyZ3VtZW50c19bMF0pICYmIGlzQXJyYXkoYXJndW1lbnRzX1swXS5yYXcpKSB7XG5cdFx0XHQvLyBDYWxsZWQgYXMgYSB0ZW1wbGF0ZSBsaXRlcmFsLCBmb3IgZXhhbXBsZTogY2hhbGsucmVkYDIgKyAzID0ge2JvbGQgJHsyKzN9fWBcblx0XHRcdHJldHVybiBhcHBseVN0eWxlKGJ1aWxkZXIsIGNoYWxrVGFnKGJ1aWxkZXIsIC4uLmFyZ3VtZW50c18pKTtcblx0XHR9XG5cblx0XHQvLyBTaW5nbGUgYXJndW1lbnQgaXMgaG90IHBhdGgsIGltcGxpY2l0IGNvZXJjaW9uIGlzIGZhc3RlciB0aGFuIGFueXRoaW5nXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWltcGxpY2l0LWNvZXJjaW9uXG5cdFx0cmV0dXJuIGFwcGx5U3R5bGUoYnVpbGRlciwgKGFyZ3VtZW50c18ubGVuZ3RoID09PSAxKSA/ICgnJyArIGFyZ3VtZW50c19bMF0pIDogYXJndW1lbnRzXy5qb2luKCcgJykpO1xuXHR9O1xuXG5cdC8vIFdlIGFsdGVyIHRoZSBwcm90b3R5cGUgYmVjYXVzZSB3ZSBtdXN0IHJldHVybiBhIGZ1bmN0aW9uLCBidXQgdGhlcmUgaXNcblx0Ly8gbm8gd2F5IHRvIGNyZWF0ZSBhIGZ1bmN0aW9uIHdpdGggYSBkaWZmZXJlbnQgcHJvdG90eXBlXG5cdE9iamVjdC5zZXRQcm90b3R5cGVPZihidWlsZGVyLCBwcm90byk7XG5cblx0YnVpbGRlci5fZ2VuZXJhdG9yID0gc2VsZjtcblx0YnVpbGRlci5fc3R5bGVyID0gX3N0eWxlcjtcblx0YnVpbGRlci5faXNFbXB0eSA9IF9pc0VtcHR5O1xuXG5cdHJldHVybiBidWlsZGVyO1xufTtcblxuY29uc3QgYXBwbHlTdHlsZSA9IChzZWxmLCBzdHJpbmcpID0+IHtcblx0aWYgKHNlbGYubGV2ZWwgPD0gMCB8fCAhc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHNlbGYuX2lzRW1wdHkgPyAnJyA6IHN0cmluZztcblx0fVxuXG5cdGxldCBzdHlsZXIgPSBzZWxmLl9zdHlsZXI7XG5cblx0aWYgKHN0eWxlciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHN0cmluZztcblx0fVxuXG5cdGNvbnN0IHtvcGVuQWxsLCBjbG9zZUFsbH0gPSBzdHlsZXI7XG5cdGlmIChzdHJpbmcuaW5kZXhPZignXFx1MDAxQicpICE9PSAtMSkge1xuXHRcdHdoaWxlIChzdHlsZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gUmVwbGFjZSBhbnkgaW5zdGFuY2VzIGFscmVhZHkgcHJlc2VudCB3aXRoIGEgcmUtb3BlbmluZyBjb2RlXG5cdFx0XHQvLyBvdGhlcndpc2Ugb25seSB0aGUgcGFydCBvZiB0aGUgc3RyaW5nIHVudGlsIHNhaWQgY2xvc2luZyBjb2RlXG5cdFx0XHQvLyB3aWxsIGJlIGNvbG9yZWQsIGFuZCB0aGUgcmVzdCB3aWxsIHNpbXBseSBiZSAncGxhaW4nLlxuXHRcdFx0c3RyaW5nID0gc3RyaW5nUmVwbGFjZUFsbChzdHJpbmcsIHN0eWxlci5jbG9zZSwgc3R5bGVyLm9wZW4pO1xuXG5cdFx0XHRzdHlsZXIgPSBzdHlsZXIucGFyZW50O1xuXHRcdH1cblx0fVxuXG5cdC8vIFdlIGNhbiBtb3ZlIGJvdGggbmV4dCBhY3Rpb25zIG91dCBvZiBsb29wLCBiZWNhdXNlIHJlbWFpbmluZyBhY3Rpb25zIGluIGxvb3Agd29uJ3QgaGF2ZVxuXHQvLyBhbnkvdmlzaWJsZSBlZmZlY3Qgb24gcGFydHMgd2UgYWRkIGhlcmUuIENsb3NlIHRoZSBzdHlsaW5nIGJlZm9yZSBhIGxpbmVicmVhayBhbmQgcmVvcGVuXG5cdC8vIGFmdGVyIG5leHQgbGluZSB0byBmaXggYSBibGVlZCBpc3N1ZSBvbiBtYWNPUzogaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL2NoYWxrL3B1bGwvOTJcblx0Y29uc3QgbGZJbmRleCA9IHN0cmluZy5pbmRleE9mKCdcXG4nKTtcblx0aWYgKGxmSW5kZXggIT09IC0xKSB7XG5cdFx0c3RyaW5nID0gc3RyaW5nRW5jYXNlQ1JMRldpdGhGaXJzdEluZGV4KHN0cmluZywgY2xvc2VBbGwsIG9wZW5BbGwsIGxmSW5kZXgpO1xuXHR9XG5cblx0cmV0dXJuIG9wZW5BbGwgKyBzdHJpbmcgKyBjbG9zZUFsbDtcbn07XG5cbmxldCB0ZW1wbGF0ZTtcbmNvbnN0IGNoYWxrVGFnID0gKGNoYWxrLCAuLi5zdHJpbmdzKSA9PiB7XG5cdGNvbnN0IFtmaXJzdFN0cmluZ10gPSBzdHJpbmdzO1xuXG5cdGlmICghaXNBcnJheShmaXJzdFN0cmluZykgfHwgIWlzQXJyYXkoZmlyc3RTdHJpbmcucmF3KSkge1xuXHRcdC8vIElmIGNoYWxrKCkgd2FzIGNhbGxlZCBieSBpdHNlbGYgb3Igd2l0aCBhIHN0cmluZyxcblx0XHQvLyByZXR1cm4gdGhlIHN0cmluZyBpdHNlbGYgYXMgYSBzdHJpbmcuXG5cdFx0cmV0dXJuIHN0cmluZ3Muam9pbignICcpO1xuXHR9XG5cblx0Y29uc3QgYXJndW1lbnRzXyA9IHN0cmluZ3Muc2xpY2UoMSk7XG5cdGNvbnN0IHBhcnRzID0gW2ZpcnN0U3RyaW5nLnJhd1swXV07XG5cblx0Zm9yIChsZXQgaSA9IDE7IGkgPCBmaXJzdFN0cmluZy5sZW5ndGg7IGkrKykge1xuXHRcdHBhcnRzLnB1c2goXG5cdFx0XHRTdHJpbmcoYXJndW1lbnRzX1tpIC0gMV0pLnJlcGxhY2UoL1t7fVxcXFxdL2csICdcXFxcJCYnKSxcblx0XHRcdFN0cmluZyhmaXJzdFN0cmluZy5yYXdbaV0pXG5cdFx0KTtcblx0fVxuXG5cdGlmICh0ZW1wbGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGVtcGxhdGUgPSByZXF1aXJlKCcuL3RlbXBsYXRlcycpO1xuXHR9XG5cblx0cmV0dXJuIHRlbXBsYXRlKGNoYWxrLCBwYXJ0cy5qb2luKCcnKSk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDaGFsay5wcm90b3R5cGUsIHN0eWxlcyk7XG5cbmNvbnN0IGNoYWxrID0gQ2hhbGsoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwXG5jaGFsay5zdXBwb3J0c0NvbG9yID0gc3Rkb3V0Q29sb3I7XG5jaGFsay5zdGRlcnIgPSBDaGFsayh7bGV2ZWw6IHN0ZGVyckNvbG9yID8gc3RkZXJyQ29sb3IubGV2ZWwgOiAwfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuY2hhbGsuc3RkZXJyLnN1cHBvcnRzQ29sb3IgPSBzdGRlcnJDb2xvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBjaGFsaztcbiIsICIvLyBzb3VyY2Ugb2YgaW5zcGlyYXRpb246IGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvcmVxdWlyZS1mb29sLXdlYnBhY2tcbnZhciByZXF1aXJlRm9vbFdlYnBhY2sgPSBldmFsKFxuICAgICd0eXBlb2YgcmVxdWlyZSAhPT0gXFwndW5kZWZpbmVkXFwnICcgK1xuICAgICc/IHJlcXVpcmUgJyArXG4gICAgJzogZnVuY3Rpb24gKG1vZHVsZSkgeyB0aHJvdyBuZXcgRXJyb3IoXFwnTW9kdWxlIFwiICsgbW9kdWxlICsgXCIgbm90IGZvdW5kLlxcJykgfSdcbik7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZUZvb2xXZWJwYWNrO1xuIiwgInZhciByZXF1aXJlRm9vbFdlYnBhY2sgPSByZXF1aXJlKCcuL3JlcXVpcmVGb29sV2VicGFjaycpO1xuXG4vLyBzb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9mbGV4ZGluZXNoL2Jyb3dzZXItb3Itbm9kZVxudmFyIGlzTm9kZSA9IGZ1bmN0aW9uIChub2RlUHJvY2Vzcykge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBub2RlUHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICBub2RlUHJvY2Vzcy52ZXJzaW9ucyAhPSBudWxsICYmXG4gICAgbm9kZVByb2Nlc3MudmVyc2lvbnMubm9kZSAhPSBudWxsXG4gICk7XG59XG5tb2R1bGUuZXhwb3J0cy5pc05vZGUgPSBpc05vZGVcblxuLy8gZGV0ZXJtaW5lcyB0aGUgSmF2YVNjcmlwdCBwbGF0Zm9ybTogYnJvd3NlciBvciBub2RlXG5tb2R1bGUuZXhwb3J0cy5wbGF0Zm9ybSA9IHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBpc05vZGUocHJvY2VzcylcbiAgPyAnbm9kZSdcbiAgOiAnYnJvd3Nlcic7XG5cbi8vIGRldGVybWluZXMgd2hldGhlciB0aGUgY29kZSBpcyBydW5uaW5nIGluIG1haW4gdGhyZWFkIG9yIG5vdFxuLy8gbm90ZSB0aGF0IGluIG5vZGUuanMgd2UgaGF2ZSB0byBjaGVjayBib3RoIHdvcmtlcl90aHJlYWQgYW5kIGNoaWxkX3Byb2Nlc3NcbnZhciB3b3JrZXJfdGhyZWFkcyA9IHRyeVJlcXVpcmVGb29sV2VicGFjaygnd29ya2VyX3RocmVhZHMnKTtcbm1vZHVsZS5leHBvcnRzLmlzTWFpblRocmVhZCA9IG1vZHVsZS5leHBvcnRzLnBsYXRmb3JtID09PSAnbm9kZSdcbiAgPyAoKCF3b3JrZXJfdGhyZWFkcyB8fCB3b3JrZXJfdGhyZWFkcy5pc01haW5UaHJlYWQpICYmICFwcm9jZXNzLmNvbm5lY3RlZClcbiAgOiB0eXBlb2YgV2luZG93ICE9PSAndW5kZWZpbmVkJztcblxuLy8gZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGNwdXMgYXZhaWxhYmxlXG5tb2R1bGUuZXhwb3J0cy5jcHVzID0gbW9kdWxlLmV4cG9ydHMucGxhdGZvcm0gPT09ICdicm93c2VyJ1xuICA/IHNlbGYubmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3lcbiAgOiByZXF1aXJlRm9vbFdlYnBhY2soJ29zJykuY3B1cygpLmxlbmd0aDtcblxuZnVuY3Rpb24gdHJ5UmVxdWlyZUZvb2xXZWJwYWNrIChtb2R1bGUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcmVxdWlyZUZvb2xXZWJwYWNrKG1vZHVsZSk7XG4gIH0gY2F0Y2goZXJyKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBQcm9taXNlXG4gKlxuICogSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vUnViYVhhLzg1MDEzNTkgZnJvbSBSdWJhWGEgPHRyYXNoQHJ1YmF4YS5vcmc+XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciAgIENhbGxlZCBhcyBoYW5kbGVyKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKVxuICogQHBhcmFtIHtQcm9taXNlfSBbcGFyZW50XSAgIFBhcmVudCBwcm9taXNlIGZvciBwcm9wYWdhdGlvbiBvZiBjYW5jZWwgYW5kIHRpbWVvdXRcbiAqL1xuZnVuY3Rpb24gUHJvbWlzZShoYW5kbGVyLCBwYXJlbnQpIHtcbiAgdmFyIG1lID0gdGhpcztcblxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdGdW5jdGlvbiBwYXJhbWV0ZXIgaGFuZGxlcihyZXNvbHZlLCByZWplY3QpIG1pc3NpbmcnKTtcbiAgfVxuXG4gIHZhciBfb25TdWNjZXNzID0gW107XG4gIHZhciBfb25GYWlsID0gW107XG5cbiAgLy8gc3RhdHVzXG4gIHRoaXMucmVzb2x2ZWQgPSBmYWxzZTtcbiAgdGhpcy5yZWplY3RlZCA9IGZhbHNlO1xuICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBQcm9jZXNzIG9uU3VjY2VzcyBhbmQgb25GYWlsIGNhbGxiYWNrczogYWRkIHRoZW0gdG8gdGhlIHF1ZXVlLlxuICAgKiBPbmNlIHRoZSBwcm9taXNlIGlzIHJlc29sdmUsIHRoZSBmdW5jdGlvbiBfcHJvbWlzZSBpcyByZXBsYWNlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvblN1Y2Nlc3NcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gb25GYWlsXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB2YXIgX3Byb2Nlc3MgPSBmdW5jdGlvbiAob25TdWNjZXNzLCBvbkZhaWwpIHtcbiAgICBfb25TdWNjZXNzLnB1c2gob25TdWNjZXNzKTtcbiAgICBfb25GYWlsLnB1c2gob25GYWlsKTtcbiAgfTtcblxuICAvKipcbiAgICogQWRkIGFuIG9uU3VjY2VzcyBjYWxsYmFjayBhbmQgb3B0aW9uYWxseSBhbiBvbkZhaWwgY2FsbGJhY2sgdG8gdGhlIFByb21pc2VcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gb25TdWNjZXNzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvbkZhaWxdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBwcm9taXNlXG4gICAqL1xuICB0aGlzLnRoZW4gPSBmdW5jdGlvbiAob25TdWNjZXNzLCBvbkZhaWwpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHMgPSBvblN1Y2Nlc3MgPyBfdGhlbihvblN1Y2Nlc3MsIHJlc29sdmUsIHJlamVjdCkgOiByZXNvbHZlO1xuICAgICAgdmFyIGYgPSBvbkZhaWwgICAgPyBfdGhlbihvbkZhaWwsICAgIHJlc29sdmUsIHJlamVjdCkgOiByZWplY3Q7XG5cbiAgICAgIF9wcm9jZXNzKHMsIGYpO1xuICAgIH0sIG1lKTtcbiAgfTtcblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgcHJvbWlzZVxuICAgKiBAcGFyYW0geyp9IHJlc3VsdFxuICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAqL1xuICB2YXIgX3Jlc29sdmUgPSBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgLy8gdXBkYXRlIHN0YXR1c1xuICAgIG1lLnJlc29sdmVkID0gdHJ1ZTtcbiAgICBtZS5yZWplY3RlZCA9IGZhbHNlO1xuICAgIG1lLnBlbmRpbmcgPSBmYWxzZTtcblxuICAgIF9vblN1Y2Nlc3MuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgIGZuKHJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICBfcHJvY2VzcyA9IGZ1bmN0aW9uIChvblN1Y2Nlc3MsIG9uRmFpbCkge1xuICAgICAgb25TdWNjZXNzKHJlc3VsdCk7XG4gICAgfTtcblxuICAgIF9yZXNvbHZlID0gX3JlamVjdCA9IGZ1bmN0aW9uICgpIHsgfTtcblxuICAgIHJldHVybiBtZTtcbiAgfTtcblxuICAvKipcbiAgICogUmVqZWN0IHRoZSBwcm9taXNlXG4gICAqIEBwYXJhbSB7RXJyb3J9IGVycm9yXG4gICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICovXG4gIHZhciBfcmVqZWN0ID0gZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgLy8gdXBkYXRlIHN0YXR1c1xuICAgIG1lLnJlc29sdmVkID0gZmFsc2U7XG4gICAgbWUucmVqZWN0ZWQgPSB0cnVlO1xuICAgIG1lLnBlbmRpbmcgPSBmYWxzZTtcblxuICAgIF9vbkZhaWwuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgIGZuKGVycm9yKTtcbiAgICB9KTtcblxuICAgIF9wcm9jZXNzID0gZnVuY3Rpb24gKG9uU3VjY2Vzcywgb25GYWlsKSB7XG4gICAgICBvbkZhaWwoZXJyb3IpO1xuICAgIH07XG5cbiAgICBfcmVzb2x2ZSA9IF9yZWplY3QgPSBmdW5jdGlvbiAoKSB7IH1cblxuICAgIHJldHVybiBtZTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FuY2VsIHRlIHByb21pc2UuIFRoaXMgd2lsbCByZWplY3QgdGhlIHByb21pc2Ugd2l0aCBhIENhbmNlbGxhdGlvbkVycm9yXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBzZWxmXG4gICAqL1xuICB0aGlzLmNhbmNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBwYXJlbnQuY2FuY2VsKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgX3JlamVjdChuZXcgQ2FuY2VsbGF0aW9uRXJyb3IoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXQgYSB0aW1lb3V0IGZvciB0aGUgcHJvbWlzZS4gSWYgdGhlIHByb21pc2UgaXMgbm90IHJlc29sdmVkIHdpdGhpblxuICAgKiB0aGUgdGltZSwgdGhlIHByb21pc2Ugd2lsbCBiZSBjYW5jZWxsZWQgYW5kIGEgVGltZW91dEVycm9yIGlzIHRocm93bi5cbiAgICogSWYgdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgaW4gdGltZSwgdGhlIHRpbWVvdXQgaXMgcmVtb3ZlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbGF5ICAgICBEZWxheSBpbiBtaWxsaXNlY29uZHNcbiAgICogQHJldHVybnMge1Byb21pc2V9IHNlbGZcbiAgICovXG4gIHRoaXMudGltZW91dCA9IGZ1bmN0aW9uIChkZWxheSkge1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHBhcmVudC50aW1lb3V0KGRlbGF5KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3JlamVjdChuZXcgVGltZW91dEVycm9yKCdQcm9taXNlIHRpbWVkIG91dCBhZnRlciAnICsgZGVsYXkgKyAnIG1zJykpO1xuICAgICAgfSwgZGVsYXkpO1xuXG4gICAgICBtZS5hbHdheXMoZnVuY3Rpb24gKCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lO1xuICB9O1xuXG4gIC8vIGF0dGFjaCBoYW5kbGVyIHBhc3NpbmcgdGhlIHJlc29sdmUgYW5kIHJlamVjdCBmdW5jdGlvbnNcbiAgaGFuZGxlcihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgX3Jlc29sdmUocmVzdWx0KTtcbiAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgX3JlamVjdChlcnJvcik7XG4gIH0pO1xufVxuXG4vKipcbiAqIEV4ZWN1dGUgZ2l2ZW4gY2FsbGJhY2ssIHRoZW4gY2FsbCByZXNvbHZlL3JlamVjdCBiYXNlZCBvbiB0aGUgcmV0dXJuZWQgcmVzdWx0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0XG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfdGhlbihjYWxsYmFjaywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciByZXMgPSBjYWxsYmFjayhyZXN1bHQpO1xuICAgICAgaWYgKHJlcyAmJiB0eXBlb2YgcmVzLnRoZW4gPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHJlc1snY2F0Y2gnXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBtZXRob2QgcmV0dXJuZWQgYSBwcm9taXNlXG4gICAgICAgIHJlcy50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJlamVjdChlcnJvcik7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWRkIGFuIG9uRmFpbCBjYWxsYmFjayB0byB0aGUgUHJvbWlzZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gb25GYWlsXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gcHJvbWlzZVxuICovXG5Qcm9taXNlLnByb3RvdHlwZVsnY2F0Y2gnXSA9IGZ1bmN0aW9uIChvbkZhaWwpIHtcbiAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvbkZhaWwpO1xufTtcblxuLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIFByb21pc2UuY2F0Y2goRXJyb3IsIGNhbGxiYWNrKVxuLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIFByb21pc2UuY2F0Y2goRXJyb3IsIEVycm9yLCBjYWxsYmFjaylcblxuLyoqXG4gKiBFeGVjdXRlIGdpdmVuIGNhbGxiYWNrIHdoZW4gdGhlIHByb21pc2UgZWl0aGVyIHJlc29sdmVzIG9yIHJlamVjdHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybnMge1Byb21pc2V9IHByb21pc2VcbiAqL1xuUHJvbWlzZS5wcm90b3R5cGUuYWx3YXlzID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiB0aGlzLnRoZW4oZm4sIGZuKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aGVuIGFsbCBwcm92aWRlZCBwcm9taXNlcyBhcmUgcmVzb2x2ZWQsXG4gKiBhbmQgZmFpbHMgd2hlbiBhbnkgb2YgdGhlIHByb21pc2VzIHJlc29sdmVzLlxuICogQHBhcmFtIHtQcm9taXNlW119IHByb21pc2VzXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gcHJvbWlzZVxuICovXG5Qcm9taXNlLmFsbCA9IGZ1bmN0aW9uIChwcm9taXNlcyl7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlbWFpbmluZyA9IHByb21pc2VzLmxlbmd0aCxcbiAgICAgICAgcmVzdWx0cyA9IFtdO1xuXG4gICAgaWYgKHJlbWFpbmluZykge1xuICAgICAgcHJvbWlzZXMuZm9yRWFjaChmdW5jdGlvbiAocCwgaSkge1xuICAgICAgICBwLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdHNbaV0gPSByZXN1bHQ7XG4gICAgICAgICAgcmVtYWluaW5nLS07XG4gICAgICAgICAgaWYgKHJlbWFpbmluZyA9PSAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgcmVtYWluaW5nID0gMDtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJlc29sdmUocmVzdWx0cyk7XG4gICAgfVxuICB9KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgcHJvbWlzZSByZXNvbHZlclxuICogQHJldHVybnMge3twcm9taXNlOiBQcm9taXNlLCByZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbn19IHJlc29sdmVyXG4gKi9cblByb21pc2UuZGVmZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciByZXNvbHZlciA9IHt9O1xuXG4gIHJlc29sdmVyLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgcmVzb2x2ZXIucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgcmVzb2x2ZXIucmVqZWN0ID0gcmVqZWN0O1xuICB9KTtcblxuICByZXR1cm4gcmVzb2x2ZXI7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIGNhbmNlbGxhdGlvbiBlcnJvclxuICogQHBhcmFtIHtTdHJpbmd9IFttZXNzYWdlXVxuICogQGV4dGVuZHMgRXJyb3JcbiAqL1xuZnVuY3Rpb24gQ2FuY2VsbGF0aW9uRXJyb3IobWVzc2FnZSkge1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdwcm9taXNlIGNhbmNlbGxlZCc7XG4gIHRoaXMuc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNrO1xufVxuXG5DYW5jZWxsYXRpb25FcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbkNhbmNlbGxhdGlvbkVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVycm9yO1xuQ2FuY2VsbGF0aW9uRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnQ2FuY2VsbGF0aW9uRXJyb3InO1xuXG5Qcm9taXNlLkNhbmNlbGxhdGlvbkVycm9yID0gQ2FuY2VsbGF0aW9uRXJyb3I7XG5cblxuLyoqXG4gKiBDcmVhdGUgYSB0aW1lb3V0IGVycm9yXG4gKiBAcGFyYW0ge1N0cmluZ30gW21lc3NhZ2VdXG4gKiBAZXh0ZW5kcyBFcnJvclxuICovXG5mdW5jdGlvbiBUaW1lb3V0RXJyb3IobWVzc2FnZSkge1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgdGhpcy5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2s7XG59XG5cblRpbWVvdXRFcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcblRpbWVvdXRFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFcnJvcjtcblRpbWVvdXRFcnJvci5wcm90b3R5cGUubmFtZSA9ICdUaW1lb3V0RXJyb3InO1xuXG5Qcm9taXNlLlRpbWVvdXRFcnJvciA9IFRpbWVvdXRFcnJvcjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IFByb21pc2U7XG4iLCAiLyoqXG4gKiBlbWJlZGRlZFdvcmtlci5qcyBjb250YWlucyBhbiBlbWJlZGRlZCB2ZXJzaW9uIG9mIHdvcmtlci5qcy5cbiAqIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCxcbiAqIGNoYW5nZXMgbWFkZSBpbiB0aGlzIGZpbGUgd2lsbCBiZSBvdmVyd3JpdHRlbi5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBcIiFmdW5jdGlvbigpe3ZhciBfX3dlYnBhY2tfZXhwb3J0c19fPXt9OyFmdW5jdGlvbigpe3ZhciBleHBvcnRzPV9fd2VicGFja19leHBvcnRzX18sX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXztmdW5jdGlvbiBfdHlwZW9mKHIpe3JldHVybihfdHlwZW9mPVxcXCJmdW5jdGlvblxcXCI9PXR5cGVvZiBTeW1ib2wmJlxcXCJzeW1ib2xcXFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcn06ZnVuY3Rpb24ocil7cmV0dXJuIHImJlxcXCJmdW5jdGlvblxcXCI9PXR5cGVvZiBTeW1ib2wmJnIuY29uc3RydWN0b3I9PT1TeW1ib2wmJnIhPT1TeW1ib2wucHJvdG90eXBlP1xcXCJzeW1ib2xcXFwiOnR5cGVvZiByfSkocil9dmFyIHJlcXVpcmVGb29sV2VicGFjaz1ldmFsKFxcXCJ0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcgPyByZXF1aXJlIDogZnVuY3Rpb24gKG1vZHVsZSkgeyB0aHJvdyBuZXcgRXJyb3IoJ01vZHVsZSBcXFxcXFxcIiArIG1vZHVsZSArIFxcXFxcXFwiIG5vdCBmb3VuZC4nKSB9XFxcIiksVEVSTUlOQVRFX01FVEhPRF9JRD1cXFwiX193b3JrZXJwb29sLXRlcm1pbmF0ZV9fXFxcIix3b3JrZXI9e2V4aXQ6ZnVuY3Rpb24oKXt9fSxXb3JrZXJUaHJlYWRzLHBhcmVudFBvcnQ7aWYoXFxcInVuZGVmaW5lZFxcXCIhPXR5cGVvZiBzZWxmJiZcXFwiZnVuY3Rpb25cXFwiPT10eXBlb2YgcG9zdE1lc3NhZ2UmJlxcXCJmdW5jdGlvblxcXCI9PXR5cGVvZiBhZGRFdmVudExpc3RlbmVyKXdvcmtlci5vbj1mdW5jdGlvbihyLGUpe2FkZEV2ZW50TGlzdGVuZXIocixmdW5jdGlvbihyKXtlKHIuZGF0YSl9KX0sd29ya2VyLnNlbmQ9ZnVuY3Rpb24ocil7cG9zdE1lc3NhZ2Uocil9O2Vsc2V7aWYoXFxcInVuZGVmaW5lZFxcXCI9PXR5cGVvZiBwcm9jZXNzKXRocm93IG5ldyBFcnJvcihcXFwiU2NyaXB0IG11c3QgYmUgZXhlY3V0ZWQgYXMgYSB3b3JrZXJcXFwiKTt0cnl7V29ya2VyVGhyZWFkcz1yZXF1aXJlRm9vbFdlYnBhY2soXFxcIndvcmtlcl90aHJlYWRzXFxcIil9Y2F0Y2goZXJyb3Ipe2lmKFxcXCJvYmplY3RcXFwiIT09X3R5cGVvZihlcnJvcil8fG51bGw9PT1lcnJvcnx8XFxcIk1PRFVMRV9OT1RfRk9VTkRcXFwiIT09ZXJyb3IuY29kZSl0aHJvdyBlcnJvcn1Xb3JrZXJUaHJlYWRzJiZudWxsIT09V29ya2VyVGhyZWFkcy5wYXJlbnRQb3J0PyhwYXJlbnRQb3J0PVdvcmtlclRocmVhZHMucGFyZW50UG9ydCx3b3JrZXIuc2VuZD1wYXJlbnRQb3J0LnBvc3RNZXNzYWdlLmJpbmQocGFyZW50UG9ydCksd29ya2VyLm9uPXBhcmVudFBvcnQub24uYmluZChwYXJlbnRQb3J0KSk6KHdvcmtlci5vbj1wcm9jZXNzLm9uLmJpbmQocHJvY2Vzcyksd29ya2VyLnNlbmQ9cHJvY2Vzcy5zZW5kLmJpbmQocHJvY2Vzcyksd29ya2VyLm9uKFxcXCJkaXNjb25uZWN0XFxcIixmdW5jdGlvbigpe3Byb2Nlc3MuZXhpdCgxKX0pLHdvcmtlci5leGl0PXByb2Nlc3MuZXhpdC5iaW5kKHByb2Nlc3MpKX1mdW5jdGlvbiBjb252ZXJ0RXJyb3Iobyl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG8pLnJlZHVjZShmdW5jdGlvbihyLGUpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocixlLHt2YWx1ZTpvW2VdLGVudW1lcmFibGU6ITB9KX0se30pfWZ1bmN0aW9uIGlzUHJvbWlzZShyKXtyZXR1cm4gciYmXFxcImZ1bmN0aW9uXFxcIj09dHlwZW9mIHIudGhlbiYmXFxcImZ1bmN0aW9uXFxcIj09dHlwZW9mIHIuY2F0Y2h9d29ya2VyLm1ldGhvZHM9e30sd29ya2VyLm1ldGhvZHMucnVuPWZ1bmN0aW9uKHIsZSl7cj1uZXcgRnVuY3Rpb24oXFxcInJldHVybiAoXFxcIityK1xcXCIpLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XFxcIik7cmV0dXJuIHIuYXBwbHkocixlKX0sd29ya2VyLm1ldGhvZHMubWV0aG9kcz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh3b3JrZXIubWV0aG9kcyl9O3ZhciBjdXJyZW50UmVxdWVzdElkPW51bGw7d29ya2VyLm9uKFxcXCJtZXNzYWdlXFxcIixmdW5jdGlvbihlKXtpZihlPT09VEVSTUlOQVRFX01FVEhPRF9JRClyZXR1cm4gd29ya2VyLmV4aXQoMCk7dHJ5e3ZhciByPXdvcmtlci5tZXRob2RzW2UubWV0aG9kXTtpZighcil0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbWV0aG9kIFxcXCInK2UubWV0aG9kKydcXFwiJyk7Y3VycmVudFJlcXVlc3RJZD1lLmlkO3ZhciBvPXIuYXBwbHkocixlLnBhcmFtcyk7aXNQcm9taXNlKG8pP28udGhlbihmdW5jdGlvbihyKXt3b3JrZXIuc2VuZCh7aWQ6ZS5pZCxyZXN1bHQ6cixlcnJvcjpudWxsfSksY3VycmVudFJlcXVlc3RJZD1udWxsfSkuY2F0Y2goZnVuY3Rpb24ocil7d29ya2VyLnNlbmQoe2lkOmUuaWQscmVzdWx0Om51bGwsZXJyb3I6Y29udmVydEVycm9yKHIpfSksY3VycmVudFJlcXVlc3RJZD1udWxsfSk6KHdvcmtlci5zZW5kKHtpZDplLmlkLHJlc3VsdDpvLGVycm9yOm51bGx9KSxjdXJyZW50UmVxdWVzdElkPW51bGwpfWNhdGNoKHIpe3dvcmtlci5zZW5kKHtpZDplLmlkLHJlc3VsdDpudWxsLGVycm9yOmNvbnZlcnRFcnJvcihyKX0pfX0pLHdvcmtlci5yZWdpc3Rlcj1mdW5jdGlvbihyKXtpZihyKWZvcih2YXIgZSBpbiByKXIuaGFzT3duUHJvcGVydHkoZSkmJih3b3JrZXIubWV0aG9kc1tlXT1yW2VdKTt3b3JrZXIuc2VuZChcXFwicmVhZHlcXFwiKX0sd29ya2VyLmVtaXQ9ZnVuY3Rpb24ocil7Y3VycmVudFJlcXVlc3RJZCYmd29ya2VyLnNlbmQoe2lkOmN1cnJlbnRSZXF1ZXN0SWQsaXNFdmVudDohMCxwYXlsb2FkOnJ9KX0sX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXz13b3JrZXIucmVnaXN0ZXIsd29ya2VyLmVtaXR9KCl9KCk7XCI7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgUHJvbWlzZSA9IHJlcXVpcmUoJy4vUHJvbWlzZScpO1xudmFyIGVudmlyb25tZW50ID0gcmVxdWlyZSgnLi9lbnZpcm9ubWVudCcpO1xudmFyIHJlcXVpcmVGb29sV2VicGFjayA9IHJlcXVpcmUoJy4vcmVxdWlyZUZvb2xXZWJwYWNrJyk7XG5cbi8qKlxuICogU3BlY2lhbCBtZXNzYWdlIHNlbnQgYnkgcGFyZW50IHdoaWNoIGNhdXNlcyBhIGNoaWxkIHByb2Nlc3Mgd29ya2VyIHRvIHRlcm1pbmF0ZSBpdHNlbGYuXG4gKiBOb3QgYSBcIm1lc3NhZ2Ugb2JqZWN0XCI7IHRoaXMgc3RyaW5nIGlzIHRoZSBlbnRpcmUgbWVzc2FnZS5cbiAqL1xudmFyIFRFUk1JTkFURV9NRVRIT0RfSUQgPSAnX193b3JrZXJwb29sLXRlcm1pbmF0ZV9fJztcblxuLyoqXG4gKiBJZiBzZW5kaW5nIGBURVJNSU5BVEVfTUVUSE9EX0lEYCBkb2VzIG5vdCBjYXVzZSB0aGUgY2hpbGQgcHJvY2VzcyB0byBleGl0IGluIHRoaXMgbWFueSBtaWxsaXNlY29uZHMsXG4gKiBmb3JjZS1raWxsIHRoZSBjaGlsZCBwcm9jZXNzLlxuICovXG52YXIgQ0hJTERfUFJPQ0VTU19FWElUX1RJTUVPVVQgPSAxMDAwO1xuXG5mdW5jdGlvbiBlbnN1cmVXb3JrZXJUaHJlYWRzKCkge1xuICB2YXIgV29ya2VyVGhyZWFkcyA9IHRyeVJlcXVpcmVXb3JrZXJUaHJlYWRzKClcbiAgaWYgKCFXb3JrZXJUaHJlYWRzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdXb3JrZXJQb29sOiB3b3JrZXJUeXBlID0gXFwndGhyZWFkXFwnIGlzIG5vdCBzdXBwb3J0ZWQsIE5vZGUgPj0gMTEuNy4wIHJlcXVpcmVkJylcbiAgfVxuXG4gIHJldHVybiBXb3JrZXJUaHJlYWRzO1xufVxuXG4vLyBjaGVjayB3aGV0aGVyIFdvcmtlciBpcyBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXJcbmZ1bmN0aW9uIGVuc3VyZVdlYldvcmtlcigpIHtcbiAgLy8gV29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gUGhhbnRvbUpTIChPciBRdFdlYmtpdCk6IGh0dHBzOi8vZ2l0aHViLmNvbS9hcml5YS9waGFudG9tanMvaXNzdWVzLzE0NTM0XG4gIGlmICh0eXBlb2YgV29ya2VyICE9PSAnZnVuY3Rpb24nICYmICh0eXBlb2YgV29ya2VyICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgV29ya2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciAhPT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1dvcmtlclBvb2w6IFdlYiBXb3JrZXJzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlSZXF1aXJlV29ya2VyVGhyZWFkcygpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcmVxdWlyZUZvb2xXZWJwYWNrKCd3b3JrZXJfdGhyZWFkcycpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcgJiYgZXJyb3IgIT09IG51bGwgJiYgZXJyb3IuY29kZSA9PT0gJ01PRFVMRV9OT1RfRk9VTkQnKSB7XG4gICAgICAvLyBubyB3b3JrZXJfdGhyZWFkcyBhdmFpbGFibGUgKG9sZCB2ZXJzaW9uIG9mIG5vZGUuanMpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG59XG5cbi8vIGdldCB0aGUgZGVmYXVsdCB3b3JrZXIgc2NyaXB0XG5mdW5jdGlvbiBnZXREZWZhdWx0V29ya2VyKCkge1xuICBpZiAoZW52aXJvbm1lbnQucGxhdGZvcm0gPT09ICdicm93c2VyJykge1xuICAgIC8vIHRlc3Qgd2hldGhlciB0aGUgYnJvd3NlciBzdXBwb3J0cyBhbGwgZmVhdHVyZXMgdGhhdCB3ZSBuZWVkXG4gICAgaWYgKHR5cGVvZiBCbG9iID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdCbG9iIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXInKTtcbiAgICB9XG4gICAgaWYgKCF3aW5kb3cuVVJMIHx8IHR5cGVvZiB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVUkwuY3JlYXRlT2JqZWN0VVJMIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXInKTtcbiAgICB9XG5cbiAgICAvLyB1c2UgZW1iZWRkZWQgd29ya2VyLmpzXG4gICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbcmVxdWlyZSgnLi9nZW5lcmF0ZWQvZW1iZWRkZWRXb3JrZXInKV0sIHt0eXBlOiAndGV4dC9qYXZhc2NyaXB0J30pO1xuICAgIHJldHVybiB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgfVxuICBlbHNlIHtcbiAgICAvLyB1c2UgZXh0ZXJuYWwgd29ya2VyLmpzIGluIGN1cnJlbnQgZGlyZWN0b3J5XG4gICAgcmV0dXJuIF9fZGlybmFtZSArICcvd29ya2VyLmpzJztcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXR1cFdvcmtlcihzY3JpcHQsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMud29ya2VyVHlwZSA9PT0gJ3dlYicpIHsgLy8gYnJvd3NlciBvbmx5XG4gICAgZW5zdXJlV2ViV29ya2VyKCk7XG4gICAgcmV0dXJuIHNldHVwQnJvd3NlcldvcmtlcihzY3JpcHQsIFdvcmtlcik7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy53b3JrZXJUeXBlID09PSAndGhyZWFkJykgeyAvLyBub2RlLmpzIG9ubHlcbiAgICBXb3JrZXJUaHJlYWRzID0gZW5zdXJlV29ya2VyVGhyZWFkcygpO1xuICAgIHJldHVybiBzZXR1cFdvcmtlclRocmVhZFdvcmtlcihzY3JpcHQsIFdvcmtlclRocmVhZHMpO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMud29ya2VyVHlwZSA9PT0gJ3Byb2Nlc3MnIHx8ICFvcHRpb25zLndvcmtlclR5cGUpIHsgLy8gbm9kZS5qcyBvbmx5XG4gICAgcmV0dXJuIHNldHVwUHJvY2Vzc1dvcmtlcihzY3JpcHQsIHJlc29sdmVGb3JrT3B0aW9ucyhvcHRpb25zKSwgcmVxdWlyZUZvb2xXZWJwYWNrKCdjaGlsZF9wcm9jZXNzJykpO1xuICB9IGVsc2UgeyAvLyBvcHRpb25zLndvcmtlclR5cGUgPT09ICdhdXRvJyBvciB1bmRlZmluZWRcbiAgICBpZiAoZW52aXJvbm1lbnQucGxhdGZvcm0gPT09ICdicm93c2VyJykge1xuICAgICAgZW5zdXJlV2ViV29ya2VyKCk7XG4gICAgICByZXR1cm4gc2V0dXBCcm93c2VyV29ya2VyKHNjcmlwdCwgV29ya2VyKTtcbiAgICB9XG4gICAgZWxzZSB7IC8vIGVudmlyb25tZW50LnBsYXRmb3JtID09PSAnbm9kZSdcbiAgICAgIHZhciBXb3JrZXJUaHJlYWRzID0gdHJ5UmVxdWlyZVdvcmtlclRocmVhZHMoKTtcbiAgICAgIGlmIChXb3JrZXJUaHJlYWRzKSB7XG4gICAgICAgIHJldHVybiBzZXR1cFdvcmtlclRocmVhZFdvcmtlcihzY3JpcHQsIFdvcmtlclRocmVhZHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNldHVwUHJvY2Vzc1dvcmtlcihzY3JpcHQsIHJlc29sdmVGb3JrT3B0aW9ucyhvcHRpb25zKSwgcmVxdWlyZUZvb2xXZWJwYWNrKCdjaGlsZF9wcm9jZXNzJykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXR1cEJyb3dzZXJXb3JrZXIoc2NyaXB0LCBXb3JrZXIpIHtcbiAgLy8gY3JlYXRlIHRoZSB3ZWIgd29ya2VyXG4gIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKHNjcmlwdCk7XG5cbiAgd29ya2VyLmlzQnJvd3NlcldvcmtlciA9IHRydWU7XG4gIC8vIGFkZCBub2RlLmpzIEFQSSB0byB0aGUgd2ViIHdvcmtlclxuICB3b3JrZXIub24gPSBmdW5jdGlvbiAoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgICAgY2FsbGJhY2sobWVzc2FnZS5kYXRhKTtcbiAgICB9KTtcbiAgfTtcbiAgd29ya2VyLnNlbmQgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgIHRoaXMucG9zdE1lc3NhZ2UobWVzc2FnZSk7XG4gIH07XG4gIHJldHVybiB3b3JrZXI7XG59XG5cbmZ1bmN0aW9uIHNldHVwV29ya2VyVGhyZWFkV29ya2VyKHNjcmlwdCwgV29ya2VyVGhyZWFkcykge1xuICB2YXIgd29ya2VyID0gbmV3IFdvcmtlclRocmVhZHMuV29ya2VyKHNjcmlwdCwge1xuICAgIHN0ZG91dDogZmFsc2UsIC8vIGF1dG9tYXRpY2FsbHkgcGlwZSB3b3JrZXIuU1RET1VUIHRvIHByb2Nlc3MuU1RET1VUXG4gICAgc3RkZXJyOiBmYWxzZSAgLy8gYXV0b21hdGljYWxseSBwaXBlIHdvcmtlci5TVERFUlIgdG8gcHJvY2Vzcy5TVERFUlJcbiAgfSk7XG4gIHdvcmtlci5pc1dvcmtlclRocmVhZCA9IHRydWU7XG4gIC8vIG1ha2UgdGhlIHdvcmtlciBtaW1pYyBhIGNoaWxkX3Byb2Nlc3NcbiAgd29ya2VyLnNlbmQgPSBmdW5jdGlvbihtZXNzYWdlKSB7XG4gICAgdGhpcy5wb3N0TWVzc2FnZShtZXNzYWdlKTtcbiAgfTtcblxuICB3b3JrZXIua2lsbCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudGVybWluYXRlKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgd29ya2VyLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRlcm1pbmF0ZSgpO1xuICB9O1xuXG4gIHJldHVybiB3b3JrZXI7XG59XG5cbmZ1bmN0aW9uIHNldHVwUHJvY2Vzc1dvcmtlcihzY3JpcHQsIG9wdGlvbnMsIGNoaWxkX3Byb2Nlc3MpIHtcbiAgLy8gbm8gV29ya2VyVGhyZWFkcywgZmFsbGJhY2sgdG8gc3ViLXByb2Nlc3MgYmFzZWQgd29ya2Vyc1xuICB2YXIgd29ya2VyID0gY2hpbGRfcHJvY2Vzcy5mb3JrKFxuICAgIHNjcmlwdCxcbiAgICBvcHRpb25zLmZvcmtBcmdzLFxuICAgIG9wdGlvbnMuZm9ya09wdHNcbiAgKTtcblxuICB3b3JrZXIuaXNDaGlsZFByb2Nlc3MgPSB0cnVlO1xuICByZXR1cm4gd29ya2VyO1xufVxuXG4vLyBhZGQgZGVidWcgZmxhZ3MgdG8gY2hpbGQgcHJvY2Vzc2VzIGlmIHRoZSBub2RlIGluc3BlY3RvciBpcyBhY3RpdmVcbmZ1bmN0aW9uIHJlc29sdmVGb3JrT3B0aW9ucyhvcHRzKSB7XG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gIHZhciBwcm9jZXNzRXhlY0FyZ3YgPSBwcm9jZXNzLmV4ZWNBcmd2LmpvaW4oJyAnKTtcbiAgdmFyIGluc3BlY3RvckFjdGl2ZSA9IHByb2Nlc3NFeGVjQXJndi5pbmRleE9mKCctLWluc3BlY3QnKSAhPT0gLTE7XG4gIHZhciBkZWJ1Z0JyayA9IHByb2Nlc3NFeGVjQXJndi5pbmRleE9mKCctLWRlYnVnLWJyaycpICE9PSAtMTtcblxuICB2YXIgZXhlY0FyZ3YgPSBbXTtcbiAgaWYgKGluc3BlY3RvckFjdGl2ZSkge1xuICAgIGV4ZWNBcmd2LnB1c2goJy0taW5zcGVjdD0nICsgb3B0cy5kZWJ1Z1BvcnQpO1xuXG4gICAgaWYgKGRlYnVnQnJrKSB7XG4gICAgICBleGVjQXJndi5wdXNoKCctLWRlYnVnLWJyaycpO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3MuZXhlY0FyZ3YuZm9yRWFjaChmdW5jdGlvbihhcmcpIHtcbiAgICBpZiAoYXJnLmluZGV4T2YoJy0tbWF4LW9sZC1zcGFjZS1zaXplJykgPiAtMSkge1xuICAgICAgZXhlY0FyZ3YucHVzaChhcmcpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBvcHRzLCB7XG4gICAgZm9ya0FyZ3M6IG9wdHMuZm9ya0FyZ3MsXG4gICAgZm9ya09wdHM6IE9iamVjdC5hc3NpZ24oe30sIG9wdHMuZm9ya09wdHMsIHtcbiAgICAgIGV4ZWNBcmd2OiAob3B0cy5mb3JrT3B0cyAmJiBvcHRzLmZvcmtPcHRzLmV4ZWNBcmd2IHx8IFtdKVxuICAgICAgLmNvbmNhdChleGVjQXJndilcbiAgICB9KVxuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHNlcmlhbGl6ZWQgZXJyb3IgdG8gRXJyb3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogRXJyb3IgdGhhdCBoYXMgYmVlbiBzZXJpYWxpemVkIGFuZCBwYXJzZWQgdG8gb2JqZWN0XG4gKiBAcmV0dXJuIHtFcnJvcn0gVGhlIGVxdWl2YWxlbnQgRXJyb3IuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvRXJyb3IgKG9iaikge1xuICB2YXIgdGVtcCA9IG5ldyBFcnJvcignJylcbiAgdmFyIHByb3BzID0gT2JqZWN0LmtleXMob2JqKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB0ZW1wW3Byb3BzW2ldXSA9IG9ialtwcm9wc1tpXV1cbiAgfVxuXG4gIHJldHVybiB0ZW1wXG59XG5cbi8qKlxuICogQSBXb3JrZXJIYW5kbGVyIGNvbnRyb2xzIGEgc2luZ2xlIHdvcmtlci4gVGhpcyB3b3JrZXIgY2FuIGJlIGEgY2hpbGQgcHJvY2Vzc1xuICogb24gbm9kZS5qcyBvciBhIFdlYldvcmtlciBpbiBhIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0ge1N0cmluZ30gW3NjcmlwdF0gSWYgbm8gc2NyaXB0IGlzIHByb3ZpZGVkLCBhIGRlZmF1bHQgd29ya2VyIHdpdGggYVxuICogICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJ1biB3aWxsIGJlIGNyZWF0ZWQuXG4gKiBAcGFyYW0ge1dvcmtlclBvb2xPcHRpb25zfSBfb3B0aW9ucyBTZWUgZG9jc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFdvcmtlckhhbmRsZXIoc2NyaXB0LCBfb3B0aW9ucykge1xuICB2YXIgbWUgPSB0aGlzO1xuICB2YXIgb3B0aW9ucyA9IF9vcHRpb25zIHx8IHt9O1xuXG4gIHRoaXMuc2NyaXB0ID0gc2NyaXB0IHx8IGdldERlZmF1bHRXb3JrZXIoKTtcbiAgdGhpcy53b3JrZXIgPSBzZXR1cFdvcmtlcih0aGlzLnNjcmlwdCwgb3B0aW9ucyk7XG4gIHRoaXMuZGVidWdQb3J0ID0gb3B0aW9ucy5kZWJ1Z1BvcnQ7XG4gIHRoaXMuZm9ya09wdHMgPSBvcHRpb25zLmZvcmtPcHRzO1xuICB0aGlzLmZvcmtBcmdzID0gb3B0aW9ucy5mb3JrQXJncztcblxuICAvLyBUaGUgcmVhZHkgbWVzc2FnZSBpcyBvbmx5IHNlbnQgaWYgdGhlIHdvcmtlci5hZGQgbWV0aG9kIGlzIGNhbGxlZCAoQW5kIHRoZSBkZWZhdWx0IHNjcmlwdCBpcyBub3QgdXNlZClcbiAgaWYgKCFzY3JpcHQpIHtcbiAgICB0aGlzLndvcmtlci5yZWFkeSA9IHRydWU7XG4gIH1cblxuICAvLyBxdWV1ZSBmb3IgcmVxdWVzdHMgdGhhdCBhcmUgcmVjZWl2ZWQgYmVmb3JlIHRoZSB3b3JrZXIgaXMgcmVhZHlcbiAgdGhpcy5yZXF1ZXN0UXVldWUgPSBbXTtcbiAgdGhpcy53b3JrZXIub24oJ21lc3NhZ2UnLCBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICBpZiAobWUudGVybWluYXRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3BvbnNlID09PSAnc3RyaW5nJyAmJiByZXNwb25zZSA9PT0gJ3JlYWR5Jykge1xuICAgICAgbWUud29ya2VyLnJlYWR5ID0gdHJ1ZTtcbiAgICAgIGRpc3BhdGNoUXVldWVkUmVxdWVzdHMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmluZCB0aGUgdGFzayBmcm9tIHRoZSBwcm9jZXNzaW5nIHF1ZXVlLCBhbmQgcnVuIHRoZSB0YXNrcyBjYWxsYmFja1xuICAgICAgdmFyIGlkID0gcmVzcG9uc2UuaWQ7XG4gICAgICB2YXIgdGFzayA9IG1lLnByb2Nlc3NpbmdbaWRdO1xuICAgICAgaWYgKHRhc2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocmVzcG9uc2UuaXNFdmVudCkge1xuICAgICAgICAgIGlmICh0YXNrLm9wdGlvbnMgJiYgdHlwZW9mIHRhc2sub3B0aW9ucy5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGFzay5vcHRpb25zLm9uKHJlc3BvbnNlLnBheWxvYWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyByZW1vdmUgdGhlIHRhc2sgZnJvbSB0aGUgcXVldWVcbiAgICAgICAgICBkZWxldGUgbWUucHJvY2Vzc2luZ1tpZF07XG5cbiAgICAgICAgICAvLyB0ZXN0IGlmIHdlIG5lZWQgdG8gdGVybWluYXRlXG4gICAgICAgICAgaWYgKG1lLnRlcm1pbmF0aW5nID09PSB0cnVlKSB7XG4gICAgICAgICAgICAvLyBjb21wbGV0ZSB3b3JrZXIgdGVybWluYXRpb24gaWYgYWxsIHRhc2tzIGFyZSBmaW5pc2hlZFxuICAgICAgICAgICAgbWUudGVybWluYXRlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gcmVzb2x2ZSB0aGUgdGFzaydzIHByb21pc2VcbiAgICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRhc2sucmVzb2x2ZXIucmVqZWN0KG9iamVjdFRvRXJyb3IocmVzcG9uc2UuZXJyb3IpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0YXNrLnJlc29sdmVyLnJlc29sdmUocmVzcG9uc2UucmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8vIHJlamVjdCBhbGwgcnVubmluZyB0YXNrcyBvbiB3b3JrZXIgZXJyb3JcbiAgZnVuY3Rpb24gb25FcnJvcihlcnJvcikge1xuICAgIG1lLnRlcm1pbmF0ZWQgPSB0cnVlO1xuXG4gICAgZm9yICh2YXIgaWQgaW4gbWUucHJvY2Vzc2luZykge1xuICAgICAgaWYgKG1lLnByb2Nlc3NpbmdbaWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbWUucHJvY2Vzc2luZ1tpZF0ucmVzb2x2ZXIucmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbWUucHJvY2Vzc2luZyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH1cblxuICAvLyBzZW5kIGFsbCBxdWV1ZWQgcmVxdWVzdHMgdG8gd29ya2VyXG4gIGZ1bmN0aW9uIGRpc3BhdGNoUXVldWVkUmVxdWVzdHMoKVxuICB7XG4gICAgZm9yKGNvbnN0IHJlcXVlc3Qgb2YgbWUucmVxdWVzdFF1ZXVlLnNwbGljZSgwKSkge1xuICAgICAgbWUud29ya2VyLnNlbmQocmVxdWVzdCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHdvcmtlciA9IHRoaXMud29ya2VyO1xuICAvLyBsaXN0ZW4gZm9yIHdvcmtlciBtZXNzYWdlcyBlcnJvciBhbmQgZXhpdFxuICB0aGlzLndvcmtlci5vbignZXJyb3InLCBvbkVycm9yKTtcbiAgdGhpcy53b3JrZXIub24oJ2V4aXQnLCBmdW5jdGlvbiAoZXhpdENvZGUsIHNpZ25hbENvZGUpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXb3JrZXJwb29sIFdvcmtlciB0ZXJtaW5hdGVkIFVuZXhwZWN0ZWRseVxcbic7XG5cbiAgICBtZXNzYWdlICs9ICcgICAgZXhpdENvZGU6IGAnICsgZXhpdENvZGUgKyAnYFxcbic7XG4gICAgbWVzc2FnZSArPSAnICAgIHNpZ25hbENvZGU6IGAnICsgc2lnbmFsQ29kZSArICdgXFxuJztcblxuICAgIG1lc3NhZ2UgKz0gJyAgICB3b3JrZXJwb29sLnNjcmlwdDogYCcgKyAgbWUuc2NyaXB0ICsgJ2BcXG4nO1xuICAgIG1lc3NhZ2UgKz0gJyAgICBzcGF3bkFyZ3M6IGAnICsgIHdvcmtlci5zcGF3bmFyZ3MgKyAnYFxcbic7XG4gICAgbWVzc2FnZSArPSAnICAgIHNwYXduZmlsZTogYCcgKyB3b3JrZXIuc3Bhd25maWxlICsgJ2BcXG4nXG5cbiAgICBtZXNzYWdlICs9ICcgICAgc3Rkb3V0OiBgJyArIHdvcmtlci5zdGRvdXQgKyAnYFxcbidcbiAgICBtZXNzYWdlICs9ICcgICAgc3RkZXJyOiBgJyArIHdvcmtlci5zdGRlcnIgKyAnYFxcbidcblxuICAgIG9uRXJyb3IobmV3IEVycm9yKG1lc3NhZ2UpKTtcbiAgfSk7XG5cbiAgdGhpcy5wcm9jZXNzaW5nID0gT2JqZWN0LmNyZWF0ZShudWxsKTsgLy8gcXVldWUgd2l0aCB0YXNrcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3NcblxuICB0aGlzLnRlcm1pbmF0aW5nID0gZmFsc2U7XG4gIHRoaXMudGVybWluYXRlZCA9IGZhbHNlO1xuICB0aGlzLnRlcm1pbmF0aW9uSGFuZGxlciA9IG51bGw7XG4gIHRoaXMubGFzdElkID0gMDtcbn1cblxuLyoqXG4gKiBHZXQgYSBsaXN0IHdpdGggbWV0aG9kcyBhdmFpbGFibGUgb24gdGhlIHdvcmtlci5cbiAqIEByZXR1cm4ge1Byb21pc2UuPFN0cmluZ1tdLCBFcnJvcj59IG1ldGhvZHNcbiAqL1xuV29ya2VySGFuZGxlci5wcm90b3R5cGUubWV0aG9kcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuZXhlYygnbWV0aG9kcycpO1xufTtcblxuLyoqXG4gKiBFeGVjdXRlIGEgbWV0aG9kIHdpdGggZ2l2ZW4gcGFyYW1ldGVycyBvbiB0aGUgd29ya2VyXG4gKiBAcGFyYW0ge1N0cmluZ30gbWV0aG9kXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFyYW1zXVxuICogQHBhcmFtIHt7cmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb259fSBbcmVzb2x2ZXJdXG4gKiBAcGFyYW0ge0V4ZWNPcHRpb25zfSAgW29wdGlvbnNdXG4gKiBAcmV0dXJuIHtQcm9taXNlLjwqLCBFcnJvcj59IHJlc3VsdFxuICovXG5Xb3JrZXJIYW5kbGVyLnByb3RvdHlwZS5leGVjID0gZnVuY3Rpb24obWV0aG9kLCBwYXJhbXMsIHJlc29sdmVyLCBvcHRpb25zKSB7XG4gIGlmICghcmVzb2x2ZXIpIHtcbiAgICByZXNvbHZlciA9IFByb21pc2UuZGVmZXIoKTtcbiAgfVxuXG4gIC8vIGdlbmVyYXRlIGEgdW5pcXVlIGlkIGZvciB0aGUgdGFza1xuICB2YXIgaWQgPSArK3RoaXMubGFzdElkO1xuXG4gIC8vIHJlZ2lzdGVyIGEgbmV3IHRhc2sgYXMgYmVpbmcgaW4gcHJvZ3Jlc3NcbiAgdGhpcy5wcm9jZXNzaW5nW2lkXSA9IHtcbiAgICBpZDogaWQsXG4gICAgcmVzb2x2ZXI6IHJlc29sdmVyLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfTtcblxuICAvLyBidWlsZCBhIEpTT04tUlBDIHJlcXVlc3RcbiAgdmFyIHJlcXVlc3QgPSB7XG4gICAgaWQ6IGlkLFxuICAgIG1ldGhvZDogbWV0aG9kLFxuICAgIHBhcmFtczogcGFyYW1zXG4gIH07XG5cbiAgaWYgKHRoaXMudGVybWluYXRlZCkge1xuICAgIHJlc29sdmVyLnJlamVjdChuZXcgRXJyb3IoJ1dvcmtlciBpcyB0ZXJtaW5hdGVkJykpO1xuICB9IGVsc2UgaWYgKHRoaXMud29ya2VyLnJlYWR5KSB7XG4gICAgLy8gc2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgd29ya2VyXG4gICAgdGhpcy53b3JrZXIuc2VuZChyZXF1ZXN0KTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlcXVlc3RRdWV1ZS5wdXNoKHJlcXVlc3QpO1xuICB9XG5cbiAgLy8gb24gY2FuY2VsbGF0aW9uLCBmb3JjZSB0aGUgd29ya2VyIHRvIHRlcm1pbmF0ZVxuICB2YXIgbWUgPSB0aGlzO1xuICByZXR1cm4gcmVzb2x2ZXIucHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBQcm9taXNlLkNhbmNlbGxhdGlvbkVycm9yIHx8IGVycm9yIGluc3RhbmNlb2YgUHJvbWlzZS5UaW1lb3V0RXJyb3IpIHtcbiAgICAgIC8vIHJlbW92ZSB0aGlzIHRhc2sgZnJvbSB0aGUgcXVldWUuIEl0IGlzIGFscmVhZHkgcmVqZWN0ZWQgKGhlbmNlIHRoaXNcbiAgICAgIC8vIGNhdGNoIGV2ZW50KSwgYW5kIGVsc2UgaXQgd2lsbCBiZSByZWplY3RlZCBhZ2FpbiB3aGVuIHRlcm1pbmF0aW5nXG4gICAgICBkZWxldGUgbWUucHJvY2Vzc2luZ1tpZF07XG5cbiAgICAgIC8vIHRlcm1pbmF0ZSB3b3JrZXJcbiAgICAgIHJldHVybiBtZS50ZXJtaW5hdGVBbmROb3RpZnkodHJ1ZSlcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfSlcbn07XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIHRoZSB3b3JrZXIgaXMgd29ya2luZyBvciBub3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgd29ya2VyIGlzIGJ1c3lcbiAqL1xuV29ya2VySGFuZGxlci5wcm90b3R5cGUuYnVzeSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucHJvY2Vzc2luZykubGVuZ3RoID4gMDtcbn07XG5cbi8qKlxuICogVGVybWluYXRlIHRoZSB3b3JrZXIuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gICBJZiBmYWxzZSAoZGVmYXVsdCksIHRoZSB3b3JrZXIgaXMgdGVybWluYXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgZmluaXNoaW5nIGFsbCB0YXNrcyBjdXJyZW50bHkgaW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzLiBJZiB0cnVlLCB0aGUgd29ya2VyIHdpbGwgYmVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgaW1tZWRpYXRlbHkuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbY2FsbGJhY2s9bnVsbF0gSWYgcHJvdmlkZWQsIHdpbGwgYmUgY2FsbGVkIHdoZW4gcHJvY2VzcyB0ZXJtaW5hdGVzLlxuICovXG5Xb3JrZXJIYW5kbGVyLnByb3RvdHlwZS50ZXJtaW5hdGUgPSBmdW5jdGlvbiAoZm9yY2UsIGNhbGxiYWNrKSB7XG4gIHZhciBtZSA9IHRoaXM7XG4gIGlmIChmb3JjZSkge1xuICAgIC8vIGNhbmNlbCBhbGwgdGFza3MgaW4gcHJvZ3Jlc3NcbiAgICBmb3IgKHZhciBpZCBpbiB0aGlzLnByb2Nlc3NpbmcpIHtcbiAgICAgIGlmICh0aGlzLnByb2Nlc3NpbmdbaWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzaW5nW2lkXS5yZXNvbHZlci5yZWplY3QobmV3IEVycm9yKCdXb3JrZXIgdGVybWluYXRlZCcpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLnRlcm1pbmF0aW9uSGFuZGxlciA9IGNhbGxiYWNrO1xuICB9XG4gIGlmICghdGhpcy5idXN5KCkpIHtcbiAgICAvLyBhbGwgdGFza3MgYXJlIGZpbmlzaGVkLiBraWxsIHRoZSB3b3JrZXJcbiAgICB2YXIgY2xlYW51cCA9IGZ1bmN0aW9uKGVycikge1xuICAgICAgbWUudGVybWluYXRlZCA9IHRydWU7XG4gICAgICBpZiAobWUud29ya2VyICE9IG51bGwgJiYgbWUud29ya2VyLnJlbW92ZUFsbExpc3RlbmVycykge1xuICAgICAgICAvLyByZW1vdmVBbGxMaXN0ZW5lcnMgaXMgb25seSBhdmFpbGFibGUgZm9yIGNoaWxkX3Byb2Nlc3NcbiAgICAgICAgbWUud29ya2VyLnJlbW92ZUFsbExpc3RlbmVycygnbWVzc2FnZScpO1xuICAgICAgfVxuICAgICAgbWUud29ya2VyID0gbnVsbDtcbiAgICAgIG1lLnRlcm1pbmF0aW5nID0gZmFsc2U7XG4gICAgICBpZiAobWUudGVybWluYXRpb25IYW5kbGVyKSB7XG4gICAgICAgIG1lLnRlcm1pbmF0aW9uSGFuZGxlcihlcnIsIG1lKTtcbiAgICAgIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy53b3JrZXIpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy53b3JrZXIua2lsbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAodGhpcy53b3JrZXIua2lsbGVkKSB7XG4gICAgICAgICAgY2xlYW51cChuZXcgRXJyb3IoJ3dvcmtlciBhbHJlYWR5IGtpbGxlZCEnKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMud29ya2VyLmlzQ2hpbGRQcm9jZXNzKSB7XG4gICAgICAgICAgdmFyIGNsZWFuRXhpdFRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKG1lLndvcmtlcikge1xuICAgICAgICAgICAgICBtZS53b3JrZXIua2lsbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIENISUxEX1BST0NFU1NfRVhJVF9USU1FT1VUKTtcblxuICAgICAgICAgIHRoaXMud29ya2VyLm9uY2UoJ2V4aXQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChjbGVhbkV4aXRUaW1lb3V0KTtcbiAgICAgICAgICAgIGlmIChtZS53b3JrZXIpIHtcbiAgICAgICAgICAgICAgbWUud29ya2VyLmtpbGxlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAodGhpcy53b3JrZXIucmVhZHkpIHtcbiAgICAgICAgICAgIHRoaXMud29ya2VyLnNlbmQoVEVSTUlOQVRFX01FVEhPRF9JRCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdFF1ZXVlLnB1c2goVEVSTUlOQVRFX01FVEhPRF9JRClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gd29ya2VyX3RocmVhZFxuICAgICAgICAgIHRoaXMud29ya2VyLmtpbGwoKTtcbiAgICAgICAgICB0aGlzLndvcmtlci5raWxsZWQgPSB0cnVlO1xuICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0eXBlb2YgdGhpcy53b3JrZXIudGVybWluYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMud29ya2VyLnRlcm1pbmF0ZSgpOyAvLyB3ZWIgd29ya2VyXG4gICAgICAgIHRoaXMud29ya2VyLmtpbGxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gdGVybWluYXRlIHdvcmtlcicpO1xuICAgICAgfVxuICAgIH1cbiAgICBjbGVhbnVwKCk7XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gd2UgY2FuJ3QgdGVybWluYXRlIGltbWVkaWF0ZWx5LCB0aGVyZSBhcmUgc3RpbGwgdGFza3MgYmVpbmcgZXhlY3V0ZWRcbiAgICB0aGlzLnRlcm1pbmF0aW5nID0gdHJ1ZTtcbiAgfVxufTtcblxuLyoqXG4gKiBUZXJtaW5hdGUgdGhlIHdvcmtlciwgcmV0dXJuaW5nIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRlcm1pbmF0aW9uIGhhcyBiZWVuIGRvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gICBJZiBmYWxzZSAoZGVmYXVsdCksIHRoZSB3b3JrZXIgaXMgdGVybWluYXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgZmluaXNoaW5nIGFsbCB0YXNrcyBjdXJyZW50bHkgaW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzLiBJZiB0cnVlLCB0aGUgd29ya2VyIHdpbGwgYmVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgaW1tZWRpYXRlbHkuXG4gKiBAcGFyYW0ge251bWJlcn0gW3RpbWVvdXRdICAgICAgICBJZiBwcm92aWRlZCBhbmQgbm9uLXplcm8sIHdvcmtlciB0ZXJtaW5hdGlvbiBwcm9taXNlIHdpbGwgYmUgcmVqZWN0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyIHRpbWVvdXQgaWYgd29ya2VyIHByb2Nlc3MgaGFzIG5vdCBiZWVuIHRlcm1pbmF0ZWQuXG4gKiBAcmV0dXJuIHtQcm9taXNlLjxXb3JrZXJIYW5kbGVyLCBFcnJvcj59XG4gKi9cbldvcmtlckhhbmRsZXIucHJvdG90eXBlLnRlcm1pbmF0ZUFuZE5vdGlmeSA9IGZ1bmN0aW9uIChmb3JjZSwgdGltZW91dCkge1xuICB2YXIgcmVzb2x2ZXIgPSBQcm9taXNlLmRlZmVyKCk7XG4gIGlmICh0aW1lb3V0KSB7XG4gICAgcmVzb2x2ZXIucHJvbWlzZS50aW1lb3V0ID0gdGltZW91dDtcbiAgfVxuICB0aGlzLnRlcm1pbmF0ZShmb3JjZSwgZnVuY3Rpb24oZXJyLCB3b3JrZXIpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICByZXNvbHZlci5yZWplY3QoZXJyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb2x2ZXIucmVzb2x2ZSh3b3JrZXIpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXNvbHZlci5wcm9taXNlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBXb3JrZXJIYW5kbGVyO1xubW9kdWxlLmV4cG9ydHMuX3RyeVJlcXVpcmVXb3JrZXJUaHJlYWRzID0gdHJ5UmVxdWlyZVdvcmtlclRocmVhZHM7XG5tb2R1bGUuZXhwb3J0cy5fc2V0dXBQcm9jZXNzV29ya2VyID0gc2V0dXBQcm9jZXNzV29ya2VyO1xubW9kdWxlLmV4cG9ydHMuX3NldHVwQnJvd3NlcldvcmtlciA9IHNldHVwQnJvd3Nlcldvcmtlcjtcbm1vZHVsZS5leHBvcnRzLl9zZXR1cFdvcmtlclRocmVhZFdvcmtlciA9IHNldHVwV29ya2VyVGhyZWFkV29ya2VyO1xubW9kdWxlLmV4cG9ydHMuZW5zdXJlV29ya2VyVGhyZWFkcyA9IGVuc3VyZVdvcmtlclRocmVhZHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgTUFYX1BPUlRTID0gNjU1MzU7XG5tb2R1bGUuZXhwb3J0cyA9IERlYnVnUG9ydEFsbG9jYXRvcjtcbmZ1bmN0aW9uIERlYnVnUG9ydEFsbG9jYXRvcigpIHtcbiAgdGhpcy5wb3J0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHRoaXMubGVuZ3RoID0gMDtcbn1cblxuRGVidWdQb3J0QWxsb2NhdG9yLnByb3RvdHlwZS5uZXh0QXZhaWxhYmxlU3RhcnRpbmdBdCA9IGZ1bmN0aW9uKHN0YXJ0aW5nKSB7XG4gIHdoaWxlICh0aGlzLnBvcnRzW3N0YXJ0aW5nXSA9PT0gdHJ1ZSkge1xuICAgIHN0YXJ0aW5nKys7XG4gIH1cblxuICBpZiAoc3RhcnRpbmcgPj0gTUFYX1BPUlRTKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdXb3JrZXJQb29sIGRlYnVnIHBvcnQgbGltaXQgcmVhY2hlZDogJyArIHN0YXJ0aW5nICsgJz49ICcgKyBNQVhfUE9SVFMgKTtcbiAgfVxuXG4gIHRoaXMucG9ydHNbc3RhcnRpbmddID0gdHJ1ZTtcbiAgdGhpcy5sZW5ndGgrKztcbiAgcmV0dXJuIHN0YXJ0aW5nO1xufTtcblxuRGVidWdQb3J0QWxsb2NhdG9yLnByb3RvdHlwZS5yZWxlYXNlUG9ydCA9IGZ1bmN0aW9uKHBvcnQpIHtcbiAgZGVsZXRlIHRoaXMucG9ydHNbcG9ydF07XG4gIHRoaXMubGVuZ3RoLS07XG59O1xuXG4iLCAidmFyIFByb21pc2UgPSByZXF1aXJlKCcuL1Byb21pc2UnKTtcbnZhciBXb3JrZXJIYW5kbGVyID0gcmVxdWlyZSgnLi9Xb3JrZXJIYW5kbGVyJyk7XG52YXIgZW52aXJvbm1lbnQgPSByZXF1aXJlKCcuL2Vudmlyb25tZW50Jyk7XG52YXIgRGVidWdQb3J0QWxsb2NhdG9yID0gcmVxdWlyZSgnLi9kZWJ1Zy1wb3J0LWFsbG9jYXRvcicpO1xudmFyIERFQlVHX1BPUlRfQUxMT0NBVE9SID0gbmV3IERlYnVnUG9ydEFsbG9jYXRvcigpO1xuLyoqXG4gKiBBIHBvb2wgdG8gbWFuYWdlIHdvcmtlcnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBbc2NyaXB0XSAgIE9wdGlvbmFsIHdvcmtlciBzY3JpcHRcbiAqIEBwYXJhbSB7V29ya2VyUG9vbE9wdGlvbnN9IFtvcHRpb25zXSAgU2VlIGRvY3NcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBQb29sKHNjcmlwdCwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIHNjcmlwdCA9PT0gJ3N0cmluZycpIHtcbiAgICB0aGlzLnNjcmlwdCA9IHNjcmlwdCB8fCBudWxsO1xuICB9XG4gIGVsc2Uge1xuICAgIHRoaXMuc2NyaXB0ID0gbnVsbDtcbiAgICBvcHRpb25zID0gc2NyaXB0O1xuICB9XG5cbiAgdGhpcy53b3JrZXJzID0gW107ICAvLyBxdWV1ZSB3aXRoIGFsbCB3b3JrZXJzXG4gIHRoaXMudGFza3MgPSBbXTsgICAgLy8gcXVldWUgd2l0aCB0YXNrcyBhd2FpdGluZyBleGVjdXRpb25cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICB0aGlzLmZvcmtBcmdzID0gT2JqZWN0LmZyZWV6ZShvcHRpb25zLmZvcmtBcmdzIHx8IFtdKTtcbiAgdGhpcy5mb3JrT3B0cyA9IE9iamVjdC5mcmVlemUob3B0aW9ucy5mb3JrT3B0cyB8fCB7fSk7XG4gIHRoaXMuZGVidWdQb3J0U3RhcnQgPSAob3B0aW9ucy5kZWJ1Z1BvcnRTdGFydCB8fCA0MzIxMCk7XG4gIHRoaXMubm9kZVdvcmtlciA9IG9wdGlvbnMubm9kZVdvcmtlcjtcbiAgdGhpcy53b3JrZXJUeXBlID0gb3B0aW9ucy53b3JrZXJUeXBlIHx8IG9wdGlvbnMubm9kZVdvcmtlciB8fCAnYXV0bydcbiAgdGhpcy5tYXhRdWV1ZVNpemUgPSBvcHRpb25zLm1heFF1ZXVlU2l6ZSB8fCBJbmZpbml0eTtcblxuICB0aGlzLm9uQ3JlYXRlV29ya2VyID0gb3B0aW9ucy5vbkNyZWF0ZVdvcmtlciB8fCAoKCkgPT4gbnVsbCk7XG4gIHRoaXMub25UZXJtaW5hdGVXb3JrZXIgPSBvcHRpb25zLm9uVGVybWluYXRlV29ya2VyIHx8ICgoKSA9PiBudWxsKTtcblxuICAvLyBjb25maWd1cmF0aW9uXG4gIGlmIChvcHRpb25zICYmICdtYXhXb3JrZXJzJyBpbiBvcHRpb25zKSB7XG4gICAgdmFsaWRhdGVNYXhXb3JrZXJzKG9wdGlvbnMubWF4V29ya2Vycyk7XG4gICAgdGhpcy5tYXhXb3JrZXJzID0gb3B0aW9ucy5tYXhXb3JrZXJzO1xuICB9XG4gIGVsc2Uge1xuICAgIHRoaXMubWF4V29ya2VycyA9IE1hdGgubWF4KChlbnZpcm9ubWVudC5jcHVzIHx8IDQpIC0gMSwgMSk7XG4gIH1cblxuICBpZiAob3B0aW9ucyAmJiAnbWluV29ya2VycycgaW4gb3B0aW9ucykge1xuICAgIGlmKG9wdGlvbnMubWluV29ya2VycyA9PT0gJ21heCcpIHtcbiAgICAgIHRoaXMubWluV29ya2VycyA9IHRoaXMubWF4V29ya2VycztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsaWRhdGVNaW5Xb3JrZXJzKG9wdGlvbnMubWluV29ya2Vycyk7XG4gICAgICB0aGlzLm1pbldvcmtlcnMgPSBvcHRpb25zLm1pbldvcmtlcnM7XG4gICAgICB0aGlzLm1heFdvcmtlcnMgPSBNYXRoLm1heCh0aGlzLm1pbldvcmtlcnMsIHRoaXMubWF4V29ya2Vycyk7ICAgICAvLyBpbiBjYXNlIG1pbldvcmtlcnMgaXMgaGlnaGVyIHRoYW4gbWF4V29ya2Vyc1xuICAgIH1cbiAgICB0aGlzLl9lbnN1cmVNaW5Xb3JrZXJzKCk7XG4gIH1cblxuICB0aGlzLl9ib3VuZE5leHQgPSB0aGlzLl9uZXh0LmJpbmQodGhpcyk7XG5cblxuICBpZiAodGhpcy53b3JrZXJUeXBlID09PSAndGhyZWFkJykge1xuICAgIFdvcmtlckhhbmRsZXIuZW5zdXJlV29ya2VyVGhyZWFkcygpO1xuICB9XG59XG5cblxuLyoqXG4gKiBFeGVjdXRlIGEgZnVuY3Rpb24gb24gYSB3b3JrZXIuXG4gKlxuICogRXhhbXBsZSB1c2FnZTpcbiAqXG4gKiAgIHZhciBwb29sID0gbmV3IFBvb2woKVxuICpcbiAqICAgLy8gY2FsbCBhIGZ1bmN0aW9uIGF2YWlsYWJsZSBvbiB0aGUgd29ya2VyXG4gKiAgIHBvb2wuZXhlYygnZmlib25hY2NpJywgWzZdKVxuICpcbiAqICAgLy8gb2ZmbG9hZCBhIGZ1bmN0aW9uXG4gKiAgIGZ1bmN0aW9uIGFkZChhLCBiKSB7XG4gKiAgICAgcmV0dXJuIGEgKyBiXG4gKiAgIH07XG4gKiAgIHBvb2wuZXhlYyhhZGQsIFsyLCA0XSlcbiAqICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTsgLy8gb3V0cHV0cyA2XG4gKiAgICAgICB9KVxuICogICAgICAgLmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7XG4gKiAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAqICAgICAgIH0pO1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nIHwgRnVuY3Rpb259IG1ldGhvZCAgRnVuY3Rpb24gbmFtZSBvciBmdW5jdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgYG1ldGhvZGAgaXMgYSBzdHJpbmcsIHRoZSBjb3JyZXNwb25kaW5nXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCBvbiB0aGUgd29ya2VyIHdpbGwgYmUgZXhlY3V0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgYG1ldGhvZGAgaXMgYSBGdW5jdGlvbiwgdGhlIGZ1bmN0aW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgc3RyaW5naWZpZWQgYW5kIGV4ZWN1dGVkIHZpYSB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VycyBidWlsdC1pbiBmdW5jdGlvbiBgcnVuKGZuLCBhcmdzKWAuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFyYW1zXSAgRnVuY3Rpb24gYXJndW1lbnRzIGFwcGxpZWQgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvblxuICogQHBhcmFtIHtFeGVjT3B0aW9uc30gW29wdGlvbnNdICBPcHRpb25zIG9iamVjdFxuICogQHJldHVybiB7UHJvbWlzZS48KiwgRXJyb3I+fSByZXN1bHRcbiAqL1xuUG9vbC5wcm90b3R5cGUuZXhlYyA9IGZ1bmN0aW9uIChtZXRob2QsIHBhcmFtcywgb3B0aW9ucykge1xuICAvLyB2YWxpZGF0ZSB0eXBlIG9mIGFyZ3VtZW50c1xuICBpZiAocGFyYW1zICYmICFBcnJheS5pc0FycmF5KHBhcmFtcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBleHBlY3RlZCBhcyBhcmd1bWVudCBcInBhcmFtc1wiJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIG1ldGhvZCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgcmVzb2x2ZXIgPSBQcm9taXNlLmRlZmVyKCk7XG5cbiAgICBpZiAodGhpcy50YXNrcy5sZW5ndGggPj0gdGhpcy5tYXhRdWV1ZVNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWF4IHF1ZXVlIHNpemUgb2YgJyArIHRoaXMubWF4UXVldWVTaXplICsgJyByZWFjaGVkJyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGEgbmV3IHRhc2sgdG8gdGhlIHF1ZXVlXG4gICAgdmFyIHRhc2tzID0gdGhpcy50YXNrcztcbiAgICB2YXIgdGFzayA9IHtcbiAgICAgIG1ldGhvZDogIG1ldGhvZCxcbiAgICAgIHBhcmFtczogIHBhcmFtcyxcbiAgICAgIHJlc29sdmVyOiByZXNvbHZlcixcbiAgICAgIHRpbWVvdXQ6IG51bGwsXG4gICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgfTtcbiAgICB0YXNrcy5wdXNoKHRhc2spO1xuXG4gICAgLy8gcmVwbGFjZSB0aGUgdGltZW91dCBtZXRob2Qgb2YgdGhlIFByb21pc2Ugd2l0aCBvdXIgb3duLFxuICAgIC8vIHdoaWNoIHN0YXJ0cyB0aGUgdGltZXIgYXMgc29vbiBhcyB0aGUgdGFzayBpcyBhY3R1YWxseSBzdGFydGVkXG4gICAgdmFyIG9yaWdpbmFsVGltZW91dCA9IHJlc29sdmVyLnByb21pc2UudGltZW91dDtcbiAgICByZXNvbHZlci5wcm9taXNlLnRpbWVvdXQgPSBmdW5jdGlvbiB0aW1lb3V0IChkZWxheSkge1xuICAgICAgaWYgKHRhc2tzLmluZGV4T2YodGFzaykgIT09IC0xKSB7XG4gICAgICAgIC8vIHRhc2sgaXMgc3RpbGwgcXVldWVkIC0+IHN0YXJ0IHRoZSB0aW1lciBsYXRlciBvblxuICAgICAgICB0YXNrLnRpbWVvdXQgPSBkZWxheTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVyLnByb21pc2U7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gdGFzayBpcyBhbHJlYWR5IGJlaW5nIGV4ZWN1dGVkIC0+IHN0YXJ0IHRpbWVyIGltbWVkaWF0ZWx5XG4gICAgICAgIHJldHVybiBvcmlnaW5hbFRpbWVvdXQuY2FsbChyZXNvbHZlci5wcm9taXNlLCBkZWxheSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIHRyaWdnZXIgdGFzayBleGVjdXRpb25cbiAgICB0aGlzLl9uZXh0KCk7XG5cbiAgICByZXR1cm4gcmVzb2x2ZXIucHJvbWlzZTtcbiAgfVxuICBlbHNlIGlmICh0eXBlb2YgbWV0aG9kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gc2VuZCBzdHJpbmdpZmllZCBmdW5jdGlvbiBhbmQgZnVuY3Rpb24gYXJndW1lbnRzIHRvIHdvcmtlclxuICAgIHJldHVybiB0aGlzLmV4ZWMoJ3J1bicsIFtTdHJpbmcobWV0aG9kKSwgcGFyYW1zXSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRnVuY3Rpb24gb3Igc3RyaW5nIGV4cGVjdGVkIGFzIGFyZ3VtZW50IFwibWV0aG9kXCInKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBwcm94eSBmb3IgY3VycmVudCB3b3JrZXIuIFJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsXG4gKiBtZXRob2RzIGF2YWlsYWJsZSBvbiB0aGUgd29ya2VyLiBUaGUgbWV0aG9kcyBhbHdheXMgcmV0dXJuIGEgcHJvbWlzZS5cbiAqXG4gKiBAcmV0dXJuIHtQcm9taXNlLjxPYmplY3QsIEVycm9yPn0gcHJveHlcbiAqL1xuUG9vbC5wcm90b3R5cGUucHJveHkgPSBmdW5jdGlvbiAoKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gYXJndW1lbnRzIGV4cGVjdGVkJyk7XG4gIH1cblxuICB2YXIgcG9vbCA9IHRoaXM7XG4gIHJldHVybiB0aGlzLmV4ZWMoJ21ldGhvZHMnKVxuICAgICAgLnRoZW4oZnVuY3Rpb24gKG1ldGhvZHMpIHtcbiAgICAgICAgdmFyIHByb3h5ID0ge307XG5cbiAgICAgICAgbWV0aG9kcy5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgICAgICBwcm94eVttZXRob2RdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHBvb2wuZXhlYyhtZXRob2QsIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHByb3h5O1xuICAgICAgfSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgbmV3IGFycmF5IHdpdGggdGhlIHJlc3VsdHMgb2YgY2FsbGluZyBhIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKiBvbiBldmVyeSBlbGVtZW50IGluIHRoaXMgYXJyYXkuXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgIEZ1bmN0aW9uIHRha2luZyB0d28gYXJndW1lbnRzOlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBjYWxsYmFjayhjdXJyZW50VmFsdWUsIGluZGV4KWBcbiAqIEByZXR1cm4ge1Byb21pc2UuPEFycmF5Pn0gUmV0dXJucyBhIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgIHdpdGggYW4gQXJyYXlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZyB0aGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZWQgZm9yIGVhY2ggb2YgdGhlIGFycmF5IGVsZW1lbnRzLlxuICovXG4vKiBUT0RPOiBpbXBsZW1lbnQgbWFwXG5Qb29sLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoYXJyYXksIGNhbGxiYWNrKSB7XG59O1xuKi9cblxuLyoqXG4gKiBHcmFiIHRoZSBmaXJzdCB0YXNrIGZyb20gdGhlIHF1ZXVlLCBmaW5kIGEgZnJlZSB3b3JrZXIsIGFuZCBhc3NpZ24gdGhlXG4gKiB3b3JrZXIgdG8gdGhlIHRhc2suXG4gKiBAcHJvdGVjdGVkXG4gKi9cblBvb2wucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy50YXNrcy5sZW5ndGggPiAwKSB7XG4gICAgLy8gdGhlcmUgYXJlIHRhc2tzIGluIHRoZSBxdWV1ZVxuXG4gICAgLy8gZmluZCBhbiBhdmFpbGFibGUgd29ya2VyXG4gICAgdmFyIHdvcmtlciA9IHRoaXMuX2dldFdvcmtlcigpO1xuICAgIGlmICh3b3JrZXIpIHtcbiAgICAgIC8vIGdldCB0aGUgZmlyc3QgdGFzayBmcm9tIHRoZSBxdWV1ZVxuICAgICAgdmFyIG1lID0gdGhpcztcbiAgICAgIHZhciB0YXNrID0gdGhpcy50YXNrcy5zaGlmdCgpO1xuXG4gICAgICAvLyBjaGVjayBpZiB0aGUgdGFzayBpcyBzdGlsbCBwZW5kaW5nIChhbmQgbm90IGNhbmNlbGxlZCAtPiBwcm9taXNlIHJlamVjdGVkKVxuICAgICAgaWYgKHRhc2sucmVzb2x2ZXIucHJvbWlzZS5wZW5kaW5nKSB7XG4gICAgICAgIC8vIHNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIHdvcmtlclxuICAgICAgICB2YXIgcHJvbWlzZSA9IHdvcmtlci5leGVjKHRhc2subWV0aG9kLCB0YXNrLnBhcmFtcywgdGFzay5yZXNvbHZlciwgdGFzay5vcHRpb25zKVxuICAgICAgICAgIC50aGVuKG1lLl9ib3VuZE5leHQpXG4gICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSB3b3JrZXIgY3Jhc2hlZCBhbmQgdGVybWluYXRlZCwgcmVtb3ZlIGl0IGZyb20gdGhlIHBvb2xcbiAgICAgICAgICAgIGlmICh3b3JrZXIudGVybWluYXRlZCkge1xuICAgICAgICAgICAgICByZXR1cm4gbWUuX3JlbW92ZVdvcmtlcih3b3JrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBtZS5fbmV4dCgpOyAvLyB0cmlnZ2VyIG5leHQgdGFzayBpbiB0aGUgcXVldWVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBzdGFydCBxdWV1ZWQgdGltZXIgbm93XG4gICAgICAgIGlmICh0eXBlb2YgdGFzay50aW1lb3V0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHByb21pc2UudGltZW91dCh0YXNrLnRpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGUgdGFzayB0YWtlbiB3YXMgYWxyZWFkeSBjb21wbGV0ZSAoZWl0aGVyIHJlamVjdGVkIG9yIHJlc29sdmVkKSwgc28ganVzdCB0cmlnZ2VyIG5leHQgdGFzayBpbiB0aGUgcXVldWVcbiAgICAgICAgbWUuX25leHQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogR2V0IGFuIGF2YWlsYWJsZSB3b3JrZXIuIElmIG5vIHdvcmtlciBpcyBhdmFpbGFibGUgYW5kIHRoZSBtYXhpbXVtIG51bWJlclxuICogb2Ygd29ya2VycyBpc24ndCB5ZXQgcmVhY2hlZCwgYSBuZXcgd29ya2VyIHdpbGwgYmUgY3JlYXRlZCBhbmQgcmV0dXJuZWQuXG4gKiBJZiBubyB3b3JrZXIgaXMgYXZhaWxhYmxlIGFuZCB0aGUgbWF4aW11bSBudW1iZXIgb2Ygd29ya2VycyBpcyByZWFjaGVkLFxuICogbnVsbCB3aWxsIGJlIHJldHVybmVkLlxuICpcbiAqIEByZXR1cm4ge1dvcmtlckhhbmRsZXIgfCBudWxsfSB3b3JrZXJcbiAqIEBwcml2YXRlXG4gKi9cblBvb2wucHJvdG90eXBlLl9nZXRXb3JrZXIgPSBmdW5jdGlvbigpIHtcbiAgLy8gZmluZCBhIG5vbi1idXN5IHdvcmtlclxuICB2YXIgd29ya2VycyA9IHRoaXMud29ya2VycztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3JrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHdvcmtlciA9IHdvcmtlcnNbaV07XG4gICAgaWYgKHdvcmtlci5idXN5KCkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gd29ya2VyO1xuICAgIH1cbiAgfVxuXG4gIGlmICh3b3JrZXJzLmxlbmd0aCA8IHRoaXMubWF4V29ya2Vycykge1xuICAgIC8vIGNyZWF0ZSBhIG5ldyB3b3JrZXJcbiAgICB3b3JrZXIgPSB0aGlzLl9jcmVhdGVXb3JrZXJIYW5kbGVyKCk7XG4gICAgd29ya2Vycy5wdXNoKHdvcmtlcik7XG4gICAgcmV0dXJuIHdvcmtlcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB3b3JrZXIgZnJvbSB0aGUgcG9vbC5cbiAqIEF0dGVtcHRzIHRvIHRlcm1pbmF0ZSB3b3JrZXIgaWYgbm90IGFscmVhZHkgdGVybWluYXRlZCwgYW5kIGVuc3VyZXMgdGhlIG1pbmltdW1cbiAqIHBvb2wgc2l6ZSBpcyBtZXQuXG4gKiBAcGFyYW0ge1dvcmtlckhhbmRsZXJ9IHdvcmtlclxuICogQHJldHVybiB7UHJvbWlzZTxXb3JrZXJIYW5kbGVyPn1cbiAqIEBwcm90ZWN0ZWRcbiAqL1xuUG9vbC5wcm90b3R5cGUuX3JlbW92ZVdvcmtlciA9IGZ1bmN0aW9uKHdvcmtlcikge1xuICB2YXIgbWUgPSB0aGlzO1xuXG4gIERFQlVHX1BPUlRfQUxMT0NBVE9SLnJlbGVhc2VQb3J0KHdvcmtlci5kZWJ1Z1BvcnQpO1xuICAvLyBfcmVtb3ZlV29ya2VyIHdpbGwgY2FsbCB0aGlzLCBidXQgd2UgbmVlZCBpdCB0byBiZSByZW1vdmVkIHN5bmNocm9ub3VzbHlcbiAgdGhpcy5fcmVtb3ZlV29ya2VyRnJvbUxpc3Qod29ya2VyKTtcbiAgLy8gSWYgbWluV29ya2VycyBzZXQsIHNwaW4gdXAgbmV3IHdvcmtlcnMgdG8gcmVwbGFjZSB0aGUgY3Jhc2hlZCBvbmVzXG4gIHRoaXMuX2Vuc3VyZU1pbldvcmtlcnMoKTtcbiAgLy8gdGVybWluYXRlIHRoZSB3b3JrZXIgKGlmIG5vdCBhbHJlYWR5IHRlcm1pbmF0ZWQpXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB3b3JrZXIudGVybWluYXRlKGZhbHNlLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgIG1lLm9uVGVybWluYXRlV29ya2VyKHtcbiAgICAgICAgZm9ya0FyZ3M6IHdvcmtlci5mb3JrQXJncyxcbiAgICAgICAgZm9ya09wdHM6IHdvcmtlci5mb3JrT3B0cyxcbiAgICAgICAgc2NyaXB0OiB3b3JrZXIuc2NyaXB0XG4gICAgICB9KTtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKHdvcmtlcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB3b3JrZXIgZnJvbSB0aGUgcG9vbCBsaXN0LlxuICogQHBhcmFtIHtXb3JrZXJIYW5kbGVyfSB3b3JrZXJcbiAqIEBwcm90ZWN0ZWRcbiAqL1xuUG9vbC5wcm90b3R5cGUuX3JlbW92ZVdvcmtlckZyb21MaXN0ID0gZnVuY3Rpb24od29ya2VyKSB7XG4gIC8vIHJlbW92ZSBmcm9tIHRoZSBsaXN0IHdpdGggd29ya2Vyc1xuICB2YXIgaW5kZXggPSB0aGlzLndvcmtlcnMuaW5kZXhPZih3b3JrZXIpO1xuICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgdGhpcy53b3JrZXJzLnNwbGljZShpbmRleCwgMSk7XG4gIH1cbn07XG5cbi8qKlxuICogQ2xvc2UgYWxsIGFjdGl2ZSB3b3JrZXJzLiBUYXNrcyBjdXJyZW50bHkgYmVpbmcgZXhlY3V0ZWQgd2lsbCBiZSBmaW5pc2hlZCBmaXJzdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlPWZhbHNlXSAgIElmIGZhbHNlIChkZWZhdWx0KSwgdGhlIHdvcmtlcnMgYXJlIHRlcm1pbmF0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyIGZpbmlzaGluZyBhbGwgdGFza3MgY3VycmVudGx5IGluXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcy4gSWYgdHJ1ZSwgdGhlIHdvcmtlcnMgd2lsbCBiZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlZCBpbW1lZGlhdGVseS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbdGltZW91dF0gICAgICAgIElmIHByb3ZpZGVkIGFuZCBub24temVybywgd29ya2VyIHRlcm1pbmF0aW9uIHByb21pc2Ugd2lsbCBiZSByZWplY3RlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgdGltZW91dCBpZiB3b3JrZXIgcHJvY2VzcyBoYXMgbm90IGJlZW4gdGVybWluYXRlZC5cbiAqIEByZXR1cm4ge1Byb21pc2UuPHZvaWQsIEVycm9yPn1cbiAqL1xuUG9vbC5wcm90b3R5cGUudGVybWluYXRlID0gZnVuY3Rpb24gKGZvcmNlLCB0aW1lb3V0KSB7XG4gIHZhciBtZSA9IHRoaXM7XG5cbiAgLy8gY2FuY2VsIGFueSBwZW5kaW5nIHRhc2tzXG4gIHRoaXMudGFza3MuZm9yRWFjaChmdW5jdGlvbiAodGFzaykge1xuICAgIHRhc2sucmVzb2x2ZXIucmVqZWN0KG5ldyBFcnJvcignUG9vbCB0ZXJtaW5hdGVkJykpO1xuICB9KTtcbiAgdGhpcy50YXNrcy5sZW5ndGggPSAwO1xuXG4gIHZhciBmID0gZnVuY3Rpb24gKHdvcmtlcikge1xuICAgIHRoaXMuX3JlbW92ZVdvcmtlckZyb21MaXN0KHdvcmtlcik7XG4gIH07XG4gIHZhciByZW1vdmVXb3JrZXIgPSBmLmJpbmQodGhpcyk7XG5cbiAgdmFyIHByb21pc2VzID0gW107XG4gIHZhciB3b3JrZXJzID0gdGhpcy53b3JrZXJzLnNsaWNlKCk7XG4gIHdvcmtlcnMuZm9yRWFjaChmdW5jdGlvbiAod29ya2VyKSB7XG4gICAgdmFyIHRlcm1Qcm9taXNlID0gd29ya2VyLnRlcm1pbmF0ZUFuZE5vdGlmeShmb3JjZSwgdGltZW91dClcbiAgICAgIC50aGVuKHJlbW92ZVdvcmtlcilcbiAgICAgIC5hbHdheXMoZnVuY3Rpb24oKSB7XG4gICAgICAgIG1lLm9uVGVybWluYXRlV29ya2VyKHtcbiAgICAgICAgICBmb3JrQXJnczogd29ya2VyLmZvcmtBcmdzLFxuICAgICAgICAgIGZvcmtPcHRzOiB3b3JrZXIuZm9ya09wdHMsXG4gICAgICAgICAgc2NyaXB0OiB3b3JrZXIuc2NyaXB0XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgcHJvbWlzZXMucHVzaCh0ZXJtUHJvbWlzZSk7XG4gIH0pO1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSBzdGF0aXN0aWNzIG9uIHRhc2tzIGFuZCB3b3JrZXJzLlxuICogQHJldHVybiB7e3RvdGFsV29ya2VyczogbnVtYmVyLCBidXN5V29ya2VyczogbnVtYmVyLCBpZGxlV29ya2VyczogbnVtYmVyLCBwZW5kaW5nVGFza3M6IG51bWJlciwgYWN0aXZlVGFza3M6IG51bWJlcn19IFJldHVybnMgYW4gb2JqZWN0IHdpdGggc3RhdGlzdGljc1xuICovXG5Qb29sLnByb3RvdHlwZS5zdGF0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRvdGFsV29ya2VycyA9IHRoaXMud29ya2Vycy5sZW5ndGg7XG4gIHZhciBidXN5V29ya2VycyA9IHRoaXMud29ya2Vycy5maWx0ZXIoZnVuY3Rpb24gKHdvcmtlcikge1xuICAgIHJldHVybiB3b3JrZXIuYnVzeSgpO1xuICB9KS5sZW5ndGg7XG5cbiAgcmV0dXJuIHtcbiAgICB0b3RhbFdvcmtlcnM6ICB0b3RhbFdvcmtlcnMsXG4gICAgYnVzeVdvcmtlcnM6ICAgYnVzeVdvcmtlcnMsXG4gICAgaWRsZVdvcmtlcnM6ICAgdG90YWxXb3JrZXJzIC0gYnVzeVdvcmtlcnMsXG5cbiAgICBwZW5kaW5nVGFza3M6ICB0aGlzLnRhc2tzLmxlbmd0aCxcbiAgICBhY3RpdmVUYXNrczogICBidXN5V29ya2Vyc1xuICB9O1xufTtcblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgYSBtaW5pbXVtIG9mIG1pbldvcmtlcnMgaXMgdXAgYW5kIHJ1bm5pbmdcbiAqIEBwcm90ZWN0ZWRcbiAqL1xuUG9vbC5wcm90b3R5cGUuX2Vuc3VyZU1pbldvcmtlcnMgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMubWluV29ya2Vycykge1xuICAgIGZvcih2YXIgaSA9IHRoaXMud29ya2Vycy5sZW5ndGg7IGkgPCB0aGlzLm1pbldvcmtlcnM7IGkrKykge1xuICAgICAgdGhpcy53b3JrZXJzLnB1c2godGhpcy5fY3JlYXRlV29ya2VySGFuZGxlcigpKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBXb3JrZXJIYW5kbGVyIGFuZCBwYXNzIGFsbCBvcHRpb25zLlxuICogQHJldHVybiB7V29ya2VySGFuZGxlcn1cbiAqIEBwcml2YXRlXG4gKi9cblBvb2wucHJvdG90eXBlLl9jcmVhdGVXb3JrZXJIYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBvdmVycmlkZW5QYXJhbXMgPSB0aGlzLm9uQ3JlYXRlV29ya2VyKHtcbiAgICBmb3JrQXJnczogdGhpcy5mb3JrQXJncyxcbiAgICBmb3JrT3B0czogdGhpcy5mb3JrT3B0cyxcbiAgICBzY3JpcHQ6IHRoaXMuc2NyaXB0XG4gIH0pIHx8IHt9O1xuXG4gIHJldHVybiBuZXcgV29ya2VySGFuZGxlcihvdmVycmlkZW5QYXJhbXMuc2NyaXB0IHx8IHRoaXMuc2NyaXB0LCB7XG4gICAgZm9ya0FyZ3M6IG92ZXJyaWRlblBhcmFtcy5mb3JrQXJncyB8fCB0aGlzLmZvcmtBcmdzLFxuICAgIGZvcmtPcHRzOiBvdmVycmlkZW5QYXJhbXMuZm9ya09wdHMgfHwgdGhpcy5mb3JrT3B0cyxcbiAgICBkZWJ1Z1BvcnQ6IERFQlVHX1BPUlRfQUxMT0NBVE9SLm5leHRBdmFpbGFibGVTdGFydGluZ0F0KHRoaXMuZGVidWdQb3J0U3RhcnQpLFxuICAgIHdvcmtlclR5cGU6IHRoaXMud29ya2VyVHlwZVxuICB9KTtcbn1cblxuLyoqXG4gKiBFbnN1cmUgdGhhdCB0aGUgbWF4V29ya2VycyBvcHRpb24gaXMgYW4gaW50ZWdlciA+PSAxXG4gKiBAcGFyYW0geyp9IG1heFdvcmtlcnNcbiAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm5zIHRydWUgbWF4V29ya2VycyBoYXMgYSB2YWxpZCB2YWx1ZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZU1heFdvcmtlcnMobWF4V29ya2Vycykge1xuICBpZiAoIWlzTnVtYmVyKG1heFdvcmtlcnMpIHx8ICFpc0ludGVnZXIobWF4V29ya2VycykgfHwgbWF4V29ya2VycyA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPcHRpb24gbWF4V29ya2VycyBtdXN0IGJlIGFuIGludGVnZXIgbnVtYmVyID49IDEnKTtcbiAgfVxufVxuXG4vKipcbiAqIEVuc3VyZSB0aGF0IHRoZSBtaW5Xb3JrZXJzIG9wdGlvbiBpcyBhbiBpbnRlZ2VyID49IDBcbiAqIEBwYXJhbSB7Kn0gbWluV29ya2Vyc1xuICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSB3aGVuIG1pbldvcmtlcnMgaGFzIGEgdmFsaWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVNaW5Xb3JrZXJzKG1pbldvcmtlcnMpIHtcbiAgaWYgKCFpc051bWJlcihtaW5Xb3JrZXJzKSB8fCAhaXNJbnRlZ2VyKG1pbldvcmtlcnMpIHx8IG1pbldvcmtlcnMgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignT3B0aW9uIG1pbldvcmtlcnMgbXVzdCBiZSBhbiBpbnRlZ2VyIG51bWJlciA+PSAwJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgYSB2YXJpYWJsZSBpcyBhIG51bWJlclxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSB3aGVuIHZhbHVlIGlzIGEgbnVtYmVyXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInO1xufVxuXG4vKipcbiAqIFRlc3Qgd2hldGhlciBhIG51bWJlciBpcyBhbiBpbnRlZ2VyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdmFsdWUgaXMgYW4gaW50ZWdlclxuICovXG5mdW5jdGlvbiBpc0ludGVnZXIodmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUpID09IHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBvb2w7XG4iLCAiLyoqXG4gKiB3b3JrZXIgbXVzdCBiZSBzdGFydGVkIGFzIGEgY2hpbGQgcHJvY2VzcyBvciBhIHdlYiB3b3JrZXIuXG4gKiBJdCBsaXN0ZW5zIGZvciBSUEMgbWVzc2FnZXMgZnJvbSB0aGUgcGFyZW50IHByb2Nlc3MuXG4gKi9cblxuLy8gc291cmNlIG9mIGluc3BpcmF0aW9uOiBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL3JlcXVpcmUtZm9vbC13ZWJwYWNrXG52YXIgcmVxdWlyZUZvb2xXZWJwYWNrID0gZXZhbChcbiAgICAndHlwZW9mIHJlcXVpcmUgIT09IFxcJ3VuZGVmaW5lZFxcJycgK1xuICAgICcgPyByZXF1aXJlJyArXG4gICAgJyA6IGZ1bmN0aW9uIChtb2R1bGUpIHsgdGhyb3cgbmV3IEVycm9yKFxcJ01vZHVsZSBcIiArIG1vZHVsZSArIFwiIG5vdCBmb3VuZC5cXCcpIH0nXG4pO1xuXG4vKipcbiAqIFNwZWNpYWwgbWVzc2FnZSBzZW50IGJ5IHBhcmVudCB3aGljaCBjYXVzZXMgdGhlIHdvcmtlciB0byB0ZXJtaW5hdGUgaXRzZWxmLlxuICogTm90IGEgXCJtZXNzYWdlIG9iamVjdFwiOyB0aGlzIHN0cmluZyBpcyB0aGUgZW50aXJlIG1lc3NhZ2UuXG4gKi9cbnZhciBURVJNSU5BVEVfTUVUSE9EX0lEID0gJ19fd29ya2VycG9vbC10ZXJtaW5hdGVfXyc7XG5cbi8vIHZhciBub2RlT1NQbGF0Zm9ybSA9IHJlcXVpcmUoJy4vZW52aXJvbm1lbnQnKS5ub2RlT1NQbGF0Zm9ybTtcblxuLy8gY3JlYXRlIGEgd29ya2VyIEFQSSBmb3Igc2VuZGluZyBhbmQgcmVjZWl2aW5nIG1lc3NhZ2VzIHdoaWNoIHdvcmtzIGJvdGggb25cbi8vIG5vZGUuanMgYW5kIGluIHRoZSBicm93c2VyXG52YXIgd29ya2VyID0ge1xuICBleGl0OiBmdW5jdGlvbigpIHt9XG59O1xuaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgLy8gd29ya2VyIGluIHRoZSBicm93c2VyXG4gIHdvcmtlci5vbiA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHtcbiAgICBhZGRFdmVudExpc3RlbmVyKGV2ZW50LCBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgICAgY2FsbGJhY2sobWVzc2FnZS5kYXRhKTtcbiAgICB9KVxuICB9O1xuICB3b3JrZXIuc2VuZCA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgcG9zdE1lc3NhZ2UobWVzc2FnZSk7XG4gIH07XG59XG5lbHNlIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgLy8gbm9kZS5qc1xuXG4gIHZhciBXb3JrZXJUaHJlYWRzO1xuICB0cnkge1xuICAgIFdvcmtlclRocmVhZHMgPSByZXF1aXJlRm9vbFdlYnBhY2soJ3dvcmtlcl90aHJlYWRzJyk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvci5jb2RlID09PSAnTU9EVUxFX05PVF9GT1VORCcpIHtcbiAgICAgIC8vIG5vIHdvcmtlcl90aHJlYWRzLCBmYWxsYmFjayB0byBzdWItcHJvY2VzcyBiYXNlZCB3b3JrZXJzXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGlmIChXb3JrZXJUaHJlYWRzICYmXG4gICAgLyogaWYgdGhlcmUgaXMgYSBwYXJlbnRQb3J0LCB3ZSBhcmUgaW4gYSBXb3JrZXJUaHJlYWQgKi9cbiAgICBXb3JrZXJUaHJlYWRzLnBhcmVudFBvcnQgIT09IG51bGwpIHtcbiAgICB2YXIgcGFyZW50UG9ydCAgPSBXb3JrZXJUaHJlYWRzLnBhcmVudFBvcnQ7XG4gICAgd29ya2VyLnNlbmQgPSBwYXJlbnRQb3J0LnBvc3RNZXNzYWdlLmJpbmQocGFyZW50UG9ydCk7XG4gICAgd29ya2VyLm9uID0gcGFyZW50UG9ydC5vbi5iaW5kKHBhcmVudFBvcnQpO1xuICB9IGVsc2Uge1xuICAgIHdvcmtlci5vbiA9IHByb2Nlc3Mub24uYmluZChwcm9jZXNzKTtcbiAgICB3b3JrZXIuc2VuZCA9IHByb2Nlc3Muc2VuZC5iaW5kKHByb2Nlc3MpO1xuICAgIC8vIHJlZ2lzdGVyIGRpc2Nvbm5lY3QgaGFuZGxlciBvbmx5IGZvciBzdWJwcm9jZXNzIHdvcmtlciB0byBleGl0IHdoZW4gcGFyZW50IGlzIGtpbGxlZCB1bmV4cGVjdGVkbHlcbiAgICB3b3JrZXIub24oJ2Rpc2Nvbm5lY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfSk7XG4gICAgd29ya2VyLmV4aXQgPSBwcm9jZXNzLmV4aXQuYmluZChwcm9jZXNzKTtcbiAgfVxufVxuZWxzZSB7XG4gIHRocm93IG5ldyBFcnJvcignU2NyaXB0IG11c3QgYmUgZXhlY3V0ZWQgYXMgYSB3b3JrZXInKTtcbn1cblxuZnVuY3Rpb24gY29udmVydEVycm9yKGVycm9yKSB7XG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcikucmVkdWNlKGZ1bmN0aW9uKHByb2R1Y3QsIG5hbWUpIHtcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb2R1Y3QsIG5hbWUsIHtcblx0dmFsdWU6IGVycm9yW25hbWVdLFxuXHRlbnVtZXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBhIFByb21pc2UgdmlhIGR1Y2sgdHlwaW5nLlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIGdpdmVuIHZhbHVlIGlzIGFuIG9iamVjdFxuICogICAgICAgICAgICAgICAgICAgIGhhdmluZyBmdW5jdGlvbnMgYHRoZW5gIGFuZCBgY2F0Y2hgLlxuICovXG5mdW5jdGlvbiBpc1Byb21pc2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICYmICh0eXBlb2YgdmFsdWUudGhlbiA9PT0gJ2Z1bmN0aW9uJykgJiYgKHR5cGVvZiB2YWx1ZS5jYXRjaCA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5cbi8vIGZ1bmN0aW9ucyBhdmFpbGFibGUgZXh0ZXJuYWxseVxud29ya2VyLm1ldGhvZHMgPSB7fTtcblxuLyoqXG4gKiBFeGVjdXRlIGEgZnVuY3Rpb24gd2l0aCBwcm92aWRlZCBhcmd1bWVudHNcbiAqIEBwYXJhbSB7U3RyaW5nfSBmbiAgICAgU3RyaW5naWZpZWQgZnVuY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl9IFthcmdzXSAgRnVuY3Rpb24gYXJndW1lbnRzXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xud29ya2VyLm1ldGhvZHMucnVuID0gZnVuY3Rpb24gcnVuKGZuLCBhcmdzKSB7XG4gIHZhciBmID0gbmV3IEZ1bmN0aW9uKCdyZXR1cm4gKCcgKyBmbiArICcpLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Jyk7XG4gIHJldHVybiBmLmFwcGx5KGYsIGFyZ3MpO1xufTtcblxuLyoqXG4gKiBHZXQgYSBsaXN0IHdpdGggbWV0aG9kcyBhdmFpbGFibGUgb24gdGhpcyB3b3JrZXJcbiAqIEByZXR1cm4ge1N0cmluZ1tdfSBtZXRob2RzXG4gKi9cbndvcmtlci5tZXRob2RzLm1ldGhvZHMgPSBmdW5jdGlvbiBtZXRob2RzKCkge1xuICByZXR1cm4gT2JqZWN0LmtleXMod29ya2VyLm1ldGhvZHMpO1xufTtcblxudmFyIGN1cnJlbnRSZXF1ZXN0SWQgPSBudWxsO1xuXG53b3JrZXIub24oJ21lc3NhZ2UnLCBmdW5jdGlvbiAocmVxdWVzdCkge1xuICBpZiAocmVxdWVzdCA9PT0gVEVSTUlOQVRFX01FVEhPRF9JRCkge1xuICAgIHJldHVybiB3b3JrZXIuZXhpdCgwKTtcbiAgfVxuICB0cnkge1xuICAgIHZhciBtZXRob2QgPSB3b3JrZXIubWV0aG9kc1tyZXF1ZXN0Lm1ldGhvZF07XG5cbiAgICBpZiAobWV0aG9kKSB7XG4gICAgICBjdXJyZW50UmVxdWVzdElkID0gcmVxdWVzdC5pZDtcbiAgICAgIFxuICAgICAgLy8gZXhlY3V0ZSB0aGUgZnVuY3Rpb25cbiAgICAgIHZhciByZXN1bHQgPSBtZXRob2QuYXBwbHkobWV0aG9kLCByZXF1ZXN0LnBhcmFtcyk7XG5cbiAgICAgIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICAvLyBwcm9taXNlIHJldHVybmVkLCByZXNvbHZlIHRoaXMgYW5kIHRoZW4gcmV0dXJuXG4gICAgICAgIHJlc3VsdFxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICB3b3JrZXIuc2VuZCh7XG4gICAgICAgICAgICAgICAgaWQ6IHJlcXVlc3QuaWQsXG4gICAgICAgICAgICAgICAgcmVzdWx0OiByZXN1bHQsXG4gICAgICAgICAgICAgICAgZXJyb3I6IG51bGxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGN1cnJlbnRSZXF1ZXN0SWQgPSBudWxsO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgIHdvcmtlci5zZW5kKHtcbiAgICAgICAgICAgICAgICBpZDogcmVxdWVzdC5pZCxcbiAgICAgICAgICAgICAgICByZXN1bHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGNvbnZlcnRFcnJvcihlcnIpXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjdXJyZW50UmVxdWVzdElkID0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIGltbWVkaWF0ZSByZXN1bHRcbiAgICAgICAgd29ya2VyLnNlbmQoe1xuICAgICAgICAgIGlkOiByZXF1ZXN0LmlkLFxuICAgICAgICAgIHJlc3VsdDogcmVzdWx0LFxuICAgICAgICAgIGVycm9yOiBudWxsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN1cnJlbnRSZXF1ZXN0SWQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBtZXRob2QgXCInICsgcmVxdWVzdC5tZXRob2QgKyAnXCInKTtcbiAgICB9XG4gIH1cbiAgY2F0Y2ggKGVycikge1xuICAgIHdvcmtlci5zZW5kKHtcbiAgICAgIGlkOiByZXF1ZXN0LmlkLFxuICAgICAgcmVzdWx0OiBudWxsLFxuICAgICAgZXJyb3I6IGNvbnZlcnRFcnJvcihlcnIpXG4gICAgfSk7XG4gIH1cbn0pO1xuXG4vKipcbiAqIFJlZ2lzdGVyIG1ldGhvZHMgdG8gdGhlIHdvcmtlclxuICogQHBhcmFtIHtPYmplY3R9IG1ldGhvZHNcbiAqL1xud29ya2VyLnJlZ2lzdGVyID0gZnVuY3Rpb24gKG1ldGhvZHMpIHtcblxuICBpZiAobWV0aG9kcykge1xuICAgIGZvciAodmFyIG5hbWUgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKG1ldGhvZHMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgd29ya2VyLm1ldGhvZHNbbmFtZV0gPSBtZXRob2RzW25hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHdvcmtlci5zZW5kKCdyZWFkeScpO1xuXG59O1xuXG53b3JrZXIuZW1pdCA9IGZ1bmN0aW9uIChwYXlsb2FkKSB7XG4gIGlmIChjdXJyZW50UmVxdWVzdElkKSB7XG4gICAgd29ya2VyLnNlbmQoe1xuICAgICAgaWQ6IGN1cnJlbnRSZXF1ZXN0SWQsXG4gICAgICBpc0V2ZW50OiB0cnVlLFxuICAgICAgcGF5bG9hZFxuICAgIH0pO1xuICB9XG59O1xuXG5pZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gIGV4cG9ydHMuYWRkID0gd29ya2VyLnJlZ2lzdGVyO1xuICBleHBvcnRzLmVtaXQgPSB3b3JrZXIuZW1pdDtcbn1cbiIsICJ2YXIgZW52aXJvbm1lbnQgPSByZXF1aXJlKCcuL2Vudmlyb25tZW50Jyk7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IHdvcmtlciBwb29sXG4gKiBAcGFyYW0ge3N0cmluZ30gW3NjcmlwdF1cbiAqIEBwYXJhbSB7V29ya2VyUG9vbE9wdGlvbnN9IFtvcHRpb25zXVxuICogQHJldHVybnMge1Bvb2x9IHBvb2xcbiAqL1xuZXhwb3J0cy5wb29sID0gZnVuY3Rpb24gcG9vbChzY3JpcHQsIG9wdGlvbnMpIHtcbiAgdmFyIFBvb2wgPSByZXF1aXJlKCcuL1Bvb2wnKTtcblxuICByZXR1cm4gbmV3IFBvb2woc2NyaXB0LCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgd29ya2VyIGFuZCBvcHRpb25hbGx5IHJlZ2lzdGVyIGEgc2V0IG9mIG1ldGhvZHMgdG8gdGhlIHdvcmtlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbbWV0aG9kc11cbiAqL1xuZXhwb3J0cy53b3JrZXIgPSBmdW5jdGlvbiB3b3JrZXIobWV0aG9kcykge1xuICB2YXIgd29ya2VyID0gcmVxdWlyZSgnLi93b3JrZXInKTtcbiAgd29ya2VyLmFkZChtZXRob2RzKTtcbn07XG5cbi8qKlxuICogU2VuZHMgYW4gZXZlbnQgdG8gdGhlIHBhcmVudCB3b3JrZXIgcG9vbC5cbiAqIEBwYXJhbSB7YW55fSBwYXlsb2FkIFxuICovXG5leHBvcnRzLndvcmtlckVtaXQgPSBmdW5jdGlvbiB3b3JrZXJFbWl0KHBheWxvYWQpIHtcbiAgdmFyIHdvcmtlciA9IHJlcXVpcmUoJy4vd29ya2VyJyk7XG4gIHdvcmtlci5lbWl0KHBheWxvYWQpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBwcm9taXNlLlxuICogQHR5cGUge1Byb21pc2V9IHByb21pc2VcbiAqL1xuZXhwb3J0cy5Qcm9taXNlID0gcmVxdWlyZSgnLi9Qcm9taXNlJyk7XG5cbmV4cG9ydHMucGxhdGZvcm0gPSBlbnZpcm9ubWVudC5wbGF0Zm9ybTtcbmV4cG9ydHMuaXNNYWluVGhyZWFkID0gZW52aXJvbm1lbnQuaXNNYWluVGhyZWFkO1xuZXhwb3J0cy5jcHVzID0gZW52aXJvbm1lbnQuY3B1czsiLCAiaW1wb3J0IHsgV3JpdGFibGUgfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICd1dGlsJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcblxudHlwZSBTdHlsZUZuID0gKHN0cjogc3RyaW5nKSA9PiBzdHJpbmc7XG5jb25zdCB7IHN0ZGVyciB9ID0gcHJvY2VzcztcblxuY29uc3QgbG9nZ2VyID0gKHN0cmVhbTogV3JpdGFibGUsIHN0eWxlcz86IFN0eWxlRm5bXSkgPT4gKGZtdDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkgPT4ge1xuICBsZXQgc3RyID0gdXRpbC5mb3JtYXQoZm10LCAuLi5hcmdzKTtcbiAgaWYgKHN0eWxlcyAmJiBzdHlsZXMubGVuZ3RoKSB7XG4gICAgc3RyID0gc3R5bGVzLnJlZHVjZSgoYSwgc3R5bGUpID0+IHN0eWxlKGEpLCBzdHIpO1xuICB9XG4gIHN0cmVhbS53cml0ZShzdHIgKyAnXFxuJyk7XG59O1xuXG5leHBvcnQgY29uc3QgcHJpbnQgPSBsb2dnZXIoc3RkZXJyKTtcbmV4cG9ydCBjb25zdCBlcnJvciA9IGxvZ2dlcihzdGRlcnIsIFtjaGFsay5yZWRdKTtcbmV4cG9ydCBjb25zdCB3YXJuaW5nID0gbG9nZ2VyKHN0ZGVyciwgW2NoYWxrLnllbGxvd10pO1xuZXhwb3J0IGNvbnN0IHN1Y2Nlc3MgPSBsb2dnZXIoc3RkZXJyLCBbY2hhbGsuZ3JlZW5dKTtcbmV4cG9ydCBjb25zdCBoaWdobGlnaHQgPSBsb2dnZXIoc3RkZXJyLCBbY2hhbGsuYm9sZF0pO1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmZyb21DYWxsYmFjayA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIGZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBmbi5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgLi4uYXJncyxcbiAgICAgICAgICAoZXJyLCByZXMpID0+IChlcnIgIT0gbnVsbCkgPyByZWplY3QoZXJyKSA6IHJlc29sdmUocmVzKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH1cbiAgfSwgJ25hbWUnLCB7IHZhbHVlOiBmbi5uYW1lIH0pXG59XG5cbmV4cG9ydHMuZnJvbVByb21pc2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGNvbnN0IGNiID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdXG4gICAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgZWxzZSBmbi5hcHBseSh0aGlzLCBhcmdzLnNsaWNlKDAsIC0xKSkudGhlbihyID0+IGNiKG51bGwsIHIpLCBjYilcbiAgfSwgJ25hbWUnLCB7IHZhbHVlOiBmbi5uYW1lIH0pXG59XG4iLCAidmFyIGNvbnN0YW50cyA9IHJlcXVpcmUoJ2NvbnN0YW50cycpXG5cbnZhciBvcmlnQ3dkID0gcHJvY2Vzcy5jd2RcbnZhciBjd2QgPSBudWxsXG5cbnZhciBwbGF0Zm9ybSA9IHByb2Nlc3MuZW52LkdSQUNFRlVMX0ZTX1BMQVRGT1JNIHx8IHByb2Nlc3MucGxhdGZvcm1cblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCFjd2QpXG4gICAgY3dkID0gb3JpZ0N3ZC5jYWxsKHByb2Nlc3MpXG4gIHJldHVybiBjd2Rcbn1cbnRyeSB7XG4gIHByb2Nlc3MuY3dkKClcbn0gY2F0Y2ggKGVyKSB7fVxuXG4vLyBUaGlzIGNoZWNrIGlzIG5lZWRlZCB1bnRpbCBub2RlLmpzIDEyIGlzIHJlcXVpcmVkXG5pZiAodHlwZW9mIHByb2Nlc3MuY2hkaXIgPT09ICdmdW5jdGlvbicpIHtcbiAgdmFyIGNoZGlyID0gcHJvY2Vzcy5jaGRpclxuICBwcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGQpIHtcbiAgICBjd2QgPSBudWxsXG4gICAgY2hkaXIuY2FsbChwcm9jZXNzLCBkKVxuICB9XG4gIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm9jZXNzLmNoZGlyLCBjaGRpcilcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaFxuXG5mdW5jdGlvbiBwYXRjaCAoZnMpIHtcbiAgLy8gKHJlLSlpbXBsZW1lbnQgc29tZSB0aGluZ3MgdGhhdCBhcmUga25vd24gYnVzdGVkIG9yIG1pc3NpbmcuXG5cbiAgLy8gbGNobW9kLCBicm9rZW4gcHJpb3IgdG8gMC42LjJcbiAgLy8gYmFjay1wb3J0IHRoZSBmaXggaGVyZS5cbiAgaWYgKGNvbnN0YW50cy5oYXNPd25Qcm9wZXJ0eSgnT19TWU1MSU5LJykgJiZcbiAgICAgIHByb2Nlc3MudmVyc2lvbi5tYXRjaCgvXnYwXFwuNlxcLlswLTJdfF52MFxcLjVcXC4vKSkge1xuICAgIHBhdGNoTGNobW9kKGZzKVxuICB9XG5cbiAgLy8gbHV0aW1lcyBpbXBsZW1lbnRhdGlvbiwgb3Igbm8tb3BcbiAgaWYgKCFmcy5sdXRpbWVzKSB7XG4gICAgcGF0Y2hMdXRpbWVzKGZzKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2lzYWFjcy9ub2RlLWdyYWNlZnVsLWZzL2lzc3Vlcy80XG4gIC8vIENob3duIHNob3VsZCBub3QgZmFpbCBvbiBlaW52YWwgb3IgZXBlcm0gaWYgbm9uLXJvb3QuXG4gIC8vIEl0IHNob3VsZCBub3QgZmFpbCBvbiBlbm9zeXMgZXZlciwgYXMgdGhpcyBqdXN0IGluZGljYXRlc1xuICAvLyB0aGF0IGEgZnMgZG9lc24ndCBzdXBwb3J0IHRoZSBpbnRlbmRlZCBvcGVyYXRpb24uXG5cbiAgZnMuY2hvd24gPSBjaG93bkZpeChmcy5jaG93bilcbiAgZnMuZmNob3duID0gY2hvd25GaXgoZnMuZmNob3duKVxuICBmcy5sY2hvd24gPSBjaG93bkZpeChmcy5sY2hvd24pXG5cbiAgZnMuY2htb2QgPSBjaG1vZEZpeChmcy5jaG1vZClcbiAgZnMuZmNobW9kID0gY2htb2RGaXgoZnMuZmNobW9kKVxuICBmcy5sY2htb2QgPSBjaG1vZEZpeChmcy5sY2htb2QpXG5cbiAgZnMuY2hvd25TeW5jID0gY2hvd25GaXhTeW5jKGZzLmNob3duU3luYylcbiAgZnMuZmNob3duU3luYyA9IGNob3duRml4U3luYyhmcy5mY2hvd25TeW5jKVxuICBmcy5sY2hvd25TeW5jID0gY2hvd25GaXhTeW5jKGZzLmxjaG93blN5bmMpXG5cbiAgZnMuY2htb2RTeW5jID0gY2htb2RGaXhTeW5jKGZzLmNobW9kU3luYylcbiAgZnMuZmNobW9kU3luYyA9IGNobW9kRml4U3luYyhmcy5mY2htb2RTeW5jKVxuICBmcy5sY2htb2RTeW5jID0gY2htb2RGaXhTeW5jKGZzLmxjaG1vZFN5bmMpXG5cbiAgZnMuc3RhdCA9IHN0YXRGaXgoZnMuc3RhdClcbiAgZnMuZnN0YXQgPSBzdGF0Rml4KGZzLmZzdGF0KVxuICBmcy5sc3RhdCA9IHN0YXRGaXgoZnMubHN0YXQpXG5cbiAgZnMuc3RhdFN5bmMgPSBzdGF0Rml4U3luYyhmcy5zdGF0U3luYylcbiAgZnMuZnN0YXRTeW5jID0gc3RhdEZpeFN5bmMoZnMuZnN0YXRTeW5jKVxuICBmcy5sc3RhdFN5bmMgPSBzdGF0Rml4U3luYyhmcy5sc3RhdFN5bmMpXG5cbiAgLy8gaWYgbGNobW9kL2xjaG93biBkbyBub3QgZXhpc3QsIHRoZW4gbWFrZSB0aGVtIG5vLW9wc1xuICBpZiAoZnMuY2htb2QgJiYgIWZzLmxjaG1vZCkge1xuICAgIGZzLmxjaG1vZCA9IGZ1bmN0aW9uIChwYXRoLCBtb2RlLCBjYikge1xuICAgICAgaWYgKGNiKSBwcm9jZXNzLm5leHRUaWNrKGNiKVxuICAgIH1cbiAgICBmcy5sY2htb2RTeW5jID0gZnVuY3Rpb24gKCkge31cbiAgfVxuICBpZiAoZnMuY2hvd24gJiYgIWZzLmxjaG93bikge1xuICAgIGZzLmxjaG93biA9IGZ1bmN0aW9uIChwYXRoLCB1aWQsIGdpZCwgY2IpIHtcbiAgICAgIGlmIChjYikgcHJvY2Vzcy5uZXh0VGljayhjYilcbiAgICB9XG4gICAgZnMubGNob3duU3luYyA9IGZ1bmN0aW9uICgpIHt9XG4gIH1cblxuICAvLyBvbiBXaW5kb3dzLCBBL1Ygc29mdHdhcmUgY2FuIGxvY2sgdGhlIGRpcmVjdG9yeSwgY2F1c2luZyB0aGlzXG4gIC8vIHRvIGZhaWwgd2l0aCBhbiBFQUNDRVMgb3IgRVBFUk0gaWYgdGhlIGRpcmVjdG9yeSBjb250YWlucyBuZXdseVxuICAvLyBjcmVhdGVkIGZpbGVzLiAgVHJ5IGFnYWluIG9uIGZhaWx1cmUsIGZvciB1cCB0byA2MCBzZWNvbmRzLlxuXG4gIC8vIFNldCB0aGUgdGltZW91dCB0aGlzIGxvbmcgYmVjYXVzZSBzb21lIFdpbmRvd3MgQW50aS1WaXJ1cywgc3VjaCBhcyBQYXJpdHlcbiAgLy8gYml0OSwgbWF5IGxvY2sgZmlsZXMgZm9yIHVwIHRvIGEgbWludXRlLCBjYXVzaW5nIG5wbSBwYWNrYWdlIGluc3RhbGxcbiAgLy8gZmFpbHVyZXMuIEFsc28sIHRha2UgY2FyZSB0byB5aWVsZCB0aGUgc2NoZWR1bGVyLiBXaW5kb3dzIHNjaGVkdWxpbmcgZ2l2ZXNcbiAgLy8gQ1BVIHRvIGEgYnVzeSBsb29waW5nIHByb2Nlc3MsIHdoaWNoIGNhbiBjYXVzZSB0aGUgcHJvZ3JhbSBjYXVzaW5nIHRoZSBsb2NrXG4gIC8vIGNvbnRlbnRpb24gdG8gYmUgc3RhcnZlZCBvZiBDUFUgYnkgbm9kZSwgc28gdGhlIGNvbnRlbnRpb24gZG9lc24ndCByZXNvbHZlLlxuICBpZiAocGxhdGZvcm0gPT09IFwid2luMzJcIikge1xuICAgIGZzLnJlbmFtZSA9IHR5cGVvZiBmcy5yZW5hbWUgIT09ICdmdW5jdGlvbicgPyBmcy5yZW5hbWVcbiAgICA6IChmdW5jdGlvbiAoZnMkcmVuYW1lKSB7XG4gICAgICBmdW5jdGlvbiByZW5hbWUgKGZyb20sIHRvLCBjYikge1xuICAgICAgICB2YXIgc3RhcnQgPSBEYXRlLm5vdygpXG4gICAgICAgIHZhciBiYWNrb2ZmID0gMDtcbiAgICAgICAgZnMkcmVuYW1lKGZyb20sIHRvLCBmdW5jdGlvbiBDQiAoZXIpIHtcbiAgICAgICAgICBpZiAoZXJcbiAgICAgICAgICAgICAgJiYgKGVyLmNvZGUgPT09IFwiRUFDQ0VTXCIgfHwgZXIuY29kZSA9PT0gXCJFUEVSTVwiKVxuICAgICAgICAgICAgICAmJiBEYXRlLm5vdygpIC0gc3RhcnQgPCA2MDAwMCkge1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgZnMuc3RhdCh0bywgZnVuY3Rpb24gKHN0YXRlciwgc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGVyICYmIHN0YXRlci5jb2RlID09PSBcIkVOT0VOVFwiKVxuICAgICAgICAgICAgICAgICAgZnMkcmVuYW1lKGZyb20sIHRvLCBDQik7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgY2IoZXIpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LCBiYWNrb2ZmKVxuICAgICAgICAgICAgaWYgKGJhY2tvZmYgPCAxMDApXG4gICAgICAgICAgICAgIGJhY2tvZmYgKz0gMTA7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjYikgY2IoZXIpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSBPYmplY3Quc2V0UHJvdG90eXBlT2YocmVuYW1lLCBmcyRyZW5hbWUpXG4gICAgICByZXR1cm4gcmVuYW1lXG4gICAgfSkoZnMucmVuYW1lKVxuICB9XG5cbiAgLy8gaWYgcmVhZCgpIHJldHVybnMgRUFHQUlOLCB0aGVuIGp1c3QgdHJ5IGl0IGFnYWluLlxuICBmcy5yZWFkID0gdHlwZW9mIGZzLnJlYWQgIT09ICdmdW5jdGlvbicgPyBmcy5yZWFkXG4gIDogKGZ1bmN0aW9uIChmcyRyZWFkKSB7XG4gICAgZnVuY3Rpb24gcmVhZCAoZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFja18pIHtcbiAgICAgIHZhciBjYWxsYmFja1xuICAgICAgaWYgKGNhbGxiYWNrXyAmJiB0eXBlb2YgY2FsbGJhY2tfID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBlYWdDb3VudGVyID0gMFxuICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uIChlciwgXywgX18pIHtcbiAgICAgICAgICBpZiAoZXIgJiYgZXIuY29kZSA9PT0gJ0VBR0FJTicgJiYgZWFnQ291bnRlciA8IDEwKSB7XG4gICAgICAgICAgICBlYWdDb3VudGVyICsrXG4gICAgICAgICAgICByZXR1cm4gZnMkcmVhZC5jYWxsKGZzLCBmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjYWxsYmFja18uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZnMkcmVhZC5jYWxsKGZzLCBmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKVxuICAgIH1cblxuICAgIC8vIFRoaXMgZW5zdXJlcyBgdXRpbC5wcm9taXNpZnlgIHdvcmtzIGFzIGl0IGRvZXMgZm9yIG5hdGl2ZSBgZnMucmVhZGAuXG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikgT2JqZWN0LnNldFByb3RvdHlwZU9mKHJlYWQsIGZzJHJlYWQpXG4gICAgcmV0dXJuIHJlYWRcbiAgfSkoZnMucmVhZClcblxuICBmcy5yZWFkU3luYyA9IHR5cGVvZiBmcy5yZWFkU3luYyAhPT0gJ2Z1bmN0aW9uJyA/IGZzLnJlYWRTeW5jXG4gIDogKGZ1bmN0aW9uIChmcyRyZWFkU3luYykgeyByZXR1cm4gZnVuY3Rpb24gKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbikge1xuICAgIHZhciBlYWdDb3VudGVyID0gMFxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZnMkcmVhZFN5bmMuY2FsbChmcywgZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uKVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgaWYgKGVyLmNvZGUgPT09ICdFQUdBSU4nICYmIGVhZ0NvdW50ZXIgPCAxMCkge1xuICAgICAgICAgIGVhZ0NvdW50ZXIgKytcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIHRocm93IGVyXG4gICAgICB9XG4gICAgfVxuICB9fSkoZnMucmVhZFN5bmMpXG5cbiAgZnVuY3Rpb24gcGF0Y2hMY2htb2QgKGZzKSB7XG4gICAgZnMubGNobW9kID0gZnVuY3Rpb24gKHBhdGgsIG1vZGUsIGNhbGxiYWNrKSB7XG4gICAgICBmcy5vcGVuKCBwYXRoXG4gICAgICAgICAgICAgLCBjb25zdGFudHMuT19XUk9OTFkgfCBjb25zdGFudHMuT19TWU1MSU5LXG4gICAgICAgICAgICAgLCBtb2RlXG4gICAgICAgICAgICAgLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJlZmVyIHRvIHJldHVybiB0aGUgY2htb2QgZXJyb3IsIGlmIG9uZSBvY2N1cnMsXG4gICAgICAgIC8vIGJ1dCBzdGlsbCB0cnkgdG8gY2xvc2UsIGFuZCByZXBvcnQgY2xvc2luZyBlcnJvcnMgaWYgdGhleSBvY2N1ci5cbiAgICAgICAgZnMuZmNobW9kKGZkLCBtb2RlLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgZnMuY2xvc2UoZmQsIGZ1bmN0aW9uKGVycjIpIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZXJyIHx8IGVycjIpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZnMubGNobW9kU3luYyA9IGZ1bmN0aW9uIChwYXRoLCBtb2RlKSB7XG4gICAgICB2YXIgZmQgPSBmcy5vcGVuU3luYyhwYXRoLCBjb25zdGFudHMuT19XUk9OTFkgfCBjb25zdGFudHMuT19TWU1MSU5LLCBtb2RlKVxuXG4gICAgICAvLyBwcmVmZXIgdG8gcmV0dXJuIHRoZSBjaG1vZCBlcnJvciwgaWYgb25lIG9jY3VycyxcbiAgICAgIC8vIGJ1dCBzdGlsbCB0cnkgdG8gY2xvc2UsIGFuZCByZXBvcnQgY2xvc2luZyBlcnJvcnMgaWYgdGhleSBvY2N1ci5cbiAgICAgIHZhciB0aHJldyA9IHRydWVcbiAgICAgIHZhciByZXRcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldCA9IGZzLmZjaG1vZFN5bmMoZmQsIG1vZGUpXG4gICAgICAgIHRocmV3ID0gZmFsc2VcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmICh0aHJldykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgICAgfSBjYXRjaCAoZXIpIHt9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGF0Y2hMdXRpbWVzIChmcykge1xuICAgIGlmIChjb25zdGFudHMuaGFzT3duUHJvcGVydHkoXCJPX1NZTUxJTktcIikgJiYgZnMuZnV0aW1lcykge1xuICAgICAgZnMubHV0aW1lcyA9IGZ1bmN0aW9uIChwYXRoLCBhdCwgbXQsIGNiKSB7XG4gICAgICAgIGZzLm9wZW4ocGF0aCwgY29uc3RhbnRzLk9fU1lNTElOSywgZnVuY3Rpb24gKGVyLCBmZCkge1xuICAgICAgICAgIGlmIChlcikge1xuICAgICAgICAgICAgaWYgKGNiKSBjYihlcilcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBmcy5mdXRpbWVzKGZkLCBhdCwgbXQsIGZ1bmN0aW9uIChlcikge1xuICAgICAgICAgICAgZnMuY2xvc2UoZmQsIGZ1bmN0aW9uIChlcjIpIHtcbiAgICAgICAgICAgICAgaWYgKGNiKSBjYihlciB8fCBlcjIpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGZzLmx1dGltZXNTeW5jID0gZnVuY3Rpb24gKHBhdGgsIGF0LCBtdCkge1xuICAgICAgICB2YXIgZmQgPSBmcy5vcGVuU3luYyhwYXRoLCBjb25zdGFudHMuT19TWU1MSU5LKVxuICAgICAgICB2YXIgcmV0XG4gICAgICAgIHZhciB0aHJldyA9IHRydWVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXQgPSBmcy5mdXRpbWVzU3luYyhmZCwgYXQsIG10KVxuICAgICAgICAgIHRocmV3ID0gZmFsc2VcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpZiAodGhyZXcpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVyKSB7fVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXRcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoZnMuZnV0aW1lcykge1xuICAgICAgZnMubHV0aW1lcyA9IGZ1bmN0aW9uIChfYSwgX2IsIF9jLCBjYikgeyBpZiAoY2IpIHByb2Nlc3MubmV4dFRpY2soY2IpIH1cbiAgICAgIGZzLmx1dGltZXNTeW5jID0gZnVuY3Rpb24gKCkge31cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaG1vZEZpeCAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgbW9kZSwgY2IpIHtcbiAgICAgIHJldHVybiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgbW9kZSwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICAgIGlmIChjaG93bkVyT2soZXIpKSBlciA9IG51bGxcbiAgICAgICAgaWYgKGNiKSBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNobW9kRml4U3luYyAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgbW9kZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCBtb2RlKVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgaWYgKCFjaG93bkVyT2soZXIpKSB0aHJvdyBlclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgZnVuY3Rpb24gY2hvd25GaXggKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIHVpZCwgZ2lkLCBjYikge1xuICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCB1aWQsIGdpZCwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICAgIGlmIChjaG93bkVyT2soZXIpKSBlciA9IG51bGxcbiAgICAgICAgaWYgKGNiKSBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNob3duRml4U3luYyAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgdWlkLCBnaWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgdWlkLCBnaWQpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBpZiAoIWNob3duRXJPayhlcikpIHRocm93IGVyXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhdEZpeCAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICAvLyBPbGRlciB2ZXJzaW9ucyBvZiBOb2RlIGVycm9uZW91c2x5IHJldHVybmVkIHNpZ25lZCBpbnRlZ2VycyBmb3JcbiAgICAvLyB1aWQgKyBnaWQuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIG9wdGlvbnMsIGNiKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zXG4gICAgICAgIG9wdGlvbnMgPSBudWxsXG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBjYWxsYmFjayAoZXIsIHN0YXRzKSB7XG4gICAgICAgIGlmIChzdGF0cykge1xuICAgICAgICAgIGlmIChzdGF0cy51aWQgPCAwKSBzdGF0cy51aWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgICAgICBpZiAoc3RhdHMuZ2lkIDwgMCkgc3RhdHMuZ2lkICs9IDB4MTAwMDAwMDAwXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNiKSBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9ucyA/IG9yaWcuY2FsbChmcywgdGFyZ2V0LCBvcHRpb25zLCBjYWxsYmFjaylcbiAgICAgICAgOiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgY2FsbGJhY2spXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhdEZpeFN5bmMgKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgLy8gT2xkZXIgdmVyc2lvbnMgb2YgTm9kZSBlcnJvbmVvdXNseSByZXR1cm5lZCBzaWduZWQgaW50ZWdlcnMgZm9yXG4gICAgLy8gdWlkICsgZ2lkLlxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgICB2YXIgc3RhdHMgPSBvcHRpb25zID8gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIG9wdGlvbnMpXG4gICAgICAgIDogb3JpZy5jYWxsKGZzLCB0YXJnZXQpXG4gICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgaWYgKHN0YXRzLnVpZCA8IDApIHN0YXRzLnVpZCArPSAweDEwMDAwMDAwMFxuICAgICAgICBpZiAoc3RhdHMuZ2lkIDwgMCkgc3RhdHMuZ2lkICs9IDB4MTAwMDAwMDAwXG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdHM7XG4gICAgfVxuICB9XG5cbiAgLy8gRU5PU1lTIG1lYW5zIHRoYXQgdGhlIGZzIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgb3AuIEp1c3QgaWdub3JlXG4gIC8vIHRoYXQsIGJlY2F1c2UgaXQgZG9lc24ndCBtYXR0ZXIuXG4gIC8vXG4gIC8vIGlmIHRoZXJlJ3Mgbm8gZ2V0dWlkLCBvciBpZiBnZXR1aWQoKSBpcyBzb21ldGhpbmcgb3RoZXJcbiAgLy8gdGhhbiAwLCBhbmQgdGhlIGVycm9yIGlzIEVJTlZBTCBvciBFUEVSTSwgdGhlbiBqdXN0IGlnbm9yZVxuICAvLyBpdC5cbiAgLy9cbiAgLy8gVGhpcyBzcGVjaWZpYyBjYXNlIGlzIGEgc2lsZW50IGZhaWx1cmUgaW4gY3AsIGluc3RhbGwsIHRhcixcbiAgLy8gYW5kIG1vc3Qgb3RoZXIgdW5peCB0b29scyB0aGF0IG1hbmFnZSBwZXJtaXNzaW9ucy5cbiAgLy9cbiAgLy8gV2hlbiBydW5uaW5nIGFzIHJvb3QsIG9yIGlmIG90aGVyIHR5cGVzIG9mIGVycm9ycyBhcmVcbiAgLy8gZW5jb3VudGVyZWQsIHRoZW4gaXQncyBzdHJpY3QuXG4gIGZ1bmN0aW9uIGNob3duRXJPayAoZXIpIHtcbiAgICBpZiAoIWVyKVxuICAgICAgcmV0dXJuIHRydWVcblxuICAgIGlmIChlci5jb2RlID09PSBcIkVOT1NZU1wiKVxuICAgICAgcmV0dXJuIHRydWVcblxuICAgIHZhciBub25yb290ID0gIXByb2Nlc3MuZ2V0dWlkIHx8IHByb2Nlc3MuZ2V0dWlkKCkgIT09IDBcbiAgICBpZiAobm9ucm9vdCkge1xuICAgICAgaWYgKGVyLmNvZGUgPT09IFwiRUlOVkFMXCIgfHwgZXIuY29kZSA9PT0gXCJFUEVSTVwiKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iLCAidmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxlZ2FjeVxuXG5mdW5jdGlvbiBsZWdhY3kgKGZzKSB7XG4gIHJldHVybiB7XG4gICAgUmVhZFN0cmVhbTogUmVhZFN0cmVhbSxcbiAgICBXcml0ZVN0cmVhbTogV3JpdGVTdHJlYW1cbiAgfVxuXG4gIGZ1bmN0aW9uIFJlYWRTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVhZFN0cmVhbSkpIHJldHVybiBuZXcgUmVhZFN0cmVhbShwYXRoLCBvcHRpb25zKTtcblxuICAgIFN0cmVhbS5jYWxsKHRoaXMpO1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLmZkID0gbnVsbDtcbiAgICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5mbGFncyA9ICdyJztcbiAgICB0aGlzLm1vZGUgPSA0Mzg7IC8qPTA2NjYqL1xuICAgIHRoaXMuYnVmZmVyU2l6ZSA9IDY0ICogMTAyNDtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLy8gTWl4aW4gb3B0aW9ucyBpbnRvIHRoaXNcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgICB0aGlzW2tleV0gPSBvcHRpb25zW2tleV07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5jb2RpbmcpIHRoaXMuc2V0RW5jb2RpbmcodGhpcy5lbmNvZGluZyk7XG5cbiAgICBpZiAodGhpcy5zdGFydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoJ251bWJlcicgIT09IHR5cGVvZiB0aGlzLnN0YXJ0KSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcignc3RhcnQgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5lbmQgPSBJbmZpbml0eTtcbiAgICAgIH0gZWxzZSBpZiAoJ251bWJlcicgIT09IHR5cGVvZiB0aGlzLmVuZCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ2VuZCBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN0YXJ0ID4gdGhpcy5lbmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGFydCBtdXN0IGJlIDw9IGVuZCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmQgIT09IG51bGwpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYuX3JlYWQoKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZzLm9wZW4odGhpcy5wYXRoLCB0aGlzLmZsYWdzLCB0aGlzLm1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICBzZWxmLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2VsZi5mZCA9IGZkO1xuICAgICAgc2VsZi5lbWl0KCdvcGVuJywgZmQpO1xuICAgICAgc2VsZi5fcmVhZCgpO1xuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBXcml0ZVN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBXcml0ZVN0cmVhbSkpIHJldHVybiBuZXcgV3JpdGVTdHJlYW0ocGF0aCwgb3B0aW9ucyk7XG5cbiAgICBTdHJlYW0uY2FsbCh0aGlzKTtcblxuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy5mZCA9IG51bGw7XG4gICAgdGhpcy53cml0YWJsZSA9IHRydWU7XG5cbiAgICB0aGlzLmZsYWdzID0gJ3cnO1xuICAgIHRoaXMuZW5jb2RpbmcgPSAnYmluYXJ5JztcbiAgICB0aGlzLm1vZGUgPSA0Mzg7IC8qPTA2NjYqL1xuICAgIHRoaXMuYnl0ZXNXcml0dGVuID0gMDtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLy8gTWl4aW4gb3B0aW9ucyBpbnRvIHRoaXNcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgICB0aGlzW2tleV0gPSBvcHRpb25zW2tleV07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCdudW1iZXInICE9PSB0eXBlb2YgdGhpcy5zdGFydCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ3N0YXJ0IG11c3QgYmUgYSBOdW1iZXInKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnN0YXJ0IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXJ0IG11c3QgYmUgPj0gemVybycpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQ7XG4gICAgfVxuXG4gICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gICAgdGhpcy5fcXVldWUgPSBbXTtcblxuICAgIGlmICh0aGlzLmZkID09PSBudWxsKSB7XG4gICAgICB0aGlzLl9vcGVuID0gZnMub3BlbjtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goW3RoaXMuX29wZW4sIHRoaXMucGF0aCwgdGhpcy5mbGFncywgdGhpcy5tb2RlLCB1bmRlZmluZWRdKTtcbiAgICAgIHRoaXMuZmx1c2goKTtcbiAgICB9XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVxuXG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gb2JqLl9fcHJvdG9fX1xufVxuXG5mdW5jdGlvbiBjbG9uZSAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpXG4gICAgcmV0dXJuIG9ialxuXG4gIGlmIChvYmogaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgdmFyIGNvcHkgPSB7IF9fcHJvdG9fXzogZ2V0UHJvdG90eXBlT2Yob2JqKSB9XG4gIGVsc2VcbiAgICB2YXIgY29weSA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb3B5LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpKVxuICB9KVxuXG4gIHJldHVybiBjb3B5XG59XG4iLCAidmFyIGZzID0gcmVxdWlyZSgnZnMnKVxudmFyIHBvbHlmaWxscyA9IHJlcXVpcmUoJy4vcG9seWZpbGxzLmpzJylcbnZhciBsZWdhY3kgPSByZXF1aXJlKCcuL2xlZ2FjeS1zdHJlYW1zLmpzJylcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4vY2xvbmUuanMnKVxuXG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIG5vZGUgMC54IHBvbHlmaWxsICovXG52YXIgZ3JhY2VmdWxRdWV1ZVxudmFyIHByZXZpb3VzU3ltYm9sXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlIC0gbm9kZSAwLnggcG9seWZpbGwgKi9cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuZm9yID09PSAnZnVuY3Rpb24nKSB7XG4gIGdyYWNlZnVsUXVldWUgPSBTeW1ib2wuZm9yKCdncmFjZWZ1bC1mcy5xdWV1ZScpXG4gIC8vIFRoaXMgaXMgdXNlZCBpbiB0ZXN0aW5nIGJ5IGZ1dHVyZSB2ZXJzaW9uc1xuICBwcmV2aW91c1N5bWJvbCA9IFN5bWJvbC5mb3IoJ2dyYWNlZnVsLWZzLnByZXZpb3VzJylcbn0gZWxzZSB7XG4gIGdyYWNlZnVsUXVldWUgPSAnX19fZ3JhY2VmdWwtZnMucXVldWUnXG4gIHByZXZpb3VzU3ltYm9sID0gJ19fX2dyYWNlZnVsLWZzLnByZXZpb3VzJ1xufVxuXG5mdW5jdGlvbiBub29wICgpIHt9XG5cbmZ1bmN0aW9uIHB1Ymxpc2hRdWV1ZShjb250ZXh0LCBxdWV1ZSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udGV4dCwgZ3JhY2VmdWxRdWV1ZSwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcXVldWVcbiAgICB9XG4gIH0pXG59XG5cbnZhciBkZWJ1ZyA9IG5vb3BcbmlmICh1dGlsLmRlYnVnbG9nKVxuICBkZWJ1ZyA9IHV0aWwuZGVidWdsb2coJ2dmczQnKVxuZWxzZSBpZiAoL1xcYmdmczRcXGIvaS50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcgfHwgJycpKVxuICBkZWJ1ZyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBtID0gdXRpbC5mb3JtYXQuYXBwbHkodXRpbCwgYXJndW1lbnRzKVxuICAgIG0gPSAnR0ZTNDogJyArIG0uc3BsaXQoL1xcbi8pLmpvaW4oJ1xcbkdGUzQ6ICcpXG4gICAgY29uc29sZS5lcnJvcihtKVxuICB9XG5cbi8vIE9uY2UgdGltZSBpbml0aWFsaXphdGlvblxuaWYgKCFmc1tncmFjZWZ1bFF1ZXVlXSkge1xuICAvLyBUaGlzIHF1ZXVlIGNhbiBiZSBzaGFyZWQgYnkgbXVsdGlwbGUgbG9hZGVkIGluc3RhbmNlc1xuICB2YXIgcXVldWUgPSBnbG9iYWxbZ3JhY2VmdWxRdWV1ZV0gfHwgW11cbiAgcHVibGlzaFF1ZXVlKGZzLCBxdWV1ZSlcblxuICAvLyBQYXRjaCBmcy5jbG9zZS9jbG9zZVN5bmMgdG8gc2hhcmVkIHF1ZXVlIHZlcnNpb24sIGJlY2F1c2Ugd2UgbmVlZFxuICAvLyB0byByZXRyeSgpIHdoZW5ldmVyIGEgY2xvc2UgaGFwcGVucyAqYW55d2hlcmUqIGluIHRoZSBwcm9ncmFtLlxuICAvLyBUaGlzIGlzIGVzc2VudGlhbCB3aGVuIG11bHRpcGxlIGdyYWNlZnVsLWZzIGluc3RhbmNlcyBhcmVcbiAgLy8gaW4gcGxheSBhdCB0aGUgc2FtZSB0aW1lLlxuICBmcy5jbG9zZSA9IChmdW5jdGlvbiAoZnMkY2xvc2UpIHtcbiAgICBmdW5jdGlvbiBjbG9zZSAoZmQsIGNiKSB7XG4gICAgICByZXR1cm4gZnMkY2xvc2UuY2FsbChmcywgZmQsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBncmFjZWZ1bC1mcyBzaGFyZWQgcXVldWVcbiAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICByZXNldFF1ZXVlKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2xvc2UsIHByZXZpb3VzU3ltYm9sLCB7XG4gICAgICB2YWx1ZTogZnMkY2xvc2VcbiAgICB9KVxuICAgIHJldHVybiBjbG9zZVxuICB9KShmcy5jbG9zZSlcblxuICBmcy5jbG9zZVN5bmMgPSAoZnVuY3Rpb24gKGZzJGNsb3NlU3luYykge1xuICAgIGZ1bmN0aW9uIGNsb3NlU3luYyAoZmQpIHtcbiAgICAgIC8vIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgZ3JhY2VmdWwtZnMgc2hhcmVkIHF1ZXVlXG4gICAgICBmcyRjbG9zZVN5bmMuYXBwbHkoZnMsIGFyZ3VtZW50cylcbiAgICAgIHJlc2V0UXVldWUoKVxuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbG9zZVN5bmMsIHByZXZpb3VzU3ltYm9sLCB7XG4gICAgICB2YWx1ZTogZnMkY2xvc2VTeW5jXG4gICAgfSlcbiAgICByZXR1cm4gY2xvc2VTeW5jXG4gIH0pKGZzLmNsb3NlU3luYylcblxuICBpZiAoL1xcYmdmczRcXGIvaS50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcgfHwgJycpKSB7XG4gICAgcHJvY2Vzcy5vbignZXhpdCcsIGZ1bmN0aW9uKCkge1xuICAgICAgZGVidWcoZnNbZ3JhY2VmdWxRdWV1ZV0pXG4gICAgICByZXF1aXJlKCdhc3NlcnQnKS5lcXVhbChmc1tncmFjZWZ1bFF1ZXVlXS5sZW5ndGgsIDApXG4gICAgfSlcbiAgfVxufVxuXG5pZiAoIWdsb2JhbFtncmFjZWZ1bFF1ZXVlXSkge1xuICBwdWJsaXNoUXVldWUoZ2xvYmFsLCBmc1tncmFjZWZ1bFF1ZXVlXSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2goY2xvbmUoZnMpKVxuaWYgKHByb2Nlc3MuZW52LlRFU1RfR1JBQ0VGVUxfRlNfR0xPQkFMX1BBVENIICYmICFmcy5fX3BhdGNoZWQpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHBhdGNoKGZzKVxuICAgIGZzLl9fcGF0Y2hlZCA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIHBhdGNoIChmcykge1xuICAvLyBFdmVyeXRoaW5nIHRoYXQgcmVmZXJlbmNlcyB0aGUgb3BlbigpIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGluIGhlcmVcbiAgcG9seWZpbGxzKGZzKVxuICBmcy5ncmFjZWZ1bGlmeSA9IHBhdGNoXG5cbiAgZnMuY3JlYXRlUmVhZFN0cmVhbSA9IGNyZWF0ZVJlYWRTdHJlYW1cbiAgZnMuY3JlYXRlV3JpdGVTdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbVxuICB2YXIgZnMkcmVhZEZpbGUgPSBmcy5yZWFkRmlsZVxuICBmcy5yZWFkRmlsZSA9IHJlYWRGaWxlXG4gIGZ1bmN0aW9uIHJlYWRGaWxlIChwYXRoLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHJldHVybiBnbyRyZWFkRmlsZShwYXRoLCBvcHRpb25zLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJHJlYWRGaWxlIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkcmVhZEZpbGUocGF0aCwgb3B0aW9ucywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRyZWFkRmlsZSwgW3BhdGgsIG9wdGlvbnMsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJHdyaXRlRmlsZSA9IGZzLndyaXRlRmlsZVxuICBmcy53cml0ZUZpbGUgPSB3cml0ZUZpbGVcbiAgZnVuY3Rpb24gd3JpdGVGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHJldHVybiBnbyR3cml0ZUZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyR3cml0ZUZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyR3cml0ZUZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyR3cml0ZUZpbGUsIFtwYXRoLCBkYXRhLCBvcHRpb25zLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcyRhcHBlbmRGaWxlID0gZnMuYXBwZW5kRmlsZVxuICBpZiAoZnMkYXBwZW5kRmlsZSlcbiAgICBmcy5hcHBlbmRGaWxlID0gYXBwZW5kRmlsZVxuICBmdW5jdGlvbiBhcHBlbmRGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHJldHVybiBnbyRhcHBlbmRGaWxlKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kYXBwZW5kRmlsZSAocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJGFwcGVuZEZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRhcHBlbmRGaWxlLCBbcGF0aCwgZGF0YSwgb3B0aW9ucywgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgZnMkY29weUZpbGUgPSBmcy5jb3B5RmlsZVxuICBpZiAoZnMkY29weUZpbGUpXG4gICAgZnMuY29weUZpbGUgPSBjb3B5RmlsZVxuICBmdW5jdGlvbiBjb3B5RmlsZSAoc3JjLCBkZXN0LCBmbGFncywgY2IpIHtcbiAgICBpZiAodHlwZW9mIGZsYWdzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYiA9IGZsYWdzXG4gICAgICBmbGFncyA9IDBcbiAgICB9XG4gICAgcmV0dXJuIGdvJGNvcHlGaWxlKHNyYywgZGVzdCwgZmxhZ3MsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kY29weUZpbGUgKHNyYywgZGVzdCwgZmxhZ3MsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyRjb3B5RmlsZShzcmMsIGRlc3QsIGZsYWdzLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJGNvcHlGaWxlLCBbc3JjLCBkZXN0LCBmbGFncywgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgZnMkcmVhZGRpciA9IGZzLnJlYWRkaXJcbiAgZnMucmVhZGRpciA9IHJlYWRkaXJcbiAgdmFyIG5vUmVhZGRpck9wdGlvblZlcnNpb25zID0gL152WzAtNV1cXC4vXG4gIGZ1bmN0aW9uIHJlYWRkaXIgKHBhdGgsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgdmFyIGdvJHJlYWRkaXIgPSBub1JlYWRkaXJPcHRpb25WZXJzaW9ucy50ZXN0KHByb2Nlc3MudmVyc2lvbilcbiAgICAgID8gZnVuY3Rpb24gZ28kcmVhZGRpciAocGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgICByZXR1cm4gZnMkcmVhZGRpcihwYXRoLCBmcyRyZWFkZGlyQ2FsbGJhY2soXG4gICAgICAgICAgcGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZVxuICAgICAgICApKVxuICAgICAgfVxuICAgICAgOiBmdW5jdGlvbiBnbyRyZWFkZGlyIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICAgIHJldHVybiBmcyRyZWFkZGlyKHBhdGgsIG9wdGlvbnMsIGZzJHJlYWRkaXJDYWxsYmFjayhcbiAgICAgICAgICBwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lXG4gICAgICAgICkpXG4gICAgICB9XG5cbiAgICByZXR1cm4gZ28kcmVhZGRpcihwYXRoLCBvcHRpb25zLCBjYilcblxuICAgIGZ1bmN0aW9uIGZzJHJlYWRkaXJDYWxsYmFjayAocGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIsIGZpbGVzKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW1xuICAgICAgICAgICAgZ28kcmVhZGRpcixcbiAgICAgICAgICAgIFtwYXRoLCBvcHRpb25zLCBjYl0sXG4gICAgICAgICAgICBlcnIsXG4gICAgICAgICAgICBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIERhdGUubm93KClcbiAgICAgICAgICBdKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAoZmlsZXMgJiYgZmlsZXMuc29ydClcbiAgICAgICAgICAgIGZpbGVzLnNvcnQoKVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmNhbGwodGhpcywgZXJyLCBmaWxlcylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9jZXNzLnZlcnNpb24uc3Vic3RyKDAsIDQpID09PSAndjAuOCcpIHtcbiAgICB2YXIgbGVnU3RyZWFtcyA9IGxlZ2FjeShmcylcbiAgICBSZWFkU3RyZWFtID0gbGVnU3RyZWFtcy5SZWFkU3RyZWFtXG4gICAgV3JpdGVTdHJlYW0gPSBsZWdTdHJlYW1zLldyaXRlU3RyZWFtXG4gIH1cblxuICB2YXIgZnMkUmVhZFN0cmVhbSA9IGZzLlJlYWRTdHJlYW1cbiAgaWYgKGZzJFJlYWRTdHJlYW0pIHtcbiAgICBSZWFkU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZnMkUmVhZFN0cmVhbS5wcm90b3R5cGUpXG4gICAgUmVhZFN0cmVhbS5wcm90b3R5cGUub3BlbiA9IFJlYWRTdHJlYW0kb3BlblxuICB9XG5cbiAgdmFyIGZzJFdyaXRlU3RyZWFtID0gZnMuV3JpdGVTdHJlYW1cbiAgaWYgKGZzJFdyaXRlU3RyZWFtKSB7XG4gICAgV3JpdGVTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShmcyRXcml0ZVN0cmVhbS5wcm90b3R5cGUpXG4gICAgV3JpdGVTdHJlYW0ucHJvdG90eXBlLm9wZW4gPSBXcml0ZVN0cmVhbSRvcGVuXG4gIH1cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdSZWFkU3RyZWFtJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFJlYWRTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgUmVhZFN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZzLCAnV3JpdGVTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gV3JpdGVTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgV3JpdGVTdHJlYW0gPSB2YWxcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG5cbiAgLy8gbGVnYWN5IG5hbWVzXG4gIHZhciBGaWxlUmVhZFN0cmVhbSA9IFJlYWRTdHJlYW1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZzLCAnRmlsZVJlYWRTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gRmlsZVJlYWRTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgRmlsZVJlYWRTdHJlYW0gPSB2YWxcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG4gIHZhciBGaWxlV3JpdGVTdHJlYW0gPSBXcml0ZVN0cmVhbVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdGaWxlV3JpdGVTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gRmlsZVdyaXRlU3RyZWFtXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIEZpbGVXcml0ZVN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcblxuICBmdW5jdGlvbiBSZWFkU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBSZWFkU3RyZWFtKVxuICAgICAgcmV0dXJuIGZzJFJlYWRTdHJlYW0uYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdGhpc1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBSZWFkU3RyZWFtLmFwcGx5KE9iamVjdC5jcmVhdGUoUmVhZFN0cmVhbS5wcm90b3R5cGUpLCBhcmd1bWVudHMpXG4gIH1cblxuICBmdW5jdGlvbiBSZWFkU3RyZWFtJG9wZW4gKCkge1xuICAgIHZhciB0aGF0ID0gdGhpc1xuICAgIG9wZW4odGhhdC5wYXRoLCB0aGF0LmZsYWdzLCB0aGF0Lm1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGF0LmF1dG9DbG9zZSlcbiAgICAgICAgICB0aGF0LmRlc3Ryb3koKVxuXG4gICAgICAgIHRoYXQuZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGF0LmZkID0gZmRcbiAgICAgICAgdGhhdC5lbWl0KCdvcGVuJywgZmQpXG4gICAgICAgIHRoYXQucmVhZCgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIFdyaXRlU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBXcml0ZVN0cmVhbSlcbiAgICAgIHJldHVybiBmcyRXcml0ZVN0cmVhbS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0aGlzXG4gICAgZWxzZVxuICAgICAgcmV0dXJuIFdyaXRlU3RyZWFtLmFwcGx5KE9iamVjdC5jcmVhdGUoV3JpdGVTdHJlYW0ucHJvdG90eXBlKSwgYXJndW1lbnRzKVxuICB9XG5cbiAgZnVuY3Rpb24gV3JpdGVTdHJlYW0kb3BlbiAoKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzXG4gICAgb3Blbih0aGF0LnBhdGgsIHRoYXQuZmxhZ3MsIHRoYXQubW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgdGhhdC5kZXN0cm95KClcbiAgICAgICAgdGhhdC5lbWl0KCdlcnJvcicsIGVycilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoYXQuZmQgPSBmZFxuICAgICAgICB0aGF0LmVtaXQoJ29wZW4nLCBmZClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUmVhZFN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgZnMuUmVhZFN0cmVhbShwYXRoLCBvcHRpb25zKVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlV3JpdGVTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IGZzLldyaXRlU3RyZWFtKHBhdGgsIG9wdGlvbnMpXG4gIH1cblxuICB2YXIgZnMkb3BlbiA9IGZzLm9wZW5cbiAgZnMub3BlbiA9IG9wZW5cbiAgZnVuY3Rpb24gb3BlbiAocGF0aCwgZmxhZ3MsIG1vZGUsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBtb2RlID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBtb2RlLCBtb2RlID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJG9wZW4ocGF0aCwgZmxhZ3MsIG1vZGUsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kb3BlbiAocGF0aCwgZmxhZ3MsIG1vZGUsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyRvcGVuKHBhdGgsIGZsYWdzLCBtb2RlLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRvcGVuLCBbcGF0aCwgZmxhZ3MsIG1vZGUsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZzXG59XG5cbmZ1bmN0aW9uIGVucXVldWUgKGVsZW0pIHtcbiAgZGVidWcoJ0VOUVVFVUUnLCBlbGVtWzBdLm5hbWUsIGVsZW1bMV0pXG4gIGZzW2dyYWNlZnVsUXVldWVdLnB1c2goZWxlbSlcbiAgcmV0cnkoKVxufVxuXG4vLyBrZWVwIHRyYWNrIG9mIHRoZSB0aW1lb3V0IGJldHdlZW4gcmV0cnkoKSBjYWxsc1xudmFyIHJldHJ5VGltZXJcblxuLy8gcmVzZXQgdGhlIHN0YXJ0VGltZSBhbmQgbGFzdFRpbWUgdG8gbm93XG4vLyB0aGlzIHJlc2V0cyB0aGUgc3RhcnQgb2YgdGhlIDYwIHNlY29uZCBvdmVyYWxsIHRpbWVvdXQgYXMgd2VsbCBhcyB0aGVcbi8vIGRlbGF5IGJldHdlZW4gYXR0ZW1wdHMgc28gdGhhdCB3ZSdsbCByZXRyeSB0aGVzZSBqb2JzIHNvb25lclxuZnVuY3Rpb24gcmVzZXRRdWV1ZSAoKSB7XG4gIHZhciBub3cgPSBEYXRlLm5vdygpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZnNbZ3JhY2VmdWxRdWV1ZV0ubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBlbnRyaWVzIHRoYXQgYXJlIG9ubHkgYSBsZW5ndGggb2YgMiBhcmUgZnJvbSBhbiBvbGRlciB2ZXJzaW9uLCBkb24ndFxuICAgIC8vIGJvdGhlciBtb2RpZnlpbmcgdGhvc2Ugc2luY2UgdGhleSdsbCBiZSByZXRyaWVkIGFueXdheS5cbiAgICBpZiAoZnNbZ3JhY2VmdWxRdWV1ZV1baV0ubGVuZ3RoID4gMikge1xuICAgICAgZnNbZ3JhY2VmdWxRdWV1ZV1baV1bM10gPSBub3cgLy8gc3RhcnRUaW1lXG4gICAgICBmc1tncmFjZWZ1bFF1ZXVlXVtpXVs0XSA9IG5vdyAvLyBsYXN0VGltZVxuICAgIH1cbiAgfVxuICAvLyBjYWxsIHJldHJ5IHRvIG1ha2Ugc3VyZSB3ZSdyZSBhY3RpdmVseSBwcm9jZXNzaW5nIHRoZSBxdWV1ZVxuICByZXRyeSgpXG59XG5cbmZ1bmN0aW9uIHJldHJ5ICgpIHtcbiAgLy8gY2xlYXIgdGhlIHRpbWVyIGFuZCByZW1vdmUgaXQgdG8gaGVscCBwcmV2ZW50IHVuaW50ZW5kZWQgY29uY3VycmVuY3lcbiAgY2xlYXJUaW1lb3V0KHJldHJ5VGltZXIpXG4gIHJldHJ5VGltZXIgPSB1bmRlZmluZWRcblxuICBpZiAoZnNbZ3JhY2VmdWxRdWV1ZV0ubGVuZ3RoID09PSAwKVxuICAgIHJldHVyblxuXG4gIHZhciBlbGVtID0gZnNbZ3JhY2VmdWxRdWV1ZV0uc2hpZnQoKVxuICB2YXIgZm4gPSBlbGVtWzBdXG4gIHZhciBhcmdzID0gZWxlbVsxXVxuICAvLyB0aGVzZSBpdGVtcyBtYXkgYmUgdW5zZXQgaWYgdGhleSB3ZXJlIGFkZGVkIGJ5IGFuIG9sZGVyIGdyYWNlZnVsLWZzXG4gIHZhciBlcnIgPSBlbGVtWzJdXG4gIHZhciBzdGFydFRpbWUgPSBlbGVtWzNdXG4gIHZhciBsYXN0VGltZSA9IGVsZW1bNF1cblxuICAvLyBpZiB3ZSBkb24ndCBoYXZlIGEgc3RhcnRUaW1lIHdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgaWYgd2UndmUgd2FpdGVkXG4gIC8vIGxvbmcgZW5vdWdoLCBzbyBnbyBhaGVhZCBhbmQgcmV0cnkgdGhpcyBpdGVtIG5vd1xuICBpZiAoc3RhcnRUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICBkZWJ1ZygnUkVUUlknLCBmbi5uYW1lLCBhcmdzKVxuICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpXG4gIH0gZWxzZSBpZiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA+PSA2MDAwMCkge1xuICAgIC8vIGl0J3MgYmVlbiBtb3JlIHRoYW4gNjAgc2Vjb25kcyB0b3RhbCwgYmFpbCBub3dcbiAgICBkZWJ1ZygnVElNRU9VVCcsIGZuLm5hbWUsIGFyZ3MpXG4gICAgdmFyIGNiID0gYXJncy5wb3AoKVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYi5jYWxsKG51bGwsIGVycilcbiAgfSBlbHNlIHtcbiAgICAvLyB0aGUgYW1vdW50IG9mIHRpbWUgYmV0d2VlbiB0aGUgbGFzdCBhdHRlbXB0IGFuZCByaWdodCBub3dcbiAgICB2YXIgc2luY2VBdHRlbXB0ID0gRGF0ZS5ub3coKSAtIGxhc3RUaW1lXG4gICAgLy8gdGhlIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gd2hlbiB3ZSBmaXJzdCB0cmllZCwgYW5kIHdoZW4gd2UgbGFzdCB0cmllZFxuICAgIC8vIHJvdW5kZWQgdXAgdG8gYXQgbGVhc3QgMVxuICAgIHZhciBzaW5jZVN0YXJ0ID0gTWF0aC5tYXgobGFzdFRpbWUgLSBzdGFydFRpbWUsIDEpXG4gICAgLy8gYmFja29mZi4gd2FpdCBsb25nZXIgdGhhbiB0aGUgdG90YWwgdGltZSB3ZSd2ZSBiZWVuIHJldHJ5aW5nLCBidXQgb25seVxuICAgIC8vIHVwIHRvIGEgbWF4aW11bSBvZiAxMDBtc1xuICAgIHZhciBkZXNpcmVkRGVsYXkgPSBNYXRoLm1pbihzaW5jZVN0YXJ0ICogMS4yLCAxMDApXG4gICAgLy8gaXQncyBiZWVuIGxvbmcgZW5vdWdoIHNpbmNlIHRoZSBsYXN0IHJldHJ5LCBkbyBpdCBhZ2FpblxuICAgIGlmIChzaW5jZUF0dGVtcHQgPj0gZGVzaXJlZERlbGF5KSB7XG4gICAgICBkZWJ1ZygnUkVUUlknLCBmbi5uYW1lLCBhcmdzKVxuICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW3N0YXJ0VGltZV0pKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiB3ZSBjYW4ndCBkbyB0aGlzIGpvYiB5ZXQsIHB1c2ggaXQgdG8gdGhlIGVuZCBvZiB0aGUgcXVldWVcbiAgICAgIC8vIGFuZCBsZXQgdGhlIG5leHQgaXRlcmF0aW9uIGNoZWNrIGFnYWluXG4gICAgICBmc1tncmFjZWZ1bFF1ZXVlXS5wdXNoKGVsZW0pXG4gICAgfVxuICB9XG5cbiAgLy8gc2NoZWR1bGUgb3VyIG5leHQgcnVuIGlmIG9uZSBpc24ndCBhbHJlYWR5IHNjaGVkdWxlZFxuICBpZiAocmV0cnlUaW1lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0cnlUaW1lciA9IHNldFRpbWVvdXQocmV0cnksIDApXG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcbi8vIFRoaXMgaXMgYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ub3JtYWxpemUvbXpcbi8vIENvcHlyaWdodCAoYykgMjAxNC0yMDE2IEpvbmF0aGFuIE9uZyBtZUBqb25nbGViZXJyeS5jb20gYW5kIENvbnRyaWJ1dG9yc1xuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5cbmNvbnN0IGFwaSA9IFtcbiAgJ2FjY2VzcycsXG4gICdhcHBlbmRGaWxlJyxcbiAgJ2NobW9kJyxcbiAgJ2Nob3duJyxcbiAgJ2Nsb3NlJyxcbiAgJ2NvcHlGaWxlJyxcbiAgJ2ZjaG1vZCcsXG4gICdmY2hvd24nLFxuICAnZmRhdGFzeW5jJyxcbiAgJ2ZzdGF0JyxcbiAgJ2ZzeW5jJyxcbiAgJ2Z0cnVuY2F0ZScsXG4gICdmdXRpbWVzJyxcbiAgJ2xjaG1vZCcsXG4gICdsY2hvd24nLFxuICAnbGluaycsXG4gICdsc3RhdCcsXG4gICdta2RpcicsXG4gICdta2R0ZW1wJyxcbiAgJ29wZW4nLFxuICAnb3BlbmRpcicsXG4gICdyZWFkZGlyJyxcbiAgJ3JlYWRGaWxlJyxcbiAgJ3JlYWRsaW5rJyxcbiAgJ3JlYWxwYXRoJyxcbiAgJ3JlbmFtZScsXG4gICdybScsXG4gICdybWRpcicsXG4gICdzdGF0JyxcbiAgJ3N5bWxpbmsnLFxuICAndHJ1bmNhdGUnLFxuICAndW5saW5rJyxcbiAgJ3V0aW1lcycsXG4gICd3cml0ZUZpbGUnXG5dLmZpbHRlcihrZXkgPT4ge1xuICAvLyBTb21lIGNvbW1hbmRzIGFyZSBub3QgYXZhaWxhYmxlIG9uIHNvbWUgc3lzdGVtcy4gRXg6XG4gIC8vIGZzLm9wZW5kaXIgd2FzIGFkZGVkIGluIE5vZGUuanMgdjEyLjEyLjBcbiAgLy8gZnMucm0gd2FzIGFkZGVkIGluIE5vZGUuanMgdjE0LjE0LjBcbiAgLy8gZnMubGNob3duIGlzIG5vdCBhdmFpbGFibGUgb24gYXQgbGVhc3Qgc29tZSBMaW51eFxuICByZXR1cm4gdHlwZW9mIGZzW2tleV0gPT09ICdmdW5jdGlvbidcbn0pXG5cbi8vIEV4cG9ydCBhbGwga2V5czpcbk9iamVjdC5rZXlzKGZzKS5mb3JFYWNoKGtleSA9PiB7XG4gIGlmIChrZXkgPT09ICdwcm9taXNlcycpIHtcbiAgICAvLyBmcy5wcm9taXNlcyBpcyBhIGdldHRlciBwcm9wZXJ0eSB0aGF0IHRyaWdnZXJzIEV4cGVyaW1lbnRhbFdhcm5pbmdcbiAgICAvLyBEb24ndCByZS1leHBvcnQgaXQgaGVyZSwgdGhlIGdldHRlciBpcyBkZWZpbmVkIGluIFwibGliL2luZGV4LmpzXCJcbiAgICByZXR1cm5cbiAgfVxuICBleHBvcnRzW2tleV0gPSBmc1trZXldXG59KVxuXG4vLyBVbml2ZXJzYWxpZnkgYXN5bmMgbWV0aG9kczpcbmFwaS5mb3JFYWNoKG1ldGhvZCA9PiB7XG4gIGV4cG9ydHNbbWV0aG9kXSA9IHUoZnNbbWV0aG9kXSlcbn0pXG5cbi8vIFdlIGRpZmZlciBmcm9tIG16L2ZzIGluIHRoYXQgd2Ugc3RpbGwgc2hpcCB0aGUgb2xkLCBicm9rZW4sIGZzLmV4aXN0cygpXG4vLyBzaW5jZSB3ZSBhcmUgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciB0aGUgbmF0aXZlIG1vZHVsZVxuZXhwb3J0cy5leGlzdHMgPSBmdW5jdGlvbiAoZmlsZW5hbWUsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZnMuZXhpc3RzKGZpbGVuYW1lLCBjYWxsYmFjaylcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgcmV0dXJuIGZzLmV4aXN0cyhmaWxlbmFtZSwgcmVzb2x2ZSlcbiAgfSlcbn1cblxuLy8gZnMucmVhZCgpLCBmcy53cml0ZSgpLCAmIGZzLndyaXRldigpIG5lZWQgc3BlY2lhbCB0cmVhdG1lbnQgZHVlIHRvIG11bHRpcGxlIGNhbGxiYWNrIGFyZ3NcblxuZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmcy5yZWFkKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spXG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBmcy5yZWFkKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgKGVyciwgYnl0ZXNSZWFkLCBidWZmZXIpID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKVxuICAgICAgcmVzb2x2ZSh7IGJ5dGVzUmVhZCwgYnVmZmVyIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuLy8gRnVuY3Rpb24gc2lnbmF0dXJlIGNhbiBiZVxuLy8gZnMud3JpdGUoZmQsIGJ1ZmZlclssIG9mZnNldFssIGxlbmd0aFssIHBvc2l0aW9uXV1dLCBjYWxsYmFjaylcbi8vIE9SXG4vLyBmcy53cml0ZShmZCwgc3RyaW5nWywgcG9zaXRpb25bLCBlbmNvZGluZ11dLCBjYWxsYmFjaylcbi8vIFdlIG5lZWQgdG8gaGFuZGxlIGJvdGggY2FzZXMsIHNvIHdlIHVzZSAuLi5hcmdzXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGZkLCBidWZmZXIsIC4uLmFyZ3MpIHtcbiAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZnMud3JpdGUoZmQsIGJ1ZmZlciwgLi4uYXJncylcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZnMud3JpdGUoZmQsIGJ1ZmZlciwgLi4uYXJncywgKGVyciwgYnl0ZXNXcml0dGVuLCBidWZmZXIpID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKVxuICAgICAgcmVzb2x2ZSh7IGJ5dGVzV3JpdHRlbiwgYnVmZmVyIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuLy8gZnMud3JpdGV2IG9ubHkgYXZhaWxhYmxlIGluIE5vZGUgdjEyLjkuMCtcbmlmICh0eXBlb2YgZnMud3JpdGV2ID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIEZ1bmN0aW9uIHNpZ25hdHVyZSBpc1xuICAvLyBzLndyaXRldihmZCwgYnVmZmVyc1ssIHBvc2l0aW9uXSwgY2FsbGJhY2spXG4gIC8vIFdlIG5lZWQgdG8gaGFuZGxlIHRoZSBvcHRpb25hbCBhcmcsIHNvIHdlIHVzZSAuLi5hcmdzXG4gIGV4cG9ydHMud3JpdGV2ID0gZnVuY3Rpb24gKGZkLCBidWZmZXJzLCAuLi5hcmdzKSB7XG4gICAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBmcy53cml0ZXYoZmQsIGJ1ZmZlcnMsIC4uLmFyZ3MpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGZzLndyaXRldihmZCwgYnVmZmVycywgLi4uYXJncywgKGVyciwgYnl0ZXNXcml0dGVuLCBidWZmZXJzKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKVxuICAgICAgICByZXNvbHZlKHsgYnl0ZXNXcml0dGVuLCBidWZmZXJzIH0pXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cblxuLy8gZnMucmVhbHBhdGgubmF0aXZlIG9ubHkgYXZhaWxhYmxlIGluIE5vZGUgdjkuMitcbmlmICh0eXBlb2YgZnMucmVhbHBhdGgubmF0aXZlID09PSAnZnVuY3Rpb24nKSB7XG4gIGV4cG9ydHMucmVhbHBhdGgubmF0aXZlID0gdShmcy5yZWFscGF0aC5uYXRpdmUpXG59XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByID0+IHtcbiAgY29uc3QgbiA9IHByb2Nlc3MudmVyc2lvbnMubm9kZS5zcGxpdCgnLicpLm1hcCh4ID0+IHBhcnNlSW50KHgsIDEwKSlcbiAgciA9IHIuc3BsaXQoJy4nKS5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpXG4gIHJldHVybiBuWzBdID4gclswXSB8fCAoblswXSA9PT0gclswXSAmJiAoblsxXSA+IHJbMV0gfHwgKG5bMV0gPT09IHJbMV0gJiYgblsyXSA+PSByWzJdKSkpXG59XG4iLCAiLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvbWFrZS1kaXJcbi8vIENvcHlyaWdodCAoYykgU2luZHJlIFNvcmh1cyA8c2luZHJlc29yaHVzQGdtYWlsLmNvbT4gKHNpbmRyZXNvcmh1cy5jb20pXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbid1c2Ugc3RyaWN0J1xuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBhdExlYXN0Tm9kZSA9IHJlcXVpcmUoJ2F0LWxlYXN0LW5vZGUnKVxuXG5jb25zdCB1c2VOYXRpdmVSZWN1cnNpdmVPcHRpb24gPSBhdExlYXN0Tm9kZSgnMTAuMTIuMCcpXG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvODk4N1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2xpYnV2L2xpYnV2L3B1bGwvMTA4OFxuY29uc3QgY2hlY2tQYXRoID0gcHRoID0+IHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICBjb25zdCBwYXRoSGFzSW52YWxpZFdpbkNoYXJhY3RlcnMgPSAvWzw+OlwifD8qXS8udGVzdChwdGgucmVwbGFjZShwYXRoLnBhcnNlKHB0aCkucm9vdCwgJycpKVxuXG4gICAgaWYgKHBhdGhIYXNJbnZhbGlkV2luQ2hhcmFjdGVycykge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYFBhdGggY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzOiAke3B0aH1gKVxuICAgICAgZXJyb3IuY29kZSA9ICdFSU5WQUwnXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBwcm9jZXNzT3B0aW9ucyA9IG9wdGlvbnMgPT4ge1xuICBjb25zdCBkZWZhdWx0cyA9IHsgbW9kZTogMG83NzcgfVxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdudW1iZXInKSBvcHRpb25zID0geyBtb2RlOiBvcHRpb25zIH1cbiAgcmV0dXJuIHsgLi4uZGVmYXVsdHMsIC4uLm9wdGlvbnMgfVxufVxuXG5jb25zdCBwZXJtaXNzaW9uRXJyb3IgPSBwdGggPT4ge1xuICAvLyBUaGlzIHJlcGxpY2F0ZXMgdGhlIGV4Y2VwdGlvbiBvZiBgZnMubWtkaXJgIHdpdGggbmF0aXZlIHRoZVxuICAvLyBgcmVjdXNpdmVgIG9wdGlvbiB3aGVuIHJ1biBvbiBhbiBpbnZhbGlkIGRyaXZlIHVuZGVyIFdpbmRvd3MuXG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGBvcGVyYXRpb24gbm90IHBlcm1pdHRlZCwgbWtkaXIgJyR7cHRofSdgKVxuICBlcnJvci5jb2RlID0gJ0VQRVJNJ1xuICBlcnJvci5lcnJubyA9IC00MDQ4XG4gIGVycm9yLnBhdGggPSBwdGhcbiAgZXJyb3Iuc3lzY2FsbCA9ICdta2RpcidcbiAgcmV0dXJuIGVycm9yXG59XG5cbm1vZHVsZS5leHBvcnRzLm1ha2VEaXIgPSBhc3luYyAoaW5wdXQsIG9wdGlvbnMpID0+IHtcbiAgY2hlY2tQYXRoKGlucHV0KVxuICBvcHRpb25zID0gcHJvY2Vzc09wdGlvbnMob3B0aW9ucylcblxuICBpZiAodXNlTmF0aXZlUmVjdXJzaXZlT3B0aW9uKSB7XG4gICAgY29uc3QgcHRoID0gcGF0aC5yZXNvbHZlKGlucHV0KVxuXG4gICAgcmV0dXJuIGZzLm1rZGlyKHB0aCwge1xuICAgICAgbW9kZTogb3B0aW9ucy5tb2RlLFxuICAgICAgcmVjdXJzaXZlOiB0cnVlXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IG1ha2UgPSBhc3luYyBwdGggPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5ta2RpcihwdGgsIG9wdGlvbnMubW9kZSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yLmNvZGUgPT09ICdFUEVSTScpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGlmIChwYXRoLmRpcm5hbWUocHRoKSA9PT0gcHRoKSB7XG4gICAgICAgICAgdGhyb3cgcGVybWlzc2lvbkVycm9yKHB0aClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdudWxsIGJ5dGVzJykpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgbWFrZShwYXRoLmRpcm5hbWUocHRoKSlcbiAgICAgICAgcmV0dXJuIG1ha2UocHRoKVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGZzLnN0YXQocHRoKVxuICAgICAgICBpZiAoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAvLyBUaGlzIGVycm9yIGlzIG5ldmVyIGV4cG9zZWQgdG8gdGhlIHVzZXJcbiAgICAgICAgICAvLyBpdCBpcyBjYXVnaHQgYmVsb3csIGFuZCB0aGUgb3JpZ2luYWwgZXJyb3IgaXMgdGhyb3duXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcGF0aCBpcyBub3QgYSBkaXJlY3RvcnknKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWFrZShwYXRoLnJlc29sdmUoaW5wdXQpKVxufVxuXG5tb2R1bGUuZXhwb3J0cy5tYWtlRGlyU3luYyA9IChpbnB1dCwgb3B0aW9ucykgPT4ge1xuICBjaGVja1BhdGgoaW5wdXQpXG4gIG9wdGlvbnMgPSBwcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXG4gIGlmICh1c2VOYXRpdmVSZWN1cnNpdmVPcHRpb24pIHtcbiAgICBjb25zdCBwdGggPSBwYXRoLnJlc29sdmUoaW5wdXQpXG5cbiAgICByZXR1cm4gZnMubWtkaXJTeW5jKHB0aCwge1xuICAgICAgbW9kZTogb3B0aW9ucy5tb2RlLFxuICAgICAgcmVjdXJzaXZlOiB0cnVlXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IG1ha2UgPSBwdGggPT4ge1xuICAgIHRyeSB7XG4gICAgICBmcy5ta2RpclN5bmMocHRoLCBvcHRpb25zLm1vZGUpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRVBFUk0nKSB7XG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG5cbiAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICBpZiAocGF0aC5kaXJuYW1lKHB0aCkgPT09IHB0aCkge1xuICAgICAgICAgIHRocm93IHBlcm1pc3Npb25FcnJvcihwdGgpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnbnVsbCBieXRlcycpKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuXG4gICAgICAgIG1ha2UocGF0aC5kaXJuYW1lKHB0aCkpXG4gICAgICAgIHJldHVybiBtYWtlKHB0aClcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFmcy5zdGF0U3luYyhwdGgpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAvLyBUaGlzIGVycm9yIGlzIG5ldmVyIGV4cG9zZWQgdG8gdGhlIHVzZXJcbiAgICAgICAgICAvLyBpdCBpcyBjYXVnaHQgYmVsb3csIGFuZCB0aGUgb3JpZ2luYWwgZXJyb3IgaXMgdGhyb3duXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcGF0aCBpcyBub3QgYSBkaXJlY3RvcnknKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWFrZShwYXRoLnJlc29sdmUoaW5wdXQpKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCB7IG1ha2VEaXI6IF9tYWtlRGlyLCBtYWtlRGlyU3luYyB9ID0gcmVxdWlyZSgnLi9tYWtlLWRpcicpXG5jb25zdCBtYWtlRGlyID0gdShfbWFrZURpcilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1rZGlyczogbWFrZURpcixcbiAgbWtkaXJzU3luYzogbWFrZURpclN5bmMsXG4gIC8vIGFsaWFzXG4gIG1rZGlycDogbWFrZURpcixcbiAgbWtkaXJwU3luYzogbWFrZURpclN5bmMsXG4gIGVuc3VyZURpcjogbWFrZURpcixcbiAgZW5zdXJlRGlyU3luYzogbWFrZURpclN5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5cbmZ1bmN0aW9uIHV0aW1lc01pbGxpcyAocGF0aCwgYXRpbWUsIG10aW1lLCBjYWxsYmFjaykge1xuICAvLyBpZiAoIUhBU19NSUxMSVNfUkVTKSByZXR1cm4gZnMudXRpbWVzKHBhdGgsIGF0aW1lLCBtdGltZSwgY2FsbGJhY2spXG4gIGZzLm9wZW4ocGF0aCwgJ3IrJywgKGVyciwgZmQpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgIGZzLmZ1dGltZXMoZmQsIGF0aW1lLCBtdGltZSwgZnV0aW1lc0VyciA9PiB7XG4gICAgICBmcy5jbG9zZShmZCwgY2xvc2VFcnIgPT4ge1xuICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGZ1dGltZXNFcnIgfHwgY2xvc2VFcnIpXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHV0aW1lc01pbGxpc1N5bmMgKHBhdGgsIGF0aW1lLCBtdGltZSkge1xuICBjb25zdCBmZCA9IGZzLm9wZW5TeW5jKHBhdGgsICdyKycpXG4gIGZzLmZ1dGltZXNTeW5jKGZkLCBhdGltZSwgbXRpbWUpXG4gIHJldHVybiBmcy5jbG9zZVN5bmMoZmQpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB1dGltZXNNaWxsaXMsXG4gIHV0aW1lc01pbGxpc1N5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCBhdExlYXN0Tm9kZSA9IHJlcXVpcmUoJ2F0LWxlYXN0LW5vZGUnKVxuXG5jb25zdCBub2RlU3VwcG9ydHNCaWdJbnQgPSBhdExlYXN0Tm9kZSgnMTAuNS4wJylcbmNvbnN0IHN0YXQgPSAoZmlsZSkgPT4gbm9kZVN1cHBvcnRzQmlnSW50ID8gZnMuc3RhdChmaWxlLCB7IGJpZ2ludDogdHJ1ZSB9KSA6IGZzLnN0YXQoZmlsZSlcbmNvbnN0IHN0YXRTeW5jID0gKGZpbGUpID0+IG5vZGVTdXBwb3J0c0JpZ0ludCA/IGZzLnN0YXRTeW5jKGZpbGUsIHsgYmlnaW50OiB0cnVlIH0pIDogZnMuc3RhdFN5bmMoZmlsZSlcblxuZnVuY3Rpb24gZ2V0U3RhdHMgKHNyYywgZGVzdCkge1xuICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgIHN0YXQoc3JjKSxcbiAgICBzdGF0KGRlc3QpLmNhdGNoKGVyciA9PiB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSByZXR1cm4gbnVsbFxuICAgICAgdGhyb3cgZXJyXG4gICAgfSlcbiAgXSkudGhlbigoW3NyY1N0YXQsIGRlc3RTdGF0XSkgPT4gKHsgc3JjU3RhdCwgZGVzdFN0YXQgfSkpXG59XG5cbmZ1bmN0aW9uIGdldFN0YXRzU3luYyAoc3JjLCBkZXN0KSB7XG4gIGxldCBkZXN0U3RhdFxuICBjb25zdCBzcmNTdGF0ID0gc3RhdFN5bmMoc3JjKVxuICB0cnkge1xuICAgIGRlc3RTdGF0ID0gc3RhdFN5bmMoZGVzdClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykgcmV0dXJuIHsgc3JjU3RhdCwgZGVzdFN0YXQ6IG51bGwgfVxuICAgIHRocm93IGVyclxuICB9XG4gIHJldHVybiB7IHNyY1N0YXQsIGRlc3RTdGF0IH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQYXRocyAoc3JjLCBkZXN0LCBmdW5jTmFtZSwgY2IpIHtcbiAgdXRpbC5jYWxsYmFja2lmeShnZXRTdGF0cykoc3JjLCBkZXN0LCAoZXJyLCBzdGF0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gc3RhdHNcbiAgICBpZiAoZGVzdFN0YXQgJiYgYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcignU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IG5vdCBiZSB0aGUgc2FtZS4nKSlcbiAgICB9XG4gICAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSAmJiBpc1NyY1N1YmRpcihzcmMsIGRlc3QpKSB7XG4gICAgICByZXR1cm4gY2IobmV3IEVycm9yKGVyck1zZyhzcmMsIGRlc3QsIGZ1bmNOYW1lKSkpXG4gICAgfVxuICAgIHJldHVybiBjYihudWxsLCB7IHNyY1N0YXQsIGRlc3RTdGF0IH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNoZWNrUGF0aHNTeW5jIChzcmMsIGRlc3QsIGZ1bmNOYW1lKSB7XG4gIGNvbnN0IHsgc3JjU3RhdCwgZGVzdFN0YXQgfSA9IGdldFN0YXRzU3luYyhzcmMsIGRlc3QpXG4gIGlmIChkZXN0U3RhdCAmJiBhcmVJZGVudGljYWwoc3JjU3RhdCwgZGVzdFN0YXQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG11c3Qgbm90IGJlIHRoZSBzYW1lLicpXG4gIH1cbiAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSAmJiBpc1NyY1N1YmRpcihzcmMsIGRlc3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyhzcmMsIGRlc3QsIGZ1bmNOYW1lKSlcbiAgfVxuICByZXR1cm4geyBzcmNTdGF0LCBkZXN0U3RhdCB9XG59XG5cbi8vIHJlY3Vyc2l2ZWx5IGNoZWNrIGlmIGRlc3QgcGFyZW50IGlzIGEgc3ViZGlyZWN0b3J5IG9mIHNyYy5cbi8vIEl0IHdvcmtzIGZvciBhbGwgZmlsZSB0eXBlcyBpbmNsdWRpbmcgc3ltbGlua3Mgc2luY2UgaXRcbi8vIGNoZWNrcyB0aGUgc3JjIGFuZCBkZXN0IGlub2Rlcy4gSXQgc3RhcnRzIGZyb20gdGhlIGRlZXBlc3Rcbi8vIHBhcmVudCBhbmQgc3RvcHMgb25jZSBpdCByZWFjaGVzIHRoZSBzcmMgcGFyZW50IG9yIHRoZSByb290IHBhdGguXG5mdW5jdGlvbiBjaGVja1BhcmVudFBhdGhzIChzcmMsIHNyY1N0YXQsIGRlc3QsIGZ1bmNOYW1lLCBjYikge1xuICBjb25zdCBzcmNQYXJlbnQgPSBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKHNyYykpXG4gIGNvbnN0IGRlc3RQYXJlbnQgPSBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKGRlc3QpKVxuICBpZiAoZGVzdFBhcmVudCA9PT0gc3JjUGFyZW50IHx8IGRlc3RQYXJlbnQgPT09IHBhdGgucGFyc2UoZGVzdFBhcmVudCkucm9vdCkgcmV0dXJuIGNiKClcbiAgY29uc3QgY2FsbGJhY2sgPSAoZXJyLCBkZXN0U3RhdCkgPT4ge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIHJldHVybiBjYigpXG4gICAgICByZXR1cm4gY2IoZXJyKVxuICAgIH1cbiAgICBpZiAoYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcihlcnJNc2coc3JjLCBkZXN0LCBmdW5jTmFtZSkpKVxuICAgIH1cbiAgICByZXR1cm4gY2hlY2tQYXJlbnRQYXRocyhzcmMsIHNyY1N0YXQsIGRlc3RQYXJlbnQsIGZ1bmNOYW1lLCBjYilcbiAgfVxuICBpZiAobm9kZVN1cHBvcnRzQmlnSW50KSBmcy5zdGF0KGRlc3RQYXJlbnQsIHsgYmlnaW50OiB0cnVlIH0sIGNhbGxiYWNrKVxuICBlbHNlIGZzLnN0YXQoZGVzdFBhcmVudCwgY2FsbGJhY2spXG59XG5cbmZ1bmN0aW9uIGNoZWNrUGFyZW50UGF0aHNTeW5jIChzcmMsIHNyY1N0YXQsIGRlc3QsIGZ1bmNOYW1lKSB7XG4gIGNvbnN0IHNyY1BhcmVudCA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoc3JjKSlcbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoZGVzdCkpXG4gIGlmIChkZXN0UGFyZW50ID09PSBzcmNQYXJlbnQgfHwgZGVzdFBhcmVudCA9PT0gcGF0aC5wYXJzZShkZXN0UGFyZW50KS5yb290KSByZXR1cm5cbiAgbGV0IGRlc3RTdGF0XG4gIHRyeSB7XG4gICAgZGVzdFN0YXQgPSBzdGF0U3luYyhkZXN0UGFyZW50KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSByZXR1cm5cbiAgICB0aHJvdyBlcnJcbiAgfVxuICBpZiAoYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2coc3JjLCBkZXN0LCBmdW5jTmFtZSkpXG4gIH1cbiAgcmV0dXJuIGNoZWNrUGFyZW50UGF0aHNTeW5jKHNyYywgc3JjU3RhdCwgZGVzdFBhcmVudCwgZnVuY05hbWUpXG59XG5cbmZ1bmN0aW9uIGFyZUlkZW50aWNhbCAoc3JjU3RhdCwgZGVzdFN0YXQpIHtcbiAgaWYgKGRlc3RTdGF0LmlubyAmJiBkZXN0U3RhdC5kZXYgJiYgZGVzdFN0YXQuaW5vID09PSBzcmNTdGF0LmlubyAmJiBkZXN0U3RhdC5kZXYgPT09IHNyY1N0YXQuZGV2KSB7XG4gICAgaWYgKG5vZGVTdXBwb3J0c0JpZ0ludCB8fCBkZXN0U3RhdC5pbm8gPCBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikge1xuICAgICAgLy8gZGVmaW5pdGl2ZSBhbnN3ZXJcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIC8vIFVzZSBhZGRpdGlvbmFsIGhldXJpc3RpY3MgaWYgd2UgY2FuJ3QgdXNlICdiaWdpbnQnLlxuICAgIC8vIERpZmZlcmVudCAnaW5vJyBjb3VsZCBiZSByZXByZXNlbnRlZCB0aGUgc2FtZSBpZiB0aGV5IGFyZSA+PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxuICAgIC8vIFNlZSBpc3N1ZSA2NTdcbiAgICBpZiAoZGVzdFN0YXQuc2l6ZSA9PT0gc3JjU3RhdC5zaXplICYmXG4gICAgICAgIGRlc3RTdGF0Lm1vZGUgPT09IHNyY1N0YXQubW9kZSAmJlxuICAgICAgICBkZXN0U3RhdC5ubGluayA9PT0gc3JjU3RhdC5ubGluayAmJlxuICAgICAgICBkZXN0U3RhdC5hdGltZU1zID09PSBzcmNTdGF0LmF0aW1lTXMgJiZcbiAgICAgICAgZGVzdFN0YXQubXRpbWVNcyA9PT0gc3JjU3RhdC5tdGltZU1zICYmXG4gICAgICAgIGRlc3RTdGF0LmN0aW1lTXMgPT09IHNyY1N0YXQuY3RpbWVNcyAmJlxuICAgICAgICBkZXN0U3RhdC5iaXJ0aHRpbWVNcyA9PT0gc3JjU3RhdC5iaXJ0aHRpbWVNcykge1xuICAgICAgLy8gaGV1cmlzdGljIGFuc3dlclxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIHJldHVybiB0cnVlIGlmIGRlc3QgaXMgYSBzdWJkaXIgb2Ygc3JjLCBvdGhlcndpc2UgZmFsc2UuXG4vLyBJdCBvbmx5IGNoZWNrcyB0aGUgcGF0aCBzdHJpbmdzLlxuZnVuY3Rpb24gaXNTcmNTdWJkaXIgKHNyYywgZGVzdCkge1xuICBjb25zdCBzcmNBcnIgPSBwYXRoLnJlc29sdmUoc3JjKS5zcGxpdChwYXRoLnNlcCkuZmlsdGVyKGkgPT4gaSlcbiAgY29uc3QgZGVzdEFyciA9IHBhdGgucmVzb2x2ZShkZXN0KS5zcGxpdChwYXRoLnNlcCkuZmlsdGVyKGkgPT4gaSlcbiAgcmV0dXJuIHNyY0Fyci5yZWR1Y2UoKGFjYywgY3VyLCBpKSA9PiBhY2MgJiYgZGVzdEFycltpXSA9PT0gY3VyLCB0cnVlKVxufVxuXG5mdW5jdGlvbiBlcnJNc2cgKHNyYywgZGVzdCwgZnVuY05hbWUpIHtcbiAgcmV0dXJuIGBDYW5ub3QgJHtmdW5jTmFtZX0gJyR7c3JjfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtkZXN0fScuYFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY2hlY2tQYXRocyxcbiAgY2hlY2tQYXRoc1N5bmMsXG4gIGNoZWNrUGFyZW50UGF0aHMsXG4gIGNoZWNrUGFyZW50UGF0aHNTeW5jLFxuICBpc1NyY1N1YmRpclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IG1rZGlyc1N5bmMgPSByZXF1aXJlKCcuLi9ta2RpcnMnKS5ta2RpcnNTeW5jXG5jb25zdCB1dGltZXNNaWxsaXNTeW5jID0gcmVxdWlyZSgnLi4vdXRpbC91dGltZXMnKS51dGltZXNNaWxsaXNTeW5jXG5jb25zdCBzdGF0ID0gcmVxdWlyZSgnLi4vdXRpbC9zdGF0JylcblxuZnVuY3Rpb24gY29weVN5bmMgKHNyYywgZGVzdCwgb3B0cykge1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRzID0geyBmaWx0ZXI6IG9wdHMgfVxuICB9XG5cbiAgb3B0cyA9IG9wdHMgfHwge31cbiAgb3B0cy5jbG9iYmVyID0gJ2Nsb2JiZXInIGluIG9wdHMgPyAhIW9wdHMuY2xvYmJlciA6IHRydWUgLy8gZGVmYXVsdCB0byB0cnVlIGZvciBub3dcbiAgb3B0cy5vdmVyd3JpdGUgPSAnb3ZlcndyaXRlJyBpbiBvcHRzID8gISFvcHRzLm92ZXJ3cml0ZSA6IG9wdHMuY2xvYmJlciAvLyBvdmVyd3JpdGUgZmFsbHMgYmFjayB0byBjbG9iYmVyXG5cbiAgLy8gV2FybiBhYm91dCB1c2luZyBwcmVzZXJ2ZVRpbWVzdGFtcHMgb24gMzItYml0IG5vZGVcbiAgaWYgKG9wdHMucHJlc2VydmVUaW1lc3RhbXBzICYmIHByb2Nlc3MuYXJjaCA9PT0gJ2lhMzInKSB7XG4gICAgY29uc29sZS53YXJuKGBmcy1leHRyYTogVXNpbmcgdGhlIHByZXNlcnZlVGltZXN0YW1wcyBvcHRpb24gaW4gMzItYml0IG5vZGUgaXMgbm90IHJlY29tbWVuZGVkO1xcblxuICAgIHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMtZXh0cmEvaXNzdWVzLzI2OWApXG4gIH1cblxuICBjb25zdCB7IHNyY1N0YXQsIGRlc3RTdGF0IH0gPSBzdGF0LmNoZWNrUGF0aHNTeW5jKHNyYywgZGVzdCwgJ2NvcHknKVxuICBzdGF0LmNoZWNrUGFyZW50UGF0aHNTeW5jKHNyYywgc3JjU3RhdCwgZGVzdCwgJ2NvcHknKVxuICByZXR1cm4gaGFuZGxlRmlsdGVyQW5kQ29weShkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxufVxuXG5mdW5jdGlvbiBoYW5kbGVGaWx0ZXJBbmRDb3B5IChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmIChvcHRzLmZpbHRlciAmJiAhb3B0cy5maWx0ZXIoc3JjLCBkZXN0KSkgcmV0dXJuXG4gIGNvbnN0IGRlc3RQYXJlbnQgPSBwYXRoLmRpcm5hbWUoZGVzdClcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGRlc3RQYXJlbnQpKSBta2RpcnNTeW5jKGRlc3RQYXJlbnQpXG4gIHJldHVybiBzdGFydENvcHkoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cylcbn1cblxuZnVuY3Rpb24gc3RhcnRDb3B5IChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmIChvcHRzLmZpbHRlciAmJiAhb3B0cy5maWx0ZXIoc3JjLCBkZXN0KSkgcmV0dXJuXG4gIHJldHVybiBnZXRTdGF0cyhkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxufVxuXG5mdW5jdGlvbiBnZXRTdGF0cyAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBjb25zdCBzdGF0U3luYyA9IG9wdHMuZGVyZWZlcmVuY2UgPyBmcy5zdGF0U3luYyA6IGZzLmxzdGF0U3luY1xuICBjb25zdCBzcmNTdGF0ID0gc3RhdFN5bmMoc3JjKVxuXG4gIGlmIChzcmNTdGF0LmlzRGlyZWN0b3J5KCkpIHJldHVybiBvbkRpcihzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICBlbHNlIGlmIChzcmNTdGF0LmlzRmlsZSgpIHx8XG4gICAgICAgICAgIHNyY1N0YXQuaXNDaGFyYWN0ZXJEZXZpY2UoKSB8fFxuICAgICAgICAgICBzcmNTdGF0LmlzQmxvY2tEZXZpY2UoKSkgcmV0dXJuIG9uRmlsZShzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICBlbHNlIGlmIChzcmNTdGF0LmlzU3ltYm9saWNMaW5rKCkpIHJldHVybiBvbkxpbmsoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cylcbn1cblxuZnVuY3Rpb24gb25GaWxlIChzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmICghZGVzdFN0YXQpIHJldHVybiBjb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG4gIHJldHVybiBtYXlDb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG59XG5cbmZ1bmN0aW9uIG1heUNvcHlGaWxlIChzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgaWYgKG9wdHMub3ZlcndyaXRlKSB7XG4gICAgZnMudW5saW5rU3luYyhkZXN0KVxuICAgIHJldHVybiBjb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG4gIH0gZWxzZSBpZiAob3B0cy5lcnJvck9uRXhpc3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2Rlc3R9JyBhbHJlYWR5IGV4aXN0c2ApXG4gIH1cbn1cblxuZnVuY3Rpb24gY29weUZpbGUgKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBmcy5jb3B5RmlsZVN5bmMoc3JjLCBkZXN0KVxuICBpZiAob3B0cy5wcmVzZXJ2ZVRpbWVzdGFtcHMpIGhhbmRsZVRpbWVzdGFtcHMoc3JjU3RhdC5tb2RlLCBzcmMsIGRlc3QpXG4gIHJldHVybiBzZXREZXN0TW9kZShkZXN0LCBzcmNTdGF0Lm1vZGUpXG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRpbWVzdGFtcHMgKHNyY01vZGUsIHNyYywgZGVzdCkge1xuICAvLyBNYWtlIHN1cmUgdGhlIGZpbGUgaXMgd3JpdGFibGUgYmVmb3JlIHNldHRpbmcgdGhlIHRpbWVzdGFtcFxuICAvLyBvdGhlcndpc2Ugb3BlbiBmYWlscyB3aXRoIEVQRVJNIHdoZW4gaW52b2tlZCB3aXRoICdyKydcbiAgLy8gKHRocm91Z2ggdXRpbWVzIGNhbGwpXG4gIGlmIChmaWxlSXNOb3RXcml0YWJsZShzcmNNb2RlKSkgbWFrZUZpbGVXcml0YWJsZShkZXN0LCBzcmNNb2RlKVxuICByZXR1cm4gc2V0RGVzdFRpbWVzdGFtcHMoc3JjLCBkZXN0KVxufVxuXG5mdW5jdGlvbiBmaWxlSXNOb3RXcml0YWJsZSAoc3JjTW9kZSkge1xuICByZXR1cm4gKHNyY01vZGUgJiAwbzIwMCkgPT09IDBcbn1cblxuZnVuY3Rpb24gbWFrZUZpbGVXcml0YWJsZSAoZGVzdCwgc3JjTW9kZSkge1xuICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjTW9kZSB8IDBvMjAwKVxufVxuXG5mdW5jdGlvbiBzZXREZXN0TW9kZSAoZGVzdCwgc3JjTW9kZSkge1xuICByZXR1cm4gZnMuY2htb2RTeW5jKGRlc3QsIHNyY01vZGUpXG59XG5cbmZ1bmN0aW9uIHNldERlc3RUaW1lc3RhbXBzIChzcmMsIGRlc3QpIHtcbiAgLy8gVGhlIGluaXRpYWwgc3JjU3RhdC5hdGltZSBjYW5ub3QgYmUgdHJ1c3RlZFxuICAvLyBiZWNhdXNlIGl0IGlzIG1vZGlmaWVkIGJ5IHRoZSByZWFkKDIpIHN5c3RlbSBjYWxsXG4gIC8vIChTZWUgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9mcy5odG1sI2ZzX3N0YXRfdGltZV92YWx1ZXMpXG4gIGNvbnN0IHVwZGF0ZWRTcmNTdGF0ID0gZnMuc3RhdFN5bmMoc3JjKVxuICByZXR1cm4gdXRpbWVzTWlsbGlzU3luYyhkZXN0LCB1cGRhdGVkU3JjU3RhdC5hdGltZSwgdXBkYXRlZFNyY1N0YXQubXRpbWUpXG59XG5cbmZ1bmN0aW9uIG9uRGlyIChzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmICghZGVzdFN0YXQpIHJldHVybiBta0RpckFuZENvcHkoc3JjU3RhdC5tb2RlLCBzcmMsIGRlc3QsIG9wdHMpXG4gIGlmIChkZXN0U3RhdCAmJiAhZGVzdFN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBub24tZGlyZWN0b3J5ICcke2Rlc3R9JyB3aXRoIGRpcmVjdG9yeSAnJHtzcmN9Jy5gKVxuICB9XG4gIHJldHVybiBjb3B5RGlyKHNyYywgZGVzdCwgb3B0cylcbn1cblxuZnVuY3Rpb24gbWtEaXJBbmRDb3B5IChzcmNNb2RlLCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgZnMubWtkaXJTeW5jKGRlc3QpXG4gIGNvcHlEaXIoc3JjLCBkZXN0LCBvcHRzKVxuICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjTW9kZSlcbn1cblxuZnVuY3Rpb24gY29weURpciAoc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGZzLnJlYWRkaXJTeW5jKHNyYykuZm9yRWFjaChpdGVtID0+IGNvcHlEaXJJdGVtKGl0ZW0sIHNyYywgZGVzdCwgb3B0cykpXG59XG5cbmZ1bmN0aW9uIGNvcHlEaXJJdGVtIChpdGVtLCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgY29uc3Qgc3JjSXRlbSA9IHBhdGguam9pbihzcmMsIGl0ZW0pXG4gIGNvbnN0IGRlc3RJdGVtID0gcGF0aC5qb2luKGRlc3QsIGl0ZW0pXG4gIGNvbnN0IHsgZGVzdFN0YXQgfSA9IHN0YXQuY2hlY2tQYXRoc1N5bmMoc3JjSXRlbSwgZGVzdEl0ZW0sICdjb3B5JylcbiAgcmV0dXJuIHN0YXJ0Q29weShkZXN0U3RhdCwgc3JjSXRlbSwgZGVzdEl0ZW0sIG9wdHMpXG59XG5cbmZ1bmN0aW9uIG9uTGluayAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBsZXQgcmVzb2x2ZWRTcmMgPSBmcy5yZWFkbGlua1N5bmMoc3JjKVxuICBpZiAob3B0cy5kZXJlZmVyZW5jZSkge1xuICAgIHJlc29sdmVkU3JjID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHJlc29sdmVkU3JjKVxuICB9XG5cbiAgaWYgKCFkZXN0U3RhdCkge1xuICAgIHJldHVybiBmcy5zeW1saW5rU3luYyhyZXNvbHZlZFNyYywgZGVzdClcbiAgfSBlbHNlIHtcbiAgICBsZXQgcmVzb2x2ZWREZXN0XG4gICAgdHJ5IHtcbiAgICAgIHJlc29sdmVkRGVzdCA9IGZzLnJlYWRsaW5rU3luYyhkZXN0KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gZGVzdCBleGlzdHMgYW5kIGlzIGEgcmVndWxhciBmaWxlIG9yIGRpcmVjdG9yeSxcbiAgICAgIC8vIFdpbmRvd3MgbWF5IHRocm93IFVOS05PV04gZXJyb3IuIElmIGRlc3QgYWxyZWFkeSBleGlzdHMsXG4gICAgICAvLyBmcyB0aHJvd3MgZXJyb3IgYW55d2F5LCBzbyBubyBuZWVkIHRvIGd1YXJkIGFnYWluc3QgaXQgaGVyZS5cbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VJTlZBTCcgfHwgZXJyLmNvZGUgPT09ICdVTktOT1dOJykgcmV0dXJuIGZzLnN5bWxpbmtTeW5jKHJlc29sdmVkU3JjLCBkZXN0KVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGlmIChvcHRzLmRlcmVmZXJlbmNlKSB7XG4gICAgICByZXNvbHZlZERlc3QgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVzb2x2ZWREZXN0KVxuICAgIH1cbiAgICBpZiAoc3RhdC5pc1NyY1N1YmRpcihyZXNvbHZlZFNyYywgcmVzb2x2ZWREZXN0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29weSAnJHtyZXNvbHZlZFNyY30nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7cmVzb2x2ZWREZXN0fScuYClcbiAgICB9XG5cbiAgICAvLyBwcmV2ZW50IGNvcHkgaWYgc3JjIGlzIGEgc3ViZGlyIG9mIGRlc3Qgc2luY2UgdW5saW5raW5nXG4gICAgLy8gZGVzdCBpbiB0aGlzIGNhc2Ugd291bGQgcmVzdWx0IGluIHJlbW92aW5nIHNyYyBjb250ZW50c1xuICAgIC8vIGFuZCB0aGVyZWZvcmUgYSBicm9rZW4gc3ltbGluayB3b3VsZCBiZSBjcmVhdGVkLlxuICAgIGlmIChmcy5zdGF0U3luYyhkZXN0KS5pc0RpcmVjdG9yeSgpICYmIHN0YXQuaXNTcmNTdWJkaXIocmVzb2x2ZWREZXN0LCByZXNvbHZlZFNyYykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSAnJHtyZXNvbHZlZERlc3R9JyB3aXRoICcke3Jlc29sdmVkU3JjfScuYClcbiAgICB9XG4gICAgcmV0dXJuIGNvcHlMaW5rKHJlc29sdmVkU3JjLCBkZXN0KVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvcHlMaW5rIChyZXNvbHZlZFNyYywgZGVzdCkge1xuICBmcy51bmxpbmtTeW5jKGRlc3QpXG4gIHJldHVybiBmcy5zeW1saW5rU3luYyhyZXNvbHZlZFNyYywgZGVzdClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5U3luY1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29weVN5bmM6IHJlcXVpcmUoJy4vY29weS1zeW5jJylcbn1cbiIsICIndXNlIHN0cmljdCdcbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5cbmZ1bmN0aW9uIHBhdGhFeGlzdHMgKHBhdGgpIHtcbiAgcmV0dXJuIGZzLmFjY2VzcyhwYXRoKS50aGVuKCgpID0+IHRydWUpLmNhdGNoKCgpID0+IGZhbHNlKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcGF0aEV4aXN0czogdShwYXRoRXhpc3RzKSxcbiAgcGF0aEV4aXN0c1N5bmM6IGZzLmV4aXN0c1N5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBta2RpcnMgPSByZXF1aXJlKCcuLi9ta2RpcnMnKS5ta2RpcnNcbmNvbnN0IHBhdGhFeGlzdHMgPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpLnBhdGhFeGlzdHNcbmNvbnN0IHV0aW1lc01pbGxpcyA9IHJlcXVpcmUoJy4uL3V0aWwvdXRpbWVzJykudXRpbWVzTWlsbGlzXG5jb25zdCBzdGF0ID0gcmVxdWlyZSgnLi4vdXRpbC9zdGF0JylcblxuZnVuY3Rpb24gY29weSAoc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicgJiYgIWNiKSB7XG4gICAgY2IgPSBvcHRzXG4gICAgb3B0cyA9IHt9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRzID0geyBmaWx0ZXI6IG9wdHMgfVxuICB9XG5cbiAgY2IgPSBjYiB8fCBmdW5jdGlvbiAoKSB7fVxuICBvcHRzID0gb3B0cyB8fCB7fVxuXG4gIG9wdHMuY2xvYmJlciA9ICdjbG9iYmVyJyBpbiBvcHRzID8gISFvcHRzLmNsb2JiZXIgOiB0cnVlIC8vIGRlZmF1bHQgdG8gdHJ1ZSBmb3Igbm93XG4gIG9wdHMub3ZlcndyaXRlID0gJ292ZXJ3cml0ZScgaW4gb3B0cyA/ICEhb3B0cy5vdmVyd3JpdGUgOiBvcHRzLmNsb2JiZXIgLy8gb3ZlcndyaXRlIGZhbGxzIGJhY2sgdG8gY2xvYmJlclxuXG4gIC8vIFdhcm4gYWJvdXQgdXNpbmcgcHJlc2VydmVUaW1lc3RhbXBzIG9uIDMyLWJpdCBub2RlXG4gIGlmIChvcHRzLnByZXNlcnZlVGltZXN0YW1wcyAmJiBwcm9jZXNzLmFyY2ggPT09ICdpYTMyJykge1xuICAgIGNvbnNvbGUud2FybihgZnMtZXh0cmE6IFVzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFtcHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcXG5cbiAgICBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjlgKVxuICB9XG5cbiAgc3RhdC5jaGVja1BhdGhzKHNyYywgZGVzdCwgJ2NvcHknLCAoZXJyLCBzdGF0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gc3RhdHNcbiAgICBzdGF0LmNoZWNrUGFyZW50UGF0aHMoc3JjLCBzcmNTdGF0LCBkZXN0LCAnY29weScsIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgaWYgKG9wdHMuZmlsdGVyKSByZXR1cm4gaGFuZGxlRmlsdGVyKGNoZWNrUGFyZW50RGlyLCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICAgIHJldHVybiBjaGVja1BhcmVudERpcihkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBjaGVja1BhcmVudERpciAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGguZGlybmFtZShkZXN0KVxuICBwYXRoRXhpc3RzKGRlc3RQYXJlbnQsIChlcnIsIGRpckV4aXN0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgaWYgKGRpckV4aXN0cykgcmV0dXJuIHN0YXJ0Q29weShkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICBta2RpcnMoZGVzdFBhcmVudCwgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICByZXR1cm4gc3RhcnRDb3B5KGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZpbHRlciAob25JbmNsdWRlLCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBQcm9taXNlLnJlc29sdmUob3B0cy5maWx0ZXIoc3JjLCBkZXN0KSkudGhlbihpbmNsdWRlID0+IHtcbiAgICBpZiAoaW5jbHVkZSkgcmV0dXJuIG9uSW5jbHVkZShkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICByZXR1cm4gY2IoKVxuICB9LCBlcnJvciA9PiBjYihlcnJvcikpXG59XG5cbmZ1bmN0aW9uIHN0YXJ0Q29weSAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgaWYgKG9wdHMuZmlsdGVyKSByZXR1cm4gaGFuZGxlRmlsdGVyKGdldFN0YXRzLCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgcmV0dXJuIGdldFN0YXRzKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxufVxuXG5mdW5jdGlvbiBnZXRTdGF0cyAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgY29uc3Qgc3RhdCA9IG9wdHMuZGVyZWZlcmVuY2UgPyBmcy5zdGF0IDogZnMubHN0YXRcbiAgc3RhdChzcmMsIChlcnIsIHNyY1N0YXQpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuXG4gICAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSkgcmV0dXJuIG9uRGlyKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICAgIGVsc2UgaWYgKHNyY1N0YXQuaXNGaWxlKCkgfHxcbiAgICAgICAgICAgICBzcmNTdGF0LmlzQ2hhcmFjdGVyRGV2aWNlKCkgfHxcbiAgICAgICAgICAgICBzcmNTdGF0LmlzQmxvY2tEZXZpY2UoKSkgcmV0dXJuIG9uRmlsZShzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICBlbHNlIGlmIChzcmNTdGF0LmlzU3ltYm9saWNMaW5rKCkpIHJldHVybiBvbkxpbmsoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIG9uRmlsZSAoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgaWYgKCFkZXN0U3RhdCkgcmV0dXJuIGNvcHlGaWxlKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gIHJldHVybiBtYXlDb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxufVxuXG5mdW5jdGlvbiBtYXlDb3B5RmlsZSAoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBpZiAob3B0cy5vdmVyd3JpdGUpIHtcbiAgICBmcy51bmxpbmsoZGVzdCwgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICByZXR1cm4gY29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICB9KVxuICB9IGVsc2UgaWYgKG9wdHMuZXJyb3JPbkV4aXN0KSB7XG4gICAgcmV0dXJuIGNiKG5ldyBFcnJvcihgJyR7ZGVzdH0nIGFscmVhZHkgZXhpc3RzYCkpXG4gIH0gZWxzZSByZXR1cm4gY2IoKVxufVxuXG5mdW5jdGlvbiBjb3B5RmlsZSAoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBmcy5jb3B5RmlsZShzcmMsIGRlc3QsIGVyciA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBpZiAob3B0cy5wcmVzZXJ2ZVRpbWVzdGFtcHMpIHJldHVybiBoYW5kbGVUaW1lc3RhbXBzQW5kTW9kZShzcmNTdGF0Lm1vZGUsIHNyYywgZGVzdCwgY2IpXG4gICAgcmV0dXJuIHNldERlc3RNb2RlKGRlc3QsIHNyY1N0YXQubW9kZSwgY2IpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRpbWVzdGFtcHNBbmRNb2RlIChzcmNNb2RlLCBzcmMsIGRlc3QsIGNiKSB7XG4gIC8vIE1ha2Ugc3VyZSB0aGUgZmlsZSBpcyB3cml0YWJsZSBiZWZvcmUgc2V0dGluZyB0aGUgdGltZXN0YW1wXG4gIC8vIG90aGVyd2lzZSBvcGVuIGZhaWxzIHdpdGggRVBFUk0gd2hlbiBpbnZva2VkIHdpdGggJ3IrJ1xuICAvLyAodGhyb3VnaCB1dGltZXMgY2FsbClcbiAgaWYgKGZpbGVJc05vdFdyaXRhYmxlKHNyY01vZGUpKSB7XG4gICAgcmV0dXJuIG1ha2VGaWxlV3JpdGFibGUoZGVzdCwgc3JjTW9kZSwgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICByZXR1cm4gc2V0RGVzdFRpbWVzdGFtcHNBbmRNb2RlKHNyY01vZGUsIHNyYywgZGVzdCwgY2IpXG4gICAgfSlcbiAgfVxuICByZXR1cm4gc2V0RGVzdFRpbWVzdGFtcHNBbmRNb2RlKHNyY01vZGUsIHNyYywgZGVzdCwgY2IpXG59XG5cbmZ1bmN0aW9uIGZpbGVJc05vdFdyaXRhYmxlIChzcmNNb2RlKSB7XG4gIHJldHVybiAoc3JjTW9kZSAmIDBvMjAwKSA9PT0gMFxufVxuXG5mdW5jdGlvbiBtYWtlRmlsZVdyaXRhYmxlIChkZXN0LCBzcmNNb2RlLCBjYikge1xuICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjTW9kZSB8IDBvMjAwLCBjYilcbn1cblxuZnVuY3Rpb24gc2V0RGVzdFRpbWVzdGFtcHNBbmRNb2RlIChzcmNNb2RlLCBzcmMsIGRlc3QsIGNiKSB7XG4gIHNldERlc3RUaW1lc3RhbXBzKHNyYywgZGVzdCwgZXJyID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIHJldHVybiBzZXREZXN0TW9kZShkZXN0LCBzcmNNb2RlLCBjYilcbiAgfSlcbn1cblxuZnVuY3Rpb24gc2V0RGVzdE1vZGUgKGRlc3QsIHNyY01vZGUsIGNiKSB7XG4gIHJldHVybiBmcy5jaG1vZChkZXN0LCBzcmNNb2RlLCBjYilcbn1cblxuZnVuY3Rpb24gc2V0RGVzdFRpbWVzdGFtcHMgKHNyYywgZGVzdCwgY2IpIHtcbiAgLy8gVGhlIGluaXRpYWwgc3JjU3RhdC5hdGltZSBjYW5ub3QgYmUgdHJ1c3RlZFxuICAvLyBiZWNhdXNlIGl0IGlzIG1vZGlmaWVkIGJ5IHRoZSByZWFkKDIpIHN5c3RlbSBjYWxsXG4gIC8vIChTZWUgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9mcy5odG1sI2ZzX3N0YXRfdGltZV92YWx1ZXMpXG4gIGZzLnN0YXQoc3JjLCAoZXJyLCB1cGRhdGVkU3JjU3RhdCkgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgcmV0dXJuIHV0aW1lc01pbGxpcyhkZXN0LCB1cGRhdGVkU3JjU3RhdC5hdGltZSwgdXBkYXRlZFNyY1N0YXQubXRpbWUsIGNiKVxuICB9KVxufVxuXG5mdW5jdGlvbiBvbkRpciAoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgaWYgKCFkZXN0U3RhdCkgcmV0dXJuIG1rRGlyQW5kQ29weShzcmNTdGF0Lm1vZGUsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gIGlmIChkZXN0U3RhdCAmJiAhZGVzdFN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgIHJldHVybiBjYihuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtkZXN0fScgd2l0aCBkaXJlY3RvcnkgJyR7c3JjfScuYCkpXG4gIH1cbiAgcmV0dXJuIGNvcHlEaXIoc3JjLCBkZXN0LCBvcHRzLCBjYilcbn1cblxuZnVuY3Rpb24gbWtEaXJBbmRDb3B5IChzcmNNb2RlLCBzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGZzLm1rZGlyKGRlc3QsIGVyciA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBjb3B5RGlyKHNyYywgZGVzdCwgb3B0cywgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjTW9kZSwgY2IpXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gY29weURpciAoc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBmcy5yZWFkZGlyKHNyYywgKGVyciwgaXRlbXMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIHJldHVybiBjb3B5RGlySXRlbXMoaXRlbXMsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNvcHlEaXJJdGVtcyAoaXRlbXMsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgY29uc3QgaXRlbSA9IGl0ZW1zLnBvcCgpXG4gIGlmICghaXRlbSkgcmV0dXJuIGNiKClcbiAgcmV0dXJuIGNvcHlEaXJJdGVtKGl0ZW1zLCBpdGVtLCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxufVxuXG5mdW5jdGlvbiBjb3B5RGlySXRlbSAoaXRlbXMsIGl0ZW0sIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgY29uc3Qgc3JjSXRlbSA9IHBhdGguam9pbihzcmMsIGl0ZW0pXG4gIGNvbnN0IGRlc3RJdGVtID0gcGF0aC5qb2luKGRlc3QsIGl0ZW0pXG4gIHN0YXQuY2hlY2tQYXRocyhzcmNJdGVtLCBkZXN0SXRlbSwgJ2NvcHknLCAoZXJyLCBzdGF0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgY29uc3QgeyBkZXN0U3RhdCB9ID0gc3RhdHNcbiAgICBzdGFydENvcHkoZGVzdFN0YXQsIHNyY0l0ZW0sIGRlc3RJdGVtLCBvcHRzLCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIHJldHVybiBjb3B5RGlySXRlbXMoaXRlbXMsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gb25MaW5rIChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBmcy5yZWFkbGluayhzcmMsIChlcnIsIHJlc29sdmVkU3JjKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBpZiAob3B0cy5kZXJlZmVyZW5jZSkge1xuICAgICAgcmVzb2x2ZWRTcmMgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVzb2x2ZWRTcmMpXG4gICAgfVxuXG4gICAgaWYgKCFkZXN0U3RhdCkge1xuICAgICAgcmV0dXJuIGZzLnN5bWxpbmsocmVzb2x2ZWRTcmMsIGRlc3QsIGNiKVxuICAgIH0gZWxzZSB7XG4gICAgICBmcy5yZWFkbGluayhkZXN0LCAoZXJyLCByZXNvbHZlZERlc3QpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIC8vIGRlc3QgZXhpc3RzIGFuZCBpcyBhIHJlZ3VsYXIgZmlsZSBvciBkaXJlY3RvcnksXG4gICAgICAgICAgLy8gV2luZG93cyBtYXkgdGhyb3cgVU5LTk9XTiBlcnJvci4gSWYgZGVzdCBhbHJlYWR5IGV4aXN0cyxcbiAgICAgICAgICAvLyBmcyB0aHJvd3MgZXJyb3IgYW55d2F5LCBzbyBubyBuZWVkIHRvIGd1YXJkIGFnYWluc3QgaXQgaGVyZS5cbiAgICAgICAgICBpZiAoZXJyLmNvZGUgPT09ICdFSU5WQUwnIHx8IGVyci5jb2RlID09PSAnVU5LTk9XTicpIHJldHVybiBmcy5zeW1saW5rKHJlc29sdmVkU3JjLCBkZXN0LCBjYilcbiAgICAgICAgICByZXR1cm4gY2IoZXJyKVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmRlcmVmZXJlbmNlKSB7XG4gICAgICAgICAgcmVzb2x2ZWREZXN0ID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHJlc29sdmVkRGVzdClcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdC5pc1NyY1N1YmRpcihyZXNvbHZlZFNyYywgcmVzb2x2ZWREZXN0KSkge1xuICAgICAgICAgIHJldHVybiBjYihuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke3Jlc29sdmVkU3JjfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtyZXNvbHZlZERlc3R9Jy5gKSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRvIG5vdCBjb3B5IGlmIHNyYyBpcyBhIHN1YmRpciBvZiBkZXN0IHNpbmNlIHVubGlua2luZ1xuICAgICAgICAvLyBkZXN0IGluIHRoaXMgY2FzZSB3b3VsZCByZXN1bHQgaW4gcmVtb3Zpbmcgc3JjIGNvbnRlbnRzXG4gICAgICAgIC8vIGFuZCB0aGVyZWZvcmUgYSBicm9rZW4gc3ltbGluayB3b3VsZCBiZSBjcmVhdGVkLlxuICAgICAgICBpZiAoZGVzdFN0YXQuaXNEaXJlY3RvcnkoKSAmJiBzdGF0LmlzU3JjU3ViZGlyKHJlc29sdmVkRGVzdCwgcmVzb2x2ZWRTcmMpKSB7XG4gICAgICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSAnJHtyZXNvbHZlZERlc3R9JyB3aXRoICcke3Jlc29sdmVkU3JjfScuYCkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvcHlMaW5rKHJlc29sdmVkU3JjLCBkZXN0LCBjYilcbiAgICAgIH0pXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiBjb3B5TGluayAocmVzb2x2ZWRTcmMsIGRlc3QsIGNiKSB7XG4gIGZzLnVubGluayhkZXN0LCBlcnIgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgcmV0dXJuIGZzLnN5bWxpbmsocmVzb2x2ZWRTcmMsIGRlc3QsIGNiKVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvcHk6IHUocmVxdWlyZSgnLi9jb3B5JykpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuY29uc3QgaXNXaW5kb3dzID0gKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpXG5cbmZ1bmN0aW9uIGRlZmF1bHRzIChvcHRpb25zKSB7XG4gIGNvbnN0IG1ldGhvZHMgPSBbXG4gICAgJ3VubGluaycsXG4gICAgJ2NobW9kJyxcbiAgICAnc3RhdCcsXG4gICAgJ2xzdGF0JyxcbiAgICAncm1kaXInLFxuICAgICdyZWFkZGlyJ1xuICBdXG4gIG1ldGhvZHMuZm9yRWFjaChtID0+IHtcbiAgICBvcHRpb25zW21dID0gb3B0aW9uc1ttXSB8fCBmc1ttXVxuICAgIG0gPSBtICsgJ1N5bmMnXG4gICAgb3B0aW9uc1ttXSA9IG9wdGlvbnNbbV0gfHwgZnNbbV1cbiAgfSlcblxuICBvcHRpb25zLm1heEJ1c3lUcmllcyA9IG9wdGlvbnMubWF4QnVzeVRyaWVzIHx8IDNcbn1cblxuZnVuY3Rpb24gcmltcmFmIChwLCBvcHRpb25zLCBjYikge1xuICBsZXQgYnVzeVRyaWVzID0gMFxuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gb3B0aW9uc1xuICAgIG9wdGlvbnMgPSB7fVxuICB9XG5cbiAgYXNzZXJ0KHAsICdyaW1yYWY6IG1pc3NpbmcgcGF0aCcpXG4gIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgcCwgJ3N0cmluZycsICdyaW1yYWY6IHBhdGggc2hvdWxkIGJlIGEgc3RyaW5nJylcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBjYiwgJ2Z1bmN0aW9uJywgJ3JpbXJhZjogY2FsbGJhY2sgZnVuY3Rpb24gcmVxdWlyZWQnKVxuICBhc3NlcnQob3B0aW9ucywgJ3JpbXJhZjogaW52YWxpZCBvcHRpb25zIGFyZ3VtZW50IHByb3ZpZGVkJylcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBvcHRpb25zLCAnb2JqZWN0JywgJ3JpbXJhZjogb3B0aW9ucyBzaG91bGQgYmUgb2JqZWN0JylcblxuICBkZWZhdWx0cyhvcHRpb25zKVxuXG4gIHJpbXJhZl8ocCwgb3B0aW9ucywgZnVuY3Rpb24gQ0IgKGVyKSB7XG4gICAgaWYgKGVyKSB7XG4gICAgICBpZiAoKGVyLmNvZGUgPT09ICdFQlVTWScgfHwgZXIuY29kZSA9PT0gJ0VOT1RFTVBUWScgfHwgZXIuY29kZSA9PT0gJ0VQRVJNJykgJiZcbiAgICAgICAgICBidXN5VHJpZXMgPCBvcHRpb25zLm1heEJ1c3lUcmllcykge1xuICAgICAgICBidXN5VHJpZXMrK1xuICAgICAgICBjb25zdCB0aW1lID0gYnVzeVRyaWVzICogMTAwXG4gICAgICAgIC8vIHRyeSBhZ2Fpbiwgd2l0aCB0aGUgc2FtZSBleGFjdCBjYWxsYmFjayBhcyB0aGlzIG9uZS5cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoKCkgPT4gcmltcmFmXyhwLCBvcHRpb25zLCBDQiksIHRpbWUpXG4gICAgICB9XG5cbiAgICAgIC8vIGFscmVhZHkgZ29uZVxuICAgICAgaWYgKGVyLmNvZGUgPT09ICdFTk9FTlQnKSBlciA9IG51bGxcbiAgICB9XG5cbiAgICBjYihlcilcbiAgfSlcbn1cblxuLy8gVHdvIHBvc3NpYmxlIHN0cmF0ZWdpZXMuXG4vLyAxLiBBc3N1bWUgaXQncyBhIGZpbGUuICB1bmxpbmsgaXQsIHRoZW4gZG8gdGhlIGRpciBzdHVmZiBvbiBFUEVSTSBvciBFSVNESVJcbi8vIDIuIEFzc3VtZSBpdCdzIGEgZGlyZWN0b3J5LiAgcmVhZGRpciwgdGhlbiBkbyB0aGUgZmlsZSBzdHVmZiBvbiBFTk9URElSXG4vL1xuLy8gQm90aCByZXN1bHQgaW4gYW4gZXh0cmEgc3lzY2FsbCB3aGVuIHlvdSBndWVzcyB3cm9uZy4gIEhvd2V2ZXIsIHRoZXJlXG4vLyBhcmUgbGlrZWx5IGZhciBtb3JlIG5vcm1hbCBmaWxlcyBpbiB0aGUgd29ybGQgdGhhbiBkaXJlY3Rvcmllcy4gIFRoaXNcbi8vIGlzIGJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgYSB0aGUgYXZlcmFnZSBudW1iZXIgb2YgZmlsZXMgcGVyXG4vLyBkaXJlY3RvcnkgaXMgPj0gMS5cbi8vXG4vLyBJZiBhbnlvbmUgZXZlciBjb21wbGFpbnMgYWJvdXQgdGhpcywgdGhlbiBJIGd1ZXNzIHRoZSBzdHJhdGVneSBjb3VsZFxuLy8gYmUgbWFkZSBjb25maWd1cmFibGUgc29tZWhvdy4gIEJ1dCB1bnRpbCB0aGVuLCBZQUdOSS5cbmZ1bmN0aW9uIHJpbXJhZl8gKHAsIG9wdGlvbnMsIGNiKSB7XG4gIGFzc2VydChwKVxuICBhc3NlcnQob3B0aW9ucylcbiAgYXNzZXJ0KHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcblxuICAvLyBzdW5vcyBsZXRzIHRoZSByb290IHVzZXIgdW5saW5rIGRpcmVjdG9yaWVzLCB3aGljaCBpcy4uLiB3ZWlyZC5cbiAgLy8gc28gd2UgaGF2ZSB0byBsc3RhdCBoZXJlIGFuZCBtYWtlIHN1cmUgaXQncyBub3QgYSBkaXIuXG4gIG9wdGlvbnMubHN0YXQocCwgKGVyLCBzdCkgPT4ge1xuICAgIGlmIChlciAmJiBlci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgcmV0dXJuIGNiKG51bGwpXG4gICAgfVxuXG4gICAgLy8gV2luZG93cyBjYW4gRVBFUk0gb24gc3RhdC4gIExpZmUgaXMgc3VmZmVyaW5nLlxuICAgIGlmIChlciAmJiBlci5jb2RlID09PSAnRVBFUk0nICYmIGlzV2luZG93cykge1xuICAgICAgcmV0dXJuIGZpeFdpbkVQRVJNKHAsIG9wdGlvbnMsIGVyLCBjYilcbiAgICB9XG5cbiAgICBpZiAoc3QgJiYgc3QuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgcmV0dXJuIHJtZGlyKHAsIG9wdGlvbnMsIGVyLCBjYilcbiAgICB9XG5cbiAgICBvcHRpb25zLnVubGluayhwLCBlciA9PiB7XG4gICAgICBpZiAoZXIpIHtcbiAgICAgICAgaWYgKGVyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgcmV0dXJuIGNiKG51bGwpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVyLmNvZGUgPT09ICdFUEVSTScpIHtcbiAgICAgICAgICByZXR1cm4gKGlzV2luZG93cylcbiAgICAgICAgICAgID8gZml4V2luRVBFUk0ocCwgb3B0aW9ucywgZXIsIGNiKVxuICAgICAgICAgICAgOiBybWRpcihwLCBvcHRpb25zLCBlciwgY2IpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVyLmNvZGUgPT09ICdFSVNESVInKSB7XG4gICAgICAgICAgcmV0dXJuIHJtZGlyKHAsIG9wdGlvbnMsIGVyLCBjYilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNiKGVyKVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGZpeFdpbkVQRVJNIChwLCBvcHRpb25zLCBlciwgY2IpIHtcbiAgYXNzZXJ0KHApXG4gIGFzc2VydChvcHRpb25zKVxuICBhc3NlcnQodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuXG4gIG9wdGlvbnMuY2htb2QocCwgMG82NjYsIGVyMiA9PiB7XG4gICAgaWYgKGVyMikge1xuICAgICAgY2IoZXIyLmNvZGUgPT09ICdFTk9FTlQnID8gbnVsbCA6IGVyKVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLnN0YXQocCwgKGVyMywgc3RhdHMpID0+IHtcbiAgICAgICAgaWYgKGVyMykge1xuICAgICAgICAgIGNiKGVyMy5jb2RlID09PSAnRU5PRU5UJyA/IG51bGwgOiBlcilcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgcm1kaXIocCwgb3B0aW9ucywgZXIsIGNiKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMudW5saW5rKHAsIGNiKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gZml4V2luRVBFUk1TeW5jIChwLCBvcHRpb25zLCBlcikge1xuICBsZXQgc3RhdHNcblxuICBhc3NlcnQocClcbiAgYXNzZXJ0KG9wdGlvbnMpXG5cbiAgdHJ5IHtcbiAgICBvcHRpb25zLmNobW9kU3luYyhwLCAwbzY2NilcbiAgfSBjYXRjaCAoZXIyKSB7XG4gICAgaWYgKGVyMi5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVyXG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBzdGF0cyA9IG9wdGlvbnMuc3RhdFN5bmMocClcbiAgfSBjYXRjaCAoZXIzKSB7XG4gICAgaWYgKGVyMy5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVyXG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICBybWRpclN5bmMocCwgb3B0aW9ucywgZXIpXG4gIH0gZWxzZSB7XG4gICAgb3B0aW9ucy51bmxpbmtTeW5jKHApXG4gIH1cbn1cblxuZnVuY3Rpb24gcm1kaXIgKHAsIG9wdGlvbnMsIG9yaWdpbmFsRXIsIGNiKSB7XG4gIGFzc2VydChwKVxuICBhc3NlcnQob3B0aW9ucylcbiAgYXNzZXJ0KHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcblxuICAvLyB0cnkgdG8gcm1kaXIgZmlyc3QsIGFuZCBvbmx5IHJlYWRkaXIgb24gRU5PVEVNUFRZIG9yIEVFWElTVCAoU3VuT1MpXG4gIC8vIGlmIHdlIGd1ZXNzZWQgd3JvbmcsIGFuZCBpdCdzIG5vdCBhIGRpcmVjdG9yeSwgdGhlblxuICAvLyByYWlzZSB0aGUgb3JpZ2luYWwgZXJyb3IuXG4gIG9wdGlvbnMucm1kaXIocCwgZXIgPT4ge1xuICAgIGlmIChlciAmJiAoZXIuY29kZSA9PT0gJ0VOT1RFTVBUWScgfHwgZXIuY29kZSA9PT0gJ0VFWElTVCcgfHwgZXIuY29kZSA9PT0gJ0VQRVJNJykpIHtcbiAgICAgIHJta2lkcyhwLCBvcHRpb25zLCBjYilcbiAgICB9IGVsc2UgaWYgKGVyICYmIGVyLmNvZGUgPT09ICdFTk9URElSJykge1xuICAgICAgY2Iob3JpZ2luYWxFcilcbiAgICB9IGVsc2Uge1xuICAgICAgY2IoZXIpXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiBybWtpZHMgKHAsIG9wdGlvbnMsIGNiKSB7XG4gIGFzc2VydChwKVxuICBhc3NlcnQob3B0aW9ucylcbiAgYXNzZXJ0KHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcblxuICBvcHRpb25zLnJlYWRkaXIocCwgKGVyLCBmaWxlcykgPT4ge1xuICAgIGlmIChlcikgcmV0dXJuIGNiKGVyKVxuXG4gICAgbGV0IG4gPSBmaWxlcy5sZW5ndGhcbiAgICBsZXQgZXJyU3RhdGVcblxuICAgIGlmIChuID09PSAwKSByZXR1cm4gb3B0aW9ucy5ybWRpcihwLCBjYilcblxuICAgIGZpbGVzLmZvckVhY2goZiA9PiB7XG4gICAgICByaW1yYWYocGF0aC5qb2luKHAsIGYpLCBvcHRpb25zLCBlciA9PiB7XG4gICAgICAgIGlmIChlcnJTdGF0ZSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChlcikgcmV0dXJuIGNiKGVyclN0YXRlID0gZXIpXG4gICAgICAgIGlmICgtLW4gPT09IDApIHtcbiAgICAgICAgICBvcHRpb25zLnJtZGlyKHAsIGNiKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbi8vIHRoaXMgbG9va3Mgc2ltcGxlciwgYW5kIGlzIHN0cmljdGx5ICpmYXN0ZXIqLCBidXQgd2lsbFxuLy8gdGllIHVwIHRoZSBKYXZhU2NyaXB0IHRocmVhZCBhbmQgZmFpbCBvbiBleGNlc3NpdmVseVxuLy8gZGVlcCBkaXJlY3RvcnkgdHJlZXMuXG5mdW5jdGlvbiByaW1yYWZTeW5jIChwLCBvcHRpb25zKSB7XG4gIGxldCBzdFxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIGRlZmF1bHRzKG9wdGlvbnMpXG5cbiAgYXNzZXJ0KHAsICdyaW1yYWY6IG1pc3NpbmcgcGF0aCcpXG4gIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgcCwgJ3N0cmluZycsICdyaW1yYWY6IHBhdGggc2hvdWxkIGJlIGEgc3RyaW5nJylcbiAgYXNzZXJ0KG9wdGlvbnMsICdyaW1yYWY6IG1pc3Npbmcgb3B0aW9ucycpXG4gIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2Ygb3B0aW9ucywgJ29iamVjdCcsICdyaW1yYWY6IG9wdGlvbnMgc2hvdWxkIGJlIG9iamVjdCcpXG5cbiAgdHJ5IHtcbiAgICBzdCA9IG9wdGlvbnMubHN0YXRTeW5jKHApXG4gIH0gY2F0Y2ggKGVyKSB7XG4gICAgaWYgKGVyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBXaW5kb3dzIGNhbiBFUEVSTSBvbiBzdGF0LiAgTGlmZSBpcyBzdWZmZXJpbmcuXG4gICAgaWYgKGVyLmNvZGUgPT09ICdFUEVSTScgJiYgaXNXaW5kb3dzKSB7XG4gICAgICBmaXhXaW5FUEVSTVN5bmMocCwgb3B0aW9ucywgZXIpXG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBzdW5vcyBsZXRzIHRoZSByb290IHVzZXIgdW5saW5rIGRpcmVjdG9yaWVzLCB3aGljaCBpcy4uLiB3ZWlyZC5cbiAgICBpZiAoc3QgJiYgc3QuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgcm1kaXJTeW5jKHAsIG9wdGlvbnMsIG51bGwpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMudW5saW5rU3luYyhwKVxuICAgIH1cbiAgfSBjYXRjaCAoZXIpIHtcbiAgICBpZiAoZXIuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIHJldHVyblxuICAgIH0gZWxzZSBpZiAoZXIuY29kZSA9PT0gJ0VQRVJNJykge1xuICAgICAgcmV0dXJuIGlzV2luZG93cyA/IGZpeFdpbkVQRVJNU3luYyhwLCBvcHRpb25zLCBlcikgOiBybWRpclN5bmMocCwgb3B0aW9ucywgZXIpXG4gICAgfSBlbHNlIGlmIChlci5jb2RlICE9PSAnRUlTRElSJykge1xuICAgICAgdGhyb3cgZXJcbiAgICB9XG4gICAgcm1kaXJTeW5jKHAsIG9wdGlvbnMsIGVyKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJtZGlyU3luYyAocCwgb3B0aW9ucywgb3JpZ2luYWxFcikge1xuICBhc3NlcnQocClcbiAgYXNzZXJ0KG9wdGlvbnMpXG5cbiAgdHJ5IHtcbiAgICBvcHRpb25zLnJtZGlyU3luYyhwKVxuICB9IGNhdGNoIChlcikge1xuICAgIGlmIChlci5jb2RlID09PSAnRU5PVERJUicpIHtcbiAgICAgIHRocm93IG9yaWdpbmFsRXJcbiAgICB9IGVsc2UgaWYgKGVyLmNvZGUgPT09ICdFTk9URU1QVFknIHx8IGVyLmNvZGUgPT09ICdFRVhJU1QnIHx8IGVyLmNvZGUgPT09ICdFUEVSTScpIHtcbiAgICAgIHJta2lkc1N5bmMocCwgb3B0aW9ucylcbiAgICB9IGVsc2UgaWYgKGVyLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICB0aHJvdyBlclxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBybWtpZHNTeW5jIChwLCBvcHRpb25zKSB7XG4gIGFzc2VydChwKVxuICBhc3NlcnQob3B0aW9ucylcbiAgb3B0aW9ucy5yZWFkZGlyU3luYyhwKS5mb3JFYWNoKGYgPT4gcmltcmFmU3luYyhwYXRoLmpvaW4ocCwgZiksIG9wdGlvbnMpKVxuXG4gIGlmIChpc1dpbmRvd3MpIHtcbiAgICAvLyBXZSBvbmx5IGVuZCB1cCBoZXJlIG9uY2Ugd2UgZ290IEVOT1RFTVBUWSBhdCBsZWFzdCBvbmNlLCBhbmRcbiAgICAvLyBhdCB0aGlzIHBvaW50LCB3ZSBhcmUgZ3VhcmFudGVlZCB0byBoYXZlIHJlbW92ZWQgYWxsIHRoZSBraWRzLlxuICAgIC8vIFNvLCB3ZSBrbm93IHRoYXQgaXQgd29uJ3QgYmUgRU5PRU5UIG9yIEVOT1RESVIgb3IgYW55dGhpbmcgZWxzZS5cbiAgICAvLyB0cnkgcmVhbGx5IGhhcmQgdG8gZGVsZXRlIHN0dWZmIG9uIHdpbmRvd3MsIGJlY2F1c2UgaXQgaGFzIGFcbiAgICAvLyBQUk9GT1VORExZIGFubm95aW5nIGhhYml0IG9mIG5vdCBjbG9zaW5nIGhhbmRsZXMgcHJvbXB0bHkgd2hlblxuICAgIC8vIGZpbGVzIGFyZSBkZWxldGVkLCByZXN1bHRpbmcgaW4gc3B1cmlvdXMgRU5PVEVNUFRZIGVycm9ycy5cbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpXG4gICAgZG8ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmV0ID0gb3B0aW9ucy5ybWRpclN5bmMocCwgb3B0aW9ucylcbiAgICAgICAgcmV0dXJuIHJldFxuICAgICAgfSBjYXRjaCB7fVxuICAgIH0gd2hpbGUgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPCA1MDApIC8vIGdpdmUgdXAgYWZ0ZXIgNTAwbXNcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByZXQgPSBvcHRpb25zLnJtZGlyU3luYyhwLCBvcHRpb25zKVxuICAgIHJldHVybiByZXRcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJpbXJhZlxucmltcmFmLnN5bmMgPSByaW1yYWZTeW5jXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tQ2FsbGJhY2tcbmNvbnN0IHJpbXJhZiA9IHJlcXVpcmUoJy4vcmltcmFmJylcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHJlbW92ZTogdShyaW1yYWYpLFxuICByZW1vdmVTeW5jOiByaW1yYWYuc3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbmNvbnN0IHJlbW92ZSA9IHJlcXVpcmUoJy4uL3JlbW92ZScpXG5cbmNvbnN0IGVtcHR5RGlyID0gdShmdW5jdGlvbiBlbXB0eURpciAoZGlyLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9XG4gIGZzLnJlYWRkaXIoZGlyLCAoZXJyLCBpdGVtcykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBta2Rpci5ta2RpcnMoZGlyLCBjYWxsYmFjaylcblxuICAgIGl0ZW1zID0gaXRlbXMubWFwKGl0ZW0gPT4gcGF0aC5qb2luKGRpciwgaXRlbSkpXG5cbiAgICBkZWxldGVJdGVtKClcblxuICAgIGZ1bmN0aW9uIGRlbGV0ZUl0ZW0gKCkge1xuICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zLnBvcCgpXG4gICAgICBpZiAoIWl0ZW0pIHJldHVybiBjYWxsYmFjaygpXG4gICAgICByZW1vdmUucmVtb3ZlKGl0ZW0sIGVyciA9PiB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgIGRlbGV0ZUl0ZW0oKVxuICAgICAgfSlcbiAgICB9XG4gIH0pXG59KVxuXG5mdW5jdGlvbiBlbXB0eURpclN5bmMgKGRpcikge1xuICBsZXQgaXRlbXNcbiAgdHJ5IHtcbiAgICBpdGVtcyA9IGZzLnJlYWRkaXJTeW5jKGRpcilcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG1rZGlyLm1rZGlyc1N5bmMoZGlyKVxuICB9XG5cbiAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICBpdGVtID0gcGF0aC5qb2luKGRpciwgaXRlbSlcbiAgICByZW1vdmUucmVtb3ZlU3luYyhpdGVtKVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZW1wdHlEaXJTeW5jLFxuICBlbXB0eWRpclN5bmM6IGVtcHR5RGlyU3luYyxcbiAgZW1wdHlEaXIsXG4gIGVtcHR5ZGlyOiBlbXB0eURpclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcblxuZnVuY3Rpb24gY3JlYXRlRmlsZSAoZmlsZSwgY2FsbGJhY2spIHtcbiAgZnVuY3Rpb24gbWFrZUZpbGUgKCkge1xuICAgIGZzLndyaXRlRmlsZShmaWxlLCAnJywgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICBjYWxsYmFjaygpXG4gICAgfSlcbiAgfVxuXG4gIGZzLnN0YXQoZmlsZSwgKGVyciwgc3RhdHMpID0+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBoYW5kbGUtY2FsbGJhY2stZXJyXG4gICAgaWYgKCFlcnIgJiYgc3RhdHMuaXNGaWxlKCkpIHJldHVybiBjYWxsYmFjaygpXG4gICAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGUpXG4gICAgZnMuc3RhdChkaXIsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIC8vIGlmIHRoZSBkaXJlY3RvcnkgZG9lc24ndCBleGlzdCwgbWFrZSBpdFxuICAgICAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgcmV0dXJuIG1rZGlyLm1rZGlycyhkaXIsIGVyciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICAgICAgbWFrZUZpbGUoKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIG1ha2VGaWxlKClcbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBwYXJlbnQgaXMgbm90IGEgZGlyZWN0b3J5XG4gICAgICAgIC8vIFRoaXMgaXMganVzdCB0byBjYXVzZSBhbiBpbnRlcm5hbCBFTk9URElSIGVycm9yIHRvIGJlIHRocm93blxuICAgICAgICBmcy5yZWFkZGlyKGRpciwgZXJyID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbGVTeW5jIChmaWxlKSB7XG4gIGxldCBzdGF0c1xuICB0cnkge1xuICAgIHN0YXRzID0gZnMuc3RhdFN5bmMoZmlsZSlcbiAgfSBjYXRjaCB7fVxuICBpZiAoc3RhdHMgJiYgc3RhdHMuaXNGaWxlKCkpIHJldHVyblxuXG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShmaWxlKVxuICB0cnkge1xuICAgIGlmICghZnMuc3RhdFN5bmMoZGlyKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAvLyBwYXJlbnQgaXMgbm90IGEgZGlyZWN0b3J5XG4gICAgICAvLyBUaGlzIGlzIGp1c3QgdG8gY2F1c2UgYW4gaW50ZXJuYWwgRU5PVERJUiBlcnJvciB0byBiZSB0aHJvd25cbiAgICAgIGZzLnJlYWRkaXJTeW5jKGRpcilcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIElmIHRoZSBzdGF0IGNhbGwgYWJvdmUgZmFpbGVkIGJlY2F1c2UgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgaXRcbiAgICBpZiAoZXJyICYmIGVyci5jb2RlID09PSAnRU5PRU5UJykgbWtkaXIubWtkaXJzU3luYyhkaXIpXG4gICAgZWxzZSB0aHJvdyBlcnJcbiAgfVxuXG4gIGZzLndyaXRlRmlsZVN5bmMoZmlsZSwgJycpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjcmVhdGVGaWxlOiB1KGNyZWF0ZUZpbGUpLFxuICBjcmVhdGVGaWxlU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbmNvbnN0IHBhdGhFeGlzdHMgPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpLnBhdGhFeGlzdHNcblxuZnVuY3Rpb24gY3JlYXRlTGluayAoc3JjcGF0aCwgZHN0cGF0aCwgY2FsbGJhY2spIHtcbiAgZnVuY3Rpb24gbWFrZUxpbmsgKHNyY3BhdGgsIGRzdHBhdGgpIHtcbiAgICBmcy5saW5rKHNyY3BhdGgsIGRzdHBhdGgsIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgY2FsbGJhY2sobnVsbClcbiAgICB9KVxuICB9XG5cbiAgcGF0aEV4aXN0cyhkc3RwYXRoLCAoZXJyLCBkZXN0aW5hdGlvbkV4aXN0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgaWYgKGRlc3RpbmF0aW9uRXhpc3RzKSByZXR1cm4gY2FsbGJhY2sobnVsbClcbiAgICBmcy5sc3RhdChzcmNwYXRoLCAoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGVyci5tZXNzYWdlID0gZXJyLm1lc3NhZ2UucmVwbGFjZSgnbHN0YXQnLCAnZW5zdXJlTGluaycpXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICAgICAgcGF0aEV4aXN0cyhkaXIsIChlcnIsIGRpckV4aXN0cykgPT4ge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICBpZiAoZGlyRXhpc3RzKSByZXR1cm4gbWFrZUxpbmsoc3JjcGF0aCwgZHN0cGF0aClcbiAgICAgICAgbWtkaXIubWtkaXJzKGRpciwgZXJyID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICAgIG1ha2VMaW5rKHNyY3BhdGgsIGRzdHBhdGgpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxpbmtTeW5jIChzcmNwYXRoLCBkc3RwYXRoKSB7XG4gIGNvbnN0IGRlc3RpbmF0aW9uRXhpc3RzID0gZnMuZXhpc3RzU3luYyhkc3RwYXRoKVxuICBpZiAoZGVzdGluYXRpb25FeGlzdHMpIHJldHVybiB1bmRlZmluZWRcblxuICB0cnkge1xuICAgIGZzLmxzdGF0U3luYyhzcmNwYXRoKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnIubWVzc2FnZSA9IGVyci5tZXNzYWdlLnJlcGxhY2UoJ2xzdGF0JywgJ2Vuc3VyZUxpbmsnKVxuICAgIHRocm93IGVyclxuICB9XG5cbiAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gIGNvbnN0IGRpckV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoZGlyKVxuICBpZiAoZGlyRXhpc3RzKSByZXR1cm4gZnMubGlua1N5bmMoc3JjcGF0aCwgZHN0cGF0aClcbiAgbWtkaXIubWtkaXJzU3luYyhkaXIpXG5cbiAgcmV0dXJuIGZzLmxpbmtTeW5jKHNyY3BhdGgsIGRzdHBhdGgpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjcmVhdGVMaW5rOiB1KGNyZWF0ZUxpbmspLFxuICBjcmVhdGVMaW5rU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHBhdGhFeGlzdHMgPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpLnBhdGhFeGlzdHNcblxuLyoqXG4gKiBGdW5jdGlvbiB0aGF0IHJldHVybnMgdHdvIHR5cGVzIG9mIHBhdGhzLCBvbmUgcmVsYXRpdmUgdG8gc3ltbGluaywgYW5kIG9uZVxuICogcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIENoZWNrcyBpZiBwYXRoIGlzIGFic29sdXRlIG9yXG4gKiByZWxhdGl2ZS4gSWYgdGhlIHBhdGggaXMgcmVsYXRpdmUsIHRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBwYXRoIGlzXG4gKiByZWxhdGl2ZSB0byBzeW1saW5rIG9yIHJlbGF0aXZlIHRvIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIFRoaXMgaXMgYW5cbiAqIGluaXRpYXRpdmUgdG8gZmluZCBhIHNtYXJ0ZXIgYHNyY3BhdGhgIHRvIHN1cHBseSB3aGVuIGJ1aWxkaW5nIHN5bWxpbmtzLlxuICogVGhpcyBhbGxvd3MgeW91IHRvIGRldGVybWluZSB3aGljaCBwYXRoIHRvIHVzZSBvdXQgb2Ygb25lIG9mIHRocmVlIHBvc3NpYmxlXG4gKiB0eXBlcyBvZiBzb3VyY2UgcGF0aHMuIFRoZSBmaXJzdCBpcyBhbiBhYnNvbHV0ZSBwYXRoLiBUaGlzIGlzIGRldGVjdGVkIGJ5XG4gKiBgcGF0aC5pc0Fic29sdXRlKClgLiBXaGVuIGFuIGFic29sdXRlIHBhdGggaXMgcHJvdmlkZWQsIGl0IGlzIGNoZWNrZWQgdG9cbiAqIHNlZSBpZiBpdCBleGlzdHMuIElmIGl0IGRvZXMgaXQncyB1c2VkLCBpZiBub3QgYW4gZXJyb3IgaXMgcmV0dXJuZWRcbiAqIChjYWxsYmFjaykvIHRocm93biAoc3luYykuIFRoZSBvdGhlciB0d28gb3B0aW9ucyBmb3IgYHNyY3BhdGhgIGFyZSBhXG4gKiByZWxhdGl2ZSB1cmwuIEJ5IGRlZmF1bHQgTm9kZSdzIGBmcy5zeW1saW5rYCB3b3JrcyBieSBjcmVhdGluZyBhIHN5bWxpbmtcbiAqIHVzaW5nIGBkc3RwYXRoYCBhbmQgZXhwZWN0cyB0aGUgYHNyY3BhdGhgIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBuZXdseVxuICogY3JlYXRlZCBzeW1saW5rLiBJZiB5b3UgcHJvdmlkZSBhIGBzcmNwYXRoYCB0aGF0IGRvZXMgbm90IGV4aXN0IG9uIHRoZSBmaWxlXG4gKiBzeXN0ZW0gaXQgcmVzdWx0cyBpbiBhIGJyb2tlbiBzeW1saW5rLiBUbyBtaW5pbWl6ZSB0aGlzLCB0aGUgZnVuY3Rpb25cbiAqIGNoZWNrcyB0byBzZWUgaWYgdGhlICdyZWxhdGl2ZSB0byBzeW1saW5rJyBzb3VyY2UgZmlsZSBleGlzdHMsIGFuZCBpZiBpdFxuICogZG9lcyBpdCB3aWxsIHVzZSBpdC4gSWYgaXQgZG9lcyBub3QsIGl0IGNoZWNrcyBpZiB0aGVyZSdzIGEgZmlsZSB0aGF0XG4gKiBleGlzdHMgdGhhdCBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSwgaWYgZG9lcyBpdHMgdXNlZC5cbiAqIFRoaXMgcHJlc2VydmVzIHRoZSBleHBlY3RhdGlvbnMgb2YgdGhlIG9yaWdpbmFsIGZzLnN5bWxpbmsgc3BlYyBhbmQgYWRkc1xuICogdGhlIGFiaWxpdHkgdG8gcGFzcyBpbiBgcmVsYXRpdmUgdG8gY3VycmVudCB3b3JraW5nIGRpcmVjb3RyeWAgcGF0aHMuXG4gKi9cblxuZnVuY3Rpb24gc3ltbGlua1BhdGhzIChzcmNwYXRoLCBkc3RwYXRoLCBjYWxsYmFjaykge1xuICBpZiAocGF0aC5pc0Fic29sdXRlKHNyY3BhdGgpKSB7XG4gICAgcmV0dXJuIGZzLmxzdGF0KHNyY3BhdGgsIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgZXJyLm1lc3NhZ2UgPSBlcnIubWVzc2FnZS5yZXBsYWNlKCdsc3RhdCcsICdlbnN1cmVTeW1saW5rJylcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCB7XG4gICAgICAgIHRvQ3dkOiBzcmNwYXRoLFxuICAgICAgICB0b0RzdDogc3JjcGF0aFxuICAgICAgfSlcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRzdGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICAgIGNvbnN0IHJlbGF0aXZlVG9Ec3QgPSBwYXRoLmpvaW4oZHN0ZGlyLCBzcmNwYXRoKVxuICAgIHJldHVybiBwYXRoRXhpc3RzKHJlbGF0aXZlVG9Ec3QsIChlcnIsIGV4aXN0cykgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIGlmIChleGlzdHMpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHtcbiAgICAgICAgICB0b0N3ZDogcmVsYXRpdmVUb0RzdCxcbiAgICAgICAgICB0b0RzdDogc3JjcGF0aFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZzLmxzdGF0KHNyY3BhdGgsIChlcnIpID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBlcnIubWVzc2FnZSA9IGVyci5tZXNzYWdlLnJlcGxhY2UoJ2xzdGF0JywgJ2Vuc3VyZVN5bWxpbmsnKVxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHtcbiAgICAgICAgICAgIHRvQ3dkOiBzcmNwYXRoLFxuICAgICAgICAgICAgdG9Ec3Q6IHBhdGgucmVsYXRpdmUoZHN0ZGlyLCBzcmNwYXRoKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBzeW1saW5rUGF0aHNTeW5jIChzcmNwYXRoLCBkc3RwYXRoKSB7XG4gIGxldCBleGlzdHNcbiAgaWYgKHBhdGguaXNBYnNvbHV0ZShzcmNwYXRoKSkge1xuICAgIGV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoc3JjcGF0aClcbiAgICBpZiAoIWV4aXN0cykgdGhyb3cgbmV3IEVycm9yKCdhYnNvbHV0ZSBzcmNwYXRoIGRvZXMgbm90IGV4aXN0JylcbiAgICByZXR1cm4ge1xuICAgICAgdG9Dd2Q6IHNyY3BhdGgsXG4gICAgICB0b0RzdDogc3JjcGF0aFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkc3RkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcbiAgICBjb25zdCByZWxhdGl2ZVRvRHN0ID0gcGF0aC5qb2luKGRzdGRpciwgc3JjcGF0aClcbiAgICBleGlzdHMgPSBmcy5leGlzdHNTeW5jKHJlbGF0aXZlVG9Ec3QpXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9Dd2Q6IHJlbGF0aXZlVG9Ec3QsXG4gICAgICAgIHRvRHN0OiBzcmNwYXRoXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoc3JjcGF0aClcbiAgICAgIGlmICghZXhpc3RzKSB0aHJvdyBuZXcgRXJyb3IoJ3JlbGF0aXZlIHNyY3BhdGggZG9lcyBub3QgZXhpc3QnKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9Dd2Q6IHNyY3BhdGgsXG4gICAgICAgIHRvRHN0OiBwYXRoLnJlbGF0aXZlKGRzdGRpciwgc3JjcGF0aClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN5bWxpbmtQYXRocyxcbiAgc3ltbGlua1BhdGhzU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcblxuZnVuY3Rpb24gc3ltbGlua1R5cGUgKHNyY3BhdGgsIHR5cGUsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrID0gKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSA/IHR5cGUgOiBjYWxsYmFja1xuICB0eXBlID0gKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSA/IGZhbHNlIDogdHlwZVxuICBpZiAodHlwZSkgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHR5cGUpXG4gIGZzLmxzdGF0KHNyY3BhdGgsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKG51bGwsICdmaWxlJylcbiAgICB0eXBlID0gKHN0YXRzICYmIHN0YXRzLmlzRGlyZWN0b3J5KCkpID8gJ2RpcicgOiAnZmlsZSdcbiAgICBjYWxsYmFjayhudWxsLCB0eXBlKVxuICB9KVxufVxuXG5mdW5jdGlvbiBzeW1saW5rVHlwZVN5bmMgKHNyY3BhdGgsIHR5cGUpIHtcbiAgbGV0IHN0YXRzXG5cbiAgaWYgKHR5cGUpIHJldHVybiB0eXBlXG4gIHRyeSB7XG4gICAgc3RhdHMgPSBmcy5sc3RhdFN5bmMoc3JjcGF0aClcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICdmaWxlJ1xuICB9XG4gIHJldHVybiAoc3RhdHMgJiYgc3RhdHMuaXNEaXJlY3RvcnkoKSkgPyAnZGlyJyA6ICdmaWxlJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3ltbGlua1R5cGUsXG4gIHN5bWxpbmtUeXBlU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IF9ta2RpcnMgPSByZXF1aXJlKCcuLi9ta2RpcnMnKVxuY29uc3QgbWtkaXJzID0gX21rZGlycy5ta2RpcnNcbmNvbnN0IG1rZGlyc1N5bmMgPSBfbWtkaXJzLm1rZGlyc1N5bmNcblxuY29uc3QgX3N5bWxpbmtQYXRocyA9IHJlcXVpcmUoJy4vc3ltbGluay1wYXRocycpXG5jb25zdCBzeW1saW5rUGF0aHMgPSBfc3ltbGlua1BhdGhzLnN5bWxpbmtQYXRoc1xuY29uc3Qgc3ltbGlua1BhdGhzU3luYyA9IF9zeW1saW5rUGF0aHMuc3ltbGlua1BhdGhzU3luY1xuXG5jb25zdCBfc3ltbGlua1R5cGUgPSByZXF1aXJlKCcuL3N5bWxpbmstdHlwZScpXG5jb25zdCBzeW1saW5rVHlwZSA9IF9zeW1saW5rVHlwZS5zeW1saW5rVHlwZVxuY29uc3Qgc3ltbGlua1R5cGVTeW5jID0gX3N5bWxpbmtUeXBlLnN5bWxpbmtUeXBlU3luY1xuXG5jb25zdCBwYXRoRXhpc3RzID0gcmVxdWlyZSgnLi4vcGF0aC1leGlzdHMnKS5wYXRoRXhpc3RzXG5cbmZ1bmN0aW9uIGNyZWF0ZVN5bWxpbmsgKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrID0gKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSA/IHR5cGUgOiBjYWxsYmFja1xuICB0eXBlID0gKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSA/IGZhbHNlIDogdHlwZVxuXG4gIHBhdGhFeGlzdHMoZHN0cGF0aCwgKGVyciwgZGVzdGluYXRpb25FeGlzdHMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgIGlmIChkZXN0aW5hdGlvbkV4aXN0cykgcmV0dXJuIGNhbGxiYWNrKG51bGwpXG4gICAgc3ltbGlua1BhdGhzKHNyY3BhdGgsIGRzdHBhdGgsIChlcnIsIHJlbGF0aXZlKSA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgc3JjcGF0aCA9IHJlbGF0aXZlLnRvRHN0XG4gICAgICBzeW1saW5rVHlwZShyZWxhdGl2ZS50b0N3ZCwgdHlwZSwgKGVyciwgdHlwZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcbiAgICAgICAgcGF0aEV4aXN0cyhkaXIsIChlcnIsIGRpckV4aXN0cykgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgaWYgKGRpckV4aXN0cykgcmV0dXJuIGZzLnN5bWxpbmsoc3JjcGF0aCwgZHN0cGF0aCwgdHlwZSwgY2FsbGJhY2spXG4gICAgICAgICAgbWtkaXJzKGRpciwgZXJyID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgICBmcy5zeW1saW5rKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUsIGNhbGxiYWNrKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN5bWxpbmtTeW5jIChzcmNwYXRoLCBkc3RwYXRoLCB0eXBlKSB7XG4gIGNvbnN0IGRlc3RpbmF0aW9uRXhpc3RzID0gZnMuZXhpc3RzU3luYyhkc3RwYXRoKVxuICBpZiAoZGVzdGluYXRpb25FeGlzdHMpIHJldHVybiB1bmRlZmluZWRcblxuICBjb25zdCByZWxhdGl2ZSA9IHN5bWxpbmtQYXRoc1N5bmMoc3JjcGF0aCwgZHN0cGF0aClcbiAgc3JjcGF0aCA9IHJlbGF0aXZlLnRvRHN0XG4gIHR5cGUgPSBzeW1saW5rVHlwZVN5bmMocmVsYXRpdmUudG9Dd2QsIHR5cGUpXG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICBjb25zdCBleGlzdHMgPSBmcy5leGlzdHNTeW5jKGRpcilcbiAgaWYgKGV4aXN0cykgcmV0dXJuIGZzLnN5bWxpbmtTeW5jKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUpXG4gIG1rZGlyc1N5bmMoZGlyKVxuICByZXR1cm4gZnMuc3ltbGlua1N5bmMoc3JjcGF0aCwgZHN0cGF0aCwgdHlwZSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNyZWF0ZVN5bWxpbms6IHUoY3JlYXRlU3ltbGluayksXG4gIGNyZWF0ZVN5bWxpbmtTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZpbGUgPSByZXF1aXJlKCcuL2ZpbGUnKVxuY29uc3QgbGluayA9IHJlcXVpcmUoJy4vbGluaycpXG5jb25zdCBzeW1saW5rID0gcmVxdWlyZSgnLi9zeW1saW5rJylcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGZpbGVcbiAgY3JlYXRlRmlsZTogZmlsZS5jcmVhdGVGaWxlLFxuICBjcmVhdGVGaWxlU3luYzogZmlsZS5jcmVhdGVGaWxlU3luYyxcbiAgZW5zdXJlRmlsZTogZmlsZS5jcmVhdGVGaWxlLFxuICBlbnN1cmVGaWxlU3luYzogZmlsZS5jcmVhdGVGaWxlU3luYyxcbiAgLy8gbGlua1xuICBjcmVhdGVMaW5rOiBsaW5rLmNyZWF0ZUxpbmssXG4gIGNyZWF0ZUxpbmtTeW5jOiBsaW5rLmNyZWF0ZUxpbmtTeW5jLFxuICBlbnN1cmVMaW5rOiBsaW5rLmNyZWF0ZUxpbmssXG4gIGVuc3VyZUxpbmtTeW5jOiBsaW5rLmNyZWF0ZUxpbmtTeW5jLFxuICAvLyBzeW1saW5rXG4gIGNyZWF0ZVN5bWxpbms6IHN5bWxpbmsuY3JlYXRlU3ltbGluayxcbiAgY3JlYXRlU3ltbGlua1N5bmM6IHN5bWxpbmsuY3JlYXRlU3ltbGlua1N5bmMsXG4gIGVuc3VyZVN5bWxpbms6IHN5bWxpbmsuY3JlYXRlU3ltbGluayxcbiAgZW5zdXJlU3ltbGlua1N5bmM6IHN5bWxpbmsuY3JlYXRlU3ltbGlua1N5bmNcbn1cbiIsICJmdW5jdGlvbiBzdHJpbmdpZnkgKG9iaiwgeyBFT0wgPSAnXFxuJywgZmluYWxFT0wgPSB0cnVlLCByZXBsYWNlciA9IG51bGwsIHNwYWNlcyB9ID0ge30pIHtcbiAgY29uc3QgRU9GID0gZmluYWxFT0wgPyBFT0wgOiAnJ1xuICBjb25zdCBzdHIgPSBKU09OLnN0cmluZ2lmeShvYmosIHJlcGxhY2VyLCBzcGFjZXMpXG5cbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXG4vZywgRU9MKSArIEVPRlxufVxuXG5mdW5jdGlvbiBzdHJpcEJvbSAoY29udGVudCkge1xuICAvLyB3ZSBkbyB0aGlzIGJlY2F1c2UgSlNPTi5wYXJzZSB3b3VsZCBjb252ZXJ0IGl0IHRvIGEgdXRmOCBzdHJpbmcgaWYgZW5jb2Rpbmcgd2Fzbid0IHNwZWNpZmllZFxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGNvbnRlbnQpKSBjb250ZW50ID0gY29udGVudC50b1N0cmluZygndXRmOCcpXG4gIHJldHVybiBjb250ZW50LnJlcGxhY2UoL15cXHVGRUZGLywgJycpXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBzdHJpbmdpZnksIHN0cmlwQm9tIH1cbiIsICJsZXQgX2ZzXG50cnkge1xuICBfZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG59IGNhdGNoIChfKSB7XG4gIF9mcyA9IHJlcXVpcmUoJ2ZzJylcbn1cbmNvbnN0IHVuaXZlcnNhbGlmeSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpXG5jb25zdCB7IHN0cmluZ2lmeSwgc3RyaXBCb20gfSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuXG5hc3luYyBmdW5jdGlvbiBfcmVhZEZpbGUgKGZpbGUsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6IG9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHNob3VsZFRocm93ID0gJ3Rocm93cycgaW4gb3B0aW9ucyA/IG9wdGlvbnMudGhyb3dzIDogdHJ1ZVxuXG4gIGxldCBkYXRhID0gYXdhaXQgdW5pdmVyc2FsaWZ5LmZyb21DYWxsYmFjayhmcy5yZWFkRmlsZSkoZmlsZSwgb3B0aW9ucylcblxuICBkYXRhID0gc3RyaXBCb20oZGF0YSlcblxuICBsZXQgb2JqXG4gIHRyeSB7XG4gICAgb2JqID0gSlNPTi5wYXJzZShkYXRhLCBvcHRpb25zID8gb3B0aW9ucy5yZXZpdmVyIDogbnVsbClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgICBlcnIubWVzc2FnZSA9IGAke2ZpbGV9OiAke2Vyci5tZXNzYWdlfWBcbiAgICAgIHRocm93IGVyclxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmpcbn1cblxuY29uc3QgcmVhZEZpbGUgPSB1bml2ZXJzYWxpZnkuZnJvbVByb21pc2UoX3JlYWRGaWxlKVxuXG5mdW5jdGlvbiByZWFkRmlsZVN5bmMgKGZpbGUsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6IG9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHNob3VsZFRocm93ID0gJ3Rocm93cycgaW4gb3B0aW9ucyA/IG9wdGlvbnMudGhyb3dzIDogdHJ1ZVxuXG4gIHRyeSB7XG4gICAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZSwgb3B0aW9ucylcbiAgICBjb250ZW50ID0gc3RyaXBCb20oY29udGVudClcbiAgICByZXR1cm4gSlNPTi5wYXJzZShjb250ZW50LCBvcHRpb25zLnJldml2ZXIpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChzaG91bGRUaHJvdykge1xuICAgICAgZXJyLm1lc3NhZ2UgPSBgJHtmaWxlfTogJHtlcnIubWVzc2FnZX1gXG4gICAgICB0aHJvdyBlcnJcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gX3dyaXRlRmlsZSAoZmlsZSwgb2JqLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShvYmosIG9wdGlvbnMpXG5cbiAgYXdhaXQgdW5pdmVyc2FsaWZ5LmZyb21DYWxsYmFjayhmcy53cml0ZUZpbGUpKGZpbGUsIHN0ciwgb3B0aW9ucylcbn1cblxuY29uc3Qgd3JpdGVGaWxlID0gdW5pdmVyc2FsaWZ5LmZyb21Qcm9taXNlKF93cml0ZUZpbGUpXG5cbmZ1bmN0aW9uIHdyaXRlRmlsZVN5bmMgKGZpbGUsIG9iaiwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGZzID0gb3B0aW9ucy5mcyB8fCBfZnNcblxuICBjb25zdCBzdHIgPSBzdHJpbmdpZnkob2JqLCBvcHRpb25zKVxuICAvLyBub3Qgc3VyZSBpZiBmcy53cml0ZUZpbGVTeW5jIHJldHVybnMgYW55dGhpbmcsIGJ1dCBqdXN0IGluIGNhc2VcbiAgcmV0dXJuIGZzLndyaXRlRmlsZVN5bmMoZmlsZSwgc3RyLCBvcHRpb25zKVxufVxuXG5jb25zdCBqc29uZmlsZSA9IHtcbiAgcmVhZEZpbGUsXG4gIHJlYWRGaWxlU3luYyxcbiAgd3JpdGVGaWxlLFxuICB3cml0ZUZpbGVTeW5jXG59XG5cbm1vZHVsZS5leHBvcnRzID0ganNvbmZpbGVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QganNvbkZpbGUgPSByZXF1aXJlKCdqc29uZmlsZScpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBqc29uZmlsZSBleHBvcnRzXG4gIHJlYWRKc29uOiBqc29uRmlsZS5yZWFkRmlsZSxcbiAgcmVhZEpzb25TeW5jOiBqc29uRmlsZS5yZWFkRmlsZVN5bmMsXG4gIHdyaXRlSnNvbjoganNvbkZpbGUud3JpdGVGaWxlLFxuICB3cml0ZUpzb25TeW5jOiBqc29uRmlsZS53cml0ZUZpbGVTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tQ2FsbGJhY2tcbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgbWtkaXIgPSByZXF1aXJlKCcuLi9ta2RpcnMnKVxuY29uc3QgcGF0aEV4aXN0cyA9IHJlcXVpcmUoJy4uL3BhdGgtZXhpc3RzJykucGF0aEV4aXN0c1xuXG5mdW5jdGlvbiBvdXRwdXRGaWxlIChmaWxlLCBkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gZW5jb2RpbmdcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGUpXG4gIHBhdGhFeGlzdHMoZGlyLCAoZXJyLCBpdERvZXMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgIGlmIChpdERvZXMpIHJldHVybiBmcy53cml0ZUZpbGUoZmlsZSwgZGF0YSwgZW5jb2RpbmcsIGNhbGxiYWNrKVxuXG4gICAgbWtkaXIubWtkaXJzKGRpciwgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG5cbiAgICAgIGZzLndyaXRlRmlsZShmaWxlLCBkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gb3V0cHV0RmlsZVN5bmMgKGZpbGUsIC4uLmFyZ3MpIHtcbiAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGUpXG4gIGlmIChmcy5leGlzdHNTeW5jKGRpcikpIHtcbiAgICByZXR1cm4gZnMud3JpdGVGaWxlU3luYyhmaWxlLCAuLi5hcmdzKVxuICB9XG4gIG1rZGlyLm1rZGlyc1N5bmMoZGlyKVxuICBmcy53cml0ZUZpbGVTeW5jKGZpbGUsIC4uLmFyZ3MpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBvdXRwdXRGaWxlOiB1KG91dHB1dEZpbGUpLFxuICBvdXRwdXRGaWxlU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHN0cmluZ2lmeSB9ID0gcmVxdWlyZSgnanNvbmZpbGUvdXRpbHMnKVxuY29uc3QgeyBvdXRwdXRGaWxlIH0gPSByZXF1aXJlKCcuLi9vdXRwdXQnKVxuXG5hc3luYyBmdW5jdGlvbiBvdXRwdXRKc29uIChmaWxlLCBkYXRhLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qgc3RyID0gc3RyaW5naWZ5KGRhdGEsIG9wdGlvbnMpXG5cbiAgYXdhaXQgb3V0cHV0RmlsZShmaWxlLCBzdHIsIG9wdGlvbnMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3V0cHV0SnNvblxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHN0cmluZ2lmeSB9ID0gcmVxdWlyZSgnanNvbmZpbGUvdXRpbHMnKVxuY29uc3QgeyBvdXRwdXRGaWxlU3luYyB9ID0gcmVxdWlyZSgnLi4vb3V0cHV0JylcblxuZnVuY3Rpb24gb3V0cHV0SnNvblN5bmMgKGZpbGUsIGRhdGEsIG9wdGlvbnMpIHtcbiAgY29uc3Qgc3RyID0gc3RyaW5naWZ5KGRhdGEsIG9wdGlvbnMpXG5cbiAgb3V0cHV0RmlsZVN5bmMoZmlsZSwgc3RyLCBvcHRpb25zKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG91dHB1dEpzb25TeW5jXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuY29uc3QganNvbkZpbGUgPSByZXF1aXJlKCcuL2pzb25maWxlJylcblxuanNvbkZpbGUub3V0cHV0SnNvbiA9IHUocmVxdWlyZSgnLi9vdXRwdXQtanNvbicpKVxuanNvbkZpbGUub3V0cHV0SnNvblN5bmMgPSByZXF1aXJlKCcuL291dHB1dC1qc29uLXN5bmMnKVxuLy8gYWxpYXNlc1xuanNvbkZpbGUub3V0cHV0SlNPTiA9IGpzb25GaWxlLm91dHB1dEpzb25cbmpzb25GaWxlLm91dHB1dEpTT05TeW5jID0ganNvbkZpbGUub3V0cHV0SnNvblN5bmNcbmpzb25GaWxlLndyaXRlSlNPTiA9IGpzb25GaWxlLndyaXRlSnNvblxuanNvbkZpbGUud3JpdGVKU09OU3luYyA9IGpzb25GaWxlLndyaXRlSnNvblN5bmNcbmpzb25GaWxlLnJlYWRKU09OID0ganNvbkZpbGUucmVhZEpzb25cbmpzb25GaWxlLnJlYWRKU09OU3luYyA9IGpzb25GaWxlLnJlYWRKc29uU3luY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGpzb25GaWxlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgY29weVN5bmMgPSByZXF1aXJlKCcuLi9jb3B5LXN5bmMnKS5jb3B5U3luY1xuY29uc3QgcmVtb3ZlU3luYyA9IHJlcXVpcmUoJy4uL3JlbW92ZScpLnJlbW92ZVN5bmNcbmNvbnN0IG1rZGlycFN5bmMgPSByZXF1aXJlKCcuLi9ta2RpcnMnKS5ta2RpcnBTeW5jXG5jb25zdCBzdGF0ID0gcmVxdWlyZSgnLi4vdXRpbC9zdGF0JylcblxuZnVuY3Rpb24gbW92ZVN5bmMgKHNyYywgZGVzdCwgb3B0cykge1xuICBvcHRzID0gb3B0cyB8fCB7fVxuICBjb25zdCBvdmVyd3JpdGUgPSBvcHRzLm92ZXJ3cml0ZSB8fCBvcHRzLmNsb2JiZXIgfHwgZmFsc2VcblxuICBjb25zdCB7IHNyY1N0YXQgfSA9IHN0YXQuY2hlY2tQYXRoc1N5bmMoc3JjLCBkZXN0LCAnbW92ZScpXG4gIHN0YXQuY2hlY2tQYXJlbnRQYXRoc1N5bmMoc3JjLCBzcmNTdGF0LCBkZXN0LCAnbW92ZScpXG4gIG1rZGlycFN5bmMocGF0aC5kaXJuYW1lKGRlc3QpKVxuICByZXR1cm4gZG9SZW5hbWUoc3JjLCBkZXN0LCBvdmVyd3JpdGUpXG59XG5cbmZ1bmN0aW9uIGRvUmVuYW1lIChzcmMsIGRlc3QsIG92ZXJ3cml0ZSkge1xuICBpZiAob3ZlcndyaXRlKSB7XG4gICAgcmVtb3ZlU3luYyhkZXN0KVxuICAgIHJldHVybiByZW5hbWUoc3JjLCBkZXN0LCBvdmVyd3JpdGUpXG4gIH1cbiAgaWYgKGZzLmV4aXN0c1N5bmMoZGVzdCkpIHRocm93IG5ldyBFcnJvcignZGVzdCBhbHJlYWR5IGV4aXN0cy4nKVxuICByZXR1cm4gcmVuYW1lKHNyYywgZGVzdCwgb3ZlcndyaXRlKVxufVxuXG5mdW5jdGlvbiByZW5hbWUgKHNyYywgZGVzdCwgb3ZlcndyaXRlKSB7XG4gIHRyeSB7XG4gICAgZnMucmVuYW1lU3luYyhzcmMsIGRlc3QpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIuY29kZSAhPT0gJ0VYREVWJykgdGhyb3cgZXJyXG4gICAgcmV0dXJuIG1vdmVBY3Jvc3NEZXZpY2Uoc3JjLCBkZXN0LCBvdmVyd3JpdGUpXG4gIH1cbn1cblxuZnVuY3Rpb24gbW92ZUFjcm9zc0RldmljZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUpIHtcbiAgY29uc3Qgb3B0cyA9IHtcbiAgICBvdmVyd3JpdGUsXG4gICAgZXJyb3JPbkV4aXN0OiB0cnVlXG4gIH1cbiAgY29weVN5bmMoc3JjLCBkZXN0LCBvcHRzKVxuICByZXR1cm4gcmVtb3ZlU3luYyhzcmMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbW92ZVN5bmNcbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1vdmVTeW5jOiByZXF1aXJlKCcuL21vdmUtc3luYycpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgY29weSA9IHJlcXVpcmUoJy4uL2NvcHknKS5jb3B5XG5jb25zdCByZW1vdmUgPSByZXF1aXJlKCcuLi9yZW1vdmUnKS5yZW1vdmVcbmNvbnN0IG1rZGlycCA9IHJlcXVpcmUoJy4uL21rZGlycycpLm1rZGlycFxuY29uc3QgcGF0aEV4aXN0cyA9IHJlcXVpcmUoJy4uL3BhdGgtZXhpc3RzJykucGF0aEV4aXN0c1xuY29uc3Qgc3RhdCA9IHJlcXVpcmUoJy4uL3V0aWwvc3RhdCcpXG5cbmZ1bmN0aW9uIG1vdmUgKHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBvcHRzXG4gICAgb3B0cyA9IHt9XG4gIH1cblxuICBjb25zdCBvdmVyd3JpdGUgPSBvcHRzLm92ZXJ3cml0ZSB8fCBvcHRzLmNsb2JiZXIgfHwgZmFsc2VcblxuICBzdGF0LmNoZWNrUGF0aHMoc3JjLCBkZXN0LCAnbW92ZScsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBjb25zdCB7IHNyY1N0YXQgfSA9IHN0YXRzXG4gICAgc3RhdC5jaGVja1BhcmVudFBhdGhzKHNyYywgc3JjU3RhdCwgZGVzdCwgJ21vdmUnLCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIG1rZGlycChwYXRoLmRpcm5hbWUoZGVzdCksIGVyciA9PiB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICAgIHJldHVybiBkb1JlbmFtZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSwgY2IpXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGRvUmVuYW1lIChzcmMsIGRlc3QsIG92ZXJ3cml0ZSwgY2IpIHtcbiAgaWYgKG92ZXJ3cml0ZSkge1xuICAgIHJldHVybiByZW1vdmUoZGVzdCwgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICByZXR1cm4gcmVuYW1lKHNyYywgZGVzdCwgb3ZlcndyaXRlLCBjYilcbiAgICB9KVxuICB9XG4gIHBhdGhFeGlzdHMoZGVzdCwgKGVyciwgZGVzdEV4aXN0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgaWYgKGRlc3RFeGlzdHMpIHJldHVybiBjYihuZXcgRXJyb3IoJ2Rlc3QgYWxyZWFkeSBleGlzdHMuJykpXG4gICAgcmV0dXJuIHJlbmFtZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSwgY2IpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJlbmFtZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGNiKSB7XG4gIGZzLnJlbmFtZShzcmMsIGRlc3QsIGVyciA9PiB7XG4gICAgaWYgKCFlcnIpIHJldHVybiBjYigpXG4gICAgaWYgKGVyci5jb2RlICE9PSAnRVhERVYnKSByZXR1cm4gY2IoZXJyKVxuICAgIHJldHVybiBtb3ZlQWNyb3NzRGV2aWNlKHNyYywgZGVzdCwgb3ZlcndyaXRlLCBjYilcbiAgfSlcbn1cblxuZnVuY3Rpb24gbW92ZUFjcm9zc0RldmljZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGNiKSB7XG4gIGNvbnN0IG9wdHMgPSB7XG4gICAgb3ZlcndyaXRlLFxuICAgIGVycm9yT25FeGlzdDogdHJ1ZVxuICB9XG4gIGNvcHkoc3JjLCBkZXN0LCBvcHRzLCBlcnIgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgcmV0dXJuIHJlbW92ZShzcmMsIGNiKVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1vdmVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1vdmU6IHUocmVxdWlyZSgnLi9tb3ZlJykpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBFeHBvcnQgcHJvbWlzZWlmaWVkIGdyYWNlZnVsLWZzOlxuICAuLi5yZXF1aXJlKCcuL2ZzJyksXG4gIC8vIEV4cG9ydCBleHRyYSBtZXRob2RzOlxuICAuLi5yZXF1aXJlKCcuL2NvcHktc3luYycpLFxuICAuLi5yZXF1aXJlKCcuL2NvcHknKSxcbiAgLi4ucmVxdWlyZSgnLi9lbXB0eScpLFxuICAuLi5yZXF1aXJlKCcuL2Vuc3VyZScpLFxuICAuLi5yZXF1aXJlKCcuL2pzb24nKSxcbiAgLi4ucmVxdWlyZSgnLi9ta2RpcnMnKSxcbiAgLi4ucmVxdWlyZSgnLi9tb3ZlLXN5bmMnKSxcbiAgLi4ucmVxdWlyZSgnLi9tb3ZlJyksXG4gIC4uLnJlcXVpcmUoJy4vb3V0cHV0JyksXG4gIC4uLnJlcXVpcmUoJy4vcGF0aC1leGlzdHMnKSxcbiAgLi4ucmVxdWlyZSgnLi9yZW1vdmUnKVxufVxuXG4vLyBFeHBvcnQgZnMucHJvbWlzZXMgYXMgYSBnZXR0ZXIgcHJvcGVydHkgc28gdGhhdCB3ZSBkb24ndCB0cmlnZ2VyXG4vLyBFeHBlcmltZW50YWxXYXJuaW5nIGJlZm9yZSBmcy5wcm9taXNlcyBpcyBhY3R1YWxseSBhY2Nlc3NlZC5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKVxuaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZnMsICdwcm9taXNlcycpKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ3Byb21pc2VzJywge1xuICAgIGdldCAoKSB7IHJldHVybiBmcy5wcm9taXNlcyB9XG4gIH0pXG59XG4iLCAiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcblxuY29uc3QgQ0RLX09VVERJUl9QUkVGSVggPSAnY2RrLWludGVnLm91dCc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHNpbmdsZSBpbnRlZ3JhdGlvbiB0ZXN0XG4gKlxuICogVGhpcyB0eXBlIGlzIGEgZGF0YS1vbmx5IHN0cnVjdHVyZSwgc28gaXQgY2FuIHRyaXZpYWxseSBiZSBwYXNzZWQgdG8gd29ya2Vycy5cbiAqIERlcml2ZWQgYXR0cmlidXRlcyBhcmUgY2FsY3VsYXRlZCB1c2luZyB0aGUgYEludGVnVGVzdGAgY2xhc3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdUZXN0SW5mbyB7XG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBmaWxlIHRvIHJ1blxuICAgKlxuICAgKiBQYXRoIGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJvb3QgZGlyZWN0b3J5IHdlIGRpc2NvdmVyZWQgdGhpcyB0ZXN0IGZyb21cbiAgICpcbiAgICogUGF0aCBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICovXG4gIHJlYWRvbmx5IGRpc2NvdmVyeVJvb3Q6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZXJpdmVkIGluZm9ybWF0aW9uIGZvciBJbnRlZ1Rlc3RzXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnRlZ1Rlc3Qge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gcnVuXG4gICAqXG4gICAqIFBhdGggaXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZmlsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogUmVsYXRpdmUgcGF0aCB0byB0aGUgZmlsZSB0byBydW5cbiAgICpcbiAgICogUmVsYXRpdmUgZnJvbSB0aGUgXCJkaXNjb3Zlcnkgcm9vdFwiLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRpc2NvdmVyeVJlbGF0aXZlRmlsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGZpbGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhYnNvbHV0ZUZpbGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERpcmVjdG9yeSB0aGUgdGVzdCBpcyBpblxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEaXNwbGF5IG5hbWUgZm9yIHRoZSB0ZXN0XG4gICAqXG4gICAqIERlcGVuZHMgb24gdGhlIGRpc2NvdmVyeSBkaXJlY3RvcnkuXG4gICAqXG4gICAqIExvb2tzIGxpa2UgYGludGVnLm15dGVzdGAgb3IgYHBhY2thZ2UvdGVzdC9pbnRlZy5teXRlc3RgLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRlc3ROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggb2YgdGhlIHNuYXBzaG90IGRpcmVjdG9yeSBmb3IgdGhpcyB0ZXN0XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc25hcHNob3REaXI6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgdGVtcG9yYXJ5IG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoaXMgdGVzdFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRlbXBvcmFyeU91dHB1dERpcjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBpbmZvOiBJbnRlZ1Rlc3RJbmZvKSB7XG4gICAgdGhpcy5hYnNvbHV0ZUZpbGVOYW1lID0gcGF0aC5yZXNvbHZlKGluZm8uZmlsZU5hbWUpO1xuICAgIHRoaXMuZmlsZU5hbWUgPSBwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIGluZm8uZmlsZU5hbWUpO1xuXG4gICAgY29uc3QgcGFyc2VkID0gcGF0aC5wYXJzZSh0aGlzLmZpbGVOYW1lKTtcbiAgICB0aGlzLmRpc2NvdmVyeVJlbGF0aXZlRmlsZU5hbWUgPSBwYXRoLnJlbGF0aXZlKGluZm8uZGlzY292ZXJ5Um9vdCwgaW5mby5maWxlTmFtZSk7XG4gICAgdGhpcy5kaXJlY3RvcnkgPSBwYXJzZWQuZGlyO1xuXG4gICAgLy8gaWYgd2UgYXJlIHJ1bm5pbmcgaW4gYSBwYWNrYWdlIGRpcmVjdG9yeSB0aGVuIGp1c3QgdXNlIHRoZSBmaWxlTmFtZVxuICAgIC8vIGFzIHRoZSB0ZXN0bmFtZSwgYnV0IGlmIHdlIGFyZSBydW5uaW5nIGluIGEgcGFyZW50IGRpcmVjdG9yeSB3aXRoXG4gICAgLy8gbXVsdGlwbGUgcGFja2FnZXMgdGhlbiB1c2UgdGhlIGRpcmVjdG9yeS9maWxlbmFtZSBhcyB0aGUgdGVzdG5hbWVcbiAgICAvL1xuICAgIC8vIExvb2tzIGVpdGhlciBsaWtlIGBpbnRlZy5teXRlc3RgIG9yIGBwYWNrYWdlL3Rlc3QvaW50ZWcubXl0ZXN0YC5cbiAgICBjb25zdCByZWxEaXNjb3ZlcnlSb290ID0gcGF0aC5yZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBpbmZvLmRpc2NvdmVyeVJvb3QpO1xuICAgIHRoaXMudGVzdE5hbWUgPSB0aGlzLmRpcmVjdG9yeSA9PT0gcGF0aC5qb2luKHJlbERpc2NvdmVyeVJvb3QsICd0ZXN0JykgfHwgdGhpcy5kaXJlY3RvcnkgPT09IHBhdGguam9pbihyZWxEaXNjb3ZlcnlSb290KVxuICAgICAgPyBwYXJzZWQubmFtZVxuICAgICAgOiBwYXRoLmpvaW4ocGF0aC5yZWxhdGl2ZSh0aGlzLmluZm8uZGlzY292ZXJ5Um9vdCwgcGFyc2VkLmRpciksIHBhcnNlZC5uYW1lKTtcblxuICAgIGNvbnN0IG5ha2VkVGVzdE5hbWUgPSBwYXJzZWQubmFtZS5zbGljZSg2KTsgLy8gTGVhdmUgbmFtZSB3aXRob3V0ICdpbnRlZy4nIGFuZCAnLnRzJ1xuICAgIHRoaXMuc25hcHNob3REaXIgPSBwYXRoLmpvaW4odGhpcy5kaXJlY3RvcnksIGAke25ha2VkVGVzdE5hbWV9LmludGVnLnNuYXBzaG90YCk7XG4gICAgdGhpcy50ZW1wb3JhcnlPdXRwdXREaXIgPSBwYXRoLmpvaW4odGhpcy5kaXJlY3RvcnksIGAke0NES19PVVRESVJfUFJFRklYfS4ke25ha2VkVGVzdE5hbWV9YCk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHRlc3QgbWF0Y2hlcyB0aGUgdXNlci1naXZlbiBuYW1lXG4gICAqXG4gICAqIFdlIGFyZSB2ZXJ5IGxlbmllbnQgaGVyZS4gQSBuYW1lIG1hdGNoZXMgaWYgaXQgbWF0Y2hlczpcbiAgICpcbiAgICogLSBUaGUgQ1dELXJlbGF0aXZlIGZpbGVuYW1lXG4gICAqIC0gVGhlIGRpc2NvdmVyeSByb290LXJlbGF0aXZlIGZpbGVuYW1lXG4gICAqIC0gVGhlIHN1aXRlIG5hbWVcbiAgICogLSBUaGUgYWJzb2x1dGUgZmlsZW5hbWVcbiAgICovXG4gIHB1YmxpYyBtYXRjaGVzKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBbXG4gICAgICB0aGlzLmZpbGVOYW1lLFxuICAgICAgdGhpcy5kaXNjb3ZlcnlSZWxhdGl2ZUZpbGVOYW1lLFxuICAgICAgdGhpcy50ZXN0TmFtZSxcbiAgICAgIHRoaXMuYWJzb2x1dGVGaWxlTmFtZSxcbiAgICBdLmluY2x1ZGVzKG5hbWUpO1xuICB9XG59XG5cbi8qKlxuICogVGhlIGxpc3Qgb2YgdGVzdHMgdG8gcnVuIGNhbiBiZSBwcm92aWRlZCBpbiBhIGZpbGVcbiAqIGluc3RlYWQgb2YgYXMgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ3JhdGlvblRlc3RGaWxlQ29uZmlnIHtcbiAgLyoqXG4gICAqIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgbGlzdCBvZiB0ZXN0c1xuICAgKiBwcm92aWRlZCB3aWxsIGJlIGV4Y2x1ZGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTGlzdCBvZiB0ZXN0cyB0byBpbmNsdWRlIChvciBleGNsdWRlIGlmIGBleGNsdWRlPXRydWVgKVxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdHM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIERpc2NvdmVyIGludGVncmF0aW9uIHRlc3RzXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnRlZ3JhdGlvblRlc3RzIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBkaXJlY3Rvcnk6IHN0cmluZykge1xuICB9XG5cbiAgLyoqXG4gICAqIFRha2VzIGEgZmlsZSBuYW1lIG9mIGEgZmlsZSB0aGF0IGNvbnRhaW5zIGEgbGlzdCBvZiB0ZXN0XG4gICAqIHRvIGVpdGhlciBydW4gb3IgZXhjbHVkZSBhbmQgcmV0dXJucyBhIGxpc3Qgb2YgSW50ZWdyYXRpb24gVGVzdHMgdG8gcnVuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZnJvbUZpbGUoZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8SW50ZWdUZXN0W10+IHtcbiAgICBjb25zdCBmaWxlOiBJbnRlZ3JhdGlvblRlc3RGaWxlQ29uZmlnID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoZmlsZU5hbWUsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpO1xuICAgIGNvbnN0IGZvdW5kVGVzdHMgPSBhd2FpdCB0aGlzLmRpc2NvdmVyKCk7XG5cbiAgICBjb25zdCBhbGxUZXN0cyA9IHRoaXMuZmlsdGVyVGVzdHMoZm91bmRUZXN0cywgZmlsZS50ZXN0cywgZmlsZS5leGNsdWRlKTtcblxuICAgIHJldHVybiBhbGxUZXN0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgdXNlciBwcm92aWRlcyBhIGxpc3Qgb2YgdGVzdHMsIHRoZXNlIGNhbiBlaXRoZXIgYmUgYSBsaXN0IG9mIHRlc3RzIHRvIGluY2x1ZGUgb3IgYSBsaXN0IG9mIHRlc3RzIHRvIGV4Y2x1ZGUuXG4gICAqXG4gICAqIC0gSWYgaXQgaXMgYSBsaXN0IG9mIHRlc3RzIHRvIGluY2x1ZGUgdGhlbiB3ZSBkaXNjb3ZlciBhbGwgYXZhaWxhYmxlIHRlc3RzIGFuZCBjaGVjayB3aGV0aGVyIHRoZXkgaGF2ZSBwcm92aWRlZCB2YWxpZCB0ZXN0cy5cbiAgICogICBJZiB0aGV5IGhhdmUgcHJvdmlkZWQgYSB0ZXN0IG5hbWUgdGhhdCB3ZSBkb24ndCBmaW5kLCB0aGVuIHdlIHdyaXRlIG91dCB0aGF0IGVycm9yIG1lc3NhZ2UuXG4gICAqIC0gSWYgaXQgaXMgYSBsaXN0IG9mIHRlc3RzIHRvIGV4Y2x1ZGUsIHRoZW4gd2UgZGlzY292ZXIgYWxsIGF2YWlsYWJsZSB0ZXN0cyBhbmQgZmlsdGVyIG91dCB0aGUgdGVzdHMgdGhhdCB3ZXJlIHByb3ZpZGVkIGJ5IHRoZSB1c2VyLlxuICAgKi9cbiAgcHJpdmF0ZSBmaWx0ZXJUZXN0cyhkaXNjb3ZlcmVkVGVzdHM6IEludGVnVGVzdFtdLCByZXF1ZXN0ZWRUZXN0cz86IHN0cmluZ1tdLCBleGNsdWRlPzogYm9vbGVhbik6IEludGVnVGVzdFtdIHtcbiAgICBpZiAoIXJlcXVlc3RlZFRlc3RzKSB7XG4gICAgICByZXR1cm4gZGlzY292ZXJlZFRlc3RzO1xuICAgIH1cblxuXG4gICAgY29uc3QgYWxsVGVzdHMgPSBkaXNjb3ZlcmVkVGVzdHMuZmlsdGVyKHQgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IHJlcXVlc3RlZFRlc3RzLnNvbWUocGF0dGVybiA9PiB0Lm1hdGNoZXMocGF0dGVybikpO1xuICAgICAgcmV0dXJuIG1hdGNoZXMgIT09ICEhZXhjbHVkZTsgLy8gTG9va3Mgd2VpcmQgYnV0IGlzIGVxdWFsIHRvIChtYXRjaGVzICYmICFleGNsdWRlKSB8fCAoIW1hdGNoZXMgJiYgZXhjbHVkZSlcbiAgICB9KTtcblxuICAgIC8vIElmIG5vdCBleGNsdWRpbmcsIGFsbCBwYXR0ZXJucyBtdXN0IGhhdmUgbWF0Y2hlZCBhdCBsZWFzdCBvbmUgdGVzdFxuICAgIGlmICghZXhjbHVkZSkge1xuICAgICAgY29uc3QgdW5tYXRjaGVkUGF0dGVybnMgPSByZXF1ZXN0ZWRUZXN0cy5maWx0ZXIocGF0dGVybiA9PiAhZGlzY292ZXJlZFRlc3RzLnNvbWUodCA9PiB0Lm1hdGNoZXMocGF0dGVybikpKTtcbiAgICAgIGZvciAoY29uc3QgdW5tYXRjaGVkIG9mIHVubWF0Y2hlZFBhdHRlcm5zKSB7XG4gICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBObyBzdWNoIGludGVnIHRlc3Q6ICR7dW5tYXRjaGVkfVxcbmApO1xuICAgICAgfVxuICAgICAgaWYgKHVubWF0Y2hlZFBhdHRlcm5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoYEF2YWlsYWJsZSB0ZXN0czogJHtkaXNjb3ZlcmVkVGVzdHMubWFwKHQgPT4gdC5kaXNjb3ZlcnlSZWxhdGl2ZUZpbGVOYW1lKS5qb2luKCcgJyl9XFxuYCk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWxsVGVzdHM7XG4gIH1cblxuICAvKipcbiAgICogVGFrZXMgYW4gb3B0aW9uYWwgbGlzdCBvZiB0ZXN0cyB0byBsb29rIGZvciwgb3RoZXJ3aXNlXG4gICAqIGl0IHdpbGwgbG9vayBmb3IgYWxsIHRlc3RzIGZyb20gdGhlIGRpcmVjdG9yeVxuICAgKlxuICAgKiBAcGFyYW0gdGVzdHMgVGVzdHMgdG8gaW5jbHVkZSBvciBleGNsdWRlLCB1bmRlZmluZWQgbWVhbnMgaW5jbHVkZSBhbGwgdGVzdHMuXG4gICAqIEBwYXJhbSBleGNsdWRlIFdoZXRoZXIgdGhlICd0ZXN0cycgbGlzdCBpcyBpbmNsdXNpdmUgb3IgZXhjbHVzaXZlIChpbmNsdXNpdmUgYnkgZGVmYXVsdCkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZnJvbUNsaUFyZ3ModGVzdHM/OiBzdHJpbmdbXSwgZXhjbHVkZT86IGJvb2xlYW4pOiBQcm9taXNlPEludGVnVGVzdFtdPiB7XG4gICAgY29uc3QgZGlzY292ZXJlZFRlc3RzID0gYXdhaXQgdGhpcy5kaXNjb3ZlcigpO1xuXG4gICAgY29uc3QgYWxsVGVzdHMgPSB0aGlzLmZpbHRlclRlc3RzKGRpc2NvdmVyZWRUZXN0cywgdGVzdHMsIGV4Y2x1ZGUpO1xuXG4gICAgcmV0dXJuIGFsbFRlc3RzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkaXNjb3ZlcigpOiBQcm9taXNlPEludGVnVGVzdFtdPiB7XG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB0aGlzLnJlYWRUcmVlKCk7XG4gICAgY29uc3QgaW50ZWdzID0gZmlsZXMuZmlsdGVyKGZpbGVOYW1lID0+IHBhdGguYmFzZW5hbWUoZmlsZU5hbWUpLnN0YXJ0c1dpdGgoJ2ludGVnLicpICYmIHBhdGguYmFzZW5hbWUoZmlsZU5hbWUpLmVuZHNXaXRoKCcuanMnKSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChpbnRlZ3MpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXF1ZXN0KGZpbGVzOiBzdHJpbmdbXSk6IEludGVnVGVzdFtdIHtcbiAgICByZXR1cm4gZmlsZXMubWFwKGZpbGVOYW1lID0+IG5ldyBJbnRlZ1Rlc3QoeyBkaXNjb3ZlcnlSb290OiB0aGlzLmRpcmVjdG9yeSwgZmlsZU5hbWUgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWFkVHJlZSgpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgcmV0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlY3Vyc2UoZGlyOiBzdHJpbmcpIHtcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZnMucmVhZGRpcihkaXIpO1xuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKGRpciwgZmlsZSk7XG4gICAgICAgIGNvbnN0IHN0YXRmID0gYXdhaXQgZnMuc3RhdChmdWxsUGF0aCk7XG4gICAgICAgIGlmIChzdGF0Zi5pc0ZpbGUoKSkgeyByZXQucHVzaChmdWxsUGF0aCk7IH1cbiAgICAgICAgaWYgKHN0YXRmLmlzRGlyZWN0b3J5KCkpIHsgYXdhaXQgcmVjdXJzZShwYXRoLmpvaW4oZnVsbFBhdGgpKTsgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IHJlY3Vyc2UodGhpcy5kaXJlY3RvcnkpO1xuICAgIHJldHVybiByZXQ7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBmb3JtYXQgfSBmcm9tICd1dGlsJztcbmltcG9ydCB7IFJlc291cmNlSW1wYWN0IH0gZnJvbSAnQGF3cy1jZGsvY2xvdWRmb3JtYXRpb24tZGlmZic7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgKiBhcyBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IEludGVnVGVzdEluZm8gfSBmcm9tICcuLi9ydW5uZXIvaW50ZWdyYXRpb24tdGVzdHMnO1xuXG4vKipcbiAqIFRoZSBhZ2dyZWdhdGUgcmVzdWx0cyBmcm9tIHJ1bm5pbmcgYXNzZXJ0aW9ucyBvbiBhIHRlc3QgY2FzZVxuICovXG5leHBvcnQgdHlwZSBBc3NlcnRpb25SZXN1bHRzID0geyBbaWQ6IHN0cmluZ106IEFzc2VydGlvblJlc3VsdCB9O1xuXG4vKipcbiAqIFRoZSByZXN1bHQgb2YgYW4gaW5kaXZpZHVhbCBhc3NlcnRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3NlcnRpb25SZXN1bHQge1xuICAvKipcbiAgICogVGhlIGFzc2VydGlvbiBtZXNzYWdlLiBJZiB0aGUgYXNzZXJ0aW9uIGZhaWxlZCwgdGhpcyB3aWxsXG4gICAqIGluY2x1ZGUgdGhlIHJlYXNvbi5cbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYXNzZXJ0aW9uIHN1Y2NlZWRlZCBvciBmYWlsZWRcbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1czogJ3N1Y2Nlc3MnIHwgJ2ZhaWwnO1xufVxuXG4vKipcbiAqIENvbmZpZyBmb3IgYW4gaW50ZWdyYXRpb24gdGVzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVnVGVzdFdvcmtlckNvbmZpZyBleHRlbmRzIEludGVnVGVzdEluZm8ge1xuICAvKipcbiAgICogQSBsaXN0IG9mIGFueSBkZXN0cnVjdGl2ZSBjaGFuZ2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICByZWFkb25seSBkZXN0cnVjdGl2ZUNoYW5nZXM/OiBEZXN0cnVjdGl2ZUNoYW5nZVtdO1xufVxuXG4vKipcbiAqIEluZm9ybWF0aW9uIG9uIGFueSBkZXN0cnVjdGl2ZSBjaGFuZ2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVzdHJ1Y3RpdmVDaGFuZ2Uge1xuICAvKipcbiAgICogVGhlIGxvZ2ljYWxJZCBvZiB0aGUgcmVzb3VyY2Ugd2l0aCBhIGRlc3RydWN0aXZlIGNoYW5nZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9naWNhbElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzdGFjayB0aGF0IGNvbnRhaW5zIHRoZSBkZXN0cnVjdGl2ZSBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW1wYWN0IG9mIHRoZSBkZXN0cnVjdGl2ZSBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IGltcGFjdDogUmVzb3VyY2VJbXBhY3Q7XG59XG5cblxuLyoqXG4gKiBSZXByZXNlbnRzIGludGVncmF0aW9uIHRlc3RzIG1ldHJpY3MgZm9yIGEgZ2l2ZW4gd29ya2VyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdSdW5uZXJNZXRyaWNzIHtcbiAgLyoqXG4gICAqIFRoZSByZWdpb24gdGhlIHRlc3Qgd2FzIHJ1biBpblxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0b3RhbCBkdXJhdGlvbiBvZiB0aGUgd29ya2VyLlxuICAgKiBUaGlzIHdpbGwgYmUgdGhlIHN1bSBvZiBhbGwgaW5kaXZpZHVhbCB0ZXN0IGR1cmF0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgZHVyYXRpb246IG51bWJlcjtcblxuICAvKipcbiAgICogQ29udGFpbnMgdGhlIGR1cmF0aW9uIG9mIGluZGl2aWR1YWwgdGVzdHMgdGhhdCB0aGVcbiAgICogd29ya2VyIGV4ZWN1dGVkLlxuICAgKlxuICAgKiBNYXAgb2YgdGVzdE5hbWUgdG8gZHVyYXRpb24uXG4gICAqL1xuICByZWFkb25seSB0ZXN0czogeyBbdGVzdE5hbWU6IHN0cmluZ106IG51bWJlciB9O1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvZmlsZSB0aGF0IHdhcyB1c2VkIHRvIHJ1biB0aGUgdGVzdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgcHJvZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTbmFwc2hvdFZlcmlmaWNhdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogUmV0YWluIGZhaWxlZCBzbmFwc2hvdCBjb21wYXJpc29uc1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcmV0YWluPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVmVyYm9zZSBtb2RlXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB2ZXJib3NlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBJbnRlZ3JhdGlvbiB0ZXN0IHJlc3VsdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ0JhdGNoUmVzcG9uc2Uge1xuICAvKipcbiAgICogTGlzdCBvZiBmYWlsZWQgdGVzdHNcbiAgICovXG4gIHJlYWRvbmx5IGZhaWxlZFRlc3RzOiBJbnRlZ1Rlc3RJbmZvW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgSW50ZWdyYXRpb24gdGVzdCBtZXRyaWNzLiBFYWNoIGVudHJ5IGluIHRoZVxuICAgKiBsaXN0IHJlcHJlc2VudHMgbWV0cmljcyBmcm9tIGEgc2luZ2xlIHdvcmtlciAoYWNjb3VudCArIHJlZ2lvbikuXG4gICAqL1xuICByZWFkb25seSBtZXRyaWNzOiBJbnRlZ1J1bm5lck1ldHJpY3NbXTtcbn1cblxuLyoqXG4gKiBDb21tb24gb3B0aW9ucyBmb3IgcnVubmluZyBpbnRlZ3JhdGlvbiB0ZXN0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVnVGVzdE9wdGlvbnMge1xuICAvKipcbiAgICogQSBsaXN0IG9mIGludGVncmF0aW9uIHRlc3RzIHRvIHJ1blxuICAgKiBpbiB0aGlzIGJhdGNoXG4gICAqL1xuICByZWFkb25seSB0ZXN0czogSW50ZWdUZXN0V29ya2VyQ29uZmlnW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIGRlc3Ryb3kgdGhlIHN0YWNrcyBhdCB0aGVcbiAgICogZW5kIG9mIHRoZSB0ZXN0XG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNsZWFuPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hlbiB0aGlzIGlzIHNldCB0byBgdHJ1ZWAgdGhlIHNuYXBzaG90IHdpbGxcbiAgICogYmUgY3JlYXRlZCBfd2l0aG91dF8gcnVubmluZyB0aGUgaW50ZWdyYXRpb24gdGVzdFxuICAgKiBUaGUgcmVzdWx0aW5nIHNuYXBzaG90IFNIT1VMRCBOT1QgYmUgY2hlY2tlZCBpblxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZHJ5UnVuPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBlbmFibGUgdmVyYm9zZSBsb2dnaW5nXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB2ZXJib3NlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZSBzdGFjayB1cGRhdGUgd29ya2Zsb3cgd2lsbCBiZSBkaXNhYmxlZFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSB1cGRhdGVXb3JrZmxvdz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBwb3NzaWJsZSByZWFzb25zIGZvciBhIGRpYWdub3N0aWNcbiAqL1xuZXhwb3J0IGVudW0gRGlhZ25vc3RpY1JlYXNvbiB7XG4gIC8qKlxuICAgKiBUaGUgaW50ZWdyYXRpb24gdGVzdCBmYWlsZWQgYmVjYXVzZSB0aGVyZVxuICAgKiBpcyBub3QgZXhpc3Rpbmcgc25hcHNob3RcbiAgICovXG4gIE5PX1NOQVBTSE9UID0gJ05PX1NOQVBTSE9UJyxcblxuICAvKipcbiAgICogVGhlIGludGVncmF0aW9uIHRlc3QgZmFpbGVkXG4gICAqL1xuICBURVNUX0ZBSUxFRCA9ICdURVNUX0ZBSUxFRCcsXG5cbiAgLyoqXG4gICAqIFRoZXJlIHdhcyBhbiBlcnJvciBydW5uaW5nIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0XG4gICAqL1xuICBURVNUX0VSUk9SID0gJ1RFU1RfRVJST1InLFxuXG4gIC8qKlxuICAgKiBUaGUgc25hcHNob3QgdGVzdCBmYWlsZWQgYmVjYXVzZSB0aGUgYWN0dWFsXG4gICAqIHNuYXBzaG90IHdhcyBkaWZmZXJlbnQgdGhhbiB0aGUgZXhwZWN0ZWQgc25hcHNob3RcbiAgICovXG4gIFNOQVBTSE9UX0ZBSUxFRCA9ICdTTkFQU0hPVF9GQUlMRUQnLFxuXG4gIC8qKlxuICAgKiBUaGUgc25hcHNob3QgdGVzdCBmYWlsZWQgYmVjYXVzZSB0aGVyZSB3YXMgYW4gZXJyb3IgZXhlY3V0aW5nIGl0XG4gICAqL1xuICBTTkFQU0hPVF9FUlJPUiA9ICdTTkFQU0hPVF9FUlJPUicsXG5cbiAgLyoqXG4gICAqIFRoZSBzbmFwc2hvdCB0ZXN0IHN1Y2NlZWRlZFxuICAgKi9cbiAgU05BUFNIT1RfU1VDQ0VTUyA9ICdTTkFQU0hPVF9TVUNDRVNTJyxcblxuICAvKipcbiAgICogVGhlIGludGVncmF0aW9uIHRlc3Qgc3VjY2VlZGVkXG4gICAqL1xuICBURVNUX1NVQ0NFU1MgPSAnVEVTVF9TVUNDRVNTJyxcblxuICAvKipcbiAgICogVGhlIGFzc2VydGlvbiBmYWlsZWRcbiAgICovXG4gIEFTU0VSVElPTl9GQUlMRUQgPSAnQVNTRVJUSU9OX0ZBSUxFRCcsXG59XG5cbi8qKlxuICogSW50ZWdyYXRpb24gdGVzdCBkaWFnbm9zdGljc1xuICogVGhpcyBpcyB1c2VkIHRvIHJlcG9ydCBiYWNrIHRoZSBzdGF0dXMgb2YgZWFjaCB0ZXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlhZ25vc3RpYyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdGVzdFxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRpYWdub3N0aWMgbWVzc2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZSBpdCB0b29rIHRvIHJ1biB0aGUgdGVzdFxuICAgKi9cbiAgcmVhZG9ubHkgZHVyYXRpb24/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSByZWFzb24gZm9yIHRoZSBkaWFnbm9zdGljXG4gICAqL1xuICByZWFkb25seSByZWFzb246IERpYWdub3N0aWNSZWFzb247XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgbWVzc2FnZXMgdG8gcHJpbnRcbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxNZXNzYWdlcz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRTdW1tYXJ5KHRvdGFsOiBudW1iZXIsIGZhaWxlZDogbnVtYmVyKTogdm9pZCB7XG4gIGlmIChmYWlsZWQgPiAwKSB7XG4gICAgbG9nZ2VyLnByaW50KCclczogICAgJXMgJXMsICVzIHRvdGFsJywgY2hhbGsuYm9sZCgnVGVzdHMnKSwgY2hhbGsucmVkKGZhaWxlZCksIGNoYWxrLnJlZCgnZmFpbGVkJyksIHRvdGFsKTtcbiAgfSBlbHNlIHtcbiAgICBsb2dnZXIucHJpbnQoJyVzOiAgICAlcyAlcywgJXMgdG90YWwnLCBjaGFsay5ib2xkKCdUZXN0cycpLCBjaGFsay5ncmVlbih0b3RhbCksIGNoYWxrLmdyZWVuKCdwYXNzZWQnKSwgdG90YWwpO1xuICB9XG59XG5cbi8qKlxuICogRm9ybWF0IHRoZSBhc3NlcnRpb24gcmVzdWx0cyBzbyB0aGF0IHRoZSByZXN1bHRzIGNhbiBiZVxuICogcHJpbnRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0QXNzZXJ0aW9uUmVzdWx0cyhyZXN1bHRzOiBBc3NlcnRpb25SZXN1bHRzKTogc3RyaW5nIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdHMpXG4gICAgLm1hcCgoW2lkLCByZXN1bHRdKSA9PiBmb3JtYXQoJyVzXFxuJXMnLCBpZCwgcmVzdWx0Lm1lc3NhZ2UpKVxuICAgIC5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBQcmludCBvdXQgdGhlIHJlc3VsdHMgZnJvbSB0ZXN0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRSZXN1bHRzKGRpYWdub3N0aWM6IERpYWdub3N0aWMpOiB2b2lkIHtcbiAgc3dpdGNoIChkaWFnbm9zdGljLnJlYXNvbikge1xuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5TTkFQU0hPVF9TVUNDRVNTOlxuICAgICAgbG9nZ2VyLnN1Y2Nlc3MoJyAgVU5DSEFOR0VEICAlcyAlcycsIGRpYWdub3N0aWMudGVzdE5hbWUsIGNoYWxrLmdyYXkoYCR7ZGlhZ25vc3RpYy5kdXJhdGlvbn1zYCkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEaWFnbm9zdGljUmVhc29uLlRFU1RfU1VDQ0VTUzpcbiAgICAgIGxvZ2dlci5zdWNjZXNzKCcgIFNVQ0NFU1MgICAgJXMgJXMnLCBkaWFnbm9zdGljLnRlc3ROYW1lLCBjaGFsay5ncmF5KGAke2RpYWdub3N0aWMuZHVyYXRpb259c2ApKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5OT19TTkFQU0hPVDpcbiAgICAgIGxvZ2dlci5lcnJvcignICBORVcgICAgICAgICVzICVzJywgZGlhZ25vc3RpYy50ZXN0TmFtZSwgY2hhbGsuZ3JheShgJHtkaWFnbm9zdGljLmR1cmF0aW9ufXNgKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uU05BUFNIT1RfRkFJTEVEOlxuICAgICAgbG9nZ2VyLmVycm9yKCcgIENIQU5HRUQgICAgJXMgJXNcXG4gICAgICAlcycsIGRpYWdub3N0aWMudGVzdE5hbWUsIGNoYWxrLmdyYXkoYCR7ZGlhZ25vc3RpYy5kdXJhdGlvbn1zYCksIGRpYWdub3N0aWMubWVzc2FnZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uU05BUFNIT1RfRVJST1I6XG4gICAgY2FzZSBEaWFnbm9zdGljUmVhc29uLlRFU1RfRVJST1I6XG4gICAgICBsb2dnZXIuZXJyb3IoJyAgRVJST1IgICAgICAlcyAlc1xcbiAgICAgICVzJywgZGlhZ25vc3RpYy50ZXN0TmFtZSwgY2hhbGsuZ3JheShgJHtkaWFnbm9zdGljLmR1cmF0aW9ufXNgKSwgZGlhZ25vc3RpYy5tZXNzYWdlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5URVNUX0ZBSUxFRDpcbiAgICAgIGxvZ2dlci5lcnJvcignICBGQUlMRUQgICAgICVzICVzXFxuICAgICAgJXMnLCBkaWFnbm9zdGljLnRlc3ROYW1lLCBjaGFsay5ncmF5KGAke2RpYWdub3N0aWMuZHVyYXRpb259c2ApLCBkaWFnbm9zdGljLm1lc3NhZ2UpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEaWFnbm9zdGljUmVhc29uLkFTU0VSVElPTl9GQUlMRUQ6XG4gICAgICBsb2dnZXIuZXJyb3IoJyAgQVNTRVJUICAgICAlcyAlc1xcbiAgICAgICVzJywgZGlhZ25vc3RpYy50ZXN0TmFtZSwgY2hhbGsuZ3JheShgJHtkaWFnbm9zdGljLmR1cmF0aW9ufXNgKSwgZGlhZ25vc3RpYy5tZXNzYWdlKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGZvciAoY29uc3QgYWRkbCBvZiBkaWFnbm9zdGljLmFkZGl0aW9uYWxNZXNzYWdlcyA/PyBbXSkge1xuICAgIGxvZ2dlci5wcmludChgICAgICAgJHthZGRsfWApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmludExhZ2dhcmRzKHRlc3ROYW1lczogU2V0PHN0cmluZz4pIHtcbiAgY29uc3QgcGFydHMgPSBbXG4gICAgJyAgJyxcbiAgICBgV2FpdGluZyBmb3IgJHt0ZXN0TmFtZXMuc2l6ZX0gbW9yZWAsXG4gICAgdGVzdE5hbWVzLnNpemUgPCAxMCA/IFsnKCcsIEFycmF5LmZyb20odGVzdE5hbWVzKS5qb2luKCcsICcpLCAnKSddLmpvaW4oJycpIDogJycsXG4gIF07XG5cbiAgbG9nZ2VyLnByaW50KGNoYWxrLmdyZXkocGFydHMuZmlsdGVyKHggPT4geCkuam9pbignICcpKSk7XG59IiwgIi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIENESyBFeGVjXG5pbXBvcnQgeyBzcGF3blN5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcblxuLyoqXG4gKiBPdXIgb3duIGV4ZWN1dGUgZnVuY3Rpb24gd2hpY2ggZG9lc24ndCB1c2Ugc2hlbGxzIGFuZCBzdHJpbmdzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjb21tYW5kTGluZTogc3RyaW5nW10sIG9wdGlvbnM6IHsgY3dkPzogc3RyaW5nLCB2ZXJib3NlPzogYm9vbGVhbiwgZW52PzogYW55IH0gPSB7IH0pOiBhbnkge1xuICBjb25zdCBwcm9jID0gc3Bhd25TeW5jKGNvbW1hbmRMaW5lWzBdLCBjb21tYW5kTGluZS5zbGljZSgxKSwge1xuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgb3B0aW9ucy52ZXJib3NlID8gJ2luaGVyaXQnIDogJ3BpcGUnXSwgLy8gaW5oZXJpdCBTVERFUlIgaW4gdmVyYm9zZSBtb2RlXG4gICAgZW52OiB7XG4gICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgIC4uLm9wdGlvbnMuZW52LFxuICAgIH0sXG4gICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgfSk7XG5cbiAgaWYgKHByb2MuZXJyb3IpIHsgdGhyb3cgcHJvYy5lcnJvcjsgfVxuICBpZiAocHJvYy5zdGF0dXMgIT09IDApIHtcbiAgICBpZiAocHJvY2Vzcy5zdGRlcnIpIHsgLy8gd2lsbCBiZSAnbnVsbCcgaW4gdmVyYm9zZSBtb2RlXG4gICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShwcm9jLnN0ZGVycik7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgQ29tbWFuZCBleGl0ZWQgd2l0aCAke3Byb2Muc3RhdHVzID8gYHN0YXR1cyAke3Byb2Muc3RhdHVzfWAgOiBgc2lnbmFsICR7cHJvYy5zaWduYWx9YH1gKTtcbiAgfVxuXG4gIGNvbnN0IG91dHB1dCA9IHByb2Muc3Rkb3V0LnRvU3RyaW5nKCd1dGYtOCcpLnRyaW0oKTtcblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vKipcbiAqIEZsYXR0ZW4gYSBsaXN0IG9mIGxpc3RzIGludG8gYSBsaXN0IG9mIGVsZW1lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuPFQ+KHhzOiBUW11bXSk6IFRbXSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCB4cyk7XG59XG5cbi8qKlxuICogQ2hhaW4gY29tbWFuZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYWluKGNvbW1hbmRzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBjb21tYW5kcy5maWx0ZXIoYyA9PiAhIWMpLmpvaW4oJyAmJiAnKTtcbn1cblxuXG4vKipcbiAqIEEgY2xhc3MgaG9sZGluZyBhIHNldCBvZiBpdGVtcyB3aGljaCBhcmUgYmVpbmcgY3Jvc3NlZCBvZmYgaW4gdGltZVxuICpcbiAqIElmIGl0IHRha2VzIHRvbyBsb25nIHRvIGNyb3NzIG9mZiBhIG5ldyBpdGVtLCBwcmludCB0aGUgbGlzdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtMaXN0PEE+IHtcbiAgcHJpdmF0ZSByZWFkb25seSByZW1haW5pbmcgPSBuZXcgU2V0KHRoaXMuaXRlbXMpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSB0aW1lcj86IE5vZGVKUy5UaW1lb3V0O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaXRlbXM6IEFbXSwgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBXb3JrTGlzdE9wdGlvbnM8QT4gPSB7fSkge1xuICAgIHRoaXMudGltZW91dCA9IG9wdGlvbnMudGltZW91dCA/PyA2MF8wMDA7XG4gICAgdGhpcy5zY2hlZHVsZVRpbWVyKCk7XG4gIH1cblxuICBwdWJsaWMgY3Jvc3NPZmYoaXRlbTogQSkge1xuICAgIHRoaXMucmVtYWluaW5nLmRlbGV0ZShpdGVtKTtcbiAgICB0aGlzLnN0b3BUaW1lcigpO1xuICAgIGlmICh0aGlzLnJlbWFpbmluZy5zaXplID4gMCkge1xuICAgICAgdGhpcy5zY2hlZHVsZVRpbWVyKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRvbmUoKSB7XG4gICAgdGhpcy5yZW1haW5pbmcuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcFRpbWVyKCkge1xuICAgIGlmICh0aGlzLnRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XG4gICAgICB0aGlzLnRpbWVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2NoZWR1bGVUaW1lcigpIHtcbiAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlcG9ydCgpLCB0aGlzLnRpbWVvdXQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBvcnQoKSB7XG4gICAgdGhpcy5vcHRpb25zLm9uVGltZW91dD8uKHRoaXMucmVtYWluaW5nKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtMaXN0T3B0aW9uczxBPiB7XG4gIC8qKlxuICAgKiBXaGVuIHRvIHJlcGx5IHdpdGggcmVtYWluaW5nIGl0ZW1zXG4gICAqXG4gICAqIEBkZWZhdWx0IDYwMDAwXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGltZW91dCBoaXRzXG4gICAqL1xuICByZWFkb25seSBvblRpbWVvdXQ/OiAoeDogU2V0PEE+KSA9PiB2b2lkO1xufSIsICJpbXBvcnQgKiBhcyB3b3JrZXJwb29sIGZyb20gJ3dvcmtlcnBvb2wnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBJbnRlZ1Rlc3RJbmZvIH0gZnJvbSAnLi4vcnVubmVyL2ludGVncmF0aW9uLXRlc3RzJztcbmltcG9ydCB7IGZsYXR0ZW4gfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBwcmludFJlc3VsdHMsIHByaW50U3VtbWFyeSwgSW50ZWdCYXRjaFJlc3BvbnNlLCBJbnRlZ1Rlc3RPcHRpb25zLCBJbnRlZ1J1bm5lck1ldHJpY3MgfSBmcm9tICcuL2NvbW1vbic7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYW4gaW50ZWdyYXRpb24gdGVzdCBiYXRjaFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVnVGVzdEJhdGNoUmVxdWVzdCBleHRlbmRzIEludGVnVGVzdE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIEFXUyByZWdpb24gdG8gcnVuIHRoaXMgYmF0Y2ggaW5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIHByb2ZpbGUgdG8gdXNlIHdoZW4gcnVubmluZyB0aGlzIHRlc3RcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcnVubmluZyBhbGwgaW50ZWdyYXRpb24gdGVzdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ1Rlc3RSdW5PcHRpb25zIGV4dGVuZHMgSW50ZWdUZXN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgcmVnaW9ucyB0byBydW4gdGhlIGludGVncmF0aW9uIHRlc3RzIGFjcm9zcy5cbiAgICogVGhpcyBhbGxvd3MgdGhlIHJ1bm5lciB0byBydW4gaW50ZWdyYXRpb24gdGVzdHMgaW4gcGFyYWxsZWxcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbnM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIEFXUyBwcm9maWxlcy4gVGhpcyB3aWxsIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgcmVnaW9uc2BcbiAgICogdG8gcnVuIHRlc3RzIGluIHBhcmFsbGVsIGFjcm9zcyBhY2NvdW50cyArIHJlZ2lvbnNcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSB3b3JrZXJwb29sIHRvIHVzZVxuICAgKi9cbiAgcmVhZG9ubHkgcG9vbDogd29ya2VycG9vbC5Xb3JrZXJQb29sO1xufVxuXG4vKipcbiAqIFJ1biBJbnRlZ3JhdGlvbiB0ZXN0cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkludGVncmF0aW9uVGVzdHMob3B0aW9uczogSW50ZWdUZXN0UnVuT3B0aW9ucyk6IFByb21pc2U8eyBzdWNjZXNzOiBib29sZWFuLCBtZXRyaWNzOiBJbnRlZ1J1bm5lck1ldHJpY3NbXSB9PiB7XG4gIGxvZ2dlci5oaWdobGlnaHQoJ1xcblJ1bm5pbmcgaW50ZWdyYXRpb24gdGVzdHMgZm9yIGZhaWxlZCB0ZXN0cy4uLlxcbicpO1xuICBsb2dnZXIucHJpbnQoXG4gICAgJ1J1bm5pbmcgaW4gcGFyYWxsZWwgYWNyb3NzICVzcmVnaW9uczogJXMnLFxuICAgIG9wdGlvbnMucHJvZmlsZXMgPyBgcHJvZmlsZXMgJHtvcHRpb25zLnByb2ZpbGVzLmpvaW4oJywgJyl9IGFuZCBgOiAnJyxcbiAgICBvcHRpb25zLnJlZ2lvbnMuam9pbignLCAnKSk7XG4gIGNvbnN0IHRvdGFsVGVzdHMgPSBvcHRpb25zLnRlc3RzLmxlbmd0aDtcblxuICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBydW5JbnRlZ3JhdGlvblRlc3RzSW5QYXJhbGxlbChvcHRpb25zKTtcbiAgbG9nZ2VyLmhpZ2hsaWdodCgnXFxuVGVzdCBSZXN1bHRzOiBcXG4nKTtcbiAgcHJpbnRTdW1tYXJ5KHRvdGFsVGVzdHMsIHJlc3BvbnNlcy5mYWlsZWRUZXN0cy5sZW5ndGgpO1xuICByZXR1cm4ge1xuICAgIHN1Y2Nlc3M6IHJlc3BvbnNlcy5mYWlsZWRUZXN0cy5sZW5ndGggPT09IDAsXG4gICAgbWV0cmljczogcmVzcG9uc2VzLm1ldHJpY3MsXG4gIH07XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHdvcmtlciBmb3IgYSBzaW5nbGUgYWNjb3VudCArIHJlZ2lvblxuICovXG5pbnRlcmZhY2UgQWNjb3VudFdvcmtlciB7XG4gIC8qKlxuICAgKiBUaGUgcmVnaW9uIHRoZSB3b3JrZXIgc2hvdWxkIHJ1biBpblxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgcHJvZmlsZSB0aGF0IHRoZSB3b3JrZXIgc2hvdWxkIHVzZVxuICAgKiBUaGlzIHdpbGwgYmUgcGFzc2VkIGFzIHRoZSAnLS1wcm9maWxlJyBvcHRpb24gdG8gdGhlIENESyBDTElcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IHByb2ZpbGVcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGxpc3Qgb2YgQWNjb3VudFdvcmtlcnMgYmFzZWQgb24gdGhlIGxpc3Qgb2YgcmVnaW9ucyBhbmQgcHJvZmlsZXNcbiAqIGdpdmVuIHRvIHRoZSBDTEkuXG4gKi9cbmZ1bmN0aW9uIGdldEFjY291bnRXb3JrZXJzKHJlZ2lvbnM6IHN0cmluZ1tdLCBwcm9maWxlcz86IHN0cmluZ1tdKTogQWNjb3VudFdvcmtlcltdIHtcbiAgY29uc3Qgd29ya2VyczogQWNjb3VudFdvcmtlcltdID0gW107XG4gIGZ1bmN0aW9uIHB1c2hXb3JrZXIocHJvZmlsZT86IHN0cmluZykge1xuICAgIGZvciAoY29uc3QgcmVnaW9uIG9mIHJlZ2lvbnMpIHtcbiAgICAgIHdvcmtlcnMucHVzaCh7XG4gICAgICAgIHJlZ2lvbixcbiAgICAgICAgcHJvZmlsZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBpZiAocHJvZmlsZXMgJiYgcHJvZmlsZXMubGVuZ3RoID4gMCkge1xuICAgIGZvciAoY29uc3QgcHJvZmlsZSBvZiBwcm9maWxlcyA/PyBbXSkge1xuICAgICAgcHVzaFdvcmtlcihwcm9maWxlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcHVzaFdvcmtlcigpO1xuICB9XG4gIHJldHVybiB3b3JrZXJzO1xufVxuXG4vKipcbiAqIFJ1bnMgYSBzZXQgb2YgaW50ZWdyYXRpb24gdGVzdHMgaW4gcGFyYWxsZWwgYWNyb3NzIGEgbGlzdCBvZiBBV1MgcmVnaW9ucy5cbiAqIE9ubHkgYSBzaW5nbGUgdGVzdCBjYW4gYmUgcnVuIGF0IGEgdGltZSBpbiBhIGdpdmVuIHJlZ2lvbi4gT25jZSBhIHJlZ2lvblxuICogaXMgZG9uZSBydW5uaW5nIGEgdGVzdCwgdGhlIG5leHQgdGVzdCB3aWxsIGJlIHB1bGxlZCBmcm9tIHRoZSBxdWV1ZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuSW50ZWdyYXRpb25UZXN0c0luUGFyYWxsZWwoXG4gIG9wdGlvbnM6IEludGVnVGVzdFJ1bk9wdGlvbnMsXG4pOiBQcm9taXNlPEludGVnQmF0Y2hSZXNwb25zZT4ge1xuXG4gIGNvbnN0IHF1ZXVlID0gb3B0aW9ucy50ZXN0cztcbiAgY29uc3QgcmVzdWx0czogSW50ZWdCYXRjaFJlc3BvbnNlID0ge1xuICAgIG1ldHJpY3M6IFtdLFxuICAgIGZhaWxlZFRlc3RzOiBbXSxcbiAgfTtcbiAgY29uc3QgYWNjb3VudFdvcmtlcnM6IEFjY291bnRXb3JrZXJbXSA9IGdldEFjY291bnRXb3JrZXJzKG9wdGlvbnMucmVnaW9ucywgb3B0aW9ucy5wcm9maWxlcyk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gcnVuVGVzdCh3b3JrZXI6IEFjY291bnRXb3JrZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgdGVzdHM6IHsgW3Rlc3ROYW1lOiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IHRlc3QgPSBxdWV1ZS5wb3AoKTtcbiAgICAgIGlmICghdGVzdCkgYnJlYWs7XG4gICAgICBjb25zdCB0ZXN0U3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgbG9nZ2VyLmhpZ2hsaWdodChgUnVubmluZyB0ZXN0ICR7dGVzdC5maWxlTmFtZX0gaW4gJHt3b3JrZXIucHJvZmlsZSA/IHdvcmtlci5wcm9maWxlICsgJy8nIDogJyd9JHt3b3JrZXIucmVnaW9ufWApO1xuICAgICAgY29uc3QgcmVzcG9uc2U6IEludGVnVGVzdEluZm9bXVtdID0gYXdhaXQgb3B0aW9ucy5wb29sLmV4ZWMoJ2ludGVnVGVzdFdvcmtlcicsIFt7XG4gICAgICAgIHJlZ2lvbjogd29ya2VyLnJlZ2lvbixcbiAgICAgICAgcHJvZmlsZTogd29ya2VyLnByb2ZpbGUsXG4gICAgICAgIHRlc3RzOiBbdGVzdF0sXG4gICAgICAgIGNsZWFuOiBvcHRpb25zLmNsZWFuLFxuICAgICAgICBkcnlSdW46IG9wdGlvbnMuZHJ5UnVuLFxuICAgICAgICB2ZXJib3NlOiBvcHRpb25zLnZlcmJvc2UsXG4gICAgICAgIHVwZGF0ZVdvcmtmbG93OiBvcHRpb25zLnVwZGF0ZVdvcmtmbG93LFxuICAgICAgfV0sIHtcbiAgICAgICAgb246IHByaW50UmVzdWx0cyxcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHRzLmZhaWxlZFRlc3RzLnB1c2goLi4uZmxhdHRlbihyZXNwb25zZSkpO1xuICAgICAgdGVzdHNbdGVzdC5maWxlTmFtZV0gPSAoRGF0ZS5ub3coKSAtIHRlc3RTdGFydCkgLyAxMDAwO1xuICAgIH0gd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApO1xuICAgIGNvbnN0IG1ldHJpY3M6IEludGVnUnVubmVyTWV0cmljcyA9IHtcbiAgICAgIHJlZ2lvbjogd29ya2VyLnJlZ2lvbixcbiAgICAgIHByb2ZpbGU6IHdvcmtlci5wcm9maWxlLFxuICAgICAgZHVyYXRpb246IChEYXRlLm5vdygpIC0gc3RhcnQpIC8gMTAwMCxcbiAgICAgIHRlc3RzLFxuICAgIH07XG4gICAgaWYgKE9iamVjdC5rZXlzKHRlc3RzKS5sZW5ndGggPiAwKSB7XG4gICAgICByZXN1bHRzLm1ldHJpY3MucHVzaChtZXRyaWNzKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB3b3JrZXJzID0gYWNjb3VudFdvcmtlcnMubWFwKCh3b3JrZXIpID0+IHJ1blRlc3Qod29ya2VyKSk7XG4gIGF3YWl0IFByb21pc2UuYWxsKHdvcmtlcnMpO1xuICByZXR1cm4gcmVzdWx0cztcbn1cbiIsICJpbXBvcnQgKiBhcyB3b3JrZXJwb29sIGZyb20gJ3dvcmtlcnBvb2wnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBJbnRlZ1Rlc3QgfSBmcm9tICcuLi9ydW5uZXIvaW50ZWdyYXRpb24tdGVzdHMnO1xuaW1wb3J0IHsgZmxhdHRlbiwgV29ya0xpc3QgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBwcmludFN1bW1hcnksIHByaW50UmVzdWx0cywgSW50ZWdUZXN0V29ya2VyQ29uZmlnLCBTbmFwc2hvdFZlcmlmaWNhdGlvbk9wdGlvbnMsIHByaW50TGFnZ2FyZHMgfSBmcm9tICcuL2NvbW1vbic7XG5cbi8qKlxuICogUnVuIFNuYXBzaG90IHRlc3RzXG4gKiBGaXJzdCBiYXRjaCB1cCB0aGUgdGVzdHMuIEJ5IGRlZmF1bHQgdGhlcmUgd2lsbCBiZSAzIHRlc3RzIHBlciBiYXRjaC5cbiAqIFVzZSBhIHdvcmtlcnBvb2wgdG8gcnVuIHRoZSBiYXRjaGVzIGluIHBhcmFsbGVsLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuU25hcHNob3RUZXN0cyhcbiAgcG9vbDogd29ya2VycG9vbC5Xb3JrZXJQb29sLFxuICB0ZXN0czogSW50ZWdUZXN0W10sXG4gIG9wdGlvbnM6IFNuYXBzaG90VmVyaWZpY2F0aW9uT3B0aW9ucyxcbik6IFByb21pc2U8SW50ZWdUZXN0V29ya2VyQ29uZmlnW10+IHtcbiAgbG9nZ2VyLmhpZ2hsaWdodCgnXFxuVmVyaWZ5aW5nIGludGVncmF0aW9uIHRlc3Qgc25hcHNob3RzLi4uXFxuJyk7XG5cbiAgY29uc3QgdG9kbyA9IG5ldyBXb3JrTGlzdCh0ZXN0cy5tYXAodCA9PiB0LnRlc3ROYW1lKSwge1xuICAgIG9uVGltZW91dDogcHJpbnRMYWdnYXJkcyxcbiAgfSk7XG5cbiAgY29uc3QgZmFpbGVkVGVzdHM6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdW10gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICB0ZXN0cy5tYXAoKHRlc3QpID0+IHBvb2wuZXhlYygnc25hcHNob3RUZXN0V29ya2VyJywgW3Rlc3QuaW5mbyAvKiBEZWh5ZHJhdGUgY2xhc3MgLT4gZGF0YSAqLywgb3B0aW9uc10sIHtcbiAgICAgIG9uOiAoeCkgPT4ge1xuICAgICAgICB0b2RvLmNyb3NzT2ZmKHgudGVzdE5hbWUpO1xuICAgICAgICBwcmludFJlc3VsdHMoeCk7XG4gICAgICB9LFxuICAgIH0pKSxcbiAgKTtcbiAgdG9kby5kb25lKCk7XG4gIGNvbnN0IHRlc3RzVG9SdW4gPSBmbGF0dGVuKGZhaWxlZFRlc3RzKTtcblxuICBsb2dnZXIuaGlnaGxpZ2h0KCdcXG5TbmFwc2hvdCBSZXN1bHRzOiBcXG4nKTtcbiAgcHJpbnRTdW1tYXJ5KHRlc3RzLmxlbmd0aCwgdGVzdHNUb1J1bi5sZW5ndGgpO1xuICByZXR1cm4gdGVzdHNUb1J1bjtcblxufVxuIiwgImV4cG9ydCAqIGZyb20gJy4vY29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZWctdGVzdC13b3JrZXInO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlZy1zbmFwc2hvdC13b3JrZXInO1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cbmxldCBzaGltO1xuY2xhc3MgWTE4TiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICAvLyBjb25maWd1cmFibGUgb3B0aW9ucy5cbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgICAgIHRoaXMuZGlyZWN0b3J5ID0gb3B0cy5kaXJlY3RvcnkgfHwgJy4vbG9jYWxlcyc7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsZXMgPSB0eXBlb2Ygb3B0cy51cGRhdGVGaWxlcyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy51cGRhdGVGaWxlcyA6IHRydWU7XG4gICAgICAgIHRoaXMubG9jYWxlID0gb3B0cy5sb2NhbGUgfHwgJ2VuJztcbiAgICAgICAgdGhpcy5mYWxsYmFja1RvTGFuZ3VhZ2UgPSB0eXBlb2Ygb3B0cy5mYWxsYmFja1RvTGFuZ3VhZ2UgPT09ICdib29sZWFuJyA/IG9wdHMuZmFsbGJhY2tUb0xhbmd1YWdlIDogdHJ1ZTtcbiAgICAgICAgLy8gaW50ZXJuYWwgc3R1ZmYuXG4gICAgICAgIHRoaXMuY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLndyaXRlUXVldWUgPSBbXTtcbiAgICB9XG4gICAgX18oLi4uYXJncykge1xuICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90YWdnZWRMaXRlcmFsKGFyZ3VtZW50c1swXSwgLi4uYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdHIgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgIGxldCBjYiA9IGZ1bmN0aW9uICgpIHsgfTsgLy8gc3RhcnQgd2l0aCBub29wLlxuICAgICAgICBpZiAodHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiID0gYXJncy5wb3AoKTtcbiAgICAgICAgY2IgPSBjYiB8fCBmdW5jdGlvbiAoKSB7IH07IC8vIG5vb3AuXG4gICAgICAgIGlmICghdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV0pXG4gICAgICAgICAgICB0aGlzLl9yZWFkTG9jYWxlRmlsZSgpO1xuICAgICAgICAvLyB3ZSd2ZSBvYnNlcnZlZCBhIG5ldyBzdHJpbmcsIHVwZGF0ZSB0aGUgbGFuZ3VhZ2UgZmlsZS5cbiAgICAgICAgaWYgKCF0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzdHJdICYmIHRoaXMudXBkYXRlRmlsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW3N0cl0gPSBzdHI7XG4gICAgICAgICAgICAvLyBpbmNsdWRlIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgbG9jYWxlLFxuICAgICAgICAgICAgLy8gc2luY2UgdGhlc2UgdmFsdWVzIGNvdWxkIGNoYW5nZSBiZWZvcmUgdGhlXG4gICAgICAgICAgICAvLyB3cml0ZSBpcyBwZXJmb3JtZWQuXG4gICAgICAgICAgICB0aGlzLl9lbnF1ZXVlV3JpdGUoe1xuICAgICAgICAgICAgICAgIGRpcmVjdG9yeTogdGhpcy5kaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzaGltLmZvcm1hdC5hcHBseShzaGltLmZvcm1hdCwgW3RoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW3N0cl0gfHwgc3RyXS5jb25jYXQoYXJncykpO1xuICAgIH1cbiAgICBfX24oKSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICBjb25zdCBzaW5ndWxhciA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgY29uc3QgcGx1cmFsID0gYXJncy5zaGlmdCgpO1xuICAgICAgICBjb25zdCBxdWFudGl0eSA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgbGV0IGNiID0gZnVuY3Rpb24gKCkgeyB9OyAvLyBzdGFydCB3aXRoIG5vb3AuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IgPSBhcmdzLnBvcCgpO1xuICAgICAgICBpZiAoIXRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdKVxuICAgICAgICAgICAgdGhpcy5fcmVhZExvY2FsZUZpbGUoKTtcbiAgICAgICAgbGV0IHN0ciA9IHF1YW50aXR5ID09PSAxID8gc2luZ3VsYXIgOiBwbHVyYWw7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzaW5ndWxhcl0pIHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc2luZ3VsYXJdO1xuICAgICAgICAgICAgc3RyID0gZW50cnlbcXVhbnRpdHkgPT09IDEgPyAnb25lJyA6ICdvdGhlciddO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdlJ3ZlIG9ic2VydmVkIGEgbmV3IHN0cmluZywgdXBkYXRlIHRoZSBsYW5ndWFnZSBmaWxlLlxuICAgICAgICBpZiAoIXRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW3Npbmd1bGFyXSAmJiB0aGlzLnVwZGF0ZUZpbGVzKSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzaW5ndWxhcl0gPSB7XG4gICAgICAgICAgICAgICAgb25lOiBzaW5ndWxhcixcbiAgICAgICAgICAgICAgICBvdGhlcjogcGx1cmFsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gaW5jbHVkZSB0aGUgY3VycmVudCBkaXJlY3RvcnkgYW5kIGxvY2FsZSxcbiAgICAgICAgICAgIC8vIHNpbmNlIHRoZXNlIHZhbHVlcyBjb3VsZCBjaGFuZ2UgYmVmb3JlIHRoZVxuICAgICAgICAgICAgLy8gd3JpdGUgaXMgcGVyZm9ybWVkLlxuICAgICAgICAgICAgdGhpcy5fZW5xdWV1ZVdyaXRlKHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rvcnk6IHRoaXMuZGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBhICVkIHBsYWNlaG9sZGVyIGlzIHByb3ZpZGVkLCBhZGQgcXVhbnRpdHlcbiAgICAgICAgLy8gdG8gdGhlIGFyZ3VtZW50cyBleHBhbmRlZCBieSB1dGlsLmZvcm1hdC5cbiAgICAgICAgY29uc3QgdmFsdWVzID0gW3N0cl07XG4gICAgICAgIGlmICh+c3RyLmluZGV4T2YoJyVkJykpXG4gICAgICAgICAgICB2YWx1ZXMucHVzaChxdWFudGl0eSk7XG4gICAgICAgIHJldHVybiBzaGltLmZvcm1hdC5hcHBseShzaGltLmZvcm1hdCwgdmFsdWVzLmNvbmNhdChhcmdzKSk7XG4gICAgfVxuICAgIHNldExvY2FsZShsb2NhbGUpIHtcbiAgICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGU7XG4gICAgfVxuICAgIGdldExvY2FsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlO1xuICAgIH1cbiAgICB1cGRhdGVMb2NhbGUob2JqKSB7XG4gICAgICAgIGlmICghdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV0pXG4gICAgICAgICAgICB0aGlzLl9yZWFkTG9jYWxlRmlsZSgpO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1ba2V5XSA9IG9ialtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIF90YWdnZWRMaXRlcmFsKHBhcnRzLCAuLi5hcmdzKSB7XG4gICAgICAgIGxldCBzdHIgPSAnJztcbiAgICAgICAgcGFydHMuZm9yRWFjaChmdW5jdGlvbiAocGFydCwgaSkge1xuICAgICAgICAgICAgY29uc3QgYXJnID0gYXJnc1tpICsgMV07XG4gICAgICAgICAgICBzdHIgKz0gcGFydDtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHN0ciArPSAnJXMnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX18uYXBwbHkodGhpcywgW3N0cl0uY29uY2F0KFtdLnNsaWNlLmNhbGwoYXJncywgMSkpKTtcbiAgICB9XG4gICAgX2VucXVldWVXcml0ZSh3b3JrKSB7XG4gICAgICAgIHRoaXMud3JpdGVRdWV1ZS5wdXNoKHdvcmspO1xuICAgICAgICBpZiAodGhpcy53cml0ZVF1ZXVlLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NXcml0ZVF1ZXVlKCk7XG4gICAgfVxuICAgIF9wcm9jZXNzV3JpdGVRdWV1ZSgpIHtcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgICAgICBjb25zdCB3b3JrID0gdGhpcy53cml0ZVF1ZXVlWzBdO1xuICAgICAgICAvLyBkZXN0cnVjdHVyZSB0aGUgZW5xdWV1ZWQgd29yay5cbiAgICAgICAgY29uc3QgZGlyZWN0b3J5ID0gd29yay5kaXJlY3Rvcnk7XG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IHdvcmsubG9jYWxlO1xuICAgICAgICBjb25zdCBjYiA9IHdvcmsuY2I7XG4gICAgICAgIGNvbnN0IGxhbmd1YWdlRmlsZSA9IHRoaXMuX3Jlc29sdmVMb2NhbGVGaWxlKGRpcmVjdG9yeSwgbG9jYWxlKTtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZExvY2FsZSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY2FjaGVbbG9jYWxlXSwgbnVsbCwgMik7XG4gICAgICAgIHNoaW0uZnMud3JpdGVGaWxlKGxhbmd1YWdlRmlsZSwgc2VyaWFsaXplZExvY2FsZSwgJ3V0Zi04JywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgX3RoaXMud3JpdGVRdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgaWYgKF90aGlzLndyaXRlUXVldWUubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICBfdGhpcy5fcHJvY2Vzc1dyaXRlUXVldWUoKTtcbiAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfcmVhZExvY2FsZUZpbGUoKSB7XG4gICAgICAgIGxldCBsb2NhbGVMb29rdXAgPSB7fTtcbiAgICAgICAgY29uc3QgbGFuZ3VhZ2VGaWxlID0gdGhpcy5fcmVzb2x2ZUxvY2FsZUZpbGUodGhpcy5kaXJlY3RvcnksIHRoaXMubG9jYWxlKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gdXNpbmcgYSBidW5kbGVyIHN1Y2ggYXMgd2VicGFjaywgcmVhZEZpbGVTeW5jIG1heSBub3QgYmUgZGVmaW5lZDpcbiAgICAgICAgICAgIGlmIChzaGltLmZzLnJlYWRGaWxlU3luYykge1xuICAgICAgICAgICAgICAgIGxvY2FsZUxvb2t1cCA9IEpTT04ucGFyc2Uoc2hpbS5mcy5yZWFkRmlsZVN5bmMobGFuZ3VhZ2VGaWxlLCAndXRmLTgnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPSAnc3ludGF4IGVycm9yIGluICcgKyBsYW5ndWFnZUZpbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKVxuICAgICAgICAgICAgICAgIGxvY2FsZUxvb2t1cCA9IHt9O1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhY2hlW3RoaXMubG9jYWxlXSA9IGxvY2FsZUxvb2t1cDtcbiAgICB9XG4gICAgX3Jlc29sdmVMb2NhbGVGaWxlKGRpcmVjdG9yeSwgbG9jYWxlKSB7XG4gICAgICAgIGxldCBmaWxlID0gc2hpbS5yZXNvbHZlKGRpcmVjdG9yeSwgJy4vJywgbG9jYWxlICsgJy5qc29uJyk7XG4gICAgICAgIGlmICh0aGlzLmZhbGxiYWNrVG9MYW5ndWFnZSAmJiAhdGhpcy5fZmlsZUV4aXN0c1N5bmMoZmlsZSkgJiYgfmxvY2FsZS5sYXN0SW5kZXhPZignXycpKSB7XG4gICAgICAgICAgICAvLyBhdHRlbXB0IGZhbGxiYWNrIHRvIGxhbmd1YWdlIG9ubHlcbiAgICAgICAgICAgIGNvbnN0IGxhbmd1YWdlRmlsZSA9IHNoaW0ucmVzb2x2ZShkaXJlY3RvcnksICcuLycsIGxvY2FsZS5zcGxpdCgnXycpWzBdICsgJy5qc29uJyk7XG4gICAgICAgICAgICBpZiAodGhpcy5fZmlsZUV4aXN0c1N5bmMobGFuZ3VhZ2VGaWxlKSlcbiAgICAgICAgICAgICAgICBmaWxlID0gbGFuZ3VhZ2VGaWxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWxlO1xuICAgIH1cbiAgICBfZmlsZUV4aXN0c1N5bmMoZmlsZSkge1xuICAgICAgICByZXR1cm4gc2hpbS5leGlzdHMoZmlsZSk7XG4gICAgfVxufVxuZnVuY3Rpb24geTE4biQxKG9wdHMsIF9zaGltKSB7XG4gICAgc2hpbSA9IF9zaGltO1xuICAgIGNvbnN0IHkxOG4gPSBuZXcgWTE4TihvcHRzKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBfXzogeTE4bi5fXy5iaW5kKHkxOG4pLFxuICAgICAgICBfX246IHkxOG4uX19uLmJpbmQoeTE4biksXG4gICAgICAgIHNldExvY2FsZTogeTE4bi5zZXRMb2NhbGUuYmluZCh5MThuKSxcbiAgICAgICAgZ2V0TG9jYWxlOiB5MThuLmdldExvY2FsZS5iaW5kKHkxOG4pLFxuICAgICAgICB1cGRhdGVMb2NhbGU6IHkxOG4udXBkYXRlTG9jYWxlLmJpbmQoeTE4biksXG4gICAgICAgIGxvY2FsZTogeTE4bi5sb2NhbGVcbiAgICB9O1xufVxuXG52YXIgbm9kZVBsYXRmb3JtU2hpbSA9IHtcbiAgICBmczoge1xuICAgICAgICByZWFkRmlsZVN5bmM6IGZzLnJlYWRGaWxlU3luYyxcbiAgICAgICAgd3JpdGVGaWxlOiBmcy53cml0ZUZpbGVcbiAgICB9LFxuICAgIGZvcm1hdDogdXRpbC5mb3JtYXQsXG4gICAgcmVzb2x2ZTogcGF0aC5yZXNvbHZlLFxuICAgIGV4aXN0czogKGZpbGUpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBmcy5zdGF0U3luYyhmaWxlKS5pc0ZpbGUoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5jb25zdCB5MThuID0gKG9wdHMpID0+IHtcbiAgICByZXR1cm4geTE4biQxKG9wdHMsIG5vZGVQbGF0Zm9ybVNoaW0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB5MThuO1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cbmZ1bmN0aW9uIGNhbWVsQ2FzZShzdHIpIHtcbiAgICBjb25zdCBpc0NhbWVsQ2FzZSA9IHN0ciAhPT0gc3RyLnRvTG93ZXJDYXNlKCkgJiYgc3RyICE9PSBzdHIudG9VcHBlckNhc2UoKTtcbiAgICBpZiAoIWlzQ2FtZWxDYXNlKSB7XG4gICAgICAgIHN0ciA9IHN0ci50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBpZiAoc3RyLmluZGV4T2YoJy0nKSA9PT0gLTEgJiYgc3RyLmluZGV4T2YoJ18nKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxldCBjYW1lbGNhc2UgPSAnJztcbiAgICAgICAgbGV0IG5leHRDaHJVcHBlciA9IGZhbHNlO1xuICAgICAgICBjb25zdCBsZWFkaW5nSHlwaGVucyA9IHN0ci5tYXRjaCgvXi0rLyk7XG4gICAgICAgIGZvciAobGV0IGkgPSBsZWFkaW5nSHlwaGVucyA/IGxlYWRpbmdIeXBoZW5zWzBdLmxlbmd0aCA6IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBjaHIgPSBzdHIuY2hhckF0KGkpO1xuICAgICAgICAgICAgaWYgKG5leHRDaHJVcHBlcikge1xuICAgICAgICAgICAgICAgIG5leHRDaHJVcHBlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNociA9IGNoci50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGkgIT09IDAgJiYgKGNociA9PT0gJy0nIHx8IGNociA9PT0gJ18nKSkge1xuICAgICAgICAgICAgICAgIG5leHRDaHJVcHBlciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaHIgIT09ICctJyAmJiBjaHIgIT09ICdfJykge1xuICAgICAgICAgICAgICAgIGNhbWVsY2FzZSArPSBjaHI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbWVsY2FzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWNhbWVsaXplKHN0ciwgam9pblN0cmluZykge1xuICAgIGNvbnN0IGxvd2VyY2FzZSA9IHN0ci50b0xvd2VyQ2FzZSgpO1xuICAgIGpvaW5TdHJpbmcgPSBqb2luU3RyaW5nIHx8ICctJztcbiAgICBsZXQgbm90Q2FtZWxjYXNlID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hyTG93ZXIgPSBsb3dlcmNhc2UuY2hhckF0KGkpO1xuICAgICAgICBjb25zdCBjaHJTdHJpbmcgPSBzdHIuY2hhckF0KGkpO1xuICAgICAgICBpZiAoY2hyTG93ZXIgIT09IGNoclN0cmluZyAmJiBpID4gMCkge1xuICAgICAgICAgICAgbm90Q2FtZWxjYXNlICs9IGAke2pvaW5TdHJpbmd9JHtsb3dlcmNhc2UuY2hhckF0KGkpfWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBub3RDYW1lbGNhc2UgKz0gY2hyU3RyaW5nO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBub3RDYW1lbGNhc2U7XG59XG5mdW5jdGlvbiBsb29rc0xpa2VOdW1iZXIoeCkge1xuICAgIGlmICh4ID09PSBudWxsIHx8IHggPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmICgvXjB4WzAtOWEtZl0rJC9pLnRlc3QoeCkpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmICgvXjBbXi5dLy50ZXN0KHgpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIC9eWy1dPyg/OlxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykoZVstK10/XFxkKyk/JC8udGVzdCh4KTtcbn1cblxuZnVuY3Rpb24gdG9rZW5pemVBcmdTdHJpbmcoYXJnU3RyaW5nKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnU3RyaW5nKSkge1xuICAgICAgICByZXR1cm4gYXJnU3RyaW5nLm1hcChlID0+IHR5cGVvZiBlICE9PSAnc3RyaW5nJyA/IGUgKyAnJyA6IGUpO1xuICAgIH1cbiAgICBhcmdTdHJpbmcgPSBhcmdTdHJpbmcudHJpbSgpO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgcHJldkMgPSBudWxsO1xuICAgIGxldCBjID0gbnVsbDtcbiAgICBsZXQgb3BlbmluZyA9IG51bGw7XG4gICAgY29uc3QgYXJncyA9IFtdO1xuICAgIGZvciAobGV0IGlpID0gMDsgaWkgPCBhcmdTdHJpbmcubGVuZ3RoOyBpaSsrKSB7XG4gICAgICAgIHByZXZDID0gYztcbiAgICAgICAgYyA9IGFyZ1N0cmluZy5jaGFyQXQoaWkpO1xuICAgICAgICBpZiAoYyA9PT0gJyAnICYmICFvcGVuaW5nKSB7XG4gICAgICAgICAgICBpZiAoIShwcmV2QyA9PT0gJyAnKSkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjID09PSBvcGVuaW5nKSB7XG4gICAgICAgICAgICBvcGVuaW5nID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoYyA9PT0gXCInXCIgfHwgYyA9PT0gJ1wiJykgJiYgIW9wZW5pbmcpIHtcbiAgICAgICAgICAgIG9wZW5pbmcgPSBjO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYXJnc1tpXSlcbiAgICAgICAgICAgIGFyZ3NbaV0gPSAnJztcbiAgICAgICAgYXJnc1tpXSArPSBjO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cblxudmFyIERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5O1xuKGZ1bmN0aW9uIChEZWZhdWx0VmFsdWVzRm9yVHlwZUtleSkge1xuICAgIERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5W1wiQk9PTEVBTlwiXSA9IFwiYm9vbGVhblwiO1xuICAgIERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5W1wiU1RSSU5HXCJdID0gXCJzdHJpbmdcIjtcbiAgICBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleVtcIk5VTUJFUlwiXSA9IFwibnVtYmVyXCI7XG4gICAgRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXlbXCJBUlJBWVwiXSA9IFwiYXJyYXlcIjtcbn0pKERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5IHx8IChEZWZhdWx0VmFsdWVzRm9yVHlwZUtleSA9IHt9KSk7XG5cbmxldCBtaXhpbjtcbmNsYXNzIFlhcmdzUGFyc2VyIHtcbiAgICBjb25zdHJ1Y3RvcihfbWl4aW4pIHtcbiAgICAgICAgbWl4aW4gPSBfbWl4aW47XG4gICAgfVxuICAgIHBhcnNlKGFyZ3NJbnB1dCwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICBhbGlhczogdW5kZWZpbmVkLFxuICAgICAgICAgICAgYXJyYXk6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGJvb2xlYW46IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbmZpZzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY29uZmlnT2JqZWN0czogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY29uZmlndXJhdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY29lcmNlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBjb3VudDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZW52UHJlZml4OiB1bmRlZmluZWQsXG4gICAgICAgICAgICBuYXJnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBub3JtYWxpemU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHN0cmluZzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbnVtYmVyOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBfXzogdW5kZWZpbmVkLFxuICAgICAgICAgICAga2V5OiB1bmRlZmluZWRcbiAgICAgICAgfSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0b2tlbml6ZUFyZ1N0cmluZyhhcmdzSW5wdXQpO1xuICAgICAgICBjb25zdCBhbGlhc2VzID0gY29tYmluZUFsaWFzZXMoT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLCBvcHRzLmFsaWFzKSk7XG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgICdib29sZWFuLW5lZ2F0aW9uJzogdHJ1ZSxcbiAgICAgICAgICAgICdjYW1lbC1jYXNlLWV4cGFuc2lvbic6IHRydWUsXG4gICAgICAgICAgICAnY29tYmluZS1hcnJheXMnOiBmYWxzZSxcbiAgICAgICAgICAgICdkb3Qtbm90YXRpb24nOiB0cnVlLFxuICAgICAgICAgICAgJ2R1cGxpY2F0ZS1hcmd1bWVudHMtYXJyYXknOiB0cnVlLFxuICAgICAgICAgICAgJ2ZsYXR0ZW4tZHVwbGljYXRlLWFycmF5cyc6IHRydWUsXG4gICAgICAgICAgICAnZ3JlZWR5LWFycmF5cyc6IHRydWUsXG4gICAgICAgICAgICAnaGFsdC1hdC1ub24tb3B0aW9uJzogZmFsc2UsXG4gICAgICAgICAgICAnbmFyZ3MtZWF0cy1vcHRpb25zJzogZmFsc2UsXG4gICAgICAgICAgICAnbmVnYXRpb24tcHJlZml4JzogJ25vLScsXG4gICAgICAgICAgICAncGFyc2UtbnVtYmVycyc6IHRydWUsXG4gICAgICAgICAgICAncGFyc2UtcG9zaXRpb25hbC1udW1iZXJzJzogdHJ1ZSxcbiAgICAgICAgICAgICdwb3B1bGF0ZS0tJzogZmFsc2UsXG4gICAgICAgICAgICAnc2V0LXBsYWNlaG9sZGVyLWtleSc6IGZhbHNlLFxuICAgICAgICAgICAgJ3Nob3J0LW9wdGlvbi1ncm91cHMnOiB0cnVlLFxuICAgICAgICAgICAgJ3N0cmlwLWFsaWFzZWQnOiBmYWxzZSxcbiAgICAgICAgICAgICdzdHJpcC1kYXNoZWQnOiBmYWxzZSxcbiAgICAgICAgICAgICd1bmtub3duLW9wdGlvbnMtYXMtYXJncyc6IGZhbHNlXG4gICAgICAgIH0sIG9wdHMuY29uZmlndXJhdGlvbik7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLCBvcHRzLmRlZmF1bHQpO1xuICAgICAgICBjb25zdCBjb25maWdPYmplY3RzID0gb3B0cy5jb25maWdPYmplY3RzIHx8IFtdO1xuICAgICAgICBjb25zdCBlbnZQcmVmaXggPSBvcHRzLmVudlByZWZpeDtcbiAgICAgICAgY29uc3Qgbm90RmxhZ3NPcHRpb24gPSBjb25maWd1cmF0aW9uWydwb3B1bGF0ZS0tJ107XG4gICAgICAgIGNvbnN0IG5vdEZsYWdzQXJndiA9IG5vdEZsYWdzT3B0aW9uID8gJy0tJyA6ICdfJztcbiAgICAgICAgY29uc3QgbmV3QWxpYXNlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRlZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGNvbnN0IF9fID0gb3B0cy5fXyB8fCBtaXhpbi5mb3JtYXQ7XG4gICAgICAgIGNvbnN0IGZsYWdzID0ge1xuICAgICAgICAgICAgYWxpYXNlczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIGFycmF5czogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIGJvb2xzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgc3RyaW5nczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIG51bWJlcnM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBjb3VudHM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBub3JtYWxpemU6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBjb25maWdzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgbmFyZ3M6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBjb2VyY2lvbnM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBrZXlzOiBbXVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBuZWdhdGl2ZSA9IC9eLShbMC05XSsoXFwuWzAtOV0rKT98XFwuWzAtOV0rKSQvO1xuICAgICAgICBjb25zdCBuZWdhdGVkQm9vbGVhbiA9IG5ldyBSZWdFeHAoJ14tLScgKyBjb25maWd1cmF0aW9uWyduZWdhdGlvbi1wcmVmaXgnXSArICcoLispJyk7XG4gICAgICAgIFtdLmNvbmNhdChvcHRzLmFycmF5IHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAob3B0KSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSB0eXBlb2Ygb3B0ID09PSAnb2JqZWN0JyA/IG9wdC5rZXkgOiBvcHQ7XG4gICAgICAgICAgICBjb25zdCBhc3NpZ25tZW50ID0gT2JqZWN0LmtleXMob3B0KS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5RmxhZ0tleXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGJvb2xlYW46ICdib29scycsXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZzogJ3N0cmluZ3MnLFxuICAgICAgICAgICAgICAgICAgICBudW1iZXI6ICdudW1iZXJzJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5RmxhZ0tleXNba2V5XTtcbiAgICAgICAgICAgIH0pLmZpbHRlcihCb29sZWFuKS5wb3AoKTtcbiAgICAgICAgICAgIGlmIChhc3NpZ25tZW50KSB7XG4gICAgICAgICAgICAgICAgZmxhZ3NbYXNzaWdubWVudF1ba2V5XSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbGFncy5hcnJheXNba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFtdLmNvbmNhdChvcHRzLmJvb2xlYW4gfHwgW10pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGZsYWdzLmJvb2xzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBbXS5jb25jYXQob3B0cy5zdHJpbmcgfHwgW10pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGZsYWdzLnN0cmluZ3Nba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFtdLmNvbmNhdChvcHRzLm51bWJlciB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgZmxhZ3MubnVtYmVyc1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGZsYWdzLmtleXMucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgW10uY29uY2F0KG9wdHMuY291bnQgfHwgW10pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGZsYWdzLmNvdW50c1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGZsYWdzLmtleXMucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgW10uY29uY2F0KG9wdHMubm9ybWFsaXplIHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBmbGFncy5ub3JtYWxpemVba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5uYXJnID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMob3B0cy5uYXJnKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5uYXJnc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5jb2VyY2UgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhvcHRzLmNvZXJjZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5jb2VyY2lvbnNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG9wdHMuY29uZmlnICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0cy5jb25maWcpIHx8IHR5cGVvZiBvcHRzLmNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBbXS5jb25jYXQob3B0cy5jb25maWcpLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY29uZmlnc1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvcHRzLmNvbmZpZyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhvcHRzLmNvbmZpZykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLmNvbmZpZ3Nba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZXh0ZW5kQWxpYXNlcyhvcHRzLmtleSwgYWxpYXNlcywgb3B0cy5kZWZhdWx0LCBmbGFncy5hcnJheXMpO1xuICAgICAgICBPYmplY3Qua2V5cyhkZWZhdWx0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAoZmxhZ3MuYWxpYXNlc1trZXldIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChhbGlhcykge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW2FsaWFzXSA9IGRlZmF1bHRzW2tleV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBlcnJvciA9IG51bGw7XG4gICAgICAgIGNoZWNrQ29uZmlndXJhdGlvbigpO1xuICAgICAgICBsZXQgbm90RmxhZ3MgPSBbXTtcbiAgICAgICAgY29uc3QgYXJndiA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSwgeyBfOiBbXSB9KTtcbiAgICAgICAgY29uc3QgYXJndlJldHVybiA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZyA9IGFyZ3NbaV07XG4gICAgICAgICAgICBjb25zdCB0cnVuY2F0ZWRBcmcgPSBhcmcucmVwbGFjZSgvXi17Myx9LywgJy0tLScpO1xuICAgICAgICAgICAgbGV0IGJyb2tlbjtcbiAgICAgICAgICAgIGxldCBrZXk7XG4gICAgICAgICAgICBsZXQgbGV0dGVycztcbiAgICAgICAgICAgIGxldCBtO1xuICAgICAgICAgICAgbGV0IG5leHQ7XG4gICAgICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgICAgICBpZiAoYXJnICE9PSAnLS0nICYmIGlzVW5rbm93bk9wdGlvbkFzQXJnKGFyZykpIHtcbiAgICAgICAgICAgICAgICBwdXNoUG9zaXRpb25hbChhcmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHJ1bmNhdGVkQXJnLm1hdGNoKC8tLS0rKD18JCkvKSkge1xuICAgICAgICAgICAgICAgIHB1c2hQb3NpdGlvbmFsKGFyZyk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tLS4rPS8pIHx8ICghY29uZmlndXJhdGlvblsnc2hvcnQtb3B0aW9uLWdyb3VwcyddICYmIGFyZy5tYXRjaCgvXi0uKz0vKSkpIHtcbiAgICAgICAgICAgICAgICBtID0gYXJnLm1hdGNoKC9eLS0/KFtePV0rKT0oW1xcc1xcU10qKSQvKTtcbiAgICAgICAgICAgICAgICBpZiAobSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KG0pICYmIG0ubGVuZ3RoID49IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhtWzFdLCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0QXJyYXkoaSwgbVsxXSwgYXJncywgbVsyXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKG1bMV0sIGZsYWdzLm5hcmdzKSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXROYXJncyhpLCBtWzFdLCBhcmdzLCBtWzJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhtWzFdLCBtWzJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZy5tYXRjaChuZWdhdGVkQm9vbGVhbikgJiYgY29uZmlndXJhdGlvblsnYm9vbGVhbi1uZWdhdGlvbiddKSB7XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaChuZWdhdGVkQm9vbGVhbik7XG4gICAgICAgICAgICAgICAgaWYgKG0gIT09IG51bGwgJiYgQXJyYXkuaXNBcnJheShtKSAmJiBtLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG1bMV07XG4gICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykgPyBbZmFsc2VdIDogZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZy5tYXRjaCgvXi0tLisvKSB8fCAoIWNvbmZpZ3VyYXRpb25bJ3Nob3J0LW9wdGlvbi1ncm91cHMnXSAmJiBhcmcubWF0Y2goL14tW14tXSsvKSkpIHtcbiAgICAgICAgICAgICAgICBtID0gYXJnLm1hdGNoKC9eLS0/KC4rKS8pO1xuICAgICAgICAgICAgICAgIGlmIChtICE9PSBudWxsICYmIEFycmF5LmlzQXJyYXkobSkgJiYgbS5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBtWzFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdEFycmF5KGksIGtleSwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdE5hcmdzKGksIGtleSwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gYXJnc1tpICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkICYmICghbmV4dC5tYXRjaCgvXi0vKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQubWF0Y2gobmVnYXRpdmUpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKC9eKHRydWV8ZmFsc2UpJC8udGVzdChuZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGRlZmF1bHRWYWx1ZShrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZy5tYXRjaCgvXi0uXFwuLis9LykpIHtcbiAgICAgICAgICAgICAgICBtID0gYXJnLm1hdGNoKC9eLShbXj1dKyk9KFtcXHNcXFNdKikkLyk7XG4gICAgICAgICAgICAgICAgaWYgKG0gIT09IG51bGwgJiYgQXJyYXkuaXNBcnJheShtKSAmJiBtLmxlbmd0aCA+PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEFyZyhtWzFdLCBtWzJdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tLlxcLi4rLykgJiYgIWFyZy5tYXRjaChuZWdhdGl2ZSkpIHtcbiAgICAgICAgICAgICAgICBuZXh0ID0gYXJnc1tpICsgMV07XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaCgvXi0oLlxcLi4rKS8pO1xuICAgICAgICAgICAgICAgIGlmIChtICE9PSBudWxsICYmIEFycmF5LmlzQXJyYXkobSkgJiYgbS5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBtWzFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkICYmICFuZXh0Lm1hdGNoKC9eLS8pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBkZWZhdWx0VmFsdWUoa2V5KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tW14tXSsvKSAmJiAhYXJnLm1hdGNoKG5lZ2F0aXZlKSkge1xuICAgICAgICAgICAgICAgIGxldHRlcnMgPSBhcmcuc2xpY2UoMSwgLTEpLnNwbGl0KCcnKTtcbiAgICAgICAgICAgICAgICBicm9rZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxldHRlcnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGFyZy5zbGljZShqICsgMik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsZXR0ZXJzW2ogKyAxXSAmJiBsZXR0ZXJzW2ogKyAxXSA9PT0gJz0nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFyZy5zbGljZShqICsgMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBsZXR0ZXJzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0QXJyYXkoaSwga2V5LCBhcmdzLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5uYXJncykgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdE5hcmdzKGksIGtleSwgYXJncywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJva2VuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ID09PSAnLScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhsZXR0ZXJzW2pdLCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgvW0EtWmEtel0vLnRlc3QobGV0dGVyc1tqXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIC9eLT9cXGQrKFxcLlxcZCopPyhlLT9cXGQrKT8kLy50ZXN0KG5leHQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja0FsbEFsaWFzZXMobmV4dCwgZmxhZ3MuYm9vbHMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGxldHRlcnNbal0sIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJva2VuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChsZXR0ZXJzW2ogKyAxXSAmJiBsZXR0ZXJzW2ogKyAxXS5tYXRjaCgvXFxXLykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhsZXR0ZXJzW2pdLCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhsZXR0ZXJzW2pdLCBkZWZhdWx0VmFsdWUobGV0dGVyc1tqXSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGtleSA9IGFyZy5zbGljZSgtMSlbMF07XG4gICAgICAgICAgICAgICAgaWYgKCFicm9rZW4gJiYga2V5ICE9PSAnLScpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXRBcnJheShpLCBrZXksIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXROYXJncyhpLCBrZXksIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGFyZ3NbaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCAmJiAoIS9eKC18LS0pW14tXS8udGVzdChuZXh0KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQubWF0Y2gobmVnYXRpdmUpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKC9eKHRydWV8ZmFsc2UpJC8udGVzdChuZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGRlZmF1bHRWYWx1ZShrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZy5tYXRjaCgvXi1bMC05XSQvKSAmJlxuICAgICAgICAgICAgICAgIGFyZy5tYXRjaChuZWdhdGl2ZSkgJiZcbiAgICAgICAgICAgICAgICBjaGVja0FsbEFsaWFzZXMoYXJnLnNsaWNlKDEpLCBmbGFncy5ib29scykpIHtcbiAgICAgICAgICAgICAgICBrZXkgPSBhcmcuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgZGVmYXVsdFZhbHVlKGtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnID09PSAnLS0nKSB7XG4gICAgICAgICAgICAgICAgbm90RmxhZ3MgPSBhcmdzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbmZpZ3VyYXRpb25bJ2hhbHQtYXQtbm9uLW9wdGlvbiddKSB7XG4gICAgICAgICAgICAgICAgbm90RmxhZ3MgPSBhcmdzLnNsaWNlKGkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcHVzaFBvc2l0aW9uYWwoYXJnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhcHBseUVudlZhcnMoYXJndiwgdHJ1ZSk7XG4gICAgICAgIGFwcGx5RW52VmFycyhhcmd2LCBmYWxzZSk7XG4gICAgICAgIHNldENvbmZpZyhhcmd2KTtcbiAgICAgICAgc2V0Q29uZmlnT2JqZWN0cygpO1xuICAgICAgICBhcHBseURlZmF1bHRzQW5kQWxpYXNlcyhhcmd2LCBmbGFncy5hbGlhc2VzLCBkZWZhdWx0cywgdHJ1ZSk7XG4gICAgICAgIGFwcGx5Q29lcmNpb25zKGFyZ3YpO1xuICAgICAgICBpZiAoY29uZmlndXJhdGlvblsnc2V0LXBsYWNlaG9sZGVyLWtleSddKVxuICAgICAgICAgICAgc2V0UGxhY2Vob2xkZXJLZXlzKGFyZ3YpO1xuICAgICAgICBPYmplY3Qua2V5cyhmbGFncy5jb3VudHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaWYgKCFoYXNLZXkoYXJndiwga2V5LnNwbGl0KCcuJykpKVxuICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIDApO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG5vdEZsYWdzT3B0aW9uICYmIG5vdEZsYWdzLmxlbmd0aClcbiAgICAgICAgICAgIGFyZ3Zbbm90RmxhZ3NBcmd2XSA9IFtdO1xuICAgICAgICBub3RGbGFncy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGFyZ3Zbbm90RmxhZ3NBcmd2XS5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY29uZmlndXJhdGlvblsnY2FtZWwtY2FzZS1leHBhbnNpb24nXSAmJiBjb25maWd1cmF0aW9uWydzdHJpcC1kYXNoZWQnXSkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoYXJndikuZmlsdGVyKGtleSA9PiBrZXkgIT09ICctLScgJiYga2V5LmluY2x1ZGVzKCctJykpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBkZWxldGUgYXJndltrZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ3N0cmlwLWFsaWFzZWQnXSkge1xuICAgICAgICAgICAgW10uY29uY2F0KC4uLk9iamVjdC5rZXlzKGFsaWFzZXMpLm1hcChrID0+IGFsaWFzZXNba10pKS5mb3JFYWNoKGFsaWFzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvblsnY2FtZWwtY2FzZS1leHBhbnNpb24nXSAmJiBhbGlhcy5pbmNsdWRlcygnLScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhcmd2W2FsaWFzLnNwbGl0KCcuJykubWFwKHByb3AgPT4gY2FtZWxDYXNlKHByb3ApKS5qb2luKCcuJyldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWxldGUgYXJndlthbGlhc107XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBwdXNoUG9zaXRpb25hbChhcmcpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heWJlQ29lcmNlZE51bWJlciA9IG1heWJlQ29lcmNlTnVtYmVyKCdfJywgYXJnKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWF5YmVDb2VyY2VkTnVtYmVyID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbWF5YmVDb2VyY2VkTnVtYmVyID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIGFyZ3YuXy5wdXNoKG1heWJlQ29lcmNlZE51bWJlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZWF0TmFyZ3MoaSwga2V5LCBhcmdzLCBhcmdBZnRlckVxdWFsU2lnbikge1xuICAgICAgICAgICAgbGV0IGlpO1xuICAgICAgICAgICAgbGV0IHRvRWF0ID0gY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpO1xuICAgICAgICAgICAgdG9FYXQgPSB0eXBlb2YgdG9FYXQgIT09ICdudW1iZXInIHx8IGlzTmFOKHRvRWF0KSA/IDEgOiB0b0VhdDtcbiAgICAgICAgICAgIGlmICh0b0VhdCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoYXJnQWZ0ZXJFcXVhbFNpZ24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ0FyZ3VtZW50IHVuZXhwZWN0ZWQgZm9yOiAlcycsIGtleSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBkZWZhdWx0VmFsdWUoa2V5KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgYXZhaWxhYmxlID0gaXNVbmRlZmluZWQoYXJnQWZ0ZXJFcXVhbFNpZ24pID8gMCA6IDE7XG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvblsnbmFyZ3MtZWF0cy1vcHRpb25zJ10pIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggLSAoaSArIDEpICsgYXZhaWxhYmxlIDwgdG9FYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFcnJvcihfXygnTm90IGVub3VnaCBhcmd1bWVudHMgZm9sbG93aW5nOiAlcycsIGtleSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSB0b0VhdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoaWkgPSBpICsgMTsgaWkgPCBhcmdzLmxlbmd0aDsgaWkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZ3NbaWldLm1hdGNoKC9eLVteMC05XS8pIHx8IGFyZ3NbaWldLm1hdGNoKG5lZ2F0aXZlKSB8fCBpc1Vua25vd25PcHRpb25Bc0FyZyhhcmdzW2lpXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUrKztcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUgPCB0b0VhdClcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFcnJvcihfXygnTm90IGVub3VnaCBhcmd1bWVudHMgZm9sbG93aW5nOiAlcycsIGtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGNvbnN1bWVkID0gTWF0aC5taW4oYXZhaWxhYmxlLCB0b0VhdCk7XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSAmJiBjb25zdW1lZCA+IDApIHtcbiAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBhcmdBZnRlckVxdWFsU2lnbik7XG4gICAgICAgICAgICAgICAgY29uc3VtZWQtLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoaWkgPSBpICsgMTsgaWkgPCAoY29uc3VtZWQgKyBpICsgMSk7IGlpKyspIHtcbiAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBhcmdzW2lpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKGkgKyBjb25zdW1lZCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZWF0QXJyYXkoaSwga2V5LCBhcmdzLCBhcmdBZnRlckVxdWFsU2lnbikge1xuICAgICAgICAgICAgbGV0IGFyZ3NUb1NldCA9IFtdO1xuICAgICAgICAgICAgbGV0IG5leHQgPSBhcmdBZnRlckVxdWFsU2lnbiB8fCBhcmdzW2kgKyAxXTtcbiAgICAgICAgICAgIGNvbnN0IG5hcmdzQ291bnQgPSBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5uYXJncyk7XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmICEoL14odHJ1ZXxmYWxzZSkkLy50ZXN0KG5leHQpKSkge1xuICAgICAgICAgICAgICAgIGFyZ3NUb1NldC5wdXNoKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNVbmRlZmluZWQobmV4dCkgfHxcbiAgICAgICAgICAgICAgICAoaXNVbmRlZmluZWQoYXJnQWZ0ZXJFcXVhbFNpZ24pICYmIC9eLS8udGVzdChuZXh0KSAmJiAhbmVnYXRpdmUudGVzdChuZXh0KSAmJiAhaXNVbmtub3duT3B0aW9uQXNBcmcobmV4dCkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRzW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWZWYWwgPSBkZWZhdWx0c1trZXldO1xuICAgICAgICAgICAgICAgICAgICBhcmdzVG9TZXQgPSBBcnJheS5pc0FycmF5KGRlZlZhbCkgPyBkZWZWYWwgOiBbZGVmVmFsXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzVG9TZXQucHVzaChwcm9jZXNzVmFsdWUoa2V5LCBhcmdBZnRlckVxdWFsU2lnbikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpaSA9IGkgKyAxOyBpaSA8IGFyZ3MubGVuZ3RoOyBpaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoIWNvbmZpZ3VyYXRpb25bJ2dyZWVkeS1hcnJheXMnXSAmJiBhcmdzVG9TZXQubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChuYXJnc0NvdW50ICYmIHR5cGVvZiBuYXJnc0NvdW50ID09PSAnbnVtYmVyJyAmJiBhcmdzVG9TZXQubGVuZ3RoID49IG5hcmdzQ291bnQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSBhcmdzW2lpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eLS8udGVzdChuZXh0KSAmJiAhbmVnYXRpdmUudGVzdChuZXh0KSAmJiAhaXNVbmtub3duT3B0aW9uQXNBcmcobmV4dCkpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgaSA9IGlpO1xuICAgICAgICAgICAgICAgICAgICBhcmdzVG9TZXQucHVzaChwcm9jZXNzVmFsdWUoa2V5LCBuZXh0KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBuYXJnc0NvdW50ID09PSAnbnVtYmVyJyAmJiAoKG5hcmdzQ291bnQgJiYgYXJnc1RvU2V0Lmxlbmd0aCA8IG5hcmdzQ291bnQpIHx8XG4gICAgICAgICAgICAgICAgKGlzTmFOKG5hcmdzQ291bnQpICYmIGFyZ3NUb1NldC5sZW5ndGggPT09IDApKSkge1xuICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ05vdCBlbm91Z2ggYXJndW1lbnRzIGZvbGxvd2luZzogJXMnLCBrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldEFyZyhrZXksIGFyZ3NUb1NldCk7XG4gICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRBcmcoa2V5LCB2YWwpIHtcbiAgICAgICAgICAgIGlmICgvLS8udGVzdChrZXkpICYmIGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbGlhcyA9IGtleS5zcGxpdCgnLicpLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FtZWxDYXNlKHByb3ApO1xuICAgICAgICAgICAgICAgIH0pLmpvaW4oJy4nKTtcbiAgICAgICAgICAgICAgICBhZGROZXdBbGlhcyhrZXksIGFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcHJvY2Vzc1ZhbHVlKGtleSwgdmFsKTtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0S2V5ID0ga2V5LnNwbGl0KCcuJyk7XG4gICAgICAgICAgICBzZXRLZXkoYXJndiwgc3BsaXRLZXksIHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChmbGFncy5hbGlhc2VzW2tleV0pIHtcbiAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0uZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlQcm9wZXJ0aWVzID0geC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgICAgICBzZXRLZXkoYXJndiwga2V5UHJvcGVydGllcywgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNwbGl0S2V5Lmxlbmd0aCA+IDEgJiYgY29uZmlndXJhdGlvblsnZG90LW5vdGF0aW9uJ10pIHtcbiAgICAgICAgICAgICAgICAoZmxhZ3MuYWxpYXNlc1tzcGxpdEtleVswXV0gfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGtleVByb3BlcnRpZXMgPSB4LnNwbGl0KCcuJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBbXS5jb25jYXQoc3BsaXRLZXkpO1xuICAgICAgICAgICAgICAgICAgICBhLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGtleVByb3BlcnRpZXMgPSBrZXlQcm9wZXJ0aWVzLmNvbmNhdChhKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZmxhZ3MuYWxpYXNlc1trZXldIHx8IFtdKS5pbmNsdWRlcyhrZXlQcm9wZXJ0aWVzLmpvaW4oJy4nKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEtleShhcmd2LCBrZXlQcm9wZXJ0aWVzLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ub3JtYWxpemUpICYmICFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IFtrZXldLmNvbmNhdChmbGFncy5hbGlhc2VzW2tleV0gfHwgW10pO1xuICAgICAgICAgICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhcmd2UmV0dXJuLCBrZXksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gbWl4aW4ubm9ybWFsaXplKHZhbHVlKSA6IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhZGROZXdBbGlhcyhrZXksIGFsaWFzKSB7XG4gICAgICAgICAgICBpZiAoIShmbGFncy5hbGlhc2VzW2tleV0gJiYgZmxhZ3MuYWxpYXNlc1trZXldLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0gPSBbYWxpYXNdO1xuICAgICAgICAgICAgICAgIG5ld0FsaWFzZXNbYWxpYXNdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghKGZsYWdzLmFsaWFzZXNbYWxpYXNdICYmIGZsYWdzLmFsaWFzZXNbYWxpYXNdLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICBhZGROZXdBbGlhcyhhbGlhcywga2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzVmFsdWUoa2V5LCB2YWwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICh2YWxbMF0gPT09IFwiJ1wiIHx8IHZhbFswXSA9PT0gJ1wiJykgJiZcbiAgICAgICAgICAgICAgICB2YWxbdmFsLmxlbmd0aCAtIDFdID09PSB2YWxbMF0pIHtcbiAgICAgICAgICAgICAgICB2YWwgPSB2YWwuc3Vic3RyaW5nKDEsIHZhbC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykgfHwgY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsID09PSAndHJ1ZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBBcnJheS5pc0FycmF5KHZhbClcbiAgICAgICAgICAgICAgICA/IHZhbC5tYXAoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG1heWJlQ29lcmNlTnVtYmVyKGtleSwgdik7IH0pXG4gICAgICAgICAgICAgICAgOiBtYXliZUNvZXJjZU51bWJlcihrZXksIHZhbCk7XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSAmJiAoaXNVbmRlZmluZWQodmFsdWUpIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gaW5jcmVtZW50KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3Mubm9ybWFsaXplKSAmJiBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSlcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWwubWFwKCh2YWwpID0+IHsgcmV0dXJuIG1peGluLm5vcm1hbGl6ZSh2YWwpOyB9KTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbWl4aW4ubm9ybWFsaXplKHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbWF5YmVDb2VyY2VOdW1iZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFjb25maWd1cmF0aW9uWydwYXJzZS1wb3NpdGlvbmFsLW51bWJlcnMnXSAmJiBrZXkgPT09ICdfJylcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICBpZiAoIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLnN0cmluZ3MpICYmICFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkQ29lcmNlTnVtYmVyID0gbG9va3NMaWtlTnVtYmVyKHZhbHVlKSAmJiBjb25maWd1cmF0aW9uWydwYXJzZS1udW1iZXJzJ10gJiYgKE51bWJlci5pc1NhZmVJbnRlZ2VyKE1hdGguZmxvb3IocGFyc2VGbG9hdChgJHt2YWx1ZX1gKSkpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQ29lcmNlTnVtYmVyIHx8ICghaXNVbmRlZmluZWQodmFsdWUpICYmIGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm51bWJlcnMpKSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldENvbmZpZyhhcmd2KSB7XG4gICAgICAgICAgICBjb25zdCBjb25maWdMb29rdXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgYXBwbHlEZWZhdWx0c0FuZEFsaWFzZXMoY29uZmlnTG9va3VwLCBmbGFncy5hbGlhc2VzLCBkZWZhdWx0cyk7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhmbGFncy5jb25maWdzKS5mb3JFYWNoKGZ1bmN0aW9uIChjb25maWdLZXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25maWdQYXRoID0gYXJndltjb25maWdLZXldIHx8IGNvbmZpZ0xvb2t1cFtjb25maWdLZXldO1xuICAgICAgICAgICAgICAgIGlmIChjb25maWdQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29uZmlnID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkQ29uZmlnUGF0aCA9IG1peGluLnJlc29sdmUobWl4aW4uY3dkKCksIGNvbmZpZ1BhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZUNvbmZpZyA9IGZsYWdzLmNvbmZpZ3NbY29uZmlnS2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzb2x2ZUNvbmZpZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyA9IHJlc29sdmVDb25maWcocmVzb2x2ZWRDb25maWdQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZyBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gY29uZmlnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnID0gbWl4aW4ucmVxdWlyZShyZXNvbHZlZENvbmZpZ1BhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29uZmlnT2JqZWN0KGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXgubmFtZSA9PT0gJ1Blcm1pc3Npb25EZW5pZWQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhcmd2W2NvbmZpZ0tleV0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFcnJvcihfXygnSW52YWxpZCBKU09OIGNvbmZpZyBmaWxlOiAlcycsIGNvbmZpZ1BhdGgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldENvbmZpZ09iamVjdChjb25maWcsIHByZXYpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGNvbmZpZykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb25maWdba2V5XTtcbiAgICAgICAgICAgICAgICBjb25zdCBmdWxsS2V5ID0gcHJldiA/IHByZXYgKyAnLicgKyBrZXkgOiBrZXk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmIGNvbmZpZ3VyYXRpb25bJ2RvdC1ub3RhdGlvbiddKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldENvbmZpZ09iamVjdCh2YWx1ZSwgZnVsbEtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc0tleShhcmd2LCBmdWxsS2V5LnNwbGl0KCcuJykpIHx8IChjaGVja0FsbEFsaWFzZXMoZnVsbEtleSwgZmxhZ3MuYXJyYXlzKSAmJiBjb25maWd1cmF0aW9uWydjb21iaW5lLWFycmF5cyddKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGZ1bGxLZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldENvbmZpZ09iamVjdHMoKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZ09iamVjdHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnT2JqZWN0cy5mb3JFYWNoKGZ1bmN0aW9uIChjb25maWdPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q29uZmlnT2JqZWN0KGNvbmZpZ09iamVjdCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYXBwbHlFbnZWYXJzKGFyZ3YsIGNvbmZpZ09ubHkpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZW52UHJlZml4ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSB0eXBlb2YgZW52UHJlZml4ID09PSAnc3RyaW5nJyA/IGVudlByZWZpeCA6ICcnO1xuICAgICAgICAgICAgY29uc3QgZW52ID0gbWl4aW4uZW52KCk7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhlbnYpLmZvckVhY2goZnVuY3Rpb24gKGVudlZhcikge1xuICAgICAgICAgICAgICAgIGlmIChwcmVmaXggPT09ICcnIHx8IGVudlZhci5sYXN0SW5kZXhPZihwcmVmaXgsIDApID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBlbnZWYXIuc3BsaXQoJ19fJykubWFwKGZ1bmN0aW9uIChrZXksIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5LnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW1lbENhc2Uoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoKGNvbmZpZ09ubHkgJiYgZmxhZ3MuY29uZmlnc1trZXlzLmpvaW4oJy4nKV0pIHx8ICFjb25maWdPbmx5KSAmJiAhaGFzS2V5KGFyZ3YsIGtleXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5cy5qb2luKCcuJyksIGVudltlbnZWYXJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5Q29lcmNpb25zKGFyZ3YpIHtcbiAgICAgICAgICAgIGxldCBjb2VyY2U7XG4gICAgICAgICAgICBjb25zdCBhcHBsaWVkID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoYXJndikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFhcHBsaWVkLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvZXJjZSA9IGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvZXJjaW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29lcmNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbWF5YmVDb2VyY2VOdW1iZXIoa2V5LCBjb2VyY2UoYXJndltrZXldKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKFtdLmNvbmNhdChmbGFncy5hbGlhc2VzW2tleV0gfHwgW10sIGtleSkpLmZvckVhY2goYWxpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGllZC5hZGQoYWxpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndlthbGldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRQbGFjZWhvbGRlcktleXMoYXJndikge1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAofmtleS5pbmRleE9mKCcuJykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3Zba2V5XSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgICAgIGFyZ3Zba2V5XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYXBwbHlEZWZhdWx0c0FuZEFsaWFzZXMob2JqLCBhbGlhc2VzLCBkZWZhdWx0cywgY2FuTG9nID0gZmFsc2UpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGRlZmF1bHRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWhhc0tleShvYmosIGtleS5zcGxpdCgnLicpKSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRLZXkob2JqLCBrZXkuc3BsaXQoJy4nKSwgZGVmYXVsdHNba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYW5Mb2cpXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ZWRba2V5XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIChhbGlhc2VzW2tleV0gfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNLZXkob2JqLCB4LnNwbGl0KCcuJykpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEtleShvYmosIHguc3BsaXQoJy4nKSwgZGVmYXVsdHNba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGhhc0tleShvYmosIGtleXMpIHtcbiAgICAgICAgICAgIGxldCBvID0gb2JqO1xuICAgICAgICAgICAgaWYgKCFjb25maWd1cmF0aW9uWydkb3Qtbm90YXRpb24nXSlcbiAgICAgICAgICAgICAgICBrZXlzID0gW2tleXMuam9pbignLicpXTtcbiAgICAgICAgICAgIGtleXMuc2xpY2UoMCwgLTEpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIG8gPSAob1trZXldIHx8IHt9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5c1trZXlzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvICE9PSAnb2JqZWN0JylcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGtleSBpbiBvO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldEtleShvYmosIGtleXMsIHZhbHVlKSB7XG4gICAgICAgICAgICBsZXQgbyA9IG9iajtcbiAgICAgICAgICAgIGlmICghY29uZmlndXJhdGlvblsnZG90LW5vdGF0aW9uJ10pXG4gICAgICAgICAgICAgICAga2V5cyA9IFtrZXlzLmpvaW4oJy4nKV07XG4gICAgICAgICAgICBrZXlzLnNsaWNlKDAsIC0xKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBrZXkgPSBzYW5pdGl6ZUtleShrZXkpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgb1trZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgb1trZXldID0ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb1trZXldICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KG9ba2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob1trZXldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb1trZXldLnB1c2goe30pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgb1trZXldID0gW29ba2V5XSwge31dO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG8gPSBvW2tleV1bb1trZXldLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbyA9IG9ba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHNhbml0aXplS2V5KGtleXNba2V5cy5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICBjb25zdCBpc1R5cGVBcnJheSA9IGNoZWNrQWxsQWxpYXNlcyhrZXlzLmpvaW4oJy4nKSwgZmxhZ3MuYXJyYXlzKTtcbiAgICAgICAgICAgIGNvbnN0IGlzVmFsdWVBcnJheSA9IEFycmF5LmlzQXJyYXkodmFsdWUpO1xuICAgICAgICAgICAgbGV0IGR1cGxpY2F0ZSA9IGNvbmZpZ3VyYXRpb25bJ2R1cGxpY2F0ZS1hcmd1bWVudHMtYXJyYXknXTtcbiAgICAgICAgICAgIGlmICghZHVwbGljYXRlICYmIGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKSkge1xuICAgICAgICAgICAgICAgIGR1cGxpY2F0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKCghaXNVbmRlZmluZWQob1trZXldKSAmJiBmbGFncy5uYXJnc1trZXldID09PSAxKSB8fCAoQXJyYXkuaXNBcnJheShvW2tleV0pICYmIG9ba2V5XS5sZW5ndGggPT09IGZsYWdzLm5hcmdzW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ba2V5XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IGluY3JlbWVudCgpKSB7XG4gICAgICAgICAgICAgICAgb1trZXldID0gaW5jcmVtZW50KG9ba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9ba2V5XSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZHVwbGljYXRlICYmIGlzVHlwZUFycmF5ICYmIGlzVmFsdWVBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICBvW2tleV0gPSBjb25maWd1cmF0aW9uWydmbGF0dGVuLWR1cGxpY2F0ZS1hcnJheXMnXSA/IG9ba2V5XS5jb25jYXQodmFsdWUpIDogKEFycmF5LmlzQXJyYXkob1trZXldWzBdKSA/IG9ba2V5XSA6IFtvW2tleV1dKS5jb25jYXQoW3ZhbHVlXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFkdXBsaWNhdGUgJiYgQm9vbGVhbihpc1R5cGVBcnJheSkgPT09IEJvb2xlYW4oaXNWYWx1ZUFycmF5KSkge1xuICAgICAgICAgICAgICAgICAgICBvW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9ba2V5XSA9IG9ba2V5XS5jb25jYXQoW3ZhbHVlXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAob1trZXldID09PSB1bmRlZmluZWQgJiYgaXNUeXBlQXJyYXkpIHtcbiAgICAgICAgICAgICAgICBvW2tleV0gPSBpc1ZhbHVlQXJyYXkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkdXBsaWNhdGUgJiYgIShvW2tleV0gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgIGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykgfHxcbiAgICAgICAgICAgICAgICBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykpKSB7XG4gICAgICAgICAgICAgICAgb1trZXldID0gW29ba2V5XSwgdmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgb1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZXh0ZW5kQWxpYXNlcyguLi5hcmdzKSB7XG4gICAgICAgICAgICBhcmdzLmZvckVhY2goZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKG9iaiB8fCB7fSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmbGFncy5hbGlhc2VzW2tleV0pXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XSA9IFtdLmNvbmNhdChhbGlhc2VzW2tleV0gfHwgW10pO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0uY29uY2F0KGtleSkuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC8tLy50ZXN0KHgpICYmIGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjID0gY2FtZWxDYXNlKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjICE9PSBrZXkgJiYgZmxhZ3MuYWxpYXNlc1trZXldLmluZGV4T2YoYykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XS5wdXNoKGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBbGlhc2VzW2NdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0uY29uY2F0KGtleSkuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgubGVuZ3RoID4gMSAmJiAvW0EtWl0vLnRlc3QoeCkgJiYgY29uZmlndXJhdGlvblsnY2FtZWwtY2FzZS1leHBhbnNpb24nXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGMgPSBkZWNhbWVsaXplKHgsICctJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgIT09IGtleSAmJiBmbGFncy5hbGlhc2VzW2tleV0uaW5kZXhPZihjKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldLnB1c2goYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0FsaWFzZXNbY10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW3hdID0gW2tleV0uY29uY2F0KGZsYWdzLmFsaWFzZXNba2V5XS5maWx0ZXIoZnVuY3Rpb24gKHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geCAhPT0geTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFnKSB7XG4gICAgICAgICAgICBjb25zdCB0b0NoZWNrID0gW10uY29uY2F0KGZsYWdzLmFsaWFzZXNba2V5XSB8fCBbXSwga2V5KTtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhmbGFnKTtcbiAgICAgICAgICAgIGNvbnN0IHNldEFsaWFzID0gdG9DaGVjay5maW5kKGtleSA9PiBrZXlzLmluY2x1ZGVzKGtleSkpO1xuICAgICAgICAgICAgcmV0dXJuIHNldEFsaWFzID8gZmxhZ1tzZXRBbGlhc10gOiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBoYXNBbnlGbGFnKGtleSkge1xuICAgICAgICAgICAgY29uc3QgZmxhZ3NLZXlzID0gT2JqZWN0LmtleXMoZmxhZ3MpO1xuICAgICAgICAgICAgY29uc3QgdG9DaGVjayA9IFtdLmNvbmNhdChmbGFnc0tleXMubWFwKGsgPT4gZmxhZ3Nba10pKTtcbiAgICAgICAgICAgIHJldHVybiB0b0NoZWNrLnNvbWUoZnVuY3Rpb24gKGZsYWcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShmbGFnKSA/IGZsYWcuaW5jbHVkZXMoa2V5KSA6IGZsYWdba2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGhhc0ZsYWdzTWF0Y2hpbmcoYXJnLCAuLi5wYXR0ZXJucykge1xuICAgICAgICAgICAgY29uc3QgdG9DaGVjayA9IFtdLmNvbmNhdCguLi5wYXR0ZXJucyk7XG4gICAgICAgICAgICByZXR1cm4gdG9DaGVjay5zb21lKGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBhcmcubWF0Y2gocGF0dGVybik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoICYmIGhhc0FueUZsYWcobWF0Y2hbMV0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaGFzQWxsU2hvcnRGbGFncyhhcmcpIHtcbiAgICAgICAgICAgIGlmIChhcmcubWF0Y2gobmVnYXRpdmUpIHx8ICFhcmcubWF0Y2goL14tW14tXSsvKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBoYXNBbGxGbGFncyA9IHRydWU7XG4gICAgICAgICAgICBsZXQgbmV4dDtcbiAgICAgICAgICAgIGNvbnN0IGxldHRlcnMgPSBhcmcuc2xpY2UoMSkuc3BsaXQoJycpO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZXR0ZXJzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgbmV4dCA9IGFyZy5zbGljZShqICsgMik7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNBbnlGbGFnKGxldHRlcnNbal0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc0FsbEZsYWdzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKGxldHRlcnNbaiArIDFdICYmIGxldHRlcnNbaiArIDFdID09PSAnPScpIHx8XG4gICAgICAgICAgICAgICAgICAgIG5leHQgPT09ICctJyB8fFxuICAgICAgICAgICAgICAgICAgICAoL1tBLVphLXpdLy50ZXN0KGxldHRlcnNbal0pICYmIC9eLT9cXGQrKFxcLlxcZCopPyhlLT9cXGQrKT8kLy50ZXN0KG5leHQpKSB8fFxuICAgICAgICAgICAgICAgICAgICAobGV0dGVyc1tqICsgMV0gJiYgbGV0dGVyc1tqICsgMV0ubWF0Y2goL1xcVy8pKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaGFzQWxsRmxhZ3M7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNVbmtub3duT3B0aW9uQXNBcmcoYXJnKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlndXJhdGlvblsndW5rbm93bi1vcHRpb25zLWFzLWFyZ3MnXSAmJiBpc1Vua25vd25PcHRpb24oYXJnKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc1Vua25vd25PcHRpb24oYXJnKSB7XG4gICAgICAgICAgICBhcmcgPSBhcmcucmVwbGFjZSgvXi17Myx9LywgJy0tJyk7XG4gICAgICAgICAgICBpZiAoYXJnLm1hdGNoKG5lZ2F0aXZlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNBbGxTaG9ydEZsYWdzKGFyZykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmbGFnV2l0aEVxdWFscyA9IC9eLSsoW149XSs/KT1bXFxzXFxTXSokLztcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbEZsYWcgPSAvXi0rKFtePV0rPykkLztcbiAgICAgICAgICAgIGNvbnN0IGZsYWdFbmRpbmdJbkh5cGhlbiA9IC9eLSsoW149XSs/KS0kLztcbiAgICAgICAgICAgIGNvbnN0IGZsYWdFbmRpbmdJbkRpZ2l0cyA9IC9eLSsoW149XSs/XFxkKykkLztcbiAgICAgICAgICAgIGNvbnN0IGZsYWdFbmRpbmdJbk5vbldvcmRDaGFyYWN0ZXJzID0gL14tKyhbXj1dKz8pXFxXKy4qJC87XG4gICAgICAgICAgICByZXR1cm4gIWhhc0ZsYWdzTWF0Y2hpbmcoYXJnLCBmbGFnV2l0aEVxdWFscywgbmVnYXRlZEJvb2xlYW4sIG5vcm1hbEZsYWcsIGZsYWdFbmRpbmdJbkh5cGhlbiwgZmxhZ0VuZGluZ0luRGlnaXRzLCBmbGFnRW5kaW5nSW5Ob25Xb3JkQ2hhcmFjdGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFZhbHVlKGtleSkge1xuICAgICAgICAgICAgaWYgKCFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykgJiZcbiAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSAmJlxuICAgICAgICAgICAgICAgIGAke2tleX1gIGluIGRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdEZvclR5cGUoZ3Vlc3NUeXBlKGtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRGb3JUeXBlKHR5cGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZiA9IHtcbiAgICAgICAgICAgICAgICBbRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuQk9PTEVBTl06IHRydWUsXG4gICAgICAgICAgICAgICAgW0RlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LlNUUklOR106ICcnLFxuICAgICAgICAgICAgICAgIFtEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5OVU1CRVJdOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgW0RlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkFSUkFZXTogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZGVmW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGd1ZXNzVHlwZShrZXkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuQk9PTEVBTjtcbiAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5zdHJpbmdzKSlcbiAgICAgICAgICAgICAgICB0eXBlID0gRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuU1RSSU5HO1xuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubnVtYmVycykpXG4gICAgICAgICAgICAgICAgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5Lk5VTUJFUjtcbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSlcbiAgICAgICAgICAgICAgICB0eXBlID0gRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuQk9PTEVBTjtcbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpXG4gICAgICAgICAgICAgICAgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkFSUkFZO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNVbmRlZmluZWQobnVtKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtID09PSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hlY2tDb25maWd1cmF0aW9uKCkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZmxhZ3MuY291bnRzKS5maW5kKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFcnJvcihfXygnSW52YWxpZCBjb25maWd1cmF0aW9uOiAlcywgb3B0cy5jb3VudCBleGNsdWRlcyBvcHRzLmFycmF5LicsIGtleSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ0ludmFsaWQgY29uZmlndXJhdGlvbjogJXMsIG9wdHMuY291bnQgZXhjbHVkZXMgb3B0cy5uYXJnLicsIGtleSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFsaWFzZXM6IE9iamVjdC5hc3NpZ24oe30sIGZsYWdzLmFsaWFzZXMpLFxuICAgICAgICAgICAgYXJndjogT2JqZWN0LmFzc2lnbihhcmd2UmV0dXJuLCBhcmd2KSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgICBkZWZhdWx0ZWQ6IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRlZCksXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IsXG4gICAgICAgICAgICBuZXdBbGlhc2VzOiBPYmplY3QuYXNzaWduKHt9LCBuZXdBbGlhc2VzKVxuICAgICAgICB9O1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNvbWJpbmVBbGlhc2VzKGFsaWFzZXMpIHtcbiAgICBjb25zdCBhbGlhc0FycmF5cyA9IFtdO1xuICAgIGNvbnN0IGNvbWJpbmVkID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBsZXQgY2hhbmdlID0gdHJ1ZTtcbiAgICBPYmplY3Qua2V5cyhhbGlhc2VzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgYWxpYXNBcnJheXMucHVzaChbXS5jb25jYXQoYWxpYXNlc1trZXldLCBrZXkpKTtcbiAgICB9KTtcbiAgICB3aGlsZSAoY2hhbmdlKSB7XG4gICAgICAgIGNoYW5nZSA9IGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsaWFzQXJyYXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpaSA9IGkgKyAxOyBpaSA8IGFsaWFzQXJyYXlzLmxlbmd0aDsgaWkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGludGVyc2VjdCA9IGFsaWFzQXJyYXlzW2ldLmZpbHRlcihmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxpYXNBcnJheXNbaWldLmluZGV4T2YodikgIT09IC0xO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChpbnRlcnNlY3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWFzQXJyYXlzW2ldID0gYWxpYXNBcnJheXNbaV0uY29uY2F0KGFsaWFzQXJyYXlzW2lpXSk7XG4gICAgICAgICAgICAgICAgICAgIGFsaWFzQXJyYXlzLnNwbGljZShpaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBhbGlhc0FycmF5cy5mb3JFYWNoKGZ1bmN0aW9uIChhbGlhc0FycmF5KSB7XG4gICAgICAgIGFsaWFzQXJyYXkgPSBhbGlhc0FycmF5LmZpbHRlcihmdW5jdGlvbiAodiwgaSwgc2VsZikge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYuaW5kZXhPZih2KSA9PT0gaTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGxhc3RBbGlhcyA9IGFsaWFzQXJyYXkucG9wKCk7XG4gICAgICAgIGlmIChsYXN0QWxpYXMgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgbGFzdEFsaWFzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29tYmluZWRbbGFzdEFsaWFzXSA9IGFsaWFzQXJyYXk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY29tYmluZWQ7XG59XG5mdW5jdGlvbiBpbmNyZW1lbnQob3JpZykge1xuICAgIHJldHVybiBvcmlnICE9PSB1bmRlZmluZWQgPyBvcmlnICsgMSA6IDE7XG59XG5mdW5jdGlvbiBzYW5pdGl6ZUtleShrZXkpIHtcbiAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJylcbiAgICAgICAgcmV0dXJuICdfX19wcm90b19fXyc7XG4gICAgcmV0dXJuIGtleTtcbn1cblxuY29uc3QgbWluTm9kZVZlcnNpb24gPSAocHJvY2VzcyAmJiBwcm9jZXNzLmVudiAmJiBwcm9jZXNzLmVudi5ZQVJHU19NSU5fTk9ERV9WRVJTSU9OKVxuICAgID8gTnVtYmVyKHByb2Nlc3MuZW52LllBUkdTX01JTl9OT0RFX1ZFUlNJT04pXG4gICAgOiAxMDtcbmlmIChwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbikge1xuICAgIGNvbnN0IG1ham9yID0gTnVtYmVyKHByb2Nlc3MudmVyc2lvbi5tYXRjaCgvdihbXi5dKykvKVsxXSk7XG4gICAgaWYgKG1ham9yIDwgbWluTm9kZVZlcnNpb24pIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoYHlhcmdzIHBhcnNlciBzdXBwb3J0cyBhIG1pbmltdW0gTm9kZS5qcyB2ZXJzaW9uIG9mICR7bWluTm9kZVZlcnNpb259LiBSZWFkIG91ciB2ZXJzaW9uIHN1cHBvcnQgcG9saWN5OiBodHRwczovL2dpdGh1Yi5jb20veWFyZ3MveWFyZ3MtcGFyc2VyI3N1cHBvcnRlZC1ub2RlanMtdmVyc2lvbnNgKTtcbiAgICB9XG59XG5jb25zdCBlbnYgPSBwcm9jZXNzID8gcHJvY2Vzcy5lbnYgOiB7fTtcbmNvbnN0IHBhcnNlciA9IG5ldyBZYXJnc1BhcnNlcih7XG4gICAgY3dkOiBwcm9jZXNzLmN3ZCxcbiAgICBlbnY6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGVudjtcbiAgICB9LFxuICAgIGZvcm1hdDogdXRpbC5mb3JtYXQsXG4gICAgbm9ybWFsaXplOiBwYXRoLm5vcm1hbGl6ZSxcbiAgICByZXNvbHZlOiBwYXRoLnJlc29sdmUsXG4gICAgcmVxdWlyZTogKHBhdGgpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmUocGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocGF0aC5tYXRjaCgvXFwuanNvbiQvKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZzLnJlYWRGaWxlU3luYyhwYXRoLCAndXRmOCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ29ubHkgLmpzb24gY29uZmlnIGZpbGVzIGFyZSBzdXBwb3J0ZWQgaW4gRVNNJyk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbmNvbnN0IHlhcmdzUGFyc2VyID0gZnVuY3Rpb24gUGFyc2VyKGFyZ3MsIG9wdHMpIHtcbiAgICBjb25zdCByZXN1bHQgPSBwYXJzZXIucGFyc2UoYXJncy5zbGljZSgpLCBvcHRzKTtcbiAgICByZXR1cm4gcmVzdWx0LmFyZ3Y7XG59O1xueWFyZ3NQYXJzZXIuZGV0YWlsZWQgPSBmdW5jdGlvbiAoYXJncywgb3B0cykge1xuICAgIHJldHVybiBwYXJzZXIucGFyc2UoYXJncy5zbGljZSgpLCBvcHRzKTtcbn07XG55YXJnc1BhcnNlci5jYW1lbENhc2UgPSBjYW1lbENhc2U7XG55YXJnc1BhcnNlci5kZWNhbWVsaXplID0gZGVjYW1lbGl6ZTtcbnlhcmdzUGFyc2VyLmxvb2tzTGlrZU51bWJlciA9IGxvb2tzTGlrZU51bWJlcjtcblxubW9kdWxlLmV4cG9ydHMgPSB5YXJnc1BhcnNlcjtcbiIsICIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gKHtvbmx5Rmlyc3QgPSBmYWxzZX0gPSB7fSkgPT4ge1xuXHRjb25zdCBwYXR0ZXJuID0gW1xuXHRcdCdbXFxcXHUwMDFCXFxcXHUwMDlCXVtbXFxcXF0oKSM7P10qKD86KD86KD86KD86O1stYS16QS1aXFxcXGRcXFxcLyMmLjo9PyVAfl9dKykqfFthLXpBLVpcXFxcZF0rKD86O1stYS16QS1aXFxcXGRcXFxcLyMmLjo9PyVAfl9dKikqKT9cXFxcdTAwMDcpJyxcblx0XHQnKD86KD86XFxcXGR7MSw0fSg/OjtcXFxcZHswLDR9KSopP1tcXFxcZEEtUFItVFpjZi1udHFyeT0+PH5dKSknXG5cdF0uam9pbignfCcpO1xuXG5cdHJldHVybiBuZXcgUmVnRXhwKHBhdHRlcm4sIG9ubHlGaXJzdCA/IHVuZGVmaW5lZCA6ICdnJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IGFuc2lSZWdleCA9IHJlcXVpcmUoJ2Fuc2ktcmVnZXgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpbmcgPT4gdHlwZW9mIHN0cmluZyA9PT0gJ3N0cmluZycgPyBzdHJpbmcucmVwbGFjZShhbnNpUmVnZXgoKSwgJycpIDogc3RyaW5nO1xuIiwgIi8qIGVzbGludC1kaXNhYmxlIHlvZGEgKi9cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgaXNGdWxsd2lkdGhDb2RlUG9pbnQgPSBjb2RlUG9pbnQgPT4ge1xuXHRpZiAoTnVtYmVyLmlzTmFOKGNvZGVQb2ludCkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBDb2RlIHBvaW50cyBhcmUgZGVyaXZlZCBmcm9tOlxuXHQvLyBodHRwOi8vd3d3LnVuaXgub3JnL1B1YmxpYy9VTklEQVRBL0Vhc3RBc2lhbldpZHRoLnR4dFxuXHRpZiAoXG5cdFx0Y29kZVBvaW50ID49IDB4MTEwMCAmJiAoXG5cdFx0XHRjb2RlUG9pbnQgPD0gMHgxMTVGIHx8IC8vIEhhbmd1bCBKYW1vXG5cdFx0XHRjb2RlUG9pbnQgPT09IDB4MjMyOSB8fCAvLyBMRUZULVBPSU5USU5HIEFOR0xFIEJSQUNLRVRcblx0XHRcdGNvZGVQb2ludCA9PT0gMHgyMzJBIHx8IC8vIFJJR0hULVBPSU5USU5HIEFOR0xFIEJSQUNLRVRcblx0XHRcdC8vIENKSyBSYWRpY2FscyBTdXBwbGVtZW50IC4uIEVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHNcblx0XHRcdCgweDJFODAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDMyNDcgJiYgY29kZVBvaW50ICE9PSAweDMwM0YpIHx8XG5cdFx0XHQvLyBFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzIC4uIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEFcblx0XHRcdCgweDMyNTAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDREQkYpIHx8XG5cdFx0XHQvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIC4uIFlpIFJhZGljYWxzXG5cdFx0XHQoMHg0RTAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhBNEM2KSB8fFxuXHRcdFx0Ly8gSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQVxuXHRcdFx0KDB4QTk2MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4QTk3QykgfHxcblx0XHRcdC8vIEhhbmd1bCBTeWxsYWJsZXNcblx0XHRcdCgweEFDMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEQ3QTMpIHx8XG5cdFx0XHQvLyBDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzXG5cdFx0XHQoMHhGOTAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGQUZGKSB8fFxuXHRcdFx0Ly8gVmVydGljYWwgRm9ybXNcblx0XHRcdCgweEZFMTAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZFMTkpIHx8XG5cdFx0XHQvLyBDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyAuLiBTbWFsbCBGb3JtIFZhcmlhbnRzXG5cdFx0XHQoMHhGRTMwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRTZCKSB8fFxuXHRcdFx0Ly8gSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXNcblx0XHRcdCgweEZGMDEgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGNjApIHx8XG5cdFx0XHQoMHhGRkUwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRkU2KSB8fFxuXHRcdFx0Ly8gS2FuYSBTdXBwbGVtZW50XG5cdFx0XHQoMHgxQjAwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MUIwMDEpIHx8XG5cdFx0XHQvLyBFbmNsb3NlZCBJZGVvZ3JhcGhpYyBTdXBwbGVtZW50XG5cdFx0XHQoMHgxRjIwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MUYyNTEpIHx8XG5cdFx0XHQvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBCIC4uIFRlcnRpYXJ5IElkZW9ncmFwaGljIFBsYW5lXG5cdFx0XHQoMHgyMDAwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4M0ZGRkQpXG5cdFx0KVxuXHQpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGdWxsd2lkdGhDb2RlUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gaXNGdWxsd2lkdGhDb2RlUG9pbnQ7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAvLyBodHRwczovL210aHMuYmUvZW1vamlcbiAgcmV0dXJuIC9cXHVEODNDXFx1REZGNFxcdURCNDBcXHVEQzY3XFx1REI0MFxcdURDNjIoPzpcXHVEQjQwXFx1REM2NVxcdURCNDBcXHVEQzZFXFx1REI0MFxcdURDNjd8XFx1REI0MFxcdURDNzNcXHVEQjQwXFx1REM2M1xcdURCNDBcXHVEQzc0fFxcdURCNDBcXHVEQzc3XFx1REI0MFxcdURDNkNcXHVEQjQwXFx1REM3MylcXHVEQjQwXFx1REM3RnxcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NcXHVERkZDXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1xcdURGRkJ8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZGXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkVcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRF0pfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDXFx1REZGRFxcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQlxcdURGRkNdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1MjAwRCg/OlxcdTI3NjRcXHVGRTBGXFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRFxcdURDNjh8KD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzY2XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY3XFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2NlxcdURDNjddKSl8XFx1RDgzRFxcdURDNjZcXHUyMDBEXFx1RDgzRFxcdURDNjZ8XFx1RDgzRFxcdURDNjdcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pfCg/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSl8W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGfFxcdUQ4M0RbXFx1REM2NlxcdURDNjddfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXwoPzpcXHVEODNDXFx1REZGQlxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGRlxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGRVxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGRFxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGQ1xcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XSlcXHVGRTBGfFxcdUQ4M0NcXHVERkZCXFx1MjAwRCg/OlxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfCg/OlxcdUQ4M0VcXHVEREQxXFx1RDgzQ1xcdURGRkJcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDF8XFx1RDgzRFxcdURDNjlcXHVEODNDXFx1REZGQ1xcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OSlcXHVEODNDXFx1REZGQnxcXHVEODNFXFx1REREMSg/OlxcdUQ4M0NcXHVERkZGXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXxcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDEpfCg/OlxcdUQ4M0VcXHVEREQxXFx1RDgzQ1xcdURGRkVcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDF8XFx1RDgzRFxcdURDNjlcXHVEODNDXFx1REZGRlxcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMEQoPzpcXHVEODNEW1xcdURDNjhcXHVEQzY5XSkpKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZDXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkRcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjkpKD86XFx1RDgzQ1tcXHVERkZCXFx1REZGQ10pfFxcdUQ4M0RcXHVEQzY5KD86XFx1RDgzQ1xcdURGRkVcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkNcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkJcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkMtXFx1REZGRl0pfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDXFx1REZGRFxcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl0pfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHUyMDBEKD86XFx1Mjc2NFxcdUZFMEZcXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pfFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkZcXHUyMDBEKD86XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pKXxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2OVxcdTIwMEQoPzpcXHVEODNEXFx1REM2NlxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2N1xcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSkpfCg/OlxcdUQ4M0VcXHVEREQxXFx1RDgzQ1xcdURGRkRcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDF8XFx1RDgzRFxcdURDNjlcXHVEODNDXFx1REZGRVxcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRF0pfFxcdUQ4M0RcXHVEQzY5XFx1MjAwRFxcdUQ4M0RcXHVEQzY2XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY5XFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2NlxcdURDNjddKXwoPzpcXHVEODNEXFx1REM0MVxcdUZFMEZcXHUyMDBEXFx1RDgzRFxcdURERTh8XFx1RDgzRFxcdURDNjkoPzpcXHVEODNDXFx1REZGRlxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGRVxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGQ1xcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGQlxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGRFxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF0pfCg/Oig/OlxcdTI2Rjl8XFx1RDgzQ1tcXHVERkNCXFx1REZDQ118XFx1RDgzRFxcdURENzUpXFx1RkUwRnxcXHVEODNEXFx1REM2RnxcXHVEODNFW1xcdUREM0NcXHVERERFXFx1RERERl0pXFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml18KD86XFx1MjZGOXxcXHVEODNDW1xcdURGQ0JcXHVERkNDXXxcXHVEODNEXFx1REQ3NSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pXFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml18KD86XFx1RDgzQ1tcXHVERkMzXFx1REZDNFxcdURGQ0FdfFxcdUQ4M0RbXFx1REM2RVxcdURDNzFcXHVEQzczXFx1REM3N1xcdURDODFcXHVEQzgyXFx1REM4NlxcdURDODdcXHVERTQ1LVxcdURFNDdcXHVERTRCXFx1REU0RFxcdURFNEVcXHVERUEzXFx1REVCNC1cXHVERUI2XXxcXHVEODNFW1xcdUREMjZcXHVERDM3LVxcdUREMzlcXHVERDNEXFx1REQzRVxcdUREQjhcXHVEREI5XFx1RERDRC1cXHVERENGXFx1RERENi1cXHVEREREXSkoPzooPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pXFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml18XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml0pfFxcdUQ4M0NcXHVERkY0XFx1MjAwRFxcdTI2MjApXFx1RkUwRnxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2N1xcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSl8XFx1RDgzQ1xcdURGRjNcXHVGRTBGXFx1MjAwRFxcdUQ4M0NcXHVERjA4fFxcdUQ4M0RcXHVEQzE1XFx1MjAwRFxcdUQ4M0VcXHVEREJBfFxcdUQ4M0RcXHVEQzY5XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY5XFx1MjAwRFxcdUQ4M0RcXHVEQzY3fFxcdUQ4M0NcXHVEREZEXFx1RDgzQ1xcdURERjB8XFx1RDgzQ1xcdURERjRcXHVEODNDXFx1RERGMnxcXHVEODNDXFx1RERGNlxcdUQ4M0NcXHVEREU2fFsjXFwqMC05XVxcdUZFMEZcXHUyMEUzfFxcdUQ4M0NcXHVEREU3KD86XFx1RDgzQ1tcXHVEREU2XFx1RERFN1xcdURERTktXFx1RERFRlxcdURERjEtXFx1RERGNFxcdURERjYtXFx1RERGOVxcdURERkJcXHVEREZDXFx1RERGRVxcdURERkZdKXxcXHVEODNDXFx1RERGOSg/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREU5XFx1RERFQi1cXHVEREVEXFx1RERFRi1cXHVEREY0XFx1RERGN1xcdURERjlcXHVEREZCXFx1RERGQ1xcdURERkZdKXxcXHVEODNDXFx1RERFQSg/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBXFx1RERFQ1xcdURERURcXHVEREY3LVxcdURERkFdKXxcXHVEODNFXFx1REREMSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8XFx1RDgzQ1xcdURERjcoPzpcXHVEODNDW1xcdURERUFcXHVEREY0XFx1RERGOFxcdURERkFcXHVEREZDXSl8XFx1RDgzRFxcdURDNjkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfFxcdUQ4M0NcXHVEREYyKD86XFx1RDgzQ1tcXHVEREU2XFx1RERFOC1cXHVEREVEXFx1RERGMC1cXHVEREZGXSl8XFx1RDgzQ1xcdURERTYoPzpcXHVEODNDW1xcdURERTgtXFx1RERFQ1xcdURERUVcXHVEREYxXFx1RERGMlxcdURERjRcXHVEREY2LVxcdURERkFcXHVEREZDXFx1RERGRFxcdURERkZdKXxcXHVEODNDXFx1RERGMCg/OlxcdUQ4M0NbXFx1RERFQVxcdURERUMtXFx1RERFRVxcdURERjJcXHVEREYzXFx1RERGNVxcdURERjdcXHVEREZDXFx1RERGRVxcdURERkZdKXxcXHVEODNDXFx1RERFRCg/OlxcdUQ4M0NbXFx1RERGMFxcdURERjJcXHVEREYzXFx1RERGN1xcdURERjlcXHVEREZBXSl8XFx1RDgzQ1xcdURERTkoPzpcXHVEODNDW1xcdURERUFcXHVEREVDXFx1RERFRlxcdURERjBcXHVEREYyXFx1RERGNFxcdURERkZdKXxcXHVEODNDXFx1RERGRSg/OlxcdUQ4M0NbXFx1RERFQVxcdURERjldKXxcXHVEODNDXFx1RERFQyg/OlxcdUQ4M0NbXFx1RERFNlxcdURERTdcXHVEREU5LVxcdURERUVcXHVEREYxLVxcdURERjNcXHVEREY1LVxcdURERkFcXHVEREZDXFx1RERGRV0pfFxcdUQ4M0NcXHVEREY4KD86XFx1RDgzQ1tcXHVEREU2LVxcdURERUFcXHVEREVDLVxcdURERjRcXHVEREY3LVxcdURERjlcXHVEREZCXFx1RERGRC1cXHVEREZGXSl8XFx1RDgzQ1xcdURERUIoPzpcXHVEODNDW1xcdURERUUtXFx1RERGMFxcdURERjJcXHVEREY0XFx1RERGN10pfFxcdUQ4M0NcXHVEREY1KD86XFx1RDgzQ1tcXHVEREU2XFx1RERFQS1cXHVEREVEXFx1RERGMC1cXHVEREYzXFx1RERGNy1cXHVEREY5XFx1RERGQ1xcdURERkVdKXxcXHVEODNDXFx1RERGQig/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBXFx1RERFQ1xcdURERUVcXHVEREYzXFx1RERGQV0pfFxcdUQ4M0NcXHVEREYzKD86XFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUEtXFx1RERFQ1xcdURERUVcXHVEREYxXFx1RERGNFxcdURERjVcXHVEREY3XFx1RERGQVxcdURERkZdKXxcXHVEODNDXFx1RERFOCg/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREU5XFx1RERFQi1cXHVEREVFXFx1RERGMC1cXHVEREY1XFx1RERGN1xcdURERkEtXFx1RERGRl0pfFxcdUQ4M0NcXHVEREYxKD86XFx1RDgzQ1tcXHVEREU2LVxcdURERThcXHVEREVFXFx1RERGMFxcdURERjctXFx1RERGQlxcdURERkVdKXxcXHVEODNDXFx1RERGRig/OlxcdUQ4M0NbXFx1RERFNlxcdURERjJcXHVEREZDXSl8XFx1RDgzQ1xcdURERkMoPzpcXHVEODNDW1xcdURERUJcXHVEREY4XSl8XFx1RDgzQ1xcdURERkEoPzpcXHVEODNDW1xcdURERTZcXHVEREVDXFx1RERGMlxcdURERjNcXHVEREY4XFx1RERGRVxcdURERkZdKXxcXHVEODNDXFx1RERFRSg/OlxcdUQ4M0NbXFx1RERFOC1cXHVEREVBXFx1RERGMS1cXHVEREY0XFx1RERGNi1cXHVEREY5XSl8XFx1RDgzQ1xcdURERUYoPzpcXHVEODNDW1xcdURERUFcXHVEREYyXFx1RERGNFxcdURERjVdKXwoPzpcXHVEODNDW1xcdURGQzNcXHVERkM0XFx1REZDQV18XFx1RDgzRFtcXHVEQzZFXFx1REM3MVxcdURDNzNcXHVEQzc3XFx1REM4MVxcdURDODJcXHVEQzg2XFx1REM4N1xcdURFNDUtXFx1REU0N1xcdURFNEJcXHVERTREXFx1REU0RVxcdURFQTNcXHVERUI0LVxcdURFQjZdfFxcdUQ4M0VbXFx1REQyNlxcdUREMzctXFx1REQzOVxcdUREM0RcXHVERDNFXFx1RERCOFxcdUREQjlcXHVERENELVxcdUREQ0ZcXHVEREQ2LVxcdURERERdKSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8KD86XFx1MjZGOXxcXHVEODNDW1xcdURGQ0JcXHVERkNDXXxcXHVEODNEXFx1REQ3NSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfCg/OltcXHUyNjFEXFx1MjcwQS1cXHUyNzBEXXxcXHVEODNDW1xcdURGODVcXHVERkMyXFx1REZDN118XFx1RDgzRFtcXHVEQzQyXFx1REM0M1xcdURDNDYtXFx1REM1MFxcdURDNjZcXHVEQzY3XFx1REM2Qi1cXHVEQzZEXFx1REM3MFxcdURDNzJcXHVEQzc0LVxcdURDNzZcXHVEQzc4XFx1REM3Q1xcdURDODNcXHVEQzg1XFx1RENBQVxcdURENzRcXHVERDdBXFx1REQ5MFxcdUREOTVcXHVERDk2XFx1REU0Q1xcdURFNEZcXHVERUMwXFx1REVDQ118XFx1RDgzRVtcXHVERDBGXFx1REQxOC1cXHVERDFDXFx1REQxRVxcdUREMUZcXHVERDMwLVxcdUREMzZcXHVEREI1XFx1RERCNlxcdUREQkJcXHVEREQyLVxcdURERDVdKSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8KD86W1xcdTIzMUFcXHUyMzFCXFx1MjNFOS1cXHUyM0VDXFx1MjNGMFxcdTIzRjNcXHUyNUZEXFx1MjVGRVxcdTI2MTRcXHUyNjE1XFx1MjY0OC1cXHUyNjUzXFx1MjY3RlxcdTI2OTNcXHUyNkExXFx1MjZBQVxcdTI2QUJcXHUyNkJEXFx1MjZCRVxcdTI2QzRcXHUyNkM1XFx1MjZDRVxcdTI2RDRcXHUyNkVBXFx1MjZGMlxcdTI2RjNcXHUyNkY1XFx1MjZGQVxcdTI2RkRcXHUyNzA1XFx1MjcwQVxcdTI3MEJcXHUyNzI4XFx1Mjc0Q1xcdTI3NEVcXHUyNzUzLVxcdTI3NTVcXHUyNzU3XFx1Mjc5NS1cXHUyNzk3XFx1MjdCMFxcdTI3QkZcXHUyQjFCXFx1MkIxQ1xcdTJCNTBcXHUyQjU1XXxcXHVEODNDW1xcdURDMDRcXHVEQ0NGXFx1REQ4RVxcdUREOTEtXFx1REQ5QVxcdURERTYtXFx1RERGRlxcdURFMDFcXHVERTFBXFx1REUyRlxcdURFMzItXFx1REUzNlxcdURFMzgtXFx1REUzQVxcdURFNTBcXHVERTUxXFx1REYwMC1cXHVERjIwXFx1REYyRC1cXHVERjM1XFx1REYzNy1cXHVERjdDXFx1REY3RS1cXHVERjkzXFx1REZBMC1cXHVERkNBXFx1REZDRi1cXHVERkQzXFx1REZFMC1cXHVERkYwXFx1REZGNFxcdURGRjgtXFx1REZGRl18XFx1RDgzRFtcXHVEQzAwLVxcdURDM0VcXHVEQzQwXFx1REM0Mi1cXHVEQ0ZDXFx1RENGRi1cXHVERDNEXFx1REQ0Qi1cXHVERDRFXFx1REQ1MC1cXHVERDY3XFx1REQ3QVxcdUREOTVcXHVERDk2XFx1RERBNFxcdURERkItXFx1REU0RlxcdURFODAtXFx1REVDNVxcdURFQ0NcXHVERUQwLVxcdURFRDJcXHVERUQ1XFx1REVFQlxcdURFRUNcXHVERUY0LVxcdURFRkFcXHVERkUwLVxcdURGRUJdfFxcdUQ4M0VbXFx1REQwRC1cXHVERDNBXFx1REQzQy1cXHVERDQ1XFx1REQ0Ny1cXHVERDcxXFx1REQ3My1cXHVERDc2XFx1REQ3QS1cXHVEREEyXFx1RERBNS1cXHVEREFBXFx1RERBRS1cXHVERENBXFx1RERDRC1cXHVEREZGXFx1REU3MC1cXHVERTczXFx1REU3OC1cXHVERTdBXFx1REU4MC1cXHVERTgyXFx1REU5MC1cXHVERTk1XSl8KD86WyNcXCowLTlcXHhBOVxceEFFXFx1MjAzQ1xcdTIwNDlcXHUyMTIyXFx1MjEzOVxcdTIxOTQtXFx1MjE5OVxcdTIxQTlcXHUyMUFBXFx1MjMxQVxcdTIzMUJcXHUyMzI4XFx1MjNDRlxcdTIzRTktXFx1MjNGM1xcdTIzRjgtXFx1MjNGQVxcdTI0QzJcXHUyNUFBXFx1MjVBQlxcdTI1QjZcXHUyNUMwXFx1MjVGQi1cXHUyNUZFXFx1MjYwMC1cXHUyNjA0XFx1MjYwRVxcdTI2MTFcXHUyNjE0XFx1MjYxNVxcdTI2MThcXHUyNjFEXFx1MjYyMFxcdTI2MjJcXHUyNjIzXFx1MjYyNlxcdTI2MkFcXHUyNjJFXFx1MjYyRlxcdTI2MzgtXFx1MjYzQVxcdTI2NDBcXHUyNjQyXFx1MjY0OC1cXHUyNjUzXFx1MjY1RlxcdTI2NjBcXHUyNjYzXFx1MjY2NVxcdTI2NjZcXHUyNjY4XFx1MjY3QlxcdTI2N0VcXHUyNjdGXFx1MjY5Mi1cXHUyNjk3XFx1MjY5OVxcdTI2OUJcXHUyNjlDXFx1MjZBMFxcdTI2QTFcXHUyNkFBXFx1MjZBQlxcdTI2QjBcXHUyNkIxXFx1MjZCRFxcdTI2QkVcXHUyNkM0XFx1MjZDNVxcdTI2QzhcXHUyNkNFXFx1MjZDRlxcdTI2RDFcXHUyNkQzXFx1MjZENFxcdTI2RTlcXHUyNkVBXFx1MjZGMC1cXHUyNkY1XFx1MjZGNy1cXHUyNkZBXFx1MjZGRFxcdTI3MDJcXHUyNzA1XFx1MjcwOC1cXHUyNzBEXFx1MjcwRlxcdTI3MTJcXHUyNzE0XFx1MjcxNlxcdTI3MURcXHUyNzIxXFx1MjcyOFxcdTI3MzNcXHUyNzM0XFx1Mjc0NFxcdTI3NDdcXHUyNzRDXFx1Mjc0RVxcdTI3NTMtXFx1Mjc1NVxcdTI3NTdcXHUyNzYzXFx1Mjc2NFxcdTI3OTUtXFx1Mjc5N1xcdTI3QTFcXHUyN0IwXFx1MjdCRlxcdTI5MzRcXHUyOTM1XFx1MkIwNS1cXHUyQjA3XFx1MkIxQlxcdTJCMUNcXHUyQjUwXFx1MkI1NVxcdTMwMzBcXHUzMDNEXFx1MzI5N1xcdTMyOTldfFxcdUQ4M0NbXFx1REMwNFxcdURDQ0ZcXHVERDcwXFx1REQ3MVxcdUREN0VcXHVERDdGXFx1REQ4RVxcdUREOTEtXFx1REQ5QVxcdURERTYtXFx1RERGRlxcdURFMDFcXHVERTAyXFx1REUxQVxcdURFMkZcXHVERTMyLVxcdURFM0FcXHVERTUwXFx1REU1MVxcdURGMDAtXFx1REYyMVxcdURGMjQtXFx1REY5M1xcdURGOTZcXHVERjk3XFx1REY5OS1cXHVERjlCXFx1REY5RS1cXHVERkYwXFx1REZGMy1cXHVERkY1XFx1REZGNy1cXHVERkZGXXxcXHVEODNEW1xcdURDMDAtXFx1RENGRFxcdURDRkYtXFx1REQzRFxcdURENDktXFx1REQ0RVxcdURENTAtXFx1REQ2N1xcdURENkZcXHVERDcwXFx1REQ3My1cXHVERDdBXFx1REQ4N1xcdUREOEEtXFx1REQ4RFxcdUREOTBcXHVERDk1XFx1REQ5NlxcdUREQTRcXHVEREE1XFx1RERBOFxcdUREQjFcXHVEREIyXFx1RERCQ1xcdUREQzItXFx1RERDNFxcdURERDEtXFx1REREM1xcdUREREMtXFx1RERERVxcdURERTFcXHVEREUzXFx1RERFOFxcdURERUZcXHVEREYzXFx1RERGQS1cXHVERTRGXFx1REU4MC1cXHVERUM1XFx1REVDQi1cXHVERUQyXFx1REVENVxcdURFRTAtXFx1REVFNVxcdURFRTlcXHVERUVCXFx1REVFQ1xcdURFRjBcXHVERUYzLVxcdURFRkFcXHVERkUwLVxcdURGRUJdfFxcdUQ4M0VbXFx1REQwRC1cXHVERDNBXFx1REQzQy1cXHVERDQ1XFx1REQ0Ny1cXHVERDcxXFx1REQ3My1cXHVERDc2XFx1REQ3QS1cXHVEREEyXFx1RERBNS1cXHVEREFBXFx1RERBRS1cXHVERENBXFx1RERDRC1cXHVEREZGXFx1REU3MC1cXHVERTczXFx1REU3OC1cXHVERTdBXFx1REU4MC1cXHVERTgyXFx1REU5MC1cXHVERTk1XSlcXHVGRTBGfCg/OltcXHUyNjFEXFx1MjZGOVxcdTI3MEEtXFx1MjcwRF18XFx1RDgzQ1tcXHVERjg1XFx1REZDMi1cXHVERkM0XFx1REZDN1xcdURGQ0EtXFx1REZDQ118XFx1RDgzRFtcXHVEQzQyXFx1REM0M1xcdURDNDYtXFx1REM1MFxcdURDNjYtXFx1REM3OFxcdURDN0NcXHVEQzgxLVxcdURDODNcXHVEQzg1LVxcdURDODdcXHVEQzhGXFx1REM5MVxcdURDQUFcXHVERDc0XFx1REQ3NVxcdUREN0FcXHVERDkwXFx1REQ5NVxcdUREOTZcXHVERTQ1LVxcdURFNDdcXHVERTRCLVxcdURFNEZcXHVERUEzXFx1REVCNC1cXHVERUI2XFx1REVDMFxcdURFQ0NdfFxcdUQ4M0VbXFx1REQwRlxcdUREMTgtXFx1REQxRlxcdUREMjZcXHVERDMwLVxcdUREMzlcXHVERDNDLVxcdUREM0VcXHVEREI1XFx1RERCNlxcdUREQjhcXHVEREI5XFx1RERCQlxcdUREQ0QtXFx1RERDRlxcdURERDEtXFx1RERERF0pL2c7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IHN0cmlwQW5zaSA9IHJlcXVpcmUoJ3N0cmlwLWFuc2knKTtcbmNvbnN0IGlzRnVsbHdpZHRoQ29kZVBvaW50ID0gcmVxdWlyZSgnaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQnKTtcbmNvbnN0IGVtb2ppUmVnZXggPSByZXF1aXJlKCdlbW9qaS1yZWdleCcpO1xuXG5jb25zdCBzdHJpbmdXaWR0aCA9IHN0cmluZyA9PiB7XG5cdGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJyB8fCBzdHJpbmcubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRzdHJpbmcgPSBzdHJpcEFuc2koc3RyaW5nKTtcblxuXHRpZiAoc3RyaW5nLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoZW1vamlSZWdleCgpLCAnICAnKTtcblxuXHRsZXQgd2lkdGggPSAwO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgY29kZSA9IHN0cmluZy5jb2RlUG9pbnRBdChpKTtcblxuXHRcdC8vIElnbm9yZSBjb250cm9sIGNoYXJhY3RlcnNcblx0XHRpZiAoY29kZSA8PSAweDFGIHx8IChjb2RlID49IDB4N0YgJiYgY29kZSA8PSAweDlGKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Ly8gSWdub3JlIGNvbWJpbmluZyBjaGFyYWN0ZXJzXG5cdFx0aWYgKGNvZGUgPj0gMHgzMDAgJiYgY29kZSA8PSAweDM2Rikge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Ly8gU3Vycm9nYXRlc1xuXHRcdGlmIChjb2RlID4gMHhGRkZGKSB7XG5cdFx0XHRpKys7XG5cdFx0fVxuXG5cdFx0d2lkdGggKz0gaXNGdWxsd2lkdGhDb2RlUG9pbnQoY29kZSkgPyAyIDogMTtcblx0fVxuXG5cdHJldHVybiB3aWR0aDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nV2lkdGg7XG4vLyBUT0RPOiByZW1vdmUgdGhpcyBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gc3RyaW5nV2lkdGg7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuY29uc3Qgc3RyaW5nV2lkdGggPSByZXF1aXJlKCdzdHJpbmctd2lkdGgnKTtcbmNvbnN0IHN0cmlwQW5zaSA9IHJlcXVpcmUoJ3N0cmlwLWFuc2knKTtcbmNvbnN0IGFuc2lTdHlsZXMgPSByZXF1aXJlKCdhbnNpLXN0eWxlcycpO1xuXG5jb25zdCBFU0NBUEVTID0gbmV3IFNldChbXG5cdCdcXHUwMDFCJyxcblx0J1xcdTAwOUInXG5dKTtcblxuY29uc3QgRU5EX0NPREUgPSAzOTtcblxuY29uc3QgQU5TSV9FU0NBUEVfQkVMTCA9ICdcXHUwMDA3JztcbmNvbnN0IEFOU0lfQ1NJID0gJ1snO1xuY29uc3QgQU5TSV9PU0MgPSAnXSc7XG5jb25zdCBBTlNJX1NHUl9URVJNSU5BVE9SID0gJ20nO1xuY29uc3QgQU5TSV9FU0NBUEVfTElOSyA9IGAke0FOU0lfT1NDfTg7O2A7XG5cbmNvbnN0IHdyYXBBbnNpID0gY29kZSA9PiBgJHtFU0NBUEVTLnZhbHVlcygpLm5leHQoKS52YWx1ZX0ke0FOU0lfQ1NJfSR7Y29kZX0ke0FOU0lfU0dSX1RFUk1JTkFUT1J9YDtcbmNvbnN0IHdyYXBBbnNpSHlwZXJsaW5rID0gdXJpID0+IGAke0VTQ0FQRVMudmFsdWVzKCkubmV4dCgpLnZhbHVlfSR7QU5TSV9FU0NBUEVfTElOS30ke3VyaX0ke0FOU0lfRVNDQVBFX0JFTEx9YDtcblxuLy8gQ2FsY3VsYXRlIHRoZSBsZW5ndGggb2Ygd29yZHMgc3BsaXQgb24gJyAnLCBpZ25vcmluZ1xuLy8gdGhlIGV4dHJhIGNoYXJhY3RlcnMgYWRkZWQgYnkgYW5zaSBlc2NhcGUgY29kZXNcbmNvbnN0IHdvcmRMZW5ndGhzID0gc3RyaW5nID0+IHN0cmluZy5zcGxpdCgnICcpLm1hcChjaGFyYWN0ZXIgPT4gc3RyaW5nV2lkdGgoY2hhcmFjdGVyKSk7XG5cbi8vIFdyYXAgYSBsb25nIHdvcmQgYWNyb3NzIG11bHRpcGxlIHJvd3Ncbi8vIEFuc2kgZXNjYXBlIGNvZGVzIGRvIG5vdCBjb3VudCB0b3dhcmRzIGxlbmd0aFxuY29uc3Qgd3JhcFdvcmQgPSAocm93cywgd29yZCwgY29sdW1ucykgPT4ge1xuXHRjb25zdCBjaGFyYWN0ZXJzID0gWy4uLndvcmRdO1xuXG5cdGxldCBpc0luc2lkZUVzY2FwZSA9IGZhbHNlO1xuXHRsZXQgaXNJbnNpZGVMaW5rRXNjYXBlID0gZmFsc2U7XG5cdGxldCB2aXNpYmxlID0gc3RyaW5nV2lkdGgoc3RyaXBBbnNpKHJvd3Nbcm93cy5sZW5ndGggLSAxXSkpO1xuXG5cdGZvciAoY29uc3QgW2luZGV4LCBjaGFyYWN0ZXJdIG9mIGNoYXJhY3RlcnMuZW50cmllcygpKSB7XG5cdFx0Y29uc3QgY2hhcmFjdGVyTGVuZ3RoID0gc3RyaW5nV2lkdGgoY2hhcmFjdGVyKTtcblxuXHRcdGlmICh2aXNpYmxlICsgY2hhcmFjdGVyTGVuZ3RoIDw9IGNvbHVtbnMpIHtcblx0XHRcdHJvd3Nbcm93cy5sZW5ndGggLSAxXSArPSBjaGFyYWN0ZXI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJvd3MucHVzaChjaGFyYWN0ZXIpO1xuXHRcdFx0dmlzaWJsZSA9IDA7XG5cdFx0fVxuXG5cdFx0aWYgKEVTQ0FQRVMuaGFzKGNoYXJhY3RlcikpIHtcblx0XHRcdGlzSW5zaWRlRXNjYXBlID0gdHJ1ZTtcblx0XHRcdGlzSW5zaWRlTGlua0VzY2FwZSA9IGNoYXJhY3RlcnMuc2xpY2UoaW5kZXggKyAxKS5qb2luKCcnKS5zdGFydHNXaXRoKEFOU0lfRVNDQVBFX0xJTkspO1xuXHRcdH1cblxuXHRcdGlmIChpc0luc2lkZUVzY2FwZSkge1xuXHRcdFx0aWYgKGlzSW5zaWRlTGlua0VzY2FwZSkge1xuXHRcdFx0XHRpZiAoY2hhcmFjdGVyID09PSBBTlNJX0VTQ0FQRV9CRUxMKSB7XG5cdFx0XHRcdFx0aXNJbnNpZGVFc2NhcGUgPSBmYWxzZTtcblx0XHRcdFx0XHRpc0luc2lkZUxpbmtFc2NhcGUgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChjaGFyYWN0ZXIgPT09IEFOU0lfU0dSX1RFUk1JTkFUT1IpIHtcblx0XHRcdFx0aXNJbnNpZGVFc2NhcGUgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0dmlzaWJsZSArPSBjaGFyYWN0ZXJMZW5ndGg7XG5cblx0XHRpZiAodmlzaWJsZSA9PT0gY29sdW1ucyAmJiBpbmRleCA8IGNoYXJhY3RlcnMubGVuZ3RoIC0gMSkge1xuXHRcdFx0cm93cy5wdXNoKCcnKTtcblx0XHRcdHZpc2libGUgPSAwO1xuXHRcdH1cblx0fVxuXG5cdC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgbGFzdCByb3cgd2UgY29weSBvdmVyIGlzIG9ubHlcblx0Ly8gYW5zaSBlc2NhcGUgY2hhcmFjdGVycywgaGFuZGxlIHRoaXMgZWRnZS1jYXNlXG5cdGlmICghdmlzaWJsZSAmJiByb3dzW3Jvd3MubGVuZ3RoIC0gMV0ubGVuZ3RoID4gMCAmJiByb3dzLmxlbmd0aCA+IDEpIHtcblx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMl0gKz0gcm93cy5wb3AoKTtcblx0fVxufTtcblxuLy8gVHJpbXMgc3BhY2VzIGZyb20gYSBzdHJpbmcgaWdub3JpbmcgaW52aXNpYmxlIHNlcXVlbmNlc1xuY29uc3Qgc3RyaW5nVmlzaWJsZVRyaW1TcGFjZXNSaWdodCA9IHN0cmluZyA9PiB7XG5cdGNvbnN0IHdvcmRzID0gc3RyaW5nLnNwbGl0KCcgJyk7XG5cdGxldCBsYXN0ID0gd29yZHMubGVuZ3RoO1xuXG5cdHdoaWxlIChsYXN0ID4gMCkge1xuXHRcdGlmIChzdHJpbmdXaWR0aCh3b3Jkc1tsYXN0IC0gMV0pID4gMCkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0bGFzdC0tO1xuXHR9XG5cblx0aWYgKGxhc3QgPT09IHdvcmRzLmxlbmd0aCkge1xuXHRcdHJldHVybiBzdHJpbmc7XG5cdH1cblxuXHRyZXR1cm4gd29yZHMuc2xpY2UoMCwgbGFzdCkuam9pbignICcpICsgd29yZHMuc2xpY2UobGFzdCkuam9pbignJyk7XG59O1xuXG4vLyBUaGUgd3JhcC1hbnNpIG1vZHVsZSBjYW4gYmUgaW52b2tlZCBpbiBlaXRoZXIgJ2hhcmQnIG9yICdzb2Z0JyB3cmFwIG1vZGVcbi8vXG4vLyAnaGFyZCcgd2lsbCBuZXZlciBhbGxvdyBhIHN0cmluZyB0byB0YWtlIHVwIG1vcmUgdGhhbiBjb2x1bW5zIGNoYXJhY3RlcnNcbi8vXG4vLyAnc29mdCcgYWxsb3dzIGxvbmcgd29yZHMgdG8gZXhwYW5kIHBhc3QgdGhlIGNvbHVtbiBsZW5ndGhcbmNvbnN0IGV4ZWMgPSAoc3RyaW5nLCBjb2x1bW5zLCBvcHRpb25zID0ge30pID0+IHtcblx0aWYgKG9wdGlvbnMudHJpbSAhPT0gZmFsc2UgJiYgc3RyaW5nLnRyaW0oKSA9PT0gJycpIHtcblx0XHRyZXR1cm4gJyc7XG5cdH1cblxuXHRsZXQgcmV0dXJuVmFsdWUgPSAnJztcblx0bGV0IGVzY2FwZUNvZGU7XG5cdGxldCBlc2NhcGVVcmw7XG5cblx0Y29uc3QgbGVuZ3RocyA9IHdvcmRMZW5ndGhzKHN0cmluZyk7XG5cdGxldCByb3dzID0gWycnXTtcblxuXHRmb3IgKGNvbnN0IFtpbmRleCwgd29yZF0gb2Ygc3RyaW5nLnNwbGl0KCcgJykuZW50cmllcygpKSB7XG5cdFx0aWYgKG9wdGlvbnMudHJpbSAhPT0gZmFsc2UpIHtcblx0XHRcdHJvd3Nbcm93cy5sZW5ndGggLSAxXSA9IHJvd3Nbcm93cy5sZW5ndGggLSAxXS50cmltU3RhcnQoKTtcblx0XHR9XG5cblx0XHRsZXQgcm93TGVuZ3RoID0gc3RyaW5nV2lkdGgocm93c1tyb3dzLmxlbmd0aCAtIDFdKTtcblxuXHRcdGlmIChpbmRleCAhPT0gMCkge1xuXHRcdFx0aWYgKHJvd0xlbmd0aCA+PSBjb2x1bW5zICYmIChvcHRpb25zLndvcmRXcmFwID09PSBmYWxzZSB8fCBvcHRpb25zLnRyaW0gPT09IGZhbHNlKSkge1xuXHRcdFx0XHQvLyBJZiB3ZSBzdGFydCB3aXRoIGEgbmV3IHdvcmQgYnV0IHRoZSBjdXJyZW50IHJvdyBsZW5ndGggZXF1YWxzIHRoZSBsZW5ndGggb2YgdGhlIGNvbHVtbnMsIGFkZCBhIG5ldyByb3dcblx0XHRcdFx0cm93cy5wdXNoKCcnKTtcblx0XHRcdFx0cm93TGVuZ3RoID0gMDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHJvd0xlbmd0aCA+IDAgfHwgb3B0aW9ucy50cmltID09PSBmYWxzZSkge1xuXHRcdFx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gKz0gJyAnO1xuXHRcdFx0XHRyb3dMZW5ndGgrKztcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJbiAnaGFyZCcgd3JhcCBtb2RlLCB0aGUgbGVuZ3RoIG9mIGEgbGluZSBpcyBuZXZlciBhbGxvd2VkIHRvIGV4dGVuZCBwYXN0ICdjb2x1bW5zJ1xuXHRcdGlmIChvcHRpb25zLmhhcmQgJiYgbGVuZ3Roc1tpbmRleF0gPiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCByZW1haW5pbmdDb2x1bW5zID0gKGNvbHVtbnMgLSByb3dMZW5ndGgpO1xuXHRcdFx0Y29uc3QgYnJlYWtzU3RhcnRpbmdUaGlzTGluZSA9IDEgKyBNYXRoLmZsb29yKChsZW5ndGhzW2luZGV4XSAtIHJlbWFpbmluZ0NvbHVtbnMgLSAxKSAvIGNvbHVtbnMpO1xuXHRcdFx0Y29uc3QgYnJlYWtzU3RhcnRpbmdOZXh0TGluZSA9IE1hdGguZmxvb3IoKGxlbmd0aHNbaW5kZXhdIC0gMSkgLyBjb2x1bW5zKTtcblx0XHRcdGlmIChicmVha3NTdGFydGluZ05leHRMaW5lIDwgYnJlYWtzU3RhcnRpbmdUaGlzTGluZSkge1xuXHRcdFx0XHRyb3dzLnB1c2goJycpO1xuXHRcdFx0fVxuXG5cdFx0XHR3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChyb3dMZW5ndGggKyBsZW5ndGhzW2luZGV4XSA+IGNvbHVtbnMgJiYgcm93TGVuZ3RoID4gMCAmJiBsZW5ndGhzW2luZGV4XSA+IDApIHtcblx0XHRcdGlmIChvcHRpb25zLndvcmRXcmFwID09PSBmYWxzZSAmJiByb3dMZW5ndGggPCBjb2x1bW5zKSB7XG5cdFx0XHRcdHdyYXBXb3JkKHJvd3MsIHdvcmQsIGNvbHVtbnMpO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0cm93cy5wdXNoKCcnKTtcblx0XHR9XG5cblx0XHRpZiAocm93TGVuZ3RoICsgbGVuZ3Roc1tpbmRleF0gPiBjb2x1bW5zICYmIG9wdGlvbnMud29yZFdyYXAgPT09IGZhbHNlKSB7XG5cdFx0XHR3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdHJvd3Nbcm93cy5sZW5ndGggLSAxXSArPSB3b3JkO1xuXHR9XG5cblx0aWYgKG9wdGlvbnMudHJpbSAhPT0gZmFsc2UpIHtcblx0XHRyb3dzID0gcm93cy5tYXAoc3RyaW5nVmlzaWJsZVRyaW1TcGFjZXNSaWdodCk7XG5cdH1cblxuXHRjb25zdCBwcmUgPSBbLi4ucm93cy5qb2luKCdcXG4nKV07XG5cblx0Zm9yIChjb25zdCBbaW5kZXgsIGNoYXJhY3Rlcl0gb2YgcHJlLmVudHJpZXMoKSkge1xuXHRcdHJldHVyblZhbHVlICs9IGNoYXJhY3RlcjtcblxuXHRcdGlmIChFU0NBUEVTLmhhcyhjaGFyYWN0ZXIpKSB7XG5cdFx0XHRjb25zdCB7Z3JvdXBzfSA9IG5ldyBSZWdFeHAoYCg/OlxcXFwke0FOU0lfQ1NJfSg/PGNvZGU+XFxcXGQrKW18XFxcXCR7QU5TSV9FU0NBUEVfTElOS30oPzx1cmk+LiopJHtBTlNJX0VTQ0FQRV9CRUxMfSlgKS5leGVjKHByZS5zbGljZShpbmRleCkuam9pbignJykpIHx8IHtncm91cHM6IHt9fTtcblx0XHRcdGlmIChncm91cHMuY29kZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnN0IGNvZGUgPSBOdW1iZXIucGFyc2VGbG9hdChncm91cHMuY29kZSk7XG5cdFx0XHRcdGVzY2FwZUNvZGUgPSBjb2RlID09PSBFTkRfQ09ERSA/IHVuZGVmaW5lZCA6IGNvZGU7XG5cdFx0XHR9IGVsc2UgaWYgKGdyb3Vwcy51cmkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRlc2NhcGVVcmwgPSBncm91cHMudXJpLmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IGdyb3Vwcy51cmk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgY29kZSA9IGFuc2lTdHlsZXMuY29kZXMuZ2V0KE51bWJlcihlc2NhcGVDb2RlKSk7XG5cblx0XHRpZiAocHJlW2luZGV4ICsgMV0gPT09ICdcXG4nKSB7XG5cdFx0XHRpZiAoZXNjYXBlVXJsKSB7XG5cdFx0XHRcdHJldHVyblZhbHVlICs9IHdyYXBBbnNpSHlwZXJsaW5rKCcnKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGVzY2FwZUNvZGUgJiYgY29kZSkge1xuXHRcdFx0XHRyZXR1cm5WYWx1ZSArPSB3cmFwQW5zaShjb2RlKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGNoYXJhY3RlciA9PT0gJ1xcbicpIHtcblx0XHRcdGlmIChlc2NhcGVDb2RlICYmIGNvZGUpIHtcblx0XHRcdFx0cmV0dXJuVmFsdWUgKz0gd3JhcEFuc2koZXNjYXBlQ29kZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlc2NhcGVVcmwpIHtcblx0XHRcdFx0cmV0dXJuVmFsdWUgKz0gd3JhcEFuc2lIeXBlcmxpbmsoZXNjYXBlVXJsKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmV0dXJuVmFsdWU7XG59O1xuXG4vLyBGb3IgZWFjaCBuZXdsaW5lLCBpbnZva2UgdGhlIG1ldGhvZCBzZXBhcmF0ZWx5XG5tb2R1bGUuZXhwb3J0cyA9IChzdHJpbmcsIGNvbHVtbnMsIG9wdGlvbnMpID0+IHtcblx0cmV0dXJuIFN0cmluZyhzdHJpbmcpXG5cdFx0Lm5vcm1hbGl6ZSgpXG5cdFx0LnJlcGxhY2UoL1xcclxcbi9nLCAnXFxuJylcblx0XHQuc3BsaXQoJ1xcbicpXG5cdFx0Lm1hcChsaW5lID0+IGV4ZWMobGluZSwgY29sdW1ucywgb3B0aW9ucykpXG5cdFx0LmpvaW4oJ1xcbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IGFsaWduID0ge1xuICAgIHJpZ2h0OiBhbGlnblJpZ2h0LFxuICAgIGNlbnRlcjogYWxpZ25DZW50ZXJcbn07XG5jb25zdCB0b3AgPSAwO1xuY29uc3QgcmlnaHQgPSAxO1xuY29uc3QgYm90dG9tID0gMjtcbmNvbnN0IGxlZnQgPSAzO1xuY2xhc3MgVUkge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLndpZHRoID0gb3B0cy53aWR0aDtcbiAgICAgICAgdGhpcy53cmFwID0gKF9hID0gb3B0cy53cmFwKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0cnVlO1xuICAgICAgICB0aGlzLnJvd3MgPSBbXTtcbiAgICB9XG4gICAgc3BhbiguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IGNvbHMgPSB0aGlzLmRpdiguLi5hcmdzKTtcbiAgICAgICAgY29scy5zcGFuID0gdHJ1ZTtcbiAgICB9XG4gICAgcmVzZXRPdXRwdXQoKSB7XG4gICAgICAgIHRoaXMucm93cyA9IFtdO1xuICAgIH1cbiAgICBkaXYoLi4uYXJncykge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGl2KCcnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy53cmFwICYmIHRoaXMuc2hvdWxkQXBwbHlMYXlvdXREU0woLi4uYXJncykgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBseUxheW91dERTTChhcmdzWzBdKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2xzID0gYXJncy5tYXAoYXJnID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbEZyb21TdHJpbmcoYXJnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJvd3MucHVzaChjb2xzKTtcbiAgICAgICAgcmV0dXJuIGNvbHM7XG4gICAgfVxuICAgIHNob3VsZEFwcGx5TGF5b3V0RFNMKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgL1tcXHRcXG5dLy50ZXN0KGFyZ3NbMF0pO1xuICAgIH1cbiAgICBhcHBseUxheW91dERTTChzdHIpIHtcbiAgICAgICAgY29uc3Qgcm93cyA9IHN0ci5zcGxpdCgnXFxuJykubWFwKHJvdyA9PiByb3cuc3BsaXQoJ1xcdCcpKTtcbiAgICAgICAgbGV0IGxlZnRDb2x1bW5XaWR0aCA9IDA7XG4gICAgICAgIC8vIHNpbXBsZSBoZXVyaXN0aWMgZm9yIGxheW91dCwgbWFrZSBzdXJlIHRoZVxuICAgICAgICAvLyBzZWNvbmQgY29sdW1uIGxpbmVzIHVwIGFsb25nIHRoZSBsZWZ0LWhhbmQuXG4gICAgICAgIC8vIGRvbid0IGFsbG93IHRoZSBmaXJzdCBjb2x1bW4gdG8gdGFrZSB1cCBtb3JlXG4gICAgICAgIC8vIHRoYW4gNTAlIG9mIHRoZSBzY3JlZW4uXG4gICAgICAgIHJvd3MuZm9yRWFjaChjb2x1bW5zID0+IHtcbiAgICAgICAgICAgIGlmIChjb2x1bW5zLmxlbmd0aCA+IDEgJiYgbWl4aW4uc3RyaW5nV2lkdGgoY29sdW1uc1swXSkgPiBsZWZ0Q29sdW1uV2lkdGgpIHtcbiAgICAgICAgICAgICAgICBsZWZ0Q29sdW1uV2lkdGggPSBNYXRoLm1pbihNYXRoLmZsb29yKHRoaXMud2lkdGggKiAwLjUpLCBtaXhpbi5zdHJpbmdXaWR0aChjb2x1bW5zWzBdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBnZW5lcmF0ZSBhIHRhYmxlOlxuICAgICAgICAvLyAgcmVwbGFjaW5nICcgJyB3aXRoIHBhZGRpbmcgY2FsY3VsYXRpb25zLlxuICAgICAgICAvLyAgdXNpbmcgdGhlIGFsZ29yaXRobWljYWxseSBnZW5lcmF0ZWQgd2lkdGguXG4gICAgICAgIHJvd3MuZm9yRWFjaChjb2x1bW5zID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGl2KC4uLmNvbHVtbnMubWFwKChyLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogci50cmltKCksXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IHRoaXMubWVhc3VyZVBhZGRpbmcociksXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAoaSA9PT0gMCAmJiBjb2x1bW5zLmxlbmd0aCA+IDEpID8gbGVmdENvbHVtbldpZHRoIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd3NbdGhpcy5yb3dzLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICBjb2xGcm9tU3RyaW5nKHRleHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICBwYWRkaW5nOiB0aGlzLm1lYXN1cmVQYWRkaW5nKHRleHQpXG4gICAgICAgIH07XG4gICAgfVxuICAgIG1lYXN1cmVQYWRkaW5nKHN0cikge1xuICAgICAgICAvLyBtZWFzdXJlIHBhZGRpbmcgd2l0aG91dCBhbnNpIGVzY2FwZSBjb2Rlc1xuICAgICAgICBjb25zdCBub0Fuc2kgPSBtaXhpbi5zdHJpcEFuc2koc3RyKTtcbiAgICAgICAgcmV0dXJuIFswLCBub0Fuc2kubWF0Y2goL1xccyokLylbMF0ubGVuZ3RoLCAwLCBub0Fuc2kubWF0Y2goL15cXHMqLylbMF0ubGVuZ3RoXTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGNvbnN0IGxpbmVzID0gW107XG4gICAgICAgIHRoaXMucm93cy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICB0aGlzLnJvd1RvU3RyaW5nKHJvdywgbGluZXMpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gZG9uJ3QgZGlzcGxheSBhbnkgbGluZXMgd2l0aCB0aGVcbiAgICAgICAgLy8gaGlkZGVuIGZsYWcgc2V0LlxuICAgICAgICByZXR1cm4gbGluZXNcbiAgICAgICAgICAgIC5maWx0ZXIobGluZSA9PiAhbGluZS5oaWRkZW4pXG4gICAgICAgICAgICAubWFwKGxpbmUgPT4gbGluZS50ZXh0KVxuICAgICAgICAgICAgLmpvaW4oJ1xcbicpO1xuICAgIH1cbiAgICByb3dUb1N0cmluZyhyb3csIGxpbmVzKSB7XG4gICAgICAgIHRoaXMucmFzdGVyaXplKHJvdykuZm9yRWFjaCgocnJvdywgcikgPT4ge1xuICAgICAgICAgICAgbGV0IHN0ciA9ICcnO1xuICAgICAgICAgICAgcnJvdy5mb3JFYWNoKChjb2wsIGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHdpZHRoIH0gPSByb3dbY107IC8vIHRoZSB3aWR0aCB3aXRoIHBhZGRpbmcuXG4gICAgICAgICAgICAgICAgY29uc3Qgd3JhcFdpZHRoID0gdGhpcy5uZWdhdGVQYWRkaW5nKHJvd1tjXSk7IC8vIHRoZSB3aWR0aCB3aXRob3V0IHBhZGRpbmcuXG4gICAgICAgICAgICAgICAgbGV0IHRzID0gY29sOyAvLyB0ZW1wb3Jhcnkgc3RyaW5nIHVzZWQgZHVyaW5nIGFsaWdubWVudC9wYWRkaW5nLlxuICAgICAgICAgICAgICAgIGlmICh3cmFwV2lkdGggPiBtaXhpbi5zdHJpbmdXaWR0aChjb2wpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRzICs9ICcgJy5yZXBlYXQod3JhcFdpZHRoIC0gbWl4aW4uc3RyaW5nV2lkdGgoY29sKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGFsaWduIHRoZSBzdHJpbmcgd2l0aGluIGl0cyBjb2x1bW4uXG4gICAgICAgICAgICAgICAgaWYgKHJvd1tjXS5hbGlnbiAmJiByb3dbY10uYWxpZ24gIT09ICdsZWZ0JyAmJiB0aGlzLndyYXApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm4gPSBhbGlnbltyb3dbY10uYWxpZ25dO1xuICAgICAgICAgICAgICAgICAgICB0cyA9IGZuKHRzLCB3cmFwV2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWl4aW4uc3RyaW5nV2lkdGgodHMpIDwgd3JhcFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cyArPSAnICcucmVwZWF0KCh3aWR0aCB8fCAwKSAtIG1peGluLnN0cmluZ1dpZHRoKHRzKSAtIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGFwcGx5IGJvcmRlciBhbmQgcGFkZGluZyB0byBzdHJpbmcuXG4gICAgICAgICAgICAgICAgY29uc3QgcGFkZGluZyA9IHJvd1tjXS5wYWRkaW5nIHx8IFswLCAwLCAwLCAwXTtcbiAgICAgICAgICAgICAgICBpZiAocGFkZGluZ1tsZWZ0XSkge1xuICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJyAnLnJlcGVhdChwYWRkaW5nW2xlZnRdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RyICs9IGFkZEJvcmRlcihyb3dbY10sIHRzLCAnfCAnKTtcbiAgICAgICAgICAgICAgICBzdHIgKz0gdHM7XG4gICAgICAgICAgICAgICAgc3RyICs9IGFkZEJvcmRlcihyb3dbY10sIHRzLCAnIHwnKTtcbiAgICAgICAgICAgICAgICBpZiAocGFkZGluZ1tyaWdodF0pIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyICs9ICcgJy5yZXBlYXQocGFkZGluZ1tyaWdodF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBpZiBwcmlvciByb3cgaXMgc3BhbiwgdHJ5IHRvIHJlbmRlciB0aGVcbiAgICAgICAgICAgICAgICAvLyBjdXJyZW50IHJvdyBvbiB0aGUgcHJpb3IgbGluZS5cbiAgICAgICAgICAgICAgICBpZiAociA9PT0gMCAmJiBsaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMucmVuZGVySW5saW5lKHN0ciwgbGluZXNbbGluZXMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2UuXG4gICAgICAgICAgICBsaW5lcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBzdHIucmVwbGFjZSgvICskLywgJycpLFxuICAgICAgICAgICAgICAgIHNwYW46IHJvdy5zcGFuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBsaW5lcztcbiAgICB9XG4gICAgLy8gaWYgdGhlIGZ1bGwgJ3NvdXJjZScgY2FuIHJlbmRlciBpblxuICAgIC8vIHRoZSB0YXJnZXQgbGluZSwgZG8gc28uXG4gICAgcmVuZGVySW5saW5lKHNvdXJjZSwgcHJldmlvdXNMaW5lKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gc291cmNlLm1hdGNoKC9eICovKTtcbiAgICAgICAgY29uc3QgbGVhZGluZ1doaXRlc3BhY2UgPSBtYXRjaCA/IG1hdGNoWzBdLmxlbmd0aCA6IDA7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHByZXZpb3VzTGluZS50ZXh0O1xuICAgICAgICBjb25zdCB0YXJnZXRUZXh0V2lkdGggPSBtaXhpbi5zdHJpbmdXaWR0aCh0YXJnZXQudHJpbVJpZ2h0KCkpO1xuICAgICAgICBpZiAoIXByZXZpb3VzTGluZS5zcGFuKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHdlJ3JlIG5vdCBhcHBseWluZyB3cmFwcGluZyBsb2dpYyxcbiAgICAgICAgLy8ganVzdCBhbHdheXMgYXBwZW5kIHRvIHRoZSBzcGFuLlxuICAgICAgICBpZiAoIXRoaXMud3JhcCkge1xuICAgICAgICAgICAgcHJldmlvdXNMaW5lLmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0ICsgc291cmNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZWFkaW5nV2hpdGVzcGFjZSA8IHRhcmdldFRleHRXaWR0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgICBwcmV2aW91c0xpbmUuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRhcmdldC50cmltUmlnaHQoKSArICcgJy5yZXBlYXQobGVhZGluZ1doaXRlc3BhY2UgLSB0YXJnZXRUZXh0V2lkdGgpICsgc291cmNlLnRyaW1MZWZ0KCk7XG4gICAgfVxuICAgIHJhc3Rlcml6ZShyb3cpIHtcbiAgICAgICAgY29uc3QgcnJvd3MgPSBbXTtcbiAgICAgICAgY29uc3Qgd2lkdGhzID0gdGhpcy5jb2x1bW5XaWR0aHMocm93KTtcbiAgICAgICAgbGV0IHdyYXBwZWQ7XG4gICAgICAgIC8vIHdvcmQgd3JhcCBhbGwgY29sdW1ucywgYW5kIGNyZWF0ZVxuICAgICAgICAvLyBhIGRhdGEtc3RydWN0dXJlIHRoYXQgaXMgZWFzeSB0byByYXN0ZXJpemUuXG4gICAgICAgIHJvdy5mb3JFYWNoKChjb2wsIGMpID0+IHtcbiAgICAgICAgICAgIC8vIGxlYXZlIHJvb20gZm9yIGxlZnQgYW5kIHJpZ2h0IHBhZGRpbmcuXG4gICAgICAgICAgICBjb2wud2lkdGggPSB3aWR0aHNbY107XG4gICAgICAgICAgICBpZiAodGhpcy53cmFwKSB7XG4gICAgICAgICAgICAgICAgd3JhcHBlZCA9IG1peGluLndyYXAoY29sLnRleHQsIHRoaXMubmVnYXRlUGFkZGluZyhjb2wpLCB7IGhhcmQ6IHRydWUgfSkuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgd3JhcHBlZCA9IGNvbC50ZXh0LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb2wuYm9yZGVyKSB7XG4gICAgICAgICAgICAgICAgd3JhcHBlZC51bnNoaWZ0KCcuJyArICctJy5yZXBlYXQodGhpcy5uZWdhdGVQYWRkaW5nKGNvbCkgKyAyKSArICcuJyk7XG4gICAgICAgICAgICAgICAgd3JhcHBlZC5wdXNoKFwiJ1wiICsgJy0nLnJlcGVhdCh0aGlzLm5lZ2F0ZVBhZGRpbmcoY29sKSArIDIpICsgXCInXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYWRkIHRvcCBhbmQgYm90dG9tIHBhZGRpbmcuXG4gICAgICAgICAgICBpZiAoY29sLnBhZGRpbmcpIHtcbiAgICAgICAgICAgICAgICB3cmFwcGVkLnVuc2hpZnQoLi4ubmV3IEFycmF5KGNvbC5wYWRkaW5nW3RvcF0gfHwgMCkuZmlsbCgnJykpO1xuICAgICAgICAgICAgICAgIHdyYXBwZWQucHVzaCguLi5uZXcgQXJyYXkoY29sLnBhZGRpbmdbYm90dG9tXSB8fCAwKS5maWxsKCcnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3cmFwcGVkLmZvckVhY2goKHN0ciwgcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcnJvd3Nbcl0pIHtcbiAgICAgICAgICAgICAgICAgICAgcnJvd3MucHVzaChbXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJyb3cgPSBycm93c1tyXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAocnJvd1tpXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBycm93LnB1c2goJycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJyb3cucHVzaChzdHIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcnJvd3M7XG4gICAgfVxuICAgIG5lZ2F0ZVBhZGRpbmcoY29sKSB7XG4gICAgICAgIGxldCB3cmFwV2lkdGggPSBjb2wud2lkdGggfHwgMDtcbiAgICAgICAgaWYgKGNvbC5wYWRkaW5nKSB7XG4gICAgICAgICAgICB3cmFwV2lkdGggLT0gKGNvbC5wYWRkaW5nW2xlZnRdIHx8IDApICsgKGNvbC5wYWRkaW5nW3JpZ2h0XSB8fCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sLmJvcmRlcikge1xuICAgICAgICAgICAgd3JhcFdpZHRoIC09IDQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdyYXBXaWR0aDtcbiAgICB9XG4gICAgY29sdW1uV2lkdGhzKHJvdykge1xuICAgICAgICBpZiAoIXRoaXMud3JhcCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdy5tYXAoY29sID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sLndpZHRoIHx8IG1peGluLnN0cmluZ1dpZHRoKGNvbC50ZXh0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGxldCB1bnNldCA9IHJvdy5sZW5ndGg7XG4gICAgICAgIGxldCByZW1haW5pbmdXaWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgIC8vIGNvbHVtbiB3aWR0aHMgY2FuIGJlIHNldCBpbiBjb25maWcuXG4gICAgICAgIGNvbnN0IHdpZHRocyA9IHJvdy5tYXAoY29sID0+IHtcbiAgICAgICAgICAgIGlmIChjb2wud2lkdGgpIHtcbiAgICAgICAgICAgICAgICB1bnNldC0tO1xuICAgICAgICAgICAgICAgIHJlbWFpbmluZ1dpZHRoIC09IGNvbC53aWR0aDtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sLndpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGFueSB1bnNldCB3aWR0aHMgc2hvdWxkIGJlIGNhbGN1bGF0ZWQuXG4gICAgICAgIGNvbnN0IHVuc2V0V2lkdGggPSB1bnNldCA/IE1hdGguZmxvb3IocmVtYWluaW5nV2lkdGggLyB1bnNldCkgOiAwO1xuICAgICAgICByZXR1cm4gd2lkdGhzLm1hcCgodywgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKHcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCh1bnNldFdpZHRoLCBfbWluV2lkdGgocm93W2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdztcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZnVuY3Rpb24gYWRkQm9yZGVyKGNvbCwgdHMsIHN0eWxlKSB7XG4gICAgaWYgKGNvbC5ib3JkZXIpIHtcbiAgICAgICAgaWYgKC9bLiddLStbLiddLy50ZXN0KHRzKSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0cy50cmltKCkubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcgICc7XG4gICAgfVxuICAgIHJldHVybiAnJztcbn1cbi8vIGNhbGN1bGF0ZXMgdGhlIG1pbmltdW0gd2lkdGggb2Zcbi8vIGEgY29sdW1uLCBiYXNlZCBvbiBwYWRkaW5nIHByZWZlcmVuY2VzLlxuZnVuY3Rpb24gX21pbldpZHRoKGNvbCkge1xuICAgIGNvbnN0IHBhZGRpbmcgPSBjb2wucGFkZGluZyB8fCBbXTtcbiAgICBjb25zdCBtaW5XaWR0aCA9IDEgKyAocGFkZGluZ1tsZWZ0XSB8fCAwKSArIChwYWRkaW5nW3JpZ2h0XSB8fCAwKTtcbiAgICBpZiAoY29sLmJvcmRlcikge1xuICAgICAgICByZXR1cm4gbWluV2lkdGggKyA0O1xuICAgIH1cbiAgICByZXR1cm4gbWluV2lkdGg7XG59XG5mdW5jdGlvbiBnZXRXaW5kb3dXaWR0aCgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGVwZW5kcyBvbiB0ZXJtaW5hbCAqL1xuICAgIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgcHJvY2Vzcy5zdGRvdXQgJiYgcHJvY2Vzcy5zdGRvdXQuY29sdW1ucykge1xuICAgICAgICByZXR1cm4gcHJvY2Vzcy5zdGRvdXQuY29sdW1ucztcbiAgICB9XG4gICAgcmV0dXJuIDgwO1xufVxuZnVuY3Rpb24gYWxpZ25SaWdodChzdHIsIHdpZHRoKSB7XG4gICAgc3RyID0gc3RyLnRyaW0oKTtcbiAgICBjb25zdCBzdHJXaWR0aCA9IG1peGluLnN0cmluZ1dpZHRoKHN0cik7XG4gICAgaWYgKHN0cldpZHRoIDwgd2lkdGgpIHtcbiAgICAgICAgcmV0dXJuICcgJy5yZXBlYXQod2lkdGggLSBzdHJXaWR0aCkgKyBzdHI7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59XG5mdW5jdGlvbiBhbGlnbkNlbnRlcihzdHIsIHdpZHRoKSB7XG4gICAgc3RyID0gc3RyLnRyaW0oKTtcbiAgICBjb25zdCBzdHJXaWR0aCA9IG1peGluLnN0cmluZ1dpZHRoKHN0cik7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoc3RyV2lkdGggPj0gd2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgcmV0dXJuICcgJy5yZXBlYXQoKHdpZHRoIC0gc3RyV2lkdGgpID4+IDEpICsgc3RyO1xufVxubGV0IG1peGluO1xuZnVuY3Rpb24gY2xpdWkob3B0cywgX21peGluKSB7XG4gICAgbWl4aW4gPSBfbWl4aW47XG4gICAgcmV0dXJuIG5ldyBVSSh7XG4gICAgICAgIHdpZHRoOiAob3B0cyA9PT0gbnVsbCB8fCBvcHRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRzLndpZHRoKSB8fCBnZXRXaW5kb3dXaWR0aCgpLFxuICAgICAgICB3cmFwOiBvcHRzID09PSBudWxsIHx8IG9wdHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdHMud3JhcFxuICAgIH0pO1xufVxuXG4vLyBCb290c3RyYXAgY2xpdWkgd2l0aCBDb21tb25KUyBkZXBlbmRlbmNpZXM6XG5jb25zdCBzdHJpbmdXaWR0aCA9IHJlcXVpcmUoJ3N0cmluZy13aWR0aCcpO1xuY29uc3Qgc3RyaXBBbnNpID0gcmVxdWlyZSgnc3RyaXAtYW5zaScpO1xuY29uc3Qgd3JhcCA9IHJlcXVpcmUoJ3dyYXAtYW5zaScpO1xuZnVuY3Rpb24gdWkob3B0cykge1xuICAgIHJldHVybiBjbGl1aShvcHRzLCB7XG4gICAgICAgIHN0cmluZ1dpZHRoLFxuICAgICAgICBzdHJpcEFuc2ksXG4gICAgICAgIHdyYXBcbiAgICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1aTtcbiIsICJjb25zdCB7IGRpcm5hbWUsIHJlc29sdmUgfSA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IHsgcmVhZGRpclN5bmMsIHN0YXRTeW5jIH0gPSByZXF1aXJlKCdmcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdGFydCwgY2FsbGJhY2spIHtcblx0bGV0IGRpciA9IHJlc29sdmUoJy4nLCBzdGFydCk7XG5cdGxldCB0bXAsIHN0YXRzID0gc3RhdFN5bmMoZGlyKTtcblxuXHRpZiAoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcblx0XHRkaXIgPSBkaXJuYW1lKGRpcik7XG5cdH1cblxuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdHRtcCA9IGNhbGxiYWNrKGRpciwgcmVhZGRpclN5bmMoZGlyKSk7XG5cdFx0aWYgKHRtcCkgcmV0dXJuIHJlc29sdmUoZGlyLCB0bXApO1xuXHRcdGRpciA9IGRpcm5hbWUodG1wID0gZGlyKTtcblx0XHRpZiAodG1wID09PSBkaXIpIGJyZWFrO1xuXHR9XG59XG4iLCBudWxsLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZnMgPSByZXF1aXJlKCdmcycpLFxuICBqb2luID0gcmVxdWlyZSgncGF0aCcpLmpvaW4sXG4gIHJlc29sdmUgPSByZXF1aXJlKCdwYXRoJykucmVzb2x2ZSxcbiAgZGlybmFtZSA9IHJlcXVpcmUoJ3BhdGgnKS5kaXJuYW1lLFxuICBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBleHRlbnNpb25zOiBbJ2pzJywgJ2pzb24nLCAnY29mZmVlJ10sXG4gICAgcmVjdXJzZTogdHJ1ZSxcbiAgICByZW5hbWU6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICByZXR1cm4gbmFtZTtcbiAgICB9LFxuICAgIHZpc2l0OiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH1cbiAgfTtcblxuZnVuY3Rpb24gY2hlY2tGaWxlSW5jbHVzaW9uKHBhdGgsIGZpbGVuYW1lLCBvcHRpb25zKSB7XG4gIHJldHVybiAoXG4gICAgLy8gdmVyaWZ5IGZpbGUgaGFzIHZhbGlkIGV4dGVuc2lvblxuICAgIChuZXcgUmVnRXhwKCdcXFxcLignICsgb3B0aW9ucy5leHRlbnNpb25zLmpvaW4oJ3wnKSArICcpJCcsICdpJykudGVzdChmaWxlbmFtZSkpICYmXG5cbiAgICAvLyBpZiBvcHRpb25zLmluY2x1ZGUgaXMgYSBSZWdFeHAsIGV2YWx1YXRlIGl0IGFuZCBtYWtlIHN1cmUgdGhlIHBhdGggcGFzc2VzXG4gICAgIShvcHRpb25zLmluY2x1ZGUgJiYgb3B0aW9ucy5pbmNsdWRlIGluc3RhbmNlb2YgUmVnRXhwICYmICFvcHRpb25zLmluY2x1ZGUudGVzdChwYXRoKSkgJiZcblxuICAgIC8vIGlmIG9wdGlvbnMuaW5jbHVkZSBpcyBhIGZ1bmN0aW9uLCBldmFsdWF0ZSBpdCBhbmQgbWFrZSBzdXJlIHRoZSBwYXRoIHBhc3Nlc1xuICAgICEob3B0aW9ucy5pbmNsdWRlICYmIHR5cGVvZiBvcHRpb25zLmluY2x1ZGUgPT09ICdmdW5jdGlvbicgJiYgIW9wdGlvbnMuaW5jbHVkZShwYXRoLCBmaWxlbmFtZSkpICYmXG5cbiAgICAvLyBpZiBvcHRpb25zLmV4Y2x1ZGUgaXMgYSBSZWdFeHAsIGV2YWx1YXRlIGl0IGFuZCBtYWtlIHN1cmUgdGhlIHBhdGggZG9lc24ndCBwYXNzXG4gICAgIShvcHRpb25zLmV4Y2x1ZGUgJiYgb3B0aW9ucy5leGNsdWRlIGluc3RhbmNlb2YgUmVnRXhwICYmIG9wdGlvbnMuZXhjbHVkZS50ZXN0KHBhdGgpKSAmJlxuXG4gICAgLy8gaWYgb3B0aW9ucy5leGNsdWRlIGlzIGEgZnVuY3Rpb24sIGV2YWx1YXRlIGl0IGFuZCBtYWtlIHN1cmUgdGhlIHBhdGggZG9lc24ndCBwYXNzXG4gICAgIShvcHRpb25zLmV4Y2x1ZGUgJiYgdHlwZW9mIG9wdGlvbnMuZXhjbHVkZSA9PT0gJ2Z1bmN0aW9uJyAmJiBvcHRpb25zLmV4Y2x1ZGUocGF0aCwgZmlsZW5hbWUpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZXF1aXJlRGlyZWN0b3J5KG0sIHBhdGgsIG9wdGlvbnMpIHtcbiAgdmFyIHJldHZhbCA9IHt9O1xuXG4gIC8vIHBhdGggaXMgb3B0aW9uYWxcbiAgaWYgKHBhdGggJiYgIW9wdGlvbnMgJiYgdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHBhdGg7XG4gICAgcGF0aCA9IG51bGw7XG4gIH1cblxuICAvLyBkZWZhdWx0IG9wdGlvbnNcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGZvciAodmFyIHByb3AgaW4gZGVmYXVsdE9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnNbcHJvcF0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBvcHRpb25zW3Byb3BdID0gZGVmYXVsdE9wdGlvbnNbcHJvcF07XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgbm8gcGF0aCB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhlIGVxdWl2ZWxhbnQgb2YgX19kaXJuYW1lIGZyb20gY2FsbGVyXG4gIC8vIG90aGVyd2lzZSwgcmVzb2x2ZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBlcXVpdmFsZW50IG9mIF9fZGlybmFtZVxuICBwYXRoID0gIXBhdGggPyBkaXJuYW1lKG0uZmlsZW5hbWUpIDogcmVzb2x2ZShkaXJuYW1lKG0uZmlsZW5hbWUpLCBwYXRoKTtcblxuICAvLyBnZXQgdGhlIHBhdGggb2YgZWFjaCBmaWxlIGluIHNwZWNpZmllZCBkaXJlY3RvcnksIGFwcGVuZCB0byBjdXJyZW50IHRyZWUgbm9kZSwgcmVjdXJzZVxuICBmcy5yZWFkZGlyU3luYyhwYXRoKS5mb3JFYWNoKGZ1bmN0aW9uIChmaWxlbmFtZSkge1xuICAgIHZhciBqb2luZWQgPSBqb2luKHBhdGgsIGZpbGVuYW1lKSxcbiAgICAgIGZpbGVzLFxuICAgICAga2V5LFxuICAgICAgb2JqO1xuXG4gICAgaWYgKGZzLnN0YXRTeW5jKGpvaW5lZCkuaXNEaXJlY3RvcnkoKSAmJiBvcHRpb25zLnJlY3Vyc2UpIHtcbiAgICAgIC8vIHRoaXMgbm9kZSBpcyBhIGRpcmVjdG9yeTsgcmVjdXJzZVxuICAgICAgZmlsZXMgPSByZXF1aXJlRGlyZWN0b3J5KG0sIGpvaW5lZCwgb3B0aW9ucyk7XG4gICAgICAvLyBleGNsdWRlIGVtcHR5IGRpcmVjdG9yaWVzXG4gICAgICBpZiAoT2JqZWN0LmtleXMoZmlsZXMpLmxlbmd0aCkge1xuICAgICAgICByZXR2YWxbb3B0aW9ucy5yZW5hbWUoZmlsZW5hbWUsIGpvaW5lZCwgZmlsZW5hbWUpXSA9IGZpbGVzO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoam9pbmVkICE9PSBtLmZpbGVuYW1lICYmIGNoZWNrRmlsZUluY2x1c2lvbihqb2luZWQsIGZpbGVuYW1lLCBvcHRpb25zKSkge1xuICAgICAgICAvLyBoYXNoIG5vZGUga2V5IHNob3VsZG4ndCBpbmNsdWRlIGZpbGUgZXh0ZW5zaW9uXG4gICAgICAgIGtleSA9IGZpbGVuYW1lLnN1YnN0cmluZygwLCBmaWxlbmFtZS5sYXN0SW5kZXhPZignLicpKTtcbiAgICAgICAgb2JqID0gbS5yZXF1aXJlKGpvaW5lZCk7XG4gICAgICAgIHJldHZhbFtvcHRpb25zLnJlbmFtZShrZXksIGpvaW5lZCwgZmlsZW5hbWUpXSA9IG9wdGlvbnMudmlzaXQob2JqLCBqb2luZWQsIGZpbGVuYW1lKSB8fCBvYmo7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmV0dmFsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmVEaXJlY3Rvcnk7XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0cyA9IGRlZmF1bHRPcHRpb25zO1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpO1xuXG5jbGFzcyBZRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobXNnKSB7XG4gICAgICAgIHN1cGVyKG1zZyB8fCAneWFyZ3MgZXJyb3InKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ1lFcnJvcic7XG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFlFcnJvcik7XG4gICAgfVxufVxuXG5sZXQgcHJldmlvdXNseVZpc2l0ZWRDb25maWdzID0gW107XG5sZXQgc2hpbTtcbmZ1bmN0aW9uIGFwcGx5RXh0ZW5kcyhjb25maWcsIGN3ZCwgbWVyZ2VFeHRlbmRzLCBfc2hpbSkge1xuICAgIHNoaW0gPSBfc2hpbTtcbiAgICBsZXQgZGVmYXVsdENvbmZpZyA9IHt9O1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAnZXh0ZW5kcycpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLmV4dGVuZHMgIT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRDb25maWc7XG4gICAgICAgIGNvbnN0IGlzUGF0aCA9IC9cXC5qc29ufFxcLi4qcmMkLy50ZXN0KGNvbmZpZy5leHRlbmRzKTtcbiAgICAgICAgbGV0IHBhdGhUb0RlZmF1bHQgPSBudWxsO1xuICAgICAgICBpZiAoIWlzUGF0aCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXRoVG9EZWZhdWx0ID0gcmVxdWlyZS5yZXNvbHZlKGNvbmZpZy5leHRlbmRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChfZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBhdGhUb0RlZmF1bHQgPSBnZXRQYXRoVG9EZWZhdWx0Q29uZmlnKGN3ZCwgY29uZmlnLmV4dGVuZHMpO1xuICAgICAgICB9XG4gICAgICAgIGNoZWNrRm9yQ2lyY3VsYXJFeHRlbmRzKHBhdGhUb0RlZmF1bHQpO1xuICAgICAgICBwcmV2aW91c2x5VmlzaXRlZENvbmZpZ3MucHVzaChwYXRoVG9EZWZhdWx0KTtcbiAgICAgICAgZGVmYXVsdENvbmZpZyA9IGlzUGF0aFxuICAgICAgICAgICAgPyBKU09OLnBhcnNlKHNoaW0ucmVhZEZpbGVTeW5jKHBhdGhUb0RlZmF1bHQsICd1dGY4JykpXG4gICAgICAgICAgICA6IHJlcXVpcmUoY29uZmlnLmV4dGVuZHMpO1xuICAgICAgICBkZWxldGUgY29uZmlnLmV4dGVuZHM7XG4gICAgICAgIGRlZmF1bHRDb25maWcgPSBhcHBseUV4dGVuZHMoZGVmYXVsdENvbmZpZywgc2hpbS5wYXRoLmRpcm5hbWUocGF0aFRvRGVmYXVsdCksIG1lcmdlRXh0ZW5kcywgc2hpbSk7XG4gICAgfVxuICAgIHByZXZpb3VzbHlWaXNpdGVkQ29uZmlncyA9IFtdO1xuICAgIHJldHVybiBtZXJnZUV4dGVuZHNcbiAgICAgICAgPyBtZXJnZURlZXAoZGVmYXVsdENvbmZpZywgY29uZmlnKVxuICAgICAgICA6IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRDb25maWcsIGNvbmZpZyk7XG59XG5mdW5jdGlvbiBjaGVja0ZvckNpcmN1bGFyRXh0ZW5kcyhjZmdQYXRoKSB7XG4gICAgaWYgKHByZXZpb3VzbHlWaXNpdGVkQ29uZmlncy5pbmRleE9mKGNmZ1BhdGgpID4gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihgQ2lyY3VsYXIgZXh0ZW5kZWQgY29uZmlndXJhdGlvbnM6ICcke2NmZ1BhdGh9Jy5gKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRQYXRoVG9EZWZhdWx0Q29uZmlnKGN3ZCwgcGF0aFRvRXh0ZW5kKSB7XG4gICAgcmV0dXJuIHNoaW0ucGF0aC5yZXNvbHZlKGN3ZCwgcGF0aFRvRXh0ZW5kKTtcbn1cbmZ1bmN0aW9uIG1lcmdlRGVlcChjb25maWcxLCBjb25maWcyKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0ge307XG4gICAgZnVuY3Rpb24gaXNPYmplY3Qob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkob2JqKTtcbiAgICB9XG4gICAgT2JqZWN0LmFzc2lnbih0YXJnZXQsIGNvbmZpZzEpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbmZpZzIpKSB7XG4gICAgICAgIGlmIChpc09iamVjdChjb25maWcyW2tleV0pICYmIGlzT2JqZWN0KHRhcmdldFtrZXldKSkge1xuICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBtZXJnZURlZXAoY29uZmlnMVtrZXldLCBjb25maWcyW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBjb25maWcyW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gcGFyc2VDb21tYW5kKGNtZCkge1xuICAgIGNvbnN0IGV4dHJhU3BhY2VzU3RyaXBwZWRDb21tYW5kID0gY21kLnJlcGxhY2UoL1xcc3syLH0vZywgJyAnKTtcbiAgICBjb25zdCBzcGxpdENvbW1hbmQgPSBleHRyYVNwYWNlc1N0cmlwcGVkQ29tbWFuZC5zcGxpdCgvXFxzKyg/IVteW10qXXxbXjxdKj4pLyk7XG4gICAgY29uc3QgYnJlZ2V4ID0gL1xcLipbXFxdWzw+XS9nO1xuICAgIGNvbnN0IGZpcnN0Q29tbWFuZCA9IHNwbGl0Q29tbWFuZC5zaGlmdCgpO1xuICAgIGlmICghZmlyc3RDb21tYW5kKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGNvbW1hbmQgZm91bmQgaW46ICR7Y21kfWApO1xuICAgIGNvbnN0IHBhcnNlZENvbW1hbmQgPSB7XG4gICAgICAgIGNtZDogZmlyc3RDb21tYW5kLnJlcGxhY2UoYnJlZ2V4LCAnJyksXG4gICAgICAgIGRlbWFuZGVkOiBbXSxcbiAgICAgICAgb3B0aW9uYWw6IFtdLFxuICAgIH07XG4gICAgc3BsaXRDb21tYW5kLmZvckVhY2goKGNtZCwgaSkgPT4ge1xuICAgICAgICBsZXQgdmFyaWFkaWMgPSBmYWxzZTtcbiAgICAgICAgY21kID0gY21kLnJlcGxhY2UoL1xccy9nLCAnJyk7XG4gICAgICAgIGlmICgvXFwuK1tcXF0+XS8udGVzdChjbWQpICYmIGkgPT09IHNwbGl0Q29tbWFuZC5sZW5ndGggLSAxKVxuICAgICAgICAgICAgdmFyaWFkaWMgPSB0cnVlO1xuICAgICAgICBpZiAoL15cXFsvLnRlc3QoY21kKSkge1xuICAgICAgICAgICAgcGFyc2VkQ29tbWFuZC5vcHRpb25hbC5wdXNoKHtcbiAgICAgICAgICAgICAgICBjbWQ6IGNtZC5yZXBsYWNlKGJyZWdleCwgJycpLnNwbGl0KCd8JyksXG4gICAgICAgICAgICAgICAgdmFyaWFkaWMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlZENvbW1hbmQuZGVtYW5kZWQucHVzaCh7XG4gICAgICAgICAgICAgICAgY21kOiBjbWQucmVwbGFjZShicmVnZXgsICcnKS5zcGxpdCgnfCcpLFxuICAgICAgICAgICAgICAgIHZhcmlhZGljLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcGFyc2VkQ29tbWFuZDtcbn1cblxuY29uc3QgcG9zaXRpb25OYW1lID0gWydmaXJzdCcsICdzZWNvbmQnLCAndGhpcmQnLCAnZm91cnRoJywgJ2ZpZnRoJywgJ3NpeHRoJ107XG5mdW5jdGlvbiBhcmdzZXJ0KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICBmdW5jdGlvbiBwYXJzZUFyZ3MoKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgYXJnMSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgID8gW3sgZGVtYW5kZWQ6IFtdLCBvcHRpb25hbDogW10gfSwgYXJnMSwgYXJnMl1cbiAgICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAgIHBhcnNlQ29tbWFuZChgY21kICR7YXJnMX1gKSxcbiAgICAgICAgICAgICAgICBhcmcyLFxuICAgICAgICAgICAgICAgIGFyZzMsXG4gICAgICAgICAgICBdO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBsZXQgcG9zaXRpb24gPSAwO1xuICAgICAgICBjb25zdCBbcGFyc2VkLCBjYWxsZXJBcmd1bWVudHMsIF9sZW5ndGhdID0gcGFyc2VBcmdzKCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBbXS5zbGljZS5jYWxsKGNhbGxlckFyZ3VtZW50cyk7XG4gICAgICAgIHdoaWxlIChhcmdzLmxlbmd0aCAmJiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGFyZ3MucG9wKCk7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IF9sZW5ndGggfHwgYXJncy5sZW5ndGg7XG4gICAgICAgIGlmIChsZW5ndGggPCBwYXJzZWQuZGVtYW5kZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgWUVycm9yKGBOb3QgZW5vdWdoIGFyZ3VtZW50cyBwcm92aWRlZC4gRXhwZWN0ZWQgJHtwYXJzZWQuZGVtYW5kZWQubGVuZ3RofSBidXQgcmVjZWl2ZWQgJHthcmdzLmxlbmd0aH0uYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG90YWxDb21tYW5kcyA9IHBhcnNlZC5kZW1hbmRlZC5sZW5ndGggKyBwYXJzZWQub3B0aW9uYWwubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoID4gdG90YWxDb21tYW5kcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihgVG9vIG1hbnkgYXJndW1lbnRzIHByb3ZpZGVkLiBFeHBlY3RlZCBtYXggJHt0b3RhbENvbW1hbmRzfSBidXQgcmVjZWl2ZWQgJHtsZW5ndGh9LmApO1xuICAgICAgICB9XG4gICAgICAgIHBhcnNlZC5kZW1hbmRlZC5mb3JFYWNoKGRlbWFuZGVkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFyZyA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmVkVHlwZSA9IGd1ZXNzVHlwZShhcmcpO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdUeXBlcyA9IGRlbWFuZGVkLmNtZC5maWx0ZXIodHlwZSA9PiB0eXBlID09PSBvYnNlcnZlZFR5cGUgfHwgdHlwZSA9PT0gJyonKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGluZ1R5cGVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICBhcmd1bWVudFR5cGVFcnJvcihvYnNlcnZlZFR5cGUsIGRlbWFuZGVkLmNtZCwgcG9zaXRpb24pO1xuICAgICAgICAgICAgcG9zaXRpb24gKz0gMTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBhcnNlZC5vcHRpb25hbC5mb3JFYWNoKG9wdGlvbmFsID0+IHtcbiAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgICAgICBjb25zdCBvYnNlcnZlZFR5cGUgPSBndWVzc1R5cGUoYXJnKTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nVHlwZXMgPSBvcHRpb25hbC5jbWQuZmlsdGVyKHR5cGUgPT4gdHlwZSA9PT0gb2JzZXJ2ZWRUeXBlIHx8IHR5cGUgPT09ICcqJyk7XG4gICAgICAgICAgICBpZiAobWF0Y2hpbmdUeXBlcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgYXJndW1lbnRUeXBlRXJyb3Iob2JzZXJ2ZWRUeXBlLCBvcHRpb25hbC5jbWQsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgIHBvc2l0aW9uICs9IDE7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihlcnIuc3RhY2spO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGd1ZXNzVHlwZShhcmcpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgIHJldHVybiAnYXJyYXknO1xuICAgIH1cbiAgICBlbHNlIGlmIChhcmcgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICdudWxsJztcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBhcmc7XG59XG5mdW5jdGlvbiBhcmd1bWVudFR5cGVFcnJvcihvYnNlcnZlZFR5cGUsIGFsbG93ZWRUeXBlcywgcG9zaXRpb24pIHtcbiAgICB0aHJvdyBuZXcgWUVycm9yKGBJbnZhbGlkICR7cG9zaXRpb25OYW1lW3Bvc2l0aW9uXSB8fCAnbWFueWl0aCd9IGFyZ3VtZW50LiBFeHBlY3RlZCAke2FsbG93ZWRUeXBlcy5qb2luKCcgb3IgJyl9IGJ1dCByZWNlaXZlZCAke29ic2VydmVkVHlwZX0uYCk7XG59XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZShtYXliZVByb21pc2UpIHtcbiAgICByZXR1cm4gKCEhbWF5YmVQcm9taXNlICYmXG4gICAgICAgICEhbWF5YmVQcm9taXNlLnRoZW4gJiZcbiAgICAgICAgdHlwZW9mIG1heWJlUHJvbWlzZS50aGVuID09PSAnZnVuY3Rpb24nKTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0Tm90U3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgc2hpbSwgbWVzc2FnZSkge1xuICAgIHNoaW0uYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpO1xufVxuZnVuY3Rpb24gYXNzZXJ0U2luZ2xlS2V5KGFjdHVhbCwgc2hpbSkge1xuICAgIHNoaW0uYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBhY3R1YWwsICdzdHJpbmcnKTtcbn1cbmZ1bmN0aW9uIG9iamVjdEtleXMob2JqZWN0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCk7XG59XG5cbmZ1bmN0aW9uIG9iakZpbHRlcihvcmlnaW5hbCA9IHt9LCBmaWx0ZXIgPSAoKSA9PiB0cnVlKSB7XG4gICAgY29uc3Qgb2JqID0ge307XG4gICAgb2JqZWN0S2V5cyhvcmlnaW5hbCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBpZiAoZmlsdGVyKGtleSwgb3JpZ2luYWxba2V5XSkpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gb3JpZ2luYWxba2V5XTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIGdsb2JhbE1pZGRsZXdhcmVGYWN0b3J5KGdsb2JhbE1pZGRsZXdhcmUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrLCBhcHBseUJlZm9yZVZhbGlkYXRpb24gPSBmYWxzZSkge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8ZnVuY3Rpb24+IFtib29sZWFuXScsIFtjYWxsYmFjaywgYXBwbHlCZWZvcmVWYWxpZGF0aW9uXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsYmFjay5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2tbaV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ21pZGRsZXdhcmUgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrW2ldLmFwcGx5QmVmb3JlVmFsaWRhdGlvbiA9IGFwcGx5QmVmb3JlVmFsaWRhdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGdsb2JhbE1pZGRsZXdhcmUsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5QmVmb3JlVmFsaWRhdGlvbiA9IGFwcGx5QmVmb3JlVmFsaWRhdGlvbjtcbiAgICAgICAgICAgIGdsb2JhbE1pZGRsZXdhcmUucHVzaChjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNvbW1hbmRNaWRkbGV3YXJlRmFjdG9yeShjb21tYW5kTWlkZGxld2FyZSkge1xuICAgIGlmICghY29tbWFuZE1pZGRsZXdhcmUpXG4gICAgICAgIHJldHVybiBbXTtcbiAgICByZXR1cm4gY29tbWFuZE1pZGRsZXdhcmUubWFwKG1pZGRsZXdhcmUgPT4ge1xuICAgICAgICBtaWRkbGV3YXJlLmFwcGx5QmVmb3JlVmFsaWRhdGlvbiA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gbWlkZGxld2FyZTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGFwcGx5TWlkZGxld2FyZShhcmd2LCB5YXJncywgbWlkZGxld2FyZXMsIGJlZm9yZVZhbGlkYXRpb24pIHtcbiAgICBjb25zdCBiZWZvcmVWYWxpZGF0aW9uRXJyb3IgPSBuZXcgRXJyb3IoJ21pZGRsZXdhcmUgY2Fubm90IHJldHVybiBhIHByb21pc2Ugd2hlbiBhcHBseUJlZm9yZVZhbGlkYXRpb24gaXMgdHJ1ZScpO1xuICAgIHJldHVybiBtaWRkbGV3YXJlcy5yZWR1Y2UoKGFjYywgbWlkZGxld2FyZSkgPT4ge1xuICAgICAgICBpZiAobWlkZGxld2FyZS5hcHBseUJlZm9yZVZhbGlkYXRpb24gIT09IGJlZm9yZVZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShhY2MpKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjXG4gICAgICAgICAgICAgICAgLnRoZW4oaW5pdGlhbE9iaiA9PiBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgaW5pdGlhbE9iaixcbiAgICAgICAgICAgICAgICBtaWRkbGV3YXJlKGluaXRpYWxPYmosIHlhcmdzKSxcbiAgICAgICAgICAgIF0pKVxuICAgICAgICAgICAgICAgIC50aGVuKChbaW5pdGlhbE9iaiwgbWlkZGxld2FyZU9ial0pID0+IE9iamVjdC5hc3NpZ24oaW5pdGlhbE9iaiwgbWlkZGxld2FyZU9iaikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbWlkZGxld2FyZShhY2MsIHlhcmdzKTtcbiAgICAgICAgICAgIGlmIChiZWZvcmVWYWxpZGF0aW9uICYmIGlzUHJvbWlzZShyZXN1bHQpKVxuICAgICAgICAgICAgICAgIHRocm93IGJlZm9yZVZhbGlkYXRpb25FcnJvcjtcbiAgICAgICAgICAgIHJldHVybiBpc1Byb21pc2UocmVzdWx0KVxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRoZW4obWlkZGxld2FyZU9iaiA9PiBPYmplY3QuYXNzaWduKGFjYywgbWlkZGxld2FyZU9iaikpXG4gICAgICAgICAgICAgICAgOiBPYmplY3QuYXNzaWduKGFjYywgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgIH0sIGFyZ3YpO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9jZXNzQXJndkJpbkluZGV4KCkge1xuICAgIGlmIChpc0J1bmRsZWRFbGVjdHJvbkFwcCgpKVxuICAgICAgICByZXR1cm4gMDtcbiAgICByZXR1cm4gMTtcbn1cbmZ1bmN0aW9uIGlzQnVuZGxlZEVsZWN0cm9uQXBwKCkge1xuICAgIHJldHVybiBpc0VsZWN0cm9uQXBwKCkgJiYgIXByb2Nlc3MuZGVmYXVsdEFwcDtcbn1cbmZ1bmN0aW9uIGlzRWxlY3Ryb25BcHAoKSB7XG4gICAgcmV0dXJuICEhcHJvY2Vzcy52ZXJzaW9ucy5lbGVjdHJvbjtcbn1cbmZ1bmN0aW9uIGhpZGVCaW4oYXJndikge1xuICAgIHJldHVybiBhcmd2LnNsaWNlKGdldFByb2Nlc3NBcmd2QmluSW5kZXgoKSArIDEpO1xufVxuZnVuY3Rpb24gZ2V0UHJvY2Vzc0FyZ3ZCaW4oKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuYXJndltnZXRQcm9jZXNzQXJndkJpbkluZGV4KCldO1xufVxuXG52YXIgcHJvY2Vzc0FyZ3YgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgaGlkZUJpbjogaGlkZUJpbixcbiAgZ2V0UHJvY2Vzc0FyZ3ZCaW46IGdldFByb2Nlc3NBcmd2QmluXG59KTtcblxuZnVuY3Rpb24gd2hpY2hNb2R1bGUoZXhwb3J0ZWQpIHtcbiAgICBpZiAodHlwZW9mIHJlcXVpcmUgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBmb3IgKGxldCBpID0gMCwgZmlsZXMgPSBPYmplY3Qua2V5cyhyZXF1aXJlLmNhY2hlKSwgbW9kOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbW9kID0gcmVxdWlyZS5jYWNoZVtmaWxlc1tpXV07XG4gICAgICAgIGlmIChtb2QuZXhwb3J0cyA9PT0gZXhwb3J0ZWQpXG4gICAgICAgICAgICByZXR1cm4gbW9kO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuY29uc3QgREVGQVVMVF9NQVJLRVIgPSAvKF5cXCopfCheXFwkMCkvO1xuZnVuY3Rpb24gY29tbWFuZCh5YXJncywgdXNhZ2UsIHZhbGlkYXRpb24sIGdsb2JhbE1pZGRsZXdhcmUgPSBbXSwgc2hpbSkge1xuICAgIGNvbnN0IHNlbGYgPSB7fTtcbiAgICBsZXQgaGFuZGxlcnMgPSB7fTtcbiAgICBsZXQgYWxpYXNNYXAgPSB7fTtcbiAgICBsZXQgZGVmYXVsdENvbW1hbmQ7XG4gICAgc2VsZi5hZGRIYW5kbGVyID0gZnVuY3Rpb24gYWRkSGFuZGxlcihjbWQsIGRlc2NyaXB0aW9uLCBidWlsZGVyLCBoYW5kbGVyLCBjb21tYW5kTWlkZGxld2FyZSwgZGVwcmVjYXRlZCkge1xuICAgICAgICBsZXQgYWxpYXNlcyA9IFtdO1xuICAgICAgICBjb25zdCBtaWRkbGV3YXJlcyA9IGNvbW1hbmRNaWRkbGV3YXJlRmFjdG9yeShjb21tYW5kTWlkZGxld2FyZSk7XG4gICAgICAgIGhhbmRsZXIgPSBoYW5kbGVyIHx8ICgoKSA9PiB7IH0pO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjbWQpKSB7XG4gICAgICAgICAgICBpZiAoaXNDb21tYW5kQW5kQWxpYXNlcyhjbWQpKSB7XG4gICAgICAgICAgICAgICAgW2NtZCwgLi4uYWxpYXNlc10gPSBjbWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbW1hbmQgb2YgY21kKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkSGFuZGxlcihjb21tYW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNDb21tYW5kSGFuZGxlckRlZmluaXRpb24oY21kKSkge1xuICAgICAgICAgICAgbGV0IGNvbW1hbmQgPSBBcnJheS5pc0FycmF5KGNtZC5jb21tYW5kKSB8fCB0eXBlb2YgY21kLmNvbW1hbmQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyBjbWQuY29tbWFuZFxuICAgICAgICAgICAgICAgIDogbW9kdWxlTmFtZShjbWQpO1xuICAgICAgICAgICAgaWYgKGNtZC5hbGlhc2VzKVxuICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBbXS5jb25jYXQoY29tbWFuZCkuY29uY2F0KGNtZC5hbGlhc2VzKTtcbiAgICAgICAgICAgIHNlbGYuYWRkSGFuZGxlcihjb21tYW5kLCBleHRyYWN0RGVzYyhjbWQpLCBjbWQuYnVpbGRlciwgY21kLmhhbmRsZXIsIGNtZC5taWRkbGV3YXJlcywgY21kLmRlcHJlY2F0ZWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzQ29tbWFuZEJ1aWxkZXJEZWZpbml0aW9uKGJ1aWxkZXIpKSB7XG4gICAgICAgICAgICBzZWxmLmFkZEhhbmRsZXIoW2NtZF0uY29uY2F0KGFsaWFzZXMpLCBkZXNjcmlwdGlvbiwgYnVpbGRlci5idWlsZGVyLCBidWlsZGVyLmhhbmRsZXIsIGJ1aWxkZXIubWlkZGxld2FyZXMsIGJ1aWxkZXIuZGVwcmVjYXRlZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBjbWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRDb21tYW5kID0gcGFyc2VDb21tYW5kKGNtZCk7XG4gICAgICAgICAgICBhbGlhc2VzID0gYWxpYXNlcy5tYXAoYWxpYXMgPT4gcGFyc2VDb21tYW5kKGFsaWFzKS5jbWQpO1xuICAgICAgICAgICAgbGV0IGlzRGVmYXVsdCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkQWxpYXNlcyA9IFtwYXJzZWRDb21tYW5kLmNtZF0uY29uY2F0KGFsaWFzZXMpLmZpbHRlcihjID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoREVGQVVMVF9NQVJLRVIudGVzdChjKSkge1xuICAgICAgICAgICAgICAgICAgICBpc0RlZmF1bHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocGFyc2VkQWxpYXNlcy5sZW5ndGggPT09IDAgJiYgaXNEZWZhdWx0KVxuICAgICAgICAgICAgICAgIHBhcnNlZEFsaWFzZXMucHVzaCgnJDAnKTtcbiAgICAgICAgICAgIGlmIChpc0RlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICBwYXJzZWRDb21tYW5kLmNtZCA9IHBhcnNlZEFsaWFzZXNbMF07XG4gICAgICAgICAgICAgICAgYWxpYXNlcyA9IHBhcnNlZEFsaWFzZXMuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgY21kID0gY21kLnJlcGxhY2UoREVGQVVMVF9NQVJLRVIsIHBhcnNlZENvbW1hbmQuY21kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFsaWFzZXMuZm9yRWFjaChhbGlhcyA9PiB7XG4gICAgICAgICAgICAgICAgYWxpYXNNYXBbYWxpYXNdID0gcGFyc2VkQ29tbWFuZC5jbWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB1c2FnZS5jb21tYW5kKGNtZCwgZGVzY3JpcHRpb24sIGlzRGVmYXVsdCwgYWxpYXNlcywgZGVwcmVjYXRlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoYW5kbGVyc1twYXJzZWRDb21tYW5kLmNtZF0gPSB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWw6IGNtZCxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgICAgICAgIGJ1aWxkZXI6IGJ1aWxkZXIgfHwge30sXG4gICAgICAgICAgICAgICAgbWlkZGxld2FyZXMsXG4gICAgICAgICAgICAgICAgZGVwcmVjYXRlZCxcbiAgICAgICAgICAgICAgICBkZW1hbmRlZDogcGFyc2VkQ29tbWFuZC5kZW1hbmRlZCxcbiAgICAgICAgICAgICAgICBvcHRpb25hbDogcGFyc2VkQ29tbWFuZC5vcHRpb25hbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaXNEZWZhdWx0KVxuICAgICAgICAgICAgICAgIGRlZmF1bHRDb21tYW5kID0gaGFuZGxlcnNbcGFyc2VkQ29tbWFuZC5jbWRdO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLmFkZERpcmVjdG9yeSA9IGZ1bmN0aW9uIGFkZERpcmVjdG9yeShkaXIsIGNvbnRleHQsIHJlcSwgY2FsbGVyRmlsZSwgb3B0cykge1xuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRzLnJlY3Vyc2UgIT09ICdib29sZWFuJylcbiAgICAgICAgICAgIG9wdHMucmVjdXJzZSA9IGZhbHNlO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob3B0cy5leHRlbnNpb25zKSlcbiAgICAgICAgICAgIG9wdHMuZXh0ZW5zaW9ucyA9IFsnanMnXTtcbiAgICAgICAgY29uc3QgcGFyZW50VmlzaXQgPSB0eXBlb2Ygb3B0cy52aXNpdCA9PT0gJ2Z1bmN0aW9uJyA/IG9wdHMudmlzaXQgOiAobykgPT4gbztcbiAgICAgICAgb3B0cy52aXNpdCA9IGZ1bmN0aW9uIHZpc2l0KG9iaiwgam9pbmVkLCBmaWxlbmFtZSkge1xuICAgICAgICAgICAgY29uc3QgdmlzaXRlZCA9IHBhcmVudFZpc2l0KG9iaiwgam9pbmVkLCBmaWxlbmFtZSk7XG4gICAgICAgICAgICBpZiAodmlzaXRlZCkge1xuICAgICAgICAgICAgICAgIGlmICh+Y29udGV4dC5maWxlcy5pbmRleE9mKGpvaW5lZCkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2aXNpdGVkO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsZXMucHVzaChqb2luZWQpO1xuICAgICAgICAgICAgICAgIHNlbGYuYWRkSGFuZGxlcih2aXNpdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2aXNpdGVkO1xuICAgICAgICB9O1xuICAgICAgICBzaGltLnJlcXVpcmVEaXJlY3RvcnkoeyByZXF1aXJlOiByZXEsIGZpbGVuYW1lOiBjYWxsZXJGaWxlIH0sIGRpciwgb3B0cyk7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBtb2R1bGVOYW1lKG9iaikge1xuICAgICAgICBjb25zdCBtb2QgPSB3aGljaE1vZHVsZShvYmopO1xuICAgICAgICBpZiAoIW1vZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gY29tbWFuZCBuYW1lIGdpdmVuIGZvciBtb2R1bGU6ICR7c2hpbS5pbnNwZWN0KG9iail9YCk7XG4gICAgICAgIHJldHVybiBjb21tYW5kRnJvbUZpbGVuYW1lKG1vZC5maWxlbmFtZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1hbmRGcm9tRmlsZW5hbWUoZmlsZW5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHNoaW0ucGF0aC5iYXNlbmFtZShmaWxlbmFtZSwgc2hpbS5wYXRoLmV4dG5hbWUoZmlsZW5hbWUpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZXh0cmFjdERlc2MoeyBkZXNjcmliZSwgZGVzY3JpcHRpb24sIGRlc2MsIH0pIHtcbiAgICAgICAgZm9yIChjb25zdCB0ZXN0IG9mIFtkZXNjcmliZSwgZGVzY3JpcHRpb24sIGRlc2NdKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRlc3QgPT09ICdzdHJpbmcnIHx8IHRlc3QgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0O1xuICAgICAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwodGVzdCwgdHJ1ZSwgc2hpbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzZWxmLmdldENvbW1hbmRzID0gKCkgPT4gT2JqZWN0LmtleXMoaGFuZGxlcnMpLmNvbmNhdChPYmplY3Qua2V5cyhhbGlhc01hcCkpO1xuICAgIHNlbGYuZ2V0Q29tbWFuZEhhbmRsZXJzID0gKCkgPT4gaGFuZGxlcnM7XG4gICAgc2VsZi5oYXNEZWZhdWx0Q29tbWFuZCA9ICgpID0+ICEhZGVmYXVsdENvbW1hbmQ7XG4gICAgc2VsZi5ydW5Db21tYW5kID0gZnVuY3Rpb24gcnVuQ29tbWFuZChjb21tYW5kLCB5YXJncywgcGFyc2VkLCBjb21tYW5kSW5kZXgpIHtcbiAgICAgICAgbGV0IGFsaWFzZXMgPSBwYXJzZWQuYWxpYXNlcztcbiAgICAgICAgY29uc3QgY29tbWFuZEhhbmRsZXIgPSBoYW5kbGVyc1tjb21tYW5kXSB8fCBoYW5kbGVyc1thbGlhc01hcFtjb21tYW5kXV0gfHwgZGVmYXVsdENvbW1hbmQ7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb250ZXh0ID0geWFyZ3MuZ2V0Q29udGV4dCgpO1xuICAgICAgICBsZXQgbnVtRmlsZXMgPSBjdXJyZW50Q29udGV4dC5maWxlcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHBhcmVudENvbW1hbmRzID0gY3VycmVudENvbnRleHQuY29tbWFuZHMuc2xpY2UoKTtcbiAgICAgICAgbGV0IGlubmVyQXJndiA9IHBhcnNlZC5hcmd2O1xuICAgICAgICBsZXQgcG9zaXRpb25hbE1hcCA9IHt9O1xuICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgY3VycmVudENvbnRleHQuY29tbWFuZHMucHVzaChjb21tYW5kKTtcbiAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0LmZ1bGxDb21tYW5kcy5wdXNoKGNvbW1hbmRIYW5kbGVyLm9yaWdpbmFsKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWlsZGVyID0gY29tbWFuZEhhbmRsZXIuYnVpbGRlcjtcbiAgICAgICAgaWYgKGlzQ29tbWFuZEJ1aWxkZXJDYWxsYmFjayhidWlsZGVyKSkge1xuICAgICAgICAgICAgY29uc3QgYnVpbGRlck91dHB1dCA9IGJ1aWxkZXIoeWFyZ3MucmVzZXQocGFyc2VkLmFsaWFzZXMpKTtcbiAgICAgICAgICAgIGNvbnN0IGlubmVyWWFyZ3MgPSBpc1lhcmdzSW5zdGFuY2UoYnVpbGRlck91dHB1dCkgPyBidWlsZGVyT3V0cHV0IDogeWFyZ3M7XG4gICAgICAgICAgICBpZiAoc2hvdWxkVXBkYXRlVXNhZ2UoaW5uZXJZYXJncykpIHtcbiAgICAgICAgICAgICAgICBpbm5lcllhcmdzXG4gICAgICAgICAgICAgICAgICAgIC5nZXRVc2FnZUluc3RhbmNlKClcbiAgICAgICAgICAgICAgICAgICAgLnVzYWdlKHVzYWdlRnJvbVBhcmVudENvbW1hbmRzQ29tbWFuZEhhbmRsZXIocGFyZW50Q29tbWFuZHMsIGNvbW1hbmRIYW5kbGVyKSwgY29tbWFuZEhhbmRsZXIuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5uZXJBcmd2ID0gaW5uZXJZYXJncy5fcGFyc2VBcmdzKG51bGwsIG51bGwsIHRydWUsIGNvbW1hbmRJbmRleCk7XG4gICAgICAgICAgICBhbGlhc2VzID0gaW5uZXJZYXJncy5wYXJzZWQuYWxpYXNlcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0NvbW1hbmRCdWlsZGVyT3B0aW9uRGVmaW5pdGlvbnMoYnVpbGRlcikpIHtcbiAgICAgICAgICAgIGNvbnN0IGlubmVyWWFyZ3MgPSB5YXJncy5yZXNldChwYXJzZWQuYWxpYXNlcyk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkVXBkYXRlVXNhZ2UoaW5uZXJZYXJncykpIHtcbiAgICAgICAgICAgICAgICBpbm5lcllhcmdzXG4gICAgICAgICAgICAgICAgICAgIC5nZXRVc2FnZUluc3RhbmNlKClcbiAgICAgICAgICAgICAgICAgICAgLnVzYWdlKHVzYWdlRnJvbVBhcmVudENvbW1hbmRzQ29tbWFuZEhhbmRsZXIocGFyZW50Q29tbWFuZHMsIGNvbW1hbmRIYW5kbGVyKSwgY29tbWFuZEhhbmRsZXIuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT2JqZWN0LmtleXMoY29tbWFuZEhhbmRsZXIuYnVpbGRlcikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGlubmVyWWFyZ3Mub3B0aW9uKGtleSwgYnVpbGRlcltrZXldKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaW5uZXJBcmd2ID0gaW5uZXJZYXJncy5fcGFyc2VBcmdzKG51bGwsIG51bGwsIHRydWUsIGNvbW1hbmRJbmRleCk7XG4gICAgICAgICAgICBhbGlhc2VzID0gaW5uZXJZYXJncy5wYXJzZWQuYWxpYXNlcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXlhcmdzLl9oYXNPdXRwdXQoKSkge1xuICAgICAgICAgICAgcG9zaXRpb25hbE1hcCA9IHBvcHVsYXRlUG9zaXRpb25hbHMoY29tbWFuZEhhbmRsZXIsIGlubmVyQXJndiwgY3VycmVudENvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1pZGRsZXdhcmVzID0gZ2xvYmFsTWlkZGxld2FyZVxuICAgICAgICAgICAgLnNsaWNlKDApXG4gICAgICAgICAgICAuY29uY2F0KGNvbW1hbmRIYW5kbGVyLm1pZGRsZXdhcmVzKTtcbiAgICAgICAgYXBwbHlNaWRkbGV3YXJlKGlubmVyQXJndiwgeWFyZ3MsIG1pZGRsZXdhcmVzLCB0cnVlKTtcbiAgICAgICAgaWYgKCF5YXJncy5faGFzT3V0cHV0KCkpIHtcbiAgICAgICAgICAgIHlhcmdzLl9ydW5WYWxpZGF0aW9uKGlubmVyQXJndiwgYWxpYXNlcywgcG9zaXRpb25hbE1hcCwgeWFyZ3MucGFyc2VkLmVycm9yLCAhY29tbWFuZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbW1hbmRIYW5kbGVyLmhhbmRsZXIgJiYgIXlhcmdzLl9oYXNPdXRwdXQoKSkge1xuICAgICAgICAgICAgeWFyZ3MuX3NldEhhc091dHB1dCgpO1xuICAgICAgICAgICAgY29uc3QgcG9wdWxhdGVEb3VibGVEYXNoID0gISF5YXJncy5nZXRPcHRpb25zKCkuY29uZmlndXJhdGlvblsncG9wdWxhdGUtLSddO1xuICAgICAgICAgICAgeWFyZ3MuX3Bvc3RQcm9jZXNzKGlubmVyQXJndiwgcG9wdWxhdGVEb3VibGVEYXNoKTtcbiAgICAgICAgICAgIGlubmVyQXJndiA9IGFwcGx5TWlkZGxld2FyZShpbm5lckFyZ3YsIHlhcmdzLCBtaWRkbGV3YXJlcywgZmFsc2UpO1xuICAgICAgICAgICAgbGV0IGhhbmRsZXJSZXN1bHQ7XG4gICAgICAgICAgICBpZiAoaXNQcm9taXNlKGlubmVyQXJndikpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVyUmVzdWx0ID0gaW5uZXJBcmd2LnRoZW4oYXJndiA9PiBjb21tYW5kSGFuZGxlci5oYW5kbGVyKGFyZ3YpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGhhbmRsZXJSZXN1bHQgPSBjb21tYW5kSGFuZGxlci5oYW5kbGVyKGlubmVyQXJndik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyRmluaXNoQ29tbWFuZCA9IHlhcmdzLmdldEhhbmRsZXJGaW5pc2hDb21tYW5kKCk7XG4gICAgICAgICAgICBpZiAoaXNQcm9taXNlKGhhbmRsZXJSZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgeWFyZ3MuZ2V0VXNhZ2VJbnN0YW5jZSgpLmNhY2hlSGVscE1lc3NhZ2UoKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyUmVzdWx0XG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXJGaW5pc2hDb21tYW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyRmluaXNoQ29tbWFuZCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgeWFyZ3MuZ2V0VXNhZ2VJbnN0YW5jZSgpLmZhaWwobnVsbCwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3MuZ2V0VXNhZ2VJbnN0YW5jZSgpLmNsZWFyQ2FjaGVkSGVscE1lc3NhZ2UoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyRmluaXNoQ29tbWFuZCkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyRmluaXNoQ29tbWFuZChoYW5kbGVyUmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLnBvcCgpO1xuICAgICAgICAgICAgY3VycmVudENvbnRleHQuZnVsbENvbW1hbmRzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICAgIG51bUZpbGVzID0gY3VycmVudENvbnRleHQuZmlsZXMubGVuZ3RoIC0gbnVtRmlsZXM7XG4gICAgICAgIGlmIChudW1GaWxlcyA+IDApXG4gICAgICAgICAgICBjdXJyZW50Q29udGV4dC5maWxlcy5zcGxpY2UobnVtRmlsZXMgKiAtMSwgbnVtRmlsZXMpO1xuICAgICAgICByZXR1cm4gaW5uZXJBcmd2O1xuICAgIH07XG4gICAgZnVuY3Rpb24gc2hvdWxkVXBkYXRlVXNhZ2UoeWFyZ3MpIHtcbiAgICAgICAgcmV0dXJuICgheWFyZ3MuZ2V0VXNhZ2VJbnN0YW5jZSgpLmdldFVzYWdlRGlzYWJsZWQoKSAmJlxuICAgICAgICAgICAgeWFyZ3MuZ2V0VXNhZ2VJbnN0YW5jZSgpLmdldFVzYWdlKCkubGVuZ3RoID09PSAwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXNhZ2VGcm9tUGFyZW50Q29tbWFuZHNDb21tYW5kSGFuZGxlcihwYXJlbnRDb21tYW5kcywgY29tbWFuZEhhbmRsZXIpIHtcbiAgICAgICAgY29uc3QgYyA9IERFRkFVTFRfTUFSS0VSLnRlc3QoY29tbWFuZEhhbmRsZXIub3JpZ2luYWwpXG4gICAgICAgICAgICA/IGNvbW1hbmRIYW5kbGVyLm9yaWdpbmFsLnJlcGxhY2UoREVGQVVMVF9NQVJLRVIsICcnKS50cmltKClcbiAgICAgICAgICAgIDogY29tbWFuZEhhbmRsZXIub3JpZ2luYWw7XG4gICAgICAgIGNvbnN0IHBjID0gcGFyZW50Q29tbWFuZHMuZmlsdGVyKGMgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICFERUZBVUxUX01BUktFUi50ZXN0KGMpO1xuICAgICAgICB9KTtcbiAgICAgICAgcGMucHVzaChjKTtcbiAgICAgICAgcmV0dXJuIGAkMCAke3BjLmpvaW4oJyAnKX1gO1xuICAgIH1cbiAgICBzZWxmLnJ1bkRlZmF1bHRCdWlsZGVyT24gPSBmdW5jdGlvbiAoeWFyZ3MpIHtcbiAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwoZGVmYXVsdENvbW1hbmQsIHVuZGVmaW5lZCwgc2hpbSk7XG4gICAgICAgIGlmIChzaG91bGRVcGRhdGVVc2FnZSh5YXJncykpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRTdHJpbmcgPSBERUZBVUxUX01BUktFUi50ZXN0KGRlZmF1bHRDb21tYW5kLm9yaWdpbmFsKVxuICAgICAgICAgICAgICAgID8gZGVmYXVsdENvbW1hbmQub3JpZ2luYWxcbiAgICAgICAgICAgICAgICA6IGRlZmF1bHRDb21tYW5kLm9yaWdpbmFsLnJlcGxhY2UoL15bXltcXF08Pl0qLywgJyQwICcpO1xuICAgICAgICAgICAgeWFyZ3MuZ2V0VXNhZ2VJbnN0YW5jZSgpLnVzYWdlKGNvbW1hbmRTdHJpbmcsIGRlZmF1bHRDb21tYW5kLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWlsZGVyID0gZGVmYXVsdENvbW1hbmQuYnVpbGRlcjtcbiAgICAgICAgaWYgKGlzQ29tbWFuZEJ1aWxkZXJDYWxsYmFjayhidWlsZGVyKSkge1xuICAgICAgICAgICAgYnVpbGRlcih5YXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWlzQ29tbWFuZEJ1aWxkZXJEZWZpbml0aW9uKGJ1aWxkZXIpKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhidWlsZGVyKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgeWFyZ3Mub3B0aW9uKGtleSwgYnVpbGRlcltrZXldKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBmdW5jdGlvbiBwb3B1bGF0ZVBvc2l0aW9uYWxzKGNvbW1hbmRIYW5kbGVyLCBhcmd2LCBjb250ZXh0KSB7XG4gICAgICAgIGFyZ3YuXyA9IGFyZ3YuXy5zbGljZShjb250ZXh0LmNvbW1hbmRzLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGRlbWFuZGVkID0gY29tbWFuZEhhbmRsZXIuZGVtYW5kZWQuc2xpY2UoMCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbmFsID0gY29tbWFuZEhhbmRsZXIub3B0aW9uYWwuc2xpY2UoMCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uYWxNYXAgPSB7fTtcbiAgICAgICAgdmFsaWRhdGlvbi5wb3NpdGlvbmFsQ291bnQoZGVtYW5kZWQubGVuZ3RoLCBhcmd2Ll8ubGVuZ3RoKTtcbiAgICAgICAgd2hpbGUgKGRlbWFuZGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZGVtYW5kID0gZGVtYW5kZWQuc2hpZnQoKTtcbiAgICAgICAgICAgIHBvcHVsYXRlUG9zaXRpb25hbChkZW1hbmQsIGFyZ3YsIHBvc2l0aW9uYWxNYXApO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChvcHRpb25hbC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heWJlID0gb3B0aW9uYWwuc2hpZnQoKTtcbiAgICAgICAgICAgIHBvcHVsYXRlUG9zaXRpb25hbChtYXliZSwgYXJndiwgcG9zaXRpb25hbE1hcCk7XG4gICAgICAgIH1cbiAgICAgICAgYXJndi5fID0gY29udGV4dC5jb21tYW5kcy5jb25jYXQoYXJndi5fLm1hcChhID0+ICcnICsgYSkpO1xuICAgICAgICBwb3N0UHJvY2Vzc1Bvc2l0aW9uYWxzKGFyZ3YsIHBvc2l0aW9uYWxNYXAsIHNlbGYuY21kVG9QYXJzZU9wdGlvbnMoY29tbWFuZEhhbmRsZXIub3JpZ2luYWwpKTtcbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uYWxNYXA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcHVsYXRlUG9zaXRpb25hbChwb3NpdGlvbmFsLCBhcmd2LCBwb3NpdGlvbmFsTWFwKSB7XG4gICAgICAgIGNvbnN0IGNtZCA9IHBvc2l0aW9uYWwuY21kWzBdO1xuICAgICAgICBpZiAocG9zaXRpb25hbC52YXJpYWRpYykge1xuICAgICAgICAgICAgcG9zaXRpb25hbE1hcFtjbWRdID0gYXJndi5fLnNwbGljZSgwKS5tYXAoU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChhcmd2Ll8ubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHBvc2l0aW9uYWxNYXBbY21kXSA9IFtTdHJpbmcoYXJndi5fLnNoaWZ0KCkpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwb3N0UHJvY2Vzc1Bvc2l0aW9uYWxzKGFyZ3YsIHBvc2l0aW9uYWxNYXAsIHBhcnNlT3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgeWFyZ3MuZ2V0T3B0aW9ucygpKTtcbiAgICAgICAgb3B0aW9ucy5kZWZhdWx0ID0gT2JqZWN0LmFzc2lnbihwYXJzZU9wdGlvbnMuZGVmYXVsdCwgb3B0aW9ucy5kZWZhdWx0KTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocGFyc2VPcHRpb25zLmFsaWFzKSkge1xuICAgICAgICAgICAgb3B0aW9ucy5hbGlhc1trZXldID0gKG9wdGlvbnMuYWxpYXNba2V5XSB8fCBbXSkuY29uY2F0KHBhcnNlT3B0aW9ucy5hbGlhc1trZXldKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLmFycmF5ID0gb3B0aW9ucy5hcnJheS5jb25jYXQocGFyc2VPcHRpb25zLmFycmF5KTtcbiAgICAgICAgb3B0aW9ucy5jb25maWcgPSB7fTtcbiAgICAgICAgY29uc3QgdW5wYXJzZWQgPSBbXTtcbiAgICAgICAgT2JqZWN0LmtleXMocG9zaXRpb25hbE1hcCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgcG9zaXRpb25hbE1hcFtrZXldLm1hcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuY29uZmlndXJhdGlvblsndW5rbm93bi1vcHRpb25zLWFzLWFyZ3MnXSlcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5rZXlba2V5XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdW5wYXJzZWQucHVzaChgLS0ke2tleX1gKTtcbiAgICAgICAgICAgICAgICB1bnBhcnNlZC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF1bnBhcnNlZC5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZmlndXJhdGlvbiwge1xuICAgICAgICAgICAgJ3BvcHVsYXRlLS0nOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gc2hpbS5QYXJzZXIuZGV0YWlsZWQodW5wYXJzZWQsIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZyxcbiAgICAgICAgfSkpO1xuICAgICAgICBpZiAocGFyc2VkLmVycm9yKSB7XG4gICAgICAgICAgICB5YXJncy5nZXRVc2FnZUluc3RhbmNlKCkuZmFpbChwYXJzZWQuZXJyb3IubWVzc2FnZSwgcGFyc2VkLmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uYWxLZXlzID0gT2JqZWN0LmtleXMocG9zaXRpb25hbE1hcCk7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhwb3NpdGlvbmFsTWFwKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25hbEtleXMucHVzaCguLi5wYXJzZWQuYWxpYXNlc1trZXldKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMocGFyc2VkLmFyZ3YpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb25hbEtleXMuaW5kZXhPZihrZXkpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXBvc2l0aW9uYWxNYXBba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uYWxNYXBba2V5XSA9IHBhcnNlZC5hcmd2W2tleV07XG4gICAgICAgICAgICAgICAgICAgIGFyZ3Zba2V5XSA9IHBhcnNlZC5hcmd2W2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2VsZi5jbWRUb1BhcnNlT3B0aW9ucyA9IGZ1bmN0aW9uIChjbWRTdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcGFyc2VPcHRpb25zID0ge1xuICAgICAgICAgICAgYXJyYXk6IFtdLFxuICAgICAgICAgICAgZGVmYXVsdDoge30sXG4gICAgICAgICAgICBhbGlhczoge30sXG4gICAgICAgICAgICBkZW1hbmQ6IHt9LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUNvbW1hbmQoY21kU3RyaW5nKTtcbiAgICAgICAgcGFyc2VkLmRlbWFuZGVkLmZvckVhY2goZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBbY21kLCAuLi5hbGlhc2VzXSA9IGQuY21kO1xuICAgICAgICAgICAgaWYgKGQudmFyaWFkaWMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZU9wdGlvbnMuYXJyYXkucHVzaChjbWQpO1xuICAgICAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5kZWZhdWx0W2NtZF0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5hbGlhc1tjbWRdID0gYWxpYXNlcztcbiAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5kZW1hbmRbY21kXSA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBwYXJzZWQub3B0aW9uYWwuZm9yRWFjaChvID0+IHtcbiAgICAgICAgICAgIGNvbnN0IFtjbWQsIC4uLmFsaWFzZXNdID0gby5jbWQ7XG4gICAgICAgICAgICBpZiAoby52YXJpYWRpYykge1xuICAgICAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5hcnJheS5wdXNoKGNtZCk7XG4gICAgICAgICAgICAgICAgcGFyc2VPcHRpb25zLmRlZmF1bHRbY21kXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyc2VPcHRpb25zLmFsaWFzW2NtZF0gPSBhbGlhc2VzO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBhcnNlT3B0aW9ucztcbiAgICB9O1xuICAgIHNlbGYucmVzZXQgPSAoKSA9PiB7XG4gICAgICAgIGhhbmRsZXJzID0ge307XG4gICAgICAgIGFsaWFzTWFwID0ge307XG4gICAgICAgIGRlZmF1bHRDb21tYW5kID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGNvbnN0IGZyb3plbnMgPSBbXTtcbiAgICBzZWxmLmZyZWV6ZSA9ICgpID0+IHtcbiAgICAgICAgZnJvemVucy5wdXNoKHtcbiAgICAgICAgICAgIGhhbmRsZXJzLFxuICAgICAgICAgICAgYWxpYXNNYXAsXG4gICAgICAgICAgICBkZWZhdWx0Q29tbWFuZCxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBzZWxmLnVuZnJlZXplID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBmcm96ZW4gPSBmcm96ZW5zLnBvcCgpO1xuICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChmcm96ZW4sIHVuZGVmaW5lZCwgc2hpbSk7XG4gICAgICAgICh7IGhhbmRsZXJzLCBhbGlhc01hcCwgZGVmYXVsdENvbW1hbmQgfSA9IGZyb3plbik7XG4gICAgfTtcbiAgICByZXR1cm4gc2VsZjtcbn1cbmZ1bmN0aW9uIGlzQ29tbWFuZEJ1aWxkZXJEZWZpbml0aW9uKGJ1aWxkZXIpIHtcbiAgICByZXR1cm4gKHR5cGVvZiBidWlsZGVyID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAhIWJ1aWxkZXIuYnVpbGRlciAmJlxuICAgICAgICB0eXBlb2YgYnVpbGRlci5oYW5kbGVyID09PSAnZnVuY3Rpb24nKTtcbn1cbmZ1bmN0aW9uIGlzQ29tbWFuZEFuZEFsaWFzZXMoY21kKSB7XG4gICAgaWYgKGNtZC5ldmVyeShjID0+IHR5cGVvZiBjID09PSAnc3RyaW5nJykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNDb21tYW5kQnVpbGRlckNhbGxiYWNrKGJ1aWxkZXIpIHtcbiAgICByZXR1cm4gdHlwZW9mIGJ1aWxkZXIgPT09ICdmdW5jdGlvbic7XG59XG5mdW5jdGlvbiBpc0NvbW1hbmRCdWlsZGVyT3B0aW9uRGVmaW5pdGlvbnMoYnVpbGRlcikge1xuICAgIHJldHVybiB0eXBlb2YgYnVpbGRlciA9PT0gJ29iamVjdCc7XG59XG5mdW5jdGlvbiBpc0NvbW1hbmRIYW5kbGVyRGVmaW5pdGlvbihjbWQpIHtcbiAgICByZXR1cm4gdHlwZW9mIGNtZCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoY21kKTtcbn1cblxuZnVuY3Rpb24gc2V0QmxvY2tpbmcoYmxvY2tpbmcpIHtcbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICByZXR1cm47XG4gICAgW3Byb2Nlc3Muc3Rkb3V0LCBwcm9jZXNzLnN0ZGVycl0uZm9yRWFjaChfc3RyZWFtID0+IHtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gX3N0cmVhbTtcbiAgICAgICAgaWYgKHN0cmVhbS5faGFuZGxlICYmXG4gICAgICAgICAgICBzdHJlYW0uaXNUVFkgJiZcbiAgICAgICAgICAgIHR5cGVvZiBzdHJlYW0uX2hhbmRsZS5zZXRCbG9ja2luZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgc3RyZWFtLl9oYW5kbGUuc2V0QmxvY2tpbmcoYmxvY2tpbmcpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIHVzYWdlKHlhcmdzLCB5MThuLCBzaGltKSB7XG4gICAgY29uc3QgX18gPSB5MThuLl9fO1xuICAgIGNvbnN0IHNlbGYgPSB7fTtcbiAgICBjb25zdCBmYWlscyA9IFtdO1xuICAgIHNlbGYuZmFpbEZuID0gZnVuY3Rpb24gZmFpbEZuKGYpIHtcbiAgICAgICAgZmFpbHMucHVzaChmKTtcbiAgICB9O1xuICAgIGxldCBmYWlsTWVzc2FnZSA9IG51bGw7XG4gICAgbGV0IHNob3dIZWxwT25GYWlsID0gdHJ1ZTtcbiAgICBzZWxmLnNob3dIZWxwT25GYWlsID0gZnVuY3Rpb24gc2hvd0hlbHBPbkZhaWxGbihhcmcxID0gdHJ1ZSwgYXJnMikge1xuICAgICAgICBmdW5jdGlvbiBwYXJzZUZ1bmN0aW9uQXJncygpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYXJnMSA9PT0gJ3N0cmluZycgPyBbdHJ1ZSwgYXJnMV0gOiBbYXJnMSwgYXJnMl07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgW2VuYWJsZWQsIG1lc3NhZ2VdID0gcGFyc2VGdW5jdGlvbkFyZ3MoKTtcbiAgICAgICAgZmFpbE1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICBzaG93SGVscE9uRmFpbCA9IGVuYWJsZWQ7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgbGV0IGZhaWx1cmVPdXRwdXQgPSBmYWxzZTtcbiAgICBzZWxmLmZhaWwgPSBmdW5jdGlvbiBmYWlsKG1zZywgZXJyKSB7XG4gICAgICAgIGNvbnN0IGxvZ2dlciA9IHlhcmdzLl9nZXRMb2dnZXJJbnN0YW5jZSgpO1xuICAgICAgICBpZiAoZmFpbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gZmFpbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICBmYWlsc1tpXShtc2csIGVyciwgc2VsZik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoeWFyZ3MuZ2V0RXhpdFByb2Nlc3MoKSlcbiAgICAgICAgICAgICAgICBzZXRCbG9ja2luZyh0cnVlKTtcbiAgICAgICAgICAgIGlmICghZmFpbHVyZU91dHB1dCkge1xuICAgICAgICAgICAgICAgIGZhaWx1cmVPdXRwdXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChzaG93SGVscE9uRmFpbCkge1xuICAgICAgICAgICAgICAgICAgICB5YXJncy5zaG93SGVscCgnZXJyb3InKTtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChtc2cgfHwgZXJyKVxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IobXNnIHx8IGVycik7XG4gICAgICAgICAgICAgICAgaWYgKGZhaWxNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtc2cgfHwgZXJyKVxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGZhaWxNZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlcnIgPSBlcnIgfHwgbmV3IFlFcnJvcihtc2cpO1xuICAgICAgICAgICAgaWYgKHlhcmdzLmdldEV4aXRQcm9jZXNzKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geWFyZ3MuZXhpdCgxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHlhcmdzLl9oYXNQYXJzZUNhbGxiYWNrKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geWFyZ3MuZXhpdCgxLCBlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBsZXQgdXNhZ2VzID0gW107XG4gICAgbGV0IHVzYWdlRGlzYWJsZWQgPSBmYWxzZTtcbiAgICBzZWxmLnVzYWdlID0gKG1zZywgZGVzY3JpcHRpb24pID0+IHtcbiAgICAgICAgaWYgKG1zZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdXNhZ2VEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB1c2FnZXMgPSBbXTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgICAgIHVzYWdlRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdXNhZ2VzLnB1c2goW21zZywgZGVzY3JpcHRpb24gfHwgJyddKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldFVzYWdlID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdXNhZ2VzO1xuICAgIH07XG4gICAgc2VsZi5nZXRVc2FnZURpc2FibGVkID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdXNhZ2VEaXNhYmxlZDtcbiAgICB9O1xuICAgIHNlbGYuZ2V0UG9zaXRpb25hbEdyb3VwTmFtZSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIF9fKCdQb3NpdGlvbmFsczonKTtcbiAgICB9O1xuICAgIGxldCBleGFtcGxlcyA9IFtdO1xuICAgIHNlbGYuZXhhbXBsZSA9IChjbWQsIGRlc2NyaXB0aW9uKSA9PiB7XG4gICAgICAgIGV4YW1wbGVzLnB1c2goW2NtZCwgZGVzY3JpcHRpb24gfHwgJyddKTtcbiAgICB9O1xuICAgIGxldCBjb21tYW5kcyA9IFtdO1xuICAgIHNlbGYuY29tbWFuZCA9IGZ1bmN0aW9uIGNvbW1hbmQoY21kLCBkZXNjcmlwdGlvbiwgaXNEZWZhdWx0LCBhbGlhc2VzLCBkZXByZWNhdGVkID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGlzRGVmYXVsdCkge1xuICAgICAgICAgICAgY29tbWFuZHMgPSBjb21tYW5kcy5tYXAoY21kQXJyYXkgPT4ge1xuICAgICAgICAgICAgICAgIGNtZEFycmF5WzJdID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNtZEFycmF5O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29tbWFuZHMucHVzaChbY21kLCBkZXNjcmlwdGlvbiB8fCAnJywgaXNEZWZhdWx0LCBhbGlhc2VzLCBkZXByZWNhdGVkXSk7XG4gICAgfTtcbiAgICBzZWxmLmdldENvbW1hbmRzID0gKCkgPT4gY29tbWFuZHM7XG4gICAgbGV0IGRlc2NyaXB0aW9ucyA9IHt9O1xuICAgIHNlbGYuZGVzY3JpYmUgPSBmdW5jdGlvbiBkZXNjcmliZShrZXlPcktleXMsIGRlc2MpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5T3JLZXlzKSkge1xuICAgICAgICAgICAga2V5T3JLZXlzLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgc2VsZi5kZXNjcmliZShrLCBkZXNjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBrZXlPcktleXMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhrZXlPcktleXMpLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgc2VsZi5kZXNjcmliZShrLCBrZXlPcktleXNba10pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbnNba2V5T3JLZXlzXSA9IGRlc2M7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYuZ2V0RGVzY3JpcHRpb25zID0gKCkgPT4gZGVzY3JpcHRpb25zO1xuICAgIGxldCBlcGlsb2dzID0gW107XG4gICAgc2VsZi5lcGlsb2cgPSBtc2cgPT4ge1xuICAgICAgICBlcGlsb2dzLnB1c2gobXNnKTtcbiAgICB9O1xuICAgIGxldCB3cmFwU2V0ID0gZmFsc2U7XG4gICAgbGV0IHdyYXA7XG4gICAgc2VsZi53cmFwID0gY29scyA9PiB7XG4gICAgICAgIHdyYXBTZXQgPSB0cnVlO1xuICAgICAgICB3cmFwID0gY29scztcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFdyYXAoKSB7XG4gICAgICAgIGlmICghd3JhcFNldCkge1xuICAgICAgICAgICAgd3JhcCA9IHdpbmRvd1dpZHRoKCk7XG4gICAgICAgICAgICB3cmFwU2V0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd3JhcDtcbiAgICB9XG4gICAgY29uc3QgZGVmZXJZMThuTG9va3VwUHJlZml4ID0gJ19feWFyZ3NTdHJpbmdfXzonO1xuICAgIHNlbGYuZGVmZXJZMThuTG9va3VwID0gc3RyID0+IGRlZmVyWTE4bkxvb2t1cFByZWZpeCArIHN0cjtcbiAgICBzZWxmLmhlbHAgPSBmdW5jdGlvbiBoZWxwKCkge1xuICAgICAgICBpZiAoY2FjaGVkSGVscE1lc3NhZ2UpXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkSGVscE1lc3NhZ2U7XG4gICAgICAgIG5vcm1hbGl6ZUFsaWFzZXMoKTtcbiAgICAgICAgY29uc3QgYmFzZSQwID0geWFyZ3MuY3VzdG9tU2NyaXB0TmFtZVxuICAgICAgICAgICAgPyB5YXJncy4kMFxuICAgICAgICAgICAgOiBzaGltLnBhdGguYmFzZW5hbWUoeWFyZ3MuJDApO1xuICAgICAgICBjb25zdCBkZW1hbmRlZE9wdGlvbnMgPSB5YXJncy5nZXREZW1hbmRlZE9wdGlvbnMoKTtcbiAgICAgICAgY29uc3QgZGVtYW5kZWRDb21tYW5kcyA9IHlhcmdzLmdldERlbWFuZGVkQ29tbWFuZHMoKTtcbiAgICAgICAgY29uc3QgZGVwcmVjYXRlZE9wdGlvbnMgPSB5YXJncy5nZXREZXByZWNhdGVkT3B0aW9ucygpO1xuICAgICAgICBjb25zdCBncm91cHMgPSB5YXJncy5nZXRHcm91cHMoKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgbGV0IGtleXMgPSBbXTtcbiAgICAgICAga2V5cyA9IGtleXMuY29uY2F0KE9iamVjdC5rZXlzKGRlc2NyaXB0aW9ucykpO1xuICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoT2JqZWN0LmtleXMoZGVtYW5kZWRPcHRpb25zKSk7XG4gICAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhkZW1hbmRlZENvbW1hbmRzKSk7XG4gICAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhvcHRpb25zLmRlZmF1bHQpKTtcbiAgICAgICAga2V5cyA9IGtleXMuZmlsdGVyKGZpbHRlckhpZGRlbk9wdGlvbnMpO1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXMoa2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5ICE9PSAnXycpXG4gICAgICAgICAgICAgICAgYWNjW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pKTtcbiAgICAgICAgY29uc3QgdGhlV3JhcCA9IGdldFdyYXAoKTtcbiAgICAgICAgY29uc3QgdWkgPSBzaGltLmNsaXVpKHtcbiAgICAgICAgICAgIHdpZHRoOiB0aGVXcmFwLFxuICAgICAgICAgICAgd3JhcDogISF0aGVXcmFwLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF1c2FnZURpc2FibGVkKSB7XG4gICAgICAgICAgICBpZiAodXNhZ2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHVzYWdlcy5mb3JFYWNoKHVzYWdlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdWkuZGl2KGAke3VzYWdlWzBdLnJlcGxhY2UoL1xcJDAvZywgYmFzZSQwKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVzYWdlWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1aS5kaXYoeyB0ZXh0OiBgJHt1c2FnZVsxXX1gLCBwYWRkaW5nOiBbMSwgMCwgMCwgMF0gfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB1aS5kaXYoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbW1hbmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGxldCB1ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoZGVtYW5kZWRDb21tYW5kcy5fKSB7XG4gICAgICAgICAgICAgICAgICAgIHUgPSBgJHtiYXNlJDB9IDwke19fKCdjb21tYW5kJyl9PlxcbmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1ID0gYCR7YmFzZSQwfSBbJHtfXygnY29tbWFuZCcpfV1cXG5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB1aS5kaXYoYCR7dX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tbWFuZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB1aS5kaXYoX18oJ0NvbW1hbmRzOicpKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB5YXJncy5nZXRDb250ZXh0KCk7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRDb21tYW5kcyA9IGNvbnRleHQuY29tbWFuZHMubGVuZ3RoXG4gICAgICAgICAgICAgICAgPyBgJHtjb250ZXh0LmNvbW1hbmRzLmpvaW4oJyAnKX0gYFxuICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICBpZiAoeWFyZ3MuZ2V0UGFyc2VyQ29uZmlndXJhdGlvbigpWydzb3J0LWNvbW1hbmRzJ10gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBjb21tYW5kcyA9IGNvbW1hbmRzLnNvcnQoKGEsIGIpID0+IGFbMF0ubG9jYWxlQ29tcGFyZShiWzBdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21tYW5kcy5mb3JFYWNoKGNvbW1hbmQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRTdHJpbmcgPSBgJHtiYXNlJDB9ICR7cGFyZW50Q29tbWFuZHN9JHtjb21tYW5kWzBdLnJlcGxhY2UoL15cXCQwID8vLCAnJyl9YDtcbiAgICAgICAgICAgICAgICB1aS5zcGFuKHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogY29tbWFuZFN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogWzAsIDIsIDAsIDJdLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogbWF4V2lkdGgoY29tbWFuZHMsIHRoZVdyYXAsIGAke2Jhc2UkMH0ke3BhcmVudENvbW1hbmRzfWApICsgNCxcbiAgICAgICAgICAgICAgICB9LCB7IHRleHQ6IGNvbW1hbmRbMV0gfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGludHMgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAoY29tbWFuZFsyXSlcbiAgICAgICAgICAgICAgICAgICAgaGludHMucHVzaChgWyR7X18oJ2RlZmF1bHQnKX1dYCk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRbM10gJiYgY29tbWFuZFszXS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaGludHMucHVzaChgWyR7X18oJ2FsaWFzZXM6Jyl9ICR7Y29tbWFuZFszXS5qb2luKCcsICcpfV1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRbNF0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb21tYW5kWzRdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGludHMucHVzaChgWyR7X18oJ2RlcHJlY2F0ZWQ6ICVzJywgY29tbWFuZFs0XSl9XWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGludHMucHVzaChgWyR7X18oJ2RlcHJlY2F0ZWQnKX1dYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGhpbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogaGludHMuam9pbignICcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogWzAsIDAsIDAsIDJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ246ICdyaWdodCcsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB1aS5kaXYoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbGlhc0tleXMgPSAoT2JqZWN0LmtleXMob3B0aW9ucy5hbGlhcykgfHwgW10pLmNvbmNhdChPYmplY3Qua2V5cyh5YXJncy5wYXJzZWQubmV3QWxpYXNlcykgfHwgW10pO1xuICAgICAgICBrZXlzID0ga2V5cy5maWx0ZXIoa2V5ID0+ICF5YXJncy5wYXJzZWQubmV3QWxpYXNlc1trZXldICYmXG4gICAgICAgICAgICBhbGlhc0tleXMuZXZlcnkoYWxpYXMgPT4gKG9wdGlvbnMuYWxpYXNbYWxpYXNdIHx8IFtdKS5pbmRleE9mKGtleSkgPT09IC0xKSk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRHcm91cCA9IF9fKCdPcHRpb25zOicpO1xuICAgICAgICBpZiAoIWdyb3Vwc1tkZWZhdWx0R3JvdXBdKVxuICAgICAgICAgICAgZ3JvdXBzW2RlZmF1bHRHcm91cF0gPSBbXTtcbiAgICAgICAgYWRkVW5ncm91cGVkS2V5cyhrZXlzLCBvcHRpb25zLmFsaWFzLCBncm91cHMsIGRlZmF1bHRHcm91cCk7XG4gICAgICAgIGNvbnN0IGlzTG9uZ1N3aXRjaCA9IChzdykgPT4gL14tLS8udGVzdChnZXRUZXh0KHN3KSk7XG4gICAgICAgIGNvbnN0IGRpc3BsYXllZEdyb3VwcyA9IE9iamVjdC5rZXlzKGdyb3VwcylcbiAgICAgICAgICAgIC5maWx0ZXIoZ3JvdXBOYW1lID0+IGdyb3Vwc1tncm91cE5hbWVdLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAubWFwKGdyb3VwTmFtZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkS2V5cyA9IGdyb3Vwc1tncm91cE5hbWVdXG4gICAgICAgICAgICAgICAgLmZpbHRlcihmaWx0ZXJIaWRkZW5PcHRpb25zKVxuICAgICAgICAgICAgICAgIC5tYXAoa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAofmFsaWFzS2V5cy5pbmRleE9mKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGFsaWFzS2V5OyAoYWxpYXNLZXkgPSBhbGlhc0tleXNbaV0pICE9PSB1bmRlZmluZWQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAofihvcHRpb25zLmFsaWFzW2FsaWFzS2V5XSB8fCBbXSkuaW5kZXhPZihrZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsaWFzS2V5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4geyBncm91cE5hbWUsIG5vcm1hbGl6ZWRLZXlzIH07XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKCh7IG5vcm1hbGl6ZWRLZXlzIH0pID0+IG5vcm1hbGl6ZWRLZXlzLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAubWFwKCh7IGdyb3VwTmFtZSwgbm9ybWFsaXplZEtleXMgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3dpdGNoZXMgPSBub3JtYWxpemVkS2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgYWNjW2tleV0gPSBba2V5XVxuICAgICAgICAgICAgICAgICAgICAuY29uY2F0KG9wdGlvbnMuYWxpYXNba2V5XSB8fCBbXSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcChzdyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChncm91cE5hbWUgPT09IHNlbGYuZ2V0UG9zaXRpb25hbEdyb3VwTmFtZSgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN3O1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKC9eWzAtOV0kLy50ZXN0KHN3KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gfm9wdGlvbnMuYm9vbGVhbi5pbmRleE9mKGtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnLSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnLS0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzdy5sZW5ndGggPiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJy0tJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICctJykgKyBzdyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoc3cxLCBzdzIpID0+IGlzTG9uZ1N3aXRjaChzdzEpID09PSBpc0xvbmdTd2l0Y2goc3cyKVxuICAgICAgICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgICAgICAgOiBpc0xvbmdTd2l0Y2goc3cxKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICAgICAgICAgICAgICA6IC0xKVxuICAgICAgICAgICAgICAgICAgICAuam9pbignLCAnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgcmV0dXJuIHsgZ3JvdXBOYW1lLCBub3JtYWxpemVkS2V5cywgc3dpdGNoZXMgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNob3J0U3dpdGNoZXNVc2VkID0gZGlzcGxheWVkR3JvdXBzXG4gICAgICAgICAgICAuZmlsdGVyKCh7IGdyb3VwTmFtZSB9KSA9PiBncm91cE5hbWUgIT09IHNlbGYuZ2V0UG9zaXRpb25hbEdyb3VwTmFtZSgpKVxuICAgICAgICAgICAgLnNvbWUoKHsgbm9ybWFsaXplZEtleXMsIHN3aXRjaGVzIH0pID0+ICFub3JtYWxpemVkS2V5cy5ldmVyeShrZXkgPT4gaXNMb25nU3dpdGNoKHN3aXRjaGVzW2tleV0pKSk7XG4gICAgICAgIGlmIChzaG9ydFN3aXRjaGVzVXNlZCkge1xuICAgICAgICAgICAgZGlzcGxheWVkR3JvdXBzXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoeyBncm91cE5hbWUgfSkgPT4gZ3JvdXBOYW1lICE9PSBzZWxmLmdldFBvc2l0aW9uYWxHcm91cE5hbWUoKSlcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgoeyBub3JtYWxpemVkS2V5cywgc3dpdGNoZXMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTG9uZ1N3aXRjaChzd2l0Y2hlc1trZXldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoZXNba2V5XSA9IGFkZEluZGVudGF0aW9uKHN3aXRjaGVzW2tleV0sICcteCwgJy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBkaXNwbGF5ZWRHcm91cHMuZm9yRWFjaCgoeyBncm91cE5hbWUsIG5vcm1hbGl6ZWRLZXlzLCBzd2l0Y2hlcyB9KSA9PiB7XG4gICAgICAgICAgICB1aS5kaXYoZ3JvdXBOYW1lKTtcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrc3dpdGNoID0gc3dpdGNoZXNba2V5XTtcbiAgICAgICAgICAgICAgICBsZXQgZGVzYyA9IGRlc2NyaXB0aW9uc1trZXldIHx8ICcnO1xuICAgICAgICAgICAgICAgIGxldCB0eXBlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAofmRlc2MubGFzdEluZGV4T2YoZGVmZXJZMThuTG9va3VwUHJlZml4KSlcbiAgICAgICAgICAgICAgICAgICAgZGVzYyA9IF9fKGRlc2Muc3Vic3RyaW5nKGRlZmVyWTE4bkxvb2t1cFByZWZpeC5sZW5ndGgpKTtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMuYm9vbGVhbi5pbmRleE9mKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ2Jvb2xlYW4nKX1dYDtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMuY291bnQuaW5kZXhPZihrZXkpKVxuICAgICAgICAgICAgICAgICAgICB0eXBlID0gYFske19fKCdjb3VudCcpfV1gO1xuICAgICAgICAgICAgICAgIGlmICh+b3B0aW9ucy5zdHJpbmcuaW5kZXhPZihrZXkpKVxuICAgICAgICAgICAgICAgICAgICB0eXBlID0gYFske19fKCdzdHJpbmcnKX1dYDtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMubm9ybWFsaXplLmluZGV4T2Yoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnc3RyaW5nJyl9XWA7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLmFycmF5LmluZGV4T2Yoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnYXJyYXknKX1dYDtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMubnVtYmVyLmluZGV4T2Yoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnbnVtYmVyJyl9XWA7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwcmVjYXRlZEV4dHJhID0gKGRlcHJlY2F0ZWQpID0+IHR5cGVvZiBkZXByZWNhdGVkID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IGBbJHtfXygnZGVwcmVjYXRlZDogJXMnLCBkZXByZWNhdGVkKX1dYFxuICAgICAgICAgICAgICAgICAgICA6IGBbJHtfXygnZGVwcmVjYXRlZCcpfV1gO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4dHJhID0gW1xuICAgICAgICAgICAgICAgICAgICBrZXkgaW4gZGVwcmVjYXRlZE9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZGVwcmVjYXRlZEV4dHJhKGRlcHJlY2F0ZWRPcHRpb25zW2tleV0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGtleSBpbiBkZW1hbmRlZE9wdGlvbnMgPyBgWyR7X18oJ3JlcXVpcmVkJyl9XWAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNob2ljZXMgJiYgb3B0aW9ucy5jaG9pY2VzW2tleV1cbiAgICAgICAgICAgICAgICAgICAgICAgID8gYFske19fKCdjaG9pY2VzOicpfSAke3NlbGYuc3RyaW5naWZpZWRWYWx1ZXMob3B0aW9ucy5jaG9pY2VzW2tleV0pfV1gXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRTdHJpbmcob3B0aW9ucy5kZWZhdWx0W2tleV0sIG9wdGlvbnMuZGVmYXVsdERlc2NyaXB0aW9uW2tleV0pLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgICAgICAgICAuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHVpLnNwYW4oe1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBnZXRUZXh0KGtzd2l0Y2gpLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBbMCwgMiwgMCwgMiArIGdldEluZGVudGF0aW9uKGtzd2l0Y2gpXSxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG1heFdpZHRoKHN3aXRjaGVzLCB0aGVXcmFwKSArIDQsXG4gICAgICAgICAgICAgICAgfSwgZGVzYyk7XG4gICAgICAgICAgICAgICAgaWYgKGV4dHJhKVxuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoeyB0ZXh0OiBleHRyYSwgcGFkZGluZzogWzAsIDAsIDAsIDJdLCBhbGlnbjogJ3JpZ2h0JyB9KTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB1aS5kaXYoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChleGFtcGxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHVpLmRpdihfXygnRXhhbXBsZXM6JykpO1xuICAgICAgICAgICAgZXhhbXBsZXMuZm9yRWFjaChleGFtcGxlID0+IHtcbiAgICAgICAgICAgICAgICBleGFtcGxlWzBdID0gZXhhbXBsZVswXS5yZXBsYWNlKC9cXCQwL2csIGJhc2UkMCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGV4YW1wbGVzLmZvckVhY2goZXhhbXBsZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV4YW1wbGVbMV0gPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdih7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBleGFtcGxlWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogWzAsIDIsIDAsIDJdLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdih7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBleGFtcGxlWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogWzAsIDIsIDAsIDJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG1heFdpZHRoKGV4YW1wbGVzLCB0aGVXcmFwKSArIDQsXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGV4YW1wbGVbMV0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVwaWxvZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZSA9IGVwaWxvZ3NcbiAgICAgICAgICAgICAgICAubWFwKGVwaWxvZyA9PiBlcGlsb2cucmVwbGFjZSgvXFwkMC9nLCBiYXNlJDApKVxuICAgICAgICAgICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICAgICAgICAgIHVpLmRpdihgJHtlfVxcbmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1aS50b1N0cmluZygpLnJlcGxhY2UoL1xccyokLywgJycpO1xuICAgIH07XG4gICAgZnVuY3Rpb24gbWF4V2lkdGgodGFibGUsIHRoZVdyYXAsIG1vZGlmaWVyKSB7XG4gICAgICAgIGxldCB3aWR0aCA9IDA7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0YWJsZSkpIHtcbiAgICAgICAgICAgIHRhYmxlID0gT2JqZWN0LnZhbHVlcyh0YWJsZSkubWFwKHYgPT4gW3ZdKTtcbiAgICAgICAgfVxuICAgICAgICB0YWJsZS5mb3JFYWNoKHYgPT4ge1xuICAgICAgICAgICAgd2lkdGggPSBNYXRoLm1heChzaGltLnN0cmluZ1dpZHRoKG1vZGlmaWVyID8gYCR7bW9kaWZpZXJ9ICR7Z2V0VGV4dCh2WzBdKX1gIDogZ2V0VGV4dCh2WzBdKSkgKyBnZXRJbmRlbnRhdGlvbih2WzBdKSwgd2lkdGgpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoZVdyYXApXG4gICAgICAgICAgICB3aWR0aCA9IE1hdGgubWluKHdpZHRoLCBwYXJzZUludCgodGhlV3JhcCAqIDAuNSkudG9TdHJpbmcoKSwgMTApKTtcbiAgICAgICAgcmV0dXJuIHdpZHRoO1xuICAgIH1cbiAgICBmdW5jdGlvbiBub3JtYWxpemVBbGlhc2VzKCkge1xuICAgICAgICBjb25zdCBkZW1hbmRlZE9wdGlvbnMgPSB5YXJncy5nZXREZW1hbmRlZE9wdGlvbnMoKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgKE9iamVjdC5rZXlzKG9wdGlvbnMuYWxpYXMpIHx8IFtdKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBvcHRpb25zLmFsaWFzW2tleV0uZm9yRWFjaChhbGlhcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uc1thbGlhc10pXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZGVzY3JpYmUoa2V5LCBkZXNjcmlwdGlvbnNbYWxpYXNdKTtcbiAgICAgICAgICAgICAgICBpZiAoYWxpYXMgaW4gZGVtYW5kZWRPcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICB5YXJncy5kZW1hbmRPcHRpb24oa2V5LCBkZW1hbmRlZE9wdGlvbnNbYWxpYXNdKTtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMuYm9vbGVhbi5pbmRleE9mKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3MuYm9vbGVhbihrZXkpO1xuICAgICAgICAgICAgICAgIGlmICh+b3B0aW9ucy5jb3VudC5pbmRleE9mKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3MuY291bnQoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMuc3RyaW5nLmluZGV4T2YoYWxpYXMpKVxuICAgICAgICAgICAgICAgICAgICB5YXJncy5zdHJpbmcoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMubm9ybWFsaXplLmluZGV4T2YoYWxpYXMpKVxuICAgICAgICAgICAgICAgICAgICB5YXJncy5ub3JtYWxpemUoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMuYXJyYXkuaW5kZXhPZihhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLmFycmF5KGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLm51bWJlci5pbmRleE9mKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3MubnVtYmVyKGtleSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGxldCBjYWNoZWRIZWxwTWVzc2FnZTtcbiAgICBzZWxmLmNhY2hlSGVscE1lc3NhZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNhY2hlZEhlbHBNZXNzYWdlID0gdGhpcy5oZWxwKCk7XG4gICAgfTtcbiAgICBzZWxmLmNsZWFyQ2FjaGVkSGVscE1lc3NhZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNhY2hlZEhlbHBNZXNzYWdlID0gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgZnVuY3Rpb24gYWRkVW5ncm91cGVkS2V5cyhrZXlzLCBhbGlhc2VzLCBncm91cHMsIGRlZmF1bHRHcm91cCkge1xuICAgICAgICBsZXQgZ3JvdXBlZEtleXMgPSBbXTtcbiAgICAgICAgbGV0IHRvQ2hlY2sgPSBudWxsO1xuICAgICAgICBPYmplY3Qua2V5cyhncm91cHMpLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICAgICAgZ3JvdXBlZEtleXMgPSBncm91cGVkS2V5cy5jb25jYXQoZ3JvdXBzW2dyb3VwXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHRvQ2hlY2sgPSBba2V5XS5jb25jYXQoYWxpYXNlc1trZXldKTtcbiAgICAgICAgICAgIGlmICghdG9DaGVjay5zb21lKGsgPT4gZ3JvdXBlZEtleXMuaW5kZXhPZihrKSAhPT0gLTEpKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBzW2RlZmF1bHRHcm91cF0ucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGdyb3VwZWRLZXlzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaWx0ZXJIaWRkZW5PcHRpb25zKGtleSkge1xuICAgICAgICByZXR1cm4gKHlhcmdzLmdldE9wdGlvbnMoKS5oaWRkZW5PcHRpb25zLmluZGV4T2Yoa2V5KSA8IDAgfHxcbiAgICAgICAgICAgIHlhcmdzLnBhcnNlZC5hcmd2W3lhcmdzLmdldE9wdGlvbnMoKS5zaG93SGlkZGVuT3B0XSk7XG4gICAgfVxuICAgIHNlbGYuc2hvd0hlbHAgPSAobGV2ZWwpID0+IHtcbiAgICAgICAgY29uc3QgbG9nZ2VyID0geWFyZ3MuX2dldExvZ2dlckluc3RhbmNlKCk7XG4gICAgICAgIGlmICghbGV2ZWwpXG4gICAgICAgICAgICBsZXZlbCA9ICdlcnJvcic7XG4gICAgICAgIGNvbnN0IGVtaXQgPSB0eXBlb2YgbGV2ZWwgPT09ICdmdW5jdGlvbicgPyBsZXZlbCA6IGxvZ2dlcltsZXZlbF07XG4gICAgICAgIGVtaXQoc2VsZi5oZWxwKCkpO1xuICAgIH07XG4gICAgc2VsZi5mdW5jdGlvbkRlc2NyaXB0aW9uID0gZm4gPT4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGZuLm5hbWVcbiAgICAgICAgICAgID8gc2hpbS5QYXJzZXIuZGVjYW1lbGl6ZShmbi5uYW1lLCAnLScpXG4gICAgICAgICAgICA6IF9fKCdnZW5lcmF0ZWQtdmFsdWUnKTtcbiAgICAgICAgcmV0dXJuIFsnKCcsIGRlc2NyaXB0aW9uLCAnKSddLmpvaW4oJycpO1xuICAgIH07XG4gICAgc2VsZi5zdHJpbmdpZmllZFZhbHVlcyA9IGZ1bmN0aW9uIHN0cmluZ2lmaWVkVmFsdWVzKHZhbHVlcywgc2VwYXJhdG9yKSB7XG4gICAgICAgIGxldCBzdHJpbmcgPSAnJztcbiAgICAgICAgY29uc3Qgc2VwID0gc2VwYXJhdG9yIHx8ICcsICc7XG4gICAgICAgIGNvbnN0IGFycmF5ID0gW10uY29uY2F0KHZhbHVlcyk7XG4gICAgICAgIGlmICghdmFsdWVzIHx8ICFhcnJheS5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgICBhcnJheS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgIGlmIChzdHJpbmcubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBzZXA7XG4gICAgICAgICAgICBzdHJpbmcgKz0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGRlZmF1bHRTdHJpbmcodmFsdWUsIGRlZmF1bHREZXNjcmlwdGlvbikge1xuICAgICAgICBsZXQgc3RyaW5nID0gYFske19fKCdkZWZhdWx0OicpfSBgO1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhZGVmYXVsdERlc2NyaXB0aW9uKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmIChkZWZhdWx0RGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHN0cmluZyArPSBkZWZhdWx0RGVzY3JpcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBgXCIke3ZhbHVlfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHtzdHJpbmd9XWA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdpbmRvd1dpZHRoKCkge1xuICAgICAgICBjb25zdCBtYXhXaWR0aCA9IDgwO1xuICAgICAgICBpZiAoc2hpbS5wcm9jZXNzLnN0ZENvbHVtbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbihtYXhXaWR0aCwgc2hpbS5wcm9jZXNzLnN0ZENvbHVtbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG1heFdpZHRoO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCB2ZXJzaW9uID0gbnVsbDtcbiAgICBzZWxmLnZlcnNpb24gPSB2ZXIgPT4ge1xuICAgICAgICB2ZXJzaW9uID0gdmVyO1xuICAgIH07XG4gICAgc2VsZi5zaG93VmVyc2lvbiA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgbG9nZ2VyID0geWFyZ3MuX2dldExvZ2dlckluc3RhbmNlKCk7XG4gICAgICAgIGxvZ2dlci5sb2codmVyc2lvbik7XG4gICAgfTtcbiAgICBzZWxmLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQobG9jYWxMb29rdXApIHtcbiAgICAgICAgZmFpbE1lc3NhZ2UgPSBudWxsO1xuICAgICAgICBmYWlsdXJlT3V0cHV0ID0gZmFsc2U7XG4gICAgICAgIHVzYWdlcyA9IFtdO1xuICAgICAgICB1c2FnZURpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIGVwaWxvZ3MgPSBbXTtcbiAgICAgICAgZXhhbXBsZXMgPSBbXTtcbiAgICAgICAgY29tbWFuZHMgPSBbXTtcbiAgICAgICAgZGVzY3JpcHRpb25zID0gb2JqRmlsdGVyKGRlc2NyaXB0aW9ucywgayA9PiAhbG9jYWxMb29rdXBba10pO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGNvbnN0IGZyb3plbnMgPSBbXTtcbiAgICBzZWxmLmZyZWV6ZSA9IGZ1bmN0aW9uIGZyZWV6ZSgpIHtcbiAgICAgICAgZnJvemVucy5wdXNoKHtcbiAgICAgICAgICAgIGZhaWxNZXNzYWdlLFxuICAgICAgICAgICAgZmFpbHVyZU91dHB1dCxcbiAgICAgICAgICAgIHVzYWdlcyxcbiAgICAgICAgICAgIHVzYWdlRGlzYWJsZWQsXG4gICAgICAgICAgICBlcGlsb2dzLFxuICAgICAgICAgICAgZXhhbXBsZXMsXG4gICAgICAgICAgICBjb21tYW5kcyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBzZWxmLnVuZnJlZXplID0gZnVuY3Rpb24gdW5mcmVlemUoKSB7XG4gICAgICAgIGNvbnN0IGZyb3plbiA9IGZyb3plbnMucG9wKCk7XG4gICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKGZyb3plbiwgdW5kZWZpbmVkLCBzaGltKTtcbiAgICAgICAgKHtcbiAgICAgICAgICAgIGZhaWxNZXNzYWdlLFxuICAgICAgICAgICAgZmFpbHVyZU91dHB1dCxcbiAgICAgICAgICAgIHVzYWdlcyxcbiAgICAgICAgICAgIHVzYWdlRGlzYWJsZWQsXG4gICAgICAgICAgICBlcGlsb2dzLFxuICAgICAgICAgICAgZXhhbXBsZXMsXG4gICAgICAgICAgICBjb21tYW5kcyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9ucyxcbiAgICAgICAgfSA9IGZyb3plbik7XG4gICAgfTtcbiAgICByZXR1cm4gc2VsZjtcbn1cbmZ1bmN0aW9uIGlzSW5kZW50ZWRUZXh0KHRleHQpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRleHQgPT09ICdvYmplY3QnO1xufVxuZnVuY3Rpb24gYWRkSW5kZW50YXRpb24odGV4dCwgaW5kZW50KSB7XG4gICAgcmV0dXJuIGlzSW5kZW50ZWRUZXh0KHRleHQpXG4gICAgICAgID8geyB0ZXh0OiB0ZXh0LnRleHQsIGluZGVudGF0aW9uOiB0ZXh0LmluZGVudGF0aW9uICsgaW5kZW50IH1cbiAgICAgICAgOiB7IHRleHQsIGluZGVudGF0aW9uOiBpbmRlbnQgfTtcbn1cbmZ1bmN0aW9uIGdldEluZGVudGF0aW9uKHRleHQpIHtcbiAgICByZXR1cm4gaXNJbmRlbnRlZFRleHQodGV4dCkgPyB0ZXh0LmluZGVudGF0aW9uIDogMDtcbn1cbmZ1bmN0aW9uIGdldFRleHQodGV4dCkge1xuICAgIHJldHVybiBpc0luZGVudGVkVGV4dCh0ZXh0KSA/IHRleHQudGV4dCA6IHRleHQ7XG59XG5cbmNvbnN0IGNvbXBsZXRpb25TaFRlbXBsYXRlID0gYCMjIy1iZWdpbi17e2FwcF9uYW1lfX0tY29tcGxldGlvbnMtIyMjXG4jXG4jIHlhcmdzIGNvbW1hbmQgY29tcGxldGlvbiBzY3JpcHRcbiNcbiMgSW5zdGFsbGF0aW9uOiB7e2FwcF9wYXRofX0ge3tjb21wbGV0aW9uX2NvbW1hbmR9fSA+PiB+Ly5iYXNocmNcbiMgICAgb3Ige3thcHBfcGF0aH19IHt7Y29tcGxldGlvbl9jb21tYW5kfX0gPj4gfi8uYmFzaF9wcm9maWxlIG9uIE9TWC5cbiNcbl95YXJnc19jb21wbGV0aW9ucygpXG57XG4gICAgbG9jYWwgY3VyX3dvcmQgYXJncyB0eXBlX2xpc3RcblxuICAgIGN1cl93b3JkPVwiXFwke0NPTVBfV09SRFNbQ09NUF9DV09SRF19XCJcbiAgICBhcmdzPShcIlxcJHtDT01QX1dPUkRTW0BdfVwiKVxuXG4gICAgIyBhc2sgeWFyZ3MgdG8gZ2VuZXJhdGUgY29tcGxldGlvbnMuXG4gICAgdHlwZV9saXN0PSQoe3thcHBfcGF0aH19IC0tZ2V0LXlhcmdzLWNvbXBsZXRpb25zIFwiXFwke2FyZ3NbQF19XCIpXG5cbiAgICBDT01QUkVQTFk9KCAkKGNvbXBnZW4gLVcgXCJcXCR7dHlwZV9saXN0fVwiIC0tIFxcJHtjdXJfd29yZH0pIClcblxuICAgICMgaWYgbm8gbWF0Y2ggd2FzIGZvdW5kLCBmYWxsIGJhY2sgdG8gZmlsZW5hbWUgY29tcGxldGlvblxuICAgIGlmIFsgXFwkeyNDT01QUkVQTFlbQF19IC1lcSAwIF07IHRoZW5cbiAgICAgIENPTVBSRVBMWT0oKVxuICAgIGZpXG5cbiAgICByZXR1cm4gMFxufVxuY29tcGxldGUgLW8gZGVmYXVsdCAtRiBfeWFyZ3NfY29tcGxldGlvbnMge3thcHBfbmFtZX19XG4jIyMtZW5kLXt7YXBwX25hbWV9fS1jb21wbGV0aW9ucy0jIyNcbmA7XG5jb25zdCBjb21wbGV0aW9uWnNoVGVtcGxhdGUgPSBgIyMjLWJlZ2luLXt7YXBwX25hbWV9fS1jb21wbGV0aW9ucy0jIyNcbiNcbiMgeWFyZ3MgY29tbWFuZCBjb21wbGV0aW9uIHNjcmlwdFxuI1xuIyBJbnN0YWxsYXRpb246IHt7YXBwX3BhdGh9fSB7e2NvbXBsZXRpb25fY29tbWFuZH19ID4+IH4vLnpzaHJjXG4jICAgIG9yIHt7YXBwX3BhdGh9fSB7e2NvbXBsZXRpb25fY29tbWFuZH19ID4+IH4vLnpzaF9wcm9maWxlIG9uIE9TWC5cbiNcbl97e2FwcF9uYW1lfX1feWFyZ3NfY29tcGxldGlvbnMoKVxue1xuICBsb2NhbCByZXBseVxuICBsb2NhbCBzaT0kSUZTXG4gIElGUz0kJ1xcbicgcmVwbHk9KCQoQ09NUF9DV09SRD1cIiQoKENVUlJFTlQtMSkpXCIgQ09NUF9MSU5FPVwiJEJVRkZFUlwiIENPTVBfUE9JTlQ9XCIkQ1VSU09SXCIge3thcHBfcGF0aH19IC0tZ2V0LXlhcmdzLWNvbXBsZXRpb25zIFwiXFwke3dvcmRzW0BdfVwiKSlcbiAgSUZTPSRzaVxuICBfZGVzY3JpYmUgJ3ZhbHVlcycgcmVwbHlcbn1cbmNvbXBkZWYgX3t7YXBwX25hbWV9fV95YXJnc19jb21wbGV0aW9ucyB7e2FwcF9uYW1lfX1cbiMjIy1lbmQte3thcHBfbmFtZX19LWNvbXBsZXRpb25zLSMjI1xuYDtcblxuZnVuY3Rpb24gY29tcGxldGlvbih5YXJncywgdXNhZ2UsIGNvbW1hbmQsIHNoaW0pIHtcbiAgICBjb25zdCBzZWxmID0ge1xuICAgICAgICBjb21wbGV0aW9uS2V5OiAnZ2V0LXlhcmdzLWNvbXBsZXRpb25zJyxcbiAgICB9O1xuICAgIGxldCBhbGlhc2VzO1xuICAgIHNlbGYuc2V0UGFyc2VkID0gZnVuY3Rpb24gc2V0UGFyc2VkKHBhcnNlZCkge1xuICAgICAgICBhbGlhc2VzID0gcGFyc2VkLmFsaWFzZXM7XG4gICAgfTtcbiAgICBjb25zdCB6c2hTaGVsbCA9IChzaGltLmdldEVudignU0hFTEwnKSAmJiBzaGltLmdldEVudignU0hFTEwnKS5pbmRleE9mKCd6c2gnKSAhPT0gLTEpIHx8XG4gICAgICAgIChzaGltLmdldEVudignWlNIX05BTUUnKSAmJiBzaGltLmdldEVudignWlNIX05BTUUnKS5pbmRleE9mKCd6c2gnKSAhPT0gLTEpO1xuICAgIHNlbGYuZ2V0Q29tcGxldGlvbiA9IGZ1bmN0aW9uIGdldENvbXBsZXRpb24oYXJncywgZG9uZSkge1xuICAgICAgICBjb25zdCBjb21wbGV0aW9ucyA9IFtdO1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gYXJncy5sZW5ndGggPyBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gOiAnJztcbiAgICAgICAgY29uc3QgYXJndiA9IHlhcmdzLnBhcnNlKGFyZ3MsIHRydWUpO1xuICAgICAgICBjb25zdCBwYXJlbnRDb21tYW5kcyA9IHlhcmdzLmdldENvbnRleHQoKS5jb21tYW5kcztcbiAgICAgICAgZnVuY3Rpb24gcnVuQ29tcGxldGlvbkZ1bmN0aW9uKGFyZ3YpIHtcbiAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKGNvbXBsZXRpb25GdW5jdGlvbiwgbnVsbCwgc2hpbSk7XG4gICAgICAgICAgICBpZiAoaXNTeW5jQ29tcGxldGlvbkZ1bmN0aW9uKGNvbXBsZXRpb25GdW5jdGlvbikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb21wbGV0aW9uRnVuY3Rpb24oY3VycmVudCwgYXJndik7XG4gICAgICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGxpc3QgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hpbS5wcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lKGxpc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoaW0ucHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25GdW5jdGlvbihjdXJyZW50LCBhcmd2LCBjb21wbGV0aW9ucyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoY29tcGxldGlvbnMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wbGV0aW9uRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBpc1Byb21pc2UoYXJndilcbiAgICAgICAgICAgICAgICA/IGFyZ3YudGhlbihydW5Db21wbGV0aW9uRnVuY3Rpb24pXG4gICAgICAgICAgICAgICAgOiBydW5Db21wbGV0aW9uRnVuY3Rpb24oYXJndik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBjb21tYW5kLmdldENvbW1hbmRIYW5kbGVycygpO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBhcmdzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChoYW5kbGVyc1thcmdzW2ldXSAmJiBoYW5kbGVyc1thcmdzW2ldXS5idWlsZGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnVpbGRlciA9IGhhbmRsZXJzW2FyZ3NbaV1dLmJ1aWxkZXI7XG4gICAgICAgICAgICAgICAgaWYgKGlzQ29tbWFuZEJ1aWxkZXJDYWxsYmFjayhidWlsZGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB5ID0geWFyZ3MucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgYnVpbGRlcih5KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHkuYXJndjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjdXJyZW50Lm1hdGNoKC9eLS8pICYmXG4gICAgICAgICAgICBwYXJlbnRDb21tYW5kc1twYXJlbnRDb21tYW5kcy5sZW5ndGggLSAxXSAhPT0gY3VycmVudCkge1xuICAgICAgICAgICAgdXNhZ2UuZ2V0Q29tbWFuZHMoKS5mb3JFYWNoKHVzYWdlQ29tbWFuZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBwYXJzZUNvbW1hbmQodXNhZ2VDb21tYW5kWzBdKS5jbWQ7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MuaW5kZXhPZihjb21tYW5kTmFtZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghenNoU2hlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25zLnB1c2goY29tbWFuZE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVzYyA9IHVzYWdlQ29tbWFuZFsxXSB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25zLnB1c2goY29tbWFuZE5hbWUucmVwbGFjZSgvOi9nLCAnXFxcXDonKSArICc6JyArIGRlc2MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnQubWF0Y2goL14tLykgfHwgKGN1cnJlbnQgPT09ICcnICYmIGNvbXBsZXRpb25zLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlc2NzID0gdXNhZ2UuZ2V0RGVzY3JpcHRpb25zKCk7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0geWFyZ3MuZ2V0T3B0aW9ucygpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMob3B0aW9ucy5rZXkpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZWdhYmxlID0gISFvcHRpb25zLmNvbmZpZ3VyYXRpb25bJ2Jvb2xlYW4tbmVnYXRpb24nXSAmJlxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmJvb2xlYW4uaW5jbHVkZXMoa2V5KTtcbiAgICAgICAgICAgICAgICBsZXQga2V5QW5kQWxpYXNlcyA9IFtrZXldLmNvbmNhdChhbGlhc2VzW2tleV0gfHwgW10pO1xuICAgICAgICAgICAgICAgIGlmIChuZWdhYmxlKVxuICAgICAgICAgICAgICAgICAgICBrZXlBbmRBbGlhc2VzID0ga2V5QW5kQWxpYXNlcy5jb25jYXQoa2V5QW5kQWxpYXNlcy5tYXAoa2V5ID0+IGBuby0ke2tleX1gKSk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY29tcGxldGVPcHRpb25LZXkoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vdEluQXJncyA9IGtleUFuZEFsaWFzZXMuZXZlcnkodmFsID0+IGFyZ3MuaW5kZXhPZihgLS0ke3ZhbH1gKSA9PT0gLTEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobm90SW5BcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydHNCeVR3b0Rhc2hlcyA9IChzKSA9PiAvXi0tLy50ZXN0KHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNTaG9ydE9wdGlvbiA9IChzKSA9PiAvXlteMC05XSQvLnRlc3Qocyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXNoZXMgPSAhc3RhcnRzQnlUd29EYXNoZXMoY3VycmVudCkgJiYgaXNTaG9ydE9wdGlvbihrZXkpID8gJy0nIDogJy0tJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghenNoU2hlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9ucy5wdXNoKGRhc2hlcyArIGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXNjID0gZGVzY3Nba2V5XSB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9ucy5wdXNoKGRhc2hlcyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2tleS5yZXBsYWNlKC86L2csICdcXFxcOicpfToke2Rlc2MucmVwbGFjZSgnX195YXJnc1N0cmluZ19fOicsICcnKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb21wbGV0ZU9wdGlvbktleShrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChuZWdhYmxlICYmICEhb3B0aW9ucy5kZWZhdWx0W2tleV0pXG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlT3B0aW9uS2V5KGBuby0ke2tleX1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGRvbmUoY29tcGxldGlvbnMpO1xuICAgIH07XG4gICAgc2VsZi5nZW5lcmF0ZUNvbXBsZXRpb25TY3JpcHQgPSBmdW5jdGlvbiBnZW5lcmF0ZUNvbXBsZXRpb25TY3JpcHQoJDAsIGNtZCkge1xuICAgICAgICBsZXQgc2NyaXB0ID0genNoU2hlbGxcbiAgICAgICAgICAgID8gY29tcGxldGlvblpzaFRlbXBsYXRlXG4gICAgICAgICAgICA6IGNvbXBsZXRpb25TaFRlbXBsYXRlO1xuICAgICAgICBjb25zdCBuYW1lID0gc2hpbS5wYXRoLmJhc2VuYW1lKCQwKTtcbiAgICAgICAgaWYgKCQwLm1hdGNoKC9cXC5qcyQvKSlcbiAgICAgICAgICAgICQwID0gYC4vJHskMH1gO1xuICAgICAgICBzY3JpcHQgPSBzY3JpcHQucmVwbGFjZSgve3thcHBfbmFtZX19L2csIG5hbWUpO1xuICAgICAgICBzY3JpcHQgPSBzY3JpcHQucmVwbGFjZSgve3tjb21wbGV0aW9uX2NvbW1hbmR9fS9nLCBjbWQpO1xuICAgICAgICByZXR1cm4gc2NyaXB0LnJlcGxhY2UoL3t7YXBwX3BhdGh9fS9nLCAkMCk7XG4gICAgfTtcbiAgICBsZXQgY29tcGxldGlvbkZ1bmN0aW9uID0gbnVsbDtcbiAgICBzZWxmLnJlZ2lzdGVyRnVuY3Rpb24gPSBmbiA9PiB7XG4gICAgICAgIGNvbXBsZXRpb25GdW5jdGlvbiA9IGZuO1xuICAgIH07XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBpc1N5bmNDb21wbGV0aW9uRnVuY3Rpb24oY29tcGxldGlvbkZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIGNvbXBsZXRpb25GdW5jdGlvbi5sZW5ndGggPCAzO1xufVxuXG5mdW5jdGlvbiBsZXZlbnNodGVpbihhLCBiKSB7XG4gICAgaWYgKGEubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm4gYi5sZW5ndGg7XG4gICAgaWYgKGIubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm4gYS5sZW5ndGg7XG4gICAgY29uc3QgbWF0cml4ID0gW107XG4gICAgbGV0IGk7XG4gICAgZm9yIChpID0gMDsgaSA8PSBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1hdHJpeFtpXSA9IFtpXTtcbiAgICB9XG4gICAgbGV0IGo7XG4gICAgZm9yIChqID0gMDsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIG1hdHJpeFswXVtqXSA9IGo7XG4gICAgfVxuICAgIGZvciAoaSA9IDE7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKGogPSAxOyBqIDw9IGEubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChiLmNoYXJBdChpIC0gMSkgPT09IGEuY2hhckF0KGogLSAxKSkge1xuICAgICAgICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IG1hdHJpeFtpIC0gMV1baiAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbWF0cml4W2ldW2pdID0gTWF0aC5taW4obWF0cml4W2kgLSAxXVtqIC0gMV0gKyAxLCBNYXRoLm1pbihtYXRyaXhbaV1baiAtIDFdICsgMSwgbWF0cml4W2kgLSAxXVtqXSArIDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWF0cml4W2IubGVuZ3RoXVthLmxlbmd0aF07XG59XG5cbmNvbnN0IHNwZWNpYWxLZXlzID0gWyckMCcsICctLScsICdfJ107XG5mdW5jdGlvbiB2YWxpZGF0aW9uKHlhcmdzLCB1c2FnZSwgeTE4biwgc2hpbSkge1xuICAgIGNvbnN0IF9fID0geTE4bi5fXztcbiAgICBjb25zdCBfX24gPSB5MThuLl9fbjtcbiAgICBjb25zdCBzZWxmID0ge307XG4gICAgc2VsZi5ub25PcHRpb25Db3VudCA9IGZ1bmN0aW9uIG5vbk9wdGlvbkNvdW50KGFyZ3YpIHtcbiAgICAgICAgY29uc3QgZGVtYW5kZWRDb21tYW5kcyA9IHlhcmdzLmdldERlbWFuZGVkQ29tbWFuZHMoKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb25hbENvdW50ID0gYXJndi5fLmxlbmd0aCArIChhcmd2WyctLSddID8gYXJndlsnLS0nXS5sZW5ndGggOiAwKTtcbiAgICAgICAgY29uc3QgX3MgPSBwb3NpdGlvbmFsQ291bnQgLSB5YXJncy5nZXRDb250ZXh0KCkuY29tbWFuZHMubGVuZ3RoO1xuICAgICAgICBpZiAoZGVtYW5kZWRDb21tYW5kcy5fICYmXG4gICAgICAgICAgICAoX3MgPCBkZW1hbmRlZENvbW1hbmRzLl8ubWluIHx8IF9zID4gZGVtYW5kZWRDb21tYW5kcy5fLm1heCkpIHtcbiAgICAgICAgICAgIGlmIChfcyA8IGRlbWFuZGVkQ29tbWFuZHMuXy5taW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoZGVtYW5kZWRDb21tYW5kcy5fLm1pbk1zZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwoZGVtYW5kZWRDb21tYW5kcy5fLm1pbk1zZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBkZW1hbmRlZENvbW1hbmRzLl8ubWluTXNnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcJDAvZywgX3MudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwkMS8sIGRlbWFuZGVkQ29tbWFuZHMuXy5taW4udG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKF9fbignTm90IGVub3VnaCBub24tb3B0aW9uIGFyZ3VtZW50czogZ290ICVzLCBuZWVkIGF0IGxlYXN0ICVzJywgJ05vdCBlbm91Z2ggbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbmVlZCBhdCBsZWFzdCAlcycsIF9zLCBfcy50b1N0cmluZygpLCBkZW1hbmRlZENvbW1hbmRzLl8ubWluLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChfcyA+IGRlbWFuZGVkQ29tbWFuZHMuXy5tYXgpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGVtYW5kZWRDb21tYW5kcy5fLm1heE1zZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwoZGVtYW5kZWRDb21tYW5kcy5fLm1heE1zZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBkZW1hbmRlZENvbW1hbmRzLl8ubWF4TXNnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcJDAvZywgX3MudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwkMS8sIGRlbWFuZGVkQ29tbWFuZHMuXy5tYXgudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKF9fbignVG9vIG1hbnkgbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbWF4aW11bSBvZiAlcycsICdUb28gbWFueSBub24tb3B0aW9uIGFyZ3VtZW50czogZ290ICVzLCBtYXhpbXVtIG9mICVzJywgX3MsIF9zLnRvU3RyaW5nKCksIGRlbWFuZGVkQ29tbWFuZHMuXy5tYXgudG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5wb3NpdGlvbmFsQ291bnQgPSBmdW5jdGlvbiBwb3NpdGlvbmFsQ291bnQocmVxdWlyZWQsIG9ic2VydmVkKSB7XG4gICAgICAgIGlmIChvYnNlcnZlZCA8IHJlcXVpcmVkKSB7XG4gICAgICAgICAgICB1c2FnZS5mYWlsKF9fbignTm90IGVub3VnaCBub24tb3B0aW9uIGFyZ3VtZW50czogZ290ICVzLCBuZWVkIGF0IGxlYXN0ICVzJywgJ05vdCBlbm91Z2ggbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbmVlZCBhdCBsZWFzdCAlcycsIG9ic2VydmVkLCBvYnNlcnZlZCArICcnLCByZXF1aXJlZCArICcnKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYucmVxdWlyZWRBcmd1bWVudHMgPSBmdW5jdGlvbiByZXF1aXJlZEFyZ3VtZW50cyhhcmd2KSB7XG4gICAgICAgIGNvbnN0IGRlbWFuZGVkT3B0aW9ucyA9IHlhcmdzLmdldERlbWFuZGVkT3B0aW9ucygpO1xuICAgICAgICBsZXQgbWlzc2luZyA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGRlbWFuZGVkT3B0aW9ucykpIHtcbiAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFyZ3YsIGtleSkgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgYXJndltrZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIG1pc3NpbmcgPSBtaXNzaW5nIHx8IHt9O1xuICAgICAgICAgICAgICAgIG1pc3Npbmdba2V5XSA9IGRlbWFuZGVkT3B0aW9uc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtaXNzaW5nKSB7XG4gICAgICAgICAgICBjb25zdCBjdXN0b21Nc2dzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhtaXNzaW5nKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IG1pc3Npbmdba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAobXNnICYmIGN1c3RvbU1zZ3MuaW5kZXhPZihtc2cpIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21Nc2dzLnB1c2gobXNnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjdXN0b21Nc2cgPSBjdXN0b21Nc2dzLmxlbmd0aCA/IGBcXG4ke2N1c3RvbU1zZ3Muam9pbignXFxuJyl9YCA6ICcnO1xuICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ01pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQ6ICVzJywgJ01pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnRzOiAlcycsIE9iamVjdC5rZXlzKG1pc3NpbmcpLmxlbmd0aCwgT2JqZWN0LmtleXMobWlzc2luZykuam9pbignLCAnKSArIGN1c3RvbU1zZykpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLnVua25vd25Bcmd1bWVudHMgPSBmdW5jdGlvbiB1bmtub3duQXJndW1lbnRzKGFyZ3YsIGFsaWFzZXMsIHBvc2l0aW9uYWxNYXAsIGlzRGVmYXVsdENvbW1hbmQsIGNoZWNrUG9zaXRpb25hbHMgPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRLZXlzID0geWFyZ3MuZ2V0Q29tbWFuZEluc3RhbmNlKCkuZ2V0Q29tbWFuZHMoKTtcbiAgICAgICAgY29uc3QgdW5rbm93biA9IFtdO1xuICAgICAgICBjb25zdCBjdXJyZW50Q29udGV4dCA9IHlhcmdzLmdldENvbnRleHQoKTtcbiAgICAgICAgT2JqZWN0LmtleXMoYXJndikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKHNwZWNpYWxLZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBvc2l0aW9uYWxNYXAsIGtleSkgJiZcbiAgICAgICAgICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHlhcmdzLl9nZXRQYXJzZUNvbnRleHQoKSwga2V5KSAmJlxuICAgICAgICAgICAgICAgICFzZWxmLmlzVmFsaWRBbmRTb21lQWxpYXNJc05vdE5ldyhrZXksIGFsaWFzZXMpKSB7XG4gICAgICAgICAgICAgICAgdW5rbm93bi5wdXNoKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY2hlY2tQb3NpdGlvbmFscyAmJlxuICAgICAgICAgICAgKGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICAgICAgICBjb21tYW5kS2V5cy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgICAgICAgaXNEZWZhdWx0Q29tbWFuZCkpIHtcbiAgICAgICAgICAgIGFyZ3YuXy5zbGljZShjdXJyZW50Q29udGV4dC5jb21tYW5kcy5sZW5ndGgpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29tbWFuZEtleXMuaW5kZXhPZignJyArIGtleSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHVua25vd24ucHVzaCgnJyArIGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVua25vd24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ1Vua25vd24gYXJndW1lbnQ6ICVzJywgJ1Vua25vd24gYXJndW1lbnRzOiAlcycsIHVua25vd24ubGVuZ3RoLCB1bmtub3duLmpvaW4oJywgJykpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi51bmtub3duQ29tbWFuZHMgPSBmdW5jdGlvbiB1bmtub3duQ29tbWFuZHMoYXJndikge1xuICAgICAgICBjb25zdCBjb21tYW5kS2V5cyA9IHlhcmdzLmdldENvbW1hbmRJbnN0YW5jZSgpLmdldENvbW1hbmRzKCk7XG4gICAgICAgIGNvbnN0IHVua25vd24gPSBbXTtcbiAgICAgICAgY29uc3QgY3VycmVudENvbnRleHQgPSB5YXJncy5nZXRDb250ZXh0KCk7XG4gICAgICAgIGlmIChjdXJyZW50Q29udGV4dC5jb21tYW5kcy5sZW5ndGggPiAwIHx8IGNvbW1hbmRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGFyZ3YuXy5zbGljZShjdXJyZW50Q29udGV4dC5jb21tYW5kcy5sZW5ndGgpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29tbWFuZEtleXMuaW5kZXhPZignJyArIGtleSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHVua25vd24ucHVzaCgnJyArIGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVua25vd24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ1Vua25vd24gY29tbWFuZDogJXMnLCAnVW5rbm93biBjb21tYW5kczogJXMnLCB1bmtub3duLmxlbmd0aCwgdW5rbm93bi5qb2luKCcsICcpKSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5pc1ZhbGlkQW5kU29tZUFsaWFzSXNOb3ROZXcgPSBmdW5jdGlvbiBpc1ZhbGlkQW5kU29tZUFsaWFzSXNOb3ROZXcoa2V5LCBhbGlhc2VzKSB7XG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFsaWFzZXMsIGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdBbGlhc2VzID0geWFyZ3MucGFyc2VkLm5ld0FsaWFzZXM7XG4gICAgICAgIGZvciAoY29uc3QgYSBvZiBba2V5LCAuLi5hbGlhc2VzW2tleV1dKSB7XG4gICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuZXdBbGlhc2VzLCBhKSB8fFxuICAgICAgICAgICAgICAgICFuZXdBbGlhc2VzW2tleV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBzZWxmLmxpbWl0ZWRDaG9pY2VzID0gZnVuY3Rpb24gbGltaXRlZENob2ljZXMoYXJndikge1xuICAgICAgICBjb25zdCBvcHRpb25zID0geWFyZ3MuZ2V0T3B0aW9ucygpO1xuICAgICAgICBjb25zdCBpbnZhbGlkID0ge307XG4gICAgICAgIGlmICghT2JqZWN0LmtleXMob3B0aW9ucy5jaG9pY2VzKS5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChzcGVjaWFsS2V5cy5pbmRleE9mKGtleSkgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMuY2hvaWNlcywga2V5KSkge1xuICAgICAgICAgICAgICAgIFtdLmNvbmNhdChhcmd2W2tleV0pLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5jaG9pY2VzW2tleV0uaW5kZXhPZih2YWx1ZSkgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkW2tleV0gPSAoaW52YWxpZFtrZXldIHx8IFtdKS5jb25jYXQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBpbnZhbGlkS2V5cyA9IE9iamVjdC5rZXlzKGludmFsaWQpO1xuICAgICAgICBpZiAoIWludmFsaWRLZXlzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IG1zZyA9IF9fKCdJbnZhbGlkIHZhbHVlczonKTtcbiAgICAgICAgaW52YWxpZEtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgbXNnICs9IGBcXG4gICR7X18oJ0FyZ3VtZW50OiAlcywgR2l2ZW46ICVzLCBDaG9pY2VzOiAlcycsIGtleSwgdXNhZ2Uuc3RyaW5naWZpZWRWYWx1ZXMoaW52YWxpZFtrZXldKSwgdXNhZ2Uuc3RyaW5naWZpZWRWYWx1ZXMob3B0aW9ucy5jaG9pY2VzW2tleV0pKX1gO1xuICAgICAgICB9KTtcbiAgICAgICAgdXNhZ2UuZmFpbChtc2cpO1xuICAgIH07XG4gICAgbGV0IGNoZWNrcyA9IFtdO1xuICAgIHNlbGYuY2hlY2sgPSBmdW5jdGlvbiBjaGVjayhmLCBnbG9iYWwpIHtcbiAgICAgICAgY2hlY2tzLnB1c2goe1xuICAgICAgICAgICAgZnVuYzogZixcbiAgICAgICAgICAgIGdsb2JhbCxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBzZWxmLmN1c3RvbUNoZWNrcyA9IGZ1bmN0aW9uIGN1c3RvbUNoZWNrcyhhcmd2LCBhbGlhc2VzKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBmOyAoZiA9IGNoZWNrc1tpXSkgIT09IHVuZGVmaW5lZDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBmdW5jID0gZi5mdW5jO1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMoYXJndiwgYWxpYXNlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChlcnIubWVzc2FnZSA/IGVyci5tZXNzYWdlIDogZXJyLCBlcnIpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKF9fKCdBcmd1bWVudCBjaGVjayBmYWlsZWQ6ICVzJywgZnVuYy50b1N0cmluZygpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJyB8fCByZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwocmVzdWx0LnRvU3RyaW5nKCksIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGxldCBpbXBsaWVkID0ge307XG4gICAgc2VsZi5pbXBsaWVzID0gZnVuY3Rpb24gaW1wbGllcyhrZXksIHZhbHVlKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8b2JqZWN0PiBbYXJyYXl8bnVtYmVyfHN0cmluZ10nLCBba2V5LCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGtleSkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICBzZWxmLmltcGxpZXMoaywga2V5W2tdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgeWFyZ3MuZ2xvYmFsKGtleSk7XG4gICAgICAgICAgICBpZiAoIWltcGxpZWRba2V5XSkge1xuICAgICAgICAgICAgICAgIGltcGxpZWRba2V5XSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaChpID0+IHNlbGYuaW1wbGllcyhrZXksIGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKHZhbHVlLCB1bmRlZmluZWQsIHNoaW0pO1xuICAgICAgICAgICAgICAgIGltcGxpZWRba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5nZXRJbXBsaWVkID0gZnVuY3Rpb24gZ2V0SW1wbGllZCgpIHtcbiAgICAgICAgcmV0dXJuIGltcGxpZWQ7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBrZXlFeGlzdHMoYXJndiwgdmFsKSB7XG4gICAgICAgIGNvbnN0IG51bSA9IE51bWJlcih2YWwpO1xuICAgICAgICB2YWwgPSBpc05hTihudW0pID8gdmFsIDogbnVtO1xuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHZhbCA9IGFyZ3YuXy5sZW5ndGggPj0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbC5tYXRjaCgvXi0tbm8tLisvKSkge1xuICAgICAgICAgICAgdmFsID0gdmFsLm1hdGNoKC9eLS1uby0oLispLylbMV07XG4gICAgICAgICAgICB2YWwgPSAhYXJndlt2YWxdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFsID0gYXJndlt2YWxdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHNlbGYuaW1wbGljYXRpb25zID0gZnVuY3Rpb24gaW1wbGljYXRpb25zKGFyZ3YpIHtcbiAgICAgICAgY29uc3QgaW1wbHlGYWlsID0gW107XG4gICAgICAgIE9iamVjdC5rZXlzKGltcGxpZWQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdLZXkgPSBrZXk7XG4gICAgICAgICAgICAoaW1wbGllZFtrZXldIHx8IFtdKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBsZXQga2V5ID0gb3JpZ0tleTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBrZXkgPSBrZXlFeGlzdHMoYXJndiwga2V5KTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGtleUV4aXN0cyhhcmd2LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGtleSAmJiAhdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaW1wbHlGYWlsLnB1c2goYCAke29yaWdLZXl9IC0+ICR7b3JpZ1ZhbHVlfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGltcGx5RmFpbC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCBtc2cgPSBgJHtfXygnSW1wbGljYXRpb25zIGZhaWxlZDonKX1cXG5gO1xuICAgICAgICAgICAgaW1wbHlGYWlsLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIG1zZyArPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdXNhZ2UuZmFpbChtc2cpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBsZXQgY29uZmxpY3RpbmcgPSB7fTtcbiAgICBzZWxmLmNvbmZsaWN0cyA9IGZ1bmN0aW9uIGNvbmZsaWN0cyhrZXksIHZhbHVlKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8b2JqZWN0PiBbYXJyYXl8c3RyaW5nXScsIFtrZXksIHZhbHVlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoa2V5KS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmxpY3RzKGssIGtleVtrXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHlhcmdzLmdsb2JhbChrZXkpO1xuICAgICAgICAgICAgaWYgKCFjb25mbGljdGluZ1trZXldKSB7XG4gICAgICAgICAgICAgICAgY29uZmxpY3Rpbmdba2V5XSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaChpID0+IHNlbGYuY29uZmxpY3RzKGtleSwgaSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uZmxpY3Rpbmdba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5nZXRDb25mbGljdGluZyA9ICgpID0+IGNvbmZsaWN0aW5nO1xuICAgIHNlbGYuY29uZmxpY3RpbmcgPSBmdW5jdGlvbiBjb25mbGljdGluZ0ZuKGFyZ3YpIHtcbiAgICAgICAgT2JqZWN0LmtleXMoYXJndikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbmZsaWN0aW5nW2tleV0pIHtcbiAgICAgICAgICAgICAgICBjb25mbGljdGluZ1trZXldLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgYXJndltrZXldICE9PSB1bmRlZmluZWQgJiYgYXJndlt2YWx1ZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChfXygnQXJndW1lbnRzICVzIGFuZCAlcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlJywga2V5LCB2YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgc2VsZi5yZWNvbW1lbmRDb21tYW5kcyA9IGZ1bmN0aW9uIHJlY29tbWVuZENvbW1hbmRzKGNtZCwgcG90ZW50aWFsQ29tbWFuZHMpIHtcbiAgICAgICAgY29uc3QgdGhyZXNob2xkID0gMztcbiAgICAgICAgcG90ZW50aWFsQ29tbWFuZHMgPSBwb3RlbnRpYWxDb21tYW5kcy5zb3J0KChhLCBiKSA9PiBiLmxlbmd0aCAtIGEubGVuZ3RoKTtcbiAgICAgICAgbGV0IHJlY29tbWVuZGVkID0gbnVsbDtcbiAgICAgICAgbGV0IGJlc3REaXN0YW5jZSA9IEluZmluaXR5O1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgY2FuZGlkYXRlOyAoY2FuZGlkYXRlID0gcG90ZW50aWFsQ29tbWFuZHNbaV0pICE9PSB1bmRlZmluZWQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZCA9IGxldmVuc2h0ZWluKGNtZCwgY2FuZGlkYXRlKTtcbiAgICAgICAgICAgIGlmIChkIDw9IHRocmVzaG9sZCAmJiBkIDwgYmVzdERpc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgYmVzdERpc3RhbmNlID0gZDtcbiAgICAgICAgICAgICAgICByZWNvbW1lbmRlZCA9IGNhbmRpZGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocmVjb21tZW5kZWQpXG4gICAgICAgICAgICB1c2FnZS5mYWlsKF9fKCdEaWQgeW91IG1lYW4gJXM/JywgcmVjb21tZW5kZWQpKTtcbiAgICB9O1xuICAgIHNlbGYucmVzZXQgPSBmdW5jdGlvbiByZXNldChsb2NhbExvb2t1cCkge1xuICAgICAgICBpbXBsaWVkID0gb2JqRmlsdGVyKGltcGxpZWQsIGsgPT4gIWxvY2FsTG9va3VwW2tdKTtcbiAgICAgICAgY29uZmxpY3RpbmcgPSBvYmpGaWx0ZXIoY29uZmxpY3RpbmcsIGsgPT4gIWxvY2FsTG9va3VwW2tdKTtcbiAgICAgICAgY2hlY2tzID0gY2hlY2tzLmZpbHRlcihjID0+IGMuZ2xvYmFsKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBjb25zdCBmcm96ZW5zID0gW107XG4gICAgc2VsZi5mcmVlemUgPSBmdW5jdGlvbiBmcmVlemUoKSB7XG4gICAgICAgIGZyb3plbnMucHVzaCh7XG4gICAgICAgICAgICBpbXBsaWVkLFxuICAgICAgICAgICAgY2hlY2tzLFxuICAgICAgICAgICAgY29uZmxpY3RpbmcsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgc2VsZi51bmZyZWV6ZSA9IGZ1bmN0aW9uIHVuZnJlZXplKCkge1xuICAgICAgICBjb25zdCBmcm96ZW4gPSBmcm96ZW5zLnBvcCgpO1xuICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChmcm96ZW4sIHVuZGVmaW5lZCwgc2hpbSk7XG4gICAgICAgICh7IGltcGxpZWQsIGNoZWNrcywgY29uZmxpY3RpbmcgfSA9IGZyb3plbik7XG4gICAgfTtcbiAgICByZXR1cm4gc2VsZjtcbn1cblxubGV0IHNoaW0kMTtcbmZ1bmN0aW9uIFlhcmdzV2l0aFNoaW0oX3NoaW0pIHtcbiAgICBzaGltJDEgPSBfc2hpbTtcbiAgICByZXR1cm4gWWFyZ3M7XG59XG5mdW5jdGlvbiBZYXJncyhwcm9jZXNzQXJncyA9IFtdLCBjd2QgPSBzaGltJDEucHJvY2Vzcy5jd2QoKSwgcGFyZW50UmVxdWlyZSkge1xuICAgIGNvbnN0IHNlbGYgPSB7fTtcbiAgICBsZXQgY29tbWFuZCQxO1xuICAgIGxldCBjb21wbGV0aW9uJDEgPSBudWxsO1xuICAgIGxldCBncm91cHMgPSB7fTtcbiAgICBjb25zdCBnbG9iYWxNaWRkbGV3YXJlID0gW107XG4gICAgbGV0IG91dHB1dCA9ICcnO1xuICAgIGNvbnN0IHByZXNlcnZlZEdyb3VwcyA9IHt9O1xuICAgIGxldCB1c2FnZSQxO1xuICAgIGxldCB2YWxpZGF0aW9uJDE7XG4gICAgbGV0IGhhbmRsZXJGaW5pc2hDb21tYW5kID0gbnVsbDtcbiAgICBjb25zdCB5MThuID0gc2hpbSQxLnkxOG47XG4gICAgc2VsZi5taWRkbGV3YXJlID0gZ2xvYmFsTWlkZGxld2FyZUZhY3RvcnkoZ2xvYmFsTWlkZGxld2FyZSwgc2VsZik7XG4gICAgc2VsZi5zY3JpcHROYW1lID0gZnVuY3Rpb24gKHNjcmlwdE5hbWUpIHtcbiAgICAgICAgc2VsZi5jdXN0b21TY3JpcHROYW1lID0gdHJ1ZTtcbiAgICAgICAgc2VsZi4kMCA9IHNjcmlwdE5hbWU7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgbGV0IGRlZmF1bHQkMDtcbiAgICBpZiAoL1xcYihub2RlfGlvanN8ZWxlY3Ryb24pKFxcLmV4ZSk/JC8udGVzdChzaGltJDEucHJvY2Vzcy5hcmd2KClbMF0pKSB7XG4gICAgICAgIGRlZmF1bHQkMCA9IHNoaW0kMS5wcm9jZXNzLmFyZ3YoKS5zbGljZSgxLCAyKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGRlZmF1bHQkMCA9IHNoaW0kMS5wcm9jZXNzLmFyZ3YoKS5zbGljZSgwLCAxKTtcbiAgICB9XG4gICAgc2VsZi4kMCA9IGRlZmF1bHQkMFxuICAgICAgICAubWFwKHggPT4ge1xuICAgICAgICBjb25zdCBiID0gcmViYXNlKGN3ZCwgeCk7XG4gICAgICAgIHJldHVybiB4Lm1hdGNoKC9eKFxcL3woW2EtekEtWl06KT9cXFxcKS8pICYmIGIubGVuZ3RoIDwgeC5sZW5ndGggPyBiIDogeDtcbiAgICB9KVxuICAgICAgICAuam9pbignICcpXG4gICAgICAgIC50cmltKCk7XG4gICAgaWYgKHNoaW0kMS5nZXRFbnYoJ18nKSAmJiBzaGltJDEuZ2V0UHJvY2Vzc0FyZ3ZCaW4oKSA9PT0gc2hpbSQxLmdldEVudignXycpKSB7XG4gICAgICAgIHNlbGYuJDAgPSBzaGltJDFcbiAgICAgICAgICAgIC5nZXRFbnYoJ18nKVxuICAgICAgICAgICAgLnJlcGxhY2UoYCR7c2hpbSQxLnBhdGguZGlybmFtZShzaGltJDEucHJvY2Vzcy5leGVjUGF0aCgpKX0vYCwgJycpO1xuICAgIH1cbiAgICBjb25zdCBjb250ZXh0ID0geyByZXNldHM6IC0xLCBjb21tYW5kczogW10sIGZ1bGxDb21tYW5kczogW10sIGZpbGVzOiBbXSB9O1xuICAgIHNlbGYuZ2V0Q29udGV4dCA9ICgpID0+IGNvbnRleHQ7XG4gICAgbGV0IGhhc091dHB1dCA9IGZhbHNlO1xuICAgIGxldCBleGl0RXJyb3IgPSBudWxsO1xuICAgIHNlbGYuZXhpdCA9IChjb2RlLCBlcnIpID0+IHtcbiAgICAgICAgaGFzT3V0cHV0ID0gdHJ1ZTtcbiAgICAgICAgZXhpdEVycm9yID0gZXJyO1xuICAgICAgICBpZiAoZXhpdFByb2Nlc3MpXG4gICAgICAgICAgICBzaGltJDEucHJvY2Vzcy5leGl0KGNvZGUpO1xuICAgIH07XG4gICAgbGV0IGNvbXBsZXRpb25Db21tYW5kID0gbnVsbDtcbiAgICBzZWxmLmNvbXBsZXRpb24gPSBmdW5jdGlvbiAoY21kLCBkZXNjLCBmbikge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nXSBbc3RyaW5nfGJvb2xlYW58ZnVuY3Rpb25dIFtmdW5jdGlvbl0nLCBbY21kLCBkZXNjLCBmbl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGRlc2MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGZuID0gZGVzYztcbiAgICAgICAgICAgIGRlc2MgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29tcGxldGlvbkNvbW1hbmQgPSBjbWQgfHwgY29tcGxldGlvbkNvbW1hbmQgfHwgJ2NvbXBsZXRpb24nO1xuICAgICAgICBpZiAoIWRlc2MgJiYgZGVzYyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGRlc2MgPSAnZ2VuZXJhdGUgY29tcGxldGlvbiBzY3JpcHQnO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYuY29tbWFuZChjb21wbGV0aW9uQ29tbWFuZCwgZGVzYyk7XG4gICAgICAgIGlmIChmbilcbiAgICAgICAgICAgIGNvbXBsZXRpb24kMS5yZWdpc3RlckZ1bmN0aW9uKGZuKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBsZXQgb3B0aW9ucztcbiAgICBzZWxmLnJlc2V0T3B0aW9ucyA9IHNlbGYucmVzZXQgPSBmdW5jdGlvbiByZXNldE9wdGlvbnMoYWxpYXNlcyA9IHt9KSB7XG4gICAgICAgIGNvbnRleHQucmVzZXRzKys7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBjb25zdCB0bXBPcHRpb25zID0ge307XG4gICAgICAgIHRtcE9wdGlvbnMubG9jYWwgPSBvcHRpb25zLmxvY2FsID8gb3B0aW9ucy5sb2NhbCA6IFtdO1xuICAgICAgICB0bXBPcHRpb25zLmNvbmZpZ09iamVjdHMgPSBvcHRpb25zLmNvbmZpZ09iamVjdHNcbiAgICAgICAgICAgID8gb3B0aW9ucy5jb25maWdPYmplY3RzXG4gICAgICAgICAgICA6IFtdO1xuICAgICAgICBjb25zdCBsb2NhbExvb2t1cCA9IHt9O1xuICAgICAgICB0bXBPcHRpb25zLmxvY2FsLmZvckVhY2gobCA9PiB7XG4gICAgICAgICAgICBsb2NhbExvb2t1cFtsXSA9IHRydWU7XG4gICAgICAgICAgICAoYWxpYXNlc1tsXSB8fCBbXSkuZm9yRWFjaChhID0+IHtcbiAgICAgICAgICAgICAgICBsb2NhbExvb2t1cFthXSA9IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24ocHJlc2VydmVkR3JvdXBzLCBPYmplY3Qua2V5cyhncm91cHMpLnJlZHVjZSgoYWNjLCBncm91cE5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBncm91cHNbZ3JvdXBOYW1lXS5maWx0ZXIoa2V5ID0+ICEoa2V5IGluIGxvY2FsTG9va3VwKSk7XG4gICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYWNjW2dyb3VwTmFtZV0gPSBrZXlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pKTtcbiAgICAgICAgZ3JvdXBzID0ge307XG4gICAgICAgIGNvbnN0IGFycmF5T3B0aW9ucyA9IFtcbiAgICAgICAgICAgICdhcnJheScsXG4gICAgICAgICAgICAnYm9vbGVhbicsXG4gICAgICAgICAgICAnc3RyaW5nJyxcbiAgICAgICAgICAgICdza2lwVmFsaWRhdGlvbicsXG4gICAgICAgICAgICAnY291bnQnLFxuICAgICAgICAgICAgJ25vcm1hbGl6ZScsXG4gICAgICAgICAgICAnbnVtYmVyJyxcbiAgICAgICAgICAgICdoaWRkZW5PcHRpb25zJyxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3Qgb2JqZWN0T3B0aW9ucyA9IFtcbiAgICAgICAgICAgICduYXJnJyxcbiAgICAgICAgICAgICdrZXknLFxuICAgICAgICAgICAgJ2FsaWFzJyxcbiAgICAgICAgICAgICdkZWZhdWx0JyxcbiAgICAgICAgICAgICdkZWZhdWx0RGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgJ2NvbmZpZycsXG4gICAgICAgICAgICAnY2hvaWNlcycsXG4gICAgICAgICAgICAnZGVtYW5kZWRPcHRpb25zJyxcbiAgICAgICAgICAgICdkZW1hbmRlZENvbW1hbmRzJyxcbiAgICAgICAgICAgICdjb2VyY2UnLFxuICAgICAgICAgICAgJ2RlcHJlY2F0ZWRPcHRpb25zJyxcbiAgICAgICAgXTtcbiAgICAgICAgYXJyYXlPcHRpb25zLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICB0bXBPcHRpb25zW2tdID0gKG9wdGlvbnNba10gfHwgW10pLmZpbHRlcigoaykgPT4gIWxvY2FsTG9va3VwW2tdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9iamVjdE9wdGlvbnMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICAgdG1wT3B0aW9uc1trXSA9IG9iakZpbHRlcihvcHRpb25zW2tdLCBrID0+ICFsb2NhbExvb2t1cFtrXSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0bXBPcHRpb25zLmVudlByZWZpeCA9IG9wdGlvbnMuZW52UHJlZml4O1xuICAgICAgICBvcHRpb25zID0gdG1wT3B0aW9ucztcbiAgICAgICAgdXNhZ2UkMSA9IHVzYWdlJDEgPyB1c2FnZSQxLnJlc2V0KGxvY2FsTG9va3VwKSA6IHVzYWdlKHNlbGYsIHkxOG4sIHNoaW0kMSk7XG4gICAgICAgIHZhbGlkYXRpb24kMSA9IHZhbGlkYXRpb24kMVxuICAgICAgICAgICAgPyB2YWxpZGF0aW9uJDEucmVzZXQobG9jYWxMb29rdXApXG4gICAgICAgICAgICA6IHZhbGlkYXRpb24oc2VsZiwgdXNhZ2UkMSwgeTE4biwgc2hpbSQxKTtcbiAgICAgICAgY29tbWFuZCQxID0gY29tbWFuZCQxXG4gICAgICAgICAgICA/IGNvbW1hbmQkMS5yZXNldCgpXG4gICAgICAgICAgICA6IGNvbW1hbmQoc2VsZiwgdXNhZ2UkMSwgdmFsaWRhdGlvbiQxLCBnbG9iYWxNaWRkbGV3YXJlLCBzaGltJDEpO1xuICAgICAgICBpZiAoIWNvbXBsZXRpb24kMSlcbiAgICAgICAgICAgIGNvbXBsZXRpb24kMSA9IGNvbXBsZXRpb24oc2VsZiwgdXNhZ2UkMSwgY29tbWFuZCQxLCBzaGltJDEpO1xuICAgICAgICBjb21wbGV0aW9uQ29tbWFuZCA9IG51bGw7XG4gICAgICAgIG91dHB1dCA9ICcnO1xuICAgICAgICBleGl0RXJyb3IgPSBudWxsO1xuICAgICAgICBoYXNPdXRwdXQgPSBmYWxzZTtcbiAgICAgICAgc2VsZi5wYXJzZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnJlc2V0T3B0aW9ucygpO1xuICAgIGNvbnN0IGZyb3plbnMgPSBbXTtcbiAgICBmdW5jdGlvbiBmcmVlemUoKSB7XG4gICAgICAgIGZyb3plbnMucHVzaCh7XG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgY29uZmlnT2JqZWN0czogb3B0aW9ucy5jb25maWdPYmplY3RzLnNsaWNlKDApLFxuICAgICAgICAgICAgZXhpdFByb2Nlc3MsXG4gICAgICAgICAgICBncm91cHMsXG4gICAgICAgICAgICBzdHJpY3QsXG4gICAgICAgICAgICBzdHJpY3RDb21tYW5kcyxcbiAgICAgICAgICAgIHN0cmljdE9wdGlvbnMsXG4gICAgICAgICAgICBjb21wbGV0aW9uQ29tbWFuZCxcbiAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgIGV4aXRFcnJvcixcbiAgICAgICAgICAgIGhhc091dHB1dCxcbiAgICAgICAgICAgIHBhcnNlZDogc2VsZi5wYXJzZWQsXG4gICAgICAgICAgICBwYXJzZUZuLFxuICAgICAgICAgICAgcGFyc2VDb250ZXh0LFxuICAgICAgICAgICAgaGFuZGxlckZpbmlzaENvbW1hbmQsXG4gICAgICAgIH0pO1xuICAgICAgICB1c2FnZSQxLmZyZWV6ZSgpO1xuICAgICAgICB2YWxpZGF0aW9uJDEuZnJlZXplKCk7XG4gICAgICAgIGNvbW1hbmQkMS5mcmVlemUoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdW5mcmVlemUoKSB7XG4gICAgICAgIGNvbnN0IGZyb3plbiA9IGZyb3plbnMucG9wKCk7XG4gICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKGZyb3plbiwgdW5kZWZpbmVkLCBzaGltJDEpO1xuICAgICAgICBsZXQgY29uZmlnT2JqZWN0cztcbiAgICAgICAgKHtcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBjb25maWdPYmplY3RzLFxuICAgICAgICAgICAgZXhpdFByb2Nlc3MsXG4gICAgICAgICAgICBncm91cHMsXG4gICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICBleGl0RXJyb3IsXG4gICAgICAgICAgICBoYXNPdXRwdXQsXG4gICAgICAgICAgICBwYXJzZWQ6IHNlbGYucGFyc2VkLFxuICAgICAgICAgICAgc3RyaWN0LFxuICAgICAgICAgICAgc3RyaWN0Q29tbWFuZHMsXG4gICAgICAgICAgICBzdHJpY3RPcHRpb25zLFxuICAgICAgICAgICAgY29tcGxldGlvbkNvbW1hbmQsXG4gICAgICAgICAgICBwYXJzZUZuLFxuICAgICAgICAgICAgcGFyc2VDb250ZXh0LFxuICAgICAgICAgICAgaGFuZGxlckZpbmlzaENvbW1hbmQsXG4gICAgICAgIH0gPSBmcm96ZW4pO1xuICAgICAgICBvcHRpb25zLmNvbmZpZ09iamVjdHMgPSBjb25maWdPYmplY3RzO1xuICAgICAgICB1c2FnZSQxLnVuZnJlZXplKCk7XG4gICAgICAgIHZhbGlkYXRpb24kMS51bmZyZWV6ZSgpO1xuICAgICAgICBjb21tYW5kJDEudW5mcmVlemUoKTtcbiAgICB9XG4gICAgc2VsZi5ib29sZWFuID0gZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheSgnYm9vbGVhbicsIGtleXMpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuYXJyYXkgPSBmdW5jdGlvbiAoa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nPicsIFtrZXlzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludEFycmF5KCdhcnJheScsIGtleXMpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYubnVtYmVyID0gZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheSgnbnVtYmVyJywga2V5cyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5ub3JtYWxpemUgPSBmdW5jdGlvbiAoa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nPicsIFtrZXlzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludEFycmF5KCdub3JtYWxpemUnLCBrZXlzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmNvdW50ID0gZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheSgnY291bnQnLCBrZXlzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnN0cmluZyA9IGZ1bmN0aW9uIChrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXkoJ3N0cmluZycsIGtleXMpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYucmVxdWlyZXNBcmcgPSBmdW5jdGlvbiAoa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nfG9iamVjdD4gW251bWJlcl0nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleXMgPT09ICdzdHJpbmcnICYmIG9wdGlvbnMubmFyZ1trZXlzXSkge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnkoc2VsZi5yZXF1aXJlc0FyZywgJ25hcmcnLCBrZXlzLCBOYU4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5za2lwVmFsaWRhdGlvbiA9IGZ1bmN0aW9uIChrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXkoJ3NraXBWYWxpZGF0aW9uJywga2V5cyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgZnVuY3Rpb24gcG9wdWxhdGVQYXJzZXJIaW50QXJyYXkodHlwZSwga2V5cykge1xuICAgICAgICBrZXlzID0gW10uY29uY2F0KGtleXMpO1xuICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGtleSA9IHNhbml0aXplS2V5KGtleSk7XG4gICAgICAgICAgICBvcHRpb25zW3R5cGVdLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNlbGYubmFyZ3MgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG9iamVjdHxhcnJheT4gW251bWJlcl0nLCBba2V5LCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnkoc2VsZi5uYXJncywgJ25hcmcnLCBrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmNob2ljZXMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8b2JqZWN0fHN0cmluZ3xhcnJheT4gW3N0cmluZ3xhcnJheV0nLCBba2V5LCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheURpY3Rpb25hcnkoc2VsZi5jaG9pY2VzLCAnY2hvaWNlcycsIGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuYWxpYXMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8b2JqZWN0fHN0cmluZ3xhcnJheT4gW3N0cmluZ3xhcnJheV0nLCBba2V5LCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheURpY3Rpb25hcnkoc2VsZi5hbGlhcywgJ2FsaWFzJywga2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5kZWZhdWx0ID0gc2VsZi5kZWZhdWx0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlLCBkZWZhdWx0RGVzY3JpcHRpb24pIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFsqXSBbc3RyaW5nXScsIFtrZXksIHZhbHVlLCBkZWZhdWx0RGVzY3JpcHRpb25dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKGRlZmF1bHREZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgYXNzZXJ0U2luZ2xlS2V5KGtleSwgc2hpbSQxKTtcbiAgICAgICAgICAgIG9wdGlvbnMuZGVmYXVsdERlc2NyaXB0aW9uW2tleV0gPSBkZWZhdWx0RGVzY3JpcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgYXNzZXJ0U2luZ2xlS2V5KGtleSwgc2hpbSQxKTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5kZWZhdWx0RGVzY3JpcHRpb25ba2V5XSlcbiAgICAgICAgICAgICAgICBvcHRpb25zLmRlZmF1bHREZXNjcmlwdGlvbltrZXldID0gdXNhZ2UkMS5mdW5jdGlvbkRlc2NyaXB0aW9uKHZhbHVlKTtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuY2FsbCgpO1xuICAgICAgICB9XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludFNpbmdsZVZhbHVlRGljdGlvbmFyeShzZWxmLmRlZmF1bHQsICdkZWZhdWx0Jywga2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5kZXNjcmliZSA9IGZ1bmN0aW9uIChrZXksIGRlc2MpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtzdHJpbmddJywgW2tleSwgZGVzY10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBzZXRLZXkoa2V5LCB0cnVlKTtcbiAgICAgICAgdXNhZ2UkMS5kZXNjcmliZShrZXksIGRlc2MpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHNldEtleShrZXksIHNldCkge1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnkoc2V0S2V5LCAna2V5Jywga2V5LCBzZXQpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVtYW5kT3B0aW9uKGtleXMsIG1zZykge1xuICAgICAgICBhcmdzZXJ0KCc8b2JqZWN0fHN0cmluZ3xhcnJheT4gW3N0cmluZ10nLCBba2V5cywgbXNnXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludFNpbmdsZVZhbHVlRGljdGlvbmFyeShzZWxmLmRlbWFuZE9wdGlvbiwgJ2RlbWFuZGVkT3B0aW9ucycsIGtleXMsIG1zZyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH1cbiAgICBzZWxmLmRlbWFuZE9wdGlvbiA9IGRlbWFuZE9wdGlvbjtcbiAgICBzZWxmLmNvZXJjZSA9IGZ1bmN0aW9uIChrZXlzLCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8b2JqZWN0fHN0cmluZ3xhcnJheT4gW2Z1bmN0aW9uXScsIFtrZXlzLCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnkoc2VsZi5jb2VyY2UsICdjb2VyY2UnLCBrZXlzLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgZnVuY3Rpb24gcG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5KGJ1aWxkZXIsIHR5cGUsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50RGljdGlvbmFyeShidWlsZGVyLCB0eXBlLCBrZXksIHZhbHVlLCAodHlwZSwga2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgb3B0aW9uc1t0eXBlXVtrZXldID0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheURpY3Rpb25hcnkoYnVpbGRlciwgdHlwZSwga2V5LCB2YWx1ZSkge1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnREaWN0aW9uYXJ5KGJ1aWxkZXIsIHR5cGUsIGtleSwgdmFsdWUsICh0eXBlLCBrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBvcHRpb25zW3R5cGVdW2tleV0gPSAob3B0aW9uc1t0eXBlXVtrZXldIHx8IFtdKS5jb25jYXQodmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wdWxhdGVQYXJzZXJIaW50RGljdGlvbmFyeShidWlsZGVyLCB0eXBlLCBrZXksIHZhbHVlLCBzaW5nbGVLZXlIYW5kbGVyKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleSkpIHtcbiAgICAgICAgICAgIGtleS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIGJ1aWxkZXIoaywgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKChrZXkpID0+IHR5cGVvZiBrZXkgPT09ICdvYmplY3QnKShrZXkpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2Ygb2JqZWN0S2V5cyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgYnVpbGRlcihrLCBrZXlba10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2luZ2xlS2V5SGFuZGxlcih0eXBlLCBzYW5pdGl6ZUtleShrZXkpLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2FuaXRpemVLZXkoa2V5KSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdfX3Byb3RvX18nKVxuICAgICAgICAgICAgcmV0dXJuICdfX19wcm90b19fXyc7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlbGV0ZUZyb21QYXJzZXJIaW50T2JqZWN0KG9wdGlvbktleSkge1xuICAgICAgICBvYmplY3RLZXlzKG9wdGlvbnMpLmZvckVhY2goKGhpbnRLZXkpID0+IHtcbiAgICAgICAgICAgIGlmICgoKGtleSkgPT4ga2V5ID09PSAnY29uZmlnT2JqZWN0cycpKGhpbnRLZXkpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGhpbnQgPSBvcHRpb25zW2hpbnRLZXldO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaGludCkpIHtcbiAgICAgICAgICAgICAgICBpZiAofmhpbnQuaW5kZXhPZihvcHRpb25LZXkpKVxuICAgICAgICAgICAgICAgICAgICBoaW50LnNwbGljZShoaW50LmluZGV4T2Yob3B0aW9uS2V5KSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgaGludCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgaGludFtvcHRpb25LZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZGVsZXRlIHVzYWdlJDEuZ2V0RGVzY3JpcHRpb25zKClbb3B0aW9uS2V5XTtcbiAgICB9XG4gICAgc2VsZi5jb25maWcgPSBmdW5jdGlvbiBjb25maWcoa2V5ID0gJ2NvbmZpZycsIG1zZywgcGFyc2VGbikge1xuICAgICAgICBhcmdzZXJ0KCdbb2JqZWN0fHN0cmluZ10gW3N0cmluZ3xmdW5jdGlvbl0gW2Z1bmN0aW9uXScsIFtrZXksIG1zZywgcGFyc2VGbl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoa2V5KSkge1xuICAgICAgICAgICAga2V5ID0gYXBwbHlFeHRlbmRzKGtleSwgY3dkLCBzZWxmLmdldFBhcnNlckNvbmZpZ3VyYXRpb24oKVsnZGVlcC1tZXJnZS1jb25maWcnXSB8fCBmYWxzZSwgc2hpbSQxKTtcbiAgICAgICAgICAgIG9wdGlvbnMuY29uZmlnT2JqZWN0cyA9IChvcHRpb25zLmNvbmZpZ09iamVjdHMgfHwgW10pLmNvbmNhdChrZXkpO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBtc2cgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlRm4gPSBtc2c7XG4gICAgICAgICAgICBtc2cgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5kZXNjcmliZShrZXksIG1zZyB8fCB1c2FnZSQxLmRlZmVyWTE4bkxvb2t1cCgnUGF0aCB0byBKU09OIGNvbmZpZyBmaWxlJykpO1xuICAgICAgICAoQXJyYXkuaXNBcnJheShrZXkpID8ga2V5IDogW2tleV0pLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICBvcHRpb25zLmNvbmZpZ1trXSA9IHBhcnNlRm4gfHwgdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5leGFtcGxlID0gZnVuY3Rpb24gKGNtZCwgZGVzY3JpcHRpb24pIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xhcnJheT4gW3N0cmluZ10nLCBbY21kLCBkZXNjcmlwdGlvbl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjbWQpKSB7XG4gICAgICAgICAgICBjbWQuZm9yRWFjaChleGFtcGxlUGFyYW1zID0+IHNlbGYuZXhhbXBsZSguLi5leGFtcGxlUGFyYW1zKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB1c2FnZSQxLmV4YW1wbGUoY21kLCBkZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmNvbW1hbmQgPSBmdW5jdGlvbiAoY21kLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlciwgbWlkZGxld2FyZXMsIGRlcHJlY2F0ZWQpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xhcnJheXxvYmplY3Q+IFtzdHJpbmd8Ym9vbGVhbl0gW2Z1bmN0aW9ufG9iamVjdF0gW2Z1bmN0aW9uXSBbYXJyYXldIFtib29sZWFufHN0cmluZ10nLCBbY21kLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlciwgbWlkZGxld2FyZXMsIGRlcHJlY2F0ZWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgY29tbWFuZCQxLmFkZEhhbmRsZXIoY21kLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlciwgbWlkZGxld2FyZXMsIGRlcHJlY2F0ZWQpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuY29tbWFuZERpciA9IGZ1bmN0aW9uIChkaXIsIG9wdHMpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4gW29iamVjdF0nLCBbZGlyLCBvcHRzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHJlcSA9IHBhcmVudFJlcXVpcmUgfHwgc2hpbSQxLnJlcXVpcmU7XG4gICAgICAgIGNvbW1hbmQkMS5hZGREaXJlY3RvcnkoZGlyLCBzZWxmLmdldENvbnRleHQoKSwgcmVxLCBzaGltJDEuZ2V0Q2FsbGVyRmlsZSgpLCBvcHRzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmRlbWFuZCA9IHNlbGYucmVxdWlyZWQgPSBzZWxmLnJlcXVpcmUgPSBmdW5jdGlvbiBkZW1hbmQoa2V5cywgbWF4LCBtc2cpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWF4KSkge1xuICAgICAgICAgICAgbWF4LmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChtc2csIHRydWUsIHNoaW0kMSk7XG4gICAgICAgICAgICAgICAgZGVtYW5kT3B0aW9uKGtleSwgbXNnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbWF4ID0gSW5maW5pdHk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG1heCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIG1zZyA9IG1heDtcbiAgICAgICAgICAgIG1heCA9IEluZmluaXR5O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Yga2V5cyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKG1zZywgdHJ1ZSwgc2hpbSQxKTtcbiAgICAgICAgICAgIHNlbGYuZGVtYW5kQ29tbWFuZChrZXlzLCBtYXgsIG1zZywgbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGtleXMpKSB7XG4gICAgICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChtc2csIHRydWUsIHNoaW0kMSk7XG4gICAgICAgICAgICAgICAgZGVtYW5kT3B0aW9uKGtleSwgbXNnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZGVtYW5kT3B0aW9uKGtleXMsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtc2cgPT09IHRydWUgfHwgdHlwZW9mIG1zZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBkZW1hbmRPcHRpb24oa2V5cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmRlbWFuZENvbW1hbmQgPSBmdW5jdGlvbiBkZW1hbmRDb21tYW5kKG1pbiA9IDEsIG1heCwgbWluTXNnLCBtYXhNc2cpIHtcbiAgICAgICAgYXJnc2VydCgnW251bWJlcl0gW251bWJlcnxzdHJpbmddIFtzdHJpbmd8bnVsbHx1bmRlZmluZWRdIFtzdHJpbmd8bnVsbHx1bmRlZmluZWRdJywgW21pbiwgbWF4LCBtaW5Nc2csIG1heE1zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIG1heCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIG1pbk1zZyA9IG1heDtcbiAgICAgICAgICAgIG1heCA9IEluZmluaXR5O1xuICAgICAgICB9XG4gICAgICAgIHNlbGYuZ2xvYmFsKCdfJywgZmFsc2UpO1xuICAgICAgICBvcHRpb25zLmRlbWFuZGVkQ29tbWFuZHMuXyA9IHtcbiAgICAgICAgICAgIG1pbixcbiAgICAgICAgICAgIG1heCxcbiAgICAgICAgICAgIG1pbk1zZyxcbiAgICAgICAgICAgIG1heE1zZyxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldERlbWFuZGVkT3B0aW9ucyA9ICgpID0+IHtcbiAgICAgICAgYXJnc2VydChbXSwgMCk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmRlbWFuZGVkT3B0aW9ucztcbiAgICB9O1xuICAgIHNlbGYuZ2V0RGVtYW5kZWRDb21tYW5kcyA9ICgpID0+IHtcbiAgICAgICAgYXJnc2VydChbXSwgMCk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmRlbWFuZGVkQ29tbWFuZHM7XG4gICAgfTtcbiAgICBzZWxmLmRlcHJlY2F0ZU9wdGlvbiA9IGZ1bmN0aW9uIGRlcHJlY2F0ZU9wdGlvbihvcHRpb24sIG1lc3NhZ2UpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4gW3N0cmluZ3xib29sZWFuXScsIFtvcHRpb24sIG1lc3NhZ2VdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgb3B0aW9ucy5kZXByZWNhdGVkT3B0aW9uc1tvcHRpb25dID0gbWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldERlcHJlY2F0ZWRPcHRpb25zID0gKCkgPT4ge1xuICAgICAgICBhcmdzZXJ0KFtdLCAwKTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuZGVwcmVjYXRlZE9wdGlvbnM7XG4gICAgfTtcbiAgICBzZWxmLmltcGxpZXMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG9iamVjdD4gW251bWJlcnxzdHJpbmd8YXJyYXldJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdmFsaWRhdGlvbiQxLmltcGxpZXMoa2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5jb25mbGljdHMgPSBmdW5jdGlvbiAoa2V5MSwga2V5Mikge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG9iamVjdD4gW3N0cmluZ3xhcnJheV0nLCBba2V5MSwga2V5Ml0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB2YWxpZGF0aW9uJDEuY29uZmxpY3RzKGtleTEsIGtleTIpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYudXNhZ2UgPSBmdW5jdGlvbiAobXNnLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlcikge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG51bGx8dW5kZWZpbmVkPiBbc3RyaW5nfGJvb2xlYW5dIFtmdW5jdGlvbnxvYmplY3RdIFtmdW5jdGlvbl0nLCBbbXNnLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlcl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwobXNnLCBudWxsLCBzaGltJDEpO1xuICAgICAgICAgICAgaWYgKChtc2cgfHwgJycpLm1hdGNoKC9eXFwkMCggfCQpLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21tYW5kKG1zZywgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcignLnVzYWdlKCkgZGVzY3JpcHRpb24gbXVzdCBzdGFydCB3aXRoICQwIGlmIGJlaW5nIHVzZWQgYXMgYWxpYXMgZm9yIC5jb21tYW5kKCknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHVzYWdlJDEudXNhZ2UobXNnKTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLmVwaWxvZ3VlID0gc2VsZi5lcGlsb2cgPSBmdW5jdGlvbiAobXNnKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmc+JywgW21zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB1c2FnZSQxLmVwaWxvZyhtc2cpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZmFpbCA9IGZ1bmN0aW9uIChmKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxmdW5jdGlvbj4nLCBbZl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB1c2FnZSQxLmZhaWxGbihmKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLm9uRmluaXNoQ29tbWFuZCA9IGZ1bmN0aW9uIChmKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxmdW5jdGlvbj4nLCBbZl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBoYW5kbGVyRmluaXNoQ29tbWFuZCA9IGY7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRIYW5kbGVyRmluaXNoQ29tbWFuZCA9ICgpID0+IGhhbmRsZXJGaW5pc2hDb21tYW5kO1xuICAgIHNlbGYuY2hlY2sgPSBmdW5jdGlvbiAoZiwgX2dsb2JhbCkge1xuICAgICAgICBhcmdzZXJ0KCc8ZnVuY3Rpb24+IFtib29sZWFuXScsIFtmLCBfZ2xvYmFsXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHZhbGlkYXRpb24kMS5jaGVjayhmLCBfZ2xvYmFsICE9PSBmYWxzZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nbG9iYWwgPSBmdW5jdGlvbiBnbG9iYWwoZ2xvYmFscywgZ2xvYmFsKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8YXJyYXk+IFtib29sZWFuXScsIFtnbG9iYWxzLCBnbG9iYWxdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgZ2xvYmFscyA9IFtdLmNvbmNhdChnbG9iYWxzKTtcbiAgICAgICAgaWYgKGdsb2JhbCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG9wdGlvbnMubG9jYWwgPSBvcHRpb25zLmxvY2FsLmZpbHRlcihsID0+IGdsb2JhbHMuaW5kZXhPZihsKSA9PT0gLTEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2xvYmFscy5mb3JFYWNoKGcgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmxvY2FsLmluZGV4T2YoZykgPT09IC0xKVxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmxvY2FsLnB1c2goZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYucGtnQ29uZiA9IGZ1bmN0aW9uIHBrZ0NvbmYoa2V5LCByb290UGF0aCkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nPiBbc3RyaW5nXScsIFtrZXksIHJvb3RQYXRoXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGxldCBjb25mID0gbnVsbDtcbiAgICAgICAgY29uc3Qgb2JqID0gcGtnVXAocm9vdFBhdGggfHwgY3dkKTtcbiAgICAgICAgaWYgKG9ialtrZXldICYmIHR5cGVvZiBvYmpba2V5XSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGNvbmYgPSBhcHBseUV4dGVuZHMob2JqW2tleV0sIHJvb3RQYXRoIHx8IGN3ZCwgc2VsZi5nZXRQYXJzZXJDb25maWd1cmF0aW9uKClbJ2RlZXAtbWVyZ2UtY29uZmlnJ10gfHwgZmFsc2UsIHNoaW0kMSk7XG4gICAgICAgICAgICBvcHRpb25zLmNvbmZpZ09iamVjdHMgPSAob3B0aW9ucy5jb25maWdPYmplY3RzIHx8IFtdKS5jb25jYXQoY29uZik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBjb25zdCBwa2dzID0ge307XG4gICAgZnVuY3Rpb24gcGtnVXAocm9vdFBhdGgpIHtcbiAgICAgICAgY29uc3QgbnBhdGggPSByb290UGF0aCB8fCAnKic7XG4gICAgICAgIGlmIChwa2dzW25wYXRoXSlcbiAgICAgICAgICAgIHJldHVybiBwa2dzW25wYXRoXTtcbiAgICAgICAgbGV0IG9iaiA9IHt9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHN0YXJ0RGlyID0gcm9vdFBhdGggfHwgc2hpbSQxLm1haW5GaWxlbmFtZTtcbiAgICAgICAgICAgIGlmICghcm9vdFBhdGggJiYgc2hpbSQxLnBhdGguZXh0bmFtZShzdGFydERpcikpIHtcbiAgICAgICAgICAgICAgICBzdGFydERpciA9IHNoaW0kMS5wYXRoLmRpcm5hbWUoc3RhcnREaXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGtnSnNvblBhdGggPSBzaGltJDEuZmluZFVwKHN0YXJ0RGlyLCAoZGlyLCBuYW1lcykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChuYW1lcy5pbmNsdWRlcygncGFja2FnZS5qc29uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdwYWNrYWdlLmpzb24nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKHBrZ0pzb25QYXRoLCB1bmRlZmluZWQsIHNoaW0kMSk7XG4gICAgICAgICAgICBvYmogPSBKU09OLnBhcnNlKHNoaW0kMS5yZWFkRmlsZVN5bmMocGtnSnNvblBhdGgsICd1dGY4JykpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfbm9vcCkgeyB9XG4gICAgICAgIHBrZ3NbbnBhdGhdID0gb2JqIHx8IHt9O1xuICAgICAgICByZXR1cm4gcGtnc1tucGF0aF07XG4gICAgfVxuICAgIGxldCBwYXJzZUZuID0gbnVsbDtcbiAgICBsZXQgcGFyc2VDb250ZXh0ID0gbnVsbDtcbiAgICBzZWxmLnBhcnNlID0gZnVuY3Rpb24gcGFyc2UoYXJncywgc2hvcnRDaXJjdWl0LCBfcGFyc2VGbikge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nfGFycmF5XSBbZnVuY3Rpb258Ym9vbGVhbnxvYmplY3RdIFtmdW5jdGlvbl0nLCBbYXJncywgc2hvcnRDaXJjdWl0LCBfcGFyc2VGbl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBmcmVlemUoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgYXJndiA9IHNlbGYuX3BhcnNlQXJncyhwcm9jZXNzQXJncyk7XG4gICAgICAgICAgICBjb25zdCB0bXBQYXJzZWQgPSBzZWxmLnBhcnNlZDtcbiAgICAgICAgICAgIHVuZnJlZXplKCk7XG4gICAgICAgICAgICBzZWxmLnBhcnNlZCA9IHRtcFBhcnNlZDtcbiAgICAgICAgICAgIHJldHVybiBhcmd2O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygc2hvcnRDaXJjdWl0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcGFyc2VDb250ZXh0ID0gc2hvcnRDaXJjdWl0O1xuICAgICAgICAgICAgc2hvcnRDaXJjdWl0ID0gX3BhcnNlRm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBzaG9ydENpcmN1aXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlRm4gPSBzaG9ydENpcmN1aXQ7XG4gICAgICAgICAgICBzaG9ydENpcmN1aXQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNob3J0Q2lyY3VpdClcbiAgICAgICAgICAgIHByb2Nlc3NBcmdzID0gYXJncztcbiAgICAgICAgaWYgKHBhcnNlRm4pXG4gICAgICAgICAgICBleGl0UHJvY2VzcyA9IGZhbHNlO1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBzZWxmLl9wYXJzZUFyZ3MoYXJncywgISFzaG9ydENpcmN1aXQpO1xuICAgICAgICBjb21wbGV0aW9uJDEuc2V0UGFyc2VkKHNlbGYucGFyc2VkKTtcbiAgICAgICAgaWYgKHBhcnNlRm4pXG4gICAgICAgICAgICBwYXJzZUZuKGV4aXRFcnJvciwgcGFyc2VkLCBvdXRwdXQpO1xuICAgICAgICB1bmZyZWV6ZSgpO1xuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH07XG4gICAgc2VsZi5fZ2V0UGFyc2VDb250ZXh0ID0gKCkgPT4gcGFyc2VDb250ZXh0IHx8IHt9O1xuICAgIHNlbGYuX2hhc1BhcnNlQ2FsbGJhY2sgPSAoKSA9PiAhIXBhcnNlRm47XG4gICAgc2VsZi5vcHRpb24gPSBzZWxmLm9wdGlvbnMgPSBmdW5jdGlvbiBvcHRpb24oa2V5LCBvcHQpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xvYmplY3Q+IFtvYmplY3RdJywgW2tleSwgb3B0XSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoa2V5KS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGYub3B0aW9ucyhrLCBrZXlba10pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBvcHQgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wdGlvbnMua2V5W2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICBzZWxmLmFsaWFzKGtleSwgb3B0LmFsaWFzKTtcbiAgICAgICAgICAgIGNvbnN0IGRlcHJlY2F0ZSA9IG9wdC5kZXByZWNhdGUgfHwgb3B0LmRlcHJlY2F0ZWQ7XG4gICAgICAgICAgICBpZiAoZGVwcmVjYXRlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5kZXByZWNhdGVPcHRpb24oa2V5LCBkZXByZWNhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGVtYW5kID0gb3B0LmRlbWFuZCB8fCBvcHQucmVxdWlyZWQgfHwgb3B0LnJlcXVpcmU7XG4gICAgICAgICAgICBpZiAoZGVtYW5kKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5kZW1hbmQoa2V5LCBkZW1hbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5kZW1hbmRPcHRpb24pIHtcbiAgICAgICAgICAgICAgICBzZWxmLmRlbWFuZE9wdGlvbihrZXksIHR5cGVvZiBvcHQuZGVtYW5kT3B0aW9uID09PSAnc3RyaW5nJyA/IG9wdC5kZW1hbmRPcHRpb24gOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5jb25mbGljdHMpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZsaWN0cyhrZXksIG9wdC5jb25mbGljdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCdkZWZhdWx0JyBpbiBvcHQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmRlZmF1bHQoa2V5LCBvcHQuZGVmYXVsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmltcGxpZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlbGYuaW1wbGllcyhrZXksIG9wdC5pbXBsaWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQubmFyZ3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlbGYubmFyZ3Moa2V5LCBvcHQubmFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5jb25maWcpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZyhrZXksIG9wdC5jb25maWdQYXJzZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5ub3JtYWxpemUpIHtcbiAgICAgICAgICAgICAgICBzZWxmLm5vcm1hbGl6ZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5jaG9pY2VzKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jaG9pY2VzKGtleSwgb3B0LmNob2ljZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5jb2VyY2UpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvZXJjZShrZXksIG9wdC5jb2VyY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5ncm91cCkge1xuICAgICAgICAgICAgICAgIHNlbGYuZ3JvdXAoa2V5LCBvcHQuZ3JvdXApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5ib29sZWFuIHx8IG9wdC50eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmJvb2xlYW4oa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAob3B0LmFsaWFzKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmJvb2xlYW4ob3B0LmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuYXJyYXkgfHwgb3B0LnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmFycmF5KGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5hcnJheShvcHQuYWxpYXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5udW1iZXIgfHwgb3B0LnR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5udW1iZXIoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAob3B0LmFsaWFzKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLm51bWJlcihvcHQuYWxpYXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5zdHJpbmcgfHwgb3B0LnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5zdHJpbmcoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAob3B0LmFsaWFzKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLnN0cmluZyhvcHQuYWxpYXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5jb3VudCB8fCBvcHQudHlwZSA9PT0gJ2NvdW50Jykge1xuICAgICAgICAgICAgICAgIHNlbGYuY291bnQoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0Lmdsb2JhbCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5nbG9iYWwoa2V5LCBvcHQuZ2xvYmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuZGVmYXVsdERlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5kZWZhdWx0RGVzY3JpcHRpb25ba2V5XSA9IG9wdC5kZWZhdWx0RGVzY3JpcHRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LnNraXBWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5za2lwVmFsaWRhdGlvbihrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGVzYyA9IG9wdC5kZXNjcmliZSB8fCBvcHQuZGVzY3JpcHRpb24gfHwgb3B0LmRlc2M7XG4gICAgICAgICAgICBzZWxmLmRlc2NyaWJlKGtleSwgZGVzYyk7XG4gICAgICAgICAgICBpZiAob3B0LmhpZGRlbikge1xuICAgICAgICAgICAgICAgIHNlbGYuaGlkZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5yZXF1aXJlc0FyZykge1xuICAgICAgICAgICAgICAgIHNlbGYucmVxdWlyZXNBcmcoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2V0T3B0aW9ucyA9ICgpID0+IG9wdGlvbnM7XG4gICAgc2VsZi5wb3NpdGlvbmFsID0gZnVuY3Rpb24gKGtleSwgb3B0cykge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nPiA8b2JqZWN0PicsIFtrZXksIG9wdHNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKGNvbnRleHQucmVzZXRzID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgWUVycm9yKFwiLnBvc2l0aW9uYWwoKSBjYW4gb25seSBiZSBjYWxsZWQgaW4gYSBjb21tYW5kJ3MgYnVpbGRlciBmdW5jdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdXBwb3J0ZWRPcHRzID0gW1xuICAgICAgICAgICAgJ2RlZmF1bHQnLFxuICAgICAgICAgICAgJ2RlZmF1bHREZXNjcmlwdGlvbicsXG4gICAgICAgICAgICAnaW1wbGllcycsXG4gICAgICAgICAgICAnbm9ybWFsaXplJyxcbiAgICAgICAgICAgICdjaG9pY2VzJyxcbiAgICAgICAgICAgICdjb25mbGljdHMnLFxuICAgICAgICAgICAgJ2NvZXJjZScsXG4gICAgICAgICAgICAndHlwZScsXG4gICAgICAgICAgICAnZGVzY3JpYmUnLFxuICAgICAgICAgICAgJ2Rlc2MnLFxuICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgICAgICAgICdhbGlhcycsXG4gICAgICAgIF07XG4gICAgICAgIG9wdHMgPSBvYmpGaWx0ZXIob3B0cywgKGssIHYpID0+IHtcbiAgICAgICAgICAgIGxldCBhY2NlcHQgPSBzdXBwb3J0ZWRPcHRzLmluZGV4T2YoaykgIT09IC0xO1xuICAgICAgICAgICAgaWYgKGsgPT09ICd0eXBlJyAmJiBbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbiddLmluZGV4T2YodikgPT09IC0xKVxuICAgICAgICAgICAgICAgIGFjY2VwdCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIGFjY2VwdDtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGZ1bGxDb21tYW5kID0gY29udGV4dC5mdWxsQ29tbWFuZHNbY29udGV4dC5mdWxsQ29tbWFuZHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGNvbnN0IHBhcnNlT3B0aW9ucyA9IGZ1bGxDb21tYW5kXG4gICAgICAgICAgICA/IGNvbW1hbmQkMS5jbWRUb1BhcnNlT3B0aW9ucyhmdWxsQ29tbWFuZClcbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIGFycmF5OiBbXSxcbiAgICAgICAgICAgICAgICBhbGlhczoge30sXG4gICAgICAgICAgICAgICAgZGVmYXVsdDoge30sXG4gICAgICAgICAgICAgICAgZGVtYW5kOiB7fSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIG9iamVjdEtleXMocGFyc2VPcHRpb25zKS5mb3JFYWNoKHBrID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlT3B0aW9uID0gcGFyc2VPcHRpb25zW3BrXTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcnNlT3B0aW9uKSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZU9wdGlvbi5pbmRleE9mKGtleSkgIT09IC0xKVxuICAgICAgICAgICAgICAgICAgICBvcHRzW3BrXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VPcHRpb25ba2V5XSAmJiAhKHBrIGluIG9wdHMpKVxuICAgICAgICAgICAgICAgICAgICBvcHRzW3BrXSA9IHBhcnNlT3B0aW9uW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzZWxmLmdyb3VwKGtleSwgdXNhZ2UkMS5nZXRQb3NpdGlvbmFsR3JvdXBOYW1lKCkpO1xuICAgICAgICByZXR1cm4gc2VsZi5vcHRpb24oa2V5LCBvcHRzKTtcbiAgICB9O1xuICAgIHNlbGYuZ3JvdXAgPSBmdW5jdGlvbiBncm91cChvcHRzLCBncm91cE5hbWUpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xhcnJheT4gPHN0cmluZz4nLCBbb3B0cywgZ3JvdXBOYW1lXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gcHJlc2VydmVkR3JvdXBzW2dyb3VwTmFtZV0gfHwgZ3JvdXBzW2dyb3VwTmFtZV07XG4gICAgICAgIGlmIChwcmVzZXJ2ZWRHcm91cHNbZ3JvdXBOYW1lXSkge1xuICAgICAgICAgICAgZGVsZXRlIHByZXNlcnZlZEdyb3Vwc1tncm91cE5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlZW4gPSB7fTtcbiAgICAgICAgZ3JvdXBzW2dyb3VwTmFtZV0gPSAoZXhpc3RpbmcgfHwgW10pLmNvbmNhdChvcHRzKS5maWx0ZXIoa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChzZWVuW2tleV0pXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIChzZWVuW2tleV0gPSB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRHcm91cHMgPSAoKSA9PiBPYmplY3QuYXNzaWduKHt9LCBncm91cHMsIHByZXNlcnZlZEdyb3Vwcyk7XG4gICAgc2VsZi5lbnYgPSBmdW5jdGlvbiAocHJlZml4KSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tzdHJpbmd8Ym9vbGVhbl0nLCBbcHJlZml4XSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChwcmVmaXggPT09IGZhbHNlKVxuICAgICAgICAgICAgZGVsZXRlIG9wdGlvbnMuZW52UHJlZml4O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBvcHRpb25zLmVudlByZWZpeCA9IHByZWZpeCB8fCAnJztcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLndyYXAgPSBmdW5jdGlvbiAoY29scykge1xuICAgICAgICBhcmdzZXJ0KCc8bnVtYmVyfG51bGx8dW5kZWZpbmVkPicsIFtjb2xzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHVzYWdlJDEud3JhcChjb2xzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBsZXQgc3RyaWN0ID0gZmFsc2U7XG4gICAgc2VsZi5zdHJpY3QgPSBmdW5jdGlvbiAoZW5hYmxlZCkge1xuICAgICAgICBhcmdzZXJ0KCdbYm9vbGVhbl0nLCBbZW5hYmxlZF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBzdHJpY3QgPSBlbmFibGVkICE9PSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldFN0cmljdCA9ICgpID0+IHN0cmljdDtcbiAgICBsZXQgc3RyaWN0Q29tbWFuZHMgPSBmYWxzZTtcbiAgICBzZWxmLnN0cmljdENvbW1hbmRzID0gZnVuY3Rpb24gKGVuYWJsZWQpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW2VuYWJsZWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgc3RyaWN0Q29tbWFuZHMgPSBlbmFibGVkICE9PSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldFN0cmljdENvbW1hbmRzID0gKCkgPT4gc3RyaWN0Q29tbWFuZHM7XG4gICAgbGV0IHN0cmljdE9wdGlvbnMgPSBmYWxzZTtcbiAgICBzZWxmLnN0cmljdE9wdGlvbnMgPSBmdW5jdGlvbiAoZW5hYmxlZCkge1xuICAgICAgICBhcmdzZXJ0KCdbYm9vbGVhbl0nLCBbZW5hYmxlZF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBzdHJpY3RPcHRpb25zID0gZW5hYmxlZCAhPT0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRTdHJpY3RPcHRpb25zID0gKCkgPT4gc3RyaWN0T3B0aW9ucztcbiAgICBsZXQgcGFyc2VyQ29uZmlnID0ge307XG4gICAgc2VsZi5wYXJzZXJDb25maWd1cmF0aW9uID0gZnVuY3Rpb24gcGFyc2VyQ29uZmlndXJhdGlvbihjb25maWcpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdD4nLCBbY29uZmlnXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHBhcnNlckNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldFBhcnNlckNvbmZpZ3VyYXRpb24gPSAoKSA9PiBwYXJzZXJDb25maWc7XG4gICAgc2VsZi5zaG93SGVscCA9IGZ1bmN0aW9uIChsZXZlbCkge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nfGZ1bmN0aW9uXScsIFtsZXZlbF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoIXNlbGYucGFyc2VkKVxuICAgICAgICAgICAgc2VsZi5fcGFyc2VBcmdzKHByb2Nlc3NBcmdzKTtcbiAgICAgICAgaWYgKGNvbW1hbmQkMS5oYXNEZWZhdWx0Q29tbWFuZCgpKSB7XG4gICAgICAgICAgICBjb250ZXh0LnJlc2V0cysrO1xuICAgICAgICAgICAgY29tbWFuZCQxLnJ1bkRlZmF1bHRCdWlsZGVyT24oc2VsZik7XG4gICAgICAgIH1cbiAgICAgICAgdXNhZ2UkMS5zaG93SGVscChsZXZlbCk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgbGV0IHZlcnNpb25PcHQgPSBudWxsO1xuICAgIHNlbGYudmVyc2lvbiA9IGZ1bmN0aW9uIHZlcnNpb24ob3B0LCBtc2csIHZlcikge1xuICAgICAgICBjb25zdCBkZWZhdWx0VmVyc2lvbk9wdCA9ICd2ZXJzaW9uJztcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW58c3RyaW5nXSBbc3RyaW5nXSBbc3RyaW5nXScsIFtvcHQsIG1zZywgdmVyXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmICh2ZXJzaW9uT3B0KSB7XG4gICAgICAgICAgICBkZWxldGVGcm9tUGFyc2VySGludE9iamVjdCh2ZXJzaW9uT3B0KTtcbiAgICAgICAgICAgIHVzYWdlJDEudmVyc2lvbih1bmRlZmluZWQpO1xuICAgICAgICAgICAgdmVyc2lvbk9wdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHZlciA9IGd1ZXNzVmVyc2lvbigpO1xuICAgICAgICAgICAgb3B0ID0gZGVmYXVsdFZlcnNpb25PcHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKG9wdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZlciA9IG9wdDtcbiAgICAgICAgICAgIG9wdCA9IGRlZmF1bHRWZXJzaW9uT3B0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIHZlciA9IG1zZztcbiAgICAgICAgICAgIG1zZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB2ZXJzaW9uT3B0ID0gdHlwZW9mIG9wdCA9PT0gJ3N0cmluZycgPyBvcHQgOiBkZWZhdWx0VmVyc2lvbk9wdDtcbiAgICAgICAgbXNnID0gbXNnIHx8IHVzYWdlJDEuZGVmZXJZMThuTG9va3VwKCdTaG93IHZlcnNpb24gbnVtYmVyJyk7XG4gICAgICAgIHVzYWdlJDEudmVyc2lvbih2ZXIgfHwgdW5kZWZpbmVkKTtcbiAgICAgICAgc2VsZi5ib29sZWFuKHZlcnNpb25PcHQpO1xuICAgICAgICBzZWxmLmRlc2NyaWJlKHZlcnNpb25PcHQsIG1zZyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgZnVuY3Rpb24gZ3Vlc3NWZXJzaW9uKCkge1xuICAgICAgICBjb25zdCBvYmogPSBwa2dVcCgpO1xuICAgICAgICByZXR1cm4gb2JqLnZlcnNpb24gfHwgJ3Vua25vd24nO1xuICAgIH1cbiAgICBsZXQgaGVscE9wdCA9IG51bGw7XG4gICAgc2VsZi5hZGRIZWxwT3B0ID0gc2VsZi5oZWxwID0gZnVuY3Rpb24gYWRkSGVscE9wdChvcHQsIG1zZykge1xuICAgICAgICBjb25zdCBkZWZhdWx0SGVscE9wdCA9ICdoZWxwJztcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xib29sZWFuXSBbc3RyaW5nXScsIFtvcHQsIG1zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoaGVscE9wdCkge1xuICAgICAgICAgICAgZGVsZXRlRnJvbVBhcnNlckhpbnRPYmplY3QoaGVscE9wdCk7XG4gICAgICAgICAgICBoZWxwT3B0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKG9wdCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICAgIH1cbiAgICAgICAgaGVscE9wdCA9IHR5cGVvZiBvcHQgPT09ICdzdHJpbmcnID8gb3B0IDogZGVmYXVsdEhlbHBPcHQ7XG4gICAgICAgIHNlbGYuYm9vbGVhbihoZWxwT3B0KTtcbiAgICAgICAgc2VsZi5kZXNjcmliZShoZWxwT3B0LCBtc2cgfHwgdXNhZ2UkMS5kZWZlclkxOG5Mb29rdXAoJ1Nob3cgaGVscCcpKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBjb25zdCBkZWZhdWx0U2hvd0hpZGRlbk9wdCA9ICdzaG93LWhpZGRlbic7XG4gICAgb3B0aW9ucy5zaG93SGlkZGVuT3B0ID0gZGVmYXVsdFNob3dIaWRkZW5PcHQ7XG4gICAgc2VsZi5hZGRTaG93SGlkZGVuT3B0ID0gc2VsZi5zaG93SGlkZGVuID0gZnVuY3Rpb24gYWRkU2hvd0hpZGRlbk9wdChvcHQsIG1zZykge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nfGJvb2xlYW5dIFtzdHJpbmddJywgW29wdCwgbXNnXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBpZiAob3B0ID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaG93SGlkZGVuT3B0ID0gdHlwZW9mIG9wdCA9PT0gJ3N0cmluZycgPyBvcHQgOiBkZWZhdWx0U2hvd0hpZGRlbk9wdDtcbiAgICAgICAgc2VsZi5ib29sZWFuKHNob3dIaWRkZW5PcHQpO1xuICAgICAgICBzZWxmLmRlc2NyaWJlKHNob3dIaWRkZW5PcHQsIG1zZyB8fCB1c2FnZSQxLmRlZmVyWTE4bkxvb2t1cCgnU2hvdyBoaWRkZW4gb3B0aW9ucycpKTtcbiAgICAgICAgb3B0aW9ucy5zaG93SGlkZGVuT3B0ID0gc2hvd0hpZGRlbk9wdDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmhpZGUgPSBmdW5jdGlvbiBoaWRlKGtleSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nPicsIFtrZXldLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgb3B0aW9ucy5oaWRkZW5PcHRpb25zLnB1c2goa2V5KTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnNob3dIZWxwT25GYWlsID0gZnVuY3Rpb24gc2hvd0hlbHBPbkZhaWwoZW5hYmxlZCwgbWVzc2FnZSkge1xuICAgICAgICBhcmdzZXJ0KCdbYm9vbGVhbnxzdHJpbmddIFtzdHJpbmddJywgW2VuYWJsZWQsIG1lc3NhZ2VdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdXNhZ2UkMS5zaG93SGVscE9uRmFpbChlbmFibGVkLCBtZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBsZXQgZXhpdFByb2Nlc3MgPSB0cnVlO1xuICAgIHNlbGYuZXhpdFByb2Nlc3MgPSBmdW5jdGlvbiAoZW5hYmxlZCA9IHRydWUpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW2VuYWJsZWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgZXhpdFByb2Nlc3MgPSBlbmFibGVkO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2V0RXhpdFByb2Nlc3MgPSAoKSA9PiBleGl0UHJvY2VzcztcbiAgICBzZWxmLnNob3dDb21wbGV0aW9uU2NyaXB0ID0gZnVuY3Rpb24gKCQwLCBjbWQpIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ10gW3N0cmluZ10nLCBbJDAsIGNtZF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICAkMCA9ICQwIHx8IHNlbGYuJDA7XG4gICAgICAgIF9sb2dnZXIubG9nKGNvbXBsZXRpb24kMS5nZW5lcmF0ZUNvbXBsZXRpb25TY3JpcHQoJDAsIGNtZCB8fCBjb21wbGV0aW9uQ29tbWFuZCB8fCAnY29tcGxldGlvbicpKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldENvbXBsZXRpb24gPSBmdW5jdGlvbiAoYXJncywgZG9uZSkge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXk+IDxmdW5jdGlvbj4nLCBbYXJncywgZG9uZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBjb21wbGV0aW9uJDEuZ2V0Q29tcGxldGlvbihhcmdzLCBkb25lKTtcbiAgICB9O1xuICAgIHNlbGYubG9jYWxlID0gZnVuY3Rpb24gKGxvY2FsZSkge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nXScsIFtsb2NhbGVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKCFsb2NhbGUpIHtcbiAgICAgICAgICAgIGd1ZXNzTG9jYWxlKCk7XG4gICAgICAgICAgICByZXR1cm4geTE4bi5nZXRMb2NhbGUoKTtcbiAgICAgICAgfVxuICAgICAgICBkZXRlY3RMb2NhbGUgPSBmYWxzZTtcbiAgICAgICAgeTE4bi5zZXRMb2NhbGUobG9jYWxlKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnVwZGF0ZVN0cmluZ3MgPSBzZWxmLnVwZGF0ZUxvY2FsZSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdD4nLCBbb2JqXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGRldGVjdExvY2FsZSA9IGZhbHNlO1xuICAgICAgICB5MThuLnVwZGF0ZUxvY2FsZShvYmopO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGxldCBkZXRlY3RMb2NhbGUgPSB0cnVlO1xuICAgIHNlbGYuZGV0ZWN0TG9jYWxlID0gZnVuY3Rpb24gKGRldGVjdCkge1xuICAgICAgICBhcmdzZXJ0KCc8Ym9vbGVhbj4nLCBbZGV0ZWN0XSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGRldGVjdExvY2FsZSA9IGRldGVjdDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldERldGVjdExvY2FsZSA9ICgpID0+IGRldGVjdExvY2FsZTtcbiAgICBjb25zdCBfbG9nZ2VyID0ge1xuICAgICAgICBsb2coLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKCFzZWxmLl9oYXNQYXJzZUNhbGxiYWNrKCkpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coLi4uYXJncyk7XG4gICAgICAgICAgICBoYXNPdXRwdXQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKG91dHB1dC5sZW5ndGgpXG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9ICdcXG4nO1xuICAgICAgICAgICAgb3V0cHV0ICs9IGFyZ3Muam9pbignICcpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvciguLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAoIXNlbGYuX2hhc1BhcnNlQ2FsbGJhY2soKSlcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKC4uLmFyZ3MpO1xuICAgICAgICAgICAgaGFzT3V0cHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChvdXRwdXQubGVuZ3RoKVxuICAgICAgICAgICAgICAgIG91dHB1dCArPSAnXFxuJztcbiAgICAgICAgICAgIG91dHB1dCArPSBhcmdzLmpvaW4oJyAnKTtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIHNlbGYuX2dldExvZ2dlckluc3RhbmNlID0gKCkgPT4gX2xvZ2dlcjtcbiAgICBzZWxmLl9oYXNPdXRwdXQgPSAoKSA9PiBoYXNPdXRwdXQ7XG4gICAgc2VsZi5fc2V0SGFzT3V0cHV0ID0gKCkgPT4ge1xuICAgICAgICBoYXNPdXRwdXQgPSB0cnVlO1xuICAgIH07XG4gICAgbGV0IHJlY29tbWVuZENvbW1hbmRzO1xuICAgIHNlbGYucmVjb21tZW5kQ29tbWFuZHMgPSBmdW5jdGlvbiAocmVjb21tZW5kID0gdHJ1ZSkge1xuICAgICAgICBhcmdzZXJ0KCdbYm9vbGVhbl0nLCBbcmVjb21tZW5kXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHJlY29tbWVuZENvbW1hbmRzID0gcmVjb21tZW5kO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2V0VXNhZ2VJbnN0YW5jZSA9ICgpID0+IHVzYWdlJDE7XG4gICAgc2VsZi5nZXRWYWxpZGF0aW9uSW5zdGFuY2UgPSAoKSA9PiB2YWxpZGF0aW9uJDE7XG4gICAgc2VsZi5nZXRDb21tYW5kSW5zdGFuY2UgPSAoKSA9PiBjb21tYW5kJDE7XG4gICAgc2VsZi50ZXJtaW5hbFdpZHRoID0gKCkgPT4ge1xuICAgICAgICBhcmdzZXJ0KFtdLCAwKTtcbiAgICAgICAgcmV0dXJuIHNoaW0kMS5wcm9jZXNzLnN0ZENvbHVtbnM7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgJ2FyZ3YnLCB7XG4gICAgICAgIGdldDogKCkgPT4gc2VsZi5fcGFyc2VBcmdzKHByb2Nlc3NBcmdzKSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBzZWxmLl9wYXJzZUFyZ3MgPSBmdW5jdGlvbiBwYXJzZUFyZ3MoYXJncywgc2hvcnRDaXJjdWl0LCBfY2FsbGVkRnJvbUNvbW1hbmQsIGNvbW1hbmRJbmRleCkge1xuICAgICAgICBsZXQgc2tpcFZhbGlkYXRpb24gPSAhIV9jYWxsZWRGcm9tQ29tbWFuZDtcbiAgICAgICAgYXJncyA9IGFyZ3MgfHwgcHJvY2Vzc0FyZ3M7XG4gICAgICAgIG9wdGlvbnMuX18gPSB5MThuLl9fO1xuICAgICAgICBvcHRpb25zLmNvbmZpZ3VyYXRpb24gPSBzZWxmLmdldFBhcnNlckNvbmZpZ3VyYXRpb24oKTtcbiAgICAgICAgY29uc3QgcG9wdWxhdGVEb3VibGVEYXNoID0gISFvcHRpb25zLmNvbmZpZ3VyYXRpb25bJ3BvcHVsYXRlLS0nXTtcbiAgICAgICAgY29uc3QgY29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25maWd1cmF0aW9uLCB7XG4gICAgICAgICAgICAncG9wdWxhdGUtLSc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBzaGltJDEuUGFyc2VyLmRldGFpbGVkKGFyZ3MsIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IE9iamVjdC5hc3NpZ24oeyAncGFyc2UtcG9zaXRpb25hbC1udW1iZXJzJzogZmFsc2UgfSwgY29uZmlnKSxcbiAgICAgICAgfSkpO1xuICAgICAgICBsZXQgYXJndiA9IHBhcnNlZC5hcmd2O1xuICAgICAgICBpZiAocGFyc2VDb250ZXh0KVxuICAgICAgICAgICAgYXJndiA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3YsIHBhcnNlQ29udGV4dCk7XG4gICAgICAgIGNvbnN0IGFsaWFzZXMgPSBwYXJzZWQuYWxpYXNlcztcbiAgICAgICAgYXJndi4kMCA9IHNlbGYuJDA7XG4gICAgICAgIHNlbGYucGFyc2VkID0gcGFyc2VkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZ3Vlc3NMb2NhbGUoKTtcbiAgICAgICAgICAgIGlmIChzaG9ydENpcmN1aXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9zdFByb2Nlc3MoYXJndiwgcG9wdWxhdGVEb3VibGVEYXNoLCBfY2FsbGVkRnJvbUNvbW1hbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhlbHBPcHQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWxwQ21kcyA9IFtoZWxwT3B0XVxuICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGFsaWFzZXNbaGVscE9wdF0gfHwgW10pXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoayA9PiBrLmxlbmd0aCA+IDEpO1xuICAgICAgICAgICAgICAgIGlmICh+aGVscENtZHMuaW5kZXhPZignJyArIGFyZ3YuX1thcmd2Ll8ubGVuZ3RoIC0gMV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3YuXy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgYXJndltoZWxwT3B0XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaGFuZGxlcktleXMgPSBjb21tYW5kJDEuZ2V0Q29tbWFuZHMoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RDb21wbGV0aW9ucyA9IGNvbXBsZXRpb24kMS5jb21wbGV0aW9uS2V5IGluIGFyZ3Y7XG4gICAgICAgICAgICBjb25zdCBza2lwUmVjb21tZW5kYXRpb24gPSBhcmd2W2hlbHBPcHRdIHx8IHJlcXVlc3RDb21wbGV0aW9ucztcbiAgICAgICAgICAgIGNvbnN0IHNraXBEZWZhdWx0Q29tbWFuZCA9IHNraXBSZWNvbW1lbmRhdGlvbiAmJlxuICAgICAgICAgICAgICAgIChoYW5kbGVyS2V5cy5sZW5ndGggPiAxIHx8IGhhbmRsZXJLZXlzWzBdICE9PSAnJDAnKTtcbiAgICAgICAgICAgIGlmIChhcmd2Ll8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZXJLZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmlyc3RVbmtub3duQ29tbWFuZDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGNvbW1hbmRJbmRleCB8fCAwLCBjbWQ7IGFyZ3YuX1tpXSAhPT0gdW5kZWZpbmVkOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9IFN0cmluZyhhcmd2Ll9baV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH5oYW5kbGVyS2V5cy5pbmRleE9mKGNtZCkgJiYgY21kICE9PSBjb21wbGV0aW9uQ29tbWFuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlubmVyQXJndiA9IGNvbW1hbmQkMS5ydW5Db21tYW5kKGNtZCwgc2VsZiwgcGFyc2VkLCBpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Bvc3RQcm9jZXNzKGlubmVyQXJndiwgcG9wdWxhdGVEb3VibGVEYXNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFmaXJzdFVua25vd25Db21tYW5kICYmIGNtZCAhPT0gY29tcGxldGlvbkNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFVua25vd25Db21tYW5kID0gY21kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21tYW5kJDEuaGFzRGVmYXVsdENvbW1hbmQoKSAmJiAhc2tpcERlZmF1bHRDb21tYW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbm5lckFyZ3YgPSBjb21tYW5kJDEucnVuQ29tbWFuZChudWxsLCBzZWxmLCBwYXJzZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Bvc3RQcm9jZXNzKGlubmVyQXJndiwgcG9wdWxhdGVEb3VibGVEYXNoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocmVjb21tZW5kQ29tbWFuZHMgJiYgZmlyc3RVbmtub3duQ29tbWFuZCAmJiAhc2tpcFJlY29tbWVuZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uJDEucmVjb21tZW5kQ29tbWFuZHMoZmlyc3RVbmtub3duQ29tbWFuZCwgaGFuZGxlcktleXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0aW9uQ29tbWFuZCAmJlxuICAgICAgICAgICAgICAgICAgICB+YXJndi5fLmluZGV4T2YoY29tcGxldGlvbkNvbW1hbmQpICYmXG4gICAgICAgICAgICAgICAgICAgICFyZXF1ZXN0Q29tcGxldGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXRQcm9jZXNzKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmxvY2tpbmcodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2hvd0NvbXBsZXRpb25TY3JpcHQoKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5leGl0KDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbW1hbmQkMS5oYXNEZWZhdWx0Q29tbWFuZCgpICYmICFza2lwRGVmYXVsdENvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbm5lckFyZ3YgPSBjb21tYW5kJDEucnVuQ29tbWFuZChudWxsLCBzZWxmLCBwYXJzZWQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wb3N0UHJvY2Vzcyhpbm5lckFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVxdWVzdENvbXBsZXRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4aXRQcm9jZXNzKVxuICAgICAgICAgICAgICAgICAgICBzZXRCbG9ja2luZyh0cnVlKTtcbiAgICAgICAgICAgICAgICBhcmdzID0gW10uY29uY2F0KGFyZ3MpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXRpb25BcmdzID0gYXJncy5zbGljZShhcmdzLmluZGV4T2YoYC0tJHtjb21wbGV0aW9uJDEuY29tcGxldGlvbktleX1gKSArIDEpO1xuICAgICAgICAgICAgICAgIGNvbXBsZXRpb24kMS5nZXRDb21wbGV0aW9uKGNvbXBsZXRpb25BcmdzLCBjb21wbGV0aW9ucyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIChjb21wbGV0aW9ucyB8fCBbXSkuZm9yRWFjaChjb21wbGV0aW9uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKGNvbXBsZXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5leGl0KDApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wb3N0UHJvY2Vzcyhhcmd2LCAhcG9wdWxhdGVEb3VibGVEYXNoLCBfY2FsbGVkRnJvbUNvbW1hbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFoYXNPdXRwdXQpIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhhcmd2KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IGhlbHBPcHQgJiYgYXJndltrZXldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhpdFByb2Nlc3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmxvY2tpbmcodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwVmFsaWRhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNob3dIZWxwKCdsb2cnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhpdCgwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChrZXkgPT09IHZlcnNpb25PcHQgJiYgYXJndltrZXldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhpdFByb2Nlc3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmxvY2tpbmcodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwVmFsaWRhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2FnZSQxLnNob3dWZXJzaW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV4aXQoMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2tpcFZhbGlkYXRpb24gJiYgb3B0aW9ucy5za2lwVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24gPSBPYmplY3Qua2V5cyhhcmd2KS5zb21lKGtleSA9PiBvcHRpb25zLnNraXBWYWxpZGF0aW9uLmluZGV4T2Yoa2V5KSA+PSAwICYmIGFyZ3Zba2V5XSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXNraXBWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZC5lcnJvcilcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihwYXJzZWQuZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXF1ZXN0Q29tcGxldGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fcnVuVmFsaWRhdGlvbihhcmd2LCBhbGlhc2VzLCB7fSwgcGFyc2VkLmVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFlFcnJvcilcbiAgICAgICAgICAgICAgICB1c2FnZSQxLmZhaWwoZXJyLm1lc3NhZ2UsIGVycik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmLl9wb3N0UHJvY2Vzcyhhcmd2LCBwb3B1bGF0ZURvdWJsZURhc2gsIF9jYWxsZWRGcm9tQ29tbWFuZCk7XG4gICAgfTtcbiAgICBzZWxmLl9wb3N0UHJvY2VzcyA9IGZ1bmN0aW9uIChhcmd2LCBwb3B1bGF0ZURvdWJsZURhc2gsIGNhbGxlZEZyb21Db21tYW5kID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGlzUHJvbWlzZShhcmd2KSlcbiAgICAgICAgICAgIHJldHVybiBhcmd2O1xuICAgICAgICBpZiAoY2FsbGVkRnJvbUNvbW1hbmQpXG4gICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgaWYgKCFwb3B1bGF0ZURvdWJsZURhc2gpIHtcbiAgICAgICAgICAgIGFyZ3YgPSBzZWxmLl9jb3B5RG91YmxlRGFzaChhcmd2KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJzZVBvc2l0aW9uYWxOdW1iZXJzID0gc2VsZi5nZXRQYXJzZXJDb25maWd1cmF0aW9uKClbJ3BhcnNlLXBvc2l0aW9uYWwtbnVtYmVycyddIHx8XG4gICAgICAgICAgICBzZWxmLmdldFBhcnNlckNvbmZpZ3VyYXRpb24oKVsncGFyc2UtcG9zaXRpb25hbC1udW1iZXJzJ10gPT09IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHBhcnNlUG9zaXRpb25hbE51bWJlcnMpIHtcbiAgICAgICAgICAgIGFyZ3YgPSBzZWxmLl9wYXJzZVBvc2l0aW9uYWxOdW1iZXJzKGFyZ3YpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcmd2O1xuICAgIH07XG4gICAgc2VsZi5fY29weURvdWJsZURhc2ggPSBmdW5jdGlvbiAoYXJndikge1xuICAgICAgICBpZiAoIWFyZ3YuXyB8fCAhYXJndlsnLS0nXSlcbiAgICAgICAgICAgIHJldHVybiBhcmd2O1xuICAgICAgICBhcmd2Ll8ucHVzaC5hcHBseShhcmd2Ll8sIGFyZ3ZbJy0tJ10pO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGVsZXRlIGFyZ3ZbJy0tJ107XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9lcnIpIHsgfVxuICAgICAgICByZXR1cm4gYXJndjtcbiAgICB9O1xuICAgIHNlbGYuX3BhcnNlUG9zaXRpb25hbE51bWJlcnMgPSBmdW5jdGlvbiAoYXJndikge1xuICAgICAgICBjb25zdCBhcmdzID0gYXJndlsnLS0nXSA/IGFyZ3ZbJy0tJ10gOiBhcmd2Ll87XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBhcmc7IChhcmcgPSBhcmdzW2ldKSAhPT0gdW5kZWZpbmVkOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChzaGltJDEuUGFyc2VyLmxvb2tzTGlrZU51bWJlcihhcmcpICYmXG4gICAgICAgICAgICAgICAgTnVtYmVyLmlzU2FmZUludGVnZXIoTWF0aC5mbG9vcihwYXJzZUZsb2F0KGAke2FyZ31gKSkpKSB7XG4gICAgICAgICAgICAgICAgYXJnc1tpXSA9IE51bWJlcihhcmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcmd2O1xuICAgIH07XG4gICAgc2VsZi5fcnVuVmFsaWRhdGlvbiA9IGZ1bmN0aW9uIHJ1blZhbGlkYXRpb24oYXJndiwgYWxpYXNlcywgcG9zaXRpb25hbE1hcCwgcGFyc2VFcnJvcnMsIGlzRGVmYXVsdENvbW1hbmQgPSBmYWxzZSkge1xuICAgICAgICBpZiAocGFyc2VFcnJvcnMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgWUVycm9yKHBhcnNlRXJyb3JzLm1lc3NhZ2UpO1xuICAgICAgICB2YWxpZGF0aW9uJDEubm9uT3B0aW9uQ291bnQoYXJndik7XG4gICAgICAgIHZhbGlkYXRpb24kMS5yZXF1aXJlZEFyZ3VtZW50cyhhcmd2KTtcbiAgICAgICAgbGV0IGZhaWxlZFN0cmljdENvbW1hbmRzID0gZmFsc2U7XG4gICAgICAgIGlmIChzdHJpY3RDb21tYW5kcykge1xuICAgICAgICAgICAgZmFpbGVkU3RyaWN0Q29tbWFuZHMgPSB2YWxpZGF0aW9uJDEudW5rbm93bkNvbW1hbmRzKGFyZ3YpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJpY3QgJiYgIWZhaWxlZFN0cmljdENvbW1hbmRzKSB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uJDEudW5rbm93bkFyZ3VtZW50cyhhcmd2LCBhbGlhc2VzLCBwb3NpdGlvbmFsTWFwLCBpc0RlZmF1bHRDb21tYW5kKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdHJpY3RPcHRpb25zKSB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uJDEudW5rbm93bkFyZ3VtZW50cyhhcmd2LCBhbGlhc2VzLCB7fSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICB2YWxpZGF0aW9uJDEuY3VzdG9tQ2hlY2tzKGFyZ3YsIGFsaWFzZXMpO1xuICAgICAgICB2YWxpZGF0aW9uJDEubGltaXRlZENob2ljZXMoYXJndik7XG4gICAgICAgIHZhbGlkYXRpb24kMS5pbXBsaWNhdGlvbnMoYXJndik7XG4gICAgICAgIHZhbGlkYXRpb24kMS5jb25mbGljdGluZyhhcmd2KTtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGd1ZXNzTG9jYWxlKCkge1xuICAgICAgICBpZiAoIWRldGVjdExvY2FsZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbG9jYWxlID0gc2hpbSQxLmdldEVudignTENfQUxMJykgfHxcbiAgICAgICAgICAgIHNoaW0kMS5nZXRFbnYoJ0xDX01FU1NBR0VTJykgfHxcbiAgICAgICAgICAgIHNoaW0kMS5nZXRFbnYoJ0xBTkcnKSB8fFxuICAgICAgICAgICAgc2hpbSQxLmdldEVudignTEFOR1VBR0UnKSB8fFxuICAgICAgICAgICAgJ2VuX1VTJztcbiAgICAgICAgc2VsZi5sb2NhbGUobG9jYWxlLnJlcGxhY2UoL1suOl0uKi8sICcnKSk7XG4gICAgfVxuICAgIHNlbGYuaGVscCgpO1xuICAgIHNlbGYudmVyc2lvbigpO1xuICAgIHJldHVybiBzZWxmO1xufVxuY29uc3QgcmViYXNlID0gKGJhc2UsIGRpcikgPT4gc2hpbSQxLnBhdGgucmVsYXRpdmUoYmFzZSwgZGlyKTtcbmZ1bmN0aW9uIGlzWWFyZ3NJbnN0YW5jZSh5KSB7XG4gICAgcmV0dXJuICEheSAmJiB0eXBlb2YgeS5fcGFyc2VBcmdzID09PSAnZnVuY3Rpb24nO1xufVxuXG52YXIgX2EsIF9iO1xuY29uc3QgeyByZWFkRmlsZVN5bmMgfSA9IHJlcXVpcmUoJ2ZzJyk7XG5jb25zdCB7IGluc3BlY3QgfSA9IHJlcXVpcmUoJ3V0aWwnKTtcbmNvbnN0IHsgcmVzb2x2ZSB9ID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3QgeTE4biA9IHJlcXVpcmUoJ3kxOG4nKTtcbmNvbnN0IFBhcnNlciA9IHJlcXVpcmUoJ3lhcmdzLXBhcnNlcicpO1xudmFyIGNqc1BsYXRmb3JtU2hpbSA9IHtcbiAgICBhc3NlcnQ6IHtcbiAgICAgICAgbm90U3RyaWN0RXF1YWw6IGFzc2VydC5ub3RTdHJpY3RFcXVhbCxcbiAgICAgICAgc3RyaWN0RXF1YWw6IGFzc2VydC5zdHJpY3RFcXVhbCxcbiAgICB9LFxuICAgIGNsaXVpOiByZXF1aXJlKCdjbGl1aScpLFxuICAgIGZpbmRVcDogcmVxdWlyZSgnZXNjYWxhZGUvc3luYycpLFxuICAgIGdldEVudjogKGtleSkgPT4ge1xuICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnZba2V5XTtcbiAgICB9LFxuICAgIGdldENhbGxlckZpbGU6IHJlcXVpcmUoJ2dldC1jYWxsZXItZmlsZScpLFxuICAgIGdldFByb2Nlc3NBcmd2QmluOiBnZXRQcm9jZXNzQXJndkJpbixcbiAgICBpbnNwZWN0LFxuICAgIG1haW5GaWxlbmFtZTogKF9iID0gKF9hID0gcmVxdWlyZSA9PT0gbnVsbCB8fCByZXF1aXJlID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXF1aXJlLm1haW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5maWxlbmFtZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogcHJvY2Vzcy5jd2QoKSxcbiAgICBQYXJzZXIsXG4gICAgcGF0aDogcmVxdWlyZSgncGF0aCcpLFxuICAgIHByb2Nlc3M6IHtcbiAgICAgICAgYXJndjogKCkgPT4gcHJvY2Vzcy5hcmd2LFxuICAgICAgICBjd2Q6IHByb2Nlc3MuY3dkLFxuICAgICAgICBleGVjUGF0aDogKCkgPT4gcHJvY2Vzcy5leGVjUGF0aCxcbiAgICAgICAgZXhpdDogKGNvZGUpID0+IHtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdChjb2RlKTtcbiAgICAgICAgfSxcbiAgICAgICAgbmV4dFRpY2s6IHByb2Nlc3MubmV4dFRpY2ssXG4gICAgICAgIHN0ZENvbHVtbnM6IHR5cGVvZiBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgPyBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgfSxcbiAgICByZWFkRmlsZVN5bmMsXG4gICAgcmVxdWlyZTogcmVxdWlyZSxcbiAgICByZXF1aXJlRGlyZWN0b3J5OiByZXF1aXJlKCdyZXF1aXJlLWRpcmVjdG9yeScpLFxuICAgIHN0cmluZ1dpZHRoOiByZXF1aXJlKCdzdHJpbmctd2lkdGgnKSxcbiAgICB5MThuOiB5MThuKHtcbiAgICAgICAgZGlyZWN0b3J5OiByZXNvbHZlKF9fZGlybmFtZSwgJy4uL2xvY2FsZXMnKSxcbiAgICAgICAgdXBkYXRlRmlsZXM6IGZhbHNlLFxuICAgIH0pLFxufTtcblxuY29uc3QgbWluTm9kZVZlcnNpb24gPSBwcm9jZXNzICYmIHByb2Nlc3MuZW52ICYmIHByb2Nlc3MuZW52LllBUkdTX01JTl9OT0RFX1ZFUlNJT05cbiAgICA/IE51bWJlcihwcm9jZXNzLmVudi5ZQVJHU19NSU5fTk9ERV9WRVJTSU9OKVxuICAgIDogMTA7XG5pZiAocHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb24pIHtcbiAgICBjb25zdCBtYWpvciA9IE51bWJlcihwcm9jZXNzLnZlcnNpb24ubWF0Y2goL3YoW14uXSspLylbMV0pO1xuICAgIGlmIChtYWpvciA8IG1pbk5vZGVWZXJzaW9uKSB7XG4gICAgICAgIHRocm93IEVycm9yKGB5YXJncyBzdXBwb3J0cyBhIG1pbmltdW0gTm9kZS5qcyB2ZXJzaW9uIG9mICR7bWluTm9kZVZlcnNpb259LiBSZWFkIG91ciB2ZXJzaW9uIHN1cHBvcnQgcG9saWN5OiBodHRwczovL2dpdGh1Yi5jb20veWFyZ3MveWFyZ3Mjc3VwcG9ydGVkLW5vZGVqcy12ZXJzaW9uc2ApO1xuICAgIH1cbn1cbmNvbnN0IFBhcnNlciQxID0gcmVxdWlyZSgneWFyZ3MtcGFyc2VyJyk7XG5jb25zdCBZYXJncyQxID0gWWFyZ3NXaXRoU2hpbShjanNQbGF0Zm9ybVNoaW0pO1xudmFyIGNqcyA9IHtcbiAgICBhcHBseUV4dGVuZHMsXG4gICAgY2pzUGxhdGZvcm1TaGltLFxuICAgIFlhcmdzOiBZYXJncyQxLFxuICAgIGFyZ3NlcnQsXG4gICAgZ2xvYmFsTWlkZGxld2FyZUZhY3RvcnksXG4gICAgaXNQcm9taXNlLFxuICAgIG9iakZpbHRlcixcbiAgICBwYXJzZUNvbW1hbmQsXG4gICAgUGFyc2VyOiBQYXJzZXIkMSxcbiAgICBwcm9jZXNzQXJndixcbiAgICByZWJhc2UsXG4gICAgWUVycm9yLFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjanM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gY2xhc3NpYyBzaW5nbGV0b24geWFyZ3MgQVBJLCB0byB1c2UgeWFyZ3Ncbi8vIHdpdGhvdXQgcnVubmluZyBhcyBhIHNpbmdsZXRvbiBkbzpcbi8vIHJlcXVpcmUoJ3lhcmdzL3lhcmdzJykocHJvY2Vzcy5hcmd2LnNsaWNlKDIpKVxuY29uc3Qge1lhcmdzLCBwcm9jZXNzQXJndn0gPSByZXF1aXJlKCcuL2J1aWxkL2luZGV4LmNqcycpO1xuXG5Bcmd2KHByb2Nlc3NBcmd2LmhpZGVCaW4ocHJvY2Vzcy5hcmd2KSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXJndjtcblxuZnVuY3Rpb24gQXJndihwcm9jZXNzQXJncywgY3dkKSB7XG4gIGNvbnN0IGFyZ3YgPSBZYXJncyhwcm9jZXNzQXJncywgY3dkLCByZXF1aXJlKTtcbiAgc2luZ2xldG9uaWZ5KGFyZ3YpO1xuICByZXR1cm4gYXJndjtcbn1cblxuLyogIEhhY2sgYW4gaW5zdGFuY2Ugb2YgQXJndiB3aXRoIHByb2Nlc3MuYXJndiBpbnRvIEFyZ3ZcbiAgICBzbyBwZW9wbGUgY2FuIGRvXG4gICAgcmVxdWlyZSgneWFyZ3MnKShbJy0tYmVlYmxlPTEnLCcteicsJ3ppenpsZSddKS5hcmd2XG4gICAgdG8gcGFyc2UgYSBsaXN0IG9mIGFyZ3MgYW5kXG4gICAgcmVxdWlyZSgneWFyZ3MnKS5hcmd2XG4gICAgdG8gZ2V0IGEgcGFyc2VkIHZlcnNpb24gb2YgcHJvY2Vzcy5hcmd2LlxuKi9cbmZ1bmN0aW9uIHNpbmdsZXRvbmlmeShpbnN0KSB7XG4gIE9iamVjdC5rZXlzKGluc3QpLmZvckVhY2goa2V5ID0+IHtcbiAgICBpZiAoa2V5ID09PSAnYXJndicpIHtcbiAgICAgIEFyZ3YuX19kZWZpbmVHZXR0ZXJfXyhrZXksIGluc3QuX19sb29rdXBHZXR0ZXJfXyhrZXkpKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnN0W2tleV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIEFyZ3Zba2V5XSA9IGluc3Rba2V5XS5iaW5kKGluc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICBBcmd2Ll9fZGVmaW5lR2V0dGVyX18oJyQwJywgKCkgPT4ge1xuICAgICAgICByZXR1cm4gaW5zdC4kMDtcbiAgICAgIH0pO1xuICAgICAgQXJndi5fX2RlZmluZUdldHRlcl9fKCdwYXJzZWQnLCAoKSA9PiB7XG4gICAgICAgIHJldHVybiBpbnN0LnBhcnNlZDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG4iLCAiLy8gRXhlcmNpc2UgYWxsIGludGVnIHN0YWNrcyBhbmQgaWYgdGhleSBkZXBsb3ksIHVwZGF0ZSB0aGUgZXhwZWN0ZWQgc3ludGggZmlsZXNcbmltcG9ydCB7IHByb21pc2VzIGFzIGZzIH0gZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCAqIGFzIHdvcmtlcnBvb2wgZnJvbSAnd29ya2VycG9vbCc7XG5pbXBvcnQgKiBhcyBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgSW50ZWdyYXRpb25UZXN0cywgSW50ZWdUZXN0SW5mbywgSW50ZWdUZXN0IH0gZnJvbSAnLi9ydW5uZXIvaW50ZWdyYXRpb24tdGVzdHMnO1xuaW1wb3J0IHsgcnVuU25hcHNob3RUZXN0cywgcnVuSW50ZWdyYXRpb25UZXN0cywgSW50ZWdSdW5uZXJNZXRyaWNzLCBJbnRlZ1Rlc3RXb3JrZXJDb25maWcsIERlc3RydWN0aXZlQ2hhbmdlIH0gZnJvbSAnLi93b3JrZXJzJztcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3lhcmdzL3lhcmdzL2lzc3Vlcy8xOTI5XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZXNidWlsZC9pc3N1ZXMvMTQ5MlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IHlhcmdzID0gcmVxdWlyZSgneWFyZ3MnKTtcblxuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuICBjb25zdCBhcmd2ID0geWFyZ3NcbiAgICAudXNhZ2UoJ1VzYWdlOiBpbnRlZy1ydW5uZXIgW1RFU1QuLi5dJylcbiAgICAub3B0aW9uKCdsaXN0JywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAnTGlzdCB0ZXN0cyBpbnN0ZWFkIG9mIHJ1bm5pbmcgdGhlbScgfSlcbiAgICAub3B0aW9uKCdjbGVhbicsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiB0cnVlLCBkZXNjOiAnU2tpcHMgc3RhY2sgY2xlYW4gdXAgYWZ0ZXIgdGVzdCBpcyBjb21wbGV0ZWQgKHVzZSAtLW5vLWNsZWFuIHRvIG5lZ2F0ZSknIH0pXG4gICAgLm9wdGlvbigndmVyYm9zZScsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgYWxpYXM6ICd2JywgZGVzYzogJ1ZlcmJvc2UgbG9ncyBhbmQgbWV0cmljcyBvbiBpbnRlZ3JhdGlvbiB0ZXN0cyBkdXJhdGlvbnMnIH0pXG4gICAgLm9wdGlvbignZHJ5LXJ1bicsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ2RvIG5vdCBhY3R1YWxseSBkZXBsb3kgdGhlIHN0YWNrLiBqdXN0IHVwZGF0ZSB0aGUgc25hcHNob3QgKG5vdCByZWNvbW1lbmRlZCEpJyB9KVxuICAgIC5vcHRpb24oJ3VwZGF0ZS1vbi1mYWlsZWQnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdyZXJ1biBpbnRlZ3JhdGlvbiB0ZXN0cyBhbmQgdXBkYXRlIHNuYXBzaG90cyBmb3IgZmFpbGVkIHRlc3RzLicgfSlcbiAgICAub3B0aW9uKCdmb3JjZScsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ1JlcnVuIGFsbCBpbnRlZ3JhdGlvbiB0ZXN0cyBldmVuIGlmIHRlc3RzIGFyZSBwYXNzaW5nJyB9KVxuICAgIC5vcHRpb24oJ3BhcmFsbGVsLXJlZ2lvbnMnLCB7IHR5cGU6ICdhcnJheScsIGRlc2M6ICdUZXN0cyBhcmUgcnVuIGluIHBhcmFsbGVsIGFjcm9zcyB0aGVzZSByZWdpb25zLiBUbyBwcmV2ZW50IHRlc3RzIGZyb20gcnVubmluZyBpbiBwYXJhbGxlbCwgcHJvdmlkZSBvbmx5IGEgc2luZ2xlIHJlZ2lvbicsIG5hcmdzOiAxLCBkZWZhdWx0OiBbXSB9KVxuICAgIC5vcHRpb25zKCdkaXJlY3RvcnknLCB7IHR5cGU6ICdzdHJpbmcnLCBkZWZhdWx0OiAndGVzdCcsIGRlc2M6ICdzdGFydGluZyBkaXJlY3RvcnkgdG8gZGlzY292ZXIgaW50ZWdyYXRpb24gdGVzdHMuIFRlc3RzIHdpbGwgYmUgZGlzY292ZXJlZCByZWN1cnNpdmVseSBmcm9tIHRoaXMgZGlyZWN0b3J5JyB9KVxuICAgIC5vcHRpb25zKCdwcm9maWxlcycsIHsgdHlwZTogJ2FycmF5JywgZGVzYzogJ2xpc3Qgb2YgQVdTIHByb2ZpbGVzIHRvIHVzZS4gVGVzdHMgd2lsbCBiZSBydW4gaW4gcGFyYWxsZWwgYWNyb3NzIGVhY2ggcHJvZmlsZStyZWdpb25zJywgbmFyZ3M6IDEsIGRlZmF1bHQ6IFtdIH0pXG4gICAgLm9wdGlvbnMoJ21heC13b3JrZXJzJywgeyB0eXBlOiAnbnVtYmVyJywgZGVzYzogJ1RoZSBtYXggbnVtYmVyIG9mIHdvcmtlcnBvb2wgd29ya2VycyB0byB1c2Ugd2hlbiBydW5uaW5nIGludGVncmF0aW9uIHRlc3RzIGluIHBhcmFsbGVsJywgZGVmYXVsdDogMTYgfSlcbiAgICAub3B0aW9ucygnZXhjbHVkZScsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZXNjOiAnUnVuIGFsbCB0ZXN0cyBpbiB0aGUgZGlyZWN0b3J5LCBleGNlcHQgdGhlIHNwZWNpZmllZCBURVNUcycsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgLm9wdGlvbnMoJ2Zyb20tZmlsZScsIHsgdHlwZTogJ3N0cmluZycsIGRlc2M6ICdSZWFkIFRFU1QgbmFtZXMgZnJvbSBhIGZpbGUgKG9uZSBURVNUIHBlciBsaW5lKScgfSlcbiAgICAub3B0aW9uKCdpbnNwZWN0LWZhaWx1cmVzJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlc2M6ICdLZWVwIHRoZSBpbnRlZyB0ZXN0IGNsb3VkIGFzc2VtYmx5IGlmIGEgZmFpbHVyZSBvY2N1cnMgZm9yIGluc3BlY3Rpb24nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgIC5vcHRpb24oJ2Rpc2FibGUtdXBkYXRlLXdvcmtmbG93JywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAnSWYgdGhpcyBpcyBcInRydWVcIiB0aGVuIHRoZSBzdGFjayB1cGRhdGUgd29ya2Zsb3cgd2lsbCBiZSBkaXNhYmxlZCcgfSlcbiAgICAuc3RyaWN0KClcbiAgICAuYXJndjtcblxuICBjb25zdCBwb29sID0gd29ya2VycG9vbC5wb29sKHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9saWIvd29ya2Vycy9leHRyYWN0L2luZGV4LmpzJyksIHtcbiAgICBtYXhXb3JrZXJzOiBhcmd2WydtYXgtd29ya2VycyddLFxuICB9KTtcblxuICAvLyBsaXN0IG9mIGludGVncmF0aW9uIHRlc3RzIHRoYXQgd2lsbCBiZSBleGVjdXRlZFxuICBjb25zdCB0ZXN0c1RvUnVuOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSA9IFtdO1xuICBjb25zdCBkZXN0cnVjdGl2ZUNoYW5nZXM6IERlc3RydWN0aXZlQ2hhbmdlW10gPSBbXTtcbiAgY29uc3QgdGVzdHNGcm9tQXJnczogSW50ZWdUZXN0W10gPSBbXTtcbiAgY29uc3QgcGFyYWxsZWxSZWdpb25zID0gYXJyYXlGcm9tWWFyZ3MoYXJndlsncGFyYWxsZWwtcmVnaW9ucyddKTtcbiAgY29uc3QgdGVzdFJlZ2lvbnM6IHN0cmluZ1tdID0gcGFyYWxsZWxSZWdpb25zID8/IFsndXMtZWFzdC0xJywgJ3VzLWVhc3QtMicsICd1cy13ZXN0LTInXTtcbiAgY29uc3QgcHJvZmlsZXMgPSBhcnJheUZyb21ZYXJncyhhcmd2LnByb2ZpbGVzKTtcbiAgY29uc3QgcnVuVXBkYXRlT25GYWlsZWQgPSBhcmd2Wyd1cGRhdGUtb24tZmFpbGVkJ10gPz8gZmFsc2U7XG4gIGNvbnN0IGZyb21GaWxlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBhcmd2Wydmcm9tLWZpbGUnXTtcbiAgY29uc3QgZXhjbHVkZTogYm9vbGVhbiA9IGFyZ3YuZXhjbHVkZTtcblxuICBsZXQgZmFpbGVkU25hcHNob3RzOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSA9IFtdO1xuICBpZiAoYXJndlsnbWF4LXdvcmtlcnMnXSA8IHRlc3RSZWdpb25zLmxlbmd0aCAqIChwcm9maWxlcyA/PyBbMV0pLmxlbmd0aCkge1xuICAgIGxvZ2dlci53YXJuaW5nKCdZb3UgYXJlIGF0dGVtcHRpbmcgdG8gcnVuICVzIHRlc3RzIGluIHBhcmFsbGVsLCBidXQgb25seSBoYXZlICVzIHdvcmtlcnMuIE5vdCBhbGwgb2YgeW91ciBwcm9maWxlcytyZWdpb25zIHdpbGwgYmUgdXRpbGl6ZWQnLCBhcmd2LnByb2ZpbGVzICogYXJndlsncGFyYWxsZWwtcmVnaW9ucyddLCBhcmd2WydtYXgtd29ya2VycyddKTtcbiAgfVxuXG4gIGxldCB0ZXN0c1N1Y2NlZWRlZCA9IGZhbHNlO1xuICB0cnkge1xuICAgIGlmIChhcmd2Lmxpc3QpIHtcbiAgICAgIGNvbnN0IHRlc3RzID0gYXdhaXQgbmV3IEludGVncmF0aW9uVGVzdHMoYXJndi5kaXJlY3RvcnkpLmZyb21DbGlBcmdzKCk7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSh0ZXN0cy5tYXAodCA9PiB0LmRpc2NvdmVyeVJlbGF0aXZlRmlsZU5hbWUpLmpvaW4oJ1xcbicpICsgJ1xcbicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChhcmd2Ll8ubGVuZ3RoID4gMCAmJiBmcm9tRmlsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIGxpc3Qgb2YgdGVzdHMgY2Fubm90IGJlIHByb3ZpZGVkIGlmIFwiLS1mcm9tLWZpbGVcIiBpcyBwcm92aWRlZCcpO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0ZWRUZXN0cyA9IGZyb21GaWxlXG4gICAgICA/IChhd2FpdCBmcy5yZWFkRmlsZShmcm9tRmlsZSwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pKS5zcGxpdCgnXFxuJykuZmlsdGVyKHggPT4geClcbiAgICAgIDogKGFyZ3YuXy5sZW5ndGggPiAwID8gYXJndi5fIDogdW5kZWZpbmVkKTsgLy8gJ3VuZGVmaW5lZCcgbWVhbnMgbm8gcmVxdWVzdFxuXG4gICAgdGVzdHNGcm9tQXJncy5wdXNoKC4uLihhd2FpdCBuZXcgSW50ZWdyYXRpb25UZXN0cyhwYXRoLnJlc29sdmUoYXJndi5kaXJlY3RvcnkpKS5mcm9tQ2xpQXJncyhyZXF1ZXN0ZWRUZXN0cywgZXhjbHVkZSkpKTtcblxuICAgIC8vIGFsd2F5cyBydW4gc25hcHNob3QgdGVzdHMsIGJ1dCBpZiAnLS1mb3JjZScgaXMgcGFzc2VkIHRoZW5cbiAgICAvLyBydW4gaW50ZWdyYXRpb24gdGVzdHMgb24gYWxsIGZhaWxlZCB0ZXN0cywgbm90IGp1c3QgdGhvc2UgdGhhdFxuICAgIC8vIGZhaWxlZCBzbmFwc2hvdCB0ZXN0c1xuICAgIGZhaWxlZFNuYXBzaG90cyA9IGF3YWl0IHJ1blNuYXBzaG90VGVzdHMocG9vbCwgdGVzdHNGcm9tQXJncywge1xuICAgICAgcmV0YWluOiBhcmd2WydpbnNwZWN0LWZhaWx1cmVzJ10sXG4gICAgICB2ZXJib3NlOiBhcmd2LnZlcmJvc2UsXG4gICAgfSk7XG4gICAgZm9yIChjb25zdCBmYWlsdXJlIG9mIGZhaWxlZFNuYXBzaG90cykge1xuICAgICAgZGVzdHJ1Y3RpdmVDaGFuZ2VzLnB1c2goLi4uZmFpbHVyZS5kZXN0cnVjdGl2ZUNoYW5nZXMgPz8gW10pO1xuICAgIH1cbiAgICBpZiAoIWFyZ3YuZm9yY2UpIHtcbiAgICAgIHRlc3RzVG9SdW4ucHVzaCguLi5mYWlsZWRTbmFwc2hvdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBhbnkgb2YgdGhlIHRlc3QgZmFpbGVkIHNuYXBzaG90IHRlc3RzLCBrZWVwIHRob3NlIHJlc3VsdHNcbiAgICAgIC8vIGFuZCBtZXJnZSB3aXRoIHRoZSByZXN0IG9mIHRoZSB0ZXN0cyBmcm9tIGFyZ3NcbiAgICAgIHRlc3RzVG9SdW4ucHVzaCguLi5tZXJnZVRlc3RzKHRlc3RzRnJvbUFyZ3MubWFwKHQgPT4gdC5pbmZvKSwgZmFpbGVkU25hcHNob3RzKSk7XG4gICAgfVxuXG4gICAgLy8gcnVuIGludGVncmF0aW9uIHRlc3RzIGlmIGAtLXVwZGF0ZS1vbi1mYWlsZWRgIE9SIGAtLWZvcmNlYCBpcyB1c2VkXG4gICAgaWYgKHJ1blVwZGF0ZU9uRmFpbGVkIHx8IGFyZ3YuZm9yY2UpIHtcbiAgICAgIGNvbnN0IHsgc3VjY2VzcywgbWV0cmljcyB9ID0gYXdhaXQgcnVuSW50ZWdyYXRpb25UZXN0cyh7XG4gICAgICAgIHBvb2wsXG4gICAgICAgIHRlc3RzOiB0ZXN0c1RvUnVuLFxuICAgICAgICByZWdpb25zOiB0ZXN0UmVnaW9ucyxcbiAgICAgICAgcHJvZmlsZXMsXG4gICAgICAgIGNsZWFuOiBhcmd2LmNsZWFuLFxuICAgICAgICBkcnlSdW46IGFyZ3ZbJ2RyeS1ydW4nXSxcbiAgICAgICAgdmVyYm9zZTogYXJndi52ZXJib3NlLFxuICAgICAgICB1cGRhdGVXb3JrZmxvdzogIWFyZ3ZbJ2Rpc2FibGUtdXBkYXRlLXdvcmtmbG93J10sXG4gICAgICB9KTtcbiAgICAgIHRlc3RzU3VjY2VlZGVkID0gc3VjY2VzcztcblxuXG4gICAgICBpZiAoYXJndi5jbGVhbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ05vdCBjbGVhbmluZyB1cCBzdGFja3Mgc2luY2UgXCItLW5vLWNsZWFuXCIgd2FzIHVzZWQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFyZ3YudmVyYm9zZSkge1xuICAgICAgICBwcmludE1ldHJpY3MobWV0cmljcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NvbWUgaW50ZWdyYXRpb24gdGVzdHMgZmFpbGVkIScpO1xuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICB2b2lkIHBvb2wudGVybWluYXRlKCk7XG4gIH1cblxuICBpZiAoZGVzdHJ1Y3RpdmVDaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICBwcmludERlc3RydWN0aXZlQ2hhbmdlcyhkZXN0cnVjdGl2ZUNoYW5nZXMpO1xuICAgIHRocm93IG5ldyBFcnJvcignU29tZSBjaGFuZ2VzIHdlcmUgZGVzdHJ1Y3RpdmUhJyk7XG4gIH1cbiAgaWYgKGZhaWxlZFNuYXBzaG90cy5sZW5ndGggPiAwKSB7XG4gICAgbGV0IG1lc3NhZ2UgPSAnJztcbiAgICBpZiAoIXJ1blVwZGF0ZU9uRmFpbGVkKSB7XG4gICAgICBtZXNzYWdlID0gJ1RvIHJlLXJ1biBmYWlsZWQgdGVzdHMgcnVuOiB5YXJuIGludGVnLXJ1bm5lciAtLXVwZGF0ZS1vbi1mYWlsZWQnO1xuICAgIH1cbiAgICBpZiAoIXRlc3RzU3VjY2VlZGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNvbWUgdGVzdHMgZmFpbGVkIVxcbiR7bWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxufVxuXG5mdW5jdGlvbiBwcmludERlc3RydWN0aXZlQ2hhbmdlcyhjaGFuZ2VzOiBEZXN0cnVjdGl2ZUNoYW5nZVtdKTogdm9pZCB7XG4gIGlmIChjaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICBsb2dnZXIud2FybmluZygnISEhIFRoaXMgdGVzdCBjb250YWlucyAlcyAhISEnLCBjaGFsay5ib2xkKCdkZXN0cnVjdGl2ZSBjaGFuZ2VzJykpO1xuICAgIGNoYW5nZXMuZm9yRWFjaChjaGFuZ2UgPT4ge1xuICAgICAgbG9nZ2VyLndhcm5pbmcoJyAgICBTdGFjazogJXMgLSBSZXNvdXJjZTogJXMgLSBJbXBhY3Q6ICVzJywgY2hhbmdlLnN0YWNrTmFtZSwgY2hhbmdlLmxvZ2ljYWxJZCwgY2hhbmdlLmltcGFjdCk7XG4gICAgfSk7XG4gICAgbG9nZ2VyLndhcm5pbmcoJyEhISBJZiB0aGVzZSBkZXN0cnVjdGl2ZSBjaGFuZ2VzIGFyZSBuZWNlc3NhcnksIHBsZWFzZSBpbmRpY2F0ZSB0aGlzIG9uIHRoZSBQUiAhISEnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludE1ldHJpY3MobWV0cmljczogSW50ZWdSdW5uZXJNZXRyaWNzW10pOiB2b2lkIHtcbiAgbG9nZ2VyLmhpZ2hsaWdodCgnICAgLS0tIEludGVncmF0aW9uIHRlc3QgbWV0cmljcyAtLS0nKTtcbiAgY29uc3Qgc29ydGVkTWV0cmljcyA9IG1ldHJpY3Muc29ydCgoYSwgYikgPT4gYS5kdXJhdGlvbiAtIGIuZHVyYXRpb24pO1xuICBzb3J0ZWRNZXRyaWNzLmZvckVhY2gobWV0cmljID0+IHtcbiAgICBsb2dnZXIucHJpbnQoJ1Byb2ZpbGUgJXMgKyBSZWdpb24gJXMgdG90YWwgdGltZTogJXMnLCBtZXRyaWMucHJvZmlsZSwgbWV0cmljLnJlZ2lvbiwgbWV0cmljLmR1cmF0aW9uKTtcbiAgICBjb25zdCBzb3J0ZWRUZXN0cyA9IE9iamVjdC5lbnRyaWVzKG1ldHJpYy50ZXN0cykuc29ydCgoYSwgYikgPT4gYVsxXSAtIGJbMV0pO1xuICAgIHNvcnRlZFRlc3RzLmZvckVhY2godGVzdCA9PiBsb2dnZXIucHJpbnQoJyAgJXM6ICVzJywgdGVzdFswXSwgdGVzdFsxXSkpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUcmFuc2xhdGUgYSBZYXJncyBpbnB1dCBhcnJheSB0byBzb21ldGhpbmcgdGhhdCBtYWtlcyBtb3JlIHNlbnNlIGluIGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VcbiAqIG1vZGVsICh0ZWxsaW5nIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYWJzZW5jZSBhbmQgYW4gZW1wdHkgYXJyYXkpXG4gKlxuICogLSBBbiBlbXB0eSBhcnJheSBpcyB0aGUgZGVmYXVsdCBjYXNlLCBtZWFuaW5nIHRoZSB1c2VyIGRpZG4ndCBwYXNzIGFueSBhcmd1bWVudHMuIFdlIHJldHVyblxuICogICB1bmRlZmluZWQuXG4gKiAtIElmIHRoZSB1c2VyIHBhc3NlZCBhIHNpbmdsZSBlbXB0eSBzdHJpbmcsIHRoZXkgZGlkIHNvbWV0aGluZyBsaWtlIGAtLWFycmF5PWAsIHdoaWNoIHdlJ2xsXG4gKiAgIHRha2UgdG8gbWVhbiB0aGV5IHBhc3NlZCBhbiBlbXB0eSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlGcm9tWWFyZ3MoeHM6IHN0cmluZ1tdKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICBpZiAoeHMubGVuZ3RoID09PSAwKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgcmV0dXJuIHhzLmZpbHRlcih4ID0+IHggIT09ICcnKTtcbn1cblxuLyoqXG4gKiBNZXJnZSB0aGUgdGVzdHMgd2UgcmVjZWl2ZWQgZnJvbSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHdpdGhcbiAqIHRlc3RzIHRoYXQgZmFpbGVkIHNuYXBzaG90IHRlc3RzLiBUaGUgZmFpbGVkIHNuYXBzaG90IHRlc3RzIGhhdmUgYWRkaXRpb25hbFxuICogaW5mb3JtYXRpb24gdGhhdCB3ZSB3YW50IHRvIGtlZXAgc28gdGhpcyBzaG91bGQgb3ZlcnJpZGUgYW55IHRlc3QgZnJvbSBhcmdzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlVGVzdHModGVzdEZyb21BcmdzOiBJbnRlZ1Rlc3RJbmZvW10sIGZhaWxlZFNuYXBzaG90VGVzdHM6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdKTogSW50ZWdUZXN0V29ya2VyQ29uZmlnW10ge1xuICBjb25zdCBmYWlsZWRUZXN0TmFtZXMgPSBuZXcgU2V0KGZhaWxlZFNuYXBzaG90VGVzdHMubWFwKHRlc3QgPT4gdGVzdC5maWxlTmFtZSkpO1xuICBjb25zdCBmaW5hbDogSW50ZWdUZXN0V29ya2VyQ29uZmlnW10gPSBmYWlsZWRTbmFwc2hvdFRlc3RzO1xuICBmaW5hbC5wdXNoKC4uLnRlc3RGcm9tQXJncy5maWx0ZXIodGVzdCA9PiAhZmFpbGVkVGVzdE5hbWVzLmhhcyh0ZXN0LmZpbGVOYW1lKSkpO1xuICByZXR1cm4gZmluYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGkoKSB7XG4gIG1haW4oKS50aGVuKCkuY2F0Y2goZXJyID0+IHtcbiAgICBsb2dnZXIuZXJyb3IoZXJyKTtcbiAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgfSk7XG59XG4iLCAiZXhwb3J0IHsgY2xpIH0gZnJvbSAnLi9jbGknO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7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QWEsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQzNCLGFBQWEsQ0FBQyxJQUFJLEtBQUssR0FBRztBQUFBLE1BQzFCLGVBQWUsQ0FBQyxLQUFLLElBQUksRUFBRTtBQUFBLE1BQzNCLFVBQVUsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3hCLGNBQWMsQ0FBQyxLQUFLLEtBQUssRUFBRTtBQUFBLE1BQzNCLFlBQVksQ0FBQyxJQUFJLEtBQUssRUFBRTtBQUFBLE1BQ3hCLFlBQVksQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQzFCLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRTtBQUFBLE1BQ3RCLFVBQVUsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3hCLFdBQVcsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3pCLGFBQWEsQ0FBQyxLQUFLLElBQUksR0FBRztBQUFBLE1BQzFCLGFBQWEsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQzNCLGFBQWEsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQzNCLFFBQVEsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3RCLGVBQWUsQ0FBQyxHQUFHLEtBQUssR0FBRztBQUFBLE1BQzNCLGFBQWEsQ0FBQyxJQUFJLEtBQUssR0FBRztBQUFBLE1BQzFCLE9BQU8sQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3JCLFFBQVEsQ0FBQyxHQUFHLEtBQUssR0FBRztBQUFBLE1BQ3BCLFdBQVcsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3pCLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRTtBQUFBLE1BQ3RCLGFBQWEsQ0FBQyxJQUFJLEtBQUssR0FBRztBQUFBLE1BQzFCLFVBQVUsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3hCLFNBQVMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3ZCLFNBQVMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3ZCLGNBQWMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQzVCLFVB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O0FBQ0g7QUE1TEEsSUFDQSxXQUNBRyxPQUNBQyxRQUNBLFlBUU07QUFaTjtBQUFBO0FBQUE7QUFDQSxnQkFBK0I7QUFDL0IsSUFBQUQsUUFBc0I7QUFDdEIsSUFBQUMsU0FBdUI7QUFDdkIsaUJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUtBLElBQU0sUUFBUTtBQUFBO0FBQUE7Ozs7QUNaZCxJQUFBLFFBQUE7QUFBUyxPQUFBLGVBQUEsU0FBQSxPQUFBLEVBQUEsWUFBQSxNQUFBLEtBQUEsV0FBQTtBQUFBLFNBQUEsTUFBQTtBQUFHLEVBQUEsQ0FBQTsiLAogICJuYW1lcyI6IFsiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ3JheSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXRoIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImNoYWxrIiwgInN0eWxlcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjaGFsayIsICJzZWxmIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVpcmVGb29sV2VicGFjayIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJQcm9taXNlIiwgInJlc29sdmUiLCAiZXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUHJvbWlzZSIsICJyZXF1aXJlRm9vbFdlYnBhY2siLCAiVEVSTUlOQVRFX01FVEhPRF9JRCIsICJXb3JrZXJUaHJlYWRzIiwgImVycm9yIiwgIldvcmtlciIsICJ3b3JrZXIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUHJvbWlzZSIsICJwb29sIiwgIndvcmtlciIsICJyZXNvbHZlIiwgImVycm9yIiwgInJlc3VsdCIsICJleHBvcnRzIiwgInBvb2wiLCAid29ya2VyIiwgImV4cG9ydHMiLCAicmVzb2x2ZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgImVyciIsICJlcnIyIiwgImVyIiwgImVyMiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgInNlbGYiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAidXRpbCIsICJxdWV1ZSIsICJwYXRoIiwgIm9wdGlvbnMiLCAiY2IiLCAiZGF0YSIsICJzcmMiLCAiZGVzdCIsICJmbGFncyIsICJyZWFkZGlyIiwgImdvJHJlYWRkaXIiLCAibW9kZSIsICJleHBvcnRzIiwgImZzIiwgInJlc29sdmUiLCAiYnVmZmVyIiwgImJ1ZmZlcnMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJlcnJvciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAidXRpbCIsICJzdGF0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAic3RhdCIsICJyZXF1aXJlX2NvcHlfc3luYyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAic3RhdCIsICJlcnIiLCAiZXJyb3IiLCAicmVxdWlyZV9jb3B5IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAiZXIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJlbXB0eURpciIsICJlcnIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJmcyIsICJlcnIiLCAic3RhdHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJmcyIsICJzcmNwYXRoIiwgImRzdHBhdGgiLCAiZXJyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZnMiLCAiZXJyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZnMiLCAiZXJyIiwgInJlbGF0aXZlIiwgInR5cGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicmVhZEZpbGVTeW5jIiwgInJlcXVpcmVfanNvbmZpbGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJlcnIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJzdGF0IiwgInJlcXVpcmVfbW92ZV9zeW5jIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAic3RhdCIsICJlcnIiLCAicmVxdWlyZV9tb3ZlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgImNoYWxrIiwgIndvcmtlciIsICJwb29sIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInV0aWwiLCAicGF0aCIsICJ5MThuIiwgInJlcXVpcmVfYnVpbGQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAidXRpbCIsICJmcyIsICJwYXRoIiwgIkRlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5IiwgImtleSIsICJlcnJvciIsICJhcmdzIiwgInZhbHVlIiwgInZhbCIsICJhcmd2IiwgImVudiIsICJhbGlhc2VzIiwgImRlZmF1bHRzIiwgInNlbGYiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY29kZSIsICJyZXF1aXJlX2J1aWxkIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlc29sdmUiLCAibW9kdWxlIiwgInN0YWNrIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgImpvaW4iLCAicmVzb2x2ZSIsICJwYXRoIiwgInJlcXVpcmVfYnVpbGQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY21kIiwgImlzUHJvbWlzZSIsICJzaGltIiwgInlhcmdzIiwgInVzYWdlIiwgInZhbGlkYXRpb24iLCAic2VsZiIsICJjb21tYW5kIiwgImVycm9yIiwgImMiLCAieTE4biIsICJsb2dnZXIiLCAibWF4V2lkdGgiLCAiYXJndiIsICJjb21wbGV0aW9ucyIsICJrZXkiLCAiZ2xvYmFsIiwgImsiLCAidHlwZSIsICJ2YWx1ZSIsICJwYXJzZUZuIiwgInBhcnNlIiwgImNvbXBsZXRpb24iLCAicmVhZEZpbGVTeW5jIiwgInJlc29sdmUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicG9vbCIsICJmcyIsICJzdWNjZXNzIiwgInBhdGgiLCAiY2hhbGsiXQp9Cg==