nextlove 2.2.0 → 2.3.1

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.
@@ -529,9 +529,9 @@ var require_merge2 = __commonJS({
529
529
  }
530
530
  });
531
531
 
532
- // node_modules/fast-glob/out/utils/array.js
532
+ // ../../node_modules/fast-glob/out/utils/array.js
533
533
  var require_array = __commonJS({
534
- "node_modules/fast-glob/out/utils/array.js"(exports) {
534
+ "../../node_modules/fast-glob/out/utils/array.js"(exports) {
535
535
  "use strict";
536
536
  init_cjs_shims();
537
537
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -557,9 +557,9 @@ var require_array = __commonJS({
557
557
  }
558
558
  });
559
559
 
560
- // node_modules/fast-glob/out/utils/errno.js
560
+ // ../../node_modules/fast-glob/out/utils/errno.js
561
561
  var require_errno = __commonJS({
562
- "node_modules/fast-glob/out/utils/errno.js"(exports) {
562
+ "../../node_modules/fast-glob/out/utils/errno.js"(exports) {
563
563
  "use strict";
564
564
  init_cjs_shims();
565
565
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -571,9 +571,9 @@ var require_errno = __commonJS({
571
571
  }
572
572
  });
573
573
 
574
- // node_modules/fast-glob/out/utils/fs.js
574
+ // ../../node_modules/fast-glob/out/utils/fs.js
575
575
  var require_fs = __commonJS({
576
- "node_modules/fast-glob/out/utils/fs.js"(exports) {
576
+ "../../node_modules/fast-glob/out/utils/fs.js"(exports) {
577
577
  "use strict";
578
578
  init_cjs_shims();
579
579
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -597,9 +597,9 @@ var require_fs = __commonJS({
597
597
  }
598
598
  });
599
599
 
600
- // node_modules/fast-glob/out/utils/path.js
600
+ // ../../node_modules/fast-glob/out/utils/path.js
601
601
  var require_path = __commonJS({
602
- "node_modules/fast-glob/out/utils/path.js"(exports) {
602
+ "../../node_modules/fast-glob/out/utils/path.js"(exports) {
603
603
  "use strict";
604
604
  init_cjs_shims();
605
605
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -802,9 +802,9 @@ var require_is_glob = __commonJS({
802
802
  }
803
803
  });
804
804
 
805
- // node_modules/fast-glob/node_modules/glob-parent/index.js
805
+ // ../../node_modules/fast-glob/node_modules/glob-parent/index.js
806
806
  var require_glob_parent = __commonJS({
807
- "node_modules/fast-glob/node_modules/glob-parent/index.js"(exports, module2) {
807
+ "../../node_modules/fast-glob/node_modules/glob-parent/index.js"(exports, module2) {
808
808
  "use strict";
809
809
  init_cjs_shims();
810
810
  var isGlob = require_is_glob();
@@ -3514,9 +3514,9 @@ var require_micromatch = __commonJS({
3514
3514
  }
3515
3515
  });
3516
3516
 
3517
- // node_modules/fast-glob/out/utils/pattern.js
3517
+ // ../../node_modules/fast-glob/out/utils/pattern.js
3518
3518
  var require_pattern = __commonJS({
3519
- "node_modules/fast-glob/out/utils/pattern.js"(exports) {
3519
+ "../../node_modules/fast-glob/out/utils/pattern.js"(exports) {
3520
3520
  "use strict";
3521
3521
  init_cjs_shims();
3522
3522
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -3663,9 +3663,9 @@ var require_pattern = __commonJS({
3663
3663
  }
3664
3664
  });
3665
3665
 
3666
- // node_modules/fast-glob/out/utils/stream.js
3666
+ // ../../node_modules/fast-glob/out/utils/stream.js
3667
3667
  var require_stream = __commonJS({
3668
- "node_modules/fast-glob/out/utils/stream.js"(exports) {
3668
+ "../../node_modules/fast-glob/out/utils/stream.js"(exports) {
3669
3669
  "use strict";
3670
3670
  init_cjs_shims();
3671
3671
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -3687,9 +3687,9 @@ var require_stream = __commonJS({
3687
3687
  }
3688
3688
  });
3689
3689
 
3690
- // node_modules/fast-glob/out/utils/string.js
3690
+ // ../../node_modules/fast-glob/out/utils/string.js
3691
3691
  var require_string = __commonJS({
3692
- "node_modules/fast-glob/out/utils/string.js"(exports) {
3692
+ "../../node_modules/fast-glob/out/utils/string.js"(exports) {
3693
3693
  "use strict";
3694
3694
  init_cjs_shims();
3695
3695
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -3705,9 +3705,9 @@ var require_string = __commonJS({
3705
3705
  }
3706
3706
  });
3707
3707
 
3708
- // node_modules/fast-glob/out/utils/index.js
3708
+ // ../../node_modules/fast-glob/out/utils/index.js
3709
3709
  var require_utils3 = __commonJS({
3710
- "node_modules/fast-glob/out/utils/index.js"(exports) {
3710
+ "../../node_modules/fast-glob/out/utils/index.js"(exports) {
3711
3711
  "use strict";
3712
3712
  init_cjs_shims();
3713
3713
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -3729,9 +3729,9 @@ var require_utils3 = __commonJS({
3729
3729
  }
3730
3730
  });
3731
3731
 
3732
- // node_modules/fast-glob/out/managers/tasks.js
3732
+ // ../../node_modules/fast-glob/out/managers/tasks.js
3733
3733
  var require_tasks = __commonJS({
3734
- "node_modules/fast-glob/out/managers/tasks.js"(exports) {
3734
+ "../../node_modules/fast-glob/out/managers/tasks.js"(exports) {
3735
3735
  "use strict";
3736
3736
  init_cjs_shims();
3737
3737
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -5040,9 +5040,9 @@ var require_out3 = __commonJS({
5040
5040
  }
5041
5041
  });
5042
5042
 
5043
- // node_modules/fast-glob/out/readers/reader.js
5043
+ // ../../node_modules/fast-glob/out/readers/reader.js
5044
5044
  var require_reader2 = __commonJS({
5045
- "node_modules/fast-glob/out/readers/reader.js"(exports) {
5045
+ "../../node_modules/fast-glob/out/readers/reader.js"(exports) {
5046
5046
  "use strict";
5047
5047
  init_cjs_shims();
5048
5048
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -5080,9 +5080,9 @@ var require_reader2 = __commonJS({
5080
5080
  }
5081
5081
  });
5082
5082
 
5083
- // node_modules/fast-glob/out/readers/stream.js
5083
+ // ../../node_modules/fast-glob/out/readers/stream.js
5084
5084
  var require_stream3 = __commonJS({
5085
- "node_modules/fast-glob/out/readers/stream.js"(exports) {
5085
+ "../../node_modules/fast-glob/out/readers/stream.js"(exports) {
5086
5086
  "use strict";
5087
5087
  init_cjs_shims();
5088
5088
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -5138,9 +5138,9 @@ var require_stream3 = __commonJS({
5138
5138
  }
5139
5139
  });
5140
5140
 
5141
- // node_modules/fast-glob/out/readers/async.js
5141
+ // ../../node_modules/fast-glob/out/readers/async.js
5142
5142
  var require_async5 = __commonJS({
5143
- "node_modules/fast-glob/out/readers/async.js"(exports) {
5143
+ "../../node_modules/fast-glob/out/readers/async.js"(exports) {
5144
5144
  "use strict";
5145
5145
  init_cjs_shims();
5146
5146
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -5178,9 +5178,9 @@ var require_async5 = __commonJS({
5178
5178
  }
5179
5179
  });
5180
5180
 
5181
- // node_modules/fast-glob/out/providers/matchers/matcher.js
5181
+ // ../../node_modules/fast-glob/out/providers/matchers/matcher.js
5182
5182
  var require_matcher = __commonJS({
5183
- "node_modules/fast-glob/out/providers/matchers/matcher.js"(exports) {
5183
+ "../../node_modules/fast-glob/out/providers/matchers/matcher.js"(exports) {
5184
5184
  "use strict";
5185
5185
  init_cjs_shims();
5186
5186
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -5230,9 +5230,9 @@ var require_matcher = __commonJS({
5230
5230
  }
5231
5231
  });
5232
5232
 
5233
- // node_modules/fast-glob/out/providers/matchers/partial.js
5233
+ // ../../node_modules/fast-glob/out/providers/matchers/partial.js
5234
5234
  var require_partial = __commonJS({
5235
- "node_modules/fast-glob/out/providers/matchers/partial.js"(exports) {
5235
+ "../../node_modules/fast-glob/out/providers/matchers/partial.js"(exports) {
5236
5236
  "use strict";
5237
5237
  init_cjs_shims();
5238
5238
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -5268,9 +5268,9 @@ var require_partial = __commonJS({
5268
5268
  }
5269
5269
  });
5270
5270
 
5271
- // node_modules/fast-glob/out/providers/filters/deep.js
5271
+ // ../../node_modules/fast-glob/out/providers/filters/deep.js
5272
5272
  var require_deep = __commonJS({
5273
- "node_modules/fast-glob/out/providers/filters/deep.js"(exports) {
5273
+ "../../node_modules/fast-glob/out/providers/filters/deep.js"(exports) {
5274
5274
  "use strict";
5275
5275
  init_cjs_shims();
5276
5276
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -5334,9 +5334,9 @@ var require_deep = __commonJS({
5334
5334
  }
5335
5335
  });
5336
5336
 
5337
- // node_modules/fast-glob/out/providers/filters/entry.js
5337
+ // ../../node_modules/fast-glob/out/providers/filters/entry.js
5338
5338
  var require_entry = __commonJS({
5339
- "node_modules/fast-glob/out/providers/filters/entry.js"(exports) {
5339
+ "../../node_modules/fast-glob/out/providers/filters/entry.js"(exports) {
5340
5340
  "use strict";
5341
5341
  init_cjs_shims();
5342
5342
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -5401,9 +5401,9 @@ var require_entry = __commonJS({
5401
5401
  }
5402
5402
  });
5403
5403
 
5404
- // node_modules/fast-glob/out/providers/filters/error.js
5404
+ // ../../node_modules/fast-glob/out/providers/filters/error.js
5405
5405
  var require_error = __commonJS({
5406
- "node_modules/fast-glob/out/providers/filters/error.js"(exports) {
5406
+ "../../node_modules/fast-glob/out/providers/filters/error.js"(exports) {
5407
5407
  "use strict";
5408
5408
  init_cjs_shims();
5409
5409
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -5423,9 +5423,9 @@ var require_error = __commonJS({
5423
5423
  }
5424
5424
  });
5425
5425
 
5426
- // node_modules/fast-glob/out/providers/transformers/entry.js
5426
+ // ../../node_modules/fast-glob/out/providers/transformers/entry.js
5427
5427
  var require_entry2 = __commonJS({
5428
- "node_modules/fast-glob/out/providers/transformers/entry.js"(exports) {
5428
+ "../../node_modules/fast-glob/out/providers/transformers/entry.js"(exports) {
5429
5429
  "use strict";
5430
5430
  init_cjs_shims();
5431
5431
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -5456,9 +5456,9 @@ var require_entry2 = __commonJS({
5456
5456
  }
5457
5457
  });
5458
5458
 
5459
- // node_modules/fast-glob/out/providers/provider.js
5459
+ // ../../node_modules/fast-glob/out/providers/provider.js
5460
5460
  var require_provider = __commonJS({
5461
- "node_modules/fast-glob/out/providers/provider.js"(exports) {
5461
+ "../../node_modules/fast-glob/out/providers/provider.js"(exports) {
5462
5462
  "use strict";
5463
5463
  init_cjs_shims();
5464
5464
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -5511,9 +5511,9 @@ var require_provider = __commonJS({
5511
5511
  }
5512
5512
  });
5513
5513
 
5514
- // node_modules/fast-glob/out/providers/async.js
5514
+ // ../../node_modules/fast-glob/out/providers/async.js
5515
5515
  var require_async6 = __commonJS({
5516
- "node_modules/fast-glob/out/providers/async.js"(exports) {
5516
+ "../../node_modules/fast-glob/out/providers/async.js"(exports) {
5517
5517
  "use strict";
5518
5518
  init_cjs_shims();
5519
5519
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -5541,9 +5541,9 @@ var require_async6 = __commonJS({
5541
5541
  }
5542
5542
  });
5543
5543
 
5544
- // node_modules/fast-glob/out/providers/stream.js
5544
+ // ../../node_modules/fast-glob/out/providers/stream.js
5545
5545
  var require_stream4 = __commonJS({
5546
- "node_modules/fast-glob/out/providers/stream.js"(exports) {
5546
+ "../../node_modules/fast-glob/out/providers/stream.js"(exports) {
5547
5547
  "use strict";
5548
5548
  init_cjs_shims();
5549
5549
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -5576,9 +5576,9 @@ var require_stream4 = __commonJS({
5576
5576
  }
5577
5577
  });
5578
5578
 
5579
- // node_modules/fast-glob/out/readers/sync.js
5579
+ // ../../node_modules/fast-glob/out/readers/sync.js
5580
5580
  var require_sync5 = __commonJS({
5581
- "node_modules/fast-glob/out/readers/sync.js"(exports) {
5581
+ "../../node_modules/fast-glob/out/readers/sync.js"(exports) {
5582
5582
  "use strict";
5583
5583
  init_cjs_shims();
5584
5584
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -5625,9 +5625,9 @@ var require_sync5 = __commonJS({
5625
5625
  }
5626
5626
  });
5627
5627
 
5628
- // node_modules/fast-glob/out/providers/sync.js
5628
+ // ../../node_modules/fast-glob/out/providers/sync.js
5629
5629
  var require_sync6 = __commonJS({
5630
- "node_modules/fast-glob/out/providers/sync.js"(exports) {
5630
+ "../../node_modules/fast-glob/out/providers/sync.js"(exports) {
5631
5631
  "use strict";
5632
5632
  init_cjs_shims();
5633
5633
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -5655,9 +5655,9 @@ var require_sync6 = __commonJS({
5655
5655
  }
5656
5656
  });
5657
5657
 
5658
- // node_modules/fast-glob/out/settings.js
5658
+ // ../../node_modules/fast-glob/out/settings.js
5659
5659
  var require_settings4 = __commonJS({
5660
- "node_modules/fast-glob/out/settings.js"(exports) {
5660
+ "../../node_modules/fast-glob/out/settings.js"(exports) {
5661
5661
  "use strict";
5662
5662
  init_cjs_shims();
5663
5663
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -5716,9 +5716,9 @@ var require_settings4 = __commonJS({
5716
5716
  }
5717
5717
  });
5718
5718
 
5719
- // node_modules/fast-glob/out/index.js
5719
+ // ../../node_modules/fast-glob/out/index.js
5720
5720
  var require_out4 = __commonJS({
5721
- "node_modules/fast-glob/out/index.js"(exports, module2) {
5721
+ "../../node_modules/fast-glob/out/index.js"(exports, module2) {
5722
5722
  "use strict";
5723
5723
  init_cjs_shims();
5724
5724
  var taskManager = require_tasks();
@@ -7455,4 +7455,4 @@ export type RouteRequestParams<Path extends keyof Routes> =
7455
7455
  */
7456
7456
  /*! queue-microtask. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
7457
7457
  /*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
7458
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzdXAvYXNzZXRzL2Nqc19zaGltcy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtZGVlcG1lcmdlL2Nqcy9pbmRleC5qcyIsICIuLi8uLi8uLi96b2Qtb3BlbmFwaS9zcmMvbGliL3pvZC1vcGVuYXBpLnRzIiwgIi4uLy4uLy4uL3pvZC1vcGVuYXBpL3NyYy9saWIvem9kLWV4dGVuc2lvbnMudHMiLCAiLi4vLi4vLi4vem9kLW9wZW5hcGkvc3JjL2luZGV4LnRzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tZXJnZTIvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvdXRpbHMvYXJyYXkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvdXRpbHMvZXJybm8uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvdXRpbHMvZnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvdXRpbHMvcGF0aC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvaXMtZXh0Z2xvYi9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvaXMtZ2xvYi9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL25vZGVfbW9kdWxlcy9nbG9iLXBhcmVudC9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYnJhY2VzL2xpYi91dGlscy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYnJhY2VzL2xpYi9zdHJpbmdpZnkuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2lzLW51bWJlci9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdG8tcmVnZXgtcmFuZ2UvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZpbGwtcmFuZ2UvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JyYWNlcy9saWIvY29tcGlsZS5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYnJhY2VzL2xpYi9leHBhbmQuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JyYWNlcy9saWIvY29uc3RhbnRzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9icmFjZXMvbGliL3BhcnNlLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9icmFjZXMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3BpY29tYXRjaC9saWIvY29uc3RhbnRzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9waWNvbWF0Y2gvbGliL3V0aWxzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9waWNvbWF0Y2gvbGliL3NjYW4uanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3BpY29tYXRjaC9saWIvcGFyc2UuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3BpY29tYXRjaC9saWIvcGljb21hdGNoLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9waWNvbWF0Y2gvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWF0Y2gvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvdXRpbHMvcGF0dGVybi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC91dGlscy9zdHJlYW0uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvdXRpbHMvc3RyaW5nLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L3V0aWxzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L21hbmFnZXJzL3Rhc2tzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy5zdGF0L291dC9wcm92aWRlcnMvYXN5bmMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLnN0YXQvb3V0L3Byb3ZpZGVycy9zeW5jLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy5zdGF0L291dC9hZGFwdGVycy9mcy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMuc3RhdC9vdXQvc2V0dGluZ3MuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLnN0YXQvb3V0L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9xdWV1ZS1taWNyb3Rhc2svaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3J1bi1wYXJhbGxlbC9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMuc2NhbmRpci9vdXQvY29uc3RhbnRzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy5zY2FuZGlyL291dC91dGlscy9mcy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMuc2NhbmRpci9vdXQvdXRpbHMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLnNjYW5kaXIvb3V0L3Byb3ZpZGVycy9jb21tb24uanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLnNjYW5kaXIvb3V0L3Byb3ZpZGVycy9hc3luYy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMuc2NhbmRpci9vdXQvcHJvdmlkZXJzL3N5bmMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLnNjYW5kaXIvb3V0L2FkYXB0ZXJzL2ZzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy5zY2FuZGlyL291dC9zZXR0aW5ncy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMuc2NhbmRpci9vdXQvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JldXNpZnkvcmV1c2lmeS5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZmFzdHEvcXVldWUuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLndhbGsvb3V0L3JlYWRlcnMvY29tbW9uLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy53YWxrL291dC9yZWFkZXJzL3JlYWRlci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMud2Fsay9vdXQvcmVhZGVycy9hc3luYy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMud2Fsay9vdXQvcHJvdmlkZXJzL2FzeW5jLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy53YWxrL291dC9wcm92aWRlcnMvc3RyZWFtLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy53YWxrL291dC9yZWFkZXJzL3N5bmMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLndhbGsvb3V0L3Byb3ZpZGVycy9zeW5jLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy53YWxrL291dC9zZXR0aW5ncy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMud2Fsay9vdXQvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvcmVhZGVycy9yZWFkZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvcmVhZGVycy9zdHJlYW0uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvcmVhZGVycy9hc3luYy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9wcm92aWRlcnMvbWF0Y2hlcnMvbWF0Y2hlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9wcm92aWRlcnMvbWF0Y2hlcnMvcGFydGlhbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9wcm92aWRlcnMvZmlsdGVycy9kZWVwLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L3Byb3ZpZGVycy9maWx0ZXJzL2VudHJ5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L3Byb3ZpZGVycy9maWx0ZXJzL2Vycm9yLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L3Byb3ZpZGVycy90cmFuc2Zvcm1lcnMvZW50cnkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvcHJvdmlkZXJzL3Byb3ZpZGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L3Byb3ZpZGVycy9hc3luYy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9wcm92aWRlcnMvc3RyZWFtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L3JlYWRlcnMvc3luYy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9wcm92aWRlcnMvc3luYy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9zZXR0aW5ncy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcGF0aC10eXBlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kaXItZ2xvYi9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvaWdub3JlL2luZGV4LmpzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL2luZGV4LnRzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL2dlbmVyYXRlLW9wZW5hcGkvaW5kZXgudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2NoYWxrL3NvdXJjZS9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvY2hhbGsvc291cmNlL3ZlbmRvci9hbnNpLXN0eWxlcy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvY2hhbGsvc291cmNlL3ZlbmRvci9zdXBwb3J0cy1jb2xvci9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvY2hhbGsvc291cmNlL3V0aWxpdGllcy5qcyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9saWIvcGFyc2Utcm91dGVzLWluLXBhY2thZ2UudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2dsb2JieS9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvZ2xvYmJ5L2lnbm9yZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc2xhc2gvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2dsb2JieS91dGlsaXRpZXMuanMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvbGliL2RlZmF1bHQtbWFwLWZpbGUtcGF0aC10by1odHRwLXJvdXRlLnRzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL2dlbmVyYXRlLW9wZW5hcGkvZW1iZWQtc2NoZW1hLXJlZmVyZW5jZXMudHMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvZ2VuZXJhdGUtb3BlbmFwaS9mZXJuLXNkay11dGlscy50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9nZW5lcmF0ZS1yb3V0ZS10eXBlcy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLy8gU2hpbSBnbG9iYWxzIGluIGNqcyBidW5kbGVcbi8vIFRoZXJlJ3MgYSB3ZWlyZCBidWcgdGhhdCBlc2J1aWxkIHdpbGwgYWx3YXlzIGluamVjdCBpbXBvcnRNZXRhVXJsXG4vLyBpZiB3ZSBleHBvcnQgaXQgYXMgYGNvbnN0IGltcG9ydE1ldGFVcmwgPSAuLi4gX19maWxlbmFtZSAuLi5gXG4vLyBCdXQgdXNpbmcgYSBmdW5jdGlvbiB3aWxsIG5vdCBjYXVzZSB0aGlzIGlzc3VlXG5cbmNvbnN0IGdldEltcG9ydE1ldGFVcmwgPSAoKSA9PlxuICB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnXG4gICAgPyBuZXcgVVJMKCdmaWxlOicgKyBfX2ZpbGVuYW1lKS5ocmVmXG4gICAgOiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdCAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYykgfHxcbiAgICAgIG5ldyBVUkwoJ21haW4uanMnLCBkb2N1bWVudC5iYXNlVVJJKS5ocmVmXG5cbmV4cG9ydCBjb25zdCBpbXBvcnRNZXRhVXJsID0gLyogQF9fUFVSRV9fICovIGdldEltcG9ydE1ldGFVcmwoKVxuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbmNvbnN0IGlzT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgIGlmICh0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiICYmIG9iaiAhPT0gbnVsbCkge1xuICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5nZXRQcm90b3R5cGVPZiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcbiAgICAgICAgICAgIHJldHVybiBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgcHJvdG90eXBlID09PSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIjtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbmNvbnN0IG1lcmdlID0gKC4uLm9iamVjdHMpID0+IG9iamVjdHMucmVkdWNlKChyZXN1bHQsIGN1cnJlbnQpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnRzIHByb3ZpZGVkIHRvIHRzLWRlZXBtZXJnZSBtdXN0IGJlIG9iamVjdHMsIG5vdCBhcnJheXMuXCIpO1xuICAgIH1cbiAgICBPYmplY3Qua2V5cyhjdXJyZW50KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKFtcIl9fcHJvdG9fX1wiLCBcImNvbnN0cnVjdG9yXCIsIFwicHJvdG90eXBlXCJdLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHRba2V5XSkgJiYgQXJyYXkuaXNBcnJheShjdXJyZW50W2tleV0pKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IG1lcmdlLm9wdGlvbnMubWVyZ2VBcnJheXNcbiAgICAgICAgICAgICAgICA/IG1lcmdlLm9wdGlvbnMudW5pcXVlQXJyYXlJdGVtc1xuICAgICAgICAgICAgICAgICAgICA/IEFycmF5LmZyb20obmV3IFNldChyZXN1bHRba2V5XS5jb25jYXQoY3VycmVudFtrZXldKSkpXG4gICAgICAgICAgICAgICAgICAgIDogWy4uLnJlc3VsdFtrZXldLCAuLi5jdXJyZW50W2tleV1dXG4gICAgICAgICAgICAgICAgOiBjdXJyZW50W2tleV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNPYmplY3QocmVzdWx0W2tleV0pICYmIGlzT2JqZWN0KGN1cnJlbnRba2V5XSkpIHtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2UocmVzdWx0W2tleV0sIGN1cnJlbnRba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9XG4gICAgICAgICAgICAgICAgY3VycmVudFtrZXldID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgPyBtZXJnZS5vcHRpb25zLmFsbG93VW5kZWZpbmVkT3ZlcnJpZGVzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGN1cnJlbnRba2V5XVxuICAgICAgICAgICAgICAgICAgICAgICAgOiByZXN1bHRba2V5XVxuICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnRba2V5XTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59LCB7fSk7XG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBhbGxvd1VuZGVmaW5lZE92ZXJyaWRlczogdHJ1ZSxcbiAgICBtZXJnZUFycmF5czogdHJ1ZSxcbiAgICB1bmlxdWVBcnJheUl0ZW1zOiB0cnVlLFxufTtcbm1lcmdlLm9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucztcbm1lcmdlLndpdGhPcHRpb25zID0gKG9wdGlvbnMsIC4uLm9iamVjdHMpID0+IHtcbiAgICBtZXJnZS5vcHRpb25zID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucyksIG9wdGlvbnMpO1xuICAgIGNvbnN0IHJlc3VsdCA9IG1lcmdlKC4uLm9iamVjdHMpO1xuICAgIG1lcmdlLm9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucztcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbmV4cG9ydHMuZGVmYXVsdCA9IG1lcmdlO1xuIiwgbnVsbCwgbnVsbCwgbnVsbCwgIid1c2Ugc3RyaWN0J1xuLypcbiAqIG1lcmdlMlxuICogaHR0cHM6Ly9naXRodWIuY29tL3RlYW1iaXRpb24vbWVyZ2UyXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMjAgVGVhbWJpdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICovXG5jb25zdCBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgUGFzc1Rocm91Z2ggPSBTdHJlYW0uUGFzc1Rocm91Z2hcbmNvbnN0IHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlXG5cbm1vZHVsZS5leHBvcnRzID0gbWVyZ2UyXG5cbmZ1bmN0aW9uIG1lcmdlMiAoKSB7XG4gIGNvbnN0IHN0cmVhbXNRdWV1ZSA9IFtdXG4gIGNvbnN0IGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cylcbiAgbGV0IG1lcmdpbmcgPSBmYWxzZVxuICBsZXQgb3B0aW9ucyA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXVxuXG4gIGlmIChvcHRpb25zICYmICFBcnJheS5pc0FycmF5KG9wdGlvbnMpICYmIG9wdGlvbnMucGlwZSA9PSBudWxsKSB7XG4gICAgYXJncy5wb3AoKVxuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMgPSB7fVxuICB9XG5cbiAgY29uc3QgZG9FbmQgPSBvcHRpb25zLmVuZCAhPT0gZmFsc2VcbiAgY29uc3QgZG9QaXBlRXJyb3IgPSBvcHRpb25zLnBpcGVFcnJvciA9PT0gdHJ1ZVxuICBpZiAob3B0aW9ucy5vYmplY3RNb2RlID09IG51bGwpIHtcbiAgICBvcHRpb25zLm9iamVjdE1vZGUgPSB0cnVlXG4gIH1cbiAgaWYgKG9wdGlvbnMuaGlnaFdhdGVyTWFyayA9PSBudWxsKSB7XG4gICAgb3B0aW9ucy5oaWdoV2F0ZXJNYXJrID0gNjQgKiAxMDI0XG4gIH1cbiAgY29uc3QgbWVyZ2VkU3RyZWFtID0gUGFzc1Rocm91Z2gob3B0aW9ucylcblxuICBmdW5jdGlvbiBhZGRTdHJlYW0gKCkge1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHN0cmVhbXNRdWV1ZS5wdXNoKHBhdXNlU3RyZWFtcyhhcmd1bWVudHNbaV0sIG9wdGlvbnMpKVxuICAgIH1cbiAgICBtZXJnZVN0cmVhbSgpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGZ1bmN0aW9uIG1lcmdlU3RyZWFtICgpIHtcbiAgICBpZiAobWVyZ2luZykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIG1lcmdpbmcgPSB0cnVlXG5cbiAgICBsZXQgc3RyZWFtcyA9IHN0cmVhbXNRdWV1ZS5zaGlmdCgpXG4gICAgaWYgKCFzdHJlYW1zKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVuZFN0cmVhbSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc3RyZWFtcykpIHtcbiAgICAgIHN0cmVhbXMgPSBbc3RyZWFtc11cbiAgICB9XG5cbiAgICBsZXQgcGlwZXNDb3VudCA9IHN0cmVhbXMubGVuZ3RoICsgMVxuXG4gICAgZnVuY3Rpb24gbmV4dCAoKSB7XG4gICAgICBpZiAoLS1waXBlc0NvdW50ID4gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIG1lcmdpbmcgPSBmYWxzZVxuICAgICAgbWVyZ2VTdHJlYW0oKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBpcGUgKHN0cmVhbSkge1xuICAgICAgZnVuY3Rpb24gb25lbmQgKCkge1xuICAgICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ21lcmdlMlVucGlwZUVuZCcsIG9uZW5kKVxuICAgICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKVxuICAgICAgICBpZiAoZG9QaXBlRXJyb3IpIHtcbiAgICAgICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcilcbiAgICAgICAgfVxuICAgICAgICBuZXh0KClcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIG9uZXJyb3IgKGVycikge1xuICAgICAgICBtZXJnZWRTdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgICB9XG4gICAgICAvLyBza2lwIGVuZGVkIHN0cmVhbVxuICAgICAgaWYgKHN0cmVhbS5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgICAgIHJldHVybiBuZXh0KClcbiAgICAgIH1cblxuICAgICAgc3RyZWFtLm9uKCdtZXJnZTJVbnBpcGVFbmQnLCBvbmVuZClcbiAgICAgIHN0cmVhbS5vbignZW5kJywgb25lbmQpXG5cbiAgICAgIGlmIChkb1BpcGVFcnJvcikge1xuICAgICAgICBzdHJlYW0ub24oJ2Vycm9yJywgb25lcnJvcilcbiAgICAgIH1cblxuICAgICAgc3RyZWFtLnBpcGUobWVyZ2VkU3RyZWFtLCB7IGVuZDogZmFsc2UgfSlcbiAgICAgIC8vIGNvbXBhdGlibGUgZm9yIG9sZCBzdHJlYW1cbiAgICAgIHN0cmVhbS5yZXN1bWUoKVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyZWFtcy5sZW5ndGg7IGkrKykge1xuICAgICAgcGlwZShzdHJlYW1zW2ldKVxuICAgIH1cblxuICAgIG5leHQoKVxuICB9XG5cbiAgZnVuY3Rpb24gZW5kU3RyZWFtICgpIHtcbiAgICBtZXJnaW5nID0gZmFsc2VcbiAgICAvLyBlbWl0ICdxdWV1ZURyYWluJyB3aGVuIGFsbCBzdHJlYW1zIG1lcmdlZC5cbiAgICBtZXJnZWRTdHJlYW0uZW1pdCgncXVldWVEcmFpbicpXG4gICAgaWYgKGRvRW5kKSB7XG4gICAgICBtZXJnZWRTdHJlYW0uZW5kKClcbiAgICB9XG4gIH1cblxuICBtZXJnZWRTdHJlYW0uc2V0TWF4TGlzdGVuZXJzKDApXG4gIG1lcmdlZFN0cmVhbS5hZGQgPSBhZGRTdHJlYW1cbiAgbWVyZ2VkU3RyZWFtLm9uKCd1bnBpcGUnLCBmdW5jdGlvbiAoc3RyZWFtKSB7XG4gICAgc3RyZWFtLmVtaXQoJ21lcmdlMlVucGlwZUVuZCcpXG4gIH0pXG5cbiAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgYWRkU3RyZWFtLmFwcGx5KG51bGwsIGFyZ3MpXG4gIH1cbiAgcmV0dXJuIG1lcmdlZFN0cmVhbVxufVxuXG4vLyBjaGVjayBhbmQgcGF1c2Ugc3RyZWFtcyBmb3IgcGlwZS5cbmZ1bmN0aW9uIHBhdXNlU3RyZWFtcyAoc3RyZWFtcywgb3B0aW9ucykge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoc3RyZWFtcykpIHtcbiAgICAvLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggb2xkLXN0eWxlIHN0cmVhbXNcbiAgICBpZiAoIXN0cmVhbXMuX3JlYWRhYmxlU3RhdGUgJiYgc3RyZWFtcy5waXBlKSB7XG4gICAgICBzdHJlYW1zID0gc3RyZWFtcy5waXBlKFBhc3NUaHJvdWdoKG9wdGlvbnMpKVxuICAgIH1cbiAgICBpZiAoIXN0cmVhbXMuX3JlYWRhYmxlU3RhdGUgfHwgIXN0cmVhbXMucGF1c2UgfHwgIXN0cmVhbXMucGlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IHJlYWRhYmxlIHN0cmVhbSBjYW4gYmUgbWVyZ2VkLicpXG4gICAgfVxuICAgIHN0cmVhbXMucGF1c2UoKVxuICB9IGVsc2Uge1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzdHJlYW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBzdHJlYW1zW2ldID0gcGF1c2VTdHJlYW1zKHN0cmVhbXNbaV0sIG9wdGlvbnMpXG4gICAgfVxuICB9XG4gIHJldHVybiBzdHJlYW1zXG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNwbGl0V2hlbiA9IGV4cG9ydHMuZmxhdHRlbiA9IHZvaWQgMDtcbmZ1bmN0aW9uIGZsYXR0ZW4oaXRlbXMpIHtcbiAgICByZXR1cm4gaXRlbXMucmVkdWNlKChjb2xsZWN0aW9uLCBpdGVtKSA9PiBbXS5jb25jYXQoY29sbGVjdGlvbiwgaXRlbSksIFtdKTtcbn1cbmV4cG9ydHMuZmxhdHRlbiA9IGZsYXR0ZW47XG5mdW5jdGlvbiBzcGxpdFdoZW4oaXRlbXMsIHByZWRpY2F0ZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtbXV07XG4gICAgbGV0IGdyb3VwSW5kZXggPSAwO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICBpZiAocHJlZGljYXRlKGl0ZW0pKSB7XG4gICAgICAgICAgICBncm91cEluZGV4Kys7XG4gICAgICAgICAgICByZXN1bHRbZ3JvdXBJbmRleF0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdFtncm91cEluZGV4XS5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLnNwbGl0V2hlbiA9IHNwbGl0V2hlbjtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNFbm9lbnRDb2RlRXJyb3IgPSB2b2lkIDA7XG5mdW5jdGlvbiBpc0Vub2VudENvZGVFcnJvcihlcnJvcikge1xuICAgIHJldHVybiBlcnJvci5jb2RlID09PSAnRU5PRU5UJztcbn1cbmV4cG9ydHMuaXNFbm9lbnRDb2RlRXJyb3IgPSBpc0Vub2VudENvZGVFcnJvcjtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlRGlyZW50RnJvbVN0YXRzID0gdm9pZCAwO1xuY2xhc3MgRGlyZW50RnJvbVN0YXRzIHtcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBzdGF0cykge1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLmlzQmxvY2tEZXZpY2UgPSBzdGF0cy5pc0Jsb2NrRGV2aWNlLmJpbmQoc3RhdHMpO1xuICAgICAgICB0aGlzLmlzQ2hhcmFjdGVyRGV2aWNlID0gc3RhdHMuaXNDaGFyYWN0ZXJEZXZpY2UuYmluZChzdGF0cyk7XG4gICAgICAgIHRoaXMuaXNEaXJlY3RvcnkgPSBzdGF0cy5pc0RpcmVjdG9yeS5iaW5kKHN0YXRzKTtcbiAgICAgICAgdGhpcy5pc0ZJRk8gPSBzdGF0cy5pc0ZJRk8uYmluZChzdGF0cyk7XG4gICAgICAgIHRoaXMuaXNGaWxlID0gc3RhdHMuaXNGaWxlLmJpbmQoc3RhdHMpO1xuICAgICAgICB0aGlzLmlzU29ja2V0ID0gc3RhdHMuaXNTb2NrZXQuYmluZChzdGF0cyk7XG4gICAgICAgIHRoaXMuaXNTeW1ib2xpY0xpbmsgPSBzdGF0cy5pc1N5bWJvbGljTGluay5iaW5kKHN0YXRzKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjcmVhdGVEaXJlbnRGcm9tU3RhdHMobmFtZSwgc3RhdHMpIHtcbiAgICByZXR1cm4gbmV3IERpcmVudEZyb21TdGF0cyhuYW1lLCBzdGF0cyk7XG59XG5leHBvcnRzLmNyZWF0ZURpcmVudEZyb21TdGF0cyA9IGNyZWF0ZURpcmVudEZyb21TdGF0cztcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29udmVydFBvc2l4UGF0aFRvUGF0dGVybiA9IGV4cG9ydHMuY29udmVydFdpbmRvd3NQYXRoVG9QYXR0ZXJuID0gZXhwb3J0cy5jb252ZXJ0UGF0aFRvUGF0dGVybiA9IGV4cG9ydHMuZXNjYXBlUG9zaXhQYXRoID0gZXhwb3J0cy5lc2NhcGVXaW5kb3dzUGF0aCA9IGV4cG9ydHMuZXNjYXBlID0gZXhwb3J0cy5yZW1vdmVMZWFkaW5nRG90U2VnbWVudCA9IGV4cG9ydHMubWFrZUFic29sdXRlID0gZXhwb3J0cy51bml4aWZ5ID0gdm9pZCAwO1xuY29uc3Qgb3MgPSByZXF1aXJlKFwib3NcIik7XG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XG5jb25zdCBJU19XSU5ET1dTX1BMQVRGT1JNID0gb3MucGxhdGZvcm0oKSA9PT0gJ3dpbjMyJztcbmNvbnN0IExFQURJTkdfRE9UX1NFR01FTlRfQ0hBUkFDVEVSU19DT1VOVCA9IDI7IC8vIC4vIG9yIC5cXFxcXG4vKipcbiAqIEFsbCBub24tZXNjYXBlZCBzcGVjaWFsIGNoYXJhY3RlcnMuXG4gKiBQb3NpeDogKCkqP1tcXF17fH0sICErQCBiZWZvcmUgKCwgISBhdCB0aGUgYmVnaW5uaW5nLCBcXFxcIGJlZm9yZSBub24tc3BlY2lhbCBjaGFyYWN0ZXJzLlxuICogV2luZG93czogKCl7fSwgIStAIGJlZm9yZSAoLCAhIGF0IHRoZSBiZWdpbm5pbmcuXG4gKi9cbmNvbnN0IFBPU0lYX1VORVNDQVBFRF9HTE9CX1NZTUJPTFNfUkUgPSAvKFxcXFw/KShbKCkqP1tcXF17fH1dfF4hfFshK0BdKD89XFwoKXxcXFxcKD8hWyEoKSorP0BbXFxde3x9XSkpL2c7XG5jb25zdCBXSU5ET1dTX1VORVNDQVBFRF9HTE9CX1NZTUJPTFNfUkUgPSAvKFxcXFw/KShbKCl7fV18XiF8WyErQF0oPz1cXCgpKS9nO1xuLyoqXG4gKiBUaGUgZGV2aWNlIHBhdGggKFxcXFwuXFwgb3IgXFxcXD9cXCkuXG4gKiBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZW4tdXMvZG90bmV0L3N0YW5kYXJkL2lvL2ZpbGUtcGF0aC1mb3JtYXRzI2Rvcy1kZXZpY2UtcGF0aHNcbiAqL1xuY29uc3QgRE9TX0RFVklDRV9QQVRIX1JFID0gL15cXFxcXFxcXChbLj9dKS87XG4vKipcbiAqIEFsbCBiYWNrc2xhc2hlcyBleGNlcHQgdGhvc2UgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzLlxuICogV2luZG93czogISgpK0B7fVxuICogaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL3dpbmRvd3Mvd2luMzIvZmlsZWlvL25hbWluZy1hLWZpbGUjbmFtaW5nLWNvbnZlbnRpb25zXG4gKi9cbmNvbnN0IFdJTkRPV1NfQkFDS1NMQVNIRVNfUkUgPSAvXFxcXCg/IVshKCkrQHt9XSkvZztcbi8qKlxuICogRGVzaWduZWQgdG8gd29yayBvbmx5IHdpdGggc2ltcGxlIHBhdGhzOiBgZGlyXFxcXGZpbGVgLlxuICovXG5mdW5jdGlvbiB1bml4aWZ5KGZpbGVwYXRoKSB7XG4gICAgcmV0dXJuIGZpbGVwYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbn1cbmV4cG9ydHMudW5peGlmeSA9IHVuaXhpZnk7XG5mdW5jdGlvbiBtYWtlQWJzb2x1dGUoY3dkLCBmaWxlcGF0aCkge1xuICAgIHJldHVybiBwYXRoLnJlc29sdmUoY3dkLCBmaWxlcGF0aCk7XG59XG5leHBvcnRzLm1ha2VBYnNvbHV0ZSA9IG1ha2VBYnNvbHV0ZTtcbmZ1bmN0aW9uIHJlbW92ZUxlYWRpbmdEb3RTZWdtZW50KGVudHJ5KSB7XG4gICAgLy8gV2UgZG8gbm90IHVzZSBgc3RhcnRzV2l0aGAgYmVjYXVzZSB0aGlzIGlzIDEweCBzbG93ZXIgdGhhbiBjdXJyZW50IGltcGxlbWVudGF0aW9uIGZvciBzb21lIGNhc2VzLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLXN0cmluZy1zdGFydHMtZW5kcy13aXRoXG4gICAgaWYgKGVudHJ5LmNoYXJBdCgwKSA9PT0gJy4nKSB7XG4gICAgICAgIGNvbnN0IHNlY29uZENoYXJhY3RlcnkgPSBlbnRyeS5jaGFyQXQoMSk7XG4gICAgICAgIGlmIChzZWNvbmRDaGFyYWN0ZXJ5ID09PSAnLycgfHwgc2Vjb25kQ2hhcmFjdGVyeSA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICByZXR1cm4gZW50cnkuc2xpY2UoTEVBRElOR19ET1RfU0VHTUVOVF9DSEFSQUNURVJTX0NPVU5UKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZW50cnk7XG59XG5leHBvcnRzLnJlbW92ZUxlYWRpbmdEb3RTZWdtZW50ID0gcmVtb3ZlTGVhZGluZ0RvdFNlZ21lbnQ7XG5leHBvcnRzLmVzY2FwZSA9IElTX1dJTkRPV1NfUExBVEZPUk0gPyBlc2NhcGVXaW5kb3dzUGF0aCA6IGVzY2FwZVBvc2l4UGF0aDtcbmZ1bmN0aW9uIGVzY2FwZVdpbmRvd3NQYXRoKHBhdHRlcm4pIHtcbiAgICByZXR1cm4gcGF0dGVybi5yZXBsYWNlKFdJTkRPV1NfVU5FU0NBUEVEX0dMT0JfU1lNQk9MU19SRSwgJ1xcXFwkMicpO1xufVxuZXhwb3J0cy5lc2NhcGVXaW5kb3dzUGF0aCA9IGVzY2FwZVdpbmRvd3NQYXRoO1xuZnVuY3Rpb24gZXNjYXBlUG9zaXhQYXRoKHBhdHRlcm4pIHtcbiAgICByZXR1cm4gcGF0dGVybi5yZXBsYWNlKFBPU0lYX1VORVNDQVBFRF9HTE9CX1NZTUJPTFNfUkUsICdcXFxcJDInKTtcbn1cbmV4cG9ydHMuZXNjYXBlUG9zaXhQYXRoID0gZXNjYXBlUG9zaXhQYXRoO1xuZXhwb3J0cy5jb252ZXJ0UGF0aFRvUGF0dGVybiA9IElTX1dJTkRPV1NfUExBVEZPUk0gPyBjb252ZXJ0V2luZG93c1BhdGhUb1BhdHRlcm4gOiBjb252ZXJ0UG9zaXhQYXRoVG9QYXR0ZXJuO1xuZnVuY3Rpb24gY29udmVydFdpbmRvd3NQYXRoVG9QYXR0ZXJuKGZpbGVwYXRoKSB7XG4gICAgcmV0dXJuIGVzY2FwZVdpbmRvd3NQYXRoKGZpbGVwYXRoKVxuICAgICAgICAucmVwbGFjZShET1NfREVWSUNFX1BBVEhfUkUsICcvLyQxJylcbiAgICAgICAgLnJlcGxhY2UoV0lORE9XU19CQUNLU0xBU0hFU19SRSwgJy8nKTtcbn1cbmV4cG9ydHMuY29udmVydFdpbmRvd3NQYXRoVG9QYXR0ZXJuID0gY29udmVydFdpbmRvd3NQYXRoVG9QYXR0ZXJuO1xuZnVuY3Rpb24gY29udmVydFBvc2l4UGF0aFRvUGF0dGVybihmaWxlcGF0aCkge1xuICAgIHJldHVybiBlc2NhcGVQb3NpeFBhdGgoZmlsZXBhdGgpO1xufVxuZXhwb3J0cy5jb252ZXJ0UG9zaXhQYXRoVG9QYXR0ZXJuID0gY29udmVydFBvc2l4UGF0aFRvUGF0dGVybjtcbiIsICIvKiFcbiAqIGlzLWV4dGdsb2IgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2lzLWV4dGdsb2I+XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTYsIEpvbiBTY2hsaW5rZXJ0LlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNFeHRnbG9iKHN0cikge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycgfHwgc3RyID09PSAnJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBtYXRjaDtcbiAgd2hpbGUgKChtYXRjaCA9IC8oXFxcXCkufChbQD8hKypdXFwoLipcXCkpL2cuZXhlYyhzdHIpKSkge1xuICAgIGlmIChtYXRjaFsyXSkgcmV0dXJuIHRydWU7XG4gICAgc3RyID0gc3RyLnNsaWNlKG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG4iLCAiLyohXG4gKiBpcy1nbG9iIDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9pcy1nbG9iPlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE3LCBKb24gU2NobGlua2VydC5cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXG52YXIgaXNFeHRnbG9iID0gcmVxdWlyZSgnaXMtZXh0Z2xvYicpO1xudmFyIGNoYXJzID0geyAneyc6ICd9JywgJygnOiAnKScsICdbJzogJ10nfTtcbnZhciBzdHJpY3RDaGVjayA9IGZ1bmN0aW9uKHN0cikge1xuICBpZiAoc3RyWzBdID09PSAnIScpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgcGlwZUluZGV4ID0gLTI7XG4gIHZhciBjbG9zZVNxdWFyZUluZGV4ID0gLTI7XG4gIHZhciBjbG9zZUN1cmx5SW5kZXggPSAtMjtcbiAgdmFyIGNsb3NlUGFyZW5JbmRleCA9IC0yO1xuICB2YXIgYmFja1NsYXNoSW5kZXggPSAtMjtcbiAgd2hpbGUgKGluZGV4IDwgc3RyLmxlbmd0aCkge1xuICAgIGlmIChzdHJbaW5kZXhdID09PSAnKicpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdHJbaW5kZXggKyAxXSA9PT0gJz8nICYmIC9bXFxdLispXS8udGVzdChzdHJbaW5kZXhdKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGNsb3NlU3F1YXJlSW5kZXggIT09IC0xICYmIHN0cltpbmRleF0gPT09ICdbJyAmJiBzdHJbaW5kZXggKyAxXSAhPT0gJ10nKSB7XG4gICAgICBpZiAoY2xvc2VTcXVhcmVJbmRleCA8IGluZGV4KSB7XG4gICAgICAgIGNsb3NlU3F1YXJlSW5kZXggPSBzdHIuaW5kZXhPZignXScsIGluZGV4KTtcbiAgICAgIH1cbiAgICAgIGlmIChjbG9zZVNxdWFyZUluZGV4ID4gaW5kZXgpIHtcbiAgICAgICAgaWYgKGJhY2tTbGFzaEluZGV4ID09PSAtMSB8fCBiYWNrU2xhc2hJbmRleCA+IGNsb3NlU3F1YXJlSW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBiYWNrU2xhc2hJbmRleCA9IHN0ci5pbmRleE9mKCdcXFxcJywgaW5kZXgpO1xuICAgICAgICBpZiAoYmFja1NsYXNoSW5kZXggPT09IC0xIHx8IGJhY2tTbGFzaEluZGV4ID4gY2xvc2VTcXVhcmVJbmRleCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNsb3NlQ3VybHlJbmRleCAhPT0gLTEgJiYgc3RyW2luZGV4XSA9PT0gJ3snICYmIHN0cltpbmRleCArIDFdICE9PSAnfScpIHtcbiAgICAgIGNsb3NlQ3VybHlJbmRleCA9IHN0ci5pbmRleE9mKCd9JywgaW5kZXgpO1xuICAgICAgaWYgKGNsb3NlQ3VybHlJbmRleCA+IGluZGV4KSB7XG4gICAgICAgIGJhY2tTbGFzaEluZGV4ID0gc3RyLmluZGV4T2YoJ1xcXFwnLCBpbmRleCk7XG4gICAgICAgIGlmIChiYWNrU2xhc2hJbmRleCA9PT0gLTEgfHwgYmFja1NsYXNoSW5kZXggPiBjbG9zZUN1cmx5SW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjbG9zZVBhcmVuSW5kZXggIT09IC0xICYmIHN0cltpbmRleF0gPT09ICcoJyAmJiBzdHJbaW5kZXggKyAxXSA9PT0gJz8nICYmIC9bOiE9XS8udGVzdChzdHJbaW5kZXggKyAyXSkgJiYgc3RyW2luZGV4ICsgM10gIT09ICcpJykge1xuICAgICAgY2xvc2VQYXJlbkluZGV4ID0gc3RyLmluZGV4T2YoJyknLCBpbmRleCk7XG4gICAgICBpZiAoY2xvc2VQYXJlbkluZGV4ID4gaW5kZXgpIHtcbiAgICAgICAgYmFja1NsYXNoSW5kZXggPSBzdHIuaW5kZXhPZignXFxcXCcsIGluZGV4KTtcbiAgICAgICAgaWYgKGJhY2tTbGFzaEluZGV4ID09PSAtMSB8fCBiYWNrU2xhc2hJbmRleCA+IGNsb3NlUGFyZW5JbmRleCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBpcGVJbmRleCAhPT0gLTEgJiYgc3RyW2luZGV4XSA9PT0gJygnICYmIHN0cltpbmRleCArIDFdICE9PSAnfCcpIHtcbiAgICAgIGlmIChwaXBlSW5kZXggPCBpbmRleCkge1xuICAgICAgICBwaXBlSW5kZXggPSBzdHIuaW5kZXhPZignfCcsIGluZGV4KTtcbiAgICAgIH1cbiAgICAgIGlmIChwaXBlSW5kZXggIT09IC0xICYmIHN0cltwaXBlSW5kZXggKyAxXSAhPT0gJyknKSB7XG4gICAgICAgIGNsb3NlUGFyZW5JbmRleCA9IHN0ci5pbmRleE9mKCcpJywgcGlwZUluZGV4KTtcbiAgICAgICAgaWYgKGNsb3NlUGFyZW5JbmRleCA+IHBpcGVJbmRleCkge1xuICAgICAgICAgIGJhY2tTbGFzaEluZGV4ID0gc3RyLmluZGV4T2YoJ1xcXFwnLCBwaXBlSW5kZXgpO1xuICAgICAgICAgIGlmIChiYWNrU2xhc2hJbmRleCA9PT0gLTEgfHwgYmFja1NsYXNoSW5kZXggPiBjbG9zZVBhcmVuSW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdHJbaW5kZXhdID09PSAnXFxcXCcpIHtcbiAgICAgIHZhciBvcGVuID0gc3RyW2luZGV4ICsgMV07XG4gICAgICBpbmRleCArPSAyO1xuICAgICAgdmFyIGNsb3NlID0gY2hhcnNbb3Blbl07XG5cbiAgICAgIGlmIChjbG9zZSkge1xuICAgICAgICB2YXIgbiA9IHN0ci5pbmRleE9mKGNsb3NlLCBpbmRleCk7XG4gICAgICAgIGlmIChuICE9PSAtMSkge1xuICAgICAgICAgIGluZGV4ID0gbiArIDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN0cltpbmRleF0gPT09ICchJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaW5kZXgrKztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxudmFyIHJlbGF4ZWRDaGVjayA9IGZ1bmN0aW9uKHN0cikge1xuICBpZiAoc3RyWzBdID09PSAnIScpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgaW5kZXggPSAwO1xuICB3aGlsZSAoaW5kZXggPCBzdHIubGVuZ3RoKSB7XG4gICAgaWYgKC9bKj97fSgpW1xcXV0vLnRlc3Qoc3RyW2luZGV4XSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdHJbaW5kZXhdID09PSAnXFxcXCcpIHtcbiAgICAgIHZhciBvcGVuID0gc3RyW2luZGV4ICsgMV07XG4gICAgICBpbmRleCArPSAyO1xuICAgICAgdmFyIGNsb3NlID0gY2hhcnNbb3Blbl07XG5cbiAgICAgIGlmIChjbG9zZSkge1xuICAgICAgICB2YXIgbiA9IHN0ci5pbmRleE9mKGNsb3NlLCBpbmRleCk7XG4gICAgICAgIGlmIChuICE9PSAtMSkge1xuICAgICAgICAgIGluZGV4ID0gbiArIDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN0cltpbmRleF0gPT09ICchJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaW5kZXgrKztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0dsb2Ioc3RyLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJyB8fCBzdHIgPT09ICcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzRXh0Z2xvYihzdHIpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgY2hlY2sgPSBzdHJpY3RDaGVjaztcblxuICAvLyBvcHRpb25hbGx5IHJlbGF4IGNoZWNrXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc3RyaWN0ID09PSBmYWxzZSkge1xuICAgIGNoZWNrID0gcmVsYXhlZENoZWNrO1xuICB9XG5cbiAgcmV0dXJuIGNoZWNrKHN0cik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIGlzR2xvYiA9IHJlcXVpcmUoJ2lzLWdsb2InKTtcbnZhciBwYXRoUG9zaXhEaXJuYW1lID0gcmVxdWlyZSgncGF0aCcpLnBvc2l4LmRpcm5hbWU7XG52YXIgaXNXaW4zMiA9IHJlcXVpcmUoJ29zJykucGxhdGZvcm0oKSA9PT0gJ3dpbjMyJztcblxudmFyIHNsYXNoID0gJy8nO1xudmFyIGJhY2tzbGFzaCA9IC9cXFxcL2c7XG52YXIgZW5jbG9zdXJlID0gL1tcXHtcXFtdLipbXFx9XFxdXSQvO1xudmFyIGdsb2JieSA9IC8oXnxbXlxcXFxdKShbXFx7XFxbXXxcXChbXlxcKV0rJCkvO1xudmFyIGVzY2FwZWQgPSAvXFxcXChbXFwhXFwqXFw/XFx8XFxbXFxdXFwoXFwpXFx7XFx9XSkvZztcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5mbGlwQmFja3NsYXNoZXM9dHJ1ZV1cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2xvYlBhcmVudChzdHIsIG9wdHMpIHtcbiAgdmFyIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHsgZmxpcEJhY2tzbGFzaGVzOiB0cnVlIH0sIG9wdHMpO1xuXG4gIC8vIGZsaXAgd2luZG93cyBwYXRoIHNlcGFyYXRvcnNcbiAgaWYgKG9wdGlvbnMuZmxpcEJhY2tzbGFzaGVzICYmIGlzV2luMzIgJiYgc3RyLmluZGV4T2Yoc2xhc2gpIDwgMCkge1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKGJhY2tzbGFzaCwgc2xhc2gpO1xuICB9XG5cbiAgLy8gc3BlY2lhbCBjYXNlIGZvciBzdHJpbmdzIGVuZGluZyBpbiBlbmNsb3N1cmUgY29udGFpbmluZyBwYXRoIHNlcGFyYXRvclxuICBpZiAoZW5jbG9zdXJlLnRlc3Qoc3RyKSkge1xuICAgIHN0ciArPSBzbGFzaDtcbiAgfVxuXG4gIC8vIHByZXNlcnZlcyBmdWxsIHBhdGggaW4gY2FzZSBvZiB0cmFpbGluZyBwYXRoIHNlcGFyYXRvclxuICBzdHIgKz0gJ2EnO1xuXG4gIC8vIHJlbW92ZSBwYXRoIHBhcnRzIHRoYXQgYXJlIGdsb2JieVxuICBkbyB7XG4gICAgc3RyID0gcGF0aFBvc2l4RGlybmFtZShzdHIpO1xuICB9IHdoaWxlIChpc0dsb2Ioc3RyKSB8fCBnbG9iYnkudGVzdChzdHIpKTtcblxuICAvLyByZW1vdmUgZXNjYXBlIGNoYXJzIGFuZCByZXR1cm4gcmVzdWx0XG4gIHJldHVybiBzdHIucmVwbGFjZShlc2NhcGVkLCAnJDEnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmlzSW50ZWdlciA9IG51bSA9PiB7XG4gIGlmICh0eXBlb2YgbnVtID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKG51bSk7XG4gIH1cbiAgaWYgKHR5cGVvZiBudW0gPT09ICdzdHJpbmcnICYmIG51bS50cmltKCkgIT09ICcnKSB7XG4gICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIoTnVtYmVyKG51bSkpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRmluZCBhIG5vZGUgb2YgdGhlIGdpdmVuIHR5cGVcbiAqL1xuXG5leHBvcnRzLmZpbmQgPSAobm9kZSwgdHlwZSkgPT4gbm9kZS5ub2Rlcy5maW5kKG5vZGUgPT4gbm9kZS50eXBlID09PSB0eXBlKTtcblxuLyoqXG4gKiBGaW5kIGEgbm9kZSBvZiB0aGUgZ2l2ZW4gdHlwZVxuICovXG5cbmV4cG9ydHMuZXhjZWVkc0xpbWl0ID0gKG1pbiwgbWF4LCBzdGVwID0gMSwgbGltaXQpID0+IHtcbiAgaWYgKGxpbWl0ID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoIWV4cG9ydHMuaXNJbnRlZ2VyKG1pbikgfHwgIWV4cG9ydHMuaXNJbnRlZ2VyKG1heCkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuICgoTnVtYmVyKG1heCkgLSBOdW1iZXIobWluKSkgLyBOdW1iZXIoc3RlcCkpID49IGxpbWl0O1xufTtcblxuLyoqXG4gKiBFc2NhcGUgdGhlIGdpdmVuIG5vZGUgd2l0aCAnXFxcXCcgYmVmb3JlIG5vZGUudmFsdWVcbiAqL1xuXG5leHBvcnRzLmVzY2FwZU5vZGUgPSAoYmxvY2ssIG4gPSAwLCB0eXBlKSA9PiB7XG4gIGxldCBub2RlID0gYmxvY2subm9kZXNbbl07XG4gIGlmICghbm9kZSkgcmV0dXJuO1xuXG4gIGlmICgodHlwZSAmJiBub2RlLnR5cGUgPT09IHR5cGUpIHx8IG5vZGUudHlwZSA9PT0gJ29wZW4nIHx8IG5vZGUudHlwZSA9PT0gJ2Nsb3NlJykge1xuICAgIGlmIChub2RlLmVzY2FwZWQgIT09IHRydWUpIHtcbiAgICAgIG5vZGUudmFsdWUgPSAnXFxcXCcgKyBub2RlLnZhbHVlO1xuICAgICAgbm9kZS5lc2NhcGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBicmFjZSBub2RlIHNob3VsZCBiZSBlbmNsb3NlZCBpbiBsaXRlcmFsIGJyYWNlc1xuICovXG5cbmV4cG9ydHMuZW5jbG9zZUJyYWNlID0gbm9kZSA9PiB7XG4gIGlmIChub2RlLnR5cGUgIT09ICdicmFjZScpIHJldHVybiBmYWxzZTtcbiAgaWYgKChub2RlLmNvbW1hcyA+PiAwICsgbm9kZS5yYW5nZXMgPj4gMCkgPT09IDApIHtcbiAgICBub2RlLmludmFsaWQgPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGEgYnJhY2Ugbm9kZSBpcyBpbnZhbGlkLlxuICovXG5cbmV4cG9ydHMuaXNJbnZhbGlkQnJhY2UgPSBibG9jayA9PiB7XG4gIGlmIChibG9jay50eXBlICE9PSAnYnJhY2UnKSByZXR1cm4gZmFsc2U7XG4gIGlmIChibG9jay5pbnZhbGlkID09PSB0cnVlIHx8IGJsb2NrLmRvbGxhcikgcmV0dXJuIHRydWU7XG4gIGlmICgoYmxvY2suY29tbWFzID4+IDAgKyBibG9jay5yYW5nZXMgPj4gMCkgPT09IDApIHtcbiAgICBibG9jay5pbnZhbGlkID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoYmxvY2sub3BlbiAhPT0gdHJ1ZSB8fCBibG9jay5jbG9zZSAhPT0gdHJ1ZSkge1xuICAgIGJsb2NrLmludmFsaWQgPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGEgbm9kZSBpcyBhbiBvcGVuIG9yIGNsb3NlIG5vZGVcbiAqL1xuXG5leHBvcnRzLmlzT3Blbk9yQ2xvc2UgPSBub2RlID0+IHtcbiAgaWYgKG5vZGUudHlwZSA9PT0gJ29wZW4nIHx8IG5vZGUudHlwZSA9PT0gJ2Nsb3NlJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBub2RlLm9wZW4gPT09IHRydWUgfHwgbm9kZS5jbG9zZSA9PT0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmVkdWNlIGFuIGFycmF5IG9mIHRleHQgbm9kZXMuXG4gKi9cblxuZXhwb3J0cy5yZWR1Y2UgPSBub2RlcyA9PiBub2Rlcy5yZWR1Y2UoKGFjYywgbm9kZSkgPT4ge1xuICBpZiAobm9kZS50eXBlID09PSAndGV4dCcpIGFjYy5wdXNoKG5vZGUudmFsdWUpO1xuICBpZiAobm9kZS50eXBlID09PSAncmFuZ2UnKSBub2RlLnR5cGUgPSAndGV4dCc7XG4gIHJldHVybiBhY2M7XG59LCBbXSk7XG5cbi8qKlxuICogRmxhdHRlbiBhbiBhcnJheVxuICovXG5cbmV4cG9ydHMuZmxhdHRlbiA9ICguLi5hcmdzKSA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBjb25zdCBmbGF0ID0gYXJyID0+IHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGVsZSA9IGFycltpXTtcbiAgICAgIEFycmF5LmlzQXJyYXkoZWxlKSA/IGZsYXQoZWxlLCByZXN1bHQpIDogZWxlICE9PSB2b2lkIDAgJiYgcmVzdWx0LnB1c2goZWxlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgZmxhdChhcmdzKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoYXN0LCBvcHRpb25zID0ge30pID0+IHtcbiAgbGV0IHN0cmluZ2lmeSA9IChub2RlLCBwYXJlbnQgPSB7fSkgPT4ge1xuICAgIGxldCBpbnZhbGlkQmxvY2sgPSBvcHRpb25zLmVzY2FwZUludmFsaWQgJiYgdXRpbHMuaXNJbnZhbGlkQnJhY2UocGFyZW50KTtcbiAgICBsZXQgaW52YWxpZE5vZGUgPSBub2RlLmludmFsaWQgPT09IHRydWUgJiYgb3B0aW9ucy5lc2NhcGVJbnZhbGlkID09PSB0cnVlO1xuICAgIGxldCBvdXRwdXQgPSAnJztcblxuICAgIGlmIChub2RlLnZhbHVlKSB7XG4gICAgICBpZiAoKGludmFsaWRCbG9jayB8fCBpbnZhbGlkTm9kZSkgJiYgdXRpbHMuaXNPcGVuT3JDbG9zZShub2RlKSkge1xuICAgICAgICByZXR1cm4gJ1xcXFwnICsgbm9kZS52YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBub2RlLnZhbHVlO1xuICAgIH1cblxuICAgIGlmIChub2RlLnZhbHVlKSB7XG4gICAgICByZXR1cm4gbm9kZS52YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5ub2Rlcykge1xuICAgICAgZm9yIChsZXQgY2hpbGQgb2Ygbm9kZS5ub2Rlcykge1xuICAgICAgICBvdXRwdXQgKz0gc3RyaW5naWZ5KGNoaWxkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcblxuICByZXR1cm4gc3RyaW5naWZ5KGFzdCk7XG59O1xuXG4iLCAiLyohXG4gKiBpcy1udW1iZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2lzLW51bWJlcj5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgSm9uIFNjaGxpbmtlcnQuXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG51bSkge1xuICBpZiAodHlwZW9mIG51bSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbnVtIC0gbnVtID09PSAwO1xuICB9XG4gIGlmICh0eXBlb2YgbnVtID09PSAnc3RyaW5nJyAmJiBudW0udHJpbSgpICE9PSAnJykge1xuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUgPyBOdW1iZXIuaXNGaW5pdGUoK251bSkgOiBpc0Zpbml0ZSgrbnVtKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuIiwgIi8qIVxuICogdG8tcmVnZXgtcmFuZ2UgPGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb21hdGNoL3RvLXJlZ2V4LXJhbmdlPlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNS1wcmVzZW50LCBKb24gU2NobGlua2VydC5cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IGlzTnVtYmVyID0gcmVxdWlyZSgnaXMtbnVtYmVyJyk7XG5cbmNvbnN0IHRvUmVnZXhSYW5nZSA9IChtaW4sIG1heCwgb3B0aW9ucykgPT4ge1xuICBpZiAoaXNOdW1iZXIobWluKSA9PT0gZmFsc2UpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0b1JlZ2V4UmFuZ2U6IGV4cGVjdGVkIHRoZSBmaXJzdCBhcmd1bWVudCB0byBiZSBhIG51bWJlcicpO1xuICB9XG5cbiAgaWYgKG1heCA9PT0gdm9pZCAwIHx8IG1pbiA9PT0gbWF4KSB7XG4gICAgcmV0dXJuIFN0cmluZyhtaW4pO1xuICB9XG5cbiAgaWYgKGlzTnVtYmVyKG1heCkgPT09IGZhbHNlKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndG9SZWdleFJhbmdlOiBleHBlY3RlZCB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgbnVtYmVyLicpO1xuICB9XG5cbiAgbGV0IG9wdHMgPSB7IHJlbGF4WmVyb3M6IHRydWUsIC4uLm9wdGlvbnMgfTtcbiAgaWYgKHR5cGVvZiBvcHRzLnN0cmljdFplcm9zID09PSAnYm9vbGVhbicpIHtcbiAgICBvcHRzLnJlbGF4WmVyb3MgPSBvcHRzLnN0cmljdFplcm9zID09PSBmYWxzZTtcbiAgfVxuXG4gIGxldCByZWxheCA9IFN0cmluZyhvcHRzLnJlbGF4WmVyb3MpO1xuICBsZXQgc2hvcnRoYW5kID0gU3RyaW5nKG9wdHMuc2hvcnRoYW5kKTtcbiAgbGV0IGNhcHR1cmUgPSBTdHJpbmcob3B0cy5jYXB0dXJlKTtcbiAgbGV0IHdyYXAgPSBTdHJpbmcob3B0cy53cmFwKTtcbiAgbGV0IGNhY2hlS2V5ID0gbWluICsgJzonICsgbWF4ICsgJz0nICsgcmVsYXggKyBzaG9ydGhhbmQgKyBjYXB0dXJlICsgd3JhcDtcblxuICBpZiAodG9SZWdleFJhbmdlLmNhY2hlLmhhc093blByb3BlcnR5KGNhY2hlS2V5KSkge1xuICAgIHJldHVybiB0b1JlZ2V4UmFuZ2UuY2FjaGVbY2FjaGVLZXldLnJlc3VsdDtcbiAgfVxuXG4gIGxldCBhID0gTWF0aC5taW4obWluLCBtYXgpO1xuICBsZXQgYiA9IE1hdGgubWF4KG1pbiwgbWF4KTtcblxuICBpZiAoTWF0aC5hYnMoYSAtIGIpID09PSAxKSB7XG4gICAgbGV0IHJlc3VsdCA9IG1pbiArICd8JyArIG1heDtcbiAgICBpZiAob3B0cy5jYXB0dXJlKSB7XG4gICAgICByZXR1cm4gYCgke3Jlc3VsdH0pYDtcbiAgICB9XG4gICAgaWYgKG9wdHMud3JhcCA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiBgKD86JHtyZXN1bHR9KWA7XG4gIH1cblxuICBsZXQgaXNQYWRkZWQgPSBoYXNQYWRkaW5nKG1pbikgfHwgaGFzUGFkZGluZyhtYXgpO1xuICBsZXQgc3RhdGUgPSB7IG1pbiwgbWF4LCBhLCBiIH07XG4gIGxldCBwb3NpdGl2ZXMgPSBbXTtcbiAgbGV0IG5lZ2F0aXZlcyA9IFtdO1xuXG4gIGlmIChpc1BhZGRlZCkge1xuICAgIHN0YXRlLmlzUGFkZGVkID0gaXNQYWRkZWQ7XG4gICAgc3RhdGUubWF4TGVuID0gU3RyaW5nKHN0YXRlLm1heCkubGVuZ3RoO1xuICB9XG5cbiAgaWYgKGEgPCAwKSB7XG4gICAgbGV0IG5ld01pbiA9IGIgPCAwID8gTWF0aC5hYnMoYikgOiAxO1xuICAgIG5lZ2F0aXZlcyA9IHNwbGl0VG9QYXR0ZXJucyhuZXdNaW4sIE1hdGguYWJzKGEpLCBzdGF0ZSwgb3B0cyk7XG4gICAgYSA9IHN0YXRlLmEgPSAwO1xuICB9XG5cbiAgaWYgKGIgPj0gMCkge1xuICAgIHBvc2l0aXZlcyA9IHNwbGl0VG9QYXR0ZXJucyhhLCBiLCBzdGF0ZSwgb3B0cyk7XG4gIH1cblxuICBzdGF0ZS5uZWdhdGl2ZXMgPSBuZWdhdGl2ZXM7XG4gIHN0YXRlLnBvc2l0aXZlcyA9IHBvc2l0aXZlcztcbiAgc3RhdGUucmVzdWx0ID0gY29sbGF0ZVBhdHRlcm5zKG5lZ2F0aXZlcywgcG9zaXRpdmVzLCBvcHRzKTtcblxuICBpZiAob3B0cy5jYXB0dXJlID09PSB0cnVlKSB7XG4gICAgc3RhdGUucmVzdWx0ID0gYCgke3N0YXRlLnJlc3VsdH0pYDtcbiAgfSBlbHNlIGlmIChvcHRzLndyYXAgIT09IGZhbHNlICYmIChwb3NpdGl2ZXMubGVuZ3RoICsgbmVnYXRpdmVzLmxlbmd0aCkgPiAxKSB7XG4gICAgc3RhdGUucmVzdWx0ID0gYCg/OiR7c3RhdGUucmVzdWx0fSlgO1xuICB9XG5cbiAgdG9SZWdleFJhbmdlLmNhY2hlW2NhY2hlS2V5XSA9IHN0YXRlO1xuICByZXR1cm4gc3RhdGUucmVzdWx0O1xufTtcblxuZnVuY3Rpb24gY29sbGF0ZVBhdHRlcm5zKG5lZywgcG9zLCBvcHRpb25zKSB7XG4gIGxldCBvbmx5TmVnYXRpdmUgPSBmaWx0ZXJQYXR0ZXJucyhuZWcsIHBvcywgJy0nLCBmYWxzZSwgb3B0aW9ucykgfHwgW107XG4gIGxldCBvbmx5UG9zaXRpdmUgPSBmaWx0ZXJQYXR0ZXJucyhwb3MsIG5lZywgJycsIGZhbHNlLCBvcHRpb25zKSB8fCBbXTtcbiAgbGV0IGludGVyc2VjdGVkID0gZmlsdGVyUGF0dGVybnMobmVnLCBwb3MsICctPycsIHRydWUsIG9wdGlvbnMpIHx8IFtdO1xuICBsZXQgc3VicGF0dGVybnMgPSBvbmx5TmVnYXRpdmUuY29uY2F0KGludGVyc2VjdGVkKS5jb25jYXQob25seVBvc2l0aXZlKTtcbiAgcmV0dXJuIHN1YnBhdHRlcm5zLmpvaW4oJ3wnKTtcbn1cblxuZnVuY3Rpb24gc3BsaXRUb1JhbmdlcyhtaW4sIG1heCkge1xuICBsZXQgbmluZXMgPSAxO1xuICBsZXQgemVyb3MgPSAxO1xuXG4gIGxldCBzdG9wID0gY291bnROaW5lcyhtaW4sIG5pbmVzKTtcbiAgbGV0IHN0b3BzID0gbmV3IFNldChbbWF4XSk7XG5cbiAgd2hpbGUgKG1pbiA8PSBzdG9wICYmIHN0b3AgPD0gbWF4KSB7XG4gICAgc3RvcHMuYWRkKHN0b3ApO1xuICAgIG5pbmVzICs9IDE7XG4gICAgc3RvcCA9IGNvdW50TmluZXMobWluLCBuaW5lcyk7XG4gIH1cblxuICBzdG9wID0gY291bnRaZXJvcyhtYXggKyAxLCB6ZXJvcykgLSAxO1xuXG4gIHdoaWxlIChtaW4gPCBzdG9wICYmIHN0b3AgPD0gbWF4KSB7XG4gICAgc3RvcHMuYWRkKHN0b3ApO1xuICAgIHplcm9zICs9IDE7XG4gICAgc3RvcCA9IGNvdW50WmVyb3MobWF4ICsgMSwgemVyb3MpIC0gMTtcbiAgfVxuXG4gIHN0b3BzID0gWy4uLnN0b3BzXTtcbiAgc3RvcHMuc29ydChjb21wYXJlKTtcbiAgcmV0dXJuIHN0b3BzO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSByYW5nZSB0byBhIHJlZ2V4IHBhdHRlcm5cbiAqIEBwYXJhbSB7TnVtYmVyfSBgc3RhcnRgXG4gKiBAcGFyYW0ge051bWJlcn0gYHN0b3BgXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gcmFuZ2VUb1BhdHRlcm4oc3RhcnQsIHN0b3AsIG9wdGlvbnMpIHtcbiAgaWYgKHN0YXJ0ID09PSBzdG9wKSB7XG4gICAgcmV0dXJuIHsgcGF0dGVybjogc3RhcnQsIGNvdW50OiBbXSwgZGlnaXRzOiAwIH07XG4gIH1cblxuICBsZXQgemlwcGVkID0gemlwKHN0YXJ0LCBzdG9wKTtcbiAgbGV0IGRpZ2l0cyA9IHppcHBlZC5sZW5ndGg7XG4gIGxldCBwYXR0ZXJuID0gJyc7XG4gIGxldCBjb3VudCA9IDA7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWdpdHM7IGkrKykge1xuICAgIGxldCBbc3RhcnREaWdpdCwgc3RvcERpZ2l0XSA9IHppcHBlZFtpXTtcblxuICAgIGlmIChzdGFydERpZ2l0ID09PSBzdG9wRGlnaXQpIHtcbiAgICAgIHBhdHRlcm4gKz0gc3RhcnREaWdpdDtcblxuICAgIH0gZWxzZSBpZiAoc3RhcnREaWdpdCAhPT0gJzAnIHx8IHN0b3BEaWdpdCAhPT0gJzknKSB7XG4gICAgICBwYXR0ZXJuICs9IHRvQ2hhcmFjdGVyQ2xhc3Moc3RhcnREaWdpdCwgc3RvcERpZ2l0LCBvcHRpb25zKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCsrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb3VudCkge1xuICAgIHBhdHRlcm4gKz0gb3B0aW9ucy5zaG9ydGhhbmQgPT09IHRydWUgPyAnXFxcXGQnIDogJ1swLTldJztcbiAgfVxuXG4gIHJldHVybiB7IHBhdHRlcm4sIGNvdW50OiBbY291bnRdLCBkaWdpdHMgfTtcbn1cblxuZnVuY3Rpb24gc3BsaXRUb1BhdHRlcm5zKG1pbiwgbWF4LCB0b2ssIG9wdGlvbnMpIHtcbiAgbGV0IHJhbmdlcyA9IHNwbGl0VG9SYW5nZXMobWluLCBtYXgpO1xuICBsZXQgdG9rZW5zID0gW107XG4gIGxldCBzdGFydCA9IG1pbjtcbiAgbGV0IHByZXY7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgbWF4ID0gcmFuZ2VzW2ldO1xuICAgIGxldCBvYmogPSByYW5nZVRvUGF0dGVybihTdHJpbmcoc3RhcnQpLCBTdHJpbmcobWF4KSwgb3B0aW9ucyk7XG4gICAgbGV0IHplcm9zID0gJyc7XG5cbiAgICBpZiAoIXRvay5pc1BhZGRlZCAmJiBwcmV2ICYmIHByZXYucGF0dGVybiA9PT0gb2JqLnBhdHRlcm4pIHtcbiAgICAgIGlmIChwcmV2LmNvdW50Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgcHJldi5jb3VudC5wb3AoKTtcbiAgICAgIH1cblxuICAgICAgcHJldi5jb3VudC5wdXNoKG9iai5jb3VudFswXSk7XG4gICAgICBwcmV2LnN0cmluZyA9IHByZXYucGF0dGVybiArIHRvUXVhbnRpZmllcihwcmV2LmNvdW50KTtcbiAgICAgIHN0YXJ0ID0gbWF4ICsgMTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICh0b2suaXNQYWRkZWQpIHtcbiAgICAgIHplcm9zID0gcGFkWmVyb3MobWF4LCB0b2ssIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIG9iai5zdHJpbmcgPSB6ZXJvcyArIG9iai5wYXR0ZXJuICsgdG9RdWFudGlmaWVyKG9iai5jb3VudCk7XG4gICAgdG9rZW5zLnB1c2gob2JqKTtcbiAgICBzdGFydCA9IG1heCArIDE7XG4gICAgcHJldiA9IG9iajtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmZ1bmN0aW9uIGZpbHRlclBhdHRlcm5zKGFyciwgY29tcGFyaXNvbiwgcHJlZml4LCBpbnRlcnNlY3Rpb24sIG9wdGlvbnMpIHtcbiAgbGV0IHJlc3VsdCA9IFtdO1xuXG4gIGZvciAobGV0IGVsZSBvZiBhcnIpIHtcbiAgICBsZXQgeyBzdHJpbmcgfSA9IGVsZTtcblxuICAgIC8vIG9ubHkgcHVzaCBpZiBfYm90aF8gYXJlIG5lZ2F0aXZlLi4uXG4gICAgaWYgKCFpbnRlcnNlY3Rpb24gJiYgIWNvbnRhaW5zKGNvbXBhcmlzb24sICdzdHJpbmcnLCBzdHJpbmcpKSB7XG4gICAgICByZXN1bHQucHVzaChwcmVmaXggKyBzdHJpbmcpO1xuICAgIH1cblxuICAgIC8vIG9yIF9ib3RoXyBhcmUgcG9zaXRpdmVcbiAgICBpZiAoaW50ZXJzZWN0aW9uICYmIGNvbnRhaW5zKGNvbXBhcmlzb24sICdzdHJpbmcnLCBzdHJpbmcpKSB7XG4gICAgICByZXN1bHQucHVzaChwcmVmaXggKyBzdHJpbmcpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFppcCBzdHJpbmdzXG4gKi9cblxuZnVuY3Rpb24gemlwKGEsIGIpIHtcbiAgbGV0IGFyciA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIGFyci5wdXNoKFthW2ldLCBiW2ldXSk7XG4gIHJldHVybiBhcnI7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmUoYSwgYikge1xuICByZXR1cm4gYSA+IGIgPyAxIDogYiA+IGEgPyAtMSA6IDA7XG59XG5cbmZ1bmN0aW9uIGNvbnRhaW5zKGFyciwga2V5LCB2YWwpIHtcbiAgcmV0dXJuIGFyci5zb21lKGVsZSA9PiBlbGVba2V5XSA9PT0gdmFsKTtcbn1cblxuZnVuY3Rpb24gY291bnROaW5lcyhtaW4sIGxlbikge1xuICByZXR1cm4gTnVtYmVyKFN0cmluZyhtaW4pLnNsaWNlKDAsIC1sZW4pICsgJzknLnJlcGVhdChsZW4pKTtcbn1cblxuZnVuY3Rpb24gY291bnRaZXJvcyhpbnRlZ2VyLCB6ZXJvcykge1xuICByZXR1cm4gaW50ZWdlciAtIChpbnRlZ2VyICUgTWF0aC5wb3coMTAsIHplcm9zKSk7XG59XG5cbmZ1bmN0aW9uIHRvUXVhbnRpZmllcihkaWdpdHMpIHtcbiAgbGV0IFtzdGFydCA9IDAsIHN0b3AgPSAnJ10gPSBkaWdpdHM7XG4gIGlmIChzdG9wIHx8IHN0YXJ0ID4gMSkge1xuICAgIHJldHVybiBgeyR7c3RhcnQgKyAoc3RvcCA/ICcsJyArIHN0b3AgOiAnJyl9fWA7XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiB0b0NoYXJhY3RlckNsYXNzKGEsIGIsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGBbJHthfSR7KGIgLSBhID09PSAxKSA/ICcnIDogJy0nfSR7Yn1dYDtcbn1cblxuZnVuY3Rpb24gaGFzUGFkZGluZyhzdHIpIHtcbiAgcmV0dXJuIC9eLT8oMCspXFxkLy50ZXN0KHN0cik7XG59XG5cbmZ1bmN0aW9uIHBhZFplcm9zKHZhbHVlLCB0b2ssIG9wdGlvbnMpIHtcbiAgaWYgKCF0b2suaXNQYWRkZWQpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBsZXQgZGlmZiA9IE1hdGguYWJzKHRvay5tYXhMZW4gLSBTdHJpbmcodmFsdWUpLmxlbmd0aCk7XG4gIGxldCByZWxheCA9IG9wdGlvbnMucmVsYXhaZXJvcyAhPT0gZmFsc2U7XG5cbiAgc3dpdGNoIChkaWZmKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuICcnO1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiByZWxheCA/ICcwPycgOiAnMCc7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIHJlbGF4ID8gJzB7MCwyfScgOiAnMDAnO1xuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiByZWxheCA/IGAwezAsJHtkaWZmfX1gIDogYDB7JHtkaWZmfX1gO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENhY2hlXG4gKi9cblxudG9SZWdleFJhbmdlLmNhY2hlID0ge307XG50b1JlZ2V4UmFuZ2UuY2xlYXJDYWNoZSA9ICgpID0+ICh0b1JlZ2V4UmFuZ2UuY2FjaGUgPSB7fSk7XG5cbi8qKlxuICogRXhwb3NlIGB0b1JlZ2V4UmFuZ2VgXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSB0b1JlZ2V4UmFuZ2U7XG4iLCAiLyohXG4gKiBmaWxsLXJhbmdlIDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9maWxsLXJhbmdlPlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBKb24gU2NobGlua2VydC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5jb25zdCB0b1JlZ2V4UmFuZ2UgPSByZXF1aXJlKCd0by1yZWdleC1yYW5nZScpO1xuXG5jb25zdCBpc09iamVjdCA9IHZhbCA9PiB2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsKTtcblxuY29uc3QgdHJhbnNmb3JtID0gdG9OdW1iZXIgPT4ge1xuICByZXR1cm4gdmFsdWUgPT4gdG9OdW1iZXIgPT09IHRydWUgPyBOdW1iZXIodmFsdWUpIDogU3RyaW5nKHZhbHVlKTtcbn07XG5cbmNvbnN0IGlzVmFsaWRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUgIT09ICcnKTtcbn07XG5cbmNvbnN0IGlzTnVtYmVyID0gbnVtID0+IE51bWJlci5pc0ludGVnZXIoK251bSk7XG5cbmNvbnN0IHplcm9zID0gaW5wdXQgPT4ge1xuICBsZXQgdmFsdWUgPSBgJHtpbnB1dH1gO1xuICBsZXQgaW5kZXggPSAtMTtcbiAgaWYgKHZhbHVlWzBdID09PSAnLScpIHZhbHVlID0gdmFsdWUuc2xpY2UoMSk7XG4gIGlmICh2YWx1ZSA9PT0gJzAnKSByZXR1cm4gZmFsc2U7XG4gIHdoaWxlICh2YWx1ZVsrK2luZGV4XSA9PT0gJzAnKTtcbiAgcmV0dXJuIGluZGV4ID4gMDtcbn07XG5cbmNvbnN0IHN0cmluZ2lmeSA9IChzdGFydCwgZW5kLCBvcHRpb25zKSA9PiB7XG4gIGlmICh0eXBlb2Ygc3RhcnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnMuc3RyaW5naWZ5ID09PSB0cnVlO1xufTtcblxuY29uc3QgcGFkID0gKGlucHV0LCBtYXhMZW5ndGgsIHRvTnVtYmVyKSA9PiB7XG4gIGlmIChtYXhMZW5ndGggPiAwKSB7XG4gICAgbGV0IGRhc2ggPSBpbnB1dFswXSA9PT0gJy0nID8gJy0nIDogJyc7XG4gICAgaWYgKGRhc2gpIGlucHV0ID0gaW5wdXQuc2xpY2UoMSk7XG4gICAgaW5wdXQgPSAoZGFzaCArIGlucHV0LnBhZFN0YXJ0KGRhc2ggPyBtYXhMZW5ndGggLSAxIDogbWF4TGVuZ3RoLCAnMCcpKTtcbiAgfVxuICBpZiAodG9OdW1iZXIgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIFN0cmluZyhpbnB1dCk7XG4gIH1cbiAgcmV0dXJuIGlucHV0O1xufTtcblxuY29uc3QgdG9NYXhMZW4gPSAoaW5wdXQsIG1heExlbmd0aCkgPT4ge1xuICBsZXQgbmVnYXRpdmUgPSBpbnB1dFswXSA9PT0gJy0nID8gJy0nIDogJyc7XG4gIGlmIChuZWdhdGl2ZSkge1xuICAgIGlucHV0ID0gaW5wdXQuc2xpY2UoMSk7XG4gICAgbWF4TGVuZ3RoLS07XG4gIH1cbiAgd2hpbGUgKGlucHV0Lmxlbmd0aCA8IG1heExlbmd0aCkgaW5wdXQgPSAnMCcgKyBpbnB1dDtcbiAgcmV0dXJuIG5lZ2F0aXZlID8gKCctJyArIGlucHV0KSA6IGlucHV0O1xufTtcblxuY29uc3QgdG9TZXF1ZW5jZSA9IChwYXJ0cywgb3B0aW9ucykgPT4ge1xuICBwYXJ0cy5uZWdhdGl2ZXMuc29ydCgoYSwgYikgPT4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDApO1xuICBwYXJ0cy5wb3NpdGl2ZXMuc29ydCgoYSwgYikgPT4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDApO1xuXG4gIGxldCBwcmVmaXggPSBvcHRpb25zLmNhcHR1cmUgPyAnJyA6ICc/Oic7XG4gIGxldCBwb3NpdGl2ZXMgPSAnJztcbiAgbGV0IG5lZ2F0aXZlcyA9ICcnO1xuICBsZXQgcmVzdWx0O1xuXG4gIGlmIChwYXJ0cy5wb3NpdGl2ZXMubGVuZ3RoKSB7XG4gICAgcG9zaXRpdmVzID0gcGFydHMucG9zaXRpdmVzLmpvaW4oJ3wnKTtcbiAgfVxuXG4gIGlmIChwYXJ0cy5uZWdhdGl2ZXMubGVuZ3RoKSB7XG4gICAgbmVnYXRpdmVzID0gYC0oJHtwcmVmaXh9JHtwYXJ0cy5uZWdhdGl2ZXMuam9pbignfCcpfSlgO1xuICB9XG5cbiAgaWYgKHBvc2l0aXZlcyAmJiBuZWdhdGl2ZXMpIHtcbiAgICByZXN1bHQgPSBgJHtwb3NpdGl2ZXN9fCR7bmVnYXRpdmVzfWA7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gcG9zaXRpdmVzIHx8IG5lZ2F0aXZlcztcbiAgfVxuXG4gIGlmIChvcHRpb25zLndyYXApIHtcbiAgICByZXR1cm4gYCgke3ByZWZpeH0ke3Jlc3VsdH0pYDtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5jb25zdCB0b1JhbmdlID0gKGEsIGIsIGlzTnVtYmVycywgb3B0aW9ucykgPT4ge1xuICBpZiAoaXNOdW1iZXJzKSB7XG4gICAgcmV0dXJuIHRvUmVnZXhSYW5nZShhLCBiLCB7IHdyYXA6IGZhbHNlLCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgbGV0IHN0YXJ0ID0gU3RyaW5nLmZyb21DaGFyQ29kZShhKTtcbiAgaWYgKGEgPT09IGIpIHJldHVybiBzdGFydDtcblxuICBsZXQgc3RvcCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoYik7XG4gIHJldHVybiBgWyR7c3RhcnR9LSR7c3RvcH1dYDtcbn07XG5cbmNvbnN0IHRvUmVnZXggPSAoc3RhcnQsIGVuZCwgb3B0aW9ucykgPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShzdGFydCkpIHtcbiAgICBsZXQgd3JhcCA9IG9wdGlvbnMud3JhcCA9PT0gdHJ1ZTtcbiAgICBsZXQgcHJlZml4ID0gb3B0aW9ucy5jYXB0dXJlID8gJycgOiAnPzonO1xuICAgIHJldHVybiB3cmFwID8gYCgke3ByZWZpeH0ke3N0YXJ0LmpvaW4oJ3wnKX0pYCA6IHN0YXJ0LmpvaW4oJ3wnKTtcbiAgfVxuICByZXR1cm4gdG9SZWdleFJhbmdlKHN0YXJ0LCBlbmQsIG9wdGlvbnMpO1xufTtcblxuY29uc3QgcmFuZ2VFcnJvciA9ICguLi5hcmdzKSA9PiB7XG4gIHJldHVybiBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCByYW5nZSBhcmd1bWVudHM6ICcgKyB1dGlsLmluc3BlY3QoLi4uYXJncykpO1xufTtcblxuY29uc3QgaW52YWxpZFJhbmdlID0gKHN0YXJ0LCBlbmQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMuc3RyaWN0UmFuZ2VzID09PSB0cnVlKSB0aHJvdyByYW5nZUVycm9yKFtzdGFydCwgZW5kXSk7XG4gIHJldHVybiBbXTtcbn07XG5cbmNvbnN0IGludmFsaWRTdGVwID0gKHN0ZXAsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMuc3RyaWN0UmFuZ2VzID09PSB0cnVlKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgc3RlcCBcIiR7c3RlcH1cIiB0byBiZSBhIG51bWJlcmApO1xuICB9XG4gIHJldHVybiBbXTtcbn07XG5cbmNvbnN0IGZpbGxOdW1iZXJzID0gKHN0YXJ0LCBlbmQsIHN0ZXAgPSAxLCBvcHRpb25zID0ge30pID0+IHtcbiAgbGV0IGEgPSBOdW1iZXIoc3RhcnQpO1xuICBsZXQgYiA9IE51bWJlcihlbmQpO1xuXG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihhKSB8fCAhTnVtYmVyLmlzSW50ZWdlcihiKSkge1xuICAgIGlmIChvcHRpb25zLnN0cmljdFJhbmdlcyA9PT0gdHJ1ZSkgdGhyb3cgcmFuZ2VFcnJvcihbc3RhcnQsIGVuZF0pO1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8vIGZpeCBuZWdhdGl2ZSB6ZXJvXG4gIGlmIChhID09PSAwKSBhID0gMDtcbiAgaWYgKGIgPT09IDApIGIgPSAwO1xuXG4gIGxldCBkZXNjZW5kaW5nID0gYSA+IGI7XG4gIGxldCBzdGFydFN0cmluZyA9IFN0cmluZyhzdGFydCk7XG4gIGxldCBlbmRTdHJpbmcgPSBTdHJpbmcoZW5kKTtcbiAgbGV0IHN0ZXBTdHJpbmcgPSBTdHJpbmcoc3RlcCk7XG4gIHN0ZXAgPSBNYXRoLm1heChNYXRoLmFicyhzdGVwKSwgMSk7XG5cbiAgbGV0IHBhZGRlZCA9IHplcm9zKHN0YXJ0U3RyaW5nKSB8fCB6ZXJvcyhlbmRTdHJpbmcpIHx8IHplcm9zKHN0ZXBTdHJpbmcpO1xuICBsZXQgbWF4TGVuID0gcGFkZGVkID8gTWF0aC5tYXgoc3RhcnRTdHJpbmcubGVuZ3RoLCBlbmRTdHJpbmcubGVuZ3RoLCBzdGVwU3RyaW5nLmxlbmd0aCkgOiAwO1xuICBsZXQgdG9OdW1iZXIgPSBwYWRkZWQgPT09IGZhbHNlICYmIHN0cmluZ2lmeShzdGFydCwgZW5kLCBvcHRpb25zKSA9PT0gZmFsc2U7XG4gIGxldCBmb3JtYXQgPSBvcHRpb25zLnRyYW5zZm9ybSB8fCB0cmFuc2Zvcm0odG9OdW1iZXIpO1xuXG4gIGlmIChvcHRpb25zLnRvUmVnZXggJiYgc3RlcCA9PT0gMSkge1xuICAgIHJldHVybiB0b1JhbmdlKHRvTWF4TGVuKHN0YXJ0LCBtYXhMZW4pLCB0b01heExlbihlbmQsIG1heExlbiksIHRydWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgbGV0IHBhcnRzID0geyBuZWdhdGl2ZXM6IFtdLCBwb3NpdGl2ZXM6IFtdIH07XG4gIGxldCBwdXNoID0gbnVtID0+IHBhcnRzW251bSA8IDAgPyAnbmVnYXRpdmVzJyA6ICdwb3NpdGl2ZXMnXS5wdXNoKE1hdGguYWJzKG51bSkpO1xuICBsZXQgcmFuZ2UgPSBbXTtcbiAgbGV0IGluZGV4ID0gMDtcblxuICB3aGlsZSAoZGVzY2VuZGluZyA/IGEgPj0gYiA6IGEgPD0gYikge1xuICAgIGlmIChvcHRpb25zLnRvUmVnZXggPT09IHRydWUgJiYgc3RlcCA+IDEpIHtcbiAgICAgIHB1c2goYSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmdlLnB1c2gocGFkKGZvcm1hdChhLCBpbmRleCksIG1heExlbiwgdG9OdW1iZXIpKTtcbiAgICB9XG4gICAgYSA9IGRlc2NlbmRpbmcgPyBhIC0gc3RlcCA6IGEgKyBzdGVwO1xuICAgIGluZGV4Kys7XG4gIH1cblxuICBpZiAob3B0aW9ucy50b1JlZ2V4ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHN0ZXAgPiAxXG4gICAgICA/IHRvU2VxdWVuY2UocGFydHMsIG9wdGlvbnMpXG4gICAgICA6IHRvUmVnZXgocmFuZ2UsIG51bGwsIHsgd3JhcDogZmFsc2UsIC4uLm9wdGlvbnMgfSk7XG4gIH1cblxuICByZXR1cm4gcmFuZ2U7XG59O1xuXG5jb25zdCBmaWxsTGV0dGVycyA9IChzdGFydCwgZW5kLCBzdGVwID0gMSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGlmICgoIWlzTnVtYmVyKHN0YXJ0KSAmJiBzdGFydC5sZW5ndGggPiAxKSB8fCAoIWlzTnVtYmVyKGVuZCkgJiYgZW5kLmxlbmd0aCA+IDEpKSB7XG4gICAgcmV0dXJuIGludmFsaWRSYW5nZShzdGFydCwgZW5kLCBvcHRpb25zKTtcbiAgfVxuXG5cbiAgbGV0IGZvcm1hdCA9IG9wdGlvbnMudHJhbnNmb3JtIHx8ICh2YWwgPT4gU3RyaW5nLmZyb21DaGFyQ29kZSh2YWwpKTtcbiAgbGV0IGEgPSBgJHtzdGFydH1gLmNoYXJDb2RlQXQoMCk7XG4gIGxldCBiID0gYCR7ZW5kfWAuY2hhckNvZGVBdCgwKTtcblxuICBsZXQgZGVzY2VuZGluZyA9IGEgPiBiO1xuICBsZXQgbWluID0gTWF0aC5taW4oYSwgYik7XG4gIGxldCBtYXggPSBNYXRoLm1heChhLCBiKTtcblxuICBpZiAob3B0aW9ucy50b1JlZ2V4ICYmIHN0ZXAgPT09IDEpIHtcbiAgICByZXR1cm4gdG9SYW5nZShtaW4sIG1heCwgZmFsc2UsIG9wdGlvbnMpO1xuICB9XG5cbiAgbGV0IHJhbmdlID0gW107XG4gIGxldCBpbmRleCA9IDA7XG5cbiAgd2hpbGUgKGRlc2NlbmRpbmcgPyBhID49IGIgOiBhIDw9IGIpIHtcbiAgICByYW5nZS5wdXNoKGZvcm1hdChhLCBpbmRleCkpO1xuICAgIGEgPSBkZXNjZW5kaW5nID8gYSAtIHN0ZXAgOiBhICsgc3RlcDtcbiAgICBpbmRleCsrO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMudG9SZWdleCA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiB0b1JlZ2V4KHJhbmdlLCBudWxsLCB7IHdyYXA6IGZhbHNlLCBvcHRpb25zIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJhbmdlO1xufTtcblxuY29uc3QgZmlsbCA9IChzdGFydCwgZW5kLCBzdGVwLCBvcHRpb25zID0ge30pID0+IHtcbiAgaWYgKGVuZCA9PSBudWxsICYmIGlzVmFsaWRWYWx1ZShzdGFydCkpIHtcbiAgICByZXR1cm4gW3N0YXJ0XTtcbiAgfVxuXG4gIGlmICghaXNWYWxpZFZhbHVlKHN0YXJ0KSB8fCAhaXNWYWxpZFZhbHVlKGVuZCkpIHtcbiAgICByZXR1cm4gaW52YWxpZFJhbmdlKHN0YXJ0LCBlbmQsIG9wdGlvbnMpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzdGVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZpbGwoc3RhcnQsIGVuZCwgMSwgeyB0cmFuc2Zvcm06IHN0ZXAgfSk7XG4gIH1cblxuICBpZiAoaXNPYmplY3Qoc3RlcCkpIHtcbiAgICByZXR1cm4gZmlsbChzdGFydCwgZW5kLCAwLCBzdGVwKTtcbiAgfVxuXG4gIGxldCBvcHRzID0geyAuLi5vcHRpb25zIH07XG4gIGlmIChvcHRzLmNhcHR1cmUgPT09IHRydWUpIG9wdHMud3JhcCA9IHRydWU7XG4gIHN0ZXAgPSBzdGVwIHx8IG9wdHMuc3RlcCB8fCAxO1xuXG4gIGlmICghaXNOdW1iZXIoc3RlcCkpIHtcbiAgICBpZiAoc3RlcCAhPSBudWxsICYmICFpc09iamVjdChzdGVwKSkgcmV0dXJuIGludmFsaWRTdGVwKHN0ZXAsIG9wdHMpO1xuICAgIHJldHVybiBmaWxsKHN0YXJ0LCBlbmQsIDEsIHN0ZXApO1xuICB9XG5cbiAgaWYgKGlzTnVtYmVyKHN0YXJ0KSAmJiBpc051bWJlcihlbmQpKSB7XG4gICAgcmV0dXJuIGZpbGxOdW1iZXJzKHN0YXJ0LCBlbmQsIHN0ZXAsIG9wdHMpO1xuICB9XG5cbiAgcmV0dXJuIGZpbGxMZXR0ZXJzKHN0YXJ0LCBlbmQsIE1hdGgubWF4KE1hdGguYWJzKHN0ZXApLCAxKSwgb3B0cyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZpbGw7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBmaWxsID0gcmVxdWlyZSgnZmlsbC1yYW5nZScpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbmNvbnN0IGNvbXBpbGUgPSAoYXN0LCBvcHRpb25zID0ge30pID0+IHtcbiAgbGV0IHdhbGsgPSAobm9kZSwgcGFyZW50ID0ge30pID0+IHtcbiAgICBsZXQgaW52YWxpZEJsb2NrID0gdXRpbHMuaXNJbnZhbGlkQnJhY2UocGFyZW50KTtcbiAgICBsZXQgaW52YWxpZE5vZGUgPSBub2RlLmludmFsaWQgPT09IHRydWUgJiYgb3B0aW9ucy5lc2NhcGVJbnZhbGlkID09PSB0cnVlO1xuICAgIGxldCBpbnZhbGlkID0gaW52YWxpZEJsb2NrID09PSB0cnVlIHx8IGludmFsaWROb2RlID09PSB0cnVlO1xuICAgIGxldCBwcmVmaXggPSBvcHRpb25zLmVzY2FwZUludmFsaWQgPT09IHRydWUgPyAnXFxcXCcgOiAnJztcbiAgICBsZXQgb3V0cHV0ID0gJyc7XG5cbiAgICBpZiAobm9kZS5pc09wZW4gPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBwcmVmaXggKyBub2RlLnZhbHVlO1xuICAgIH1cbiAgICBpZiAobm9kZS5pc0Nsb3NlID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gcHJlZml4ICsgbm9kZS52YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS50eXBlID09PSAnb3BlbicpIHtcbiAgICAgIHJldHVybiBpbnZhbGlkID8gKHByZWZpeCArIG5vZGUudmFsdWUpIDogJygnO1xuICAgIH1cblxuICAgIGlmIChub2RlLnR5cGUgPT09ICdjbG9zZScpIHtcbiAgICAgIHJldHVybiBpbnZhbGlkID8gKHByZWZpeCArIG5vZGUudmFsdWUpIDogJyknO1xuICAgIH1cblxuICAgIGlmIChub2RlLnR5cGUgPT09ICdjb21tYScpIHtcbiAgICAgIHJldHVybiBub2RlLnByZXYudHlwZSA9PT0gJ2NvbW1hJyA/ICcnIDogKGludmFsaWQgPyBub2RlLnZhbHVlIDogJ3wnKTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS52YWx1ZSkge1xuICAgICAgcmV0dXJuIG5vZGUudmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUubm9kZXMgJiYgbm9kZS5yYW5nZXMgPiAwKSB7XG4gICAgICBsZXQgYXJncyA9IHV0aWxzLnJlZHVjZShub2RlLm5vZGVzKTtcbiAgICAgIGxldCByYW5nZSA9IGZpbGwoLi4uYXJncywgeyAuLi5vcHRpb25zLCB3cmFwOiBmYWxzZSwgdG9SZWdleDogdHJ1ZSB9KTtcblxuICAgICAgaWYgKHJhbmdlLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICByZXR1cm4gYXJncy5sZW5ndGggPiAxICYmIHJhbmdlLmxlbmd0aCA+IDEgPyBgKCR7cmFuZ2V9KWAgOiByYW5nZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobm9kZS5ub2Rlcykge1xuICAgICAgZm9yIChsZXQgY2hpbGQgb2Ygbm9kZS5ub2Rlcykge1xuICAgICAgICBvdXRwdXQgKz0gd2FsayhjaGlsZCwgbm9kZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgcmV0dXJuIHdhbGsoYXN0KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IGZpbGwgPSByZXF1aXJlKCdmaWxsLXJhbmdlJyk7XG5jb25zdCBzdHJpbmdpZnkgPSByZXF1aXJlKCcuL3N0cmluZ2lmeScpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbmNvbnN0IGFwcGVuZCA9IChxdWV1ZSA9ICcnLCBzdGFzaCA9ICcnLCBlbmNsb3NlID0gZmFsc2UpID0+IHtcbiAgbGV0IHJlc3VsdCA9IFtdO1xuXG4gIHF1ZXVlID0gW10uY29uY2F0KHF1ZXVlKTtcbiAgc3Rhc2ggPSBbXS5jb25jYXQoc3Rhc2gpO1xuXG4gIGlmICghc3Rhc2gubGVuZ3RoKSByZXR1cm4gcXVldWU7XG4gIGlmICghcXVldWUubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGVuY2xvc2UgPyB1dGlscy5mbGF0dGVuKHN0YXNoKS5tYXAoZWxlID0+IGB7JHtlbGV9fWApIDogc3Rhc2g7XG4gIH1cblxuICBmb3IgKGxldCBpdGVtIG9mIHF1ZXVlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgIGZvciAobGV0IHZhbHVlIG9mIGl0ZW0pIHtcbiAgICAgICAgcmVzdWx0LnB1c2goYXBwZW5kKHZhbHVlLCBzdGFzaCwgZW5jbG9zZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBlbGUgb2Ygc3Rhc2gpIHtcbiAgICAgICAgaWYgKGVuY2xvc2UgPT09IHRydWUgJiYgdHlwZW9mIGVsZSA9PT0gJ3N0cmluZycpIGVsZSA9IGB7JHtlbGV9fWA7XG4gICAgICAgIHJlc3VsdC5wdXNoKEFycmF5LmlzQXJyYXkoZWxlKSA/IGFwcGVuZChpdGVtLCBlbGUsIGVuY2xvc2UpIDogKGl0ZW0gKyBlbGUpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHV0aWxzLmZsYXR0ZW4ocmVzdWx0KTtcbn07XG5cbmNvbnN0IGV4cGFuZCA9IChhc3QsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBsZXQgcmFuZ2VMaW1pdCA9IG9wdGlvbnMucmFuZ2VMaW1pdCA9PT0gdm9pZCAwID8gMTAwMCA6IG9wdGlvbnMucmFuZ2VMaW1pdDtcblxuICBsZXQgd2FsayA9IChub2RlLCBwYXJlbnQgPSB7fSkgPT4ge1xuICAgIG5vZGUucXVldWUgPSBbXTtcblxuICAgIGxldCBwID0gcGFyZW50O1xuICAgIGxldCBxID0gcGFyZW50LnF1ZXVlO1xuXG4gICAgd2hpbGUgKHAudHlwZSAhPT0gJ2JyYWNlJyAmJiBwLnR5cGUgIT09ICdyb290JyAmJiBwLnBhcmVudCkge1xuICAgICAgcCA9IHAucGFyZW50O1xuICAgICAgcSA9IHAucXVldWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuaW52YWxpZCB8fCBub2RlLmRvbGxhcikge1xuICAgICAgcS5wdXNoKGFwcGVuZChxLnBvcCgpLCBzdHJpbmdpZnkobm9kZSwgb3B0aW9ucykpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobm9kZS50eXBlID09PSAnYnJhY2UnICYmIG5vZGUuaW52YWxpZCAhPT0gdHJ1ZSAmJiBub2RlLm5vZGVzLmxlbmd0aCA9PT0gMikge1xuICAgICAgcS5wdXNoKGFwcGVuZChxLnBvcCgpLCBbJ3t9J10pKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5ub2RlcyAmJiBub2RlLnJhbmdlcyA+IDApIHtcbiAgICAgIGxldCBhcmdzID0gdXRpbHMucmVkdWNlKG5vZGUubm9kZXMpO1xuXG4gICAgICBpZiAodXRpbHMuZXhjZWVkc0xpbWl0KC4uLmFyZ3MsIG9wdGlvbnMuc3RlcCwgcmFuZ2VMaW1pdCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2V4cGFuZGVkIGFycmF5IGxlbmd0aCBleGNlZWRzIHJhbmdlIGxpbWl0LiBVc2Ugb3B0aW9ucy5yYW5nZUxpbWl0IHRvIGluY3JlYXNlIG9yIGRpc2FibGUgdGhlIGxpbWl0LicpO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmFuZ2UgPSBmaWxsKC4uLmFyZ3MsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJhbmdlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByYW5nZSA9IHN0cmluZ2lmeShub2RlLCBvcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgcS5wdXNoKGFwcGVuZChxLnBvcCgpLCByYW5nZSkpO1xuICAgICAgbm9kZS5ub2RlcyA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBlbmNsb3NlID0gdXRpbHMuZW5jbG9zZUJyYWNlKG5vZGUpO1xuICAgIGxldCBxdWV1ZSA9IG5vZGUucXVldWU7XG4gICAgbGV0IGJsb2NrID0gbm9kZTtcblxuICAgIHdoaWxlIChibG9jay50eXBlICE9PSAnYnJhY2UnICYmIGJsb2NrLnR5cGUgIT09ICdyb290JyAmJiBibG9jay5wYXJlbnQpIHtcbiAgICAgIGJsb2NrID0gYmxvY2sucGFyZW50O1xuICAgICAgcXVldWUgPSBibG9jay5xdWV1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUubm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBjaGlsZCA9IG5vZGUubm9kZXNbaV07XG5cbiAgICAgIGlmIChjaGlsZC50eXBlID09PSAnY29tbWEnICYmIG5vZGUudHlwZSA9PT0gJ2JyYWNlJykge1xuICAgICAgICBpZiAoaSA9PT0gMSkgcXVldWUucHVzaCgnJyk7XG4gICAgICAgIHF1ZXVlLnB1c2goJycpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoaWxkLnR5cGUgPT09ICdjbG9zZScpIHtcbiAgICAgICAgcS5wdXNoKGFwcGVuZChxLnBvcCgpLCBxdWV1ZSwgZW5jbG9zZSkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoaWxkLnZhbHVlICYmIGNoaWxkLnR5cGUgIT09ICdvcGVuJykge1xuICAgICAgICBxdWV1ZS5wdXNoKGFwcGVuZChxdWV1ZS5wb3AoKSwgY2hpbGQudmFsdWUpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGlsZC5ub2Rlcykge1xuICAgICAgICB3YWxrKGNoaWxkLCBub2RlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcXVldWU7XG4gIH07XG5cbiAgcmV0dXJuIHV0aWxzLmZsYXR0ZW4od2Fsayhhc3QpKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwYW5kO1xuIiwgIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIE1BWF9MRU5HVEg6IDEwMjQgKiA2NCxcblxuICAvLyBEaWdpdHNcbiAgQ0hBUl8wOiAnMCcsIC8qIDAgKi9cbiAgQ0hBUl85OiAnOScsIC8qIDkgKi9cblxuICAvLyBBbHBoYWJldCBjaGFycy5cbiAgQ0hBUl9VUFBFUkNBU0VfQTogJ0EnLCAvKiBBICovXG4gIENIQVJfTE9XRVJDQVNFX0E6ICdhJywgLyogYSAqL1xuICBDSEFSX1VQUEVSQ0FTRV9aOiAnWicsIC8qIFogKi9cbiAgQ0hBUl9MT1dFUkNBU0VfWjogJ3onLCAvKiB6ICovXG5cbiAgQ0hBUl9MRUZUX1BBUkVOVEhFU0VTOiAnKCcsIC8qICggKi9cbiAgQ0hBUl9SSUdIVF9QQVJFTlRIRVNFUzogJyknLCAvKiApICovXG5cbiAgQ0hBUl9BU1RFUklTSzogJyonLCAvKiAqICovXG5cbiAgLy8gTm9uLWFscGhhYmV0aWMgY2hhcnMuXG4gIENIQVJfQU1QRVJTQU5EOiAnJicsIC8qICYgKi9cbiAgQ0hBUl9BVDogJ0AnLCAvKiBAICovXG4gIENIQVJfQkFDS1NMQVNIOiAnXFxcXCcsIC8qIFxcICovXG4gIENIQVJfQkFDS1RJQ0s6ICdgJywgLyogYCAqL1xuICBDSEFSX0NBUlJJQUdFX1JFVFVSTjogJ1xccicsIC8qIFxcciAqL1xuICBDSEFSX0NJUkNVTUZMRVhfQUNDRU5UOiAnXicsIC8qIF4gKi9cbiAgQ0hBUl9DT0xPTjogJzonLCAvKiA6ICovXG4gIENIQVJfQ09NTUE6ICcsJywgLyogLCAqL1xuICBDSEFSX0RPTExBUjogJyQnLCAvKiAuICovXG4gIENIQVJfRE9UOiAnLicsIC8qIC4gKi9cbiAgQ0hBUl9ET1VCTEVfUVVPVEU6ICdcIicsIC8qIFwiICovXG4gIENIQVJfRVFVQUw6ICc9JywgLyogPSAqL1xuICBDSEFSX0VYQ0xBTUFUSU9OX01BUks6ICchJywgLyogISAqL1xuICBDSEFSX0ZPUk1fRkVFRDogJ1xcZicsIC8qIFxcZiAqL1xuICBDSEFSX0ZPUldBUkRfU0xBU0g6ICcvJywgLyogLyAqL1xuICBDSEFSX0hBU0g6ICcjJywgLyogIyAqL1xuICBDSEFSX0hZUEhFTl9NSU5VUzogJy0nLCAvKiAtICovXG4gIENIQVJfTEVGVF9BTkdMRV9CUkFDS0VUOiAnPCcsIC8qIDwgKi9cbiAgQ0hBUl9MRUZUX0NVUkxZX0JSQUNFOiAneycsIC8qIHsgKi9cbiAgQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUOiAnWycsIC8qIFsgKi9cbiAgQ0hBUl9MSU5FX0ZFRUQ6ICdcXG4nLCAvKiBcXG4gKi9cbiAgQ0hBUl9OT19CUkVBS19TUEFDRTogJ1xcdTAwQTAnLCAvKiBcXHUwMEEwICovXG4gIENIQVJfUEVSQ0VOVDogJyUnLCAvKiAlICovXG4gIENIQVJfUExVUzogJysnLCAvKiArICovXG4gIENIQVJfUVVFU1RJT05fTUFSSzogJz8nLCAvKiA/ICovXG4gIENIQVJfUklHSFRfQU5HTEVfQlJBQ0tFVDogJz4nLCAvKiA+ICovXG4gIENIQVJfUklHSFRfQ1VSTFlfQlJBQ0U6ICd9JywgLyogfSAqL1xuICBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUOiAnXScsIC8qIF0gKi9cbiAgQ0hBUl9TRU1JQ09MT046ICc7JywgLyogOyAqL1xuICBDSEFSX1NJTkdMRV9RVU9URTogJ1xcJycsIC8qICcgKi9cbiAgQ0hBUl9TUEFDRTogJyAnLCAvKiAgICovXG4gIENIQVJfVEFCOiAnXFx0JywgLyogXFx0ICovXG4gIENIQVJfVU5ERVJTQ09SRTogJ18nLCAvKiBfICovXG4gIENIQVJfVkVSVElDQUxfTElORTogJ3wnLCAvKiB8ICovXG4gIENIQVJfWkVST19XSURUSF9OT0JSRUFLX1NQQUNFOiAnXFx1RkVGRicgLyogXFx1RkVGRiAqL1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vc3RyaW5naWZ5Jyk7XG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3Qge1xuICBNQVhfTEVOR1RILFxuICBDSEFSX0JBQ0tTTEFTSCwgLyogXFwgKi9cbiAgQ0hBUl9CQUNLVElDSywgLyogYCAqL1xuICBDSEFSX0NPTU1BLCAvKiAsICovXG4gIENIQVJfRE9ULCAvKiAuICovXG4gIENIQVJfTEVGVF9QQVJFTlRIRVNFUywgLyogKCAqL1xuICBDSEFSX1JJR0hUX1BBUkVOVEhFU0VTLCAvKiApICovXG4gIENIQVJfTEVGVF9DVVJMWV9CUkFDRSwgLyogeyAqL1xuICBDSEFSX1JJR0hUX0NVUkxZX0JSQUNFLCAvKiB9ICovXG4gIENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVCwgLyogWyAqL1xuICBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VULCAvKiBdICovXG4gIENIQVJfRE9VQkxFX1FVT1RFLCAvKiBcIiAqL1xuICBDSEFSX1NJTkdMRV9RVU9URSwgLyogJyAqL1xuICBDSEFSX05PX0JSRUFLX1NQQUNFLFxuICBDSEFSX1pFUk9fV0lEVEhfTk9CUkVBS19TUEFDRVxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJyk7XG5cbi8qKlxuICogcGFyc2VcbiAqL1xuXG5jb25zdCBwYXJzZSA9IChpbnB1dCwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIGxldCBvcHRzID0gb3B0aW9ucyB8fCB7fTtcbiAgbGV0IG1heCA9IHR5cGVvZiBvcHRzLm1heExlbmd0aCA9PT0gJ251bWJlcicgPyBNYXRoLm1pbihNQVhfTEVOR1RILCBvcHRzLm1heExlbmd0aCkgOiBNQVhfTEVOR1RIO1xuICBpZiAoaW5wdXQubGVuZ3RoID4gbWF4KSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBJbnB1dCBsZW5ndGggKCR7aW5wdXQubGVuZ3RofSksIGV4Y2VlZHMgbWF4IGNoYXJhY3RlcnMgKCR7bWF4fSlgKTtcbiAgfVxuXG4gIGxldCBhc3QgPSB7IHR5cGU6ICdyb290JywgaW5wdXQsIG5vZGVzOiBbXSB9O1xuICBsZXQgc3RhY2sgPSBbYXN0XTtcbiAgbGV0IGJsb2NrID0gYXN0O1xuICBsZXQgcHJldiA9IGFzdDtcbiAgbGV0IGJyYWNrZXRzID0gMDtcbiAgbGV0IGxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcbiAgbGV0IGluZGV4ID0gMDtcbiAgbGV0IGRlcHRoID0gMDtcbiAgbGV0IHZhbHVlO1xuICBsZXQgbWVtbyA9IHt9O1xuXG4gIC8qKlxuICAgKiBIZWxwZXJzXG4gICAqL1xuXG4gIGNvbnN0IGFkdmFuY2UgPSAoKSA9PiBpbnB1dFtpbmRleCsrXTtcbiAgY29uc3QgcHVzaCA9IG5vZGUgPT4ge1xuICAgIGlmIChub2RlLnR5cGUgPT09ICd0ZXh0JyAmJiBwcmV2LnR5cGUgPT09ICdkb3QnKSB7XG4gICAgICBwcmV2LnR5cGUgPSAndGV4dCc7XG4gICAgfVxuXG4gICAgaWYgKHByZXYgJiYgcHJldi50eXBlID09PSAndGV4dCcgJiYgbm9kZS50eXBlID09PSAndGV4dCcpIHtcbiAgICAgIHByZXYudmFsdWUgKz0gbm9kZS52YWx1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBibG9jay5ub2Rlcy5wdXNoKG5vZGUpO1xuICAgIG5vZGUucGFyZW50ID0gYmxvY2s7XG4gICAgbm9kZS5wcmV2ID0gcHJldjtcbiAgICBwcmV2ID0gbm9kZTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcblxuICBwdXNoKHsgdHlwZTogJ2JvcycgfSk7XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgYmxvY2sgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICB2YWx1ZSA9IGFkdmFuY2UoKTtcblxuICAgIC8qKlxuICAgICAqIEludmFsaWQgY2hhcnNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gQ0hBUl9aRVJPX1dJRFRIX05PQlJFQUtfU1BBQ0UgfHwgdmFsdWUgPT09IENIQVJfTk9fQlJFQUtfU1BBQ0UpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVzY2FwZWQgY2hhcnNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gQ0hBUl9CQUNLU0xBU0gpIHtcbiAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlOiAob3B0aW9ucy5rZWVwRXNjYXBpbmcgPyB2YWx1ZSA6ICcnKSArIGFkdmFuY2UoKSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJpZ2h0IHNxdWFyZSBicmFja2V0IChsaXRlcmFsKTogJ10nXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09IENIQVJfUklHSFRfU1FVQVJFX0JSQUNLRVQpIHtcbiAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlOiAnXFxcXCcgKyB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExlZnQgc3F1YXJlIGJyYWNrZXQ6ICdbJ1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQpIHtcbiAgICAgIGJyYWNrZXRzKys7XG5cbiAgICAgIGxldCBjbG9zZWQgPSB0cnVlO1xuICAgICAgbGV0IG5leHQ7XG5cbiAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCAmJiAobmV4dCA9IGFkdmFuY2UoKSkpIHtcbiAgICAgICAgdmFsdWUgKz0gbmV4dDtcblxuICAgICAgICBpZiAobmV4dCA9PT0gQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUKSB7XG4gICAgICAgICAgYnJhY2tldHMrKztcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0ID09PSBDSEFSX0JBQ0tTTEFTSCkge1xuICAgICAgICAgIHZhbHVlICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0ID09PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUKSB7XG4gICAgICAgICAgYnJhY2tldHMtLTtcblxuICAgICAgICAgIGlmIChicmFja2V0cyA9PT0gMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFyZW50aGVzZXNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gQ0hBUl9MRUZUX1BBUkVOVEhFU0VTKSB7XG4gICAgICBibG9jayA9IHB1c2goeyB0eXBlOiAncGFyZW4nLCBub2RlczogW10gfSk7XG4gICAgICBzdGFjay5wdXNoKGJsb2NrKTtcbiAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSBDSEFSX1JJR0hUX1BBUkVOVEhFU0VTKSB7XG4gICAgICBpZiAoYmxvY2sudHlwZSAhPT0gJ3BhcmVuJykge1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZSB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBibG9jayA9IHN0YWNrLnBvcCgpO1xuICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICBibG9jayA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUXVvdGVzOiAnfFwifGBcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gQ0hBUl9ET1VCTEVfUVVPVEUgfHwgdmFsdWUgPT09IENIQVJfU0lOR0xFX1FVT1RFIHx8IHZhbHVlID09PSBDSEFSX0JBQ0tUSUNLKSB7XG4gICAgICBsZXQgb3BlbiA9IHZhbHVlO1xuICAgICAgbGV0IG5leHQ7XG5cbiAgICAgIGlmIChvcHRpb25zLmtlZXBRdW90ZXMgIT09IHRydWUpIHtcbiAgICAgICAgdmFsdWUgPSAnJztcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoICYmIChuZXh0ID0gYWR2YW5jZSgpKSkge1xuICAgICAgICBpZiAobmV4dCA9PT0gQ0hBUl9CQUNLU0xBU0gpIHtcbiAgICAgICAgICB2YWx1ZSArPSBuZXh0ICsgYWR2YW5jZSgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHQgPT09IG9wZW4pIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5rZWVwUXVvdGVzID09PSB0cnVlKSB2YWx1ZSArPSBuZXh0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsdWUgKz0gbmV4dDtcbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMZWZ0IGN1cmx5IGJyYWNlOiAneydcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gQ0hBUl9MRUZUX0NVUkxZX0JSQUNFKSB7XG4gICAgICBkZXB0aCsrO1xuXG4gICAgICBsZXQgZG9sbGFyID0gcHJldi52YWx1ZSAmJiBwcmV2LnZhbHVlLnNsaWNlKC0xKSA9PT0gJyQnIHx8IGJsb2NrLmRvbGxhciA9PT0gdHJ1ZTtcbiAgICAgIGxldCBicmFjZSA9IHtcbiAgICAgICAgdHlwZTogJ2JyYWNlJyxcbiAgICAgICAgb3BlbjogdHJ1ZSxcbiAgICAgICAgY2xvc2U6IGZhbHNlLFxuICAgICAgICBkb2xsYXIsXG4gICAgICAgIGRlcHRoLFxuICAgICAgICBjb21tYXM6IDAsXG4gICAgICAgIHJhbmdlczogMCxcbiAgICAgICAgbm9kZXM6IFtdXG4gICAgICB9O1xuXG4gICAgICBibG9jayA9IHB1c2goYnJhY2UpO1xuICAgICAgc3RhY2sucHVzaChibG9jayk7XG4gICAgICBwdXNoKHsgdHlwZTogJ29wZW4nLCB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJpZ2h0IGN1cmx5IGJyYWNlOiAnfSdcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gQ0hBUl9SSUdIVF9DVVJMWV9CUkFDRSkge1xuICAgICAgaWYgKGJsb2NrLnR5cGUgIT09ICdicmFjZScpIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgdHlwZSA9ICdjbG9zZSc7XG4gICAgICBibG9jayA9IHN0YWNrLnBvcCgpO1xuICAgICAgYmxvY2suY2xvc2UgPSB0cnVlO1xuXG4gICAgICBwdXNoKHsgdHlwZSwgdmFsdWUgfSk7XG4gICAgICBkZXB0aC0tO1xuXG4gICAgICBibG9jayA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tbWE6ICcsJ1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSBDSEFSX0NPTU1BICYmIGRlcHRoID4gMCkge1xuICAgICAgaWYgKGJsb2NrLnJhbmdlcyA+IDApIHtcbiAgICAgICAgYmxvY2sucmFuZ2VzID0gMDtcbiAgICAgICAgbGV0IG9wZW4gPSBibG9jay5ub2Rlcy5zaGlmdCgpO1xuICAgICAgICBibG9jay5ub2RlcyA9IFtvcGVuLCB7IHR5cGU6ICd0ZXh0JywgdmFsdWU6IHN0cmluZ2lmeShibG9jaykgfV07XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAnY29tbWEnLCB2YWx1ZSB9KTtcbiAgICAgIGJsb2NrLmNvbW1hcysrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRG90OiAnLidcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gQ0hBUl9ET1QgJiYgZGVwdGggPiAwICYmIGJsb2NrLmNvbW1hcyA9PT0gMCkge1xuICAgICAgbGV0IHNpYmxpbmdzID0gYmxvY2subm9kZXM7XG5cbiAgICAgIGlmIChkZXB0aCA9PT0gMCB8fCBzaWJsaW5ncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJldi50eXBlID09PSAnZG90Jykge1xuICAgICAgICBibG9jay5yYW5nZSA9IFtdO1xuICAgICAgICBwcmV2LnZhbHVlICs9IHZhbHVlO1xuICAgICAgICBwcmV2LnR5cGUgPSAncmFuZ2UnO1xuXG4gICAgICAgIGlmIChibG9jay5ub2Rlcy5sZW5ndGggIT09IDMgJiYgYmxvY2subm9kZXMubGVuZ3RoICE9PSA1KSB7XG4gICAgICAgICAgYmxvY2suaW52YWxpZCA9IHRydWU7XG4gICAgICAgICAgYmxvY2sucmFuZ2VzID0gMDtcbiAgICAgICAgICBwcmV2LnR5cGUgPSAndGV4dCc7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBibG9jay5yYW5nZXMrKztcbiAgICAgICAgYmxvY2suYXJncyA9IFtdO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByZXYudHlwZSA9PT0gJ3JhbmdlJykge1xuICAgICAgICBzaWJsaW5ncy5wb3AoKTtcblxuICAgICAgICBsZXQgYmVmb3JlID0gc2libGluZ3Nbc2libGluZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgIGJlZm9yZS52YWx1ZSArPSBwcmV2LnZhbHVlICsgdmFsdWU7XG4gICAgICAgIHByZXYgPSBiZWZvcmU7XG4gICAgICAgIGJsb2NrLnJhbmdlcy0tO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICdkb3QnLCB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRleHRcbiAgICAgKi9cblxuICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlIH0pO1xuICB9XG5cbiAgLy8gTWFyayBpbWJhbGFuY2VkIGJyYWNlcyBhbmQgYnJhY2tldHMgYXMgaW52YWxpZFxuICBkbyB7XG4gICAgYmxvY2sgPSBzdGFjay5wb3AoKTtcblxuICAgIGlmIChibG9jay50eXBlICE9PSAncm9vdCcpIHtcbiAgICAgIGJsb2NrLm5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgIGlmICghbm9kZS5ub2Rlcykge1xuICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09ICdvcGVuJykgbm9kZS5pc09wZW4gPSB0cnVlO1xuICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09ICdjbG9zZScpIG5vZGUuaXNDbG9zZSA9IHRydWU7XG4gICAgICAgICAgaWYgKCFub2RlLm5vZGVzKSBub2RlLnR5cGUgPSAndGV4dCc7XG4gICAgICAgICAgbm9kZS5pbnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGdldCB0aGUgbG9jYXRpb24gb2YgdGhlIGJsb2NrIG9uIHBhcmVudC5ub2RlcyAoYmxvY2sncyBzaWJsaW5ncylcbiAgICAgIGxldCBwYXJlbnQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgIGxldCBpbmRleCA9IHBhcmVudC5ub2Rlcy5pbmRleE9mKGJsb2NrKTtcbiAgICAgIC8vIHJlcGxhY2UgdGhlIChpbnZhbGlkKSBibG9jayB3aXRoIGl0J3Mgbm9kZXNcbiAgICAgIHBhcmVudC5ub2Rlcy5zcGxpY2UoaW5kZXgsIDEsIC4uLmJsb2NrLm5vZGVzKTtcbiAgICB9XG4gIH0gd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApO1xuXG4gIHB1c2goeyB0eXBlOiAnZW9zJyB9KTtcbiAgcmV0dXJuIGFzdDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBzdHJpbmdpZnkgPSByZXF1aXJlKCcuL2xpYi9zdHJpbmdpZnknKTtcbmNvbnN0IGNvbXBpbGUgPSByZXF1aXJlKCcuL2xpYi9jb21waWxlJyk7XG5jb25zdCBleHBhbmQgPSByZXF1aXJlKCcuL2xpYi9leHBhbmQnKTtcbmNvbnN0IHBhcnNlID0gcmVxdWlyZSgnLi9saWIvcGFyc2UnKTtcblxuLyoqXG4gKiBFeHBhbmQgdGhlIGdpdmVuIHBhdHRlcm4gb3IgY3JlYXRlIGEgcmVnZXgtY29tcGF0aWJsZSBzdHJpbmcuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGJyYWNlcyA9IHJlcXVpcmUoJ2JyYWNlcycpO1xuICogY29uc29sZS5sb2coYnJhY2VzKCd7YSxiLGN9JywgeyBjb21waWxlOiB0cnVlIH0pKTsgLy89PiBbJyhhfGJ8YyknXVxuICogY29uc29sZS5sb2coYnJhY2VzKCd7YSxiLGN9JykpOyAvLz0+IFsnYScsICdiJywgJ2MnXVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYHN0cmBcbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuY29uc3QgYnJhY2VzID0gKGlucHV0LCBvcHRpb25zID0ge30pID0+IHtcbiAgbGV0IG91dHB1dCA9IFtdO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgIGZvciAobGV0IHBhdHRlcm4gb2YgaW5wdXQpIHtcbiAgICAgIGxldCByZXN1bHQgPSBicmFjZXMuY3JlYXRlKHBhdHRlcm4sIG9wdGlvbnMpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICBvdXRwdXQucHVzaCguLi5yZXN1bHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0LnB1c2gocmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0cHV0ID0gW10uY29uY2F0KGJyYWNlcy5jcmVhdGUoaW5wdXQsIG9wdGlvbnMpKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZXhwYW5kID09PSB0cnVlICYmIG9wdGlvbnMubm9kdXBlcyA9PT0gdHJ1ZSkge1xuICAgIG91dHB1dCA9IFsuLi5uZXcgU2V0KG91dHB1dCldO1xuICB9XG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBnaXZlbiBgc3RyYCB3aXRoIHRoZSBnaXZlbiBgb3B0aW9uc2AuXG4gKlxuICogYGBganNcbiAqIC8vIGJyYWNlcy5wYXJzZShwYXR0ZXJuLCBbLCBvcHRpb25zXSk7XG4gKiBjb25zdCBhc3QgPSBicmFjZXMucGFyc2UoJ2Eve2IsY30vZCcpO1xuICogY29uc29sZS5sb2coYXN0KTtcbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IHBhdHRlcm4gQnJhY2UgcGF0dGVybiB0byBwYXJzZVxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyBhbiBBU1RcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuYnJhY2VzLnBhcnNlID0gKGlucHV0LCBvcHRpb25zID0ge30pID0+IHBhcnNlKGlucHV0LCBvcHRpb25zKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgYnJhY2VzIHN0cmluZyBmcm9tIGFuIEFTVCwgb3IgYW4gQVNUIG5vZGUuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGJyYWNlcyA9IHJlcXVpcmUoJ2JyYWNlcycpO1xuICogbGV0IGFzdCA9IGJyYWNlcy5wYXJzZSgnZm9vL3thLGJ9L2JhcicpO1xuICogY29uc29sZS5sb2coc3RyaW5naWZ5KGFzdC5ub2Rlc1syXSkpOyAvLz0+ICd7YSxifSdcbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBpbnB1dGAgQnJhY2UgcGF0dGVybiBvciBBU1QuXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgXG4gKiBAcmV0dXJuIHtBcnJheX0gUmV0dXJucyBhbiBhcnJheSBvZiBleHBhbmRlZCB2YWx1ZXMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmJyYWNlcy5zdHJpbmdpZnkgPSAoaW5wdXQsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBzdHJpbmdpZnkoYnJhY2VzLnBhcnNlKGlucHV0LCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIHN0cmluZ2lmeShpbnB1dCwgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIENvbXBpbGVzIGEgYnJhY2UgcGF0dGVybiBpbnRvIGEgcmVnZXgtY29tcGF0aWJsZSwgb3B0aW1pemVkIHN0cmluZy5cbiAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgbWFpbiBbYnJhY2VzXSgjYnJhY2VzKSBmdW5jdGlvbiBieSBkZWZhdWx0LlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBicmFjZXMgPSByZXF1aXJlKCdicmFjZXMnKTtcbiAqIGNvbnNvbGUubG9nKGJyYWNlcy5jb21waWxlKCdhL3tiLGN9L2QnKSk7XG4gKiAvLz0+IFsnYS8oYnxjKS9kJ11cbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBpbnB1dGAgQnJhY2UgcGF0dGVybiBvciBBU1QuXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgXG4gKiBAcmV0dXJuIHtBcnJheX0gUmV0dXJucyBhbiBhcnJheSBvZiBleHBhbmRlZCB2YWx1ZXMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmJyYWNlcy5jb21waWxlID0gKGlucHV0LCBvcHRpb25zID0ge30pID0+IHtcbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICBpbnB1dCA9IGJyYWNlcy5wYXJzZShpbnB1dCwgb3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIGNvbXBpbGUoaW5wdXQsIG9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBFeHBhbmRzIGEgYnJhY2UgcGF0dGVybiBpbnRvIGFuIGFycmF5LiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlXG4gKiBtYWluIFticmFjZXNdKCNicmFjZXMpIGZ1bmN0aW9uIHdoZW4gYG9wdGlvbnMuZXhwYW5kYCBpcyB0cnVlLiBCZWZvcmVcbiAqIHVzaW5nIHRoaXMgbWV0aG9kIGl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UgcmVhZCB0aGUgW3BlcmZvcm1hbmNlIG5vdGVzXSgjcGVyZm9ybWFuY2UpKVxuICogYW5kIGFkdmFudGFnZXMgb2YgdXNpbmcgWy5jb21waWxlXSgjY29tcGlsZSkgaW5zdGVhZC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYnJhY2VzID0gcmVxdWlyZSgnYnJhY2VzJyk7XG4gKiBjb25zb2xlLmxvZyhicmFjZXMuZXhwYW5kKCdhL3tiLGN9L2QnKSk7XG4gKiAvLz0+IFsnYS9iL2QnLCAnYS9jL2QnXTtcbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBwYXR0ZXJuYCBCcmFjZSBwYXR0ZXJuXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgXG4gKiBAcmV0dXJuIHtBcnJheX0gUmV0dXJucyBhbiBhcnJheSBvZiBleHBhbmRlZCB2YWx1ZXMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmJyYWNlcy5leHBhbmQgPSAoaW5wdXQsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgIGlucHV0ID0gYnJhY2VzLnBhcnNlKGlucHV0LCBvcHRpb25zKTtcbiAgfVxuXG4gIGxldCByZXN1bHQgPSBleHBhbmQoaW5wdXQsIG9wdGlvbnMpO1xuXG4gIC8vIGZpbHRlciBvdXQgZW1wdHkgc3RyaW5ncyBpZiBzcGVjaWZpZWRcbiAgaWYgKG9wdGlvbnMubm9lbXB0eSA9PT0gdHJ1ZSkge1xuICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoQm9vbGVhbik7XG4gIH1cblxuICAvLyBmaWx0ZXIgb3V0IGR1cGxpY2F0ZXMgaWYgc3BlY2lmaWVkXG4gIGlmIChvcHRpb25zLm5vZHVwZXMgPT09IHRydWUpIHtcbiAgICByZXN1bHQgPSBbLi4ubmV3IFNldChyZXN1bHQpXTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyBhIGJyYWNlIHBhdHRlcm4gYW5kIHJldHVybnMgZWl0aGVyIGFuIGV4cGFuZGVkIGFycmF5XG4gKiAoaWYgYG9wdGlvbnMuZXhwYW5kYCBpcyB0cnVlKSwgYSBoaWdobHkgb3B0aW1pemVkIHJlZ2V4LWNvbXBhdGlibGUgc3RyaW5nLlxuICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBtYWluIFticmFjZXNdKCNicmFjZXMpIGZ1bmN0aW9uLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBicmFjZXMgPSByZXF1aXJlKCdicmFjZXMnKTtcbiAqIGNvbnNvbGUubG9nKGJyYWNlcy5jcmVhdGUoJ3VzZXItezIwMC4uMzAwfS9wcm9qZWN0LXthLGIsY30tezEuLjEwfScpKVxuICogLy89PiAndXNlci0oMjBbMC05XXwyWzEtOV1bMC05XXwzMDApL3Byb2plY3QtKGF8YnxjKS0oWzEtOV18MTApJ1xuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYHBhdHRlcm5gIEJyYWNlIHBhdHRlcm5cbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEByZXR1cm4ge0FycmF5fSBSZXR1cm5zIGFuIGFycmF5IG9mIGV4cGFuZGVkIHZhbHVlcy5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuYnJhY2VzLmNyZWF0ZSA9IChpbnB1dCwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGlmIChpbnB1dCA9PT0gJycgfHwgaW5wdXQubGVuZ3RoIDwgMykge1xuICAgIHJldHVybiBbaW5wdXRdO1xuICB9XG5cbiByZXR1cm4gb3B0aW9ucy5leHBhbmQgIT09IHRydWVcbiAgICA/IGJyYWNlcy5jb21waWxlKGlucHV0LCBvcHRpb25zKVxuICAgIDogYnJhY2VzLmV4cGFuZChpbnB1dCwgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIEV4cG9zZSBcImJyYWNlc1wiXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBicmFjZXM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3QgV0lOX1NMQVNIID0gJ1xcXFxcXFxcLyc7XG5jb25zdCBXSU5fTk9fU0xBU0ggPSBgW14ke1dJTl9TTEFTSH1dYDtcblxuLyoqXG4gKiBQb3NpeCBnbG9iIHJlZ2V4XG4gKi9cblxuY29uc3QgRE9UX0xJVEVSQUwgPSAnXFxcXC4nO1xuY29uc3QgUExVU19MSVRFUkFMID0gJ1xcXFwrJztcbmNvbnN0IFFNQVJLX0xJVEVSQUwgPSAnXFxcXD8nO1xuY29uc3QgU0xBU0hfTElURVJBTCA9ICdcXFxcLyc7XG5jb25zdCBPTkVfQ0hBUiA9ICcoPz0uKSc7XG5jb25zdCBRTUFSSyA9ICdbXi9dJztcbmNvbnN0IEVORF9BTkNIT1IgPSBgKD86JHtTTEFTSF9MSVRFUkFMfXwkKWA7XG5jb25zdCBTVEFSVF9BTkNIT1IgPSBgKD86Xnwke1NMQVNIX0xJVEVSQUx9KWA7XG5jb25zdCBET1RTX1NMQVNIID0gYCR7RE9UX0xJVEVSQUx9ezEsMn0ke0VORF9BTkNIT1J9YDtcbmNvbnN0IE5PX0RPVCA9IGAoPyEke0RPVF9MSVRFUkFMfSlgO1xuY29uc3QgTk9fRE9UUyA9IGAoPyEke1NUQVJUX0FOQ0hPUn0ke0RPVFNfU0xBU0h9KWA7XG5jb25zdCBOT19ET1RfU0xBU0ggPSBgKD8hJHtET1RfTElURVJBTH17MCwxfSR7RU5EX0FOQ0hPUn0pYDtcbmNvbnN0IE5PX0RPVFNfU0xBU0ggPSBgKD8hJHtET1RTX1NMQVNIfSlgO1xuY29uc3QgUU1BUktfTk9fRE9UID0gYFteLiR7U0xBU0hfTElURVJBTH1dYDtcbmNvbnN0IFNUQVIgPSBgJHtRTUFSS30qP2A7XG5cbmNvbnN0IFBPU0lYX0NIQVJTID0ge1xuICBET1RfTElURVJBTCxcbiAgUExVU19MSVRFUkFMLFxuICBRTUFSS19MSVRFUkFMLFxuICBTTEFTSF9MSVRFUkFMLFxuICBPTkVfQ0hBUixcbiAgUU1BUkssXG4gIEVORF9BTkNIT1IsXG4gIERPVFNfU0xBU0gsXG4gIE5PX0RPVCxcbiAgTk9fRE9UUyxcbiAgTk9fRE9UX1NMQVNILFxuICBOT19ET1RTX1NMQVNILFxuICBRTUFSS19OT19ET1QsXG4gIFNUQVIsXG4gIFNUQVJUX0FOQ0hPUlxufTtcblxuLyoqXG4gKiBXaW5kb3dzIGdsb2IgcmVnZXhcbiAqL1xuXG5jb25zdCBXSU5ET1dTX0NIQVJTID0ge1xuICAuLi5QT1NJWF9DSEFSUyxcblxuICBTTEFTSF9MSVRFUkFMOiBgWyR7V0lOX1NMQVNIfV1gLFxuICBRTUFSSzogV0lOX05PX1NMQVNILFxuICBTVEFSOiBgJHtXSU5fTk9fU0xBU0h9Kj9gLFxuICBET1RTX1NMQVNIOiBgJHtET1RfTElURVJBTH17MSwyfSg/Olske1dJTl9TTEFTSH1dfCQpYCxcbiAgTk9fRE9UOiBgKD8hJHtET1RfTElURVJBTH0pYCxcbiAgTk9fRE9UUzogYCg/ISg/Ol58WyR7V0lOX1NMQVNIfV0pJHtET1RfTElURVJBTH17MSwyfSg/Olske1dJTl9TTEFTSH1dfCQpKWAsXG4gIE5PX0RPVF9TTEFTSDogYCg/ISR7RE9UX0xJVEVSQUx9ezAsMX0oPzpbJHtXSU5fU0xBU0h9XXwkKSlgLFxuICBOT19ET1RTX1NMQVNIOiBgKD8hJHtET1RfTElURVJBTH17MSwyfSg/Olske1dJTl9TTEFTSH1dfCQpKWAsXG4gIFFNQVJLX05PX0RPVDogYFteLiR7V0lOX1NMQVNIfV1gLFxuICBTVEFSVF9BTkNIT1I6IGAoPzpefFske1dJTl9TTEFTSH1dKWAsXG4gIEVORF9BTkNIT1I6IGAoPzpbJHtXSU5fU0xBU0h9XXwkKWBcbn07XG5cbi8qKlxuICogUE9TSVggQnJhY2tldCBSZWdleFxuICovXG5cbmNvbnN0IFBPU0lYX1JFR0VYX1NPVVJDRSA9IHtcbiAgYWxudW06ICdhLXpBLVowLTknLFxuICBhbHBoYTogJ2EtekEtWicsXG4gIGFzY2lpOiAnXFxcXHgwMC1cXFxceDdGJyxcbiAgYmxhbms6ICcgXFxcXHQnLFxuICBjbnRybDogJ1xcXFx4MDAtXFxcXHgxRlxcXFx4N0YnLFxuICBkaWdpdDogJzAtOScsXG4gIGdyYXBoOiAnXFxcXHgyMS1cXFxceDdFJyxcbiAgbG93ZXI6ICdhLXonLFxuICBwcmludDogJ1xcXFx4MjAtXFxcXHg3RSAnLFxuICBwdW5jdDogJ1xcXFwtIVwiIyQlJlxcJygpXFxcXCorLC4vOjs8PT4/QFtcXFxcXV5fYHt8fX4nLFxuICBzcGFjZTogJyBcXFxcdFxcXFxyXFxcXG5cXFxcdlxcXFxmJyxcbiAgdXBwZXI6ICdBLVonLFxuICB3b3JkOiAnQS1aYS16MC05XycsXG4gIHhkaWdpdDogJ0EtRmEtZjAtOSdcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNQVhfTEVOR1RIOiAxMDI0ICogNjQsXG4gIFBPU0lYX1JFR0VYX1NPVVJDRSxcblxuICAvLyByZWd1bGFyIGV4cHJlc3Npb25zXG4gIFJFR0VYX0JBQ0tTTEFTSDogL1xcXFwoPyFbKis/XiR7fSh8KVtcXF1dKS9nLFxuICBSRUdFWF9OT05fU1BFQ0lBTF9DSEFSUzogL15bXkAhW1xcXS4sJCorP157fSgpfFxcXFwvXSsvLFxuICBSRUdFWF9TUEVDSUFMX0NIQVJTOiAvWy0qKz8uXiR7fSh8KVtcXF1dLyxcbiAgUkVHRVhfU1BFQ0lBTF9DSEFSU19CQUNLUkVGOiAvKFxcXFw/KSgoXFxXKShcXDMqKSkvZyxcbiAgUkVHRVhfU1BFQ0lBTF9DSEFSU19HTE9CQUw6IC8oWy0qKz8uXiR7fSh8KVtcXF1dKS9nLFxuICBSRUdFWF9SRU1PVkVfQkFDS1NMQVNIOiAvKD86XFxbLio/W15cXFxcXVxcXXxcXFxcKD89LikpL2csXG5cbiAgLy8gUmVwbGFjZSBnbG9icyB3aXRoIGVxdWl2YWxlbnQgcGF0dGVybnMgdG8gcmVkdWNlIHBhcnNpbmcgdGltZS5cbiAgUkVQTEFDRU1FTlRTOiB7XG4gICAgJyoqKic6ICcqJyxcbiAgICAnKiovKionOiAnKionLFxuICAgICcqKi8qKi8qKic6ICcqKidcbiAgfSxcblxuICAvLyBEaWdpdHNcbiAgQ0hBUl8wOiA0OCwgLyogMCAqL1xuICBDSEFSXzk6IDU3LCAvKiA5ICovXG5cbiAgLy8gQWxwaGFiZXQgY2hhcnMuXG4gIENIQVJfVVBQRVJDQVNFX0E6IDY1LCAvKiBBICovXG4gIENIQVJfTE9XRVJDQVNFX0E6IDk3LCAvKiBhICovXG4gIENIQVJfVVBQRVJDQVNFX1o6IDkwLCAvKiBaICovXG4gIENIQVJfTE9XRVJDQVNFX1o6IDEyMiwgLyogeiAqL1xuXG4gIENIQVJfTEVGVF9QQVJFTlRIRVNFUzogNDAsIC8qICggKi9cbiAgQ0hBUl9SSUdIVF9QQVJFTlRIRVNFUzogNDEsIC8qICkgKi9cblxuICBDSEFSX0FTVEVSSVNLOiA0MiwgLyogKiAqL1xuXG4gIC8vIE5vbi1hbHBoYWJldGljIGNoYXJzLlxuICBDSEFSX0FNUEVSU0FORDogMzgsIC8qICYgKi9cbiAgQ0hBUl9BVDogNjQsIC8qIEAgKi9cbiAgQ0hBUl9CQUNLV0FSRF9TTEFTSDogOTIsIC8qIFxcICovXG4gIENIQVJfQ0FSUklBR0VfUkVUVVJOOiAxMywgLyogXFxyICovXG4gIENIQVJfQ0lSQ1VNRkxFWF9BQ0NFTlQ6IDk0LCAvKiBeICovXG4gIENIQVJfQ09MT046IDU4LCAvKiA6ICovXG4gIENIQVJfQ09NTUE6IDQ0LCAvKiAsICovXG4gIENIQVJfRE9UOiA0NiwgLyogLiAqL1xuICBDSEFSX0RPVUJMRV9RVU9URTogMzQsIC8qIFwiICovXG4gIENIQVJfRVFVQUw6IDYxLCAvKiA9ICovXG4gIENIQVJfRVhDTEFNQVRJT05fTUFSSzogMzMsIC8qICEgKi9cbiAgQ0hBUl9GT1JNX0ZFRUQ6IDEyLCAvKiBcXGYgKi9cbiAgQ0hBUl9GT1JXQVJEX1NMQVNIOiA0NywgLyogLyAqL1xuICBDSEFSX0dSQVZFX0FDQ0VOVDogOTYsIC8qIGAgKi9cbiAgQ0hBUl9IQVNIOiAzNSwgLyogIyAqL1xuICBDSEFSX0hZUEhFTl9NSU5VUzogNDUsIC8qIC0gKi9cbiAgQ0hBUl9MRUZUX0FOR0xFX0JSQUNLRVQ6IDYwLCAvKiA8ICovXG4gIENIQVJfTEVGVF9DVVJMWV9CUkFDRTogMTIzLCAvKiB7ICovXG4gIENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVDogOTEsIC8qIFsgKi9cbiAgQ0hBUl9MSU5FX0ZFRUQ6IDEwLCAvKiBcXG4gKi9cbiAgQ0hBUl9OT19CUkVBS19TUEFDRTogMTYwLCAvKiBcXHUwMEEwICovXG4gIENIQVJfUEVSQ0VOVDogMzcsIC8qICUgKi9cbiAgQ0hBUl9QTFVTOiA0MywgLyogKyAqL1xuICBDSEFSX1FVRVNUSU9OX01BUks6IDYzLCAvKiA/ICovXG4gIENIQVJfUklHSFRfQU5HTEVfQlJBQ0tFVDogNjIsIC8qID4gKi9cbiAgQ0hBUl9SSUdIVF9DVVJMWV9CUkFDRTogMTI1LCAvKiB9ICovXG4gIENIQVJfUklHSFRfU1FVQVJFX0JSQUNLRVQ6IDkzLCAvKiBdICovXG4gIENIQVJfU0VNSUNPTE9OOiA1OSwgLyogOyAqL1xuICBDSEFSX1NJTkdMRV9RVU9URTogMzksIC8qICcgKi9cbiAgQ0hBUl9TUEFDRTogMzIsIC8qICAgKi9cbiAgQ0hBUl9UQUI6IDksIC8qIFxcdCAqL1xuICBDSEFSX1VOREVSU0NPUkU6IDk1LCAvKiBfICovXG4gIENIQVJfVkVSVElDQUxfTElORTogMTI0LCAvKiB8ICovXG4gIENIQVJfWkVST19XSURUSF9OT0JSRUFLX1NQQUNFOiA2NTI3OSwgLyogXFx1RkVGRiAqL1xuXG4gIFNFUDogcGF0aC5zZXAsXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBFWFRHTE9CX0NIQVJTXG4gICAqL1xuXG4gIGV4dGdsb2JDaGFycyhjaGFycykge1xuICAgIHJldHVybiB7XG4gICAgICAnISc6IHsgdHlwZTogJ25lZ2F0ZScsIG9wZW46ICcoPzooPyEoPzonLCBjbG9zZTogYCkpJHtjaGFycy5TVEFSfSlgIH0sXG4gICAgICAnPyc6IHsgdHlwZTogJ3FtYXJrJywgb3BlbjogJyg/OicsIGNsb3NlOiAnKT8nIH0sXG4gICAgICAnKyc6IHsgdHlwZTogJ3BsdXMnLCBvcGVuOiAnKD86JywgY2xvc2U6ICcpKycgfSxcbiAgICAgICcqJzogeyB0eXBlOiAnc3RhcicsIG9wZW46ICcoPzonLCBjbG9zZTogJykqJyB9LFxuICAgICAgJ0AnOiB7IHR5cGU6ICdhdCcsIG9wZW46ICcoPzonLCBjbG9zZTogJyknIH1cbiAgICB9O1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhdGUgR0xPQl9DSEFSU1xuICAgKi9cblxuICBnbG9iQ2hhcnMod2luMzIpIHtcbiAgICByZXR1cm4gd2luMzIgPT09IHRydWUgPyBXSU5ET1dTX0NIQVJTIDogUE9TSVhfQ0hBUlM7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3Qgd2luMzIgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuY29uc3Qge1xuICBSRUdFWF9CQUNLU0xBU0gsXG4gIFJFR0VYX1JFTU9WRV9CQUNLU0xBU0gsXG4gIFJFR0VYX1NQRUNJQUxfQ0hBUlMsXG4gIFJFR0VYX1NQRUNJQUxfQ0hBUlNfR0xPQkFMXG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKTtcblxuZXhwb3J0cy5pc09iamVjdCA9IHZhbCA9PiB2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsKTtcbmV4cG9ydHMuaGFzUmVnZXhDaGFycyA9IHN0ciA9PiBSRUdFWF9TUEVDSUFMX0NIQVJTLnRlc3Qoc3RyKTtcbmV4cG9ydHMuaXNSZWdleENoYXIgPSBzdHIgPT4gc3RyLmxlbmd0aCA9PT0gMSAmJiBleHBvcnRzLmhhc1JlZ2V4Q2hhcnMoc3RyKTtcbmV4cG9ydHMuZXNjYXBlUmVnZXggPSBzdHIgPT4gc3RyLnJlcGxhY2UoUkVHRVhfU1BFQ0lBTF9DSEFSU19HTE9CQUwsICdcXFxcJDEnKTtcbmV4cG9ydHMudG9Qb3NpeFNsYXNoZXMgPSBzdHIgPT4gc3RyLnJlcGxhY2UoUkVHRVhfQkFDS1NMQVNILCAnLycpO1xuXG5leHBvcnRzLnJlbW92ZUJhY2tzbGFzaGVzID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKFJFR0VYX1JFTU9WRV9CQUNLU0xBU0gsIG1hdGNoID0+IHtcbiAgICByZXR1cm4gbWF0Y2ggPT09ICdcXFxcJyA/ICcnIDogbWF0Y2g7XG4gIH0pO1xufTtcblxuZXhwb3J0cy5zdXBwb3J0c0xvb2tiZWhpbmRzID0gKCkgPT4ge1xuICBjb25zdCBzZWdzID0gcHJvY2Vzcy52ZXJzaW9uLnNsaWNlKDEpLnNwbGl0KCcuJykubWFwKE51bWJlcik7XG4gIGlmIChzZWdzLmxlbmd0aCA9PT0gMyAmJiBzZWdzWzBdID49IDkgfHwgKHNlZ3NbMF0gPT09IDggJiYgc2Vnc1sxXSA+PSAxMCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnRzLmlzV2luZG93cyA9IG9wdGlvbnMgPT4ge1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy53aW5kb3dzID09PSAnYm9vbGVhbicpIHtcbiAgICByZXR1cm4gb3B0aW9ucy53aW5kb3dzO1xuICB9XG4gIHJldHVybiB3aW4zMiA9PT0gdHJ1ZSB8fCBwYXRoLnNlcCA9PT0gJ1xcXFwnO1xufTtcblxuZXhwb3J0cy5lc2NhcGVMYXN0ID0gKGlucHV0LCBjaGFyLCBsYXN0SWR4KSA9PiB7XG4gIGNvbnN0IGlkeCA9IGlucHV0Lmxhc3RJbmRleE9mKGNoYXIsIGxhc3RJZHgpO1xuICBpZiAoaWR4ID09PSAtMSkgcmV0dXJuIGlucHV0O1xuICBpZiAoaW5wdXRbaWR4IC0gMV0gPT09ICdcXFxcJykgcmV0dXJuIGV4cG9ydHMuZXNjYXBlTGFzdChpbnB1dCwgY2hhciwgaWR4IC0gMSk7XG4gIHJldHVybiBgJHtpbnB1dC5zbGljZSgwLCBpZHgpfVxcXFwke2lucHV0LnNsaWNlKGlkeCl9YDtcbn07XG5cbmV4cG9ydHMucmVtb3ZlUHJlZml4ID0gKGlucHV0LCBzdGF0ZSA9IHt9KSA9PiB7XG4gIGxldCBvdXRwdXQgPSBpbnB1dDtcbiAgaWYgKG91dHB1dC5zdGFydHNXaXRoKCcuLycpKSB7XG4gICAgb3V0cHV0ID0gb3V0cHV0LnNsaWNlKDIpO1xuICAgIHN0YXRlLnByZWZpeCA9ICcuLyc7XG4gIH1cbiAgcmV0dXJuIG91dHB1dDtcbn07XG5cbmV4cG9ydHMud3JhcE91dHB1dCA9IChpbnB1dCwgc3RhdGUgPSB7fSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHByZXBlbmQgPSBvcHRpb25zLmNvbnRhaW5zID8gJycgOiAnXic7XG4gIGNvbnN0IGFwcGVuZCA9IG9wdGlvbnMuY29udGFpbnMgPyAnJyA6ICckJztcblxuICBsZXQgb3V0cHV0ID0gYCR7cHJlcGVuZH0oPzoke2lucHV0fSkke2FwcGVuZH1gO1xuICBpZiAoc3RhdGUubmVnYXRlZCA9PT0gdHJ1ZSkge1xuICAgIG91dHB1dCA9IGAoPzpeKD8hJHtvdXRwdXR9KS4qJClgO1xuICB9XG4gIHJldHVybiBvdXRwdXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5jb25zdCB7XG4gIENIQVJfQVNURVJJU0ssICAgICAgICAgICAgIC8qICogKi9cbiAgQ0hBUl9BVCwgICAgICAgICAgICAgICAgICAgLyogQCAqL1xuICBDSEFSX0JBQ0tXQVJEX1NMQVNILCAgICAgICAvKiBcXCAqL1xuICBDSEFSX0NPTU1BLCAgICAgICAgICAgICAgICAvKiAsICovXG4gIENIQVJfRE9ULCAgICAgICAgICAgICAgICAgIC8qIC4gKi9cbiAgQ0hBUl9FWENMQU1BVElPTl9NQVJLLCAgICAgLyogISAqL1xuICBDSEFSX0ZPUldBUkRfU0xBU0gsICAgICAgICAvKiAvICovXG4gIENIQVJfTEVGVF9DVVJMWV9CUkFDRSwgICAgIC8qIHsgKi9cbiAgQ0hBUl9MRUZUX1BBUkVOVEhFU0VTLCAgICAgLyogKCAqL1xuICBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQsICAvKiBbICovXG4gIENIQVJfUExVUywgICAgICAgICAgICAgICAgIC8qICsgKi9cbiAgQ0hBUl9RVUVTVElPTl9NQVJLLCAgICAgICAgLyogPyAqL1xuICBDSEFSX1JJR0hUX0NVUkxZX0JSQUNFLCAgICAvKiB9ICovXG4gIENIQVJfUklHSFRfUEFSRU5USEVTRVMsICAgIC8qICkgKi9cbiAgQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCAgLyogXSAqL1xufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJyk7XG5cbmNvbnN0IGlzUGF0aFNlcGFyYXRvciA9IGNvZGUgPT4ge1xuICByZXR1cm4gY29kZSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIIHx8IGNvZGUgPT09IENIQVJfQkFDS1dBUkRfU0xBU0g7XG59O1xuXG5jb25zdCBkZXB0aCA9IHRva2VuID0+IHtcbiAgaWYgKHRva2VuLmlzUHJlZml4ICE9PSB0cnVlKSB7XG4gICAgdG9rZW4uZGVwdGggPSB0b2tlbi5pc0dsb2JzdGFyID8gSW5maW5pdHkgOiAxO1xuICB9XG59O1xuXG4vKipcbiAqIFF1aWNrbHkgc2NhbnMgYSBnbG9iIHBhdHRlcm4gYW5kIHJldHVybnMgYW4gb2JqZWN0IHdpdGggYSBoYW5kZnVsIG9mXG4gKiB1c2VmdWwgcHJvcGVydGllcywgbGlrZSBgaXNHbG9iYCwgYHBhdGhgICh0aGUgbGVhZGluZyBub24tZ2xvYiwgaWYgaXQgZXhpc3RzKSxcbiAqIGBnbG9iYCAodGhlIGFjdHVhbCBwYXR0ZXJuKSwgYG5lZ2F0ZWRgICh0cnVlIGlmIHRoZSBwYXRoIHN0YXJ0cyB3aXRoIGAhYCBidXQgbm90XG4gKiB3aXRoIGAhKGApIGFuZCBgbmVnYXRlZEV4dGdsb2JgICh0cnVlIGlmIHRoZSBwYXRoIHN0YXJ0cyB3aXRoIGAhKGApLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBwbSA9IHJlcXVpcmUoJ3BpY29tYXRjaCcpO1xuICogY29uc29sZS5sb2cocG0uc2NhbignZm9vL2Jhci8qLmpzJykpO1xuICogeyBpc0dsb2I6IHRydWUsIGlucHV0OiAnZm9vL2Jhci8qLmpzJywgYmFzZTogJ2Zvby9iYXInLCBnbG9iOiAnKi5qcycgfVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYHN0cmBcbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0b2tlbnMgYW5kIHJlZ2V4IHNvdXJjZSBzdHJpbmcuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmNvbnN0IHNjYW4gPSAoaW5wdXQsIG9wdGlvbnMpID0+IHtcbiAgY29uc3Qgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgY29uc3QgbGVuZ3RoID0gaW5wdXQubGVuZ3RoIC0gMTtcbiAgY29uc3Qgc2NhblRvRW5kID0gb3B0cy5wYXJ0cyA9PT0gdHJ1ZSB8fCBvcHRzLnNjYW5Ub0VuZCA9PT0gdHJ1ZTtcbiAgY29uc3Qgc2xhc2hlcyA9IFtdO1xuICBjb25zdCB0b2tlbnMgPSBbXTtcbiAgY29uc3QgcGFydHMgPSBbXTtcblxuICBsZXQgc3RyID0gaW5wdXQ7XG4gIGxldCBpbmRleCA9IC0xO1xuICBsZXQgc3RhcnQgPSAwO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgbGV0IGlzQnJhY2UgPSBmYWxzZTtcbiAgbGV0IGlzQnJhY2tldCA9IGZhbHNlO1xuICBsZXQgaXNHbG9iID0gZmFsc2U7XG4gIGxldCBpc0V4dGdsb2IgPSBmYWxzZTtcbiAgbGV0IGlzR2xvYnN0YXIgPSBmYWxzZTtcbiAgbGV0IGJyYWNlRXNjYXBlZCA9IGZhbHNlO1xuICBsZXQgYmFja3NsYXNoZXMgPSBmYWxzZTtcbiAgbGV0IG5lZ2F0ZWQgPSBmYWxzZTtcbiAgbGV0IG5lZ2F0ZWRFeHRnbG9iID0gZmFsc2U7XG4gIGxldCBmaW5pc2hlZCA9IGZhbHNlO1xuICBsZXQgYnJhY2VzID0gMDtcbiAgbGV0IHByZXY7XG4gIGxldCBjb2RlO1xuICBsZXQgdG9rZW4gPSB7IHZhbHVlOiAnJywgZGVwdGg6IDAsIGlzR2xvYjogZmFsc2UgfTtcblxuICBjb25zdCBlb3MgPSAoKSA9PiBpbmRleCA+PSBsZW5ndGg7XG4gIGNvbnN0IHBlZWsgPSAoKSA9PiBzdHIuY2hhckNvZGVBdChpbmRleCArIDEpO1xuICBjb25zdCBhZHZhbmNlID0gKCkgPT4ge1xuICAgIHByZXYgPSBjb2RlO1xuICAgIHJldHVybiBzdHIuY2hhckNvZGVBdCgrK2luZGV4KTtcbiAgfTtcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBjb2RlID0gYWR2YW5jZSgpO1xuICAgIGxldCBuZXh0O1xuXG4gICAgaWYgKGNvZGUgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIHtcbiAgICAgIGJhY2tzbGFzaGVzID0gdG9rZW4uYmFja3NsYXNoZXMgPSB0cnVlO1xuICAgICAgY29kZSA9IGFkdmFuY2UoKTtcblxuICAgICAgaWYgKGNvZGUgPT09IENIQVJfTEVGVF9DVVJMWV9CUkFDRSkge1xuICAgICAgICBicmFjZUVzY2FwZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGJyYWNlRXNjYXBlZCA9PT0gdHJ1ZSB8fCBjb2RlID09PSBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0UpIHtcbiAgICAgIGJyYWNlcysrO1xuXG4gICAgICB3aGlsZSAoZW9zKCkgIT09IHRydWUgJiYgKGNvZGUgPSBhZHZhbmNlKCkpKSB7XG4gICAgICAgIGlmIChjb2RlID09PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKSB7XG4gICAgICAgICAgYmFja3NsYXNoZXMgPSB0b2tlbi5iYWNrc2xhc2hlcyA9IHRydWU7XG4gICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvZGUgPT09IENIQVJfTEVGVF9DVVJMWV9CUkFDRSkge1xuICAgICAgICAgIGJyYWNlcysrO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJyYWNlRXNjYXBlZCAhPT0gdHJ1ZSAmJiBjb2RlID09PSBDSEFSX0RPVCAmJiAoY29kZSA9IGFkdmFuY2UoKSkgPT09IENIQVJfRE9UKSB7XG4gICAgICAgICAgaXNCcmFjZSA9IHRva2VuLmlzQnJhY2UgPSB0cnVlO1xuICAgICAgICAgIGlzR2xvYiA9IHRva2VuLmlzR2xvYiA9IHRydWU7XG4gICAgICAgICAgZmluaXNoZWQgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKHNjYW5Ub0VuZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYnJhY2VFc2NhcGVkICE9PSB0cnVlICYmIGNvZGUgPT09IENIQVJfQ09NTUEpIHtcbiAgICAgICAgICBpc0JyYWNlID0gdG9rZW4uaXNCcmFjZSA9IHRydWU7XG4gICAgICAgICAgaXNHbG9iID0gdG9rZW4uaXNHbG9iID0gdHJ1ZTtcbiAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2RlID09PSBDSEFSX1JJR0hUX0NVUkxZX0JSQUNFKSB7XG4gICAgICAgICAgYnJhY2VzLS07XG5cbiAgICAgICAgICBpZiAoYnJhY2VzID09PSAwKSB7XG4gICAgICAgICAgICBicmFjZUVzY2FwZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlzQnJhY2UgPSB0b2tlbi5pc0JyYWNlID0gdHJ1ZTtcbiAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIKSB7XG4gICAgICBzbGFzaGVzLnB1c2goaW5kZXgpO1xuICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgdG9rZW4gPSB7IHZhbHVlOiAnJywgZGVwdGg6IDAsIGlzR2xvYjogZmFsc2UgfTtcblxuICAgICAgaWYgKGZpbmlzaGVkID09PSB0cnVlKSBjb250aW51ZTtcbiAgICAgIGlmIChwcmV2ID09PSBDSEFSX0RPVCAmJiBpbmRleCA9PT0gKHN0YXJ0ICsgMSkpIHtcbiAgICAgICAgc3RhcnQgKz0gMjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGxhc3RJbmRleCA9IGluZGV4ICsgMTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChvcHRzLm5vZXh0ICE9PSB0cnVlKSB7XG4gICAgICBjb25zdCBpc0V4dGdsb2JDaGFyID0gY29kZSA9PT0gQ0hBUl9QTFVTXG4gICAgICAgIHx8IGNvZGUgPT09IENIQVJfQVRcbiAgICAgICAgfHwgY29kZSA9PT0gQ0hBUl9BU1RFUklTS1xuICAgICAgICB8fCBjb2RlID09PSBDSEFSX1FVRVNUSU9OX01BUktcbiAgICAgICAgfHwgY29kZSA9PT0gQ0hBUl9FWENMQU1BVElPTl9NQVJLO1xuXG4gICAgICBpZiAoaXNFeHRnbG9iQ2hhciA9PT0gdHJ1ZSAmJiBwZWVrKCkgPT09IENIQVJfTEVGVF9QQVJFTlRIRVNFUykge1xuICAgICAgICBpc0dsb2IgPSB0b2tlbi5pc0dsb2IgPSB0cnVlO1xuICAgICAgICBpc0V4dGdsb2IgPSB0b2tlbi5pc0V4dGdsb2IgPSB0cnVlO1xuICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG4gICAgICAgIGlmIChjb2RlID09PSBDSEFSX0VYQ0xBTUFUSU9OX01BUksgJiYgaW5kZXggPT09IHN0YXJ0KSB7XG4gICAgICAgICAgbmVnYXRlZEV4dGdsb2IgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjYW5Ub0VuZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHdoaWxlIChlb3MoKSAhPT0gdHJ1ZSAmJiAoY29kZSA9IGFkdmFuY2UoKSkpIHtcbiAgICAgICAgICAgIGlmIChjb2RlID09PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKSB7XG4gICAgICAgICAgICAgIGJhY2tzbGFzaGVzID0gdG9rZW4uYmFja3NsYXNoZXMgPSB0cnVlO1xuICAgICAgICAgICAgICBjb2RlID0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvZGUgPT09IENIQVJfUklHSFRfUEFSRU5USEVTRVMpIHtcbiAgICAgICAgICAgICAgaXNHbG9iID0gdG9rZW4uaXNHbG9iID0gdHJ1ZTtcbiAgICAgICAgICAgICAgZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPT09IENIQVJfQVNURVJJU0spIHtcbiAgICAgIGlmIChwcmV2ID09PSBDSEFSX0FTVEVSSVNLKSBpc0dsb2JzdGFyID0gdG9rZW4uaXNHbG9ic3RhciA9IHRydWU7XG4gICAgICBpc0dsb2IgPSB0b2tlbi5pc0dsb2IgPSB0cnVlO1xuICAgICAgZmluaXNoZWQgPSB0cnVlO1xuXG4gICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPT09IENIQVJfUVVFU1RJT05fTUFSSykge1xuICAgICAgaXNHbG9iID0gdG9rZW4uaXNHbG9iID0gdHJ1ZTtcbiAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcblxuICAgICAgaWYgKHNjYW5Ub0VuZCA9PT0gdHJ1ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChjb2RlID09PSBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQpIHtcbiAgICAgIHdoaWxlIChlb3MoKSAhPT0gdHJ1ZSAmJiAobmV4dCA9IGFkdmFuY2UoKSkpIHtcbiAgICAgICAgaWYgKG5leHQgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIHtcbiAgICAgICAgICBiYWNrc2xhc2hlcyA9IHRva2VuLmJhY2tzbGFzaGVzID0gdHJ1ZTtcbiAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dCA9PT0gQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCkge1xuICAgICAgICAgIGlzQnJhY2tldCA9IHRva2VuLmlzQnJhY2tldCA9IHRydWU7XG4gICAgICAgICAgaXNHbG9iID0gdG9rZW4uaXNHbG9iID0gdHJ1ZTtcbiAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHNjYW5Ub0VuZCA9PT0gdHJ1ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMubm9uZWdhdGUgIT09IHRydWUgJiYgY29kZSA9PT0gQ0hBUl9FWENMQU1BVElPTl9NQVJLICYmIGluZGV4ID09PSBzdGFydCkge1xuICAgICAgbmVnYXRlZCA9IHRva2VuLm5lZ2F0ZWQgPSB0cnVlO1xuICAgICAgc3RhcnQrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChvcHRzLm5vcGFyZW4gIT09IHRydWUgJiYgY29kZSA9PT0gQ0hBUl9MRUZUX1BBUkVOVEhFU0VTKSB7XG4gICAgICBpc0dsb2IgPSB0b2tlbi5pc0dsb2IgPSB0cnVlO1xuXG4gICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgIHdoaWxlIChlb3MoKSAhPT0gdHJ1ZSAmJiAoY29kZSA9IGFkdmFuY2UoKSkpIHtcbiAgICAgICAgICBpZiAoY29kZSA9PT0gQ0hBUl9MRUZUX1BBUkVOVEhFU0VTKSB7XG4gICAgICAgICAgICBiYWNrc2xhc2hlcyA9IHRva2VuLmJhY2tzbGFzaGVzID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvZGUgPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29kZSA9PT0gQ0hBUl9SSUdIVF9QQVJFTlRIRVNFUykge1xuICAgICAgICAgICAgZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGlzR2xvYiA9PT0gdHJ1ZSkge1xuICAgICAgZmluaXNoZWQgPSB0cnVlO1xuXG4gICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAob3B0cy5ub2V4dCA9PT0gdHJ1ZSkge1xuICAgIGlzRXh0Z2xvYiA9IGZhbHNlO1xuICAgIGlzR2xvYiA9IGZhbHNlO1xuICB9XG5cbiAgbGV0IGJhc2UgPSBzdHI7XG4gIGxldCBwcmVmaXggPSAnJztcbiAgbGV0IGdsb2IgPSAnJztcblxuICBpZiAoc3RhcnQgPiAwKSB7XG4gICAgcHJlZml4ID0gc3RyLnNsaWNlKDAsIHN0YXJ0KTtcbiAgICBzdHIgPSBzdHIuc2xpY2Uoc3RhcnQpO1xuICAgIGxhc3RJbmRleCAtPSBzdGFydDtcbiAgfVxuXG4gIGlmIChiYXNlICYmIGlzR2xvYiA9PT0gdHJ1ZSAmJiBsYXN0SW5kZXggPiAwKSB7XG4gICAgYmFzZSA9IHN0ci5zbGljZSgwLCBsYXN0SW5kZXgpO1xuICAgIGdsb2IgPSBzdHIuc2xpY2UobGFzdEluZGV4KTtcbiAgfSBlbHNlIGlmIChpc0dsb2IgPT09IHRydWUpIHtcbiAgICBiYXNlID0gJyc7XG4gICAgZ2xvYiA9IHN0cjtcbiAgfSBlbHNlIHtcbiAgICBiYXNlID0gc3RyO1xuICB9XG5cbiAgaWYgKGJhc2UgJiYgYmFzZSAhPT0gJycgJiYgYmFzZSAhPT0gJy8nICYmIGJhc2UgIT09IHN0cikge1xuICAgIGlmIChpc1BhdGhTZXBhcmF0b3IoYmFzZS5jaGFyQ29kZUF0KGJhc2UubGVuZ3RoIC0gMSkpKSB7XG4gICAgICBiYXNlID0gYmFzZS5zbGljZSgwLCAtMSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdHMudW5lc2NhcGUgPT09IHRydWUpIHtcbiAgICBpZiAoZ2xvYikgZ2xvYiA9IHV0aWxzLnJlbW92ZUJhY2tzbGFzaGVzKGdsb2IpO1xuXG4gICAgaWYgKGJhc2UgJiYgYmFja3NsYXNoZXMgPT09IHRydWUpIHtcbiAgICAgIGJhc2UgPSB1dGlscy5yZW1vdmVCYWNrc2xhc2hlcyhiYXNlKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdGF0ZSA9IHtcbiAgICBwcmVmaXgsXG4gICAgaW5wdXQsXG4gICAgc3RhcnQsXG4gICAgYmFzZSxcbiAgICBnbG9iLFxuICAgIGlzQnJhY2UsXG4gICAgaXNCcmFja2V0LFxuICAgIGlzR2xvYixcbiAgICBpc0V4dGdsb2IsXG4gICAgaXNHbG9ic3RhcixcbiAgICBuZWdhdGVkLFxuICAgIG5lZ2F0ZWRFeHRnbG9iXG4gIH07XG5cbiAgaWYgKG9wdHMudG9rZW5zID09PSB0cnVlKSB7XG4gICAgc3RhdGUubWF4RGVwdGggPSAwO1xuICAgIGlmICghaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgfVxuICAgIHN0YXRlLnRva2VucyA9IHRva2VucztcbiAgfVxuXG4gIGlmIChvcHRzLnBhcnRzID09PSB0cnVlIHx8IG9wdHMudG9rZW5zID09PSB0cnVlKSB7XG4gICAgbGV0IHByZXZJbmRleDtcblxuICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHNsYXNoZXMubGVuZ3RoOyBpZHgrKykge1xuICAgICAgY29uc3QgbiA9IHByZXZJbmRleCA/IHByZXZJbmRleCArIDEgOiBzdGFydDtcbiAgICAgIGNvbnN0IGkgPSBzbGFzaGVzW2lkeF07XG4gICAgICBjb25zdCB2YWx1ZSA9IGlucHV0LnNsaWNlKG4sIGkpO1xuICAgICAgaWYgKG9wdHMudG9rZW5zKSB7XG4gICAgICAgIGlmIChpZHggPT09IDAgJiYgc3RhcnQgIT09IDApIHtcbiAgICAgICAgICB0b2tlbnNbaWR4XS5pc1ByZWZpeCA9IHRydWU7XG4gICAgICAgICAgdG9rZW5zW2lkeF0udmFsdWUgPSBwcmVmaXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9rZW5zW2lkeF0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBkZXB0aCh0b2tlbnNbaWR4XSk7XG4gICAgICAgIHN0YXRlLm1heERlcHRoICs9IHRva2Vuc1tpZHhdLmRlcHRoO1xuICAgICAgfVxuICAgICAgaWYgKGlkeCAhPT0gMCB8fCB2YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgcGFydHMucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBwcmV2SW5kZXggPSBpO1xuICAgIH1cblxuICAgIGlmIChwcmV2SW5kZXggJiYgcHJldkluZGV4ICsgMSA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dC5zbGljZShwcmV2SW5kZXggKyAxKTtcbiAgICAgIHBhcnRzLnB1c2godmFsdWUpO1xuXG4gICAgICBpZiAob3B0cy50b2tlbnMpIHtcbiAgICAgICAgdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICBkZXB0aCh0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgc3RhdGUubWF4RGVwdGggKz0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS5kZXB0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0ZS5zbGFzaGVzID0gc2xhc2hlcztcbiAgICBzdGF0ZS5wYXJ0cyA9IHBhcnRzO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzY2FuO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IHtcbiAgTUFYX0xFTkdUSCxcbiAgUE9TSVhfUkVHRVhfU09VUkNFLFxuICBSRUdFWF9OT05fU1BFQ0lBTF9DSEFSUyxcbiAgUkVHRVhfU1BFQ0lBTF9DSEFSU19CQUNLUkVGLFxuICBSRVBMQUNFTUVOVFNcbn0gPSBjb25zdGFudHM7XG5cbi8qKlxuICogSGVscGVyc1xuICovXG5cbmNvbnN0IGV4cGFuZFJhbmdlID0gKGFyZ3MsIG9wdGlvbnMpID0+IHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zLmV4cGFuZFJhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuZXhwYW5kUmFuZ2UoLi4uYXJncywgb3B0aW9ucyk7XG4gIH1cblxuICBhcmdzLnNvcnQoKTtcbiAgY29uc3QgdmFsdWUgPSBgWyR7YXJncy5qb2luKCctJyl9XWA7XG5cbiAgdHJ5IHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3ICovXG4gICAgbmV3IFJlZ0V4cCh2YWx1ZSk7XG4gIH0gY2F0Y2ggKGV4KSB7XG4gICAgcmV0dXJuIGFyZ3MubWFwKHYgPT4gdXRpbHMuZXNjYXBlUmVnZXgodikpLmpvaW4oJy4uJyk7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgbWVzc2FnZSBmb3IgYSBzeW50YXggZXJyb3JcbiAqL1xuXG5jb25zdCBzeW50YXhFcnJvciA9ICh0eXBlLCBjaGFyKSA9PiB7XG4gIHJldHVybiBgTWlzc2luZyAke3R5cGV9OiBcIiR7Y2hhcn1cIiAtIHVzZSBcIlxcXFxcXFxcJHtjaGFyfVwiIHRvIG1hdGNoIGxpdGVyYWwgY2hhcmFjdGVyc2A7XG59O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBnaXZlbiBpbnB1dCBzdHJpbmcuXG4gKiBAcGFyYW0ge1N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cblxuY29uc3QgcGFyc2UgPSAoaW5wdXQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhIHN0cmluZycpO1xuICB9XG5cbiAgaW5wdXQgPSBSRVBMQUNFTUVOVFNbaW5wdXRdIHx8IGlucHV0O1xuXG4gIGNvbnN0IG9wdHMgPSB7IC4uLm9wdGlvbnMgfTtcbiAgY29uc3QgbWF4ID0gdHlwZW9mIG9wdHMubWF4TGVuZ3RoID09PSAnbnVtYmVyJyA/IE1hdGgubWluKE1BWF9MRU5HVEgsIG9wdHMubWF4TGVuZ3RoKSA6IE1BWF9MRU5HVEg7XG5cbiAgbGV0IGxlbiA9IGlucHV0Lmxlbmd0aDtcbiAgaWYgKGxlbiA+IG1heCkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgSW5wdXQgbGVuZ3RoOiAke2xlbn0sIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIGxlbmd0aDogJHttYXh9YCk7XG4gIH1cblxuICBjb25zdCBib3MgPSB7IHR5cGU6ICdib3MnLCB2YWx1ZTogJycsIG91dHB1dDogb3B0cy5wcmVwZW5kIHx8ICcnIH07XG4gIGNvbnN0IHRva2VucyA9IFtib3NdO1xuXG4gIGNvbnN0IGNhcHR1cmUgPSBvcHRzLmNhcHR1cmUgPyAnJyA6ICc/Oic7XG4gIGNvbnN0IHdpbjMyID0gdXRpbHMuaXNXaW5kb3dzKG9wdGlvbnMpO1xuXG4gIC8vIGNyZWF0ZSBjb25zdGFudHMgYmFzZWQgb24gcGxhdGZvcm0sIGZvciB3aW5kb3dzIG9yIHBvc2l4XG4gIGNvbnN0IFBMQVRGT1JNX0NIQVJTID0gY29uc3RhbnRzLmdsb2JDaGFycyh3aW4zMik7XG4gIGNvbnN0IEVYVEdMT0JfQ0hBUlMgPSBjb25zdGFudHMuZXh0Z2xvYkNoYXJzKFBMQVRGT1JNX0NIQVJTKTtcblxuICBjb25zdCB7XG4gICAgRE9UX0xJVEVSQUwsXG4gICAgUExVU19MSVRFUkFMLFxuICAgIFNMQVNIX0xJVEVSQUwsXG4gICAgT05FX0NIQVIsXG4gICAgRE9UU19TTEFTSCxcbiAgICBOT19ET1QsXG4gICAgTk9fRE9UX1NMQVNILFxuICAgIE5PX0RPVFNfU0xBU0gsXG4gICAgUU1BUkssXG4gICAgUU1BUktfTk9fRE9ULFxuICAgIFNUQVIsXG4gICAgU1RBUlRfQU5DSE9SXG4gIH0gPSBQTEFURk9STV9DSEFSUztcblxuICBjb25zdCBnbG9ic3RhciA9IG9wdHMgPT4ge1xuICAgIHJldHVybiBgKCR7Y2FwdHVyZX0oPzooPyEke1NUQVJUX0FOQ0hPUn0ke29wdHMuZG90ID8gRE9UU19TTEFTSCA6IERPVF9MSVRFUkFMfSkuKSo/KWA7XG4gIH07XG5cbiAgY29uc3Qgbm9kb3QgPSBvcHRzLmRvdCA/ICcnIDogTk9fRE9UO1xuICBjb25zdCBxbWFya05vRG90ID0gb3B0cy5kb3QgPyBRTUFSSyA6IFFNQVJLX05PX0RPVDtcbiAgbGV0IHN0YXIgPSBvcHRzLmJhc2ggPT09IHRydWUgPyBnbG9ic3RhcihvcHRzKSA6IFNUQVI7XG5cbiAgaWYgKG9wdHMuY2FwdHVyZSkge1xuICAgIHN0YXIgPSBgKCR7c3Rhcn0pYDtcbiAgfVxuXG4gIC8vIG1pbmltYXRjaCBvcHRpb25zIHN1cHBvcnRcbiAgaWYgKHR5cGVvZiBvcHRzLm5vZXh0ID09PSAnYm9vbGVhbicpIHtcbiAgICBvcHRzLm5vZXh0Z2xvYiA9IG9wdHMubm9leHQ7XG4gIH1cblxuICBjb25zdCBzdGF0ZSA9IHtcbiAgICBpbnB1dCxcbiAgICBpbmRleDogLTEsXG4gICAgc3RhcnQ6IDAsXG4gICAgZG90OiBvcHRzLmRvdCA9PT0gdHJ1ZSxcbiAgICBjb25zdW1lZDogJycsXG4gICAgb3V0cHV0OiAnJyxcbiAgICBwcmVmaXg6ICcnLFxuICAgIGJhY2t0cmFjazogZmFsc2UsXG4gICAgbmVnYXRlZDogZmFsc2UsXG4gICAgYnJhY2tldHM6IDAsXG4gICAgYnJhY2VzOiAwLFxuICAgIHBhcmVuczogMCxcbiAgICBxdW90ZXM6IDAsXG4gICAgZ2xvYnN0YXI6IGZhbHNlLFxuICAgIHRva2Vuc1xuICB9O1xuXG4gIGlucHV0ID0gdXRpbHMucmVtb3ZlUHJlZml4KGlucHV0LCBzdGF0ZSk7XG4gIGxlbiA9IGlucHV0Lmxlbmd0aDtcblxuICBjb25zdCBleHRnbG9icyA9IFtdO1xuICBjb25zdCBicmFjZXMgPSBbXTtcbiAgY29uc3Qgc3RhY2sgPSBbXTtcbiAgbGV0IHByZXYgPSBib3M7XG4gIGxldCB2YWx1ZTtcblxuICAvKipcbiAgICogVG9rZW5pemluZyBoZWxwZXJzXG4gICAqL1xuXG4gIGNvbnN0IGVvcyA9ICgpID0+IHN0YXRlLmluZGV4ID09PSBsZW4gLSAxO1xuICBjb25zdCBwZWVrID0gc3RhdGUucGVlayA9IChuID0gMSkgPT4gaW5wdXRbc3RhdGUuaW5kZXggKyBuXTtcbiAgY29uc3QgYWR2YW5jZSA9IHN0YXRlLmFkdmFuY2UgPSAoKSA9PiBpbnB1dFsrK3N0YXRlLmluZGV4XSB8fCAnJztcbiAgY29uc3QgcmVtYWluaW5nID0gKCkgPT4gaW5wdXQuc2xpY2Uoc3RhdGUuaW5kZXggKyAxKTtcbiAgY29uc3QgY29uc3VtZSA9ICh2YWx1ZSA9ICcnLCBudW0gPSAwKSA9PiB7XG4gICAgc3RhdGUuY29uc3VtZWQgKz0gdmFsdWU7XG4gICAgc3RhdGUuaW5kZXggKz0gbnVtO1xuICB9O1xuXG4gIGNvbnN0IGFwcGVuZCA9IHRva2VuID0+IHtcbiAgICBzdGF0ZS5vdXRwdXQgKz0gdG9rZW4ub3V0cHV0ICE9IG51bGwgPyB0b2tlbi5vdXRwdXQgOiB0b2tlbi52YWx1ZTtcbiAgICBjb25zdW1lKHRva2VuLnZhbHVlKTtcbiAgfTtcblxuICBjb25zdCBuZWdhdGUgPSAoKSA9PiB7XG4gICAgbGV0IGNvdW50ID0gMTtcblxuICAgIHdoaWxlIChwZWVrKCkgPT09ICchJyAmJiAocGVlaygyKSAhPT0gJygnIHx8IHBlZWsoMykgPT09ICc/JykpIHtcbiAgICAgIGFkdmFuY2UoKTtcbiAgICAgIHN0YXRlLnN0YXJ0Kys7XG4gICAgICBjb3VudCsrO1xuICAgIH1cblxuICAgIGlmIChjb3VudCAlIDIgPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzdGF0ZS5uZWdhdGVkID0gdHJ1ZTtcbiAgICBzdGF0ZS5zdGFydCsrO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIGNvbnN0IGluY3JlbWVudCA9IHR5cGUgPT4ge1xuICAgIHN0YXRlW3R5cGVdKys7XG4gICAgc3RhY2sucHVzaCh0eXBlKTtcbiAgfTtcblxuICBjb25zdCBkZWNyZW1lbnQgPSB0eXBlID0+IHtcbiAgICBzdGF0ZVt0eXBlXS0tO1xuICAgIHN0YWNrLnBvcCgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBQdXNoIHRva2VucyBvbnRvIHRoZSB0b2tlbnMgYXJyYXkuIFRoaXMgaGVscGVyIHNwZWVkcyB1cFxuICAgKiB0b2tlbml6aW5nIGJ5IDEpIGhlbHBpbmcgdXMgYXZvaWQgYmFja3RyYWNraW5nIGFzIG11Y2ggYXMgcG9zc2libGUsXG4gICAqIGFuZCAyKSBoZWxwaW5nIHVzIGF2b2lkIGNyZWF0aW5nIGV4dHJhIHRva2VucyB3aGVuIGNvbnNlY3V0aXZlXG4gICAqIGNoYXJhY3RlcnMgYXJlIHBsYWluIHRleHQuIFRoaXMgaW1wcm92ZXMgcGVyZm9ybWFuY2UgYW5kIHNpbXBsaWZpZXNcbiAgICogbG9va2JlaGluZHMuXG4gICAqL1xuXG4gIGNvbnN0IHB1c2ggPSB0b2sgPT4ge1xuICAgIGlmIChwcmV2LnR5cGUgPT09ICdnbG9ic3RhcicpIHtcbiAgICAgIGNvbnN0IGlzQnJhY2UgPSBzdGF0ZS5icmFjZXMgPiAwICYmICh0b2sudHlwZSA9PT0gJ2NvbW1hJyB8fCB0b2sudHlwZSA9PT0gJ2JyYWNlJyk7XG4gICAgICBjb25zdCBpc0V4dGdsb2IgPSB0b2suZXh0Z2xvYiA9PT0gdHJ1ZSB8fCAoZXh0Z2xvYnMubGVuZ3RoICYmICh0b2sudHlwZSA9PT0gJ3BpcGUnIHx8IHRvay50eXBlID09PSAncGFyZW4nKSk7XG5cbiAgICAgIGlmICh0b2sudHlwZSAhPT0gJ3NsYXNoJyAmJiB0b2sudHlwZSAhPT0gJ3BhcmVuJyAmJiAhaXNCcmFjZSAmJiAhaXNFeHRnbG9iKSB7XG4gICAgICAgIHN0YXRlLm91dHB1dCA9IHN0YXRlLm91dHB1dC5zbGljZSgwLCAtcHJldi5vdXRwdXQubGVuZ3RoKTtcbiAgICAgICAgcHJldi50eXBlID0gJ3N0YXInO1xuICAgICAgICBwcmV2LnZhbHVlID0gJyonO1xuICAgICAgICBwcmV2Lm91dHB1dCA9IHN0YXI7XG4gICAgICAgIHN0YXRlLm91dHB1dCArPSBwcmV2Lm91dHB1dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXh0Z2xvYnMubGVuZ3RoICYmIHRvay50eXBlICE9PSAncGFyZW4nKSB7XG4gICAgICBleHRnbG9ic1tleHRnbG9icy5sZW5ndGggLSAxXS5pbm5lciArPSB0b2sudmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRvay52YWx1ZSB8fCB0b2sub3V0cHV0KSBhcHBlbmQodG9rKTtcbiAgICBpZiAocHJldiAmJiBwcmV2LnR5cGUgPT09ICd0ZXh0JyAmJiB0b2sudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICBwcmV2LnZhbHVlICs9IHRvay52YWx1ZTtcbiAgICAgIHByZXYub3V0cHV0ID0gKHByZXYub3V0cHV0IHx8ICcnKSArIHRvay52YWx1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0b2sucHJldiA9IHByZXY7XG4gICAgdG9rZW5zLnB1c2godG9rKTtcbiAgICBwcmV2ID0gdG9rO1xuICB9O1xuXG4gIGNvbnN0IGV4dGdsb2JPcGVuID0gKHR5cGUsIHZhbHVlKSA9PiB7XG4gICAgY29uc3QgdG9rZW4gPSB7IC4uLkVYVEdMT0JfQ0hBUlNbdmFsdWVdLCBjb25kaXRpb25zOiAxLCBpbm5lcjogJycgfTtcblxuICAgIHRva2VuLnByZXYgPSBwcmV2O1xuICAgIHRva2VuLnBhcmVucyA9IHN0YXRlLnBhcmVucztcbiAgICB0b2tlbi5vdXRwdXQgPSBzdGF0ZS5vdXRwdXQ7XG4gICAgY29uc3Qgb3V0cHV0ID0gKG9wdHMuY2FwdHVyZSA/ICcoJyA6ICcnKSArIHRva2VuLm9wZW47XG5cbiAgICBpbmNyZW1lbnQoJ3BhcmVucycpO1xuICAgIHB1c2goeyB0eXBlLCB2YWx1ZSwgb3V0cHV0OiBzdGF0ZS5vdXRwdXQgPyAnJyA6IE9ORV9DSEFSIH0pO1xuICAgIHB1c2goeyB0eXBlOiAncGFyZW4nLCBleHRnbG9iOiB0cnVlLCB2YWx1ZTogYWR2YW5jZSgpLCBvdXRwdXQgfSk7XG4gICAgZXh0Z2xvYnMucHVzaCh0b2tlbik7XG4gIH07XG5cbiAgY29uc3QgZXh0Z2xvYkNsb3NlID0gdG9rZW4gPT4ge1xuICAgIGxldCBvdXRwdXQgPSB0b2tlbi5jbG9zZSArIChvcHRzLmNhcHR1cmUgPyAnKScgOiAnJyk7XG4gICAgbGV0IHJlc3Q7XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gJ25lZ2F0ZScpIHtcbiAgICAgIGxldCBleHRnbG9iU3RhciA9IHN0YXI7XG5cbiAgICAgIGlmICh0b2tlbi5pbm5lciAmJiB0b2tlbi5pbm5lci5sZW5ndGggPiAxICYmIHRva2VuLmlubmVyLmluY2x1ZGVzKCcvJykpIHtcbiAgICAgICAgZXh0Z2xvYlN0YXIgPSBnbG9ic3RhcihvcHRzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV4dGdsb2JTdGFyICE9PSBzdGFyIHx8IGVvcygpIHx8IC9eXFwpKyQvLnRlc3QocmVtYWluaW5nKCkpKSB7XG4gICAgICAgIG91dHB1dCA9IHRva2VuLmNsb3NlID0gYCkkKSkke2V4dGdsb2JTdGFyfWA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0b2tlbi5pbm5lci5pbmNsdWRlcygnKicpICYmIChyZXN0ID0gcmVtYWluaW5nKCkpICYmIC9eXFwuW15cXFxcLy5dKyQvLnRlc3QocmVzdCkpIHtcbiAgICAgICAgLy8gQW55IG5vbi1tYWdpY2FsIHN0cmluZyAoYC50c2ApIG9yIGV2ZW4gbmVzdGVkIGV4cHJlc3Npb24gKGAue3RzLHRzeH1gKSBjYW4gZm9sbG93IGFmdGVyIHRoZSBjbG9zaW5nIHBhcmVudGhlc2lzLlxuICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIG5lZWQgdG8gcGFyc2UgdGhlIHN0cmluZyBhbmQgdXNlIGl0IGluIHRoZSBvdXRwdXQgb2YgdGhlIG9yaWdpbmFsIHBhdHRlcm4uXG4gICAgICAgIC8vIFN1aXRhYmxlIHBhdHRlcm5zOiBgLyEoKi5kKS50c2AsIGAvISgqLmQpLnt0cyx0c3h9YCwgYCoqLyEoKi1kYmcpLkAoanMpYC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gRGlzYWJsaW5nIHRoZSBgZmFzdHBhdGhzYCBvcHRpb24gZHVlIHRvIGEgcHJvYmxlbSB3aXRoIHBhcnNpbmcgc3RyaW5ncyBhcyBgLnRzYCBpbiB0aGUgcGF0dGVybiBsaWtlIGAqKi8hKCouZCkudHNgLlxuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gcGFyc2UocmVzdCwgeyAuLi5vcHRpb25zLCBmYXN0cGF0aHM6IGZhbHNlIH0pLm91dHB1dDtcblxuICAgICAgICBvdXRwdXQgPSB0b2tlbi5jbG9zZSA9IGApJHtleHByZXNzaW9ufSkke2V4dGdsb2JTdGFyfSlgO1xuICAgICAgfVxuXG4gICAgICBpZiAodG9rZW4ucHJldi50eXBlID09PSAnYm9zJykge1xuICAgICAgICBzdGF0ZS5uZWdhdGVkRXh0Z2xvYiA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHVzaCh7IHR5cGU6ICdwYXJlbicsIGV4dGdsb2I6IHRydWUsIHZhbHVlLCBvdXRwdXQgfSk7XG4gICAgZGVjcmVtZW50KCdwYXJlbnMnKTtcbiAgfTtcblxuICAvKipcbiAgICogRmFzdCBwYXRoc1xuICAgKi9cblxuICBpZiAob3B0cy5mYXN0cGF0aHMgIT09IGZhbHNlICYmICEvKF5bKiFdfFsvKClbXFxde31cIl0pLy50ZXN0KGlucHV0KSkge1xuICAgIGxldCBiYWNrc2xhc2hlcyA9IGZhbHNlO1xuXG4gICAgbGV0IG91dHB1dCA9IGlucHV0LnJlcGxhY2UoUkVHRVhfU1BFQ0lBTF9DSEFSU19CQUNLUkVGLCAobSwgZXNjLCBjaGFycywgZmlyc3QsIHJlc3QsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoZmlyc3QgPT09ICdcXFxcJykge1xuICAgICAgICBiYWNrc2xhc2hlcyA9IHRydWU7XG4gICAgICAgIHJldHVybiBtO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlyc3QgPT09ICc/Jykge1xuICAgICAgICBpZiAoZXNjKSB7XG4gICAgICAgICAgcmV0dXJuIGVzYyArIGZpcnN0ICsgKHJlc3QgPyBRTUFSSy5yZXBlYXQocmVzdC5sZW5ndGgpIDogJycpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBxbWFya05vRG90ICsgKHJlc3QgPyBRTUFSSy5yZXBlYXQocmVzdC5sZW5ndGgpIDogJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBRTUFSSy5yZXBlYXQoY2hhcnMubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpcnN0ID09PSAnLicpIHtcbiAgICAgICAgcmV0dXJuIERPVF9MSVRFUkFMLnJlcGVhdChjaGFycy5sZW5ndGgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlyc3QgPT09ICcqJykge1xuICAgICAgICBpZiAoZXNjKSB7XG4gICAgICAgICAgcmV0dXJuIGVzYyArIGZpcnN0ICsgKHJlc3QgPyBzdGFyIDogJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGFyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVzYyA/IG0gOiBgXFxcXCR7bX1gO1xuICAgIH0pO1xuXG4gICAgaWYgKGJhY2tzbGFzaGVzID09PSB0cnVlKSB7XG4gICAgICBpZiAob3B0cy51bmVzY2FwZSA9PT0gdHJ1ZSkge1xuICAgICAgICBvdXRwdXQgPSBvdXRwdXQucmVwbGFjZSgvXFxcXC9nLCAnJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXQgPSBvdXRwdXQucmVwbGFjZSgvXFxcXCsvZywgbSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG0ubGVuZ3RoICUgMiA9PT0gMCA/ICdcXFxcXFxcXCcgOiAobSA/ICdcXFxcJyA6ICcnKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG91dHB1dCA9PT0gaW5wdXQgJiYgb3B0cy5jb250YWlucyA9PT0gdHJ1ZSkge1xuICAgICAgc3RhdGUub3V0cHV0ID0gaW5wdXQ7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgc3RhdGUub3V0cHV0ID0gdXRpbHMud3JhcE91dHB1dChvdXRwdXQsIHN0YXRlLCBvcHRpb25zKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogVG9rZW5pemUgaW5wdXQgdW50aWwgd2UgcmVhY2ggZW5kLW9mLXN0cmluZ1xuICAgKi9cblxuICB3aGlsZSAoIWVvcygpKSB7XG4gICAgdmFsdWUgPSBhZHZhbmNlKCk7XG5cbiAgICBpZiAodmFsdWUgPT09ICdcXHUwMDAwJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXNjYXBlZCBjaGFyYWN0ZXJzXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICdcXFxcJykge1xuICAgICAgY29uc3QgbmV4dCA9IHBlZWsoKTtcblxuICAgICAgaWYgKG5leHQgPT09ICcvJyAmJiBvcHRzLmJhc2ggIT09IHRydWUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXh0ID09PSAnLicgfHwgbmV4dCA9PT0gJzsnKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW5leHQpIHtcbiAgICAgICAgdmFsdWUgKz0gJ1xcXFwnO1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZSB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbGxhcHNlIHNsYXNoZXMgdG8gcmVkdWNlIHBvdGVudGlhbCBmb3IgZXhwbG9pdHNcbiAgICAgIGNvbnN0IG1hdGNoID0gL15cXFxcKy8uZXhlYyhyZW1haW5pbmcoKSk7XG4gICAgICBsZXQgc2xhc2hlcyA9IDA7XG5cbiAgICAgIGlmIChtYXRjaCAmJiBtYXRjaFswXS5sZW5ndGggPiAyKSB7XG4gICAgICAgIHNsYXNoZXMgPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgIHN0YXRlLmluZGV4ICs9IHNsYXNoZXM7XG4gICAgICAgIGlmIChzbGFzaGVzICUgMiAhPT0gMCkge1xuICAgICAgICAgIHZhbHVlICs9ICdcXFxcJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAob3B0cy51bmVzY2FwZSA9PT0gdHJ1ZSkge1xuICAgICAgICB2YWx1ZSA9IGFkdmFuY2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlICs9IGFkdmFuY2UoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlLmJyYWNrZXRzID09PSAwKSB7XG4gICAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJZiB3ZSdyZSBpbnNpZGUgYSByZWdleCBjaGFyYWN0ZXIgY2xhc3MsIGNvbnRpbnVlXG4gICAgICogdW50aWwgd2UgcmVhY2ggdGhlIGNsb3NpbmcgYnJhY2tldC5cbiAgICAgKi9cblxuICAgIGlmIChzdGF0ZS5icmFja2V0cyA+IDAgJiYgKHZhbHVlICE9PSAnXScgfHwgcHJldi52YWx1ZSA9PT0gJ1snIHx8IHByZXYudmFsdWUgPT09ICdbXicpKSB7XG4gICAgICBpZiAob3B0cy5wb3NpeCAhPT0gZmFsc2UgJiYgdmFsdWUgPT09ICc6Jykge1xuICAgICAgICBjb25zdCBpbm5lciA9IHByZXYudmFsdWUuc2xpY2UoMSk7XG4gICAgICAgIGlmIChpbm5lci5pbmNsdWRlcygnWycpKSB7XG4gICAgICAgICAgcHJldi5wb3NpeCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAoaW5uZXIuaW5jbHVkZXMoJzonKSkge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gcHJldi52YWx1ZS5sYXN0SW5kZXhPZignWycpO1xuICAgICAgICAgICAgY29uc3QgcHJlID0gcHJldi52YWx1ZS5zbGljZSgwLCBpZHgpO1xuICAgICAgICAgICAgY29uc3QgcmVzdCA9IHByZXYudmFsdWUuc2xpY2UoaWR4ICsgMik7XG4gICAgICAgICAgICBjb25zdCBwb3NpeCA9IFBPU0lYX1JFR0VYX1NPVVJDRVtyZXN0XTtcbiAgICAgICAgICAgIGlmIChwb3NpeCkge1xuICAgICAgICAgICAgICBwcmV2LnZhbHVlID0gcHJlICsgcG9zaXg7XG4gICAgICAgICAgICAgIHN0YXRlLmJhY2t0cmFjayA9IHRydWU7XG4gICAgICAgICAgICAgIGFkdmFuY2UoKTtcblxuICAgICAgICAgICAgICBpZiAoIWJvcy5vdXRwdXQgJiYgdG9rZW5zLmluZGV4T2YocHJldikgPT09IDEpIHtcbiAgICAgICAgICAgICAgICBib3Mub3V0cHV0ID0gT05FX0NIQVI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICgodmFsdWUgPT09ICdbJyAmJiBwZWVrKCkgIT09ICc6JykgfHwgKHZhbHVlID09PSAnLScgJiYgcGVlaygpID09PSAnXScpKSB7XG4gICAgICAgIHZhbHVlID0gYFxcXFwke3ZhbHVlfWA7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gJ10nICYmIChwcmV2LnZhbHVlID09PSAnWycgfHwgcHJldi52YWx1ZSA9PT0gJ1teJykpIHtcbiAgICAgICAgdmFsdWUgPSBgXFxcXCR7dmFsdWV9YDtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdHMucG9zaXggPT09IHRydWUgJiYgdmFsdWUgPT09ICchJyAmJiBwcmV2LnZhbHVlID09PSAnWycpIHtcbiAgICAgICAgdmFsdWUgPSAnXic7XG4gICAgICB9XG5cbiAgICAgIHByZXYudmFsdWUgKz0gdmFsdWU7XG4gICAgICBhcHBlbmQoeyB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElmIHdlJ3JlIGluc2lkZSBhIHF1b3RlZCBzdHJpbmcsIGNvbnRpbnVlXG4gICAgICogdW50aWwgd2UgcmVhY2ggdGhlIGNsb3NpbmcgZG91YmxlIHF1b3RlLlxuICAgICAqL1xuXG4gICAgaWYgKHN0YXRlLnF1b3RlcyA9PT0gMSAmJiB2YWx1ZSAhPT0gJ1wiJykge1xuICAgICAgdmFsdWUgPSB1dGlscy5lc2NhcGVSZWdleCh2YWx1ZSk7XG4gICAgICBwcmV2LnZhbHVlICs9IHZhbHVlO1xuICAgICAgYXBwZW5kKHsgdmFsdWUgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEb3VibGUgcXVvdGVzXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICdcIicpIHtcbiAgICAgIHN0YXRlLnF1b3RlcyA9IHN0YXRlLnF1b3RlcyA9PT0gMSA/IDAgOiAxO1xuICAgICAgaWYgKG9wdHMua2VlcFF1b3RlcyA9PT0gdHJ1ZSkge1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZSB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhcmVudGhlc2VzXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICcoJykge1xuICAgICAgaW5jcmVtZW50KCdwYXJlbnMnKTtcbiAgICAgIHB1c2goeyB0eXBlOiAncGFyZW4nLCB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSA9PT0gJyknKSB7XG4gICAgICBpZiAoc3RhdGUucGFyZW5zID09PSAwICYmIG9wdHMuc3RyaWN0QnJhY2tldHMgPT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKHN5bnRheEVycm9yKCdvcGVuaW5nJywgJygnKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV4dGdsb2IgPSBleHRnbG9ic1tleHRnbG9icy5sZW5ndGggLSAxXTtcbiAgICAgIGlmIChleHRnbG9iICYmIHN0YXRlLnBhcmVucyA9PT0gZXh0Z2xvYi5wYXJlbnMgKyAxKSB7XG4gICAgICAgIGV4dGdsb2JDbG9zZShleHRnbG9icy5wb3AoKSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBwdXNoKHsgdHlwZTogJ3BhcmVuJywgdmFsdWUsIG91dHB1dDogc3RhdGUucGFyZW5zID8gJyknIDogJ1xcXFwpJyB9KTtcbiAgICAgIGRlY3JlbWVudCgncGFyZW5zJyk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTcXVhcmUgYnJhY2tldHNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJ1snKSB7XG4gICAgICBpZiAob3B0cy5ub2JyYWNrZXQgPT09IHRydWUgfHwgIXJlbWFpbmluZygpLmluY2x1ZGVzKCddJykpIHtcbiAgICAgICAgaWYgKG9wdHMubm9icmFja2V0ICE9PSB0cnVlICYmIG9wdHMuc3RyaWN0QnJhY2tldHMgPT09IHRydWUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ludGF4RXJyb3IoJ2Nsb3NpbmcnLCAnXScpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbHVlID0gYFxcXFwke3ZhbHVlfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmNyZW1lbnQoJ2JyYWNrZXRzJyk7XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAnYnJhY2tldCcsIHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSAnXScpIHtcbiAgICAgIGlmIChvcHRzLm5vYnJhY2tldCA9PT0gdHJ1ZSB8fCAocHJldiAmJiBwcmV2LnR5cGUgPT09ICdicmFja2V0JyAmJiBwcmV2LnZhbHVlLmxlbmd0aCA9PT0gMSkpIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUsIG91dHB1dDogYFxcXFwke3ZhbHVlfWAgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUuYnJhY2tldHMgPT09IDApIHtcbiAgICAgICAgaWYgKG9wdHMuc3RyaWN0QnJhY2tldHMgPT09IHRydWUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ludGF4RXJyb3IoJ29wZW5pbmcnLCAnWycpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlLCBvdXRwdXQ6IGBcXFxcJHt2YWx1ZX1gIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZGVjcmVtZW50KCdicmFja2V0cycpO1xuXG4gICAgICBjb25zdCBwcmV2VmFsdWUgPSBwcmV2LnZhbHVlLnNsaWNlKDEpO1xuICAgICAgaWYgKHByZXYucG9zaXggIT09IHRydWUgJiYgcHJldlZhbHVlWzBdID09PSAnXicgJiYgIXByZXZWYWx1ZS5pbmNsdWRlcygnLycpKSB7XG4gICAgICAgIHZhbHVlID0gYC8ke3ZhbHVlfWA7XG4gICAgICB9XG5cbiAgICAgIHByZXYudmFsdWUgKz0gdmFsdWU7XG4gICAgICBhcHBlbmQoeyB2YWx1ZSB9KTtcblxuICAgICAgLy8gd2hlbiBsaXRlcmFsIGJyYWNrZXRzIGFyZSBleHBsaWNpdGx5IGRpc2FibGVkXG4gICAgICAvLyBhc3N1bWUgd2Ugc2hvdWxkIG1hdGNoIHdpdGggYSByZWdleCBjaGFyYWN0ZXIgY2xhc3NcbiAgICAgIGlmIChvcHRzLmxpdGVyYWxCcmFja2V0cyA9PT0gZmFsc2UgfHwgdXRpbHMuaGFzUmVnZXhDaGFycyhwcmV2VmFsdWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlc2NhcGVkID0gdXRpbHMuZXNjYXBlUmVnZXgocHJldi52YWx1ZSk7XG4gICAgICBzdGF0ZS5vdXRwdXQgPSBzdGF0ZS5vdXRwdXQuc2xpY2UoMCwgLXByZXYudmFsdWUubGVuZ3RoKTtcblxuICAgICAgLy8gd2hlbiBsaXRlcmFsIGJyYWNrZXRzIGFyZSBleHBsaWNpdGx5IGVuYWJsZWRcbiAgICAgIC8vIGFzc3VtZSB3ZSBzaG91bGQgZXNjYXBlIHRoZSBicmFja2V0cyB0byBtYXRjaCBsaXRlcmFsIGNoYXJhY3RlcnNcbiAgICAgIGlmIChvcHRzLmxpdGVyYWxCcmFja2V0cyA9PT0gdHJ1ZSkge1xuICAgICAgICBzdGF0ZS5vdXRwdXQgKz0gZXNjYXBlZDtcbiAgICAgICAgcHJldi52YWx1ZSA9IGVzY2FwZWQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyB3aGVuIHRoZSB1c2VyIHNwZWNpZmllcyBub3RoaW5nLCB0cnkgdG8gbWF0Y2ggYm90aFxuICAgICAgcHJldi52YWx1ZSA9IGAoJHtjYXB0dXJlfSR7ZXNjYXBlZH18JHtwcmV2LnZhbHVlfSlgO1xuICAgICAgc3RhdGUub3V0cHV0ICs9IHByZXYudmFsdWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCcmFjZXNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJ3snICYmIG9wdHMubm9icmFjZSAhPT0gdHJ1ZSkge1xuICAgICAgaW5jcmVtZW50KCdicmFjZXMnKTtcblxuICAgICAgY29uc3Qgb3BlbiA9IHtcbiAgICAgICAgdHlwZTogJ2JyYWNlJyxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIG91dHB1dDogJygnLFxuICAgICAgICBvdXRwdXRJbmRleDogc3RhdGUub3V0cHV0Lmxlbmd0aCxcbiAgICAgICAgdG9rZW5zSW5kZXg6IHN0YXRlLnRva2Vucy5sZW5ndGhcbiAgICAgIH07XG5cbiAgICAgIGJyYWNlcy5wdXNoKG9wZW4pO1xuICAgICAgcHVzaChvcGVuKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSA9PT0gJ30nKSB7XG4gICAgICBjb25zdCBicmFjZSA9IGJyYWNlc1ticmFjZXMubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmIChvcHRzLm5vYnJhY2UgPT09IHRydWUgfHwgIWJyYWNlKSB7XG4gICAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlLCBvdXRwdXQ6IHZhbHVlIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IG91dHB1dCA9ICcpJztcblxuICAgICAgaWYgKGJyYWNlLmRvdHMgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgYXJyID0gdG9rZW5zLnNsaWNlKCk7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IGFyci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIHRva2Vucy5wb3AoKTtcbiAgICAgICAgICBpZiAoYXJyW2ldLnR5cGUgPT09ICdicmFjZScpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYXJyW2ldLnR5cGUgIT09ICdkb3RzJykge1xuICAgICAgICAgICAgcmFuZ2UudW5zaGlmdChhcnJbaV0udmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG91dHB1dCA9IGV4cGFuZFJhbmdlKHJhbmdlLCBvcHRzKTtcbiAgICAgICAgc3RhdGUuYmFja3RyYWNrID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGJyYWNlLmNvbW1hICE9PSB0cnVlICYmIGJyYWNlLmRvdHMgIT09IHRydWUpIHtcbiAgICAgICAgY29uc3Qgb3V0ID0gc3RhdGUub3V0cHV0LnNsaWNlKDAsIGJyYWNlLm91dHB1dEluZGV4KTtcbiAgICAgICAgY29uc3QgdG9rcyA9IHN0YXRlLnRva2Vucy5zbGljZShicmFjZS50b2tlbnNJbmRleCk7XG4gICAgICAgIGJyYWNlLnZhbHVlID0gYnJhY2Uub3V0cHV0ID0gJ1xcXFx7JztcbiAgICAgICAgdmFsdWUgPSBvdXRwdXQgPSAnXFxcXH0nO1xuICAgICAgICBzdGF0ZS5vdXRwdXQgPSBvdXQ7XG4gICAgICAgIGZvciAoY29uc3QgdCBvZiB0b2tzKSB7XG4gICAgICAgICAgc3RhdGUub3V0cHV0ICs9ICh0Lm91dHB1dCB8fCB0LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwdXNoKHsgdHlwZTogJ2JyYWNlJywgdmFsdWUsIG91dHB1dCB9KTtcbiAgICAgIGRlY3JlbWVudCgnYnJhY2VzJyk7XG4gICAgICBicmFjZXMucG9wKCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQaXBlc1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSAnfCcpIHtcbiAgICAgIGlmIChleHRnbG9icy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGV4dGdsb2JzW2V4dGdsb2JzLmxlbmd0aCAtIDFdLmNvbmRpdGlvbnMrKztcbiAgICAgIH1cbiAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tbWFzXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICcsJykge1xuICAgICAgbGV0IG91dHB1dCA9IHZhbHVlO1xuXG4gICAgICBjb25zdCBicmFjZSA9IGJyYWNlc1ticmFjZXMubGVuZ3RoIC0gMV07XG4gICAgICBpZiAoYnJhY2UgJiYgc3RhY2tbc3RhY2subGVuZ3RoIC0gMV0gPT09ICdicmFjZXMnKSB7XG4gICAgICAgIGJyYWNlLmNvbW1hID0gdHJ1ZTtcbiAgICAgICAgb3V0cHV0ID0gJ3wnO1xuICAgICAgfVxuXG4gICAgICBwdXNoKHsgdHlwZTogJ2NvbW1hJywgdmFsdWUsIG91dHB1dCB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNsYXNoZXNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJy8nKSB7XG4gICAgICAvLyBpZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBnbG9iIGlzIFwiLi9cIiwgYWR2YW5jZSB0aGUgc3RhcnRcbiAgICAgIC8vIHRvIHRoZSBjdXJyZW50IGluZGV4LCBhbmQgZG9uJ3QgYWRkIHRoZSBcIi4vXCIgY2hhcmFjdGVyc1xuICAgICAgLy8gdG8gdGhlIHN0YXRlLiBUaGlzIGdyZWF0bHkgc2ltcGxpZmllcyBsb29rYmVoaW5kcyB3aGVuXG4gICAgICAvLyBjaGVja2luZyBmb3IgQk9TIGNoYXJhY3RlcnMgbGlrZSBcIiFcIiBhbmQgXCIuXCIgKG5vdCBcIi4vXCIpXG4gICAgICBpZiAocHJldi50eXBlID09PSAnZG90JyAmJiBzdGF0ZS5pbmRleCA9PT0gc3RhdGUuc3RhcnQgKyAxKSB7XG4gICAgICAgIHN0YXRlLnN0YXJ0ID0gc3RhdGUuaW5kZXggKyAxO1xuICAgICAgICBzdGF0ZS5jb25zdW1lZCA9ICcnO1xuICAgICAgICBzdGF0ZS5vdXRwdXQgPSAnJztcbiAgICAgICAgdG9rZW5zLnBvcCgpO1xuICAgICAgICBwcmV2ID0gYm9zOyAvLyByZXNldCBcInByZXZcIiB0byB0aGUgZmlyc3QgdG9rZW5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAnc2xhc2gnLCB2YWx1ZSwgb3V0cHV0OiBTTEFTSF9MSVRFUkFMIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRG90c1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSAnLicpIHtcbiAgICAgIGlmIChzdGF0ZS5icmFjZXMgPiAwICYmIHByZXYudHlwZSA9PT0gJ2RvdCcpIHtcbiAgICAgICAgaWYgKHByZXYudmFsdWUgPT09ICcuJykgcHJldi5vdXRwdXQgPSBET1RfTElURVJBTDtcbiAgICAgICAgY29uc3QgYnJhY2UgPSBicmFjZXNbYnJhY2VzLmxlbmd0aCAtIDFdO1xuICAgICAgICBwcmV2LnR5cGUgPSAnZG90cyc7XG4gICAgICAgIHByZXYub3V0cHV0ICs9IHZhbHVlO1xuICAgICAgICBwcmV2LnZhbHVlICs9IHZhbHVlO1xuICAgICAgICBicmFjZS5kb3RzID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICgoc3RhdGUuYnJhY2VzICsgc3RhdGUucGFyZW5zKSA9PT0gMCAmJiBwcmV2LnR5cGUgIT09ICdib3MnICYmIHByZXYudHlwZSAhPT0gJ3NsYXNoJykge1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZSwgb3V0cHV0OiBET1RfTElURVJBTCB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAnZG90JywgdmFsdWUsIG91dHB1dDogRE9UX0xJVEVSQUwgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBRdWVzdGlvbiBtYXJrc1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSAnPycpIHtcbiAgICAgIGNvbnN0IGlzR3JvdXAgPSBwcmV2ICYmIHByZXYudmFsdWUgPT09ICcoJztcbiAgICAgIGlmICghaXNHcm91cCAmJiBvcHRzLm5vZXh0Z2xvYiAhPT0gdHJ1ZSAmJiBwZWVrKCkgPT09ICcoJyAmJiBwZWVrKDIpICE9PSAnPycpIHtcbiAgICAgICAgZXh0Z2xvYk9wZW4oJ3FtYXJrJywgdmFsdWUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByZXYgJiYgcHJldi50eXBlID09PSAncGFyZW4nKSB7XG4gICAgICAgIGNvbnN0IG5leHQgPSBwZWVrKCk7XG4gICAgICAgIGxldCBvdXRwdXQgPSB2YWx1ZTtcblxuICAgICAgICBpZiAobmV4dCA9PT0gJzwnICYmICF1dGlscy5zdXBwb3J0c0xvb2tiZWhpbmRzKCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vZGUuanMgdjEwIG9yIGhpZ2hlciBpcyByZXF1aXJlZCBmb3IgcmVnZXggbG9va2JlaGluZHMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgocHJldi52YWx1ZSA9PT0gJygnICYmICEvWyE9PDpdLy50ZXN0KG5leHQpKSB8fCAobmV4dCA9PT0gJzwnICYmICEvPChbIT1dfFxcdys+KS8udGVzdChyZW1haW5pbmcoKSkpKSB7XG4gICAgICAgICAgb3V0cHV0ID0gYFxcXFwke3ZhbHVlfWA7XG4gICAgICAgIH1cblxuICAgICAgICBwdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZSwgb3V0cHV0IH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdHMuZG90ICE9PSB0cnVlICYmIChwcmV2LnR5cGUgPT09ICdzbGFzaCcgfHwgcHJldi50eXBlID09PSAnYm9zJykpIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICdxbWFyaycsIHZhbHVlLCBvdXRwdXQ6IFFNQVJLX05PX0RPVCB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAncW1hcmsnLCB2YWx1ZSwgb3V0cHV0OiBRTUFSSyB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4Y2xhbWF0aW9uXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICchJykge1xuICAgICAgaWYgKG9wdHMubm9leHRnbG9iICE9PSB0cnVlICYmIHBlZWsoKSA9PT0gJygnKSB7XG4gICAgICAgIGlmIChwZWVrKDIpICE9PSAnPycgfHwgIS9bIT08Ol0vLnRlc3QocGVlaygzKSkpIHtcbiAgICAgICAgICBleHRnbG9iT3BlbignbmVnYXRlJywgdmFsdWUpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRzLm5vbmVnYXRlICE9PSB0cnVlICYmIHN0YXRlLmluZGV4ID09PSAwKSB7XG4gICAgICAgIG5lZ2F0ZSgpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQbHVzXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICcrJykge1xuICAgICAgaWYgKG9wdHMubm9leHRnbG9iICE9PSB0cnVlICYmIHBlZWsoKSA9PT0gJygnICYmIHBlZWsoMikgIT09ICc/Jykge1xuICAgICAgICBleHRnbG9iT3BlbigncGx1cycsIHZhbHVlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICgocHJldiAmJiBwcmV2LnZhbHVlID09PSAnKCcpIHx8IG9wdHMucmVnZXggPT09IGZhbHNlKSB7XG4gICAgICAgIHB1c2goeyB0eXBlOiAncGx1cycsIHZhbHVlLCBvdXRwdXQ6IFBMVVNfTElURVJBTCB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICgocHJldiAmJiAocHJldi50eXBlID09PSAnYnJhY2tldCcgfHwgcHJldi50eXBlID09PSAncGFyZW4nIHx8IHByZXYudHlwZSA9PT0gJ2JyYWNlJykpIHx8IHN0YXRlLnBhcmVucyA+IDApIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICdwbHVzJywgdmFsdWUgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBwdXNoKHsgdHlwZTogJ3BsdXMnLCB2YWx1ZTogUExVU19MSVRFUkFMIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGxhaW4gdGV4dFxuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSAnQCcpIHtcbiAgICAgIGlmIChvcHRzLm5vZXh0Z2xvYiAhPT0gdHJ1ZSAmJiBwZWVrKCkgPT09ICcoJyAmJiBwZWVrKDIpICE9PSAnPycpIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICdhdCcsIGV4dGdsb2I6IHRydWUsIHZhbHVlLCBvdXRwdXQ6ICcnIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQbGFpbiB0ZXh0XG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgIT09ICcqJykge1xuICAgICAgaWYgKHZhbHVlID09PSAnJCcgfHwgdmFsdWUgPT09ICdeJykge1xuICAgICAgICB2YWx1ZSA9IGBcXFxcJHt2YWx1ZX1gO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXRjaCA9IFJFR0VYX05PTl9TUEVDSUFMX0NIQVJTLmV4ZWMocmVtYWluaW5nKCkpO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIHZhbHVlICs9IG1hdGNoWzBdO1xuICAgICAgICBzdGF0ZS5pbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RhcnNcbiAgICAgKi9cblxuICAgIGlmIChwcmV2ICYmIChwcmV2LnR5cGUgPT09ICdnbG9ic3RhcicgfHwgcHJldi5zdGFyID09PSB0cnVlKSkge1xuICAgICAgcHJldi50eXBlID0gJ3N0YXInO1xuICAgICAgcHJldi5zdGFyID0gdHJ1ZTtcbiAgICAgIHByZXYudmFsdWUgKz0gdmFsdWU7XG4gICAgICBwcmV2Lm91dHB1dCA9IHN0YXI7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2sgPSB0cnVlO1xuICAgICAgc3RhdGUuZ2xvYnN0YXIgPSB0cnVlO1xuICAgICAgY29uc3VtZSh2YWx1ZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdCA9IHJlbWFpbmluZygpO1xuICAgIGlmIChvcHRzLm5vZXh0Z2xvYiAhPT0gdHJ1ZSAmJiAvXlxcKFteP10vLnRlc3QocmVzdCkpIHtcbiAgICAgIGV4dGdsb2JPcGVuKCdzdGFyJywgdmFsdWUpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHByZXYudHlwZSA9PT0gJ3N0YXInKSB7XG4gICAgICBpZiAob3B0cy5ub2dsb2JzdGFyID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN1bWUodmFsdWUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJpb3IgPSBwcmV2LnByZXY7XG4gICAgICBjb25zdCBiZWZvcmUgPSBwcmlvci5wcmV2O1xuICAgICAgY29uc3QgaXNTdGFydCA9IHByaW9yLnR5cGUgPT09ICdzbGFzaCcgfHwgcHJpb3IudHlwZSA9PT0gJ2Jvcyc7XG4gICAgICBjb25zdCBhZnRlclN0YXIgPSBiZWZvcmUgJiYgKGJlZm9yZS50eXBlID09PSAnc3RhcicgfHwgYmVmb3JlLnR5cGUgPT09ICdnbG9ic3RhcicpO1xuXG4gICAgICBpZiAob3B0cy5iYXNoID09PSB0cnVlICYmICghaXNTdGFydCB8fCAocmVzdFswXSAmJiByZXN0WzBdICE9PSAnLycpKSkge1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3N0YXInLCB2YWx1ZSwgb3V0cHV0OiAnJyB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzQnJhY2UgPSBzdGF0ZS5icmFjZXMgPiAwICYmIChwcmlvci50eXBlID09PSAnY29tbWEnIHx8IHByaW9yLnR5cGUgPT09ICdicmFjZScpO1xuICAgICAgY29uc3QgaXNFeHRnbG9iID0gZXh0Z2xvYnMubGVuZ3RoICYmIChwcmlvci50eXBlID09PSAncGlwZScgfHwgcHJpb3IudHlwZSA9PT0gJ3BhcmVuJyk7XG4gICAgICBpZiAoIWlzU3RhcnQgJiYgcHJpb3IudHlwZSAhPT0gJ3BhcmVuJyAmJiAhaXNCcmFjZSAmJiAhaXNFeHRnbG9iKSB7XG4gICAgICAgIHB1c2goeyB0eXBlOiAnc3RhcicsIHZhbHVlLCBvdXRwdXQ6ICcnIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gc3RyaXAgY29uc2VjdXRpdmUgYC8qKi9gXG4gICAgICB3aGlsZSAocmVzdC5zbGljZSgwLCAzKSA9PT0gJy8qKicpIHtcbiAgICAgICAgY29uc3QgYWZ0ZXIgPSBpbnB1dFtzdGF0ZS5pbmRleCArIDRdO1xuICAgICAgICBpZiAoYWZ0ZXIgJiYgYWZ0ZXIgIT09ICcvJykge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJlc3QgPSByZXN0LnNsaWNlKDMpO1xuICAgICAgICBjb25zdW1lKCcvKionLCAzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByaW9yLnR5cGUgPT09ICdib3MnICYmIGVvcygpKSB7XG4gICAgICAgIHByZXYudHlwZSA9ICdnbG9ic3Rhcic7XG4gICAgICAgIHByZXYudmFsdWUgKz0gdmFsdWU7XG4gICAgICAgIHByZXYub3V0cHV0ID0gZ2xvYnN0YXIob3B0cyk7XG4gICAgICAgIHN0YXRlLm91dHB1dCA9IHByZXYub3V0cHV0O1xuICAgICAgICBzdGF0ZS5nbG9ic3RhciA9IHRydWU7XG4gICAgICAgIGNvbnN1bWUodmFsdWUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByaW9yLnR5cGUgPT09ICdzbGFzaCcgJiYgcHJpb3IucHJldi50eXBlICE9PSAnYm9zJyAmJiAhYWZ0ZXJTdGFyICYmIGVvcygpKSB7XG4gICAgICAgIHN0YXRlLm91dHB1dCA9IHN0YXRlLm91dHB1dC5zbGljZSgwLCAtKHByaW9yLm91dHB1dCArIHByZXYub3V0cHV0KS5sZW5ndGgpO1xuICAgICAgICBwcmlvci5vdXRwdXQgPSBgKD86JHtwcmlvci5vdXRwdXR9YDtcblxuICAgICAgICBwcmV2LnR5cGUgPSAnZ2xvYnN0YXInO1xuICAgICAgICBwcmV2Lm91dHB1dCA9IGdsb2JzdGFyKG9wdHMpICsgKG9wdHMuc3RyaWN0U2xhc2hlcyA/ICcpJyA6ICd8JCknKTtcbiAgICAgICAgcHJldi52YWx1ZSArPSB2YWx1ZTtcbiAgICAgICAgc3RhdGUuZ2xvYnN0YXIgPSB0cnVlO1xuICAgICAgICBzdGF0ZS5vdXRwdXQgKz0gcHJpb3Iub3V0cHV0ICsgcHJldi5vdXRwdXQ7XG4gICAgICAgIGNvbnN1bWUodmFsdWUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByaW9yLnR5cGUgPT09ICdzbGFzaCcgJiYgcHJpb3IucHJldi50eXBlICE9PSAnYm9zJyAmJiByZXN0WzBdID09PSAnLycpIHtcbiAgICAgICAgY29uc3QgZW5kID0gcmVzdFsxXSAhPT0gdm9pZCAwID8gJ3wkJyA6ICcnO1xuXG4gICAgICAgIHN0YXRlLm91dHB1dCA9IHN0YXRlLm91dHB1dC5zbGljZSgwLCAtKHByaW9yLm91dHB1dCArIHByZXYub3V0cHV0KS5sZW5ndGgpO1xuICAgICAgICBwcmlvci5vdXRwdXQgPSBgKD86JHtwcmlvci5vdXRwdXR9YDtcblxuICAgICAgICBwcmV2LnR5cGUgPSAnZ2xvYnN0YXInO1xuICAgICAgICBwcmV2Lm91dHB1dCA9IGAke2dsb2JzdGFyKG9wdHMpfSR7U0xBU0hfTElURVJBTH18JHtTTEFTSF9MSVRFUkFMfSR7ZW5kfSlgO1xuICAgICAgICBwcmV2LnZhbHVlICs9IHZhbHVlO1xuXG4gICAgICAgIHN0YXRlLm91dHB1dCArPSBwcmlvci5vdXRwdXQgKyBwcmV2Lm91dHB1dDtcbiAgICAgICAgc3RhdGUuZ2xvYnN0YXIgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN1bWUodmFsdWUgKyBhZHZhbmNlKCkpO1xuXG4gICAgICAgIHB1c2goeyB0eXBlOiAnc2xhc2gnLCB2YWx1ZTogJy8nLCBvdXRwdXQ6ICcnIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByaW9yLnR5cGUgPT09ICdib3MnICYmIHJlc3RbMF0gPT09ICcvJykge1xuICAgICAgICBwcmV2LnR5cGUgPSAnZ2xvYnN0YXInO1xuICAgICAgICBwcmV2LnZhbHVlICs9IHZhbHVlO1xuICAgICAgICBwcmV2Lm91dHB1dCA9IGAoPzpefCR7U0xBU0hfTElURVJBTH18JHtnbG9ic3RhcihvcHRzKX0ke1NMQVNIX0xJVEVSQUx9KWA7XG4gICAgICAgIHN0YXRlLm91dHB1dCA9IHByZXYub3V0cHV0O1xuICAgICAgICBzdGF0ZS5nbG9ic3RhciA9IHRydWU7XG4gICAgICAgIGNvbnN1bWUodmFsdWUgKyBhZHZhbmNlKCkpO1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3NsYXNoJywgdmFsdWU6ICcvJywgb3V0cHV0OiAnJyB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIHJlbW92ZSBzaW5nbGUgc3RhciBmcm9tIG91dHB1dFxuICAgICAgc3RhdGUub3V0cHV0ID0gc3RhdGUub3V0cHV0LnNsaWNlKDAsIC1wcmV2Lm91dHB1dC5sZW5ndGgpO1xuXG4gICAgICAvLyByZXNldCBwcmV2aW91cyB0b2tlbiB0byBnbG9ic3RhclxuICAgICAgcHJldi50eXBlID0gJ2dsb2JzdGFyJztcbiAgICAgIHByZXYub3V0cHV0ID0gZ2xvYnN0YXIob3B0cyk7XG4gICAgICBwcmV2LnZhbHVlICs9IHZhbHVlO1xuXG4gICAgICAvLyByZXNldCBvdXRwdXQgd2l0aCBnbG9ic3RhclxuICAgICAgc3RhdGUub3V0cHV0ICs9IHByZXYub3V0cHV0O1xuICAgICAgc3RhdGUuZ2xvYnN0YXIgPSB0cnVlO1xuICAgICAgY29uc3VtZSh2YWx1ZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCB0b2tlbiA9IHsgdHlwZTogJ3N0YXInLCB2YWx1ZSwgb3V0cHV0OiBzdGFyIH07XG5cbiAgICBpZiAob3B0cy5iYXNoID09PSB0cnVlKSB7XG4gICAgICB0b2tlbi5vdXRwdXQgPSAnLio/JztcbiAgICAgIGlmIChwcmV2LnR5cGUgPT09ICdib3MnIHx8IHByZXYudHlwZSA9PT0gJ3NsYXNoJykge1xuICAgICAgICB0b2tlbi5vdXRwdXQgPSBub2RvdCArIHRva2VuLm91dHB1dDtcbiAgICAgIH1cbiAgICAgIHB1c2godG9rZW4pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHByZXYgJiYgKHByZXYudHlwZSA9PT0gJ2JyYWNrZXQnIHx8IHByZXYudHlwZSA9PT0gJ3BhcmVuJykgJiYgb3B0cy5yZWdleCA9PT0gdHJ1ZSkge1xuICAgICAgdG9rZW4ub3V0cHV0ID0gdmFsdWU7XG4gICAgICBwdXNoKHRva2VuKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5pbmRleCA9PT0gc3RhdGUuc3RhcnQgfHwgcHJldi50eXBlID09PSAnc2xhc2gnIHx8IHByZXYudHlwZSA9PT0gJ2RvdCcpIHtcbiAgICAgIGlmIChwcmV2LnR5cGUgPT09ICdkb3QnKSB7XG4gICAgICAgIHN0YXRlLm91dHB1dCArPSBOT19ET1RfU0xBU0g7XG4gICAgICAgIHByZXYub3V0cHV0ICs9IE5PX0RPVF9TTEFTSDtcblxuICAgICAgfSBlbHNlIGlmIChvcHRzLmRvdCA9PT0gdHJ1ZSkge1xuICAgICAgICBzdGF0ZS5vdXRwdXQgKz0gTk9fRE9UU19TTEFTSDtcbiAgICAgICAgcHJldi5vdXRwdXQgKz0gTk9fRE9UU19TTEFTSDtcblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUub3V0cHV0ICs9IG5vZG90O1xuICAgICAgICBwcmV2Lm91dHB1dCArPSBub2RvdDtcbiAgICAgIH1cblxuICAgICAgaWYgKHBlZWsoKSAhPT0gJyonKSB7XG4gICAgICAgIHN0YXRlLm91dHB1dCArPSBPTkVfQ0hBUjtcbiAgICAgICAgcHJldi5vdXRwdXQgKz0gT05FX0NIQVI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHVzaCh0b2tlbik7XG4gIH1cblxuICB3aGlsZSAoc3RhdGUuYnJhY2tldHMgPiAwKSB7XG4gICAgaWYgKG9wdHMuc3RyaWN0QnJhY2tldHMgPT09IHRydWUpIHRocm93IG5ldyBTeW50YXhFcnJvcihzeW50YXhFcnJvcignY2xvc2luZycsICddJykpO1xuICAgIHN0YXRlLm91dHB1dCA9IHV0aWxzLmVzY2FwZUxhc3Qoc3RhdGUub3V0cHV0LCAnWycpO1xuICAgIGRlY3JlbWVudCgnYnJhY2tldHMnKTtcbiAgfVxuXG4gIHdoaWxlIChzdGF0ZS5wYXJlbnMgPiAwKSB7XG4gICAgaWYgKG9wdHMuc3RyaWN0QnJhY2tldHMgPT09IHRydWUpIHRocm93IG5ldyBTeW50YXhFcnJvcihzeW50YXhFcnJvcignY2xvc2luZycsICcpJykpO1xuICAgIHN0YXRlLm91dHB1dCA9IHV0aWxzLmVzY2FwZUxhc3Qoc3RhdGUub3V0cHV0LCAnKCcpO1xuICAgIGRlY3JlbWVudCgncGFyZW5zJyk7XG4gIH1cblxuICB3aGlsZSAoc3RhdGUuYnJhY2VzID4gMCkge1xuICAgIGlmIChvcHRzLnN0cmljdEJyYWNrZXRzID09PSB0cnVlKSB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ludGF4RXJyb3IoJ2Nsb3NpbmcnLCAnfScpKTtcbiAgICBzdGF0ZS5vdXRwdXQgPSB1dGlscy5lc2NhcGVMYXN0KHN0YXRlLm91dHB1dCwgJ3snKTtcbiAgICBkZWNyZW1lbnQoJ2JyYWNlcycpO1xuICB9XG5cbiAgaWYgKG9wdHMuc3RyaWN0U2xhc2hlcyAhPT0gdHJ1ZSAmJiAocHJldi50eXBlID09PSAnc3RhcicgfHwgcHJldi50eXBlID09PSAnYnJhY2tldCcpKSB7XG4gICAgcHVzaCh7IHR5cGU6ICdtYXliZV9zbGFzaCcsIHZhbHVlOiAnJywgb3V0cHV0OiBgJHtTTEFTSF9MSVRFUkFMfT9gIH0pO1xuICB9XG5cbiAgLy8gcmVidWlsZCB0aGUgb3V0cHV0IGlmIHdlIGhhZCB0byBiYWNrdHJhY2sgYXQgYW55IHBvaW50XG4gIGlmIChzdGF0ZS5iYWNrdHJhY2sgPT09IHRydWUpIHtcbiAgICBzdGF0ZS5vdXRwdXQgPSAnJztcblxuICAgIGZvciAoY29uc3QgdG9rZW4gb2Ygc3RhdGUudG9rZW5zKSB7XG4gICAgICBzdGF0ZS5vdXRwdXQgKz0gdG9rZW4ub3V0cHV0ICE9IG51bGwgPyB0b2tlbi5vdXRwdXQgOiB0b2tlbi52YWx1ZTtcblxuICAgICAgaWYgKHRva2VuLnN1ZmZpeCkge1xuICAgICAgICBzdGF0ZS5vdXRwdXQgKz0gdG9rZW4uc3VmZml4O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG5cbi8qKlxuICogRmFzdCBwYXRocyBmb3IgY3JlYXRpbmcgcmVndWxhciBleHByZXNzaW9ucyBmb3IgY29tbW9uIGdsb2IgcGF0dGVybnMuXG4gKiBUaGlzIGNhbiBzaWduaWZpY2FudGx5IHNwZWVkIHVwIHByb2Nlc3NpbmcgYW5kIGhhcyB2ZXJ5IGxpdHRsZSBkb3duc2lkZVxuICogaW1wYWN0IHdoZW4gbm9uZSBvZiB0aGUgZmFzdCBwYXRocyBtYXRjaC5cbiAqL1xuXG5wYXJzZS5mYXN0cGF0aHMgPSAoaW5wdXQsIG9wdGlvbnMpID0+IHtcbiAgY29uc3Qgb3B0cyA9IHsgLi4ub3B0aW9ucyB9O1xuICBjb25zdCBtYXggPSB0eXBlb2Ygb3B0cy5tYXhMZW5ndGggPT09ICdudW1iZXInID8gTWF0aC5taW4oTUFYX0xFTkdUSCwgb3B0cy5tYXhMZW5ndGgpIDogTUFYX0xFTkdUSDtcbiAgY29uc3QgbGVuID0gaW5wdXQubGVuZ3RoO1xuICBpZiAobGVuID4gbWF4KSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBJbnB1dCBsZW5ndGg6ICR7bGVufSwgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgbGVuZ3RoOiAke21heH1gKTtcbiAgfVxuXG4gIGlucHV0ID0gUkVQTEFDRU1FTlRTW2lucHV0XSB8fCBpbnB1dDtcbiAgY29uc3Qgd2luMzIgPSB1dGlscy5pc1dpbmRvd3Mob3B0aW9ucyk7XG5cbiAgLy8gY3JlYXRlIGNvbnN0YW50cyBiYXNlZCBvbiBwbGF0Zm9ybSwgZm9yIHdpbmRvd3Mgb3IgcG9zaXhcbiAgY29uc3Qge1xuICAgIERPVF9MSVRFUkFMLFxuICAgIFNMQVNIX0xJVEVSQUwsXG4gICAgT05FX0NIQVIsXG4gICAgRE9UU19TTEFTSCxcbiAgICBOT19ET1QsXG4gICAgTk9fRE9UUyxcbiAgICBOT19ET1RTX1NMQVNILFxuICAgIFNUQVIsXG4gICAgU1RBUlRfQU5DSE9SXG4gIH0gPSBjb25zdGFudHMuZ2xvYkNoYXJzKHdpbjMyKTtcblxuICBjb25zdCBub2RvdCA9IG9wdHMuZG90ID8gTk9fRE9UUyA6IE5PX0RPVDtcbiAgY29uc3Qgc2xhc2hEb3QgPSBvcHRzLmRvdCA/IE5PX0RPVFNfU0xBU0ggOiBOT19ET1Q7XG4gIGNvbnN0IGNhcHR1cmUgPSBvcHRzLmNhcHR1cmUgPyAnJyA6ICc/Oic7XG4gIGNvbnN0IHN0YXRlID0geyBuZWdhdGVkOiBmYWxzZSwgcHJlZml4OiAnJyB9O1xuICBsZXQgc3RhciA9IG9wdHMuYmFzaCA9PT0gdHJ1ZSA/ICcuKj8nIDogU1RBUjtcblxuICBpZiAob3B0cy5jYXB0dXJlKSB7XG4gICAgc3RhciA9IGAoJHtzdGFyfSlgO1xuICB9XG5cbiAgY29uc3QgZ2xvYnN0YXIgPSBvcHRzID0+IHtcbiAgICBpZiAob3B0cy5ub2dsb2JzdGFyID09PSB0cnVlKSByZXR1cm4gc3RhcjtcbiAgICByZXR1cm4gYCgke2NhcHR1cmV9KD86KD8hJHtTVEFSVF9BTkNIT1J9JHtvcHRzLmRvdCA/IERPVFNfU0xBU0ggOiBET1RfTElURVJBTH0pLikqPylgO1xuICB9O1xuXG4gIGNvbnN0IGNyZWF0ZSA9IHN0ciA9PiB7XG4gICAgc3dpdGNoIChzdHIpIHtcbiAgICAgIGNhc2UgJyonOlxuICAgICAgICByZXR1cm4gYCR7bm9kb3R9JHtPTkVfQ0hBUn0ke3N0YXJ9YDtcblxuICAgICAgY2FzZSAnLionOlxuICAgICAgICByZXR1cm4gYCR7RE9UX0xJVEVSQUx9JHtPTkVfQ0hBUn0ke3N0YXJ9YDtcblxuICAgICAgY2FzZSAnKi4qJzpcbiAgICAgICAgcmV0dXJuIGAke25vZG90fSR7c3Rhcn0ke0RPVF9MSVRFUkFMfSR7T05FX0NIQVJ9JHtzdGFyfWA7XG5cbiAgICAgIGNhc2UgJyovKic6XG4gICAgICAgIHJldHVybiBgJHtub2RvdH0ke3N0YXJ9JHtTTEFTSF9MSVRFUkFMfSR7T05FX0NIQVJ9JHtzbGFzaERvdH0ke3N0YXJ9YDtcblxuICAgICAgY2FzZSAnKionOlxuICAgICAgICByZXR1cm4gbm9kb3QgKyBnbG9ic3RhcihvcHRzKTtcblxuICAgICAgY2FzZSAnKiovKic6XG4gICAgICAgIHJldHVybiBgKD86JHtub2RvdH0ke2dsb2JzdGFyKG9wdHMpfSR7U0xBU0hfTElURVJBTH0pPyR7c2xhc2hEb3R9JHtPTkVfQ0hBUn0ke3N0YXJ9YDtcblxuICAgICAgY2FzZSAnKiovKi4qJzpcbiAgICAgICAgcmV0dXJuIGAoPzoke25vZG90fSR7Z2xvYnN0YXIob3B0cyl9JHtTTEFTSF9MSVRFUkFMfSk/JHtzbGFzaERvdH0ke3N0YXJ9JHtET1RfTElURVJBTH0ke09ORV9DSEFSfSR7c3Rhcn1gO1xuXG4gICAgICBjYXNlICcqKi8uKic6XG4gICAgICAgIHJldHVybiBgKD86JHtub2RvdH0ke2dsb2JzdGFyKG9wdHMpfSR7U0xBU0hfTElURVJBTH0pPyR7RE9UX0xJVEVSQUx9JHtPTkVfQ0hBUn0ke3N0YXJ9YDtcblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBjb25zdCBtYXRjaCA9IC9eKC4qPylcXC4oXFx3KykkLy5leGVjKHN0cik7XG4gICAgICAgIGlmICghbWF0Y2gpIHJldHVybjtcblxuICAgICAgICBjb25zdCBzb3VyY2UgPSBjcmVhdGUobWF0Y2hbMV0pO1xuICAgICAgICBpZiAoIXNvdXJjZSkgcmV0dXJuO1xuXG4gICAgICAgIHJldHVybiBzb3VyY2UgKyBET1RfTElURVJBTCArIG1hdGNoWzJdO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBvdXRwdXQgPSB1dGlscy5yZW1vdmVQcmVmaXgoaW5wdXQsIHN0YXRlKTtcbiAgbGV0IHNvdXJjZSA9IGNyZWF0ZShvdXRwdXQpO1xuXG4gIGlmIChzb3VyY2UgJiYgb3B0cy5zdHJpY3RTbGFzaGVzICE9PSB0cnVlKSB7XG4gICAgc291cmNlICs9IGAke1NMQVNIX0xJVEVSQUx9P2A7XG4gIH1cblxuICByZXR1cm4gc291cmNlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5jb25zdCBzY2FuID0gcmVxdWlyZSgnLi9zY2FuJyk7XG5jb25zdCBwYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKTtcbmNvbnN0IGlzT2JqZWN0ID0gdmFsID0+IHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWwpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXRjaGVyIGZ1bmN0aW9uIGZyb20gb25lIG9yIG1vcmUgZ2xvYiBwYXR0ZXJucy4gVGhlXG4gKiByZXR1cm5lZCBmdW5jdGlvbiB0YWtlcyBhIHN0cmluZyB0byBtYXRjaCBhcyBpdHMgZmlyc3QgYXJndW1lbnQsXG4gKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSBzdHJpbmcgaXMgYSBtYXRjaC4gVGhlIHJldHVybmVkIG1hdGNoZXJcbiAqIGZ1bmN0aW9uIGFsc28gdGFrZXMgYSBib29sZWFuIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdGhhdCwgd2hlbiB0cnVlLFxuICogcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBwaWNvbWF0Y2ggPSByZXF1aXJlKCdwaWNvbWF0Y2gnKTtcbiAqIC8vIHBpY29tYXRjaChnbG9iWywgb3B0aW9uc10pO1xuICpcbiAqIGNvbnN0IGlzTWF0Y2ggPSBwaWNvbWF0Y2goJyouISgqYSknKTtcbiAqIGNvbnNvbGUubG9nKGlzTWF0Y2goJ2EuYScpKTsgLy89PiBmYWxzZVxuICogY29uc29sZS5sb2coaXNNYXRjaCgnYS5iJykpOyAvLz0+IHRydWVcbiAqIGBgYFxuICogQG5hbWUgcGljb21hdGNoXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gYGdsb2JzYCBPbmUgb3IgbW9yZSBnbG9iIHBhdHRlcm5zLlxuICogQHBhcmFtIHtPYmplY3Q9fSBgb3B0aW9uc2BcbiAqIEByZXR1cm4ge0Z1bmN0aW9uPX0gUmV0dXJucyBhIG1hdGNoZXIgZnVuY3Rpb24uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmNvbnN0IHBpY29tYXRjaCA9IChnbG9iLCBvcHRpb25zLCByZXR1cm5TdGF0ZSA9IGZhbHNlKSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KGdsb2IpKSB7XG4gICAgY29uc3QgZm5zID0gZ2xvYi5tYXAoaW5wdXQgPT4gcGljb21hdGNoKGlucHV0LCBvcHRpb25zLCByZXR1cm5TdGF0ZSkpO1xuICAgIGNvbnN0IGFycmF5TWF0Y2hlciA9IHN0ciA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGlzTWF0Y2ggb2YgZm5zKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gaXNNYXRjaChzdHIpO1xuICAgICAgICBpZiAoc3RhdGUpIHJldHVybiBzdGF0ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIHJldHVybiBhcnJheU1hdGNoZXI7XG4gIH1cblxuICBjb25zdCBpc1N0YXRlID0gaXNPYmplY3QoZ2xvYikgJiYgZ2xvYi50b2tlbnMgJiYgZ2xvYi5pbnB1dDtcblxuICBpZiAoZ2xvYiA9PT0gJycgfHwgKHR5cGVvZiBnbG9iICE9PSAnc3RyaW5nJyAmJiAhaXNTdGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBwYXR0ZXJuIHRvIGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICB9XG5cbiAgY29uc3Qgb3B0cyA9IG9wdGlvbnMgfHwge307XG4gIGNvbnN0IHBvc2l4ID0gdXRpbHMuaXNXaW5kb3dzKG9wdGlvbnMpO1xuICBjb25zdCByZWdleCA9IGlzU3RhdGVcbiAgICA/IHBpY29tYXRjaC5jb21waWxlUmUoZ2xvYiwgb3B0aW9ucylcbiAgICA6IHBpY29tYXRjaC5tYWtlUmUoZ2xvYiwgb3B0aW9ucywgZmFsc2UsIHRydWUpO1xuXG4gIGNvbnN0IHN0YXRlID0gcmVnZXguc3RhdGU7XG4gIGRlbGV0ZSByZWdleC5zdGF0ZTtcblxuICBsZXQgaXNJZ25vcmVkID0gKCkgPT4gZmFsc2U7XG4gIGlmIChvcHRzLmlnbm9yZSkge1xuICAgIGNvbnN0IGlnbm9yZU9wdHMgPSB7IC4uLm9wdGlvbnMsIGlnbm9yZTogbnVsbCwgb25NYXRjaDogbnVsbCwgb25SZXN1bHQ6IG51bGwgfTtcbiAgICBpc0lnbm9yZWQgPSBwaWNvbWF0Y2gob3B0cy5pZ25vcmUsIGlnbm9yZU9wdHMsIHJldHVyblN0YXRlKTtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoZXIgPSAoaW5wdXQsIHJldHVybk9iamVjdCA9IGZhbHNlKSA9PiB7XG4gICAgY29uc3QgeyBpc01hdGNoLCBtYXRjaCwgb3V0cHV0IH0gPSBwaWNvbWF0Y2gudGVzdChpbnB1dCwgcmVnZXgsIG9wdGlvbnMsIHsgZ2xvYiwgcG9zaXggfSk7XG4gICAgY29uc3QgcmVzdWx0ID0geyBnbG9iLCBzdGF0ZSwgcmVnZXgsIHBvc2l4LCBpbnB1dCwgb3V0cHV0LCBtYXRjaCwgaXNNYXRjaCB9O1xuXG4gICAgaWYgKHR5cGVvZiBvcHRzLm9uUmVzdWx0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvcHRzLm9uUmVzdWx0KHJlc3VsdCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTWF0Y2ggPT09IGZhbHNlKSB7XG4gICAgICByZXN1bHQuaXNNYXRjaCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHJldHVybk9iamVjdCA/IHJlc3VsdCA6IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChpc0lnbm9yZWQoaW5wdXQpKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdHMub25JZ25vcmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb3B0cy5vbklnbm9yZShyZXN1bHQpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LmlzTWF0Y2ggPSBmYWxzZTtcbiAgICAgIHJldHVybiByZXR1cm5PYmplY3QgPyByZXN1bHQgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdHMub25NYXRjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb3B0cy5vbk1hdGNoKHJlc3VsdCk7XG4gICAgfVxuICAgIHJldHVybiByZXR1cm5PYmplY3QgPyByZXN1bHQgOiB0cnVlO1xuICB9O1xuXG4gIGlmIChyZXR1cm5TdGF0ZSkge1xuICAgIG1hdGNoZXIuc3RhdGUgPSBzdGF0ZTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVyO1xufTtcblxuLyoqXG4gKiBUZXN0IGBpbnB1dGAgd2l0aCB0aGUgZ2l2ZW4gYHJlZ2V4YC4gVGhpcyBpcyB1c2VkIGJ5IHRoZSBtYWluXG4gKiBgcGljb21hdGNoKClgIGZ1bmN0aW9uIHRvIHRlc3QgdGhlIGlucHV0IHN0cmluZy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcGljb21hdGNoID0gcmVxdWlyZSgncGljb21hdGNoJyk7XG4gKiAvLyBwaWNvbWF0Y2gudGVzdChpbnB1dCwgcmVnZXhbLCBvcHRpb25zXSk7XG4gKlxuICogY29uc29sZS5sb2cocGljb21hdGNoLnRlc3QoJ2Zvby9iYXInLCAvXig/OihbXi9dKj8pXFwvKFteL10qPykpJC8pKTtcbiAqIC8vIHsgaXNNYXRjaDogdHJ1ZSwgbWF0Y2g6IFsgJ2Zvby8nLCAnZm9vJywgJ2JhcicgXSwgb3V0cHV0OiAnZm9vL2JhcicgfVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYGlucHV0YCBTdHJpbmcgdG8gdGVzdC5cbiAqIEBwYXJhbSB7UmVnRXhwfSBgcmVnZXhgXG4gKiBAcmV0dXJuIHtPYmplY3R9IFJldHVybnMgYW4gb2JqZWN0IHdpdGggbWF0Y2hpbmcgaW5mby5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxucGljb21hdGNoLnRlc3QgPSAoaW5wdXQsIHJlZ2V4LCBvcHRpb25zLCB7IGdsb2IsIHBvc2l4IH0gPSB7fSkgPT4ge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGlucHV0IHRvIGJlIGEgc3RyaW5nJyk7XG4gIH1cblxuICBpZiAoaW5wdXQgPT09ICcnKSB7XG4gICAgcmV0dXJuIHsgaXNNYXRjaDogZmFsc2UsIG91dHB1dDogJycgfTtcbiAgfVxuXG4gIGNvbnN0IG9wdHMgPSBvcHRpb25zIHx8IHt9O1xuICBjb25zdCBmb3JtYXQgPSBvcHRzLmZvcm1hdCB8fCAocG9zaXggPyB1dGlscy50b1Bvc2l4U2xhc2hlcyA6IG51bGwpO1xuICBsZXQgbWF0Y2ggPSBpbnB1dCA9PT0gZ2xvYjtcbiAgbGV0IG91dHB1dCA9IChtYXRjaCAmJiBmb3JtYXQpID8gZm9ybWF0KGlucHV0KSA6IGlucHV0O1xuXG4gIGlmIChtYXRjaCA9PT0gZmFsc2UpIHtcbiAgICBvdXRwdXQgPSBmb3JtYXQgPyBmb3JtYXQoaW5wdXQpIDogaW5wdXQ7XG4gICAgbWF0Y2ggPSBvdXRwdXQgPT09IGdsb2I7XG4gIH1cblxuICBpZiAobWF0Y2ggPT09IGZhbHNlIHx8IG9wdHMuY2FwdHVyZSA9PT0gdHJ1ZSkge1xuICAgIGlmIChvcHRzLm1hdGNoQmFzZSA9PT0gdHJ1ZSB8fCBvcHRzLmJhc2VuYW1lID09PSB0cnVlKSB7XG4gICAgICBtYXRjaCA9IHBpY29tYXRjaC5tYXRjaEJhc2UoaW5wdXQsIHJlZ2V4LCBvcHRpb25zLCBwb3NpeCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hdGNoID0gcmVnZXguZXhlYyhvdXRwdXQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGlzTWF0Y2g6IEJvb2xlYW4obWF0Y2gpLCBtYXRjaCwgb3V0cHV0IH07XG59O1xuXG4vKipcbiAqIE1hdGNoIHRoZSBiYXNlbmFtZSBvZiBhIGZpbGVwYXRoLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBwaWNvbWF0Y2ggPSByZXF1aXJlKCdwaWNvbWF0Y2gnKTtcbiAqIC8vIHBpY29tYXRjaC5tYXRjaEJhc2UoaW5wdXQsIGdsb2JbLCBvcHRpb25zXSk7XG4gKiBjb25zb2xlLmxvZyhwaWNvbWF0Y2gubWF0Y2hCYXNlKCdmb28vYmFyLmpzJywgJyouanMnKTsgLy8gdHJ1ZVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYGlucHV0YCBTdHJpbmcgdG8gdGVzdC5cbiAqIEBwYXJhbSB7UmVnRXhwfFN0cmluZ30gYGdsb2JgIEdsb2IgcGF0dGVybiBvciByZWdleCBjcmVhdGVkIGJ5IFsubWFrZVJlXSgjbWFrZVJlKS5cbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnBpY29tYXRjaC5tYXRjaEJhc2UgPSAoaW5wdXQsIGdsb2IsIG9wdGlvbnMsIHBvc2l4ID0gdXRpbHMuaXNXaW5kb3dzKG9wdGlvbnMpKSA9PiB7XG4gIGNvbnN0IHJlZ2V4ID0gZ2xvYiBpbnN0YW5jZW9mIFJlZ0V4cCA/IGdsb2IgOiBwaWNvbWF0Y2gubWFrZVJlKGdsb2IsIG9wdGlvbnMpO1xuICByZXR1cm4gcmVnZXgudGVzdChwYXRoLmJhc2VuYW1lKGlucHV0KSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiAqKmFueSoqIG9mIHRoZSBnaXZlbiBnbG9iIGBwYXR0ZXJuc2AgbWF0Y2ggdGhlIHNwZWNpZmllZCBgc3RyaW5nYC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcGljb21hdGNoID0gcmVxdWlyZSgncGljb21hdGNoJyk7XG4gKiAvLyBwaWNvbWF0Y2guaXNNYXRjaChzdHJpbmcsIHBhdHRlcm5zWywgb3B0aW9uc10pO1xuICpcbiAqIGNvbnNvbGUubG9nKHBpY29tYXRjaC5pc01hdGNoKCdhLmEnLCBbJ2IuKicsICcqLmEnXSkpOyAvLz0+IHRydWVcbiAqIGNvbnNvbGUubG9nKHBpY29tYXRjaC5pc01hdGNoKCdhLmEnLCAnYi4qJykpOyAvLz0+IGZhbHNlXG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBzdHIgVGhlIHN0cmluZyB0byB0ZXN0LlxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IHBhdHRlcm5zIE9uZSBvciBtb3JlIGdsb2IgcGF0dGVybnMgdG8gdXNlIGZvciBtYXRjaGluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gU2VlIGF2YWlsYWJsZSBbb3B0aW9uc10oI29wdGlvbnMpLlxuICogQHJldHVybiB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGFueSBwYXR0ZXJucyBtYXRjaCBgc3RyYFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5waWNvbWF0Y2guaXNNYXRjaCA9IChzdHIsIHBhdHRlcm5zLCBvcHRpb25zKSA9PiBwaWNvbWF0Y2gocGF0dGVybnMsIG9wdGlvbnMpKHN0cik7XG5cbi8qKlxuICogUGFyc2UgYSBnbG9iIHBhdHRlcm4gdG8gY3JlYXRlIHRoZSBzb3VyY2Ugc3RyaW5nIGZvciBhIHJlZ3VsYXJcbiAqIGV4cHJlc3Npb24uXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHBpY29tYXRjaCA9IHJlcXVpcmUoJ3BpY29tYXRjaCcpO1xuICogY29uc3QgcmVzdWx0ID0gcGljb21hdGNoLnBhcnNlKHBhdHRlcm5bLCBvcHRpb25zXSk7XG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfSBgcGF0dGVybmBcbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB1c2VmdWwgcHJvcGVydGllcyBhbmQgb3V0cHV0IHRvIGJlIHVzZWQgYXMgYSByZWdleCBzb3VyY2Ugc3RyaW5nLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5waWNvbWF0Y2gucGFyc2UgPSAocGF0dGVybiwgb3B0aW9ucykgPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShwYXR0ZXJuKSkgcmV0dXJuIHBhdHRlcm4ubWFwKHAgPT4gcGljb21hdGNoLnBhcnNlKHAsIG9wdGlvbnMpKTtcbiAgcmV0dXJuIHBhcnNlKHBhdHRlcm4sIHsgLi4ub3B0aW9ucywgZmFzdHBhdGhzOiBmYWxzZSB9KTtcbn07XG5cbi8qKlxuICogU2NhbiBhIGdsb2IgcGF0dGVybiB0byBzZXBhcmF0ZSB0aGUgcGF0dGVybiBpbnRvIHNlZ21lbnRzLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBwaWNvbWF0Y2ggPSByZXF1aXJlKCdwaWNvbWF0Y2gnKTtcbiAqIC8vIHBpY29tYXRjaC5zY2FuKGlucHV0Wywgb3B0aW9uc10pO1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IHBpY29tYXRjaC5zY2FuKCchLi9mb28vKi5qcycpO1xuICogY29uc29sZS5sb2cocmVzdWx0KTtcbiAqIHsgcHJlZml4OiAnIS4vJyxcbiAqICAgaW5wdXQ6ICchLi9mb28vKi5qcycsXG4gKiAgIHN0YXJ0OiAzLFxuICogICBiYXNlOiAnZm9vJyxcbiAqICAgZ2xvYjogJyouanMnLFxuICogICBpc0JyYWNlOiBmYWxzZSxcbiAqICAgaXNCcmFja2V0OiBmYWxzZSxcbiAqICAgaXNHbG9iOiB0cnVlLFxuICogICBpc0V4dGdsb2I6IGZhbHNlLFxuICogICBpc0dsb2JzdGFyOiBmYWxzZSxcbiAqICAgbmVnYXRlZDogdHJ1ZSB9XG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfSBgaW5wdXRgIEdsb2IgcGF0dGVybiB0byBzY2FuLlxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYFxuICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnBpY29tYXRjaC5zY2FuID0gKGlucHV0LCBvcHRpb25zKSA9PiBzY2FuKGlucHV0LCBvcHRpb25zKTtcblxuLyoqXG4gKiBDb21waWxlIGEgcmVndWxhciBleHByZXNzaW9uIGZyb20gdGhlIGBzdGF0ZWAgb2JqZWN0IHJldHVybmVkIGJ5IHRoZVxuICogW3BhcnNlKCldKCNwYXJzZSkgbWV0aG9kLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBgc3RhdGVgXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGByZXR1cm5PdXRwdXRgIEludGVuZGVkIGZvciBpbXBsZW1lbnRvcnMsIHRoaXMgYXJndW1lbnQgYWxsb3dzIHlvdSB0byByZXR1cm4gdGhlIHJhdyBvdXRwdXQgZnJvbSB0aGUgcGFyc2VyLlxuICogQHBhcmFtIHtCb29sZWFufSBgcmV0dXJuU3RhdGVgIEFkZHMgdGhlIHN0YXRlIHRvIGEgYHN0YXRlYCBwcm9wZXJ0eSBvbiB0aGUgcmV0dXJuZWQgcmVnZXguIFVzZWZ1bCBmb3IgaW1wbGVtZW50b3JzIGFuZCBkZWJ1Z2dpbmcuXG4gKiBAcmV0dXJuIHtSZWdFeHB9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnBpY29tYXRjaC5jb21waWxlUmUgPSAoc3RhdGUsIG9wdGlvbnMsIHJldHVybk91dHB1dCA9IGZhbHNlLCByZXR1cm5TdGF0ZSA9IGZhbHNlKSA9PiB7XG4gIGlmIChyZXR1cm5PdXRwdXQgPT09IHRydWUpIHtcbiAgICByZXR1cm4gc3RhdGUub3V0cHV0O1xuICB9XG5cbiAgY29uc3Qgb3B0cyA9IG9wdGlvbnMgfHwge307XG4gIGNvbnN0IHByZXBlbmQgPSBvcHRzLmNvbnRhaW5zID8gJycgOiAnXic7XG4gIGNvbnN0IGFwcGVuZCA9IG9wdHMuY29udGFpbnMgPyAnJyA6ICckJztcblxuICBsZXQgc291cmNlID0gYCR7cHJlcGVuZH0oPzoke3N0YXRlLm91dHB1dH0pJHthcHBlbmR9YDtcbiAgaWYgKHN0YXRlICYmIHN0YXRlLm5lZ2F0ZWQgPT09IHRydWUpIHtcbiAgICBzb3VyY2UgPSBgXig/ISR7c291cmNlfSkuKiRgO1xuICB9XG5cbiAgY29uc3QgcmVnZXggPSBwaWNvbWF0Y2gudG9SZWdleChzb3VyY2UsIG9wdGlvbnMpO1xuICBpZiAocmV0dXJuU3RhdGUgPT09IHRydWUpIHtcbiAgICByZWdleC5zdGF0ZSA9IHN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIHJlZ2V4O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSByZWd1bGFyIGV4cHJlc3Npb24gZnJvbSBhIHBhcnNlZCBnbG9iIHBhdHRlcm4uXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHBpY29tYXRjaCA9IHJlcXVpcmUoJ3BpY29tYXRjaCcpO1xuICogY29uc3Qgc3RhdGUgPSBwaWNvbWF0Y2gucGFyc2UoJyouanMnKTtcbiAqIC8vIHBpY29tYXRjaC5jb21waWxlUmUoc3RhdGVbLCBvcHRpb25zXSk7XG4gKlxuICogY29uc29sZS5sb2cocGljb21hdGNoLmNvbXBpbGVSZShzdGF0ZSkpO1xuICogLy89PiAvXig/Oig/IVxcLikoPz0uKVteL10qP1xcLmpzKSQvXG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfSBgc3RhdGVgIFRoZSBvYmplY3QgcmV0dXJuZWQgZnJvbSB0aGUgYC5wYXJzZWAgbWV0aG9kLlxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYFxuICogQHBhcmFtIHtCb29sZWFufSBgcmV0dXJuT3V0cHV0YCBJbXBsZW1lbnRvcnMgbWF5IHVzZSB0aGlzIGFyZ3VtZW50IHRvIHJldHVybiB0aGUgY29tcGlsZWQgb3V0cHV0LCBpbnN0ZWFkIG9mIGEgcmVndWxhciBleHByZXNzaW9uLiBUaGlzIGlzIG5vdCBleHBvc2VkIG9uIHRoZSBvcHRpb25zIHRvIHByZXZlbnQgZW5kLXVzZXJzIGZyb20gbXV0YXRpbmcgdGhlIHJlc3VsdC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gYHJldHVyblN0YXRlYCBJbXBsZW1lbnRvcnMgbWF5IHVzZSB0aGlzIGFyZ3VtZW50IHRvIHJldHVybiB0aGUgc3RhdGUgZnJvbSB0aGUgcGFyc2VkIGdsb2Igd2l0aCB0aGUgcmV0dXJuZWQgcmVndWxhciBleHByZXNzaW9uLlxuICogQHJldHVybiB7UmVnRXhwfSBSZXR1cm5zIGEgcmVnZXggY3JlYXRlZCBmcm9tIHRoZSBnaXZlbiBwYXR0ZXJuLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5waWNvbWF0Y2gubWFrZVJlID0gKGlucHV0LCBvcHRpb25zID0ge30sIHJldHVybk91dHB1dCA9IGZhbHNlLCByZXR1cm5TdGF0ZSA9IGZhbHNlKSA9PiB7XG4gIGlmICghaW5wdXQgfHwgdHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICB9XG5cbiAgbGV0IHBhcnNlZCA9IHsgbmVnYXRlZDogZmFsc2UsIGZhc3RwYXRoczogdHJ1ZSB9O1xuXG4gIGlmIChvcHRpb25zLmZhc3RwYXRocyAhPT0gZmFsc2UgJiYgKGlucHV0WzBdID09PSAnLicgfHwgaW5wdXRbMF0gPT09ICcqJykpIHtcbiAgICBwYXJzZWQub3V0cHV0ID0gcGFyc2UuZmFzdHBhdGhzKGlucHV0LCBvcHRpb25zKTtcbiAgfVxuXG4gIGlmICghcGFyc2VkLm91dHB1dCkge1xuICAgIHBhcnNlZCA9IHBhcnNlKGlucHV0LCBvcHRpb25zKTtcbiAgfVxuXG4gIHJldHVybiBwaWNvbWF0Y2guY29tcGlsZVJlKHBhcnNlZCwgb3B0aW9ucywgcmV0dXJuT3V0cHV0LCByZXR1cm5TdGF0ZSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBmcm9tIHRoZSBnaXZlbiByZWdleCBzb3VyY2Ugc3RyaW5nLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBwaWNvbWF0Y2ggPSByZXF1aXJlKCdwaWNvbWF0Y2gnKTtcbiAqIC8vIHBpY29tYXRjaC50b1JlZ2V4KHNvdXJjZVssIG9wdGlvbnNdKTtcbiAqXG4gKiBjb25zdCB7IG91dHB1dCB9ID0gcGljb21hdGNoLnBhcnNlKCcqLmpzJyk7XG4gKiBjb25zb2xlLmxvZyhwaWNvbWF0Y2gudG9SZWdleChvdXRwdXQpKTtcbiAqIC8vPT4gL14oPzooPyFcXC4pKD89LilbXi9dKj9cXC5qcykkL1xuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYHNvdXJjZWAgUmVndWxhciBleHByZXNzaW9uIHNvdXJjZSBzdHJpbmcuXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgXG4gKiBAcmV0dXJuIHtSZWdFeHB9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnBpY29tYXRjaC50b1JlZ2V4ID0gKHNvdXJjZSwgb3B0aW9ucykgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IG9wdHMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHJldHVybiBuZXcgUmVnRXhwKHNvdXJjZSwgb3B0cy5mbGFncyB8fCAob3B0cy5ub2Nhc2UgPyAnaScgOiAnJykpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmRlYnVnID09PSB0cnVlKSB0aHJvdyBlcnI7XG4gICAgcmV0dXJuIC8kXi87XG4gIH1cbn07XG5cbi8qKlxuICogUGljb21hdGNoIGNvbnN0YW50cy5cbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuXG5waWNvbWF0Y2guY29uc3RhbnRzID0gY29uc3RhbnRzO1xuXG4vKipcbiAqIEV4cG9zZSBcInBpY29tYXRjaFwiXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBwaWNvbWF0Y2g7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL3BpY29tYXRjaCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbmNvbnN0IGJyYWNlcyA9IHJlcXVpcmUoJ2JyYWNlcycpO1xuY29uc3QgcGljb21hdGNoID0gcmVxdWlyZSgncGljb21hdGNoJyk7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ3BpY29tYXRjaC9saWIvdXRpbHMnKTtcbmNvbnN0IGlzRW1wdHlTdHJpbmcgPSB2YWwgPT4gdmFsID09PSAnJyB8fCB2YWwgPT09ICcuLyc7XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBzdHJpbmdzIHRoYXQgbWF0Y2ggb25lIG9yIG1vcmUgZ2xvYiBwYXR0ZXJucy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgbW0gPSByZXF1aXJlKCdtaWNyb21hdGNoJyk7XG4gKiAvLyBtbShsaXN0LCBwYXR0ZXJuc1ssIG9wdGlvbnNdKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhtbShbJ2EuanMnLCAnYS50eHQnXSwgWycqLmpzJ10pKTtcbiAqIC8vPT4gWyAnYS5qcycgXVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheTxzdHJpbmc+fSBgbGlzdGAgTGlzdCBvZiBzdHJpbmdzIHRvIG1hdGNoLlxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXk8c3RyaW5nPn0gYHBhdHRlcm5zYCBPbmUgb3IgbW9yZSBnbG9iIHBhdHRlcm5zIHRvIHVzZSBmb3IgbWF0Y2hpbmcuXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgIFNlZSBhdmFpbGFibGUgW29wdGlvbnNdKCNvcHRpb25zKVxuICogQHJldHVybiB7QXJyYXl9IFJldHVybnMgYW4gYXJyYXkgb2YgbWF0Y2hlc1xuICogQHN1bW1hcnkgZmFsc2VcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuY29uc3QgbWljcm9tYXRjaCA9IChsaXN0LCBwYXR0ZXJucywgb3B0aW9ucykgPT4ge1xuICBwYXR0ZXJucyA9IFtdLmNvbmNhdChwYXR0ZXJucyk7XG4gIGxpc3QgPSBbXS5jb25jYXQobGlzdCk7XG5cbiAgbGV0IG9taXQgPSBuZXcgU2V0KCk7XG4gIGxldCBrZWVwID0gbmV3IFNldCgpO1xuICBsZXQgaXRlbXMgPSBuZXcgU2V0KCk7XG4gIGxldCBuZWdhdGl2ZXMgPSAwO1xuXG4gIGxldCBvblJlc3VsdCA9IHN0YXRlID0+IHtcbiAgICBpdGVtcy5hZGQoc3RhdGUub3V0cHV0KTtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm9uUmVzdWx0KSB7XG4gICAgICBvcHRpb25zLm9uUmVzdWx0KHN0YXRlKTtcbiAgICB9XG4gIH07XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXR0ZXJucy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBpc01hdGNoID0gcGljb21hdGNoKFN0cmluZyhwYXR0ZXJuc1tpXSksIHsgLi4ub3B0aW9ucywgb25SZXN1bHQgfSwgdHJ1ZSk7XG4gICAgbGV0IG5lZ2F0ZWQgPSBpc01hdGNoLnN0YXRlLm5lZ2F0ZWQgfHwgaXNNYXRjaC5zdGF0ZS5uZWdhdGVkRXh0Z2xvYjtcbiAgICBpZiAobmVnYXRlZCkgbmVnYXRpdmVzKys7XG5cbiAgICBmb3IgKGxldCBpdGVtIG9mIGxpc3QpIHtcbiAgICAgIGxldCBtYXRjaGVkID0gaXNNYXRjaChpdGVtLCB0cnVlKTtcblxuICAgICAgbGV0IG1hdGNoID0gbmVnYXRlZCA/ICFtYXRjaGVkLmlzTWF0Y2ggOiBtYXRjaGVkLmlzTWF0Y2g7XG4gICAgICBpZiAoIW1hdGNoKSBjb250aW51ZTtcblxuICAgICAgaWYgKG5lZ2F0ZWQpIHtcbiAgICAgICAgb21pdC5hZGQobWF0Y2hlZC5vdXRwdXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb21pdC5kZWxldGUobWF0Y2hlZC5vdXRwdXQpO1xuICAgICAgICBrZWVwLmFkZChtYXRjaGVkLm91dHB1dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHJlc3VsdCA9IG5lZ2F0aXZlcyA9PT0gcGF0dGVybnMubGVuZ3RoID8gWy4uLml0ZW1zXSA6IFsuLi5rZWVwXTtcbiAgbGV0IG1hdGNoZXMgPSByZXN1bHQuZmlsdGVyKGl0ZW0gPT4gIW9taXQuaGFzKGl0ZW0pKTtcblxuICBpZiAob3B0aW9ucyAmJiBtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChvcHRpb25zLmZhaWxnbG9iID09PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIG1hdGNoZXMgZm91bmQgZm9yIFwiJHtwYXR0ZXJucy5qb2luKCcsICcpfVwiYCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMubm9udWxsID09PSB0cnVlIHx8IG9wdGlvbnMubnVsbGdsb2IgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnVuZXNjYXBlID8gcGF0dGVybnMubWFwKHAgPT4gcC5yZXBsYWNlKC9cXFxcL2csICcnKSkgOiBwYXR0ZXJucztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWF0Y2hlcztcbn07XG5cbi8qKlxuICogQmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAqL1xuXG5taWNyb21hdGNoLm1hdGNoID0gbWljcm9tYXRjaDtcblxuLyoqXG4gKiBSZXR1cm5zIGEgbWF0Y2hlciBmdW5jdGlvbiBmcm9tIHRoZSBnaXZlbiBnbG9iIGBwYXR0ZXJuYCBhbmQgYG9wdGlvbnNgLlxuICogVGhlIHJldHVybmVkIGZ1bmN0aW9uIHRha2VzIGEgc3RyaW5nIHRvIG1hdGNoIGFzIGl0cyBvbmx5IGFyZ3VtZW50IGFuZCByZXR1cm5zXG4gKiB0cnVlIGlmIHRoZSBzdHJpbmcgaXMgYSBtYXRjaC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgbW0gPSByZXF1aXJlKCdtaWNyb21hdGNoJyk7XG4gKiAvLyBtbS5tYXRjaGVyKHBhdHRlcm5bLCBvcHRpb25zXSk7XG4gKlxuICogY29uc3QgaXNNYXRjaCA9IG1tLm1hdGNoZXIoJyouISgqYSknKTtcbiAqIGNvbnNvbGUubG9nKGlzTWF0Y2goJ2EuYScpKTsgLy89PiBmYWxzZVxuICogY29uc29sZS5sb2coaXNNYXRjaCgnYS5iJykpOyAvLz0+IHRydWVcbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBwYXR0ZXJuYCBHbG9iIHBhdHRlcm5cbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBSZXR1cm5zIGEgbWF0Y2hlciBmdW5jdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxubWljcm9tYXRjaC5tYXRjaGVyID0gKHBhdHRlcm4sIG9wdGlvbnMpID0+IHBpY29tYXRjaChwYXR0ZXJuLCBvcHRpb25zKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgKiphbnkqKiBvZiB0aGUgZ2l2ZW4gZ2xvYiBgcGF0dGVybnNgIG1hdGNoIHRoZSBzcGVjaWZpZWQgYHN0cmluZ2AuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IG1tID0gcmVxdWlyZSgnbWljcm9tYXRjaCcpO1xuICogLy8gbW0uaXNNYXRjaChzdHJpbmcsIHBhdHRlcm5zWywgb3B0aW9uc10pO1xuICpcbiAqIGNvbnNvbGUubG9nKG1tLmlzTWF0Y2goJ2EuYScsIFsnYi4qJywgJyouYSddKSk7IC8vPT4gdHJ1ZVxuICogY29uc29sZS5sb2cobW0uaXNNYXRjaCgnYS5hJywgJ2IuKicpKTsgLy89PiBmYWxzZVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYHN0cmAgVGhlIHN0cmluZyB0byB0ZXN0LlxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IGBwYXR0ZXJuc2AgT25lIG9yIG1vcmUgZ2xvYiBwYXR0ZXJucyB0byB1c2UgZm9yIG1hdGNoaW5nLlxuICogQHBhcmFtIHtPYmplY3R9IGBbb3B0aW9uc11gIFNlZSBhdmFpbGFibGUgW29wdGlvbnNdKCNvcHRpb25zKS5cbiAqIEByZXR1cm4ge0Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBhbnkgcGF0dGVybnMgbWF0Y2ggYHN0cmBcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubWljcm9tYXRjaC5pc01hdGNoID0gKHN0ciwgcGF0dGVybnMsIG9wdGlvbnMpID0+IHBpY29tYXRjaChwYXR0ZXJucywgb3B0aW9ucykoc3RyKTtcblxuLyoqXG4gKiBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICovXG5cbm1pY3JvbWF0Y2guYW55ID0gbWljcm9tYXRjaC5pc01hdGNoO1xuXG4vKipcbiAqIFJldHVybnMgYSBsaXN0IG9mIHN0cmluZ3MgdGhhdCBfKipkbyBub3QgbWF0Y2ggYW55KipfIG9mIHRoZSBnaXZlbiBgcGF0dGVybnNgLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBtbSA9IHJlcXVpcmUoJ21pY3JvbWF0Y2gnKTtcbiAqIC8vIG1tLm5vdChsaXN0LCBwYXR0ZXJuc1ssIG9wdGlvbnNdKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhtbS5ub3QoWydhLmEnLCAnYi5iJywgJ2MuYyddLCAnKi5hJykpO1xuICogLy89PiBbJ2IuYicsICdjLmMnXVxuICogYGBgXG4gKiBAcGFyYW0ge0FycmF5fSBgbGlzdGAgQXJyYXkgb2Ygc3RyaW5ncyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBgcGF0dGVybnNgIE9uZSBvciBtb3JlIGdsb2IgcGF0dGVybiB0byB1c2UgZm9yIG1hdGNoaW5nLlxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYCBTZWUgYXZhaWxhYmxlIFtvcHRpb25zXSgjb3B0aW9ucykgZm9yIGNoYW5naW5nIGhvdyBtYXRjaGVzIGFyZSBwZXJmb3JtZWRcbiAqIEByZXR1cm4ge0FycmF5fSBSZXR1cm5zIGFuIGFycmF5IG9mIHN0cmluZ3MgdGhhdCAqKmRvIG5vdCBtYXRjaCoqIHRoZSBnaXZlbiBwYXR0ZXJucy5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxubWljcm9tYXRjaC5ub3QgPSAobGlzdCwgcGF0dGVybnMsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBwYXR0ZXJucyA9IFtdLmNvbmNhdChwYXR0ZXJucykubWFwKFN0cmluZyk7XG4gIGxldCByZXN1bHQgPSBuZXcgU2V0KCk7XG4gIGxldCBpdGVtcyA9IFtdO1xuXG4gIGxldCBvblJlc3VsdCA9IHN0YXRlID0+IHtcbiAgICBpZiAob3B0aW9ucy5vblJlc3VsdCkgb3B0aW9ucy5vblJlc3VsdChzdGF0ZSk7XG4gICAgaXRlbXMucHVzaChzdGF0ZS5vdXRwdXQpO1xuICB9O1xuXG4gIGxldCBtYXRjaGVzID0gbmV3IFNldChtaWNyb21hdGNoKGxpc3QsIHBhdHRlcm5zLCB7IC4uLm9wdGlvbnMsIG9uUmVzdWx0IH0pKTtcblxuICBmb3IgKGxldCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgaWYgKCFtYXRjaGVzLmhhcyhpdGVtKSkge1xuICAgICAgcmVzdWx0LmFkZChpdGVtKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFsuLi5yZXN1bHRdO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGBzdHJpbmdgIGNvbnRhaW5zIHRoZSBnaXZlbiBwYXR0ZXJuLiBTaW1pbGFyXG4gKiB0byBbLmlzTWF0Y2hdKCNpc01hdGNoKSBidXQgdGhlIHBhdHRlcm4gY2FuIG1hdGNoIGFueSBwYXJ0IG9mIHRoZSBzdHJpbmcuXG4gKlxuICogYGBganNcbiAqIHZhciBtbSA9IHJlcXVpcmUoJ21pY3JvbWF0Y2gnKTtcbiAqIC8vIG1tLmNvbnRhaW5zKHN0cmluZywgcGF0dGVyblssIG9wdGlvbnNdKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhtbS5jb250YWlucygnYWEvYmIvY2MnLCAnKmInKSk7XG4gKiAvLz0+IHRydWVcbiAqIGNvbnNvbGUubG9nKG1tLmNvbnRhaW5zKCdhYS9iYi9jYycsICcqZCcpKTtcbiAqIC8vPT4gZmFsc2VcbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBzdHJgIFRoZSBzdHJpbmcgdG8gbWF0Y2guXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gYHBhdHRlcm5zYCBHbG9iIHBhdHRlcm4gdG8gdXNlIGZvciBtYXRjaGluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2AgU2VlIGF2YWlsYWJsZSBbb3B0aW9uc10oI29wdGlvbnMpIGZvciBjaGFuZ2luZyBob3cgbWF0Y2hlcyBhcmUgcGVyZm9ybWVkXG4gKiBAcmV0dXJuIHtCb29sZWFufSBSZXR1cm5zIHRydWUgaWYgYW55IG9mIHRoZSBwYXR0ZXJucyBtYXRjaGVzIGFueSBwYXJ0IG9mIGBzdHJgLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5taWNyb21hdGNoLmNvbnRhaW5zID0gKHN0ciwgcGF0dGVybiwgb3B0aW9ucykgPT4ge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBhIHN0cmluZzogXCIke3V0aWwuaW5zcGVjdChzdHIpfVwiYCk7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShwYXR0ZXJuKSkge1xuICAgIHJldHVybiBwYXR0ZXJuLnNvbWUocCA9PiBtaWNyb21hdGNoLmNvbnRhaW5zKHN0ciwgcCwgb3B0aW9ucykpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJykge1xuICAgIGlmIChpc0VtcHR5U3RyaW5nKHN0cikgfHwgaXNFbXB0eVN0cmluZyhwYXR0ZXJuKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzdHIuaW5jbHVkZXMocGF0dGVybikgfHwgKHN0ci5zdGFydHNXaXRoKCcuLycpICYmIHN0ci5zbGljZSgyKS5pbmNsdWRlcyhwYXR0ZXJuKSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtaWNyb21hdGNoLmlzTWF0Y2goc3RyLCBwYXR0ZXJuLCB7IC4uLm9wdGlvbnMsIGNvbnRhaW5zOiB0cnVlIH0pO1xufTtcblxuLyoqXG4gKiBGaWx0ZXIgdGhlIGtleXMgb2YgdGhlIGdpdmVuIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBgZ2xvYmAgcGF0dGVyblxuICogYW5kIGBvcHRpb25zYC4gRG9lcyBub3QgYXR0ZW1wdCB0byBtYXRjaCBuZXN0ZWQga2V5cy4gSWYgeW91IG5lZWQgdGhpcyBmZWF0dXJlLFxuICogdXNlIFtnbG9iLW9iamVjdF1bXSBpbnN0ZWFkLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBtbSA9IHJlcXVpcmUoJ21pY3JvbWF0Y2gnKTtcbiAqIC8vIG1tLm1hdGNoS2V5cyhvYmplY3QsIHBhdHRlcm5zWywgb3B0aW9uc10pO1xuICpcbiAqIGNvbnN0IG9iaiA9IHsgYWE6ICdhJywgYWI6ICdiJywgYWM6ICdjJyB9O1xuICogY29uc29sZS5sb2cobW0ubWF0Y2hLZXlzKG9iaiwgJypiJykpO1xuICogLy89PiB7IGFiOiAnYicgfVxuICogYGBgXG4gKiBAcGFyYW0ge09iamVjdH0gYG9iamVjdGAgVGhlIG9iamVjdCB3aXRoIGtleXMgdG8gZmlsdGVyLlxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IGBwYXR0ZXJuc2AgT25lIG9yIG1vcmUgZ2xvYiBwYXR0ZXJucyB0byB1c2UgZm9yIG1hdGNoaW5nLlxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYCBTZWUgYXZhaWxhYmxlIFtvcHRpb25zXSgjb3B0aW9ucykgZm9yIGNoYW5naW5nIGhvdyBtYXRjaGVzIGFyZSBwZXJmb3JtZWRcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBvbmx5IGtleXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gcGF0dGVybnMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1pY3JvbWF0Y2gubWF0Y2hLZXlzID0gKG9iaiwgcGF0dGVybnMsIG9wdGlvbnMpID0+IHtcbiAgaWYgKCF1dGlscy5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCcpO1xuICB9XG4gIGxldCBrZXlzID0gbWljcm9tYXRjaChPYmplY3Qua2V5cyhvYmopLCBwYXR0ZXJucywgb3B0aW9ucyk7XG4gIGxldCByZXMgPSB7fTtcbiAgZm9yIChsZXQga2V5IG9mIGtleXMpIHJlc1trZXldID0gb2JqW2tleV07XG4gIHJldHVybiByZXM7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBzb21lIG9mIHRoZSBzdHJpbmdzIGluIHRoZSBnaXZlbiBgbGlzdGAgbWF0Y2ggYW55IG9mIHRoZSBnaXZlbiBnbG9iIGBwYXR0ZXJuc2AuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IG1tID0gcmVxdWlyZSgnbWljcm9tYXRjaCcpO1xuICogLy8gbW0uc29tZShsaXN0LCBwYXR0ZXJuc1ssIG9wdGlvbnNdKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhtbS5zb21lKFsnZm9vLmpzJywgJ2Jhci5qcyddLCBbJyouanMnLCAnIWZvby5qcyddKSk7XG4gKiAvLyB0cnVlXG4gKiBjb25zb2xlLmxvZyhtbS5zb21lKFsnZm9vLmpzJ10sIFsnKi5qcycsICchZm9vLmpzJ10pKTtcbiAqIC8vIGZhbHNlXG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBgbGlzdGAgVGhlIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzIHRvIHRlc3QuIFJldHVybnMgYXMgc29vbiBhcyB0aGUgZmlyc3QgbWF0Y2ggaXMgZm91bmQuXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gYHBhdHRlcm5zYCBPbmUgb3IgbW9yZSBnbG9iIHBhdHRlcm5zIHRvIHVzZSBmb3IgbWF0Y2hpbmcuXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgIFNlZSBhdmFpbGFibGUgW29wdGlvbnNdKCNvcHRpb25zKSBmb3IgY2hhbmdpbmcgaG93IG1hdGNoZXMgYXJlIHBlcmZvcm1lZFxuICogQHJldHVybiB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGFueSBgcGF0dGVybnNgIG1hdGNoZXMgYW55IG9mIHRoZSBzdHJpbmdzIGluIGBsaXN0YFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5taWNyb21hdGNoLnNvbWUgPSAobGlzdCwgcGF0dGVybnMsIG9wdGlvbnMpID0+IHtcbiAgbGV0IGl0ZW1zID0gW10uY29uY2F0KGxpc3QpO1xuXG4gIGZvciAobGV0IHBhdHRlcm4gb2YgW10uY29uY2F0KHBhdHRlcm5zKSkge1xuICAgIGxldCBpc01hdGNoID0gcGljb21hdGNoKFN0cmluZyhwYXR0ZXJuKSwgb3B0aW9ucyk7XG4gICAgaWYgKGl0ZW1zLnNvbWUoaXRlbSA9PiBpc01hdGNoKGl0ZW0pKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGV2ZXJ5IHN0cmluZyBpbiB0aGUgZ2l2ZW4gYGxpc3RgIG1hdGNoZXNcbiAqIGFueSBvZiB0aGUgZ2l2ZW4gZ2xvYiBgcGF0dGVybnNgLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBtbSA9IHJlcXVpcmUoJ21pY3JvbWF0Y2gnKTtcbiAqIC8vIG1tLmV2ZXJ5KGxpc3QsIHBhdHRlcm5zWywgb3B0aW9uc10pO1xuICpcbiAqIGNvbnNvbGUubG9nKG1tLmV2ZXJ5KCdmb28uanMnLCBbJ2Zvby5qcyddKSk7XG4gKiAvLyB0cnVlXG4gKiBjb25zb2xlLmxvZyhtbS5ldmVyeShbJ2Zvby5qcycsICdiYXIuanMnXSwgWycqLmpzJ10pKTtcbiAqIC8vIHRydWVcbiAqIGNvbnNvbGUubG9nKG1tLmV2ZXJ5KFsnZm9vLmpzJywgJ2Jhci5qcyddLCBbJyouanMnLCAnIWZvby5qcyddKSk7XG4gKiAvLyBmYWxzZVxuICogY29uc29sZS5sb2cobW0uZXZlcnkoWydmb28uanMnXSwgWycqLmpzJywgJyFmb28uanMnXSkpO1xuICogLy8gZmFsc2VcbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IGBsaXN0YCBUaGUgc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MgdG8gdGVzdC5cbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBgcGF0dGVybnNgIE9uZSBvciBtb3JlIGdsb2IgcGF0dGVybnMgdG8gdXNlIGZvciBtYXRjaGluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2AgU2VlIGF2YWlsYWJsZSBbb3B0aW9uc10oI29wdGlvbnMpIGZvciBjaGFuZ2luZyBob3cgbWF0Y2hlcyBhcmUgcGVyZm9ybWVkXG4gKiBAcmV0dXJuIHtCb29sZWFufSBSZXR1cm5zIHRydWUgaWYgYWxsIGBwYXR0ZXJuc2AgbWF0Y2hlcyBhbGwgb2YgdGhlIHN0cmluZ3MgaW4gYGxpc3RgXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1pY3JvbWF0Y2guZXZlcnkgPSAobGlzdCwgcGF0dGVybnMsIG9wdGlvbnMpID0+IHtcbiAgbGV0IGl0ZW1zID0gW10uY29uY2F0KGxpc3QpO1xuXG4gIGZvciAobGV0IHBhdHRlcm4gb2YgW10uY29uY2F0KHBhdHRlcm5zKSkge1xuICAgIGxldCBpc01hdGNoID0gcGljb21hdGNoKFN0cmluZyhwYXR0ZXJuKSwgb3B0aW9ucyk7XG4gICAgaWYgKCFpdGVtcy5ldmVyeShpdGVtID0+IGlzTWF0Y2goaXRlbSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgKiphbGwqKiBvZiB0aGUgZ2l2ZW4gYHBhdHRlcm5zYCBtYXRjaFxuICogdGhlIHNwZWNpZmllZCBzdHJpbmcuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IG1tID0gcmVxdWlyZSgnbWljcm9tYXRjaCcpO1xuICogLy8gbW0uYWxsKHN0cmluZywgcGF0dGVybnNbLCBvcHRpb25zXSk7XG4gKlxuICogY29uc29sZS5sb2cobW0uYWxsKCdmb28uanMnLCBbJ2Zvby5qcyddKSk7XG4gKiAvLyB0cnVlXG4gKlxuICogY29uc29sZS5sb2cobW0uYWxsKCdmb28uanMnLCBbJyouanMnLCAnIWZvby5qcyddKSk7XG4gKiAvLyBmYWxzZVxuICpcbiAqIGNvbnNvbGUubG9nKG1tLmFsbCgnZm9vLmpzJywgWycqLmpzJywgJ2Zvby5qcyddKSk7XG4gKiAvLyB0cnVlXG4gKlxuICogY29uc29sZS5sb2cobW0uYWxsKCdmb28uanMnLCBbJyouanMnLCAnZionLCAnKm8qJywgJypvLmpzJ10pKTtcbiAqIC8vIHRydWVcbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IGBzdHJgIFRoZSBzdHJpbmcgdG8gdGVzdC5cbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBgcGF0dGVybnNgIE9uZSBvciBtb3JlIGdsb2IgcGF0dGVybnMgdG8gdXNlIGZvciBtYXRjaGluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2AgU2VlIGF2YWlsYWJsZSBbb3B0aW9uc10oI29wdGlvbnMpIGZvciBjaGFuZ2luZyBob3cgbWF0Y2hlcyBhcmUgcGVyZm9ybWVkXG4gKiBAcmV0dXJuIHtCb29sZWFufSBSZXR1cm5zIHRydWUgaWYgYW55IHBhdHRlcm5zIG1hdGNoIGBzdHJgXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1pY3JvbWF0Y2guYWxsID0gKHN0ciwgcGF0dGVybnMsIG9wdGlvbnMpID0+IHtcbiAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgYSBzdHJpbmc6IFwiJHt1dGlsLmluc3BlY3Qoc3RyKX1cImApO1xuICB9XG5cbiAgcmV0dXJuIFtdLmNvbmNhdChwYXR0ZXJucykuZXZlcnkocCA9PiBwaWNvbWF0Y2gocCwgb3B0aW9ucykoc3RyKSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgbWF0Y2hlcyBjYXB0dXJlZCBieSBgcGF0dGVybmAgaW4gYHN0cmluZywgb3IgYG51bGxgIGlmIHRoZSBwYXR0ZXJuIGRpZCBub3QgbWF0Y2guXG4gKlxuICogYGBganNcbiAqIGNvbnN0IG1tID0gcmVxdWlyZSgnbWljcm9tYXRjaCcpO1xuICogLy8gbW0uY2FwdHVyZShwYXR0ZXJuLCBzdHJpbmdbLCBvcHRpb25zXSk7XG4gKlxuICogY29uc29sZS5sb2cobW0uY2FwdHVyZSgndGVzdC8qLmpzJywgJ3Rlc3QvZm9vLmpzJykpO1xuICogLy89PiBbJ2ZvbyddXG4gKiBjb25zb2xlLmxvZyhtbS5jYXB0dXJlKCd0ZXN0LyouanMnLCAnZm9vL2Jhci5jc3MnKSk7XG4gKiAvLz0+IG51bGxcbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBnbG9iYCBHbG9iIHBhdHRlcm4gdG8gdXNlIGZvciBtYXRjaGluZy5cbiAqIEBwYXJhbSB7U3RyaW5nfSBgaW5wdXRgIFN0cmluZyB0byBtYXRjaFxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYCBTZWUgYXZhaWxhYmxlIFtvcHRpb25zXSgjb3B0aW9ucykgZm9yIGNoYW5naW5nIGhvdyBtYXRjaGVzIGFyZSBwZXJmb3JtZWRcbiAqIEByZXR1cm4ge0FycmF5fG51bGx9IFJldHVybnMgYW4gYXJyYXkgb2YgY2FwdHVyZXMgaWYgdGhlIGlucHV0IG1hdGNoZXMgdGhlIGdsb2IgcGF0dGVybiwgb3RoZXJ3aXNlIGBudWxsYC5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxubWljcm9tYXRjaC5jYXB0dXJlID0gKGdsb2IsIGlucHV0LCBvcHRpb25zKSA9PiB7XG4gIGxldCBwb3NpeCA9IHV0aWxzLmlzV2luZG93cyhvcHRpb25zKTtcbiAgbGV0IHJlZ2V4ID0gcGljb21hdGNoLm1ha2VSZShTdHJpbmcoZ2xvYiksIHsgLi4ub3B0aW9ucywgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgbGV0IG1hdGNoID0gcmVnZXguZXhlYyhwb3NpeCA/IHV0aWxzLnRvUG9zaXhTbGFzaGVzKGlucHV0KSA6IGlucHV0KTtcblxuICBpZiAobWF0Y2gpIHtcbiAgICByZXR1cm4gbWF0Y2guc2xpY2UoMSkubWFwKHYgPT4gdiA9PT0gdm9pZCAwID8gJycgOiB2KTtcbiAgfVxufTtcblxuLyoqXG4gKiBDcmVhdGUgYSByZWd1bGFyIGV4cHJlc3Npb24gZnJvbSB0aGUgZ2l2ZW4gZ2xvYiBgcGF0dGVybmAuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IG1tID0gcmVxdWlyZSgnbWljcm9tYXRjaCcpO1xuICogLy8gbW0ubWFrZVJlKHBhdHRlcm5bLCBvcHRpb25zXSk7XG4gKlxuICogY29uc29sZS5sb2cobW0ubWFrZVJlKCcqLmpzJykpO1xuICogLy89PiAvXig/OihcXC5bXFxcXFxcL10pPyg/IVxcLikoPz0uKVteXFwvXSo/XFwuanMpJC9cbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBwYXR0ZXJuYCBBIGdsb2IgcGF0dGVybiB0byBjb252ZXJ0IHRvIHJlZ2V4LlxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYFxuICogQHJldHVybiB7UmVnRXhwfSBSZXR1cm5zIGEgcmVnZXggY3JlYXRlZCBmcm9tIHRoZSBnaXZlbiBwYXR0ZXJuLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5taWNyb21hdGNoLm1ha2VSZSA9ICguLi5hcmdzKSA9PiBwaWNvbWF0Y2gubWFrZVJlKC4uLmFyZ3MpO1xuXG4vKipcbiAqIFNjYW4gYSBnbG9iIHBhdHRlcm4gdG8gc2VwYXJhdGUgdGhlIHBhdHRlcm4gaW50byBzZWdtZW50cy4gVXNlZFxuICogYnkgdGhlIFtzcGxpdF0oI3NwbGl0KSBtZXRob2QuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IG1tID0gcmVxdWlyZSgnbWljcm9tYXRjaCcpO1xuICogY29uc3Qgc3RhdGUgPSBtbS5zY2FuKHBhdHRlcm5bLCBvcHRpb25zXSk7XG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfSBgcGF0dGVybmBcbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5taWNyb21hdGNoLnNjYW4gPSAoLi4uYXJncykgPT4gcGljb21hdGNoLnNjYW4oLi4uYXJncyk7XG5cbi8qKlxuICogUGFyc2UgYSBnbG9iIHBhdHRlcm4gdG8gY3JlYXRlIHRoZSBzb3VyY2Ugc3RyaW5nIGZvciBhIHJlZ3VsYXJcbiAqIGV4cHJlc3Npb24uXG4gKlxuICogYGBganNcbiAqIGNvbnN0IG1tID0gcmVxdWlyZSgnbWljcm9tYXRjaCcpO1xuICogY29uc3Qgc3RhdGUgPSBtbS5wYXJzZShwYXR0ZXJuWywgb3B0aW9uc10pO1xuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYGdsb2JgXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgXG4gKiBAcmV0dXJuIHtPYmplY3R9IFJldHVybnMgYW4gb2JqZWN0IHdpdGggdXNlZnVsIHByb3BlcnRpZXMgYW5kIG91dHB1dCB0byBiZSB1c2VkIGFzIHJlZ2V4IHNvdXJjZSBzdHJpbmcuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1pY3JvbWF0Y2gucGFyc2UgPSAocGF0dGVybnMsIG9wdGlvbnMpID0+IHtcbiAgbGV0IHJlcyA9IFtdO1xuICBmb3IgKGxldCBwYXR0ZXJuIG9mIFtdLmNvbmNhdChwYXR0ZXJucyB8fCBbXSkpIHtcbiAgICBmb3IgKGxldCBzdHIgb2YgYnJhY2VzKFN0cmluZyhwYXR0ZXJuKSwgb3B0aW9ucykpIHtcbiAgICAgIHJlcy5wdXNoKHBpY29tYXRjaC5wYXJzZShzdHIsIG9wdGlvbnMpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG5cbi8qKlxuICogUHJvY2VzcyB0aGUgZ2l2ZW4gYnJhY2UgYHBhdHRlcm5gLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB7IGJyYWNlcyB9ID0gcmVxdWlyZSgnbWljcm9tYXRjaCcpO1xuICogY29uc29sZS5sb2coYnJhY2VzKCdmb28ve2EsYixjfS9iYXInKSk7XG4gKiAvLz0+IFsgJ2Zvby8oYXxifGMpL2JhcicgXVxuICpcbiAqIGNvbnNvbGUubG9nKGJyYWNlcygnZm9vL3thLGIsY30vYmFyJywgeyBleHBhbmQ6IHRydWUgfSkpO1xuICogLy89PiBbICdmb28vYS9iYXInLCAnZm9vL2IvYmFyJywgJ2Zvby9jL2JhcicgXVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYHBhdHRlcm5gIFN0cmluZyB3aXRoIGJyYWNlIHBhdHRlcm4gdG8gcHJvY2Vzcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2AgQW55IFtvcHRpb25zXSgjb3B0aW9ucykgdG8gY2hhbmdlIGhvdyBleHBhbnNpb24gaXMgcGVyZm9ybWVkLiBTZWUgdGhlIFticmFjZXNdW10gbGlicmFyeSBmb3IgYWxsIGF2YWlsYWJsZSBvcHRpb25zLlxuICogQHJldHVybiB7QXJyYXl9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1pY3JvbWF0Y2guYnJhY2VzID0gKHBhdHRlcm4sIG9wdGlvbnMpID0+IHtcbiAgaWYgKHR5cGVvZiBwYXR0ZXJuICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYSBzdHJpbmcnKTtcbiAgaWYgKChvcHRpb25zICYmIG9wdGlvbnMubm9icmFjZSA9PT0gdHJ1ZSkgfHwgIS9cXHsuKlxcfS8udGVzdChwYXR0ZXJuKSkge1xuICAgIHJldHVybiBbcGF0dGVybl07XG4gIH1cbiAgcmV0dXJuIGJyYWNlcyhwYXR0ZXJuLCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogRXhwYW5kIGJyYWNlc1xuICovXG5cbm1pY3JvbWF0Y2guYnJhY2VFeHBhbmQgPSAocGF0dGVybiwgb3B0aW9ucykgPT4ge1xuICBpZiAodHlwZW9mIHBhdHRlcm4gIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhIHN0cmluZycpO1xuICByZXR1cm4gbWljcm9tYXRjaC5icmFjZXMocGF0dGVybiwgeyAuLi5vcHRpb25zLCBleHBhbmQ6IHRydWUgfSk7XG59O1xuXG4vKipcbiAqIEV4cG9zZSBtaWNyb21hdGNoXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBtaWNyb21hdGNoO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZW1vdmVEdXBsaWNhdGVTbGFzaGVzID0gZXhwb3J0cy5tYXRjaEFueSA9IGV4cG9ydHMuY29udmVydFBhdHRlcm5zVG9SZSA9IGV4cG9ydHMubWFrZVJlID0gZXhwb3J0cy5nZXRQYXR0ZXJuUGFydHMgPSBleHBvcnRzLmV4cGFuZEJyYWNlRXhwYW5zaW9uID0gZXhwb3J0cy5leHBhbmRQYXR0ZXJuc1dpdGhCcmFjZUV4cGFuc2lvbiA9IGV4cG9ydHMuaXNBZmZlY3REZXB0aE9mUmVhZGluZ1BhdHRlcm4gPSBleHBvcnRzLmVuZHNXaXRoU2xhc2hHbG9iU3RhciA9IGV4cG9ydHMuaGFzR2xvYlN0YXIgPSBleHBvcnRzLmdldEJhc2VEaXJlY3RvcnkgPSBleHBvcnRzLmlzUGF0dGVyblJlbGF0ZWRUb1BhcmVudERpcmVjdG9yeSA9IGV4cG9ydHMuZ2V0UGF0dGVybnNPdXRzaWRlQ3VycmVudERpcmVjdG9yeSA9IGV4cG9ydHMuZ2V0UGF0dGVybnNJbnNpZGVDdXJyZW50RGlyZWN0b3J5ID0gZXhwb3J0cy5nZXRQb3NpdGl2ZVBhdHRlcm5zID0gZXhwb3J0cy5nZXROZWdhdGl2ZVBhdHRlcm5zID0gZXhwb3J0cy5pc1Bvc2l0aXZlUGF0dGVybiA9IGV4cG9ydHMuaXNOZWdhdGl2ZVBhdHRlcm4gPSBleHBvcnRzLmNvbnZlcnRUb05lZ2F0aXZlUGF0dGVybiA9IGV4cG9ydHMuY29udmVydFRvUG9zaXRpdmVQYXR0ZXJuID0gZXhwb3J0cy5pc0R5bmFtaWNQYXR0ZXJuID0gZXhwb3J0cy5pc1N0YXRpY1BhdHRlcm4gPSB2b2lkIDA7XG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XG5jb25zdCBnbG9iUGFyZW50ID0gcmVxdWlyZShcImdsb2ItcGFyZW50XCIpO1xuY29uc3QgbWljcm9tYXRjaCA9IHJlcXVpcmUoXCJtaWNyb21hdGNoXCIpO1xuY29uc3QgR0xPQlNUQVIgPSAnKionO1xuY29uc3QgRVNDQVBFX1NZTUJPTCA9ICdcXFxcJztcbmNvbnN0IENPTU1PTl9HTE9CX1NZTUJPTFNfUkUgPSAvWyo/XXxeIS87XG5jb25zdCBSRUdFWF9DSEFSQUNURVJfQ0xBU1NfU1lNQk9MU19SRSA9IC9cXFtbXltdKl0vO1xuY29uc3QgUkVHRVhfR1JPVVBfU1lNQk9MU19SRSA9IC8oPzpefFteISorP0BdKVxcKFteKF0qXFx8W158XSpcXCkvO1xuY29uc3QgR0xPQl9FWFRFTlNJT05fU1lNQk9MU19SRSA9IC9bISorP0BdXFwoW14oXSpcXCkvO1xuY29uc3QgQlJBQ0VfRVhQQU5TSU9OX1NFUEFSQVRPUlNfUkUgPSAvLHxcXC5cXC4vO1xuLyoqXG4gKiBNYXRjaGVzIGEgc2VxdWVuY2Ugb2YgdHdvIG9yIG1vcmUgY29uc2VjdXRpdmUgc2xhc2hlcywgZXhjbHVkaW5nIHRoZSBmaXJzdCB0d28gc2xhc2hlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcuXG4gKiBUaGUgbGF0dGVyIGlzIGR1ZSB0byB0aGUgcHJlc2VuY2Ugb2YgdGhlIGRldmljZSBwYXRoIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIFVOQyBwYXRoLlxuICovXG5jb25zdCBET1VCTEVfU0xBU0hfUkUgPSAvKD8hXilcXC97Mix9L2c7XG5mdW5jdGlvbiBpc1N0YXRpY1BhdHRlcm4ocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuICFpc0R5bmFtaWNQYXR0ZXJuKHBhdHRlcm4sIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5pc1N0YXRpY1BhdHRlcm4gPSBpc1N0YXRpY1BhdHRlcm47XG5mdW5jdGlvbiBpc0R5bmFtaWNQYXR0ZXJuKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbCBjYXNlIHdpdGggYW4gZW1wdHkgc3RyaW5nIGlzIG5lY2Vzc2FyeSBmb3IgbWF0Y2hpbmcgcGF0dGVybnMgdGhhdCBzdGFydCB3aXRoIGEgZm9yd2FyZCBzbGFzaC5cbiAgICAgKiBBbiBlbXB0eSBzdHJpbmcgY2Fubm90IGJlIGEgZHluYW1pYyBwYXR0ZXJuLlxuICAgICAqIEZvciBleGFtcGxlLCB0aGUgcGF0dGVybiBgL2xpYi8qYCB3aWxsIGJlIHNwcmVhZCBpbnRvIHBhcnRzOiAnJywgJ2xpYicsICcqJy5cbiAgICAgKi9cbiAgICBpZiAocGF0dGVybiA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXaGVuIHRoZSBgY2FzZVNlbnNpdGl2ZU1hdGNoYCBvcHRpb24gaXMgZGlzYWJsZWQsIGFsbCBwYXR0ZXJucyBtdXN0IGJlIG1hcmtlZCBhcyBkeW5hbWljLCBiZWNhdXNlIHdlIGNhbm5vdCBjaGVja1xuICAgICAqIGZpbGVwYXRoIGRpcmVjdGx5ICh3aXRob3V0IHJlYWQgZGlyZWN0b3J5KS5cbiAgICAgKi9cbiAgICBpZiAob3B0aW9ucy5jYXNlU2Vuc2l0aXZlTWF0Y2ggPT09IGZhbHNlIHx8IHBhdHRlcm4uaW5jbHVkZXMoRVNDQVBFX1NZTUJPTCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChDT01NT05fR0xPQl9TWU1CT0xTX1JFLnRlc3QocGF0dGVybikgfHwgUkVHRVhfQ0hBUkFDVEVSX0NMQVNTX1NZTUJPTFNfUkUudGVzdChwYXR0ZXJuKSB8fCBSRUdFWF9HUk9VUF9TWU1CT0xTX1JFLnRlc3QocGF0dGVybikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmV4dGdsb2IgIT09IGZhbHNlICYmIEdMT0JfRVhURU5TSU9OX1NZTUJPTFNfUkUudGVzdChwYXR0ZXJuKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuYnJhY2VFeHBhbnNpb24gIT09IGZhbHNlICYmIGhhc0JyYWNlRXhwYW5zaW9uKHBhdHRlcm4pKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnRzLmlzRHluYW1pY1BhdHRlcm4gPSBpc0R5bmFtaWNQYXR0ZXJuO1xuZnVuY3Rpb24gaGFzQnJhY2VFeHBhbnNpb24ocGF0dGVybikge1xuICAgIGNvbnN0IG9wZW5pbmdCcmFjZUluZGV4ID0gcGF0dGVybi5pbmRleE9mKCd7Jyk7XG4gICAgaWYgKG9wZW5pbmdCcmFjZUluZGV4ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGNsb3NpbmdCcmFjZUluZGV4ID0gcGF0dGVybi5pbmRleE9mKCd9Jywgb3BlbmluZ0JyYWNlSW5kZXggKyAxKTtcbiAgICBpZiAoY2xvc2luZ0JyYWNlSW5kZXggPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgYnJhY2VDb250ZW50ID0gcGF0dGVybi5zbGljZShvcGVuaW5nQnJhY2VJbmRleCwgY2xvc2luZ0JyYWNlSW5kZXgpO1xuICAgIHJldHVybiBCUkFDRV9FWFBBTlNJT05fU0VQQVJBVE9SU19SRS50ZXN0KGJyYWNlQ29udGVudCk7XG59XG5mdW5jdGlvbiBjb252ZXJ0VG9Qb3NpdGl2ZVBhdHRlcm4ocGF0dGVybikge1xuICAgIHJldHVybiBpc05lZ2F0aXZlUGF0dGVybihwYXR0ZXJuKSA/IHBhdHRlcm4uc2xpY2UoMSkgOiBwYXR0ZXJuO1xufVxuZXhwb3J0cy5jb252ZXJ0VG9Qb3NpdGl2ZVBhdHRlcm4gPSBjb252ZXJ0VG9Qb3NpdGl2ZVBhdHRlcm47XG5mdW5jdGlvbiBjb252ZXJ0VG9OZWdhdGl2ZVBhdHRlcm4ocGF0dGVybikge1xuICAgIHJldHVybiAnIScgKyBwYXR0ZXJuO1xufVxuZXhwb3J0cy5jb252ZXJ0VG9OZWdhdGl2ZVBhdHRlcm4gPSBjb252ZXJ0VG9OZWdhdGl2ZVBhdHRlcm47XG5mdW5jdGlvbiBpc05lZ2F0aXZlUGF0dGVybihwYXR0ZXJuKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4uc3RhcnRzV2l0aCgnIScpICYmIHBhdHRlcm5bMV0gIT09ICcoJztcbn1cbmV4cG9ydHMuaXNOZWdhdGl2ZVBhdHRlcm4gPSBpc05lZ2F0aXZlUGF0dGVybjtcbmZ1bmN0aW9uIGlzUG9zaXRpdmVQYXR0ZXJuKHBhdHRlcm4pIHtcbiAgICByZXR1cm4gIWlzTmVnYXRpdmVQYXR0ZXJuKHBhdHRlcm4pO1xufVxuZXhwb3J0cy5pc1Bvc2l0aXZlUGF0dGVybiA9IGlzUG9zaXRpdmVQYXR0ZXJuO1xuZnVuY3Rpb24gZ2V0TmVnYXRpdmVQYXR0ZXJucyhwYXR0ZXJucykge1xuICAgIHJldHVybiBwYXR0ZXJucy5maWx0ZXIoaXNOZWdhdGl2ZVBhdHRlcm4pO1xufVxuZXhwb3J0cy5nZXROZWdhdGl2ZVBhdHRlcm5zID0gZ2V0TmVnYXRpdmVQYXR0ZXJucztcbmZ1bmN0aW9uIGdldFBvc2l0aXZlUGF0dGVybnMocGF0dGVybnMpIHtcbiAgICByZXR1cm4gcGF0dGVybnMuZmlsdGVyKGlzUG9zaXRpdmVQYXR0ZXJuKTtcbn1cbmV4cG9ydHMuZ2V0UG9zaXRpdmVQYXR0ZXJucyA9IGdldFBvc2l0aXZlUGF0dGVybnM7XG4vKipcbiAqIFJldHVybnMgcGF0dGVybnMgdGhhdCBjYW4gYmUgYXBwbGllZCBpbnNpZGUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBbJy4vKicsICcqJywgJ2EvKiddXG4gKiBnZXRQYXR0ZXJuc0luc2lkZUN1cnJlbnREaXJlY3RvcnkoWycuLyonLCAnKicsICdhLyonLCAnLi4vKicsICcuLy4uLyonXSlcbiAqL1xuZnVuY3Rpb24gZ2V0UGF0dGVybnNJbnNpZGVDdXJyZW50RGlyZWN0b3J5KHBhdHRlcm5zKSB7XG4gICAgcmV0dXJuIHBhdHRlcm5zLmZpbHRlcigocGF0dGVybikgPT4gIWlzUGF0dGVyblJlbGF0ZWRUb1BhcmVudERpcmVjdG9yeShwYXR0ZXJuKSk7XG59XG5leHBvcnRzLmdldFBhdHRlcm5zSW5zaWRlQ3VycmVudERpcmVjdG9yeSA9IGdldFBhdHRlcm5zSW5zaWRlQ3VycmVudERpcmVjdG9yeTtcbi8qKlxuICogUmV0dXJucyBwYXR0ZXJucyB0byBiZSBleHBhbmRlZCByZWxhdGl2ZSB0byAob3V0c2lkZSkgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBbJy4uLyonLCAnLi8uLi8qJ11cbiAqIGdldFBhdHRlcm5zSW5zaWRlQ3VycmVudERpcmVjdG9yeShbJy4vKicsICcqJywgJ2EvKicsICcuLi8qJywgJy4vLi4vKiddKVxuICovXG5mdW5jdGlvbiBnZXRQYXR0ZXJuc091dHNpZGVDdXJyZW50RGlyZWN0b3J5KHBhdHRlcm5zKSB7XG4gICAgcmV0dXJuIHBhdHRlcm5zLmZpbHRlcihpc1BhdHRlcm5SZWxhdGVkVG9QYXJlbnREaXJlY3RvcnkpO1xufVxuZXhwb3J0cy5nZXRQYXR0ZXJuc091dHNpZGVDdXJyZW50RGlyZWN0b3J5ID0gZ2V0UGF0dGVybnNPdXRzaWRlQ3VycmVudERpcmVjdG9yeTtcbmZ1bmN0aW9uIGlzUGF0dGVyblJlbGF0ZWRUb1BhcmVudERpcmVjdG9yeShwYXR0ZXJuKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4uc3RhcnRzV2l0aCgnLi4nKSB8fCBwYXR0ZXJuLnN0YXJ0c1dpdGgoJy4vLi4nKTtcbn1cbmV4cG9ydHMuaXNQYXR0ZXJuUmVsYXRlZFRvUGFyZW50RGlyZWN0b3J5ID0gaXNQYXR0ZXJuUmVsYXRlZFRvUGFyZW50RGlyZWN0b3J5O1xuZnVuY3Rpb24gZ2V0QmFzZURpcmVjdG9yeShwYXR0ZXJuKSB7XG4gICAgcmV0dXJuIGdsb2JQYXJlbnQocGF0dGVybiwgeyBmbGlwQmFja3NsYXNoZXM6IGZhbHNlIH0pO1xufVxuZXhwb3J0cy5nZXRCYXNlRGlyZWN0b3J5ID0gZ2V0QmFzZURpcmVjdG9yeTtcbmZ1bmN0aW9uIGhhc0dsb2JTdGFyKHBhdHRlcm4pIHtcbiAgICByZXR1cm4gcGF0dGVybi5pbmNsdWRlcyhHTE9CU1RBUik7XG59XG5leHBvcnRzLmhhc0dsb2JTdGFyID0gaGFzR2xvYlN0YXI7XG5mdW5jdGlvbiBlbmRzV2l0aFNsYXNoR2xvYlN0YXIocGF0dGVybikge1xuICAgIHJldHVybiBwYXR0ZXJuLmVuZHNXaXRoKCcvJyArIEdMT0JTVEFSKTtcbn1cbmV4cG9ydHMuZW5kc1dpdGhTbGFzaEdsb2JTdGFyID0gZW5kc1dpdGhTbGFzaEdsb2JTdGFyO1xuZnVuY3Rpb24gaXNBZmZlY3REZXB0aE9mUmVhZGluZ1BhdHRlcm4ocGF0dGVybikge1xuICAgIGNvbnN0IGJhc2VuYW1lID0gcGF0aC5iYXNlbmFtZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gZW5kc1dpdGhTbGFzaEdsb2JTdGFyKHBhdHRlcm4pIHx8IGlzU3RhdGljUGF0dGVybihiYXNlbmFtZSk7XG59XG5leHBvcnRzLmlzQWZmZWN0RGVwdGhPZlJlYWRpbmdQYXR0ZXJuID0gaXNBZmZlY3REZXB0aE9mUmVhZGluZ1BhdHRlcm47XG5mdW5jdGlvbiBleHBhbmRQYXR0ZXJuc1dpdGhCcmFjZUV4cGFuc2lvbihwYXR0ZXJucykge1xuICAgIHJldHVybiBwYXR0ZXJucy5yZWR1Y2UoKGNvbGxlY3Rpb24sIHBhdHRlcm4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb24uY29uY2F0KGV4cGFuZEJyYWNlRXhwYW5zaW9uKHBhdHRlcm4pKTtcbiAgICB9LCBbXSk7XG59XG5leHBvcnRzLmV4cGFuZFBhdHRlcm5zV2l0aEJyYWNlRXhwYW5zaW9uID0gZXhwYW5kUGF0dGVybnNXaXRoQnJhY2VFeHBhbnNpb247XG5mdW5jdGlvbiBleHBhbmRCcmFjZUV4cGFuc2lvbihwYXR0ZXJuKSB7XG4gICAgY29uc3QgcGF0dGVybnMgPSBtaWNyb21hdGNoLmJyYWNlcyhwYXR0ZXJuLCB7IGV4cGFuZDogdHJ1ZSwgbm9kdXBlczogdHJ1ZSB9KTtcbiAgICAvKipcbiAgICAgKiBTb3J0IHRoZSBwYXR0ZXJucyBieSBsZW5ndGggc28gdGhhdCB0aGUgc2FtZSBkZXB0aCBwYXR0ZXJucyBhcmUgcHJvY2Vzc2VkIHNpZGUgYnkgc2lkZS5cbiAgICAgKiBgYS97Yix9L3tjLH0vKmAgXHUyMDEzIGBbJ2EvLy8qJywgJ2EvYi8vKicsICdhLy9jLyonLCAnYS9iL2MvKiddYFxuICAgICAqL1xuICAgIHBhdHRlcm5zLnNvcnQoKGEsIGIpID0+IGEubGVuZ3RoIC0gYi5sZW5ndGgpO1xuICAgIC8qKlxuICAgICAqIE1pY3JvbWF0Y2ggY2FuIHJldHVybiBhbiBlbXB0eSBzdHJpbmcgaW4gdGhlIGNhc2Ugb2YgcGF0dGVybnMgbGlrZSBge2EsfWAuXG4gICAgICovXG4gICAgcmV0dXJuIHBhdHRlcm5zLmZpbHRlcigocGF0dGVybikgPT4gcGF0dGVybiAhPT0gJycpO1xufVxuZXhwb3J0cy5leHBhbmRCcmFjZUV4cGFuc2lvbiA9IGV4cGFuZEJyYWNlRXhwYW5zaW9uO1xuZnVuY3Rpb24gZ2V0UGF0dGVyblBhcnRzKHBhdHRlcm4sIG9wdGlvbnMpIHtcbiAgICBsZXQgeyBwYXJ0cyB9ID0gbWljcm9tYXRjaC5zY2FuKHBhdHRlcm4sIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgcGFydHM6IHRydWUgfSkpO1xuICAgIC8qKlxuICAgICAqIFRoZSBzY2FuIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IGFycmF5IGluIHNvbWUgY2FzZXMuXG4gICAgICogU2VlIG1pY3JvbWF0Y2gvcGljb21hdGNoIzU4IGZvciBtb3JlIGRldGFpbHMuXG4gICAgICovXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBwYXJ0cyA9IFtwYXR0ZXJuXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHNjYW4gbWV0aG9kIGRvZXMgbm90IHJldHVybiBhbiBlbXB0eSBwYXJ0IGZvciB0aGUgcGF0dGVybiB3aXRoIGEgZm9yd2FyZCBzbGFzaC5cbiAgICAgKiBUaGlzIGlzIGFub3RoZXIgcGFydCBvZiBtaWNyb21hdGNoL3BpY29tYXRjaCM1OC5cbiAgICAgKi9cbiAgICBpZiAocGFydHNbMF0uc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgIHBhcnRzWzBdID0gcGFydHNbMF0uc2xpY2UoMSk7XG4gICAgICAgIHBhcnRzLnVuc2hpZnQoJycpO1xuICAgIH1cbiAgICByZXR1cm4gcGFydHM7XG59XG5leHBvcnRzLmdldFBhdHRlcm5QYXJ0cyA9IGdldFBhdHRlcm5QYXJ0cztcbmZ1bmN0aW9uIG1ha2VSZShwYXR0ZXJuLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG1pY3JvbWF0Y2gubWFrZVJlKHBhdHRlcm4sIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5tYWtlUmUgPSBtYWtlUmU7XG5mdW5jdGlvbiBjb252ZXJ0UGF0dGVybnNUb1JlKHBhdHRlcm5zLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHBhdHRlcm5zLm1hcCgocGF0dGVybikgPT4gbWFrZVJlKHBhdHRlcm4sIG9wdGlvbnMpKTtcbn1cbmV4cG9ydHMuY29udmVydFBhdHRlcm5zVG9SZSA9IGNvbnZlcnRQYXR0ZXJuc1RvUmU7XG5mdW5jdGlvbiBtYXRjaEFueShlbnRyeSwgcGF0dGVybnNSZSkge1xuICAgIHJldHVybiBwYXR0ZXJuc1JlLnNvbWUoKHBhdHRlcm5SZSkgPT4gcGF0dGVyblJlLnRlc3QoZW50cnkpKTtcbn1cbmV4cG9ydHMubWF0Y2hBbnkgPSBtYXRjaEFueTtcbi8qKlxuICogVGhpcyBwYWNrYWdlIG9ubHkgd29ya3Mgd2l0aCBmb3J3YXJkIHNsYXNoZXMgYXMgYSBwYXRoIHNlcGFyYXRvci5cbiAqIEJlY2F1c2Ugb2YgdGhpcywgd2UgY2Fubm90IHVzZSB0aGUgc3RhbmRhcmQgYHBhdGgubm9ybWFsaXplYCBtZXRob2QsIGJlY2F1c2Ugb24gV2luZG93cyBwbGF0Zm9ybSBpdCB3aWxsIHVzZSBvZiBiYWNrc2xhc2hlcy5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRHVwbGljYXRlU2xhc2hlcyhwYXR0ZXJuKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4ucmVwbGFjZShET1VCTEVfU0xBU0hfUkUsICcvJyk7XG59XG5leHBvcnRzLnJlbW92ZUR1cGxpY2F0ZVNsYXNoZXMgPSByZW1vdmVEdXBsaWNhdGVTbGFzaGVzO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tZXJnZSA9IHZvaWQgMDtcbmNvbnN0IG1lcmdlMiA9IHJlcXVpcmUoXCJtZXJnZTJcIik7XG5mdW5jdGlvbiBtZXJnZShzdHJlYW1zKSB7XG4gICAgY29uc3QgbWVyZ2VkU3RyZWFtID0gbWVyZ2UyKHN0cmVhbXMpO1xuICAgIHN0cmVhbXMuZm9yRWFjaCgoc3RyZWFtKSA9PiB7XG4gICAgICAgIHN0cmVhbS5vbmNlKCdlcnJvcicsIChlcnJvcikgPT4gbWVyZ2VkU3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyb3IpKTtcbiAgICB9KTtcbiAgICBtZXJnZWRTdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiBwcm9wYWdhdGVDbG9zZUV2ZW50VG9Tb3VyY2VzKHN0cmVhbXMpKTtcbiAgICBtZXJnZWRTdHJlYW0ub25jZSgnZW5kJywgKCkgPT4gcHJvcGFnYXRlQ2xvc2VFdmVudFRvU291cmNlcyhzdHJlYW1zKSk7XG4gICAgcmV0dXJuIG1lcmdlZFN0cmVhbTtcbn1cbmV4cG9ydHMubWVyZ2UgPSBtZXJnZTtcbmZ1bmN0aW9uIHByb3BhZ2F0ZUNsb3NlRXZlbnRUb1NvdXJjZXMoc3RyZWFtcykge1xuICAgIHN0cmVhbXMuZm9yRWFjaCgoc3RyZWFtKSA9PiBzdHJlYW0uZW1pdCgnY2xvc2UnKSk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzRW1wdHkgPSBleHBvcnRzLmlzU3RyaW5nID0gdm9pZCAwO1xuZnVuY3Rpb24gaXNTdHJpbmcoaW5wdXQpIHtcbiAgICByZXR1cm4gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJztcbn1cbmV4cG9ydHMuaXNTdHJpbmcgPSBpc1N0cmluZztcbmZ1bmN0aW9uIGlzRW1wdHkoaW5wdXQpIHtcbiAgICByZXR1cm4gaW5wdXQgPT09ICcnO1xufVxuZXhwb3J0cy5pc0VtcHR5ID0gaXNFbXB0eTtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RyaW5nID0gZXhwb3J0cy5zdHJlYW0gPSBleHBvcnRzLnBhdHRlcm4gPSBleHBvcnRzLnBhdGggPSBleHBvcnRzLmZzID0gZXhwb3J0cy5lcnJubyA9IGV4cG9ydHMuYXJyYXkgPSB2b2lkIDA7XG5jb25zdCBhcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5XCIpO1xuZXhwb3J0cy5hcnJheSA9IGFycmF5O1xuY29uc3QgZXJybm8gPSByZXF1aXJlKFwiLi9lcnJub1wiKTtcbmV4cG9ydHMuZXJybm8gPSBlcnJubztcbmNvbnN0IGZzID0gcmVxdWlyZShcIi4vZnNcIik7XG5leHBvcnRzLmZzID0gZnM7XG5jb25zdCBwYXRoID0gcmVxdWlyZShcIi4vcGF0aFwiKTtcbmV4cG9ydHMucGF0aCA9IHBhdGg7XG5jb25zdCBwYXR0ZXJuID0gcmVxdWlyZShcIi4vcGF0dGVyblwiKTtcbmV4cG9ydHMucGF0dGVybiA9IHBhdHRlcm47XG5jb25zdCBzdHJlYW0gPSByZXF1aXJlKFwiLi9zdHJlYW1cIik7XG5leHBvcnRzLnN0cmVhbSA9IHN0cmVhbTtcbmNvbnN0IHN0cmluZyA9IHJlcXVpcmUoXCIuL3N0cmluZ1wiKTtcbmV4cG9ydHMuc3RyaW5nID0gc3RyaW5nO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb252ZXJ0UGF0dGVybkdyb3VwVG9UYXNrID0gZXhwb3J0cy5jb252ZXJ0UGF0dGVybkdyb3Vwc1RvVGFza3MgPSBleHBvcnRzLmdyb3VwUGF0dGVybnNCeUJhc2VEaXJlY3RvcnkgPSBleHBvcnRzLmdldE5lZ2F0aXZlUGF0dGVybnNBc1Bvc2l0aXZlID0gZXhwb3J0cy5nZXRQb3NpdGl2ZVBhdHRlcm5zID0gZXhwb3J0cy5jb252ZXJ0UGF0dGVybnNUb1Rhc2tzID0gZXhwb3J0cy5nZW5lcmF0ZSA9IHZvaWQgMDtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpO1xuZnVuY3Rpb24gZ2VuZXJhdGUoaW5wdXQsIHNldHRpbmdzKSB7XG4gICAgY29uc3QgcGF0dGVybnMgPSBwcm9jZXNzUGF0dGVybnMoaW5wdXQsIHNldHRpbmdzKTtcbiAgICBjb25zdCBpZ25vcmUgPSBwcm9jZXNzUGF0dGVybnMoc2V0dGluZ3MuaWdub3JlLCBzZXR0aW5ncyk7XG4gICAgY29uc3QgcG9zaXRpdmVQYXR0ZXJucyA9IGdldFBvc2l0aXZlUGF0dGVybnMocGF0dGVybnMpO1xuICAgIGNvbnN0IG5lZ2F0aXZlUGF0dGVybnMgPSBnZXROZWdhdGl2ZVBhdHRlcm5zQXNQb3NpdGl2ZShwYXR0ZXJucywgaWdub3JlKTtcbiAgICBjb25zdCBzdGF0aWNQYXR0ZXJucyA9IHBvc2l0aXZlUGF0dGVybnMuZmlsdGVyKChwYXR0ZXJuKSA9PiB1dGlscy5wYXR0ZXJuLmlzU3RhdGljUGF0dGVybihwYXR0ZXJuLCBzZXR0aW5ncykpO1xuICAgIGNvbnN0IGR5bmFtaWNQYXR0ZXJucyA9IHBvc2l0aXZlUGF0dGVybnMuZmlsdGVyKChwYXR0ZXJuKSA9PiB1dGlscy5wYXR0ZXJuLmlzRHluYW1pY1BhdHRlcm4ocGF0dGVybiwgc2V0dGluZ3MpKTtcbiAgICBjb25zdCBzdGF0aWNUYXNrcyA9IGNvbnZlcnRQYXR0ZXJuc1RvVGFza3Moc3RhdGljUGF0dGVybnMsIG5lZ2F0aXZlUGF0dGVybnMsIC8qIGR5bmFtaWMgKi8gZmFsc2UpO1xuICAgIGNvbnN0IGR5bmFtaWNUYXNrcyA9IGNvbnZlcnRQYXR0ZXJuc1RvVGFza3MoZHluYW1pY1BhdHRlcm5zLCBuZWdhdGl2ZVBhdHRlcm5zLCAvKiBkeW5hbWljICovIHRydWUpO1xuICAgIHJldHVybiBzdGF0aWNUYXNrcy5jb25jYXQoZHluYW1pY1Rhc2tzKTtcbn1cbmV4cG9ydHMuZ2VuZXJhdGUgPSBnZW5lcmF0ZTtcbmZ1bmN0aW9uIHByb2Nlc3NQYXR0ZXJucyhpbnB1dCwgc2V0dGluZ3MpIHtcbiAgICBsZXQgcGF0dGVybnMgPSBpbnB1dDtcbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwgcGF0dGVybiBsaWtlIGB7LCosKiosYS8qfWAgY2FuIGxlYWQgdG8gcHJvYmxlbXMgY2hlY2tpbmcgdGhlIGRlcHRoIHdoZW4gbWF0Y2hpbmcgZW50cnlcbiAgICAgKiBhbmQgc29tZSBwcm9ibGVtcyB3aXRoIHRoZSBtaWNyb21hdGNoIHBhY2thZ2UgKHNlZSBmYXN0LWdsb2IgaXNzdWVzOiAjMzY1LCAjMzk0KS5cbiAgICAgKlxuICAgICAqIFRvIHNvbHZlIHRoaXMgcHJvYmxlbSwgd2UgZXhwYW5kIGFsbCBwYXR0ZXJucyBjb250YWluaW5nIGJyYWNlIGV4cGFuc2lvbi4gVGhpcyBjYW4gbGVhZCB0byBhIHNsaWdodCBzbG93ZG93blxuICAgICAqIGluIG1hdGNoaW5nIGluIHRoZSBjYXNlIG9mIGEgbGFyZ2Ugc2V0IG9mIHBhdHRlcm5zIGFmdGVyIGV4cGFuc2lvbi5cbiAgICAgKi9cbiAgICBpZiAoc2V0dGluZ3MuYnJhY2VFeHBhbnNpb24pIHtcbiAgICAgICAgcGF0dGVybnMgPSB1dGlscy5wYXR0ZXJuLmV4cGFuZFBhdHRlcm5zV2l0aEJyYWNlRXhwYW5zaW9uKHBhdHRlcm5zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgdGhlIGBiYXNlTmFtZU1hdGNoYCBvcHRpb24gaXMgZW5hYmxlZCwgd2UgbXVzdCBhZGQgZ2xvYnN0YXIgdG8gcGF0dGVybnMsIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZFxuICAgICAqIGF0IGFueSBuZXN0aW5nIGxldmVsLlxuICAgICAqXG4gICAgICogV2UgZG8gdGhpcyBoZXJlLCBiZWNhdXNlIG90aGVyd2lzZSB3ZSBoYXZlIHRvIGNvbXBsaWNhdGUgdGhlIGZpbHRlcmluZyBsb2dpYy4gRm9yIGV4YW1wbGUsIHdlIG5lZWQgdG8gY2hhbmdlXG4gICAgICogdGhlIHBhdHRlcm4gaW4gdGhlIGZpbHRlciBiZWZvcmUgY3JlYXRpbmcgYSByZWd1bGFyIGV4cHJlc3Npb24uIFRoZXJlIGlzIG5vIG5lZWQgdG8gY2hhbmdlIHRoZSBwYXR0ZXJuc1xuICAgICAqIGluIHRoZSBhcHBsaWNhdGlvbi4gT25seSBvbiB0aGUgaW5wdXQuXG4gICAgICovXG4gICAgaWYgKHNldHRpbmdzLmJhc2VOYW1lTWF0Y2gpIHtcbiAgICAgICAgcGF0dGVybnMgPSBwYXR0ZXJucy5tYXAoKHBhdHRlcm4pID0+IHBhdHRlcm4uaW5jbHVkZXMoJy8nKSA/IHBhdHRlcm4gOiBgKiovJHtwYXR0ZXJufWApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBhbHNvIHJlbW92ZXMgZHVwbGljYXRlIHNsYXNoZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIGluIHRoZSBwYXR0ZXJuIG9yIGZvcm1lZCBhcyBhIHJlc3VsdCBvZiBleHBhbnNpb24uXG4gICAgICovXG4gICAgcmV0dXJuIHBhdHRlcm5zLm1hcCgocGF0dGVybikgPT4gdXRpbHMucGF0dGVybi5yZW1vdmVEdXBsaWNhdGVTbGFzaGVzKHBhdHRlcm4pKTtcbn1cbi8qKlxuICogUmV0dXJucyB0YXNrcyBncm91cGVkIGJ5IGJhc2ljIHBhdHRlcm4gZGlyZWN0b3JpZXMuXG4gKlxuICogUGF0dGVybnMgdGhhdCBjYW4gYmUgZm91bmQgaW5zaWRlIChgLi9gKSBhbmQgb3V0c2lkZSAoYC4uL2ApIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5LlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBkaXJlY3RvcnkgdHJhdmVyc2FsIHN0YXJ0cyBhdCB0aGUgYmFzZSBkaXJlY3RvcnkgYW5kIGdvZXMgZGVlcGVyLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UGF0dGVybnNUb1Rhc2tzKHBvc2l0aXZlLCBuZWdhdGl2ZSwgZHluYW1pYykge1xuICAgIGNvbnN0IHRhc2tzID0gW107XG4gICAgY29uc3QgcGF0dGVybnNPdXRzaWRlQ3VycmVudERpcmVjdG9yeSA9IHV0aWxzLnBhdHRlcm4uZ2V0UGF0dGVybnNPdXRzaWRlQ3VycmVudERpcmVjdG9yeShwb3NpdGl2ZSk7XG4gICAgY29uc3QgcGF0dGVybnNJbnNpZGVDdXJyZW50RGlyZWN0b3J5ID0gdXRpbHMucGF0dGVybi5nZXRQYXR0ZXJuc0luc2lkZUN1cnJlbnREaXJlY3RvcnkocG9zaXRpdmUpO1xuICAgIGNvbnN0IG91dHNpZGVDdXJyZW50RGlyZWN0b3J5R3JvdXAgPSBncm91cFBhdHRlcm5zQnlCYXNlRGlyZWN0b3J5KHBhdHRlcm5zT3V0c2lkZUN1cnJlbnREaXJlY3RvcnkpO1xuICAgIGNvbnN0IGluc2lkZUN1cnJlbnREaXJlY3RvcnlHcm91cCA9IGdyb3VwUGF0dGVybnNCeUJhc2VEaXJlY3RvcnkocGF0dGVybnNJbnNpZGVDdXJyZW50RGlyZWN0b3J5KTtcbiAgICB0YXNrcy5wdXNoKC4uLmNvbnZlcnRQYXR0ZXJuR3JvdXBzVG9UYXNrcyhvdXRzaWRlQ3VycmVudERpcmVjdG9yeUdyb3VwLCBuZWdhdGl2ZSwgZHluYW1pYykpO1xuICAgIC8qXG4gICAgICogRm9yIHRoZSBzYWtlIG9mIHJlZHVjaW5nIGZ1dHVyZSBhY2Nlc3NlcyB0byB0aGUgZmlsZSBzeXN0ZW0sIHdlIG1lcmdlIGFsbCB0YXNrcyB3aXRoaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5XG4gICAgICogaW50byBhIGdsb2JhbCB0YXNrLCBpZiBhdCBsZWFzdCBvbmUgcGF0dGVybiByZWZlcnMgdG8gdGhlIHJvb3QgKGAuYCkuIEluIHRoaXMgY2FzZSwgdGhlIGdsb2JhbCB0YXNrIGNvdmVycyB0aGUgcmVzdC5cbiAgICAgKi9cbiAgICBpZiAoJy4nIGluIGluc2lkZUN1cnJlbnREaXJlY3RvcnlHcm91cCkge1xuICAgICAgICB0YXNrcy5wdXNoKGNvbnZlcnRQYXR0ZXJuR3JvdXBUb1Rhc2soJy4nLCBwYXR0ZXJuc0luc2lkZUN1cnJlbnREaXJlY3RvcnksIG5lZ2F0aXZlLCBkeW5hbWljKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0YXNrcy5wdXNoKC4uLmNvbnZlcnRQYXR0ZXJuR3JvdXBzVG9UYXNrcyhpbnNpZGVDdXJyZW50RGlyZWN0b3J5R3JvdXAsIG5lZ2F0aXZlLCBkeW5hbWljKSk7XG4gICAgfVxuICAgIHJldHVybiB0YXNrcztcbn1cbmV4cG9ydHMuY29udmVydFBhdHRlcm5zVG9UYXNrcyA9IGNvbnZlcnRQYXR0ZXJuc1RvVGFza3M7XG5mdW5jdGlvbiBnZXRQb3NpdGl2ZVBhdHRlcm5zKHBhdHRlcm5zKSB7XG4gICAgcmV0dXJuIHV0aWxzLnBhdHRlcm4uZ2V0UG9zaXRpdmVQYXR0ZXJucyhwYXR0ZXJucyk7XG59XG5leHBvcnRzLmdldFBvc2l0aXZlUGF0dGVybnMgPSBnZXRQb3NpdGl2ZVBhdHRlcm5zO1xuZnVuY3Rpb24gZ2V0TmVnYXRpdmVQYXR0ZXJuc0FzUG9zaXRpdmUocGF0dGVybnMsIGlnbm9yZSkge1xuICAgIGNvbnN0IG5lZ2F0aXZlID0gdXRpbHMucGF0dGVybi5nZXROZWdhdGl2ZVBhdHRlcm5zKHBhdHRlcm5zKS5jb25jYXQoaWdub3JlKTtcbiAgICBjb25zdCBwb3NpdGl2ZSA9IG5lZ2F0aXZlLm1hcCh1dGlscy5wYXR0ZXJuLmNvbnZlcnRUb1Bvc2l0aXZlUGF0dGVybik7XG4gICAgcmV0dXJuIHBvc2l0aXZlO1xufVxuZXhwb3J0cy5nZXROZWdhdGl2ZVBhdHRlcm5zQXNQb3NpdGl2ZSA9IGdldE5lZ2F0aXZlUGF0dGVybnNBc1Bvc2l0aXZlO1xuZnVuY3Rpb24gZ3JvdXBQYXR0ZXJuc0J5QmFzZURpcmVjdG9yeShwYXR0ZXJucykge1xuICAgIGNvbnN0IGdyb3VwID0ge307XG4gICAgcmV0dXJuIHBhdHRlcm5zLnJlZHVjZSgoY29sbGVjdGlvbiwgcGF0dGVybikgPT4ge1xuICAgICAgICBjb25zdCBiYXNlID0gdXRpbHMucGF0dGVybi5nZXRCYXNlRGlyZWN0b3J5KHBhdHRlcm4pO1xuICAgICAgICBpZiAoYmFzZSBpbiBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICBjb2xsZWN0aW9uW2Jhc2VdLnB1c2gocGF0dGVybik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb2xsZWN0aW9uW2Jhc2VdID0gW3BhdHRlcm5dO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgIH0sIGdyb3VwKTtcbn1cbmV4cG9ydHMuZ3JvdXBQYXR0ZXJuc0J5QmFzZURpcmVjdG9yeSA9IGdyb3VwUGF0dGVybnNCeUJhc2VEaXJlY3Rvcnk7XG5mdW5jdGlvbiBjb252ZXJ0UGF0dGVybkdyb3Vwc1RvVGFza3MocG9zaXRpdmUsIG5lZ2F0aXZlLCBkeW5hbWljKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHBvc2l0aXZlKS5tYXAoKGJhc2UpID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRQYXR0ZXJuR3JvdXBUb1Rhc2soYmFzZSwgcG9zaXRpdmVbYmFzZV0sIG5lZ2F0aXZlLCBkeW5hbWljKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuY29udmVydFBhdHRlcm5Hcm91cHNUb1Rhc2tzID0gY29udmVydFBhdHRlcm5Hcm91cHNUb1Rhc2tzO1xuZnVuY3Rpb24gY29udmVydFBhdHRlcm5Hcm91cFRvVGFzayhiYXNlLCBwb3NpdGl2ZSwgbmVnYXRpdmUsIGR5bmFtaWMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBkeW5hbWljLFxuICAgICAgICBwb3NpdGl2ZSxcbiAgICAgICAgbmVnYXRpdmUsXG4gICAgICAgIGJhc2UsXG4gICAgICAgIHBhdHRlcm5zOiBbXS5jb25jYXQocG9zaXRpdmUsIG5lZ2F0aXZlLm1hcCh1dGlscy5wYXR0ZXJuLmNvbnZlcnRUb05lZ2F0aXZlUGF0dGVybikpXG4gICAgfTtcbn1cbmV4cG9ydHMuY29udmVydFBhdHRlcm5Hcm91cFRvVGFzayA9IGNvbnZlcnRQYXR0ZXJuR3JvdXBUb1Rhc2s7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlYWQgPSB2b2lkIDA7XG5mdW5jdGlvbiByZWFkKHBhdGgsIHNldHRpbmdzLCBjYWxsYmFjaykge1xuICAgIHNldHRpbmdzLmZzLmxzdGF0KHBhdGgsIChsc3RhdEVycm9yLCBsc3RhdCkgPT4ge1xuICAgICAgICBpZiAobHN0YXRFcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY2FsbEZhaWx1cmVDYWxsYmFjayhjYWxsYmFjaywgbHN0YXRFcnJvcik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFsc3RhdC5pc1N5bWJvbGljTGluaygpIHx8ICFzZXR0aW5ncy5mb2xsb3dTeW1ib2xpY0xpbmspIHtcbiAgICAgICAgICAgIGNhbGxTdWNjZXNzQ2FsbGJhY2soY2FsbGJhY2ssIGxzdGF0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZXR0aW5ncy5mcy5zdGF0KHBhdGgsIChzdGF0RXJyb3IsIHN0YXQpID0+IHtcbiAgICAgICAgICAgIGlmIChzdGF0RXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ3MudGhyb3dFcnJvck9uQnJva2VuU3ltYm9saWNMaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxGYWlsdXJlQ2FsbGJhY2soY2FsbGJhY2ssIHN0YXRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbFN1Y2Nlc3NDYWxsYmFjayhjYWxsYmFjaywgbHN0YXQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy5tYXJrU3ltYm9saWNMaW5rKSB7XG4gICAgICAgICAgICAgICAgc3RhdC5pc1N5bWJvbGljTGluayA9ICgpID0+IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsU3VjY2Vzc0NhbGxiYWNrKGNhbGxiYWNrLCBzdGF0KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLnJlYWQgPSByZWFkO1xuZnVuY3Rpb24gY2FsbEZhaWx1cmVDYWxsYmFjayhjYWxsYmFjaywgZXJyb3IpIHtcbiAgICBjYWxsYmFjayhlcnJvcik7XG59XG5mdW5jdGlvbiBjYWxsU3VjY2Vzc0NhbGxiYWNrKGNhbGxiYWNrLCByZXN1bHQpIHtcbiAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZWFkID0gdm9pZCAwO1xuZnVuY3Rpb24gcmVhZChwYXRoLCBzZXR0aW5ncykge1xuICAgIGNvbnN0IGxzdGF0ID0gc2V0dGluZ3MuZnMubHN0YXRTeW5jKHBhdGgpO1xuICAgIGlmICghbHN0YXQuaXNTeW1ib2xpY0xpbmsoKSB8fCAhc2V0dGluZ3MuZm9sbG93U3ltYm9saWNMaW5rKSB7XG4gICAgICAgIHJldHVybiBsc3RhdDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RhdCA9IHNldHRpbmdzLmZzLnN0YXRTeW5jKHBhdGgpO1xuICAgICAgICBpZiAoc2V0dGluZ3MubWFya1N5bWJvbGljTGluaykge1xuICAgICAgICAgICAgc3RhdC5pc1N5bWJvbGljTGluayA9ICgpID0+IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXQ7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIXNldHRpbmdzLnRocm93RXJyb3JPbkJyb2tlblN5bWJvbGljTGluaykge1xuICAgICAgICAgICAgcmV0dXJuIGxzdGF0O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbn1cbmV4cG9ydHMucmVhZCA9IHJlYWQ7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUZpbGVTeXN0ZW1BZGFwdGVyID0gZXhwb3J0cy5GSUxFX1NZU1RFTV9BREFQVEVSID0gdm9pZCAwO1xuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XG5leHBvcnRzLkZJTEVfU1lTVEVNX0FEQVBURVIgPSB7XG4gICAgbHN0YXQ6IGZzLmxzdGF0LFxuICAgIHN0YXQ6IGZzLnN0YXQsXG4gICAgbHN0YXRTeW5jOiBmcy5sc3RhdFN5bmMsXG4gICAgc3RhdFN5bmM6IGZzLnN0YXRTeW5jXG59O1xuZnVuY3Rpb24gY3JlYXRlRmlsZVN5c3RlbUFkYXB0ZXIoZnNNZXRob2RzKSB7XG4gICAgaWYgKGZzTWV0aG9kcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLkZJTEVfU1lTVEVNX0FEQVBURVI7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGV4cG9ydHMuRklMRV9TWVNURU1fQURBUFRFUiksIGZzTWV0aG9kcyk7XG59XG5leHBvcnRzLmNyZWF0ZUZpbGVTeXN0ZW1BZGFwdGVyID0gY3JlYXRlRmlsZVN5c3RlbUFkYXB0ZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBmcyA9IHJlcXVpcmUoXCIuL2FkYXB0ZXJzL2ZzXCIpO1xuY2xhc3MgU2V0dGluZ3Mge1xuICAgIGNvbnN0cnVjdG9yKF9vcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuICAgICAgICB0aGlzLmZvbGxvd1N5bWJvbGljTGluayA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMuZm9sbG93U3ltYm9saWNMaW5rLCB0cnVlKTtcbiAgICAgICAgdGhpcy5mcyA9IGZzLmNyZWF0ZUZpbGVTeXN0ZW1BZGFwdGVyKHRoaXMuX29wdGlvbnMuZnMpO1xuICAgICAgICB0aGlzLm1hcmtTeW1ib2xpY0xpbmsgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLm1hcmtTeW1ib2xpY0xpbmssIGZhbHNlKTtcbiAgICAgICAgdGhpcy50aHJvd0Vycm9yT25Ccm9rZW5TeW1ib2xpY0xpbmsgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLnRocm93RXJyb3JPbkJyb2tlblN5bWJvbGljTGluaywgdHJ1ZSk7XG4gICAgfVxuICAgIF9nZXRWYWx1ZShvcHRpb24sIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBvcHRpb24gIT09IG51bGwgJiYgb3B0aW9uICE9PSB2b2lkIDAgPyBvcHRpb24gOiB2YWx1ZTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBTZXR0aW5ncztcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RhdFN5bmMgPSBleHBvcnRzLnN0YXQgPSBleHBvcnRzLlNldHRpbmdzID0gdm9pZCAwO1xuY29uc3QgYXN5bmMgPSByZXF1aXJlKFwiLi9wcm92aWRlcnMvYXN5bmNcIik7XG5jb25zdCBzeW5jID0gcmVxdWlyZShcIi4vcHJvdmlkZXJzL3N5bmNcIik7XG5jb25zdCBzZXR0aW5nc18xID0gcmVxdWlyZShcIi4vc2V0dGluZ3NcIik7XG5leHBvcnRzLlNldHRpbmdzID0gc2V0dGluZ3NfMS5kZWZhdWx0O1xuZnVuY3Rpb24gc3RhdChwYXRoLCBvcHRpb25zT3JTZXR0aW5nc09yQ2FsbGJhY2ssIGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zT3JTZXR0aW5nc09yQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYXN5bmMucmVhZChwYXRoLCBnZXRTZXR0aW5ncygpLCBvcHRpb25zT3JTZXR0aW5nc09yQ2FsbGJhY2spO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGFzeW5jLnJlYWQocGF0aCwgZ2V0U2V0dGluZ3Mob3B0aW9uc09yU2V0dGluZ3NPckNhbGxiYWNrKSwgY2FsbGJhY2spO1xufVxuZXhwb3J0cy5zdGF0ID0gc3RhdDtcbmZ1bmN0aW9uIHN0YXRTeW5jKHBhdGgsIG9wdGlvbnNPclNldHRpbmdzKSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncyhvcHRpb25zT3JTZXR0aW5ncyk7XG4gICAgcmV0dXJuIHN5bmMucmVhZChwYXRoLCBzZXR0aW5ncyk7XG59XG5leHBvcnRzLnN0YXRTeW5jID0gc3RhdFN5bmM7XG5mdW5jdGlvbiBnZXRTZXR0aW5ncyhzZXR0aW5nc09yT3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHNldHRpbmdzT3JPcHRpb25zIGluc3RhbmNlb2Ygc2V0dGluZ3NfMS5kZWZhdWx0KSB7XG4gICAgICAgIHJldHVybiBzZXR0aW5nc09yT3B0aW9ucztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBzZXR0aW5nc18xLmRlZmF1bHQoc2V0dGluZ3NPck9wdGlvbnMpO1xufVxuIiwgIi8qISBxdWV1ZS1taWNyb3Rhc2suIE1JVCBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi9cbmxldCBwcm9taXNlXG5cbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHF1ZXVlTWljcm90YXNrID09PSAnZnVuY3Rpb24nXG4gID8gcXVldWVNaWNyb3Rhc2suYmluZCh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbClcbiAgLy8gcmV1c2UgcmVzb2x2ZWQgcHJvbWlzZSwgYW5kIGFsbG9jYXRlIGl0IGxhemlseVxuICA6IGNiID0+IChwcm9taXNlIHx8IChwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCkpKVxuICAgIC50aGVuKGNiKVxuICAgIC5jYXRjaChlcnIgPT4gc2V0VGltZW91dCgoKSA9PiB7IHRocm93IGVyciB9LCAwKSlcbiIsICIvKiEgcnVuLXBhcmFsbGVsLiBNSVQgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovXG5tb2R1bGUuZXhwb3J0cyA9IHJ1blBhcmFsbGVsXG5cbmNvbnN0IHF1ZXVlTWljcm90YXNrID0gcmVxdWlyZSgncXVldWUtbWljcm90YXNrJylcblxuZnVuY3Rpb24gcnVuUGFyYWxsZWwgKHRhc2tzLCBjYikge1xuICBsZXQgcmVzdWx0cywgcGVuZGluZywga2V5c1xuICBsZXQgaXNTeW5jID0gdHJ1ZVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHRhc2tzKSkge1xuICAgIHJlc3VsdHMgPSBbXVxuICAgIHBlbmRpbmcgPSB0YXNrcy5sZW5ndGhcbiAgfSBlbHNlIHtcbiAgICBrZXlzID0gT2JqZWN0LmtleXModGFza3MpXG4gICAgcmVzdWx0cyA9IHt9XG4gICAgcGVuZGluZyA9IGtleXMubGVuZ3RoXG4gIH1cblxuICBmdW5jdGlvbiBkb25lIChlcnIpIHtcbiAgICBmdW5jdGlvbiBlbmQgKCkge1xuICAgICAgaWYgKGNiKSBjYihlcnIsIHJlc3VsdHMpXG4gICAgICBjYiA9IG51bGxcbiAgICB9XG4gICAgaWYgKGlzU3luYykgcXVldWVNaWNyb3Rhc2soZW5kKVxuICAgIGVsc2UgZW5kKClcbiAgfVxuXG4gIGZ1bmN0aW9uIGVhY2ggKGksIGVyciwgcmVzdWx0KSB7XG4gICAgcmVzdWx0c1tpXSA9IHJlc3VsdFxuICAgIGlmICgtLXBlbmRpbmcgPT09IDAgfHwgZXJyKSB7XG4gICAgICBkb25lKGVycilcbiAgICB9XG4gIH1cblxuICBpZiAoIXBlbmRpbmcpIHtcbiAgICAvLyBlbXB0eVxuICAgIGRvbmUobnVsbClcbiAgfSBlbHNlIGlmIChrZXlzKSB7XG4gICAgLy8gb2JqZWN0XG4gICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHRhc2tzW2tleV0oZnVuY3Rpb24gKGVyciwgcmVzdWx0KSB7IGVhY2goa2V5LCBlcnIsIHJlc3VsdCkgfSlcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIC8vIGFycmF5XG4gICAgdGFza3MuZm9yRWFjaChmdW5jdGlvbiAodGFzaywgaSkge1xuICAgICAgdGFzayhmdW5jdGlvbiAoZXJyLCByZXN1bHQpIHsgZWFjaChpLCBlcnIsIHJlc3VsdCkgfSlcbiAgICB9KVxuICB9XG5cbiAgaXNTeW5jID0gZmFsc2Vcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSVNfU1VQUE9SVF9SRUFERElSX1dJVEhfRklMRV9UWVBFUyA9IHZvaWQgMDtcbmNvbnN0IE5PREVfUFJPQ0VTU19WRVJTSU9OX1BBUlRTID0gcHJvY2Vzcy52ZXJzaW9ucy5ub2RlLnNwbGl0KCcuJyk7XG5pZiAoTk9ERV9QUk9DRVNTX1ZFUlNJT05fUEFSVFNbMF0gPT09IHVuZGVmaW5lZCB8fCBOT0RFX1BST0NFU1NfVkVSU0lPTl9QQVJUU1sxXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGJlaGF2aW9yLiBUaGUgJ3Byb2Nlc3MudmVyc2lvbnMubm9kZScgdmFyaWFibGUgaGFzIGludmFsaWQgdmFsdWU6ICR7cHJvY2Vzcy52ZXJzaW9ucy5ub2RlfWApO1xufVxuY29uc3QgTUFKT1JfVkVSU0lPTiA9IE51bWJlci5wYXJzZUludChOT0RFX1BST0NFU1NfVkVSU0lPTl9QQVJUU1swXSwgMTApO1xuY29uc3QgTUlOT1JfVkVSU0lPTiA9IE51bWJlci5wYXJzZUludChOT0RFX1BST0NFU1NfVkVSU0lPTl9QQVJUU1sxXSwgMTApO1xuY29uc3QgU1VQUE9SVEVEX01BSk9SX1ZFUlNJT04gPSAxMDtcbmNvbnN0IFNVUFBPUlRFRF9NSU5PUl9WRVJTSU9OID0gMTA7XG5jb25zdCBJU19NQVRDSEVEX0JZX01BSk9SID0gTUFKT1JfVkVSU0lPTiA+IFNVUFBPUlRFRF9NQUpPUl9WRVJTSU9OO1xuY29uc3QgSVNfTUFUQ0hFRF9CWV9NQUpPUl9BTkRfTUlOT1IgPSBNQUpPUl9WRVJTSU9OID09PSBTVVBQT1JURURfTUFKT1JfVkVSU0lPTiAmJiBNSU5PUl9WRVJTSU9OID49IFNVUFBPUlRFRF9NSU5PUl9WRVJTSU9OO1xuLyoqXG4gKiBJUyBgdHJ1ZWAgZm9yIE5vZGUuanMgMTAuMTAgYW5kIGdyZWF0ZXIuXG4gKi9cbmV4cG9ydHMuSVNfU1VQUE9SVF9SRUFERElSX1dJVEhfRklMRV9UWVBFUyA9IElTX01BVENIRURfQllfTUFKT1IgfHwgSVNfTUFUQ0hFRF9CWV9NQUpPUl9BTkRfTUlOT1I7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZURpcmVudEZyb21TdGF0cyA9IHZvaWQgMDtcbmNsYXNzIERpcmVudEZyb21TdGF0cyB7XG4gICAgY29uc3RydWN0b3IobmFtZSwgc3RhdHMpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5pc0Jsb2NrRGV2aWNlID0gc3RhdHMuaXNCbG9ja0RldmljZS5iaW5kKHN0YXRzKTtcbiAgICAgICAgdGhpcy5pc0NoYXJhY3RlckRldmljZSA9IHN0YXRzLmlzQ2hhcmFjdGVyRGV2aWNlLmJpbmQoc3RhdHMpO1xuICAgICAgICB0aGlzLmlzRGlyZWN0b3J5ID0gc3RhdHMuaXNEaXJlY3RvcnkuYmluZChzdGF0cyk7XG4gICAgICAgIHRoaXMuaXNGSUZPID0gc3RhdHMuaXNGSUZPLmJpbmQoc3RhdHMpO1xuICAgICAgICB0aGlzLmlzRmlsZSA9IHN0YXRzLmlzRmlsZS5iaW5kKHN0YXRzKTtcbiAgICAgICAgdGhpcy5pc1NvY2tldCA9IHN0YXRzLmlzU29ja2V0LmJpbmQoc3RhdHMpO1xuICAgICAgICB0aGlzLmlzU3ltYm9saWNMaW5rID0gc3RhdHMuaXNTeW1ib2xpY0xpbmsuYmluZChzdGF0cyk7XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlRGlyZW50RnJvbVN0YXRzKG5hbWUsIHN0YXRzKSB7XG4gICAgcmV0dXJuIG5ldyBEaXJlbnRGcm9tU3RhdHMobmFtZSwgc3RhdHMpO1xufVxuZXhwb3J0cy5jcmVhdGVEaXJlbnRGcm9tU3RhdHMgPSBjcmVhdGVEaXJlbnRGcm9tU3RhdHM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZzID0gdm9pZCAwO1xuY29uc3QgZnMgPSByZXF1aXJlKFwiLi9mc1wiKTtcbmV4cG9ydHMuZnMgPSBmcztcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuam9pblBhdGhTZWdtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIGpvaW5QYXRoU2VnbWVudHMoYSwgYiwgc2VwYXJhdG9yKSB7XG4gICAgLyoqXG4gICAgICogVGhlIGNvcnJlY3QgaGFuZGxpbmcgb2YgY2FzZXMgd2hlbiB0aGUgZmlyc3Qgc2VnbWVudCBpcyBhIHJvb3QgKGAvYCwgYEM6L2ApIG9yIFVOQyBwYXRoIChgLy8/L0M6L2ApLlxuICAgICAqL1xuICAgIGlmIChhLmVuZHNXaXRoKHNlcGFyYXRvcikpIHtcbiAgICAgICAgcmV0dXJuIGEgKyBiO1xuICAgIH1cbiAgICByZXR1cm4gYSArIHNlcGFyYXRvciArIGI7XG59XG5leHBvcnRzLmpvaW5QYXRoU2VnbWVudHMgPSBqb2luUGF0aFNlZ21lbnRzO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZWFkZGlyID0gZXhwb3J0cy5yZWFkZGlyV2l0aEZpbGVUeXBlcyA9IGV4cG9ydHMucmVhZCA9IHZvaWQgMDtcbmNvbnN0IGZzU3RhdCA9IHJlcXVpcmUoXCJAbm9kZWxpYi9mcy5zdGF0XCIpO1xuY29uc3QgcnBsID0gcmVxdWlyZShcInJ1bi1wYXJhbGxlbFwiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4uL2NvbnN0YW50c1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpO1xuY29uc3QgY29tbW9uID0gcmVxdWlyZShcIi4vY29tbW9uXCIpO1xuZnVuY3Rpb24gcmVhZChkaXJlY3RvcnksIHNldHRpbmdzLCBjYWxsYmFjaykge1xuICAgIGlmICghc2V0dGluZ3Muc3RhdHMgJiYgY29uc3RhbnRzXzEuSVNfU1VQUE9SVF9SRUFERElSX1dJVEhfRklMRV9UWVBFUykge1xuICAgICAgICByZWFkZGlyV2l0aEZpbGVUeXBlcyhkaXJlY3RvcnksIHNldHRpbmdzLCBjYWxsYmFjayk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmVhZGRpcihkaXJlY3RvcnksIHNldHRpbmdzLCBjYWxsYmFjayk7XG59XG5leHBvcnRzLnJlYWQgPSByZWFkO1xuZnVuY3Rpb24gcmVhZGRpcldpdGhGaWxlVHlwZXMoZGlyZWN0b3J5LCBzZXR0aW5ncywgY2FsbGJhY2spIHtcbiAgICBzZXR0aW5ncy5mcy5yZWFkZGlyKGRpcmVjdG9yeSwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0sIChyZWFkZGlyRXJyb3IsIGRpcmVudHMpID0+IHtcbiAgICAgICAgaWYgKHJlYWRkaXJFcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY2FsbEZhaWx1cmVDYWxsYmFjayhjYWxsYmFjaywgcmVhZGRpckVycm9yKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbnRyaWVzID0gZGlyZW50cy5tYXAoKGRpcmVudCkgPT4gKHtcbiAgICAgICAgICAgIGRpcmVudCxcbiAgICAgICAgICAgIG5hbWU6IGRpcmVudC5uYW1lLFxuICAgICAgICAgICAgcGF0aDogY29tbW9uLmpvaW5QYXRoU2VnbWVudHMoZGlyZWN0b3J5LCBkaXJlbnQubmFtZSwgc2V0dGluZ3MucGF0aFNlZ21lbnRTZXBhcmF0b3IpXG4gICAgICAgIH0pKTtcbiAgICAgICAgaWYgKCFzZXR0aW5ncy5mb2xsb3dTeW1ib2xpY0xpbmtzKSB7XG4gICAgICAgICAgICBjYWxsU3VjY2Vzc0NhbGxiYWNrKGNhbGxiYWNrLCBlbnRyaWVzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YXNrcyA9IGVudHJpZXMubWFwKChlbnRyeSkgPT4gbWFrZVJwbFRhc2tFbnRyeShlbnRyeSwgc2V0dGluZ3MpKTtcbiAgICAgICAgcnBsKHRhc2tzLCAocnBsRXJyb3IsIHJwbEVudHJpZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChycGxFcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNhbGxGYWlsdXJlQ2FsbGJhY2soY2FsbGJhY2ssIHJwbEVycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsU3VjY2Vzc0NhbGxiYWNrKGNhbGxiYWNrLCBycGxFbnRyaWVzKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLnJlYWRkaXJXaXRoRmlsZVR5cGVzID0gcmVhZGRpcldpdGhGaWxlVHlwZXM7XG5mdW5jdGlvbiBtYWtlUnBsVGFza0VudHJ5KGVudHJ5LCBzZXR0aW5ncykge1xuICAgIHJldHVybiAoZG9uZSkgPT4ge1xuICAgICAgICBpZiAoIWVudHJ5LmRpcmVudC5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICBkb25lKG51bGwsIGVudHJ5KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZXR0aW5ncy5mcy5zdGF0KGVudHJ5LnBhdGgsIChzdGF0RXJyb3IsIHN0YXRzKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RhdEVycm9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzLnRocm93RXJyb3JPbkJyb2tlblN5bWJvbGljTGluaykge1xuICAgICAgICAgICAgICAgICAgICBkb25lKHN0YXRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG9uZShudWxsLCBlbnRyeSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW50cnkuZGlyZW50ID0gdXRpbHMuZnMuY3JlYXRlRGlyZW50RnJvbVN0YXRzKGVudHJ5Lm5hbWUsIHN0YXRzKTtcbiAgICAgICAgICAgIGRvbmUobnVsbCwgZW50cnkpO1xuICAgICAgICB9KTtcbiAgICB9O1xufVxuZnVuY3Rpb24gcmVhZGRpcihkaXJlY3RvcnksIHNldHRpbmdzLCBjYWxsYmFjaykge1xuICAgIHNldHRpbmdzLmZzLnJlYWRkaXIoZGlyZWN0b3J5LCAocmVhZGRpckVycm9yLCBuYW1lcykgPT4ge1xuICAgICAgICBpZiAocmVhZGRpckVycm9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjYWxsRmFpbHVyZUNhbGxiYWNrKGNhbGxiYWNrLCByZWFkZGlyRXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhc2tzID0gbmFtZXMubWFwKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gY29tbW9uLmpvaW5QYXRoU2VnbWVudHMoZGlyZWN0b3J5LCBuYW1lLCBzZXR0aW5ncy5wYXRoU2VnbWVudFNlcGFyYXRvcik7XG4gICAgICAgICAgICByZXR1cm4gKGRvbmUpID0+IHtcbiAgICAgICAgICAgICAgICBmc1N0YXQuc3RhdChwYXRoLCBzZXR0aW5ncy5mc1N0YXRTZXR0aW5ncywgKGVycm9yLCBzdGF0cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXJlbnQ6IHV0aWxzLmZzLmNyZWF0ZURpcmVudEZyb21TdGF0cyhuYW1lLCBzdGF0cylcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzLnN0YXRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5zdGF0cyA9IHN0YXRzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRvbmUobnVsbCwgZW50cnkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJwbCh0YXNrcywgKHJwbEVycm9yLCBlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgICBpZiAocnBsRXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjYWxsRmFpbHVyZUNhbGxiYWNrKGNhbGxiYWNrLCBycGxFcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbFN1Y2Nlc3NDYWxsYmFjayhjYWxsYmFjaywgZW50cmllcyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5yZWFkZGlyID0gcmVhZGRpcjtcbmZ1bmN0aW9uIGNhbGxGYWlsdXJlQ2FsbGJhY2soY2FsbGJhY2ssIGVycm9yKSB7XG4gICAgY2FsbGJhY2soZXJyb3IpO1xufVxuZnVuY3Rpb24gY2FsbFN1Y2Nlc3NDYWxsYmFjayhjYWxsYmFjaywgcmVzdWx0KSB7XG4gICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVhZGRpciA9IGV4cG9ydHMucmVhZGRpcldpdGhGaWxlVHlwZXMgPSBleHBvcnRzLnJlYWQgPSB2b2lkIDA7XG5jb25zdCBmc1N0YXQgPSByZXF1aXJlKFwiQG5vZGVsaWIvZnMuc3RhdFwiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4uL2NvbnN0YW50c1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpO1xuY29uc3QgY29tbW9uID0gcmVxdWlyZShcIi4vY29tbW9uXCIpO1xuZnVuY3Rpb24gcmVhZChkaXJlY3RvcnksIHNldHRpbmdzKSB7XG4gICAgaWYgKCFzZXR0aW5ncy5zdGF0cyAmJiBjb25zdGFudHNfMS5JU19TVVBQT1JUX1JFQURESVJfV0lUSF9GSUxFX1RZUEVTKSB7XG4gICAgICAgIHJldHVybiByZWFkZGlyV2l0aEZpbGVUeXBlcyhkaXJlY3RvcnksIHNldHRpbmdzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlYWRkaXIoZGlyZWN0b3J5LCBzZXR0aW5ncyk7XG59XG5leHBvcnRzLnJlYWQgPSByZWFkO1xuZnVuY3Rpb24gcmVhZGRpcldpdGhGaWxlVHlwZXMoZGlyZWN0b3J5LCBzZXR0aW5ncykge1xuICAgIGNvbnN0IGRpcmVudHMgPSBzZXR0aW5ncy5mcy5yZWFkZGlyU3luYyhkaXJlY3RvcnksIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgICByZXR1cm4gZGlyZW50cy5tYXAoKGRpcmVudCkgPT4ge1xuICAgICAgICBjb25zdCBlbnRyeSA9IHtcbiAgICAgICAgICAgIGRpcmVudCxcbiAgICAgICAgICAgIG5hbWU6IGRpcmVudC5uYW1lLFxuICAgICAgICAgICAgcGF0aDogY29tbW9uLmpvaW5QYXRoU2VnbWVudHMoZGlyZWN0b3J5LCBkaXJlbnQubmFtZSwgc2V0dGluZ3MucGF0aFNlZ21lbnRTZXBhcmF0b3IpXG4gICAgICAgIH07XG4gICAgICAgIGlmIChlbnRyeS5kaXJlbnQuaXNTeW1ib2xpY0xpbmsoKSAmJiBzZXR0aW5ncy5mb2xsb3dTeW1ib2xpY0xpbmtzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gc2V0dGluZ3MuZnMuc3RhdFN5bmMoZW50cnkucGF0aCk7XG4gICAgICAgICAgICAgICAgZW50cnkuZGlyZW50ID0gdXRpbHMuZnMuY3JlYXRlRGlyZW50RnJvbVN0YXRzKGVudHJ5Lm5hbWUsIHN0YXRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGlmIChzZXR0aW5ncy50aHJvd0Vycm9yT25Ccm9rZW5TeW1ib2xpY0xpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyeTtcbiAgICB9KTtcbn1cbmV4cG9ydHMucmVhZGRpcldpdGhGaWxlVHlwZXMgPSByZWFkZGlyV2l0aEZpbGVUeXBlcztcbmZ1bmN0aW9uIHJlYWRkaXIoZGlyZWN0b3J5LCBzZXR0aW5ncykge1xuICAgIGNvbnN0IG5hbWVzID0gc2V0dGluZ3MuZnMucmVhZGRpclN5bmMoZGlyZWN0b3J5KTtcbiAgICByZXR1cm4gbmFtZXMubWFwKChuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGVudHJ5UGF0aCA9IGNvbW1vbi5qb2luUGF0aFNlZ21lbnRzKGRpcmVjdG9yeSwgbmFtZSwgc2V0dGluZ3MucGF0aFNlZ21lbnRTZXBhcmF0b3IpO1xuICAgICAgICBjb25zdCBzdGF0cyA9IGZzU3RhdC5zdGF0U3luYyhlbnRyeVBhdGgsIHNldHRpbmdzLmZzU3RhdFNldHRpbmdzKTtcbiAgICAgICAgY29uc3QgZW50cnkgPSB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgcGF0aDogZW50cnlQYXRoLFxuICAgICAgICAgICAgZGlyZW50OiB1dGlscy5mcy5jcmVhdGVEaXJlbnRGcm9tU3RhdHMobmFtZSwgc3RhdHMpXG4gICAgICAgIH07XG4gICAgICAgIGlmIChzZXR0aW5ncy5zdGF0cykge1xuICAgICAgICAgICAgZW50cnkuc3RhdHMgPSBzdGF0cztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnk7XG4gICAgfSk7XG59XG5leHBvcnRzLnJlYWRkaXIgPSByZWFkZGlyO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVGaWxlU3lzdGVtQWRhcHRlciA9IGV4cG9ydHMuRklMRV9TWVNURU1fQURBUFRFUiA9IHZvaWQgMDtcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuZXhwb3J0cy5GSUxFX1NZU1RFTV9BREFQVEVSID0ge1xuICAgIGxzdGF0OiBmcy5sc3RhdCxcbiAgICBzdGF0OiBmcy5zdGF0LFxuICAgIGxzdGF0U3luYzogZnMubHN0YXRTeW5jLFxuICAgIHN0YXRTeW5jOiBmcy5zdGF0U3luYyxcbiAgICByZWFkZGlyOiBmcy5yZWFkZGlyLFxuICAgIHJlYWRkaXJTeW5jOiBmcy5yZWFkZGlyU3luY1xufTtcbmZ1bmN0aW9uIGNyZWF0ZUZpbGVTeXN0ZW1BZGFwdGVyKGZzTWV0aG9kcykge1xuICAgIGlmIChmc01ldGhvZHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5GSUxFX1NZU1RFTV9BREFQVEVSO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBleHBvcnRzLkZJTEVfU1lTVEVNX0FEQVBURVIpLCBmc01ldGhvZHMpO1xufVxuZXhwb3J0cy5jcmVhdGVGaWxlU3lzdGVtQWRhcHRlciA9IGNyZWF0ZUZpbGVTeXN0ZW1BZGFwdGVyO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuY29uc3QgZnNTdGF0ID0gcmVxdWlyZShcIkBub2RlbGliL2ZzLnN0YXRcIik7XG5jb25zdCBmcyA9IHJlcXVpcmUoXCIuL2FkYXB0ZXJzL2ZzXCIpO1xuY2xhc3MgU2V0dGluZ3Mge1xuICAgIGNvbnN0cnVjdG9yKF9vcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuICAgICAgICB0aGlzLmZvbGxvd1N5bWJvbGljTGlua3MgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLmZvbGxvd1N5bWJvbGljTGlua3MsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5mcyA9IGZzLmNyZWF0ZUZpbGVTeXN0ZW1BZGFwdGVyKHRoaXMuX29wdGlvbnMuZnMpO1xuICAgICAgICB0aGlzLnBhdGhTZWdtZW50U2VwYXJhdG9yID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5wYXRoU2VnbWVudFNlcGFyYXRvciwgcGF0aC5zZXApO1xuICAgICAgICB0aGlzLnN0YXRzID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5zdGF0cywgZmFsc2UpO1xuICAgICAgICB0aGlzLnRocm93RXJyb3JPbkJyb2tlblN5bWJvbGljTGluayA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMudGhyb3dFcnJvck9uQnJva2VuU3ltYm9saWNMaW5rLCB0cnVlKTtcbiAgICAgICAgdGhpcy5mc1N0YXRTZXR0aW5ncyA9IG5ldyBmc1N0YXQuU2V0dGluZ3Moe1xuICAgICAgICAgICAgZm9sbG93U3ltYm9saWNMaW5rOiB0aGlzLmZvbGxvd1N5bWJvbGljTGlua3MsXG4gICAgICAgICAgICBmczogdGhpcy5mcyxcbiAgICAgICAgICAgIHRocm93RXJyb3JPbkJyb2tlblN5bWJvbGljTGluazogdGhpcy50aHJvd0Vycm9yT25Ccm9rZW5TeW1ib2xpY0xpbmtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9nZXRWYWx1ZShvcHRpb24sIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBvcHRpb24gIT09IG51bGwgJiYgb3B0aW9uICE9PSB2b2lkIDAgPyBvcHRpb24gOiB2YWx1ZTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBTZXR0aW5ncztcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2V0dGluZ3MgPSBleHBvcnRzLnNjYW5kaXJTeW5jID0gZXhwb3J0cy5zY2FuZGlyID0gdm9pZCAwO1xuY29uc3QgYXN5bmMgPSByZXF1aXJlKFwiLi9wcm92aWRlcnMvYXN5bmNcIik7XG5jb25zdCBzeW5jID0gcmVxdWlyZShcIi4vcHJvdmlkZXJzL3N5bmNcIik7XG5jb25zdCBzZXR0aW5nc18xID0gcmVxdWlyZShcIi4vc2V0dGluZ3NcIik7XG5leHBvcnRzLlNldHRpbmdzID0gc2V0dGluZ3NfMS5kZWZhdWx0O1xuZnVuY3Rpb24gc2NhbmRpcihwYXRoLCBvcHRpb25zT3JTZXR0aW5nc09yQ2FsbGJhY2ssIGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zT3JTZXR0aW5nc09yQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYXN5bmMucmVhZChwYXRoLCBnZXRTZXR0aW5ncygpLCBvcHRpb25zT3JTZXR0aW5nc09yQ2FsbGJhY2spO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGFzeW5jLnJlYWQocGF0aCwgZ2V0U2V0dGluZ3Mob3B0aW9uc09yU2V0dGluZ3NPckNhbGxiYWNrKSwgY2FsbGJhY2spO1xufVxuZXhwb3J0cy5zY2FuZGlyID0gc2NhbmRpcjtcbmZ1bmN0aW9uIHNjYW5kaXJTeW5jKHBhdGgsIG9wdGlvbnNPclNldHRpbmdzKSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncyhvcHRpb25zT3JTZXR0aW5ncyk7XG4gICAgcmV0dXJuIHN5bmMucmVhZChwYXRoLCBzZXR0aW5ncyk7XG59XG5leHBvcnRzLnNjYW5kaXJTeW5jID0gc2NhbmRpclN5bmM7XG5mdW5jdGlvbiBnZXRTZXR0aW5ncyhzZXR0aW5nc09yT3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHNldHRpbmdzT3JPcHRpb25zIGluc3RhbmNlb2Ygc2V0dGluZ3NfMS5kZWZhdWx0KSB7XG4gICAgICAgIHJldHVybiBzZXR0aW5nc09yT3B0aW9ucztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBzZXR0aW5nc18xLmRlZmF1bHQoc2V0dGluZ3NPck9wdGlvbnMpO1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5mdW5jdGlvbiByZXVzaWZ5IChDb25zdHJ1Y3Rvcikge1xuICB2YXIgaGVhZCA9IG5ldyBDb25zdHJ1Y3RvcigpXG4gIHZhciB0YWlsID0gaGVhZFxuXG4gIGZ1bmN0aW9uIGdldCAoKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBoZWFkXG5cbiAgICBpZiAoY3VycmVudC5uZXh0KSB7XG4gICAgICBoZWFkID0gY3VycmVudC5uZXh0XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWQgPSBuZXcgQ29uc3RydWN0b3IoKVxuICAgICAgdGFpbCA9IGhlYWRcbiAgICB9XG5cbiAgICBjdXJyZW50Lm5leHQgPSBudWxsXG5cbiAgICByZXR1cm4gY3VycmVudFxuICB9XG5cbiAgZnVuY3Rpb24gcmVsZWFzZSAob2JqKSB7XG4gICAgdGFpbC5uZXh0ID0gb2JqXG4gICAgdGFpbCA9IG9ialxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBnZXQ6IGdldCxcbiAgICByZWxlYXNlOiByZWxlYXNlXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXVzaWZ5XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZhciAqL1xuXG52YXIgcmV1c2lmeSA9IHJlcXVpcmUoJ3JldXNpZnknKVxuXG5mdW5jdGlvbiBmYXN0cXVldWUgKGNvbnRleHQsIHdvcmtlciwgY29uY3VycmVuY3kpIHtcbiAgaWYgKHR5cGVvZiBjb250ZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uY3VycmVuY3kgPSB3b3JrZXJcbiAgICB3b3JrZXIgPSBjb250ZXh0XG4gICAgY29udGV4dCA9IG51bGxcbiAgfVxuXG4gIGlmIChjb25jdXJyZW5jeSA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2Zhc3RxdWV1ZSBjb25jdXJyZW5jeSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxJylcbiAgfVxuXG4gIHZhciBjYWNoZSA9IHJldXNpZnkoVGFzaylcbiAgdmFyIHF1ZXVlSGVhZCA9IG51bGxcbiAgdmFyIHF1ZXVlVGFpbCA9IG51bGxcbiAgdmFyIF9ydW5uaW5nID0gMFxuICB2YXIgZXJyb3JIYW5kbGVyID0gbnVsbFxuXG4gIHZhciBzZWxmID0ge1xuICAgIHB1c2g6IHB1c2gsXG4gICAgZHJhaW46IG5vb3AsXG4gICAgc2F0dXJhdGVkOiBub29wLFxuICAgIHBhdXNlOiBwYXVzZSxcbiAgICBwYXVzZWQ6IGZhbHNlLFxuICAgIGNvbmN1cnJlbmN5OiBjb25jdXJyZW5jeSxcbiAgICBydW5uaW5nOiBydW5uaW5nLFxuICAgIHJlc3VtZTogcmVzdW1lLFxuICAgIGlkbGU6IGlkbGUsXG4gICAgbGVuZ3RoOiBsZW5ndGgsXG4gICAgZ2V0UXVldWU6IGdldFF1ZXVlLFxuICAgIHVuc2hpZnQ6IHVuc2hpZnQsXG4gICAgZW1wdHk6IG5vb3AsXG4gICAga2lsbDoga2lsbCxcbiAgICBraWxsQW5kRHJhaW46IGtpbGxBbmREcmFpbixcbiAgICBlcnJvcjogZXJyb3JcbiAgfVxuXG4gIHJldHVybiBzZWxmXG5cbiAgZnVuY3Rpb24gcnVubmluZyAoKSB7XG4gICAgcmV0dXJuIF9ydW5uaW5nXG4gIH1cblxuICBmdW5jdGlvbiBwYXVzZSAoKSB7XG4gICAgc2VsZi5wYXVzZWQgPSB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBsZW5ndGggKCkge1xuICAgIHZhciBjdXJyZW50ID0gcXVldWVIZWFkXG4gICAgdmFyIGNvdW50ZXIgPSAwXG5cbiAgICB3aGlsZSAoY3VycmVudCkge1xuICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dFxuICAgICAgY291bnRlcisrXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50ZXJcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFF1ZXVlICgpIHtcbiAgICB2YXIgY3VycmVudCA9IHF1ZXVlSGVhZFxuICAgIHZhciB0YXNrcyA9IFtdXG5cbiAgICB3aGlsZSAoY3VycmVudCkge1xuICAgICAgdGFza3MucHVzaChjdXJyZW50LnZhbHVlKVxuICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dFxuICAgIH1cblxuICAgIHJldHVybiB0YXNrc1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzdW1lICgpIHtcbiAgICBpZiAoIXNlbGYucGF1c2VkKSByZXR1cm5cbiAgICBzZWxmLnBhdXNlZCA9IGZhbHNlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLmNvbmN1cnJlbmN5OyBpKyspIHtcbiAgICAgIF9ydW5uaW5nKytcbiAgICAgIHJlbGVhc2UoKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlkbGUgKCkge1xuICAgIHJldHVybiBfcnVubmluZyA9PT0gMCAmJiBzZWxmLmxlbmd0aCgpID09PSAwXG4gIH1cblxuICBmdW5jdGlvbiBwdXNoICh2YWx1ZSwgZG9uZSkge1xuICAgIHZhciBjdXJyZW50ID0gY2FjaGUuZ2V0KClcblxuICAgIGN1cnJlbnQuY29udGV4dCA9IGNvbnRleHRcbiAgICBjdXJyZW50LnJlbGVhc2UgPSByZWxlYXNlXG4gICAgY3VycmVudC52YWx1ZSA9IHZhbHVlXG4gICAgY3VycmVudC5jYWxsYmFjayA9IGRvbmUgfHwgbm9vcFxuICAgIGN1cnJlbnQuZXJyb3JIYW5kbGVyID0gZXJyb3JIYW5kbGVyXG5cbiAgICBpZiAoX3J1bm5pbmcgPT09IHNlbGYuY29uY3VycmVuY3kgfHwgc2VsZi5wYXVzZWQpIHtcbiAgICAgIGlmIChxdWV1ZVRhaWwpIHtcbiAgICAgICAgcXVldWVUYWlsLm5leHQgPSBjdXJyZW50XG4gICAgICAgIHF1ZXVlVGFpbCA9IGN1cnJlbnRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSGVhZCA9IGN1cnJlbnRcbiAgICAgICAgcXVldWVUYWlsID0gY3VycmVudFxuICAgICAgICBzZWxmLnNhdHVyYXRlZCgpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIF9ydW5uaW5nKytcbiAgICAgIHdvcmtlci5jYWxsKGNvbnRleHQsIGN1cnJlbnQudmFsdWUsIGN1cnJlbnQud29ya2VkKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVuc2hpZnQgKHZhbHVlLCBkb25lKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBjYWNoZS5nZXQoKVxuXG4gICAgY3VycmVudC5jb250ZXh0ID0gY29udGV4dFxuICAgIGN1cnJlbnQucmVsZWFzZSA9IHJlbGVhc2VcbiAgICBjdXJyZW50LnZhbHVlID0gdmFsdWVcbiAgICBjdXJyZW50LmNhbGxiYWNrID0gZG9uZSB8fCBub29wXG5cbiAgICBpZiAoX3J1bm5pbmcgPT09IHNlbGYuY29uY3VycmVuY3kgfHwgc2VsZi5wYXVzZWQpIHtcbiAgICAgIGlmIChxdWV1ZUhlYWQpIHtcbiAgICAgICAgY3VycmVudC5uZXh0ID0gcXVldWVIZWFkXG4gICAgICAgIHF1ZXVlSGVhZCA9IGN1cnJlbnRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSGVhZCA9IGN1cnJlbnRcbiAgICAgICAgcXVldWVUYWlsID0gY3VycmVudFxuICAgICAgICBzZWxmLnNhdHVyYXRlZCgpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIF9ydW5uaW5nKytcbiAgICAgIHdvcmtlci5jYWxsKGNvbnRleHQsIGN1cnJlbnQudmFsdWUsIGN1cnJlbnQud29ya2VkKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbGVhc2UgKGhvbGRlcikge1xuICAgIGlmIChob2xkZXIpIHtcbiAgICAgIGNhY2hlLnJlbGVhc2UoaG9sZGVyKVxuICAgIH1cbiAgICB2YXIgbmV4dCA9IHF1ZXVlSGVhZFxuICAgIGlmIChuZXh0KSB7XG4gICAgICBpZiAoIXNlbGYucGF1c2VkKSB7XG4gICAgICAgIGlmIChxdWV1ZVRhaWwgPT09IHF1ZXVlSGVhZCkge1xuICAgICAgICAgIHF1ZXVlVGFpbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUhlYWQgPSBuZXh0Lm5leHRcbiAgICAgICAgbmV4dC5uZXh0ID0gbnVsbFxuICAgICAgICB3b3JrZXIuY2FsbChjb250ZXh0LCBuZXh0LnZhbHVlLCBuZXh0LndvcmtlZClcbiAgICAgICAgaWYgKHF1ZXVlVGFpbCA9PT0gbnVsbCkge1xuICAgICAgICAgIHNlbGYuZW1wdHkoKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfcnVubmluZy0tXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgtLV9ydW5uaW5nID09PSAwKSB7XG4gICAgICBzZWxmLmRyYWluKClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBraWxsICgpIHtcbiAgICBxdWV1ZUhlYWQgPSBudWxsXG4gICAgcXVldWVUYWlsID0gbnVsbFxuICAgIHNlbGYuZHJhaW4gPSBub29wXG4gIH1cblxuICBmdW5jdGlvbiBraWxsQW5kRHJhaW4gKCkge1xuICAgIHF1ZXVlSGVhZCA9IG51bGxcbiAgICBxdWV1ZVRhaWwgPSBudWxsXG4gICAgc2VsZi5kcmFpbigpXG4gICAgc2VsZi5kcmFpbiA9IG5vb3BcbiAgfVxuXG4gIGZ1bmN0aW9uIGVycm9yIChoYW5kbGVyKSB7XG4gICAgZXJyb3JIYW5kbGVyID0gaGFuZGxlclxuICB9XG59XG5cbmZ1bmN0aW9uIG5vb3AgKCkge31cblxuZnVuY3Rpb24gVGFzayAoKSB7XG4gIHRoaXMudmFsdWUgPSBudWxsXG4gIHRoaXMuY2FsbGJhY2sgPSBub29wXG4gIHRoaXMubmV4dCA9IG51bGxcbiAgdGhpcy5yZWxlYXNlID0gbm9vcFxuICB0aGlzLmNvbnRleHQgPSBudWxsXG4gIHRoaXMuZXJyb3JIYW5kbGVyID0gbnVsbFxuXG4gIHZhciBzZWxmID0gdGhpc1xuXG4gIHRoaXMud29ya2VkID0gZnVuY3Rpb24gd29ya2VkIChlcnIsIHJlc3VsdCkge1xuICAgIHZhciBjYWxsYmFjayA9IHNlbGYuY2FsbGJhY2tcbiAgICB2YXIgZXJyb3JIYW5kbGVyID0gc2VsZi5lcnJvckhhbmRsZXJcbiAgICB2YXIgdmFsID0gc2VsZi52YWx1ZVxuICAgIHNlbGYudmFsdWUgPSBudWxsXG4gICAgc2VsZi5jYWxsYmFjayA9IG5vb3BcbiAgICBpZiAoc2VsZi5lcnJvckhhbmRsZXIpIHtcbiAgICAgIGVycm9ySGFuZGxlcihlcnIsIHZhbClcbiAgICB9XG4gICAgY2FsbGJhY2suY2FsbChzZWxmLmNvbnRleHQsIGVyciwgcmVzdWx0KVxuICAgIHNlbGYucmVsZWFzZShzZWxmKVxuICB9XG59XG5cbmZ1bmN0aW9uIHF1ZXVlQXNQcm9taXNlZCAoY29udGV4dCwgd29ya2VyLCBjb25jdXJyZW5jeSkge1xuICBpZiAodHlwZW9mIGNvbnRleHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25jdXJyZW5jeSA9IHdvcmtlclxuICAgIHdvcmtlciA9IGNvbnRleHRcbiAgICBjb250ZXh0ID0gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gYXN5bmNXcmFwcGVyIChhcmcsIGNiKSB7XG4gICAgd29ya2VyLmNhbGwodGhpcywgYXJnKVxuICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICBjYihudWxsLCByZXMpXG4gICAgICB9LCBjYilcbiAgfVxuXG4gIHZhciBxdWV1ZSA9IGZhc3RxdWV1ZShjb250ZXh0LCBhc3luY1dyYXBwZXIsIGNvbmN1cnJlbmN5KVxuXG4gIHZhciBwdXNoQ2IgPSBxdWV1ZS5wdXNoXG4gIHZhciB1bnNoaWZ0Q2IgPSBxdWV1ZS51bnNoaWZ0XG5cbiAgcXVldWUucHVzaCA9IHB1c2hcbiAgcXVldWUudW5zaGlmdCA9IHVuc2hpZnRcbiAgcXVldWUuZHJhaW5lZCA9IGRyYWluZWRcblxuICByZXR1cm4gcXVldWVcblxuICBmdW5jdGlvbiBwdXNoICh2YWx1ZSkge1xuICAgIHZhciBwID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgcHVzaENiKHZhbHVlLCBmdW5jdGlvbiAoZXJyLCByZXN1bHQpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShyZXN1bHQpXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICAvLyBMZXQncyBmb3JrIHRoZSBwcm9taXNlIGNoYWluIHRvXG4gICAgLy8gbWFrZSB0aGUgZXJyb3IgYnViYmxlIHVwIHRvIHRoZSB1c2VyIGJ1dFxuICAgIC8vIG5vdCBsZWFkIHRvIGEgdW5oYW5kbGVkUmVqZWN0aW9uXG4gICAgcC5jYXRjaChub29wKVxuXG4gICAgcmV0dXJuIHBcbiAgfVxuXG4gIGZ1bmN0aW9uIHVuc2hpZnQgKHZhbHVlKSB7XG4gICAgdmFyIHAgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB1bnNoaWZ0Q2IodmFsdWUsIGZ1bmN0aW9uIChlcnIsIHJlc3VsdCkge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycilcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKHJlc3VsdClcbiAgICAgIH0pXG4gICAgfSlcblxuICAgIC8vIExldCdzIGZvcmsgdGhlIHByb21pc2UgY2hhaW4gdG9cbiAgICAvLyBtYWtlIHRoZSBlcnJvciBidWJibGUgdXAgdG8gdGhlIHVzZXIgYnV0XG4gICAgLy8gbm90IGxlYWQgdG8gYSB1bmhhbmRsZWRSZWplY3Rpb25cbiAgICBwLmNhdGNoKG5vb3ApXG5cbiAgICByZXR1cm4gcFxuICB9XG5cbiAgZnVuY3Rpb24gZHJhaW5lZCAoKSB7XG4gICAgaWYgKHF1ZXVlLmlkbGUoKSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNEcmFpbiA9IHF1ZXVlLmRyYWluXG5cbiAgICB2YXIgcCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICBxdWV1ZS5kcmFpbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcHJldmlvdXNEcmFpbigpXG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gcFxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmFzdHF1ZXVlXG5tb2R1bGUuZXhwb3J0cy5wcm9taXNlID0gcXVldWVBc1Byb21pc2VkXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmpvaW5QYXRoU2VnbWVudHMgPSBleHBvcnRzLnJlcGxhY2VQYXRoU2VnbWVudFNlcGFyYXRvciA9IGV4cG9ydHMuaXNBcHBsaWVkRmlsdGVyID0gZXhwb3J0cy5pc0ZhdGFsRXJyb3IgPSB2b2lkIDA7XG5mdW5jdGlvbiBpc0ZhdGFsRXJyb3Ioc2V0dGluZ3MsIGVycm9yKSB7XG4gICAgaWYgKHNldHRpbmdzLmVycm9yRmlsdGVyID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gIXNldHRpbmdzLmVycm9yRmlsdGVyKGVycm9yKTtcbn1cbmV4cG9ydHMuaXNGYXRhbEVycm9yID0gaXNGYXRhbEVycm9yO1xuZnVuY3Rpb24gaXNBcHBsaWVkRmlsdGVyKGZpbHRlciwgdmFsdWUpIHtcbiAgICByZXR1cm4gZmlsdGVyID09PSBudWxsIHx8IGZpbHRlcih2YWx1ZSk7XG59XG5leHBvcnRzLmlzQXBwbGllZEZpbHRlciA9IGlzQXBwbGllZEZpbHRlcjtcbmZ1bmN0aW9uIHJlcGxhY2VQYXRoU2VnbWVudFNlcGFyYXRvcihmaWxlcGF0aCwgc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIGZpbGVwYXRoLnNwbGl0KC9bL1xcXFxdLykuam9pbihzZXBhcmF0b3IpO1xufVxuZXhwb3J0cy5yZXBsYWNlUGF0aFNlZ21lbnRTZXBhcmF0b3IgPSByZXBsYWNlUGF0aFNlZ21lbnRTZXBhcmF0b3I7XG5mdW5jdGlvbiBqb2luUGF0aFNlZ21lbnRzKGEsIGIsIHNlcGFyYXRvcikge1xuICAgIGlmIChhID09PSAnJykge1xuICAgICAgICByZXR1cm4gYjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGNvcnJlY3QgaGFuZGxpbmcgb2YgY2FzZXMgd2hlbiB0aGUgZmlyc3Qgc2VnbWVudCBpcyBhIHJvb3QgKGAvYCwgYEM6L2ApIG9yIFVOQyBwYXRoIChgLy8/L0M6L2ApLlxuICAgICAqL1xuICAgIGlmIChhLmVuZHNXaXRoKHNlcGFyYXRvcikpIHtcbiAgICAgICAgcmV0dXJuIGEgKyBiO1xuICAgIH1cbiAgICByZXR1cm4gYSArIHNlcGFyYXRvciArIGI7XG59XG5leHBvcnRzLmpvaW5QYXRoU2VnbWVudHMgPSBqb2luUGF0aFNlZ21lbnRzO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29tbW9uID0gcmVxdWlyZShcIi4vY29tbW9uXCIpO1xuY2xhc3MgUmVhZGVyIHtcbiAgICBjb25zdHJ1Y3Rvcihfcm9vdCwgX3NldHRpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Jvb3QgPSBfcm9vdDtcbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBfc2V0dGluZ3M7XG4gICAgICAgIHRoaXMuX3Jvb3QgPSBjb21tb24ucmVwbGFjZVBhdGhTZWdtZW50U2VwYXJhdG9yKF9yb290LCBfc2V0dGluZ3MucGF0aFNlZ21lbnRTZXBhcmF0b3IpO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFJlYWRlcjtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGV2ZW50c18xID0gcmVxdWlyZShcImV2ZW50c1wiKTtcbmNvbnN0IGZzU2NhbmRpciA9IHJlcXVpcmUoXCJAbm9kZWxpYi9mcy5zY2FuZGlyXCIpO1xuY29uc3QgZmFzdHEgPSByZXF1aXJlKFwiZmFzdHFcIik7XG5jb25zdCBjb21tb24gPSByZXF1aXJlKFwiLi9jb21tb25cIik7XG5jb25zdCByZWFkZXJfMSA9IHJlcXVpcmUoXCIuL3JlYWRlclwiKTtcbmNsYXNzIEFzeW5jUmVhZGVyIGV4dGVuZHMgcmVhZGVyXzEuZGVmYXVsdCB7XG4gICAgY29uc3RydWN0b3IoX3Jvb3QsIF9zZXR0aW5ncykge1xuICAgICAgICBzdXBlcihfcm9vdCwgX3NldHRpbmdzKTtcbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBfc2V0dGluZ3M7XG4gICAgICAgIHRoaXMuX3NjYW5kaXIgPSBmc1NjYW5kaXIuc2NhbmRpcjtcbiAgICAgICAgdGhpcy5fZW1pdHRlciA9IG5ldyBldmVudHNfMS5FdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5fcXVldWUgPSBmYXN0cSh0aGlzLl93b3JrZXIuYmluZCh0aGlzKSwgdGhpcy5fc2V0dGluZ3MuY29uY3VycmVuY3kpO1xuICAgICAgICB0aGlzLl9pc0ZhdGFsRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcXVldWUuZHJhaW4gPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzRmF0YWxFcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXR0ZXIuZW1pdCgnZW5kJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJlYWQoKSB7XG4gICAgICAgIHRoaXMuX2lzRmF0YWxFcnJvciA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcHVzaFRvUXVldWUodGhpcy5fcm9vdCwgdGhpcy5fc2V0dGluZ3MuYmFzZVBhdGgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VtaXR0ZXI7XG4gICAgfVxuICAgIGdldCBpc0Rlc3Ryb3llZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRGVzdHJveWVkO1xuICAgIH1cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5faXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHJlYWRlciBpcyBhbHJlYWR5IGRlc3Ryb3llZCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcXVldWUua2lsbEFuZERyYWluKCk7XG4gICAgfVxuICAgIG9uRW50cnkoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5fZW1pdHRlci5vbignZW50cnknLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIG9uRXJyb3IoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5fZW1pdHRlci5vbmNlKCdlcnJvcicsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgb25FbmQoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5fZW1pdHRlci5vbmNlKCdlbmQnLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIF9wdXNoVG9RdWV1ZShkaXJlY3RvcnksIGJhc2UpIHtcbiAgICAgICAgY29uc3QgcXVldWVJdGVtID0geyBkaXJlY3RvcnksIGJhc2UgfTtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaChxdWV1ZUl0ZW0sIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgaWYgKGVycm9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3dvcmtlcihpdGVtLCBkb25lKSB7XG4gICAgICAgIHRoaXMuX3NjYW5kaXIoaXRlbS5kaXJlY3RvcnksIHRoaXMuX3NldHRpbmdzLmZzU2NhbmRpclNldHRpbmdzLCAoZXJyb3IsIGVudHJpZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRvbmUoZXJyb3IsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlRW50cnkoZW50cnksIGl0ZW0uYmFzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkb25lKG51bGwsIHVuZGVmaW5lZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfaGFuZGxlRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzRGVzdHJveWVkIHx8ICFjb21tb24uaXNGYXRhbEVycm9yKHRoaXMuX3NldHRpbmdzLCBlcnJvcikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pc0ZhdGFsRXJyb3IgPSB0cnVlO1xuICAgICAgICB0aGlzLl9pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2VtaXR0ZXIuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgfVxuICAgIF9oYW5kbGVFbnRyeShlbnRyeSwgYmFzZSkge1xuICAgICAgICBpZiAodGhpcy5faXNEZXN0cm95ZWQgfHwgdGhpcy5faXNGYXRhbEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSBlbnRyeS5wYXRoO1xuICAgICAgICBpZiAoYmFzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBlbnRyeS5wYXRoID0gY29tbW9uLmpvaW5QYXRoU2VnbWVudHMoYmFzZSwgZW50cnkubmFtZSwgdGhpcy5fc2V0dGluZ3MucGF0aFNlZ21lbnRTZXBhcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21tb24uaXNBcHBsaWVkRmlsdGVyKHRoaXMuX3NldHRpbmdzLmVudHJ5RmlsdGVyLCBlbnRyeSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRFbnRyeShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudHJ5LmRpcmVudC5pc0RpcmVjdG9yeSgpICYmIGNvbW1vbi5pc0FwcGxpZWRGaWx0ZXIodGhpcy5fc2V0dGluZ3MuZGVlcEZpbHRlciwgZW50cnkpKSB7XG4gICAgICAgICAgICB0aGlzLl9wdXNoVG9RdWV1ZShmdWxscGF0aCwgYmFzZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogZW50cnkucGF0aCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2VtaXRFbnRyeShlbnRyeSkge1xuICAgICAgICB0aGlzLl9lbWl0dGVyLmVtaXQoJ2VudHJ5JywgZW50cnkpO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IEFzeW5jUmVhZGVyO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgYXN5bmNfMSA9IHJlcXVpcmUoXCIuLi9yZWFkZXJzL2FzeW5jXCIpO1xuY2xhc3MgQXN5bmNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoX3Jvb3QsIF9zZXR0aW5ncykge1xuICAgICAgICB0aGlzLl9yb290ID0gX3Jvb3Q7XG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gX3NldHRpbmdzO1xuICAgICAgICB0aGlzLl9yZWFkZXIgPSBuZXcgYXN5bmNfMS5kZWZhdWx0KHRoaXMuX3Jvb3QsIHRoaXMuX3NldHRpbmdzKTtcbiAgICAgICAgdGhpcy5fc3RvcmFnZSA9IFtdO1xuICAgIH1cbiAgICByZWFkKGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuX3JlYWRlci5vbkVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY2FsbEZhaWx1cmVDYWxsYmFjayhjYWxsYmFjaywgZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcmVhZGVyLm9uRW50cnkoKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zdG9yYWdlLnB1c2goZW50cnkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcmVhZGVyLm9uRW5kKCgpID0+IHtcbiAgICAgICAgICAgIGNhbGxTdWNjZXNzQ2FsbGJhY2soY2FsbGJhY2ssIHRoaXMuX3N0b3JhZ2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcmVhZGVyLnJlYWQoKTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBBc3luY1Byb3ZpZGVyO1xuZnVuY3Rpb24gY2FsbEZhaWx1cmVDYWxsYmFjayhjYWxsYmFjaywgZXJyb3IpIHtcbiAgICBjYWxsYmFjayhlcnJvcik7XG59XG5mdW5jdGlvbiBjYWxsU3VjY2Vzc0NhbGxiYWNrKGNhbGxiYWNrLCBlbnRyaWVzKSB7XG4gICAgY2FsbGJhY2sobnVsbCwgZW50cmllcyk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBzdHJlYW1fMSA9IHJlcXVpcmUoXCJzdHJlYW1cIik7XG5jb25zdCBhc3luY18xID0gcmVxdWlyZShcIi4uL3JlYWRlcnMvYXN5bmNcIik7XG5jbGFzcyBTdHJlYW1Qcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoX3Jvb3QsIF9zZXR0aW5ncykge1xuICAgICAgICB0aGlzLl9yb290ID0gX3Jvb3Q7XG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gX3NldHRpbmdzO1xuICAgICAgICB0aGlzLl9yZWFkZXIgPSBuZXcgYXN5bmNfMS5kZWZhdWx0KHRoaXMuX3Jvb3QsIHRoaXMuX3NldHRpbmdzKTtcbiAgICAgICAgdGhpcy5fc3RyZWFtID0gbmV3IHN0cmVhbV8xLlJlYWRhYmxlKHtcbiAgICAgICAgICAgIG9iamVjdE1vZGU6IHRydWUsXG4gICAgICAgICAgICByZWFkOiAoKSA9PiB7IH0sXG4gICAgICAgICAgICBkZXN0cm95OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9yZWFkZXIuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGVyLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZWFkKCkge1xuICAgICAgICB0aGlzLl9yZWFkZXIub25FcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3N0cmVhbS5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3JlYWRlci5vbkVudHJ5KChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc3RyZWFtLnB1c2goZW50cnkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcmVhZGVyLm9uRW5kKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3N0cmVhbS5wdXNoKG51bGwpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcmVhZGVyLnJlYWQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmVhbTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBTdHJlYW1Qcm92aWRlcjtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGZzU2NhbmRpciA9IHJlcXVpcmUoXCJAbm9kZWxpYi9mcy5zY2FuZGlyXCIpO1xuY29uc3QgY29tbW9uID0gcmVxdWlyZShcIi4vY29tbW9uXCIpO1xuY29uc3QgcmVhZGVyXzEgPSByZXF1aXJlKFwiLi9yZWFkZXJcIik7XG5jbGFzcyBTeW5jUmVhZGVyIGV4dGVuZHMgcmVhZGVyXzEuZGVmYXVsdCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuX3NjYW5kaXIgPSBmc1NjYW5kaXIuc2NhbmRpclN5bmM7XG4gICAgICAgIHRoaXMuX3N0b3JhZ2UgPSBbXTtcbiAgICAgICAgdGhpcy5fcXVldWUgPSBuZXcgU2V0KCk7XG4gICAgfVxuICAgIHJlYWQoKSB7XG4gICAgICAgIHRoaXMuX3B1c2hUb1F1ZXVlKHRoaXMuX3Jvb3QsIHRoaXMuX3NldHRpbmdzLmJhc2VQYXRoKTtcbiAgICAgICAgdGhpcy5faGFuZGxlUXVldWUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0b3JhZ2U7XG4gICAgfVxuICAgIF9wdXNoVG9RdWV1ZShkaXJlY3RvcnksIGJhc2UpIHtcbiAgICAgICAgdGhpcy5fcXVldWUuYWRkKHsgZGlyZWN0b3J5LCBiYXNlIH0pO1xuICAgIH1cbiAgICBfaGFuZGxlUXVldWUoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLl9xdWV1ZS52YWx1ZXMoKSkge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlRGlyZWN0b3J5KGl0ZW0uZGlyZWN0b3J5LCBpdGVtLmJhc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9oYW5kbGVEaXJlY3RvcnkoZGlyZWN0b3J5LCBiYXNlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gdGhpcy5fc2NhbmRpcihkaXJlY3RvcnksIHRoaXMuX3NldHRpbmdzLmZzU2NhbmRpclNldHRpbmdzKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUVudHJ5KGVudHJ5LCBiYXNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfaGFuZGxlRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgaWYgKCFjb21tb24uaXNGYXRhbEVycm9yKHRoaXMuX3NldHRpbmdzLCBlcnJvcikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgX2hhbmRsZUVudHJ5KGVudHJ5LCBiYXNlKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gZW50cnkucGF0aDtcbiAgICAgICAgaWYgKGJhc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZW50cnkucGF0aCA9IGNvbW1vbi5qb2luUGF0aFNlZ21lbnRzKGJhc2UsIGVudHJ5Lm5hbWUsIHRoaXMuX3NldHRpbmdzLnBhdGhTZWdtZW50U2VwYXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tbW9uLmlzQXBwbGllZEZpbHRlcih0aGlzLl9zZXR0aW5ncy5lbnRyeUZpbHRlciwgZW50cnkpKSB7XG4gICAgICAgICAgICB0aGlzLl9wdXNoVG9TdG9yYWdlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW50cnkuZGlyZW50LmlzRGlyZWN0b3J5KCkgJiYgY29tbW9uLmlzQXBwbGllZEZpbHRlcih0aGlzLl9zZXR0aW5ncy5kZWVwRmlsdGVyLCBlbnRyeSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3B1c2hUb1F1ZXVlKGZ1bGxwYXRoLCBiYXNlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBlbnRyeS5wYXRoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfcHVzaFRvU3RvcmFnZShlbnRyeSkge1xuICAgICAgICB0aGlzLl9zdG9yYWdlLnB1c2goZW50cnkpO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFN5bmNSZWFkZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBzeW5jXzEgPSByZXF1aXJlKFwiLi4vcmVhZGVycy9zeW5jXCIpO1xuY2xhc3MgU3luY1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3Rvcihfcm9vdCwgX3NldHRpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Jvb3QgPSBfcm9vdDtcbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBfc2V0dGluZ3M7XG4gICAgICAgIHRoaXMuX3JlYWRlciA9IG5ldyBzeW5jXzEuZGVmYXVsdCh0aGlzLl9yb290LCB0aGlzLl9zZXR0aW5ncyk7XG4gICAgfVxuICAgIHJlYWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWFkZXIucmVhZCgpO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFN5bmNQcm92aWRlcjtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcbmNvbnN0IGZzU2NhbmRpciA9IHJlcXVpcmUoXCJAbm9kZWxpYi9mcy5zY2FuZGlyXCIpO1xuY2xhc3MgU2V0dGluZ3Mge1xuICAgIGNvbnN0cnVjdG9yKF9vcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuICAgICAgICB0aGlzLmJhc2VQYXRoID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5iYXNlUGF0aCwgdW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy5jb25jdXJyZW5jeSA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMuY29uY3VycmVuY3ksIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7XG4gICAgICAgIHRoaXMuZGVlcEZpbHRlciA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMuZGVlcEZpbHRlciwgbnVsbCk7XG4gICAgICAgIHRoaXMuZW50cnlGaWx0ZXIgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLmVudHJ5RmlsdGVyLCBudWxsKTtcbiAgICAgICAgdGhpcy5lcnJvckZpbHRlciA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMuZXJyb3JGaWx0ZXIsIG51bGwpO1xuICAgICAgICB0aGlzLnBhdGhTZWdtZW50U2VwYXJhdG9yID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5wYXRoU2VnbWVudFNlcGFyYXRvciwgcGF0aC5zZXApO1xuICAgICAgICB0aGlzLmZzU2NhbmRpclNldHRpbmdzID0gbmV3IGZzU2NhbmRpci5TZXR0aW5ncyh7XG4gICAgICAgICAgICBmb2xsb3dTeW1ib2xpY0xpbmtzOiB0aGlzLl9vcHRpb25zLmZvbGxvd1N5bWJvbGljTGlua3MsXG4gICAgICAgICAgICBmczogdGhpcy5fb3B0aW9ucy5mcyxcbiAgICAgICAgICAgIHBhdGhTZWdtZW50U2VwYXJhdG9yOiB0aGlzLl9vcHRpb25zLnBhdGhTZWdtZW50U2VwYXJhdG9yLFxuICAgICAgICAgICAgc3RhdHM6IHRoaXMuX29wdGlvbnMuc3RhdHMsXG4gICAgICAgICAgICB0aHJvd0Vycm9yT25Ccm9rZW5TeW1ib2xpY0xpbms6IHRoaXMuX29wdGlvbnMudGhyb3dFcnJvck9uQnJva2VuU3ltYm9saWNMaW5rXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfZ2V0VmFsdWUob3B0aW9uLCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gb3B0aW9uICE9PSBudWxsICYmIG9wdGlvbiAhPT0gdm9pZCAwID8gb3B0aW9uIDogdmFsdWU7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gU2V0dGluZ3M7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNldHRpbmdzID0gZXhwb3J0cy53YWxrU3RyZWFtID0gZXhwb3J0cy53YWxrU3luYyA9IGV4cG9ydHMud2FsayA9IHZvaWQgMDtcbmNvbnN0IGFzeW5jXzEgPSByZXF1aXJlKFwiLi9wcm92aWRlcnMvYXN5bmNcIik7XG5jb25zdCBzdHJlYW1fMSA9IHJlcXVpcmUoXCIuL3Byb3ZpZGVycy9zdHJlYW1cIik7XG5jb25zdCBzeW5jXzEgPSByZXF1aXJlKFwiLi9wcm92aWRlcnMvc3luY1wiKTtcbmNvbnN0IHNldHRpbmdzXzEgPSByZXF1aXJlKFwiLi9zZXR0aW5nc1wiKTtcbmV4cG9ydHMuU2V0dGluZ3MgPSBzZXR0aW5nc18xLmRlZmF1bHQ7XG5mdW5jdGlvbiB3YWxrKGRpcmVjdG9yeSwgb3B0aW9uc09yU2V0dGluZ3NPckNhbGxiYWNrLCBjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yU2V0dGluZ3NPckNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG5ldyBhc3luY18xLmRlZmF1bHQoZGlyZWN0b3J5LCBnZXRTZXR0aW5ncygpKS5yZWFkKG9wdGlvbnNPclNldHRpbmdzT3JDYWxsYmFjayk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbmV3IGFzeW5jXzEuZGVmYXVsdChkaXJlY3RvcnksIGdldFNldHRpbmdzKG9wdGlvbnNPclNldHRpbmdzT3JDYWxsYmFjaykpLnJlYWQoY2FsbGJhY2spO1xufVxuZXhwb3J0cy53YWxrID0gd2FsaztcbmZ1bmN0aW9uIHdhbGtTeW5jKGRpcmVjdG9yeSwgb3B0aW9uc09yU2V0dGluZ3MpIHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IGdldFNldHRpbmdzKG9wdGlvbnNPclNldHRpbmdzKTtcbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBzeW5jXzEuZGVmYXVsdChkaXJlY3RvcnksIHNldHRpbmdzKTtcbiAgICByZXR1cm4gcHJvdmlkZXIucmVhZCgpO1xufVxuZXhwb3J0cy53YWxrU3luYyA9IHdhbGtTeW5jO1xuZnVuY3Rpb24gd2Fsa1N0cmVhbShkaXJlY3RvcnksIG9wdGlvbnNPclNldHRpbmdzKSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncyhvcHRpb25zT3JTZXR0aW5ncyk7XG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgc3RyZWFtXzEuZGVmYXVsdChkaXJlY3RvcnksIHNldHRpbmdzKTtcbiAgICByZXR1cm4gcHJvdmlkZXIucmVhZCgpO1xufVxuZXhwb3J0cy53YWxrU3RyZWFtID0gd2Fsa1N0cmVhbTtcbmZ1bmN0aW9uIGdldFNldHRpbmdzKHNldHRpbmdzT3JPcHRpb25zID0ge30pIHtcbiAgICBpZiAoc2V0dGluZ3NPck9wdGlvbnMgaW5zdGFuY2VvZiBzZXR0aW5nc18xLmRlZmF1bHQpIHtcbiAgICAgICAgcmV0dXJuIHNldHRpbmdzT3JPcHRpb25zO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IHNldHRpbmdzXzEuZGVmYXVsdChzZXR0aW5nc09yT3B0aW9ucyk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XG5jb25zdCBmc1N0YXQgPSByZXF1aXJlKFwiQG5vZGVsaWIvZnMuc3RhdFwiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpO1xuY2xhc3MgUmVhZGVyIHtcbiAgICBjb25zdHJ1Y3Rvcihfc2V0dGluZ3MpIHtcbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBfc2V0dGluZ3M7XG4gICAgICAgIHRoaXMuX2ZzU3RhdFNldHRpbmdzID0gbmV3IGZzU3RhdC5TZXR0aW5ncyh7XG4gICAgICAgICAgICBmb2xsb3dTeW1ib2xpY0xpbms6IHRoaXMuX3NldHRpbmdzLmZvbGxvd1N5bWJvbGljTGlua3MsXG4gICAgICAgICAgICBmczogdGhpcy5fc2V0dGluZ3MuZnMsXG4gICAgICAgICAgICB0aHJvd0Vycm9yT25Ccm9rZW5TeW1ib2xpY0xpbms6IHRoaXMuX3NldHRpbmdzLmZvbGxvd1N5bWJvbGljTGlua3NcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9nZXRGdWxsRW50cnlQYXRoKGZpbGVwYXRoKSB7XG4gICAgICAgIHJldHVybiBwYXRoLnJlc29sdmUodGhpcy5fc2V0dGluZ3MuY3dkLCBmaWxlcGF0aCk7XG4gICAgfVxuICAgIF9tYWtlRW50cnkoc3RhdHMsIHBhdHRlcm4pIHtcbiAgICAgICAgY29uc3QgZW50cnkgPSB7XG4gICAgICAgICAgICBuYW1lOiBwYXR0ZXJuLFxuICAgICAgICAgICAgcGF0aDogcGF0dGVybixcbiAgICAgICAgICAgIGRpcmVudDogdXRpbHMuZnMuY3JlYXRlRGlyZW50RnJvbVN0YXRzKHBhdHRlcm4sIHN0YXRzKVxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3Muc3RhdHMpIHtcbiAgICAgICAgICAgIGVudHJ5LnN0YXRzID0gc3RhdHM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgIH1cbiAgICBfaXNGYXRhbEVycm9yKGVycm9yKSB7XG4gICAgICAgIHJldHVybiAhdXRpbHMuZXJybm8uaXNFbm9lbnRDb2RlRXJyb3IoZXJyb3IpICYmICF0aGlzLl9zZXR0aW5ncy5zdXBwcmVzc0Vycm9ycztcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBSZWFkZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBzdHJlYW1fMSA9IHJlcXVpcmUoXCJzdHJlYW1cIik7XG5jb25zdCBmc1N0YXQgPSByZXF1aXJlKFwiQG5vZGVsaWIvZnMuc3RhdFwiKTtcbmNvbnN0IGZzV2FsayA9IHJlcXVpcmUoXCJAbm9kZWxpYi9mcy53YWxrXCIpO1xuY29uc3QgcmVhZGVyXzEgPSByZXF1aXJlKFwiLi9yZWFkZXJcIik7XG5jbGFzcyBSZWFkZXJTdHJlYW0gZXh0ZW5kcyByZWFkZXJfMS5kZWZhdWx0IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5fd2Fsa1N0cmVhbSA9IGZzV2Fsay53YWxrU3RyZWFtO1xuICAgICAgICB0aGlzLl9zdGF0ID0gZnNTdGF0LnN0YXQ7XG4gICAgfVxuICAgIGR5bmFtaWMocm9vdCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Fsa1N0cmVhbShyb290LCBvcHRpb25zKTtcbiAgICB9XG4gICAgc3RhdGljKHBhdHRlcm5zLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGZpbGVwYXRocyA9IHBhdHRlcm5zLm1hcCh0aGlzLl9nZXRGdWxsRW50cnlQYXRoLCB0aGlzKTtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gbmV3IHN0cmVhbV8xLlBhc3NUaHJvdWdoKHsgb2JqZWN0TW9kZTogdHJ1ZSB9KTtcbiAgICAgICAgc3RyZWFtLl93cml0ZSA9IChpbmRleCwgX2VuYywgZG9uZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJ5KGZpbGVwYXRoc1tpbmRleF0sIHBhdHRlcm5zW2luZGV4XSwgb3B0aW9ucylcbiAgICAgICAgICAgICAgICAudGhlbigoZW50cnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkgIT09IG51bGwgJiYgb3B0aW9ucy5lbnRyeUZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnB1c2goZW50cnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IGZpbGVwYXRocy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbS5lbmQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZG9uZSk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXBhdGhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzdHJlYW0ud3JpdGUoaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cmVhbTtcbiAgICB9XG4gICAgX2dldEVudHJ5KGZpbGVwYXRoLCBwYXR0ZXJuLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRTdGF0KGZpbGVwYXRoKVxuICAgICAgICAgICAgLnRoZW4oKHN0YXRzKSA9PiB0aGlzLl9tYWtlRW50cnkoc3RhdHMsIHBhdHRlcm4pKVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZXJyb3JGaWx0ZXIoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9nZXRTdGF0KGZpbGVwYXRoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0KGZpbGVwYXRoLCB0aGlzLl9mc1N0YXRTZXR0aW5ncywgKGVycm9yLCBzdGF0cykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvciA9PT0gbnVsbCA/IHJlc29sdmUoc3RhdHMpIDogcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBSZWFkZXJTdHJlYW07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBmc1dhbGsgPSByZXF1aXJlKFwiQG5vZGVsaWIvZnMud2Fsa1wiKTtcbmNvbnN0IHJlYWRlcl8xID0gcmVxdWlyZShcIi4vcmVhZGVyXCIpO1xuY29uc3Qgc3RyZWFtXzEgPSByZXF1aXJlKFwiLi9zdHJlYW1cIik7XG5jbGFzcyBSZWFkZXJBc3luYyBleHRlbmRzIHJlYWRlcl8xLmRlZmF1bHQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLl93YWxrQXN5bmMgPSBmc1dhbGsud2FsaztcbiAgICAgICAgdGhpcy5fcmVhZGVyU3RyZWFtID0gbmV3IHN0cmVhbV8xLmRlZmF1bHQodGhpcy5fc2V0dGluZ3MpO1xuICAgIH1cbiAgICBkeW5hbWljKHJvb3QsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3dhbGtBc3luYyhyb290LCBvcHRpb25zLCAoZXJyb3IsIGVudHJpZXMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlbnRyaWVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBzdGF0aWMocGF0dGVybnMsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IFtdO1xuICAgICAgICBjb25zdCBzdHJlYW0gPSB0aGlzLl9yZWFkZXJTdHJlYW0uc3RhdGljKHBhdHRlcm5zLCBvcHRpb25zKTtcbiAgICAgICAgLy8gQWZ0ZXIgIzIzNSwgcmVwbGFjZSBpdCB3aXRoIGFuIGFzeW5jaHJvbm91cyBpdGVyYXRvci5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHN0cmVhbS5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICAgICAgICBzdHJlYW0ub24oJ2RhdGEnLCAoZW50cnkpID0+IGVudHJpZXMucHVzaChlbnRyeSkpO1xuICAgICAgICAgICAgc3RyZWFtLm9uY2UoJ2VuZCcsICgpID0+IHJlc29sdmUoZW50cmllcykpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBSZWFkZXJBc3luYztcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzXCIpO1xuY2xhc3MgTWF0Y2hlciB7XG4gICAgY29uc3RydWN0b3IoX3BhdHRlcm5zLCBfc2V0dGluZ3MsIF9taWNyb21hdGNoT3B0aW9ucykge1xuICAgICAgICB0aGlzLl9wYXR0ZXJucyA9IF9wYXR0ZXJucztcbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBfc2V0dGluZ3M7XG4gICAgICAgIHRoaXMuX21pY3JvbWF0Y2hPcHRpb25zID0gX21pY3JvbWF0Y2hPcHRpb25zO1xuICAgICAgICB0aGlzLl9zdG9yYWdlID0gW107XG4gICAgICAgIHRoaXMuX2ZpbGxTdG9yYWdlKCk7XG4gICAgfVxuICAgIF9maWxsU3RvcmFnZSgpIHtcbiAgICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHRoaXMuX3BhdHRlcm5zKSB7XG4gICAgICAgICAgICBjb25zdCBzZWdtZW50cyA9IHRoaXMuX2dldFBhdHRlcm5TZWdtZW50cyhwYXR0ZXJuKTtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25zID0gdGhpcy5fc3BsaXRTZWdtZW50c0ludG9TZWN0aW9ucyhzZWdtZW50cyk7XG4gICAgICAgICAgICB0aGlzLl9zdG9yYWdlLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBzZWN0aW9ucy5sZW5ndGggPD0gMSxcbiAgICAgICAgICAgICAgICBwYXR0ZXJuLFxuICAgICAgICAgICAgICAgIHNlZ21lbnRzLFxuICAgICAgICAgICAgICAgIHNlY3Rpb25zXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfZ2V0UGF0dGVyblNlZ21lbnRzKHBhdHRlcm4pIHtcbiAgICAgICAgY29uc3QgcGFydHMgPSB1dGlscy5wYXR0ZXJuLmdldFBhdHRlcm5QYXJ0cyhwYXR0ZXJuLCB0aGlzLl9taWNyb21hdGNoT3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBwYXJ0cy5tYXAoKHBhcnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGR5bmFtaWMgPSB1dGlscy5wYXR0ZXJuLmlzRHluYW1pY1BhdHRlcm4ocGFydCwgdGhpcy5fc2V0dGluZ3MpO1xuICAgICAgICAgICAgaWYgKCFkeW5hbWljKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm46IHBhcnRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkeW5hbWljOiB0cnVlLFxuICAgICAgICAgICAgICAgIHBhdHRlcm46IHBhcnQsXG4gICAgICAgICAgICAgICAgcGF0dGVyblJlOiB1dGlscy5wYXR0ZXJuLm1ha2VSZShwYXJ0LCB0aGlzLl9taWNyb21hdGNoT3B0aW9ucylcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfc3BsaXRTZWdtZW50c0ludG9TZWN0aW9ucyhzZWdtZW50cykge1xuICAgICAgICByZXR1cm4gdXRpbHMuYXJyYXkuc3BsaXRXaGVuKHNlZ21lbnRzLCAoc2VnbWVudCkgPT4gc2VnbWVudC5keW5hbWljICYmIHV0aWxzLnBhdHRlcm4uaGFzR2xvYlN0YXIoc2VnbWVudC5wYXR0ZXJuKSk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gTWF0Y2hlcjtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IG1hdGNoZXJfMSA9IHJlcXVpcmUoXCIuL21hdGNoZXJcIik7XG5jbGFzcyBQYXJ0aWFsTWF0Y2hlciBleHRlbmRzIG1hdGNoZXJfMS5kZWZhdWx0IHtcbiAgICBtYXRjaChmaWxlcGF0aCkge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IGZpbGVwYXRoLnNwbGl0KCcvJyk7XG4gICAgICAgIGNvbnN0IGxldmVscyA9IHBhcnRzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcGF0dGVybnMgPSB0aGlzLl9zdG9yYWdlLmZpbHRlcigoaW5mbykgPT4gIWluZm8uY29tcGxldGUgfHwgaW5mby5zZWdtZW50cy5sZW5ndGggPiBsZXZlbHMpO1xuICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb24gPSBwYXR0ZXJuLnNlY3Rpb25zWzBdO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJbiB0aGlzIGNhc2UsIHRoZSBwYXR0ZXJuIGhhcyBhIGdsb2JzdGFyIGFuZCB3ZSBtdXN0IHJlYWQgYWxsIGRpcmVjdG9yaWVzIHVuY29uZGl0aW9uYWxseSxcbiAgICAgICAgICAgICAqIGJ1dCBvbmx5IGlmIHRoZSBsZXZlbCBoYXMgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBmaXJzdCBncm91cC5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBmaXh0dXJlcy97YSxifS8qKlxuICAgICAgICAgICAgICogIF4gdHJ1ZS9mYWxzZSAgXiBhbHdheXMgdHJ1ZVxuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICghcGF0dGVybi5jb21wbGV0ZSAmJiBsZXZlbHMgPiBzZWN0aW9uLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBwYXJ0cy5ldmVyeSgocGFydCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWdtZW50ID0gcGF0dGVybi5zZWdtZW50c1tpbmRleF07XG4gICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQuZHluYW1pYyAmJiBzZWdtZW50LnBhdHRlcm5SZS50ZXN0KHBhcnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXNlZ21lbnQuZHluYW1pYyAmJiBzZWdtZW50LnBhdHRlcm4gPT09IHBhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFBhcnRpYWxNYXRjaGVyO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHNcIik7XG5jb25zdCBwYXJ0aWFsXzEgPSByZXF1aXJlKFwiLi4vbWF0Y2hlcnMvcGFydGlhbFwiKTtcbmNsYXNzIERlZXBGaWx0ZXIge1xuICAgIGNvbnN0cnVjdG9yKF9zZXR0aW5ncywgX21pY3JvbWF0Y2hPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gX3NldHRpbmdzO1xuICAgICAgICB0aGlzLl9taWNyb21hdGNoT3B0aW9ucyA9IF9taWNyb21hdGNoT3B0aW9ucztcbiAgICB9XG4gICAgZ2V0RmlsdGVyKGJhc2VQYXRoLCBwb3NpdGl2ZSwgbmVnYXRpdmUpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlciA9IHRoaXMuX2dldE1hdGNoZXIocG9zaXRpdmUpO1xuICAgICAgICBjb25zdCBuZWdhdGl2ZVJlID0gdGhpcy5fZ2V0TmVnYXRpdmVQYXR0ZXJuc1JlKG5lZ2F0aXZlKTtcbiAgICAgICAgcmV0dXJuIChlbnRyeSkgPT4gdGhpcy5fZmlsdGVyKGJhc2VQYXRoLCBlbnRyeSwgbWF0Y2hlciwgbmVnYXRpdmVSZSk7XG4gICAgfVxuICAgIF9nZXRNYXRjaGVyKHBhdHRlcm5zKSB7XG4gICAgICAgIHJldHVybiBuZXcgcGFydGlhbF8xLmRlZmF1bHQocGF0dGVybnMsIHRoaXMuX3NldHRpbmdzLCB0aGlzLl9taWNyb21hdGNoT3B0aW9ucyk7XG4gICAgfVxuICAgIF9nZXROZWdhdGl2ZVBhdHRlcm5zUmUocGF0dGVybnMpIHtcbiAgICAgICAgY29uc3QgYWZmZWN0RGVwdGhPZlJlYWRpbmdQYXR0ZXJucyA9IHBhdHRlcm5zLmZpbHRlcih1dGlscy5wYXR0ZXJuLmlzQWZmZWN0RGVwdGhPZlJlYWRpbmdQYXR0ZXJuKTtcbiAgICAgICAgcmV0dXJuIHV0aWxzLnBhdHRlcm4uY29udmVydFBhdHRlcm5zVG9SZShhZmZlY3REZXB0aE9mUmVhZGluZ1BhdHRlcm5zLCB0aGlzLl9taWNyb21hdGNoT3B0aW9ucyk7XG4gICAgfVxuICAgIF9maWx0ZXIoYmFzZVBhdGgsIGVudHJ5LCBtYXRjaGVyLCBuZWdhdGl2ZVJlKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc1NraXBwZWRCeURlZXAoYmFzZVBhdGgsIGVudHJ5LnBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lzU2tpcHBlZFN5bWJvbGljTGluayhlbnRyeSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWxlcGF0aCA9IHV0aWxzLnBhdGgucmVtb3ZlTGVhZGluZ0RvdFNlZ21lbnQoZW50cnkucGF0aCk7XG4gICAgICAgIGlmICh0aGlzLl9pc1NraXBwZWRCeVBvc2l0aXZlUGF0dGVybnMoZmlsZXBhdGgsIG1hdGNoZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzU2tpcHBlZEJ5TmVnYXRpdmVQYXR0ZXJucyhmaWxlcGF0aCwgbmVnYXRpdmVSZSk7XG4gICAgfVxuICAgIF9pc1NraXBwZWRCeURlZXAoYmFzZVBhdGgsIGVudHJ5UGF0aCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogQXZvaWQgdW5uZWNlc3NhcnkgZGVwdGggY2FsY3VsYXRpb25zIHdoZW4gaXQgZG9lc24ndCBtYXR0ZXIuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3MuZGVlcCA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cnlMZXZlbChiYXNlUGF0aCwgZW50cnlQYXRoKSA+PSB0aGlzLl9zZXR0aW5ncy5kZWVwO1xuICAgIH1cbiAgICBfZ2V0RW50cnlMZXZlbChiYXNlUGF0aCwgZW50cnlQYXRoKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5UGF0aERlcHRoID0gZW50cnlQYXRoLnNwbGl0KCcvJykubGVuZ3RoO1xuICAgICAgICBpZiAoYmFzZVBhdGggPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gZW50cnlQYXRoRGVwdGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmFzZVBhdGhEZXB0aCA9IGJhc2VQYXRoLnNwbGl0KCcvJykubGVuZ3RoO1xuICAgICAgICByZXR1cm4gZW50cnlQYXRoRGVwdGggLSBiYXNlUGF0aERlcHRoO1xuICAgIH1cbiAgICBfaXNTa2lwcGVkU3ltYm9saWNMaW5rKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5fc2V0dGluZ3MuZm9sbG93U3ltYm9saWNMaW5rcyAmJiBlbnRyeS5kaXJlbnQuaXNTeW1ib2xpY0xpbmsoKTtcbiAgICB9XG4gICAgX2lzU2tpcHBlZEJ5UG9zaXRpdmVQYXR0ZXJucyhlbnRyeVBhdGgsIG1hdGNoZXIpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLl9zZXR0aW5ncy5iYXNlTmFtZU1hdGNoICYmICFtYXRjaGVyLm1hdGNoKGVudHJ5UGF0aCk7XG4gICAgfVxuICAgIF9pc1NraXBwZWRCeU5lZ2F0aXZlUGF0dGVybnMoZW50cnlQYXRoLCBwYXR0ZXJuc1JlKSB7XG4gICAgICAgIHJldHVybiAhdXRpbHMucGF0dGVybi5tYXRjaEFueShlbnRyeVBhdGgsIHBhdHRlcm5zUmUpO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IERlZXBGaWx0ZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKTtcbmNsYXNzIEVudHJ5RmlsdGVyIHtcbiAgICBjb25zdHJ1Y3Rvcihfc2V0dGluZ3MsIF9taWNyb21hdGNoT3B0aW9ucykge1xuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IF9zZXR0aW5ncztcbiAgICAgICAgdGhpcy5fbWljcm9tYXRjaE9wdGlvbnMgPSBfbWljcm9tYXRjaE9wdGlvbnM7XG4gICAgICAgIHRoaXMuaW5kZXggPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIGdldEZpbHRlcihwb3NpdGl2ZSwgbmVnYXRpdmUpIHtcbiAgICAgICAgY29uc3QgcG9zaXRpdmVSZSA9IHV0aWxzLnBhdHRlcm4uY29udmVydFBhdHRlcm5zVG9SZShwb3NpdGl2ZSwgdGhpcy5fbWljcm9tYXRjaE9wdGlvbnMpO1xuICAgICAgICBjb25zdCBuZWdhdGl2ZVJlID0gdXRpbHMucGF0dGVybi5jb252ZXJ0UGF0dGVybnNUb1JlKG5lZ2F0aXZlLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX21pY3JvbWF0Y2hPcHRpb25zKSwgeyBkb3Q6IHRydWUgfSkpO1xuICAgICAgICByZXR1cm4gKGVudHJ5KSA9PiB0aGlzLl9maWx0ZXIoZW50cnksIHBvc2l0aXZlUmUsIG5lZ2F0aXZlUmUpO1xuICAgIH1cbiAgICBfZmlsdGVyKGVudHJ5LCBwb3NpdGl2ZVJlLCBuZWdhdGl2ZVJlKSB7XG4gICAgICAgIGNvbnN0IGZpbGVwYXRoID0gdXRpbHMucGF0aC5yZW1vdmVMZWFkaW5nRG90U2VnbWVudChlbnRyeS5wYXRoKTtcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLnVuaXF1ZSAmJiB0aGlzLl9pc0R1cGxpY2F0ZUVudHJ5KGZpbGVwYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9vbmx5RmlsZUZpbHRlcihlbnRyeSkgfHwgdGhpcy5fb25seURpcmVjdG9yeUZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5faXNTa2lwcGVkQnlBYnNvbHV0ZU5lZ2F0aXZlUGF0dGVybnMoZmlsZXBhdGgsIG5lZ2F0aXZlUmUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNEaXJlY3RvcnkgPSBlbnRyeS5kaXJlbnQuaXNEaXJlY3RvcnkoKTtcbiAgICAgICAgY29uc3QgaXNNYXRjaGVkID0gdGhpcy5faXNNYXRjaFRvUGF0dGVybnMoZmlsZXBhdGgsIHBvc2l0aXZlUmUsIGlzRGlyZWN0b3J5KSAmJiAhdGhpcy5faXNNYXRjaFRvUGF0dGVybnMoZmlsZXBhdGgsIG5lZ2F0aXZlUmUsIGlzRGlyZWN0b3J5KTtcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLnVuaXF1ZSAmJiBpc01hdGNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUluZGV4UmVjb3JkKGZpbGVwYXRoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNNYXRjaGVkO1xuICAgIH1cbiAgICBfaXNEdXBsaWNhdGVFbnRyeShmaWxlcGF0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleC5oYXMoZmlsZXBhdGgpO1xuICAgIH1cbiAgICBfY3JlYXRlSW5kZXhSZWNvcmQoZmlsZXBhdGgpIHtcbiAgICAgICAgdGhpcy5pbmRleC5zZXQoZmlsZXBhdGgsIHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIF9vbmx5RmlsZUZpbHRlcihlbnRyeSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3Mub25seUZpbGVzICYmICFlbnRyeS5kaXJlbnQuaXNGaWxlKCk7XG4gICAgfVxuICAgIF9vbmx5RGlyZWN0b3J5RmlsdGVyKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5vbmx5RGlyZWN0b3JpZXMgJiYgIWVudHJ5LmRpcmVudC5pc0RpcmVjdG9yeSgpO1xuICAgIH1cbiAgICBfaXNTa2lwcGVkQnlBYnNvbHV0ZU5lZ2F0aXZlUGF0dGVybnMoZW50cnlQYXRoLCBwYXR0ZXJuc1JlKSB7XG4gICAgICAgIGlmICghdGhpcy5fc2V0dGluZ3MuYWJzb2x1dGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmdWxscGF0aCA9IHV0aWxzLnBhdGgubWFrZUFic29sdXRlKHRoaXMuX3NldHRpbmdzLmN3ZCwgZW50cnlQYXRoKTtcbiAgICAgICAgcmV0dXJuIHV0aWxzLnBhdHRlcm4ubWF0Y2hBbnkoZnVsbHBhdGgsIHBhdHRlcm5zUmUpO1xuICAgIH1cbiAgICBfaXNNYXRjaFRvUGF0dGVybnMoZmlsZXBhdGgsIHBhdHRlcm5zUmUsIGlzRGlyZWN0b3J5KSB7XG4gICAgICAgIC8vIFRyeWluZyB0byBtYXRjaCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgYnkgcGF0dGVybnMuXG4gICAgICAgIGNvbnN0IGlzTWF0Y2hlZCA9IHV0aWxzLnBhdHRlcm4ubWF0Y2hBbnkoZmlsZXBhdGgsIHBhdHRlcm5zUmUpO1xuICAgICAgICAvLyBBIHBhdHRlcm4gd2l0aCBhIHRyYWlsbGluZyBzbGFzaCBjYW4gYmUgdXNlZCBmb3IgZGlyZWN0b3J5IG1hdGNoaW5nLlxuICAgICAgICAvLyBUbyBhcHBseSBzdWNoIHBhdHRlcm4sIHdlIG5lZWQgdG8gYWRkIGEgdHJhbGxpbmcgc2xhc2ggdG8gdGhlIHBhdGguXG4gICAgICAgIGlmICghaXNNYXRjaGVkICYmIGlzRGlyZWN0b3J5KSB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbHMucGF0dGVybi5tYXRjaEFueShmaWxlcGF0aCArICcvJywgcGF0dGVybnNSZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzTWF0Y2hlZDtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBFbnRyeUZpbHRlcjtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzXCIpO1xuY2xhc3MgRXJyb3JGaWx0ZXIge1xuICAgIGNvbnN0cnVjdG9yKF9zZXR0aW5ncykge1xuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IF9zZXR0aW5ncztcbiAgICB9XG4gICAgZ2V0RmlsdGVyKCkge1xuICAgICAgICByZXR1cm4gKGVycm9yKSA9PiB0aGlzLl9pc05vbkZhdGFsRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgICBfaXNOb25GYXRhbEVycm9yKGVycm9yKSB7XG4gICAgICAgIHJldHVybiB1dGlscy5lcnJuby5pc0Vub2VudENvZGVFcnJvcihlcnJvcikgfHwgdGhpcy5fc2V0dGluZ3Muc3VwcHJlc3NFcnJvcnM7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gRXJyb3JGaWx0ZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKTtcbmNsYXNzIEVudHJ5VHJhbnNmb3JtZXIge1xuICAgIGNvbnN0cnVjdG9yKF9zZXR0aW5ncykge1xuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IF9zZXR0aW5ncztcbiAgICB9XG4gICAgZ2V0VHJhbnNmb3JtZXIoKSB7XG4gICAgICAgIHJldHVybiAoZW50cnkpID0+IHRoaXMuX3RyYW5zZm9ybShlbnRyeSk7XG4gICAgfVxuICAgIF90cmFuc2Zvcm0oZW50cnkpIHtcbiAgICAgICAgbGV0IGZpbGVwYXRoID0gZW50cnkucGF0aDtcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLmFic29sdXRlKSB7XG4gICAgICAgICAgICBmaWxlcGF0aCA9IHV0aWxzLnBhdGgubWFrZUFic29sdXRlKHRoaXMuX3NldHRpbmdzLmN3ZCwgZmlsZXBhdGgpO1xuICAgICAgICAgICAgZmlsZXBhdGggPSB1dGlscy5wYXRoLnVuaXhpZnkoZmlsZXBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy5tYXJrRGlyZWN0b3JpZXMgJiYgZW50cnkuZGlyZW50LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgIGZpbGVwYXRoICs9ICcvJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX3NldHRpbmdzLm9iamVjdE1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWxlcGF0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBlbnRyeSksIHsgcGF0aDogZmlsZXBhdGggfSk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gRW50cnlUcmFuc2Zvcm1lcjtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcbmNvbnN0IGRlZXBfMSA9IHJlcXVpcmUoXCIuL2ZpbHRlcnMvZGVlcFwiKTtcbmNvbnN0IGVudHJ5XzEgPSByZXF1aXJlKFwiLi9maWx0ZXJzL2VudHJ5XCIpO1xuY29uc3QgZXJyb3JfMSA9IHJlcXVpcmUoXCIuL2ZpbHRlcnMvZXJyb3JcIik7XG5jb25zdCBlbnRyeV8yID0gcmVxdWlyZShcIi4vdHJhbnNmb3JtZXJzL2VudHJ5XCIpO1xuY2xhc3MgUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKF9zZXR0aW5ncykge1xuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IF9zZXR0aW5ncztcbiAgICAgICAgdGhpcy5lcnJvckZpbHRlciA9IG5ldyBlcnJvcl8xLmRlZmF1bHQodGhpcy5fc2V0dGluZ3MpO1xuICAgICAgICB0aGlzLmVudHJ5RmlsdGVyID0gbmV3IGVudHJ5XzEuZGVmYXVsdCh0aGlzLl9zZXR0aW5ncywgdGhpcy5fZ2V0TWljcm9tYXRjaE9wdGlvbnMoKSk7XG4gICAgICAgIHRoaXMuZGVlcEZpbHRlciA9IG5ldyBkZWVwXzEuZGVmYXVsdCh0aGlzLl9zZXR0aW5ncywgdGhpcy5fZ2V0TWljcm9tYXRjaE9wdGlvbnMoKSk7XG4gICAgICAgIHRoaXMuZW50cnlUcmFuc2Zvcm1lciA9IG5ldyBlbnRyeV8yLmRlZmF1bHQodGhpcy5fc2V0dGluZ3MpO1xuICAgIH1cbiAgICBfZ2V0Um9vdERpcmVjdG9yeSh0YXNrKSB7XG4gICAgICAgIHJldHVybiBwYXRoLnJlc29sdmUodGhpcy5fc2V0dGluZ3MuY3dkLCB0YXNrLmJhc2UpO1xuICAgIH1cbiAgICBfZ2V0UmVhZGVyT3B0aW9ucyh0YXNrKSB7XG4gICAgICAgIGNvbnN0IGJhc2VQYXRoID0gdGFzay5iYXNlID09PSAnLicgPyAnJyA6IHRhc2suYmFzZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJhc2VQYXRoLFxuICAgICAgICAgICAgcGF0aFNlZ21lbnRTZXBhcmF0b3I6ICcvJyxcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiB0aGlzLl9zZXR0aW5ncy5jb25jdXJyZW5jeSxcbiAgICAgICAgICAgIGRlZXBGaWx0ZXI6IHRoaXMuZGVlcEZpbHRlci5nZXRGaWx0ZXIoYmFzZVBhdGgsIHRhc2sucG9zaXRpdmUsIHRhc2submVnYXRpdmUpLFxuICAgICAgICAgICAgZW50cnlGaWx0ZXI6IHRoaXMuZW50cnlGaWx0ZXIuZ2V0RmlsdGVyKHRhc2sucG9zaXRpdmUsIHRhc2submVnYXRpdmUpLFxuICAgICAgICAgICAgZXJyb3JGaWx0ZXI6IHRoaXMuZXJyb3JGaWx0ZXIuZ2V0RmlsdGVyKCksXG4gICAgICAgICAgICBmb2xsb3dTeW1ib2xpY0xpbmtzOiB0aGlzLl9zZXR0aW5ncy5mb2xsb3dTeW1ib2xpY0xpbmtzLFxuICAgICAgICAgICAgZnM6IHRoaXMuX3NldHRpbmdzLmZzLFxuICAgICAgICAgICAgc3RhdHM6IHRoaXMuX3NldHRpbmdzLnN0YXRzLFxuICAgICAgICAgICAgdGhyb3dFcnJvck9uQnJva2VuU3ltYm9saWNMaW5rOiB0aGlzLl9zZXR0aW5ncy50aHJvd0Vycm9yT25Ccm9rZW5TeW1ib2xpY0xpbmssXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRoaXMuZW50cnlUcmFuc2Zvcm1lci5nZXRUcmFuc2Zvcm1lcigpXG4gICAgICAgIH07XG4gICAgfVxuICAgIF9nZXRNaWNyb21hdGNoT3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRvdDogdGhpcy5fc2V0dGluZ3MuZG90LFxuICAgICAgICAgICAgbWF0Y2hCYXNlOiB0aGlzLl9zZXR0aW5ncy5iYXNlTmFtZU1hdGNoLFxuICAgICAgICAgICAgbm9icmFjZTogIXRoaXMuX3NldHRpbmdzLmJyYWNlRXhwYW5zaW9uLFxuICAgICAgICAgICAgbm9jYXNlOiAhdGhpcy5fc2V0dGluZ3MuY2FzZVNlbnNpdGl2ZU1hdGNoLFxuICAgICAgICAgICAgbm9leHQ6ICF0aGlzLl9zZXR0aW5ncy5leHRnbG9iLFxuICAgICAgICAgICAgbm9nbG9ic3RhcjogIXRoaXMuX3NldHRpbmdzLmdsb2JzdGFyLFxuICAgICAgICAgICAgcG9zaXg6IHRydWUsXG4gICAgICAgICAgICBzdHJpY3RTbGFzaGVzOiBmYWxzZVxuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFByb3ZpZGVyO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgYXN5bmNfMSA9IHJlcXVpcmUoXCIuLi9yZWFkZXJzL2FzeW5jXCIpO1xuY29uc3QgcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuL3Byb3ZpZGVyXCIpO1xuY2xhc3MgUHJvdmlkZXJBc3luYyBleHRlbmRzIHByb3ZpZGVyXzEuZGVmYXVsdCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuX3JlYWRlciA9IG5ldyBhc3luY18xLmRlZmF1bHQodGhpcy5fc2V0dGluZ3MpO1xuICAgIH1cbiAgICBhc3luYyByZWFkKHRhc2spIHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuX2dldFJvb3REaXJlY3RvcnkodGFzayk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl9nZXRSZWFkZXJPcHRpb25zKHRhc2spO1xuICAgICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5hcGkocm9vdCwgdGFzaywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBlbnRyaWVzLm1hcCgoZW50cnkpID0+IG9wdGlvbnMudHJhbnNmb3JtKGVudHJ5KSk7XG4gICAgfVxuICAgIGFwaShyb290LCB0YXNrLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICh0YXNrLmR5bmFtaWMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWFkZXIuZHluYW1pYyhyb290LCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcmVhZGVyLnN0YXRpYyh0YXNrLnBhdHRlcm5zLCBvcHRpb25zKTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBQcm92aWRlckFzeW5jO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3Qgc3RyZWFtXzEgPSByZXF1aXJlKFwic3RyZWFtXCIpO1xuY29uc3Qgc3RyZWFtXzIgPSByZXF1aXJlKFwiLi4vcmVhZGVycy9zdHJlYW1cIik7XG5jb25zdCBwcm92aWRlcl8xID0gcmVxdWlyZShcIi4vcHJvdmlkZXJcIik7XG5jbGFzcyBQcm92aWRlclN0cmVhbSBleHRlbmRzIHByb3ZpZGVyXzEuZGVmYXVsdCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuX3JlYWRlciA9IG5ldyBzdHJlYW1fMi5kZWZhdWx0KHRoaXMuX3NldHRpbmdzKTtcbiAgICB9XG4gICAgcmVhZCh0YXNrKSB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLl9nZXRSb290RGlyZWN0b3J5KHRhc2spO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fZ2V0UmVhZGVyT3B0aW9ucyh0YXNrKTtcbiAgICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5hcGkocm9vdCwgdGFzaywgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uID0gbmV3IHN0cmVhbV8xLlJlYWRhYmxlKHsgb2JqZWN0TW9kZTogdHJ1ZSwgcmVhZDogKCkgPT4geyB9IH0pO1xuICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgIC5vbmNlKCdlcnJvcicsIChlcnJvcikgPT4gZGVzdGluYXRpb24uZW1pdCgnZXJyb3InLCBlcnJvcikpXG4gICAgICAgICAgICAub24oJ2RhdGEnLCAoZW50cnkpID0+IGRlc3RpbmF0aW9uLmVtaXQoJ2RhdGEnLCBvcHRpb25zLnRyYW5zZm9ybShlbnRyeSkpKVxuICAgICAgICAgICAgLm9uY2UoJ2VuZCcsICgpID0+IGRlc3RpbmF0aW9uLmVtaXQoJ2VuZCcpKTtcbiAgICAgICAgZGVzdGluYXRpb25cbiAgICAgICAgICAgIC5vbmNlKCdjbG9zZScsICgpID0+IHNvdXJjZS5kZXN0cm95KCkpO1xuICAgICAgICByZXR1cm4gZGVzdGluYXRpb247XG4gICAgfVxuICAgIGFwaShyb290LCB0YXNrLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICh0YXNrLmR5bmFtaWMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWFkZXIuZHluYW1pYyhyb290LCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcmVhZGVyLnN0YXRpYyh0YXNrLnBhdHRlcm5zLCBvcHRpb25zKTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBQcm92aWRlclN0cmVhbTtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGZzU3RhdCA9IHJlcXVpcmUoXCJAbm9kZWxpYi9mcy5zdGF0XCIpO1xuY29uc3QgZnNXYWxrID0gcmVxdWlyZShcIkBub2RlbGliL2ZzLndhbGtcIik7XG5jb25zdCByZWFkZXJfMSA9IHJlcXVpcmUoXCIuL3JlYWRlclwiKTtcbmNsYXNzIFJlYWRlclN5bmMgZXh0ZW5kcyByZWFkZXJfMS5kZWZhdWx0IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5fd2Fsa1N5bmMgPSBmc1dhbGsud2Fsa1N5bmM7XG4gICAgICAgIHRoaXMuX3N0YXRTeW5jID0gZnNTdGF0LnN0YXRTeW5jO1xuICAgIH1cbiAgICBkeW5hbWljKHJvb3QsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dhbGtTeW5jKHJvb3QsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBzdGF0aWMocGF0dGVybnMsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVwYXRoID0gdGhpcy5fZ2V0RnVsbEVudHJ5UGF0aChwYXR0ZXJuKTtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5fZ2V0RW50cnkoZmlsZXBhdGgsIHBhdHRlcm4sIG9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKGVudHJ5ID09PSBudWxsIHx8ICFvcHRpb25zLmVudHJ5RmlsdGVyKGVudHJ5KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cmllcztcbiAgICB9XG4gICAgX2dldEVudHJ5KGZpbGVwYXRoLCBwYXR0ZXJuLCBvcHRpb25zKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0cyA9IHRoaXMuX2dldFN0YXQoZmlsZXBhdGgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21ha2VFbnRyeShzdGF0cywgcGF0dGVybik7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5lcnJvckZpbHRlcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9nZXRTdGF0KGZpbGVwYXRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGF0U3luYyhmaWxlcGF0aCwgdGhpcy5fZnNTdGF0U2V0dGluZ3MpO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFJlYWRlclN5bmM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBzeW5jXzEgPSByZXF1aXJlKFwiLi4vcmVhZGVycy9zeW5jXCIpO1xuY29uc3QgcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuL3Byb3ZpZGVyXCIpO1xuY2xhc3MgUHJvdmlkZXJTeW5jIGV4dGVuZHMgcHJvdmlkZXJfMS5kZWZhdWx0IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5fcmVhZGVyID0gbmV3IHN5bmNfMS5kZWZhdWx0KHRoaXMuX3NldHRpbmdzKTtcbiAgICB9XG4gICAgcmVhZCh0YXNrKSB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLl9nZXRSb290RGlyZWN0b3J5KHRhc2spO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fZ2V0UmVhZGVyT3B0aW9ucyh0YXNrKTtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IHRoaXMuYXBpKHJvb3QsIHRhc2ssIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gZW50cmllcy5tYXAob3B0aW9ucy50cmFuc2Zvcm0pO1xuICAgIH1cbiAgICBhcGkocm9vdCwgdGFzaywgb3B0aW9ucykge1xuICAgICAgICBpZiAodGFzay5keW5hbWljKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVhZGVyLmR5bmFtaWMocm9vdCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWRlci5zdGF0aWModGFzay5wYXR0ZXJucywgb3B0aW9ucyk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gUHJvdmlkZXJTeW5jO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ERUZBVUxUX0ZJTEVfU1lTVEVNX0FEQVBURVIgPSB2b2lkIDA7XG5jb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IG9zID0gcmVxdWlyZShcIm9zXCIpO1xuLyoqXG4gKiBUaGUgYG9zLmNwdXNgIG1ldGhvZCBjYW4gcmV0dXJuIHplcm8uIFdlIGV4cGVjdCB0aGUgbnVtYmVyIG9mIGNvcmVzIHRvIGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLlxuICogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvN2ZhZWRkZjIzYTk4YzUzODk2ZjhiNTc0YTZlNjY1ODllOGZiMWViOC9saWIvb3MuanMjTDEwNi1MMTA3XG4gKi9cbmNvbnN0IENQVV9DT1VOVCA9IE1hdGgubWF4KG9zLmNwdXMoKS5sZW5ndGgsIDEpO1xuZXhwb3J0cy5ERUZBVUxUX0ZJTEVfU1lTVEVNX0FEQVBURVIgPSB7XG4gICAgbHN0YXQ6IGZzLmxzdGF0LFxuICAgIGxzdGF0U3luYzogZnMubHN0YXRTeW5jLFxuICAgIHN0YXQ6IGZzLnN0YXQsXG4gICAgc3RhdFN5bmM6IGZzLnN0YXRTeW5jLFxuICAgIHJlYWRkaXI6IGZzLnJlYWRkaXIsXG4gICAgcmVhZGRpclN5bmM6IGZzLnJlYWRkaXJTeW5jXG59O1xuY2xhc3MgU2V0dGluZ3Mge1xuICAgIGNvbnN0cnVjdG9yKF9vcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuICAgICAgICB0aGlzLmFic29sdXRlID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5hYnNvbHV0ZSwgZmFsc2UpO1xuICAgICAgICB0aGlzLmJhc2VOYW1lTWF0Y2ggPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLmJhc2VOYW1lTWF0Y2gsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5icmFjZUV4cGFuc2lvbiA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMuYnJhY2VFeHBhbnNpb24sIHRydWUpO1xuICAgICAgICB0aGlzLmNhc2VTZW5zaXRpdmVNYXRjaCA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMuY2FzZVNlbnNpdGl2ZU1hdGNoLCB0cnVlKTtcbiAgICAgICAgdGhpcy5jb25jdXJyZW5jeSA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMuY29uY3VycmVuY3ksIENQVV9DT1VOVCk7XG4gICAgICAgIHRoaXMuY3dkID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5jd2QsIHByb2Nlc3MuY3dkKCkpO1xuICAgICAgICB0aGlzLmRlZXAgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLmRlZXAsIEluZmluaXR5KTtcbiAgICAgICAgdGhpcy5kb3QgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLmRvdCwgZmFsc2UpO1xuICAgICAgICB0aGlzLmV4dGdsb2IgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLmV4dGdsb2IsIHRydWUpO1xuICAgICAgICB0aGlzLmZvbGxvd1N5bWJvbGljTGlua3MgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLmZvbGxvd1N5bWJvbGljTGlua3MsIHRydWUpO1xuICAgICAgICB0aGlzLmZzID0gdGhpcy5fZ2V0RmlsZVN5c3RlbU1ldGhvZHModGhpcy5fb3B0aW9ucy5mcyk7XG4gICAgICAgIHRoaXMuZ2xvYnN0YXIgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLmdsb2JzdGFyLCB0cnVlKTtcbiAgICAgICAgdGhpcy5pZ25vcmUgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLmlnbm9yZSwgW10pO1xuICAgICAgICB0aGlzLm1hcmtEaXJlY3RvcmllcyA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMubWFya0RpcmVjdG9yaWVzLCBmYWxzZSk7XG4gICAgICAgIHRoaXMub2JqZWN0TW9kZSA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMub2JqZWN0TW9kZSwgZmFsc2UpO1xuICAgICAgICB0aGlzLm9ubHlEaXJlY3RvcmllcyA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMub25seURpcmVjdG9yaWVzLCBmYWxzZSk7XG4gICAgICAgIHRoaXMub25seUZpbGVzID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5vbmx5RmlsZXMsIHRydWUpO1xuICAgICAgICB0aGlzLnN0YXRzID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5zdGF0cywgZmFsc2UpO1xuICAgICAgICB0aGlzLnN1cHByZXNzRXJyb3JzID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5zdXBwcmVzc0Vycm9ycywgZmFsc2UpO1xuICAgICAgICB0aGlzLnRocm93RXJyb3JPbkJyb2tlblN5bWJvbGljTGluayA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMudGhyb3dFcnJvck9uQnJva2VuU3ltYm9saWNMaW5rLCBmYWxzZSk7XG4gICAgICAgIHRoaXMudW5pcXVlID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy51bmlxdWUsIHRydWUpO1xuICAgICAgICBpZiAodGhpcy5vbmx5RGlyZWN0b3JpZXMpIHtcbiAgICAgICAgICAgIHRoaXMub25seUZpbGVzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc3RhdHMpIHtcbiAgICAgICAgICAgIHRoaXMub2JqZWN0TW9kZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBjYXN0IHRvIHRoZSBhcnJheSBpbiB0aGUgbmV4dCBtYWpvciAoIzQwNCkuXG4gICAgICAgIHRoaXMuaWdub3JlID0gW10uY29uY2F0KHRoaXMuaWdub3JlKTtcbiAgICB9XG4gICAgX2dldFZhbHVlKG9wdGlvbiwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbiA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiBvcHRpb247XG4gICAgfVxuICAgIF9nZXRGaWxlU3lzdGVtTWV0aG9kcyhtZXRob2RzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZXhwb3J0cy5ERUZBVUxUX0ZJTEVfU1lTVEVNX0FEQVBURVIpLCBtZXRob2RzKTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBTZXR0aW5ncztcbiIsICJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IHRhc2tNYW5hZ2VyID0gcmVxdWlyZShcIi4vbWFuYWdlcnMvdGFza3NcIik7XG5jb25zdCBhc3luY18xID0gcmVxdWlyZShcIi4vcHJvdmlkZXJzL2FzeW5jXCIpO1xuY29uc3Qgc3RyZWFtXzEgPSByZXF1aXJlKFwiLi9wcm92aWRlcnMvc3RyZWFtXCIpO1xuY29uc3Qgc3luY18xID0gcmVxdWlyZShcIi4vcHJvdmlkZXJzL3N5bmNcIik7XG5jb25zdCBzZXR0aW5nc18xID0gcmVxdWlyZShcIi4vc2V0dGluZ3NcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuYXN5bmMgZnVuY3Rpb24gRmFzdEdsb2Ioc291cmNlLCBvcHRpb25zKSB7XG4gICAgYXNzZXJ0UGF0dGVybnNJbnB1dChzb3VyY2UpO1xuICAgIGNvbnN0IHdvcmtzID0gZ2V0V29ya3Moc291cmNlLCBhc3luY18xLmRlZmF1bHQsIG9wdGlvbnMpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKHdvcmtzKTtcbiAgICByZXR1cm4gdXRpbHMuYXJyYXkuZmxhdHRlbihyZXN1bHQpO1xufVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3R5cGVzY3JpcHQtZXNsaW50L3R5cGVzY3JpcHQtZXNsaW50L2lzc3Vlcy82MFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlZGVjbGFyZVxuKGZ1bmN0aW9uIChGYXN0R2xvYikge1xuICAgIEZhc3RHbG9iLmdsb2IgPSBGYXN0R2xvYjtcbiAgICBGYXN0R2xvYi5nbG9iU3luYyA9IHN5bmM7XG4gICAgRmFzdEdsb2IuZ2xvYlN0cmVhbSA9IHN0cmVhbTtcbiAgICBGYXN0R2xvYi5hc3luYyA9IEZhc3RHbG9iO1xuICAgIGZ1bmN0aW9uIHN5bmMoc291cmNlLCBvcHRpb25zKSB7XG4gICAgICAgIGFzc2VydFBhdHRlcm5zSW5wdXQoc291cmNlKTtcbiAgICAgICAgY29uc3Qgd29ya3MgPSBnZXRXb3Jrcyhzb3VyY2UsIHN5bmNfMS5kZWZhdWx0LCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHV0aWxzLmFycmF5LmZsYXR0ZW4od29ya3MpO1xuICAgIH1cbiAgICBGYXN0R2xvYi5zeW5jID0gc3luYztcbiAgICBmdW5jdGlvbiBzdHJlYW0oc291cmNlLCBvcHRpb25zKSB7XG4gICAgICAgIGFzc2VydFBhdHRlcm5zSW5wdXQoc291cmNlKTtcbiAgICAgICAgY29uc3Qgd29ya3MgPSBnZXRXb3Jrcyhzb3VyY2UsIHN0cmVhbV8xLmRlZmF1bHQsIG9wdGlvbnMpO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIHN0cmVhbSByZXR1cm5lZCBieSB0aGUgcHJvdmlkZXIgY2Fubm90IHdvcmsgd2l0aCBhbiBhc3luY2hyb25vdXMgaXRlcmF0b3IuXG4gICAgICAgICAqIFRvIHN1cHBvcnQgYXN5bmNocm9ub3VzIGl0ZXJhdG9ycywgcmVnYXJkbGVzcyBvZiB0aGUgbnVtYmVyIG9mIHRhc2tzLCB3ZSBhbHdheXMgbXVsdGlwbGV4IHN0cmVhbXMuXG4gICAgICAgICAqIFRoaXMgYWZmZWN0cyBwZXJmb3JtYW5jZSAoKzI1JSkuIEkgZG9uJ3Qgc2VlIGJlc3Qgc29sdXRpb24gcmlnaHQgbm93LlxuICAgICAgICAgKi9cbiAgICAgICAgcmV0dXJuIHV0aWxzLnN0cmVhbS5tZXJnZSh3b3Jrcyk7XG4gICAgfVxuICAgIEZhc3RHbG9iLnN0cmVhbSA9IHN0cmVhbTtcbiAgICBmdW5jdGlvbiBnZW5lcmF0ZVRhc2tzKHNvdXJjZSwgb3B0aW9ucykge1xuICAgICAgICBhc3NlcnRQYXR0ZXJuc0lucHV0KHNvdXJjZSk7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5zID0gW10uY29uY2F0KHNvdXJjZSk7XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gbmV3IHNldHRpbmdzXzEuZGVmYXVsdChvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRhc2tNYW5hZ2VyLmdlbmVyYXRlKHBhdHRlcm5zLCBzZXR0aW5ncyk7XG4gICAgfVxuICAgIEZhc3RHbG9iLmdlbmVyYXRlVGFza3MgPSBnZW5lcmF0ZVRhc2tzO1xuICAgIGZ1bmN0aW9uIGlzRHluYW1pY1BhdHRlcm4oc291cmNlLCBvcHRpb25zKSB7XG4gICAgICAgIGFzc2VydFBhdHRlcm5zSW5wdXQoc291cmNlKTtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBuZXcgc2V0dGluZ3NfMS5kZWZhdWx0KG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdXRpbHMucGF0dGVybi5pc0R5bmFtaWNQYXR0ZXJuKHNvdXJjZSwgc2V0dGluZ3MpO1xuICAgIH1cbiAgICBGYXN0R2xvYi5pc0R5bmFtaWNQYXR0ZXJuID0gaXNEeW5hbWljUGF0dGVybjtcbiAgICBmdW5jdGlvbiBlc2NhcGVQYXRoKHNvdXJjZSkge1xuICAgICAgICBhc3NlcnRQYXR0ZXJuc0lucHV0KHNvdXJjZSk7XG4gICAgICAgIHJldHVybiB1dGlscy5wYXRoLmVzY2FwZShzb3VyY2UpO1xuICAgIH1cbiAgICBGYXN0R2xvYi5lc2NhcGVQYXRoID0gZXNjYXBlUGF0aDtcbiAgICBmdW5jdGlvbiBjb252ZXJ0UGF0aFRvUGF0dGVybihzb3VyY2UpIHtcbiAgICAgICAgYXNzZXJ0UGF0dGVybnNJbnB1dChzb3VyY2UpO1xuICAgICAgICByZXR1cm4gdXRpbHMucGF0aC5jb252ZXJ0UGF0aFRvUGF0dGVybihzb3VyY2UpO1xuICAgIH1cbiAgICBGYXN0R2xvYi5jb252ZXJ0UGF0aFRvUGF0dGVybiA9IGNvbnZlcnRQYXRoVG9QYXR0ZXJuO1xuICAgIGxldCBwb3NpeDtcbiAgICAoZnVuY3Rpb24gKHBvc2l4KSB7XG4gICAgICAgIGZ1bmN0aW9uIGVzY2FwZVBhdGgoc291cmNlKSB7XG4gICAgICAgICAgICBhc3NlcnRQYXR0ZXJuc0lucHV0KHNvdXJjZSk7XG4gICAgICAgICAgICByZXR1cm4gdXRpbHMucGF0aC5lc2NhcGVQb3NpeFBhdGgoc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBwb3NpeC5lc2NhcGVQYXRoID0gZXNjYXBlUGF0aDtcbiAgICAgICAgZnVuY3Rpb24gY29udmVydFBhdGhUb1BhdHRlcm4oc291cmNlKSB7XG4gICAgICAgICAgICBhc3NlcnRQYXR0ZXJuc0lucHV0KHNvdXJjZSk7XG4gICAgICAgICAgICByZXR1cm4gdXRpbHMucGF0aC5jb252ZXJ0UG9zaXhQYXRoVG9QYXR0ZXJuKHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgcG9zaXguY29udmVydFBhdGhUb1BhdHRlcm4gPSBjb252ZXJ0UGF0aFRvUGF0dGVybjtcbiAgICB9KShwb3NpeCA9IEZhc3RHbG9iLnBvc2l4IHx8IChGYXN0R2xvYi5wb3NpeCA9IHt9KSk7XG4gICAgbGV0IHdpbjMyO1xuICAgIChmdW5jdGlvbiAod2luMzIpIHtcbiAgICAgICAgZnVuY3Rpb24gZXNjYXBlUGF0aChzb3VyY2UpIHtcbiAgICAgICAgICAgIGFzc2VydFBhdHRlcm5zSW5wdXQoc291cmNlKTtcbiAgICAgICAgICAgIHJldHVybiB1dGlscy5wYXRoLmVzY2FwZVdpbmRvd3NQYXRoKHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgd2luMzIuZXNjYXBlUGF0aCA9IGVzY2FwZVBhdGg7XG4gICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRQYXRoVG9QYXR0ZXJuKHNvdXJjZSkge1xuICAgICAgICAgICAgYXNzZXJ0UGF0dGVybnNJbnB1dChzb3VyY2UpO1xuICAgICAgICAgICAgcmV0dXJuIHV0aWxzLnBhdGguY29udmVydFdpbmRvd3NQYXRoVG9QYXR0ZXJuKHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgd2luMzIuY29udmVydFBhdGhUb1BhdHRlcm4gPSBjb252ZXJ0UGF0aFRvUGF0dGVybjtcbiAgICB9KSh3aW4zMiA9IEZhc3RHbG9iLndpbjMyIHx8IChGYXN0R2xvYi53aW4zMiA9IHt9KSk7XG59KShGYXN0R2xvYiB8fCAoRmFzdEdsb2IgPSB7fSkpO1xuZnVuY3Rpb24gZ2V0V29ya3Moc291cmNlLCBfUHJvdmlkZXIsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBwYXR0ZXJucyA9IFtdLmNvbmNhdChzb3VyY2UpO1xuICAgIGNvbnN0IHNldHRpbmdzID0gbmV3IHNldHRpbmdzXzEuZGVmYXVsdChvcHRpb25zKTtcbiAgICBjb25zdCB0YXNrcyA9IHRhc2tNYW5hZ2VyLmdlbmVyYXRlKHBhdHRlcm5zLCBzZXR0aW5ncyk7XG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgX1Byb3ZpZGVyKHNldHRpbmdzKTtcbiAgICByZXR1cm4gdGFza3MubWFwKHByb3ZpZGVyLnJlYWQsIHByb3ZpZGVyKTtcbn1cbmZ1bmN0aW9uIGFzc2VydFBhdHRlcm5zSW5wdXQoaW5wdXQpIHtcbiAgICBjb25zdCBzb3VyY2UgPSBbXS5jb25jYXQoaW5wdXQpO1xuICAgIGNvbnN0IGlzVmFsaWRTb3VyY2UgPSBzb3VyY2UuZXZlcnkoKGl0ZW0pID0+IHV0aWxzLnN0cmluZy5pc1N0cmluZyhpdGVtKSAmJiAhdXRpbHMuc3RyaW5nLmlzRW1wdHkoaXRlbSkpO1xuICAgIGlmICghaXNWYWxpZFNvdXJjZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXR0ZXJucyBtdXN0IGJlIGEgc3RyaW5nIChub24gZW1wdHkpIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MnKTtcbiAgICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IEZhc3RHbG9iO1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IHtwcm9taXNpZnl9ID0gcmVxdWlyZSgndXRpbCcpO1xuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuXG5hc3luYyBmdW5jdGlvbiBpc1R5cGUoZnNTdGF0VHlwZSwgc3RhdHNNZXRob2ROYW1lLCBmaWxlUGF0aCkge1xuXHRpZiAodHlwZW9mIGZpbGVQYXRoICE9PSAnc3RyaW5nJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIGEgc3RyaW5nLCBnb3QgJHt0eXBlb2YgZmlsZVBhdGh9YCk7XG5cdH1cblxuXHR0cnkge1xuXHRcdGNvbnN0IHN0YXRzID0gYXdhaXQgcHJvbWlzaWZ5KGZzW2ZzU3RhdFR5cGVdKShmaWxlUGF0aCk7XG5cdFx0cmV0dXJuIHN0YXRzW3N0YXRzTWV0aG9kTmFtZV0oKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRpZiAoZXJyb3IuY29kZSA9PT0gJ0VOT0VOVCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR0aHJvdyBlcnJvcjtcblx0fVxufVxuXG5mdW5jdGlvbiBpc1R5cGVTeW5jKGZzU3RhdFR5cGUsIHN0YXRzTWV0aG9kTmFtZSwgZmlsZVBhdGgpIHtcblx0aWYgKHR5cGVvZiBmaWxlUGF0aCAhPT0gJ3N0cmluZycpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBhIHN0cmluZywgZ290ICR7dHlwZW9mIGZpbGVQYXRofWApO1xuXHR9XG5cblx0dHJ5IHtcblx0XHRyZXR1cm4gZnNbZnNTdGF0VHlwZV0oZmlsZVBhdGgpW3N0YXRzTWV0aG9kTmFtZV0oKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRpZiAoZXJyb3IuY29kZSA9PT0gJ0VOT0VOVCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR0aHJvdyBlcnJvcjtcblx0fVxufVxuXG5leHBvcnRzLmlzRmlsZSA9IGlzVHlwZS5iaW5kKG51bGwsICdzdGF0JywgJ2lzRmlsZScpO1xuZXhwb3J0cy5pc0RpcmVjdG9yeSA9IGlzVHlwZS5iaW5kKG51bGwsICdzdGF0JywgJ2lzRGlyZWN0b3J5Jyk7XG5leHBvcnRzLmlzU3ltbGluayA9IGlzVHlwZS5iaW5kKG51bGwsICdsc3RhdCcsICdpc1N5bWJvbGljTGluaycpO1xuZXhwb3J0cy5pc0ZpbGVTeW5jID0gaXNUeXBlU3luYy5iaW5kKG51bGwsICdzdGF0U3luYycsICdpc0ZpbGUnKTtcbmV4cG9ydHMuaXNEaXJlY3RvcnlTeW5jID0gaXNUeXBlU3luYy5iaW5kKG51bGwsICdzdGF0U3luYycsICdpc0RpcmVjdG9yeScpO1xuZXhwb3J0cy5pc1N5bWxpbmtTeW5jID0gaXNUeXBlU3luYy5iaW5kKG51bGwsICdsc3RhdFN5bmMnLCAnaXNTeW1ib2xpY0xpbmsnKTtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3QgcGF0aFR5cGUgPSByZXF1aXJlKCdwYXRoLXR5cGUnKTtcblxuY29uc3QgZ2V0RXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnMgPT4gZXh0ZW5zaW9ucy5sZW5ndGggPiAxID8gYHske2V4dGVuc2lvbnMuam9pbignLCcpfX1gIDogZXh0ZW5zaW9uc1swXTtcblxuY29uc3QgZ2V0UGF0aCA9IChmaWxlcGF0aCwgY3dkKSA9PiB7XG5cdGNvbnN0IHB0aCA9IGZpbGVwYXRoWzBdID09PSAnIScgPyBmaWxlcGF0aC5zbGljZSgxKSA6IGZpbGVwYXRoO1xuXHRyZXR1cm4gcGF0aC5pc0Fic29sdXRlKHB0aCkgPyBwdGggOiBwYXRoLmpvaW4oY3dkLCBwdGgpO1xufTtcblxuY29uc3QgYWRkRXh0ZW5zaW9ucyA9IChmaWxlLCBleHRlbnNpb25zKSA9PiB7XG5cdGlmIChwYXRoLmV4dG5hbWUoZmlsZSkpIHtcblx0XHRyZXR1cm4gYCoqLyR7ZmlsZX1gO1xuXHR9XG5cblx0cmV0dXJuIGAqKi8ke2ZpbGV9LiR7Z2V0RXh0ZW5zaW9ucyhleHRlbnNpb25zKX1gO1xufTtcblxuY29uc3QgZ2V0R2xvYiA9IChkaXJlY3RvcnksIG9wdGlvbnMpID0+IHtcblx0aWYgKG9wdGlvbnMuZmlsZXMgJiYgIUFycmF5LmlzQXJyYXkob3B0aW9ucy5maWxlcykpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcXGBmaWxlc1xcYCB0byBiZSBvZiB0eXBlIFxcYEFycmF5XFxgIGJ1dCByZWNlaXZlZCB0eXBlIFxcYCR7dHlwZW9mIG9wdGlvbnMuZmlsZXN9XFxgYCk7XG5cdH1cblxuXHRpZiAob3B0aW9ucy5leHRlbnNpb25zICYmICFBcnJheS5pc0FycmF5KG9wdGlvbnMuZXh0ZW5zaW9ucykpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcXGBleHRlbnNpb25zXFxgIHRvIGJlIG9mIHR5cGUgXFxgQXJyYXlcXGAgYnV0IHJlY2VpdmVkIHR5cGUgXFxgJHt0eXBlb2Ygb3B0aW9ucy5leHRlbnNpb25zfVxcYGApO1xuXHR9XG5cblx0aWYgKG9wdGlvbnMuZmlsZXMgJiYgb3B0aW9ucy5leHRlbnNpb25zKSB7XG5cdFx0cmV0dXJuIG9wdGlvbnMuZmlsZXMubWFwKHggPT4gcGF0aC5wb3NpeC5qb2luKGRpcmVjdG9yeSwgYWRkRXh0ZW5zaW9ucyh4LCBvcHRpb25zLmV4dGVuc2lvbnMpKSk7XG5cdH1cblxuXHRpZiAob3B0aW9ucy5maWxlcykge1xuXHRcdHJldHVybiBvcHRpb25zLmZpbGVzLm1hcCh4ID0+IHBhdGgucG9zaXguam9pbihkaXJlY3RvcnksIGAqKi8ke3h9YCkpO1xuXHR9XG5cblx0aWYgKG9wdGlvbnMuZXh0ZW5zaW9ucykge1xuXHRcdHJldHVybiBbcGF0aC5wb3NpeC5qb2luKGRpcmVjdG9yeSwgYCoqLyouJHtnZXRFeHRlbnNpb25zKG9wdGlvbnMuZXh0ZW5zaW9ucyl9YCldO1xuXHR9XG5cblx0cmV0dXJuIFtwYXRoLnBvc2l4LmpvaW4oZGlyZWN0b3J5LCAnKionKV07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGFzeW5jIChpbnB1dCwgb3B0aW9ucykgPT4ge1xuXHRvcHRpb25zID0ge1xuXHRcdGN3ZDogcHJvY2Vzcy5jd2QoKSxcblx0XHQuLi5vcHRpb25zXG5cdH07XG5cblx0aWYgKHR5cGVvZiBvcHRpb25zLmN3ZCAhPT0gJ3N0cmluZycpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcXGBjd2RcXGAgdG8gYmUgb2YgdHlwZSBcXGBzdHJpbmdcXGAgYnV0IHJlY2VpdmVkIHR5cGUgXFxgJHt0eXBlb2Ygb3B0aW9ucy5jd2R9XFxgYCk7XG5cdH1cblxuXHRjb25zdCBnbG9icyA9IGF3YWl0IFByb21pc2UuYWxsKFtdLmNvbmNhdChpbnB1dCkubWFwKGFzeW5jIHggPT4ge1xuXHRcdGNvbnN0IGlzRGlyZWN0b3J5ID0gYXdhaXQgcGF0aFR5cGUuaXNEaXJlY3RvcnkoZ2V0UGF0aCh4LCBvcHRpb25zLmN3ZCkpO1xuXHRcdHJldHVybiBpc0RpcmVjdG9yeSA/IGdldEdsb2IoeCwgb3B0aW9ucykgOiB4O1xuXHR9KSk7XG5cblx0cmV0dXJuIFtdLmNvbmNhdC5hcHBseShbXSwgZ2xvYnMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1zcHJlYWRcbn07XG5cbm1vZHVsZS5leHBvcnRzLnN5bmMgPSAoaW5wdXQsIG9wdGlvbnMpID0+IHtcblx0b3B0aW9ucyA9IHtcblx0XHRjd2Q6IHByb2Nlc3MuY3dkKCksXG5cdFx0Li4ub3B0aW9uc1xuXHR9O1xuXG5cdGlmICh0eXBlb2Ygb3B0aW9ucy5jd2QgIT09ICdzdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXFxgY3dkXFxgIHRvIGJlIG9mIHR5cGUgXFxgc3RyaW5nXFxgIGJ1dCByZWNlaXZlZCB0eXBlIFxcYCR7dHlwZW9mIG9wdGlvbnMuY3dkfVxcYGApO1xuXHR9XG5cblx0Y29uc3QgZ2xvYnMgPSBbXS5jb25jYXQoaW5wdXQpLm1hcCh4ID0+IHBhdGhUeXBlLmlzRGlyZWN0b3J5U3luYyhnZXRQYXRoKHgsIG9wdGlvbnMuY3dkKSkgPyBnZXRHbG9iKHgsIG9wdGlvbnMpIDogeCk7XG5cblx0cmV0dXJuIFtdLmNvbmNhdC5hcHBseShbXSwgZ2xvYnMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1zcHJlYWRcbn07XG4iLCAiLy8gQSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgbWFrZS1hcnJheVxuZnVuY3Rpb24gbWFrZUFycmF5IChzdWJqZWN0KSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHN1YmplY3QpXG4gICAgPyBzdWJqZWN0XG4gICAgOiBbc3ViamVjdF1cbn1cblxuY29uc3QgRU1QVFkgPSAnJ1xuY29uc3QgU1BBQ0UgPSAnICdcbmNvbnN0IEVTQ0FQRSA9ICdcXFxcJ1xuY29uc3QgUkVHRVhfVEVTVF9CTEFOS19MSU5FID0gL15cXHMrJC9cbmNvbnN0IFJFR0VYX0lOVkFMSURfVFJBSUxJTkdfQkFDS1NMQVNIID0gLyg/OlteXFxcXF18XilcXFxcJC9cbmNvbnN0IFJFR0VYX1JFUExBQ0VfTEVBRElOR19FWENBUEVEX0VYQ0xBTUFUSU9OID0gL15cXFxcIS9cbmNvbnN0IFJFR0VYX1JFUExBQ0VfTEVBRElOR19FWENBUEVEX0hBU0ggPSAvXlxcXFwjL1xuY29uc3QgUkVHRVhfU1BMSVRBTExfQ1JMRiA9IC9cXHI/XFxuL2dcbi8vIC9mb28sXG4vLyAuL2Zvbyxcbi8vIC4uL2Zvbyxcbi8vIC5cbi8vIC4uXG5jb25zdCBSRUdFWF9URVNUX0lOVkFMSURfUEFUSCA9IC9eXFwuKlxcL3xeXFwuKyQvXG5cbmNvbnN0IFNMQVNIID0gJy8nXG5cbi8vIERvIG5vdCB1c2UgdGVybmFyeSBleHByZXNzaW9uIGhlcmUsIHNpbmNlIFwiaXN0YW5idWwgaWdub3JlIG5leHRcIiBpcyBidWdneVxubGV0IFRNUF9LRVlfSUdOT1JFID0gJ25vZGUtaWdub3JlJ1xuLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbmlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJykge1xuICBUTVBfS0VZX0lHTk9SRSA9IFN5bWJvbC5mb3IoJ25vZGUtaWdub3JlJylcbn1cbmNvbnN0IEtFWV9JR05PUkUgPSBUTVBfS0VZX0lHTk9SRVxuXG5jb25zdCBkZWZpbmUgPSAob2JqZWN0LCBrZXksIHZhbHVlKSA9PlxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHt2YWx1ZX0pXG5cbmNvbnN0IFJFR0VYX1JFR0VYUF9SQU5HRSA9IC8oWzAtel0pLShbMC16XSkvZ1xuXG5jb25zdCBSRVRVUk5fRkFMU0UgPSAoKSA9PiBmYWxzZVxuXG4vLyBTYW5pdGl6ZSB0aGUgcmFuZ2Ugb2YgYSByZWd1bGFyIGV4cHJlc3Npb25cbi8vIFRoZSBjYXNlcyBhcmUgY29tcGxpY2F0ZWQsIHNlZSB0ZXN0IGNhc2VzIGZvciBkZXRhaWxzXG5jb25zdCBzYW5pdGl6ZVJhbmdlID0gcmFuZ2UgPT4gcmFuZ2UucmVwbGFjZShcbiAgUkVHRVhfUkVHRVhQX1JBTkdFLFxuICAobWF0Y2gsIGZyb20sIHRvKSA9PiBmcm9tLmNoYXJDb2RlQXQoMCkgPD0gdG8uY2hhckNvZGVBdCgwKVxuICAgID8gbWF0Y2hcbiAgICAvLyBJbnZhbGlkIHJhbmdlIChvdXQgb2Ygb3JkZXIpIHdoaWNoIGlzIG9rIGZvciBnaXRpZ25vcmUgcnVsZXMgYnV0XG4gICAgLy8gICBmYXRhbCBmb3IgSmF2YVNjcmlwdCByZWd1bGFyIGV4cHJlc3Npb24sIHNvIGVsaW1pbmF0ZSBpdC5cbiAgICA6IEVNUFRZXG4pXG5cbi8vIFNlZSBmaXh0dXJlcyAjNTlcbmNvbnN0IGNsZWFuUmFuZ2VCYWNrU2xhc2ggPSBzbGFzaGVzID0+IHtcbiAgY29uc3Qge2xlbmd0aH0gPSBzbGFzaGVzXG4gIHJldHVybiBzbGFzaGVzLnNsaWNlKDAsIGxlbmd0aCAtIGxlbmd0aCAlIDIpXG59XG5cbi8vID4gSWYgdGhlIHBhdHRlcm4gZW5kcyB3aXRoIGEgc2xhc2gsXG4vLyA+IGl0IGlzIHJlbW92ZWQgZm9yIHRoZSBwdXJwb3NlIG9mIHRoZSBmb2xsb3dpbmcgZGVzY3JpcHRpb24sXG4vLyA+IGJ1dCBpdCB3b3VsZCBvbmx5IGZpbmQgYSBtYXRjaCB3aXRoIGEgZGlyZWN0b3J5LlxuLy8gPiBJbiBvdGhlciB3b3JkcywgZm9vLyB3aWxsIG1hdGNoIGEgZGlyZWN0b3J5IGZvbyBhbmQgcGF0aHMgdW5kZXJuZWF0aCBpdCxcbi8vID4gYnV0IHdpbGwgbm90IG1hdGNoIGEgcmVndWxhciBmaWxlIG9yIGEgc3ltYm9saWMgbGluayBmb29cbi8vID4gICh0aGlzIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgd2F5IGhvdyBwYXRoc3BlYyB3b3JrcyBpbiBnZW5lcmFsIGluIEdpdCkuXG4vLyAnYGZvby9gJyB3aWxsIG5vdCBtYXRjaCByZWd1bGFyIGZpbGUgJ2Bmb29gJyBvciBzeW1ib2xpYyBsaW5rICdgZm9vYCdcbi8vIC0+IGlnbm9yZS1ydWxlcyB3aWxsIG5vdCBkZWFsIHdpdGggaXQsIGJlY2F1c2UgaXQgY29zdHMgZXh0cmEgYGZzLnN0YXRgIGNhbGxcbi8vICAgICAgeW91IGNvdWxkIHVzZSBvcHRpb24gYG1hcms6IHRydWVgIHdpdGggYGdsb2JgXG5cbi8vICdgZm9vL2AnIHNob3VsZCBub3QgY29udGludWUgd2l0aCB0aGUgJ2AuLmAnXG5jb25zdCBSRVBMQUNFUlMgPSBbXG5cbiAgLy8gPiBUcmFpbGluZyBzcGFjZXMgYXJlIGlnbm9yZWQgdW5sZXNzIHRoZXkgYXJlIHF1b3RlZCB3aXRoIGJhY2tzbGFzaCAoXCJcXFwiKVxuICBbXG4gICAgLy8gKGFcXCApIC0+IChhIClcbiAgICAvLyAoYSAgKSAtPiAoYSlcbiAgICAvLyAoYSBcXCApIC0+IChhICApXG4gICAgL1xcXFw/XFxzKyQvLFxuICAgIG1hdGNoID0+IG1hdGNoLmluZGV4T2YoJ1xcXFwnKSA9PT0gMFxuICAgICAgPyBTUEFDRVxuICAgICAgOiBFTVBUWVxuICBdLFxuXG4gIC8vIHJlcGxhY2UgKFxcICkgd2l0aCAnICdcbiAgW1xuICAgIC9cXFxcXFxzL2csXG4gICAgKCkgPT4gU1BBQ0VcbiAgXSxcblxuICAvLyBFc2NhcGUgbWV0YWNoYXJhY3RlcnNcbiAgLy8gd2hpY2ggaXMgd3JpdHRlbiBkb3duIGJ5IHVzZXJzIGJ1dCBtZWFucyBzcGVjaWFsIGZvciByZWd1bGFyIGV4cHJlc3Npb25zLlxuXG4gIC8vID4gVGhlcmUgYXJlIDEyIGNoYXJhY3RlcnMgd2l0aCBzcGVjaWFsIG1lYW5pbmdzOlxuICAvLyA+IC0gdGhlIGJhY2tzbGFzaCBcXCxcbiAgLy8gPiAtIHRoZSBjYXJldCBeLFxuICAvLyA+IC0gdGhlIGRvbGxhciBzaWduICQsXG4gIC8vID4gLSB0aGUgcGVyaW9kIG9yIGRvdCAuLFxuICAvLyA+IC0gdGhlIHZlcnRpY2FsIGJhciBvciBwaXBlIHN5bWJvbCB8LFxuICAvLyA+IC0gdGhlIHF1ZXN0aW9uIG1hcmsgPyxcbiAgLy8gPiAtIHRoZSBhc3RlcmlzayBvciBzdGFyICosXG4gIC8vID4gLSB0aGUgcGx1cyBzaWduICssXG4gIC8vID4gLSB0aGUgb3BlbmluZyBwYXJlbnRoZXNpcyAoLFxuICAvLyA+IC0gdGhlIGNsb3NpbmcgcGFyZW50aGVzaXMgKSxcbiAgLy8gPiAtIGFuZCB0aGUgb3BlbmluZyBzcXVhcmUgYnJhY2tldCBbLFxuICAvLyA+IC0gdGhlIG9wZW5pbmcgY3VybHkgYnJhY2UgeyxcbiAgLy8gPiBUaGVzZSBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlIG9mdGVuIGNhbGxlZCBcIm1ldGFjaGFyYWN0ZXJzXCIuXG4gIFtcbiAgICAvW1xcXFwkLnwqKygpe15dL2csXG4gICAgbWF0Y2ggPT4gYFxcXFwke21hdGNofWBcbiAgXSxcblxuICBbXG4gICAgLy8gPiBhIHF1ZXN0aW9uIG1hcmsgKD8pIG1hdGNoZXMgYSBzaW5nbGUgY2hhcmFjdGVyXG4gICAgLyg/IVxcXFwpXFw/L2csXG4gICAgKCkgPT4gJ1teL10nXG4gIF0sXG5cbiAgLy8gbGVhZGluZyBzbGFzaFxuICBbXG5cbiAgICAvLyA+IEEgbGVhZGluZyBzbGFzaCBtYXRjaGVzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhdGhuYW1lLlxuICAgIC8vID4gRm9yIGV4YW1wbGUsIFwiLyouY1wiIG1hdGNoZXMgXCJjYXQtZmlsZS5jXCIgYnV0IG5vdCBcIm1vemlsbGEtc2hhMS9zaGExLmNcIi5cbiAgICAvLyBBIGxlYWRpbmcgc2xhc2ggbWF0Y2hlcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRobmFtZVxuICAgIC9eXFwvLyxcbiAgICAoKSA9PiAnXidcbiAgXSxcblxuICAvLyByZXBsYWNlIHNwZWNpYWwgbWV0YWNoYXJhY3RlciBzbGFzaCBhZnRlciB0aGUgbGVhZGluZyBzbGFzaFxuICBbXG4gICAgL1xcLy9nLFxuICAgICgpID0+ICdcXFxcLydcbiAgXSxcblxuICBbXG4gICAgLy8gPiBBIGxlYWRpbmcgXCIqKlwiIGZvbGxvd2VkIGJ5IGEgc2xhc2ggbWVhbnMgbWF0Y2ggaW4gYWxsIGRpcmVjdG9yaWVzLlxuICAgIC8vID4gRm9yIGV4YW1wbGUsIFwiKiovZm9vXCIgbWF0Y2hlcyBmaWxlIG9yIGRpcmVjdG9yeSBcImZvb1wiIGFueXdoZXJlLFxuICAgIC8vID4gdGhlIHNhbWUgYXMgcGF0dGVybiBcImZvb1wiLlxuICAgIC8vID4gXCIqKi9mb28vYmFyXCIgbWF0Y2hlcyBmaWxlIG9yIGRpcmVjdG9yeSBcImJhclwiIGFueXdoZXJlIHRoYXQgaXMgZGlyZWN0bHlcbiAgICAvLyA+ICAgdW5kZXIgZGlyZWN0b3J5IFwiZm9vXCIuXG4gICAgLy8gTm90aWNlIHRoYXQgdGhlICcqJ3MgaGF2ZSBiZWVuIHJlcGxhY2VkIGFzICdcXFxcKidcbiAgICAvXlxcXipcXFxcXFwqXFxcXFxcKlxcXFxcXC8vLFxuXG4gICAgLy8gJyoqL2ZvbycgPC0+ICdmb28nXG4gICAgKCkgPT4gJ14oPzouKlxcXFwvKT8nXG4gIF0sXG5cbiAgLy8gc3RhcnRpbmdcbiAgW1xuICAgIC8vIHRoZXJlIHdpbGwgYmUgbm8gbGVhZGluZyAnLydcbiAgICAvLyAgICh3aGljaCBoYXMgYmVlbiByZXBsYWNlZCBieSBzZWN0aW9uIFwibGVhZGluZyBzbGFzaFwiKVxuICAgIC8vIElmIHN0YXJ0cyB3aXRoICcqKicsIGFkZGluZyBhICdeJyB0byB0aGUgcmVndWxhciBleHByZXNzaW9uIGFsc28gd29ya3NcbiAgICAvXig/PVteXl0pLyxcbiAgICBmdW5jdGlvbiBzdGFydGluZ1JlcGxhY2VyICgpIHtcbiAgICAgIC8vIElmIGhhcyBhIHNsYXNoIGAvYCBhdCB0aGUgYmVnaW5uaW5nIG9yIG1pZGRsZVxuICAgICAgcmV0dXJuICEvXFwvKD8hJCkvLnRlc3QodGhpcylcbiAgICAgICAgLy8gPiBQcmlvciB0byAyLjIyLjFcbiAgICAgICAgLy8gPiBJZiB0aGUgcGF0dGVybiBkb2VzIG5vdCBjb250YWluIGEgc2xhc2ggLyxcbiAgICAgICAgLy8gPiAgIEdpdCB0cmVhdHMgaXQgYXMgYSBzaGVsbCBnbG9iIHBhdHRlcm5cbiAgICAgICAgLy8gQWN0dWFsbHksIGlmIHRoZXJlIGlzIG9ubHkgYSB0cmFpbGluZyBzbGFzaCxcbiAgICAgICAgLy8gICBnaXQgYWxzbyB0cmVhdHMgaXQgYXMgYSBzaGVsbCBnbG9iIHBhdHRlcm5cblxuICAgICAgICAvLyBBZnRlciAyLjIyLjEgKGNvbXBhdGlibGUgYnV0IGNsZWFyZXIpXG4gICAgICAgIC8vID4gSWYgdGhlcmUgaXMgYSBzZXBhcmF0b3IgYXQgdGhlIGJlZ2lubmluZyBvciBtaWRkbGUgKG9yIGJvdGgpXG4gICAgICAgIC8vID4gb2YgdGhlIHBhdHRlcm4sIHRoZW4gdGhlIHBhdHRlcm4gaXMgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeVxuICAgICAgICAvLyA+IGxldmVsIG9mIHRoZSBwYXJ0aWN1bGFyIC5naXRpZ25vcmUgZmlsZSBpdHNlbGYuXG4gICAgICAgIC8vID4gT3RoZXJ3aXNlIHRoZSBwYXR0ZXJuIG1heSBhbHNvIG1hdGNoIGF0IGFueSBsZXZlbCBiZWxvd1xuICAgICAgICAvLyA+IHRoZSAuZ2l0aWdub3JlIGxldmVsLlxuICAgICAgICA/ICcoPzpefFxcXFwvKSdcblxuICAgICAgICAvLyA+IE90aGVyd2lzZSwgR2l0IHRyZWF0cyB0aGUgcGF0dGVybiBhcyBhIHNoZWxsIGdsb2Igc3VpdGFibGUgZm9yXG4gICAgICAgIC8vID4gICBjb25zdW1wdGlvbiBieSBmbm1hdGNoKDMpXG4gICAgICAgIDogJ14nXG4gICAgfVxuICBdLFxuXG4gIC8vIHR3byBnbG9ic3RhcnNcbiAgW1xuICAgIC8vIFVzZSBsb29rYWhlYWQgYXNzZXJ0aW9ucyBzbyB0aGF0IHdlIGNvdWxkIG1hdGNoIG1vcmUgdGhhbiBvbmUgYCcvKionYFxuICAgIC9cXFxcXFwvXFxcXFxcKlxcXFxcXCooPz1cXFxcXFwvfCQpL2csXG5cbiAgICAvLyBaZXJvLCBvbmUgb3Igc2V2ZXJhbCBkaXJlY3Rvcmllc1xuICAgIC8vIHNob3VsZCBub3QgdXNlICcqJywgb3IgaXQgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgbmV4dCByZXBsYWNlclxuXG4gICAgLy8gQ2hlY2sgaWYgaXQgaXMgbm90IHRoZSBsYXN0IGAnLyoqJ2BcbiAgICAoXywgaW5kZXgsIHN0cikgPT4gaW5kZXggKyA2IDwgc3RyLmxlbmd0aFxuXG4gICAgICAvLyBjYXNlOiAvKiovXG4gICAgICAvLyA+IEEgc2xhc2ggZm9sbG93ZWQgYnkgdHdvIGNvbnNlY3V0aXZlIGFzdGVyaXNrcyB0aGVuIGEgc2xhc2ggbWF0Y2hlc1xuICAgICAgLy8gPiAgIHplcm8gb3IgbW9yZSBkaXJlY3Rvcmllcy5cbiAgICAgIC8vID4gRm9yIGV4YW1wbGUsIFwiYS8qKi9iXCIgbWF0Y2hlcyBcImEvYlwiLCBcImEveC9iXCIsIFwiYS94L3kvYlwiIGFuZCBzbyBvbi5cbiAgICAgIC8vICcvKiovJ1xuICAgICAgPyAnKD86XFxcXC9bXlxcXFwvXSspKidcblxuICAgICAgLy8gY2FzZTogLyoqXG4gICAgICAvLyA+IEEgdHJhaWxpbmcgYFwiLyoqXCJgIG1hdGNoZXMgZXZlcnl0aGluZyBpbnNpZGUuXG5cbiAgICAgIC8vICMyMTogZXZlcnl0aGluZyBpbnNpZGUgYnV0IGl0IHNob3VsZCBub3QgaW5jbHVkZSB0aGUgY3VycmVudCBmb2xkZXJcbiAgICAgIDogJ1xcXFwvLisnXG4gIF0sXG5cbiAgLy8gbm9ybWFsIGludGVybWVkaWF0ZSB3aWxkY2FyZHNcbiAgW1xuICAgIC8vIE5ldmVyIHJlcGxhY2UgZXNjYXBlZCAnKidcbiAgICAvLyBpZ25vcmUgcnVsZSAnXFwqJyB3aWxsIG1hdGNoIHRoZSBwYXRoICcqJ1xuXG4gICAgLy8gJ2FiYy4qLycgLT4gZ29cbiAgICAvLyAnYWJjLionICAtPiBza2lwIHRoaXMgcnVsZSxcbiAgICAvLyAgICBjb3ogdHJhaWxpbmcgc2luZ2xlIHdpbGRjYXJkIHdpbGwgYmUgaGFuZGVkIGJ5IFt0cmFpbGluZyB3aWxkY2FyZF1cbiAgICAvKF58W15cXFxcXSspKFxcXFxcXCopKyg/PS4rKS9nLFxuXG4gICAgLy8gJyouanMnIG1hdGNoZXMgJy5qcydcbiAgICAvLyAnKi5qcycgZG9lc24ndCBtYXRjaCAnYWJjJ1xuICAgIChfLCBwMSwgcDIpID0+IHtcbiAgICAgIC8vIDEuXG4gICAgICAvLyA+IEFuIGFzdGVyaXNrIFwiKlwiIG1hdGNoZXMgYW55dGhpbmcgZXhjZXB0IGEgc2xhc2guXG4gICAgICAvLyAyLlxuICAgICAgLy8gPiBPdGhlciBjb25zZWN1dGl2ZSBhc3Rlcmlza3MgYXJlIGNvbnNpZGVyZWQgcmVndWxhciBhc3Rlcmlza3NcbiAgICAgIC8vID4gYW5kIHdpbGwgbWF0Y2ggYWNjb3JkaW5nIHRvIHRoZSBwcmV2aW91cyBydWxlcy5cbiAgICAgIGNvbnN0IHVuZXNjYXBlZCA9IHAyLnJlcGxhY2UoL1xcXFxcXCovZywgJ1teXFxcXC9dKicpXG4gICAgICByZXR1cm4gcDEgKyB1bmVzY2FwZWRcbiAgICB9XG4gIF0sXG5cbiAgW1xuICAgIC8vIHVuZXNjYXBlLCByZXZlcnQgc3RlcCAzIGV4Y2VwdCBmb3IgYmFjayBzbGFzaFxuICAgIC8vIEZvciBleGFtcGxlLCBpZiBhIHVzZXIgZXNjYXBlIGEgJ1xcXFwqJyxcbiAgICAvLyBhZnRlciBzdGVwIDMsIHRoZSByZXN1bHQgd2lsbCBiZSAnXFxcXFxcXFxcXFxcKidcbiAgICAvXFxcXFxcXFxcXFxcKD89WyQufCorKCl7Xl0pL2csXG4gICAgKCkgPT4gRVNDQVBFXG4gIF0sXG5cbiAgW1xuICAgIC8vICdcXFxcXFxcXCcgLT4gJ1xcXFwnXG4gICAgL1xcXFxcXFxcL2csXG4gICAgKCkgPT4gRVNDQVBFXG4gIF0sXG5cbiAgW1xuICAgIC8vID4gVGhlIHJhbmdlIG5vdGF0aW9uLCBlLmcuIFthLXpBLVpdLFxuICAgIC8vID4gY2FuIGJlIHVzZWQgdG8gbWF0Y2ggb25lIG9mIHRoZSBjaGFyYWN0ZXJzIGluIGEgcmFuZ2UuXG5cbiAgICAvLyBgXFxgIGlzIGVzY2FwZWQgYnkgc3RlcCAzXG4gICAgLyhcXFxcKT9cXFsoW15cXF0vXSo/KShcXFxcKikoJHxcXF0pL2csXG4gICAgKG1hdGNoLCBsZWFkRXNjYXBlLCByYW5nZSwgZW5kRXNjYXBlLCBjbG9zZSkgPT4gbGVhZEVzY2FwZSA9PT0gRVNDQVBFXG4gICAgICAvLyAnXFxcXFtiYXJdJyAtPiAnXFxcXFxcXFxbYmFyXFxcXF0nXG4gICAgICA/IGBcXFxcWyR7cmFuZ2V9JHtjbGVhblJhbmdlQmFja1NsYXNoKGVuZEVzY2FwZSl9JHtjbG9zZX1gXG4gICAgICA6IGNsb3NlID09PSAnXSdcbiAgICAgICAgPyBlbmRFc2NhcGUubGVuZ3RoICUgMiA9PT0gMFxuICAgICAgICAgIC8vIEEgbm9ybWFsIGNhc2UsIGFuZCBpdCBpcyBhIHJhbmdlIG5vdGF0aW9uXG4gICAgICAgICAgLy8gJ1tiYXJdJ1xuICAgICAgICAgIC8vICdbYmFyXFxcXFxcXFxdJ1xuICAgICAgICAgID8gYFske3Nhbml0aXplUmFuZ2UocmFuZ2UpfSR7ZW5kRXNjYXBlfV1gXG4gICAgICAgICAgLy8gSW52YWxpZCByYW5nZSBub3RhdG9uXG4gICAgICAgICAgLy8gJ1tiYXJcXFxcXScgLT4gJ1tiYXJcXFxcXFxcXF0nXG4gICAgICAgICAgOiAnW10nXG4gICAgICAgIDogJ1tdJ1xuICBdLFxuXG4gIC8vIGVuZGluZ1xuICBbXG4gICAgLy8gJ2pzJyB3aWxsIG5vdCBtYXRjaCAnanMuJ1xuICAgIC8vICdhYicgd2lsbCBub3QgbWF0Y2ggJ2FiYydcbiAgICAvKD86W14qXSkkLyxcblxuICAgIC8vIFdURiFcbiAgICAvLyBodHRwczovL2dpdC1zY20uY29tL2RvY3MvZ2l0aWdub3JlXG4gICAgLy8gY2hhbmdlcyBpbiBbMi4yMi4xXShodHRwczovL2dpdC1zY20uY29tL2RvY3MvZ2l0aWdub3JlLzIuMjIuMSlcbiAgICAvLyB3aGljaCByZS1maXhlcyAjMjQsICMzOFxuXG4gICAgLy8gPiBJZiB0aGVyZSBpcyBhIHNlcGFyYXRvciBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuIHRoZW4gdGhlIHBhdHRlcm5cbiAgICAvLyA+IHdpbGwgb25seSBtYXRjaCBkaXJlY3Rvcmllcywgb3RoZXJ3aXNlIHRoZSBwYXR0ZXJuIGNhbiBtYXRjaCBib3RoXG4gICAgLy8gPiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuXG5cbiAgICAvLyAnanMqJyB3aWxsIG5vdCBtYXRjaCAnYS5qcydcbiAgICAvLyAnanMvJyB3aWxsIG5vdCBtYXRjaCAnYS5qcydcbiAgICAvLyAnanMnIHdpbGwgbWF0Y2ggJ2EuanMnIGFuZCAnYS5qcy8nXG4gICAgbWF0Y2ggPT4gL1xcLyQvLnRlc3QobWF0Y2gpXG4gICAgICAvLyBmb28vIHdpbGwgbm90IG1hdGNoICdmb28nXG4gICAgICA/IGAke21hdGNofSRgXG4gICAgICAvLyBmb28gbWF0Y2hlcyAnZm9vJyBhbmQgJ2Zvby8nXG4gICAgICA6IGAke21hdGNofSg/PSR8XFxcXC8kKWBcbiAgXSxcblxuICAvLyB0cmFpbGluZyB3aWxkY2FyZFxuICBbXG4gICAgLyhcXF58XFxcXFxcLyk/XFxcXFxcKiQvLFxuICAgIChfLCBwMSkgPT4ge1xuICAgICAgY29uc3QgcHJlZml4ID0gcDFcbiAgICAgICAgLy8gJ1xcXic6XG4gICAgICAgIC8vICcvKicgZG9lcyBub3QgbWF0Y2ggRU1QVFlcbiAgICAgICAgLy8gJy8qJyBkb2VzIG5vdCBtYXRjaCBldmVyeXRoaW5nXG5cbiAgICAgICAgLy8gJ1xcXFxcXC8nOlxuICAgICAgICAvLyAnYWJjLyonIGRvZXMgbm90IG1hdGNoICdhYmMvJ1xuICAgICAgICA/IGAke3AxfVteL10rYFxuXG4gICAgICAgIC8vICdhKicgbWF0Y2hlcyAnYSdcbiAgICAgICAgLy8gJ2EqJyBtYXRjaGVzICdhYSdcbiAgICAgICAgOiAnW14vXSonXG5cbiAgICAgIHJldHVybiBgJHtwcmVmaXh9KD89JHxcXFxcLyQpYFxuICAgIH1cbiAgXSxcbl1cblxuLy8gQSBzaW1wbGUgY2FjaGUsIGJlY2F1c2UgYW4gaWdub3JlIHJ1bGUgb25seSBoYXMgb25seSBvbmUgY2VydGFpbiBtZWFuaW5nXG5jb25zdCByZWdleENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuXG4vLyBAcGFyYW0ge3BhdHRlcm59XG5jb25zdCBtYWtlUmVnZXggPSAocGF0dGVybiwgaWdub3JlQ2FzZSkgPT4ge1xuICBsZXQgc291cmNlID0gcmVnZXhDYWNoZVtwYXR0ZXJuXVxuXG4gIGlmICghc291cmNlKSB7XG4gICAgc291cmNlID0gUkVQTEFDRVJTLnJlZHVjZShcbiAgICAgIChwcmV2LCBjdXJyZW50KSA9PiBwcmV2LnJlcGxhY2UoY3VycmVudFswXSwgY3VycmVudFsxXS5iaW5kKHBhdHRlcm4pKSxcbiAgICAgIHBhdHRlcm5cbiAgICApXG4gICAgcmVnZXhDYWNoZVtwYXR0ZXJuXSA9IHNvdXJjZVxuICB9XG5cbiAgcmV0dXJuIGlnbm9yZUNhc2VcbiAgICA/IG5ldyBSZWdFeHAoc291cmNlLCAnaScpXG4gICAgOiBuZXcgUmVnRXhwKHNvdXJjZSlcbn1cblxuY29uc3QgaXNTdHJpbmcgPSBzdWJqZWN0ID0+IHR5cGVvZiBzdWJqZWN0ID09PSAnc3RyaW5nJ1xuXG4vLyA+IEEgYmxhbmsgbGluZSBtYXRjaGVzIG5vIGZpbGVzLCBzbyBpdCBjYW4gc2VydmUgYXMgYSBzZXBhcmF0b3IgZm9yIHJlYWRhYmlsaXR5LlxuY29uc3QgY2hlY2tQYXR0ZXJuID0gcGF0dGVybiA9PiBwYXR0ZXJuXG4gICYmIGlzU3RyaW5nKHBhdHRlcm4pXG4gICYmICFSRUdFWF9URVNUX0JMQU5LX0xJTkUudGVzdChwYXR0ZXJuKVxuICAmJiAhUkVHRVhfSU5WQUxJRF9UUkFJTElOR19CQUNLU0xBU0gudGVzdChwYXR0ZXJuKVxuXG4gIC8vID4gQSBsaW5lIHN0YXJ0aW5nIHdpdGggIyBzZXJ2ZXMgYXMgYSBjb21tZW50LlxuICAmJiBwYXR0ZXJuLmluZGV4T2YoJyMnKSAhPT0gMFxuXG5jb25zdCBzcGxpdFBhdHRlcm4gPSBwYXR0ZXJuID0+IHBhdHRlcm4uc3BsaXQoUkVHRVhfU1BMSVRBTExfQ1JMRilcblxuY2xhc3MgSWdub3JlUnVsZSB7XG4gIGNvbnN0cnVjdG9yIChcbiAgICBvcmlnaW4sXG4gICAgcGF0dGVybixcbiAgICBuZWdhdGl2ZSxcbiAgICByZWdleFxuICApIHtcbiAgICB0aGlzLm9yaWdpbiA9IG9yaWdpblxuICAgIHRoaXMucGF0dGVybiA9IHBhdHRlcm5cbiAgICB0aGlzLm5lZ2F0aXZlID0gbmVnYXRpdmVcbiAgICB0aGlzLnJlZ2V4ID0gcmVnZXhcbiAgfVxufVxuXG5jb25zdCBjcmVhdGVSdWxlID0gKHBhdHRlcm4sIGlnbm9yZUNhc2UpID0+IHtcbiAgY29uc3Qgb3JpZ2luID0gcGF0dGVyblxuICBsZXQgbmVnYXRpdmUgPSBmYWxzZVxuXG4gIC8vID4gQW4gb3B0aW9uYWwgcHJlZml4IFwiIVwiIHdoaWNoIG5lZ2F0ZXMgdGhlIHBhdHRlcm47XG4gIGlmIChwYXR0ZXJuLmluZGV4T2YoJyEnKSA9PT0gMCkge1xuICAgIG5lZ2F0aXZlID0gdHJ1ZVxuICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnN1YnN0cigxKVxuICB9XG5cbiAgcGF0dGVybiA9IHBhdHRlcm5cbiAgLy8gPiBQdXQgYSBiYWNrc2xhc2ggKFwiXFxcIikgaW4gZnJvbnQgb2YgdGhlIGZpcnN0IFwiIVwiIGZvciBwYXR0ZXJucyB0aGF0XG4gIC8vID4gICBiZWdpbiB3aXRoIGEgbGl0ZXJhbCBcIiFcIiwgZm9yIGV4YW1wbGUsIGBcIlxcIWltcG9ydGFudCEudHh0XCJgLlxuICAucmVwbGFjZShSRUdFWF9SRVBMQUNFX0xFQURJTkdfRVhDQVBFRF9FWENMQU1BVElPTiwgJyEnKVxuICAvLyA+IFB1dCBhIGJhY2tzbGFzaCAoXCJcXFwiKSBpbiBmcm9udCBvZiB0aGUgZmlyc3QgaGFzaCBmb3IgcGF0dGVybnMgdGhhdFxuICAvLyA+ICAgYmVnaW4gd2l0aCBhIGhhc2guXG4gIC5yZXBsYWNlKFJFR0VYX1JFUExBQ0VfTEVBRElOR19FWENBUEVEX0hBU0gsICcjJylcblxuICBjb25zdCByZWdleCA9IG1ha2VSZWdleChwYXR0ZXJuLCBpZ25vcmVDYXNlKVxuXG4gIHJldHVybiBuZXcgSWdub3JlUnVsZShcbiAgICBvcmlnaW4sXG4gICAgcGF0dGVybixcbiAgICBuZWdhdGl2ZSxcbiAgICByZWdleFxuICApXG59XG5cbmNvbnN0IHRocm93RXJyb3IgPSAobWVzc2FnZSwgQ3RvcikgPT4ge1xuICB0aHJvdyBuZXcgQ3RvcihtZXNzYWdlKVxufVxuXG5jb25zdCBjaGVja1BhdGggPSAocGF0aCwgb3JpZ2luYWxQYXRoLCBkb1Rocm93KSA9PiB7XG4gIGlmICghaXNTdHJpbmcocGF0aCkpIHtcbiAgICByZXR1cm4gZG9UaHJvdyhcbiAgICAgIGBwYXRoIG11c3QgYmUgYSBzdHJpbmcsIGJ1dCBnb3QgXFxgJHtvcmlnaW5hbFBhdGh9XFxgYCxcbiAgICAgIFR5cGVFcnJvclxuICAgIClcbiAgfVxuXG4gIC8vIFdlIGRvbid0IGtub3cgaWYgd2Ugc2hvdWxkIGlnbm9yZSBFTVBUWSwgc28gdGhyb3dcbiAgaWYgKCFwYXRoKSB7XG4gICAgcmV0dXJuIGRvVGhyb3coYHBhdGggbXVzdCBub3QgYmUgZW1wdHlgLCBUeXBlRXJyb3IpXG4gIH1cblxuICAvLyBDaGVjayBpZiBpdCBpcyBhIHJlbGF0aXZlIHBhdGhcbiAgaWYgKGNoZWNrUGF0aC5pc05vdFJlbGF0aXZlKHBhdGgpKSB7XG4gICAgY29uc3QgciA9ICdgcGF0aC5yZWxhdGl2ZSgpYGQnXG4gICAgcmV0dXJuIGRvVGhyb3coXG4gICAgICBgcGF0aCBzaG91bGQgYmUgYSAke3J9IHN0cmluZywgYnV0IGdvdCBcIiR7b3JpZ2luYWxQYXRofVwiYCxcbiAgICAgIFJhbmdlRXJyb3JcbiAgICApXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5jb25zdCBpc05vdFJlbGF0aXZlID0gcGF0aCA9PiBSRUdFWF9URVNUX0lOVkFMSURfUEFUSC50ZXN0KHBhdGgpXG5cbmNoZWNrUGF0aC5pc05vdFJlbGF0aXZlID0gaXNOb3RSZWxhdGl2ZVxuY2hlY2tQYXRoLmNvbnZlcnQgPSBwID0+IHBcblxuY2xhc3MgSWdub3JlIHtcbiAgY29uc3RydWN0b3IgKHtcbiAgICBpZ25vcmVjYXNlID0gdHJ1ZSxcbiAgICBpZ25vcmVDYXNlID0gaWdub3JlY2FzZSxcbiAgICBhbGxvd1JlbGF0aXZlUGF0aHMgPSBmYWxzZVxuICB9ID0ge30pIHtcbiAgICBkZWZpbmUodGhpcywgS0VZX0lHTk9SRSwgdHJ1ZSlcblxuICAgIHRoaXMuX3J1bGVzID0gW11cbiAgICB0aGlzLl9pZ25vcmVDYXNlID0gaWdub3JlQ2FzZVxuICAgIHRoaXMuX2FsbG93UmVsYXRpdmVQYXRocyA9IGFsbG93UmVsYXRpdmVQYXRoc1xuICAgIHRoaXMuX2luaXRDYWNoZSgpXG4gIH1cblxuICBfaW5pdENhY2hlICgpIHtcbiAgICB0aGlzLl9pZ25vcmVDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbClcbiAgICB0aGlzLl90ZXN0Q2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpXG4gIH1cblxuICBfYWRkUGF0dGVybiAocGF0dGVybikge1xuICAgIC8vICMzMlxuICAgIGlmIChwYXR0ZXJuICYmIHBhdHRlcm5bS0VZX0lHTk9SRV0pIHtcbiAgICAgIHRoaXMuX3J1bGVzID0gdGhpcy5fcnVsZXMuY29uY2F0KHBhdHRlcm4uX3J1bGVzKVxuICAgICAgdGhpcy5fYWRkZWQgPSB0cnVlXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2hlY2tQYXR0ZXJuKHBhdHRlcm4pKSB7XG4gICAgICBjb25zdCBydWxlID0gY3JlYXRlUnVsZShwYXR0ZXJuLCB0aGlzLl9pZ25vcmVDYXNlKVxuICAgICAgdGhpcy5fYWRkZWQgPSB0cnVlXG4gICAgICB0aGlzLl9ydWxlcy5wdXNoKHJ1bGUpXG4gICAgfVxuICB9XG5cbiAgLy8gQHBhcmFtIHtBcnJheTxzdHJpbmc+IHwgc3RyaW5nIHwgSWdub3JlfSBwYXR0ZXJuXG4gIGFkZCAocGF0dGVybikge1xuICAgIHRoaXMuX2FkZGVkID0gZmFsc2VcblxuICAgIG1ha2VBcnJheShcbiAgICAgIGlzU3RyaW5nKHBhdHRlcm4pXG4gICAgICAgID8gc3BsaXRQYXR0ZXJuKHBhdHRlcm4pXG4gICAgICAgIDogcGF0dGVyblxuICAgICkuZm9yRWFjaCh0aGlzLl9hZGRQYXR0ZXJuLCB0aGlzKVxuXG4gICAgLy8gU29tZSBydWxlcyBoYXZlIGp1c3QgYWRkZWQgdG8gdGhlIGlnbm9yZSxcbiAgICAvLyBtYWtpbmcgdGhlIGJlaGF2aW9yIGNoYW5nZWQuXG4gICAgaWYgKHRoaXMuX2FkZGVkKSB7XG4gICAgICB0aGlzLl9pbml0Q2FjaGUoKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBsZWdhY3lcbiAgYWRkUGF0dGVybiAocGF0dGVybikge1xuICAgIHJldHVybiB0aGlzLmFkZChwYXR0ZXJuKVxuICB9XG5cbiAgLy8gICAgICAgICAgfCAgICAgICAgICAgaWdub3JlZCA6IHVuaWdub3JlZFxuICAvLyBuZWdhdGl2ZSB8ICAgMDowICAgfCAgIDA6MSAgIHwgICAxOjAgICB8ICAgMToxXG4gIC8vIC0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS1cbiAgLy8gICAgIDAgICAgfCAgVEVTVCAgIHwgIFRFU1QgICB8ICBTS0lQICAgfCAgICBYXG4gIC8vICAgICAxICAgIHwgIFRFU1RJRiB8ICBTS0lQICAgfCAgVEVTVCAgIHwgICAgWFxuXG4gIC8vIC0gU0tJUDogYWx3YXlzIHNraXBcbiAgLy8gLSBURVNUOiBhbHdheXMgdGVzdFxuICAvLyAtIFRFU1RJRjogb25seSB0ZXN0IGlmIGNoZWNrVW5pZ25vcmVkXG4gIC8vIC0gWDogdGhhdCBuZXZlciBoYXBwZW5cblxuICAvLyBAcGFyYW0ge2Jvb2xlYW59IHdoZXRoZXIgc2hvdWxkIGNoZWNrIGlmIHRoZSBwYXRoIGlzIHVuaWdub3JlZCxcbiAgLy8gICBzZXR0aW5nIGBjaGVja1VuaWdub3JlZGAgdG8gYGZhbHNlYCBjb3VsZCByZWR1Y2UgYWRkaXRpb25hbFxuICAvLyAgIHBhdGggbWF0Y2hpbmcuXG5cbiAgLy8gQHJldHVybnMge1Rlc3RSZXN1bHR9IHRydWUgaWYgYSBmaWxlIGlzIGlnbm9yZWRcbiAgX3Rlc3RPbmUgKHBhdGgsIGNoZWNrVW5pZ25vcmVkKSB7XG4gICAgbGV0IGlnbm9yZWQgPSBmYWxzZVxuICAgIGxldCB1bmlnbm9yZWQgPSBmYWxzZVxuXG4gICAgdGhpcy5fcnVsZXMuZm9yRWFjaChydWxlID0+IHtcbiAgICAgIGNvbnN0IHtuZWdhdGl2ZX0gPSBydWxlXG4gICAgICBpZiAoXG4gICAgICAgIHVuaWdub3JlZCA9PT0gbmVnYXRpdmUgJiYgaWdub3JlZCAhPT0gdW5pZ25vcmVkXG4gICAgICAgIHx8IG5lZ2F0aXZlICYmICFpZ25vcmVkICYmICF1bmlnbm9yZWQgJiYgIWNoZWNrVW5pZ25vcmVkXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hdGNoZWQgPSBydWxlLnJlZ2V4LnRlc3QocGF0aClcblxuICAgICAgaWYgKG1hdGNoZWQpIHtcbiAgICAgICAgaWdub3JlZCA9ICFuZWdhdGl2ZVxuICAgICAgICB1bmlnbm9yZWQgPSBuZWdhdGl2ZVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4ge1xuICAgICAgaWdub3JlZCxcbiAgICAgIHVuaWdub3JlZFxuICAgIH1cbiAgfVxuXG4gIC8vIEByZXR1cm5zIHtUZXN0UmVzdWx0fVxuICBfdGVzdCAob3JpZ2luYWxQYXRoLCBjYWNoZSwgY2hlY2tVbmlnbm9yZWQsIHNsaWNlcykge1xuICAgIGNvbnN0IHBhdGggPSBvcmlnaW5hbFBhdGhcbiAgICAgIC8vIFN1cHBvcnRzIG51bGxhYmxlIHBhdGhcbiAgICAgICYmIGNoZWNrUGF0aC5jb252ZXJ0KG9yaWdpbmFsUGF0aClcblxuICAgIGNoZWNrUGF0aChcbiAgICAgIHBhdGgsXG4gICAgICBvcmlnaW5hbFBhdGgsXG4gICAgICB0aGlzLl9hbGxvd1JlbGF0aXZlUGF0aHNcbiAgICAgICAgPyBSRVRVUk5fRkFMU0VcbiAgICAgICAgOiB0aHJvd0Vycm9yXG4gICAgKVxuXG4gICAgcmV0dXJuIHRoaXMuX3QocGF0aCwgY2FjaGUsIGNoZWNrVW5pZ25vcmVkLCBzbGljZXMpXG4gIH1cblxuICBfdCAocGF0aCwgY2FjaGUsIGNoZWNrVW5pZ25vcmVkLCBzbGljZXMpIHtcbiAgICBpZiAocGF0aCBpbiBjYWNoZSkge1xuICAgICAgcmV0dXJuIGNhY2hlW3BhdGhdXG4gICAgfVxuXG4gICAgaWYgKCFzbGljZXMpIHtcbiAgICAgIC8vIHBhdGgvdG8vYS5qc1xuICAgICAgLy8gWydwYXRoJywgJ3RvJywgJ2EuanMnXVxuICAgICAgc2xpY2VzID0gcGF0aC5zcGxpdChTTEFTSClcbiAgICB9XG5cbiAgICBzbGljZXMucG9wKClcblxuICAgIC8vIElmIHRoZSBwYXRoIGhhcyBubyBwYXJlbnQgZGlyZWN0b3J5LCBqdXN0IHRlc3QgaXRcbiAgICBpZiAoIXNsaWNlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBjYWNoZVtwYXRoXSA9IHRoaXMuX3Rlc3RPbmUocGF0aCwgY2hlY2tVbmlnbm9yZWQpXG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5fdChcbiAgICAgIHNsaWNlcy5qb2luKFNMQVNIKSArIFNMQVNILFxuICAgICAgY2FjaGUsXG4gICAgICBjaGVja1VuaWdub3JlZCxcbiAgICAgIHNsaWNlc1xuICAgIClcblxuICAgIC8vIElmIHRoZSBwYXRoIGNvbnRhaW5zIGEgcGFyZW50IGRpcmVjdG9yeSwgY2hlY2sgdGhlIHBhcmVudCBmaXJzdFxuICAgIHJldHVybiBjYWNoZVtwYXRoXSA9IHBhcmVudC5pZ25vcmVkXG4gICAgICAvLyA+IEl0IGlzIG5vdCBwb3NzaWJsZSB0byByZS1pbmNsdWRlIGEgZmlsZSBpZiBhIHBhcmVudCBkaXJlY3Rvcnkgb2ZcbiAgICAgIC8vID4gICB0aGF0IGZpbGUgaXMgZXhjbHVkZWQuXG4gICAgICA/IHBhcmVudFxuICAgICAgOiB0aGlzLl90ZXN0T25lKHBhdGgsIGNoZWNrVW5pZ25vcmVkKVxuICB9XG5cbiAgaWdub3JlcyAocGF0aCkge1xuICAgIHJldHVybiB0aGlzLl90ZXN0KHBhdGgsIHRoaXMuX2lnbm9yZUNhY2hlLCBmYWxzZSkuaWdub3JlZFxuICB9XG5cbiAgY3JlYXRlRmlsdGVyICgpIHtcbiAgICByZXR1cm4gcGF0aCA9PiAhdGhpcy5pZ25vcmVzKHBhdGgpXG4gIH1cblxuICBmaWx0ZXIgKHBhdGhzKSB7XG4gICAgcmV0dXJuIG1ha2VBcnJheShwYXRocykuZmlsdGVyKHRoaXMuY3JlYXRlRmlsdGVyKCkpXG4gIH1cblxuICAvLyBAcmV0dXJucyB7VGVzdFJlc3VsdH1cbiAgdGVzdCAocGF0aCkge1xuICAgIHJldHVybiB0aGlzLl90ZXN0KHBhdGgsIHRoaXMuX3Rlc3RDYWNoZSwgdHJ1ZSlcbiAgfVxufVxuXG5jb25zdCBmYWN0b3J5ID0gb3B0aW9ucyA9PiBuZXcgSWdub3JlKG9wdGlvbnMpXG5cbmNvbnN0IGlzUGF0aFZhbGlkID0gcGF0aCA9PlxuICBjaGVja1BhdGgocGF0aCAmJiBjaGVja1BhdGguY29udmVydChwYXRoKSwgcGF0aCwgUkVUVVJOX0ZBTFNFKVxuXG5mYWN0b3J5LmlzUGF0aFZhbGlkID0gaXNQYXRoVmFsaWRcblxuLy8gRml4ZXMgdHlwZXNjcmlwdFxuZmFjdG9yeS5kZWZhdWx0ID0gZmFjdG9yeVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnlcblxuLy8gV2luZG93c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKFxuICAvLyBEZXRlY3QgYHByb2Nlc3NgIHNvIHRoYXQgaXQgY2FuIHJ1biBpbiBicm93c2Vycy5cbiAgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnXG4gICYmIChcbiAgICBwcm9jZXNzLmVudiAmJiBwcm9jZXNzLmVudi5JR05PUkVfVEVTVF9XSU4zMlxuICAgIHx8IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMidcbiAgKVxuKSB7XG4gIC8qIGVzbGludCBuby1jb250cm9sLXJlZ2V4OiBcIm9mZlwiICovXG4gIGNvbnN0IG1ha2VQb3NpeCA9IHN0ciA9PiAvXlxcXFxcXFxcXFw/XFxcXC8udGVzdChzdHIpXG4gIHx8IC9bXCI8PnxcXHUwMDAwLVxcdTAwMUZdKy91LnRlc3Qoc3RyKVxuICAgID8gc3RyXG4gICAgOiBzdHIucmVwbGFjZSgvXFxcXC9nLCAnLycpXG5cbiAgY2hlY2tQYXRoLmNvbnZlcnQgPSBtYWtlUG9zaXhcblxuICAvLyAnQzpcXFxcZm9vJyAgICAgPC0gJ0M6XFxcXGZvbycgaGFzIGJlZW4gY29udmVydGVkIHRvICdDOi8nXG4gIC8vICdkOlxcXFxmb28nXG4gIGNvbnN0IFJFR0lYX0lTX1dJTkRPV1NfUEFUSF9BQlNPTFVURSA9IC9eW2Etel06XFwvL2lcbiAgY2hlY2tQYXRoLmlzTm90UmVsYXRpdmUgPSBwYXRoID0+XG4gICAgUkVHSVhfSVNfV0lORE9XU19QQVRIX0FCU09MVVRFLnRlc3QocGF0aClcbiAgICB8fCBpc05vdFJlbGF0aXZlKHBhdGgpXG59XG4iLCAiZXhwb3J0ICogZnJvbSBcIi4vZ2VuZXJhdGUtb3BlbmFwaVwiXG5leHBvcnQgKiBmcm9tIFwiLi9nZW5lcmF0ZS1yb3V0ZS10eXBlc1wiXG4iLCAiaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCJcbmltcG9ydCB7IGdlbmVyYXRlU2NoZW1hIH0gZnJvbSBcIkBhbmF0aW5lL3pvZC1vcGVuYXBpXCJcbmltcG9ydCB7XG4gIE9wZW5BcGlCdWlsZGVyLFxuICBPcGVyYXRpb25PYmplY3QsXG4gIFBhcmFtZXRlck9iamVjdCxcbn0gZnJvbSBcIm9wZW5hcGkzLXRzL29hczMxXCJcbmltcG9ydCB7IFNldHVwUGFyYW1zIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCJcbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgcGFyc2VSb3V0ZXNJblBhY2thZ2UgfSBmcm9tIFwiLi4vbGliL3BhcnNlLXJvdXRlcy1pbi1wYWNrYWdlXCJcbmltcG9ydCB7IGVtYmVkU2NoZW1hUmVmZXJlbmNlcyB9IGZyb20gXCIuL2VtYmVkLXNjaGVtYS1yZWZlcmVuY2VzXCJcbmltcG9ydCB7IG1hcE1ldGhvZHNUb0Zlcm5TZGtNZXRhZGF0YSB9IGZyb20gXCIuL2Zlcm4tc2RrLXV0aWxzXCJcblxuZnVuY3Rpb24gcmVwbGFjZUZpcnN0Q2hhclRvTG93ZXJjYXNlKHN0cjogc3RyaW5nKSB7XG4gIGlmIChzdHIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHN0clxuICB9XG5cbiAgY29uc3QgZmlyc3RDaGFyID0gc3RyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpXG4gIHJldHVybiBmaXJzdENoYXIgKyBzdHIuc2xpY2UoMSlcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtUGF0aFRvT3BlcmF0aW9uSWQocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFydHMgPSBwYXRoXG4gICAgLnJlcGxhY2UoLy0vZywgXCJfXCIpXG4gICAgLnNwbGl0KFwiL1wiKVxuICAgIC5maWx0ZXIoKHBhcnQpID0+IHBhcnQgIT09IFwiXCIpXG4gIGNvbnN0IHRyYW5zZm9ybWVkUGFydHMgPSBwYXJ0cy5tYXAoKHBhcnQpID0+IHtcbiAgICBpZiAocGFydC5zdGFydHNXaXRoKFwiW1wiKSAmJiBwYXJ0LmVuZHNXaXRoKFwiXVwiKSkge1xuICAgICAgLy8gQ29udmVydCBbcGFyYW1dIHRvIEJ5UGFyYW1cbiAgICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gcGFydC5zbGljZSgxLCAtMSlcbiAgICAgIGNvbnN0IHdvcmRzID0gc2VydmljZU5hbWUuc3BsaXQoXCJfXCIpXG4gICAgICBjb25zdCBjYXBpdGFsaXplZFdvcmRzID0gd29yZHMubWFwKFxuICAgICAgICAod29yZCkgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSlcbiAgICAgIClcbiAgICAgIHJldHVybiBgQnkke2NhcGl0YWxpemVkV29yZHMuam9pbihcIlwiKX1gXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENvbnZlcnQgYXBpX3BhdGggdG8gQXBpUGF0aFxuICAgICAgY29uc3Qgd29yZHMgPSBwYXJ0LnNwbGl0KFwiX1wiKVxuICAgICAgY29uc3QgY2FwaXRhbGl6ZWRXb3JkcyA9IHdvcmRzLm1hcChcbiAgICAgICAgKHdvcmQpID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpXG4gICAgICApXG4gICAgICByZXR1cm4gY2FwaXRhbGl6ZWRXb3Jkcy5qb2luKFwiXCIpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiByZXBsYWNlRmlyc3RDaGFyVG9Mb3dlcmNhc2UodHJhbnNmb3JtZWRQYXJ0cy5qb2luKFwiXCIpKVxufVxuXG5mdW5jdGlvbiBwYXNjYWxDYXNlKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB3b3JkcyA9IGlucHV0LnNwbGl0KFwiIFwiKVxuICBjb25zdCBjYXBpdGFsaXplZFdvcmRzID0gd29yZHMubWFwKFxuICAgICh3b3JkKSA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKS50b0xvd2VyQ2FzZSgpXG4gIClcbiAgY29uc3QgcGFzY2FsQ2FzZVN0cmluZyA9IGNhcGl0YWxpemVkV29yZHMuam9pbihcIlwiKVxuICByZXR1cm4gcGFzY2FsQ2FzZVN0cmluZ1xufVxuXG5pbnRlcmZhY2UgVGFnT3B0aW9uIHtcbiAgbmFtZTogc3RyaW5nXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmdcbiAgZG9lc1JvdXRlSGF2ZVRhZz86IChyb3V0ZTogc3RyaW5nKSA9PiBib29sZWFuXG59XG5cbmludGVyZmFjZSBHZW5lcmF0ZU9wZW5BUElPcHRzIHtcbiAgcGFja2FnZURpcjogc3RyaW5nXG4gIG91dHB1dEZpbGU/OiBzdHJpbmdcbiAgcGF0aEdsb2I/OiBzdHJpbmdcbiAgdGFncz86IEFycmF5PFRhZ09wdGlvbj5cbiAgYXBpUHJlZml4Pzogc3RyaW5nXG4gIG1hcEZpbGVQYXRoVG9IVFRQUm91dGU/OiAoZmlsZV9wYXRoOiBzdHJpbmcpID0+IHN0cmluZ1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIGFuIE9wZW5BUEkgc3BlYyBmcm9tIHRoZSBOZXh0LmpzIEFQSSByb3V0ZXMuXG4gKlxuICogWW91IG5vcm1hbGx5IGludm9rZSB0aGlzIHdpdGggYG5leHRhcGkgZ2VuZXJhdGUtb3BlbmFwaWAgaW4gYVxuICogXCJidWlsZDpvcGVuYXBpXCIgcGFja2FnZS5qc29uIHNjcmlwdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlT3BlbkFQSShvcHRzOiBHZW5lcmF0ZU9wZW5BUElPcHRzKSB7XG4gIGNvbnN0IHsgb3V0cHV0RmlsZSwgdGFncyA9IFtdIH0gPSBvcHRzXG5cbiAgY29uc3QgZmlsZXBhdGhUb1JvdXRlRm4gPSBhd2FpdCBwYXJzZVJvdXRlc0luUGFja2FnZShvcHRzKVxuXG4gIC8vIFRPRE8gZGV0ZWN0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBzZXR1cHMgYW5kIG91dHB1dCBkaWZmZXJlbnQgQVBJc1xuICBjb25zdCB7IHNldHVwUGFyYW1zOiBnbG9iYWxTZXR1cFBhcmFtcyB9ID0gZmlsZXBhdGhUb1JvdXRlRm4udmFsdWVzKCkubmV4dCgpXG4gICAgLnZhbHVlIGFzIHsgc2V0dXBQYXJhbXM6IFNldHVwUGFyYW1zIH1cblxuICBjb25zdCBzZWN1cml0eVNjaGVtZXMgPSBnbG9iYWxTZXR1cFBhcmFtcy5zZWN1cml0eVNjaGVtYXMgPz8ge31cbiAgY29uc3Qgc2VjdXJpdHlPYmplY3RzRm9yQXV0aFR5cGUgPSB7fVxuICBmb3IgKGNvbnN0IGF1dGhOYW1lIG9mIE9iamVjdC5rZXlzKGdsb2JhbFNldHVwUGFyYW1zLmF1dGhNaWRkbGV3YXJlTWFwKSkge1xuICAgIGNvbnN0IG13ID0gZ2xvYmFsU2V0dXBQYXJhbXMuYXV0aE1pZGRsZXdhcmVNYXBbYXV0aE5hbWVdXG4gICAgaWYgKG13LnNlY3VyaXR5U2NoZW1hKSB7XG4gICAgICBzZWN1cml0eVNjaGVtZXNbYXV0aE5hbWVdID0gKG13IGFzIGFueSkuc2VjdXJpdHlTY2hlbWFcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBjaGFsay55ZWxsb3coXG4gICAgICAgICAgYEF1dGhlbnRpY2F0aW9uIG1pZGRsZXdhcmUgXCIke2F1dGhOYW1lfVwiIGhhcyBubyBzZWN1cml0eVNjaGVtYS4gWW91IGNhbiBkZWZpbmUgdGhpcyBvbiB0aGUgZnVuY3Rpb24gKGUuZy4gYWZ0ZXIgdGhlIGV4cG9ydCBkby4uLiBcXG5cXG5teU1pZGRsZXdhcmUuc2VjdXJpdHlTY2hlbWEgPSB7XFxuICB0eXBlOiBcImh0dHBcIlxcbiAgc2NoZW1lOiBcImJlYXJlclwiXFxuICBiZWFyZXJGb3JtYXQ6IFwiSldUXCJcXG4gLy8gb3IgQVBJIFRva2VuIGV0Yy5cXG59XFxuXFxuWW91IGNhbiBhbHNvIGRlZmluZSBcInNlY3VyaXR5T2JqZWN0c1wiIHRoaXMgd2F5LCBpZiB5b3Ugd2FudCB0byBtYWtlIHRoZSBlbmRwb2ludCBzdXBwb3J0IG11bHRpcGxlIG1vZGVzIG9mIGF1dGhlbnRpY2F0aW9uLlxcblxcbmBcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH1cblxuICAgIHNlY3VyaXR5T2JqZWN0c0ZvckF1dGhUeXBlW2F1dGhOYW1lXSA9IChtdyBhcyBhbnkpLnNlY3VyaXR5T2JqZWN0cyB8fCBbXG4gICAgICB7XG4gICAgICAgIFthdXRoTmFtZV06IFtdLFxuICAgICAgfSxcbiAgICBdXG4gIH1cblxuICBjb25zdCBnbG9iYWxTY2hlbWFzID0ge31cbiAgZm9yIChjb25zdCBbc2NoZW1hTmFtZSwgem9kU2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICBnbG9iYWxTZXR1cFBhcmFtcy5nbG9iYWxTY2hlbWFzID8/IHt9XG4gICkpIHtcbiAgICBnbG9iYWxTY2hlbWFzW3NjaGVtYU5hbWVdID0gZ2VuZXJhdGVTY2hlbWEoem9kU2NoZW1hKVxuICB9XG5cbiAgLy8gQnVpbGQgT3BlbkFQSSBzcGVjXG4gIGNvbnN0IGJ1aWxkZXIgPSBPcGVuQXBpQnVpbGRlci5jcmVhdGUoe1xuICAgIG9wZW5hcGk6IFwiMy4wLjBcIixcbiAgICBpbmZvOiB7XG4gICAgICB0aXRsZTogZ2xvYmFsU2V0dXBQYXJhbXMuYXBpTmFtZSxcbiAgICAgIHZlcnNpb246IFwiMS4wLjBcIixcbiAgICB9LFxuICAgIHNlcnZlcnM6IFtcbiAgICAgIHtcbiAgICAgICAgdXJsOiBnbG9iYWxTZXR1cFBhcmFtcy5wcm9kdWN0aW9uU2VydmVyVXJsIHx8IFwiaHR0cHM6Ly9leGFtcGxlLmNvbVwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHRhZ3M6IHRhZ3MubWFwKCh0YWcpID0+ICh7IG5hbWU6IHRhZy5uYW1lLCBkZXNjcmlwdGlvbjogdGFnLmRlc2NyaXB0aW9uIH0pKSxcbiAgICBwYXRoczoge30sXG4gICAgY29tcG9uZW50czoge1xuICAgICAgc2VjdXJpdHlTY2hlbWVzLFxuICAgICAgc2NoZW1hczogZ2xvYmFsU2NoZW1hcyxcbiAgICB9LFxuICB9KVxuXG4gIGZvciAoY29uc3QgW1xuICAgIGZpbGVfcGF0aCxcbiAgICB7IHNldHVwUGFyYW1zLCByb3V0ZVNwZWMsIHJvdXRlOiByb3V0ZVBhdGggfSxcbiAgXSBvZiBmaWxlcGF0aFRvUm91dGVGbikge1xuICAgIGNvbnN0IGlzUG9zdE9yUHV0T3JQYXRjaCA9IFtcIlBPU1RcIiwgXCJQVVRcIiwgXCJQQVRDSFwiXS5zb21lKChtZXRob2QpID0+XG4gICAgICByb3V0ZVNwZWMubWV0aG9kcy5pbmNsdWRlcyhtZXRob2QpXG4gICAgKVxuICAgIC8vIFRPRE86IHN1cHBvcnQgbXVsdGlwYXJ0L2Zvcm0tZGF0YVxuXG4gICAgLy8gaGFuZGxlIGJvZHlcbiAgICBsZXQgYm9keV90b19nZW5lcmF0ZV9zY2hlbWFcbiAgICBpZiAoaXNQb3N0T3JQdXRPclBhdGNoKSB7XG4gICAgICBib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSA9IHJvdXRlU3BlYy5qc29uQm9keSA/PyByb3V0ZVNwZWMuY29tbW9uUGFyYW1zXG5cbiAgICAgIGlmIChyb3V0ZVNwZWMuanNvbkJvZHkgJiYgcm91dGVTcGVjLmNvbW1vblBhcmFtcykge1xuICAgICAgICBib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSA9IHJvdXRlU3BlYy5qc29uQm9keS5tZXJnZShcbiAgICAgICAgICByb3V0ZVNwZWMuY29tbW9uUGFyYW1zXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYm9keV90b19nZW5lcmF0ZV9zY2hlbWEgPSByb3V0ZVNwZWMuanNvbkJvZHlcbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgcXVlcnlcbiAgICBsZXQgcXVlcnlfdG9fZ2VuZXJhdGVfc2NoZW1hXG4gICAgaWYgKGlzUG9zdE9yUHV0T3JQYXRjaCkge1xuICAgICAgcXVlcnlfdG9fZ2VuZXJhdGVfc2NoZW1hID0gcm91dGVTcGVjLnF1ZXJ5UGFyYW1zXG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXJ5X3RvX2dlbmVyYXRlX3NjaGVtYSA9IHJvdXRlU3BlYy5xdWVyeVBhcmFtcyA/PyByb3V0ZVNwZWMuY29tbW9uUGFyYW1zXG5cbiAgICAgIGlmIChyb3V0ZVNwZWMucXVlcnlQYXJhbXMgJiYgcm91dGVTcGVjLmNvbW1vblBhcmFtcykge1xuICAgICAgICBxdWVyeV90b19nZW5lcmF0ZV9zY2hlbWEgPSByb3V0ZVNwZWMucXVlcnlQYXJhbXMubWVyZ2UoXG4gICAgICAgICAgcm91dGVTcGVjLmNvbW1vblBhcmFtc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gREVMRVRFIGFuZCBHRVQgY2Fubm90IGhhdmUgYSBib2R5XG4gICAgbGV0IG1ldGhvZHMgPSByb3V0ZVNwZWMubWV0aG9kc1xuXG4gICAgaWYgKHJvdXRlU3BlYy5tZXRob2RzLmluY2x1ZGVzKFwiREVMRVRFXCIpICYmIGJvZHlfdG9fZ2VuZXJhdGVfc2NoZW1hKSB7XG4gICAgICBtZXRob2RzID0gbWV0aG9kcy5maWx0ZXIoKG0pID0+IG0gIT09IFwiREVMRVRFXCIpXG4gICAgfVxuXG4gICAgaWYgKHJvdXRlU3BlYy5tZXRob2RzLmluY2x1ZGVzKFwiR0VUXCIpICYmIGJvZHlfdG9fZ2VuZXJhdGVfc2NoZW1hKSB7XG4gICAgICBtZXRob2RzID0gbWV0aG9kcy5maWx0ZXIoKG0pID0+IG0gIT09IFwiR0VUXCIpXG4gICAgfVxuXG4gICAgaWYgKG1ldGhvZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGNoYWxrLnllbGxvdyhgU2tpcHBpbmcgcm91dGUgJHtyb3V0ZVBhdGh9IGJlY2F1c2UgaXQgaGFzIG5vIG1ldGhvZHMuYClcbiAgICAgIClcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3Qgcm91dGU6IE9wZXJhdGlvbk9iamVjdCA9IHtcbiAgICAgIHN1bW1hcnk6IHJvdXRlUGF0aCxcbiAgICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJPS1wiLFxuICAgICAgICB9LFxuICAgICAgICA0MDA6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJCYWQgUmVxdWVzdFwiLFxuICAgICAgICB9LFxuICAgICAgICA0MDE6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJVbmF1dGhvcml6ZWRcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzZWN1cml0eTogc2VjdXJpdHlPYmplY3RzRm9yQXV0aFR5cGVbcm91dGVTcGVjLmF1dGhdLFxuICAgIH1cblxuICAgIGlmIChib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSkge1xuICAgICAgcm91dGUucmVxdWVzdEJvZHkgPSB7XG4gICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgICAgc2NoZW1hOiBnZW5lcmF0ZVNjaGVtYShib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSBhcyBhbnkpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5X3RvX2dlbmVyYXRlX3NjaGVtYSkge1xuICAgICAgY29uc3Qgc2NoZW1hID0gZ2VuZXJhdGVTY2hlbWEocXVlcnlfdG9fZ2VuZXJhdGVfc2NoZW1hIGFzIGFueSlcbiAgICAgIGlmIChzY2hlbWEucHJvcGVydGllcykge1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJPYmplY3RbXSA9IE9iamVjdC5rZXlzKFxuICAgICAgICAgIHNjaGVtYS5wcm9wZXJ0aWVzIGFzIGFueVxuICAgICAgICApLm1hcCgobmFtZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgaW46IFwicXVlcnlcIixcbiAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hLnByb3BlcnRpZXMhW25hbWVdLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHNjaGVtYS5yZXF1aXJlZD8uaW5jbHVkZXMobmFtZSksXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIHJvdXRlLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyBqc29uUmVzcG9uc2UgfSA9IHJvdXRlU3BlY1xuICAgIGNvbnN0IHsgYWRkT2tTdGF0dXMgPSB0cnVlIH0gPSBzZXR1cFBhcmFtc1xuXG4gICAgaWYgKGpzb25SZXNwb25zZSkge1xuICAgICAgaWYgKFxuICAgICAgICAhanNvblJlc3BvbnNlLl9kZWYgfHxcbiAgICAgICAgIWpzb25SZXNwb25zZS5fZGVmLnR5cGVOYW1lIHx8XG4gICAgICAgIGpzb25SZXNwb25zZS5fZGVmLnR5cGVOYW1lICE9PSBcIlpvZE9iamVjdFwiXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGNoYWxrLnllbGxvdyhcbiAgICAgICAgICAgIGBTa2lwcGluZyByb3V0ZSAke3JvdXRlUGF0aH0gYmVjYXVzZSB0aGUgcmVzcG9uc2UgaXMgbm90IGEgWm9kT2JqZWN0LmBcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzcG9uc2VTY2hlbWEgPSBnZW5lcmF0ZVNjaGVtYShcbiAgICAgICAgYWRkT2tTdGF0dXMgPyBqc29uUmVzcG9uc2UuZXh0ZW5kKHsgb2s6IHouYm9vbGVhbigpIH0pIDoganNvblJlc3BvbnNlXG4gICAgICApXG5cbiAgICAgIGNvbnN0IHNjaGVtYVdpdGhSZWZlcmVuY2VzID0gZW1iZWRTY2hlbWFSZWZlcmVuY2VzKFxuICAgICAgICByZXNwb25zZVNjaGVtYSxcbiAgICAgICAgZ2xvYmFsU2NoZW1hc1xuICAgICAgKVxuXG4gICAgICByb3V0ZS5yZXNwb25zZXNbMjAwXS5jb250ZW50ID0ge1xuICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgIHNjaGVtYTogc2NoZW1hV2l0aFJlZmVyZW5jZXMsXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgfVxuXG4gICAgcm91dGUudGFncyA9IFtdXG4gICAgZm9yIChjb25zdCB0YWcgb2YgdGFncykge1xuICAgICAgaWYgKHRhZy5kb2VzUm91dGVIYXZlVGFnICYmIHRhZy5kb2VzUm91dGVIYXZlVGFnKHJvdXRlLnN1bW1hcnkgfHwgXCJcIikpIHtcbiAgICAgICAgcm91dGUudGFncy5wdXNoKHRhZy5uYW1lKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1ldGhvZHNNYXBwZWRUb0Zlcm5TZGtNZXRhZGF0YSA9IG1hcE1ldGhvZHNUb0Zlcm5TZGtNZXRhZGF0YShcbiAgICAgIG1ldGhvZHMsXG4gICAgICByb3V0ZVBhdGhcbiAgICApXG5cbiAgICAvLyBTb21lIHJvdXRlcyBhY2NlcHQgbXVsdGlwbGUgbWV0aG9kc1xuICAgIGJ1aWxkZXIuYWRkUGF0aChyb3V0ZVBhdGgsIHtcbiAgICAgIC4uLm1ldGhvZHNcbiAgICAgICAgLm1hcCgobWV0aG9kKSA9PiAoe1xuICAgICAgICAgIFttZXRob2QudG9Mb3dlckNhc2UoKV06IHtcbiAgICAgICAgICAgIC4uLm1ldGhvZHNNYXBwZWRUb0Zlcm5TZGtNZXRhZGF0YVttZXRob2RdLFxuICAgICAgICAgICAgLi4ucm91dGUsXG4gICAgICAgICAgICBvcGVyYXRpb25JZDogYCR7dHJhbnNmb3JtUGF0aFRvT3BlcmF0aW9uSWQocm91dGVQYXRoKX0ke3Bhc2NhbENhc2UoXG4gICAgICAgICAgICAgIG1ldGhvZFxuICAgICAgICAgICAgKX1gLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pKVxuICAgICAgICAucmVkdWNlUmlnaHQoKGFjYywgY3VyKSA9PiAoeyAuLi5hY2MsIC4uLmN1ciB9KSwge30pLFxuICAgIH0pXG4gIH1cblxuICBpZiAob3V0cHV0RmlsZSkge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShvdXRwdXRGaWxlLCBidWlsZGVyLmdldFNwZWNBc0pzb24oKSlcbiAgfVxuXG4gIHJldHVybiBidWlsZGVyLmdldFNwZWNBc0pzb24oKVxufVxuIiwgImltcG9ydCBhbnNpU3R5bGVzIGZyb20gJyNhbnNpLXN0eWxlcyc7XG5pbXBvcnQgc3VwcG9ydHNDb2xvciBmcm9tICcjc3VwcG9ydHMtY29sb3InO1xuaW1wb3J0IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvb3JkZXJcblx0c3RyaW5nUmVwbGFjZUFsbCxcblx0c3RyaW5nRW5jYXNlQ1JMRldpdGhGaXJzdEluZGV4LFxufSBmcm9tICcuL3V0aWxpdGllcy5qcyc7XG5cbmNvbnN0IHtzdGRvdXQ6IHN0ZG91dENvbG9yLCBzdGRlcnI6IHN0ZGVyckNvbG9yfSA9IHN1cHBvcnRzQ29sb3I7XG5cbmNvbnN0IEdFTkVSQVRPUiA9IFN5bWJvbCgnR0VORVJBVE9SJyk7XG5jb25zdCBTVFlMRVIgPSBTeW1ib2woJ1NUWUxFUicpO1xuY29uc3QgSVNfRU1QVFkgPSBTeW1ib2woJ0lTX0VNUFRZJyk7XG5cbi8vIGBzdXBwb3J0c0NvbG9yLmxldmVsYCBcdTIxOTIgYGFuc2lTdHlsZXMuY29sb3JbbmFtZV1gIG1hcHBpbmdcbmNvbnN0IGxldmVsTWFwcGluZyA9IFtcblx0J2Fuc2knLFxuXHQnYW5zaScsXG5cdCdhbnNpMjU2Jyxcblx0J2Fuc2kxNm0nLFxuXTtcblxuY29uc3Qgc3R5bGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuY29uc3QgYXBwbHlPcHRpb25zID0gKG9iamVjdCwgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGlmIChvcHRpb25zLmxldmVsICYmICEoTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zLmxldmVsKSAmJiBvcHRpb25zLmxldmVsID49IDAgJiYgb3B0aW9ucy5sZXZlbCA8PSAzKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignVGhlIGBsZXZlbGAgb3B0aW9uIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGZyb20gMCB0byAzJyk7XG5cdH1cblxuXHQvLyBEZXRlY3QgbGV2ZWwgaWYgbm90IHNldCBtYW51YWxseVxuXHRjb25zdCBjb2xvckxldmVsID0gc3Rkb3V0Q29sb3IgPyBzdGRvdXRDb2xvci5sZXZlbCA6IDA7XG5cdG9iamVjdC5sZXZlbCA9IG9wdGlvbnMubGV2ZWwgPT09IHVuZGVmaW5lZCA/IGNvbG9yTGV2ZWwgOiBvcHRpb25zLmxldmVsO1xufTtcblxuZXhwb3J0IGNsYXNzIENoYWxrIHtcblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdHJ1Y3Rvci1yZXR1cm5cblx0XHRyZXR1cm4gY2hhbGtGYWN0b3J5KG9wdGlvbnMpO1xuXHR9XG59XG5cbmNvbnN0IGNoYWxrRmFjdG9yeSA9IG9wdGlvbnMgPT4ge1xuXHRjb25zdCBjaGFsayA9ICguLi5zdHJpbmdzKSA9PiBzdHJpbmdzLmpvaW4oJyAnKTtcblx0YXBwbHlPcHRpb25zKGNoYWxrLCBvcHRpb25zKTtcblxuXHRPYmplY3Quc2V0UHJvdG90eXBlT2YoY2hhbGssIGNyZWF0ZUNoYWxrLnByb3RvdHlwZSk7XG5cblx0cmV0dXJuIGNoYWxrO1xufTtcblxuZnVuY3Rpb24gY3JlYXRlQ2hhbGsob3B0aW9ucykge1xuXHRyZXR1cm4gY2hhbGtGYWN0b3J5KG9wdGlvbnMpO1xufVxuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoY3JlYXRlQ2hhbGsucHJvdG90eXBlLCBGdW5jdGlvbi5wcm90b3R5cGUpO1xuXG5mb3IgKGNvbnN0IFtzdHlsZU5hbWUsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhhbnNpU3R5bGVzKSkge1xuXHRzdHlsZXNbc3R5bGVOYW1lXSA9IHtcblx0XHRnZXQoKSB7XG5cdFx0XHRjb25zdCBidWlsZGVyID0gY3JlYXRlQnVpbGRlcih0aGlzLCBjcmVhdGVTdHlsZXIoc3R5bGUub3Blbiwgc3R5bGUuY2xvc2UsIHRoaXNbU1RZTEVSXSksIHRoaXNbSVNfRU1QVFldKTtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBzdHlsZU5hbWUsIHt2YWx1ZTogYnVpbGRlcn0pO1xuXHRcdFx0cmV0dXJuIGJ1aWxkZXI7XG5cdFx0fSxcblx0fTtcbn1cblxuc3R5bGVzLnZpc2libGUgPSB7XG5cdGdldCgpIHtcblx0XHRjb25zdCBidWlsZGVyID0gY3JlYXRlQnVpbGRlcih0aGlzLCB0aGlzW1NUWUxFUl0sIHRydWUpO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndmlzaWJsZScsIHt2YWx1ZTogYnVpbGRlcn0pO1xuXHRcdHJldHVybiBidWlsZGVyO1xuXHR9LFxufTtcblxuY29uc3QgZ2V0TW9kZWxBbnNpID0gKG1vZGVsLCBsZXZlbCwgdHlwZSwgLi4uYXJndW1lbnRzXykgPT4ge1xuXHRpZiAobW9kZWwgPT09ICdyZ2InKSB7XG5cdFx0aWYgKGxldmVsID09PSAnYW5zaTE2bScpIHtcblx0XHRcdHJldHVybiBhbnNpU3R5bGVzW3R5cGVdLmFuc2kxNm0oLi4uYXJndW1lbnRzXyk7XG5cdFx0fVxuXG5cdFx0aWYgKGxldmVsID09PSAnYW5zaTI1NicpIHtcblx0XHRcdHJldHVybiBhbnNpU3R5bGVzW3R5cGVdLmFuc2kyNTYoYW5zaVN0eWxlcy5yZ2JUb0Fuc2kyNTYoLi4uYXJndW1lbnRzXykpO1xuXHRcdH1cblxuXHRcdHJldHVybiBhbnNpU3R5bGVzW3R5cGVdLmFuc2koYW5zaVN0eWxlcy5yZ2JUb0Fuc2koLi4uYXJndW1lbnRzXykpO1xuXHR9XG5cblx0aWYgKG1vZGVsID09PSAnaGV4Jykge1xuXHRcdHJldHVybiBnZXRNb2RlbEFuc2koJ3JnYicsIGxldmVsLCB0eXBlLCAuLi5hbnNpU3R5bGVzLmhleFRvUmdiKC4uLmFyZ3VtZW50c18pKTtcblx0fVxuXG5cdHJldHVybiBhbnNpU3R5bGVzW3R5cGVdW21vZGVsXSguLi5hcmd1bWVudHNfKTtcbn07XG5cbmNvbnN0IHVzZWRNb2RlbHMgPSBbJ3JnYicsICdoZXgnLCAnYW5zaTI1NiddO1xuXG5mb3IgKGNvbnN0IG1vZGVsIG9mIHVzZWRNb2RlbHMpIHtcblx0c3R5bGVzW21vZGVsXSA9IHtcblx0XHRnZXQoKSB7XG5cdFx0XHRjb25zdCB7bGV2ZWx9ID0gdGhpcztcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoLi4uYXJndW1lbnRzXykge1xuXHRcdFx0XHRjb25zdCBzdHlsZXIgPSBjcmVhdGVTdHlsZXIoZ2V0TW9kZWxBbnNpKG1vZGVsLCBsZXZlbE1hcHBpbmdbbGV2ZWxdLCAnY29sb3InLCAuLi5hcmd1bWVudHNfKSwgYW5zaVN0eWxlcy5jb2xvci5jbG9zZSwgdGhpc1tTVFlMRVJdKTtcblx0XHRcdFx0cmV0dXJuIGNyZWF0ZUJ1aWxkZXIodGhpcywgc3R5bGVyLCB0aGlzW0lTX0VNUFRZXSk7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdH07XG5cblx0Y29uc3QgYmdNb2RlbCA9ICdiZycgKyBtb2RlbFswXS50b1VwcGVyQ2FzZSgpICsgbW9kZWwuc2xpY2UoMSk7XG5cdHN0eWxlc1tiZ01vZGVsXSA9IHtcblx0XHRnZXQoKSB7XG5cdFx0XHRjb25zdCB7bGV2ZWx9ID0gdGhpcztcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoLi4uYXJndW1lbnRzXykge1xuXHRcdFx0XHRjb25zdCBzdHlsZXIgPSBjcmVhdGVTdHlsZXIoZ2V0TW9kZWxBbnNpKG1vZGVsLCBsZXZlbE1hcHBpbmdbbGV2ZWxdLCAnYmdDb2xvcicsIC4uLmFyZ3VtZW50c18pLCBhbnNpU3R5bGVzLmJnQ29sb3IuY2xvc2UsIHRoaXNbU1RZTEVSXSk7XG5cdFx0XHRcdHJldHVybiBjcmVhdGVCdWlsZGVyKHRoaXMsIHN0eWxlciwgdGhpc1tJU19FTVBUWV0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXHR9O1xufVxuXG5jb25zdCBwcm90byA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCgpID0+IHt9LCB7XG5cdC4uLnN0eWxlcyxcblx0bGV2ZWw6IHtcblx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdGdldCgpIHtcblx0XHRcdHJldHVybiB0aGlzW0dFTkVSQVRPUl0ubGV2ZWw7XG5cdFx0fSxcblx0XHRzZXQobGV2ZWwpIHtcblx0XHRcdHRoaXNbR0VORVJBVE9SXS5sZXZlbCA9IGxldmVsO1xuXHRcdH0sXG5cdH0sXG59KTtcblxuY29uc3QgY3JlYXRlU3R5bGVyID0gKG9wZW4sIGNsb3NlLCBwYXJlbnQpID0+IHtcblx0bGV0IG9wZW5BbGw7XG5cdGxldCBjbG9zZUFsbDtcblx0aWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0b3BlbkFsbCA9IG9wZW47XG5cdFx0Y2xvc2VBbGwgPSBjbG9zZTtcblx0fSBlbHNlIHtcblx0XHRvcGVuQWxsID0gcGFyZW50Lm9wZW5BbGwgKyBvcGVuO1xuXHRcdGNsb3NlQWxsID0gY2xvc2UgKyBwYXJlbnQuY2xvc2VBbGw7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdG9wZW4sXG5cdFx0Y2xvc2UsXG5cdFx0b3BlbkFsbCxcblx0XHRjbG9zZUFsbCxcblx0XHRwYXJlbnQsXG5cdH07XG59O1xuXG5jb25zdCBjcmVhdGVCdWlsZGVyID0gKHNlbGYsIF9zdHlsZXIsIF9pc0VtcHR5KSA9PiB7XG5cdC8vIFNpbmdsZSBhcmd1bWVudCBpcyBob3QgcGF0aCwgaW1wbGljaXQgY29lcmNpb24gaXMgZmFzdGVyIHRoYW4gYW55dGhpbmdcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWltcGxpY2l0LWNvZXJjaW9uXG5cdGNvbnN0IGJ1aWxkZXIgPSAoLi4uYXJndW1lbnRzXykgPT4gYXBwbHlTdHlsZShidWlsZGVyLCAoYXJndW1lbnRzXy5sZW5ndGggPT09IDEpID8gKCcnICsgYXJndW1lbnRzX1swXSkgOiBhcmd1bWVudHNfLmpvaW4oJyAnKSk7XG5cblx0Ly8gV2UgYWx0ZXIgdGhlIHByb3RvdHlwZSBiZWNhdXNlIHdlIG11c3QgcmV0dXJuIGEgZnVuY3Rpb24sIGJ1dCB0aGVyZSBpc1xuXHQvLyBubyB3YXkgdG8gY3JlYXRlIGEgZnVuY3Rpb24gd2l0aCBhIGRpZmZlcmVudCBwcm90b3R5cGVcblx0T2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1aWxkZXIsIHByb3RvKTtcblxuXHRidWlsZGVyW0dFTkVSQVRPUl0gPSBzZWxmO1xuXHRidWlsZGVyW1NUWUxFUl0gPSBfc3R5bGVyO1xuXHRidWlsZGVyW0lTX0VNUFRZXSA9IF9pc0VtcHR5O1xuXG5cdHJldHVybiBidWlsZGVyO1xufTtcblxuY29uc3QgYXBwbHlTdHlsZSA9IChzZWxmLCBzdHJpbmcpID0+IHtcblx0aWYgKHNlbGYubGV2ZWwgPD0gMCB8fCAhc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHNlbGZbSVNfRU1QVFldID8gJycgOiBzdHJpbmc7XG5cdH1cblxuXHRsZXQgc3R5bGVyID0gc2VsZltTVFlMRVJdO1xuXG5cdGlmIChzdHlsZXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBzdHJpbmc7XG5cdH1cblxuXHRjb25zdCB7b3BlbkFsbCwgY2xvc2VBbGx9ID0gc3R5bGVyO1xuXHRpZiAoc3RyaW5nLmluY2x1ZGVzKCdcXHUwMDFCJykpIHtcblx0XHR3aGlsZSAoc3R5bGVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIFJlcGxhY2UgYW55IGluc3RhbmNlcyBhbHJlYWR5IHByZXNlbnQgd2l0aCBhIHJlLW9wZW5pbmcgY29kZVxuXHRcdFx0Ly8gb3RoZXJ3aXNlIG9ubHkgdGhlIHBhcnQgb2YgdGhlIHN0cmluZyB1bnRpbCBzYWlkIGNsb3NpbmcgY29kZVxuXHRcdFx0Ly8gd2lsbCBiZSBjb2xvcmVkLCBhbmQgdGhlIHJlc3Qgd2lsbCBzaW1wbHkgYmUgJ3BsYWluJy5cblx0XHRcdHN0cmluZyA9IHN0cmluZ1JlcGxhY2VBbGwoc3RyaW5nLCBzdHlsZXIuY2xvc2UsIHN0eWxlci5vcGVuKTtcblxuXHRcdFx0c3R5bGVyID0gc3R5bGVyLnBhcmVudDtcblx0XHR9XG5cdH1cblxuXHQvLyBXZSBjYW4gbW92ZSBib3RoIG5leHQgYWN0aW9ucyBvdXQgb2YgbG9vcCwgYmVjYXVzZSByZW1haW5pbmcgYWN0aW9ucyBpbiBsb29wIHdvbid0IGhhdmVcblx0Ly8gYW55L3Zpc2libGUgZWZmZWN0IG9uIHBhcnRzIHdlIGFkZCBoZXJlLiBDbG9zZSB0aGUgc3R5bGluZyBiZWZvcmUgYSBsaW5lYnJlYWsgYW5kIHJlb3BlblxuXHQvLyBhZnRlciBuZXh0IGxpbmUgdG8gZml4IGEgYmxlZWQgaXNzdWUgb24gbWFjT1M6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9jaGFsay9wdWxsLzkyXG5cdGNvbnN0IGxmSW5kZXggPSBzdHJpbmcuaW5kZXhPZignXFxuJyk7XG5cdGlmIChsZkluZGV4ICE9PSAtMSkge1xuXHRcdHN0cmluZyA9IHN0cmluZ0VuY2FzZUNSTEZXaXRoRmlyc3RJbmRleChzdHJpbmcsIGNsb3NlQWxsLCBvcGVuQWxsLCBsZkluZGV4KTtcblx0fVxuXG5cdHJldHVybiBvcGVuQWxsICsgc3RyaW5nICsgY2xvc2VBbGw7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhjcmVhdGVDaGFsay5wcm90b3R5cGUsIHN0eWxlcyk7XG5cbmNvbnN0IGNoYWxrID0gY3JlYXRlQ2hhbGsoKTtcbmV4cG9ydCBjb25zdCBjaGFsa1N0ZGVyciA9IGNyZWF0ZUNoYWxrKHtsZXZlbDogc3RkZXJyQ29sb3IgPyBzdGRlcnJDb2xvci5sZXZlbCA6IDB9KTtcblxuZXhwb3J0IHtcblx0bW9kaWZpZXJOYW1lcyxcblx0Zm9yZWdyb3VuZENvbG9yTmFtZXMsXG5cdGJhY2tncm91bmRDb2xvck5hbWVzLFxuXHRjb2xvck5hbWVzLFxuXG5cdC8vIFRPRE86IFJlbW92ZSB0aGVzZSBhbGlhc2VzIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb25cblx0bW9kaWZpZXJOYW1lcyBhcyBtb2RpZmllcnMsXG5cdGZvcmVncm91bmRDb2xvck5hbWVzIGFzIGZvcmVncm91bmRDb2xvcnMsXG5cdGJhY2tncm91bmRDb2xvck5hbWVzIGFzIGJhY2tncm91bmRDb2xvcnMsXG5cdGNvbG9yTmFtZXMgYXMgY29sb3JzLFxufSBmcm9tICcuL3ZlbmRvci9hbnNpLXN0eWxlcy9pbmRleC5qcyc7XG5cbmV4cG9ydCB7XG5cdHN0ZG91dENvbG9yIGFzIHN1cHBvcnRzQ29sb3IsXG5cdHN0ZGVyckNvbG9yIGFzIHN1cHBvcnRzQ29sb3JTdGRlcnIsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjaGFsaztcbiIsICJjb25zdCBBTlNJX0JBQ0tHUk9VTkRfT0ZGU0VUID0gMTA7XG5cbmNvbnN0IHdyYXBBbnNpMTYgPSAob2Zmc2V0ID0gMCkgPT4gY29kZSA9PiBgXFx1MDAxQlske2NvZGUgKyBvZmZzZXR9bWA7XG5cbmNvbnN0IHdyYXBBbnNpMjU2ID0gKG9mZnNldCA9IDApID0+IGNvZGUgPT4gYFxcdTAwMUJbJHszOCArIG9mZnNldH07NTske2NvZGV9bWA7XG5cbmNvbnN0IHdyYXBBbnNpMTZtID0gKG9mZnNldCA9IDApID0+IChyZWQsIGdyZWVuLCBibHVlKSA9PiBgXFx1MDAxQlskezM4ICsgb2Zmc2V0fTsyOyR7cmVkfTske2dyZWVufTske2JsdWV9bWA7XG5cbmNvbnN0IHN0eWxlcyA9IHtcblx0bW9kaWZpZXI6IHtcblx0XHRyZXNldDogWzAsIDBdLFxuXHRcdC8vIDIxIGlzbid0IHdpZGVseSBzdXBwb3J0ZWQgYW5kIDIyIGRvZXMgdGhlIHNhbWUgdGhpbmdcblx0XHRib2xkOiBbMSwgMjJdLFxuXHRcdGRpbTogWzIsIDIyXSxcblx0XHRpdGFsaWM6IFszLCAyM10sXG5cdFx0dW5kZXJsaW5lOiBbNCwgMjRdLFxuXHRcdG92ZXJsaW5lOiBbNTMsIDU1XSxcblx0XHRpbnZlcnNlOiBbNywgMjddLFxuXHRcdGhpZGRlbjogWzgsIDI4XSxcblx0XHRzdHJpa2V0aHJvdWdoOiBbOSwgMjldLFxuXHR9LFxuXHRjb2xvcjoge1xuXHRcdGJsYWNrOiBbMzAsIDM5XSxcblx0XHRyZWQ6IFszMSwgMzldLFxuXHRcdGdyZWVuOiBbMzIsIDM5XSxcblx0XHR5ZWxsb3c6IFszMywgMzldLFxuXHRcdGJsdWU6IFszNCwgMzldLFxuXHRcdG1hZ2VudGE6IFszNSwgMzldLFxuXHRcdGN5YW46IFszNiwgMzldLFxuXHRcdHdoaXRlOiBbMzcsIDM5XSxcblxuXHRcdC8vIEJyaWdodCBjb2xvclxuXHRcdGJsYWNrQnJpZ2h0OiBbOTAsIDM5XSxcblx0XHRncmF5OiBbOTAsIDM5XSwgLy8gQWxpYXMgb2YgYGJsYWNrQnJpZ2h0YFxuXHRcdGdyZXk6IFs5MCwgMzldLCAvLyBBbGlhcyBvZiBgYmxhY2tCcmlnaHRgXG5cdFx0cmVkQnJpZ2h0OiBbOTEsIDM5XSxcblx0XHRncmVlbkJyaWdodDogWzkyLCAzOV0sXG5cdFx0eWVsbG93QnJpZ2h0OiBbOTMsIDM5XSxcblx0XHRibHVlQnJpZ2h0OiBbOTQsIDM5XSxcblx0XHRtYWdlbnRhQnJpZ2h0OiBbOTUsIDM5XSxcblx0XHRjeWFuQnJpZ2h0OiBbOTYsIDM5XSxcblx0XHR3aGl0ZUJyaWdodDogWzk3LCAzOV0sXG5cdH0sXG5cdGJnQ29sb3I6IHtcblx0XHRiZ0JsYWNrOiBbNDAsIDQ5XSxcblx0XHRiZ1JlZDogWzQxLCA0OV0sXG5cdFx0YmdHcmVlbjogWzQyLCA0OV0sXG5cdFx0YmdZZWxsb3c6IFs0MywgNDldLFxuXHRcdGJnQmx1ZTogWzQ0LCA0OV0sXG5cdFx0YmdNYWdlbnRhOiBbNDUsIDQ5XSxcblx0XHRiZ0N5YW46IFs0NiwgNDldLFxuXHRcdGJnV2hpdGU6IFs0NywgNDldLFxuXG5cdFx0Ly8gQnJpZ2h0IGNvbG9yXG5cdFx0YmdCbGFja0JyaWdodDogWzEwMCwgNDldLFxuXHRcdGJnR3JheTogWzEwMCwgNDldLCAvLyBBbGlhcyBvZiBgYmdCbGFja0JyaWdodGBcblx0XHRiZ0dyZXk6IFsxMDAsIDQ5XSwgLy8gQWxpYXMgb2YgYGJnQmxhY2tCcmlnaHRgXG5cdFx0YmdSZWRCcmlnaHQ6IFsxMDEsIDQ5XSxcblx0XHRiZ0dyZWVuQnJpZ2h0OiBbMTAyLCA0OV0sXG5cdFx0YmdZZWxsb3dCcmlnaHQ6IFsxMDMsIDQ5XSxcblx0XHRiZ0JsdWVCcmlnaHQ6IFsxMDQsIDQ5XSxcblx0XHRiZ01hZ2VudGFCcmlnaHQ6IFsxMDUsIDQ5XSxcblx0XHRiZ0N5YW5CcmlnaHQ6IFsxMDYsIDQ5XSxcblx0XHRiZ1doaXRlQnJpZ2h0OiBbMTA3LCA0OV0sXG5cdH0sXG59O1xuXG5leHBvcnQgY29uc3QgbW9kaWZpZXJOYW1lcyA9IE9iamVjdC5rZXlzKHN0eWxlcy5tb2RpZmllcik7XG5leHBvcnQgY29uc3QgZm9yZWdyb3VuZENvbG9yTmFtZXMgPSBPYmplY3Qua2V5cyhzdHlsZXMuY29sb3IpO1xuZXhwb3J0IGNvbnN0IGJhY2tncm91bmRDb2xvck5hbWVzID0gT2JqZWN0LmtleXMoc3R5bGVzLmJnQ29sb3IpO1xuZXhwb3J0IGNvbnN0IGNvbG9yTmFtZXMgPSBbLi4uZm9yZWdyb3VuZENvbG9yTmFtZXMsIC4uLmJhY2tncm91bmRDb2xvck5hbWVzXTtcblxuZnVuY3Rpb24gYXNzZW1ibGVTdHlsZXMoKSB7XG5cdGNvbnN0IGNvZGVzID0gbmV3IE1hcCgpO1xuXG5cdGZvciAoY29uc3QgW2dyb3VwTmFtZSwgZ3JvdXBdIG9mIE9iamVjdC5lbnRyaWVzKHN0eWxlcykpIHtcblx0XHRmb3IgKGNvbnN0IFtzdHlsZU5hbWUsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhncm91cCkpIHtcblx0XHRcdHN0eWxlc1tzdHlsZU5hbWVdID0ge1xuXHRcdFx0XHRvcGVuOiBgXFx1MDAxQlske3N0eWxlWzBdfW1gLFxuXHRcdFx0XHRjbG9zZTogYFxcdTAwMUJbJHtzdHlsZVsxXX1tYCxcblx0XHRcdH07XG5cblx0XHRcdGdyb3VwW3N0eWxlTmFtZV0gPSBzdHlsZXNbc3R5bGVOYW1lXTtcblxuXHRcdFx0Y29kZXMuc2V0KHN0eWxlWzBdLCBzdHlsZVsxXSk7XG5cdFx0fVxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHN0eWxlcywgZ3JvdXBOYW1lLCB7XG5cdFx0XHR2YWx1ZTogZ3JvdXAsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR9KTtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsICdjb2RlcycsIHtcblx0XHR2YWx1ZTogY29kZXMsXG5cdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdH0pO1xuXG5cdHN0eWxlcy5jb2xvci5jbG9zZSA9ICdcXHUwMDFCWzM5bSc7XG5cdHN0eWxlcy5iZ0NvbG9yLmNsb3NlID0gJ1xcdTAwMUJbNDltJztcblxuXHRzdHlsZXMuY29sb3IuYW5zaSA9IHdyYXBBbnNpMTYoKTtcblx0c3R5bGVzLmNvbG9yLmFuc2kyNTYgPSB3cmFwQW5zaTI1NigpO1xuXHRzdHlsZXMuY29sb3IuYW5zaTE2bSA9IHdyYXBBbnNpMTZtKCk7XG5cdHN0eWxlcy5iZ0NvbG9yLmFuc2kgPSB3cmFwQW5zaTE2KEFOU0lfQkFDS0dST1VORF9PRkZTRVQpO1xuXHRzdHlsZXMuYmdDb2xvci5hbnNpMjU2ID0gd3JhcEFuc2kyNTYoQU5TSV9CQUNLR1JPVU5EX09GRlNFVCk7XG5cdHN0eWxlcy5iZ0NvbG9yLmFuc2kxNm0gPSB3cmFwQW5zaTE2bShBTlNJX0JBQ0tHUk9VTkRfT0ZGU0VUKTtcblxuXHQvLyBGcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9RaXgtL2NvbG9yLWNvbnZlcnQvYmxvYi8zZjBlMGQ0ZTkyZTIzNTc5NmNjYjE3ZjZlODVjNzIwOTRhNjUxZjQ5L2NvbnZlcnNpb25zLmpzXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHN0eWxlcywge1xuXHRcdHJnYlRvQW5zaTI1Njoge1xuXHRcdFx0dmFsdWUocmVkLCBncmVlbiwgYmx1ZSkge1xuXHRcdFx0XHQvLyBXZSB1c2UgdGhlIGV4dGVuZGVkIGdyZXlzY2FsZSBwYWxldHRlIGhlcmUsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZlxuXHRcdFx0XHQvLyBibGFjayBhbmQgd2hpdGUuIG5vcm1hbCBwYWxldHRlIG9ubHkgaGFzIDQgZ3JleXNjYWxlIHNoYWRlcy5cblx0XHRcdFx0aWYgKHJlZCA9PT0gZ3JlZW4gJiYgZ3JlZW4gPT09IGJsdWUpIHtcblx0XHRcdFx0XHRpZiAocmVkIDwgOCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIDE2O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChyZWQgPiAyNDgpIHtcblx0XHRcdFx0XHRcdHJldHVybiAyMzE7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIE1hdGgucm91bmQoKChyZWQgLSA4KSAvIDI0NykgKiAyNCkgKyAyMzI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gMTZcblx0XHRcdFx0XHQrICgzNiAqIE1hdGgucm91bmQocmVkIC8gMjU1ICogNSkpXG5cdFx0XHRcdFx0KyAoNiAqIE1hdGgucm91bmQoZ3JlZW4gLyAyNTUgKiA1KSlcblx0XHRcdFx0XHQrIE1hdGgucm91bmQoYmx1ZSAvIDI1NSAqIDUpO1xuXHRcdFx0fSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdFx0aGV4VG9SZ2I6IHtcblx0XHRcdHZhbHVlKGhleCkge1xuXHRcdFx0XHRjb25zdCBtYXRjaGVzID0gL1thLWZcXGRdezZ9fFthLWZcXGRdezN9L2kuZXhlYyhoZXgudG9TdHJpbmcoMTYpKTtcblx0XHRcdFx0aWYgKCFtYXRjaGVzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFswLCAwLCAwXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCBbY29sb3JTdHJpbmddID0gbWF0Y2hlcztcblxuXHRcdFx0XHRpZiAoY29sb3JTdHJpbmcubGVuZ3RoID09PSAzKSB7XG5cdFx0XHRcdFx0Y29sb3JTdHJpbmcgPSBbLi4uY29sb3JTdHJpbmddLm1hcChjaGFyYWN0ZXIgPT4gY2hhcmFjdGVyICsgY2hhcmFjdGVyKS5qb2luKCcnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGludGVnZXIgPSBOdW1iZXIucGFyc2VJbnQoY29sb3JTdHJpbmcsIDE2KTtcblxuXHRcdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWJpdHdpc2UgKi9cblx0XHRcdFx0XHQoaW50ZWdlciA+PiAxNikgJiAweEZGLFxuXHRcdFx0XHRcdChpbnRlZ2VyID4+IDgpICYgMHhGRixcblx0XHRcdFx0XHRpbnRlZ2VyICYgMHhGRixcblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWJpdHdpc2UgKi9cblx0XHRcdFx0XTtcblx0XHRcdH0sXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR9LFxuXHRcdGhleFRvQW5zaTI1Njoge1xuXHRcdFx0dmFsdWU6IGhleCA9PiBzdHlsZXMucmdiVG9BbnNpMjU2KC4uLnN0eWxlcy5oZXhUb1JnYihoZXgpKSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdFx0YW5zaTI1NlRvQW5zaToge1xuXHRcdFx0dmFsdWUoY29kZSkge1xuXHRcdFx0XHRpZiAoY29kZSA8IDgpIHtcblx0XHRcdFx0XHRyZXR1cm4gMzAgKyBjb2RlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGNvZGUgPCAxNikge1xuXHRcdFx0XHRcdHJldHVybiA5MCArIChjb2RlIC0gOCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsZXQgcmVkO1xuXHRcdFx0XHRsZXQgZ3JlZW47XG5cdFx0XHRcdGxldCBibHVlO1xuXG5cdFx0XHRcdGlmIChjb2RlID49IDIzMikge1xuXHRcdFx0XHRcdHJlZCA9ICgoKGNvZGUgLSAyMzIpICogMTApICsgOCkgLyAyNTU7XG5cdFx0XHRcdFx0Z3JlZW4gPSByZWQ7XG5cdFx0XHRcdFx0Ymx1ZSA9IHJlZDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb2RlIC09IDE2O1xuXG5cdFx0XHRcdFx0Y29uc3QgcmVtYWluZGVyID0gY29kZSAlIDM2O1xuXG5cdFx0XHRcdFx0cmVkID0gTWF0aC5mbG9vcihjb2RlIC8gMzYpIC8gNTtcblx0XHRcdFx0XHRncmVlbiA9IE1hdGguZmxvb3IocmVtYWluZGVyIC8gNikgLyA1O1xuXHRcdFx0XHRcdGJsdWUgPSAocmVtYWluZGVyICUgNikgLyA1O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBNYXRoLm1heChyZWQsIGdyZWVuLCBibHVlKSAqIDI7XG5cblx0XHRcdFx0aWYgKHZhbHVlID09PSAwKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDMwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2Vcblx0XHRcdFx0bGV0IHJlc3VsdCA9IDMwICsgKChNYXRoLnJvdW5kKGJsdWUpIDw8IDIpIHwgKE1hdGgucm91bmQoZ3JlZW4pIDw8IDEpIHwgTWF0aC5yb3VuZChyZWQpKTtcblxuXHRcdFx0XHRpZiAodmFsdWUgPT09IDIpIHtcblx0XHRcdFx0XHRyZXN1bHQgKz0gNjA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdFx0cmdiVG9BbnNpOiB7XG5cdFx0XHR2YWx1ZTogKHJlZCwgZ3JlZW4sIGJsdWUpID0+IHN0eWxlcy5hbnNpMjU2VG9BbnNpKHN0eWxlcy5yZ2JUb0Fuc2kyNTYocmVkLCBncmVlbiwgYmx1ZSkpLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0fSxcblx0XHRoZXhUb0Fuc2k6IHtcblx0XHRcdHZhbHVlOiBoZXggPT4gc3R5bGVzLmFuc2kyNTZUb0Fuc2koc3R5bGVzLmhleFRvQW5zaTI1NihoZXgpKSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdH0pO1xuXG5cdHJldHVybiBzdHlsZXM7XG59XG5cbmNvbnN0IGFuc2lTdHlsZXMgPSBhc3NlbWJsZVN0eWxlcygpO1xuXG5leHBvcnQgZGVmYXVsdCBhbnNpU3R5bGVzO1xuIiwgImltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgb3MgZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgdHR5IGZyb20gJ25vZGU6dHR5JztcblxuLy8gRnJvbTogaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9oYXMtZmxhZy9ibG9iL21haW4vaW5kZXguanNcbi8vLyBmdW5jdGlvbiBoYXNGbGFnKGZsYWcsIGFyZ3YgPSBnbG9iYWxUaGlzLkRlbm8/LmFyZ3MgPz8gcHJvY2Vzcy5hcmd2KSB7XG5mdW5jdGlvbiBoYXNGbGFnKGZsYWcsIGFyZ3YgPSBnbG9iYWxUaGlzLkRlbm8gPyBnbG9iYWxUaGlzLkRlbm8uYXJncyA6IHByb2Nlc3MuYXJndikge1xuXHRjb25zdCBwcmVmaXggPSBmbGFnLnN0YXJ0c1dpdGgoJy0nKSA/ICcnIDogKGZsYWcubGVuZ3RoID09PSAxID8gJy0nIDogJy0tJyk7XG5cdGNvbnN0IHBvc2l0aW9uID0gYXJndi5pbmRleE9mKHByZWZpeCArIGZsYWcpO1xuXHRjb25zdCB0ZXJtaW5hdG9yUG9zaXRpb24gPSBhcmd2LmluZGV4T2YoJy0tJyk7XG5cdHJldHVybiBwb3NpdGlvbiAhPT0gLTEgJiYgKHRlcm1pbmF0b3JQb3NpdGlvbiA9PT0gLTEgfHwgcG9zaXRpb24gPCB0ZXJtaW5hdG9yUG9zaXRpb24pO1xufVxuXG5jb25zdCB7ZW52fSA9IHByb2Nlc3M7XG5cbmxldCBmbGFnRm9yY2VDb2xvcjtcbmlmIChcblx0aGFzRmxhZygnbm8tY29sb3InKVxuXHR8fCBoYXNGbGFnKCduby1jb2xvcnMnKVxuXHR8fCBoYXNGbGFnKCdjb2xvcj1mYWxzZScpXG5cdHx8IGhhc0ZsYWcoJ2NvbG9yPW5ldmVyJylcbikge1xuXHRmbGFnRm9yY2VDb2xvciA9IDA7XG59IGVsc2UgaWYgKFxuXHRoYXNGbGFnKCdjb2xvcicpXG5cdHx8IGhhc0ZsYWcoJ2NvbG9ycycpXG5cdHx8IGhhc0ZsYWcoJ2NvbG9yPXRydWUnKVxuXHR8fCBoYXNGbGFnKCdjb2xvcj1hbHdheXMnKVxuKSB7XG5cdGZsYWdGb3JjZUNvbG9yID0gMTtcbn1cblxuZnVuY3Rpb24gZW52Rm9yY2VDb2xvcigpIHtcblx0aWYgKCdGT1JDRV9DT0xPUicgaW4gZW52KSB7XG5cdFx0aWYgKGVudi5GT1JDRV9DT0xPUiA9PT0gJ3RydWUnKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cblx0XHRpZiAoZW52LkZPUkNFX0NPTE9SID09PSAnZmFsc2UnKSB7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZW52LkZPUkNFX0NPTE9SLmxlbmd0aCA9PT0gMCA/IDEgOiBNYXRoLm1pbihOdW1iZXIucGFyc2VJbnQoZW52LkZPUkNFX0NPTE9SLCAxMCksIDMpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUxldmVsKGxldmVsKSB7XG5cdGlmIChsZXZlbCA9PT0gMCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bGV2ZWwsXG5cdFx0aGFzQmFzaWM6IHRydWUsXG5cdFx0aGFzMjU2OiBsZXZlbCA+PSAyLFxuXHRcdGhhczE2bTogbGV2ZWwgPj0gMyxcblx0fTtcbn1cblxuZnVuY3Rpb24gX3N1cHBvcnRzQ29sb3IoaGF2ZVN0cmVhbSwge3N0cmVhbUlzVFRZLCBzbmlmZkZsYWdzID0gdHJ1ZX0gPSB7fSkge1xuXHRjb25zdCBub0ZsYWdGb3JjZUNvbG9yID0gZW52Rm9yY2VDb2xvcigpO1xuXHRpZiAobm9GbGFnRm9yY2VDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0ZmxhZ0ZvcmNlQ29sb3IgPSBub0ZsYWdGb3JjZUNvbG9yO1xuXHR9XG5cblx0Y29uc3QgZm9yY2VDb2xvciA9IHNuaWZmRmxhZ3MgPyBmbGFnRm9yY2VDb2xvciA6IG5vRmxhZ0ZvcmNlQ29sb3I7XG5cblx0aWYgKGZvcmNlQ29sb3IgPT09IDApIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGlmIChzbmlmZkZsYWdzKSB7XG5cdFx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTE2bScpXG5cdFx0XHR8fCBoYXNGbGFnKCdjb2xvcj1mdWxsJylcblx0XHRcdHx8IGhhc0ZsYWcoJ2NvbG9yPXRydWVjb2xvcicpKSB7XG5cdFx0XHRyZXR1cm4gMztcblx0XHR9XG5cblx0XHRpZiAoaGFzRmxhZygnY29sb3I9MjU2JykpIHtcblx0XHRcdHJldHVybiAyO1xuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIGZvciBBenVyZSBEZXZPcHMgcGlwZWxpbmVzLlxuXHQvLyBIYXMgdG8gYmUgYWJvdmUgdGhlIGAhc3RyZWFtSXNUVFlgIGNoZWNrLlxuXHRpZiAoJ1RGX0JVSUxEJyBpbiBlbnYgJiYgJ0FHRU5UX05BTUUnIGluIGVudikge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKGhhdmVTdHJlYW0gJiYgIXN0cmVhbUlzVFRZICYmIGZvcmNlQ29sb3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Y29uc3QgbWluID0gZm9yY2VDb2xvciB8fCAwO1xuXG5cdGlmIChlbnYuVEVSTSA9PT0gJ2R1bWInKSB7XG5cdFx0cmV0dXJuIG1pbjtcblx0fVxuXG5cdGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG5cdFx0Ly8gV2luZG93cyAxMCBidWlsZCAxMDU4NiBpcyB0aGUgZmlyc3QgV2luZG93cyByZWxlYXNlIHRoYXQgc3VwcG9ydHMgMjU2IGNvbG9ycy5cblx0XHQvLyBXaW5kb3dzIDEwIGJ1aWxkIDE0OTMxIGlzIHRoZSBmaXJzdCByZWxlYXNlIHRoYXQgc3VwcG9ydHMgMTZtL1RydWVDb2xvci5cblx0XHRjb25zdCBvc1JlbGVhc2UgPSBvcy5yZWxlYXNlKCkuc3BsaXQoJy4nKTtcblx0XHRpZiAoXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzBdKSA+PSAxMFxuXHRcdFx0JiYgTnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTBfNTg2XG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gTnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTRfOTMxID8gMyA6IDI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NJJyBpbiBlbnYpIHtcblx0XHRpZiAoJ0dJVEhVQl9BQ1RJT05TJyBpbiBlbnYgfHwgJ0dJVEVBX0FDVElPTlMnIGluIGVudikge1xuXHRcdFx0cmV0dXJuIDM7XG5cdFx0fVxuXG5cdFx0aWYgKFsnVFJBVklTJywgJ0NJUkNMRUNJJywgJ0FQUFZFWU9SJywgJ0dJVExBQl9DSScsICdCVUlMREtJVEUnLCAnRFJPTkUnXS5zb21lKHNpZ24gPT4gc2lnbiBpbiBlbnYpIHx8IGVudi5DSV9OQU1FID09PSAnY29kZXNoaXAnKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0aWYgKCdURUFNQ0lUWV9WRVJTSU9OJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gL14oOVxcLigwKlsxLTldXFxkKilcXC58XFxkezIsfVxcLikvLnRlc3QoZW52LlRFQU1DSVRZX1ZFUlNJT04pID8gMSA6IDA7XG5cdH1cblxuXHRpZiAoZW52LkNPTE9SVEVSTSA9PT0gJ3RydWVjb2xvcicpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmIChlbnYuVEVSTSA9PT0gJ3h0ZXJtLWtpdHR5Jykge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKCdURVJNX1BST0dSQU0nIGluIGVudikge1xuXHRcdGNvbnN0IHZlcnNpb24gPSBOdW1iZXIucGFyc2VJbnQoKGVudi5URVJNX1BST0dSQU1fVkVSU0lPTiB8fCAnJykuc3BsaXQoJy4nKVswXSwgMTApO1xuXG5cdFx0c3dpdGNoIChlbnYuVEVSTV9QUk9HUkFNKSB7XG5cdFx0XHRjYXNlICdpVGVybS5hcHAnOiB7XG5cdFx0XHRcdHJldHVybiB2ZXJzaW9uID49IDMgPyAzIDogMjtcblx0XHRcdH1cblxuXHRcdFx0Y2FzZSAnQXBwbGVfVGVybWluYWwnOiB7XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0fVxuXHRcdFx0Ly8gTm8gZGVmYXVsdFxuXHRcdH1cblx0fVxuXG5cdGlmICgvLTI1Nihjb2xvcik/JC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblxuXHRpZiAoL15zY3JlZW58Xnh0ZXJtfF52dDEwMHxednQyMjB8XnJ4dnR8Y29sb3J8YW5zaXxjeWd3aW58bGludXgvaS50ZXN0KGVudi5URVJNKSkge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDT0xPUlRFUk0nIGluIGVudikge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0cmV0dXJuIG1pbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN1cHBvcnRzQ29sb3Ioc3RyZWFtLCBvcHRpb25zID0ge30pIHtcblx0Y29uc3QgbGV2ZWwgPSBfc3VwcG9ydHNDb2xvcihzdHJlYW0sIHtcblx0XHRzdHJlYW1Jc1RUWTogc3RyZWFtICYmIHN0cmVhbS5pc1RUWSxcblx0XHQuLi5vcHRpb25zLFxuXHR9KTtcblxuXHRyZXR1cm4gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpO1xufVxuXG5jb25zdCBzdXBwb3J0c0NvbG9yID0ge1xuXHRzdGRvdXQ6IGNyZWF0ZVN1cHBvcnRzQ29sb3Ioe2lzVFRZOiB0dHkuaXNhdHR5KDEpfSksXG5cdHN0ZGVycjogY3JlYXRlU3VwcG9ydHNDb2xvcih7aXNUVFk6IHR0eS5pc2F0dHkoMil9KSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHN1cHBvcnRzQ29sb3I7XG4iLCAiLy8gVE9ETzogV2hlbiB0YXJnZXRpbmcgTm9kZS5qcyAxNiwgdXNlIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VBbGxgLlxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ1JlcGxhY2VBbGwoc3RyaW5nLCBzdWJzdHJpbmcsIHJlcGxhY2VyKSB7XG5cdGxldCBpbmRleCA9IHN0cmluZy5pbmRleE9mKHN1YnN0cmluZyk7XG5cdGlmIChpbmRleCA9PT0gLTEpIHtcblx0XHRyZXR1cm4gc3RyaW5nO1xuXHR9XG5cblx0Y29uc3Qgc3Vic3RyaW5nTGVuZ3RoID0gc3Vic3RyaW5nLmxlbmd0aDtcblx0bGV0IGVuZEluZGV4ID0gMDtcblx0bGV0IHJldHVyblZhbHVlID0gJyc7XG5cdGRvIHtcblx0XHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc2xpY2UoZW5kSW5kZXgsIGluZGV4KSArIHN1YnN0cmluZyArIHJlcGxhY2VyO1xuXHRcdGVuZEluZGV4ID0gaW5kZXggKyBzdWJzdHJpbmdMZW5ndGg7XG5cdFx0aW5kZXggPSBzdHJpbmcuaW5kZXhPZihzdWJzdHJpbmcsIGVuZEluZGV4KTtcblx0fSB3aGlsZSAoaW5kZXggIT09IC0xKTtcblxuXHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc2xpY2UoZW5kSW5kZXgpO1xuXHRyZXR1cm4gcmV0dXJuVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdFbmNhc2VDUkxGV2l0aEZpcnN0SW5kZXgoc3RyaW5nLCBwcmVmaXgsIHBvc3RmaXgsIGluZGV4KSB7XG5cdGxldCBlbmRJbmRleCA9IDA7XG5cdGxldCByZXR1cm5WYWx1ZSA9ICcnO1xuXHRkbyB7XG5cdFx0Y29uc3QgZ290Q1IgPSBzdHJpbmdbaW5kZXggLSAxXSA9PT0gJ1xccic7XG5cdFx0cmV0dXJuVmFsdWUgKz0gc3RyaW5nLnNsaWNlKGVuZEluZGV4LCAoZ290Q1IgPyBpbmRleCAtIDEgOiBpbmRleCkpICsgcHJlZml4ICsgKGdvdENSID8gJ1xcclxcbicgOiAnXFxuJykgKyBwb3N0Zml4O1xuXHRcdGVuZEluZGV4ID0gaW5kZXggKyAxO1xuXHRcdGluZGV4ID0gc3RyaW5nLmluZGV4T2YoJ1xcbicsIGVuZEluZGV4KTtcblx0fSB3aGlsZSAoaW5kZXggIT09IC0xKTtcblxuXHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc2xpY2UoZW5kSW5kZXgpO1xuXHRyZXR1cm4gcmV0dXJuVmFsdWU7XG59XG4iLCAiaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiXG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7IGdsb2JieSB9IGZyb20gXCJnbG9iYnlcIlxuaW1wb3J0IHsgUm91dGVTcGVjLCBTZXR1cFBhcmFtcyB9IGZyb20gXCIuLi8uLi90eXBlc1wiXG5pbXBvcnQgeyBkZWZhdWx0TWFwRmlsZVBhdGhUb0hUVFBSb3V0ZSB9IGZyb20gXCIuL2RlZmF1bHQtbWFwLWZpbGUtcGF0aC10by1odHRwLXJvdXRlXCJcblxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZUluZm8ge1xuICBzZXR1cFBhcmFtczogU2V0dXBQYXJhbXNcbiAgcm91dGVTcGVjOiBSb3V0ZVNwZWNcbiAgcm91dGVGbjogRnVuY3Rpb25cbiAgcm91dGU6IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgcGFyc2VSb3V0ZXNJblBhY2thZ2UgPSBhc3luYyAob3B0czoge1xuICBwYWNrYWdlRGlyOiBzdHJpbmdcbiAgcGF0aEdsb2I/OiBzdHJpbmdcbiAgYXBpUHJlZml4Pzogc3RyaW5nXG4gIG1hcEZpbGVQYXRoVG9IVFRQUm91dGU/OiAoZmlsZV9wYXRoOiBzdHJpbmcpID0+IHN0cmluZ1xufSk6IFByb21pc2U8TWFwPHN0cmluZywgUm91dGVJbmZvPj4gPT4ge1xuICBjb25zdCB7XG4gICAgcGFja2FnZURpcixcbiAgICBwYXRoR2xvYiA9IFwiL3BhZ2VzL2FwaS8qKi8qLnRzXCIsXG4gICAgbWFwRmlsZVBhdGhUb0hUVFBSb3V0ZSA9IGRlZmF1bHRNYXBGaWxlUGF0aFRvSFRUUFJvdXRlKG9wdHMuYXBpUHJlZml4KSxcbiAgfSA9IG9wdHNcbiAgLy8gTG9hZCBhbGwgcm91dGUgc3BlY3NcbiAgY29uc3QgZnVsbFBhdGhHbG9iID0gcGF0aC5wb3NpeC5qb2luKHBhY2thZ2VEaXIsIHBhdGhHbG9iKVxuICBjb25zb2xlLmxvZyhgc2VhcmNoaW5nIFwiJHtmdWxsUGF0aEdsb2J9XCIuLi5gKVxuICBjb25zdCBmaWxlcGF0aHMgPSBhd2FpdCBnbG9iYnkoYCR7ZnVsbFBhdGhHbG9ifWApXG4gIGNvbnNvbGUubG9nKGBmb3VuZCAke2ZpbGVwYXRocy5sZW5ndGh9IGZpbGVzYClcbiAgaWYgKGZpbGVwYXRocy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGZpbGVzIGZvdW5kIGF0IFwiJHtmdWxsUGF0aEdsb2J9XCJgKVxuICB9XG4gIGNvbnN0IGZpbGVwYXRoVG9Sb3V0ZUZuID0gbmV3IE1hcDxzdHJpbmcsIFJvdXRlSW5mbz4oKVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGZpbGVwYXRocy5tYXAoYXN5bmMgKHApID0+IHtcbiAgICAgIGNvbnN0IHsgZGVmYXVsdDogcm91dGVGbiB9ID0gYXdhaXQgcmVxdWlyZShwYXRoLnJlc29sdmUocCkpXG5cbiAgICAgIGlmIChyb3V0ZUZuKSB7XG4gICAgICAgIGlmICghcm91dGVGbi5fc2V0dXBQYXJhbXMpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBjaGFsay55ZWxsb3coXG4gICAgICAgICAgICAgIGBJZ25vcmluZyBcIiR7cH1cIiBiZWNhdXNlIGl0IHdhc24ndCBjcmVhdGVkIHdpdGggd2l0aFJvdXRlU3BlY2BcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgZmlsZXBhdGhUb1JvdXRlRm4uc2V0KHAsIHtcbiAgICAgICAgICBzZXR1cFBhcmFtczogcm91dGVGbi5fc2V0dXBQYXJhbXMsXG4gICAgICAgICAgcm91dGVTcGVjOiByb3V0ZUZuLl9yb3V0ZVNwZWMsXG4gICAgICAgICAgcm91dGU6IG1hcEZpbGVQYXRoVG9IVFRQUm91dGUocCksXG4gICAgICAgICAgcm91dGVGbixcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihjaGFsay55ZWxsb3coYENvdWxkbid0IGZpbmQgcm91dGUgJHtwfWApKVxuICAgICAgfVxuICAgIH0pXG4gIClcblxuICByZXR1cm4gZmlsZXBhdGhUb1JvdXRlRm5cbn1cbiIsICJpbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgbm9kZVBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBtZXJnZTIgZnJvbSAnbWVyZ2UyJztcbmltcG9ydCBmYXN0R2xvYiBmcm9tICdmYXN0LWdsb2InO1xuaW1wb3J0IGRpckdsb2IgZnJvbSAnZGlyLWdsb2InO1xuaW1wb3J0IHtcblx0R0lUSUdOT1JFX0ZJTEVTX1BBVFRFUk4sXG5cdGlzSWdub3JlZEJ5SWdub3JlRmlsZXMsXG5cdGlzSWdub3JlZEJ5SWdub3JlRmlsZXNTeW5jLFxufSBmcm9tICcuL2lnbm9yZS5qcyc7XG5pbXBvcnQge0ZpbHRlclN0cmVhbSwgdG9QYXRoLCBpc05lZ2F0aXZlUGF0dGVybn0gZnJvbSAnLi91dGlsaXRpZXMuanMnO1xuXG5jb25zdCBhc3NlcnRQYXR0ZXJuc0lucHV0ID0gcGF0dGVybnMgPT4ge1xuXHRpZiAocGF0dGVybnMuc29tZShwYXR0ZXJuID0+IHR5cGVvZiBwYXR0ZXJuICE9PSAnc3RyaW5nJykpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXR0ZXJucyBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MnKTtcblx0fVxufTtcblxuY29uc3QgdG9QYXR0ZXJuc0FycmF5ID0gcGF0dGVybnMgPT4ge1xuXHRwYXR0ZXJucyA9IFsuLi5uZXcgU2V0KFtwYXR0ZXJuc10uZmxhdCgpKV07XG5cdGFzc2VydFBhdHRlcm5zSW5wdXQocGF0dGVybnMpO1xuXHRyZXR1cm4gcGF0dGVybnM7XG59O1xuXG5jb25zdCBjaGVja0N3ZE9wdGlvbiA9IG9wdGlvbnMgPT4ge1xuXHRpZiAoIW9wdGlvbnMuY3dkKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0bGV0IHN0YXQ7XG5cdHRyeSB7XG5cdFx0c3RhdCA9IGZzLnN0YXRTeW5jKG9wdGlvbnMuY3dkKTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKCFzdGF0LmlzRGlyZWN0b3J5KCkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1RoZSBgY3dkYCBvcHRpb24gbXVzdCBiZSBhIHBhdGggdG8gYSBkaXJlY3RvcnknKTtcblx0fVxufTtcblxuY29uc3Qgbm9ybWFsaXplT3B0aW9ucyA9IChvcHRpb25zID0ge30pID0+IHtcblx0b3B0aW9ucyA9IHtcblx0XHQuLi5vcHRpb25zLFxuXHRcdGlnbm9yZTogb3B0aW9ucy5pZ25vcmUgfHwgW10sXG5cdFx0ZXhwYW5kRGlyZWN0b3JpZXM6IG9wdGlvbnMuZXhwYW5kRGlyZWN0b3JpZXMgPT09IHVuZGVmaW5lZFxuXHRcdFx0PyB0cnVlXG5cdFx0XHQ6IG9wdGlvbnMuZXhwYW5kRGlyZWN0b3JpZXMsXG5cdFx0Y3dkOiB0b1BhdGgob3B0aW9ucy5jd2QpLFxuXHR9O1xuXG5cdGNoZWNrQ3dkT3B0aW9uKG9wdGlvbnMpO1xuXG5cdHJldHVybiBvcHRpb25zO1xufTtcblxuY29uc3Qgbm9ybWFsaXplQXJndW1lbnRzID0gZm4gPT4gYXN5bmMgKHBhdHRlcm5zLCBvcHRpb25zKSA9PiBmbih0b1BhdHRlcm5zQXJyYXkocGF0dGVybnMpLCBub3JtYWxpemVPcHRpb25zKG9wdGlvbnMpKTtcbmNvbnN0IG5vcm1hbGl6ZUFyZ3VtZW50c1N5bmMgPSBmbiA9PiAocGF0dGVybnMsIG9wdGlvbnMpID0+IGZuKHRvUGF0dGVybnNBcnJheShwYXR0ZXJucyksIG5vcm1hbGl6ZU9wdGlvbnMob3B0aW9ucykpO1xuXG5jb25zdCBnZXRJZ25vcmVGaWxlc1BhdHRlcm5zID0gb3B0aW9ucyA9PiB7XG5cdGNvbnN0IHtpZ25vcmVGaWxlcywgZ2l0aWdub3JlfSA9IG9wdGlvbnM7XG5cblx0Y29uc3QgcGF0dGVybnMgPSBpZ25vcmVGaWxlcyA/IHRvUGF0dGVybnNBcnJheShpZ25vcmVGaWxlcykgOiBbXTtcblx0aWYgKGdpdGlnbm9yZSkge1xuXHRcdHBhdHRlcm5zLnB1c2goR0lUSUdOT1JFX0ZJTEVTX1BBVFRFUk4pO1xuXHR9XG5cblx0cmV0dXJuIHBhdHRlcm5zO1xufTtcblxuY29uc3QgZ2V0RmlsdGVyID0gYXN5bmMgb3B0aW9ucyA9PiB7XG5cdGNvbnN0IGlnbm9yZUZpbGVzUGF0dGVybnMgPSBnZXRJZ25vcmVGaWxlc1BhdHRlcm5zKG9wdGlvbnMpO1xuXHRyZXR1cm4gY3JlYXRlRmlsdGVyRnVuY3Rpb24oXG5cdFx0aWdub3JlRmlsZXNQYXR0ZXJucy5sZW5ndGggPiAwICYmIGF3YWl0IGlzSWdub3JlZEJ5SWdub3JlRmlsZXMoaWdub3JlRmlsZXNQYXR0ZXJucywgb3B0aW9ucyksXG5cdCk7XG59O1xuXG5jb25zdCBnZXRGaWx0ZXJTeW5jID0gb3B0aW9ucyA9PiB7XG5cdGNvbnN0IGlnbm9yZUZpbGVzUGF0dGVybnMgPSBnZXRJZ25vcmVGaWxlc1BhdHRlcm5zKG9wdGlvbnMpO1xuXHRyZXR1cm4gY3JlYXRlRmlsdGVyRnVuY3Rpb24oXG5cdFx0aWdub3JlRmlsZXNQYXR0ZXJucy5sZW5ndGggPiAwICYmIGlzSWdub3JlZEJ5SWdub3JlRmlsZXNTeW5jKGlnbm9yZUZpbGVzUGF0dGVybnMsIG9wdGlvbnMpLFxuXHQpO1xufTtcblxuY29uc3QgY3JlYXRlRmlsdGVyRnVuY3Rpb24gPSBpc0lnbm9yZWQgPT4ge1xuXHRjb25zdCBzZWVuID0gbmV3IFNldCgpO1xuXG5cdHJldHVybiBmYXN0R2xvYlJlc3VsdCA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGZhc3RHbG9iUmVzdWx0LnBhdGggfHwgZmFzdEdsb2JSZXN1bHQ7XG5cdFx0Y29uc3QgcGF0aEtleSA9IG5vZGVQYXRoLm5vcm1hbGl6ZShwYXRoKTtcblx0XHRjb25zdCBzZWVuT3JJZ25vcmVkID0gc2Vlbi5oYXMocGF0aEtleSkgfHwgKGlzSWdub3JlZCAmJiBpc0lnbm9yZWQocGF0aCkpO1xuXHRcdHNlZW4uYWRkKHBhdGhLZXkpO1xuXHRcdHJldHVybiAhc2Vlbk9ySWdub3JlZDtcblx0fTtcbn07XG5cbmNvbnN0IHVuaW9uRmFzdEdsb2JSZXN1bHRzID0gKHJlc3VsdHMsIGZpbHRlcikgPT4gcmVzdWx0cy5mbGF0KCkuZmlsdGVyKGZhc3RHbG9iUmVzdWx0ID0+IGZpbHRlcihmYXN0R2xvYlJlc3VsdCkpO1xuY29uc3QgdW5pb25GYXN0R2xvYlN0cmVhbXMgPSAoc3RyZWFtcywgZmlsdGVyKSA9PiBtZXJnZTIoc3RyZWFtcykucGlwZShuZXcgRmlsdGVyU3RyZWFtKGZhc3RHbG9iUmVzdWx0ID0+IGZpbHRlcihmYXN0R2xvYlJlc3VsdCkpKTtcblxuY29uc3QgY29udmVydE5lZ2F0aXZlUGF0dGVybnMgPSAocGF0dGVybnMsIG9wdGlvbnMpID0+IHtcblx0Y29uc3QgdGFza3MgPSBbXTtcblxuXHR3aGlsZSAocGF0dGVybnMubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGluZGV4ID0gcGF0dGVybnMuZmluZEluZGV4KHBhdHRlcm4gPT4gaXNOZWdhdGl2ZVBhdHRlcm4ocGF0dGVybikpO1xuXG5cdFx0aWYgKGluZGV4ID09PSAtMSkge1xuXHRcdFx0dGFza3MucHVzaCh7cGF0dGVybnMsIG9wdGlvbnN9KTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdGNvbnN0IGlnbm9yZVBhdHRlcm4gPSBwYXR0ZXJuc1tpbmRleF0uc2xpY2UoMSk7XG5cblx0XHRmb3IgKGNvbnN0IHRhc2sgb2YgdGFza3MpIHtcblx0XHRcdHRhc2sub3B0aW9ucy5pZ25vcmUucHVzaChpZ25vcmVQYXR0ZXJuKTtcblx0XHR9XG5cblx0XHRpZiAoaW5kZXggIT09IDApIHtcblx0XHRcdHRhc2tzLnB1c2goe1xuXHRcdFx0XHRwYXR0ZXJuczogcGF0dGVybnMuc2xpY2UoMCwgaW5kZXgpLFxuXHRcdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdFx0Li4ub3B0aW9ucyxcblx0XHRcdFx0XHRpZ25vcmU6IFtcblx0XHRcdFx0XHRcdC4uLm9wdGlvbnMuaWdub3JlLFxuXHRcdFx0XHRcdFx0aWdub3JlUGF0dGVybixcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cGF0dGVybnMgPSBwYXR0ZXJucy5zbGljZShpbmRleCArIDEpO1xuXHR9XG5cblx0cmV0dXJuIHRhc2tzO1xufTtcblxuY29uc3QgZ2V0RGlyR2xvYk9wdGlvbnMgPSAob3B0aW9ucywgY3dkKSA9PiAoe1xuXHQuLi4oY3dkID8ge2N3ZH0gOiB7fSksXG5cdC4uLihBcnJheS5pc0FycmF5KG9wdGlvbnMpID8ge2ZpbGVzOiBvcHRpb25zfSA6IG9wdGlvbnMpLFxufSk7XG5cbmNvbnN0IGdlbmVyYXRlVGFza3MgPSBhc3luYyAocGF0dGVybnMsIG9wdGlvbnMpID0+IHtcblx0Y29uc3QgZ2xvYlRhc2tzID0gY29udmVydE5lZ2F0aXZlUGF0dGVybnMocGF0dGVybnMsIG9wdGlvbnMpO1xuXG5cdGNvbnN0IHtjd2QsIGV4cGFuZERpcmVjdG9yaWVzfSA9IG9wdGlvbnM7XG5cblx0aWYgKCFleHBhbmREaXJlY3Rvcmllcykge1xuXHRcdHJldHVybiBnbG9iVGFza3M7XG5cdH1cblxuXHRjb25zdCBwYXR0ZXJuRXhwYW5kT3B0aW9ucyA9IGdldERpckdsb2JPcHRpb25zKGV4cGFuZERpcmVjdG9yaWVzLCBjd2QpO1xuXHRjb25zdCBpZ25vcmVFeHBhbmRPcHRpb25zID0gY3dkID8ge2N3ZH0gOiB1bmRlZmluZWQ7XG5cblx0cmV0dXJuIFByb21pc2UuYWxsKFxuXHRcdGdsb2JUYXNrcy5tYXAoYXN5bmMgdGFzayA9PiB7XG5cdFx0XHRsZXQge3BhdHRlcm5zLCBvcHRpb25zfSA9IHRhc2s7XG5cblx0XHRcdFtcblx0XHRcdFx0cGF0dGVybnMsXG5cdFx0XHRcdG9wdGlvbnMuaWdub3JlLFxuXHRcdFx0XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcblx0XHRcdFx0ZGlyR2xvYihwYXR0ZXJucywgcGF0dGVybkV4cGFuZE9wdGlvbnMpLFxuXHRcdFx0XHRkaXJHbG9iKG9wdGlvbnMuaWdub3JlLCBpZ25vcmVFeHBhbmRPcHRpb25zKSxcblx0XHRcdF0pO1xuXG5cdFx0XHRyZXR1cm4ge3BhdHRlcm5zLCBvcHRpb25zfTtcblx0XHR9KSxcblx0KTtcbn07XG5cbmNvbnN0IGdlbmVyYXRlVGFza3NTeW5jID0gKHBhdHRlcm5zLCBvcHRpb25zKSA9PiB7XG5cdGNvbnN0IGdsb2JUYXNrcyA9IGNvbnZlcnROZWdhdGl2ZVBhdHRlcm5zKHBhdHRlcm5zLCBvcHRpb25zKTtcblxuXHRjb25zdCB7Y3dkLCBleHBhbmREaXJlY3Rvcmllc30gPSBvcHRpb25zO1xuXG5cdGlmICghZXhwYW5kRGlyZWN0b3JpZXMpIHtcblx0XHRyZXR1cm4gZ2xvYlRhc2tzO1xuXHR9XG5cblx0Y29uc3QgcGF0dGVybkV4cGFuZE9wdGlvbnMgPSBnZXREaXJHbG9iT3B0aW9ucyhleHBhbmREaXJlY3RvcmllcywgY3dkKTtcblx0Y29uc3QgaWdub3JlRXhwYW5kT3B0aW9ucyA9IGN3ZCA/IHtjd2R9IDogdW5kZWZpbmVkO1xuXG5cdHJldHVybiBnbG9iVGFza3MubWFwKHRhc2sgPT4ge1xuXHRcdGxldCB7cGF0dGVybnMsIG9wdGlvbnN9ID0gdGFzaztcblx0XHRwYXR0ZXJucyA9IGRpckdsb2Iuc3luYyhwYXR0ZXJucywgcGF0dGVybkV4cGFuZE9wdGlvbnMpO1xuXHRcdG9wdGlvbnMuaWdub3JlID0gZGlyR2xvYi5zeW5jKG9wdGlvbnMuaWdub3JlLCBpZ25vcmVFeHBhbmRPcHRpb25zKTtcblx0XHRyZXR1cm4ge3BhdHRlcm5zLCBvcHRpb25zfTtcblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2xvYmJ5ID0gbm9ybWFsaXplQXJndW1lbnRzKGFzeW5jIChwYXR0ZXJucywgb3B0aW9ucykgPT4ge1xuXHRjb25zdCBbXG5cdFx0dGFza3MsXG5cdFx0ZmlsdGVyLFxuXHRdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuXHRcdGdlbmVyYXRlVGFza3MocGF0dGVybnMsIG9wdGlvbnMpLFxuXHRcdGdldEZpbHRlcihvcHRpb25zKSxcblx0XSk7XG5cdGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbCh0YXNrcy5tYXAodGFzayA9PiBmYXN0R2xvYih0YXNrLnBhdHRlcm5zLCB0YXNrLm9wdGlvbnMpKSk7XG5cblx0cmV0dXJuIHVuaW9uRmFzdEdsb2JSZXN1bHRzKHJlc3VsdHMsIGZpbHRlcik7XG59KTtcblxuZXhwb3J0IGNvbnN0IGdsb2JieVN5bmMgPSBub3JtYWxpemVBcmd1bWVudHNTeW5jKChwYXR0ZXJucywgb3B0aW9ucykgPT4ge1xuXHRjb25zdCB0YXNrcyA9IGdlbmVyYXRlVGFza3NTeW5jKHBhdHRlcm5zLCBvcHRpb25zKTtcblx0Y29uc3QgZmlsdGVyID0gZ2V0RmlsdGVyU3luYyhvcHRpb25zKTtcblx0Y29uc3QgcmVzdWx0cyA9IHRhc2tzLm1hcCh0YXNrID0+IGZhc3RHbG9iLnN5bmModGFzay5wYXR0ZXJucywgdGFzay5vcHRpb25zKSk7XG5cblx0cmV0dXJuIHVuaW9uRmFzdEdsb2JSZXN1bHRzKHJlc3VsdHMsIGZpbHRlcik7XG59KTtcblxuZXhwb3J0IGNvbnN0IGdsb2JieVN0cmVhbSA9IG5vcm1hbGl6ZUFyZ3VtZW50c1N5bmMoKHBhdHRlcm5zLCBvcHRpb25zKSA9PiB7XG5cdGNvbnN0IHRhc2tzID0gZ2VuZXJhdGVUYXNrc1N5bmMocGF0dGVybnMsIG9wdGlvbnMpO1xuXHRjb25zdCBmaWx0ZXIgPSBnZXRGaWx0ZXJTeW5jKG9wdGlvbnMpO1xuXHRjb25zdCBzdHJlYW1zID0gdGFza3MubWFwKHRhc2sgPT4gZmFzdEdsb2Iuc3RyZWFtKHRhc2sucGF0dGVybnMsIHRhc2sub3B0aW9ucykpO1xuXG5cdHJldHVybiB1bmlvbkZhc3RHbG9iU3RyZWFtcyhzdHJlYW1zLCBmaWx0ZXIpO1xufSk7XG5cbmV4cG9ydCBjb25zdCBpc0R5bmFtaWNQYXR0ZXJuID0gbm9ybWFsaXplQXJndW1lbnRzU3luYyhcblx0KHBhdHRlcm5zLCBvcHRpb25zKSA9PiBwYXR0ZXJucy5zb21lKHBhdHRlcm4gPT4gZmFzdEdsb2IuaXNEeW5hbWljUGF0dGVybihwYXR0ZXJuLCBvcHRpb25zKSksXG4pO1xuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVHbG9iVGFza3MgPSBub3JtYWxpemVBcmd1bWVudHMoZ2VuZXJhdGVUYXNrcyk7XG5leHBvcnQgY29uc3QgZ2VuZXJhdGVHbG9iVGFza3NTeW5jID0gbm9ybWFsaXplQXJndW1lbnRzU3luYyhnZW5lcmF0ZVRhc2tzU3luYyk7XG5cbmV4cG9ydCB7XG5cdGlzR2l0SWdub3JlZCxcblx0aXNHaXRJZ25vcmVkU3luYyxcbn0gZnJvbSAnLi9pZ25vcmUuanMnO1xuIiwgImltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IGZhc3RHbG9iIGZyb20gJ2Zhc3QtZ2xvYic7XG5pbXBvcnQgZ2l0SWdub3JlIGZyb20gJ2lnbm9yZSc7XG5pbXBvcnQgc2xhc2ggZnJvbSAnc2xhc2gnO1xuaW1wb3J0IHt0b1BhdGgsIGlzTmVnYXRpdmVQYXR0ZXJufSBmcm9tICcuL3V0aWxpdGllcy5qcyc7XG5cbmNvbnN0IGlnbm9yZUZpbGVzR2xvYk9wdGlvbnMgPSB7XG5cdGlnbm9yZTogW1xuXHRcdCcqKi9ub2RlX21vZHVsZXMnLFxuXHRcdCcqKi9mbG93LXR5cGVkJyxcblx0XHQnKiovY292ZXJhZ2UnLFxuXHRcdCcqKi8uZ2l0Jyxcblx0XSxcblx0YWJzb2x1dGU6IHRydWUsXG5cdGRvdDogdHJ1ZSxcbn07XG5cbmV4cG9ydCBjb25zdCBHSVRJR05PUkVfRklMRVNfUEFUVEVSTiA9ICcqKi8uZ2l0aWdub3JlJztcblxuY29uc3QgYXBwbHlCYXNlVG9QYXR0ZXJuID0gKHBhdHRlcm4sIGJhc2UpID0+IGlzTmVnYXRpdmVQYXR0ZXJuKHBhdHRlcm4pXG5cdD8gJyEnICsgcGF0aC5wb3NpeC5qb2luKGJhc2UsIHBhdHRlcm4uc2xpY2UoMSkpXG5cdDogcGF0aC5wb3NpeC5qb2luKGJhc2UsIHBhdHRlcm4pO1xuXG5jb25zdCBwYXJzZUlnbm9yZUZpbGUgPSAoZmlsZSwgY3dkKSA9PiB7XG5cdGNvbnN0IGJhc2UgPSBzbGFzaChwYXRoLnJlbGF0aXZlKGN3ZCwgcGF0aC5kaXJuYW1lKGZpbGUuZmlsZVBhdGgpKSk7XG5cblx0cmV0dXJuIGZpbGUuY29udGVudFxuXHRcdC5zcGxpdCgvXFxyP1xcbi8pXG5cdFx0LmZpbHRlcihsaW5lID0+IGxpbmUgJiYgIWxpbmUuc3RhcnRzV2l0aCgnIycpKVxuXHRcdC5tYXAocGF0dGVybiA9PiBhcHBseUJhc2VUb1BhdHRlcm4ocGF0dGVybiwgYmFzZSkpO1xufTtcblxuY29uc3QgdG9SZWxhdGl2ZVBhdGggPSAoZmlsZU9yRGlyZWN0b3J5LCBjd2QpID0+IHtcblx0Y3dkID0gc2xhc2goY3dkKTtcblx0aWYgKHBhdGguaXNBYnNvbHV0ZShmaWxlT3JEaXJlY3RvcnkpKSB7XG5cdFx0aWYgKHNsYXNoKGZpbGVPckRpcmVjdG9yeSkuc3RhcnRzV2l0aChjd2QpKSB7XG5cdFx0XHRyZXR1cm4gcGF0aC5yZWxhdGl2ZShjd2QsIGZpbGVPckRpcmVjdG9yeSk7XG5cdFx0fVxuXG5cdFx0dGhyb3cgbmV3IEVycm9yKGBQYXRoICR7ZmlsZU9yRGlyZWN0b3J5fSBpcyBub3QgaW4gY3dkICR7Y3dkfWApO1xuXHR9XG5cblx0cmV0dXJuIGZpbGVPckRpcmVjdG9yeTtcbn07XG5cbmNvbnN0IGdldElzSWdub3JlZFByZWRpY2F0ZSA9IChmaWxlcywgY3dkKSA9PiB7XG5cdGNvbnN0IHBhdHRlcm5zID0gZmlsZXMuZmxhdE1hcChmaWxlID0+IHBhcnNlSWdub3JlRmlsZShmaWxlLCBjd2QpKTtcblx0Y29uc3QgaWdub3JlcyA9IGdpdElnbm9yZSgpLmFkZChwYXR0ZXJucyk7XG5cblx0cmV0dXJuIGZpbGVPckRpcmVjdG9yeSA9PiB7XG5cdFx0ZmlsZU9yRGlyZWN0b3J5ID0gdG9QYXRoKGZpbGVPckRpcmVjdG9yeSk7XG5cdFx0ZmlsZU9yRGlyZWN0b3J5ID0gdG9SZWxhdGl2ZVBhdGgoZmlsZU9yRGlyZWN0b3J5LCBjd2QpO1xuXHRcdHJldHVybiBmaWxlT3JEaXJlY3RvcnkgPyBpZ25vcmVzLmlnbm9yZXMoc2xhc2goZmlsZU9yRGlyZWN0b3J5KSkgOiBmYWxzZTtcblx0fTtcbn07XG5cbmNvbnN0IG5vcm1hbGl6ZU9wdGlvbnMgPSAob3B0aW9ucyA9IHt9KSA9PiAoe1xuXHRjd2Q6IHRvUGF0aChvcHRpb25zLmN3ZCkgfHwgcHJvY2Vzcy5jd2QoKSxcblx0c3VwcHJlc3NFcnJvcnM6IEJvb2xlYW4ob3B0aW9ucy5zdXBwcmVzc0Vycm9ycyksXG5cdGRlZXA6IHR5cGVvZiBvcHRpb25zLmRlZXAgPT09ICdudW1iZXInID8gb3B0aW9ucy5kZWVwIDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxufSk7XG5cbmV4cG9ydCBjb25zdCBpc0lnbm9yZWRCeUlnbm9yZUZpbGVzID0gYXN5bmMgKHBhdHRlcm5zLCBvcHRpb25zKSA9PiB7XG5cdGNvbnN0IHtjd2QsIHN1cHByZXNzRXJyb3JzLCBkZWVwfSA9IG5vcm1hbGl6ZU9wdGlvbnMob3B0aW9ucyk7XG5cblx0Y29uc3QgcGF0aHMgPSBhd2FpdCBmYXN0R2xvYihwYXR0ZXJucywge2N3ZCwgc3VwcHJlc3NFcnJvcnMsIGRlZXAsIC4uLmlnbm9yZUZpbGVzR2xvYk9wdGlvbnN9KTtcblxuXHRjb25zdCBmaWxlcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdHBhdGhzLm1hcChhc3luYyBmaWxlUGF0aCA9PiAoe1xuXHRcdFx0ZmlsZVBhdGgsXG5cdFx0XHRjb250ZW50OiBhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShmaWxlUGF0aCwgJ3V0ZjgnKSxcblx0XHR9KSksXG5cdCk7XG5cblx0cmV0dXJuIGdldElzSWdub3JlZFByZWRpY2F0ZShmaWxlcywgY3dkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0lnbm9yZWRCeUlnbm9yZUZpbGVzU3luYyA9IChwYXR0ZXJucywgb3B0aW9ucykgPT4ge1xuXHRjb25zdCB7Y3dkLCBzdXBwcmVzc0Vycm9ycywgZGVlcH0gPSBub3JtYWxpemVPcHRpb25zKG9wdGlvbnMpO1xuXG5cdGNvbnN0IHBhdGhzID0gZmFzdEdsb2Iuc3luYyhwYXR0ZXJucywge2N3ZCwgc3VwcHJlc3NFcnJvcnMsIGRlZXAsIC4uLmlnbm9yZUZpbGVzR2xvYk9wdGlvbnN9KTtcblxuXHRjb25zdCBmaWxlcyA9IHBhdGhzLm1hcChmaWxlUGF0aCA9PiAoe1xuXHRcdGZpbGVQYXRoLFxuXHRcdGNvbnRlbnQ6IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKSxcblx0fSkpO1xuXG5cdHJldHVybiBnZXRJc0lnbm9yZWRQcmVkaWNhdGUoZmlsZXMsIGN3ZCk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNHaXRJZ25vcmVkID0gb3B0aW9ucyA9PiBpc0lnbm9yZWRCeUlnbm9yZUZpbGVzKEdJVElHTk9SRV9GSUxFU19QQVRURVJOLCBvcHRpb25zKTtcbmV4cG9ydCBjb25zdCBpc0dpdElnbm9yZWRTeW5jID0gb3B0aW9ucyA9PiBpc0lnbm9yZWRCeUlnbm9yZUZpbGVzU3luYyhHSVRJR05PUkVfRklMRVNfUEFUVEVSTiwgb3B0aW9ucyk7XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2xhc2gocGF0aCkge1xuXHRjb25zdCBpc0V4dGVuZGVkTGVuZ3RoUGF0aCA9IC9eXFxcXFxcXFxcXD9cXFxcLy50ZXN0KHBhdGgpO1xuXHRjb25zdCBoYXNOb25Bc2NpaSA9IC9bXlxcdTAwMDAtXFx1MDA4MF0rLy50ZXN0KHBhdGgpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnRyb2wtcmVnZXhcblxuXHRpZiAoaXNFeHRlbmRlZExlbmd0aFBhdGggfHwgaGFzTm9uQXNjaWkpIHtcblx0XHRyZXR1cm4gcGF0aDtcblx0fVxuXG5cdHJldHVybiBwYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbn1cbiIsICJpbXBvcnQge2ZpbGVVUkxUb1BhdGh9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7VHJhbnNmb3JtfSBmcm9tICdub2RlOnN0cmVhbSc7XG5cbmV4cG9ydCBjb25zdCB0b1BhdGggPSB1cmxPclBhdGggPT4gdXJsT3JQYXRoIGluc3RhbmNlb2YgVVJMID8gZmlsZVVSTFRvUGF0aCh1cmxPclBhdGgpIDogdXJsT3JQYXRoO1xuXG5leHBvcnQgY2xhc3MgRmlsdGVyU3RyZWFtIGV4dGVuZHMgVHJhbnNmb3JtIHtcblx0Y29uc3RydWN0b3IoZmlsdGVyKSB7XG5cdFx0c3VwZXIoe1xuXHRcdFx0b2JqZWN0TW9kZTogdHJ1ZSxcblx0XHRcdHRyYW5zZm9ybShkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spIHtcblx0XHRcdFx0Y2FsbGJhY2sodW5kZWZpbmVkLCBmaWx0ZXIoZGF0YSkgPyBkYXRhIDogdW5kZWZpbmVkKTtcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IGNvbnN0IGlzTmVnYXRpdmVQYXR0ZXJuID0gcGF0dGVybiA9PiBwYXR0ZXJuWzBdID09PSAnISc7XG4iLCAiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5leHBvcnQgY29uc3QgZGVmYXVsdE1hcEZpbGVQYXRoVG9IVFRQUm91dGUgPVxuICAoYXBpX3ByZWZpeDogc3RyaW5nID0gXCIvYXBpXCIpID0+XG4gIChmaWxlX3BhdGg6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJvdXRlID0gZmlsZV9wYXRoXG4gICAgICAvLyByZXBsYWNlIC4vIGlmIGl0IHN0YXJ0cyB3aXRoIC4vXG4gICAgICAucmVwbGFjZSgvXlxcLlxcLy8sIFwiL1wiKVxuICAgICAgLy8gcmVwbGFjZSBzdGFydGluZyAvXG4gICAgICAucmVwbGFjZSgvXlxcLy8sIFwiXCIpXG4gICAgICAvLyByZXBsYWNlIC9zcmMgaWYgaXQgc3RhcnRzIHdpdGggL3NyY1xuICAgICAgLnJlcGxhY2UoL15zcmNcXC8vLCBcIlwiKVxuICAgICAgLy8gcmVwbGFjZSAvcGFnZXMgaWYgaXQgc3RhcnRzIHdpdGggL3BhZ2VzXG4gICAgICAucmVwbGFjZSgvXnBhZ2VzXFwvLywgXCJcIilcbiAgICAgIC8vIHJlcGxhY2UgL2FwaSBpZiBpdCBzdGFydHMgd2l0aCAvYXBpXG4gICAgICAucmVwbGFjZSgvXmFwaVxcLy8sIFwiXCIpXG4gICAgICAvLyByZXBsYWNlIC50cyBpZiBpdCBlbmRzIHdpdGggLnRzXG4gICAgICAucmVwbGFjZSgvXFwudHMkLywgXCJcIilcbiAgICAgIC8vIHJlbW92ZSBwdWJsaWMgcmVmZXJlbmNlXG4gICAgICAucmVwbGFjZShcInB1YmxpY1wiLCBcIlwiKVxuICAgICAgLy8gcmVwbGFjZSBpbmRleCBpZiBpdCBlbmRzIHdpdGggaW5kZXhcbiAgICAgIC5yZXBsYWNlKC9cXC9cXGluZGV4KD8hLikvLCBcIlwiKVxuXG4gICAgcmV0dXJuIHBhdGguam9pbihhcGlfcHJlZml4LCByb3V0ZSlcbiAgfVxuIiwgImltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIlxuXG5mdW5jdGlvbiBmaW5kS2V5SW5PYmoob2JqOiBhbnksIHZhbHVlOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcbiAgbGV0IHJlc3VsdEtleTogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgXy5mb3JPd24ob2JqLCAodiwgaykgPT4ge1xuICAgIGlmIChfLmlzT2JqZWN0KHYpICYmIF8uaXNNYXRjaCh2LCB2YWx1ZSkpIHtcbiAgICAgIHJlc3VsdEtleSA9IGtcbiAgICAgIC8vIFN0b3AgdGhlIGl0ZXJhdGlvblxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9KVxuICByZXR1cm4gcmVzdWx0S2V5XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbWJlZFNjaGVtYVJlZmVyZW5jZXMob2JqMTogYW55LCBvYmoyOiBhbnkpOiBhbnkge1xuICByZXR1cm4gXy50cmFuc2Zvcm0ob2JqMSwgKHJlc3VsdCwgdmFsdWUsIGtleSkgPT4ge1xuICAgIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgY29uc3QgbWF0Y2hpbmdLZXkgPSBmaW5kS2V5SW5PYmoob2JqMiwgdmFsdWUpXG4gICAgICBpZiAobWF0Y2hpbmdLZXkpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB7XG4gICAgICAgICAgJHJlZjogYCMvY29tcG9uZW50cy9zY2hlbWFzLyR7bWF0Y2hpbmdLZXl9YCxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBlbWJlZFNjaGVtYVJlZmVyZW5jZXModmFsdWUsIG9iajIpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsdWVcbiAgICB9XG4gIH0pXG59XG4iLCAiaW1wb3J0IHsgUm91dGVTcGVjIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCJcblxuZnVuY3Rpb24gdHJhbnNmb3JtUGF0aFRvRmVyblNka01ldGhvZE5hbWUocGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0ICE9PSBcIlwiKVxuICBjb25zdCBsYXN0UGFydCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdXG4gIGlmIChsYXN0UGFydC5zdGFydHNXaXRoKFwiW1wiKSAmJiBsYXN0UGFydC5lbmRzV2l0aChcIl1cIikpIHtcbiAgICAvLyBDb252ZXJ0IFtwYXJhbV0gdG8gYnlfcGFyYW1cbiAgICBjb25zdCBwYXJhbSA9IGxhc3RQYXJ0LnNsaWNlKDEsIC0xKVxuICAgIHJldHVybiBgYnlfJHtwYXJhbX1gXG4gIH1cblxuICByZXR1cm4gbGFzdFBhcnRcbn1cblxuLy8gZmVybiBkb2NzOiBodHRwczovL2J1aWxkd2l0aGZlcm4uY29tL2RvY3Mvc3BlYy9leHRlbnNpb25zXG5mdW5jdGlvbiB0cmFuc2Zvcm1QYXRoVG9GZXJuU2RrR3JvdXBOYW1lKHBhdGg6IHN0cmluZykge1xuICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcigocGFydCkgPT4gcGFydCAhPT0gXCJcIilcbiAgcmV0dXJuIHBhcnRzLnNsaWNlKDAsIHBhcnRzLmxlbmd0aCAtIDEpXG59XG5cbmZ1bmN0aW9uIGdldEZlcm5TZGtNZXRhZGF0YShwYXRoOiBzdHJpbmcpOlxuICB8IHtcbiAgICAgIFwieC1mZXJuLWlnbm9yZVwiOiB0cnVlXG4gICAgfVxuICB8IHtcbiAgICAgIFwieC1mZXJuLXNkay1ncm91cC1uYW1lXCI6IHN0cmluZ1tdXG4gICAgICBcIngtZmVybi1zZGstbWV0aG9kLW5hbWVcIjogc3RyaW5nXG4gICAgfSB7XG4gIGlmIChwYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoKHBhcnQpID0+IHBhcnQgIT09IFwiXCIpLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB7XG4gICAgICBcIngtZmVybi1pZ25vcmVcIjogdHJ1ZSxcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIFwieC1mZXJuLXNkay1ncm91cC1uYW1lXCI6IHRyYW5zZm9ybVBhdGhUb0Zlcm5TZGtHcm91cE5hbWUocGF0aCksXG4gICAgXCJ4LWZlcm4tc2RrLW1ldGhvZC1uYW1lXCI6IHRyYW5zZm9ybVBhdGhUb0Zlcm5TZGtNZXRob2ROYW1lKHBhdGgpLFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBNZXRob2RzVG9GZXJuU2RrTWV0YWRhdGEoXG4gIG1ldGhvZHM6IFJvdXRlU3BlY1tcIm1ldGhvZHNcIl0sXG4gIHBhdGg6IHN0cmluZ1xuKSB7XG4gIGNvbnN0IGZlcm5TZGtNZXRhZGF0YSA9IGdldEZlcm5TZGtNZXRhZGF0YShwYXRoKVxuICBpZiAobWV0aG9kcy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW21ldGhvZHNbMF1dOiBmZXJuU2RrTWV0YWRhdGEsXG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWFwcGVkTWV0aG9kcyA9IHt9XG4gIGNvbnN0IGF0TGVhc3RPbmVNZXRob2RJc1Bvc3QgPSBtZXRob2RzLmluY2x1ZGVzKFwiUE9TVFwiKVxuXG4gIGlmICghYXRMZWFzdE9uZU1ldGhvZElzUG9zdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiQSByb3V0ZSB0aGF0IGFjY2VwdHMgbXVsdGlwbGUgbWV0aG9kcyBzaG91bGQgaW5jbHVkZSBhdCBsZWFzdCB0aGUgUE9TVCBtZXRob2QuXCJcbiAgICApXG4gIH1cblxuICBtZXRob2RzLmZvckVhY2goKG1ldGhvZCkgPT4ge1xuICAgIGlmIChtZXRob2QgPT09IFwiUE9TVFwiKSB7XG4gICAgICBtYXBwZWRNZXRob2RzW21ldGhvZF0gPSBmZXJuU2RrTWV0YWRhdGFcbiAgICB9IGVsc2Uge1xuICAgICAgbWFwcGVkTWV0aG9kc1ttZXRob2RdID0ge1xuICAgICAgICBcIngtZmVybi1pZ25vcmVcIjogdHJ1ZSxcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIG1hcHBlZE1ldGhvZHNcbn1cbiIsICJpbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiXG5pbXBvcnQgeyBwYXJzZVJvdXRlc0luUGFja2FnZSB9IGZyb20gXCIuLi9saWIvcGFyc2Utcm91dGVzLWluLXBhY2thZ2VcIlxuaW1wb3J0IHsgem9kVG9UcywgcHJpbnROb2RlIH0gZnJvbSBcInpvZC10by10c1wiXG5pbXBvcnQgcHJldHRpZXIgZnJvbSBcInByZXR0aWVyXCJcbmltcG9ydCB7IHosIFpvZEVmZmVjdHMsIFpvZE9wdGlvbmFsIH0gZnJvbSBcInpvZFwiXG5cbmludGVyZmFjZSBHZW5lcmF0ZVJvdXRlVHlwZXNPcHRzIHtcbiAgcGFja2FnZURpcjogc3RyaW5nXG4gIG91dHB1dEZpbGU/OiBzdHJpbmdcbiAgcGF0aEdsb2I/OiBzdHJpbmdcbiAgYXBpUHJlZml4Pzogc3RyaW5nXG4gIG1hcEZpbGVQYXRoVG9IVFRQUm91dGU/OiAoZmlsZV9wYXRoOiBzdHJpbmcpID0+IHN0cmluZ1xuICAvKipcbiAgICogSWYgcHJvdmlkZWQsIG9ubHkgcm91dGVzIHRoYXQgcmV0dXJuIHRydWUgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZ2VuZXJhdGVkIHR5cGVzLlxuICAgKi9cbiAgZmlsdGVyUm91dGVzPzogKHJvdXRlOiBzdHJpbmcpID0+IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlUm91dGVUeXBlcyA9IGFzeW5jIChvcHRzOiBHZW5lcmF0ZVJvdXRlVHlwZXNPcHRzKSA9PiB7XG4gIGNvbnN0IGZpbGVwYXRoVG9Sb3V0ZSA9IGF3YWl0IHBhcnNlUm91dGVzSW5QYWNrYWdlKG9wdHMpXG5cbiAgY29uc3Qgc29ydGVkUm91dGVzID0gQXJyYXkuZnJvbShmaWxlcGF0aFRvUm91dGUuZW50cmllcygpKS5zb3J0KChhLCBiKSA9PlxuICAgIGFbMV0ucm91dGUubG9jYWxlQ29tcGFyZShiWzFdLnJvdXRlKVxuICApXG4gIGNvbnN0IGZpbHRlcmVkUm91dGVzID0gc29ydGVkUm91dGVzLmZpbHRlcihcbiAgICAoW18sIHsgcm91dGUgfV0pID0+ICFvcHRzLmZpbHRlclJvdXRlcyB8fCBvcHRzLmZpbHRlclJvdXRlcyhyb3V0ZSlcbiAgKVxuXG4gIC8vIFRPRE8gd2hlbiBsZXNzIGxhenksIHVzZSB0cy1tb3JwaCBmb3IgYmV0dGVyIGdlbmVyYXRpb25cbiAgY29uc3Qgcm91dGVEZWZzOiBzdHJpbmdbXSA9IFtdXG4gIGZvciAoY29uc3QgW18sIHsgcm91dGUsIHJvdXRlU3BlYywgc2V0dXBQYXJhbXMgfV0gb2YgZmlsdGVyZWRSb3V0ZXMpIHtcbiAgICBjb25zdCBxdWVyeUtleXMgPSBPYmplY3Qua2V5cyhyb3V0ZVNwZWMucXVlcnlQYXJhbXM/LnNoYXBlID8/IHt9KVxuICAgIGNvbnN0IHBhdGhQYXJhbWV0ZXJzID0gcXVlcnlLZXlzLmZpbHRlcigoa2V5KSA9PiByb3V0ZS5pbmNsdWRlcyhgWyR7a2V5fV1gKSlcblxuICAgIC8vIHF1ZXJ5UGFyYW1zIG1pZ2h0IGJlIGEgWm9kRWZmZWN0cyBvciBab2RPcHRpb25hbCBpbiBzb21lIGNhc2VzXG4gICAgbGV0IHF1ZXJ5UGFyYW1zID0gcm91dGVTcGVjLnF1ZXJ5UGFyYW1zXG4gICAgd2hpbGUgKFxuICAgICAgcXVlcnlQYXJhbXMgJiZcbiAgICAgIChcInNvdXJjZVR5cGVcIiBpbiBxdWVyeVBhcmFtcyB8fCBcInVud3JhcFwiIGluIHF1ZXJ5UGFyYW1zKVxuICAgICkge1xuICAgICAgaWYgKFwic291cmNlVHlwZVwiIGluIHF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zID0gKHF1ZXJ5UGFyYW1zIGFzIHVua25vd24gYXMgWm9kRWZmZWN0czxhbnk+KS5zb3VyY2VUeXBlKClcbiAgICAgIH0gZWxzZSBpZiAoXCJ1bndyYXBcIiBpbiBxdWVyeVBhcmFtcykge1xuICAgICAgICBxdWVyeVBhcmFtcyA9IChxdWVyeVBhcmFtcyBhcyB1bmtub3duIGFzIFpvZE9wdGlvbmFsPGFueT4pLnVud3JhcCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlQYXJhbXNTY2hlbWFXaXRob3V0UGF0aFBhcmFtZXRlcnMgPSBxdWVyeVBhcmFtcz8ub21pdChcbiAgICAgIE9iamVjdC5mcm9tRW50cmllcyhwYXRoUGFyYW1ldGVycy5tYXAoKHBhcmFtKSA9PiBbcGFyYW0sIHRydWVdKSlcbiAgICApXG5cbiAgICByb3V0ZURlZnMucHVzaChcbiAgICAgIGBcblwiJHtyb3V0ZX1cIjoge1xuICByb3V0ZTogXCIke3JvdXRlfVwiLFxuICBtZXRob2Q6ICR7cm91dGVTcGVjLm1ldGhvZHMubWFwKChtKSA9PiBgXCIke219XCJgKS5qb2luKFwiIHwgXCIpfSxcbiAgcXVlcnlQYXJhbXM6ICR7XG4gICAgcXVlcnlQYXJhbXNTY2hlbWFXaXRob3V0UGF0aFBhcmFtZXRlcnNcbiAgICAgID8gcHJpbnROb2RlKHpvZFRvVHMocXVlcnlQYXJhbXNTY2hlbWFXaXRob3V0UGF0aFBhcmFtZXRlcnMpLm5vZGUpXG4gICAgICA6IFwie31cIlxuICB9LFxuICBqc29uQm9keTogJHtcbiAgICByb3V0ZVNwZWMuanNvbkJvZHkgPyBwcmludE5vZGUoem9kVG9Ucyhyb3V0ZVNwZWMuanNvbkJvZHkpLm5vZGUpIDogXCJ7fVwiXG4gIH0sXG4gIGNvbW1vblBhcmFtczogJHtcbiAgICByb3V0ZVNwZWMuY29tbW9uUGFyYW1zXG4gICAgICA/IHByaW50Tm9kZSh6b2RUb1RzKHJvdXRlU3BlYy5jb21tb25QYXJhbXMpLm5vZGUpXG4gICAgICA6IFwie31cIlxuICB9LFxuICBmb3JtRGF0YTogJHtcbiAgICByb3V0ZVNwZWMuZm9ybURhdGEgPyBwcmludE5vZGUoem9kVG9Ucyhyb3V0ZVNwZWMuZm9ybURhdGEpLm5vZGUpIDogXCJ7fVwiXG4gIH0sXG4gIGpzb25SZXNwb25zZTogJHtcbiAgICByb3V0ZVNwZWMuanNvblJlc3BvbnNlXG4gICAgICA/IHByaW50Tm9kZShcbiAgICAgICAgICB6b2RUb1RzKFxuICAgICAgICAgICAgc2V0dXBQYXJhbXMuYWRkT2tTdGF0dXNcbiAgICAgICAgICAgICAgPyByb3V0ZVNwZWMuanNvblJlc3BvbnNlLmV4dGVuZCh7IG9rOiB6LmJvb2xlYW4oKSB9KVxuICAgICAgICAgICAgICA6IHJvdXRlU3BlYy5qc29uUmVzcG9uc2VcbiAgICAgICAgICApLm5vZGVcbiAgICAgICAgKVxuICAgICAgOiBcInt9XCJcbiAgfVxufWAudHJpbSgpXG4gICAgKVxuICB9XG4gIGNvbnN0IHJvdXRlRGVmU3RyID0gcm91dGVEZWZzLmpvaW4oXCIsXFxuXCIpXG4gIGNvbnN0IG91dHB1dCA9IGF3YWl0IHByZXR0aWVyLmZvcm1hdChcbiAgICBgZXhwb3J0IHR5cGUgUm91dGVzID0ge1xuJHtyb3V0ZURlZlN0cn1cbn1cblxuZXhwb3J0IHR5cGUgUm91dGVSZXNwb25zZTxQYXRoIGV4dGVuZHMga2V5b2YgUm91dGVzPiA9XG4gIFJvdXRlc1tQYXRoXVtcImpzb25SZXNwb25zZVwiXVxuXG5leHBvcnQgdHlwZSBSb3V0ZVJlcXVlc3RCb2R5PFBhdGggZXh0ZW5kcyBrZXlvZiBSb3V0ZXM+ID1cbiAgUm91dGVzW1BhdGhdW1wianNvbkJvZHlcIl0gJiBSb3V0ZXNbUGF0aF1bXCJjb21tb25QYXJhbXNcIl1cblxuZXhwb3J0IHR5cGUgUm91dGVSZXF1ZXN0UGFyYW1zPFBhdGggZXh0ZW5kcyBrZXlvZiBSb3V0ZXM+ID1cbiAgUm91dGVzW1BhdGhdW1wicXVlcnlQYXJhbXNcIl0gJiBSb3V0ZXNbUGF0aF1bXCJjb21tb25QYXJhbXNcIl1cbmAudHJpbSgpLFxuICAgIHsgc2VtaTogZmFsc2UsIHBhcnNlcjogXCJ0eXBlc2NyaXB0XCIgfVxuICApXG5cbiAgaWYgKG9wdHMub3V0cHV0RmlsZSkge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShvcHRzLm91dHB1dEZpbGUsIG91dHB1dClcbiAgfVxuXG4gIHJldHVybiBvdXRwdXRcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0FBO0FBQUE7QUFBQTtBQUFBO0FBQ0EsV0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBRTVELFFBQU0sV0FBVyxDQUFDLFFBQVE7QUFDdEIsVUFBSSxPQUFPLFFBQVEsWUFBWSxRQUFRLE1BQU07QUFDekMsWUFBSSxPQUFPLE9BQU8sbUJBQW1CLFlBQVk7QUFDN0MsZ0JBQU0sWUFBWSxPQUFPLGVBQWUsR0FBRztBQUMzQyxpQkFBTyxjQUFjLE9BQU8sYUFBYSxjQUFjO0FBQUEsUUFDM0Q7QUFDQSxlQUFPLE9BQU8sVUFBVSxTQUFTLEtBQUssR0FBRyxNQUFNO0FBQUEsTUFDbkQ7QUFDQSxhQUFPO0FBQUEsSUFDWDtBQUNBLFFBQU0sUUFBUSxJQUFJLFlBQVksUUFBUSxPQUFPLENBQUMsUUFBUSxZQUFZO0FBQzlELFVBQUksTUFBTSxRQUFRLE9BQU8sR0FBRztBQUN4QixjQUFNLElBQUksVUFBVSxpRUFBaUU7QUFBQSxNQUN6RjtBQUNBLGFBQU8sS0FBSyxPQUFPLEVBQUUsUUFBUSxDQUFDLFFBQVE7QUFDbEMsWUFBSSxDQUFDLGFBQWEsZUFBZSxXQUFXLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDekQ7QUFBQSxRQUNKO0FBQ0EsWUFBSSxNQUFNLFFBQVEsT0FBTyxJQUFJLEtBQUssTUFBTSxRQUFRLFFBQVEsSUFBSSxHQUFHO0FBQzNELGlCQUFPLE9BQU8sTUFBTSxRQUFRLGNBQ3RCLE1BQU0sUUFBUSxtQkFDVixNQUFNLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxPQUFPLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFDcEQsQ0FBQyxHQUFHLE9BQU8sTUFBTSxHQUFHLFFBQVEsSUFBSSxJQUNwQyxRQUFRO0FBQUEsUUFDbEIsV0FDUyxTQUFTLE9BQU8sSUFBSSxLQUFLLFNBQVMsUUFBUSxJQUFJLEdBQUc7QUFDdEQsaUJBQU8sT0FBTyxNQUFNLE9BQU8sTUFBTSxRQUFRLElBQUk7QUFBQSxRQUNqRCxPQUNLO0FBQ0QsaUJBQU8sT0FDSCxRQUFRLFNBQVMsU0FDWCxNQUFNLFFBQVEsMEJBQ1YsUUFBUSxPQUNSLE9BQU8sT0FDWCxRQUFRO0FBQUEsUUFDdEI7QUFBQSxNQUNKLENBQUM7QUFDRCxhQUFPO0FBQUEsSUFDWCxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQU0saUJBQWlCO0FBQUEsTUFDbkIseUJBQXlCO0FBQUEsTUFDekIsYUFBYTtBQUFBLE1BQ2Isa0JBQWtCO0FBQUEsSUFDdEI7QUFDQSxVQUFNLFVBQVU7QUFDaEIsVUFBTSxjQUFjLENBQUMsWUFBWSxZQUFZO0FBQ3pDLFlBQU0sVUFBVSxPQUFPLE9BQU8sT0FBTyxPQUFPLENBQUMsR0FBRyxjQUFjLEdBQUcsT0FBTztBQUN4RSxZQUFNLFNBQVMsTUFBTSxHQUFHLE9BQU87QUFDL0IsWUFBTSxVQUFVO0FBQ2hCLGFBQU87QUFBQSxJQUNYO0FBQ0EsWUFBUSxVQUFVO0FBQUE7QUFBQTs7Ozs7Ozs7O0FDckRsQixRQUFBLGlCQUFBO0FBQ0EsUUFBQSxRQUFBLFFBQUE7QUFnQkEsYUFBZ0IsVUFDZCxRQUNBLGVBQTZCLENBQUEsR0FBRTtBQUUvQixhQUFPLGNBQWMsT0FBTyxPQUFPLE9BQU8sZUFBZSxDQUFBLEdBQUksWUFBWTtBQUN6RSxhQUFPO0lBQ1Q7QUFOQSxZQUFBLFlBQUE7QUFRQSxhQUFTLGlCQUFpQixFQUN4QixRQUNBLFVBQVMsR0FDd0I7QUFDakMsYUFBTyxPQUFPLEtBQUssT0FBTyxLQUFLLEVBQUUsT0FDL0IsQ0FBQyxPQUFPLFFBQVEsT0FBQSxPQUFBLE9BQUEsT0FBQSxDQUFBLEdBQ1gsS0FBSyxHQUFBLEVBQ1IsQ0FBQyxNQUFNQSxnQkFBZSxPQUFPLE1BQU0sTUFBTSxTQUFTLEVBQUMsQ0FBQSxHQUVyRCxDQUFBLENBQWtDO0lBRXRDO0FBRUEsYUFBUyxvQkFBb0IsRUFDM0IsUUFDQSxTQUNBLFVBQVMsR0FDa0Q7QUFDM0QsWUFBTSxRQUFRQSxnQkFBZSxPQUFPLEtBQUssUUFBUSxTQUFTO0FBRTFELFVBQUksU0FBUztBQUNiLFVBQUksYUFBYSxPQUFPLEtBQUssUUFBUTtBQUNuQyxjQUFNLFNBQ0osT0FBTyxLQUFLLE9BQU8sU0FBUyxjQUFjLE9BQU8sS0FBSyxTQUFTO0FBQ2pFLFlBQUksVUFBVSxlQUFlLFFBQVE7QUFDbkMsY0FBSTtBQUNGLHFCQUFTLE9BQU8sT0FBTztjQUNyQixDQUFDLFdBQVcsUUFBUSxFQUFFLFNBQVMsR0FBRyxNQUFNLE1BQU0sSUFDMUMsSUFDQSxhQUFhLE1BQU0sT0FDbkIsS0FDQSxjQUFjLE1BQU0sT0FDcEIsUUFDQSxhQUFhLE1BQU0sT0FDbkIsQ0FBQSxJQUNBLFdBQVcsTUFBTSxPQUNqQixPQUNBLFlBQVksTUFBTSxPQUNsQixDQUFBLElBQ0E7Y0FDSixFQUFFLFVBQVUsTUFBTSxRQUFXLE1BQU0sQ0FBQSxFQUFFOzttQkFFaEMsR0FBUDs7OztBQUtOLGNBQU8sR0FBQSxlQUFBLFNBQUssT0FBQSxPQUFBLE9BQUEsT0FBQSxPQUFBLE9BQUEsQ0FBQSxHQUVKLE9BQU8sY0FBYyxFQUFFLGFBQWEsT0FBTyxZQUFXLElBQUssQ0FBQSxDQUFHLEdBQy9ELEtBQUssR0FDSixDQUFDLFVBQVUsVUFBVSxXQUFXLE1BQU0sRUFBRSxTQUFTLE1BQU0sSUFDdkQ7UUFDRSxNQUFNO1VBRVIsQ0FBQSxDQUFHLEdBRVQsR0FBRyxPQUFPO0lBRWQ7QUFFQSxhQUFTLFlBQVksRUFDbkIsUUFDQSxRQUFPLEdBQ2tCO0FBQ3pCLFlBQU0sYUFBMkI7UUFDL0IsTUFBTTs7QUFFUixZQUFNLEVBQUUsU0FBUyxDQUFBLEVBQUUsSUFBSyxPQUFPO0FBQy9CLGFBQU8sUUFBUSxDQUFDLFNBQVE7QUFDdEIsZ0JBQVEsS0FBSztlQUNOO0FBQ0gsdUJBQVcsU0FBUztBQUNwQjtlQUNHO0FBQ0gsdUJBQVcsU0FBUztBQUNwQjtlQUNHO0FBQ0gsdUJBQVcsU0FBUztBQUNwQjtlQUNHO0FBQ0gsdUJBQVcsU0FBUztBQUNwQjtlQUNHO0FBQ0gsdUJBQVcsU0FBUztBQUNwQjtlQUNHO0FBQ0gsdUJBQVcsWUFBWSxLQUFLO0FBQzVCLHVCQUFXLFlBQVksS0FBSztBQUM1QjtlQUNHO0FBQ0gsdUJBQVcsWUFBWSxLQUFLO0FBQzVCO2VBQ0c7QUFDSCx1QkFBVyxZQUFZLEtBQUs7QUFDNUI7ZUFDRztBQUNILHVCQUFXLFVBQVUsS0FBSyxNQUFNO0FBQ2hDOztNQUVOLENBQUM7QUFDRCxjQUFPLEdBQUEsZUFBQSxTQUNMLFlBQ0EsT0FBTyxjQUFjLEVBQUUsYUFBYSxPQUFPLFlBQVcsSUFBSyxDQUFBLEdBQzNELEdBQUcsT0FBTztJQUVkO0FBRUEsYUFBUyxZQUFZLEVBQ25CLFFBQ0EsUUFBTyxHQUNrQjtBQUN6QixZQUFNLGFBQTJCO1FBQy9CLE1BQU07O0FBRVIsWUFBTSxFQUFFLFNBQVMsQ0FBQSxFQUFFLElBQUssT0FBTztBQUMvQixhQUFPLFFBQVEsQ0FBQyxTQUFRO0FBQ3RCLGdCQUFRLEtBQUs7ZUFDTjtBQUNILHVCQUFXLFVBQVUsS0FBSztBQUUxQixnQkFBSSxDQUFDLEtBQUs7QUFBVyx5QkFBVyxtQkFBbUIsS0FBSztBQUN4RDtlQUNHO0FBQ0gsdUJBQVcsVUFBVSxLQUFLO0FBQzFCLGdCQUFJLENBQUMsS0FBSztBQUFXLHlCQUFXLG1CQUFtQixLQUFLO0FBQ3hEO2VBQ0c7QUFDSCx1QkFBVyxPQUFPO0FBQ2xCO2VBQ0c7QUFDSCx1QkFBVyxhQUFhLEtBQUs7O01BRW5DLENBQUM7QUFDRCxjQUFPLEdBQUEsZUFBQSxTQUNMLFlBQ0EsT0FBTyxjQUFjLEVBQUUsYUFBYSxPQUFPLFlBQVcsSUFBSyxDQUFBLEdBQzNELEdBQUcsT0FBTztJQUVkO0FBRUEsYUFBUyxZQUFZLEVBQ25CLFFBQ0EsU0FDQSxVQUFTLEdBR1Y7O0FBQ0MsVUFBSTtBQUdKLFVBQ0UsRUFDRSxPQUFPLEtBQUssb0JBQW9CLE1BQUEsRUFBRSxjQUNsQyxLQUFBLE9BQU8sS0FBSyxjQUFRLFFBQUEsT0FBQSxTQUFBLFNBQUEsR0FBRSxLQUFLLGNBQWE7QUFHMUMsK0JBQXVCQSxnQkFBZSxPQUFPLEtBQUssVUFBVSxTQUFTO2VBQzlELE9BQU8sS0FBSyxnQkFBZ0I7QUFDbkMsK0JBQXVCO2VBQ2hCLE9BQU8sS0FBSyxnQkFBZ0I7QUFBVSwrQkFBdUI7QUFHdEUsNkJBQ0Usd0JBQXdCLE9BQU8sRUFBRSxxQkFBb0IsSUFBSyxDQUFBO0FBRTVELFlBQU0scUJBQXFCLE9BQU8sS0FDL0IsT0FBMEIsS0FBSyxFQUNoQyxPQUFPLENBQUMsUUFBTztBQUNmLGNBQU0sT0FBUSxPQUEwQixNQUFNO0FBQzlDLGVBQ0UsRUFDRSxLQUFLLFdBQVUsS0FDZixnQkFBZ0IsTUFBQSxFQUFFLGNBQ2xCLEtBQUssS0FBSyxhQUFhLGlCQUNwQixFQUFFLGdCQUFnQixNQUFBLEVBQUUsWUFBWSxLQUFLLEtBQUssYUFBYTtNQUVoRSxDQUFDO0FBRUQsWUFBTSxXQUNKLG1CQUFtQixTQUFTLElBQUksRUFBRSxVQUFVLG1CQUFrQixJQUFLLENBQUE7QUFFckUsY0FBTyxHQUFBLGVBQUEsU0FBSyxPQUFBLE9BQUEsT0FBQSxPQUFBLEVBRVIsTUFBTSxVQUNOLFlBQVksaUJBQWlCO1FBQzNCO1FBQ0E7UUFDQTtPQUNELEVBQUMsR0FDQyxRQUFRLEdBQ1Isb0JBQW9CLEdBRXpCLE9BQU8sY0FBYyxFQUFDLGFBQWEsT0FBTyxZQUFXLElBQUksQ0FBQSxHQUN6RCxHQUFHLE9BQU87SUFFZDtBQUVBLGFBQVMsWUFBWSxFQUNuQixRQUNBLFNBQ0EsVUFBUyxHQUNnQjtBQUN6QixjQUFPLEdBQUEsZUFBQSxTQUNMO1FBQ0UsTUFBTTtRQUNOLHNCQUNFLE9BQU8sS0FBSyxxQkFBcUIsTUFBQSxFQUFFLGFBQy9CLENBQUEsSUFDQUEsZ0JBQWUsT0FBTyxLQUFLLFdBQVcsU0FBUztTQUV2RCxPQUFPLGNBQWMsRUFBRSxhQUFhLE9BQU8sWUFBVyxJQUFLLENBQUEsR0FDM0QsR0FBRyxPQUFPO0lBRWQ7QUFFQSxhQUFTLFlBQVksRUFDbkIsUUFDQSxRQUFPLEdBQ2tCO0FBQ3pCLGNBQU8sR0FBQSxlQUFBLFNBQ0wsRUFBRSxNQUFNLFdBQStCLFFBQVEsUUFBTyxHQUN0RCxPQUFPLGNBQWMsRUFBRSxhQUFhLE9BQU8sWUFBVyxJQUFLLENBQUEsR0FDM0QsR0FBRyxPQUFPO0lBRWQ7QUFFQSxhQUFTLGFBQWEsRUFDcEIsUUFDQSxRQUFPLEdBQ21CO0FBQzFCLGNBQU8sR0FBQSxlQUFBLFNBQ0wsRUFBRSxNQUFNLFVBQTZCLEdBQ3JDLE9BQU8sY0FBYyxFQUFFLGFBQWEsT0FBTyxZQUFXLElBQUssQ0FBQSxHQUMzRCxHQUFHLE9BQU87SUFFZDtBQUVBLGFBQVMsVUFBVSxFQUFFLFFBQVEsUUFBTyxHQUEwQjtBQUM1RCxjQUFPLEdBQUEsZUFBQSxTQUNMLEVBQUUsTUFBTSxVQUE4QixRQUFRLFlBQVcsR0FDekQsT0FBTyxjQUFjLEVBQUUsYUFBYSxPQUFPLFlBQVcsSUFBSyxDQUFBLEdBQzNELEdBQUcsT0FBTztJQUVkO0FBRUEsYUFBUyxVQUFVLEVBQUUsUUFBUSxRQUFPLEdBQTBCO0FBQzVELGNBQU8sR0FBQSxlQUFBLFNBQ0w7UUFDRSxNQUFNO1FBQ04sUUFBUTtRQUNSLFVBQVU7U0FFWixPQUFPLGNBQWMsRUFBRSxhQUFhLE9BQU8sWUFBVyxJQUFLLENBQUEsR0FDM0QsR0FBRyxPQUFPO0lBRWQ7QUFFQSxhQUFTLHNCQUFzQixFQUM3QixTQUNBLFFBQ0EsVUFBUyxHQUdWO0FBQ0MsY0FBTyxHQUFBLGVBQUEsU0FDTEEsZ0JBQWUsT0FBTyxPQUFNLEdBQUksU0FBUyxHQUN6QyxPQUFPLGNBQWMsRUFBRSxhQUFhLE9BQU8sWUFBVyxJQUFLLENBQUEsR0FDM0QsR0FBRyxPQUFPO0lBRWQ7QUFFQSxhQUFTLGFBQWEsRUFDcEIsU0FDQSxRQUNBLFVBQVMsR0FDZ0M7QUFDekMsY0FBTyxHQUFBLGVBQUEsU0FBSyxPQUFBLE9BQUEsRUFFUixTQUFTLE9BQU8sS0FBSyxhQUFZLEVBQUUsR0FDaENBLGdCQUFlLE9BQU8sS0FBSyxXQUFXLFNBQVMsQ0FBQyxHQUVyRCxPQUFPLGNBQWMsRUFBRSxhQUFhLE9BQU8sWUFBVyxJQUFLLENBQUEsR0FDM0QsR0FBRyxPQUFPO0lBRWQ7QUFFQSxhQUFTLFdBQVcsRUFDbEIsU0FDQSxRQUNBLFVBQVMsR0FDOEI7QUFDdkMsWUFBTSxjQUE0QixDQUFBO0FBQ2xDLFVBQUksT0FBTyxLQUFLLGVBQWUsTUFBTTtBQUNuQyxvQkFBWSxXQUFXLE9BQU8sS0FBSyxZQUFZO0FBQy9DLG9CQUFZLFdBQVcsT0FBTyxLQUFLLFlBQVk7O0FBR2pELFVBQUksT0FBTyxLQUFLLGFBQWE7QUFDM0Isb0JBQVksV0FBVyxPQUFPLEtBQUssVUFBVTtBQUMvQyxVQUFJLE9BQU8sS0FBSyxhQUFhO0FBQzNCLG9CQUFZLFdBQVcsT0FBTyxLQUFLLFVBQVU7QUFFL0MsY0FBTyxHQUFBLGVBQUEsU0FBSyxPQUFBLE9BQUEsRUFFUixNQUFNLFNBQ04sT0FBT0EsZ0JBQWUsT0FBTyxTQUFTLFNBQVMsRUFBQyxHQUM3QyxXQUFXLEdBRWhCLE9BQU8sY0FBYyxFQUFFLGFBQWEsT0FBTyxZQUFXLElBQUssQ0FBQSxHQUMzRCxHQUFHLE9BQU87SUFFZDtBQUVBLGFBQVMsYUFBYSxFQUNwQixTQUNBLE9BQU0sR0FDbUM7QUFDekMsY0FBTyxHQUFBLGVBQUEsU0FDTDtRQUNFLE1BQU0sT0FBTyxPQUFPLEtBQUs7UUFDekIsTUFBTSxDQUFDLE9BQU8sS0FBSyxLQUFLO1NBRTFCLE9BQU8sY0FBYyxFQUFFLGFBQWEsT0FBTyxZQUFXLElBQUssQ0FBQSxHQUMzRCxHQUFHLE9BQU87SUFFZDtBQUVBLGFBQVMsVUFBVSxFQUNqQixTQUNBLE9BQU0sR0FDaUQ7QUFDdkQsY0FBTyxHQUFBLGVBQUEsU0FDTDtRQUNFLE1BQU0sT0FBTyxPQUFPLE9BQU8sT0FBTyxLQUFLLE1BQU0sRUFBRTtRQUMvQyxNQUFNLE9BQU8sT0FBTyxPQUFPLEtBQUssTUFBTTtTQUV4QyxPQUFPLGNBQWMsRUFBRSxhQUFhLE9BQU8sWUFBVyxJQUFLLENBQUEsR0FDM0QsR0FBRyxPQUFPO0lBRWQ7QUFFQSxhQUFTLGtCQUFrQixFQUN6QixTQUNBLFFBQ0EsVUFBUyxHQUNrRDtBQUMzRCxjQUFPLEdBQUEsZUFBQSxTQUNMO1FBQ0UsT0FBTztVQUNMQSxnQkFBZSxPQUFPLEtBQUssTUFBTSxTQUFTO1VBQzFDQSxnQkFBZSxPQUFPLEtBQUssT0FBTyxTQUFTOztTQUcvQyxPQUFPLGNBQWMsRUFBRSxhQUFhLE9BQU8sWUFBVyxJQUFLLENBQUEsR0FDM0QsR0FBRyxPQUFPO0lBRWQ7QUFFQSxhQUFTLFdBQVcsRUFDbEIsU0FDQSxRQUNBLFVBQVMsR0FDa0Q7QUFDM0QsWUFBTSxXQUFXLE9BQU8sS0FBSztBQUM3QixVQUFJLFNBQVMsT0FBTyxDQUFDLE1BQU0sWUFBWSxRQUFRLFFBQVEsS0FBSyxhQUFhLGNBQWMsSUFBSSxHQUFHO0FBRTVGLGNBQU0sV0FBVztBQUNqQixjQUFNLE9BQU8sU0FDVixPQUFPLENBQUMsTUFBTSxZQUNiLENBQUMsUUFBUSxTQUFTLE9BQU8sUUFBUSxLQUFLLFFBQ3BDLE9BQU8sUUFBUSxLQUFLLFFBQ3BCLE1BQ0YsSUFBcUI7QUFHekIsWUFBSSxNQUFNO0FBQ1Isa0JBQU8sR0FBQSxlQUFBLFNBQ0w7WUFDRTtZQUNBLE1BQU0sU0FBUyxJQUFJLENBQUMsWUFBWSxRQUFRLEtBQUssS0FBSzthQUVwRCxPQUFPLGNBQWMsRUFBRSxhQUFhLE9BQU8sWUFBVyxJQUFLLENBQUEsR0FDM0QsR0FBRyxPQUFPOzs7QUFLaEIsY0FBTyxHQUFBLGVBQUEsU0FDTDtRQUNFLE9BQU8sU0FBUyxJQUFJLENBQUMsV0FBV0EsZ0JBQWUsUUFBUSxTQUFTLENBQUM7U0FFbkUsT0FBTyxjQUFjLEVBQUUsYUFBYSxPQUFPLFlBQVcsSUFBSyxDQUFBLEdBQzNELEdBQUcsT0FBTztJQUVkO0FBRUEsYUFBUyx3QkFBd0IsRUFDL0IsU0FDQSxRQUNBLFVBQVMsR0FHVjtBQUNDLGNBQU8sR0FBQSxlQUFBLFNBQ0w7UUFDRSxlQUFlO1VBQ2IsY0FDRSxPQUlBLEtBQUs7O1FBRVQsT0FBTyxNQUFNLEtBRVQsT0FJQSxLQUFLLFFBQVEsT0FBTSxDQUFFLEVBQ3ZCLElBQUksQ0FBQyxXQUFXQSxnQkFBZSxRQUFRLFNBQVMsQ0FBQztTQUVyRCxPQUFPLGNBQWMsRUFBRSxhQUFhLE9BQU8sWUFBVyxJQUFLLENBQUEsR0FDM0QsR0FBRyxPQUFPO0lBRWQ7QUFFQSxhQUFTLFdBQVcsRUFDbEIsUUFDQSxRQUFPLEdBQ2lCO0FBQ3hCLGNBQU8sR0FBQSxlQUFBLFNBQ0wsRUFBRSxVQUFVLEtBQUksR0FDaEIsT0FBTyxjQUFjLEVBQUUsYUFBYSxPQUFPLFlBQVcsSUFBSyxDQUFBLEdBQzNELEdBQUcsT0FBTztJQUVkO0FBRUEsYUFBUyxhQUFhLEVBQ3BCLFNBQ0EsT0FBTSxHQUNzQztBQUM1QyxjQUFPLEdBQUEsZUFBQSxTQUFNQSxnQkFBZSxPQUFPLEtBQUssSUFBSSxHQUFHLEdBQUcsT0FBTztJQUMzRDtBQUVBLGFBQVMsZUFBZSxFQUN0QixRQUNBLFFBQU8sR0FDaUI7QUFDeEIsY0FBTyxHQUFBLGVBQUEsU0FDTCxPQUFPLGNBQWMsRUFBRSxhQUFhLE9BQU8sWUFBVyxJQUFLLENBQUEsR0FDM0QsR0FBRyxPQUFPO0lBRWQ7QUFFQSxRQUFNLFlBQVk7TUFDaEIsV0FBVztNQUNYLFdBQVc7TUFDWCxXQUFXO01BQ1gsV0FBVztNQUNYLFdBQVc7TUFDWCxZQUFZO01BQ1osU0FBUztNQUNULFNBQVM7TUFDVCxhQUFhO01BQ2IsYUFBYTtNQUNiLFlBQVk7TUFDWixVQUFVO01BQ1YsWUFBWTtNQUNaLFNBQVM7TUFDVCxlQUFlO01BQ2YsZ0JBQWdCO01BQ2hCLFlBQVk7TUFDWixpQkFBaUI7TUFDakIsVUFBVTtNQUNWLHVCQUF1QjtNQUN2QixVQUFVO01BQ1YsWUFBWTtNQUVaLGNBQWM7TUFFZCxVQUFVO01BQ1YsUUFBUTtNQUNSLGFBQWE7TUFDYixTQUFTO01BQ1QsWUFBWTtNQUNaLFFBQVE7TUFDUixZQUFZO01BQ1osU0FBUzs7QUFJWCxhQUFnQkEsZ0JBQ2QsUUFDQSxXQUFtQjtBQUVuQixZQUFNLEVBQUUsY0FBYyxDQUFBLEVBQUUsSUFBSztBQUM3QixZQUFNLFVBQVU7UUFDZCxPQUFPLGNBQWMsT0FBTyxXQUFVLElBQUssRUFBRSxVQUFVLEtBQUksSUFBSyxDQUFBO1FBQ2hFLEdBQUksTUFBTSxRQUFRLFdBQVcsSUFBSSxjQUFjLENBQUMsV0FBVzs7QUFHN0QsVUFBSTtBQUNGLGNBQU0sV0FBVyxPQUFPLEtBQUs7QUFDN0IsWUFBSSxZQUFZLFdBQVc7QUFDekIsaUJBQU8sVUFBVSxVQUFVO1lBQ3pCO1lBQ0E7WUFDQTtXQUNEOztBQUdILGVBQU8sZUFBZSxFQUFFLFFBQVEsUUFBTyxDQUFFO2VBQ2xDLEtBQVA7QUFDQSxnQkFBUSxNQUFNLEdBQUc7QUFDakIsZUFBTyxlQUFlLEVBQUUsUUFBUSxRQUFPLENBQUU7O0lBRTdDO0FBekJBLFlBQUEsaUJBQUFBOzs7Ozs7Ozs7OztBQ25nQkEsUUFBQSxnQkFBQTtBQWdCQSxhQUFnQixxQkFBcUIsS0FBZSxnQkFBZ0IsT0FBSztBQUN2RSxVQUFJLENBQUMsaUJBQWlCLE9BQU8sSUFBSSxVQUFVLFVBQVUsWUFBWSxhQUFhO0FBSTVFOztBQUdGLFVBQUksVUFBVSxVQUFVLFVBQVUsU0FDaEMsVUFBZ0M7QUFFOUIsZ0JBQU8sR0FBQSxjQUFBLFdBQVUsTUFBTSxRQUFRO01BQ25DO0lBQ0Y7QUFiQSxZQUFBLHVCQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwQkEsaUJBQUEsdUJBQUEsT0FBQTtBQUNBLGlCQUFBLDBCQUFBLE9BQUE7Ozs7O0FDREE7QUFBQSxnREFBQUMsU0FBQTtBQUFBO0FBQUE7QUFRQSxRQUFNLFNBQVMsUUFBUTtBQUN2QixRQUFNLGNBQWMsT0FBTztBQUMzQixRQUFNLFFBQVEsTUFBTSxVQUFVO0FBRTlCLElBQUFBLFFBQU8sVUFBVUM7QUFFakIsYUFBU0EsVUFBVTtBQUNqQixZQUFNLGVBQWUsQ0FBQztBQUN0QixZQUFNLE9BQU8sTUFBTSxLQUFLLFNBQVM7QUFDakMsVUFBSSxVQUFVO0FBQ2QsVUFBSSxVQUFVLEtBQUssS0FBSyxTQUFTO0FBRWpDLFVBQUksV0FBVyxDQUFDLE1BQU0sUUFBUSxPQUFPLEtBQUssUUFBUSxRQUFRLE1BQU07QUFDOUQsYUFBSyxJQUFJO0FBQUEsTUFDWCxPQUFPO0FBQ0wsa0JBQVUsQ0FBQztBQUFBLE1BQ2I7QUFFQSxZQUFNLFFBQVEsUUFBUSxRQUFRO0FBQzlCLFlBQU0sY0FBYyxRQUFRLGNBQWM7QUFDMUMsVUFBSSxRQUFRLGNBQWMsTUFBTTtBQUM5QixnQkFBUSxhQUFhO0FBQUEsTUFDdkI7QUFDQSxVQUFJLFFBQVEsaUJBQWlCLE1BQU07QUFDakMsZ0JBQVEsZ0JBQWdCLEtBQUs7QUFBQSxNQUMvQjtBQUNBLFlBQU0sZUFBZSxZQUFZLE9BQU87QUFFeEMsZUFBUyxZQUFhO0FBQ3BCLGlCQUFTLElBQUksR0FBRyxNQUFNLFVBQVUsUUFBUSxJQUFJLEtBQUssS0FBSztBQUNwRCx1QkFBYSxLQUFLLGFBQWEsVUFBVSxJQUFJLE9BQU8sQ0FBQztBQUFBLFFBQ3ZEO0FBQ0Esb0JBQVk7QUFDWixlQUFPO0FBQUEsTUFDVDtBQUVBLGVBQVMsY0FBZTtBQUN0QixZQUFJLFNBQVM7QUFDWDtBQUFBLFFBQ0Y7QUFDQSxrQkFBVTtBQUVWLFlBQUksVUFBVSxhQUFhLE1BQU07QUFDakMsWUFBSSxDQUFDLFNBQVM7QUFDWixrQkFBUSxTQUFTLFNBQVM7QUFDMUI7QUFBQSxRQUNGO0FBQ0EsWUFBSSxDQUFDLE1BQU0sUUFBUSxPQUFPLEdBQUc7QUFDM0Isb0JBQVUsQ0FBQyxPQUFPO0FBQUEsUUFDcEI7QUFFQSxZQUFJLGFBQWEsUUFBUSxTQUFTO0FBRWxDLGlCQUFTLE9BQVE7QUFDZixjQUFJLEVBQUUsYUFBYSxHQUFHO0FBQ3BCO0FBQUEsVUFDRjtBQUNBLG9CQUFVO0FBQ1Ysc0JBQVk7QUFBQSxRQUNkO0FBRUEsaUJBQVMsS0FBTSxRQUFRO0FBQ3JCLG1CQUFTLFFBQVM7QUFDaEIsbUJBQU8sZUFBZSxtQkFBbUIsS0FBSztBQUM5QyxtQkFBTyxlQUFlLE9BQU8sS0FBSztBQUNsQyxnQkFBSSxhQUFhO0FBQ2YscUJBQU8sZUFBZSxTQUFTLE9BQU87QUFBQSxZQUN4QztBQUNBLGlCQUFLO0FBQUEsVUFDUDtBQUNBLG1CQUFTLFFBQVMsS0FBSztBQUNyQix5QkFBYSxLQUFLLFNBQVMsR0FBRztBQUFBLFVBQ2hDO0FBRUEsY0FBSSxPQUFPLGVBQWUsWUFBWTtBQUNwQyxtQkFBTyxLQUFLO0FBQUEsVUFDZDtBQUVBLGlCQUFPLEdBQUcsbUJBQW1CLEtBQUs7QUFDbEMsaUJBQU8sR0FBRyxPQUFPLEtBQUs7QUFFdEIsY0FBSSxhQUFhO0FBQ2YsbUJBQU8sR0FBRyxTQUFTLE9BQU87QUFBQSxVQUM1QjtBQUVBLGlCQUFPLEtBQUssY0FBYyxFQUFFLEtBQUssTUFBTSxDQUFDO0FBRXhDLGlCQUFPLE9BQU87QUFBQSxRQUNoQjtBQUVBLGlCQUFTLElBQUksR0FBRyxJQUFJLFFBQVEsUUFBUSxLQUFLO0FBQ3ZDLGVBQUssUUFBUSxFQUFFO0FBQUEsUUFDakI7QUFFQSxhQUFLO0FBQUEsTUFDUDtBQUVBLGVBQVMsWUFBYTtBQUNwQixrQkFBVTtBQUVWLHFCQUFhLEtBQUssWUFBWTtBQUM5QixZQUFJLE9BQU87QUFDVCx1QkFBYSxJQUFJO0FBQUEsUUFDbkI7QUFBQSxNQUNGO0FBRUEsbUJBQWEsZ0JBQWdCLENBQUM7QUFDOUIsbUJBQWEsTUFBTTtBQUNuQixtQkFBYSxHQUFHLFVBQVUsU0FBVSxRQUFRO0FBQzFDLGVBQU8sS0FBSyxpQkFBaUI7QUFBQSxNQUMvQixDQUFDO0FBRUQsVUFBSSxLQUFLLFFBQVE7QUFDZixrQkFBVSxNQUFNLE1BQU0sSUFBSTtBQUFBLE1BQzVCO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFHQSxhQUFTLGFBQWMsU0FBUyxTQUFTO0FBQ3ZDLFVBQUksQ0FBQyxNQUFNLFFBQVEsT0FBTyxHQUFHO0FBRTNCLFlBQUksQ0FBQyxRQUFRLGtCQUFrQixRQUFRLE1BQU07QUFDM0Msb0JBQVUsUUFBUSxLQUFLLFlBQVksT0FBTyxDQUFDO0FBQUEsUUFDN0M7QUFDQSxZQUFJLENBQUMsUUFBUSxrQkFBa0IsQ0FBQyxRQUFRLFNBQVMsQ0FBQyxRQUFRLE1BQU07QUFDOUQsZ0JBQU0sSUFBSSxNQUFNLHFDQUFxQztBQUFBLFFBQ3ZEO0FBQ0EsZ0JBQVEsTUFBTTtBQUFBLE1BQ2hCLE9BQU87QUFDTCxpQkFBUyxJQUFJLEdBQUcsTUFBTSxRQUFRLFFBQVEsSUFBSSxLQUFLLEtBQUs7QUFDbEQsa0JBQVEsS0FBSyxhQUFhLFFBQVEsSUFBSSxPQUFPO0FBQUEsUUFDL0M7QUFBQSxNQUNGO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFBQTtBQUFBOzs7QUMvSUE7QUFBQTtBQUFBO0FBQUE7QUFDQSxXQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsWUFBUSxZQUFZLFFBQVEsVUFBVTtBQUN0QyxhQUFTLFFBQVEsT0FBTztBQUNwQixhQUFPLE1BQU0sT0FBTyxDQUFDLFlBQVksU0FBUyxDQUFDLEVBQUUsT0FBTyxZQUFZLElBQUksR0FBRyxDQUFDLENBQUM7QUFBQSxJQUM3RTtBQUNBLFlBQVEsVUFBVTtBQUNsQixhQUFTLFVBQVUsT0FBTyxXQUFXO0FBQ2pDLFlBQU0sU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNsQixVQUFJLGFBQWE7QUFDakIsaUJBQVcsUUFBUSxPQUFPO0FBQ3RCLFlBQUksVUFBVSxJQUFJLEdBQUc7QUFDakI7QUFDQSxpQkFBTyxjQUFjLENBQUM7QUFBQSxRQUMxQixPQUNLO0FBQ0QsaUJBQU8sWUFBWSxLQUFLLElBQUk7QUFBQSxRQUNoQztBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQUEsSUFDWDtBQUNBLFlBQVEsWUFBWTtBQUFBO0FBQUE7OztBQ3JCcEI7QUFBQTtBQUFBO0FBQUE7QUFDQSxXQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsWUFBUSxvQkFBb0I7QUFDNUIsYUFBUyxrQkFBa0IsT0FBTztBQUM5QixhQUFPLE1BQU0sU0FBUztBQUFBLElBQzFCO0FBQ0EsWUFBUSxvQkFBb0I7QUFBQTtBQUFBOzs7QUNONUI7QUFBQTtBQUFBO0FBQUE7QUFDQSxXQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsWUFBUSx3QkFBd0I7QUFDaEMsUUFBTSxrQkFBTixNQUFzQjtBQUFBLE1BQ2xCLFlBQVksTUFBTSxPQUFPO0FBQ3JCLGFBQUssT0FBTztBQUNaLGFBQUssZ0JBQWdCLE1BQU0sY0FBYyxLQUFLLEtBQUs7QUFDbkQsYUFBSyxvQkFBb0IsTUFBTSxrQkFBa0IsS0FBSyxLQUFLO0FBQzNELGFBQUssY0FBYyxNQUFNLFlBQVksS0FBSyxLQUFLO0FBQy9DLGFBQUssU0FBUyxNQUFNLE9BQU8sS0FBSyxLQUFLO0FBQ3JDLGFBQUssU0FBUyxNQUFNLE9BQU8sS0FBSyxLQUFLO0FBQ3JDLGFBQUssV0FBVyxNQUFNLFNBQVMsS0FBSyxLQUFLO0FBQ3pDLGFBQUssaUJBQWlCLE1BQU0sZUFBZSxLQUFLLEtBQUs7QUFBQSxNQUN6RDtBQUFBLElBQ0o7QUFDQSxhQUFTLHNCQUFzQixNQUFNLE9BQU87QUFDeEMsYUFBTyxJQUFJLGdCQUFnQixNQUFNLEtBQUs7QUFBQSxJQUMxQztBQUNBLFlBQVEsd0JBQXdCO0FBQUE7QUFBQTs7O0FDbEJoQztBQUFBO0FBQUE7QUFBQTtBQUNBLFdBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUM1RCxZQUFRLDRCQUE0QixRQUFRLDhCQUE4QixRQUFRLHVCQUF1QixRQUFRLGtCQUFrQixRQUFRLG9CQUFvQixRQUFRLFNBQVMsUUFBUSwwQkFBMEIsUUFBUSxlQUFlLFFBQVEsVUFBVTtBQUMzUCxRQUFNQyxNQUFLLFFBQVE7QUFDbkIsUUFBTUMsUUFBTyxRQUFRO0FBQ3JCLFFBQU0sc0JBQXNCRCxJQUFHLFNBQVMsTUFBTTtBQUM5QyxRQUFNLHVDQUF1QztBQU03QyxRQUFNLGtDQUFrQztBQUN4QyxRQUFNLG9DQUFvQztBQUsxQyxRQUFNLHFCQUFxQjtBQU0zQixRQUFNLHlCQUF5QjtBQUkvQixhQUFTLFFBQVEsVUFBVTtBQUN2QixhQUFPLFNBQVMsUUFBUSxPQUFPLEdBQUc7QUFBQSxJQUN0QztBQUNBLFlBQVEsVUFBVTtBQUNsQixhQUFTLGFBQWEsS0FBSyxVQUFVO0FBQ2pDLGFBQU9DLE1BQUssUUFBUSxLQUFLLFFBQVE7QUFBQSxJQUNyQztBQUNBLFlBQVEsZUFBZTtBQUN2QixhQUFTLHdCQUF3QixPQUFPO0FBR3BDLFVBQUksTUFBTSxPQUFPLENBQUMsTUFBTSxLQUFLO0FBQ3pCLGNBQU0sbUJBQW1CLE1BQU0sT0FBTyxDQUFDO0FBQ3ZDLFlBQUkscUJBQXFCLE9BQU8scUJBQXFCLE1BQU07QUFDdkQsaUJBQU8sTUFBTSxNQUFNLG9DQUFvQztBQUFBLFFBQzNEO0FBQUEsTUFDSjtBQUNBLGFBQU87QUFBQSxJQUNYO0FBQ0EsWUFBUSwwQkFBMEI7QUFDbEMsWUFBUSxTQUFTLHNCQUFzQixvQkFBb0I7QUFDM0QsYUFBUyxrQkFBa0IsU0FBUztBQUNoQyxhQUFPLFFBQVEsUUFBUSxtQ0FBbUMsTUFBTTtBQUFBLElBQ3BFO0FBQ0EsWUFBUSxvQkFBb0I7QUFDNUIsYUFBUyxnQkFBZ0IsU0FBUztBQUM5QixhQUFPLFFBQVEsUUFBUSxpQ0FBaUMsTUFBTTtBQUFBLElBQ2xFO0FBQ0EsWUFBUSxrQkFBa0I7QUFDMUIsWUFBUSx1QkFBdUIsc0JBQXNCLDhCQUE4QjtBQUNuRixhQUFTLDRCQUE0QixVQUFVO0FBQzNDLGFBQU8sa0JBQWtCLFFBQVEsRUFDNUIsUUFBUSxvQkFBb0IsTUFBTSxFQUNsQyxRQUFRLHdCQUF3QixHQUFHO0FBQUEsSUFDNUM7QUFDQSxZQUFRLDhCQUE4QjtBQUN0QyxhQUFTLDBCQUEwQixVQUFVO0FBQ3pDLGFBQU8sZ0JBQWdCLFFBQVE7QUFBQSxJQUNuQztBQUNBLFlBQVEsNEJBQTRCO0FBQUE7QUFBQTs7O0FDbkVwQztBQUFBLG9EQUFBQyxTQUFBO0FBQUE7QUFPQSxJQUFBQSxRQUFPLFVBQVUsU0FBUyxVQUFVLEtBQUs7QUFDdkMsVUFBSSxPQUFPLFFBQVEsWUFBWSxRQUFRLElBQUk7QUFDekMsZUFBTztBQUFBLE1BQ1Q7QUFFQSxVQUFJO0FBQ0osYUFBUSxRQUFRLHlCQUF5QixLQUFLLEdBQUcsR0FBSTtBQUNuRCxZQUFJLE1BQU07QUFBSSxpQkFBTztBQUNyQixjQUFNLElBQUksTUFBTSxNQUFNLFFBQVEsTUFBTSxHQUFHLE1BQU07QUFBQSxNQUMvQztBQUVBLGFBQU87QUFBQSxJQUNUO0FBQUE7QUFBQTs7O0FDbkJBO0FBQUEsaURBQUFDLFNBQUE7QUFBQTtBQU9BLFFBQUksWUFBWTtBQUNoQixRQUFJLFFBQVEsRUFBRSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssSUFBRztBQUMxQyxRQUFJLGNBQWMsU0FBUyxLQUFLO0FBQzlCLFVBQUksSUFBSSxPQUFPLEtBQUs7QUFDbEIsZUFBTztBQUFBLE1BQ1Q7QUFDQSxVQUFJLFFBQVE7QUFDWixVQUFJLFlBQVk7QUFDaEIsVUFBSSxtQkFBbUI7QUFDdkIsVUFBSSxrQkFBa0I7QUFDdEIsVUFBSSxrQkFBa0I7QUFDdEIsVUFBSSxpQkFBaUI7QUFDckIsYUFBTyxRQUFRLElBQUksUUFBUTtBQUN6QixZQUFJLElBQUksV0FBVyxLQUFLO0FBQ3RCLGlCQUFPO0FBQUEsUUFDVDtBQUVBLFlBQUksSUFBSSxRQUFRLE9BQU8sT0FBTyxVQUFVLEtBQUssSUFBSSxNQUFNLEdBQUc7QUFDeEQsaUJBQU87QUFBQSxRQUNUO0FBRUEsWUFBSSxxQkFBcUIsTUFBTSxJQUFJLFdBQVcsT0FBTyxJQUFJLFFBQVEsT0FBTyxLQUFLO0FBQzNFLGNBQUksbUJBQW1CLE9BQU87QUFDNUIsK0JBQW1CLElBQUksUUFBUSxLQUFLLEtBQUs7QUFBQSxVQUMzQztBQUNBLGNBQUksbUJBQW1CLE9BQU87QUFDNUIsZ0JBQUksbUJBQW1CLE1BQU0saUJBQWlCLGtCQUFrQjtBQUM5RCxxQkFBTztBQUFBLFlBQ1Q7QUFDQSw2QkFBaUIsSUFBSSxRQUFRLE1BQU0sS0FBSztBQUN4QyxnQkFBSSxtQkFBbUIsTUFBTSxpQkFBaUIsa0JBQWtCO0FBQzlELHFCQUFPO0FBQUEsWUFDVDtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBRUEsWUFBSSxvQkFBb0IsTUFBTSxJQUFJLFdBQVcsT0FBTyxJQUFJLFFBQVEsT0FBTyxLQUFLO0FBQzFFLDRCQUFrQixJQUFJLFFBQVEsS0FBSyxLQUFLO0FBQ3hDLGNBQUksa0JBQWtCLE9BQU87QUFDM0IsNkJBQWlCLElBQUksUUFBUSxNQUFNLEtBQUs7QUFDeEMsZ0JBQUksbUJBQW1CLE1BQU0saUJBQWlCLGlCQUFpQjtBQUM3RCxxQkFBTztBQUFBLFlBQ1Q7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUVBLFlBQUksb0JBQW9CLE1BQU0sSUFBSSxXQUFXLE9BQU8sSUFBSSxRQUFRLE9BQU8sT0FBTyxRQUFRLEtBQUssSUFBSSxRQUFRLEVBQUUsS0FBSyxJQUFJLFFBQVEsT0FBTyxLQUFLO0FBQ3BJLDRCQUFrQixJQUFJLFFBQVEsS0FBSyxLQUFLO0FBQ3hDLGNBQUksa0JBQWtCLE9BQU87QUFDM0IsNkJBQWlCLElBQUksUUFBUSxNQUFNLEtBQUs7QUFDeEMsZ0JBQUksbUJBQW1CLE1BQU0saUJBQWlCLGlCQUFpQjtBQUM3RCxxQkFBTztBQUFBLFlBQ1Q7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUVBLFlBQUksY0FBYyxNQUFNLElBQUksV0FBVyxPQUFPLElBQUksUUFBUSxPQUFPLEtBQUs7QUFDcEUsY0FBSSxZQUFZLE9BQU87QUFDckIsd0JBQVksSUFBSSxRQUFRLEtBQUssS0FBSztBQUFBLFVBQ3BDO0FBQ0EsY0FBSSxjQUFjLE1BQU0sSUFBSSxZQUFZLE9BQU8sS0FBSztBQUNsRCw4QkFBa0IsSUFBSSxRQUFRLEtBQUssU0FBUztBQUM1QyxnQkFBSSxrQkFBa0IsV0FBVztBQUMvQiwrQkFBaUIsSUFBSSxRQUFRLE1BQU0sU0FBUztBQUM1QyxrQkFBSSxtQkFBbUIsTUFBTSxpQkFBaUIsaUJBQWlCO0FBQzdELHVCQUFPO0FBQUEsY0FDVDtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUVBLFlBQUksSUFBSSxXQUFXLE1BQU07QUFDdkIsY0FBSSxPQUFPLElBQUksUUFBUTtBQUN2QixtQkFBUztBQUNULGNBQUksUUFBUSxNQUFNO0FBRWxCLGNBQUksT0FBTztBQUNULGdCQUFJLElBQUksSUFBSSxRQUFRLE9BQU8sS0FBSztBQUNoQyxnQkFBSSxNQUFNLElBQUk7QUFDWixzQkFBUSxJQUFJO0FBQUEsWUFDZDtBQUFBLFVBQ0Y7QUFFQSxjQUFJLElBQUksV0FBVyxLQUFLO0FBQ3RCLG1CQUFPO0FBQUEsVUFDVDtBQUFBLFFBQ0YsT0FBTztBQUNMO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksZUFBZSxTQUFTLEtBQUs7QUFDL0IsVUFBSSxJQUFJLE9BQU8sS0FBSztBQUNsQixlQUFPO0FBQUEsTUFDVDtBQUNBLFVBQUksUUFBUTtBQUNaLGFBQU8sUUFBUSxJQUFJLFFBQVE7QUFDekIsWUFBSSxjQUFjLEtBQUssSUFBSSxNQUFNLEdBQUc7QUFDbEMsaUJBQU87QUFBQSxRQUNUO0FBRUEsWUFBSSxJQUFJLFdBQVcsTUFBTTtBQUN2QixjQUFJLE9BQU8sSUFBSSxRQUFRO0FBQ3ZCLG1CQUFTO0FBQ1QsY0FBSSxRQUFRLE1BQU07QUFFbEIsY0FBSSxPQUFPO0FBQ1QsZ0JBQUksSUFBSSxJQUFJLFFBQVEsT0FBTyxLQUFLO0FBQ2hDLGdCQUFJLE1BQU0sSUFBSTtBQUNaLHNCQUFRLElBQUk7QUFBQSxZQUNkO0FBQUEsVUFDRjtBQUVBLGNBQUksSUFBSSxXQUFXLEtBQUs7QUFDdEIsbUJBQU87QUFBQSxVQUNUO0FBQUEsUUFDRixPQUFPO0FBQ0w7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUNBLGFBQU87QUFBQSxJQUNUO0FBRUEsSUFBQUEsUUFBTyxVQUFVLFNBQVMsT0FBTyxLQUFLLFNBQVM7QUFDN0MsVUFBSSxPQUFPLFFBQVEsWUFBWSxRQUFRLElBQUk7QUFDekMsZUFBTztBQUFBLE1BQ1Q7QUFFQSxVQUFJLFVBQVUsR0FBRyxHQUFHO0FBQ2xCLGVBQU87QUFBQSxNQUNUO0FBRUEsVUFBSSxRQUFRO0FBR1osVUFBSSxXQUFXLFFBQVEsV0FBVyxPQUFPO0FBQ3ZDLGdCQUFRO0FBQUEsTUFDVjtBQUVBLGFBQU8sTUFBTSxHQUFHO0FBQUEsSUFDbEI7QUFBQTtBQUFBOzs7QUNySkE7QUFBQSxzRUFBQUMsU0FBQTtBQUFBO0FBQUE7QUFFQSxRQUFJLFNBQVM7QUFDYixRQUFJLG1CQUFtQixRQUFRLFFBQVEsTUFBTTtBQUM3QyxRQUFJLFVBQVUsUUFBUSxNQUFNLFNBQVMsTUFBTTtBQUUzQyxRQUFJQyxTQUFRO0FBQ1osUUFBSSxZQUFZO0FBQ2hCLFFBQUksWUFBWTtBQUNoQixRQUFJQyxVQUFTO0FBQ2IsUUFBSSxVQUFVO0FBUWQsSUFBQUYsUUFBTyxVQUFVLFNBQVMsV0FBVyxLQUFLLE1BQU07QUFDOUMsVUFBSSxVQUFVLE9BQU8sT0FBTyxFQUFFLGlCQUFpQixLQUFLLEdBQUcsSUFBSTtBQUczRCxVQUFJLFFBQVEsbUJBQW1CLFdBQVcsSUFBSSxRQUFRQyxNQUFLLElBQUksR0FBRztBQUNoRSxjQUFNLElBQUksUUFBUSxXQUFXQSxNQUFLO0FBQUEsTUFDcEM7QUFHQSxVQUFJLFVBQVUsS0FBSyxHQUFHLEdBQUc7QUFDdkIsZUFBT0E7QUFBQSxNQUNUO0FBR0EsYUFBTztBQUdQLFNBQUc7QUFDRCxjQUFNLGlCQUFpQixHQUFHO0FBQUEsTUFDNUIsU0FBUyxPQUFPLEdBQUcsS0FBS0MsUUFBTyxLQUFLLEdBQUc7QUFHdkMsYUFBTyxJQUFJLFFBQVEsU0FBUyxJQUFJO0FBQUEsSUFDbEM7QUFBQTtBQUFBOzs7QUN6Q0E7QUFBQTtBQUFBO0FBQUE7QUFFQSxZQUFRLFlBQVksU0FBTztBQUN6QixVQUFJLE9BQU8sUUFBUSxVQUFVO0FBQzNCLGVBQU8sT0FBTyxVQUFVLEdBQUc7QUFBQSxNQUM3QjtBQUNBLFVBQUksT0FBTyxRQUFRLFlBQVksSUFBSSxLQUFLLE1BQU0sSUFBSTtBQUNoRCxlQUFPLE9BQU8sVUFBVSxPQUFPLEdBQUcsQ0FBQztBQUFBLE1BQ3JDO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFNQSxZQUFRLE9BQU8sQ0FBQyxNQUFNLFNBQVMsS0FBSyxNQUFNLEtBQUssQ0FBQUMsVUFBUUEsTUFBSyxTQUFTLElBQUk7QUFNekUsWUFBUSxlQUFlLENBQUMsS0FBSyxLQUFLLE9BQU8sR0FBRyxVQUFVO0FBQ3BELFVBQUksVUFBVTtBQUFPLGVBQU87QUFDNUIsVUFBSSxDQUFDLFFBQVEsVUFBVSxHQUFHLEtBQUssQ0FBQyxRQUFRLFVBQVUsR0FBRztBQUFHLGVBQU87QUFDL0QsY0FBUyxPQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUcsS0FBSyxPQUFPLElBQUksS0FBTTtBQUFBLElBQ3pEO0FBTUEsWUFBUSxhQUFhLENBQUMsT0FBTyxJQUFJLEdBQUcsU0FBUztBQUMzQyxVQUFJLE9BQU8sTUFBTSxNQUFNO0FBQ3ZCLFVBQUksQ0FBQztBQUFNO0FBRVgsVUFBSyxRQUFRLEtBQUssU0FBUyxRQUFTLEtBQUssU0FBUyxVQUFVLEtBQUssU0FBUyxTQUFTO0FBQ2pGLFlBQUksS0FBSyxZQUFZLE1BQU07QUFDekIsZUFBSyxRQUFRLE9BQU8sS0FBSztBQUN6QixlQUFLLFVBQVU7QUFBQSxRQUNqQjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBTUEsWUFBUSxlQUFlLFVBQVE7QUFDN0IsVUFBSSxLQUFLLFNBQVM7QUFBUyxlQUFPO0FBQ2xDLFVBQUssS0FBSyxVQUFVLElBQUksS0FBSyxVQUFVLE1BQU8sR0FBRztBQUMvQyxhQUFLLFVBQVU7QUFDZixlQUFPO0FBQUEsTUFDVDtBQUNBLGFBQU87QUFBQSxJQUNUO0FBTUEsWUFBUSxpQkFBaUIsV0FBUztBQUNoQyxVQUFJLE1BQU0sU0FBUztBQUFTLGVBQU87QUFDbkMsVUFBSSxNQUFNLFlBQVksUUFBUSxNQUFNO0FBQVEsZUFBTztBQUNuRCxVQUFLLE1BQU0sVUFBVSxJQUFJLE1BQU0sVUFBVSxNQUFPLEdBQUc7QUFDakQsY0FBTSxVQUFVO0FBQ2hCLGVBQU87QUFBQSxNQUNUO0FBQ0EsVUFBSSxNQUFNLFNBQVMsUUFBUSxNQUFNLFVBQVUsTUFBTTtBQUMvQyxjQUFNLFVBQVU7QUFDaEIsZUFBTztBQUFBLE1BQ1Q7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQU1BLFlBQVEsZ0JBQWdCLFVBQVE7QUFDOUIsVUFBSSxLQUFLLFNBQVMsVUFBVSxLQUFLLFNBQVMsU0FBUztBQUNqRCxlQUFPO0FBQUEsTUFDVDtBQUNBLGFBQU8sS0FBSyxTQUFTLFFBQVEsS0FBSyxVQUFVO0FBQUEsSUFDOUM7QUFNQSxZQUFRLFNBQVMsV0FBUyxNQUFNLE9BQU8sQ0FBQyxLQUFLLFNBQVM7QUFDcEQsVUFBSSxLQUFLLFNBQVM7QUFBUSxZQUFJLEtBQUssS0FBSyxLQUFLO0FBQzdDLFVBQUksS0FBSyxTQUFTO0FBQVMsYUFBSyxPQUFPO0FBQ3ZDLGFBQU87QUFBQSxJQUNULEdBQUcsQ0FBQyxDQUFDO0FBTUwsWUFBUSxVQUFVLElBQUksU0FBUztBQUM3QixZQUFNLFNBQVMsQ0FBQztBQUNoQixZQUFNLE9BQU8sU0FBTztBQUNsQixpQkFBUyxJQUFJLEdBQUcsSUFBSSxJQUFJLFFBQVEsS0FBSztBQUNuQyxjQUFJLE1BQU0sSUFBSTtBQUNkLGdCQUFNLFFBQVEsR0FBRyxJQUFJLEtBQUssS0FBSyxNQUFNLElBQUksUUFBUSxVQUFVLE9BQU8sS0FBSyxHQUFHO0FBQUEsUUFDNUU7QUFDQSxlQUFPO0FBQUEsTUFDVDtBQUNBLFdBQUssSUFBSTtBQUNULGFBQU87QUFBQSxJQUNUO0FBQUE7QUFBQTs7O0FDL0dBO0FBQUEsd0RBQUFDLFNBQUE7QUFBQTtBQUFBO0FBRUEsUUFBTSxRQUFRO0FBRWQsSUFBQUEsUUFBTyxVQUFVLENBQUMsS0FBSyxVQUFVLENBQUMsTUFBTTtBQUN0QyxVQUFJLFlBQVksQ0FBQyxNQUFNLFNBQVMsQ0FBQyxNQUFNO0FBQ3JDLFlBQUksZUFBZSxRQUFRLGlCQUFpQixNQUFNLGVBQWUsTUFBTTtBQUN2RSxZQUFJLGNBQWMsS0FBSyxZQUFZLFFBQVEsUUFBUSxrQkFBa0I7QUFDckUsWUFBSSxTQUFTO0FBRWIsWUFBSSxLQUFLLE9BQU87QUFDZCxlQUFLLGdCQUFnQixnQkFBZ0IsTUFBTSxjQUFjLElBQUksR0FBRztBQUM5RCxtQkFBTyxPQUFPLEtBQUs7QUFBQSxVQUNyQjtBQUNBLGlCQUFPLEtBQUs7QUFBQSxRQUNkO0FBRUEsWUFBSSxLQUFLLE9BQU87QUFDZCxpQkFBTyxLQUFLO0FBQUEsUUFDZDtBQUVBLFlBQUksS0FBSyxPQUFPO0FBQ2QsbUJBQVMsU0FBUyxLQUFLLE9BQU87QUFDNUIsc0JBQVUsVUFBVSxLQUFLO0FBQUEsVUFDM0I7QUFBQSxRQUNGO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFFQSxhQUFPLFVBQVUsR0FBRztBQUFBLElBQ3RCO0FBQUE7QUFBQTs7O0FDOUJBO0FBQUEsbURBQUFDLFNBQUE7QUFBQTtBQUFBO0FBU0EsSUFBQUEsUUFBTyxVQUFVLFNBQVMsS0FBSztBQUM3QixVQUFJLE9BQU8sUUFBUSxVQUFVO0FBQzNCLGVBQU8sTUFBTSxRQUFRO0FBQUEsTUFDdkI7QUFDQSxVQUFJLE9BQU8sUUFBUSxZQUFZLElBQUksS0FBSyxNQUFNLElBQUk7QUFDaEQsZUFBTyxPQUFPLFdBQVcsT0FBTyxTQUFTLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxHQUFHO0FBQUEsTUFDaEU7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUFBO0FBQUE7OztBQ2pCQTtBQUFBLHdEQUFBQyxTQUFBO0FBQUE7QUFBQTtBQVNBLFFBQU0sV0FBVztBQUVqQixRQUFNLGVBQWUsQ0FBQyxLQUFLLEtBQUssWUFBWTtBQUMxQyxVQUFJLFNBQVMsR0FBRyxNQUFNLE9BQU87QUFDM0IsY0FBTSxJQUFJLFVBQVUsMERBQTBEO0FBQUEsTUFDaEY7QUFFQSxVQUFJLFFBQVEsVUFBVSxRQUFRLEtBQUs7QUFDakMsZUFBTyxPQUFPLEdBQUc7QUFBQSxNQUNuQjtBQUVBLFVBQUksU0FBUyxHQUFHLE1BQU0sT0FBTztBQUMzQixjQUFNLElBQUksVUFBVSw0REFBNEQ7QUFBQSxNQUNsRjtBQUVBLFVBQUksT0FBTyxFQUFFLFlBQVksTUFBTSxHQUFHLFFBQVE7QUFDMUMsVUFBSSxPQUFPLEtBQUssZ0JBQWdCLFdBQVc7QUFDekMsYUFBSyxhQUFhLEtBQUssZ0JBQWdCO0FBQUEsTUFDekM7QUFFQSxVQUFJLFFBQVEsT0FBTyxLQUFLLFVBQVU7QUFDbEMsVUFBSSxZQUFZLE9BQU8sS0FBSyxTQUFTO0FBQ3JDLFVBQUksVUFBVSxPQUFPLEtBQUssT0FBTztBQUNqQyxVQUFJLE9BQU8sT0FBTyxLQUFLLElBQUk7QUFDM0IsVUFBSSxXQUFXLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxZQUFZLFVBQVU7QUFFckUsVUFBSSxhQUFhLE1BQU0sZUFBZSxRQUFRLEdBQUc7QUFDL0MsZUFBTyxhQUFhLE1BQU0sVUFBVTtBQUFBLE1BQ3RDO0FBRUEsVUFBSSxJQUFJLEtBQUssSUFBSSxLQUFLLEdBQUc7QUFDekIsVUFBSSxJQUFJLEtBQUssSUFBSSxLQUFLLEdBQUc7QUFFekIsVUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRztBQUN6QixZQUFJLFNBQVMsTUFBTSxNQUFNO0FBQ3pCLFlBQUksS0FBSyxTQUFTO0FBQ2hCLGlCQUFPLElBQUk7QUFBQSxRQUNiO0FBQ0EsWUFBSSxLQUFLLFNBQVMsT0FBTztBQUN2QixpQkFBTztBQUFBLFFBQ1Q7QUFDQSxlQUFPLE1BQU07QUFBQSxNQUNmO0FBRUEsVUFBSSxXQUFXLFdBQVcsR0FBRyxLQUFLLFdBQVcsR0FBRztBQUNoRCxVQUFJLFFBQVEsRUFBRSxLQUFLLEtBQUssR0FBRyxFQUFFO0FBQzdCLFVBQUksWUFBWSxDQUFDO0FBQ2pCLFVBQUksWUFBWSxDQUFDO0FBRWpCLFVBQUksVUFBVTtBQUNaLGNBQU0sV0FBVztBQUNqQixjQUFNLFNBQVMsT0FBTyxNQUFNLEdBQUcsRUFBRTtBQUFBLE1BQ25DO0FBRUEsVUFBSSxJQUFJLEdBQUc7QUFDVCxZQUFJLFNBQVMsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUk7QUFDbkMsb0JBQVksZ0JBQWdCLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxPQUFPLElBQUk7QUFDNUQsWUFBSSxNQUFNLElBQUk7QUFBQSxNQUNoQjtBQUVBLFVBQUksS0FBSyxHQUFHO0FBQ1Ysb0JBQVksZ0JBQWdCLEdBQUcsR0FBRyxPQUFPLElBQUk7QUFBQSxNQUMvQztBQUVBLFlBQU0sWUFBWTtBQUNsQixZQUFNLFlBQVk7QUFDbEIsWUFBTSxTQUFTLGdCQUFnQixXQUFXLFdBQVcsSUFBSTtBQUV6RCxVQUFJLEtBQUssWUFBWSxNQUFNO0FBQ3pCLGNBQU0sU0FBUyxJQUFJLE1BQU07QUFBQSxNQUMzQixXQUFXLEtBQUssU0FBUyxTQUFVLFVBQVUsU0FBUyxVQUFVLFNBQVUsR0FBRztBQUMzRSxjQUFNLFNBQVMsTUFBTSxNQUFNO0FBQUEsTUFDN0I7QUFFQSxtQkFBYSxNQUFNLFlBQVk7QUFDL0IsYUFBTyxNQUFNO0FBQUEsSUFDZjtBQUVBLGFBQVMsZ0JBQWdCLEtBQUssS0FBSyxTQUFTO0FBQzFDLFVBQUksZUFBZSxlQUFlLEtBQUssS0FBSyxLQUFLLE9BQU8sT0FBTyxLQUFLLENBQUM7QUFDckUsVUFBSSxlQUFlLGVBQWUsS0FBSyxLQUFLLElBQUksT0FBTyxPQUFPLEtBQUssQ0FBQztBQUNwRSxVQUFJLGNBQWMsZUFBZSxLQUFLLEtBQUssTUFBTSxNQUFNLE9BQU8sS0FBSyxDQUFDO0FBQ3BFLFVBQUksY0FBYyxhQUFhLE9BQU8sV0FBVyxFQUFFLE9BQU8sWUFBWTtBQUN0RSxhQUFPLFlBQVksS0FBSyxHQUFHO0FBQUEsSUFDN0I7QUFFQSxhQUFTLGNBQWMsS0FBSyxLQUFLO0FBQy9CLFVBQUksUUFBUTtBQUNaLFVBQUksUUFBUTtBQUVaLFVBQUksT0FBTyxXQUFXLEtBQUssS0FBSztBQUNoQyxVQUFJLFFBQVEsb0JBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUV6QixhQUFPLE9BQU8sUUFBUSxRQUFRLEtBQUs7QUFDakMsY0FBTSxJQUFJLElBQUk7QUFDZCxpQkFBUztBQUNULGVBQU8sV0FBVyxLQUFLLEtBQUs7QUFBQSxNQUM5QjtBQUVBLGFBQU8sV0FBVyxNQUFNLEdBQUcsS0FBSyxJQUFJO0FBRXBDLGFBQU8sTUFBTSxRQUFRLFFBQVEsS0FBSztBQUNoQyxjQUFNLElBQUksSUFBSTtBQUNkLGlCQUFTO0FBQ1QsZUFBTyxXQUFXLE1BQU0sR0FBRyxLQUFLLElBQUk7QUFBQSxNQUN0QztBQUVBLGNBQVEsQ0FBQyxHQUFHLEtBQUs7QUFDakIsWUFBTSxLQUFLLE9BQU87QUFDbEIsYUFBTztBQUFBLElBQ1Q7QUFTQSxhQUFTLGVBQWUsT0FBTyxNQUFNLFNBQVM7QUFDNUMsVUFBSSxVQUFVLE1BQU07QUFDbEIsZUFBTyxFQUFFLFNBQVMsT0FBTyxPQUFPLENBQUMsR0FBRyxRQUFRLEVBQUU7QUFBQSxNQUNoRDtBQUVBLFVBQUksU0FBUyxJQUFJLE9BQU8sSUFBSTtBQUM1QixVQUFJLFNBQVMsT0FBTztBQUNwQixVQUFJLFVBQVU7QUFDZCxVQUFJLFFBQVE7QUFFWixlQUFTLElBQUksR0FBRyxJQUFJLFFBQVEsS0FBSztBQUMvQixZQUFJLENBQUMsWUFBWSxTQUFTLElBQUksT0FBTztBQUVyQyxZQUFJLGVBQWUsV0FBVztBQUM1QixxQkFBVztBQUFBLFFBRWIsV0FBVyxlQUFlLE9BQU8sY0FBYyxLQUFLO0FBQ2xELHFCQUFXLGlCQUFpQixZQUFZLFdBQVcsT0FBTztBQUFBLFFBRTVELE9BQU87QUFDTDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsVUFBSSxPQUFPO0FBQ1QsbUJBQVcsUUFBUSxjQUFjLE9BQU8sUUFBUTtBQUFBLE1BQ2xEO0FBRUEsYUFBTyxFQUFFLFNBQVMsT0FBTyxDQUFDLEtBQUssR0FBRyxPQUFPO0FBQUEsSUFDM0M7QUFFQSxhQUFTLGdCQUFnQixLQUFLLEtBQUssS0FBSyxTQUFTO0FBQy9DLFVBQUksU0FBUyxjQUFjLEtBQUssR0FBRztBQUNuQyxVQUFJLFNBQVMsQ0FBQztBQUNkLFVBQUksUUFBUTtBQUNaLFVBQUk7QUFFSixlQUFTLElBQUksR0FBRyxJQUFJLE9BQU8sUUFBUSxLQUFLO0FBQ3RDLFlBQUlDLE9BQU0sT0FBTztBQUNqQixZQUFJLE1BQU0sZUFBZSxPQUFPLEtBQUssR0FBRyxPQUFPQSxJQUFHLEdBQUcsT0FBTztBQUM1RCxZQUFJLFFBQVE7QUFFWixZQUFJLENBQUMsSUFBSSxZQUFZLFFBQVEsS0FBSyxZQUFZLElBQUksU0FBUztBQUN6RCxjQUFJLEtBQUssTUFBTSxTQUFTLEdBQUc7QUFDekIsaUJBQUssTUFBTSxJQUFJO0FBQUEsVUFDakI7QUFFQSxlQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRTtBQUM1QixlQUFLLFNBQVMsS0FBSyxVQUFVLGFBQWEsS0FBSyxLQUFLO0FBQ3BELGtCQUFRQSxPQUFNO0FBQ2Q7QUFBQSxRQUNGO0FBRUEsWUFBSSxJQUFJLFVBQVU7QUFDaEIsa0JBQVEsU0FBU0EsTUFBSyxLQUFLLE9BQU87QUFBQSxRQUNwQztBQUVBLFlBQUksU0FBUyxRQUFRLElBQUksVUFBVSxhQUFhLElBQUksS0FBSztBQUN6RCxlQUFPLEtBQUssR0FBRztBQUNmLGdCQUFRQSxPQUFNO0FBQ2QsZUFBTztBQUFBLE1BQ1Q7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQUVBLGFBQVMsZUFBZSxLQUFLLFlBQVksUUFBUSxjQUFjLFNBQVM7QUFDdEUsVUFBSSxTQUFTLENBQUM7QUFFZCxlQUFTLE9BQU8sS0FBSztBQUNuQixZQUFJLEVBQUUsT0FBTyxJQUFJO0FBR2pCLFlBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLFlBQVksVUFBVSxNQUFNLEdBQUc7QUFDNUQsaUJBQU8sS0FBSyxTQUFTLE1BQU07QUFBQSxRQUM3QjtBQUdBLFlBQUksZ0JBQWdCLFNBQVMsWUFBWSxVQUFVLE1BQU0sR0FBRztBQUMxRCxpQkFBTyxLQUFLLFNBQVMsTUFBTTtBQUFBLFFBQzdCO0FBQUEsTUFDRjtBQUNBLGFBQU87QUFBQSxJQUNUO0FBTUEsYUFBUyxJQUFJLEdBQUcsR0FBRztBQUNqQixVQUFJLE1BQU0sQ0FBQztBQUNYLGVBQVMsSUFBSSxHQUFHLElBQUksRUFBRSxRQUFRO0FBQUssWUFBSSxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ3hELGFBQU87QUFBQSxJQUNUO0FBRUEsYUFBUyxRQUFRLEdBQUcsR0FBRztBQUNyQixhQUFPLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxLQUFLO0FBQUEsSUFDbEM7QUFFQSxhQUFTLFNBQVMsS0FBSyxLQUFLLEtBQUs7QUFDL0IsYUFBTyxJQUFJLEtBQUssU0FBTyxJQUFJLFNBQVMsR0FBRztBQUFBLElBQ3pDO0FBRUEsYUFBUyxXQUFXLEtBQUssS0FBSztBQUM1QixhQUFPLE9BQU8sT0FBTyxHQUFHLEVBQUUsTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJLElBQUksT0FBTyxHQUFHLENBQUM7QUFBQSxJQUM1RDtBQUVBLGFBQVMsV0FBVyxTQUFTLE9BQU87QUFDbEMsYUFBTyxVQUFXLFVBQVUsS0FBSyxJQUFJLElBQUksS0FBSztBQUFBLElBQ2hEO0FBRUEsYUFBUyxhQUFhLFFBQVE7QUFDNUIsVUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLEVBQUUsSUFBSTtBQUM3QixVQUFJLFFBQVEsUUFBUSxHQUFHO0FBQ3JCLGVBQU8sSUFBSSxTQUFTLE9BQU8sTUFBTSxPQUFPO0FBQUEsTUFDMUM7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUVBLGFBQVMsaUJBQWlCLEdBQUcsR0FBRyxTQUFTO0FBQ3ZDLGFBQU8sSUFBSSxJQUFLLElBQUksTUFBTSxJQUFLLEtBQUssTUFBTTtBQUFBLElBQzVDO0FBRUEsYUFBUyxXQUFXLEtBQUs7QUFDdkIsYUFBTyxZQUFZLEtBQUssR0FBRztBQUFBLElBQzdCO0FBRUEsYUFBUyxTQUFTLE9BQU8sS0FBSyxTQUFTO0FBQ3JDLFVBQUksQ0FBQyxJQUFJLFVBQVU7QUFDakIsZUFBTztBQUFBLE1BQ1Q7QUFFQSxVQUFJLE9BQU8sS0FBSyxJQUFJLElBQUksU0FBUyxPQUFPLEtBQUssRUFBRSxNQUFNO0FBQ3JELFVBQUksUUFBUSxRQUFRLGVBQWU7QUFFbkMsY0FBUTtBQUFBLGFBQ0Q7QUFDSCxpQkFBTztBQUFBLGFBQ0o7QUFDSCxpQkFBTyxRQUFRLE9BQU87QUFBQSxhQUNuQjtBQUNILGlCQUFPLFFBQVEsV0FBVztBQUFBLGlCQUNuQjtBQUNQLGlCQUFPLFFBQVEsT0FBTyxVQUFVLEtBQUs7QUFBQSxRQUN2QztBQUFBO0FBQUEsSUFFSjtBQU1BLGlCQUFhLFFBQVEsQ0FBQztBQUN0QixpQkFBYSxhQUFhLE1BQU8sYUFBYSxRQUFRLENBQUM7QUFNdkQsSUFBQUQsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDL1JqQjtBQUFBLG9EQUFBRSxTQUFBO0FBQUE7QUFBQTtBQVNBLFFBQU0sT0FBTyxRQUFRO0FBQ3JCLFFBQU0sZUFBZTtBQUVyQixRQUFNLFdBQVcsU0FBTyxRQUFRLFFBQVEsT0FBTyxRQUFRLFlBQVksQ0FBQyxNQUFNLFFBQVEsR0FBRztBQUVyRixRQUFNLFlBQVksY0FBWTtBQUM1QixhQUFPLFdBQVMsYUFBYSxPQUFPLE9BQU8sS0FBSyxJQUFJLE9BQU8sS0FBSztBQUFBLElBQ2xFO0FBRUEsUUFBTSxlQUFlLFdBQVM7QUFDNUIsYUFBTyxPQUFPLFVBQVUsWUFBYSxPQUFPLFVBQVUsWUFBWSxVQUFVO0FBQUEsSUFDOUU7QUFFQSxRQUFNLFdBQVcsU0FBTyxPQUFPLFVBQVUsQ0FBQyxHQUFHO0FBRTdDLFFBQU0sUUFBUSxXQUFTO0FBQ3JCLFVBQUksUUFBUSxHQUFHO0FBQ2YsVUFBSSxRQUFRO0FBQ1osVUFBSSxNQUFNLE9BQU87QUFBSyxnQkFBUSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxVQUFJLFVBQVU7QUFBSyxlQUFPO0FBQzFCLGFBQU8sTUFBTSxFQUFFLFdBQVc7QUFBSTtBQUM5QixhQUFPLFFBQVE7QUFBQSxJQUNqQjtBQUVBLFFBQU0sWUFBWSxDQUFDLE9BQU8sS0FBSyxZQUFZO0FBQ3pDLFVBQUksT0FBTyxVQUFVLFlBQVksT0FBTyxRQUFRLFVBQVU7QUFDeEQsZUFBTztBQUFBLE1BQ1Q7QUFDQSxhQUFPLFFBQVEsY0FBYztBQUFBLElBQy9CO0FBRUEsUUFBTSxNQUFNLENBQUMsT0FBTyxXQUFXLGFBQWE7QUFDMUMsVUFBSSxZQUFZLEdBQUc7QUFDakIsWUFBSSxPQUFPLE1BQU0sT0FBTyxNQUFNLE1BQU07QUFDcEMsWUFBSTtBQUFNLGtCQUFRLE1BQU0sTUFBTSxDQUFDO0FBQy9CLGdCQUFTLE9BQU8sTUFBTSxTQUFTLE9BQU8sWUFBWSxJQUFJLFdBQVcsR0FBRztBQUFBLE1BQ3RFO0FBQ0EsVUFBSSxhQUFhLE9BQU87QUFDdEIsZUFBTyxPQUFPLEtBQUs7QUFBQSxNQUNyQjtBQUNBLGFBQU87QUFBQSxJQUNUO0FBRUEsUUFBTSxXQUFXLENBQUMsT0FBTyxjQUFjO0FBQ3JDLFVBQUksV0FBVyxNQUFNLE9BQU8sTUFBTSxNQUFNO0FBQ3hDLFVBQUksVUFBVTtBQUNaLGdCQUFRLE1BQU0sTUFBTSxDQUFDO0FBQ3JCO0FBQUEsTUFDRjtBQUNBLGFBQU8sTUFBTSxTQUFTO0FBQVcsZ0JBQVEsTUFBTTtBQUMvQyxhQUFPLFdBQVksTUFBTSxRQUFTO0FBQUEsSUFDcEM7QUFFQSxRQUFNLGFBQWEsQ0FBQyxPQUFPLFlBQVk7QUFDckMsWUFBTSxVQUFVLEtBQUssQ0FBQyxHQUFHLE1BQU0sSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQztBQUN6RCxZQUFNLFVBQVUsS0FBSyxDQUFDLEdBQUcsTUFBTSxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDO0FBRXpELFVBQUksU0FBUyxRQUFRLFVBQVUsS0FBSztBQUNwQyxVQUFJLFlBQVk7QUFDaEIsVUFBSSxZQUFZO0FBQ2hCLFVBQUk7QUFFSixVQUFJLE1BQU0sVUFBVSxRQUFRO0FBQzFCLG9CQUFZLE1BQU0sVUFBVSxLQUFLLEdBQUc7QUFBQSxNQUN0QztBQUVBLFVBQUksTUFBTSxVQUFVLFFBQVE7QUFDMUIsb0JBQVksS0FBSyxTQUFTLE1BQU0sVUFBVSxLQUFLLEdBQUc7QUFBQSxNQUNwRDtBQUVBLFVBQUksYUFBYSxXQUFXO0FBQzFCLGlCQUFTLEdBQUcsYUFBYTtBQUFBLE1BQzNCLE9BQU87QUFDTCxpQkFBUyxhQUFhO0FBQUEsTUFDeEI7QUFFQSxVQUFJLFFBQVEsTUFBTTtBQUNoQixlQUFPLElBQUksU0FBUztBQUFBLE1BQ3RCO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFNLFVBQVUsQ0FBQyxHQUFHLEdBQUcsV0FBVyxZQUFZO0FBQzVDLFVBQUksV0FBVztBQUNiLGVBQU8sYUFBYSxHQUFHLEdBQUcsRUFBRSxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUM7QUFBQSxNQUN2RDtBQUVBLFVBQUksUUFBUSxPQUFPLGFBQWEsQ0FBQztBQUNqQyxVQUFJLE1BQU07QUFBRyxlQUFPO0FBRXBCLFVBQUksT0FBTyxPQUFPLGFBQWEsQ0FBQztBQUNoQyxhQUFPLElBQUksU0FBUztBQUFBLElBQ3RCO0FBRUEsUUFBTSxVQUFVLENBQUMsT0FBTyxLQUFLLFlBQVk7QUFDdkMsVUFBSSxNQUFNLFFBQVEsS0FBSyxHQUFHO0FBQ3hCLFlBQUksT0FBTyxRQUFRLFNBQVM7QUFDNUIsWUFBSSxTQUFTLFFBQVEsVUFBVSxLQUFLO0FBQ3BDLGVBQU8sT0FBTyxJQUFJLFNBQVMsTUFBTSxLQUFLLEdBQUcsT0FBTyxNQUFNLEtBQUssR0FBRztBQUFBLE1BQ2hFO0FBQ0EsYUFBTyxhQUFhLE9BQU8sS0FBSyxPQUFPO0FBQUEsSUFDekM7QUFFQSxRQUFNLGFBQWEsSUFBSSxTQUFTO0FBQzlCLGFBQU8sSUFBSSxXQUFXLDhCQUE4QixLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFBQSxJQUMzRTtBQUVBLFFBQU0sZUFBZSxDQUFDLE9BQU8sS0FBSyxZQUFZO0FBQzVDLFVBQUksUUFBUSxpQkFBaUI7QUFBTSxjQUFNLFdBQVcsQ0FBQyxPQUFPLEdBQUcsQ0FBQztBQUNoRSxhQUFPLENBQUM7QUFBQSxJQUNWO0FBRUEsUUFBTSxjQUFjLENBQUMsTUFBTSxZQUFZO0FBQ3JDLFVBQUksUUFBUSxpQkFBaUIsTUFBTTtBQUNqQyxjQUFNLElBQUksVUFBVSxrQkFBa0Isc0JBQXNCO0FBQUEsTUFDOUQ7QUFDQSxhQUFPLENBQUM7QUFBQSxJQUNWO0FBRUEsUUFBTSxjQUFjLENBQUMsT0FBTyxLQUFLLE9BQU8sR0FBRyxVQUFVLENBQUMsTUFBTTtBQUMxRCxVQUFJLElBQUksT0FBTyxLQUFLO0FBQ3BCLFVBQUksSUFBSSxPQUFPLEdBQUc7QUFFbEIsVUFBSSxDQUFDLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLFVBQVUsQ0FBQyxHQUFHO0FBQ2hELFlBQUksUUFBUSxpQkFBaUI7QUFBTSxnQkFBTSxXQUFXLENBQUMsT0FBTyxHQUFHLENBQUM7QUFDaEUsZUFBTyxDQUFDO0FBQUEsTUFDVjtBQUdBLFVBQUksTUFBTTtBQUFHLFlBQUk7QUFDakIsVUFBSSxNQUFNO0FBQUcsWUFBSTtBQUVqQixVQUFJLGFBQWEsSUFBSTtBQUNyQixVQUFJLGNBQWMsT0FBTyxLQUFLO0FBQzlCLFVBQUksWUFBWSxPQUFPLEdBQUc7QUFDMUIsVUFBSSxhQUFhLE9BQU8sSUFBSTtBQUM1QixhQUFPLEtBQUssSUFBSSxLQUFLLElBQUksSUFBSSxHQUFHLENBQUM7QUFFakMsVUFBSSxTQUFTLE1BQU0sV0FBVyxLQUFLLE1BQU0sU0FBUyxLQUFLLE1BQU0sVUFBVTtBQUN2RSxVQUFJLFNBQVMsU0FBUyxLQUFLLElBQUksWUFBWSxRQUFRLFVBQVUsUUFBUSxXQUFXLE1BQU0sSUFBSTtBQUMxRixVQUFJLFdBQVcsV0FBVyxTQUFTLFVBQVUsT0FBTyxLQUFLLE9BQU8sTUFBTTtBQUN0RSxVQUFJLFNBQVMsUUFBUSxhQUFhLFVBQVUsUUFBUTtBQUVwRCxVQUFJLFFBQVEsV0FBVyxTQUFTLEdBQUc7QUFDakMsZUFBTyxRQUFRLFNBQVMsT0FBTyxNQUFNLEdBQUcsU0FBUyxLQUFLLE1BQU0sR0FBRyxNQUFNLE9BQU87QUFBQSxNQUM5RTtBQUVBLFVBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxFQUFFO0FBQzNDLFVBQUksT0FBTyxTQUFPLE1BQU0sTUFBTSxJQUFJLGNBQWMsYUFBYSxLQUFLLEtBQUssSUFBSSxHQUFHLENBQUM7QUFDL0UsVUFBSSxRQUFRLENBQUM7QUFDYixVQUFJLFFBQVE7QUFFWixhQUFPLGFBQWEsS0FBSyxJQUFJLEtBQUssR0FBRztBQUNuQyxZQUFJLFFBQVEsWUFBWSxRQUFRLE9BQU8sR0FBRztBQUN4QyxlQUFLLENBQUM7QUFBQSxRQUNSLE9BQU87QUFDTCxnQkFBTSxLQUFLLElBQUksT0FBTyxHQUFHLEtBQUssR0FBRyxRQUFRLFFBQVEsQ0FBQztBQUFBLFFBQ3BEO0FBQ0EsWUFBSSxhQUFhLElBQUksT0FBTyxJQUFJO0FBQ2hDO0FBQUEsTUFDRjtBQUVBLFVBQUksUUFBUSxZQUFZLE1BQU07QUFDNUIsZUFBTyxPQUFPLElBQ1YsV0FBVyxPQUFPLE9BQU8sSUFDekIsUUFBUSxPQUFPLE1BQU0sRUFBRSxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUM7QUFBQSxNQUN0RDtBQUVBLGFBQU87QUFBQSxJQUNUO0FBRUEsUUFBTSxjQUFjLENBQUMsT0FBTyxLQUFLLE9BQU8sR0FBRyxVQUFVLENBQUMsTUFBTTtBQUMxRCxVQUFLLENBQUMsU0FBUyxLQUFLLEtBQUssTUFBTSxTQUFTLEtBQU8sQ0FBQyxTQUFTLEdBQUcsS0FBSyxJQUFJLFNBQVMsR0FBSTtBQUNoRixlQUFPLGFBQWEsT0FBTyxLQUFLLE9BQU87QUFBQSxNQUN6QztBQUdBLFVBQUksU0FBUyxRQUFRLGNBQWMsU0FBTyxPQUFPLGFBQWEsR0FBRztBQUNqRSxVQUFJLElBQUksR0FBRyxRQUFRLFdBQVcsQ0FBQztBQUMvQixVQUFJLElBQUksR0FBRyxNQUFNLFdBQVcsQ0FBQztBQUU3QixVQUFJLGFBQWEsSUFBSTtBQUNyQixVQUFJLE1BQU0sS0FBSyxJQUFJLEdBQUcsQ0FBQztBQUN2QixVQUFJLE1BQU0sS0FBSyxJQUFJLEdBQUcsQ0FBQztBQUV2QixVQUFJLFFBQVEsV0FBVyxTQUFTLEdBQUc7QUFDakMsZUFBTyxRQUFRLEtBQUssS0FBSyxPQUFPLE9BQU87QUFBQSxNQUN6QztBQUVBLFVBQUksUUFBUSxDQUFDO0FBQ2IsVUFBSSxRQUFRO0FBRVosYUFBTyxhQUFhLEtBQUssSUFBSSxLQUFLLEdBQUc7QUFDbkMsY0FBTSxLQUFLLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDM0IsWUFBSSxhQUFhLElBQUksT0FBTyxJQUFJO0FBQ2hDO0FBQUEsTUFDRjtBQUVBLFVBQUksUUFBUSxZQUFZLE1BQU07QUFDNUIsZUFBTyxRQUFRLE9BQU8sTUFBTSxFQUFFLE1BQU0sT0FBTyxRQUFRLENBQUM7QUFBQSxNQUN0RDtBQUVBLGFBQU87QUFBQSxJQUNUO0FBRUEsUUFBTSxPQUFPLENBQUMsT0FBTyxLQUFLLE1BQU0sVUFBVSxDQUFDLE1BQU07QUFDL0MsVUFBSSxPQUFPLFFBQVEsYUFBYSxLQUFLLEdBQUc7QUFDdEMsZUFBTyxDQUFDLEtBQUs7QUFBQSxNQUNmO0FBRUEsVUFBSSxDQUFDLGFBQWEsS0FBSyxLQUFLLENBQUMsYUFBYSxHQUFHLEdBQUc7QUFDOUMsZUFBTyxhQUFhLE9BQU8sS0FBSyxPQUFPO0FBQUEsTUFDekM7QUFFQSxVQUFJLE9BQU8sU0FBUyxZQUFZO0FBQzlCLGVBQU8sS0FBSyxPQUFPLEtBQUssR0FBRyxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQUEsTUFDaEQ7QUFFQSxVQUFJLFNBQVMsSUFBSSxHQUFHO0FBQ2xCLGVBQU8sS0FBSyxPQUFPLEtBQUssR0FBRyxJQUFJO0FBQUEsTUFDakM7QUFFQSxVQUFJLE9BQU8sRUFBRSxHQUFHLFFBQVE7QUFDeEIsVUFBSSxLQUFLLFlBQVk7QUFBTSxhQUFLLE9BQU87QUFDdkMsYUFBTyxRQUFRLEtBQUssUUFBUTtBQUU1QixVQUFJLENBQUMsU0FBUyxJQUFJLEdBQUc7QUFDbkIsWUFBSSxRQUFRLFFBQVEsQ0FBQyxTQUFTLElBQUk7QUFBRyxpQkFBTyxZQUFZLE1BQU0sSUFBSTtBQUNsRSxlQUFPLEtBQUssT0FBTyxLQUFLLEdBQUcsSUFBSTtBQUFBLE1BQ2pDO0FBRUEsVUFBSSxTQUFTLEtBQUssS0FBSyxTQUFTLEdBQUcsR0FBRztBQUNwQyxlQUFPLFlBQVksT0FBTyxLQUFLLE1BQU0sSUFBSTtBQUFBLE1BQzNDO0FBRUEsYUFBTyxZQUFZLE9BQU8sS0FBSyxLQUFLLElBQUksS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSTtBQUFBLElBQ2xFO0FBRUEsSUFBQUEsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDeFBqQjtBQUFBLHNEQUFBQyxTQUFBO0FBQUE7QUFBQTtBQUVBLFFBQU0sT0FBTztBQUNiLFFBQU0sUUFBUTtBQUVkLFFBQU0sVUFBVSxDQUFDLEtBQUssVUFBVSxDQUFDLE1BQU07QUFDckMsVUFBSSxPQUFPLENBQUMsTUFBTSxTQUFTLENBQUMsTUFBTTtBQUNoQyxZQUFJLGVBQWUsTUFBTSxlQUFlLE1BQU07QUFDOUMsWUFBSSxjQUFjLEtBQUssWUFBWSxRQUFRLFFBQVEsa0JBQWtCO0FBQ3JFLFlBQUksVUFBVSxpQkFBaUIsUUFBUSxnQkFBZ0I7QUFDdkQsWUFBSSxTQUFTLFFBQVEsa0JBQWtCLE9BQU8sT0FBTztBQUNyRCxZQUFJLFNBQVM7QUFFYixZQUFJLEtBQUssV0FBVyxNQUFNO0FBQ3hCLGlCQUFPLFNBQVMsS0FBSztBQUFBLFFBQ3ZCO0FBQ0EsWUFBSSxLQUFLLFlBQVksTUFBTTtBQUN6QixpQkFBTyxTQUFTLEtBQUs7QUFBQSxRQUN2QjtBQUVBLFlBQUksS0FBSyxTQUFTLFFBQVE7QUFDeEIsaUJBQU8sVUFBVyxTQUFTLEtBQUssUUFBUztBQUFBLFFBQzNDO0FBRUEsWUFBSSxLQUFLLFNBQVMsU0FBUztBQUN6QixpQkFBTyxVQUFXLFNBQVMsS0FBSyxRQUFTO0FBQUEsUUFDM0M7QUFFQSxZQUFJLEtBQUssU0FBUyxTQUFTO0FBQ3pCLGlCQUFPLEtBQUssS0FBSyxTQUFTLFVBQVUsS0FBTSxVQUFVLEtBQUssUUFBUTtBQUFBLFFBQ25FO0FBRUEsWUFBSSxLQUFLLE9BQU87QUFDZCxpQkFBTyxLQUFLO0FBQUEsUUFDZDtBQUVBLFlBQUksS0FBSyxTQUFTLEtBQUssU0FBUyxHQUFHO0FBQ2pDLGNBQUksT0FBTyxNQUFNLE9BQU8sS0FBSyxLQUFLO0FBQ2xDLGNBQUksUUFBUSxLQUFLLEdBQUcsTUFBTSxFQUFFLEdBQUcsU0FBUyxNQUFNLE9BQU8sU0FBUyxLQUFLLENBQUM7QUFFcEUsY0FBSSxNQUFNLFdBQVcsR0FBRztBQUN0QixtQkFBTyxLQUFLLFNBQVMsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLFdBQVc7QUFBQSxVQUM5RDtBQUFBLFFBQ0Y7QUFFQSxZQUFJLEtBQUssT0FBTztBQUNkLG1CQUFTLFNBQVMsS0FBSyxPQUFPO0FBQzVCLHNCQUFVLEtBQUssT0FBTyxJQUFJO0FBQUEsVUFDNUI7QUFBQSxRQUNGO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFFQSxhQUFPLEtBQUssR0FBRztBQUFBLElBQ2pCO0FBRUEsSUFBQUEsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDeERqQjtBQUFBLHFEQUFBQyxTQUFBO0FBQUE7QUFBQTtBQUVBLFFBQU0sT0FBTztBQUNiLFFBQU0sWUFBWTtBQUNsQixRQUFNLFFBQVE7QUFFZCxRQUFNLFNBQVMsQ0FBQyxRQUFRLElBQUksUUFBUSxJQUFJLFVBQVUsVUFBVTtBQUMxRCxVQUFJLFNBQVMsQ0FBQztBQUVkLGNBQVEsQ0FBQyxFQUFFLE9BQU8sS0FBSztBQUN2QixjQUFRLENBQUMsRUFBRSxPQUFPLEtBQUs7QUFFdkIsVUFBSSxDQUFDLE1BQU07QUFBUSxlQUFPO0FBQzFCLFVBQUksQ0FBQyxNQUFNLFFBQVE7QUFDakIsZUFBTyxVQUFVLE1BQU0sUUFBUSxLQUFLLEVBQUUsSUFBSSxTQUFPLElBQUksTUFBTSxJQUFJO0FBQUEsTUFDakU7QUFFQSxlQUFTLFFBQVEsT0FBTztBQUN0QixZQUFJLE1BQU0sUUFBUSxJQUFJLEdBQUc7QUFDdkIsbUJBQVMsU0FBUyxNQUFNO0FBQ3RCLG1CQUFPLEtBQUssT0FBTyxPQUFPLE9BQU8sT0FBTyxDQUFDO0FBQUEsVUFDM0M7QUFBQSxRQUNGLE9BQU87QUFDTCxtQkFBUyxPQUFPLE9BQU87QUFDckIsZ0JBQUksWUFBWSxRQUFRLE9BQU8sUUFBUTtBQUFVLG9CQUFNLElBQUk7QUFDM0QsbUJBQU8sS0FBSyxNQUFNLFFBQVEsR0FBRyxJQUFJLE9BQU8sTUFBTSxLQUFLLE9BQU8sSUFBSyxPQUFPLEdBQUk7QUFBQSxVQUM1RTtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQ0EsYUFBTyxNQUFNLFFBQVEsTUFBTTtBQUFBLElBQzdCO0FBRUEsUUFBTSxTQUFTLENBQUMsS0FBSyxVQUFVLENBQUMsTUFBTTtBQUNwQyxVQUFJLGFBQWEsUUFBUSxlQUFlLFNBQVMsTUFBTyxRQUFRO0FBRWhFLFVBQUksT0FBTyxDQUFDLE1BQU0sU0FBUyxDQUFDLE1BQU07QUFDaEMsYUFBSyxRQUFRLENBQUM7QUFFZCxZQUFJLElBQUk7QUFDUixZQUFJLElBQUksT0FBTztBQUVmLGVBQU8sRUFBRSxTQUFTLFdBQVcsRUFBRSxTQUFTLFVBQVUsRUFBRSxRQUFRO0FBQzFELGNBQUksRUFBRTtBQUNOLGNBQUksRUFBRTtBQUFBLFFBQ1I7QUFFQSxZQUFJLEtBQUssV0FBVyxLQUFLLFFBQVE7QUFDL0IsWUFBRSxLQUFLLE9BQU8sRUFBRSxJQUFJLEdBQUcsVUFBVSxNQUFNLE9BQU8sQ0FBQyxDQUFDO0FBQ2hEO0FBQUEsUUFDRjtBQUVBLFlBQUksS0FBSyxTQUFTLFdBQVcsS0FBSyxZQUFZLFFBQVEsS0FBSyxNQUFNLFdBQVcsR0FBRztBQUM3RSxZQUFFLEtBQUssT0FBTyxFQUFFLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlCO0FBQUEsUUFDRjtBQUVBLFlBQUksS0FBSyxTQUFTLEtBQUssU0FBUyxHQUFHO0FBQ2pDLGNBQUksT0FBTyxNQUFNLE9BQU8sS0FBSyxLQUFLO0FBRWxDLGNBQUksTUFBTSxhQUFhLEdBQUcsTUFBTSxRQUFRLE1BQU0sVUFBVSxHQUFHO0FBQ3pELGtCQUFNLElBQUksV0FBVyxxR0FBcUc7QUFBQSxVQUM1SDtBQUVBLGNBQUksUUFBUSxLQUFLLEdBQUcsTUFBTSxPQUFPO0FBQ2pDLGNBQUksTUFBTSxXQUFXLEdBQUc7QUFDdEIsb0JBQVEsVUFBVSxNQUFNLE9BQU87QUFBQSxVQUNqQztBQUVBLFlBQUUsS0FBSyxPQUFPLEVBQUUsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUM3QixlQUFLLFFBQVEsQ0FBQztBQUNkO0FBQUEsUUFDRjtBQUVBLFlBQUksVUFBVSxNQUFNLGFBQWEsSUFBSTtBQUNyQyxZQUFJLFFBQVEsS0FBSztBQUNqQixZQUFJLFFBQVE7QUFFWixlQUFPLE1BQU0sU0FBUyxXQUFXLE1BQU0sU0FBUyxVQUFVLE1BQU0sUUFBUTtBQUN0RSxrQkFBUSxNQUFNO0FBQ2Qsa0JBQVEsTUFBTTtBQUFBLFFBQ2hCO0FBRUEsaUJBQVMsSUFBSSxHQUFHLElBQUksS0FBSyxNQUFNLFFBQVEsS0FBSztBQUMxQyxjQUFJLFFBQVEsS0FBSyxNQUFNO0FBRXZCLGNBQUksTUFBTSxTQUFTLFdBQVcsS0FBSyxTQUFTLFNBQVM7QUFDbkQsZ0JBQUksTUFBTTtBQUFHLG9CQUFNLEtBQUssRUFBRTtBQUMxQixrQkFBTSxLQUFLLEVBQUU7QUFDYjtBQUFBLFVBQ0Y7QUFFQSxjQUFJLE1BQU0sU0FBUyxTQUFTO0FBQzFCLGNBQUUsS0FBSyxPQUFPLEVBQUUsSUFBSSxHQUFHLE9BQU8sT0FBTyxDQUFDO0FBQ3RDO0FBQUEsVUFDRjtBQUVBLGNBQUksTUFBTSxTQUFTLE1BQU0sU0FBUyxRQUFRO0FBQ3hDLGtCQUFNLEtBQUssT0FBTyxNQUFNLElBQUksR0FBRyxNQUFNLEtBQUssQ0FBQztBQUMzQztBQUFBLFVBQ0Y7QUFFQSxjQUFJLE1BQU0sT0FBTztBQUNmLGlCQUFLLE9BQU8sSUFBSTtBQUFBLFVBQ2xCO0FBQUEsUUFDRjtBQUVBLGVBQU87QUFBQSxNQUNUO0FBRUEsYUFBTyxNQUFNLFFBQVEsS0FBSyxHQUFHLENBQUM7QUFBQSxJQUNoQztBQUVBLElBQUFBLFFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQ2hIakI7QUFBQSx3REFBQUMsU0FBQTtBQUFBO0FBQUE7QUFFQSxJQUFBQSxRQUFPLFVBQVU7QUFBQSxNQUNmLFlBQVksT0FBTztBQUFBLE1BR25CLFFBQVE7QUFBQSxNQUNSLFFBQVE7QUFBQSxNQUdSLGtCQUFrQjtBQUFBLE1BQ2xCLGtCQUFrQjtBQUFBLE1BQ2xCLGtCQUFrQjtBQUFBLE1BQ2xCLGtCQUFrQjtBQUFBLE1BRWxCLHVCQUF1QjtBQUFBLE1BQ3ZCLHdCQUF3QjtBQUFBLE1BRXhCLGVBQWU7QUFBQSxNQUdmLGdCQUFnQjtBQUFBLE1BQ2hCLFNBQVM7QUFBQSxNQUNULGdCQUFnQjtBQUFBLE1BQ2hCLGVBQWU7QUFBQSxNQUNmLHNCQUFzQjtBQUFBLE1BQ3RCLHdCQUF3QjtBQUFBLE1BQ3hCLFlBQVk7QUFBQSxNQUNaLFlBQVk7QUFBQSxNQUNaLGFBQWE7QUFBQSxNQUNiLFVBQVU7QUFBQSxNQUNWLG1CQUFtQjtBQUFBLE1BQ25CLFlBQVk7QUFBQSxNQUNaLHVCQUF1QjtBQUFBLE1BQ3ZCLGdCQUFnQjtBQUFBLE1BQ2hCLG9CQUFvQjtBQUFBLE1BQ3BCLFdBQVc7QUFBQSxNQUNYLG1CQUFtQjtBQUFBLE1BQ25CLHlCQUF5QjtBQUFBLE1BQ3pCLHVCQUF1QjtBQUFBLE1BQ3ZCLDBCQUEwQjtBQUFBLE1BQzFCLGdCQUFnQjtBQUFBLE1BQ2hCLHFCQUFxQjtBQUFBLE1BQ3JCLGNBQWM7QUFBQSxNQUNkLFdBQVc7QUFBQSxNQUNYLG9CQUFvQjtBQUFBLE1BQ3BCLDBCQUEwQjtBQUFBLE1BQzFCLHdCQUF3QjtBQUFBLE1BQ3hCLDJCQUEyQjtBQUFBLE1BQzNCLGdCQUFnQjtBQUFBLE1BQ2hCLG1CQUFtQjtBQUFBLE1BQ25CLFlBQVk7QUFBQSxNQUNaLFVBQVU7QUFBQSxNQUNWLGlCQUFpQjtBQUFBLE1BQ2pCLG9CQUFvQjtBQUFBLE1BQ3BCLCtCQUErQjtBQUFBLElBQ2pDO0FBQUE7QUFBQTs7O0FDeERBO0FBQUEsb0RBQUFDLFNBQUE7QUFBQTtBQUFBO0FBRUEsUUFBTSxZQUFZO0FBTWxCLFFBQU07QUFBQSxNQUNKO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLElBQUk7QUFNSixRQUFNLFFBQVEsQ0FBQyxPQUFPLFVBQVUsQ0FBQyxNQUFNO0FBQ3JDLFVBQUksT0FBTyxVQUFVLFVBQVU7QUFDN0IsY0FBTSxJQUFJLFVBQVUsbUJBQW1CO0FBQUEsTUFDekM7QUFFQSxVQUFJLE9BQU8sV0FBVyxDQUFDO0FBQ3ZCLFVBQUksTUFBTSxPQUFPLEtBQUssY0FBYyxXQUFXLEtBQUssSUFBSSxZQUFZLEtBQUssU0FBUyxJQUFJO0FBQ3RGLFVBQUksTUFBTSxTQUFTLEtBQUs7QUFDdEIsY0FBTSxJQUFJLFlBQVksaUJBQWlCLE1BQU0sb0NBQW9DLE1BQU07QUFBQSxNQUN6RjtBQUVBLFVBQUksTUFBTSxFQUFFLE1BQU0sUUFBUSxPQUFPLE9BQU8sQ0FBQyxFQUFFO0FBQzNDLFVBQUksUUFBUSxDQUFDLEdBQUc7QUFDaEIsVUFBSSxRQUFRO0FBQ1osVUFBSSxPQUFPO0FBQ1gsVUFBSSxXQUFXO0FBQ2YsVUFBSSxTQUFTLE1BQU07QUFDbkIsVUFBSSxRQUFRO0FBQ1osVUFBSSxRQUFRO0FBQ1osVUFBSTtBQUNKLFVBQUksT0FBTyxDQUFDO0FBTVosWUFBTSxVQUFVLE1BQU0sTUFBTTtBQUM1QixZQUFNLE9BQU8sVUFBUTtBQUNuQixZQUFJLEtBQUssU0FBUyxVQUFVLEtBQUssU0FBUyxPQUFPO0FBQy9DLGVBQUssT0FBTztBQUFBLFFBQ2Q7QUFFQSxZQUFJLFFBQVEsS0FBSyxTQUFTLFVBQVUsS0FBSyxTQUFTLFFBQVE7QUFDeEQsZUFBSyxTQUFTLEtBQUs7QUFDbkI7QUFBQSxRQUNGO0FBRUEsY0FBTSxNQUFNLEtBQUssSUFBSTtBQUNyQixhQUFLLFNBQVM7QUFDZCxhQUFLLE9BQU87QUFDWixlQUFPO0FBQ1AsZUFBTztBQUFBLE1BQ1Q7QUFFQSxXQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEIsYUFBTyxRQUFRLFFBQVE7QUFDckIsZ0JBQVEsTUFBTSxNQUFNLFNBQVM7QUFDN0IsZ0JBQVEsUUFBUTtBQU1oQixZQUFJLFVBQVUsaUNBQWlDLFVBQVUscUJBQXFCO0FBQzVFO0FBQUEsUUFDRjtBQU1BLFlBQUksVUFBVSxnQkFBZ0I7QUFDNUIsZUFBSyxFQUFFLE1BQU0sUUFBUSxRQUFRLFFBQVEsZUFBZSxRQUFRLE1BQU0sUUFBUSxFQUFFLENBQUM7QUFDN0U7QUFBQSxRQUNGO0FBTUEsWUFBSSxVQUFVLDJCQUEyQjtBQUN2QyxlQUFLLEVBQUUsTUFBTSxRQUFRLE9BQU8sT0FBTyxNQUFNLENBQUM7QUFDMUM7QUFBQSxRQUNGO0FBTUEsWUFBSSxVQUFVLDBCQUEwQjtBQUN0QztBQUVBLGNBQUksU0FBUztBQUNiLGNBQUk7QUFFSixpQkFBTyxRQUFRLFdBQVcsT0FBTyxRQUFRLElBQUk7QUFDM0MscUJBQVM7QUFFVCxnQkFBSSxTQUFTLDBCQUEwQjtBQUNyQztBQUNBO0FBQUEsWUFDRjtBQUVBLGdCQUFJLFNBQVMsZ0JBQWdCO0FBQzNCLHVCQUFTLFFBQVE7QUFDakI7QUFBQSxZQUNGO0FBRUEsZ0JBQUksU0FBUywyQkFBMkI7QUFDdEM7QUFFQSxrQkFBSSxhQUFhLEdBQUc7QUFDbEI7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxlQUFLLEVBQUUsTUFBTSxRQUFRLE1BQU0sQ0FBQztBQUM1QjtBQUFBLFFBQ0Y7QUFNQSxZQUFJLFVBQVUsdUJBQXVCO0FBQ25DLGtCQUFRLEtBQUssRUFBRSxNQUFNLFNBQVMsT0FBTyxDQUFDLEVBQUUsQ0FBQztBQUN6QyxnQkFBTSxLQUFLLEtBQUs7QUFDaEIsZUFBSyxFQUFFLE1BQU0sUUFBUSxNQUFNLENBQUM7QUFDNUI7QUFBQSxRQUNGO0FBRUEsWUFBSSxVQUFVLHdCQUF3QjtBQUNwQyxjQUFJLE1BQU0sU0FBUyxTQUFTO0FBQzFCLGlCQUFLLEVBQUUsTUFBTSxRQUFRLE1BQU0sQ0FBQztBQUM1QjtBQUFBLFVBQ0Y7QUFDQSxrQkFBUSxNQUFNLElBQUk7QUFDbEIsZUFBSyxFQUFFLE1BQU0sUUFBUSxNQUFNLENBQUM7QUFDNUIsa0JBQVEsTUFBTSxNQUFNLFNBQVM7QUFDN0I7QUFBQSxRQUNGO0FBTUEsWUFBSSxVQUFVLHFCQUFxQixVQUFVLHFCQUFxQixVQUFVLGVBQWU7QUFDekYsY0FBSSxPQUFPO0FBQ1gsY0FBSTtBQUVKLGNBQUksUUFBUSxlQUFlLE1BQU07QUFDL0Isb0JBQVE7QUFBQSxVQUNWO0FBRUEsaUJBQU8sUUFBUSxXQUFXLE9BQU8sUUFBUSxJQUFJO0FBQzNDLGdCQUFJLFNBQVMsZ0JBQWdCO0FBQzNCLHVCQUFTLE9BQU8sUUFBUTtBQUN4QjtBQUFBLFlBQ0Y7QUFFQSxnQkFBSSxTQUFTLE1BQU07QUFDakIsa0JBQUksUUFBUSxlQUFlO0FBQU0seUJBQVM7QUFDMUM7QUFBQSxZQUNGO0FBRUEscUJBQVM7QUFBQSxVQUNYO0FBRUEsZUFBSyxFQUFFLE1BQU0sUUFBUSxNQUFNLENBQUM7QUFDNUI7QUFBQSxRQUNGO0FBTUEsWUFBSSxVQUFVLHVCQUF1QjtBQUNuQztBQUVBLGNBQUksU0FBUyxLQUFLLFNBQVMsS0FBSyxNQUFNLE1BQU0sRUFBRSxNQUFNLE9BQU8sTUFBTSxXQUFXO0FBQzVFLGNBQUksUUFBUTtBQUFBLFlBQ1YsTUFBTTtBQUFBLFlBQ04sTUFBTTtBQUFBLFlBQ04sT0FBTztBQUFBLFlBQ1A7QUFBQSxZQUNBO0FBQUEsWUFDQSxRQUFRO0FBQUEsWUFDUixRQUFRO0FBQUEsWUFDUixPQUFPLENBQUM7QUFBQSxVQUNWO0FBRUEsa0JBQVEsS0FBSyxLQUFLO0FBQ2xCLGdCQUFNLEtBQUssS0FBSztBQUNoQixlQUFLLEVBQUUsTUFBTSxRQUFRLE1BQU0sQ0FBQztBQUM1QjtBQUFBLFFBQ0Y7QUFNQSxZQUFJLFVBQVUsd0JBQXdCO0FBQ3BDLGNBQUksTUFBTSxTQUFTLFNBQVM7QUFDMUIsaUJBQUssRUFBRSxNQUFNLFFBQVEsTUFBTSxDQUFDO0FBQzVCO0FBQUEsVUFDRjtBQUVBLGNBQUksT0FBTztBQUNYLGtCQUFRLE1BQU0sSUFBSTtBQUNsQixnQkFBTSxRQUFRO0FBRWQsZUFBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BCO0FBRUEsa0JBQVEsTUFBTSxNQUFNLFNBQVM7QUFDN0I7QUFBQSxRQUNGO0FBTUEsWUFBSSxVQUFVLGNBQWMsUUFBUSxHQUFHO0FBQ3JDLGNBQUksTUFBTSxTQUFTLEdBQUc7QUFDcEIsa0JBQU0sU0FBUztBQUNmLGdCQUFJLE9BQU8sTUFBTSxNQUFNLE1BQU07QUFDN0Isa0JBQU0sUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLFFBQVEsT0FBTyxVQUFVLEtBQUssRUFBRSxDQUFDO0FBQUEsVUFDaEU7QUFFQSxlQUFLLEVBQUUsTUFBTSxTQUFTLE1BQU0sQ0FBQztBQUM3QixnQkFBTTtBQUNOO0FBQUEsUUFDRjtBQU1BLFlBQUksVUFBVSxZQUFZLFFBQVEsS0FBSyxNQUFNLFdBQVcsR0FBRztBQUN6RCxjQUFJLFdBQVcsTUFBTTtBQUVyQixjQUFJLFVBQVUsS0FBSyxTQUFTLFdBQVcsR0FBRztBQUN4QyxpQkFBSyxFQUFFLE1BQU0sUUFBUSxNQUFNLENBQUM7QUFDNUI7QUFBQSxVQUNGO0FBRUEsY0FBSSxLQUFLLFNBQVMsT0FBTztBQUN2QixrQkFBTSxRQUFRLENBQUM7QUFDZixpQkFBSyxTQUFTO0FBQ2QsaUJBQUssT0FBTztBQUVaLGdCQUFJLE1BQU0sTUFBTSxXQUFXLEtBQUssTUFBTSxNQUFNLFdBQVcsR0FBRztBQUN4RCxvQkFBTSxVQUFVO0FBQ2hCLG9CQUFNLFNBQVM7QUFDZixtQkFBSyxPQUFPO0FBQ1o7QUFBQSxZQUNGO0FBRUEsa0JBQU07QUFDTixrQkFBTSxPQUFPLENBQUM7QUFDZDtBQUFBLFVBQ0Y7QUFFQSxjQUFJLEtBQUssU0FBUyxTQUFTO0FBQ3pCLHFCQUFTLElBQUk7QUFFYixnQkFBSSxTQUFTLFNBQVMsU0FBUyxTQUFTO0FBQ3hDLG1CQUFPLFNBQVMsS0FBSyxRQUFRO0FBQzdCLG1CQUFPO0FBQ1Asa0JBQU07QUFDTjtBQUFBLFVBQ0Y7QUFFQSxlQUFLLEVBQUUsTUFBTSxPQUFPLE1BQU0sQ0FBQztBQUMzQjtBQUFBLFFBQ0Y7QUFNQSxhQUFLLEVBQUUsTUFBTSxRQUFRLE1BQU0sQ0FBQztBQUFBLE1BQzlCO0FBR0EsU0FBRztBQUNELGdCQUFRLE1BQU0sSUFBSTtBQUVsQixZQUFJLE1BQU0sU0FBUyxRQUFRO0FBQ3pCLGdCQUFNLE1BQU0sUUFBUSxVQUFRO0FBQzFCLGdCQUFJLENBQUMsS0FBSyxPQUFPO0FBQ2Ysa0JBQUksS0FBSyxTQUFTO0FBQVEscUJBQUssU0FBUztBQUN4QyxrQkFBSSxLQUFLLFNBQVM7QUFBUyxxQkFBSyxVQUFVO0FBQzFDLGtCQUFJLENBQUMsS0FBSztBQUFPLHFCQUFLLE9BQU87QUFDN0IsbUJBQUssVUFBVTtBQUFBLFlBQ2pCO0FBQUEsVUFDRixDQUFDO0FBR0QsY0FBSSxTQUFTLE1BQU0sTUFBTSxTQUFTO0FBQ2xDLGNBQUlDLFNBQVEsT0FBTyxNQUFNLFFBQVEsS0FBSztBQUV0QyxpQkFBTyxNQUFNLE9BQU9BLFFBQU8sR0FBRyxHQUFHLE1BQU0sS0FBSztBQUFBLFFBQzlDO0FBQUEsTUFDRixTQUFTLE1BQU0sU0FBUztBQUV4QixXQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEIsYUFBTztBQUFBLElBQ1Q7QUFFQSxJQUFBRCxRQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUM1VWpCO0FBQUEsZ0RBQUFFLFNBQUE7QUFBQTtBQUFBO0FBRUEsUUFBTSxZQUFZO0FBQ2xCLFFBQU0sVUFBVTtBQUNoQixRQUFNLFNBQVM7QUFDZixRQUFNLFFBQVE7QUFnQmQsUUFBTSxTQUFTLENBQUMsT0FBTyxVQUFVLENBQUMsTUFBTTtBQUN0QyxVQUFJLFNBQVMsQ0FBQztBQUVkLFVBQUksTUFBTSxRQUFRLEtBQUssR0FBRztBQUN4QixpQkFBUyxXQUFXLE9BQU87QUFDekIsY0FBSSxTQUFTLE9BQU8sT0FBTyxTQUFTLE9BQU87QUFDM0MsY0FBSSxNQUFNLFFBQVEsTUFBTSxHQUFHO0FBQ3pCLG1CQUFPLEtBQUssR0FBRyxNQUFNO0FBQUEsVUFDdkIsT0FBTztBQUNMLG1CQUFPLEtBQUssTUFBTTtBQUFBLFVBQ3BCO0FBQUEsUUFDRjtBQUFBLE1BQ0YsT0FBTztBQUNMLGlCQUFTLENBQUMsRUFBRSxPQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sQ0FBQztBQUFBLE1BQ2xEO0FBRUEsVUFBSSxXQUFXLFFBQVEsV0FBVyxRQUFRLFFBQVEsWUFBWSxNQUFNO0FBQ2xFLGlCQUFTLENBQUMsR0FBRyxJQUFJLElBQUksTUFBTSxDQUFDO0FBQUEsTUFDOUI7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQWdCQSxXQUFPLFFBQVEsQ0FBQyxPQUFPLFVBQVUsQ0FBQyxNQUFNLE1BQU0sT0FBTyxPQUFPO0FBZ0I1RCxXQUFPLFlBQVksQ0FBQyxPQUFPLFVBQVUsQ0FBQyxNQUFNO0FBQzFDLFVBQUksT0FBTyxVQUFVLFVBQVU7QUFDN0IsZUFBTyxVQUFVLE9BQU8sTUFBTSxPQUFPLE9BQU8sR0FBRyxPQUFPO0FBQUEsTUFDeEQ7QUFDQSxhQUFPLFVBQVUsT0FBTyxPQUFPO0FBQUEsSUFDakM7QUFpQkEsV0FBTyxVQUFVLENBQUMsT0FBTyxVQUFVLENBQUMsTUFBTTtBQUN4QyxVQUFJLE9BQU8sVUFBVSxVQUFVO0FBQzdCLGdCQUFRLE9BQU8sTUFBTSxPQUFPLE9BQU87QUFBQSxNQUNyQztBQUNBLGFBQU8sUUFBUSxPQUFPLE9BQU87QUFBQSxJQUMvQjtBQW1CQSxXQUFPLFNBQVMsQ0FBQyxPQUFPLFVBQVUsQ0FBQyxNQUFNO0FBQ3ZDLFVBQUksT0FBTyxVQUFVLFVBQVU7QUFDN0IsZ0JBQVEsT0FBTyxNQUFNLE9BQU8sT0FBTztBQUFBLE1BQ3JDO0FBRUEsVUFBSSxTQUFTLE9BQU8sT0FBTyxPQUFPO0FBR2xDLFVBQUksUUFBUSxZQUFZLE1BQU07QUFDNUIsaUJBQVMsT0FBTyxPQUFPLE9BQU87QUFBQSxNQUNoQztBQUdBLFVBQUksUUFBUSxZQUFZLE1BQU07QUFDNUIsaUJBQVMsQ0FBQyxHQUFHLElBQUksSUFBSSxNQUFNLENBQUM7QUFBQSxNQUM5QjtBQUVBLGFBQU87QUFBQSxJQUNUO0FBa0JBLFdBQU8sU0FBUyxDQUFDLE9BQU8sVUFBVSxDQUFDLE1BQU07QUFDdkMsVUFBSSxVQUFVLE1BQU0sTUFBTSxTQUFTLEdBQUc7QUFDcEMsZUFBTyxDQUFDLEtBQUs7QUFBQSxNQUNmO0FBRUQsYUFBTyxRQUFRLFdBQVcsT0FDckIsT0FBTyxRQUFRLE9BQU8sT0FBTyxJQUM3QixPQUFPLE9BQU8sT0FBTyxPQUFPO0FBQUEsSUFDbEM7QUFNQSxJQUFBQSxRQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUN6S2pCLElBQUFDLHFCQUFBO0FBQUEsMkRBQUFDLFNBQUE7QUFBQTtBQUFBO0FBRUEsUUFBTUMsUUFBTyxRQUFRO0FBQ3JCLFFBQU0sWUFBWTtBQUNsQixRQUFNLGVBQWUsS0FBSztBQU0xQixRQUFNLGNBQWM7QUFDcEIsUUFBTSxlQUFlO0FBQ3JCLFFBQU0sZ0JBQWdCO0FBQ3RCLFFBQU0sZ0JBQWdCO0FBQ3RCLFFBQU0sV0FBVztBQUNqQixRQUFNLFFBQVE7QUFDZCxRQUFNLGFBQWEsTUFBTTtBQUN6QixRQUFNLGVBQWUsUUFBUTtBQUM3QixRQUFNLGFBQWEsR0FBRyxtQkFBbUI7QUFDekMsUUFBTSxTQUFTLE1BQU07QUFDckIsUUFBTSxVQUFVLE1BQU0sZUFBZTtBQUNyQyxRQUFNLGVBQWUsTUFBTSxtQkFBbUI7QUFDOUMsUUFBTSxnQkFBZ0IsTUFBTTtBQUM1QixRQUFNLGVBQWUsTUFBTTtBQUMzQixRQUFNLE9BQU8sR0FBRztBQUVoQixRQUFNLGNBQWM7QUFBQSxNQUNsQjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQU1BLFFBQU0sZ0JBQWdCO0FBQUEsTUFDcEIsR0FBRztBQUFBLE1BRUgsZUFBZSxJQUFJO0FBQUEsTUFDbkIsT0FBTztBQUFBLE1BQ1AsTUFBTSxHQUFHO0FBQUEsTUFDVCxZQUFZLEdBQUcsdUJBQXVCO0FBQUEsTUFDdEMsUUFBUSxNQUFNO0FBQUEsTUFDZCxTQUFTLFlBQVksY0FBYyx1QkFBdUI7QUFBQSxNQUMxRCxjQUFjLE1BQU0sdUJBQXVCO0FBQUEsTUFDM0MsZUFBZSxNQUFNLHVCQUF1QjtBQUFBLE1BQzVDLGNBQWMsTUFBTTtBQUFBLE1BQ3BCLGNBQWMsU0FBUztBQUFBLE1BQ3ZCLFlBQVksT0FBTztBQUFBLElBQ3JCO0FBTUEsUUFBTSxxQkFBcUI7QUFBQSxNQUN6QixPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxNQUFNO0FBQUEsTUFDTixRQUFRO0FBQUEsSUFDVjtBQUVBLElBQUFELFFBQU8sVUFBVTtBQUFBLE1BQ2YsWUFBWSxPQUFPO0FBQUEsTUFDbkI7QUFBQSxNQUdBLGlCQUFpQjtBQUFBLE1BQ2pCLHlCQUF5QjtBQUFBLE1BQ3pCLHFCQUFxQjtBQUFBLE1BQ3JCLDZCQUE2QjtBQUFBLE1BQzdCLDRCQUE0QjtBQUFBLE1BQzVCLHdCQUF3QjtBQUFBLE1BR3hCLGNBQWM7QUFBQSxRQUNaLE9BQU87QUFBQSxRQUNQLFNBQVM7QUFBQSxRQUNULFlBQVk7QUFBQSxNQUNkO0FBQUEsTUFHQSxRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFHUixrQkFBa0I7QUFBQSxNQUNsQixrQkFBa0I7QUFBQSxNQUNsQixrQkFBa0I7QUFBQSxNQUNsQixrQkFBa0I7QUFBQSxNQUVsQix1QkFBdUI7QUFBQSxNQUN2Qix3QkFBd0I7QUFBQSxNQUV4QixlQUFlO0FBQUEsTUFHZixnQkFBZ0I7QUFBQSxNQUNoQixTQUFTO0FBQUEsTUFDVCxxQkFBcUI7QUFBQSxNQUNyQixzQkFBc0I7QUFBQSxNQUN0Qix3QkFBd0I7QUFBQSxNQUN4QixZQUFZO0FBQUEsTUFDWixZQUFZO0FBQUEsTUFDWixVQUFVO0FBQUEsTUFDVixtQkFBbUI7QUFBQSxNQUNuQixZQUFZO0FBQUEsTUFDWix1QkFBdUI7QUFBQSxNQUN2QixnQkFBZ0I7QUFBQSxNQUNoQixvQkFBb0I7QUFBQSxNQUNwQixtQkFBbUI7QUFBQSxNQUNuQixXQUFXO0FBQUEsTUFDWCxtQkFBbUI7QUFBQSxNQUNuQix5QkFBeUI7QUFBQSxNQUN6Qix1QkFBdUI7QUFBQSxNQUN2QiwwQkFBMEI7QUFBQSxNQUMxQixnQkFBZ0I7QUFBQSxNQUNoQixxQkFBcUI7QUFBQSxNQUNyQixjQUFjO0FBQUEsTUFDZCxXQUFXO0FBQUEsTUFDWCxvQkFBb0I7QUFBQSxNQUNwQiwwQkFBMEI7QUFBQSxNQUMxQix3QkFBd0I7QUFBQSxNQUN4QiwyQkFBMkI7QUFBQSxNQUMzQixnQkFBZ0I7QUFBQSxNQUNoQixtQkFBbUI7QUFBQSxNQUNuQixZQUFZO0FBQUEsTUFDWixVQUFVO0FBQUEsTUFDVixpQkFBaUI7QUFBQSxNQUNqQixvQkFBb0I7QUFBQSxNQUNwQiwrQkFBK0I7QUFBQSxNQUUvQixLQUFLQyxNQUFLO0FBQUEsTUFNVixhQUFhLE9BQU87QUFDbEIsZUFBTztBQUFBLFVBQ0wsS0FBSyxFQUFFLE1BQU0sVUFBVSxNQUFNLGFBQWEsT0FBTyxLQUFLLE1BQU0sUUFBUTtBQUFBLFVBQ3BFLEtBQUssRUFBRSxNQUFNLFNBQVMsTUFBTSxPQUFPLE9BQU8sS0FBSztBQUFBLFVBQy9DLEtBQUssRUFBRSxNQUFNLFFBQVEsTUFBTSxPQUFPLE9BQU8sS0FBSztBQUFBLFVBQzlDLEtBQUssRUFBRSxNQUFNLFFBQVEsTUFBTSxPQUFPLE9BQU8sS0FBSztBQUFBLFVBQzlDLEtBQUssRUFBRSxNQUFNLE1BQU0sTUFBTSxPQUFPLE9BQU8sSUFBSTtBQUFBLFFBQzdDO0FBQUEsTUFDRjtBQUFBLE1BTUEsVUFBVSxPQUFPO0FBQ2YsZUFBTyxVQUFVLE9BQU8sZ0JBQWdCO0FBQUEsTUFDMUM7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDbExBLElBQUFDLGlCQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUEsUUFBTUMsUUFBTyxRQUFRO0FBQ3JCLFFBQU0sUUFBUSxRQUFRLGFBQWE7QUFDbkMsUUFBTTtBQUFBLE1BQ0o7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLElBQUk7QUFFSixZQUFRLFdBQVcsU0FBTyxRQUFRLFFBQVEsT0FBTyxRQUFRLFlBQVksQ0FBQyxNQUFNLFFBQVEsR0FBRztBQUN2RixZQUFRLGdCQUFnQixTQUFPLG9CQUFvQixLQUFLLEdBQUc7QUFDM0QsWUFBUSxjQUFjLFNBQU8sSUFBSSxXQUFXLEtBQUssUUFBUSxjQUFjLEdBQUc7QUFDMUUsWUFBUSxjQUFjLFNBQU8sSUFBSSxRQUFRLDRCQUE0QixNQUFNO0FBQzNFLFlBQVEsaUJBQWlCLFNBQU8sSUFBSSxRQUFRLGlCQUFpQixHQUFHO0FBRWhFLFlBQVEsb0JBQW9CLFNBQU87QUFDakMsYUFBTyxJQUFJLFFBQVEsd0JBQXdCLFdBQVM7QUFDbEQsZUFBTyxVQUFVLE9BQU8sS0FBSztBQUFBLE1BQy9CLENBQUM7QUFBQSxJQUNIO0FBRUEsWUFBUSxzQkFBc0IsTUFBTTtBQUNsQyxZQUFNLE9BQU8sUUFBUSxRQUFRLE1BQU0sQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUFFLElBQUksTUFBTTtBQUMzRCxVQUFJLEtBQUssV0FBVyxLQUFLLEtBQUssTUFBTSxLQUFNLEtBQUssT0FBTyxLQUFLLEtBQUssTUFBTSxJQUFLO0FBQ3pFLGVBQU87QUFBQSxNQUNUO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFFQSxZQUFRLFlBQVksYUFBVztBQUM3QixVQUFJLFdBQVcsT0FBTyxRQUFRLFlBQVksV0FBVztBQUNuRCxlQUFPLFFBQVE7QUFBQSxNQUNqQjtBQUNBLGFBQU8sVUFBVSxRQUFRQSxNQUFLLFFBQVE7QUFBQSxJQUN4QztBQUVBLFlBQVEsYUFBYSxDQUFDLE9BQU8sTUFBTSxZQUFZO0FBQzdDLFlBQU0sTUFBTSxNQUFNLFlBQVksTUFBTSxPQUFPO0FBQzNDLFVBQUksUUFBUTtBQUFJLGVBQU87QUFDdkIsVUFBSSxNQUFNLE1BQU0sT0FBTztBQUFNLGVBQU8sUUFBUSxXQUFXLE9BQU8sTUFBTSxNQUFNLENBQUM7QUFDM0UsYUFBTyxHQUFHLE1BQU0sTUFBTSxHQUFHLEdBQUcsTUFBTSxNQUFNLE1BQU0sR0FBRztBQUFBLElBQ25EO0FBRUEsWUFBUSxlQUFlLENBQUMsT0FBTyxRQUFRLENBQUMsTUFBTTtBQUM1QyxVQUFJLFNBQVM7QUFDYixVQUFJLE9BQU8sV0FBVyxJQUFJLEdBQUc7QUFDM0IsaUJBQVMsT0FBTyxNQUFNLENBQUM7QUFDdkIsY0FBTSxTQUFTO0FBQUEsTUFDakI7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUVBLFlBQVEsYUFBYSxDQUFDLE9BQU8sUUFBUSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU07QUFDeEQsWUFBTSxVQUFVLFFBQVEsV0FBVyxLQUFLO0FBQ3hDLFlBQU0sU0FBUyxRQUFRLFdBQVcsS0FBSztBQUV2QyxVQUFJLFNBQVMsR0FBRyxhQUFhLFNBQVM7QUFDdEMsVUFBSSxNQUFNLFlBQVksTUFBTTtBQUMxQixpQkFBUyxVQUFVO0FBQUEsTUFDckI7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUFBO0FBQUE7OztBQy9EQTtBQUFBLHNEQUFBQyxTQUFBO0FBQUE7QUFBQTtBQUVBLFFBQU0sUUFBUTtBQUNkLFFBQU07QUFBQSxNQUNKO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLElBQUk7QUFFSixRQUFNLGtCQUFrQixVQUFRO0FBQzlCLGFBQU8sU0FBUyxzQkFBc0IsU0FBUztBQUFBLElBQ2pEO0FBRUEsUUFBTSxRQUFRLFdBQVM7QUFDckIsVUFBSSxNQUFNLGFBQWEsTUFBTTtBQUMzQixjQUFNLFFBQVEsTUFBTSxhQUFhLFdBQVc7QUFBQSxNQUM5QztBQUFBLElBQ0Y7QUFtQkEsUUFBTSxPQUFPLENBQUMsT0FBTyxZQUFZO0FBQy9CLFlBQU0sT0FBTyxXQUFXLENBQUM7QUFFekIsWUFBTSxTQUFTLE1BQU0sU0FBUztBQUM5QixZQUFNLFlBQVksS0FBSyxVQUFVLFFBQVEsS0FBSyxjQUFjO0FBQzVELFlBQU0sVUFBVSxDQUFDO0FBQ2pCLFlBQU0sU0FBUyxDQUFDO0FBQ2hCLFlBQU0sUUFBUSxDQUFDO0FBRWYsVUFBSSxNQUFNO0FBQ1YsVUFBSSxRQUFRO0FBQ1osVUFBSSxRQUFRO0FBQ1osVUFBSSxZQUFZO0FBQ2hCLFVBQUksVUFBVTtBQUNkLFVBQUksWUFBWTtBQUNoQixVQUFJLFNBQVM7QUFDYixVQUFJLFlBQVk7QUFDaEIsVUFBSSxhQUFhO0FBQ2pCLFVBQUksZUFBZTtBQUNuQixVQUFJLGNBQWM7QUFDbEIsVUFBSSxVQUFVO0FBQ2QsVUFBSSxpQkFBaUI7QUFDckIsVUFBSSxXQUFXO0FBQ2YsVUFBSSxTQUFTO0FBQ2IsVUFBSTtBQUNKLFVBQUk7QUFDSixVQUFJLFFBQVEsRUFBRSxPQUFPLElBQUksT0FBTyxHQUFHLFFBQVEsTUFBTTtBQUVqRCxZQUFNLE1BQU0sTUFBTSxTQUFTO0FBQzNCLFlBQU0sT0FBTyxNQUFNLElBQUksV0FBVyxRQUFRLENBQUM7QUFDM0MsWUFBTSxVQUFVLE1BQU07QUFDcEIsZUFBTztBQUNQLGVBQU8sSUFBSSxXQUFXLEVBQUUsS0FBSztBQUFBLE1BQy9CO0FBRUEsYUFBTyxRQUFRLFFBQVE7QUFDckIsZUFBTyxRQUFRO0FBQ2YsWUFBSTtBQUVKLFlBQUksU0FBUyxxQkFBcUI7QUFDaEMsd0JBQWMsTUFBTSxjQUFjO0FBQ2xDLGlCQUFPLFFBQVE7QUFFZixjQUFJLFNBQVMsdUJBQXVCO0FBQ2xDLDJCQUFlO0FBQUEsVUFDakI7QUFDQTtBQUFBLFFBQ0Y7QUFFQSxZQUFJLGlCQUFpQixRQUFRLFNBQVMsdUJBQXVCO0FBQzNEO0FBRUEsaUJBQU8sSUFBSSxNQUFNLFNBQVMsT0FBTyxRQUFRLElBQUk7QUFDM0MsZ0JBQUksU0FBUyxxQkFBcUI7QUFDaEMsNEJBQWMsTUFBTSxjQUFjO0FBQ2xDLHNCQUFRO0FBQ1I7QUFBQSxZQUNGO0FBRUEsZ0JBQUksU0FBUyx1QkFBdUI7QUFDbEM7QUFDQTtBQUFBLFlBQ0Y7QUFFQSxnQkFBSSxpQkFBaUIsUUFBUSxTQUFTLGFBQWEsT0FBTyxRQUFRLE9BQU8sVUFBVTtBQUNqRix3QkFBVSxNQUFNLFVBQVU7QUFDMUIsdUJBQVMsTUFBTSxTQUFTO0FBQ3hCLHlCQUFXO0FBRVgsa0JBQUksY0FBYyxNQUFNO0FBQ3RCO0FBQUEsY0FDRjtBQUVBO0FBQUEsWUFDRjtBQUVBLGdCQUFJLGlCQUFpQixRQUFRLFNBQVMsWUFBWTtBQUNoRCx3QkFBVSxNQUFNLFVBQVU7QUFDMUIsdUJBQVMsTUFBTSxTQUFTO0FBQ3hCLHlCQUFXO0FBRVgsa0JBQUksY0FBYyxNQUFNO0FBQ3RCO0FBQUEsY0FDRjtBQUVBO0FBQUEsWUFDRjtBQUVBLGdCQUFJLFNBQVMsd0JBQXdCO0FBQ25DO0FBRUEsa0JBQUksV0FBVyxHQUFHO0FBQ2hCLCtCQUFlO0FBQ2YsMEJBQVUsTUFBTSxVQUFVO0FBQzFCLDJCQUFXO0FBQ1g7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxjQUFJLGNBQWMsTUFBTTtBQUN0QjtBQUFBLFVBQ0Y7QUFFQTtBQUFBLFFBQ0Y7QUFFQSxZQUFJLFNBQVMsb0JBQW9CO0FBQy9CLGtCQUFRLEtBQUssS0FBSztBQUNsQixpQkFBTyxLQUFLLEtBQUs7QUFDakIsa0JBQVEsRUFBRSxPQUFPLElBQUksT0FBTyxHQUFHLFFBQVEsTUFBTTtBQUU3QyxjQUFJLGFBQWE7QUFBTTtBQUN2QixjQUFJLFNBQVMsWUFBWSxVQUFXLFFBQVEsR0FBSTtBQUM5QyxxQkFBUztBQUNUO0FBQUEsVUFDRjtBQUVBLHNCQUFZLFFBQVE7QUFDcEI7QUFBQSxRQUNGO0FBRUEsWUFBSSxLQUFLLFVBQVUsTUFBTTtBQUN2QixnQkFBTSxnQkFBZ0IsU0FBUyxhQUMxQixTQUFTLFdBQ1QsU0FBUyxpQkFDVCxTQUFTLHNCQUNULFNBQVM7QUFFZCxjQUFJLGtCQUFrQixRQUFRLEtBQUssTUFBTSx1QkFBdUI7QUFDOUQscUJBQVMsTUFBTSxTQUFTO0FBQ3hCLHdCQUFZLE1BQU0sWUFBWTtBQUM5Qix1QkFBVztBQUNYLGdCQUFJLFNBQVMseUJBQXlCLFVBQVUsT0FBTztBQUNyRCwrQkFBaUI7QUFBQSxZQUNuQjtBQUVBLGdCQUFJLGNBQWMsTUFBTTtBQUN0QixxQkFBTyxJQUFJLE1BQU0sU0FBUyxPQUFPLFFBQVEsSUFBSTtBQUMzQyxvQkFBSSxTQUFTLHFCQUFxQjtBQUNoQyxnQ0FBYyxNQUFNLGNBQWM7QUFDbEMseUJBQU8sUUFBUTtBQUNmO0FBQUEsZ0JBQ0Y7QUFFQSxvQkFBSSxTQUFTLHdCQUF3QjtBQUNuQywyQkFBUyxNQUFNLFNBQVM7QUFDeEIsNkJBQVc7QUFDWDtBQUFBLGdCQUNGO0FBQUEsY0FDRjtBQUNBO0FBQUEsWUFDRjtBQUNBO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLFNBQVMsZUFBZTtBQUMxQixjQUFJLFNBQVM7QUFBZSx5QkFBYSxNQUFNLGFBQWE7QUFDNUQsbUJBQVMsTUFBTSxTQUFTO0FBQ3hCLHFCQUFXO0FBRVgsY0FBSSxjQUFjLE1BQU07QUFDdEI7QUFBQSxVQUNGO0FBQ0E7QUFBQSxRQUNGO0FBRUEsWUFBSSxTQUFTLG9CQUFvQjtBQUMvQixtQkFBUyxNQUFNLFNBQVM7QUFDeEIscUJBQVc7QUFFWCxjQUFJLGNBQWMsTUFBTTtBQUN0QjtBQUFBLFVBQ0Y7QUFDQTtBQUFBLFFBQ0Y7QUFFQSxZQUFJLFNBQVMsMEJBQTBCO0FBQ3JDLGlCQUFPLElBQUksTUFBTSxTQUFTLE9BQU8sUUFBUSxJQUFJO0FBQzNDLGdCQUFJLFNBQVMscUJBQXFCO0FBQ2hDLDRCQUFjLE1BQU0sY0FBYztBQUNsQyxzQkFBUTtBQUNSO0FBQUEsWUFDRjtBQUVBLGdCQUFJLFNBQVMsMkJBQTJCO0FBQ3RDLDBCQUFZLE1BQU0sWUFBWTtBQUM5Qix1QkFBUyxNQUFNLFNBQVM7QUFDeEIseUJBQVc7QUFDWDtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsY0FBSSxjQUFjLE1BQU07QUFDdEI7QUFBQSxVQUNGO0FBRUE7QUFBQSxRQUNGO0FBRUEsWUFBSSxLQUFLLGFBQWEsUUFBUSxTQUFTLHlCQUF5QixVQUFVLE9BQU87QUFDL0Usb0JBQVUsTUFBTSxVQUFVO0FBQzFCO0FBQ0E7QUFBQSxRQUNGO0FBRUEsWUFBSSxLQUFLLFlBQVksUUFBUSxTQUFTLHVCQUF1QjtBQUMzRCxtQkFBUyxNQUFNLFNBQVM7QUFFeEIsY0FBSSxjQUFjLE1BQU07QUFDdEIsbUJBQU8sSUFBSSxNQUFNLFNBQVMsT0FBTyxRQUFRLElBQUk7QUFDM0Msa0JBQUksU0FBUyx1QkFBdUI7QUFDbEMsOEJBQWMsTUFBTSxjQUFjO0FBQ2xDLHVCQUFPLFFBQVE7QUFDZjtBQUFBLGNBQ0Y7QUFFQSxrQkFBSSxTQUFTLHdCQUF3QjtBQUNuQywyQkFBVztBQUNYO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFDQTtBQUFBLFVBQ0Y7QUFDQTtBQUFBLFFBQ0Y7QUFFQSxZQUFJLFdBQVcsTUFBTTtBQUNuQixxQkFBVztBQUVYLGNBQUksY0FBYyxNQUFNO0FBQ3RCO0FBQUEsVUFDRjtBQUVBO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFFQSxVQUFJLEtBQUssVUFBVSxNQUFNO0FBQ3ZCLG9CQUFZO0FBQ1osaUJBQVM7QUFBQSxNQUNYO0FBRUEsVUFBSSxPQUFPO0FBQ1gsVUFBSSxTQUFTO0FBQ2IsVUFBSSxPQUFPO0FBRVgsVUFBSSxRQUFRLEdBQUc7QUFDYixpQkFBUyxJQUFJLE1BQU0sR0FBRyxLQUFLO0FBQzNCLGNBQU0sSUFBSSxNQUFNLEtBQUs7QUFDckIscUJBQWE7QUFBQSxNQUNmO0FBRUEsVUFBSSxRQUFRLFdBQVcsUUFBUSxZQUFZLEdBQUc7QUFDNUMsZUFBTyxJQUFJLE1BQU0sR0FBRyxTQUFTO0FBQzdCLGVBQU8sSUFBSSxNQUFNLFNBQVM7QUFBQSxNQUM1QixXQUFXLFdBQVcsTUFBTTtBQUMxQixlQUFPO0FBQ1AsZUFBTztBQUFBLE1BQ1QsT0FBTztBQUNMLGVBQU87QUFBQSxNQUNUO0FBRUEsVUFBSSxRQUFRLFNBQVMsTUFBTSxTQUFTLE9BQU8sU0FBUyxLQUFLO0FBQ3ZELFlBQUksZ0JBQWdCLEtBQUssV0FBVyxLQUFLLFNBQVMsQ0FBQyxDQUFDLEdBQUc7QUFDckQsaUJBQU8sS0FBSyxNQUFNLEdBQUcsRUFBRTtBQUFBLFFBQ3pCO0FBQUEsTUFDRjtBQUVBLFVBQUksS0FBSyxhQUFhLE1BQU07QUFDMUIsWUFBSTtBQUFNLGlCQUFPLE1BQU0sa0JBQWtCLElBQUk7QUFFN0MsWUFBSSxRQUFRLGdCQUFnQixNQUFNO0FBQ2hDLGlCQUFPLE1BQU0sa0JBQWtCLElBQUk7QUFBQSxRQUNyQztBQUFBLE1BQ0Y7QUFFQSxZQUFNLFFBQVE7QUFBQSxRQUNaO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBRUEsVUFBSSxLQUFLLFdBQVcsTUFBTTtBQUN4QixjQUFNLFdBQVc7QUFDakIsWUFBSSxDQUFDLGdCQUFnQixJQUFJLEdBQUc7QUFDMUIsaUJBQU8sS0FBSyxLQUFLO0FBQUEsUUFDbkI7QUFDQSxjQUFNLFNBQVM7QUFBQSxNQUNqQjtBQUVBLFVBQUksS0FBSyxVQUFVLFFBQVEsS0FBSyxXQUFXLE1BQU07QUFDL0MsWUFBSTtBQUVKLGlCQUFTLE1BQU0sR0FBRyxNQUFNLFFBQVEsUUFBUSxPQUFPO0FBQzdDLGdCQUFNLElBQUksWUFBWSxZQUFZLElBQUk7QUFDdEMsZ0JBQU0sSUFBSSxRQUFRO0FBQ2xCLGdCQUFNLFFBQVEsTUFBTSxNQUFNLEdBQUcsQ0FBQztBQUM5QixjQUFJLEtBQUssUUFBUTtBQUNmLGdCQUFJLFFBQVEsS0FBSyxVQUFVLEdBQUc7QUFDNUIscUJBQU8sS0FBSyxXQUFXO0FBQ3ZCLHFCQUFPLEtBQUssUUFBUTtBQUFBLFlBQ3RCLE9BQU87QUFDTCxxQkFBTyxLQUFLLFFBQVE7QUFBQSxZQUN0QjtBQUNBLGtCQUFNLE9BQU8sSUFBSTtBQUNqQixrQkFBTSxZQUFZLE9BQU8sS0FBSztBQUFBLFVBQ2hDO0FBQ0EsY0FBSSxRQUFRLEtBQUssVUFBVSxJQUFJO0FBQzdCLGtCQUFNLEtBQUssS0FBSztBQUFBLFVBQ2xCO0FBQ0Esc0JBQVk7QUFBQSxRQUNkO0FBRUEsWUFBSSxhQUFhLFlBQVksSUFBSSxNQUFNLFFBQVE7QUFDN0MsZ0JBQU0sUUFBUSxNQUFNLE1BQU0sWUFBWSxDQUFDO0FBQ3ZDLGdCQUFNLEtBQUssS0FBSztBQUVoQixjQUFJLEtBQUssUUFBUTtBQUNmLG1CQUFPLE9BQU8sU0FBUyxHQUFHLFFBQVE7QUFDbEMsa0JBQU0sT0FBTyxPQUFPLFNBQVMsRUFBRTtBQUMvQixrQkFBTSxZQUFZLE9BQU8sT0FBTyxTQUFTLEdBQUc7QUFBQSxVQUM5QztBQUFBLFFBQ0Y7QUFFQSxjQUFNLFVBQVU7QUFDaEIsY0FBTSxRQUFRO0FBQUEsTUFDaEI7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQUVBLElBQUFBLFFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQ3RZakIsSUFBQUMsaUJBQUE7QUFBQSx1REFBQUMsU0FBQTtBQUFBO0FBQUE7QUFFQSxRQUFNLFlBQVk7QUFDbEIsUUFBTSxRQUFRO0FBTWQsUUFBTTtBQUFBLE1BQ0o7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixJQUFJO0FBTUosUUFBTSxjQUFjLENBQUMsTUFBTSxZQUFZO0FBQ3JDLFVBQUksT0FBTyxRQUFRLGdCQUFnQixZQUFZO0FBQzdDLGVBQU8sUUFBUSxZQUFZLEdBQUcsTUFBTSxPQUFPO0FBQUEsTUFDN0M7QUFFQSxXQUFLLEtBQUs7QUFDVixZQUFNLFFBQVEsSUFBSSxLQUFLLEtBQUssR0FBRztBQUUvQixVQUFJO0FBRUYsWUFBSSxPQUFPLEtBQUs7QUFBQSxNQUNsQixTQUFTLElBQVA7QUFDQSxlQUFPLEtBQUssSUFBSSxPQUFLLE1BQU0sWUFBWSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUk7QUFBQSxNQUN0RDtBQUVBLGFBQU87QUFBQSxJQUNUO0FBTUEsUUFBTSxjQUFjLENBQUMsTUFBTSxTQUFTO0FBQ2xDLGFBQU8sV0FBVyxVQUFVLG9CQUFvQjtBQUFBLElBQ2xEO0FBU0EsUUFBTSxRQUFRLENBQUMsT0FBTyxZQUFZO0FBQ2hDLFVBQUksT0FBTyxVQUFVLFVBQVU7QUFDN0IsY0FBTSxJQUFJLFVBQVUsbUJBQW1CO0FBQUEsTUFDekM7QUFFQSxjQUFRLGFBQWEsVUFBVTtBQUUvQixZQUFNLE9BQU8sRUFBRSxHQUFHLFFBQVE7QUFDMUIsWUFBTSxNQUFNLE9BQU8sS0FBSyxjQUFjLFdBQVcsS0FBSyxJQUFJLFlBQVksS0FBSyxTQUFTLElBQUk7QUFFeEYsVUFBSSxNQUFNLE1BQU07QUFDaEIsVUFBSSxNQUFNLEtBQUs7QUFDYixjQUFNLElBQUksWUFBWSxpQkFBaUIsd0NBQXdDLEtBQUs7QUFBQSxNQUN0RjtBQUVBLFlBQU0sTUFBTSxFQUFFLE1BQU0sT0FBTyxPQUFPLElBQUksUUFBUSxLQUFLLFdBQVcsR0FBRztBQUNqRSxZQUFNLFNBQVMsQ0FBQyxHQUFHO0FBRW5CLFlBQU0sVUFBVSxLQUFLLFVBQVUsS0FBSztBQUNwQyxZQUFNLFFBQVEsTUFBTSxVQUFVLE9BQU87QUFHckMsWUFBTSxpQkFBaUIsVUFBVSxVQUFVLEtBQUs7QUFDaEQsWUFBTSxnQkFBZ0IsVUFBVSxhQUFhLGNBQWM7QUFFM0QsWUFBTTtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsSUFBSTtBQUVKLFlBQU0sV0FBVyxDQUFBQyxVQUFRO0FBQ3ZCLGVBQU8sSUFBSSxnQkFBZ0IsZUFBZUEsTUFBSyxNQUFNLGFBQWE7QUFBQSxNQUNwRTtBQUVBLFlBQU0sUUFBUSxLQUFLLE1BQU0sS0FBSztBQUM5QixZQUFNLGFBQWEsS0FBSyxNQUFNLFFBQVE7QUFDdEMsVUFBSSxPQUFPLEtBQUssU0FBUyxPQUFPLFNBQVMsSUFBSSxJQUFJO0FBRWpELFVBQUksS0FBSyxTQUFTO0FBQ2hCLGVBQU8sSUFBSTtBQUFBLE1BQ2I7QUFHQSxVQUFJLE9BQU8sS0FBSyxVQUFVLFdBQVc7QUFDbkMsYUFBSyxZQUFZLEtBQUs7QUFBQSxNQUN4QjtBQUVBLFlBQU0sUUFBUTtBQUFBLFFBQ1o7QUFBQSxRQUNBLE9BQU87QUFBQSxRQUNQLE9BQU87QUFBQSxRQUNQLEtBQUssS0FBSyxRQUFRO0FBQUEsUUFDbEIsVUFBVTtBQUFBLFFBQ1YsUUFBUTtBQUFBLFFBQ1IsUUFBUTtBQUFBLFFBQ1IsV0FBVztBQUFBLFFBQ1gsU0FBUztBQUFBLFFBQ1QsVUFBVTtBQUFBLFFBQ1YsUUFBUTtBQUFBLFFBQ1IsUUFBUTtBQUFBLFFBQ1IsUUFBUTtBQUFBLFFBQ1IsVUFBVTtBQUFBLFFBQ1Y7QUFBQSxNQUNGO0FBRUEsY0FBUSxNQUFNLGFBQWEsT0FBTyxLQUFLO0FBQ3ZDLFlBQU0sTUFBTTtBQUVaLFlBQU0sV0FBVyxDQUFDO0FBQ2xCLFlBQU0sU0FBUyxDQUFDO0FBQ2hCLFlBQU0sUUFBUSxDQUFDO0FBQ2YsVUFBSSxPQUFPO0FBQ1gsVUFBSTtBQU1KLFlBQU0sTUFBTSxNQUFNLE1BQU0sVUFBVSxNQUFNO0FBQ3hDLFlBQU0sT0FBTyxNQUFNLE9BQU8sQ0FBQyxJQUFJLE1BQU0sTUFBTSxNQUFNLFFBQVE7QUFDekQsWUFBTSxVQUFVLE1BQU0sVUFBVSxNQUFNLE1BQU0sRUFBRSxNQUFNLFVBQVU7QUFDOUQsWUFBTSxZQUFZLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ25ELFlBQU0sVUFBVSxDQUFDQyxTQUFRLElBQUksTUFBTSxNQUFNO0FBQ3ZDLGNBQU0sWUFBWUE7QUFDbEIsY0FBTSxTQUFTO0FBQUEsTUFDakI7QUFFQSxZQUFNLFNBQVMsV0FBUztBQUN0QixjQUFNLFVBQVUsTUFBTSxVQUFVLE9BQU8sTUFBTSxTQUFTLE1BQU07QUFDNUQsZ0JBQVEsTUFBTSxLQUFLO0FBQUEsTUFDckI7QUFFQSxZQUFNLFNBQVMsTUFBTTtBQUNuQixZQUFJLFFBQVE7QUFFWixlQUFPLEtBQUssTUFBTSxRQUFRLEtBQUssQ0FBQyxNQUFNLE9BQU8sS0FBSyxDQUFDLE1BQU0sTUFBTTtBQUM3RCxrQkFBUTtBQUNSLGdCQUFNO0FBQ047QUFBQSxRQUNGO0FBRUEsWUFBSSxRQUFRLE1BQU0sR0FBRztBQUNuQixpQkFBTztBQUFBLFFBQ1Q7QUFFQSxjQUFNLFVBQVU7QUFDaEIsY0FBTTtBQUNOLGVBQU87QUFBQSxNQUNUO0FBRUEsWUFBTSxZQUFZLFVBQVE7QUFDeEIsY0FBTTtBQUNOLGNBQU0sS0FBSyxJQUFJO0FBQUEsTUFDakI7QUFFQSxZQUFNLFlBQVksVUFBUTtBQUN4QixjQUFNO0FBQ04sY0FBTSxJQUFJO0FBQUEsTUFDWjtBQVVBLFlBQU0sT0FBTyxTQUFPO0FBQ2xCLFlBQUksS0FBSyxTQUFTLFlBQVk7QUFDNUIsZ0JBQU0sVUFBVSxNQUFNLFNBQVMsTUFBTSxJQUFJLFNBQVMsV0FBVyxJQUFJLFNBQVM7QUFDMUUsZ0JBQU0sWUFBWSxJQUFJLFlBQVksUUFBUyxTQUFTLFdBQVcsSUFBSSxTQUFTLFVBQVUsSUFBSSxTQUFTO0FBRW5HLGNBQUksSUFBSSxTQUFTLFdBQVcsSUFBSSxTQUFTLFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVztBQUMxRSxrQkFBTSxTQUFTLE1BQU0sT0FBTyxNQUFNLEdBQUcsQ0FBQyxLQUFLLE9BQU8sTUFBTTtBQUN4RCxpQkFBSyxPQUFPO0FBQ1osaUJBQUssUUFBUTtBQUNiLGlCQUFLLFNBQVM7QUFDZCxrQkFBTSxVQUFVLEtBQUs7QUFBQSxVQUN2QjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLFNBQVMsVUFBVSxJQUFJLFNBQVMsU0FBUztBQUMzQyxtQkFBUyxTQUFTLFNBQVMsR0FBRyxTQUFTLElBQUk7QUFBQSxRQUM3QztBQUVBLFlBQUksSUFBSSxTQUFTLElBQUk7QUFBUSxpQkFBTyxHQUFHO0FBQ3ZDLFlBQUksUUFBUSxLQUFLLFNBQVMsVUFBVSxJQUFJLFNBQVMsUUFBUTtBQUN2RCxlQUFLLFNBQVMsSUFBSTtBQUNsQixlQUFLLFVBQVUsS0FBSyxVQUFVLE1BQU0sSUFBSTtBQUN4QztBQUFBLFFBQ0Y7QUFFQSxZQUFJLE9BQU87QUFDWCxlQUFPLEtBQUssR0FBRztBQUNmLGVBQU87QUFBQSxNQUNUO0FBRUEsWUFBTSxjQUFjLENBQUMsTUFBTUEsV0FBVTtBQUNuQyxjQUFNLFFBQVEsRUFBRSxHQUFHLGNBQWNBLFNBQVEsWUFBWSxHQUFHLE9BQU8sR0FBRztBQUVsRSxjQUFNLE9BQU87QUFDYixjQUFNLFNBQVMsTUFBTTtBQUNyQixjQUFNLFNBQVMsTUFBTTtBQUNyQixjQUFNLFVBQVUsS0FBSyxVQUFVLE1BQU0sTUFBTSxNQUFNO0FBRWpELGtCQUFVLFFBQVE7QUFDbEIsYUFBSyxFQUFFLE1BQU0sT0FBQUEsUUFBTyxRQUFRLE1BQU0sU0FBUyxLQUFLLFNBQVMsQ0FBQztBQUMxRCxhQUFLLEVBQUUsTUFBTSxTQUFTLFNBQVMsTUFBTSxPQUFPLFFBQVEsR0FBRyxPQUFPLENBQUM7QUFDL0QsaUJBQVMsS0FBSyxLQUFLO0FBQUEsTUFDckI7QUFFQSxZQUFNLGVBQWUsV0FBUztBQUM1QixZQUFJLFNBQVMsTUFBTSxTQUFTLEtBQUssVUFBVSxNQUFNO0FBQ2pELFlBQUk7QUFFSixZQUFJLE1BQU0sU0FBUyxVQUFVO0FBQzNCLGNBQUksY0FBYztBQUVsQixjQUFJLE1BQU0sU0FBUyxNQUFNLE1BQU0sU0FBUyxLQUFLLE1BQU0sTUFBTSxTQUFTLEdBQUcsR0FBRztBQUN0RSwwQkFBYyxTQUFTLElBQUk7QUFBQSxVQUM3QjtBQUVBLGNBQUksZ0JBQWdCLFFBQVEsSUFBSSxLQUFLLFFBQVEsS0FBSyxVQUFVLENBQUMsR0FBRztBQUM5RCxxQkFBUyxNQUFNLFFBQVEsT0FBTztBQUFBLFVBQ2hDO0FBRUEsY0FBSSxNQUFNLE1BQU0sU0FBUyxHQUFHLE1BQU0sT0FBTyxVQUFVLE1BQU0sZUFBZSxLQUFLLElBQUksR0FBRztBQU1sRixrQkFBTSxhQUFhLE1BQU0sTUFBTSxFQUFFLEdBQUcsU0FBUyxXQUFXLE1BQU0sQ0FBQyxFQUFFO0FBRWpFLHFCQUFTLE1BQU0sUUFBUSxJQUFJLGNBQWM7QUFBQSxVQUMzQztBQUVBLGNBQUksTUFBTSxLQUFLLFNBQVMsT0FBTztBQUM3QixrQkFBTSxpQkFBaUI7QUFBQSxVQUN6QjtBQUFBLFFBQ0Y7QUFFQSxhQUFLLEVBQUUsTUFBTSxTQUFTLFNBQVMsTUFBTSxPQUFPLE9BQU8sQ0FBQztBQUNwRCxrQkFBVSxRQUFRO0FBQUEsTUFDcEI7QUFNQSxVQUFJLEtBQUssY0FBYyxTQUFTLENBQUMsc0JBQXNCLEtBQUssS0FBSyxHQUFHO0FBQ2xFLFlBQUksY0FBYztBQUVsQixZQUFJLFNBQVMsTUFBTSxRQUFRLDZCQUE2QixDQUFDLEdBQUcsS0FBSyxPQUFPLE9BQU8sTUFBTSxVQUFVO0FBQzdGLGNBQUksVUFBVSxNQUFNO0FBQ2xCLDBCQUFjO0FBQ2QsbUJBQU87QUFBQSxVQUNUO0FBRUEsY0FBSSxVQUFVLEtBQUs7QUFDakIsZ0JBQUksS0FBSztBQUNQLHFCQUFPLE1BQU0sU0FBUyxPQUFPLE1BQU0sT0FBTyxLQUFLLE1BQU0sSUFBSTtBQUFBLFlBQzNEO0FBQ0EsZ0JBQUksVUFBVSxHQUFHO0FBQ2YscUJBQU8sY0FBYyxPQUFPLE1BQU0sT0FBTyxLQUFLLE1BQU0sSUFBSTtBQUFBLFlBQzFEO0FBQ0EsbUJBQU8sTUFBTSxPQUFPLE1BQU0sTUFBTTtBQUFBLFVBQ2xDO0FBRUEsY0FBSSxVQUFVLEtBQUs7QUFDakIsbUJBQU8sWUFBWSxPQUFPLE1BQU0sTUFBTTtBQUFBLFVBQ3hDO0FBRUEsY0FBSSxVQUFVLEtBQUs7QUFDakIsZ0JBQUksS0FBSztBQUNQLHFCQUFPLE1BQU0sU0FBUyxPQUFPLE9BQU87QUFBQSxZQUN0QztBQUNBLG1CQUFPO0FBQUEsVUFDVDtBQUNBLGlCQUFPLE1BQU0sSUFBSSxLQUFLO0FBQUEsUUFDeEIsQ0FBQztBQUVELFlBQUksZ0JBQWdCLE1BQU07QUFDeEIsY0FBSSxLQUFLLGFBQWEsTUFBTTtBQUMxQixxQkFBUyxPQUFPLFFBQVEsT0FBTyxFQUFFO0FBQUEsVUFDbkMsT0FBTztBQUNMLHFCQUFTLE9BQU8sUUFBUSxRQUFRLE9BQUs7QUFDbkMscUJBQU8sRUFBRSxTQUFTLE1BQU0sSUFBSSxTQUFVLElBQUksT0FBTztBQUFBLFlBQ25ELENBQUM7QUFBQSxVQUNIO0FBQUEsUUFDRjtBQUVBLFlBQUksV0FBVyxTQUFTLEtBQUssYUFBYSxNQUFNO0FBQzlDLGdCQUFNLFNBQVM7QUFDZixpQkFBTztBQUFBLFFBQ1Q7QUFFQSxjQUFNLFNBQVMsTUFBTSxXQUFXLFFBQVEsT0FBTyxPQUFPO0FBQ3RELGVBQU87QUFBQSxNQUNUO0FBTUEsYUFBTyxDQUFDLElBQUksR0FBRztBQUNiLGdCQUFRLFFBQVE7QUFFaEIsWUFBSSxVQUFVLE1BQVU7QUFDdEI7QUFBQSxRQUNGO0FBTUEsWUFBSSxVQUFVLE1BQU07QUFDbEIsZ0JBQU0sT0FBTyxLQUFLO0FBRWxCLGNBQUksU0FBUyxPQUFPLEtBQUssU0FBUyxNQUFNO0FBQ3RDO0FBQUEsVUFDRjtBQUVBLGNBQUksU0FBUyxPQUFPLFNBQVMsS0FBSztBQUNoQztBQUFBLFVBQ0Y7QUFFQSxjQUFJLENBQUMsTUFBTTtBQUNULHFCQUFTO0FBQ1QsaUJBQUssRUFBRSxNQUFNLFFBQVEsTUFBTSxDQUFDO0FBQzVCO0FBQUEsVUFDRjtBQUdBLGdCQUFNLFFBQVEsT0FBTyxLQUFLLFVBQVUsQ0FBQztBQUNyQyxjQUFJLFVBQVU7QUFFZCxjQUFJLFNBQVMsTUFBTSxHQUFHLFNBQVMsR0FBRztBQUNoQyxzQkFBVSxNQUFNLEdBQUc7QUFDbkIsa0JBQU0sU0FBUztBQUNmLGdCQUFJLFVBQVUsTUFBTSxHQUFHO0FBQ3JCLHVCQUFTO0FBQUEsWUFDWDtBQUFBLFVBQ0Y7QUFFQSxjQUFJLEtBQUssYUFBYSxNQUFNO0FBQzFCLG9CQUFRLFFBQVE7QUFBQSxVQUNsQixPQUFPO0FBQ0wscUJBQVMsUUFBUTtBQUFBLFVBQ25CO0FBRUEsY0FBSSxNQUFNLGFBQWEsR0FBRztBQUN4QixpQkFBSyxFQUFFLE1BQU0sUUFBUSxNQUFNLENBQUM7QUFDNUI7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQU9BLFlBQUksTUFBTSxXQUFXLE1BQU0sVUFBVSxPQUFPLEtBQUssVUFBVSxPQUFPLEtBQUssVUFBVSxPQUFPO0FBQ3RGLGNBQUksS0FBSyxVQUFVLFNBQVMsVUFBVSxLQUFLO0FBQ3pDLGtCQUFNLFFBQVEsS0FBSyxNQUFNLE1BQU0sQ0FBQztBQUNoQyxnQkFBSSxNQUFNLFNBQVMsR0FBRyxHQUFHO0FBQ3ZCLG1CQUFLLFFBQVE7QUFFYixrQkFBSSxNQUFNLFNBQVMsR0FBRyxHQUFHO0FBQ3ZCLHNCQUFNLE1BQU0sS0FBSyxNQUFNLFlBQVksR0FBRztBQUN0QyxzQkFBTSxNQUFNLEtBQUssTUFBTSxNQUFNLEdBQUcsR0FBRztBQUNuQyxzQkFBTUMsUUFBTyxLQUFLLE1BQU0sTUFBTSxNQUFNLENBQUM7QUFDckMsc0JBQU0sUUFBUSxtQkFBbUJBO0FBQ2pDLG9CQUFJLE9BQU87QUFDVCx1QkFBSyxRQUFRLE1BQU07QUFDbkIsd0JBQU0sWUFBWTtBQUNsQiwwQkFBUTtBQUVSLHNCQUFJLENBQUMsSUFBSSxVQUFVLE9BQU8sUUFBUSxJQUFJLE1BQU0sR0FBRztBQUM3Qyx3QkFBSSxTQUFTO0FBQUEsa0JBQ2Y7QUFDQTtBQUFBLGdCQUNGO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsY0FBSyxVQUFVLE9BQU8sS0FBSyxNQUFNLE9BQVMsVUFBVSxPQUFPLEtBQUssTUFBTSxLQUFNO0FBQzFFLG9CQUFRLEtBQUs7QUFBQSxVQUNmO0FBRUEsY0FBSSxVQUFVLFFBQVEsS0FBSyxVQUFVLE9BQU8sS0FBSyxVQUFVLE9BQU87QUFDaEUsb0JBQVEsS0FBSztBQUFBLFVBQ2Y7QUFFQSxjQUFJLEtBQUssVUFBVSxRQUFRLFVBQVUsT0FBTyxLQUFLLFVBQVUsS0FBSztBQUM5RCxvQkFBUTtBQUFBLFVBQ1Y7QUFFQSxlQUFLLFNBQVM7QUFDZCxpQkFBTyxFQUFFLE1BQU0sQ0FBQztBQUNoQjtBQUFBLFFBQ0Y7QUFPQSxZQUFJLE1BQU0sV0FBVyxLQUFLLFVBQVUsS0FBSztBQUN2QyxrQkFBUSxNQUFNLFlBQVksS0FBSztBQUMvQixlQUFLLFNBQVM7QUFDZCxpQkFBTyxFQUFFLE1BQU0sQ0FBQztBQUNoQjtBQUFBLFFBQ0Y7QUFNQSxZQUFJLFVBQVUsS0FBSztBQUNqQixnQkFBTSxTQUFTLE1BQU0sV0FBVyxJQUFJLElBQUk7QUFDeEMsY0FBSSxLQUFLLGVBQWUsTUFBTTtBQUM1QixpQkFBSyxFQUFFLE1BQU0sUUFBUSxNQUFNLENBQUM7QUFBQSxVQUM5QjtBQUNBO0FBQUEsUUFDRjtBQU1BLFlBQUksVUFBVSxLQUFLO0FBQ2pCLG9CQUFVLFFBQVE7QUFDbEIsZUFBSyxFQUFFLE1BQU0sU0FBUyxNQUFNLENBQUM7QUFDN0I7QUFBQSxRQUNGO0FBRUEsWUFBSSxVQUFVLEtBQUs7QUFDakIsY0FBSSxNQUFNLFdBQVcsS0FBSyxLQUFLLG1CQUFtQixNQUFNO0FBQ3RELGtCQUFNLElBQUksWUFBWSxZQUFZLFdBQVcsR0FBRyxDQUFDO0FBQUEsVUFDbkQ7QUFFQSxnQkFBTSxVQUFVLFNBQVMsU0FBUyxTQUFTO0FBQzNDLGNBQUksV0FBVyxNQUFNLFdBQVcsUUFBUSxTQUFTLEdBQUc7QUFDbEQseUJBQWEsU0FBUyxJQUFJLENBQUM7QUFDM0I7QUFBQSxVQUNGO0FBRUEsZUFBSyxFQUFFLE1BQU0sU0FBUyxPQUFPLFFBQVEsTUFBTSxTQUFTLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLG9CQUFVLFFBQVE7QUFDbEI7QUFBQSxRQUNGO0FBTUEsWUFBSSxVQUFVLEtBQUs7QUFDakIsY0FBSSxLQUFLLGNBQWMsUUFBUSxDQUFDLFVBQVUsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUN6RCxnQkFBSSxLQUFLLGNBQWMsUUFBUSxLQUFLLG1CQUFtQixNQUFNO0FBQzNELG9CQUFNLElBQUksWUFBWSxZQUFZLFdBQVcsR0FBRyxDQUFDO0FBQUEsWUFDbkQ7QUFFQSxvQkFBUSxLQUFLO0FBQUEsVUFDZixPQUFPO0FBQ0wsc0JBQVUsVUFBVTtBQUFBLFVBQ3RCO0FBRUEsZUFBSyxFQUFFLE1BQU0sV0FBVyxNQUFNLENBQUM7QUFDL0I7QUFBQSxRQUNGO0FBRUEsWUFBSSxVQUFVLEtBQUs7QUFDakIsY0FBSSxLQUFLLGNBQWMsUUFBUyxRQUFRLEtBQUssU0FBUyxhQUFhLEtBQUssTUFBTSxXQUFXLEdBQUk7QUFDM0YsaUJBQUssRUFBRSxNQUFNLFFBQVEsT0FBTyxRQUFRLEtBQUssUUFBUSxDQUFDO0FBQ2xEO0FBQUEsVUFDRjtBQUVBLGNBQUksTUFBTSxhQUFhLEdBQUc7QUFDeEIsZ0JBQUksS0FBSyxtQkFBbUIsTUFBTTtBQUNoQyxvQkFBTSxJQUFJLFlBQVksWUFBWSxXQUFXLEdBQUcsQ0FBQztBQUFBLFlBQ25EO0FBRUEsaUJBQUssRUFBRSxNQUFNLFFBQVEsT0FBTyxRQUFRLEtBQUssUUFBUSxDQUFDO0FBQ2xEO0FBQUEsVUFDRjtBQUVBLG9CQUFVLFVBQVU7QUFFcEIsZ0JBQU0sWUFBWSxLQUFLLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLGNBQUksS0FBSyxVQUFVLFFBQVEsVUFBVSxPQUFPLE9BQU8sQ0FBQyxVQUFVLFNBQVMsR0FBRyxHQUFHO0FBQzNFLG9CQUFRLElBQUk7QUFBQSxVQUNkO0FBRUEsZUFBSyxTQUFTO0FBQ2QsaUJBQU8sRUFBRSxNQUFNLENBQUM7QUFJaEIsY0FBSSxLQUFLLG9CQUFvQixTQUFTLE1BQU0sY0FBYyxTQUFTLEdBQUc7QUFDcEU7QUFBQSxVQUNGO0FBRUEsZ0JBQU0sVUFBVSxNQUFNLFlBQVksS0FBSyxLQUFLO0FBQzVDLGdCQUFNLFNBQVMsTUFBTSxPQUFPLE1BQU0sR0FBRyxDQUFDLEtBQUssTUFBTSxNQUFNO0FBSXZELGNBQUksS0FBSyxvQkFBb0IsTUFBTTtBQUNqQyxrQkFBTSxVQUFVO0FBQ2hCLGlCQUFLLFFBQVE7QUFDYjtBQUFBLFVBQ0Y7QUFHQSxlQUFLLFFBQVEsSUFBSSxVQUFVLFdBQVcsS0FBSztBQUMzQyxnQkFBTSxVQUFVLEtBQUs7QUFDckI7QUFBQSxRQUNGO0FBTUEsWUFBSSxVQUFVLE9BQU8sS0FBSyxZQUFZLE1BQU07QUFDMUMsb0JBQVUsUUFBUTtBQUVsQixnQkFBTSxPQUFPO0FBQUEsWUFDWCxNQUFNO0FBQUEsWUFDTjtBQUFBLFlBQ0EsUUFBUTtBQUFBLFlBQ1IsYUFBYSxNQUFNLE9BQU87QUFBQSxZQUMxQixhQUFhLE1BQU0sT0FBTztBQUFBLFVBQzVCO0FBRUEsaUJBQU8sS0FBSyxJQUFJO0FBQ2hCLGVBQUssSUFBSTtBQUNUO0FBQUEsUUFDRjtBQUVBLFlBQUksVUFBVSxLQUFLO0FBQ2pCLGdCQUFNLFFBQVEsT0FBTyxPQUFPLFNBQVM7QUFFckMsY0FBSSxLQUFLLFlBQVksUUFBUSxDQUFDLE9BQU87QUFDbkMsaUJBQUssRUFBRSxNQUFNLFFBQVEsT0FBTyxRQUFRLE1BQU0sQ0FBQztBQUMzQztBQUFBLFVBQ0Y7QUFFQSxjQUFJLFNBQVM7QUFFYixjQUFJLE1BQU0sU0FBUyxNQUFNO0FBQ3ZCLGtCQUFNLE1BQU0sT0FBTyxNQUFNO0FBQ3pCLGtCQUFNLFFBQVEsQ0FBQztBQUVmLHFCQUFTLElBQUksSUFBSSxTQUFTLEdBQUcsS0FBSyxHQUFHLEtBQUs7QUFDeEMscUJBQU8sSUFBSTtBQUNYLGtCQUFJLElBQUksR0FBRyxTQUFTLFNBQVM7QUFDM0I7QUFBQSxjQUNGO0FBQ0Esa0JBQUksSUFBSSxHQUFHLFNBQVMsUUFBUTtBQUMxQixzQkFBTSxRQUFRLElBQUksR0FBRyxLQUFLO0FBQUEsY0FDNUI7QUFBQSxZQUNGO0FBRUEscUJBQVMsWUFBWSxPQUFPLElBQUk7QUFDaEMsa0JBQU0sWUFBWTtBQUFBLFVBQ3BCO0FBRUEsY0FBSSxNQUFNLFVBQVUsUUFBUSxNQUFNLFNBQVMsTUFBTTtBQUMvQyxrQkFBTSxNQUFNLE1BQU0sT0FBTyxNQUFNLEdBQUcsTUFBTSxXQUFXO0FBQ25ELGtCQUFNLE9BQU8sTUFBTSxPQUFPLE1BQU0sTUFBTSxXQUFXO0FBQ2pELGtCQUFNLFFBQVEsTUFBTSxTQUFTO0FBQzdCLG9CQUFRLFNBQVM7QUFDakIsa0JBQU0sU0FBUztBQUNmLHVCQUFXLEtBQUssTUFBTTtBQUNwQixvQkFBTSxVQUFXLEVBQUUsVUFBVSxFQUFFO0FBQUEsWUFDakM7QUFBQSxVQUNGO0FBRUEsZUFBSyxFQUFFLE1BQU0sU0FBUyxPQUFPLE9BQU8sQ0FBQztBQUNyQyxvQkFBVSxRQUFRO0FBQ2xCLGlCQUFPLElBQUk7QUFDWDtBQUFBLFFBQ0Y7QUFNQSxZQUFJLFVBQVUsS0FBSztBQUNqQixjQUFJLFNBQVMsU0FBUyxHQUFHO0FBQ3ZCLHFCQUFTLFNBQVMsU0FBUyxHQUFHO0FBQUEsVUFDaEM7QUFDQSxlQUFLLEVBQUUsTUFBTSxRQUFRLE1BQU0sQ0FBQztBQUM1QjtBQUFBLFFBQ0Y7QUFNQSxZQUFJLFVBQVUsS0FBSztBQUNqQixjQUFJLFNBQVM7QUFFYixnQkFBTSxRQUFRLE9BQU8sT0FBTyxTQUFTO0FBQ3JDLGNBQUksU0FBUyxNQUFNLE1BQU0sU0FBUyxPQUFPLFVBQVU7QUFDakQsa0JBQU0sUUFBUTtBQUNkLHFCQUFTO0FBQUEsVUFDWDtBQUVBLGVBQUssRUFBRSxNQUFNLFNBQVMsT0FBTyxPQUFPLENBQUM7QUFDckM7QUFBQSxRQUNGO0FBTUEsWUFBSSxVQUFVLEtBQUs7QUFLakIsY0FBSSxLQUFLLFNBQVMsU0FBUyxNQUFNLFVBQVUsTUFBTSxRQUFRLEdBQUc7QUFDMUQsa0JBQU0sUUFBUSxNQUFNLFFBQVE7QUFDNUIsa0JBQU0sV0FBVztBQUNqQixrQkFBTSxTQUFTO0FBQ2YsbUJBQU8sSUFBSTtBQUNYLG1CQUFPO0FBQ1A7QUFBQSxVQUNGO0FBRUEsZUFBSyxFQUFFLE1BQU0sU0FBUyxPQUFPLFFBQVEsY0FBYyxDQUFDO0FBQ3BEO0FBQUEsUUFDRjtBQU1BLFlBQUksVUFBVSxLQUFLO0FBQ2pCLGNBQUksTUFBTSxTQUFTLEtBQUssS0FBSyxTQUFTLE9BQU87QUFDM0MsZ0JBQUksS0FBSyxVQUFVO0FBQUssbUJBQUssU0FBUztBQUN0QyxrQkFBTSxRQUFRLE9BQU8sT0FBTyxTQUFTO0FBQ3JDLGlCQUFLLE9BQU87QUFDWixpQkFBSyxVQUFVO0FBQ2YsaUJBQUssU0FBUztBQUNkLGtCQUFNLE9BQU87QUFDYjtBQUFBLFVBQ0Y7QUFFQSxjQUFLLE1BQU0sU0FBUyxNQUFNLFdBQVksS0FBSyxLQUFLLFNBQVMsU0FBUyxLQUFLLFNBQVMsU0FBUztBQUN2RixpQkFBSyxFQUFFLE1BQU0sUUFBUSxPQUFPLFFBQVEsWUFBWSxDQUFDO0FBQ2pEO0FBQUEsVUFDRjtBQUVBLGVBQUssRUFBRSxNQUFNLE9BQU8sT0FBTyxRQUFRLFlBQVksQ0FBQztBQUNoRDtBQUFBLFFBQ0Y7QUFNQSxZQUFJLFVBQVUsS0FBSztBQUNqQixnQkFBTSxVQUFVLFFBQVEsS0FBSyxVQUFVO0FBQ3ZDLGNBQUksQ0FBQyxXQUFXLEtBQUssY0FBYyxRQUFRLEtBQUssTUFBTSxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUs7QUFDNUUsd0JBQVksU0FBUyxLQUFLO0FBQzFCO0FBQUEsVUFDRjtBQUVBLGNBQUksUUFBUSxLQUFLLFNBQVMsU0FBUztBQUNqQyxrQkFBTSxPQUFPLEtBQUs7QUFDbEIsZ0JBQUksU0FBUztBQUViLGdCQUFJLFNBQVMsT0FBTyxDQUFDLE1BQU0sb0JBQW9CLEdBQUc7QUFDaEQsb0JBQU0sSUFBSSxNQUFNLHlEQUF5RDtBQUFBLFlBQzNFO0FBRUEsZ0JBQUssS0FBSyxVQUFVLE9BQU8sQ0FBQyxTQUFTLEtBQUssSUFBSSxLQUFPLFNBQVMsT0FBTyxDQUFDLGVBQWUsS0FBSyxVQUFVLENBQUMsR0FBSTtBQUN2Ryx1QkFBUyxLQUFLO0FBQUEsWUFDaEI7QUFFQSxpQkFBSyxFQUFFLE1BQU0sUUFBUSxPQUFPLE9BQU8sQ0FBQztBQUNwQztBQUFBLFVBQ0Y7QUFFQSxjQUFJLEtBQUssUUFBUSxTQUFTLEtBQUssU0FBUyxXQUFXLEtBQUssU0FBUyxRQUFRO0FBQ3ZFLGlCQUFLLEVBQUUsTUFBTSxTQUFTLE9BQU8sUUFBUSxhQUFhLENBQUM7QUFDbkQ7QUFBQSxVQUNGO0FBRUEsZUFBSyxFQUFFLE1BQU0sU0FBUyxPQUFPLFFBQVEsTUFBTSxDQUFDO0FBQzVDO0FBQUEsUUFDRjtBQU1BLFlBQUksVUFBVSxLQUFLO0FBQ2pCLGNBQUksS0FBSyxjQUFjLFFBQVEsS0FBSyxNQUFNLEtBQUs7QUFDN0MsZ0JBQUksS0FBSyxDQUFDLE1BQU0sT0FBTyxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQyxHQUFHO0FBQzlDLDBCQUFZLFVBQVUsS0FBSztBQUMzQjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsY0FBSSxLQUFLLGFBQWEsUUFBUSxNQUFNLFVBQVUsR0FBRztBQUMvQyxtQkFBTztBQUNQO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFNQSxZQUFJLFVBQVUsS0FBSztBQUNqQixjQUFJLEtBQUssY0FBYyxRQUFRLEtBQUssTUFBTSxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUs7QUFDaEUsd0JBQVksUUFBUSxLQUFLO0FBQ3pCO0FBQUEsVUFDRjtBQUVBLGNBQUssUUFBUSxLQUFLLFVBQVUsT0FBUSxLQUFLLFVBQVUsT0FBTztBQUN4RCxpQkFBSyxFQUFFLE1BQU0sUUFBUSxPQUFPLFFBQVEsYUFBYSxDQUFDO0FBQ2xEO0FBQUEsVUFDRjtBQUVBLGNBQUssU0FBUyxLQUFLLFNBQVMsYUFBYSxLQUFLLFNBQVMsV0FBVyxLQUFLLFNBQVMsWUFBYSxNQUFNLFNBQVMsR0FBRztBQUM3RyxpQkFBSyxFQUFFLE1BQU0sUUFBUSxNQUFNLENBQUM7QUFDNUI7QUFBQSxVQUNGO0FBRUEsZUFBSyxFQUFFLE1BQU0sUUFBUSxPQUFPLGFBQWEsQ0FBQztBQUMxQztBQUFBLFFBQ0Y7QUFNQSxZQUFJLFVBQVUsS0FBSztBQUNqQixjQUFJLEtBQUssY0FBYyxRQUFRLEtBQUssTUFBTSxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUs7QUFDaEUsaUJBQUssRUFBRSxNQUFNLE1BQU0sU0FBUyxNQUFNLE9BQU8sUUFBUSxHQUFHLENBQUM7QUFDckQ7QUFBQSxVQUNGO0FBRUEsZUFBSyxFQUFFLE1BQU0sUUFBUSxNQUFNLENBQUM7QUFDNUI7QUFBQSxRQUNGO0FBTUEsWUFBSSxVQUFVLEtBQUs7QUFDakIsY0FBSSxVQUFVLE9BQU8sVUFBVSxLQUFLO0FBQ2xDLG9CQUFRLEtBQUs7QUFBQSxVQUNmO0FBRUEsZ0JBQU0sUUFBUSx3QkFBd0IsS0FBSyxVQUFVLENBQUM7QUFDdEQsY0FBSSxPQUFPO0FBQ1QscUJBQVMsTUFBTTtBQUNmLGtCQUFNLFNBQVMsTUFBTSxHQUFHO0FBQUEsVUFDMUI7QUFFQSxlQUFLLEVBQUUsTUFBTSxRQUFRLE1BQU0sQ0FBQztBQUM1QjtBQUFBLFFBQ0Y7QUFNQSxZQUFJLFNBQVMsS0FBSyxTQUFTLGNBQWMsS0FBSyxTQUFTLE9BQU87QUFDNUQsZUFBSyxPQUFPO0FBQ1osZUFBSyxPQUFPO0FBQ1osZUFBSyxTQUFTO0FBQ2QsZUFBSyxTQUFTO0FBQ2QsZ0JBQU0sWUFBWTtBQUNsQixnQkFBTSxXQUFXO0FBQ2pCLGtCQUFRLEtBQUs7QUFDYjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLE9BQU8sVUFBVTtBQUNyQixZQUFJLEtBQUssY0FBYyxRQUFRLFVBQVUsS0FBSyxJQUFJLEdBQUc7QUFDbkQsc0JBQVksUUFBUSxLQUFLO0FBQ3pCO0FBQUEsUUFDRjtBQUVBLFlBQUksS0FBSyxTQUFTLFFBQVE7QUFDeEIsY0FBSSxLQUFLLGVBQWUsTUFBTTtBQUM1QixvQkFBUSxLQUFLO0FBQ2I7QUFBQSxVQUNGO0FBRUEsZ0JBQU0sUUFBUSxLQUFLO0FBQ25CLGdCQUFNLFNBQVMsTUFBTTtBQUNyQixnQkFBTSxVQUFVLE1BQU0sU0FBUyxXQUFXLE1BQU0sU0FBUztBQUN6RCxnQkFBTSxZQUFZLFdBQVcsT0FBTyxTQUFTLFVBQVUsT0FBTyxTQUFTO0FBRXZFLGNBQUksS0FBSyxTQUFTLFNBQVMsQ0FBQyxXQUFZLEtBQUssTUFBTSxLQUFLLE9BQU8sTUFBTztBQUNwRSxpQkFBSyxFQUFFLE1BQU0sUUFBUSxPQUFPLFFBQVEsR0FBRyxDQUFDO0FBQ3hDO0FBQUEsVUFDRjtBQUVBLGdCQUFNLFVBQVUsTUFBTSxTQUFTLE1BQU0sTUFBTSxTQUFTLFdBQVcsTUFBTSxTQUFTO0FBQzlFLGdCQUFNLFlBQVksU0FBUyxXQUFXLE1BQU0sU0FBUyxVQUFVLE1BQU0sU0FBUztBQUM5RSxjQUFJLENBQUMsV0FBVyxNQUFNLFNBQVMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxXQUFXO0FBQ2hFLGlCQUFLLEVBQUUsTUFBTSxRQUFRLE9BQU8sUUFBUSxHQUFHLENBQUM7QUFDeEM7QUFBQSxVQUNGO0FBR0EsaUJBQU8sS0FBSyxNQUFNLEdBQUcsQ0FBQyxNQUFNLE9BQU87QUFDakMsa0JBQU0sUUFBUSxNQUFNLE1BQU0sUUFBUTtBQUNsQyxnQkFBSSxTQUFTLFVBQVUsS0FBSztBQUMxQjtBQUFBLFlBQ0Y7QUFDQSxtQkFBTyxLQUFLLE1BQU0sQ0FBQztBQUNuQixvQkFBUSxPQUFPLENBQUM7QUFBQSxVQUNsQjtBQUVBLGNBQUksTUFBTSxTQUFTLFNBQVMsSUFBSSxHQUFHO0FBQ2pDLGlCQUFLLE9BQU87QUFDWixpQkFBSyxTQUFTO0FBQ2QsaUJBQUssU0FBUyxTQUFTLElBQUk7QUFDM0Isa0JBQU0sU0FBUyxLQUFLO0FBQ3BCLGtCQUFNLFdBQVc7QUFDakIsb0JBQVEsS0FBSztBQUNiO0FBQUEsVUFDRjtBQUVBLGNBQUksTUFBTSxTQUFTLFdBQVcsTUFBTSxLQUFLLFNBQVMsU0FBUyxDQUFDLGFBQWEsSUFBSSxHQUFHO0FBQzlFLGtCQUFNLFNBQVMsTUFBTSxPQUFPLE1BQU0sR0FBRyxFQUFFLE1BQU0sU0FBUyxLQUFLLFFBQVEsTUFBTTtBQUN6RSxrQkFBTSxTQUFTLE1BQU0sTUFBTTtBQUUzQixpQkFBSyxPQUFPO0FBQ1osaUJBQUssU0FBUyxTQUFTLElBQUksS0FBSyxLQUFLLGdCQUFnQixNQUFNO0FBQzNELGlCQUFLLFNBQVM7QUFDZCxrQkFBTSxXQUFXO0FBQ2pCLGtCQUFNLFVBQVUsTUFBTSxTQUFTLEtBQUs7QUFDcEMsb0JBQVEsS0FBSztBQUNiO0FBQUEsVUFDRjtBQUVBLGNBQUksTUFBTSxTQUFTLFdBQVcsTUFBTSxLQUFLLFNBQVMsU0FBUyxLQUFLLE9BQU8sS0FBSztBQUMxRSxrQkFBTSxNQUFNLEtBQUssT0FBTyxTQUFTLE9BQU87QUFFeEMsa0JBQU0sU0FBUyxNQUFNLE9BQU8sTUFBTSxHQUFHLEVBQUUsTUFBTSxTQUFTLEtBQUssUUFBUSxNQUFNO0FBQ3pFLGtCQUFNLFNBQVMsTUFBTSxNQUFNO0FBRTNCLGlCQUFLLE9BQU87QUFDWixpQkFBSyxTQUFTLEdBQUcsU0FBUyxJQUFJLElBQUksaUJBQWlCLGdCQUFnQjtBQUNuRSxpQkFBSyxTQUFTO0FBRWQsa0JBQU0sVUFBVSxNQUFNLFNBQVMsS0FBSztBQUNwQyxrQkFBTSxXQUFXO0FBRWpCLG9CQUFRLFFBQVEsUUFBUSxDQUFDO0FBRXpCLGlCQUFLLEVBQUUsTUFBTSxTQUFTLE9BQU8sS0FBSyxRQUFRLEdBQUcsQ0FBQztBQUM5QztBQUFBLFVBQ0Y7QUFFQSxjQUFJLE1BQU0sU0FBUyxTQUFTLEtBQUssT0FBTyxLQUFLO0FBQzNDLGlCQUFLLE9BQU87QUFDWixpQkFBSyxTQUFTO0FBQ2QsaUJBQUssU0FBUyxRQUFRLGlCQUFpQixTQUFTLElBQUksSUFBSTtBQUN4RCxrQkFBTSxTQUFTLEtBQUs7QUFDcEIsa0JBQU0sV0FBVztBQUNqQixvQkFBUSxRQUFRLFFBQVEsQ0FBQztBQUN6QixpQkFBSyxFQUFFLE1BQU0sU0FBUyxPQUFPLEtBQUssUUFBUSxHQUFHLENBQUM7QUFDOUM7QUFBQSxVQUNGO0FBR0EsZ0JBQU0sU0FBUyxNQUFNLE9BQU8sTUFBTSxHQUFHLENBQUMsS0FBSyxPQUFPLE1BQU07QUFHeEQsZUFBSyxPQUFPO0FBQ1osZUFBSyxTQUFTLFNBQVMsSUFBSTtBQUMzQixlQUFLLFNBQVM7QUFHZCxnQkFBTSxVQUFVLEtBQUs7QUFDckIsZ0JBQU0sV0FBVztBQUNqQixrQkFBUSxLQUFLO0FBQ2I7QUFBQSxRQUNGO0FBRUEsY0FBTSxRQUFRLEVBQUUsTUFBTSxRQUFRLE9BQU8sUUFBUSxLQUFLO0FBRWxELFlBQUksS0FBSyxTQUFTLE1BQU07QUFDdEIsZ0JBQU0sU0FBUztBQUNmLGNBQUksS0FBSyxTQUFTLFNBQVMsS0FBSyxTQUFTLFNBQVM7QUFDaEQsa0JBQU0sU0FBUyxRQUFRLE1BQU07QUFBQSxVQUMvQjtBQUNBLGVBQUssS0FBSztBQUNWO0FBQUEsUUFDRjtBQUVBLFlBQUksU0FBUyxLQUFLLFNBQVMsYUFBYSxLQUFLLFNBQVMsWUFBWSxLQUFLLFVBQVUsTUFBTTtBQUNyRixnQkFBTSxTQUFTO0FBQ2YsZUFBSyxLQUFLO0FBQ1Y7QUFBQSxRQUNGO0FBRUEsWUFBSSxNQUFNLFVBQVUsTUFBTSxTQUFTLEtBQUssU0FBUyxXQUFXLEtBQUssU0FBUyxPQUFPO0FBQy9FLGNBQUksS0FBSyxTQUFTLE9BQU87QUFDdkIsa0JBQU0sVUFBVTtBQUNoQixpQkFBSyxVQUFVO0FBQUEsVUFFakIsV0FBVyxLQUFLLFFBQVEsTUFBTTtBQUM1QixrQkFBTSxVQUFVO0FBQ2hCLGlCQUFLLFVBQVU7QUFBQSxVQUVqQixPQUFPO0FBQ0wsa0JBQU0sVUFBVTtBQUNoQixpQkFBSyxVQUFVO0FBQUEsVUFDakI7QUFFQSxjQUFJLEtBQUssTUFBTSxLQUFLO0FBQ2xCLGtCQUFNLFVBQVU7QUFDaEIsaUJBQUssVUFBVTtBQUFBLFVBQ2pCO0FBQUEsUUFDRjtBQUVBLGFBQUssS0FBSztBQUFBLE1BQ1o7QUFFQSxhQUFPLE1BQU0sV0FBVyxHQUFHO0FBQ3pCLFlBQUksS0FBSyxtQkFBbUI7QUFBTSxnQkFBTSxJQUFJLFlBQVksWUFBWSxXQUFXLEdBQUcsQ0FBQztBQUNuRixjQUFNLFNBQVMsTUFBTSxXQUFXLE1BQU0sUUFBUSxHQUFHO0FBQ2pELGtCQUFVLFVBQVU7QUFBQSxNQUN0QjtBQUVBLGFBQU8sTUFBTSxTQUFTLEdBQUc7QUFDdkIsWUFBSSxLQUFLLG1CQUFtQjtBQUFNLGdCQUFNLElBQUksWUFBWSxZQUFZLFdBQVcsR0FBRyxDQUFDO0FBQ25GLGNBQU0sU0FBUyxNQUFNLFdBQVcsTUFBTSxRQUFRLEdBQUc7QUFDakQsa0JBQVUsUUFBUTtBQUFBLE1BQ3BCO0FBRUEsYUFBTyxNQUFNLFNBQVMsR0FBRztBQUN2QixZQUFJLEtBQUssbUJBQW1CO0FBQU0sZ0JBQU0sSUFBSSxZQUFZLFlBQVksV0FBVyxHQUFHLENBQUM7QUFDbkYsY0FBTSxTQUFTLE1BQU0sV0FBVyxNQUFNLFFBQVEsR0FBRztBQUNqRCxrQkFBVSxRQUFRO0FBQUEsTUFDcEI7QUFFQSxVQUFJLEtBQUssa0JBQWtCLFNBQVMsS0FBSyxTQUFTLFVBQVUsS0FBSyxTQUFTLFlBQVk7QUFDcEYsYUFBSyxFQUFFLE1BQU0sZUFBZSxPQUFPLElBQUksUUFBUSxHQUFHLGlCQUFpQixDQUFDO0FBQUEsTUFDdEU7QUFHQSxVQUFJLE1BQU0sY0FBYyxNQUFNO0FBQzVCLGNBQU0sU0FBUztBQUVmLG1CQUFXLFNBQVMsTUFBTSxRQUFRO0FBQ2hDLGdCQUFNLFVBQVUsTUFBTSxVQUFVLE9BQU8sTUFBTSxTQUFTLE1BQU07QUFFNUQsY0FBSSxNQUFNLFFBQVE7QUFDaEIsa0JBQU0sVUFBVSxNQUFNO0FBQUEsVUFDeEI7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUVBLGFBQU87QUFBQSxJQUNUO0FBUUEsVUFBTSxZQUFZLENBQUMsT0FBTyxZQUFZO0FBQ3BDLFlBQU0sT0FBTyxFQUFFLEdBQUcsUUFBUTtBQUMxQixZQUFNLE1BQU0sT0FBTyxLQUFLLGNBQWMsV0FBVyxLQUFLLElBQUksWUFBWSxLQUFLLFNBQVMsSUFBSTtBQUN4RixZQUFNLE1BQU0sTUFBTTtBQUNsQixVQUFJLE1BQU0sS0FBSztBQUNiLGNBQU0sSUFBSSxZQUFZLGlCQUFpQix3Q0FBd0MsS0FBSztBQUFBLE1BQ3RGO0FBRUEsY0FBUSxhQUFhLFVBQVU7QUFDL0IsWUFBTSxRQUFRLE1BQU0sVUFBVSxPQUFPO0FBR3JDLFlBQU07QUFBQSxRQUNKO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGLElBQUksVUFBVSxVQUFVLEtBQUs7QUFFN0IsWUFBTSxRQUFRLEtBQUssTUFBTSxVQUFVO0FBQ25DLFlBQU0sV0FBVyxLQUFLLE1BQU0sZ0JBQWdCO0FBQzVDLFlBQU0sVUFBVSxLQUFLLFVBQVUsS0FBSztBQUNwQyxZQUFNLFFBQVEsRUFBRSxTQUFTLE9BQU8sUUFBUSxHQUFHO0FBQzNDLFVBQUksT0FBTyxLQUFLLFNBQVMsT0FBTyxRQUFRO0FBRXhDLFVBQUksS0FBSyxTQUFTO0FBQ2hCLGVBQU8sSUFBSTtBQUFBLE1BQ2I7QUFFQSxZQUFNLFdBQVcsQ0FBQUYsVUFBUTtBQUN2QixZQUFJQSxNQUFLLGVBQWU7QUFBTSxpQkFBTztBQUNyQyxlQUFPLElBQUksZ0JBQWdCLGVBQWVBLE1BQUssTUFBTSxhQUFhO0FBQUEsTUFDcEU7QUFFQSxZQUFNLFNBQVMsU0FBTztBQUNwQixnQkFBUTtBQUFBLGVBQ0Q7QUFDSCxtQkFBTyxHQUFHLFFBQVEsV0FBVztBQUFBLGVBRTFCO0FBQ0gsbUJBQU8sR0FBRyxjQUFjLFdBQVc7QUFBQSxlQUVoQztBQUNILG1CQUFPLEdBQUcsUUFBUSxPQUFPLGNBQWMsV0FBVztBQUFBLGVBRS9DO0FBQ0gsbUJBQU8sR0FBRyxRQUFRLE9BQU8sZ0JBQWdCLFdBQVcsV0FBVztBQUFBLGVBRTVEO0FBQ0gsbUJBQU8sUUFBUSxTQUFTLElBQUk7QUFBQSxlQUV6QjtBQUNILG1CQUFPLE1BQU0sUUFBUSxTQUFTLElBQUksSUFBSSxrQkFBa0IsV0FBVyxXQUFXO0FBQUEsZUFFM0U7QUFDSCxtQkFBTyxNQUFNLFFBQVEsU0FBUyxJQUFJLElBQUksa0JBQWtCLFdBQVcsT0FBTyxjQUFjLFdBQVc7QUFBQSxlQUVoRztBQUNILG1CQUFPLE1BQU0sUUFBUSxTQUFTLElBQUksSUFBSSxrQkFBa0IsY0FBYyxXQUFXO0FBQUEsbUJBRTFFO0FBQ1Asa0JBQU0sUUFBUSxpQkFBaUIsS0FBSyxHQUFHO0FBQ3ZDLGdCQUFJLENBQUM7QUFBTztBQUVaLGtCQUFNRyxVQUFTLE9BQU8sTUFBTSxFQUFFO0FBQzlCLGdCQUFJLENBQUNBO0FBQVE7QUFFYixtQkFBT0EsVUFBUyxjQUFjLE1BQU07QUFBQSxVQUN0QztBQUFBO0FBQUEsTUFFSjtBQUVBLFlBQU0sU0FBUyxNQUFNLGFBQWEsT0FBTyxLQUFLO0FBQzlDLFVBQUksU0FBUyxPQUFPLE1BQU07QUFFMUIsVUFBSSxVQUFVLEtBQUssa0JBQWtCLE1BQU07QUFDekMsa0JBQVUsR0FBRztBQUFBLE1BQ2Y7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQUVBLElBQUFKLFFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQ2xrQ2pCO0FBQUEsMkRBQUFLLFNBQUE7QUFBQTtBQUFBO0FBRUEsUUFBTUMsUUFBTyxRQUFRO0FBQ3JCLFFBQU0sT0FBTztBQUNiLFFBQU0sUUFBUTtBQUNkLFFBQU0sUUFBUTtBQUNkLFFBQU0sWUFBWTtBQUNsQixRQUFNLFdBQVcsU0FBTyxPQUFPLE9BQU8sUUFBUSxZQUFZLENBQUMsTUFBTSxRQUFRLEdBQUc7QUF3QjVFLFFBQU0sWUFBWSxDQUFDLE1BQU0sU0FBUyxjQUFjLFVBQVU7QUFDeEQsVUFBSSxNQUFNLFFBQVEsSUFBSSxHQUFHO0FBQ3ZCLGNBQU0sTUFBTSxLQUFLLElBQUksV0FBUyxVQUFVLE9BQU8sU0FBUyxXQUFXLENBQUM7QUFDcEUsY0FBTSxlQUFlLFNBQU87QUFDMUIscUJBQVcsV0FBVyxLQUFLO0FBQ3pCLGtCQUFNQyxTQUFRLFFBQVEsR0FBRztBQUN6QixnQkFBSUE7QUFBTyxxQkFBT0E7QUFBQSxVQUNwQjtBQUNBLGlCQUFPO0FBQUEsUUFDVDtBQUNBLGVBQU87QUFBQSxNQUNUO0FBRUEsWUFBTSxVQUFVLFNBQVMsSUFBSSxLQUFLLEtBQUssVUFBVSxLQUFLO0FBRXRELFVBQUksU0FBUyxNQUFPLE9BQU8sU0FBUyxZQUFZLENBQUMsU0FBVTtBQUN6RCxjQUFNLElBQUksVUFBVSwyQ0FBMkM7QUFBQSxNQUNqRTtBQUVBLFlBQU0sT0FBTyxXQUFXLENBQUM7QUFDekIsWUFBTSxRQUFRLE1BQU0sVUFBVSxPQUFPO0FBQ3JDLFlBQU0sUUFBUSxVQUNWLFVBQVUsVUFBVSxNQUFNLE9BQU8sSUFDakMsVUFBVSxPQUFPLE1BQU0sU0FBUyxPQUFPLElBQUk7QUFFL0MsWUFBTSxRQUFRLE1BQU07QUFDcEIsYUFBTyxNQUFNO0FBRWIsVUFBSSxZQUFZLE1BQU07QUFDdEIsVUFBSSxLQUFLLFFBQVE7QUFDZixjQUFNLGFBQWEsRUFBRSxHQUFHLFNBQVMsUUFBUSxNQUFNLFNBQVMsTUFBTSxVQUFVLEtBQUs7QUFDN0Usb0JBQVksVUFBVSxLQUFLLFFBQVEsWUFBWSxXQUFXO0FBQUEsTUFDNUQ7QUFFQSxZQUFNLFVBQVUsQ0FBQyxPQUFPLGVBQWUsVUFBVTtBQUMvQyxjQUFNLEVBQUUsU0FBUyxPQUFPLE9BQU8sSUFBSSxVQUFVLEtBQUssT0FBTyxPQUFPLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4RixjQUFNLFNBQVMsRUFBRSxNQUFNLE9BQU8sT0FBTyxPQUFPLE9BQU8sUUFBUSxPQUFPLFFBQVE7QUFFMUUsWUFBSSxPQUFPLEtBQUssYUFBYSxZQUFZO0FBQ3ZDLGVBQUssU0FBUyxNQUFNO0FBQUEsUUFDdEI7QUFFQSxZQUFJLFlBQVksT0FBTztBQUNyQixpQkFBTyxVQUFVO0FBQ2pCLGlCQUFPLGVBQWUsU0FBUztBQUFBLFFBQ2pDO0FBRUEsWUFBSSxVQUFVLEtBQUssR0FBRztBQUNwQixjQUFJLE9BQU8sS0FBSyxhQUFhLFlBQVk7QUFDdkMsaUJBQUssU0FBUyxNQUFNO0FBQUEsVUFDdEI7QUFDQSxpQkFBTyxVQUFVO0FBQ2pCLGlCQUFPLGVBQWUsU0FBUztBQUFBLFFBQ2pDO0FBRUEsWUFBSSxPQUFPLEtBQUssWUFBWSxZQUFZO0FBQ3RDLGVBQUssUUFBUSxNQUFNO0FBQUEsUUFDckI7QUFDQSxlQUFPLGVBQWUsU0FBUztBQUFBLE1BQ2pDO0FBRUEsVUFBSSxhQUFhO0FBQ2YsZ0JBQVEsUUFBUTtBQUFBLE1BQ2xCO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFtQkEsY0FBVSxPQUFPLENBQUMsT0FBTyxPQUFPLFNBQVMsRUFBRSxNQUFNLE1BQU0sSUFBSSxDQUFDLE1BQU07QUFDaEUsVUFBSSxPQUFPLFVBQVUsVUFBVTtBQUM3QixjQUFNLElBQUksVUFBVSwrQkFBK0I7QUFBQSxNQUNyRDtBQUVBLFVBQUksVUFBVSxJQUFJO0FBQ2hCLGVBQU8sRUFBRSxTQUFTLE9BQU8sUUFBUSxHQUFHO0FBQUEsTUFDdEM7QUFFQSxZQUFNLE9BQU8sV0FBVyxDQUFDO0FBQ3pCLFlBQU0sU0FBUyxLQUFLLFdBQVcsUUFBUSxNQUFNLGlCQUFpQjtBQUM5RCxVQUFJLFFBQVEsVUFBVTtBQUN0QixVQUFJLFNBQVUsU0FBUyxTQUFVLE9BQU8sS0FBSyxJQUFJO0FBRWpELFVBQUksVUFBVSxPQUFPO0FBQ25CLGlCQUFTLFNBQVMsT0FBTyxLQUFLLElBQUk7QUFDbEMsZ0JBQVEsV0FBVztBQUFBLE1BQ3JCO0FBRUEsVUFBSSxVQUFVLFNBQVMsS0FBSyxZQUFZLE1BQU07QUFDNUMsWUFBSSxLQUFLLGNBQWMsUUFBUSxLQUFLLGFBQWEsTUFBTTtBQUNyRCxrQkFBUSxVQUFVLFVBQVUsT0FBTyxPQUFPLFNBQVMsS0FBSztBQUFBLFFBQzFELE9BQU87QUFDTCxrQkFBUSxNQUFNLEtBQUssTUFBTTtBQUFBLFFBQzNCO0FBQUEsTUFDRjtBQUVBLGFBQU8sRUFBRSxTQUFTLFFBQVEsS0FBSyxHQUFHLE9BQU8sT0FBTztBQUFBLElBQ2xEO0FBZ0JBLGNBQVUsWUFBWSxDQUFDLE9BQU8sTUFBTSxTQUFTLFFBQVEsTUFBTSxVQUFVLE9BQU8sTUFBTTtBQUNoRixZQUFNLFFBQVEsZ0JBQWdCLFNBQVMsT0FBTyxVQUFVLE9BQU8sTUFBTSxPQUFPO0FBQzVFLGFBQU8sTUFBTSxLQUFLRCxNQUFLLFNBQVMsS0FBSyxDQUFDO0FBQUEsSUFDeEM7QUFtQkEsY0FBVSxVQUFVLENBQUMsS0FBSyxVQUFVLFlBQVksVUFBVSxVQUFVLE9BQU8sRUFBRSxHQUFHO0FBZ0JoRixjQUFVLFFBQVEsQ0FBQyxTQUFTLFlBQVk7QUFDdEMsVUFBSSxNQUFNLFFBQVEsT0FBTztBQUFHLGVBQU8sUUFBUSxJQUFJLE9BQUssVUFBVSxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBQy9FLGFBQU8sTUFBTSxTQUFTLEVBQUUsR0FBRyxTQUFTLFdBQVcsTUFBTSxDQUFDO0FBQUEsSUFDeEQ7QUE2QkEsY0FBVSxPQUFPLENBQUMsT0FBTyxZQUFZLEtBQUssT0FBTyxPQUFPO0FBY3hELGNBQVUsWUFBWSxDQUFDLE9BQU8sU0FBUyxlQUFlLE9BQU8sY0FBYyxVQUFVO0FBQ25GLFVBQUksaUJBQWlCLE1BQU07QUFDekIsZUFBTyxNQUFNO0FBQUEsTUFDZjtBQUVBLFlBQU0sT0FBTyxXQUFXLENBQUM7QUFDekIsWUFBTSxVQUFVLEtBQUssV0FBVyxLQUFLO0FBQ3JDLFlBQU0sU0FBUyxLQUFLLFdBQVcsS0FBSztBQUVwQyxVQUFJLFNBQVMsR0FBRyxhQUFhLE1BQU0sVUFBVTtBQUM3QyxVQUFJLFNBQVMsTUFBTSxZQUFZLE1BQU07QUFDbkMsaUJBQVMsT0FBTztBQUFBLE1BQ2xCO0FBRUEsWUFBTSxRQUFRLFVBQVUsUUFBUSxRQUFRLE9BQU87QUFDL0MsVUFBSSxnQkFBZ0IsTUFBTTtBQUN4QixjQUFNLFFBQVE7QUFBQSxNQUNoQjtBQUVBLGFBQU87QUFBQSxJQUNUO0FBcUJBLGNBQVUsU0FBUyxDQUFDLE9BQU8sVUFBVSxDQUFDLEdBQUcsZUFBZSxPQUFPLGNBQWMsVUFBVTtBQUNyRixVQUFJLENBQUMsU0FBUyxPQUFPLFVBQVUsVUFBVTtBQUN2QyxjQUFNLElBQUksVUFBVSw2QkFBNkI7QUFBQSxNQUNuRDtBQUVBLFVBQUksU0FBUyxFQUFFLFNBQVMsT0FBTyxXQUFXLEtBQUs7QUFFL0MsVUFBSSxRQUFRLGNBQWMsVUFBVSxNQUFNLE9BQU8sT0FBTyxNQUFNLE9BQU8sTUFBTTtBQUN6RSxlQUFPLFNBQVMsTUFBTSxVQUFVLE9BQU8sT0FBTztBQUFBLE1BQ2hEO0FBRUEsVUFBSSxDQUFDLE9BQU8sUUFBUTtBQUNsQixpQkFBUyxNQUFNLE9BQU8sT0FBTztBQUFBLE1BQy9CO0FBRUEsYUFBTyxVQUFVLFVBQVUsUUFBUSxTQUFTLGNBQWMsV0FBVztBQUFBLElBQ3ZFO0FBbUJBLGNBQVUsVUFBVSxDQUFDLFFBQVEsWUFBWTtBQUN2QyxVQUFJO0FBQ0YsY0FBTSxPQUFPLFdBQVcsQ0FBQztBQUN6QixlQUFPLElBQUksT0FBTyxRQUFRLEtBQUssVUFBVSxLQUFLLFNBQVMsTUFBTSxHQUFHO0FBQUEsTUFDbEUsU0FBUyxLQUFQO0FBQ0EsWUFBSSxXQUFXLFFBQVEsVUFBVTtBQUFNLGdCQUFNO0FBQzdDLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQU9BLGNBQVUsWUFBWTtBQU10QixJQUFBRCxRQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUNyVmpCLElBQUFHLHFCQUFBO0FBQUEsbURBQUFDLFNBQUE7QUFBQTtBQUFBO0FBRUEsSUFBQUEsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDRmpCO0FBQUEsb0RBQUFDLFNBQUE7QUFBQTtBQUFBO0FBRUEsUUFBTSxPQUFPLFFBQVE7QUFDckIsUUFBTSxTQUFTO0FBQ2YsUUFBTSxZQUFZO0FBQ2xCLFFBQU0sUUFBUTtBQUNkLFFBQU0sZ0JBQWdCLFNBQU8sUUFBUSxNQUFNLFFBQVE7QUFvQm5ELFFBQU0sYUFBYSxDQUFDLE1BQU0sVUFBVSxZQUFZO0FBQzlDLGlCQUFXLENBQUMsRUFBRSxPQUFPLFFBQVE7QUFDN0IsYUFBTyxDQUFDLEVBQUUsT0FBTyxJQUFJO0FBRXJCLFVBQUksT0FBTyxvQkFBSSxJQUFJO0FBQ25CLFVBQUksT0FBTyxvQkFBSSxJQUFJO0FBQ25CLFVBQUksUUFBUSxvQkFBSSxJQUFJO0FBQ3BCLFVBQUksWUFBWTtBQUVoQixVQUFJLFdBQVcsV0FBUztBQUN0QixjQUFNLElBQUksTUFBTSxNQUFNO0FBQ3RCLFlBQUksV0FBVyxRQUFRLFVBQVU7QUFDL0Isa0JBQVEsU0FBUyxLQUFLO0FBQUEsUUFDeEI7QUFBQSxNQUNGO0FBRUEsZUFBUyxJQUFJLEdBQUcsSUFBSSxTQUFTLFFBQVEsS0FBSztBQUN4QyxZQUFJLFVBQVUsVUFBVSxPQUFPLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxTQUFTLFNBQVMsR0FBRyxJQUFJO0FBQzNFLFlBQUksVUFBVSxRQUFRLE1BQU0sV0FBVyxRQUFRLE1BQU07QUFDckQsWUFBSTtBQUFTO0FBRWIsaUJBQVMsUUFBUSxNQUFNO0FBQ3JCLGNBQUksVUFBVSxRQUFRLE1BQU0sSUFBSTtBQUVoQyxjQUFJLFFBQVEsVUFBVSxDQUFDLFFBQVEsVUFBVSxRQUFRO0FBQ2pELGNBQUksQ0FBQztBQUFPO0FBRVosY0FBSSxTQUFTO0FBQ1gsaUJBQUssSUFBSSxRQUFRLE1BQU07QUFBQSxVQUN6QixPQUFPO0FBQ0wsaUJBQUssT0FBTyxRQUFRLE1BQU07QUFDMUIsaUJBQUssSUFBSSxRQUFRLE1BQU07QUFBQSxVQUN6QjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsVUFBSSxTQUFTLGNBQWMsU0FBUyxTQUFTLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUk7QUFDbEUsVUFBSSxVQUFVLE9BQU8sT0FBTyxVQUFRLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztBQUVuRCxVQUFJLFdBQVcsUUFBUSxXQUFXLEdBQUc7QUFDbkMsWUFBSSxRQUFRLGFBQWEsTUFBTTtBQUM3QixnQkFBTSxJQUFJLE1BQU0seUJBQXlCLFNBQVMsS0FBSyxJQUFJLElBQUk7QUFBQSxRQUNqRTtBQUVBLFlBQUksUUFBUSxXQUFXLFFBQVEsUUFBUSxhQUFhLE1BQU07QUFDeEQsaUJBQU8sUUFBUSxXQUFXLFNBQVMsSUFBSSxPQUFLLEVBQUUsUUFBUSxPQUFPLEVBQUUsQ0FBQyxJQUFJO0FBQUEsUUFDdEU7QUFBQSxNQUNGO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFNQSxlQUFXLFFBQVE7QUFxQm5CLGVBQVcsVUFBVSxDQUFDLFNBQVMsWUFBWSxVQUFVLFNBQVMsT0FBTztBQW1CckUsZUFBVyxVQUFVLENBQUMsS0FBSyxVQUFVLFlBQVksVUFBVSxVQUFVLE9BQU8sRUFBRSxHQUFHO0FBTWpGLGVBQVcsTUFBTSxXQUFXO0FBbUI1QixlQUFXLE1BQU0sQ0FBQyxNQUFNLFVBQVUsVUFBVSxDQUFDLE1BQU07QUFDakQsaUJBQVcsQ0FBQyxFQUFFLE9BQU8sUUFBUSxFQUFFLElBQUksTUFBTTtBQUN6QyxVQUFJLFNBQVMsb0JBQUksSUFBSTtBQUNyQixVQUFJLFFBQVEsQ0FBQztBQUViLFVBQUksV0FBVyxXQUFTO0FBQ3RCLFlBQUksUUFBUTtBQUFVLGtCQUFRLFNBQVMsS0FBSztBQUM1QyxjQUFNLEtBQUssTUFBTSxNQUFNO0FBQUEsTUFDekI7QUFFQSxVQUFJLFVBQVUsSUFBSSxJQUFJLFdBQVcsTUFBTSxVQUFVLEVBQUUsR0FBRyxTQUFTLFNBQVMsQ0FBQyxDQUFDO0FBRTFFLGVBQVMsUUFBUSxPQUFPO0FBQ3RCLFlBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxHQUFHO0FBQ3RCLGlCQUFPLElBQUksSUFBSTtBQUFBLFFBQ2pCO0FBQUEsTUFDRjtBQUNBLGFBQU8sQ0FBQyxHQUFHLE1BQU07QUFBQSxJQUNuQjtBQXNCQSxlQUFXLFdBQVcsQ0FBQyxLQUFLLFNBQVMsWUFBWTtBQUMvQyxVQUFJLE9BQU8sUUFBUSxVQUFVO0FBQzNCLGNBQU0sSUFBSSxVQUFVLHVCQUF1QixLQUFLLFFBQVEsR0FBRyxJQUFJO0FBQUEsTUFDakU7QUFFQSxVQUFJLE1BQU0sUUFBUSxPQUFPLEdBQUc7QUFDMUIsZUFBTyxRQUFRLEtBQUssT0FBSyxXQUFXLFNBQVMsS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUFBLE1BQy9EO0FBRUEsVUFBSSxPQUFPLFlBQVksVUFBVTtBQUMvQixZQUFJLGNBQWMsR0FBRyxLQUFLLGNBQWMsT0FBTyxHQUFHO0FBQ2hELGlCQUFPO0FBQUEsUUFDVDtBQUVBLFlBQUksSUFBSSxTQUFTLE9BQU8sS0FBTSxJQUFJLFdBQVcsSUFBSSxLQUFLLElBQUksTUFBTSxDQUFDLEVBQUUsU0FBUyxPQUFPLEdBQUk7QUFDckYsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRjtBQUVBLGFBQU8sV0FBVyxRQUFRLEtBQUssU0FBUyxFQUFFLEdBQUcsU0FBUyxVQUFVLEtBQUssQ0FBQztBQUFBLElBQ3hFO0FBc0JBLGVBQVcsWUFBWSxDQUFDLEtBQUssVUFBVSxZQUFZO0FBQ2pELFVBQUksQ0FBQyxNQUFNLFNBQVMsR0FBRyxHQUFHO0FBQ3hCLGNBQU0sSUFBSSxVQUFVLDZDQUE2QztBQUFBLE1BQ25FO0FBQ0EsVUFBSSxPQUFPLFdBQVcsT0FBTyxLQUFLLEdBQUcsR0FBRyxVQUFVLE9BQU87QUFDekQsVUFBSSxNQUFNLENBQUM7QUFDWCxlQUFTLE9BQU87QUFBTSxZQUFJLE9BQU8sSUFBSTtBQUNyQyxhQUFPO0FBQUEsSUFDVDtBQXFCQSxlQUFXLE9BQU8sQ0FBQyxNQUFNLFVBQVUsWUFBWTtBQUM3QyxVQUFJLFFBQVEsQ0FBQyxFQUFFLE9BQU8sSUFBSTtBQUUxQixlQUFTLFdBQVcsQ0FBQyxFQUFFLE9BQU8sUUFBUSxHQUFHO0FBQ3ZDLFlBQUksVUFBVSxVQUFVLE9BQU8sT0FBTyxHQUFHLE9BQU87QUFDaEQsWUFBSSxNQUFNLEtBQUssVUFBUSxRQUFRLElBQUksQ0FBQyxHQUFHO0FBQ3JDLGlCQUFPO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQTBCQSxlQUFXLFFBQVEsQ0FBQyxNQUFNLFVBQVUsWUFBWTtBQUM5QyxVQUFJLFFBQVEsQ0FBQyxFQUFFLE9BQU8sSUFBSTtBQUUxQixlQUFTLFdBQVcsQ0FBQyxFQUFFLE9BQU8sUUFBUSxHQUFHO0FBQ3ZDLFlBQUksVUFBVSxVQUFVLE9BQU8sT0FBTyxHQUFHLE9BQU87QUFDaEQsWUFBSSxDQUFDLE1BQU0sTUFBTSxVQUFRLFFBQVEsSUFBSSxDQUFDLEdBQUc7QUFDdkMsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRjtBQUNBLGFBQU87QUFBQSxJQUNUO0FBNkJBLGVBQVcsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZO0FBQzNDLFVBQUksT0FBTyxRQUFRLFVBQVU7QUFDM0IsY0FBTSxJQUFJLFVBQVUsdUJBQXVCLEtBQUssUUFBUSxHQUFHLElBQUk7QUFBQSxNQUNqRTtBQUVBLGFBQU8sQ0FBQyxFQUFFLE9BQU8sUUFBUSxFQUFFLE1BQU0sT0FBSyxVQUFVLEdBQUcsT0FBTyxFQUFFLEdBQUcsQ0FBQztBQUFBLElBQ2xFO0FBcUJBLGVBQVcsVUFBVSxDQUFDLE1BQU0sT0FBTyxZQUFZO0FBQzdDLFVBQUksUUFBUSxNQUFNLFVBQVUsT0FBTztBQUNuQyxVQUFJLFFBQVEsVUFBVSxPQUFPLE9BQU8sSUFBSSxHQUFHLEVBQUUsR0FBRyxTQUFTLFNBQVMsS0FBSyxDQUFDO0FBQ3hFLFVBQUksUUFBUSxNQUFNLEtBQUssUUFBUSxNQUFNLGVBQWUsS0FBSyxJQUFJLEtBQUs7QUFFbEUsVUFBSSxPQUFPO0FBQ1QsZUFBTyxNQUFNLE1BQU0sQ0FBQyxFQUFFLElBQUksT0FBSyxNQUFNLFNBQVMsS0FBSyxDQUFDO0FBQUEsTUFDdEQ7QUFBQSxJQUNGO0FBa0JBLGVBQVcsU0FBUyxJQUFJLFNBQVMsVUFBVSxPQUFPLEdBQUcsSUFBSTtBQWdCekQsZUFBVyxPQUFPLElBQUksU0FBUyxVQUFVLEtBQUssR0FBRyxJQUFJO0FBZ0JyRCxlQUFXLFFBQVEsQ0FBQyxVQUFVLFlBQVk7QUFDeEMsVUFBSSxNQUFNLENBQUM7QUFDWCxlQUFTLFdBQVcsQ0FBQyxFQUFFLE9BQU8sWUFBWSxDQUFDLENBQUMsR0FBRztBQUM3QyxpQkFBUyxPQUFPLE9BQU8sT0FBTyxPQUFPLEdBQUcsT0FBTyxHQUFHO0FBQ2hELGNBQUksS0FBSyxVQUFVLE1BQU0sS0FBSyxPQUFPLENBQUM7QUFBQSxRQUN4QztBQUFBLE1BQ0Y7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQW1CQSxlQUFXLFNBQVMsQ0FBQyxTQUFTLFlBQVk7QUFDeEMsVUFBSSxPQUFPLFlBQVk7QUFBVSxjQUFNLElBQUksVUFBVSxtQkFBbUI7QUFDeEUsVUFBSyxXQUFXLFFBQVEsWUFBWSxRQUFTLENBQUMsU0FBUyxLQUFLLE9BQU8sR0FBRztBQUNwRSxlQUFPLENBQUMsT0FBTztBQUFBLE1BQ2pCO0FBQ0EsYUFBTyxPQUFPLFNBQVMsT0FBTztBQUFBLElBQ2hDO0FBTUEsZUFBVyxjQUFjLENBQUMsU0FBUyxZQUFZO0FBQzdDLFVBQUksT0FBTyxZQUFZO0FBQVUsY0FBTSxJQUFJLFVBQVUsbUJBQW1CO0FBQ3hFLGFBQU8sV0FBVyxPQUFPLFNBQVMsRUFBRSxHQUFHLFNBQVMsUUFBUSxLQUFLLENBQUM7QUFBQSxJQUNoRTtBQU1BLElBQUFBLFFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQ2xkakI7QUFBQTtBQUFBO0FBQUE7QUFDQSxXQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsWUFBUSx5QkFBeUIsUUFBUSxXQUFXLFFBQVEsc0JBQXNCLFFBQVEsU0FBUyxRQUFRLGtCQUFrQixRQUFRLHVCQUF1QixRQUFRLG1DQUFtQyxRQUFRLGdDQUFnQyxRQUFRLHdCQUF3QixRQUFRLGNBQWMsUUFBUSxtQkFBbUIsUUFBUSxvQ0FBb0MsUUFBUSxxQ0FBcUMsUUFBUSxvQ0FBb0MsUUFBUSxzQkFBc0IsUUFBUSxzQkFBc0IsUUFBUSxvQkFBb0IsUUFBUSxvQkFBb0IsUUFBUSwyQkFBMkIsUUFBUSwyQkFBMkIsUUFBUSxtQkFBbUIsUUFBUSxrQkFBa0I7QUFDcHJCLFFBQU1DLFFBQU8sUUFBUTtBQUNyQixRQUFNLGFBQWE7QUFDbkIsUUFBTSxhQUFhO0FBQ25CLFFBQU0sV0FBVztBQUNqQixRQUFNLGdCQUFnQjtBQUN0QixRQUFNLHlCQUF5QjtBQUMvQixRQUFNLG1DQUFtQztBQUN6QyxRQUFNLHlCQUF5QjtBQUMvQixRQUFNLDRCQUE0QjtBQUNsQyxRQUFNLGdDQUFnQztBQUt0QyxRQUFNLGtCQUFrQjtBQUN4QixhQUFTLGdCQUFnQixTQUFTLFVBQVUsQ0FBQyxHQUFHO0FBQzVDLGFBQU8sQ0FBQ0Msa0JBQWlCLFNBQVMsT0FBTztBQUFBLElBQzdDO0FBQ0EsWUFBUSxrQkFBa0I7QUFDMUIsYUFBU0Esa0JBQWlCLFNBQVMsVUFBVSxDQUFDLEdBQUc7QUFNN0MsVUFBSSxZQUFZLElBQUk7QUFDaEIsZUFBTztBQUFBLE1BQ1g7QUFLQSxVQUFJLFFBQVEsdUJBQXVCLFNBQVMsUUFBUSxTQUFTLGFBQWEsR0FBRztBQUN6RSxlQUFPO0FBQUEsTUFDWDtBQUNBLFVBQUksdUJBQXVCLEtBQUssT0FBTyxLQUFLLGlDQUFpQyxLQUFLLE9BQU8sS0FBSyx1QkFBdUIsS0FBSyxPQUFPLEdBQUc7QUFDaEksZUFBTztBQUFBLE1BQ1g7QUFDQSxVQUFJLFFBQVEsWUFBWSxTQUFTLDBCQUEwQixLQUFLLE9BQU8sR0FBRztBQUN0RSxlQUFPO0FBQUEsTUFDWDtBQUNBLFVBQUksUUFBUSxtQkFBbUIsU0FBUyxrQkFBa0IsT0FBTyxHQUFHO0FBQ2hFLGVBQU87QUFBQSxNQUNYO0FBQ0EsYUFBTztBQUFBLElBQ1g7QUFDQSxZQUFRLG1CQUFtQkE7QUFDM0IsYUFBUyxrQkFBa0IsU0FBUztBQUNoQyxZQUFNLG9CQUFvQixRQUFRLFFBQVEsR0FBRztBQUM3QyxVQUFJLHNCQUFzQixJQUFJO0FBQzFCLGVBQU87QUFBQSxNQUNYO0FBQ0EsWUFBTSxvQkFBb0IsUUFBUSxRQUFRLEtBQUssb0JBQW9CLENBQUM7QUFDcEUsVUFBSSxzQkFBc0IsSUFBSTtBQUMxQixlQUFPO0FBQUEsTUFDWDtBQUNBLFlBQU0sZUFBZSxRQUFRLE1BQU0sbUJBQW1CLGlCQUFpQjtBQUN2RSxhQUFPLDhCQUE4QixLQUFLLFlBQVk7QUFBQSxJQUMxRDtBQUNBLGFBQVMseUJBQXlCLFNBQVM7QUFDdkMsYUFBT0MsbUJBQWtCLE9BQU8sSUFBSSxRQUFRLE1BQU0sQ0FBQyxJQUFJO0FBQUEsSUFDM0Q7QUFDQSxZQUFRLDJCQUEyQjtBQUNuQyxhQUFTLHlCQUF5QixTQUFTO0FBQ3ZDLGFBQU8sTUFBTTtBQUFBLElBQ2pCO0FBQ0EsWUFBUSwyQkFBMkI7QUFDbkMsYUFBU0EsbUJBQWtCLFNBQVM7QUFDaEMsYUFBTyxRQUFRLFdBQVcsR0FBRyxLQUFLLFFBQVEsT0FBTztBQUFBLElBQ3JEO0FBQ0EsWUFBUSxvQkFBb0JBO0FBQzVCLGFBQVMsa0JBQWtCLFNBQVM7QUFDaEMsYUFBTyxDQUFDQSxtQkFBa0IsT0FBTztBQUFBLElBQ3JDO0FBQ0EsWUFBUSxvQkFBb0I7QUFDNUIsYUFBUyxvQkFBb0IsVUFBVTtBQUNuQyxhQUFPLFNBQVMsT0FBT0Esa0JBQWlCO0FBQUEsSUFDNUM7QUFDQSxZQUFRLHNCQUFzQjtBQUM5QixhQUFTLG9CQUFvQixVQUFVO0FBQ25DLGFBQU8sU0FBUyxPQUFPLGlCQUFpQjtBQUFBLElBQzVDO0FBQ0EsWUFBUSxzQkFBc0I7QUFROUIsYUFBUyxrQ0FBa0MsVUFBVTtBQUNqRCxhQUFPLFNBQVMsT0FBTyxDQUFDLFlBQVksQ0FBQyxrQ0FBa0MsT0FBTyxDQUFDO0FBQUEsSUFDbkY7QUFDQSxZQUFRLG9DQUFvQztBQVE1QyxhQUFTLG1DQUFtQyxVQUFVO0FBQ2xELGFBQU8sU0FBUyxPQUFPLGlDQUFpQztBQUFBLElBQzVEO0FBQ0EsWUFBUSxxQ0FBcUM7QUFDN0MsYUFBUyxrQ0FBa0MsU0FBUztBQUNoRCxhQUFPLFFBQVEsV0FBVyxJQUFJLEtBQUssUUFBUSxXQUFXLE1BQU07QUFBQSxJQUNoRTtBQUNBLFlBQVEsb0NBQW9DO0FBQzVDLGFBQVMsaUJBQWlCLFNBQVM7QUFDL0IsYUFBTyxXQUFXLFNBQVMsRUFBRSxpQkFBaUIsTUFBTSxDQUFDO0FBQUEsSUFDekQ7QUFDQSxZQUFRLG1CQUFtQjtBQUMzQixhQUFTLFlBQVksU0FBUztBQUMxQixhQUFPLFFBQVEsU0FBUyxRQUFRO0FBQUEsSUFDcEM7QUFDQSxZQUFRLGNBQWM7QUFDdEIsYUFBUyxzQkFBc0IsU0FBUztBQUNwQyxhQUFPLFFBQVEsU0FBUyxNQUFNLFFBQVE7QUFBQSxJQUMxQztBQUNBLFlBQVEsd0JBQXdCO0FBQ2hDLGFBQVMsOEJBQThCLFNBQVM7QUFDNUMsWUFBTSxXQUFXRixNQUFLLFNBQVMsT0FBTztBQUN0QyxhQUFPLHNCQUFzQixPQUFPLEtBQUssZ0JBQWdCLFFBQVE7QUFBQSxJQUNyRTtBQUNBLFlBQVEsZ0NBQWdDO0FBQ3hDLGFBQVMsaUNBQWlDLFVBQVU7QUFDaEQsYUFBTyxTQUFTLE9BQU8sQ0FBQyxZQUFZLFlBQVk7QUFDNUMsZUFBTyxXQUFXLE9BQU8scUJBQXFCLE9BQU8sQ0FBQztBQUFBLE1BQzFELEdBQUcsQ0FBQyxDQUFDO0FBQUEsSUFDVDtBQUNBLFlBQVEsbUNBQW1DO0FBQzNDLGFBQVMscUJBQXFCLFNBQVM7QUFDbkMsWUFBTSxXQUFXLFdBQVcsT0FBTyxTQUFTLEVBQUUsUUFBUSxNQUFNLFNBQVMsS0FBSyxDQUFDO0FBSzNFLGVBQVMsS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNO0FBSTNDLGFBQU8sU0FBUyxPQUFPLENBQUNHLGFBQVlBLGFBQVksRUFBRTtBQUFBLElBQ3REO0FBQ0EsWUFBUSx1QkFBdUI7QUFDL0IsYUFBUyxnQkFBZ0IsU0FBUyxTQUFTO0FBQ3ZDLFVBQUksRUFBRSxNQUFNLElBQUksV0FBVyxLQUFLLFNBQVMsT0FBTyxPQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsT0FBTyxHQUFHLEVBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQztBQUtuRyxVQUFJLE1BQU0sV0FBVyxHQUFHO0FBQ3BCLGdCQUFRLENBQUMsT0FBTztBQUFBLE1BQ3BCO0FBS0EsVUFBSSxNQUFNLEdBQUcsV0FBVyxHQUFHLEdBQUc7QUFDMUIsY0FBTSxLQUFLLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDM0IsY0FBTSxRQUFRLEVBQUU7QUFBQSxNQUNwQjtBQUNBLGFBQU87QUFBQSxJQUNYO0FBQ0EsWUFBUSxrQkFBa0I7QUFDMUIsYUFBUyxPQUFPLFNBQVMsU0FBUztBQUM5QixhQUFPLFdBQVcsT0FBTyxTQUFTLE9BQU87QUFBQSxJQUM3QztBQUNBLFlBQVEsU0FBUztBQUNqQixhQUFTLG9CQUFvQixVQUFVLFNBQVM7QUFDNUMsYUFBTyxTQUFTLElBQUksQ0FBQyxZQUFZLE9BQU8sU0FBUyxPQUFPLENBQUM7QUFBQSxJQUM3RDtBQUNBLFlBQVEsc0JBQXNCO0FBQzlCLGFBQVMsU0FBUyxPQUFPLFlBQVk7QUFDakMsYUFBTyxXQUFXLEtBQUssQ0FBQyxjQUFjLFVBQVUsS0FBSyxLQUFLLENBQUM7QUFBQSxJQUMvRDtBQUNBLFlBQVEsV0FBVztBQUtuQixhQUFTLHVCQUF1QixTQUFTO0FBQ3JDLGFBQU8sUUFBUSxRQUFRLGlCQUFpQixHQUFHO0FBQUEsSUFDL0M7QUFDQSxZQUFRLHlCQUF5QjtBQUFBO0FBQUE7OztBQzNMakM7QUFBQTtBQUFBO0FBQUE7QUFDQSxXQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsWUFBUSxRQUFRO0FBQ2hCLFFBQU1DLFVBQVM7QUFDZixhQUFTLE1BQU0sU0FBUztBQUNwQixZQUFNLGVBQWVBLFFBQU8sT0FBTztBQUNuQyxjQUFRLFFBQVEsQ0FBQyxXQUFXO0FBQ3hCLGVBQU8sS0FBSyxTQUFTLENBQUMsVUFBVSxhQUFhLEtBQUssU0FBUyxLQUFLLENBQUM7QUFBQSxNQUNyRSxDQUFDO0FBQ0QsbUJBQWEsS0FBSyxTQUFTLE1BQU0sNkJBQTZCLE9BQU8sQ0FBQztBQUN0RSxtQkFBYSxLQUFLLE9BQU8sTUFBTSw2QkFBNkIsT0FBTyxDQUFDO0FBQ3BFLGFBQU87QUFBQSxJQUNYO0FBQ0EsWUFBUSxRQUFRO0FBQ2hCLGFBQVMsNkJBQTZCLFNBQVM7QUFDM0MsY0FBUSxRQUFRLENBQUMsV0FBVyxPQUFPLEtBQUssT0FBTyxDQUFDO0FBQUEsSUFDcEQ7QUFBQTtBQUFBOzs7QUNoQkE7QUFBQTtBQUFBO0FBQUE7QUFDQSxXQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsWUFBUSxVQUFVLFFBQVEsV0FBVztBQUNyQyxhQUFTLFNBQVMsT0FBTztBQUNyQixhQUFPLE9BQU8sVUFBVTtBQUFBLElBQzVCO0FBQ0EsWUFBUSxXQUFXO0FBQ25CLGFBQVMsUUFBUSxPQUFPO0FBQ3BCLGFBQU8sVUFBVTtBQUFBLElBQ3JCO0FBQ0EsWUFBUSxVQUFVO0FBQUE7QUFBQTs7O0FDVmxCLElBQUFDLGlCQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0EsV0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzVELFlBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxVQUFVLFFBQVEsT0FBTyxRQUFRLEtBQUssUUFBUSxRQUFRLFFBQVEsUUFBUTtBQUNoSCxRQUFNLFFBQVE7QUFDZCxZQUFRLFFBQVE7QUFDaEIsUUFBTSxRQUFRO0FBQ2QsWUFBUSxRQUFRO0FBQ2hCLFFBQU1DLE1BQUs7QUFDWCxZQUFRLEtBQUtBO0FBQ2IsUUFBTUMsUUFBTztBQUNiLFlBQVEsT0FBT0E7QUFDZixRQUFNLFVBQVU7QUFDaEIsWUFBUSxVQUFVO0FBQ2xCLFFBQU0sU0FBUztBQUNmLFlBQVEsU0FBUztBQUNqQixRQUFNLFNBQVM7QUFDZixZQUFRLFNBQVM7QUFBQTtBQUFBOzs7QUNoQmpCO0FBQUE7QUFBQTtBQUFBO0FBQ0EsV0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzVELFlBQVEsNEJBQTRCLFFBQVEsOEJBQThCLFFBQVEsK0JBQStCLFFBQVEsZ0NBQWdDLFFBQVEsc0JBQXNCLFFBQVEseUJBQXlCLFFBQVEsV0FBVztBQUMzTyxRQUFNLFFBQVE7QUFDZCxhQUFTLFNBQVMsT0FBTyxVQUFVO0FBQy9CLFlBQU0sV0FBVyxnQkFBZ0IsT0FBTyxRQUFRO0FBQ2hELFlBQU0sU0FBUyxnQkFBZ0IsU0FBUyxRQUFRLFFBQVE7QUFDeEQsWUFBTSxtQkFBbUIsb0JBQW9CLFFBQVE7QUFDckQsWUFBTSxtQkFBbUIsOEJBQThCLFVBQVUsTUFBTTtBQUN2RSxZQUFNLGlCQUFpQixpQkFBaUIsT0FBTyxDQUFDLFlBQVksTUFBTSxRQUFRLGdCQUFnQixTQUFTLFFBQVEsQ0FBQztBQUM1RyxZQUFNLGtCQUFrQixpQkFBaUIsT0FBTyxDQUFDLFlBQVksTUFBTSxRQUFRLGlCQUFpQixTQUFTLFFBQVEsQ0FBQztBQUM5RyxZQUFNLGNBQWMsdUJBQXVCLGdCQUFnQixrQkFBZ0MsS0FBSztBQUNoRyxZQUFNLGVBQWUsdUJBQXVCLGlCQUFpQixrQkFBZ0MsSUFBSTtBQUNqRyxhQUFPLFlBQVksT0FBTyxZQUFZO0FBQUEsSUFDMUM7QUFDQSxZQUFRLFdBQVc7QUFDbkIsYUFBUyxnQkFBZ0IsT0FBTyxVQUFVO0FBQ3RDLFVBQUksV0FBVztBQVFmLFVBQUksU0FBUyxnQkFBZ0I7QUFDekIsbUJBQVcsTUFBTSxRQUFRLGlDQUFpQyxRQUFRO0FBQUEsTUFDdEU7QUFTQSxVQUFJLFNBQVMsZUFBZTtBQUN4QixtQkFBVyxTQUFTLElBQUksQ0FBQyxZQUFZLFFBQVEsU0FBUyxHQUFHLElBQUksVUFBVSxNQUFNLFNBQVM7QUFBQSxNQUMxRjtBQUlBLGFBQU8sU0FBUyxJQUFJLENBQUMsWUFBWSxNQUFNLFFBQVEsdUJBQXVCLE9BQU8sQ0FBQztBQUFBLElBQ2xGO0FBT0EsYUFBUyx1QkFBdUIsVUFBVSxVQUFVLFNBQVM7QUFDekQsWUFBTSxRQUFRLENBQUM7QUFDZixZQUFNLGtDQUFrQyxNQUFNLFFBQVEsbUNBQW1DLFFBQVE7QUFDakcsWUFBTSxpQ0FBaUMsTUFBTSxRQUFRLGtDQUFrQyxRQUFRO0FBQy9GLFlBQU0sK0JBQStCLDZCQUE2QiwrQkFBK0I7QUFDakcsWUFBTSw4QkFBOEIsNkJBQTZCLDhCQUE4QjtBQUMvRixZQUFNLEtBQUssR0FBRyw0QkFBNEIsOEJBQThCLFVBQVUsT0FBTyxDQUFDO0FBSzFGLFVBQUksT0FBTyw2QkFBNkI7QUFDcEMsY0FBTSxLQUFLLDBCQUEwQixLQUFLLGdDQUFnQyxVQUFVLE9BQU8sQ0FBQztBQUFBLE1BQ2hHLE9BQ0s7QUFDRCxjQUFNLEtBQUssR0FBRyw0QkFBNEIsNkJBQTZCLFVBQVUsT0FBTyxDQUFDO0FBQUEsTUFDN0Y7QUFDQSxhQUFPO0FBQUEsSUFDWDtBQUNBLFlBQVEseUJBQXlCO0FBQ2pDLGFBQVMsb0JBQW9CLFVBQVU7QUFDbkMsYUFBTyxNQUFNLFFBQVEsb0JBQW9CLFFBQVE7QUFBQSxJQUNyRDtBQUNBLFlBQVEsc0JBQXNCO0FBQzlCLGFBQVMsOEJBQThCLFVBQVUsUUFBUTtBQUNyRCxZQUFNLFdBQVcsTUFBTSxRQUFRLG9CQUFvQixRQUFRLEVBQUUsT0FBTyxNQUFNO0FBQzFFLFlBQU0sV0FBVyxTQUFTLElBQUksTUFBTSxRQUFRLHdCQUF3QjtBQUNwRSxhQUFPO0FBQUEsSUFDWDtBQUNBLFlBQVEsZ0NBQWdDO0FBQ3hDLGFBQVMsNkJBQTZCLFVBQVU7QUFDNUMsWUFBTSxRQUFRLENBQUM7QUFDZixhQUFPLFNBQVMsT0FBTyxDQUFDLFlBQVksWUFBWTtBQUM1QyxjQUFNLE9BQU8sTUFBTSxRQUFRLGlCQUFpQixPQUFPO0FBQ25ELFlBQUksUUFBUSxZQUFZO0FBQ3BCLHFCQUFXLE1BQU0sS0FBSyxPQUFPO0FBQUEsUUFDakMsT0FDSztBQUNELHFCQUFXLFFBQVEsQ0FBQyxPQUFPO0FBQUEsUUFDL0I7QUFDQSxlQUFPO0FBQUEsTUFDWCxHQUFHLEtBQUs7QUFBQSxJQUNaO0FBQ0EsWUFBUSwrQkFBK0I7QUFDdkMsYUFBUyw0QkFBNEIsVUFBVSxVQUFVLFNBQVM7QUFDOUQsYUFBTyxPQUFPLEtBQUssUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTO0FBQ3ZDLGVBQU8sMEJBQTBCLE1BQU0sU0FBUyxPQUFPLFVBQVUsT0FBTztBQUFBLE1BQzVFLENBQUM7QUFBQSxJQUNMO0FBQ0EsWUFBUSw4QkFBOEI7QUFDdEMsYUFBUywwQkFBMEIsTUFBTSxVQUFVLFVBQVUsU0FBUztBQUNsRSxhQUFPO0FBQUEsUUFDSDtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0EsVUFBVSxDQUFDLEVBQUUsT0FBTyxVQUFVLFNBQVMsSUFBSSxNQUFNLFFBQVEsd0JBQXdCLENBQUM7QUFBQSxNQUN0RjtBQUFBLElBQ0o7QUFDQSxZQUFRLDRCQUE0QjtBQUFBO0FBQUE7OztBQzdHcEM7QUFBQTtBQUFBO0FBQUE7QUFDQSxXQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsWUFBUSxPQUFPO0FBQ2YsYUFBUyxLQUFLQyxPQUFNLFVBQVUsVUFBVTtBQUNwQyxlQUFTLEdBQUcsTUFBTUEsT0FBTSxDQUFDLFlBQVksVUFBVTtBQUMzQyxZQUFJLGVBQWUsTUFBTTtBQUNyQiw4QkFBb0IsVUFBVSxVQUFVO0FBQ3hDO0FBQUEsUUFDSjtBQUNBLFlBQUksQ0FBQyxNQUFNLGVBQWUsS0FBSyxDQUFDLFNBQVMsb0JBQW9CO0FBQ3pELDhCQUFvQixVQUFVLEtBQUs7QUFDbkM7QUFBQSxRQUNKO0FBQ0EsaUJBQVMsR0FBRyxLQUFLQSxPQUFNLENBQUMsV0FBVyxTQUFTO0FBQ3hDLGNBQUksY0FBYyxNQUFNO0FBQ3BCLGdCQUFJLFNBQVMsZ0NBQWdDO0FBQ3pDLGtDQUFvQixVQUFVLFNBQVM7QUFDdkM7QUFBQSxZQUNKO0FBQ0EsZ0NBQW9CLFVBQVUsS0FBSztBQUNuQztBQUFBLFVBQ0o7QUFDQSxjQUFJLFNBQVMsa0JBQWtCO0FBQzNCLGlCQUFLLGlCQUFpQixNQUFNO0FBQUEsVUFDaEM7QUFDQSw4QkFBb0IsVUFBVSxJQUFJO0FBQUEsUUFDdEMsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBQ0w7QUFDQSxZQUFRLE9BQU87QUFDZixhQUFTLG9CQUFvQixVQUFVLE9BQU87QUFDMUMsZUFBUyxLQUFLO0FBQUEsSUFDbEI7QUFDQSxhQUFTLG9CQUFvQixVQUFVLFFBQVE7QUFDM0MsZUFBUyxNQUFNLE1BQU07QUFBQSxJQUN6QjtBQUFBO0FBQUE7OztBQ25DQTtBQUFBO0FBQUE7QUFBQTtBQUNBLFdBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUM1RCxZQUFRLE9BQU87QUFDZixhQUFTLEtBQUtDLE9BQU0sVUFBVTtBQUMxQixZQUFNLFFBQVEsU0FBUyxHQUFHLFVBQVVBLEtBQUk7QUFDeEMsVUFBSSxDQUFDLE1BQU0sZUFBZSxLQUFLLENBQUMsU0FBUyxvQkFBb0I7QUFDekQsZUFBTztBQUFBLE1BQ1g7QUFDQSxVQUFJO0FBQ0EsY0FBTSxPQUFPLFNBQVMsR0FBRyxTQUFTQSxLQUFJO0FBQ3RDLFlBQUksU0FBUyxrQkFBa0I7QUFDM0IsZUFBSyxpQkFBaUIsTUFBTTtBQUFBLFFBQ2hDO0FBQ0EsZUFBTztBQUFBLE1BQ1gsU0FDTyxPQUFQO0FBQ0ksWUFBSSxDQUFDLFNBQVMsZ0NBQWdDO0FBQzFDLGlCQUFPO0FBQUEsUUFDWDtBQUNBLGNBQU07QUFBQSxNQUNWO0FBQUEsSUFDSjtBQUNBLFlBQVEsT0FBTztBQUFBO0FBQUE7OztBQ3RCZixJQUFBQyxjQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0EsV0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzVELFlBQVEsMEJBQTBCLFFBQVEsc0JBQXNCO0FBQ2hFLFFBQU1DLE1BQUssUUFBUTtBQUNuQixZQUFRLHNCQUFzQjtBQUFBLE1BQzFCLE9BQU9BLElBQUc7QUFBQSxNQUNWLE1BQU1BLElBQUc7QUFBQSxNQUNULFdBQVdBLElBQUc7QUFBQSxNQUNkLFVBQVVBLElBQUc7QUFBQSxJQUNqQjtBQUNBLGFBQVMsd0JBQXdCLFdBQVc7QUFDeEMsVUFBSSxjQUFjLFFBQVc7QUFDekIsZUFBTyxRQUFRO0FBQUEsTUFDbkI7QUFDQSxhQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLFFBQVEsbUJBQW1CLEdBQUcsU0FBUztBQUFBLElBQ2xGO0FBQ0EsWUFBUSwwQkFBMEI7QUFBQTtBQUFBOzs7QUNoQmxDO0FBQUE7QUFBQTtBQUFBO0FBQ0EsV0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzVELFFBQU1DLE1BQUs7QUFDWCxRQUFNLFdBQU4sTUFBZTtBQUFBLE1BQ1gsWUFBWSxXQUFXLENBQUMsR0FBRztBQUN2QixhQUFLLFdBQVc7QUFDaEIsYUFBSyxxQkFBcUIsS0FBSyxVQUFVLEtBQUssU0FBUyxvQkFBb0IsSUFBSTtBQUMvRSxhQUFLLEtBQUtBLElBQUcsd0JBQXdCLEtBQUssU0FBUyxFQUFFO0FBQ3JELGFBQUssbUJBQW1CLEtBQUssVUFBVSxLQUFLLFNBQVMsa0JBQWtCLEtBQUs7QUFDNUUsYUFBSyxpQ0FBaUMsS0FBSyxVQUFVLEtBQUssU0FBUyxnQ0FBZ0MsSUFBSTtBQUFBLE1BQzNHO0FBQUEsTUFDQSxVQUFVLFFBQVEsT0FBTztBQUNyQixlQUFPLFdBQVcsUUFBUSxXQUFXLFNBQVMsU0FBUztBQUFBLE1BQzNEO0FBQUEsSUFDSjtBQUNBLFlBQVEsVUFBVTtBQUFBO0FBQUE7OztBQ2ZsQjtBQUFBO0FBQUE7QUFBQTtBQUNBLFdBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUM1RCxZQUFRLFdBQVcsUUFBUSxPQUFPLFFBQVEsV0FBVztBQUNyRCxRQUFNLFFBQVE7QUFDZCxRQUFNLE9BQU87QUFDYixRQUFNLGFBQWE7QUFDbkIsWUFBUSxXQUFXLFdBQVc7QUFDOUIsYUFBUyxLQUFLQyxPQUFNLDZCQUE2QixVQUFVO0FBQ3ZELFVBQUksT0FBTyxnQ0FBZ0MsWUFBWTtBQUNuRCxjQUFNLEtBQUtBLE9BQU0sWUFBWSxHQUFHLDJCQUEyQjtBQUMzRDtBQUFBLE1BQ0o7QUFDQSxZQUFNLEtBQUtBLE9BQU0sWUFBWSwyQkFBMkIsR0FBRyxRQUFRO0FBQUEsSUFDdkU7QUFDQSxZQUFRLE9BQU87QUFDZixhQUFTLFNBQVNBLE9BQU0sbUJBQW1CO0FBQ3ZDLFlBQU0sV0FBVyxZQUFZLGlCQUFpQjtBQUM5QyxhQUFPLEtBQUssS0FBS0EsT0FBTSxRQUFRO0FBQUEsSUFDbkM7QUFDQSxZQUFRLFdBQVc7QUFDbkIsYUFBUyxZQUFZLG9CQUFvQixDQUFDLEdBQUc7QUFDekMsVUFBSSw2QkFBNkIsV0FBVyxTQUFTO0FBQ2pELGVBQU87QUFBQSxNQUNYO0FBQ0EsYUFBTyxJQUFJLFdBQVcsUUFBUSxpQkFBaUI7QUFBQSxJQUNuRDtBQUFBO0FBQUE7OztBQ3pCQTtBQUFBLHlEQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJO0FBRUosSUFBQUEsUUFBTyxVQUFVLE9BQU8sbUJBQW1CLGFBQ3ZDLGVBQWUsS0FBSyxPQUFPLFdBQVcsY0FBYyxTQUFTLE1BQU0sSUFFbkUsU0FBTyxZQUFZLFVBQVUsUUFBUSxRQUFRLElBQzVDLEtBQUssRUFBRSxFQUNQLE1BQU0sU0FBTyxXQUFXLE1BQU07QUFBRSxZQUFNO0FBQUEsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUFBO0FBQUE7OztBQ1JwRDtBQUFBLHNEQUFBQyxTQUFBO0FBQUE7QUFDQSxJQUFBQSxRQUFPLFVBQVU7QUFFakIsUUFBTUMsa0JBQWlCO0FBRXZCLGFBQVMsWUFBYSxPQUFPLElBQUk7QUFDL0IsVUFBSSxTQUFTLFNBQVM7QUFDdEIsVUFBSSxTQUFTO0FBRWIsVUFBSSxNQUFNLFFBQVEsS0FBSyxHQUFHO0FBQ3hCLGtCQUFVLENBQUM7QUFDWCxrQkFBVSxNQUFNO0FBQUEsTUFDbEIsT0FBTztBQUNMLGVBQU8sT0FBTyxLQUFLLEtBQUs7QUFDeEIsa0JBQVUsQ0FBQztBQUNYLGtCQUFVLEtBQUs7QUFBQSxNQUNqQjtBQUVBLGVBQVMsS0FBTSxLQUFLO0FBQ2xCLGlCQUFTLE1BQU87QUFDZCxjQUFJO0FBQUksZUFBRyxLQUFLLE9BQU87QUFDdkIsZUFBSztBQUFBLFFBQ1A7QUFDQSxZQUFJO0FBQVEsVUFBQUEsZ0JBQWUsR0FBRztBQUFBO0FBQ3pCLGNBQUk7QUFBQSxNQUNYO0FBRUEsZUFBUyxLQUFNLEdBQUcsS0FBSyxRQUFRO0FBQzdCLGdCQUFRLEtBQUs7QUFDYixZQUFJLEVBQUUsWUFBWSxLQUFLLEtBQUs7QUFDMUIsZUFBSyxHQUFHO0FBQUEsUUFDVjtBQUFBLE1BQ0Y7QUFFQSxVQUFJLENBQUMsU0FBUztBQUVaLGFBQUssSUFBSTtBQUFBLE1BQ1gsV0FBVyxNQUFNO0FBRWYsYUFBSyxRQUFRLFNBQVUsS0FBSztBQUMxQixnQkFBTSxLQUFLLFNBQVUsS0FBSyxRQUFRO0FBQUUsaUJBQUssS0FBSyxLQUFLLE1BQU07QUFBQSxVQUFFLENBQUM7QUFBQSxRQUM5RCxDQUFDO0FBQUEsTUFDSCxPQUFPO0FBRUwsY0FBTSxRQUFRLFNBQVUsTUFBTSxHQUFHO0FBQy9CLGVBQUssU0FBVSxLQUFLLFFBQVE7QUFBRSxpQkFBSyxHQUFHLEtBQUssTUFBTTtBQUFBLFVBQUUsQ0FBQztBQUFBLFFBQ3RELENBQUM7QUFBQSxNQUNIO0FBRUEsZUFBUztBQUFBLElBQ1g7QUFBQTtBQUFBOzs7QUNsREEsSUFBQUMscUJBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQSxXQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsWUFBUSxxQ0FBcUM7QUFDN0MsUUFBTSw2QkFBNkIsUUFBUSxTQUFTLEtBQUssTUFBTSxHQUFHO0FBQ2xFLFFBQUksMkJBQTJCLE9BQU8sVUFBYSwyQkFBMkIsT0FBTyxRQUFXO0FBQzVGLFlBQU0sSUFBSSxNQUFNLGdGQUFnRixRQUFRLFNBQVMsTUFBTTtBQUFBLElBQzNIO0FBQ0EsUUFBTSxnQkFBZ0IsT0FBTyxTQUFTLDJCQUEyQixJQUFJLEVBQUU7QUFDdkUsUUFBTSxnQkFBZ0IsT0FBTyxTQUFTLDJCQUEyQixJQUFJLEVBQUU7QUFDdkUsUUFBTSwwQkFBMEI7QUFDaEMsUUFBTSwwQkFBMEI7QUFDaEMsUUFBTSxzQkFBc0IsZ0JBQWdCO0FBQzVDLFFBQU0sZ0NBQWdDLGtCQUFrQiwyQkFBMkIsaUJBQWlCO0FBSXBHLFlBQVEscUNBQXFDLHVCQUF1QjtBQUFBO0FBQUE7OztBQ2hCcEUsSUFBQUMsY0FBQTtBQUFBO0FBQUE7QUFBQTtBQUNBLFdBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUM1RCxZQUFRLHdCQUF3QjtBQUNoQyxRQUFNLGtCQUFOLE1BQXNCO0FBQUEsTUFDbEIsWUFBWSxNQUFNLE9BQU87QUFDckIsYUFBSyxPQUFPO0FBQ1osYUFBSyxnQkFBZ0IsTUFBTSxjQUFjLEtBQUssS0FBSztBQUNuRCxhQUFLLG9CQUFvQixNQUFNLGtCQUFrQixLQUFLLEtBQUs7QUFDM0QsYUFBSyxjQUFjLE1BQU0sWUFBWSxLQUFLLEtBQUs7QUFDL0MsYUFBSyxTQUFTLE1BQU0sT0FBTyxLQUFLLEtBQUs7QUFDckMsYUFBSyxTQUFTLE1BQU0sT0FBTyxLQUFLLEtBQUs7QUFDckMsYUFBSyxXQUFXLE1BQU0sU0FBUyxLQUFLLEtBQUs7QUFDekMsYUFBSyxpQkFBaUIsTUFBTSxlQUFlLEtBQUssS0FBSztBQUFBLE1BQ3pEO0FBQUEsSUFDSjtBQUNBLGFBQVMsc0JBQXNCLE1BQU0sT0FBTztBQUN4QyxhQUFPLElBQUksZ0JBQWdCLE1BQU0sS0FBSztBQUFBLElBQzFDO0FBQ0EsWUFBUSx3QkFBd0I7QUFBQTtBQUFBOzs7QUNsQmhDLElBQUFDLGlCQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0EsV0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzVELFlBQVEsS0FBSztBQUNiLFFBQU1DLE1BQUs7QUFDWCxZQUFRLEtBQUtBO0FBQUE7QUFBQTs7O0FDSmI7QUFBQTtBQUFBO0FBQUE7QUFDQSxXQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsWUFBUSxtQkFBbUI7QUFDM0IsYUFBUyxpQkFBaUIsR0FBRyxHQUFHLFdBQVc7QUFJdkMsVUFBSSxFQUFFLFNBQVMsU0FBUyxHQUFHO0FBQ3ZCLGVBQU8sSUFBSTtBQUFBLE1BQ2Y7QUFDQSxhQUFPLElBQUksWUFBWTtBQUFBLElBQzNCO0FBQ0EsWUFBUSxtQkFBbUI7QUFBQTtBQUFBOzs7QUNaM0IsSUFBQUMsaUJBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQSxXQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsWUFBUSxVQUFVLFFBQVEsdUJBQXVCLFFBQVEsT0FBTztBQUNoRSxRQUFNLFNBQVM7QUFDZixRQUFNLE1BQU07QUFDWixRQUFNLGNBQWM7QUFDcEIsUUFBTSxRQUFRO0FBQ2QsUUFBTSxTQUFTO0FBQ2YsYUFBUyxLQUFLLFdBQVcsVUFBVSxVQUFVO0FBQ3pDLFVBQUksQ0FBQyxTQUFTLFNBQVMsWUFBWSxvQ0FBb0M7QUFDbkUsNkJBQXFCLFdBQVcsVUFBVSxRQUFRO0FBQ2xEO0FBQUEsTUFDSjtBQUNBLGNBQVEsV0FBVyxVQUFVLFFBQVE7QUFBQSxJQUN6QztBQUNBLFlBQVEsT0FBTztBQUNmLGFBQVMscUJBQXFCLFdBQVcsVUFBVSxVQUFVO0FBQ3pELGVBQVMsR0FBRyxRQUFRLFdBQVcsRUFBRSxlQUFlLEtBQUssR0FBRyxDQUFDLGNBQWMsWUFBWTtBQUMvRSxZQUFJLGlCQUFpQixNQUFNO0FBQ3ZCLDhCQUFvQixVQUFVLFlBQVk7QUFDMUM7QUFBQSxRQUNKO0FBQ0EsY0FBTSxVQUFVLFFBQVEsSUFBSSxDQUFDLFlBQVk7QUFBQSxVQUNyQztBQUFBLFVBQ0EsTUFBTSxPQUFPO0FBQUEsVUFDYixNQUFNLE9BQU8saUJBQWlCLFdBQVcsT0FBTyxNQUFNLFNBQVMsb0JBQW9CO0FBQUEsUUFDdkYsRUFBRTtBQUNGLFlBQUksQ0FBQyxTQUFTLHFCQUFxQjtBQUMvQiw4QkFBb0IsVUFBVSxPQUFPO0FBQ3JDO0FBQUEsUUFDSjtBQUNBLGNBQU0sUUFBUSxRQUFRLElBQUksQ0FBQyxVQUFVLGlCQUFpQixPQUFPLFFBQVEsQ0FBQztBQUN0RSxZQUFJLE9BQU8sQ0FBQyxVQUFVLGVBQWU7QUFDakMsY0FBSSxhQUFhLE1BQU07QUFDbkIsZ0NBQW9CLFVBQVUsUUFBUTtBQUN0QztBQUFBLFVBQ0o7QUFDQSw4QkFBb0IsVUFBVSxVQUFVO0FBQUEsUUFDNUMsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBQ0w7QUFDQSxZQUFRLHVCQUF1QjtBQUMvQixhQUFTLGlCQUFpQixPQUFPLFVBQVU7QUFDdkMsYUFBTyxDQUFDLFNBQVM7QUFDYixZQUFJLENBQUMsTUFBTSxPQUFPLGVBQWUsR0FBRztBQUNoQyxlQUFLLE1BQU0sS0FBSztBQUNoQjtBQUFBLFFBQ0o7QUFDQSxpQkFBUyxHQUFHLEtBQUssTUFBTSxNQUFNLENBQUMsV0FBVyxVQUFVO0FBQy9DLGNBQUksY0FBYyxNQUFNO0FBQ3BCLGdCQUFJLFNBQVMsZ0NBQWdDO0FBQ3pDLG1CQUFLLFNBQVM7QUFDZDtBQUFBLFlBQ0o7QUFDQSxpQkFBSyxNQUFNLEtBQUs7QUFDaEI7QUFBQSxVQUNKO0FBQ0EsZ0JBQU0sU0FBUyxNQUFNLEdBQUcsc0JBQXNCLE1BQU0sTUFBTSxLQUFLO0FBQy9ELGVBQUssTUFBTSxLQUFLO0FBQUEsUUFDcEIsQ0FBQztBQUFBLE1BQ0w7QUFBQSxJQUNKO0FBQ0EsYUFBUyxRQUFRLFdBQVcsVUFBVSxVQUFVO0FBQzVDLGVBQVMsR0FBRyxRQUFRLFdBQVcsQ0FBQyxjQUFjLFVBQVU7QUFDcEQsWUFBSSxpQkFBaUIsTUFBTTtBQUN2Qiw4QkFBb0IsVUFBVSxZQUFZO0FBQzFDO0FBQUEsUUFDSjtBQUNBLGNBQU0sUUFBUSxNQUFNLElBQUksQ0FBQyxTQUFTO0FBQzlCLGdCQUFNQyxRQUFPLE9BQU8saUJBQWlCLFdBQVcsTUFBTSxTQUFTLG9CQUFvQjtBQUNuRixpQkFBTyxDQUFDLFNBQVM7QUFDYixtQkFBTyxLQUFLQSxPQUFNLFNBQVMsZ0JBQWdCLENBQUMsT0FBTyxVQUFVO0FBQ3pELGtCQUFJLFVBQVUsTUFBTTtBQUNoQixxQkFBSyxLQUFLO0FBQ1Y7QUFBQSxjQUNKO0FBQ0Esb0JBQU0sUUFBUTtBQUFBLGdCQUNWO0FBQUEsZ0JBQ0EsTUFBQUE7QUFBQSxnQkFDQSxRQUFRLE1BQU0sR0FBRyxzQkFBc0IsTUFBTSxLQUFLO0FBQUEsY0FDdEQ7QUFDQSxrQkFBSSxTQUFTLE9BQU87QUFDaEIsc0JBQU0sUUFBUTtBQUFBLGNBQ2xCO0FBQ0EsbUJBQUssTUFBTSxLQUFLO0FBQUEsWUFDcEIsQ0FBQztBQUFBLFVBQ0w7QUFBQSxRQUNKLENBQUM7QUFDRCxZQUFJLE9BQU8sQ0FBQyxVQUFVLFlBQVk7QUFDOUIsY0FBSSxhQUFhLE1BQU07QUFDbkIsZ0NBQW9CLFVBQVUsUUFBUTtBQUN0QztBQUFBLFVBQ0o7QUFDQSw4QkFBb0IsVUFBVSxPQUFPO0FBQUEsUUFDekMsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBQ0w7QUFDQSxZQUFRLFVBQVU7QUFDbEIsYUFBUyxvQkFBb0IsVUFBVSxPQUFPO0FBQzFDLGVBQVMsS0FBSztBQUFBLElBQ2xCO0FBQ0EsYUFBUyxvQkFBb0IsVUFBVSxRQUFRO0FBQzNDLGVBQVMsTUFBTSxNQUFNO0FBQUEsSUFDekI7QUFBQTtBQUFBOzs7QUN2R0EsSUFBQUMsZ0JBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQSxXQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsWUFBUSxVQUFVLFFBQVEsdUJBQXVCLFFBQVEsT0FBTztBQUNoRSxRQUFNLFNBQVM7QUFDZixRQUFNLGNBQWM7QUFDcEIsUUFBTSxRQUFRO0FBQ2QsUUFBTSxTQUFTO0FBQ2YsYUFBUyxLQUFLLFdBQVcsVUFBVTtBQUMvQixVQUFJLENBQUMsU0FBUyxTQUFTLFlBQVksb0NBQW9DO0FBQ25FLGVBQU8scUJBQXFCLFdBQVcsUUFBUTtBQUFBLE1BQ25EO0FBQ0EsYUFBTyxRQUFRLFdBQVcsUUFBUTtBQUFBLElBQ3RDO0FBQ0EsWUFBUSxPQUFPO0FBQ2YsYUFBUyxxQkFBcUIsV0FBVyxVQUFVO0FBQy9DLFlBQU0sVUFBVSxTQUFTLEdBQUcsWUFBWSxXQUFXLEVBQUUsZUFBZSxLQUFLLENBQUM7QUFDMUUsYUFBTyxRQUFRLElBQUksQ0FBQyxXQUFXO0FBQzNCLGNBQU0sUUFBUTtBQUFBLFVBQ1Y7QUFBQSxVQUNBLE1BQU0sT0FBTztBQUFBLFVBQ2IsTUFBTSxPQUFPLGlCQUFpQixXQUFXLE9BQU8sTUFBTSxTQUFTLG9CQUFvQjtBQUFBLFFBQ3ZGO0FBQ0EsWUFBSSxNQUFNLE9BQU8sZUFBZSxLQUFLLFNBQVMscUJBQXFCO0FBQy9ELGNBQUk7QUFDQSxrQkFBTSxRQUFRLFNBQVMsR0FBRyxTQUFTLE1BQU0sSUFBSTtBQUM3QyxrQkFBTSxTQUFTLE1BQU0sR0FBRyxzQkFBc0IsTUFBTSxNQUFNLEtBQUs7QUFBQSxVQUNuRSxTQUNPLE9BQVA7QUFDSSxnQkFBSSxTQUFTLGdDQUFnQztBQUN6QyxvQkFBTTtBQUFBLFlBQ1Y7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUNBLGVBQU87QUFBQSxNQUNYLENBQUM7QUFBQSxJQUNMO0FBQ0EsWUFBUSx1QkFBdUI7QUFDL0IsYUFBUyxRQUFRLFdBQVcsVUFBVTtBQUNsQyxZQUFNLFFBQVEsU0FBUyxHQUFHLFlBQVksU0FBUztBQUMvQyxhQUFPLE1BQU0sSUFBSSxDQUFDLFNBQVM7QUFDdkIsY0FBTSxZQUFZLE9BQU8saUJBQWlCLFdBQVcsTUFBTSxTQUFTLG9CQUFvQjtBQUN4RixjQUFNLFFBQVEsT0FBTyxTQUFTLFdBQVcsU0FBUyxjQUFjO0FBQ2hFLGNBQU0sUUFBUTtBQUFBLFVBQ1Y7QUFBQSxVQUNBLE1BQU07QUFBQSxVQUNOLFFBQVEsTUFBTSxHQUFHLHNCQUFzQixNQUFNLEtBQUs7QUFBQSxRQUN0RDtBQUNBLFlBQUksU0FBUyxPQUFPO0FBQ2hCLGdCQUFNLFFBQVE7QUFBQSxRQUNsQjtBQUNBLGVBQU87QUFBQSxNQUNYLENBQUM7QUFBQSxJQUNMO0FBQ0EsWUFBUSxVQUFVO0FBQUE7QUFBQTs7O0FDckRsQixJQUFBQyxjQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0EsV0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzVELFlBQVEsMEJBQTBCLFFBQVEsc0JBQXNCO0FBQ2hFLFFBQU1DLE1BQUssUUFBUTtBQUNuQixZQUFRLHNCQUFzQjtBQUFBLE1BQzFCLE9BQU9BLElBQUc7QUFBQSxNQUNWLE1BQU1BLElBQUc7QUFBQSxNQUNULFdBQVdBLElBQUc7QUFBQSxNQUNkLFVBQVVBLElBQUc7QUFBQSxNQUNiLFNBQVNBLElBQUc7QUFBQSxNQUNaLGFBQWFBLElBQUc7QUFBQSxJQUNwQjtBQUNBLGFBQVMsd0JBQXdCLFdBQVc7QUFDeEMsVUFBSSxjQUFjLFFBQVc7QUFDekIsZUFBTyxRQUFRO0FBQUEsTUFDbkI7QUFDQSxhQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLFFBQVEsbUJBQW1CLEdBQUcsU0FBUztBQUFBLElBQ2xGO0FBQ0EsWUFBUSwwQkFBMEI7QUFBQTtBQUFBOzs7QUNsQmxDLElBQUFDLG9CQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0EsV0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzVELFFBQU1DLFFBQU8sUUFBUTtBQUNyQixRQUFNLFNBQVM7QUFDZixRQUFNQyxNQUFLO0FBQ1gsUUFBTSxXQUFOLE1BQWU7QUFBQSxNQUNYLFlBQVksV0FBVyxDQUFDLEdBQUc7QUFDdkIsYUFBSyxXQUFXO0FBQ2hCLGFBQUssc0JBQXNCLEtBQUssVUFBVSxLQUFLLFNBQVMscUJBQXFCLEtBQUs7QUFDbEYsYUFBSyxLQUFLQSxJQUFHLHdCQUF3QixLQUFLLFNBQVMsRUFBRTtBQUNyRCxhQUFLLHVCQUF1QixLQUFLLFVBQVUsS0FBSyxTQUFTLHNCQUFzQkQsTUFBSyxHQUFHO0FBQ3ZGLGFBQUssUUFBUSxLQUFLLFVBQVUsS0FBSyxTQUFTLE9BQU8sS0FBSztBQUN0RCxhQUFLLGlDQUFpQyxLQUFLLFVBQVUsS0FBSyxTQUFTLGdDQUFnQyxJQUFJO0FBQ3ZHLGFBQUssaUJBQWlCLElBQUksT0FBTyxTQUFTO0FBQUEsVUFDdEMsb0JBQW9CLEtBQUs7QUFBQSxVQUN6QixJQUFJLEtBQUs7QUFBQSxVQUNULGdDQUFnQyxLQUFLO0FBQUEsUUFDekMsQ0FBQztBQUFBLE1BQ0w7QUFBQSxNQUNBLFVBQVUsUUFBUSxPQUFPO0FBQ3JCLGVBQU8sV0FBVyxRQUFRLFdBQVcsU0FBUyxTQUFTO0FBQUEsTUFDM0Q7QUFBQSxJQUNKO0FBQ0EsWUFBUSxVQUFVO0FBQUE7QUFBQTs7O0FDdkJsQixJQUFBRSxlQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0EsV0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzVELFlBQVEsV0FBVyxRQUFRLGNBQWMsUUFBUSxVQUFVO0FBQzNELFFBQU0sUUFBUTtBQUNkLFFBQU0sT0FBTztBQUNiLFFBQU0sYUFBYTtBQUNuQixZQUFRLFdBQVcsV0FBVztBQUM5QixhQUFTLFFBQVFDLE9BQU0sNkJBQTZCLFVBQVU7QUFDMUQsVUFBSSxPQUFPLGdDQUFnQyxZQUFZO0FBQ25ELGNBQU0sS0FBS0EsT0FBTSxZQUFZLEdBQUcsMkJBQTJCO0FBQzNEO0FBQUEsTUFDSjtBQUNBLFlBQU0sS0FBS0EsT0FBTSxZQUFZLDJCQUEyQixHQUFHLFFBQVE7QUFBQSxJQUN2RTtBQUNBLFlBQVEsVUFBVTtBQUNsQixhQUFTLFlBQVlBLE9BQU0sbUJBQW1CO0FBQzFDLFlBQU0sV0FBVyxZQUFZLGlCQUFpQjtBQUM5QyxhQUFPLEtBQUssS0FBS0EsT0FBTSxRQUFRO0FBQUEsSUFDbkM7QUFDQSxZQUFRLGNBQWM7QUFDdEIsYUFBUyxZQUFZLG9CQUFvQixDQUFDLEdBQUc7QUFDekMsVUFBSSw2QkFBNkIsV0FBVyxTQUFTO0FBQ2pELGVBQU87QUFBQSxNQUNYO0FBQ0EsYUFBTyxJQUFJLFdBQVcsUUFBUSxpQkFBaUI7QUFBQSxJQUNuRDtBQUFBO0FBQUE7OztBQ3pCQTtBQUFBLG1EQUFBQyxTQUFBO0FBQUE7QUFBQTtBQUVBLGFBQVMsUUFBUyxhQUFhO0FBQzdCLFVBQUksT0FBTyxJQUFJLFlBQVk7QUFDM0IsVUFBSSxPQUFPO0FBRVgsZUFBUyxNQUFPO0FBQ2QsWUFBSSxVQUFVO0FBRWQsWUFBSSxRQUFRLE1BQU07QUFDaEIsaUJBQU8sUUFBUTtBQUFBLFFBQ2pCLE9BQU87QUFDTCxpQkFBTyxJQUFJLFlBQVk7QUFDdkIsaUJBQU87QUFBQSxRQUNUO0FBRUEsZ0JBQVEsT0FBTztBQUVmLGVBQU87QUFBQSxNQUNUO0FBRUEsZUFBUyxRQUFTLEtBQUs7QUFDckIsYUFBSyxPQUFPO0FBQ1osZUFBTztBQUFBLE1BQ1Q7QUFFQSxhQUFPO0FBQUEsUUFDTDtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLElBQUFBLFFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQ2hDakI7QUFBQSwrQ0FBQUMsU0FBQTtBQUFBO0FBQUE7QUFJQSxRQUFJLFVBQVU7QUFFZCxhQUFTLFVBQVcsU0FBUyxRQUFRLGFBQWE7QUFDaEQsVUFBSSxPQUFPLFlBQVksWUFBWTtBQUNqQyxzQkFBYztBQUNkLGlCQUFTO0FBQ1Qsa0JBQVU7QUFBQSxNQUNaO0FBRUEsVUFBSSxjQUFjLEdBQUc7QUFDbkIsY0FBTSxJQUFJLE1BQU0sOENBQThDO0FBQUEsTUFDaEU7QUFFQSxVQUFJLFFBQVEsUUFBUSxJQUFJO0FBQ3hCLFVBQUksWUFBWTtBQUNoQixVQUFJLFlBQVk7QUFDaEIsVUFBSSxXQUFXO0FBQ2YsVUFBSSxlQUFlO0FBRW5CLFVBQUksT0FBTztBQUFBLFFBQ1Q7QUFBQSxRQUNBLE9BQU87QUFBQSxRQUNQLFdBQVc7QUFBQSxRQUNYO0FBQUEsUUFDQSxRQUFRO0FBQUEsUUFDUjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0EsT0FBTztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFFQSxhQUFPO0FBRVAsZUFBUyxVQUFXO0FBQ2xCLGVBQU87QUFBQSxNQUNUO0FBRUEsZUFBUyxRQUFTO0FBQ2hCLGFBQUssU0FBUztBQUFBLE1BQ2hCO0FBRUEsZUFBUyxTQUFVO0FBQ2pCLFlBQUksVUFBVTtBQUNkLFlBQUksVUFBVTtBQUVkLGVBQU8sU0FBUztBQUNkLG9CQUFVLFFBQVE7QUFDbEI7QUFBQSxRQUNGO0FBRUEsZUFBTztBQUFBLE1BQ1Q7QUFFQSxlQUFTLFdBQVk7QUFDbkIsWUFBSSxVQUFVO0FBQ2QsWUFBSSxRQUFRLENBQUM7QUFFYixlQUFPLFNBQVM7QUFDZCxnQkFBTSxLQUFLLFFBQVEsS0FBSztBQUN4QixvQkFBVSxRQUFRO0FBQUEsUUFDcEI7QUFFQSxlQUFPO0FBQUEsTUFDVDtBQUVBLGVBQVMsU0FBVTtBQUNqQixZQUFJLENBQUMsS0FBSztBQUFRO0FBQ2xCLGFBQUssU0FBUztBQUNkLGlCQUFTLElBQUksR0FBRyxJQUFJLEtBQUssYUFBYSxLQUFLO0FBQ3pDO0FBQ0Esa0JBQVE7QUFBQSxRQUNWO0FBQUEsTUFDRjtBQUVBLGVBQVMsT0FBUTtBQUNmLGVBQU8sYUFBYSxLQUFLLEtBQUssT0FBTyxNQUFNO0FBQUEsTUFDN0M7QUFFQSxlQUFTLEtBQU0sT0FBTyxNQUFNO0FBQzFCLFlBQUksVUFBVSxNQUFNLElBQUk7QUFFeEIsZ0JBQVEsVUFBVTtBQUNsQixnQkFBUSxVQUFVO0FBQ2xCLGdCQUFRLFFBQVE7QUFDaEIsZ0JBQVEsV0FBVyxRQUFRO0FBQzNCLGdCQUFRLGVBQWU7QUFFdkIsWUFBSSxhQUFhLEtBQUssZUFBZSxLQUFLLFFBQVE7QUFDaEQsY0FBSSxXQUFXO0FBQ2Isc0JBQVUsT0FBTztBQUNqQix3QkFBWTtBQUFBLFVBQ2QsT0FBTztBQUNMLHdCQUFZO0FBQ1osd0JBQVk7QUFDWixpQkFBSyxVQUFVO0FBQUEsVUFDakI7QUFBQSxRQUNGLE9BQU87QUFDTDtBQUNBLGlCQUFPLEtBQUssU0FBUyxRQUFRLE9BQU8sUUFBUSxNQUFNO0FBQUEsUUFDcEQ7QUFBQSxNQUNGO0FBRUEsZUFBUyxRQUFTLE9BQU8sTUFBTTtBQUM3QixZQUFJLFVBQVUsTUFBTSxJQUFJO0FBRXhCLGdCQUFRLFVBQVU7QUFDbEIsZ0JBQVEsVUFBVTtBQUNsQixnQkFBUSxRQUFRO0FBQ2hCLGdCQUFRLFdBQVcsUUFBUTtBQUUzQixZQUFJLGFBQWEsS0FBSyxlQUFlLEtBQUssUUFBUTtBQUNoRCxjQUFJLFdBQVc7QUFDYixvQkFBUSxPQUFPO0FBQ2Ysd0JBQVk7QUFBQSxVQUNkLE9BQU87QUFDTCx3QkFBWTtBQUNaLHdCQUFZO0FBQ1osaUJBQUssVUFBVTtBQUFBLFVBQ2pCO0FBQUEsUUFDRixPQUFPO0FBQ0w7QUFDQSxpQkFBTyxLQUFLLFNBQVMsUUFBUSxPQUFPLFFBQVEsTUFBTTtBQUFBLFFBQ3BEO0FBQUEsTUFDRjtBQUVBLGVBQVMsUUFBUyxRQUFRO0FBQ3hCLFlBQUksUUFBUTtBQUNWLGdCQUFNLFFBQVEsTUFBTTtBQUFBLFFBQ3RCO0FBQ0EsWUFBSSxPQUFPO0FBQ1gsWUFBSSxNQUFNO0FBQ1IsY0FBSSxDQUFDLEtBQUssUUFBUTtBQUNoQixnQkFBSSxjQUFjLFdBQVc7QUFDM0IsMEJBQVk7QUFBQSxZQUNkO0FBQ0Esd0JBQVksS0FBSztBQUNqQixpQkFBSyxPQUFPO0FBQ1osbUJBQU8sS0FBSyxTQUFTLEtBQUssT0FBTyxLQUFLLE1BQU07QUFDNUMsZ0JBQUksY0FBYyxNQUFNO0FBQ3RCLG1CQUFLLE1BQU07QUFBQSxZQUNiO0FBQUEsVUFDRixPQUFPO0FBQ0w7QUFBQSxVQUNGO0FBQUEsUUFDRixXQUFXLEVBQUUsYUFBYSxHQUFHO0FBQzNCLGVBQUssTUFBTTtBQUFBLFFBQ2I7QUFBQSxNQUNGO0FBRUEsZUFBUyxPQUFRO0FBQ2Ysb0JBQVk7QUFDWixvQkFBWTtBQUNaLGFBQUssUUFBUTtBQUFBLE1BQ2Y7QUFFQSxlQUFTLGVBQWdCO0FBQ3ZCLG9CQUFZO0FBQ1osb0JBQVk7QUFDWixhQUFLLE1BQU07QUFDWCxhQUFLLFFBQVE7QUFBQSxNQUNmO0FBRUEsZUFBUyxNQUFPLFNBQVM7QUFDdkIsdUJBQWU7QUFBQSxNQUNqQjtBQUFBLElBQ0Y7QUFFQSxhQUFTLE9BQVE7QUFBQSxJQUFDO0FBRWxCLGFBQVMsT0FBUTtBQUNmLFdBQUssUUFBUTtBQUNiLFdBQUssV0FBVztBQUNoQixXQUFLLE9BQU87QUFDWixXQUFLLFVBQVU7QUFDZixXQUFLLFVBQVU7QUFDZixXQUFLLGVBQWU7QUFFcEIsVUFBSSxPQUFPO0FBRVgsV0FBSyxTQUFTLFNBQVMsT0FBUSxLQUFLLFFBQVE7QUFDMUMsWUFBSSxXQUFXLEtBQUs7QUFDcEIsWUFBSSxlQUFlLEtBQUs7QUFDeEIsWUFBSSxNQUFNLEtBQUs7QUFDZixhQUFLLFFBQVE7QUFDYixhQUFLLFdBQVc7QUFDaEIsWUFBSSxLQUFLLGNBQWM7QUFDckIsdUJBQWEsS0FBSyxHQUFHO0FBQUEsUUFDdkI7QUFDQSxpQkFBUyxLQUFLLEtBQUssU0FBUyxLQUFLLE1BQU07QUFDdkMsYUFBSyxRQUFRLElBQUk7QUFBQSxNQUNuQjtBQUFBLElBQ0Y7QUFFQSxhQUFTLGdCQUFpQixTQUFTLFFBQVEsYUFBYTtBQUN0RCxVQUFJLE9BQU8sWUFBWSxZQUFZO0FBQ2pDLHNCQUFjO0FBQ2QsaUJBQVM7QUFDVCxrQkFBVTtBQUFBLE1BQ1o7QUFFQSxlQUFTLGFBQWMsS0FBSyxJQUFJO0FBQzlCLGVBQU8sS0FBSyxNQUFNLEdBQUcsRUFDbEIsS0FBSyxTQUFVLEtBQUs7QUFDbkIsYUFBRyxNQUFNLEdBQUc7QUFBQSxRQUNkLEdBQUcsRUFBRTtBQUFBLE1BQ1Q7QUFFQSxVQUFJLFFBQVEsVUFBVSxTQUFTLGNBQWMsV0FBVztBQUV4RCxVQUFJLFNBQVMsTUFBTTtBQUNuQixVQUFJLFlBQVksTUFBTTtBQUV0QixZQUFNLE9BQU87QUFDYixZQUFNLFVBQVU7QUFDaEIsWUFBTSxVQUFVO0FBRWhCLGFBQU87QUFFUCxlQUFTLEtBQU0sT0FBTztBQUNwQixZQUFJLElBQUksSUFBSSxRQUFRLFNBQVUsU0FBUyxRQUFRO0FBQzdDLGlCQUFPLE9BQU8sU0FBVSxLQUFLLFFBQVE7QUFDbkMsZ0JBQUksS0FBSztBQUNQLHFCQUFPLEdBQUc7QUFDVjtBQUFBLFlBQ0Y7QUFDQSxvQkFBUSxNQUFNO0FBQUEsVUFDaEIsQ0FBQztBQUFBLFFBQ0gsQ0FBQztBQUtELFVBQUUsTUFBTSxJQUFJO0FBRVosZUFBTztBQUFBLE1BQ1Q7QUFFQSxlQUFTLFFBQVMsT0FBTztBQUN2QixZQUFJLElBQUksSUFBSSxRQUFRLFNBQVUsU0FBUyxRQUFRO0FBQzdDLG9CQUFVLE9BQU8sU0FBVSxLQUFLLFFBQVE7QUFDdEMsZ0JBQUksS0FBSztBQUNQLHFCQUFPLEdBQUc7QUFDVjtBQUFBLFlBQ0Y7QUFDQSxvQkFBUSxNQUFNO0FBQUEsVUFDaEIsQ0FBQztBQUFBLFFBQ0gsQ0FBQztBQUtELFVBQUUsTUFBTSxJQUFJO0FBRVosZUFBTztBQUFBLE1BQ1Q7QUFFQSxlQUFTLFVBQVc7QUFDbEIsWUFBSSxNQUFNLEtBQUssR0FBRztBQUNoQixpQkFBTyxJQUFJLFFBQVEsU0FBVSxTQUFTO0FBQ3BDLG9CQUFRO0FBQUEsVUFDVixDQUFDO0FBQUEsUUFDSDtBQUVBLFlBQUksZ0JBQWdCLE1BQU07QUFFMUIsWUFBSSxJQUFJLElBQUksUUFBUSxTQUFVLFNBQVM7QUFDckMsZ0JBQU0sUUFBUSxXQUFZO0FBQ3hCLDBCQUFjO0FBQ2Qsb0JBQVE7QUFBQSxVQUNWO0FBQUEsUUFDRixDQUFDO0FBRUQsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBRUEsSUFBQUEsUUFBTyxVQUFVO0FBQ2pCLElBQUFBLFFBQU8sUUFBUSxVQUFVO0FBQUE7QUFBQTs7O0FDaFN6QixJQUFBQyxrQkFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBLFdBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUM1RCxZQUFRLG1CQUFtQixRQUFRLDhCQUE4QixRQUFRLGtCQUFrQixRQUFRLGVBQWU7QUFDbEgsYUFBUyxhQUFhLFVBQVUsT0FBTztBQUNuQyxVQUFJLFNBQVMsZ0JBQWdCLE1BQU07QUFDL0IsZUFBTztBQUFBLE1BQ1g7QUFDQSxhQUFPLENBQUMsU0FBUyxZQUFZLEtBQUs7QUFBQSxJQUN0QztBQUNBLFlBQVEsZUFBZTtBQUN2QixhQUFTLGdCQUFnQixRQUFRLE9BQU87QUFDcEMsYUFBTyxXQUFXLFFBQVEsT0FBTyxLQUFLO0FBQUEsSUFDMUM7QUFDQSxZQUFRLGtCQUFrQjtBQUMxQixhQUFTLDRCQUE0QixVQUFVLFdBQVc7QUFDdEQsYUFBTyxTQUFTLE1BQU0sT0FBTyxFQUFFLEtBQUssU0FBUztBQUFBLElBQ2pEO0FBQ0EsWUFBUSw4QkFBOEI7QUFDdEMsYUFBUyxpQkFBaUIsR0FBRyxHQUFHLFdBQVc7QUFDdkMsVUFBSSxNQUFNLElBQUk7QUFDVixlQUFPO0FBQUEsTUFDWDtBQUlBLFVBQUksRUFBRSxTQUFTLFNBQVMsR0FBRztBQUN2QixlQUFPLElBQUk7QUFBQSxNQUNmO0FBQ0EsYUFBTyxJQUFJLFlBQVk7QUFBQSxJQUMzQjtBQUNBLFlBQVEsbUJBQW1CO0FBQUE7QUFBQTs7O0FDOUIzQjtBQUFBO0FBQUE7QUFBQTtBQUNBLFdBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUM1RCxRQUFNLFNBQVM7QUFDZixRQUFNLFNBQU4sTUFBYTtBQUFBLE1BQ1QsWUFBWSxPQUFPLFdBQVc7QUFDMUIsYUFBSyxRQUFRO0FBQ2IsYUFBSyxZQUFZO0FBQ2pCLGFBQUssUUFBUSxPQUFPLDRCQUE0QixPQUFPLFVBQVUsb0JBQW9CO0FBQUEsTUFDekY7QUFBQSxJQUNKO0FBQ0EsWUFBUSxVQUFVO0FBQUE7QUFBQTs7O0FDVmxCLElBQUFDLGlCQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0EsV0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzVELFFBQU0sV0FBVyxRQUFRO0FBQ3pCLFFBQU0sWUFBWTtBQUNsQixRQUFNLFFBQVE7QUFDZCxRQUFNLFNBQVM7QUFDZixRQUFNLFdBQVc7QUFDakIsUUFBTSxjQUFOLGNBQTBCLFNBQVMsUUFBUTtBQUFBLE1BQ3ZDLFlBQVksT0FBTyxXQUFXO0FBQzFCLGNBQU0sT0FBTyxTQUFTO0FBQ3RCLGFBQUssWUFBWTtBQUNqQixhQUFLLFdBQVcsVUFBVTtBQUMxQixhQUFLLFdBQVcsSUFBSSxTQUFTLGFBQWE7QUFDMUMsYUFBSyxTQUFTLE1BQU0sS0FBSyxRQUFRLEtBQUssSUFBSSxHQUFHLEtBQUssVUFBVSxXQUFXO0FBQ3ZFLGFBQUssZ0JBQWdCO0FBQ3JCLGFBQUssZUFBZTtBQUNwQixhQUFLLE9BQU8sUUFBUSxNQUFNO0FBQ3RCLGNBQUksQ0FBQyxLQUFLLGVBQWU7QUFDckIsaUJBQUssU0FBUyxLQUFLLEtBQUs7QUFBQSxVQUM1QjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsTUFDQSxPQUFPO0FBQ0gsYUFBSyxnQkFBZ0I7QUFDckIsYUFBSyxlQUFlO0FBQ3BCLHFCQUFhLE1BQU07QUFDZixlQUFLLGFBQWEsS0FBSyxPQUFPLEtBQUssVUFBVSxRQUFRO0FBQUEsUUFDekQsQ0FBQztBQUNELGVBQU8sS0FBSztBQUFBLE1BQ2hCO0FBQUEsTUFDQSxJQUFJLGNBQWM7QUFDZCxlQUFPLEtBQUs7QUFBQSxNQUNoQjtBQUFBLE1BQ0EsVUFBVTtBQUNOLFlBQUksS0FBSyxjQUFjO0FBQ25CLGdCQUFNLElBQUksTUFBTSxpQ0FBaUM7QUFBQSxRQUNyRDtBQUNBLGFBQUssZUFBZTtBQUNwQixhQUFLLE9BQU8sYUFBYTtBQUFBLE1BQzdCO0FBQUEsTUFDQSxRQUFRLFVBQVU7QUFDZCxhQUFLLFNBQVMsR0FBRyxTQUFTLFFBQVE7QUFBQSxNQUN0QztBQUFBLE1BQ0EsUUFBUSxVQUFVO0FBQ2QsYUFBSyxTQUFTLEtBQUssU0FBUyxRQUFRO0FBQUEsTUFDeEM7QUFBQSxNQUNBLE1BQU0sVUFBVTtBQUNaLGFBQUssU0FBUyxLQUFLLE9BQU8sUUFBUTtBQUFBLE1BQ3RDO0FBQUEsTUFDQSxhQUFhLFdBQVcsTUFBTTtBQUMxQixjQUFNLFlBQVksRUFBRSxXQUFXLEtBQUs7QUFDcEMsYUFBSyxPQUFPLEtBQUssV0FBVyxDQUFDLFVBQVU7QUFDbkMsY0FBSSxVQUFVLE1BQU07QUFDaEIsaUJBQUssYUFBYSxLQUFLO0FBQUEsVUFDM0I7QUFBQSxRQUNKLENBQUM7QUFBQSxNQUNMO0FBQUEsTUFDQSxRQUFRLE1BQU0sTUFBTTtBQUNoQixhQUFLLFNBQVMsS0FBSyxXQUFXLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxPQUFPLFlBQVk7QUFDaEYsY0FBSSxVQUFVLE1BQU07QUFDaEIsaUJBQUssT0FBTyxNQUFTO0FBQ3JCO0FBQUEsVUFDSjtBQUNBLHFCQUFXLFNBQVMsU0FBUztBQUN6QixpQkFBSyxhQUFhLE9BQU8sS0FBSyxJQUFJO0FBQUEsVUFDdEM7QUFDQSxlQUFLLE1BQU0sTUFBUztBQUFBLFFBQ3hCLENBQUM7QUFBQSxNQUNMO0FBQUEsTUFDQSxhQUFhLE9BQU87QUFDaEIsWUFBSSxLQUFLLGdCQUFnQixDQUFDLE9BQU8sYUFBYSxLQUFLLFdBQVcsS0FBSyxHQUFHO0FBQ2xFO0FBQUEsUUFDSjtBQUNBLGFBQUssZ0JBQWdCO0FBQ3JCLGFBQUssZUFBZTtBQUNwQixhQUFLLFNBQVMsS0FBSyxTQUFTLEtBQUs7QUFBQSxNQUNyQztBQUFBLE1BQ0EsYUFBYSxPQUFPLE1BQU07QUFDdEIsWUFBSSxLQUFLLGdCQUFnQixLQUFLLGVBQWU7QUFDekM7QUFBQSxRQUNKO0FBQ0EsY0FBTSxXQUFXLE1BQU07QUFDdkIsWUFBSSxTQUFTLFFBQVc7QUFDcEIsZ0JBQU0sT0FBTyxPQUFPLGlCQUFpQixNQUFNLE1BQU0sTUFBTSxLQUFLLFVBQVUsb0JBQW9CO0FBQUEsUUFDOUY7QUFDQSxZQUFJLE9BQU8sZ0JBQWdCLEtBQUssVUFBVSxhQUFhLEtBQUssR0FBRztBQUMzRCxlQUFLLFdBQVcsS0FBSztBQUFBLFFBQ3pCO0FBQ0EsWUFBSSxNQUFNLE9BQU8sWUFBWSxLQUFLLE9BQU8sZ0JBQWdCLEtBQUssVUFBVSxZQUFZLEtBQUssR0FBRztBQUN4RixlQUFLLGFBQWEsVUFBVSxTQUFTLFNBQVksU0FBWSxNQUFNLElBQUk7QUFBQSxRQUMzRTtBQUFBLE1BQ0o7QUFBQSxNQUNBLFdBQVcsT0FBTztBQUNkLGFBQUssU0FBUyxLQUFLLFNBQVMsS0FBSztBQUFBLE1BQ3JDO0FBQUEsSUFDSjtBQUNBLFlBQVEsVUFBVTtBQUFBO0FBQUE7OztBQ2hHbEIsSUFBQUMsaUJBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQSxXQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsUUFBTSxVQUFVO0FBQ2hCLFFBQU0sZ0JBQU4sTUFBb0I7QUFBQSxNQUNoQixZQUFZLE9BQU8sV0FBVztBQUMxQixhQUFLLFFBQVE7QUFDYixhQUFLLFlBQVk7QUFDakIsYUFBSyxVQUFVLElBQUksUUFBUSxRQUFRLEtBQUssT0FBTyxLQUFLLFNBQVM7QUFDN0QsYUFBSyxXQUFXLENBQUM7QUFBQSxNQUNyQjtBQUFBLE1BQ0EsS0FBSyxVQUFVO0FBQ1gsYUFBSyxRQUFRLFFBQVEsQ0FBQyxVQUFVO0FBQzVCLDhCQUFvQixVQUFVLEtBQUs7QUFBQSxRQUN2QyxDQUFDO0FBQ0QsYUFBSyxRQUFRLFFBQVEsQ0FBQyxVQUFVO0FBQzVCLGVBQUssU0FBUyxLQUFLLEtBQUs7QUFBQSxRQUM1QixDQUFDO0FBQ0QsYUFBSyxRQUFRLE1BQU0sTUFBTTtBQUNyQiw4QkFBb0IsVUFBVSxLQUFLLFFBQVE7QUFBQSxRQUMvQyxDQUFDO0FBQ0QsYUFBSyxRQUFRLEtBQUs7QUFBQSxNQUN0QjtBQUFBLElBQ0o7QUFDQSxZQUFRLFVBQVU7QUFDbEIsYUFBUyxvQkFBb0IsVUFBVSxPQUFPO0FBQzFDLGVBQVMsS0FBSztBQUFBLElBQ2xCO0FBQ0EsYUFBUyxvQkFBb0IsVUFBVSxTQUFTO0FBQzVDLGVBQVMsTUFBTSxPQUFPO0FBQUEsSUFDMUI7QUFBQTtBQUFBOzs7QUM3QkEsSUFBQUMsa0JBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQSxXQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsUUFBTSxXQUFXLFFBQVE7QUFDekIsUUFBTSxVQUFVO0FBQ2hCLFFBQU0saUJBQU4sTUFBcUI7QUFBQSxNQUNqQixZQUFZLE9BQU8sV0FBVztBQUMxQixhQUFLLFFBQVE7QUFDYixhQUFLLFlBQVk7QUFDakIsYUFBSyxVQUFVLElBQUksUUFBUSxRQUFRLEtBQUssT0FBTyxLQUFLLFNBQVM7QUFDN0QsYUFBSyxVQUFVLElBQUksU0FBUyxTQUFTO0FBQUEsVUFDakMsWUFBWTtBQUFBLFVBQ1osTUFBTSxNQUFNO0FBQUEsVUFBRTtBQUFBLFVBQ2QsU0FBUyxNQUFNO0FBQ1gsZ0JBQUksQ0FBQyxLQUFLLFFBQVEsYUFBYTtBQUMzQixtQkFBSyxRQUFRLFFBQVE7QUFBQSxZQUN6QjtBQUFBLFVBQ0o7QUFBQSxRQUNKLENBQUM7QUFBQSxNQUNMO0FBQUEsTUFDQSxPQUFPO0FBQ0gsYUFBSyxRQUFRLFFBQVEsQ0FBQyxVQUFVO0FBQzVCLGVBQUssUUFBUSxLQUFLLFNBQVMsS0FBSztBQUFBLFFBQ3BDLENBQUM7QUFDRCxhQUFLLFFBQVEsUUFBUSxDQUFDLFVBQVU7QUFDNUIsZUFBSyxRQUFRLEtBQUssS0FBSztBQUFBLFFBQzNCLENBQUM7QUFDRCxhQUFLLFFBQVEsTUFBTSxNQUFNO0FBQ3JCLGVBQUssUUFBUSxLQUFLLElBQUk7QUFBQSxRQUMxQixDQUFDO0FBQ0QsYUFBSyxRQUFRLEtBQUs7QUFDbEIsZUFBTyxLQUFLO0FBQUEsTUFDaEI7QUFBQSxJQUNKO0FBQ0EsWUFBUSxVQUFVO0FBQUE7QUFBQTs7O0FDakNsQixJQUFBQyxnQkFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBLFdBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUM1RCxRQUFNLFlBQVk7QUFDbEIsUUFBTSxTQUFTO0FBQ2YsUUFBTSxXQUFXO0FBQ2pCLFFBQU0sYUFBTixjQUF5QixTQUFTLFFBQVE7QUFBQSxNQUN0QyxjQUFjO0FBQ1YsY0FBTSxHQUFHLFNBQVM7QUFDbEIsYUFBSyxXQUFXLFVBQVU7QUFDMUIsYUFBSyxXQUFXLENBQUM7QUFDakIsYUFBSyxTQUFTLG9CQUFJLElBQUk7QUFBQSxNQUMxQjtBQUFBLE1BQ0EsT0FBTztBQUNILGFBQUssYUFBYSxLQUFLLE9BQU8sS0FBSyxVQUFVLFFBQVE7QUFDckQsYUFBSyxhQUFhO0FBQ2xCLGVBQU8sS0FBSztBQUFBLE1BQ2hCO0FBQUEsTUFDQSxhQUFhLFdBQVcsTUFBTTtBQUMxQixhQUFLLE9BQU8sSUFBSSxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQUEsTUFDdkM7QUFBQSxNQUNBLGVBQWU7QUFDWCxtQkFBVyxRQUFRLEtBQUssT0FBTyxPQUFPLEdBQUc7QUFDckMsZUFBSyxpQkFBaUIsS0FBSyxXQUFXLEtBQUssSUFBSTtBQUFBLFFBQ25EO0FBQUEsTUFDSjtBQUFBLE1BQ0EsaUJBQWlCLFdBQVcsTUFBTTtBQUM5QixZQUFJO0FBQ0EsZ0JBQU0sVUFBVSxLQUFLLFNBQVMsV0FBVyxLQUFLLFVBQVUsaUJBQWlCO0FBQ3pFLHFCQUFXLFNBQVMsU0FBUztBQUN6QixpQkFBSyxhQUFhLE9BQU8sSUFBSTtBQUFBLFVBQ2pDO0FBQUEsUUFDSixTQUNPLE9BQVA7QUFDSSxlQUFLLGFBQWEsS0FBSztBQUFBLFFBQzNCO0FBQUEsTUFDSjtBQUFBLE1BQ0EsYUFBYSxPQUFPO0FBQ2hCLFlBQUksQ0FBQyxPQUFPLGFBQWEsS0FBSyxXQUFXLEtBQUssR0FBRztBQUM3QztBQUFBLFFBQ0o7QUFDQSxjQUFNO0FBQUEsTUFDVjtBQUFBLE1BQ0EsYUFBYSxPQUFPLE1BQU07QUFDdEIsY0FBTSxXQUFXLE1BQU07QUFDdkIsWUFBSSxTQUFTLFFBQVc7QUFDcEIsZ0JBQU0sT0FBTyxPQUFPLGlCQUFpQixNQUFNLE1BQU0sTUFBTSxLQUFLLFVBQVUsb0JBQW9CO0FBQUEsUUFDOUY7QUFDQSxZQUFJLE9BQU8sZ0JBQWdCLEtBQUssVUFBVSxhQUFhLEtBQUssR0FBRztBQUMzRCxlQUFLLGVBQWUsS0FBSztBQUFBLFFBQzdCO0FBQ0EsWUFBSSxNQUFNLE9BQU8sWUFBWSxLQUFLLE9BQU8sZ0JBQWdCLEtBQUssVUFBVSxZQUFZLEtBQUssR0FBRztBQUN4RixlQUFLLGFBQWEsVUFBVSxTQUFTLFNBQVksU0FBWSxNQUFNLElBQUk7QUFBQSxRQUMzRTtBQUFBLE1BQ0o7QUFBQSxNQUNBLGVBQWUsT0FBTztBQUNsQixhQUFLLFNBQVMsS0FBSyxLQUFLO0FBQUEsTUFDNUI7QUFBQSxJQUNKO0FBQ0EsWUFBUSxVQUFVO0FBQUE7QUFBQTs7O0FDMURsQixJQUFBQyxnQkFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBLFdBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUM1RCxRQUFNLFNBQVM7QUFDZixRQUFNLGVBQU4sTUFBbUI7QUFBQSxNQUNmLFlBQVksT0FBTyxXQUFXO0FBQzFCLGFBQUssUUFBUTtBQUNiLGFBQUssWUFBWTtBQUNqQixhQUFLLFVBQVUsSUFBSSxPQUFPLFFBQVEsS0FBSyxPQUFPLEtBQUssU0FBUztBQUFBLE1BQ2hFO0FBQUEsTUFDQSxPQUFPO0FBQ0gsZUFBTyxLQUFLLFFBQVEsS0FBSztBQUFBLE1BQzdCO0FBQUEsSUFDSjtBQUNBLFlBQVEsVUFBVTtBQUFBO0FBQUE7OztBQ2JsQixJQUFBQyxvQkFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBLFdBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUM1RCxRQUFNQyxRQUFPLFFBQVE7QUFDckIsUUFBTSxZQUFZO0FBQ2xCLFFBQU0sV0FBTixNQUFlO0FBQUEsTUFDWCxZQUFZLFdBQVcsQ0FBQyxHQUFHO0FBQ3ZCLGFBQUssV0FBVztBQUNoQixhQUFLLFdBQVcsS0FBSyxVQUFVLEtBQUssU0FBUyxVQUFVLE1BQVM7QUFDaEUsYUFBSyxjQUFjLEtBQUssVUFBVSxLQUFLLFNBQVMsYUFBYSxPQUFPLGlCQUFpQjtBQUNyRixhQUFLLGFBQWEsS0FBSyxVQUFVLEtBQUssU0FBUyxZQUFZLElBQUk7QUFDL0QsYUFBSyxjQUFjLEtBQUssVUFBVSxLQUFLLFNBQVMsYUFBYSxJQUFJO0FBQ2pFLGFBQUssY0FBYyxLQUFLLFVBQVUsS0FBSyxTQUFTLGFBQWEsSUFBSTtBQUNqRSxhQUFLLHVCQUF1QixLQUFLLFVBQVUsS0FBSyxTQUFTLHNCQUFzQkEsTUFBSyxHQUFHO0FBQ3ZGLGFBQUssb0JBQW9CLElBQUksVUFBVSxTQUFTO0FBQUEsVUFDNUMscUJBQXFCLEtBQUssU0FBUztBQUFBLFVBQ25DLElBQUksS0FBSyxTQUFTO0FBQUEsVUFDbEIsc0JBQXNCLEtBQUssU0FBUztBQUFBLFVBQ3BDLE9BQU8sS0FBSyxTQUFTO0FBQUEsVUFDckIsZ0NBQWdDLEtBQUssU0FBUztBQUFBLFFBQ2xELENBQUM7QUFBQSxNQUNMO0FBQUEsTUFDQSxVQUFVLFFBQVEsT0FBTztBQUNyQixlQUFPLFdBQVcsUUFBUSxXQUFXLFNBQVMsU0FBUztBQUFBLE1BQzNEO0FBQUEsSUFDSjtBQUNBLFlBQVEsVUFBVTtBQUFBO0FBQUE7OztBQ3pCbEIsSUFBQUMsZUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBLFdBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUM1RCxZQUFRLFdBQVcsUUFBUSxhQUFhLFFBQVEsV0FBVyxRQUFRLE9BQU87QUFDMUUsUUFBTSxVQUFVO0FBQ2hCLFFBQU0sV0FBVztBQUNqQixRQUFNLFNBQVM7QUFDZixRQUFNLGFBQWE7QUFDbkIsWUFBUSxXQUFXLFdBQVc7QUFDOUIsYUFBUyxLQUFLLFdBQVcsNkJBQTZCLFVBQVU7QUFDNUQsVUFBSSxPQUFPLGdDQUFnQyxZQUFZO0FBQ25ELFlBQUksUUFBUSxRQUFRLFdBQVcsWUFBWSxDQUFDLEVBQUUsS0FBSywyQkFBMkI7QUFDOUU7QUFBQSxNQUNKO0FBQ0EsVUFBSSxRQUFRLFFBQVEsV0FBVyxZQUFZLDJCQUEyQixDQUFDLEVBQUUsS0FBSyxRQUFRO0FBQUEsSUFDMUY7QUFDQSxZQUFRLE9BQU87QUFDZixhQUFTLFNBQVMsV0FBVyxtQkFBbUI7QUFDNUMsWUFBTSxXQUFXLFlBQVksaUJBQWlCO0FBQzlDLFlBQU0sV0FBVyxJQUFJLE9BQU8sUUFBUSxXQUFXLFFBQVE7QUFDdkQsYUFBTyxTQUFTLEtBQUs7QUFBQSxJQUN6QjtBQUNBLFlBQVEsV0FBVztBQUNuQixhQUFTLFdBQVcsV0FBVyxtQkFBbUI7QUFDOUMsWUFBTSxXQUFXLFlBQVksaUJBQWlCO0FBQzlDLFlBQU0sV0FBVyxJQUFJLFNBQVMsUUFBUSxXQUFXLFFBQVE7QUFDekQsYUFBTyxTQUFTLEtBQUs7QUFBQSxJQUN6QjtBQUNBLFlBQVEsYUFBYTtBQUNyQixhQUFTLFlBQVksb0JBQW9CLENBQUMsR0FBRztBQUN6QyxVQUFJLDZCQUE2QixXQUFXLFNBQVM7QUFDakQsZUFBTztBQUFBLE1BQ1g7QUFDQSxhQUFPLElBQUksV0FBVyxRQUFRLGlCQUFpQjtBQUFBLElBQ25EO0FBQUE7QUFBQTs7O0FDakNBLElBQUFDLGtCQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0EsV0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzVELFFBQU1DLFFBQU8sUUFBUTtBQUNyQixRQUFNLFNBQVM7QUFDZixRQUFNLFFBQVE7QUFDZCxRQUFNLFNBQU4sTUFBYTtBQUFBLE1BQ1QsWUFBWSxXQUFXO0FBQ25CLGFBQUssWUFBWTtBQUNqQixhQUFLLGtCQUFrQixJQUFJLE9BQU8sU0FBUztBQUFBLFVBQ3ZDLG9CQUFvQixLQUFLLFVBQVU7QUFBQSxVQUNuQyxJQUFJLEtBQUssVUFBVTtBQUFBLFVBQ25CLGdDQUFnQyxLQUFLLFVBQVU7QUFBQSxRQUNuRCxDQUFDO0FBQUEsTUFDTDtBQUFBLE1BQ0Esa0JBQWtCLFVBQVU7QUFDeEIsZUFBT0EsTUFBSyxRQUFRLEtBQUssVUFBVSxLQUFLLFFBQVE7QUFBQSxNQUNwRDtBQUFBLE1BQ0EsV0FBVyxPQUFPLFNBQVM7QUFDdkIsY0FBTSxRQUFRO0FBQUEsVUFDVixNQUFNO0FBQUEsVUFDTixNQUFNO0FBQUEsVUFDTixRQUFRLE1BQU0sR0FBRyxzQkFBc0IsU0FBUyxLQUFLO0FBQUEsUUFDekQ7QUFDQSxZQUFJLEtBQUssVUFBVSxPQUFPO0FBQ3RCLGdCQUFNLFFBQVE7QUFBQSxRQUNsQjtBQUNBLGVBQU87QUFBQSxNQUNYO0FBQUEsTUFDQSxjQUFjLE9BQU87QUFDakIsZUFBTyxDQUFDLE1BQU0sTUFBTSxrQkFBa0IsS0FBSyxLQUFLLENBQUMsS0FBSyxVQUFVO0FBQUEsTUFDcEU7QUFBQSxJQUNKO0FBQ0EsWUFBUSxVQUFVO0FBQUE7QUFBQTs7O0FDaENsQixJQUFBQyxrQkFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBLFdBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUM1RCxRQUFNLFdBQVcsUUFBUTtBQUN6QixRQUFNLFNBQVM7QUFDZixRQUFNLFNBQVM7QUFDZixRQUFNLFdBQVc7QUFDakIsUUFBTSxlQUFOLGNBQTJCLFNBQVMsUUFBUTtBQUFBLE1BQ3hDLGNBQWM7QUFDVixjQUFNLEdBQUcsU0FBUztBQUNsQixhQUFLLGNBQWMsT0FBTztBQUMxQixhQUFLLFFBQVEsT0FBTztBQUFBLE1BQ3hCO0FBQUEsTUFDQSxRQUFRLE1BQU0sU0FBUztBQUNuQixlQUFPLEtBQUssWUFBWSxNQUFNLE9BQU87QUFBQSxNQUN6QztBQUFBLE1BQ0EsT0FBTyxVQUFVLFNBQVM7QUFDdEIsY0FBTSxZQUFZLFNBQVMsSUFBSSxLQUFLLG1CQUFtQixJQUFJO0FBQzNELGNBQU0sU0FBUyxJQUFJLFNBQVMsWUFBWSxFQUFFLFlBQVksS0FBSyxDQUFDO0FBQzVELGVBQU8sU0FBUyxDQUFDLE9BQU8sTUFBTSxTQUFTO0FBQ25DLGlCQUFPLEtBQUssVUFBVSxVQUFVLFFBQVEsU0FBUyxRQUFRLE9BQU8sRUFDM0QsS0FBSyxDQUFDLFVBQVU7QUFDakIsZ0JBQUksVUFBVSxRQUFRLFFBQVEsWUFBWSxLQUFLLEdBQUc7QUFDOUMscUJBQU8sS0FBSyxLQUFLO0FBQUEsWUFDckI7QUFDQSxnQkFBSSxVQUFVLFVBQVUsU0FBUyxHQUFHO0FBQ2hDLHFCQUFPLElBQUk7QUFBQSxZQUNmO0FBQ0EsaUJBQUs7QUFBQSxVQUNULENBQUMsRUFDSSxNQUFNLElBQUk7QUFBQSxRQUNuQjtBQUNBLGlCQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQ3ZDLGlCQUFPLE1BQU0sQ0FBQztBQUFBLFFBQ2xCO0FBQ0EsZUFBTztBQUFBLE1BQ1g7QUFBQSxNQUNBLFVBQVUsVUFBVSxTQUFTLFNBQVM7QUFDbEMsZUFBTyxLQUFLLFNBQVMsUUFBUSxFQUN4QixLQUFLLENBQUMsVUFBVSxLQUFLLFdBQVcsT0FBTyxPQUFPLENBQUMsRUFDL0MsTUFBTSxDQUFDLFVBQVU7QUFDbEIsY0FBSSxRQUFRLFlBQVksS0FBSyxHQUFHO0FBQzVCLG1CQUFPO0FBQUEsVUFDWDtBQUNBLGdCQUFNO0FBQUEsUUFDVixDQUFDO0FBQUEsTUFDTDtBQUFBLE1BQ0EsU0FBUyxVQUFVO0FBQ2YsZUFBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDcEMsZUFBSyxNQUFNLFVBQVUsS0FBSyxpQkFBaUIsQ0FBQyxPQUFPLFVBQVU7QUFDekQsbUJBQU8sVUFBVSxPQUFPLFFBQVEsS0FBSyxJQUFJLE9BQU8sS0FBSztBQUFBLFVBQ3pELENBQUM7QUFBQSxRQUNMLENBQUM7QUFBQSxNQUNMO0FBQUEsSUFDSjtBQUNBLFlBQVEsVUFBVTtBQUFBO0FBQUE7OztBQ3REbEIsSUFBQUMsaUJBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQSxXQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsUUFBTSxTQUFTO0FBQ2YsUUFBTSxXQUFXO0FBQ2pCLFFBQU0sV0FBVztBQUNqQixRQUFNLGNBQU4sY0FBMEIsU0FBUyxRQUFRO0FBQUEsTUFDdkMsY0FBYztBQUNWLGNBQU0sR0FBRyxTQUFTO0FBQ2xCLGFBQUssYUFBYSxPQUFPO0FBQ3pCLGFBQUssZ0JBQWdCLElBQUksU0FBUyxRQUFRLEtBQUssU0FBUztBQUFBLE1BQzVEO0FBQUEsTUFDQSxRQUFRLE1BQU0sU0FBUztBQUNuQixlQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUNwQyxlQUFLLFdBQVcsTUFBTSxTQUFTLENBQUMsT0FBTyxZQUFZO0FBQy9DLGdCQUFJLFVBQVUsTUFBTTtBQUNoQixzQkFBUSxPQUFPO0FBQUEsWUFDbkIsT0FDSztBQUNELHFCQUFPLEtBQUs7QUFBQSxZQUNoQjtBQUFBLFVBQ0osQ0FBQztBQUFBLFFBQ0wsQ0FBQztBQUFBLE1BQ0w7QUFBQSxNQUNBLE1BQU0sT0FBTyxVQUFVLFNBQVM7QUFDNUIsY0FBTSxVQUFVLENBQUM7QUFDakIsY0FBTSxTQUFTLEtBQUssY0FBYyxPQUFPLFVBQVUsT0FBTztBQUUxRCxlQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUNwQyxpQkFBTyxLQUFLLFNBQVMsTUFBTTtBQUMzQixpQkFBTyxHQUFHLFFBQVEsQ0FBQyxVQUFVLFFBQVEsS0FBSyxLQUFLLENBQUM7QUFDaEQsaUJBQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxPQUFPLENBQUM7QUFBQSxRQUM3QyxDQUFDO0FBQUEsTUFDTDtBQUFBLElBQ0o7QUFDQSxZQUFRLFVBQVU7QUFBQTtBQUFBOzs7QUNsQ2xCO0FBQUE7QUFBQTtBQUFBO0FBQ0EsV0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzVELFFBQU0sUUFBUTtBQUNkLFFBQU0sVUFBTixNQUFjO0FBQUEsTUFDVixZQUFZLFdBQVcsV0FBVyxvQkFBb0I7QUFDbEQsYUFBSyxZQUFZO0FBQ2pCLGFBQUssWUFBWTtBQUNqQixhQUFLLHFCQUFxQjtBQUMxQixhQUFLLFdBQVcsQ0FBQztBQUNqQixhQUFLLGFBQWE7QUFBQSxNQUN0QjtBQUFBLE1BQ0EsZUFBZTtBQUNYLG1CQUFXLFdBQVcsS0FBSyxXQUFXO0FBQ2xDLGdCQUFNLFdBQVcsS0FBSyxvQkFBb0IsT0FBTztBQUNqRCxnQkFBTSxXQUFXLEtBQUssMkJBQTJCLFFBQVE7QUFDekQsZUFBSyxTQUFTLEtBQUs7QUFBQSxZQUNmLFVBQVUsU0FBUyxVQUFVO0FBQUEsWUFDN0I7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFVBQ0osQ0FBQztBQUFBLFFBQ0w7QUFBQSxNQUNKO0FBQUEsTUFDQSxvQkFBb0IsU0FBUztBQUN6QixjQUFNLFFBQVEsTUFBTSxRQUFRLGdCQUFnQixTQUFTLEtBQUssa0JBQWtCO0FBQzVFLGVBQU8sTUFBTSxJQUFJLENBQUMsU0FBUztBQUN2QixnQkFBTSxVQUFVLE1BQU0sUUFBUSxpQkFBaUIsTUFBTSxLQUFLLFNBQVM7QUFDbkUsY0FBSSxDQUFDLFNBQVM7QUFDVixtQkFBTztBQUFBLGNBQ0gsU0FBUztBQUFBLGNBQ1QsU0FBUztBQUFBLFlBQ2I7QUFBQSxVQUNKO0FBQ0EsaUJBQU87QUFBQSxZQUNILFNBQVM7QUFBQSxZQUNULFNBQVM7QUFBQSxZQUNULFdBQVcsTUFBTSxRQUFRLE9BQU8sTUFBTSxLQUFLLGtCQUFrQjtBQUFBLFVBQ2pFO0FBQUEsUUFDSixDQUFDO0FBQUEsTUFDTDtBQUFBLE1BQ0EsMkJBQTJCLFVBQVU7QUFDakMsZUFBTyxNQUFNLE1BQU0sVUFBVSxVQUFVLENBQUMsWUFBWSxRQUFRLFdBQVcsTUFBTSxRQUFRLFlBQVksUUFBUSxPQUFPLENBQUM7QUFBQSxNQUNySDtBQUFBLElBQ0o7QUFDQSxZQUFRLFVBQVU7QUFBQTtBQUFBOzs7QUM1Q2xCO0FBQUE7QUFBQTtBQUFBO0FBQ0EsV0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzVELFFBQU0sWUFBWTtBQUNsQixRQUFNLGlCQUFOLGNBQTZCLFVBQVUsUUFBUTtBQUFBLE1BQzNDLE1BQU0sVUFBVTtBQUNaLGNBQU0sUUFBUSxTQUFTLE1BQU0sR0FBRztBQUNoQyxjQUFNLFNBQVMsTUFBTTtBQUNyQixjQUFNLFdBQVcsS0FBSyxTQUFTLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxZQUFZLEtBQUssU0FBUyxTQUFTLE1BQU07QUFDL0YsbUJBQVcsV0FBVyxVQUFVO0FBQzVCLGdCQUFNLFVBQVUsUUFBUSxTQUFTO0FBUWpDLGNBQUksQ0FBQyxRQUFRLFlBQVksU0FBUyxRQUFRLFFBQVE7QUFDOUMsbUJBQU87QUFBQSxVQUNYO0FBQ0EsZ0JBQU0sUUFBUSxNQUFNLE1BQU0sQ0FBQyxNQUFNLFVBQVU7QUFDdkMsa0JBQU0sVUFBVSxRQUFRLFNBQVM7QUFDakMsZ0JBQUksUUFBUSxXQUFXLFFBQVEsVUFBVSxLQUFLLElBQUksR0FBRztBQUNqRCxxQkFBTztBQUFBLFlBQ1g7QUFDQSxnQkFBSSxDQUFDLFFBQVEsV0FBVyxRQUFRLFlBQVksTUFBTTtBQUM5QyxxQkFBTztBQUFBLFlBQ1g7QUFDQSxtQkFBTztBQUFBLFVBQ1gsQ0FBQztBQUNELGNBQUksT0FBTztBQUNQLG1CQUFPO0FBQUEsVUFDWDtBQUFBLFFBQ0o7QUFDQSxlQUFPO0FBQUEsTUFDWDtBQUFBLElBQ0o7QUFDQSxZQUFRLFVBQVU7QUFBQTtBQUFBOzs7QUNyQ2xCO0FBQUE7QUFBQTtBQUFBO0FBQ0EsV0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzVELFFBQU0sUUFBUTtBQUNkLFFBQU0sWUFBWTtBQUNsQixRQUFNLGFBQU4sTUFBaUI7QUFBQSxNQUNiLFlBQVksV0FBVyxvQkFBb0I7QUFDdkMsYUFBSyxZQUFZO0FBQ2pCLGFBQUsscUJBQXFCO0FBQUEsTUFDOUI7QUFBQSxNQUNBLFVBQVUsVUFBVSxVQUFVLFVBQVU7QUFDcEMsY0FBTSxVQUFVLEtBQUssWUFBWSxRQUFRO0FBQ3pDLGNBQU0sYUFBYSxLQUFLLHVCQUF1QixRQUFRO0FBQ3ZELGVBQU8sQ0FBQyxVQUFVLEtBQUssUUFBUSxVQUFVLE9BQU8sU0FBUyxVQUFVO0FBQUEsTUFDdkU7QUFBQSxNQUNBLFlBQVksVUFBVTtBQUNsQixlQUFPLElBQUksVUFBVSxRQUFRLFVBQVUsS0FBSyxXQUFXLEtBQUssa0JBQWtCO0FBQUEsTUFDbEY7QUFBQSxNQUNBLHVCQUF1QixVQUFVO0FBQzdCLGNBQU0sK0JBQStCLFNBQVMsT0FBTyxNQUFNLFFBQVEsNkJBQTZCO0FBQ2hHLGVBQU8sTUFBTSxRQUFRLG9CQUFvQiw4QkFBOEIsS0FBSyxrQkFBa0I7QUFBQSxNQUNsRztBQUFBLE1BQ0EsUUFBUSxVQUFVLE9BQU8sU0FBUyxZQUFZO0FBQzFDLFlBQUksS0FBSyxpQkFBaUIsVUFBVSxNQUFNLElBQUksR0FBRztBQUM3QyxpQkFBTztBQUFBLFFBQ1g7QUFDQSxZQUFJLEtBQUssdUJBQXVCLEtBQUssR0FBRztBQUNwQyxpQkFBTztBQUFBLFFBQ1g7QUFDQSxjQUFNLFdBQVcsTUFBTSxLQUFLLHdCQUF3QixNQUFNLElBQUk7QUFDOUQsWUFBSSxLQUFLLDZCQUE2QixVQUFVLE9BQU8sR0FBRztBQUN0RCxpQkFBTztBQUFBLFFBQ1g7QUFDQSxlQUFPLEtBQUssNkJBQTZCLFVBQVUsVUFBVTtBQUFBLE1BQ2pFO0FBQUEsTUFDQSxpQkFBaUIsVUFBVSxXQUFXO0FBSWxDLFlBQUksS0FBSyxVQUFVLFNBQVMsVUFBVTtBQUNsQyxpQkFBTztBQUFBLFFBQ1g7QUFDQSxlQUFPLEtBQUssZUFBZSxVQUFVLFNBQVMsS0FBSyxLQUFLLFVBQVU7QUFBQSxNQUN0RTtBQUFBLE1BQ0EsZUFBZSxVQUFVLFdBQVc7QUFDaEMsY0FBTSxpQkFBaUIsVUFBVSxNQUFNLEdBQUcsRUFBRTtBQUM1QyxZQUFJLGFBQWEsSUFBSTtBQUNqQixpQkFBTztBQUFBLFFBQ1g7QUFDQSxjQUFNLGdCQUFnQixTQUFTLE1BQU0sR0FBRyxFQUFFO0FBQzFDLGVBQU8saUJBQWlCO0FBQUEsTUFDNUI7QUFBQSxNQUNBLHVCQUF1QixPQUFPO0FBQzFCLGVBQU8sQ0FBQyxLQUFLLFVBQVUsdUJBQXVCLE1BQU0sT0FBTyxlQUFlO0FBQUEsTUFDOUU7QUFBQSxNQUNBLDZCQUE2QixXQUFXLFNBQVM7QUFDN0MsZUFBTyxDQUFDLEtBQUssVUFBVSxpQkFBaUIsQ0FBQyxRQUFRLE1BQU0sU0FBUztBQUFBLE1BQ3BFO0FBQUEsTUFDQSw2QkFBNkIsV0FBVyxZQUFZO0FBQ2hELGVBQU8sQ0FBQyxNQUFNLFFBQVEsU0FBUyxXQUFXLFVBQVU7QUFBQSxNQUN4RDtBQUFBLElBQ0o7QUFDQSxZQUFRLFVBQVU7QUFBQTtBQUFBOzs7QUM3RGxCO0FBQUE7QUFBQTtBQUFBO0FBQ0EsV0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzVELFFBQU0sUUFBUTtBQUNkLFFBQU0sY0FBTixNQUFrQjtBQUFBLE1BQ2QsWUFBWSxXQUFXLG9CQUFvQjtBQUN2QyxhQUFLLFlBQVk7QUFDakIsYUFBSyxxQkFBcUI7QUFDMUIsYUFBSyxRQUFRLG9CQUFJLElBQUk7QUFBQSxNQUN6QjtBQUFBLE1BQ0EsVUFBVSxVQUFVLFVBQVU7QUFDMUIsY0FBTSxhQUFhLE1BQU0sUUFBUSxvQkFBb0IsVUFBVSxLQUFLLGtCQUFrQjtBQUN0RixjQUFNLGFBQWEsTUFBTSxRQUFRLG9CQUFvQixVQUFVLE9BQU8sT0FBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLEtBQUssa0JBQWtCLEdBQUcsRUFBRSxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3ZJLGVBQU8sQ0FBQyxVQUFVLEtBQUssUUFBUSxPQUFPLFlBQVksVUFBVTtBQUFBLE1BQ2hFO0FBQUEsTUFDQSxRQUFRLE9BQU8sWUFBWSxZQUFZO0FBQ25DLGNBQU0sV0FBVyxNQUFNLEtBQUssd0JBQXdCLE1BQU0sSUFBSTtBQUM5RCxZQUFJLEtBQUssVUFBVSxVQUFVLEtBQUssa0JBQWtCLFFBQVEsR0FBRztBQUMzRCxpQkFBTztBQUFBLFFBQ1g7QUFDQSxZQUFJLEtBQUssZ0JBQWdCLEtBQUssS0FBSyxLQUFLLHFCQUFxQixLQUFLLEdBQUc7QUFDakUsaUJBQU87QUFBQSxRQUNYO0FBQ0EsWUFBSSxLQUFLLHFDQUFxQyxVQUFVLFVBQVUsR0FBRztBQUNqRSxpQkFBTztBQUFBLFFBQ1g7QUFDQSxjQUFNLGNBQWMsTUFBTSxPQUFPLFlBQVk7QUFDN0MsY0FBTSxZQUFZLEtBQUssbUJBQW1CLFVBQVUsWUFBWSxXQUFXLEtBQUssQ0FBQyxLQUFLLG1CQUFtQixVQUFVLFlBQVksV0FBVztBQUMxSSxZQUFJLEtBQUssVUFBVSxVQUFVLFdBQVc7QUFDcEMsZUFBSyxtQkFBbUIsUUFBUTtBQUFBLFFBQ3BDO0FBQ0EsZUFBTztBQUFBLE1BQ1g7QUFBQSxNQUNBLGtCQUFrQixVQUFVO0FBQ3hCLGVBQU8sS0FBSyxNQUFNLElBQUksUUFBUTtBQUFBLE1BQ2xDO0FBQUEsTUFDQSxtQkFBbUIsVUFBVTtBQUN6QixhQUFLLE1BQU0sSUFBSSxVQUFVLE1BQVM7QUFBQSxNQUN0QztBQUFBLE1BQ0EsZ0JBQWdCLE9BQU87QUFDbkIsZUFBTyxLQUFLLFVBQVUsYUFBYSxDQUFDLE1BQU0sT0FBTyxPQUFPO0FBQUEsTUFDNUQ7QUFBQSxNQUNBLHFCQUFxQixPQUFPO0FBQ3hCLGVBQU8sS0FBSyxVQUFVLG1CQUFtQixDQUFDLE1BQU0sT0FBTyxZQUFZO0FBQUEsTUFDdkU7QUFBQSxNQUNBLHFDQUFxQyxXQUFXLFlBQVk7QUFDeEQsWUFBSSxDQUFDLEtBQUssVUFBVSxVQUFVO0FBQzFCLGlCQUFPO0FBQUEsUUFDWDtBQUNBLGNBQU0sV0FBVyxNQUFNLEtBQUssYUFBYSxLQUFLLFVBQVUsS0FBSyxTQUFTO0FBQ3RFLGVBQU8sTUFBTSxRQUFRLFNBQVMsVUFBVSxVQUFVO0FBQUEsTUFDdEQ7QUFBQSxNQUNBLG1CQUFtQixVQUFVLFlBQVksYUFBYTtBQUVsRCxjQUFNLFlBQVksTUFBTSxRQUFRLFNBQVMsVUFBVSxVQUFVO0FBRzdELFlBQUksQ0FBQyxhQUFhLGFBQWE7QUFDM0IsaUJBQU8sTUFBTSxRQUFRLFNBQVMsV0FBVyxLQUFLLFVBQVU7QUFBQSxRQUM1RDtBQUNBLGVBQU87QUFBQSxNQUNYO0FBQUEsSUFDSjtBQUNBLFlBQVEsVUFBVTtBQUFBO0FBQUE7OztBQzlEbEI7QUFBQTtBQUFBO0FBQUE7QUFDQSxXQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsUUFBTSxRQUFRO0FBQ2QsUUFBTSxjQUFOLE1BQWtCO0FBQUEsTUFDZCxZQUFZLFdBQVc7QUFDbkIsYUFBSyxZQUFZO0FBQUEsTUFDckI7QUFBQSxNQUNBLFlBQVk7QUFDUixlQUFPLENBQUMsVUFBVSxLQUFLLGlCQUFpQixLQUFLO0FBQUEsTUFDakQ7QUFBQSxNQUNBLGlCQUFpQixPQUFPO0FBQ3BCLGVBQU8sTUFBTSxNQUFNLGtCQUFrQixLQUFLLEtBQUssS0FBSyxVQUFVO0FBQUEsTUFDbEU7QUFBQSxJQUNKO0FBQ0EsWUFBUSxVQUFVO0FBQUE7QUFBQTs7O0FDZGxCLElBQUFDLGlCQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0EsV0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzVELFFBQU0sUUFBUTtBQUNkLFFBQU0sbUJBQU4sTUFBdUI7QUFBQSxNQUNuQixZQUFZLFdBQVc7QUFDbkIsYUFBSyxZQUFZO0FBQUEsTUFDckI7QUFBQSxNQUNBLGlCQUFpQjtBQUNiLGVBQU8sQ0FBQyxVQUFVLEtBQUssV0FBVyxLQUFLO0FBQUEsTUFDM0M7QUFBQSxNQUNBLFdBQVcsT0FBTztBQUNkLFlBQUksV0FBVyxNQUFNO0FBQ3JCLFlBQUksS0FBSyxVQUFVLFVBQVU7QUFDekIscUJBQVcsTUFBTSxLQUFLLGFBQWEsS0FBSyxVQUFVLEtBQUssUUFBUTtBQUMvRCxxQkFBVyxNQUFNLEtBQUssUUFBUSxRQUFRO0FBQUEsUUFDMUM7QUFDQSxZQUFJLEtBQUssVUFBVSxtQkFBbUIsTUFBTSxPQUFPLFlBQVksR0FBRztBQUM5RCxzQkFBWTtBQUFBLFFBQ2hCO0FBQ0EsWUFBSSxDQUFDLEtBQUssVUFBVSxZQUFZO0FBQzVCLGlCQUFPO0FBQUEsUUFDWDtBQUNBLGVBQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFBQSxNQUNyRTtBQUFBLElBQ0o7QUFDQSxZQUFRLFVBQVU7QUFBQTtBQUFBOzs7QUN6QmxCO0FBQUE7QUFBQTtBQUFBO0FBQ0EsV0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzVELFFBQU1DLFFBQU8sUUFBUTtBQUNyQixRQUFNLFNBQVM7QUFDZixRQUFNLFVBQVU7QUFDaEIsUUFBTSxVQUFVO0FBQ2hCLFFBQU0sVUFBVTtBQUNoQixRQUFNLFdBQU4sTUFBZTtBQUFBLE1BQ1gsWUFBWSxXQUFXO0FBQ25CLGFBQUssWUFBWTtBQUNqQixhQUFLLGNBQWMsSUFBSSxRQUFRLFFBQVEsS0FBSyxTQUFTO0FBQ3JELGFBQUssY0FBYyxJQUFJLFFBQVEsUUFBUSxLQUFLLFdBQVcsS0FBSyxzQkFBc0IsQ0FBQztBQUNuRixhQUFLLGFBQWEsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLEtBQUssc0JBQXNCLENBQUM7QUFDakYsYUFBSyxtQkFBbUIsSUFBSSxRQUFRLFFBQVEsS0FBSyxTQUFTO0FBQUEsTUFDOUQ7QUFBQSxNQUNBLGtCQUFrQixNQUFNO0FBQ3BCLGVBQU9BLE1BQUssUUFBUSxLQUFLLFVBQVUsS0FBSyxLQUFLLElBQUk7QUFBQSxNQUNyRDtBQUFBLE1BQ0Esa0JBQWtCLE1BQU07QUFDcEIsY0FBTSxXQUFXLEtBQUssU0FBUyxNQUFNLEtBQUssS0FBSztBQUMvQyxlQUFPO0FBQUEsVUFDSDtBQUFBLFVBQ0Esc0JBQXNCO0FBQUEsVUFDdEIsYUFBYSxLQUFLLFVBQVU7QUFBQSxVQUM1QixZQUFZLEtBQUssV0FBVyxVQUFVLFVBQVUsS0FBSyxVQUFVLEtBQUssUUFBUTtBQUFBLFVBQzVFLGFBQWEsS0FBSyxZQUFZLFVBQVUsS0FBSyxVQUFVLEtBQUssUUFBUTtBQUFBLFVBQ3BFLGFBQWEsS0FBSyxZQUFZLFVBQVU7QUFBQSxVQUN4QyxxQkFBcUIsS0FBSyxVQUFVO0FBQUEsVUFDcEMsSUFBSSxLQUFLLFVBQVU7QUFBQSxVQUNuQixPQUFPLEtBQUssVUFBVTtBQUFBLFVBQ3RCLGdDQUFnQyxLQUFLLFVBQVU7QUFBQSxVQUMvQyxXQUFXLEtBQUssaUJBQWlCLGVBQWU7QUFBQSxRQUNwRDtBQUFBLE1BQ0o7QUFBQSxNQUNBLHdCQUF3QjtBQUNwQixlQUFPO0FBQUEsVUFDSCxLQUFLLEtBQUssVUFBVTtBQUFBLFVBQ3BCLFdBQVcsS0FBSyxVQUFVO0FBQUEsVUFDMUIsU0FBUyxDQUFDLEtBQUssVUFBVTtBQUFBLFVBQ3pCLFFBQVEsQ0FBQyxLQUFLLFVBQVU7QUFBQSxVQUN4QixPQUFPLENBQUMsS0FBSyxVQUFVO0FBQUEsVUFDdkIsWUFBWSxDQUFDLEtBQUssVUFBVTtBQUFBLFVBQzVCLE9BQU87QUFBQSxVQUNQLGVBQWU7QUFBQSxRQUNuQjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQ0EsWUFBUSxVQUFVO0FBQUE7QUFBQTs7O0FDL0NsQixJQUFBQyxpQkFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBLFdBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUM1RCxRQUFNLFVBQVU7QUFDaEIsUUFBTSxhQUFhO0FBQ25CLFFBQU0sZ0JBQU4sY0FBNEIsV0FBVyxRQUFRO0FBQUEsTUFDM0MsY0FBYztBQUNWLGNBQU0sR0FBRyxTQUFTO0FBQ2xCLGFBQUssVUFBVSxJQUFJLFFBQVEsUUFBUSxLQUFLLFNBQVM7QUFBQSxNQUNyRDtBQUFBLE1BQ0EsTUFBTSxLQUFLLE1BQU07QUFDYixjQUFNLE9BQU8sS0FBSyxrQkFBa0IsSUFBSTtBQUN4QyxjQUFNLFVBQVUsS0FBSyxrQkFBa0IsSUFBSTtBQUMzQyxjQUFNLFVBQVUsTUFBTSxLQUFLLElBQUksTUFBTSxNQUFNLE9BQU87QUFDbEQsZUFBTyxRQUFRLElBQUksQ0FBQyxVQUFVLFFBQVEsVUFBVSxLQUFLLENBQUM7QUFBQSxNQUMxRDtBQUFBLE1BQ0EsSUFBSSxNQUFNLE1BQU0sU0FBUztBQUNyQixZQUFJLEtBQUssU0FBUztBQUNkLGlCQUFPLEtBQUssUUFBUSxRQUFRLE1BQU0sT0FBTztBQUFBLFFBQzdDO0FBQ0EsZUFBTyxLQUFLLFFBQVEsT0FBTyxLQUFLLFVBQVUsT0FBTztBQUFBLE1BQ3JEO0FBQUEsSUFDSjtBQUNBLFlBQVEsVUFBVTtBQUFBO0FBQUE7OztBQ3RCbEIsSUFBQUMsa0JBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQSxXQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsUUFBTSxXQUFXLFFBQVE7QUFDekIsUUFBTSxXQUFXO0FBQ2pCLFFBQU0sYUFBYTtBQUNuQixRQUFNLGlCQUFOLGNBQTZCLFdBQVcsUUFBUTtBQUFBLE1BQzVDLGNBQWM7QUFDVixjQUFNLEdBQUcsU0FBUztBQUNsQixhQUFLLFVBQVUsSUFBSSxTQUFTLFFBQVEsS0FBSyxTQUFTO0FBQUEsTUFDdEQ7QUFBQSxNQUNBLEtBQUssTUFBTTtBQUNQLGNBQU0sT0FBTyxLQUFLLGtCQUFrQixJQUFJO0FBQ3hDLGNBQU0sVUFBVSxLQUFLLGtCQUFrQixJQUFJO0FBQzNDLGNBQU0sU0FBUyxLQUFLLElBQUksTUFBTSxNQUFNLE9BQU87QUFDM0MsY0FBTSxjQUFjLElBQUksU0FBUyxTQUFTLEVBQUUsWUFBWSxNQUFNLE1BQU0sTUFBTTtBQUFBLFFBQUUsRUFBRSxDQUFDO0FBQy9FLGVBQ0ssS0FBSyxTQUFTLENBQUMsVUFBVSxZQUFZLEtBQUssU0FBUyxLQUFLLENBQUMsRUFDekQsR0FBRyxRQUFRLENBQUMsVUFBVSxZQUFZLEtBQUssUUFBUSxRQUFRLFVBQVUsS0FBSyxDQUFDLENBQUMsRUFDeEUsS0FBSyxPQUFPLE1BQU0sWUFBWSxLQUFLLEtBQUssQ0FBQztBQUM5QyxvQkFDSyxLQUFLLFNBQVMsTUFBTSxPQUFPLFFBQVEsQ0FBQztBQUN6QyxlQUFPO0FBQUEsTUFDWDtBQUFBLE1BQ0EsSUFBSSxNQUFNLE1BQU0sU0FBUztBQUNyQixZQUFJLEtBQUssU0FBUztBQUNkLGlCQUFPLEtBQUssUUFBUSxRQUFRLE1BQU0sT0FBTztBQUFBLFFBQzdDO0FBQ0EsZUFBTyxLQUFLLFFBQVEsT0FBTyxLQUFLLFVBQVUsT0FBTztBQUFBLE1BQ3JEO0FBQUEsSUFDSjtBQUNBLFlBQVEsVUFBVTtBQUFBO0FBQUE7OztBQzlCbEIsSUFBQUMsZ0JBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQSxXQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsUUFBTSxTQUFTO0FBQ2YsUUFBTSxTQUFTO0FBQ2YsUUFBTSxXQUFXO0FBQ2pCLFFBQU0sYUFBTixjQUF5QixTQUFTLFFBQVE7QUFBQSxNQUN0QyxjQUFjO0FBQ1YsY0FBTSxHQUFHLFNBQVM7QUFDbEIsYUFBSyxZQUFZLE9BQU87QUFDeEIsYUFBSyxZQUFZLE9BQU87QUFBQSxNQUM1QjtBQUFBLE1BQ0EsUUFBUSxNQUFNLFNBQVM7QUFDbkIsZUFBTyxLQUFLLFVBQVUsTUFBTSxPQUFPO0FBQUEsTUFDdkM7QUFBQSxNQUNBLE9BQU8sVUFBVSxTQUFTO0FBQ3RCLGNBQU0sVUFBVSxDQUFDO0FBQ2pCLG1CQUFXLFdBQVcsVUFBVTtBQUM1QixnQkFBTSxXQUFXLEtBQUssa0JBQWtCLE9BQU87QUFDL0MsZ0JBQU0sUUFBUSxLQUFLLFVBQVUsVUFBVSxTQUFTLE9BQU87QUFDdkQsY0FBSSxVQUFVLFFBQVEsQ0FBQyxRQUFRLFlBQVksS0FBSyxHQUFHO0FBQy9DO0FBQUEsVUFDSjtBQUNBLGtCQUFRLEtBQUssS0FBSztBQUFBLFFBQ3RCO0FBQ0EsZUFBTztBQUFBLE1BQ1g7QUFBQSxNQUNBLFVBQVUsVUFBVSxTQUFTLFNBQVM7QUFDbEMsWUFBSTtBQUNBLGdCQUFNLFFBQVEsS0FBSyxTQUFTLFFBQVE7QUFDcEMsaUJBQU8sS0FBSyxXQUFXLE9BQU8sT0FBTztBQUFBLFFBQ3pDLFNBQ08sT0FBUDtBQUNJLGNBQUksUUFBUSxZQUFZLEtBQUssR0FBRztBQUM1QixtQkFBTztBQUFBLFVBQ1g7QUFDQSxnQkFBTTtBQUFBLFFBQ1Y7QUFBQSxNQUNKO0FBQUEsTUFDQSxTQUFTLFVBQVU7QUFDZixlQUFPLEtBQUssVUFBVSxVQUFVLEtBQUssZUFBZTtBQUFBLE1BQ3hEO0FBQUEsSUFDSjtBQUNBLFlBQVEsVUFBVTtBQUFBO0FBQUE7OztBQzFDbEIsSUFBQUMsZ0JBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQSxXQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsUUFBTSxTQUFTO0FBQ2YsUUFBTSxhQUFhO0FBQ25CLFFBQU0sZUFBTixjQUEyQixXQUFXLFFBQVE7QUFBQSxNQUMxQyxjQUFjO0FBQ1YsY0FBTSxHQUFHLFNBQVM7QUFDbEIsYUFBSyxVQUFVLElBQUksT0FBTyxRQUFRLEtBQUssU0FBUztBQUFBLE1BQ3BEO0FBQUEsTUFDQSxLQUFLLE1BQU07QUFDUCxjQUFNLE9BQU8sS0FBSyxrQkFBa0IsSUFBSTtBQUN4QyxjQUFNLFVBQVUsS0FBSyxrQkFBa0IsSUFBSTtBQUMzQyxjQUFNLFVBQVUsS0FBSyxJQUFJLE1BQU0sTUFBTSxPQUFPO0FBQzVDLGVBQU8sUUFBUSxJQUFJLFFBQVEsU0FBUztBQUFBLE1BQ3hDO0FBQUEsTUFDQSxJQUFJLE1BQU0sTUFBTSxTQUFTO0FBQ3JCLFlBQUksS0FBSyxTQUFTO0FBQ2QsaUJBQU8sS0FBSyxRQUFRLFFBQVEsTUFBTSxPQUFPO0FBQUEsUUFDN0M7QUFDQSxlQUFPLEtBQUssUUFBUSxPQUFPLEtBQUssVUFBVSxPQUFPO0FBQUEsTUFDckQ7QUFBQSxJQUNKO0FBQ0EsWUFBUSxVQUFVO0FBQUE7QUFBQTs7O0FDdEJsQixJQUFBQyxvQkFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBLFdBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUM1RCxZQUFRLDhCQUE4QjtBQUN0QyxRQUFNQyxNQUFLLFFBQVE7QUFDbkIsUUFBTUMsTUFBSyxRQUFRO0FBS25CLFFBQU0sWUFBWSxLQUFLLElBQUlBLElBQUcsS0FBSyxFQUFFLFFBQVEsQ0FBQztBQUM5QyxZQUFRLDhCQUE4QjtBQUFBLE1BQ2xDLE9BQU9ELElBQUc7QUFBQSxNQUNWLFdBQVdBLElBQUc7QUFBQSxNQUNkLE1BQU1BLElBQUc7QUFBQSxNQUNULFVBQVVBLElBQUc7QUFBQSxNQUNiLFNBQVNBLElBQUc7QUFBQSxNQUNaLGFBQWFBLElBQUc7QUFBQSxJQUNwQjtBQUNBLFFBQU0sV0FBTixNQUFlO0FBQUEsTUFDWCxZQUFZLFdBQVcsQ0FBQyxHQUFHO0FBQ3ZCLGFBQUssV0FBVztBQUNoQixhQUFLLFdBQVcsS0FBSyxVQUFVLEtBQUssU0FBUyxVQUFVLEtBQUs7QUFDNUQsYUFBSyxnQkFBZ0IsS0FBSyxVQUFVLEtBQUssU0FBUyxlQUFlLEtBQUs7QUFDdEUsYUFBSyxpQkFBaUIsS0FBSyxVQUFVLEtBQUssU0FBUyxnQkFBZ0IsSUFBSTtBQUN2RSxhQUFLLHFCQUFxQixLQUFLLFVBQVUsS0FBSyxTQUFTLG9CQUFvQixJQUFJO0FBQy9FLGFBQUssY0FBYyxLQUFLLFVBQVUsS0FBSyxTQUFTLGFBQWEsU0FBUztBQUN0RSxhQUFLLE1BQU0sS0FBSyxVQUFVLEtBQUssU0FBUyxLQUFLLFFBQVEsSUFBSSxDQUFDO0FBQzFELGFBQUssT0FBTyxLQUFLLFVBQVUsS0FBSyxTQUFTLE1BQU0sUUFBUTtBQUN2RCxhQUFLLE1BQU0sS0FBSyxVQUFVLEtBQUssU0FBUyxLQUFLLEtBQUs7QUFDbEQsYUFBSyxVQUFVLEtBQUssVUFBVSxLQUFLLFNBQVMsU0FBUyxJQUFJO0FBQ3pELGFBQUssc0JBQXNCLEtBQUssVUFBVSxLQUFLLFNBQVMscUJBQXFCLElBQUk7QUFDakYsYUFBSyxLQUFLLEtBQUssc0JBQXNCLEtBQUssU0FBUyxFQUFFO0FBQ3JELGFBQUssV0FBVyxLQUFLLFVBQVUsS0FBSyxTQUFTLFVBQVUsSUFBSTtBQUMzRCxhQUFLLFNBQVMsS0FBSyxVQUFVLEtBQUssU0FBUyxRQUFRLENBQUMsQ0FBQztBQUNyRCxhQUFLLGtCQUFrQixLQUFLLFVBQVUsS0FBSyxTQUFTLGlCQUFpQixLQUFLO0FBQzFFLGFBQUssYUFBYSxLQUFLLFVBQVUsS0FBSyxTQUFTLFlBQVksS0FBSztBQUNoRSxhQUFLLGtCQUFrQixLQUFLLFVBQVUsS0FBSyxTQUFTLGlCQUFpQixLQUFLO0FBQzFFLGFBQUssWUFBWSxLQUFLLFVBQVUsS0FBSyxTQUFTLFdBQVcsSUFBSTtBQUM3RCxhQUFLLFFBQVEsS0FBSyxVQUFVLEtBQUssU0FBUyxPQUFPLEtBQUs7QUFDdEQsYUFBSyxpQkFBaUIsS0FBSyxVQUFVLEtBQUssU0FBUyxnQkFBZ0IsS0FBSztBQUN4RSxhQUFLLGlDQUFpQyxLQUFLLFVBQVUsS0FBSyxTQUFTLGdDQUFnQyxLQUFLO0FBQ3hHLGFBQUssU0FBUyxLQUFLLFVBQVUsS0FBSyxTQUFTLFFBQVEsSUFBSTtBQUN2RCxZQUFJLEtBQUssaUJBQWlCO0FBQ3RCLGVBQUssWUFBWTtBQUFBLFFBQ3JCO0FBQ0EsWUFBSSxLQUFLLE9BQU87QUFDWixlQUFLLGFBQWE7QUFBQSxRQUN0QjtBQUVBLGFBQUssU0FBUyxDQUFDLEVBQUUsT0FBTyxLQUFLLE1BQU07QUFBQSxNQUN2QztBQUFBLE1BQ0EsVUFBVSxRQUFRLE9BQU87QUFDckIsZUFBTyxXQUFXLFNBQVksUUFBUTtBQUFBLE1BQzFDO0FBQUEsTUFDQSxzQkFBc0IsVUFBVSxDQUFDLEdBQUc7QUFDaEMsZUFBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLENBQUMsR0FBRyxRQUFRLDJCQUEyQixHQUFHLE9BQU87QUFBQSxNQUN4RjtBQUFBLElBQ0o7QUFDQSxZQUFRLFVBQVU7QUFBQTtBQUFBOzs7QUMxRGxCLElBQUFFLGVBQUE7QUFBQSxpREFBQUMsU0FBQTtBQUFBO0FBQUE7QUFDQSxRQUFNLGNBQWM7QUFDcEIsUUFBTSxVQUFVO0FBQ2hCLFFBQU0sV0FBVztBQUNqQixRQUFNLFNBQVM7QUFDZixRQUFNLGFBQWE7QUFDbkIsUUFBTSxRQUFRO0FBQ2QsbUJBQWUsU0FBUyxRQUFRLFNBQVM7QUFDckMsTUFBQUMscUJBQW9CLE1BQU07QUFDMUIsWUFBTSxRQUFRLFNBQVMsUUFBUSxRQUFRLFNBQVMsT0FBTztBQUN2RCxZQUFNLFNBQVMsTUFBTSxRQUFRLElBQUksS0FBSztBQUN0QyxhQUFPLE1BQU0sTUFBTSxRQUFRLE1BQU07QUFBQSxJQUNyQztBQUdBLEtBQUMsU0FBVUMsV0FBVTtBQUNqQixNQUFBQSxVQUFTLE9BQU9BO0FBQ2hCLE1BQUFBLFVBQVMsV0FBVztBQUNwQixNQUFBQSxVQUFTLGFBQWE7QUFDdEIsTUFBQUEsVUFBUyxRQUFRQTtBQUNqQixlQUFTLEtBQUssUUFBUSxTQUFTO0FBQzNCLFFBQUFELHFCQUFvQixNQUFNO0FBQzFCLGNBQU0sUUFBUSxTQUFTLFFBQVEsT0FBTyxTQUFTLE9BQU87QUFDdEQsZUFBTyxNQUFNLE1BQU0sUUFBUSxLQUFLO0FBQUEsTUFDcEM7QUFDQSxNQUFBQyxVQUFTLE9BQU87QUFDaEIsZUFBUyxPQUFPLFFBQVEsU0FBUztBQUM3QixRQUFBRCxxQkFBb0IsTUFBTTtBQUMxQixjQUFNLFFBQVEsU0FBUyxRQUFRLFNBQVMsU0FBUyxPQUFPO0FBTXhELGVBQU8sTUFBTSxPQUFPLE1BQU0sS0FBSztBQUFBLE1BQ25DO0FBQ0EsTUFBQUMsVUFBUyxTQUFTO0FBQ2xCLGVBQVNDLGVBQWMsUUFBUSxTQUFTO0FBQ3BDLFFBQUFGLHFCQUFvQixNQUFNO0FBQzFCLGNBQU0sV0FBVyxDQUFDLEVBQUUsT0FBTyxNQUFNO0FBQ2pDLGNBQU0sV0FBVyxJQUFJLFdBQVcsUUFBUSxPQUFPO0FBQy9DLGVBQU8sWUFBWSxTQUFTLFVBQVUsUUFBUTtBQUFBLE1BQ2xEO0FBQ0EsTUFBQUMsVUFBUyxnQkFBZ0JDO0FBQ3pCLGVBQVNDLGtCQUFpQixRQUFRLFNBQVM7QUFDdkMsUUFBQUgscUJBQW9CLE1BQU07QUFDMUIsY0FBTSxXQUFXLElBQUksV0FBVyxRQUFRLE9BQU87QUFDL0MsZUFBTyxNQUFNLFFBQVEsaUJBQWlCLFFBQVEsUUFBUTtBQUFBLE1BQzFEO0FBQ0EsTUFBQUMsVUFBUyxtQkFBbUJFO0FBQzVCLGVBQVMsV0FBVyxRQUFRO0FBQ3hCLFFBQUFILHFCQUFvQixNQUFNO0FBQzFCLGVBQU8sTUFBTSxLQUFLLE9BQU8sTUFBTTtBQUFBLE1BQ25DO0FBQ0EsTUFBQUMsVUFBUyxhQUFhO0FBQ3RCLGVBQVMscUJBQXFCLFFBQVE7QUFDbEMsUUFBQUQscUJBQW9CLE1BQU07QUFDMUIsZUFBTyxNQUFNLEtBQUsscUJBQXFCLE1BQU07QUFBQSxNQUNqRDtBQUNBLE1BQUFDLFVBQVMsdUJBQXVCO0FBQ2hDLFVBQUk7QUFDSixPQUFDLFNBQVVHLFFBQU87QUFDZCxpQkFBU0MsWUFBVyxRQUFRO0FBQ3hCLFVBQUFMLHFCQUFvQixNQUFNO0FBQzFCLGlCQUFPLE1BQU0sS0FBSyxnQkFBZ0IsTUFBTTtBQUFBLFFBQzVDO0FBQ0EsUUFBQUksT0FBTSxhQUFhQztBQUNuQixpQkFBU0Msc0JBQXFCLFFBQVE7QUFDbEMsVUFBQU4scUJBQW9CLE1BQU07QUFDMUIsaUJBQU8sTUFBTSxLQUFLLDBCQUEwQixNQUFNO0FBQUEsUUFDdEQ7QUFDQSxRQUFBSSxPQUFNLHVCQUF1QkU7QUFBQSxNQUNqQyxHQUFHLFFBQVFMLFVBQVMsVUFBVUEsVUFBUyxRQUFRLENBQUMsRUFBRTtBQUNsRCxVQUFJO0FBQ0osT0FBQyxTQUFVTSxRQUFPO0FBQ2QsaUJBQVNGLFlBQVcsUUFBUTtBQUN4QixVQUFBTCxxQkFBb0IsTUFBTTtBQUMxQixpQkFBTyxNQUFNLEtBQUssa0JBQWtCLE1BQU07QUFBQSxRQUM5QztBQUNBLFFBQUFPLE9BQU0sYUFBYUY7QUFDbkIsaUJBQVNDLHNCQUFxQixRQUFRO0FBQ2xDLFVBQUFOLHFCQUFvQixNQUFNO0FBQzFCLGlCQUFPLE1BQU0sS0FBSyw0QkFBNEIsTUFBTTtBQUFBLFFBQ3hEO0FBQ0EsUUFBQU8sT0FBTSx1QkFBdUJEO0FBQUEsTUFDakMsR0FBRyxRQUFRTCxVQUFTLFVBQVVBLFVBQVMsUUFBUSxDQUFDLEVBQUU7QUFBQSxJQUN0RCxHQUFHLGFBQWEsV0FBVyxDQUFDLEVBQUU7QUFDOUIsYUFBUyxTQUFTLFFBQVEsV0FBVyxTQUFTO0FBQzFDLFlBQU0sV0FBVyxDQUFDLEVBQUUsT0FBTyxNQUFNO0FBQ2pDLFlBQU0sV0FBVyxJQUFJLFdBQVcsUUFBUSxPQUFPO0FBQy9DLFlBQU0sUUFBUSxZQUFZLFNBQVMsVUFBVSxRQUFRO0FBQ3JELFlBQU0sV0FBVyxJQUFJLFVBQVUsUUFBUTtBQUN2QyxhQUFPLE1BQU0sSUFBSSxTQUFTLE1BQU0sUUFBUTtBQUFBLElBQzVDO0FBQ0EsYUFBU0QscUJBQW9CLE9BQU87QUFDaEMsWUFBTSxTQUFTLENBQUMsRUFBRSxPQUFPLEtBQUs7QUFDOUIsWUFBTSxnQkFBZ0IsT0FBTyxNQUFNLENBQUMsU0FBUyxNQUFNLE9BQU8sU0FBUyxJQUFJLEtBQUssQ0FBQyxNQUFNLE9BQU8sUUFBUSxJQUFJLENBQUM7QUFDdkcsVUFBSSxDQUFDLGVBQWU7QUFDaEIsY0FBTSxJQUFJLFVBQVUsOERBQThEO0FBQUEsTUFDdEY7QUFBQSxJQUNKO0FBQ0EsSUFBQUQsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDckdqQjtBQUFBO0FBQUE7QUFBQTtBQUNBLFFBQU0sRUFBQyxVQUFTLElBQUksUUFBUTtBQUM1QixRQUFNUyxNQUFLLFFBQVE7QUFFbkIsbUJBQWUsT0FBTyxZQUFZLGlCQUFpQixVQUFVO0FBQzVELFVBQUksT0FBTyxhQUFhLFVBQVU7QUFDakMsY0FBTSxJQUFJLFVBQVUsMEJBQTBCLE9BQU8sVUFBVTtBQUFBLE1BQ2hFO0FBRUEsVUFBSTtBQUNILGNBQU0sUUFBUSxNQUFNLFVBQVVBLElBQUcsV0FBVyxFQUFFLFFBQVE7QUFDdEQsZUFBTyxNQUFNLGlCQUFpQjtBQUFBLE1BQy9CLFNBQVMsT0FBUDtBQUNELFlBQUksTUFBTSxTQUFTLFVBQVU7QUFDNUIsaUJBQU87QUFBQSxRQUNSO0FBRUEsY0FBTTtBQUFBLE1BQ1A7QUFBQSxJQUNEO0FBRUEsYUFBUyxXQUFXLFlBQVksaUJBQWlCLFVBQVU7QUFDMUQsVUFBSSxPQUFPLGFBQWEsVUFBVTtBQUNqQyxjQUFNLElBQUksVUFBVSwwQkFBMEIsT0FBTyxVQUFVO0FBQUEsTUFDaEU7QUFFQSxVQUFJO0FBQ0gsZUFBT0EsSUFBRyxZQUFZLFFBQVEsRUFBRSxpQkFBaUI7QUFBQSxNQUNsRCxTQUFTLE9BQVA7QUFDRCxZQUFJLE1BQU0sU0FBUyxVQUFVO0FBQzVCLGlCQUFPO0FBQUEsUUFDUjtBQUVBLGNBQU07QUFBQSxNQUNQO0FBQUEsSUFDRDtBQUVBLFlBQVEsU0FBUyxPQUFPLEtBQUssTUFBTSxRQUFRLFFBQVE7QUFDbkQsWUFBUSxjQUFjLE9BQU8sS0FBSyxNQUFNLFFBQVEsYUFBYTtBQUM3RCxZQUFRLFlBQVksT0FBTyxLQUFLLE1BQU0sU0FBUyxnQkFBZ0I7QUFDL0QsWUFBUSxhQUFhLFdBQVcsS0FBSyxNQUFNLFlBQVksUUFBUTtBQUMvRCxZQUFRLGtCQUFrQixXQUFXLEtBQUssTUFBTSxZQUFZLGFBQWE7QUFDekUsWUFBUSxnQkFBZ0IsV0FBVyxLQUFLLE1BQU0sYUFBYSxnQkFBZ0I7QUFBQTtBQUFBOzs7QUMxQzNFO0FBQUEsa0RBQUFDLFNBQUE7QUFBQTtBQUFBO0FBQ0EsUUFBTUMsUUFBTyxRQUFRO0FBQ3JCLFFBQU0sV0FBVztBQUVqQixRQUFNLGdCQUFnQixnQkFBYyxXQUFXLFNBQVMsSUFBSSxJQUFJLFdBQVcsS0FBSyxHQUFHLE9BQU8sV0FBVztBQUVyRyxRQUFNLFVBQVUsQ0FBQyxVQUFVLFFBQVE7QUFDbEMsWUFBTSxNQUFNLFNBQVMsT0FBTyxNQUFNLFNBQVMsTUFBTSxDQUFDLElBQUk7QUFDdEQsYUFBT0EsTUFBSyxXQUFXLEdBQUcsSUFBSSxNQUFNQSxNQUFLLEtBQUssS0FBSyxHQUFHO0FBQUEsSUFDdkQ7QUFFQSxRQUFNLGdCQUFnQixDQUFDLE1BQU0sZUFBZTtBQUMzQyxVQUFJQSxNQUFLLFFBQVEsSUFBSSxHQUFHO0FBQ3ZCLGVBQU8sTUFBTTtBQUFBLE1BQ2Q7QUFFQSxhQUFPLE1BQU0sUUFBUSxjQUFjLFVBQVU7QUFBQSxJQUM5QztBQUVBLFFBQU0sVUFBVSxDQUFDLFdBQVcsWUFBWTtBQUN2QyxVQUFJLFFBQVEsU0FBUyxDQUFDLE1BQU0sUUFBUSxRQUFRLEtBQUssR0FBRztBQUNuRCxjQUFNLElBQUksVUFBVSxrRUFBa0UsT0FBTyxRQUFRLFNBQVM7QUFBQSxNQUMvRztBQUVBLFVBQUksUUFBUSxjQUFjLENBQUMsTUFBTSxRQUFRLFFBQVEsVUFBVSxHQUFHO0FBQzdELGNBQU0sSUFBSSxVQUFVLHVFQUF1RSxPQUFPLFFBQVEsY0FBYztBQUFBLE1BQ3pIO0FBRUEsVUFBSSxRQUFRLFNBQVMsUUFBUSxZQUFZO0FBQ3hDLGVBQU8sUUFBUSxNQUFNLElBQUksT0FBS0EsTUFBSyxNQUFNLEtBQUssV0FBVyxjQUFjLEdBQUcsUUFBUSxVQUFVLENBQUMsQ0FBQztBQUFBLE1BQy9GO0FBRUEsVUFBSSxRQUFRLE9BQU87QUFDbEIsZUFBTyxRQUFRLE1BQU0sSUFBSSxPQUFLQSxNQUFLLE1BQU0sS0FBSyxXQUFXLE1BQU0sR0FBRyxDQUFDO0FBQUEsTUFDcEU7QUFFQSxVQUFJLFFBQVEsWUFBWTtBQUN2QixlQUFPLENBQUNBLE1BQUssTUFBTSxLQUFLLFdBQVcsUUFBUSxjQUFjLFFBQVEsVUFBVSxHQUFHLENBQUM7QUFBQSxNQUNoRjtBQUVBLGFBQU8sQ0FBQ0EsTUFBSyxNQUFNLEtBQUssV0FBVyxJQUFJLENBQUM7QUFBQSxJQUN6QztBQUVBLElBQUFELFFBQU8sVUFBVSxPQUFPLE9BQU8sWUFBWTtBQUMxQyxnQkFBVTtBQUFBLFFBQ1QsS0FBSyxRQUFRLElBQUk7QUFBQSxRQUNqQixHQUFHO0FBQUEsTUFDSjtBQUVBLFVBQUksT0FBTyxRQUFRLFFBQVEsVUFBVTtBQUNwQyxjQUFNLElBQUksVUFBVSxpRUFBaUUsT0FBTyxRQUFRLE9BQU87QUFBQSxNQUM1RztBQUVBLFlBQU0sUUFBUSxNQUFNLFFBQVEsSUFBSSxDQUFDLEVBQUUsT0FBTyxLQUFLLEVBQUUsSUFBSSxPQUFNLE1BQUs7QUFDL0QsY0FBTSxjQUFjLE1BQU0sU0FBUyxZQUFZLFFBQVEsR0FBRyxRQUFRLEdBQUcsQ0FBQztBQUN0RSxlQUFPLGNBQWMsUUFBUSxHQUFHLE9BQU8sSUFBSTtBQUFBLE1BQzVDLENBQUMsQ0FBQztBQUVGLGFBQU8sQ0FBQyxFQUFFLE9BQU8sTUFBTSxDQUFDLEdBQUcsS0FBSztBQUFBLElBQ2pDO0FBRUEsSUFBQUEsUUFBTyxRQUFRLE9BQU8sQ0FBQyxPQUFPLFlBQVk7QUFDekMsZ0JBQVU7QUFBQSxRQUNULEtBQUssUUFBUSxJQUFJO0FBQUEsUUFDakIsR0FBRztBQUFBLE1BQ0o7QUFFQSxVQUFJLE9BQU8sUUFBUSxRQUFRLFVBQVU7QUFDcEMsY0FBTSxJQUFJLFVBQVUsaUVBQWlFLE9BQU8sUUFBUSxPQUFPO0FBQUEsTUFDNUc7QUFFQSxZQUFNLFFBQVEsQ0FBQyxFQUFFLE9BQU8sS0FBSyxFQUFFLElBQUksT0FBSyxTQUFTLGdCQUFnQixRQUFRLEdBQUcsUUFBUSxHQUFHLENBQUMsSUFBSSxRQUFRLEdBQUcsT0FBTyxJQUFJLENBQUM7QUFFbkgsYUFBTyxDQUFDLEVBQUUsT0FBTyxNQUFNLENBQUMsR0FBRyxLQUFLO0FBQUEsSUFDakM7QUFBQTtBQUFBOzs7QUMxRUE7QUFBQSxnREFBQUUsU0FBQTtBQUFBO0FBQ0EsYUFBUyxVQUFXLFNBQVM7QUFDM0IsYUFBTyxNQUFNLFFBQVEsT0FBTyxJQUN4QixVQUNBLENBQUMsT0FBTztBQUFBLElBQ2Q7QUFFQSxRQUFNLFFBQVE7QUFDZCxRQUFNLFFBQVE7QUFDZCxRQUFNLFNBQVM7QUFDZixRQUFNLHdCQUF3QjtBQUM5QixRQUFNLG1DQUFtQztBQUN6QyxRQUFNLDRDQUE0QztBQUNsRCxRQUFNLHFDQUFxQztBQUMzQyxRQUFNLHNCQUFzQjtBQU01QixRQUFNLDBCQUEwQjtBQUVoQyxRQUFNLFFBQVE7QUFHZCxRQUFJLGlCQUFpQjtBQUVyQixRQUFJLE9BQU8sV0FBVyxhQUFhO0FBQ2pDLHVCQUFpQixPQUFPLElBQUksYUFBYTtBQUFBLElBQzNDO0FBQ0EsUUFBTSxhQUFhO0FBRW5CLFFBQU0sU0FBUyxDQUFDLFFBQVEsS0FBSyxVQUMzQixPQUFPLGVBQWUsUUFBUSxLQUFLLEVBQUMsTUFBSyxDQUFDO0FBRTVDLFFBQU0scUJBQXFCO0FBRTNCLFFBQU0sZUFBZSxNQUFNO0FBSTNCLFFBQU0sZ0JBQWdCLFdBQVMsTUFBTTtBQUFBLE1BQ25DO0FBQUEsTUFDQSxDQUFDLE9BQU8sTUFBTSxPQUFPLEtBQUssV0FBVyxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsSUFDdEQsUUFHQTtBQUFBLElBQ047QUFHQSxRQUFNLHNCQUFzQixhQUFXO0FBQ3JDLFlBQU0sRUFBQyxPQUFNLElBQUk7QUFDakIsYUFBTyxRQUFRLE1BQU0sR0FBRyxTQUFTLFNBQVMsQ0FBQztBQUFBLElBQzdDO0FBYUEsUUFBTSxZQUFZO0FBQUEsTUFHaEI7QUFBQSxRQUlFO0FBQUEsUUFDQSxXQUFTLE1BQU0sUUFBUSxJQUFJLE1BQU0sSUFDN0IsUUFDQTtBQUFBLE1BQ047QUFBQSxNQUdBO0FBQUEsUUFDRTtBQUFBLFFBQ0EsTUFBTTtBQUFBLE1BQ1I7QUFBQSxNQW1CQTtBQUFBLFFBQ0U7QUFBQSxRQUNBLFdBQVMsS0FBSztBQUFBLE1BQ2hCO0FBQUEsTUFFQTtBQUFBLFFBRUU7QUFBQSxRQUNBLE1BQU07QUFBQSxNQUNSO0FBQUEsTUFHQTtBQUFBLFFBS0U7QUFBQSxRQUNBLE1BQU07QUFBQSxNQUNSO0FBQUEsTUFHQTtBQUFBLFFBQ0U7QUFBQSxRQUNBLE1BQU07QUFBQSxNQUNSO0FBQUEsTUFFQTtBQUFBLFFBT0U7QUFBQSxRQUdBLE1BQU07QUFBQSxNQUNSO0FBQUEsTUFHQTtBQUFBLFFBSUU7QUFBQSxRQUNBLFNBQVMsbUJBQW9CO0FBRTNCLGlCQUFPLENBQUMsVUFBVSxLQUFLLElBQUksSUFhdkIsY0FJQTtBQUFBLFFBQ047QUFBQSxNQUNGO0FBQUEsTUFHQTtBQUFBLFFBRUU7QUFBQSxRQU1BLENBQUNDLElBQUcsT0FBTyxRQUFRLFFBQVEsSUFBSSxJQUFJLFNBTy9CLG9CQU1BO0FBQUEsTUFDTjtBQUFBLE1BR0E7QUFBQSxRQU9FO0FBQUEsUUFJQSxDQUFDQSxJQUFHLElBQUksT0FBTztBQU1iLGdCQUFNLFlBQVksR0FBRyxRQUFRLFNBQVMsU0FBUztBQUMvQyxpQkFBTyxLQUFLO0FBQUEsUUFDZDtBQUFBLE1BQ0Y7QUFBQSxNQUVBO0FBQUEsUUFJRTtBQUFBLFFBQ0EsTUFBTTtBQUFBLE1BQ1I7QUFBQSxNQUVBO0FBQUEsUUFFRTtBQUFBLFFBQ0EsTUFBTTtBQUFBLE1BQ1I7QUFBQSxNQUVBO0FBQUEsUUFLRTtBQUFBLFFBQ0EsQ0FBQyxPQUFPLFlBQVksT0FBTyxXQUFXLFVBQVUsZUFBZSxTQUUzRCxNQUFNLFFBQVEsb0JBQW9CLFNBQVMsSUFBSSxVQUMvQyxVQUFVLE1BQ1IsVUFBVSxTQUFTLE1BQU0sSUFJdkIsSUFBSSxjQUFjLEtBQUssSUFBSSxlQUczQixPQUNGO0FBQUEsTUFDUjtBQUFBLE1BR0E7QUFBQSxRQUdFO0FBQUEsUUFjQSxXQUFTLE1BQU0sS0FBSyxLQUFLLElBRXJCLEdBQUcsV0FFSCxHQUFHO0FBQUEsTUFDVDtBQUFBLE1BR0E7QUFBQSxRQUNFO0FBQUEsUUFDQSxDQUFDQSxJQUFHLE9BQU87QUFDVCxnQkFBTSxTQUFTLEtBT1gsR0FBRyxZQUlIO0FBRUosaUJBQU8sR0FBRztBQUFBLFFBQ1o7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUdBLFFBQU0sYUFBYSx1QkFBTyxPQUFPLElBQUk7QUFHckMsUUFBTSxZQUFZLENBQUMsU0FBUyxlQUFlO0FBQ3pDLFVBQUksU0FBUyxXQUFXO0FBRXhCLFVBQUksQ0FBQyxRQUFRO0FBQ1gsaUJBQVMsVUFBVTtBQUFBLFVBQ2pCLENBQUMsTUFBTSxZQUFZLEtBQUssUUFBUSxRQUFRLElBQUksUUFBUSxHQUFHLEtBQUssT0FBTyxDQUFDO0FBQUEsVUFDcEU7QUFBQSxRQUNGO0FBQ0EsbUJBQVcsV0FBVztBQUFBLE1BQ3hCO0FBRUEsYUFBTyxhQUNILElBQUksT0FBTyxRQUFRLEdBQUcsSUFDdEIsSUFBSSxPQUFPLE1BQU07QUFBQSxJQUN2QjtBQUVBLFFBQU0sV0FBVyxhQUFXLE9BQU8sWUFBWTtBQUcvQyxRQUFNLGVBQWUsYUFBVyxXQUMzQixTQUFTLE9BQU8sS0FDaEIsQ0FBQyxzQkFBc0IsS0FBSyxPQUFPLEtBQ25DLENBQUMsaUNBQWlDLEtBQUssT0FBTyxLQUc5QyxRQUFRLFFBQVEsR0FBRyxNQUFNO0FBRTlCLFFBQU0sZUFBZSxhQUFXLFFBQVEsTUFBTSxtQkFBbUI7QUFFakUsUUFBTSxhQUFOLE1BQWlCO0FBQUEsTUFDZixZQUNFLFFBQ0EsU0FDQSxVQUNBLE9BQ0E7QUFDQSxhQUFLLFNBQVM7QUFDZCxhQUFLLFVBQVU7QUFDZixhQUFLLFdBQVc7QUFDaEIsYUFBSyxRQUFRO0FBQUEsTUFDZjtBQUFBLElBQ0Y7QUFFQSxRQUFNLGFBQWEsQ0FBQyxTQUFTLGVBQWU7QUFDMUMsWUFBTSxTQUFTO0FBQ2YsVUFBSSxXQUFXO0FBR2YsVUFBSSxRQUFRLFFBQVEsR0FBRyxNQUFNLEdBQUc7QUFDOUIsbUJBQVc7QUFDWCxrQkFBVSxRQUFRLE9BQU8sQ0FBQztBQUFBLE1BQzVCO0FBRUEsZ0JBQVUsUUFHVCxRQUFRLDJDQUEyQyxHQUFHLEVBR3RELFFBQVEsb0NBQW9DLEdBQUc7QUFFaEQsWUFBTSxRQUFRLFVBQVUsU0FBUyxVQUFVO0FBRTNDLGFBQU8sSUFBSTtBQUFBLFFBQ1Q7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLFFBQU0sYUFBYSxDQUFDLFNBQVMsU0FBUztBQUNwQyxZQUFNLElBQUksS0FBSyxPQUFPO0FBQUEsSUFDeEI7QUFFQSxRQUFNLFlBQVksQ0FBQ0MsT0FBTSxjQUFjLFlBQVk7QUFDakQsVUFBSSxDQUFDLFNBQVNBLEtBQUksR0FBRztBQUNuQixlQUFPO0FBQUEsVUFDTCxvQ0FBb0M7QUFBQSxVQUNwQztBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBR0EsVUFBSSxDQUFDQSxPQUFNO0FBQ1QsZUFBTyxRQUFRLDBCQUEwQixTQUFTO0FBQUEsTUFDcEQ7QUFHQSxVQUFJLFVBQVUsY0FBY0EsS0FBSSxHQUFHO0FBQ2pDLGNBQU0sSUFBSTtBQUNWLGVBQU87QUFBQSxVQUNMLG9CQUFvQixzQkFBc0I7QUFBQSxVQUMxQztBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFNLGdCQUFnQixDQUFBQSxVQUFRLHdCQUF3QixLQUFLQSxLQUFJO0FBRS9ELGNBQVUsZ0JBQWdCO0FBQzFCLGNBQVUsVUFBVSxPQUFLO0FBRXpCLFFBQU0sU0FBTixNQUFhO0FBQUEsTUFDWCxZQUFhO0FBQUEsUUFDWCxhQUFhO0FBQUEsUUFDYixhQUFhO0FBQUEsUUFDYixxQkFBcUI7QUFBQSxNQUN2QixJQUFJLENBQUMsR0FBRztBQUNOLGVBQU8sTUFBTSxZQUFZLElBQUk7QUFFN0IsYUFBSyxTQUFTLENBQUM7QUFDZixhQUFLLGNBQWM7QUFDbkIsYUFBSyxzQkFBc0I7QUFDM0IsYUFBSyxXQUFXO0FBQUEsTUFDbEI7QUFBQSxNQUVBLGFBQWM7QUFDWixhQUFLLGVBQWUsdUJBQU8sT0FBTyxJQUFJO0FBQ3RDLGFBQUssYUFBYSx1QkFBTyxPQUFPLElBQUk7QUFBQSxNQUN0QztBQUFBLE1BRUEsWUFBYSxTQUFTO0FBRXBCLFlBQUksV0FBVyxRQUFRLGFBQWE7QUFDbEMsZUFBSyxTQUFTLEtBQUssT0FBTyxPQUFPLFFBQVEsTUFBTTtBQUMvQyxlQUFLLFNBQVM7QUFDZDtBQUFBLFFBQ0Y7QUFFQSxZQUFJLGFBQWEsT0FBTyxHQUFHO0FBQ3pCLGdCQUFNLE9BQU8sV0FBVyxTQUFTLEtBQUssV0FBVztBQUNqRCxlQUFLLFNBQVM7QUFDZCxlQUFLLE9BQU8sS0FBSyxJQUFJO0FBQUEsUUFDdkI7QUFBQSxNQUNGO0FBQUEsTUFHQSxJQUFLLFNBQVM7QUFDWixhQUFLLFNBQVM7QUFFZDtBQUFBLFVBQ0UsU0FBUyxPQUFPLElBQ1osYUFBYSxPQUFPLElBQ3BCO0FBQUEsUUFDTixFQUFFLFFBQVEsS0FBSyxhQUFhLElBQUk7QUFJaEMsWUFBSSxLQUFLLFFBQVE7QUFDZixlQUFLLFdBQVc7QUFBQSxRQUNsQjtBQUVBLGVBQU87QUFBQSxNQUNUO0FBQUEsTUFHQSxXQUFZLFNBQVM7QUFDbkIsZUFBTyxLQUFLLElBQUksT0FBTztBQUFBLE1BQ3pCO0FBQUEsTUFrQkEsU0FBVUEsT0FBTSxnQkFBZ0I7QUFDOUIsWUFBSSxVQUFVO0FBQ2QsWUFBSSxZQUFZO0FBRWhCLGFBQUssT0FBTyxRQUFRLFVBQVE7QUFDMUIsZ0JBQU0sRUFBQyxTQUFRLElBQUk7QUFDbkIsY0FDRSxjQUFjLFlBQVksWUFBWSxhQUNuQyxZQUFZLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxnQkFDMUM7QUFDQTtBQUFBLFVBQ0Y7QUFFQSxnQkFBTSxVQUFVLEtBQUssTUFBTSxLQUFLQSxLQUFJO0FBRXBDLGNBQUksU0FBUztBQUNYLHNCQUFVLENBQUM7QUFDWCx3QkFBWTtBQUFBLFVBQ2Q7QUFBQSxRQUNGLENBQUM7QUFFRCxlQUFPO0FBQUEsVUFDTDtBQUFBLFVBQ0E7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLE1BR0EsTUFBTyxjQUFjLE9BQU8sZ0JBQWdCLFFBQVE7QUFDbEQsY0FBTUEsUUFBTyxnQkFFUixVQUFVLFFBQVEsWUFBWTtBQUVuQztBQUFBLFVBQ0VBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsS0FBSyxzQkFDRCxlQUNBO0FBQUEsUUFDTjtBQUVBLGVBQU8sS0FBSyxHQUFHQSxPQUFNLE9BQU8sZ0JBQWdCLE1BQU07QUFBQSxNQUNwRDtBQUFBLE1BRUEsR0FBSUEsT0FBTSxPQUFPLGdCQUFnQixRQUFRO0FBQ3ZDLFlBQUlBLFNBQVEsT0FBTztBQUNqQixpQkFBTyxNQUFNQTtBQUFBLFFBQ2Y7QUFFQSxZQUFJLENBQUMsUUFBUTtBQUdYLG1CQUFTQSxNQUFLLE1BQU0sS0FBSztBQUFBLFFBQzNCO0FBRUEsZUFBTyxJQUFJO0FBR1gsWUFBSSxDQUFDLE9BQU8sUUFBUTtBQUNsQixpQkFBTyxNQUFNQSxTQUFRLEtBQUssU0FBU0EsT0FBTSxjQUFjO0FBQUEsUUFDekQ7QUFFQSxjQUFNLFNBQVMsS0FBSztBQUFBLFVBQ2xCLE9BQU8sS0FBSyxLQUFLLElBQUk7QUFBQSxVQUNyQjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRjtBQUdBLGVBQU8sTUFBTUEsU0FBUSxPQUFPLFVBR3hCLFNBQ0EsS0FBSyxTQUFTQSxPQUFNLGNBQWM7QUFBQSxNQUN4QztBQUFBLE1BRUEsUUFBU0EsT0FBTTtBQUNiLGVBQU8sS0FBSyxNQUFNQSxPQUFNLEtBQUssY0FBYyxLQUFLLEVBQUU7QUFBQSxNQUNwRDtBQUFBLE1BRUEsZUFBZ0I7QUFDZCxlQUFPLENBQUFBLFVBQVEsQ0FBQyxLQUFLLFFBQVFBLEtBQUk7QUFBQSxNQUNuQztBQUFBLE1BRUEsT0FBUSxPQUFPO0FBQ2IsZUFBTyxVQUFVLEtBQUssRUFBRSxPQUFPLEtBQUssYUFBYSxDQUFDO0FBQUEsTUFDcEQ7QUFBQSxNQUdBLEtBQU1BLE9BQU07QUFDVixlQUFPLEtBQUssTUFBTUEsT0FBTSxLQUFLLFlBQVksSUFBSTtBQUFBLE1BQy9DO0FBQUEsSUFDRjtBQUVBLFFBQU0sVUFBVSxhQUFXLElBQUksT0FBTyxPQUFPO0FBRTdDLFFBQU0sY0FBYyxDQUFBQSxVQUNsQixVQUFVQSxTQUFRLFVBQVUsUUFBUUEsS0FBSSxHQUFHQSxPQUFNLFlBQVk7QUFFL0QsWUFBUSxjQUFjO0FBR3RCLFlBQVEsVUFBVTtBQUVsQixJQUFBRixRQUFPLFVBQVU7QUFLakIsUUFFRSxPQUFPLFlBQVksZ0JBRWpCLFFBQVEsT0FBTyxRQUFRLElBQUkscUJBQ3hCLFFBQVEsYUFBYSxVQUUxQjtBQUVBLFlBQU0sWUFBWSxTQUFPLFlBQVksS0FBSyxHQUFHLEtBQzFDLHdCQUF3QixLQUFLLEdBQUcsSUFDL0IsTUFDQSxJQUFJLFFBQVEsT0FBTyxHQUFHO0FBRTFCLGdCQUFVLFVBQVU7QUFJcEIsWUFBTSxpQ0FBaUM7QUFDdkMsZ0JBQVUsZ0JBQWdCLENBQUFFLFVBQ3hCLCtCQUErQixLQUFLQSxLQUFJLEtBQ3JDLGNBQWNBLEtBQUk7QUFBQSxJQUN6QjtBQUFBO0FBQUE7OztBQ3ptQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0FBO0FBQUEsc0JBQWU7QUFDZix5QkFBK0I7QUFDL0IsbUJBSU87OztBQ05QOzs7QUNBQTtBQUFBLElBQU0seUJBQXlCO0FBRS9CLElBQU0sYUFBYSxDQUFDLFNBQVMsTUFBTSxVQUFRLFFBQVUsT0FBTztBQUU1RCxJQUFNLGNBQWMsQ0FBQyxTQUFTLE1BQU0sVUFBUSxRQUFVLEtBQUssWUFBWTtBQUV2RSxJQUFNLGNBQWMsQ0FBQyxTQUFTLE1BQU0sQ0FBQyxLQUFLLE9BQU8sU0FBUyxRQUFVLEtBQUssWUFBWSxPQUFPLFNBQVM7QUFFckcsSUFBTSxTQUFTO0FBQUEsRUFDZCxVQUFVO0FBQUEsSUFDVCxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQUEsSUFFWixNQUFNLENBQUMsR0FBRyxFQUFFO0FBQUEsSUFDWixLQUFLLENBQUMsR0FBRyxFQUFFO0FBQUEsSUFDWCxRQUFRLENBQUMsR0FBRyxFQUFFO0FBQUEsSUFDZCxXQUFXLENBQUMsR0FBRyxFQUFFO0FBQUEsSUFDakIsVUFBVSxDQUFDLElBQUksRUFBRTtBQUFBLElBQ2pCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7QUFBQSxJQUNmLFFBQVEsQ0FBQyxHQUFHLEVBQUU7QUFBQSxJQUNkLGVBQWUsQ0FBQyxHQUFHLEVBQUU7QUFBQSxFQUN0QjtBQUFBLEVBQ0EsT0FBTztBQUFBLElBQ04sT0FBTyxDQUFDLElBQUksRUFBRTtBQUFBLElBQ2QsS0FBSyxDQUFDLElBQUksRUFBRTtBQUFBLElBQ1osT0FBTyxDQUFDLElBQUksRUFBRTtBQUFBLElBQ2QsUUFBUSxDQUFDLElBQUksRUFBRTtBQUFBLElBQ2YsTUFBTSxDQUFDLElBQUksRUFBRTtBQUFBLElBQ2IsU0FBUyxDQUFDLElBQUksRUFBRTtBQUFBLElBQ2hCLE1BQU0sQ0FBQyxJQUFJLEVBQUU7QUFBQSxJQUNiLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFBQSxJQUdkLGFBQWEsQ0FBQyxJQUFJLEVBQUU7QUFBQSxJQUNwQixNQUFNLENBQUMsSUFBSSxFQUFFO0FBQUEsSUFDYixNQUFNLENBQUMsSUFBSSxFQUFFO0FBQUEsSUFDYixXQUFXLENBQUMsSUFBSSxFQUFFO0FBQUEsSUFDbEIsYUFBYSxDQUFDLElBQUksRUFBRTtBQUFBLElBQ3BCLGNBQWMsQ0FBQyxJQUFJLEVBQUU7QUFBQSxJQUNyQixZQUFZLENBQUMsSUFBSSxFQUFFO0FBQUEsSUFDbkIsZUFBZSxDQUFDLElBQUksRUFBRTtBQUFBLElBQ3RCLFlBQVksQ0FBQyxJQUFJLEVBQUU7QUFBQSxJQUNuQixhQUFhLENBQUMsSUFBSSxFQUFFO0FBQUEsRUFDckI7QUFBQSxFQUNBLFNBQVM7QUFBQSxJQUNSLFNBQVMsQ0FBQyxJQUFJLEVBQUU7QUFBQSxJQUNoQixPQUFPLENBQUMsSUFBSSxFQUFFO0FBQUEsSUFDZCxTQUFTLENBQUMsSUFBSSxFQUFFO0FBQUEsSUFDaEIsVUFBVSxDQUFDLElBQUksRUFBRTtBQUFBLElBQ2pCLFFBQVEsQ0FBQyxJQUFJLEVBQUU7QUFBQSxJQUNmLFdBQVcsQ0FBQyxJQUFJLEVBQUU7QUFBQSxJQUNsQixRQUFRLENBQUMsSUFBSSxFQUFFO0FBQUEsSUFDZixTQUFTLENBQUMsSUFBSSxFQUFFO0FBQUEsSUFHaEIsZUFBZSxDQUFDLEtBQUssRUFBRTtBQUFBLElBQ3ZCLFFBQVEsQ0FBQyxLQUFLLEVBQUU7QUFBQSxJQUNoQixRQUFRLENBQUMsS0FBSyxFQUFFO0FBQUEsSUFDaEIsYUFBYSxDQUFDLEtBQUssRUFBRTtBQUFBLElBQ3JCLGVBQWUsQ0FBQyxLQUFLLEVBQUU7QUFBQSxJQUN2QixnQkFBZ0IsQ0FBQyxLQUFLLEVBQUU7QUFBQSxJQUN4QixjQUFjLENBQUMsS0FBSyxFQUFFO0FBQUEsSUFDdEIsaUJBQWlCLENBQUMsS0FBSyxFQUFFO0FBQUEsSUFDekIsY0FBYyxDQUFDLEtBQUssRUFBRTtBQUFBLElBQ3RCLGVBQWUsQ0FBQyxLQUFLLEVBQUU7QUFBQSxFQUN4QjtBQUNEO0FBRU8sSUFBTSxnQkFBZ0IsT0FBTyxLQUFLLE9BQU8sUUFBUTtBQUNqRCxJQUFNLHVCQUF1QixPQUFPLEtBQUssT0FBTyxLQUFLO0FBQ3JELElBQU0sdUJBQXVCLE9BQU8sS0FBSyxPQUFPLE9BQU87QUFDdkQsSUFBTSxhQUFhLENBQUMsR0FBRyxzQkFBc0IsR0FBRyxvQkFBb0I7QUFFM0UsU0FBUyxpQkFBaUI7QUFDekIsUUFBTSxRQUFRLG9CQUFJLElBQUk7QUFFdEIsYUFBVyxDQUFDLFdBQVcsS0FBSyxLQUFLLE9BQU8sUUFBUSxNQUFNLEdBQUc7QUFDeEQsZUFBVyxDQUFDLFdBQVcsS0FBSyxLQUFLLE9BQU8sUUFBUSxLQUFLLEdBQUc7QUFDdkQsYUFBTyxhQUFhO0FBQUEsUUFDbkIsTUFBTSxRQUFVLE1BQU07QUFBQSxRQUN0QixPQUFPLFFBQVUsTUFBTTtBQUFBLE1BQ3hCO0FBRUEsWUFBTSxhQUFhLE9BQU87QUFFMUIsWUFBTSxJQUFJLE1BQU0sSUFBSSxNQUFNLEVBQUU7QUFBQSxJQUM3QjtBQUVBLFdBQU8sZUFBZSxRQUFRLFdBQVc7QUFBQSxNQUN4QyxPQUFPO0FBQUEsTUFDUCxZQUFZO0FBQUEsSUFDYixDQUFDO0FBQUEsRUFDRjtBQUVBLFNBQU8sZUFBZSxRQUFRLFNBQVM7QUFBQSxJQUN0QyxPQUFPO0FBQUEsSUFDUCxZQUFZO0FBQUEsRUFDYixDQUFDO0FBRUQsU0FBTyxNQUFNLFFBQVE7QUFDckIsU0FBTyxRQUFRLFFBQVE7QUFFdkIsU0FBTyxNQUFNLE9BQU8sV0FBVztBQUMvQixTQUFPLE1BQU0sVUFBVSxZQUFZO0FBQ25DLFNBQU8sTUFBTSxVQUFVLFlBQVk7QUFDbkMsU0FBTyxRQUFRLE9BQU8sV0FBVyxzQkFBc0I7QUFDdkQsU0FBTyxRQUFRLFVBQVUsWUFBWSxzQkFBc0I7QUFDM0QsU0FBTyxRQUFRLFVBQVUsWUFBWSxzQkFBc0I7QUFHM0QsU0FBTyxpQkFBaUIsUUFBUTtBQUFBLElBQy9CLGNBQWM7QUFBQSxNQUNiLE1BQU0sS0FBSyxPQUFPLE1BQU07QUFHdkIsWUFBSSxRQUFRLFNBQVMsVUFBVSxNQUFNO0FBQ3BDLGNBQUksTUFBTSxHQUFHO0FBQ1osbUJBQU87QUFBQSxVQUNSO0FBRUEsY0FBSSxNQUFNLEtBQUs7QUFDZCxtQkFBTztBQUFBLFVBQ1I7QUFFQSxpQkFBTyxLQUFLLE9BQVEsTUFBTSxLQUFLLE1BQU8sRUFBRSxJQUFJO0FBQUEsUUFDN0M7QUFFQSxlQUFPLEtBQ0gsS0FBSyxLQUFLLE1BQU0sTUFBTSxNQUFNLENBQUMsSUFDN0IsSUFBSSxLQUFLLE1BQU0sUUFBUSxNQUFNLENBQUMsSUFDL0IsS0FBSyxNQUFNLE9BQU8sTUFBTSxDQUFDO0FBQUEsTUFDN0I7QUFBQSxNQUNBLFlBQVk7QUFBQSxJQUNiO0FBQUEsSUFDQSxVQUFVO0FBQUEsTUFDVCxNQUFNLEtBQUs7QUFDVixjQUFNLFVBQVUseUJBQXlCLEtBQUssSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUM5RCxZQUFJLENBQUMsU0FBUztBQUNiLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFBQSxRQUNoQjtBQUVBLFlBQUksQ0FBQyxXQUFXLElBQUk7QUFFcEIsWUFBSSxZQUFZLFdBQVcsR0FBRztBQUM3Qix3QkFBYyxDQUFDLEdBQUcsV0FBVyxFQUFFLElBQUksZUFBYSxZQUFZLFNBQVMsRUFBRSxLQUFLLEVBQUU7QUFBQSxRQUMvRTtBQUVBLGNBQU0sVUFBVSxPQUFPLFNBQVMsYUFBYSxFQUFFO0FBRS9DLGVBQU87QUFBQSxVQUVMLFdBQVcsS0FBTTtBQUFBLFVBQ2pCLFdBQVcsSUFBSztBQUFBLFVBQ2pCLFVBQVU7QUFBQSxRQUVYO0FBQUEsTUFDRDtBQUFBLE1BQ0EsWUFBWTtBQUFBLElBQ2I7QUFBQSxJQUNBLGNBQWM7QUFBQSxNQUNiLE9BQU8sU0FBTyxPQUFPLGFBQWEsR0FBRyxPQUFPLFNBQVMsR0FBRyxDQUFDO0FBQUEsTUFDekQsWUFBWTtBQUFBLElBQ2I7QUFBQSxJQUNBLGVBQWU7QUFBQSxNQUNkLE1BQU0sTUFBTTtBQUNYLFlBQUksT0FBTyxHQUFHO0FBQ2IsaUJBQU8sS0FBSztBQUFBLFFBQ2I7QUFFQSxZQUFJLE9BQU8sSUFBSTtBQUNkLGlCQUFPLE1BQU0sT0FBTztBQUFBLFFBQ3JCO0FBRUEsWUFBSTtBQUNKLFlBQUk7QUFDSixZQUFJO0FBRUosWUFBSSxRQUFRLEtBQUs7QUFDaEIsa0JBQVMsT0FBTyxPQUFPLEtBQU0sS0FBSztBQUNsQyxrQkFBUTtBQUNSLGlCQUFPO0FBQUEsUUFDUixPQUFPO0FBQ04sa0JBQVE7QUFFUixnQkFBTSxZQUFZLE9BQU87QUFFekIsZ0JBQU0sS0FBSyxNQUFNLE9BQU8sRUFBRSxJQUFJO0FBQzlCLGtCQUFRLEtBQUssTUFBTSxZQUFZLENBQUMsSUFBSTtBQUNwQyxpQkFBUSxZQUFZLElBQUs7QUFBQSxRQUMxQjtBQUVBLGNBQU0sUUFBUSxLQUFLLElBQUksS0FBSyxPQUFPLElBQUksSUFBSTtBQUUzQyxZQUFJLFVBQVUsR0FBRztBQUNoQixpQkFBTztBQUFBLFFBQ1I7QUFHQSxZQUFJLFNBQVMsTUFBTyxLQUFLLE1BQU0sSUFBSSxLQUFLLElBQU0sS0FBSyxNQUFNLEtBQUssS0FBSyxJQUFLLEtBQUssTUFBTSxHQUFHO0FBRXRGLFlBQUksVUFBVSxHQUFHO0FBQ2hCLG9CQUFVO0FBQUEsUUFDWDtBQUVBLGVBQU87QUFBQSxNQUNSO0FBQUEsTUFDQSxZQUFZO0FBQUEsSUFDYjtBQUFBLElBQ0EsV0FBVztBQUFBLE1BQ1YsT0FBTyxDQUFDLEtBQUssT0FBTyxTQUFTLE9BQU8sY0FBYyxPQUFPLGFBQWEsS0FBSyxPQUFPLElBQUksQ0FBQztBQUFBLE1BQ3ZGLFlBQVk7QUFBQSxJQUNiO0FBQUEsSUFDQSxXQUFXO0FBQUEsTUFDVixPQUFPLFNBQU8sT0FBTyxjQUFjLE9BQU8sYUFBYSxHQUFHLENBQUM7QUFBQSxNQUMzRCxZQUFZO0FBQUEsSUFDYjtBQUFBLEVBQ0QsQ0FBQztBQUVELFNBQU87QUFDUjtBQUVBLElBQU0sYUFBYSxlQUFlO0FBRWxDLElBQU8sc0JBQVE7OztBQzlOZjtBQUFBLDBCQUFvQjtBQUNwQixxQkFBZTtBQUNmLHNCQUFnQjtBQUloQixTQUFTLFFBQVEsTUFBTSxPQUFPLFdBQVcsT0FBTyxXQUFXLEtBQUssT0FBTyxvQkFBQUMsUUFBUSxNQUFNO0FBQ3BGLFFBQU0sU0FBUyxLQUFLLFdBQVcsR0FBRyxJQUFJLEtBQU0sS0FBSyxXQUFXLElBQUksTUFBTTtBQUN0RSxRQUFNLFdBQVcsS0FBSyxRQUFRLFNBQVMsSUFBSTtBQUMzQyxRQUFNLHFCQUFxQixLQUFLLFFBQVEsSUFBSTtBQUM1QyxTQUFPLGFBQWEsT0FBTyx1QkFBdUIsTUFBTSxXQUFXO0FBQ3BFO0FBRUEsSUFBTSxFQUFDLElBQUcsSUFBSSxvQkFBQUE7QUFFZCxJQUFJO0FBQ0osSUFDQyxRQUFRLFVBQVUsS0FDZixRQUFRLFdBQVcsS0FDbkIsUUFBUSxhQUFhLEtBQ3JCLFFBQVEsYUFBYSxHQUN2QjtBQUNELG1CQUFpQjtBQUNsQixXQUNDLFFBQVEsT0FBTyxLQUNaLFFBQVEsUUFBUSxLQUNoQixRQUFRLFlBQVksS0FDcEIsUUFBUSxjQUFjLEdBQ3hCO0FBQ0QsbUJBQWlCO0FBQ2xCO0FBRUEsU0FBUyxnQkFBZ0I7QUFDeEIsTUFBSSxpQkFBaUIsS0FBSztBQUN6QixRQUFJLElBQUksZ0JBQWdCLFFBQVE7QUFDL0IsYUFBTztBQUFBLElBQ1I7QUFFQSxRQUFJLElBQUksZ0JBQWdCLFNBQVM7QUFDaEMsYUFBTztBQUFBLElBQ1I7QUFFQSxXQUFPLElBQUksWUFBWSxXQUFXLElBQUksSUFBSSxLQUFLLElBQUksT0FBTyxTQUFTLElBQUksYUFBYSxFQUFFLEdBQUcsQ0FBQztBQUFBLEVBQzNGO0FBQ0Q7QUFFQSxTQUFTLGVBQWUsT0FBTztBQUM5QixNQUFJLFVBQVUsR0FBRztBQUNoQixXQUFPO0FBQUEsRUFDUjtBQUVBLFNBQU87QUFBQSxJQUNOO0FBQUEsSUFDQSxVQUFVO0FBQUEsSUFDVixRQUFRLFNBQVM7QUFBQSxJQUNqQixRQUFRLFNBQVM7QUFBQSxFQUNsQjtBQUNEO0FBRUEsU0FBUyxlQUFlLFlBQVksRUFBQyxhQUFhLGFBQWEsS0FBSSxJQUFJLENBQUMsR0FBRztBQUMxRSxRQUFNLG1CQUFtQixjQUFjO0FBQ3ZDLE1BQUkscUJBQXFCLFFBQVc7QUFDbkMscUJBQWlCO0FBQUEsRUFDbEI7QUFFQSxRQUFNLGFBQWEsYUFBYSxpQkFBaUI7QUFFakQsTUFBSSxlQUFlLEdBQUc7QUFDckIsV0FBTztBQUFBLEVBQ1I7QUFFQSxNQUFJLFlBQVk7QUFDZixRQUFJLFFBQVEsV0FBVyxLQUNuQixRQUFRLFlBQVksS0FDcEIsUUFBUSxpQkFBaUIsR0FBRztBQUMvQixhQUFPO0FBQUEsSUFDUjtBQUVBLFFBQUksUUFBUSxXQUFXLEdBQUc7QUFDekIsYUFBTztBQUFBLElBQ1I7QUFBQSxFQUNEO0FBSUEsTUFBSSxjQUFjLE9BQU8sZ0JBQWdCLEtBQUs7QUFDN0MsV0FBTztBQUFBLEVBQ1I7QUFFQSxNQUFJLGNBQWMsQ0FBQyxlQUFlLGVBQWUsUUFBVztBQUMzRCxXQUFPO0FBQUEsRUFDUjtBQUVBLFFBQU0sTUFBTSxjQUFjO0FBRTFCLE1BQUksSUFBSSxTQUFTLFFBQVE7QUFDeEIsV0FBTztBQUFBLEVBQ1I7QUFFQSxNQUFJLG9CQUFBQSxRQUFRLGFBQWEsU0FBUztBQUdqQyxVQUFNLFlBQVksZUFBQUMsUUFBRyxRQUFRLEVBQUUsTUFBTSxHQUFHO0FBQ3hDLFFBQ0MsT0FBTyxVQUFVLEVBQUUsS0FBSyxNQUNyQixPQUFPLFVBQVUsRUFBRSxLQUFLLE9BQzFCO0FBQ0QsYUFBTyxPQUFPLFVBQVUsRUFBRSxLQUFLLFFBQVMsSUFBSTtBQUFBLElBQzdDO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFFQSxNQUFJLFFBQVEsS0FBSztBQUNoQixRQUFJLG9CQUFvQixPQUFPLG1CQUFtQixLQUFLO0FBQ3RELGFBQU87QUFBQSxJQUNSO0FBRUEsUUFBSSxDQUFDLFVBQVUsWUFBWSxZQUFZLGFBQWEsYUFBYSxPQUFPLEVBQUUsS0FBSyxVQUFRLFFBQVEsR0FBRyxLQUFLLElBQUksWUFBWSxZQUFZO0FBQ2xJLGFBQU87QUFBQSxJQUNSO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFFQSxNQUFJLHNCQUFzQixLQUFLO0FBQzlCLFdBQU8sZ0NBQWdDLEtBQUssSUFBSSxnQkFBZ0IsSUFBSSxJQUFJO0FBQUEsRUFDekU7QUFFQSxNQUFJLElBQUksY0FBYyxhQUFhO0FBQ2xDLFdBQU87QUFBQSxFQUNSO0FBRUEsTUFBSSxJQUFJLFNBQVMsZUFBZTtBQUMvQixXQUFPO0FBQUEsRUFDUjtBQUVBLE1BQUksa0JBQWtCLEtBQUs7QUFDMUIsVUFBTSxVQUFVLE9BQU8sVUFBVSxJQUFJLHdCQUF3QixJQUFJLE1BQU0sR0FBRyxFQUFFLElBQUksRUFBRTtBQUVsRixZQUFRLElBQUk7QUFBQSxXQUNOLGFBQWE7QUFDakIsZUFBTyxXQUFXLElBQUksSUFBSTtBQUFBLE1BQzNCO0FBQUEsV0FFSyxrQkFBa0I7QUFDdEIsZUFBTztBQUFBLE1BQ1I7QUFBQTtBQUFBLEVBR0Y7QUFFQSxNQUFJLGlCQUFpQixLQUFLLElBQUksSUFBSSxHQUFHO0FBQ3BDLFdBQU87QUFBQSxFQUNSO0FBRUEsTUFBSSw4REFBOEQsS0FBSyxJQUFJLElBQUksR0FBRztBQUNqRixXQUFPO0FBQUEsRUFDUjtBQUVBLE1BQUksZUFBZSxLQUFLO0FBQ3ZCLFdBQU87QUFBQSxFQUNSO0FBRUEsU0FBTztBQUNSO0FBRU8sU0FBUyxvQkFBb0IsUUFBUSxVQUFVLENBQUMsR0FBRztBQUN6RCxRQUFNLFFBQVEsZUFBZSxRQUFRO0FBQUEsSUFDcEMsYUFBYSxVQUFVLE9BQU87QUFBQSxJQUM5QixHQUFHO0FBQUEsRUFDSixDQUFDO0FBRUQsU0FBTyxlQUFlLEtBQUs7QUFDNUI7QUFFQSxJQUFNLGdCQUFnQjtBQUFBLEVBQ3JCLFFBQVEsb0JBQW9CLEVBQUMsT0FBTyxnQkFBQUMsUUFBSSxPQUFPLENBQUMsRUFBQyxDQUFDO0FBQUEsRUFDbEQsUUFBUSxvQkFBb0IsRUFBQyxPQUFPLGdCQUFBQSxRQUFJLE9BQU8sQ0FBQyxFQUFDLENBQUM7QUFDbkQ7QUFFQSxJQUFPLHlCQUFROzs7QUNyTGY7QUFDTyxTQUFTLGlCQUFpQixRQUFRLFdBQVcsVUFBVTtBQUM3RCxNQUFJLFFBQVEsT0FBTyxRQUFRLFNBQVM7QUFDcEMsTUFBSSxVQUFVLElBQUk7QUFDakIsV0FBTztBQUFBLEVBQ1I7QUFFQSxRQUFNLGtCQUFrQixVQUFVO0FBQ2xDLE1BQUksV0FBVztBQUNmLE1BQUksY0FBYztBQUNsQixLQUFHO0FBQ0YsbUJBQWUsT0FBTyxNQUFNLFVBQVUsS0FBSyxJQUFJLFlBQVk7QUFDM0QsZUFBVyxRQUFRO0FBQ25CLFlBQVEsT0FBTyxRQUFRLFdBQVcsUUFBUTtBQUFBLEVBQzNDLFNBQVMsVUFBVTtBQUVuQixpQkFBZSxPQUFPLE1BQU0sUUFBUTtBQUNwQyxTQUFPO0FBQ1I7QUFFTyxTQUFTLCtCQUErQixRQUFRLFFBQVEsU0FBUyxPQUFPO0FBQzlFLE1BQUksV0FBVztBQUNmLE1BQUksY0FBYztBQUNsQixLQUFHO0FBQ0YsVUFBTSxRQUFRLE9BQU8sUUFBUSxPQUFPO0FBQ3BDLG1CQUFlLE9BQU8sTUFBTSxVQUFXLFFBQVEsUUFBUSxJQUFJLEtBQU0sSUFBSSxVQUFVLFFBQVEsU0FBUyxRQUFRO0FBQ3hHLGVBQVcsUUFBUTtBQUNuQixZQUFRLE9BQU8sUUFBUSxNQUFNLFFBQVE7QUFBQSxFQUN0QyxTQUFTLFVBQVU7QUFFbkIsaUJBQWUsT0FBTyxNQUFNLFFBQVE7QUFDcEMsU0FBTztBQUNSOzs7QUh6QkEsSUFBTSxFQUFDLFFBQVEsYUFBYSxRQUFRLFlBQVcsSUFBSTtBQUVuRCxJQUFNLFlBQVksT0FBTyxXQUFXO0FBQ3BDLElBQU0sU0FBUyxPQUFPLFFBQVE7QUFDOUIsSUFBTSxXQUFXLE9BQU8sVUFBVTtBQUdsQyxJQUFNLGVBQWU7QUFBQSxFQUNwQjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNEO0FBRUEsSUFBTUMsVUFBUyx1QkFBTyxPQUFPLElBQUk7QUFFakMsSUFBTSxlQUFlLENBQUMsUUFBUSxVQUFVLENBQUMsTUFBTTtBQUM5QyxNQUFJLFFBQVEsU0FBUyxFQUFFLE9BQU8sVUFBVSxRQUFRLEtBQUssS0FBSyxRQUFRLFNBQVMsS0FBSyxRQUFRLFNBQVMsSUFBSTtBQUNwRyxVQUFNLElBQUksTUFBTSxxREFBcUQ7QUFBQSxFQUN0RTtBQUdBLFFBQU0sYUFBYSxjQUFjLFlBQVksUUFBUTtBQUNyRCxTQUFPLFFBQVEsUUFBUSxVQUFVLFNBQVksYUFBYSxRQUFRO0FBQ25FO0FBU0EsSUFBTSxlQUFlLGFBQVc7QUFDL0IsUUFBTUMsU0FBUSxJQUFJLFlBQVksUUFBUSxLQUFLLEdBQUc7QUFDOUMsZUFBYUEsUUFBTyxPQUFPO0FBRTNCLFNBQU8sZUFBZUEsUUFBTyxZQUFZLFNBQVM7QUFFbEQsU0FBT0E7QUFDUjtBQUVBLFNBQVMsWUFBWSxTQUFTO0FBQzdCLFNBQU8sYUFBYSxPQUFPO0FBQzVCO0FBRUEsT0FBTyxlQUFlLFlBQVksV0FBVyxTQUFTLFNBQVM7QUFFL0QsV0FBVyxDQUFDLFdBQVcsS0FBSyxLQUFLLE9BQU8sUUFBUSxtQkFBVSxHQUFHO0FBQzVELEVBQUFDLFFBQU8sYUFBYTtBQUFBLElBQ25CLE1BQU07QUFDTCxZQUFNLFVBQVUsY0FBYyxNQUFNLGFBQWEsTUFBTSxNQUFNLE1BQU0sT0FBTyxLQUFLLE9BQU8sR0FBRyxLQUFLLFNBQVM7QUFDdkcsYUFBTyxlQUFlLE1BQU0sV0FBVyxFQUFDLE9BQU8sUUFBTyxDQUFDO0FBQ3ZELGFBQU87QUFBQSxJQUNSO0FBQUEsRUFDRDtBQUNEO0FBRUFBLFFBQU8sVUFBVTtBQUFBLEVBQ2hCLE1BQU07QUFDTCxVQUFNLFVBQVUsY0FBYyxNQUFNLEtBQUssU0FBUyxJQUFJO0FBQ3RELFdBQU8sZUFBZSxNQUFNLFdBQVcsRUFBQyxPQUFPLFFBQU8sQ0FBQztBQUN2RCxXQUFPO0FBQUEsRUFDUjtBQUNEO0FBRUEsSUFBTSxlQUFlLENBQUMsT0FBTyxPQUFPLFNBQVMsZUFBZTtBQUMzRCxNQUFJLFVBQVUsT0FBTztBQUNwQixRQUFJLFVBQVUsV0FBVztBQUN4QixhQUFPLG9CQUFXLE1BQU0sUUFBUSxHQUFHLFVBQVU7QUFBQSxJQUM5QztBQUVBLFFBQUksVUFBVSxXQUFXO0FBQ3hCLGFBQU8sb0JBQVcsTUFBTSxRQUFRLG9CQUFXLGFBQWEsR0FBRyxVQUFVLENBQUM7QUFBQSxJQUN2RTtBQUVBLFdBQU8sb0JBQVcsTUFBTSxLQUFLLG9CQUFXLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFBQSxFQUNqRTtBQUVBLE1BQUksVUFBVSxPQUFPO0FBQ3BCLFdBQU8sYUFBYSxPQUFPLE9BQU8sTUFBTSxHQUFHLG9CQUFXLFNBQVMsR0FBRyxVQUFVLENBQUM7QUFBQSxFQUM5RTtBQUVBLFNBQU8sb0JBQVcsTUFBTSxPQUFPLEdBQUcsVUFBVTtBQUM3QztBQUVBLElBQU0sYUFBYSxDQUFDLE9BQU8sT0FBTyxTQUFTO0FBRTNDLFdBQVcsU0FBUyxZQUFZO0FBQy9CLEVBQUFBLFFBQU8sU0FBUztBQUFBLElBQ2YsTUFBTTtBQUNMLFlBQU0sRUFBQyxNQUFLLElBQUk7QUFDaEIsYUFBTyxZQUFhLFlBQVk7QUFDL0IsY0FBTSxTQUFTLGFBQWEsYUFBYSxPQUFPLGFBQWEsUUFBUSxTQUFTLEdBQUcsVUFBVSxHQUFHLG9CQUFXLE1BQU0sT0FBTyxLQUFLLE9BQU87QUFDbEksZUFBTyxjQUFjLE1BQU0sUUFBUSxLQUFLLFNBQVM7QUFBQSxNQUNsRDtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBRUEsUUFBTSxVQUFVLE9BQU8sTUFBTSxHQUFHLFlBQVksSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3RCxFQUFBQSxRQUFPLFdBQVc7QUFBQSxJQUNqQixNQUFNO0FBQ0wsWUFBTSxFQUFDLE1BQUssSUFBSTtBQUNoQixhQUFPLFlBQWEsWUFBWTtBQUMvQixjQUFNLFNBQVMsYUFBYSxhQUFhLE9BQU8sYUFBYSxRQUFRLFdBQVcsR0FBRyxVQUFVLEdBQUcsb0JBQVcsUUFBUSxPQUFPLEtBQUssT0FBTztBQUN0SSxlQUFPLGNBQWMsTUFBTSxRQUFRLEtBQUssU0FBUztBQUFBLE1BQ2xEO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFDRDtBQUVBLElBQU0sUUFBUSxPQUFPLGlCQUFpQixNQUFNO0FBQUMsR0FBRztBQUFBLEVBQy9DLEdBQUdBO0FBQUEsRUFDSCxPQUFPO0FBQUEsSUFDTixZQUFZO0FBQUEsSUFDWixNQUFNO0FBQ0wsYUFBTyxLQUFLLFdBQVc7QUFBQSxJQUN4QjtBQUFBLElBQ0EsSUFBSSxPQUFPO0FBQ1YsV0FBSyxXQUFXLFFBQVE7QUFBQSxJQUN6QjtBQUFBLEVBQ0Q7QUFDRCxDQUFDO0FBRUQsSUFBTSxlQUFlLENBQUMsTUFBTSxPQUFPLFdBQVc7QUFDN0MsTUFBSTtBQUNKLE1BQUk7QUFDSixNQUFJLFdBQVcsUUFBVztBQUN6QixjQUFVO0FBQ1YsZUFBVztBQUFBLEVBQ1osT0FBTztBQUNOLGNBQVUsT0FBTyxVQUFVO0FBQzNCLGVBQVcsUUFBUSxPQUFPO0FBQUEsRUFDM0I7QUFFQSxTQUFPO0FBQUEsSUFDTjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNEO0FBQ0Q7QUFFQSxJQUFNLGdCQUFnQixDQUFDLE1BQU0sU0FBUyxhQUFhO0FBR2xELFFBQU0sVUFBVSxJQUFJLGVBQWUsV0FBVyxTQUFVLFdBQVcsV0FBVyxJQUFNLEtBQUssV0FBVyxLQUFNLFdBQVcsS0FBSyxHQUFHLENBQUM7QUFJOUgsU0FBTyxlQUFlLFNBQVMsS0FBSztBQUVwQyxVQUFRLGFBQWE7QUFDckIsVUFBUSxVQUFVO0FBQ2xCLFVBQVEsWUFBWTtBQUVwQixTQUFPO0FBQ1I7QUFFQSxJQUFNLGFBQWEsQ0FBQyxNQUFNLFdBQVc7QUFDcEMsTUFBSSxLQUFLLFNBQVMsS0FBSyxDQUFDLFFBQVE7QUFDL0IsV0FBTyxLQUFLLFlBQVksS0FBSztBQUFBLEVBQzlCO0FBRUEsTUFBSSxTQUFTLEtBQUs7QUFFbEIsTUFBSSxXQUFXLFFBQVc7QUFDekIsV0FBTztBQUFBLEVBQ1I7QUFFQSxRQUFNLEVBQUMsU0FBUyxTQUFRLElBQUk7QUFDNUIsTUFBSSxPQUFPLFNBQVMsTUFBUSxHQUFHO0FBQzlCLFdBQU8sV0FBVyxRQUFXO0FBSTVCLGVBQVMsaUJBQWlCLFFBQVEsT0FBTyxPQUFPLE9BQU8sSUFBSTtBQUUzRCxlQUFTLE9BQU87QUFBQSxJQUNqQjtBQUFBLEVBQ0Q7QUFLQSxRQUFNLFVBQVUsT0FBTyxRQUFRLElBQUk7QUFDbkMsTUFBSSxZQUFZLElBQUk7QUFDbkIsYUFBUywrQkFBK0IsUUFBUSxVQUFVLFNBQVMsT0FBTztBQUFBLEVBQzNFO0FBRUEsU0FBTyxVQUFVLFNBQVM7QUFDM0I7QUFFQSxPQUFPLGlCQUFpQixZQUFZLFdBQVdBLE9BQU07QUFFckQsSUFBTSxRQUFRLFlBQVk7QUFDbkIsSUFBTSxjQUFjLFlBQVksRUFBQyxPQUFPLGNBQWMsWUFBWSxRQUFRLEVBQUMsQ0FBQztBQW9CbkYsSUFBTyxpQkFBUTs7O0FEdk5mLGlCQUFrQjs7O0FLVGxCO0FBQ0EsSUFBQUMsb0JBQWlCOzs7QUNEakI7QUFBQSxJQUFBQyxrQkFBZTtBQUNmLElBQUFDLG9CQUFxQjtBQUNyQixvQkFBbUI7QUFDbkIsSUFBQUMsb0JBQXFCO0FBQ3JCLHNCQUFvQjs7O0FDSnBCO0FBQUEsSUFBQUMsdUJBQW9CO0FBQ3BCLHFCQUFlO0FBQ2YsdUJBQWlCO0FBQ2pCLHVCQUFxQjtBQUNyQixvQkFBc0I7OztBQ0p0QjtBQUFlLFNBQVIsTUFBdUJDLE9BQU07QUFDbkMsUUFBTSx1QkFBdUIsWUFBWSxLQUFLQSxLQUFJO0FBQ2xELFFBQU0sY0FBYyxvQkFBb0IsS0FBS0EsS0FBSTtBQUVqRCxNQUFJLHdCQUF3QixhQUFhO0FBQ3hDLFdBQU9BO0FBQUEsRUFDUjtBQUVBLFNBQU9BLE1BQUssUUFBUSxPQUFPLEdBQUc7QUFDL0I7OztBQ1RBO0FBQUEsc0JBQTRCO0FBQzVCLHlCQUF3QjtBQUVqQixJQUFNLFNBQVMsZUFBYSxxQkFBcUIsVUFBTSwrQkFBYyxTQUFTLElBQUk7QUFFbEYsSUFBTSxlQUFOLGNBQTJCLDZCQUFVO0FBQUEsRUFDM0MsWUFBWSxRQUFRO0FBQ25CLFVBQU07QUFBQSxNQUNMLFlBQVk7QUFBQSxNQUNaLFVBQVUsTUFBTSxVQUFVLFVBQVU7QUFDbkMsaUJBQVMsUUFBVyxPQUFPLElBQUksSUFBSSxPQUFPLE1BQVM7QUFBQSxNQUNwRDtBQUFBLElBQ0QsQ0FBQztBQUFBLEVBQ0Y7QUFDRDtBQUVPLElBQU0sb0JBQW9CLGFBQVcsUUFBUSxPQUFPOzs7QUZSM0QsSUFBTSx5QkFBeUI7QUFBQSxFQUM5QixRQUFRO0FBQUEsSUFDUDtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0Q7QUFBQSxFQUNBLFVBQVU7QUFBQSxFQUNWLEtBQUs7QUFDTjtBQUVPLElBQU0sMEJBQTBCO0FBRXZDLElBQU0scUJBQXFCLENBQUMsU0FBUyxTQUFTLGtCQUFrQixPQUFPLElBQ3BFLE1BQU0saUJBQUFDLFFBQUssTUFBTSxLQUFLLE1BQU0sUUFBUSxNQUFNLENBQUMsQ0FBQyxJQUM1QyxpQkFBQUEsUUFBSyxNQUFNLEtBQUssTUFBTSxPQUFPO0FBRWhDLElBQU0sa0JBQWtCLENBQUMsTUFBTSxRQUFRO0FBQ3RDLFFBQU0sT0FBTyxNQUFNLGlCQUFBQSxRQUFLLFNBQVMsS0FBSyxpQkFBQUEsUUFBSyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUM7QUFFbEUsU0FBTyxLQUFLLFFBQ1YsTUFBTSxPQUFPLEVBQ2IsT0FBTyxVQUFRLFFBQVEsQ0FBQyxLQUFLLFdBQVcsR0FBRyxDQUFDLEVBQzVDLElBQUksYUFBVyxtQkFBbUIsU0FBUyxJQUFJLENBQUM7QUFDbkQ7QUFFQSxJQUFNLGlCQUFpQixDQUFDLGlCQUFpQixRQUFRO0FBQ2hELFFBQU0sTUFBTSxHQUFHO0FBQ2YsTUFBSSxpQkFBQUEsUUFBSyxXQUFXLGVBQWUsR0FBRztBQUNyQyxRQUFJLE1BQU0sZUFBZSxFQUFFLFdBQVcsR0FBRyxHQUFHO0FBQzNDLGFBQU8saUJBQUFBLFFBQUssU0FBUyxLQUFLLGVBQWU7QUFBQSxJQUMxQztBQUVBLFVBQU0sSUFBSSxNQUFNLFFBQVEsaUNBQWlDLEtBQUs7QUFBQSxFQUMvRDtBQUVBLFNBQU87QUFDUjtBQUVBLElBQU0sd0JBQXdCLENBQUMsT0FBTyxRQUFRO0FBQzdDLFFBQU0sV0FBVyxNQUFNLFFBQVEsVUFBUSxnQkFBZ0IsTUFBTSxHQUFHLENBQUM7QUFDakUsUUFBTSxjQUFVLGNBQUFDLFNBQVUsRUFBRSxJQUFJLFFBQVE7QUFFeEMsU0FBTyxxQkFBbUI7QUFDekIsc0JBQWtCLE9BQU8sZUFBZTtBQUN4QyxzQkFBa0IsZUFBZSxpQkFBaUIsR0FBRztBQUNyRCxXQUFPLGtCQUFrQixRQUFRLFFBQVEsTUFBTSxlQUFlLENBQUMsSUFBSTtBQUFBLEVBQ3BFO0FBQ0Q7QUFFQSxJQUFNLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxPQUFPO0FBQUEsRUFDM0MsS0FBSyxPQUFPLFFBQVEsR0FBRyxLQUFLLHFCQUFBQyxRQUFRLElBQUk7QUFBQSxFQUN4QyxnQkFBZ0IsUUFBUSxRQUFRLGNBQWM7QUFBQSxFQUM5QyxNQUFNLE9BQU8sUUFBUSxTQUFTLFdBQVcsUUFBUSxPQUFPLE9BQU87QUFDaEU7QUFFTyxJQUFNLHlCQUF5QixPQUFPLFVBQVUsWUFBWTtBQUNsRSxRQUFNLEVBQUMsS0FBSyxnQkFBZ0IsS0FBSSxJQUFJLGlCQUFpQixPQUFPO0FBRTVELFFBQU0sUUFBUSxVQUFNLGlCQUFBQyxTQUFTLFVBQVUsRUFBQyxLQUFLLGdCQUFnQixNQUFNLEdBQUcsdUJBQXNCLENBQUM7QUFFN0YsUUFBTSxRQUFRLE1BQU0sUUFBUTtBQUFBLElBQzNCLE1BQU0sSUFBSSxPQUFNLGNBQWE7QUFBQSxNQUM1QjtBQUFBLE1BQ0EsU0FBUyxNQUFNLGVBQUFDLFFBQUcsU0FBUyxTQUFTLFVBQVUsTUFBTTtBQUFBLElBQ3JELEVBQUU7QUFBQSxFQUNIO0FBRUEsU0FBTyxzQkFBc0IsT0FBTyxHQUFHO0FBQ3hDO0FBRU8sSUFBTSw2QkFBNkIsQ0FBQyxVQUFVLFlBQVk7QUFDaEUsUUFBTSxFQUFDLEtBQUssZ0JBQWdCLEtBQUksSUFBSSxpQkFBaUIsT0FBTztBQUU1RCxRQUFNLFFBQVEsaUJBQUFELFFBQVMsS0FBSyxVQUFVLEVBQUMsS0FBSyxnQkFBZ0IsTUFBTSxHQUFHLHVCQUFzQixDQUFDO0FBRTVGLFFBQU0sUUFBUSxNQUFNLElBQUksZUFBYTtBQUFBLElBQ3BDO0FBQUEsSUFDQSxTQUFTLGVBQUFDLFFBQUcsYUFBYSxVQUFVLE1BQU07QUFBQSxFQUMxQyxFQUFFO0FBRUYsU0FBTyxzQkFBc0IsT0FBTyxHQUFHO0FBQ3hDOzs7QUQ5RUEsSUFBTSxzQkFBc0IsY0FBWTtBQUN2QyxNQUFJLFNBQVMsS0FBSyxhQUFXLE9BQU8sWUFBWSxRQUFRLEdBQUc7QUFDMUQsVUFBTSxJQUFJLFVBQVUsa0RBQWtEO0FBQUEsRUFDdkU7QUFDRDtBQUVBLElBQU0sa0JBQWtCLGNBQVk7QUFDbkMsYUFBVyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3pDLHNCQUFvQixRQUFRO0FBQzVCLFNBQU87QUFDUjtBQUVBLElBQU0saUJBQWlCLGFBQVc7QUFDakMsTUFBSSxDQUFDLFFBQVEsS0FBSztBQUNqQjtBQUFBLEVBQ0Q7QUFFQSxNQUFJO0FBQ0osTUFBSTtBQUNILFdBQU8sZ0JBQUFDLFFBQUcsU0FBUyxRQUFRLEdBQUc7QUFBQSxFQUMvQixRQUFFO0FBQ0Q7QUFBQSxFQUNEO0FBRUEsTUFBSSxDQUFDLEtBQUssWUFBWSxHQUFHO0FBQ3hCLFVBQU0sSUFBSSxNQUFNLGdEQUFnRDtBQUFBLEVBQ2pFO0FBQ0Q7QUFFQSxJQUFNQyxvQkFBbUIsQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUMxQyxZQUFVO0FBQUEsSUFDVCxHQUFHO0FBQUEsSUFDSCxRQUFRLFFBQVEsVUFBVSxDQUFDO0FBQUEsSUFDM0IsbUJBQW1CLFFBQVEsc0JBQXNCLFNBQzlDLE9BQ0EsUUFBUTtBQUFBLElBQ1gsS0FBSyxPQUFPLFFBQVEsR0FBRztBQUFBLEVBQ3hCO0FBRUEsaUJBQWUsT0FBTztBQUV0QixTQUFPO0FBQ1I7QUFFQSxJQUFNLHFCQUFxQixRQUFNLE9BQU8sVUFBVSxZQUFZLEdBQUcsZ0JBQWdCLFFBQVEsR0FBR0Esa0JBQWlCLE9BQU8sQ0FBQztBQUNySCxJQUFNLHlCQUF5QixRQUFNLENBQUMsVUFBVSxZQUFZLEdBQUcsZ0JBQWdCLFFBQVEsR0FBR0Esa0JBQWlCLE9BQU8sQ0FBQztBQUVuSCxJQUFNLHlCQUF5QixhQUFXO0FBQ3pDLFFBQU0sRUFBQyxhQUFhLFVBQVMsSUFBSTtBQUVqQyxRQUFNLFdBQVcsY0FBYyxnQkFBZ0IsV0FBVyxJQUFJLENBQUM7QUFDL0QsTUFBSSxXQUFXO0FBQ2QsYUFBUyxLQUFLLHVCQUF1QjtBQUFBLEVBQ3RDO0FBRUEsU0FBTztBQUNSO0FBRUEsSUFBTSxZQUFZLE9BQU0sWUFBVztBQUNsQyxRQUFNLHNCQUFzQix1QkFBdUIsT0FBTztBQUMxRCxTQUFPO0FBQUEsSUFDTixvQkFBb0IsU0FBUyxLQUFLLE1BQU0sdUJBQXVCLHFCQUFxQixPQUFPO0FBQUEsRUFDNUY7QUFDRDtBQUVBLElBQU0sZ0JBQWdCLGFBQVc7QUFDaEMsUUFBTSxzQkFBc0IsdUJBQXVCLE9BQU87QUFDMUQsU0FBTztBQUFBLElBQ04sb0JBQW9CLFNBQVMsS0FBSywyQkFBMkIscUJBQXFCLE9BQU87QUFBQSxFQUMxRjtBQUNEO0FBRUEsSUFBTSx1QkFBdUIsZUFBYTtBQUN6QyxRQUFNLE9BQU8sb0JBQUksSUFBSTtBQUVyQixTQUFPLG9CQUFrQjtBQUN4QixVQUFNQyxRQUFPLGVBQWUsUUFBUTtBQUNwQyxVQUFNLFVBQVUsa0JBQUFDLFFBQVMsVUFBVUQsS0FBSTtBQUN2QyxVQUFNLGdCQUFnQixLQUFLLElBQUksT0FBTyxLQUFNLGFBQWEsVUFBVUEsS0FBSTtBQUN2RSxTQUFLLElBQUksT0FBTztBQUNoQixXQUFPLENBQUM7QUFBQSxFQUNUO0FBQ0Q7QUFFQSxJQUFNLHVCQUF1QixDQUFDLFNBQVMsV0FBVyxRQUFRLEtBQUssRUFBRSxPQUFPLG9CQUFrQixPQUFPLGNBQWMsQ0FBQztBQUNoSCxJQUFNLHVCQUF1QixDQUFDLFNBQVMsZUFBVyxjQUFBRSxTQUFPLE9BQU8sRUFBRSxLQUFLLElBQUksYUFBYSxvQkFBa0IsT0FBTyxjQUFjLENBQUMsQ0FBQztBQUVqSSxJQUFNLDBCQUEwQixDQUFDLFVBQVUsWUFBWTtBQUN0RCxRQUFNLFFBQVEsQ0FBQztBQUVmLFNBQU8sU0FBUyxTQUFTLEdBQUc7QUFDM0IsVUFBTSxRQUFRLFNBQVMsVUFBVSxhQUFXLGtCQUFrQixPQUFPLENBQUM7QUFFdEUsUUFBSSxVQUFVLElBQUk7QUFDakIsWUFBTSxLQUFLLEVBQUMsVUFBVSxRQUFPLENBQUM7QUFDOUI7QUFBQSxJQUNEO0FBRUEsVUFBTSxnQkFBZ0IsU0FBUyxPQUFPLE1BQU0sQ0FBQztBQUU3QyxlQUFXLFFBQVEsT0FBTztBQUN6QixXQUFLLFFBQVEsT0FBTyxLQUFLLGFBQWE7QUFBQSxJQUN2QztBQUVBLFFBQUksVUFBVSxHQUFHO0FBQ2hCLFlBQU0sS0FBSztBQUFBLFFBQ1YsVUFBVSxTQUFTLE1BQU0sR0FBRyxLQUFLO0FBQUEsUUFDakMsU0FBUztBQUFBLFVBQ1IsR0FBRztBQUFBLFVBQ0gsUUFBUTtBQUFBLFlBQ1AsR0FBRyxRQUFRO0FBQUEsWUFDWDtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQUEsTUFDRCxDQUFDO0FBQUEsSUFDRjtBQUVBLGVBQVcsU0FBUyxNQUFNLFFBQVEsQ0FBQztBQUFBLEVBQ3BDO0FBRUEsU0FBTztBQUNSO0FBRUEsSUFBTSxvQkFBb0IsQ0FBQyxTQUFTLFNBQVM7QUFBQSxFQUM1QyxHQUFJLE1BQU0sRUFBQyxJQUFHLElBQUksQ0FBQztBQUFBLEVBQ25CLEdBQUksTUFBTSxRQUFRLE9BQU8sSUFBSSxFQUFDLE9BQU8sUUFBTyxJQUFJO0FBQ2pEO0FBRUEsSUFBTSxnQkFBZ0IsT0FBTyxVQUFVLFlBQVk7QUFDbEQsUUFBTSxZQUFZLHdCQUF3QixVQUFVLE9BQU87QUFFM0QsUUFBTSxFQUFDLEtBQUssa0JBQWlCLElBQUk7QUFFakMsTUFBSSxDQUFDLG1CQUFtQjtBQUN2QixXQUFPO0FBQUEsRUFDUjtBQUVBLFFBQU0sdUJBQXVCLGtCQUFrQixtQkFBbUIsR0FBRztBQUNyRSxRQUFNLHNCQUFzQixNQUFNLEVBQUMsSUFBRyxJQUFJO0FBRTFDLFNBQU8sUUFBUTtBQUFBLElBQ2QsVUFBVSxJQUFJLE9BQU0sU0FBUTtBQUMzQixVQUFJLEVBQUMsVUFBQUMsV0FBVSxTQUFBQyxTQUFPLElBQUk7QUFFMUI7QUFBQSxRQUNDRDtBQUFBLFFBQ0FDLFNBQVE7QUFBQSxNQUNULElBQUksTUFBTSxRQUFRLElBQUk7QUFBQSxZQUNyQixnQkFBQUMsU0FBUUYsV0FBVSxvQkFBb0I7QUFBQSxZQUN0QyxnQkFBQUUsU0FBUUQsU0FBUSxRQUFRLG1CQUFtQjtBQUFBLE1BQzVDLENBQUM7QUFFRCxhQUFPLEVBQUMsVUFBQUQsV0FBVSxTQUFBQyxTQUFPO0FBQUEsSUFDMUIsQ0FBQztBQUFBLEVBQ0Y7QUFDRDtBQUVBLElBQU0sb0JBQW9CLENBQUMsVUFBVSxZQUFZO0FBQ2hELFFBQU0sWUFBWSx3QkFBd0IsVUFBVSxPQUFPO0FBRTNELFFBQU0sRUFBQyxLQUFLLGtCQUFpQixJQUFJO0FBRWpDLE1BQUksQ0FBQyxtQkFBbUI7QUFDdkIsV0FBTztBQUFBLEVBQ1I7QUFFQSxRQUFNLHVCQUF1QixrQkFBa0IsbUJBQW1CLEdBQUc7QUFDckUsUUFBTSxzQkFBc0IsTUFBTSxFQUFDLElBQUcsSUFBSTtBQUUxQyxTQUFPLFVBQVUsSUFBSSxVQUFRO0FBQzVCLFFBQUksRUFBQyxVQUFBRCxXQUFVLFNBQUFDLFNBQU8sSUFBSTtBQUMxQixJQUFBRCxZQUFXLGdCQUFBRSxRQUFRLEtBQUtGLFdBQVUsb0JBQW9CO0FBQ3RELElBQUFDLFNBQVEsU0FBUyxnQkFBQUMsUUFBUSxLQUFLRCxTQUFRLFFBQVEsbUJBQW1CO0FBQ2pFLFdBQU8sRUFBQyxVQUFBRCxXQUFVLFNBQUFDLFNBQU87QUFBQSxFQUMxQixDQUFDO0FBQ0Y7QUFFTyxJQUFNLFNBQVMsbUJBQW1CLE9BQU8sVUFBVSxZQUFZO0FBQ3JFLFFBQU07QUFBQSxJQUNMO0FBQUEsSUFDQTtBQUFBLEVBQ0QsSUFBSSxNQUFNLFFBQVEsSUFBSTtBQUFBLElBQ3JCLGNBQWMsVUFBVSxPQUFPO0FBQUEsSUFDL0IsVUFBVSxPQUFPO0FBQUEsRUFDbEIsQ0FBQztBQUNELFFBQU0sVUFBVSxNQUFNLFFBQVEsSUFBSSxNQUFNLElBQUksY0FBUSxrQkFBQUUsU0FBUyxLQUFLLFVBQVUsS0FBSyxPQUFPLENBQUMsQ0FBQztBQUUxRixTQUFPLHFCQUFxQixTQUFTLE1BQU07QUFDNUMsQ0FBQztBQUVNLElBQU0sYUFBYSx1QkFBdUIsQ0FBQyxVQUFVLFlBQVk7QUFDdkUsUUFBTSxRQUFRLGtCQUFrQixVQUFVLE9BQU87QUFDakQsUUFBTSxTQUFTLGNBQWMsT0FBTztBQUNwQyxRQUFNLFVBQVUsTUFBTSxJQUFJLFVBQVEsa0JBQUFBLFFBQVMsS0FBSyxLQUFLLFVBQVUsS0FBSyxPQUFPLENBQUM7QUFFNUUsU0FBTyxxQkFBcUIsU0FBUyxNQUFNO0FBQzVDLENBQUM7QUFFTSxJQUFNLGVBQWUsdUJBQXVCLENBQUMsVUFBVSxZQUFZO0FBQ3pFLFFBQU0sUUFBUSxrQkFBa0IsVUFBVSxPQUFPO0FBQ2pELFFBQU0sU0FBUyxjQUFjLE9BQU87QUFDcEMsUUFBTSxVQUFVLE1BQU0sSUFBSSxVQUFRLGtCQUFBQSxRQUFTLE9BQU8sS0FBSyxVQUFVLEtBQUssT0FBTyxDQUFDO0FBRTlFLFNBQU8scUJBQXFCLFNBQVMsTUFBTTtBQUM1QyxDQUFDO0FBRU0sSUFBTSxtQkFBbUI7QUFBQSxFQUMvQixDQUFDLFVBQVUsWUFBWSxTQUFTLEtBQUssYUFBVyxrQkFBQUEsUUFBUyxpQkFBaUIsU0FBUyxPQUFPLENBQUM7QUFDNUY7QUFFTyxJQUFNLG9CQUFvQixtQkFBbUIsYUFBYTtBQUMxRCxJQUFNLHdCQUF3Qix1QkFBdUIsaUJBQWlCOzs7QUkvTjdFO0FBQUEsa0JBQWlCO0FBRVYsSUFBTSxnQ0FDWCxDQUFDLGFBQXFCLFdBQ3RCLENBQUMsY0FBc0I7QUFDckIsUUFBTSxRQUFRLFVBRVgsUUFBUSxTQUFTLEdBQUcsRUFFcEIsUUFBUSxPQUFPLEVBQUUsRUFFakIsUUFBUSxVQUFVLEVBQUUsRUFFcEIsUUFBUSxZQUFZLEVBQUUsRUFFdEIsUUFBUSxVQUFVLEVBQUUsRUFFcEIsUUFBUSxTQUFTLEVBQUUsRUFFbkIsUUFBUSxVQUFVLEVBQUUsRUFFcEIsUUFBUSxpQkFBaUIsRUFBRTtBQUU5QixTQUFPLFlBQUFDLFFBQUssS0FBSyxZQUFZLEtBQUs7QUFDcEM7OztBTFhLLElBQU0sdUJBQXVCLE9BQU8sU0FLSjtBQUNyQyxRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0EsV0FBVztBQUFBLElBQ1gseUJBQXlCLDhCQUE4QixLQUFLLFNBQVM7QUFBQSxFQUN2RSxJQUFJO0FBRUosUUFBTSxlQUFlLGtCQUFBQyxRQUFLLE1BQU0sS0FBSyxZQUFZLFFBQVE7QUFDekQsVUFBUSxJQUFJLGNBQWMsa0JBQWtCO0FBQzVDLFFBQU0sWUFBWSxNQUFNLE9BQU8sR0FBRyxjQUFjO0FBQ2hELFVBQVEsSUFBSSxTQUFTLFVBQVUsY0FBYztBQUM3QyxNQUFJLFVBQVUsV0FBVyxHQUFHO0FBQzFCLFVBQU0sSUFBSSxNQUFNLHNCQUFzQixlQUFlO0FBQUEsRUFDdkQ7QUFDQSxRQUFNLG9CQUFvQixvQkFBSSxJQUF1QjtBQUVyRCxRQUFNLFFBQVE7QUFBQSxJQUNaLFVBQVUsSUFBSSxPQUFPLE1BQU07QUFDekIsWUFBTSxFQUFFLFNBQVMsUUFBUSxJQUFJLE1BQU0sUUFBUSxrQkFBQUEsUUFBSyxRQUFRLENBQUM7QUFFekQsVUFBSSxTQUFTO0FBQ1gsWUFBSSxDQUFDLFFBQVEsY0FBYztBQUN6QixrQkFBUTtBQUFBLFlBQ04sZUFBTTtBQUFBLGNBQ0osYUFBYTtBQUFBLFlBQ2Y7QUFBQSxVQUNGO0FBQ0E7QUFBQSxRQUNGO0FBQ0EsMEJBQWtCLElBQUksR0FBRztBQUFBLFVBQ3ZCLGFBQWEsUUFBUTtBQUFBLFVBQ3JCLFdBQVcsUUFBUTtBQUFBLFVBQ25CLE9BQU8sdUJBQXVCLENBQUM7QUFBQSxVQUMvQjtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0gsT0FBTztBQUNMLGdCQUFRLEtBQUssZUFBTSxPQUFPLHVCQUF1QixHQUFHLENBQUM7QUFBQSxNQUN2RDtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFFQSxTQUFPO0FBQ1Q7OztBTTVEQTtBQUFBLG9CQUFjO0FBRWQsU0FBUyxhQUFhLEtBQVUsT0FBMkI7QUFDekQsTUFBSSxZQUEyQjtBQUMvQixnQkFBQUMsUUFBRSxPQUFPLEtBQUssQ0FBQyxHQUFHLE1BQU07QUFDdEIsUUFBSSxjQUFBQSxRQUFFLFNBQVMsQ0FBQyxLQUFLLGNBQUFBLFFBQUUsUUFBUSxHQUFHLEtBQUssR0FBRztBQUN4QyxrQkFBWTtBQUVaLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRixDQUFDO0FBQ0QsU0FBTztBQUNUO0FBRU8sU0FBUyxzQkFBc0IsTUFBVyxNQUFnQjtBQUMvRCxTQUFPLGNBQUFBLFFBQUUsVUFBVSxNQUFNLENBQUMsUUFBUSxPQUFPLFFBQVE7QUFDL0MsUUFBSSxjQUFBQSxRQUFFLFNBQVMsS0FBSyxHQUFHO0FBQ3JCLFlBQU0sY0FBYyxhQUFhLE1BQU0sS0FBSztBQUM1QyxVQUFJLGFBQWE7QUFDZixlQUFPLE9BQU87QUFBQSxVQUNaLE1BQU0sd0JBQXdCO0FBQUEsUUFDaEM7QUFBQSxNQUNGLE9BQU87QUFDTCxlQUFPLE9BQU8sc0JBQXNCLE9BQU8sSUFBSTtBQUFBLE1BQ2pEO0FBQUEsSUFDRixPQUFPO0FBQ0wsYUFBTyxPQUFPO0FBQUEsSUFDaEI7QUFBQSxFQUNGLENBQUM7QUFDSDs7O0FDN0JBO0FBRUEsU0FBUyxpQ0FBaUNDLE9BQWM7QUFDdEQsUUFBTSxRQUFRQSxNQUFLLE1BQU0sR0FBRyxFQUFFLE9BQU8sQ0FBQyxTQUFTLFNBQVMsRUFBRTtBQUMxRCxRQUFNLFdBQVcsTUFBTSxNQUFNLFNBQVM7QUFDdEMsTUFBSSxTQUFTLFdBQVcsR0FBRyxLQUFLLFNBQVMsU0FBUyxHQUFHLEdBQUc7QUFFdEQsVUFBTSxRQUFRLFNBQVMsTUFBTSxHQUFHLEVBQUU7QUFDbEMsV0FBTyxNQUFNO0FBQUEsRUFDZjtBQUVBLFNBQU87QUFDVDtBQUdBLFNBQVMsZ0NBQWdDQSxPQUFjO0FBQ3JELFFBQU0sUUFBUUEsTUFBSyxNQUFNLEdBQUcsRUFBRSxPQUFPLENBQUMsU0FBUyxTQUFTLEVBQUU7QUFDMUQsU0FBTyxNQUFNLE1BQU0sR0FBRyxNQUFNLFNBQVMsQ0FBQztBQUN4QztBQUVBLFNBQVMsbUJBQW1CQSxPQU90QjtBQUNKLE1BQUlBLE1BQUssTUFBTSxHQUFHLEVBQUUsT0FBTyxDQUFDLFNBQVMsU0FBUyxFQUFFLEVBQUUsV0FBVyxHQUFHO0FBQzlELFdBQU87QUFBQSxNQUNMLGlCQUFpQjtBQUFBLElBQ25CO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFBQSxJQUNMLHlCQUF5QixnQ0FBZ0NBLEtBQUk7QUFBQSxJQUM3RCwwQkFBMEIsaUNBQWlDQSxLQUFJO0FBQUEsRUFDakU7QUFDRjtBQUVPLFNBQVMsNEJBQ2QsU0FDQUEsT0FDQTtBQUNBLFFBQU0sa0JBQWtCLG1CQUFtQkEsS0FBSTtBQUMvQyxNQUFJLFFBQVEsV0FBVyxHQUFHO0FBQ3hCLFdBQU87QUFBQSxNQUNMLENBQUMsUUFBUSxLQUFLO0FBQUEsSUFDaEI7QUFBQSxFQUNGO0FBRUEsUUFBTSxnQkFBZ0IsQ0FBQztBQUN2QixRQUFNLHlCQUF5QixRQUFRLFNBQVMsTUFBTTtBQUV0RCxNQUFJLENBQUMsd0JBQXdCO0FBQzNCLFVBQU0sSUFBSTtBQUFBLE1BQ1I7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFVBQVEsUUFBUSxDQUFDLFdBQVc7QUFDMUIsUUFBSSxXQUFXLFFBQVE7QUFDckIsb0JBQWMsVUFBVTtBQUFBLElBQzFCLE9BQU87QUFDTCxvQkFBYyxVQUFVO0FBQUEsUUFDdEIsaUJBQWlCO0FBQUEsTUFDbkI7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDO0FBRUQsU0FBTztBQUNUOzs7QVp6REEsU0FBUyw0QkFBNEIsS0FBYTtBQUNoRCxNQUFJLElBQUksV0FBVyxHQUFHO0FBQ3BCLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxZQUFZLElBQUksT0FBTyxDQUFDLEVBQUUsWUFBWTtBQUM1QyxTQUFPLFlBQVksSUFBSSxNQUFNLENBQUM7QUFDaEM7QUFFQSxTQUFTLDJCQUEyQkMsT0FBc0I7QUFDeEQsUUFBTSxRQUFRQSxNQUNYLFFBQVEsTUFBTSxHQUFHLEVBQ2pCLE1BQU0sR0FBRyxFQUNULE9BQU8sQ0FBQyxTQUFTLFNBQVMsRUFBRTtBQUMvQixRQUFNLG1CQUFtQixNQUFNLElBQUksQ0FBQyxTQUFTO0FBQzNDLFFBQUksS0FBSyxXQUFXLEdBQUcsS0FBSyxLQUFLLFNBQVMsR0FBRyxHQUFHO0FBRTlDLFlBQU0sY0FBYyxLQUFLLE1BQU0sR0FBRyxFQUFFO0FBQ3BDLFlBQU0sUUFBUSxZQUFZLE1BQU0sR0FBRztBQUNuQyxZQUFNLG1CQUFtQixNQUFNO0FBQUEsUUFDN0IsQ0FBQyxTQUFTLEtBQUssT0FBTyxDQUFDLEVBQUUsWUFBWSxJQUFJLEtBQUssTUFBTSxDQUFDO0FBQUEsTUFDdkQ7QUFDQSxhQUFPLEtBQUssaUJBQWlCLEtBQUssRUFBRTtBQUFBLElBQ3RDLE9BQU87QUFFTCxZQUFNLFFBQVEsS0FBSyxNQUFNLEdBQUc7QUFDNUIsWUFBTSxtQkFBbUIsTUFBTTtBQUFBLFFBQzdCLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQyxFQUFFLFlBQVksSUFBSSxLQUFLLE1BQU0sQ0FBQztBQUFBLE1BQ3ZEO0FBQ0EsYUFBTyxpQkFBaUIsS0FBSyxFQUFFO0FBQUEsSUFDakM7QUFBQSxFQUNGLENBQUM7QUFFRCxTQUFPLDRCQUE0QixpQkFBaUIsS0FBSyxFQUFFLENBQUM7QUFDOUQ7QUFFQSxTQUFTLFdBQVcsT0FBdUI7QUFDekMsUUFBTSxRQUFRLE1BQU0sTUFBTSxHQUFHO0FBQzdCLFFBQU0sbUJBQW1CLE1BQU07QUFBQSxJQUM3QixDQUFDLFNBQVMsS0FBSyxPQUFPLENBQUMsRUFBRSxZQUFZLElBQUksS0FBSyxNQUFNLENBQUMsRUFBRSxZQUFZO0FBQUEsRUFDckU7QUFDQSxRQUFNLG1CQUFtQixpQkFBaUIsS0FBSyxFQUFFO0FBQ2pELFNBQU87QUFDVDtBQXVCQSxlQUFzQixnQkFBZ0IsTUFBMkI7QUFoRmpFO0FBaUZFLFFBQU0sRUFBRSxZQUFZLE9BQU8sQ0FBQyxFQUFFLElBQUk7QUFFbEMsUUFBTSxvQkFBb0IsTUFBTSxxQkFBcUIsSUFBSTtBQUd6RCxRQUFNLEVBQUUsYUFBYSxrQkFBa0IsSUFBSSxrQkFBa0IsT0FBTyxFQUFFLEtBQUssRUFDeEU7QUFFSCxRQUFNLG1CQUFrQix1QkFBa0Isb0JBQWxCLFlBQXFDLENBQUM7QUFDOUQsUUFBTSw2QkFBNkIsQ0FBQztBQUNwQyxhQUFXLFlBQVksT0FBTyxLQUFLLGtCQUFrQixpQkFBaUIsR0FBRztBQUN2RSxVQUFNLEtBQUssa0JBQWtCLGtCQUFrQjtBQUMvQyxRQUFJLEdBQUcsZ0JBQWdCO0FBQ3JCLHNCQUFnQixZQUFhLEdBQVc7QUFBQSxJQUMxQyxPQUFPO0FBQ0wsY0FBUTtBQUFBLFFBQ04sZUFBTTtBQUFBLFVBQ0osOEJBQThCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBQ2hDO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSwrQkFBMkIsWUFBYSxHQUFXLG1CQUFtQjtBQUFBLE1BQ3BFO0FBQUEsUUFDRSxDQUFDLFdBQVcsQ0FBQztBQUFBLE1BQ2Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFFBQU0sZ0JBQWdCLENBQUM7QUFDdkIsYUFBVyxDQUFDLFlBQVksU0FBUyxLQUFLLE9BQU87QUFBQSxLQUMzQyx1QkFBa0Isa0JBQWxCLFlBQW1DLENBQUM7QUFBQSxFQUN0QyxHQUFHO0FBQ0Qsa0JBQWMsa0JBQWMsbUNBQWUsU0FBUztBQUFBLEVBQ3REO0FBR0EsUUFBTSxVQUFVLDRCQUFlLE9BQU87QUFBQSxJQUNwQyxTQUFTO0FBQUEsSUFDVCxNQUFNO0FBQUEsTUFDSixPQUFPLGtCQUFrQjtBQUFBLE1BQ3pCLFNBQVM7QUFBQSxJQUNYO0FBQUEsSUFDQSxTQUFTO0FBQUEsTUFDUDtBQUFBLFFBQ0UsS0FBSyxrQkFBa0IsdUJBQXVCO0FBQUEsTUFDaEQ7QUFBQSxJQUNGO0FBQUEsSUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLElBQUksTUFBTSxhQUFhLElBQUksWUFBWSxFQUFFO0FBQUEsSUFDMUUsT0FBTyxDQUFDO0FBQUEsSUFDUixZQUFZO0FBQUEsTUFDVjtBQUFBLE1BQ0EsU0FBUztBQUFBLElBQ1g7QUFBQSxFQUNGLENBQUM7QUFFRCxhQUFXO0FBQUEsSUFDVDtBQUFBLElBQ0EsRUFBRSxhQUFhLFdBQVcsT0FBTyxVQUFVO0FBQUEsRUFDN0MsS0FBSyxtQkFBbUI7QUFDdEIsVUFBTSxxQkFBcUIsQ0FBQyxRQUFRLE9BQU8sT0FBTyxFQUFFO0FBQUEsTUFBSyxDQUFDLFdBQ3hELFVBQVUsUUFBUSxTQUFTLE1BQU07QUFBQSxJQUNuQztBQUlBLFFBQUk7QUFDSixRQUFJLG9CQUFvQjtBQUN0QixpQ0FBMEIsZUFBVSxhQUFWLFlBQXNCLFVBQVU7QUFFMUQsVUFBSSxVQUFVLFlBQVksVUFBVSxjQUFjO0FBQ2hELGtDQUEwQixVQUFVLFNBQVM7QUFBQSxVQUMzQyxVQUFVO0FBQUEsUUFDWjtBQUFBLE1BQ0Y7QUFBQSxJQUNGLE9BQU87QUFDTCxnQ0FBMEIsVUFBVTtBQUFBLElBQ3RDO0FBR0EsUUFBSTtBQUNKLFFBQUksb0JBQW9CO0FBQ3RCLGlDQUEyQixVQUFVO0FBQUEsSUFDdkMsT0FBTztBQUNMLGtDQUEyQixlQUFVLGdCQUFWLFlBQXlCLFVBQVU7QUFFOUQsVUFBSSxVQUFVLGVBQWUsVUFBVSxjQUFjO0FBQ25ELG1DQUEyQixVQUFVLFlBQVk7QUFBQSxVQUMvQyxVQUFVO0FBQUEsUUFDWjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBR0EsUUFBSSxVQUFVLFVBQVU7QUFFeEIsUUFBSSxVQUFVLFFBQVEsU0FBUyxRQUFRLEtBQUsseUJBQXlCO0FBQ25FLGdCQUFVLFFBQVEsT0FBTyxDQUFDLE1BQU0sTUFBTSxRQUFRO0FBQUEsSUFDaEQ7QUFFQSxRQUFJLFVBQVUsUUFBUSxTQUFTLEtBQUssS0FBSyx5QkFBeUI7QUFDaEUsZ0JBQVUsUUFBUSxPQUFPLENBQUMsTUFBTSxNQUFNLEtBQUs7QUFBQSxJQUM3QztBQUVBLFFBQUksUUFBUSxXQUFXLEdBQUc7QUFDeEIsY0FBUTtBQUFBLFFBQ04sZUFBTSxPQUFPLGtCQUFrQixzQ0FBc0M7QUFBQSxNQUN2RTtBQUNBO0FBQUEsSUFDRjtBQUVBLFVBQU0sUUFBeUI7QUFBQSxNQUM3QixTQUFTO0FBQUEsTUFDVCxXQUFXO0FBQUEsUUFDVCxLQUFLO0FBQUEsVUFDSCxhQUFhO0FBQUEsUUFDZjtBQUFBLFFBQ0EsS0FBSztBQUFBLFVBQ0gsYUFBYTtBQUFBLFFBQ2Y7QUFBQSxRQUNBLEtBQUs7QUFBQSxVQUNILGFBQWE7QUFBQSxRQUNmO0FBQUEsTUFDRjtBQUFBLE1BQ0EsVUFBVSwyQkFBMkIsVUFBVTtBQUFBLElBQ2pEO0FBRUEsUUFBSSx5QkFBeUI7QUFDM0IsWUFBTSxjQUFjO0FBQUEsUUFDbEIsU0FBUztBQUFBLFVBQ1Asb0JBQW9CO0FBQUEsWUFDbEIsWUFBUSxtQ0FBZSx1QkFBOEI7QUFBQSxVQUN2RDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLFFBQUksMEJBQTBCO0FBQzVCLFlBQU0sYUFBUyxtQ0FBZSx3QkFBK0I7QUFDN0QsVUFBSSxPQUFPLFlBQVk7QUFDckIsY0FBTSxhQUFnQyxPQUFPO0FBQUEsVUFDM0MsT0FBTztBQUFBLFFBQ1QsRUFBRSxJQUFJLENBQUMsU0FBUztBQS9OeEIsY0FBQUM7QUFnT1UsaUJBQU87QUFBQSxZQUNMO0FBQUEsWUFDQSxJQUFJO0FBQUEsWUFDSixRQUFRLE9BQU8sV0FBWTtBQUFBLFlBQzNCLFdBQVVBLE1BQUEsT0FBTyxhQUFQLGdCQUFBQSxJQUFpQixTQUFTO0FBQUEsVUFDdEM7QUFBQSxRQUNGLENBQUM7QUFFRCxjQUFNLGFBQWE7QUFBQSxNQUNyQjtBQUFBLElBQ0Y7QUFFQSxVQUFNLEVBQUUsYUFBYSxJQUFJO0FBQ3pCLFVBQU0sRUFBRSxjQUFjLEtBQUssSUFBSTtBQUUvQixRQUFJLGNBQWM7QUFDaEIsVUFDRSxDQUFDLGFBQWEsUUFDZCxDQUFDLGFBQWEsS0FBSyxZQUNuQixhQUFhLEtBQUssYUFBYSxhQUMvQjtBQUNBLGdCQUFRO0FBQUEsVUFDTixlQUFNO0FBQUEsWUFDSixrQkFBa0I7QUFBQSxVQUNwQjtBQUFBLFFBQ0Y7QUFDQTtBQUFBLE1BQ0Y7QUFFQSxZQUFNLHFCQUFpQjtBQUFBLFFBQ3JCLGNBQWMsYUFBYSxPQUFPLEVBQUUsSUFBSSxhQUFFLFFBQVEsRUFBRSxDQUFDLElBQUk7QUFBQSxNQUMzRDtBQUVBLFlBQU0sdUJBQXVCO0FBQUEsUUFDM0I7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUVBLFlBQU0sVUFBVSxLQUFLLFVBQVU7QUFBQSxRQUM3QixvQkFBb0I7QUFBQSxVQUNsQixRQUFRO0FBQUEsUUFDVjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsVUFBTSxPQUFPLENBQUM7QUFDZCxlQUFXLE9BQU8sTUFBTTtBQUN0QixVQUFJLElBQUksb0JBQW9CLElBQUksaUJBQWlCLE1BQU0sV0FBVyxFQUFFLEdBQUc7QUFDckUsY0FBTSxLQUFLLEtBQUssSUFBSSxJQUFJO0FBQUEsTUFDMUI7QUFBQSxJQUNGO0FBRUEsVUFBTSxpQ0FBaUM7QUFBQSxNQUNyQztBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBR0EsWUFBUSxRQUFRLFdBQVc7QUFBQSxNQUN6QixHQUFHLFFBQ0EsSUFBSSxDQUFDLFlBQVk7QUFBQSxRQUNoQixDQUFDLE9BQU8sWUFBWSxJQUFJO0FBQUEsVUFDdEIsR0FBRywrQkFBK0I7QUFBQSxVQUNsQyxHQUFHO0FBQUEsVUFDSCxhQUFhLEdBQUcsMkJBQTJCLFNBQVMsSUFBSTtBQUFBLFlBQ3REO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGLEVBQUUsRUFDRCxZQUFZLENBQUMsS0FBSyxTQUFTLEVBQUUsR0FBRyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUFBLElBQ3ZELENBQUM7QUFBQSxFQUNIO0FBRUEsTUFBSSxZQUFZO0FBQ2QsVUFBTSxnQkFBQUMsUUFBRyxVQUFVLFlBQVksUUFBUSxjQUFjLENBQUM7QUFBQSxFQUN4RDtBQUVBLFNBQU8sUUFBUSxjQUFjO0FBQy9COzs7QWE5U0E7QUFBQSxJQUFBQyxNQUFvQjtBQUVwQix1QkFBbUM7QUFDbkMsc0JBQXFCO0FBQ3JCLElBQUFDLGNBQTJDO0FBY3BDLElBQU0scUJBQXFCLE9BQU8sU0FBaUM7QUFsQjFFO0FBbUJFLFFBQU0sa0JBQWtCLE1BQU0scUJBQXFCLElBQUk7QUFFdkQsUUFBTSxlQUFlLE1BQU0sS0FBSyxnQkFBZ0IsUUFBUSxDQUFDLEVBQUU7QUFBQSxJQUFLLENBQUMsR0FBRyxNQUNsRSxFQUFFLEdBQUcsTUFBTSxjQUFjLEVBQUUsR0FBRyxLQUFLO0FBQUEsRUFDckM7QUFDQSxRQUFNLGlCQUFpQixhQUFhO0FBQUEsSUFDbEMsQ0FBQyxDQUFDQyxJQUFHLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLGdCQUFnQixLQUFLLGFBQWEsS0FBSztBQUFBLEVBQ25FO0FBR0EsUUFBTSxZQUFzQixDQUFDO0FBQzdCLGFBQVcsQ0FBQ0EsSUFBRyxFQUFFLE9BQU8sV0FBVyxZQUFZLENBQUMsS0FBSyxnQkFBZ0I7QUFDbkUsVUFBTSxZQUFZLE9BQU8sTUFBSyxxQkFBVSxnQkFBVixtQkFBdUIsVUFBdkIsWUFBZ0MsQ0FBQyxDQUFDO0FBQ2hFLFVBQU0saUJBQWlCLFVBQVUsT0FBTyxDQUFDLFFBQVEsTUFBTSxTQUFTLElBQUksTUFBTSxDQUFDO0FBRzNFLFFBQUksY0FBYyxVQUFVO0FBQzVCLFdBQ0UsZ0JBQ0MsZ0JBQWdCLGVBQWUsWUFBWSxjQUM1QztBQUNBLFVBQUksZ0JBQWdCLGFBQWE7QUFDL0Isc0JBQWUsWUFBMkMsV0FBVztBQUFBLE1BQ3ZFLFdBQVcsWUFBWSxhQUFhO0FBQ2xDLHNCQUFlLFlBQTRDLE9BQU87QUFBQSxNQUNwRTtBQUFBLElBQ0Y7QUFFQSxVQUFNLHlDQUF5QywyQ0FBYTtBQUFBLE1BQzFELE9BQU8sWUFBWSxlQUFlLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQztBQUFBO0FBR2pFLGNBQVU7QUFBQSxNQUNSO0FBQUEsR0FDSDtBQUFBLFlBQ1M7QUFBQSxZQUNBLFVBQVUsUUFBUSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUs7QUFBQSxpQkFFekQsNkNBQ0ksZ0NBQVUsMEJBQVEsc0NBQXNDLEVBQUUsSUFBSSxJQUM5RDtBQUFBLGNBR0osVUFBVSxlQUFXLGdDQUFVLDBCQUFRLFVBQVUsUUFBUSxFQUFFLElBQUksSUFBSTtBQUFBLGtCQUduRSxVQUFVLG1CQUNOLGdDQUFVLDBCQUFRLFVBQVUsWUFBWSxFQUFFLElBQUksSUFDOUM7QUFBQSxjQUdKLFVBQVUsZUFBVyxnQ0FBVSwwQkFBUSxVQUFVLFFBQVEsRUFBRSxJQUFJLElBQUk7QUFBQSxrQkFHbkUsVUFBVSxtQkFDTjtBQUFBLFlBQ0U7QUFBQSxVQUNFLFlBQVksY0FDUixVQUFVLGFBQWEsT0FBTyxFQUFFLElBQUksY0FBRSxRQUFRLEVBQUUsQ0FBQyxJQUNqRCxVQUFVO0FBQUEsUUFDaEIsRUFBRTtBQUFBLE1BQ0osSUFDQTtBQUFBLEdBRUwsS0FBSztBQUFBLElBQ0o7QUFBQSxFQUNGO0FBQ0EsUUFBTSxjQUFjLFVBQVUsS0FBSyxLQUFLO0FBQ3hDLFFBQU0sU0FBUyxNQUFNLGdCQUFBQyxRQUFTO0FBQUEsSUFDNUI7QUFBQSxFQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVdBLEtBQUs7QUFBQSxJQUNILEVBQUUsTUFBTSxPQUFPLFFBQVEsYUFBYTtBQUFBLEVBQ3RDO0FBRUEsTUFBSSxLQUFLLFlBQVk7QUFDbkIsVUFBUyxjQUFVLEtBQUssWUFBWSxNQUFNO0FBQUEsRUFDNUM7QUFFQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbImdlbmVyYXRlU2NoZW1hIiwgIm1vZHVsZSIsICJtZXJnZTIiLCAib3MiLCAicGF0aCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJzbGFzaCIsICJnbG9iYnkiLCAibm9kZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtYXgiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJpbmRleCIsICJtb2R1bGUiLCAicmVxdWlyZV9jb25zdGFudHMiLCAibW9kdWxlIiwgInBhdGgiLCAicmVxdWlyZV91dGlscyIsICJwYXRoIiwgIm1vZHVsZSIsICJyZXF1aXJlX3BhcnNlIiwgIm1vZHVsZSIsICJvcHRzIiwgInZhbHVlIiwgInJlc3QiLCAic291cmNlIiwgIm1vZHVsZSIsICJwYXRoIiwgInN0YXRlIiwgInJlcXVpcmVfcGljb21hdGNoIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAicGF0aCIsICJpc0R5bmFtaWNQYXR0ZXJuIiwgImlzTmVnYXRpdmVQYXR0ZXJuIiwgInBhdHRlcm4iLCAibWVyZ2UyIiwgInJlcXVpcmVfdXRpbHMiLCAiZnMiLCAicGF0aCIsICJwYXRoIiwgInBhdGgiLCAicmVxdWlyZV9mcyIsICJmcyIsICJmcyIsICJwYXRoIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAicXVldWVNaWNyb3Rhc2siLCAicmVxdWlyZV9jb25zdGFudHMiLCAicmVxdWlyZV9mcyIsICJyZXF1aXJlX3V0aWxzIiwgImZzIiwgInJlcXVpcmVfYXN5bmMiLCAicGF0aCIsICJyZXF1aXJlX3N5bmMiLCAicmVxdWlyZV9mcyIsICJmcyIsICJyZXF1aXJlX3NldHRpbmdzIiwgInBhdGgiLCAiZnMiLCAicmVxdWlyZV9vdXQiLCAicGF0aCIsICJtb2R1bGUiLCAibW9kdWxlIiwgInJlcXVpcmVfY29tbW9uIiwgInJlcXVpcmVfYXN5bmMiLCAicmVxdWlyZV9hc3luYyIsICJyZXF1aXJlX3N0cmVhbSIsICJyZXF1aXJlX3N5bmMiLCAicmVxdWlyZV9zeW5jIiwgInJlcXVpcmVfc2V0dGluZ3MiLCAicGF0aCIsICJyZXF1aXJlX291dCIsICJyZXF1aXJlX3JlYWRlciIsICJwYXRoIiwgInJlcXVpcmVfc3RyZWFtIiwgInJlcXVpcmVfYXN5bmMiLCAicmVxdWlyZV9lbnRyeSIsICJwYXRoIiwgInJlcXVpcmVfYXN5bmMiLCAicmVxdWlyZV9zdHJlYW0iLCAicmVxdWlyZV9zeW5jIiwgInJlcXVpcmVfc3luYyIsICJyZXF1aXJlX3NldHRpbmdzIiwgImZzIiwgIm9zIiwgInJlcXVpcmVfb3V0IiwgIm1vZHVsZSIsICJhc3NlcnRQYXR0ZXJuc0lucHV0IiwgIkZhc3RHbG9iIiwgImdlbmVyYXRlVGFza3MiLCAiaXNEeW5hbWljUGF0dGVybiIsICJwb3NpeCIsICJlc2NhcGVQYXRoIiwgImNvbnZlcnRQYXRoVG9QYXR0ZXJuIiwgIndpbjMyIiwgImZzIiwgIm1vZHVsZSIsICJwYXRoIiwgIm1vZHVsZSIsICJfIiwgInBhdGgiLCAicHJvY2VzcyIsICJvcyIsICJ0dHkiLCAic3R5bGVzIiwgImNoYWxrIiwgInN0eWxlcyIsICJpbXBvcnRfbm9kZV9wYXRoIiwgImltcG9ydF9ub2RlX2ZzIiwgImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X2Zhc3RfZ2xvYiIsICJpbXBvcnRfbm9kZV9wcm9jZXNzIiwgInBhdGgiLCAicGF0aCIsICJnaXRJZ25vcmUiLCAicHJvY2VzcyIsICJmYXN0R2xvYiIsICJmcyIsICJmcyIsICJub3JtYWxpemVPcHRpb25zIiwgInBhdGgiLCAibm9kZVBhdGgiLCAibWVyZ2UyIiwgInBhdHRlcm5zIiwgIm9wdGlvbnMiLCAiZGlyR2xvYiIsICJmYXN0R2xvYiIsICJwYXRoIiwgInBhdGgiLCAiXyIsICJwYXRoIiwgInBhdGgiLCAiX2EiLCAiZnMiLCAiZnMiLCAiaW1wb3J0X3pvZCIsICJfIiwgInByZXR0aWVyIl0KfQo=
7458
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzdXAvYXNzZXRzL2Nqc19zaGltcy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtZGVlcG1lcmdlL2Nqcy9pbmRleC5qcyIsICIuLi8uLi8uLi96b2Qtb3BlbmFwaS9zcmMvbGliL3pvZC1vcGVuYXBpLnRzIiwgIi4uLy4uLy4uL3pvZC1vcGVuYXBpL3NyYy9saWIvem9kLWV4dGVuc2lvbnMudHMiLCAiLi4vLi4vLi4vem9kLW9wZW5hcGkvc3JjL2luZGV4LnRzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tZXJnZTIvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvdXRpbHMvYXJyYXkuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvdXRpbHMvZXJybm8uanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvdXRpbHMvZnMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvdXRpbHMvcGF0aC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvaXMtZXh0Z2xvYi9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvaXMtZ2xvYi9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL25vZGVfbW9kdWxlcy9nbG9iLXBhcmVudC9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYnJhY2VzL2xpYi91dGlscy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYnJhY2VzL2xpYi9zdHJpbmdpZnkuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2lzLW51bWJlci9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdG8tcmVnZXgtcmFuZ2UvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZpbGwtcmFuZ2UvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JyYWNlcy9saWIvY29tcGlsZS5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYnJhY2VzL2xpYi9leHBhbmQuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JyYWNlcy9saWIvY29uc3RhbnRzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9icmFjZXMvbGliL3BhcnNlLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9icmFjZXMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3BpY29tYXRjaC9saWIvY29uc3RhbnRzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9waWNvbWF0Y2gvbGliL3V0aWxzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9waWNvbWF0Y2gvbGliL3NjYW4uanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3BpY29tYXRjaC9saWIvcGFyc2UuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3BpY29tYXRjaC9saWIvcGljb21hdGNoLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9waWNvbWF0Y2gvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWF0Y2gvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvdXRpbHMvcGF0dGVybi5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC91dGlscy9zdHJlYW0uanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvdXRpbHMvc3RyaW5nLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L3V0aWxzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L21hbmFnZXJzL3Rhc2tzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy5zdGF0L291dC9wcm92aWRlcnMvYXN5bmMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLnN0YXQvb3V0L3Byb3ZpZGVycy9zeW5jLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy5zdGF0L291dC9hZGFwdGVycy9mcy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMuc3RhdC9vdXQvc2V0dGluZ3MuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLnN0YXQvb3V0L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9xdWV1ZS1taWNyb3Rhc2svaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3J1bi1wYXJhbGxlbC9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMuc2NhbmRpci9vdXQvY29uc3RhbnRzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy5zY2FuZGlyL291dC91dGlscy9mcy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMuc2NhbmRpci9vdXQvdXRpbHMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLnNjYW5kaXIvb3V0L3Byb3ZpZGVycy9jb21tb24uanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLnNjYW5kaXIvb3V0L3Byb3ZpZGVycy9hc3luYy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMuc2NhbmRpci9vdXQvcHJvdmlkZXJzL3N5bmMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLnNjYW5kaXIvb3V0L2FkYXB0ZXJzL2ZzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy5zY2FuZGlyL291dC9zZXR0aW5ncy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMuc2NhbmRpci9vdXQvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JldXNpZnkvcmV1c2lmeS5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZmFzdHEvcXVldWUuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLndhbGsvb3V0L3JlYWRlcnMvY29tbW9uLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy53YWxrL291dC9yZWFkZXJzL3JlYWRlci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMud2Fsay9vdXQvcmVhZGVycy9hc3luYy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMud2Fsay9vdXQvcHJvdmlkZXJzL2FzeW5jLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy53YWxrL291dC9wcm92aWRlcnMvc3RyZWFtLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy53YWxrL291dC9yZWFkZXJzL3N5bmMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLndhbGsvb3V0L3Byb3ZpZGVycy9zeW5jLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy53YWxrL291dC9zZXR0aW5ncy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMud2Fsay9vdXQvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvcmVhZGVycy9yZWFkZXIuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvcmVhZGVycy9zdHJlYW0uanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvcmVhZGVycy9hc3luYy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9wcm92aWRlcnMvbWF0Y2hlcnMvbWF0Y2hlci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9wcm92aWRlcnMvbWF0Y2hlcnMvcGFydGlhbC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9wcm92aWRlcnMvZmlsdGVycy9kZWVwLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L3Byb3ZpZGVycy9maWx0ZXJzL2VudHJ5LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L3Byb3ZpZGVycy9maWx0ZXJzL2Vycm9yLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L3Byb3ZpZGVycy90cmFuc2Zvcm1lcnMvZW50cnkuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvcHJvdmlkZXJzL3Byb3ZpZGVyLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L3Byb3ZpZGVycy9hc3luYy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9wcm92aWRlcnMvc3RyZWFtLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L3JlYWRlcnMvc3luYy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9wcm92aWRlcnMvc3luYy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9zZXR0aW5ncy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcGF0aC10eXBlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kaXItZ2xvYi9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvaWdub3JlL2luZGV4LmpzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL2luZGV4LnRzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL2dlbmVyYXRlLW9wZW5hcGkvaW5kZXgudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2NoYWxrL3NvdXJjZS9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvY2hhbGsvc291cmNlL3ZlbmRvci9hbnNpLXN0eWxlcy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvY2hhbGsvc291cmNlL3ZlbmRvci9zdXBwb3J0cy1jb2xvci9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvY2hhbGsvc291cmNlL3V0aWxpdGllcy5qcyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9saWIvcGFyc2Utcm91dGVzLWluLXBhY2thZ2UudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2dsb2JieS9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvZ2xvYmJ5L2lnbm9yZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc2xhc2gvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2dsb2JieS91dGlsaXRpZXMuanMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvbGliL2RlZmF1bHQtbWFwLWZpbGUtcGF0aC10by1odHRwLXJvdXRlLnRzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL2dlbmVyYXRlLW9wZW5hcGkvZW1iZWQtc2NoZW1hLXJlZmVyZW5jZXMudHMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvZ2VuZXJhdGUtb3BlbmFwaS9mZXJuLXNkay11dGlscy50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9nZW5lcmF0ZS1yb3V0ZS10eXBlcy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLy8gU2hpbSBnbG9iYWxzIGluIGNqcyBidW5kbGVcbi8vIFRoZXJlJ3MgYSB3ZWlyZCBidWcgdGhhdCBlc2J1aWxkIHdpbGwgYWx3YXlzIGluamVjdCBpbXBvcnRNZXRhVXJsXG4vLyBpZiB3ZSBleHBvcnQgaXQgYXMgYGNvbnN0IGltcG9ydE1ldGFVcmwgPSAuLi4gX19maWxlbmFtZSAuLi5gXG4vLyBCdXQgdXNpbmcgYSBmdW5jdGlvbiB3aWxsIG5vdCBjYXVzZSB0aGlzIGlzc3VlXG5cbmNvbnN0IGdldEltcG9ydE1ldGFVcmwgPSAoKSA9PlxuICB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnXG4gICAgPyBuZXcgVVJMKCdmaWxlOicgKyBfX2ZpbGVuYW1lKS5ocmVmXG4gICAgOiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdCAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYykgfHxcbiAgICAgIG5ldyBVUkwoJ21haW4uanMnLCBkb2N1bWVudC5iYXNlVVJJKS5ocmVmXG5cbmV4cG9ydCBjb25zdCBpbXBvcnRNZXRhVXJsID0gLyogQF9fUFVSRV9fICovIGdldEltcG9ydE1ldGFVcmwoKVxuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbmNvbnN0IGlzT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgIGlmICh0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiICYmIG9iaiAhPT0gbnVsbCkge1xuICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5nZXRQcm90b3R5cGVPZiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcbiAgICAgICAgICAgIHJldHVybiBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgcHJvdG90eXBlID09PSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIjtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbmNvbnN0IG1lcmdlID0gKC4uLm9iamVjdHMpID0+IG9iamVjdHMucmVkdWNlKChyZXN1bHQsIGN1cnJlbnQpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnRzIHByb3ZpZGVkIHRvIHRzLWRlZXBtZXJnZSBtdXN0IGJlIG9iamVjdHMsIG5vdCBhcnJheXMuXCIpO1xuICAgIH1cbiAgICBPYmplY3Qua2V5cyhjdXJyZW50KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKFtcIl9fcHJvdG9fX1wiLCBcImNvbnN0cnVjdG9yXCIsIFwicHJvdG90eXBlXCJdLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHRba2V5XSkgJiYgQXJyYXkuaXNBcnJheShjdXJyZW50W2tleV0pKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IG1lcmdlLm9wdGlvbnMubWVyZ2VBcnJheXNcbiAgICAgICAgICAgICAgICA/IG1lcmdlLm9wdGlvbnMudW5pcXVlQXJyYXlJdGVtc1xuICAgICAgICAgICAgICAgICAgICA/IEFycmF5LmZyb20obmV3IFNldChyZXN1bHRba2V5XS5jb25jYXQoY3VycmVudFtrZXldKSkpXG4gICAgICAgICAgICAgICAgICAgIDogWy4uLnJlc3VsdFtrZXldLCAuLi5jdXJyZW50W2tleV1dXG4gICAgICAgICAgICAgICAgOiBjdXJyZW50W2tleV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNPYmplY3QocmVzdWx0W2tleV0pICYmIGlzT2JqZWN0KGN1cnJlbnRba2V5XSkpIHtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2UocmVzdWx0W2tleV0sIGN1cnJlbnRba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9XG4gICAgICAgICAgICAgICAgY3VycmVudFtrZXldID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgPyBtZXJnZS5vcHRpb25zLmFsbG93VW5kZWZpbmVkT3ZlcnJpZGVzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGN1cnJlbnRba2V5XVxuICAgICAgICAgICAgICAgICAgICAgICAgOiByZXN1bHRba2V5XVxuICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnRba2V5XTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59LCB7fSk7XG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBhbGxvd1VuZGVmaW5lZE92ZXJyaWRlczogdHJ1ZSxcbiAgICBtZXJnZUFycmF5czogdHJ1ZSxcbiAgICB1bmlxdWVBcnJheUl0ZW1zOiB0cnVlLFxufTtcbm1lcmdlLm9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucztcbm1lcmdlLndpdGhPcHRpb25zID0gKG9wdGlvbnMsIC4uLm9iamVjdHMpID0+IHtcbiAgICBtZXJnZS5vcHRpb25zID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucyksIG9wdGlvbnMpO1xuICAgIGNvbnN0IHJlc3VsdCA9IG1lcmdlKC4uLm9iamVjdHMpO1xuICAgIG1lcmdlLm9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucztcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbmV4cG9ydHMuZGVmYXVsdCA9IG1lcmdlO1xuIiwgbnVsbCwgbnVsbCwgbnVsbCwgIid1c2Ugc3RyaWN0J1xuLypcbiAqIG1lcmdlMlxuICogaHR0cHM6Ly9naXRodWIuY29tL3RlYW1iaXRpb24vbWVyZ2UyXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMjAgVGVhbWJpdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICovXG5jb25zdCBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgUGFzc1Rocm91Z2ggPSBTdHJlYW0uUGFzc1Rocm91Z2hcbmNvbnN0IHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlXG5cbm1vZHVsZS5leHBvcnRzID0gbWVyZ2UyXG5cbmZ1bmN0aW9uIG1lcmdlMiAoKSB7XG4gIGNvbnN0IHN0cmVhbXNRdWV1ZSA9IFtdXG4gIGNvbnN0IGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cylcbiAgbGV0IG1lcmdpbmcgPSBmYWxzZVxuICBsZXQgb3B0aW9ucyA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXVxuXG4gIGlmIChvcHRpb25zICYmICFBcnJheS5pc0FycmF5KG9wdGlvbnMpICYmIG9wdGlvbnMucGlwZSA9PSBudWxsKSB7XG4gICAgYXJncy5wb3AoKVxuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMgPSB7fVxuICB9XG5cbiAgY29uc3QgZG9FbmQgPSBvcHRpb25zLmVuZCAhPT0gZmFsc2VcbiAgY29uc3QgZG9QaXBlRXJyb3IgPSBvcHRpb25zLnBpcGVFcnJvciA9PT0gdHJ1ZVxuICBpZiAob3B0aW9ucy5vYmplY3RNb2RlID09IG51bGwpIHtcbiAgICBvcHRpb25zLm9iamVjdE1vZGUgPSB0cnVlXG4gIH1cbiAgaWYgKG9wdGlvbnMuaGlnaFdhdGVyTWFyayA9PSBudWxsKSB7XG4gICAgb3B0aW9ucy5oaWdoV2F0ZXJNYXJrID0gNjQgKiAxMDI0XG4gIH1cbiAgY29uc3QgbWVyZ2VkU3RyZWFtID0gUGFzc1Rocm91Z2gob3B0aW9ucylcblxuICBmdW5jdGlvbiBhZGRTdHJlYW0gKCkge1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHN0cmVhbXNRdWV1ZS5wdXNoKHBhdXNlU3RyZWFtcyhhcmd1bWVudHNbaV0sIG9wdGlvbnMpKVxuICAgIH1cbiAgICBtZXJnZVN0cmVhbSgpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGZ1bmN0aW9uIG1lcmdlU3RyZWFtICgpIHtcbiAgICBpZiAobWVyZ2luZykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIG1lcmdpbmcgPSB0cnVlXG5cbiAgICBsZXQgc3RyZWFtcyA9IHN0cmVhbXNRdWV1ZS5zaGlmdCgpXG4gICAgaWYgKCFzdHJlYW1zKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVuZFN0cmVhbSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc3RyZWFtcykpIHtcbiAgICAgIHN0cmVhbXMgPSBbc3RyZWFtc11cbiAgICB9XG5cbiAgICBsZXQgcGlwZXNDb3VudCA9IHN0cmVhbXMubGVuZ3RoICsgMVxuXG4gICAgZnVuY3Rpb24gbmV4dCAoKSB7XG4gICAgICBpZiAoLS1waXBlc0NvdW50ID4gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIG1lcmdpbmcgPSBmYWxzZVxuICAgICAgbWVyZ2VTdHJlYW0oKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBpcGUgKHN0cmVhbSkge1xuICAgICAgZnVuY3Rpb24gb25lbmQgKCkge1xuICAgICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ21lcmdlMlVucGlwZUVuZCcsIG9uZW5kKVxuICAgICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKVxuICAgICAgICBpZiAoZG9QaXBlRXJyb3IpIHtcbiAgICAgICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcilcbiAgICAgICAgfVxuICAgICAgICBuZXh0KClcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIG9uZXJyb3IgKGVycikge1xuICAgICAgICBtZXJnZWRTdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgICB9XG4gICAgICAvLyBza2lwIGVuZGVkIHN0cmVhbVxuICAgICAgaWYgKHN0cmVhbS5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgICAgIHJldHVybiBuZXh0KClcbiAgICAgIH1cblxuICAgICAgc3RyZWFtLm9uKCdtZXJnZTJVbnBpcGVFbmQnLCBvbmVuZClcbiAgICAgIHN0cmVhbS5vbignZW5kJywgb25lbmQpXG5cbiAgICAgIGlmIChkb1BpcGVFcnJvcikge1xuICAgICAgICBzdHJlYW0ub24oJ2Vycm9yJywgb25lcnJvcilcbiAgICAgIH1cblxuICAgICAgc3RyZWFtLnBpcGUobWVyZ2VkU3RyZWFtLCB7IGVuZDogZmFsc2UgfSlcbiAgICAgIC8vIGNvbXBhdGlibGUgZm9yIG9sZCBzdHJlYW1cbiAgICAgIHN0cmVhbS5yZXN1bWUoKVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyZWFtcy5sZW5ndGg7IGkrKykge1xuICAgICAgcGlwZShzdHJlYW1zW2ldKVxuICAgIH1cblxuICAgIG5leHQoKVxuICB9XG5cbiAgZnVuY3Rpb24gZW5kU3RyZWFtICgpIHtcbiAgICBtZXJnaW5nID0gZmFsc2VcbiAgICAvLyBlbWl0ICdxdWV1ZURyYWluJyB3aGVuIGFsbCBzdHJlYW1zIG1lcmdlZC5cbiAgICBtZXJnZWRTdHJlYW0uZW1pdCgncXVldWVEcmFpbicpXG4gICAgaWYgKGRvRW5kKSB7XG4gICAgICBtZXJnZWRTdHJlYW0uZW5kKClcbiAgICB9XG4gIH1cblxuICBtZXJnZWRTdHJlYW0uc2V0TWF4TGlzdGVuZXJzKDApXG4gIG1lcmdlZFN0cmVhbS5hZGQgPSBhZGRTdHJlYW1cbiAgbWVyZ2VkU3RyZWFtLm9uKCd1bnBpcGUnLCBmdW5jdGlvbiAoc3RyZWFtKSB7XG4gICAgc3RyZWFtLmVtaXQoJ21lcmdlMlVucGlwZUVuZCcpXG4gIH0pXG5cbiAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgYWRkU3RyZWFtLmFwcGx5KG51bGwsIGFyZ3MpXG4gIH1cbiAgcmV0dXJuIG1lcmdlZFN0cmVhbVxufVxuXG4vLyBjaGVjayBhbmQgcGF1c2Ugc3RyZWFtcyBmb3IgcGlwZS5cbmZ1bmN0aW9uIHBhdXNlU3RyZWFtcyAoc3RyZWFtcywgb3B0aW9ucykge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoc3RyZWFtcykpIHtcbiAgICAvLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggb2xkLXN0eWxlIHN0cmVhbXNcbiAgICBpZiAoIXN0cmVhbXMuX3JlYWRhYmxlU3RhdGUgJiYgc3RyZWFtcy5waXBlKSB7XG4gICAgICBzdHJlYW1zID0gc3RyZWFtcy5waXBlKFBhc3NUaHJvdWdoKG9wdGlvbnMpKVxuICAgIH1cbiAgICBpZiAoIXN0cmVhbXMuX3JlYWRhYmxlU3RhdGUgfHwgIXN0cmVhbXMucGF1c2UgfHwgIXN0cmVhbXMucGlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IHJlYWRhYmxlIHN0cmVhbSBjYW4gYmUgbWVyZ2VkLicpXG4gICAgfVxuICAgIHN0cmVhbXMucGF1c2UoKVxuICB9IGVsc2Uge1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzdHJlYW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBzdHJlYW1zW2ldID0gcGF1c2VTdHJlYW1zKHN0cmVhbXNbaV0sIG9wdGlvbnMpXG4gICAgfVxuICB9XG4gIHJldHVybiBzdHJlYW1zXG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNwbGl0V2hlbiA9IGV4cG9ydHMuZmxhdHRlbiA9IHZvaWQgMDtcbmZ1bmN0aW9uIGZsYXR0ZW4oaXRlbXMpIHtcbiAgICByZXR1cm4gaXRlbXMucmVkdWNlKChjb2xsZWN0aW9uLCBpdGVtKSA9PiBbXS5jb25jYXQoY29sbGVjdGlvbiwgaXRlbSksIFtdKTtcbn1cbmV4cG9ydHMuZmxhdHRlbiA9IGZsYXR0ZW47XG5mdW5jdGlvbiBzcGxpdFdoZW4oaXRlbXMsIHByZWRpY2F0ZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtbXV07XG4gICAgbGV0IGdyb3VwSW5kZXggPSAwO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICBpZiAocHJlZGljYXRlKGl0ZW0pKSB7XG4gICAgICAgICAgICBncm91cEluZGV4Kys7XG4gICAgICAgICAgICByZXN1bHRbZ3JvdXBJbmRleF0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdFtncm91cEluZGV4XS5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLnNwbGl0V2hlbiA9IHNwbGl0V2hlbjtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNFbm9lbnRDb2RlRXJyb3IgPSB2b2lkIDA7XG5mdW5jdGlvbiBpc0Vub2VudENvZGVFcnJvcihlcnJvcikge1xuICAgIHJldHVybiBlcnJvci5jb2RlID09PSAnRU5PRU5UJztcbn1cbmV4cG9ydHMuaXNFbm9lbnRDb2RlRXJyb3IgPSBpc0Vub2VudENvZGVFcnJvcjtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlRGlyZW50RnJvbVN0YXRzID0gdm9pZCAwO1xuY2xhc3MgRGlyZW50RnJvbVN0YXRzIHtcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBzdGF0cykge1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLmlzQmxvY2tEZXZpY2UgPSBzdGF0cy5pc0Jsb2NrRGV2aWNlLmJpbmQoc3RhdHMpO1xuICAgICAgICB0aGlzLmlzQ2hhcmFjdGVyRGV2aWNlID0gc3RhdHMuaXNDaGFyYWN0ZXJEZXZpY2UuYmluZChzdGF0cyk7XG4gICAgICAgIHRoaXMuaXNEaXJlY3RvcnkgPSBzdGF0cy5pc0RpcmVjdG9yeS5iaW5kKHN0YXRzKTtcbiAgICAgICAgdGhpcy5pc0ZJRk8gPSBzdGF0cy5pc0ZJRk8uYmluZChzdGF0cyk7XG4gICAgICAgIHRoaXMuaXNGaWxlID0gc3RhdHMuaXNGaWxlLmJpbmQoc3RhdHMpO1xuICAgICAgICB0aGlzLmlzU29ja2V0ID0gc3RhdHMuaXNTb2NrZXQuYmluZChzdGF0cyk7XG4gICAgICAgIHRoaXMuaXNTeW1ib2xpY0xpbmsgPSBzdGF0cy5pc1N5bWJvbGljTGluay5iaW5kKHN0YXRzKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjcmVhdGVEaXJlbnRGcm9tU3RhdHMobmFtZSwgc3RhdHMpIHtcbiAgICByZXR1cm4gbmV3IERpcmVudEZyb21TdGF0cyhuYW1lLCBzdGF0cyk7XG59XG5leHBvcnRzLmNyZWF0ZURpcmVudEZyb21TdGF0cyA9IGNyZWF0ZURpcmVudEZyb21TdGF0cztcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29udmVydFBvc2l4UGF0aFRvUGF0dGVybiA9IGV4cG9ydHMuY29udmVydFdpbmRvd3NQYXRoVG9QYXR0ZXJuID0gZXhwb3J0cy5jb252ZXJ0UGF0aFRvUGF0dGVybiA9IGV4cG9ydHMuZXNjYXBlUG9zaXhQYXRoID0gZXhwb3J0cy5lc2NhcGVXaW5kb3dzUGF0aCA9IGV4cG9ydHMuZXNjYXBlID0gZXhwb3J0cy5yZW1vdmVMZWFkaW5nRG90U2VnbWVudCA9IGV4cG9ydHMubWFrZUFic29sdXRlID0gZXhwb3J0cy51bml4aWZ5ID0gdm9pZCAwO1xuY29uc3Qgb3MgPSByZXF1aXJlKFwib3NcIik7XG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XG5jb25zdCBJU19XSU5ET1dTX1BMQVRGT1JNID0gb3MucGxhdGZvcm0oKSA9PT0gJ3dpbjMyJztcbmNvbnN0IExFQURJTkdfRE9UX1NFR01FTlRfQ0hBUkFDVEVSU19DT1VOVCA9IDI7IC8vIC4vIG9yIC5cXFxcXG4vKipcbiAqIEFsbCBub24tZXNjYXBlZCBzcGVjaWFsIGNoYXJhY3RlcnMuXG4gKiBQb3NpeDogKCkqP1tcXF17fH0sICErQCBiZWZvcmUgKCwgISBhdCB0aGUgYmVnaW5uaW5nLCBcXFxcIGJlZm9yZSBub24tc3BlY2lhbCBjaGFyYWN0ZXJzLlxuICogV2luZG93czogKCl7fSwgIStAIGJlZm9yZSAoLCAhIGF0IHRoZSBiZWdpbm5pbmcuXG4gKi9cbmNvbnN0IFBPU0lYX1VORVNDQVBFRF9HTE9CX1NZTUJPTFNfUkUgPSAvKFxcXFw/KShbKCkqP1tcXF17fH1dfF4hfFshK0BdKD89XFwoKXxcXFxcKD8hWyEoKSorP0BbXFxde3x9XSkpL2c7XG5jb25zdCBXSU5ET1dTX1VORVNDQVBFRF9HTE9CX1NZTUJPTFNfUkUgPSAvKFxcXFw/KShbKCl7fV18XiF8WyErQF0oPz1cXCgpKS9nO1xuLyoqXG4gKiBUaGUgZGV2aWNlIHBhdGggKFxcXFwuXFwgb3IgXFxcXD9cXCkuXG4gKiBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZW4tdXMvZG90bmV0L3N0YW5kYXJkL2lvL2ZpbGUtcGF0aC1mb3JtYXRzI2Rvcy1kZXZpY2UtcGF0aHNcbiAqL1xuY29uc3QgRE9TX0RFVklDRV9QQVRIX1JFID0gL15cXFxcXFxcXChbLj9dKS87XG4vKipcbiAqIEFsbCBiYWNrc2xhc2hlcyBleGNlcHQgdGhvc2UgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzLlxuICogV2luZG93czogISgpK0B7fVxuICogaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL3dpbmRvd3Mvd2luMzIvZmlsZWlvL25hbWluZy1hLWZpbGUjbmFtaW5nLWNvbnZlbnRpb25zXG4gKi9cbmNvbnN0IFdJTkRPV1NfQkFDS1NMQVNIRVNfUkUgPSAvXFxcXCg/IVshKCkrQHt9XSkvZztcbi8qKlxuICogRGVzaWduZWQgdG8gd29yayBvbmx5IHdpdGggc2ltcGxlIHBhdGhzOiBgZGlyXFxcXGZpbGVgLlxuICovXG5mdW5jdGlvbiB1bml4aWZ5KGZpbGVwYXRoKSB7XG4gICAgcmV0dXJuIGZpbGVwYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbn1cbmV4cG9ydHMudW5peGlmeSA9IHVuaXhpZnk7XG5mdW5jdGlvbiBtYWtlQWJzb2x1dGUoY3dkLCBmaWxlcGF0aCkge1xuICAgIHJldHVybiBwYXRoLnJlc29sdmUoY3dkLCBmaWxlcGF0aCk7XG59XG5leHBvcnRzLm1ha2VBYnNvbHV0ZSA9IG1ha2VBYnNvbHV0ZTtcbmZ1bmN0aW9uIHJlbW92ZUxlYWRpbmdEb3RTZWdtZW50KGVudHJ5KSB7XG4gICAgLy8gV2UgZG8gbm90IHVzZSBgc3RhcnRzV2l0aGAgYmVjYXVzZSB0aGlzIGlzIDEweCBzbG93ZXIgdGhhbiBjdXJyZW50IGltcGxlbWVudGF0aW9uIGZvciBzb21lIGNhc2VzLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLXN0cmluZy1zdGFydHMtZW5kcy13aXRoXG4gICAgaWYgKGVudHJ5LmNoYXJBdCgwKSA9PT0gJy4nKSB7XG4gICAgICAgIGNvbnN0IHNlY29uZENoYXJhY3RlcnkgPSBlbnRyeS5jaGFyQXQoMSk7XG4gICAgICAgIGlmIChzZWNvbmRDaGFyYWN0ZXJ5ID09PSAnLycgfHwgc2Vjb25kQ2hhcmFjdGVyeSA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICByZXR1cm4gZW50cnkuc2xpY2UoTEVBRElOR19ET1RfU0VHTUVOVF9DSEFSQUNURVJTX0NPVU5UKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZW50cnk7XG59XG5leHBvcnRzLnJlbW92ZUxlYWRpbmdEb3RTZWdtZW50ID0gcmVtb3ZlTGVhZGluZ0RvdFNlZ21lbnQ7XG5leHBvcnRzLmVzY2FwZSA9IElTX1dJTkRPV1NfUExBVEZPUk0gPyBlc2NhcGVXaW5kb3dzUGF0aCA6IGVzY2FwZVBvc2l4UGF0aDtcbmZ1bmN0aW9uIGVzY2FwZVdpbmRvd3NQYXRoKHBhdHRlcm4pIHtcbiAgICByZXR1cm4gcGF0dGVybi5yZXBsYWNlKFdJTkRPV1NfVU5FU0NBUEVEX0dMT0JfU1lNQk9MU19SRSwgJ1xcXFwkMicpO1xufVxuZXhwb3J0cy5lc2NhcGVXaW5kb3dzUGF0aCA9IGVzY2FwZVdpbmRvd3NQYXRoO1xuZnVuY3Rpb24gZXNjYXBlUG9zaXhQYXRoKHBhdHRlcm4pIHtcbiAgICByZXR1cm4gcGF0dGVybi5yZXBsYWNlKFBPU0lYX1VORVNDQVBFRF9HTE9CX1NZTUJPTFNfUkUsICdcXFxcJDInKTtcbn1cbmV4cG9ydHMuZXNjYXBlUG9zaXhQYXRoID0gZXNjYXBlUG9zaXhQYXRoO1xuZXhwb3J0cy5jb252ZXJ0UGF0aFRvUGF0dGVybiA9IElTX1dJTkRPV1NfUExBVEZPUk0gPyBjb252ZXJ0V2luZG93c1BhdGhUb1BhdHRlcm4gOiBjb252ZXJ0UG9zaXhQYXRoVG9QYXR0ZXJuO1xuZnVuY3Rpb24gY29udmVydFdpbmRvd3NQYXRoVG9QYXR0ZXJuKGZpbGVwYXRoKSB7XG4gICAgcmV0dXJuIGVzY2FwZVdpbmRvd3NQYXRoKGZpbGVwYXRoKVxuICAgICAgICAucmVwbGFjZShET1NfREVWSUNFX1BBVEhfUkUsICcvLyQxJylcbiAgICAgICAgLnJlcGxhY2UoV0lORE9XU19CQUNLU0xBU0hFU19SRSwgJy8nKTtcbn1cbmV4cG9ydHMuY29udmVydFdpbmRvd3NQYXRoVG9QYXR0ZXJuID0gY29udmVydFdpbmRvd3NQYXRoVG9QYXR0ZXJuO1xuZnVuY3Rpb24gY29udmVydFBvc2l4UGF0aFRvUGF0dGVybihmaWxlcGF0aCkge1xuICAgIHJldHVybiBlc2NhcGVQb3NpeFBhdGgoZmlsZXBhdGgpO1xufVxuZXhwb3J0cy5jb252ZXJ0UG9zaXhQYXRoVG9QYXR0ZXJuID0gY29udmVydFBvc2l4UGF0aFRvUGF0dGVybjtcbiIsICIvKiFcbiAqIGlzLWV4dGdsb2IgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2lzLWV4dGdsb2I+XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTYsIEpvbiBTY2hsaW5rZXJ0LlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNFeHRnbG9iKHN0cikge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycgfHwgc3RyID09PSAnJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBtYXRjaDtcbiAgd2hpbGUgKChtYXRjaCA9IC8oXFxcXCkufChbQD8hKypdXFwoLipcXCkpL2cuZXhlYyhzdHIpKSkge1xuICAgIGlmIChtYXRjaFsyXSkgcmV0dXJuIHRydWU7XG4gICAgc3RyID0gc3RyLnNsaWNlKG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG4iLCAiLyohXG4gKiBpcy1nbG9iIDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9pcy1nbG9iPlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE3LCBKb24gU2NobGlua2VydC5cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXG52YXIgaXNFeHRnbG9iID0gcmVxdWlyZSgnaXMtZXh0Z2xvYicpO1xudmFyIGNoYXJzID0geyAneyc6ICd9JywgJygnOiAnKScsICdbJzogJ10nfTtcbnZhciBzdHJpY3RDaGVjayA9IGZ1bmN0aW9uKHN0cikge1xuICBpZiAoc3RyWzBdID09PSAnIScpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgcGlwZUluZGV4ID0gLTI7XG4gIHZhciBjbG9zZVNxdWFyZUluZGV4ID0gLTI7XG4gIHZhciBjbG9zZUN1cmx5SW5kZXggPSAtMjtcbiAgdmFyIGNsb3NlUGFyZW5JbmRleCA9IC0yO1xuICB2YXIgYmFja1NsYXNoSW5kZXggPSAtMjtcbiAgd2hpbGUgKGluZGV4IDwgc3RyLmxlbmd0aCkge1xuICAgIGlmIChzdHJbaW5kZXhdID09PSAnKicpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdHJbaW5kZXggKyAxXSA9PT0gJz8nICYmIC9bXFxdLispXS8udGVzdChzdHJbaW5kZXhdKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGNsb3NlU3F1YXJlSW5kZXggIT09IC0xICYmIHN0cltpbmRleF0gPT09ICdbJyAmJiBzdHJbaW5kZXggKyAxXSAhPT0gJ10nKSB7XG4gICAgICBpZiAoY2xvc2VTcXVhcmVJbmRleCA8IGluZGV4KSB7XG4gICAgICAgIGNsb3NlU3F1YXJlSW5kZXggPSBzdHIuaW5kZXhPZignXScsIGluZGV4KTtcbiAgICAgIH1cbiAgICAgIGlmIChjbG9zZVNxdWFyZUluZGV4ID4gaW5kZXgpIHtcbiAgICAgICAgaWYgKGJhY2tTbGFzaEluZGV4ID09PSAtMSB8fCBiYWNrU2xhc2hJbmRleCA+IGNsb3NlU3F1YXJlSW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBiYWNrU2xhc2hJbmRleCA9IHN0ci5pbmRleE9mKCdcXFxcJywgaW5kZXgpO1xuICAgICAgICBpZiAoYmFja1NsYXNoSW5kZXggPT09IC0xIHx8IGJhY2tTbGFzaEluZGV4ID4gY2xvc2VTcXVhcmVJbmRleCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNsb3NlQ3VybHlJbmRleCAhPT0gLTEgJiYgc3RyW2luZGV4XSA9PT0gJ3snICYmIHN0cltpbmRleCArIDFdICE9PSAnfScpIHtcbiAgICAgIGNsb3NlQ3VybHlJbmRleCA9IHN0ci5pbmRleE9mKCd9JywgaW5kZXgpO1xuICAgICAgaWYgKGNsb3NlQ3VybHlJbmRleCA+IGluZGV4KSB7XG4gICAgICAgIGJhY2tTbGFzaEluZGV4ID0gc3RyLmluZGV4T2YoJ1xcXFwnLCBpbmRleCk7XG4gICAgICAgIGlmIChiYWNrU2xhc2hJbmRleCA9PT0gLTEgfHwgYmFja1NsYXNoSW5kZXggPiBjbG9zZUN1cmx5SW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjbG9zZVBhcmVuSW5kZXggIT09IC0xICYmIHN0cltpbmRleF0gPT09ICcoJyAmJiBzdHJbaW5kZXggKyAxXSA9PT0gJz8nICYmIC9bOiE9XS8udGVzdChzdHJbaW5kZXggKyAyXSkgJiYgc3RyW2luZGV4ICsgM10gIT09ICcpJykge1xuICAgICAgY2xvc2VQYXJlbkluZGV4ID0gc3RyLmluZGV4T2YoJyknLCBpbmRleCk7XG4gICAgICBpZiAoY2xvc2VQYXJlbkluZGV4ID4gaW5kZXgpIHtcbiAgICAgICAgYmFja1NsYXNoSW5kZXggPSBzdHIuaW5kZXhPZignXFxcXCcsIGluZGV4KTtcbiAgICAgICAgaWYgKGJhY2tTbGFzaEluZGV4ID09PSAtMSB8fCBiYWNrU2xhc2hJbmRleCA+IGNsb3NlUGFyZW5JbmRleCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBpcGVJbmRleCAhPT0gLTEgJiYgc3RyW2luZGV4XSA9PT0gJygnICYmIHN0cltpbmRleCArIDFdICE9PSAnfCcpIHtcbiAgICAgIGlmIChwaXBlSW5kZXggPCBpbmRleCkge1xuICAgICAgICBwaXBlSW5kZXggPSBzdHIuaW5kZXhPZignfCcsIGluZGV4KTtcbiAgICAgIH1cbiAgICAgIGlmIChwaXBlSW5kZXggIT09IC0xICYmIHN0cltwaXBlSW5kZXggKyAxXSAhPT0gJyknKSB7XG4gICAgICAgIGNsb3NlUGFyZW5JbmRleCA9IHN0ci5pbmRleE9mKCcpJywgcGlwZUluZGV4KTtcbiAgICAgICAgaWYgKGNsb3NlUGFyZW5JbmRleCA+IHBpcGVJbmRleCkge1xuICAgICAgICAgIGJhY2tTbGFzaEluZGV4ID0gc3RyLmluZGV4T2YoJ1xcXFwnLCBwaXBlSW5kZXgpO1xuICAgICAgICAgIGlmIChiYWNrU2xhc2hJbmRleCA9PT0gLTEgfHwgYmFja1NsYXNoSW5kZXggPiBjbG9zZVBhcmVuSW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdHJbaW5kZXhdID09PSAnXFxcXCcpIHtcbiAgICAgIHZhciBvcGVuID0gc3RyW2luZGV4ICsgMV07XG4gICAgICBpbmRleCArPSAyO1xuICAgICAgdmFyIGNsb3NlID0gY2hhcnNbb3Blbl07XG5cbiAgICAgIGlmIChjbG9zZSkge1xuICAgICAgICB2YXIgbiA9IHN0ci5pbmRleE9mKGNsb3NlLCBpbmRleCk7XG4gICAgICAgIGlmIChuICE9PSAtMSkge1xuICAgICAgICAgIGluZGV4ID0gbiArIDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN0cltpbmRleF0gPT09ICchJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaW5kZXgrKztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxudmFyIHJlbGF4ZWRDaGVjayA9IGZ1bmN0aW9uKHN0cikge1xuICBpZiAoc3RyWzBdID09PSAnIScpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgaW5kZXggPSAwO1xuICB3aGlsZSAoaW5kZXggPCBzdHIubGVuZ3RoKSB7XG4gICAgaWYgKC9bKj97fSgpW1xcXV0vLnRlc3Qoc3RyW2luZGV4XSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdHJbaW5kZXhdID09PSAnXFxcXCcpIHtcbiAgICAgIHZhciBvcGVuID0gc3RyW2luZGV4ICsgMV07XG4gICAgICBpbmRleCArPSAyO1xuICAgICAgdmFyIGNsb3NlID0gY2hhcnNbb3Blbl07XG5cbiAgICAgIGlmIChjbG9zZSkge1xuICAgICAgICB2YXIgbiA9IHN0ci5pbmRleE9mKGNsb3NlLCBpbmRleCk7XG4gICAgICAgIGlmIChuICE9PSAtMSkge1xuICAgICAgICAgIGluZGV4ID0gbiArIDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN0cltpbmRleF0gPT09ICchJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaW5kZXgrKztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0dsb2Ioc3RyLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJyB8fCBzdHIgPT09ICcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzRXh0Z2xvYihzdHIpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgY2hlY2sgPSBzdHJpY3RDaGVjaztcblxuICAvLyBvcHRpb25hbGx5IHJlbGF4IGNoZWNrXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc3RyaWN0ID09PSBmYWxzZSkge1xuICAgIGNoZWNrID0gcmVsYXhlZENoZWNrO1xuICB9XG5cbiAgcmV0dXJuIGNoZWNrKHN0cik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIGlzR2xvYiA9IHJlcXVpcmUoJ2lzLWdsb2InKTtcbnZhciBwYXRoUG9zaXhEaXJuYW1lID0gcmVxdWlyZSgncGF0aCcpLnBvc2l4LmRpcm5hbWU7XG52YXIgaXNXaW4zMiA9IHJlcXVpcmUoJ29zJykucGxhdGZvcm0oKSA9PT0gJ3dpbjMyJztcblxudmFyIHNsYXNoID0gJy8nO1xudmFyIGJhY2tzbGFzaCA9IC9cXFxcL2c7XG52YXIgZW5jbG9zdXJlID0gL1tcXHtcXFtdLipbXFx9XFxdXSQvO1xudmFyIGdsb2JieSA9IC8oXnxbXlxcXFxdKShbXFx7XFxbXXxcXChbXlxcKV0rJCkvO1xudmFyIGVzY2FwZWQgPSAvXFxcXChbXFwhXFwqXFw/XFx8XFxbXFxdXFwoXFwpXFx7XFx9XSkvZztcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5mbGlwQmFja3NsYXNoZXM9dHJ1ZV1cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2xvYlBhcmVudChzdHIsIG9wdHMpIHtcbiAgdmFyIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHsgZmxpcEJhY2tzbGFzaGVzOiB0cnVlIH0sIG9wdHMpO1xuXG4gIC8vIGZsaXAgd2luZG93cyBwYXRoIHNlcGFyYXRvcnNcbiAgaWYgKG9wdGlvbnMuZmxpcEJhY2tzbGFzaGVzICYmIGlzV2luMzIgJiYgc3RyLmluZGV4T2Yoc2xhc2gpIDwgMCkge1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKGJhY2tzbGFzaCwgc2xhc2gpO1xuICB9XG5cbiAgLy8gc3BlY2lhbCBjYXNlIGZvciBzdHJpbmdzIGVuZGluZyBpbiBlbmNsb3N1cmUgY29udGFpbmluZyBwYXRoIHNlcGFyYXRvclxuICBpZiAoZW5jbG9zdXJlLnRlc3Qoc3RyKSkge1xuICAgIHN0ciArPSBzbGFzaDtcbiAgfVxuXG4gIC8vIHByZXNlcnZlcyBmdWxsIHBhdGggaW4gY2FzZSBvZiB0cmFpbGluZyBwYXRoIHNlcGFyYXRvclxuICBzdHIgKz0gJ2EnO1xuXG4gIC8vIHJlbW92ZSBwYXRoIHBhcnRzIHRoYXQgYXJlIGdsb2JieVxuICBkbyB7XG4gICAgc3RyID0gcGF0aFBvc2l4RGlybmFtZShzdHIpO1xuICB9IHdoaWxlIChpc0dsb2Ioc3RyKSB8fCBnbG9iYnkudGVzdChzdHIpKTtcblxuICAvLyByZW1vdmUgZXNjYXBlIGNoYXJzIGFuZCByZXR1cm4gcmVzdWx0XG4gIHJldHVybiBzdHIucmVwbGFjZShlc2NhcGVkLCAnJDEnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmlzSW50ZWdlciA9IG51bSA9PiB7XG4gIGlmICh0eXBlb2YgbnVtID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKG51bSk7XG4gIH1cbiAgaWYgKHR5cGVvZiBudW0gPT09ICdzdHJpbmcnICYmIG51bS50cmltKCkgIT09ICcnKSB7XG4gICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIoTnVtYmVyKG51bSkpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRmluZCBhIG5vZGUgb2YgdGhlIGdpdmVuIHR5cGVcbiAqL1xuXG5leHBvcnRzLmZpbmQgPSAobm9kZSwgdHlwZSkgPT4gbm9kZS5ub2Rlcy5maW5kKG5vZGUgPT4gbm9kZS50eXBlID09PSB0eXBlKTtcblxuLyoqXG4gKiBGaW5kIGEgbm9kZSBvZiB0aGUgZ2l2ZW4gdHlwZVxuICovXG5cbmV4cG9ydHMuZXhjZWVkc0xpbWl0ID0gKG1pbiwgbWF4LCBzdGVwID0gMSwgbGltaXQpID0+IHtcbiAgaWYgKGxpbWl0ID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoIWV4cG9ydHMuaXNJbnRlZ2VyKG1pbikgfHwgIWV4cG9ydHMuaXNJbnRlZ2VyKG1heCkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuICgoTnVtYmVyKG1heCkgLSBOdW1iZXIobWluKSkgLyBOdW1iZXIoc3RlcCkpID49IGxpbWl0O1xufTtcblxuLyoqXG4gKiBFc2NhcGUgdGhlIGdpdmVuIG5vZGUgd2l0aCAnXFxcXCcgYmVmb3JlIG5vZGUudmFsdWVcbiAqL1xuXG5leHBvcnRzLmVzY2FwZU5vZGUgPSAoYmxvY2ssIG4gPSAwLCB0eXBlKSA9PiB7XG4gIGxldCBub2RlID0gYmxvY2subm9kZXNbbl07XG4gIGlmICghbm9kZSkgcmV0dXJuO1xuXG4gIGlmICgodHlwZSAmJiBub2RlLnR5cGUgPT09IHR5cGUpIHx8IG5vZGUudHlwZSA9PT0gJ29wZW4nIHx8IG5vZGUudHlwZSA9PT0gJ2Nsb3NlJykge1xuICAgIGlmIChub2RlLmVzY2FwZWQgIT09IHRydWUpIHtcbiAgICAgIG5vZGUudmFsdWUgPSAnXFxcXCcgKyBub2RlLnZhbHVlO1xuICAgICAgbm9kZS5lc2NhcGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBicmFjZSBub2RlIHNob3VsZCBiZSBlbmNsb3NlZCBpbiBsaXRlcmFsIGJyYWNlc1xuICovXG5cbmV4cG9ydHMuZW5jbG9zZUJyYWNlID0gbm9kZSA9PiB7XG4gIGlmIChub2RlLnR5cGUgIT09ICdicmFjZScpIHJldHVybiBmYWxzZTtcbiAgaWYgKChub2RlLmNvbW1hcyA+PiAwICsgbm9kZS5yYW5nZXMgPj4gMCkgPT09IDApIHtcbiAgICBub2RlLmludmFsaWQgPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGEgYnJhY2Ugbm9kZSBpcyBpbnZhbGlkLlxuICovXG5cbmV4cG9ydHMuaXNJbnZhbGlkQnJhY2UgPSBibG9jayA9PiB7XG4gIGlmIChibG9jay50eXBlICE9PSAnYnJhY2UnKSByZXR1cm4gZmFsc2U7XG4gIGlmIChibG9jay5pbnZhbGlkID09PSB0cnVlIHx8IGJsb2NrLmRvbGxhcikgcmV0dXJuIHRydWU7XG4gIGlmICgoYmxvY2suY29tbWFzID4+IDAgKyBibG9jay5yYW5nZXMgPj4gMCkgPT09IDApIHtcbiAgICBibG9jay5pbnZhbGlkID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoYmxvY2sub3BlbiAhPT0gdHJ1ZSB8fCBibG9jay5jbG9zZSAhPT0gdHJ1ZSkge1xuICAgIGJsb2NrLmludmFsaWQgPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGEgbm9kZSBpcyBhbiBvcGVuIG9yIGNsb3NlIG5vZGVcbiAqL1xuXG5leHBvcnRzLmlzT3Blbk9yQ2xvc2UgPSBub2RlID0+IHtcbiAgaWYgKG5vZGUudHlwZSA9PT0gJ29wZW4nIHx8IG5vZGUudHlwZSA9PT0gJ2Nsb3NlJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBub2RlLm9wZW4gPT09IHRydWUgfHwgbm9kZS5jbG9zZSA9PT0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmVkdWNlIGFuIGFycmF5IG9mIHRleHQgbm9kZXMuXG4gKi9cblxuZXhwb3J0cy5yZWR1Y2UgPSBub2RlcyA9PiBub2Rlcy5yZWR1Y2UoKGFjYywgbm9kZSkgPT4ge1xuICBpZiAobm9kZS50eXBlID09PSAndGV4dCcpIGFjYy5wdXNoKG5vZGUudmFsdWUpO1xuICBpZiAobm9kZS50eXBlID09PSAncmFuZ2UnKSBub2RlLnR5cGUgPSAndGV4dCc7XG4gIHJldHVybiBhY2M7XG59LCBbXSk7XG5cbi8qKlxuICogRmxhdHRlbiBhbiBhcnJheVxuICovXG5cbmV4cG9ydHMuZmxhdHRlbiA9ICguLi5hcmdzKSA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBjb25zdCBmbGF0ID0gYXJyID0+IHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGVsZSA9IGFycltpXTtcbiAgICAgIEFycmF5LmlzQXJyYXkoZWxlKSA/IGZsYXQoZWxlLCByZXN1bHQpIDogZWxlICE9PSB2b2lkIDAgJiYgcmVzdWx0LnB1c2goZWxlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgZmxhdChhcmdzKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoYXN0LCBvcHRpb25zID0ge30pID0+IHtcbiAgbGV0IHN0cmluZ2lmeSA9IChub2RlLCBwYXJlbnQgPSB7fSkgPT4ge1xuICAgIGxldCBpbnZhbGlkQmxvY2sgPSBvcHRpb25zLmVzY2FwZUludmFsaWQgJiYgdXRpbHMuaXNJbnZhbGlkQnJhY2UocGFyZW50KTtcbiAgICBsZXQgaW52YWxpZE5vZGUgPSBub2RlLmludmFsaWQgPT09IHRydWUgJiYgb3B0aW9ucy5lc2NhcGVJbnZhbGlkID09PSB0cnVlO1xuICAgIGxldCBvdXRwdXQgPSAnJztcblxuICAgIGlmIChub2RlLnZhbHVlKSB7XG4gICAgICBpZiAoKGludmFsaWRCbG9jayB8fCBpbnZhbGlkTm9kZSkgJiYgdXRpbHMuaXNPcGVuT3JDbG9zZShub2RlKSkge1xuICAgICAgICByZXR1cm4gJ1xcXFwnICsgbm9kZS52YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBub2RlLnZhbHVlO1xuICAgIH1cblxuICAgIGlmIChub2RlLnZhbHVlKSB7XG4gICAgICByZXR1cm4gbm9kZS52YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5ub2Rlcykge1xuICAgICAgZm9yIChsZXQgY2hpbGQgb2Ygbm9kZS5ub2Rlcykge1xuICAgICAgICBvdXRwdXQgKz0gc3RyaW5naWZ5KGNoaWxkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcblxuICByZXR1cm4gc3RyaW5naWZ5KGFzdCk7XG59O1xuXG4iLCAiLyohXG4gKiBpcy1udW1iZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2lzLW51bWJlcj5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgSm9uIFNjaGxpbmtlcnQuXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG51bSkge1xuICBpZiAodHlwZW9mIG51bSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbnVtIC0gbnVtID09PSAwO1xuICB9XG4gIGlmICh0eXBlb2YgbnVtID09PSAnc3RyaW5nJyAmJiBudW0udHJpbSgpICE9PSAnJykge1xuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUgPyBOdW1iZXIuaXNGaW5pdGUoK251bSkgOiBpc0Zpbml0ZSgrbnVtKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuIiwgIi8qIVxuICogdG8tcmVnZXgtcmFuZ2UgPGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb21hdGNoL3RvLXJlZ2V4LXJhbmdlPlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNS1wcmVzZW50LCBKb24gU2NobGlua2VydC5cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IGlzTnVtYmVyID0gcmVxdWlyZSgnaXMtbnVtYmVyJyk7XG5cbmNvbnN0IHRvUmVnZXhSYW5nZSA9IChtaW4sIG1heCwgb3B0aW9ucykgPT4ge1xuICBpZiAoaXNOdW1iZXIobWluKSA9PT0gZmFsc2UpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0b1JlZ2V4UmFuZ2U6IGV4cGVjdGVkIHRoZSBmaXJzdCBhcmd1bWVudCB0byBiZSBhIG51bWJlcicpO1xuICB9XG5cbiAgaWYgKG1heCA9PT0gdm9pZCAwIHx8IG1pbiA9PT0gbWF4KSB7XG4gICAgcmV0dXJuIFN0cmluZyhtaW4pO1xuICB9XG5cbiAgaWYgKGlzTnVtYmVyKG1heCkgPT09IGZhbHNlKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndG9SZWdleFJhbmdlOiBleHBlY3RlZCB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgbnVtYmVyLicpO1xuICB9XG5cbiAgbGV0IG9wdHMgPSB7IHJlbGF4WmVyb3M6IHRydWUsIC4uLm9wdGlvbnMgfTtcbiAgaWYgKHR5cGVvZiBvcHRzLnN0cmljdFplcm9zID09PSAnYm9vbGVhbicpIHtcbiAgICBvcHRzLnJlbGF4WmVyb3MgPSBvcHRzLnN0cmljdFplcm9zID09PSBmYWxzZTtcbiAgfVxuXG4gIGxldCByZWxheCA9IFN0cmluZyhvcHRzLnJlbGF4WmVyb3MpO1xuICBsZXQgc2hvcnRoYW5kID0gU3RyaW5nKG9wdHMuc2hvcnRoYW5kKTtcbiAgbGV0IGNhcHR1cmUgPSBTdHJpbmcob3B0cy5jYXB0dXJlKTtcbiAgbGV0IHdyYXAgPSBTdHJpbmcob3B0cy53cmFwKTtcbiAgbGV0IGNhY2hlS2V5ID0gbWluICsgJzonICsgbWF4ICsgJz0nICsgcmVsYXggKyBzaG9ydGhhbmQgKyBjYXB0dXJlICsgd3JhcDtcblxuICBpZiAodG9SZWdleFJhbmdlLmNhY2hlLmhhc093blByb3BlcnR5KGNhY2hlS2V5KSkge1xuICAgIHJldHVybiB0b1JlZ2V4UmFuZ2UuY2FjaGVbY2FjaGVLZXldLnJlc3VsdDtcbiAgfVxuXG4gIGxldCBhID0gTWF0aC5taW4obWluLCBtYXgpO1xuICBsZXQgYiA9IE1hdGgubWF4KG1pbiwgbWF4KTtcblxuICBpZiAoTWF0aC5hYnMoYSAtIGIpID09PSAxKSB7XG4gICAgbGV0IHJlc3VsdCA9IG1pbiArICd8JyArIG1heDtcbiAgICBpZiAob3B0cy5jYXB0dXJlKSB7XG4gICAgICByZXR1cm4gYCgke3Jlc3VsdH0pYDtcbiAgICB9XG4gICAgaWYgKG9wdHMud3JhcCA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiBgKD86JHtyZXN1bHR9KWA7XG4gIH1cblxuICBsZXQgaXNQYWRkZWQgPSBoYXNQYWRkaW5nKG1pbikgfHwgaGFzUGFkZGluZyhtYXgpO1xuICBsZXQgc3RhdGUgPSB7IG1pbiwgbWF4LCBhLCBiIH07XG4gIGxldCBwb3NpdGl2ZXMgPSBbXTtcbiAgbGV0IG5lZ2F0aXZlcyA9IFtdO1xuXG4gIGlmIChpc1BhZGRlZCkge1xuICAgIHN0YXRlLmlzUGFkZGVkID0gaXNQYWRkZWQ7XG4gICAgc3RhdGUubWF4TGVuID0gU3RyaW5nKHN0YXRlLm1heCkubGVuZ3RoO1xuICB9XG5cbiAgaWYgKGEgPCAwKSB7XG4gICAgbGV0IG5ld01pbiA9IGIgPCAwID8gTWF0aC5hYnMoYikgOiAxO1xuICAgIG5lZ2F0aXZlcyA9IHNwbGl0VG9QYXR0ZXJucyhuZXdNaW4sIE1hdGguYWJzKGEpLCBzdGF0ZSwgb3B0cyk7XG4gICAgYSA9IHN0YXRlLmEgPSAwO1xuICB9XG5cbiAgaWYgKGIgPj0gMCkge1xuICAgIHBvc2l0aXZlcyA9IHNwbGl0VG9QYXR0ZXJucyhhLCBiLCBzdGF0ZSwgb3B0cyk7XG4gIH1cblxuICBzdGF0ZS5uZWdhdGl2ZXMgPSBuZWdhdGl2ZXM7XG4gIHN0YXRlLnBvc2l0aXZlcyA9IHBvc2l0aXZlcztcbiAgc3RhdGUucmVzdWx0ID0gY29sbGF0ZVBhdHRlcm5zKG5lZ2F0aXZlcywgcG9zaXRpdmVzLCBvcHRzKTtcblxuICBpZiAob3B0cy5jYXB0dXJlID09PSB0cnVlKSB7XG4gICAgc3RhdGUucmVzdWx0ID0gYCgke3N0YXRlLnJlc3VsdH0pYDtcbiAgfSBlbHNlIGlmIChvcHRzLndyYXAgIT09IGZhbHNlICYmIChwb3NpdGl2ZXMubGVuZ3RoICsgbmVnYXRpdmVzLmxlbmd0aCkgPiAxKSB7XG4gICAgc3RhdGUucmVzdWx0ID0gYCg/OiR7c3RhdGUucmVzdWx0fSlgO1xuICB9XG5cbiAgdG9SZWdleFJhbmdlLmNhY2hlW2NhY2hlS2V5XSA9IHN0YXRlO1xuICByZXR1cm4gc3RhdGUucmVzdWx0O1xufTtcblxuZnVuY3Rpb24gY29sbGF0ZVBhdHRlcm5zKG5lZywgcG9zLCBvcHRpb25zKSB7XG4gIGxldCBvbmx5TmVnYXRpdmUgPSBmaWx0ZXJQYXR0ZXJucyhuZWcsIHBvcywgJy0nLCBmYWxzZSwgb3B0aW9ucykgfHwgW107XG4gIGxldCBvbmx5UG9zaXRpdmUgPSBmaWx0ZXJQYXR0ZXJucyhwb3MsIG5lZywgJycsIGZhbHNlLCBvcHRpb25zKSB8fCBbXTtcbiAgbGV0IGludGVyc2VjdGVkID0gZmlsdGVyUGF0dGVybnMobmVnLCBwb3MsICctPycsIHRydWUsIG9wdGlvbnMpIHx8IFtdO1xuICBsZXQgc3VicGF0dGVybnMgPSBvbmx5TmVnYXRpdmUuY29uY2F0KGludGVyc2VjdGVkKS5jb25jYXQob25seVBvc2l0aXZlKTtcbiAgcmV0dXJuIHN1YnBhdHRlcm5zLmpvaW4oJ3wnKTtcbn1cblxuZnVuY3Rpb24gc3BsaXRUb1JhbmdlcyhtaW4sIG1heCkge1xuICBsZXQgbmluZXMgPSAxO1xuICBsZXQgemVyb3MgPSAxO1xuXG4gIGxldCBzdG9wID0gY291bnROaW5lcyhtaW4sIG5pbmVzKTtcbiAgbGV0IHN0b3BzID0gbmV3IFNldChbbWF4XSk7XG5cbiAgd2hpbGUgKG1pbiA8PSBzdG9wICYmIHN0b3AgPD0gbWF4KSB7XG4gICAgc3RvcHMuYWRkKHN0b3ApO1xuICAgIG5pbmVzICs9IDE7XG4gICAgc3RvcCA9IGNvdW50TmluZXMobWluLCBuaW5lcyk7XG4gIH1cblxuICBzdG9wID0gY291bnRaZXJvcyhtYXggKyAxLCB6ZXJvcykgLSAxO1xuXG4gIHdoaWxlIChtaW4gPCBzdG9wICYmIHN0b3AgPD0gbWF4KSB7XG4gICAgc3RvcHMuYWRkKHN0b3ApO1xuICAgIHplcm9zICs9IDE7XG4gICAgc3RvcCA9IGNvdW50WmVyb3MobWF4ICsgMSwgemVyb3MpIC0gMTtcbiAgfVxuXG4gIHN0b3BzID0gWy4uLnN0b3BzXTtcbiAgc3RvcHMuc29ydChjb21wYXJlKTtcbiAgcmV0dXJuIHN0b3BzO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSByYW5nZSB0byBhIHJlZ2V4IHBhdHRlcm5cbiAqIEBwYXJhbSB7TnVtYmVyfSBgc3RhcnRgXG4gKiBAcGFyYW0ge051bWJlcn0gYHN0b3BgXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gcmFuZ2VUb1BhdHRlcm4oc3RhcnQsIHN0b3AsIG9wdGlvbnMpIHtcbiAgaWYgKHN0YXJ0ID09PSBzdG9wKSB7XG4gICAgcmV0dXJuIHsgcGF0dGVybjogc3RhcnQsIGNvdW50OiBbXSwgZGlnaXRzOiAwIH07XG4gIH1cblxuICBsZXQgemlwcGVkID0gemlwKHN0YXJ0LCBzdG9wKTtcbiAgbGV0IGRpZ2l0cyA9IHppcHBlZC5sZW5ndGg7XG4gIGxldCBwYXR0ZXJuID0gJyc7XG4gIGxldCBjb3VudCA9IDA7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWdpdHM7IGkrKykge1xuICAgIGxldCBbc3RhcnREaWdpdCwgc3RvcERpZ2l0XSA9IHppcHBlZFtpXTtcblxuICAgIGlmIChzdGFydERpZ2l0ID09PSBzdG9wRGlnaXQpIHtcbiAgICAgIHBhdHRlcm4gKz0gc3RhcnREaWdpdDtcblxuICAgIH0gZWxzZSBpZiAoc3RhcnREaWdpdCAhPT0gJzAnIHx8IHN0b3BEaWdpdCAhPT0gJzknKSB7XG4gICAgICBwYXR0ZXJuICs9IHRvQ2hhcmFjdGVyQ2xhc3Moc3RhcnREaWdpdCwgc3RvcERpZ2l0LCBvcHRpb25zKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCsrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb3VudCkge1xuICAgIHBhdHRlcm4gKz0gb3B0aW9ucy5zaG9ydGhhbmQgPT09IHRydWUgPyAnXFxcXGQnIDogJ1swLTldJztcbiAgfVxuXG4gIHJldHVybiB7IHBhdHRlcm4sIGNvdW50OiBbY291bnRdLCBkaWdpdHMgfTtcbn1cblxuZnVuY3Rpb24gc3BsaXRUb1BhdHRlcm5zKG1pbiwgbWF4LCB0b2ssIG9wdGlvbnMpIHtcbiAgbGV0IHJhbmdlcyA9IHNwbGl0VG9SYW5nZXMobWluLCBtYXgpO1xuICBsZXQgdG9rZW5zID0gW107XG4gIGxldCBzdGFydCA9IG1pbjtcbiAgbGV0IHByZXY7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgbWF4ID0gcmFuZ2VzW2ldO1xuICAgIGxldCBvYmogPSByYW5nZVRvUGF0dGVybihTdHJpbmcoc3RhcnQpLCBTdHJpbmcobWF4KSwgb3B0aW9ucyk7XG4gICAgbGV0IHplcm9zID0gJyc7XG5cbiAgICBpZiAoIXRvay5pc1BhZGRlZCAmJiBwcmV2ICYmIHByZXYucGF0dGVybiA9PT0gb2JqLnBhdHRlcm4pIHtcbiAgICAgIGlmIChwcmV2LmNvdW50Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgcHJldi5jb3VudC5wb3AoKTtcbiAgICAgIH1cblxuICAgICAgcHJldi5jb3VudC5wdXNoKG9iai5jb3VudFswXSk7XG4gICAgICBwcmV2LnN0cmluZyA9IHByZXYucGF0dGVybiArIHRvUXVhbnRpZmllcihwcmV2LmNvdW50KTtcbiAgICAgIHN0YXJ0ID0gbWF4ICsgMTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICh0b2suaXNQYWRkZWQpIHtcbiAgICAgIHplcm9zID0gcGFkWmVyb3MobWF4LCB0b2ssIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIG9iai5zdHJpbmcgPSB6ZXJvcyArIG9iai5wYXR0ZXJuICsgdG9RdWFudGlmaWVyKG9iai5jb3VudCk7XG4gICAgdG9rZW5zLnB1c2gob2JqKTtcbiAgICBzdGFydCA9IG1heCArIDE7XG4gICAgcHJldiA9IG9iajtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmZ1bmN0aW9uIGZpbHRlclBhdHRlcm5zKGFyciwgY29tcGFyaXNvbiwgcHJlZml4LCBpbnRlcnNlY3Rpb24sIG9wdGlvbnMpIHtcbiAgbGV0IHJlc3VsdCA9IFtdO1xuXG4gIGZvciAobGV0IGVsZSBvZiBhcnIpIHtcbiAgICBsZXQgeyBzdHJpbmcgfSA9IGVsZTtcblxuICAgIC8vIG9ubHkgcHVzaCBpZiBfYm90aF8gYXJlIG5lZ2F0aXZlLi4uXG4gICAgaWYgKCFpbnRlcnNlY3Rpb24gJiYgIWNvbnRhaW5zKGNvbXBhcmlzb24sICdzdHJpbmcnLCBzdHJpbmcpKSB7XG4gICAgICByZXN1bHQucHVzaChwcmVmaXggKyBzdHJpbmcpO1xuICAgIH1cblxuICAgIC8vIG9yIF9ib3RoXyBhcmUgcG9zaXRpdmVcbiAgICBpZiAoaW50ZXJzZWN0aW9uICYmIGNvbnRhaW5zKGNvbXBhcmlzb24sICdzdHJpbmcnLCBzdHJpbmcpKSB7XG4gICAgICByZXN1bHQucHVzaChwcmVmaXggKyBzdHJpbmcpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFppcCBzdHJpbmdzXG4gKi9cblxuZnVuY3Rpb24gemlwKGEsIGIpIHtcbiAgbGV0IGFyciA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIGFyci5wdXNoKFthW2ldLCBiW2ldXSk7XG4gIHJldHVybiBhcnI7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmUoYSwgYikge1xuICByZXR1cm4gYSA+IGIgPyAxIDogYiA+IGEgPyAtMSA6IDA7XG59XG5cbmZ1bmN0aW9uIGNvbnRhaW5zKGFyciwga2V5LCB2YWwpIHtcbiAgcmV0dXJuIGFyci5zb21lKGVsZSA9PiBlbGVba2V5XSA9PT0gdmFsKTtcbn1cblxuZnVuY3Rpb24gY291bnROaW5lcyhtaW4sIGxlbikge1xuICByZXR1cm4gTnVtYmVyKFN0cmluZyhtaW4pLnNsaWNlKDAsIC1sZW4pICsgJzknLnJlcGVhdChsZW4pKTtcbn1cblxuZnVuY3Rpb24gY291bnRaZXJvcyhpbnRlZ2VyLCB6ZXJvcykge1xuICByZXR1cm4gaW50ZWdlciAtIChpbnRlZ2VyICUgTWF0aC5wb3coMTAsIHplcm9zKSk7XG59XG5cbmZ1bmN0aW9uIHRvUXVhbnRpZmllcihkaWdpdHMpIHtcbiAgbGV0IFtzdGFydCA9IDAsIHN0b3AgPSAnJ10gPSBkaWdpdHM7XG4gIGlmIChzdG9wIHx8IHN0YXJ0ID4gMSkge1xuICAgIHJldHVybiBgeyR7c3RhcnQgKyAoc3RvcCA/ICcsJyArIHN0b3AgOiAnJyl9fWA7XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiB0b0NoYXJhY3RlckNsYXNzKGEsIGIsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGBbJHthfSR7KGIgLSBhID09PSAxKSA/ICcnIDogJy0nfSR7Yn1dYDtcbn1cblxuZnVuY3Rpb24gaGFzUGFkZGluZyhzdHIpIHtcbiAgcmV0dXJuIC9eLT8oMCspXFxkLy50ZXN0KHN0cik7XG59XG5cbmZ1bmN0aW9uIHBhZFplcm9zKHZhbHVlLCB0b2ssIG9wdGlvbnMpIHtcbiAgaWYgKCF0b2suaXNQYWRkZWQpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBsZXQgZGlmZiA9IE1hdGguYWJzKHRvay5tYXhMZW4gLSBTdHJpbmcodmFsdWUpLmxlbmd0aCk7XG4gIGxldCByZWxheCA9IG9wdGlvbnMucmVsYXhaZXJvcyAhPT0gZmFsc2U7XG5cbiAgc3dpdGNoIChkaWZmKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuICcnO1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiByZWxheCA/ICcwPycgOiAnMCc7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIHJlbGF4ID8gJzB7MCwyfScgOiAnMDAnO1xuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiByZWxheCA/IGAwezAsJHtkaWZmfX1gIDogYDB7JHtkaWZmfX1gO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENhY2hlXG4gKi9cblxudG9SZWdleFJhbmdlLmNhY2hlID0ge307XG50b1JlZ2V4UmFuZ2UuY2xlYXJDYWNoZSA9ICgpID0+ICh0b1JlZ2V4UmFuZ2UuY2FjaGUgPSB7fSk7XG5cbi8qKlxuICogRXhwb3NlIGB0b1JlZ2V4UmFuZ2VgXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSB0b1JlZ2V4UmFuZ2U7XG4iLCAiLyohXG4gKiBmaWxsLXJhbmdlIDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9maWxsLXJhbmdlPlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBKb24gU2NobGlua2VydC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5jb25zdCB0b1JlZ2V4UmFuZ2UgPSByZXF1aXJlKCd0by1yZWdleC1yYW5nZScpO1xuXG5jb25zdCBpc09iamVjdCA9IHZhbCA9PiB2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsKTtcblxuY29uc3QgdHJhbnNmb3JtID0gdG9OdW1iZXIgPT4ge1xuICByZXR1cm4gdmFsdWUgPT4gdG9OdW1iZXIgPT09IHRydWUgPyBOdW1iZXIodmFsdWUpIDogU3RyaW5nKHZhbHVlKTtcbn07XG5cbmNvbnN0IGlzVmFsaWRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUgIT09ICcnKTtcbn07XG5cbmNvbnN0IGlzTnVtYmVyID0gbnVtID0+IE51bWJlci5pc0ludGVnZXIoK251bSk7XG5cbmNvbnN0IHplcm9zID0gaW5wdXQgPT4ge1xuICBsZXQgdmFsdWUgPSBgJHtpbnB1dH1gO1xuICBsZXQgaW5kZXggPSAtMTtcbiAgaWYgKHZhbHVlWzBdID09PSAnLScpIHZhbHVlID0gdmFsdWUuc2xpY2UoMSk7XG4gIGlmICh2YWx1ZSA9PT0gJzAnKSByZXR1cm4gZmFsc2U7XG4gIHdoaWxlICh2YWx1ZVsrK2luZGV4XSA9PT0gJzAnKTtcbiAgcmV0dXJuIGluZGV4ID4gMDtcbn07XG5cbmNvbnN0IHN0cmluZ2lmeSA9IChzdGFydCwgZW5kLCBvcHRpb25zKSA9PiB7XG4gIGlmICh0eXBlb2Ygc3RhcnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnMuc3RyaW5naWZ5ID09PSB0cnVlO1xufTtcblxuY29uc3QgcGFkID0gKGlucHV0LCBtYXhMZW5ndGgsIHRvTnVtYmVyKSA9PiB7XG4gIGlmIChtYXhMZW5ndGggPiAwKSB7XG4gICAgbGV0IGRhc2ggPSBpbnB1dFswXSA9PT0gJy0nID8gJy0nIDogJyc7XG4gICAgaWYgKGRhc2gpIGlucHV0ID0gaW5wdXQuc2xpY2UoMSk7XG4gICAgaW5wdXQgPSAoZGFzaCArIGlucHV0LnBhZFN0YXJ0KGRhc2ggPyBtYXhMZW5ndGggLSAxIDogbWF4TGVuZ3RoLCAnMCcpKTtcbiAgfVxuICBpZiAodG9OdW1iZXIgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIFN0cmluZyhpbnB1dCk7XG4gIH1cbiAgcmV0dXJuIGlucHV0O1xufTtcblxuY29uc3QgdG9NYXhMZW4gPSAoaW5wdXQsIG1heExlbmd0aCkgPT4ge1xuICBsZXQgbmVnYXRpdmUgPSBpbnB1dFswXSA9PT0gJy0nID8gJy0nIDogJyc7XG4gIGlmIChuZWdhdGl2ZSkge1xuICAgIGlucHV0ID0gaW5wdXQuc2xpY2UoMSk7XG4gICAgbWF4TGVuZ3RoLS07XG4gIH1cbiAgd2hpbGUgKGlucHV0Lmxlbmd0aCA8IG1heExlbmd0aCkgaW5wdXQgPSAnMCcgKyBpbnB1dDtcbiAgcmV0dXJuIG5lZ2F0aXZlID8gKCctJyArIGlucHV0KSA6IGlucHV0O1xufTtcblxuY29uc3QgdG9TZXF1ZW5jZSA9IChwYXJ0cywgb3B0aW9ucykgPT4ge1xuICBwYXJ0cy5uZWdhdGl2ZXMuc29ydCgoYSwgYikgPT4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDApO1xuICBwYXJ0cy5wb3NpdGl2ZXMuc29ydCgoYSwgYikgPT4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDApO1xuXG4gIGxldCBwcmVmaXggPSBvcHRpb25zLmNhcHR1cmUgPyAnJyA6ICc/Oic7XG4gIGxldCBwb3NpdGl2ZXMgPSAnJztcbiAgbGV0IG5lZ2F0aXZlcyA9ICcnO1xuICBsZXQgcmVzdWx0O1xuXG4gIGlmIChwYXJ0cy5wb3NpdGl2ZXMubGVuZ3RoKSB7XG4gICAgcG9zaXRpdmVzID0gcGFydHMucG9zaXRpdmVzLmpvaW4oJ3wnKTtcbiAgfVxuXG4gIGlmIChwYXJ0cy5uZWdhdGl2ZXMubGVuZ3RoKSB7XG4gICAgbmVnYXRpdmVzID0gYC0oJHtwcmVmaXh9JHtwYXJ0cy5uZWdhdGl2ZXMuam9pbignfCcpfSlgO1xuICB9XG5cbiAgaWYgKHBvc2l0aXZlcyAmJiBuZWdhdGl2ZXMpIHtcbiAgICByZXN1bHQgPSBgJHtwb3NpdGl2ZXN9fCR7bmVnYXRpdmVzfWA7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gcG9zaXRpdmVzIHx8IG5lZ2F0aXZlcztcbiAgfVxuXG4gIGlmIChvcHRpb25zLndyYXApIHtcbiAgICByZXR1cm4gYCgke3ByZWZpeH0ke3Jlc3VsdH0pYDtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5jb25zdCB0b1JhbmdlID0gKGEsIGIsIGlzTnVtYmVycywgb3B0aW9ucykgPT4ge1xuICBpZiAoaXNOdW1iZXJzKSB7XG4gICAgcmV0dXJuIHRvUmVnZXhSYW5nZShhLCBiLCB7IHdyYXA6IGZhbHNlLCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgbGV0IHN0YXJ0ID0gU3RyaW5nLmZyb21DaGFyQ29kZShhKTtcbiAgaWYgKGEgPT09IGIpIHJldHVybiBzdGFydDtcblxuICBsZXQgc3RvcCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoYik7XG4gIHJldHVybiBgWyR7c3RhcnR9LSR7c3RvcH1dYDtcbn07XG5cbmNvbnN0IHRvUmVnZXggPSAoc3RhcnQsIGVuZCwgb3B0aW9ucykgPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShzdGFydCkpIHtcbiAgICBsZXQgd3JhcCA9IG9wdGlvbnMud3JhcCA9PT0gdHJ1ZTtcbiAgICBsZXQgcHJlZml4ID0gb3B0aW9ucy5jYXB0dXJlID8gJycgOiAnPzonO1xuICAgIHJldHVybiB3cmFwID8gYCgke3ByZWZpeH0ke3N0YXJ0LmpvaW4oJ3wnKX0pYCA6IHN0YXJ0LmpvaW4oJ3wnKTtcbiAgfVxuICByZXR1cm4gdG9SZWdleFJhbmdlKHN0YXJ0LCBlbmQsIG9wdGlvbnMpO1xufTtcblxuY29uc3QgcmFuZ2VFcnJvciA9ICguLi5hcmdzKSA9PiB7XG4gIHJldHVybiBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCByYW5nZSBhcmd1bWVudHM6ICcgKyB1dGlsLmluc3BlY3QoLi4uYXJncykpO1xufTtcblxuY29uc3QgaW52YWxpZFJhbmdlID0gKHN0YXJ0LCBlbmQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMuc3RyaWN0UmFuZ2VzID09PSB0cnVlKSB0aHJvdyByYW5nZUVycm9yKFtzdGFydCwgZW5kXSk7XG4gIHJldHVybiBbXTtcbn07XG5cbmNvbnN0IGludmFsaWRTdGVwID0gKHN0ZXAsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMuc3RyaWN0UmFuZ2VzID09PSB0cnVlKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgc3RlcCBcIiR7c3RlcH1cIiB0byBiZSBhIG51bWJlcmApO1xuICB9XG4gIHJldHVybiBbXTtcbn07XG5cbmNvbnN0IGZpbGxOdW1iZXJzID0gKHN0YXJ0LCBlbmQsIHN0ZXAgPSAxLCBvcHRpb25zID0ge30pID0+IHtcbiAgbGV0IGEgPSBOdW1iZXIoc3RhcnQpO1xuICBsZXQgYiA9IE51bWJlcihlbmQpO1xuXG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihhKSB8fCAhTnVtYmVyLmlzSW50ZWdlcihiKSkge1xuICAgIGlmIChvcHRpb25zLnN0cmljdFJhbmdlcyA9PT0gdHJ1ZSkgdGhyb3cgcmFuZ2VFcnJvcihbc3RhcnQsIGVuZF0pO1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8vIGZpeCBuZWdhdGl2ZSB6ZXJvXG4gIGlmIChhID09PSAwKSBhID0gMDtcbiAgaWYgKGIgPT09IDApIGIgPSAwO1xuXG4gIGxldCBkZXNjZW5kaW5nID0gYSA+IGI7XG4gIGxldCBzdGFydFN0cmluZyA9IFN0cmluZyhzdGFydCk7XG4gIGxldCBlbmRTdHJpbmcgPSBTdHJpbmcoZW5kKTtcbiAgbGV0IHN0ZXBTdHJpbmcgPSBTdHJpbmcoc3RlcCk7XG4gIHN0ZXAgPSBNYXRoLm1heChNYXRoLmFicyhzdGVwKSwgMSk7XG5cbiAgbGV0IHBhZGRlZCA9IHplcm9zKHN0YXJ0U3RyaW5nKSB8fCB6ZXJvcyhlbmRTdHJpbmcpIHx8IHplcm9zKHN0ZXBTdHJpbmcpO1xuICBsZXQgbWF4TGVuID0gcGFkZGVkID8gTWF0aC5tYXgoc3RhcnRTdHJpbmcubGVuZ3RoLCBlbmRTdHJpbmcubGVuZ3RoLCBzdGVwU3RyaW5nLmxlbmd0aCkgOiAwO1xuICBsZXQgdG9OdW1iZXIgPSBwYWRkZWQgPT09IGZhbHNlICYmIHN0cmluZ2lmeShzdGFydCwgZW5kLCBvcHRpb25zKSA9PT0gZmFsc2U7XG4gIGxldCBmb3JtYXQgPSBvcHRpb25zLnRyYW5zZm9ybSB8fCB0cmFuc2Zvcm0odG9OdW1iZXIpO1xuXG4gIGlmIChvcHRpb25zLnRvUmVnZXggJiYgc3RlcCA9PT0gMSkge1xuICAgIHJldHVybiB0b1JhbmdlKHRvTWF4TGVuKHN0YXJ0LCBtYXhMZW4pLCB0b01heExlbihlbmQsIG1heExlbiksIHRydWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgbGV0IHBhcnRzID0geyBuZWdhdGl2ZXM6IFtdLCBwb3NpdGl2ZXM6IFtdIH07XG4gIGxldCBwdXNoID0gbnVtID0+IHBhcnRzW251bSA8IDAgPyAnbmVnYXRpdmVzJyA6ICdwb3NpdGl2ZXMnXS5wdXNoKE1hdGguYWJzKG51bSkpO1xuICBsZXQgcmFuZ2UgPSBbXTtcbiAgbGV0IGluZGV4ID0gMDtcblxuICB3aGlsZSAoZGVzY2VuZGluZyA/IGEgPj0gYiA6IGEgPD0gYikge1xuICAgIGlmIChvcHRpb25zLnRvUmVnZXggPT09IHRydWUgJiYgc3RlcCA+IDEpIHtcbiAgICAgIHB1c2goYSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmdlLnB1c2gocGFkKGZvcm1hdChhLCBpbmRleCksIG1heExlbiwgdG9OdW1iZXIpKTtcbiAgICB9XG4gICAgYSA9IGRlc2NlbmRpbmcgPyBhIC0gc3RlcCA6IGEgKyBzdGVwO1xuICAgIGluZGV4Kys7XG4gIH1cblxuICBpZiAob3B0aW9ucy50b1JlZ2V4ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHN0ZXAgPiAxXG4gICAgICA/IHRvU2VxdWVuY2UocGFydHMsIG9wdGlvbnMpXG4gICAgICA6IHRvUmVnZXgocmFuZ2UsIG51bGwsIHsgd3JhcDogZmFsc2UsIC4uLm9wdGlvbnMgfSk7XG4gIH1cblxuICByZXR1cm4gcmFuZ2U7XG59O1xuXG5jb25zdCBmaWxsTGV0dGVycyA9IChzdGFydCwgZW5kLCBzdGVwID0gMSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGlmICgoIWlzTnVtYmVyKHN0YXJ0KSAmJiBzdGFydC5sZW5ndGggPiAxKSB8fCAoIWlzTnVtYmVyKGVuZCkgJiYgZW5kLmxlbmd0aCA+IDEpKSB7XG4gICAgcmV0dXJuIGludmFsaWRSYW5nZShzdGFydCwgZW5kLCBvcHRpb25zKTtcbiAgfVxuXG5cbiAgbGV0IGZvcm1hdCA9IG9wdGlvbnMudHJhbnNmb3JtIHx8ICh2YWwgPT4gU3RyaW5nLmZyb21DaGFyQ29kZSh2YWwpKTtcbiAgbGV0IGEgPSBgJHtzdGFydH1gLmNoYXJDb2RlQXQoMCk7XG4gIGxldCBiID0gYCR7ZW5kfWAuY2hhckNvZGVBdCgwKTtcblxuICBsZXQgZGVzY2VuZGluZyA9IGEgPiBiO1xuICBsZXQgbWluID0gTWF0aC5taW4oYSwgYik7XG4gIGxldCBtYXggPSBNYXRoLm1heChhLCBiKTtcblxuICBpZiAob3B0aW9ucy50b1JlZ2V4ICYmIHN0ZXAgPT09IDEpIHtcbiAgICByZXR1cm4gdG9SYW5nZShtaW4sIG1heCwgZmFsc2UsIG9wdGlvbnMpO1xuICB9XG5cbiAgbGV0IHJhbmdlID0gW107XG4gIGxldCBpbmRleCA9IDA7XG5cbiAgd2hpbGUgKGRlc2NlbmRpbmcgPyBhID49IGIgOiBhIDw9IGIpIHtcbiAgICByYW5nZS5wdXNoKGZvcm1hdChhLCBpbmRleCkpO1xuICAgIGEgPSBkZXNjZW5kaW5nID8gYSAtIHN0ZXAgOiBhICsgc3RlcDtcbiAgICBpbmRleCsrO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMudG9SZWdleCA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiB0b1JlZ2V4KHJhbmdlLCBudWxsLCB7IHdyYXA6IGZhbHNlLCBvcHRpb25zIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJhbmdlO1xufTtcblxuY29uc3QgZmlsbCA9IChzdGFydCwgZW5kLCBzdGVwLCBvcHRpb25zID0ge30pID0+IHtcbiAgaWYgKGVuZCA9PSBudWxsICYmIGlzVmFsaWRWYWx1ZShzdGFydCkpIHtcbiAgICByZXR1cm4gW3N0YXJ0XTtcbiAgfVxuXG4gIGlmICghaXNWYWxpZFZhbHVlKHN0YXJ0KSB8fCAhaXNWYWxpZFZhbHVlKGVuZCkpIHtcbiAgICByZXR1cm4gaW52YWxpZFJhbmdlKHN0YXJ0LCBlbmQsIG9wdGlvbnMpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzdGVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZpbGwoc3RhcnQsIGVuZCwgMSwgeyB0cmFuc2Zvcm06IHN0ZXAgfSk7XG4gIH1cblxuICBpZiAoaXNPYmplY3Qoc3RlcCkpIHtcbiAgICByZXR1cm4gZmlsbChzdGFydCwgZW5kLCAwLCBzdGVwKTtcbiAgfVxuXG4gIGxldCBvcHRzID0geyAuLi5vcHRpb25zIH07XG4gIGlmIChvcHRzLmNhcHR1cmUgPT09IHRydWUpIG9wdHMud3JhcCA9IHRydWU7XG4gIHN0ZXAgPSBzdGVwIHx8IG9wdHMuc3RlcCB8fCAxO1xuXG4gIGlmICghaXNOdW1iZXIoc3RlcCkpIHtcbiAgICBpZiAoc3RlcCAhPSBudWxsICYmICFpc09iamVjdChzdGVwKSkgcmV0dXJuIGludmFsaWRTdGVwKHN0ZXAsIG9wdHMpO1xuICAgIHJldHVybiBmaWxsKHN0YXJ0LCBlbmQsIDEsIHN0ZXApO1xuICB9XG5cbiAgaWYgKGlzTnVtYmVyKHN0YXJ0KSAmJiBpc051bWJlcihlbmQpKSB7XG4gICAgcmV0dXJuIGZpbGxOdW1iZXJzKHN0YXJ0LCBlbmQsIHN0ZXAsIG9wdHMpO1xuICB9XG5cbiAgcmV0dXJuIGZpbGxMZXR0ZXJzKHN0YXJ0LCBlbmQsIE1hdGgubWF4KE1hdGguYWJzKHN0ZXApLCAxKSwgb3B0cyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZpbGw7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBmaWxsID0gcmVxdWlyZSgnZmlsbC1yYW5nZScpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbmNvbnN0IGNvbXBpbGUgPSAoYXN0LCBvcHRpb25zID0ge30pID0+IHtcbiAgbGV0IHdhbGsgPSAobm9kZSwgcGFyZW50ID0ge30pID0+IHtcbiAgICBsZXQgaW52YWxpZEJsb2NrID0gdXRpbHMuaXNJbnZhbGlkQnJhY2UocGFyZW50KTtcbiAgICBsZXQgaW52YWxpZE5vZGUgPSBub2RlLmludmFsaWQgPT09IHRydWUgJiYgb3B0aW9ucy5lc2NhcGVJbnZhbGlkID09PSB0cnVlO1xuICAgIGxldCBpbnZhbGlkID0gaW52YWxpZEJsb2NrID09PSB0cnVlIHx8IGludmFsaWROb2RlID09PSB0cnVlO1xuICAgIGxldCBwcmVmaXggPSBvcHRpb25zLmVzY2FwZUludmFsaWQgPT09IHRydWUgPyAnXFxcXCcgOiAnJztcbiAgICBsZXQgb3V0cHV0ID0gJyc7XG5cbiAgICBpZiAobm9kZS5pc09wZW4gPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBwcmVmaXggKyBub2RlLnZhbHVlO1xuICAgIH1cbiAgICBpZiAobm9kZS5pc0Nsb3NlID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gcHJlZml4ICsgbm9kZS52YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS50eXBlID09PSAnb3BlbicpIHtcbiAgICAgIHJldHVybiBpbnZhbGlkID8gKHByZWZpeCArIG5vZGUudmFsdWUpIDogJygnO1xuICAgIH1cblxuICAgIGlmIChub2RlLnR5cGUgPT09ICdjbG9zZScpIHtcbiAgICAgIHJldHVybiBpbnZhbGlkID8gKHByZWZpeCArIG5vZGUudmFsdWUpIDogJyknO1xuICAgIH1cblxuICAgIGlmIChub2RlLnR5cGUgPT09ICdjb21tYScpIHtcbiAgICAgIHJldHVybiBub2RlLnByZXYudHlwZSA9PT0gJ2NvbW1hJyA/ICcnIDogKGludmFsaWQgPyBub2RlLnZhbHVlIDogJ3wnKTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS52YWx1ZSkge1xuICAgICAgcmV0dXJuIG5vZGUudmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUubm9kZXMgJiYgbm9kZS5yYW5nZXMgPiAwKSB7XG4gICAgICBsZXQgYXJncyA9IHV0aWxzLnJlZHVjZShub2RlLm5vZGVzKTtcbiAgICAgIGxldCByYW5nZSA9IGZpbGwoLi4uYXJncywgeyAuLi5vcHRpb25zLCB3cmFwOiBmYWxzZSwgdG9SZWdleDogdHJ1ZSB9KTtcblxuICAgICAgaWYgKHJhbmdlLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICByZXR1cm4gYXJncy5sZW5ndGggPiAxICYmIHJhbmdlLmxlbmd0aCA+IDEgPyBgKCR7cmFuZ2V9KWAgOiByYW5nZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobm9kZS5ub2Rlcykge1xuICAgICAgZm9yIChsZXQgY2hpbGQgb2Ygbm9kZS5ub2Rlcykge1xuICAgICAgICBvdXRwdXQgKz0gd2FsayhjaGlsZCwgbm9kZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgcmV0dXJuIHdhbGsoYXN0KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IGZpbGwgPSByZXF1aXJlKCdmaWxsLXJhbmdlJyk7XG5jb25zdCBzdHJpbmdpZnkgPSByZXF1aXJlKCcuL3N0cmluZ2lmeScpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbmNvbnN0IGFwcGVuZCA9IChxdWV1ZSA9ICcnLCBzdGFzaCA9ICcnLCBlbmNsb3NlID0gZmFsc2UpID0+IHtcbiAgbGV0IHJlc3VsdCA9IFtdO1xuXG4gIHF1ZXVlID0gW10uY29uY2F0KHF1ZXVlKTtcbiAgc3Rhc2ggPSBbXS5jb25jYXQoc3Rhc2gpO1xuXG4gIGlmICghc3Rhc2gubGVuZ3RoKSByZXR1cm4gcXVldWU7XG4gIGlmICghcXVldWUubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGVuY2xvc2UgPyB1dGlscy5mbGF0dGVuKHN0YXNoKS5tYXAoZWxlID0+IGB7JHtlbGV9fWApIDogc3Rhc2g7XG4gIH1cblxuICBmb3IgKGxldCBpdGVtIG9mIHF1ZXVlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgIGZvciAobGV0IHZhbHVlIG9mIGl0ZW0pIHtcbiAgICAgICAgcmVzdWx0LnB1c2goYXBwZW5kKHZhbHVlLCBzdGFzaCwgZW5jbG9zZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBlbGUgb2Ygc3Rhc2gpIHtcbiAgICAgICAgaWYgKGVuY2xvc2UgPT09IHRydWUgJiYgdHlwZW9mIGVsZSA9PT0gJ3N0cmluZycpIGVsZSA9IGB7JHtlbGV9fWA7XG4gICAgICAgIHJlc3VsdC5wdXNoKEFycmF5LmlzQXJyYXkoZWxlKSA/IGFwcGVuZChpdGVtLCBlbGUsIGVuY2xvc2UpIDogKGl0ZW0gKyBlbGUpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHV0aWxzLmZsYXR0ZW4ocmVzdWx0KTtcbn07XG5cbmNvbnN0IGV4cGFuZCA9IChhc3QsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBsZXQgcmFuZ2VMaW1pdCA9IG9wdGlvbnMucmFuZ2VMaW1pdCA9PT0gdm9pZCAwID8gMTAwMCA6IG9wdGlvbnMucmFuZ2VMaW1pdDtcblxuICBsZXQgd2FsayA9IChub2RlLCBwYXJlbnQgPSB7fSkgPT4ge1xuICAgIG5vZGUucXVldWUgPSBbXTtcblxuICAgIGxldCBwID0gcGFyZW50O1xuICAgIGxldCBxID0gcGFyZW50LnF1ZXVlO1xuXG4gICAgd2hpbGUgKHAudHlwZSAhPT0gJ2JyYWNlJyAmJiBwLnR5cGUgIT09ICdyb290JyAmJiBwLnBhcmVudCkge1xuICAgICAgcCA9IHAucGFyZW50O1xuICAgICAgcSA9IHAucXVldWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuaW52YWxpZCB8fCBub2RlLmRvbGxhcikge1xuICAgICAgcS5wdXNoKGFwcGVuZChxLnBvcCgpLCBzdHJpbmdpZnkobm9kZSwgb3B0aW9ucykpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobm9kZS50eXBlID09PSAnYnJhY2UnICYmIG5vZGUuaW52YWxpZCAhPT0gdHJ1ZSAmJiBub2RlLm5vZGVzLmxlbmd0aCA9PT0gMikge1xuICAgICAgcS5wdXNoKGFwcGVuZChxLnBvcCgpLCBbJ3t9J10pKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5ub2RlcyAmJiBub2RlLnJhbmdlcyA+IDApIHtcbiAgICAgIGxldCBhcmdzID0gdXRpbHMucmVkdWNlKG5vZGUubm9kZXMpO1xuXG4gICAgICBpZiAodXRpbHMuZXhjZWVkc0xpbWl0KC4uLmFyZ3MsIG9wdGlvbnMuc3RlcCwgcmFuZ2VMaW1pdCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2V4cGFuZGVkIGFycmF5IGxlbmd0aCBleGNlZWRzIHJhbmdlIGxpbWl0LiBVc2Ugb3B0aW9ucy5yYW5nZUxpbWl0IHRvIGluY3JlYXNlIG9yIGRpc2FibGUgdGhlIGxpbWl0LicpO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmFuZ2UgPSBmaWxsKC4uLmFyZ3MsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJhbmdlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByYW5nZSA9IHN0cmluZ2lmeShub2RlLCBvcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgcS5wdXNoKGFwcGVuZChxLnBvcCgpLCByYW5nZSkpO1xuICAgICAgbm9kZS5ub2RlcyA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBlbmNsb3NlID0gdXRpbHMuZW5jbG9zZUJyYWNlKG5vZGUpO1xuICAgIGxldCBxdWV1ZSA9IG5vZGUucXVldWU7XG4gICAgbGV0IGJsb2NrID0gbm9kZTtcblxuICAgIHdoaWxlIChibG9jay50eXBlICE9PSAnYnJhY2UnICYmIGJsb2NrLnR5cGUgIT09ICdyb290JyAmJiBibG9jay5wYXJlbnQpIHtcbiAgICAgIGJsb2NrID0gYmxvY2sucGFyZW50O1xuICAgICAgcXVldWUgPSBibG9jay5xdWV1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUubm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBjaGlsZCA9IG5vZGUubm9kZXNbaV07XG5cbiAgICAgIGlmIChjaGlsZC50eXBlID09PSAnY29tbWEnICYmIG5vZGUudHlwZSA9PT0gJ2JyYWNlJykge1xuICAgICAgICBpZiAoaSA9PT0gMSkgcXVldWUucHVzaCgnJyk7XG4gICAgICAgIHF1ZXVlLnB1c2goJycpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoaWxkLnR5cGUgPT09ICdjbG9zZScpIHtcbiAgICAgICAgcS5wdXNoKGFwcGVuZChxLnBvcCgpLCBxdWV1ZSwgZW5jbG9zZSkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoaWxkLnZhbHVlICYmIGNoaWxkLnR5cGUgIT09ICdvcGVuJykge1xuICAgICAgICBxdWV1ZS5wdXNoKGFwcGVuZChxdWV1ZS5wb3AoKSwgY2hpbGQudmFsdWUpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGlsZC5ub2Rlcykge1xuICAgICAgICB3YWxrKGNoaWxkLCBub2RlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcXVldWU7XG4gIH07XG5cbiAgcmV0dXJuIHV0aWxzLmZsYXR0ZW4od2Fsayhhc3QpKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwYW5kO1xuIiwgIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIE1BWF9MRU5HVEg6IDEwMjQgKiA2NCxcblxuICAvLyBEaWdpdHNcbiAgQ0hBUl8wOiAnMCcsIC8qIDAgKi9cbiAgQ0hBUl85OiAnOScsIC8qIDkgKi9cblxuICAvLyBBbHBoYWJldCBjaGFycy5cbiAgQ0hBUl9VUFBFUkNBU0VfQTogJ0EnLCAvKiBBICovXG4gIENIQVJfTE9XRVJDQVNFX0E6ICdhJywgLyogYSAqL1xuICBDSEFSX1VQUEVSQ0FTRV9aOiAnWicsIC8qIFogKi9cbiAgQ0hBUl9MT1dFUkNBU0VfWjogJ3onLCAvKiB6ICovXG5cbiAgQ0hBUl9MRUZUX1BBUkVOVEhFU0VTOiAnKCcsIC8qICggKi9cbiAgQ0hBUl9SSUdIVF9QQVJFTlRIRVNFUzogJyknLCAvKiApICovXG5cbiAgQ0hBUl9BU1RFUklTSzogJyonLCAvKiAqICovXG5cbiAgLy8gTm9uLWFscGhhYmV0aWMgY2hhcnMuXG4gIENIQVJfQU1QRVJTQU5EOiAnJicsIC8qICYgKi9cbiAgQ0hBUl9BVDogJ0AnLCAvKiBAICovXG4gIENIQVJfQkFDS1NMQVNIOiAnXFxcXCcsIC8qIFxcICovXG4gIENIQVJfQkFDS1RJQ0s6ICdgJywgLyogYCAqL1xuICBDSEFSX0NBUlJJQUdFX1JFVFVSTjogJ1xccicsIC8qIFxcciAqL1xuICBDSEFSX0NJUkNVTUZMRVhfQUNDRU5UOiAnXicsIC8qIF4gKi9cbiAgQ0hBUl9DT0xPTjogJzonLCAvKiA6ICovXG4gIENIQVJfQ09NTUE6ICcsJywgLyogLCAqL1xuICBDSEFSX0RPTExBUjogJyQnLCAvKiAuICovXG4gIENIQVJfRE9UOiAnLicsIC8qIC4gKi9cbiAgQ0hBUl9ET1VCTEVfUVVPVEU6ICdcIicsIC8qIFwiICovXG4gIENIQVJfRVFVQUw6ICc9JywgLyogPSAqL1xuICBDSEFSX0VYQ0xBTUFUSU9OX01BUks6ICchJywgLyogISAqL1xuICBDSEFSX0ZPUk1fRkVFRDogJ1xcZicsIC8qIFxcZiAqL1xuICBDSEFSX0ZPUldBUkRfU0xBU0g6ICcvJywgLyogLyAqL1xuICBDSEFSX0hBU0g6ICcjJywgLyogIyAqL1xuICBDSEFSX0hZUEhFTl9NSU5VUzogJy0nLCAvKiAtICovXG4gIENIQVJfTEVGVF9BTkdMRV9CUkFDS0VUOiAnPCcsIC8qIDwgKi9cbiAgQ0hBUl9MRUZUX0NVUkxZX0JSQUNFOiAneycsIC8qIHsgKi9cbiAgQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUOiAnWycsIC8qIFsgKi9cbiAgQ0hBUl9MSU5FX0ZFRUQ6ICdcXG4nLCAvKiBcXG4gKi9cbiAgQ0hBUl9OT19CUkVBS19TUEFDRTogJ1xcdTAwQTAnLCAvKiBcXHUwMEEwICovXG4gIENIQVJfUEVSQ0VOVDogJyUnLCAvKiAlICovXG4gIENIQVJfUExVUzogJysnLCAvKiArICovXG4gIENIQVJfUVVFU1RJT05fTUFSSzogJz8nLCAvKiA/ICovXG4gIENIQVJfUklHSFRfQU5HTEVfQlJBQ0tFVDogJz4nLCAvKiA+ICovXG4gIENIQVJfUklHSFRfQ1VSTFlfQlJBQ0U6ICd9JywgLyogfSAqL1xuICBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUOiAnXScsIC8qIF0gKi9cbiAgQ0hBUl9TRU1JQ09MT046ICc7JywgLyogOyAqL1xuICBDSEFSX1NJTkdMRV9RVU9URTogJ1xcJycsIC8qICcgKi9cbiAgQ0hBUl9TUEFDRTogJyAnLCAvKiAgICovXG4gIENIQVJfVEFCOiAnXFx0JywgLyogXFx0ICovXG4gIENIQVJfVU5ERVJTQ09SRTogJ18nLCAvKiBfICovXG4gIENIQVJfVkVSVElDQUxfTElORTogJ3wnLCAvKiB8ICovXG4gIENIQVJfWkVST19XSURUSF9OT0JSRUFLX1NQQUNFOiAnXFx1RkVGRicgLyogXFx1RkVGRiAqL1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vc3RyaW5naWZ5Jyk7XG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3Qge1xuICBNQVhfTEVOR1RILFxuICBDSEFSX0JBQ0tTTEFTSCwgLyogXFwgKi9cbiAgQ0hBUl9CQUNLVElDSywgLyogYCAqL1xuICBDSEFSX0NPTU1BLCAvKiAsICovXG4gIENIQVJfRE9ULCAvKiAuICovXG4gIENIQVJfTEVGVF9QQVJFTlRIRVNFUywgLyogKCAqL1xuICBDSEFSX1JJR0hUX1BBUkVOVEhFU0VTLCAvKiApICovXG4gIENIQVJfTEVGVF9DVVJMWV9CUkFDRSwgLyogeyAqL1xuICBDSEFSX1JJR0hUX0NVUkxZX0JSQUNFLCAvKiB9ICovXG4gIENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVCwgLyogWyAqL1xuICBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VULCAvKiBdICovXG4gIENIQVJfRE9VQkxFX1FVT1RFLCAvKiBcIiAqL1xuICBDSEFSX1NJTkdMRV9RVU9URSwgLyogJyAqL1xuICBDSEFSX05PX0JSRUFLX1NQQUNFLFxuICBDSEFSX1pFUk9fV0lEVEhfTk9CUkVBS19TUEFDRVxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJyk7XG5cbi8qKlxuICogcGFyc2VcbiAqL1xuXG5jb25zdCBwYXJzZSA9IChpbnB1dCwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIGxldCBvcHRzID0gb3B0aW9ucyB8fCB7fTtcbiAgbGV0IG1heCA9IHR5cGVvZiBvcHRzLm1heExlbmd0aCA9PT0gJ251bWJlcicgPyBNYXRoLm1pbihNQVhfTEVOR1RILCBvcHRzLm1heExlbmd0aCkgOiBNQVhfTEVOR1RIO1xuICBpZiAoaW5wdXQubGVuZ3RoID4gbWF4KSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBJbnB1dCBsZW5ndGggKCR7aW5wdXQubGVuZ3RofSksIGV4Y2VlZHMgbWF4IGNoYXJhY3RlcnMgKCR7bWF4fSlgKTtcbiAgfVxuXG4gIGxldCBhc3QgPSB7IHR5cGU6ICdyb290JywgaW5wdXQsIG5vZGVzOiBbXSB9O1xuICBsZXQgc3RhY2sgPSBbYXN0XTtcbiAgbGV0IGJsb2NrID0gYXN0O1xuICBsZXQgcHJldiA9IGFzdDtcbiAgbGV0IGJyYWNrZXRzID0gMDtcbiAgbGV0IGxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcbiAgbGV0IGluZGV4ID0gMDtcbiAgbGV0IGRlcHRoID0gMDtcbiAgbGV0IHZhbHVlO1xuICBsZXQgbWVtbyA9IHt9O1xuXG4gIC8qKlxuICAgKiBIZWxwZXJzXG4gICAqL1xuXG4gIGNvbnN0IGFkdmFuY2UgPSAoKSA9PiBpbnB1dFtpbmRleCsrXTtcbiAgY29uc3QgcHVzaCA9IG5vZGUgPT4ge1xuICAgIGlmIChub2RlLnR5cGUgPT09ICd0ZXh0JyAmJiBwcmV2LnR5cGUgPT09ICdkb3QnKSB7XG4gICAgICBwcmV2LnR5cGUgPSAndGV4dCc7XG4gICAgfVxuXG4gICAgaWYgKHByZXYgJiYgcHJldi50eXBlID09PSAndGV4dCcgJiYgbm9kZS50eXBlID09PSAndGV4dCcpIHtcbiAgICAgIHByZXYudmFsdWUgKz0gbm9kZS52YWx1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBibG9jay5ub2Rlcy5wdXNoKG5vZGUpO1xuICAgIG5vZGUucGFyZW50ID0gYmxvY2s7XG4gICAgbm9kZS5wcmV2ID0gcHJldjtcbiAgICBwcmV2ID0gbm9kZTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcblxuICBwdXNoKHsgdHlwZTogJ2JvcycgfSk7XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgYmxvY2sgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICB2YWx1ZSA9IGFkdmFuY2UoKTtcblxuICAgIC8qKlxuICAgICAqIEludmFsaWQgY2hhcnNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gQ0hBUl9aRVJPX1dJRFRIX05PQlJFQUtfU1BBQ0UgfHwgdmFsdWUgPT09IENIQVJfTk9fQlJFQUtfU1BBQ0UpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVzY2FwZWQgY2hhcnNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gQ0hBUl9CQUNLU0xBU0gpIHtcbiAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlOiAob3B0aW9ucy5rZWVwRXNjYXBpbmcgPyB2YWx1ZSA6ICcnKSArIGFkdmFuY2UoKSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJpZ2h0IHNxdWFyZSBicmFja2V0IChsaXRlcmFsKTogJ10nXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09IENIQVJfUklHSFRfU1FVQVJFX0JSQUNLRVQpIHtcbiAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlOiAnXFxcXCcgKyB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExlZnQgc3F1YXJlIGJyYWNrZXQ6ICdbJ1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQpIHtcbiAgICAgIGJyYWNrZXRzKys7XG5cbiAgICAgIGxldCBjbG9zZWQgPSB0cnVlO1xuICAgICAgbGV0IG5leHQ7XG5cbiAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCAmJiAobmV4dCA9IGFkdmFuY2UoKSkpIHtcbiAgICAgICAgdmFsdWUgKz0gbmV4dDtcblxuICAgICAgICBpZiAobmV4dCA9PT0gQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUKSB7XG4gICAgICAgICAgYnJhY2tldHMrKztcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0ID09PSBDSEFSX0JBQ0tTTEFTSCkge1xuICAgICAgICAgIHZhbHVlICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0ID09PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUKSB7XG4gICAgICAgICAgYnJhY2tldHMtLTtcblxuICAgICAgICAgIGlmIChicmFja2V0cyA9PT0gMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFyZW50aGVzZXNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gQ0hBUl9MRUZUX1BBUkVOVEhFU0VTKSB7XG4gICAgICBibG9jayA9IHB1c2goeyB0eXBlOiAncGFyZW4nLCBub2RlczogW10gfSk7XG4gICAgICBzdGFjay5wdXNoKGJsb2NrKTtcbiAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSBDSEFSX1JJR0hUX1BBUkVOVEhFU0VTKSB7XG4gICAgICBpZiAoYmxvY2sudHlwZSAhPT0gJ3BhcmVuJykge1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZSB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBibG9jayA9IHN0YWNrLnBvcCgpO1xuICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICBibG9jayA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUXVvdGVzOiAnfFwifGBcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gQ0hBUl9ET1VCTEVfUVVPVEUgfHwgdmFsdWUgPT09IENIQVJfU0lOR0xFX1FVT1RFIHx8IHZhbHVlID09PSBDSEFSX0JBQ0tUSUNLKSB7XG4gICAgICBsZXQgb3BlbiA9IHZhbHVlO1xuICAgICAgbGV0IG5leHQ7XG5cbiAgICAgIGlmIChvcHRpb25zLmtlZXBRdW90ZXMgIT09IHRydWUpIHtcbiAgICAgICAgdmFsdWUgPSAnJztcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoICYmIChuZXh0ID0gYWR2YW5jZSgpKSkge1xuICAgICAgICBpZiAobmV4dCA9PT0gQ0hBUl9CQUNLU0xBU0gpIHtcbiAgICAgICAgICB2YWx1ZSArPSBuZXh0ICsgYWR2YW5jZSgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHQgPT09IG9wZW4pIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5rZWVwUXVvdGVzID09PSB0cnVlKSB2YWx1ZSArPSBuZXh0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsdWUgKz0gbmV4dDtcbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMZWZ0IGN1cmx5IGJyYWNlOiAneydcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gQ0hBUl9MRUZUX0NVUkxZX0JSQUNFKSB7XG4gICAgICBkZXB0aCsrO1xuXG4gICAgICBsZXQgZG9sbGFyID0gcHJldi52YWx1ZSAmJiBwcmV2LnZhbHVlLnNsaWNlKC0xKSA9PT0gJyQnIHx8IGJsb2NrLmRvbGxhciA9PT0gdHJ1ZTtcbiAgICAgIGxldCBicmFjZSA9IHtcbiAgICAgICAgdHlwZTogJ2JyYWNlJyxcbiAgICAgICAgb3BlbjogdHJ1ZSxcbiAgICAgICAgY2xvc2U6IGZhbHNlLFxuICAgICAgICBkb2xsYXIsXG4gICAgICAgIGRlcHRoLFxuICAgICAgICBjb21tYXM6IDAsXG4gICAgICAgIHJhbmdlczogMCxcbiAgICAgICAgbm9kZXM6IFtdXG4gICAgICB9O1xuXG4gICAgICBibG9jayA9IHB1c2goYnJhY2UpO1xuICAgICAgc3RhY2sucHVzaChibG9jayk7XG4gICAgICBwdXNoKHsgdHlwZTogJ29wZW4nLCB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJpZ2h0IGN1cmx5IGJyYWNlOiAnfSdcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gQ0hBUl9SSUdIVF9DVVJMWV9CUkFDRSkge1xuICAgICAgaWYgKGJsb2NrLnR5cGUgIT09ICdicmFjZScpIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgdHlwZSA9ICdjbG9zZSc7XG4gICAgICBibG9jayA9IHN0YWNrLnBvcCgpO1xuICAgICAgYmxvY2suY2xvc2UgPSB0cnVlO1xuXG4gICAgICBwdXNoKHsgdHlwZSwgdmFsdWUgfSk7XG4gICAgICBkZXB0aC0tO1xuXG4gICAgICBibG9jayA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tbWE6ICcsJ1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSBDSEFSX0NPTU1BICYmIGRlcHRoID4gMCkge1xuICAgICAgaWYgKGJsb2NrLnJhbmdlcyA+IDApIHtcbiAgICAgICAgYmxvY2sucmFuZ2VzID0gMDtcbiAgICAgICAgbGV0IG9wZW4gPSBibG9jay5ub2Rlcy5zaGlmdCgpO1xuICAgICAgICBibG9jay5ub2RlcyA9IFtvcGVuLCB7IHR5cGU6ICd0ZXh0JywgdmFsdWU6IHN0cmluZ2lmeShibG9jaykgfV07XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAnY29tbWEnLCB2YWx1ZSB9KTtcbiAgICAgIGJsb2NrLmNvbW1hcysrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRG90OiAnLidcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gQ0hBUl9ET1QgJiYgZGVwdGggPiAwICYmIGJsb2NrLmNvbW1hcyA9PT0gMCkge1xuICAgICAgbGV0IHNpYmxpbmdzID0gYmxvY2subm9kZXM7XG5cbiAgICAgIGlmIChkZXB0aCA9PT0gMCB8fCBzaWJsaW5ncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJldi50eXBlID09PSAnZG90Jykge1xuICAgICAgICBibG9jay5yYW5nZSA9IFtdO1xuICAgICAgICBwcmV2LnZhbHVlICs9IHZhbHVlO1xuICAgICAgICBwcmV2LnR5cGUgPSAncmFuZ2UnO1xuXG4gICAgICAgIGlmIChibG9jay5ub2Rlcy5sZW5ndGggIT09IDMgJiYgYmxvY2subm9kZXMubGVuZ3RoICE9PSA1KSB7XG4gICAgICAgICAgYmxvY2suaW52YWxpZCA9IHRydWU7XG4gICAgICAgICAgYmxvY2sucmFuZ2VzID0gMDtcbiAgICAgICAgICBwcmV2LnR5cGUgPSAndGV4dCc7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBibG9jay5yYW5nZXMrKztcbiAgICAgICAgYmxvY2suYXJncyA9IFtdO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByZXYudHlwZSA9PT0gJ3JhbmdlJykge1xuICAgICAgICBzaWJsaW5ncy5wb3AoKTtcblxuICAgICAgICBsZXQgYmVmb3JlID0gc2libGluZ3Nbc2libGluZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgIGJlZm9yZS52YWx1ZSArPSBwcmV2LnZhbHVlICsgdmFsdWU7XG4gICAgICAgIHByZXYgPSBiZWZvcmU7XG4gICAgICAgIGJsb2NrLnJhbmdlcy0tO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICdkb3QnLCB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRleHRcbiAgICAgKi9cblxuICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlIH0pO1xuICB9XG5cbiAgLy8gTWFyayBpbWJhbGFuY2VkIGJyYWNlcyBhbmQgYnJhY2tldHMgYXMgaW52YWxpZFxuICBkbyB7XG4gICAgYmxvY2sgPSBzdGFjay5wb3AoKTtcblxuICAgIGlmIChibG9jay50eXBlICE9PSAncm9vdCcpIHtcbiAgICAgIGJsb2NrLm5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgIGlmICghbm9kZS5ub2Rlcykge1xuICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09ICdvcGVuJykgbm9kZS5pc09wZW4gPSB0cnVlO1xuICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09ICdjbG9zZScpIG5vZGUuaXNDbG9zZSA9IHRydWU7XG4gICAgICAgICAgaWYgKCFub2RlLm5vZGVzKSBub2RlLnR5cGUgPSAndGV4dCc7XG4gICAgICAgICAgbm9kZS5pbnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGdldCB0aGUgbG9jYXRpb24gb2YgdGhlIGJsb2NrIG9uIHBhcmVudC5ub2RlcyAoYmxvY2sncyBzaWJsaW5ncylcbiAgICAgIGxldCBwYXJlbnQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgIGxldCBpbmRleCA9IHBhcmVudC5ub2Rlcy5pbmRleE9mKGJsb2NrKTtcbiAgICAgIC8vIHJlcGxhY2UgdGhlIChpbnZhbGlkKSBibG9jayB3aXRoIGl0J3Mgbm9kZXNcbiAgICAgIHBhcmVudC5ub2Rlcy5zcGxpY2UoaW5kZXgsIDEsIC4uLmJsb2NrLm5vZGVzKTtcbiAgICB9XG4gIH0gd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApO1xuXG4gIHB1c2goeyB0eXBlOiAnZW9zJyB9KTtcbiAgcmV0dXJuIGFzdDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBzdHJpbmdpZnkgPSByZXF1aXJlKCcuL2xpYi9zdHJpbmdpZnknKTtcbmNvbnN0IGNvbXBpbGUgPSByZXF1aXJlKCcuL2xpYi9jb21waWxlJyk7XG5jb25zdCBleHBhbmQgPSByZXF1aXJlKCcuL2xpYi9leHBhbmQnKTtcbmNvbnN0IHBhcnNlID0gcmVxdWlyZSgnLi9saWIvcGFyc2UnKTtcblxuLyoqXG4gKiBFeHBhbmQgdGhlIGdpdmVuIHBhdHRlcm4gb3IgY3JlYXRlIGEgcmVnZXgtY29tcGF0aWJsZSBzdHJpbmcuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGJyYWNlcyA9IHJlcXVpcmUoJ2JyYWNlcycpO1xuICogY29uc29sZS5sb2coYnJhY2VzKCd7YSxiLGN9JywgeyBjb21waWxlOiB0cnVlIH0pKTsgLy89PiBbJyhhfGJ8YyknXVxuICogY29uc29sZS5sb2coYnJhY2VzKCd7YSxiLGN9JykpOyAvLz0+IFsnYScsICdiJywgJ2MnXVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYHN0cmBcbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuY29uc3QgYnJhY2VzID0gKGlucHV0LCBvcHRpb25zID0ge30pID0+IHtcbiAgbGV0IG91dHB1dCA9IFtdO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgIGZvciAobGV0IHBhdHRlcm4gb2YgaW5wdXQpIHtcbiAgICAgIGxldCByZXN1bHQgPSBicmFjZXMuY3JlYXRlKHBhdHRlcm4sIG9wdGlvbnMpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICBvdXRwdXQucHVzaCguLi5yZXN1bHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0LnB1c2gocmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0cHV0ID0gW10uY29uY2F0KGJyYWNlcy5jcmVhdGUoaW5wdXQsIG9wdGlvbnMpKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZXhwYW5kID09PSB0cnVlICYmIG9wdGlvbnMubm9kdXBlcyA9PT0gdHJ1ZSkge1xuICAgIG91dHB1dCA9IFsuLi5uZXcgU2V0KG91dHB1dCldO1xuICB9XG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBnaXZlbiBgc3RyYCB3aXRoIHRoZSBnaXZlbiBgb3B0aW9uc2AuXG4gKlxuICogYGBganNcbiAqIC8vIGJyYWNlcy5wYXJzZShwYXR0ZXJuLCBbLCBvcHRpb25zXSk7XG4gKiBjb25zdCBhc3QgPSBicmFjZXMucGFyc2UoJ2Eve2IsY30vZCcpO1xuICogY29uc29sZS5sb2coYXN0KTtcbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IHBhdHRlcm4gQnJhY2UgcGF0dGVybiB0byBwYXJzZVxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyBhbiBBU1RcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuYnJhY2VzLnBhcnNlID0gKGlucHV0LCBvcHRpb25zID0ge30pID0+IHBhcnNlKGlucHV0LCBvcHRpb25zKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgYnJhY2VzIHN0cmluZyBmcm9tIGFuIEFTVCwgb3IgYW4gQVNUIG5vZGUuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGJyYWNlcyA9IHJlcXVpcmUoJ2JyYWNlcycpO1xuICogbGV0IGFzdCA9IGJyYWNlcy5wYXJzZSgnZm9vL3thLGJ9L2JhcicpO1xuICogY29uc29sZS5sb2coc3RyaW5naWZ5KGFzdC5ub2Rlc1syXSkpOyAvLz0+ICd7YSxifSdcbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBpbnB1dGAgQnJhY2UgcGF0dGVybiBvciBBU1QuXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgXG4gKiBAcmV0dXJuIHtBcnJheX0gUmV0dXJucyBhbiBhcnJheSBvZiBleHBhbmRlZCB2YWx1ZXMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmJyYWNlcy5zdHJpbmdpZnkgPSAoaW5wdXQsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBzdHJpbmdpZnkoYnJhY2VzLnBhcnNlKGlucHV0LCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIHN0cmluZ2lmeShpbnB1dCwgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIENvbXBpbGVzIGEgYnJhY2UgcGF0dGVybiBpbnRvIGEgcmVnZXgtY29tcGF0aWJsZSwgb3B0aW1pemVkIHN0cmluZy5cbiAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgbWFpbiBbYnJhY2VzXSgjYnJhY2VzKSBmdW5jdGlvbiBieSBkZWZhdWx0LlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBicmFjZXMgPSByZXF1aXJlKCdicmFjZXMnKTtcbiAqIGNvbnNvbGUubG9nKGJyYWNlcy5jb21waWxlKCdhL3tiLGN9L2QnKSk7XG4gKiAvLz0+IFsnYS8oYnxjKS9kJ11cbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBpbnB1dGAgQnJhY2UgcGF0dGVybiBvciBBU1QuXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgXG4gKiBAcmV0dXJuIHtBcnJheX0gUmV0dXJucyBhbiBhcnJheSBvZiBleHBhbmRlZCB2YWx1ZXMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmJyYWNlcy5jb21waWxlID0gKGlucHV0LCBvcHRpb25zID0ge30pID0+IHtcbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICBpbnB1dCA9IGJyYWNlcy5wYXJzZShpbnB1dCwgb3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIGNvbXBpbGUoaW5wdXQsIG9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBFeHBhbmRzIGEgYnJhY2UgcGF0dGVybiBpbnRvIGFuIGFycmF5LiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlXG4gKiBtYWluIFticmFjZXNdKCNicmFjZXMpIGZ1bmN0aW9uIHdoZW4gYG9wdGlvbnMuZXhwYW5kYCBpcyB0cnVlLiBCZWZvcmVcbiAqIHVzaW5nIHRoaXMgbWV0aG9kIGl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UgcmVhZCB0aGUgW3BlcmZvcm1hbmNlIG5vdGVzXSgjcGVyZm9ybWFuY2UpKVxuICogYW5kIGFkdmFudGFnZXMgb2YgdXNpbmcgWy5jb21waWxlXSgjY29tcGlsZSkgaW5zdGVhZC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYnJhY2VzID0gcmVxdWlyZSgnYnJhY2VzJyk7XG4gKiBjb25zb2xlLmxvZyhicmFjZXMuZXhwYW5kKCdhL3tiLGN9L2QnKSk7XG4gKiAvLz0+IFsnYS9iL2QnLCAnYS9jL2QnXTtcbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBwYXR0ZXJuYCBCcmFjZSBwYXR0ZXJuXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgXG4gKiBAcmV0dXJuIHtBcnJheX0gUmV0dXJucyBhbiBhcnJheSBvZiBleHBhbmRlZCB2YWx1ZXMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmJyYWNlcy5leHBhbmQgPSAoaW5wdXQsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgIGlucHV0ID0gYnJhY2VzLnBhcnNlKGlucHV0LCBvcHRpb25zKTtcbiAgfVxuXG4gIGxldCByZXN1bHQgPSBleHBhbmQoaW5wdXQsIG9wdGlvbnMpO1xuXG4gIC8vIGZpbHRlciBvdXQgZW1wdHkgc3RyaW5ncyBpZiBzcGVjaWZpZWRcbiAgaWYgKG9wdGlvbnMubm9lbXB0eSA9PT0gdHJ1ZSkge1xuICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoQm9vbGVhbik7XG4gIH1cblxuICAvLyBmaWx0ZXIgb3V0IGR1cGxpY2F0ZXMgaWYgc3BlY2lmaWVkXG4gIGlmIChvcHRpb25zLm5vZHVwZXMgPT09IHRydWUpIHtcbiAgICByZXN1bHQgPSBbLi4ubmV3IFNldChyZXN1bHQpXTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyBhIGJyYWNlIHBhdHRlcm4gYW5kIHJldHVybnMgZWl0aGVyIGFuIGV4cGFuZGVkIGFycmF5XG4gKiAoaWYgYG9wdGlvbnMuZXhwYW5kYCBpcyB0cnVlKSwgYSBoaWdobHkgb3B0aW1pemVkIHJlZ2V4LWNvbXBhdGlibGUgc3RyaW5nLlxuICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBtYWluIFticmFjZXNdKCNicmFjZXMpIGZ1bmN0aW9uLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBicmFjZXMgPSByZXF1aXJlKCdicmFjZXMnKTtcbiAqIGNvbnNvbGUubG9nKGJyYWNlcy5jcmVhdGUoJ3VzZXItezIwMC4uMzAwfS9wcm9qZWN0LXthLGIsY30tezEuLjEwfScpKVxuICogLy89PiAndXNlci0oMjBbMC05XXwyWzEtOV1bMC05XXwzMDApL3Byb2plY3QtKGF8YnxjKS0oWzEtOV18MTApJ1xuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYHBhdHRlcm5gIEJyYWNlIHBhdHRlcm5cbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEByZXR1cm4ge0FycmF5fSBSZXR1cm5zIGFuIGFycmF5IG9mIGV4cGFuZGVkIHZhbHVlcy5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuYnJhY2VzLmNyZWF0ZSA9IChpbnB1dCwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGlmIChpbnB1dCA9PT0gJycgfHwgaW5wdXQubGVuZ3RoIDwgMykge1xuICAgIHJldHVybiBbaW5wdXRdO1xuICB9XG5cbiByZXR1cm4gb3B0aW9ucy5leHBhbmQgIT09IHRydWVcbiAgICA/IGJyYWNlcy5jb21waWxlKGlucHV0LCBvcHRpb25zKVxuICAgIDogYnJhY2VzLmV4cGFuZChpbnB1dCwgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIEV4cG9zZSBcImJyYWNlc1wiXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBicmFjZXM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3QgV0lOX1NMQVNIID0gJ1xcXFxcXFxcLyc7XG5jb25zdCBXSU5fTk9fU0xBU0ggPSBgW14ke1dJTl9TTEFTSH1dYDtcblxuLyoqXG4gKiBQb3NpeCBnbG9iIHJlZ2V4XG4gKi9cblxuY29uc3QgRE9UX0xJVEVSQUwgPSAnXFxcXC4nO1xuY29uc3QgUExVU19MSVRFUkFMID0gJ1xcXFwrJztcbmNvbnN0IFFNQVJLX0xJVEVSQUwgPSAnXFxcXD8nO1xuY29uc3QgU0xBU0hfTElURVJBTCA9ICdcXFxcLyc7XG5jb25zdCBPTkVfQ0hBUiA9ICcoPz0uKSc7XG5jb25zdCBRTUFSSyA9ICdbXi9dJztcbmNvbnN0IEVORF9BTkNIT1IgPSBgKD86JHtTTEFTSF9MSVRFUkFMfXwkKWA7XG5jb25zdCBTVEFSVF9BTkNIT1IgPSBgKD86Xnwke1NMQVNIX0xJVEVSQUx9KWA7XG5jb25zdCBET1RTX1NMQVNIID0gYCR7RE9UX0xJVEVSQUx9ezEsMn0ke0VORF9BTkNIT1J9YDtcbmNvbnN0IE5PX0RPVCA9IGAoPyEke0RPVF9MSVRFUkFMfSlgO1xuY29uc3QgTk9fRE9UUyA9IGAoPyEke1NUQVJUX0FOQ0hPUn0ke0RPVFNfU0xBU0h9KWA7XG5jb25zdCBOT19ET1RfU0xBU0ggPSBgKD8hJHtET1RfTElURVJBTH17MCwxfSR7RU5EX0FOQ0hPUn0pYDtcbmNvbnN0IE5PX0RPVFNfU0xBU0ggPSBgKD8hJHtET1RTX1NMQVNIfSlgO1xuY29uc3QgUU1BUktfTk9fRE9UID0gYFteLiR7U0xBU0hfTElURVJBTH1dYDtcbmNvbnN0IFNUQVIgPSBgJHtRTUFSS30qP2A7XG5cbmNvbnN0IFBPU0lYX0NIQVJTID0ge1xuICBET1RfTElURVJBTCxcbiAgUExVU19MSVRFUkFMLFxuICBRTUFSS19MSVRFUkFMLFxuICBTTEFTSF9MSVRFUkFMLFxuICBPTkVfQ0hBUixcbiAgUU1BUkssXG4gIEVORF9BTkNIT1IsXG4gIERPVFNfU0xBU0gsXG4gIE5PX0RPVCxcbiAgTk9fRE9UUyxcbiAgTk9fRE9UX1NMQVNILFxuICBOT19ET1RTX1NMQVNILFxuICBRTUFSS19OT19ET1QsXG4gIFNUQVIsXG4gIFNUQVJUX0FOQ0hPUlxufTtcblxuLyoqXG4gKiBXaW5kb3dzIGdsb2IgcmVnZXhcbiAqL1xuXG5jb25zdCBXSU5ET1dTX0NIQVJTID0ge1xuICAuLi5QT1NJWF9DSEFSUyxcblxuICBTTEFTSF9MSVRFUkFMOiBgWyR7V0lOX1NMQVNIfV1gLFxuICBRTUFSSzogV0lOX05PX1NMQVNILFxuICBTVEFSOiBgJHtXSU5fTk9fU0xBU0h9Kj9gLFxuICBET1RTX1NMQVNIOiBgJHtET1RfTElURVJBTH17MSwyfSg/Olske1dJTl9TTEFTSH1dfCQpYCxcbiAgTk9fRE9UOiBgKD8hJHtET1RfTElURVJBTH0pYCxcbiAgTk9fRE9UUzogYCg/ISg/Ol58WyR7V0lOX1NMQVNIfV0pJHtET1RfTElURVJBTH17MSwyfSg/Olske1dJTl9TTEFTSH1dfCQpKWAsXG4gIE5PX0RPVF9TTEFTSDogYCg/ISR7RE9UX0xJVEVSQUx9ezAsMX0oPzpbJHtXSU5fU0xBU0h9XXwkKSlgLFxuICBOT19ET1RTX1NMQVNIOiBgKD8hJHtET1RfTElURVJBTH17MSwyfSg/Olske1dJTl9TTEFTSH1dfCQpKWAsXG4gIFFNQVJLX05PX0RPVDogYFteLiR7V0lOX1NMQVNIfV1gLFxuICBTVEFSVF9BTkNIT1I6IGAoPzpefFske1dJTl9TTEFTSH1dKWAsXG4gIEVORF9BTkNIT1I6IGAoPzpbJHtXSU5fU0xBU0h9XXwkKWBcbn07XG5cbi8qKlxuICogUE9TSVggQnJhY2tldCBSZWdleFxuICovXG5cbmNvbnN0IFBPU0lYX1JFR0VYX1NPVVJDRSA9IHtcbiAgYWxudW06ICdhLXpBLVowLTknLFxuICBhbHBoYTogJ2EtekEtWicsXG4gIGFzY2lpOiAnXFxcXHgwMC1cXFxceDdGJyxcbiAgYmxhbms6ICcgXFxcXHQnLFxuICBjbnRybDogJ1xcXFx4MDAtXFxcXHgxRlxcXFx4N0YnLFxuICBkaWdpdDogJzAtOScsXG4gIGdyYXBoOiAnXFxcXHgyMS1cXFxceDdFJyxcbiAgbG93ZXI6ICdhLXonLFxuICBwcmludDogJ1xcXFx4MjAtXFxcXHg3RSAnLFxuICBwdW5jdDogJ1xcXFwtIVwiIyQlJlxcJygpXFxcXCorLC4vOjs8PT4/QFtcXFxcXV5fYHt8fX4nLFxuICBzcGFjZTogJyBcXFxcdFxcXFxyXFxcXG5cXFxcdlxcXFxmJyxcbiAgdXBwZXI6ICdBLVonLFxuICB3b3JkOiAnQS1aYS16MC05XycsXG4gIHhkaWdpdDogJ0EtRmEtZjAtOSdcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNQVhfTEVOR1RIOiAxMDI0ICogNjQsXG4gIFBPU0lYX1JFR0VYX1NPVVJDRSxcblxuICAvLyByZWd1bGFyIGV4cHJlc3Npb25zXG4gIFJFR0VYX0JBQ0tTTEFTSDogL1xcXFwoPyFbKis/XiR7fSh8KVtcXF1dKS9nLFxuICBSRUdFWF9OT05fU1BFQ0lBTF9DSEFSUzogL15bXkAhW1xcXS4sJCorP157fSgpfFxcXFwvXSsvLFxuICBSRUdFWF9TUEVDSUFMX0NIQVJTOiAvWy0qKz8uXiR7fSh8KVtcXF1dLyxcbiAgUkVHRVhfU1BFQ0lBTF9DSEFSU19CQUNLUkVGOiAvKFxcXFw/KSgoXFxXKShcXDMqKSkvZyxcbiAgUkVHRVhfU1BFQ0lBTF9DSEFSU19HTE9CQUw6IC8oWy0qKz8uXiR7fSh8KVtcXF1dKS9nLFxuICBSRUdFWF9SRU1PVkVfQkFDS1NMQVNIOiAvKD86XFxbLio/W15cXFxcXVxcXXxcXFxcKD89LikpL2csXG5cbiAgLy8gUmVwbGFjZSBnbG9icyB3aXRoIGVxdWl2YWxlbnQgcGF0dGVybnMgdG8gcmVkdWNlIHBhcnNpbmcgdGltZS5cbiAgUkVQTEFDRU1FTlRTOiB7XG4gICAgJyoqKic6ICcqJyxcbiAgICAnKiovKionOiAnKionLFxuICAgICcqKi8qKi8qKic6ICcqKidcbiAgfSxcblxuICAvLyBEaWdpdHNcbiAgQ0hBUl8wOiA0OCwgLyogMCAqL1xuICBDSEFSXzk6IDU3LCAvKiA5ICovXG5cbiAgLy8gQWxwaGFiZXQgY2hhcnMuXG4gIENIQVJfVVBQRVJDQVNFX0E6IDY1LCAvKiBBICovXG4gIENIQVJfTE9XRVJDQVNFX0E6IDk3LCAvKiBhICovXG4gIENIQVJfVVBQRVJDQVNFX1o6IDkwLCAvKiBaICovXG4gIENIQVJfTE9XRVJDQVNFX1o6IDEyMiwgLyogeiAqL1xuXG4gIENIQVJfTEVGVF9QQVJFTlRIRVNFUzogNDAsIC8qICggKi9cbiAgQ0hBUl9SSUdIVF9QQVJFTlRIRVNFUzogNDEsIC8qICkgKi9cblxuICBDSEFSX0FTVEVSSVNLOiA0MiwgLyogKiAqL1xuXG4gIC8vIE5vbi1hbHBoYWJldGljIGNoYXJzLlxuICBDSEFSX0FNUEVSU0FORDogMzgsIC8qICYgKi9cbiAgQ0hBUl9BVDogNjQsIC8qIEAgKi9cbiAgQ0hBUl9CQUNLV0FSRF9TTEFTSDogOTIsIC8qIFxcICovXG4gIENIQVJfQ0FSUklBR0VfUkVUVVJOOiAxMywgLyogXFxyICovXG4gIENIQVJfQ0lSQ1VNRkxFWF9BQ0NFTlQ6IDk0LCAvKiBeICovXG4gIENIQVJfQ09MT046IDU4LCAvKiA6ICovXG4gIENIQVJfQ09NTUE6IDQ0LCAvKiAsICovXG4gIENIQVJfRE9UOiA0NiwgLyogLiAqL1xuICBDSEFSX0RPVUJMRV9RVU9URTogMzQsIC8qIFwiICovXG4gIENIQVJfRVFVQUw6IDYxLCAvKiA9ICovXG4gIENIQVJfRVhDTEFNQVRJT05fTUFSSzogMzMsIC8qICEgKi9cbiAgQ0hBUl9GT1JNX0ZFRUQ6IDEyLCAvKiBcXGYgKi9cbiAgQ0hBUl9GT1JXQVJEX1NMQVNIOiA0NywgLyogLyAqL1xuICBDSEFSX0dSQVZFX0FDQ0VOVDogOTYsIC8qIGAgKi9cbiAgQ0hBUl9IQVNIOiAzNSwgLyogIyAqL1xuICBDSEFSX0hZUEhFTl9NSU5VUzogNDUsIC8qIC0gKi9cbiAgQ0hBUl9MRUZUX0FOR0xFX0JSQUNLRVQ6IDYwLCAvKiA8ICovXG4gIENIQVJfTEVGVF9DVVJMWV9CUkFDRTogMTIzLCAvKiB7ICovXG4gIENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVDogOTEsIC8qIFsgKi9cbiAgQ0hBUl9MSU5FX0ZFRUQ6IDEwLCAvKiBcXG4gKi9cbiAgQ0hBUl9OT19CUkVBS19TUEFDRTogMTYwLCAvKiBcXHUwMEEwICovXG4gIENIQVJfUEVSQ0VOVDogMzcsIC8qICUgKi9cbiAgQ0hBUl9QTFVTOiA0MywgLyogKyAqL1xuICBDSEFSX1FVRVNUSU9OX01BUks6IDYzLCAvKiA/ICovXG4gIENIQVJfUklHSFRfQU5HTEVfQlJBQ0tFVDogNjIsIC8qID4gKi9cbiAgQ0hBUl9SSUdIVF9DVVJMWV9CUkFDRTogMTI1LCAvKiB9ICovXG4gIENIQVJfUklHSFRfU1FVQVJFX0JSQUNLRVQ6IDkzLCAvKiBdICovXG4gIENIQVJfU0VNSUNPTE9OOiA1OSwgLyogOyAqL1xuICBDSEFSX1NJTkdMRV9RVU9URTogMzksIC8qICcgKi9cbiAgQ0hBUl9TUEFDRTogMzIsIC8qICAgKi9cbiAgQ0hBUl9UQUI6IDksIC8qIFxcdCAqL1xuICBDSEFSX1VOREVSU0NPUkU6IDk1LCAvKiBfICovXG4gIENIQVJfVkVSVElDQUxfTElORTogMTI0LCAvKiB8ICovXG4gIENIQVJfWkVST19XSURUSF9OT0JSRUFLX1NQQUNFOiA2NTI3OSwgLyogXFx1RkVGRiAqL1xuXG4gIFNFUDogcGF0aC5zZXAsXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBFWFRHTE9CX0NIQVJTXG4gICAqL1xuXG4gIGV4dGdsb2JDaGFycyhjaGFycykge1xuICAgIHJldHVybiB7XG4gICAgICAnISc6IHsgdHlwZTogJ25lZ2F0ZScsIG9wZW46ICcoPzooPyEoPzonLCBjbG9zZTogYCkpJHtjaGFycy5TVEFSfSlgIH0sXG4gICAgICAnPyc6IHsgdHlwZTogJ3FtYXJrJywgb3BlbjogJyg/OicsIGNsb3NlOiAnKT8nIH0sXG4gICAgICAnKyc6IHsgdHlwZTogJ3BsdXMnLCBvcGVuOiAnKD86JywgY2xvc2U6ICcpKycgfSxcbiAgICAgICcqJzogeyB0eXBlOiAnc3RhcicsIG9wZW46ICcoPzonLCBjbG9zZTogJykqJyB9LFxuICAgICAgJ0AnOiB7IHR5cGU6ICdhdCcsIG9wZW46ICcoPzonLCBjbG9zZTogJyknIH1cbiAgICB9O1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhdGUgR0xPQl9DSEFSU1xuICAgKi9cblxuICBnbG9iQ2hhcnMod2luMzIpIHtcbiAgICByZXR1cm4gd2luMzIgPT09IHRydWUgPyBXSU5ET1dTX0NIQVJTIDogUE9TSVhfQ0hBUlM7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3Qgd2luMzIgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuY29uc3Qge1xuICBSRUdFWF9CQUNLU0xBU0gsXG4gIFJFR0VYX1JFTU9WRV9CQUNLU0xBU0gsXG4gIFJFR0VYX1NQRUNJQUxfQ0hBUlMsXG4gIFJFR0VYX1NQRUNJQUxfQ0hBUlNfR0xPQkFMXG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKTtcblxuZXhwb3J0cy5pc09iamVjdCA9IHZhbCA9PiB2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsKTtcbmV4cG9ydHMuaGFzUmVnZXhDaGFycyA9IHN0ciA9PiBSRUdFWF9TUEVDSUFMX0NIQVJTLnRlc3Qoc3RyKTtcbmV4cG9ydHMuaXNSZWdleENoYXIgPSBzdHIgPT4gc3RyLmxlbmd0aCA9PT0gMSAmJiBleHBvcnRzLmhhc1JlZ2V4Q2hhcnMoc3RyKTtcbmV4cG9ydHMuZXNjYXBlUmVnZXggPSBzdHIgPT4gc3RyLnJlcGxhY2UoUkVHRVhfU1BFQ0lBTF9DSEFSU19HTE9CQUwsICdcXFxcJDEnKTtcbmV4cG9ydHMudG9Qb3NpeFNsYXNoZXMgPSBzdHIgPT4gc3RyLnJlcGxhY2UoUkVHRVhfQkFDS1NMQVNILCAnLycpO1xuXG5leHBvcnRzLnJlbW92ZUJhY2tzbGFzaGVzID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKFJFR0VYX1JFTU9WRV9CQUNLU0xBU0gsIG1hdGNoID0+IHtcbiAgICByZXR1cm4gbWF0Y2ggPT09ICdcXFxcJyA/ICcnIDogbWF0Y2g7XG4gIH0pO1xufTtcblxuZXhwb3J0cy5zdXBwb3J0c0xvb2tiZWhpbmRzID0gKCkgPT4ge1xuICBjb25zdCBzZWdzID0gcHJvY2Vzcy52ZXJzaW9uLnNsaWNlKDEpLnNwbGl0KCcuJykubWFwKE51bWJlcik7XG4gIGlmIChzZWdzLmxlbmd0aCA9PT0gMyAmJiBzZWdzWzBdID49IDkgfHwgKHNlZ3NbMF0gPT09IDggJiYgc2Vnc1sxXSA+PSAxMCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnRzLmlzV2luZG93cyA9IG9wdGlvbnMgPT4ge1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy53aW5kb3dzID09PSAnYm9vbGVhbicpIHtcbiAgICByZXR1cm4gb3B0aW9ucy53aW5kb3dzO1xuICB9XG4gIHJldHVybiB3aW4zMiA9PT0gdHJ1ZSB8fCBwYXRoLnNlcCA9PT0gJ1xcXFwnO1xufTtcblxuZXhwb3J0cy5lc2NhcGVMYXN0ID0gKGlucHV0LCBjaGFyLCBsYXN0SWR4KSA9PiB7XG4gIGNvbnN0IGlkeCA9IGlucHV0Lmxhc3RJbmRleE9mKGNoYXIsIGxhc3RJZHgpO1xuICBpZiAoaWR4ID09PSAtMSkgcmV0dXJuIGlucHV0O1xuICBpZiAoaW5wdXRbaWR4IC0gMV0gPT09ICdcXFxcJykgcmV0dXJuIGV4cG9ydHMuZXNjYXBlTGFzdChpbnB1dCwgY2hhciwgaWR4IC0gMSk7XG4gIHJldHVybiBgJHtpbnB1dC5zbGljZSgwLCBpZHgpfVxcXFwke2lucHV0LnNsaWNlKGlkeCl9YDtcbn07XG5cbmV4cG9ydHMucmVtb3ZlUHJlZml4ID0gKGlucHV0LCBzdGF0ZSA9IHt9KSA9PiB7XG4gIGxldCBvdXRwdXQgPSBpbnB1dDtcbiAgaWYgKG91dHB1dC5zdGFydHNXaXRoKCcuLycpKSB7XG4gICAgb3V0cHV0ID0gb3V0cHV0LnNsaWNlKDIpO1xuICAgIHN0YXRlLnByZWZpeCA9ICcuLyc7XG4gIH1cbiAgcmV0dXJuIG91dHB1dDtcbn07XG5cbmV4cG9ydHMud3JhcE91dHB1dCA9IChpbnB1dCwgc3RhdGUgPSB7fSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHByZXBlbmQgPSBvcHRpb25zLmNvbnRhaW5zID8gJycgOiAnXic7XG4gIGNvbnN0IGFwcGVuZCA9IG9wdGlvbnMuY29udGFpbnMgPyAnJyA6ICckJztcblxuICBsZXQgb3V0cHV0ID0gYCR7cHJlcGVuZH0oPzoke2lucHV0fSkke2FwcGVuZH1gO1xuICBpZiAoc3RhdGUubmVnYXRlZCA9PT0gdHJ1ZSkge1xuICAgIG91dHB1dCA9IGAoPzpeKD8hJHtvdXRwdXR9KS4qJClgO1xuICB9XG4gIHJldHVybiBvdXRwdXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5jb25zdCB7XG4gIENIQVJfQVNURVJJU0ssICAgICAgICAgICAgIC8qICogKi9cbiAgQ0hBUl9BVCwgICAgICAgICAgICAgICAgICAgLyogQCAqL1xuICBDSEFSX0JBQ0tXQVJEX1NMQVNILCAgICAgICAvKiBcXCAqL1xuICBDSEFSX0NPTU1BLCAgICAgICAgICAgICAgICAvKiAsICovXG4gIENIQVJfRE9ULCAgICAgICAgICAgICAgICAgIC8qIC4gKi9cbiAgQ0hBUl9FWENMQU1BVElPTl9NQVJLLCAgICAgLyogISAqL1xuICBDSEFSX0ZPUldBUkRfU0xBU0gsICAgICAgICAvKiAvICovXG4gIENIQVJfTEVGVF9DVVJMWV9CUkFDRSwgICAgIC8qIHsgKi9cbiAgQ0hBUl9MRUZUX1BBUkVOVEhFU0VTLCAgICAgLyogKCAqL1xuICBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQsICAvKiBbICovXG4gIENIQVJfUExVUywgICAgICAgICAgICAgICAgIC8qICsgKi9cbiAgQ0hBUl9RVUVTVElPTl9NQVJLLCAgICAgICAgLyogPyAqL1xuICBDSEFSX1JJR0hUX0NVUkxZX0JSQUNFLCAgICAvKiB9ICovXG4gIENIQVJfUklHSFRfUEFSRU5USEVTRVMsICAgIC8qICkgKi9cbiAgQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCAgLyogXSAqL1xufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJyk7XG5cbmNvbnN0IGlzUGF0aFNlcGFyYXRvciA9IGNvZGUgPT4ge1xuICByZXR1cm4gY29kZSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIIHx8IGNvZGUgPT09IENIQVJfQkFDS1dBUkRfU0xBU0g7XG59O1xuXG5jb25zdCBkZXB0aCA9IHRva2VuID0+IHtcbiAgaWYgKHRva2VuLmlzUHJlZml4ICE9PSB0cnVlKSB7XG4gICAgdG9rZW4uZGVwdGggPSB0b2tlbi5pc0dsb2JzdGFyID8gSW5maW5pdHkgOiAxO1xuICB9XG59O1xuXG4vKipcbiAqIFF1aWNrbHkgc2NhbnMgYSBnbG9iIHBhdHRlcm4gYW5kIHJldHVybnMgYW4gb2JqZWN0IHdpdGggYSBoYW5kZnVsIG9mXG4gKiB1c2VmdWwgcHJvcGVydGllcywgbGlrZSBgaXNHbG9iYCwgYHBhdGhgICh0aGUgbGVhZGluZyBub24tZ2xvYiwgaWYgaXQgZXhpc3RzKSxcbiAqIGBnbG9iYCAodGhlIGFjdHVhbCBwYXR0ZXJuKSwgYG5lZ2F0ZWRgICh0cnVlIGlmIHRoZSBwYXRoIHN0YXJ0cyB3aXRoIGAhYCBidXQgbm90XG4gKiB3aXRoIGAhKGApIGFuZCBgbmVnYXRlZEV4dGdsb2JgICh0cnVlIGlmIHRoZSBwYXRoIHN0YXJ0cyB3aXRoIGAhKGApLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBwbSA9IHJlcXVpcmUoJ3BpY29tYXRjaCcpO1xuICogY29uc29sZS5sb2cocG0uc2NhbignZm9vL2Jhci8qLmpzJykpO1xuICogeyBpc0dsb2I6IHRydWUsIGlucHV0OiAnZm9vL2Jhci8qLmpzJywgYmFzZTogJ2Zvby9iYXInLCBnbG9iOiAnKi5qcycgfVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYHN0cmBcbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0b2tlbnMgYW5kIHJlZ2V4IHNvdXJjZSBzdHJpbmcuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmNvbnN0IHNjYW4gPSAoaW5wdXQsIG9wdGlvbnMpID0+IHtcbiAgY29uc3Qgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgY29uc3QgbGVuZ3RoID0gaW5wdXQubGVuZ3RoIC0gMTtcbiAgY29uc3Qgc2NhblRvRW5kID0gb3B0cy5wYXJ0cyA9PT0gdHJ1ZSB8fCBvcHRzLnNjYW5Ub0VuZCA9PT0gdHJ1ZTtcbiAgY29uc3Qgc2xhc2hlcyA9IFtdO1xuICBjb25zdCB0b2tlbnMgPSBbXTtcbiAgY29uc3QgcGFydHMgPSBbXTtcblxuICBsZXQgc3RyID0gaW5wdXQ7XG4gIGxldCBpbmRleCA9IC0xO1xuICBsZXQgc3RhcnQgPSAwO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgbGV0IGlzQnJhY2UgPSBmYWxzZTtcbiAgbGV0IGlzQnJhY2tldCA9IGZhbHNlO1xuICBsZXQgaXNHbG9iID0gZmFsc2U7XG4gIGxldCBpc0V4dGdsb2IgPSBmYWxzZTtcbiAgbGV0IGlzR2xvYnN0YXIgPSBmYWxzZTtcbiAgbGV0IGJyYWNlRXNjYXBlZCA9IGZhbHNlO1xuICBsZXQgYmFja3NsYXNoZXMgPSBmYWxzZTtcbiAgbGV0IG5lZ2F0ZWQgPSBmYWxzZTtcbiAgbGV0IG5lZ2F0ZWRFeHRnbG9iID0gZmFsc2U7XG4gIGxldCBmaW5pc2hlZCA9IGZhbHNlO1xuICBsZXQgYnJhY2VzID0gMDtcbiAgbGV0IHByZXY7XG4gIGxldCBjb2RlO1xuICBsZXQgdG9rZW4gPSB7IHZhbHVlOiAnJywgZGVwdGg6IDAsIGlzR2xvYjogZmFsc2UgfTtcblxuICBjb25zdCBlb3MgPSAoKSA9PiBpbmRleCA+PSBsZW5ndGg7XG4gIGNvbnN0IHBlZWsgPSAoKSA9PiBzdHIuY2hhckNvZGVBdChpbmRleCArIDEpO1xuICBjb25zdCBhZHZhbmNlID0gKCkgPT4ge1xuICAgIHByZXYgPSBjb2RlO1xuICAgIHJldHVybiBzdHIuY2hhckNvZGVBdCgrK2luZGV4KTtcbiAgfTtcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBjb2RlID0gYWR2YW5jZSgpO1xuICAgIGxldCBuZXh0O1xuXG4gICAgaWYgKGNvZGUgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIHtcbiAgICAgIGJhY2tzbGFzaGVzID0gdG9rZW4uYmFja3NsYXNoZXMgPSB0cnVlO1xuICAgICAgY29kZSA9IGFkdmFuY2UoKTtcblxuICAgICAgaWYgKGNvZGUgPT09IENIQVJfTEVGVF9DVVJMWV9CUkFDRSkge1xuICAgICAgICBicmFjZUVzY2FwZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGJyYWNlRXNjYXBlZCA9PT0gdHJ1ZSB8fCBjb2RlID09PSBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0UpIHtcbiAgICAgIGJyYWNlcysrO1xuXG4gICAgICB3aGlsZSAoZW9zKCkgIT09IHRydWUgJiYgKGNvZGUgPSBhZHZhbmNlKCkpKSB7XG4gICAgICAgIGlmIChjb2RlID09PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKSB7XG4gICAgICAgICAgYmFja3NsYXNoZXMgPSB0b2tlbi5iYWNrc2xhc2hlcyA9IHRydWU7XG4gICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvZGUgPT09IENIQVJfTEVGVF9DVVJMWV9CUkFDRSkge1xuICAgICAgICAgIGJyYWNlcysrO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJyYWNlRXNjYXBlZCAhPT0gdHJ1ZSAmJiBjb2RlID09PSBDSEFSX0RPVCAmJiAoY29kZSA9IGFkdmFuY2UoKSkgPT09IENIQVJfRE9UKSB7XG4gICAgICAgICAgaXNCcmFjZSA9IHRva2VuLmlzQnJhY2UgPSB0cnVlO1xuICAgICAgICAgIGlzR2xvYiA9IHRva2VuLmlzR2xvYiA9IHRydWU7XG4gICAgICAgICAgZmluaXNoZWQgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKHNjYW5Ub0VuZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYnJhY2VFc2NhcGVkICE9PSB0cnVlICYmIGNvZGUgPT09IENIQVJfQ09NTUEpIHtcbiAgICAgICAgICBpc0JyYWNlID0gdG9rZW4uaXNCcmFjZSA9IHRydWU7XG4gICAgICAgICAgaXNHbG9iID0gdG9rZW4uaXNHbG9iID0gdHJ1ZTtcbiAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2RlID09PSBDSEFSX1JJR0hUX0NVUkxZX0JSQUNFKSB7XG4gICAgICAgICAgYnJhY2VzLS07XG5cbiAgICAgICAgICBpZiAoYnJhY2VzID09PSAwKSB7XG4gICAgICAgICAgICBicmFjZUVzY2FwZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlzQnJhY2UgPSB0b2tlbi5pc0JyYWNlID0gdHJ1ZTtcbiAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIKSB7XG4gICAgICBzbGFzaGVzLnB1c2goaW5kZXgpO1xuICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgdG9rZW4gPSB7IHZhbHVlOiAnJywgZGVwdGg6IDAsIGlzR2xvYjogZmFsc2UgfTtcblxuICAgICAgaWYgKGZpbmlzaGVkID09PSB0cnVlKSBjb250aW51ZTtcbiAgICAgIGlmIChwcmV2ID09PSBDSEFSX0RPVCAmJiBpbmRleCA9PT0gKHN0YXJ0ICsgMSkpIHtcbiAgICAgICAgc3RhcnQgKz0gMjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGxhc3RJbmRleCA9IGluZGV4ICsgMTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChvcHRzLm5vZXh0ICE9PSB0cnVlKSB7XG4gICAgICBjb25zdCBpc0V4dGdsb2JDaGFyID0gY29kZSA9PT0gQ0hBUl9QTFVTXG4gICAgICAgIHx8IGNvZGUgPT09IENIQVJfQVRcbiAgICAgICAgfHwgY29kZSA9PT0gQ0hBUl9BU1RFUklTS1xuICAgICAgICB8fCBjb2RlID09PSBDSEFSX1FVRVNUSU9OX01BUktcbiAgICAgICAgfHwgY29kZSA9PT0gQ0hBUl9FWENMQU1BVElPTl9NQVJLO1xuXG4gICAgICBpZiAoaXNFeHRnbG9iQ2hhciA9PT0gdHJ1ZSAmJiBwZWVrKCkgPT09IENIQVJfTEVGVF9QQVJFTlRIRVNFUykge1xuICAgICAgICBpc0dsb2IgPSB0b2tlbi5pc0dsb2IgPSB0cnVlO1xuICAgICAgICBpc0V4dGdsb2IgPSB0b2tlbi5pc0V4dGdsb2IgPSB0cnVlO1xuICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG4gICAgICAgIGlmIChjb2RlID09PSBDSEFSX0VYQ0xBTUFUSU9OX01BUksgJiYgaW5kZXggPT09IHN0YXJ0KSB7XG4gICAgICAgICAgbmVnYXRlZEV4dGdsb2IgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjYW5Ub0VuZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHdoaWxlIChlb3MoKSAhPT0gdHJ1ZSAmJiAoY29kZSA9IGFkdmFuY2UoKSkpIHtcbiAgICAgICAgICAgIGlmIChjb2RlID09PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKSB7XG4gICAgICAgICAgICAgIGJhY2tzbGFzaGVzID0gdG9rZW4uYmFja3NsYXNoZXMgPSB0cnVlO1xuICAgICAgICAgICAgICBjb2RlID0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvZGUgPT09IENIQVJfUklHSFRfUEFSRU5USEVTRVMpIHtcbiAgICAgICAgICAgICAgaXNHbG9iID0gdG9rZW4uaXNHbG9iID0gdHJ1ZTtcbiAgICAgICAgICAgICAgZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPT09IENIQVJfQVNURVJJU0spIHtcbiAgICAgIGlmIChwcmV2ID09PSBDSEFSX0FTVEVSSVNLKSBpc0dsb2JzdGFyID0gdG9rZW4uaXNHbG9ic3RhciA9IHRydWU7XG4gICAgICBpc0dsb2IgPSB0b2tlbi5pc0dsb2IgPSB0cnVlO1xuICAgICAgZmluaXNoZWQgPSB0cnVlO1xuXG4gICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPT09IENIQVJfUVVFU1RJT05fTUFSSykge1xuICAgICAgaXNHbG9iID0gdG9rZW4uaXNHbG9iID0gdHJ1ZTtcbiAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcblxuICAgICAgaWYgKHNjYW5Ub0VuZCA9PT0gdHJ1ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChjb2RlID09PSBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQpIHtcbiAgICAgIHdoaWxlIChlb3MoKSAhPT0gdHJ1ZSAmJiAobmV4dCA9IGFkdmFuY2UoKSkpIHtcbiAgICAgICAgaWYgKG5leHQgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIHtcbiAgICAgICAgICBiYWNrc2xhc2hlcyA9IHRva2VuLmJhY2tzbGFzaGVzID0gdHJ1ZTtcbiAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dCA9PT0gQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCkge1xuICAgICAgICAgIGlzQnJhY2tldCA9IHRva2VuLmlzQnJhY2tldCA9IHRydWU7XG4gICAgICAgICAgaXNHbG9iID0gdG9rZW4uaXNHbG9iID0gdHJ1ZTtcbiAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHNjYW5Ub0VuZCA9PT0gdHJ1ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMubm9uZWdhdGUgIT09IHRydWUgJiYgY29kZSA9PT0gQ0hBUl9FWENMQU1BVElPTl9NQVJLICYmIGluZGV4ID09PSBzdGFydCkge1xuICAgICAgbmVnYXRlZCA9IHRva2VuLm5lZ2F0ZWQgPSB0cnVlO1xuICAgICAgc3RhcnQrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChvcHRzLm5vcGFyZW4gIT09IHRydWUgJiYgY29kZSA9PT0gQ0hBUl9MRUZUX1BBUkVOVEhFU0VTKSB7XG4gICAgICBpc0dsb2IgPSB0b2tlbi5pc0dsb2IgPSB0cnVlO1xuXG4gICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgIHdoaWxlIChlb3MoKSAhPT0gdHJ1ZSAmJiAoY29kZSA9IGFkdmFuY2UoKSkpIHtcbiAgICAgICAgICBpZiAoY29kZSA9PT0gQ0hBUl9MRUZUX1BBUkVOVEhFU0VTKSB7XG4gICAgICAgICAgICBiYWNrc2xhc2hlcyA9IHRva2VuLmJhY2tzbGFzaGVzID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvZGUgPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29kZSA9PT0gQ0hBUl9SSUdIVF9QQVJFTlRIRVNFUykge1xuICAgICAgICAgICAgZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGlzR2xvYiA9PT0gdHJ1ZSkge1xuICAgICAgZmluaXNoZWQgPSB0cnVlO1xuXG4gICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAob3B0cy5ub2V4dCA9PT0gdHJ1ZSkge1xuICAgIGlzRXh0Z2xvYiA9IGZhbHNlO1xuICAgIGlzR2xvYiA9IGZhbHNlO1xuICB9XG5cbiAgbGV0IGJhc2UgPSBzdHI7XG4gIGxldCBwcmVmaXggPSAnJztcbiAgbGV0IGdsb2IgPSAnJztcblxuICBpZiAoc3RhcnQgPiAwKSB7XG4gICAgcHJlZml4ID0gc3RyLnNsaWNlKDAsIHN0YXJ0KTtcbiAgICBzdHIgPSBzdHIuc2xpY2Uoc3RhcnQpO1xuICAgIGxhc3RJbmRleCAtPSBzdGFydDtcbiAgfVxuXG4gIGlmIChiYXNlICYmIGlzR2xvYiA9PT0gdHJ1ZSAmJiBsYXN0SW5kZXggPiAwKSB7XG4gICAgYmFzZSA9IHN0ci5zbGljZSgwLCBsYXN0SW5kZXgpO1xuICAgIGdsb2IgPSBzdHIuc2xpY2UobGFzdEluZGV4KTtcbiAgfSBlbHNlIGlmIChpc0dsb2IgPT09IHRydWUpIHtcbiAgICBiYXNlID0gJyc7XG4gICAgZ2xvYiA9IHN0cjtcbiAgfSBlbHNlIHtcbiAgICBiYXNlID0gc3RyO1xuICB9XG5cbiAgaWYgKGJhc2UgJiYgYmFzZSAhPT0gJycgJiYgYmFzZSAhPT0gJy8nICYmIGJhc2UgIT09IHN0cikge1xuICAgIGlmIChpc1BhdGhTZXBhcmF0b3IoYmFzZS5jaGFyQ29kZUF0KGJhc2UubGVuZ3RoIC0gMSkpKSB7XG4gICAgICBiYXNlID0gYmFzZS5zbGljZSgwLCAtMSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdHMudW5lc2NhcGUgPT09IHRydWUpIHtcbiAgICBpZiAoZ2xvYikgZ2xvYiA9IHV0aWxzLnJlbW92ZUJhY2tzbGFzaGVzKGdsb2IpO1xuXG4gICAgaWYgKGJhc2UgJiYgYmFja3NsYXNoZXMgPT09IHRydWUpIHtcbiAgICAgIGJhc2UgPSB1dGlscy5yZW1vdmVCYWNrc2xhc2hlcyhiYXNlKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdGF0ZSA9IHtcbiAgICBwcmVmaXgsXG4gICAgaW5wdXQsXG4gICAgc3RhcnQsXG4gICAgYmFzZSxcbiAgICBnbG9iLFxuICAgIGlzQnJhY2UsXG4gICAgaXNCcmFja2V0LFxuICAgIGlzR2xvYixcbiAgICBpc0V4dGdsb2IsXG4gICAgaXNHbG9ic3RhcixcbiAgICBuZWdhdGVkLFxuICAgIG5lZ2F0ZWRFeHRnbG9iXG4gIH07XG5cbiAgaWYgKG9wdHMudG9rZW5zID09PSB0cnVlKSB7XG4gICAgc3RhdGUubWF4RGVwdGggPSAwO1xuICAgIGlmICghaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgfVxuICAgIHN0YXRlLnRva2VucyA9IHRva2VucztcbiAgfVxuXG4gIGlmIChvcHRzLnBhcnRzID09PSB0cnVlIHx8IG9wdHMudG9rZW5zID09PSB0cnVlKSB7XG4gICAgbGV0IHByZXZJbmRleDtcblxuICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHNsYXNoZXMubGVuZ3RoOyBpZHgrKykge1xuICAgICAgY29uc3QgbiA9IHByZXZJbmRleCA/IHByZXZJbmRleCArIDEgOiBzdGFydDtcbiAgICAgIGNvbnN0IGkgPSBzbGFzaGVzW2lkeF07XG4gICAgICBjb25zdCB2YWx1ZSA9IGlucHV0LnNsaWNlKG4sIGkpO1xuICAgICAgaWYgKG9wdHMudG9rZW5zKSB7XG4gICAgICAgIGlmIChpZHggPT09IDAgJiYgc3RhcnQgIT09IDApIHtcbiAgICAgICAgICB0b2tlbnNbaWR4XS5pc1ByZWZpeCA9IHRydWU7XG4gICAgICAgICAgdG9rZW5zW2lkeF0udmFsdWUgPSBwcmVmaXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9rZW5zW2lkeF0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBkZXB0aCh0b2tlbnNbaWR4XSk7XG4gICAgICAgIHN0YXRlLm1heERlcHRoICs9IHRva2Vuc1tpZHhdLmRlcHRoO1xuICAgICAgfVxuICAgICAgaWYgKGlkeCAhPT0gMCB8fCB2YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgcGFydHMucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBwcmV2SW5kZXggPSBpO1xuICAgIH1cblxuICAgIGlmIChwcmV2SW5kZXggJiYgcHJldkluZGV4ICsgMSA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dC5zbGljZShwcmV2SW5kZXggKyAxKTtcbiAgICAgIHBhcnRzLnB1c2godmFsdWUpO1xuXG4gICAgICBpZiAob3B0cy50b2tlbnMpIHtcbiAgICAgICAgdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICBkZXB0aCh0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgc3RhdGUubWF4RGVwdGggKz0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS5kZXB0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0ZS5zbGFzaGVzID0gc2xhc2hlcztcbiAgICBzdGF0ZS5wYXJ0cyA9IHBhcnRzO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzY2FuO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IHtcbiAgTUFYX0xFTkdUSCxcbiAgUE9TSVhfUkVHRVhfU09VUkNFLFxuICBSRUdFWF9OT05fU1BFQ0lBTF9DSEFSUyxcbiAgUkVHRVhfU1BFQ0lBTF9DSEFSU19CQUNLUkVGLFxuICBSRVBMQUNFTUVOVFNcbn0gPSBjb25zdGFudHM7XG5cbi8qKlxuICogSGVscGVyc1xuICovXG5cbmNvbnN0IGV4cGFuZFJhbmdlID0gKGFyZ3MsIG9wdGlvbnMpID0+IHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zLmV4cGFuZFJhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuZXhwYW5kUmFuZ2UoLi4uYXJncywgb3B0aW9ucyk7XG4gIH1cblxuICBhcmdzLnNvcnQoKTtcbiAgY29uc3QgdmFsdWUgPSBgWyR7YXJncy5qb2luKCctJyl9XWA7XG5cbiAgdHJ5IHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3ICovXG4gICAgbmV3IFJlZ0V4cCh2YWx1ZSk7XG4gIH0gY2F0Y2ggKGV4KSB7XG4gICAgcmV0dXJuIGFyZ3MubWFwKHYgPT4gdXRpbHMuZXNjYXBlUmVnZXgodikpLmpvaW4oJy4uJyk7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgbWVzc2FnZSBmb3IgYSBzeW50YXggZXJyb3JcbiAqL1xuXG5jb25zdCBzeW50YXhFcnJvciA9ICh0eXBlLCBjaGFyKSA9PiB7XG4gIHJldHVybiBgTWlzc2luZyAke3R5cGV9OiBcIiR7Y2hhcn1cIiAtIHVzZSBcIlxcXFxcXFxcJHtjaGFyfVwiIHRvIG1hdGNoIGxpdGVyYWwgY2hhcmFjdGVyc2A7XG59O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBnaXZlbiBpbnB1dCBzdHJpbmcuXG4gKiBAcGFyYW0ge1N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cblxuY29uc3QgcGFyc2UgPSAoaW5wdXQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhIHN0cmluZycpO1xuICB9XG5cbiAgaW5wdXQgPSBSRVBMQUNFTUVOVFNbaW5wdXRdIHx8IGlucHV0O1xuXG4gIGNvbnN0IG9wdHMgPSB7IC4uLm9wdGlvbnMgfTtcbiAgY29uc3QgbWF4ID0gdHlwZW9mIG9wdHMubWF4TGVuZ3RoID09PSAnbnVtYmVyJyA/IE1hdGgubWluKE1BWF9MRU5HVEgsIG9wdHMubWF4TGVuZ3RoKSA6IE1BWF9MRU5HVEg7XG5cbiAgbGV0IGxlbiA9IGlucHV0Lmxlbmd0aDtcbiAgaWYgKGxlbiA+IG1heCkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgSW5wdXQgbGVuZ3RoOiAke2xlbn0sIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIGxlbmd0aDogJHttYXh9YCk7XG4gIH1cblxuICBjb25zdCBib3MgPSB7IHR5cGU6ICdib3MnLCB2YWx1ZTogJycsIG91dHB1dDogb3B0cy5wcmVwZW5kIHx8ICcnIH07XG4gIGNvbnN0IHRva2VucyA9IFtib3NdO1xuXG4gIGNvbnN0IGNhcHR1cmUgPSBvcHRzLmNhcHR1cmUgPyAnJyA6ICc/Oic7XG4gIGNvbnN0IHdpbjMyID0gdXRpbHMuaXNXaW5kb3dzKG9wdGlvbnMpO1xuXG4gIC8vIGNyZWF0ZSBjb25zdGFudHMgYmFzZWQgb24gcGxhdGZvcm0sIGZvciB3aW5kb3dzIG9yIHBvc2l4XG4gIGNvbnN0IFBMQVRGT1JNX0NIQVJTID0gY29uc3RhbnRzLmdsb2JDaGFycyh3aW4zMik7XG4gIGNvbnN0IEVYVEdMT0JfQ0hBUlMgPSBjb25zdGFudHMuZXh0Z2xvYkNoYXJzKFBMQVRGT1JNX0NIQVJTKTtcblxuICBjb25zdCB7XG4gICAgRE9UX0xJVEVSQUwsXG4gICAgUExVU19MSVRFUkFMLFxuICAgIFNMQVNIX0xJVEVSQUwsXG4gICAgT05FX0NIQVIsXG4gICAgRE9UU19TTEFTSCxcbiAgICBOT19ET1QsXG4gICAgTk9fRE9UX1NMQVNILFxuICAgIE5PX0RPVFNfU0xBU0gsXG4gICAgUU1BUkssXG4gICAgUU1BUktfTk9fRE9ULFxuICAgIFNUQVIsXG4gICAgU1RBUlRfQU5DSE9SXG4gIH0gPSBQTEFURk9STV9DSEFSUztcblxuICBjb25zdCBnbG9ic3RhciA9IG9wdHMgPT4ge1xuICAgIHJldHVybiBgKCR7Y2FwdHVyZX0oPzooPyEke1NUQVJUX0FOQ0hPUn0ke29wdHMuZG90ID8gRE9UU19TTEFTSCA6IERPVF9MSVRFUkFMfSkuKSo/KWA7XG4gIH07XG5cbiAgY29uc3Qgbm9kb3QgPSBvcHRzLmRvdCA/ICcnIDogTk9fRE9UO1xuICBjb25zdCBxbWFya05vRG90ID0gb3B0cy5kb3QgPyBRTUFSSyA6IFFNQVJLX05PX0RPVDtcbiAgbGV0IHN0YXIgPSBvcHRzLmJhc2ggPT09IHRydWUgPyBnbG9ic3RhcihvcHRzKSA6IFNUQVI7XG5cbiAgaWYgKG9wdHMuY2FwdHVyZSkge1xuICAgIHN0YXIgPSBgKCR7c3Rhcn0pYDtcbiAgfVxuXG4gIC8vIG1pbmltYXRjaCBvcHRpb25zIHN1cHBvcnRcbiAgaWYgKHR5cGVvZiBvcHRzLm5vZXh0ID09PSAnYm9vbGVhbicpIHtcbiAgICBvcHRzLm5vZXh0Z2xvYiA9IG9wdHMubm9leHQ7XG4gIH1cblxuICBjb25zdCBzdGF0ZSA9IHtcbiAgICBpbnB1dCxcbiAgICBpbmRleDogLTEsXG4gICAgc3RhcnQ6IDAsXG4gICAgZG90OiBvcHRzLmRvdCA9PT0gdHJ1ZSxcbiAgICBjb25zdW1lZDogJycsXG4gICAgb3V0cHV0OiAnJyxcbiAgICBwcmVmaXg6ICcnLFxuICAgIGJhY2t0cmFjazogZmFsc2UsXG4gICAgbmVnYXRlZDogZmFsc2UsXG4gICAgYnJhY2tldHM6IDAsXG4gICAgYnJhY2VzOiAwLFxuICAgIHBhcmVuczogMCxcbiAgICBxdW90ZXM6IDAsXG4gICAgZ2xvYnN0YXI6IGZhbHNlLFxuICAgIHRva2Vuc1xuICB9O1xuXG4gIGlucHV0ID0gdXRpbHMucmVtb3ZlUHJlZml4KGlucHV0LCBzdGF0ZSk7XG4gIGxlbiA9IGlucHV0Lmxlbmd0aDtcblxuICBjb25zdCBleHRnbG9icyA9IFtdO1xuICBjb25zdCBicmFjZXMgPSBbXTtcbiAgY29uc3Qgc3RhY2sgPSBbXTtcbiAgbGV0IHByZXYgPSBib3M7XG4gIGxldCB2YWx1ZTtcblxuICAvKipcbiAgICogVG9rZW5pemluZyBoZWxwZXJzXG4gICAqL1xuXG4gIGNvbnN0IGVvcyA9ICgpID0+IHN0YXRlLmluZGV4ID09PSBsZW4gLSAxO1xuICBjb25zdCBwZWVrID0gc3RhdGUucGVlayA9IChuID0gMSkgPT4gaW5wdXRbc3RhdGUuaW5kZXggKyBuXTtcbiAgY29uc3QgYWR2YW5jZSA9IHN0YXRlLmFkdmFuY2UgPSAoKSA9PiBpbnB1dFsrK3N0YXRlLmluZGV4XSB8fCAnJztcbiAgY29uc3QgcmVtYWluaW5nID0gKCkgPT4gaW5wdXQuc2xpY2Uoc3RhdGUuaW5kZXggKyAxKTtcbiAgY29uc3QgY29uc3VtZSA9ICh2YWx1ZSA9ICcnLCBudW0gPSAwKSA9PiB7XG4gICAgc3RhdGUuY29uc3VtZWQgKz0gdmFsdWU7XG4gICAgc3RhdGUuaW5kZXggKz0gbnVtO1xuICB9O1xuXG4gIGNvbnN0IGFwcGVuZCA9IHRva2VuID0+IHtcbiAgICBzdGF0ZS5vdXRwdXQgKz0gdG9rZW4ub3V0cHV0ICE9IG51bGwgPyB0b2tlbi5vdXRwdXQgOiB0b2tlbi52YWx1ZTtcbiAgICBjb25zdW1lKHRva2VuLnZhbHVlKTtcbiAgfTtcblxuICBjb25zdCBuZWdhdGUgPSAoKSA9PiB7XG4gICAgbGV0IGNvdW50ID0gMTtcblxuICAgIHdoaWxlIChwZWVrKCkgPT09ICchJyAmJiAocGVlaygyKSAhPT0gJygnIHx8IHBlZWsoMykgPT09ICc/JykpIHtcbiAgICAgIGFkdmFuY2UoKTtcbiAgICAgIHN0YXRlLnN0YXJ0Kys7XG4gICAgICBjb3VudCsrO1xuICAgIH1cblxuICAgIGlmIChjb3VudCAlIDIgPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzdGF0ZS5uZWdhdGVkID0gdHJ1ZTtcbiAgICBzdGF0ZS5zdGFydCsrO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIGNvbnN0IGluY3JlbWVudCA9IHR5cGUgPT4ge1xuICAgIHN0YXRlW3R5cGVdKys7XG4gICAgc3RhY2sucHVzaCh0eXBlKTtcbiAgfTtcblxuICBjb25zdCBkZWNyZW1lbnQgPSB0eXBlID0+IHtcbiAgICBzdGF0ZVt0eXBlXS0tO1xuICAgIHN0YWNrLnBvcCgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBQdXNoIHRva2VucyBvbnRvIHRoZSB0b2tlbnMgYXJyYXkuIFRoaXMgaGVscGVyIHNwZWVkcyB1cFxuICAgKiB0b2tlbml6aW5nIGJ5IDEpIGhlbHBpbmcgdXMgYXZvaWQgYmFja3RyYWNraW5nIGFzIG11Y2ggYXMgcG9zc2libGUsXG4gICAqIGFuZCAyKSBoZWxwaW5nIHVzIGF2b2lkIGNyZWF0aW5nIGV4dHJhIHRva2VucyB3aGVuIGNvbnNlY3V0aXZlXG4gICAqIGNoYXJhY3RlcnMgYXJlIHBsYWluIHRleHQuIFRoaXMgaW1wcm92ZXMgcGVyZm9ybWFuY2UgYW5kIHNpbXBsaWZpZXNcbiAgICogbG9va2JlaGluZHMuXG4gICAqL1xuXG4gIGNvbnN0IHB1c2ggPSB0b2sgPT4ge1xuICAgIGlmIChwcmV2LnR5cGUgPT09ICdnbG9ic3RhcicpIHtcbiAgICAgIGNvbnN0IGlzQnJhY2UgPSBzdGF0ZS5icmFjZXMgPiAwICYmICh0b2sudHlwZSA9PT0gJ2NvbW1hJyB8fCB0b2sudHlwZSA9PT0gJ2JyYWNlJyk7XG4gICAgICBjb25zdCBpc0V4dGdsb2IgPSB0b2suZXh0Z2xvYiA9PT0gdHJ1ZSB8fCAoZXh0Z2xvYnMubGVuZ3RoICYmICh0b2sudHlwZSA9PT0gJ3BpcGUnIHx8IHRvay50eXBlID09PSAncGFyZW4nKSk7XG5cbiAgICAgIGlmICh0b2sudHlwZSAhPT0gJ3NsYXNoJyAmJiB0b2sudHlwZSAhPT0gJ3BhcmVuJyAmJiAhaXNCcmFjZSAmJiAhaXNFeHRnbG9iKSB7XG4gICAgICAgIHN0YXRlLm91dHB1dCA9IHN0YXRlLm91dHB1dC5zbGljZSgwLCAtcHJldi5vdXRwdXQubGVuZ3RoKTtcbiAgICAgICAgcHJldi50eXBlID0gJ3N0YXInO1xuICAgICAgICBwcmV2LnZhbHVlID0gJyonO1xuICAgICAgICBwcmV2Lm91dHB1dCA9IHN0YXI7XG4gICAgICAgIHN0YXRlLm91dHB1dCArPSBwcmV2Lm91dHB1dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXh0Z2xvYnMubGVuZ3RoICYmIHRvay50eXBlICE9PSAncGFyZW4nKSB7XG4gICAgICBleHRnbG9ic1tleHRnbG9icy5sZW5ndGggLSAxXS5pbm5lciArPSB0b2sudmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRvay52YWx1ZSB8fCB0b2sub3V0cHV0KSBhcHBlbmQodG9rKTtcbiAgICBpZiAocHJldiAmJiBwcmV2LnR5cGUgPT09ICd0ZXh0JyAmJiB0b2sudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICBwcmV2LnZhbHVlICs9IHRvay52YWx1ZTtcbiAgICAgIHByZXYub3V0cHV0ID0gKHByZXYub3V0cHV0IHx8ICcnKSArIHRvay52YWx1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0b2sucHJldiA9IHByZXY7XG4gICAgdG9rZW5zLnB1c2godG9rKTtcbiAgICBwcmV2ID0gdG9rO1xuICB9O1xuXG4gIGNvbnN0IGV4dGdsb2JPcGVuID0gKHR5cGUsIHZhbHVlKSA9PiB7XG4gICAgY29uc3QgdG9rZW4gPSB7IC4uLkVYVEdMT0JfQ0hBUlNbdmFsdWVdLCBjb25kaXRpb25zOiAxLCBpbm5lcjogJycgfTtcblxuICAgIHRva2VuLnByZXYgPSBwcmV2O1xuICAgIHRva2VuLnBhcmVucyA9IHN0YXRlLnBhcmVucztcbiAgICB0b2tlbi5vdXRwdXQgPSBzdGF0ZS5vdXRwdXQ7XG4gICAgY29uc3Qgb3V0cHV0ID0gKG9wdHMuY2FwdHVyZSA/ICcoJyA6ICcnKSArIHRva2VuLm9wZW47XG5cbiAgICBpbmNyZW1lbnQoJ3BhcmVucycpO1xuICAgIHB1c2goeyB0eXBlLCB2YWx1ZSwgb3V0cHV0OiBzdGF0ZS5vdXRwdXQgPyAnJyA6IE9ORV9DSEFSIH0pO1xuICAgIHB1c2goeyB0eXBlOiAncGFyZW4nLCBleHRnbG9iOiB0cnVlLCB2YWx1ZTogYWR2YW5jZSgpLCBvdXRwdXQgfSk7XG4gICAgZXh0Z2xvYnMucHVzaCh0b2tlbik7XG4gIH07XG5cbiAgY29uc3QgZXh0Z2xvYkNsb3NlID0gdG9rZW4gPT4ge1xuICAgIGxldCBvdXRwdXQgPSB0b2tlbi5jbG9zZSArIChvcHRzLmNhcHR1cmUgPyAnKScgOiAnJyk7XG4gICAgbGV0IHJlc3Q7XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gJ25lZ2F0ZScpIHtcbiAgICAgIGxldCBleHRnbG9iU3RhciA9IHN0YXI7XG5cbiAgICAgIGlmICh0b2tlbi5pbm5lciAmJiB0b2tlbi5pbm5lci5sZW5ndGggPiAxICYmIHRva2VuLmlubmVyLmluY2x1ZGVzKCcvJykpIHtcbiAgICAgICAgZXh0Z2xvYlN0YXIgPSBnbG9ic3RhcihvcHRzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV4dGdsb2JTdGFyICE9PSBzdGFyIHx8IGVvcygpIHx8IC9eXFwpKyQvLnRlc3QocmVtYWluaW5nKCkpKSB7XG4gICAgICAgIG91dHB1dCA9IHRva2VuLmNsb3NlID0gYCkkKSkke2V4dGdsb2JTdGFyfWA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0b2tlbi5pbm5lci5pbmNsdWRlcygnKicpICYmIChyZXN0ID0gcmVtYWluaW5nKCkpICYmIC9eXFwuW15cXFxcLy5dKyQvLnRlc3QocmVzdCkpIHtcbiAgICAgICAgLy8gQW55IG5vbi1tYWdpY2FsIHN0cmluZyAoYC50c2ApIG9yIGV2ZW4gbmVzdGVkIGV4cHJlc3Npb24gKGAue3RzLHRzeH1gKSBjYW4gZm9sbG93IGFmdGVyIHRoZSBjbG9zaW5nIHBhcmVudGhlc2lzLlxuICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIG5lZWQgdG8gcGFyc2UgdGhlIHN0cmluZyBhbmQgdXNlIGl0IGluIHRoZSBvdXRwdXQgb2YgdGhlIG9yaWdpbmFsIHBhdHRlcm4uXG4gICAgICAgIC8vIFN1aXRhYmxlIHBhdHRlcm5zOiBgLyEoKi5kKS50c2AsIGAvISgqLmQpLnt0cyx0c3h9YCwgYCoqLyEoKi1kYmcpLkAoanMpYC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gRGlzYWJsaW5nIHRoZSBgZmFzdHBhdGhzYCBvcHRpb24gZHVlIHRvIGEgcHJvYmxlbSB3aXRoIHBhcnNpbmcgc3RyaW5ncyBhcyBgLnRzYCBpbiB0aGUgcGF0dGVybiBsaWtlIGAqKi8hKCouZCkudHNgLlxuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gcGFyc2UocmVzdCwgeyAuLi5vcHRpb25zLCBmYXN0cGF0aHM6IGZhbHNlIH0pLm91dHB1dDtcblxuICAgICAgICBvdXRwdXQgPSB0b2tlbi5jbG9zZSA9IGApJHtleHByZXNzaW9ufSkke2V4dGdsb2JTdGFyfSlgO1xuICAgICAgfVxuXG4gICAgICBpZiAodG9rZW4ucHJldi50eXBlID09PSAnYm9zJykge1xuICAgICAgICBzdGF0ZS5uZWdhdGVkRXh0Z2xvYiA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHVzaCh7IHR5cGU6ICdwYXJlbicsIGV4dGdsb2I6IHRydWUsIHZhbHVlLCBvdXRwdXQgfSk7XG4gICAgZGVjcmVtZW50KCdwYXJlbnMnKTtcbiAgfTtcblxuICAvKipcbiAgICogRmFzdCBwYXRoc1xuICAgKi9cblxuICBpZiAob3B0cy5mYXN0cGF0aHMgIT09IGZhbHNlICYmICEvKF5bKiFdfFsvKClbXFxde31cIl0pLy50ZXN0KGlucHV0KSkge1xuICAgIGxldCBiYWNrc2xhc2hlcyA9IGZhbHNlO1xuXG4gICAgbGV0IG91dHB1dCA9IGlucHV0LnJlcGxhY2UoUkVHRVhfU1BFQ0lBTF9DSEFSU19CQUNLUkVGLCAobSwgZXNjLCBjaGFycywgZmlyc3QsIHJlc3QsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoZmlyc3QgPT09ICdcXFxcJykge1xuICAgICAgICBiYWNrc2xhc2hlcyA9IHRydWU7XG4gICAgICAgIHJldHVybiBtO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlyc3QgPT09ICc/Jykge1xuICAgICAgICBpZiAoZXNjKSB7XG4gICAgICAgICAgcmV0dXJuIGVzYyArIGZpcnN0ICsgKHJlc3QgPyBRTUFSSy5yZXBlYXQocmVzdC5sZW5ndGgpIDogJycpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBxbWFya05vRG90ICsgKHJlc3QgPyBRTUFSSy5yZXBlYXQocmVzdC5sZW5ndGgpIDogJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBRTUFSSy5yZXBlYXQoY2hhcnMubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpcnN0ID09PSAnLicpIHtcbiAgICAgICAgcmV0dXJuIERPVF9MSVRFUkFMLnJlcGVhdChjaGFycy5sZW5ndGgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlyc3QgPT09ICcqJykge1xuICAgICAgICBpZiAoZXNjKSB7XG4gICAgICAgICAgcmV0dXJuIGVzYyArIGZpcnN0ICsgKHJlc3QgPyBzdGFyIDogJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGFyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVzYyA/IG0gOiBgXFxcXCR7bX1gO1xuICAgIH0pO1xuXG4gICAgaWYgKGJhY2tzbGFzaGVzID09PSB0cnVlKSB7XG4gICAgICBpZiAob3B0cy51bmVzY2FwZSA9PT0gdHJ1ZSkge1xuICAgICAgICBvdXRwdXQgPSBvdXRwdXQucmVwbGFjZSgvXFxcXC9nLCAnJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXQgPSBvdXRwdXQucmVwbGFjZSgvXFxcXCsvZywgbSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG0ubGVuZ3RoICUgMiA9PT0gMCA/ICdcXFxcXFxcXCcgOiAobSA/ICdcXFxcJyA6ICcnKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG91dHB1dCA9PT0gaW5wdXQgJiYgb3B0cy5jb250YWlucyA9PT0gdHJ1ZSkge1xuICAgICAgc3RhdGUub3V0cHV0ID0gaW5wdXQ7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgc3RhdGUub3V0cHV0ID0gdXRpbHMud3JhcE91dHB1dChvdXRwdXQsIHN0YXRlLCBvcHRpb25zKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogVG9rZW5pemUgaW5wdXQgdW50aWwgd2UgcmVhY2ggZW5kLW9mLXN0cmluZ1xuICAgKi9cblxuICB3aGlsZSAoIWVvcygpKSB7XG4gICAgdmFsdWUgPSBhZHZhbmNlKCk7XG5cbiAgICBpZiAodmFsdWUgPT09ICdcXHUwMDAwJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXNjYXBlZCBjaGFyYWN0ZXJzXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICdcXFxcJykge1xuICAgICAgY29uc3QgbmV4dCA9IHBlZWsoKTtcblxuICAgICAgaWYgKG5leHQgPT09ICcvJyAmJiBvcHRzLmJhc2ggIT09IHRydWUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXh0ID09PSAnLicgfHwgbmV4dCA9PT0gJzsnKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW5leHQpIHtcbiAgICAgICAgdmFsdWUgKz0gJ1xcXFwnO1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZSB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbGxhcHNlIHNsYXNoZXMgdG8gcmVkdWNlIHBvdGVudGlhbCBmb3IgZXhwbG9pdHNcbiAgICAgIGNvbnN0IG1hdGNoID0gL15cXFxcKy8uZXhlYyhyZW1haW5pbmcoKSk7XG4gICAgICBsZXQgc2xhc2hlcyA9IDA7XG5cbiAgICAgIGlmIChtYXRjaCAmJiBtYXRjaFswXS5sZW5ndGggPiAyKSB7XG4gICAgICAgIHNsYXNoZXMgPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgIHN0YXRlLmluZGV4ICs9IHNsYXNoZXM7XG4gICAgICAgIGlmIChzbGFzaGVzICUgMiAhPT0gMCkge1xuICAgICAgICAgIHZhbHVlICs9ICdcXFxcJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAob3B0cy51bmVzY2FwZSA9PT0gdHJ1ZSkge1xuICAgICAgICB2YWx1ZSA9IGFkdmFuY2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlICs9IGFkdmFuY2UoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlLmJyYWNrZXRzID09PSAwKSB7XG4gICAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJZiB3ZSdyZSBpbnNpZGUgYSByZWdleCBjaGFyYWN0ZXIgY2xhc3MsIGNvbnRpbnVlXG4gICAgICogdW50aWwgd2UgcmVhY2ggdGhlIGNsb3NpbmcgYnJhY2tldC5cbiAgICAgKi9cblxuICAgIGlmIChzdGF0ZS5icmFja2V0cyA+IDAgJiYgKHZhbHVlICE9PSAnXScgfHwgcHJldi52YWx1ZSA9PT0gJ1snIHx8IHByZXYudmFsdWUgPT09ICdbXicpKSB7XG4gICAgICBpZiAob3B0cy5wb3NpeCAhPT0gZmFsc2UgJiYgdmFsdWUgPT09ICc6Jykge1xuICAgICAgICBjb25zdCBpbm5lciA9IHByZXYudmFsdWUuc2xpY2UoMSk7XG4gICAgICAgIGlmIChpbm5lci5pbmNsdWRlcygnWycpKSB7XG4gICAgICAgICAgcHJldi5wb3NpeCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAoaW5uZXIuaW5jbHVkZXMoJzonKSkge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gcHJldi52YWx1ZS5sYXN0SW5kZXhPZignWycpO1xuICAgICAgICAgICAgY29uc3QgcHJlID0gcHJldi52YWx1ZS5zbGljZSgwLCBpZHgpO1xuICAgICAgICAgICAgY29uc3QgcmVzdCA9IHByZXYudmFsdWUuc2xpY2UoaWR4ICsgMik7XG4gICAgICAgICAgICBjb25zdCBwb3NpeCA9IFBPU0lYX1JFR0VYX1NPVVJDRVtyZXN0XTtcbiAgICAgICAgICAgIGlmIChwb3NpeCkge1xuICAgICAgICAgICAgICBwcmV2LnZhbHVlID0gcHJlICsgcG9zaXg7XG4gICAgICAgICAgICAgIHN0YXRlLmJhY2t0cmFjayA9IHRydWU7XG4gICAgICAgICAgICAgIGFkdmFuY2UoKTtcblxuICAgICAgICAgICAgICBpZiAoIWJvcy5vdXRwdXQgJiYgdG9rZW5zLmluZGV4T2YocHJldikgPT09IDEpIHtcbiAgICAgICAgICAgICAgICBib3Mub3V0cHV0ID0gT05FX0NIQVI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICgodmFsdWUgPT09ICdbJyAmJiBwZWVrKCkgIT09ICc6JykgfHwgKHZhbHVlID09PSAnLScgJiYgcGVlaygpID09PSAnXScpKSB7XG4gICAgICAgIHZhbHVlID0gYFxcXFwke3ZhbHVlfWA7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gJ10nICYmIChwcmV2LnZhbHVlID09PSAnWycgfHwgcHJldi52YWx1ZSA9PT0gJ1teJykpIHtcbiAgICAgICAgdmFsdWUgPSBgXFxcXCR7dmFsdWV9YDtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdHMucG9zaXggPT09IHRydWUgJiYgdmFsdWUgPT09ICchJyAmJiBwcmV2LnZhbHVlID09PSAnWycpIHtcbiAgICAgICAgdmFsdWUgPSAnXic7XG4gICAgICB9XG5cbiAgICAgIHByZXYudmFsdWUgKz0gdmFsdWU7XG4gICAgICBhcHBlbmQoeyB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElmIHdlJ3JlIGluc2lkZSBhIHF1b3RlZCBzdHJpbmcsIGNvbnRpbnVlXG4gICAgICogdW50aWwgd2UgcmVhY2ggdGhlIGNsb3NpbmcgZG91YmxlIHF1b3RlLlxuICAgICAqL1xuXG4gICAgaWYgKHN0YXRlLnF1b3RlcyA9PT0gMSAmJiB2YWx1ZSAhPT0gJ1wiJykge1xuICAgICAgdmFsdWUgPSB1dGlscy5lc2NhcGVSZWdleCh2YWx1ZSk7XG4gICAgICBwcmV2LnZhbHVlICs9IHZhbHVlO1xuICAgICAgYXBwZW5kKHsgdmFsdWUgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEb3VibGUgcXVvdGVzXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICdcIicpIHtcbiAgICAgIHN0YXRlLnF1b3RlcyA9IHN0YXRlLnF1b3RlcyA9PT0gMSA/IDAgOiAxO1xuICAgICAgaWYgKG9wdHMua2VlcFF1b3RlcyA9PT0gdHJ1ZSkge1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZSB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhcmVudGhlc2VzXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICcoJykge1xuICAgICAgaW5jcmVtZW50KCdwYXJlbnMnKTtcbiAgICAgIHB1c2goeyB0eXBlOiAncGFyZW4nLCB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSA9PT0gJyknKSB7XG4gICAgICBpZiAoc3RhdGUucGFyZW5zID09PSAwICYmIG9wdHMuc3RyaWN0QnJhY2tldHMgPT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKHN5bnRheEVycm9yKCdvcGVuaW5nJywgJygnKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV4dGdsb2IgPSBleHRnbG9ic1tleHRnbG9icy5sZW5ndGggLSAxXTtcbiAgICAgIGlmIChleHRnbG9iICYmIHN0YXRlLnBhcmVucyA9PT0gZXh0Z2xvYi5wYXJlbnMgKyAxKSB7XG4gICAgICAgIGV4dGdsb2JDbG9zZShleHRnbG9icy5wb3AoKSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBwdXNoKHsgdHlwZTogJ3BhcmVuJywgdmFsdWUsIG91dHB1dDogc3RhdGUucGFyZW5zID8gJyknIDogJ1xcXFwpJyB9KTtcbiAgICAgIGRlY3JlbWVudCgncGFyZW5zJyk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTcXVhcmUgYnJhY2tldHNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJ1snKSB7XG4gICAgICBpZiAob3B0cy5ub2JyYWNrZXQgPT09IHRydWUgfHwgIXJlbWFpbmluZygpLmluY2x1ZGVzKCddJykpIHtcbiAgICAgICAgaWYgKG9wdHMubm9icmFja2V0ICE9PSB0cnVlICYmIG9wdHMuc3RyaWN0QnJhY2tldHMgPT09IHRydWUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ludGF4RXJyb3IoJ2Nsb3NpbmcnLCAnXScpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbHVlID0gYFxcXFwke3ZhbHVlfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmNyZW1lbnQoJ2JyYWNrZXRzJyk7XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAnYnJhY2tldCcsIHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSAnXScpIHtcbiAgICAgIGlmIChvcHRzLm5vYnJhY2tldCA9PT0gdHJ1ZSB8fCAocHJldiAmJiBwcmV2LnR5cGUgPT09ICdicmFja2V0JyAmJiBwcmV2LnZhbHVlLmxlbmd0aCA9PT0gMSkpIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUsIG91dHB1dDogYFxcXFwke3ZhbHVlfWAgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUuYnJhY2tldHMgPT09IDApIHtcbiAgICAgICAgaWYgKG9wdHMuc3RyaWN0QnJhY2tldHMgPT09IHRydWUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ludGF4RXJyb3IoJ29wZW5pbmcnLCAnWycpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlLCBvdXRwdXQ6IGBcXFxcJHt2YWx1ZX1gIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZGVjcmVtZW50KCdicmFja2V0cycpO1xuXG4gICAgICBjb25zdCBwcmV2VmFsdWUgPSBwcmV2LnZhbHVlLnNsaWNlKDEpO1xuICAgICAgaWYgKHByZXYucG9zaXggIT09IHRydWUgJiYgcHJldlZhbHVlWzBdID09PSAnXicgJiYgIXByZXZWYWx1ZS5pbmNsdWRlcygnLycpKSB7XG4gICAgICAgIHZhbHVlID0gYC8ke3ZhbHVlfWA7XG4gICAgICB9XG5cbiAgICAgIHByZXYudmFsdWUgKz0gdmFsdWU7XG4gICAgICBhcHBlbmQoeyB2YWx1ZSB9KTtcblxuICAgICAgLy8gd2hlbiBsaXRlcmFsIGJyYWNrZXRzIGFyZSBleHBsaWNpdGx5IGRpc2FibGVkXG4gICAgICAvLyBhc3N1bWUgd2Ugc2hvdWxkIG1hdGNoIHdpdGggYSByZWdleCBjaGFyYWN0ZXIgY2xhc3NcbiAgICAgIGlmIChvcHRzLmxpdGVyYWxCcmFja2V0cyA9PT0gZmFsc2UgfHwgdXRpbHMuaGFzUmVnZXhDaGFycyhwcmV2VmFsdWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlc2NhcGVkID0gdXRpbHMuZXNjYXBlUmVnZXgocHJldi52YWx1ZSk7XG4gICAgICBzdGF0ZS5vdXRwdXQgPSBzdGF0ZS5vdXRwdXQuc2xpY2UoMCwgLXByZXYudmFsdWUubGVuZ3RoKTtcblxuICAgICAgLy8gd2hlbiBsaXRlcmFsIGJyYWNrZXRzIGFyZSBleHBsaWNpdGx5IGVuYWJsZWRcbiAgICAgIC8vIGFzc3VtZSB3ZSBzaG91bGQgZXNjYXBlIHRoZSBicmFja2V0cyB0byBtYXRjaCBsaXRlcmFsIGNoYXJhY3RlcnNcbiAgICAgIGlmIChvcHRzLmxpdGVyYWxCcmFja2V0cyA9PT0gdHJ1ZSkge1xuICAgICAgICBzdGF0ZS5vdXRwdXQgKz0gZXNjYXBlZDtcbiAgICAgICAgcHJldi52YWx1ZSA9IGVzY2FwZWQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyB3aGVuIHRoZSB1c2VyIHNwZWNpZmllcyBub3RoaW5nLCB0cnkgdG8gbWF0Y2ggYm90aFxuICAgICAgcHJldi52YWx1ZSA9IGAoJHtjYXB0dXJlfSR7ZXNjYXBlZH18JHtwcmV2LnZhbHVlfSlgO1xuICAgICAgc3RhdGUub3V0cHV0ICs9IHByZXYudmFsdWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCcmFjZXNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJ3snICYmIG9wdHMubm9icmFjZSAhPT0gdHJ1ZSkge1xuICAgICAgaW5jcmVtZW50KCdicmFjZXMnKTtcblxuICAgICAgY29uc3Qgb3BlbiA9IHtcbiAgICAgICAgdHlwZTogJ2JyYWNlJyxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIG91dHB1dDogJygnLFxuICAgICAgICBvdXRwdXRJbmRleDogc3RhdGUub3V0cHV0Lmxlbmd0aCxcbiAgICAgICAgdG9rZW5zSW5kZXg6IHN0YXRlLnRva2Vucy5sZW5ndGhcbiAgICAgIH07XG5cbiAgICAgIGJyYWNlcy5wdXNoKG9wZW4pO1xuICAgICAgcHVzaChvcGVuKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSA9PT0gJ30nKSB7XG4gICAgICBjb25zdCBicmFjZSA9IGJyYWNlc1ticmFjZXMubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmIChvcHRzLm5vYnJhY2UgPT09IHRydWUgfHwgIWJyYWNlKSB7XG4gICAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlLCBvdXRwdXQ6IHZhbHVlIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IG91dHB1dCA9ICcpJztcblxuICAgICAgaWYgKGJyYWNlLmRvdHMgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgYXJyID0gdG9rZW5zLnNsaWNlKCk7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IGFyci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIHRva2Vucy5wb3AoKTtcbiAgICAgICAgICBpZiAoYXJyW2ldLnR5cGUgPT09ICdicmFjZScpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYXJyW2ldLnR5cGUgIT09ICdkb3RzJykge1xuICAgICAgICAgICAgcmFuZ2UudW5zaGlmdChhcnJbaV0udmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG91dHB1dCA9IGV4cGFuZFJhbmdlKHJhbmdlLCBvcHRzKTtcbiAgICAgICAgc3RhdGUuYmFja3RyYWNrID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGJyYWNlLmNvbW1hICE9PSB0cnVlICYmIGJyYWNlLmRvdHMgIT09IHRydWUpIHtcbiAgICAgICAgY29uc3Qgb3V0ID0gc3RhdGUub3V0cHV0LnNsaWNlKDAsIGJyYWNlLm91dHB1dEluZGV4KTtcbiAgICAgICAgY29uc3QgdG9rcyA9IHN0YXRlLnRva2Vucy5zbGljZShicmFjZS50b2tlbnNJbmRleCk7XG4gICAgICAgIGJyYWNlLnZhbHVlID0gYnJhY2Uub3V0cHV0ID0gJ1xcXFx7JztcbiAgICAgICAgdmFsdWUgPSBvdXRwdXQgPSAnXFxcXH0nO1xuICAgICAgICBzdGF0ZS5vdXRwdXQgPSBvdXQ7XG4gICAgICAgIGZvciAoY29uc3QgdCBvZiB0b2tzKSB7XG4gICAgICAgICAgc3RhdGUub3V0cHV0ICs9ICh0Lm91dHB1dCB8fCB0LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwdXNoKHsgdHlwZTogJ2JyYWNlJywgdmFsdWUsIG91dHB1dCB9KTtcbiAgICAgIGRlY3JlbWVudCgnYnJhY2VzJyk7XG4gICAgICBicmFjZXMucG9wKCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQaXBlc1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSAnfCcpIHtcbiAgICAgIGlmIChleHRnbG9icy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGV4dGdsb2JzW2V4dGdsb2JzLmxlbmd0aCAtIDFdLmNvbmRpdGlvbnMrKztcbiAgICAgIH1cbiAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tbWFzXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICcsJykge1xuICAgICAgbGV0IG91dHB1dCA9IHZhbHVlO1xuXG4gICAgICBjb25zdCBicmFjZSA9IGJyYWNlc1ticmFjZXMubGVuZ3RoIC0gMV07XG4gICAgICBpZiAoYnJhY2UgJiYgc3RhY2tbc3RhY2subGVuZ3RoIC0gMV0gPT09ICdicmFjZXMnKSB7XG4gICAgICAgIGJyYWNlLmNvbW1hID0gdHJ1ZTtcbiAgICAgICAgb3V0cHV0ID0gJ3wnO1xuICAgICAgfVxuXG4gICAgICBwdXNoKHsgdHlwZTogJ2NvbW1hJywgdmFsdWUsIG91dHB1dCB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNsYXNoZXNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJy8nKSB7XG4gICAgICAvLyBpZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBnbG9iIGlzIFwiLi9cIiwgYWR2YW5jZSB0aGUgc3RhcnRcbiAgICAgIC8vIHRvIHRoZSBjdXJyZW50IGluZGV4LCBhbmQgZG9uJ3QgYWRkIHRoZSBcIi4vXCIgY2hhcmFjdGVyc1xuICAgICAgLy8gdG8gdGhlIHN0YXRlLiBUaGlzIGdyZWF0bHkgc2ltcGxpZmllcyBsb29rYmVoaW5kcyB3aGVuXG4gICAgICAvLyBjaGVja2luZyBmb3IgQk9TIGNoYXJhY3RlcnMgbGlrZSBcIiFcIiBhbmQgXCIuXCIgKG5vdCBcIi4vXCIpXG4gICAgICBpZiAocHJldi50eXBlID09PSAnZG90JyAmJiBzdGF0ZS5pbmRleCA9PT0gc3RhdGUuc3RhcnQgKyAxKSB7XG4gICAgICAgIHN0YXRlLnN0YXJ0ID0gc3RhdGUuaW5kZXggKyAxO1xuICAgICAgICBzdGF0ZS5jb25zdW1lZCA9ICcnO1xuICAgICAgICBzdGF0ZS5vdXRwdXQgPSAnJztcbiAgICAgICAgdG9rZW5zLnBvcCgpO1xuICAgICAgICBwcmV2ID0gYm9zOyAvLyByZXNldCBcInByZXZcIiB0byB0aGUgZmlyc3QgdG9rZW5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAnc2xhc2gnLCB2YWx1ZSwgb3V0cHV0OiBTTEFTSF9MSVRFUkFMIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRG90c1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSAnLicpIHtcbiAgICAgIGlmIChzdGF0ZS5icmFjZXMgPiAwICYmIHByZXYudHlwZSA9PT0gJ2RvdCcpIHtcbiAgICAgICAgaWYgKHByZXYudmFsdWUgPT09ICcuJykgcHJldi5vdXRwdXQgPSBET1RfTElURVJBTDtcbiAgICAgICAgY29uc3QgYnJhY2UgPSBicmFjZXNbYnJhY2VzLmxlbmd0aCAtIDFdO1xuICAgICAgICBwcmV2LnR5cGUgPSAnZG90cyc7XG4gICAgICAgIHByZXYub3V0cHV0ICs9IHZhbHVlO1xuICAgICAgICBwcmV2LnZhbHVlICs9IHZhbHVlO1xuICAgICAgICBicmFjZS5kb3RzID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICgoc3RhdGUuYnJhY2VzICsgc3RhdGUucGFyZW5zKSA9PT0gMCAmJiBwcmV2LnR5cGUgIT09ICdib3MnICYmIHByZXYudHlwZSAhPT0gJ3NsYXNoJykge1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZSwgb3V0cHV0OiBET1RfTElURVJBTCB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAnZG90JywgdmFsdWUsIG91dHB1dDogRE9UX0xJVEVSQUwgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBRdWVzdGlvbiBtYXJrc1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSAnPycpIHtcbiAgICAgIGNvbnN0IGlzR3JvdXAgPSBwcmV2ICYmIHByZXYudmFsdWUgPT09ICcoJztcbiAgICAgIGlmICghaXNHcm91cCAmJiBvcHRzLm5vZXh0Z2xvYiAhPT0gdHJ1ZSAmJiBwZWVrKCkgPT09ICcoJyAmJiBwZWVrKDIpICE9PSAnPycpIHtcbiAgICAgICAgZXh0Z2xvYk9wZW4oJ3FtYXJrJywgdmFsdWUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByZXYgJiYgcHJldi50eXBlID09PSAncGFyZW4nKSB7XG4gICAgICAgIGNvbnN0IG5leHQgPSBwZWVrKCk7XG4gICAgICAgIGxldCBvdXRwdXQgPSB2YWx1ZTtcblxuICAgICAgICBpZiAobmV4dCA9PT0gJzwnICYmICF1dGlscy5zdXBwb3J0c0xvb2tiZWhpbmRzKCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vZGUuanMgdjEwIG9yIGhpZ2hlciBpcyByZXF1aXJlZCBmb3IgcmVnZXggbG9va2JlaGluZHMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgocHJldi52YWx1ZSA9PT0gJygnICYmICEvWyE9PDpdLy50ZXN0KG5leHQpKSB8fCAobmV4dCA9PT0gJzwnICYmICEvPChbIT1dfFxcdys+KS8udGVzdChyZW1haW5pbmcoKSkpKSB7XG4gICAgICAgICAgb3V0cHV0ID0gYFxcXFwke3ZhbHVlfWA7XG4gICAgICAgIH1cblxuICAgICAgICBwdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZSwgb3V0cHV0IH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdHMuZG90ICE9PSB0cnVlICYmIChwcmV2LnR5cGUgPT09ICdzbGFzaCcgfHwgcHJldi50eXBlID09PSAnYm9zJykpIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICdxbWFyaycsIHZhbHVlLCBvdXRwdXQ6IFFNQVJLX05PX0RPVCB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAncW1hcmsnLCB2YWx1ZSwgb3V0cHV0OiBRTUFSSyB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4Y2xhbWF0aW9uXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICchJykge1xuICAgICAgaWYgKG9wdHMubm9leHRnbG9iICE9PSB0cnVlICYmIHBlZWsoKSA9PT0gJygnKSB7XG4gICAgICAgIGlmIChwZWVrKDIpICE9PSAnPycgfHwgIS9bIT08Ol0vLnRlc3QocGVlaygzKSkpIHtcbiAgICAgICAgICBleHRnbG9iT3BlbignbmVnYXRlJywgdmFsdWUpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRzLm5vbmVnYXRlICE9PSB0cnVlICYmIHN0YXRlLmluZGV4ID09PSAwKSB7XG4gICAgICAgIG5lZ2F0ZSgpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQbHVzXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICcrJykge1xuICAgICAgaWYgKG9wdHMubm9leHRnbG9iICE9PSB0cnVlICYmIHBlZWsoKSA9PT0gJygnICYmIHBlZWsoMikgIT09ICc/Jykge1xuICAgICAgICBleHRnbG9iT3BlbigncGx1cycsIHZhbHVlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICgocHJldiAmJiBwcmV2LnZhbHVlID09PSAnKCcpIHx8IG9wdHMucmVnZXggPT09IGZhbHNlKSB7XG4gICAgICAgIHB1c2goeyB0eXBlOiAncGx1cycsIHZhbHVlLCBvdXRwdXQ6IFBMVVNfTElURVJBTCB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICgocHJldiAmJiAocHJldi50eXBlID09PSAnYnJhY2tldCcgfHwgcHJldi50eXBlID09PSAncGFyZW4nIHx8IHByZXYudHlwZSA9PT0gJ2JyYWNlJykpIHx8IHN0YXRlLnBhcmVucyA+IDApIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICdwbHVzJywgdmFsdWUgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBwdXNoKHsgdHlwZTogJ3BsdXMnLCB2YWx1ZTogUExVU19MSVRFUkFMIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGxhaW4gdGV4dFxuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSAnQCcpIHtcbiAgICAgIGlmIChvcHRzLm5vZXh0Z2xvYiAhPT0gdHJ1ZSAmJiBwZWVrKCkgPT09ICcoJyAmJiBwZWVrKDIpICE9PSAnPycpIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICdhdCcsIGV4dGdsb2I6IHRydWUsIHZhbHVlLCBvdXRwdXQ6ICcnIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQbGFpbiB0ZXh0XG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgIT09ICcqJykge1xuICAgICAgaWYgKHZhbHVlID09PSAnJCcgfHwgdmFsdWUgPT09ICdeJykge1xuICAgICAgICB2YWx1ZSA9IGBcXFxcJHt2YWx1ZX1gO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXRjaCA9IFJFR0VYX05PTl9TUEVDSUFMX0NIQVJTLmV4ZWMocmVtYWluaW5nKCkpO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIHZhbHVlICs9IG1hdGNoWzBdO1xuICAgICAgICBzdGF0ZS5pbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RhcnNcbiAgICAgKi9cblxuICAgIGlmIChwcmV2ICYmIChwcmV2LnR5cGUgPT09ICdnbG9ic3RhcicgfHwgcHJldi5zdGFyID09PSB0cnVlKSkge1xuICAgICAgcHJldi50eXBlID0gJ3N0YXInO1xuICAgICAgcHJldi5zdGFyID0gdHJ1ZTtcbiAgICAgIHByZXYudmFsdWUgKz0gdmFsdWU7XG4gICAgICBwcmV2Lm91dHB1dCA9IHN0YXI7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2sgPSB0cnVlO1xuICAgICAgc3RhdGUuZ2xvYnN0YXIgPSB0cnVlO1xuICAgICAgY29uc3VtZSh2YWx1ZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdCA9IHJlbWFpbmluZygpO1xuICAgIGlmIChvcHRzLm5vZXh0Z2xvYiAhPT0gdHJ1ZSAmJiAvXlxcKFteP10vLnRlc3QocmVzdCkpIHtcbiAgICAgIGV4dGdsb2JPcGVuKCdzdGFyJywgdmFsdWUpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHByZXYudHlwZSA9PT0gJ3N0YXInKSB7XG4gICAgICBpZiAob3B0cy5ub2dsb2JzdGFyID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN1bWUodmFsdWUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJpb3IgPSBwcmV2LnByZXY7XG4gICAgICBjb25zdCBiZWZvcmUgPSBwcmlvci5wcmV2O1xuICAgICAgY29uc3QgaXNTdGFydCA9IHByaW9yLnR5cGUgPT09ICdzbGFzaCcgfHwgcHJpb3IudHlwZSA9PT0gJ2Jvcyc7XG4gICAgICBjb25zdCBhZnRlclN0YXIgPSBiZWZvcmUgJiYgKGJlZm9yZS50eXBlID09PSAnc3RhcicgfHwgYmVmb3JlLnR5cGUgPT09ICdnbG9ic3RhcicpO1xuXG4gICAgICBpZiAob3B0cy5iYXNoID09PSB0cnVlICYmICghaXNTdGFydCB8fCAocmVzdFswXSAmJiByZXN0WzBdICE9PSAnLycpKSkge1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3N0YXInLCB2YWx1ZSwgb3V0cHV0OiAnJyB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzQnJhY2UgPSBzdGF0ZS5icmFjZXMgPiAwICYmIChwcmlvci50eXBlID09PSAnY29tbWEnIHx8IHByaW9yLnR5cGUgPT09ICdicmFjZScpO1xuICAgICAgY29uc3QgaXNFeHRnbG9iID0gZXh0Z2xvYnMubGVuZ3RoICYmIChwcmlvci50eXBlID09PSAncGlwZScgfHwgcHJpb3IudHlwZSA9PT0gJ3BhcmVuJyk7XG4gICAgICBpZiAoIWlzU3RhcnQgJiYgcHJpb3IudHlwZSAhPT0gJ3BhcmVuJyAmJiAhaXNCcmFjZSAmJiAhaXNFeHRnbG9iKSB7XG4gICAgICAgIHB1c2goeyB0eXBlOiAnc3RhcicsIHZhbHVlLCBvdXRwdXQ6ICcnIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gc3RyaXAgY29uc2VjdXRpdmUgYC8qKi9gXG4gICAgICB3aGlsZSAocmVzdC5zbGljZSgwLCAzKSA9PT0gJy8qKicpIHtcbiAgICAgICAgY29uc3QgYWZ0ZXIgPSBpbnB1dFtzdGF0ZS5pbmRleCArIDRdO1xuICAgICAgICBpZiAoYWZ0ZXIgJiYgYWZ0ZXIgIT09ICcvJykge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJlc3QgPSByZXN0LnNsaWNlKDMpO1xuICAgICAgICBjb25zdW1lKCcvKionLCAzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByaW9yLnR5cGUgPT09ICdib3MnICYmIGVvcygpKSB7XG4gICAgICAgIHByZXYudHlwZSA9ICdnbG9ic3Rhcic7XG4gICAgICAgIHByZXYudmFsdWUgKz0gdmFsdWU7XG4gICAgICAgIHByZXYub3V0cHV0ID0gZ2xvYnN0YXIob3B0cyk7XG4gICAgICAgIHN0YXRlLm91dHB1dCA9IHByZXYub3V0cHV0O1xuICAgICAgICBzdGF0ZS5nbG9ic3RhciA9IHRydWU7XG4gICAgICAgIGNvbnN1bWUodmFsdWUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByaW9yLnR5cGUgPT09ICdzbGFzaCcgJiYgcHJpb3IucHJldi50eXBlICE9PSAnYm9zJyAmJiAhYWZ0ZXJTdGFyICYmIGVvcygpKSB7XG4gICAgICAgIHN0YXRlLm91dHB1dCA9IHN0YXRlLm91dHB1dC5zbGljZSgwLCAtKHByaW9yLm91dHB1dCArIHByZXYub3V0cHV0KS5sZW5ndGgpO1xuICAgICAgICBwcmlvci5vdXRwdXQgPSBgKD86JHtwcmlvci5vdXRwdXR9YDtcblxuICAgICAgICBwcmV2LnR5cGUgPSAnZ2xvYnN0YXInO1xuICAgICAgICBwcmV2Lm91dHB1dCA9IGdsb2JzdGFyKG9wdHMpICsgKG9wdHMuc3RyaWN0U2xhc2hlcyA/ICcpJyA6ICd8JCknKTtcbiAgICAgICAgcHJldi52YWx1ZSArPSB2YWx1ZTtcbiAgICAgICAgc3RhdGUuZ2xvYnN0YXIgPSB0cnVlO1xuICAgICAgICBzdGF0ZS5vdXRwdXQgKz0gcHJpb3Iub3V0cHV0ICsgcHJldi5vdXRwdXQ7XG4gICAgICAgIGNvbnN1bWUodmFsdWUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByaW9yLnR5cGUgPT09ICdzbGFzaCcgJiYgcHJpb3IucHJldi50eXBlICE9PSAnYm9zJyAmJiByZXN0WzBdID09PSAnLycpIHtcbiAgICAgICAgY29uc3QgZW5kID0gcmVzdFsxXSAhPT0gdm9pZCAwID8gJ3wkJyA6ICcnO1xuXG4gICAgICAgIHN0YXRlLm91dHB1dCA9IHN0YXRlLm91dHB1dC5zbGljZSgwLCAtKHByaW9yLm91dHB1dCArIHByZXYub3V0cHV0KS5sZW5ndGgpO1xuICAgICAgICBwcmlvci5vdXRwdXQgPSBgKD86JHtwcmlvci5vdXRwdXR9YDtcblxuICAgICAgICBwcmV2LnR5cGUgPSAnZ2xvYnN0YXInO1xuICAgICAgICBwcmV2Lm91dHB1dCA9IGAke2dsb2JzdGFyKG9wdHMpfSR7U0xBU0hfTElURVJBTH18JHtTTEFTSF9MSVRFUkFMfSR7ZW5kfSlgO1xuICAgICAgICBwcmV2LnZhbHVlICs9IHZhbHVlO1xuXG4gICAgICAgIHN0YXRlLm91dHB1dCArPSBwcmlvci5vdXRwdXQgKyBwcmV2Lm91dHB1dDtcbiAgICAgICAgc3RhdGUuZ2xvYnN0YXIgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN1bWUodmFsdWUgKyBhZHZhbmNlKCkpO1xuXG4gICAgICAgIHB1c2goeyB0eXBlOiAnc2xhc2gnLCB2YWx1ZTogJy8nLCBvdXRwdXQ6ICcnIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByaW9yLnR5cGUgPT09ICdib3MnICYmIHJlc3RbMF0gPT09ICcvJykge1xuICAgICAgICBwcmV2LnR5cGUgPSAnZ2xvYnN0YXInO1xuICAgICAgICBwcmV2LnZhbHVlICs9IHZhbHVlO1xuICAgICAgICBwcmV2Lm91dHB1dCA9IGAoPzpefCR7U0xBU0hfTElURVJBTH18JHtnbG9ic3RhcihvcHRzKX0ke1NMQVNIX0xJVEVSQUx9KWA7XG4gICAgICAgIHN0YXRlLm91dHB1dCA9IHByZXYub3V0cHV0O1xuICAgICAgICBzdGF0ZS5nbG9ic3RhciA9IHRydWU7XG4gICAgICAgIGNvbnN1bWUodmFsdWUgKyBhZHZhbmNlKCkpO1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3NsYXNoJywgdmFsdWU6ICcvJywgb3V0cHV0OiAnJyB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIHJlbW92ZSBzaW5nbGUgc3RhciBmcm9tIG91dHB1dFxuICAgICAgc3RhdGUub3V0cHV0ID0gc3RhdGUub3V0cHV0LnNsaWNlKDAsIC1wcmV2Lm91dHB1dC5sZW5ndGgpO1xuXG4gICAgICAvLyByZXNldCBwcmV2aW91cyB0b2tlbiB0byBnbG9ic3RhclxuICAgICAgcHJldi50eXBlID0gJ2dsb2JzdGFyJztcbiAgICAgIHByZXYub3V0cHV0ID0gZ2xvYnN0YXIob3B0cyk7XG4gICAgICBwcmV2LnZhbHVlICs9IHZhbHVlO1xuXG4gICAgICAvLyByZXNldCBvdXRwdXQgd2l0aCBnbG9ic3RhclxuICAgICAgc3RhdGUub3V0cHV0ICs9IHByZXYub3V0cHV0O1xuICAgICAgc3RhdGUuZ2xvYnN0YXIgPSB0cnVlO1xuICAgICAgY29uc3VtZSh2YWx1ZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCB0b2tlbiA9IHsgdHlwZTogJ3N0YXInLCB2YWx1ZSwgb3V0cHV0OiBzdGFyIH07XG5cbiAgICBpZiAob3B0cy5iYXNoID09PSB0cnVlKSB7XG4gICAgICB0b2tlbi5vdXRwdXQgPSAnLio/JztcbiAgICAgIGlmIChwcmV2LnR5cGUgPT09ICdib3MnIHx8IHByZXYudHlwZSA9PT0gJ3NsYXNoJykge1xuICAgICAgICB0b2tlbi5vdXRwdXQgPSBub2RvdCArIHRva2VuLm91dHB1dDtcbiAgICAgIH1cbiAgICAgIHB1c2godG9rZW4pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHByZXYgJiYgKHByZXYudHlwZSA9PT0gJ2JyYWNrZXQnIHx8IHByZXYudHlwZSA9PT0gJ3BhcmVuJykgJiYgb3B0cy5yZWdleCA9PT0gdHJ1ZSkge1xuICAgICAgdG9rZW4ub3V0cHV0ID0gdmFsdWU7XG4gICAgICBwdXNoKHRva2VuKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5pbmRleCA9PT0gc3RhdGUuc3RhcnQgfHwgcHJldi50eXBlID09PSAnc2xhc2gnIHx8IHByZXYudHlwZSA9PT0gJ2RvdCcpIHtcbiAgICAgIGlmIChwcmV2LnR5cGUgPT09ICdkb3QnKSB7XG4gICAgICAgIHN0YXRlLm91dHB1dCArPSBOT19ET1RfU0xBU0g7XG4gICAgICAgIHByZXYub3V0cHV0ICs9IE5PX0RPVF9TTEFTSDtcblxuICAgICAgfSBlbHNlIGlmIChvcHRzLmRvdCA9PT0gdHJ1ZSkge1xuICAgICAgICBzdGF0ZS5vdXRwdXQgKz0gTk9fRE9UU19TTEFTSDtcbiAgICAgICAgcHJldi5vdXRwdXQgKz0gTk9fRE9UU19TTEFTSDtcblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUub3V0cHV0ICs9IG5vZG90O1xuICAgICAgICBwcmV2Lm91dHB1dCArPSBub2RvdDtcbiAgICAgIH1cblxuICAgICAgaWYgKHBlZWsoKSAhPT0gJyonKSB7XG4gICAgICAgIHN0YXRlLm91dHB1dCArPSBPTkVfQ0hBUjtcbiAgICAgICAgcHJldi5vdXRwdXQgKz0gT05FX0NIQVI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHVzaCh0b2tlbik7XG4gIH1cblxuICB3aGlsZSAoc3RhdGUuYnJhY2tldHMgPiAwKSB7XG4gICAgaWYgKG9wdHMuc3RyaWN0QnJhY2tldHMgPT09IHRydWUpIHRocm93IG5ldyBTeW50YXhFcnJvcihzeW50YXhFcnJvcignY2xvc2luZycsICddJykpO1xuICAgIHN0YXRlLm91dHB1dCA9IHV0aWxzLmVzY2FwZUxhc3Qoc3RhdGUub3V0cHV0LCAnWycpO1xuICAgIGRlY3JlbWVudCgnYnJhY2tldHMnKTtcbiAgfVxuXG4gIHdoaWxlIChzdGF0ZS5wYXJlbnMgPiAwKSB7XG4gICAgaWYgKG9wdHMuc3RyaWN0QnJhY2tldHMgPT09IHRydWUpIHRocm93IG5ldyBTeW50YXhFcnJvcihzeW50YXhFcnJvcignY2xvc2luZycsICcpJykpO1xuICAgIHN0YXRlLm91dHB1dCA9IHV0aWxzLmVzY2FwZUxhc3Qoc3RhdGUub3V0cHV0LCAnKCcpO1xuICAgIGRlY3JlbWVudCgncGFyZW5zJyk7XG4gIH1cblxuICB3aGlsZSAoc3RhdGUuYnJhY2VzID4gMCkge1xuICAgIGlmIChvcHRzLnN0cmljdEJyYWNrZXRzID09PSB0cnVlKSB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ludGF4RXJyb3IoJ2Nsb3NpbmcnLCAnfScpKTtcbiAgICBzdGF0ZS5vdXRwdXQgPSB1dGlscy5lc2NhcGVMYXN0KHN0YXRlLm91dHB1dCwgJ3snKTtcbiAgICBkZWNyZW1lbnQoJ2JyYWNlcycpO1xuICB9XG5cbiAgaWYgKG9wdHMuc3RyaWN0U2xhc2hlcyAhPT0gdHJ1ZSAmJiAocHJldi50eXBlID09PSAnc3RhcicgfHwgcHJldi50eXBlID09PSAnYnJhY2tldCcpKSB7XG4gICAgcHVzaCh7IHR5cGU6ICdtYXliZV9zbGFzaCcsIHZhbHVlOiAnJywgb3V0cHV0OiBgJHtTTEFTSF9MSVRFUkFMfT9gIH0pO1xuICB9XG5cbiAgLy8gcmVidWlsZCB0aGUgb3V0cHV0IGlmIHdlIGhhZCB0byBiYWNrdHJhY2sgYXQgYW55IHBvaW50XG4gIGlmIChzdGF0ZS5iYWNrdHJhY2sgPT09IHRydWUpIHtcbiAgICBzdGF0ZS5vdXRwdXQgPSAnJztcblxuICAgIGZvciAoY29uc3QgdG9rZW4gb2Ygc3RhdGUudG9rZW5zKSB7XG4gICAgICBzdGF0ZS5vdXRwdXQgKz0gdG9rZW4ub3V0cHV0ICE9IG51bGwgPyB0b2tlbi5vdXRwdXQgOiB0b2tlbi52YWx1ZTtcblxuICAgICAgaWYgKHRva2VuLnN1ZmZpeCkge1xuICAgICAgICBzdGF0ZS5vdXRwdXQgKz0gdG9rZW4uc3VmZml4O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG5cbi8qKlxuICogRmFzdCBwYXRocyBmb3IgY3JlYXRpbmcgcmVndWxhciBleHByZXNzaW9ucyBmb3IgY29tbW9uIGdsb2IgcGF0dGVybnMuXG4gKiBUaGlzIGNhbiBzaWduaWZpY2FudGx5IHNwZWVkIHVwIHByb2Nlc3NpbmcgYW5kIGhhcyB2ZXJ5IGxpdHRsZSBkb3duc2lkZVxuICogaW1wYWN0IHdoZW4gbm9uZSBvZiB0aGUgZmFzdCBwYXRocyBtYXRjaC5cbiAqL1xuXG5wYXJzZS5mYXN0cGF0aHMgPSAoaW5wdXQsIG9wdGlvbnMpID0+IHtcbiAgY29uc3Qgb3B0cyA9IHsgLi4ub3B0aW9ucyB9O1xuICBjb25zdCBtYXggPSB0eXBlb2Ygb3B0cy5tYXhMZW5ndGggPT09ICdudW1iZXInID8gTWF0aC5taW4oTUFYX0xFTkdUSCwgb3B0cy5tYXhMZW5ndGgpIDogTUFYX0xFTkdUSDtcbiAgY29uc3QgbGVuID0gaW5wdXQubGVuZ3RoO1xuICBpZiAobGVuID4gbWF4KSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBJbnB1dCBsZW5ndGg6ICR7bGVufSwgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgbGVuZ3RoOiAke21heH1gKTtcbiAgfVxuXG4gIGlucHV0ID0gUkVQTEFDRU1FTlRTW2lucHV0XSB8fCBpbnB1dDtcbiAgY29uc3Qgd2luMzIgPSB1dGlscy5pc1dpbmRvd3Mob3B0aW9ucyk7XG5cbiAgLy8gY3JlYXRlIGNvbnN0YW50cyBiYXNlZCBvbiBwbGF0Zm9ybSwgZm9yIHdpbmRvd3Mgb3IgcG9zaXhcbiAgY29uc3Qge1xuICAgIERPVF9MSVRFUkFMLFxuICAgIFNMQVNIX0xJVEVSQUwsXG4gICAgT05FX0NIQVIsXG4gICAgRE9UU19TTEFTSCxcbiAgICBOT19ET1QsXG4gICAgTk9fRE9UUyxcbiAgICBOT19ET1RTX1NMQVNILFxuICAgIFNUQVIsXG4gICAgU1RBUlRfQU5DSE9SXG4gIH0gPSBjb25zdGFudHMuZ2xvYkNoYXJzKHdpbjMyKTtcblxuICBjb25zdCBub2RvdCA9IG9wdHMuZG90ID8gTk9fRE9UUyA6IE5PX0RPVDtcbiAgY29uc3Qgc2xhc2hEb3QgPSBvcHRzLmRvdCA/IE5PX0RPVFNfU0xBU0ggOiBOT19ET1Q7XG4gIGNvbnN0IGNhcHR1cmUgPSBvcHRzLmNhcHR1cmUgPyAnJyA6ICc/Oic7XG4gIGNvbnN0IHN0YXRlID0geyBuZWdhdGVkOiBmYWxzZSwgcHJlZml4OiAnJyB9O1xuICBsZXQgc3RhciA9IG9wdHMuYmFzaCA9PT0gdHJ1ZSA/ICcuKj8nIDogU1RBUjtcblxuICBpZiAob3B0cy5jYXB0dXJlKSB7XG4gICAgc3RhciA9IGAoJHtzdGFyfSlgO1xuICB9XG5cbiAgY29uc3QgZ2xvYnN0YXIgPSBvcHRzID0+IHtcbiAgICBpZiAob3B0cy5ub2dsb2JzdGFyID09PSB0cnVlKSByZXR1cm4gc3RhcjtcbiAgICByZXR1cm4gYCgke2NhcHR1cmV9KD86KD8hJHtTVEFSVF9BTkNIT1J9JHtvcHRzLmRvdCA/IERPVFNfU0xBU0ggOiBET1RfTElURVJBTH0pLikqPylgO1xuICB9O1xuXG4gIGNvbnN0IGNyZWF0ZSA9IHN0ciA9PiB7XG4gICAgc3dpdGNoIChzdHIpIHtcbiAgICAgIGNhc2UgJyonOlxuICAgICAgICByZXR1cm4gYCR7bm9kb3R9JHtPTkVfQ0hBUn0ke3N0YXJ9YDtcblxuICAgICAgY2FzZSAnLionOlxuICAgICAgICByZXR1cm4gYCR7RE9UX0xJVEVSQUx9JHtPTkVfQ0hBUn0ke3N0YXJ9YDtcblxuICAgICAgY2FzZSAnKi4qJzpcbiAgICAgICAgcmV0dXJuIGAke25vZG90fSR7c3Rhcn0ke0RPVF9MSVRFUkFMfSR7T05FX0NIQVJ9JHtzdGFyfWA7XG5cbiAgICAgIGNhc2UgJyovKic6XG4gICAgICAgIHJldHVybiBgJHtub2RvdH0ke3N0YXJ9JHtTTEFTSF9MSVRFUkFMfSR7T05FX0NIQVJ9JHtzbGFzaERvdH0ke3N0YXJ9YDtcblxuICAgICAgY2FzZSAnKionOlxuICAgICAgICByZXR1cm4gbm9kb3QgKyBnbG9ic3RhcihvcHRzKTtcblxuICAgICAgY2FzZSAnKiovKic6XG4gICAgICAgIHJldHVybiBgKD86JHtub2RvdH0ke2dsb2JzdGFyKG9wdHMpfSR7U0xBU0hfTElURVJBTH0pPyR7c2xhc2hEb3R9JHtPTkVfQ0hBUn0ke3N0YXJ9YDtcblxuICAgICAgY2FzZSAnKiovKi4qJzpcbiAgICAgICAgcmV0dXJuIGAoPzoke25vZG90fSR7Z2xvYnN0YXIob3B0cyl9JHtTTEFTSF9MSVRFUkFMfSk/JHtzbGFzaERvdH0ke3N0YXJ9JHtET1RfTElURVJBTH0ke09ORV9DSEFSfSR7c3Rhcn1gO1xuXG4gICAgICBjYXNlICcqKi8uKic6XG4gICAgICAgIHJldHVybiBgKD86JHtub2RvdH0ke2dsb2JzdGFyKG9wdHMpfSR7U0xBU0hfTElURVJBTH0pPyR7RE9UX0xJVEVSQUx9JHtPTkVfQ0hBUn0ke3N0YXJ9YDtcblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBjb25zdCBtYXRjaCA9IC9eKC4qPylcXC4oXFx3KykkLy5leGVjKHN0cik7XG4gICAgICAgIGlmICghbWF0Y2gpIHJldHVybjtcblxuICAgICAgICBjb25zdCBzb3VyY2UgPSBjcmVhdGUobWF0Y2hbMV0pO1xuICAgICAgICBpZiAoIXNvdXJjZSkgcmV0dXJuO1xuXG4gICAgICAgIHJldHVybiBzb3VyY2UgKyBET1RfTElURVJBTCArIG1hdGNoWzJdO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBvdXRwdXQgPSB1dGlscy5yZW1vdmVQcmVmaXgoaW5wdXQsIHN0YXRlKTtcbiAgbGV0IHNvdXJjZSA9IGNyZWF0ZShvdXRwdXQpO1xuXG4gIGlmIChzb3VyY2UgJiYgb3B0cy5zdHJpY3RTbGFzaGVzICE9PSB0cnVlKSB7XG4gICAgc291cmNlICs9IGAke1NMQVNIX0xJVEVSQUx9P2A7XG4gIH1cblxuICByZXR1cm4gc291cmNlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5jb25zdCBzY2FuID0gcmVxdWlyZSgnLi9zY2FuJyk7XG5jb25zdCBwYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKTtcbmNvbnN0IGlzT2JqZWN0ID0gdmFsID0+IHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWwpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXRjaGVyIGZ1bmN0aW9uIGZyb20gb25lIG9yIG1vcmUgZ2xvYiBwYXR0ZXJucy4gVGhlXG4gKiByZXR1cm5lZCBmdW5jdGlvbiB0YWtlcyBhIHN0cmluZyB0byBtYXRjaCBhcyBpdHMgZmlyc3QgYXJndW1lbnQsXG4gKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSBzdHJpbmcgaXMgYSBtYXRjaC4gVGhlIHJldHVybmVkIG1hdGNoZXJcbiAqIGZ1bmN0aW9uIGFsc28gdGFrZXMgYSBib29sZWFuIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdGhhdCwgd2hlbiB0cnVlLFxuICogcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBwaWNvbWF0Y2ggPSByZXF1aXJlKCdwaWNvbWF0Y2gnKTtcbiAqIC8vIHBpY29tYXRjaChnbG9iWywgb3B0aW9uc10pO1xuICpcbiAqIGNvbnN0IGlzTWF0Y2ggPSBwaWNvbWF0Y2goJyouISgqYSknKTtcbiAqIGNvbnNvbGUubG9nKGlzTWF0Y2goJ2EuYScpKTsgLy89PiBmYWxzZVxuICogY29uc29sZS5sb2coaXNNYXRjaCgnYS5iJykpOyAvLz0+IHRydWVcbiAqIGBgYFxuICogQG5hbWUgcGljb21hdGNoXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gYGdsb2JzYCBPbmUgb3IgbW9yZSBnbG9iIHBhdHRlcm5zLlxuICogQHBhcmFtIHtPYmplY3Q9fSBgb3B0aW9uc2BcbiAqIEByZXR1cm4ge0Z1bmN0aW9uPX0gUmV0dXJucyBhIG1hdGNoZXIgZnVuY3Rpb24uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmNvbnN0IHBpY29tYXRjaCA9IChnbG9iLCBvcHRpb25zLCByZXR1cm5TdGF0ZSA9IGZhbHNlKSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KGdsb2IpKSB7XG4gICAgY29uc3QgZm5zID0gZ2xvYi5tYXAoaW5wdXQgPT4gcGljb21hdGNoKGlucHV0LCBvcHRpb25zLCByZXR1cm5TdGF0ZSkpO1xuICAgIGNvbnN0IGFycmF5TWF0Y2hlciA9IHN0ciA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGlzTWF0Y2ggb2YgZm5zKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gaXNNYXRjaChzdHIpO1xuICAgICAgICBpZiAoc3RhdGUpIHJldHVybiBzdGF0ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIHJldHVybiBhcnJheU1hdGNoZXI7XG4gIH1cblxuICBjb25zdCBpc1N0YXRlID0gaXNPYmplY3QoZ2xvYikgJiYgZ2xvYi50b2tlbnMgJiYgZ2xvYi5pbnB1dDtcblxuICBpZiAoZ2xvYiA9PT0gJycgfHwgKHR5cGVvZiBnbG9iICE9PSAnc3RyaW5nJyAmJiAhaXNTdGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBwYXR0ZXJuIHRvIGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICB9XG5cbiAgY29uc3Qgb3B0cyA9IG9wdGlvbnMgfHwge307XG4gIGNvbnN0IHBvc2l4ID0gdXRpbHMuaXNXaW5kb3dzKG9wdGlvbnMpO1xuICBjb25zdCByZWdleCA9IGlzU3RhdGVcbiAgICA/IHBpY29tYXRjaC5jb21waWxlUmUoZ2xvYiwgb3B0aW9ucylcbiAgICA6IHBpY29tYXRjaC5tYWtlUmUoZ2xvYiwgb3B0aW9ucywgZmFsc2UsIHRydWUpO1xuXG4gIGNvbnN0IHN0YXRlID0gcmVnZXguc3RhdGU7XG4gIGRlbGV0ZSByZWdleC5zdGF0ZTtcblxuICBsZXQgaXNJZ25vcmVkID0gKCkgPT4gZmFsc2U7XG4gIGlmIChvcHRzLmlnbm9yZSkge1xuICAgIGNvbnN0IGlnbm9yZU9wdHMgPSB7IC4uLm9wdGlvbnMsIGlnbm9yZTogbnVsbCwgb25NYXRjaDogbnVsbCwgb25SZXN1bHQ6IG51bGwgfTtcbiAgICBpc0lnbm9yZWQgPSBwaWNvbWF0Y2gob3B0cy5pZ25vcmUsIGlnbm9yZU9wdHMsIHJldHVyblN0YXRlKTtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoZXIgPSAoaW5wdXQsIHJldHVybk9iamVjdCA9IGZhbHNlKSA9PiB7XG4gICAgY29uc3QgeyBpc01hdGNoLCBtYXRjaCwgb3V0cHV0IH0gPSBwaWNvbWF0Y2gudGVzdChpbnB1dCwgcmVnZXgsIG9wdGlvbnMsIHsgZ2xvYiwgcG9zaXggfSk7XG4gICAgY29uc3QgcmVzdWx0ID0geyBnbG9iLCBzdGF0ZSwgcmVnZXgsIHBvc2l4LCBpbnB1dCwgb3V0cHV0LCBtYXRjaCwgaXNNYXRjaCB9O1xuXG4gICAgaWYgKHR5cGVvZiBvcHRzLm9uUmVzdWx0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvcHRzLm9uUmVzdWx0KHJlc3VsdCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTWF0Y2ggPT09IGZhbHNlKSB7XG4gICAgICByZXN1bHQuaXNNYXRjaCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHJldHVybk9iamVjdCA/IHJlc3VsdCA6IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChpc0lnbm9yZWQoaW5wdXQpKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdHMub25JZ25vcmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb3B0cy5vbklnbm9yZShyZXN1bHQpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LmlzTWF0Y2ggPSBmYWxzZTtcbiAgICAgIHJldHVybiByZXR1cm5PYmplY3QgPyByZXN1bHQgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdHMub25NYXRjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb3B0cy5vbk1hdGNoKHJlc3VsdCk7XG4gICAgfVxuICAgIHJldHVybiByZXR1cm5PYmplY3QgPyByZXN1bHQgOiB0cnVlO1xuICB9O1xuXG4gIGlmIChyZXR1cm5TdGF0ZSkge1xuICAgIG1hdGNoZXIuc3RhdGUgPSBzdGF0ZTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVyO1xufTtcblxuLyoqXG4gKiBUZXN0IGBpbnB1dGAgd2l0aCB0aGUgZ2l2ZW4gYHJlZ2V4YC4gVGhpcyBpcyB1c2VkIGJ5IHRoZSBtYWluXG4gKiBgcGljb21hdGNoKClgIGZ1bmN0aW9uIHRvIHRlc3QgdGhlIGlucHV0IHN0cmluZy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcGljb21hdGNoID0gcmVxdWlyZSgncGljb21hdGNoJyk7XG4gKiAvLyBwaWNvbWF0Y2gudGVzdChpbnB1dCwgcmVnZXhbLCBvcHRpb25zXSk7XG4gKlxuICogY29uc29sZS5sb2cocGljb21hdGNoLnRlc3QoJ2Zvby9iYXInLCAvXig/OihbXi9dKj8pXFwvKFteL10qPykpJC8pKTtcbiAqIC8vIHsgaXNNYXRjaDogdHJ1ZSwgbWF0Y2g6IFsgJ2Zvby8nLCAnZm9vJywgJ2JhcicgXSwgb3V0cHV0OiAnZm9vL2JhcicgfVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYGlucHV0YCBTdHJpbmcgdG8gdGVzdC5cbiAqIEBwYXJhbSB7UmVnRXhwfSBgcmVnZXhgXG4gKiBAcmV0dXJuIHtPYmplY3R9IFJldHVybnMgYW4gb2JqZWN0IHdpdGggbWF0Y2hpbmcgaW5mby5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxucGljb21hdGNoLnRlc3QgPSAoaW5wdXQsIHJlZ2V4LCBvcHRpb25zLCB7IGdsb2IsIHBvc2l4IH0gPSB7fSkgPT4ge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGlucHV0IHRvIGJlIGEgc3RyaW5nJyk7XG4gIH1cblxuICBpZiAoaW5wdXQgPT09ICcnKSB7XG4gICAgcmV0dXJuIHsgaXNNYXRjaDogZmFsc2UsIG91dHB1dDogJycgfTtcbiAgfVxuXG4gIGNvbnN0IG9wdHMgPSBvcHRpb25zIHx8IHt9O1xuICBjb25zdCBmb3JtYXQgPSBvcHRzLmZvcm1hdCB8fCAocG9zaXggPyB1dGlscy50b1Bvc2l4U2xhc2hlcyA6IG51bGwpO1xuICBsZXQgbWF0Y2ggPSBpbnB1dCA9PT0gZ2xvYjtcbiAgbGV0IG91dHB1dCA9IChtYXRjaCAmJiBmb3JtYXQpID8gZm9ybWF0KGlucHV0KSA6IGlucHV0O1xuXG4gIGlmIChtYXRjaCA9PT0gZmFsc2UpIHtcbiAgICBvdXRwdXQgPSBmb3JtYXQgPyBmb3JtYXQoaW5wdXQpIDogaW5wdXQ7XG4gICAgbWF0Y2ggPSBvdXRwdXQgPT09IGdsb2I7XG4gIH1cblxuICBpZiAobWF0Y2ggPT09IGZhbHNlIHx8IG9wdHMuY2FwdHVyZSA9PT0gdHJ1ZSkge1xuICAgIGlmIChvcHRzLm1hdGNoQmFzZSA9PT0gdHJ1ZSB8fCBvcHRzLmJhc2VuYW1lID09PSB0cnVlKSB7XG4gICAgICBtYXRjaCA9IHBpY29tYXRjaC5tYXRjaEJhc2UoaW5wdXQsIHJlZ2V4LCBvcHRpb25zLCBwb3NpeCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hdGNoID0gcmVnZXguZXhlYyhvdXRwdXQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGlzTWF0Y2g6IEJvb2xlYW4obWF0Y2gpLCBtYXRjaCwgb3V0cHV0IH07XG59O1xuXG4vKipcbiAqIE1hdGNoIHRoZSBiYXNlbmFtZSBvZiBhIGZpbGVwYXRoLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBwaWNvbWF0Y2ggPSByZXF1aXJlKCdwaWNvbWF0Y2gnKTtcbiAqIC8vIHBpY29tYXRjaC5tYXRjaEJhc2UoaW5wdXQsIGdsb2JbLCBvcHRpb25zXSk7XG4gKiBjb25zb2xlLmxvZyhwaWNvbWF0Y2gubWF0Y2hCYXNlKCdmb28vYmFyLmpzJywgJyouanMnKTsgLy8gdHJ1ZVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYGlucHV0YCBTdHJpbmcgdG8gdGVzdC5cbiAqIEBwYXJhbSB7UmVnRXhwfFN0cmluZ30gYGdsb2JgIEdsb2IgcGF0dGVybiBvciByZWdleCBjcmVhdGVkIGJ5IFsubWFrZVJlXSgjbWFrZVJlKS5cbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnBpY29tYXRjaC5tYXRjaEJhc2UgPSAoaW5wdXQsIGdsb2IsIG9wdGlvbnMsIHBvc2l4ID0gdXRpbHMuaXNXaW5kb3dzKG9wdGlvbnMpKSA9PiB7XG4gIGNvbnN0IHJlZ2V4ID0gZ2xvYiBpbnN0YW5jZW9mIFJlZ0V4cCA/IGdsb2IgOiBwaWNvbWF0Y2gubWFrZVJlKGdsb2IsIG9wdGlvbnMpO1xuICByZXR1cm4gcmVnZXgudGVzdChwYXRoLmJhc2VuYW1lKGlucHV0KSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiAqKmFueSoqIG9mIHRoZSBnaXZlbiBnbG9iIGBwYXR0ZXJuc2AgbWF0Y2ggdGhlIHNwZWNpZmllZCBgc3RyaW5nYC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcGljb21hdGNoID0gcmVxdWlyZSgncGljb21hdGNoJyk7XG4gKiAvLyBwaWNvbWF0Y2guaXNNYXRjaChzdHJpbmcsIHBhdHRlcm5zWywgb3B0aW9uc10pO1xuICpcbiAqIGNvbnNvbGUubG9nKHBpY29tYXRjaC5pc01hdGNoKCdhLmEnLCBbJ2IuKicsICcqLmEnXSkpOyAvLz0+IHRydWVcbiAqIGNvbnNvbGUubG9nKHBpY29tYXRjaC5pc01hdGNoKCdhLmEnLCAnYi4qJykpOyAvLz0+IGZhbHNlXG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBzdHIgVGhlIHN0cmluZyB0byB0ZXN0LlxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IHBhdHRlcm5zIE9uZSBvciBtb3JlIGdsb2IgcGF0dGVybnMgdG8gdXNlIGZvciBtYXRjaGluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gU2VlIGF2YWlsYWJsZSBbb3B0aW9uc10oI29wdGlvbnMpLlxuICogQHJldHVybiB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGFueSBwYXR0ZXJucyBtYXRjaCBgc3RyYFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5waWNvbWF0Y2guaXNNYXRjaCA9IChzdHIsIHBhdHRlcm5zLCBvcHRpb25zKSA9PiBwaWNvbWF0Y2gocGF0dGVybnMsIG9wdGlvbnMpKHN0cik7XG5cbi8qKlxuICogUGFyc2UgYSBnbG9iIHBhdHRlcm4gdG8gY3JlYXRlIHRoZSBzb3VyY2Ugc3RyaW5nIGZvciBhIHJlZ3VsYXJcbiAqIGV4cHJlc3Npb24uXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHBpY29tYXRjaCA9IHJlcXVpcmUoJ3BpY29tYXRjaCcpO1xuICogY29uc3QgcmVzdWx0ID0gcGljb21hdGNoLnBhcnNlKHBhdHRlcm5bLCBvcHRpb25zXSk7XG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfSBgcGF0dGVybmBcbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB1c2VmdWwgcHJvcGVydGllcyBhbmQgb3V0cHV0IHRvIGJlIHVzZWQgYXMgYSByZWdleCBzb3VyY2Ugc3RyaW5nLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5waWNvbWF0Y2gucGFyc2UgPSAocGF0dGVybiwgb3B0aW9ucykgPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShwYXR0ZXJuKSkgcmV0dXJuIHBhdHRlcm4ubWFwKHAgPT4gcGljb21hdGNoLnBhcnNlKHAsIG9wdGlvbnMpKTtcbiAgcmV0dXJuIHBhcnNlKHBhdHRlcm4sIHsgLi4ub3B0aW9ucywgZmFzdHBhdGhzOiBmYWxzZSB9KTtcbn07XG5cbi8qKlxuICogU2NhbiBhIGdsb2IgcGF0dGVybiB0byBzZXBhcmF0ZSB0aGUgcGF0dGVybiBpbnRvIHNlZ21lbnRzLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBwaWNvbWF0Y2ggPSByZXF1aXJlKCdwaWNvbWF0Y2gnKTtcbiAqIC8vIHBpY29tYXRjaC5zY2FuKGlucHV0Wywgb3B0aW9uc10pO1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IHBpY29tYXRjaC5zY2FuKCchLi9mb28vKi5qcycpO1xuICogY29uc29sZS5sb2cocmVzdWx0KTtcbiAqIHsgcHJlZml4OiAnIS4vJyxcbiAqICAgaW5wdXQ6ICchLi9mb28vKi5qcycsXG4gKiAgIHN0YXJ0OiAzLFxuICogICBiYXNlOiAnZm9vJyxcbiAqICAgZ2xvYjogJyouanMnLFxuICogICBpc0JyYWNlOiBmYWxzZSxcbiAqICAgaXNCcmFja2V0OiBmYWxzZSxcbiAqICAgaXNHbG9iOiB0cnVlLFxuICogICBpc0V4dGdsb2I6IGZhbHNlLFxuICogICBpc0dsb2JzdGFyOiBmYWxzZSxcbiAqICAgbmVnYXRlZDogdHJ1ZSB9XG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfSBgaW5wdXRgIEdsb2IgcGF0dGVybiB0byBzY2FuLlxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYFxuICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnBpY29tYXRjaC5zY2FuID0gKGlucHV0LCBvcHRpb25zKSA9PiBzY2FuKGlucHV0LCBvcHRpb25zKTtcblxuLyoqXG4gKiBDb21waWxlIGEgcmVndWxhciBleHByZXNzaW9uIGZyb20gdGhlIGBzdGF0ZWAgb2JqZWN0IHJldHVybmVkIGJ5IHRoZVxuICogW3BhcnNlKCldKCNwYXJzZSkgbWV0aG9kLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBgc3RhdGVgXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGByZXR1cm5PdXRwdXRgIEludGVuZGVkIGZvciBpbXBsZW1lbnRvcnMsIHRoaXMgYXJndW1lbnQgYWxsb3dzIHlvdSB0byByZXR1cm4gdGhlIHJhdyBvdXRwdXQgZnJvbSB0aGUgcGFyc2VyLlxuICogQHBhcmFtIHtCb29sZWFufSBgcmV0dXJuU3RhdGVgIEFkZHMgdGhlIHN0YXRlIHRvIGEgYHN0YXRlYCBwcm9wZXJ0eSBvbiB0aGUgcmV0dXJuZWQgcmVnZXguIFVzZWZ1bCBmb3IgaW1wbGVtZW50b3JzIGFuZCBkZWJ1Z2dpbmcuXG4gKiBAcmV0dXJuIHtSZWdFeHB9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnBpY29tYXRjaC5jb21waWxlUmUgPSAoc3RhdGUsIG9wdGlvbnMsIHJldHVybk91dHB1dCA9IGZhbHNlLCByZXR1cm5TdGF0ZSA9IGZhbHNlKSA9PiB7XG4gIGlmIChyZXR1cm5PdXRwdXQgPT09IHRydWUpIHtcbiAgICByZXR1cm4gc3RhdGUub3V0cHV0O1xuICB9XG5cbiAgY29uc3Qgb3B0cyA9IG9wdGlvbnMgfHwge307XG4gIGNvbnN0IHByZXBlbmQgPSBvcHRzLmNvbnRhaW5zID8gJycgOiAnXic7XG4gIGNvbnN0IGFwcGVuZCA9IG9wdHMuY29udGFpbnMgPyAnJyA6ICckJztcblxuICBsZXQgc291cmNlID0gYCR7cHJlcGVuZH0oPzoke3N0YXRlLm91dHB1dH0pJHthcHBlbmR9YDtcbiAgaWYgKHN0YXRlICYmIHN0YXRlLm5lZ2F0ZWQgPT09IHRydWUpIHtcbiAgICBzb3VyY2UgPSBgXig/ISR7c291cmNlfSkuKiRgO1xuICB9XG5cbiAgY29uc3QgcmVnZXggPSBwaWNvbWF0Y2gudG9SZWdleChzb3VyY2UsIG9wdGlvbnMpO1xuICBpZiAocmV0dXJuU3RhdGUgPT09IHRydWUpIHtcbiAgICByZWdleC5zdGF0ZSA9IHN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIHJlZ2V4O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSByZWd1bGFyIGV4cHJlc3Npb24gZnJvbSBhIHBhcnNlZCBnbG9iIHBhdHRlcm4uXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHBpY29tYXRjaCA9IHJlcXVpcmUoJ3BpY29tYXRjaCcpO1xuICogY29uc3Qgc3RhdGUgPSBwaWNvbWF0Y2gucGFyc2UoJyouanMnKTtcbiAqIC8vIHBpY29tYXRjaC5jb21waWxlUmUoc3RhdGVbLCBvcHRpb25zXSk7XG4gKlxuICogY29uc29sZS5sb2cocGljb21hdGNoLmNvbXBpbGVSZShzdGF0ZSkpO1xuICogLy89PiAvXig/Oig/IVxcLikoPz0uKVteL10qP1xcLmpzKSQvXG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfSBgc3RhdGVgIFRoZSBvYmplY3QgcmV0dXJuZWQgZnJvbSB0aGUgYC5wYXJzZWAgbWV0aG9kLlxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYFxuICogQHBhcmFtIHtCb29sZWFufSBgcmV0dXJuT3V0cHV0YCBJbXBsZW1lbnRvcnMgbWF5IHVzZSB0aGlzIGFyZ3VtZW50IHRvIHJldHVybiB0aGUgY29tcGlsZWQgb3V0cHV0LCBpbnN0ZWFkIG9mIGEgcmVndWxhciBleHByZXNzaW9uLiBUaGlzIGlzIG5vdCBleHBvc2VkIG9uIHRoZSBvcHRpb25zIHRvIHByZXZlbnQgZW5kLXVzZXJzIGZyb20gbXV0YXRpbmcgdGhlIHJlc3VsdC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gYHJldHVyblN0YXRlYCBJbXBsZW1lbnRvcnMgbWF5IHVzZSB0aGlzIGFyZ3VtZW50IHRvIHJldHVybiB0aGUgc3RhdGUgZnJvbSB0aGUgcGFyc2VkIGdsb2Igd2l0aCB0aGUgcmV0dXJuZWQgcmVndWxhciBleHByZXNzaW9uLlxuICogQHJldHVybiB7UmVnRXhwfSBSZXR1cm5zIGEgcmVnZXggY3JlYXRlZCBmcm9tIHRoZSBnaXZlbiBwYXR0ZXJuLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5waWNvbWF0Y2gubWFrZVJlID0gKGlucHV0LCBvcHRpb25zID0ge30sIHJldHVybk91dHB1dCA9IGZhbHNlLCByZXR1cm5TdGF0ZSA9IGZhbHNlKSA9PiB7XG4gIGlmICghaW5wdXQgfHwgdHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICB9XG5cbiAgbGV0IHBhcnNlZCA9IHsgbmVnYXRlZDogZmFsc2UsIGZhc3RwYXRoczogdHJ1ZSB9O1xuXG4gIGlmIChvcHRpb25zLmZhc3RwYXRocyAhPT0gZmFsc2UgJiYgKGlucHV0WzBdID09PSAnLicgfHwgaW5wdXRbMF0gPT09ICcqJykpIHtcbiAgICBwYXJzZWQub3V0cHV0ID0gcGFyc2UuZmFzdHBhdGhzKGlucHV0LCBvcHRpb25zKTtcbiAgfVxuXG4gIGlmICghcGFyc2VkLm91dHB1dCkge1xuICAgIHBhcnNlZCA9IHBhcnNlKGlucHV0LCBvcHRpb25zKTtcbiAgfVxuXG4gIHJldHVybiBwaWNvbWF0Y2guY29tcGlsZVJlKHBhcnNlZCwgb3B0aW9ucywgcmV0dXJuT3V0cHV0LCByZXR1cm5TdGF0ZSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBmcm9tIHRoZSBnaXZlbiByZWdleCBzb3VyY2Ugc3RyaW5nLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBwaWNvbWF0Y2ggPSByZXF1aXJlKCdwaWNvbWF0Y2gnKTtcbiAqIC8vIHBpY29tYXRjaC50b1JlZ2V4KHNvdXJjZVssIG9wdGlvbnNdKTtcbiAqXG4gKiBjb25zdCB7IG91dHB1dCB9ID0gcGljb21hdGNoLnBhcnNlKCcqLmpzJyk7XG4gKiBjb25zb2xlLmxvZyhwaWNvbWF0Y2gudG9SZWdleChvdXRwdXQpKTtcbiAqIC8vPT4gL14oPzooPyFcXC4pKD89LilbXi9dKj9cXC5qcykkL1xuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYHNvdXJjZWAgUmVndWxhciBleHByZXNzaW9uIHNvdXJjZSBzdHJpbmcuXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgXG4gKiBAcmV0dXJuIHtSZWdFeHB9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnBpY29tYXRjaC50b1JlZ2V4ID0gKHNvdXJjZSwgb3B0aW9ucykgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IG9wdHMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHJldHVybiBuZXcgUmVnRXhwKHNvdXJjZSwgb3B0cy5mbGFncyB8fCAob3B0cy5ub2Nhc2UgPyAnaScgOiAnJykpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmRlYnVnID09PSB0cnVlKSB0aHJvdyBlcnI7XG4gICAgcmV0dXJuIC8kXi87XG4gIH1cbn07XG5cbi8qKlxuICogUGljb21hdGNoIGNvbnN0YW50cy5cbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuXG5waWNvbWF0Y2guY29uc3RhbnRzID0gY29uc3RhbnRzO1xuXG4vKipcbiAqIEV4cG9zZSBcInBpY29tYXRjaFwiXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBwaWNvbWF0Y2g7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL3BpY29tYXRjaCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbmNvbnN0IGJyYWNlcyA9IHJlcXVpcmUoJ2JyYWNlcycpO1xuY29uc3QgcGljb21hdGNoID0gcmVxdWlyZSgncGljb21hdGNoJyk7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ3BpY29tYXRjaC9saWIvdXRpbHMnKTtcbmNvbnN0IGlzRW1wdHlTdHJpbmcgPSB2YWwgPT4gdmFsID09PSAnJyB8fCB2YWwgPT09ICcuLyc7XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBzdHJpbmdzIHRoYXQgbWF0Y2ggb25lIG9yIG1vcmUgZ2xvYiBwYXR0ZXJucy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgbW0gPSByZXF1aXJlKCdtaWNyb21hdGNoJyk7XG4gKiAvLyBtbShsaXN0LCBwYXR0ZXJuc1ssIG9wdGlvbnNdKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhtbShbJ2EuanMnLCAnYS50eHQnXSwgWycqLmpzJ10pKTtcbiAqIC8vPT4gWyAnYS5qcycgXVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheTxzdHJpbmc+fSBgbGlzdGAgTGlzdCBvZiBzdHJpbmdzIHRvIG1hdGNoLlxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXk8c3RyaW5nPn0gYHBhdHRlcm5zYCBPbmUgb3IgbW9yZSBnbG9iIHBhdHRlcm5zIHRvIHVzZSBmb3IgbWF0Y2hpbmcuXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgIFNlZSBhdmFpbGFibGUgW29wdGlvbnNdKCNvcHRpb25zKVxuICogQHJldHVybiB7QXJyYXl9IFJldHVybnMgYW4gYXJyYXkgb2YgbWF0Y2hlc1xuICogQHN1bW1hcnkgZmFsc2VcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuY29uc3QgbWljcm9tYXRjaCA9IChsaXN0LCBwYXR0ZXJucywgb3B0aW9ucykgPT4ge1xuICBwYXR0ZXJucyA9IFtdLmNvbmNhdChwYXR0ZXJucyk7XG4gIGxpc3QgPSBbXS5jb25jYXQobGlzdCk7XG5cbiAgbGV0IG9taXQgPSBuZXcgU2V0KCk7XG4gIGxldCBrZWVwID0gbmV3IFNldCgpO1xuICBsZXQgaXRlbXMgPSBuZXcgU2V0KCk7XG4gIGxldCBuZWdhdGl2ZXMgPSAwO1xuXG4gIGxldCBvblJlc3VsdCA9IHN0YXRlID0+IHtcbiAgICBpdGVtcy5hZGQoc3RhdGUub3V0cHV0KTtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm9uUmVzdWx0KSB7XG4gICAgICBvcHRpb25zLm9uUmVzdWx0KHN0YXRlKTtcbiAgICB9XG4gIH07XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXR0ZXJucy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBpc01hdGNoID0gcGljb21hdGNoKFN0cmluZyhwYXR0ZXJuc1tpXSksIHsgLi4ub3B0aW9ucywgb25SZXN1bHQgfSwgdHJ1ZSk7XG4gICAgbGV0IG5lZ2F0ZWQgPSBpc01hdGNoLnN0YXRlLm5lZ2F0ZWQgfHwgaXNNYXRjaC5zdGF0ZS5uZWdhdGVkRXh0Z2xvYjtcbiAgICBpZiAobmVnYXRlZCkgbmVnYXRpdmVzKys7XG5cbiAgICBmb3IgKGxldCBpdGVtIG9mIGxpc3QpIHtcbiAgICAgIGxldCBtYXRjaGVkID0gaXNNYXRjaChpdGVtLCB0cnVlKTtcblxuICAgICAgbGV0IG1hdGNoID0gbmVnYXRlZCA/ICFtYXRjaGVkLmlzTWF0Y2ggOiBtYXRjaGVkLmlzTWF0Y2g7XG4gICAgICBpZiAoIW1hdGNoKSBjb250aW51ZTtcblxuICAgICAgaWYgKG5lZ2F0ZWQpIHtcbiAgICAgICAgb21pdC5hZGQobWF0Y2hlZC5vdXRwdXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb21pdC5kZWxldGUobWF0Y2hlZC5vdXRwdXQpO1xuICAgICAgICBrZWVwLmFkZChtYXRjaGVkLm91dHB1dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHJlc3VsdCA9IG5lZ2F0aXZlcyA9PT0gcGF0dGVybnMubGVuZ3RoID8gWy4uLml0ZW1zXSA6IFsuLi5rZWVwXTtcbiAgbGV0IG1hdGNoZXMgPSByZXN1bHQuZmlsdGVyKGl0ZW0gPT4gIW9taXQuaGFzKGl0ZW0pKTtcblxuICBpZiAob3B0aW9ucyAmJiBtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChvcHRpb25zLmZhaWxnbG9iID09PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIG1hdGNoZXMgZm91bmQgZm9yIFwiJHtwYXR0ZXJucy5qb2luKCcsICcpfVwiYCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMubm9udWxsID09PSB0cnVlIHx8IG9wdGlvbnMubnVsbGdsb2IgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnVuZXNjYXBlID8gcGF0dGVybnMubWFwKHAgPT4gcC5yZXBsYWNlKC9cXFxcL2csICcnKSkgOiBwYXR0ZXJucztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWF0Y2hlcztcbn07XG5cbi8qKlxuICogQmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAqL1xuXG5taWNyb21hdGNoLm1hdGNoID0gbWljcm9tYXRjaDtcblxuLyoqXG4gKiBSZXR1cm5zIGEgbWF0Y2hlciBmdW5jdGlvbiBmcm9tIHRoZSBnaXZlbiBnbG9iIGBwYXR0ZXJuYCBhbmQgYG9wdGlvbnNgLlxuICogVGhlIHJldHVybmVkIGZ1bmN0aW9uIHRha2VzIGEgc3RyaW5nIHRvIG1hdGNoIGFzIGl0cyBvbmx5IGFyZ3VtZW50IGFuZCByZXR1cm5zXG4gKiB0cnVlIGlmIHRoZSBzdHJpbmcgaXMgYSBtYXRjaC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgbW0gPSByZXF1aXJlKCdtaWNyb21hdGNoJyk7XG4gKiAvLyBtbS5tYXRjaGVyKHBhdHRlcm5bLCBvcHRpb25zXSk7XG4gKlxuICogY29uc3QgaXNNYXRjaCA9IG1tLm1hdGNoZXIoJyouISgqYSknKTtcbiAqIGNvbnNvbGUubG9nKGlzTWF0Y2goJ2EuYScpKTsgLy89PiBmYWxzZVxuICogY29uc29sZS5sb2coaXNNYXRjaCgnYS5iJykpOyAvLz0+IHRydWVcbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBwYXR0ZXJuYCBHbG9iIHBhdHRlcm5cbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBSZXR1cm5zIGEgbWF0Y2hlciBmdW5jdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxubWljcm9tYXRjaC5tYXRjaGVyID0gKHBhdHRlcm4sIG9wdGlvbnMpID0+IHBpY29tYXRjaChwYXR0ZXJuLCBvcHRpb25zKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgKiphbnkqKiBvZiB0aGUgZ2l2ZW4gZ2xvYiBgcGF0dGVybnNgIG1hdGNoIHRoZSBzcGVjaWZpZWQgYHN0cmluZ2AuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IG1tID0gcmVxdWlyZSgnbWljcm9tYXRjaCcpO1xuICogLy8gbW0uaXNNYXRjaChzdHJpbmcsIHBhdHRlcm5zWywgb3B0aW9uc10pO1xuICpcbiAqIGNvbnNvbGUubG9nKG1tLmlzTWF0Y2goJ2EuYScsIFsnYi4qJywgJyouYSddKSk7IC8vPT4gdHJ1ZVxuICogY29uc29sZS5sb2cobW0uaXNNYXRjaCgnYS5hJywgJ2IuKicpKTsgLy89PiBmYWxzZVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYHN0cmAgVGhlIHN0cmluZyB0byB0ZXN0LlxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IGBwYXR0ZXJuc2AgT25lIG9yIG1vcmUgZ2xvYiBwYXR0ZXJucyB0byB1c2UgZm9yIG1hdGNoaW5nLlxuICogQHBhcmFtIHtPYmplY3R9IGBbb3B0aW9uc11gIFNlZSBhdmFpbGFibGUgW29wdGlvbnNdKCNvcHRpb25zKS5cbiAqIEByZXR1cm4ge0Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBhbnkgcGF0dGVybnMgbWF0Y2ggYHN0cmBcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubWljcm9tYXRjaC5pc01hdGNoID0gKHN0ciwgcGF0dGVybnMsIG9wdGlvbnMpID0+IHBpY29tYXRjaChwYXR0ZXJucywgb3B0aW9ucykoc3RyKTtcblxuLyoqXG4gKiBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICovXG5cbm1pY3JvbWF0Y2guYW55ID0gbWljcm9tYXRjaC5pc01hdGNoO1xuXG4vKipcbiAqIFJldHVybnMgYSBsaXN0IG9mIHN0cmluZ3MgdGhhdCBfKipkbyBub3QgbWF0Y2ggYW55KipfIG9mIHRoZSBnaXZlbiBgcGF0dGVybnNgLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBtbSA9IHJlcXVpcmUoJ21pY3JvbWF0Y2gnKTtcbiAqIC8vIG1tLm5vdChsaXN0LCBwYXR0ZXJuc1ssIG9wdGlvbnNdKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhtbS5ub3QoWydhLmEnLCAnYi5iJywgJ2MuYyddLCAnKi5hJykpO1xuICogLy89PiBbJ2IuYicsICdjLmMnXVxuICogYGBgXG4gKiBAcGFyYW0ge0FycmF5fSBgbGlzdGAgQXJyYXkgb2Ygc3RyaW5ncyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBgcGF0dGVybnNgIE9uZSBvciBtb3JlIGdsb2IgcGF0dGVybiB0byB1c2UgZm9yIG1hdGNoaW5nLlxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYCBTZWUgYXZhaWxhYmxlIFtvcHRpb25zXSgjb3B0aW9ucykgZm9yIGNoYW5naW5nIGhvdyBtYXRjaGVzIGFyZSBwZXJmb3JtZWRcbiAqIEByZXR1cm4ge0FycmF5fSBSZXR1cm5zIGFuIGFycmF5IG9mIHN0cmluZ3MgdGhhdCAqKmRvIG5vdCBtYXRjaCoqIHRoZSBnaXZlbiBwYXR0ZXJucy5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxubWljcm9tYXRjaC5ub3QgPSAobGlzdCwgcGF0dGVybnMsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBwYXR0ZXJucyA9IFtdLmNvbmNhdChwYXR0ZXJucykubWFwKFN0cmluZyk7XG4gIGxldCByZXN1bHQgPSBuZXcgU2V0KCk7XG4gIGxldCBpdGVtcyA9IFtdO1xuXG4gIGxldCBvblJlc3VsdCA9IHN0YXRlID0+IHtcbiAgICBpZiAob3B0aW9ucy5vblJlc3VsdCkgb3B0aW9ucy5vblJlc3VsdChzdGF0ZSk7XG4gICAgaXRlbXMucHVzaChzdGF0ZS5vdXRwdXQpO1xuICB9O1xuXG4gIGxldCBtYXRjaGVzID0gbmV3IFNldChtaWNyb21hdGNoKGxpc3QsIHBhdHRlcm5zLCB7IC4uLm9wdGlvbnMsIG9uUmVzdWx0IH0pKTtcblxuICBmb3IgKGxldCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgaWYgKCFtYXRjaGVzLmhhcyhpdGVtKSkge1xuICAgICAgcmVzdWx0LmFkZChpdGVtKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFsuLi5yZXN1bHRdO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGBzdHJpbmdgIGNvbnRhaW5zIHRoZSBnaXZlbiBwYXR0ZXJuLiBTaW1pbGFyXG4gKiB0byBbLmlzTWF0Y2hdKCNpc01hdGNoKSBidXQgdGhlIHBhdHRlcm4gY2FuIG1hdGNoIGFueSBwYXJ0IG9mIHRoZSBzdHJpbmcuXG4gKlxuICogYGBganNcbiAqIHZhciBtbSA9IHJlcXVpcmUoJ21pY3JvbWF0Y2gnKTtcbiAqIC8vIG1tLmNvbnRhaW5zKHN0cmluZywgcGF0dGVyblssIG9wdGlvbnNdKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhtbS5jb250YWlucygnYWEvYmIvY2MnLCAnKmInKSk7XG4gKiAvLz0+IHRydWVcbiAqIGNvbnNvbGUubG9nKG1tLmNvbnRhaW5zKCdhYS9iYi9jYycsICcqZCcpKTtcbiAqIC8vPT4gZmFsc2VcbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBzdHJgIFRoZSBzdHJpbmcgdG8gbWF0Y2guXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gYHBhdHRlcm5zYCBHbG9iIHBhdHRlcm4gdG8gdXNlIGZvciBtYXRjaGluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2AgU2VlIGF2YWlsYWJsZSBbb3B0aW9uc10oI29wdGlvbnMpIGZvciBjaGFuZ2luZyBob3cgbWF0Y2hlcyBhcmUgcGVyZm9ybWVkXG4gKiBAcmV0dXJuIHtCb29sZWFufSBSZXR1cm5zIHRydWUgaWYgYW55IG9mIHRoZSBwYXR0ZXJucyBtYXRjaGVzIGFueSBwYXJ0IG9mIGBzdHJgLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5taWNyb21hdGNoLmNvbnRhaW5zID0gKHN0ciwgcGF0dGVybiwgb3B0aW9ucykgPT4ge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBhIHN0cmluZzogXCIke3V0aWwuaW5zcGVjdChzdHIpfVwiYCk7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShwYXR0ZXJuKSkge1xuICAgIHJldHVybiBwYXR0ZXJuLnNvbWUocCA9PiBtaWNyb21hdGNoLmNvbnRhaW5zKHN0ciwgcCwgb3B0aW9ucykpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJykge1xuICAgIGlmIChpc0VtcHR5U3RyaW5nKHN0cikgfHwgaXNFbXB0eVN0cmluZyhwYXR0ZXJuKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzdHIuaW5jbHVkZXMocGF0dGVybikgfHwgKHN0ci5zdGFydHNXaXRoKCcuLycpICYmIHN0ci5zbGljZSgyKS5pbmNsdWRlcyhwYXR0ZXJuKSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtaWNyb21hdGNoLmlzTWF0Y2goc3RyLCBwYXR0ZXJuLCB7IC4uLm9wdGlvbnMsIGNvbnRhaW5zOiB0cnVlIH0pO1xufTtcblxuLyoqXG4gKiBGaWx0ZXIgdGhlIGtleXMgb2YgdGhlIGdpdmVuIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBgZ2xvYmAgcGF0dGVyblxuICogYW5kIGBvcHRpb25zYC4gRG9lcyBub3QgYXR0ZW1wdCB0byBtYXRjaCBuZXN0ZWQga2V5cy4gSWYgeW91IG5lZWQgdGhpcyBmZWF0dXJlLFxuICogdXNlIFtnbG9iLW9iamVjdF1bXSBpbnN0ZWFkLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBtbSA9IHJlcXVpcmUoJ21pY3JvbWF0Y2gnKTtcbiAqIC8vIG1tLm1hdGNoS2V5cyhvYmplY3QsIHBhdHRlcm5zWywgb3B0aW9uc10pO1xuICpcbiAqIGNvbnN0IG9iaiA9IHsgYWE6ICdhJywgYWI6ICdiJywgYWM6ICdjJyB9O1xuICogY29uc29sZS5sb2cobW0ubWF0Y2hLZXlzKG9iaiwgJypiJykpO1xuICogLy89PiB7IGFiOiAnYicgfVxuICogYGBgXG4gKiBAcGFyYW0ge09iamVjdH0gYG9iamVjdGAgVGhlIG9iamVjdCB3aXRoIGtleXMgdG8gZmlsdGVyLlxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IGBwYXR0ZXJuc2AgT25lIG9yIG1vcmUgZ2xvYiBwYXR0ZXJucyB0byB1c2UgZm9yIG1hdGNoaW5nLlxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYCBTZWUgYXZhaWxhYmxlIFtvcHRpb25zXSgjb3B0aW9ucykgZm9yIGNoYW5naW5nIGhvdyBtYXRjaGVzIGFyZSBwZXJmb3JtZWRcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBvbmx5IGtleXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gcGF0dGVybnMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1pY3JvbWF0Y2gubWF0Y2hLZXlzID0gKG9iaiwgcGF0dGVybnMsIG9wdGlvbnMpID0+IHtcbiAgaWYgKCF1dGlscy5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCcpO1xuICB9XG4gIGxldCBrZXlzID0gbWljcm9tYXRjaChPYmplY3Qua2V5cyhvYmopLCBwYXR0ZXJucywgb3B0aW9ucyk7XG4gIGxldCByZXMgPSB7fTtcbiAgZm9yIChsZXQga2V5IG9mIGtleXMpIHJlc1trZXldID0gb2JqW2tleV07XG4gIHJldHVybiByZXM7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBzb21lIG9mIHRoZSBzdHJpbmdzIGluIHRoZSBnaXZlbiBgbGlzdGAgbWF0Y2ggYW55IG9mIHRoZSBnaXZlbiBnbG9iIGBwYXR0ZXJuc2AuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IG1tID0gcmVxdWlyZSgnbWljcm9tYXRjaCcpO1xuICogLy8gbW0uc29tZShsaXN0LCBwYXR0ZXJuc1ssIG9wdGlvbnNdKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhtbS5zb21lKFsnZm9vLmpzJywgJ2Jhci5qcyddLCBbJyouanMnLCAnIWZvby5qcyddKSk7XG4gKiAvLyB0cnVlXG4gKiBjb25zb2xlLmxvZyhtbS5zb21lKFsnZm9vLmpzJ10sIFsnKi5qcycsICchZm9vLmpzJ10pKTtcbiAqIC8vIGZhbHNlXG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBgbGlzdGAgVGhlIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzIHRvIHRlc3QuIFJldHVybnMgYXMgc29vbiBhcyB0aGUgZmlyc3QgbWF0Y2ggaXMgZm91bmQuXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gYHBhdHRlcm5zYCBPbmUgb3IgbW9yZSBnbG9iIHBhdHRlcm5zIHRvIHVzZSBmb3IgbWF0Y2hpbmcuXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgIFNlZSBhdmFpbGFibGUgW29wdGlvbnNdKCNvcHRpb25zKSBmb3IgY2hhbmdpbmcgaG93IG1hdGNoZXMgYXJlIHBlcmZvcm1lZFxuICogQHJldHVybiB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGFueSBgcGF0dGVybnNgIG1hdGNoZXMgYW55IG9mIHRoZSBzdHJpbmdzIGluIGBsaXN0YFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5taWNyb21hdGNoLnNvbWUgPSAobGlzdCwgcGF0dGVybnMsIG9wdGlvbnMpID0+IHtcbiAgbGV0IGl0ZW1zID0gW10uY29uY2F0KGxpc3QpO1xuXG4gIGZvciAobGV0IHBhdHRlcm4gb2YgW10uY29uY2F0KHBhdHRlcm5zKSkge1xuICAgIGxldCBpc01hdGNoID0gcGljb21hdGNoKFN0cmluZyhwYXR0ZXJuKSwgb3B0aW9ucyk7XG4gICAgaWYgKGl0ZW1zLnNvbWUoaXRlbSA9PiBpc01hdGNoKGl0ZW0pKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGV2ZXJ5IHN0cmluZyBpbiB0aGUgZ2l2ZW4gYGxpc3RgIG1hdGNoZXNcbiAqIGFueSBvZiB0aGUgZ2l2ZW4gZ2xvYiBgcGF0dGVybnNgLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBtbSA9IHJlcXVpcmUoJ21pY3JvbWF0Y2gnKTtcbiAqIC8vIG1tLmV2ZXJ5KGxpc3QsIHBhdHRlcm5zWywgb3B0aW9uc10pO1xuICpcbiAqIGNvbnNvbGUubG9nKG1tLmV2ZXJ5KCdmb28uanMnLCBbJ2Zvby5qcyddKSk7XG4gKiAvLyB0cnVlXG4gKiBjb25zb2xlLmxvZyhtbS5ldmVyeShbJ2Zvby5qcycsICdiYXIuanMnXSwgWycqLmpzJ10pKTtcbiAqIC8vIHRydWVcbiAqIGNvbnNvbGUubG9nKG1tLmV2ZXJ5KFsnZm9vLmpzJywgJ2Jhci5qcyddLCBbJyouanMnLCAnIWZvby5qcyddKSk7XG4gKiAvLyBmYWxzZVxuICogY29uc29sZS5sb2cobW0uZXZlcnkoWydmb28uanMnXSwgWycqLmpzJywgJyFmb28uanMnXSkpO1xuICogLy8gZmFsc2VcbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IGBsaXN0YCBUaGUgc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MgdG8gdGVzdC5cbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBgcGF0dGVybnNgIE9uZSBvciBtb3JlIGdsb2IgcGF0dGVybnMgdG8gdXNlIGZvciBtYXRjaGluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2AgU2VlIGF2YWlsYWJsZSBbb3B0aW9uc10oI29wdGlvbnMpIGZvciBjaGFuZ2luZyBob3cgbWF0Y2hlcyBhcmUgcGVyZm9ybWVkXG4gKiBAcmV0dXJuIHtCb29sZWFufSBSZXR1cm5zIHRydWUgaWYgYWxsIGBwYXR0ZXJuc2AgbWF0Y2hlcyBhbGwgb2YgdGhlIHN0cmluZ3MgaW4gYGxpc3RgXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1pY3JvbWF0Y2guZXZlcnkgPSAobGlzdCwgcGF0dGVybnMsIG9wdGlvbnMpID0+IHtcbiAgbGV0IGl0ZW1zID0gW10uY29uY2F0KGxpc3QpO1xuXG4gIGZvciAobGV0IHBhdHRlcm4gb2YgW10uY29uY2F0KHBhdHRlcm5zKSkge1xuICAgIGxldCBpc01hdGNoID0gcGljb21hdGNoKFN0cmluZyhwYXR0ZXJuKSwgb3B0aW9ucyk7XG4gICAgaWYgKCFpdGVtcy5ldmVyeShpdGVtID0+IGlzTWF0Y2goaXRlbSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgKiphbGwqKiBvZiB0aGUgZ2l2ZW4gYHBhdHRlcm5zYCBtYXRjaFxuICogdGhlIHNwZWNpZmllZCBzdHJpbmcuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IG1tID0gcmVxdWlyZSgnbWljcm9tYXRjaCcpO1xuICogLy8gbW0uYWxsKHN0cmluZywgcGF0dGVybnNbLCBvcHRpb25zXSk7XG4gKlxuICogY29uc29sZS5sb2cobW0uYWxsKCdmb28uanMnLCBbJ2Zvby5qcyddKSk7XG4gKiAvLyB0cnVlXG4gKlxuICogY29uc29sZS5sb2cobW0uYWxsKCdmb28uanMnLCBbJyouanMnLCAnIWZvby5qcyddKSk7XG4gKiAvLyBmYWxzZVxuICpcbiAqIGNvbnNvbGUubG9nKG1tLmFsbCgnZm9vLmpzJywgWycqLmpzJywgJ2Zvby5qcyddKSk7XG4gKiAvLyB0cnVlXG4gKlxuICogY29uc29sZS5sb2cobW0uYWxsKCdmb28uanMnLCBbJyouanMnLCAnZionLCAnKm8qJywgJypvLmpzJ10pKTtcbiAqIC8vIHRydWVcbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IGBzdHJgIFRoZSBzdHJpbmcgdG8gdGVzdC5cbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBgcGF0dGVybnNgIE9uZSBvciBtb3JlIGdsb2IgcGF0dGVybnMgdG8gdXNlIGZvciBtYXRjaGluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2AgU2VlIGF2YWlsYWJsZSBbb3B0aW9uc10oI29wdGlvbnMpIGZvciBjaGFuZ2luZyBob3cgbWF0Y2hlcyBhcmUgcGVyZm9ybWVkXG4gKiBAcmV0dXJuIHtCb29sZWFufSBSZXR1cm5zIHRydWUgaWYgYW55IHBhdHRlcm5zIG1hdGNoIGBzdHJgXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1pY3JvbWF0Y2guYWxsID0gKHN0ciwgcGF0dGVybnMsIG9wdGlvbnMpID0+IHtcbiAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgYSBzdHJpbmc6IFwiJHt1dGlsLmluc3BlY3Qoc3RyKX1cImApO1xuICB9XG5cbiAgcmV0dXJuIFtdLmNvbmNhdChwYXR0ZXJucykuZXZlcnkocCA9PiBwaWNvbWF0Y2gocCwgb3B0aW9ucykoc3RyKSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgbWF0Y2hlcyBjYXB0dXJlZCBieSBgcGF0dGVybmAgaW4gYHN0cmluZywgb3IgYG51bGxgIGlmIHRoZSBwYXR0ZXJuIGRpZCBub3QgbWF0Y2guXG4gKlxuICogYGBganNcbiAqIGNvbnN0IG1tID0gcmVxdWlyZSgnbWljcm9tYXRjaCcpO1xuICogLy8gbW0uY2FwdHVyZShwYXR0ZXJuLCBzdHJpbmdbLCBvcHRpb25zXSk7XG4gKlxuICogY29uc29sZS5sb2cobW0uY2FwdHVyZSgndGVzdC8qLmpzJywgJ3Rlc3QvZm9vLmpzJykpO1xuICogLy89PiBbJ2ZvbyddXG4gKiBjb25zb2xlLmxvZyhtbS5jYXB0dXJlKCd0ZXN0LyouanMnLCAnZm9vL2Jhci5jc3MnKSk7XG4gKiAvLz0+IG51bGxcbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBnbG9iYCBHbG9iIHBhdHRlcm4gdG8gdXNlIGZvciBtYXRjaGluZy5cbiAqIEBwYXJhbSB7U3RyaW5nfSBgaW5wdXRgIFN0cmluZyB0byBtYXRjaFxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYCBTZWUgYXZhaWxhYmxlIFtvcHRpb25zXSgjb3B0aW9ucykgZm9yIGNoYW5naW5nIGhvdyBtYXRjaGVzIGFyZSBwZXJmb3JtZWRcbiAqIEByZXR1cm4ge0FycmF5fG51bGx9IFJldHVybnMgYW4gYXJyYXkgb2YgY2FwdHVyZXMgaWYgdGhlIGlucHV0IG1hdGNoZXMgdGhlIGdsb2IgcGF0dGVybiwgb3RoZXJ3aXNlIGBudWxsYC5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxubWljcm9tYXRjaC5jYXB0dXJlID0gKGdsb2IsIGlucHV0LCBvcHRpb25zKSA9PiB7XG4gIGxldCBwb3NpeCA9IHV0aWxzLmlzV2luZG93cyhvcHRpb25zKTtcbiAgbGV0IHJlZ2V4ID0gcGljb21hdGNoLm1ha2VSZShTdHJpbmcoZ2xvYiksIHsgLi4ub3B0aW9ucywgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgbGV0IG1hdGNoID0gcmVnZXguZXhlYyhwb3NpeCA/IHV0aWxzLnRvUG9zaXhTbGFzaGVzKGlucHV0KSA6IGlucHV0KTtcblxuICBpZiAobWF0Y2gpIHtcbiAgICByZXR1cm4gbWF0Y2guc2xpY2UoMSkubWFwKHYgPT4gdiA9PT0gdm9pZCAwID8gJycgOiB2KTtcbiAgfVxufTtcblxuLyoqXG4gKiBDcmVhdGUgYSByZWd1bGFyIGV4cHJlc3Npb24gZnJvbSB0aGUgZ2l2ZW4gZ2xvYiBgcGF0dGVybmAuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IG1tID0gcmVxdWlyZSgnbWljcm9tYXRjaCcpO1xuICogLy8gbW0ubWFrZVJlKHBhdHRlcm5bLCBvcHRpb25zXSk7XG4gKlxuICogY29uc29sZS5sb2cobW0ubWFrZVJlKCcqLmpzJykpO1xuICogLy89PiAvXig/OihcXC5bXFxcXFxcL10pPyg/IVxcLikoPz0uKVteXFwvXSo/XFwuanMpJC9cbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBwYXR0ZXJuYCBBIGdsb2IgcGF0dGVybiB0byBjb252ZXJ0IHRvIHJlZ2V4LlxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYFxuICogQHJldHVybiB7UmVnRXhwfSBSZXR1cm5zIGEgcmVnZXggY3JlYXRlZCBmcm9tIHRoZSBnaXZlbiBwYXR0ZXJuLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5taWNyb21hdGNoLm1ha2VSZSA9ICguLi5hcmdzKSA9PiBwaWNvbWF0Y2gubWFrZVJlKC4uLmFyZ3MpO1xuXG4vKipcbiAqIFNjYW4gYSBnbG9iIHBhdHRlcm4gdG8gc2VwYXJhdGUgdGhlIHBhdHRlcm4gaW50byBzZWdtZW50cy4gVXNlZFxuICogYnkgdGhlIFtzcGxpdF0oI3NwbGl0KSBtZXRob2QuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IG1tID0gcmVxdWlyZSgnbWljcm9tYXRjaCcpO1xuICogY29uc3Qgc3RhdGUgPSBtbS5zY2FuKHBhdHRlcm5bLCBvcHRpb25zXSk7XG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfSBgcGF0dGVybmBcbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5taWNyb21hdGNoLnNjYW4gPSAoLi4uYXJncykgPT4gcGljb21hdGNoLnNjYW4oLi4uYXJncyk7XG5cbi8qKlxuICogUGFyc2UgYSBnbG9iIHBhdHRlcm4gdG8gY3JlYXRlIHRoZSBzb3VyY2Ugc3RyaW5nIGZvciBhIHJlZ3VsYXJcbiAqIGV4cHJlc3Npb24uXG4gKlxuICogYGBganNcbiAqIGNvbnN0IG1tID0gcmVxdWlyZSgnbWljcm9tYXRjaCcpO1xuICogY29uc3Qgc3RhdGUgPSBtbS5wYXJzZShwYXR0ZXJuWywgb3B0aW9uc10pO1xuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYGdsb2JgXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgXG4gKiBAcmV0dXJuIHtPYmplY3R9IFJldHVybnMgYW4gb2JqZWN0IHdpdGggdXNlZnVsIHByb3BlcnRpZXMgYW5kIG91dHB1dCB0byBiZSB1c2VkIGFzIHJlZ2V4IHNvdXJjZSBzdHJpbmcuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1pY3JvbWF0Y2gucGFyc2UgPSAocGF0dGVybnMsIG9wdGlvbnMpID0+IHtcbiAgbGV0IHJlcyA9IFtdO1xuICBmb3IgKGxldCBwYXR0ZXJuIG9mIFtdLmNvbmNhdChwYXR0ZXJucyB8fCBbXSkpIHtcbiAgICBmb3IgKGxldCBzdHIgb2YgYnJhY2VzKFN0cmluZyhwYXR0ZXJuKSwgb3B0aW9ucykpIHtcbiAgICAgIHJlcy5wdXNoKHBpY29tYXRjaC5wYXJzZShzdHIsIG9wdGlvbnMpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG5cbi8qKlxuICogUHJvY2VzcyB0aGUgZ2l2ZW4gYnJhY2UgYHBhdHRlcm5gLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB7IGJyYWNlcyB9ID0gcmVxdWlyZSgnbWljcm9tYXRjaCcpO1xuICogY29uc29sZS5sb2coYnJhY2VzKCdmb28ve2EsYixjfS9iYXInKSk7XG4gKiAvLz0+IFsgJ2Zvby8oYXxifGMpL2JhcicgXVxuICpcbiAqIGNvbnNvbGUubG9nKGJyYWNlcygnZm9vL3thLGIsY30vYmFyJywgeyBleHBhbmQ6IHRydWUgfSkpO1xuICogLy89PiBbICdmb28vYS9iYXInLCAnZm9vL2IvYmFyJywgJ2Zvby9jL2JhcicgXVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYHBhdHRlcm5gIFN0cmluZyB3aXRoIGJyYWNlIHBhdHRlcm4gdG8gcHJvY2Vzcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2AgQW55IFtvcHRpb25zXSgjb3B0aW9ucykgdG8gY2hhbmdlIGhvdyBleHBhbnNpb24gaXMgcGVyZm9ybWVkLiBTZWUgdGhlIFticmFjZXNdW10gbGlicmFyeSBmb3IgYWxsIGF2YWlsYWJsZSBvcHRpb25zLlxuICogQHJldHVybiB7QXJyYXl9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1pY3JvbWF0Y2guYnJhY2VzID0gKHBhdHRlcm4sIG9wdGlvbnMpID0+IHtcbiAgaWYgKHR5cGVvZiBwYXR0ZXJuICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYSBzdHJpbmcnKTtcbiAgaWYgKChvcHRpb25zICYmIG9wdGlvbnMubm9icmFjZSA9PT0gdHJ1ZSkgfHwgIS9cXHsuKlxcfS8udGVzdChwYXR0ZXJuKSkge1xuICAgIHJldHVybiBbcGF0dGVybl07XG4gIH1cbiAgcmV0dXJuIGJyYWNlcyhwYXR0ZXJuLCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogRXhwYW5kIGJyYWNlc1xuICovXG5cbm1pY3JvbWF0Y2guYnJhY2VFeHBhbmQgPSAocGF0dGVybiwgb3B0aW9ucykgPT4ge1xuICBpZiAodHlwZW9mIHBhdHRlcm4gIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhIHN0cmluZycpO1xuICByZXR1cm4gbWljcm9tYXRjaC5icmFjZXMocGF0dGVybiwgeyAuLi5vcHRpb25zLCBleHBhbmQ6IHRydWUgfSk7XG59O1xuXG4vKipcbiAqIEV4cG9zZSBtaWNyb21hdGNoXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBtaWNyb21hdGNoO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZW1vdmVEdXBsaWNhdGVTbGFzaGVzID0gZXhwb3J0cy5tYXRjaEFueSA9IGV4cG9ydHMuY29udmVydFBhdHRlcm5zVG9SZSA9IGV4cG9ydHMubWFrZVJlID0gZXhwb3J0cy5nZXRQYXR0ZXJuUGFydHMgPSBleHBvcnRzLmV4cGFuZEJyYWNlRXhwYW5zaW9uID0gZXhwb3J0cy5leHBhbmRQYXR0ZXJuc1dpdGhCcmFjZUV4cGFuc2lvbiA9IGV4cG9ydHMuaXNBZmZlY3REZXB0aE9mUmVhZGluZ1BhdHRlcm4gPSBleHBvcnRzLmVuZHNXaXRoU2xhc2hHbG9iU3RhciA9IGV4cG9ydHMuaGFzR2xvYlN0YXIgPSBleHBvcnRzLmdldEJhc2VEaXJlY3RvcnkgPSBleHBvcnRzLmlzUGF0dGVyblJlbGF0ZWRUb1BhcmVudERpcmVjdG9yeSA9IGV4cG9ydHMuZ2V0UGF0dGVybnNPdXRzaWRlQ3VycmVudERpcmVjdG9yeSA9IGV4cG9ydHMuZ2V0UGF0dGVybnNJbnNpZGVDdXJyZW50RGlyZWN0b3J5ID0gZXhwb3J0cy5nZXRQb3NpdGl2ZVBhdHRlcm5zID0gZXhwb3J0cy5nZXROZWdhdGl2ZVBhdHRlcm5zID0gZXhwb3J0cy5pc1Bvc2l0aXZlUGF0dGVybiA9IGV4cG9ydHMuaXNOZWdhdGl2ZVBhdHRlcm4gPSBleHBvcnRzLmNvbnZlcnRUb05lZ2F0aXZlUGF0dGVybiA9IGV4cG9ydHMuY29udmVydFRvUG9zaXRpdmVQYXR0ZXJuID0gZXhwb3J0cy5pc0R5bmFtaWNQYXR0ZXJuID0gZXhwb3J0cy5pc1N0YXRpY1BhdHRlcm4gPSB2b2lkIDA7XG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XG5jb25zdCBnbG9iUGFyZW50ID0gcmVxdWlyZShcImdsb2ItcGFyZW50XCIpO1xuY29uc3QgbWljcm9tYXRjaCA9IHJlcXVpcmUoXCJtaWNyb21hdGNoXCIpO1xuY29uc3QgR0xPQlNUQVIgPSAnKionO1xuY29uc3QgRVNDQVBFX1NZTUJPTCA9ICdcXFxcJztcbmNvbnN0IENPTU1PTl9HTE9CX1NZTUJPTFNfUkUgPSAvWyo/XXxeIS87XG5jb25zdCBSRUdFWF9DSEFSQUNURVJfQ0xBU1NfU1lNQk9MU19SRSA9IC9cXFtbXltdKl0vO1xuY29uc3QgUkVHRVhfR1JPVVBfU1lNQk9MU19SRSA9IC8oPzpefFteISorP0BdKVxcKFteKF0qXFx8W158XSpcXCkvO1xuY29uc3QgR0xPQl9FWFRFTlNJT05fU1lNQk9MU19SRSA9IC9bISorP0BdXFwoW14oXSpcXCkvO1xuY29uc3QgQlJBQ0VfRVhQQU5TSU9OX1NFUEFSQVRPUlNfUkUgPSAvLHxcXC5cXC4vO1xuLyoqXG4gKiBNYXRjaGVzIGEgc2VxdWVuY2Ugb2YgdHdvIG9yIG1vcmUgY29uc2VjdXRpdmUgc2xhc2hlcywgZXhjbHVkaW5nIHRoZSBmaXJzdCB0d28gc2xhc2hlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcuXG4gKiBUaGUgbGF0dGVyIGlzIGR1ZSB0byB0aGUgcHJlc2VuY2Ugb2YgdGhlIGRldmljZSBwYXRoIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIFVOQyBwYXRoLlxuICovXG5jb25zdCBET1VCTEVfU0xBU0hfUkUgPSAvKD8hXilcXC97Mix9L2c7XG5mdW5jdGlvbiBpc1N0YXRpY1BhdHRlcm4ocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuICFpc0R5bmFtaWNQYXR0ZXJuKHBhdHRlcm4sIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5pc1N0YXRpY1BhdHRlcm4gPSBpc1N0YXRpY1BhdHRlcm47XG5mdW5jdGlvbiBpc0R5bmFtaWNQYXR0ZXJuKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbCBjYXNlIHdpdGggYW4gZW1wdHkgc3RyaW5nIGlzIG5lY2Vzc2FyeSBmb3IgbWF0Y2hpbmcgcGF0dGVybnMgdGhhdCBzdGFydCB3aXRoIGEgZm9yd2FyZCBzbGFzaC5cbiAgICAgKiBBbiBlbXB0eSBzdHJpbmcgY2Fubm90IGJlIGEgZHluYW1pYyBwYXR0ZXJuLlxuICAgICAqIEZvciBleGFtcGxlLCB0aGUgcGF0dGVybiBgL2xpYi8qYCB3aWxsIGJlIHNwcmVhZCBpbnRvIHBhcnRzOiAnJywgJ2xpYicsICcqJy5cbiAgICAgKi9cbiAgICBpZiAocGF0dGVybiA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXaGVuIHRoZSBgY2FzZVNlbnNpdGl2ZU1hdGNoYCBvcHRpb24gaXMgZGlzYWJsZWQsIGFsbCBwYXR0ZXJucyBtdXN0IGJlIG1hcmtlZCBhcyBkeW5hbWljLCBiZWNhdXNlIHdlIGNhbm5vdCBjaGVja1xuICAgICAqIGZpbGVwYXRoIGRpcmVjdGx5ICh3aXRob3V0IHJlYWQgZGlyZWN0b3J5KS5cbiAgICAgKi9cbiAgICBpZiAob3B0aW9ucy5jYXNlU2Vuc2l0aXZlTWF0Y2ggPT09IGZhbHNlIHx8IHBhdHRlcm4uaW5jbHVkZXMoRVNDQVBFX1NZTUJPTCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChDT01NT05fR0xPQl9TWU1CT0xTX1JFLnRlc3QocGF0dGVybikgfHwgUkVHRVhfQ0hBUkFDVEVSX0NMQVNTX1NZTUJPTFNfUkUudGVzdChwYXR0ZXJuKSB8fCBSRUdFWF9HUk9VUF9TWU1CT0xTX1JFLnRlc3QocGF0dGVybikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmV4dGdsb2IgIT09IGZhbHNlICYmIEdMT0JfRVhURU5TSU9OX1NZTUJPTFNfUkUudGVzdChwYXR0ZXJuKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuYnJhY2VFeHBhbnNpb24gIT09IGZhbHNlICYmIGhhc0JyYWNlRXhwYW5zaW9uKHBhdHRlcm4pKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnRzLmlzRHluYW1pY1BhdHRlcm4gPSBpc0R5bmFtaWNQYXR0ZXJuO1xuZnVuY3Rpb24gaGFzQnJhY2VFeHBhbnNpb24ocGF0dGVybikge1xuICAgIGNvbnN0IG9wZW5pbmdCcmFjZUluZGV4ID0gcGF0dGVybi5pbmRleE9mKCd7Jyk7XG4gICAgaWYgKG9wZW5pbmdCcmFjZUluZGV4ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGNsb3NpbmdCcmFjZUluZGV4ID0gcGF0dGVybi5pbmRleE9mKCd9Jywgb3BlbmluZ0JyYWNlSW5kZXggKyAxKTtcbiAgICBpZiAoY2xvc2luZ0JyYWNlSW5kZXggPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgYnJhY2VDb250ZW50ID0gcGF0dGVybi5zbGljZShvcGVuaW5nQnJhY2VJbmRleCwgY2xvc2luZ0JyYWNlSW5kZXgpO1xuICAgIHJldHVybiBCUkFDRV9FWFBBTlNJT05fU0VQQVJBVE9SU19SRS50ZXN0KGJyYWNlQ29udGVudCk7XG59XG5mdW5jdGlvbiBjb252ZXJ0VG9Qb3NpdGl2ZVBhdHRlcm4ocGF0dGVybikge1xuICAgIHJldHVybiBpc05lZ2F0aXZlUGF0dGVybihwYXR0ZXJuKSA/IHBhdHRlcm4uc2xpY2UoMSkgOiBwYXR0ZXJuO1xufVxuZXhwb3J0cy5jb252ZXJ0VG9Qb3NpdGl2ZVBhdHRlcm4gPSBjb252ZXJ0VG9Qb3NpdGl2ZVBhdHRlcm47XG5mdW5jdGlvbiBjb252ZXJ0VG9OZWdhdGl2ZVBhdHRlcm4ocGF0dGVybikge1xuICAgIHJldHVybiAnIScgKyBwYXR0ZXJuO1xufVxuZXhwb3J0cy5jb252ZXJ0VG9OZWdhdGl2ZVBhdHRlcm4gPSBjb252ZXJ0VG9OZWdhdGl2ZVBhdHRlcm47XG5mdW5jdGlvbiBpc05lZ2F0aXZlUGF0dGVybihwYXR0ZXJuKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4uc3RhcnRzV2l0aCgnIScpICYmIHBhdHRlcm5bMV0gIT09ICcoJztcbn1cbmV4cG9ydHMuaXNOZWdhdGl2ZVBhdHRlcm4gPSBpc05lZ2F0aXZlUGF0dGVybjtcbmZ1bmN0aW9uIGlzUG9zaXRpdmVQYXR0ZXJuKHBhdHRlcm4pIHtcbiAgICByZXR1cm4gIWlzTmVnYXRpdmVQYXR0ZXJuKHBhdHRlcm4pO1xufVxuZXhwb3J0cy5pc1Bvc2l0aXZlUGF0dGVybiA9IGlzUG9zaXRpdmVQYXR0ZXJuO1xuZnVuY3Rpb24gZ2V0TmVnYXRpdmVQYXR0ZXJucyhwYXR0ZXJucykge1xuICAgIHJldHVybiBwYXR0ZXJucy5maWx0ZXIoaXNOZWdhdGl2ZVBhdHRlcm4pO1xufVxuZXhwb3J0cy5nZXROZWdhdGl2ZVBhdHRlcm5zID0gZ2V0TmVnYXRpdmVQYXR0ZXJucztcbmZ1bmN0aW9uIGdldFBvc2l0aXZlUGF0dGVybnMocGF0dGVybnMpIHtcbiAgICByZXR1cm4gcGF0dGVybnMuZmlsdGVyKGlzUG9zaXRpdmVQYXR0ZXJuKTtcbn1cbmV4cG9ydHMuZ2V0UG9zaXRpdmVQYXR0ZXJucyA9IGdldFBvc2l0aXZlUGF0dGVybnM7XG4vKipcbiAqIFJldHVybnMgcGF0dGVybnMgdGhhdCBjYW4gYmUgYXBwbGllZCBpbnNpZGUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBbJy4vKicsICcqJywgJ2EvKiddXG4gKiBnZXRQYXR0ZXJuc0luc2lkZUN1cnJlbnREaXJlY3RvcnkoWycuLyonLCAnKicsICdhLyonLCAnLi4vKicsICcuLy4uLyonXSlcbiAqL1xuZnVuY3Rpb24gZ2V0UGF0dGVybnNJbnNpZGVDdXJyZW50RGlyZWN0b3J5KHBhdHRlcm5zKSB7XG4gICAgcmV0dXJuIHBhdHRlcm5zLmZpbHRlcigocGF0dGVybikgPT4gIWlzUGF0dGVyblJlbGF0ZWRUb1BhcmVudERpcmVjdG9yeShwYXR0ZXJuKSk7XG59XG5leHBvcnRzLmdldFBhdHRlcm5zSW5zaWRlQ3VycmVudERpcmVjdG9yeSA9IGdldFBhdHRlcm5zSW5zaWRlQ3VycmVudERpcmVjdG9yeTtcbi8qKlxuICogUmV0dXJucyBwYXR0ZXJucyB0byBiZSBleHBhbmRlZCByZWxhdGl2ZSB0byAob3V0c2lkZSkgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBbJy4uLyonLCAnLi8uLi8qJ11cbiAqIGdldFBhdHRlcm5zSW5zaWRlQ3VycmVudERpcmVjdG9yeShbJy4vKicsICcqJywgJ2EvKicsICcuLi8qJywgJy4vLi4vKiddKVxuICovXG5mdW5jdGlvbiBnZXRQYXR0ZXJuc091dHNpZGVDdXJyZW50RGlyZWN0b3J5KHBhdHRlcm5zKSB7XG4gICAgcmV0dXJuIHBhdHRlcm5zLmZpbHRlcihpc1BhdHRlcm5SZWxhdGVkVG9QYXJlbnREaXJlY3RvcnkpO1xufVxuZXhwb3J0cy5nZXRQYXR0ZXJuc091dHNpZGVDdXJyZW50RGlyZWN0b3J5ID0gZ2V0UGF0dGVybnNPdXRzaWRlQ3VycmVudERpcmVjdG9yeTtcbmZ1bmN0aW9uIGlzUGF0dGVyblJlbGF0ZWRUb1BhcmVudERpcmVjdG9yeShwYXR0ZXJuKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4uc3RhcnRzV2l0aCgnLi4nKSB8fCBwYXR0ZXJuLnN0YXJ0c1dpdGgoJy4vLi4nKTtcbn1cbmV4cG9ydHMuaXNQYXR0ZXJuUmVsYXRlZFRvUGFyZW50RGlyZWN0b3J5ID0gaXNQYXR0ZXJuUmVsYXRlZFRvUGFyZW50RGlyZWN0b3J5O1xuZnVuY3Rpb24gZ2V0QmFzZURpcmVjdG9yeShwYXR0ZXJuKSB7XG4gICAgcmV0dXJuIGdsb2JQYXJlbnQocGF0dGVybiwgeyBmbGlwQmFja3NsYXNoZXM6IGZhbHNlIH0pO1xufVxuZXhwb3J0cy5nZXRCYXNlRGlyZWN0b3J5ID0gZ2V0QmFzZURpcmVjdG9yeTtcbmZ1bmN0aW9uIGhhc0dsb2JTdGFyKHBhdHRlcm4pIHtcbiAgICByZXR1cm4gcGF0dGVybi5pbmNsdWRlcyhHTE9CU1RBUik7XG59XG5leHBvcnRzLmhhc0dsb2JTdGFyID0gaGFzR2xvYlN0YXI7XG5mdW5jdGlvbiBlbmRzV2l0aFNsYXNoR2xvYlN0YXIocGF0dGVybikge1xuICAgIHJldHVybiBwYXR0ZXJuLmVuZHNXaXRoKCcvJyArIEdMT0JTVEFSKTtcbn1cbmV4cG9ydHMuZW5kc1dpdGhTbGFzaEdsb2JTdGFyID0gZW5kc1dpdGhTbGFzaEdsb2JTdGFyO1xuZnVuY3Rpb24gaXNBZmZlY3REZXB0aE9mUmVhZGluZ1BhdHRlcm4ocGF0dGVybikge1xuICAgIGNvbnN0IGJhc2VuYW1lID0gcGF0aC5iYXNlbmFtZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gZW5kc1dpdGhTbGFzaEdsb2JTdGFyKHBhdHRlcm4pIHx8IGlzU3RhdGljUGF0dGVybihiYXNlbmFtZSk7XG59XG5leHBvcnRzLmlzQWZmZWN0RGVwdGhPZlJlYWRpbmdQYXR0ZXJuID0gaXNBZmZlY3REZXB0aE9mUmVhZGluZ1BhdHRlcm47XG5mdW5jdGlvbiBleHBhbmRQYXR0ZXJuc1dpdGhCcmFjZUV4cGFuc2lvbihwYXR0ZXJucykge1xuICAgIHJldHVybiBwYXR0ZXJucy5yZWR1Y2UoKGNvbGxlY3Rpb24sIHBhdHRlcm4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb24uY29uY2F0KGV4cGFuZEJyYWNlRXhwYW5zaW9uKHBhdHRlcm4pKTtcbiAgICB9LCBbXSk7XG59XG5leHBvcnRzLmV4cGFuZFBhdHRlcm5zV2l0aEJyYWNlRXhwYW5zaW9uID0gZXhwYW5kUGF0dGVybnNXaXRoQnJhY2VFeHBhbnNpb247XG5mdW5jdGlvbiBleHBhbmRCcmFjZUV4cGFuc2lvbihwYXR0ZXJuKSB7XG4gICAgY29uc3QgcGF0dGVybnMgPSBtaWNyb21hdGNoLmJyYWNlcyhwYXR0ZXJuLCB7IGV4cGFuZDogdHJ1ZSwgbm9kdXBlczogdHJ1ZSB9KTtcbiAgICAvKipcbiAgICAgKiBTb3J0IHRoZSBwYXR0ZXJucyBieSBsZW5ndGggc28gdGhhdCB0aGUgc2FtZSBkZXB0aCBwYXR0ZXJucyBhcmUgcHJvY2Vzc2VkIHNpZGUgYnkgc2lkZS5cbiAgICAgKiBgYS97Yix9L3tjLH0vKmAgXHUyMDEzIGBbJ2EvLy8qJywgJ2EvYi8vKicsICdhLy9jLyonLCAnYS9iL2MvKiddYFxuICAgICAqL1xuICAgIHBhdHRlcm5zLnNvcnQoKGEsIGIpID0+IGEubGVuZ3RoIC0gYi5sZW5ndGgpO1xuICAgIC8qKlxuICAgICAqIE1pY3JvbWF0Y2ggY2FuIHJldHVybiBhbiBlbXB0eSBzdHJpbmcgaW4gdGhlIGNhc2Ugb2YgcGF0dGVybnMgbGlrZSBge2EsfWAuXG4gICAgICovXG4gICAgcmV0dXJuIHBhdHRlcm5zLmZpbHRlcigocGF0dGVybikgPT4gcGF0dGVybiAhPT0gJycpO1xufVxuZXhwb3J0cy5leHBhbmRCcmFjZUV4cGFuc2lvbiA9IGV4cGFuZEJyYWNlRXhwYW5zaW9uO1xuZnVuY3Rpb24gZ2V0UGF0dGVyblBhcnRzKHBhdHRlcm4sIG9wdGlvbnMpIHtcbiAgICBsZXQgeyBwYXJ0cyB9ID0gbWljcm9tYXRjaC5zY2FuKHBhdHRlcm4sIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgcGFydHM6IHRydWUgfSkpO1xuICAgIC8qKlxuICAgICAqIFRoZSBzY2FuIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IGFycmF5IGluIHNvbWUgY2FzZXMuXG4gICAgICogU2VlIG1pY3JvbWF0Y2gvcGljb21hdGNoIzU4IGZvciBtb3JlIGRldGFpbHMuXG4gICAgICovXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBwYXJ0cyA9IFtwYXR0ZXJuXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHNjYW4gbWV0aG9kIGRvZXMgbm90IHJldHVybiBhbiBlbXB0eSBwYXJ0IGZvciB0aGUgcGF0dGVybiB3aXRoIGEgZm9yd2FyZCBzbGFzaC5cbiAgICAgKiBUaGlzIGlzIGFub3RoZXIgcGFydCBvZiBtaWNyb21hdGNoL3BpY29tYXRjaCM1OC5cbiAgICAgKi9cbiAgICBpZiAocGFydHNbMF0uc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgIHBhcnRzWzBdID0gcGFydHNbMF0uc2xpY2UoMSk7XG4gICAgICAgIHBhcnRzLnVuc2hpZnQoJycpO1xuICAgIH1cbiAgICByZXR1cm4gcGFydHM7XG59XG5leHBvcnRzLmdldFBhdHRlcm5QYXJ0cyA9IGdldFBhdHRlcm5QYXJ0cztcbmZ1bmN0aW9uIG1ha2VSZShwYXR0ZXJuLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG1pY3JvbWF0Y2gubWFrZVJlKHBhdHRlcm4sIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5tYWtlUmUgPSBtYWtlUmU7XG5mdW5jdGlvbiBjb252ZXJ0UGF0dGVybnNUb1JlKHBhdHRlcm5zLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHBhdHRlcm5zLm1hcCgocGF0dGVybikgPT4gbWFrZVJlKHBhdHRlcm4sIG9wdGlvbnMpKTtcbn1cbmV4cG9ydHMuY29udmVydFBhdHRlcm5zVG9SZSA9IGNvbnZlcnRQYXR0ZXJuc1RvUmU7XG5mdW5jdGlvbiBtYXRjaEFueShlbnRyeSwgcGF0dGVybnNSZSkge1xuICAgIHJldHVybiBwYXR0ZXJuc1JlLnNvbWUoKHBhdHRlcm5SZSkgPT4gcGF0dGVyblJlLnRlc3QoZW50cnkpKTtcbn1cbmV4cG9ydHMubWF0Y2hBbnkgPSBtYXRjaEFueTtcbi8qKlxuICogVGhpcyBwYWNrYWdlIG9ubHkgd29ya3Mgd2l0aCBmb3J3YXJkIHNsYXNoZXMgYXMgYSBwYXRoIHNlcGFyYXRvci5cbiAqIEJlY2F1c2Ugb2YgdGhpcywgd2UgY2Fubm90IHVzZSB0aGUgc3RhbmRhcmQgYHBhdGgubm9ybWFsaXplYCBtZXRob2QsIGJlY2F1c2Ugb24gV2luZG93cyBwbGF0Zm9ybSBpdCB3aWxsIHVzZSBvZiBiYWNrc2xhc2hlcy5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRHVwbGljYXRlU2xhc2hlcyhwYXR0ZXJuKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4ucmVwbGFjZShET1VCTEVfU0xBU0hfUkUsICcvJyk7XG59XG5leHBvcnRzLnJlbW92ZUR1cGxpY2F0ZVNsYXNoZXMgPSByZW1vdmVEdXBsaWNhdGVTbGFzaGVzO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tZXJnZSA9IHZvaWQgMDtcbmNvbnN0IG1lcmdlMiA9IHJlcXVpcmUoXCJtZXJnZTJcIik7XG5mdW5jdGlvbiBtZXJnZShzdHJlYW1zKSB7XG4gICAgY29uc3QgbWVyZ2VkU3RyZWFtID0gbWVyZ2UyKHN0cmVhbXMpO1xuICAgIHN0cmVhbXMuZm9yRWFjaCgoc3RyZWFtKSA9PiB7XG4gICAgICAgIHN0cmVhbS5vbmNlKCdlcnJvcicsIChlcnJvcikgPT4gbWVyZ2VkU3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyb3IpKTtcbiAgICB9KTtcbiAgICBtZXJnZWRTdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiBwcm9wYWdhdGVDbG9zZUV2ZW50VG9Tb3VyY2VzKHN0cmVhbXMpKTtcbiAgICBtZXJnZWRTdHJlYW0ub25jZSgnZW5kJywgKCkgPT4gcHJvcGFnYXRlQ2xvc2VFdmVudFRvU291cmNlcyhzdHJlYW1zKSk7XG4gICAgcmV0dXJuIG1lcmdlZFN0cmVhbTtcbn1cbmV4cG9ydHMubWVyZ2UgPSBtZXJnZTtcbmZ1bmN0aW9uIHByb3BhZ2F0ZUNsb3NlRXZlbnRUb1NvdXJjZXMoc3RyZWFtcykge1xuICAgIHN0cmVhbXMuZm9yRWFjaCgoc3RyZWFtKSA9PiBzdHJlYW0uZW1pdCgnY2xvc2UnKSk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzRW1wdHkgPSBleHBvcnRzLmlzU3RyaW5nID0gdm9pZCAwO1xuZnVuY3Rpb24gaXNTdHJpbmcoaW5wdXQpIHtcbiAgICByZXR1cm4gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJztcbn1cbmV4cG9ydHMuaXNTdHJpbmcgPSBpc1N0cmluZztcbmZ1bmN0aW9uIGlzRW1wdHkoaW5wdXQpIHtcbiAgICByZXR1cm4gaW5wdXQgPT09ICcnO1xufVxuZXhwb3J0cy5pc0VtcHR5ID0gaXNFbXB0eTtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RyaW5nID0gZXhwb3J0cy5zdHJlYW0gPSBleHBvcnRzLnBhdHRlcm4gPSBleHBvcnRzLnBhdGggPSBleHBvcnRzLmZzID0gZXhwb3J0cy5lcnJubyA9IGV4cG9ydHMuYXJyYXkgPSB2b2lkIDA7XG5jb25zdCBhcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5XCIpO1xuZXhwb3J0cy5hcnJheSA9IGFycmF5O1xuY29uc3QgZXJybm8gPSByZXF1aXJlKFwiLi9lcnJub1wiKTtcbmV4cG9ydHMuZXJybm8gPSBlcnJubztcbmNvbnN0IGZzID0gcmVxdWlyZShcIi4vZnNcIik7XG5leHBvcnRzLmZzID0gZnM7XG5jb25zdCBwYXRoID0gcmVxdWlyZShcIi4vcGF0aFwiKTtcbmV4cG9ydHMucGF0aCA9IHBhdGg7XG5jb25zdCBwYXR0ZXJuID0gcmVxdWlyZShcIi4vcGF0dGVyblwiKTtcbmV4cG9ydHMucGF0dGVybiA9IHBhdHRlcm47XG5jb25zdCBzdHJlYW0gPSByZXF1aXJlKFwiLi9zdHJlYW1cIik7XG5leHBvcnRzLnN0cmVhbSA9IHN0cmVhbTtcbmNvbnN0IHN0cmluZyA9IHJlcXVpcmUoXCIuL3N0cmluZ1wiKTtcbmV4cG9ydHMuc3RyaW5nID0gc3RyaW5nO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb252ZXJ0UGF0dGVybkdyb3VwVG9UYXNrID0gZXhwb3J0cy5jb252ZXJ0UGF0dGVybkdyb3Vwc1RvVGFza3MgPSBleHBvcnRzLmdyb3VwUGF0dGVybnNCeUJhc2VEaXJlY3RvcnkgPSBleHBvcnRzLmdldE5lZ2F0aXZlUGF0dGVybnNBc1Bvc2l0aXZlID0gZXhwb3J0cy5nZXRQb3NpdGl2ZVBhdHRlcm5zID0gZXhwb3J0cy5jb252ZXJ0UGF0dGVybnNUb1Rhc2tzID0gZXhwb3J0cy5nZW5lcmF0ZSA9IHZvaWQgMDtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpO1xuZnVuY3Rpb24gZ2VuZXJhdGUoaW5wdXQsIHNldHRpbmdzKSB7XG4gICAgY29uc3QgcGF0dGVybnMgPSBwcm9jZXNzUGF0dGVybnMoaW5wdXQsIHNldHRpbmdzKTtcbiAgICBjb25zdCBpZ25vcmUgPSBwcm9jZXNzUGF0dGVybnMoc2V0dGluZ3MuaWdub3JlLCBzZXR0aW5ncyk7XG4gICAgY29uc3QgcG9zaXRpdmVQYXR0ZXJucyA9IGdldFBvc2l0aXZlUGF0dGVybnMocGF0dGVybnMpO1xuICAgIGNvbnN0IG5lZ2F0aXZlUGF0dGVybnMgPSBnZXROZWdhdGl2ZVBhdHRlcm5zQXNQb3NpdGl2ZShwYXR0ZXJucywgaWdub3JlKTtcbiAgICBjb25zdCBzdGF0aWNQYXR0ZXJucyA9IHBvc2l0aXZlUGF0dGVybnMuZmlsdGVyKChwYXR0ZXJuKSA9PiB1dGlscy5wYXR0ZXJuLmlzU3RhdGljUGF0dGVybihwYXR0ZXJuLCBzZXR0aW5ncykpO1xuICAgIGNvbnN0IGR5bmFtaWNQYXR0ZXJucyA9IHBvc2l0aXZlUGF0dGVybnMuZmlsdGVyKChwYXR0ZXJuKSA9PiB1dGlscy5wYXR0ZXJuLmlzRHluYW1pY1BhdHRlcm4ocGF0dGVybiwgc2V0dGluZ3MpKTtcbiAgICBjb25zdCBzdGF0aWNUYXNrcyA9IGNvbnZlcnRQYXR0ZXJuc1RvVGFza3Moc3RhdGljUGF0dGVybnMsIG5lZ2F0aXZlUGF0dGVybnMsIC8qIGR5bmFtaWMgKi8gZmFsc2UpO1xuICAgIGNvbnN0IGR5bmFtaWNUYXNrcyA9IGNvbnZlcnRQYXR0ZXJuc1RvVGFza3MoZHluYW1pY1BhdHRlcm5zLCBuZWdhdGl2ZVBhdHRlcm5zLCAvKiBkeW5hbWljICovIHRydWUpO1xuICAgIHJldHVybiBzdGF0aWNUYXNrcy5jb25jYXQoZHluYW1pY1Rhc2tzKTtcbn1cbmV4cG9ydHMuZ2VuZXJhdGUgPSBnZW5lcmF0ZTtcbmZ1bmN0aW9uIHByb2Nlc3NQYXR0ZXJucyhpbnB1dCwgc2V0dGluZ3MpIHtcbiAgICBsZXQgcGF0dGVybnMgPSBpbnB1dDtcbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwgcGF0dGVybiBsaWtlIGB7LCosKiosYS8qfWAgY2FuIGxlYWQgdG8gcHJvYmxlbXMgY2hlY2tpbmcgdGhlIGRlcHRoIHdoZW4gbWF0Y2hpbmcgZW50cnlcbiAgICAgKiBhbmQgc29tZSBwcm9ibGVtcyB3aXRoIHRoZSBtaWNyb21hdGNoIHBhY2thZ2UgKHNlZSBmYXN0LWdsb2IgaXNzdWVzOiAjMzY1LCAjMzk0KS5cbiAgICAgKlxuICAgICAqIFRvIHNvbHZlIHRoaXMgcHJvYmxlbSwgd2UgZXhwYW5kIGFsbCBwYXR0ZXJucyBjb250YWluaW5nIGJyYWNlIGV4cGFuc2lvbi4gVGhpcyBjYW4gbGVhZCB0byBhIHNsaWdodCBzbG93ZG93blxuICAgICAqIGluIG1hdGNoaW5nIGluIHRoZSBjYXNlIG9mIGEgbGFyZ2Ugc2V0IG9mIHBhdHRlcm5zIGFmdGVyIGV4cGFuc2lvbi5cbiAgICAgKi9cbiAgICBpZiAoc2V0dGluZ3MuYnJhY2VFeHBhbnNpb24pIHtcbiAgICAgICAgcGF0dGVybnMgPSB1dGlscy5wYXR0ZXJuLmV4cGFuZFBhdHRlcm5zV2l0aEJyYWNlRXhwYW5zaW9uKHBhdHRlcm5zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgdGhlIGBiYXNlTmFtZU1hdGNoYCBvcHRpb24gaXMgZW5hYmxlZCwgd2UgbXVzdCBhZGQgZ2xvYnN0YXIgdG8gcGF0dGVybnMsIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZFxuICAgICAqIGF0IGFueSBuZXN0aW5nIGxldmVsLlxuICAgICAqXG4gICAgICogV2UgZG8gdGhpcyBoZXJlLCBiZWNhdXNlIG90aGVyd2lzZSB3ZSBoYXZlIHRvIGNvbXBsaWNhdGUgdGhlIGZpbHRlcmluZyBsb2dpYy4gRm9yIGV4YW1wbGUsIHdlIG5lZWQgdG8gY2hhbmdlXG4gICAgICogdGhlIHBhdHRlcm4gaW4gdGhlIGZpbHRlciBiZWZvcmUgY3JlYXRpbmcgYSByZWd1bGFyIGV4cHJlc3Npb24uIFRoZXJlIGlzIG5vIG5lZWQgdG8gY2hhbmdlIHRoZSBwYXR0ZXJuc1xuICAgICAqIGluIHRoZSBhcHBsaWNhdGlvbi4gT25seSBvbiB0aGUgaW5wdXQuXG4gICAgICovXG4gICAgaWYgKHNldHRpbmdzLmJhc2VOYW1lTWF0Y2gpIHtcbiAgICAgICAgcGF0dGVybnMgPSBwYXR0ZXJucy5tYXAoKHBhdHRlcm4pID0+IHBhdHRlcm4uaW5jbHVkZXMoJy8nKSA/IHBhdHRlcm4gOiBgKiovJHtwYXR0ZXJufWApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBhbHNvIHJlbW92ZXMgZHVwbGljYXRlIHNsYXNoZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIGluIHRoZSBwYXR0ZXJuIG9yIGZvcm1lZCBhcyBhIHJlc3VsdCBvZiBleHBhbnNpb24uXG4gICAgICovXG4gICAgcmV0dXJuIHBhdHRlcm5zLm1hcCgocGF0dGVybikgPT4gdXRpbHMucGF0dGVybi5yZW1vdmVEdXBsaWNhdGVTbGFzaGVzKHBhdHRlcm4pKTtcbn1cbi8qKlxuICogUmV0dXJucyB0YXNrcyBncm91cGVkIGJ5IGJhc2ljIHBhdHRlcm4gZGlyZWN0b3JpZXMuXG4gKlxuICogUGF0dGVybnMgdGhhdCBjYW4gYmUgZm91bmQgaW5zaWRlIChgLi9gKSBhbmQgb3V0c2lkZSAoYC4uL2ApIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5LlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBkaXJlY3RvcnkgdHJhdmVyc2FsIHN0YXJ0cyBhdCB0aGUgYmFzZSBkaXJlY3RvcnkgYW5kIGdvZXMgZGVlcGVyLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UGF0dGVybnNUb1Rhc2tzKHBvc2l0aXZlLCBuZWdhdGl2ZSwgZHluYW1pYykge1xuICAgIGNvbnN0IHRhc2tzID0gW107XG4gICAgY29uc3QgcGF0dGVybnNPdXRzaWRlQ3VycmVudERpcmVjdG9yeSA9IHV0aWxzLnBhdHRlcm4uZ2V0UGF0dGVybnNPdXRzaWRlQ3VycmVudERpcmVjdG9yeShwb3NpdGl2ZSk7XG4gICAgY29uc3QgcGF0dGVybnNJbnNpZGVDdXJyZW50RGlyZWN0b3J5ID0gdXRpbHMucGF0dGVybi5nZXRQYXR0ZXJuc0luc2lkZUN1cnJlbnREaXJlY3RvcnkocG9zaXRpdmUpO1xuICAgIGNvbnN0IG91dHNpZGVDdXJyZW50RGlyZWN0b3J5R3JvdXAgPSBncm91cFBhdHRlcm5zQnlCYXNlRGlyZWN0b3J5KHBhdHRlcm5zT3V0c2lkZUN1cnJlbnREaXJlY3RvcnkpO1xuICAgIGNvbnN0IGluc2lkZUN1cnJlbnREaXJlY3RvcnlHcm91cCA9IGdyb3VwUGF0dGVybnNCeUJhc2VEaXJlY3RvcnkocGF0dGVybnNJbnNpZGVDdXJyZW50RGlyZWN0b3J5KTtcbiAgICB0YXNrcy5wdXNoKC4uLmNvbnZlcnRQYXR0ZXJuR3JvdXBzVG9UYXNrcyhvdXRzaWRlQ3VycmVudERpcmVjdG9yeUdyb3VwLCBuZWdhdGl2ZSwgZHluYW1pYykpO1xuICAgIC8qXG4gICAgICogRm9yIHRoZSBzYWtlIG9mIHJlZHVjaW5nIGZ1dHVyZSBhY2Nlc3NlcyB0byB0aGUgZmlsZSBzeXN0ZW0sIHdlIG1lcmdlIGFsbCB0YXNrcyB3aXRoaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5XG4gICAgICogaW50byBhIGdsb2JhbCB0YXNrLCBpZiBhdCBsZWFzdCBvbmUgcGF0dGVybiByZWZlcnMgdG8gdGhlIHJvb3QgKGAuYCkuIEluIHRoaXMgY2FzZSwgdGhlIGdsb2JhbCB0YXNrIGNvdmVycyB0aGUgcmVzdC5cbiAgICAgKi9cbiAgICBpZiAoJy4nIGluIGluc2lkZUN1cnJlbnREaXJlY3RvcnlHcm91cCkge1xuICAgICAgICB0YXNrcy5wdXNoKGNvbnZlcnRQYXR0ZXJuR3JvdXBUb1Rhc2soJy4nLCBwYXR0ZXJuc0luc2lkZUN1cnJlbnREaXJlY3RvcnksIG5lZ2F0aXZlLCBkeW5hbWljKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0YXNrcy5wdXNoKC4uLmNvbnZlcnRQYXR0ZXJuR3JvdXBzVG9UYXNrcyhpbnNpZGVDdXJyZW50RGlyZWN0b3J5R3JvdXAsIG5lZ2F0aXZlLCBkeW5hbWljKSk7XG4gICAgfVxuICAgIHJldHVybiB0YXNrcztcbn1cbmV4cG9ydHMuY29udmVydFBhdHRlcm5zVG9UYXNrcyA9IGNvbnZlcnRQYXR0ZXJuc1RvVGFza3M7XG5mdW5jdGlvbiBnZXRQb3NpdGl2ZVBhdHRlcm5zKHBhdHRlcm5zKSB7XG4gICAgcmV0dXJuIHV0aWxzLnBhdHRlcm4uZ2V0UG9zaXRpdmVQYXR0ZXJucyhwYXR0ZXJucyk7XG59XG5leHBvcnRzLmdldFBvc2l0aXZlUGF0dGVybnMgPSBnZXRQb3NpdGl2ZVBhdHRlcm5zO1xuZnVuY3Rpb24gZ2V0TmVnYXRpdmVQYXR0ZXJuc0FzUG9zaXRpdmUocGF0dGVybnMsIGlnbm9yZSkge1xuICAgIGNvbnN0IG5lZ2F0aXZlID0gdXRpbHMucGF0dGVybi5nZXROZWdhdGl2ZVBhdHRlcm5zKHBhdHRlcm5zKS5jb25jYXQoaWdub3JlKTtcbiAgICBjb25zdCBwb3NpdGl2ZSA9IG5lZ2F0aXZlLm1hcCh1dGlscy5wYXR0ZXJuLmNvbnZlcnRUb1Bvc2l0aXZlUGF0dGVybik7XG4gICAgcmV0dXJuIHBvc2l0aXZlO1xufVxuZXhwb3J0cy5nZXROZWdhdGl2ZVBhdHRlcm5zQXNQb3NpdGl2ZSA9IGdldE5lZ2F0aXZlUGF0dGVybnNBc1Bvc2l0aXZlO1xuZnVuY3Rpb24gZ3JvdXBQYXR0ZXJuc0J5QmFzZURpcmVjdG9yeShwYXR0ZXJucykge1xuICAgIGNvbnN0IGdyb3VwID0ge307XG4gICAgcmV0dXJuIHBhdHRlcm5zLnJlZHVjZSgoY29sbGVjdGlvbiwgcGF0dGVybikgPT4ge1xuICAgICAgICBjb25zdCBiYXNlID0gdXRpbHMucGF0dGVybi5nZXRCYXNlRGlyZWN0b3J5KHBhdHRlcm4pO1xuICAgICAgICBpZiAoYmFzZSBpbiBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICBjb2xsZWN0aW9uW2Jhc2VdLnB1c2gocGF0dGVybik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb2xsZWN0aW9uW2Jhc2VdID0gW3BhdHRlcm5dO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgIH0sIGdyb3VwKTtcbn1cbmV4cG9ydHMuZ3JvdXBQYXR0ZXJuc0J5QmFzZURpcmVjdG9yeSA9IGdyb3VwUGF0dGVybnNCeUJhc2VEaXJlY3Rvcnk7XG5mdW5jdGlvbiBjb252ZXJ0UGF0dGVybkdyb3Vwc1RvVGFza3MocG9zaXRpdmUsIG5lZ2F0aXZlLCBkeW5hbWljKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHBvc2l0aXZlKS5tYXAoKGJhc2UpID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRQYXR0ZXJuR3JvdXBUb1Rhc2soYmFzZSwgcG9zaXRpdmVbYmFzZV0sIG5lZ2F0aXZlLCBkeW5hbWljKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuY29udmVydFBhdHRlcm5Hcm91cHNUb1Rhc2tzID0gY29udmVydFBhdHRlcm5Hcm91cHNUb1Rhc2tzO1xuZnVuY3Rpb24gY29udmVydFBhdHRlcm5Hcm91cFRvVGFzayhiYXNlLCBwb3NpdGl2ZSwgbmVnYXRpdmUsIGR5bmFtaWMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBkeW5hbWljLFxuICAgICAgICBwb3NpdGl2ZSxcbiAgICAgICAgbmVnYXRpdmUsXG4gICAgICAgIGJhc2UsXG4gICAgICAgIHBhdHRlcm5zOiBbXS5jb25jYXQocG9zaXRpdmUsIG5lZ2F0aXZlLm1hcCh1dGlscy5wYXR0ZXJuLmNvbnZlcnRUb05lZ2F0aXZlUGF0dGVybikpXG4gICAgfTtcbn1cbmV4cG9ydHMuY29udmVydFBhdHRlcm5Hcm91cFRvVGFzayA9IGNvbnZlcnRQYXR0ZXJuR3JvdXBUb1Rhc2s7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlYWQgPSB2b2lkIDA7XG5mdW5jdGlvbiByZWFkKHBhdGgsIHNldHRpbmdzLCBjYWxsYmFjaykge1xuICAgIHNldHRpbmdzLmZzLmxzdGF0KHBhdGgsIChsc3RhdEVycm9yLCBsc3RhdCkgPT4ge1xuICAgICAgICBpZiAobHN0YXRFcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY2FsbEZhaWx1cmVDYWxsYmFjayhjYWxsYmFjaywgbHN0YXRFcnJvcik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFsc3RhdC5pc1N5bWJvbGljTGluaygpIHx8ICFzZXR0aW5ncy5mb2xsb3dTeW1ib2xpY0xpbmspIHtcbiAgICAgICAgICAgIGNhbGxTdWNjZXNzQ2FsbGJhY2soY2FsbGJhY2ssIGxzdGF0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZXR0aW5ncy5mcy5zdGF0KHBhdGgsIChzdGF0RXJyb3IsIHN0YXQpID0+IHtcbiAgICAgICAgICAgIGlmIChzdGF0RXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ3MudGhyb3dFcnJvck9uQnJva2VuU3ltYm9saWNMaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxGYWlsdXJlQ2FsbGJhY2soY2FsbGJhY2ssIHN0YXRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbFN1Y2Nlc3NDYWxsYmFjayhjYWxsYmFjaywgbHN0YXQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy5tYXJrU3ltYm9saWNMaW5rKSB7XG4gICAgICAgICAgICAgICAgc3RhdC5pc1N5bWJvbGljTGluayA9ICgpID0+IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsU3VjY2Vzc0NhbGxiYWNrKGNhbGxiYWNrLCBzdGF0KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLnJlYWQgPSByZWFkO1xuZnVuY3Rpb24gY2FsbEZhaWx1cmVDYWxsYmFjayhjYWxsYmFjaywgZXJyb3IpIHtcbiAgICBjYWxsYmFjayhlcnJvcik7XG59XG5mdW5jdGlvbiBjYWxsU3VjY2Vzc0NhbGxiYWNrKGNhbGxiYWNrLCByZXN1bHQpIHtcbiAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZWFkID0gdm9pZCAwO1xuZnVuY3Rpb24gcmVhZChwYXRoLCBzZXR0aW5ncykge1xuICAgIGNvbnN0IGxzdGF0ID0gc2V0dGluZ3MuZnMubHN0YXRTeW5jKHBhdGgpO1xuICAgIGlmICghbHN0YXQuaXNTeW1ib2xpY0xpbmsoKSB8fCAhc2V0dGluZ3MuZm9sbG93U3ltYm9saWNMaW5rKSB7XG4gICAgICAgIHJldHVybiBsc3RhdDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RhdCA9IHNldHRpbmdzLmZzLnN0YXRTeW5jKHBhdGgpO1xuICAgICAgICBpZiAoc2V0dGluZ3MubWFya1N5bWJvbGljTGluaykge1xuICAgICAgICAgICAgc3RhdC5pc1N5bWJvbGljTGluayA9ICgpID0+IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXQ7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIXNldHRpbmdzLnRocm93RXJyb3JPbkJyb2tlblN5bWJvbGljTGluaykge1xuICAgICAgICAgICAgcmV0dXJuIGxzdGF0O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbn1cbmV4cG9ydHMucmVhZCA9IHJlYWQ7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUZpbGVTeXN0ZW1BZGFwdGVyID0gZXhwb3J0cy5GSUxFX1NZU1RFTV9BREFQVEVSID0gdm9pZCAwO1xuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XG5leHBvcnRzLkZJTEVfU1lTVEVNX0FEQVBURVIgPSB7XG4gICAgbHN0YXQ6IGZzLmxzdGF0LFxuICAgIHN0YXQ6IGZzLnN0YXQsXG4gICAgbHN0YXRTeW5jOiBmcy5sc3RhdFN5bmMsXG4gICAgc3RhdFN5bmM6IGZzLnN0YXRTeW5jXG59O1xuZnVuY3Rpb24gY3JlYXRlRmlsZVN5c3RlbUFkYXB0ZXIoZnNNZXRob2RzKSB7XG4gICAgaWYgKGZzTWV0aG9kcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLkZJTEVfU1lTVEVNX0FEQVBURVI7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGV4cG9ydHMuRklMRV9TWVNURU1fQURBUFRFUiksIGZzTWV0aG9kcyk7XG59XG5leHBvcnRzLmNyZWF0ZUZpbGVTeXN0ZW1BZGFwdGVyID0gY3JlYXRlRmlsZVN5c3RlbUFkYXB0ZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBmcyA9IHJlcXVpcmUoXCIuL2FkYXB0ZXJzL2ZzXCIpO1xuY2xhc3MgU2V0dGluZ3Mge1xuICAgIGNvbnN0cnVjdG9yKF9vcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuICAgICAgICB0aGlzLmZvbGxvd1N5bWJvbGljTGluayA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMuZm9sbG93U3ltYm9saWNMaW5rLCB0cnVlKTtcbiAgICAgICAgdGhpcy5mcyA9IGZzLmNyZWF0ZUZpbGVTeXN0ZW1BZGFwdGVyKHRoaXMuX29wdGlvbnMuZnMpO1xuICAgICAgICB0aGlzLm1hcmtTeW1ib2xpY0xpbmsgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLm1hcmtTeW1ib2xpY0xpbmssIGZhbHNlKTtcbiAgICAgICAgdGhpcy50aHJvd0Vycm9yT25Ccm9rZW5TeW1ib2xpY0xpbmsgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLnRocm93RXJyb3JPbkJyb2tlblN5bWJvbGljTGluaywgdHJ1ZSk7XG4gICAgfVxuICAgIF9nZXRWYWx1ZShvcHRpb24sIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBvcHRpb24gIT09IG51bGwgJiYgb3B0aW9uICE9PSB2b2lkIDAgPyBvcHRpb24gOiB2YWx1ZTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBTZXR0aW5ncztcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RhdFN5bmMgPSBleHBvcnRzLnN0YXQgPSBleHBvcnRzLlNldHRpbmdzID0gdm9pZCAwO1xuY29uc3QgYXN5bmMgPSByZXF1aXJlKFwiLi9wcm92aWRlcnMvYXN5bmNcIik7XG5jb25zdCBzeW5jID0gcmVxdWlyZShcIi4vcHJvdmlkZXJzL3N5bmNcIik7XG5jb25zdCBzZXR0aW5nc18xID0gcmVxdWlyZShcIi4vc2V0dGluZ3NcIik7XG5leHBvcnRzLlNldHRpbmdzID0gc2V0dGluZ3NfMS5kZWZhdWx0O1xuZnVuY3Rpb24gc3RhdChwYXRoLCBvcHRpb25zT3JTZXR0aW5nc09yQ2FsbGJhY2ssIGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zT3JTZXR0aW5nc09yQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYXN5bmMucmVhZChwYXRoLCBnZXRTZXR0aW5ncygpLCBvcHRpb25zT3JTZXR0aW5nc09yQ2FsbGJhY2spO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGFzeW5jLnJlYWQocGF0aCwgZ2V0U2V0dGluZ3Mob3B0aW9uc09yU2V0dGluZ3NPckNhbGxiYWNrKSwgY2FsbGJhY2spO1xufVxuZXhwb3J0cy5zdGF0ID0gc3RhdDtcbmZ1bmN0aW9uIHN0YXRTeW5jKHBhdGgsIG9wdGlvbnNPclNldHRpbmdzKSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncyhvcHRpb25zT3JTZXR0aW5ncyk7XG4gICAgcmV0dXJuIHN5bmMucmVhZChwYXRoLCBzZXR0aW5ncyk7XG59XG5leHBvcnRzLnN0YXRTeW5jID0gc3RhdFN5bmM7XG5mdW5jdGlvbiBnZXRTZXR0aW5ncyhzZXR0aW5nc09yT3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHNldHRpbmdzT3JPcHRpb25zIGluc3RhbmNlb2Ygc2V0dGluZ3NfMS5kZWZhdWx0KSB7XG4gICAgICAgIHJldHVybiBzZXR0aW5nc09yT3B0aW9ucztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBzZXR0aW5nc18xLmRlZmF1bHQoc2V0dGluZ3NPck9wdGlvbnMpO1xufVxuIiwgIi8qISBxdWV1ZS1taWNyb3Rhc2suIE1JVCBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi9cbmxldCBwcm9taXNlXG5cbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHF1ZXVlTWljcm90YXNrID09PSAnZnVuY3Rpb24nXG4gID8gcXVldWVNaWNyb3Rhc2suYmluZCh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbClcbiAgLy8gcmV1c2UgcmVzb2x2ZWQgcHJvbWlzZSwgYW5kIGFsbG9jYXRlIGl0IGxhemlseVxuICA6IGNiID0+IChwcm9taXNlIHx8IChwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCkpKVxuICAgIC50aGVuKGNiKVxuICAgIC5jYXRjaChlcnIgPT4gc2V0VGltZW91dCgoKSA9PiB7IHRocm93IGVyciB9LCAwKSlcbiIsICIvKiEgcnVuLXBhcmFsbGVsLiBNSVQgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovXG5tb2R1bGUuZXhwb3J0cyA9IHJ1blBhcmFsbGVsXG5cbmNvbnN0IHF1ZXVlTWljcm90YXNrID0gcmVxdWlyZSgncXVldWUtbWljcm90YXNrJylcblxuZnVuY3Rpb24gcnVuUGFyYWxsZWwgKHRhc2tzLCBjYikge1xuICBsZXQgcmVzdWx0cywgcGVuZGluZywga2V5c1xuICBsZXQgaXNTeW5jID0gdHJ1ZVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHRhc2tzKSkge1xuICAgIHJlc3VsdHMgPSBbXVxuICAgIHBlbmRpbmcgPSB0YXNrcy5sZW5ndGhcbiAgfSBlbHNlIHtcbiAgICBrZXlzID0gT2JqZWN0LmtleXModGFza3MpXG4gICAgcmVzdWx0cyA9IHt9XG4gICAgcGVuZGluZyA9IGtleXMubGVuZ3RoXG4gIH1cblxuICBmdW5jdGlvbiBkb25lIChlcnIpIHtcbiAgICBmdW5jdGlvbiBlbmQgKCkge1xuICAgICAgaWYgKGNiKSBjYihlcnIsIHJlc3VsdHMpXG4gICAgICBjYiA9IG51bGxcbiAgICB9XG4gICAgaWYgKGlzU3luYykgcXVldWVNaWNyb3Rhc2soZW5kKVxuICAgIGVsc2UgZW5kKClcbiAgfVxuXG4gIGZ1bmN0aW9uIGVhY2ggKGksIGVyciwgcmVzdWx0KSB7XG4gICAgcmVzdWx0c1tpXSA9IHJlc3VsdFxuICAgIGlmICgtLXBlbmRpbmcgPT09IDAgfHwgZXJyKSB7XG4gICAgICBkb25lKGVycilcbiAgICB9XG4gIH1cblxuICBpZiAoIXBlbmRpbmcpIHtcbiAgICAvLyBlbXB0eVxuICAgIGRvbmUobnVsbClcbiAgfSBlbHNlIGlmIChrZXlzKSB7XG4gICAgLy8gb2JqZWN0XG4gICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHRhc2tzW2tleV0oZnVuY3Rpb24gKGVyciwgcmVzdWx0KSB7IGVhY2goa2V5LCBlcnIsIHJlc3VsdCkgfSlcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIC8vIGFycmF5XG4gICAgdGFza3MuZm9yRWFjaChmdW5jdGlvbiAodGFzaywgaSkge1xuICAgICAgdGFzayhmdW5jdGlvbiAoZXJyLCByZXN1bHQpIHsgZWFjaChpLCBlcnIsIHJlc3VsdCkgfSlcbiAgICB9KVxuICB9XG5cbiAgaXNTeW5jID0gZmFsc2Vcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSVNfU1VQUE9SVF9SRUFERElSX1dJVEhfRklMRV9UWVBFUyA9IHZvaWQgMDtcbmNvbnN0IE5PREVfUFJPQ0VTU19WRVJTSU9OX1BBUlRTID0gcHJvY2Vzcy52ZXJzaW9ucy5ub2RlLnNwbGl0KCcuJyk7XG5pZiAoTk9ERV9QUk9DRVNTX1ZFUlNJT05fUEFSVFNbMF0gPT09IHVuZGVmaW5lZCB8fCBOT0RFX1BST0NFU1NfVkVSU0lPTl9QQVJUU1sxXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGJlaGF2aW9yLiBUaGUgJ3Byb2Nlc3MudmVyc2lvbnMubm9kZScgdmFyaWFibGUgaGFzIGludmFsaWQgdmFsdWU6ICR7cHJvY2Vzcy52ZXJzaW9ucy5ub2RlfWApO1xufVxuY29uc3QgTUFKT1JfVkVSU0lPTiA9IE51bWJlci5wYXJzZUludChOT0RFX1BST0NFU1NfVkVSU0lPTl9QQVJUU1swXSwgMTApO1xuY29uc3QgTUlOT1JfVkVSU0lPTiA9IE51bWJlci5wYXJzZUludChOT0RFX1BST0NFU1NfVkVSU0lPTl9QQVJUU1sxXSwgMTApO1xuY29uc3QgU1VQUE9SVEVEX01BSk9SX1ZFUlNJT04gPSAxMDtcbmNvbnN0IFNVUFBPUlRFRF9NSU5PUl9WRVJTSU9OID0gMTA7XG5jb25zdCBJU19NQVRDSEVEX0JZX01BSk9SID0gTUFKT1JfVkVSU0lPTiA+IFNVUFBPUlRFRF9NQUpPUl9WRVJTSU9OO1xuY29uc3QgSVNfTUFUQ0hFRF9CWV9NQUpPUl9BTkRfTUlOT1IgPSBNQUpPUl9WRVJTSU9OID09PSBTVVBQT1JURURfTUFKT1JfVkVSU0lPTiAmJiBNSU5PUl9WRVJTSU9OID49IFNVUFBPUlRFRF9NSU5PUl9WRVJTSU9OO1xuLyoqXG4gKiBJUyBgdHJ1ZWAgZm9yIE5vZGUuanMgMTAuMTAgYW5kIGdyZWF0ZXIuXG4gKi9cbmV4cG9ydHMuSVNfU1VQUE9SVF9SRUFERElSX1dJVEhfRklMRV9UWVBFUyA9IElTX01BVENIRURfQllfTUFKT1IgfHwgSVNfTUFUQ0hFRF9CWV9NQUpPUl9BTkRfTUlOT1I7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZURpcmVudEZyb21TdGF0cyA9IHZvaWQgMDtcbmNsYXNzIERpcmVudEZyb21TdGF0cyB7XG4gICAgY29uc3RydWN0b3IobmFtZSwgc3RhdHMpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5pc0Jsb2NrRGV2aWNlID0gc3RhdHMuaXNCbG9ja0RldmljZS5iaW5kKHN0YXRzKTtcbiAgICAgICAgdGhpcy5pc0NoYXJhY3RlckRldmljZSA9IHN0YXRzLmlzQ2hhcmFjdGVyRGV2aWNlLmJpbmQoc3RhdHMpO1xuICAgICAgICB0aGlzLmlzRGlyZWN0b3J5ID0gc3RhdHMuaXNEaXJlY3RvcnkuYmluZChzdGF0cyk7XG4gICAgICAgIHRoaXMuaXNGSUZPID0gc3RhdHMuaXNGSUZPLmJpbmQoc3RhdHMpO1xuICAgICAgICB0aGlzLmlzRmlsZSA9IHN0YXRzLmlzRmlsZS5iaW5kKHN0YXRzKTtcbiAgICAgICAgdGhpcy5pc1NvY2tldCA9IHN0YXRzLmlzU29ja2V0LmJpbmQoc3RhdHMpO1xuICAgICAgICB0aGlzLmlzU3ltYm9saWNMaW5rID0gc3RhdHMuaXNTeW1ib2xpY0xpbmsuYmluZChzdGF0cyk7XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlRGlyZW50RnJvbVN0YXRzKG5hbWUsIHN0YXRzKSB7XG4gICAgcmV0dXJuIG5ldyBEaXJlbnRGcm9tU3RhdHMobmFtZSwgc3RhdHMpO1xufVxuZXhwb3J0cy5jcmVhdGVEaXJlbnRGcm9tU3RhdHMgPSBjcmVhdGVEaXJlbnRGcm9tU3RhdHM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZzID0gdm9pZCAwO1xuY29uc3QgZnMgPSByZXF1aXJlKFwiLi9mc1wiKTtcbmV4cG9ydHMuZnMgPSBmcztcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuam9pblBhdGhTZWdtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIGpvaW5QYXRoU2VnbWVudHMoYSwgYiwgc2VwYXJhdG9yKSB7XG4gICAgLyoqXG4gICAgICogVGhlIGNvcnJlY3QgaGFuZGxpbmcgb2YgY2FzZXMgd2hlbiB0aGUgZmlyc3Qgc2VnbWVudCBpcyBhIHJvb3QgKGAvYCwgYEM6L2ApIG9yIFVOQyBwYXRoIChgLy8/L0M6L2ApLlxuICAgICAqL1xuICAgIGlmIChhLmVuZHNXaXRoKHNlcGFyYXRvcikpIHtcbiAgICAgICAgcmV0dXJuIGEgKyBiO1xuICAgIH1cbiAgICByZXR1cm4gYSArIHNlcGFyYXRvciArIGI7XG59XG5leHBvcnRzLmpvaW5QYXRoU2VnbWVudHMgPSBqb2luUGF0aFNlZ21lbnRzO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZWFkZGlyID0gZXhwb3J0cy5yZWFkZGlyV2l0aEZpbGVUeXBlcyA9IGV4cG9ydHMucmVhZCA9IHZvaWQgMDtcbmNvbnN0IGZzU3RhdCA9IHJlcXVpcmUoXCJAbm9kZWxpYi9mcy5zdGF0XCIpO1xuY29uc3QgcnBsID0gcmVxdWlyZShcInJ1bi1wYXJhbGxlbFwiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4uL2NvbnN0YW50c1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpO1xuY29uc3QgY29tbW9uID0gcmVxdWlyZShcIi4vY29tbW9uXCIpO1xuZnVuY3Rpb24gcmVhZChkaXJlY3RvcnksIHNldHRpbmdzLCBjYWxsYmFjaykge1xuICAgIGlmICghc2V0dGluZ3Muc3RhdHMgJiYgY29uc3RhbnRzXzEuSVNfU1VQUE9SVF9SRUFERElSX1dJVEhfRklMRV9UWVBFUykge1xuICAgICAgICByZWFkZGlyV2l0aEZpbGVUeXBlcyhkaXJlY3RvcnksIHNldHRpbmdzLCBjYWxsYmFjayk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmVhZGRpcihkaXJlY3RvcnksIHNldHRpbmdzLCBjYWxsYmFjayk7XG59XG5leHBvcnRzLnJlYWQgPSByZWFkO1xuZnVuY3Rpb24gcmVhZGRpcldpdGhGaWxlVHlwZXMoZGlyZWN0b3J5LCBzZXR0aW5ncywgY2FsbGJhY2spIHtcbiAgICBzZXR0aW5ncy5mcy5yZWFkZGlyKGRpcmVjdG9yeSwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0sIChyZWFkZGlyRXJyb3IsIGRpcmVudHMpID0+IHtcbiAgICAgICAgaWYgKHJlYWRkaXJFcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY2FsbEZhaWx1cmVDYWxsYmFjayhjYWxsYmFjaywgcmVhZGRpckVycm9yKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbnRyaWVzID0gZGlyZW50cy5tYXAoKGRpcmVudCkgPT4gKHtcbiAgICAgICAgICAgIGRpcmVudCxcbiAgICAgICAgICAgIG5hbWU6IGRpcmVudC5uYW1lLFxuICAgICAgICAgICAgcGF0aDogY29tbW9uLmpvaW5QYXRoU2VnbWVudHMoZGlyZWN0b3J5LCBkaXJlbnQubmFtZSwgc2V0dGluZ3MucGF0aFNlZ21lbnRTZXBhcmF0b3IpXG4gICAgICAgIH0pKTtcbiAgICAgICAgaWYgKCFzZXR0aW5ncy5mb2xsb3dTeW1ib2xpY0xpbmtzKSB7XG4gICAgICAgICAgICBjYWxsU3VjY2Vzc0NhbGxiYWNrKGNhbGxiYWNrLCBlbnRyaWVzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YXNrcyA9IGVudHJpZXMubWFwKChlbnRyeSkgPT4gbWFrZVJwbFRhc2tFbnRyeShlbnRyeSwgc2V0dGluZ3MpKTtcbiAgICAgICAgcnBsKHRhc2tzLCAocnBsRXJyb3IsIHJwbEVudHJpZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChycGxFcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNhbGxGYWlsdXJlQ2FsbGJhY2soY2FsbGJhY2ssIHJwbEVycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsU3VjY2Vzc0NhbGxiYWNrKGNhbGxiYWNrLCBycGxFbnRyaWVzKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLnJlYWRkaXJXaXRoRmlsZVR5cGVzID0gcmVhZGRpcldpdGhGaWxlVHlwZXM7XG5mdW5jdGlvbiBtYWtlUnBsVGFza0VudHJ5KGVudHJ5LCBzZXR0aW5ncykge1xuICAgIHJldHVybiAoZG9uZSkgPT4ge1xuICAgICAgICBpZiAoIWVudHJ5LmRpcmVudC5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICBkb25lKG51bGwsIGVudHJ5KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZXR0aW5ncy5mcy5zdGF0KGVudHJ5LnBhdGgsIChzdGF0RXJyb3IsIHN0YXRzKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RhdEVycm9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzLnRocm93RXJyb3JPbkJyb2tlblN5bWJvbGljTGluaykge1xuICAgICAgICAgICAgICAgICAgICBkb25lKHN0YXRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG9uZShudWxsLCBlbnRyeSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW50cnkuZGlyZW50ID0gdXRpbHMuZnMuY3JlYXRlRGlyZW50RnJvbVN0YXRzKGVudHJ5Lm5hbWUsIHN0YXRzKTtcbiAgICAgICAgICAgIGRvbmUobnVsbCwgZW50cnkpO1xuICAgICAgICB9KTtcbiAgICB9O1xufVxuZnVuY3Rpb24gcmVhZGRpcihkaXJlY3RvcnksIHNldHRpbmdzLCBjYWxsYmFjaykge1xuICAgIHNldHRpbmdzLmZzLnJlYWRkaXIoZGlyZWN0b3J5LCAocmVhZGRpckVycm9yLCBuYW1lcykgPT4ge1xuICAgICAgICBpZiAocmVhZGRpckVycm9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjYWxsRmFpbHVyZUNhbGxiYWNrKGNhbGxiYWNrLCByZWFkZGlyRXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhc2tzID0gbmFtZXMubWFwKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gY29tbW9uLmpvaW5QYXRoU2VnbWVudHMoZGlyZWN0b3J5LCBuYW1lLCBzZXR0aW5ncy5wYXRoU2VnbWVudFNlcGFyYXRvcik7XG4gICAgICAgICAgICByZXR1cm4gKGRvbmUpID0+IHtcbiAgICAgICAgICAgICAgICBmc1N0YXQuc3RhdChwYXRoLCBzZXR0aW5ncy5mc1N0YXRTZXR0aW5ncywgKGVycm9yLCBzdGF0cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXJlbnQ6IHV0aWxzLmZzLmNyZWF0ZURpcmVudEZyb21TdGF0cyhuYW1lLCBzdGF0cylcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzLnN0YXRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5zdGF0cyA9IHN0YXRzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRvbmUobnVsbCwgZW50cnkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJwbCh0YXNrcywgKHJwbEVycm9yLCBlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgICBpZiAocnBsRXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjYWxsRmFpbHVyZUNhbGxiYWNrKGNhbGxiYWNrLCBycGxFcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbFN1Y2Nlc3NDYWxsYmFjayhjYWxsYmFjaywgZW50cmllcyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5yZWFkZGlyID0gcmVhZGRpcjtcbmZ1bmN0aW9uIGNhbGxGYWlsdXJlQ2FsbGJhY2soY2FsbGJhY2ssIGVycm9yKSB7XG4gICAgY2FsbGJhY2soZXJyb3IpO1xufVxuZnVuY3Rpb24gY2FsbFN1Y2Nlc3NDYWxsYmFjayhjYWxsYmFjaywgcmVzdWx0KSB7XG4gICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVhZGRpciA9IGV4cG9ydHMucmVhZGRpcldpdGhGaWxlVHlwZXMgPSBleHBvcnRzLnJlYWQgPSB2b2lkIDA7XG5jb25zdCBmc1N0YXQgPSByZXF1aXJlKFwiQG5vZGVsaWIvZnMuc3RhdFwiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4uL2NvbnN0YW50c1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpO1xuY29uc3QgY29tbW9uID0gcmVxdWlyZShcIi4vY29tbW9uXCIpO1xuZnVuY3Rpb24gcmVhZChkaXJlY3RvcnksIHNldHRpbmdzKSB7XG4gICAgaWYgKCFzZXR0aW5ncy5zdGF0cyAmJiBjb25zdGFudHNfMS5JU19TVVBQT1JUX1JFQURESVJfV0lUSF9GSUxFX1RZUEVTKSB7XG4gICAgICAgIHJldHVybiByZWFkZGlyV2l0aEZpbGVUeXBlcyhkaXJlY3RvcnksIHNldHRpbmdzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlYWRkaXIoZGlyZWN0b3J5LCBzZXR0aW5ncyk7XG59XG5leHBvcnRzLnJlYWQgPSByZWFkO1xuZnVuY3Rpb24gcmVhZGRpcldpdGhGaWxlVHlwZXMoZGlyZWN0b3J5LCBzZXR0aW5ncykge1xuICAgIGNvbnN0IGRpcmVudHMgPSBzZXR0aW5ncy5mcy5yZWFkZGlyU3luYyhkaXJlY3RvcnksIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgICByZXR1cm4gZGlyZW50cy5tYXAoKGRpcmVudCkgPT4ge1xuICAgICAgICBjb25zdCBlbnRyeSA9IHtcbiAgICAgICAgICAgIGRpcmVudCxcbiAgICAgICAgICAgIG5hbWU6IGRpcmVudC5uYW1lLFxuICAgICAgICAgICAgcGF0aDogY29tbW9uLmpvaW5QYXRoU2VnbWVudHMoZGlyZWN0b3J5LCBkaXJlbnQubmFtZSwgc2V0dGluZ3MucGF0aFNlZ21lbnRTZXBhcmF0b3IpXG4gICAgICAgIH07XG4gICAgICAgIGlmIChlbnRyeS5kaXJlbnQuaXNTeW1ib2xpY0xpbmsoKSAmJiBzZXR0aW5ncy5mb2xsb3dTeW1ib2xpY0xpbmtzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gc2V0dGluZ3MuZnMuc3RhdFN5bmMoZW50cnkucGF0aCk7XG4gICAgICAgICAgICAgICAgZW50cnkuZGlyZW50ID0gdXRpbHMuZnMuY3JlYXRlRGlyZW50RnJvbVN0YXRzKGVudHJ5Lm5hbWUsIHN0YXRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGlmIChzZXR0aW5ncy50aHJvd0Vycm9yT25Ccm9rZW5TeW1ib2xpY0xpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyeTtcbiAgICB9KTtcbn1cbmV4cG9ydHMucmVhZGRpcldpdGhGaWxlVHlwZXMgPSByZWFkZGlyV2l0aEZpbGVUeXBlcztcbmZ1bmN0aW9uIHJlYWRkaXIoZGlyZWN0b3J5LCBzZXR0aW5ncykge1xuICAgIGNvbnN0IG5hbWVzID0gc2V0dGluZ3MuZnMucmVhZGRpclN5bmMoZGlyZWN0b3J5KTtcbiAgICByZXR1cm4gbmFtZXMubWFwKChuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGVudHJ5UGF0aCA9IGNvbW1vbi5qb2luUGF0aFNlZ21lbnRzKGRpcmVjdG9yeSwgbmFtZSwgc2V0dGluZ3MucGF0aFNlZ21lbnRTZXBhcmF0b3IpO1xuICAgICAgICBjb25zdCBzdGF0cyA9IGZzU3RhdC5zdGF0U3luYyhlbnRyeVBhdGgsIHNldHRpbmdzLmZzU3RhdFNldHRpbmdzKTtcbiAgICAgICAgY29uc3QgZW50cnkgPSB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgcGF0aDogZW50cnlQYXRoLFxuICAgICAgICAgICAgZGlyZW50OiB1dGlscy5mcy5jcmVhdGVEaXJlbnRGcm9tU3RhdHMobmFtZSwgc3RhdHMpXG4gICAgICAgIH07XG4gICAgICAgIGlmIChzZXR0aW5ncy5zdGF0cykge1xuICAgICAgICAgICAgZW50cnkuc3RhdHMgPSBzdGF0cztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnk7XG4gICAgfSk7XG59XG5leHBvcnRzLnJlYWRkaXIgPSByZWFkZGlyO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVGaWxlU3lzdGVtQWRhcHRlciA9IGV4cG9ydHMuRklMRV9TWVNURU1fQURBUFRFUiA9IHZvaWQgMDtcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuZXhwb3J0cy5GSUxFX1NZU1RFTV9BREFQVEVSID0ge1xuICAgIGxzdGF0OiBmcy5sc3RhdCxcbiAgICBzdGF0OiBmcy5zdGF0LFxuICAgIGxzdGF0U3luYzogZnMubHN0YXRTeW5jLFxuICAgIHN0YXRTeW5jOiBmcy5zdGF0U3luYyxcbiAgICByZWFkZGlyOiBmcy5yZWFkZGlyLFxuICAgIHJlYWRkaXJTeW5jOiBmcy5yZWFkZGlyU3luY1xufTtcbmZ1bmN0aW9uIGNyZWF0ZUZpbGVTeXN0ZW1BZGFwdGVyKGZzTWV0aG9kcykge1xuICAgIGlmIChmc01ldGhvZHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5GSUxFX1NZU1RFTV9BREFQVEVSO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBleHBvcnRzLkZJTEVfU1lTVEVNX0FEQVBURVIpLCBmc01ldGhvZHMpO1xufVxuZXhwb3J0cy5jcmVhdGVGaWxlU3lzdGVtQWRhcHRlciA9IGNyZWF0ZUZpbGVTeXN0ZW1BZGFwdGVyO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuY29uc3QgZnNTdGF0ID0gcmVxdWlyZShcIkBub2RlbGliL2ZzLnN0YXRcIik7XG5jb25zdCBmcyA9IHJlcXVpcmUoXCIuL2FkYXB0ZXJzL2ZzXCIpO1xuY2xhc3MgU2V0dGluZ3Mge1xuICAgIGNvbnN0cnVjdG9yKF9vcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuICAgICAgICB0aGlzLmZvbGxvd1N5bWJvbGljTGlua3MgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLmZvbGxvd1N5bWJvbGljTGlua3MsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5mcyA9IGZzLmNyZWF0ZUZpbGVTeXN0ZW1BZGFwdGVyKHRoaXMuX29wdGlvbnMuZnMpO1xuICAgICAgICB0aGlzLnBhdGhTZWdtZW50U2VwYXJhdG9yID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5wYXRoU2VnbWVudFNlcGFyYXRvciwgcGF0aC5zZXApO1xuICAgICAgICB0aGlzLnN0YXRzID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5zdGF0cywgZmFsc2UpO1xuICAgICAgICB0aGlzLnRocm93RXJyb3JPbkJyb2tlblN5bWJvbGljTGluayA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMudGhyb3dFcnJvck9uQnJva2VuU3ltYm9saWNMaW5rLCB0cnVlKTtcbiAgICAgICAgdGhpcy5mc1N0YXRTZXR0aW5ncyA9IG5ldyBmc1N0YXQuU2V0dGluZ3Moe1xuICAgICAgICAgICAgZm9sbG93U3ltYm9saWNMaW5rOiB0aGlzLmZvbGxvd1N5bWJvbGljTGlua3MsXG4gICAgICAgICAgICBmczogdGhpcy5mcyxcbiAgICAgICAgICAgIHRocm93RXJyb3JPbkJyb2tlblN5bWJvbGljTGluazogdGhpcy50aHJvd0Vycm9yT25Ccm9rZW5TeW1ib2xpY0xpbmtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9nZXRWYWx1ZShvcHRpb24sIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBvcHRpb24gIT09IG51bGwgJiYgb3B0aW9uICE9PSB2b2lkIDAgPyBvcHRpb24gOiB2YWx1ZTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBTZXR0aW5ncztcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2V0dGluZ3MgPSBleHBvcnRzLnNjYW5kaXJTeW5jID0gZXhwb3J0cy5zY2FuZGlyID0gdm9pZCAwO1xuY29uc3QgYXN5bmMgPSByZXF1aXJlKFwiLi9wcm92aWRlcnMvYXN5bmNcIik7XG5jb25zdCBzeW5jID0gcmVxdWlyZShcIi4vcHJvdmlkZXJzL3N5bmNcIik7XG5jb25zdCBzZXR0aW5nc18xID0gcmVxdWlyZShcIi4vc2V0dGluZ3NcIik7XG5leHBvcnRzLlNldHRpbmdzID0gc2V0dGluZ3NfMS5kZWZhdWx0O1xuZnVuY3Rpb24gc2NhbmRpcihwYXRoLCBvcHRpb25zT3JTZXR0aW5nc09yQ2FsbGJhY2ssIGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zT3JTZXR0aW5nc09yQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYXN5bmMucmVhZChwYXRoLCBnZXRTZXR0aW5ncygpLCBvcHRpb25zT3JTZXR0aW5nc09yQ2FsbGJhY2spO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGFzeW5jLnJlYWQocGF0aCwgZ2V0U2V0dGluZ3Mob3B0aW9uc09yU2V0dGluZ3NPckNhbGxiYWNrKSwgY2FsbGJhY2spO1xufVxuZXhwb3J0cy5zY2FuZGlyID0gc2NhbmRpcjtcbmZ1bmN0aW9uIHNjYW5kaXJTeW5jKHBhdGgsIG9wdGlvbnNPclNldHRpbmdzKSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncyhvcHRpb25zT3JTZXR0aW5ncyk7XG4gICAgcmV0dXJuIHN5bmMucmVhZChwYXRoLCBzZXR0aW5ncyk7XG59XG5leHBvcnRzLnNjYW5kaXJTeW5jID0gc2NhbmRpclN5bmM7XG5mdW5jdGlvbiBnZXRTZXR0aW5ncyhzZXR0aW5nc09yT3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHNldHRpbmdzT3JPcHRpb25zIGluc3RhbmNlb2Ygc2V0dGluZ3NfMS5kZWZhdWx0KSB7XG4gICAgICAgIHJldHVybiBzZXR0aW5nc09yT3B0aW9ucztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBzZXR0aW5nc18xLmRlZmF1bHQoc2V0dGluZ3NPck9wdGlvbnMpO1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5mdW5jdGlvbiByZXVzaWZ5IChDb25zdHJ1Y3Rvcikge1xuICB2YXIgaGVhZCA9IG5ldyBDb25zdHJ1Y3RvcigpXG4gIHZhciB0YWlsID0gaGVhZFxuXG4gIGZ1bmN0aW9uIGdldCAoKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBoZWFkXG5cbiAgICBpZiAoY3VycmVudC5uZXh0KSB7XG4gICAgICBoZWFkID0gY3VycmVudC5uZXh0XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWQgPSBuZXcgQ29uc3RydWN0b3IoKVxuICAgICAgdGFpbCA9IGhlYWRcbiAgICB9XG5cbiAgICBjdXJyZW50Lm5leHQgPSBudWxsXG5cbiAgICByZXR1cm4gY3VycmVudFxuICB9XG5cbiAgZnVuY3Rpb24gcmVsZWFzZSAob2JqKSB7XG4gICAgdGFpbC5uZXh0ID0gb2JqXG4gICAgdGFpbCA9IG9ialxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBnZXQ6IGdldCxcbiAgICByZWxlYXNlOiByZWxlYXNlXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXVzaWZ5XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZhciAqL1xuXG52YXIgcmV1c2lmeSA9IHJlcXVpcmUoJ3JldXNpZnknKVxuXG5mdW5jdGlvbiBmYXN0cXVldWUgKGNvbnRleHQsIHdvcmtlciwgY29uY3VycmVuY3kpIHtcbiAgaWYgKHR5cGVvZiBjb250ZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uY3VycmVuY3kgPSB3b3JrZXJcbiAgICB3b3JrZXIgPSBjb250ZXh0XG4gICAgY29udGV4dCA9IG51bGxcbiAgfVxuXG4gIGlmIChjb25jdXJyZW5jeSA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2Zhc3RxdWV1ZSBjb25jdXJyZW5jeSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxJylcbiAgfVxuXG4gIHZhciBjYWNoZSA9IHJldXNpZnkoVGFzaylcbiAgdmFyIHF1ZXVlSGVhZCA9IG51bGxcbiAgdmFyIHF1ZXVlVGFpbCA9IG51bGxcbiAgdmFyIF9ydW5uaW5nID0gMFxuICB2YXIgZXJyb3JIYW5kbGVyID0gbnVsbFxuXG4gIHZhciBzZWxmID0ge1xuICAgIHB1c2g6IHB1c2gsXG4gICAgZHJhaW46IG5vb3AsXG4gICAgc2F0dXJhdGVkOiBub29wLFxuICAgIHBhdXNlOiBwYXVzZSxcbiAgICBwYXVzZWQ6IGZhbHNlLFxuICAgIGNvbmN1cnJlbmN5OiBjb25jdXJyZW5jeSxcbiAgICBydW5uaW5nOiBydW5uaW5nLFxuICAgIHJlc3VtZTogcmVzdW1lLFxuICAgIGlkbGU6IGlkbGUsXG4gICAgbGVuZ3RoOiBsZW5ndGgsXG4gICAgZ2V0UXVldWU6IGdldFF1ZXVlLFxuICAgIHVuc2hpZnQ6IHVuc2hpZnQsXG4gICAgZW1wdHk6IG5vb3AsXG4gICAga2lsbDoga2lsbCxcbiAgICBraWxsQW5kRHJhaW46IGtpbGxBbmREcmFpbixcbiAgICBlcnJvcjogZXJyb3JcbiAgfVxuXG4gIHJldHVybiBzZWxmXG5cbiAgZnVuY3Rpb24gcnVubmluZyAoKSB7XG4gICAgcmV0dXJuIF9ydW5uaW5nXG4gIH1cblxuICBmdW5jdGlvbiBwYXVzZSAoKSB7XG4gICAgc2VsZi5wYXVzZWQgPSB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBsZW5ndGggKCkge1xuICAgIHZhciBjdXJyZW50ID0gcXVldWVIZWFkXG4gICAgdmFyIGNvdW50ZXIgPSAwXG5cbiAgICB3aGlsZSAoY3VycmVudCkge1xuICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dFxuICAgICAgY291bnRlcisrXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50ZXJcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFF1ZXVlICgpIHtcbiAgICB2YXIgY3VycmVudCA9IHF1ZXVlSGVhZFxuICAgIHZhciB0YXNrcyA9IFtdXG5cbiAgICB3aGlsZSAoY3VycmVudCkge1xuICAgICAgdGFza3MucHVzaChjdXJyZW50LnZhbHVlKVxuICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dFxuICAgIH1cblxuICAgIHJldHVybiB0YXNrc1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzdW1lICgpIHtcbiAgICBpZiAoIXNlbGYucGF1c2VkKSByZXR1cm5cbiAgICBzZWxmLnBhdXNlZCA9IGZhbHNlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLmNvbmN1cnJlbmN5OyBpKyspIHtcbiAgICAgIF9ydW5uaW5nKytcbiAgICAgIHJlbGVhc2UoKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlkbGUgKCkge1xuICAgIHJldHVybiBfcnVubmluZyA9PT0gMCAmJiBzZWxmLmxlbmd0aCgpID09PSAwXG4gIH1cblxuICBmdW5jdGlvbiBwdXNoICh2YWx1ZSwgZG9uZSkge1xuICAgIHZhciBjdXJyZW50ID0gY2FjaGUuZ2V0KClcblxuICAgIGN1cnJlbnQuY29udGV4dCA9IGNvbnRleHRcbiAgICBjdXJyZW50LnJlbGVhc2UgPSByZWxlYXNlXG4gICAgY3VycmVudC52YWx1ZSA9IHZhbHVlXG4gICAgY3VycmVudC5jYWxsYmFjayA9IGRvbmUgfHwgbm9vcFxuICAgIGN1cnJlbnQuZXJyb3JIYW5kbGVyID0gZXJyb3JIYW5kbGVyXG5cbiAgICBpZiAoX3J1bm5pbmcgPT09IHNlbGYuY29uY3VycmVuY3kgfHwgc2VsZi5wYXVzZWQpIHtcbiAgICAgIGlmIChxdWV1ZVRhaWwpIHtcbiAgICAgICAgcXVldWVUYWlsLm5leHQgPSBjdXJyZW50XG4gICAgICAgIHF1ZXVlVGFpbCA9IGN1cnJlbnRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSGVhZCA9IGN1cnJlbnRcbiAgICAgICAgcXVldWVUYWlsID0gY3VycmVudFxuICAgICAgICBzZWxmLnNhdHVyYXRlZCgpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIF9ydW5uaW5nKytcbiAgICAgIHdvcmtlci5jYWxsKGNvbnRleHQsIGN1cnJlbnQudmFsdWUsIGN1cnJlbnQud29ya2VkKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVuc2hpZnQgKHZhbHVlLCBkb25lKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBjYWNoZS5nZXQoKVxuXG4gICAgY3VycmVudC5jb250ZXh0ID0gY29udGV4dFxuICAgIGN1cnJlbnQucmVsZWFzZSA9IHJlbGVhc2VcbiAgICBjdXJyZW50LnZhbHVlID0gdmFsdWVcbiAgICBjdXJyZW50LmNhbGxiYWNrID0gZG9uZSB8fCBub29wXG5cbiAgICBpZiAoX3J1bm5pbmcgPT09IHNlbGYuY29uY3VycmVuY3kgfHwgc2VsZi5wYXVzZWQpIHtcbiAgICAgIGlmIChxdWV1ZUhlYWQpIHtcbiAgICAgICAgY3VycmVudC5uZXh0ID0gcXVldWVIZWFkXG4gICAgICAgIHF1ZXVlSGVhZCA9IGN1cnJlbnRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSGVhZCA9IGN1cnJlbnRcbiAgICAgICAgcXVldWVUYWlsID0gY3VycmVudFxuICAgICAgICBzZWxmLnNhdHVyYXRlZCgpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIF9ydW5uaW5nKytcbiAgICAgIHdvcmtlci5jYWxsKGNvbnRleHQsIGN1cnJlbnQudmFsdWUsIGN1cnJlbnQud29ya2VkKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbGVhc2UgKGhvbGRlcikge1xuICAgIGlmIChob2xkZXIpIHtcbiAgICAgIGNhY2hlLnJlbGVhc2UoaG9sZGVyKVxuICAgIH1cbiAgICB2YXIgbmV4dCA9IHF1ZXVlSGVhZFxuICAgIGlmIChuZXh0KSB7XG4gICAgICBpZiAoIXNlbGYucGF1c2VkKSB7XG4gICAgICAgIGlmIChxdWV1ZVRhaWwgPT09IHF1ZXVlSGVhZCkge1xuICAgICAgICAgIHF1ZXVlVGFpbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUhlYWQgPSBuZXh0Lm5leHRcbiAgICAgICAgbmV4dC5uZXh0ID0gbnVsbFxuICAgICAgICB3b3JrZXIuY2FsbChjb250ZXh0LCBuZXh0LnZhbHVlLCBuZXh0LndvcmtlZClcbiAgICAgICAgaWYgKHF1ZXVlVGFpbCA9PT0gbnVsbCkge1xuICAgICAgICAgIHNlbGYuZW1wdHkoKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfcnVubmluZy0tXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgtLV9ydW5uaW5nID09PSAwKSB7XG4gICAgICBzZWxmLmRyYWluKClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBraWxsICgpIHtcbiAgICBxdWV1ZUhlYWQgPSBudWxsXG4gICAgcXVldWVUYWlsID0gbnVsbFxuICAgIHNlbGYuZHJhaW4gPSBub29wXG4gIH1cblxuICBmdW5jdGlvbiBraWxsQW5kRHJhaW4gKCkge1xuICAgIHF1ZXVlSGVhZCA9IG51bGxcbiAgICBxdWV1ZVRhaWwgPSBudWxsXG4gICAgc2VsZi5kcmFpbigpXG4gICAgc2VsZi5kcmFpbiA9IG5vb3BcbiAgfVxuXG4gIGZ1bmN0aW9uIGVycm9yIChoYW5kbGVyKSB7XG4gICAgZXJyb3JIYW5kbGVyID0gaGFuZGxlclxuICB9XG59XG5cbmZ1bmN0aW9uIG5vb3AgKCkge31cblxuZnVuY3Rpb24gVGFzayAoKSB7XG4gIHRoaXMudmFsdWUgPSBudWxsXG4gIHRoaXMuY2FsbGJhY2sgPSBub29wXG4gIHRoaXMubmV4dCA9IG51bGxcbiAgdGhpcy5yZWxlYXNlID0gbm9vcFxuICB0aGlzLmNvbnRleHQgPSBudWxsXG4gIHRoaXMuZXJyb3JIYW5kbGVyID0gbnVsbFxuXG4gIHZhciBzZWxmID0gdGhpc1xuXG4gIHRoaXMud29ya2VkID0gZnVuY3Rpb24gd29ya2VkIChlcnIsIHJlc3VsdCkge1xuICAgIHZhciBjYWxsYmFjayA9IHNlbGYuY2FsbGJhY2tcbiAgICB2YXIgZXJyb3JIYW5kbGVyID0gc2VsZi5lcnJvckhhbmRsZXJcbiAgICB2YXIgdmFsID0gc2VsZi52YWx1ZVxuICAgIHNlbGYudmFsdWUgPSBudWxsXG4gICAgc2VsZi5jYWxsYmFjayA9IG5vb3BcbiAgICBpZiAoc2VsZi5lcnJvckhhbmRsZXIpIHtcbiAgICAgIGVycm9ySGFuZGxlcihlcnIsIHZhbClcbiAgICB9XG4gICAgY2FsbGJhY2suY2FsbChzZWxmLmNvbnRleHQsIGVyciwgcmVzdWx0KVxuICAgIHNlbGYucmVsZWFzZShzZWxmKVxuICB9XG59XG5cbmZ1bmN0aW9uIHF1ZXVlQXNQcm9taXNlZCAoY29udGV4dCwgd29ya2VyLCBjb25jdXJyZW5jeSkge1xuICBpZiAodHlwZW9mIGNvbnRleHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25jdXJyZW5jeSA9IHdvcmtlclxuICAgIHdvcmtlciA9IGNvbnRleHRcbiAgICBjb250ZXh0ID0gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gYXN5bmNXcmFwcGVyIChhcmcsIGNiKSB7XG4gICAgd29ya2VyLmNhbGwodGhpcywgYXJnKVxuICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICBjYihudWxsLCByZXMpXG4gICAgICB9LCBjYilcbiAgfVxuXG4gIHZhciBxdWV1ZSA9IGZhc3RxdWV1ZShjb250ZXh0LCBhc3luY1dyYXBwZXIsIGNvbmN1cnJlbmN5KVxuXG4gIHZhciBwdXNoQ2IgPSBxdWV1ZS5wdXNoXG4gIHZhciB1bnNoaWZ0Q2IgPSBxdWV1ZS51bnNoaWZ0XG5cbiAgcXVldWUucHVzaCA9IHB1c2hcbiAgcXVldWUudW5zaGlmdCA9IHVuc2hpZnRcbiAgcXVldWUuZHJhaW5lZCA9IGRyYWluZWRcblxuICByZXR1cm4gcXVldWVcblxuICBmdW5jdGlvbiBwdXNoICh2YWx1ZSkge1xuICAgIHZhciBwID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgcHVzaENiKHZhbHVlLCBmdW5jdGlvbiAoZXJyLCByZXN1bHQpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShyZXN1bHQpXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICAvLyBMZXQncyBmb3JrIHRoZSBwcm9taXNlIGNoYWluIHRvXG4gICAgLy8gbWFrZSB0aGUgZXJyb3IgYnViYmxlIHVwIHRvIHRoZSB1c2VyIGJ1dFxuICAgIC8vIG5vdCBsZWFkIHRvIGEgdW5oYW5kbGVkUmVqZWN0aW9uXG4gICAgcC5jYXRjaChub29wKVxuXG4gICAgcmV0dXJuIHBcbiAgfVxuXG4gIGZ1bmN0aW9uIHVuc2hpZnQgKHZhbHVlKSB7XG4gICAgdmFyIHAgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB1bnNoaWZ0Q2IodmFsdWUsIGZ1bmN0aW9uIChlcnIsIHJlc3VsdCkge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycilcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKHJlc3VsdClcbiAgICAgIH0pXG4gICAgfSlcblxuICAgIC8vIExldCdzIGZvcmsgdGhlIHByb21pc2UgY2hhaW4gdG9cbiAgICAvLyBtYWtlIHRoZSBlcnJvciBidWJibGUgdXAgdG8gdGhlIHVzZXIgYnV0XG4gICAgLy8gbm90IGxlYWQgdG8gYSB1bmhhbmRsZWRSZWplY3Rpb25cbiAgICBwLmNhdGNoKG5vb3ApXG5cbiAgICByZXR1cm4gcFxuICB9XG5cbiAgZnVuY3Rpb24gZHJhaW5lZCAoKSB7XG4gICAgaWYgKHF1ZXVlLmlkbGUoKSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNEcmFpbiA9IHF1ZXVlLmRyYWluXG5cbiAgICB2YXIgcCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICBxdWV1ZS5kcmFpbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcHJldmlvdXNEcmFpbigpXG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gcFxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmFzdHF1ZXVlXG5tb2R1bGUuZXhwb3J0cy5wcm9taXNlID0gcXVldWVBc1Byb21pc2VkXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmpvaW5QYXRoU2VnbWVudHMgPSBleHBvcnRzLnJlcGxhY2VQYXRoU2VnbWVudFNlcGFyYXRvciA9IGV4cG9ydHMuaXNBcHBsaWVkRmlsdGVyID0gZXhwb3J0cy5pc0ZhdGFsRXJyb3IgPSB2b2lkIDA7XG5mdW5jdGlvbiBpc0ZhdGFsRXJyb3Ioc2V0dGluZ3MsIGVycm9yKSB7XG4gICAgaWYgKHNldHRpbmdzLmVycm9yRmlsdGVyID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gIXNldHRpbmdzLmVycm9yRmlsdGVyKGVycm9yKTtcbn1cbmV4cG9ydHMuaXNGYXRhbEVycm9yID0gaXNGYXRhbEVycm9yO1xuZnVuY3Rpb24gaXNBcHBsaWVkRmlsdGVyKGZpbHRlciwgdmFsdWUpIHtcbiAgICByZXR1cm4gZmlsdGVyID09PSBudWxsIHx8IGZpbHRlcih2YWx1ZSk7XG59XG5leHBvcnRzLmlzQXBwbGllZEZpbHRlciA9IGlzQXBwbGllZEZpbHRlcjtcbmZ1bmN0aW9uIHJlcGxhY2VQYXRoU2VnbWVudFNlcGFyYXRvcihmaWxlcGF0aCwgc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIGZpbGVwYXRoLnNwbGl0KC9bL1xcXFxdLykuam9pbihzZXBhcmF0b3IpO1xufVxuZXhwb3J0cy5yZXBsYWNlUGF0aFNlZ21lbnRTZXBhcmF0b3IgPSByZXBsYWNlUGF0aFNlZ21lbnRTZXBhcmF0b3I7XG5mdW5jdGlvbiBqb2luUGF0aFNlZ21lbnRzKGEsIGIsIHNlcGFyYXRvcikge1xuICAgIGlmIChhID09PSAnJykge1xuICAgICAgICByZXR1cm4gYjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGNvcnJlY3QgaGFuZGxpbmcgb2YgY2FzZXMgd2hlbiB0aGUgZmlyc3Qgc2VnbWVudCBpcyBhIHJvb3QgKGAvYCwgYEM6L2ApIG9yIFVOQyBwYXRoIChgLy8/L0M6L2ApLlxuICAgICAqL1xuICAgIGlmIChhLmVuZHNXaXRoKHNlcGFyYXRvcikpIHtcbiAgICAgICAgcmV0dXJuIGEgKyBiO1xuICAgIH1cbiAgICByZXR1cm4gYSArIHNlcGFyYXRvciArIGI7XG59XG5leHBvcnRzLmpvaW5QYXRoU2VnbWVudHMgPSBqb2luUGF0aFNlZ21lbnRzO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29tbW9uID0gcmVxdWlyZShcIi4vY29tbW9uXCIpO1xuY2xhc3MgUmVhZGVyIHtcbiAgICBjb25zdHJ1Y3Rvcihfcm9vdCwgX3NldHRpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Jvb3QgPSBfcm9vdDtcbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBfc2V0dGluZ3M7XG4gICAgICAgIHRoaXMuX3Jvb3QgPSBjb21tb24ucmVwbGFjZVBhdGhTZWdtZW50U2VwYXJhdG9yKF9yb290LCBfc2V0dGluZ3MucGF0aFNlZ21lbnRTZXBhcmF0b3IpO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFJlYWRlcjtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGV2ZW50c18xID0gcmVxdWlyZShcImV2ZW50c1wiKTtcbmNvbnN0IGZzU2NhbmRpciA9IHJlcXVpcmUoXCJAbm9kZWxpYi9mcy5zY2FuZGlyXCIpO1xuY29uc3QgZmFzdHEgPSByZXF1aXJlKFwiZmFzdHFcIik7XG5jb25zdCBjb21tb24gPSByZXF1aXJlKFwiLi9jb21tb25cIik7XG5jb25zdCByZWFkZXJfMSA9IHJlcXVpcmUoXCIuL3JlYWRlclwiKTtcbmNsYXNzIEFzeW5jUmVhZGVyIGV4dGVuZHMgcmVhZGVyXzEuZGVmYXVsdCB7XG4gICAgY29uc3RydWN0b3IoX3Jvb3QsIF9zZXR0aW5ncykge1xuICAgICAgICBzdXBlcihfcm9vdCwgX3NldHRpbmdzKTtcbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBfc2V0dGluZ3M7XG4gICAgICAgIHRoaXMuX3NjYW5kaXIgPSBmc1NjYW5kaXIuc2NhbmRpcjtcbiAgICAgICAgdGhpcy5fZW1pdHRlciA9IG5ldyBldmVudHNfMS5FdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5fcXVldWUgPSBmYXN0cSh0aGlzLl93b3JrZXIuYmluZCh0aGlzKSwgdGhpcy5fc2V0dGluZ3MuY29uY3VycmVuY3kpO1xuICAgICAgICB0aGlzLl9pc0ZhdGFsRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcXVldWUuZHJhaW4gPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzRmF0YWxFcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXR0ZXIuZW1pdCgnZW5kJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJlYWQoKSB7XG4gICAgICAgIHRoaXMuX2lzRmF0YWxFcnJvciA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcHVzaFRvUXVldWUodGhpcy5fcm9vdCwgdGhpcy5fc2V0dGluZ3MuYmFzZVBhdGgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VtaXR0ZXI7XG4gICAgfVxuICAgIGdldCBpc0Rlc3Ryb3llZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRGVzdHJveWVkO1xuICAgIH1cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5faXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHJlYWRlciBpcyBhbHJlYWR5IGRlc3Ryb3llZCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcXVldWUua2lsbEFuZERyYWluKCk7XG4gICAgfVxuICAgIG9uRW50cnkoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5fZW1pdHRlci5vbignZW50cnknLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIG9uRXJyb3IoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5fZW1pdHRlci5vbmNlKCdlcnJvcicsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgb25FbmQoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5fZW1pdHRlci5vbmNlKCdlbmQnLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIF9wdXNoVG9RdWV1ZShkaXJlY3RvcnksIGJhc2UpIHtcbiAgICAgICAgY29uc3QgcXVldWVJdGVtID0geyBkaXJlY3RvcnksIGJhc2UgfTtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaChxdWV1ZUl0ZW0sIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgaWYgKGVycm9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3dvcmtlcihpdGVtLCBkb25lKSB7XG4gICAgICAgIHRoaXMuX3NjYW5kaXIoaXRlbS5kaXJlY3RvcnksIHRoaXMuX3NldHRpbmdzLmZzU2NhbmRpclNldHRpbmdzLCAoZXJyb3IsIGVudHJpZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRvbmUoZXJyb3IsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlRW50cnkoZW50cnksIGl0ZW0uYmFzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkb25lKG51bGwsIHVuZGVmaW5lZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfaGFuZGxlRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzRGVzdHJveWVkIHx8ICFjb21tb24uaXNGYXRhbEVycm9yKHRoaXMuX3NldHRpbmdzLCBlcnJvcikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pc0ZhdGFsRXJyb3IgPSB0cnVlO1xuICAgICAgICB0aGlzLl9pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2VtaXR0ZXIuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgfVxuICAgIF9oYW5kbGVFbnRyeShlbnRyeSwgYmFzZSkge1xuICAgICAgICBpZiAodGhpcy5faXNEZXN0cm95ZWQgfHwgdGhpcy5faXNGYXRhbEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSBlbnRyeS5wYXRoO1xuICAgICAgICBpZiAoYmFzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBlbnRyeS5wYXRoID0gY29tbW9uLmpvaW5QYXRoU2VnbWVudHMoYmFzZSwgZW50cnkubmFtZSwgdGhpcy5fc2V0dGluZ3MucGF0aFNlZ21lbnRTZXBhcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21tb24uaXNBcHBsaWVkRmlsdGVyKHRoaXMuX3NldHRpbmdzLmVudHJ5RmlsdGVyLCBlbnRyeSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRFbnRyeShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudHJ5LmRpcmVudC5pc0RpcmVjdG9yeSgpICYmIGNvbW1vbi5pc0FwcGxpZWRGaWx0ZXIodGhpcy5fc2V0dGluZ3MuZGVlcEZpbHRlciwgZW50cnkpKSB7XG4gICAgICAgICAgICB0aGlzLl9wdXNoVG9RdWV1ZShmdWxscGF0aCwgYmFzZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogZW50cnkucGF0aCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2VtaXRFbnRyeShlbnRyeSkge1xuICAgICAgICB0aGlzLl9lbWl0dGVyLmVtaXQoJ2VudHJ5JywgZW50cnkpO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IEFzeW5jUmVhZGVyO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgYXN5bmNfMSA9IHJlcXVpcmUoXCIuLi9yZWFkZXJzL2FzeW5jXCIpO1xuY2xhc3MgQXN5bmNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoX3Jvb3QsIF9zZXR0aW5ncykge1xuICAgICAgICB0aGlzLl9yb290ID0gX3Jvb3Q7XG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gX3NldHRpbmdzO1xuICAgICAgICB0aGlzLl9yZWFkZXIgPSBuZXcgYXN5bmNfMS5kZWZhdWx0KHRoaXMuX3Jvb3QsIHRoaXMuX3NldHRpbmdzKTtcbiAgICAgICAgdGhpcy5fc3RvcmFnZSA9IFtdO1xuICAgIH1cbiAgICByZWFkKGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuX3JlYWRlci5vbkVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY2FsbEZhaWx1cmVDYWxsYmFjayhjYWxsYmFjaywgZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcmVhZGVyLm9uRW50cnkoKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zdG9yYWdlLnB1c2goZW50cnkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcmVhZGVyLm9uRW5kKCgpID0+IHtcbiAgICAgICAgICAgIGNhbGxTdWNjZXNzQ2FsbGJhY2soY2FsbGJhY2ssIHRoaXMuX3N0b3JhZ2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcmVhZGVyLnJlYWQoKTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBBc3luY1Byb3ZpZGVyO1xuZnVuY3Rpb24gY2FsbEZhaWx1cmVDYWxsYmFjayhjYWxsYmFjaywgZXJyb3IpIHtcbiAgICBjYWxsYmFjayhlcnJvcik7XG59XG5mdW5jdGlvbiBjYWxsU3VjY2Vzc0NhbGxiYWNrKGNhbGxiYWNrLCBlbnRyaWVzKSB7XG4gICAgY2FsbGJhY2sobnVsbCwgZW50cmllcyk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBzdHJlYW1fMSA9IHJlcXVpcmUoXCJzdHJlYW1cIik7XG5jb25zdCBhc3luY18xID0gcmVxdWlyZShcIi4uL3JlYWRlcnMvYXN5bmNcIik7XG5jbGFzcyBTdHJlYW1Qcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoX3Jvb3QsIF9zZXR0aW5ncykge1xuICAgICAgICB0aGlzLl9yb290ID0gX3Jvb3Q7XG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gX3NldHRpbmdzO1xuICAgICAgICB0aGlzLl9yZWFkZXIgPSBuZXcgYXN5bmNfMS5kZWZhdWx0KHRoaXMuX3Jvb3QsIHRoaXMuX3NldHRpbmdzKTtcbiAgICAgICAgdGhpcy5fc3RyZWFtID0gbmV3IHN0cmVhbV8xLlJlYWRhYmxlKHtcbiAgICAgICAgICAgIG9iamVjdE1vZGU6IHRydWUsXG4gICAgICAgICAgICByZWFkOiAoKSA9PiB7IH0sXG4gICAgICAgICAgICBkZXN0cm95OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9yZWFkZXIuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGVyLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZWFkKCkge1xuICAgICAgICB0aGlzLl9yZWFkZXIub25FcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3N0cmVhbS5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3JlYWRlci5vbkVudHJ5KChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc3RyZWFtLnB1c2goZW50cnkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcmVhZGVyLm9uRW5kKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3N0cmVhbS5wdXNoKG51bGwpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcmVhZGVyLnJlYWQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmVhbTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBTdHJlYW1Qcm92aWRlcjtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGZzU2NhbmRpciA9IHJlcXVpcmUoXCJAbm9kZWxpYi9mcy5zY2FuZGlyXCIpO1xuY29uc3QgY29tbW9uID0gcmVxdWlyZShcIi4vY29tbW9uXCIpO1xuY29uc3QgcmVhZGVyXzEgPSByZXF1aXJlKFwiLi9yZWFkZXJcIik7XG5jbGFzcyBTeW5jUmVhZGVyIGV4dGVuZHMgcmVhZGVyXzEuZGVmYXVsdCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuX3NjYW5kaXIgPSBmc1NjYW5kaXIuc2NhbmRpclN5bmM7XG4gICAgICAgIHRoaXMuX3N0b3JhZ2UgPSBbXTtcbiAgICAgICAgdGhpcy5fcXVldWUgPSBuZXcgU2V0KCk7XG4gICAgfVxuICAgIHJlYWQoKSB7XG4gICAgICAgIHRoaXMuX3B1c2hUb1F1ZXVlKHRoaXMuX3Jvb3QsIHRoaXMuX3NldHRpbmdzLmJhc2VQYXRoKTtcbiAgICAgICAgdGhpcy5faGFuZGxlUXVldWUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0b3JhZ2U7XG4gICAgfVxuICAgIF9wdXNoVG9RdWV1ZShkaXJlY3RvcnksIGJhc2UpIHtcbiAgICAgICAgdGhpcy5fcXVldWUuYWRkKHsgZGlyZWN0b3J5LCBiYXNlIH0pO1xuICAgIH1cbiAgICBfaGFuZGxlUXVldWUoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLl9xdWV1ZS52YWx1ZXMoKSkge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlRGlyZWN0b3J5KGl0ZW0uZGlyZWN0b3J5LCBpdGVtLmJhc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9oYW5kbGVEaXJlY3RvcnkoZGlyZWN0b3J5LCBiYXNlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gdGhpcy5fc2NhbmRpcihkaXJlY3RvcnksIHRoaXMuX3NldHRpbmdzLmZzU2NhbmRpclNldHRpbmdzKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUVudHJ5KGVudHJ5LCBiYXNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfaGFuZGxlRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgaWYgKCFjb21tb24uaXNGYXRhbEVycm9yKHRoaXMuX3NldHRpbmdzLCBlcnJvcikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgX2hhbmRsZUVudHJ5KGVudHJ5LCBiYXNlKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gZW50cnkucGF0aDtcbiAgICAgICAgaWYgKGJhc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZW50cnkucGF0aCA9IGNvbW1vbi5qb2luUGF0aFNlZ21lbnRzKGJhc2UsIGVudHJ5Lm5hbWUsIHRoaXMuX3NldHRpbmdzLnBhdGhTZWdtZW50U2VwYXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tbW9uLmlzQXBwbGllZEZpbHRlcih0aGlzLl9zZXR0aW5ncy5lbnRyeUZpbHRlciwgZW50cnkpKSB7XG4gICAgICAgICAgICB0aGlzLl9wdXNoVG9TdG9yYWdlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW50cnkuZGlyZW50LmlzRGlyZWN0b3J5KCkgJiYgY29tbW9uLmlzQXBwbGllZEZpbHRlcih0aGlzLl9zZXR0aW5ncy5kZWVwRmlsdGVyLCBlbnRyeSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3B1c2hUb1F1ZXVlKGZ1bGxwYXRoLCBiYXNlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBlbnRyeS5wYXRoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfcHVzaFRvU3RvcmFnZShlbnRyeSkge1xuICAgICAgICB0aGlzLl9zdG9yYWdlLnB1c2goZW50cnkpO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFN5bmNSZWFkZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBzeW5jXzEgPSByZXF1aXJlKFwiLi4vcmVhZGVycy9zeW5jXCIpO1xuY2xhc3MgU3luY1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3Rvcihfcm9vdCwgX3NldHRpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Jvb3QgPSBfcm9vdDtcbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBfc2V0dGluZ3M7XG4gICAgICAgIHRoaXMuX3JlYWRlciA9IG5ldyBzeW5jXzEuZGVmYXVsdCh0aGlzLl9yb290LCB0aGlzLl9zZXR0aW5ncyk7XG4gICAgfVxuICAgIHJlYWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWFkZXIucmVhZCgpO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFN5bmNQcm92aWRlcjtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcbmNvbnN0IGZzU2NhbmRpciA9IHJlcXVpcmUoXCJAbm9kZWxpYi9mcy5zY2FuZGlyXCIpO1xuY2xhc3MgU2V0dGluZ3Mge1xuICAgIGNvbnN0cnVjdG9yKF9vcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuICAgICAgICB0aGlzLmJhc2VQYXRoID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5iYXNlUGF0aCwgdW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy5jb25jdXJyZW5jeSA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMuY29uY3VycmVuY3ksIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7XG4gICAgICAgIHRoaXMuZGVlcEZpbHRlciA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMuZGVlcEZpbHRlciwgbnVsbCk7XG4gICAgICAgIHRoaXMuZW50cnlGaWx0ZXIgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLmVudHJ5RmlsdGVyLCBudWxsKTtcbiAgICAgICAgdGhpcy5lcnJvckZpbHRlciA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMuZXJyb3JGaWx0ZXIsIG51bGwpO1xuICAgICAgICB0aGlzLnBhdGhTZWdtZW50U2VwYXJhdG9yID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5wYXRoU2VnbWVudFNlcGFyYXRvciwgcGF0aC5zZXApO1xuICAgICAgICB0aGlzLmZzU2NhbmRpclNldHRpbmdzID0gbmV3IGZzU2NhbmRpci5TZXR0aW5ncyh7XG4gICAgICAgICAgICBmb2xsb3dTeW1ib2xpY0xpbmtzOiB0aGlzLl9vcHRpb25zLmZvbGxvd1N5bWJvbGljTGlua3MsXG4gICAgICAgICAgICBmczogdGhpcy5fb3B0aW9ucy5mcyxcbiAgICAgICAgICAgIHBhdGhTZWdtZW50U2VwYXJhdG9yOiB0aGlzLl9vcHRpb25zLnBhdGhTZWdtZW50U2VwYXJhdG9yLFxuICAgICAgICAgICAgc3RhdHM6IHRoaXMuX29wdGlvbnMuc3RhdHMsXG4gICAgICAgICAgICB0aHJvd0Vycm9yT25Ccm9rZW5TeW1ib2xpY0xpbms6IHRoaXMuX29wdGlvbnMudGhyb3dFcnJvck9uQnJva2VuU3ltYm9saWNMaW5rXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfZ2V0VmFsdWUob3B0aW9uLCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gb3B0aW9uICE9PSBudWxsICYmIG9wdGlvbiAhPT0gdm9pZCAwID8gb3B0aW9uIDogdmFsdWU7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gU2V0dGluZ3M7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNldHRpbmdzID0gZXhwb3J0cy53YWxrU3RyZWFtID0gZXhwb3J0cy53YWxrU3luYyA9IGV4cG9ydHMud2FsayA9IHZvaWQgMDtcbmNvbnN0IGFzeW5jXzEgPSByZXF1aXJlKFwiLi9wcm92aWRlcnMvYXN5bmNcIik7XG5jb25zdCBzdHJlYW1fMSA9IHJlcXVpcmUoXCIuL3Byb3ZpZGVycy9zdHJlYW1cIik7XG5jb25zdCBzeW5jXzEgPSByZXF1aXJlKFwiLi9wcm92aWRlcnMvc3luY1wiKTtcbmNvbnN0IHNldHRpbmdzXzEgPSByZXF1aXJlKFwiLi9zZXR0aW5nc1wiKTtcbmV4cG9ydHMuU2V0dGluZ3MgPSBzZXR0aW5nc18xLmRlZmF1bHQ7XG5mdW5jdGlvbiB3YWxrKGRpcmVjdG9yeSwgb3B0aW9uc09yU2V0dGluZ3NPckNhbGxiYWNrLCBjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yU2V0dGluZ3NPckNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG5ldyBhc3luY18xLmRlZmF1bHQoZGlyZWN0b3J5LCBnZXRTZXR0aW5ncygpKS5yZWFkKG9wdGlvbnNPclNldHRpbmdzT3JDYWxsYmFjayk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbmV3IGFzeW5jXzEuZGVmYXVsdChkaXJlY3RvcnksIGdldFNldHRpbmdzKG9wdGlvbnNPclNldHRpbmdzT3JDYWxsYmFjaykpLnJlYWQoY2FsbGJhY2spO1xufVxuZXhwb3J0cy53YWxrID0gd2FsaztcbmZ1bmN0aW9uIHdhbGtTeW5jKGRpcmVjdG9yeSwgb3B0aW9uc09yU2V0dGluZ3MpIHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IGdldFNldHRpbmdzKG9wdGlvbnNPclNldHRpbmdzKTtcbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBzeW5jXzEuZGVmYXVsdChkaXJlY3RvcnksIHNldHRpbmdzKTtcbiAgICByZXR1cm4gcHJvdmlkZXIucmVhZCgpO1xufVxuZXhwb3J0cy53YWxrU3luYyA9IHdhbGtTeW5jO1xuZnVuY3Rpb24gd2Fsa1N0cmVhbShkaXJlY3RvcnksIG9wdGlvbnNPclNldHRpbmdzKSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncyhvcHRpb25zT3JTZXR0aW5ncyk7XG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgc3RyZWFtXzEuZGVmYXVsdChkaXJlY3RvcnksIHNldHRpbmdzKTtcbiAgICByZXR1cm4gcHJvdmlkZXIucmVhZCgpO1xufVxuZXhwb3J0cy53YWxrU3RyZWFtID0gd2Fsa1N0cmVhbTtcbmZ1bmN0aW9uIGdldFNldHRpbmdzKHNldHRpbmdzT3JPcHRpb25zID0ge30pIHtcbiAgICBpZiAoc2V0dGluZ3NPck9wdGlvbnMgaW5zdGFuY2VvZiBzZXR0aW5nc18xLmRlZmF1bHQpIHtcbiAgICAgICAgcmV0dXJuIHNldHRpbmdzT3JPcHRpb25zO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IHNldHRpbmdzXzEuZGVmYXVsdChzZXR0aW5nc09yT3B0aW9ucyk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XG5jb25zdCBmc1N0YXQgPSByZXF1aXJlKFwiQG5vZGVsaWIvZnMuc3RhdFwiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpO1xuY2xhc3MgUmVhZGVyIHtcbiAgICBjb25zdHJ1Y3Rvcihfc2V0dGluZ3MpIHtcbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBfc2V0dGluZ3M7XG4gICAgICAgIHRoaXMuX2ZzU3RhdFNldHRpbmdzID0gbmV3IGZzU3RhdC5TZXR0aW5ncyh7XG4gICAgICAgICAgICBmb2xsb3dTeW1ib2xpY0xpbms6IHRoaXMuX3NldHRpbmdzLmZvbGxvd1N5bWJvbGljTGlua3MsXG4gICAgICAgICAgICBmczogdGhpcy5fc2V0dGluZ3MuZnMsXG4gICAgICAgICAgICB0aHJvd0Vycm9yT25Ccm9rZW5TeW1ib2xpY0xpbms6IHRoaXMuX3NldHRpbmdzLmZvbGxvd1N5bWJvbGljTGlua3NcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9nZXRGdWxsRW50cnlQYXRoKGZpbGVwYXRoKSB7XG4gICAgICAgIHJldHVybiBwYXRoLnJlc29sdmUodGhpcy5fc2V0dGluZ3MuY3dkLCBmaWxlcGF0aCk7XG4gICAgfVxuICAgIF9tYWtlRW50cnkoc3RhdHMsIHBhdHRlcm4pIHtcbiAgICAgICAgY29uc3QgZW50cnkgPSB7XG4gICAgICAgICAgICBuYW1lOiBwYXR0ZXJuLFxuICAgICAgICAgICAgcGF0aDogcGF0dGVybixcbiAgICAgICAgICAgIGRpcmVudDogdXRpbHMuZnMuY3JlYXRlRGlyZW50RnJvbVN0YXRzKHBhdHRlcm4sIHN0YXRzKVxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3Muc3RhdHMpIHtcbiAgICAgICAgICAgIGVudHJ5LnN0YXRzID0gc3RhdHM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgIH1cbiAgICBfaXNGYXRhbEVycm9yKGVycm9yKSB7XG4gICAgICAgIHJldHVybiAhdXRpbHMuZXJybm8uaXNFbm9lbnRDb2RlRXJyb3IoZXJyb3IpICYmICF0aGlzLl9zZXR0aW5ncy5zdXBwcmVzc0Vycm9ycztcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBSZWFkZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBzdHJlYW1fMSA9IHJlcXVpcmUoXCJzdHJlYW1cIik7XG5jb25zdCBmc1N0YXQgPSByZXF1aXJlKFwiQG5vZGVsaWIvZnMuc3RhdFwiKTtcbmNvbnN0IGZzV2FsayA9IHJlcXVpcmUoXCJAbm9kZWxpYi9mcy53YWxrXCIpO1xuY29uc3QgcmVhZGVyXzEgPSByZXF1aXJlKFwiLi9yZWFkZXJcIik7XG5jbGFzcyBSZWFkZXJTdHJlYW0gZXh0ZW5kcyByZWFkZXJfMS5kZWZhdWx0IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5fd2Fsa1N0cmVhbSA9IGZzV2Fsay53YWxrU3RyZWFtO1xuICAgICAgICB0aGlzLl9zdGF0ID0gZnNTdGF0LnN0YXQ7XG4gICAgfVxuICAgIGR5bmFtaWMocm9vdCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Fsa1N0cmVhbShyb290LCBvcHRpb25zKTtcbiAgICB9XG4gICAgc3RhdGljKHBhdHRlcm5zLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGZpbGVwYXRocyA9IHBhdHRlcm5zLm1hcCh0aGlzLl9nZXRGdWxsRW50cnlQYXRoLCB0aGlzKTtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gbmV3IHN0cmVhbV8xLlBhc3NUaHJvdWdoKHsgb2JqZWN0TW9kZTogdHJ1ZSB9KTtcbiAgICAgICAgc3RyZWFtLl93cml0ZSA9IChpbmRleCwgX2VuYywgZG9uZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJ5KGZpbGVwYXRoc1tpbmRleF0sIHBhdHRlcm5zW2luZGV4XSwgb3B0aW9ucylcbiAgICAgICAgICAgICAgICAudGhlbigoZW50cnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkgIT09IG51bGwgJiYgb3B0aW9ucy5lbnRyeUZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnB1c2goZW50cnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IGZpbGVwYXRocy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbS5lbmQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZG9uZSk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXBhdGhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzdHJlYW0ud3JpdGUoaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cmVhbTtcbiAgICB9XG4gICAgX2dldEVudHJ5KGZpbGVwYXRoLCBwYXR0ZXJuLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRTdGF0KGZpbGVwYXRoKVxuICAgICAgICAgICAgLnRoZW4oKHN0YXRzKSA9PiB0aGlzLl9tYWtlRW50cnkoc3RhdHMsIHBhdHRlcm4pKVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZXJyb3JGaWx0ZXIoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9nZXRTdGF0KGZpbGVwYXRoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0KGZpbGVwYXRoLCB0aGlzLl9mc1N0YXRTZXR0aW5ncywgKGVycm9yLCBzdGF0cykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvciA9PT0gbnVsbCA/IHJlc29sdmUoc3RhdHMpIDogcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBSZWFkZXJTdHJlYW07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBmc1dhbGsgPSByZXF1aXJlKFwiQG5vZGVsaWIvZnMud2Fsa1wiKTtcbmNvbnN0IHJlYWRlcl8xID0gcmVxdWlyZShcIi4vcmVhZGVyXCIpO1xuY29uc3Qgc3RyZWFtXzEgPSByZXF1aXJlKFwiLi9zdHJlYW1cIik7XG5jbGFzcyBSZWFkZXJBc3luYyBleHRlbmRzIHJlYWRlcl8xLmRlZmF1bHQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLl93YWxrQXN5bmMgPSBmc1dhbGsud2FsaztcbiAgICAgICAgdGhpcy5fcmVhZGVyU3RyZWFtID0gbmV3IHN0cmVhbV8xLmRlZmF1bHQodGhpcy5fc2V0dGluZ3MpO1xuICAgIH1cbiAgICBkeW5hbWljKHJvb3QsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3dhbGtBc3luYyhyb290LCBvcHRpb25zLCAoZXJyb3IsIGVudHJpZXMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlbnRyaWVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBzdGF0aWMocGF0dGVybnMsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IFtdO1xuICAgICAgICBjb25zdCBzdHJlYW0gPSB0aGlzLl9yZWFkZXJTdHJlYW0uc3RhdGljKHBhdHRlcm5zLCBvcHRpb25zKTtcbiAgICAgICAgLy8gQWZ0ZXIgIzIzNSwgcmVwbGFjZSBpdCB3aXRoIGFuIGFzeW5jaHJvbm91cyBpdGVyYXRvci5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHN0cmVhbS5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICAgICAgICBzdHJlYW0ub24oJ2RhdGEnLCAoZW50cnkpID0+IGVudHJpZXMucHVzaChlbnRyeSkpO1xuICAgICAgICAgICAgc3RyZWFtLm9uY2UoJ2VuZCcsICgpID0+IHJlc29sdmUoZW50cmllcykpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBSZWFkZXJBc3luYztcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzXCIpO1xuY2xhc3MgTWF0Y2hlciB7XG4gICAgY29uc3RydWN0b3IoX3BhdHRlcm5zLCBfc2V0dGluZ3MsIF9taWNyb21hdGNoT3B0aW9ucykge1xuICAgICAgICB0aGlzLl9wYXR0ZXJucyA9IF9wYXR0ZXJucztcbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBfc2V0dGluZ3M7XG4gICAgICAgIHRoaXMuX21pY3JvbWF0Y2hPcHRpb25zID0gX21pY3JvbWF0Y2hPcHRpb25zO1xuICAgICAgICB0aGlzLl9zdG9yYWdlID0gW107XG4gICAgICAgIHRoaXMuX2ZpbGxTdG9yYWdlKCk7XG4gICAgfVxuICAgIF9maWxsU3RvcmFnZSgpIHtcbiAgICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHRoaXMuX3BhdHRlcm5zKSB7XG4gICAgICAgICAgICBjb25zdCBzZWdtZW50cyA9IHRoaXMuX2dldFBhdHRlcm5TZWdtZW50cyhwYXR0ZXJuKTtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25zID0gdGhpcy5fc3BsaXRTZWdtZW50c0ludG9TZWN0aW9ucyhzZWdtZW50cyk7XG4gICAgICAgICAgICB0aGlzLl9zdG9yYWdlLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBzZWN0aW9ucy5sZW5ndGggPD0gMSxcbiAgICAgICAgICAgICAgICBwYXR0ZXJuLFxuICAgICAgICAgICAgICAgIHNlZ21lbnRzLFxuICAgICAgICAgICAgICAgIHNlY3Rpb25zXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfZ2V0UGF0dGVyblNlZ21lbnRzKHBhdHRlcm4pIHtcbiAgICAgICAgY29uc3QgcGFydHMgPSB1dGlscy5wYXR0ZXJuLmdldFBhdHRlcm5QYXJ0cyhwYXR0ZXJuLCB0aGlzLl9taWNyb21hdGNoT3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBwYXJ0cy5tYXAoKHBhcnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGR5bmFtaWMgPSB1dGlscy5wYXR0ZXJuLmlzRHluYW1pY1BhdHRlcm4ocGFydCwgdGhpcy5fc2V0dGluZ3MpO1xuICAgICAgICAgICAgaWYgKCFkeW5hbWljKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm46IHBhcnRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkeW5hbWljOiB0cnVlLFxuICAgICAgICAgICAgICAgIHBhdHRlcm46IHBhcnQsXG4gICAgICAgICAgICAgICAgcGF0dGVyblJlOiB1dGlscy5wYXR0ZXJuLm1ha2VSZShwYXJ0LCB0aGlzLl9taWNyb21hdGNoT3B0aW9ucylcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfc3BsaXRTZWdtZW50c0ludG9TZWN0aW9ucyhzZWdtZW50cykge1xuICAgICAgICByZXR1cm4gdXRpbHMuYXJyYXkuc3BsaXRXaGVuKHNlZ21lbnRzLCAoc2VnbWVudCkgPT4gc2VnbWVudC5keW5hbWljICYmIHV0aWxzLnBhdHRlcm4uaGFzR2xvYlN0YXIoc2VnbWVudC5wYXR0ZXJuKSk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gTWF0Y2hlcjtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IG1hdGNoZXJfMSA9IHJlcXVpcmUoXCIuL21hdGNoZXJcIik7XG5jbGFzcyBQYXJ0aWFsTWF0Y2hlciBleHRlbmRzIG1hdGNoZXJfMS5kZWZhdWx0IHtcbiAgICBtYXRjaChmaWxlcGF0aCkge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IGZpbGVwYXRoLnNwbGl0KCcvJyk7XG4gICAgICAgIGNvbnN0IGxldmVscyA9IHBhcnRzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcGF0dGVybnMgPSB0aGlzLl9zdG9yYWdlLmZpbHRlcigoaW5mbykgPT4gIWluZm8uY29tcGxldGUgfHwgaW5mby5zZWdtZW50cy5sZW5ndGggPiBsZXZlbHMpO1xuICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb24gPSBwYXR0ZXJuLnNlY3Rpb25zWzBdO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJbiB0aGlzIGNhc2UsIHRoZSBwYXR0ZXJuIGhhcyBhIGdsb2JzdGFyIGFuZCB3ZSBtdXN0IHJlYWQgYWxsIGRpcmVjdG9yaWVzIHVuY29uZGl0aW9uYWxseSxcbiAgICAgICAgICAgICAqIGJ1dCBvbmx5IGlmIHRoZSBsZXZlbCBoYXMgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBmaXJzdCBncm91cC5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBmaXh0dXJlcy97YSxifS8qKlxuICAgICAgICAgICAgICogIF4gdHJ1ZS9mYWxzZSAgXiBhbHdheXMgdHJ1ZVxuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICghcGF0dGVybi5jb21wbGV0ZSAmJiBsZXZlbHMgPiBzZWN0aW9uLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBwYXJ0cy5ldmVyeSgocGFydCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWdtZW50ID0gcGF0dGVybi5zZWdtZW50c1tpbmRleF07XG4gICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQuZHluYW1pYyAmJiBzZWdtZW50LnBhdHRlcm5SZS50ZXN0KHBhcnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXNlZ21lbnQuZHluYW1pYyAmJiBzZWdtZW50LnBhdHRlcm4gPT09IHBhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFBhcnRpYWxNYXRjaGVyO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHNcIik7XG5jb25zdCBwYXJ0aWFsXzEgPSByZXF1aXJlKFwiLi4vbWF0Y2hlcnMvcGFydGlhbFwiKTtcbmNsYXNzIERlZXBGaWx0ZXIge1xuICAgIGNvbnN0cnVjdG9yKF9zZXR0aW5ncywgX21pY3JvbWF0Y2hPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gX3NldHRpbmdzO1xuICAgICAgICB0aGlzLl9taWNyb21hdGNoT3B0aW9ucyA9IF9taWNyb21hdGNoT3B0aW9ucztcbiAgICB9XG4gICAgZ2V0RmlsdGVyKGJhc2VQYXRoLCBwb3NpdGl2ZSwgbmVnYXRpdmUpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlciA9IHRoaXMuX2dldE1hdGNoZXIocG9zaXRpdmUpO1xuICAgICAgICBjb25zdCBuZWdhdGl2ZVJlID0gdGhpcy5fZ2V0TmVnYXRpdmVQYXR0ZXJuc1JlKG5lZ2F0aXZlKTtcbiAgICAgICAgcmV0dXJuIChlbnRyeSkgPT4gdGhpcy5fZmlsdGVyKGJhc2VQYXRoLCBlbnRyeSwgbWF0Y2hlciwgbmVnYXRpdmVSZSk7XG4gICAgfVxuICAgIF9nZXRNYXRjaGVyKHBhdHRlcm5zKSB7XG4gICAgICAgIHJldHVybiBuZXcgcGFydGlhbF8xLmRlZmF1bHQocGF0dGVybnMsIHRoaXMuX3NldHRpbmdzLCB0aGlzLl9taWNyb21hdGNoT3B0aW9ucyk7XG4gICAgfVxuICAgIF9nZXROZWdhdGl2ZVBhdHRlcm5zUmUocGF0dGVybnMpIHtcbiAgICAgICAgY29uc3QgYWZmZWN0RGVwdGhPZlJlYWRpbmdQYXR0ZXJucyA9IHBhdHRlcm5zLmZpbHRlcih1dGlscy5wYXR0ZXJuLmlzQWZmZWN0RGVwdGhPZlJlYWRpbmdQYXR0ZXJuKTtcbiAgICAgICAgcmV0dXJuIHV0aWxzLnBhdHRlcm4uY29udmVydFBhdHRlcm5zVG9SZShhZmZlY3REZXB0aE9mUmVhZGluZ1BhdHRlcm5zLCB0aGlzLl9taWNyb21hdGNoT3B0aW9ucyk7XG4gICAgfVxuICAgIF9maWx0ZXIoYmFzZVBhdGgsIGVudHJ5LCBtYXRjaGVyLCBuZWdhdGl2ZVJlKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc1NraXBwZWRCeURlZXAoYmFzZVBhdGgsIGVudHJ5LnBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lzU2tpcHBlZFN5bWJvbGljTGluayhlbnRyeSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWxlcGF0aCA9IHV0aWxzLnBhdGgucmVtb3ZlTGVhZGluZ0RvdFNlZ21lbnQoZW50cnkucGF0aCk7XG4gICAgICAgIGlmICh0aGlzLl9pc1NraXBwZWRCeVBvc2l0aXZlUGF0dGVybnMoZmlsZXBhdGgsIG1hdGNoZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzU2tpcHBlZEJ5TmVnYXRpdmVQYXR0ZXJucyhmaWxlcGF0aCwgbmVnYXRpdmVSZSk7XG4gICAgfVxuICAgIF9pc1NraXBwZWRCeURlZXAoYmFzZVBhdGgsIGVudHJ5UGF0aCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogQXZvaWQgdW5uZWNlc3NhcnkgZGVwdGggY2FsY3VsYXRpb25zIHdoZW4gaXQgZG9lc24ndCBtYXR0ZXIuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3MuZGVlcCA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cnlMZXZlbChiYXNlUGF0aCwgZW50cnlQYXRoKSA+PSB0aGlzLl9zZXR0aW5ncy5kZWVwO1xuICAgIH1cbiAgICBfZ2V0RW50cnlMZXZlbChiYXNlUGF0aCwgZW50cnlQYXRoKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5UGF0aERlcHRoID0gZW50cnlQYXRoLnNwbGl0KCcvJykubGVuZ3RoO1xuICAgICAgICBpZiAoYmFzZVBhdGggPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gZW50cnlQYXRoRGVwdGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmFzZVBhdGhEZXB0aCA9IGJhc2VQYXRoLnNwbGl0KCcvJykubGVuZ3RoO1xuICAgICAgICByZXR1cm4gZW50cnlQYXRoRGVwdGggLSBiYXNlUGF0aERlcHRoO1xuICAgIH1cbiAgICBfaXNTa2lwcGVkU3ltYm9saWNMaW5rKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5fc2V0dGluZ3MuZm9sbG93U3ltYm9saWNMaW5rcyAmJiBlbnRyeS5kaXJlbnQuaXNTeW1ib2xpY0xpbmsoKTtcbiAgICB9XG4gICAgX2lzU2tpcHBlZEJ5UG9zaXRpdmVQYXR0ZXJucyhlbnRyeVBhdGgsIG1hdGNoZXIpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLl9zZXR0aW5ncy5iYXNlTmFtZU1hdGNoICYmICFtYXRjaGVyLm1hdGNoKGVudHJ5UGF0aCk7XG4gICAgfVxuICAgIF9pc1NraXBwZWRCeU5lZ2F0aXZlUGF0dGVybnMoZW50cnlQYXRoLCBwYXR0ZXJuc1JlKSB7XG4gICAgICAgIHJldHVybiAhdXRpbHMucGF0dGVybi5tYXRjaEFueShlbnRyeVBhdGgsIHBhdHRlcm5zUmUpO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IERlZXBGaWx0ZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKTtcbmNsYXNzIEVudHJ5RmlsdGVyIHtcbiAgICBjb25zdHJ1Y3Rvcihfc2V0dGluZ3MsIF9taWNyb21hdGNoT3B0aW9ucykge1xuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IF9zZXR0aW5ncztcbiAgICAgICAgdGhpcy5fbWljcm9tYXRjaE9wdGlvbnMgPSBfbWljcm9tYXRjaE9wdGlvbnM7XG4gICAgICAgIHRoaXMuaW5kZXggPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIGdldEZpbHRlcihwb3NpdGl2ZSwgbmVnYXRpdmUpIHtcbiAgICAgICAgY29uc3QgcG9zaXRpdmVSZSA9IHV0aWxzLnBhdHRlcm4uY29udmVydFBhdHRlcm5zVG9SZShwb3NpdGl2ZSwgdGhpcy5fbWljcm9tYXRjaE9wdGlvbnMpO1xuICAgICAgICBjb25zdCBuZWdhdGl2ZVJlID0gdXRpbHMucGF0dGVybi5jb252ZXJ0UGF0dGVybnNUb1JlKG5lZ2F0aXZlLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX21pY3JvbWF0Y2hPcHRpb25zKSwgeyBkb3Q6IHRydWUgfSkpO1xuICAgICAgICByZXR1cm4gKGVudHJ5KSA9PiB0aGlzLl9maWx0ZXIoZW50cnksIHBvc2l0aXZlUmUsIG5lZ2F0aXZlUmUpO1xuICAgIH1cbiAgICBfZmlsdGVyKGVudHJ5LCBwb3NpdGl2ZVJlLCBuZWdhdGl2ZVJlKSB7XG4gICAgICAgIGNvbnN0IGZpbGVwYXRoID0gdXRpbHMucGF0aC5yZW1vdmVMZWFkaW5nRG90U2VnbWVudChlbnRyeS5wYXRoKTtcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLnVuaXF1ZSAmJiB0aGlzLl9pc0R1cGxpY2F0ZUVudHJ5KGZpbGVwYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9vbmx5RmlsZUZpbHRlcihlbnRyeSkgfHwgdGhpcy5fb25seURpcmVjdG9yeUZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5faXNTa2lwcGVkQnlBYnNvbHV0ZU5lZ2F0aXZlUGF0dGVybnMoZmlsZXBhdGgsIG5lZ2F0aXZlUmUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNEaXJlY3RvcnkgPSBlbnRyeS5kaXJlbnQuaXNEaXJlY3RvcnkoKTtcbiAgICAgICAgY29uc3QgaXNNYXRjaGVkID0gdGhpcy5faXNNYXRjaFRvUGF0dGVybnMoZmlsZXBhdGgsIHBvc2l0aXZlUmUsIGlzRGlyZWN0b3J5KSAmJiAhdGhpcy5faXNNYXRjaFRvUGF0dGVybnMoZmlsZXBhdGgsIG5lZ2F0aXZlUmUsIGlzRGlyZWN0b3J5KTtcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLnVuaXF1ZSAmJiBpc01hdGNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUluZGV4UmVjb3JkKGZpbGVwYXRoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNNYXRjaGVkO1xuICAgIH1cbiAgICBfaXNEdXBsaWNhdGVFbnRyeShmaWxlcGF0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleC5oYXMoZmlsZXBhdGgpO1xuICAgIH1cbiAgICBfY3JlYXRlSW5kZXhSZWNvcmQoZmlsZXBhdGgpIHtcbiAgICAgICAgdGhpcy5pbmRleC5zZXQoZmlsZXBhdGgsIHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIF9vbmx5RmlsZUZpbHRlcihlbnRyeSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3Mub25seUZpbGVzICYmICFlbnRyeS5kaXJlbnQuaXNGaWxlKCk7XG4gICAgfVxuICAgIF9vbmx5RGlyZWN0b3J5RmlsdGVyKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5vbmx5RGlyZWN0b3JpZXMgJiYgIWVudHJ5LmRpcmVudC5pc0RpcmVjdG9yeSgpO1xuICAgIH1cbiAgICBfaXNTa2lwcGVkQnlBYnNvbHV0ZU5lZ2F0aXZlUGF0dGVybnMoZW50cnlQYXRoLCBwYXR0ZXJuc1JlKSB7XG4gICAgICAgIGlmICghdGhpcy5fc2V0dGluZ3MuYWJzb2x1dGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmdWxscGF0aCA9IHV0aWxzLnBhdGgubWFrZUFic29sdXRlKHRoaXMuX3NldHRpbmdzLmN3ZCwgZW50cnlQYXRoKTtcbiAgICAgICAgcmV0dXJuIHV0aWxzLnBhdHRlcm4ubWF0Y2hBbnkoZnVsbHBhdGgsIHBhdHRlcm5zUmUpO1xuICAgIH1cbiAgICBfaXNNYXRjaFRvUGF0dGVybnMoZmlsZXBhdGgsIHBhdHRlcm5zUmUsIGlzRGlyZWN0b3J5KSB7XG4gICAgICAgIC8vIFRyeWluZyB0byBtYXRjaCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgYnkgcGF0dGVybnMuXG4gICAgICAgIGNvbnN0IGlzTWF0Y2hlZCA9IHV0aWxzLnBhdHRlcm4ubWF0Y2hBbnkoZmlsZXBhdGgsIHBhdHRlcm5zUmUpO1xuICAgICAgICAvLyBBIHBhdHRlcm4gd2l0aCBhIHRyYWlsbGluZyBzbGFzaCBjYW4gYmUgdXNlZCBmb3IgZGlyZWN0b3J5IG1hdGNoaW5nLlxuICAgICAgICAvLyBUbyBhcHBseSBzdWNoIHBhdHRlcm4sIHdlIG5lZWQgdG8gYWRkIGEgdHJhbGxpbmcgc2xhc2ggdG8gdGhlIHBhdGguXG4gICAgICAgIGlmICghaXNNYXRjaGVkICYmIGlzRGlyZWN0b3J5KSB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbHMucGF0dGVybi5tYXRjaEFueShmaWxlcGF0aCArICcvJywgcGF0dGVybnNSZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzTWF0Y2hlZDtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBFbnRyeUZpbHRlcjtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzXCIpO1xuY2xhc3MgRXJyb3JGaWx0ZXIge1xuICAgIGNvbnN0cnVjdG9yKF9zZXR0aW5ncykge1xuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IF9zZXR0aW5ncztcbiAgICB9XG4gICAgZ2V0RmlsdGVyKCkge1xuICAgICAgICByZXR1cm4gKGVycm9yKSA9PiB0aGlzLl9pc05vbkZhdGFsRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgICBfaXNOb25GYXRhbEVycm9yKGVycm9yKSB7XG4gICAgICAgIHJldHVybiB1dGlscy5lcnJuby5pc0Vub2VudENvZGVFcnJvcihlcnJvcikgfHwgdGhpcy5fc2V0dGluZ3Muc3VwcHJlc3NFcnJvcnM7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gRXJyb3JGaWx0ZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKTtcbmNsYXNzIEVudHJ5VHJhbnNmb3JtZXIge1xuICAgIGNvbnN0cnVjdG9yKF9zZXR0aW5ncykge1xuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IF9zZXR0aW5ncztcbiAgICB9XG4gICAgZ2V0VHJhbnNmb3JtZXIoKSB7XG4gICAgICAgIHJldHVybiAoZW50cnkpID0+IHRoaXMuX3RyYW5zZm9ybShlbnRyeSk7XG4gICAgfVxuICAgIF90cmFuc2Zvcm0oZW50cnkpIHtcbiAgICAgICAgbGV0IGZpbGVwYXRoID0gZW50cnkucGF0aDtcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLmFic29sdXRlKSB7XG4gICAgICAgICAgICBmaWxlcGF0aCA9IHV0aWxzLnBhdGgubWFrZUFic29sdXRlKHRoaXMuX3NldHRpbmdzLmN3ZCwgZmlsZXBhdGgpO1xuICAgICAgICAgICAgZmlsZXBhdGggPSB1dGlscy5wYXRoLnVuaXhpZnkoZmlsZXBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy5tYXJrRGlyZWN0b3JpZXMgJiYgZW50cnkuZGlyZW50LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgIGZpbGVwYXRoICs9ICcvJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX3NldHRpbmdzLm9iamVjdE1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWxlcGF0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBlbnRyeSksIHsgcGF0aDogZmlsZXBhdGggfSk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gRW50cnlUcmFuc2Zvcm1lcjtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcbmNvbnN0IGRlZXBfMSA9IHJlcXVpcmUoXCIuL2ZpbHRlcnMvZGVlcFwiKTtcbmNvbnN0IGVudHJ5XzEgPSByZXF1aXJlKFwiLi9maWx0ZXJzL2VudHJ5XCIpO1xuY29uc3QgZXJyb3JfMSA9IHJlcXVpcmUoXCIuL2ZpbHRlcnMvZXJyb3JcIik7XG5jb25zdCBlbnRyeV8yID0gcmVxdWlyZShcIi4vdHJhbnNmb3JtZXJzL2VudHJ5XCIpO1xuY2xhc3MgUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKF9zZXR0aW5ncykge1xuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IF9zZXR0aW5ncztcbiAgICAgICAgdGhpcy5lcnJvckZpbHRlciA9IG5ldyBlcnJvcl8xLmRlZmF1bHQodGhpcy5fc2V0dGluZ3MpO1xuICAgICAgICB0aGlzLmVudHJ5RmlsdGVyID0gbmV3IGVudHJ5XzEuZGVmYXVsdCh0aGlzLl9zZXR0aW5ncywgdGhpcy5fZ2V0TWljcm9tYXRjaE9wdGlvbnMoKSk7XG4gICAgICAgIHRoaXMuZGVlcEZpbHRlciA9IG5ldyBkZWVwXzEuZGVmYXVsdCh0aGlzLl9zZXR0aW5ncywgdGhpcy5fZ2V0TWljcm9tYXRjaE9wdGlvbnMoKSk7XG4gICAgICAgIHRoaXMuZW50cnlUcmFuc2Zvcm1lciA9IG5ldyBlbnRyeV8yLmRlZmF1bHQodGhpcy5fc2V0dGluZ3MpO1xuICAgIH1cbiAgICBfZ2V0Um9vdERpcmVjdG9yeSh0YXNrKSB7XG4gICAgICAgIHJldHVybiBwYXRoLnJlc29sdmUodGhpcy5fc2V0dGluZ3MuY3dkLCB0YXNrLmJhc2UpO1xuICAgIH1cbiAgICBfZ2V0UmVhZGVyT3B0aW9ucyh0YXNrKSB7XG4gICAgICAgIGNvbnN0IGJhc2VQYXRoID0gdGFzay5iYXNlID09PSAnLicgPyAnJyA6IHRhc2suYmFzZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJhc2VQYXRoLFxuICAgICAgICAgICAgcGF0aFNlZ21lbnRTZXBhcmF0b3I6ICcvJyxcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiB0aGlzLl9zZXR0aW5ncy5jb25jdXJyZW5jeSxcbiAgICAgICAgICAgIGRlZXBGaWx0ZXI6IHRoaXMuZGVlcEZpbHRlci5nZXRGaWx0ZXIoYmFzZVBhdGgsIHRhc2sucG9zaXRpdmUsIHRhc2submVnYXRpdmUpLFxuICAgICAgICAgICAgZW50cnlGaWx0ZXI6IHRoaXMuZW50cnlGaWx0ZXIuZ2V0RmlsdGVyKHRhc2sucG9zaXRpdmUsIHRhc2submVnYXRpdmUpLFxuICAgICAgICAgICAgZXJyb3JGaWx0ZXI6IHRoaXMuZXJyb3JGaWx0ZXIuZ2V0RmlsdGVyKCksXG4gICAgICAgICAgICBmb2xsb3dTeW1ib2xpY0xpbmtzOiB0aGlzLl9zZXR0aW5ncy5mb2xsb3dTeW1ib2xpY0xpbmtzLFxuICAgICAgICAgICAgZnM6IHRoaXMuX3NldHRpbmdzLmZzLFxuICAgICAgICAgICAgc3RhdHM6IHRoaXMuX3NldHRpbmdzLnN0YXRzLFxuICAgICAgICAgICAgdGhyb3dFcnJvck9uQnJva2VuU3ltYm9saWNMaW5rOiB0aGlzLl9zZXR0aW5ncy50aHJvd0Vycm9yT25Ccm9rZW5TeW1ib2xpY0xpbmssXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRoaXMuZW50cnlUcmFuc2Zvcm1lci5nZXRUcmFuc2Zvcm1lcigpXG4gICAgICAgIH07XG4gICAgfVxuICAgIF9nZXRNaWNyb21hdGNoT3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRvdDogdGhpcy5fc2V0dGluZ3MuZG90LFxuICAgICAgICAgICAgbWF0Y2hCYXNlOiB0aGlzLl9zZXR0aW5ncy5iYXNlTmFtZU1hdGNoLFxuICAgICAgICAgICAgbm9icmFjZTogIXRoaXMuX3NldHRpbmdzLmJyYWNlRXhwYW5zaW9uLFxuICAgICAgICAgICAgbm9jYXNlOiAhdGhpcy5fc2V0dGluZ3MuY2FzZVNlbnNpdGl2ZU1hdGNoLFxuICAgICAgICAgICAgbm9leHQ6ICF0aGlzLl9zZXR0aW5ncy5leHRnbG9iLFxuICAgICAgICAgICAgbm9nbG9ic3RhcjogIXRoaXMuX3NldHRpbmdzLmdsb2JzdGFyLFxuICAgICAgICAgICAgcG9zaXg6IHRydWUsXG4gICAgICAgICAgICBzdHJpY3RTbGFzaGVzOiBmYWxzZVxuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFByb3ZpZGVyO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgYXN5bmNfMSA9IHJlcXVpcmUoXCIuLi9yZWFkZXJzL2FzeW5jXCIpO1xuY29uc3QgcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuL3Byb3ZpZGVyXCIpO1xuY2xhc3MgUHJvdmlkZXJBc3luYyBleHRlbmRzIHByb3ZpZGVyXzEuZGVmYXVsdCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuX3JlYWRlciA9IG5ldyBhc3luY18xLmRlZmF1bHQodGhpcy5fc2V0dGluZ3MpO1xuICAgIH1cbiAgICBhc3luYyByZWFkKHRhc2spIHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuX2dldFJvb3REaXJlY3RvcnkodGFzayk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl9nZXRSZWFkZXJPcHRpb25zKHRhc2spO1xuICAgICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5hcGkocm9vdCwgdGFzaywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBlbnRyaWVzLm1hcCgoZW50cnkpID0+IG9wdGlvbnMudHJhbnNmb3JtKGVudHJ5KSk7XG4gICAgfVxuICAgIGFwaShyb290LCB0YXNrLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICh0YXNrLmR5bmFtaWMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWFkZXIuZHluYW1pYyhyb290LCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcmVhZGVyLnN0YXRpYyh0YXNrLnBhdHRlcm5zLCBvcHRpb25zKTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBQcm92aWRlckFzeW5jO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3Qgc3RyZWFtXzEgPSByZXF1aXJlKFwic3RyZWFtXCIpO1xuY29uc3Qgc3RyZWFtXzIgPSByZXF1aXJlKFwiLi4vcmVhZGVycy9zdHJlYW1cIik7XG5jb25zdCBwcm92aWRlcl8xID0gcmVxdWlyZShcIi4vcHJvdmlkZXJcIik7XG5jbGFzcyBQcm92aWRlclN0cmVhbSBleHRlbmRzIHByb3ZpZGVyXzEuZGVmYXVsdCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuX3JlYWRlciA9IG5ldyBzdHJlYW1fMi5kZWZhdWx0KHRoaXMuX3NldHRpbmdzKTtcbiAgICB9XG4gICAgcmVhZCh0YXNrKSB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLl9nZXRSb290RGlyZWN0b3J5KHRhc2spO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fZ2V0UmVhZGVyT3B0aW9ucyh0YXNrKTtcbiAgICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5hcGkocm9vdCwgdGFzaywgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uID0gbmV3IHN0cmVhbV8xLlJlYWRhYmxlKHsgb2JqZWN0TW9kZTogdHJ1ZSwgcmVhZDogKCkgPT4geyB9IH0pO1xuICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgIC5vbmNlKCdlcnJvcicsIChlcnJvcikgPT4gZGVzdGluYXRpb24uZW1pdCgnZXJyb3InLCBlcnJvcikpXG4gICAgICAgICAgICAub24oJ2RhdGEnLCAoZW50cnkpID0+IGRlc3RpbmF0aW9uLmVtaXQoJ2RhdGEnLCBvcHRpb25zLnRyYW5zZm9ybShlbnRyeSkpKVxuICAgICAgICAgICAgLm9uY2UoJ2VuZCcsICgpID0+IGRlc3RpbmF0aW9uLmVtaXQoJ2VuZCcpKTtcbiAgICAgICAgZGVzdGluYXRpb25cbiAgICAgICAgICAgIC5vbmNlKCdjbG9zZScsICgpID0+IHNvdXJjZS5kZXN0cm95KCkpO1xuICAgICAgICByZXR1cm4gZGVzdGluYXRpb247XG4gICAgfVxuICAgIGFwaShyb290LCB0YXNrLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICh0YXNrLmR5bmFtaWMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWFkZXIuZHluYW1pYyhyb290LCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcmVhZGVyLnN0YXRpYyh0YXNrLnBhdHRlcm5zLCBvcHRpb25zKTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBQcm92aWRlclN0cmVhbTtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGZzU3RhdCA9IHJlcXVpcmUoXCJAbm9kZWxpYi9mcy5zdGF0XCIpO1xuY29uc3QgZnNXYWxrID0gcmVxdWlyZShcIkBub2RlbGliL2ZzLndhbGtcIik7XG5jb25zdCByZWFkZXJfMSA9IHJlcXVpcmUoXCIuL3JlYWRlclwiKTtcbmNsYXNzIFJlYWRlclN5bmMgZXh0ZW5kcyByZWFkZXJfMS5kZWZhdWx0IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5fd2Fsa1N5bmMgPSBmc1dhbGsud2Fsa1N5bmM7XG4gICAgICAgIHRoaXMuX3N0YXRTeW5jID0gZnNTdGF0LnN0YXRTeW5jO1xuICAgIH1cbiAgICBkeW5hbWljKHJvb3QsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dhbGtTeW5jKHJvb3QsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBzdGF0aWMocGF0dGVybnMsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVwYXRoID0gdGhpcy5fZ2V0RnVsbEVudHJ5UGF0aChwYXR0ZXJuKTtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5fZ2V0RW50cnkoZmlsZXBhdGgsIHBhdHRlcm4sIG9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKGVudHJ5ID09PSBudWxsIHx8ICFvcHRpb25zLmVudHJ5RmlsdGVyKGVudHJ5KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cmllcztcbiAgICB9XG4gICAgX2dldEVudHJ5KGZpbGVwYXRoLCBwYXR0ZXJuLCBvcHRpb25zKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0cyA9IHRoaXMuX2dldFN0YXQoZmlsZXBhdGgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21ha2VFbnRyeShzdGF0cywgcGF0dGVybik7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5lcnJvckZpbHRlcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9nZXRTdGF0KGZpbGVwYXRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGF0U3luYyhmaWxlcGF0aCwgdGhpcy5fZnNTdGF0U2V0dGluZ3MpO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFJlYWRlclN5bmM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBzeW5jXzEgPSByZXF1aXJlKFwiLi4vcmVhZGVycy9zeW5jXCIpO1xuY29uc3QgcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuL3Byb3ZpZGVyXCIpO1xuY2xhc3MgUHJvdmlkZXJTeW5jIGV4dGVuZHMgcHJvdmlkZXJfMS5kZWZhdWx0IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5fcmVhZGVyID0gbmV3IHN5bmNfMS5kZWZhdWx0KHRoaXMuX3NldHRpbmdzKTtcbiAgICB9XG4gICAgcmVhZCh0YXNrKSB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLl9nZXRSb290RGlyZWN0b3J5KHRhc2spO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fZ2V0UmVhZGVyT3B0aW9ucyh0YXNrKTtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IHRoaXMuYXBpKHJvb3QsIHRhc2ssIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gZW50cmllcy5tYXAob3B0aW9ucy50cmFuc2Zvcm0pO1xuICAgIH1cbiAgICBhcGkocm9vdCwgdGFzaywgb3B0aW9ucykge1xuICAgICAgICBpZiAodGFzay5keW5hbWljKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVhZGVyLmR5bmFtaWMocm9vdCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWRlci5zdGF0aWModGFzay5wYXR0ZXJucywgb3B0aW9ucyk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gUHJvdmlkZXJTeW5jO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ERUZBVUxUX0ZJTEVfU1lTVEVNX0FEQVBURVIgPSB2b2lkIDA7XG5jb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IG9zID0gcmVxdWlyZShcIm9zXCIpO1xuLyoqXG4gKiBUaGUgYG9zLmNwdXNgIG1ldGhvZCBjYW4gcmV0dXJuIHplcm8uIFdlIGV4cGVjdCB0aGUgbnVtYmVyIG9mIGNvcmVzIHRvIGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLlxuICogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvN2ZhZWRkZjIzYTk4YzUzODk2ZjhiNTc0YTZlNjY1ODllOGZiMWViOC9saWIvb3MuanMjTDEwNi1MMTA3XG4gKi9cbmNvbnN0IENQVV9DT1VOVCA9IE1hdGgubWF4KG9zLmNwdXMoKS5sZW5ndGgsIDEpO1xuZXhwb3J0cy5ERUZBVUxUX0ZJTEVfU1lTVEVNX0FEQVBURVIgPSB7XG4gICAgbHN0YXQ6IGZzLmxzdGF0LFxuICAgIGxzdGF0U3luYzogZnMubHN0YXRTeW5jLFxuICAgIHN0YXQ6IGZzLnN0YXQsXG4gICAgc3RhdFN5bmM6IGZzLnN0YXRTeW5jLFxuICAgIHJlYWRkaXI6IGZzLnJlYWRkaXIsXG4gICAgcmVhZGRpclN5bmM6IGZzLnJlYWRkaXJTeW5jXG59O1xuY2xhc3MgU2V0dGluZ3Mge1xuICAgIGNvbnN0cnVjdG9yKF9vcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuICAgICAgICB0aGlzLmFic29sdXRlID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5hYnNvbHV0ZSwgZmFsc2UpO1xuICAgICAgICB0aGlzLmJhc2VOYW1lTWF0Y2ggPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLmJhc2VOYW1lTWF0Y2gsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5icmFjZUV4cGFuc2lvbiA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMuYnJhY2VFeHBhbnNpb24sIHRydWUpO1xuICAgICAgICB0aGlzLmNhc2VTZW5zaXRpdmVNYXRjaCA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMuY2FzZVNlbnNpdGl2ZU1hdGNoLCB0cnVlKTtcbiAgICAgICAgdGhpcy5jb25jdXJyZW5jeSA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMuY29uY3VycmVuY3ksIENQVV9DT1VOVCk7XG4gICAgICAgIHRoaXMuY3dkID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5jd2QsIHByb2Nlc3MuY3dkKCkpO1xuICAgICAgICB0aGlzLmRlZXAgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLmRlZXAsIEluZmluaXR5KTtcbiAgICAgICAgdGhpcy5kb3QgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLmRvdCwgZmFsc2UpO1xuICAgICAgICB0aGlzLmV4dGdsb2IgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLmV4dGdsb2IsIHRydWUpO1xuICAgICAgICB0aGlzLmZvbGxvd1N5bWJvbGljTGlua3MgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLmZvbGxvd1N5bWJvbGljTGlua3MsIHRydWUpO1xuICAgICAgICB0aGlzLmZzID0gdGhpcy5fZ2V0RmlsZVN5c3RlbU1ldGhvZHModGhpcy5fb3B0aW9ucy5mcyk7XG4gICAgICAgIHRoaXMuZ2xvYnN0YXIgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLmdsb2JzdGFyLCB0cnVlKTtcbiAgICAgICAgdGhpcy5pZ25vcmUgPSB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9vcHRpb25zLmlnbm9yZSwgW10pO1xuICAgICAgICB0aGlzLm1hcmtEaXJlY3RvcmllcyA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMubWFya0RpcmVjdG9yaWVzLCBmYWxzZSk7XG4gICAgICAgIHRoaXMub2JqZWN0TW9kZSA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMub2JqZWN0TW9kZSwgZmFsc2UpO1xuICAgICAgICB0aGlzLm9ubHlEaXJlY3RvcmllcyA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMub25seURpcmVjdG9yaWVzLCBmYWxzZSk7XG4gICAgICAgIHRoaXMub25seUZpbGVzID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5vbmx5RmlsZXMsIHRydWUpO1xuICAgICAgICB0aGlzLnN0YXRzID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5zdGF0cywgZmFsc2UpO1xuICAgICAgICB0aGlzLnN1cHByZXNzRXJyb3JzID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy5zdXBwcmVzc0Vycm9ycywgZmFsc2UpO1xuICAgICAgICB0aGlzLnRocm93RXJyb3JPbkJyb2tlblN5bWJvbGljTGluayA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX29wdGlvbnMudGhyb3dFcnJvck9uQnJva2VuU3ltYm9saWNMaW5rLCBmYWxzZSk7XG4gICAgICAgIHRoaXMudW5pcXVlID0gdGhpcy5fZ2V0VmFsdWUodGhpcy5fb3B0aW9ucy51bmlxdWUsIHRydWUpO1xuICAgICAgICBpZiAodGhpcy5vbmx5RGlyZWN0b3JpZXMpIHtcbiAgICAgICAgICAgIHRoaXMub25seUZpbGVzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc3RhdHMpIHtcbiAgICAgICAgICAgIHRoaXMub2JqZWN0TW9kZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBjYXN0IHRvIHRoZSBhcnJheSBpbiB0aGUgbmV4dCBtYWpvciAoIzQwNCkuXG4gICAgICAgIHRoaXMuaWdub3JlID0gW10uY29uY2F0KHRoaXMuaWdub3JlKTtcbiAgICB9XG4gICAgX2dldFZhbHVlKG9wdGlvbiwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbiA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiBvcHRpb247XG4gICAgfVxuICAgIF9nZXRGaWxlU3lzdGVtTWV0aG9kcyhtZXRob2RzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZXhwb3J0cy5ERUZBVUxUX0ZJTEVfU1lTVEVNX0FEQVBURVIpLCBtZXRob2RzKTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBTZXR0aW5ncztcbiIsICJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IHRhc2tNYW5hZ2VyID0gcmVxdWlyZShcIi4vbWFuYWdlcnMvdGFza3NcIik7XG5jb25zdCBhc3luY18xID0gcmVxdWlyZShcIi4vcHJvdmlkZXJzL2FzeW5jXCIpO1xuY29uc3Qgc3RyZWFtXzEgPSByZXF1aXJlKFwiLi9wcm92aWRlcnMvc3RyZWFtXCIpO1xuY29uc3Qgc3luY18xID0gcmVxdWlyZShcIi4vcHJvdmlkZXJzL3N5bmNcIik7XG5jb25zdCBzZXR0aW5nc18xID0gcmVxdWlyZShcIi4vc2V0dGluZ3NcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuYXN5bmMgZnVuY3Rpb24gRmFzdEdsb2Ioc291cmNlLCBvcHRpb25zKSB7XG4gICAgYXNzZXJ0UGF0dGVybnNJbnB1dChzb3VyY2UpO1xuICAgIGNvbnN0IHdvcmtzID0gZ2V0V29ya3Moc291cmNlLCBhc3luY18xLmRlZmF1bHQsIG9wdGlvbnMpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKHdvcmtzKTtcbiAgICByZXR1cm4gdXRpbHMuYXJyYXkuZmxhdHRlbihyZXN1bHQpO1xufVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3R5cGVzY3JpcHQtZXNsaW50L3R5cGVzY3JpcHQtZXNsaW50L2lzc3Vlcy82MFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlZGVjbGFyZVxuKGZ1bmN0aW9uIChGYXN0R2xvYikge1xuICAgIEZhc3RHbG9iLmdsb2IgPSBGYXN0R2xvYjtcbiAgICBGYXN0R2xvYi5nbG9iU3luYyA9IHN5bmM7XG4gICAgRmFzdEdsb2IuZ2xvYlN0cmVhbSA9IHN0cmVhbTtcbiAgICBGYXN0R2xvYi5hc3luYyA9IEZhc3RHbG9iO1xuICAgIGZ1bmN0aW9uIHN5bmMoc291cmNlLCBvcHRpb25zKSB7XG4gICAgICAgIGFzc2VydFBhdHRlcm5zSW5wdXQoc291cmNlKTtcbiAgICAgICAgY29uc3Qgd29ya3MgPSBnZXRXb3Jrcyhzb3VyY2UsIHN5bmNfMS5kZWZhdWx0LCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHV0aWxzLmFycmF5LmZsYXR0ZW4od29ya3MpO1xuICAgIH1cbiAgICBGYXN0R2xvYi5zeW5jID0gc3luYztcbiAgICBmdW5jdGlvbiBzdHJlYW0oc291cmNlLCBvcHRpb25zKSB7XG4gICAgICAgIGFzc2VydFBhdHRlcm5zSW5wdXQoc291cmNlKTtcbiAgICAgICAgY29uc3Qgd29ya3MgPSBnZXRXb3Jrcyhzb3VyY2UsIHN0cmVhbV8xLmRlZmF1bHQsIG9wdGlvbnMpO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIHN0cmVhbSByZXR1cm5lZCBieSB0aGUgcHJvdmlkZXIgY2Fubm90IHdvcmsgd2l0aCBhbiBhc3luY2hyb25vdXMgaXRlcmF0b3IuXG4gICAgICAgICAqIFRvIHN1cHBvcnQgYXN5bmNocm9ub3VzIGl0ZXJhdG9ycywgcmVnYXJkbGVzcyBvZiB0aGUgbnVtYmVyIG9mIHRhc2tzLCB3ZSBhbHdheXMgbXVsdGlwbGV4IHN0cmVhbXMuXG4gICAgICAgICAqIFRoaXMgYWZmZWN0cyBwZXJmb3JtYW5jZSAoKzI1JSkuIEkgZG9uJ3Qgc2VlIGJlc3Qgc29sdXRpb24gcmlnaHQgbm93LlxuICAgICAgICAgKi9cbiAgICAgICAgcmV0dXJuIHV0aWxzLnN0cmVhbS5tZXJnZSh3b3Jrcyk7XG4gICAgfVxuICAgIEZhc3RHbG9iLnN0cmVhbSA9IHN0cmVhbTtcbiAgICBmdW5jdGlvbiBnZW5lcmF0ZVRhc2tzKHNvdXJjZSwgb3B0aW9ucykge1xuICAgICAgICBhc3NlcnRQYXR0ZXJuc0lucHV0KHNvdXJjZSk7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5zID0gW10uY29uY2F0KHNvdXJjZSk7XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gbmV3IHNldHRpbmdzXzEuZGVmYXVsdChvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRhc2tNYW5hZ2VyLmdlbmVyYXRlKHBhdHRlcm5zLCBzZXR0aW5ncyk7XG4gICAgfVxuICAgIEZhc3RHbG9iLmdlbmVyYXRlVGFza3MgPSBnZW5lcmF0ZVRhc2tzO1xuICAgIGZ1bmN0aW9uIGlzRHluYW1pY1BhdHRlcm4oc291cmNlLCBvcHRpb25zKSB7XG4gICAgICAgIGFzc2VydFBhdHRlcm5zSW5wdXQoc291cmNlKTtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBuZXcgc2V0dGluZ3NfMS5kZWZhdWx0KG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdXRpbHMucGF0dGVybi5pc0R5bmFtaWNQYXR0ZXJuKHNvdXJjZSwgc2V0dGluZ3MpO1xuICAgIH1cbiAgICBGYXN0R2xvYi5pc0R5bmFtaWNQYXR0ZXJuID0gaXNEeW5hbWljUGF0dGVybjtcbiAgICBmdW5jdGlvbiBlc2NhcGVQYXRoKHNvdXJjZSkge1xuICAgICAgICBhc3NlcnRQYXR0ZXJuc0lucHV0KHNvdXJjZSk7XG4gICAgICAgIHJldHVybiB1dGlscy5wYXRoLmVzY2FwZShzb3VyY2UpO1xuICAgIH1cbiAgICBGYXN0R2xvYi5lc2NhcGVQYXRoID0gZXNjYXBlUGF0aDtcbiAgICBmdW5jdGlvbiBjb252ZXJ0UGF0aFRvUGF0dGVybihzb3VyY2UpIHtcbiAgICAgICAgYXNzZXJ0UGF0dGVybnNJbnB1dChzb3VyY2UpO1xuICAgICAgICByZXR1cm4gdXRpbHMucGF0aC5jb252ZXJ0UGF0aFRvUGF0dGVybihzb3VyY2UpO1xuICAgIH1cbiAgICBGYXN0R2xvYi5jb252ZXJ0UGF0aFRvUGF0dGVybiA9IGNvbnZlcnRQYXRoVG9QYXR0ZXJuO1xuICAgIGxldCBwb3NpeDtcbiAgICAoZnVuY3Rpb24gKHBvc2l4KSB7XG4gICAgICAgIGZ1bmN0aW9uIGVzY2FwZVBhdGgoc291cmNlKSB7XG4gICAgICAgICAgICBhc3NlcnRQYXR0ZXJuc0lucHV0KHNvdXJjZSk7XG4gICAgICAgICAgICByZXR1cm4gdXRpbHMucGF0aC5lc2NhcGVQb3NpeFBhdGgoc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBwb3NpeC5lc2NhcGVQYXRoID0gZXNjYXBlUGF0aDtcbiAgICAgICAgZnVuY3Rpb24gY29udmVydFBhdGhUb1BhdHRlcm4oc291cmNlKSB7XG4gICAgICAgICAgICBhc3NlcnRQYXR0ZXJuc0lucHV0KHNvdXJjZSk7XG4gICAgICAgICAgICByZXR1cm4gdXRpbHMucGF0aC5jb252ZXJ0UG9zaXhQYXRoVG9QYXR0ZXJuKHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgcG9zaXguY29udmVydFBhdGhUb1BhdHRlcm4gPSBjb252ZXJ0UGF0aFRvUGF0dGVybjtcbiAgICB9KShwb3NpeCA9IEZhc3RHbG9iLnBvc2l4IHx8IChGYXN0R2xvYi5wb3NpeCA9IHt9KSk7XG4gICAgbGV0IHdpbjMyO1xuICAgIChmdW5jdGlvbiAod2luMzIpIHtcbiAgICAgICAgZnVuY3Rpb24gZXNjYXBlUGF0aChzb3VyY2UpIHtcbiAgICAgICAgICAgIGFzc2VydFBhdHRlcm5zSW5wdXQoc291cmNlKTtcbiAgICAgICAgICAgIHJldHVybiB1dGlscy5wYXRoLmVzY2FwZVdpbmRvd3NQYXRoKHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgd2luMzIuZXNjYXBlUGF0aCA9IGVzY2FwZVBhdGg7XG4gICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRQYXRoVG9QYXR0ZXJuKHNvdXJjZSkge1xuICAgICAgICAgICAgYXNzZXJ0UGF0dGVybnNJbnB1dChzb3VyY2UpO1xuICAgICAgICAgICAgcmV0dXJuIHV0aWxzLnBhdGguY29udmVydFdpbmRvd3NQYXRoVG9QYXR0ZXJuKHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgd2luMzIuY29udmVydFBhdGhUb1BhdHRlcm4gPSBjb252ZXJ0UGF0aFRvUGF0dGVybjtcbiAgICB9KSh3aW4zMiA9IEZhc3RHbG9iLndpbjMyIHx8IChGYXN0R2xvYi53aW4zMiA9IHt9KSk7XG59KShGYXN0R2xvYiB8fCAoRmFzdEdsb2IgPSB7fSkpO1xuZnVuY3Rpb24gZ2V0V29ya3Moc291cmNlLCBfUHJvdmlkZXIsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBwYXR0ZXJucyA9IFtdLmNvbmNhdChzb3VyY2UpO1xuICAgIGNvbnN0IHNldHRpbmdzID0gbmV3IHNldHRpbmdzXzEuZGVmYXVsdChvcHRpb25zKTtcbiAgICBjb25zdCB0YXNrcyA9IHRhc2tNYW5hZ2VyLmdlbmVyYXRlKHBhdHRlcm5zLCBzZXR0aW5ncyk7XG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgX1Byb3ZpZGVyKHNldHRpbmdzKTtcbiAgICByZXR1cm4gdGFza3MubWFwKHByb3ZpZGVyLnJlYWQsIHByb3ZpZGVyKTtcbn1cbmZ1bmN0aW9uIGFzc2VydFBhdHRlcm5zSW5wdXQoaW5wdXQpIHtcbiAgICBjb25zdCBzb3VyY2UgPSBbXS5jb25jYXQoaW5wdXQpO1xuICAgIGNvbnN0IGlzVmFsaWRTb3VyY2UgPSBzb3VyY2UuZXZlcnkoKGl0ZW0pID0+IHV0aWxzLnN0cmluZy5pc1N0cmluZyhpdGVtKSAmJiAhdXRpbHMuc3RyaW5nLmlzRW1wdHkoaXRlbSkpO1xuICAgIGlmICghaXNWYWxpZFNvdXJjZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXR0ZXJucyBtdXN0IGJlIGEgc3RyaW5nIChub24gZW1wdHkpIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MnKTtcbiAgICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IEZhc3RHbG9iO1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IHtwcm9taXNpZnl9ID0gcmVxdWlyZSgndXRpbCcpO1xuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuXG5hc3luYyBmdW5jdGlvbiBpc1R5cGUoZnNTdGF0VHlwZSwgc3RhdHNNZXRob2ROYW1lLCBmaWxlUGF0aCkge1xuXHRpZiAodHlwZW9mIGZpbGVQYXRoICE9PSAnc3RyaW5nJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIGEgc3RyaW5nLCBnb3QgJHt0eXBlb2YgZmlsZVBhdGh9YCk7XG5cdH1cblxuXHR0cnkge1xuXHRcdGNvbnN0IHN0YXRzID0gYXdhaXQgcHJvbWlzaWZ5KGZzW2ZzU3RhdFR5cGVdKShmaWxlUGF0aCk7XG5cdFx0cmV0dXJuIHN0YXRzW3N0YXRzTWV0aG9kTmFtZV0oKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRpZiAoZXJyb3IuY29kZSA9PT0gJ0VOT0VOVCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR0aHJvdyBlcnJvcjtcblx0fVxufVxuXG5mdW5jdGlvbiBpc1R5cGVTeW5jKGZzU3RhdFR5cGUsIHN0YXRzTWV0aG9kTmFtZSwgZmlsZVBhdGgpIHtcblx0aWYgKHR5cGVvZiBmaWxlUGF0aCAhPT0gJ3N0cmluZycpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBhIHN0cmluZywgZ290ICR7dHlwZW9mIGZpbGVQYXRofWApO1xuXHR9XG5cblx0dHJ5IHtcblx0XHRyZXR1cm4gZnNbZnNTdGF0VHlwZV0oZmlsZVBhdGgpW3N0YXRzTWV0aG9kTmFtZV0oKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRpZiAoZXJyb3IuY29kZSA9PT0gJ0VOT0VOVCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR0aHJvdyBlcnJvcjtcblx0fVxufVxuXG5leHBvcnRzLmlzRmlsZSA9IGlzVHlwZS5iaW5kKG51bGwsICdzdGF0JywgJ2lzRmlsZScpO1xuZXhwb3J0cy5pc0RpcmVjdG9yeSA9IGlzVHlwZS5iaW5kKG51bGwsICdzdGF0JywgJ2lzRGlyZWN0b3J5Jyk7XG5leHBvcnRzLmlzU3ltbGluayA9IGlzVHlwZS5iaW5kKG51bGwsICdsc3RhdCcsICdpc1N5bWJvbGljTGluaycpO1xuZXhwb3J0cy5pc0ZpbGVTeW5jID0gaXNUeXBlU3luYy5iaW5kKG51bGwsICdzdGF0U3luYycsICdpc0ZpbGUnKTtcbmV4cG9ydHMuaXNEaXJlY3RvcnlTeW5jID0gaXNUeXBlU3luYy5iaW5kKG51bGwsICdzdGF0U3luYycsICdpc0RpcmVjdG9yeScpO1xuZXhwb3J0cy5pc1N5bWxpbmtTeW5jID0gaXNUeXBlU3luYy5iaW5kKG51bGwsICdsc3RhdFN5bmMnLCAnaXNTeW1ib2xpY0xpbmsnKTtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3QgcGF0aFR5cGUgPSByZXF1aXJlKCdwYXRoLXR5cGUnKTtcblxuY29uc3QgZ2V0RXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnMgPT4gZXh0ZW5zaW9ucy5sZW5ndGggPiAxID8gYHske2V4dGVuc2lvbnMuam9pbignLCcpfX1gIDogZXh0ZW5zaW9uc1swXTtcblxuY29uc3QgZ2V0UGF0aCA9IChmaWxlcGF0aCwgY3dkKSA9PiB7XG5cdGNvbnN0IHB0aCA9IGZpbGVwYXRoWzBdID09PSAnIScgPyBmaWxlcGF0aC5zbGljZSgxKSA6IGZpbGVwYXRoO1xuXHRyZXR1cm4gcGF0aC5pc0Fic29sdXRlKHB0aCkgPyBwdGggOiBwYXRoLmpvaW4oY3dkLCBwdGgpO1xufTtcblxuY29uc3QgYWRkRXh0ZW5zaW9ucyA9IChmaWxlLCBleHRlbnNpb25zKSA9PiB7XG5cdGlmIChwYXRoLmV4dG5hbWUoZmlsZSkpIHtcblx0XHRyZXR1cm4gYCoqLyR7ZmlsZX1gO1xuXHR9XG5cblx0cmV0dXJuIGAqKi8ke2ZpbGV9LiR7Z2V0RXh0ZW5zaW9ucyhleHRlbnNpb25zKX1gO1xufTtcblxuY29uc3QgZ2V0R2xvYiA9IChkaXJlY3RvcnksIG9wdGlvbnMpID0+IHtcblx0aWYgKG9wdGlvbnMuZmlsZXMgJiYgIUFycmF5LmlzQXJyYXkob3B0aW9ucy5maWxlcykpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcXGBmaWxlc1xcYCB0byBiZSBvZiB0eXBlIFxcYEFycmF5XFxgIGJ1dCByZWNlaXZlZCB0eXBlIFxcYCR7dHlwZW9mIG9wdGlvbnMuZmlsZXN9XFxgYCk7XG5cdH1cblxuXHRpZiAob3B0aW9ucy5leHRlbnNpb25zICYmICFBcnJheS5pc0FycmF5KG9wdGlvbnMuZXh0ZW5zaW9ucykpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcXGBleHRlbnNpb25zXFxgIHRvIGJlIG9mIHR5cGUgXFxgQXJyYXlcXGAgYnV0IHJlY2VpdmVkIHR5cGUgXFxgJHt0eXBlb2Ygb3B0aW9ucy5leHRlbnNpb25zfVxcYGApO1xuXHR9XG5cblx0aWYgKG9wdGlvbnMuZmlsZXMgJiYgb3B0aW9ucy5leHRlbnNpb25zKSB7XG5cdFx0cmV0dXJuIG9wdGlvbnMuZmlsZXMubWFwKHggPT4gcGF0aC5wb3NpeC5qb2luKGRpcmVjdG9yeSwgYWRkRXh0ZW5zaW9ucyh4LCBvcHRpb25zLmV4dGVuc2lvbnMpKSk7XG5cdH1cblxuXHRpZiAob3B0aW9ucy5maWxlcykge1xuXHRcdHJldHVybiBvcHRpb25zLmZpbGVzLm1hcCh4ID0+IHBhdGgucG9zaXguam9pbihkaXJlY3RvcnksIGAqKi8ke3h9YCkpO1xuXHR9XG5cblx0aWYgKG9wdGlvbnMuZXh0ZW5zaW9ucykge1xuXHRcdHJldHVybiBbcGF0aC5wb3NpeC5qb2luKGRpcmVjdG9yeSwgYCoqLyouJHtnZXRFeHRlbnNpb25zKG9wdGlvbnMuZXh0ZW5zaW9ucyl9YCldO1xuXHR9XG5cblx0cmV0dXJuIFtwYXRoLnBvc2l4LmpvaW4oZGlyZWN0b3J5LCAnKionKV07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGFzeW5jIChpbnB1dCwgb3B0aW9ucykgPT4ge1xuXHRvcHRpb25zID0ge1xuXHRcdGN3ZDogcHJvY2Vzcy5jd2QoKSxcblx0XHQuLi5vcHRpb25zXG5cdH07XG5cblx0aWYgKHR5cGVvZiBvcHRpb25zLmN3ZCAhPT0gJ3N0cmluZycpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcXGBjd2RcXGAgdG8gYmUgb2YgdHlwZSBcXGBzdHJpbmdcXGAgYnV0IHJlY2VpdmVkIHR5cGUgXFxgJHt0eXBlb2Ygb3B0aW9ucy5jd2R9XFxgYCk7XG5cdH1cblxuXHRjb25zdCBnbG9icyA9IGF3YWl0IFByb21pc2UuYWxsKFtdLmNvbmNhdChpbnB1dCkubWFwKGFzeW5jIHggPT4ge1xuXHRcdGNvbnN0IGlzRGlyZWN0b3J5ID0gYXdhaXQgcGF0aFR5cGUuaXNEaXJlY3RvcnkoZ2V0UGF0aCh4LCBvcHRpb25zLmN3ZCkpO1xuXHRcdHJldHVybiBpc0RpcmVjdG9yeSA/IGdldEdsb2IoeCwgb3B0aW9ucykgOiB4O1xuXHR9KSk7XG5cblx0cmV0dXJuIFtdLmNvbmNhdC5hcHBseShbXSwgZ2xvYnMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1zcHJlYWRcbn07XG5cbm1vZHVsZS5leHBvcnRzLnN5bmMgPSAoaW5wdXQsIG9wdGlvbnMpID0+IHtcblx0b3B0aW9ucyA9IHtcblx0XHRjd2Q6IHByb2Nlc3MuY3dkKCksXG5cdFx0Li4ub3B0aW9uc1xuXHR9O1xuXG5cdGlmICh0eXBlb2Ygb3B0aW9ucy5jd2QgIT09ICdzdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXFxgY3dkXFxgIHRvIGJlIG9mIHR5cGUgXFxgc3RyaW5nXFxgIGJ1dCByZWNlaXZlZCB0eXBlIFxcYCR7dHlwZW9mIG9wdGlvbnMuY3dkfVxcYGApO1xuXHR9XG5cblx0Y29uc3QgZ2xvYnMgPSBbXS5jb25jYXQoaW5wdXQpLm1hcCh4ID0+IHBhdGhUeXBlLmlzRGlyZWN0b3J5U3luYyhnZXRQYXRoKHgsIG9wdGlvbnMuY3dkKSkgPyBnZXRHbG9iKHgsIG9wdGlvbnMpIDogeCk7XG5cblx0cmV0dXJuIFtdLmNvbmNhdC5hcHBseShbXSwgZ2xvYnMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1zcHJlYWRcbn07XG4iLCAiLy8gQSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgbWFrZS1hcnJheVxuZnVuY3Rpb24gbWFrZUFycmF5IChzdWJqZWN0KSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHN1YmplY3QpXG4gICAgPyBzdWJqZWN0XG4gICAgOiBbc3ViamVjdF1cbn1cblxuY29uc3QgRU1QVFkgPSAnJ1xuY29uc3QgU1BBQ0UgPSAnICdcbmNvbnN0IEVTQ0FQRSA9ICdcXFxcJ1xuY29uc3QgUkVHRVhfVEVTVF9CTEFOS19MSU5FID0gL15cXHMrJC9cbmNvbnN0IFJFR0VYX0lOVkFMSURfVFJBSUxJTkdfQkFDS1NMQVNIID0gLyg/OlteXFxcXF18XilcXFxcJC9cbmNvbnN0IFJFR0VYX1JFUExBQ0VfTEVBRElOR19FWENBUEVEX0VYQ0xBTUFUSU9OID0gL15cXFxcIS9cbmNvbnN0IFJFR0VYX1JFUExBQ0VfTEVBRElOR19FWENBUEVEX0hBU0ggPSAvXlxcXFwjL1xuY29uc3QgUkVHRVhfU1BMSVRBTExfQ1JMRiA9IC9cXHI/XFxuL2dcbi8vIC9mb28sXG4vLyAuL2Zvbyxcbi8vIC4uL2Zvbyxcbi8vIC5cbi8vIC4uXG5jb25zdCBSRUdFWF9URVNUX0lOVkFMSURfUEFUSCA9IC9eXFwuKlxcL3xeXFwuKyQvXG5cbmNvbnN0IFNMQVNIID0gJy8nXG5cbi8vIERvIG5vdCB1c2UgdGVybmFyeSBleHByZXNzaW9uIGhlcmUsIHNpbmNlIFwiaXN0YW5idWwgaWdub3JlIG5leHRcIiBpcyBidWdneVxubGV0IFRNUF9LRVlfSUdOT1JFID0gJ25vZGUtaWdub3JlJ1xuLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbmlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJykge1xuICBUTVBfS0VZX0lHTk9SRSA9IFN5bWJvbC5mb3IoJ25vZGUtaWdub3JlJylcbn1cbmNvbnN0IEtFWV9JR05PUkUgPSBUTVBfS0VZX0lHTk9SRVxuXG5jb25zdCBkZWZpbmUgPSAob2JqZWN0LCBrZXksIHZhbHVlKSA9PlxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHt2YWx1ZX0pXG5cbmNvbnN0IFJFR0VYX1JFR0VYUF9SQU5HRSA9IC8oWzAtel0pLShbMC16XSkvZ1xuXG5jb25zdCBSRVRVUk5fRkFMU0UgPSAoKSA9PiBmYWxzZVxuXG4vLyBTYW5pdGl6ZSB0aGUgcmFuZ2Ugb2YgYSByZWd1bGFyIGV4cHJlc3Npb25cbi8vIFRoZSBjYXNlcyBhcmUgY29tcGxpY2F0ZWQsIHNlZSB0ZXN0IGNhc2VzIGZvciBkZXRhaWxzXG5jb25zdCBzYW5pdGl6ZVJhbmdlID0gcmFuZ2UgPT4gcmFuZ2UucmVwbGFjZShcbiAgUkVHRVhfUkVHRVhQX1JBTkdFLFxuICAobWF0Y2gsIGZyb20sIHRvKSA9PiBmcm9tLmNoYXJDb2RlQXQoMCkgPD0gdG8uY2hhckNvZGVBdCgwKVxuICAgID8gbWF0Y2hcbiAgICAvLyBJbnZhbGlkIHJhbmdlIChvdXQgb2Ygb3JkZXIpIHdoaWNoIGlzIG9rIGZvciBnaXRpZ25vcmUgcnVsZXMgYnV0XG4gICAgLy8gICBmYXRhbCBmb3IgSmF2YVNjcmlwdCByZWd1bGFyIGV4cHJlc3Npb24sIHNvIGVsaW1pbmF0ZSBpdC5cbiAgICA6IEVNUFRZXG4pXG5cbi8vIFNlZSBmaXh0dXJlcyAjNTlcbmNvbnN0IGNsZWFuUmFuZ2VCYWNrU2xhc2ggPSBzbGFzaGVzID0+IHtcbiAgY29uc3Qge2xlbmd0aH0gPSBzbGFzaGVzXG4gIHJldHVybiBzbGFzaGVzLnNsaWNlKDAsIGxlbmd0aCAtIGxlbmd0aCAlIDIpXG59XG5cbi8vID4gSWYgdGhlIHBhdHRlcm4gZW5kcyB3aXRoIGEgc2xhc2gsXG4vLyA+IGl0IGlzIHJlbW92ZWQgZm9yIHRoZSBwdXJwb3NlIG9mIHRoZSBmb2xsb3dpbmcgZGVzY3JpcHRpb24sXG4vLyA+IGJ1dCBpdCB3b3VsZCBvbmx5IGZpbmQgYSBtYXRjaCB3aXRoIGEgZGlyZWN0b3J5LlxuLy8gPiBJbiBvdGhlciB3b3JkcywgZm9vLyB3aWxsIG1hdGNoIGEgZGlyZWN0b3J5IGZvbyBhbmQgcGF0aHMgdW5kZXJuZWF0aCBpdCxcbi8vID4gYnV0IHdpbGwgbm90IG1hdGNoIGEgcmVndWxhciBmaWxlIG9yIGEgc3ltYm9saWMgbGluayBmb29cbi8vID4gICh0aGlzIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgd2F5IGhvdyBwYXRoc3BlYyB3b3JrcyBpbiBnZW5lcmFsIGluIEdpdCkuXG4vLyAnYGZvby9gJyB3aWxsIG5vdCBtYXRjaCByZWd1bGFyIGZpbGUgJ2Bmb29gJyBvciBzeW1ib2xpYyBsaW5rICdgZm9vYCdcbi8vIC0+IGlnbm9yZS1ydWxlcyB3aWxsIG5vdCBkZWFsIHdpdGggaXQsIGJlY2F1c2UgaXQgY29zdHMgZXh0cmEgYGZzLnN0YXRgIGNhbGxcbi8vICAgICAgeW91IGNvdWxkIHVzZSBvcHRpb24gYG1hcms6IHRydWVgIHdpdGggYGdsb2JgXG5cbi8vICdgZm9vL2AnIHNob3VsZCBub3QgY29udGludWUgd2l0aCB0aGUgJ2AuLmAnXG5jb25zdCBSRVBMQUNFUlMgPSBbXG5cbiAgLy8gPiBUcmFpbGluZyBzcGFjZXMgYXJlIGlnbm9yZWQgdW5sZXNzIHRoZXkgYXJlIHF1b3RlZCB3aXRoIGJhY2tzbGFzaCAoXCJcXFwiKVxuICBbXG4gICAgLy8gKGFcXCApIC0+IChhIClcbiAgICAvLyAoYSAgKSAtPiAoYSlcbiAgICAvLyAoYSBcXCApIC0+IChhICApXG4gICAgL1xcXFw/XFxzKyQvLFxuICAgIG1hdGNoID0+IG1hdGNoLmluZGV4T2YoJ1xcXFwnKSA9PT0gMFxuICAgICAgPyBTUEFDRVxuICAgICAgOiBFTVBUWVxuICBdLFxuXG4gIC8vIHJlcGxhY2UgKFxcICkgd2l0aCAnICdcbiAgW1xuICAgIC9cXFxcXFxzL2csXG4gICAgKCkgPT4gU1BBQ0VcbiAgXSxcblxuICAvLyBFc2NhcGUgbWV0YWNoYXJhY3RlcnNcbiAgLy8gd2hpY2ggaXMgd3JpdHRlbiBkb3duIGJ5IHVzZXJzIGJ1dCBtZWFucyBzcGVjaWFsIGZvciByZWd1bGFyIGV4cHJlc3Npb25zLlxuXG4gIC8vID4gVGhlcmUgYXJlIDEyIGNoYXJhY3RlcnMgd2l0aCBzcGVjaWFsIG1lYW5pbmdzOlxuICAvLyA+IC0gdGhlIGJhY2tzbGFzaCBcXCxcbiAgLy8gPiAtIHRoZSBjYXJldCBeLFxuICAvLyA+IC0gdGhlIGRvbGxhciBzaWduICQsXG4gIC8vID4gLSB0aGUgcGVyaW9kIG9yIGRvdCAuLFxuICAvLyA+IC0gdGhlIHZlcnRpY2FsIGJhciBvciBwaXBlIHN5bWJvbCB8LFxuICAvLyA+IC0gdGhlIHF1ZXN0aW9uIG1hcmsgPyxcbiAgLy8gPiAtIHRoZSBhc3RlcmlzayBvciBzdGFyICosXG4gIC8vID4gLSB0aGUgcGx1cyBzaWduICssXG4gIC8vID4gLSB0aGUgb3BlbmluZyBwYXJlbnRoZXNpcyAoLFxuICAvLyA+IC0gdGhlIGNsb3NpbmcgcGFyZW50aGVzaXMgKSxcbiAgLy8gPiAtIGFuZCB0aGUgb3BlbmluZyBzcXVhcmUgYnJhY2tldCBbLFxuICAvLyA+IC0gdGhlIG9wZW5pbmcgY3VybHkgYnJhY2UgeyxcbiAgLy8gPiBUaGVzZSBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlIG9mdGVuIGNhbGxlZCBcIm1ldGFjaGFyYWN0ZXJzXCIuXG4gIFtcbiAgICAvW1xcXFwkLnwqKygpe15dL2csXG4gICAgbWF0Y2ggPT4gYFxcXFwke21hdGNofWBcbiAgXSxcblxuICBbXG4gICAgLy8gPiBhIHF1ZXN0aW9uIG1hcmsgKD8pIG1hdGNoZXMgYSBzaW5nbGUgY2hhcmFjdGVyXG4gICAgLyg/IVxcXFwpXFw/L2csXG4gICAgKCkgPT4gJ1teL10nXG4gIF0sXG5cbiAgLy8gbGVhZGluZyBzbGFzaFxuICBbXG5cbiAgICAvLyA+IEEgbGVhZGluZyBzbGFzaCBtYXRjaGVzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhdGhuYW1lLlxuICAgIC8vID4gRm9yIGV4YW1wbGUsIFwiLyouY1wiIG1hdGNoZXMgXCJjYXQtZmlsZS5jXCIgYnV0IG5vdCBcIm1vemlsbGEtc2hhMS9zaGExLmNcIi5cbiAgICAvLyBBIGxlYWRpbmcgc2xhc2ggbWF0Y2hlcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRobmFtZVxuICAgIC9eXFwvLyxcbiAgICAoKSA9PiAnXidcbiAgXSxcblxuICAvLyByZXBsYWNlIHNwZWNpYWwgbWV0YWNoYXJhY3RlciBzbGFzaCBhZnRlciB0aGUgbGVhZGluZyBzbGFzaFxuICBbXG4gICAgL1xcLy9nLFxuICAgICgpID0+ICdcXFxcLydcbiAgXSxcblxuICBbXG4gICAgLy8gPiBBIGxlYWRpbmcgXCIqKlwiIGZvbGxvd2VkIGJ5IGEgc2xhc2ggbWVhbnMgbWF0Y2ggaW4gYWxsIGRpcmVjdG9yaWVzLlxuICAgIC8vID4gRm9yIGV4YW1wbGUsIFwiKiovZm9vXCIgbWF0Y2hlcyBmaWxlIG9yIGRpcmVjdG9yeSBcImZvb1wiIGFueXdoZXJlLFxuICAgIC8vID4gdGhlIHNhbWUgYXMgcGF0dGVybiBcImZvb1wiLlxuICAgIC8vID4gXCIqKi9mb28vYmFyXCIgbWF0Y2hlcyBmaWxlIG9yIGRpcmVjdG9yeSBcImJhclwiIGFueXdoZXJlIHRoYXQgaXMgZGlyZWN0bHlcbiAgICAvLyA+ICAgdW5kZXIgZGlyZWN0b3J5IFwiZm9vXCIuXG4gICAgLy8gTm90aWNlIHRoYXQgdGhlICcqJ3MgaGF2ZSBiZWVuIHJlcGxhY2VkIGFzICdcXFxcKidcbiAgICAvXlxcXipcXFxcXFwqXFxcXFxcKlxcXFxcXC8vLFxuXG4gICAgLy8gJyoqL2ZvbycgPC0+ICdmb28nXG4gICAgKCkgPT4gJ14oPzouKlxcXFwvKT8nXG4gIF0sXG5cbiAgLy8gc3RhcnRpbmdcbiAgW1xuICAgIC8vIHRoZXJlIHdpbGwgYmUgbm8gbGVhZGluZyAnLydcbiAgICAvLyAgICh3aGljaCBoYXMgYmVlbiByZXBsYWNlZCBieSBzZWN0aW9uIFwibGVhZGluZyBzbGFzaFwiKVxuICAgIC8vIElmIHN0YXJ0cyB3aXRoICcqKicsIGFkZGluZyBhICdeJyB0byB0aGUgcmVndWxhciBleHByZXNzaW9uIGFsc28gd29ya3NcbiAgICAvXig/PVteXl0pLyxcbiAgICBmdW5jdGlvbiBzdGFydGluZ1JlcGxhY2VyICgpIHtcbiAgICAgIC8vIElmIGhhcyBhIHNsYXNoIGAvYCBhdCB0aGUgYmVnaW5uaW5nIG9yIG1pZGRsZVxuICAgICAgcmV0dXJuICEvXFwvKD8hJCkvLnRlc3QodGhpcylcbiAgICAgICAgLy8gPiBQcmlvciB0byAyLjIyLjFcbiAgICAgICAgLy8gPiBJZiB0aGUgcGF0dGVybiBkb2VzIG5vdCBjb250YWluIGEgc2xhc2ggLyxcbiAgICAgICAgLy8gPiAgIEdpdCB0cmVhdHMgaXQgYXMgYSBzaGVsbCBnbG9iIHBhdHRlcm5cbiAgICAgICAgLy8gQWN0dWFsbHksIGlmIHRoZXJlIGlzIG9ubHkgYSB0cmFpbGluZyBzbGFzaCxcbiAgICAgICAgLy8gICBnaXQgYWxzbyB0cmVhdHMgaXQgYXMgYSBzaGVsbCBnbG9iIHBhdHRlcm5cblxuICAgICAgICAvLyBBZnRlciAyLjIyLjEgKGNvbXBhdGlibGUgYnV0IGNsZWFyZXIpXG4gICAgICAgIC8vID4gSWYgdGhlcmUgaXMgYSBzZXBhcmF0b3IgYXQgdGhlIGJlZ2lubmluZyBvciBtaWRkbGUgKG9yIGJvdGgpXG4gICAgICAgIC8vID4gb2YgdGhlIHBhdHRlcm4sIHRoZW4gdGhlIHBhdHRlcm4gaXMgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeVxuICAgICAgICAvLyA+IGxldmVsIG9mIHRoZSBwYXJ0aWN1bGFyIC5naXRpZ25vcmUgZmlsZSBpdHNlbGYuXG4gICAgICAgIC8vID4gT3RoZXJ3aXNlIHRoZSBwYXR0ZXJuIG1heSBhbHNvIG1hdGNoIGF0IGFueSBsZXZlbCBiZWxvd1xuICAgICAgICAvLyA+IHRoZSAuZ2l0aWdub3JlIGxldmVsLlxuICAgICAgICA/ICcoPzpefFxcXFwvKSdcblxuICAgICAgICAvLyA+IE90aGVyd2lzZSwgR2l0IHRyZWF0cyB0aGUgcGF0dGVybiBhcyBhIHNoZWxsIGdsb2Igc3VpdGFibGUgZm9yXG4gICAgICAgIC8vID4gICBjb25zdW1wdGlvbiBieSBmbm1hdGNoKDMpXG4gICAgICAgIDogJ14nXG4gICAgfVxuICBdLFxuXG4gIC8vIHR3byBnbG9ic3RhcnNcbiAgW1xuICAgIC8vIFVzZSBsb29rYWhlYWQgYXNzZXJ0aW9ucyBzbyB0aGF0IHdlIGNvdWxkIG1hdGNoIG1vcmUgdGhhbiBvbmUgYCcvKionYFxuICAgIC9cXFxcXFwvXFxcXFxcKlxcXFxcXCooPz1cXFxcXFwvfCQpL2csXG5cbiAgICAvLyBaZXJvLCBvbmUgb3Igc2V2ZXJhbCBkaXJlY3Rvcmllc1xuICAgIC8vIHNob3VsZCBub3QgdXNlICcqJywgb3IgaXQgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgbmV4dCByZXBsYWNlclxuXG4gICAgLy8gQ2hlY2sgaWYgaXQgaXMgbm90IHRoZSBsYXN0IGAnLyoqJ2BcbiAgICAoXywgaW5kZXgsIHN0cikgPT4gaW5kZXggKyA2IDwgc3RyLmxlbmd0aFxuXG4gICAgICAvLyBjYXNlOiAvKiovXG4gICAgICAvLyA+IEEgc2xhc2ggZm9sbG93ZWQgYnkgdHdvIGNvbnNlY3V0aXZlIGFzdGVyaXNrcyB0aGVuIGEgc2xhc2ggbWF0Y2hlc1xuICAgICAgLy8gPiAgIHplcm8gb3IgbW9yZSBkaXJlY3Rvcmllcy5cbiAgICAgIC8vID4gRm9yIGV4YW1wbGUsIFwiYS8qKi9iXCIgbWF0Y2hlcyBcImEvYlwiLCBcImEveC9iXCIsIFwiYS94L3kvYlwiIGFuZCBzbyBvbi5cbiAgICAgIC8vICcvKiovJ1xuICAgICAgPyAnKD86XFxcXC9bXlxcXFwvXSspKidcblxuICAgICAgLy8gY2FzZTogLyoqXG4gICAgICAvLyA+IEEgdHJhaWxpbmcgYFwiLyoqXCJgIG1hdGNoZXMgZXZlcnl0aGluZyBpbnNpZGUuXG5cbiAgICAgIC8vICMyMTogZXZlcnl0aGluZyBpbnNpZGUgYnV0IGl0IHNob3VsZCBub3QgaW5jbHVkZSB0aGUgY3VycmVudCBmb2xkZXJcbiAgICAgIDogJ1xcXFwvLisnXG4gIF0sXG5cbiAgLy8gbm9ybWFsIGludGVybWVkaWF0ZSB3aWxkY2FyZHNcbiAgW1xuICAgIC8vIE5ldmVyIHJlcGxhY2UgZXNjYXBlZCAnKidcbiAgICAvLyBpZ25vcmUgcnVsZSAnXFwqJyB3aWxsIG1hdGNoIHRoZSBwYXRoICcqJ1xuXG4gICAgLy8gJ2FiYy4qLycgLT4gZ29cbiAgICAvLyAnYWJjLionICAtPiBza2lwIHRoaXMgcnVsZSxcbiAgICAvLyAgICBjb3ogdHJhaWxpbmcgc2luZ2xlIHdpbGRjYXJkIHdpbGwgYmUgaGFuZGVkIGJ5IFt0cmFpbGluZyB3aWxkY2FyZF1cbiAgICAvKF58W15cXFxcXSspKFxcXFxcXCopKyg/PS4rKS9nLFxuXG4gICAgLy8gJyouanMnIG1hdGNoZXMgJy5qcydcbiAgICAvLyAnKi5qcycgZG9lc24ndCBtYXRjaCAnYWJjJ1xuICAgIChfLCBwMSwgcDIpID0+IHtcbiAgICAgIC8vIDEuXG4gICAgICAvLyA+IEFuIGFzdGVyaXNrIFwiKlwiIG1hdGNoZXMgYW55dGhpbmcgZXhjZXB0IGEgc2xhc2guXG4gICAgICAvLyAyLlxuICAgICAgLy8gPiBPdGhlciBjb25zZWN1dGl2ZSBhc3Rlcmlza3MgYXJlIGNvbnNpZGVyZWQgcmVndWxhciBhc3Rlcmlza3NcbiAgICAgIC8vID4gYW5kIHdpbGwgbWF0Y2ggYWNjb3JkaW5nIHRvIHRoZSBwcmV2aW91cyBydWxlcy5cbiAgICAgIGNvbnN0IHVuZXNjYXBlZCA9IHAyLnJlcGxhY2UoL1xcXFxcXCovZywgJ1teXFxcXC9dKicpXG4gICAgICByZXR1cm4gcDEgKyB1bmVzY2FwZWRcbiAgICB9XG4gIF0sXG5cbiAgW1xuICAgIC8vIHVuZXNjYXBlLCByZXZlcnQgc3RlcCAzIGV4Y2VwdCBmb3IgYmFjayBzbGFzaFxuICAgIC8vIEZvciBleGFtcGxlLCBpZiBhIHVzZXIgZXNjYXBlIGEgJ1xcXFwqJyxcbiAgICAvLyBhZnRlciBzdGVwIDMsIHRoZSByZXN1bHQgd2lsbCBiZSAnXFxcXFxcXFxcXFxcKidcbiAgICAvXFxcXFxcXFxcXFxcKD89WyQufCorKCl7Xl0pL2csXG4gICAgKCkgPT4gRVNDQVBFXG4gIF0sXG5cbiAgW1xuICAgIC8vICdcXFxcXFxcXCcgLT4gJ1xcXFwnXG4gICAgL1xcXFxcXFxcL2csXG4gICAgKCkgPT4gRVNDQVBFXG4gIF0sXG5cbiAgW1xuICAgIC8vID4gVGhlIHJhbmdlIG5vdGF0aW9uLCBlLmcuIFthLXpBLVpdLFxuICAgIC8vID4gY2FuIGJlIHVzZWQgdG8gbWF0Y2ggb25lIG9mIHRoZSBjaGFyYWN0ZXJzIGluIGEgcmFuZ2UuXG5cbiAgICAvLyBgXFxgIGlzIGVzY2FwZWQgYnkgc3RlcCAzXG4gICAgLyhcXFxcKT9cXFsoW15cXF0vXSo/KShcXFxcKikoJHxcXF0pL2csXG4gICAgKG1hdGNoLCBsZWFkRXNjYXBlLCByYW5nZSwgZW5kRXNjYXBlLCBjbG9zZSkgPT4gbGVhZEVzY2FwZSA9PT0gRVNDQVBFXG4gICAgICAvLyAnXFxcXFtiYXJdJyAtPiAnXFxcXFxcXFxbYmFyXFxcXF0nXG4gICAgICA/IGBcXFxcWyR7cmFuZ2V9JHtjbGVhblJhbmdlQmFja1NsYXNoKGVuZEVzY2FwZSl9JHtjbG9zZX1gXG4gICAgICA6IGNsb3NlID09PSAnXSdcbiAgICAgICAgPyBlbmRFc2NhcGUubGVuZ3RoICUgMiA9PT0gMFxuICAgICAgICAgIC8vIEEgbm9ybWFsIGNhc2UsIGFuZCBpdCBpcyBhIHJhbmdlIG5vdGF0aW9uXG4gICAgICAgICAgLy8gJ1tiYXJdJ1xuICAgICAgICAgIC8vICdbYmFyXFxcXFxcXFxdJ1xuICAgICAgICAgID8gYFske3Nhbml0aXplUmFuZ2UocmFuZ2UpfSR7ZW5kRXNjYXBlfV1gXG4gICAgICAgICAgLy8gSW52YWxpZCByYW5nZSBub3RhdG9uXG4gICAgICAgICAgLy8gJ1tiYXJcXFxcXScgLT4gJ1tiYXJcXFxcXFxcXF0nXG4gICAgICAgICAgOiAnW10nXG4gICAgICAgIDogJ1tdJ1xuICBdLFxuXG4gIC8vIGVuZGluZ1xuICBbXG4gICAgLy8gJ2pzJyB3aWxsIG5vdCBtYXRjaCAnanMuJ1xuICAgIC8vICdhYicgd2lsbCBub3QgbWF0Y2ggJ2FiYydcbiAgICAvKD86W14qXSkkLyxcblxuICAgIC8vIFdURiFcbiAgICAvLyBodHRwczovL2dpdC1zY20uY29tL2RvY3MvZ2l0aWdub3JlXG4gICAgLy8gY2hhbmdlcyBpbiBbMi4yMi4xXShodHRwczovL2dpdC1zY20uY29tL2RvY3MvZ2l0aWdub3JlLzIuMjIuMSlcbiAgICAvLyB3aGljaCByZS1maXhlcyAjMjQsICMzOFxuXG4gICAgLy8gPiBJZiB0aGVyZSBpcyBhIHNlcGFyYXRvciBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuIHRoZW4gdGhlIHBhdHRlcm5cbiAgICAvLyA+IHdpbGwgb25seSBtYXRjaCBkaXJlY3Rvcmllcywgb3RoZXJ3aXNlIHRoZSBwYXR0ZXJuIGNhbiBtYXRjaCBib3RoXG4gICAgLy8gPiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuXG5cbiAgICAvLyAnanMqJyB3aWxsIG5vdCBtYXRjaCAnYS5qcydcbiAgICAvLyAnanMvJyB3aWxsIG5vdCBtYXRjaCAnYS5qcydcbiAgICAvLyAnanMnIHdpbGwgbWF0Y2ggJ2EuanMnIGFuZCAnYS5qcy8nXG4gICAgbWF0Y2ggPT4gL1xcLyQvLnRlc3QobWF0Y2gpXG4gICAgICAvLyBmb28vIHdpbGwgbm90IG1hdGNoICdmb28nXG4gICAgICA/IGAke21hdGNofSRgXG4gICAgICAvLyBmb28gbWF0Y2hlcyAnZm9vJyBhbmQgJ2Zvby8nXG4gICAgICA6IGAke21hdGNofSg/PSR8XFxcXC8kKWBcbiAgXSxcblxuICAvLyB0cmFpbGluZyB3aWxkY2FyZFxuICBbXG4gICAgLyhcXF58XFxcXFxcLyk/XFxcXFxcKiQvLFxuICAgIChfLCBwMSkgPT4ge1xuICAgICAgY29uc3QgcHJlZml4ID0gcDFcbiAgICAgICAgLy8gJ1xcXic6XG4gICAgICAgIC8vICcvKicgZG9lcyBub3QgbWF0Y2ggRU1QVFlcbiAgICAgICAgLy8gJy8qJyBkb2VzIG5vdCBtYXRjaCBldmVyeXRoaW5nXG5cbiAgICAgICAgLy8gJ1xcXFxcXC8nOlxuICAgICAgICAvLyAnYWJjLyonIGRvZXMgbm90IG1hdGNoICdhYmMvJ1xuICAgICAgICA/IGAke3AxfVteL10rYFxuXG4gICAgICAgIC8vICdhKicgbWF0Y2hlcyAnYSdcbiAgICAgICAgLy8gJ2EqJyBtYXRjaGVzICdhYSdcbiAgICAgICAgOiAnW14vXSonXG5cbiAgICAgIHJldHVybiBgJHtwcmVmaXh9KD89JHxcXFxcLyQpYFxuICAgIH1cbiAgXSxcbl1cblxuLy8gQSBzaW1wbGUgY2FjaGUsIGJlY2F1c2UgYW4gaWdub3JlIHJ1bGUgb25seSBoYXMgb25seSBvbmUgY2VydGFpbiBtZWFuaW5nXG5jb25zdCByZWdleENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuXG4vLyBAcGFyYW0ge3BhdHRlcm59XG5jb25zdCBtYWtlUmVnZXggPSAocGF0dGVybiwgaWdub3JlQ2FzZSkgPT4ge1xuICBsZXQgc291cmNlID0gcmVnZXhDYWNoZVtwYXR0ZXJuXVxuXG4gIGlmICghc291cmNlKSB7XG4gICAgc291cmNlID0gUkVQTEFDRVJTLnJlZHVjZShcbiAgICAgIChwcmV2LCBjdXJyZW50KSA9PiBwcmV2LnJlcGxhY2UoY3VycmVudFswXSwgY3VycmVudFsxXS5iaW5kKHBhdHRlcm4pKSxcbiAgICAgIHBhdHRlcm5cbiAgICApXG4gICAgcmVnZXhDYWNoZVtwYXR0ZXJuXSA9IHNvdXJjZVxuICB9XG5cbiAgcmV0dXJuIGlnbm9yZUNhc2VcbiAgICA/IG5ldyBSZWdFeHAoc291cmNlLCAnaScpXG4gICAgOiBuZXcgUmVnRXhwKHNvdXJjZSlcbn1cblxuY29uc3QgaXNTdHJpbmcgPSBzdWJqZWN0ID0+IHR5cGVvZiBzdWJqZWN0ID09PSAnc3RyaW5nJ1xuXG4vLyA+IEEgYmxhbmsgbGluZSBtYXRjaGVzIG5vIGZpbGVzLCBzbyBpdCBjYW4gc2VydmUgYXMgYSBzZXBhcmF0b3IgZm9yIHJlYWRhYmlsaXR5LlxuY29uc3QgY2hlY2tQYXR0ZXJuID0gcGF0dGVybiA9PiBwYXR0ZXJuXG4gICYmIGlzU3RyaW5nKHBhdHRlcm4pXG4gICYmICFSRUdFWF9URVNUX0JMQU5LX0xJTkUudGVzdChwYXR0ZXJuKVxuICAmJiAhUkVHRVhfSU5WQUxJRF9UUkFJTElOR19CQUNLU0xBU0gudGVzdChwYXR0ZXJuKVxuXG4gIC8vID4gQSBsaW5lIHN0YXJ0aW5nIHdpdGggIyBzZXJ2ZXMgYXMgYSBjb21tZW50LlxuICAmJiBwYXR0ZXJuLmluZGV4T2YoJyMnKSAhPT0gMFxuXG5jb25zdCBzcGxpdFBhdHRlcm4gPSBwYXR0ZXJuID0+IHBhdHRlcm4uc3BsaXQoUkVHRVhfU1BMSVRBTExfQ1JMRilcblxuY2xhc3MgSWdub3JlUnVsZSB7XG4gIGNvbnN0cnVjdG9yIChcbiAgICBvcmlnaW4sXG4gICAgcGF0dGVybixcbiAgICBuZWdhdGl2ZSxcbiAgICByZWdleFxuICApIHtcbiAgICB0aGlzLm9yaWdpbiA9IG9yaWdpblxuICAgIHRoaXMucGF0dGVybiA9IHBhdHRlcm5cbiAgICB0aGlzLm5lZ2F0aXZlID0gbmVnYXRpdmVcbiAgICB0aGlzLnJlZ2V4ID0gcmVnZXhcbiAgfVxufVxuXG5jb25zdCBjcmVhdGVSdWxlID0gKHBhdHRlcm4sIGlnbm9yZUNhc2UpID0+IHtcbiAgY29uc3Qgb3JpZ2luID0gcGF0dGVyblxuICBsZXQgbmVnYXRpdmUgPSBmYWxzZVxuXG4gIC8vID4gQW4gb3B0aW9uYWwgcHJlZml4IFwiIVwiIHdoaWNoIG5lZ2F0ZXMgdGhlIHBhdHRlcm47XG4gIGlmIChwYXR0ZXJuLmluZGV4T2YoJyEnKSA9PT0gMCkge1xuICAgIG5lZ2F0aXZlID0gdHJ1ZVxuICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnN1YnN0cigxKVxuICB9XG5cbiAgcGF0dGVybiA9IHBhdHRlcm5cbiAgLy8gPiBQdXQgYSBiYWNrc2xhc2ggKFwiXFxcIikgaW4gZnJvbnQgb2YgdGhlIGZpcnN0IFwiIVwiIGZvciBwYXR0ZXJucyB0aGF0XG4gIC8vID4gICBiZWdpbiB3aXRoIGEgbGl0ZXJhbCBcIiFcIiwgZm9yIGV4YW1wbGUsIGBcIlxcIWltcG9ydGFudCEudHh0XCJgLlxuICAucmVwbGFjZShSRUdFWF9SRVBMQUNFX0xFQURJTkdfRVhDQVBFRF9FWENMQU1BVElPTiwgJyEnKVxuICAvLyA+IFB1dCBhIGJhY2tzbGFzaCAoXCJcXFwiKSBpbiBmcm9udCBvZiB0aGUgZmlyc3QgaGFzaCBmb3IgcGF0dGVybnMgdGhhdFxuICAvLyA+ICAgYmVnaW4gd2l0aCBhIGhhc2guXG4gIC5yZXBsYWNlKFJFR0VYX1JFUExBQ0VfTEVBRElOR19FWENBUEVEX0hBU0gsICcjJylcblxuICBjb25zdCByZWdleCA9IG1ha2VSZWdleChwYXR0ZXJuLCBpZ25vcmVDYXNlKVxuXG4gIHJldHVybiBuZXcgSWdub3JlUnVsZShcbiAgICBvcmlnaW4sXG4gICAgcGF0dGVybixcbiAgICBuZWdhdGl2ZSxcbiAgICByZWdleFxuICApXG59XG5cbmNvbnN0IHRocm93RXJyb3IgPSAobWVzc2FnZSwgQ3RvcikgPT4ge1xuICB0aHJvdyBuZXcgQ3RvcihtZXNzYWdlKVxufVxuXG5jb25zdCBjaGVja1BhdGggPSAocGF0aCwgb3JpZ2luYWxQYXRoLCBkb1Rocm93KSA9PiB7XG4gIGlmICghaXNTdHJpbmcocGF0aCkpIHtcbiAgICByZXR1cm4gZG9UaHJvdyhcbiAgICAgIGBwYXRoIG11c3QgYmUgYSBzdHJpbmcsIGJ1dCBnb3QgXFxgJHtvcmlnaW5hbFBhdGh9XFxgYCxcbiAgICAgIFR5cGVFcnJvclxuICAgIClcbiAgfVxuXG4gIC8vIFdlIGRvbid0IGtub3cgaWYgd2Ugc2hvdWxkIGlnbm9yZSBFTVBUWSwgc28gdGhyb3dcbiAgaWYgKCFwYXRoKSB7XG4gICAgcmV0dXJuIGRvVGhyb3coYHBhdGggbXVzdCBub3QgYmUgZW1wdHlgLCBUeXBlRXJyb3IpXG4gIH1cblxuICAvLyBDaGVjayBpZiBpdCBpcyBhIHJlbGF0aXZlIHBhdGhcbiAgaWYgKGNoZWNrUGF0aC5pc05vdFJlbGF0aXZlKHBhdGgpKSB7XG4gICAgY29uc3QgciA9ICdgcGF0aC5yZWxhdGl2ZSgpYGQnXG4gICAgcmV0dXJuIGRvVGhyb3coXG4gICAgICBgcGF0aCBzaG91bGQgYmUgYSAke3J9IHN0cmluZywgYnV0IGdvdCBcIiR7b3JpZ2luYWxQYXRofVwiYCxcbiAgICAgIFJhbmdlRXJyb3JcbiAgICApXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5jb25zdCBpc05vdFJlbGF0aXZlID0gcGF0aCA9PiBSRUdFWF9URVNUX0lOVkFMSURfUEFUSC50ZXN0KHBhdGgpXG5cbmNoZWNrUGF0aC5pc05vdFJlbGF0aXZlID0gaXNOb3RSZWxhdGl2ZVxuY2hlY2tQYXRoLmNvbnZlcnQgPSBwID0+IHBcblxuY2xhc3MgSWdub3JlIHtcbiAgY29uc3RydWN0b3IgKHtcbiAgICBpZ25vcmVjYXNlID0gdHJ1ZSxcbiAgICBpZ25vcmVDYXNlID0gaWdub3JlY2FzZSxcbiAgICBhbGxvd1JlbGF0aXZlUGF0aHMgPSBmYWxzZVxuICB9ID0ge30pIHtcbiAgICBkZWZpbmUodGhpcywgS0VZX0lHTk9SRSwgdHJ1ZSlcblxuICAgIHRoaXMuX3J1bGVzID0gW11cbiAgICB0aGlzLl9pZ25vcmVDYXNlID0gaWdub3JlQ2FzZVxuICAgIHRoaXMuX2FsbG93UmVsYXRpdmVQYXRocyA9IGFsbG93UmVsYXRpdmVQYXRoc1xuICAgIHRoaXMuX2luaXRDYWNoZSgpXG4gIH1cblxuICBfaW5pdENhY2hlICgpIHtcbiAgICB0aGlzLl9pZ25vcmVDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbClcbiAgICB0aGlzLl90ZXN0Q2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpXG4gIH1cblxuICBfYWRkUGF0dGVybiAocGF0dGVybikge1xuICAgIC8vICMzMlxuICAgIGlmIChwYXR0ZXJuICYmIHBhdHRlcm5bS0VZX0lHTk9SRV0pIHtcbiAgICAgIHRoaXMuX3J1bGVzID0gdGhpcy5fcnVsZXMuY29uY2F0KHBhdHRlcm4uX3J1bGVzKVxuICAgICAgdGhpcy5fYWRkZWQgPSB0cnVlXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2hlY2tQYXR0ZXJuKHBhdHRlcm4pKSB7XG4gICAgICBjb25zdCBydWxlID0gY3JlYXRlUnVsZShwYXR0ZXJuLCB0aGlzLl9pZ25vcmVDYXNlKVxuICAgICAgdGhpcy5fYWRkZWQgPSB0cnVlXG4gICAgICB0aGlzLl9ydWxlcy5wdXNoKHJ1bGUpXG4gICAgfVxuICB9XG5cbiAgLy8gQHBhcmFtIHtBcnJheTxzdHJpbmc+IHwgc3RyaW5nIHwgSWdub3JlfSBwYXR0ZXJuXG4gIGFkZCAocGF0dGVybikge1xuICAgIHRoaXMuX2FkZGVkID0gZmFsc2VcblxuICAgIG1ha2VBcnJheShcbiAgICAgIGlzU3RyaW5nKHBhdHRlcm4pXG4gICAgICAgID8gc3BsaXRQYXR0ZXJuKHBhdHRlcm4pXG4gICAgICAgIDogcGF0dGVyblxuICAgICkuZm9yRWFjaCh0aGlzLl9hZGRQYXR0ZXJuLCB0aGlzKVxuXG4gICAgLy8gU29tZSBydWxlcyBoYXZlIGp1c3QgYWRkZWQgdG8gdGhlIGlnbm9yZSxcbiAgICAvLyBtYWtpbmcgdGhlIGJlaGF2aW9yIGNoYW5nZWQuXG4gICAgaWYgKHRoaXMuX2FkZGVkKSB7XG4gICAgICB0aGlzLl9pbml0Q2FjaGUoKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBsZWdhY3lcbiAgYWRkUGF0dGVybiAocGF0dGVybikge1xuICAgIHJldHVybiB0aGlzLmFkZChwYXR0ZXJuKVxuICB9XG5cbiAgLy8gICAgICAgICAgfCAgICAgICAgICAgaWdub3JlZCA6IHVuaWdub3JlZFxuICAvLyBuZWdhdGl2ZSB8ICAgMDowICAgfCAgIDA6MSAgIHwgICAxOjAgICB8ICAgMToxXG4gIC8vIC0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS1cbiAgLy8gICAgIDAgICAgfCAgVEVTVCAgIHwgIFRFU1QgICB8ICBTS0lQICAgfCAgICBYXG4gIC8vICAgICAxICAgIHwgIFRFU1RJRiB8ICBTS0lQICAgfCAgVEVTVCAgIHwgICAgWFxuXG4gIC8vIC0gU0tJUDogYWx3YXlzIHNraXBcbiAgLy8gLSBURVNUOiBhbHdheXMgdGVzdFxuICAvLyAtIFRFU1RJRjogb25seSB0ZXN0IGlmIGNoZWNrVW5pZ25vcmVkXG4gIC8vIC0gWDogdGhhdCBuZXZlciBoYXBwZW5cblxuICAvLyBAcGFyYW0ge2Jvb2xlYW59IHdoZXRoZXIgc2hvdWxkIGNoZWNrIGlmIHRoZSBwYXRoIGlzIHVuaWdub3JlZCxcbiAgLy8gICBzZXR0aW5nIGBjaGVja1VuaWdub3JlZGAgdG8gYGZhbHNlYCBjb3VsZCByZWR1Y2UgYWRkaXRpb25hbFxuICAvLyAgIHBhdGggbWF0Y2hpbmcuXG5cbiAgLy8gQHJldHVybnMge1Rlc3RSZXN1bHR9IHRydWUgaWYgYSBmaWxlIGlzIGlnbm9yZWRcbiAgX3Rlc3RPbmUgKHBhdGgsIGNoZWNrVW5pZ25vcmVkKSB7XG4gICAgbGV0IGlnbm9yZWQgPSBmYWxzZVxuICAgIGxldCB1bmlnbm9yZWQgPSBmYWxzZVxuXG4gICAgdGhpcy5fcnVsZXMuZm9yRWFjaChydWxlID0+IHtcbiAgICAgIGNvbnN0IHtuZWdhdGl2ZX0gPSBydWxlXG4gICAgICBpZiAoXG4gICAgICAgIHVuaWdub3JlZCA9PT0gbmVnYXRpdmUgJiYgaWdub3JlZCAhPT0gdW5pZ25vcmVkXG4gICAgICAgIHx8IG5lZ2F0aXZlICYmICFpZ25vcmVkICYmICF1bmlnbm9yZWQgJiYgIWNoZWNrVW5pZ25vcmVkXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hdGNoZWQgPSBydWxlLnJlZ2V4LnRlc3QocGF0aClcblxuICAgICAgaWYgKG1hdGNoZWQpIHtcbiAgICAgICAgaWdub3JlZCA9ICFuZWdhdGl2ZVxuICAgICAgICB1bmlnbm9yZWQgPSBuZWdhdGl2ZVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4ge1xuICAgICAgaWdub3JlZCxcbiAgICAgIHVuaWdub3JlZFxuICAgIH1cbiAgfVxuXG4gIC8vIEByZXR1cm5zIHtUZXN0UmVzdWx0fVxuICBfdGVzdCAob3JpZ2luYWxQYXRoLCBjYWNoZSwgY2hlY2tVbmlnbm9yZWQsIHNsaWNlcykge1xuICAgIGNvbnN0IHBhdGggPSBvcmlnaW5hbFBhdGhcbiAgICAgIC8vIFN1cHBvcnRzIG51bGxhYmxlIHBhdGhcbiAgICAgICYmIGNoZWNrUGF0aC5jb252ZXJ0KG9yaWdpbmFsUGF0aClcblxuICAgIGNoZWNrUGF0aChcbiAgICAgIHBhdGgsXG4gICAgICBvcmlnaW5hbFBhdGgsXG4gICAgICB0aGlzLl9hbGxvd1JlbGF0aXZlUGF0aHNcbiAgICAgICAgPyBSRVRVUk5fRkFMU0VcbiAgICAgICAgOiB0aHJvd0Vycm9yXG4gICAgKVxuXG4gICAgcmV0dXJuIHRoaXMuX3QocGF0aCwgY2FjaGUsIGNoZWNrVW5pZ25vcmVkLCBzbGljZXMpXG4gIH1cblxuICBfdCAocGF0aCwgY2FjaGUsIGNoZWNrVW5pZ25vcmVkLCBzbGljZXMpIHtcbiAgICBpZiAocGF0aCBpbiBjYWNoZSkge1xuICAgICAgcmV0dXJuIGNhY2hlW3BhdGhdXG4gICAgfVxuXG4gICAgaWYgKCFzbGljZXMpIHtcbiAgICAgIC8vIHBhdGgvdG8vYS5qc1xuICAgICAgLy8gWydwYXRoJywgJ3RvJywgJ2EuanMnXVxuICAgICAgc2xpY2VzID0gcGF0aC5zcGxpdChTTEFTSClcbiAgICB9XG5cbiAgICBzbGljZXMucG9wKClcblxuICAgIC8vIElmIHRoZSBwYXRoIGhhcyBubyBwYXJlbnQgZGlyZWN0b3J5LCBqdXN0IHRlc3QgaXRcbiAgICBpZiAoIXNsaWNlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBjYWNoZVtwYXRoXSA9IHRoaXMuX3Rlc3RPbmUocGF0aCwgY2hlY2tVbmlnbm9yZWQpXG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5fdChcbiAgICAgIHNsaWNlcy5qb2luKFNMQVNIKSArIFNMQVNILFxuICAgICAgY2FjaGUsXG4gICAgICBjaGVja1VuaWdub3JlZCxcbiAgICAgIHNsaWNlc1xuICAgIClcblxuICAgIC8vIElmIHRoZSBwYXRoIGNvbnRhaW5zIGEgcGFyZW50IGRpcmVjdG9yeSwgY2hlY2sgdGhlIHBhcmVudCBmaXJzdFxuICAgIHJldHVybiBjYWNoZVtwYXRoXSA9IHBhcmVudC5pZ25vcmVkXG4gICAgICAvLyA+IEl0IGlzIG5vdCBwb3NzaWJsZSB0byByZS1pbmNsdWRlIGEgZmlsZSBpZiBhIHBhcmVudCBkaXJlY3Rvcnkgb2ZcbiAgICAgIC8vID4gICB0aGF0IGZpbGUgaXMgZXhjbHVkZWQuXG4gICAgICA/IHBhcmVudFxuICAgICAgOiB0aGlzLl90ZXN0T25lKHBhdGgsIGNoZWNrVW5pZ25vcmVkKVxuICB9XG5cbiAgaWdub3JlcyAocGF0aCkge1xuICAgIHJldHVybiB0aGlzLl90ZXN0KHBhdGgsIHRoaXMuX2lnbm9yZUNhY2hlLCBmYWxzZSkuaWdub3JlZFxuICB9XG5cbiAgY3JlYXRlRmlsdGVyICgpIHtcbiAgICByZXR1cm4gcGF0aCA9PiAhdGhpcy5pZ25vcmVzKHBhdGgpXG4gIH1cblxuICBmaWx0ZXIgKHBhdGhzKSB7XG4gICAgcmV0dXJuIG1ha2VBcnJheShwYXRocykuZmlsdGVyKHRoaXMuY3JlYXRlRmlsdGVyKCkpXG4gIH1cblxuICAvLyBAcmV0dXJucyB7VGVzdFJlc3VsdH1cbiAgdGVzdCAocGF0aCkge1xuICAgIHJldHVybiB0aGlzLl90ZXN0KHBhdGgsIHRoaXMuX3Rlc3RDYWNoZSwgdHJ1ZSlcbiAgfVxufVxuXG5jb25zdCBmYWN0b3J5ID0gb3B0aW9ucyA9PiBuZXcgSWdub3JlKG9wdGlvbnMpXG5cbmNvbnN0IGlzUGF0aFZhbGlkID0gcGF0aCA9PlxuICBjaGVja1BhdGgocGF0aCAmJiBjaGVja1BhdGguY29udmVydChwYXRoKSwgcGF0aCwgUkVUVVJOX0ZBTFNFKVxuXG5mYWN0b3J5LmlzUGF0aFZhbGlkID0gaXNQYXRoVmFsaWRcblxuLy8gRml4ZXMgdHlwZXNjcmlwdFxuZmFjdG9yeS5kZWZhdWx0ID0gZmFjdG9yeVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnlcblxuLy8gV2luZG93c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKFxuICAvLyBEZXRlY3QgYHByb2Nlc3NgIHNvIHRoYXQgaXQgY2FuIHJ1biBpbiBicm93c2Vycy5cbiAgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnXG4gICYmIChcbiAgICBwcm9jZXNzLmVudiAmJiBwcm9jZXNzLmVudi5JR05PUkVfVEVTVF9XSU4zMlxuICAgIHx8IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMidcbiAgKVxuKSB7XG4gIC8qIGVzbGludCBuby1jb250cm9sLXJlZ2V4OiBcIm9mZlwiICovXG4gIGNvbnN0IG1ha2VQb3NpeCA9IHN0ciA9PiAvXlxcXFxcXFxcXFw/XFxcXC8udGVzdChzdHIpXG4gIHx8IC9bXCI8PnxcXHUwMDAwLVxcdTAwMUZdKy91LnRlc3Qoc3RyKVxuICAgID8gc3RyXG4gICAgOiBzdHIucmVwbGFjZSgvXFxcXC9nLCAnLycpXG5cbiAgY2hlY2tQYXRoLmNvbnZlcnQgPSBtYWtlUG9zaXhcblxuICAvLyAnQzpcXFxcZm9vJyAgICAgPC0gJ0M6XFxcXGZvbycgaGFzIGJlZW4gY29udmVydGVkIHRvICdDOi8nXG4gIC8vICdkOlxcXFxmb28nXG4gIGNvbnN0IFJFR0lYX0lTX1dJTkRPV1NfUEFUSF9BQlNPTFVURSA9IC9eW2Etel06XFwvL2lcbiAgY2hlY2tQYXRoLmlzTm90UmVsYXRpdmUgPSBwYXRoID0+XG4gICAgUkVHSVhfSVNfV0lORE9XU19QQVRIX0FCU09MVVRFLnRlc3QocGF0aClcbiAgICB8fCBpc05vdFJlbGF0aXZlKHBhdGgpXG59XG4iLCAiZXhwb3J0ICogZnJvbSBcIi4vZ2VuZXJhdGUtb3BlbmFwaVwiXG5leHBvcnQgKiBmcm9tIFwiLi9nZW5lcmF0ZS1yb3V0ZS10eXBlc1wiXG4iLCAiaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCJcbmltcG9ydCB7IGdlbmVyYXRlU2NoZW1hIH0gZnJvbSBcIkBhbmF0aW5lL3pvZC1vcGVuYXBpXCJcbmltcG9ydCB7XG4gIE9wZW5BcGlCdWlsZGVyLFxuICBPcGVyYXRpb25PYmplY3QsXG4gIFBhcmFtZXRlck9iamVjdCxcbn0gZnJvbSBcIm9wZW5hcGkzLXRzL29hczMxXCJcbmltcG9ydCB7IFNldHVwUGFyYW1zIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCJcbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgcGFyc2VSb3V0ZXNJblBhY2thZ2UgfSBmcm9tIFwiLi4vbGliL3BhcnNlLXJvdXRlcy1pbi1wYWNrYWdlXCJcbmltcG9ydCB7IGVtYmVkU2NoZW1hUmVmZXJlbmNlcyB9IGZyb20gXCIuL2VtYmVkLXNjaGVtYS1yZWZlcmVuY2VzXCJcbmltcG9ydCB7IG1hcE1ldGhvZHNUb0Zlcm5TZGtNZXRhZGF0YSB9IGZyb20gXCIuL2Zlcm4tc2RrLXV0aWxzXCJcblxuZnVuY3Rpb24gcmVwbGFjZUZpcnN0Q2hhclRvTG93ZXJjYXNlKHN0cjogc3RyaW5nKSB7XG4gIGlmIChzdHIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHN0clxuICB9XG5cbiAgY29uc3QgZmlyc3RDaGFyID0gc3RyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpXG4gIHJldHVybiBmaXJzdENoYXIgKyBzdHIuc2xpY2UoMSlcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtUGF0aFRvT3BlcmF0aW9uSWQocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFydHMgPSBwYXRoXG4gICAgLnJlcGxhY2UoLy0vZywgXCJfXCIpXG4gICAgLnNwbGl0KFwiL1wiKVxuICAgIC5maWx0ZXIoKHBhcnQpID0+IHBhcnQgIT09IFwiXCIpXG4gIGNvbnN0IHRyYW5zZm9ybWVkUGFydHMgPSBwYXJ0cy5tYXAoKHBhcnQpID0+IHtcbiAgICBpZiAocGFydC5zdGFydHNXaXRoKFwiW1wiKSAmJiBwYXJ0LmVuZHNXaXRoKFwiXVwiKSkge1xuICAgICAgLy8gQ29udmVydCBbcGFyYW1dIHRvIEJ5UGFyYW1cbiAgICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gcGFydC5zbGljZSgxLCAtMSlcbiAgICAgIGNvbnN0IHdvcmRzID0gc2VydmljZU5hbWUuc3BsaXQoXCJfXCIpXG4gICAgICBjb25zdCBjYXBpdGFsaXplZFdvcmRzID0gd29yZHMubWFwKFxuICAgICAgICAod29yZCkgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSlcbiAgICAgIClcbiAgICAgIHJldHVybiBgQnkke2NhcGl0YWxpemVkV29yZHMuam9pbihcIlwiKX1gXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENvbnZlcnQgYXBpX3BhdGggdG8gQXBpUGF0aFxuICAgICAgY29uc3Qgd29yZHMgPSBwYXJ0LnNwbGl0KFwiX1wiKVxuICAgICAgY29uc3QgY2FwaXRhbGl6ZWRXb3JkcyA9IHdvcmRzLm1hcChcbiAgICAgICAgKHdvcmQpID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpXG4gICAgICApXG4gICAgICByZXR1cm4gY2FwaXRhbGl6ZWRXb3Jkcy5qb2luKFwiXCIpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiByZXBsYWNlRmlyc3RDaGFyVG9Mb3dlcmNhc2UodHJhbnNmb3JtZWRQYXJ0cy5qb2luKFwiXCIpKVxufVxuXG5mdW5jdGlvbiBwYXNjYWxDYXNlKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB3b3JkcyA9IGlucHV0LnNwbGl0KFwiIFwiKVxuICBjb25zdCBjYXBpdGFsaXplZFdvcmRzID0gd29yZHMubWFwKFxuICAgICh3b3JkKSA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKS50b0xvd2VyQ2FzZSgpXG4gIClcbiAgY29uc3QgcGFzY2FsQ2FzZVN0cmluZyA9IGNhcGl0YWxpemVkV29yZHMuam9pbihcIlwiKVxuICByZXR1cm4gcGFzY2FsQ2FzZVN0cmluZ1xufVxuXG5pbnRlcmZhY2UgVGFnT3B0aW9uIHtcbiAgbmFtZTogc3RyaW5nXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmdcbiAgZG9lc1JvdXRlSGF2ZVRhZz86IChyb3V0ZTogc3RyaW5nKSA9PiBib29sZWFuXG59XG5cbmludGVyZmFjZSBHZW5lcmF0ZU9wZW5BUElPcHRzIHtcbiAgcGFja2FnZURpcjogc3RyaW5nXG4gIG91dHB1dEZpbGU/OiBzdHJpbmdcbiAgcGF0aEdsb2I/OiBzdHJpbmdcbiAgdGFncz86IEFycmF5PFRhZ09wdGlvbj5cbiAgYXBpUHJlZml4Pzogc3RyaW5nXG4gIG1hcEZpbGVQYXRoVG9IVFRQUm91dGU/OiAoZmlsZV9wYXRoOiBzdHJpbmcpID0+IHN0cmluZ1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIGFuIE9wZW5BUEkgc3BlYyBmcm9tIHRoZSBOZXh0LmpzIEFQSSByb3V0ZXMuXG4gKlxuICogWW91IG5vcm1hbGx5IGludm9rZSB0aGlzIHdpdGggYG5leHRhcGkgZ2VuZXJhdGUtb3BlbmFwaWAgaW4gYVxuICogXCJidWlsZDpvcGVuYXBpXCIgcGFja2FnZS5qc29uIHNjcmlwdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlT3BlbkFQSShvcHRzOiBHZW5lcmF0ZU9wZW5BUElPcHRzKSB7XG4gIGNvbnN0IHsgb3V0cHV0RmlsZSwgdGFncyA9IFtdIH0gPSBvcHRzXG5cbiAgY29uc3QgZmlsZXBhdGhUb1JvdXRlRm4gPSBhd2FpdCBwYXJzZVJvdXRlc0luUGFja2FnZShvcHRzKVxuXG4gIC8vIFRPRE8gZGV0ZWN0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBzZXR1cHMgYW5kIG91dHB1dCBkaWZmZXJlbnQgQVBJc1xuICBjb25zdCB7IHNldHVwUGFyYW1zOiBnbG9iYWxTZXR1cFBhcmFtcyB9ID0gZmlsZXBhdGhUb1JvdXRlRm4udmFsdWVzKCkubmV4dCgpXG4gICAgLnZhbHVlIGFzIHsgc2V0dXBQYXJhbXM6IFNldHVwUGFyYW1zIH1cblxuICBjb25zdCBzZWN1cml0eVNjaGVtZXMgPSBnbG9iYWxTZXR1cFBhcmFtcy5zZWN1cml0eVNjaGVtYXMgPz8ge31cbiAgY29uc3Qgc2VjdXJpdHlPYmplY3RzRm9yQXV0aFR5cGUgPSB7fVxuICBmb3IgKGNvbnN0IGF1dGhOYW1lIG9mIE9iamVjdC5rZXlzKGdsb2JhbFNldHVwUGFyYW1zLmF1dGhNaWRkbGV3YXJlTWFwKSkge1xuICAgIGNvbnN0IG13ID0gZ2xvYmFsU2V0dXBQYXJhbXMuYXV0aE1pZGRsZXdhcmVNYXBbYXV0aE5hbWVdXG4gICAgaWYgKG13LnNlY3VyaXR5U2NoZW1hKSB7XG4gICAgICBzZWN1cml0eVNjaGVtZXNbYXV0aE5hbWVdID0gKG13IGFzIGFueSkuc2VjdXJpdHlTY2hlbWFcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBjaGFsay55ZWxsb3coXG4gICAgICAgICAgYEF1dGhlbnRpY2F0aW9uIG1pZGRsZXdhcmUgXCIke2F1dGhOYW1lfVwiIGhhcyBubyBzZWN1cml0eVNjaGVtYS4gWW91IGNhbiBkZWZpbmUgdGhpcyBvbiB0aGUgZnVuY3Rpb24gKGUuZy4gYWZ0ZXIgdGhlIGV4cG9ydCBkby4uLiBcXG5cXG5teU1pZGRsZXdhcmUuc2VjdXJpdHlTY2hlbWEgPSB7XFxuICB0eXBlOiBcImh0dHBcIlxcbiAgc2NoZW1lOiBcImJlYXJlclwiXFxuICBiZWFyZXJGb3JtYXQ6IFwiSldUXCJcXG4gLy8gb3IgQVBJIFRva2VuIGV0Yy5cXG59XFxuXFxuWW91IGNhbiBhbHNvIGRlZmluZSBcInNlY3VyaXR5T2JqZWN0c1wiIHRoaXMgd2F5LCBpZiB5b3Ugd2FudCB0byBtYWtlIHRoZSBlbmRwb2ludCBzdXBwb3J0IG11bHRpcGxlIG1vZGVzIG9mIGF1dGhlbnRpY2F0aW9uLlxcblxcbmBcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH1cblxuICAgIHNlY3VyaXR5T2JqZWN0c0ZvckF1dGhUeXBlW2F1dGhOYW1lXSA9IChtdyBhcyBhbnkpLnNlY3VyaXR5T2JqZWN0cyB8fCBbXG4gICAgICB7XG4gICAgICAgIFthdXRoTmFtZV06IFtdLFxuICAgICAgfSxcbiAgICBdXG4gIH1cblxuICBjb25zdCBnbG9iYWxTY2hlbWFzID0ge31cbiAgZm9yIChjb25zdCBbc2NoZW1hTmFtZSwgem9kU2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICBnbG9iYWxTZXR1cFBhcmFtcy5nbG9iYWxTY2hlbWFzID8/IHt9XG4gICkpIHtcbiAgICBnbG9iYWxTY2hlbWFzW3NjaGVtYU5hbWVdID0gZ2VuZXJhdGVTY2hlbWEoem9kU2NoZW1hKVxuICB9XG5cbiAgLy8gQnVpbGQgT3BlbkFQSSBzcGVjXG4gIGNvbnN0IGJ1aWxkZXIgPSBPcGVuQXBpQnVpbGRlci5jcmVhdGUoe1xuICAgIG9wZW5hcGk6IFwiMy4wLjBcIixcbiAgICBpbmZvOiB7XG4gICAgICB0aXRsZTogZ2xvYmFsU2V0dXBQYXJhbXMuYXBpTmFtZSxcbiAgICAgIHZlcnNpb246IFwiMS4wLjBcIixcbiAgICB9LFxuICAgIHNlcnZlcnM6IFtcbiAgICAgIHtcbiAgICAgICAgdXJsOiBnbG9iYWxTZXR1cFBhcmFtcy5wcm9kdWN0aW9uU2VydmVyVXJsIHx8IFwiaHR0cHM6Ly9leGFtcGxlLmNvbVwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHRhZ3M6IHRhZ3MubWFwKCh0YWcpID0+ICh7IG5hbWU6IHRhZy5uYW1lLCBkZXNjcmlwdGlvbjogdGFnLmRlc2NyaXB0aW9uIH0pKSxcbiAgICBwYXRoczoge30sXG4gICAgY29tcG9uZW50czoge1xuICAgICAgc2VjdXJpdHlTY2hlbWVzLFxuICAgICAgc2NoZW1hczogZ2xvYmFsU2NoZW1hcyxcbiAgICB9LFxuICB9KVxuXG4gIGZvciAoY29uc3QgW1xuICAgIGZpbGVfcGF0aCxcbiAgICB7IHNldHVwUGFyYW1zLCByb3V0ZVNwZWMsIHJvdXRlOiByb3V0ZVBhdGggfSxcbiAgXSBvZiBmaWxlcGF0aFRvUm91dGVGbikge1xuICAgIGNvbnN0IGlzUG9zdE9yUHV0T3JQYXRjaCA9IFtcIlBPU1RcIiwgXCJQVVRcIiwgXCJQQVRDSFwiXS5zb21lKChtZXRob2QpID0+XG4gICAgICByb3V0ZVNwZWMubWV0aG9kcy5pbmNsdWRlcyhtZXRob2QpXG4gICAgKVxuICAgIC8vIFRPRE86IHN1cHBvcnQgbXVsdGlwYXJ0L2Zvcm0tZGF0YVxuXG4gICAgLy8gaGFuZGxlIGJvZHlcbiAgICBsZXQgYm9keV90b19nZW5lcmF0ZV9zY2hlbWFcbiAgICBpZiAoaXNQb3N0T3JQdXRPclBhdGNoKSB7XG4gICAgICBib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSA9IHJvdXRlU3BlYy5qc29uQm9keSA/PyByb3V0ZVNwZWMuY29tbW9uUGFyYW1zXG5cbiAgICAgIGlmIChyb3V0ZVNwZWMuanNvbkJvZHkgJiYgcm91dGVTcGVjLmNvbW1vblBhcmFtcykge1xuICAgICAgICBib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSA9IHJvdXRlU3BlYy5qc29uQm9keS5tZXJnZShcbiAgICAgICAgICByb3V0ZVNwZWMuY29tbW9uUGFyYW1zXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYm9keV90b19nZW5lcmF0ZV9zY2hlbWEgPSByb3V0ZVNwZWMuanNvbkJvZHlcbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgcXVlcnlcbiAgICBsZXQgcXVlcnlfdG9fZ2VuZXJhdGVfc2NoZW1hXG4gICAgaWYgKGlzUG9zdE9yUHV0T3JQYXRjaCkge1xuICAgICAgcXVlcnlfdG9fZ2VuZXJhdGVfc2NoZW1hID0gcm91dGVTcGVjLnF1ZXJ5UGFyYW1zXG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXJ5X3RvX2dlbmVyYXRlX3NjaGVtYSA9IHJvdXRlU3BlYy5xdWVyeVBhcmFtcyA/PyByb3V0ZVNwZWMuY29tbW9uUGFyYW1zXG5cbiAgICAgIGlmIChyb3V0ZVNwZWMucXVlcnlQYXJhbXMgJiYgcm91dGVTcGVjLmNvbW1vblBhcmFtcykge1xuICAgICAgICBxdWVyeV90b19nZW5lcmF0ZV9zY2hlbWEgPSByb3V0ZVNwZWMucXVlcnlQYXJhbXMubWVyZ2UoXG4gICAgICAgICAgcm91dGVTcGVjLmNvbW1vblBhcmFtc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gREVMRVRFIGFuZCBHRVQgY2Fubm90IGhhdmUgYSBib2R5XG4gICAgbGV0IG1ldGhvZHMgPSByb3V0ZVNwZWMubWV0aG9kc1xuXG4gICAgaWYgKHJvdXRlU3BlYy5tZXRob2RzLmluY2x1ZGVzKFwiREVMRVRFXCIpICYmIGJvZHlfdG9fZ2VuZXJhdGVfc2NoZW1hKSB7XG4gICAgICBtZXRob2RzID0gbWV0aG9kcy5maWx0ZXIoKG0pID0+IG0gIT09IFwiREVMRVRFXCIpXG4gICAgfVxuXG4gICAgaWYgKHJvdXRlU3BlYy5tZXRob2RzLmluY2x1ZGVzKFwiR0VUXCIpICYmIGJvZHlfdG9fZ2VuZXJhdGVfc2NoZW1hKSB7XG4gICAgICBtZXRob2RzID0gbWV0aG9kcy5maWx0ZXIoKG0pID0+IG0gIT09IFwiR0VUXCIpXG4gICAgfVxuXG4gICAgaWYgKG1ldGhvZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGNoYWxrLnllbGxvdyhgU2tpcHBpbmcgcm91dGUgJHtyb3V0ZVBhdGh9IGJlY2F1c2UgaXQgaGFzIG5vIG1ldGhvZHMuYClcbiAgICAgIClcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3Qgcm91dGU6IE9wZXJhdGlvbk9iamVjdCA9IHtcbiAgICAgIHN1bW1hcnk6IHJvdXRlUGF0aCxcbiAgICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJPS1wiLFxuICAgICAgICB9LFxuICAgICAgICA0MDA6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJCYWQgUmVxdWVzdFwiLFxuICAgICAgICB9LFxuICAgICAgICA0MDE6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJVbmF1dGhvcml6ZWRcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzZWN1cml0eTogc2VjdXJpdHlPYmplY3RzRm9yQXV0aFR5cGVbcm91dGVTcGVjLmF1dGhdLFxuICAgIH1cblxuICAgIGlmIChib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSkge1xuICAgICAgcm91dGUucmVxdWVzdEJvZHkgPSB7XG4gICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgICAgc2NoZW1hOiBnZW5lcmF0ZVNjaGVtYShib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSBhcyBhbnkpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5X3RvX2dlbmVyYXRlX3NjaGVtYSkge1xuICAgICAgY29uc3Qgc2NoZW1hID0gZ2VuZXJhdGVTY2hlbWEocXVlcnlfdG9fZ2VuZXJhdGVfc2NoZW1hIGFzIGFueSlcbiAgICAgIGlmIChzY2hlbWEucHJvcGVydGllcykge1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJPYmplY3RbXSA9IE9iamVjdC5rZXlzKFxuICAgICAgICAgIHNjaGVtYS5wcm9wZXJ0aWVzIGFzIGFueVxuICAgICAgICApLm1hcCgobmFtZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgaW46IFwicXVlcnlcIixcbiAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hLnByb3BlcnRpZXMhW25hbWVdLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHNjaGVtYS5yZXF1aXJlZD8uaW5jbHVkZXMobmFtZSksXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIHJvdXRlLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyBqc29uUmVzcG9uc2UgfSA9IHJvdXRlU3BlY1xuICAgIGNvbnN0IHsgYWRkT2tTdGF0dXMgPSB0cnVlIH0gPSBzZXR1cFBhcmFtc1xuXG4gICAgaWYgKGpzb25SZXNwb25zZSkge1xuICAgICAgaWYgKFxuICAgICAgICAhanNvblJlc3BvbnNlLl9kZWYgfHxcbiAgICAgICAgIWpzb25SZXNwb25zZS5fZGVmLnR5cGVOYW1lIHx8XG4gICAgICAgIGpzb25SZXNwb25zZS5fZGVmLnR5cGVOYW1lICE9PSBcIlpvZE9iamVjdFwiXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGNoYWxrLnllbGxvdyhcbiAgICAgICAgICAgIGBTa2lwcGluZyByb3V0ZSAke3JvdXRlUGF0aH0gYmVjYXVzZSB0aGUgcmVzcG9uc2UgaXMgbm90IGEgWm9kT2JqZWN0LmBcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzcG9uc2VTY2hlbWEgPSBnZW5lcmF0ZVNjaGVtYShcbiAgICAgICAgYWRkT2tTdGF0dXMgPyBqc29uUmVzcG9uc2UuZXh0ZW5kKHsgb2s6IHouYm9vbGVhbigpIH0pIDoganNvblJlc3BvbnNlXG4gICAgICApXG5cbiAgICAgIGNvbnN0IHNjaGVtYVdpdGhSZWZlcmVuY2VzID0gZW1iZWRTY2hlbWFSZWZlcmVuY2VzKFxuICAgICAgICByZXNwb25zZVNjaGVtYSxcbiAgICAgICAgZ2xvYmFsU2NoZW1hc1xuICAgICAgKVxuXG4gICAgICByb3V0ZS5yZXNwb25zZXNbMjAwXS5jb250ZW50ID0ge1xuICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgIHNjaGVtYTogc2NoZW1hV2l0aFJlZmVyZW5jZXMsXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgfVxuXG4gICAgcm91dGUudGFncyA9IFtdXG4gICAgZm9yIChjb25zdCB0YWcgb2YgdGFncykge1xuICAgICAgaWYgKHRhZy5kb2VzUm91dGVIYXZlVGFnICYmIHRhZy5kb2VzUm91dGVIYXZlVGFnKHJvdXRlLnN1bW1hcnkgfHwgXCJcIikpIHtcbiAgICAgICAgcm91dGUudGFncy5wdXNoKHRhZy5uYW1lKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1ldGhvZHNNYXBwZWRUb0Zlcm5TZGtNZXRhZGF0YSA9IG1hcE1ldGhvZHNUb0Zlcm5TZGtNZXRhZGF0YShcbiAgICAgIG1ldGhvZHMsXG4gICAgICByb3V0ZVBhdGhcbiAgICApXG5cbiAgICAvLyBTb21lIHJvdXRlcyBhY2NlcHQgbXVsdGlwbGUgbWV0aG9kc1xuICAgIGJ1aWxkZXIuYWRkUGF0aChyb3V0ZVBhdGgsIHtcbiAgICAgIC4uLm1ldGhvZHNcbiAgICAgICAgLm1hcCgobWV0aG9kKSA9PiAoe1xuICAgICAgICAgIFttZXRob2QudG9Mb3dlckNhc2UoKV06IHtcbiAgICAgICAgICAgIC4uLm1ldGhvZHNNYXBwZWRUb0Zlcm5TZGtNZXRhZGF0YVttZXRob2RdLFxuICAgICAgICAgICAgLi4ucm91dGUsXG4gICAgICAgICAgICBvcGVyYXRpb25JZDogYCR7dHJhbnNmb3JtUGF0aFRvT3BlcmF0aW9uSWQocm91dGVQYXRoKX0ke3Bhc2NhbENhc2UoXG4gICAgICAgICAgICAgIG1ldGhvZFxuICAgICAgICAgICAgKX1gLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pKVxuICAgICAgICAucmVkdWNlUmlnaHQoKGFjYywgY3VyKSA9PiAoeyAuLi5hY2MsIC4uLmN1ciB9KSwge30pLFxuICAgIH0pXG4gIH1cblxuICBpZiAob3V0cHV0RmlsZSkge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShvdXRwdXRGaWxlLCBidWlsZGVyLmdldFNwZWNBc0pzb24oKSlcbiAgfVxuXG4gIHJldHVybiBidWlsZGVyLmdldFNwZWNBc0pzb24oKVxufVxuIiwgImltcG9ydCBhbnNpU3R5bGVzIGZyb20gJyNhbnNpLXN0eWxlcyc7XG5pbXBvcnQgc3VwcG9ydHNDb2xvciBmcm9tICcjc3VwcG9ydHMtY29sb3InO1xuaW1wb3J0IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvb3JkZXJcblx0c3RyaW5nUmVwbGFjZUFsbCxcblx0c3RyaW5nRW5jYXNlQ1JMRldpdGhGaXJzdEluZGV4LFxufSBmcm9tICcuL3V0aWxpdGllcy5qcyc7XG5cbmNvbnN0IHtzdGRvdXQ6IHN0ZG91dENvbG9yLCBzdGRlcnI6IHN0ZGVyckNvbG9yfSA9IHN1cHBvcnRzQ29sb3I7XG5cbmNvbnN0IEdFTkVSQVRPUiA9IFN5bWJvbCgnR0VORVJBVE9SJyk7XG5jb25zdCBTVFlMRVIgPSBTeW1ib2woJ1NUWUxFUicpO1xuY29uc3QgSVNfRU1QVFkgPSBTeW1ib2woJ0lTX0VNUFRZJyk7XG5cbi8vIGBzdXBwb3J0c0NvbG9yLmxldmVsYCBcdTIxOTIgYGFuc2lTdHlsZXMuY29sb3JbbmFtZV1gIG1hcHBpbmdcbmNvbnN0IGxldmVsTWFwcGluZyA9IFtcblx0J2Fuc2knLFxuXHQnYW5zaScsXG5cdCdhbnNpMjU2Jyxcblx0J2Fuc2kxNm0nLFxuXTtcblxuY29uc3Qgc3R5bGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuY29uc3QgYXBwbHlPcHRpb25zID0gKG9iamVjdCwgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGlmIChvcHRpb25zLmxldmVsICYmICEoTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zLmxldmVsKSAmJiBvcHRpb25zLmxldmVsID49IDAgJiYgb3B0aW9ucy5sZXZlbCA8PSAzKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignVGhlIGBsZXZlbGAgb3B0aW9uIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGZyb20gMCB0byAzJyk7XG5cdH1cblxuXHQvLyBEZXRlY3QgbGV2ZWwgaWYgbm90IHNldCBtYW51YWxseVxuXHRjb25zdCBjb2xvckxldmVsID0gc3Rkb3V0Q29sb3IgPyBzdGRvdXRDb2xvci5sZXZlbCA6IDA7XG5cdG9iamVjdC5sZXZlbCA9IG9wdGlvbnMubGV2ZWwgPT09IHVuZGVmaW5lZCA/IGNvbG9yTGV2ZWwgOiBvcHRpb25zLmxldmVsO1xufTtcblxuZXhwb3J0IGNsYXNzIENoYWxrIHtcblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdHJ1Y3Rvci1yZXR1cm5cblx0XHRyZXR1cm4gY2hhbGtGYWN0b3J5KG9wdGlvbnMpO1xuXHR9XG59XG5cbmNvbnN0IGNoYWxrRmFjdG9yeSA9IG9wdGlvbnMgPT4ge1xuXHRjb25zdCBjaGFsayA9ICguLi5zdHJpbmdzKSA9PiBzdHJpbmdzLmpvaW4oJyAnKTtcblx0YXBwbHlPcHRpb25zKGNoYWxrLCBvcHRpb25zKTtcblxuXHRPYmplY3Quc2V0UHJvdG90eXBlT2YoY2hhbGssIGNyZWF0ZUNoYWxrLnByb3RvdHlwZSk7XG5cblx0cmV0dXJuIGNoYWxrO1xufTtcblxuZnVuY3Rpb24gY3JlYXRlQ2hhbGsob3B0aW9ucykge1xuXHRyZXR1cm4gY2hhbGtGYWN0b3J5KG9wdGlvbnMpO1xufVxuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoY3JlYXRlQ2hhbGsucHJvdG90eXBlLCBGdW5jdGlvbi5wcm90b3R5cGUpO1xuXG5mb3IgKGNvbnN0IFtzdHlsZU5hbWUsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhhbnNpU3R5bGVzKSkge1xuXHRzdHlsZXNbc3R5bGVOYW1lXSA9IHtcblx0XHRnZXQoKSB7XG5cdFx0XHRjb25zdCBidWlsZGVyID0gY3JlYXRlQnVpbGRlcih0aGlzLCBjcmVhdGVTdHlsZXIoc3R5bGUub3Blbiwgc3R5bGUuY2xvc2UsIHRoaXNbU1RZTEVSXSksIHRoaXNbSVNfRU1QVFldKTtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBzdHlsZU5hbWUsIHt2YWx1ZTogYnVpbGRlcn0pO1xuXHRcdFx0cmV0dXJuIGJ1aWxkZXI7XG5cdFx0fSxcblx0fTtcbn1cblxuc3R5bGVzLnZpc2libGUgPSB7XG5cdGdldCgpIHtcblx0XHRjb25zdCBidWlsZGVyID0gY3JlYXRlQnVpbGRlcih0aGlzLCB0aGlzW1NUWUxFUl0sIHRydWUpO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndmlzaWJsZScsIHt2YWx1ZTogYnVpbGRlcn0pO1xuXHRcdHJldHVybiBidWlsZGVyO1xuXHR9LFxufTtcblxuY29uc3QgZ2V0TW9kZWxBbnNpID0gKG1vZGVsLCBsZXZlbCwgdHlwZSwgLi4uYXJndW1lbnRzXykgPT4ge1xuXHRpZiAobW9kZWwgPT09ICdyZ2InKSB7XG5cdFx0aWYgKGxldmVsID09PSAnYW5zaTE2bScpIHtcblx0XHRcdHJldHVybiBhbnNpU3R5bGVzW3R5cGVdLmFuc2kxNm0oLi4uYXJndW1lbnRzXyk7XG5cdFx0fVxuXG5cdFx0aWYgKGxldmVsID09PSAnYW5zaTI1NicpIHtcblx0XHRcdHJldHVybiBhbnNpU3R5bGVzW3R5cGVdLmFuc2kyNTYoYW5zaVN0eWxlcy5yZ2JUb0Fuc2kyNTYoLi4uYXJndW1lbnRzXykpO1xuXHRcdH1cblxuXHRcdHJldHVybiBhbnNpU3R5bGVzW3R5cGVdLmFuc2koYW5zaVN0eWxlcy5yZ2JUb0Fuc2koLi4uYXJndW1lbnRzXykpO1xuXHR9XG5cblx0aWYgKG1vZGVsID09PSAnaGV4Jykge1xuXHRcdHJldHVybiBnZXRNb2RlbEFuc2koJ3JnYicsIGxldmVsLCB0eXBlLCAuLi5hbnNpU3R5bGVzLmhleFRvUmdiKC4uLmFyZ3VtZW50c18pKTtcblx0fVxuXG5cdHJldHVybiBhbnNpU3R5bGVzW3R5cGVdW21vZGVsXSguLi5hcmd1bWVudHNfKTtcbn07XG5cbmNvbnN0IHVzZWRNb2RlbHMgPSBbJ3JnYicsICdoZXgnLCAnYW5zaTI1NiddO1xuXG5mb3IgKGNvbnN0IG1vZGVsIG9mIHVzZWRNb2RlbHMpIHtcblx0c3R5bGVzW21vZGVsXSA9IHtcblx0XHRnZXQoKSB7XG5cdFx0XHRjb25zdCB7bGV2ZWx9ID0gdGhpcztcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoLi4uYXJndW1lbnRzXykge1xuXHRcdFx0XHRjb25zdCBzdHlsZXIgPSBjcmVhdGVTdHlsZXIoZ2V0TW9kZWxBbnNpKG1vZGVsLCBsZXZlbE1hcHBpbmdbbGV2ZWxdLCAnY29sb3InLCAuLi5hcmd1bWVudHNfKSwgYW5zaVN0eWxlcy5jb2xvci5jbG9zZSwgdGhpc1tTVFlMRVJdKTtcblx0XHRcdFx0cmV0dXJuIGNyZWF0ZUJ1aWxkZXIodGhpcywgc3R5bGVyLCB0aGlzW0lTX0VNUFRZXSk7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdH07XG5cblx0Y29uc3QgYmdNb2RlbCA9ICdiZycgKyBtb2RlbFswXS50b1VwcGVyQ2FzZSgpICsgbW9kZWwuc2xpY2UoMSk7XG5cdHN0eWxlc1tiZ01vZGVsXSA9IHtcblx0XHRnZXQoKSB7XG5cdFx0XHRjb25zdCB7bGV2ZWx9ID0gdGhpcztcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoLi4uYXJndW1lbnRzXykge1xuXHRcdFx0XHRjb25zdCBzdHlsZXIgPSBjcmVhdGVTdHlsZXIoZ2V0TW9kZWxBbnNpKG1vZGVsLCBsZXZlbE1hcHBpbmdbbGV2ZWxdLCAnYmdDb2xvcicsIC4uLmFyZ3VtZW50c18pLCBhbnNpU3R5bGVzLmJnQ29sb3IuY2xvc2UsIHRoaXNbU1RZTEVSXSk7XG5cdFx0XHRcdHJldHVybiBjcmVhdGVCdWlsZGVyKHRoaXMsIHN0eWxlciwgdGhpc1tJU19FTVBUWV0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXHR9O1xufVxuXG5jb25zdCBwcm90byA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCgpID0+IHt9LCB7XG5cdC4uLnN0eWxlcyxcblx0bGV2ZWw6IHtcblx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdGdldCgpIHtcblx0XHRcdHJldHVybiB0aGlzW0dFTkVSQVRPUl0ubGV2ZWw7XG5cdFx0fSxcblx0XHRzZXQobGV2ZWwpIHtcblx0XHRcdHRoaXNbR0VORVJBVE9SXS5sZXZlbCA9IGxldmVsO1xuXHRcdH0sXG5cdH0sXG59KTtcblxuY29uc3QgY3JlYXRlU3R5bGVyID0gKG9wZW4sIGNsb3NlLCBwYXJlbnQpID0+IHtcblx0bGV0IG9wZW5BbGw7XG5cdGxldCBjbG9zZUFsbDtcblx0aWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0b3BlbkFsbCA9IG9wZW47XG5cdFx0Y2xvc2VBbGwgPSBjbG9zZTtcblx0fSBlbHNlIHtcblx0XHRvcGVuQWxsID0gcGFyZW50Lm9wZW5BbGwgKyBvcGVuO1xuXHRcdGNsb3NlQWxsID0gY2xvc2UgKyBwYXJlbnQuY2xvc2VBbGw7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdG9wZW4sXG5cdFx0Y2xvc2UsXG5cdFx0b3BlbkFsbCxcblx0XHRjbG9zZUFsbCxcblx0XHRwYXJlbnQsXG5cdH07XG59O1xuXG5jb25zdCBjcmVhdGVCdWlsZGVyID0gKHNlbGYsIF9zdHlsZXIsIF9pc0VtcHR5KSA9PiB7XG5cdC8vIFNpbmdsZSBhcmd1bWVudCBpcyBob3QgcGF0aCwgaW1wbGljaXQgY29lcmNpb24gaXMgZmFzdGVyIHRoYW4gYW55dGhpbmdcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWltcGxpY2l0LWNvZXJjaW9uXG5cdGNvbnN0IGJ1aWxkZXIgPSAoLi4uYXJndW1lbnRzXykgPT4gYXBwbHlTdHlsZShidWlsZGVyLCAoYXJndW1lbnRzXy5sZW5ndGggPT09IDEpID8gKCcnICsgYXJndW1lbnRzX1swXSkgOiBhcmd1bWVudHNfLmpvaW4oJyAnKSk7XG5cblx0Ly8gV2UgYWx0ZXIgdGhlIHByb3RvdHlwZSBiZWNhdXNlIHdlIG11c3QgcmV0dXJuIGEgZnVuY3Rpb24sIGJ1dCB0aGVyZSBpc1xuXHQvLyBubyB3YXkgdG8gY3JlYXRlIGEgZnVuY3Rpb24gd2l0aCBhIGRpZmZlcmVudCBwcm90b3R5cGVcblx0T2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1aWxkZXIsIHByb3RvKTtcblxuXHRidWlsZGVyW0dFTkVSQVRPUl0gPSBzZWxmO1xuXHRidWlsZGVyW1NUWUxFUl0gPSBfc3R5bGVyO1xuXHRidWlsZGVyW0lTX0VNUFRZXSA9IF9pc0VtcHR5O1xuXG5cdHJldHVybiBidWlsZGVyO1xufTtcblxuY29uc3QgYXBwbHlTdHlsZSA9IChzZWxmLCBzdHJpbmcpID0+IHtcblx0aWYgKHNlbGYubGV2ZWwgPD0gMCB8fCAhc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHNlbGZbSVNfRU1QVFldID8gJycgOiBzdHJpbmc7XG5cdH1cblxuXHRsZXQgc3R5bGVyID0gc2VsZltTVFlMRVJdO1xuXG5cdGlmIChzdHlsZXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBzdHJpbmc7XG5cdH1cblxuXHRjb25zdCB7b3BlbkFsbCwgY2xvc2VBbGx9ID0gc3R5bGVyO1xuXHRpZiAoc3RyaW5nLmluY2x1ZGVzKCdcXHUwMDFCJykpIHtcblx0XHR3aGlsZSAoc3R5bGVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIFJlcGxhY2UgYW55IGluc3RhbmNlcyBhbHJlYWR5IHByZXNlbnQgd2l0aCBhIHJlLW9wZW5pbmcgY29kZVxuXHRcdFx0Ly8gb3RoZXJ3aXNlIG9ubHkgdGhlIHBhcnQgb2YgdGhlIHN0cmluZyB1bnRpbCBzYWlkIGNsb3NpbmcgY29kZVxuXHRcdFx0Ly8gd2lsbCBiZSBjb2xvcmVkLCBhbmQgdGhlIHJlc3Qgd2lsbCBzaW1wbHkgYmUgJ3BsYWluJy5cblx0XHRcdHN0cmluZyA9IHN0cmluZ1JlcGxhY2VBbGwoc3RyaW5nLCBzdHlsZXIuY2xvc2UsIHN0eWxlci5vcGVuKTtcblxuXHRcdFx0c3R5bGVyID0gc3R5bGVyLnBhcmVudDtcblx0XHR9XG5cdH1cblxuXHQvLyBXZSBjYW4gbW92ZSBib3RoIG5leHQgYWN0aW9ucyBvdXQgb2YgbG9vcCwgYmVjYXVzZSByZW1haW5pbmcgYWN0aW9ucyBpbiBsb29wIHdvbid0IGhhdmVcblx0Ly8gYW55L3Zpc2libGUgZWZmZWN0IG9uIHBhcnRzIHdlIGFkZCBoZXJlLiBDbG9zZSB0aGUgc3R5bGluZyBiZWZvcmUgYSBsaW5lYnJlYWsgYW5kIHJlb3BlblxuXHQvLyBhZnRlciBuZXh0IGxpbmUgdG8gZml4IGEgYmxlZWQgaXNzdWUgb24gbWFjT1M6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9jaGFsay9wdWxsLzkyXG5cdGNvbnN0IGxmSW5kZXggPSBzdHJpbmcuaW5kZXhPZignXFxuJyk7XG5cdGlmIChsZkluZGV4ICE9PSAtMSkge1xuXHRcdHN0cmluZyA9IHN0cmluZ0VuY2FzZUNSTEZXaXRoRmlyc3RJbmRleChzdHJpbmcsIGNsb3NlQWxsLCBvcGVuQWxsLCBsZkluZGV4KTtcblx0fVxuXG5cdHJldHVybiBvcGVuQWxsICsgc3RyaW5nICsgY2xvc2VBbGw7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhjcmVhdGVDaGFsay5wcm90b3R5cGUsIHN0eWxlcyk7XG5cbmNvbnN0IGNoYWxrID0gY3JlYXRlQ2hhbGsoKTtcbmV4cG9ydCBjb25zdCBjaGFsa1N0ZGVyciA9IGNyZWF0ZUNoYWxrKHtsZXZlbDogc3RkZXJyQ29sb3IgPyBzdGRlcnJDb2xvci5sZXZlbCA6IDB9KTtcblxuZXhwb3J0IHtcblx0bW9kaWZpZXJOYW1lcyxcblx0Zm9yZWdyb3VuZENvbG9yTmFtZXMsXG5cdGJhY2tncm91bmRDb2xvck5hbWVzLFxuXHRjb2xvck5hbWVzLFxuXG5cdC8vIFRPRE86IFJlbW92ZSB0aGVzZSBhbGlhc2VzIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb25cblx0bW9kaWZpZXJOYW1lcyBhcyBtb2RpZmllcnMsXG5cdGZvcmVncm91bmRDb2xvck5hbWVzIGFzIGZvcmVncm91bmRDb2xvcnMsXG5cdGJhY2tncm91bmRDb2xvck5hbWVzIGFzIGJhY2tncm91bmRDb2xvcnMsXG5cdGNvbG9yTmFtZXMgYXMgY29sb3JzLFxufSBmcm9tICcuL3ZlbmRvci9hbnNpLXN0eWxlcy9pbmRleC5qcyc7XG5cbmV4cG9ydCB7XG5cdHN0ZG91dENvbG9yIGFzIHN1cHBvcnRzQ29sb3IsXG5cdHN0ZGVyckNvbG9yIGFzIHN1cHBvcnRzQ29sb3JTdGRlcnIsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjaGFsaztcbiIsICJjb25zdCBBTlNJX0JBQ0tHUk9VTkRfT0ZGU0VUID0gMTA7XG5cbmNvbnN0IHdyYXBBbnNpMTYgPSAob2Zmc2V0ID0gMCkgPT4gY29kZSA9PiBgXFx1MDAxQlske2NvZGUgKyBvZmZzZXR9bWA7XG5cbmNvbnN0IHdyYXBBbnNpMjU2ID0gKG9mZnNldCA9IDApID0+IGNvZGUgPT4gYFxcdTAwMUJbJHszOCArIG9mZnNldH07NTske2NvZGV9bWA7XG5cbmNvbnN0IHdyYXBBbnNpMTZtID0gKG9mZnNldCA9IDApID0+IChyZWQsIGdyZWVuLCBibHVlKSA9PiBgXFx1MDAxQlskezM4ICsgb2Zmc2V0fTsyOyR7cmVkfTske2dyZWVufTske2JsdWV9bWA7XG5cbmNvbnN0IHN0eWxlcyA9IHtcblx0bW9kaWZpZXI6IHtcblx0XHRyZXNldDogWzAsIDBdLFxuXHRcdC8vIDIxIGlzbid0IHdpZGVseSBzdXBwb3J0ZWQgYW5kIDIyIGRvZXMgdGhlIHNhbWUgdGhpbmdcblx0XHRib2xkOiBbMSwgMjJdLFxuXHRcdGRpbTogWzIsIDIyXSxcblx0XHRpdGFsaWM6IFszLCAyM10sXG5cdFx0dW5kZXJsaW5lOiBbNCwgMjRdLFxuXHRcdG92ZXJsaW5lOiBbNTMsIDU1XSxcblx0XHRpbnZlcnNlOiBbNywgMjddLFxuXHRcdGhpZGRlbjogWzgsIDI4XSxcblx0XHRzdHJpa2V0aHJvdWdoOiBbOSwgMjldLFxuXHR9LFxuXHRjb2xvcjoge1xuXHRcdGJsYWNrOiBbMzAsIDM5XSxcblx0XHRyZWQ6IFszMSwgMzldLFxuXHRcdGdyZWVuOiBbMzIsIDM5XSxcblx0XHR5ZWxsb3c6IFszMywgMzldLFxuXHRcdGJsdWU6IFszNCwgMzldLFxuXHRcdG1hZ2VudGE6IFszNSwgMzldLFxuXHRcdGN5YW46IFszNiwgMzldLFxuXHRcdHdoaXRlOiBbMzcsIDM5XSxcblxuXHRcdC8vIEJyaWdodCBjb2xvclxuXHRcdGJsYWNrQnJpZ2h0OiBbOTAsIDM5XSxcblx0XHRncmF5OiBbOTAsIDM5XSwgLy8gQWxpYXMgb2YgYGJsYWNrQnJpZ2h0YFxuXHRcdGdyZXk6IFs5MCwgMzldLCAvLyBBbGlhcyBvZiBgYmxhY2tCcmlnaHRgXG5cdFx0cmVkQnJpZ2h0OiBbOTEsIDM5XSxcblx0XHRncmVlbkJyaWdodDogWzkyLCAzOV0sXG5cdFx0eWVsbG93QnJpZ2h0OiBbOTMsIDM5XSxcblx0XHRibHVlQnJpZ2h0OiBbOTQsIDM5XSxcblx0XHRtYWdlbnRhQnJpZ2h0OiBbOTUsIDM5XSxcblx0XHRjeWFuQnJpZ2h0OiBbOTYsIDM5XSxcblx0XHR3aGl0ZUJyaWdodDogWzk3LCAzOV0sXG5cdH0sXG5cdGJnQ29sb3I6IHtcblx0XHRiZ0JsYWNrOiBbNDAsIDQ5XSxcblx0XHRiZ1JlZDogWzQxLCA0OV0sXG5cdFx0YmdHcmVlbjogWzQyLCA0OV0sXG5cdFx0YmdZZWxsb3c6IFs0MywgNDldLFxuXHRcdGJnQmx1ZTogWzQ0LCA0OV0sXG5cdFx0YmdNYWdlbnRhOiBbNDUsIDQ5XSxcblx0XHRiZ0N5YW46IFs0NiwgNDldLFxuXHRcdGJnV2hpdGU6IFs0NywgNDldLFxuXG5cdFx0Ly8gQnJpZ2h0IGNvbG9yXG5cdFx0YmdCbGFja0JyaWdodDogWzEwMCwgNDldLFxuXHRcdGJnR3JheTogWzEwMCwgNDldLCAvLyBBbGlhcyBvZiBgYmdCbGFja0JyaWdodGBcblx0XHRiZ0dyZXk6IFsxMDAsIDQ5XSwgLy8gQWxpYXMgb2YgYGJnQmxhY2tCcmlnaHRgXG5cdFx0YmdSZWRCcmlnaHQ6IFsxMDEsIDQ5XSxcblx0XHRiZ0dyZWVuQnJpZ2h0OiBbMTAyLCA0OV0sXG5cdFx0YmdZZWxsb3dCcmlnaHQ6IFsxMDMsIDQ5XSxcblx0XHRiZ0JsdWVCcmlnaHQ6IFsxMDQsIDQ5XSxcblx0XHRiZ01hZ2VudGFCcmlnaHQ6IFsxMDUsIDQ5XSxcblx0XHRiZ0N5YW5CcmlnaHQ6IFsxMDYsIDQ5XSxcblx0XHRiZ1doaXRlQnJpZ2h0OiBbMTA3LCA0OV0sXG5cdH0sXG59O1xuXG5leHBvcnQgY29uc3QgbW9kaWZpZXJOYW1lcyA9IE9iamVjdC5rZXlzKHN0eWxlcy5tb2RpZmllcik7XG5leHBvcnQgY29uc3QgZm9yZWdyb3VuZENvbG9yTmFtZXMgPSBPYmplY3Qua2V5cyhzdHlsZXMuY29sb3IpO1xuZXhwb3J0IGNvbnN0IGJhY2tncm91bmRDb2xvck5hbWVzID0gT2JqZWN0LmtleXMoc3R5bGVzLmJnQ29sb3IpO1xuZXhwb3J0IGNvbnN0IGNvbG9yTmFtZXMgPSBbLi4uZm9yZWdyb3VuZENvbG9yTmFtZXMsIC4uLmJhY2tncm91bmRDb2xvck5hbWVzXTtcblxuZnVuY3Rpb24gYXNzZW1ibGVTdHlsZXMoKSB7XG5cdGNvbnN0IGNvZGVzID0gbmV3IE1hcCgpO1xuXG5cdGZvciAoY29uc3QgW2dyb3VwTmFtZSwgZ3JvdXBdIG9mIE9iamVjdC5lbnRyaWVzKHN0eWxlcykpIHtcblx0XHRmb3IgKGNvbnN0IFtzdHlsZU5hbWUsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhncm91cCkpIHtcblx0XHRcdHN0eWxlc1tzdHlsZU5hbWVdID0ge1xuXHRcdFx0XHRvcGVuOiBgXFx1MDAxQlske3N0eWxlWzBdfW1gLFxuXHRcdFx0XHRjbG9zZTogYFxcdTAwMUJbJHtzdHlsZVsxXX1tYCxcblx0XHRcdH07XG5cblx0XHRcdGdyb3VwW3N0eWxlTmFtZV0gPSBzdHlsZXNbc3R5bGVOYW1lXTtcblxuXHRcdFx0Y29kZXMuc2V0KHN0eWxlWzBdLCBzdHlsZVsxXSk7XG5cdFx0fVxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHN0eWxlcywgZ3JvdXBOYW1lLCB7XG5cdFx0XHR2YWx1ZTogZ3JvdXAsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR9KTtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsICdjb2RlcycsIHtcblx0XHR2YWx1ZTogY29kZXMsXG5cdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdH0pO1xuXG5cdHN0eWxlcy5jb2xvci5jbG9zZSA9ICdcXHUwMDFCWzM5bSc7XG5cdHN0eWxlcy5iZ0NvbG9yLmNsb3NlID0gJ1xcdTAwMUJbNDltJztcblxuXHRzdHlsZXMuY29sb3IuYW5zaSA9IHdyYXBBbnNpMTYoKTtcblx0c3R5bGVzLmNvbG9yLmFuc2kyNTYgPSB3cmFwQW5zaTI1NigpO1xuXHRzdHlsZXMuY29sb3IuYW5zaTE2bSA9IHdyYXBBbnNpMTZtKCk7XG5cdHN0eWxlcy5iZ0NvbG9yLmFuc2kgPSB3cmFwQW5zaTE2KEFOU0lfQkFDS0dST1VORF9PRkZTRVQpO1xuXHRzdHlsZXMuYmdDb2xvci5hbnNpMjU2ID0gd3JhcEFuc2kyNTYoQU5TSV9CQUNLR1JPVU5EX09GRlNFVCk7XG5cdHN0eWxlcy5iZ0NvbG9yLmFuc2kxNm0gPSB3cmFwQW5zaTE2bShBTlNJX0JBQ0tHUk9VTkRfT0ZGU0VUKTtcblxuXHQvLyBGcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9RaXgtL2NvbG9yLWNvbnZlcnQvYmxvYi8zZjBlMGQ0ZTkyZTIzNTc5NmNjYjE3ZjZlODVjNzIwOTRhNjUxZjQ5L2NvbnZlcnNpb25zLmpzXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHN0eWxlcywge1xuXHRcdHJnYlRvQW5zaTI1Njoge1xuXHRcdFx0dmFsdWUocmVkLCBncmVlbiwgYmx1ZSkge1xuXHRcdFx0XHQvLyBXZSB1c2UgdGhlIGV4dGVuZGVkIGdyZXlzY2FsZSBwYWxldHRlIGhlcmUsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZlxuXHRcdFx0XHQvLyBibGFjayBhbmQgd2hpdGUuIG5vcm1hbCBwYWxldHRlIG9ubHkgaGFzIDQgZ3JleXNjYWxlIHNoYWRlcy5cblx0XHRcdFx0aWYgKHJlZCA9PT0gZ3JlZW4gJiYgZ3JlZW4gPT09IGJsdWUpIHtcblx0XHRcdFx0XHRpZiAocmVkIDwgOCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIDE2O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChyZWQgPiAyNDgpIHtcblx0XHRcdFx0XHRcdHJldHVybiAyMzE7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIE1hdGgucm91bmQoKChyZWQgLSA4KSAvIDI0NykgKiAyNCkgKyAyMzI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gMTZcblx0XHRcdFx0XHQrICgzNiAqIE1hdGgucm91bmQocmVkIC8gMjU1ICogNSkpXG5cdFx0XHRcdFx0KyAoNiAqIE1hdGgucm91bmQoZ3JlZW4gLyAyNTUgKiA1KSlcblx0XHRcdFx0XHQrIE1hdGgucm91bmQoYmx1ZSAvIDI1NSAqIDUpO1xuXHRcdFx0fSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdFx0aGV4VG9SZ2I6IHtcblx0XHRcdHZhbHVlKGhleCkge1xuXHRcdFx0XHRjb25zdCBtYXRjaGVzID0gL1thLWZcXGRdezZ9fFthLWZcXGRdezN9L2kuZXhlYyhoZXgudG9TdHJpbmcoMTYpKTtcblx0XHRcdFx0aWYgKCFtYXRjaGVzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFswLCAwLCAwXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCBbY29sb3JTdHJpbmddID0gbWF0Y2hlcztcblxuXHRcdFx0XHRpZiAoY29sb3JTdHJpbmcubGVuZ3RoID09PSAzKSB7XG5cdFx0XHRcdFx0Y29sb3JTdHJpbmcgPSBbLi4uY29sb3JTdHJpbmddLm1hcChjaGFyYWN0ZXIgPT4gY2hhcmFjdGVyICsgY2hhcmFjdGVyKS5qb2luKCcnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGludGVnZXIgPSBOdW1iZXIucGFyc2VJbnQoY29sb3JTdHJpbmcsIDE2KTtcblxuXHRcdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWJpdHdpc2UgKi9cblx0XHRcdFx0XHQoaW50ZWdlciA+PiAxNikgJiAweEZGLFxuXHRcdFx0XHRcdChpbnRlZ2VyID4+IDgpICYgMHhGRixcblx0XHRcdFx0XHRpbnRlZ2VyICYgMHhGRixcblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWJpdHdpc2UgKi9cblx0XHRcdFx0XTtcblx0XHRcdH0sXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR9LFxuXHRcdGhleFRvQW5zaTI1Njoge1xuXHRcdFx0dmFsdWU6IGhleCA9PiBzdHlsZXMucmdiVG9BbnNpMjU2KC4uLnN0eWxlcy5oZXhUb1JnYihoZXgpKSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdFx0YW5zaTI1NlRvQW5zaToge1xuXHRcdFx0dmFsdWUoY29kZSkge1xuXHRcdFx0XHRpZiAoY29kZSA8IDgpIHtcblx0XHRcdFx0XHRyZXR1cm4gMzAgKyBjb2RlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGNvZGUgPCAxNikge1xuXHRcdFx0XHRcdHJldHVybiA5MCArIChjb2RlIC0gOCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsZXQgcmVkO1xuXHRcdFx0XHRsZXQgZ3JlZW47XG5cdFx0XHRcdGxldCBibHVlO1xuXG5cdFx0XHRcdGlmIChjb2RlID49IDIzMikge1xuXHRcdFx0XHRcdHJlZCA9ICgoKGNvZGUgLSAyMzIpICogMTApICsgOCkgLyAyNTU7XG5cdFx0XHRcdFx0Z3JlZW4gPSByZWQ7XG5cdFx0XHRcdFx0Ymx1ZSA9IHJlZDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb2RlIC09IDE2O1xuXG5cdFx0XHRcdFx0Y29uc3QgcmVtYWluZGVyID0gY29kZSAlIDM2O1xuXG5cdFx0XHRcdFx0cmVkID0gTWF0aC5mbG9vcihjb2RlIC8gMzYpIC8gNTtcblx0XHRcdFx0XHRncmVlbiA9IE1hdGguZmxvb3IocmVtYWluZGVyIC8gNikgLyA1O1xuXHRcdFx0XHRcdGJsdWUgPSAocmVtYWluZGVyICUgNikgLyA1O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBNYXRoLm1heChyZWQsIGdyZWVuLCBibHVlKSAqIDI7XG5cblx0XHRcdFx0aWYgKHZhbHVlID09PSAwKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDMwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2Vcblx0XHRcdFx0bGV0IHJlc3VsdCA9IDMwICsgKChNYXRoLnJvdW5kKGJsdWUpIDw8IDIpIHwgKE1hdGgucm91bmQoZ3JlZW4pIDw8IDEpIHwgTWF0aC5yb3VuZChyZWQpKTtcblxuXHRcdFx0XHRpZiAodmFsdWUgPT09IDIpIHtcblx0XHRcdFx0XHRyZXN1bHQgKz0gNjA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdFx0cmdiVG9BbnNpOiB7XG5cdFx0XHR2YWx1ZTogKHJlZCwgZ3JlZW4sIGJsdWUpID0+IHN0eWxlcy5hbnNpMjU2VG9BbnNpKHN0eWxlcy5yZ2JUb0Fuc2kyNTYocmVkLCBncmVlbiwgYmx1ZSkpLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0fSxcblx0XHRoZXhUb0Fuc2k6IHtcblx0XHRcdHZhbHVlOiBoZXggPT4gc3R5bGVzLmFuc2kyNTZUb0Fuc2koc3R5bGVzLmhleFRvQW5zaTI1NihoZXgpKSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdH0pO1xuXG5cdHJldHVybiBzdHlsZXM7XG59XG5cbmNvbnN0IGFuc2lTdHlsZXMgPSBhc3NlbWJsZVN0eWxlcygpO1xuXG5leHBvcnQgZGVmYXVsdCBhbnNpU3R5bGVzO1xuIiwgImltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgb3MgZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgdHR5IGZyb20gJ25vZGU6dHR5JztcblxuLy8gRnJvbTogaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9oYXMtZmxhZy9ibG9iL21haW4vaW5kZXguanNcbi8vLyBmdW5jdGlvbiBoYXNGbGFnKGZsYWcsIGFyZ3YgPSBnbG9iYWxUaGlzLkRlbm8/LmFyZ3MgPz8gcHJvY2Vzcy5hcmd2KSB7XG5mdW5jdGlvbiBoYXNGbGFnKGZsYWcsIGFyZ3YgPSBnbG9iYWxUaGlzLkRlbm8gPyBnbG9iYWxUaGlzLkRlbm8uYXJncyA6IHByb2Nlc3MuYXJndikge1xuXHRjb25zdCBwcmVmaXggPSBmbGFnLnN0YXJ0c1dpdGgoJy0nKSA/ICcnIDogKGZsYWcubGVuZ3RoID09PSAxID8gJy0nIDogJy0tJyk7XG5cdGNvbnN0IHBvc2l0aW9uID0gYXJndi5pbmRleE9mKHByZWZpeCArIGZsYWcpO1xuXHRjb25zdCB0ZXJtaW5hdG9yUG9zaXRpb24gPSBhcmd2LmluZGV4T2YoJy0tJyk7XG5cdHJldHVybiBwb3NpdGlvbiAhPT0gLTEgJiYgKHRlcm1pbmF0b3JQb3NpdGlvbiA9PT0gLTEgfHwgcG9zaXRpb24gPCB0ZXJtaW5hdG9yUG9zaXRpb24pO1xufVxuXG5jb25zdCB7ZW52fSA9IHByb2Nlc3M7XG5cbmxldCBmbGFnRm9yY2VDb2xvcjtcbmlmIChcblx0aGFzRmxhZygnbm8tY29sb3InKVxuXHR8fCBoYXNGbGFnKCduby1jb2xvcnMnKVxuXHR8fCBoYXNGbGFnKCdjb2xvcj1mYWxzZScpXG5cdHx8IGhhc0ZsYWcoJ2NvbG9yPW5ldmVyJylcbikge1xuXHRmbGFnRm9yY2VDb2xvciA9IDA7XG59IGVsc2UgaWYgKFxuXHRoYXNGbGFnKCdjb2xvcicpXG5cdHx8IGhhc0ZsYWcoJ2NvbG9ycycpXG5cdHx8IGhhc0ZsYWcoJ2NvbG9yPXRydWUnKVxuXHR8fCBoYXNGbGFnKCdjb2xvcj1hbHdheXMnKVxuKSB7XG5cdGZsYWdGb3JjZUNvbG9yID0gMTtcbn1cblxuZnVuY3Rpb24gZW52Rm9yY2VDb2xvcigpIHtcblx0aWYgKCdGT1JDRV9DT0xPUicgaW4gZW52KSB7XG5cdFx0aWYgKGVudi5GT1JDRV9DT0xPUiA9PT0gJ3RydWUnKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cblx0XHRpZiAoZW52LkZPUkNFX0NPTE9SID09PSAnZmFsc2UnKSB7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZW52LkZPUkNFX0NPTE9SLmxlbmd0aCA9PT0gMCA/IDEgOiBNYXRoLm1pbihOdW1iZXIucGFyc2VJbnQoZW52LkZPUkNFX0NPTE9SLCAxMCksIDMpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUxldmVsKGxldmVsKSB7XG5cdGlmIChsZXZlbCA9PT0gMCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bGV2ZWwsXG5cdFx0aGFzQmFzaWM6IHRydWUsXG5cdFx0aGFzMjU2OiBsZXZlbCA+PSAyLFxuXHRcdGhhczE2bTogbGV2ZWwgPj0gMyxcblx0fTtcbn1cblxuZnVuY3Rpb24gX3N1cHBvcnRzQ29sb3IoaGF2ZVN0cmVhbSwge3N0cmVhbUlzVFRZLCBzbmlmZkZsYWdzID0gdHJ1ZX0gPSB7fSkge1xuXHRjb25zdCBub0ZsYWdGb3JjZUNvbG9yID0gZW52Rm9yY2VDb2xvcigpO1xuXHRpZiAobm9GbGFnRm9yY2VDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0ZmxhZ0ZvcmNlQ29sb3IgPSBub0ZsYWdGb3JjZUNvbG9yO1xuXHR9XG5cblx0Y29uc3QgZm9yY2VDb2xvciA9IHNuaWZmRmxhZ3MgPyBmbGFnRm9yY2VDb2xvciA6IG5vRmxhZ0ZvcmNlQ29sb3I7XG5cblx0aWYgKGZvcmNlQ29sb3IgPT09IDApIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGlmIChzbmlmZkZsYWdzKSB7XG5cdFx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTE2bScpXG5cdFx0XHR8fCBoYXNGbGFnKCdjb2xvcj1mdWxsJylcblx0XHRcdHx8IGhhc0ZsYWcoJ2NvbG9yPXRydWVjb2xvcicpKSB7XG5cdFx0XHRyZXR1cm4gMztcblx0XHR9XG5cblx0XHRpZiAoaGFzRmxhZygnY29sb3I9MjU2JykpIHtcblx0XHRcdHJldHVybiAyO1xuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIGZvciBBenVyZSBEZXZPcHMgcGlwZWxpbmVzLlxuXHQvLyBIYXMgdG8gYmUgYWJvdmUgdGhlIGAhc3RyZWFtSXNUVFlgIGNoZWNrLlxuXHRpZiAoJ1RGX0JVSUxEJyBpbiBlbnYgJiYgJ0FHRU5UX05BTUUnIGluIGVudikge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKGhhdmVTdHJlYW0gJiYgIXN0cmVhbUlzVFRZICYmIGZvcmNlQ29sb3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Y29uc3QgbWluID0gZm9yY2VDb2xvciB8fCAwO1xuXG5cdGlmIChlbnYuVEVSTSA9PT0gJ2R1bWInKSB7XG5cdFx0cmV0dXJuIG1pbjtcblx0fVxuXG5cdGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG5cdFx0Ly8gV2luZG93cyAxMCBidWlsZCAxMDU4NiBpcyB0aGUgZmlyc3QgV2luZG93cyByZWxlYXNlIHRoYXQgc3VwcG9ydHMgMjU2IGNvbG9ycy5cblx0XHQvLyBXaW5kb3dzIDEwIGJ1aWxkIDE0OTMxIGlzIHRoZSBmaXJzdCByZWxlYXNlIHRoYXQgc3VwcG9ydHMgMTZtL1RydWVDb2xvci5cblx0XHRjb25zdCBvc1JlbGVhc2UgPSBvcy5yZWxlYXNlKCkuc3BsaXQoJy4nKTtcblx0XHRpZiAoXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzBdKSA+PSAxMFxuXHRcdFx0JiYgTnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTBfNTg2XG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gTnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTRfOTMxID8gMyA6IDI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NJJyBpbiBlbnYpIHtcblx0XHRpZiAoJ0dJVEhVQl9BQ1RJT05TJyBpbiBlbnYgfHwgJ0dJVEVBX0FDVElPTlMnIGluIGVudikge1xuXHRcdFx0cmV0dXJuIDM7XG5cdFx0fVxuXG5cdFx0aWYgKFsnVFJBVklTJywgJ0NJUkNMRUNJJywgJ0FQUFZFWU9SJywgJ0dJVExBQl9DSScsICdCVUlMREtJVEUnLCAnRFJPTkUnXS5zb21lKHNpZ24gPT4gc2lnbiBpbiBlbnYpIHx8IGVudi5DSV9OQU1FID09PSAnY29kZXNoaXAnKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0aWYgKCdURUFNQ0lUWV9WRVJTSU9OJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gL14oOVxcLigwKlsxLTldXFxkKilcXC58XFxkezIsfVxcLikvLnRlc3QoZW52LlRFQU1DSVRZX1ZFUlNJT04pID8gMSA6IDA7XG5cdH1cblxuXHRpZiAoZW52LkNPTE9SVEVSTSA9PT0gJ3RydWVjb2xvcicpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmIChlbnYuVEVSTSA9PT0gJ3h0ZXJtLWtpdHR5Jykge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKCdURVJNX1BST0dSQU0nIGluIGVudikge1xuXHRcdGNvbnN0IHZlcnNpb24gPSBOdW1iZXIucGFyc2VJbnQoKGVudi5URVJNX1BST0dSQU1fVkVSU0lPTiB8fCAnJykuc3BsaXQoJy4nKVswXSwgMTApO1xuXG5cdFx0c3dpdGNoIChlbnYuVEVSTV9QUk9HUkFNKSB7XG5cdFx0XHRjYXNlICdpVGVybS5hcHAnOiB7XG5cdFx0XHRcdHJldHVybiB2ZXJzaW9uID49IDMgPyAzIDogMjtcblx0XHRcdH1cblxuXHRcdFx0Y2FzZSAnQXBwbGVfVGVybWluYWwnOiB7XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0fVxuXHRcdFx0Ly8gTm8gZGVmYXVsdFxuXHRcdH1cblx0fVxuXG5cdGlmICgvLTI1Nihjb2xvcik/JC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblxuXHRpZiAoL15zY3JlZW58Xnh0ZXJtfF52dDEwMHxednQyMjB8XnJ4dnR8Y29sb3J8YW5zaXxjeWd3aW58bGludXgvaS50ZXN0KGVudi5URVJNKSkge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDT0xPUlRFUk0nIGluIGVudikge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0cmV0dXJuIG1pbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN1cHBvcnRzQ29sb3Ioc3RyZWFtLCBvcHRpb25zID0ge30pIHtcblx0Y29uc3QgbGV2ZWwgPSBfc3VwcG9ydHNDb2xvcihzdHJlYW0sIHtcblx0XHRzdHJlYW1Jc1RUWTogc3RyZWFtICYmIHN0cmVhbS5pc1RUWSxcblx0XHQuLi5vcHRpb25zLFxuXHR9KTtcblxuXHRyZXR1cm4gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpO1xufVxuXG5jb25zdCBzdXBwb3J0c0NvbG9yID0ge1xuXHRzdGRvdXQ6IGNyZWF0ZVN1cHBvcnRzQ29sb3Ioe2lzVFRZOiB0dHkuaXNhdHR5KDEpfSksXG5cdHN0ZGVycjogY3JlYXRlU3VwcG9ydHNDb2xvcih7aXNUVFk6IHR0eS5pc2F0dHkoMil9KSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHN1cHBvcnRzQ29sb3I7XG4iLCAiLy8gVE9ETzogV2hlbiB0YXJnZXRpbmcgTm9kZS5qcyAxNiwgdXNlIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VBbGxgLlxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ1JlcGxhY2VBbGwoc3RyaW5nLCBzdWJzdHJpbmcsIHJlcGxhY2VyKSB7XG5cdGxldCBpbmRleCA9IHN0cmluZy5pbmRleE9mKHN1YnN0cmluZyk7XG5cdGlmIChpbmRleCA9PT0gLTEpIHtcblx0XHRyZXR1cm4gc3RyaW5nO1xuXHR9XG5cblx0Y29uc3Qgc3Vic3RyaW5nTGVuZ3RoID0gc3Vic3RyaW5nLmxlbmd0aDtcblx0bGV0IGVuZEluZGV4ID0gMDtcblx0bGV0IHJldHVyblZhbHVlID0gJyc7XG5cdGRvIHtcblx0XHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc2xpY2UoZW5kSW5kZXgsIGluZGV4KSArIHN1YnN0cmluZyArIHJlcGxhY2VyO1xuXHRcdGVuZEluZGV4ID0gaW5kZXggKyBzdWJzdHJpbmdMZW5ndGg7XG5cdFx0aW5kZXggPSBzdHJpbmcuaW5kZXhPZihzdWJzdHJpbmcsIGVuZEluZGV4KTtcblx0fSB3aGlsZSAoaW5kZXggIT09IC0xKTtcblxuXHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc2xpY2UoZW5kSW5kZXgpO1xuXHRyZXR1cm4gcmV0dXJuVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdFbmNhc2VDUkxGV2l0aEZpcnN0SW5kZXgoc3RyaW5nLCBwcmVmaXgsIHBvc3RmaXgsIGluZGV4KSB7XG5cdGxldCBlbmRJbmRleCA9IDA7XG5cdGxldCByZXR1cm5WYWx1ZSA9ICcnO1xuXHRkbyB7XG5cdFx0Y29uc3QgZ290Q1IgPSBzdHJpbmdbaW5kZXggLSAxXSA9PT0gJ1xccic7XG5cdFx0cmV0dXJuVmFsdWUgKz0gc3RyaW5nLnNsaWNlKGVuZEluZGV4LCAoZ290Q1IgPyBpbmRleCAtIDEgOiBpbmRleCkpICsgcHJlZml4ICsgKGdvdENSID8gJ1xcclxcbicgOiAnXFxuJykgKyBwb3N0Zml4O1xuXHRcdGVuZEluZGV4ID0gaW5kZXggKyAxO1xuXHRcdGluZGV4ID0gc3RyaW5nLmluZGV4T2YoJ1xcbicsIGVuZEluZGV4KTtcblx0fSB3aGlsZSAoaW5kZXggIT09IC0xKTtcblxuXHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc2xpY2UoZW5kSW5kZXgpO1xuXHRyZXR1cm4gcmV0dXJuVmFsdWU7XG59XG4iLCAiaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiXG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7IGdsb2JieSB9IGZyb20gXCJnbG9iYnlcIlxuaW1wb3J0IHsgUm91dGVTcGVjLCBTZXR1cFBhcmFtcyB9IGZyb20gXCIuLi8uLi90eXBlc1wiXG5pbXBvcnQgeyBkZWZhdWx0TWFwRmlsZVBhdGhUb0hUVFBSb3V0ZSB9IGZyb20gXCIuL2RlZmF1bHQtbWFwLWZpbGUtcGF0aC10by1odHRwLXJvdXRlXCJcblxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZUluZm8ge1xuICBzZXR1cFBhcmFtczogU2V0dXBQYXJhbXNcbiAgcm91dGVTcGVjOiBSb3V0ZVNwZWNcbiAgcm91dGVGbjogRnVuY3Rpb25cbiAgcm91dGU6IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgcGFyc2VSb3V0ZXNJblBhY2thZ2UgPSBhc3luYyAob3B0czoge1xuICBwYWNrYWdlRGlyOiBzdHJpbmdcbiAgcGF0aEdsb2I/OiBzdHJpbmdcbiAgYXBpUHJlZml4Pzogc3RyaW5nXG4gIG1hcEZpbGVQYXRoVG9IVFRQUm91dGU/OiAoZmlsZV9wYXRoOiBzdHJpbmcpID0+IHN0cmluZ1xufSk6IFByb21pc2U8TWFwPHN0cmluZywgUm91dGVJbmZvPj4gPT4ge1xuICBjb25zdCB7XG4gICAgcGFja2FnZURpcixcbiAgICBwYXRoR2xvYiA9IFwiL3BhZ2VzL2FwaS8qKi8qLnRzXCIsXG4gICAgbWFwRmlsZVBhdGhUb0hUVFBSb3V0ZSA9IGRlZmF1bHRNYXBGaWxlUGF0aFRvSFRUUFJvdXRlKG9wdHMuYXBpUHJlZml4KSxcbiAgfSA9IG9wdHNcbiAgLy8gTG9hZCBhbGwgcm91dGUgc3BlY3NcbiAgY29uc3QgZnVsbFBhdGhHbG9iID0gcGF0aC5wb3NpeC5qb2luKHBhY2thZ2VEaXIsIHBhdGhHbG9iKVxuICBjb25zb2xlLmxvZyhgc2VhcmNoaW5nIFwiJHtmdWxsUGF0aEdsb2J9XCIuLi5gKVxuICBjb25zdCBmaWxlcGF0aHMgPSBhd2FpdCBnbG9iYnkoYCR7ZnVsbFBhdGhHbG9ifWApXG4gIGNvbnNvbGUubG9nKGBmb3VuZCAke2ZpbGVwYXRocy5sZW5ndGh9IGZpbGVzYClcbiAgaWYgKGZpbGVwYXRocy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGZpbGVzIGZvdW5kIGF0IFwiJHtmdWxsUGF0aEdsb2J9XCJgKVxuICB9XG4gIGNvbnN0IGZpbGVwYXRoVG9Sb3V0ZUZuID0gbmV3IE1hcDxzdHJpbmcsIFJvdXRlSW5mbz4oKVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGZpbGVwYXRocy5tYXAoYXN5bmMgKHApID0+IHtcbiAgICAgIGNvbnN0IHsgZGVmYXVsdDogcm91dGVGbiB9ID0gYXdhaXQgcmVxdWlyZShwYXRoLnJlc29sdmUocCkpXG5cbiAgICAgIGlmIChyb3V0ZUZuKSB7XG4gICAgICAgIGlmICghcm91dGVGbi5fc2V0dXBQYXJhbXMpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBjaGFsay55ZWxsb3coXG4gICAgICAgICAgICAgIGBJZ25vcmluZyBcIiR7cH1cIiBiZWNhdXNlIGl0IHdhc24ndCBjcmVhdGVkIHdpdGggd2l0aFJvdXRlU3BlY2BcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgZmlsZXBhdGhUb1JvdXRlRm4uc2V0KHAsIHtcbiAgICAgICAgICBzZXR1cFBhcmFtczogcm91dGVGbi5fc2V0dXBQYXJhbXMsXG4gICAgICAgICAgcm91dGVTcGVjOiByb3V0ZUZuLl9yb3V0ZVNwZWMsXG4gICAgICAgICAgcm91dGU6IG1hcEZpbGVQYXRoVG9IVFRQUm91dGUocCksXG4gICAgICAgICAgcm91dGVGbixcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihjaGFsay55ZWxsb3coYENvdWxkbid0IGZpbmQgcm91dGUgJHtwfWApKVxuICAgICAgfVxuICAgIH0pXG4gIClcblxuICByZXR1cm4gZmlsZXBhdGhUb1JvdXRlRm5cbn1cbiIsICJpbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgbm9kZVBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBtZXJnZTIgZnJvbSAnbWVyZ2UyJztcbmltcG9ydCBmYXN0R2xvYiBmcm9tICdmYXN0LWdsb2InO1xuaW1wb3J0IGRpckdsb2IgZnJvbSAnZGlyLWdsb2InO1xuaW1wb3J0IHtcblx0R0lUSUdOT1JFX0ZJTEVTX1BBVFRFUk4sXG5cdGlzSWdub3JlZEJ5SWdub3JlRmlsZXMsXG5cdGlzSWdub3JlZEJ5SWdub3JlRmlsZXNTeW5jLFxufSBmcm9tICcuL2lnbm9yZS5qcyc7XG5pbXBvcnQge0ZpbHRlclN0cmVhbSwgdG9QYXRoLCBpc05lZ2F0aXZlUGF0dGVybn0gZnJvbSAnLi91dGlsaXRpZXMuanMnO1xuXG5jb25zdCBhc3NlcnRQYXR0ZXJuc0lucHV0ID0gcGF0dGVybnMgPT4ge1xuXHRpZiAocGF0dGVybnMuc29tZShwYXR0ZXJuID0+IHR5cGVvZiBwYXR0ZXJuICE9PSAnc3RyaW5nJykpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXR0ZXJucyBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MnKTtcblx0fVxufTtcblxuY29uc3QgdG9QYXR0ZXJuc0FycmF5ID0gcGF0dGVybnMgPT4ge1xuXHRwYXR0ZXJucyA9IFsuLi5uZXcgU2V0KFtwYXR0ZXJuc10uZmxhdCgpKV07XG5cdGFzc2VydFBhdHRlcm5zSW5wdXQocGF0dGVybnMpO1xuXHRyZXR1cm4gcGF0dGVybnM7XG59O1xuXG5jb25zdCBjaGVja0N3ZE9wdGlvbiA9IG9wdGlvbnMgPT4ge1xuXHRpZiAoIW9wdGlvbnMuY3dkKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0bGV0IHN0YXQ7XG5cdHRyeSB7XG5cdFx0c3RhdCA9IGZzLnN0YXRTeW5jKG9wdGlvbnMuY3dkKTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKCFzdGF0LmlzRGlyZWN0b3J5KCkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1RoZSBgY3dkYCBvcHRpb24gbXVzdCBiZSBhIHBhdGggdG8gYSBkaXJlY3RvcnknKTtcblx0fVxufTtcblxuY29uc3Qgbm9ybWFsaXplT3B0aW9ucyA9IChvcHRpb25zID0ge30pID0+IHtcblx0b3B0aW9ucyA9IHtcblx0XHQuLi5vcHRpb25zLFxuXHRcdGlnbm9yZTogb3B0aW9ucy5pZ25vcmUgfHwgW10sXG5cdFx0ZXhwYW5kRGlyZWN0b3JpZXM6IG9wdGlvbnMuZXhwYW5kRGlyZWN0b3JpZXMgPT09IHVuZGVmaW5lZFxuXHRcdFx0PyB0cnVlXG5cdFx0XHQ6IG9wdGlvbnMuZXhwYW5kRGlyZWN0b3JpZXMsXG5cdFx0Y3dkOiB0b1BhdGgob3B0aW9ucy5jd2QpLFxuXHR9O1xuXG5cdGNoZWNrQ3dkT3B0aW9uKG9wdGlvbnMpO1xuXG5cdHJldHVybiBvcHRpb25zO1xufTtcblxuY29uc3Qgbm9ybWFsaXplQXJndW1lbnRzID0gZm4gPT4gYXN5bmMgKHBhdHRlcm5zLCBvcHRpb25zKSA9PiBmbih0b1BhdHRlcm5zQXJyYXkocGF0dGVybnMpLCBub3JtYWxpemVPcHRpb25zKG9wdGlvbnMpKTtcbmNvbnN0IG5vcm1hbGl6ZUFyZ3VtZW50c1N5bmMgPSBmbiA9PiAocGF0dGVybnMsIG9wdGlvbnMpID0+IGZuKHRvUGF0dGVybnNBcnJheShwYXR0ZXJucyksIG5vcm1hbGl6ZU9wdGlvbnMob3B0aW9ucykpO1xuXG5jb25zdCBnZXRJZ25vcmVGaWxlc1BhdHRlcm5zID0gb3B0aW9ucyA9PiB7XG5cdGNvbnN0IHtpZ25vcmVGaWxlcywgZ2l0aWdub3JlfSA9IG9wdGlvbnM7XG5cblx0Y29uc3QgcGF0dGVybnMgPSBpZ25vcmVGaWxlcyA/IHRvUGF0dGVybnNBcnJheShpZ25vcmVGaWxlcykgOiBbXTtcblx0aWYgKGdpdGlnbm9yZSkge1xuXHRcdHBhdHRlcm5zLnB1c2goR0lUSUdOT1JFX0ZJTEVTX1BBVFRFUk4pO1xuXHR9XG5cblx0cmV0dXJuIHBhdHRlcm5zO1xufTtcblxuY29uc3QgZ2V0RmlsdGVyID0gYXN5bmMgb3B0aW9ucyA9PiB7XG5cdGNvbnN0IGlnbm9yZUZpbGVzUGF0dGVybnMgPSBnZXRJZ25vcmVGaWxlc1BhdHRlcm5zKG9wdGlvbnMpO1xuXHRyZXR1cm4gY3JlYXRlRmlsdGVyRnVuY3Rpb24oXG5cdFx0aWdub3JlRmlsZXNQYXR0ZXJucy5sZW5ndGggPiAwICYmIGF3YWl0IGlzSWdub3JlZEJ5SWdub3JlRmlsZXMoaWdub3JlRmlsZXNQYXR0ZXJucywgb3B0aW9ucyksXG5cdCk7XG59O1xuXG5jb25zdCBnZXRGaWx0ZXJTeW5jID0gb3B0aW9ucyA9PiB7XG5cdGNvbnN0IGlnbm9yZUZpbGVzUGF0dGVybnMgPSBnZXRJZ25vcmVGaWxlc1BhdHRlcm5zKG9wdGlvbnMpO1xuXHRyZXR1cm4gY3JlYXRlRmlsdGVyRnVuY3Rpb24oXG5cdFx0aWdub3JlRmlsZXNQYXR0ZXJucy5sZW5ndGggPiAwICYmIGlzSWdub3JlZEJ5SWdub3JlRmlsZXNTeW5jKGlnbm9yZUZpbGVzUGF0dGVybnMsIG9wdGlvbnMpLFxuXHQpO1xufTtcblxuY29uc3QgY3JlYXRlRmlsdGVyRnVuY3Rpb24gPSBpc0lnbm9yZWQgPT4ge1xuXHRjb25zdCBzZWVuID0gbmV3IFNldCgpO1xuXG5cdHJldHVybiBmYXN0R2xvYlJlc3VsdCA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGZhc3RHbG9iUmVzdWx0LnBhdGggfHwgZmFzdEdsb2JSZXN1bHQ7XG5cdFx0Y29uc3QgcGF0aEtleSA9IG5vZGVQYXRoLm5vcm1hbGl6ZShwYXRoKTtcblx0XHRjb25zdCBzZWVuT3JJZ25vcmVkID0gc2Vlbi5oYXMocGF0aEtleSkgfHwgKGlzSWdub3JlZCAmJiBpc0lnbm9yZWQocGF0aCkpO1xuXHRcdHNlZW4uYWRkKHBhdGhLZXkpO1xuXHRcdHJldHVybiAhc2Vlbk9ySWdub3JlZDtcblx0fTtcbn07XG5cbmNvbnN0IHVuaW9uRmFzdEdsb2JSZXN1bHRzID0gKHJlc3VsdHMsIGZpbHRlcikgPT4gcmVzdWx0cy5mbGF0KCkuZmlsdGVyKGZhc3RHbG9iUmVzdWx0ID0+IGZpbHRlcihmYXN0R2xvYlJlc3VsdCkpO1xuY29uc3QgdW5pb25GYXN0R2xvYlN0cmVhbXMgPSAoc3RyZWFtcywgZmlsdGVyKSA9PiBtZXJnZTIoc3RyZWFtcykucGlwZShuZXcgRmlsdGVyU3RyZWFtKGZhc3RHbG9iUmVzdWx0ID0+IGZpbHRlcihmYXN0R2xvYlJlc3VsdCkpKTtcblxuY29uc3QgY29udmVydE5lZ2F0aXZlUGF0dGVybnMgPSAocGF0dGVybnMsIG9wdGlvbnMpID0+IHtcblx0Y29uc3QgdGFza3MgPSBbXTtcblxuXHR3aGlsZSAocGF0dGVybnMubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGluZGV4ID0gcGF0dGVybnMuZmluZEluZGV4KHBhdHRlcm4gPT4gaXNOZWdhdGl2ZVBhdHRlcm4ocGF0dGVybikpO1xuXG5cdFx0aWYgKGluZGV4ID09PSAtMSkge1xuXHRcdFx0dGFza3MucHVzaCh7cGF0dGVybnMsIG9wdGlvbnN9KTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdGNvbnN0IGlnbm9yZVBhdHRlcm4gPSBwYXR0ZXJuc1tpbmRleF0uc2xpY2UoMSk7XG5cblx0XHRmb3IgKGNvbnN0IHRhc2sgb2YgdGFza3MpIHtcblx0XHRcdHRhc2sub3B0aW9ucy5pZ25vcmUucHVzaChpZ25vcmVQYXR0ZXJuKTtcblx0XHR9XG5cblx0XHRpZiAoaW5kZXggIT09IDApIHtcblx0XHRcdHRhc2tzLnB1c2goe1xuXHRcdFx0XHRwYXR0ZXJuczogcGF0dGVybnMuc2xpY2UoMCwgaW5kZXgpLFxuXHRcdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdFx0Li4ub3B0aW9ucyxcblx0XHRcdFx0XHRpZ25vcmU6IFtcblx0XHRcdFx0XHRcdC4uLm9wdGlvbnMuaWdub3JlLFxuXHRcdFx0XHRcdFx0aWdub3JlUGF0dGVybixcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cGF0dGVybnMgPSBwYXR0ZXJucy5zbGljZShpbmRleCArIDEpO1xuXHR9XG5cblx0cmV0dXJuIHRhc2tzO1xufTtcblxuY29uc3QgZ2V0RGlyR2xvYk9wdGlvbnMgPSAob3B0aW9ucywgY3dkKSA9PiAoe1xuXHQuLi4oY3dkID8ge2N3ZH0gOiB7fSksXG5cdC4uLihBcnJheS5pc0FycmF5KG9wdGlvbnMpID8ge2ZpbGVzOiBvcHRpb25zfSA6IG9wdGlvbnMpLFxufSk7XG5cbmNvbnN0IGdlbmVyYXRlVGFza3MgPSBhc3luYyAocGF0dGVybnMsIG9wdGlvbnMpID0+IHtcblx0Y29uc3QgZ2xvYlRhc2tzID0gY29udmVydE5lZ2F0aXZlUGF0dGVybnMocGF0dGVybnMsIG9wdGlvbnMpO1xuXG5cdGNvbnN0IHtjd2QsIGV4cGFuZERpcmVjdG9yaWVzfSA9IG9wdGlvbnM7XG5cblx0aWYgKCFleHBhbmREaXJlY3Rvcmllcykge1xuXHRcdHJldHVybiBnbG9iVGFza3M7XG5cdH1cblxuXHRjb25zdCBwYXR0ZXJuRXhwYW5kT3B0aW9ucyA9IGdldERpckdsb2JPcHRpb25zKGV4cGFuZERpcmVjdG9yaWVzLCBjd2QpO1xuXHRjb25zdCBpZ25vcmVFeHBhbmRPcHRpb25zID0gY3dkID8ge2N3ZH0gOiB1bmRlZmluZWQ7XG5cblx0cmV0dXJuIFByb21pc2UuYWxsKFxuXHRcdGdsb2JUYXNrcy5tYXAoYXN5bmMgdGFzayA9PiB7XG5cdFx0XHRsZXQge3BhdHRlcm5zLCBvcHRpb25zfSA9IHRhc2s7XG5cblx0XHRcdFtcblx0XHRcdFx0cGF0dGVybnMsXG5cdFx0XHRcdG9wdGlvbnMuaWdub3JlLFxuXHRcdFx0XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcblx0XHRcdFx0ZGlyR2xvYihwYXR0ZXJucywgcGF0dGVybkV4cGFuZE9wdGlvbnMpLFxuXHRcdFx0XHRkaXJHbG9iKG9wdGlvbnMuaWdub3JlLCBpZ25vcmVFeHBhbmRPcHRpb25zKSxcblx0XHRcdF0pO1xuXG5cdFx0XHRyZXR1cm4ge3BhdHRlcm5zLCBvcHRpb25zfTtcblx0XHR9KSxcblx0KTtcbn07XG5cbmNvbnN0IGdlbmVyYXRlVGFza3NTeW5jID0gKHBhdHRlcm5zLCBvcHRpb25zKSA9PiB7XG5cdGNvbnN0IGdsb2JUYXNrcyA9IGNvbnZlcnROZWdhdGl2ZVBhdHRlcm5zKHBhdHRlcm5zLCBvcHRpb25zKTtcblxuXHRjb25zdCB7Y3dkLCBleHBhbmREaXJlY3Rvcmllc30gPSBvcHRpb25zO1xuXG5cdGlmICghZXhwYW5kRGlyZWN0b3JpZXMpIHtcblx0XHRyZXR1cm4gZ2xvYlRhc2tzO1xuXHR9XG5cblx0Y29uc3QgcGF0dGVybkV4cGFuZE9wdGlvbnMgPSBnZXREaXJHbG9iT3B0aW9ucyhleHBhbmREaXJlY3RvcmllcywgY3dkKTtcblx0Y29uc3QgaWdub3JlRXhwYW5kT3B0aW9ucyA9IGN3ZCA/IHtjd2R9IDogdW5kZWZpbmVkO1xuXG5cdHJldHVybiBnbG9iVGFza3MubWFwKHRhc2sgPT4ge1xuXHRcdGxldCB7cGF0dGVybnMsIG9wdGlvbnN9ID0gdGFzaztcblx0XHRwYXR0ZXJucyA9IGRpckdsb2Iuc3luYyhwYXR0ZXJucywgcGF0dGVybkV4cGFuZE9wdGlvbnMpO1xuXHRcdG9wdGlvbnMuaWdub3JlID0gZGlyR2xvYi5zeW5jKG9wdGlvbnMuaWdub3JlLCBpZ25vcmVFeHBhbmRPcHRpb25zKTtcblx0XHRyZXR1cm4ge3BhdHRlcm5zLCBvcHRpb25zfTtcblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2xvYmJ5ID0gbm9ybWFsaXplQXJndW1lbnRzKGFzeW5jIChwYXR0ZXJucywgb3B0aW9ucykgPT4ge1xuXHRjb25zdCBbXG5cdFx0dGFza3MsXG5cdFx0ZmlsdGVyLFxuXHRdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuXHRcdGdlbmVyYXRlVGFza3MocGF0dGVybnMsIG9wdGlvbnMpLFxuXHRcdGdldEZpbHRlcihvcHRpb25zKSxcblx0XSk7XG5cdGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbCh0YXNrcy5tYXAodGFzayA9PiBmYXN0R2xvYih0YXNrLnBhdHRlcm5zLCB0YXNrLm9wdGlvbnMpKSk7XG5cblx0cmV0dXJuIHVuaW9uRmFzdEdsb2JSZXN1bHRzKHJlc3VsdHMsIGZpbHRlcik7XG59KTtcblxuZXhwb3J0IGNvbnN0IGdsb2JieVN5bmMgPSBub3JtYWxpemVBcmd1bWVudHNTeW5jKChwYXR0ZXJucywgb3B0aW9ucykgPT4ge1xuXHRjb25zdCB0YXNrcyA9IGdlbmVyYXRlVGFza3NTeW5jKHBhdHRlcm5zLCBvcHRpb25zKTtcblx0Y29uc3QgZmlsdGVyID0gZ2V0RmlsdGVyU3luYyhvcHRpb25zKTtcblx0Y29uc3QgcmVzdWx0cyA9IHRhc2tzLm1hcCh0YXNrID0+IGZhc3RHbG9iLnN5bmModGFzay5wYXR0ZXJucywgdGFzay5vcHRpb25zKSk7XG5cblx0cmV0dXJuIHVuaW9uRmFzdEdsb2JSZXN1bHRzKHJlc3VsdHMsIGZpbHRlcik7XG59KTtcblxuZXhwb3J0IGNvbnN0IGdsb2JieVN0cmVhbSA9IG5vcm1hbGl6ZUFyZ3VtZW50c1N5bmMoKHBhdHRlcm5zLCBvcHRpb25zKSA9PiB7XG5cdGNvbnN0IHRhc2tzID0gZ2VuZXJhdGVUYXNrc1N5bmMocGF0dGVybnMsIG9wdGlvbnMpO1xuXHRjb25zdCBmaWx0ZXIgPSBnZXRGaWx0ZXJTeW5jKG9wdGlvbnMpO1xuXHRjb25zdCBzdHJlYW1zID0gdGFza3MubWFwKHRhc2sgPT4gZmFzdEdsb2Iuc3RyZWFtKHRhc2sucGF0dGVybnMsIHRhc2sub3B0aW9ucykpO1xuXG5cdHJldHVybiB1bmlvbkZhc3RHbG9iU3RyZWFtcyhzdHJlYW1zLCBmaWx0ZXIpO1xufSk7XG5cbmV4cG9ydCBjb25zdCBpc0R5bmFtaWNQYXR0ZXJuID0gbm9ybWFsaXplQXJndW1lbnRzU3luYyhcblx0KHBhdHRlcm5zLCBvcHRpb25zKSA9PiBwYXR0ZXJucy5zb21lKHBhdHRlcm4gPT4gZmFzdEdsb2IuaXNEeW5hbWljUGF0dGVybihwYXR0ZXJuLCBvcHRpb25zKSksXG4pO1xuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVHbG9iVGFza3MgPSBub3JtYWxpemVBcmd1bWVudHMoZ2VuZXJhdGVUYXNrcyk7XG5leHBvcnQgY29uc3QgZ2VuZXJhdGVHbG9iVGFza3NTeW5jID0gbm9ybWFsaXplQXJndW1lbnRzU3luYyhnZW5lcmF0ZVRhc2tzU3luYyk7XG5cbmV4cG9ydCB7XG5cdGlzR2l0SWdub3JlZCxcblx0aXNHaXRJZ25vcmVkU3luYyxcbn0gZnJvbSAnLi9pZ25vcmUuanMnO1xuIiwgImltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IGZhc3RHbG9iIGZyb20gJ2Zhc3QtZ2xvYic7XG5pbXBvcnQgZ2l0SWdub3JlIGZyb20gJ2lnbm9yZSc7XG5pbXBvcnQgc2xhc2ggZnJvbSAnc2xhc2gnO1xuaW1wb3J0IHt0b1BhdGgsIGlzTmVnYXRpdmVQYXR0ZXJufSBmcm9tICcuL3V0aWxpdGllcy5qcyc7XG5cbmNvbnN0IGlnbm9yZUZpbGVzR2xvYk9wdGlvbnMgPSB7XG5cdGlnbm9yZTogW1xuXHRcdCcqKi9ub2RlX21vZHVsZXMnLFxuXHRcdCcqKi9mbG93LXR5cGVkJyxcblx0XHQnKiovY292ZXJhZ2UnLFxuXHRcdCcqKi8uZ2l0Jyxcblx0XSxcblx0YWJzb2x1dGU6IHRydWUsXG5cdGRvdDogdHJ1ZSxcbn07XG5cbmV4cG9ydCBjb25zdCBHSVRJR05PUkVfRklMRVNfUEFUVEVSTiA9ICcqKi8uZ2l0aWdub3JlJztcblxuY29uc3QgYXBwbHlCYXNlVG9QYXR0ZXJuID0gKHBhdHRlcm4sIGJhc2UpID0+IGlzTmVnYXRpdmVQYXR0ZXJuKHBhdHRlcm4pXG5cdD8gJyEnICsgcGF0aC5wb3NpeC5qb2luKGJhc2UsIHBhdHRlcm4uc2xpY2UoMSkpXG5cdDogcGF0aC5wb3NpeC5qb2luKGJhc2UsIHBhdHRlcm4pO1xuXG5jb25zdCBwYXJzZUlnbm9yZUZpbGUgPSAoZmlsZSwgY3dkKSA9PiB7XG5cdGNvbnN0IGJhc2UgPSBzbGFzaChwYXRoLnJlbGF0aXZlKGN3ZCwgcGF0aC5kaXJuYW1lKGZpbGUuZmlsZVBhdGgpKSk7XG5cblx0cmV0dXJuIGZpbGUuY29udGVudFxuXHRcdC5zcGxpdCgvXFxyP1xcbi8pXG5cdFx0LmZpbHRlcihsaW5lID0+IGxpbmUgJiYgIWxpbmUuc3RhcnRzV2l0aCgnIycpKVxuXHRcdC5tYXAocGF0dGVybiA9PiBhcHBseUJhc2VUb1BhdHRlcm4ocGF0dGVybiwgYmFzZSkpO1xufTtcblxuY29uc3QgdG9SZWxhdGl2ZVBhdGggPSAoZmlsZU9yRGlyZWN0b3J5LCBjd2QpID0+IHtcblx0Y3dkID0gc2xhc2goY3dkKTtcblx0aWYgKHBhdGguaXNBYnNvbHV0ZShmaWxlT3JEaXJlY3RvcnkpKSB7XG5cdFx0aWYgKHNsYXNoKGZpbGVPckRpcmVjdG9yeSkuc3RhcnRzV2l0aChjd2QpKSB7XG5cdFx0XHRyZXR1cm4gcGF0aC5yZWxhdGl2ZShjd2QsIGZpbGVPckRpcmVjdG9yeSk7XG5cdFx0fVxuXG5cdFx0dGhyb3cgbmV3IEVycm9yKGBQYXRoICR7ZmlsZU9yRGlyZWN0b3J5fSBpcyBub3QgaW4gY3dkICR7Y3dkfWApO1xuXHR9XG5cblx0cmV0dXJuIGZpbGVPckRpcmVjdG9yeTtcbn07XG5cbmNvbnN0IGdldElzSWdub3JlZFByZWRpY2F0ZSA9IChmaWxlcywgY3dkKSA9PiB7XG5cdGNvbnN0IHBhdHRlcm5zID0gZmlsZXMuZmxhdE1hcChmaWxlID0+IHBhcnNlSWdub3JlRmlsZShmaWxlLCBjd2QpKTtcblx0Y29uc3QgaWdub3JlcyA9IGdpdElnbm9yZSgpLmFkZChwYXR0ZXJucyk7XG5cblx0cmV0dXJuIGZpbGVPckRpcmVjdG9yeSA9PiB7XG5cdFx0ZmlsZU9yRGlyZWN0b3J5ID0gdG9QYXRoKGZpbGVPckRpcmVjdG9yeSk7XG5cdFx0ZmlsZU9yRGlyZWN0b3J5ID0gdG9SZWxhdGl2ZVBhdGgoZmlsZU9yRGlyZWN0b3J5LCBjd2QpO1xuXHRcdHJldHVybiBmaWxlT3JEaXJlY3RvcnkgPyBpZ25vcmVzLmlnbm9yZXMoc2xhc2goZmlsZU9yRGlyZWN0b3J5KSkgOiBmYWxzZTtcblx0fTtcbn07XG5cbmNvbnN0IG5vcm1hbGl6ZU9wdGlvbnMgPSAob3B0aW9ucyA9IHt9KSA9PiAoe1xuXHRjd2Q6IHRvUGF0aChvcHRpb25zLmN3ZCkgfHwgcHJvY2Vzcy5jd2QoKSxcblx0c3VwcHJlc3NFcnJvcnM6IEJvb2xlYW4ob3B0aW9ucy5zdXBwcmVzc0Vycm9ycyksXG5cdGRlZXA6IHR5cGVvZiBvcHRpb25zLmRlZXAgPT09ICdudW1iZXInID8gb3B0aW9ucy5kZWVwIDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxufSk7XG5cbmV4cG9ydCBjb25zdCBpc0lnbm9yZWRCeUlnbm9yZUZpbGVzID0gYXN5bmMgKHBhdHRlcm5zLCBvcHRpb25zKSA9PiB7XG5cdGNvbnN0IHtjd2QsIHN1cHByZXNzRXJyb3JzLCBkZWVwfSA9IG5vcm1hbGl6ZU9wdGlvbnMob3B0aW9ucyk7XG5cblx0Y29uc3QgcGF0aHMgPSBhd2FpdCBmYXN0R2xvYihwYXR0ZXJucywge2N3ZCwgc3VwcHJlc3NFcnJvcnMsIGRlZXAsIC4uLmlnbm9yZUZpbGVzR2xvYk9wdGlvbnN9KTtcblxuXHRjb25zdCBmaWxlcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdHBhdGhzLm1hcChhc3luYyBmaWxlUGF0aCA9PiAoe1xuXHRcdFx0ZmlsZVBhdGgsXG5cdFx0XHRjb250ZW50OiBhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShmaWxlUGF0aCwgJ3V0ZjgnKSxcblx0XHR9KSksXG5cdCk7XG5cblx0cmV0dXJuIGdldElzSWdub3JlZFByZWRpY2F0ZShmaWxlcywgY3dkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0lnbm9yZWRCeUlnbm9yZUZpbGVzU3luYyA9IChwYXR0ZXJucywgb3B0aW9ucykgPT4ge1xuXHRjb25zdCB7Y3dkLCBzdXBwcmVzc0Vycm9ycywgZGVlcH0gPSBub3JtYWxpemVPcHRpb25zKG9wdGlvbnMpO1xuXG5cdGNvbnN0IHBhdGhzID0gZmFzdEdsb2Iuc3luYyhwYXR0ZXJucywge2N3ZCwgc3VwcHJlc3NFcnJvcnMsIGRlZXAsIC4uLmlnbm9yZUZpbGVzR2xvYk9wdGlvbnN9KTtcblxuXHRjb25zdCBmaWxlcyA9IHBhdGhzLm1hcChmaWxlUGF0aCA9PiAoe1xuXHRcdGZpbGVQYXRoLFxuXHRcdGNvbnRlbnQ6IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKSxcblx0fSkpO1xuXG5cdHJldHVybiBnZXRJc0lnbm9yZWRQcmVkaWNhdGUoZmlsZXMsIGN3ZCk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNHaXRJZ25vcmVkID0gb3B0aW9ucyA9PiBpc0lnbm9yZWRCeUlnbm9yZUZpbGVzKEdJVElHTk9SRV9GSUxFU19QQVRURVJOLCBvcHRpb25zKTtcbmV4cG9ydCBjb25zdCBpc0dpdElnbm9yZWRTeW5jID0gb3B0aW9ucyA9PiBpc0lnbm9yZWRCeUlnbm9yZUZpbGVzU3luYyhHSVRJR05PUkVfRklMRVNfUEFUVEVSTiwgb3B0aW9ucyk7XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2xhc2gocGF0aCkge1xuXHRjb25zdCBpc0V4dGVuZGVkTGVuZ3RoUGF0aCA9IC9eXFxcXFxcXFxcXD9cXFxcLy50ZXN0KHBhdGgpO1xuXHRjb25zdCBoYXNOb25Bc2NpaSA9IC9bXlxcdTAwMDAtXFx1MDA4MF0rLy50ZXN0KHBhdGgpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnRyb2wtcmVnZXhcblxuXHRpZiAoaXNFeHRlbmRlZExlbmd0aFBhdGggfHwgaGFzTm9uQXNjaWkpIHtcblx0XHRyZXR1cm4gcGF0aDtcblx0fVxuXG5cdHJldHVybiBwYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbn1cbiIsICJpbXBvcnQge2ZpbGVVUkxUb1BhdGh9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7VHJhbnNmb3JtfSBmcm9tICdub2RlOnN0cmVhbSc7XG5cbmV4cG9ydCBjb25zdCB0b1BhdGggPSB1cmxPclBhdGggPT4gdXJsT3JQYXRoIGluc3RhbmNlb2YgVVJMID8gZmlsZVVSTFRvUGF0aCh1cmxPclBhdGgpIDogdXJsT3JQYXRoO1xuXG5leHBvcnQgY2xhc3MgRmlsdGVyU3RyZWFtIGV4dGVuZHMgVHJhbnNmb3JtIHtcblx0Y29uc3RydWN0b3IoZmlsdGVyKSB7XG5cdFx0c3VwZXIoe1xuXHRcdFx0b2JqZWN0TW9kZTogdHJ1ZSxcblx0XHRcdHRyYW5zZm9ybShkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spIHtcblx0XHRcdFx0Y2FsbGJhY2sodW5kZWZpbmVkLCBmaWx0ZXIoZGF0YSkgPyBkYXRhIDogdW5kZWZpbmVkKTtcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IGNvbnN0IGlzTmVnYXRpdmVQYXR0ZXJuID0gcGF0dGVybiA9PiBwYXR0ZXJuWzBdID09PSAnISc7XG4iLCAiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5leHBvcnQgY29uc3QgZGVmYXVsdE1hcEZpbGVQYXRoVG9IVFRQUm91dGUgPVxuICAoYXBpX3ByZWZpeDogc3RyaW5nID0gXCIvYXBpXCIpID0+XG4gIChmaWxlX3BhdGg6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJvdXRlID0gZmlsZV9wYXRoXG4gICAgICAvLyByZXBsYWNlIC4vIGlmIGl0IHN0YXJ0cyB3aXRoIC4vXG4gICAgICAucmVwbGFjZSgvXlxcLlxcLy8sIFwiL1wiKVxuICAgICAgLy8gcmVwbGFjZSBzdGFydGluZyAvXG4gICAgICAucmVwbGFjZSgvXlxcLy8sIFwiXCIpXG4gICAgICAvLyByZXBsYWNlIC9zcmMgaWYgaXQgc3RhcnRzIHdpdGggL3NyY1xuICAgICAgLnJlcGxhY2UoL15zcmNcXC8vLCBcIlwiKVxuICAgICAgLy8gcmVwbGFjZSAvcGFnZXMgaWYgaXQgc3RhcnRzIHdpdGggL3BhZ2VzXG4gICAgICAucmVwbGFjZSgvXnBhZ2VzXFwvLywgXCJcIilcbiAgICAgIC8vIHJlcGxhY2UgL2FwaSBpZiBpdCBzdGFydHMgd2l0aCAvYXBpXG4gICAgICAucmVwbGFjZSgvXmFwaVxcLy8sIFwiXCIpXG4gICAgICAvLyByZXBsYWNlIC50cyBpZiBpdCBlbmRzIHdpdGggLnRzXG4gICAgICAucmVwbGFjZSgvXFwudHMkLywgXCJcIilcbiAgICAgIC8vIHJlbW92ZSBwdWJsaWMgcmVmZXJlbmNlXG4gICAgICAucmVwbGFjZShcInB1YmxpY1wiLCBcIlwiKVxuICAgICAgLy8gcmVwbGFjZSBpbmRleCBpZiBpdCBlbmRzIHdpdGggaW5kZXhcbiAgICAgIC5yZXBsYWNlKC9cXC9cXGluZGV4KD8hLikvLCBcIlwiKVxuXG4gICAgcmV0dXJuIHBhdGguam9pbihhcGlfcHJlZml4LCByb3V0ZSlcbiAgfVxuIiwgImltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIlxuXG5mdW5jdGlvbiBmaW5kS2V5SW5PYmoob2JqOiBhbnksIHZhbHVlOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcbiAgbGV0IHJlc3VsdEtleTogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgXy5mb3JPd24ob2JqLCAodiwgaykgPT4ge1xuICAgIGlmIChfLmlzT2JqZWN0KHYpICYmIF8uaXNNYXRjaCh2LCB2YWx1ZSkpIHtcbiAgICAgIHJlc3VsdEtleSA9IGtcbiAgICAgIC8vIFN0b3AgdGhlIGl0ZXJhdGlvblxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9KVxuICByZXR1cm4gcmVzdWx0S2V5XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbWJlZFNjaGVtYVJlZmVyZW5jZXMob2JqMTogYW55LCBvYmoyOiBhbnkpOiBhbnkge1xuICByZXR1cm4gXy50cmFuc2Zvcm0ob2JqMSwgKHJlc3VsdCwgdmFsdWUsIGtleSkgPT4ge1xuICAgIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgY29uc3QgbWF0Y2hpbmdLZXkgPSBmaW5kS2V5SW5PYmoob2JqMiwgdmFsdWUpXG4gICAgICBpZiAobWF0Y2hpbmdLZXkpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB7XG4gICAgICAgICAgJHJlZjogYCMvY29tcG9uZW50cy9zY2hlbWFzLyR7bWF0Y2hpbmdLZXl9YCxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBlbWJlZFNjaGVtYVJlZmVyZW5jZXModmFsdWUsIG9iajIpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsdWVcbiAgICB9XG4gIH0pXG59XG4iLCAiaW1wb3J0IHsgUm91dGVTcGVjIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCJcblxuZnVuY3Rpb24gdHJhbnNmb3JtUGF0aFRvRmVyblNka01ldGhvZE5hbWUocGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0ICE9PSBcIlwiKVxuICBjb25zdCBsYXN0UGFydCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdXG4gIGlmIChsYXN0UGFydC5zdGFydHNXaXRoKFwiW1wiKSAmJiBsYXN0UGFydC5lbmRzV2l0aChcIl1cIikpIHtcbiAgICAvLyBDb252ZXJ0IFtwYXJhbV0gdG8gYnlfcGFyYW1cbiAgICBjb25zdCBwYXJhbSA9IGxhc3RQYXJ0LnNsaWNlKDEsIC0xKVxuICAgIHJldHVybiBgYnlfJHtwYXJhbX1gXG4gIH1cblxuICByZXR1cm4gbGFzdFBhcnRcbn1cblxuLy8gZmVybiBkb2NzOiBodHRwczovL2J1aWxkd2l0aGZlcm4uY29tL2RvY3Mvc3BlYy9leHRlbnNpb25zXG5mdW5jdGlvbiB0cmFuc2Zvcm1QYXRoVG9GZXJuU2RrR3JvdXBOYW1lKHBhdGg6IHN0cmluZykge1xuICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcigocGFydCkgPT4gcGFydCAhPT0gXCJcIilcbiAgcmV0dXJuIHBhcnRzLnNsaWNlKDAsIHBhcnRzLmxlbmd0aCAtIDEpXG59XG5cbmZ1bmN0aW9uIGdldEZlcm5TZGtNZXRhZGF0YShwYXRoOiBzdHJpbmcpOlxuICB8IHtcbiAgICAgIFwieC1mZXJuLWlnbm9yZVwiOiB0cnVlXG4gICAgfVxuICB8IHtcbiAgICAgIFwieC1mZXJuLXNkay1ncm91cC1uYW1lXCI6IHN0cmluZ1tdXG4gICAgICBcIngtZmVybi1zZGstbWV0aG9kLW5hbWVcIjogc3RyaW5nXG4gICAgfSB7XG4gIGlmIChwYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoKHBhcnQpID0+IHBhcnQgIT09IFwiXCIpLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB7XG4gICAgICBcIngtZmVybi1pZ25vcmVcIjogdHJ1ZSxcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIFwieC1mZXJuLXNkay1ncm91cC1uYW1lXCI6IHRyYW5zZm9ybVBhdGhUb0Zlcm5TZGtHcm91cE5hbWUocGF0aCksXG4gICAgXCJ4LWZlcm4tc2RrLW1ldGhvZC1uYW1lXCI6IHRyYW5zZm9ybVBhdGhUb0Zlcm5TZGtNZXRob2ROYW1lKHBhdGgpLFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBNZXRob2RzVG9GZXJuU2RrTWV0YWRhdGEoXG4gIG1ldGhvZHM6IFJvdXRlU3BlY1tcIm1ldGhvZHNcIl0sXG4gIHBhdGg6IHN0cmluZ1xuKSB7XG4gIGNvbnN0IGZlcm5TZGtNZXRhZGF0YSA9IGdldEZlcm5TZGtNZXRhZGF0YShwYXRoKVxuICBpZiAobWV0aG9kcy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW21ldGhvZHNbMF1dOiBmZXJuU2RrTWV0YWRhdGEsXG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWFwcGVkTWV0aG9kcyA9IHt9XG4gIGNvbnN0IGF0TGVhc3RPbmVNZXRob2RJc1Bvc3QgPSBtZXRob2RzLmluY2x1ZGVzKFwiUE9TVFwiKVxuXG4gIGlmICghYXRMZWFzdE9uZU1ldGhvZElzUG9zdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiQSByb3V0ZSB0aGF0IGFjY2VwdHMgbXVsdGlwbGUgbWV0aG9kcyBzaG91bGQgaW5jbHVkZSBhdCBsZWFzdCB0aGUgUE9TVCBtZXRob2QuXCJcbiAgICApXG4gIH1cblxuICBtZXRob2RzLmZvckVhY2goKG1ldGhvZCkgPT4ge1xuICAgIGlmIChtZXRob2QgPT09IFwiUE9TVFwiKSB7XG4gICAgICBtYXBwZWRNZXRob2RzW21ldGhvZF0gPSBmZXJuU2RrTWV0YWRhdGFcbiAgICB9IGVsc2Uge1xuICAgICAgbWFwcGVkTWV0aG9kc1ttZXRob2RdID0ge1xuICAgICAgICBcIngtZmVybi1pZ25vcmVcIjogdHJ1ZSxcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIG1hcHBlZE1ldGhvZHNcbn1cbiIsICJpbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiXG5pbXBvcnQgeyBwYXJzZVJvdXRlc0luUGFja2FnZSB9IGZyb20gXCIuLi9saWIvcGFyc2Utcm91dGVzLWluLXBhY2thZ2VcIlxuaW1wb3J0IHsgem9kVG9UcywgcHJpbnROb2RlIH0gZnJvbSBcInpvZC10by10c1wiXG5pbXBvcnQgcHJldHRpZXIgZnJvbSBcInByZXR0aWVyXCJcbmltcG9ydCB7IHosIFpvZEVmZmVjdHMsIFpvZE9wdGlvbmFsIH0gZnJvbSBcInpvZFwiXG5cbmludGVyZmFjZSBHZW5lcmF0ZVJvdXRlVHlwZXNPcHRzIHtcbiAgcGFja2FnZURpcjogc3RyaW5nXG4gIG91dHB1dEZpbGU/OiBzdHJpbmdcbiAgcGF0aEdsb2I/OiBzdHJpbmdcbiAgYXBpUHJlZml4Pzogc3RyaW5nXG4gIG1hcEZpbGVQYXRoVG9IVFRQUm91dGU/OiAoZmlsZV9wYXRoOiBzdHJpbmcpID0+IHN0cmluZ1xuICAvKipcbiAgICogSWYgcHJvdmlkZWQsIG9ubHkgcm91dGVzIHRoYXQgcmV0dXJuIHRydWUgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZ2VuZXJhdGVkIHR5cGVzLlxuICAgKi9cbiAgZmlsdGVyUm91dGVzPzogKHJvdXRlOiBzdHJpbmcpID0+IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlUm91dGVUeXBlcyA9IGFzeW5jIChvcHRzOiBHZW5lcmF0ZVJvdXRlVHlwZXNPcHRzKSA9PiB7XG4gIGNvbnN0IGZpbGVwYXRoVG9Sb3V0ZSA9IGF3YWl0IHBhcnNlUm91dGVzSW5QYWNrYWdlKG9wdHMpXG5cbiAgY29uc3Qgc29ydGVkUm91dGVzID0gQXJyYXkuZnJvbShmaWxlcGF0aFRvUm91dGUuZW50cmllcygpKS5zb3J0KChhLCBiKSA9PlxuICAgIGFbMV0ucm91dGUubG9jYWxlQ29tcGFyZShiWzFdLnJvdXRlKVxuICApXG4gIGNvbnN0IGZpbHRlcmVkUm91dGVzID0gc29ydGVkUm91dGVzLmZpbHRlcihcbiAgICAoW18sIHsgcm91dGUgfV0pID0+ICFvcHRzLmZpbHRlclJvdXRlcyB8fCBvcHRzLmZpbHRlclJvdXRlcyhyb3V0ZSlcbiAgKVxuXG4gIC8vIFRPRE8gd2hlbiBsZXNzIGxhenksIHVzZSB0cy1tb3JwaCBmb3IgYmV0dGVyIGdlbmVyYXRpb25cbiAgY29uc3Qgcm91dGVEZWZzOiBzdHJpbmdbXSA9IFtdXG4gIGZvciAoY29uc3QgW18sIHsgcm91dGUsIHJvdXRlU3BlYywgc2V0dXBQYXJhbXMgfV0gb2YgZmlsdGVyZWRSb3V0ZXMpIHtcbiAgICBjb25zdCBxdWVyeUtleXMgPSBPYmplY3Qua2V5cyhyb3V0ZVNwZWMucXVlcnlQYXJhbXM/LnNoYXBlID8/IHt9KVxuICAgIGNvbnN0IHBhdGhQYXJhbWV0ZXJzID0gcXVlcnlLZXlzLmZpbHRlcigoa2V5KSA9PiByb3V0ZS5pbmNsdWRlcyhgWyR7a2V5fV1gKSlcblxuICAgIC8vIHF1ZXJ5UGFyYW1zIG1pZ2h0IGJlIGEgWm9kRWZmZWN0cyBvciBab2RPcHRpb25hbCBpbiBzb21lIGNhc2VzXG4gICAgbGV0IHF1ZXJ5UGFyYW1zID0gcm91dGVTcGVjLnF1ZXJ5UGFyYW1zXG4gICAgd2hpbGUgKFxuICAgICAgcXVlcnlQYXJhbXMgJiZcbiAgICAgIChcInNvdXJjZVR5cGVcIiBpbiBxdWVyeVBhcmFtcyB8fCBcInVud3JhcFwiIGluIHF1ZXJ5UGFyYW1zKVxuICAgICkge1xuICAgICAgaWYgKFwic291cmNlVHlwZVwiIGluIHF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zID0gKHF1ZXJ5UGFyYW1zIGFzIHVua25vd24gYXMgWm9kRWZmZWN0czxhbnk+KS5zb3VyY2VUeXBlKClcbiAgICAgIH0gZWxzZSBpZiAoXCJ1bndyYXBcIiBpbiBxdWVyeVBhcmFtcykge1xuICAgICAgICBxdWVyeVBhcmFtcyA9IChxdWVyeVBhcmFtcyBhcyB1bmtub3duIGFzIFpvZE9wdGlvbmFsPGFueT4pLnVud3JhcCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlQYXJhbXNTY2hlbWFXaXRob3V0UGF0aFBhcmFtZXRlcnMgPSBxdWVyeVBhcmFtcz8ub21pdChcbiAgICAgIE9iamVjdC5mcm9tRW50cmllcyhwYXRoUGFyYW1ldGVycy5tYXAoKHBhcmFtKSA9PiBbcGFyYW0sIHRydWVdKSlcbiAgICApXG5cbiAgICByb3V0ZURlZnMucHVzaChcbiAgICAgIGBcblwiJHtyb3V0ZX1cIjoge1xuICByb3V0ZTogXCIke3JvdXRlfVwiLFxuICBtZXRob2Q6ICR7cm91dGVTcGVjLm1ldGhvZHMubWFwKChtKSA9PiBgXCIke219XCJgKS5qb2luKFwiIHwgXCIpfSxcbiAgcXVlcnlQYXJhbXM6ICR7XG4gICAgcXVlcnlQYXJhbXNTY2hlbWFXaXRob3V0UGF0aFBhcmFtZXRlcnNcbiAgICAgID8gcHJpbnROb2RlKHpvZFRvVHMocXVlcnlQYXJhbXNTY2hlbWFXaXRob3V0UGF0aFBhcmFtZXRlcnMpLm5vZGUpXG4gICAgICA6IFwie31cIlxuICB9LFxuICBqc29uQm9keTogJHtcbiAgICByb3V0ZVNwZWMuanNvbkJvZHkgPyBwcmludE5vZGUoem9kVG9Ucyhyb3V0ZVNwZWMuanNvbkJvZHkpLm5vZGUpIDogXCJ7fVwiXG4gIH0sXG4gIGNvbW1vblBhcmFtczogJHtcbiAgICByb3V0ZVNwZWMuY29tbW9uUGFyYW1zXG4gICAgICA/IHByaW50Tm9kZSh6b2RUb1RzKHJvdXRlU3BlYy5jb21tb25QYXJhbXMpLm5vZGUpXG4gICAgICA6IFwie31cIlxuICB9LFxuICBmb3JtRGF0YTogJHtcbiAgICByb3V0ZVNwZWMuZm9ybURhdGEgPyBwcmludE5vZGUoem9kVG9Ucyhyb3V0ZVNwZWMuZm9ybURhdGEpLm5vZGUpIDogXCJ7fVwiXG4gIH0sXG4gIGpzb25SZXNwb25zZTogJHtcbiAgICByb3V0ZVNwZWMuanNvblJlc3BvbnNlXG4gICAgICA/IHByaW50Tm9kZShcbiAgICAgICAgICB6b2RUb1RzKFxuICAgICAgICAgICAgc2V0dXBQYXJhbXMuYWRkT2tTdGF0dXNcbiAgICAgICAgICAgICAgPyByb3V0ZVNwZWMuanNvblJlc3BvbnNlLmV4dGVuZCh7IG9rOiB6LmJvb2xlYW4oKSB9KVxuICAgICAgICAgICAgICA6IHJvdXRlU3BlYy5qc29uUmVzcG9uc2VcbiAgICAgICAgICApLm5vZGVcbiAgICAgICAgKVxuICAgICAgOiBcInt9XCJcbiAgfVxufWAudHJpbSgpXG4gICAgKVxuICB9XG4gIGNvbnN0IHJvdXRlRGVmU3RyID0gcm91dGVEZWZzLmpvaW4oXCIsXFxuXCIpXG4gIGNvbnN0IG91dHB1dCA9IGF3YWl0IHByZXR0aWVyLmZvcm1hdChcbiAgICBgZXhwb3J0IHR5cGUgUm91dGVzID0ge1xuJHtyb3V0ZURlZlN0cn1cbn1cblxuZXhwb3J0IHR5cGUgUm91dGVSZXNwb25zZTxQYXRoIGV4dGVuZHMga2V5b2YgUm91dGVzPiA9XG4gIFJvdXRlc1tQYXRoXVtcImpzb25SZXNwb25zZVwiXVxuXG5leHBvcnQgdHlwZSBSb3V0ZVJlcXVlc3RCb2R5PFBhdGggZXh0ZW5kcyBrZXlvZiBSb3V0ZXM+ID1cbiAgUm91dGVzW1BhdGhdW1wianNvbkJvZHlcIl0gJiBSb3V0ZXNbUGF0aF1bXCJjb21tb25QYXJhbXNcIl1cblxuZXhwb3J0IHR5cGUgUm91dGVSZXF1ZXN0UGFyYW1zPFBhdGggZXh0ZW5kcyBrZXlvZiBSb3V0ZXM+ID1cbiAgUm91dGVzW1BhdGhdW1wicXVlcnlQYXJhbXNcIl0gJiBSb3V0ZXNbUGF0aF1bXCJjb21tb25QYXJhbXNcIl1cbmAudHJpbSgpLFxuICAgIHsgc2VtaTogZmFsc2UsIHBhcnNlcjogXCJ0eXBlc2NyaXB0XCIgfVxuICApXG5cbiAgaWYgKG9wdHMub3V0cHV0RmlsZSkge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShvcHRzLm91dHB1dEZpbGUsIG91dHB1dClcbiAgfVxuXG4gIHJldHVybiBvdXRwdXRcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0FBO0FBQUE7QUFBQTtBQUFBO0FBQ0EsV0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBRTVELFFBQU0sV0FBVyxDQUFDLFFBQVE7QUFDdEIsVUFBSSxPQUFPLFFBQVEsWUFBWSxRQUFRLE1BQU07QUFDekMsWUFBSSxPQUFPLE9BQU8sbUJBQW1CLFlBQVk7QUFDN0MsZ0JBQU0sWUFBWSxPQUFPLGVBQWUsR0FBRztBQUMzQyxpQkFBTyxjQUFjLE9BQU8sYUFBYSxjQUFjO0FBQUEsUUFDM0Q7QUFDQSxlQUFPLE9BQU8sVUFBVSxTQUFTLEtBQUssR0FBRyxNQUFNO0FBQUEsTUFDbkQ7QUFDQSxhQUFPO0FBQUEsSUFDWDtBQUNBLFFBQU0sUUFBUSxJQUFJLFlBQVksUUFBUSxPQUFPLENBQUMsUUFBUSxZQUFZO0FBQzlELFVBQUksTUFBTSxRQUFRLE9BQU8sR0FBRztBQUN4QixjQUFNLElBQUksVUFBVSxpRUFBaUU7QUFBQSxNQUN6RjtBQUNBLGFBQU8sS0FBSyxPQUFPLEVBQUUsUUFBUSxDQUFDLFFBQVE7QUFDbEMsWUFBSSxDQUFDLGFBQWEsZUFBZSxXQUFXLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDekQ7QUFBQSxRQUNKO0FBQ0EsWUFBSSxNQUFNLFFBQVEsT0FBTyxJQUFJLEtBQUssTUFBTSxRQUFRLFFBQVEsSUFBSSxHQUFHO0FBQzNELGlCQUFPLE9BQU8sTUFBTSxRQUFRLGNBQ3RCLE1B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QUEsSUFDNUI7QUFBQSxFQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVdBLEtBQUs7QUFBQSxJQUNILEVBQUUsTUFBTSxPQUFPLFFBQVEsYUFBYTtBQUFBLEVBQ3RDO0FBRUEsTUFBSSxLQUFLLFlBQVk7QUFDbkIsVUFBUyxjQUFVLEtBQUssWUFBWSxNQUFNO0FBQUEsRUFDNUM7QUFFQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbImdlbmVyYXRlU2NoZW1hIiwgIm1vZHVsZSIsICJtZXJnZTIiLCAib3MiLCAicGF0aCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJzbGFzaCIsICJnbG9iYnkiLCAibm9kZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtYXgiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJpbmRleCIsICJtb2R1bGUiLCAicmVxdWlyZV9jb25zdGFudHMiLCAibW9kdWxlIiwgInBhdGgiLCAicmVxdWlyZV91dGlscyIsICJwYXRoIiwgIm1vZHVsZSIsICJyZXF1aXJlX3BhcnNlIiwgIm1vZHVsZSIsICJvcHRzIiwgInZhbHVlIiwgInJlc3QiLCAic291cmNlIiwgIm1vZHVsZSIsICJwYXRoIiwgInN0YXRlIiwgInJlcXVpcmVfcGljb21hdGNoIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAicGF0aCIsICJpc0R5bmFtaWNQYXR0ZXJuIiwgImlzTmVnYXRpdmVQYXR0ZXJuIiwgInBhdHRlcm4iLCAibWVyZ2UyIiwgInJlcXVpcmVfdXRpbHMiLCAiZnMiLCAicGF0aCIsICJwYXRoIiwgInBhdGgiLCAicmVxdWlyZV9mcyIsICJmcyIsICJmcyIsICJwYXRoIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAicXVldWVNaWNyb3Rhc2siLCAicmVxdWlyZV9jb25zdGFudHMiLCAicmVxdWlyZV9mcyIsICJyZXF1aXJlX3V0aWxzIiwgImZzIiwgInJlcXVpcmVfYXN5bmMiLCAicGF0aCIsICJyZXF1aXJlX3N5bmMiLCAicmVxdWlyZV9mcyIsICJmcyIsICJyZXF1aXJlX3NldHRpbmdzIiwgInBhdGgiLCAiZnMiLCAicmVxdWlyZV9vdXQiLCAicGF0aCIsICJtb2R1bGUiLCAibW9kdWxlIiwgInJlcXVpcmVfY29tbW9uIiwgInJlcXVpcmVfYXN5bmMiLCAicmVxdWlyZV9hc3luYyIsICJyZXF1aXJlX3N0cmVhbSIsICJyZXF1aXJlX3N5bmMiLCAicmVxdWlyZV9zeW5jIiwgInJlcXVpcmVfc2V0dGluZ3MiLCAicGF0aCIsICJyZXF1aXJlX291dCIsICJyZXF1aXJlX3JlYWRlciIsICJwYXRoIiwgInJlcXVpcmVfc3RyZWFtIiwgInJlcXVpcmVfYXN5bmMiLCAicmVxdWlyZV9lbnRyeSIsICJwYXRoIiwgInJlcXVpcmVfYXN5bmMiLCAicmVxdWlyZV9zdHJlYW0iLCAicmVxdWlyZV9zeW5jIiwgInJlcXVpcmVfc3luYyIsICJyZXF1aXJlX3NldHRpbmdzIiwgImZzIiwgIm9zIiwgInJlcXVpcmVfb3V0IiwgIm1vZHVsZSIsICJhc3NlcnRQYXR0ZXJuc0lucHV0IiwgIkZhc3RHbG9iIiwgImdlbmVyYXRlVGFza3MiLCAiaXNEeW5hbWljUGF0dGVybiIsICJwb3NpeCIsICJlc2NhcGVQYXRoIiwgImNvbnZlcnRQYXRoVG9QYXR0ZXJuIiwgIndpbjMyIiwgImZzIiwgIm1vZHVsZSIsICJwYXRoIiwgIm1vZHVsZSIsICJfIiwgInBhdGgiLCAicHJvY2VzcyIsICJvcyIsICJ0dHkiLCAic3R5bGVzIiwgImNoYWxrIiwgInN0eWxlcyIsICJpbXBvcnRfbm9kZV9wYXRoIiwgImltcG9ydF9ub2RlX2ZzIiwgImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X2Zhc3RfZ2xvYiIsICJpbXBvcnRfbm9kZV9wcm9jZXNzIiwgInBhdGgiLCAicGF0aCIsICJnaXRJZ25vcmUiLCAicHJvY2VzcyIsICJmYXN0R2xvYiIsICJmcyIsICJmcyIsICJub3JtYWxpemVPcHRpb25zIiwgInBhdGgiLCAibm9kZVBhdGgiLCAibWVyZ2UyIiwgInBhdHRlcm5zIiwgIm9wdGlvbnMiLCAiZGlyR2xvYiIsICJmYXN0R2xvYiIsICJwYXRoIiwgInBhdGgiLCAiXyIsICJwYXRoIiwgInBhdGgiLCAiX2EiLCAiZnMiLCAiZnMiLCAiaW1wb3J0X3pvZCIsICJfIiwgInByZXR0aWVyIl0KfQo=