@phenixrts/sdk 2023.2.1-beta.67 → 2023.2.2-beta.69

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/channels/debug/channels.js +83 -58
  2. package/channels/debug/package.json +1 -1
  3. package/channels/debug.private/channels.js +83 -58
  4. package/channels/debug.private/package.json +1 -1
  5. package/channels/es5.debug.private/channels.js +80 -55
  6. package/channels/es5.debug.private/package.json +1 -1
  7. package/channels/min/channels.js +1 -1
  8. package/channels/min/channels.js.map +1 -1
  9. package/channels/min/package.json +1 -1
  10. package/channels/min.private/channels.js +1 -1
  11. package/channels/min.private/channels.js.map +1 -1
  12. package/channels/min.private/package.json +1 -1
  13. package/channels/package.json +1 -1
  14. package/full/debug/full.js +83 -58
  15. package/full/debug/package.json +1 -1
  16. package/full/debug.private/full.js +83 -58
  17. package/full/debug.private/package.json +1 -1
  18. package/full/min/full.js +1 -1
  19. package/full/min/full.js.map +1 -1
  20. package/full/min/package.json +1 -1
  21. package/full/min.private/full.js +1 -1
  22. package/full/min.private/full.js.map +1 -1
  23. package/full/min.private/package.json +1 -1
  24. package/full/package.json +1 -1
  25. package/package.json +1 -3
  26. package/publish/debug/package.json +1 -1
  27. package/publish/debug/publish.js +83 -58
  28. package/publish/debug.private/package.json +1 -1
  29. package/publish/debug.private/publish.js +83 -58
  30. package/publish/min/package.json +1 -1
  31. package/publish/min/publish.js +1 -1
  32. package/publish/min/publish.js.map +1 -1
  33. package/publish/min.private/package.json +1 -1
  34. package/publish/min.private/publish.js +1 -1
  35. package/publish/min.private/publish.js.map +1 -1
  36. package/publish/package.json +1 -1
  37. package/types/environment/BuildFeatures.d.ts +13 -0
  38. package/full/es5.debug.private/full.js +0 -10105
  39. package/full/es5.debug.private/package.json +0 -26
  40. package/groups/debug/groups.js +0 -4508
  41. package/groups/debug/package.json +0 -26
  42. package/groups/debug.private/groups.js +0 -4476
  43. package/groups/debug.private/package.json +0 -26
  44. package/groups/es5.debug.private/groups.js +0 -4131
  45. package/groups/es5.debug.private/package.json +0 -26
  46. package/groups/min/groups.js +0 -3
  47. package/groups/min/groups.js.LICENSE.txt +0 -1
  48. package/groups/min/groups.js.map +0 -1
  49. package/groups/min/package.json +0 -26
  50. package/groups/min.private/groups.js +0 -3
  51. package/groups/min.private/groups.js.LICENSE.txt +0 -1
  52. package/groups/min.private/groups.js.map +0 -1
  53. package/groups/min.private/package.json +0 -26
  54. package/groups/package.json +0 -26
  55. package/messaging/debug/messaging.js +0 -4508
  56. package/messaging/debug/package.json +0 -26
  57. package/messaging/debug.private/messaging.js +0 -4476
  58. package/messaging/debug.private/package.json +0 -26
  59. package/messaging/es5.debug.private/messaging.js +0 -4131
  60. package/messaging/es5.debug.private/package.json +0 -26
  61. package/messaging/min/messaging.js +0 -3
  62. package/messaging/min/messaging.js.LICENSE.txt +0 -1
  63. package/messaging/min/messaging.js.map +0 -1
  64. package/messaging/min/package.json +0 -26
  65. package/messaging/min.private/messaging.js +0 -3
  66. package/messaging/min.private/messaging.js.LICENSE.txt +0 -1
  67. package/messaging/min.private/messaging.js.map +0 -1
  68. package/messaging/min.private/package.json +0 -26
  69. package/messaging/package.json +0 -26
  70. package/publish/es5.debug.private/package.json +0 -26
  71. package/publish/es5.debug.private/publish.js +0 -7842
  72. package/types/dom/PrivacyMode.d.ts +0 -5
@@ -1290,55 +1290,6 @@ var NetworkMonitor = /*#__PURE__*/function () {
1290
1290
  }();
1291
1291
 
1292
1292
 
1293
- /***/ }),
1294
-
1295
- /***/ "./src/dom/PrivacyMode.ts":
1296
- /*!********************************!*
1297
- !*** ./src/dom/PrivacyMode.ts ***!
1298
- \********************************/
1299
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1300
-
1301
- "use strict";
1302
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1303
- /* harmony export */ "default": () => /* binding */ PrivacyMode
1304
- /* harmony export */ });
1305
- /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/classCallCheck.js */ "./node_modules/@babel/runtime/helpers/classCallCheck.js");
1306
- /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_0__);
1307
- /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/createClass.js */ "./node_modules/@babel/runtime/helpers/createClass.js");
1308
- /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1__);
1309
- /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/defineProperty.js */ "./node_modules/@babel/runtime/helpers/defineProperty.js");
1310
- /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2__);
1311
-
1312
-
1313
-
1314
- /**
1315
- * Copyright 2023 Phenix Real Time Solutions, Inc. Confidential and Proprietary. All Rights Reserved.
1316
- */
1317
- var PrivacyMode = /*#__PURE__*/function () {
1318
- function PrivacyMode() {
1319
- _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_0___default()(this, PrivacyMode);
1320
- }
1321
- _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1___default()(PrivacyMode, null, [{
1322
- key: "isPrivate",
1323
- get: function get() {
1324
- return this._isPrivate;
1325
- }
1326
- }, {
1327
- key: "applyIsPrivate",
1328
- value: function applyIsPrivate() {
1329
- try {
1330
- this._isPrivate = false;
1331
- } catch (e) {
1332
- this._isPrivate = false;
1333
- }
1334
- }
1335
- }]);
1336
- return PrivacyMode;
1337
- }();
1338
- _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default()(PrivacyMode, "_isPrivate", void 0);
1339
-
1340
- PrivacyMode.applyIsPrivate();
1341
-
1342
1293
  /***/ }),
1343
1294
 
1344
1295
  /***/ "./src/dom/StreamSetupListener.ts":
@@ -1535,6 +1486,80 @@ var EdgeToken = /*#__PURE__*/function () {
1535
1486
  }();
1536
1487
 
1537
1488
 
1489
+ /***/ }),
1490
+
1491
+ /***/ "./src/environment/BuildFeatures.ts":
1492
+ /*!******************************************!*
1493
+ !*** ./src/environment/BuildFeatures.ts ***!
1494
+ \******************************************/
1495
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1496
+
1497
+ "use strict";
1498
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1499
+ /* harmony export */ "default": () => /* binding */ BuildFeatures
1500
+ /* harmony export */ });
1501
+ /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/classCallCheck.js */ "./node_modules/@babel/runtime/helpers/classCallCheck.js");
1502
+ /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_0__);
1503
+ /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/createClass.js */ "./node_modules/@babel/runtime/helpers/createClass.js");
1504
+ /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1__);
1505
+ /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/defineProperty.js */ "./node_modules/@babel/runtime/helpers/defineProperty.js");
1506
+ /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2__);
1507
+
1508
+
1509
+
1510
+ /**
1511
+ * Copyright 2023 Phenix Real Time Solutions, Inc. Confidential and Proprietary. All Rights Reserved.
1512
+ */
1513
+ var BuildFeatures = /*#__PURE__*/function () {
1514
+ function BuildFeatures() {
1515
+ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_0___default()(this, BuildFeatures);
1516
+ }
1517
+ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1___default()(BuildFeatures, null, [{
1518
+ key: "sendLocalCandidates",
1519
+ get: function get() {
1520
+ return this._sendLocalCandidates;
1521
+ }
1522
+ }, {
1523
+ key: "sendLogs",
1524
+ get: function get() {
1525
+ return this._sendLogs;
1526
+ }
1527
+ }, {
1528
+ key: "sendMetrics",
1529
+ get: function get() {
1530
+ return this._sendMetrics;
1531
+ }
1532
+ }, {
1533
+ key: "logToConsole",
1534
+ get: function get() {
1535
+ return this._logToConsole;
1536
+ }
1537
+ }, {
1538
+ key: "applyFeatures",
1539
+ value: function applyFeatures() {
1540
+ try {
1541
+ var features = {"sendLocalCandidates":true,"sendLogs":"All","sendMetrics":"All","logToConsole":"All"};
1542
+ this._sendLocalCandidates = 'sendLocalCandidates' in features ? features.sendLocalCandidates : true;
1543
+ this._sendLogs = 'sendLogs' in features ? features.sendLogs : 'All';
1544
+ this._sendMetrics = 'sendMetrics' in features ? features.sendMetrics : 'All';
1545
+ this._logToConsole = 'logToConsole' in features ? features.logToConsole : 'All';
1546
+ } catch (e) {
1547
+ this._sendLocalCandidates = true;
1548
+ this._sendLogs = 'All';
1549
+ this._sendMetrics = 'All';
1550
+ this._logToConsole = 'All';
1551
+ }
1552
+ }
1553
+ }]);
1554
+ return BuildFeatures;
1555
+ }();
1556
+ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default()(BuildFeatures, "_sendLocalCandidates", void 0);
1557
+ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default()(BuildFeatures, "_sendLogs", void 0);
1558
+ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default()(BuildFeatures, "_sendMetrics", void 0);
1559
+ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default()(BuildFeatures, "_logToConsole", void 0);
1560
+
1561
+ BuildFeatures.applyFeatures();
1562
+
1538
1563
  /***/ }),
1539
1564
 
1540
1565
  /***/ "./src/environment/FeatureEnablement.ts":
@@ -2133,7 +2158,7 @@ var Logger = /*#__PURE__*/function () {
2133
2158
  /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_0__);
2134
2159
  /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/createClass.js */ "./node_modules/@babel/runtime/helpers/createClass.js");
2135
2160
  /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1__);
2136
- /* harmony import */ var _dom_PrivacyMode__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dom/PrivacyMode */ "./src/dom/PrivacyMode.ts");
2161
+ /* harmony import */ var _environment_BuildFeatures__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../environment/BuildFeatures */ "./src/environment/BuildFeatures.ts");
2137
2162
  /* harmony import */ var _logger_Logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../logger/Logger */ "./src/logger/Logger.ts");
2138
2163
 
2139
2164
 
@@ -2149,12 +2174,12 @@ var LoggerDefaults = /*#__PURE__*/function () {
2149
2174
  _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1___default()(LoggerDefaults, null, [{
2150
2175
  key: "defaultLoggingLevel",
2151
2176
  get: function get() {
2152
- return _dom_PrivacyMode__WEBPACK_IMPORTED_MODULE_2__.default.isPrivate ? _logger_Logger__WEBPACK_IMPORTED_MODULE_3__.LoggingLevel.Off : _logger_Logger__WEBPACK_IMPORTED_MODULE_3__.LoggingLevel.All;
2177
+ return _logger_Logger__WEBPACK_IMPORTED_MODULE_3__.LoggingLevel[_environment_BuildFeatures__WEBPACK_IMPORTED_MODULE_2__.default.sendLogs];
2153
2178
  }
2154
2179
  }, {
2155
2180
  key: "defaultConsoleLoggingLevel",
2156
2181
  get: function get() {
2157
- return _dom_PrivacyMode__WEBPACK_IMPORTED_MODULE_2__.default.isPrivate ? _logger_Logger__WEBPACK_IMPORTED_MODULE_3__.LoggingLevel.Off : _logger_Logger__WEBPACK_IMPORTED_MODULE_3__.LoggingLevel.All;
2182
+ return _logger_Logger__WEBPACK_IMPORTED_MODULE_3__.LoggingLevel[_environment_BuildFeatures__WEBPACK_IMPORTED_MODULE_2__.default.logToConsole];
2158
2183
  }
2159
2184
  }, {
2160
2185
  key: "defaultTelemetryLoggingLevel",
@@ -2907,7 +2932,7 @@ var TelemetryLevelMapping = /*#__PURE__*/function () {
2907
2932
  /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_0__);
2908
2933
  /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/createClass.js */ "./node_modules/@babel/runtime/helpers/createClass.js");
2909
2934
  /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1__);
2910
- /* harmony import */ var _dom_PrivacyMode__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dom/PrivacyMode */ "./src/dom/PrivacyMode.ts");
2935
+ /* harmony import */ var _environment_BuildFeatures__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../environment/BuildFeatures */ "./src/environment/BuildFeatures.ts");
2911
2936
  /* harmony import */ var _metrics_MetricsConfiguration__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../metrics/MetricsConfiguration */ "./src/metrics/MetricsConfiguration.ts");
2912
2937
 
2913
2938
 
@@ -2923,7 +2948,7 @@ var TelemetryDefault = /*#__PURE__*/function () {
2923
2948
  _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1___default()(TelemetryDefault, null, [{
2924
2949
  key: "defaultTelemetryLevel",
2925
2950
  get: function get() {
2926
- return _dom_PrivacyMode__WEBPACK_IMPORTED_MODULE_2__.default.isPrivate ? _metrics_MetricsConfiguration__WEBPACK_IMPORTED_MODULE_3__.TelemetryLevel.Essential : _metrics_MetricsConfiguration__WEBPACK_IMPORTED_MODULE_3__.TelemetryLevel.All;
2951
+ return _metrics_MetricsConfiguration__WEBPACK_IMPORTED_MODULE_3__.TelemetryLevel[_environment_BuildFeatures__WEBPACK_IMPORTED_MODULE_2__.default.sendMetrics];
2927
2952
  }
2928
2953
  }]);
2929
2954
  return TelemetryDefault;
@@ -4340,7 +4365,7 @@ var Environment = /*#__PURE__*/function () {
4340
4365
  /* harmony import */ var _metrics_MetricsConfiguration__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../metrics/MetricsConfiguration */ "./src/metrics/MetricsConfiguration.ts");
4341
4366
  /* harmony import */ var _metrics_TelemetricLevelMapping__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../metrics/TelemetricLevelMapping */ "./src/metrics/TelemetricLevelMapping.ts");
4342
4367
  /* harmony import */ var _logger_LoggingLevelMapping__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../logger/LoggingLevelMapping */ "./src/logger/LoggingLevelMapping.ts");
4343
- /* harmony import */ var _dom_PrivacyMode__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../dom/PrivacyMode */ "./src/dom/PrivacyMode.ts");
4368
+ /* harmony import */ var _environment_BuildFeatures__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../environment/BuildFeatures */ "./src/environment/BuildFeatures.ts");
4344
4369
  /* harmony import */ var _dom_BrowserDetector__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../dom/BrowserDetector */ "./src/dom/BrowserDetector.ts");
4345
4370
  /* harmony import */ var _dom_ApplicationActivityMonitor__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../dom/ApplicationActivityMonitor */ "./src/dom/ApplicationActivityMonitor.ts");
4346
4371
  /* harmony import */ var _rtc_PeerConnectionService__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../rtc/PeerConnectionService */ "./src/rtc/PeerConnectionService.ts");
@@ -4672,7 +4697,7 @@ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpe
4672
4697
  _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default()(SDK, "_telemetryLevel", new _rx_Subject__WEBPACK_IMPORTED_MODULE_5__.default(_metrics_TelemetryDefault__WEBPACK_IMPORTED_MODULE_24__.default.defaultTelemetryLevel));
4673
4698
  _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default()(SDK, "_metricsService", void 0);
4674
4699
  _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default()(SDK, "_metricsConfiguration", void 0);
4675
- _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default()(SDK, "_sendLocalCandidates", new _rx_Subject__WEBPACK_IMPORTED_MODULE_5__.default(!_dom_PrivacyMode__WEBPACK_IMPORTED_MODULE_15__.default.isPrivate));
4700
+ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default()(SDK, "_sendLocalCandidates", new _rx_Subject__WEBPACK_IMPORTED_MODULE_5__.default(_environment_BuildFeatures__WEBPACK_IMPORTED_MODULE_15__.default.sendLocalCandidates));
4676
4701
  _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default()(SDK, "_tenancy", new _rx_Subject__WEBPACK_IMPORTED_MODULE_5__.default(''));
4677
4702
  _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default()(SDK, "_clientSessionId", _lang_Strings__WEBPACK_IMPORTED_MODULE_4__.default.random(32));
4678
4703
  _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default()(SDK, "_loadedTimestamp", new Date());
@@ -9015,7 +9040,7 @@ var VersionManager = /*#__PURE__*/function () {
9015
9040
  key: "sdkVersion",
9016
9041
  get: function get() {
9017
9042
  try {
9018
- return "2023-06-07T14:53:52.852Z (2023.2.1-beta.67)";
9043
+ return "2023-06-12T16:28:22.870Z (2023.2.2-beta.69)";
9019
9044
  } catch (e) {
9020
9045
  return this._defaultVersion;
9021
9046
  }
@@ -9944,4 +9969,4 @@ var VideoTelemetry = /*#__PURE__*/function () {
9944
9969
  /******/ })()
9945
9970
  ;
9946
9971
  });
9947
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL05ldHdvcmtNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vUHJpdmFjeU1vZGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZWRnZUF1dGgvRWRnZVRva2VuLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9EaXNwb3NhYmxlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL0Rpc3Bvc2FibGVMaXN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL1N0cmluZ3MudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9BcHBlbmRlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Db25zb2xlQXBwZW5kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ1RocmVzaG9sZC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcHJvbWlzZS9Qcm9taXNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9wcm9taXNlL1Byb21pc2VIYW5kbGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1NkcFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J4L1JlYWRPbmx5U3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvU3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL0Vudmlyb25tZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvU0RLLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvVGVsZW1ldHJ5VXJsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L0NoYW5uZWxDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1N0YXRlQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvVG9rZW5Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZU1vZGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVTdGF0ZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0VuZFBvaW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0NodW5rZWRTdHJlYW0udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvSGxzUGxheWVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0luc2VydGFibGVTdHJlYW1zLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0xpdmVTdHJlYW1pbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvTmV0d29ya1N0YXRlcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9SZWFsVGltZVN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TaGFrYVBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TdHJlYW1GYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1dlYlBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRHVyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9EaW1lbnNpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9zdGFydHVwIl0sIm5hbWVzIjpbImRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0IiwiQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydHkiLCJEaXNwb3NhYmxlTGlzdCIsIkRhdGUiLCJub3ciLCJfaXNGb3JlZ3JvdW5kIiwiU3ViamVjdCIsIl9yZWFkT25seUlzRm9yZWdyb3VuZCIsIlJlYWRPbmx5U3ViamVjdCIsImRldGVjdFRhYkZvY3VzQ2hhbmdlIiwiX2NyZWF0ZUNsYXNzIiwia2V5IiwiZ2V0IiwidmFsdWUiLCJnZXRUaW1lU2luY2VMYXN0Q2hhbmdlIiwiX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZSIsImRpc3Bvc2UiLCJfZGlzcG9zYWJsZXMiLCJfdGhpcyIsImhpZGRlbiIsInZpc2liaWxpdHlDaGFuZ2UiLCJkb2N1bWVudCIsIl90eXBlb2YiLCJtc0hpZGRlbiIsIndlYmtpdEhpZGRlbiIsImhhbmRsZVZpc2liaWxpdHlDaGFuZ2UiLCJpc0ZvcmVncm91bmQiLCJzZXRGb2N1c1N0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImFkZCIsIkRpc3Bvc2FibGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibGlzdGVuRm9yRG9jdW1lbnRGb2N1cyIsImNhbGwiLCJfdGhpczIiLCJfZG9jdW1lbnRGb2N1c0ludGVydmFsIiwid2luZG93Iiwic2V0SW50ZXJ2YWwiLCJoYXNGb2N1cyIsImNsZWFySW50ZXJ2YWwiLCJCcm93c2VyRGV0ZWN0b3IiLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwiX2Jyb3dzZXJOYW1lIiwiX2Jyb3dzZXJNYWpvclZlcnNpb24iLCJfaXNDaHJvbWU2OSIsIl9pc0Nocm9tZTcwIiwiX2lzQ2hyb21lNzEiLCJfaXNDaHJvbWU3MiIsIl9pc0Nocm9tZTc0IiwiX2lzQ2hyb21lNzUiLCJfaXNDaHJvbWU3NiIsIl9pc0Nocm9tZTc3IiwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24iLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJicm93c2VyTmFtZUFuZFZlcnNpb24iLCJtYXRjaCIsIl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUiLCJwYXJzZUJyb3dzZXJOYW1lIiwiYnJvd3Nlck5hbWVMaXN0Iiwic3BsaXQiLCJwYXJzZUJyb3dzZXJNYWpvclZlcnNpb24iLCJicm93c2VyVmVyc2lvbkxpc3QiLCJmdWxsVmVyc2lvbiIsIk51bWJlciIsIm1zaWUiLCJpbmRleE9mIiwiY29uY2F0IiwicGFyc2VJbnQiLCJzdWJzdHJpbmciLCJ0cmlkZW50IiwidmVyc2lvbiIsImluY2x1ZGVzIiwiQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciIsImdldFN0cmluZ1ZhbHVlIiwibmFtZSIsInJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUiLCJyZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlIiwiZGVmYXVsdFN0cmluZ1ZhbHVlIiwiZ2V0Qm9vbGVhblZhbHVlIiwidmFsdWVGcm9tVXJpIiwiZGVmYXVsdEJvb2xlYW5WYWx1ZSIsIlRlbGVtZXRyeUxldmVsTWFwcGluZyIsIlRlbGVtZXRyeURlZmF1bHQiLCJMb2dnaW5nTGV2ZWxNYXBwaW5nIiwiTG9nZ2VyRGVmYXVsdHMiLCJtZXRhVmFsdWUiLCJxdWVyeVNlbGVjdG9yIiwiZ2V0QXR0cmlidXRlIiwidmFsdWVVUklQYXJhbWV0ZXJOYW1lIiwiVVJMU2VhcmNoUGFyYW1zIiwibG9jYXRpb24iLCJzZWFyY2giLCJ1bmRlZmluZWQiLCJOZXR3b3JrTW9uaXRvciIsImlzU3VwcG9ydGVkIiwic2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzIiwidXBkYXRlU3RhdGlzdGljcyIsIl9pc1N1cHBvcnRlZCIsIl9ydHQiLCJfZWZmZWN0aXZlVHlwZSIsIl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsImdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiZG93bmxpbmsiLCJkb3dubGlua01heCIsImdldEVmZmVjdGl2ZVR5cGUiLCJlZmZlY3RpdmVUeXBlIiwidHlwZSIsImdldFJvdW5kVHJpcFRpbWUiLCJydHQiLCJsaXN0ZW5lciIsIlByaXZhY3lNb2RlIiwiX2lzUHJpdmF0ZSIsImFwcGx5SXNQcml2YXRlIiwiX19QUklWQUNZX01PREVfXyIsImUiLCJTdHJlYW1TZXR1cExpc3RlbmVyIiwicGFnZUxvYWRUaW1lIiwiTG9nZ2VyRmFjdG9yeSIsIlNESyIsIl9zdGFydFRpbWUiLCJfcGFnZUxvYWRUaW1lIiwic3VjY2VzcyIsInN0cmVhbUlkIiwicmVjb3JkU3RyZWFtTWV0cmljIiwiTWV0cmljc1R5cGUiLCJmYWlsIiwibWV0cmljVHlwZSIsIl9tZXRyaWNTdWJtaXR0ZWQiLCJzZXR1cFRpbWUiLCJtZXRyaWNOYW1lIiwiTWV0cmljVHlwZSIsImdldE5hbWUiLCJtZXRyaWNzU2VydmljZSIsInB1c2giLCJydW50aW1lIiwidWludDY0IiwiX2xvZ2dlciIsImluZm8iLCJEdXJhdGlvbnMiLCJ0b0lzb1N0cmluZyIsImVkZ2VBdXRoVG9rZW5QcmVmaXgiLCJFZGdlQXV0aFBhcnNlciIsInBhcnNlVG9rZW4iLCJ0b2tlbiIsImlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkIiwiZXJyb3IiLCJFZGdlVG9rZW4iLCJkZWNvZGVkVG9rZW4iLCJhdG9iIiwic3Vic3RyIiwibGVuZ3RoIiwiZWRnZVRva2VuIiwiSlNPTiIsInBhcnNlIiwic3RhcnRzV2l0aCIsIl9lZGdlVG9rZW4kdG9rZW4iLCJfZWRnZVRva2VuJHRva2VuMiIsIl9hcHBsaWNhdGlvbklkIiwiYXBwbGljYXRpb25JZCIsIl90b2tlbiIsInVyaSIsIlVSTCIsImNhcGFiaWxpdGllcyIsIkZlYXR1cmVFbmFibGVtZW50IiwiTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3NvciIsIk1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3IiLCJkaXNwb3NhYmxlIiwiX2Rpc3Bvc2VkIiwiX2Rpc3Bvc2FibGUiLCJfbGlzdCIsImZvckVhY2giLCJ0b1N0cmluZyIsIlN0cmluZ3MiLCJFcnJvciIsInJhbmRvbSIsInJhbmRvbTEzQ2hhcmFjdGVycyIsIk1hdGgiLCJsb29wcyIsImNlaWwiLCJBcnJheSIsImZpbGwiLCJyZWR1Y2UiLCJzdHJpbmciLCJmdW5jIiwiYXNzZXJ0VW5yZWFjaGFibGUiLCJ4IiwiQXBwZW5kZXJzIiwiX2FwcGVuZGVycyIsImFwcGVuZGVyIiwicmVtb3ZlIiwiaXRlbXMiLCJpdGVtIiwiQ29uc29sZUFwcGVuZGVyIiwidGhyZXNob2xkIiwiX3RocmVzaG9sZCIsImxvZyIsImxvZ0xldmVsIiwibWVzc2FnZSIsImNhdGVnb3J5IiwiZGF0ZSIsImZ1bGxNZXNzYWdlIiwidG9JU09TdHJpbmciLCJMb2dnaW5nTGV2ZWwiLCJjb25zb2xlIiwiTG9nZ2VyIiwiYXBwZW5kZXJzIiwiX2NhdGVnb3J5IiwidHJhY2UiLCJUcmFjZSIsIl9sZW4iLCJhcmd1bWVudHMiLCJhcmdzIiwiX2tleSIsImRlYnVnIiwiRGVidWciLCJfbGVuMiIsIl9rZXkyIiwiSW5mbyIsIl9sZW4zIiwiX2tleTMiLCJ3YXJuIiwiV2FybiIsIl9sZW40IiwiX2tleTQiLCJfbGVuNSIsIl9rZXk1IiwiZmF0YWwiLCJGYXRhbCIsIl9sZW42IiwiX2tleTYiLCJsZXZlbCIsInJlcGxhY2VQbGFjZWhvbGRlcnMiLCJyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nIiwiaW5kZXgiLCJyZXBsYWNlQXJndW1lbnQiLCJzcGxpY2UiLCJzdHJpbmdpZnkiLCJhY2N1bXVsYXRvciIsImN1cnJlbnRWYWx1ZSIsImFycmF5Iiwic3RhY2siLCJhcmciLCJjYWNoZSIsIk9iamVjdCIsImFyZ3VtZW50IiwiZGF0YSIsInRvU3RyaW5nU3RyIiwiX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJnZXRMb2dnZXIiLCJsb2dnZXIiLCJfbG9nZ2VycyIsImFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUxvZ2dpbmdMZXZlbCIsImFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwiLCJhcHBseUNvbnNvbGVMb2dnZXIiLCJiaW5kIiwiYXBwbHlUZWxlbWV0cnlMb2dnZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsIl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwic2V0VGhyZXNob2xkIiwiYXBwbHlBcHBlbmRlciIsIlRlbGVtZXRyeUFwcGVuZGVyIiwiTG9nZ2luZ1RocmVzaG9sZCIsIlRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlIiwibG9nZ2luZ0xldmVsIiwiY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbCIsImxvZ2dpbmdMZXZlbFR5cGUiLCJtZXRyaWNzIiwiX21ldHJpY3MiLCJnZXRUZWxlbWV0cnlMZXZlbCIsIlRlbGVtZXRyeUxldmVsIiwiTWV0cmljc0NvbmZpZ3VyYXRpb24iLCJfdXJsIiwic2V0IiwidXJsIiwibWV0cmljc1VybCIsInBhdGhuYW1lIiwiX2Vudmlyb25tZW50IiwiZW52aXJvbm1lbnQiLCJfdGVuYW5jeSIsInRlbmFuY3kiLCJfc2Vzc2lvbklkIiwic2Vzc2lvbklkIiwiTWV0cmljc0ZhY3RvcnkiLCJnZXRNZXRyaWNzU2VydmljZSIsIm1ldHJpY3NTZXJ2aWNlcyIsIl9tZXRyaWNzU2VydmljZXMiLCJtZXRyaWNzQ29uZmlndXJhdGlvbiIsIlRlbGVtZXRyeVVybCIsIkVudmlyb25tZW50IiwiTWV0cmljc1NlcnZpY2UiLCJzZXRUZWxlbWV0cnlMZXZlbCIsInRlbGVtZXRyeUxldmVsIiwidmFsdWVzIiwicmVxdWVzdFNpemVMaW1pdCIsImhvc3RuYW1lIiwiX21ldHJpY3NDb25maWd1cmF0aW9uIiwibWV0cmljIiwicHJldmlvdXNWYWx1ZSIsInJlc291cmNlIiwia2luZCIsIm1ldHJpY1JlY29yZCIsInRpbWVzdGFtcCIsImZ1bGxRdWFsaWZpZWROYW1lIiwiX2RvbWFpbiIsIlZlcnNpb25NYW5hZ2VyIiwiaWdub3JlZCIsInNlbmRNZXRyaWNzSWZBYmxlIiwiX3NlbmRNZXRyaWNzIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiX2NhbGxlZSIsIm1ldHJpY3NNZXNzYWdlcyIsImZvcm1EYXRhIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiRm9ybURhdGEiLCJhcHBlbmQiLCJyZWNvcmRzIiwiZmV0Y2giLCJtZXRob2QiLCJib2R5IiwiYWJydXB0Iiwic2VudCIsInN0b3AiLCJzZW5kTWV0cmljcyIsIl94IiwiYXBwbHkiLCJfc2VuZE1ldHJpY3NJZkFibGUiLCJfY2FsbGVlMiIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsIl9pc1NlbmRpbmciLCJzbGljZSIsInRoZW4iLCJyZXNwb25zZSIsImNhdGNoIiwiY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUiLCJjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbCIsInRlbGVtZXRyeUxldmVsVHlwZSIsIlByb21pc2UiLCJjYWxsYmFjayIsIlR5cGVFcnJvciIsIl9zdGF0ZSIsIl9oYW5kbGVkIiwiX3ZhbHVlIiwiX2RlZmVycmVkcyIsImRvUmVzb2x2ZSIsImRvbmUiLCJwcm9taXNlUmVzb2x2ZSIsInJlYXNvbiIsInByb21pc2VSZWplY3QiLCJuZXdWYWx1ZSIsInByb21pc2UiLCJmaW5hbGUiLCJfaW1tZWRpYXRlIiwiX3VuaGFuZGxlZFJlamVjdGlvbiIsImkiLCJsZW4iLCJoYW5kbGUiLCJkZWZlcnJlZCIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsInJlc3VsdCIsImFsbCIsImFyciIsInJlc29sdmUiLCJyZWplY3QiLCJpc0FycmF5IiwicHJvdG90eXBlIiwicmVtYWluaW5nIiwibWFuYWdlUmVzcG9uc2UiLCJjb25zdHJ1Y3RvciIsIl8iLCJyYWNlIiwic2V0VGltZW91dCIsIlByb21pc2VIYW5kbGVyIiwiUGVlckNvbm5lY3Rpb25TZXJ2aWNlIiwiX3BlZXJDb25uZWN0aW9uRmFjdG9yeSIsImluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmciLCJwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfcHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhY2hlZCIsImRpcmVjdGlvbiIsInBlZXJDb25uZWN0aW9uIiwiY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhbGxlZTMiLCJfYXJnczMiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJjcmVhdGVQZWVyQ29ubmVjdGlvbiIsIl9yZWYiLCJzdXBwb3J0c0FkZFRyYW5zY2VpdmVyIiwidmlkZW9UcmFuc2NlaXZlciIsImF1ZGlvVHJhbnNjZWl2ZXIiLCJvcHRpb25zIiwiYWRkVHJhbnNjZWl2ZXIiLCJ0MCIsInQxIiwidDIiLCJjcmVhdGVPZmZlciIsInQzIiwibG9jYWxPZmZlciIsIm9mZmVyVG9SZWNlaXZlQXVkaW8iLCJvZmZlclRvUmVjZWl2ZVZpZGVvIiwidDQiLCJ0NSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJSdGNDb25maWd1cmF0aW9uTWFuYWdlciIsInRydW5jYXRlSWNlU2VydmVycyIsImNvbmZpZ3VyYXRpb24iLCJpY2VTZXJ2ZXJzIiwidXJscyIsInVzZXJuYW1lIiwiY3JlZGVudGlhbCIsInVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQiLCJSdGNDb25uZWN0aW9uTW9uaXRvciIsIm1lZGlhU3RyZWFtIiwiZXN0aW1hdGVkUm91bmRUcmlwVGltZSIsIl9wZWVyQ29ubmVjdGlvbiIsIl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lIiwiX3RyYWNrc1RvTW9uaXRvciIsImdldFRyYWNrcyIsIm1hcCIsInRyYWNrIiwicGFyc2VkU0RQIiwiU2RwUGFyc2VyIiwiY3VycmVudFJlbW90ZURlc2NyaXB0aW9uIiwic2RwIiwiX2VzdGltYXRlZEF1ZGlvQ29kZWMiLCJhdWRpb0NvZGVjIiwiX2VzdGltYXRlZFZpZGVvQ29kZWMiLCJ2aWRlb0NvZGVjIiwidXBkYXRlU3RhdGlzdGljIiwiX3J0Y1N0YXRpc3RpYyIsIl9pc01vbml0b3JSdW5uaW5nIiwiX3VwZGF0ZVRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJfdXBkYXRlU3RhdGlzdGljIiwiX2lnbm9yZWQiLCJnZXRLaW5kRm9yU2FmYXJpMTEiLCJ1cGRhdGVTdGF0aXN0aWNMZWdhY3kiLCJpZCIsImdldFN0YXRzIiwic3RhdHMiLCJydGNTdGF0aXN0aWNzIiwicm91bmRUcmlwVGltZSIsImxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCIsInJlcG9ydCIsImN1cnJlbnRSb3VuZFRyaXBUaW1lIiwibWVkaWFUeXBlIiwiY29kZWMiLCJjb2RlY0lkIiwibWltZVR5cGUiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYyIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2MyIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjQiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHY1IiwiYnl0ZXMiLCJieXRlc1JlY2VpdmVkIiwicHJldmlvdXNCeXRlc1JlY2VpdmVkIiwiYnl0ZXNEZWx0YSIsInRpbWVEZWx0YSIsImJpdHJhdGUiLCJmbG9vciIsInNzcmMiLCJwYWNrZXRzTG9zdCIsInBhY2tldHNSZWNlaXZlZCIsImdldENvZGVjQnlUeXBlIiwidmlkZW8iLCJmcmFtZXNEZWNvZGVkIiwiZnBzIiwicm91bmQiLCJfdXBkYXRlU3RhdGlzdGljTGVnYWN5IiwiZ2V0U3RhdHNMZWdhY3kiLCJuYW1lcyIsInN0YXQiLCJfc2RwIiwic2RwU3BsaXRCeUxpbmVzIiwic2RwU3BsaXRCeVRyYWNrcyIsIl9hdWRpb0NvZGVjIiwiYXBwbHlDb2RlYyIsIl92aWRlb0NvZGVjIiwiX2lzQXVkaW9UcmFja0VuYWJsZWQiLCJpc1RyYWNrQnlUeXBlRW5hYmxlZCIsIl9pc1ZpZGVvVHJhY2tFbmFibGVkIiwic2RwU2VjdGlvbkZvclR5cGUiLCJmaW5kIiwic2RwVHJhY2siLCJ1c2VkQ29kZWNMaW5lIiwic2RwTGluZSIsInVzZWRDb2RlYyIsImNvZGVjTmFtZSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbiIsIndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uIiwiUlRDUGVlckNvbm5lY3Rpb24iLCJjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiIsImljZUNvbm5lY3Rpb25TdGF0ZSIsImdldENvbmZpZ3VyYXRpb24iLCJzZXRDb25maWd1cmF0aW9uIiwiX2NyZWF0ZU9mZmVyIiwiX2NyZWF0ZUFuc3dlciIsImNyZWF0ZUFuc3dlciIsIl94MiIsIl9zZXRMb2NhbERlc2NyaXB0aW9uIiwiZGVzY3JpcHRpb24iLCJzZXRMb2NhbERlc2NyaXB0aW9uIiwiUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIiwiX3gzIiwiX3NldFJlbW90ZURlc2NyaXB0aW9uIiwiX2NhbGxlZTQiLCJfZGVzY3JpcHRpb24kc2RwIiwiaGFzQ3J5cHRvIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0Iiwic2V0UmVtb3RlRGVzY3JpcHRpb24iLCJfeDQiLCJnZXRTZW5kZXJzIiwic2VsZWN0b3IiLCJfdGhpczMiLCJhZGRTdHJlYW0iLCJfdGhpczQiLCJhZGRUcmFjayIsIm9udHJhY2siLCJoYW5kbGVyIiwib25pY2VjYW5kaWRhdGUiLCJvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSIsImNsb3NlIiwiX2NyZWF0ZVBlZXJDb25uZWN0aW9uIiwic3ViamVjdCIsIl9zdWJqZWN0Iiwic3Vic2NyaWJlIiwiRGlzcG9zYWJsZUxpc3RlbmVyIiwiX0Rpc3Bvc2FibGUiLCJfaW5oZXJpdHMiLCJfc3VwZXIiLCJfY3JlYXRlU3VwZXIiLCJsaXN0ZW5lcnMiLCJpZHgiLCJfbGlzdGVuZXJzIiwiY2hhbmdlZCIsImNvbXBhcmFibGUiLCJlcXVhbHMiLCJnZXRFbnZpcm9ubWVudEZyb21VcmwiLCJiYXNlVVJMIiwib3JpZ2luIiwiX3NlbmRMb2NhbENhbmRpZGF0ZXMiLCJfY2xpZW50U2Vzc2lvbklkIiwiX2xvYWRlZFRpbWVzdGFtcCIsIl9yZWFkT25seUluaXRpYWxpemVkIiwiX3JlYWRPbmx5RGlzY292ZXJ5VXJpIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSIsIl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsIl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIl93ZWJQbGF5ZXJMb2FkZXIiLCJfc2hha2FQbGF5ZXJMb2FkZXIiLCJfaGxzSnNMb2FkZXIiLCJfbWV0cmljc1NlcnZpY2UiLCJfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfdGVsZW1ldHJ5VXJsIiwiX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJyZXRyaWVzQW1vdW50IiwiX3RlbGVtZXRyeUxldmVsIiwiYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwidGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImNsaWVudFNlc3Npb25JZCIsImlnbm9yZWRFbnZpcm9ubWVudCIsImlnbm9yZWREaXNjb3ZlcnlVcmkiLCJ0ZWxlbWV0cnlVcmwiLCJ0ZWxlbWV0cnlBcHBlbmRlciIsImlnbm9yZWRUZW5hbmN5IiwiYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbiIsIkRpc2NvdmVyeVVyaSIsImlnbm9yZWRUZWxlbWV0cnlMZXZlbCIsImFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJkaXNjb3ZlcnlVcmkiLCJnZXRUZWxlbWV0cnlVcmwiLCJjaGFubmVsVG9rZW4iLCJ1cmlWYWx1ZSIsImJhc2VVUklWYWx1ZSIsImluaXQiLCJfaW5pdGlhbGl6ZWQiLCJwZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJjb25zb2xlTG9nZ2luZ0xldmVsIiwiY29uc29sZUFwcGVuZGVyIiwiYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwid2ViUGxheWVyTG9hZGVyIiwic2hha2FQbGF5ZXJMb2FkZXIiLCJobHNKc0xvYWRlciIsInNlZ21lbnRzIiwicHJvdG9jb2wiLCJ1bnNoaWZ0IiwiZW5kc1dpdGgiLCJqb2luIiwiQml0cmF0ZVN0YXRlIiwiQml0cmF0ZU1vZGUiLCJkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24iLCJmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsInN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsIkNoYW5uZWwiLCJ2aWRlb0VsZW1lbnQiLCJjaGFubmVsQ29udGV4dE9wdGlvbnMiLCJ0YXJnZXRMYWciLCJ2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiaGFzSW5zZXJ0YWJsZVN0cmVhbXMiLCJfdG9rZW5Db250ZXh0IiwiVG9rZW5Db250ZXh0IiwiX2NoYW5uZWxDb250ZXh0IiwiQ2hhbm5lbENvbnRleHQiLCJfcGVlckNvbm5lY3Rpb25Db250ZXh0IiwiUGVlckNvbm5lY3Rpb25Db250ZXh0IiwiX3N0YXRlQ29udGV4dCIsIlN0YXRlQ29udGV4dCIsIl9leHBvbmVudGlhbEJhY2tvZmYiLCJFeHBvbmVudGlhbEJhY2tvZmYiLCJfY2hhbm5lbFN0YXJ0VGltZSIsIl9yZWFkT25seVZpZGVvRWxlbWVudCIsIl9yZWFkT25seVRva2VuIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24iLCJfcmVhZE9ubHlTdGF0ZSIsInN0YXRlIiwiX3JlYWRPbmx5QXV0b011dGVkIiwiYXV0b011dGVkIiwiX3JlYWRPbmx5QXV0b1BhdXNlZCIsImF1dG9QYXVzZWQiLCJfcmVhZE9ubHlUb2tlbkV4cGlyaW5nIiwidG9rZW5FeHBpcmluZyIsIl9yZWFkT25seUF1dGhvcml6ZWQiLCJhdXRob3JpemVkIiwiX3JlYWRPbmx5T25saW5lIiwib25saW5lIiwiX3JlYWRPbmx5TG9hZGluZyIsImxvYWRpbmciLCJfcmVhZE9ubHlQbGF5aW5nIiwicGxheWluZyIsIl9yZWFkT25seVN0YW5kYnkiLCJzdGFuZGJ5IiwiX3JlYWRPbmx5U3RvcHBlZCIsInN0b3BwZWQiLCJfcmVhZE9ubHlUYXJnZXRMYWciLCJfcmVhZE9ubHlMYWciLCJsYWciLCJfcmVhZE9ubHlCaXRyYXRlTGltaXQiLCJiaXRyYXRlTGltaXQiLCJfcmVhZE9ubHlSZXNvbHV0aW9uIiwicmVzb2x1dGlvbiIsIl9yZWFkT25seUZhaWx1cmVDb3VudCIsImZhaWx1cmVDb3VudCIsIl9yZWFkT25seUVuZFBvaW50IiwiZW5kUG9pbnQiLCJfcmVhZE9ubHlTdHJlYW0iLCJzdHJlYW0iLCJfcmVhZE9ubHlSdGNTdGF0aXN0aWNzIiwiX3JlYWRPbmx5TWVkaWFTdHJlYW0iLCJfc2Vzc2lvblRlbGVtZXRyeSIsIlNlc3Npb25UZWxlbWV0cnkiLCJjaGFubmVsRGlzcG9zYWJsZXMiLCJfdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyIiwiaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQiLCJyZW5kZXJlckRpc3Bvc2FibGVzIiwidmlkZW9UZWxlbWV0cnkiLCJkYXRhc2V0IiwiVmlkZW9UZWxlbWV0cnkiLCJzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lIiwic2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nIiwiQ2hhbm5lbFN0YXRlIiwicmVzdGFydEFmdGVyU3RvcCIsImNsZWFyRmFpbHVyZUNvdW50VGltZW91dCIsIm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyIsImVsYXBzZWRJbk1pbGxpc2Vjb25kcyIsImNoYW5uZWxJbml0aWFsaXphdGlvbiIsImdldFRpbWUiLCJsaW1pdEJpdHJhdGUiLCJkZXN0cm95U3RyZWFtT25Vbm1vdW50Iiwic3RhcnQiLCJwYXVzZSIsInNyY09iamVjdCIsIndpZHRoIiwidmlkZW9XaWR0aCIsImhlaWdodCIsInZpZGVvSGVpZ2h0IiwiRGltZW5zaW9uIiwiZGlzcG9zYWJsZXMiLCJzZXRCaXRyYXRlTGltaXQiLCJjbGVhckJpdHJhdGVMaW1pdCIsImJpdHJhdGVJbkJpdHNQZXJTZWNvbmQiLCJzdGF0dXMiLCJ1cGRhdGVUYXJnZXRMYWciLCJfc3RvcCIsImlzU3RhcnRpbmciLCJwcm9jZXNzU3RvcCIsImNsZWFuVXBSZXNvdXJjZXMiLCJfcmVzdW1lIiwicGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQiLCJyZXN1bWUiLCJtdXRlIiwibXV0ZWQiLCJ1bm11dGUiLCJfZGlzcG9zZSIsImlzRGlzcG9zZWQiLCJnZXRVcmkiLCJfc3RhcnQiLCJwcm9jZXNzU3RhcnQiLCJfcHJvY2Vzc1N0YXJ0IiwiX2NhbGxlZTUiLCJfdGhpczUiLCJsaXN0ZW5PblN0cmVhbVNldHVwIiwiaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrIiwic3RyZWFtUGxheWVyIiwiX2NhbGxlZTUkIiwiX2NvbnRleHQ1IiwiaGFuZGxlU3RyZWFtRmFpbHVyZSIsIlN0cmVhbUZhY3RvcnkiLCJmaW5hbGx5IiwidGltZW91dElkIiwiZ2V0UmV0cnlJbnRlcnZhbCIsIl9yZXN0YXJ0QWZ0ZXJTdG9wIiwiX2NhbGxlZTYiLCJfY2FsbGVlNiQiLCJfY29udGV4dDYiLCJfcGxheSIsIl9jYWxsZWU3IiwiX2NhbGxlZTckIiwiX2NvbnRleHQ3IiwicGxheSIsImdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQiLCJfaGFuZGxlU3RyZWFtRmFpbHVyZSIsIl9jYWxsZWU4IiwiX2NhbGxlZTgkIiwiX2NvbnRleHQ4IiwiX3RoaXM2IiwiZGVzdHJveVN0cmVhbSIsIl9yZWYyIiwicGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsIl9wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsIl9jYWxsZWU5IiwiX3RoaXM3IiwicGxheVByb21pc2UiLCJfY2FsbGVlOSQiLCJfY29udGV4dDkiLCJoYXNBdWRpb1RyYWNrIiwiZmlsdGVyIiwiYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYiLCJDaGFubmVscyIsImNyZWF0ZUNoYW5uZWwiLCJjaGFubmVsT3B0aW9ucyIsImRlZmF1bHRUYXJnZXRMYWciLCJfb3B0aW9ucyR0YXJnZXRMYWciLCJhcHBseVN0YXR1cyIsImFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCIsIm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsImRlZmF1bHREaXNjb3ZlcnlVcmkiLCJCaXRyYXRlTW9kZU1hcHBpbmciLCJjb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZSIsImJpdHJhdGVNb2RlIiwiQml0cmF0ZVN0YXRlTWFwcGluZyIsImNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUiLCJiaXRyYXRlU3RhdGUiLCJkaXNjb3ZlcnlDYWNoZUludGVydmFsIiwiRGlzY292ZXJ5IiwiX3ByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyIsInByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwiX2Rpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmciLCJkaXNjb3ZlcnlTZXJ2aWNlIiwiY2FjaGVkVmFsdWUiLCJfY2FjaGUiLCJEaXNjb3ZlcnlTZXJ2aWNlIiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQiLCJkZWZhdWx0VGltZW91dCIsIl91cmkiLCJfZGlzY292ZXJOZWFyYnlFbmRQb2ludHMiLCJ0aW1lb3V0IiwiYXNTdHJpbmciLCJlbmRQb2ludHMiLCJvayIsInRleHQiLCJFbmRQb2ludCIsImRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzIiwiX2Rpc2NvdmVyQ2xvc2VzdEVuZFBvaW50IiwiZmFpbGVkUmVxdWVzdHMiLCJwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCIsIl9hcmdzMiIsInBpbmciLCJ0aW1lIiwiX2Rpc2NvdmVyeVVyaSIsImJ1aWxkRGlzY292ZXJ5VXJsIiwic2RrVmVyc2lvbiIsImFwaVZlcnNpb24iLCJfdGltZW91dCIsIl9yb3VuZFRyaXBUaW1lIiwiX3BpbmciLCJmaW5pc2hlZCIsImJ1aWxkUGluZ1VybCIsIl9zdWJzY3JpYmUiLCJsb2NhbFNlc3Npb25EZXNjcmlwdGlvbiIsImNsaWVudFZlcnNpb24iLCJib2R5V2l0aE9mZmVyIiwiYm9keVdpdGhvdXRPZmZlciIsImh0dHBSZXNwb25zZSIsInN1YnNjcmliZVJlc3BvbnNlIiwiYnVpbGRVcmwiLCJiZWFyZXJUb2tlbiIsImh0dHBSb3VuZFRyaXBUaW1lIiwic2Vzc2lvbkRlc2NyaXB0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb24iLCJjcmVhdGVPZmZlckRlc2NyaXB0aW9uIiwibWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UiLCJfcHVibGlzaCIsIm1hcEh0dHBTdGF0dXNUb1B1Ymxpc2hTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UiLCJwdWJsaXNoIiwiX3g1IiwiX3g2IiwiX3g3Iiwic2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsInNoYXJlZFNlY3JldCIsIm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl94OCIsIl94OSIsIl9saW1pdEJpdHJhdGUiLCJtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyIsIl94MTAiLCJfeDExIiwiX3gxMiIsIl94MTMiLCJfeDE0IiwiX2FkZEljZUNhbmRpZGF0ZXMiLCJjYW5kaWRhdGVzIiwiZGlzY292ZXJ5Q29tcGxldGVkIiwiYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiX2FyZ3M2IiwibWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsImFkZEljZUNhbmRpZGF0ZXMiLCJfeDE1IiwiX3gxNiIsIl94MTciLCJfZGVzdHJveVN0cmVhbSIsImRlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJfeDE4IiwiX3gxOSIsIl9kZXN0cm95U3RyZWFtT25Vbm1vdW50IiwiX25hdmlnYXRvciIsInNlbmRCZWFjb24iLCJfeDIwIiwiX3gyMSIsInBhdGgiLCJwYXRoQXNBcnJheSIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsImpzb24iLCJydGNDb25maWd1cmF0aW9uIiwiY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSIsIl94MjIiLCJfeDIzIiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCIsInB1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCQiLCJfY29udGV4dDEwIiwiX3gyNCIsIl94MjUiLCJidW5kbGVQb2xpY3kiLCJpY2VDYW5kaWRhdGVQb29sU2l6ZSIsImljZVRyYW5zcG9ydFBvbGljeSIsInJ0Y3BNdXhQb2xpY3kiLCJfY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl9jYWxsZWUxMSIsIl9jYWxsZWUxMSQiLCJfY29udGV4dDExIiwiX3gyNiIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJfY2FsbGVlMTIiLCJfY2FsbGVlMTIkIiwiX2NvbnRleHQxMiIsIl94MjciLCJfY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiX2NhbGxlZTEzIiwiX2NhbGxlZTEzJCIsIl9jb250ZXh0MTMiLCJfeDI4IiwiQ2h1bmtlZFN0cmVhbSIsImNoYW5uZWxDb250ZXh0Iiwib2ZmZXJTZHAiLCJvcmlnaW5TdGFydFRpbWUiLCJMaXZlU3RyZWFtaW5nIiwicGxheWVyIiwibW9uaXRvciIsIl9tb25pdG9yRGlzcG9zYWJsZXMiLCJuZXdTdHJlYW1TdGF0aXN0aWNzIiwiX3N0cmVhbVN0YXRpc3RpY3MiLCJjdXJyZW50VGltZSIsImRhdGFCdWZmZXJlZCIsIl9tb25pdG9yRmFpbHVyZUNvdW50IiwicGF1c2VkIiwiSGxzUGxheWVyIiwibWFuaWZlc3RVUkkiLCJfdmlkZW9FbGVtZW50IiwiX2tpbmQiLCJfc3RyZWFtSWQiLCJfbWFuaWZlc3RVUkkiLCJlbmNvZGVVUkkiLCJyZXBsYWNlIiwiX29wdGlvbnMiLCJfcGxheWVyIiwiZW5hYmxlV29ya2VyIiwibWF4QnVmZmVyTGVuZ3RoIiwibGl2ZUJhY2tCdWZmZXJMZW5ndGgiLCJsaXZlU3luY0R1cmF0aW9uIiwibGl2ZUR1cmF0aW9uSW5maW5pdHkiLCJsaXZlTWF4TGF0ZW5jeUR1cmF0aW9uIiwiSW5maW5pdHkiLCJoaWdoQnVmZmVyV2F0Y2hkb2dQZXJpb2QiLCJsb2FkU291cmNlIiwiYXR0YWNoTWVkaWEiLCJjYW5QbGF5VHlwZSIsInNyYyIsIm5ldHdvcmtTdGF0ZSIsIk5ldHdvcmtTdGF0ZXMiLCJOZXR3b3JrTm9Tb3VyY2UiLCJzdGF0aXN0aWNzIiwibWVkaWEiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsImJ1ZmZlcmVkIiwiZW5kIiwic3RyZWFtQ29udHJvbGxlciIsInRydWVDdXJyZW50VGltZSIsIm1heCIsImRlc3Ryb3kiLCJJbnNlcnRhYmxlU3RyZWFtcyIsInNldHVwTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybSIsInRyYW5zZm9ybSIsInZpZGVvVHJhY2siLCJnZXRWaWRlb1RyYWNrcyIsInRyYW5zZm9ybWVyIiwiVHJhbnNmb3JtU3RyZWFtIiwicHJvY2Vzc29yIiwiZ2VuZXJhdG9yIiwic291cmNlIiwicmVhZGFibGUiLCJzaW5rIiwid3JpdGFibGUiLCJwaXBlVGhyb3VnaCIsInBpcGVUbyIsInRyYW5zZm9ybWVkU3RyZWFtIiwiTWVkaWFTdHJlYW0iLCJnZXRBdWRpb1RyYWNrcyIsImF1ZGlvVHJhY2siLCJfaGxzUGxheWVyIiwiX3BoZW5peFdlYlBsYXllciIsIl9zaGFrYSIsImxvYWRlZCIsIl9wZW5kaW5nIiwiUGxheWVyIiwiZGFzaE1hbmlmZXN0VXJsTWF0Y2giLCJobHNNYW5pZmVzdFVybE1hdGNoIiwibWFuaWZlc3RVcmwiLCJwbGF5bGlzdFVybCIsIl9vYmplY3RTcHJlYWQiLCJwcmVmZXJOYXRpdmUiLCJzaG91bGRVc2VOYXRpdmVIbHMiLCJXZWJQbGF5ZXIiLCJTaGFrYVBsYXllciIsImljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsIiwiZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCIsIlJlYWxUaW1lU3RyZWFtIiwicGVlckNvbm5lY3Rpb25Db250ZXh0IiwiX3NsaWNlZFRvQXJyYXkiLCJfcmVmMiQiLCJzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24iLCJzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24iLCJfcmVmMyIsImFwcGx5UnRjQ29uZmlndXJhdGlvbiIsInN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0IiwiY2FuY2VsRGlzY292ZXJ5IiwiY2FuZGlkYXRlIiwiX3JlZjQiLCJyZXRyeUNhbGxiYWNrIiwib25MaW5lIiwicmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJtZWRpYVN0cmVhbVByb21pc2UiLCJzdHJlYW1zIiwidHJhY2tMaXN0ZW5lciIsImFuc3dlciIsIl9yZWY1IiwibWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMiLCJydGNDb25uZWN0aW9uTW9uaXRvciIsInJ0Y1N0YXRpc3RpYyIsInJ0Y1ZpZGVvU3RhdGlzdGljIiwicnRjQXVkaW9TdGF0aXN0aWMiLCJhdWRpbyIsImF1ZGlvVHJhY2tGYWlsZWQiLCJ2aWRlb1RyYWNrRmFpbGVkIiwiX2FwcGx5UnRjQ29uZmlndXJhdGlvbiIsIm9wdGlvbmFsUGVlckNvbm5lY3Rpb24iLCJuZXdSdGNDb25maWd1cmF0aW9uIiwiX3BlZXJDb25uZWN0aW9uJGN1cnJlIiwiaXNDbGllbnRPZmZlckZsb3ciLCJpY2VSZXN0YXJ0Iiwib2ZmZXIiLCJwbGF5ZXJPcHRpb25zIiwiYWJyIiwiZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlIiwibWFuaWZlc3QiLCJyZXRyeVBhcmFtZXRlcnMiLCJzdHJlYW1pbmciLCJyZWJ1ZmZlcmluZ0dvYWwiLCJidWZmZXJpbmdHb2FsIiwiYnVmZmVyQmVoaW5kIiwibWF4QXR0ZW1wdHMiLCJiYWNrb2ZmRmFjdG9yIiwibG9hZFBsYXllciIsImVzdGltYXRlZEJhbmR3aWR0aCIsInBsYXlUaW1lIiwidW5sb2FkIiwicGxheWVyQ29uZmlnIiwiY29uZmlndXJlIiwibG9hZCIsImNvZGUiLCJjcmVhdGUiLCJ0b2tlbkNhcGFiaWxpdGllcyIsImJhbmR3aWR0aFRvU3RhcnRBdCIsIm1pblRpbWVCZWZvcmVOZXh0UmVsb2FkIiwiZXJyb3JPYmplY3QiLCJjYW5SZWxvYWQiLCJzZXZlcml0eSIsInJlbG9hZElmQWJsZSIsImlzTmF0aXZlIiwiZGVsaXZlcnlUeXBlIiwiaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQiLCJfbGFzdFJlbG9hZFRpbWUiLCJyZWxvYWQiLCJfX1NES1ZFUlNJT05fXyIsIl9kZWZhdWx0VmVyc2lvbiIsIl90ZWxlbWV0cnlTZXJ2aWNlIiwiVGVsZW1ldHJ5U2VydmljZSIsImxvZ1JlY29yZCIsIl9sb2dzIiwic2VuZExvZ3NJZkFibGUiLCJfc2VuZExvZ3MiLCJsb2dNZXNzYWdlcyIsInNlbmRMb2dzIiwiX3NlbmRMb2dzSWZBYmxlIiwibnVtYmVyT2ZMb2dzVG9TZW5kIiwic2l6ZU9mTG9nc1RvU2VuZCIsImdldExvZ1NpemUiLCJzdW0iLCJkdXJhdGlvbiIsIl9kdXJhdGlvbiIsImlzTmVnYXRpdmUiLCJhYnMiLCJvZmZzZXQiLCJtaWxsaXNlY29uZHMiLCJzZWNvbmRzIiwibWludXRlcyIsImhvdXJzIiwicGFydHMiLCJTdHJpbmciLCJwYWRTdGFydCIsInRhcmdldExlbmd0aCIsInBhZFN0cmluZyIsInJlcGVhdCIsImRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJkZWZhdWx0TWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwibWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcyIsInJhbmRvbWl6YXRpb24iLCJleHBvbmVudGlhbEJhY2tvZmYiLCJwb3ciLCJleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiIsImV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCIsIm1pbiIsIm90aGVyIiwiX25ldHdvcmtNb25pdG9yIiwicmVjb3JkRm9yZWdyb3VuZENoYW5nZSIsInJlY29yZE5ldHdvcmtSVFRVcGRhdGUiLCJyZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZSIsImRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwicmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlIiwidGltZVNpbmNlTGFzdENoYW5nZSIsIm5ld1JUVCIsIm9sZFJ0dCIsIl9sYXN0TmV0d29ya1N0YXRpc3RpY3MiLCJuZXdOZXR3b3JrVHlwZSIsIm9sZE5ldHdvcmtUeXBlIiwibmV3Q2FwYWNpdHkiLCJvbGRDYXBhY2l0eSIsImZsb2F0IiwiY2hhbm5lbFN0YXJ0VGltZSIsIl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUiLCJfbGlzdGVuVG9GaXJzdFRpbWUiLCJjYWxsVGltZVRvRmlyc3RGcmFtZSIsIl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lciIsIl9saXN0ZW5Gb3JTdGFsbCIsIm9uU3RhbGwiLCJfbGlzdGVuRm9yQ29udGludWF0aW9uIiwiZXZlbnQiLCJvbkNvbnRpbnVhdGlvbiIsIl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIiLCJwdXNoVGltZVRvRmlyc3RGcmFtZSIsInB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3RpbWVUb0ZpcnN0RnJhbWUiLCJkdXJhdGlvblNpbmNlUGFnZUxvYWQiLCJfY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSIsIl92aWRlb1N0YWxsZWQiLCJidWZmZXJMZW5ndGgiLCJoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCIsIl9sYXN0UHJvZ3Jlc3MiLCJ0aW1lU2luY2VTdG9wIiwibmV3UmVzb2x1dGlvbiIsIl92aWRlb1Jlc29sdXRpb24iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPOzs7Ozs7Ozs7QUNWQTtBQUNBO0FBQ0Esd0NBQXdDLFNBQVM7QUFDakQ7QUFDQTtBQUNBLG9DQUFvQyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7QUNML0Y7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7OztBQ0g3Rix1QkFBdUIsbUJBQU8sQ0FBQyx3RkFBdUI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7OztBQ0poRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7OztBQ05wRztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Es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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtGQUFrRjtBQUNsRjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLHVCQUF1QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSCw2Q0FBNkMsT0FBTztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FB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VUFDQTs7VUFFQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7Ozs7O1dDckJBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxnQ0FBZ0MsWUFBWTtXQUM1QztXQUNBLEU7Ozs7O1dDUEE7V0FDQTtXQUNBO1dBQ0E7V0FDQSx3Q0FBd0MseUNBQXlDO1dBQ2pGO1dBQ0E7V0FDQSxFOzs7OztXQ1BBLHNGOzs7OztXQ0FBO1dBQ0E7V0FDQTtXQUNBLHNEQUFzRCxrQkFBa0I7V0FDeEU7V0FDQSwrQ0FBK0MsY0FBYztXQUM3RCxFOzs7O1VDTkE7VUFDQTtVQUNBO1VBQ0EiLCJmaWxlIjoiY2hhbm5lbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJwaGVuaXhcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xufSkoc2VsZiwgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcbiAgcmV0dXJuIGFycjI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheUxpa2VUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRoSG9sZXMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KGFycik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhvdXRIb2xlcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChpbmZvLmRvbmUpIHtcbiAgICByZXNvbHZlKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7XG4gIH1cbn1cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgICAgZnVuY3Rpb24gX25leHQodmFsdWUpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hc3luY1RvR2VuZXJhdG9yLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3MsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuL3NldFByb3RvdHlwZU9mLmpzXCIpO1xuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaW5oZXJpdHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIHZhciBfaSA9IG51bGwgPT0gYXJyID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdO1xuICBpZiAobnVsbCAhPSBfaSkge1xuICAgIHZhciBfcyxcbiAgICAgIF9lLFxuICAgICAgX3gsXG4gICAgICBfcixcbiAgICAgIF9hcnIgPSBbXSxcbiAgICAgIF9uID0gITAsXG4gICAgICBfZCA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoX3ggPSAoX2kgPSBfaS5jYWxsKGFycikpLm5leHQsIDAgPT09IGkpIHtcbiAgICAgICAgaWYgKE9iamVjdChfaSkgIT09IF9pKSByZXR1cm47XG4gICAgICAgIF9uID0gITE7XG4gICAgICB9IGVsc2UgZm9yICg7ICEoX24gPSAoX3MgPSBfeC5jYWxsKF9pKSkuZG9uZSkgJiYgKF9hcnIucHVzaChfcy52YWx1ZSksIF9hcnIubGVuZ3RoICE9PSBpKTsgX24gPSAhMCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBfZCA9ICEwLCBfZSA9IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFfbiAmJiBudWxsICE9IF9pW1wicmV0dXJuXCJdICYmIChfciA9IF9pW1wicmV0dXJuXCJdKCksIE9iamVjdChfcikgIT09IF9yKSkgcmV0dXJuO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF9hcnI7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheUxpbWl0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlUmVzdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9ub25JdGVyYWJsZVNwcmVhZCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbnZhciBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgPSByZXF1aXJlKFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanNcIik7XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xuZnVuY3Rpb24gX3JlZ2VuZXJhdG9yUnVudGltZSgpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7IC8qISByZWdlbmVyYXRvci1ydW50aW1lIC0tIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLiAtLSBsaWNlbnNlIChNSVQpOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL0xJQ0VOU0UgKi9cbiAgbW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lID0gZnVuY3Rpb24gX3JlZ2VuZXJhdG9yUnVudGltZSgpIHtcbiAgICByZXR1cm4gZXhwb3J0cztcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICB2YXIgZXhwb3J0cyA9IHt9LFxuICAgIE9wID0gT2JqZWN0LnByb3RvdHlwZSxcbiAgICBoYXNPd24gPSBPcC5oYXNPd25Qcm9wZXJ0eSxcbiAgICBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB8fCBmdW5jdGlvbiAob2JqLCBrZXksIGRlc2MpIHtcbiAgICAgIG9ialtrZXldID0gZGVzYy52YWx1ZTtcbiAgICB9LFxuICAgICRTeW1ib2wgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCA/IFN5bWJvbCA6IHt9LFxuICAgIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIixcbiAgICBhc3luY0l0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCIsXG4gICAgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuICBmdW5jdGlvbiBkZWZpbmUob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgd3JpdGFibGU6ICEwXG4gICAgfSksIG9ialtrZXldO1xuICB9XG4gIHRyeSB7XG4gICAgZGVmaW5lKHt9LCBcIlwiKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZGVmaW5lID0gZnVuY3Rpb24gZGVmaW5lKG9iaiwga2V5LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIG9ialtrZXldID0gdmFsdWU7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgdmFyIHByb3RvR2VuZXJhdG9yID0gb3V0ZXJGbiAmJiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IG91dGVyRm4gOiBHZW5lcmF0b3IsXG4gICAgICBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSksXG4gICAgICBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eShnZW5lcmF0b3IsIFwiX2ludm9rZVwiLCB7XG4gICAgICB2YWx1ZTogbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KVxuICAgIH0pLCBnZW5lcmF0b3I7XG4gIH1cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2goZm4sIG9iaiwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwibm9ybWFsXCIsXG4gICAgICAgIGFyZzogZm4uY2FsbChvYmosIGFyZylcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInRocm93XCIsXG4gICAgICAgIGFyZzogZXJyXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBleHBvcnRzLndyYXAgPSB3cmFwO1xuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIGRlZmluZShJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZixcbiAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiYgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgIT09IE9wICYmIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkgJiYgKEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUpO1xuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPSBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICBkZWZpbmUocHJvdG90eXBlLCBtZXRob2QsIGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvciwgUHJvbWlzZUltcGwpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAoXCJ0aHJvd1wiICE9PSByZWNvcmQudHlwZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZyxcbiAgICAgICAgICB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHZhbHVlICYmIFwib2JqZWN0XCIgPT0gX3R5cGVvZih2YWx1ZSkgJiYgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSA/IFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KSA6IFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24gKHVud3JhcHBlZCkge1xuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZCwgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgZXJyb3IsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgIH1cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuICAgIGRlZmluZVByb3BlcnR5KHRoaXMsIFwiX2ludm9rZVwiLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUobWV0aG9kLCBhcmcpIHtcbiAgICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlSW1wbChmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9IHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLCBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZykgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoXCJleGVjdXRpbmdcIiA9PT0gc3RhdGUpIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICBpZiAoXCJjb21wbGV0ZWRcIiA9PT0gc3RhdGUpIHtcbiAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gbWV0aG9kKSB0aHJvdyBhcmc7XG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnRleHQubWV0aG9kID0gbWV0aG9kLCBjb250ZXh0LmFyZyA9IGFyZzs7KSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwibmV4dFwiID09PSBjb250ZXh0Lm1ldGhvZCkgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO2Vsc2UgaWYgKFwidGhyb3dcIiA9PT0gY29udGV4dC5tZXRob2QpIHtcbiAgICAgICAgICBpZiAoXCJzdXNwZW5kZWRTdGFydFwiID09PSBzdGF0ZSkgdGhyb3cgc3RhdGUgPSBcImNvbXBsZXRlZFwiLCBjb250ZXh0LmFyZztcbiAgICAgICAgICBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKTtcbiAgICAgICAgfSBlbHNlIFwicmV0dXJuXCIgPT09IGNvbnRleHQubWV0aG9kICYmIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgc3RhdGUgPSBcImV4ZWN1dGluZ1wiO1xuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG4gICAgICAgIGlmIChcIm5vcm1hbFwiID09PSByZWNvcmQudHlwZSkge1xuICAgICAgICAgIGlmIChzdGF0ZSA9IGNvbnRleHQuZG9uZSA/IFwiY29tcGxldGVkXCIgOiBcInN1c3BlbmRlZFlpZWxkXCIsIHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXCJ0aHJvd1wiID09PSByZWNvcmQudHlwZSAmJiAoc3RhdGUgPSBcImNvbXBsZXRlZFwiLCBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIiwgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kTmFtZSA9IGNvbnRleHQubWV0aG9kLFxuICAgICAgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbbWV0aG9kTmFtZV07XG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gbWV0aG9kKSByZXR1cm4gY29udGV4dC5kZWxlZ2F0ZSA9IG51bGwsIFwidGhyb3dcIiA9PT0gbWV0aG9kTmFtZSAmJiBkZWxlZ2F0ZS5pdGVyYXRvcltcInJldHVyblwiXSAmJiAoY29udGV4dC5tZXRob2QgPSBcInJldHVyblwiLCBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZCwgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCksIFwidGhyb3dcIiA9PT0gY29udGV4dC5tZXRob2QpIHx8IFwicmV0dXJuXCIgIT09IG1ldGhvZE5hbWUgJiYgKGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiLCBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICdcIiArIG1ldGhvZE5hbWUgKyBcIicgbWV0aG9kXCIpKSwgQ29udGludWVTZW50aW5lbDtcbiAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gobWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgY29udGV4dC5hcmcpO1xuICAgIGlmIChcInRocm93XCIgPT09IHJlY29yZC50eXBlKSByZXR1cm4gY29udGV4dC5tZXRob2QgPSBcInRocm93XCIsIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZywgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGwsIENvbnRpbnVlU2VudGluZWw7XG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuICAgIHJldHVybiBpbmZvID8gaW5mby5kb25lID8gKGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlLCBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jLCBcInJldHVyblwiICE9PSBjb250ZXh0Lm1ldGhvZCAmJiAoY29udGV4dC5tZXRob2QgPSBcIm5leHRcIiwgY29udGV4dC5hcmcgPSB1bmRlZmluZWQpLCBjb250ZXh0LmRlbGVnYXRlID0gbnVsbCwgQ29udGludWVTZW50aW5lbCkgOiBpbmZvIDogKGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiLCBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKSwgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGwsIENvbnRpbnVlU2VudGluZWwpO1xuICB9XG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeShsb2NzKSB7XG4gICAgdmFyIGVudHJ5ID0ge1xuICAgICAgdHJ5TG9jOiBsb2NzWzBdXG4gICAgfTtcbiAgICAxIGluIGxvY3MgJiYgKGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXSksIDIgaW4gbG9jcyAmJiAoZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl0sIGVudHJ5LmFmdGVyTG9jID0gbG9jc1szXSksIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiLCBkZWxldGUgcmVjb3JkLmFyZywgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuICBmdW5jdGlvbiBDb250ZXh0KHRyeUxvY3NMaXN0KSB7XG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3tcbiAgICAgIHRyeUxvYzogXCJyb290XCJcbiAgICB9XSwgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpLCB0aGlzLnJlc2V0KCEwKTtcbiAgfVxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgaXRlcmFibGUubmV4dCkgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsXG4gICAgICAgICAgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICBmb3IgKDsgKytpIDwgaXRlcmFibGUubGVuZ3RoOykgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkgcmV0dXJuIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXSwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICAgICAgICByZXR1cm4gbmV4dC52YWx1ZSA9IHVuZGVmaW5lZCwgbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBuZXh0OiBkb25lUmVzdWx0XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgZG9uZTogITBcbiAgICB9O1xuICB9XG4gIHJldHVybiBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgZGVmaW5lUHJvcGVydHkoR3AsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSxcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBkZWZpbmVQcm9wZXJ0eShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gZGVmaW5lKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCB0b1N0cmluZ1RhZ1N5bWJvbCwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSwgZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24gKGdlbkZ1bikge1xuICAgIHZhciBjdG9yID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBnZW5GdW4gJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiAhIWN0b3IgJiYgKGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8IFwiR2VuZXJhdG9yRnVuY3Rpb25cIiA9PT0gKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSk7XG4gIH0sIGV4cG9ydHMubWFyayA9IGZ1bmN0aW9uIChnZW5GdW4pIHtcbiAgICByZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpIDogKGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgZGVmaW5lKGdlbkZ1biwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIikpLCBnZW5GdW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShHcCksIGdlbkZ1bjtcbiAgfSwgZXhwb3J0cy5hd3JhcCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgX19hd2FpdDogYXJnXG4gICAgfTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKSwgZGVmaW5lKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlLCBhc3luY0l0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBleHBvcnRzLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yLCBleHBvcnRzLmFzeW5jID0gZnVuY3Rpb24gKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0LCBQcm9taXNlSW1wbCkge1xuICAgIHZvaWQgMCA9PT0gUHJvbWlzZUltcGwgJiYgKFByb21pc2VJbXBsID0gUHJvbWlzZSk7XG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcih3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSwgUHJvbWlzZUltcGwpO1xuICAgIHJldHVybiBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbikgPyBpdGVyIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICB9KTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKSwgZGVmaW5lKEdwLCB0b1N0cmluZ1RhZ1N5bWJvbCwgXCJHZW5lcmF0b3JcIiksIGRlZmluZShHcCwgaXRlcmF0b3JTeW1ib2wsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGRlZmluZShHcCwgXCJ0b1N0cmluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH0pLCBleHBvcnRzLmtleXMgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgdmFyIG9iamVjdCA9IE9iamVjdCh2YWwpLFxuICAgICAga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIGtleXMucHVzaChrZXkpO1xuICAgIHJldHVybiBrZXlzLnJldmVyc2UoKSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGZvciAoOyBrZXlzLmxlbmd0aDspIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSByZXR1cm4gbmV4dC52YWx1ZSA9IGtleSwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgfTtcbiAgfSwgZXhwb3J0cy52YWx1ZXMgPSB2YWx1ZXMsIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldChza2lwVGVtcFJlc2V0KSB7XG4gICAgICBpZiAodGhpcy5wcmV2ID0gMCwgdGhpcy5uZXh0ID0gMCwgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZCwgdGhpcy5kb25lID0gITEsIHRoaXMuZGVsZWdhdGUgPSBudWxsLCB0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLmFyZyA9IHVuZGVmaW5lZCwgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSksICFza2lwVGVtcFJlc2V0KSBmb3IgKHZhciBuYW1lIGluIHRoaXMpIFwidFwiID09PSBuYW1lLmNoYXJBdCgwKSAmJiBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJiAhaXNOYU4oK25hbWUuc2xpY2UoMSkpICYmICh0aGlzW25hbWVdID0gdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIHN0b3A6IGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgICB0aGlzLmRvbmUgPSAhMDtcbiAgICAgIHZhciByb290UmVjb3JkID0gdGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSByb290UmVjb3JkLnR5cGUpIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbiBkaXNwYXRjaEV4Y2VwdGlvbihleGNlcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZXR1cm4gcmVjb3JkLnR5cGUgPSBcInRocm93XCIsIHJlY29yZC5hcmcgPSBleGNlcHRpb24sIGNvbnRleHQubmV4dCA9IGxvYywgY2F1Z2h0ICYmIChjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiLCBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZCksICEhY2F1Z2h0O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV0sXG4gICAgICAgICAgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgaWYgKFwicm9vdFwiID09PSBlbnRyeS50cnlMb2MpIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGhhc0NhdGNoID0gaGFzT3duLmNhbGwoZW50cnksIFwiY2F0Y2hMb2NcIiksXG4gICAgICAgICAgICBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsICEwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNGaW5hbGx5KSB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgYWJydXB0OiBmdW5jdGlvbiBhYnJ1cHQodHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgdmFyIGZpbmFsbHlFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmaW5hbGx5RW50cnkgJiYgKFwiYnJlYWtcIiA9PT0gdHlwZSB8fCBcImNvbnRpbnVlXCIgPT09IHR5cGUpICYmIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmIGFyZyA8PSBmaW5hbGx5RW50cnkuZmluYWxseUxvYyAmJiAoZmluYWxseUVudHJ5ID0gbnVsbCk7XG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJldHVybiByZWNvcmQudHlwZSA9IHR5cGUsIHJlY29yZC5hcmcgPSBhcmcsIGZpbmFsbHlFbnRyeSA/ICh0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYywgQ29udGludWVTZW50aW5lbCkgOiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcbiAgICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gcmVjb3JkLnR5cGUpIHRocm93IHJlY29yZC5hcmc7XG4gICAgICByZXR1cm4gXCJicmVha1wiID09PSByZWNvcmQudHlwZSB8fCBcImNvbnRpbnVlXCIgPT09IHJlY29yZC50eXBlID8gdGhpcy5uZXh0ID0gcmVjb3JkLmFyZyA6IFwicmV0dXJuXCIgPT09IHJlY29yZC50eXBlID8gKHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZywgdGhpcy5tZXRob2QgPSBcInJldHVyblwiLCB0aGlzLm5leHQgPSBcImVuZFwiKSA6IFwibm9ybWFsXCIgPT09IHJlY29yZC50eXBlICYmIGFmdGVyTG9jICYmICh0aGlzLm5leHQgPSBhZnRlckxvYyksIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcbiAgICBmaW5pc2g6IGZ1bmN0aW9uIGZpbmlzaChmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHJldHVybiB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKSwgcmVzZXRUcnlFbnRyeShlbnRyeSksIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG4gICAgfSxcbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uIF9jYXRjaCh0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSByZWNvcmQudHlwZSkge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24gZGVsZWdhdGVZaWVsZChpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9LCBcIm5leHRcIiA9PT0gdGhpcy5tZXRob2QgJiYgKHRoaXMuYXJnID0gdW5kZWZpbmVkKSwgQ29udGludWVTZW50aW5lbDtcbiAgICB9XG4gIH0sIGV4cG9ydHM7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9yZWdlbmVyYXRvclJ1bnRpbWUsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlXaXRoSG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiKTtcbnZhciBpdGVyYWJsZVRvQXJyYXlMaW1pdCA9IHJlcXVpcmUoXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzXCIpO1xudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgbm9uSXRlcmFibGVSZXN0ID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCIpO1xuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3NsaWNlZFRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlXaXRob3V0SG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhvdXRIb2xlcy5qc1wiKTtcbnZhciBpdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiKTtcbnZhciBub25JdGVyYWJsZVNwcmVhZCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlU3ByZWFkLmpzXCIpO1xuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90b0NvbnN1bWFibGVBcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZShpbnB1dCwgaGludCkge1xuICBpZiAoX3R5cGVvZihpbnB1dCkgIT09IFwib2JqZWN0XCIgfHwgaW5wdXQgPT09IG51bGwpIHJldHVybiBpbnB1dDtcbiAgdmFyIHByaW0gPSBpbnB1dFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAocHJpbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIHJlcyA9IHByaW0uY2FsbChpbnB1dCwgaGludCB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKF90eXBlb2YocmVzKSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHJlcztcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChoaW50ID09PSBcInN0cmluZ1wiID8gU3RyaW5nIDogTnVtYmVyKShpbnB1dCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90b1ByaW1pdGl2ZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoXCIuL3RvUHJpbWl0aXZlLmpzXCIpO1xuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gX3R5cGVvZihrZXkpID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90b1Byb3BlcnR5S2V5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiAobW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cyksIF90eXBlb2Yob2JqKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiKTtcbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsIi8vIFRPRE8oQmFiZWwgOCk6IFJlbW92ZSB0aGlzIGZpbGUuXG5cbnZhciBydW50aW1lID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvcmVnZW5lcmF0b3JSdW50aW1lXCIpKCk7XG5tb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG5cbi8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vcGFja2FnZXMvcnVudGltZS9ydW50aW1lLmpzI0w3MzY9XG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiKSB7XG4gICAgZ2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xuICB9IGVsc2Uge1xuICAgIEZ1bmN0aW9uKFwiclwiLCBcInJlZ2VuZXJhdG9yUnVudGltZSA9IHJcIikocnVudGltZSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuXG5jb25zdCBkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCA9IDMwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5SXNGb3JlZ3JvdW5kOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzRm9yZWdyb3VuZDogU3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSBfdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlOiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBwcml2YXRlIF9kb2N1bWVudEZvY3VzSW50ZXJ2YWw6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9pc0ZvcmVncm91bmQgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLl9yZWFkT25seUlzRm9yZWdyb3VuZCA9IG5ldyBSZWFkT25seVN1YmplY3QodGhpcy5faXNGb3JlZ3JvdW5kKTtcbiAgICB0aGlzLmRldGVjdFRhYkZvY3VzQ2hhbmdlKCk7XG4gIH1cblxuICBnZXQgaXNGb3JlZ3JvdW5kKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5SXNGb3JlZ3JvdW5kO1xuICB9XG5cbiAgZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBEYXRlLm5vdygpIC0gdGhpcy5fdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGRldGVjdFRhYkZvY3VzQ2hhbmdlKCk6IHZvaWQge1xuICAgIGxldCBoaWRkZW47XG4gICAgbGV0IHZpc2liaWxpdHlDaGFuZ2U7XG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIER1ZSB0byB0eXBlc2NyaXB0IG5vdCBoYXZpbmcgYSBkZWZpbml0aW9uIGZvciAnbXNIaWRkZW4nIG9yICd3ZWJraXRIaWRkZW4nIHR5cGVzXG4gICAgLy8gUmVxdWlyZWQgdG8gQHRzLWlnbm9yZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50ICovXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQubXNIaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoaWRkZW4gPSAnbXNIaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICdtc3Zpc2liaWxpdHljaGFuZ2UnO1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50LndlYmtpdEhpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGhpZGRlbiA9ICd3ZWJraXRIaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICd3ZWJraXR2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudC5oaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7IC8vIE9wZXJhIDEyLjEwIGFuZCBGaXJlZm94IDE4IGFuZCBsYXRlciBzdXBwb3J0XG4gICAgICBoaWRkZW4gPSAnaGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAndmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50ICovXG5cbiAgICBjb25zdCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgaXNGb3JlZ3JvdW5kID0gIWRvY3VtZW50W2hpZGRlbl07XG5cbiAgICAgIHRoaXMuc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudFtoaWRkZW5dICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih2aXNpYmlsaXR5Q2hhbmdlLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCBmYWxzZSk7XG5cbiAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodmlzaWJpbGl0eUNoYW5nZSwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpO1xuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxpc3RlbkZvckRvY3VtZW50Rm9jdXMuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZvckRvY3VtZW50Rm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGNvbnN0IGlzRm9yZWdyb3VuZCA9IGRvY3VtZW50Lmhhc0ZvY3VzKCk7XG5cbiAgICAgIHRoaXMuc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpO1xuICAgIH0sIGRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0KTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsID0gbnVsbDtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lzRm9yZWdyb3VuZCA9PT0gaXNGb3JlZ3JvdW5kKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNGb3JlZ3JvdW5kLnZhbHVlID0gaXNGb3JlZ3JvdW5kO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCcm93c2VyRGV0ZWN0b3Ige1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXggPSAvKE1TSUV8KD8hR2Vja28uKylGaXJlZm94fCg/IUFwcGxlV2ViS2l0LitDaHJvbWUuKylTYWZhcml8KD8hQXBwbGVXZWJLaXQuKylDaHJvbWV8QXBwbGVXZWJLaXQoPyEuK0Nocm9tZXwuK1NhZmFyaSl8R2Vja28oPyEuK0ZpcmVmb3gpKSg/OiB8XFwvKShbXFxkLmFwcmVdKykvZztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWUgPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZSgpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck1ham9yVmVyc2lvbiA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU2OSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNjkuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcwID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzEgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcxLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzIuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzUgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc1LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzYuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc3ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Ny4nKTtcblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck5hbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck1ham9yVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU2OSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTY5O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcyO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc2O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzc7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVBbmRWZXJzaW9uID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaChCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4KTtcblxuICAgIGlmIChicm93c2VyTmFtZUFuZFZlcnNpb24gJiYgYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdKSB7XG4gICAgICByZXR1cm4gYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdO1xuICAgIH1cblxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyTmFtZUxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyTmFtZUxpc3QgfHwgIWJyb3dzZXJOYW1lTGlzdFswXSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHJldHVybiBicm93c2VyTmFtZUxpc3RbMF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyVmVyc2lvbkxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyVmVyc2lvbkxpc3QgfHwgIWJyb3dzZXJWZXJzaW9uTGlzdFsxXSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFZlcnNpb24gPSBicm93c2VyVmVyc2lvbkxpc3RbMV07XG5cbiAgICBpZiAoIWZ1bGxWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gTnVtYmVyKGZ1bGxWZXJzaW9uLnNwbGl0KCcuJylbMF0pIHx8IDA7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCk6IHN0cmluZyB7XG4gICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICAgIGNvbnN0IG1zaWUgPSB1c2VyQWdlbnQuaW5kZXhPZignTVNJRSAnKTtcblxuICAgIGlmIChtc2llID4gMCkge1xuICAgICAgLy8gSUUgMTAgb3Igb2xkZXIgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyhtc2llICsgNSwgdXNlckFnZW50LmluZGV4T2YoJy4nLCBtc2llKSksIDEwKX1gO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaWRlbnQgPSB1c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudC8nKTtcblxuICAgIGlmICh0cmlkZW50ID4gMCkge1xuICAgICAgLy8gSUUgMTEgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICBjb25zdCB2ZXJzaW9uID0gdXNlckFnZW50LmluZGV4T2YoJ3J2OicpO1xuXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyh2ZXJzaW9uICsgMywgdXNlckFnZW50LmluZGV4T2YoJy4nLCB2ZXJzaW9uKSksIDEwKX1gO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0JztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIHtcbiAgZ2V0U3RyaW5nVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWUpIHx8XG4gICAgICB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUoYCR7bmFtZX0tdXJpLXBhcmFtZXRlci1uYW1lYCkgfHxcbiAgICAgIHRoaXMuZGVmYXVsdFN0cmluZ1ZhbHVlW25hbWVdO1xuICB9XG5cbiAgZ2V0Qm9vbGVhblZhbHVlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWUpO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09ICd0cnVlJyB8fCB2YWx1ZSA9PT0gJzEnIHx8IHZhbHVlID09PSAnT24nO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlRnJvbVVyaSA9IHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZShgJHtuYW1lfS11cmktcGFyYW1ldGVyLW5hbWVgKTtcblxuICAgIGlmICh2YWx1ZUZyb21VcmkpIHtcbiAgICAgIHJldHVybiB2YWx1ZUZyb21VcmkgPT09ICd0cnVlJyB8fCB2YWx1ZUZyb21VcmkgPT09ICcxJyB8fCB2YWx1ZUZyb21VcmkgPT09ICdPbic7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdEJvb2xlYW5WYWx1ZVtuYW1lXSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRTdHJpbmdWYWx1ZSgpOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmd9IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ3BoZW5peC1tZXRyaWNzLWxldmVsJzogVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlKFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsKSxcbiAgICAgICdwaGVuaXgtbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0TG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtY29uc29sZS1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtdGVsZW1ldHJ5LWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LWNoYW5uZWwtdG9rZW4nOiAnJyxcbiAgICAgICdwaGVuaXgtdXJpJzogJycsXG4gICAgICAncGhlbml4LWJhc2UtdXJpJzogJydcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdEJvb2xlYW5WYWx1ZSgpOiB7IFtuYW1lOiBzdHJpbmddOiBib29sZWFuIH0ge1xuICAgIHJldHVybiB7XG4gICAgICAncGhlbml4LWF1dG9tYXRpY2FsbHktcmV0cnktb24tZmFpbHVyZSc6IHRydWUsXG4gICAgICAncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbic6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWV0YVZhbHVlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbWV0YVtuYW1lPScke25hbWV9J11gKTtcblxuICAgIGlmICghbWV0YVZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBtZXRhVmFsdWUuZ2V0QXR0cmlidXRlKCd2YWx1ZScpO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlVVJJUGFyYW1ldGVyTmFtZSA9IHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKTtcblxuICAgIGlmICghdmFsdWVVUklQYXJhbWV0ZXJOYW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGxvY2F0aW9uLnNlYXJjaCkuZ2V0KHZhbHVlVVJJUGFyYW1ldGVyTmFtZSkgfHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ldHdvcmtNb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNTdXBwb3J0ZWQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yWydjb25uZWN0aW9uJ107XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0dDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZWZmZWN0aXZlVHlwZTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgfVxuXG4gIGdldCBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXQgcnR0KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0dDtcbiAgfVxuXG4gIGdldCBlZmZlY3RpdmVUeXBlKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVR5cGU7XG4gIH1cblxuICBnZXQgZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogU3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZG93bmxpbmsgfHwgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZG93bmxpbmtNYXg7XG4gIH1cblxuICBwcml2YXRlIGdldEVmZmVjdGl2ZVR5cGUoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybiAnVW5rbm93bic7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmVmZmVjdGl2ZVR5cGUgfHwgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10udHlwZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Um91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5ydHQ7XG4gIH1cblxuICBwcml2YXRlIHNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ZW5lciA9ICgpOiB2b2lkID0+IHtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGlzdGljcygpO1xuICAgIH07XG5cbiAgICBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBsaXN0ZW5lcik7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RhdGlzdGljcygpOiB2b2lkIHtcbiAgICB0aGlzLl9ydHQudmFsdWUgPSB0aGlzLmdldFJvdW5kVHJpcFRpbWUoKTtcbiAgICB0aGlzLl9lZmZlY3RpdmVUeXBlLnZhbHVlID0gdGhpcy5nZXRFZmZlY3RpdmVUeXBlKCk7XG4gICAgdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkudmFsdWUgPSB0aGlzLmdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmRlY2xhcmUgY29uc3QgX19QUklWQUNZX01PREVfXzogYm9vbGVhbjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJpdmFjeU1vZGUge1xuICBwcml2YXRlIHN0YXRpYyBfaXNQcml2YXRlOiBib29sZWFuO1xuXG4gIHN0YXRpYyBnZXQgaXNQcml2YXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1ByaXZhdGU7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlJc1ByaXZhdGUoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX2lzUHJpdmF0ZSA9IF9fUFJJVkFDWV9NT0RFX187XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5faXNQcml2YXRlID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cblByaXZhY3lNb2RlLmFwcGx5SXNQcml2YXRlKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgTWV0cmljVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY1R5cGUnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuXG5leHBvcnQgY2xhc3MgU3RyZWFtU2V0dXBMaXN0ZW5lciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1TZXR1cExpc3RlbmVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWV0cmljc1NlcnZpY2UgPSBTREsubWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbWV0cmljU3VibWl0dGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocGFnZUxvYWRUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHN1Y2Nlc3Moc3RyZWFtSWQpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZFN0cmVhbU1ldHJpYyhNZXRyaWNzVHlwZS5TZXR1cENvbXBsZXRlZCwgc3RyZWFtSWQpO1xuICB9XG5cbiAgZmFpbCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZFN0cmVhbU1ldHJpYyhNZXRyaWNzVHlwZS5TZXR1cEZhaWxlZCk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZFN0cmVhbU1ldHJpYyhtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZSwgc3RyZWFtSWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbWV0cmljU3VibWl0dGVkKSB7XG4gICAgICByZXR1cm4gO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY1N1Ym1pdHRlZCA9IHRydWU7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNldHVwVGltZSA9IG5vdyAtIHRoaXMuX3N0YXJ0VGltZTtcbiAgICBjb25zdCBtZXRyaWNOYW1lID0gbmV3IE1ldHJpY1R5cGUobWV0cmljVHlwZSkuZ2V0TmFtZSgpO1xuXG4gICAgdGhpcy5tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogc2V0dXBUaW1lfSxcbiAgICAgIHN0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gU3RyZWFtIG1ldHJpYyBbJXNdIGluIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBzdHJlYW1JZCxcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICBuZXcgRHVyYXRpb25zKHNldHVwVGltZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRWRnZVRva2VuIGZyb20gJy4vRWRnZVRva2VuJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi9FbmNvZGVkRWRnZVRva2VuJztcblxuY29uc3QgZWRnZUF1dGhUb2tlblByZWZpeCA9ICdESUdFU1Q6JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRnZUF1dGhQYXJzZXIge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0VkZ2VBdXRoUGFyc2VyJyk7XG5cbiAgc3RhdGljIHBhcnNlVG9rZW4odG9rZW46IEVuY29kZWRFZGdlVG9rZW4pOiBFZGdlVG9rZW4ge1xuICAgIGlmICghdGhpcy5pc0VuY29kZWRFZGdlVG9rZW5WYWxpZCh0b2tlbikpIHtcbiAgICAgIEVkZ2VBdXRoUGFyc2VyLl9sb2dnZXIuZXJyb3IoJ1Rva2VuIGlzIG5vdCB2YWxpZCBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4gbmV3IEVkZ2VUb2tlbihudWxsKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVjb2RlZFRva2VuID0gYXRvYih0b2tlbi5zdWJzdHIoZWRnZUF1dGhUb2tlblByZWZpeC5sZW5ndGgpKTtcbiAgICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEpTT04ucGFyc2UoZGVjb2RlZFRva2VuKTtcblxuICAgICAgZWRnZVRva2VuLnRva2VuID0gSlNPTi5wYXJzZShlZGdlVG9rZW4udG9rZW4pO1xuXG4gICAgICByZXR1cm4gbmV3IEVkZ2VUb2tlbihlZGdlVG9rZW4pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIEVkZ2VBdXRoUGFyc2VyLl9sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBwYXJzZSB0b2tlbiB2YWx1ZScsIGUpO1xuXG4gICAgICByZXR1cm4gbmV3IEVkZ2VUb2tlbihudWxsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW46IEVuY29kZWRFZGdlVG9rZW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0b2tlbiAmJiB0b2tlbi5zdGFydHNXaXRoKGVkZ2VBdXRoVG9rZW5QcmVmaXgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbnRlcmZhY2UgSVRva2VuIHtcbiAgdXJpOiBVUkwgfCBudWxsO1xuICBjYXBhYmlsaXRpZXM6IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSUVkZ2VUb2tlbiB7XG4gIGFwcGxpY2F0aW9uSWQ6IHN0cmluZztcbiAgdG9rZW46IElUb2tlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRnZVRva2VuIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwbGljYXRpb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b2tlbjogSVRva2VuO1xuXG4gIGNvbnN0cnVjdG9yKGVkZ2VUb2tlbjogSUVkZ2VUb2tlbikge1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uSWQgPSBlZGdlVG9rZW4/LmFwcGxpY2F0aW9uSWQgfHwgJyc7XG4gICAgdGhpcy5fdG9rZW4gPSB7XG4gICAgICB1cmk6IGVkZ2VUb2tlbj8udG9rZW4/LnVyaSA/IG5ldyBVUkwoZWRnZVRva2VuLnRva2VuLnVyaSkgOiBudWxsLFxuICAgICAgY2FwYWJpbGl0aWVzOiBlZGdlVG9rZW4/LnRva2VuPy5jYXBhYmlsaXRpZXMgfHwgW11cbiAgICB9O1xuICB9XG5cbiAgZ2V0IHVyaSgpOiBVUkwgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW4udXJpO1xuICB9XG5cbiAgZ2V0IGNhcGFiaWxpdGllcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuLmNhcGFiaWxpdGllcztcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9uSWQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZlYXR1cmVFbmFibGVtZW50IHtcbiAgc3RhdGljIGdldCBjbGllbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENsaWVudCBvZmZlciB3b3JrZmxvdyBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseSBpbiB0aGUgZm9sbG93aW5nIGJyb3dzZXJzXG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc0IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzYgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc3O1xuICB9XG5cbiAgc3RhdGljIGdldCBhZGRUcmFuY2VpdmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgLy8gQ2hyb21lIDY5LCA3MCwgNzEsIDcyIGV4cG9zZXMgYGFkZFRyYW5jZWl2ZXJgIGJ1dCBpdCBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseVxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU2OSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzAgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcxIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0Q3VycmVudE9mZmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU2O1xuICB9XG5cbiAgc3RhdGljIGdldCBvblRyYWNrRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjMgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDUyO1xuICB9XG5cbiAgc3RhdGljIGdldCB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hvdWxkVXNlTmF0aXZlSGxzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYWZhcmknIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYW1zdW5nQnJvd3Nlcic7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUHJlY2FjaGluZ0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSAhPT0gJ0lFJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISh0eXBlb2YgTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3NvciA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgIHR5cGVvZiBNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yID09PSAndW5kZWZpbmVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2Rpc3Bvc2FibGU6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoZGlzcG9zYWJsZTogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5fZGlzcG9zYWJsZSA9IGRpc3Bvc2FibGU7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLl9kaXNwb3NhYmxlLmNhbGwodGhpcyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZUxpc3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0OiBJRGlzcG9zYWJsZVtdID0gW107XG5cbiAgYWRkKGRpc3Bvc2FibGU6IElEaXNwb3NhYmxlKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5wdXNoKGRpc3Bvc2FibGUpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0LmZvckVhY2goZGlzcG9zYWJsZSA9PiBkaXNwb3NhYmxlLmRpc3Bvc2UoKSk7XG4gICAgdGhpcy5fbGlzdC5sZW5ndGggPSAwO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYERpc3Bvc2FibGVMaXN0W2Rpc3Bvc2FibGVzPSR7dGhpcy5fbGlzdC5sZW5ndGh9XWA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmluZ3Mge1xuICBzdGF0aWMgcmFuZG9tKGxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCByYW5kb20xM0NoYXJhY3RlcnMgPSAoKTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMiwgMTUpO1xuICAgIH07XG5cbiAgICBjb25zdCBsb29wczogbnVtYmVyID0gTWF0aC5jZWlsKGxlbmd0aCAvIDEzKTtcblxuICAgIHJldHVybiBuZXcgQXJyYXkobG9vcHMpLmZpbGwocmFuZG9tMTNDaGFyYWN0ZXJzKS5yZWR1Y2UoKHN0cmluZywgZnVuYykgPT4ge1xuICAgICAgcmV0dXJuIHN0cmluZyArIGZ1bmMoKTtcbiAgICB9LCAnJykuc3Vic3RyaW5nKDAsIGxlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3RyaW5ncyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRVbnJlYWNoYWJsZSh4OiBuZXZlcik6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHZhbHVlIFske3h9XS4gVGhpcyBzaG91bGQgbmV2ZXIgYmUgcmVhY2hlZGApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NlcnRVbnJlYWNoYWJsZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGVuZGVycyB7XG4gIHByaXZhdGUgX2FwcGVuZGVyczogQXJyYXk8SUFwcGVuZGVyPiA9IFtdO1xuXG4gIGdldCB2YWx1ZSgpOiBBcnJheTxJQXBwZW5kZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBwZW5kZXJzO1xuICB9XG5cbiAgYWRkKGFwcGVuZGVyOiBJQXBwZW5kZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMucHVzaChhcHBlbmRlcik7XG4gIH1cblxuICByZW1vdmUoYXBwZW5kZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSB0aGlzLl9hcHBlbmRlcnMucmVkdWNlKChpdGVtcywgaXRlbSkgPT4ge1xuICAgICAgaWYgKCEoaXRlbSA9PT0gYXBwZW5kZXIpKSB7XG4gICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpdGVtcztcbiAgICB9LCBbXSBhcyBBcnJheTxJQXBwZW5kZXI+KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnNvbGVBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsTWVzc2FnZSA9IGAke2RhdGUudG9JU09TdHJpbmcoKX0gWyR7Y2F0ZWdvcnl9XSBbJHtMb2dnaW5nTGV2ZWxbbG9nTGV2ZWxdfV0gJHttZXNzYWdlfWA7XG5cbiAgICBpZiAobG9nTGV2ZWwgPCBMb2dnaW5nTGV2ZWwuV2Fybikge1xuICAgICAgY29uc29sZS5sb2coZnVsbE1lc3NhZ2UpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihmdWxsTWVzc2FnZSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcblxuZXhwb3J0IGVudW0gTG9nZ2luZ0xldmVsIHtcbiAgQWxsID0gLTEsXG4gIFRyYWNlID0gMTAsXG4gIERlYnVnID0gMjAsXG4gIEluZm8gPSAzMCxcbiAgV2FybiA9IDQwLFxuICBFcnJvciA9IDUwLFxuICBGYXRhbCA9IDYwLFxuICBPZmYgPSAxMDAsXG59XG5cbmV4cG9ydCB0eXBlIExvZ2dpbmdMZXZlbFR5cGUgPSAnT2ZmJyB8ICdUcmFjZScgfCAnRGVidWcnIHwgJ0luZm8nIHwgJ1dhcm4nIHwgJ0Vycm9yJyB8ICdGYXRhbCcgfCAnQWxsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2F0ZWdvcnk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwZW5kZXJzOiBBcHBlbmRlcnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZDtcblxuICBnZXQgY2F0ZWdvcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2F0ZWdvcnk7XG4gIH1cblxuICBnZXQgYXBwZW5kZXJzKCk6IEFwcGVuZGVycyB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogTG9nZ2luZ1RocmVzaG9sZCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHRyYWNlKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5UcmFjZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5UcmFjZSwgYXJncyk7XG4gIH1cblxuICBkZWJ1ZyguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRGVidWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRGVidWcsIGFyZ3MpO1xuICB9XG5cbiAgaW5mbyguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuSW5mbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5JbmZvLCBhcmdzKTtcbiAgfVxuXG4gIHdhcm4oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuV2FybiwgYXJncyk7XG4gIH1cblxuICBlcnJvciguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRXJyb3IsIGFyZ3MpO1xuICB9XG5cbiAgZmF0YWwoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkZhdGFsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkZhdGFsLCBhcmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9nKGxldmVsOiBudW1iZXIsIGFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnJlcGxhY2VQbGFjZWhvbGRlcnMoYXJncyk7XG5cbiAgICB0aGlzLl9hcHBlbmRlcnMudmFsdWUuZm9yRWFjaCgoYXBwZW5kZXI6IElBcHBlbmRlcikgPT4ge1xuICAgICAgYXBwZW5kZXIubG9nKGxldmVsLCBtZXNzYWdlLCB0aGlzLmNhdGVnb3J5LCBkYXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZVBsYWNlaG9sZGVycyhhcmdzOiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gYXJnc1swXTtcbiAgICBsZXQgaW5kZXggPSAwO1xuXG4gICAgd2hpbGUgKHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuaW5kZXhPZiAmJiBhcmdzLmxlbmd0aCA+IDEgJiYgaW5kZXggPj0gMCkge1xuICAgICAgaW5kZXggPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YoJyUnLCBpbmRleCk7XG5cbiAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSwgaW5kZXggKyAyKTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlICclJzpcbiAgICAgICAgICAgIC8vIEVzY2FwZWQgJyUlJyB0dXJucyBpbnRvICclJ1xuICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSArIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSk7XG4gICAgICAgICAgICBpbmRleCsrO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJyVkJyBvciAnJXMnIHdpdGggdGhlIGFyZ3VtZW50XG4gICAgICAgICAgICBhcmdzWzBdID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHRoaXMucmVwbGFjZUFyZ3VtZW50KFxuICAgICAgICAgICAgICB0aGlzLnRvU3RyaW5nKGFyZ3NbMV0pLFxuICAgICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLFxuICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGFyZ3Muc3BsaWNlKDEsIDEpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdqJzpcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJWonIHdpdGggdGhlIGFyZ3VtZW50XG4gICAgICAgICAgICBhcmdzWzBdID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHRoaXMucmVwbGFjZUFyZ3VtZW50KFxuICAgICAgICAgICAgICB0aGlzLnN0cmluZ2lmeShhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGFyZ3Muc3BsaWNlKDEsIDEpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGFyZ3MudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhcmdzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGFyZ3MgPSBhcmdzLnJlZHVjZSgoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSwgaW5kZXgsIGFycmF5KSA9PiB7XG4gICAgICAgIGlmIChpbmRleCArIDEgPT09IGFycmF5Lmxlbmd0aCAmJiBjdXJyZW50VmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArICdcXG4nICsgdGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUuc3RhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICsgYFske3RoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlKX1dYDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIHN0cmluZ2lmeShhcmc6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgY2FjaGUgPSBbXTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGFyZyBpbnN0YW5jZW9mIEVycm9yID8gdGhpcy50b1N0cmluZyhhcmcpIDogYXJnLFxuICAgICAgICAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICghIXZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoY2FjaGUuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiAnPHJlY3Vyc2l2ZT4nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYWNoZS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIDJcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICdbb2JqZWN0IGludmFsaWQgSlNPTi5zdHJpbmdpZnldJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VBcmd1bWVudChhcmd1bWVudDogYW55LCByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyB0aGlzLnRvU3RyaW5nKGFyZ3VtZW50KSArIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMik7XG4gIH1cblxuICBwcml2YXRlIHRvU3RyaW5nKGRhdGE6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBkYXRhID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCB0b1N0cmluZ1N0ciA9ICcnO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdG9TdHJpbmdTdHIgPSAnW29iamVjdCBpbnZhbGlkIHRvU3RyaW5nKCldJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b1N0cmluZ1N0cjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGNhdGVnb3J5OiBzdHJpbmcsIGFwcGVuZGVyczogQXBwZW5kZXJzLCB0aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQpIHtcbiAgICB0aGlzLl9jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRoaXMuX2FwcGVuZGVycyA9IGFwcGVuZGVycztcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcml2YWN5TW9kZSBmcm9tICcuLi9kb20vUHJpdmFjeU1vZGUnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXJEZWZhdWx0cyB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdExvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBQcml2YWN5TW9kZS5pc1ByaXZhdGUgPyBMb2dnaW5nTGV2ZWwuT2ZmIDogTG9nZ2luZ0xldmVsLkFsbDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gUHJpdmFjeU1vZGUuaXNQcml2YXRlID8gTG9nZ2luZ0xldmVsLk9mZiA6IExvZ2dpbmdMZXZlbC5BbGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkluZm87XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlciwge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuaW1wb3J0IEFwcGVuZGVycyBmcm9tICcuL0FwcGVuZGVycyc7XG5pbXBvcnQgTG9nZ2luZ1RocmVzaG9sZCBmcm9tICcuL0xvZ2dpbmdUaHJlc2hvbGQnO1xuaW1wb3J0IENvbnNvbGVBcHBlbmRlciBmcm9tICcuL0NvbnNvbGVBcHBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5QXBwZW5kZXIgZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgZnJvbSAnLi4vZG9tL0NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXInO1xuaW1wb3J0IHtJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcn0gZnJvbSAnLi4vZG9tL0lDb25maWd1cmF0aW9uUGFyYW1hdGVyUmVhZGVyJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyOiBJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciA9IG5ldyBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyKCk7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXJzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBJTG9nZ2VyfSA9IHt9O1xuICBwcml2YXRlIHN0YXRpYyBfYXBwZW5kZXJzOiBBcHBlbmRlcnMgPSBuZXcgQXBwZW5kZXJzKCk7XG4gIHByaXZhdGUgc3RhdGljIF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQgPSBuZXcgTG9nZ2luZ1RocmVzaG9sZCgpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IG5ldyBUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk7XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uKCk6IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBMb2dnZXJGYWN0b3J5Ll90ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgc3RhdGljIGdldExvZ2dlcihjYXRlZ29yeTogc3RyaW5nKTogSUxvZ2dlciB7XG4gICAgaWYgKHR5cGVvZiBjYXRlZ29yeSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNhdGVnb3J5ID0gJ1NESyc7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV07XG5cbiAgICBpZiAobG9nZ2VyKSB7XG4gICAgICByZXR1cm4gbG9nZ2VyO1xuICAgIH1cblxuICAgIHJldHVybiBMb2dnZXJGYWN0b3J5Ll9sb2dnZXJzW2NhdGVnb3J5XSA9IG5ldyBMb2dnZXIoY2F0ZWdvcnksIHRoaXMuX2FwcGVuZGVycywgdGhpcy5fdGhyZXNob2xkKTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlMb2dnaW5nTGV2ZWwoKTtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwoJ2NvbnNvbGUnLCBMb2dnZXJGYWN0b3J5LmFwcGx5Q29uc29sZUxvZ2dlci5iaW5kKHRoaXMpKTtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwoJ3RlbGVtZXRyeScsIExvZ2dlckZhY3RvcnkuYXBwbHlUZWxlbWV0cnlMb2dnZXIuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUxvZ2dpbmdMZXZlbCgpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1sb2dnaW5nLWxldmVsJyk7XG5cbiAgICBpZiAoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSkge1xuICAgICAgdGhpcy5fdGhyZXNob2xkLnNldFRocmVzaG9sZChMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKG5hbWU6IHN0cmluZywgYXBwbHlBcHBlbmRlcjogKGxldmVsOiBMb2dnaW5nTGV2ZWwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoYHBoZW5peC0ke25hbWV9LWxvZ2dpbmctbGV2ZWxgKTtcblxuICAgIGlmIChwYXJhbWV0ZXJWYWx1ZSA9PT0gJ09mZicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhcHBseUFwcGVuZGVyKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlDb25zb2xlTG9nZ2VyKGxldmVsOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIobGV2ZWwgfHwgTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5VGVsZW1ldHJ5TG9nZ2VyKGxldmVsOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWw7XG5cbiAgICB0aGlzLl9hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9nZ2VyRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuTG9nZ2VyRmFjdG9yeS5hcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbCwgTG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nTGV2ZWxNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUobG9nZ2luZ0xldmVsOiBMb2dnaW5nTGV2ZWwpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICBzd2l0Y2ggKGxvZ2dpbmdMZXZlbCkge1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5UcmFjZTpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5EZWJ1ZzpcbiAgICAgICAgcmV0dXJuICdEZWJ1Zyc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5JbmZvOlxuICAgICAgICByZXR1cm4gJ1RyYWNlJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLldhcm46XG4gICAgICAgIHJldHVybiAnV2Fybic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5FcnJvcjpcbiAgICAgICAgcmV0dXJuICdFcnJvcic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5GYXRhbDpcbiAgICAgICAgcmV0dXJuICdGYXRhbCc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGxvZ2dpbmdMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwobG9nZ2luZ0xldmVsVHlwZTogTG9nZ2luZ0xldmVsVHlwZSk6IExvZ2dpbmdMZXZlbCB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLk9mZjtcbiAgICAgIGNhc2UgJ1RyYWNlJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5UcmFjZTtcbiAgICAgIGNhc2UgJ0RlYnVnJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5EZWJ1ZztcbiAgICAgIGNhc2UgJ0luZm8nOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkluZm87XG4gICAgICBjYXNlICdXYXJuJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5XYXJuO1xuICAgICAgY2FzZSAnRXJyb3InOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkVycm9yO1xuICAgICAgY2FzZSAnRmF0YWwnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkZhdGFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWxUeXBlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuL0xvZ2dlckRlZmF1bHRzJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dpbmdUaHJlc2hvbGQge1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCA9IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRMb2dnaW5nTGV2ZWw7XG5cbiAgZ2V0IHZhbHVlKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldFRocmVzaG9sZCh0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY1R5cGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzOiBNZXRyaWNzVHlwZTtcblxuICBjb25zdHJ1Y3RvcihtZXRyaWNzOiBNZXRyaWNzVHlwZSkge1xuICAgIHRoaXMuX21ldHJpY3MgPSBtZXRyaWNzO1xuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBNZXRyaWNzVHlwZVt0aGlzLl9tZXRyaWNzXTtcbiAgfVxuXG4gIGdldFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICBzd2l0Y2ggKHRoaXMuX21ldHJpY3MpIHtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuVGltZVRvRmlyc3RGcmFtZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU3RhbGxlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQnVmZmVyaW5nOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TZXR1cENvbXBsZXRlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBGYWlsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5OZXR3b3JrVHlwZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuUmVzb2x1dGlvbkNoYW5nZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uRm9yZWdyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQXBwbGljYXRpb25CYWNrZ3JvdW5kOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fbWV0cmljcyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuL1RlbGVtZXRyeURlZmF1bHQnO1xuXG5leHBvcnQgZW51bSBUZWxlbWV0cnlMZXZlbCB7XG4gIE9mZiA9IDEwMCxcbiAgRXNzZW50aWFsID0gMTAsXG4gIEFsbCA9IC0xXG59XG5cbmV4cG9ydCB0eXBlIFRlbGVtZXRyeUxldmVsVHlwZSA9ICdPZmYnIHwgJ0Vzc2VudGlhbCcgfCAnQWxsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0NvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbWV0cmljcyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3RocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwgPSBUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtZXRyaWNzVXJsID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgbWV0cmljc1VybC5wYXRobmFtZSA9IG1ldHJpY3NVcmwucGF0aG5hbWUgKyAnL21ldHJpY3MnO1xuXG4gICAgdGhpcy5fdXJsID0gbWV0cmljc1VybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBUZWxlbWV0cnlMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuLi9zZGsvVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuLi9zZGsvRW52aXJvbm1lbnQnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzU2VydmljZXM6IHtbY2F0ZWdvcnk6IHN0cmluZ106IE1ldHJpY3NTZXJ2aWNlfSA9IHt9O1xuXG4gIHN0YXRpYyBnZXRNZXRyaWNzU2VydmljZSh1cmw6IHN0cmluZyk6IE1ldHJpY3NTZXJ2aWNlIHtcbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndXInKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzU2VydmljZXMgPSBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF07XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzKSB7XG4gICAgICByZXR1cm4gbWV0cmljc1NlcnZpY2VzO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY3NDb25maWd1cmF0aW9uID0gbmV3IE1ldHJpY3NDb25maWd1cmF0aW9uKCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3kgPSBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi51cmwgPSBUZWxlbWV0cnlVcmwuZ2V0VGVsZW1ldHJ5VXJsKHVybCk7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBFbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudEZyb21VcmwodXJsKTtcblxuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbChTREsudGVsZW1ldHJ5TGV2ZWwpO1xuXG4gICAgcmV0dXJuIE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXNbdXJsXSA9IG5ldyBNZXRyaWNzU2VydmljZShtZXRyaWNzQ29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzdGF0aWMgc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogdm9pZCB7XG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gT2JqZWN0LnZhbHVlcyhNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzKTtcblxuICAgIGlmIChtZXRyaWNzU2VydmljZXMgJiYgbWV0cmljc1NlcnZpY2VzLmxlbmd0aCkge1xuICAgICAgbWV0cmljc1NlcnZpY2VzLmZvckVhY2gobWV0cmljc1NlcnZpY2UgPT4ge1xuICAgICAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IHRlbGVtZXRyeUxldmVsO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uIGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IE1ldHJpY1R5cGUgZnJvbSAnLi9NZXRyaWNUeXBlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuL01ldHJpY3NUeXBlJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDEwMjQ7XG5cbmludGVyZmFjZSBJVmFsdWUge1xuICBzdHJpbmc/OiBzdHJpbmc7XG4gIHVpbnQ2ND86IG51bWJlcjtcbiAgZmxvYXQ/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBJTWV0cmljUmVjb3JkIHtcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHN0cmVhbUlkOiBzdHJpbmc7XG4gIG1ldHJpYzogc3RyaW5nO1xuICB2YWx1ZTogSVZhbHVlO1xuICBwcmV2aW91c1ZhbHVlOiBJVmFsdWU7XG4gIGZ1bGxRdWFsaWZpZWROYW1lOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgcnVudGltZTogbnVtYmVyO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIElNZXRyaWMge1xuICBzdHJlYW1JZD86IHN0cmluZztcbiAgbWV0cmljVHlwZTogTWV0cmljc1R5cGU7XG4gIHZhbHVlPzogSVZhbHVlO1xuICBwcmV2aW91c1ZhbHVlPzogSVZhbHVlO1xuICBydW50aW1lOiBudW1iZXI7XG4gIHJlc291cmNlPzogc3RyaW5nO1xuICBraW5kPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSBfbWV0cmljczogQXJyYXk8SU1ldHJpY1JlY29yZD4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF9kb21haW4gPSBsb2NhdGlvbi5ob3N0bmFtZTtcblxuICBjb25zdHJ1Y3RvcihtZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgZ2V0IG1ldHJpY3NDb25maWd1cmF0aW9uKCk6IE1ldHJpY3NDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwdXNoKG1ldHJpYzogSU1ldHJpYyk6IHZvaWQge1xuICAgIGNvbnN0IHtzdHJlYW1JZCwgdmFsdWUsIHByZXZpb3VzVmFsdWUsIHJ1bnRpbWUsIHJlc291cmNlLCBraW5kfSA9IG1ldHJpYztcbiAgICBjb25zdCBtZXRyaWNUeXBlID0gbmV3IE1ldHJpY1R5cGUobWV0cmljLm1ldHJpY1R5cGUpO1xuXG4gICAgaWYgKHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA+IG1ldHJpY1R5cGUuZ2V0VGVsZW1ldHJ5TGV2ZWwoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgdGVuYW5jeTogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkLFxuICAgICAgc3RyZWFtSWQsXG4gICAgICBtZXRyaWM6IG1ldHJpY1R5cGUuZ2V0TmFtZSgpLFxuICAgICAgdmFsdWUsXG4gICAgICBwcmV2aW91c1ZhbHVlLFxuICAgICAgZnVsbFF1YWxpZmllZE5hbWU6IHRoaXMuX2RvbWFpbixcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCxcbiAgICAgIHZlcnNpb246IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb24sXG4gICAgICBydW50aW1lLFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBraW5kXG4gICAgfTtcblxuICAgIHRoaXMuX21ldHJpY3MucHVzaChtZXRyaWNSZWNvcmQpO1xuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZE1ldHJpY3MobWV0cmljc01lc3NhZ2VzOiBBcnJheTxJTWV0cmljUmVjb3JkPik6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbWV0cmljc01lc3NhZ2VzfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IGZldGNoKHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTWV0cmljc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9tZXRyaWNzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzU2VuZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBtZXRyaWNzTWVzc2FnZXMgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKDAsIHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgdGhpcy5fbWV0cmljcyA9IHRoaXMuX21ldHJpY3Muc2xpY2UocmVxdWVzdFNpemVMaW1pdCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kTWV0cmljcyhtZXRyaWNzTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZW51bSBNZXRyaWNzVHlwZSB7XG4gIFRpbWVUb0ZpcnN0RnJhbWUsXG4gIENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gIFN0YWxsZWQsXG4gIEJ1ZmZlcmluZyxcbiAgU2V0dXBDb21wbGV0ZWQsXG4gIFNldHVwRmFpbGVkLFxuICBSb3VuZFRyaXBUaW1lLFxuICBEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgTmV0d29ya1R5cGUsXG4gIFJlc29sdXRpb25DaGFuZ2VkLFxuICBBcHBsaWNhdGlvbkZvcmVncm91bmQsXG4gIEFwcGxpY2F0aW9uQmFja2dyb3VuZFxufVxuXG5leHBvcnQgZGVmYXVsdCBNZXRyaWNzVHlwZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWwsIFRlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUxldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZSh0ZWxlbWV0cnlMZXZlbDogVGVsZW1ldHJ5TGV2ZWwpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDpcbiAgICAgICAgcmV0dXJuICdFc3NlbnRpYWwnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWxUeXBlOiBUZWxlbWV0cnlMZXZlbFR5cGUpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0ZWxlbWV0cnlMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZic6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5PZmY7XG4gICAgICBjYXNlICdFc3NlbnRpYWwnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJpdmFjeU1vZGUgZnJvbSAnLi4vZG9tL1ByaXZhY3lNb2RlJztcbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlEZWZhdWx0IHtcbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiBQcml2YWN5TW9kZS5pc1ByaXZhdGUgPyBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWwgOiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcm9taXNlSGFuZGxlciBmcm9tICcuL1Byb21pc2VIYW5kbGVyJztcblxuY2xhc3MgUHJvbWlzZSB7XG4gIF9zdGF0ZTogbnVtYmVyO1xuICBfaGFuZGxlZDogYm9vbGVhbjtcbiAgX3ZhbHVlOiBQcm9taXNlO1xuICBfZGVmZXJyZWRzOiBBcnJheTxQcm9taXNlSGFuZGxlcj47XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgLy8gQHRzLWlnbm9yZVxuICB0aGVuKG9uRnVsZmlsbGVkOiBGdW5jdGlvbiwgb25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZDtcblxuICBjb25zdHJ1Y3RvcihjYWxsYmFjaykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvbWlzZXMgbXVzdCBiZSBjb25zdHJ1Y3RlZCB2aWEgbmV3Jyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbm90IGEgZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZSA9IDA7XG4gICAgdGhpcy5faGFuZGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3ZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2RlZmVycmVkcyA9IFtdO1xuXG4gICAgdGhpcy5kb1Jlc29sdmUoY2FsbGJhY2spO1xuICB9XG5cbiAgZG9SZXNvbHZlKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGxldCBkb25lID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgY2FsbGJhY2soXG4gICAgICAgIHZhbHVlID0+IHtcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucHJvbWlzZVJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICByZWFzb24gPT4ge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcm9taXNlUmVqZWN0KHJlYXNvbik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICB0aGlzLnByb21pc2VSZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2VSZXNvbHZlKG5ld1ZhbHVlOiBQcm9taXNlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgcHJvbWlzZSA9IHRoaXMgYXMgUHJvbWlzZTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBQcm9taXNlIFJlc29sdXRpb24gUHJvY2VkdXJlOiBodHRwczovL2dpdGh1Yi5jb20vUHJvbWlzZXMtYXBsdXMvUHJvbWlzZXMtc3BlYyN0aGUtUHJvbWlzZS1yZXNvbHV0aW9uLXByb2NlZHVyZVxuICAgICAgaWYgKG5ld1ZhbHVlID09PSBwcm9taXNlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0EgUHJvbWlzZSBjYW5ub3QgYmUgcmVzb2x2ZWQgd2l0aCBpdCBzZWxmLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3VmFsdWUgJiYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG5ld1ZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICBjb25zdCB0aGVuID0gbmV3VmFsdWUudGhlbjtcblxuICAgICAgICBpZiAobmV3VmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgcHJvbWlzZS5fc3RhdGUgPSAzO1xuICAgICAgICAgIHByb21pc2UuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgcHJvbWlzZS5maW5hbGUoKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHByb21pc2UuZG9SZXNvbHZlKGZ1bmN0aW9uKCk6IHZvaWQge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuICAgICAgICAgICAgdGhlbi5hcHBseShuZXdWYWx1ZSwgYXJndW1lbnRzKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwcm9taXNlLl9zdGF0ZSA9IDE7XG4gICAgICBwcm9taXNlLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgcHJvbWlzZS5maW5hbGUoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBwcm9taXNlLnByb21pc2VSZWplY3QoZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvbWlzZVJlamVjdChuZXdWYWx1ZTogUHJvbWlzZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXRlID0gMjtcbiAgICB0aGlzLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIHRoaXMuZmluYWxlKCk7XG4gIH1cblxuICBmaW5hbGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSAyICYmIHRoaXMuX2RlZmVycmVkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIFByb21pc2UuX2ltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5faGFuZGxlZCkge1xuICAgICAgICAgIFByb21pc2UuX3VuaGFuZGxlZFJlamVjdGlvbih0aGlzLl92YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLl9kZWZlcnJlZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHRoaXMuaGFuZGxlKHRoaXMuX2RlZmVycmVkc1tpXSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGVmZXJyZWRzID0gbnVsbDtcbiAgfVxuXG4gIGhhbmRsZShkZWZlcnJlZDogUHJvbWlzZUhhbmRsZXIpOiB2b2lkIHtcbiAgICBsZXQgcHJvbWlzZSA9IHRoaXMgYXMgUHJvbWlzZTtcblxuICAgIHdoaWxlIChwcm9taXNlLl9zdGF0ZSA9PT0gMykge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UuX3ZhbHVlO1xuICAgIH1cblxuICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gMCkge1xuICAgICAgcHJvbWlzZS5fZGVmZXJyZWRzLnB1c2goZGVmZXJyZWQpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJvbWlzZS5faGFuZGxlZCA9IHRydWU7XG4gICAgUHJvbWlzZS5faW1tZWRpYXRlKCgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gcHJvbWlzZS5fc3RhdGUgPT09IDEgPyBkZWZlcnJlZC5vbkZ1bGZpbGxlZCA6IGRlZmVycmVkLm9uUmVqZWN0ZWQ7XG5cbiAgICAgIGlmIChjYWxsYmFjayA9PT0gbnVsbCkge1xuICAgICAgICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IDEpIHtcbiAgICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZXNvbHZlKHByb21pc2UuX3ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZWplY3QocHJvbWlzZS5fdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVzdWx0O1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhwcm9taXNlLl92YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlamVjdChlKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlc29sdmUocmVzdWx0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhbGwoYXJyOiBBcnJheTxQcm9taXNlPik6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UuYWxsIGFjY2VwdHMgYW4gYXJyYXknKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpO1xuXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoW10pO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVtYWluaW5nID0gYXJncy5sZW5ndGg7XG4gICAgICBjb25zdCBtYW5hZ2VSZXNwb25zZSA9IChpLCB2YWx1ZSk6IHZvaWQgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgICAgICBjb25zdCB0aGVuID0gdmFsdWUudGhlbjtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIHRoZW4uY2FsbChcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZSA9PiBtYW5hZ2VSZXNwb25zZShpLCB2YWx1ZSksXG4gICAgICAgICAgICAgICAgcmVqZWN0XG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGFyZ3NbaV0gPSB2YWx1ZTtcblxuICAgICAgICAgIGlmICgtLXJlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICAgICAgcmVzb2x2ZShhcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1hbmFnZVJlc3BvbnNlKGksIGFyZ3NbaV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHJlc29sdmUodmFsdWUpOiBQcm9taXNlIHtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5jb25zdHJ1Y3RvciA9PT0gUHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHJlc29sdmUodmFsdWUpKTtcbiAgfVxuXG4gIHN0YXRpYyByZWplY3QodmFsdWUpOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4gcmVqZWN0KHZhbHVlKSk7XG4gIH1cblxuICBzdGF0aWMgcmFjZShhcnI6IEFycmF5PFByb21pc2U+KTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS5yYWNlIGFjY2VwdHMgYW4gYXJyYXknKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhcnIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGFycltpXSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIF9pbW1lZGlhdGUoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgaWdub3JlZCA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIDApO1xuICB9XG5cbiAgc3RhdGljIF91bmhhbmRsZWRSZWplY3Rpb24oZXJyb3IpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignUG9zc2libGUgVW5oYW5kbGVkIFByb21pc2UgUmVqZWN0aW9uOicsIGVycm9yKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59XG5cblByb21pc2UucHJvdG90eXBlWydjYXRjaCddID0gZnVuY3Rpb24ob25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3RlZCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZVsndGhlbiddID0gZnVuY3Rpb24ob25GdWxmaWxsZWQ6IEZ1bmN0aW9uLCBvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgY29uc3QgcHJvbWlzZSA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKCgpID0+IG51bGwpO1xuXG4gIHRoaXMuaGFuZGxlKG5ldyBQcm9taXNlSGFuZGxlcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcHJvbWlzZSkpO1xuXG4gIHJldHVybiBwcm9taXNlO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGVbJ2ZpbmFsbHknXSA9IGZ1bmN0aW9uKGNhbGxiYWNrOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgY29uc3QgY29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gIHJldHVybiB0aGlzLnRoZW4oXG4gICAgdmFsdWUgPT4gY29uc3RydWN0b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKCgpID0+IHZhbHVlKSxcbiAgICByZWFzb24gPT4gY29uc3RydWN0b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKCgpID0+IGNvbnN0cnVjdG9yLnJlamVjdChyZWFzb24pKVxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUHJvbWlzZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcm9taXNlIGZyb20gJy4vUHJvbWlzZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb21pc2VIYW5kbGVyIHtcbiAgb25GdWxmaWxsZWQ6IEZ1bmN0aW9uO1xuICBvblJlamVjdGVkOiBGdW5jdGlvbjtcbiAgcHJvbWlzZTogUHJvbWlzZTtcblxuICBjb25zdHJ1Y3RvcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcHJvbWlzZSkge1xuICAgIHRoaXMub25GdWxmaWxsZWQgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IG51bGw7XG4gICAgdGhpcy5vblJlamVjdGVkID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT09ICdmdW5jdGlvbicgPyBvblJlamVjdGVkIDogbnVsbDtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9WYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcblxuZXhwb3J0IGludGVyZmFjZSBJUGVlckNvbm5lY3Rpb25PZmZlckluaXQge1xuICBhdWRpb1RyYW5zY2VpdmVyPzogUlRDUnRwVHJhbnNjZWl2ZXI7XG4gIHZpZGVvVHJhbnNjZWl2ZXI/OiBSVENSdHBUcmFuc2NlaXZlcjtcbiAgcGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbjtcbiAgbG9jYWxPZmZlcjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdQZWVyQ29ubmVjdGlvblNlcnZpY2UnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uRmFjdG9yeTogU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KG5ldyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5KCkpO1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGVkOiB7XG4gICAgZGlyZWN0aW9uPzogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb247XG4gICAgcGVlckNvbm5lY3Rpb246IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PjtcbiAgfTtcblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+IHtcbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIH1cblxuICBzdGF0aWMgaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNQcmVjYWNoaW5nRW5hYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5wcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgICAuY2F0Y2goZSA9PiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHByZS1jYWNoZSBwZWVyIGNvbm5lY3Rpb24gb2ZmZXInLCBlKSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpOiBQcm9taXNlPHsgcGVlckNvbm5lY3Rpb246IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0IHwgdm9pZD47IGRpcmVjdGlvbjogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gfT4ge1xuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IHtcbiAgICAgIGRpcmVjdGlvbjogJ3JlY3Zvbmx5JyxcbiAgICAgIHBlZXJDb25uZWN0aW9uOiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9KVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcihkaXJlY3Rpb246IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uID0gJ3JlY3Zvbmx5Jyk6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PiB7XG4gICAgaWYgKFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkICYmIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkLmRpcmVjdGlvbiA9PT0gZGlyZWN0aW9uKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkLnBlZXJDb25uZWN0aW9uO1xuXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUuY3JlYXRlUGVlckNvbm5lY3Rpb24oKVxuICAgICAgLnRoZW4oYXN5bmMgcGVlckNvbm5lY3Rpb24gPT4ge1xuICAgICAgICBjb25zdCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNBZGRUcmFuc2NlaXZlcjtcbiAgICAgICAgbGV0IHZpZGVvVHJhbnNjZWl2ZXIsIGF1ZGlvVHJhbnNjZWl2ZXI7XG5cbiAgICAgICAgaWYgKHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIpIHtcbiAgICAgICAgICBhdWRpb1RyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoJ2F1ZGlvJywge2RpcmVjdGlvbn0pO1xuICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcigndmlkZW8nLCB7ZGlyZWN0aW9ufSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXVkaW9UcmFuc2NlaXZlcixcbiAgICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIsXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbjogcGVlckNvbm5lY3Rpb24sXG4gICAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcih1bmRlZmluZWQpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBkaXJlY3Rpb24gPT09ICdyZWN2b25seScgPyB7XG4gICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgIH0gOiB7fTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uOiBwZWVyQ29ubmVjdGlvbixcbiAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihvcHRpb25zKVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5QZWVyQ29ubmVjdGlvblNlcnZpY2UuaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIge1xuICBzdGF0aWMgdHJ1bmNhdGVJY2VTZXJ2ZXJzKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBpY2VTZXJ2ZXJzOiBSVENJY2VTZXJ2ZXJbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHVybHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAyOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzW2luZGV4XTtcblxuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgdXJscy5wdXNoKGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzW2luZGV4XSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgdXJsczogdXJscyxcbiAgICAgICAgdXNlcm5hbWU6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgY3JlZGVudGlhbDogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLmNyZWRlbnRpYWxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycyA9IGljZVNlcnZlcnM7XG5cbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSdGNDb25maWd1cmF0aW9uTWFuYWdlciBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IFNkcFBhcnNlciBmcm9tICcuL1NkcFBhcnNlcic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJ0Y01vbml0b3JTdGF0aXN0aWMge1xuICBba2luZDogc3RyaW5nXTogSVJ0Y1N0YXRpc3RpYztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnYWN5UlRDU3RhdHNSZXBvcnQge1xuICByZXN1bHQ6ICgpID0+IElMZWdhY3lSVENTdGF0c1JlcG9ydEl0ZW1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtIGV4dGVuZHMgUlRDU3RhdHNSZXBvcnQge1xuICB0eXBlOiBzdHJpbmc7XG4gIG5hbWVzOiAoKSA9PiBzdHJpbmdbXTtcbiAgc3RhdDogKG5hbWUpID0+IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUnRjU3RhdGlzdGljIHtcbiAgc3NyYz86IHN0cmluZztcbiAgbWVkaWFUeXBlPzogc3RyaW5nO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgYml0cmF0ZT86IG51bWJlcjtcbiAgYnl0ZXNSZWNlaXZlZD86IG51bWJlcjtcbiAgZnJhbWVzRGVjb2RlZD86IG51bWJlcjtcbiAgcGFja2V0c0xvc3Q/OiBudW1iZXI7XG4gIHBhY2tldHNSZWNlaXZlZD86IG51bWJlcjtcbiAgY29kZWM/OiBzdHJpbmc7XG4gIGZwcz86IG51bWJlcjtcbiAgcm91bmRUcmlwVGltZT86IG51bWJlcjtcbiAgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wPzogbnVtYmVyO1xufVxuXG5jb25zdCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0ID0gMTAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnRjQ29ubmVjdGlvbk1vbml0b3IgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkVmlkZW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRBdWRpb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0Y1N0YXRpc3RpYzogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4gPSBuZXcgU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4oe30pO1xuICBwcml2YXRlIF9wZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uO1xuICBwcml2YXRlIF9pc01vbml0b3JSdW5uaW5nID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfdXBkYXRlVGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIF90cmFja3NUb01vbml0b3I6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSwgZXN0aW1hdGVkUm91bmRUcmlwVGltZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBwZWVyQ29ubmVjdGlvbjtcbiAgICB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lID0gZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcbiAgICB0aGlzLl90cmFja3NUb01vbml0b3IgPSBtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5tYXAodHJhY2sgPT4gdHJhY2sua2luZCkgfHwgW107XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIGlmICghRmVhdHVyZUVuYWJsZW1lbnQuZ2V0Q3VycmVudE9mZmVyRGlzYWJsZWQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkU0RQID0gbmV3IFNkcFBhcnNlcih0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICB0aGlzLl9lc3RpbWF0ZWRBdWRpb0NvZGVjID0gcGFyc2VkU0RQLmF1ZGlvQ29kZWM7XG4gICAgICAgIHRoaXMuX2VzdGltYXRlZFZpZGVvQ29kZWMgPSBwYXJzZWRTRFAudmlkZW9Db2RlYztcbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGVTdGF0aXN0aWMoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcnRjU3RhdGlzdGljKCk6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+IHtcbiAgICByZXR1cm4gdGhpcy5fcnRjU3RhdGlzdGljO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9pc01vbml0b3JSdW5uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuX3VwZGF0ZVRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl91cGRhdGVUaW1lb3V0KTtcbiAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU3RhdGlzdGljKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5nZXRTdGF0c1Byb21pc2VCYXNlZERpc2FibGVkKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy51cGRhdGVTdGF0aXN0aWNMZWdhY3koKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNhZmFyaSAxMSBkb2VzbnQgaGF2ZSBraW5kIG9yIG1lZGlhVHlwZSBzbyB3ZSBuZWVkIHRvIHRha2UgaXQgZnJvbSB0aGUgaW5ib3VuZC1ydHAgb2JqZWN0IGlkXG4gICAgY29uc3QgZ2V0S2luZEZvclNhZmFyaTExID0gKGl0ZW0pOiBzdHJpbmcgPT4gaXRlbS5pZC5pbmNsdWRlcygnQXVkaW8nKSA/ICdhdWRpbycgOiBpdGVtLmlkLmluY2x1ZGVzKCdWaWRlbycpID8gJ3ZpZGVvJyA6ICcnO1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhudWxsKVxuICAgICAgLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgICBjb25zdCBydGNTdGF0aXN0aWNzOiBJUnRjTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuXG4gICAgICAgIGlmIChzdGF0cykge1xuICAgICAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcbiAgICAgICAgICBsZXQgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuXG4gICAgICAgICAgc3RhdHMuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5jdXJyZW50Um91bmRUcmlwVGltZSkge1xuICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lICogMTAwMDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1snYXVkaW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10ucm91bmRUcmlwVGltZSA9IHJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1sndmlkZW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10ucm91bmRUcmlwVGltZSA9IHJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1snYXVkaW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWyd2aWRlbyddLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdpbmJvdW5kLXJ0cCcpIHtcbiAgICAgICAgICAgICAgY29uc3Qga2luZCA9IHJlcG9ydC5raW5kIHx8IHJlcG9ydC5tZWRpYVR5cGUgfHwgZ2V0S2luZEZvclNhZmFyaTExKHJlcG9ydCk7XG4gICAgICAgICAgICAgIGxldCBjb2RlYyA9ICcnO1xuXG4gICAgICAgICAgICAgIHN0YXRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT09IHJlcG9ydC5jb2RlY0lkKSB7XG4gICAgICAgICAgICAgICAgICBjb2RlYyA9IGl0ZW0ubWltZVR5cGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpZiAoa2luZCAmJiB0aGlzLl90cmFja3NUb01vbml0b3IuaW5jbHVkZXMoa2luZCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlcyA9IHJlcG9ydC5ieXRlc1JlY2VpdmVkIHx8IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNCeXRlc1JlY2VpdmVkID0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlPy5ba2luZF0/LmJ5dGVzUmVjZWl2ZWQgPz8gMDtcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlc0RlbHRhID0gYnl0ZXMgLSBwcmV2aW91c0J5dGVzUmVjZWl2ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZURlbHRhID0gcmVwb3J0LnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZT8uW2tpbmRdPy50aW1lc3RhbXA7XG4gICAgICAgICAgICAgICAgY29uc3QgYml0cmF0ZSA9IGJ5dGVzRGVsdGEgJiYgdGltZURlbHRhID8gTWF0aC5mbG9vcig4ICogYnl0ZXNEZWx0YSAvXG4gICAgICAgICAgICAgICAgICB0aW1lRGVsdGEgKiAxMDAwKSA6IDA7XG5cbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdID0ge1xuICAgICAgICAgICAgICAgICAgc3NyYzogcmVwb3J0LnNzcmMsXG4gICAgICAgICAgICAgICAgICBtZWRpYVR5cGU6IGtpbmQsXG4gICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IHJlcG9ydC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgICBiaXRyYXRlLFxuICAgICAgICAgICAgICAgICAgYnl0ZXNSZWNlaXZlZDogcmVwb3J0LmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICBwYWNrZXRzTG9zdDogcmVwb3J0LnBhY2tldHNMb3N0LFxuICAgICAgICAgICAgICAgICAgcGFja2V0c1JlY2VpdmVkOiByZXBvcnQucGFja2V0c1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgY29kZWM6IGNvZGVjIHx8IHRoaXMuZ2V0Q29kZWNCeVR5cGUoa2luZCksXG4gICAgICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChyZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIHx8IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIHx8IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcmFtZXNEZWNvZGVkJ10gPSByZXBvcnQuZnJhbWVzRGVjb2RlZDtcblxuICAgICAgICAgICAgICAgICAgY29uc3QgZnBzID0gKHJlcG9ydC5mcmFtZXNEZWNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0RlY29kZWQpIC9cbiAgICAgICAgICAgICAgICAgICAgKHJ0Y1N0YXRpc3RpY3Nba2luZF0udGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLnRpbWVzdGFtcCkgKlxuICAgICAgICAgICAgICAgICAgICAxMDAwO1xuXG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcHMnXSA9IGZwcyA/IE1hdGgucm91bmQoZnBzICogMTAwKSAvIDEwMCA6IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgPSBydGNTdGF0aXN0aWNzO1xuICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9pc01vbml0b3JSdW5uaW5nKSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlU3RhdGlzdGljKCksIHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU3RhdGlzdGljTGVnYWN5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0c0xlZ2FjeSgpLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgY29uc3QgcnRjU3RhdGlzdGljczogSVJ0Y01vbml0b3JTdGF0aXN0aWMgPSB7fTtcbiAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcblxuICAgICAgc3RhdHMucmVzdWx0KCkuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICByZXBvcnQubmFtZXMoKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgIGlmIChuYW1lID09PSAnZ29vZ1JUVCcpIHtcbiAgICAgICAgICAgIHJvdW5kVHJpcFRpbWUgPSByZXBvcnQuc3RhdChuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ3NzcmMnKSB7XG4gICAgICAgICAgY29uc3QgbWVkaWFUeXBlID0gcmVwb3J0LnN0YXQoJ21lZGlhVHlwZScpLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0gPSB7dGltZXN0YW1wOiBEYXRlLm5vdygpfTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3NzcmMnXSA9IHJlcG9ydC5zdGF0KCdzc3JjJykudG9TdHJpbmcoKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ21lZGlhVHlwZSddID0gbWVkaWFUeXBlO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnYnl0ZXNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ2J5dGVzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3BhY2tldHNMb3N0J10gPSByZXBvcnQuc3RhdCgncGFja2V0c0xvc3QnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3BhY2tldHNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ3BhY2tldHNSZWNlaXZlZCcpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnY29kZWMnXSA9IHJlcG9ydC5zdGF0KCdnb29nQ29kZWNOYW1lJykudG9TdHJpbmcoKSB8fCB0aGlzLmdldENvZGVjQnlUeXBlKG1lZGlhVHlwZSk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydyb3VuZFRyaXBUaW1lJ10gPSByb3VuZFRyaXBUaW1lO1xuXG4gICAgICAgICAgaWYgKG1lZGlhVHlwZSA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2ZyYW1lc0RlY29kZWQnXSA9IHJlcG9ydC5zdGF0KCdmcmFtZXNEZWNvZGVkJyk7XG4gICAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2ZwcyddID0gKHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXS5mcmFtZXNEZWNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0RlY29kZWQpIC9cbiAgICAgICAgICAgICAgKHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXS50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8udGltZXN0YW1wKSAqXG4gICAgICAgICAgICAxMDAwIHx8IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSA9IHJ0Y1N0YXRpc3RpY3M7XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVTdGF0aXN0aWMoKSwgdXBkYXRlU3RhdGlzdGljVGltZW91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvZGVjQnlUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhdWRpbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRBdWRpb0NvZGVjO1xuICAgICAgY2FzZSAndmlkZW8nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNkcFBhcnNlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NkcDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdWRpb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNBdWRpb1RyYWNrRW5hYmxlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNWaWRlb1RyYWNrRW5hYmxlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihzZHA6IHN0cmluZykge1xuICAgIHRoaXMuX3NkcCA9IHNkcDtcblxuICAgIGNvbnN0IHNkcFNwbGl0QnlMaW5lcyA9IHRoaXMuX3NkcC5zcGxpdCgvKFxcclxcbnxcXHJ8XFxuKS8pO1xuICAgIGNvbnN0IHNkcFNwbGl0QnlUcmFja3MgPSB0aGlzLl9zZHAuc3BsaXQoJ209Jyk7XG5cbiAgICB0aGlzLl9hdWRpb0NvZGVjID0gdGhpcy5hcHBseUNvZGVjKCdhdWRpbycsIHNkcFNwbGl0QnlMaW5lcyk7XG4gICAgdGhpcy5fdmlkZW9Db2RlYyA9IHRoaXMuYXBwbHlDb2RlYygndmlkZW8nLCBzZHBTcGxpdEJ5TGluZXMpO1xuICAgIHRoaXMuX2lzQXVkaW9UcmFja0VuYWJsZWQgPSB0aGlzLmlzVHJhY2tCeVR5cGVFbmFibGVkKCdhdWRpbycsIHNkcFNwbGl0QnlUcmFja3MpO1xuICAgIHRoaXMuX2lzVmlkZW9UcmFja0VuYWJsZWQgPSB0aGlzLmlzVHJhY2tCeVR5cGVFbmFibGVkKCd2aWRlbycsIHNkcFNwbGl0QnlUcmFja3MpO1xuICB9XG5cbiAgZ2V0IGF1ZGlvQ29kZWMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXVkaW9Db2RlYztcbiAgfVxuXG4gIGdldCB2aWRlb0NvZGVjKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZGVvQ29kZWM7XG4gIH1cblxuICBnZXQgaXNBdWRpb1RyYWNrRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNBdWRpb1RyYWNrRW5hYmxlZDtcbiAgfVxuXG4gIGdldCBpc1ZpZGVvVHJhY2tFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1ZpZGVvVHJhY2tFbmFibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1RyYWNrQnlUeXBlRW5hYmxlZCh0eXBlOiBzdHJpbmcsIHNkcFNwbGl0QnlUcmFja3M6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2RwU2VjdGlvbkZvclR5cGUgPSBzZHBTcGxpdEJ5VHJhY2tzLmZpbmQoc2RwVHJhY2sgPT4gc2RwVHJhY2suc3RhcnRzV2l0aCh0eXBlKSk7XG5cbiAgICBpZiAoIXNkcFNlY3Rpb25Gb3JUeXBlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICFzZHBTZWN0aW9uRm9yVHlwZS5pbmNsdWRlcyhgYT1pbmFjdGl2ZWApO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUNvZGVjKHR5cGU6IHN0cmluZywgc2RwU3BsaXRCeUxpbmVzOiBzdHJpbmcgW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHVzZWRDb2RlY0xpbmUgPSBzZHBTcGxpdEJ5TGluZXMuZmluZChzZHBMaW5lID0+IHNkcExpbmUuaW5jbHVkZXMoYGE9cnRwbWFwOiR7c2RwU3BsaXRCeUxpbmVzLmZpbmQoaSA9PiBpLmluY2x1ZGVzKGBtPSR7dHlwZX1gKSkuc3BsaXQoJyAnKVszXX1gKSk7XG4gICAgY29uc3QgdXNlZENvZGVjID0gdXNlZENvZGVjTGluZS5zcGxpdCgnICcpWzFdO1xuICAgIGNvbnN0IGNvZGVjTmFtZSA9IHVzZWRDb2RlYy5zcGxpdCgnLycpWzBdO1xuXG4gICAgcmV0dXJuIGNvZGVjTmFtZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiwge1BlZXJDb25uZWN0aW9uRXZlbnRzfSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCB7SUxlZ2FjeVJUQ1N0YXRzUmVwb3J0fSBmcm9tICcuL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcblxuY2xhc3MgVmFuaWxsYVBlZXJDb25uZWN0aW9uIGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1ZhbmlsbGFQZWVyQ29ubmVjdGlvbicpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbjogUlRDUGVlckNvbm5lY3Rpb247XG5cbiAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQud2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbiBjbGFzcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBUaGlzIHdhcyBhIENocm9tZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvblxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbmV3IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBuZXcgUlRDUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBnZXQgbmF0aXZlKCk6IFJUQ1BlZXJDb25uZWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgY3VycmVudExvY2FsRGVzY3JpcHRpb24oKTogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbigpOiBSVENTZXNzaW9uRGVzY3JpcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGljZUNvbm5lY3Rpb25TdGF0ZSgpOiBSVENJY2VDb25uZWN0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGU7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGdldCBzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFGZWF0dXJlRW5hYmxlbWVudC5hZGRUcmFuY2VpdmVyRGlzYWJsZWQgJiYgdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlT2ZmZXIob3B0aW9ucz86IFJUQ09mZmVyT3B0aW9ucyk6IFByb21pc2U8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgY3JlYXRlT2ZmZXIgbWV0aG9kIHdpdGggY2FsbGJhY2tzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQW5zd2VyKG9wdGlvbnM/OiBSVENBbnN3ZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSBjcmVhdGVBbnN3ZXIgbWV0aG9kIHdpdGggY2FsbGJhY2tzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHJlc29sdmUsIHJlamVjdCwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBzZXRMb2NhbERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBhc3luYyBzZXRSZW1vdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGhhc0NyeXB0byA9IGRlc2NyaXB0aW9uLnNkcD8ubWF0Y2goL2E9Y3J5cHRvOi9pKTtcblxuICAgIGlmIChoYXNDcnlwdG8pIHtcbiAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdTRFAgYT1jcnlwdG8gaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCA/XG4gICAgICBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6IGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGdldFNlbmRlcnMoKTogUlRDUnRwU2VuZGVyW10ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTZW5kZXJzKCk7XG4gIH1cblxuICBnZXRTdGF0cyhzZWxlY3Rvcj86IE1lZGlhU3RyZWFtVHJhY2sgfCBudWxsKTogUHJvbWlzZTxSVENTdGF0c1JlcG9ydD4ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhzZWxlY3Rvcik7XG4gIH1cblxuICBnZXRTdGF0c0xlZ2FjeSgpOiBQcm9taXNlPElMZWdhY3lSVENTdGF0c1JlcG9ydD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIC8vIElnbm9yZWQgZHVlIHRvIHR5cGVzY3JpcHQgbm90IGhhdmluZyBsZWdhY3kgJ2dldFN0YXRzJyBtZXRob2QgdHlwZSBkZWZpbml0aW9uXG4gICAgICAvLyBUaGlzIHdhcyBhIENocm9tZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgJ2dldFN0YXRzJyBtZXRob2QgZm9yXG4gICAgICAvLyBDaHJvbWVAPD0gNjYgZGV0YWlsZWQgaGVyZTogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NjI3ODE2XG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKHJlc29sdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcih0eXBlOiBQZWVyQ29ubmVjdGlvbkV2ZW50cywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZTogUGVlckNvbm5lY3Rpb25FdmVudHMsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LCBvcHRpb25zPzogYm9vbGVhbiB8IEV2ZW50TGlzdGVuZXJPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH1cblxuICBhZGRUcmFuc2NlaXZlcihuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCk6IFJUQ1J0cFRyYW5zY2VpdmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIobmFtZSwgb3B0aW9ucyk7XG4gIH1cblxuICBhZGRTdHJlYW0obWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtKTogdm9pZCB7XG4gICAgbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFjayh0cmFjayk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDb25maWd1cmF0aW9uKCk6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uKCk7XG4gIH1cblxuICBzZXRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc2V0IG9udHJhY2soaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1RyYWNrRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2sgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9udHJhY2soKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1RyYWNrRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2s7XG4gIH1cblxuICBzZXQgb25pY2VjYW5kaWRhdGUoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmljZWNhbmRpZGF0ZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGU7XG4gIH1cblxuICBzZXQgb25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmFuaWxsYVBlZXJDb25uZWN0aW9uOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgVmFuaWxsYVBlZXJDb25uZWN0aW9uIGZyb20gJy4vVmFuaWxsYVBlZXJDb25uZWN0aW9uJztcblxuY2xhc3MgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIElQZWVyQ29ubmVjdGlvbkZhY3Rvcnkge1xuICBhc3luYyBjcmVhdGVQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbik6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgcmV0dXJuIG5ldyBWYW5pbGxhUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi9TdWJqZWN0JztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhZE9ubHlTdWJqZWN0PFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3ViamVjdDogU3ViamVjdDxUPjtcblxuICBjb25zdHJ1Y3RvcihzdWJqZWN0OiBTdWJqZWN0PFQ+KSB7XG4gICAgdGhpcy5fc3ViamVjdCA9IHN1YmplY3Q7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmplY3QudmFsdWU7XG4gIH1cblxuICBzdWJzY3JpYmUobGlzdGVuZXI6IChUKSA9PiB2b2lkKTogSURpc3Bvc2FibGUge1xuICAgIHJldHVybiB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZShsaXN0ZW5lcik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBJQ29tcGFyYWJsZSBmcm9tICcuLi9sYW5nL0lDb21wYXJhYmxlJztcblxuY2xhc3MgRGlzcG9zYWJsZUxpc3RlbmVyPFQ+IGV4dGVuZHMgRGlzcG9zYWJsZSB7XG4gIGNvbnN0cnVjdG9yKGxpc3RlbmVyczogQXJyYXk8VD4sIGxpc3RlbmVyOiBUKSB7XG4gICAgc3VwZXIoKCkgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuXG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1YmplY3Q8VD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0ZW5lcnM6IEFycmF5PChUKSA9PiB2b2lkPjtcbiAgcHJpdmF0ZSBfdmFsdWU6IFQ7XG5cbiAgY29uc3RydWN0b3IodmFsdWU6IFQpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbXTtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhbHVlOiBUKSB7XG4gICAgbGV0IGNoYW5nZWQgPSB0aGlzLl92YWx1ZSAhPT0gdmFsdWU7XG5cbiAgICBpZiAoY2hhbmdlZCAmJiB2YWx1ZSkge1xuICAgICAgY29uc3QgY29tcGFyYWJsZSA9IHZhbHVlIGFzIHVua25vd24gYXMgSUNvbXBhcmFibGU8VD47XG5cbiAgICAgIGlmICh0eXBlb2YgY29tcGFyYWJsZS5lcXVhbHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2hhbmdlZCA9ICFjb21wYXJhYmxlLmVxdWFscyh0aGlzLl92YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFjaGFuZ2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcblxuICAgIHRoaXMuX2xpc3RlbmVycy5mb3JFYWNoKGxpc3RlbmVyID0+IHtcbiAgICAgIGxpc3RlbmVyKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBzdWJzY3JpYmUobGlzdGVuZXI6IChUKSA9PiB2b2lkKTogSURpc3Bvc2FibGUge1xuICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcblxuICAgIGxpc3RlbmVyKHRoaXMuX3ZhbHVlKTtcblxuICAgIHJldHVybiBuZXcgRGlzcG9zYWJsZUxpc3RlbmVyPChUKSA9PiB2b2lkPih0aGlzLl9saXN0ZW5lcnMsIGxpc3RlbmVyKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbnZpcm9ubWVudCB7XG4gIHN0YXRpYyBnZXRFbnZpcm9ubWVudEZyb21VcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVVJMID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgICByZXR1cm4gYmFzZVVSTC5vcmlnaW47XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IFN0cmluZ3MgZnJvbSAnLi4vbGFuZy9TdHJpbmdzJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbCwgTG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgQ29uc29sZUFwcGVuZGVyIGZyb20gJy4uL2xvZ2dlci9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiwge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dpbmdMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IFByaXZhY3lNb2RlIGZyb20gJy4uL2RvbS9Qcml2YWN5TW9kZSc7XG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuaW1wb3J0IHtJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcn0gZnJvbSAnLi4vZG9tL0lDb25maWd1cmF0aW9uUGFyYW1hdGVyUmVhZGVyJztcbmltcG9ydCBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciBmcm9tICcuLi9kb20vQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3InO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi4vcnRjL0lQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uU2VydmljZSBmcm9tICcuLi9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlVcmwgZnJvbSAnLi9UZWxlbWV0cnlVcmwnO1xuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4vRW52aXJvbm1lbnQnO1xuaW1wb3J0IHtIbHNQbGF5ZXJUeXBlLCBTaGFrYVR5cGUsIFdlYlBsYXllclR5cGV9IGZyb20gJy4vc3RyZWFtaW5nL1N0cmVhbVR5cGVzJztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdCc7XG5cbmNvbnN0IHBhZ2VMb2FkVGltZSA9IHdpbmRvd1snX19waGVuaXhQYWdlTG9hZFRpbWUnXSB8fCB3aW5kb3dbJ19fcGFnZUxvYWRUaW1lJ10gfHwgRGF0ZS5ub3coKTtcblxuaW50ZXJmYWNlIElJbml0T3B0aW9ucyB7XG4gIGRpc2NvdmVyeVVyaT86IHN0cmluZztcbiAgcGVlckNvbm5lY3Rpb25GYWN0b3J5PzogSVBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgdGVsZW1ldHJ5TGV2ZWw/OiBUZWxlbWV0cnlMZXZlbFR5cGU7XG4gIGxvZ2dpbmdMZXZlbD86IExvZ2dpbmdMZXZlbFR5cGU7XG4gIGNvbnNvbGVMb2dnaW5nTGV2ZWw/OiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtPzogYm9vbGVhbjtcbiAgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU/OiBib29sZWFuO1xuICB3ZWJQbGF5ZXJMb2FkZXI/OiAocGxheWVyOiBXZWJQbGF5ZXJUeXBlKSA9PiB2b2lkO1xuICBzaGFrYVBsYXllckxvYWRlcj86IChwbGF5ZXI6IFNoYWthVHlwZSkgPT4gdm9pZDtcbiAgaGxzSnNMb2FkZXI/OiAocGxheWVyOiBIbHNQbGF5ZXJUeXBlKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTREsge1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3dlYlBsYXllckxvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9zaGFrYVBsYXllckxvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9obHNKc0xvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyOiBJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciA9IG5ldyBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyKCk7XG4gIHByaXZhdGUgc3RhdGljIF9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjogQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIHByaXZhdGUgc3RhdGljIF9lbnZpcm9ubWVudDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlVcmw6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgc3RhdGljIF9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gODtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUxldmVsOiBTdWJqZWN0PFRlbGVtZXRyeUxldmVsPiA9IG5ldyBTdWJqZWN0PFRlbGVtZXRyeUxldmVsPihUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCk7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9zZW5kTG9jYWxDYW5kaWRhdGVzOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoIVByaXZhY3lNb2RlLmlzUHJpdmF0ZSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF90ZW5hbmN5OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2NsaWVudFNlc3Npb25JZDogc3RyaW5nID0gU3RyaW5ncy5yYW5kb20oMzIpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfbG9hZGVkVGltZXN0YW1wOiBEYXRlID0gbmV3IERhdGUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTREsnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2luaXRpYWxpemVkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlJbml0aWFsaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPihTREsuX2luaXRpYWxpemVkKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5RGlzY292ZXJ5VXJpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8c3RyaW5nPihEaXNjb3ZlcnlVcmkudXJpKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5OiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KFBlZXJDb25uZWN0aW9uU2VydmljZS5wZWVyQ29ubmVjdGlvbkZhY3RvcnkpO1xuXG4gIHN0YXRpYyBnZXQgcGFnZUxvYWRUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZExvY2FsQ2FuZGlkYXRlcygpOiBTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVuYW5jeSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc3RhdGljIGdldCBjbGllbnRTZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU0RLLl9jbGllbnRTZXNzaW9uSWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvYWRlZFRpbWVzdGFtcCgpOiBEYXRlIHtcbiAgICByZXR1cm4gU0RLLl9sb2FkZWRUaW1lc3RhbXA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGluaXRpYWxpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlJbml0aWFsaXplZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGlzY292ZXJ5VXJpKCk6IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seURpc2NvdmVyeVVyaTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGVlckNvbm5lY3Rpb25GYWN0b3J5KCk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY1JldHJ5T25GYWlsdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2ViUGxheWVyTG9hZGVyKCk6IChXZWJQbGF5ZXJUeXBlKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fd2ViUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaGFrYVBsYXllckxvYWRlcigpOiAoU2hha2FUeXBlKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fc2hha2FQbGF5ZXJMb2FkZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGhsc0pzTG9hZGVyKCk6IChIbHNQbGF5ZXJUeXBlKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5faGxzSnNMb2FkZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1ldHJpY3NTZXJ2aWNlKCk6IE1ldHJpY3NTZXJ2aWNlIHtcbiAgICByZXR1cm4gU0RLLl9tZXRyaWNzU2VydmljZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IoKTogQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3Ige1xuICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5VXJsKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbGVtZXRyeVVybDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzO1xuICB9XG5cbiAgc3RhdGljIHNldCBtYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKHJldHJpZXNBbW91bnQ6IG51bWJlcikge1xuICAgIHRoaXMuX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSByZXRyaWVzQW1vdW50O1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZSh0aGlzLl9sb2dnZXIudGhyZXNob2xkLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlKFNESy5fdGVsZW1ldHJ5TGV2ZWwudmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyRGV0ZWN0b3IoKTogQnJvd3NlckRldGVjdG9yIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uID0gTG9nZ2VyRmFjdG9yeS50ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuXG4gICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuXG4gICAgY29uc3QgaWdub3JlZEVudmlyb25tZW50ID0gU0RLLl9lbnZpcm9ubWVudC5zdWJzY3JpYmUoZW52aXJvbm1lbnQgPT4ge1xuICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWREaXNjb3ZlcnlVcmkgPSBTREsudGVsZW1ldHJ5VXJsLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBjb25zdCB0ZWxlbWV0cnlBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIFRlbGVtZXRyeUFwcGVuZGVyKTtcblxuICAgICAgaWYgKHRlbGVtZXRyeUFwcGVuZGVyKSB7XG4gICAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5yZW1vdmUodGVsZW1ldHJ5QXBwZW5kZXIpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnVGVsZW1ldHJ5IFVSTCB3YXMgc2V0IHRvIFslc10nLCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZFRlbmFuY3kgPSBTREsuX3RlbmFuY3kuc3Vic2NyaWJlKHRlbmFuY3kgPT4ge1xuICAgICAgY29uc3QgdGVsZW1ldHJ5QXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBUZWxlbWV0cnlBcHBlbmRlcik7XG5cbiAgICAgIGlmICh0ZWxlbWV0cnlBcHBlbmRlciAmJiB0ZW5hbmN5KSB7XG4gICAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSA9IHRlbmFuY3k7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5yZW1vdmUodGVsZW1ldHJ5QXBwZW5kZXIpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnVGVsZW1ldHJ5IHRlbmFuY3kgd2FzIHNldCB0byBbJXNdJywgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseU1ldHJpY3NDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIFNESy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShEaXNjb3ZlcnlVcmkudXJpLnZhbHVlKTtcbiAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uID0gU0RLLl9tZXRyaWNzU2VydmljZS5tZXRyaWNzQ29uZmlndXJhdGlvbjtcblxuICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcblxuICAgIGNvbnN0IGlnbm9yZWRFbnZpcm9ubWVudCA9IFNESy5fZW52aXJvbm1lbnQuc3Vic2NyaWJlKGVudmlyb25tZW50ID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkRGlzY292ZXJ5VXJpID0gU0RLLnRlbGVtZXRyeVVybC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi51cmwgPSB2YWx1ZTtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkVGVuYW5jeSA9IFNESy5fdGVuYW5jeS5zdWJzY3JpYmUodGVuYW5jeSA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3kgPSB0ZW5hbmN5O1xuICAgIH0pO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LW1ldHJpY3MtbGV2ZWwnKTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgTWV0cmljc0ZhY3Rvcnkuc2V0VGVsZW1ldHJ5TGV2ZWwoVGVsZW1ldHJ5TGV2ZWxbdmFsdWVdKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZ25vcmVkVGVsZW1ldHJ5TGV2ZWwgPSBTREsuX3RlbGVtZXRyeUxldmVsLnN1YnNjcmliZSh0ZWxlbWV0cnlMZXZlbCA9PiB7XG4gICAgICBNZXRyaWNzRmFjdG9yeS5zZXRUZWxlbWV0cnlMZXZlbCh0ZWxlbWV0cnlMZXZlbCk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmV0cnktb24tZmFpbHVyZScpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJldHJ5IG9uIGZhaWx1cmUgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtYXV0b21hdGljYWxseS1yZWNvbm5lY3QtcGVlci1jb25uZWN0aW9uJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0F1dG9tYXRpY2FsbHkgcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbiBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24pO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIFNESy5kaXNjb3ZlcnlVcmkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy50ZWxlbWV0cnlVcmwudmFsdWUgPSBTREsuZ2V0VGVsZW1ldHJ5VXJsKHZhbHVlKTtcbiAgICAgIFNESy5fZW52aXJvbm1lbnQudmFsdWUgPSBFbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudEZyb21VcmwodmFsdWUpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgY2hhbm5lbFRva2VuID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWNoYW5uZWwtdG9rZW4nKTtcblxuICAgIGlmIChjaGFubmVsVG9rZW4pIHtcbiAgICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4oY2hhbm5lbFRva2VuKTtcblxuICAgICAgU0RLLl90ZW5hbmN5LnZhbHVlID0gZWRnZVRva2VuLnRlbmFuY3k7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gKGVkZ2VUb2tlbi51cmkgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdXJpVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtdXJpJyk7XG5cbiAgICBpZiAodXJpVmFsdWUpIHtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSB1cmlWYWx1ZTtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIFwicGhlbml4LXVyaVwiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRhZyB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlVVJJVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtYmFzZS11cmknKTtcblxuICAgIGlmIChiYXNlVVJJVmFsdWUpIHtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBgJHtiYXNlVVJJVmFsdWV9L3BjYXN0L2VuZFBvaW50c2A7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC1iYXNlLXVyaVwiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRhZyB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgaW5pdChvcHRpb25zPzogSUluaXRPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZC52YWx1ZSkge1xuICAgICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBuZXcgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IoKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMuZGlzY292ZXJ5VXJpKSB7XG4gICAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBvcHRpb25zLmRpc2NvdmVyeVVyaTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucGVlckNvbm5lY3Rpb25GYWN0b3J5KSB7XG4gICAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUgPSBvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMudGVsZW1ldHJ5TGV2ZWwgJiYgVGVsZW1ldHJ5TGV2ZWxbb3B0aW9ucy50ZWxlbWV0cnlMZXZlbF0pIHtcbiAgICAgICAgU0RLLl90ZWxlbWV0cnlMZXZlbC52YWx1ZSA9IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbChvcHRpb25zLnRlbGVtZXRyeUxldmVsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMubG9nZ2luZ0xldmVsICYmIExvZ2dpbmdMZXZlbFtvcHRpb25zLmxvZ2dpbmdMZXZlbF0pIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLnRocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMubG9nZ2luZ0xldmVsKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwgJiZcbiAgICAgICAgTG9nZ2luZ0xldmVsW29wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbF0pIHtcbiAgICAgICAgY29uc3QgY29uc29sZUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgQ29uc29sZUFwcGVuZGVyKTtcblxuICAgICAgICBpZiAoY29uc29sZUFwcGVuZGVyKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5yZW1vdmUoY29uc29sZUFwcGVuZGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwgIT09ICdPZmYnKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IENvbnNvbGVBcHBlbmRlcihMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsKSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5fYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9IG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5fYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPSBvcHRpb25zLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy53ZWJQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fd2ViUGxheWVyTG9hZGVyID0gb3B0aW9ucy53ZWJQbGF5ZXJMb2FkZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnNoYWthUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyID0gb3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuaGxzSnNMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5faGxzSnNMb2FkZXIgPSBvcHRpb25zLmhsc0pzTG9hZGVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIFNESy5faW5pdGlhbGl6ZWQudmFsdWUgPSB0cnVlO1xuICB9XG5cbiAgc3RhdGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgU0RLLl9pbml0aWFsaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmRpc3Bvc2UoKTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IG51bGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0VGVsZW1ldHJ5VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5VXJsLmdldFRlbGVtZXRyeVVybCh1cmwpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NESyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VubG9hZCcsICgpID0+IHtcbiAgU0RLLmRpc3Bvc2UoKTtcbn0pO1xuXG5TREsuYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseU1ldHJpY3NDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5pbml0KCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeVVybCB7XG4gIHN0YXRpYyBnZXRUZWxlbWV0cnlVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVVJMID0gbmV3IFVSTCh1cmwpO1xuICAgICAgY29uc3Qgc2VnbWVudHMgPSBiYXNlVVJMLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG5cbiAgICAgIHN3aXRjaCAoYmFzZVVSTC5wcm90b2NvbCkge1xuICAgICAgICBjYXNlICd3czonOlxuICAgICAgICAgIGJhc2VVUkwucHJvdG9jb2wgPSAnaHR0cDonO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dzczonOlxuICAgICAgICAgIGJhc2VVUkwucHJvdG9jb2wgPSAnaHR0cHM6JztcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWdtZW50cy5sZW5ndGggPT09IDIgfHxcbiAgICAgICAgICAoc2VnbWVudHMubGVuZ3RoID09PSAzICYmIHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDJdLmxlbmd0aCA8PSAyICYmIHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdLmxlbmd0aCA8PSAzKVxuICAgICAgKSB7XG4gICAgICAgIHNlZ21lbnRzLnVuc2hpZnQoJ3RlbGVtZXRyeScpO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdzdGctJykgfHwgc2VnbWVudHNbMF0uZW5kc1dpdGgoJy1zdGcnKSB8fCBzZWdtZW50c1swXS5pbmNsdWRlcygnLXN0Zy0nKSB8fCBzZWdtZW50c1swXSA9PT0gJ3N0ZycpIHtcbiAgICAgICAgc2VnbWVudHNbMF0gPSAndGVsZW1ldHJ5LXN0Zyc7XG4gICAgICB9IGVsc2UgaWYgKHNlZ21lbnRzWzBdLnN0YXJ0c1dpdGgoJ2xvY2FsJykgfHwgc2VnbWVudHNbMF0uZW5kc1dpdGgoJy1sb2NhbCcpKSB7XG4gICAgICAgIC8vIExlYXZlIFVSTCB1bmNoYW5nZWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeSc7XG4gICAgICB9XG5cbiAgICAgIGJhc2VVUkwuaG9zdG5hbWUgPSBzZWdtZW50cy5qb2luKCcuJyk7XG5cbiAgICAgIHJldHVybiBgJHtiYXNlVVJMLm9yaWdpbn0vdGVsZW1ldHJ5YDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgdHlwZSBCaXRyYXRlU3RhdGVUeXBlID0gJ0tlZXAnIHwgJ1Jlc2V0JztcbmV4cG9ydCB0eXBlIEJpdHJhdGVNb2RlVHlwZSA9ICdOb3JtYWwnIHwgJ0ZvcmNlJyB8ICdSZXNldCc7XG5cbmV4cG9ydCBlbnVtIEJpdHJhdGVTdGF0ZSB7XG4gIEtlZXAsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBlbnVtIEJpdHJhdGVNb2RlIHtcbiAgTm9ybWFsLFxuICBGb3JjZSxcbiAgUmVzZXRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUge1xuICBhcGlWZXJzaW9uOiBudW1iZXI7XG4gIHNoYXJlZFNlY3JldDogc3RyaW5nO1xuICBlbGFwc2VkSW5NaWxsaXNlY29uZHM6IG51bWJlcjtcbiAgYml0cmF0ZUluQml0c1BlclNlY29uZDogbnVtYmVyO1xuICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZVR5cGU7XG4gIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZVR5cGU7XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRXhwb25lbnRpYWxCYWNrb2ZmIGZyb20gJy4uLy4uL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW19IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQgU2Vzc2lvblRlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9TZXNzaW9uVGVsZW1ldHJ5JztcbmltcG9ydCB7SVJ0Y01vbml0b3JTdGF0aXN0aWN9IGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlU3RhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcbmltcG9ydCBUb2tlbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9Ub2tlbkNvbnRleHQnO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0LCB7Q2hhbm5lbENvbnRleHRPcHRpb25zfSBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQnO1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1N0YXRlQ29udGV4dCc7XG5pbXBvcnQgU3RyZWFtRmFjdG9yeSBmcm9tICcuLi9zdHJlYW1pbmcvU3RyZWFtRmFjdG9yeSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcblxuY29uc3QgZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uID0gJ2NsaWVudDp0ZXJtaW5hdGlvbic7XG5jb25zdCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDMwMDA7XG5jb25zdCBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHMgPSAxNTAwMDtcblxuZXhwb3J0IHR5cGUgQ2hhbm5lbE9wdGlvbnMgPSB7XG4gIHRhcmdldExhZz86IE1pbGxpc2Vjb25kO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxhbnksIGFueT47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVsIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignQ2hhbm5lbCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b2tlbkNvbnRleHQ6IFRva2VuQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdGVDb250ZXh0OiBTdGF0ZUNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4cG9uZW50aWFsQmFja29mZjogRXhwb25lbnRpYWxCYWNrb2ZmO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsU3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VmlkZW9FbGVtZW50OiBSZWFkT25seVN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VG9rZW46IFJlYWRPbmx5U3ViamVjdDxFbmNvZGVkRWRnZVRva2VuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhdGU6IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dG9NdXRlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dG9QYXVzZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUb2tlbkV4cGlyaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0aG9yaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seU9ubGluZTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxvYWRpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQbGF5aW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhbmRieTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0b3BwZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUYXJnZXRMYWc6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TGFnOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUJpdHJhdGVMaW1pdDogUmVhZE9ubHlTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJlc29sdXRpb246IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUZhaWx1cmVDb3VudDogUmVhZE9ubHlTdWJqZWN0PG51bWJlcj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RW5kUG9pbnQ6IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RyZWFtOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UnRjU3RhdGlzdGljczogUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlNZWRpYVN0cmVhbTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPjtcblxuICBwcml2YXRlIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nlc3Npb25UZWxlbWV0cnk6IFNlc3Npb25UZWxlbWV0cnk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcjogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuLCBvcHRpb25zPzogQ2hhbm5lbE9wdGlvbnMpIHtcbiAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKTtcbiAgICBjb25zdCBjaGFubmVsQ29udGV4dE9wdGlvbnM6IENoYW5uZWxDb250ZXh0T3B0aW9ucyA9IHtcbiAgICAgIHRhcmdldExhZzogb3B0aW9ucz8udGFyZ2V0TGFnLFxuICAgICAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogb3B0aW9ucz8udmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayxcbiAgICAgIGhhc0luc2VydGFibGVTdHJlYW1zOiBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdpbnNlcnRhYmxlLXN0cmVhbXMnKVxuICAgIH07XG5cbiAgICB0aGlzLl90b2tlbkNvbnRleHQgPSBuZXcgVG9rZW5Db250ZXh0KHRva2VuKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IG5ldyBDaGFubmVsQ29udGV4dChjaGFubmVsQ29udGV4dE9wdGlvbnMpO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dCA9IG5ldyBQZWVyQ29ubmVjdGlvbkNvbnRleHQoKTtcbiAgICB0aGlzLl9zdGF0ZUNvbnRleHQgPSBuZXcgU3RhdGVDb250ZXh0KCk7XG4gICAgdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmID0gbmV3IEV4cG9uZW50aWFsQmFja29mZigpO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3JlYWRPbmx5VmlkZW9FbGVtZW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxIVE1MVmlkZW9FbGVtZW50Pih0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VG9rZW4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4odGhpcy5fdG9rZW5Db250ZXh0LnRva2VuKTtcbiAgICB0aGlzLl9yZWFkT25seVBlZXJDb25uZWN0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbik7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGF0ZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvTXV0ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkKTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbkV4cGlyaW5nKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5T25saW5lID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUpO1xuICAgIHRoaXMuX3JlYWRPbmx5TG9hZGluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlQbGF5aW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nKTtcbiAgICB0aGlzLl9yZWFkT25seVN0YW5kYnkgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YW5kYnkpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RvcHBlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUYXJnZXRMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQudGFyZ2V0TGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUxhZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcpO1xuICAgIHRoaXMuX3JlYWRPbmx5Qml0cmF0ZUxpbWl0ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdCk7XG4gICAgdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudCk7XG4gICAgdGhpcy5fcmVhZE9ubHlFbmRQb2ludCA9IG5ldyBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50KTtcbiAgICB0aGlzLl9yZWFkT25seVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtKTtcbiAgICB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3MgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzKTtcbiAgICB0aGlzLl9yZWFkT25seU1lZGlhU3RyZWFtID0gbmV3IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT4odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtKTtcblxuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5IHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShkaXNjb3ZlcnlVcmkpO1xuICAgIHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkgPSBuZXcgU2Vzc2lvblRlbGVtZXRyeShTREsucGFnZUxvYWRUaW1lLCB0aGlzLl9tZXRyaWNzU2VydmljZSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZCh0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5KTtcbiAgICB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIgPSB0aGlzLmhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkLmJpbmQodGhpcyk7XG4gICAgdGhpcy52aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnN1YnNjcmliZSh2aWRlb0VsZW1lbnQgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgICBpZiAoIXZpZGVvRWxlbWVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS5zdWJzY3JpYmUoc3RyZWFtID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LmRpc3Bvc2UoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdGhpcy52aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkgPSBuZXcgVmlkZW9UZWxlbWV0cnkodGhpcy5zdHJlYW1JZCwgU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodGhpcy52aWRlb0VsZW1lbnQpO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh0aGlzLnZpZGVvRWxlbWVudCk7XG5cbiAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5TdG9wcGVkKSB7XG4gICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5yZXN0YXJ0QWZ0ZXJTdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUgIT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIH0sIGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi5zdWJzY3JpYmUocmVzb2x1dGlvbiA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeSkge1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5Lm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhyZXNvbHV0aW9uLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC5zdWJzY3JpYmUoYml0cmF0ZUxpbWl0ID0+IHtcbiAgICAgICAgaWYgKGJpdHJhdGVMaW1pdCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBlbGFwc2VkSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpIC0gdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbEluaXRpYWxpemF0aW9uLmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUubGltaXRCaXRyYXRlKFxuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLFxuICAgICAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgYml0cmF0ZUxpbWl0LFxuICAgICAgICAgICAgQml0cmF0ZVN0YXRlLktlZXAsXG4gICAgICAgICAgICBCaXRyYXRlTW9kZS5Ob3JtYWxcbiAgICAgICAgICApXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRXJyb3Igd2hpbGUgc2V0dGluZyBsaW1pdCBiaXRyYXRlJywgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgZGVzdHJveVN0cmVhbU9uVW5tb3VudCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmRlc3Ryb3lTdHJlYW1PblVubW91bnQodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLCAnY2xpZW50OnRlcm1pbmF0aW9uLW9uLXdpbmRvdy11bmxvYWQnKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGRlc3Ryb3lTdHJlYW1PblVubW91bnQpO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgZGVzdHJveVN0cmVhbU9uVW5tb3VudCk7XG4gICAgfSkpO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHZpZGVvRWxlbWVudCgpOiBIVE1MVmlkZW9FbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuICB9XG5cbiAgc2V0IHZpZGVvRWxlbWVudCh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG5cbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldCkge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zZXNzaW9uSWQgPSAnJztcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSA9IHZpZGVvRWxlbWVudDtcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIGlmICh0aGlzLnJlc29sdXRpb24udmFsdWUud2lkdGggIT09IHZpZGVvRWxlbWVudC52aWRlb1dpZHRoIHx8IHRoaXMucmVzb2x1dGlvbi52YWx1ZS5oZWlnaHQgIT09IHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCkge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uLnZhbHVlID0gbmV3IERpbWVuc2lvbih2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCwgdmlkZW9FbGVtZW50LnZpZGVvSGVpZ2h0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IERpbWVuc2lvbi5lbXB0eTtcbiAgICB9XG4gIH1cblxuICBnZXQgdG9rZW4oKTogRW5jb2RlZEVkZ2VUb2tlbiB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZTtcbiAgfVxuXG4gIHNldCB0b2tlbih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbikge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSA9IHRva2VuO1xuICAgIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbkV4cGlyaW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSk7XG4gICAgY29uc3QgZGlzY292ZXJ5VXJpID0gKGVkZ2VUb2tlbi51cmkgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgIFNESy50ZW5hbmN5LnZhbHVlID0gZWRnZVRva2VuLnRlbmFuY3kgfHwgU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IGRpc2NvdmVyeVVyaTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5oYXNJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSA9IGVkZ2VUb2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ2luc2VydGFibGUtc3RyZWFtcycpO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHBlZXJDb25uZWN0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhdGU7XG4gIH1cblxuICBnZXQgYXV0b011dGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkO1xuICB9XG5cbiAgZ2V0IGF1dG9QYXVzZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkO1xuICB9XG5cbiAgZ2V0IHRva2VuRXhwaXJpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nO1xuICB9XG5cbiAgZ2V0IGF1dGhvcml6ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkO1xuICB9XG5cbiAgZ2V0IG9ubGluZSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seU9ubGluZTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TG9hZGluZztcbiAgfVxuXG4gIGdldCBwbGF5aW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGxheWluZztcbiAgfVxuXG4gIGdldCBzdGFuZGJ5KCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhbmRieTtcbiAgfVxuXG4gIGdldCBzdG9wcGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RvcHBlZDtcbiAgfVxuXG4gIGdldCB0YXJnZXRMYWcoKTogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnO1xuICB9XG5cbiAgZ2V0IGxhZygpOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlMYWc7XG4gIH1cblxuICBnZXQgYml0cmF0ZUxpbWl0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5Qml0cmF0ZUxpbWl0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHJlc29sdXRpb24oKTogUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJlc29sdXRpb247XG4gIH1cblxuICBnZXQgZmFpbHVyZUNvdW50KCk6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlGYWlsdXJlQ291bnQ7XG4gIH1cblxuICBnZXQgZW5kUG9pbnQoKTogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50PiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQ7XG4gIH1cblxuICBnZXQgc3RyZWFtKCk6IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RyZWFtO1xuICB9XG5cbiAgZ2V0IHN0cmVhbUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkO1xuICB9XG5cbiAgZ2V0IHJ0Y1N0YXRpc3RpY3MoKTogUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UnRjU3RhdGlzdGljcztcbiAgfVxuXG4gIGdldCBtZWRpYVN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIHNldEJpdHJhdGVMaW1pdChiaXRyYXRlTGltaXQ6IEJpdHNQZXJTZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgPSBiaXRyYXRlTGltaXQ7XG4gIH1cblxuICBjbGVhckJpdHJhdGVMaW1pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSkge1xuICAgICAgY29uc3QgZWxhcHNlZEluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKSAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxJbml0aWFsaXphdGlvbi5nZXRUaW1lKCk7XG4gICAgICBjb25zdCBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kID0gMDtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5saW1pdEJpdHJhdGUoXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSxcbiAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kLFxuICAgICAgICBCaXRyYXRlU3RhdGUuS2VlcCxcbiAgICAgICAgQml0cmF0ZU1vZGUuUmVzZXRcbiAgICAgIClcbiAgICAgICAgLnRoZW4oKHtzdGF0dXN9KSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ29rJykge1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHNldHRpbmcgbGltaXQgYml0cmF0ZScsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVUYXJnZXRMYWcobGFnOiBNaWxsaXNlY29uZCk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnRhcmdldExhZy52YWx1ZSA9IGxhZztcbiAgfVxuXG4gIGFzeW5jIHN0b3AocmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0b3AocmVhc29uKTtcblxuICAgICAgICByZXNvbHZlKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy5zdWJzY3JpYmUoaXNTdGFydGluZyA9PiB7XG4gICAgICAgIGlmICghaXNTdGFydGluZykge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0b3AocmVhc29uKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1N0b3AocmVhc29uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKHJlYXNvbik7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuICB9XG5cbiAgYXN5bmMgcmVzdW1lKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBtdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdW5tdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9wKCdjbGllbnQ6Y2hhbm5lbC1kaXNwb3NlJykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0VXJpKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogVVJMIHtcbiAgICBjb25zdCB1cmwgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS51cmk7XG5cbiAgICBpZiAodXJsKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgZGlzY292ZXIgVVJJIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgIHJldHVybiBuZXcgVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgd2FzIGFscmVhZHkgZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGFscmVhZHkgc3RhcnRpbmcsIHNraXBwaW5nIHN0YXJ0Jyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzU3RhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1N0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRva2VuOiBFbmNvZGVkRWRnZVRva2VuID0gdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlO1xuICAgIGNvbnN0IGxpc3Rlbk9uU3RyZWFtU2V0dXAgPSB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5Lmxpc3Rlbk9uU3RyZWFtU2V0dXAoKTtcblxuICAgIGlmICghRWRnZUF1dGhQYXJzZXIuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5oYXNJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSkge1xuICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignaW5zZXJ0YWJsZS1zdHJlYW1zIGVuYWJsZWQsIGJ1dCBtaXNzaW5nIGNhbGxiYWNrIGZ1bmN0aW9uIENyZWF0ZUNoYW5uZWxPcHRpb25zLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2snKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50LmlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdpbnNlcnRhYmxlLXN0cmVhbXMgZW5hYmxlZCwgYnV0IGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBNZWRpYSBTdHJlYW0gVHJhY2sgQVBJJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sudmFsdWUpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDcmVhdGVDaGFubmVsT3B0aW9ucy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIGNhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kLCBidXQgZmVhdHVyZSBpcyBub3QgZW5hYmxlZCB2aWEgaW5zZXJ0YWJsZS1zdHJlYW1zIGNhcGFiaWxpdHknKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OnN0YXJ0Jyk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICBjb25zdCB1cmkgPSB0aGlzLmdldFVyaSh0b2tlbik7XG4gICAgY29uc3QgaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrOiAoKSA9PiBQcm9taXNlPHZvaWQ+ID0gKCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUpOiB2b2lkID0+IHtcbiAgICAgIC8vIE5lZWQgdG8gc2V0IGlzU3RhcnRpbmcgdG8gZmFsc2UgYW5kIGNhbGwgaGFuZGxlU3RyZWFtRmFpbHVyZSBpZiBzdHJlYW0gbW9uaXRvcnMgZm91bmQgYW4gaXNzdWVcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiByZXNvbHZlKHRoaXMuaGFuZGxlU3RyZWFtRmFpbHVyZSgpKTtcbiAgICB9KTtcbiAgICBjb25zdCBzdHJlYW1QbGF5ZXIgPSBTdHJlYW1GYWN0b3J5LmNyZWF0ZSh0b2tlbiwgdGhpcy5fY2hhbm5lbENvbnRleHQsIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrKTtcblxuICAgIGlmICghc3RyZWFtUGxheWVyKSB7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbVBsYXllci5zdGFydChcbiAgICAgIHVyaSxcbiAgICAgIHRva2VuLFxuICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cCxcbiAgICAgIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQuYmluZCh0aGlzKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cC5mYWlsKCk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKys7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCdjbGllbnQ6Y2xlYW51cC1hZnRlci1mYWlsZWQtc2V0dXAnKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBjaGFubmVsJywgZSk7XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcgfHwgIVNESy5hdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHRoaXMuZ2V0UmV0cnlJbnRlcnZhbCgpKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzdGFydEFmdGVyU3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCB3YXMgYWxyZWFkeSBkaXNwb3NlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc3RhcnQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGxheSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtZWRpYVN0cmVhbSA9IHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZTtcblxuICAgIGlmICghbWVkaWFTdHJlYW0pIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXRyeUludGVydmFsKCk6IG51bWJlciB7XG4gICAgc3dpdGNoICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSkge1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICAgIHJldHVybiBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHM7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0b3BwZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBsYXlpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QYXVzZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I6XG4gICAgICAgIC8vIEZpcnN0IGFuZCBzZWNvbmQgYXR0ZW1wdCBmYXN0LCBhZnRlciB0aGF0IGV4cG9uZW50aWFsIHdpdGggYmFja29mZiBpbnRlcnZhbFxuICAgICAgICByZXR1cm4gdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmLmdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQodGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZVN0cmVhbUZhaWx1cmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgc3dpdGNoICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSkge1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFuZEJ5OlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuT2ZmbGluZTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZXRyeSBzdGFydCB3aXRoIGluaXRpYWwgc3RhdGUgWyVzXSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUsIENoYW5uZWxTdGF0ZVt0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZV0pO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyB1bmF1dGhvcml6ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBnZW8gcmVzdHJpY3RlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGdlbyBibG9ja2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RvcHBlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGxheWluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgcGxheWluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QYXVzZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHBhdXNlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBpbnZva2UgcGxheSgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhcnRpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGFscmVhZHkgc3RhcnRpbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkIGR1ZSB0byB1bnN1cHBvcnRlZCBmZWF0dXJlLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQgZHVlIHRvIGNvbmZpZ3VyYXRpb24gZXJyb3IsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhblVwUmVzb3VyY2VzKHJlYXNvbjogc3RyaW5nID0gZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgY29uc3QgcGVlckNvbm5lY3Rpb24gPSB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWU7XG5cbiAgICBpZiAocGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IG51bGw7XG4gICAgICBwZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3AoKSk7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZC52YWx1ZSA9IHRydWU7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmRlc3Ryb3lTdHJlYW0odGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLCByZWFzb24pXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbSB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIERlc3Ryb3llZCBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRmFpbGVkIHRvIGRlc3Ryb3kgc3RyZWFtJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudCAmJiB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnNlc3Npb25JZCA9ICcnO1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9ICcnO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBtZWRpYVN0cmVhbTtcblxuICAgIGNvbnN0IHBsYXlQcm9taXNlID0gdmlkZW9FbGVtZW50LnBsYXkoKTtcblxuICAgIGlmIChwbGF5UHJvbWlzZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBwbGF5UHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgY29uc3QgaGFzQXVkaW9UcmFjayA9ICEhbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZmlsdGVyKHRyYWNrID0+IHtcbiAgICAgICAgcmV0dXJuIHRyYWNrLmtpbmQgPT09ICdhdWRpbyc7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmID0gIVNESy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcblxuICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIHx8IHZpZGVvRWxlbWVudC5tdXRlZCB8fCAhaGFzQXVkaW9UcmFjaykge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG5cbiAgICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gUGF1c2VkIHZpZGVvIGFmdGVyIHBsYXkgZmFpbGVkLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG51bGw7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzQXVkaW9UcmFjaykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSBtdXRlZCB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIHZpZGVvRWxlbWVudC5wbGF5KClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFBsYXllZCB2aWRlbyBhZnRlciBhdXRvIG11dGluZy4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkIHRvIHVubXV0ZS4nLCB0aGlzLnN0cmVhbUlkKTtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gQ2hhbm5lbFN0YXRlIHtcbiAgT2ZmbGluZSA9IDEsXG4gIFN0YXJ0aW5nLFxuICBQYXVzZWQsXG4gIFBsYXlpbmcsXG4gIFJlY292ZXJpbmcsXG4gIFJlY29ubmVjdGluZyxcbiAgU3RhbmRCeSxcbiAgU3RvcHBlZCxcbiAgVW5hdXRob3JpemVkLFxuICBHZW9SZXN0cmljdGVkLFxuICBHZW9CbG9ja2VkLFxuICBVbnN1cHBvcnRlZEZlYXR1cmUsXG4gIENvbmZpZ3VyYXRpb25FcnJvcixcbiAgRXJyb3Jcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2hhbm5lbFN0YXRlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgQ2hhbm5lbCwge0NoYW5uZWxPcHRpb25zfSBmcm9tICcuL0NoYW5uZWwnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcbmltcG9ydCB7TWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxudHlwZSBDcmVhdGVDaGFubmVsT3B0aW9ucyA9IHtcbiAgdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbjtcbiAgdGFyZ2V0TGFnPzogTWlsbGlzZWNvbmQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPGFueSwgYW55Pjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYW5uZWxzIHtcbiAgc3RhdGljIGNyZWF0ZUNoYW5uZWwob3B0aW9uczogQ3JlYXRlQ2hhbm5lbE9wdGlvbnMpOiBDaGFubmVsIHtcbiAgICBpZiAoIVNESy5pbml0aWFsaXplZC52YWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTREsgaXMgbm90IGxvYWRlZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGFubmVsT3B0aW9uczogQ2hhbm5lbE9wdGlvbnMgPSB7XG4gICAgICB0YXJnZXRMYWc6IG9wdGlvbnMudGFyZ2V0TGFnLFxuICAgICAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogb3B0aW9ucy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgQ2hhbm5lbChvcHRpb25zLnZpZGVvRWxlbWVudCwgb3B0aW9ucy50b2tlbiwgY2hhbm5lbE9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWxzIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgQ2hhbm5lbHMgZnJvbSAnLi9DaGFubmVscyc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4vQ2hhbm5lbFN0YXRlJztcblxuZXhwb3J0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlXG59O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFNESyxcbiAgQ2hhbm5lbHMsXG4gIENoYW5uZWxTdGF0ZVxufTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IERpbWVuc2lvbiBmcm9tICcuLi8uLi92aWRlby9EaW1lbnNpb24nO1xuaW1wb3J0IEVuZFBvaW50LCB7SVN0cmVhbSwgU3Vic2NyaWJlU3RhdHVzfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFZpZGVvVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5JztcbmltcG9ydCB7SVJ0Y01vbml0b3JTdGF0aXN0aWMsIElSdGNTdGF0aXN0aWN9IGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQge0JpdHNQZXJTZWNvbmQsIE1pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5cbmNvbnN0IGRlZmF1bHRUYXJnZXRMYWcgPSAwO1xuXG5leHBvcnQgdHlwZSBDaGFubmVsQ29udGV4dE9wdGlvbnMgPSB7XG4gIHRhcmdldExhZz86IG51bWJlcjtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IFRyYW5zZm9ybWVyVHJhbnNmb3JtQ2FsbGJhY2s8YW55LCBhbnk+O1xuICBoYXNJbnNlcnRhYmxlU3RyZWFtcz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVsQ29udGV4dCB7XG4gIGNoYW5uZWxJbml0aWFsaXphdGlvbjogRGF0ZTtcbiAgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICBjaGFubmVsRGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICByZW5kZXJlckRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgdmlkZW9FbGVtZW50OiBTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+O1xuICBzdGF0ZTogU3ViamVjdDxDaGFubmVsU3RhdGU+O1xuICBhdXRvTXV0ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGF1dG9QYXVzZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGF1dGhvcml6ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIG9ubGluZTogU3ViamVjdDxib29sZWFuPjtcbiAgbG9hZGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgcGxheWluZzogU3ViamVjdDxib29sZWFuPjtcbiAgc3RhbmRieTogU3ViamVjdDxib29sZWFuPjtcbiAgc3RvcHBlZDogU3ViamVjdDxib29sZWFuPjtcbiAgdGFyZ2V0TGFnOiBTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgbGFnOiBTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgYml0cmF0ZUxpbWl0OiBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+O1xuICByZXNvbHV0aW9uOiBTdWJqZWN0PERpbWVuc2lvbj47XG4gIGZhaWx1cmVDb3VudDogU3ViamVjdDxudW1iZXI+O1xuICBlbmRQb2ludDogU3ViamVjdDxFbmRQb2ludD47XG4gIHN0cmVhbTogU3ViamVjdDxJU3RyZWFtPjtcbiAgcnRjU3RhdGlzdGljczogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG4gIHZpZGVvVGVsZW1ldHJ5OiBWaWRlb1RlbGVtZXRyeTtcbiAgcnRjQXVkaW9TdGF0aXN0aWM6IElSdGNTdGF0aXN0aWM7XG4gIHJ0Y1ZpZGVvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBjbGVhckZhaWx1cmVDb3VudFRpbWVvdXQ6IG51bWJlcjtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogU3ViamVjdDxUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPGFueSwgYW55Pj47XG4gIGhhc0luc2VydGFibGVTdHJlYW1zOiBTdWJqZWN0PGJvb2xlYW4+O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBDaGFubmVsQ29udGV4dE9wdGlvbnMpIHtcbiAgICB0aGlzLmRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5jaGFubmVsRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLnJlbmRlcmVyRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLmNoYW5uZWxJbml0aWFsaXphdGlvbiA9IG5ldyBEYXRlKCk7XG4gICAgdGhpcy52aWRlb0VsZW1lbnQgPSBuZXcgU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PihudWxsKTtcbiAgICB0aGlzLnN0YXRlID0gbmV3IFN1YmplY3Q8Q2hhbm5lbFN0YXRlPihDaGFubmVsU3RhdGUuU3RhcnRpbmcpO1xuICAgIHRoaXMuYXV0b011dGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuYXV0b1BhdXNlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmF1dGhvcml6ZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLm9ubGluZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMubG9hZGluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnBsYXlpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zdGFuZGJ5ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuc3RvcHBlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnRhcmdldExhZyA9IG5ldyBTdWJqZWN0PE1pbGxpc2Vjb25kPihvcHRpb25zPy50YXJnZXRMYWcgPz8gZGVmYXVsdFRhcmdldExhZyk7XG4gICAgdGhpcy5sYWcgPSBuZXcgU3ViamVjdDxNaWxsaXNlY29uZD4oMCk7XG4gICAgdGhpcy5iaXRyYXRlTGltaXQgPSBuZXcgU3ViamVjdDxCaXRzUGVyU2Vjb25kPigwKTtcbiAgICB0aGlzLnJlc29sdXRpb24gPSBuZXcgU3ViamVjdDxEaW1lbnNpb24+KERpbWVuc2lvbi5lbXB0eSk7XG4gICAgdGhpcy5mYWlsdXJlQ291bnQgPSBuZXcgU3ViamVjdDxudW1iZXI+KDApO1xuICAgIHRoaXMuZW5kUG9pbnQgPSBuZXcgU3ViamVjdDxFbmRQb2ludD4obnVsbCk7XG4gICAgdGhpcy5zdHJlYW0gPSBuZXcgU3ViamVjdDxJU3RyZWFtPihudWxsKTtcbiAgICB0aGlzLnJ0Y1N0YXRpc3RpY3MgPSBuZXcgU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4obnVsbCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICB0aGlzLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPSBuZXcgU3ViamVjdDxUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPGFueSwgYW55Pj4ob3B0aW9ucz8udmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayk7XG4gICAgdGhpcy5oYXNJbnNlcnRhYmxlU3RyZWFtcyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCEhb3B0aW9ucz8uaGFzSW5zZXJ0YWJsZVN0cmVhbXMpO1xuICB9XG5cbiAgZ2V0IHN0cmVhbUlkKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgcmV0dXJuICctJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtLnN0cmVhbUlkO1xuICB9XG5cbiAgYXBwbHlTdGF0dXMoc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICBjYXNlICdnZW8tcmVzdHJpY3RlZCc6XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHRoaXMuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgIGNhc2UgJ25vLXN0cmVhbSc6XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIHRoaXMucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuZmFpbHVyZUNvdW50LnZhbHVlKys7XG4gICAgICAgIHRoaXMucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBhcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmlkZW9FbGVtZW50LnZhbHVlICYmIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQpIHtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkO1xuICAgIH1cbiAgfVxuXG4gIG1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ25vLXN0cmVhbSc6XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YW5kQnk7XG4gICAgICBjYXNlICdnZW8tcmVzdHJpY3RlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDtcbiAgICAgIGNhc2UgJ2dlby1ibG9ja2VkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdjYXBhY2l0eSc6XG4gICAgICBjYXNlICdyYXRlLWxpbWl0ZWQnOlxuICAgICAgY2FzZSAndGltZW91dCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZztcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuRXJyb3I7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShzdGF0dXMpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZWVyQ29ubmVjdGlvbkNvbnRleHQge1xuICBtZWRpYVN0cmVhbTogU3ViamVjdDxNZWRpYVN0cmVhbT47XG4gIHBlZXJDb25uZWN0aW9uOiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj47XG4gIHBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHM6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm1lZGlhU3RyZWFtID0gbmV3IFN1YmplY3Q8TWVkaWFTdHJlYW0+KG51bGwpO1xuICAgIHRoaXMucGVlckNvbm5lY3Rpb24gPSBuZXcgU3ViamVjdDxJUGVlckNvbm5lY3Rpb24+KG51bGwpO1xuICAgIHRoaXMucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGF0ZUNvbnRleHQge1xuICBpc1N0YXJ0aW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBpc0Rpc3Bvc2VkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaXNTdGFydGluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmlzRGlzcG9zZWQgPSBmYWxzZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2tlbkNvbnRleHQge1xuICB0b2tlbjogU3ViamVjdDxFbmNvZGVkRWRnZVRva2VuPjtcbiAgdG9rZW5FeHBpcmluZzogU3ViamVjdDxib29sZWFuPjtcblxuICBjb25zdHJ1Y3Rvcih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbikge1xuICAgIHRoaXMudG9rZW4gPSBuZXcgU3ViamVjdDxFbmNvZGVkRWRnZVRva2VuPih0b2tlbik7XG4gICAgdGhpcy50b2tlbkV4cGlyaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmNvbnN0IGRlZmF1bHREaXNjb3ZlcnlVcmkgPSAnaHR0cHM6Ly9wY2FzdC5waGVuaXhydHMuY29tL3BjYXN0L2VuZFBvaW50cyc7XG5cbmV4cG9ydCB7ZGVmYXVsdERpc2NvdmVyeVVyaX07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlTW9kZVR5cGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdHJhdGVNb2RlTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZShiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGUpOiBCaXRyYXRlTW9kZVR5cGUge1xuICAgIHN3aXRjaCAoYml0cmF0ZU1vZGUpIHtcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuTm9ybWFsOlxuICAgICAgICByZXR1cm4gJ05vcm1hbCc7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLkZvcmNlOlxuICAgICAgICByZXR1cm4gJ0ZvcmNlJztcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuUmVzZXQ6XG4gICAgICAgIHJldHVybiAnUmVzZXQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoYml0cmF0ZU1vZGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtCaXRyYXRlU3RhdGUsIEJpdHJhdGVTdGF0ZVR5cGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdHJhdGVTdGF0ZU1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZShiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZSk6IEJpdHJhdGVTdGF0ZVR5cGUge1xuICAgIHN3aXRjaCAoYml0cmF0ZVN0YXRlKSB7XG4gICAgICBjYXNlIEJpdHJhdGVTdGF0ZS5LZWVwOlxuICAgICAgICByZXR1cm4gJ0tlZXAnO1xuICAgICAgY2FzZSBCaXRyYXRlU3RhdGUuUmVzZXQ6XG4gICAgICAgIHJldHVybiAnUmVzZXQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoYml0cmF0ZVN0YXRlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBEaXNjb3ZlcnlTZXJ2aWNlIGZyb20gJy4vRGlzY292ZXJ5U2VydmljZSc7XG5cbmNvbnN0IGRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwgPSA2MDAwMDtcblxuaW50ZXJmYWNlIElQZXJVUklFbmRwb2ludCB7IFt4OiBzdHJpbmddOiBQcm9taXNlPEVuZFBvaW50PiB9XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeSB7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZTogSVBlclVSSUVuZHBvaW50ID0ge307XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5KCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgcmV0dXJuIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmk6IFVSTCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcblxuICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0pIHtcbiAgICAgIHJldHVybiBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfVxuXG4gICAgY29uc3QgZGlzY292ZXJ5U2VydmljZSA9IG5ldyBEaXNjb3ZlcnlTZXJ2aWNlKHVyaSk7XG4gICAgY29uc3QgY2FjaGVkVmFsdWUgPSBEaXNjb3ZlcnkuX2NhY2hlW3VybF0gPSBkaXNjb3ZlcnlTZXJ2aWNlLmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50KCk7XG4gICAgY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5fY2FjaGVbdXJsXS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSA9PT0gY2FjaGVkVmFsdWUpIHtcbiAgICAgICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgICAgICB9XG4gICAgICB9LCBkaXNjb3ZlcnlDYWNoZUludGVydmFsKTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNhY2hlZFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IEVuZFBvaW50IGZyb20gJy4vRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuXG5jb25zdCBkZWZhdWx0VGltZW91dCA9IDIwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0Rpc2NvdmVyeScpO1xuICBwcml2YXRlIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgX3VyaTogVVJMO1xuXG4gIGNvbnN0cnVjdG9yKHVyaTogVVJMKSB7XG4gICAgaWYgKCF1cmkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHVyaScpO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UodXJpLnRvU3RyaW5nKCkpO1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzKHVyaTogVVJMLCB0aW1lb3V0OiBudW1iZXIpOiBQcm9taXNlPEVuZFBvaW50W10+IHtcbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHRpbWVvdXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgRGlzY292ZXJ5IHRpbWVkIG91dCBbJHt1cmx9XWApKSwgdGltZW91dClcbiAgICAgIClcbiAgICBdKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlzY292ZXJ5IGZhaWxlZCBbJHt1cmx9XSBbJHtyZXNwb25zZS5zdGF0dXN9XWApO1xuICAgIH1cblxuICAgIGlmIChyZXNwb25zZS5ib2R5ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgd2l0aCBubyBkYXRhIFske3VybH1dYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXNTdHJpbmcgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXNTdHJpbmcuc3BsaXQoJywnKTtcblxuICAgIHJldHVybiBlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IG5ldyBFbmRQb2ludChlbmRQb2ludCwgdGltZW91dCkpO1xuICB9XG5cbiAgYXN5bmMgZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQodGltZW91dDogbnVtYmVyID0gZGVmYXVsdFRpbWVvdXQpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJsID0gRGlzY292ZXJ5VXJpLmJ1aWxkRGlzY292ZXJ5VXJsKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXdhaXQgdGhpcy5kaXNjb3Zlck5lYXJieUVuZFBvaW50cyhuZXcgVVJMKHVybCksIHRpbWVvdXQpO1xuICAgIGxldCBmYWlsZWRSZXF1ZXN0cyA9IDA7XG4gICAgY29uc3QgcHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQgPSAoKTogUHJvbWlzZTx2b2lkPiA9PiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoZmFpbGVkUmVxdWVzdHMgPj0gZW5kUG9pbnRzLmxlbmd0aCkge1xuICAgICAgICByZWplY3QoYERpc2NvdmVyeSBvZiBbJHtlbmRQb2ludHMubGVuZ3RofV0gZW5kcG9pbnRzIGZyb20gWyR7dXJsfV0gZmFpbGVkLCBwcmV2ZW50aW5nIGl0IGZyb20gY29tcGxldGluZ2ApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGVuZFBvaW50ID0gYXdhaXQgUHJvbWlzZS5yYWNlKGVuZFBvaW50cy5tYXAoZW5kUG9pbnQgPT4gZW5kUG9pbnRcbiAgICAgIC5waW5nKClcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byBwaW5nIGVuZCBwb2ludCBbJXNdJywgZW5kUG9pbnQsIGUpO1xuXG4gICAgICAgIGZhaWxlZFJlcXVlc3RzKys7XG5cbiAgICAgICAgcmV0dXJuIHByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkKCk7XG4gICAgICB9KVxuICAgICAgLnRoZW4odGltZSA9PiB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyZWQgZW5kIHBvaW50IFslc10gd2l0aCB0aW1lIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpLCB0aW1lKTtcbiAgICAgICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZSxcbiAgICAgICAgICBydW50aW1lOiAobm93IC0gU0RLLnBhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lIHx8IDB9LFxuICAgICAgICAgIHJlc291cmNlOiBlbmRQb2ludC50b1N0cmluZygpLFxuICAgICAgICAgIGtpbmQ6ICdwaW5nJ1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQ7XG4gICAgICB9KSkpO1xuXG4gICAgcmV0dXJuIGVuZFBvaW50O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7ZGVmYXVsdERpc2NvdmVyeVVyaX0gZnJvbSAnLi4vZGVmYXVsdHMnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeVVyaSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kaXNjb3ZlcnlVcmk6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oZGVmYXVsdERpc2NvdmVyeVVyaSk7XG5cbiAgc3RhdGljIGdldCB1cmkoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gRGlzY292ZXJ5VXJpLl9kaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgYnVpbGREaXNjb3ZlcnlVcmwodXJpOiBVUkwpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodXJpLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IHNka1ZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgdXJsLnNlYXJjaCA9IGA/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFtbJ3ZlcnNpb24nLCBzZGtWZXJzaW9uXSwgWydfJywgYCR7RGF0ZS5ub3coKX1gXV0pLnRvU3RyaW5nKCl9YDtcblxuICAgIGlmICh1cmwucGF0aG5hbWUgPT09ICcvJykge1xuICAgICAgdXJsLnBhdGhuYW1lID0gJy9wY2FzdC9lbmRQb2ludHMnO1xuICAgIH1cblxuICAgIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnlVcmkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmltcG9ydCB7XG4gIElTdWJzY3JpYmVSZXNwb25zZSxcbiAgSVN1YnNjcmliZVdpdGhPZmZlclJlcXVlc3QsXG4gIElTdWJzY3JpYmVXaXRob3V0T2ZmZXJSZXF1ZXN0XG59IGZyb20gJy4uL2FwaS9TdWJzY3JpYmUnO1xuaW1wb3J0IHtJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXF1ZXN0LCBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZX0gZnJvbSAnLi4vYXBpL1NldFJlbW90ZURlc2NyaXB0aW9uJztcbmltcG9ydCB7SURlc3Ryb3lTdHJlYW1SZXF1ZXN0LCBJRGVzdHJveVN0cmVhbVJlc3BvbnNlfSBmcm9tICcuLi9hcGkvRGVzdHJveVN0cmVhbSc7XG5pbXBvcnQge0lBZGRJY2VDYW5kaWRhdGVzUmVxdWVzdCwgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZX0gZnJvbSAnLi4vYXBpL0FkZEljZUNhbmRpZGF0ZXMnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZVN0YXRlLCBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgQml0cmF0ZU1vZGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZU1vZGVNYXBwaW5nJztcbmltcG9ydCBCaXRyYXRlU3RhdGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZVN0YXRlTWFwcGluZyc7XG5pbXBvcnQge0JpdHNQZXJTZWNvbmQsIE1pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5pbXBvcnQge1xuICBJUHVibGlzaFJlc3BvbnNlLFxuICBJUHVibGlzaFdpdGhPZmZlclJlcXVlc3QsXG4gIElQdWJsaXNoV2l0aG91dE9mZmVyUmVxdWVzdCxcbiAgUHVibGlzaFN0YXR1c1xufSBmcm9tICcuLi9hcGkvUHVibGlzaCc7XG5cbmNvbnN0IGFwaVZlcnNpb24gPSA3O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpYmVTdGF0dXMgPSAnb2snIHwgJ25vLXN0cmVhbScgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ2dlby1yZXN0cmljdGVkJyB8ICdnZW8tYmxvY2tlZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFJlbW92ZVRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgRGVzdHJveVN0cmVhbVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgaW50ZXJmYWNlIElTdHJlYW0ge1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdWJzY3JpYmVSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cztcbiAgc3RyZWFtPzogSVN0cmVhbTtcbiAgbGFnPzogTWlsbGlzZWNvbmQ7XG4gIHJ0Y0NvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uO1xuICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIElQdWJsaXNoUmVzcG9uc2VJbml0ID0ge1xuICBzdGF0dXM6IFB1Ymxpc2hTdGF0dXM7XG4gIHN0cmVhbT86IElTdHJlYW07XG4gIGxhZz86IE1pbGxpc2Vjb25kO1xuICBydGNDb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbjtcbiAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xufTtcblxuaW50ZXJmYWNlIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXM7XG4gIHNlc3Npb25EZXNjcmlwdGlvbj86IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG59XG5cbmludGVyZmFjZSBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cztcbiAgb3B0aW9ucz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cztcbn1cblxuaW50ZXJmYWNlIElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBEZXN0cm95U3RyZWFtU3RhdHVzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRQb2ludCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFbmRQb2ludCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IF91cmk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIF9yb3VuZFRyaXBUaW1lOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodXJpOiBzdHJpbmcsIHRpbWVvdXQ6IG51bWJlcikge1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgICB0aGlzLl90aW1lb3V0ID0gdGltZW91dDtcblxuICAgIGlmICghdGltZW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbmQgcG9pbnQgcmVxdWlyZXMgYSB0aW1lb3V0YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBFbmRQb2ludFt1cmk9JHt0aGlzLl91cml9XWA7XG4gIH1cblxuICBhc3luYyBwaW5nKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFBpbmdVcmwoKTtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYFBpbmcgdGltZWQgb3V0IFske3VybH1dYCkpLCB0aGlzLl90aW1lb3V0KVxuICAgICAgKVxuICAgIF0pO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHsgLyogSGFuZGxlICovXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBpbmcgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcm91bmRUcmlwVGltZSA9IGZpbmlzaGVkIC0gc3RhcnQ7XG5cbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIGFzeW5jIHN1YnNjcmliZSh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQsIGZhaWx1cmVDb3VudDogbnVtYmVyKTogUHJvbWlzZTxJU3Vic2NyaWJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdGVuYW5jeSA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLnRlbmFuY3k7XG5cbiAgICBpZiAoIXRlbmFuY3kpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAndW5hdXRob3JpemVkJ307XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbdGVuYW5jeSwgJ3N0cmVhbScsICdzdWJzY3JpYmUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGNsaWVudFZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMCAmJiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYm9keVdpdGhPZmZlcjogSVN1YnNjcmliZVdpdGhPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgICAgIHNkcDogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbjoge2FwaVZlcnNpb259XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhPZmZlcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBib2R5V2l0aG91dE9mZmVyOiBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7YXBpVmVyc2lvbn1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgU3Vic2NyaWJlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5LCBodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc3Vic2NyaWJlIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHB1Ymxpc2gobmFtZTogc3RyaW5nLCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQsIGZhaWx1cmVDb3VudDogbnVtYmVyKTogUHJvbWlzZTxJUHVibGlzaFJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHRlbmFuY3kgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS50ZW5hbmN5O1xuXG4gICAgaWYgKCF0ZW5hbmN5KSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ3VuYXV0aG9yaXplZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3RlbmFuY3ksICdzdHJlYW0nLCAncHVibGlzaCddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgY2xpZW50VmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICBpZiAoZmFpbHVyZUNvdW50ID09PSAwICYmIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCBib2R5V2l0aE9mZmVyOiBJUHVibGlzaFdpdGhPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgICAgIHNkcDogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIHN0cmVhbUlkOiAnJyxcbiAgICAgICAgICBvcHRpb25zOiBbJ3VwbG9hZCddLFxuICAgICAgICAgIGFwaVZlcnNpb25cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRoT2ZmZXIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYm9keVdpdGhvdXRPZmZlcjogSVB1Ymxpc2hXaXRob3V0T2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBzdHJlYW1JZDogJycsXG4gICAgICAgICAgb3B0aW9uczogWyd1cGxvYWQnXSxcbiAgICAgICAgICBhcGlWZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHB1Ymxpc2gnLCBuZXcgRXJyb3IoYFB1Ymxpc2ggdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHB1Ymxpc2gnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFB1Ymxpc2hTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1B1Ymxpc2hTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSh0ZW5hbmN5LCBodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3QgcHVibGlzaCByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzdWJzY3JpYmVSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBzZXRSZW1vdGVEZXNjcmlwdGlvbihzdHJlYW06IElTdHJlYW0sIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8SVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXNjcmlwdGlvbicsICdyZW1vdGUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElTZXRSZW1vdGVEZXNjcmlwdGlvblJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgIHR5cGU6IHNlc3Npb25EZXNjcmlwdGlvbi50eXBlLFxuICAgICAgICBzZHA6IHNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uJywgbmV3IEVycm9yKGBTZXQgcmVtb3RlIGRlc2NyaXB0aW9uIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgbGltaXRCaXRyYXRlKFxuICAgIHN0cmVhbTogSVN0cmVhbSxcbiAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHM6IG51bWJlcixcbiAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kOiBCaXRzUGVyU2Vjb25kLFxuICAgIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlLFxuICAgIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZSxcbiAgKTogUHJvbWlzZTxJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2JpdHJhdGUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kLFxuICAgICAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVNYXBwaW5nLmNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUoYml0cmF0ZVN0YXRlKSxcbiAgICAgIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZU1hcHBpbmcuY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUoYml0cmF0ZU1vZGUpXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IGxpbWl0IGJpdHJhdGUgdGltZWQnLCBuZXcgRXJyb3IoYFNldCBsaW1pdCBiaXRyYXRlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgbGltaXQgYml0cmF0ZSB0aW1lZCcsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBzZXQgbGltaXQgYml0cmF0ZSByZXNwb25zZSBbJXNdIGluIFslc10gbXMnLCBzdGF0dXMsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHtzdGF0dXN9O1xuICB9XG5cbiAgYXN5bmMgYWRkSWNlQ2FuZGlkYXRlcyhzdHJlYW06IElTdHJlYW0sIGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdLCBkaXNjb3ZlcnlDb21wbGV0ZWQ6IGJvb2xlYW4sIG9wdGlvbnM6IHN0cmluZ1tdID0gW10pOiBQcm9taXNlPElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdpY2UnLCAnY2FuZGlkYXRlcyddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSUFkZEljZUNhbmRpZGF0ZXNSZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIGNhbmRpZGF0ZXMsXG4gICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQsXG4gICAgICBvcHRpb25zXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYWRkIGljZSBjYW5kaWRhdGVzJywgbmV3IEVycm9yKGBBZGQgaWNlIGNhbmRpZGF0ZXMgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGFkZCBpY2UgY2FuZGlkYXRlcycsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBhZGQgSUNFIGNhbmRpZGF0ZXMgcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBkZXN0cm95U3RyZWFtKHN0cmVhbTogSVN0cmVhbSwgcmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXN0cm95J10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJRGVzdHJveVN0cmVhbVJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgcmVhc29uLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhLFxuICAgICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBuZXcgRXJyb3IoYERlbGV0ZSBzdHJlYW0gdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGRlbGV0ZSBzdHJlYW0nLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IERlc3Ryb3lTdHJlYW1TdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgZGVzdHJveVN0cmVhbVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3QgZGVzdHJveSBzdHJlYW0gcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgZGVzdHJveVN0cmVhbVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBkZXN0cm95U3RyZWFtT25Vbm1vdW50KHN0cmVhbTogSVN0cmVhbSwgcmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIW5hdmlnYXRvcj8uc2VuZEJlYWNvbikge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuZGVzdHJveVN0cmVhbShzdHJlYW0sIHJlYXNvbik7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXN0cm95J10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJRGVzdHJveVN0cmVhbVJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgcmVhc29uLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIG5hdmlnYXRvci5zZW5kQmVhY29uKHVybCwgZm9ybURhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFVybChwYXRoOiBzdHJpbmdbXSk6IFVSTCB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IHBhdGhBc0FycmF5ID0gdXJpLnBhdGhuYW1lLnNwbGl0KCcvJyk7XG5cbiAgICBwYXRoQXNBcnJheS5sZW5ndGggPSBwYXRoQXNBcnJheS5sZW5ndGggLSAxO1xuXG4gICAgdXJpLnBhdGhuYW1lID0gcGF0aEFzQXJyYXkuY29uY2F0KC4uLnBhdGgpLmpvaW4oJy8nKTtcblxuICAgIHJldHVybiB1cmk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGluZ1VybCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBzZGtWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIHVyaS5zZWFyY2ggPSBgPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhbWyd0eXBlJywgJ2h0dHAnXSwgWyd2ZXJzaW9uJywgc2RrVmVyc2lvbl0sIFsnXycsIGAke0RhdGUubm93KCl9YF1dKS50b1N0cmluZygpfWA7XG5cbiAgICByZXR1cm4gdXJpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1B1Ymxpc2hTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogUHVibGlzaFN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDI6XG4gICAgICAgIHJldHVybiAnZ2VvLXJlc3RyaWN0ZWQnO1xuICAgICAgY2FzZSA0MDM6XG4gICAgICAgIHJldHVybiAnZ2VvLWJsb2NrZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFN1YnNjcmliZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDI6XG4gICAgICAgIHJldHVybiAnZ2VvLXJlc3RyaWN0ZWQnO1xuICAgICAgY2FzZSA0MDM6XG4gICAgICAgIHJldHVybiAnZ2VvLWJsb2NrZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogRGVzdHJveVN0cmVhbVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UodGVuYW5jeTogc3RyaW5nLCByZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElTdWJzY3JpYmVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElTdWJzY3JpYmVSZXNwb25zZTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZTogSVN1YnNjcmliZVJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHN1YnNjcmliZVJlc3BvbnNlLnN0cmVhbSA9IHtcbiAgICAgIHRlbmFuY3ksXG4gICAgICBzdHJlYW1JZDogZGF0YS5zdHJlYW1JZCxcbiAgICAgIHNoYXJlZFNlY3JldDogZGF0YS5zaGFyZWRTZWNyZXRcbiAgICB9O1xuXG4gICAgc3Vic2NyaWJlUmVzcG9uc2UubGFnID0gZGF0YS5sYWc7XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5ydGNDb25maWd1cmF0aW9uID0gdGhpcy5jb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oZGF0YS5ydGNDb25maWd1cmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlKHRlbmFuY3k6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJUHVibGlzaFJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVB1Ymxpc2hSZXNwb25zZTtcbiAgICBjb25zdCBwdWJsaXNoUmVzcG9uc2U6IElQdWJsaXNoUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgcHVibGlzaFJlc3BvbnNlLnN0cmVhbSA9IHtcbiAgICAgIHRlbmFuY3ksXG4gICAgICBzdHJlYW1JZDogZGF0YS5zdHJlYW1JZCxcbiAgICAgIHNoYXJlZFNlY3JldDogZGF0YS5zaGFyZWRTZWNyZXRcbiAgICB9O1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLnJ0Y0NvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHB1Ymxpc2hSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uID0ge2ljZVNlcnZlcnM6IFtdfTtcblxuICAgIGlmIChjb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kgPSBjb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemUgPT09ICdudW1iZXInKSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplID0gY29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzKSB7XG4gICAgICBjb25zdCBpY2VTZXJ2ZXJzOiBSVENJY2VTZXJ2ZXJbXSA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpY2VTZXJ2ZXJzLnB1c2goe1xuICAgICAgICAgIHVybHM6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzLFxuICAgICAgICAgIHVzZXJuYW1lOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXNlcm5hbWUsXG4gICAgICAgICAgY3JlZGVudGlhbDogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLmNyZWRlbnRpYWxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlU2VydmVycyA9IGljZVNlcnZlcnM7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSA9IGNvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5O1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSA9IGNvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeTtcbiAgICB9XG5cbiAgICByZXR1cm4gcnRjQ29uZmlndXJhdGlvbjtcbiAgfVxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICAgIGNvbnN0IHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U6IElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIGlmIChkYXRhICYmIGRhdGEuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiA9IGRhdGEuc2Vzc2lvbkRlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgICBjb25zdCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U6IElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0ID0ge1xuICAgICAgc3RhdHVzOiBkYXRhLnN0YXR1cyxcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5vcHRpb25zKSB7XG4gICAgICAgIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZS5vcHRpb25zID0gZGF0YS5vcHRpb25zO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJRGVzdHJveVN0cmVhbVJlc3BvbnNlO1xuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW06IElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgcmV0dXJuIGRlc3Ryb3lTdHJlYW07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtDaGFubmVsU3RhdGV9IGZyb20gJy4uL2NoYW5uZWxzJztcbmltcG9ydCB7TGl2ZVN0cmVhbWluZ30gZnJvbSAnLi9MaXZlU3RyZWFtaW5nJztcbmltcG9ydCB7TGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2h1bmtlZFN0cmVhbSBpbXBsZW1lbnRzIElTdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignQ2h1bmtlZFN0cmVhbScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21vbml0b3JEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIF9zdHJlYW1TdGF0aXN0aWNzOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcztcbiAgcHJpdmF0ZSBfbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG5cbiAgY29uc3RydWN0b3IoY2hhbm5lbENvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IGNoYW5uZWxDb250ZXh0O1xuICAgIHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUgPSBoYW5kbGVTdHJlYW1GYWlsdXJlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmFkZCh0aGlzKTtcbiAgfVxuXG4gIHN0YXJ0KHVyaTogVVJMLCB0b2tlbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkIHwgSURpc3Bvc2FibGU+IHtcbiAgICByZXR1cm4gRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKVxuICAgICAgLnRoZW4oZW5kUG9pbnQgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSA9IGVuZFBvaW50O1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ29ubmVjdGluZyB0byBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50LnN1YnNjcmliZSh0b2tlbiwgbnVsbCwgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoe3N0YXR1cywgc3RyZWFtLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGxhZ30pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcudmFsdWUgPSBsYWc7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFN1YnNjcmliZSBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5fY2hhbm5lbENvbnRleHQubWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb2ZmZXJTZHAgPSBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcDtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICBvcmlnaW5TdGFydFRpbWU6IERhdGUubm93KCkgLSBsYWcgKyB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5yb3VuZFRyaXBUaW1lIC8gMixcbiAgICAgICAgICBsYWdcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gTGl2ZVN0cmVhbWluZy5zdGFydCh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBvZmZlclNkcCwgb3B0aW9ucylcbiAgICAgICAgICAudGhlbihwbGF5ZXIgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb25pdG9yKHBsYXllcik7XG5cbiAgICAgICAgICAgIHJldHVybiBwbGF5ZXI7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0xpdmVTdHJlYW1pbmcgZmFpbGVkJywgZSk7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG1vbml0b3IocGxheWVyOiBJRGlzcG9zYWJsZSk6IHZvaWQge1xuICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICBjb25zdCB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgbmV3U3RyZWFtU3RhdGlzdGljcyA9IExpdmVTdHJlYW1pbmcuZ2V0U3RhdHMoKTtcblxuICAgICAgaWYgKHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MgJiZcbiAgICAgICAgdGhpcy5fc3RyZWFtU3RhdGlzdGljcy5jdXJyZW50VGltZSA+PSBuZXdTdHJlYW1TdGF0aXN0aWNzLmN1cnJlbnRUaW1lICYmXG4gICAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID49IG5ld1N0cmVhbVN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCsrO1xuXG4gICAgICAgIGlmICh0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID4gNikge1xuICAgICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHBsYXllci5kaXNwb3NlKCk7XG4gICAgICAgICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZWQgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2VkICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlICE9PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zdHJlYW1TdGF0aXN0aWNzID0gbmV3U3RyZWFtU3RhdGlzdGljcztcbiAgICAgIHRoaXMubW9uaXRvcihwbGF5ZXIpO1xuICAgIH0sIDEwMDApO1xuXG4gICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgfSkpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xpdmVTdHJlYW1pbmd9IGZyb20gJy4vTGl2ZVN0cmVhbWluZyc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmdPcHRpb25zLCBMaXZlU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQge0lIbHNQbGF5ZXJUeXBlfSBmcm9tICcuL0lIbHNQbGF5ZXInO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIbHNQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2tpbmQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFuaWZlc3RVUkk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgX3BsYXllcjogSUhsc1BsYXllclR5cGU7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoTGl2ZVN0cmVhbWluZy5obHNQbGF5ZXIpIHtcbiAgICAgIGlmIChMaXZlU3RyZWFtaW5nLmhsc1BsYXllci5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBMaXZlU3RyZWFtaW5nLmhsc1BsYXllcih7XG4gICAgICAgICAgZW5hYmxlV29ya2VyOiB0cnVlLFxuICAgICAgICAgIG1heEJ1ZmZlckxlbmd0aDogMSxcbiAgICAgICAgICBsaXZlQmFja0J1ZmZlckxlbmd0aDogMCxcbiAgICAgICAgICBsaXZlU3luY0R1cmF0aW9uOiA3LFxuICAgICAgICAgIGxpdmVEdXJhdGlvbkluZmluaXR5OiB0cnVlLFxuICAgICAgICAgIGxpdmVNYXhMYXRlbmN5RHVyYXRpb246IEluZmluaXR5LFxuICAgICAgICAgIGhpZ2hCdWZmZXJXYXRjaGRvZ1BlcmlvZDogMVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcGxheWVyLmxvYWRTb3VyY2UodGhpcy5fbWFuaWZlc3RVUkkpO1xuICAgICAgICB0aGlzLl9wbGF5ZXIuYXR0YWNoTWVkaWEodGhpcy5fdmlkZW9FbGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmNhblBsYXlUeXBlKCdhcHBsaWNhdGlvbi92bmQuYXBwbGUubXBlZ3VybCcpKSB7XG4gICAgICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5zcmMgPSB0aGlzLl9tYW5pZmVzdFVSSTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gTGl2ZVN0cmVhbWluZy5obHNQbGF5ZXIgJiYgTGl2ZVN0cmVhbWluZy5obHNQbGF5ZXIuaXNTdXBwb3J0ZWQoKTtcbiAgfVxuXG4gIGdldFN0YXRzKCk6IExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzIHtcbiAgICBpZiAoIXRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgY3VycmVudFRpbWU6IDAuMCxcbiAgICAgICAgbGFnOiAwLjAsXG4gICAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGlzdGljcyA9IHtcbiAgICAgIHdpZHRoOiB0aGlzLl9wbGF5ZXIubWVkaWEub2Zmc2V0V2lkdGgsXG4gICAgICBoZWlnaHQ6IHRoaXMuX3BsYXllci5tZWRpYS5vZmZzZXRIZWlnaHQsXG4gICAgICBjdXJyZW50VGltZTogdGhpcy5fcGxheWVyLm1lZGlhLmN1cnJlbnRUaW1lLFxuICAgICAgbGFnOiAwLjAsXG4gICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGUsXG4gICAgICBkYXRhQnVmZmVyZWQ6IDAuMFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgIHN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID0gdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmVuZCgwKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUgPT09ICdJRExFJykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUgPT09ICdFUlJPUicgfHwgdGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUgPT09ICdFTkRFRCcpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2U7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZS5pbmNsdWRlcygnTE9BRElORycpIHx8IHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlLmluY2x1ZGVzKCdXQUlUSU5HJykpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTG9hZGluZztcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXSB8fCAwO1xuICAgIGNvbnN0IHRydWVDdXJyZW50VGltZSA9IChEYXRlLm5vdygpIC0gdGhpcy5fb3B0aW9ucy5vcmlnaW5TdGFydFRpbWUpIC8gMTAwMDtcblxuICAgIHN0YXRpc3RpY3MubGFnID0gTWF0aC5tYXgoMC4wLCAoY3VycmVudFRpbWUgKyAodGhpcy5fb3B0aW9ucy5sYWcgLyAxMDAwKSkgLSB0cnVlQ3VycmVudFRpbWUpO1xuXG4gICAgcmV0dXJuIHN0YXRpc3RpY3M7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIgJiYgdGhpcy5fcGxheWVyLmRlc3Ryb3kpIHtcbiAgICAgIHRoaXMuX3BsYXllci5kZXN0cm95KCk7XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnNlcnRhYmxlU3RyZWFtcyB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHN0YXRpYyBzZXR1cE1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0odHJhbnNmb3JtOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPGFueSwgYW55Piwgc3RyZWFtOiBNZWRpYVN0cmVhbSkge1xuICAgIGNvbnN0IHZpZGVvVHJhY2sgPSBzdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXTtcblxuICAgIGlmICh2aWRlb1RyYWNrKSB7XG4gICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybX0pO1xuICAgICAgY29uc3QgcHJvY2Vzc29yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3Ioe3RyYWNrOiB2aWRlb1RyYWNrfSk7XG4gICAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvcih7a2luZDogJ3ZpZGVvJ30pO1xuICAgICAgY29uc3Qgc291cmNlID0gcHJvY2Vzc29yLnJlYWRhYmxlO1xuICAgICAgY29uc3Qgc2luayA9IGdlbmVyYXRvci53cml0YWJsZTtcblxuICAgICAgc291cmNlXG4gICAgICAgIC5waXBlVGhyb3VnaCh0cmFuc2Zvcm1lcilcbiAgICAgICAgLnBpcGVUbyhzaW5rKTtcblxuICAgICAgY29uc3QgdHJhbnNmb3JtZWRTdHJlYW0gPSBuZXcgTWVkaWFTdHJlYW0oKTtcblxuICAgICAgdHJhbnNmb3JtZWRTdHJlYW0uYWRkVHJhY2soZ2VuZXJhdG9yKTtcbiAgICAgIHN0cmVhbS5nZXRBdWRpb1RyYWNrcygpLmZvckVhY2goYXVkaW9UcmFjayA9PiB7XG4gICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLmFkZFRyYWNrKGF1ZGlvVHJhY2spO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0cmFuc2Zvcm1lZFN0cmVhbTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnNlcnRhYmxlU3RyZWFtcyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgV2ViUGxheWVyIGZyb20gJy4vV2ViUGxheWVyJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBTaGFrYVBsYXllciBmcm9tICcuL1NoYWthUGxheWVyJztcbmltcG9ydCBIbHNQbGF5ZXIgZnJvbSAnLi9IbHNQbGF5ZXInO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IHtIbHNQbGF5ZXJUeXBlLCBMaXZlU3RyZWFtaW5nT3B0aW9ucywgTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3MsIFNoYWthVHlwZSwgV2ViUGxheWVyVHlwZX0gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBMaXZlU3RyZWFtaW5nIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3BlbmRpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2hsc1BsYXllcjogSGxzUGxheWVyVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3BoZW5peFdlYlBsYXllcjogV2ViUGxheWVyVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NoYWthOiBTaGFrYVR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9vcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBzdGF0aWMgX3BsYXllcjogU2hha2FQbGF5ZXIgfCBXZWJQbGF5ZXIgfCBIbHNQbGF5ZXI7XG5cbiAgc3RhdGljIGdldCBobHNQbGF5ZXIoKTogSGxzUGxheWVyVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc1BsYXllcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGhlbml4V2ViUGxheWVyKCk6IFdlYlBsYXllclR5cGUge1xuICAgIHJldHVybiB0aGlzLl9waGVuaXhXZWJQbGF5ZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNoYWthKCk6IFNoYWthVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHN0YXJ0KHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgc3RyZWFtSWQ6IHN0cmluZywgb2ZmZXJTZHA6IHN0cmluZywgb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnMpOiBQcm9taXNlPElEaXNwb3NhYmxlPiB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBpZiAodGhpcy5faGxzUGxheWVyIHx8IHRoaXMuX3NoYWthIHx8IHRoaXMuX3BoZW5peFdlYlBsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKTtcbiAgICB9XG5cbiAgICBpZiAoIVNESy53ZWJQbGF5ZXJMb2FkZXIgJiYgIVNESy5zaGFrYVBsYXllckxvYWRlciAmJiAhU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHBsYXllciBpcyBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIGlmICghU0RLLndlYlBsYXllckxvYWRlciAmJiAhU0RLLnNoYWthUGxheWVyTG9hZGVyICYmICFTREsuaGxzSnNMb2FkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQtZmVhdHVyZSwgYWRkIHN0cmVhbSBwbGF5ZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAoU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBTREsuaGxzSnNMb2FkZXIocGxheWVyID0+IHtcbiAgICAgICAgICB0aGlzLl9obHNQbGF5ZXIgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKFNESy53ZWJQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIFNESy53ZWJQbGF5ZXJMb2FkZXIocGxheWVyID0+IHtcbiAgICAgICAgICB0aGlzLl9waGVuaXhXZWJQbGF5ZXIgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKFNESy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgU0RLLnNoYWthUGxheWVyTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5fc2hha2EgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3BsYXllci5nZXRTdGF0cygpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGxheShQbGF5ZXI6IHR5cGVvZiBXZWJQbGF5ZXIgfCB0eXBlb2YgU2hha2FQbGF5ZXIgfCB0eXBlb2YgSGxzUGxheWVyLCB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHN0cmVhbUlkOiBzdHJpbmcsIG9mZmVyU2RwOiBzdHJpbmcsIG9wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zKTogSURpc3Bvc2FibGUge1xuICAgIGNvbnN0IGRhc2hNYW5pZmVzdFVybE1hdGNoID0gb2ZmZXJTZHAubWF0Y2goL2E9eC1wbGF5bGlzdDooW15cXG5dKlsuXW1wZFxcPz9bXlxcc10qKS9tKTtcbiAgICBjb25zdCBobHNNYW5pZmVzdFVybE1hdGNoID0gb2ZmZXJTZHAubWF0Y2goL2E9eC1wbGF5bGlzdDooW15cXG5dKlsuXW0zdThcXD8/W15cXHNdKikvbSk7XG4gICAgY29uc3QgbWFuaWZlc3RVcmwgPSBkYXNoTWFuaWZlc3RVcmxNYXRjaCAmJiBkYXNoTWFuaWZlc3RVcmxNYXRjaFsxXSA/IGRhc2hNYW5pZmVzdFVybE1hdGNoWzFdIDogJyc7XG4gICAgY29uc3QgcGxheWxpc3RVcmwgPSBobHNNYW5pZmVzdFVybE1hdGNoICYmIGhsc01hbmlmZXN0VXJsTWF0Y2hbMV0gPyBobHNNYW5pZmVzdFVybE1hdGNoWzFdIDogJyc7XG5cbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzIHx8ICh0aGlzLl9obHNQbGF5ZXIgJiYgdGhpcy5faGxzUGxheWVyLmlzU3VwcG9ydGVkKCkpKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgUGxheWVyKHZpZGVvRWxlbWVudCwgJ2hscycsIHN0cmVhbUlkLCBwbGF5bGlzdFVybCwgb3B0aW9ucyk7XG5cbiAgICAgIHRoaXMuX3BsYXllci5zdGFydCgpO1xuXG4gICAgICByZXR1cm4gdGhpcy5fcGxheWVyO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXllciA9IG5ldyBQbGF5ZXIodmlkZW9FbGVtZW50LCAnZGFzaCcsIHN0cmVhbUlkLCBtYW5pZmVzdFVybCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLl9wbGF5ZXIuc3RhcnQoKTtcblxuICAgIHJldHVybiB0aGlzLl9wbGF5ZXI7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBsb2FkZWQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBzdHJlYW1JZDogc3RyaW5nLCBvZmZlclNkcDogc3RyaW5nKTogSURpc3Bvc2FibGUge1xuICAgIGlmICghdGhpcy5fc2hha2EgJiYgIXRoaXMuX3BoZW5peFdlYlBsYXllciAmJiAhdGhpcy5faGxzUGxheWVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2hsc1BsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShIbHNQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGhlbml4V2ViUGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KFdlYlBsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zaGFrYSkge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShTaGFrYVBsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZW51bSBOZXR3b3JrU3RhdGVzIHtcbiAgTmV0d29ya0VtcHR5LFxuICBOZXR3b3JrSWRsZSxcbiAgTmV0d29ya0xvYWRpbmcsXG4gIE5ldHdvcmtOb1NvdXJjZVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCB7U2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGZyb20gJy4uLy4uL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgUnRjQ29ubmVjdGlvbk1vbml0b3IgZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IFJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIGZyb20gJy4uLy4uL3J0Yy9SdGNDb25maWd1cmF0aW9uTWFuYWdlcic7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBJbnNlcnRhYmxlU3RyZWFtcyBmcm9tICcuL0luc2VydGFibGVTdHJlYW1zJztcblxuY29uc3QgaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwgPSAxMDA7XG5jb25zdCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0ID0gMzAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWxUaW1lU3RyZWFtIGltcGxlbWVudHMgSVN0cmVhbSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdSZWFsVGltZVN0cmVhbScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IGNoYW5uZWxDb250ZXh0O1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dCA9IHBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgfVxuXG4gIHN0YXJ0KHVyaSwgdG9rZW4sIGxpc3Rlbk9uU3RyZWFtU2V0dXAsIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICAgIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSksXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgXSlcbiAgICAgIC50aGVuKChbZW5kUG9pbnQsIHtsb2NhbE9mZmVyLCBwZWVyQ29ubmVjdGlvbn1dKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gZW5kUG9pbnQ7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDb25uZWN0aW5nIHRvIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0xvY2FsIG9mZmVyOlxcbicgKyBsb2NhbE9mZmVyLnNkcCk7XG5cbiAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgbG9jYWxPZmZlciA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQuc3Vic2NyaWJlKHRva2VuLCBsb2NhbE9mZmVyLCB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCh7c3RhdHVzLCBzdHJlYW0sIHJ0Y0NvbmZpZ3VyYXRpb24sIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSwgbGFnfSkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgPSBzdHJlYW07XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxhZy52YWx1ZSA9IGxhZztcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQoKTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuZGVidWcoXG4gICAgICAgICAgJ1slc10gU3Vic2NyaWJlIGNvbXBsZXRlZCBbJXNdIFslal0gWyVqXSBbJWpdIFslal0nLFxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBydGNDb25maWd1cmF0aW9uLFxuICAgICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2VcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMuX2NoYW5uZWxDb250ZXh0Lm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmFwcGx5UnRjQ29uZmlndXJhdGlvbih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUsIHJ0Y0NvbmZpZ3VyYXRpb24pXG4gICAgICAgICAgLnRoZW4ocGVlckNvbm5lY3Rpb24gPT4ge1xuICAgICAgICAgICAgbGV0IHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0O1xuICAgICAgICAgICAgbGV0IGNhbmNlbERpc2NvdmVyeSA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IGRpc2NvdmVyeUNvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlczogUlRDSWNlQ2FuZGlkYXRlW10gPSBbXTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSAhPT0gcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFTREsuc2VuZExvY2FsQ2FuZGlkYXRlcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChlLmNhbmRpZGF0ZSAmJiBlLmNhbmRpZGF0ZS5jYW5kaWRhdGUpIHtcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLnB1c2goZS5jYW5kaWRhdGUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpc2NvdmVyeUNvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoIXN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChjYW5jZWxEaXNjb3ZlcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuYWRkSWNlQ2FuZGlkYXRlcyhzdHJlYW0sIGNhbmRpZGF0ZXMsIGRpc2NvdmVyeUNvbXBsZXRlZClcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHtzdGF0dXMsIG9wdGlvbnN9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gRmFpbGVkIHRvIGFkZCBJQ0UgY2FuZGlkYXRlcyB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHN0YXR1cyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlcygnY2FuY2VsJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbERpc2NvdmVyeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gQWRkZWQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXSBhbmQgb3B0aW9ucyBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHN0YXR1cywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRmFpbGVkIHRvIGFkZCBJQ0UgY2FuZGlkYXRlcycsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSAhPT0gcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIHN0b3Agbm9ybWFsbHkgdGhlIHBlZXIgY29ubmVjdGlvbiBpcyB1bnJlZ2lzdGVyZWQgZmlyc3QuXG4gICAgICAgICAgICAgICAgLy8gVGh1cyBhbnl0aW1lIHdlIHNlZSBhIGNsb3NlZCBwZWVyIGNvbm5lY3Rpb24gdGhhdCBpcyBzdGlsbCB2YWxpZCwgaXQgaXMgYW4gZXJyb3IuXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZSBhZnRlciBwZWVyIGNvbm5lY3Rpb24gc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBzd2l0Y2ggKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NoZWNraW5nJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb21wbGV0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnbmV3JzpcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2Rpc2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgICAgICAgICAgIGlmIChuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIElDRSBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZWQgdG8gWyVzXSwgdHJ5aW5nIHRvIHJlY29ubmVjdCcsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Nsb3NlZCc6XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHJldHJ5aW5nIHRvIGNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICAgIHJldHJ5Q2FsbGJhY2soKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBtZWRpYVN0cmVhbVByb21pc2UgPSBuZXcgUHJvbWlzZTxNZWRpYVN0cmVhbT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50Lm9uVHJhY2tEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignU3RyZWFtIHNldHVwIHRpbWVkIG91dCcpKSwgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCk7XG5cbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbnRyYWNrID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCBzdHJlYW0gPSBlLnN0cmVhbXNbMF07XG5cbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IEluc2VydGFibGVTdHJlYW1zLnNldHVwTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybSh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLnZhbHVlLCBzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgdHJhY2tMaXN0ZW5lciA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG5cbiAgICAgICAgICAgICAgICBpZiAoZS5zdHJlYW1zKSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtc1swXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoZS5zdHJlYW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1N0cmVhbSBzZXR1cCB0aW1lZCBvdXQnKSk7XG4gICAgICAgICAgICAgIH0sIGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IGxvY2FsIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IHJlbW90ZSBTRFAgYW5zd2VyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIoe1xuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKGFuc3dlciA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIGFuc3dlciBbJWpdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGFuc3dlcik7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5zZXRSZW1vdGVEZXNjcmlwdGlvbihzdHJlYW0sIGFuc3dlcik7XG4gICAgICAgICAgICAgICAgfSkudGhlbigoe3N0YXR1cywgc2Vzc2lvbkRlc2NyaXB0aW9ufSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuc3VjY2Vzcyh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIG1lZGlhU3RyZWFtUHJvbWlzZTtcbiAgICAgICAgICAgIH0pLnRoZW4obWVkaWFTdHJlYW0gPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBtZWRpYVN0cmVhbTtcblxuICAgICAgICAgICAgICBjb25zdCBydGNDb25uZWN0aW9uTW9uaXRvciA9IG5ldyBSdGNDb25uZWN0aW9uTW9uaXRvcihwZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW0sIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLnJvdW5kVHJpcFRpbWUgLyA0KTtcblxuICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQocnRjQ29ubmVjdGlvbk1vbml0b3IpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSBydGNDb25uZWN0aW9uTW9uaXRvci5ydGNTdGF0aXN0aWMuc3Vic2NyaWJlKHN0YXRpc3RpY3MgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1N0YXRpc3RpY3MudmFsdWUgPSBzdGF0aXN0aWNzO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiAhdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljID0gc3RhdGlzdGljcy52aWRlbztcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBhdWRpb1RyYWNrRmFpbGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IHZpZGVvVHJhY2tGYWlsZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGlmIChzdGF0aXN0aWNzLmF1ZGlvKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wICE9PSBzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgICBhdWRpb1RyYWNrRmFpbGVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCA9PT0gc3RhdGlzdGljcy5hdWRpby5ieXRlc1JlY2VpdmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdWRpb1RyYWNrRmFpbGVkICYmIG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEF1ZGlvIHRyYWNrIGZhaWxlZCB3aXRoIGxhc3QgYnl0ZXNSZWNlaXZlZCBbJXNdIGlzIGVxdWFsIHRvIHByZXZpb3VzIGJ5dGVzUmVjZWl2ZWQgWyVzXSB3aXRoaW4gWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRHVyYXRpb25zKHN0YXRpc3RpY3MuYXVkaW8udGltZXN0YW1wIC0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wKS50b0lzb1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgdmlkZW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MudmlkZW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodmlkZW9UcmFja0ZhaWxlZCAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBWaWRlbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLnZpZGVvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCh2aWRlb1RyYWNrRmFpbGVkIHx8IGF1ZGlvVHJhY2tGYWlsZWQpICYmIG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgcnRjQ29ubmVjdGlvbk1vbml0b3IuZGlzcG9zZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZSBhZnRlciB0cmFjayBzdG9wcGVkIHdpdGggc3RhdGUgWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKCFTREsuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFwcGx5UnRjQ29uZmlndXJhdGlvbihcbiAgICBvcHRpb25hbFBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24gfCBudWxsLFxuICAgIHJ0Y0NvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIGlmICghb3B0aW9uYWxQZWVyQ29ubmVjdGlvbikge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbiA9IFJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyLnRydW5jYXRlSWNlU2VydmVycyhydGNDb25maWd1cmF0aW9uKTtcblxuICAgICAgcmV0dXJuIFNESy5wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUuY3JlYXRlUGVlckNvbm5lY3Rpb24ocnRjQ29uZmlndXJhdGlvbik7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3UnRjQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIC4uLm9wdGlvbmFsUGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbigpLFxuICAgICAgLi4ucnRjQ29uZmlndXJhdGlvblxuICAgIH07XG5cbiAgICBvcHRpb25hbFBlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24obmV3UnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICByZXR1cm4gb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGlmIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIDwgU0RLLm1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgfHwgIVNESy5hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKys7XG5cbiAgICAgIGNvbnN0IGlzQ2xpZW50T2ZmZXJGbG93ID0gcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb24/LnR5cGUgPT09ICdvZmZlcic7XG5cbiAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5jbGllbnRPZmZlckRpc2FibGVkIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c1NldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbiB8fFxuICAgICAgICAhaXNDbGllbnRPZmZlckZsb3dcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZWNvbm5lY3RpbmcgcGVlciBjb25uZWN0aW9uIGJ5IHJlc3RhcnRpbmcgSUNFJyk7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uID0gcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb247XG4gICAgICBjb25zdCBpZ25vcmVkID0gcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIoe2ljZVJlc3RhcnQ6IHRydWV9KS50aGVuKG9mZmVyID0+IHtcbiAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24ob2ZmZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbicsIGUpO1xuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZhaWxlZCB0byByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGFmdGVyIFslc10gYXR0ZW1wdHMsIHBlcmZvcm1pbmcgZnVsbCByZWNvdmVyeScsIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgcmV0cnlDYWxsYmFjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKTogQ2hhbm5lbFN0YXRlIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmd9IGZyb20gJy4vTGl2ZVN0cmVhbWluZyc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmdPcHRpb25zLCBMaXZlU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQge05ldHdvcmtTdGF0ZXN9IGZyb20gJy4vTmV0d29ya1N0YXRlcyc7XG5cbnR5cGUgU2hha2FPcHRpb25zID0ge1xuICBhYnI6IHtcbiAgICBkZWZhdWx0QmFuZHdpZHRoRXN0aW1hdGU6IG51bWJlcjtcbiAgfTtcbiAgbWFuaWZlc3Q6IHtcbiAgICByZXRyeVBhcmFtZXRlcnM6IHtcbiAgICAgIHRpbWVvdXQ6IG51bWJlcjtcbiAgICB9O1xuICB9O1xuICBzdHJlYW1pbmc6IHtcbiAgICByZWJ1ZmZlcmluZ0dvYWw6IG51bWJlcjtcbiAgICBidWZmZXJpbmdHb2FsOiBudW1iZXI7XG4gICAgYnVmZmVyQmVoaW5kOiBudW1iZXI7XG4gICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICB0aW1lb3V0OiBudW1iZXI7XG4gICAgICBtYXhBdHRlbXB0czogbnVtYmVyO1xuICAgICAgYmFja29mZkZhY3RvcjogbnVtYmVyO1xuICAgIH07XG4gIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElTaGFrYSB7XG4gIGNvbmZpZ3VyZTogKG86IFNoYWthT3B0aW9ucykgPT4gdm9pZDtcbiAgbG9hZDogKHVyaTogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBnZXRTdGF0czogKCkgPT4gTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3M7XG4gIGRlc3Ryb3k6ICgpID0+IHZvaWQ7XG4gIHVubG9hZDogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hha2FQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU2hha2FQbGF5ZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElTaGFrYTtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIGtpbmQ6IHN0cmluZywgc3RyZWFtSWQ6IHN0cmluZywgbWFuaWZlc3RVUkk6IHN0cmluZywgb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnMpIHtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG4gICAgdGhpcy5fa2luZCA9IGtpbmQ7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9tYW5pZmVzdFVSSSA9IGVuY29kZVVSSShtYW5pZmVzdFVSSSkucmVwbGFjZSgvWyNdL2csICclMjMnKTtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHN0YXJ0KCk6IHZvaWQge1xuICAgIGlmIChMaXZlU3RyZWFtaW5nLnNoYWthKSB7XG4gICAgICBjb25zdCBwbGF5ZXJPcHRpb25zOiBTaGFrYU9wdGlvbnMgPSB7XG4gICAgICAgIGFicjoge2RlZmF1bHRCYW5kd2lkdGhFc3RpbWF0ZTogMjAwMDAwMH0sXG4gICAgICAgIG1hbmlmZXN0OiB7cmV0cnlQYXJhbWV0ZXJzOiB7dGltZW91dDogMTAwMDB9fSxcbiAgICAgICAgc3RyZWFtaW5nOiB7XG4gICAgICAgICAgcmVidWZmZXJpbmdHb2FsOiAyLFxuICAgICAgICAgIGJ1ZmZlcmluZ0dvYWw6IDEwLFxuICAgICAgICAgIGJ1ZmZlckJlaGluZDogMzAsXG4gICAgICAgICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICAgICAgICAgIG1heEF0dGVtcHRzOiAxMCxcbiAgICAgICAgICAgIGJhY2tvZmZGYWN0b3I6IDEuMVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IExpdmVTdHJlYW1pbmcuc2hha2EuUGxheWVyKHRoaXMuX3ZpZGVvRWxlbWVudCk7XG4gICAgICB0aGlzLmxvYWRQbGF5ZXIocGxheWVyT3B0aW9ucyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLFxuICAgICAgICBsYWc6IDAsXG4gICAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGlzdGljcyA9IHtcbiAgICAgIC4uLnRoaXMuX3BsYXllci5nZXRTdGF0cygpLFxuICAgICAgY3VycmVudFRpbWU6IDAsXG4gICAgICBsYWc6IDBcbiAgICB9O1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gdGhpcy5fdmlkZW9FbGVtZW50WydjdXJyZW50VGltZSddIHx8IDA7XG4gICAgY29uc3QgdHJ1ZUN1cnJlbnRUaW1lID0gKERhdGUubm93KCkgLSB0aGlzLl9vcHRpb25zLm9yaWdpblN0YXJ0VGltZSkgLyAxMDAwO1xuICAgIGNvbnN0IGxhZyA9IE1hdGgubWF4KDAuMCwgdHJ1ZUN1cnJlbnRUaW1lIC0gY3VycmVudFRpbWUpO1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudCkge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgICAgc3RhdGlzdGljcy5sYWcgPSBsYWc7XG5cbiAgICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRpc3RpY3MuZXN0aW1hdGVkQmFuZHdpZHRoID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtMb2FkaW5nO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy5wbGF5VGltZSA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRpc3RpY3M7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3BsYXllci51bmxvYWQoKTtcbiAgICAgIHRoaXMuX3BsYXllci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFBsYXllcihwbGF5ZXJDb25maWc6IFNoYWthT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BsYXllci5jb25maWd1cmUocGxheWVyQ29uZmlnKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9wbGF5ZXIubG9hZCh0aGlzLl9tYW5pZmVzdFVSSSkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEQVNIIGxpdmUgc3RyZWFtIGhhcyBiZWVuIGxvYWRlZCcsIHRoaXMuX3N0cmVhbUlkKTtcblxuICAgICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5wbGF5KSB7XG4gICAgICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5wbGF5KCk7XG4gICAgICB9XG4gICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRXJyb3Igd2hpbGUgbG9hZGluZyBEQVNIIGxpdmUgc3RyZWFtIFslc10nLCB0aGlzLl9zdHJlYW1JZCwgZS5jb2RlLCBlKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCBDaHVua2VkU3RyZWFtIGZyb20gJy4vQ2h1bmtlZFN0cmVhbSc7XG5pbXBvcnQgUmVhbFRpbWVTdHJlYW0gZnJvbSAnLi9SZWFsVGltZVN0cmVhbSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJlYW1GYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1pbmcnKTtcblxuICBzdGF0aWMgY3JlYXRlKHRva2VuOiBzdHJpbmcsIGNoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pOiBJU3RyZWFtIHtcbiAgICBjb25zdCB0b2tlbkNhcGFiaWxpdGllcyA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLmNhcGFiaWxpdGllcztcblxuICAgIGlmICh0b2tlbkNhcGFiaWxpdGllcy5pbmNsdWRlcygncnRtcCcpKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1NESyBkb2VzIG5vdCBzdXBwb3J0IFJUTVAgcGxheWJhY2suJyk7XG4gICAgICBjaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodG9rZW5DYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3N0cmVhbWluZycpKSB7XG4gICAgICByZXR1cm4gbmV3IENodW5rZWRTdHJlYW0oY2hhbm5lbENvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmUpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVhbFRpbWVTdHJlYW0oY2hhbm5lbENvbnRleHQsIHBlZXJDb25uZWN0aW9uQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmVhbUZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nfSBmcm9tICcuL0xpdmVTdHJlYW1pbmcnO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nT3B0aW9ucywgTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG5jb25zdCBiYW5kd2lkdGhUb1N0YXJ0QXQgPSAzMDAwMDAwOyAvLyBDb3JyZXNwb25kcyB0byA3MjBwIGluIG1vc3Qgc2V0dXBzXG5jb25zdCBtaW5UaW1lQmVmb3JlTmV4dFJlbG9hZCA9IDE1MDAwO1xuXG50eXBlIEV2ZW50TGlzdGVuZXJGb3JXZWJQbGF5ZXIgPSAoZXZ0OiBXZWJQbGF5ZXJFdmVudCkgPT4gdm9pZDtcbnR5cGUgV2ViUGxheWVyRXZlbnQgPSB7XG4gIGNvZGU6IG51bWJlcjtcbiAgc2V2ZXJpdHk6IG51bWJlcjtcbiAgZXJyb3I6IHN0cmluZztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVdlYlBsYXllciB7XG4gIHN0YXJ0OiAodXJsOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGFkZEV2ZW50TGlzdGVuZXIobmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lckZvcldlYlBsYXllcik6IHZvaWQ7XG4gIGRpc3Bvc2UoKTogdm9pZDtcbiAgZXJyb3JzOiB7XG4gICAgc2V2ZXJpdHk6IHtcbiAgICAgIFJFQ09WRVJBQkxFOiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbiAgZ2V0U3RhdHMoKTogTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3M7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdlYlBsYXllciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdXZWJQbGF5ZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElXZWJQbGF5ZXI7XG4gIHByaXZhdGUgX2xhc3RSZWxvYWRUaW1lOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIpIHtcbiAgICAgIGNvbnN0IHBsYXllck9wdGlvbnMgPSB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIGJhbmR3aWR0aFRvU3RhcnRBdFxuICAgICAgfTtcblxuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IExpdmVTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyLldlYlBsYXllcih0aGlzLl9sb2dnZXIsIHRoaXMuX3ZpZGVvRWxlbWVudCwgcGxheWVyT3B0aW9ucyk7XG4gICAgICB0aGlzLl9wbGF5ZXIuc3RhcnQodGhpcy5fbWFuaWZlc3RVUkkpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBlcnJvck9iamVjdCA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNhblJlbG9hZCgpICYmIGVycm9yT2JqZWN0ICYmIChlcnJvck9iamVjdC5jb2RlID09PSAzIHx8IGVycm9yT2JqZWN0LnNldmVyaXR5ID09PSBMaXZlU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5lcnJvcnMuc2V2ZXJpdHkuUkVDT1ZFUkFCTEUpKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1JlbG9hZGluZyB1bmhlYWx0aHkgc3RyZWFtIGFmdGVyIGVycm9yIGV2ZW50IFslal0nLCBlcnJvck9iamVjdCk7XG4gICAgICAgICAgdGhpcy5yZWxvYWRJZkFibGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ2Fubm90IHJlbG9hZCB3aXRoIGVycm9yIFslal0nLCBlcnJvck9iamVjdCk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBMaXZlU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllciAmJiBMaXZlU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5pc1N1cHBvcnRlZDtcbiAgfVxuXG4gIGdldFN0YXRzKCk6IExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzIHtcbiAgICBpZiAoIXRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgY3VycmVudFRpbWU6IDAuMCxcbiAgICAgICAgbGFnOiAwLjAsXG4gICAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2UsXG4gICAgICAgIGRhdGFCdWZmZXJlZDogMC4wXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB0aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHN0YXRpc3RpY3MuY3VycmVudFRpbWUgfHwgdGhpcy5fdmlkZW9FbGVtZW50WydjdXJyZW50VGltZSddO1xuICAgIGNvbnN0IHRydWVDdXJyZW50VGltZSA9IChEYXRlLm5vdygpIC0gdGhpcy5fb3B0aW9ucy5vcmlnaW5TdGFydFRpbWUpIC8gMTAwMDtcblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgc3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPSB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQuZW5kKDApO1xuICAgIH1cblxuICAgIGlmIChzdGF0aXN0aWNzLmlzTmF0aXZlICYmIHN0YXRpc3RpY3MuZGVsaXZlcnlUeXBlID09PSAnSGxzJykge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIC0gc3RhdGlzdGljcy5sYWc7XG4gICAgfVxuXG4gICAgaWYgKCFzdGF0aXN0aWNzLmN1cnJlbnRUaW1lKSB7XG4gICAgICBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgfVxuXG4gICAgaWYgKCFzdGF0aXN0aWNzLmlzTmF0aXZlKSB7XG4gICAgICBzdGF0aXN0aWNzLmxhZyA9IE1hdGgubWF4KDAuMCwgdHJ1ZUN1cnJlbnRUaW1lIC0gY3VycmVudFRpbWUpO1xuICAgIH1cblxuICAgIGlmIChzdGF0aXN0aWNzLmVzdGltYXRlZEJhbmR3aWR0aCA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTG9hZGluZztcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MucGxheVRpbWUgPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGU7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnZpZGVvKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0VtcHR5O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGlzcG9zZSgpO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGNhblJlbG9hZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBoYXNFbGFwc2VkTWluVGltZVNpbmNlTGFzdFJlbG9hZCA9ICF0aGlzLl9sYXN0UmVsb2FkVGltZSB8fCBEYXRlLm5vdygpIC0gdGhpcy5fbGFzdFJlbG9hZFRpbWUgPiBtaW5UaW1lQmVmb3JlTmV4dFJlbG9hZDtcblxuICAgIHJldHVybiB0aGlzLl92aWRlb0VsZW1lbnQgJiYgdGhpcy5fcGxheWVyICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGggIT09IDAgJiYgaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQ7XG4gIH1cblxuICBwcml2YXRlIHJlbG9hZElmQWJsZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FuUmVsb2FkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBSZWxvYWRpbmcgdW5oZWFsdGh5IHN0cmVhbSB0aGF0IHdhcyBhY3RpdmUgZm9yIGF0IGxlYXN0IFslc10gc2Vjb25kcycsIHRoaXMuX3N0cmVhbUlkLCBtaW5UaW1lQmVmb3JlTmV4dFJlbG9hZCAvIDEwMDApO1xuXG4gICAgdGhpcy5fbGFzdFJlbG9hZFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5yZWxvYWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVsb2FkKCk6IHZvaWQge1xuICAgIHRoaXMuX3BsYXllci5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5kZWNsYXJlIGNvbnN0IF9fU0RLVkVSU0lPTl9fOiBzdHJpbmc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlcnNpb25NYW5hZ2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2RlZmF1bHRWZXJzaW9uID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gIHN0YXRpYyBnZXQgc2RrVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gX19TREtWRVJTSU9OX187XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWZXJzaW9uO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeVNlcnZpY2UgZnJvbSAnLi9UZWxlbWV0cnlTZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4vVGVsZW1ldHJ5Q29uZmlndXJhdGlvbic7XG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi4vbG9nZ2VyL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUFwcGVuZGVyIGltcGxlbWVudHMgSUFwcGVuZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5U2VydmljZTogVGVsZW1ldHJ5U2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVuYW5jeTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWw7XG5cbiAgY29uc3RydWN0b3IodGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3k7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQ7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQ7XG4gICAgdGhpcy5fdGVsZW1ldHJ5U2VydmljZSA9IG5ldyBUZWxlbWV0cnlTZXJ2aWNlKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgbG9nKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmIChsb2dMZXZlbCA8IHRoaXMuX3RocmVzaG9sZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UucHVzaChsb2dMZXZlbCwgbWVzc2FnZSwgY2F0ZWdvcnksIGRhdGUpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiB7XG4gIHByaXZhdGUgX3VybCA9ICdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeS9sb2dzJztcbiAgcHJpdmF0ZSBfdGVuYW5jeTogc3RyaW5nO1xuICBwcml2YXRlIF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfdGhyZXNob2xkID0gTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0ZWxlbWV0cnlVcmwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgPSB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgKyAnL2xvZ3MnO1xuXG4gICAgdGhpcy5fdXJsID0gdGVsZW1ldHJ5VXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXQgZW52aXJvbm1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZW52aXJvbm1lbnQ7XG4gIH1cblxuICBzZXQgZW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2Vudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc2V0IHRlbmFuY3kodGVuYW5jeTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbmFuY3k7XG4gIH1cblxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25JZDtcbiAgfVxuXG4gIHNldCBzZXNzaW9uSWQoc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuXG5jb25zdCByZXF1ZXN0U2l6ZUxpbWl0ID0gODE5MjtcblxuaW50ZXJmYWNlIElMb2dJdGVtIHtcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbiAgbGV2ZWw6IHN0cmluZztcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICBmdWxsUXVhbGlmaWVkTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICBwcml2YXRlIF9sb2dzOiBBcnJheTxJTG9nSXRlbT4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF9kb21haW4gPSBsb2NhdGlvbi5ob3N0bmFtZTtcblxuICBjb25zdHJ1Y3Rvcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwdXNoKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgdGltZXN0YW1wOiBEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgbG9nUmVjb3JkID0ge1xuICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXAudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSxcbiAgICAgIGxldmVsOiBMb2dnaW5nTGV2ZWxbbG9nTGV2ZWxdLFxuICAgICAgY2F0ZWdvcnksXG4gICAgICBtZXNzYWdlLFxuICAgICAgc2Vzc2lvbklkOiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHZlcnNpb246IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb24sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW5cbiAgICB9O1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICB0aGlzLl9sb2dzLnB1c2gobG9nUmVjb3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbG9ncy51bnNoaWZ0KGxvZ1JlY29yZCk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZExvZ3MobG9nTWVzc2FnZXM6IEFycmF5PElMb2dJdGVtPik6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbG9nTWVzc2FnZXN9KSk7XG5cbiAgICByZXR1cm4gYXdhaXQgZmV0Y2godGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZExvZ3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbG9ncy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbnVtYmVyT2ZMb2dzVG9TZW5kID0gMDtcbiAgICBsZXQgc2l6ZU9mTG9nc1RvU2VuZCA9IDA7XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgZ2V0TG9nU2l6ZSA9IChsb2c6IElMb2dJdGVtKTogbnVtYmVyID0+IE9iamVjdC52YWx1ZXMobG9nKVxuICAgICAgLnJlZHVjZSgoc3VtLCBpdGVtKSA9PiBzdW0gKyAoaXRlbSA/IGl0ZW0ubGVuZ3RoIDogMCksIDApO1xuXG4gICAgd2hpbGUgKHRoaXMuX2xvZ3MubGVuZ3RoID4gbnVtYmVyT2ZMb2dzVG9TZW5kICYmIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSArIHNpemVPZkxvZ3NUb1NlbmQgPCByZXF1ZXN0U2l6ZUxpbWl0KSB7XG4gICAgICBzaXplT2ZMb2dzVG9TZW5kICs9IGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCsrO1xuICAgIH1cblxuICAgIGlmICghbnVtYmVyT2ZMb2dzVG9TZW5kKSB7XG4gICAgICB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZSA9IHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXS5tZXNzYWdlLnN1YnN0cmluZygwLFxuICAgICAgICBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyAocmVxdWVzdFNpemVMaW1pdCAtIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSkpO1xuICAgICAgbnVtYmVyT2ZMb2dzVG9TZW5kID0gMTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2dNZXNzYWdlcyA9IHRoaXMuX2xvZ3Muc2xpY2UoMCwgbnVtYmVyT2ZMb2dzVG9TZW5kKTtcblxuICAgIHRoaXMuX2xvZ3MgPSB0aGlzLl9sb2dzLnNsaWNlKG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kTG9ncyhsb2dNZXNzYWdlcykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER1cmF0aW9ucyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2R1cmF0aW9uOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoZHVyYXRpb24gPSAwKSB7XG4gICAgdGhpcy5fZHVyYXRpb24gPSBkdXJhdGlvbjtcbiAgfVxuXG4gIHRvSXNvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX2R1cmF0aW9uID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1AwUyc7XG4gICAgfVxuXG4gICAgY29uc3QgaXNOZWdhdGl2ZSA9IHRoaXMuX2R1cmF0aW9uIDwgMDtcbiAgICBjb25zdCBkdXJhdGlvbiA9IGlzTmVnYXRpdmUgPyBNYXRoLmFicyh0aGlzLl9kdXJhdGlvbikgOiB0aGlzLl9kdXJhdGlvbjtcbiAgICBsZXQgb2Zmc2V0ID0gTWF0aC5mbG9vcihkdXJhdGlvbik7XG4gICAgY29uc3QgbWlsbGlzZWNvbmRzID0gb2Zmc2V0ICUgMTAwMDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gMTAwMCk7XG5cbiAgICBjb25zdCBzZWNvbmRzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IG1pbnV0ZXMgPSBvZmZzZXQgJSA2MDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gNjApO1xuXG4gICAgY29uc3QgaG91cnMgPSBvZmZzZXQgJSAyNDtcbiAgICBjb25zdCBwYXJ0cyA9IFsnUFQnXTtcblxuICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCctJyk7XG4gICAgfVxuXG4gICAgaWYgKGhvdXJzKSB7XG4gICAgICBwYXJ0cy5wdXNoKGhvdXJzICsgJ0gnKTtcbiAgICB9XG5cbiAgICBpZiAobWludXRlcykge1xuICAgICAgcGFydHMucHVzaChtaW51dGVzICsgJ00nKTtcbiAgICB9XG5cbiAgICBpZiAoc2Vjb25kcyB8fCBtaWxsaXNlY29uZHMpIHtcbiAgICAgIHBhcnRzLnB1c2goU3RyaW5nKHNlY29uZHMpKTtcblxuICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICBwYXJ0cy5wdXNoKCcuJyArIHRoaXMucGFkU3RhcnQobWlsbGlzZWNvbmRzLnRvU3RyaW5nKCksIDMsICcwJykpO1xuICAgICAgfVxuXG4gICAgICBwYXJ0cy5wdXNoKCdTJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJycpO1xuICB9XG5cbiAgcGFkU3RhcnQoaXRlbTogc3RyaW5nLCB0YXJnZXRMZW5ndGg6IG51bWJlciwgcGFkU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCA+PiAwO1xuICAgIHBhZFN0cmluZyA9IFN0cmluZygodHlwZW9mIHBhZFN0cmluZyAhPT0gJ3VuZGVmaW5lZCcgPyBwYWRTdHJpbmcgOiAnICcpKTtcblxuICAgIGlmIChpdGVtLmxlbmd0aCA+IHRhcmdldExlbmd0aCkge1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoIC0gaXRlbS5sZW5ndGg7XG5cbiAgICBpZiAodGFyZ2V0TGVuZ3RoID4gcGFkU3RyaW5nLmxlbmd0aCkge1xuICAgICAgcGFkU3RyaW5nICs9IHBhZFN0cmluZy5yZXBlYXQodGFyZ2V0TGVuZ3RoIC8gcGFkU3RyaW5nLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZFN0cmluZy5zbGljZSgwLCB0YXJnZXRMZW5ndGgpICsgaXRlbTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5jb25zdCBkZWZhdWx0QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IDIwMDA7XG5jb25zdCBkZWZhdWx0TWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IDE7XG5jb25zdCBkZWZhdWx0TWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IDMwMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhwb25lbnRpYWxCYWNrb2ZmIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXIgPSBkZWZhdWx0QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCxcbiAgICBtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXIgPSBkZWZhdWx0TWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCxcbiAgICBtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXIgPSBkZWZhdWx0TWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZFxuICApIHtcbiAgICB0aGlzLl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDtcbiAgICB0aGlzLl9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDtcbiAgICB0aGlzLl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDtcbiAgfVxuXG4gIGdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQoZmFpbHVyZUNvdW50OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcyA9IHRoaXMuX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgLyAxMDAwO1xuICAgIGNvbnN0IHJhbmRvbWl6YXRpb24gPSAwLjUgKyAoMC41ICogTWF0aC5yYW5kb20oKSk7IC8vIFswLjUsIDEpXG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmID0gTWF0aC5wb3coYmFja29mZkludGVydmFsSW5TZWNvbmRzLCBmYWlsdXJlQ291bnQgLSAyKTsgLy8gIFsxLzQgMS8yIDEgMiA0IDggLi4uLl1cbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiA9IE1hdGguZmxvb3IoZXhwb25lbnRpYWxCYWNrb2ZmKSAqIHJhbmRvbWl6YXRpb247XG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kID0gTWF0aC5jZWlsKE1hdGgubWF4KGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uICogMTAwMCwgdGhpcy5fbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCkpO1xuXG4gICAgcmV0dXJuIE1hdGgubWluKGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCwgdGhpcy5fbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJQ29tcGFyYWJsZSBmcm9tICcuLi9sYW5nL0lDb21wYXJhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGltZW5zaW9uIGltcGxlbWVudHMgSUNvbXBhcmFibGU8RGltZW5zaW9uPiB7XG4gIHJlYWRvbmx5IHdpZHRoOiBudW1iZXI7XG4gIHJlYWRvbmx5IGhlaWdodDogbnVtYmVyO1xuXG4gIHN0YXRpYyBnZXQgZW1wdHkoKTogRGltZW5zaW9uIHtcbiAgICByZXR1cm4gbmV3IERpbWVuc2lvbigwLCAwKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG5cbiAgZXF1YWxzKG90aGVyOiBEaW1lbnNpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gb3RoZXIgJiYgdGhpcy53aWR0aCA9PT0gb3RoZXIud2lkdGggJiYgdGhpcy5oZWlnaHQgPT09IG90aGVyLmhlaWdodDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMud2lkdGh9eCR7dGhpcy5oZWlnaHR9YDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtTdHJlYW1TZXR1cExpc3RlbmVyfSBmcm9tICcuLi9kb20vU3RyZWFtU2V0dXBMaXN0ZW5lcic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IE5ldHdvcmtNb25pdG9yIGZyb20gJy4uL2RvbS9OZXR3b3JrTW9uaXRvcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcblxuaW50ZXJmYWNlIElOZXR3b3JrU3RhdGlzdGljcyB7XG4gIHJ0dD86IG51bWJlcjtcbiAgZWZmZWN0aXZlVHlwZT86IHN0cmluZztcbiAgZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlc3Npb25UZWxlbWV0cnkgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTZXNzaW9uVGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBTREsuYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIHByaXZhdGUgcmVhZG9ubHkgX25ldHdvcmtNb25pdG9yOiBOZXR3b3JrTW9uaXRvciA9IG5ldyBOZXR3b3JrTW9uaXRvcigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgX2xhc3ROZXR3b3JrU3RhdGlzdGljczogSU5ldHdvcmtTdGF0aXN0aWNzID0ge307XG5cbiAgY29uc3RydWN0b3IocGFnZUxvYWRUaW1lOiBudW1iZXIsIG1ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZSkge1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IpO1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gbWV0cmljc1NlcnZpY2U7XG5cbiAgICBpZiAoIXRoaXMuX25ldHdvcmtNb25pdG9yLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmlzRm9yZWdyb3VuZC5zdWJzY3JpYmUoaXNGb3JlZ3JvdW5kID0+IHtcbiAgICAgIHRoaXMucmVjb3JkRm9yZWdyb3VuZENoYW5nZShpc0ZvcmVncm91bmQpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IucnR0LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtSVFRVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IuZWZmZWN0aXZlVHlwZS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgfVxuXG4gIGxpc3Rlbk9uU3RyZWFtU2V0dXAoKTogU3RyZWFtU2V0dXBMaXN0ZW5lciB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW1TZXR1cExpc3RlbmVyKHRoaXMuX3BhZ2VMb2FkVGltZSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkRm9yZWdyb3VuZENoYW5nZShpc0ZvcmVncm91bmQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHRpbWVTaW5jZUxhc3RDaGFuZ2UgPSB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5nZXRUaW1lU2luY2VMYXN0Q2hhbmdlKCk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IGlzRm9yZWdyb3VuZCA/IE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uRm9yZWdyb3VuZCA6IE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uQmFja2dyb3VuZCxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lU2luY2VMYXN0Q2hhbmdlfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnQXBwbGljYXRpb24gaGFzIGdvbmUgaW50byB0aGUgWyVzXSBhZnRlciBbJXNdIG1zJyxcbiAgICAgIGlzRm9yZWdyb3VuZCA/ICdmb3JlZ3JvdW5kJyA6ICdiYWNrZ3JvdW5kJyxcbiAgICAgIG5ldyBEdXJhdGlvbnModGltZVNpbmNlTGFzdENoYW5nZSkudG9Jc29TdHJpbmcoKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrUlRUVXBkYXRlKG5ld1JUVDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGRSdHQgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MucnR0O1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLnJ0dCA9IG5ld1JUVDtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiBuZXdSVFR9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkUnR0ID8ge3VpbnQ2NDogb2xkUnR0fSA6IHVuZGVmaW5lZCxcbiAgICAgIHJlc291cmNlOiAnbmF2aWdhdG9yJ1xuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIFJUVCBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3UlRULFxuICAgICAgb2xkUnR0XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUobmV3TmV0d29ya1R5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkTmV0d29ya1R5cGUgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZWZmZWN0aXZlVHlwZTtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5lZmZlY3RpdmVUeXBlID0gbmV3TmV0d29ya1R5cGU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLk5ldHdvcmtUeXBlLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtzdHJpbmc6IG5ld05ldHdvcmtUeXBlfSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZE5ldHdvcmtUeXBlID8ge3N0cmluZzogb2xkTmV0d29ya1R5cGV9IDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgZWZmZWN0aXZlIHR5cGUgaGFzIGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdOZXR3b3JrVHlwZSxcbiAgICAgIG9sZE5ldHdvcmtUeXBlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlKG5ld0NhcGFjaXR5OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZENhcGFjaXR5ID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5O1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtmbG9hdDogbmV3Q2FwYWNpdHl9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkQ2FwYWNpdHkgPyB7ZmxvYXQ6IG9sZENhcGFjaXR5fSA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIGRvd25saW5rIHRocm91Z2hwdXQgY2FwYWNpdHkgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld0NhcGFjaXR5LFxuICAgICAgb2xkQ2FwYWNpdHlcbiAgICApO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZpZGVvVGVsZW1ldHJ5IGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtVGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgX2xpc3RlblRvRmlyc3RUaW1lOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF9saXN0ZW5Gb3JTdGFsbDogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfbGlzdGVuRm9yQ29udGludWF0aW9uOiAoZXZlbnQpID0+IHZvaWQ7XG4gIHByaXZhdGUgX3RpbWVUb0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdmlkZW9TdGFsbGVkOiBudW1iZXI7XG4gIHByaXZhdGUgX2xhc3RQcm9ncmVzczogbnVtYmVyO1xuICBwcml2YXRlIF92aWRlb1Jlc29sdXRpb246IHN0cmluZztcbiAgcHJpdmF0ZSBfY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXI6IERpc3Bvc2FibGU7XG4gIHByaXZhdGUgX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lcjogRGlzcG9zYWJsZTtcblxuICBjb25zdHJ1Y3RvcihzdHJlYW1JZDogc3RyaW5nLCBwYWdlTG9hZFRpbWU6IG51bWJlciwgY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyLCBtZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2UpIHtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgICB0aGlzLl9jaGFubmVsU3RhcnRUaW1lID0gY2hhbm5lbFN0YXJ0VGltZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gbWV0cmljc1NlcnZpY2U7XG4gIH1cblxuICBzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5fc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lID0gKCk6IHZvaWQgPT4gdGhpcy5jYWxsVGltZVRvRmlyc3RGcmFtZSgpO1xuXG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcblxuICAgIHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyID0gbmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgIH0pO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lcik7XG4gIH1cblxuICBzZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmcodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0ZW5Gb3JTdGFsbCA9ICgpOiB2b2lkID0+IHRoaXMub25TdGFsbCgpO1xuXG4gICAgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uID0gKGV2ZW50KTogdm9pZCA9PiB0aGlzLm9uQ29udGludWF0aW9uKGV2ZW50LCB2aWRlbyk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3N1c3BlbmQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuXG4gICAgdGhpcy5fY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyID0gbmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3VzcGVuZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBkdXJhdGlvblNpbmNlUGFnZUxvYWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxsVGltZVRvRmlyc3RGcmFtZSgpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5wdXNoVGltZVRvRmlyc3RGcmFtZShub3cpO1xuICAgIHRoaXMucHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93KTtcblxuICAgIHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaFRpbWVUb0ZpcnN0RnJhbWUobm93KTogdm9pZCB7XG4gICAgdGhpcy5fdGltZVRvRmlyc3RGcmFtZSA9IG5vdyAtIHRoaXMuX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuVGltZVRvRmlyc3RGcmFtZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aGlzLl90aW1lVG9GaXJzdEZyYW1lfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIEZpcnN0IGZyYW1lIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGhpcy5fdGltZVRvRmlyc3RGcmFtZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKG5vdyk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUgPSBub3cgLSB0aGlzLl9jaGFubmVsU3RhcnRUaW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5DaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRoaXMuX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWV9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gQ2hhbm5lbCBjcmVhdGlvbiB0byBmaXJzdCBmcmFtZSBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRoaXMuX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvblN0YWxsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl92aWRlb1N0YWxsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlN0YWxsZWQsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl92aWRlb1N0YWxsZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFtidWZmZXJpbmddIFN0cmVhbSBoYXMgc3RhbGxlZCcsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Db250aW51YXRpb24oZXZlbnQsIHZpZGVvKTogdm9pZCB7XG4gICAgaWYgKCF2aWRlby5idWZmZXJlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlckxlbmd0aCA9IHZpZGVvLmJ1ZmZlcmVkLmxlbmd0aDtcbiAgICBjb25zdCBoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCA9IGV2ZW50LnR5cGUgPT09ICdwbGF5aW5nJ1xuICAgIHx8IGJ1ZmZlckxlbmd0aCA+IDAgPyAoZXZlbnQudHlwZSA9PT0gJ3Byb2dyZXNzJ1xuICAgICAgfHwgZXZlbnQudHlwZSA9PT0gJ3RpbWV1cGRhdGUnKVxuICAgICAgJiYgdmlkZW8uYnVmZmVyZWQuZW5kKGJ1ZmZlckxlbmd0aCAtIDEpID09PSB0aGlzLl9sYXN0UHJvZ3Jlc3MgOiB0cnVlO1xuXG4gICAgaWYgKCF0aGlzLl92aWRlb1N0YWxsZWQgfHwgaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3Byb2dyZXNzJykge1xuICAgICAgdGhpcy5fbGFzdFByb2dyZXNzID0gdmlkZW8uYnVmZmVyZWQuZW5kKGJ1ZmZlckxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVTaW5jZVN0b3AgPSBEYXRlLm5vdygpIC0gdGhpcy5fdmlkZW9TdGFsbGVkO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5CdWZmZXJpbmcsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWVTaW5jZVN0b3B9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gW2J1ZmZlcmluZ10gU3RyZWFtIGhhcyByZWNvdmVyZWQgZnJvbSBzdGFsbCBhZnRlciBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRpbWVTaW5jZVN0b3ApLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICAgIHRoaXMuX3ZpZGVvU3RhbGxlZCA9IG51bGw7XG4gIH1cblxuICBvblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMobmV3UmVzb2x1dGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5SZXNvbHV0aW9uQ2hhbmdlZCxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3N0cmluZzogbmV3UmVzb2x1dGlvbn0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiB0aGlzLl92aWRlb1Jlc29sdXRpb24gPyB7c3RyaW5nOiB0aGlzLl92aWRlb1Jlc29sdXRpb259IDogdW5kZWZpbmVkLFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl92aWRlb1Jlc29sdXRpb24gPSBuZXdSZXNvbHV0aW9uO1xuICB9XG59IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0aWYoX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSkge1xuXHRcdHJldHVybiBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiBtb2R1bGVbJ2RlZmF1bHQnXSA6XG5cdFx0KCkgPT4gbW9kdWxlO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIvLyBtb2R1bGUgZXhwb3J0cyBtdXN0IGJlIHJldHVybmVkIGZyb20gcnVudGltZSBzbyBlbnRyeSBpbmxpbmluZyBpcyBkaXNhYmxlZFxuLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG5yZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL3Nkay9jaGFubmVscy9pbmRleC50c1wiKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=
9972
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL05ldHdvcmtNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vU3RyZWFtU2V0dXBMaXN0ZW5lci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2VkZ2VBdXRoL0VkZ2VUb2tlbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvRGlzcG9zYWJsZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9EaXNwb3NhYmxlTGlzdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9TdHJpbmdzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL2Fzc2VydFVucmVhY2hhYmxlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvQXBwZW5kZXJzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvQ29uc29sZUFwcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dpbmdUaHJlc2hvbGQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljVHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzU2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzVHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Byb21pc2UvUHJvbWlzZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcHJvbWlzZS9Qcm9taXNlSGFuZGxlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1J0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9TZHBQYXJzZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9WYW5pbGxhUGVlckNvbm5lY3Rpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9WYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9yeC9SZWFkT25seVN1YmplY3QudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J4L1N1YmplY3QudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9FbnZpcm9ubWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL1NESy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL1RlbGVtZXRyeVVybC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWwudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVsU3RhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVscy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL2luZGV4LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9DaGFubmVsQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9TdGF0ZUNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1Rva2VuQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlZmF1bHRzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVNb2RlTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9CaXRyYXRlU3RhdGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9EaXNjb3ZlcnlTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9FbmRQb2ludC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9DaHVua2VkU3RyZWFtLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0hsc1BsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9JbnNlcnRhYmxlU3RyZWFtcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9MaXZlU3RyZWFtaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL05ldHdvcmtTdGF0ZXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvUmVhbFRpbWVTdHJlYW0udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvU2hha2FQbGF5ZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvU3RyZWFtRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9XZWJQbGF5ZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90aW1lL0R1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90aW1lL0V4cG9uZW50aWFsQmFja29mZi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vRGltZW5zaW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9TZXNzaW9uVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9WaWRlb1RlbGVtZXRyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svc3RhcnR1cCJdLCJuYW1lcyI6WyJkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCIsIkFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnR5IiwiRGlzcG9zYWJsZUxpc3QiLCJEYXRlIiwibm93IiwiX2lzRm9yZWdyb3VuZCIsIlN1YmplY3QiLCJfcmVhZE9ubHlJc0ZvcmVncm91bmQiLCJSZWFkT25seVN1YmplY3QiLCJkZXRlY3RUYWJGb2N1c0NoYW5nZSIsIl9jcmVhdGVDbGFzcyIsImtleSIsImdldCIsInZhbHVlIiwiZ2V0VGltZVNpbmNlTGFzdENoYW5nZSIsIl90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2UiLCJkaXNwb3NlIiwiX2Rpc3Bvc2FibGVzIiwiX3RoaXMiLCJoaWRkZW4iLCJ2aXNpYmlsaXR5Q2hhbmdlIiwiZG9jdW1lbnQiLCJfdHlwZW9mIiwibXNIaWRkZW4iLCJ3ZWJraXRIaWRkZW4iLCJoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlIiwiaXNGb3JlZ3JvdW5kIiwic2V0Rm9jdXNTdGF0ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJhZGQiLCJEaXNwb3NhYmxlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImxpc3RlbkZvckRvY3VtZW50Rm9jdXMiLCJjYWxsIiwiX3RoaXMyIiwiX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCIsIndpbmRvdyIsInNldEludGVydmFsIiwiaGFzRm9jdXMiLCJjbGVhckludGVydmFsIiwiQnJvd3NlckRldGVjdG9yIiwiX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIl9icm93c2VyTmFtZSIsIl9icm93c2VyTWFqb3JWZXJzaW9uIiwiX2lzQ2hyb21lNjkiLCJfaXNDaHJvbWU3MCIsIl9pc0Nocm9tZTcxIiwiX2lzQ2hyb21lNzIiLCJfaXNDaHJvbWU3NCIsIl9pc0Nocm9tZTc1IiwiX2lzQ2hyb21lNzYiLCJfaXNDaHJvbWU3NyIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwibWF0Y2giLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXgiLCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFIiwicGFyc2VCcm93c2VyTmFtZSIsImJyb3dzZXJOYW1lTGlzdCIsInNwbGl0IiwicGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uIiwiYnJvd3NlclZlcnNpb25MaXN0IiwiZnVsbFZlcnNpb24iLCJOdW1iZXIiLCJtc2llIiwiaW5kZXhPZiIsImNvbmNhdCIsInBhcnNlSW50Iiwic3Vic3RyaW5nIiwidHJpZGVudCIsInZlcnNpb24iLCJpbmNsdWRlcyIsIkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIiLCJnZXRTdHJpbmdWYWx1ZSIsIm5hbWUiLCJyZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlIiwicmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZSIsImRlZmF1bHRTdHJpbmdWYWx1ZSIsImdldEJvb2xlYW5WYWx1ZSIsInZhbHVlRnJvbVVyaSIsImRlZmF1bHRCb29sZWFuVmFsdWUiLCJUZWxlbWV0cnlMZXZlbE1hcHBpbmciLCJUZWxlbWV0cnlEZWZhdWx0IiwiTG9nZ2luZ0xldmVsTWFwcGluZyIsIkxvZ2dlckRlZmF1bHRzIiwibWV0YVZhbHVlIiwicXVlcnlTZWxlY3RvciIsImdldEF0dHJpYnV0ZSIsInZhbHVlVVJJUGFyYW1ldGVyTmFtZSIsIlVSTFNlYXJjaFBhcmFtcyIsImxvY2F0aW9uIiwic2VhcmNoIiwidW5kZWZpbmVkIiwiTmV0d29ya01vbml0b3IiLCJpc1N1cHBvcnRlZCIsInNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycyIsInVwZGF0ZVN0YXRpc3RpY3MiLCJfaXNTdXBwb3J0ZWQiLCJfcnR0IiwiX2VmZmVjdGl2ZVR5cGUiLCJfZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJnZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsImRvd25saW5rIiwiZG93bmxpbmtNYXgiLCJnZXRFZmZlY3RpdmVUeXBlIiwiZWZmZWN0aXZlVHlwZSIsInR5cGUiLCJnZXRSb3VuZFRyaXBUaW1lIiwicnR0IiwibGlzdGVuZXIiLCJTdHJlYW1TZXR1cExpc3RlbmVyIiwicGFnZUxvYWRUaW1lIiwiTG9nZ2VyRmFjdG9yeSIsIlNESyIsIl9zdGFydFRpbWUiLCJfcGFnZUxvYWRUaW1lIiwic3VjY2VzcyIsInN0cmVhbUlkIiwicmVjb3JkU3RyZWFtTWV0cmljIiwiTWV0cmljc1R5cGUiLCJmYWlsIiwibWV0cmljVHlwZSIsIl9tZXRyaWNTdWJtaXR0ZWQiLCJzZXR1cFRpbWUiLCJtZXRyaWNOYW1lIiwiTWV0cmljVHlwZSIsImdldE5hbWUiLCJtZXRyaWNzU2VydmljZSIsInB1c2giLCJydW50aW1lIiwidWludDY0IiwiX2xvZ2dlciIsImluZm8iLCJEdXJhdGlvbnMiLCJ0b0lzb1N0cmluZyIsImVkZ2VBdXRoVG9rZW5QcmVmaXgiLCJFZGdlQXV0aFBhcnNlciIsInBhcnNlVG9rZW4iLCJ0b2tlbiIsImlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkIiwiZXJyb3IiLCJFZGdlVG9rZW4iLCJkZWNvZGVkVG9rZW4iLCJhdG9iIiwic3Vic3RyIiwibGVuZ3RoIiwiZWRnZVRva2VuIiwiSlNPTiIsInBhcnNlIiwiZSIsInN0YXJ0c1dpdGgiLCJfZWRnZVRva2VuJHRva2VuIiwiX2VkZ2VUb2tlbiR0b2tlbjIiLCJfYXBwbGljYXRpb25JZCIsImFwcGxpY2F0aW9uSWQiLCJfdG9rZW4iLCJ1cmkiLCJVUkwiLCJjYXBhYmlsaXRpZXMiLCJCdWlsZEZlYXR1cmVzIiwiX3NlbmRMb2NhbENhbmRpZGF0ZXMiLCJfc2VuZExvZ3MiLCJfc2VuZE1ldHJpY3MiLCJfbG9nVG9Db25zb2xlIiwiYXBwbHlGZWF0dXJlcyIsImZlYXR1cmVzIiwiX19GRUFUVVJFU19fIiwic2VuZExvY2FsQ2FuZGlkYXRlcyIsInNlbmRMb2dzIiwic2VuZE1ldHJpY3MiLCJsb2dUb0NvbnNvbGUiLCJGZWF0dXJlRW5hYmxlbWVudCIsIk1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3IiLCJNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yIiwiZGlzcG9zYWJsZSIsIl9kaXNwb3NlZCIsIl9kaXNwb3NhYmxlIiwiX2xpc3QiLCJmb3JFYWNoIiwidG9TdHJpbmciLCJTdHJpbmdzIiwiRXJyb3IiLCJyYW5kb20iLCJyYW5kb20xM0NoYXJhY3RlcnMiLCJNYXRoIiwibG9vcHMiLCJjZWlsIiwiQXJyYXkiLCJmaWxsIiwicmVkdWNlIiwic3RyaW5nIiwiZnVuYyIsImFzc2VydFVucmVhY2hhYmxlIiwieCIsIkFwcGVuZGVycyIsIl9hcHBlbmRlcnMiLCJhcHBlbmRlciIsInJlbW92ZSIsIml0ZW1zIiwiaXRlbSIsIkNvbnNvbGVBcHBlbmRlciIsInRocmVzaG9sZCIsIl90aHJlc2hvbGQiLCJsb2ciLCJsb2dMZXZlbCIsIm1lc3NhZ2UiLCJjYXRlZ29yeSIsImRhdGUiLCJmdWxsTWVzc2FnZSIsInRvSVNPU3RyaW5nIiwiTG9nZ2luZ0xldmVsIiwiY29uc29sZSIsIkxvZ2dlciIsImFwcGVuZGVycyIsIl9jYXRlZ29yeSIsInRyYWNlIiwiVHJhY2UiLCJfbGVuIiwiYXJndW1lbnRzIiwiYXJncyIsIl9rZXkiLCJkZWJ1ZyIsIkRlYnVnIiwiX2xlbjIiLCJfa2V5MiIsIkluZm8iLCJfbGVuMyIsIl9rZXkzIiwid2FybiIsIldhcm4iLCJfbGVuNCIsIl9rZXk0IiwiX2xlbjUiLCJfa2V5NSIsImZhdGFsIiwiRmF0YWwiLCJfbGVuNiIsIl9rZXk2IiwibGV2ZWwiLCJyZXBsYWNlUGxhY2Vob2xkZXJzIiwicmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyIsImluZGV4IiwicmVwbGFjZUFyZ3VtZW50Iiwic3BsaWNlIiwic3RyaW5naWZ5IiwiYWNjdW11bGF0b3IiLCJjdXJyZW50VmFsdWUiLCJhcnJheSIsInN0YWNrIiwiYXJnIiwiY2FjaGUiLCJPYmplY3QiLCJhcmd1bWVudCIsImRhdGEiLCJ0b1N0cmluZ1N0ciIsIl90ZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiZ2V0TG9nZ2VyIiwibG9nZ2VyIiwiX2xvZ2dlcnMiLCJhcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlMb2dnaW5nTGV2ZWwiLCJhcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsIiwiYXBwbHlDb25zb2xlTG9nZ2VyIiwiYmluZCIsImFwcGx5VGVsZW1ldHJ5TG9nZ2VyIiwicGFyYW1ldGVyVmFsdWUiLCJfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciIsInNldFRocmVzaG9sZCIsImFwcGx5QXBwZW5kZXIiLCJUZWxlbWV0cnlBcHBlbmRlciIsIkxvZ2dpbmdUaHJlc2hvbGQiLCJUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZSIsImxvZ2dpbmdMZXZlbCIsImNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwiLCJsb2dnaW5nTGV2ZWxUeXBlIiwibWV0cmljcyIsIl9tZXRyaWNzIiwiZ2V0VGVsZW1ldHJ5TGV2ZWwiLCJUZWxlbWV0cnlMZXZlbCIsIk1ldHJpY3NDb25maWd1cmF0aW9uIiwiX3VybCIsInNldCIsInVybCIsIm1ldHJpY3NVcmwiLCJwYXRobmFtZSIsIl9lbnZpcm9ubWVudCIsImVudmlyb25tZW50IiwiX3RlbmFuY3kiLCJ0ZW5hbmN5IiwiX3Nlc3Npb25JZCIsInNlc3Npb25JZCIsIk1ldHJpY3NGYWN0b3J5IiwiZ2V0TWV0cmljc1NlcnZpY2UiLCJtZXRyaWNzU2VydmljZXMiLCJfbWV0cmljc1NlcnZpY2VzIiwibWV0cmljc0NvbmZpZ3VyYXRpb24iLCJUZWxlbWV0cnlVcmwiLCJFbnZpcm9ubWVudCIsIk1ldHJpY3NTZXJ2aWNlIiwic2V0VGVsZW1ldHJ5TGV2ZWwiLCJ0ZWxlbWV0cnlMZXZlbCIsInZhbHVlcyIsInJlcXVlc3RTaXplTGltaXQiLCJob3N0bmFtZSIsIl9tZXRyaWNzQ29uZmlndXJhdGlvbiIsIm1ldHJpYyIsInByZXZpb3VzVmFsdWUiLCJyZXNvdXJjZSIsImtpbmQiLCJtZXRyaWNSZWNvcmQiLCJ0aW1lc3RhbXAiLCJmdWxsUXVhbGlmaWVkTmFtZSIsIl9kb21haW4iLCJWZXJzaW9uTWFuYWdlciIsImlnbm9yZWQiLCJzZW5kTWV0cmljc0lmQWJsZSIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIl9jYWxsZWUiLCJtZXRyaWNzTWVzc2FnZXMiLCJmb3JtRGF0YSIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsIkZvcm1EYXRhIiwiYXBwZW5kIiwicmVjb3JkcyIsImZldGNoIiwibWV0aG9kIiwiYm9keSIsImFicnVwdCIsInNlbnQiLCJzdG9wIiwiX3giLCJhcHBseSIsIl9zZW5kTWV0cmljc0lmQWJsZSIsIl9jYWxsZWUyIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiX2lzU2VuZGluZyIsInNsaWNlIiwidGhlbiIsInJlc3BvbnNlIiwiY2F0Y2giLCJjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZSIsImNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsIiwidGVsZW1ldHJ5TGV2ZWxUeXBlIiwiUHJvbWlzZSIsImNhbGxiYWNrIiwiVHlwZUVycm9yIiwiX3N0YXRlIiwiX2hhbmRsZWQiLCJfdmFsdWUiLCJfZGVmZXJyZWRzIiwiZG9SZXNvbHZlIiwiZG9uZSIsInByb21pc2VSZXNvbHZlIiwicmVhc29uIiwicHJvbWlzZVJlamVjdCIsIm5ld1ZhbHVlIiwicHJvbWlzZSIsImZpbmFsZSIsIl9pbW1lZGlhdGUiLCJfdW5oYW5kbGVkUmVqZWN0aW9uIiwiaSIsImxlbiIsImhhbmRsZSIsImRlZmVycmVkIiwib25GdWxmaWxsZWQiLCJvblJlamVjdGVkIiwicmVzdWx0IiwiYWxsIiwiYXJyIiwicmVzb2x2ZSIsInJlamVjdCIsImlzQXJyYXkiLCJwcm90b3R5cGUiLCJyZW1haW5pbmciLCJtYW5hZ2VSZXNwb25zZSIsImNvbnN0cnVjdG9yIiwiXyIsInJhY2UiLCJzZXRUaW1lb3V0IiwiUHJvbWlzZUhhbmRsZXIiLCJQZWVyQ29ubmVjdGlvblNlcnZpY2UiLCJfcGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZyIsInByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9wcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfY2FjaGVkIiwiZGlyZWN0aW9uIiwicGVlckNvbm5lY3Rpb24iLCJjcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfY2FsbGVlMyIsIl9hcmdzMyIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsImNyZWF0ZVBlZXJDb25uZWN0aW9uIiwiX3JlZiIsInN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIiLCJ2aWRlb1RyYW5zY2VpdmVyIiwiYXVkaW9UcmFuc2NlaXZlciIsIm9wdGlvbnMiLCJhZGRUcmFuc2NlaXZlciIsInQwIiwidDEiLCJ0MiIsImNyZWF0ZU9mZmVyIiwidDMiLCJsb2NhbE9mZmVyIiwib2ZmZXJUb1JlY2VpdmVBdWRpbyIsIm9mZmVyVG9SZWNlaXZlVmlkZW8iLCJ0NCIsInQ1IiwiVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSIsIlJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIiwidHJ1bmNhdGVJY2VTZXJ2ZXJzIiwiY29uZmlndXJhdGlvbiIsImljZVNlcnZlcnMiLCJ1cmxzIiwidXNlcm5hbWUiLCJjcmVkZW50aWFsIiwidXBkYXRlU3RhdGlzdGljVGltZW91dCIsIlJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwibWVkaWFTdHJlYW0iLCJlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lIiwiX3BlZXJDb25uZWN0aW9uIiwiX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUiLCJfdHJhY2tzVG9Nb25pdG9yIiwiZ2V0VHJhY2tzIiwibWFwIiwidHJhY2siLCJwYXJzZWRTRFAiLCJTZHBQYXJzZXIiLCJjdXJyZW50UmVtb3RlRGVzY3JpcHRpb24iLCJzZHAiLCJfZXN0aW1hdGVkQXVkaW9Db2RlYyIsImF1ZGlvQ29kZWMiLCJfZXN0aW1hdGVkVmlkZW9Db2RlYyIsInZpZGVvQ29kZWMiLCJ1cGRhdGVTdGF0aXN0aWMiLCJfcnRjU3RhdGlzdGljIiwiX2lzTW9uaXRvclJ1bm5pbmciLCJfdXBkYXRlVGltZW91dCIsImNsZWFyVGltZW91dCIsIl91cGRhdGVTdGF0aXN0aWMiLCJfaWdub3JlZCIsImdldEtpbmRGb3JTYWZhcmkxMSIsInVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSIsImlkIiwiZ2V0U3RhdHMiLCJzdGF0cyIsInJ0Y1N0YXRpc3RpY3MiLCJyb3VuZFRyaXBUaW1lIiwibGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIiwicmVwb3J0IiwiY3VycmVudFJvdW5kVHJpcFRpbWUiLCJtZWRpYVR5cGUiLCJjb2RlYyIsImNvZGVjSWQiLCJtaW1lVHlwZSIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdiIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjIiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYzIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2NCIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjUiLCJieXRlcyIsImJ5dGVzUmVjZWl2ZWQiLCJwcmV2aW91c0J5dGVzUmVjZWl2ZWQiLCJieXRlc0RlbHRhIiwidGltZURlbHRhIiwiYml0cmF0ZSIsImZsb29yIiwic3NyYyIsInBhY2tldHNMb3N0IiwicGFja2V0c1JlY2VpdmVkIiwiZ2V0Q29kZWNCeVR5cGUiLCJ2aWRlbyIsImZyYW1lc0RlY29kZWQiLCJmcHMiLCJyb3VuZCIsIl91cGRhdGVTdGF0aXN0aWNMZWdhY3kiLCJnZXRTdGF0c0xlZ2FjeSIsIm5hbWVzIiwic3RhdCIsIl9zZHAiLCJzZHBTcGxpdEJ5TGluZXMiLCJzZHBTcGxpdEJ5VHJhY2tzIiwiX2F1ZGlvQ29kZWMiLCJhcHBseUNvZGVjIiwiX3ZpZGVvQ29kZWMiLCJfaXNBdWRpb1RyYWNrRW5hYmxlZCIsImlzVHJhY2tCeVR5cGVFbmFibGVkIiwiX2lzVmlkZW9UcmFja0VuYWJsZWQiLCJzZHBTZWN0aW9uRm9yVHlwZSIsImZpbmQiLCJzZHBUcmFjayIsInVzZWRDb2RlY0xpbmUiLCJzZHBMaW5lIiwidXNlZENvZGVjIiwiY29kZWNOYW1lIiwiVmFuaWxsYVBlZXJDb25uZWN0aW9uIiwid2Via2l0UlRDUGVlckNvbm5lY3Rpb24iLCJSVENQZWVyQ29ubmVjdGlvbiIsImN1cnJlbnRMb2NhbERlc2NyaXB0aW9uIiwiaWNlQ29ubmVjdGlvblN0YXRlIiwiZ2V0Q29uZmlndXJhdGlvbiIsInNldENvbmZpZ3VyYXRpb24iLCJfY3JlYXRlT2ZmZXIiLCJfY3JlYXRlQW5zd2VyIiwiY3JlYXRlQW5zd2VyIiwiX3gyIiwiX3NldExvY2FsRGVzY3JpcHRpb24iLCJkZXNjcmlwdGlvbiIsInNldExvY2FsRGVzY3JpcHRpb24iLCJSVENTZXNzaW9uRGVzY3JpcHRpb24iLCJfeDMiLCJfc2V0UmVtb3RlRGVzY3JpcHRpb24iLCJfY2FsbGVlNCIsIl9kZXNjcmlwdGlvbiRzZHAiLCJoYXNDcnlwdG8iLCJfY2FsbGVlNCQiLCJfY29udGV4dDQiLCJzZXRSZW1vdGVEZXNjcmlwdGlvbiIsIl94NCIsImdldFNlbmRlcnMiLCJzZWxlY3RvciIsIl90aGlzMyIsImFkZFN0cmVhbSIsIl90aGlzNCIsImFkZFRyYWNrIiwib250cmFjayIsImhhbmRsZXIiLCJvbmljZWNhbmRpZGF0ZSIsIm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlIiwiY2xvc2UiLCJfY3JlYXRlUGVlckNvbm5lY3Rpb24iLCJzdWJqZWN0IiwiX3N1YmplY3QiLCJzdWJzY3JpYmUiLCJEaXNwb3NhYmxlTGlzdGVuZXIiLCJfRGlzcG9zYWJsZSIsIl9pbmhlcml0cyIsIl9zdXBlciIsIl9jcmVhdGVTdXBlciIsImxpc3RlbmVycyIsImlkeCIsIl9saXN0ZW5lcnMiLCJjaGFuZ2VkIiwiY29tcGFyYWJsZSIsImVxdWFscyIsImdldEVudmlyb25tZW50RnJvbVVybCIsImJhc2VVUkwiLCJvcmlnaW4iLCJfY2xpZW50U2Vzc2lvbklkIiwiX2xvYWRlZFRpbWVzdGFtcCIsIl9yZWFkT25seUluaXRpYWxpemVkIiwiX3JlYWRPbmx5RGlzY292ZXJ5VXJpIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSIsIl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsIl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIl93ZWJQbGF5ZXJMb2FkZXIiLCJfc2hha2FQbGF5ZXJMb2FkZXIiLCJfaGxzSnNMb2FkZXIiLCJfbWV0cmljc1NlcnZpY2UiLCJfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfdGVsZW1ldHJ5VXJsIiwiX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJyZXRyaWVzQW1vdW50IiwiX3RlbGVtZXRyeUxldmVsIiwiYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwidGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImNsaWVudFNlc3Npb25JZCIsImlnbm9yZWRFbnZpcm9ubWVudCIsImlnbm9yZWREaXNjb3ZlcnlVcmkiLCJ0ZWxlbWV0cnlVcmwiLCJ0ZWxlbWV0cnlBcHBlbmRlciIsImlnbm9yZWRUZW5hbmN5IiwiYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbiIsIkRpc2NvdmVyeVVyaSIsImlnbm9yZWRUZWxlbWV0cnlMZXZlbCIsImFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJkaXNjb3ZlcnlVcmkiLCJnZXRUZWxlbWV0cnlVcmwiLCJjaGFubmVsVG9rZW4iLCJ1cmlWYWx1ZSIsImJhc2VVUklWYWx1ZSIsImluaXQiLCJfaW5pdGlhbGl6ZWQiLCJwZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJjb25zb2xlTG9nZ2luZ0xldmVsIiwiY29uc29sZUFwcGVuZGVyIiwiYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwid2ViUGxheWVyTG9hZGVyIiwic2hha2FQbGF5ZXJMb2FkZXIiLCJobHNKc0xvYWRlciIsInNlZ21lbnRzIiwicHJvdG9jb2wiLCJ1bnNoaWZ0IiwiZW5kc1dpdGgiLCJqb2luIiwiQml0cmF0ZVN0YXRlIiwiQml0cmF0ZU1vZGUiLCJkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24iLCJmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsInN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsIkNoYW5uZWwiLCJ2aWRlb0VsZW1lbnQiLCJjaGFubmVsQ29udGV4dE9wdGlvbnMiLCJ0YXJnZXRMYWciLCJ2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiaGFzSW5zZXJ0YWJsZVN0cmVhbXMiLCJfdG9rZW5Db250ZXh0IiwiVG9rZW5Db250ZXh0IiwiX2NoYW5uZWxDb250ZXh0IiwiQ2hhbm5lbENvbnRleHQiLCJfcGVlckNvbm5lY3Rpb25Db250ZXh0IiwiUGVlckNvbm5lY3Rpb25Db250ZXh0IiwiX3N0YXRlQ29udGV4dCIsIlN0YXRlQ29udGV4dCIsIl9leHBvbmVudGlhbEJhY2tvZmYiLCJFeHBvbmVudGlhbEJhY2tvZmYiLCJfY2hhbm5lbFN0YXJ0VGltZSIsIl9yZWFkT25seVZpZGVvRWxlbWVudCIsIl9yZWFkT25seVRva2VuIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24iLCJfcmVhZE9ubHlTdGF0ZSIsInN0YXRlIiwiX3JlYWRPbmx5QXV0b011dGVkIiwiYXV0b011dGVkIiwiX3JlYWRPbmx5QXV0b1BhdXNlZCIsImF1dG9QYXVzZWQiLCJfcmVhZE9ubHlUb2tlbkV4cGlyaW5nIiwidG9rZW5FeHBpcmluZyIsIl9yZWFkT25seUF1dGhvcml6ZWQiLCJhdXRob3JpemVkIiwiX3JlYWRPbmx5T25saW5lIiwib25saW5lIiwiX3JlYWRPbmx5TG9hZGluZyIsImxvYWRpbmciLCJfcmVhZE9ubHlQbGF5aW5nIiwicGxheWluZyIsIl9yZWFkT25seVN0YW5kYnkiLCJzdGFuZGJ5IiwiX3JlYWRPbmx5U3RvcHBlZCIsInN0b3BwZWQiLCJfcmVhZE9ubHlUYXJnZXRMYWciLCJfcmVhZE9ubHlMYWciLCJsYWciLCJfcmVhZE9ubHlCaXRyYXRlTGltaXQiLCJiaXRyYXRlTGltaXQiLCJfcmVhZE9ubHlSZXNvbHV0aW9uIiwicmVzb2x1dGlvbiIsIl9yZWFkT25seUZhaWx1cmVDb3VudCIsImZhaWx1cmVDb3VudCIsIl9yZWFkT25seUVuZFBvaW50IiwiZW5kUG9pbnQiLCJfcmVhZE9ubHlTdHJlYW0iLCJzdHJlYW0iLCJfcmVhZE9ubHlSdGNTdGF0aXN0aWNzIiwiX3JlYWRPbmx5TWVkaWFTdHJlYW0iLCJfc2Vzc2lvblRlbGVtZXRyeSIsIlNlc3Npb25UZWxlbWV0cnkiLCJjaGFubmVsRGlzcG9zYWJsZXMiLCJfdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyIiwiaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQiLCJyZW5kZXJlckRpc3Bvc2FibGVzIiwidmlkZW9UZWxlbWV0cnkiLCJkYXRhc2V0IiwiVmlkZW9UZWxlbWV0cnkiLCJzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lIiwic2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nIiwiQ2hhbm5lbFN0YXRlIiwicmVzdGFydEFmdGVyU3RvcCIsImNsZWFyRmFpbHVyZUNvdW50VGltZW91dCIsIm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyIsImVsYXBzZWRJbk1pbGxpc2Vjb25kcyIsImNoYW5uZWxJbml0aWFsaXphdGlvbiIsImdldFRpbWUiLCJsaW1pdEJpdHJhdGUiLCJkZXN0cm95U3RyZWFtT25Vbm1vdW50Iiwic3RhcnQiLCJwYXVzZSIsInNyY09iamVjdCIsIndpZHRoIiwidmlkZW9XaWR0aCIsImhlaWdodCIsInZpZGVvSGVpZ2h0IiwiRGltZW5zaW9uIiwiZGlzcG9zYWJsZXMiLCJzZXRCaXRyYXRlTGltaXQiLCJjbGVhckJpdHJhdGVMaW1pdCIsImJpdHJhdGVJbkJpdHNQZXJTZWNvbmQiLCJzdGF0dXMiLCJ1cGRhdGVUYXJnZXRMYWciLCJfc3RvcCIsImlzU3RhcnRpbmciLCJwcm9jZXNzU3RvcCIsImNsZWFuVXBSZXNvdXJjZXMiLCJfcmVzdW1lIiwicGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQiLCJyZXN1bWUiLCJtdXRlIiwibXV0ZWQiLCJ1bm11dGUiLCJfZGlzcG9zZSIsImlzRGlzcG9zZWQiLCJnZXRVcmkiLCJfc3RhcnQiLCJwcm9jZXNzU3RhcnQiLCJfcHJvY2Vzc1N0YXJ0IiwiX2NhbGxlZTUiLCJfdGhpczUiLCJsaXN0ZW5PblN0cmVhbVNldHVwIiwiaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrIiwic3RyZWFtUGxheWVyIiwiX2NhbGxlZTUkIiwiX2NvbnRleHQ1IiwiaGFuZGxlU3RyZWFtRmFpbHVyZSIsIlN0cmVhbUZhY3RvcnkiLCJmaW5hbGx5IiwidGltZW91dElkIiwiZ2V0UmV0cnlJbnRlcnZhbCIsIl9yZXN0YXJ0QWZ0ZXJTdG9wIiwiX2NhbGxlZTYiLCJfY2FsbGVlNiQiLCJfY29udGV4dDYiLCJfcGxheSIsIl9jYWxsZWU3IiwiX2NhbGxlZTckIiwiX2NvbnRleHQ3IiwicGxheSIsImdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQiLCJfaGFuZGxlU3RyZWFtRmFpbHVyZSIsIl9jYWxsZWU4IiwiX2NhbGxlZTgkIiwiX2NvbnRleHQ4IiwiX3RoaXM2IiwiZGVzdHJveVN0cmVhbSIsIl9yZWYyIiwicGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsIl9wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsIl9jYWxsZWU5IiwiX3RoaXM3IiwicGxheVByb21pc2UiLCJfY2FsbGVlOSQiLCJfY29udGV4dDkiLCJoYXNBdWRpb1RyYWNrIiwiZmlsdGVyIiwiYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYiLCJDaGFubmVscyIsImNyZWF0ZUNoYW5uZWwiLCJjaGFubmVsT3B0aW9ucyIsImRlZmF1bHRUYXJnZXRMYWciLCJfb3B0aW9ucyR0YXJnZXRMYWciLCJhcHBseVN0YXR1cyIsImFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCIsIm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsImRlZmF1bHREaXNjb3ZlcnlVcmkiLCJCaXRyYXRlTW9kZU1hcHBpbmciLCJjb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZSIsImJpdHJhdGVNb2RlIiwiQml0cmF0ZVN0YXRlTWFwcGluZyIsImNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUiLCJiaXRyYXRlU3RhdGUiLCJkaXNjb3ZlcnlDYWNoZUludGVydmFsIiwiRGlzY292ZXJ5IiwiX3ByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyIsInByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwiX2Rpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmciLCJkaXNjb3ZlcnlTZXJ2aWNlIiwiY2FjaGVkVmFsdWUiLCJfY2FjaGUiLCJEaXNjb3ZlcnlTZXJ2aWNlIiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQiLCJkZWZhdWx0VGltZW91dCIsIl91cmkiLCJfZGlzY292ZXJOZWFyYnlFbmRQb2ludHMiLCJ0aW1lb3V0IiwiYXNTdHJpbmciLCJlbmRQb2ludHMiLCJvayIsInRleHQiLCJFbmRQb2ludCIsImRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzIiwiX2Rpc2NvdmVyQ2xvc2VzdEVuZFBvaW50IiwiZmFpbGVkUmVxdWVzdHMiLCJwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCIsIl9hcmdzMiIsInBpbmciLCJ0aW1lIiwiX2Rpc2NvdmVyeVVyaSIsImJ1aWxkRGlzY292ZXJ5VXJsIiwic2RrVmVyc2lvbiIsImFwaVZlcnNpb24iLCJfdGltZW91dCIsIl9yb3VuZFRyaXBUaW1lIiwiX3BpbmciLCJmaW5pc2hlZCIsImJ1aWxkUGluZ1VybCIsIl9zdWJzY3JpYmUiLCJsb2NhbFNlc3Npb25EZXNjcmlwdGlvbiIsImNsaWVudFZlcnNpb24iLCJib2R5V2l0aE9mZmVyIiwiYm9keVdpdGhvdXRPZmZlciIsImh0dHBSZXNwb25zZSIsInN1YnNjcmliZVJlc3BvbnNlIiwiYnVpbGRVcmwiLCJiZWFyZXJUb2tlbiIsImh0dHBSb3VuZFRyaXBUaW1lIiwic2Vzc2lvbkRlc2NyaXB0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb24iLCJjcmVhdGVPZmZlckRlc2NyaXB0aW9uIiwibWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UiLCJfcHVibGlzaCIsIm1hcEh0dHBTdGF0dXNUb1B1Ymxpc2hTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UiLCJwdWJsaXNoIiwiX3g1IiwiX3g2IiwiX3g3Iiwic2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsInNoYXJlZFNlY3JldCIsIm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl94OCIsIl94OSIsIl9saW1pdEJpdHJhdGUiLCJtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyIsIl94MTAiLCJfeDExIiwiX3gxMiIsIl94MTMiLCJfeDE0IiwiX2FkZEljZUNhbmRpZGF0ZXMiLCJjYW5kaWRhdGVzIiwiZGlzY292ZXJ5Q29tcGxldGVkIiwiYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiX2FyZ3M2IiwibWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsImFkZEljZUNhbmRpZGF0ZXMiLCJfeDE1IiwiX3gxNiIsIl94MTciLCJfZGVzdHJveVN0cmVhbSIsImRlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJfeDE4IiwiX3gxOSIsIl9kZXN0cm95U3RyZWFtT25Vbm1vdW50IiwiX25hdmlnYXRvciIsInNlbmRCZWFjb24iLCJfeDIwIiwiX3gyMSIsInBhdGgiLCJwYXRoQXNBcnJheSIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsImpzb24iLCJydGNDb25maWd1cmF0aW9uIiwiY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSIsIl94MjIiLCJfeDIzIiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCIsInB1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCQiLCJfY29udGV4dDEwIiwiX3gyNCIsIl94MjUiLCJidW5kbGVQb2xpY3kiLCJpY2VDYW5kaWRhdGVQb29sU2l6ZSIsImljZVRyYW5zcG9ydFBvbGljeSIsInJ0Y3BNdXhQb2xpY3kiLCJfY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl9jYWxsZWUxMSIsIl9jYWxsZWUxMSQiLCJfY29udGV4dDExIiwiX3gyNiIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJfY2FsbGVlMTIiLCJfY2FsbGVlMTIkIiwiX2NvbnRleHQxMiIsIl94MjciLCJfY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiX2NhbGxlZTEzIiwiX2NhbGxlZTEzJCIsIl9jb250ZXh0MTMiLCJfeDI4IiwiQ2h1bmtlZFN0cmVhbSIsImNoYW5uZWxDb250ZXh0Iiwib2ZmZXJTZHAiLCJvcmlnaW5TdGFydFRpbWUiLCJMaXZlU3RyZWFtaW5nIiwicGxheWVyIiwibW9uaXRvciIsIl9tb25pdG9yRGlzcG9zYWJsZXMiLCJuZXdTdHJlYW1TdGF0aXN0aWNzIiwiX3N0cmVhbVN0YXRpc3RpY3MiLCJjdXJyZW50VGltZSIsImRhdGFCdWZmZXJlZCIsIl9tb25pdG9yRmFpbHVyZUNvdW50IiwicGF1c2VkIiwiSGxzUGxheWVyIiwibWFuaWZlc3RVUkkiLCJfdmlkZW9FbGVtZW50IiwiX2tpbmQiLCJfc3RyZWFtSWQiLCJfbWFuaWZlc3RVUkkiLCJlbmNvZGVVUkkiLCJyZXBsYWNlIiwiX29wdGlvbnMiLCJfcGxheWVyIiwiZW5hYmxlV29ya2VyIiwibWF4QnVmZmVyTGVuZ3RoIiwibGl2ZUJhY2tCdWZmZXJMZW5ndGgiLCJsaXZlU3luY0R1cmF0aW9uIiwibGl2ZUR1cmF0aW9uSW5maW5pdHkiLCJsaXZlTWF4TGF0ZW5jeUR1cmF0aW9uIiwiSW5maW5pdHkiLCJoaWdoQnVmZmVyV2F0Y2hkb2dQZXJpb2QiLCJsb2FkU291cmNlIiwiYXR0YWNoTWVkaWEiLCJjYW5QbGF5VHlwZSIsInNyYyIsIm5ldHdvcmtTdGF0ZSIsIk5ldHdvcmtTdGF0ZXMiLCJOZXR3b3JrTm9Tb3VyY2UiLCJzdGF0aXN0aWNzIiwibWVkaWEiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsImJ1ZmZlcmVkIiwiZW5kIiwic3RyZWFtQ29udHJvbGxlciIsInRydWVDdXJyZW50VGltZSIsIm1heCIsImRlc3Ryb3kiLCJJbnNlcnRhYmxlU3RyZWFtcyIsInNldHVwTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybSIsInRyYW5zZm9ybSIsInZpZGVvVHJhY2siLCJnZXRWaWRlb1RyYWNrcyIsInRyYW5zZm9ybWVyIiwiVHJhbnNmb3JtU3RyZWFtIiwicHJvY2Vzc29yIiwiZ2VuZXJhdG9yIiwic291cmNlIiwicmVhZGFibGUiLCJzaW5rIiwid3JpdGFibGUiLCJwaXBlVGhyb3VnaCIsInBpcGVUbyIsInRyYW5zZm9ybWVkU3RyZWFtIiwiTWVkaWFTdHJlYW0iLCJnZXRBdWRpb1RyYWNrcyIsImF1ZGlvVHJhY2siLCJfaGxzUGxheWVyIiwiX3BoZW5peFdlYlBsYXllciIsIl9zaGFrYSIsImxvYWRlZCIsIl9wZW5kaW5nIiwiUGxheWVyIiwiZGFzaE1hbmlmZXN0VXJsTWF0Y2giLCJobHNNYW5pZmVzdFVybE1hdGNoIiwibWFuaWZlc3RVcmwiLCJwbGF5bGlzdFVybCIsIl9vYmplY3RTcHJlYWQiLCJwcmVmZXJOYXRpdmUiLCJzaG91bGRVc2VOYXRpdmVIbHMiLCJXZWJQbGF5ZXIiLCJTaGFrYVBsYXllciIsImljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsIiwiZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCIsIlJlYWxUaW1lU3RyZWFtIiwicGVlckNvbm5lY3Rpb25Db250ZXh0IiwiX3NsaWNlZFRvQXJyYXkiLCJfcmVmMiQiLCJzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24iLCJzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24iLCJfcmVmMyIsImFwcGx5UnRjQ29uZmlndXJhdGlvbiIsInN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0IiwiY2FuY2VsRGlzY292ZXJ5IiwiY2FuZGlkYXRlIiwiX3JlZjQiLCJyZXRyeUNhbGxiYWNrIiwib25MaW5lIiwicmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJtZWRpYVN0cmVhbVByb21pc2UiLCJzdHJlYW1zIiwidHJhY2tMaXN0ZW5lciIsImFuc3dlciIsIl9yZWY1IiwibWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMiLCJydGNDb25uZWN0aW9uTW9uaXRvciIsInJ0Y1N0YXRpc3RpYyIsInJ0Y1ZpZGVvU3RhdGlzdGljIiwicnRjQXVkaW9TdGF0aXN0aWMiLCJhdWRpbyIsImF1ZGlvVHJhY2tGYWlsZWQiLCJ2aWRlb1RyYWNrRmFpbGVkIiwiX2FwcGx5UnRjQ29uZmlndXJhdGlvbiIsIm9wdGlvbmFsUGVlckNvbm5lY3Rpb24iLCJuZXdSdGNDb25maWd1cmF0aW9uIiwiX3BlZXJDb25uZWN0aW9uJGN1cnJlIiwiaXNDbGllbnRPZmZlckZsb3ciLCJpY2VSZXN0YXJ0Iiwib2ZmZXIiLCJwbGF5ZXJPcHRpb25zIiwiYWJyIiwiZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlIiwibWFuaWZlc3QiLCJyZXRyeVBhcmFtZXRlcnMiLCJzdHJlYW1pbmciLCJyZWJ1ZmZlcmluZ0dvYWwiLCJidWZmZXJpbmdHb2FsIiwiYnVmZmVyQmVoaW5kIiwibWF4QXR0ZW1wdHMiLCJiYWNrb2ZmRmFjdG9yIiwibG9hZFBsYXllciIsImVzdGltYXRlZEJhbmR3aWR0aCIsInBsYXlUaW1lIiwidW5sb2FkIiwicGxheWVyQ29uZmlnIiwiY29uZmlndXJlIiwibG9hZCIsImNvZGUiLCJjcmVhdGUiLCJ0b2tlbkNhcGFiaWxpdGllcyIsImJhbmR3aWR0aFRvU3RhcnRBdCIsIm1pblRpbWVCZWZvcmVOZXh0UmVsb2FkIiwiZXJyb3JPYmplY3QiLCJjYW5SZWxvYWQiLCJzZXZlcml0eSIsInJlbG9hZElmQWJsZSIsImlzTmF0aXZlIiwiZGVsaXZlcnlUeXBlIiwiaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQiLCJfbGFzdFJlbG9hZFRpbWUiLCJyZWxvYWQiLCJfX1NES1ZFUlNJT05fXyIsIl9kZWZhdWx0VmVyc2lvbiIsIl90ZWxlbWV0cnlTZXJ2aWNlIiwiVGVsZW1ldHJ5U2VydmljZSIsImxvZ1JlY29yZCIsIl9sb2dzIiwic2VuZExvZ3NJZkFibGUiLCJsb2dNZXNzYWdlcyIsIl9zZW5kTG9nc0lmQWJsZSIsIm51bWJlck9mTG9nc1RvU2VuZCIsInNpemVPZkxvZ3NUb1NlbmQiLCJnZXRMb2dTaXplIiwic3VtIiwiZHVyYXRpb24iLCJfZHVyYXRpb24iLCJpc05lZ2F0aXZlIiwiYWJzIiwib2Zmc2V0IiwibWlsbGlzZWNvbmRzIiwic2Vjb25kcyIsIm1pbnV0ZXMiLCJob3VycyIsInBhcnRzIiwiU3RyaW5nIiwicGFkU3RhcnQiLCJ0YXJnZXRMZW5ndGgiLCJwYWRTdHJpbmciLCJyZXBlYXQiLCJkZWZhdWx0QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwibWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIm1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMiLCJyYW5kb21pemF0aW9uIiwiZXhwb25lbnRpYWxCYWNrb2ZmIiwicG93IiwiZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24iLCJleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQiLCJtaW4iLCJvdGhlciIsIl9uZXR3b3JrTW9uaXRvciIsInJlY29yZEZvcmVncm91bmRDaGFuZ2UiLCJyZWNvcmROZXR3b3JrUlRUVXBkYXRlIiwicmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUiLCJkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsInJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZSIsInRpbWVTaW5jZUxhc3RDaGFuZ2UiLCJuZXdSVFQiLCJvbGRSdHQiLCJfbGFzdE5ldHdvcmtTdGF0aXN0aWNzIiwibmV3TmV0d29ya1R5cGUiLCJvbGROZXR3b3JrVHlwZSIsIm5ld0NhcGFjaXR5Iiwib2xkQ2FwYWNpdHkiLCJmbG9hdCIsImNoYW5uZWxTdGFydFRpbWUiLCJfc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lIiwiX2xpc3RlblRvRmlyc3RUaW1lIiwiY2FsbFRpbWVUb0ZpcnN0RnJhbWUiLCJfY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIiLCJfbGlzdGVuRm9yU3RhbGwiLCJvblN0YWxsIiwiX2xpc3RlbkZvckNvbnRpbnVhdGlvbiIsImV2ZW50Iiwib25Db250aW51YXRpb24iLCJfY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyIiwicHVzaFRpbWVUb0ZpcnN0RnJhbWUiLCJwdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSIsIl90aW1lVG9GaXJzdEZyYW1lIiwiZHVyYXRpb25TaW5jZVBhZ2VMb2FkIiwiX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUiLCJfdmlkZW9TdGFsbGVkIiwiYnVmZmVyTGVuZ3RoIiwiaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQiLCJfbGFzdFByb2dyZXNzIiwidGltZVNpbmNlU3RvcCIsIm5ld1Jlc29sdXRpb24iLCJfdmlkZW9SZXNvbHV0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTzs7Ozs7Ozs7O0FDVkE7QUFDQTtBQUNBLHdDQUF3QyxTQUFTO0FBQ2pEO0FBQ0E7QUFDQSxvQ0FBb0MseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDTC9GO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7QUNIN0YsdUJBQXVCLG1CQUFPLENBQUMsd0ZBQXVCO0FBQ3REO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7QUNKaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7Ozs7QUNO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Q0E7V0FDQSx3Q0FBd0MseUNBQXlDO1dBQ2pGO1dBQ0E7V0FDQSxFOzs7OztXQ1BBLHNGOzs7OztXQ0FBO1dBQ0E7V0FDQTtXQUNBLHNEQUFzRCxrQkFBa0I7V0FDeEU7V0FDQSwrQ0FBK0MsY0FBYztXQUM3RCxFOzs7O1VDTkE7VUFDQTtVQUNBO1VBQ0EiLCJmaWxlIjoiY2hhbm5lbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJwaGVuaXhcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xufSkoc2VsZiwgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcbiAgcmV0dXJuIGFycjI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheUxpa2VUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRoSG9sZXMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KGFycik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhvdXRIb2xlcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChpbmZvLmRvbmUpIHtcbiAgICByZXNvbHZlKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7XG4gIH1cbn1cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgICAgZnVuY3Rpb24gX25leHQodmFsdWUpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hc3luY1RvR2VuZXJhdG9yLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3MsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuL3NldFByb3RvdHlwZU9mLmpzXCIpO1xuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaW5oZXJpdHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIHZhciBfaSA9IG51bGwgPT0gYXJyID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdO1xuICBpZiAobnVsbCAhPSBfaSkge1xuICAgIHZhciBfcyxcbiAgICAgIF9lLFxuICAgICAgX3gsXG4gICAgICBfcixcbiAgICAgIF9hcnIgPSBbXSxcbiAgICAgIF9uID0gITAsXG4gICAgICBfZCA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoX3ggPSAoX2kgPSBfaS5jYWxsKGFycikpLm5leHQsIDAgPT09IGkpIHtcbiAgICAgICAgaWYgKE9iamVjdChfaSkgIT09IF9pKSByZXR1cm47XG4gICAgICAgIF9uID0gITE7XG4gICAgICB9IGVsc2UgZm9yICg7ICEoX24gPSAoX3MgPSBfeC5jYWxsKF9pKSkuZG9uZSkgJiYgKF9hcnIucHVzaChfcy52YWx1ZSksIF9hcnIubGVuZ3RoICE9PSBpKTsgX24gPSAhMCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBfZCA9ICEwLCBfZSA9IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFfbiAmJiBudWxsICE9IF9pW1wicmV0dXJuXCJdICYmIChfciA9IF9pW1wicmV0dXJuXCJdKCksIE9iamVjdChfcikgIT09IF9yKSkgcmV0dXJuO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF9hcnI7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheUxpbWl0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlUmVzdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9ub25JdGVyYWJsZVNwcmVhZCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbnZhciBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgPSByZXF1aXJlKFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanNcIik7XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xuZnVuY3Rpb24gX3JlZ2VuZXJhdG9yUnVudGltZSgpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7IC8qISByZWdlbmVyYXRvci1ydW50aW1lIC0tIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLiAtLSBsaWNlbnNlIChNSVQpOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL0xJQ0VOU0UgKi9cbiAgbW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lID0gZnVuY3Rpb24gX3JlZ2VuZXJhdG9yUnVudGltZSgpIHtcbiAgICByZXR1cm4gZXhwb3J0cztcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICB2YXIgZXhwb3J0cyA9IHt9LFxuICAgIE9wID0gT2JqZWN0LnByb3RvdHlwZSxcbiAgICBoYXNPd24gPSBPcC5oYXNPd25Qcm9wZXJ0eSxcbiAgICBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB8fCBmdW5jdGlvbiAob2JqLCBrZXksIGRlc2MpIHtcbiAgICAgIG9ialtrZXldID0gZGVzYy52YWx1ZTtcbiAgICB9LFxuICAgICRTeW1ib2wgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCA/IFN5bWJvbCA6IHt9LFxuICAgIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIixcbiAgICBhc3luY0l0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCIsXG4gICAgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuICBmdW5jdGlvbiBkZWZpbmUob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgd3JpdGFibGU6ICEwXG4gICAgfSksIG9ialtrZXldO1xuICB9XG4gIHRyeSB7XG4gICAgZGVmaW5lKHt9LCBcIlwiKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZGVmaW5lID0gZnVuY3Rpb24gZGVmaW5lKG9iaiwga2V5LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIG9ialtrZXldID0gdmFsdWU7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgdmFyIHByb3RvR2VuZXJhdG9yID0gb3V0ZXJGbiAmJiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IG91dGVyRm4gOiBHZW5lcmF0b3IsXG4gICAgICBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSksXG4gICAgICBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eShnZW5lcmF0b3IsIFwiX2ludm9rZVwiLCB7XG4gICAgICB2YWx1ZTogbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KVxuICAgIH0pLCBnZW5lcmF0b3I7XG4gIH1cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2goZm4sIG9iaiwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwibm9ybWFsXCIsXG4gICAgICAgIGFyZzogZm4uY2FsbChvYmosIGFyZylcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInRocm93XCIsXG4gICAgICAgIGFyZzogZXJyXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBleHBvcnRzLndyYXAgPSB3cmFwO1xuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIGRlZmluZShJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZixcbiAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiYgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgIT09IE9wICYmIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkgJiYgKEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUpO1xuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPSBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICBkZWZpbmUocHJvdG90eXBlLCBtZXRob2QsIGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvciwgUHJvbWlzZUltcGwpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAoXCJ0aHJvd1wiICE9PSByZWNvcmQudHlwZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZyxcbiAgICAgICAgICB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHZhbHVlICYmIFwib2JqZWN0XCIgPT0gX3R5cGVvZih2YWx1ZSkgJiYgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSA/IFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KSA6IFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24gKHVud3JhcHBlZCkge1xuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZCwgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgZXJyb3IsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgIH1cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuICAgIGRlZmluZVByb3BlcnR5KHRoaXMsIFwiX2ludm9rZVwiLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUobWV0aG9kLCBhcmcpIHtcbiAgICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlSW1wbChmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9IHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLCBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZykgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoXCJleGVjdXRpbmdcIiA9PT0gc3RhdGUpIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICBpZiAoXCJjb21wbGV0ZWRcIiA9PT0gc3RhdGUpIHtcbiAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gbWV0aG9kKSB0aHJvdyBhcmc7XG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnRleHQubWV0aG9kID0gbWV0aG9kLCBjb250ZXh0LmFyZyA9IGFyZzs7KSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwibmV4dFwiID09PSBjb250ZXh0Lm1ldGhvZCkgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO2Vsc2UgaWYgKFwidGhyb3dcIiA9PT0gY29udGV4dC5tZXRob2QpIHtcbiAgICAgICAgICBpZiAoXCJzdXNwZW5kZWRTdGFydFwiID09PSBzdGF0ZSkgdGhyb3cgc3RhdGUgPSBcImNvbXBsZXRlZFwiLCBjb250ZXh0LmFyZztcbiAgICAgICAgICBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKTtcbiAgICAgICAgfSBlbHNlIFwicmV0dXJuXCIgPT09IGNvbnRleHQubWV0aG9kICYmIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgc3RhdGUgPSBcImV4ZWN1dGluZ1wiO1xuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG4gICAgICAgIGlmIChcIm5vcm1hbFwiID09PSByZWNvcmQudHlwZSkge1xuICAgICAgICAgIGlmIChzdGF0ZSA9IGNvbnRleHQuZG9uZSA/IFwiY29tcGxldGVkXCIgOiBcInN1c3BlbmRlZFlpZWxkXCIsIHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXCJ0aHJvd1wiID09PSByZWNvcmQudHlwZSAmJiAoc3RhdGUgPSBcImNvbXBsZXRlZFwiLCBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIiwgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kTmFtZSA9IGNvbnRleHQubWV0aG9kLFxuICAgICAgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbbWV0aG9kTmFtZV07XG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gbWV0aG9kKSByZXR1cm4gY29udGV4dC5kZWxlZ2F0ZSA9IG51bGwsIFwidGhyb3dcIiA9PT0gbWV0aG9kTmFtZSAmJiBkZWxlZ2F0ZS5pdGVyYXRvcltcInJldHVyblwiXSAmJiAoY29udGV4dC5tZXRob2QgPSBcInJldHVyblwiLCBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZCwgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCksIFwidGhyb3dcIiA9PT0gY29udGV4dC5tZXRob2QpIHx8IFwicmV0dXJuXCIgIT09IG1ldGhvZE5hbWUgJiYgKGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiLCBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICdcIiArIG1ldGhvZE5hbWUgKyBcIicgbWV0aG9kXCIpKSwgQ29udGludWVTZW50aW5lbDtcbiAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gobWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgY29udGV4dC5hcmcpO1xuICAgIGlmIChcInRocm93XCIgPT09IHJlY29yZC50eXBlKSByZXR1cm4gY29udGV4dC5tZXRob2QgPSBcInRocm93XCIsIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZywgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGwsIENvbnRpbnVlU2VudGluZWw7XG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuICAgIHJldHVybiBpbmZvID8gaW5mby5kb25lID8gKGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlLCBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jLCBcInJldHVyblwiICE9PSBjb250ZXh0Lm1ldGhvZCAmJiAoY29udGV4dC5tZXRob2QgPSBcIm5leHRcIiwgY29udGV4dC5hcmcgPSB1bmRlZmluZWQpLCBjb250ZXh0LmRlbGVnYXRlID0gbnVsbCwgQ29udGludWVTZW50aW5lbCkgOiBpbmZvIDogKGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiLCBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKSwgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGwsIENvbnRpbnVlU2VudGluZWwpO1xuICB9XG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeShsb2NzKSB7XG4gICAgdmFyIGVudHJ5ID0ge1xuICAgICAgdHJ5TG9jOiBsb2NzWzBdXG4gICAgfTtcbiAgICAxIGluIGxvY3MgJiYgKGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXSksIDIgaW4gbG9jcyAmJiAoZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl0sIGVudHJ5LmFmdGVyTG9jID0gbG9jc1szXSksIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiLCBkZWxldGUgcmVjb3JkLmFyZywgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuICBmdW5jdGlvbiBDb250ZXh0KHRyeUxvY3NMaXN0KSB7XG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3tcbiAgICAgIHRyeUxvYzogXCJyb290XCJcbiAgICB9XSwgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpLCB0aGlzLnJlc2V0KCEwKTtcbiAgfVxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgaXRlcmFibGUubmV4dCkgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsXG4gICAgICAgICAgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICBmb3IgKDsgKytpIDwgaXRlcmFibGUubGVuZ3RoOykgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkgcmV0dXJuIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXSwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICAgICAgICByZXR1cm4gbmV4dC52YWx1ZSA9IHVuZGVmaW5lZCwgbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBuZXh0OiBkb25lUmVzdWx0XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgZG9uZTogITBcbiAgICB9O1xuICB9XG4gIHJldHVybiBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgZGVmaW5lUHJvcGVydHkoR3AsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSxcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBkZWZpbmVQcm9wZXJ0eShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gZGVmaW5lKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCB0b1N0cmluZ1RhZ1N5bWJvbCwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSwgZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24gKGdlbkZ1bikge1xuICAgIHZhciBjdG9yID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBnZW5GdW4gJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiAhIWN0b3IgJiYgKGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8IFwiR2VuZXJhdG9yRnVuY3Rpb25cIiA9PT0gKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSk7XG4gIH0sIGV4cG9ydHMubWFyayA9IGZ1bmN0aW9uIChnZW5GdW4pIHtcbiAgICByZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpIDogKGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgZGVmaW5lKGdlbkZ1biwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIikpLCBnZW5GdW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShHcCksIGdlbkZ1bjtcbiAgfSwgZXhwb3J0cy5hd3JhcCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgX19hd2FpdDogYXJnXG4gICAgfTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKSwgZGVmaW5lKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlLCBhc3luY0l0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBleHBvcnRzLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yLCBleHBvcnRzLmFzeW5jID0gZnVuY3Rpb24gKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0LCBQcm9taXNlSW1wbCkge1xuICAgIHZvaWQgMCA9PT0gUHJvbWlzZUltcGwgJiYgKFByb21pc2VJbXBsID0gUHJvbWlzZSk7XG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcih3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSwgUHJvbWlzZUltcGwpO1xuICAgIHJldHVybiBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbikgPyBpdGVyIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICB9KTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKSwgZGVmaW5lKEdwLCB0b1N0cmluZ1RhZ1N5bWJvbCwgXCJHZW5lcmF0b3JcIiksIGRlZmluZShHcCwgaXRlcmF0b3JTeW1ib2wsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGRlZmluZShHcCwgXCJ0b1N0cmluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH0pLCBleHBvcnRzLmtleXMgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgdmFyIG9iamVjdCA9IE9iamVjdCh2YWwpLFxuICAgICAga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIGtleXMucHVzaChrZXkpO1xuICAgIHJldHVybiBrZXlzLnJldmVyc2UoKSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGZvciAoOyBrZXlzLmxlbmd0aDspIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSByZXR1cm4gbmV4dC52YWx1ZSA9IGtleSwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgfTtcbiAgfSwgZXhwb3J0cy52YWx1ZXMgPSB2YWx1ZXMsIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldChza2lwVGVtcFJlc2V0KSB7XG4gICAgICBpZiAodGhpcy5wcmV2ID0gMCwgdGhpcy5uZXh0ID0gMCwgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZCwgdGhpcy5kb25lID0gITEsIHRoaXMuZGVsZWdhdGUgPSBudWxsLCB0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLmFyZyA9IHVuZGVmaW5lZCwgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSksICFza2lwVGVtcFJlc2V0KSBmb3IgKHZhciBuYW1lIGluIHRoaXMpIFwidFwiID09PSBuYW1lLmNoYXJBdCgwKSAmJiBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJiAhaXNOYU4oK25hbWUuc2xpY2UoMSkpICYmICh0aGlzW25hbWVdID0gdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIHN0b3A6IGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgICB0aGlzLmRvbmUgPSAhMDtcbiAgICAgIHZhciByb290UmVjb3JkID0gdGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSByb290UmVjb3JkLnR5cGUpIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbiBkaXNwYXRjaEV4Y2VwdGlvbihleGNlcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZXR1cm4gcmVjb3JkLnR5cGUgPSBcInRocm93XCIsIHJlY29yZC5hcmcgPSBleGNlcHRpb24sIGNvbnRleHQubmV4dCA9IGxvYywgY2F1Z2h0ICYmIChjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiLCBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZCksICEhY2F1Z2h0O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV0sXG4gICAgICAgICAgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgaWYgKFwicm9vdFwiID09PSBlbnRyeS50cnlMb2MpIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGhhc0NhdGNoID0gaGFzT3duLmNhbGwoZW50cnksIFwiY2F0Y2hMb2NcIiksXG4gICAgICAgICAgICBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsICEwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNGaW5hbGx5KSB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgYWJydXB0OiBmdW5jdGlvbiBhYnJ1cHQodHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgdmFyIGZpbmFsbHlFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmaW5hbGx5RW50cnkgJiYgKFwiYnJlYWtcIiA9PT0gdHlwZSB8fCBcImNvbnRpbnVlXCIgPT09IHR5cGUpICYmIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmIGFyZyA8PSBmaW5hbGx5RW50cnkuZmluYWxseUxvYyAmJiAoZmluYWxseUVudHJ5ID0gbnVsbCk7XG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJldHVybiByZWNvcmQudHlwZSA9IHR5cGUsIHJlY29yZC5hcmcgPSBhcmcsIGZpbmFsbHlFbnRyeSA/ICh0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYywgQ29udGludWVTZW50aW5lbCkgOiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcbiAgICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gcmVjb3JkLnR5cGUpIHRocm93IHJlY29yZC5hcmc7XG4gICAgICByZXR1cm4gXCJicmVha1wiID09PSByZWNvcmQudHlwZSB8fCBcImNvbnRpbnVlXCIgPT09IHJlY29yZC50eXBlID8gdGhpcy5uZXh0ID0gcmVjb3JkLmFyZyA6IFwicmV0dXJuXCIgPT09IHJlY29yZC50eXBlID8gKHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZywgdGhpcy5tZXRob2QgPSBcInJldHVyblwiLCB0aGlzLm5leHQgPSBcImVuZFwiKSA6IFwibm9ybWFsXCIgPT09IHJlY29yZC50eXBlICYmIGFmdGVyTG9jICYmICh0aGlzLm5leHQgPSBhZnRlckxvYyksIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcbiAgICBmaW5pc2g6IGZ1bmN0aW9uIGZpbmlzaChmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHJldHVybiB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKSwgcmVzZXRUcnlFbnRyeShlbnRyeSksIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG4gICAgfSxcbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uIF9jYXRjaCh0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSByZWNvcmQudHlwZSkge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24gZGVsZWdhdGVZaWVsZChpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9LCBcIm5leHRcIiA9PT0gdGhpcy5tZXRob2QgJiYgKHRoaXMuYXJnID0gdW5kZWZpbmVkKSwgQ29udGludWVTZW50aW5lbDtcbiAgICB9XG4gIH0sIGV4cG9ydHM7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9yZWdlbmVyYXRvclJ1bnRpbWUsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlXaXRoSG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiKTtcbnZhciBpdGVyYWJsZVRvQXJyYXlMaW1pdCA9IHJlcXVpcmUoXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzXCIpO1xudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgbm9uSXRlcmFibGVSZXN0ID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCIpO1xuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3NsaWNlZFRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlXaXRob3V0SG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhvdXRIb2xlcy5qc1wiKTtcbnZhciBpdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiKTtcbnZhciBub25JdGVyYWJsZVNwcmVhZCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlU3ByZWFkLmpzXCIpO1xuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90b0NvbnN1bWFibGVBcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZShpbnB1dCwgaGludCkge1xuICBpZiAoX3R5cGVvZihpbnB1dCkgIT09IFwib2JqZWN0XCIgfHwgaW5wdXQgPT09IG51bGwpIHJldHVybiBpbnB1dDtcbiAgdmFyIHByaW0gPSBpbnB1dFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAocHJpbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIHJlcyA9IHByaW0uY2FsbChpbnB1dCwgaGludCB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKF90eXBlb2YocmVzKSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHJlcztcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChoaW50ID09PSBcInN0cmluZ1wiID8gU3RyaW5nIDogTnVtYmVyKShpbnB1dCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90b1ByaW1pdGl2ZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoXCIuL3RvUHJpbWl0aXZlLmpzXCIpO1xuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gX3R5cGVvZihrZXkpID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90b1Byb3BlcnR5S2V5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiAobW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cyksIF90eXBlb2Yob2JqKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiKTtcbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsIi8vIFRPRE8oQmFiZWwgOCk6IFJlbW92ZSB0aGlzIGZpbGUuXG5cbnZhciBydW50aW1lID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvcmVnZW5lcmF0b3JSdW50aW1lXCIpKCk7XG5tb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG5cbi8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vcGFja2FnZXMvcnVudGltZS9ydW50aW1lLmpzI0w3MzY9XG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiKSB7XG4gICAgZ2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xuICB9IGVsc2Uge1xuICAgIEZ1bmN0aW9uKFwiclwiLCBcInJlZ2VuZXJhdG9yUnVudGltZSA9IHJcIikocnVudGltZSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuXG5jb25zdCBkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCA9IDMwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5SXNGb3JlZ3JvdW5kOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzRm9yZWdyb3VuZDogU3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSBfdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlOiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBwcml2YXRlIF9kb2N1bWVudEZvY3VzSW50ZXJ2YWw6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9pc0ZvcmVncm91bmQgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLl9yZWFkT25seUlzRm9yZWdyb3VuZCA9IG5ldyBSZWFkT25seVN1YmplY3QodGhpcy5faXNGb3JlZ3JvdW5kKTtcbiAgICB0aGlzLmRldGVjdFRhYkZvY3VzQ2hhbmdlKCk7XG4gIH1cblxuICBnZXQgaXNGb3JlZ3JvdW5kKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5SXNGb3JlZ3JvdW5kO1xuICB9XG5cbiAgZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBEYXRlLm5vdygpIC0gdGhpcy5fdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGRldGVjdFRhYkZvY3VzQ2hhbmdlKCk6IHZvaWQge1xuICAgIGxldCBoaWRkZW47XG4gICAgbGV0IHZpc2liaWxpdHlDaGFuZ2U7XG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIER1ZSB0byB0eXBlc2NyaXB0IG5vdCBoYXZpbmcgYSBkZWZpbml0aW9uIGZvciAnbXNIaWRkZW4nIG9yICd3ZWJraXRIaWRkZW4nIHR5cGVzXG4gICAgLy8gUmVxdWlyZWQgdG8gQHRzLWlnbm9yZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50ICovXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQubXNIaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoaWRkZW4gPSAnbXNIaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICdtc3Zpc2liaWxpdHljaGFuZ2UnO1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50LndlYmtpdEhpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGhpZGRlbiA9ICd3ZWJraXRIaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICd3ZWJraXR2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudC5oaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7IC8vIE9wZXJhIDEyLjEwIGFuZCBGaXJlZm94IDE4IGFuZCBsYXRlciBzdXBwb3J0XG4gICAgICBoaWRkZW4gPSAnaGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAndmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50ICovXG5cbiAgICBjb25zdCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgaXNGb3JlZ3JvdW5kID0gIWRvY3VtZW50W2hpZGRlbl07XG5cbiAgICAgIHRoaXMuc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudFtoaWRkZW5dICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih2aXNpYmlsaXR5Q2hhbmdlLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCBmYWxzZSk7XG5cbiAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodmlzaWJpbGl0eUNoYW5nZSwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpO1xuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxpc3RlbkZvckRvY3VtZW50Rm9jdXMuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZvckRvY3VtZW50Rm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGNvbnN0IGlzRm9yZWdyb3VuZCA9IGRvY3VtZW50Lmhhc0ZvY3VzKCk7XG5cbiAgICAgIHRoaXMuc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpO1xuICAgIH0sIGRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0KTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsID0gbnVsbDtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lzRm9yZWdyb3VuZCA9PT0gaXNGb3JlZ3JvdW5kKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNGb3JlZ3JvdW5kLnZhbHVlID0gaXNGb3JlZ3JvdW5kO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCcm93c2VyRGV0ZWN0b3Ige1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXggPSAvKE1TSUV8KD8hR2Vja28uKylGaXJlZm94fCg/IUFwcGxlV2ViS2l0LitDaHJvbWUuKylTYWZhcml8KD8hQXBwbGVXZWJLaXQuKylDaHJvbWV8QXBwbGVXZWJLaXQoPyEuK0Nocm9tZXwuK1NhZmFyaSl8R2Vja28oPyEuK0ZpcmVmb3gpKSg/OiB8XFwvKShbXFxkLmFwcmVdKykvZztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWUgPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZSgpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck1ham9yVmVyc2lvbiA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU2OSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNjkuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcwID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzEgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcxLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzIuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzUgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc1LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzYuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc3ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Ny4nKTtcblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck5hbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck1ham9yVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU2OSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTY5O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcyO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc2O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzc7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVBbmRWZXJzaW9uID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaChCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4KTtcblxuICAgIGlmIChicm93c2VyTmFtZUFuZFZlcnNpb24gJiYgYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdKSB7XG4gICAgICByZXR1cm4gYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdO1xuICAgIH1cblxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyTmFtZUxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyTmFtZUxpc3QgfHwgIWJyb3dzZXJOYW1lTGlzdFswXSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHJldHVybiBicm93c2VyTmFtZUxpc3RbMF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyVmVyc2lvbkxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyVmVyc2lvbkxpc3QgfHwgIWJyb3dzZXJWZXJzaW9uTGlzdFsxXSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFZlcnNpb24gPSBicm93c2VyVmVyc2lvbkxpc3RbMV07XG5cbiAgICBpZiAoIWZ1bGxWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gTnVtYmVyKGZ1bGxWZXJzaW9uLnNwbGl0KCcuJylbMF0pIHx8IDA7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCk6IHN0cmluZyB7XG4gICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICAgIGNvbnN0IG1zaWUgPSB1c2VyQWdlbnQuaW5kZXhPZignTVNJRSAnKTtcblxuICAgIGlmIChtc2llID4gMCkge1xuICAgICAgLy8gSUUgMTAgb3Igb2xkZXIgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyhtc2llICsgNSwgdXNlckFnZW50LmluZGV4T2YoJy4nLCBtc2llKSksIDEwKX1gO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaWRlbnQgPSB1c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudC8nKTtcblxuICAgIGlmICh0cmlkZW50ID4gMCkge1xuICAgICAgLy8gSUUgMTEgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICBjb25zdCB2ZXJzaW9uID0gdXNlckFnZW50LmluZGV4T2YoJ3J2OicpO1xuXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyh2ZXJzaW9uICsgMywgdXNlckFnZW50LmluZGV4T2YoJy4nLCB2ZXJzaW9uKSksIDEwKX1gO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0JztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIHtcbiAgZ2V0U3RyaW5nVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWUpIHx8XG4gICAgICB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUoYCR7bmFtZX0tdXJpLXBhcmFtZXRlci1uYW1lYCkgfHxcbiAgICAgIHRoaXMuZGVmYXVsdFN0cmluZ1ZhbHVlW25hbWVdO1xuICB9XG5cbiAgZ2V0Qm9vbGVhblZhbHVlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWUpO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09ICd0cnVlJyB8fCB2YWx1ZSA9PT0gJzEnIHx8IHZhbHVlID09PSAnT24nO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlRnJvbVVyaSA9IHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZShgJHtuYW1lfS11cmktcGFyYW1ldGVyLW5hbWVgKTtcblxuICAgIGlmICh2YWx1ZUZyb21VcmkpIHtcbiAgICAgIHJldHVybiB2YWx1ZUZyb21VcmkgPT09ICd0cnVlJyB8fCB2YWx1ZUZyb21VcmkgPT09ICcxJyB8fCB2YWx1ZUZyb21VcmkgPT09ICdPbic7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdEJvb2xlYW5WYWx1ZVtuYW1lXSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRTdHJpbmdWYWx1ZSgpOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmd9IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ3BoZW5peC1tZXRyaWNzLWxldmVsJzogVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlKFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsKSxcbiAgICAgICdwaGVuaXgtbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0TG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtY29uc29sZS1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtdGVsZW1ldHJ5LWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LWNoYW5uZWwtdG9rZW4nOiAnJyxcbiAgICAgICdwaGVuaXgtdXJpJzogJycsXG4gICAgICAncGhlbml4LWJhc2UtdXJpJzogJydcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdEJvb2xlYW5WYWx1ZSgpOiB7IFtuYW1lOiBzdHJpbmddOiBib29sZWFuIH0ge1xuICAgIHJldHVybiB7XG4gICAgICAncGhlbml4LWF1dG9tYXRpY2FsbHktcmV0cnktb24tZmFpbHVyZSc6IHRydWUsXG4gICAgICAncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbic6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWV0YVZhbHVlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbWV0YVtuYW1lPScke25hbWV9J11gKTtcblxuICAgIGlmICghbWV0YVZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBtZXRhVmFsdWUuZ2V0QXR0cmlidXRlKCd2YWx1ZScpO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlVVJJUGFyYW1ldGVyTmFtZSA9IHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKTtcblxuICAgIGlmICghdmFsdWVVUklQYXJhbWV0ZXJOYW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGxvY2F0aW9uLnNlYXJjaCkuZ2V0KHZhbHVlVVJJUGFyYW1ldGVyTmFtZSkgfHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ldHdvcmtNb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNTdXBwb3J0ZWQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yWydjb25uZWN0aW9uJ107XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0dDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZWZmZWN0aXZlVHlwZTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgfVxuXG4gIGdldCBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXQgcnR0KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0dDtcbiAgfVxuXG4gIGdldCBlZmZlY3RpdmVUeXBlKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVR5cGU7XG4gIH1cblxuICBnZXQgZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogU3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZG93bmxpbmsgfHwgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZG93bmxpbmtNYXg7XG4gIH1cblxuICBwcml2YXRlIGdldEVmZmVjdGl2ZVR5cGUoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybiAnVW5rbm93bic7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmVmZmVjdGl2ZVR5cGUgfHwgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10udHlwZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Um91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5ydHQ7XG4gIH1cblxuICBwcml2YXRlIHNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ZW5lciA9ICgpOiB2b2lkID0+IHtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGlzdGljcygpO1xuICAgIH07XG5cbiAgICBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBsaXN0ZW5lcik7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RhdGlzdGljcygpOiB2b2lkIHtcbiAgICB0aGlzLl9ydHQudmFsdWUgPSB0aGlzLmdldFJvdW5kVHJpcFRpbWUoKTtcbiAgICB0aGlzLl9lZmZlY3RpdmVUeXBlLnZhbHVlID0gdGhpcy5nZXRFZmZlY3RpdmVUeXBlKCk7XG4gICAgdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkudmFsdWUgPSB0aGlzLmdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljVHlwZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5cbmV4cG9ydCBjbGFzcyBTdHJlYW1TZXR1cExpc3RlbmVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbVNldHVwTGlzdGVuZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtZXRyaWNzU2VydmljZSA9IFNESy5tZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIF9tZXRyaWNTdWJtaXR0ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihwYWdlTG9hZFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3N0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICB9XG5cbiAgc3VjY2VzcyhzdHJlYW1JZCk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkU3RyZWFtTWV0cmljKE1ldHJpY3NUeXBlLlNldHVwQ29tcGxldGVkLCBzdHJlYW1JZCk7XG4gIH1cblxuICBmYWlsKCk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkU3RyZWFtTWV0cmljKE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkU3RyZWFtTWV0cmljKG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLCBzdHJlYW1JZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9tZXRyaWNTdWJtaXR0ZWQpIHtcbiAgICAgIHJldHVybiA7XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljU3VibWl0dGVkID0gdHJ1ZTtcblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2V0dXBUaW1lID0gbm93IC0gdGhpcy5fc3RhcnRUaW1lO1xuICAgIGNvbnN0IG1ldHJpY05hbWUgPSBuZXcgTWV0cmljVHlwZShtZXRyaWNUeXBlKS5nZXROYW1lKCk7XG5cbiAgICB0aGlzLm1ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiBzZXR1cFRpbWV9LFxuICAgICAgc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBTdHJlYW0gbWV0cmljIFslc10gaW4gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljTmFtZSxcbiAgICAgIG5ldyBEdXJhdGlvbnMoc2V0dXBUaW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBFZGdlVG9rZW4gZnJvbSAnLi9FZGdlVG9rZW4nO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5jb25zdCBlZGdlQXV0aFRva2VuUHJlZml4ID0gJ0RJR0VTVDonO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGdlQXV0aFBhcnNlciB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRWRnZUF1dGhQYXJzZXInKTtcblxuICBzdGF0aWMgcGFyc2VUb2tlbih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IEVkZ2VUb2tlbiB7XG4gICAgaWYgKCF0aGlzLmlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuKSkge1xuICAgICAgRWRnZUF1dGhQYXJzZXIuX2xvZ2dlci5lcnJvcignVG9rZW4gaXMgbm90IHZhbGlkIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKG51bGwpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvZGVkVG9rZW4gPSBhdG9iKHRva2VuLnN1YnN0cihlZGdlQXV0aFRva2VuUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgY29uc3QgZWRnZVRva2VuID0gSlNPTi5wYXJzZShkZWNvZGVkVG9rZW4pO1xuXG4gICAgICBlZGdlVG9rZW4udG9rZW4gPSBKU09OLnBhcnNlKGVkZ2VUb2tlbi50b2tlbik7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKGVkZ2VUb2tlbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgRWRnZUF1dGhQYXJzZXIuX2xvZ2dlci5lcnJvcignQ2Fubm90IHBhcnNlIHRva2VuIHZhbHVlJywgZSk7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBpc0VuY29kZWRFZGdlVG9rZW5WYWxpZCh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRva2VuICYmIHRva2VuLnN0YXJ0c1dpdGgoZWRnZUF1dGhUb2tlblByZWZpeCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmludGVyZmFjZSBJVG9rZW4ge1xuICB1cmk6IFVSTCB8IG51bGw7XG4gIGNhcGFiaWxpdGllczogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBJRWRnZVRva2VuIHtcbiAgYXBwbGljYXRpb25JZDogc3RyaW5nO1xuICB0b2tlbjogSVRva2VuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGdlVG9rZW4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBsaWNhdGlvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rva2VuOiBJVG9rZW47XG5cbiAgY29uc3RydWN0b3IoZWRnZVRva2VuOiBJRWRnZVRva2VuKSB7XG4gICAgdGhpcy5fYXBwbGljYXRpb25JZCA9IGVkZ2VUb2tlbj8uYXBwbGljYXRpb25JZCB8fCAnJztcbiAgICB0aGlzLl90b2tlbiA9IHtcbiAgICAgIHVyaTogZWRnZVRva2VuPy50b2tlbj8udXJpID8gbmV3IFVSTChlZGdlVG9rZW4udG9rZW4udXJpKSA6IG51bGwsXG4gICAgICBjYXBhYmlsaXRpZXM6IGVkZ2VUb2tlbj8udG9rZW4/LmNhcGFiaWxpdGllcyB8fCBbXVxuICAgIH07XG4gIH1cblxuICBnZXQgdXJpKCk6IFVSTCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl90b2tlbi51cmk7XG4gIH1cblxuICBnZXQgY2FwYWJpbGl0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW4uY2FwYWJpbGl0aWVzO1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25JZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcblxuZGVjbGFyZSBjb25zdCBfX0ZFQVRVUkVTX186IHtcbiAgc2VuZExvY2FsQ2FuZGlkYXRlczogYm9vbGVhbjtcbiAgc2VuZExvZ3M6IExvZ2dpbmdMZXZlbFR5cGU7XG4gIHNlbmRNZXRyaWNzOiBUZWxlbWV0cnlMZXZlbFR5cGU7XG4gIGxvZ1RvQ29uc29sZTogTG9nZ2luZ0xldmVsVHlwZTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkRmVhdHVyZXMge1xuICBwcml2YXRlIHN0YXRpYyBfc2VuZExvY2FsQ2FuZGlkYXRlczogYm9vbGVhbjtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NlbmRMb2dzOiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfc2VuZE1ldHJpY3M6IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ1RvQ29uc29sZTogTG9nZ2luZ0xldmVsVHlwZTtcblxuICBzdGF0aWMgZ2V0IHNlbmRMb2NhbENhbmRpZGF0ZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRMb2dzKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9ncztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZE1ldHJpY3MoKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZE1ldHJpY3M7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvZ1RvQ29uc29sZSgpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fbG9nVG9Db25zb2xlO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5RmVhdHVyZXMoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZlYXR1cmVzID0gX19GRUFUVVJFU19fO1xuXG4gICAgICB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzID0gJ3NlbmRMb2NhbENhbmRpZGF0ZXMnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMuc2VuZExvY2FsQ2FuZGlkYXRlcyA6IHRydWU7XG4gICAgICB0aGlzLl9zZW5kTG9ncyA9ICdzZW5kTG9ncycgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5zZW5kTG9ncyA6ICdBbGwnO1xuICAgICAgdGhpcy5fc2VuZE1ldHJpY3MgPSAnc2VuZE1ldHJpY3MnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMuc2VuZE1ldHJpY3MgOiAnQWxsJztcbiAgICAgIHRoaXMuX2xvZ1RvQ29uc29sZSA9ICdsb2dUb0NvbnNvbGUnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMubG9nVG9Db25zb2xlIDogJ0FsbCc7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcyA9IHRydWU7XG4gICAgICB0aGlzLl9zZW5kTG9ncyA9ICdBbGwnO1xuICAgICAgdGhpcy5fc2VuZE1ldHJpY3MgPSAnQWxsJztcbiAgICAgIHRoaXMuX2xvZ1RvQ29uc29sZSA9ICdBbGwnO1xuICAgIH1cbiAgfVxufVxuXG5CdWlsZEZlYXR1cmVzLmFwcGx5RmVhdHVyZXMoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZlYXR1cmVFbmFibGVtZW50IHtcbiAgc3RhdGljIGdldCBjbGllbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENsaWVudCBvZmZlciB3b3JrZmxvdyBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseSBpbiB0aGUgZm9sbG93aW5nIGJyb3dzZXJzXG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc0IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzYgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc3O1xuICB9XG5cbiAgc3RhdGljIGdldCBhZGRUcmFuY2VpdmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgLy8gQ2hyb21lIDY5LCA3MCwgNzEsIDcyIGV4cG9zZXMgYGFkZFRyYW5jZWl2ZXJgIGJ1dCBpdCBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseVxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU2OSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzAgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcxIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0Q3VycmVudE9mZmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU2O1xuICB9XG5cbiAgc3RhdGljIGdldCBvblRyYWNrRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjMgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDUyO1xuICB9XG5cbiAgc3RhdGljIGdldCB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hvdWxkVXNlTmF0aXZlSGxzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYWZhcmknIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYW1zdW5nQnJvd3Nlcic7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUHJlY2FjaGluZ0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSAhPT0gJ0lFJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISh0eXBlb2YgTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3NvciA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgIHR5cGVvZiBNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yID09PSAndW5kZWZpbmVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2Rpc3Bvc2FibGU6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoZGlzcG9zYWJsZTogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5fZGlzcG9zYWJsZSA9IGRpc3Bvc2FibGU7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLl9kaXNwb3NhYmxlLmNhbGwodGhpcyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZUxpc3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0OiBJRGlzcG9zYWJsZVtdID0gW107XG5cbiAgYWRkKGRpc3Bvc2FibGU6IElEaXNwb3NhYmxlKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5wdXNoKGRpc3Bvc2FibGUpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0LmZvckVhY2goZGlzcG9zYWJsZSA9PiBkaXNwb3NhYmxlLmRpc3Bvc2UoKSk7XG4gICAgdGhpcy5fbGlzdC5sZW5ndGggPSAwO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYERpc3Bvc2FibGVMaXN0W2Rpc3Bvc2FibGVzPSR7dGhpcy5fbGlzdC5sZW5ndGh9XWA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmluZ3Mge1xuICBzdGF0aWMgcmFuZG9tKGxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCByYW5kb20xM0NoYXJhY3RlcnMgPSAoKTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMiwgMTUpO1xuICAgIH07XG5cbiAgICBjb25zdCBsb29wczogbnVtYmVyID0gTWF0aC5jZWlsKGxlbmd0aCAvIDEzKTtcblxuICAgIHJldHVybiBuZXcgQXJyYXkobG9vcHMpLmZpbGwocmFuZG9tMTNDaGFyYWN0ZXJzKS5yZWR1Y2UoKHN0cmluZywgZnVuYykgPT4ge1xuICAgICAgcmV0dXJuIHN0cmluZyArIGZ1bmMoKTtcbiAgICB9LCAnJykuc3Vic3RyaW5nKDAsIGxlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3RyaW5ncyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRVbnJlYWNoYWJsZSh4OiBuZXZlcik6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHZhbHVlIFske3h9XS4gVGhpcyBzaG91bGQgbmV2ZXIgYmUgcmVhY2hlZGApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NlcnRVbnJlYWNoYWJsZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGVuZGVycyB7XG4gIHByaXZhdGUgX2FwcGVuZGVyczogQXJyYXk8SUFwcGVuZGVyPiA9IFtdO1xuXG4gIGdldCB2YWx1ZSgpOiBBcnJheTxJQXBwZW5kZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBwZW5kZXJzO1xuICB9XG5cbiAgYWRkKGFwcGVuZGVyOiBJQXBwZW5kZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMucHVzaChhcHBlbmRlcik7XG4gIH1cblxuICByZW1vdmUoYXBwZW5kZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSB0aGlzLl9hcHBlbmRlcnMucmVkdWNlKChpdGVtcywgaXRlbSkgPT4ge1xuICAgICAgaWYgKCEoaXRlbSA9PT0gYXBwZW5kZXIpKSB7XG4gICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpdGVtcztcbiAgICB9LCBbXSBhcyBBcnJheTxJQXBwZW5kZXI+KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnNvbGVBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsTWVzc2FnZSA9IGAke2RhdGUudG9JU09TdHJpbmcoKX0gWyR7Y2F0ZWdvcnl9XSBbJHtMb2dnaW5nTGV2ZWxbbG9nTGV2ZWxdfV0gJHttZXNzYWdlfWA7XG5cbiAgICBpZiAobG9nTGV2ZWwgPCBMb2dnaW5nTGV2ZWwuV2Fybikge1xuICAgICAgY29uc29sZS5sb2coZnVsbE1lc3NhZ2UpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihmdWxsTWVzc2FnZSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcblxuZXhwb3J0IGVudW0gTG9nZ2luZ0xldmVsIHtcbiAgQWxsID0gLTEsXG4gIFRyYWNlID0gMTAsXG4gIERlYnVnID0gMjAsXG4gIEluZm8gPSAzMCxcbiAgV2FybiA9IDQwLFxuICBFcnJvciA9IDUwLFxuICBGYXRhbCA9IDYwLFxuICBPZmYgPSAxMDAsXG59XG5cbmV4cG9ydCB0eXBlIExvZ2dpbmdMZXZlbFR5cGUgPSAnT2ZmJyB8ICdUcmFjZScgfCAnRGVidWcnIHwgJ0luZm8nIHwgJ1dhcm4nIHwgJ0Vycm9yJyB8ICdGYXRhbCcgfCAnQWxsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2F0ZWdvcnk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwZW5kZXJzOiBBcHBlbmRlcnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZDtcblxuICBnZXQgY2F0ZWdvcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2F0ZWdvcnk7XG4gIH1cblxuICBnZXQgYXBwZW5kZXJzKCk6IEFwcGVuZGVycyB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogTG9nZ2luZ1RocmVzaG9sZCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHRyYWNlKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5UcmFjZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5UcmFjZSwgYXJncyk7XG4gIH1cblxuICBkZWJ1ZyguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRGVidWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRGVidWcsIGFyZ3MpO1xuICB9XG5cbiAgaW5mbyguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuSW5mbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5JbmZvLCBhcmdzKTtcbiAgfVxuXG4gIHdhcm4oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuV2FybiwgYXJncyk7XG4gIH1cblxuICBlcnJvciguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRXJyb3IsIGFyZ3MpO1xuICB9XG5cbiAgZmF0YWwoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkZhdGFsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkZhdGFsLCBhcmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9nKGxldmVsOiBudW1iZXIsIGFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnJlcGxhY2VQbGFjZWhvbGRlcnMoYXJncyk7XG5cbiAgICB0aGlzLl9hcHBlbmRlcnMudmFsdWUuZm9yRWFjaCgoYXBwZW5kZXI6IElBcHBlbmRlcikgPT4ge1xuICAgICAgYXBwZW5kZXIubG9nKGxldmVsLCBtZXNzYWdlLCB0aGlzLmNhdGVnb3J5LCBkYXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZVBsYWNlaG9sZGVycyhhcmdzOiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gYXJnc1swXTtcbiAgICBsZXQgaW5kZXggPSAwO1xuXG4gICAgd2hpbGUgKHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuaW5kZXhPZiAmJiBhcmdzLmxlbmd0aCA+IDEgJiYgaW5kZXggPj0gMCkge1xuICAgICAgaW5kZXggPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YoJyUnLCBpbmRleCk7XG5cbiAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSwgaW5kZXggKyAyKTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlICclJzpcbiAgICAgICAgICAgIC8vIEVzY2FwZWQgJyUlJyB0dXJucyBpbnRvICclJ1xuICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSArIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSk7XG4gICAgICAgICAgICBpbmRleCsrO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJyVkJyBvciAnJXMnIHdpdGggdGhlIGFyZ3VtZW50XG4gICAgICAgICAgICBhcmdzWzBdID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHRoaXMucmVwbGFjZUFyZ3VtZW50KFxuICAgICAgICAgICAgICB0aGlzLnRvU3RyaW5nKGFyZ3NbMV0pLFxuICAgICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLFxuICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGFyZ3Muc3BsaWNlKDEsIDEpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdqJzpcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJWonIHdpdGggdGhlIGFyZ3VtZW50XG4gICAgICAgICAgICBhcmdzWzBdID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHRoaXMucmVwbGFjZUFyZ3VtZW50KFxuICAgICAgICAgICAgICB0aGlzLnN0cmluZ2lmeShhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGFyZ3Muc3BsaWNlKDEsIDEpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGFyZ3MudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhcmdzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGFyZ3MgPSBhcmdzLnJlZHVjZSgoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSwgaW5kZXgsIGFycmF5KSA9PiB7XG4gICAgICAgIGlmIChpbmRleCArIDEgPT09IGFycmF5Lmxlbmd0aCAmJiBjdXJyZW50VmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArICdcXG4nICsgdGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUuc3RhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICsgYFske3RoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlKX1dYDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIHN0cmluZ2lmeShhcmc6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgY2FjaGUgPSBbXTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGFyZyBpbnN0YW5jZW9mIEVycm9yID8gdGhpcy50b1N0cmluZyhhcmcpIDogYXJnLFxuICAgICAgICAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICghIXZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoY2FjaGUuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiAnPHJlY3Vyc2l2ZT4nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYWNoZS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIDJcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICdbb2JqZWN0IGludmFsaWQgSlNPTi5zdHJpbmdpZnldJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VBcmd1bWVudChhcmd1bWVudDogYW55LCByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyB0aGlzLnRvU3RyaW5nKGFyZ3VtZW50KSArIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMik7XG4gIH1cblxuICBwcml2YXRlIHRvU3RyaW5nKGRhdGE6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBkYXRhID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCB0b1N0cmluZ1N0ciA9ICcnO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdG9TdHJpbmdTdHIgPSAnW29iamVjdCBpbnZhbGlkIHRvU3RyaW5nKCldJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b1N0cmluZ1N0cjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGNhdGVnb3J5OiBzdHJpbmcsIGFwcGVuZGVyczogQXBwZW5kZXJzLCB0aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQpIHtcbiAgICB0aGlzLl9jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRoaXMuX2FwcGVuZGVycyA9IGFwcGVuZGVycztcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBCdWlsZEZlYXR1cmVzIGZyb20gJy4uL2Vudmlyb25tZW50L0J1aWxkRmVhdHVyZXMnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXJEZWZhdWx0cyB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdExvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxbQnVpbGRGZWF0dXJlcy5zZW5kTG9nc107XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbFtCdWlsZEZlYXR1cmVzLmxvZ1RvQ29uc29sZV07XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkluZm87XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlciwge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuaW1wb3J0IEFwcGVuZGVycyBmcm9tICcuL0FwcGVuZGVycyc7XG5pbXBvcnQgTG9nZ2luZ1RocmVzaG9sZCBmcm9tICcuL0xvZ2dpbmdUaHJlc2hvbGQnO1xuaW1wb3J0IENvbnNvbGVBcHBlbmRlciBmcm9tICcuL0NvbnNvbGVBcHBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5QXBwZW5kZXIgZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgZnJvbSAnLi4vZG9tL0NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXInO1xuaW1wb3J0IHtJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcn0gZnJvbSAnLi4vZG9tL0lDb25maWd1cmF0aW9uUGFyYW1hdGVyUmVhZGVyJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyOiBJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciA9IG5ldyBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyKCk7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXJzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBJTG9nZ2VyfSA9IHt9O1xuICBwcml2YXRlIHN0YXRpYyBfYXBwZW5kZXJzOiBBcHBlbmRlcnMgPSBuZXcgQXBwZW5kZXJzKCk7XG4gIHByaXZhdGUgc3RhdGljIF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQgPSBuZXcgTG9nZ2luZ1RocmVzaG9sZCgpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IG5ldyBUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk7XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uKCk6IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBMb2dnZXJGYWN0b3J5Ll90ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgc3RhdGljIGdldExvZ2dlcihjYXRlZ29yeTogc3RyaW5nKTogSUxvZ2dlciB7XG4gICAgaWYgKHR5cGVvZiBjYXRlZ29yeSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNhdGVnb3J5ID0gJ1NESyc7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV07XG5cbiAgICBpZiAobG9nZ2VyKSB7XG4gICAgICByZXR1cm4gbG9nZ2VyO1xuICAgIH1cblxuICAgIHJldHVybiBMb2dnZXJGYWN0b3J5Ll9sb2dnZXJzW2NhdGVnb3J5XSA9IG5ldyBMb2dnZXIoY2F0ZWdvcnksIHRoaXMuX2FwcGVuZGVycywgdGhpcy5fdGhyZXNob2xkKTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlMb2dnaW5nTGV2ZWwoKTtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwoJ2NvbnNvbGUnLCBMb2dnZXJGYWN0b3J5LmFwcGx5Q29uc29sZUxvZ2dlci5iaW5kKHRoaXMpKTtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwoJ3RlbGVtZXRyeScsIExvZ2dlckZhY3RvcnkuYXBwbHlUZWxlbWV0cnlMb2dnZXIuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUxvZ2dpbmdMZXZlbCgpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1sb2dnaW5nLWxldmVsJyk7XG5cbiAgICBpZiAoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSkge1xuICAgICAgdGhpcy5fdGhyZXNob2xkLnNldFRocmVzaG9sZChMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKG5hbWU6IHN0cmluZywgYXBwbHlBcHBlbmRlcjogKGxldmVsOiBMb2dnaW5nTGV2ZWwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoYHBoZW5peC0ke25hbWV9LWxvZ2dpbmctbGV2ZWxgKTtcblxuICAgIGlmIChwYXJhbWV0ZXJWYWx1ZSA9PT0gJ09mZicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhcHBseUFwcGVuZGVyKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlDb25zb2xlTG9nZ2VyKGxldmVsOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIobGV2ZWwgfHwgTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5VGVsZW1ldHJ5TG9nZ2VyKGxldmVsOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWw7XG5cbiAgICB0aGlzLl9hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9nZ2VyRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuTG9nZ2VyRmFjdG9yeS5hcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbCwgTG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nTGV2ZWxNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUobG9nZ2luZ0xldmVsOiBMb2dnaW5nTGV2ZWwpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICBzd2l0Y2ggKGxvZ2dpbmdMZXZlbCkge1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5UcmFjZTpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5EZWJ1ZzpcbiAgICAgICAgcmV0dXJuICdEZWJ1Zyc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5JbmZvOlxuICAgICAgICByZXR1cm4gJ1RyYWNlJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLldhcm46XG4gICAgICAgIHJldHVybiAnV2Fybic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5FcnJvcjpcbiAgICAgICAgcmV0dXJuICdFcnJvcic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5GYXRhbDpcbiAgICAgICAgcmV0dXJuICdGYXRhbCc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGxvZ2dpbmdMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwobG9nZ2luZ0xldmVsVHlwZTogTG9nZ2luZ0xldmVsVHlwZSk6IExvZ2dpbmdMZXZlbCB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLk9mZjtcbiAgICAgIGNhc2UgJ1RyYWNlJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5UcmFjZTtcbiAgICAgIGNhc2UgJ0RlYnVnJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5EZWJ1ZztcbiAgICAgIGNhc2UgJ0luZm8nOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkluZm87XG4gICAgICBjYXNlICdXYXJuJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5XYXJuO1xuICAgICAgY2FzZSAnRXJyb3InOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkVycm9yO1xuICAgICAgY2FzZSAnRmF0YWwnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkZhdGFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWxUeXBlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuL0xvZ2dlckRlZmF1bHRzJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dpbmdUaHJlc2hvbGQge1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCA9IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRMb2dnaW5nTGV2ZWw7XG5cbiAgZ2V0IHZhbHVlKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldFRocmVzaG9sZCh0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY1R5cGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzOiBNZXRyaWNzVHlwZTtcblxuICBjb25zdHJ1Y3RvcihtZXRyaWNzOiBNZXRyaWNzVHlwZSkge1xuICAgIHRoaXMuX21ldHJpY3MgPSBtZXRyaWNzO1xuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBNZXRyaWNzVHlwZVt0aGlzLl9tZXRyaWNzXTtcbiAgfVxuXG4gIGdldFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICBzd2l0Y2ggKHRoaXMuX21ldHJpY3MpIHtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuVGltZVRvRmlyc3RGcmFtZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU3RhbGxlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQnVmZmVyaW5nOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TZXR1cENvbXBsZXRlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBGYWlsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5OZXR3b3JrVHlwZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuUmVzb2x1dGlvbkNoYW5nZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uRm9yZWdyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQXBwbGljYXRpb25CYWNrZ3JvdW5kOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fbWV0cmljcyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuL1RlbGVtZXRyeURlZmF1bHQnO1xuXG5leHBvcnQgZW51bSBUZWxlbWV0cnlMZXZlbCB7XG4gIE9mZiA9IDEwMCxcbiAgRXNzZW50aWFsID0gMTAsXG4gIEFsbCA9IC0xXG59XG5cbmV4cG9ydCB0eXBlIFRlbGVtZXRyeUxldmVsVHlwZSA9ICdPZmYnIHwgJ0Vzc2VudGlhbCcgfCAnQWxsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0NvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbWV0cmljcyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3RocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwgPSBUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtZXRyaWNzVXJsID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgbWV0cmljc1VybC5wYXRobmFtZSA9IG1ldHJpY3NVcmwucGF0aG5hbWUgKyAnL21ldHJpY3MnO1xuXG4gICAgdGhpcy5fdXJsID0gbWV0cmljc1VybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBUZWxlbWV0cnlMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuLi9zZGsvVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuLi9zZGsvRW52aXJvbm1lbnQnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzU2VydmljZXM6IHtbY2F0ZWdvcnk6IHN0cmluZ106IE1ldHJpY3NTZXJ2aWNlfSA9IHt9O1xuXG4gIHN0YXRpYyBnZXRNZXRyaWNzU2VydmljZSh1cmw6IHN0cmluZyk6IE1ldHJpY3NTZXJ2aWNlIHtcbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndXInKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzU2VydmljZXMgPSBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF07XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzKSB7XG4gICAgICByZXR1cm4gbWV0cmljc1NlcnZpY2VzO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY3NDb25maWd1cmF0aW9uID0gbmV3IE1ldHJpY3NDb25maWd1cmF0aW9uKCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3kgPSBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi51cmwgPSBUZWxlbWV0cnlVcmwuZ2V0VGVsZW1ldHJ5VXJsKHVybCk7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBFbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudEZyb21VcmwodXJsKTtcblxuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbChTREsudGVsZW1ldHJ5TGV2ZWwpO1xuXG4gICAgcmV0dXJuIE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXNbdXJsXSA9IG5ldyBNZXRyaWNzU2VydmljZShtZXRyaWNzQ29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzdGF0aWMgc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogdm9pZCB7XG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gT2JqZWN0LnZhbHVlcyhNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzKTtcblxuICAgIGlmIChtZXRyaWNzU2VydmljZXMgJiYgbWV0cmljc1NlcnZpY2VzLmxlbmd0aCkge1xuICAgICAgbWV0cmljc1NlcnZpY2VzLmZvckVhY2gobWV0cmljc1NlcnZpY2UgPT4ge1xuICAgICAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IHRlbGVtZXRyeUxldmVsO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uIGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IE1ldHJpY1R5cGUgZnJvbSAnLi9NZXRyaWNUeXBlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuL01ldHJpY3NUeXBlJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDEwMjQ7XG5cbmludGVyZmFjZSBJVmFsdWUge1xuICBzdHJpbmc/OiBzdHJpbmc7XG4gIHVpbnQ2ND86IG51bWJlcjtcbiAgZmxvYXQ/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBJTWV0cmljUmVjb3JkIHtcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHN0cmVhbUlkOiBzdHJpbmc7XG4gIG1ldHJpYzogc3RyaW5nO1xuICB2YWx1ZTogSVZhbHVlO1xuICBwcmV2aW91c1ZhbHVlOiBJVmFsdWU7XG4gIGZ1bGxRdWFsaWZpZWROYW1lOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgcnVudGltZTogbnVtYmVyO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIElNZXRyaWMge1xuICBzdHJlYW1JZD86IHN0cmluZztcbiAgbWV0cmljVHlwZTogTWV0cmljc1R5cGU7XG4gIHZhbHVlPzogSVZhbHVlO1xuICBwcmV2aW91c1ZhbHVlPzogSVZhbHVlO1xuICBydW50aW1lOiBudW1iZXI7XG4gIHJlc291cmNlPzogc3RyaW5nO1xuICBraW5kPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSBfbWV0cmljczogQXJyYXk8SU1ldHJpY1JlY29yZD4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF9kb21haW4gPSBsb2NhdGlvbi5ob3N0bmFtZTtcblxuICBjb25zdHJ1Y3RvcihtZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgZ2V0IG1ldHJpY3NDb25maWd1cmF0aW9uKCk6IE1ldHJpY3NDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwdXNoKG1ldHJpYzogSU1ldHJpYyk6IHZvaWQge1xuICAgIGNvbnN0IHtzdHJlYW1JZCwgdmFsdWUsIHByZXZpb3VzVmFsdWUsIHJ1bnRpbWUsIHJlc291cmNlLCBraW5kfSA9IG1ldHJpYztcbiAgICBjb25zdCBtZXRyaWNUeXBlID0gbmV3IE1ldHJpY1R5cGUobWV0cmljLm1ldHJpY1R5cGUpO1xuXG4gICAgaWYgKHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA+IG1ldHJpY1R5cGUuZ2V0VGVsZW1ldHJ5TGV2ZWwoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgdGVuYW5jeTogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkLFxuICAgICAgc3RyZWFtSWQsXG4gICAgICBtZXRyaWM6IG1ldHJpY1R5cGUuZ2V0TmFtZSgpLFxuICAgICAgdmFsdWUsXG4gICAgICBwcmV2aW91c1ZhbHVlLFxuICAgICAgZnVsbFF1YWxpZmllZE5hbWU6IHRoaXMuX2RvbWFpbixcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCxcbiAgICAgIHZlcnNpb246IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb24sXG4gICAgICBydW50aW1lLFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBraW5kXG4gICAgfTtcblxuICAgIHRoaXMuX21ldHJpY3MucHVzaChtZXRyaWNSZWNvcmQpO1xuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZE1ldHJpY3MobWV0cmljc01lc3NhZ2VzOiBBcnJheTxJTWV0cmljUmVjb3JkPik6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbWV0cmljc01lc3NhZ2VzfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IGZldGNoKHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTWV0cmljc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9tZXRyaWNzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzU2VuZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBtZXRyaWNzTWVzc2FnZXMgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKDAsIHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgdGhpcy5fbWV0cmljcyA9IHRoaXMuX21ldHJpY3Muc2xpY2UocmVxdWVzdFNpemVMaW1pdCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kTWV0cmljcyhtZXRyaWNzTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZW51bSBNZXRyaWNzVHlwZSB7XG4gIFRpbWVUb0ZpcnN0RnJhbWUsXG4gIENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gIFN0YWxsZWQsXG4gIEJ1ZmZlcmluZyxcbiAgU2V0dXBDb21wbGV0ZWQsXG4gIFNldHVwRmFpbGVkLFxuICBSb3VuZFRyaXBUaW1lLFxuICBEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgTmV0d29ya1R5cGUsXG4gIFJlc29sdXRpb25DaGFuZ2VkLFxuICBBcHBsaWNhdGlvbkZvcmVncm91bmQsXG4gIEFwcGxpY2F0aW9uQmFja2dyb3VuZFxufVxuXG5leHBvcnQgZGVmYXVsdCBNZXRyaWNzVHlwZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWwsIFRlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUxldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZSh0ZWxlbWV0cnlMZXZlbDogVGVsZW1ldHJ5TGV2ZWwpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDpcbiAgICAgICAgcmV0dXJuICdFc3NlbnRpYWwnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWxUeXBlOiBUZWxlbWV0cnlMZXZlbFR5cGUpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0ZWxlbWV0cnlMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZic6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5PZmY7XG4gICAgICBjYXNlICdFc3NlbnRpYWwnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlEZWZhdWx0IHtcbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbFtCdWlsZEZlYXR1cmVzLnNlbmRNZXRyaWNzXTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFByb21pc2VIYW5kbGVyIGZyb20gJy4vUHJvbWlzZUhhbmRsZXInO1xuXG5jbGFzcyBQcm9taXNlIHtcbiAgX3N0YXRlOiBudW1iZXI7XG4gIF9oYW5kbGVkOiBib29sZWFuO1xuICBfdmFsdWU6IFByb21pc2U7XG4gIF9kZWZlcnJlZHM6IEFycmF5PFByb21pc2VIYW5kbGVyPjtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtaWdub3JlXG4gIHRoZW4ob25GdWxmaWxsZWQ6IEZ1bmN0aW9uLCBvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKGNhbGxiYWNrKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9taXNlcyBtdXN0IGJlIGNvbnN0cnVjdGVkIHZpYSBuZXcnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdub3QgYSBmdW5jdGlvbicpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlID0gMDtcbiAgICB0aGlzLl9oYW5kbGVkID0gZmFsc2U7XG4gICAgdGhpcy5fdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZGVmZXJyZWRzID0gW107XG5cbiAgICB0aGlzLmRvUmVzb2x2ZShjYWxsYmFjayk7XG4gIH1cblxuICBkb1Jlc29sdmUoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgbGV0IGRvbmUgPSBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICBjYWxsYmFjayhcbiAgICAgICAgdmFsdWUgPT4ge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcm9taXNlUmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbiA9PiB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnByb21pc2VSZWplY3QocmVhc29uKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIHRoaXMucHJvbWlzZVJlamVjdChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJvbWlzZVJlc29sdmUobmV3VmFsdWU6IFByb21pc2UgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBjb25zdCBwcm9taXNlID0gdGhpcyBhcyBQcm9taXNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFByb21pc2UgUmVzb2x1dGlvbiBQcm9jZWR1cmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9Qcm9taXNlcy1hcGx1cy9Qcm9taXNlcy1zcGVjI3RoZS1Qcm9taXNlLXJlc29sdXRpb24tcHJvY2VkdXJlXG4gICAgICBpZiAobmV3VmFsdWUgPT09IHByb21pc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQSBQcm9taXNlIGNhbm5vdCBiZSByZXNvbHZlZCB3aXRoIGl0IHNlbGYuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdWYWx1ZSAmJiAodHlwZW9mIG5ld1ZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgbmV3VmFsdWUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgIGNvbnN0IHRoZW4gPSBuZXdWYWx1ZS50aGVuO1xuXG4gICAgICAgIGlmIChuZXdWYWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICBwcm9taXNlLl9zdGF0ZSA9IDM7XG4gICAgICAgICAgcHJvbWlzZS5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICBwcm9taXNlLmZpbmFsZSgpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcHJvbWlzZS5kb1Jlc29sdmUoZnVuY3Rpb24oKTogdm9pZCB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgICAgICB0aGVuLmFwcGx5KG5ld1ZhbHVlLCBhcmd1bWVudHMpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByb21pc2UuX3N0YXRlID0gMTtcbiAgICAgIHByb21pc2UuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICBwcm9taXNlLmZpbmFsZSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHByb21pc2UucHJvbWlzZVJlamVjdChlKTtcbiAgICB9XG4gIH1cblxuICBwcm9taXNlUmVqZWN0KG5ld1ZhbHVlOiBQcm9taXNlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5fc3RhdGUgPSAyO1xuICAgIHRoaXMuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgdGhpcy5maW5hbGUoKTtcbiAgfVxuXG4gIGZpbmFsZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fc3RhdGUgPT09IDIgJiYgdGhpcy5fZGVmZXJyZWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgUHJvbWlzZS5faW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9oYW5kbGVkKSB7XG4gICAgICAgICAgUHJvbWlzZS5fdW5oYW5kbGVkUmVqZWN0aW9uKHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuX2RlZmVycmVkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgdGhpcy5oYW5kbGUodGhpcy5fZGVmZXJyZWRzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWZlcnJlZHMgPSBudWxsO1xuICB9XG5cbiAgaGFuZGxlKGRlZmVycmVkOiBQcm9taXNlSGFuZGxlcik6IHZvaWQge1xuICAgIGxldCBwcm9taXNlID0gdGhpcyBhcyBQcm9taXNlO1xuXG4gICAgd2hpbGUgKHByb21pc2UuX3N0YXRlID09PSAzKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS5fdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHByb21pc2UuX3N0YXRlID09PSAwKSB7XG4gICAgICBwcm9taXNlLl9kZWZlcnJlZHMucHVzaChkZWZlcnJlZCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcm9taXNlLl9oYW5kbGVkID0gdHJ1ZTtcbiAgICBQcm9taXNlLl9pbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2sgPSBwcm9taXNlLl9zdGF0ZSA9PT0gMSA/IGRlZmVycmVkLm9uRnVsZmlsbGVkIDogZGVmZXJyZWQub25SZWplY3RlZDtcblxuICAgICAgaWYgKGNhbGxiYWNrID09PSBudWxsKSB7XG4gICAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gMSkge1xuICAgICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlc29sdmUocHJvbWlzZS5fdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlamVjdChwcm9taXNlLl92YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCByZXN1bHQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKHByb21pc2UuX3ZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVqZWN0KGUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVzb2x2ZShyZXN1bHQpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFsbChhcnI6IEFycmF5PFByb21pc2U+KTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS5hbGwgYWNjZXB0cyBhbiBhcnJheScpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycik7XG5cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZShbXSk7XG4gICAgICB9XG5cbiAgICAgIGxldCByZW1haW5pbmcgPSBhcmdzLmxlbmd0aDtcbiAgICAgIGNvbnN0IG1hbmFnZVJlc3BvbnNlID0gKGksIHZhbHVlKTogdm9pZCA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHZhbHVlICYmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHRoZW4gPSB2YWx1ZS50aGVuO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgdGhlbi5jYWxsKFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHZhbHVlID0+IG1hbmFnZVJlc3BvbnNlKGksIHZhbHVlKSxcbiAgICAgICAgICAgICAgICByZWplY3RcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXJnc1tpXSA9IHZhbHVlO1xuXG4gICAgICAgICAgaWYgKC0tcmVtYWluaW5nID09PSAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKGFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbWFuYWdlUmVzcG9uc2UoaSwgYXJnc1tpXSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgcmVzb2x2ZSh2YWx1ZSk6IFByb21pc2Uge1xuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmNvbnN0cnVjdG9yID09PSBQcm9taXNlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gcmVzb2x2ZSh2YWx1ZSkpO1xuICB9XG5cbiAgc3RhdGljIHJlamVjdCh2YWx1ZSk6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiByZWplY3QodmFsdWUpKTtcbiAgfVxuXG4gIHN0YXRpYyByYWNlKGFycjogQXJyYXk8UHJvbWlzZT4pOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgVHlwZUVycm9yKCdQcm9taXNlLnJhY2UgYWNjZXB0cyBhbiBhcnJheScpKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGFyci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoYXJyW2ldKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgX2ltbWVkaWF0ZShjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCBpZ25vcmVkID0gc2V0VGltZW91dChjYWxsYmFjaywgMCk7XG4gIH1cblxuICBzdGF0aWMgX3VuaGFuZGxlZFJlamVjdGlvbihlcnJvcik6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZSkge1xuICAgICAgY29uc29sZS53YXJuKCdQb3NzaWJsZSBVbmhhbmRsZWQgUHJvbWlzZSBSZWplY3Rpb246JywgZXJyb3IpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICB9XG4gIH1cbn1cblxuUHJvbWlzZS5wcm90b3R5cGVbJ2NhdGNoJ10gPSBmdW5jdGlvbihvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlWyd0aGVuJ10gPSBmdW5jdGlvbihvbkZ1bGZpbGxlZDogRnVuY3Rpb24sIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICBjb25zdCBwcm9taXNlID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKCkgPT4gbnVsbCk7XG5cbiAgdGhpcy5oYW5kbGUobmV3IFByb21pc2VIYW5kbGVyKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9taXNlKSk7XG5cbiAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZVsnZmluYWxseSddID0gZnVuY3Rpb24oY2FsbGJhY2s6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICBjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICB2YWx1ZSA9PiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oKCkgPT4gdmFsdWUpLFxuICAgIHJlYXNvbiA9PiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oKCkgPT4gY29uc3RydWN0b3IucmVqZWN0KHJlYXNvbikpXG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBQcm9taXNlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFByb21pc2UgZnJvbSAnLi9Qcm9taXNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvbWlzZUhhbmRsZXIge1xuICBvbkZ1bGZpbGxlZDogRnVuY3Rpb247XG4gIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uO1xuICBwcm9taXNlOiBQcm9taXNlO1xuXG4gIGNvbnN0cnVjdG9yKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9taXNlKSB7XG4gICAgdGhpcy5vbkZ1bGZpbGxlZCA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogbnVsbDtcbiAgICB0aGlzLm9uUmVqZWN0ZWQgPSB0eXBlb2Ygb25SZWplY3RlZCA9PT0gJ2Z1bmN0aW9uJyA/IG9uUmVqZWN0ZWQgOiBudWxsO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdCB7XG4gIGF1ZGlvVHJhbnNjZWl2ZXI/OiBSVENSdHBUcmFuc2NlaXZlcjtcbiAgdmlkZW9UcmFuc2NlaXZlcj86IFJUQ1J0cFRyYW5zY2VpdmVyO1xuICBwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uO1xuICBsb2NhbE9mZmVyOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZWVyQ29ubmVjdGlvblNlcnZpY2Uge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1BlZXJDb25uZWN0aW9uU2VydmljZScpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcGVlckNvbm5lY3Rpb25GYWN0b3J5OiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4obmV3IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkoKSk7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZWQ6IHtcbiAgICBkaXJlY3Rpb24/OiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjtcbiAgICBwZWVyQ29ubmVjdGlvbjogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+O1xuICB9O1xuXG4gIHN0YXRpYyBnZXQgcGVlckNvbm5lY3Rpb25GYWN0b3J5KCk6IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4ge1xuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX3BlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgfVxuXG4gIHN0YXRpYyBpbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nKCk6IHZvaWQge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc1ByZWNhY2hpbmdFbmFibGVkKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgICAgIC5jYXRjaChlID0+IFBlZXJDb25uZWN0aW9uU2VydmljZS5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHJlLWNhY2hlIHBlZXIgY29ubmVjdGlvbiBvZmZlcicsIGUpKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKCk6IFByb21pc2U8eyBwZWVyQ29ubmVjdGlvbjogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQgfCB2b2lkPjsgZGlyZWN0aW9uOiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiB9PiB7XG4gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0ge1xuICAgICAgZGlyZWN0aW9uOiAncmVjdm9ubHknLFxuICAgICAgcGVlckNvbm5lY3Rpb246IFBlZXJDb25uZWN0aW9uU2VydmljZS5jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKClcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0gbnVsbDtcblxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKGRpcmVjdGlvbjogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gPSAncmVjdm9ubHknKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+IHtcbiAgICBpZiAoUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgJiYgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQuZGlyZWN0aW9uID09PSBkaXJlY3Rpb24pIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQucGVlckNvbm5lY3Rpb247XG5cbiAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0gbnVsbDtcblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX3BlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZS5jcmVhdGVQZWVyQ29ubmVjdGlvbigpXG4gICAgICAudGhlbihhc3luYyBwZWVyQ29ubmVjdGlvbiA9PiB7XG4gICAgICAgIGNvbnN0IHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0FkZFRyYW5zY2VpdmVyO1xuICAgICAgICBsZXQgdmlkZW9UcmFuc2NlaXZlciwgYXVkaW9UcmFuc2NlaXZlcjtcblxuICAgICAgICBpZiAoc3VwcG9ydHNBZGRUcmFuc2NlaXZlcikge1xuICAgICAgICAgIGF1ZGlvVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcignYXVkaW8nLCB7ZGlyZWN0aW9ufSk7XG4gICAgICAgICAgdmlkZW9UcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKCd2aWRlbycsIHtkaXJlY3Rpb259KTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhdWRpb1RyYW5zY2VpdmVyLFxuICAgICAgICAgICAgdmlkZW9UcmFuc2NlaXZlcixcbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uOiBwZWVyQ29ubmVjdGlvbixcbiAgICAgICAgICAgIGxvY2FsT2ZmZXI6IGF3YWl0IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHVuZGVmaW5lZClcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGRpcmVjdGlvbiA9PT0gJ3JlY3Zvbmx5JyA/IHtcbiAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiB0cnVlLFxuICAgICAgICAgIG9mZmVyVG9SZWNlaXZlVmlkZW86IHRydWVcbiAgICAgICAgfSA6IHt9O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb246IHBlZXJDb25uZWN0aW9uLFxuICAgICAgICAgIGxvY2FsT2ZmZXI6IGF3YWl0IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKG9wdGlvbnMpXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQZWVyQ29ubmVjdGlvblNlcnZpY2UgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cblBlZXJDb25uZWN0aW9uU2VydmljZS5pbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdGNDb25maWd1cmF0aW9uTWFuYWdlciB7XG4gIHN0YXRpYyB0cnVuY2F0ZUljZVNlcnZlcnMoY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdXJsczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDI7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgdXJsID0gY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHNbaW5kZXhdO1xuXG4gICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICB1cmxzLnB1c2goY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHNbaW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpY2VTZXJ2ZXJzLnB1c2goe1xuICAgICAgICB1cmxzOiB1cmxzLFxuICAgICAgICB1c2VybmFtZTogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICBjcmVkZW50aWFsOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0uY3JlZGVudGlhbFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzID0gaWNlU2VydmVycztcblxuICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1J0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgU2RwUGFyc2VyIGZyb20gJy4vU2RwUGFyc2VyJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGludGVyZmFjZSBJUnRjTW9uaXRvclN0YXRpc3RpYyB7XG4gIFtraW5kOiBzdHJpbmddOiBJUnRjU3RhdGlzdGljO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdhY3lSVENTdGF0c1JlcG9ydCB7XG4gIHJlc3VsdDogKCkgPT4gSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdhY3lSVENTdGF0c1JlcG9ydEl0ZW0gZXh0ZW5kcyBSVENTdGF0c1JlcG9ydCB7XG4gIHR5cGU6IHN0cmluZztcbiAgbmFtZXM6ICgpID0+IHN0cmluZ1tdO1xuICBzdGF0OiAobmFtZSkgPT4gbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNTdGF0aXN0aWMge1xuICBzc3JjPzogc3RyaW5nO1xuICBtZWRpYVR5cGU/OiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBiaXRyYXRlPzogbnVtYmVyO1xuICBieXRlc1JlY2VpdmVkPzogbnVtYmVyO1xuICBmcmFtZXNEZWNvZGVkPzogbnVtYmVyO1xuICBwYWNrZXRzTG9zdD86IG51bWJlcjtcbiAgcGFja2V0c1JlY2VpdmVkPzogbnVtYmVyO1xuICBjb2RlYz86IHN0cmluZztcbiAgZnBzPzogbnVtYmVyO1xuICByb3VuZFRyaXBUaW1lPzogbnVtYmVyO1xuICBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA/OiBudW1iZXI7XG59XG5cbmNvbnN0IHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQgPSAxMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdGNDb25uZWN0aW9uTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkUm91bmRUcmlwVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRWaWRlb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZEF1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfcnRjU3RhdGlzdGljOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih7fSk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIHByaXZhdGUgX2lzTW9uaXRvclJ1bm5pbmcgPSB0cnVlO1xuICBwcml2YXRlIF91cGRhdGVUaW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX3RyYWNrc1RvTW9uaXRvcjogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtLCBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IHBlZXJDb25uZWN0aW9uO1xuICAgIHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUgPSBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuICAgIHRoaXMuX3RyYWNrc1RvTW9uaXRvciA9IG1lZGlhU3RyZWFtLmdldFRyYWNrcygpLm1hcCh0cmFjayA9PiB0cmFjay5raW5kKSB8fCBbXTtcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5nZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCkge1xuICAgICAgICBjb25zdCBwYXJzZWRTRFAgPSBuZXcgU2RwUGFyc2VyKHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWMgPSBwYXJzZWRTRFAuYXVkaW9Db2RlYztcbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYyA9IHBhcnNlZFNEUC52aWRlb0NvZGVjO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWMoKTogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9ydGNTdGF0aXN0aWM7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5fdXBkYXRlVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3VwZGF0ZVRpbWVvdXQpO1xuICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLnVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2FmYXJpIDExIGRvZXNudCBoYXZlIGtpbmQgb3IgbWVkaWFUeXBlIHNvIHdlIG5lZWQgdG8gdGFrZSBpdCBmcm9tIHRoZSBpbmJvdW5kLXJ0cCBvYmplY3QgaWRcbiAgICBjb25zdCBnZXRLaW5kRm9yU2FmYXJpMTEgPSAoaXRlbSk6IHN0cmluZyA9PiBpdGVtLmlkLmluY2x1ZGVzKCdBdWRpbycpID8gJ2F1ZGlvJyA6IGl0ZW0uaWQuaW5jbHVkZXMoJ1ZpZGVvJykgPyAndmlkZW8nIDogJyc7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKG51bGwpXG4gICAgICAudGhlbihzdGF0cyA9PiB7XG4gICAgICAgIGNvbnN0IHJ0Y1N0YXRpc3RpY3M6IElSdGNNb25pdG9yU3RhdGlzdGljID0ge307XG5cbiAgICAgICAgaWYgKHN0YXRzKSB7XG4gICAgICAgICAgbGV0IHJvdW5kVHJpcFRpbWUgPSB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuICAgICAgICAgIGxldCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG5cbiAgICAgICAgICBzdGF0cy5mb3JFYWNoKHJlcG9ydCA9PiB7XG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicgJiYgcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lKSB7XG4gICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWUgPSByZXBvcnQuY3VycmVudFJvdW5kVHJpcFRpbWUgKiAxMDAwO1xuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1snYXVkaW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1sndmlkZW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicgJiYgcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1snYXVkaW8nXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1sndmlkZW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2luYm91bmQtcnRwJykge1xuICAgICAgICAgICAgICBjb25zdCBraW5kID0gcmVwb3J0LmtpbmQgfHwgcmVwb3J0Lm1lZGlhVHlwZSB8fCBnZXRLaW5kRm9yU2FmYXJpMTEocmVwb3J0KTtcbiAgICAgICAgICAgICAgbGV0IGNvZGVjID0gJyc7XG5cbiAgICAgICAgICAgICAgc3RhdHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZCA9PT0gcmVwb3J0LmNvZGVjSWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvZGVjID0gaXRlbS5taW1lVHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmIChraW5kICYmIHRoaXMuX3RyYWNrc1RvTW9uaXRvci5pbmNsdWRlcyhraW5kKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gcmVwb3J0LmJ5dGVzUmVjZWl2ZWQgfHwgMDtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0J5dGVzUmVjZWl2ZWQgPSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LltraW5kXT8uYnl0ZXNSZWNlaXZlZCA/PyAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzRGVsdGEgPSBieXRlcyAtIHByZXZpb3VzQnl0ZXNSZWNlaXZlZDtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lRGVsdGEgPSByZXBvcnQudGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlPy5ba2luZF0/LnRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICBjb25zdCBiaXRyYXRlID0gYnl0ZXNEZWx0YSAmJiB0aW1lRGVsdGEgPyBNYXRoLmZsb29yKDggKiBieXRlc0RlbHRhIC9cbiAgICAgICAgICAgICAgICAgIHRpbWVEZWx0YSAqIDEwMDApIDogMDtcblxuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF0gPSB7XG4gICAgICAgICAgICAgICAgICBzc3JjOiByZXBvcnQuc3NyYyxcbiAgICAgICAgICAgICAgICAgIG1lZGlhVHlwZToga2luZCxcbiAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogcmVwb3J0LnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICAgIGJpdHJhdGUsXG4gICAgICAgICAgICAgICAgICBieXRlc1JlY2VpdmVkOiByZXBvcnQuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNMb3N0OiByZXBvcnQucGFja2V0c0xvc3QsXG4gICAgICAgICAgICAgICAgICBwYWNrZXRzUmVjZWl2ZWQ6IHJlcG9ydC5wYWNrZXRzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICBjb2RlYzogY29kZWMgfHwgdGhpcy5nZXRDb2RlY0J5VHlwZShraW5kKSxcbiAgICAgICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWVcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgfHwgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgfHwgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChraW5kID09PSAndmlkZW8nICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2ZyYW1lc0RlY29kZWQnXSA9IHJlcG9ydC5mcmFtZXNEZWNvZGVkO1xuXG4gICAgICAgICAgICAgICAgICBjb25zdCBmcHMgPSAocmVwb3J0LmZyYW1lc0RlY29kZWQgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8uZnJhbWVzRGVjb2RlZCkgL1xuICAgICAgICAgICAgICAgICAgICAocnRjU3RhdGlzdGljc1traW5kXS50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8udGltZXN0YW1wKSAqXG4gICAgICAgICAgICAgICAgICAgIDEwMDA7XG5cbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2ZwcyddID0gZnBzID8gTWF0aC5yb3VuZChmcHMgKiAxMDApIC8gMTAwIDogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSA9IHJ0Y1N0YXRpc3RpY3M7XG4gICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcpIHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVTdGF0aXN0aWMoKSwgdXBkYXRlU3RhdGlzdGljVGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWNMZWdhY3koKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzTGVnYWN5KCkudGhlbihzdGF0cyA9PiB7XG4gICAgICBjb25zdCBydGNTdGF0aXN0aWNzOiBJUnRjTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuICAgICAgbGV0IHJvdW5kVHJpcFRpbWUgPSB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuXG4gICAgICBzdGF0cy5yZXN1bHQoKS5mb3JFYWNoKHJlcG9ydCA9PiB7XG4gICAgICAgIHJlcG9ydC5uYW1lcygpLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgICAgaWYgKG5hbWUgPT09ICdnb29nUlRUJykge1xuICAgICAgICAgICAgcm91bmRUcmlwVGltZSA9IHJlcG9ydC5zdGF0KG5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnc3NyYycpIHtcbiAgICAgICAgICBjb25zdCBtZWRpYVR5cGUgPSByZXBvcnQuc3RhdCgnbWVkaWFUeXBlJykudG9TdHJpbmcoKTtcblxuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXSA9IHt0aW1lc3RhbXA6IERhdGUubm93KCl9O1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnc3NyYyddID0gcmVwb3J0LnN0YXQoJ3NzcmMnKS50b1N0cmluZygpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnbWVkaWFUeXBlJ10gPSBtZWRpYVR5cGU7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydieXRlc1JlY2VpdmVkJ10gPSByZXBvcnQuc3RhdCgnYnl0ZXNSZWNlaXZlZCcpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsncGFja2V0c0xvc3QnXSA9IHJlcG9ydC5zdGF0KCdwYWNrZXRzTG9zdCcpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsncGFja2V0c1JlY2VpdmVkJ10gPSByZXBvcnQuc3RhdCgncGFja2V0c1JlY2VpdmVkJyk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydjb2RlYyddID0gcmVwb3J0LnN0YXQoJ2dvb2dDb2RlY05hbWUnKS50b1N0cmluZygpIHx8IHRoaXMuZ2V0Q29kZWNCeVR5cGUobWVkaWFUeXBlKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3JvdW5kVHJpcFRpbWUnXSA9IHJvdW5kVHJpcFRpbWU7XG5cbiAgICAgICAgICBpZiAobWVkaWFUeXBlID09PSAndmlkZW8nICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8pIHtcbiAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnZnJhbWVzRGVjb2RlZCddID0gcmVwb3J0LnN0YXQoJ2ZyYW1lc0RlY29kZWQnKTtcbiAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnZnBzJ10gPSAocnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdLmZyYW1lc0RlY29kZWQgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8uZnJhbWVzRGVjb2RlZCkgL1xuICAgICAgICAgICAgICAocnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdLnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby50aW1lc3RhbXApICpcbiAgICAgICAgICAgIDEwMDAgfHwgMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlID0gcnRjU3RhdGlzdGljcztcbiAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc01vbml0b3JSdW5uaW5nKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29kZWNCeVR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWM7XG4gICAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2RwUGFyc2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2RwOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0F1ZGlvVHJhY2tFbmFibGVkOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc1ZpZGVvVHJhY2tFbmFibGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHNkcDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2RwID0gc2RwO1xuXG4gICAgY29uc3Qgc2RwU3BsaXRCeUxpbmVzID0gdGhpcy5fc2RwLnNwbGl0KC8oXFxyXFxufFxccnxcXG4pLyk7XG4gICAgY29uc3Qgc2RwU3BsaXRCeVRyYWNrcyA9IHRoaXMuX3NkcC5zcGxpdCgnbT0nKTtcblxuICAgIHRoaXMuX2F1ZGlvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ2F1ZGlvJywgc2RwU3BsaXRCeUxpbmVzKTtcbiAgICB0aGlzLl92aWRlb0NvZGVjID0gdGhpcy5hcHBseUNvZGVjKCd2aWRlbycsIHNkcFNwbGl0QnlMaW5lcyk7XG4gICAgdGhpcy5faXNBdWRpb1RyYWNrRW5hYmxlZCA9IHRoaXMuaXNUcmFja0J5VHlwZUVuYWJsZWQoJ2F1ZGlvJywgc2RwU3BsaXRCeVRyYWNrcyk7XG4gICAgdGhpcy5faXNWaWRlb1RyYWNrRW5hYmxlZCA9IHRoaXMuaXNUcmFja0J5VHlwZUVuYWJsZWQoJ3ZpZGVvJywgc2RwU3BsaXRCeVRyYWNrcyk7XG4gIH1cblxuICBnZXQgYXVkaW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hdWRpb0NvZGVjO1xuICB9XG5cbiAgZ2V0IHZpZGVvQ29kZWMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdmlkZW9Db2RlYztcbiAgfVxuXG4gIGdldCBpc0F1ZGlvVHJhY2tFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0F1ZGlvVHJhY2tFbmFibGVkO1xuICB9XG5cbiAgZ2V0IGlzVmlkZW9UcmFja0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzVmlkZW9UcmFja0VuYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzVHJhY2tCeVR5cGVFbmFibGVkKHR5cGU6IHN0cmluZywgc2RwU3BsaXRCeVRyYWNrczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBzZHBTZWN0aW9uRm9yVHlwZSA9IHNkcFNwbGl0QnlUcmFja3MuZmluZChzZHBUcmFjayA9PiBzZHBUcmFjay5zdGFydHNXaXRoKHR5cGUpKTtcblxuICAgIGlmICghc2RwU2VjdGlvbkZvclR5cGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gIXNkcFNlY3Rpb25Gb3JUeXBlLmluY2x1ZGVzKGBhPWluYWN0aXZlYCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Q29kZWModHlwZTogc3RyaW5nLCBzZHBTcGxpdEJ5TGluZXM6IHN0cmluZyBbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgdXNlZENvZGVjTGluZSA9IHNkcFNwbGl0QnlMaW5lcy5maW5kKHNkcExpbmUgPT4gc2RwTGluZS5pbmNsdWRlcyhgYT1ydHBtYXA6JHtzZHBTcGxpdEJ5TGluZXMuZmluZChpID0+IGkuaW5jbHVkZXMoYG09JHt0eXBlfWApKS5zcGxpdCgnICcpWzNdfWApKTtcbiAgICBjb25zdCB1c2VkQ29kZWMgPSB1c2VkQ29kZWNMaW5lLnNwbGl0KCcgJylbMV07XG4gICAgY29uc3QgY29kZWNOYW1lID0gdXNlZENvZGVjLnNwbGl0KCcvJylbMF07XG5cbiAgICByZXR1cm4gY29kZWNOYW1lO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uLCB7UGVlckNvbm5lY3Rpb25FdmVudHN9IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IHtJTGVnYWN5UlRDU3RhdHNSZXBvcnR9IGZyb20gJy4vUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuXG5jbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb24gaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb24ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignVmFuaWxsYVBlZXJDb25uZWN0aW9uJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uOiBSVENQZWVyQ29ubmVjdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihjb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbikge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC53ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uIGNsYXNzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFRoaXMgd2FzIGEgQ2hyb21lIHNwZWNpZmljIGltcGxlbWVudGF0aW9uXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBuZXcgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyBSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGdldCBuYXRpdmUoKTogUlRDUGVlckNvbm5lY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbigpOiBSVENTZXNzaW9uRGVzY3JpcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uKCk6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgaWNlQ29ubmVjdGlvblN0YXRlKCk6IFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZTtcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNBZGRUcmFuc2NlaXZlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIUZlYXR1cmVFbmFibGVtZW50LmFkZFRyYW5jZWl2ZXJEaXNhYmxlZCAmJiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBhc3luYyBjcmVhdGVPZmZlcihvcHRpb25zPzogUlRDT2ZmZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSBjcmVhdGVPZmZlciBtZXRob2Qgd2l0aCBjYWxsYmFja3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihyZXNvbHZlLCByZWplY3QsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVBbnN3ZXIob3B0aW9ucz86IFJUQ0Fuc3dlck9wdGlvbnMpOiBQcm9taXNlPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IGNyZWF0ZUFuc3dlciBtZXRob2Qgd2l0aCBjYWxsYmFja3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcihvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIHNldExvY2FsRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCA/XG4gICAgICBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6IGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGFzeW5jIHNldFJlbW90ZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaGFzQ3J5cHRvID0gZGVzY3JpcHRpb24uc2RwPy5tYXRjaCgvYT1jcnlwdG86L2kpO1xuXG4gICAgaWYgKGhhc0NyeXB0bykge1xuICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1NEUCBhPWNyeXB0byBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkID9cbiAgICAgIG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIDogZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgZ2V0U2VuZGVycygpOiBSVENSdHBTZW5kZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFNlbmRlcnMoKTtcbiAgfVxuXG4gIGdldFN0YXRzKHNlbGVjdG9yPzogTWVkaWFTdHJlYW1UcmFjayB8IG51bGwpOiBQcm9taXNlPFJUQ1N0YXRzUmVwb3J0PiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKHNlbGVjdG9yKTtcbiAgfVxuXG4gIGdldFN0YXRzTGVnYWN5KCk6IFByb21pc2U8SUxlZ2FjeVJUQ1N0YXRzUmVwb3J0PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgLy8gSWdub3JlZCBkdWUgdG8gdHlwZXNjcmlwdCBub3QgaGF2aW5nIGxlZ2FjeSAnZ2V0U3RhdHMnIG1ldGhvZCB0eXBlIGRlZmluaXRpb25cbiAgICAgIC8vIFRoaXMgd2FzIGEgQ2hyb21lIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIHRoZSAnZ2V0U3RhdHMnIG1ldGhvZCBmb3JcbiAgICAgIC8vIENocm9tZUA8PSA2NiBkZXRhaWxlZCBoZXJlOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02Mjc4MTZcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMocmVzb2x2ZSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRFdmVudExpc3RlbmVyKHR5cGU6IFBlZXJDb25uZWN0aW9uRXZlbnRzLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlOiBQZWVyQ29ubmVjdGlvbkV2ZW50cywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM/OiBib29sZWFuIHwgRXZlbnRMaXN0ZW5lck9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFkZFRyYW5zY2VpdmVyKG5hbWU6IHN0cmluZywgb3B0aW9uczogUlRDUnRwVHJhbnNjZWl2ZXJJbml0KTogUlRDUnRwVHJhbnNjZWl2ZXIge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcihuYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0pOiB2b2lkIHtcbiAgICBtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYWNrKHRyYWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENvbmZpZ3VyYXRpb24oKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKTtcbiAgfVxuXG4gIHNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzZXQgb250cmFjayhoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub250cmFjayA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb250cmFjaygpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub250cmFjaztcbiAgfVxuXG4gIHNldCBvbmljZWNhbmRpZGF0ZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uaWNlY2FuZGlkYXRlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZTtcbiAgfVxuXG4gIHNldCBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlO1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb247IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBWYW5pbGxhUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9WYW5pbGxhUGVlckNvbm5lY3Rpb24nO1xuXG5jbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSB7XG4gIGFzeW5jIGNyZWF0ZVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gbmV3IFZhbmlsbGFQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuL1N1YmplY3QnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkT25seVN1YmplY3Q8VD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJqZWN0OiBTdWJqZWN0PFQ+O1xuXG4gIGNvbnN0cnVjdG9yKHN1YmplY3Q6IFN1YmplY3Q8VD4pIHtcbiAgICB0aGlzLl9zdWJqZWN0ID0gc3ViamVjdDtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKGxpc3RlbmVyKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5jbGFzcyBEaXNwb3NhYmxlTGlzdGVuZXI8VD4gZXh0ZW5kcyBEaXNwb3NhYmxlIHtcbiAgY29uc3RydWN0b3IobGlzdGVuZXJzOiBBcnJheTxUPiwgbGlzdGVuZXI6IFQpIHtcbiAgICBzdXBlcigoKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBsaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG5cbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyczogQXJyYXk8KFQpID0+IHZvaWQ+O1xuICBwcml2YXRlIF92YWx1ZTogVDtcblxuICBjb25zdHJ1Y3Rvcih2YWx1ZTogVCkge1xuICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUodmFsdWU6IFQpIHtcbiAgICBsZXQgY2hhbmdlZCA9IHRoaXMuX3ZhbHVlICE9PSB2YWx1ZTtcblxuICAgIGlmIChjaGFuZ2VkICYmIHZhbHVlKSB7XG4gICAgICBjb25zdCBjb21wYXJhYmxlID0gdmFsdWUgYXMgdW5rbm93biBhcyBJQ29tcGFyYWJsZTxUPjtcblxuICAgICAgaWYgKHR5cGVvZiBjb21wYXJhYmxlLmVxdWFscyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjaGFuZ2VkID0gIWNvbXBhcmFibGUuZXF1YWxzKHRoaXMuX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWNoYW5nZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuXG4gICAgdGhpcy5fbGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4ge1xuICAgICAgbGlzdGVuZXIodmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgbGlzdGVuZXIodGhpcy5fdmFsdWUpO1xuXG4gICAgcmV0dXJuIG5ldyBEaXNwb3NhYmxlTGlzdGVuZXI8KFQpID0+IHZvaWQ+KHRoaXMuX2xpc3RlbmVycywgbGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVudmlyb25tZW50IHtcbiAgc3RhdGljIGdldEVudmlyb25tZW50RnJvbVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhc2VVUkwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICAgIHJldHVybiBiYXNlVVJMLm9yaWdpbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgU3RyaW5ncyBmcm9tICcuLi9sYW5nL1N0cmluZ3MnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsLCBMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi4vbG9nZ2VyL0NvbnNvbGVBcHBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5QXBwZW5kZXIgZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXInO1xuaW1wb3J0IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgZnJvbSAnLi4vZG9tL0NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXInO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWwsIFRlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2luZ0xldmVsTWFwcGluZyBmcm9tICcuLi9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZyc7XG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5pbXBvcnQge0lDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyfSBmcm9tICcuLi9kb20vSUNvbmZpZ3VyYXRpb25QYXJhbWF0ZXJSZWFkZXInO1xuaW1wb3J0IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIGZyb20gJy4uL2RvbS9BcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuLi9ydGMvSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGZyb20gJy4uL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi9FbnZpcm9ubWVudCc7XG5pbXBvcnQge0hsc1BsYXllclR5cGUsIFNoYWthVHlwZSwgV2ViUGxheWVyVHlwZX0gZnJvbSAnLi9zdHJlYW1pbmcvU3RyZWFtVHlwZXMnO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0JztcblxuY29uc3QgcGFnZUxvYWRUaW1lID0gd2luZG93WydfX3BoZW5peFBhZ2VMb2FkVGltZSddIHx8IHdpbmRvd1snX19wYWdlTG9hZFRpbWUnXSB8fCBEYXRlLm5vdygpO1xuXG5pbnRlcmZhY2UgSUluaXRPcHRpb25zIHtcbiAgZGlzY292ZXJ5VXJpPzogc3RyaW5nO1xuICBwZWVyQ29ubmVjdGlvbkZhY3Rvcnk/OiBJUGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB0ZWxlbWV0cnlMZXZlbD86IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgbG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsVHlwZTtcbiAgY29uc29sZUxvZ2dpbmdMZXZlbD86IExvZ2dpbmdMZXZlbFR5cGU7XG4gIGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0/OiBib29sZWFuO1xuICBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZT86IGJvb2xlYW47XG4gIHdlYlBsYXllckxvYWRlcj86IChwbGF5ZXI6IFdlYlBsYXllclR5cGUpID0+IHZvaWQ7XG4gIHNoYWthUGxheWVyTG9hZGVyPzogKHBsYXllcjogU2hha2FUeXBlKSA9PiB2b2lkO1xuICBobHNKc0xvYWRlcj86IChwbGF5ZXI6IEhsc1BsYXllclR5cGUpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNESyB7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfd2ViUGxheWVyTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NoYWthUGxheWVyTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX2hsc0pzTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXI6IElDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyID0gbmV3IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yOiBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgcHJpdmF0ZSBzdGF0aWMgX2Vudmlyb25tZW50OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeVVybDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSA4O1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5TGV2ZWw6IFN1YmplY3Q8VGVsZW1ldHJ5TGV2ZWw+ID0gbmV3IFN1YmplY3Q8VGVsZW1ldHJ5TGV2ZWw+KFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3NlbmRMb2NhbENhbmRpZGF0ZXM6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdChCdWlsZEZlYXR1cmVzLnNlbmRMb2NhbENhbmRpZGF0ZXMpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfdGVuYW5jeTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9jbGllbnRTZXNzaW9uSWQ6IHN0cmluZyA9IFN0cmluZ3MucmFuZG9tKDMyKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvYWRlZFRpbWVzdGFtcDogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU0RLJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pbml0aWFsaXplZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5SW5pdGlhbGl6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4oU0RLLl9pbml0aWFsaXplZCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seURpc2NvdmVyeVVyaTogUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4oRGlzY292ZXJ5VXJpLnVyaSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PihQZWVyQ29ubmVjdGlvblNlcnZpY2UucGVlckNvbm5lY3Rpb25GYWN0b3J5KTtcblxuICBzdGF0aWMgZ2V0IHBhZ2VMb2FkVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRMb2NhbENhbmRpZGF0ZXMoKTogU3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbmFuY3koKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgY2xpZW50U2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNESy5fY2xpZW50U2Vzc2lvbklkO1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2FkZWRUaW1lc3RhbXAoKTogRGF0ZSB7XG4gICAgcmV0dXJuIFNESy5fbG9hZGVkVGltZXN0YW1wO1xuICB9XG5cbiAgc3RhdGljIGdldCBpbml0aWFsaXplZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5SW5pdGlhbGl6ZWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRpc2NvdmVyeVVyaSgpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlEaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHdlYlBsYXllckxvYWRlcigpOiAoV2ViUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dlYlBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hha2FQbGF5ZXJMb2FkZXIoKTogKFNoYWthVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBobHNKc0xvYWRlcigpOiAoSGxzUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc0pzTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBtZXRyaWNzU2VydmljZSgpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgcmV0dXJuIFNESy5fbWV0cmljc1NlcnZpY2U7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeVVybCgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZWxlbWV0cnlVcmw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cztcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyhyZXRyaWVzQW1vdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gcmV0cmllc0Ftb3VudDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUodGhpcy5fbG9nZ2VyLnRocmVzaG9sZC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3NlckRldGVjdG9yKCk6IEJyb3dzZXJEZXRlY3RvciB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IExvZ2dlckZhY3RvcnkudGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcblxuICAgIGNvbnN0IGlnbm9yZWRFbnZpcm9ubWVudCA9IFNESy5fZW52aXJvbm1lbnQuc3Vic2NyaWJlKGVudmlyb25tZW50ID0+IHtcbiAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkRGlzY292ZXJ5VXJpID0gU0RLLnRlbGVtZXRyeVVybC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgY29uc3QgdGVsZW1ldHJ5QXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBUZWxlbWV0cnlBcHBlbmRlcik7XG5cbiAgICAgIGlmICh0ZWxlbWV0cnlBcHBlbmRlcikge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSBVUkwgd2FzIHNldCB0byBbJXNdJywgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIgJiYgdGVuYW5jeSkge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kgPSB0ZW5hbmN5O1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSB0ZW5hbmN5IHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSk7XG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IFNESy5fbWV0cmljc1NlcnZpY2UubWV0cmljc0NvbmZpZ3VyYXRpb247XG5cbiAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gdmFsdWU7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZFRlbmFuY3kgPSBTREsuX3RlbmFuY3kuc3Vic2NyaWJlKHRlbmFuY3kgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1tZXRyaWNzLWxldmVsJyk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKFRlbGVtZXRyeUxldmVsW3ZhbHVlXSk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZFRlbGVtZXRyeUxldmVsID0gU0RLLl90ZWxlbWV0cnlMZXZlbC5zdWJzY3JpYmUodGVsZW1ldHJ5TGV2ZWwgPT4ge1xuICAgICAgTWV0cmljc0ZhY3Rvcnkuc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWwpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZXRyeSBvbiBmYWlsdXJlIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbicpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuZGlzY292ZXJ5VXJpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsudGVsZW1ldHJ5VXJsLnZhbHVlID0gU0RLLmdldFRlbGVtZXRyeVVybCh2YWx1ZSk7XG4gICAgICBTREsuX2Vudmlyb25tZW50LnZhbHVlID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHZhbHVlKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNoYW5uZWxUb2tlbiA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1jaGFubmVsLXRva2VuJyk7XG5cbiAgICBpZiAoY2hhbm5lbFRva2VuKSB7XG4gICAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKGNoYW5uZWxUb2tlbik7XG5cbiAgICAgIFNESy5fdGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5O1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVyaVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LXVyaScpO1xuXG4gICAgaWYgKHVyaVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gdXJpVmFsdWU7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZVVSSVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWJhc2UtdXJpJyk7XG5cbiAgICBpZiAoYmFzZVVSSVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gYCR7YmFzZVVSSVZhbHVlfS9wY2FzdC9lbmRQb2ludHNgO1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gXCJwaGVuaXgtYmFzZS11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGluaXQob3B0aW9ucz86IElJbml0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gbmV3IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmRpc2NvdmVyeVVyaSkge1xuICAgICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gb3B0aW9ucy5kaXNjb3ZlcnlVcmk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeSkge1xuICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlID0gb3B0aW9ucy5wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnRlbGVtZXRyeUxldmVsICYmIFRlbGVtZXRyeUxldmVsW29wdGlvbnMudGVsZW1ldHJ5TGV2ZWxdKSB7XG4gICAgICAgIFNESy5fdGVsZW1ldHJ5TGV2ZWwudmFsdWUgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwob3B0aW9ucy50ZWxlbWV0cnlMZXZlbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmxvZ2dpbmdMZXZlbCAmJiBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5sb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci50aHJlc2hvbGQuc2V0VGhyZXNob2xkKExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChvcHRpb25zLmxvZ2dpbmdMZXZlbCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICYmXG4gICAgICAgIExvZ2dpbmdMZXZlbFtvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIGNvbnN0IGNvbnNvbGVBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIENvbnNvbGVBcHBlbmRlcik7XG5cbiAgICAgICAgaWYgKGNvbnNvbGVBcHBlbmRlcikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKGNvbnNvbGVBcHBlbmRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICE9PSAnT2ZmJykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSBvcHRpb25zLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW07XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID0gb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3dlYlBsYXllckxvYWRlciA9IG9wdGlvbnMud2ViUGxheWVyTG9hZGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9zaGFrYVBsYXllckxvYWRlciA9IG9wdGlvbnMuc2hha2FQbGF5ZXJMb2FkZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmhsc0pzTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX2hsc0pzTG9hZGVyID0gb3B0aW9ucy5obHNKc0xvYWRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBTREsuX2luaXRpYWxpemVkLnZhbHVlID0gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIFNESy5faW5pdGlhbGl6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5kaXNwb3NlKCk7XG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBudWxsO1xuICB9XG5cbiAgc3RhdGljIGdldFRlbGVtZXRyeVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeVVybC5nZXRUZWxlbWV0cnlVcmwodXJsKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTREsgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmxvYWQnLCAoKSA9PiB7XG4gIFNESy5kaXNwb3NlKCk7XG59KTtcblxuU0RLLmFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuaW5pdCgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlVcmwge1xuICBzdGF0aWMgZ2V0VGVsZW1ldHJ5VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwodXJsKTtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gYmFzZVVSTC5ob3N0bmFtZS5zcGxpdCgnLicpO1xuXG4gICAgICBzd2l0Y2ggKGJhc2VVUkwucHJvdG9jb2wpIHtcbiAgICAgICAgY2FzZSAnd3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHA6JztcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3c3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHBzOic7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VnbWVudHMubGVuZ3RoID09PSAyIHx8XG4gICAgICAgICAgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMyAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAyXS5sZW5ndGggPD0gMiAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXS5sZW5ndGggPD0gMylcbiAgICAgICkge1xuICAgICAgICBzZWdtZW50cy51bnNoaWZ0KCd0ZWxlbWV0cnknKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VnbWVudHNbMF0uc3RhcnRzV2l0aCgnc3RnLScpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctc3RnJykgfHwgc2VnbWVudHNbMF0uaW5jbHVkZXMoJy1zdGctJykgfHwgc2VnbWVudHNbMF0gPT09ICdzdGcnKSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeS1zdGcnO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdsb2NhbCcpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctbG9jYWwnKSkge1xuICAgICAgICAvLyBMZWF2ZSBVUkwgdW5jaGFuZ2VkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWdtZW50c1swXSA9ICd0ZWxlbWV0cnknO1xuICAgICAgfVxuXG4gICAgICBiYXNlVVJMLmhvc3RuYW1lID0gc2VnbWVudHMuam9pbignLicpO1xuXG4gICAgICByZXR1cm4gYCR7YmFzZVVSTC5vcmlnaW59L3RlbGVtZXRyeWA7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IHR5cGUgQml0cmF0ZVN0YXRlVHlwZSA9ICdLZWVwJyB8ICdSZXNldCc7XG5leHBvcnQgdHlwZSBCaXRyYXRlTW9kZVR5cGUgPSAnTm9ybWFsJyB8ICdGb3JjZScgfCAnUmVzZXQnO1xuXG5leHBvcnQgZW51bSBCaXRyYXRlU3RhdGUge1xuICBLZWVwLFxuICBSZXNldFxufVxuXG5leHBvcnQgZW51bSBCaXRyYXRlTW9kZSB7XG4gIE5vcm1hbCxcbiAgRm9yY2UsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlIHtcbiAgYXBpVmVyc2lvbjogbnVtYmVyO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG4gIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IG51bWJlcjtcbiAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVUeXBlO1xuICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVUeXBlO1xufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi8uLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IERpbWVuc2lvbiBmcm9tICcuLi8uLi92aWRlby9EaW1lbnNpb24nO1xuaW1wb3J0IEV4cG9uZW50aWFsQmFja29mZiBmcm9tICcuLi8uLi90aW1lL0V4cG9uZW50aWFsQmFja29mZic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgVmlkZW9UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vVmlkZW9UZWxlbWV0cnknO1xuaW1wb3J0IFNlc3Npb25UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vU2Vzc2lvblRlbGVtZXRyeSc7XG5pbXBvcnQge0lSdGNNb25pdG9yU3RhdGlzdGljfSBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZVN0YXRlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5pbXBvcnQge0JpdHNQZXJTZWNvbmQsIE1pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5pbXBvcnQgVG9rZW5Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvVG9rZW5Db250ZXh0JztcbmltcG9ydCBDaGFubmVsQ29udGV4dCwge0NoYW5uZWxDb250ZXh0T3B0aW9uc30gZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9TdGF0ZUNvbnRleHQnO1xuaW1wb3J0IFN0cmVhbUZhY3RvcnkgZnJvbSAnLi4vc3RyZWFtaW5nL1N0cmVhbUZhY3RvcnknO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5cbmNvbnN0IGRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbiA9ICdjbGllbnQ6dGVybWluYXRpb24nO1xuY29uc3QgZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMgPSAzMDAwO1xuY29uc3Qgc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMTUwMDA7XG5cbmV4cG9ydCB0eXBlIENoYW5uZWxPcHRpb25zID0ge1xuICB0YXJnZXRMYWc/OiBNaWxsaXNlY29uZDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IFRyYW5zZm9ybWVyVHJhbnNmb3JtQ2FsbGJhY2s8YW55LCBhbnk+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbCBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0NoYW5uZWwnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9rZW5Db250ZXh0OiBUb2tlbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXRlQ29udGV4dDogU3RhdGVDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9leHBvbmVudGlhbEJhY2tvZmY6IEV4cG9uZW50aWFsQmFja29mZjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVZpZGVvRWxlbWVudDogUmVhZE9ubHlTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuOiBSZWFkT25seVN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb246IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YXRlOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvTXV0ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvUGF1c2VkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VG9rZW5FeHBpcmluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dGhvcml6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlPbmxpbmU6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlMb2FkaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGxheWluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YW5kYnk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdG9wcGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VGFyZ2V0TGFnOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxhZzogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlCaXRyYXRlTGltaXQ6IFJlYWRPbmx5U3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlSZXNvbHV0aW9uOiBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlGYWlsdXJlQ291bnQ6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUVuZFBvaW50OiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0cmVhbTogUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJ0Y1N0YXRpc3RpY3M6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TWVkaWFTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT47XG5cbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uVGVsZW1ldHJ5OiBTZXNzaW9uVGVsZW1ldHJ5O1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXI6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgb3B0aW9ucz86IENoYW5uZWxPcHRpb25zKSB7XG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbik7XG4gICAgY29uc3QgY2hhbm5lbENvbnRleHRPcHRpb25zOiBDaGFubmVsQ29udGV4dE9wdGlvbnMgPSB7XG4gICAgICB0YXJnZXRMYWc6IG9wdGlvbnM/LnRhcmdldExhZyxcbiAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnM/LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBoYXNJbnNlcnRhYmxlU3RyZWFtczogZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnaW5zZXJ0YWJsZS1zdHJlYW1zJylcbiAgICB9O1xuXG4gICAgdGhpcy5fdG9rZW5Db250ZXh0ID0gbmV3IFRva2VuQ29udGV4dCh0b2tlbik7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBuZXcgQ2hhbm5lbENvbnRleHQoY2hhbm5lbENvbnRleHRPcHRpb25zKTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBuZXcgUGVlckNvbm5lY3Rpb25Db250ZXh0KCk7XG4gICAgdGhpcy5fc3RhdGVDb250ZXh0ID0gbmV3IFN0YXRlQ29udGV4dCgpO1xuICAgIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZiA9IG5ldyBFeHBvbmVudGlhbEJhY2tvZmYoKTtcbiAgICB0aGlzLl9jaGFubmVsU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9yZWFkT25seVZpZGVvRWxlbWVudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD4odGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50KTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuID0gbmV3IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+KHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbik7XG4gICAgdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RhdGUgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkKTtcbiAgICB0aGlzLl9yZWFkT25seU9ubGluZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lKTtcbiAgICB0aGlzLl9yZWFkT25seUxvYWRpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5UGxheWluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGFuZGJ5ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5KTtcbiAgICB0aGlzLl9yZWFkT25seVN0b3BwZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnRhcmdldExhZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQubGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQpO1xuICAgIHRoaXMuX3JlYWRPbmx5UmVzb2x1dGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPih0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uKTtcbiAgICB0aGlzLl9yZWFkT25seUZhaWx1cmVDb3VudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50Pih0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludCk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdHJlYW0gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbSk7XG4gICAgdGhpcy5fcmVhZE9ubHlSdGNTdGF0aXN0aWNzID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4odGhpcy5fY2hhbm5lbENvbnRleHQucnRjU3RhdGlzdGljcyk7XG4gICAgdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbSk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoZWRnZVRva2VuLnVyaSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBlZGdlVG9rZW4udGVuYW5jeSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcbiAgICB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5ID0gbmV3IFNlc3Npb25UZWxlbWV0cnkoU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fc2Vzc2lvblRlbGVtZXRyeSk7XG4gICAgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyID0gdGhpcy5oYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMudmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC5zdWJzY3JpYmUodmlkZW9FbGVtZW50ID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0uc3Vic2NyaWJlKHN0cmVhbSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5KSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5kaXNwb3NlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXRoaXMudmlkZW9FbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQpIHtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5ID0gbmV3IFZpZGVvVGVsZW1ldHJ5KHRoaXMuc3RyZWFtSWQsIFNESy5wYWdlTG9hZFRpbWUsIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUsIHRoaXMuX21ldHJpY3NTZXJ2aWNlKTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lKHRoaXMudmlkZW9FbGVtZW50KTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmcodGhpcy52aWRlb0VsZW1lbnQpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuU3RvcHBlZCkge1xuICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMucmVzdGFydEFmdGVyU3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlICE9PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB9LCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24uc3Vic2NyaWJlKHJlc29sdXRpb24gPT4ge1xuICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5vblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMocmVzb2x1dGlvbi50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQuc3Vic2NyaWJlKGJpdHJhdGVMaW1pdCA9PiB7XG4gICAgICAgIGlmIChiaXRyYXRlTGltaXQgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgZWxhcHNlZEluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKSAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxJbml0aWFsaXphdGlvbi5nZXRUaW1lKCk7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmxpbWl0Qml0cmF0ZShcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSxcbiAgICAgICAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGJpdHJhdGVMaW1pdCxcbiAgICAgICAgICAgIEJpdHJhdGVTdGF0ZS5LZWVwLFxuICAgICAgICAgICAgQml0cmF0ZU1vZGUuTm9ybWFsXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHNldHRpbmcgbGltaXQgYml0cmF0ZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW1PblVubW91bnQgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtT25Vbm1vdW50KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSwgJ2NsaWVudDp0ZXJtaW5hdGlvbi1vbi13aW5kb3ctdW5sb2FkJyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBkZXN0cm95U3RyZWFtT25Vbm1vdW50KTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGRlc3Ryb3lTdHJlYW1PblVubW91bnQpO1xuICAgIH0pKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCB2aWRlb0VsZW1lbnQoKTogSFRNTFZpZGVvRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIHNldCB2aWRlb0VsZW1lbnQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuXG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gJyc7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gJyc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy5yZXNvbHV0aW9uLnZhbHVlLndpZHRoICE9PSB2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCB8fCB0aGlzLnJlc29sdXRpb24udmFsdWUuaGVpZ2h0ICE9PSB2aWRlb0VsZW1lbnQudmlkZW9IZWlnaHQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IG5ldyBEaW1lbnNpb24odmlkZW9FbGVtZW50LnZpZGVvV2lkdGgsIHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24udmFsdWUgPSBEaW1lbnNpb24uZW1wdHk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRva2VuKCk6IEVuY29kZWRFZGdlVG9rZW4ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWU7XG4gIH1cblxuICBzZXQgdG9rZW4odG9rZW46IEVuY29kZWRFZGdlVG9rZW4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUgPSB0b2tlbjtcbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpO1xuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5IHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKGRpc2NvdmVyeVVyaSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUgPSBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdpbnNlcnRhYmxlLXN0cmVhbXMnKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCBwZWVyQ29ubmVjdGlvbigpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgc3RhdGUoKTogUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YXRlO1xuICB9XG5cbiAgZ2V0IGF1dG9NdXRlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dG9NdXRlZDtcbiAgfVxuXG4gIGdldCBhdXRvUGF1c2VkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZDtcbiAgfVxuXG4gIGdldCB0b2tlbkV4cGlyaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VG9rZW5FeHBpcmluZztcbiAgfVxuXG4gIGdldCBhdXRob3JpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0aG9yaXplZDtcbiAgfVxuXG4gIGdldCBvbmxpbmUoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlPbmxpbmU7XG4gIH1cblxuICBnZXQgbG9hZGluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUxvYWRpbmc7XG4gIH1cblxuICBnZXQgcGxheWluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVBsYXlpbmc7XG4gIH1cblxuICBnZXQgc3RhbmRieSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YW5kYnk7XG4gIH1cblxuICBnZXQgc3RvcHBlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0b3BwZWQ7XG4gIH1cblxuICBnZXQgdGFyZ2V0TGFnKCk6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVRhcmdldExhZztcbiAgfVxuXG4gIGdldCBsYWcoKTogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TGFnO1xuICB9XG5cbiAgZ2V0IGJpdHJhdGVMaW1pdCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdC52YWx1ZTtcbiAgfVxuXG4gIGdldCByZXNvbHV0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uO1xuICB9XG5cbiAgZ2V0IGZhaWx1cmVDb3VudCgpOiBSZWFkT25seVN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50O1xuICB9XG5cbiAgZ2V0IGVuZFBvaW50KCk6IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUVuZFBvaW50O1xuICB9XG5cbiAgZ2V0IHN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0cmVhbTtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZDtcbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWNzKCk6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3M7XG4gIH1cblxuICBnZXQgbWVkaWFTdHJlYW0oKTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TWVkaWFTdHJlYW07XG4gIH1cblxuICBzZXRCaXRyYXRlTGltaXQoYml0cmF0ZUxpbWl0OiBCaXRzUGVyU2Vjb25kKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlID0gYml0cmF0ZUxpbWl0O1xuICB9XG5cbiAgY2xlYXJCaXRyYXRlTGltaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUpIHtcbiAgICAgIGNvbnN0IGVsYXBzZWRJbk1pbGxpc2Vjb25kcyA9IERhdGUubm93KCkgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsSW5pdGlhbGl6YXRpb24uZ2V0VGltZSgpO1xuICAgICAgY29uc3QgYml0cmF0ZUluQml0c1BlclNlY29uZCA9IDA7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUubGltaXRCaXRyYXRlKFxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsXG4gICAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgYml0cmF0ZUluQml0c1BlclNlY29uZCxcbiAgICAgICAgQml0cmF0ZVN0YXRlLktlZXAsXG4gICAgICAgIEJpdHJhdGVNb2RlLlJlc2V0XG4gICAgICApXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdFcnJvciB3aGlsZSBzZXR0aW5nIGxpbWl0IGJpdHJhdGUnLCBlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVGFyZ2V0TGFnKGxhZzogTWlsbGlzZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC50YXJnZXRMYWcudmFsdWUgPSBsYWc7XG4gIH1cblxuICBhc3luYyBzdG9wKHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSkge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdG9wKHJlYXNvbik7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5hZGQodGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcuc3Vic2NyaWJlKGlzU3RhcnRpbmcgPT4ge1xuICAgICAgICBpZiAoIWlzU3RhcnRpbmcpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdG9wKHJlYXNvbik7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NTdG9wKHJlYXNvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcyhyZWFzb24pO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgfVxuXG4gIGFzeW5jIHJlc3VtZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgbXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHVubXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcCgnY2xpZW50OmNoYW5uZWwtZGlzcG9zZScpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFVyaSh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IFVSTCB7XG4gICAgY29uc3QgdXJsID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudXJpO1xuXG4gICAgaWYgKHVybCkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGRpc2NvdmVyIFVSSSBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IFVSTChTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBhbHJlYWR5IHN0YXJ0aW5nLCBza2lwcGluZyBzdGFydCcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc1N0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NTdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiA9IHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZTtcbiAgICBjb25zdCBsaXN0ZW5PblN0cmVhbVNldHVwID0gdGhpcy5fc2Vzc2lvblRlbGVtZXRyeS5saXN0ZW5PblN0cmVhbVNldHVwKCk7XG5cbiAgICBpZiAoIUVkZ2VBdXRoUGFyc2VyLmlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuKSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjay52YWx1ZSkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ2luc2VydGFibGUtc3RyZWFtcyBlbmFibGVkLCBidXQgbWlzc2luZyBjYWxsYmFjayBmdW5jdGlvbiBDcmVhdGVDaGFubmVsT3B0aW9ucy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5pc0luc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignaW5zZXJ0YWJsZS1zdHJlYW1zIGVuYWJsZWQsIGJ1dCBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgTWVkaWEgU3RyZWFtIFRyYWNrIEFQSScpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ3JlYXRlQ2hhbm5lbE9wdGlvbnMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayBjYWxsYmFjayBmdW5jdGlvbiBmb3VuZCwgYnV0IGZlYXR1cmUgaXMgbm90IGVuYWJsZWQgdmlhIGluc2VydGFibGUtc3RyZWFtcyBjYXBhYmlsaXR5Jyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpzdGFydCcpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgY29uc3QgdXJpID0gdGhpcy5nZXRVcmkodG9rZW4pO1xuICAgIGNvbnN0IGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjazogKCkgPT4gUHJvbWlzZTx2b2lkPiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgICAvLyBOZWVkIHRvIHNldCBpc1N0YXJ0aW5nIHRvIGZhbHNlIGFuZCBjYWxsIGhhbmRsZVN0cmVhbUZhaWx1cmUgaWYgc3RyZWFtIG1vbml0b3JzIGZvdW5kIGFuIGlzc3VlXG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc3RyZWFtUGxheWVyID0gU3RyZWFtRmFjdG9yeS5jcmVhdGUodG9rZW4sIHRoaXMuX2NoYW5uZWxDb250ZXh0LCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayk7XG5cbiAgICBpZiAoIXN0cmVhbVBsYXllcikge1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW1QbGF5ZXIuc3RhcnQoXG4gICAgICB1cmksXG4gICAgICB0b2tlbixcbiAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAsXG4gICAgICB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50LmJpbmQodGhpcykpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuZmFpbCgpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OmNsZWFudXAtYWZ0ZXItZmFpbGVkLXNldHVwJyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgY2hhbm5lbCcsIGUpO1xuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nIHx8ICFTREsuYXV0b21hdGljUmV0cnlPbkZhaWx1cmUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCB0aGlzLmdldFJldHJ5SW50ZXJ2YWwoKSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc3RhcnRBZnRlclN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgd2FzIGFscmVhZHkgZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHBsYXkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWVkaWFTdHJlYW0gPSB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIW1lZGlhU3RyZWFtKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGFydCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmV0cnlJbnRlcnZhbCgpOiBudW1iZXIge1xuICAgIHN3aXRjaCAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YW5kQnk6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5PZmZsaW5lOlxuICAgICAgICByZXR1cm4gc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhcnRpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGF1c2VkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgICAvLyBGaXJzdCBhbmQgc2Vjb25kIGF0dGVtcHQgZmFzdCwgYWZ0ZXIgdGhhdCBleHBvbmVudGlhbCB3aXRoIGJhY2tvZmYgaW50ZXJ2YWxcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZi5nZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTdHJlYW1GYWlsdXJlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN3aXRjaCAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmV0cnkgc3RhcnQgd2l0aCBpbml0aWFsIHN0YXRlIFslc10gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlLCBDaGFubmVsU3RhdGVbdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWVdKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgdW5hdXRob3JpemVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgZ2VvIHJlc3RyaWN0ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBnZW8gYmxvY2tlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0b3BwZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBsYXlpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHBsYXlpbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGF1c2VkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwYXVzZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgaW52b2tlIHBsYXkoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBhbHJlYWR5IHN0YXJ0aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCBkdWUgdG8gdW5zdXBwb3J0ZWQgZmVhdHVyZSwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkIGR1ZSB0byBjb25maWd1cmF0aW9uIGVycm9yLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5VcFJlc291cmNlcyhyZWFzb246IHN0cmluZyA9IGRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbik6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIGNvbnN0IHBlZXJDb25uZWN0aW9uID0gdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlO1xuXG4gICAgaWYgKHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBudWxsO1xuICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUuZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpO1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YW5kYnkudmFsdWUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSwgcmVhc29uKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gZGVzdHJveSBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEZXN0cm95ZWQgc3RyZWFtIHdpdGggcmVhc29uIFslc10nLCB0aGlzLnN0cmVhbUlkLCBzdGF0dXMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbScsIHRoaXMuc3RyZWFtSWQsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQgJiYgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSAnJztcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICghdmlkZW9FbGVtZW50KSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbWVkaWFTdHJlYW07XG5cbiAgICBjb25zdCBwbGF5UHJvbWlzZSA9IHZpZGVvRWxlbWVudC5wbGF5KCk7XG5cbiAgICBpZiAocGxheVByb21pc2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gcGxheVByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgIGNvbnN0IGhhc0F1ZGlvVHJhY2sgPSAhIW1lZGlhU3RyZWFtLmdldFRyYWNrcygpLmZpbHRlcih0cmFjayA9PiB7XG4gICAgICAgIHJldHVybiB0cmFjay5raW5kID09PSAnYXVkaW8nO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiA9ICFTREsuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG5cbiAgICAgIGlmIChhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiB8fCB2aWRlb0VsZW1lbnQubXV0ZWQgfHwgIWhhc0F1ZGlvVHJhY2spIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuXG4gICAgICAgIGlmIChhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFBhdXNlZCB2aWRlbyBhZnRlciBwbGF5IGZhaWxlZC4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuICAgICAgICAgIHZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBudWxsO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc0F1ZGlvVHJhY2spIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgbXV0ZWQgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG5cbiAgICAgIHJldHVybiB2aWRlb0VsZW1lbnQucGxheSgpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBQbGF5ZWQgdmlkZW8gYWZ0ZXIgYXV0byBtdXRpbmcuIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZCB0byB1bm11dGUuJywgdGhpcy5zdHJlYW1JZCk7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gZmFsc2U7XG5cbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5lbnVtIENoYW5uZWxTdGF0ZSB7XG4gIE9mZmxpbmUgPSAxLFxuICBTdGFydGluZyxcbiAgUGF1c2VkLFxuICBQbGF5aW5nLFxuICBSZWNvdmVyaW5nLFxuICBSZWNvbm5lY3RpbmcsXG4gIFN0YW5kQnksXG4gIFN0b3BwZWQsXG4gIFVuYXV0aG9yaXplZCxcbiAgR2VvUmVzdHJpY3RlZCxcbiAgR2VvQmxvY2tlZCxcbiAgVW5zdXBwb3J0ZWRGZWF0dXJlLFxuICBDb25maWd1cmF0aW9uRXJyb3IsXG4gIEVycm9yXG59XG5cbmV4cG9ydCBkZWZhdWx0IENoYW5uZWxTdGF0ZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IENoYW5uZWwsIHtDaGFubmVsT3B0aW9uc30gZnJvbSAnLi9DaGFubmVsJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5pbXBvcnQge01pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5cbnR5cGUgQ3JlYXRlQ2hhbm5lbE9wdGlvbnMgPSB7XG4gIHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgdG9rZW46IEVuY29kZWRFZGdlVG9rZW47XG4gIHRhcmdldExhZz86IE1pbGxpc2Vjb25kO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxhbnksIGFueT47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVscyB7XG4gIHN0YXRpYyBjcmVhdGVDaGFubmVsKG9wdGlvbnM6IENyZWF0ZUNoYW5uZWxPcHRpb25zKTogQ2hhbm5lbCB7XG4gICAgaWYgKCFTREsuaW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIG5vdCBsb2FkZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY2hhbm5lbE9wdGlvbnM6IENoYW5uZWxPcHRpb25zID0ge1xuICAgICAgdGFyZ2V0TGFnOiBvcHRpb25zLnRhcmdldExhZyxcbiAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFja1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IENoYW5uZWwob3B0aW9ucy52aWRlb0VsZW1lbnQsIG9wdGlvbnMudG9rZW4sIGNoYW5uZWxPcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVscyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IENoYW5uZWxzIGZyb20gJy4vQ2hhbm5lbHMnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuL0NoYW5uZWxTdGF0ZSc7XG5cbmV4cG9ydCB7XG4gIFNESyxcbiAgQ2hhbm5lbHMsXG4gIENoYW5uZWxTdGF0ZVxufTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBEaW1lbnNpb24gZnJvbSAnLi4vLi4vdmlkZW8vRGltZW5zaW9uJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW0sIFN1YnNjcmliZVN0YXR1c30gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQge0lSdGNNb25pdG9yU3RhdGlzdGljLCBJUnRjU3RhdGlzdGljfSBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuXG5jb25zdCBkZWZhdWx0VGFyZ2V0TGFnID0gMDtcblxuZXhwb3J0IHR5cGUgQ2hhbm5lbENvbnRleHRPcHRpb25zID0ge1xuICB0YXJnZXRMYWc/OiBudW1iZXI7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPGFueSwgYW55PjtcbiAgaGFzSW5zZXJ0YWJsZVN0cmVhbXM/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbENvbnRleHQge1xuICBjaGFubmVsSW5pdGlhbGl6YXRpb246IERhdGU7XG4gIGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgY2hhbm5lbERpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgcmVuZGVyZXJEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHZpZGVvRWxlbWVudDogU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgc3RhdGU6IFN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgYXV0b011dGVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRvUGF1c2VkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRob3JpemVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBvbmxpbmU6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGxvYWRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHBsYXlpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0YW5kYnk6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0b3BwZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHRhcmdldExhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGxhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGJpdHJhdGVMaW1pdDogU3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcmVzb2x1dGlvbjogU3ViamVjdDxEaW1lbnNpb24+O1xuICBmYWlsdXJlQ291bnQ6IFN1YmplY3Q8bnVtYmVyPjtcbiAgZW5kUG9pbnQ6IFN1YmplY3Q8RW5kUG9pbnQ+O1xuICBzdHJlYW06IFN1YmplY3Q8SVN0cmVhbT47XG4gIHJ0Y1N0YXRpc3RpY3M6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+O1xuICB2aWRlb1RlbGVtZXRyeTogVmlkZW9UZWxlbWV0cnk7XG4gIHJ0Y0F1ZGlvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBydGNWaWRlb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYztcbiAgY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0OiBudW1iZXI7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IFN1YmplY3Q8VHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxhbnksIGFueT4+O1xuICBoYXNJbnNlcnRhYmxlU3RyZWFtczogU3ViamVjdDxib29sZWFuPjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogQ2hhbm5lbENvbnRleHRPcHRpb25zKSB7XG4gICAgdGhpcy5kaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuY2hhbm5lbERpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5yZW5kZXJlckRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5jaGFubmVsSW5pdGlhbGl6YXRpb24gPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMudmlkZW9FbGVtZW50ID0gbmV3IFN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD4obnVsbCk7XG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBTdWJqZWN0PENoYW5uZWxTdGF0ZT4oQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nKTtcbiAgICB0aGlzLmF1dG9NdXRlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmF1dG9QYXVzZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRob3JpemVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5vbmxpbmUgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5wbGF5aW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuc3RhbmRieSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0b3BwZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy50YXJnZXRMYWcgPSBuZXcgU3ViamVjdDxNaWxsaXNlY29uZD4ob3B0aW9ucz8udGFyZ2V0TGFnID8/IGRlZmF1bHRUYXJnZXRMYWcpO1xuICAgIHRoaXMubGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQ+KDApO1xuICAgIHRoaXMuYml0cmF0ZUxpbWl0ID0gbmV3IFN1YmplY3Q8Qml0c1BlclNlY29uZD4oMCk7XG4gICAgdGhpcy5yZXNvbHV0aW9uID0gbmV3IFN1YmplY3Q8RGltZW5zaW9uPihEaW1lbnNpb24uZW1wdHkpO1xuICAgIHRoaXMuZmFpbHVyZUNvdW50ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigwKTtcbiAgICB0aGlzLmVuZFBvaW50ID0gbmV3IFN1YmplY3Q8RW5kUG9pbnQ+KG51bGwpO1xuICAgIHRoaXMuc3RyZWFtID0gbmV3IFN1YmplY3Q8SVN0cmVhbT4obnVsbCk7XG4gICAgdGhpcy5ydGNTdGF0aXN0aWNzID0gbmV3IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KG51bGwpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdGhpcy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID0gbmV3IFN1YmplY3Q8VHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxhbnksIGFueT4+KG9wdGlvbnM/LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spO1xuICAgIHRoaXMuaGFzSW5zZXJ0YWJsZVN0cmVhbXMgPSBuZXcgU3ViamVjdDxib29sZWFuPighIW9wdGlvbnM/Lmhhc0luc2VydGFibGVTdHJlYW1zKTtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtLnZhbHVlO1xuXG4gICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbS5zdHJlYW1JZDtcbiAgfVxuXG4gIGFwcGx5U3RhdHVzKHN0YXR1czogU3Vic2NyaWJlU3RhdHVzKTogdm9pZCB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICB0aGlzLmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudC52YWx1ZSAmJiB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gdGhpcy5zdHJlYW1JZDtcbiAgICB9XG4gIH1cblxuICBtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMpOiBDaGFubmVsU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFuZEJ5O1xuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ7XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDtcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVlckNvbm5lY3Rpb25Db250ZXh0IHtcbiAgbWVkaWFTdHJlYW06IFN1YmplY3Q8TWVkaWFTdHJlYW0+O1xuICBwZWVyQ29ubmVjdGlvbjogU3ViamVjdDxJUGVlckNvbm5lY3Rpb24+O1xuICBwZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5tZWRpYVN0cmVhbSA9IG5ldyBTdWJqZWN0PE1lZGlhU3RyZWFtPihudWxsKTtcbiAgICB0aGlzLnBlZXJDb25uZWN0aW9uID0gbmV3IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPihudWxsKTtcbiAgICB0aGlzLnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGVDb250ZXh0IHtcbiAgaXNTdGFydGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgaXNEaXNwb3NlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmlzU3RhcnRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5pc0Rpc3Bvc2VkID0gZmFsc2U7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW5Db250ZXh0IHtcbiAgdG9rZW46IFN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj47XG4gIHRva2VuRXhwaXJpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3IodG9rZW46IEVuY29kZWRFZGdlVG9rZW4pIHtcbiAgICB0aGlzLnRva2VuID0gbmV3IFN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj4odG9rZW4pO1xuICAgIHRoaXMudG9rZW5FeHBpcmluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5jb25zdCBkZWZhdWx0RGlzY292ZXJ5VXJpID0gJ2h0dHBzOi8vcGNhc3QucGhlbml4cnRzLmNvbS9wY2FzdC9lbmRQb2ludHMnO1xuXG5leHBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZU1vZGVUeXBlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRyYXRlTW9kZU1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUoYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlKTogQml0cmF0ZU1vZGVUeXBlIHtcbiAgICBzd2l0Y2ggKGJpdHJhdGVNb2RlKSB7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLk5vcm1hbDpcbiAgICAgICAgcmV0dXJuICdOb3JtYWwnO1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5Gb3JjZTpcbiAgICAgICAgcmV0dXJuICdGb3JjZSc7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLlJlc2V0OlxuICAgICAgICByZXR1cm4gJ1Jlc2V0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGJpdHJhdGVNb2RlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7Qml0cmF0ZVN0YXRlLCBCaXRyYXRlU3RhdGVUeXBlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRyYXRlU3RhdGVNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUoYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGUpOiBCaXRyYXRlU3RhdGVUeXBlIHtcbiAgICBzd2l0Y2ggKGJpdHJhdGVTdGF0ZSkge1xuICAgICAgY2FzZSBCaXRyYXRlU3RhdGUuS2VlcDpcbiAgICAgICAgcmV0dXJuICdLZWVwJztcbiAgICAgIGNhc2UgQml0cmF0ZVN0YXRlLlJlc2V0OlxuICAgICAgICByZXR1cm4gJ1Jlc2V0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGJpdHJhdGVTdGF0ZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRW5kUG9pbnQgZnJvbSAnLi9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgRGlzY292ZXJ5U2VydmljZSBmcm9tICcuL0Rpc2NvdmVyeVNlcnZpY2UnO1xuXG5jb25zdCBkaXNjb3ZlcnlDYWNoZUludGVydmFsID0gNjAwMDA7XG5cbmludGVyZmFjZSBJUGVyVVJJRW5kcG9pbnQgeyBbeDogc3RyaW5nXTogUHJvbWlzZTxFbmRQb2ludD4gfVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3Zlcnkge1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGU6IElQZXJVUklFbmRwb2ludCA9IHt9O1xuXG4gIHN0YXRpYyBhc3luYyBwcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTChTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgIHJldHVybiBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpOiBVUkwpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdKSB7XG4gICAgICByZXR1cm4gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH1cblxuICAgIGNvbnN0IGRpc2NvdmVyeVNlcnZpY2UgPSBuZXcgRGlzY292ZXJ5U2VydmljZSh1cmkpO1xuICAgIGNvbnN0IGNhY2hlZFZhbHVlID0gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdID0gZGlzY292ZXJ5U2VydmljZS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCgpO1xuICAgIGNvbnN0IGlnbm9yZWQgPSBEaXNjb3ZlcnkuX2NhY2hlW3VybF0udGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0gPT09IGNhY2hlZFZhbHVlKSB7XG4gICAgICAgICAgZGVsZXRlIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICAgICAgfVxuICAgICAgfSwgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCk7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgZGVsZXRlIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICB9KTtcblxuICAgIHJldHVybiBjYWNoZWRWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbmNvbnN0IGlnbm9yZWQgPSBEaXNjb3ZlcnkucHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcblxuY29uc3QgZGVmYXVsdFRpbWVvdXQgPSAyMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5U2VydmljZSB7XG4gIHByaXZhdGUgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdEaXNjb3ZlcnknKTtcbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF91cmk6IFVSTDtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IFVSTCkge1xuICAgIGlmICghdXJpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB1cmknKTtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKHVyaS50b1N0cmluZygpKTtcbiAgICB0aGlzLl91cmkgPSB1cmk7XG4gIH1cblxuICBhc3luYyBkaXNjb3Zlck5lYXJieUVuZFBvaW50cyh1cmk6IFVSTCwgdGltZW91dDogbnVtYmVyKTogUHJvbWlzZTxFbmRQb2ludFtdPiB7XG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB0aW1lb3V0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYERpc2NvdmVyeSB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRpbWVvdXQpXG4gICAgICApXG4gICAgXSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgWyR7dXJsfV0gWyR7cmVzcG9uc2Uuc3RhdHVzfV1gKTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2UuYm9keSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjb3ZlcnkgZmFpbGVkIHdpdGggbm8gZGF0YSBbJHt1cmx9XWApO1xuICAgIH1cblxuICAgIGNvbnN0IGFzU3RyaW5nID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgIGNvbnN0IGVuZFBvaW50cyA9IGFzU3RyaW5nLnNwbGl0KCcsJyk7XG5cbiAgICByZXR1cm4gZW5kUG9pbnRzLm1hcChlbmRQb2ludCA9PiBuZXcgRW5kUG9pbnQoZW5kUG9pbnQsIHRpbWVvdXQpKTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50KHRpbWVvdXQ6IG51bWJlciA9IGRlZmF1bHRUaW1lb3V0KTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IERpc2NvdmVyeVVyaS5idWlsZERpc2NvdmVyeVVybCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IGVuZFBvaW50cyA9IGF3YWl0IHRoaXMuZGlzY292ZXJOZWFyYnlFbmRQb2ludHMobmV3IFVSTCh1cmwpLCB0aW1lb3V0KTtcbiAgICBsZXQgZmFpbGVkUmVxdWVzdHMgPSAwO1xuICAgIGNvbnN0IHByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkID0gKCk6IFByb21pc2U8dm9pZD4gPT4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKGZhaWxlZFJlcXVlc3RzID49IGVuZFBvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgcmVqZWN0KGBEaXNjb3Zlcnkgb2YgWyR7ZW5kUG9pbnRzLmxlbmd0aH1dIGVuZHBvaW50cyBmcm9tIFske3VybH1dIGZhaWxlZCwgcHJldmVudGluZyBpdCBmcm9tIGNvbXBsZXRpbmdgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBlbmRQb2ludCA9IGF3YWl0IFByb21pc2UucmFjZShlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IGVuZFBvaW50XG4gICAgICAucGluZygpXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdGYWlsZWQgdG8gcGluZyBlbmQgcG9pbnQgWyVzXScsIGVuZFBvaW50LCBlKTtcblxuICAgICAgICBmYWlsZWRSZXF1ZXN0cysrO1xuXG4gICAgICAgIHJldHVybiBwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCgpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHRpbWUgPT4ge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcmVkIGVuZCBwb2ludCBbJXNdIHdpdGggdGltZSBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSwgdGltZSk7XG4gICAgICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICAgICAgcnVudGltZTogKG5vdyAtIFNESy5wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgICAgICB2YWx1ZToge3VpbnQ2NDogdGltZSB8fCAwfSxcbiAgICAgICAgICByZXNvdXJjZTogZW5kUG9pbnQudG9TdHJpbmcoKSxcbiAgICAgICAgICBraW5kOiAncGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50O1xuICAgICAgfSkpKTtcblxuICAgIHJldHVybiBlbmRQb2ludDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9IGZyb20gJy4uL2RlZmF1bHRzJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlVcmkge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZGlzY292ZXJ5VXJpOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KGRlZmF1bHREaXNjb3ZlcnlVcmkpO1xuXG4gIHN0YXRpYyBnZXQgdXJpKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIERpc2NvdmVyeVVyaS5fZGlzY292ZXJ5VXJpO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkRGlzY292ZXJ5VXJsKHVyaTogVVJMKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHVyaS50b1N0cmluZygpKTtcbiAgICBjb25zdCBzZGtWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIHVybC5zZWFyY2ggPSBgPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhbWyd2ZXJzaW9uJywgc2RrVmVyc2lvbl0sIFsnXycsIGAke0RhdGUubm93KCl9YF1dKS50b1N0cmluZygpfWA7XG5cbiAgICBpZiAodXJsLnBhdGhuYW1lID09PSAnLycpIHtcbiAgICAgIHVybC5wYXRobmFtZSA9ICcvcGNhc3QvZW5kUG9pbnRzJztcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5VXJpIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5pbXBvcnQge1xuICBJU3Vic2NyaWJlUmVzcG9uc2UsXG4gIElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdFxufSBmcm9tICcuLi9hcGkvU3Vic2NyaWJlJztcbmltcG9ydCB7SVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCwgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9TZXRSZW1vdGVEZXNjcmlwdGlvbic7XG5pbXBvcnQge0lEZXN0cm95U3RyZWFtUmVxdWVzdCwgSURlc3Ryb3lTdHJlYW1SZXNwb25zZX0gZnJvbSAnLi4vYXBpL0Rlc3Ryb3lTdHJlYW0nO1xuaW1wb3J0IHtJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QsIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9BZGRJY2VDYW5kaWRhdGVzJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZSwgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IEJpdHJhdGVNb2RlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVNb2RlTWFwcGluZyc7XG5pbXBvcnQgQml0cmF0ZVN0YXRlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVTdGF0ZU1hcHBpbmcnO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IHtcbiAgSVB1Ymxpc2hSZXNwb25zZSxcbiAgSVB1Ymxpc2hXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJUHVibGlzaFdpdGhvdXRPZmZlclJlcXVlc3QsXG4gIFB1Ymxpc2hTdGF0dXNcbn0gZnJvbSAnLi4vYXBpL1B1Ymxpc2gnO1xuXG5jb25zdCBhcGlWZXJzaW9uID0gNztcblxuZXhwb3J0IHR5cGUgU3Vic2NyaWJlU3RhdHVzID0gJ29rJyB8ICduby1zdHJlYW0nIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdnZW8tcmVzdHJpY3RlZCcgfCAnZ2VvLWJsb2NrZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBSZW1vdmVUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIERlc3Ryb3lTdHJlYW1TdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IGludGVyZmFjZSBJU3RyZWFtIHtcbiAgc3RyZWFtSWQ6IHN0cmluZztcbiAgc2hhcmVkU2VjcmV0OiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3Vic2NyaWJlUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXM7XG4gIHN0cmVhbT86IElTdHJlYW07XG4gIGxhZz86IE1pbGxpc2Vjb25kO1xuICBydGNDb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbjtcbiAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBJUHVibGlzaFJlc3BvbnNlSW5pdCA9IHtcbiAgc3RhdHVzOiBQdWJsaXNoU3RhdHVzO1xuICBzdHJlYW0/OiBJU3RyZWFtO1xuICBsYWc/OiBNaWxsaXNlY29uZDtcbiAgcnRjQ29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb247XG4gIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbn07XG5cbmludGVyZmFjZSBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzO1xuICBzZXNzaW9uRGVzY3JpcHRpb24/OiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xufVxuXG5pbnRlcmZhY2UgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXM7XG4gIG9wdGlvbnM/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXM7XG59XG5cbmludGVyZmFjZSBJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogRGVzdHJveVN0cmVhbVN0YXR1cztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kUG9pbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRW5kUG9pbnQnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdXJpOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfcm91bmRUcmlwVGltZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHVyaTogc3RyaW5nLCB0aW1lb3V0OiBudW1iZXIpIHtcbiAgICB0aGlzLl91cmkgPSB1cmk7XG4gICAgdGhpcy5fdGltZW91dCA9IHRpbWVvdXQ7XG5cbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRW5kIHBvaW50IHJlcXVpcmVzIGEgdGltZW91dGApO1xuICAgIH1cbiAgfVxuXG4gIGdldCByb3VuZFRyaXBUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JvdW5kVHJpcFRpbWU7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgRW5kUG9pbnRbdXJpPSR7dGhpcy5fdXJpfV1gO1xuICB9XG5cbiAgYXN5bmMgcGluZygpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRQaW5nVXJsKCk7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgIGZldGNoKHVybCwge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgfSksXG4gICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4oKF8sIHJlamVjdCkgPT5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGBQaW5nIHRpbWVkIG91dCBbJHt1cmx9XWApKSwgdGhpcy5fdGltZW91dClcbiAgICAgIClcbiAgICBdKTtcbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7IC8qIEhhbmRsZSAqL1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQaW5nIGZhaWxlZCBbJHt1cmx9XSBbJHtyZXNwb25zZS5zdGF0dXN9XWApO1xuICAgIH1cblxuICAgIHRoaXMuX3JvdW5kVHJpcFRpbWUgPSBmaW5pc2hlZCAtIHN0YXJ0O1xuXG4gICAgcmV0dXJuIHRoaXMuX3JvdW5kVHJpcFRpbWU7XG4gIH1cblxuICBhc3luYyBzdWJzY3JpYmUodG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0LCBmYWlsdXJlQ291bnQ6IG51bWJlcik6IFByb21pc2U8SVN1YnNjcmliZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHRlbmFuY3kgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS50ZW5hbmN5O1xuXG4gICAgaWYgKCF0ZW5hbmN5KSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ3VuYXV0aG9yaXplZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3RlbmFuY3ksICdzdHJlYW0nLCAnc3Vic2NyaWJlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBjbGllbnRWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIGlmIChmYWlsdXJlQ291bnQgPT09IDAgJiYgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRoT2ZmZXI6IElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHthcGlWZXJzaW9ufVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRoT2ZmZXIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYm9keVdpdGhvdXRPZmZlcjogSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbjoge2FwaVZlcnNpb259XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhvdXRPZmZlcikpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBuZXcgRXJyb3IoYFN1YnNjcmliZSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UodGVuYW5jeSwgaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHN1YnNjcmliZSByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzdWJzY3JpYmVSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBwdWJsaXNoKG5hbWU6IHN0cmluZywgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0LCBmYWlsdXJlQ291bnQ6IG51bWJlcik6IFByb21pc2U8SVB1Ymxpc2hSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB0ZW5hbmN5ID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudGVuYW5jeTtcblxuICAgIGlmICghdGVuYW5jeSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICd1bmF1dGhvcml6ZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFt0ZW5hbmN5LCAnc3RyZWFtJywgJ3B1Ymxpc2gnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGNsaWVudFZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMCAmJiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYm9keVdpdGhPZmZlcjogSVB1Ymxpc2hXaXRoT2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBzdHJlYW1JZDogJycsXG4gICAgICAgICAgb3B0aW9uczogWyd1cGxvYWQnXSxcbiAgICAgICAgICBhcGlWZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aE9mZmVyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRob3V0T2ZmZXI6IElQdWJsaXNoV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBuYW1lLFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgc3RyZWFtSWQ6ICcnLFxuICAgICAgICAgIG9wdGlvbnM6IFsndXBsb2FkJ10sXG4gICAgICAgICAgYXBpVmVyc2lvblxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhvdXRPZmZlcikpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwdWJsaXNoJywgbmV3IEVycm9yKGBQdWJsaXNoIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwdWJsaXNoJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBQdWJsaXNoU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UodGVuYW5jeSwgaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHB1Ymxpc2ggcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc3Vic2NyaWJlUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtOiBJU3RyZWFtLCBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzY3JpcHRpb24nLCAncmVtb3RlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICB0eXBlOiBzZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgc2RwOiBzZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbicsIG5ldyBFcnJvcihgU2V0IHJlbW90ZSBkZXNjcmlwdGlvbiB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbicsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHNldCByZW1vdGUgZGVzY3JpcHRpb24gcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGxpbWl0Qml0cmF0ZShcbiAgICBzdHJlYW06IElTdHJlYW0sXG4gICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXIsXG4gICAgYml0cmF0ZUluQml0c1BlclNlY29uZDogQml0c1BlclNlY29uZCxcbiAgICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZSxcbiAgICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGUsXG4gICk6IFByb21pc2U8SVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdiaXRyYXRlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgYml0cmF0ZUluQml0c1BlclNlY29uZCxcbiAgICAgIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlTWFwcGluZy5jb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlKGJpdHJhdGVTdGF0ZSksXG4gICAgICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVNYXBwaW5nLmNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlKGJpdHJhdGVNb2RlKVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCBsaW1pdCBiaXRyYXRlIHRpbWVkJywgbmV3IEVycm9yKGBTZXQgbGltaXQgYml0cmF0ZSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IGxpbWl0IGJpdHJhdGUgdGltZWQnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3Qgc2V0IGxpbWl0IGJpdHJhdGUgcmVzcG9uc2UgWyVzXSBpbiBbJXNdIG1zJywgc3RhdHVzLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiB7c3RhdHVzfTtcbiAgfVxuXG4gIGFzeW5jIGFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtOiBJU3RyZWFtLCBjYW5kaWRhdGVzOiBSVENJY2VDYW5kaWRhdGVbXSwgZGlzY292ZXJ5Q29tcGxldGVkOiBib29sZWFuLCBvcHRpb25zOiBzdHJpbmdbXSA9IFtdKTogUHJvbWlzZTxJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnaWNlJywgJ2NhbmRpZGF0ZXMnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElBZGRJY2VDYW5kaWRhdGVzUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBjYW5kaWRhdGVzLFxuICAgICAgZGlzY292ZXJ5Q29tcGxldGVkLFxuICAgICAgb3B0aW9uc1xuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGFkZCBpY2UgY2FuZGlkYXRlcycsIG5ldyBFcnJvcihgQWRkIGljZSBjYW5kaWRhdGVzIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgaWNlIGNhbmRpZGF0ZXMnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3QgYWRkIElDRSBjYW5kaWRhdGVzIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveVN0cmVhbShzdHJlYW06IElTdHJlYW0sIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzdHJveSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSURlc3Ryb3lTdHJlYW1SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHJlYXNvbixcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YSxcbiAgICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgbmV3IEVycm9yKGBEZWxldGUgc3RyZWFtIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBkZWxldGUgc3RyZWFtJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBEZXN0cm95U3RyZWFtU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW1SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IGRlc3Ryb3kgc3RyZWFtIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIGRlc3Ryb3lTdHJlYW1SZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gZGVzdHJveVN0cmVhbVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveVN0cmVhbU9uVW5tb3VudChzdHJlYW06IElTdHJlYW0sIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFuYXZpZ2F0b3I/LnNlbmRCZWFjb24pIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLmRlc3Ryb3lTdHJlYW0oc3RyZWFtLCByZWFzb24pO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzdHJveSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSURlc3Ryb3lTdHJlYW1SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHJlYXNvbixcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBuYXZpZ2F0b3Iuc2VuZEJlYWNvbih1cmwsIGZvcm1EYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRVcmwocGF0aDogc3RyaW5nW10pOiBVUkwge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBwYXRoQXNBcnJheSA9IHVyaS5wYXRobmFtZS5zcGxpdCgnLycpO1xuXG4gICAgcGF0aEFzQXJyYXkubGVuZ3RoID0gcGF0aEFzQXJyYXkubGVuZ3RoIC0gMTtcblxuICAgIHVyaS5wYXRobmFtZSA9IHBhdGhBc0FycmF5LmNvbmNhdCguLi5wYXRoKS5qb2luKCcvJyk7XG5cbiAgICByZXR1cm4gdXJpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBpbmdVcmwoKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuX3VyaSk7XG4gICAgY29uc3Qgc2RrVmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICB1cmkuc2VhcmNoID0gYD8ke25ldyBVUkxTZWFyY2hQYXJhbXMoW1sndHlwZScsICdodHRwJ10sIFsndmVyc2lvbicsIHNka1ZlcnNpb25dLCBbJ18nLCBgJHtEYXRlLm5vdygpfWBdXSkudG9TdHJpbmcoKX1gO1xuXG4gICAgcmV0dXJuIHVyaS50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFB1Ymxpc2hTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTdWJzY3JpYmVTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IERlc3Ryb3lTdHJlYW1TdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlKHRlbmFuY3k6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJU3Vic2NyaWJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU3Vic2NyaWJlUmVzcG9uc2U7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2U6IElTdWJzY3JpYmVSZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBzdWJzY3JpYmVSZXNwb25zZS5zdHJlYW0gPSB7XG4gICAgICB0ZW5hbmN5LFxuICAgICAgc3RyZWFtSWQ6IGRhdGEuc3RyZWFtSWQsXG4gICAgICBzaGFyZWRTZWNyZXQ6IGRhdGEuc2hhcmVkU2VjcmV0XG4gICAgfTtcblxuICAgIHN1YnNjcmliZVJlc3BvbnNlLmxhZyA9IGRhdGEubGFnO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UucnRjQ29uZmlndXJhdGlvbiA9IHRoaXMuY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGRhdGEucnRjQ29uZmlndXJhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSh0ZW5hbmN5OiBzdHJpbmcsIHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVB1Ymxpc2hSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElQdWJsaXNoUmVzcG9uc2U7XG4gICAgY29uc3QgcHVibGlzaFJlc3BvbnNlOiBJUHVibGlzaFJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHB1Ymxpc2hSZXNwb25zZS5zdHJlYW0gPSB7XG4gICAgICB0ZW5hbmN5LFxuICAgICAgc3RyZWFtSWQ6IGRhdGEuc3RyZWFtSWQsXG4gICAgICBzaGFyZWRTZWNyZXQ6IGRhdGEuc2hhcmVkU2VjcmV0XG4gICAgfTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5ydGNDb25maWd1cmF0aW9uID0gdGhpcy5jb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oZGF0YS5ydGNDb25maWd1cmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwdWJsaXNoUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgcnRjQ29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbiA9IHtpY2VTZXJ2ZXJzOiBbXX07XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5ID0gY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3k7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplID09PSAnbnVtYmVyJykge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9IGNvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycykge1xuICAgICAgY29uc3QgaWNlU2VydmVyczogUlRDSWNlU2VydmVyW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgICB1cmxzOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJscyxcbiAgICAgICAgICB1c2VybmFtZTogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICAgIGNyZWRlbnRpYWw6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kgPSBjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kgPSBjb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3k7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ0Y0NvbmZpZ3VyYXRpb247XG4gIH1cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlOiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24gPSBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlOiBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCA9IHtcbiAgICAgIHN0YXR1czogZGF0YS5zdGF0dXMsXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEub3B0aW9ucykge1xuICAgICAgICBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2Uub3B0aW9ucyA9IGRhdGEub3B0aW9ucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSURlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtOiBJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7Q2hhbm5lbFN0YXRlfSBmcm9tICcuLi9jaGFubmVscyc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmd9IGZyb20gJy4vTGl2ZVN0cmVhbWluZyc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENodW5rZWRTdHJlYW0gaW1wbGVtZW50cyBJU3RyZWFtIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0NodW5rZWRTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9tb25pdG9yRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBfc3RyZWFtU3RhdGlzdGljczogTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3M7XG4gIHByaXZhdGUgX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQodGhpcyk7XG4gIH1cblxuICBzdGFydCh1cmk6IFVSTCwgdG9rZW46IHN0cmluZyk6IFByb21pc2U8dm9pZCB8IElEaXNwb3NhYmxlPiB7XG4gICAgcmV0dXJuIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSlcbiAgICAgIC50aGVuKGVuZFBvaW50ID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuXG4gICAgICAgIHJldHVybiBlbmRQb2ludC5zdWJzY3JpYmUodG9rZW4sIG51bGwsIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHtzdGF0dXMsIHN0cmVhbSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBsYWd9KSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IHN0cmVhbTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gbGFnO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgY29tcGxldGVkIFslc10gWyVqXSBbJWpdIFslal0gWyVqXScsXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMuX2NoYW5uZWxDb250ZXh0Lm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9mZmVyU2RwID0gY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHA7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgb3JpZ2luU3RhcnRUaW1lOiBEYXRlLm5vdygpIC0gbGFnICsgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUucm91bmRUcmlwVGltZSAvIDIsXG4gICAgICAgICAgbGFnXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIExpdmVTdHJlYW1pbmcuc3RhcnQodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgb2ZmZXJTZHAsIG9wdGlvbnMpXG4gICAgICAgICAgLnRoZW4ocGxheWVyID0+IHtcbiAgICAgICAgICAgIHRoaXMubW9uaXRvcihwbGF5ZXIpO1xuXG4gICAgICAgICAgICByZXR1cm4gcGxheWVyO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdMaXZlU3RyZWFtaW5nIGZhaWxlZCcsIGUpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtb25pdG9yKHBsYXllcjogSURpc3Bvc2FibGUpOiB2b2lkIHtcbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgY29uc3QgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IG5ld1N0cmVhbVN0YXRpc3RpY3MgPSBMaXZlU3RyZWFtaW5nLmdldFN0YXRzKCk7XG5cbiAgICAgIGlmICh0aGlzLl9zdHJlYW1TdGF0aXN0aWNzICYmXG4gICAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MuY3VycmVudFRpbWUgPj0gbmV3U3RyZWFtU3RhdGlzdGljcy5jdXJyZW50VGltZSAmJlxuICAgICAgICB0aGlzLl9zdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA+PSBuZXdTdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQrKztcblxuICAgICAgICBpZiAodGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA+IDYpIHtcbiAgICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICBwbGF5ZXIuZGlzcG9zZSgpO1xuICAgICAgICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlJywgZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2VkICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlZCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSAhPT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc3RyZWFtU3RhdGlzdGljcyA9IG5ld1N0cmVhbVN0YXRpc3RpY3M7XG4gICAgICB0aGlzLm1vbml0b3IocGxheWVyKTtcbiAgICB9LCAxMDAwKTtcblxuICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIH0pKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nfSBmcm9tICcuL0xpdmVTdHJlYW1pbmcnO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nT3B0aW9ucywgTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtJSGxzUGxheWVyVHlwZX0gZnJvbSAnLi9JSGxzUGxheWVyJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGxzUGxheWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElIbHNQbGF5ZXJUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKExpdmVTdHJlYW1pbmcuaGxzUGxheWVyKSB7XG4gICAgICBpZiAoTGl2ZVN0cmVhbWluZy5obHNQbGF5ZXIuaXNTdXBwb3J0ZWQoKSkge1xuICAgICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgTGl2ZVN0cmVhbWluZy5obHNQbGF5ZXIoe1xuICAgICAgICAgIGVuYWJsZVdvcmtlcjogdHJ1ZSxcbiAgICAgICAgICBtYXhCdWZmZXJMZW5ndGg6IDEsXG4gICAgICAgICAgbGl2ZUJhY2tCdWZmZXJMZW5ndGg6IDAsXG4gICAgICAgICAgbGl2ZVN5bmNEdXJhdGlvbjogNyxcbiAgICAgICAgICBsaXZlRHVyYXRpb25JbmZpbml0eTogdHJ1ZSxcbiAgICAgICAgICBsaXZlTWF4TGF0ZW5jeUR1cmF0aW9uOiBJbmZpbml0eSxcbiAgICAgICAgICBoaWdoQnVmZmVyV2F0Y2hkb2dQZXJpb2Q6IDFcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3BsYXllci5sb2FkU291cmNlKHRoaXMuX21hbmlmZXN0VVJJKTtcbiAgICAgICAgdGhpcy5fcGxheWVyLmF0dGFjaE1lZGlhKHRoaXMuX3ZpZGVvRWxlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5jYW5QbGF5VHlwZSgnYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1cmwnKSkge1xuICAgICAgICB0aGlzLl92aWRlb0VsZW1lbnQuc3JjID0gdGhpcy5fbWFuaWZlc3RVUkk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIExpdmVTdHJlYW1pbmcuaGxzUGxheWVyICYmIExpdmVTdHJlYW1pbmcuaGxzUGxheWVyLmlzU3VwcG9ydGVkKCk7XG4gIH1cblxuICBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLjAsXG4gICAgICAgIGxhZzogMC4wLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB7XG4gICAgICB3aWR0aDogdGhpcy5fcGxheWVyLm1lZGlhLm9mZnNldFdpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLl9wbGF5ZXIubWVkaWEub2Zmc2V0SGVpZ2h0LFxuICAgICAgY3VycmVudFRpbWU6IHRoaXMuX3BsYXllci5tZWRpYS5jdXJyZW50VGltZSxcbiAgICAgIGxhZzogMC4wLFxuICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlLFxuICAgICAgZGF0YUJ1ZmZlcmVkOiAwLjBcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZCAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoKSB7XG4gICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnSURMRScpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnRVJST1InIHx8IHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnRU5ERUQnKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUuaW5jbHVkZXMoJ0xPQURJTkcnKSB8fCB0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZS5pbmNsdWRlcygnV0FJVElORycpKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLl92aWRlb0VsZW1lbnRbJ2N1cnJlbnRUaW1lJ10gfHwgMDtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG5cbiAgICBzdGF0aXN0aWNzLmxhZyA9IE1hdGgubWF4KDAuMCwgKGN1cnJlbnRUaW1lICsgKHRoaXMuX29wdGlvbnMubGFnIC8gMTAwMCkpIC0gdHJ1ZUN1cnJlbnRUaW1lKTtcblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyICYmIHRoaXMuX3BsYXllci5kZXN0cm95KSB7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGVzdHJveSgpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5zZXJ0YWJsZVN0cmVhbXMge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBzdGF0aWMgc2V0dXBNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtKHRyYW5zZm9ybTogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxhbnksIGFueT4sIHN0cmVhbTogTWVkaWFTdHJlYW0pIHtcbiAgICBjb25zdCB2aWRlb1RyYWNrID0gc3RyZWFtLmdldFZpZGVvVHJhY2tzKClbMF07XG5cbiAgICBpZiAodmlkZW9UcmFjaykge1xuICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm19KTtcbiAgICAgIGNvbnN0IHByb2Nlc3NvciA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yKHt0cmFjazogdmlkZW9UcmFja30pO1xuICAgICAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3Ioe2tpbmQ6ICd2aWRlbyd9KTtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHByb2Nlc3Nvci5yZWFkYWJsZTtcbiAgICAgIGNvbnN0IHNpbmsgPSBnZW5lcmF0b3Iud3JpdGFibGU7XG5cbiAgICAgIHNvdXJjZVxuICAgICAgICAucGlwZVRocm91Z2godHJhbnNmb3JtZXIpXG4gICAgICAgIC5waXBlVG8oc2luayk7XG5cbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVkU3RyZWFtID0gbmV3IE1lZGlhU3RyZWFtKCk7XG5cbiAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLmFkZFRyYWNrKGdlbmVyYXRvcik7XG4gICAgICBzdHJlYW0uZ2V0QXVkaW9UcmFja3MoKS5mb3JFYWNoKGF1ZGlvVHJhY2sgPT4ge1xuICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayhhdWRpb1RyYWNrKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdHJhbnNmb3JtZWRTdHJlYW07XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW5zZXJ0YWJsZVN0cmVhbXMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IFdlYlBsYXllciBmcm9tICcuL1dlYlBsYXllcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgU2hha2FQbGF5ZXIgZnJvbSAnLi9TaGFrYVBsYXllcic7XG5pbXBvcnQgSGxzUGxheWVyIGZyb20gJy4vSGxzUGxheWVyJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCB7SGxzUGxheWVyVHlwZSwgTGl2ZVN0cmVhbWluZ09wdGlvbnMsIExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzLCBTaGFrYVR5cGUsIFdlYlBsYXllclR5cGV9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgTGl2ZVN0cmVhbWluZyB7XG4gIHByaXZhdGUgc3RhdGljIF9wZW5kaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgc3RhdGljIF9obHNQbGF5ZXI6IEhsc1BsYXllclR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9waGVuaXhXZWJQbGF5ZXI6IFdlYlBsYXllclR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9zaGFrYTogU2hha2FUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgc3RhdGljIF9wbGF5ZXI6IFNoYWthUGxheWVyIHwgV2ViUGxheWVyIHwgSGxzUGxheWVyO1xuXG4gIHN0YXRpYyBnZXQgaGxzUGxheWVyKCk6IEhsc1BsYXllclR5cGUge1xuICAgIHJldHVybiB0aGlzLl9obHNQbGF5ZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHBoZW5peFdlYlBsYXllcigpOiBXZWJQbGF5ZXJUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fcGhlbml4V2ViUGxheWVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaGFrYSgpOiBTaGFrYVR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zaGFrYTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBzdGFydCh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHN0cmVhbUlkOiBzdHJpbmcsIG9mZmVyU2RwOiBzdHJpbmcsIG9wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zKTogUHJvbWlzZTxJRGlzcG9zYWJsZT4ge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgaWYgKHRoaXMuX2hsc1BsYXllciB8fCB0aGlzLl9zaGFrYSB8fCB0aGlzLl9waGVuaXhXZWJQbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCk7XG4gICAgfVxuXG4gICAgaWYgKCFTREsud2ViUGxheWVyTG9hZGVyICYmICFTREsuc2hha2FQbGF5ZXJMb2FkZXIgJiYgIVNESy5obHNKc0xvYWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBwbGF5ZXIgaXMgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIVNESy53ZWJQbGF5ZXJMb2FkZXIgJiYgIVNESy5zaGFrYVBsYXllckxvYWRlciAmJiAhU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkLWZlYXR1cmUsIGFkZCBzdHJlYW0gcGxheWVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKFNESy5obHNKc0xvYWRlcikge1xuICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgU0RLLmhsc0pzTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5faGxzUGxheWVyID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTREsud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBTREsud2ViUGxheWVyTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5fcGhlbml4V2ViUGxheWVyID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTREsuc2hha2FQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIFNESy5zaGFrYVBsYXllckxvYWRlcihwbGF5ZXIgPT4ge1xuICAgICAgICAgIHRoaXMuX3NoYWthID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0U3RhdHMoKTogTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBsYXkoUGxheWVyOiB0eXBlb2YgV2ViUGxheWVyIHwgdHlwZW9mIFNoYWthUGxheWVyIHwgdHlwZW9mIEhsc1BsYXllciwgdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBzdHJlYW1JZDogc3RyaW5nLCBvZmZlclNkcDogc3RyaW5nLCBvcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucyk6IElEaXNwb3NhYmxlIHtcbiAgICBjb25zdCBkYXNoTWFuaWZlc3RVcmxNYXRjaCA9IG9mZmVyU2RwLm1hdGNoKC9hPXgtcGxheWxpc3Q6KFteXFxuXSpbLl1tcGRcXD8/W15cXHNdKikvbSk7XG4gICAgY29uc3QgaGxzTWFuaWZlc3RVcmxNYXRjaCA9IG9mZmVyU2RwLm1hdGNoKC9hPXgtcGxheWxpc3Q6KFteXFxuXSpbLl1tM3U4XFw/P1teXFxzXSopL20pO1xuICAgIGNvbnN0IG1hbmlmZXN0VXJsID0gZGFzaE1hbmlmZXN0VXJsTWF0Y2ggJiYgZGFzaE1hbmlmZXN0VXJsTWF0Y2hbMV0gPyBkYXNoTWFuaWZlc3RVcmxNYXRjaFsxXSA6ICcnO1xuICAgIGNvbnN0IHBsYXlsaXN0VXJsID0gaGxzTWFuaWZlc3RVcmxNYXRjaCAmJiBobHNNYW5pZmVzdFVybE1hdGNoWzFdID8gaGxzTWFuaWZlc3RVcmxNYXRjaFsxXSA6ICcnO1xuXG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhscyB8fCAodGhpcy5faGxzUGxheWVyICYmIHRoaXMuX2hsc1BsYXllci5pc1N1cHBvcnRlZCgpKSkge1xuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IFBsYXllcih2aWRlb0VsZW1lbnQsICdobHMnLCBzdHJlYW1JZCwgcGxheWxpc3RVcmwsIG9wdGlvbnMpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIuc3RhcnQoKTtcblxuICAgICAgcmV0dXJuIHRoaXMuX3BsYXllcjtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgUGxheWVyKHZpZGVvRWxlbWVudCwgJ2Rhc2gnLCBzdHJlYW1JZCwgbWFuaWZlc3RVcmwsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5fcGxheWVyLnN0YXJ0KCk7XG5cbiAgICByZXR1cm4gdGhpcy5fcGxheWVyO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbG9hZGVkKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgc3RyZWFtSWQ6IHN0cmluZywgb2ZmZXJTZHA6IHN0cmluZyk6IElEaXNwb3NhYmxlIHtcbiAgICBpZiAoIXRoaXMuX3NoYWthICYmICF0aGlzLl9waGVuaXhXZWJQbGF5ZXIgJiYgIXRoaXMuX2hsc1BsYXllcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9obHNQbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXkoSGxzUGxheWVyLCB2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCwge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBwcmVmZXJOYXRpdmU6IEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhsc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BoZW5peFdlYlBsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShXZWJQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc2hha2EpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXkoU2hha2FQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGVudW0gTmV0d29ya1N0YXRlcyB7XG4gIE5ldHdvcmtFbXB0eSxcbiAgTmV0d29ya0lkbGUsXG4gIE5ldHdvcmtMb2FkaW5nLFxuICBOZXR3b3JrTm9Tb3VyY2Vcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQge1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uU2VydmljZSBmcm9tICcuLi8uLi9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlJztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uLy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBSdGNDb25maWd1cmF0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXInO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dCc7XG5pbXBvcnQgSW5zZXJ0YWJsZVN0cmVhbXMgZnJvbSAnLi9JbnNlcnRhYmxlU3RyZWFtcyc7XG5cbmNvbnN0IGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsID0gMTAwO1xuY29uc3QgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCA9IDMwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsVGltZVN0cmVhbSBpbXBsZW1lbnRzIElTdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUmVhbFRpbWVTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3RvcihjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBwZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gICAgdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSA9IGhhbmRsZVN0cmVhbUZhaWx1cmU7XG4gIH1cblxuICBzdGFydCh1cmksIHRva2VuLCBsaXN0ZW5PblN0cmVhbVNldHVwLCBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpLFxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgIF0pXG4gICAgICAudGhlbigoW2VuZFBvaW50LCB7bG9jYWxPZmZlciwgcGVlckNvbm5lY3Rpb259XSkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSA9IGVuZFBvaW50O1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ29ubmVjdGluZyB0byBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdMb2NhbCBvZmZlcjpcXG4nICsgbG9jYWxPZmZlci5zZHApO1xuXG4gICAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5jbGllbnRPZmZlckRpc2FibGVkIHx8ICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c1NldENvbmZpZ3VyYXRpb24gfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbikge1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgIGxvY2FsT2ZmZXIgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50LnN1YnNjcmliZSh0b2tlbiwgbG9jYWxPZmZlciwgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoe3N0YXR1cywgc3RyZWFtLCBydGNDb25maWd1cmF0aW9uLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGxhZ30pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcudmFsdWUgPSBsYWc7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFN1YnNjcmliZSBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgcnRjQ29uZmlndXJhdGlvbixcbiAgICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5tYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hcHBseVJ0Y0NvbmZpZ3VyYXRpb24odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlLCBydGNDb25maWd1cmF0aW9uKVxuICAgICAgICAgIC50aGVuKHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGxldCBzdWJtaXRDYW5kaWRhdGVzVGltZW91dDtcbiAgICAgICAgICAgIGxldCBjYW5jZWxEaXNjb3ZlcnkgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBkaXNjb3ZlcnlDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdID0gW107XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghU0RLLnNlbmRMb2NhbENhbmRpZGF0ZXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZS5jYW5kaWRhdGUgJiYgZS5jYW5kaWRhdGUuY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKGUuY2FuZGlkYXRlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFzdWJtaXRDYW5kaWRhdGVzVGltZW91dCkge1xuICAgICAgICAgICAgICAgIHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtLCBjYW5kaWRhdGVzLCBkaXNjb3ZlcnlDb21wbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7c3RhdHVzLCBvcHRpb25zfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZXMoJ2NhbmNlbCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxEaXNjb3ZlcnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEFkZGVkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10gYW5kIG9wdGlvbnMgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgcmV0cnlDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBzdG9wIG5vcm1hbGx5IHRoZSBwZWVyIGNvbm5lY3Rpb24gaXMgdW5yZWdpc3RlcmVkIGZpcnN0LlxuICAgICAgICAgICAgICAgIC8vIFRodXMgYW55dGltZSB3ZSBzZWUgYSBjbG9zZWQgcGVlciBjb25uZWN0aW9uIHRoYXQgaXMgc3RpbGwgdmFsaWQsIGl0IGlzIGFuIGVycm9yLlxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgcGVlciBjb25uZWN0aW9uIHN0b3BwZWQgd2l0aCBzdGF0ZSBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgc3dpdGNoIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjaGVja2luZyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29tcGxldGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ25ldyc6XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBjYXNlICdkaXNjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHRyeWluZyB0byByZWNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdjbG9zZWQnOlxuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCByZXRyeWluZyB0byBjb25uZWN0JywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW1Qcm9taXNlID0gbmV3IFByb21pc2U8TWVkaWFTdHJlYW0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5vblRyYWNrRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ1N0cmVhbSBzZXR1cCB0aW1lZCBvdXQnKSksIGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub250cmFjayA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgc3RyZWFtID0gZS5zdHJlYW1zWzBdO1xuXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjay52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBJbnNlcnRhYmxlU3RyZWFtcy5zZXR1cE1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0odGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjay52YWx1ZSwgc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHRyYWNrTGlzdGVuZXIgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGUuc3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbXNbMF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdTdHJlYW0gc2V0dXAgdGltZWQgb3V0JykpO1xuICAgICAgICAgICAgICB9LCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0KTtcblxuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIGFuc3dlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHtcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbihhbnN3ZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBhbnN3ZXIgWyVqXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBhbnN3ZXIpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtLCBhbnN3ZXIpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKHtzdGF0dXMsIHNlc3Npb25EZXNjcmlwdGlvbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5tYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgbG9jYWwgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLnN1Y2Nlc3ModGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBtZWRpYVN0cmVhbVByb21pc2U7XG4gICAgICAgICAgICB9KS50aGVuKG1lZGlhU3RyZWFtID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbWVkaWFTdHJlYW07XG5cbiAgICAgICAgICAgICAgY29uc3QgcnRjQ29ubmVjdGlvbk1vbml0b3IgPSBuZXcgUnRjQ29ubmVjdGlvbk1vbml0b3IocGVlckNvbm5lY3Rpb24sIG1lZGlhU3RyZWFtLCB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5yb3VuZFRyaXBUaW1lIC8gNCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yKTtcblxuICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gcnRjQ29ubmVjdGlvbk1vbml0b3IucnRjU3RhdGlzdGljLnN1YnNjcmliZShzdGF0aXN0aWNzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzLnZhbHVlID0gc3RhdGlzdGljcztcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgIXRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgYXVkaW9UcmFja0ZhaWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCB2aWRlb1RyYWNrRmFpbGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy5hdWRpbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy5hdWRpby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoYXVkaW9UcmFja0ZhaWxlZCAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBBdWRpbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLmF1ZGlvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXAgIT09IHN0YXRpc3RpY3MudmlkZW8udGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZGVvVHJhY2tGYWlsZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkID09PSBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvVHJhY2tGYWlsZWQgJiYgbmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1slc10gVmlkZW8gdHJhY2sgZmFpbGVkIHdpdGggbGFzdCBieXRlc1JlY2VpdmVkIFslc10gaXMgZXF1YWwgdG8gcHJldmlvdXMgYnl0ZXNSZWNlaXZlZCBbJXNdIHdpdGhpbiBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcy52aWRlby5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEdXJhdGlvbnMoc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXAgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXApLnRvSXNvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLnZpZGVvO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgodmlkZW9UcmFja0ZhaWxlZCB8fCBhdWRpb1RyYWNrRmFpbGVkKSAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yLmRpc3Bvc2UoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgdHJhY2sgc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmICghU0RLLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcHBseVJ0Y0NvbmZpZ3VyYXRpb24oXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uIHwgbnVsbCxcbiAgICBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICBpZiAoIW9wdGlvbmFsUGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24gPSBSdGNDb25maWd1cmF0aW9uTWFuYWdlci50cnVuY2F0ZUljZVNlcnZlcnMocnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybiBTREsucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1J0Y0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi5vcHRpb25hbFBlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIC4uLnJ0Y0NvbmZpZ3VyYXRpb25cbiAgICB9O1xuXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKG5ld1J0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBwcml2YXRlIHJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZztcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA8IFNESy5tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIHx8ICFTREsuYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cysrO1xuXG4gICAgICBjb25zdCBpc0NsaWVudE9mZmVyRmxvdyA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uPy50eXBlID09PSAnb2ZmZXInO1xuXG4gICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIWlzQ2xpZW50T2ZmZXJGbG93XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmVjb25uZWN0aW5nIHBlZXIgY29ubmVjdGlvbiBieSByZXN0YXJ0aW5nIElDRScpO1xuXG4gICAgICBjb25zdCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHtpY2VSZXN0YXJ0OiB0cnVlfSkudGhlbihvZmZlciA9PiB7XG4gICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKG9mZmVyKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihjdXJyZW50TG9jYWxEZXNjcmlwdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24nLCBlKTtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbiBhZnRlciBbJXNdIGF0dGVtcHRzLCBwZXJmb3JtaW5nIGZ1bGwgcmVjb3ZlcnknLCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nfSBmcm9tICcuL0xpdmVTdHJlYW1pbmcnO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nT3B0aW9ucywgTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG50eXBlIFNoYWthT3B0aW9ucyA9IHtcbiAgYWJyOiB7XG4gICAgZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlOiBudW1iZXI7XG4gIH07XG4gIG1hbmlmZXN0OiB7XG4gICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICB0aW1lb3V0OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbiAgc3RyZWFtaW5nOiB7XG4gICAgcmVidWZmZXJpbmdHb2FsOiBudW1iZXI7XG4gICAgYnVmZmVyaW5nR29hbDogbnVtYmVyO1xuICAgIGJ1ZmZlckJlaGluZDogbnVtYmVyO1xuICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgdGltZW91dDogbnVtYmVyO1xuICAgICAgbWF4QXR0ZW1wdHM6IG51bWJlcjtcbiAgICAgIGJhY2tvZmZGYWN0b3I6IG51bWJlcjtcbiAgICB9O1xuICB9O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJU2hha2Ege1xuICBjb25maWd1cmU6IChvOiBTaGFrYU9wdGlvbnMpID0+IHZvaWQ7XG4gIGxvYWQ6ICh1cmk6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgZ2V0U3RhdHM6ICgpID0+IExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzO1xuICBkZXN0cm95OiAoKSA9PiB2b2lkO1xuICB1bmxvYWQ6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNoYWthUGxheWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1NoYWthUGxheWVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2luZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYW5pZmVzdFVSSTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBfcGxheWVyOiBJU2hha2E7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoTGl2ZVN0cmVhbWluZy5zaGFrYSkge1xuICAgICAgY29uc3QgcGxheWVyT3B0aW9uczogU2hha2FPcHRpb25zID0ge1xuICAgICAgICBhYnI6IHtkZWZhdWx0QmFuZHdpZHRoRXN0aW1hdGU6IDIwMDAwMDB9LFxuICAgICAgICBtYW5pZmVzdDoge3JldHJ5UGFyYW1ldGVyczoge3RpbWVvdXQ6IDEwMDAwfX0sXG4gICAgICAgIHN0cmVhbWluZzoge1xuICAgICAgICAgIHJlYnVmZmVyaW5nR29hbDogMixcbiAgICAgICAgICBidWZmZXJpbmdHb2FsOiAxMCxcbiAgICAgICAgICBidWZmZXJCZWhpbmQ6IDMwLFxuICAgICAgICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgICAgICAgdGltZW91dDogMTAwMDAsXG4gICAgICAgICAgICBtYXhBdHRlbXB0czogMTAsXG4gICAgICAgICAgICBiYWNrb2ZmRmFjdG9yOiAxLjFcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBMaXZlU3RyZWFtaW5nLnNoYWthLlBsYXllcih0aGlzLl92aWRlb0VsZW1lbnQpO1xuICAgICAgdGhpcy5sb2FkUGxheWVyKHBsYXllck9wdGlvbnMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgZ2V0U3RhdHMoKTogTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICghdGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBjdXJyZW50VGltZTogMCxcbiAgICAgICAgbGFnOiAwLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB7XG4gICAgICAuLi50aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKSxcbiAgICAgIGN1cnJlbnRUaW1lOiAwLFxuICAgICAgbGFnOiAwXG4gICAgfTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXSB8fCAwO1xuICAgIGNvbnN0IHRydWVDdXJyZW50VGltZSA9IChEYXRlLm5vdygpIC0gdGhpcy5fb3B0aW9ucy5vcmlnaW5TdGFydFRpbWUpIC8gMTAwMDtcbiAgICBjb25zdCBsYWcgPSBNYXRoLm1heCgwLjAsIHRydWVDdXJyZW50VGltZSAtIGN1cnJlbnRUaW1lKTtcblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICAgIHN0YXRpc3RpY3MubGFnID0gbGFnO1xuXG4gICAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPSB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQuZW5kKDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0aXN0aWNzLmVzdGltYXRlZEJhbmR3aWR0aCA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTG9hZGluZztcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MucGxheVRpbWUgPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGU7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnZpZGVvKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0VtcHR5O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIudW5sb2FkKCk7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGxvYWRQbGF5ZXIocGxheWVyQ29uZmlnOiBTaGFrYU9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wbGF5ZXIuY29uZmlndXJlKHBsYXllckNvbmZpZyk7XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcGxheWVyLmxvYWQodGhpcy5fbWFuaWZlc3RVUkkpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gREFTSCBsaXZlIHN0cmVhbSBoYXMgYmVlbiBsb2FkZWQnLCB0aGlzLl9zdHJlYW1JZCk7XG5cbiAgICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQucGxheSkge1xuICAgICAgICB0aGlzLl92aWRlb0VsZW1lbnQucGxheSgpO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEVycm9yIHdoaWxlIGxvYWRpbmcgREFTSCBsaXZlIHN0cmVhbSBbJXNdJywgdGhpcy5fc3RyZWFtSWQsIGUuY29kZSwgZSk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQgQ2h1bmtlZFN0cmVhbSBmcm9tICcuL0NodW5rZWRTdHJlYW0nO1xuaW1wb3J0IFJlYWxUaW1lU3RyZWFtIGZyb20gJy4vUmVhbFRpbWVTdHJlYW0nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyZWFtRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtaW5nJyk7XG5cbiAgc3RhdGljIGNyZWF0ZSh0b2tlbjogc3RyaW5nLCBjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogSVN0cmVhbSB7XG4gICAgY29uc3QgdG9rZW5DYXBhYmlsaXRpZXMgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS5jYXBhYmlsaXRpZXM7XG5cbiAgICBpZiAodG9rZW5DYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3J0bXAnKSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdTREsgZG9lcyBub3Qgc3VwcG9ydCBSVE1QIHBsYXliYWNrLicpO1xuICAgICAgY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRva2VuQ2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdzdHJlYW1pbmcnKSkge1xuICAgICAgcmV0dXJuIG5ldyBDaHVua2VkU3RyZWFtKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJlYWxUaW1lU3RyZWFtKGNoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdHJlYW1GYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7TGl2ZVN0cmVhbWluZ30gZnJvbSAnLi9MaXZlU3RyZWFtaW5nJztcbmltcG9ydCB7TGl2ZVN0cmVhbWluZ09wdGlvbnMsIExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxuY29uc3QgYmFuZHdpZHRoVG9TdGFydEF0ID0gMzAwMDAwMDsgLy8gQ29ycmVzcG9uZHMgdG8gNzIwcCBpbiBtb3N0IHNldHVwc1xuY29uc3QgbWluVGltZUJlZm9yZU5leHRSZWxvYWQgPSAxNTAwMDtcblxudHlwZSBFdmVudExpc3RlbmVyRm9yV2ViUGxheWVyID0gKGV2dDogV2ViUGxheWVyRXZlbnQpID0+IHZvaWQ7XG50eXBlIFdlYlBsYXllckV2ZW50ID0ge1xuICBjb2RlOiBudW1iZXI7XG4gIHNldmVyaXR5OiBudW1iZXI7XG4gIGVycm9yOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElXZWJQbGF5ZXIge1xuICBzdGFydDogKHVybDogc3RyaW5nKSA9PiB2b2lkO1xuICBhZGRFdmVudExpc3RlbmVyKG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJGb3JXZWJQbGF5ZXIpOiB2b2lkO1xuICBkaXNwb3NlKCk6IHZvaWQ7XG4gIGVycm9yczoge1xuICAgIHNldmVyaXR5OiB7XG4gICAgICBSRUNPVkVSQUJMRTogbnVtYmVyO1xuICAgIH07XG4gIH07XG4gIGdldFN0YXRzKCk6IExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignV2ViUGxheWVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2luZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYW5pZmVzdFVSSTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBfcGxheWVyOiBJV2ViUGxheWVyO1xuICBwcml2YXRlIF9sYXN0UmVsb2FkVGltZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKExpdmVTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyKSB7XG4gICAgICBjb25zdCBwbGF5ZXJPcHRpb25zID0ge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBiYW5kd2lkdGhUb1N0YXJ0QXRcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBMaXZlU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5XZWJQbGF5ZXIodGhpcy5fbG9nZ2VyLCB0aGlzLl92aWRlb0VsZW1lbnQsIHBsYXllck9wdGlvbnMpO1xuICAgICAgdGhpcy5fcGxheWVyLnN0YXJ0KHRoaXMuX21hbmlmZXN0VVJJKTtcblxuICAgICAgdGhpcy5fcGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JPYmplY3QgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW5SZWxvYWQoKSAmJiBlcnJvck9iamVjdCAmJiAoZXJyb3JPYmplY3QuY29kZSA9PT0gMyB8fCBlcnJvck9iamVjdC5zZXZlcml0eSA9PT0gTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuZXJyb3JzLnNldmVyaXR5LlJFQ09WRVJBQkxFKSkge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdSZWxvYWRpbmcgdW5oZWFsdGh5IHN0cmVhbSBhZnRlciBlcnJvciBldmVudCBbJWpdJywgZXJyb3JPYmplY3QpO1xuICAgICAgICAgIHRoaXMucmVsb2FkSWZBYmxlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZWxvYWQgd2l0aCBlcnJvciBbJWpdJywgZXJyb3JPYmplY3QpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIgJiYgTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuaXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLjAsXG4gICAgICAgIGxhZzogMC4wLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlLFxuICAgICAgICBkYXRhQnVmZmVyZWQ6IDAuMFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0aXN0aWNzID0gdGhpcy5fcGxheWVyLmdldFN0YXRzKCk7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lIHx8IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXTtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG5cbiAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgIHN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID0gdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmVuZCgwKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5pc05hdGl2ZSAmJiBzdGF0aXN0aWNzLmRlbGl2ZXJ5VHlwZSA9PT0gJ0hscycpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZSAtIHN0YXRpc3RpY3MubGFnO1xuICAgIH1cblxuICAgIGlmICghc3RhdGlzdGljcy5jdXJyZW50VGltZSkge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgIH1cblxuICAgIGlmICghc3RhdGlzdGljcy5pc05hdGl2ZSkge1xuICAgICAgc3RhdGlzdGljcy5sYWcgPSBNYXRoLm1heCgwLjAsIHRydWVDdXJyZW50VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5lc3RpbWF0ZWRCYW5kd2lkdGggPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnBsYXlUaW1lID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgdGhpcy5fcGxheWVyLmRpc3Bvc2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5SZWxvYWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQgPSAhdGhpcy5fbGFzdFJlbG9hZFRpbWUgfHwgRGF0ZS5ub3coKSAtIHRoaXMuX2xhc3RSZWxvYWRUaW1lID4gbWluVGltZUJlZm9yZU5leHRSZWxvYWQ7XG5cbiAgICByZXR1cm4gdGhpcy5fdmlkZW9FbGVtZW50ICYmIHRoaXMuX3BsYXllciAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoICE9PSAwICYmIGhhc0VsYXBzZWRNaW5UaW1lU2luY2VMYXN0UmVsb2FkO1xuICB9XG5cbiAgcHJpdmF0ZSByZWxvYWRJZkFibGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblJlbG9hZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gUmVsb2FkaW5nIHVuaGVhbHRoeSBzdHJlYW0gdGhhdCB3YXMgYWN0aXZlIGZvciBhdCBsZWFzdCBbJXNdIHNlY29uZHMnLCB0aGlzLl9zdHJlYW1JZCwgbWluVGltZUJlZm9yZU5leHRSZWxvYWQgLyAxMDAwKTtcblxuICAgIHRoaXMuX2xhc3RSZWxvYWRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9wbGF5ZXIuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZGVjbGFyZSBjb25zdCBfX1NES1ZFUlNJT05fXzogc3RyaW5nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJzaW9uTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIF9kZWZhdWx0VmVyc2lvbiA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblxuICBzdGF0aWMgZ2V0IHNka1ZlcnNpb24oKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIF9fU0RLVkVSU0lPTl9fO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmVyc2lvbjtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlTZXJ2aWNlIGZyb20gJy4vVGVsZW1ldHJ5U2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4uL2xvZ2dlci9JQXBwZW5kZXInO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeVNlcnZpY2U6IFRlbGVtZXRyeVNlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5O1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGhyZXNob2xkO1xuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UgPSBuZXcgVGVsZW1ldHJ5U2VydmljZSh0ZWxlbWV0cnlDb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlLnB1c2gobG9nTGV2ZWwsIG1lc3NhZ2UsIGNhdGVnb3J5LCBkYXRlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbG9ncyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3RocmVzaG9sZCA9IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgdGVsZW1ldHJ5VXJsID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgdGVsZW1ldHJ5VXJsLnBhdGhuYW1lID0gdGVsZW1ldHJ5VXJsLnBhdGhuYW1lICsgJy9sb2dzJztcblxuICAgIHRoaXMuX3VybCA9IHRlbGVtZXRyeVVybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDgxOTI7XG5cbmludGVyZmFjZSBJTG9nSXRlbSB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIGxldmVsOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG5cbiAgcHJpdmF0ZSBfbG9nczogQXJyYXk8SUxvZ0l0ZW0+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZG9tYWluID0gbG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IodGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIHRpbWVzdGFtcDogRGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IGxvZ1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBsZXZlbDogTG9nZ2luZ0xldmVsW2xvZ0xldmVsXSxcbiAgICAgIGNhdGVnb3J5LFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluXG4gICAgfTtcblxuICAgIGlmIChsb2dMZXZlbCA8IExvZ2dpbmdMZXZlbC5FcnJvcikge1xuICAgICAgdGhpcy5fbG9ncy5wdXNoKGxvZ1JlY29yZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xvZ3MudW5zaGlmdChsb2dSZWNvcmQpO1xuICAgIH1cblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRMb2dzKGxvZ01lc3NhZ2VzOiBBcnJheTxJTG9nSXRlbT4pOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IGxvZ01lc3NhZ2VzfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IGZldGNoKHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRMb2dzSWZBYmxlKCk6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2xvZ3MubGVuZ3RoIDw9IDAgfHwgdGhpcy5faXNTZW5kaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IG51bWJlck9mTG9nc1RvU2VuZCA9IDA7XG4gICAgbGV0IHNpemVPZkxvZ3NUb1NlbmQgPSAwO1xuXG4gICAgdGhpcy5faXNTZW5kaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IGdldExvZ1NpemUgPSAobG9nOiBJTG9nSXRlbSk6IG51bWJlciA9PiBPYmplY3QudmFsdWVzKGxvZylcbiAgICAgIC5yZWR1Y2UoKHN1bSwgaXRlbSkgPT4gc3VtICsgKGl0ZW0gPyBpdGVtLmxlbmd0aCA6IDApLCAwKTtcblxuICAgIHdoaWxlICh0aGlzLl9sb2dzLmxlbmd0aCA+IG51bWJlck9mTG9nc1RvU2VuZCAmJiBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyBzaXplT2ZMb2dzVG9TZW5kIDwgcmVxdWVzdFNpemVMaW1pdCkge1xuICAgICAgc2l6ZU9mTG9nc1RvU2VuZCArPSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQrKztcbiAgICB9XG5cbiAgICBpZiAoIW51bWJlck9mTG9nc1RvU2VuZCkge1xuICAgICAgdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2UgPSB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZS5zdWJzdHJpbmcoMCxcbiAgICAgICAgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgKHJlcXVlc3RTaXplTGltaXQgLSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkpKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCA9IDE7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nTWVzc2FnZXMgPSB0aGlzLl9sb2dzLnNsaWNlKDAsIG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICB0aGlzLl9sb2dzID0gdGhpcy5fbG9ncy5zbGljZShudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZExvZ3MobG9nTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEdXJhdGlvbnMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kdXJhdGlvbjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGR1cmF0aW9uID0gMCkge1xuICAgIHRoaXMuX2R1cmF0aW9uID0gZHVyYXRpb247XG4gIH1cblxuICB0b0lzb1N0cmluZygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9kdXJhdGlvbiA9PT0gMCkge1xuICAgICAgcmV0dXJuICdQMFMnO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTmVnYXRpdmUgPSB0aGlzLl9kdXJhdGlvbiA8IDA7XG4gICAgY29uc3QgZHVyYXRpb24gPSBpc05lZ2F0aXZlID8gTWF0aC5hYnModGhpcy5fZHVyYXRpb24pIDogdGhpcy5fZHVyYXRpb247XG4gICAgbGV0IG9mZnNldCA9IE1hdGguZmxvb3IoZHVyYXRpb24pO1xuICAgIGNvbnN0IG1pbGxpc2Vjb25kcyA9IG9mZnNldCAlIDEwMDA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDEwMDApO1xuXG4gICAgY29uc3Qgc2Vjb25kcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBtaW51dGVzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IGhvdXJzID0gb2Zmc2V0ICUgMjQ7XG4gICAgY29uc3QgcGFydHMgPSBbJ1BUJ107XG5cbiAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLScpO1xuICAgIH1cblxuICAgIGlmIChob3Vycykge1xuICAgICAgcGFydHMucHVzaChob3VycyArICdIJyk7XG4gICAgfVxuXG4gICAgaWYgKG1pbnV0ZXMpIHtcbiAgICAgIHBhcnRzLnB1c2gobWludXRlcyArICdNJyk7XG4gICAgfVxuXG4gICAgaWYgKHNlY29uZHMgfHwgbWlsbGlzZWNvbmRzKSB7XG4gICAgICBwYXJ0cy5wdXNoKFN0cmluZyhzZWNvbmRzKSk7XG5cbiAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgcGFydHMucHVzaCgnLicgKyB0aGlzLnBhZFN0YXJ0KG1pbGxpc2Vjb25kcy50b1N0cmluZygpLCAzLCAnMCcpKTtcbiAgICAgIH1cblxuICAgICAgcGFydHMucHVzaCgnUycpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5qb2luKCcnKTtcbiAgfVxuXG4gIHBhZFN0YXJ0KGl0ZW06IHN0cmluZywgdGFyZ2V0TGVuZ3RoOiBudW1iZXIsIHBhZFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggPj4gMDtcbiAgICBwYWRTdHJpbmcgPSBTdHJpbmcoKHR5cGVvZiBwYWRTdHJpbmcgIT09ICd1bmRlZmluZWQnID8gcGFkU3RyaW5nIDogJyAnKSk7XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggPiB0YXJnZXRMZW5ndGgpIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCAtIGl0ZW0ubGVuZ3RoO1xuXG4gICAgaWYgKHRhcmdldExlbmd0aCA+IHBhZFN0cmluZy5sZW5ndGgpIHtcbiAgICAgIHBhZFN0cmluZyArPSBwYWRTdHJpbmcucmVwZWF0KHRhcmdldExlbmd0aCAvIHBhZFN0cmluZy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWRTdHJpbmcuc2xpY2UoMCwgdGFyZ2V0TGVuZ3RoKSArIGl0ZW07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAyMDAwO1xuY29uc3QgZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAxO1xuY29uc3QgZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAzMDAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4cG9uZW50aWFsQmFja29mZiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQsXG4gICAgbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQsXG4gICAgbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRcbiAgKSB7XG4gICAgdGhpcy5fYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gICAgdGhpcy5fbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IG1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gICAgdGhpcy5fbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gIH1cblxuICBnZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KGZhaWx1cmVDb3VudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMgPSB0aGlzLl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIC8gMTAwMDtcbiAgICBjb25zdCByYW5kb21pemF0aW9uID0gMC41ICsgKDAuNSAqIE1hdGgucmFuZG9tKCkpOyAvLyBbMC41LCAxKVxuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZiA9IE1hdGgucG93KGJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcywgZmFpbHVyZUNvdW50IC0gMik7IC8vICBbMS80IDEvMiAxIDIgNCA4IC4uLi5dXG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24gPSBNYXRoLmZsb29yKGV4cG9uZW50aWFsQmFja29mZikgKiByYW5kb21pemF0aW9uO1xuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCA9IE1hdGguY2VpbChNYXRoLm1heChleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiAqIDEwMDAsIHRoaXMuX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQpKTtcblxuICAgIHJldHVybiBNYXRoLm1pbihleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQsIHRoaXMuX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSUNvbXBhcmFibGUgZnJvbSAnLi4vbGFuZy9JQ29tcGFyYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpbWVuc2lvbiBpbXBsZW1lbnRzIElDb21wYXJhYmxlPERpbWVuc2lvbj4ge1xuICByZWFkb25seSB3aWR0aDogbnVtYmVyO1xuICByZWFkb25seSBoZWlnaHQ6IG51bWJlcjtcblxuICBzdGF0aWMgZ2V0IGVtcHR5KCk6IERpbWVuc2lvbiB7XG4gICAgcmV0dXJuIG5ldyBEaW1lbnNpb24oMCwgMCk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgfVxuXG4gIGVxdWFscyhvdGhlcjogRGltZW5zaW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG90aGVyICYmIHRoaXMud2lkdGggPT09IG90aGVyLndpZHRoICYmIHRoaXMuaGVpZ2h0ID09PSBvdGhlci5oZWlnaHQ7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLndpZHRofXgke3RoaXMuaGVpZ2h0fWA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7U3RyZWFtU2V0dXBMaXN0ZW5lcn0gZnJvbSAnLi4vZG9tL1N0cmVhbVNldHVwTGlzdGVuZXInO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBOZXR3b3JrTW9uaXRvciBmcm9tICcuLi9kb20vTmV0d29ya01vbml0b3InO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbmludGVyZmFjZSBJTmV0d29ya1N0YXRpc3RpY3Mge1xuICBydHQ/OiBudW1iZXI7XG4gIGVmZmVjdGl2ZVR5cGU/OiBzdHJpbmc7XG4gIGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXNzaW9uVGVsZW1ldHJ5IGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU2Vzc2lvblRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gU0RLLmFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHJlYWRvbmx5IF9uZXR3b3JrTW9uaXRvcjogTmV0d29ya01vbml0b3IgPSBuZXcgTmV0d29ya01vbml0b3IoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIF9sYXN0TmV0d29ya1N0YXRpc3RpY3M6IElOZXR3b3JrU3RhdGlzdGljcyA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyLCBtZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2UpIHtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yKTtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IG1ldHJpY3NTZXJ2aWNlO1xuXG4gICAgaWYgKCF0aGlzLl9uZXR3b3JrTW9uaXRvci5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5pc0ZvcmVncm91bmQuc3Vic2NyaWJlKGlzRm9yZWdyb3VuZCA9PiB7XG4gICAgICB0aGlzLnJlY29yZEZvcmVncm91bmRDaGFuZ2UoaXNGb3JlZ3JvdW5kKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLnJ0dC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrUlRUVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmVmZmVjdGl2ZVR5cGUuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gIH1cblxuICBsaXN0ZW5PblN0cmVhbVNldHVwKCk6IFN0cmVhbVNldHVwTGlzdGVuZXIge1xuICAgIHJldHVybiBuZXcgU3RyZWFtU2V0dXBMaXN0ZW5lcih0aGlzLl9wYWdlTG9hZFRpbWUpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZEZvcmVncm91bmRDaGFuZ2UoaXNGb3JlZ3JvdW5kOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCB0aW1lU2luY2VMYXN0Q2hhbmdlID0gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBpc0ZvcmVncm91bmQgPyBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQgOiBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkJhY2tncm91bmQsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlTGFzdENoYW5nZX1cbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ0FwcGxpY2F0aW9uIGhhcyBnb25lIGludG8gdGhlIFslc10gYWZ0ZXIgWyVzXSBtcycsXG4gICAgICBpc0ZvcmVncm91bmQgPyAnZm9yZWdyb3VuZCcgOiAnYmFja2dyb3VuZCcsXG4gICAgICBuZXcgRHVyYXRpb25zKHRpbWVTaW5jZUxhc3RDaGFuZ2UpLnRvSXNvU3RyaW5nKCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya1JUVFVwZGF0ZShuZXdSVFQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkUnR0ID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLnJ0dDtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQgPSBuZXdSVFQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogbmV3UlRUfSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZFJ0dCA/IHt1aW50NjQ6IG9sZFJ0dH0gOiB1bmRlZmluZWQsXG4gICAgICByZXNvdXJjZTogJ25hdmlnYXRvcidcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBSVFQgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld1JUVCxcbiAgICAgIG9sZFJ0dFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKG5ld05ldHdvcmtUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZE5ldHdvcmtUeXBlID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGU7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZWZmZWN0aXZlVHlwZSA9IG5ld05ldHdvcmtUeXBlO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5OZXR3b3JrVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdOZXR3b3JrVHlwZX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGROZXR3b3JrVHlwZSA/IHtzdHJpbmc6IG9sZE5ldHdvcmtUeXBlfSA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIGVmZmVjdGl2ZSB0eXBlIGhhcyBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3TmV0d29ya1R5cGUsXG4gICAgICBvbGROZXR3b3JrVHlwZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZShuZXdDYXBhY2l0eTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGRDYXBhY2l0eSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSA9IG5ld0NhcGFjaXR5O1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7ZmxvYXQ6IG5ld0NhcGFjaXR5fSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZENhcGFjaXR5ID8ge2Zsb2F0OiBvbGRDYXBhY2l0eX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBkb3dubGluayB0aHJvdWdocHV0IGNhcGFjaXR5IGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdDYXBhY2l0eSxcbiAgICAgIG9sZENhcGFjaXR5XG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWaWRlb1RlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbVRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF9saXN0ZW5Ub0ZpcnN0VGltZTogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfbGlzdGVuRm9yU3RhbGw6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2xpc3RlbkZvckNvbnRpbnVhdGlvbjogKGV2ZW50KSA9PiB2b2lkO1xuICBwcml2YXRlIF90aW1lVG9GaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX3ZpZGVvU3RhbGxlZDogbnVtYmVyO1xuICBwcml2YXRlIF9sYXN0UHJvZ3Jlc3M6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdmlkZW9SZXNvbHV0aW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyOiBEaXNwb3NhYmxlO1xuICBwcml2YXRlIF9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXI6IERpc3Bvc2FibGU7XG5cbiAgY29uc3RydWN0b3Ioc3RyZWFtSWQ6IHN0cmluZywgcGFnZUxvYWRUaW1lOiBudW1iZXIsIGNoYW5uZWxTdGFydFRpbWU6IG51bWJlciwgbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlKSB7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gICAgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSA9IGNoYW5uZWxTdGFydFRpbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IG1ldHJpY3NTZXJ2aWNlO1xuICB9XG5cbiAgc2V0dXBMaXN0ZW5lckZvclRpbWVUb0ZpcnN0VGltZSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSA9ICgpOiB2b2lkID0+IHRoaXMuY2FsbFRpbWVUb0ZpcnN0RnJhbWUoKTtcblxuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG5cbiAgICB0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lciA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICB9KTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIpO1xuICB9XG5cbiAgc2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdGVuRm9yU3RhbGwgPSAoKTogdm9pZCA9PiB0aGlzLm9uU3RhbGwoKTtcblxuICAgIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbiA9IChldmVudCk6IHZvaWQgPT4gdGhpcy5vbkNvbnRpbnVhdGlvbihldmVudCwgdmlkZW8pO1xuXG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdzdXNwZW5kJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcblxuICAgIHRoaXMuX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lciA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N1c3BlbmQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZHVyYXRpb25TaW5jZVBhZ2VMb2FkKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHJldHVybiBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsbFRpbWVUb0ZpcnN0RnJhbWUoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMucHVzaFRpbWVUb0ZpcnN0RnJhbWUobm93KTtcbiAgICB0aGlzLnB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKG5vdyk7XG5cbiAgICB0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lci5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hUaW1lVG9GaXJzdEZyYW1lKG5vdyk6IHZvaWQge1xuICAgIHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWUgPSBub3cgLSB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGhpcy5fdGltZVRvRmlyc3RGcmFtZX0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBGaXJzdCBmcmFtZSBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZShub3cpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fY2hhbm5lbFN0YXJ0VGltZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIENoYW5uZWwgY3JlYXRpb24gdG8gZmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25TdGFsbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdmlkZW9TdGFsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5TdGFsbGVkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHN0YWxsZWQnLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uQ29udGludWF0aW9uKGV2ZW50LCB2aWRlbyk6IHZvaWQge1xuICAgIGlmICghdmlkZW8uYnVmZmVyZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXJMZW5ndGggPSB2aWRlby5idWZmZXJlZC5sZW5ndGg7XG4gICAgY29uc3QgaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQgPSBldmVudC50eXBlID09PSAncGxheWluZydcbiAgICB8fCBidWZmZXJMZW5ndGggPiAwID8gKGV2ZW50LnR5cGUgPT09ICdwcm9ncmVzcydcbiAgICAgIHx8IGV2ZW50LnR5cGUgPT09ICd0aW1ldXBkYXRlJylcbiAgICAgICYmIHZpZGVvLmJ1ZmZlcmVkLmVuZChidWZmZXJMZW5ndGggLSAxKSA9PT0gdGhpcy5fbGFzdFByb2dyZXNzIDogdHJ1ZTtcblxuICAgIGlmICghdGhpcy5fdmlkZW9TdGFsbGVkIHx8IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdwcm9ncmVzcycpIHtcbiAgICAgIHRoaXMuX2xhc3RQcm9ncmVzcyA9IHZpZGVvLmJ1ZmZlcmVkLmVuZChidWZmZXJMZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lU2luY2VTdG9wID0gRGF0ZS5ub3coKSAtIHRoaXMuX3ZpZGVvU3RhbGxlZDtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuQnVmZmVyaW5nLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lU2luY2VTdG9wfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFtidWZmZXJpbmddIFN0cmVhbSBoYXMgcmVjb3ZlcmVkIGZyb20gc3RhbGwgYWZ0ZXIgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aW1lU2luY2VTdG9wKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgICB0aGlzLl92aWRlb1N0YWxsZWQgPSBudWxsO1xuICB9XG5cbiAgb25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzKG5ld1Jlc29sdXRpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUmVzb2x1dGlvbkNoYW5nZWQsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtzdHJpbmc6IG5ld1Jlc29sdXRpb259LFxuICAgICAgcHJldmlvdXNWYWx1ZTogdGhpcy5fdmlkZW9SZXNvbHV0aW9uID8ge3N0cmluZzogdGhpcy5fdmlkZW9SZXNvbHV0aW9ufSA6IHVuZGVmaW5lZCxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmlkZW9SZXNvbHV0aW9uID0gbmV3UmVzb2x1dGlvbjtcbiAgfVxufSIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdGlmKF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0pIHtcblx0XHRyZXR1cm4gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gbW9kdWxlWydkZWZhdWx0J10gOlxuXHRcdCgpID0+IG1vZHVsZTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiLy8gbW9kdWxlIGV4cG9ydHMgbXVzdCBiZSByZXR1cm5lZCBmcm9tIHJ1bnRpbWUgc28gZW50cnkgaW5saW5pbmcgaXMgZGlzYWJsZWRcbi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xucmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oXCIuL3NyYy9zZGsvY2hhbm5lbHMvaW5kZXgudHNcIik7XG4iXSwic291cmNlUm9vdCI6IiJ9