botframework-directlinejs 0.14.2-master.ef94e99 → 0.15.2-master.19bb0c9

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.
@@ -29,4 +29,4 @@ function dedupeFilenames(array) {
29
29
  });
30
30
  return nextArray;
31
31
  }
32
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kZWR1cGVGaWxlbmFtZXMudHMiXSwibmFtZXMiOlsiZGVkdXBlRmlsZW5hbWVzIiwiYXJyYXkiLCJuZXh0QXJyYXkiLCJmb3JFYWNoIiwidmFsdWUiLCJleHRuYW1lIiwibmFtZSIsImNvdW50IiwibmV4dFZhbHVlIiwiaW5jbHVkZXMiLCJmaWx0ZXIiLCJzZWdtZW50Iiwiam9pbiIsInB1c2giXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUVlLFNBQVNBLGVBQVQsQ0FBeUJDLEtBQXpCLEVBQTBDO0FBQ3JELE1BQU1DLFNBQW1CLEdBQUcsRUFBNUI7QUFFQUQsRUFBQUEsS0FBSyxDQUFDRSxPQUFOLENBQWMsVUFBQUMsS0FBSyxFQUFJO0FBQUEseUJBQ08sZ0NBQWNBLEtBQWQsQ0FEUDtBQUFBLFFBQ1hDLE9BRFcsa0JBQ1hBLE9BRFc7QUFBQSxRQUNGQyxJQURFLGtCQUNGQSxJQURFOztBQUVuQixRQUFJQyxLQUFLLEdBQUcsQ0FBWjtBQUNBLFFBQUlDLFNBQVMsR0FBR0osS0FBaEI7O0FBRUEsV0FBT0YsU0FBUyxDQUFDTyxRQUFWLENBQW1CRCxTQUFuQixDQUFQLEVBQXNDO0FBQ2xDQSxNQUFBQSxTQUFTLEdBQUcsQ0FBQ0YsSUFBRCxhQUFhLEVBQUVDLEtBQWYsUUFBMkJHLE1BQTNCLENBQWtDLFVBQUFDLE9BQU87QUFBQSxlQUFJQSxPQUFKO0FBQUEsT0FBekMsRUFBc0RDLElBQXRELENBQTJELEdBQTNELElBQWtFUCxPQUE5RTtBQUNIOztBQUVESCxJQUFBQSxTQUFTLENBQUNXLElBQVYsQ0FBZUwsU0FBZjtBQUNILEdBVkQ7QUFZQSxTQUFPTixTQUFQO0FBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGFyc2VGaWxlbmFtZSBmcm9tICcuL3BhcnNlRmlsZW5hbWUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWR1cGVGaWxlbmFtZXMoYXJyYXk6IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgbmV4dEFycmF5OiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgYXJyYXkuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZXh0bmFtZSwgbmFtZSB9ID0gcGFyc2VGaWxlbmFtZSh2YWx1ZSk7XG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGxldCBuZXh0VmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICB3aGlsZSAobmV4dEFycmF5LmluY2x1ZGVzKG5leHRWYWx1ZSkpIHtcbiAgICAgICAgICAgIG5leHRWYWx1ZSA9IFtuYW1lLCBgKCR7ICgrK2NvdW50KSB9KWBdLmZpbHRlcihzZWdtZW50ID0+IHNlZ21lbnQpLmpvaW4oJyAnKSArIGV4dG5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBuZXh0QXJyYXkucHVzaChuZXh0VmFsdWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5leHRBcnJheTtcbn1cbiJdfQ==
32
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kZWR1cGVGaWxlbmFtZXMudHMiXSwibmFtZXMiOlsiZGVkdXBlRmlsZW5hbWVzIiwiYXJyYXkiLCJuZXh0QXJyYXkiLCJmb3JFYWNoIiwidmFsdWUiLCJleHRuYW1lIiwibmFtZSIsImNvdW50IiwibmV4dFZhbHVlIiwiaW5jbHVkZXMiLCJmaWx0ZXIiLCJzZWdtZW50Iiwiam9pbiIsInB1c2giXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUVlLFNBQVNBLGVBQVQsQ0FBeUJDLEtBQXpCLEVBQTBDO0FBQ3JELE1BQU1DLFNBQW1CLEdBQUcsRUFBNUI7QUFFQUQsRUFBQUEsS0FBSyxDQUFDRSxPQUFOLENBQWMsVUFBQUMsS0FBSyxFQUFJO0FBQ25CLHlCQUEwQixnQ0FBY0EsS0FBZCxDQUExQjtBQUFBLFFBQVFDLE9BQVIsa0JBQVFBLE9BQVI7QUFBQSxRQUFpQkMsSUFBakIsa0JBQWlCQSxJQUFqQjs7QUFDQSxRQUFJQyxLQUFLLEdBQUcsQ0FBWjtBQUNBLFFBQUlDLFNBQVMsR0FBR0osS0FBaEI7O0FBRUEsV0FBT0YsU0FBUyxDQUFDTyxRQUFWLENBQW1CRCxTQUFuQixDQUFQLEVBQXNDO0FBQ2xDQSxNQUFBQSxTQUFTLEdBQUcsQ0FBQ0YsSUFBRCxhQUFhLEVBQUVDLEtBQWYsUUFBMkJHLE1BQTNCLENBQWtDLFVBQUFDLE9BQU87QUFBQSxlQUFJQSxPQUFKO0FBQUEsT0FBekMsRUFBc0RDLElBQXRELENBQTJELEdBQTNELElBQWtFUCxPQUE5RTtBQUNIOztBQUVESCxJQUFBQSxTQUFTLENBQUNXLElBQVYsQ0FBZUwsU0FBZjtBQUNILEdBVkQ7QUFZQSxTQUFPTixTQUFQO0FBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGFyc2VGaWxlbmFtZSBmcm9tICcuL3BhcnNlRmlsZW5hbWUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWR1cGVGaWxlbmFtZXMoYXJyYXk6IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgbmV4dEFycmF5OiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgYXJyYXkuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZXh0bmFtZSwgbmFtZSB9ID0gcGFyc2VGaWxlbmFtZSh2YWx1ZSk7XG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGxldCBuZXh0VmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICB3aGlsZSAobmV4dEFycmF5LmluY2x1ZGVzKG5leHRWYWx1ZSkpIHtcbiAgICAgICAgICAgIG5leHRWYWx1ZSA9IFtuYW1lLCBgKCR7ICgrK2NvdW50KSB9KWBdLmZpbHRlcihzZWdtZW50ID0+IHNlZ21lbnQpLmpvaW4oJyAnKSArIGV4dG5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBuZXh0QXJyYXkucHVzaChuZXh0VmFsdWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5leHRBcnJheTtcbn1cbiJdfQ==
package/lib/directLine.js CHANGED
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
-
5
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
4
 
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
@@ -75,9 +75,15 @@ var _dedupeFilenames = _interopRequireDefault(require("./dedupeFilenames"));
75
75
 
76
76
  var _directLineStreaming = require("./directLineStreaming");
77
77
 
78
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
78
+ var _excluded = ["contentUrl"];
79
+
80
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
81
+
82
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
83
+
84
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
79
85
 
80
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
86
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
81
87
 
82
88
  var DIRECT_LINE_VERSION = 'DirectLine/3.0';
83
89
  // These types are specific to this client library, not to Direct Line 3.0
@@ -170,32 +176,15 @@ var konsole = {
170
176
  }
171
177
  };
172
178
 
173
- var DirectLine =
174
- /*#__PURE__*/
175
- function () {
176
- //ms
179
+ var DirectLine = /*#__PURE__*/function () {
177
180
  function DirectLine(options) {
178
181
  (0, _classCallCheck2["default"])(this, DirectLine);
179
182
  (0, _defineProperty2["default"])(this, "connectionStatus$", new _BehaviorSubject.BehaviorSubject(ConnectionStatus.Uninitialized));
180
- (0, _defineProperty2["default"])(this, "activity$", void 0);
181
183
  (0, _defineProperty2["default"])(this, "domain", "https://directline.botframework.com/v3/directline");
182
- (0, _defineProperty2["default"])(this, "webSocket", void 0);
183
- (0, _defineProperty2["default"])(this, "conversationId", void 0);
184
- (0, _defineProperty2["default"])(this, "expiredTokenExhaustion", void 0);
185
- (0, _defineProperty2["default"])(this, "secret", void 0);
186
- (0, _defineProperty2["default"])(this, "token", void 0);
187
184
  (0, _defineProperty2["default"])(this, "watermark", '');
188
- (0, _defineProperty2["default"])(this, "streamUrl", void 0);
189
185
  (0, _defineProperty2["default"])(this, "_botAgent", '');
190
- (0, _defineProperty2["default"])(this, "services", void 0);
191
- (0, _defineProperty2["default"])(this, "_userAgent", void 0);
192
- (0, _defineProperty2["default"])(this, "referenceGrammarId", void 0);
193
186
  (0, _defineProperty2["default"])(this, "timeout", 20 * 1000);
194
- (0, _defineProperty2["default"])(this, "retries", void 0);
195
- (0, _defineProperty2["default"])(this, "localeOnStartConversation", void 0);
196
- (0, _defineProperty2["default"])(this, "userIdOnStartConversation", void 0);
197
187
  (0, _defineProperty2["default"])(this, "pollingInterval", 1000);
198
- (0, _defineProperty2["default"])(this, "tokenRefreshSubscription", void 0);
199
188
  this.secret = options.secret;
200
189
  this.token = options.secret || options.token;
201
190
  this.webSocket = (options.webSocket === undefined ? true : options.webSocket) && typeof WebSocket !== 'undefined' && WebSocket !== undefined;
@@ -505,7 +494,7 @@ function () {
505
494
  return media.name || 'blob';
506
495
  }));
507
496
  var cleansedAttachments = attachments.map(function (attachment, index) {
508
- return _objectSpread({}, attachment, {
497
+ return _objectSpread(_objectSpread({}, attachment), {}, {
509
498
  name: attachmentNames[index]
510
499
  });
511
500
  });
@@ -516,11 +505,11 @@ function () {
516
505
  // To send this message to DirectLine we need to deconstruct it into a "template" activity
517
506
  // and one blob for each attachment.
518
507
  formData = new FormData();
519
- formData.append('activity', new Blob([JSON.stringify(_objectSpread({}, message, {
508
+ formData.append('activity', new Blob([JSON.stringify(_objectSpread(_objectSpread({}, message), {}, {
520
509
  // Removing contentUrl from attachment, we will send it via multipart
521
510
  attachments: cleansedAttachments.map(function (_ref) {
522
511
  var string = _ref.contentUrl,
523
- others = (0, _objectWithoutProperties2["default"])(_ref, ["contentUrl"]);
512
+ others = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
524
513
  return _objectSpread({}, others);
525
514
  })
526
515
  }))], {
@@ -768,7 +757,7 @@ function () {
768
757
  clientAgent += "; ".concat(customAgent);
769
758
  }
770
759
 
771
- return "".concat(DIRECT_LINE_VERSION, " (").concat(clientAgent, " ").concat("0.14.2-master.ef94e99", ")");
760
+ return "".concat(DIRECT_LINE_VERSION, " (").concat(clientAgent, " ").concat("0.15.2-master.19bb0c9", ")");
772
761
  }
773
762
  }, {
774
763
  key: "setUserId",
@@ -808,4 +797,4 @@ function () {
808
797
  }();
809
798
 
810
799
  exports.DirectLine = DirectLine;
811
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kaXJlY3RMaW5lLnRzIl0sIm5hbWVzIjpbIkRJUkVDVF9MSU5FX1ZFUlNJT04iLCJDb25uZWN0aW9uU3RhdHVzIiwid3JhcEFqYXhXaXRoUmV0cnkiLCJzb3VyY2UiLCJzY2hlZHVsZXIiLCJub3RJbXBsZW1lbnRlZCIsIkVycm9yIiwiaW5uZXIiLCJyZXNwb25zZSQiLCJlcnIiLCJzdGF0dXMiLCJyZXRyeUFmdGVyVmFsdWUiLCJ4aHIiLCJnZXRSZXNwb25zZUhlYWRlciIsInJldHJ5QWZ0ZXIiLCJOdW1iZXIiLCJpc05hTiIsIk9ic2VydmFibGUiLCJ0aW1lciIsImZsYXRNYXAiLCJfIiwib3V0ZXIiLCJ1cmxPclJlcXVlc3QiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXQiLCJ1cmwiLCJoZWFkZXJzIiwicG9zdCIsImJvZHkiLCJwdXQiLCJwYXRjaCIsImdldEpTT04iLCJtYWtlU2VydmljZXMiLCJzZXJ2aWNlcyIsIkFzeW5jU2NoZWR1bGVyIiwiYWpheCIsIldlYlNvY2tldCIsInJhbmRvbSIsIk1hdGgiLCJsaWZldGltZVJlZnJlc2hUb2tlbiIsImludGVydmFsUmVmcmVzaFRva2VuIiwiUE9MTElOR19JTlRFUlZBTF9MT1dFUl9CT1VORCIsImVycm9yRXhwaXJlZFRva2VuIiwiZXJyb3JDb252ZXJzYXRpb25FbmRlZCIsImVycm9yRmFpbGVkVG9Db25uZWN0Iiwia29uc29sZSIsImxvZyIsIm1lc3NhZ2UiLCJvcHRpb25hbFBhcmFtcyIsIndpbmRvdyIsImNvbnNvbGUiLCJEaXJlY3RMaW5lIiwib3B0aW9ucyIsIkJlaGF2aW9yU3ViamVjdCIsIlVuaW5pdGlhbGl6ZWQiLCJzZWNyZXQiLCJ0b2tlbiIsIndlYlNvY2tldCIsInVuZGVmaW5lZCIsImNvbnZlcnNhdGlvblN0YXJ0UHJvcGVydGllcyIsImxvY2FsZSIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsImxvY2FsZU9uU3RhcnRDb252ZXJzYXRpb24iLCJ3YXJuIiwiZG9tYWluIiwiY29udmVyc2F0aW9uSWQiLCJ3YXRlcm1hcmsiLCJzdHJlYW1VcmwiLCJ0aW1lb3V0IiwicmV0cmllcyIsIl9ib3RBZ2VudCIsImdldEJvdEFnZW50IiwiYm90QWdlbnQiLCJwYXJzZWRQb2xsaW5nSW50ZXJ2YWwiLCJwb2xsaW5nSW50ZXJ2YWwiLCJleHBpcmVkVG9rZW5FeGhhdXN0aW9uIiwic2V0Q29ubmVjdGlvblN0YXR1c0ZhbGxiYWNrIiwiRXhwaXJlZFRva2VuIiwiRmFpbGVkVG9Db25uZWN0IiwiYWN0aXZpdHkkIiwid2ViU29ja2V0QWN0aXZpdHkkIiwicG9sbGluZ0dldEFjdGl2aXR5JCIsInNoYXJlIiwib25jZSIsIm9icyIsImNvbm5lY3Rpb25TdGF0dXMkIiwiY29ubmVjdGlvblN0YXR1cyIsIm5leHQiLCJDb25uZWN0aW5nIiwiT25saW5lIiwib2YiLCJzdGFydENvbnZlcnNhdGlvbiIsImNvbnZlcnNhdGlvbiIsInJlZmVyZW5jZUdyYW1tYXJJZCIsInJlZnJlc2hUb2tlbkxvb3AiLCJlcnJvciIsIm1hcCIsImZpbHRlciIsIkVuZGVkIiwidGFrZSIsImNvbm5lY3Rpb25TdGF0dXNGcm9tIiwiY29ubmVjdGlvblN0YXR1c1RvIiwibWF4QXR0ZW1wdHMiLCJhdHRlbXB0cyIsImN1cnJTdGF0dXMiLCJnZXRWYWx1ZSIsInByb3RlY3RlZENvbm5lY3Rpb25TdGF0dXMiLCJtZXRob2QiLCJ1c2VyIiwiaWQiLCJ1c2VySWRPblN0YXJ0Q29udmVyc2F0aW9uIiwiY29tbW9uSGVhZGVycyIsImFqYXhSZXNwb25zZSIsInJlc3BvbnNlIiwicmV0cnlXaGVuIiwiZXJyb3IkIiwibWVyZ2VNYXAiLCJkZWxheSIsInRva2VuUmVmcmVzaFN1YnNjcmlwdGlvbiIsImludGVydmFsIiwicmVmcmVzaFRva2VuIiwic3Vic2NyaWJlIiwiRGF0ZSIsImNoZWNrQ29ubmVjdGlvbiIsImV4cGlyZWRUb2tlbiIsInVuc3Vic2NyaWJlIiwiZSIsIndpdGhDcmVkZW50aWFscyIsInNlc3Npb25JZCIsImNhdGNoRXhwaXJlZFRva2VuIiwiYWN0aXZpdHkiLCJmcm9tIiwidHlwZSIsImF0dGFjaG1lbnRzIiwibGVuZ3RoIiwicG9zdE1lc3NhZ2VXaXRoQXR0YWNobWVudHMiLCJjYXRjaFBvc3RFcnJvciIsImF0dGFjaG1lbnROYW1lcyIsIm1lZGlhIiwibmFtZSIsImNsZWFuc2VkQXR0YWNobWVudHMiLCJhdHRhY2htZW50IiwiaW5kZXgiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwiYXBwZW5kIiwiQmxvYiIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdHJpbmciLCJjb250ZW50VXJsIiwib3RoZXJzIiwicmVzcG9uc2VUeXBlIiwiY29udGVudFR5cGUiLCJjb3VudCIsInBvbGxlciQiLCJjcmVhdGUiLCJzdWJzY3JpYmVyIiwidHJpZ2dlciQiLCJzdGFydFRpbWVzdGFtcCIsIm5vdyIsIkFjY2VwdCIsInJlc3VsdCIsInNldFRpbWVvdXQiLCJtYXgiLCJlbXB0eSIsImFjdGl2aXR5R3JvdXAiLCJvYnNlcnZhYmxlRnJvbUFjdGl2aXR5R3JvdXAiLCJhY3Rpdml0aWVzIiwib2JzZXJ2YWJsZVdlYlNvY2tldCIsImdldFJldHJ5RGVsYXkiLCJyZWNvbm5lY3RUb0NvbnZlcnNhdGlvbiIsImZsb29yIiwid3MiLCJzdWIiLCJjbG9zZWQiLCJvbm9wZW4iLCJvcGVuIiwic2VuZCIsIm9uY2xvc2UiLCJjbG9zZSIsIm9uZXJyb3IiLCJvbm1lc3NhZ2UiLCJkYXRhIiwicGFyc2UiLCJyZWFkeVN0YXRlIiwiY3VzdG9tQWdlbnQiLCJjbGllbnRBZ2VudCIsInVzZXJJZCIsInVzZXJJZEZyb21Ub2tlbiIsInBhcnNlVG9rZW4iLCJ0ZXN0IiwiSW52YWxpZFRva2VuRXJyb3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFD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RyxnQkFBZ0IsQ0FBQzJGLE1BQTNELEVBQW1FO0FBQy9ELGNBQU0sSUFBSXRGLEtBQUosQ0FBVSx1REFBVixDQUFOO0FBQ0g7O0FBRUQsVUFBTTBMLGVBQWUsR0FBRyxLQUFLQyxVQUFMLENBQWdCLEtBQUt4SSxLQUFyQixDQUF4Qjs7QUFDQSxVQUFJdUksZUFBSixFQUFxQjtBQUNqQixlQUFPN0ksT0FBTyxDQUFDZSxJQUFSLENBQWEsMEVBQWIsQ0FBUDtBQUNIOztBQUVELFVBQUksT0FBUWdJLElBQVIsQ0FBYUgsTUFBYixDQUFKLEVBQTBCO0FBQ3RCLGVBQU81SSxPQUFPLENBQUNlLElBQVIsQ0FBYSwySEFBYixDQUFQO0FBQ0g7O0FBRUQsV0FBSytDLHlCQUFMLEdBQWlDOEUsTUFBakM7QUFDSDs7OytCQUVrQnRJLEssRUFBZTtBQUM5QixVQUFJO0FBQUEsb0JBQ2lCLDJCQUFzQkEsS0FBdEIsQ0FEakI7QUFBQSxZQUNRc0QsSUFEUixTQUNRQSxJQURSOztBQUVBLGVBQU9BLElBQVA7QUFDSCxPQUhELENBR0UsT0FBT2tCLENBQVAsRUFBVTtBQUNSLFlBQUlBLENBQUMsWUFBWWtFLDRCQUFqQixFQUFvQztBQUNoQyxpQkFBT3hJLFNBQVA7QUFDSDtBQUNKO0FBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbiBvcmRlciB0byBrZWVwIGZpbGUgc2l6ZSBkb3duLCBvbmx5IGltcG9ydCB0aGUgcGFydHMgb2YgcnhqcyB0aGF0IHdlIHVzZVxuXG5pbXBvcnQgJ2NvcmUtanMvZmVhdHVyZXMvcHJvbWlzZSc7XG5pbXBvcnQgJ3VybC1zZWFyY2gtcGFyYW1zLXBvbHlmaWxsJztcbmltcG9ydCB7IEFqYXhSZXNwb25zZSwgQWpheENyZWF0aW9uTWV0aG9kLCBBamF4UmVxdWVzdCwgQWpheEVycm9yIH0gZnJvbSAncnhqcy9vYnNlcnZhYmxlL2RvbS9BamF4T2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzL0JlaGF2aW9yU3ViamVjdCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcy9PYnNlcnZhYmxlJztcbmltcG9ydCB7IElTY2hlZHVsZXIgfSBmcm9tICdyeGpzL1NjaGVkdWxlcic7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAncnhqcy9TdWJzY3JpYmVyJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMvU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IGFzeW5jIGFzIEFzeW5jU2NoZWR1bGVyIH0gZnJvbSAncnhqcy9zY2hlZHVsZXIvYXN5bmMnO1xuaW1wb3J0IGp3dERlY29kZSwgeyBKd3RQYXlsb2FkLCBJbnZhbGlkVG9rZW5FcnJvciB9IGZyb20gJ2p3dC1kZWNvZGUnO1xuXG5pbXBvcnQgJ3J4anMvYWRkL29wZXJhdG9yL2NhdGNoJztcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvY29tYmluZUxhdGVzdCc7XG5pbXBvcnQgJ3J4anMvYWRkL29wZXJhdG9yL2NvdW50JztcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvZGVsYXknO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9kbyc7XG5pbXBvcnQgJ3J4anMvYWRkL29wZXJhdG9yL2ZpbHRlcic7XG5pbXBvcnQgJ3J4anMvYWRkL29wZXJhdG9yL21hcCc7XG5pbXBvcnQgJ3J4anMvYWRkL29wZXJhdG9yL21lcmdlTWFwJztcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvY29uY2F0TWFwJztcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvcmV0cnlXaGVuJztcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3Ivc2hhcmUnO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci90YWtlJztcblxuaW1wb3J0ICdyeGpzL2FkZC9vYnNlcnZhYmxlL2RvbS9hamF4JztcbmltcG9ydCAncnhqcy9hZGQvb2JzZXJ2YWJsZS9lbXB0eSc7XG5pbXBvcnQgJ3J4anMvYWRkL29ic2VydmFibGUvZnJvbSc7XG5pbXBvcnQgJ3J4anMvYWRkL29ic2VydmFibGUvaW50ZXJ2YWwnO1xuaW1wb3J0ICdyeGpzL2FkZC9vYnNlcnZhYmxlL29mJztcbmltcG9ydCAncnhqcy9hZGQvb2JzZXJ2YWJsZS90aHJvdyc7XG5cbmltcG9ydCBkZWR1cGVGaWxlbmFtZXMgZnJvbSAnLi9kZWR1cGVGaWxlbmFtZXMnO1xuaW1wb3J0IHsgb2JqZWN0RXhwcmVzc2lvbiB9IGZyb20gJ0BiYWJlbC90eXBlcyc7XG5cbmltcG9ydCB7IERpcmVjdExpbmVTdHJlYW1pbmcgfSBmcm9tICcuL2RpcmVjdExpbmVTdHJlYW1pbmcnO1xuZXhwb3J0IHsgRGlyZWN0TGluZVN0cmVhbWluZyB9O1xuXG5jb25zdCBESVJFQ1RfTElORV9WRVJTSU9OID0gJ0RpcmVjdExpbmUvMy4wJztcblxuZGVjbGFyZSB2YXIgcHJvY2Vzczoge1xuICAgIGFyY2g6IHN0cmluZztcbiAgICBlbnY6IHtcbiAgICAgICAgVkVSU0lPTjogc3RyaW5nO1xuICAgICAgICBucG1fcGFja2FnZV92ZXJzaW9uOiBzdHJpbmc7XG4gICAgfTtcbiAgICBwbGF0Zm9ybTogc3RyaW5nO1xuICAgIHJlbGVhc2U6IHN0cmluZztcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG59O1xuXG4vLyBEaXJlY3QgTGluZSAzLjAgdHlwZXNcblxuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzYXRpb24ge1xuICAgIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsXG4gICAgdG9rZW46IHN0cmluZyxcbiAgICBlVGFnPzogc3RyaW5nLFxuICAgIHN0cmVhbVVybD86IHN0cmluZyxcbiAgICByZWZlcmVuY2VHcmFtbWFySWQ/OiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgTWVkaWFUeXBlID0gXCJpbWFnZS9wbmdcIiB8IFwiaW1hZ2UvanBnXCIgfCBcImltYWdlL2pwZWdcIiB8IFwiaW1hZ2UvZ2lmXCIgfCBcImltYWdlL3N2Zyt4bWxcIiB8IFwiYXVkaW8vbXBlZ1wiIHwgXCJhdWRpby9tcDRcIiB8IFwidmlkZW8vbXA0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWEge1xuICAgIGNvbnRlbnRUeXBlOiBNZWRpYVR5cGUsXG4gICAgY29udGVudFVybDogc3RyaW5nLFxuICAgIG5hbWU/OiBzdHJpbmcsXG4gICAgdGh1bWJuYWlsVXJsPzogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5rbm93bk1lZGlhe1xuICAgIGNvbnRlbnRUeXBlOiBzdHJpbmcsXG4gICAgY29udGVudFVybDogc3RyaW5nLFxuICAgIG5hbWU/OiBzdHJpbmcsXG4gICAgdGh1bWJuYWlsVXJsPzogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIENhcmRBY3Rpb25UeXBlcyA9IFwiY2FsbFwiIHwgXCJkb3dubG9hZEZpbGVcInwgXCJpbUJhY2tcIiB8IFwibWVzc2FnZUJhY2tcIiB8IFwib3BlblVybFwiIHwgXCJwbGF5QXVkaW9cIiB8IFwicGxheVZpZGVvXCIgfCBcInBvc3RCYWNrXCIgfCBcInNpZ25pblwiIHwgXCJzaG93SW1hZ2VcIjtcblxuZXhwb3J0IHR5cGUgQ2FyZEFjdGlvbiA9IENhbGxDYXJkQWN0aW9uIHwgRG93bmxvYWRGaWxlQ2FyZEFjdGlvbiB8IElNQmFja0NhcmRBY3Rpb24gfCBNZXNzYWdlQmFja0NhcmRBY3Rpb24gfCBPcGVuVVJMQ2FyZEFjdGlvbiB8IFBsYXlBdWRpb0NhcmRBY3Rpb24gfCBQbGF5VmlkZW9DYXJkQWN0aW9uIHwgUG9zdEJhY2tDYXJkQWN0aW9uIHwgU2lnbkluQ2FyZEFjdGlvbiB8IFNob3dJbWFnZUNhcmRBY3Rpb247XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsbENhcmRBY3Rpb24ge1xuICAgIGltYWdlPzogc3RyaW5nLFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgdHlwZTogXCJjYWxsXCIsXG4gICAgdmFsdWU6IGFueVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERvd25sb2FkRmlsZUNhcmRBY3Rpb24ge1xuICAgIGltYWdlPzogc3RyaW5nLFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgdHlwZTogXCJkb3dubG9hZEZpbGVcIixcbiAgICB2YWx1ZTogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1CYWNrQ2FyZEFjdGlvbiB7XG4gICAgaW1hZ2U/OiBzdHJpbmcsXG4gICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgdHlwZTogXCJpbUJhY2tcIixcbiAgICB2YWx1ZTogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VCYWNrQ2FyZEFjdGlvbiA9IE1lc3NhZ2VCYWNrV2l0aEltYWdlIHwgTWVzc2FnZUJhY2tXaXRoVGl0bGVcblxuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlQmFja1dpdGhJbWFnZSB7XG4gICAgZGlzcGxheVRleHQ/OiBzdHJpbmcsXG4gICAgaW1hZ2U6IHN0cmluZyxcbiAgICB0ZXh0Pzogc3RyaW5nLFxuICAgIHRpdGxlPzogc3RyaW5nLFxuICAgIHR5cGU6IFwibWVzc2FnZUJhY2tcIixcbiAgICB2YWx1ZT86IGFueVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VCYWNrV2l0aFRpdGxlIHtcbiAgICBkaXNwbGF5VGV4dD86IHN0cmluZyxcbiAgICBpbWFnZT86IHN0cmluZyxcbiAgICB0ZXh0Pzogc3RyaW5nLFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgdHlwZTogXCJtZXNzYWdlQmFja1wiLFxuICAgIHZhbHVlPzogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlblVSTENhcmRBY3Rpb24ge1xuICAgIGltYWdlPzogc3RyaW5nLFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgdHlwZTogXCJvcGVuVXJsXCIsXG4gICAgdmFsdWU6IGFueVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBsYXlBdWRpb0NhcmRBY3Rpb24ge1xuICAgIGltYWdlPzogc3RyaW5nLFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgdHlwZTogXCJwbGF5QXVkaW9cIixcbiAgICB2YWx1ZTogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxheVZpZGVvQ2FyZEFjdGlvbiB7XG4gICAgaW1hZ2U/OiBzdHJpbmcsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0eXBlOiBcInBsYXlWaWRlb1wiLFxuICAgIHZhbHVlOiBhbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQb3N0QmFja0NhcmRBY3Rpb24ge1xuICAgIGltYWdlPzogc3RyaW5nLFxuICAgIHRpdGxlPzogc3RyaW5nLFxuICAgIHR5cGU6IFwicG9zdEJhY2tcIixcbiAgICB2YWx1ZTogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hvd0ltYWdlQ2FyZEFjdGlvbiB7XG4gICAgaW1hZ2U/OiBzdHJpbmcsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0eXBlOiBcInNob3dJbWFnZVwiLFxuICAgIHZhbHVlOiBhbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWduSW5DYXJkQWN0aW9uIHtcbiAgICBpbWFnZT86IHN0cmluZyxcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIHR5cGU6IFwic2lnbmluXCIsXG4gICAgdmFsdWU6IGFueVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhcmRJbWFnZSB7XG4gICAgYWx0Pzogc3RyaW5nLFxuICAgIHVybDogc3RyaW5nLFxuICAgIHRhcD86IENhcmRBY3Rpb25cbn1cblxuZXhwb3J0IGludGVyZmFjZSBIZXJvQ2FyZCB7XG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vdm5kLm1pY3Jvc29mdC5jYXJkLmhlcm9cIixcbiAgICBjb250ZW50OiB7XG4gICAgICAgIHRpdGxlPzogc3RyaW5nLFxuICAgICAgICBzdWJ0aXRsZT86IHN0cmluZyxcbiAgICAgICAgdGV4dD86IHN0cmluZyxcbiAgICAgICAgaW1hZ2VzPzogQ2FyZEltYWdlW10sXG4gICAgICAgIGJ1dHRvbnM/OiBDYXJkQWN0aW9uW10sXG4gICAgICAgIHRhcD86IENhcmRBY3Rpb25cbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGh1bWJuYWlsIHtcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmNhcmQudGh1bWJuYWlsXCIsXG4gICAgY29udGVudDoge1xuICAgICAgICB0aXRsZT86IHN0cmluZyxcbiAgICAgICAgc3VidGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgICAgIGltYWdlcz86IENhcmRJbWFnZVtdLFxuICAgICAgICBidXR0b25zPzogQ2FyZEFjdGlvbltdLFxuICAgICAgICB0YXA/OiBDYXJkQWN0aW9uXG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25pbiB7XG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vdm5kLm1pY3Jvc29mdC5jYXJkLnNpZ25pblwiLFxuICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgdGV4dD86IHN0cmluZyxcbiAgICAgICAgYnV0dG9ucz86IENhcmRBY3Rpb25bXVxuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBPQXV0aCB7XG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vdm5kLm1pY3Jvc29mdC5jYXJkLm9hdXRoXCIsXG4gICAgY29udGVudDoge1xuICAgICAgICB0ZXh0Pzogc3RyaW5nLFxuICAgICAgICBjb25uZWN0aW9ubmFtZTogc3RyaW5nLFxuICAgICAgICBidXR0b25zPzogQ2FyZEFjdGlvbltdXG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY2VpcHRJdGVtIHtcbiAgICB0aXRsZT86IHN0cmluZyxcbiAgICBzdWJ0aXRsZT86IHN0cmluZyxcbiAgICB0ZXh0Pzogc3RyaW5nLFxuICAgIGltYWdlPzogQ2FyZEltYWdlLFxuICAgIHByaWNlPzogc3RyaW5nLFxuICAgIHF1YW50aXR5Pzogc3RyaW5nLFxuICAgIHRhcD86IENhcmRBY3Rpb25cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWNlaXB0IHtcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmNhcmQucmVjZWlwdFwiLFxuICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIGZhY3RzPzogeyBrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9W10sXG4gICAgICAgIGl0ZW1zPzogUmVjZWlwdEl0ZW1bXSxcbiAgICAgICAgdGFwPzogQ2FyZEFjdGlvbixcbiAgICAgICAgdGF4Pzogc3RyaW5nLFxuICAgICAgICB2YXQ/OiBzdHJpbmcsXG4gICAgICAgIHRvdGFsPzogc3RyaW5nLFxuICAgICAgICBidXR0b25zPzogQ2FyZEFjdGlvbltdXG4gICAgfVxufVxuXG4vLyBEZXByZWNhdGVkIGZvcm1hdCBmb3IgU2t5cGUgY2hhbm5lbHMuIEZvciB0ZXN0aW5nIGxlZ2FjeSBib3RzIGluIEVtdWxhdG9yIG9ubHkuXG5leHBvcnQgaW50ZXJmYWNlIEZsZXhDYXJkIHtcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmNhcmQuZmxleFwiLFxuICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIHN1YnRpdGxlPzogc3RyaW5nLFxuICAgICAgICB0ZXh0Pzogc3RyaW5nLFxuICAgICAgICBpbWFnZXM/OiBDYXJkSW1hZ2VbXSxcbiAgICAgICAgYnV0dG9ucz86IENhcmRBY3Rpb25bXSxcbiAgICAgICAgYXNwZWN0Pzogc3RyaW5nXG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvQ2FyZCB7XG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vdm5kLm1pY3Jvc29mdC5jYXJkLmF1ZGlvXCIsXG4gICAgY29udGVudDoge1xuICAgICAgICB0aXRsZT86IHN0cmluZyxcbiAgICAgICAgc3VidGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgICAgIG1lZGlhPzogeyB1cmw6IHN0cmluZywgcHJvZmlsZT86IHN0cmluZyB9W10sXG4gICAgICAgIGJ1dHRvbnM/OiBDYXJkQWN0aW9uW10sXG4gICAgICAgIGF1dG9sb29wPzogYm9vbGVhbixcbiAgICAgICAgYXV0b3N0YXJ0PzogYm9vbGVhblxuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0NhcmQge1xuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC52aWRlb1wiLFxuICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIHN1YnRpdGxlPzogc3RyaW5nLFxuICAgICAgICB0ZXh0Pzogc3RyaW5nLFxuICAgICAgICBtZWRpYT86IHsgdXJsOiBzdHJpbmcsIHByb2ZpbGU/OiBzdHJpbmcgfVtdLFxuICAgICAgICBidXR0b25zPzogQ2FyZEFjdGlvbltdLFxuICAgICAgICBpbWFnZT86IHsgdXJsOiBzdHJpbmcsIGFsdD86IHN0cmluZyB9LFxuICAgICAgICBhdXRvbG9vcD86IGJvb2xlYW4sXG4gICAgICAgIGF1dG9zdGFydD86IGJvb2xlYW5cbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRpdmVDYXJkIHtcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmNhcmQuYWRhcHRpdmVcIixcbiAgICBjb250ZW50OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW5pbWF0aW9uQ2FyZCB7XG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vdm5kLm1pY3Jvc29mdC5jYXJkLmFuaW1hdGlvblwiLFxuICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIHN1YnRpdGxlPzogc3RyaW5nLFxuICAgICAgICB0ZXh0Pzogc3RyaW5nLFxuICAgICAgICBtZWRpYT86IHsgdXJsOiBzdHJpbmcsIHByb2ZpbGU/OiBzdHJpbmcgfVtdLFxuICAgICAgICBidXR0b25zPzogQ2FyZEFjdGlvbltdLFxuICAgICAgICBpbWFnZT86IHsgdXJsOiBzdHJpbmcsIGFsdD86IHN0cmluZyB9LFxuICAgICAgICBhdXRvbG9vcD86IGJvb2xlYW4sXG4gICAgICAgIGF1dG9zdGFydD86IGJvb2xlYW5cbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIEtub3duTWVkaWEgPSBNZWRpYSB8IEhlcm9DYXJkIHwgVGh1bWJuYWlsIHwgU2lnbmluIHwgT0F1dGggfCBSZWNlaXB0IHwgQXVkaW9DYXJkIHwgVmlkZW9DYXJkIHwgQW5pbWF0aW9uQ2FyZCB8IEZsZXhDYXJkIHwgQWRhcHRpdmVDYXJkO1xuZXhwb3J0IHR5cGUgQXR0YWNobWVudCA9IEtub3duTWVkaWEgfCBVbmtub3duTWVkaWE7XG5cbmV4cG9ydCB0eXBlIFVzZXJSb2xlID0gXCJib3RcIiB8IFwiY2hhbm5lbFwiIHwgXCJ1c2VyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlciB7XG4gICAgaWQ6IHN0cmluZyxcbiAgICBuYW1lPzogc3RyaW5nLFxuICAgIGljb25Vcmw/OiBzdHJpbmcsXG4gICAgcm9sZT86IFVzZXJSb2xlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFjdGl2aXR5IHtcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgY2hhbm5lbERhdGE/OiBhbnksXG4gICAgY2hhbm5lbElkPzogc3RyaW5nLFxuICAgIGNvbnZlcnNhdGlvbj86IHsgaWQ6IHN0cmluZyB9LFxuICAgIGVUYWc/OiBzdHJpbmcsXG4gICAgZnJvbTogVXNlcixcbiAgICBpZD86IHN0cmluZyxcbiAgICB0aW1lc3RhbXA/OiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgQXR0YWNobWVudExheW91dCA9IFwibGlzdFwiIHwgXCJjYXJvdXNlbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2UgZXh0ZW5kcyBJQWN0aXZpdHkge1xuICAgIHR5cGU6IFwibWVzc2FnZVwiLFxuICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgbG9jYWxlPzogc3RyaW5nLFxuICAgIHRleHRGb3JtYXQ/OiBcInBsYWluXCIgfCBcIm1hcmtkb3duXCIgfCBcInhtbFwiLFxuICAgIGF0dGFjaG1lbnRMYXlvdXQ/OiBBdHRhY2htZW50TGF5b3V0LFxuICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudFtdLFxuICAgIGVudGl0aWVzPzogYW55W10sXG4gICAgc3VnZ2VzdGVkQWN0aW9ucz86IHsgYWN0aW9uczogQ2FyZEFjdGlvbltdLCB0bz86IHN0cmluZ1tdIH0sXG4gICAgc3BlYWs/OiBzdHJpbmcsXG4gICAgaW5wdXRIaW50Pzogc3RyaW5nLFxuICAgIHZhbHVlPzogb2JqZWN0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwaW5nIGV4dGVuZHMgSUFjdGl2aXR5IHtcbiAgICB0eXBlOiBcInR5cGluZ1wiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRBY3Rpdml0eSBleHRlbmRzIElBY3Rpdml0eSB7XG4gICAgdHlwZTogXCJldmVudFwiLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55XG59XG5cbmV4cG9ydCB0eXBlIEFjdGl2aXR5ID0gTWVzc2FnZSB8IFR5cGluZyB8IEV2ZW50QWN0aXZpdHk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aXZpdHlHcm91cCB7XG4gICAgYWN0aXZpdGllczogQWN0aXZpdHlbXSxcbiAgICB3YXRlcm1hcms6IHN0cmluZ1xufVxuXG4vLyBUaGVzZSB0eXBlcyBhcmUgc3BlY2lmaWMgdG8gdGhpcyBjbGllbnQgbGlicmFyeSwgbm90IHRvIERpcmVjdCBMaW5lIDMuMFxuXG5leHBvcnQgZW51bSBDb25uZWN0aW9uU3RhdHVzIHtcbiAgICBVbmluaXRpYWxpemVkLCAgICAgICAgICAgICAgLy8gdGhlIHN0YXR1cyB3aGVuIHRoZSBEaXJlY3RMaW5lIG9iamVjdCBpcyBmaXJzdCBjcmVhdGVkL2NvbnN0cnVjdGVkXG4gICAgQ29ubmVjdGluZywgICAgICAgICAgICAgICAgIC8vIGN1cnJlbnRseSB0cnlpbmcgdG8gY29ubmVjdCB0byB0aGUgY29udmVyc2F0aW9uXG4gICAgT25saW5lLCAgICAgICAgICAgICAgICAgICAgIC8vIHN1Y2Nlc3NmdWxseSBjb25uZWN0ZWQgdG8gdGhlIGNvbnZlcnNhdGlvbi4gQ29ubmVjdGlvbiBpcyBoZWFsdGh5IHNvIGZhciBhcyB3ZSBrbm93LlxuICAgIEV4cGlyZWRUb2tlbiwgICAgICAgICAgICAgICAvLyBsYXN0IG9wZXJhdGlvbiBlcnJvcmVkIG91dCB3aXRoIGFuIGV4cGlyZWQgdG9rZW4uIFBvc3NpYmx5IHdhaXRpbmcgZm9yIHNvbWVvbmUgdG8gc3VwcGx5IGEgbmV3IG9uZS5cbiAgICBGYWlsZWRUb0Nvbm5lY3QsICAgICAgICAgICAgLy8gdGhlIGluaXRpYWwgYXR0ZW1wdCB0byBjb25uZWN0IHRvIHRoZSBjb252ZXJzYXRpb24gZmFpbGVkLiBObyByZWNvdmVyeSBwb3NzaWJsZS5cbiAgICBFbmRlZCAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGJvdCBlbmRlZCB0aGUgY29udmVyc2F0aW9uXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlyZWN0TGluZU9wdGlvbnMge1xuICAgIHNlY3JldD86IHN0cmluZyxcbiAgICB0b2tlbj86IHN0cmluZyxcbiAgICBjb252ZXJzYXRpb25JZD86IHN0cmluZyxcbiAgICB3YXRlcm1hcms/OiBzdHJpbmcsXG4gICAgZG9tYWluPzogc3RyaW5nLFxuICAgIHdlYlNvY2tldD86IGJvb2xlYW4sXG4gICAgcG9sbGluZ0ludGVydmFsPzogbnVtYmVyLFxuICAgIHN0cmVhbVVybD86IHN0cmluZyxcbiAgICB0aW1lb3V0PzogbnVtYmVyLFxuICAgIC8vIEF0dGFjaGVkIHRvIGFsbCByZXF1ZXN0cyB0byBpZGVudGlmeSByZXF1ZXN0aW5nIGFnZW50LlxuICAgIGJvdEFnZW50Pzogc3RyaW5nLFxuICAgIGNvbnZlcnNhdGlvblN0YXJ0UHJvcGVydGllcz86IGFueVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VzIHtcbiAgICBzY2hlZHVsZXI6IElTY2hlZHVsZXI7XG4gICAgV2ViU29ja2V0OiB0eXBlb2YgV2ViU29ja2V0O1xuICAgIGFqYXg6IEFqYXhDcmVhdGlvbk1ldGhvZDtcbiAgICByYW5kb206ICgpID0+IG51bWJlcjtcbn1cblxuY29uc3Qgd3JhcEFqYXhXaXRoUmV0cnkgPSAoc291cmNlOiBBamF4Q3JlYXRpb25NZXRob2QsIHNjaGVkdWxlcjogSVNjaGVkdWxlcik6IEFqYXhDcmVhdGlvbk1ldGhvZCA9PntcblxuICAgIGNvbnN0IG5vdEltcGxlbWVudGVkID0gKCk6IG5ldmVyID0+IHsgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKTsgfTtcblxuICAgIGNvbnN0IGlubmVyID0gKHJlc3BvbnNlJCA6IE9ic2VydmFibGU8QWpheFJlc3BvbnNlPikgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UkXG4gICAgICAgIC5jYXRjaDxBamF4UmVzcG9uc2UsIEFqYXhSZXNwb25zZT4oKGVycikgPT4ge1xuICAgICAgICAgICAgaWYoZXJyLnN0YXR1cyA9PT0gNDI5KXtcbiAgICAgICAgICAgICAgICBjb25zdCByZXRyeUFmdGVyVmFsdWUgPSBlcnIueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdSZXRyeS1BZnRlcicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBOdW1iZXIocmV0cnlBZnRlclZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZighaXNOYU4ocmV0cnlBZnRlcikpe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aW1lcihyZXRyeUFmdGVyLCBzY2hlZHVsZXIpXG4gICAgICAgICAgICAgICAgICAgIC5mbGF0TWFwKF8gPT4gT2JzZXJ2YWJsZS50aHJvdyhlcnIsIHNjaGVkdWxlcikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUudGhyb3coZXJyLCBzY2hlZHVsZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb3V0ZXIgPSAodXJsT3JSZXF1ZXN0OiBzdHJpbmd8IEFqYXhSZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBpbm5lcihzb3VyY2UodXJsT3JSZXF1ZXN0KSk7XG4gICAgfTtcblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG91dGVyLCB7XG4gICAgICAgIGdldDogKHVybDogc3RyaW5nLCBoZWFkZXJzPzogT2JqZWN0KTogT2JzZXJ2YWJsZTxBamF4UmVzcG9uc2U+ID0+IG5vdEltcGxlbWVudGVkKCksXG4gICAgICAgIHBvc3Q6ICh1cmw6IHN0cmluZywgYm9keT86IGFueSwgaGVhZGVycz86IE9iamVjdCk6IE9ic2VydmFibGU8QWpheFJlc3BvbnNlPiA9PiBub3RJbXBsZW1lbnRlZCgpLFxuICAgICAgICBwdXQ6ICh1cmw6IHN0cmluZywgYm9keT86IGFueSwgaGVhZGVycz86IE9iamVjdCk6IE9ic2VydmFibGU8QWpheFJlc3BvbnNlPiA9PiBub3RJbXBsZW1lbnRlZCgpLFxuICAgICAgICBwYXRjaDogKHVybDogc3RyaW5nLCBib2R5PzogYW55LCBoZWFkZXJzPzogT2JqZWN0KTogT2JzZXJ2YWJsZTxBamF4UmVzcG9uc2U+ID0+IG5vdEltcGxlbWVudGVkKCksXG4gICAgICAgIGRlbGV0ZTogKHVybDogc3RyaW5nLCBoZWFkZXJzPzogT2JqZWN0KTogT2JzZXJ2YWJsZTxBamF4UmVzcG9uc2U+ID0+IG5vdEltcGxlbWVudGVkKCksXG4gICAgICAgIGdldEpTT046IDxUPih1cmw6IHN0cmluZywgaGVhZGVycz86IE9iamVjdCk6IE9ic2VydmFibGU8VD4gPT4gbm90SW1wbGVtZW50ZWQoKVxuICAgIH0pO1xufVxuXG5jb25zdCBtYWtlU2VydmljZXMgPSAoc2VydmljZXM6IFBhcnRpYWw8U2VydmljZXM+KTogU2VydmljZXMgPT4ge1xuICAgIGNvbnN0IHNjaGVkdWxlciA9IHNlcnZpY2VzLnNjaGVkdWxlciB8fCBBc3luY1NjaGVkdWxlcjtcbiAgICByZXR1cm4ge1xuICAgICAgICBzY2hlZHVsZXIsXG4gICAgICAgIGFqYXg6IHdyYXBBamF4V2l0aFJldHJ5KHNlcnZpY2VzLmFqYXggfHwgT2JzZXJ2YWJsZS5hamF4LCBzY2hlZHVsZXIpLFxuICAgICAgICBXZWJTb2NrZXQ6IHNlcnZpY2VzLldlYlNvY2tldCB8fCBXZWJTb2NrZXQsXG4gICAgICAgIHJhbmRvbTogc2VydmljZXMucmFuZG9tIHx8IE1hdGgucmFuZG9tLFxuICAgIH1cbn1cblxuY29uc3QgbGlmZXRpbWVSZWZyZXNoVG9rZW4gPSAzMCAqIDYwICogMTAwMDtcbmNvbnN0IGludGVydmFsUmVmcmVzaFRva2VuID0gbGlmZXRpbWVSZWZyZXNoVG9rZW4gLyAyO1xuXG5jb25zdCBQT0xMSU5HX0lOVEVSVkFMX0xPV0VSX0JPVU5EOiBudW1iZXIgPSAyMDA7IC8vbXNcblxuY29uc3QgZXJyb3JFeHBpcmVkVG9rZW4gPSBuZXcgRXJyb3IoXCJleHBpcmVkIHRva2VuXCIpO1xuY29uc3QgZXJyb3JDb252ZXJzYXRpb25FbmRlZCA9IG5ldyBFcnJvcihcImNvbnZlcnNhdGlvbiBlbmRlZFwiKTtcbmNvbnN0IGVycm9yRmFpbGVkVG9Db25uZWN0ID0gbmV3IEVycm9yKFwiZmFpbGVkIHRvIGNvbm5lY3RcIik7XG5cbmNvbnN0IGtvbnNvbGUgPSB7XG4gICAgbG9nOiAobWVzc2FnZT86IGFueSwgLi4uIG9wdGlvbmFsUGFyYW1zOiBhbnlbXSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgKHdpbmRvdyBhcyBhbnkpW1wiYm90Y2hhdERlYnVnXCJdICYmIG1lc3NhZ2UpXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlLCAuLi4gb3B0aW9uYWxQYXJhbXMpO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQm90Q29ubmVjdGlvbiB7XG4gICAgY29ubmVjdGlvblN0YXR1cyQ6IEJlaGF2aW9yU3ViamVjdDxDb25uZWN0aW9uU3RhdHVzPixcbiAgICBhY3Rpdml0eSQ6IE9ic2VydmFibGU8QWN0aXZpdHk+LFxuICAgIGVuZCgpOiB2b2lkLFxuICAgIHJlZmVyZW5jZUdyYW1tYXJJZD86IHN0cmluZyxcbiAgICBwb3N0QWN0aXZpdHkoYWN0aXZpdHk6IEFjdGl2aXR5KTogT2JzZXJ2YWJsZTxzdHJpbmc+LFxuICAgIGdldFNlc3Npb25JZD8gOiAoKSA9PiBPYnNlcnZhYmxlPHN0cmluZz5cbn1cblxuZXhwb3J0IGNsYXNzIERpcmVjdExpbmUgaW1wbGVtZW50cyBJQm90Q29ubmVjdGlvbiB7XG4gICAgcHVibGljIGNvbm5lY3Rpb25TdGF0dXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdChDb25uZWN0aW9uU3RhdHVzLlVuaW5pdGlhbGl6ZWQpO1xuICAgIHB1YmxpYyBhY3Rpdml0eSQ6IE9ic2VydmFibGU8QWN0aXZpdHk+O1xuXG4gICAgcHJpdmF0ZSBkb21haW4gPSBcImh0dHBzOi8vZGlyZWN0bGluZS5ib3RmcmFtZXdvcmsuY29tL3YzL2RpcmVjdGxpbmVcIjtcbiAgICBwcml2YXRlIHdlYlNvY2tldDogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgICBwcml2YXRlIGV4cGlyZWRUb2tlbkV4aGF1c3Rpb246IEZ1bmN0aW9uO1xuICAgIHByaXZhdGUgc2VjcmV0OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSB0b2tlbjogc3RyaW5nO1xuICAgIHByaXZhdGUgd2F0ZXJtYXJrID0gJyc7XG4gICAgcHJpdmF0ZSBzdHJlYW1Vcmw6IHN0cmluZztcbiAgICBwcml2YXRlIF9ib3RBZ2VudCA9ICcnO1xuICAgIHByaXZhdGUgc2VydmljZXM6IFNlcnZpY2VzO1xuICAgIHByaXZhdGUgX3VzZXJBZ2VudDogc3RyaW5nO1xuICAgIHB1YmxpYyByZWZlcmVuY2VHcmFtbWFySWQ6IHN0cmluZztcbiAgICBwcml2YXRlIHRpbWVvdXQgPSAyMCAqIDEwMDA7XG4gICAgcHJpdmF0ZSByZXRyaWVzOiBudW1iZXI7XG5cbiAgICBwcml2YXRlIGxvY2FsZU9uU3RhcnRDb252ZXJzYXRpb246IHN0cmluZztcbiAgICBwcml2YXRlIHVzZXJJZE9uU3RhcnRDb252ZXJzYXRpb246IHN0cmluZztcblxuICAgIHByaXZhdGUgcG9sbGluZ0ludGVydmFsOiBudW1iZXIgPSAxMDAwOyAvL21zXG5cbiAgICBwcml2YXRlIHRva2VuUmVmcmVzaFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogRGlyZWN0TGluZU9wdGlvbnMgJiBQYXJ0aWFsPFNlcnZpY2VzPikge1xuICAgICAgICB0aGlzLnNlY3JldCA9IG9wdGlvbnMuc2VjcmV0O1xuICAgICAgICB0aGlzLnRva2VuID0gb3B0aW9ucy5zZWNyZXQgfHwgb3B0aW9ucy50b2tlbjtcbiAgICAgICAgdGhpcy53ZWJTb2NrZXQgPSAob3B0aW9ucy53ZWJTb2NrZXQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvcHRpb25zLndlYlNvY2tldCkgJiYgdHlwZW9mIFdlYlNvY2tldCAhPT0gJ3VuZGVmaW5lZCcgJiYgV2ViU29ja2V0ICE9PSB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuY29udmVyc2F0aW9uU3RhcnRQcm9wZXJ0aWVzICYmIG9wdGlvbnMuY29udmVyc2F0aW9uU3RhcnRQcm9wZXJ0aWVzLmxvY2FsZSkge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvcHRpb25zLmNvbnZlcnNhdGlvblN0YXJ0UHJvcGVydGllcy5sb2NhbGUpID09PSAnW29iamVjdCBTdHJpbmddJykge1xuICAgICAgICAgICAgICAgIHRoaXMubG9jYWxlT25TdGFydENvbnZlcnNhdGlvbiA9IG9wdGlvbnMuY29udmVyc2F0aW9uU3RhcnRQcm9wZXJ0aWVzLmxvY2FsZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdEaXJlY3RMaW5lSlM6IGNvbnZlcnNhdGlvblN0YXJ0UHJvcGVydGllcy5sb2NhbGUgd2FzIGlnbm9yZWQ6IHRoZSBsb2NhbGUgbmFtZSBtYXkgYmUgYSBCQ1AgNDcgbGFuZ3VhZ2UgdGFnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5kb21haW4pIHtcbiAgICAgICAgICAgIHRoaXMuZG9tYWluID0gb3B0aW9ucy5kb21haW47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5jb252ZXJzYXRpb25JZCkge1xuICAgICAgICAgICAgdGhpcy5jb252ZXJzYXRpb25JZCA9IG9wdGlvbnMuY29udmVyc2F0aW9uSWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy53YXRlcm1hcmspIHtcbiAgICAgICAgICAgIHRoaXMud2F0ZXJtYXJrID0gIG9wdGlvbnMud2F0ZXJtYXJrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc3RyZWFtVXJsKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy50b2tlbiAmJiBvcHRpb25zLmNvbnZlcnNhdGlvbklkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdHJlYW1VcmwgPSBvcHRpb25zLnN0cmVhbVVybDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdEaXJlY3RMaW5lSlM6IHN0cmVhbVVybCB3YXMgaWdub3JlZDogeW91IG5lZWQgdG8gcHJvdmlkZSBhIHRva2VuIGFuZCBhIGNvbnZlcnNhdGlvbmlkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy50aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMudGltZW91dCA9IG9wdGlvbnMudGltZW91dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmV0cmllcyA9IChsaWZldGltZVJlZnJlc2hUb2tlbiAtIGludGVydmFsUmVmcmVzaFRva2VuKSAvIHRoaXMudGltZW91dDtcblxuICAgICAgICB0aGlzLl9ib3RBZ2VudCA9IHRoaXMuZ2V0Qm90QWdlbnQob3B0aW9ucy5ib3RBZ2VudCk7XG5cbiAgICAgICAgdGhpcy5zZXJ2aWNlcyA9IG1ha2VTZXJ2aWNlcyhvcHRpb25zKTtcblxuICAgICAgICBjb25zdCBwYXJzZWRQb2xsaW5nSW50ZXJ2YWwgPSB+fm9wdGlvbnMucG9sbGluZ0ludGVydmFsO1xuXG4gICAgICAgIGlmIChwYXJzZWRQb2xsaW5nSW50ZXJ2YWwgPCBQT0xMSU5HX0lOVEVSVkFMX0xPV0VSX0JPVU5EKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMucG9sbGluZ0ludGVydmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRGlyZWN0TGluZUpTOiBwcm92aWRlZCBwb2xsaW5nSW50ZXJ2YWwgKCR7IG9wdGlvbnMucG9sbGluZ0ludGVydmFsIH0pIGlzIHVuZGVyIGxvd2VyIGJvdW5kICgyMDBtcyksIHVzaW5nIGRlZmF1bHQgb2YgMTAwMG1zYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBvbGxpbmdJbnRlcnZhbCA9IHBhcnNlZFBvbGxpbmdJbnRlcnZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXhwaXJlZFRva2VuRXhoYXVzdGlvbiA9IHRoaXMuc2V0Q29ubmVjdGlvblN0YXR1c0ZhbGxiYWNrKFxuICAgICAgICAgICAgQ29ubmVjdGlvblN0YXR1cy5FeHBpcmVkVG9rZW4sXG4gICAgICAgICAgICBDb25uZWN0aW9uU3RhdHVzLkZhaWxlZFRvQ29ubmVjdCxcbiAgICAgICAgICAgIDVcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmFjdGl2aXR5JCA9ICh0aGlzLndlYlNvY2tldFxuICAgICAgICAgICAgPyB0aGlzLndlYlNvY2tldEFjdGl2aXR5JCgpXG4gICAgICAgICAgICA6IHRoaXMucG9sbGluZ0dldEFjdGl2aXR5JCgpXG4gICAgICAgICkuc2hhcmUoKTtcbiAgICB9XG5cbiAgICAvLyBFdmVyeSB0aW1lIHdlJ3JlIGFib3V0IHRvIG1ha2UgYSBEaXJlY3QgTGluZSBSRVNUIGNhbGwsIHdlIGNhbGwgdGhpcyBmaXJzdCB0byBzZWUgY2hlY2sgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBzdGF0dXMuXG4gICAgLy8gRWl0aGVyIHRocm93cyBhbiBlcnJvciAoaW5kaWNhdGluZyBhbiBlcnJvciBzdGF0ZSkgb3IgZW1pdHMgYSBudWxsLCBpbmRpY2F0aW5nIGEgKHByZXN1bWFibHkpIGhlYWx0aHkgY29ubmVjdGlvblxuICAgIHByaXZhdGUgY2hlY2tDb25uZWN0aW9uKG9uY2UgPSBmYWxzZSkge1xuICAgICAgICBsZXQgb2JzID0gIHRoaXMuY29ubmVjdGlvblN0YXR1cyRcbiAgICAgICAgLmZsYXRNYXAoY29ubmVjdGlvblN0YXR1cyA9PiB7XG4gICAgICAgICAgICBpZiAoY29ubmVjdGlvblN0YXR1cyA9PT0gQ29ubmVjdGlvblN0YXR1cy5VbmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KENvbm5lY3Rpb25TdGF0dXMuQ29ubmVjdGluZyk7XG5cbiAgICAgICAgICAgICAgICAvL2lmIHRva2VuIGFuZCBzdHJlYW1VcmwgYXJlIGRlZmluZWQgaXQgbWVhbnMgcmVjb25uZWN0IGhhcyBhbHJlYWR5IGJlZW4gZG9uZS4gU2tpcHBpbmcgaXQuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudG9rZW4gJiYgdGhpcy5zdHJlYW1VcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KENvbm5lY3Rpb25TdGF0dXMuT25saW5lKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUub2YoY29ubmVjdGlvblN0YXR1cywgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YXJ0Q29udmVyc2F0aW9uKCkuZG8oY29udmVyc2F0aW9uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udmVyc2F0aW9uSWQgPSBjb252ZXJzYXRpb24uY29udmVyc2F0aW9uSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuID0gdGhpcy5zZWNyZXQgfHwgY29udmVyc2F0aW9uLnRva2VuO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW1VcmwgPSBjb252ZXJzYXRpb24uc3RyZWFtVXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZlcmVuY2VHcmFtbWFySWQgPSBjb252ZXJzYXRpb24ucmVmZXJlbmNlR3JhbW1hcklkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlY3JldClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbkxvb3AoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KENvbm5lY3Rpb25TdGF0dXMuT25saW5lKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KENvbm5lY3Rpb25TdGF0dXMuRmFpbGVkVG9Db25uZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcChfID0+IGNvbm5lY3Rpb25TdGF0dXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBPYnNlcnZhYmxlLm9mKGNvbm5lY3Rpb25TdGF0dXMsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcihjb25uZWN0aW9uU3RhdHVzID0+IGNvbm5lY3Rpb25TdGF0dXMgIT0gQ29ubmVjdGlvblN0YXR1cy5VbmluaXRpYWxpemVkICYmIGNvbm5lY3Rpb25TdGF0dXMgIT0gQ29ubmVjdGlvblN0YXR1cy5Db25uZWN0aW5nKVxuICAgICAgICAuZmxhdE1hcChjb25uZWN0aW9uU3RhdHVzID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAoY29ubmVjdGlvblN0YXR1cykge1xuICAgICAgICAgICAgICAgIGNhc2UgQ29ubmVjdGlvblN0YXR1cy5FbmRlZDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUudGhyb3coZXJyb3JDb252ZXJzYXRpb25FbmRlZCwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuXG4gICAgICAgICAgICAgICAgY2FzZSBDb25uZWN0aW9uU3RhdHVzLkZhaWxlZFRvQ29ubmVjdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUudGhyb3coZXJyb3JGYWlsZWRUb0Nvbm5lY3QsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcblxuICAgICAgICAgICAgICAgIGNhc2UgQ29ubmVjdGlvblN0YXR1cy5FeHBpcmVkVG9rZW46XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYnNlcnZhYmxlLm9mKGNvbm5lY3Rpb25TdGF0dXMsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYnNlcnZhYmxlLm9mKGNvbm5lY3Rpb25TdGF0dXMsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm4gb25jZSA/IG9icy50YWtlKDEpIDogb2JzO1xuICAgIH1cblxuICAgIHNldENvbm5lY3Rpb25TdGF0dXNGYWxsYmFjayhcbiAgICAgICAgY29ubmVjdGlvblN0YXR1c0Zyb206IENvbm5lY3Rpb25TdGF0dXMsXG4gICAgICAgIGNvbm5lY3Rpb25TdGF0dXNUbzogQ29ubmVjdGlvblN0YXR1cyxcbiAgICAgICAgbWF4QXR0ZW1wdHMgPSA1XG4gICAgKSB7XG4gICAgICAgIG1heEF0dGVtcHRzLS07XG4gICAgICAgIGxldCBhdHRlbXB0cyA9IDA7XG4gICAgICAgIGxldCBjdXJyU3RhdHVzID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIChzdGF0dXM6IENvbm5lY3Rpb25TdGF0dXMpOiBDb25uZWN0aW9uU3RhdHVzID0+IHtcbiAgICAgICAgICAgIGlmIChzdGF0dXMgPT09IGNvbm5lY3Rpb25TdGF0dXNGcm9tICYmIGN1cnJTdGF0dXMgPT09IHN0YXR1cyAmJiBhdHRlbXB0cyA+PSBtYXhBdHRlbXB0cykge1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzID0gMFxuICAgICAgICAgICAgICAgIHJldHVybiBjb25uZWN0aW9uU3RhdHVzVG87XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhdHRlbXB0cysrO1xuICAgICAgICAgICAgY3VyclN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgICAgIHJldHVybiBzdGF0dXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHBpcmVkVG9rZW4oKSB7XG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb25TdGF0dXMgPSB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLmdldFZhbHVlKCk7XG4gICAgICAgIGlmIChjb25uZWN0aW9uU3RhdHVzICE9IENvbm5lY3Rpb25TdGF0dXMuRW5kZWQgJiYgY29ubmVjdGlvblN0YXR1cyAhPSBDb25uZWN0aW9uU3RhdHVzLkZhaWxlZFRvQ29ubmVjdClcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dChDb25uZWN0aW9uU3RhdHVzLkV4cGlyZWRUb2tlbik7XG5cbiAgICAgICAgY29uc3QgcHJvdGVjdGVkQ29ubmVjdGlvblN0YXR1cyA9IHRoaXMuZXhwaXJlZFRva2VuRXhoYXVzdGlvbih0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLmdldFZhbHVlKCkpO1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQocHJvdGVjdGVkQ29ubmVjdGlvblN0YXR1cyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGFydENvbnZlcnNhdGlvbigpIHtcbiAgICAgICAgLy9pZiBjb252ZXJzYXRpb25pZCBpcyBzZXQgaGVyZSwgaXQgbWVhbnMgd2UgbmVlZCB0byBjYWxsIHRoZSByZWNvbm5lY3QgYXBpLCBlbHNlIGl0IGlzIGEgbmV3IGNvbnZlcnNhdGlvblxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmNvbnZlcnNhdGlvbklkXG4gICAgICAgICAgICA/IGAke3RoaXMuZG9tYWlufS9jb252ZXJzYXRpb25zLyR7dGhpcy5jb252ZXJzYXRpb25JZH0/d2F0ZXJtYXJrPSR7dGhpcy53YXRlcm1hcmt9YFxuICAgICAgICAgICAgOiBgJHt0aGlzLmRvbWFpbn0vY29udmVyc2F0aW9uc2A7XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IHRoaXMuY29udmVyc2F0aW9uSWQgPyBcIkdFVFwiIDogXCJQT1NUXCI7XG4gICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmNvbnZlcnNhdGlvbklkXG4gICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgdXNlcjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogdGhpcy51c2VySWRPblN0YXJ0Q29udmVyc2F0aW9uXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlT25TdGFydENvbnZlcnNhdGlvblxuICAgICAgICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlcy5hamF4KHtcbiAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXQsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5jb21tb25IZWFkZXJzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbi8vICAgICAgLmRvKGFqYXhSZXNwb25zZSA9PiBrb25zb2xlLmxvZyhcImNvbnZlcnNhdGlvbiBhamF4UmVzcG9uc2VcIiwgYWpheFJlc3BvbnNlLnJlc3BvbnNlKSlcbiAgICAgICAgLm1hcChhamF4UmVzcG9uc2UgPT4gYWpheFJlc3BvbnNlLnJlc3BvbnNlIGFzIENvbnZlcnNhdGlvbilcbiAgICAgICAgLnJldHJ5V2hlbihlcnJvciQgPT5cbiAgICAgICAgICAgIC8vIGZvciBub3cgd2UgZGVlbSA0eHggYW5kIDV4eCBlcnJvcnMgYXMgdW5yZWNvdmVyYWJsZVxuICAgICAgICAgICAgLy8gZm9yIGV2ZXJ5dGhpbmcgZWxzZSAodGltZW91dHMpLCByZXRyeSBmb3IgYSB3aGlsZVxuICAgICAgICAgICAgZXJyb3IkLm1lcmdlTWFwKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvci5zdGF0dXMgPj0gNDAwICYmIGVycm9yLnN0YXR1cyA8IDYwMFxuICAgICAgICAgICAgICAgID8gT2JzZXJ2YWJsZS50aHJvdyhlcnJvciwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpXG4gICAgICAgICAgICAgICAgOiBPYnNlcnZhYmxlLm9mKGVycm9yLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZGVsYXkodGhpcy50aW1lb3V0LCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcilcbiAgICAgICAgICAgIC50YWtlKHRoaXMucmV0cmllcylcbiAgICAgICAgKVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVmcmVzaFRva2VuTG9vcCgpIHtcbiAgICAgICAgdGhpcy50b2tlblJlZnJlc2hTdWJzY3JpcHRpb24gPSBPYnNlcnZhYmxlLmludGVydmFsKGludGVydmFsUmVmcmVzaFRva2VuLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcilcbiAgICAgICAgLmZsYXRNYXAoXyA9PiB0aGlzLnJlZnJlc2hUb2tlbigpKVxuICAgICAgICAuc3Vic2NyaWJlKHRva2VuID0+IHtcbiAgICAgICAgICAgIGtvbnNvbGUubG9nKFwicmVmcmVzaGluZyB0b2tlblwiLCB0b2tlbiwgXCJhdFwiLCBuZXcgRGF0ZSgpKTtcbiAgICAgICAgICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWZyZXNoVG9rZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrQ29ubmVjdGlvbih0cnVlKVxuICAgICAgICAuZmxhdE1hcChfID0+XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VzLmFqYXgoe1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgdXJsOiBgJHt0aGlzLmRvbWFpbn0vdG9rZW5zL3JlZnJlc2hgLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuY29tbW9uSGVhZGVycygpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5tYXAoYWpheFJlc3BvbnNlID0+IGFqYXhSZXNwb25zZS5yZXNwb25zZS50b2tlbiBhcyBzdHJpbmcpXG4gICAgICAgICAgICAucmV0cnlXaGVuKGVycm9yJCA9PiBlcnJvciRcbiAgICAgICAgICAgICAgICAubWVyZ2VNYXAoZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSB0b2tlbiBpcyBleHBpcmVkIHRoZXJlJ3Mgbm8gcmVhc29uIHRvIGtlZXAgdHJ5aW5nXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGlyZWRUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUudGhyb3coZXJyb3IsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvci5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJvdCBpcyBnb25lLCB3ZSBzaG91bGQgc3RvcCByZXRyeWluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUudGhyb3coZXJyb3IsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYnNlcnZhYmxlLm9mKGVycm9yLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZGVsYXkodGhpcy50aW1lb3V0LCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcilcbiAgICAgICAgICAgICAgICAudGFrZSh0aGlzLnJldHJpZXMpXG4gICAgICAgICAgICApXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVjb25uZWN0KGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uKSB7XG4gICAgICAgIHRoaXMudG9rZW4gPSBjb252ZXJzYXRpb24udG9rZW47XG4gICAgICAgIHRoaXMuc3RyZWFtVXJsID0gY29udmVyc2F0aW9uLnN0cmVhbVVybDtcbiAgICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXR1cyQuZ2V0VmFsdWUoKSA9PT0gQ29ubmVjdGlvblN0YXR1cy5FeHBpcmVkVG9rZW4pXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoQ29ubmVjdGlvblN0YXR1cy5PbmxpbmUpO1xuICAgIH1cblxuICAgIGVuZCgpIHtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5SZWZyZXNoU3Vic2NyaXB0aW9uKVxuICAgICAgICAgICAgdGhpcy50b2tlblJlZnJlc2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dChDb25uZWN0aW9uU3RhdHVzLkVuZGVkKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgPT09IGVycm9yQ29udmVyc2F0aW9uRW5kZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhyb3coZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRTZXNzaW9uSWQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgLy8gSWYgd2UncmUgbm90IGNvbm5lY3RlZCB0byB0aGUgYm90LCBnZXQgY29ubmVjdGVkXG4gICAgICAgIC8vIFdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgd2UgYXJlIG5vdCBjb25uZWN0ZWRcbiAgICAgICAga29uc29sZS5sb2coXCJnZXRTZXNzaW9uSWRcIik7XG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrQ29ubmVjdGlvbih0cnVlKVxuICAgICAgICAgICAgLmZsYXRNYXAoXyA9PlxuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZXMuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBgJHt0aGlzLmRvbWFpbn0vc2Vzc2lvbi9nZXRzZXNzaW9uaWRgLFxuICAgICAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmNvbW1vbkhlYWRlcnMoKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAubWFwKGFqYXhSZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhamF4UmVzcG9uc2UgJiYgYWpheFJlc3BvbnNlLnJlc3BvbnNlICYmIGFqYXhSZXNwb25zZS5yZXNwb25zZS5zZXNzaW9uSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtvbnNvbGUubG9nKFwiZ2V0U2Vzc2lvbklkIHJlc3BvbnNlOiBcIiArIGFqYXhSZXNwb25zZS5yZXNwb25zZS5zZXNzaW9uSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFqYXhSZXNwb25zZS5yZXNwb25zZS5zZXNzaW9uSWQgYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGtvbnNvbGUubG9nKFwiZ2V0U2Vzc2lvbklkIGVycm9yOiBcIiArIGVycm9yLnN0YXR1cyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYnNlcnZhYmxlLm9mKCcnLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB0aGlzLmNhdGNoRXhwaXJlZFRva2VuKGVycm9yKSk7XG4gICAgfVxuXG4gICAgcG9zdEFjdGl2aXR5KGFjdGl2aXR5OiBBY3Rpdml0eSkge1xuICAgICAgICAvLyBJZiB1c2VyIGlkIGlzIHNldCwgY2hlY2sgaWYgaXQgbWF0Y2ggYWN0aXZpdHkuZnJvbS5pZCBhbmQgYWx3YXlzIG92ZXJyaWRlIGl0IGluIGFjdGl2aXR5XG4gICAgICAgIGlmICh0aGlzLnVzZXJJZE9uU3RhcnRDb252ZXJzYXRpb24gJiYgYWN0aXZpdHkuZnJvbSAmJiBhY3Rpdml0eS5mcm9tLmlkICE9PSB0aGlzLnVzZXJJZE9uU3RhcnRDb252ZXJzYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRGlyZWN0TGluZUpTOiBBY3Rpdml0eS5mcm9tLmlkIGRvZXMgbm90IG1hdGNoIHdpdGggdXNlciBpZCwgaWdub3JpbmcgYWN0aXZpdHkuZnJvbS5pZCcpO1xuICAgICAgICAgICAgYWN0aXZpdHkuZnJvbS5pZCA9IHRoaXMudXNlcklkT25TdGFydENvbnZlcnNhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICAvLyBVc2UgcG9zdE1lc3NhZ2VXaXRoQXR0YWNobWVudHMgZm9yIG1lc3NhZ2VzIHdpdGggYXR0YWNobWVudHMgdGhhdCBhcmUgbG9jYWwgZmlsZXMgKGUuZy4gYW4gaW1hZ2UgdG8gdXBsb2FkKVxuICAgICAgICAvLyBUZWNobmljYWxseSB3ZSBjb3VsZCB1c2UgaXQgZm9yICphbGwqIGFjdGl2aXRpZXMsIGJ1dCBwb3N0QWN0aXZpdHkgaXMgbXVjaCBsaWdodGVyIHdlaWdodFxuICAgICAgICAvLyBTbywgc2luY2UgV2ViQ2hhdCBpcyBwYXJ0aWFsbHkgYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gb2YgRGlyZWN0IExpbmUsIHdlIGltcGxlbWVudCBib3RoLlxuICAgICAgICBpZiAoYWN0aXZpdHkudHlwZSA9PT0gXCJtZXNzYWdlXCIgJiYgYWN0aXZpdHkuYXR0YWNobWVudHMgJiYgYWN0aXZpdHkuYXR0YWNobWVudHMubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc3RNZXNzYWdlV2l0aEF0dGFjaG1lbnRzKGFjdGl2aXR5KTtcblxuICAgICAgICAvLyBJZiB3ZSdyZSBub3QgY29ubmVjdGVkIHRvIHRoZSBib3QsIGdldCBjb25uZWN0ZWRcbiAgICAgICAgLy8gV2lsbCB0aHJvdyBhbiBlcnJvciBpZiB3ZSBhcmUgbm90IGNvbm5lY3RlZFxuICAgICAgICBrb25zb2xlLmxvZyhcInBvc3RBY3Rpdml0eVwiLCBhY3Rpdml0eSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrQ29ubmVjdGlvbih0cnVlKVxuICAgICAgICAuZmxhdE1hcChfID0+XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VzLmFqYXgoe1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgdXJsOiBgJHt0aGlzLmRvbWFpbn0vY29udmVyc2F0aW9ucy8ke3RoaXMuY29udmVyc2F0aW9uSWR9L2FjdGl2aXRpZXNgLFxuICAgICAgICAgICAgICAgIGJvZHk6IGFjdGl2aXR5LFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmNvbW1vbkhlYWRlcnMoKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1hcChhamF4UmVzcG9uc2UgPT4gYWpheFJlc3BvbnNlLnJlc3BvbnNlLmlkIGFzIHN0cmluZylcbiAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB0aGlzLmNhdGNoUG9zdEVycm9yKGVycm9yKSlcbiAgICAgICAgKVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4gdGhpcy5jYXRjaEV4cGlyZWRUb2tlbihlcnJvcikpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcG9zdE1lc3NhZ2VXaXRoQXR0YWNobWVudHMobWVzc2FnZTogTWVzc2FnZSkge1xuICAgICAgICBjb25zdCB7IGF0dGFjaG1lbnRzIH0gPSBtZXNzYWdlO1xuICAgICAgICAvLyBXZSBjbGVhbiB0aGUgYXR0YWNobWVudHMgYnV0IG1ha2luZyBzdXJlIGV2ZXJ5IGF0dGFjaG1lbnQgaGFzIHVuaXF1ZSBuYW1lLlxuICAgICAgICAvLyBJZiB0aGUgZmlsZSBkbyBub3QgaGF2ZSBhIG5hbWUsIENocm9tZSB3aWxsIGFzc2lnbiBcImJsb2JcIiB3aGVuIGl0IGlzIGFwcGVuZGVkIHRvIEZvcm1EYXRhLlxuICAgICAgICBjb25zdCBhdHRhY2htZW50TmFtZXM6IHN0cmluZ1tdID0gZGVkdXBlRmlsZW5hbWVzKGF0dGFjaG1lbnRzLm1hcCgobWVkaWE6IE1lZGlhKSA9PiBtZWRpYS5uYW1lIHx8ICdibG9iJykpO1xuICAgICAgICBjb25zdCBjbGVhbnNlZEF0dGFjaG1lbnRzID0gYXR0YWNobWVudHMubWFwKChhdHRhY2htZW50OiBNZWRpYSwgaW5kZXg6IG51bWJlcikgPT4gKHtcbiAgICAgICAgICAgIC4uLmF0dGFjaG1lbnQsXG4gICAgICAgICAgICBuYW1lOiBhdHRhY2htZW50TmFtZXNbaW5kZXhdXG4gICAgICAgIH0pKTtcbiAgICAgICAgbGV0IGZvcm1EYXRhOiBGb3JtRGF0YTtcblxuICAgICAgICAvLyBJZiB3ZSdyZSBub3QgY29ubmVjdGVkIHRvIHRoZSBib3QsIGdldCBjb25uZWN0ZWRcbiAgICAgICAgLy8gV2lsbCB0aHJvdyBhbiBlcnJvciBpZiB3ZSBhcmUgbm90IGNvbm5lY3RlZFxuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0Nvbm5lY3Rpb24odHJ1ZSlcbiAgICAgICAgLmZsYXRNYXAoXyA9PiB7XG4gICAgICAgICAgICAvLyBUbyBzZW5kIHRoaXMgbWVzc2FnZSB0byBEaXJlY3RMaW5lIHdlIG5lZWQgdG8gZGVjb25zdHJ1Y3QgaXQgaW50byBhIFwidGVtcGxhdGVcIiBhY3Rpdml0eVxuICAgICAgICAgICAgLy8gYW5kIG9uZSBibG9iIGZvciBlYWNoIGF0dGFjaG1lbnQuXG4gICAgICAgICAgICBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdhY3Rpdml0eScsIG5ldyBCbG9iKFtKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgLi4ubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAvLyBSZW1vdmluZyBjb250ZW50VXJsIGZyb20gYXR0YWNobWVudCwgd2Ugd2lsbCBzZW5kIGl0IHZpYSBtdWx0aXBhcnRcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50czogY2xlYW5zZWRBdHRhY2htZW50cy5tYXAoKHsgY29udGVudFVybDogc3RyaW5nLCAuLi5vdGhlcnMgfSkgPT4gKHsgLi4ub3RoZXJzIH0pKVxuICAgICAgICAgICAgfSldLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmFjdGl2aXR5JyB9KSk7XG5cbiAgICAgICAgICAgIHJldHVybiBPYnNlcnZhYmxlLmZyb20oY2xlYW5zZWRBdHRhY2htZW50cywgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpXG4gICAgICAgICAgICAuZmxhdE1hcCgobWVkaWE6IE1lZGlhKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZXMuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBtZWRpYS5jb250ZW50VXJsLFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcidcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5kbyhhamF4UmVzcG9uc2UgPT5cbiAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgbmV3IEJsb2IoW2FqYXhSZXNwb25zZS5yZXNwb25zZV0sIHsgdHlwZTogbWVkaWEuY29udGVudFR5cGUgfSksIG1lZGlhLm5hbWUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmNvdW50KClcbiAgICAgICAgfSlcbiAgICAgICAgLmZsYXRNYXAoXyA9PlxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcy5hamF4KHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgIHVybDogYCR7dGhpcy5kb21haW59L2NvbnZlcnNhdGlvbnMvJHt0aGlzLmNvbnZlcnNhdGlvbklkfS91cGxvYWQ/dXNlcklkPSR7bWVzc2FnZS5mcm9tLmlkfWAsXG4gICAgICAgICAgICAgICAgYm9keTogZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5jb21tb25IZWFkZXJzKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1hcChhamF4UmVzcG9uc2UgPT4gYWpheFJlc3BvbnNlLnJlc3BvbnNlLmlkIGFzIHN0cmluZylcbiAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB0aGlzLmNhdGNoUG9zdEVycm9yKGVycm9yKSlcbiAgICAgICAgKVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4gdGhpcy5jYXRjaFBvc3RFcnJvcihlcnJvcikpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2F0Y2hQb3N0RXJyb3IoZXJyb3I6IGFueSkge1xuICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDMpXG4gICAgICAgICAgICAvLyB0b2tlbiBoYXMgZXhwaXJlZCAod2lsbCBmYWxsIHRocm91Z2ggdG8gcmV0dXJuIFwicmV0cnlcIilcbiAgICAgICAgICAgIHRoaXMuZXhwaXJlZFRva2VuKCk7XG4gICAgICAgIGVsc2UgaWYgKGVycm9yLnN0YXR1cyA+PSA0MDAgJiYgZXJyb3Iuc3RhdHVzIDwgNTAwKVxuICAgICAgICAgICAgLy8gbW9yZSB1bnJlY292ZXJhYmxlIGVycm9yc1xuICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUudGhyb3coZXJyb3IsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcbiAgICAgICAgcmV0dXJuIE9ic2VydmFibGUub2YoXCJyZXRyeVwiLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYXRjaEV4cGlyZWRUb2tlbihlcnJvcjogYW55KSB7XG4gICAgICAgIHJldHVybiBlcnJvciA9PT0gZXJyb3JFeHBpcmVkVG9rZW5cbiAgICAgICAgPyBPYnNlcnZhYmxlLm9mKFwicmV0cnlcIiwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpXG4gICAgICAgIDogT2JzZXJ2YWJsZS50aHJvdyhlcnJvciwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcG9sbGluZ0dldEFjdGl2aXR5JCgpIHtcbiAgICAgICAgY29uc3QgcG9sbGVyJDogT2JzZXJ2YWJsZTxBamF4UmVzcG9uc2U+ID0gT2JzZXJ2YWJsZS5jcmVhdGUoKHN1YnNjcmliZXI6IFN1YnNjcmliZXI8YW55PikgPT4ge1xuICAgICAgICAgICAgLy8gQSBCZWhhdmlvclN1YmplY3QgdG8gdHJpZ2dlciBwb2xsaW5nLiBTaW5jZSBpdCBpcyBhIEJlaGF2aW9yU3ViamVjdFxuICAgICAgICAgICAgLy8gdGhlIGZpcnN0IGV2ZW50IGlzIHByb2R1Y2VkIGltbWVkaWF0ZWx5LlxuICAgICAgICAgICAgY29uc3QgdHJpZ2dlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe30pO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiByZW1vdmUgRGF0ZS5ub3csIHVzZSByZWFjdGl2ZSBpbnRlcnZhbCB0byBzcGFjZSBvdXQgZXZlcnkgcmVxdWVzdFxuXG4gICAgICAgICAgICB0cmlnZ2VyJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLmdldFZhbHVlKCkgPT09IENvbm5lY3Rpb25TdGF0dXMuT25saW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZXN0YW1wID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VzLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuY29tbW9uSGVhZGVycygpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogYCR7IHRoaXMuZG9tYWluIH0vY29udmVyc2F0aW9ucy8keyB0aGlzLmNvbnZlcnNhdGlvbklkIH0vYWN0aXZpdGllcz93YXRlcm1hcms9JHsgdGhpcy53YXRlcm1hcmsgfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXRcbiAgICAgICAgICAgICAgICAgICAgfSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3VsdDogQWpheFJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0cmlnZ2VyJC5uZXh0KG51bGwpLCBNYXRoLm1heCgwLCB0aGlzLnBvbGxpbmdJbnRlcnZhbCAtIERhdGUubm93KCkgKyBzdGFydFRpbWVzdGFtcCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlcnJvci5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0MDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoQ29ubmVjdGlvblN0YXR1cy5FeHBpcmVkVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0cmlnZ2VyJC5uZXh0KG51bGwpLCB0aGlzLnBvbGxpbmdJbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQwNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dChDb25uZWN0aW9uU3RhdHVzLkVuZGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9wYWdhdGUgdGhlIGVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tDb25uZWN0aW9uKClcbiAgICAgICAgLmZsYXRNYXAoXyA9PiBwb2xsZXIkXG4gICAgICAgICAgICAuY2F0Y2goKCkgPT4gT2JzZXJ2YWJsZS5lbXB0eTxBamF4UmVzcG9uc2U+KCkpXG4gICAgICAgICAgICAubWFwKGFqYXhSZXNwb25zZSA9PiBhamF4UmVzcG9uc2UucmVzcG9uc2UgYXMgQWN0aXZpdHlHcm91cClcbiAgICAgICAgICAgIC5mbGF0TWFwKGFjdGl2aXR5R3JvdXAgPT4gdGhpcy5vYnNlcnZhYmxlRnJvbUFjdGl2aXR5R3JvdXAoYWN0aXZpdHlHcm91cCkpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9ic2VydmFibGVGcm9tQWN0aXZpdHlHcm91cChhY3Rpdml0eUdyb3VwOiBBY3Rpdml0eUdyb3VwKSB7XG4gICAgICAgIGlmIChhY3Rpdml0eUdyb3VwLndhdGVybWFyaylcbiAgICAgICAgICAgIHRoaXMud2F0ZXJtYXJrID0gYWN0aXZpdHlHcm91cC53YXRlcm1hcms7XG4gICAgICAgIHJldHVybiBPYnNlcnZhYmxlLmZyb20oYWN0aXZpdHlHcm91cC5hY3Rpdml0aWVzLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB3ZWJTb2NrZXRBY3Rpdml0eSQoKTogT2JzZXJ2YWJsZTxBY3Rpdml0eT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0Nvbm5lY3Rpb24oKVxuICAgICAgICAuZmxhdE1hcChfID0+XG4gICAgICAgICAgICB0aGlzLm9ic2VydmFibGVXZWJTb2NrZXQ8QWN0aXZpdHlHcm91cD4oKVxuICAgICAgICAgICAgLy8gV2ViU29ja2V0cyBjYW4gYmUgY2xvc2VkIGJ5IHRoZSBzZXJ2ZXIgb3IgdGhlIGJyb3dzZXIuIEluIHRoZSBmb3JtZXIgY2FzZSB3ZSBuZWVkIHRvXG4gICAgICAgICAgICAvLyByZXRyaWV2ZSBhIG5ldyBzdHJlYW1VcmwuIEluIHRoZSBsYXR0ZXIgY2FzZSB3ZSBjb3VsZCBmaXJzdCByZXRyeSB3aXRoIHRoZSBjdXJyZW50IHN0cmVhbVVybCxcbiAgICAgICAgICAgIC8vIGJ1dCBpdCdzIHNpbXBsZXIganVzdCB0byBhbHdheXMgZmV0Y2ggYSBuZXcgb25lLlxuICAgICAgICAgICAgLnJldHJ5V2hlbihlcnJvciQgPT4gZXJyb3IkLmRlbGF5KHRoaXMuZ2V0UmV0cnlEZWxheSgpLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcikubWVyZ2VNYXAoZXJyb3IgPT4gdGhpcy5yZWNvbm5lY3RUb0NvbnZlcnNhdGlvbigpKSlcbiAgICAgICAgKVxuICAgICAgICAuZmxhdE1hcChhY3Rpdml0eUdyb3VwID0+IHRoaXMub2JzZXJ2YWJsZUZyb21BY3Rpdml0eUdyb3VwKGFjdGl2aXR5R3JvdXApKVxuICAgIH1cblxuICAgIC8vIFJldHVybnMgdGhlIGRlbGF5IGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kc1xuICAgIHByaXZhdGUgZ2V0UmV0cnlEZWxheSgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoMzAwMCArIHRoaXMuc2VydmljZXMucmFuZG9tKCkgKiAxMjAwMCk7XG4gICAgfVxuXG4gICAgLy8gT3JpZ2luYWxseSB3ZSB1c2VkIE9ic2VydmFibGUud2ViU29ja2V0LCBidXQgaXQncyBmYWlybHkgb3BpbmlvbmF0ZWQgYW5kIEkgZW5kZWQgdXAgd3JpdGluZ1xuICAgIC8vIGEgbG90IG9mIGNvZGUgdG8gd29yayBhcm91bmQgdGhlaXIgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gU2luY2UgV2ViQ2hhdCBpcyBtZWFudCB0byBiZSBhIHJlZmVyZW5jZVxuICAgIC8vIGltcGxlbWVudGF0aW9uLCBJIGRlY2lkZWQgcm9sbCB0aGUgYmVsb3csIHdoZXJlIHRoZSBsb2dpYyBpcyBtb3JlIHB1cnBvc2VmdWwuIC0gQGJpbGxiYVxuICAgIHByaXZhdGUgb2JzZXJ2YWJsZVdlYlNvY2tldDxUPigpIHtcbiAgICAgICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKChzdWJzY3JpYmVyOiBTdWJzY3JpYmVyPFQ+KSA9PiB7XG4gICAgICAgICAgICBrb25zb2xlLmxvZyhcImNyZWF0aW5nIFdlYlNvY2tldFwiLCB0aGlzLnN0cmVhbVVybCk7XG4gICAgICAgICAgICBjb25zdCB3cyA9IG5ldyB0aGlzLnNlcnZpY2VzLldlYlNvY2tldCh0aGlzLnN0cmVhbVVybCk7XG4gICAgICAgICAgICBsZXQgc3ViOiBTdWJzY3JpcHRpb247XG4gICAgICAgICAgICBsZXQgY2xvc2VkOiBib29sZWFuO1xuXG4gICAgICAgICAgICB3cy5vbm9wZW4gPSBvcGVuID0+IHtcbiAgICAgICAgICAgICAgICBrb25zb2xlLmxvZyhcIldlYlNvY2tldCBvcGVuXCIsIG9wZW4pO1xuICAgICAgICAgICAgICAgIC8vIENocm9tZSBpcyBwcmV0dHkgYmFkIGF0IG5vdGljaW5nIHdoZW4gYSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBicm9rZW4uXG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgcGVyaW9kaWNhbGx5IHBpbmcgdGhlIHNlcnZlciB3aXRoIGVtcHR5IG1lc3NhZ2VzLCBpdCBoZWxwcyBDaHJvbWVcbiAgICAgICAgICAgICAgICAvLyByZWFsaXplIHdoZW4gY29ubmVjdGlvbiBicmVha3MsIGFuZCBjbG9zZSB0aGUgc29ja2V0LiBXZSB0aGVuIHRocm93IGFuXG4gICAgICAgICAgICAgICAgLy8gZXJyb3IsIGFuZCB0aGF0IGdpdmUgdXMgdGhlIG9wcG9ydHVuaXR5IHRvIGF0dGVtcHQgdG8gcmVjb25uZWN0LlxuICAgICAgICAgICAgICAgIHN1YiA9IE9ic2VydmFibGUuaW50ZXJ2YWwodGhpcy50aW1lb3V0LCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcikuc3Vic2NyaWJlKF8gPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd3Muc2VuZChcIlwiKVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtvbnNvbGUubG9nKFwiUGluZyBlcnJvclwiLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3cy5vbmNsb3NlID0gY2xvc2UgPT4ge1xuICAgICAgICAgICAgICAgIGtvbnNvbGUubG9nKFwiV2ViU29ja2V0IGNsb3NlXCIsIGNsb3NlKTtcbiAgICAgICAgICAgICAgICBpZiAoc3ViKSBzdWIudW5zdWJzY3JpYmUoKTtcblxuICAgICAgICAgICAgICAgIC8vIFJ4SlMucmV0cnlXaGVuIGhhcyBhIGJ1ZyB0aGF0IHdvdWxkIGNhdXNlIFwiZXJyb3JcIiBzaWduYWwgdG8gYmUgc2VudCBhZnRlciB0aGUgb2JzZXJ2YWJsZSBpcyBjb21wbGV0ZWQvZXJyb3JlZC5cbiAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGd1YXJkIGFnYWluc3QgZXh0cmFuZW91cyBcImVycm9yXCIgc2lnbmFsIHRvIHdvcmthcm91bmQgdGhlIGJ1Zy5cbiAgICAgICAgICAgICAgICBjbG9zZWQgfHwgc3Vic2NyaWJlci5lcnJvcihjbG9zZSk7XG4gICAgICAgICAgICAgICAgY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd3Mub25lcnJvciA9IGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICBrb25zb2xlLmxvZyhcIldlYlNvY2tldCBlcnJvclwiLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgaWYgKHN1Yikgc3ViLnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBSeEpTLnJldHJ5V2hlbiBoYXMgYSBidWcgdGhhdCB3b3VsZCBjYXVzZSBcImVycm9yXCIgc2lnbmFsIHRvIGJlIHNlbnQgYWZ0ZXIgdGhlIG9ic2VydmFibGUgaXMgY29tcGxldGVkL2Vycm9yZWQuXG4gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBndWFyZCBhZ2FpbnN0IGV4dHJhbmVvdXMgXCJlcnJvclwiIHNpZ25hbCB0byB3b3JrYXJvdW5kIHRoZSBidWcuXG4gICAgICAgICAgICAgICAgY2xvc2VkIHx8IHN1YnNjcmliZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIGNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdzLm9ubWVzc2FnZSA9IG1lc3NhZ2UgPT4gbWVzc2FnZS5kYXRhICYmIHN1YnNjcmliZXIubmV4dChKU09OLnBhcnNlKG1lc3NhZ2UuZGF0YSkpO1xuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSAndW5zdWJzY3JpYmUnIG1ldGhvZCwgd2hpY2ggaXMgY2FsbGVkIHdoZW4gdGhpcyBvYnNlcnZhYmxlIGlzIGRpc3Bvc2VkLlxuICAgICAgICAgICAgLy8gV2hlbiB0aGUgV2ViU29ja2V0IGNsb3NlcyBpdHNlbGYsIHdlIHRocm93IGFuIGVycm9yLCBhbmQgdGhpcyBmdW5jdGlvbiBpcyBldmVudHVhbGx5IGNhbGxlZC5cbiAgICAgICAgICAgIC8vIFdoZW4gdGhlIG9ic2VydmFibGUgaXMgY2xvc2VkIGZpcnN0IChlLmcuIHdoZW4gdGVhcmluZyBkb3duIGEgV2ViQ2hhdCBpbnN0YW5jZSkgdGhlblxuICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBtYW51YWxseSBjbG9zZSB0aGUgV2ViU29ja2V0LlxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAod3MucmVhZHlTdGF0ZSA9PT0gMCB8fCB3cy5yZWFkeVN0YXRlID09PSAxKSB3cy5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSBhcyBPYnNlcnZhYmxlPFQ+XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWNvbm5lY3RUb0NvbnZlcnNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tDb25uZWN0aW9uKHRydWUpXG4gICAgICAgIC5mbGF0TWFwKF8gPT5cbiAgICAgICAgICAgIHRoaXMuc2VydmljZXMuYWpheCh7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgIHVybDogYCR7dGhpcy5kb21haW59L2NvbnZlcnNhdGlvbnMvJHt0aGlzLmNvbnZlcnNhdGlvbklkfT93YXRlcm1hcms9JHt0aGlzLndhdGVybWFya31gLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmNvbW1vbkhlYWRlcnMoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZG8ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VjcmV0KVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuID0gcmVzdWx0LnJlc3BvbnNlLnRva2VuO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtVXJsID0gcmVzdWx0LnJlc3BvbnNlLnN0cmVhbVVybDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAubWFwKF8gPT4gbnVsbClcbiAgICAgICAgICAgIC5yZXRyeVdoZW4oZXJyb3IkID0+IGVycm9yJFxuICAgICAgICAgICAgICAgIC5tZXJnZU1hcChlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG9rZW4gaGFzIGV4cGlyZWQuIFdlIGNhbid0IHJlY292ZXIgZnJvbSB0aGlzIGhlcmUsIGJ1dCB0aGUgZW1iZWRkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZWJzaXRlIG1pZ2h0IGV2ZW50dWFsbHkgY2FsbCByZWNvbm5lY3QoKSB3aXRoIGEgbmV3IHRva2VuIGFuZCBzdHJlYW1VcmwuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGlyZWRUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aHJvdyhlcnJvckNvbnZlcnNhdGlvbkVuZGVkLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5vZihlcnJvciwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmRlbGF5KHRoaXMudGltZW91dCwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpXG4gICAgICAgICAgICAgICAgLnRha2UodGhpcy5yZXRyaWVzKVxuICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21tb25IZWFkZXJzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgXCJBdXRob3JpemF0aW9uXCI6IGBCZWFyZXIgJHt0aGlzLnRva2VufWAsXG4gICAgICAgICAgICBcIngtbXMtYm90LWFnZW50XCI6IHRoaXMuX2JvdEFnZW50XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRCb3RBZ2VudChjdXN0b21BZ2VudDogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICAgICAgICBsZXQgY2xpZW50QWdlbnQgPSAnZGlyZWN0bGluZWpzJ1xuXG4gICAgICAgIGlmIChjdXN0b21BZ2VudCkge1xuICAgICAgICAgICAgY2xpZW50QWdlbnQgKz0gYDsgJHtjdXN0b21BZ2VudH1gXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYCR7RElSRUNUX0xJTkVfVkVSU0lPTn0gKCR7Y2xpZW50QWdlbnR9ICR7cHJvY2Vzcy5lbnYubnBtX3BhY2thZ2VfdmVyc2lvbn0pYDtcbiAgICB9XG5cbiAgICBzZXRVc2VySWQodXNlcklkOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXR1cyQuZ2V0VmFsdWUoKSA9PT0gQ29ubmVjdGlvblN0YXR1cy5PbmxpbmUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRGlyZWN0TGluZUpTOiBJdCBpcyBjb25uZWN0ZWQsIHdlIGNhbm5vdCBzZXQgdXNlciBpZC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVzZXJJZEZyb21Ub2tlbiA9IHRoaXMucGFyc2VUb2tlbih0aGlzLnRva2VuKTtcbiAgICAgICAgaWYgKHVzZXJJZEZyb21Ub2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnNvbGUud2FybignRGlyZWN0TGluZUpTOiB1c2VyIGlkIGlzIGFscmVhZHkgc2V0IGluIHRva2VuLCB3aWxsIGlnbm9yZSB0aGlzIHVzZXIgaWQuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoL15kbF8vdS50ZXN0KHVzZXJJZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25zb2xlLndhcm4oJ0RpcmVjdExpbmVKUzogdXNlciBpZCBwcmVmaXhlZCB3aXRoIFwiZGxfXCIgaXMgcmVzZXJ2ZWQgYW5kIG11c3QgYmUgZW1iZWRkZWQgaW50byB0aGUgRGlyZWN0IExpbmUgdG9rZW4gdG8gcHJldmVudCBmb3JnZXJ5LicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51c2VySWRPblN0YXJ0Q29udmVyc2F0aW9uID0gdXNlcklkO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VUb2tlbih0b2tlbjogc3RyaW5nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IHVzZXIgfSA9IGp3dERlY29kZTxKd3RQYXlsb2FkPih0b2tlbikgYXMgeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgICAgICAgICByZXR1cm4gdXNlcjtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBJbnZhbGlkVG9rZW5FcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbn1cbiJdfQ==
800
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kaXJlY3RMaW5lLnRzIl0sIm5hbWVzIjpbIkRJUkVDVF9MSU5FX1ZFUlNJT04iLCJDb25uZWN0aW9uU3RhdHVzIiwid3JhcEFqYXhXaXRoUmV0cnkiLCJzb3VyY2UiLCJzY2hlZHVsZXIiLCJub3RJbXBsZW1lbnRlZCIsIkVycm9yIiwiaW5uZXIiLCJyZXNwb25zZSQiLCJlcnIiLCJzdGF0dXMiLCJyZXRyeUFmdGVyVmFsdWUiLCJ4aHIiLCJnZXRSZXNwb25zZUhlYWRlciIsInJldHJ5QWZ0ZXIiLCJOdW1iZXIiLCJpc05hTiIsIk9ic2VydmFibGUiLCJ0aW1lciIsImZsYXRNYXAiLCJfIiwib3V0ZXIiLCJ1cmxPclJlcXVlc3QiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXQiLCJ1cmwiLCJoZWFkZXJzIiwicG9zdCIsImJvZHkiLCJwdXQiLCJwYXRjaCIsImdldEpTT04iLCJtYWtlU2VydmljZXMiLCJzZXJ2aWNlcyIsIkFzeW5jU2NoZWR1bGVyIiwiYWpheCIsIldlYlNvY2tldCIsInJhbmRvbSIsIk1hdGgiLCJsaWZldGltZVJlZnJlc2hUb2tlbiIsImludGVydmFsUmVmcmVzaFRva2VuIiwiUE9MTElOR19JTlRFUlZBTF9MT1dFUl9CT1VORCIsImVycm9yRXhwaXJlZFRva2VuIiwiZXJyb3JDb252ZXJzYXRpb25FbmRlZCIsImVycm9yRmFpbGVkVG9Db25uZWN0Iiwia29uc29sZSIsImxvZyIsIm1lc3NhZ2UiLCJvcHRpb25hbFBhcmFtcyIsIndpbmRvdyIsImNvbnNvbGUiLCJEaXJlY3RMaW5lIiwib3B0aW9ucyIsIkJlaGF2aW9yU3ViamVjdCIsIlVuaW5pdGlhbGl6ZWQiLCJzZWNyZXQiLCJ0b2tlbiIsIndlYlNvY2tldCIsInVuZGVmaW5lZCIsImNvbnZlcnNhdGlvblN0YXJ0UHJvcGVydGllcyIsImxvY2FsZSIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsImxvY2FsZU9uU3RhcnRDb252ZXJzYXRpb24iLCJ3YXJuIiwiZG9tYWluIiwiY29udmVyc2F0aW9uSWQiLCJ3YXRlcm1hcmsiLCJzdHJlYW1VcmwiLCJ0aW1lb3V0IiwicmV0cmllcyIsIl9ib3RBZ2VudCIsImdldEJvdEFnZW50IiwiYm90QWdlbnQiLCJwYXJzZWRQb2xsaW5nSW50ZXJ2YWwiLCJwb2xsaW5nSW50ZXJ2YWwiLCJleHBpcmVkVG9rZW5FeGhhdXN0aW9uIiwic2V0Q29ubmVjdGlvblN0YXR1c0ZhbGxiYWNrIiwiRXhwaXJlZFRva2VuIiwiRmFpbGVkVG9Db25uZWN0IiwiYWN0aXZpdHkkIiwid2ViU29ja2V0QWN0aXZpdHkkIiwicG9sbGluZ0dldEFjdGl2aXR5JCIsInNoYXJlIiwib25jZSIsIm9icyIsImNvbm5lY3Rpb25TdGF0dXMkIiwiY29ubmVjdGlvblN0YXR1cyIsIm5leHQiLCJDb25uZWN0aW5nIiwiT25saW5lIiwib2YiLCJzdGFydENvbnZlcnNhdGlvbiIsImNvbnZlcnNhdGlvbiIsInJlZmVyZW5jZUdyYW1tYXJJZCIsInJlZnJlc2hUb2tlbkxvb3AiLCJlcnJvciIsIm1hcCIsImZpbHRlciIsIkVuZGVkIiwidGFrZSIsImNvbm5lY3Rpb25TdGF0dXNGcm9tIiwiY29ubmVjdGlvblN0YXR1c1RvIiwibWF4QXR0ZW1wdHMiLCJhdHRlbXB0cyIsImN1cnJTdGF0dXMiLCJnZXRWYWx1ZSIsInByb3RlY3RlZENvbm5lY3Rpb25TdGF0dXMiLCJtZXRob2QiLCJ1c2VyIiwiaWQiLCJ1c2VySWRPblN0YXJ0Q29udmVyc2F0aW9uIiwiY29tbW9uSGVhZGVycyIsImFqYXhSZXNwb25zZSIsInJlc3BvbnNlIiwicmV0cnlXaGVuIiwiZXJyb3IkIiwibWVyZ2VNYXAiLCJkZWxheSIsInRva2VuUmVmcmVzaFN1YnNjcmlwdGlvbiIsImludGVydmFsIiwicmVmcmVzaFRva2VuIiwic3Vic2NyaWJlIiwiRGF0ZSIsImNoZWNrQ29ubmVjdGlvbiIsImV4cGlyZWRUb2tlbiIsInVuc3Vic2NyaWJlIiwiZSIsIndpdGhDcmVkZW50aWFscyIsInNlc3Npb25JZCIsImNhdGNoRXhwaXJlZFRva2VuIiwiYWN0aXZpdHkiLCJmcm9tIiwidHlwZSIsImF0dGFjaG1lbnRzIiwibGVuZ3RoIiwicG9zdE1lc3NhZ2VXaXRoQXR0YWNobWVudHMiLCJjYXRjaFBvc3RFcnJvciIsImF0dGFjaG1lbnROYW1lcyIsIm1lZGlhIiwibmFtZSIsImNsZWFuc2VkQXR0YWNobWVudHMiLCJhdHRhY2htZW50IiwiaW5kZXgiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwiYXBwZW5kIiwiQmxvYiIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdHJpbmciLCJjb250ZW50VXJsIiwib3RoZXJzIiwicmVzcG9uc2VUeXBlIiwiY29udGVudFR5cGUiLCJjb3VudCIsInBvbGxlciQiLCJjcmVhdGUiLCJzdWJzY3JpYmVyIiwidHJpZ2dlciQiLCJzdGFydFRpbWVzdGFtcCIsIm5vdyIsIkFjY2VwdCIsInJlc3VsdCIsInNldFRpbWVvdXQiLCJtYXgiLCJlbXB0eSIsImFjdGl2aXR5R3JvdXAiLCJvYnNlcnZhYmxlRnJvbUFjdGl2aXR5R3JvdXAiLCJhY3Rpdml0aWVzIiwib2JzZXJ2YWJsZVdlYlNvY2tldCIsImdldFJldHJ5RGVsYXkiLCJyZWNvbm5lY3RUb0NvbnZlcnNhdGlvbiIsImZsb29yIiwid3MiLCJzdWIiLCJjbG9zZWQiLCJvbm9wZW4iLCJvcGVuIiwic2VuZCIsIm9uY2xvc2UiLCJjbG9zZSIsIm9uZXJyb3IiLCJvbm1lc3NhZ2UiLCJkYXRhIiwicGFyc2UiLCJyZWFkeVN0YXRlIiwiY3VzdG9tQWdlbnQiLCJjbGllbnRBZ2VudCIsInVzZXJJZCIsInVzZXJJZEZyb21Ub2tlbiIsInBhcnNlVG9rZW4iLCJ0ZXN0IiwiSW52YWxpZFRva2VuRXJyb3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFD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QUNIOzs7V0FFRCxtQkFBVUMsTUFBVixFQUEwQjtBQUN0QixVQUFJLEtBQUt2RyxpQkFBTCxDQUF1Qm9CLFFBQXZCLE9BQXNDM0csZ0JBQWdCLENBQUMyRixNQUEzRCxFQUFtRTtBQUMvRCxjQUFNLElBQUl0RixLQUFKLENBQVUsdURBQVYsQ0FBTjtBQUNIOztBQUVELFVBQU0wTCxlQUFlLEdBQUcsS0FBS0MsVUFBTCxDQUFnQixLQUFLeEksS0FBckIsQ0FBeEI7O0FBQ0EsVUFBSXVJLGVBQUosRUFBcUI7QUFDakIsZUFBTzdJLE9BQU8sQ0FBQ2UsSUFBUixDQUFhLDBFQUFiLENBQVA7QUFDSDs7QUFFRCxVQUFJLE9BQVFnSSxJQUFSLENBQWFILE1BQWIsQ0FBSixFQUEwQjtBQUN0QixlQUFPNUksT0FBTyxDQUFDZSxJQUFSLENBQWEsMkhBQWIsQ0FBUDtBQUNIOztBQUVELFdBQUsrQyx5QkFBTCxHQUFpQzhFLE1BQWpDO0FBQ0g7OztXQUVELG9CQUFtQnRJLEtBQW5CLEVBQWtDO0FBQzlCLFVBQUk7QUFDQSxvQkFBaUIsMkJBQXNCQSxLQUF0QixDQUFqQjtBQUFBLFlBQVFzRCxJQUFSLFNBQVFBLElBQVI7O0FBQ0EsZUFBT0EsSUFBUDtBQUNILE9BSEQsQ0FHRSxPQUFPa0IsQ0FBUCxFQUFVO0FBQ1IsWUFBSUEsQ0FBQyxZQUFZa0UsNEJBQWpCLEVBQW9DO0FBQ2hDLGlCQUFPeEksU0FBUDtBQUNIO0FBQ0o7QUFDSiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEluIG9yZGVyIHRvIGtlZXAgZmlsZSBzaXplIGRvd24sIG9ubHkgaW1wb3J0IHRoZSBwYXJ0cyBvZiByeGpzIHRoYXQgd2UgdXNlXG5cbmltcG9ydCAnY29yZS1qcy9mZWF0dXJlcy9wcm9taXNlJztcbmltcG9ydCAndXJsLXNlYXJjaC1wYXJhbXMtcG9seWZpbGwnO1xuaW1wb3J0IHsgQWpheFJlc3BvbnNlLCBBamF4Q3JlYXRpb25NZXRob2QsIEFqYXhSZXF1ZXN0LCBBamF4RXJyb3IgfSBmcm9tICdyeGpzL29ic2VydmFibGUvZG9tL0FqYXhPYnNlcnZhYmxlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMvQmVoYXZpb3JTdWJqZWN0JztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzL09ic2VydmFibGUnO1xuaW1wb3J0IHsgSVNjaGVkdWxlciB9IGZyb20gJ3J4anMvU2NoZWR1bGVyJztcbmltcG9ydCB7IFN1YnNjcmliZXIgfSBmcm9tICdyeGpzL1N1YnNjcmliZXInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcy9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgYXN5bmMgYXMgQXN5bmNTY2hlZHVsZXIgfSBmcm9tICdyeGpzL3NjaGVkdWxlci9hc3luYyc7XG5pbXBvcnQgand0RGVjb2RlLCB7IEp3dFBheWxvYWQsIEludmFsaWRUb2tlbkVycm9yIH0gZnJvbSAnand0LWRlY29kZSc7XG5cbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvY2F0Y2gnO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9jb21iaW5lTGF0ZXN0JztcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvY291bnQnO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9kZWxheSc7XG5pbXBvcnQgJ3J4anMvYWRkL29wZXJhdG9yL2RvJztcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvZmlsdGVyJztcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvbWFwJztcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvbWVyZ2VNYXAnO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9jb25jYXRNYXAnO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9yZXRyeVdoZW4nO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9zaGFyZSc7XG5pbXBvcnQgJ3J4anMvYWRkL29wZXJhdG9yL3Rha2UnO1xuXG5pbXBvcnQgJ3J4anMvYWRkL29ic2VydmFibGUvZG9tL2FqYXgnO1xuaW1wb3J0ICdyeGpzL2FkZC9vYnNlcnZhYmxlL2VtcHR5JztcbmltcG9ydCAncnhqcy9hZGQvb2JzZXJ2YWJsZS9mcm9tJztcbmltcG9ydCAncnhqcy9hZGQvb2JzZXJ2YWJsZS9pbnRlcnZhbCc7XG5pbXBvcnQgJ3J4anMvYWRkL29ic2VydmFibGUvb2YnO1xuaW1wb3J0ICdyeGpzL2FkZC9vYnNlcnZhYmxlL3Rocm93JztcblxuaW1wb3J0IGRlZHVwZUZpbGVuYW1lcyBmcm9tICcuL2RlZHVwZUZpbGVuYW1lcyc7XG5pbXBvcnQgeyBvYmplY3RFeHByZXNzaW9uIH0gZnJvbSAnQGJhYmVsL3R5cGVzJztcblxuaW1wb3J0IHsgRGlyZWN0TGluZVN0cmVhbWluZyB9IGZyb20gJy4vZGlyZWN0TGluZVN0cmVhbWluZyc7XG5leHBvcnQgeyBEaXJlY3RMaW5lU3RyZWFtaW5nIH07XG5cbmNvbnN0IERJUkVDVF9MSU5FX1ZFUlNJT04gPSAnRGlyZWN0TGluZS8zLjAnO1xuXG5kZWNsYXJlIHZhciBwcm9jZXNzOiB7XG4gICAgYXJjaDogc3RyaW5nO1xuICAgIGVudjoge1xuICAgICAgICBWRVJTSU9OOiBzdHJpbmc7XG4gICAgICAgIG5wbV9wYWNrYWdlX3ZlcnNpb246IHN0cmluZztcbiAgICB9O1xuICAgIHBsYXRmb3JtOiBzdHJpbmc7XG4gICAgcmVsZWFzZTogc3RyaW5nO1xuICAgIHZlcnNpb246IHN0cmluZztcbn07XG5cbi8vIERpcmVjdCBMaW5lIDMuMCB0eXBlc1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnZlcnNhdGlvbiB7XG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZyxcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIGVUYWc/OiBzdHJpbmcsXG4gICAgc3RyZWFtVXJsPzogc3RyaW5nLFxuICAgIHJlZmVyZW5jZUdyYW1tYXJJZD86IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBNZWRpYVR5cGUgPSBcImltYWdlL3BuZ1wiIHwgXCJpbWFnZS9qcGdcIiB8IFwiaW1hZ2UvanBlZ1wiIHwgXCJpbWFnZS9naWZcIiB8IFwiaW1hZ2Uvc3ZnK3htbFwiIHwgXCJhdWRpby9tcGVnXCIgfCBcImF1ZGlvL21wNFwiIHwgXCJ2aWRlby9tcDRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBNZWRpYSB7XG4gICAgY29udGVudFR5cGU6IE1lZGlhVHlwZSxcbiAgICBjb250ZW50VXJsOiBzdHJpbmcsXG4gICAgbmFtZT86IHN0cmluZyxcbiAgICB0aHVtYm5haWxVcmw/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbmtub3duTWVkaWF7XG4gICAgY29udGVudFR5cGU6IHN0cmluZyxcbiAgICBjb250ZW50VXJsOiBzdHJpbmcsXG4gICAgbmFtZT86IHN0cmluZyxcbiAgICB0aHVtYm5haWxVcmw/OiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgQ2FyZEFjdGlvblR5cGVzID0gXCJjYWxsXCIgfCBcImRvd25sb2FkRmlsZVwifCBcImltQmFja1wiIHwgXCJtZXNzYWdlQmFja1wiIHwgXCJvcGVuVXJsXCIgfCBcInBsYXlBdWRpb1wiIHwgXCJwbGF5VmlkZW9cIiB8IFwicG9zdEJhY2tcIiB8IFwic2lnbmluXCIgfCBcInNob3dJbWFnZVwiO1xuXG5leHBvcnQgdHlwZSBDYXJkQWN0aW9uID0gQ2FsbENhcmRBY3Rpb24gfCBEb3dubG9hZEZpbGVDYXJkQWN0aW9uIHwgSU1CYWNrQ2FyZEFjdGlvbiB8IE1lc3NhZ2VCYWNrQ2FyZEFjdGlvbiB8IE9wZW5VUkxDYXJkQWN0aW9uIHwgUGxheUF1ZGlvQ2FyZEFjdGlvbiB8IFBsYXlWaWRlb0NhcmRBY3Rpb24gfCBQb3N0QmFja0NhcmRBY3Rpb24gfCBTaWduSW5DYXJkQWN0aW9uIHwgU2hvd0ltYWdlQ2FyZEFjdGlvbjtcblxuZXhwb3J0IGludGVyZmFjZSBDYWxsQ2FyZEFjdGlvbiB7XG4gICAgaW1hZ2U/OiBzdHJpbmcsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0eXBlOiBcImNhbGxcIixcbiAgICB2YWx1ZTogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG93bmxvYWRGaWxlQ2FyZEFjdGlvbiB7XG4gICAgaW1hZ2U/OiBzdHJpbmcsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0eXBlOiBcImRvd25sb2FkRmlsZVwiLFxuICAgIHZhbHVlOiBhbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTUJhY2tDYXJkQWN0aW9uIHtcbiAgICBpbWFnZT86IHN0cmluZyxcbiAgICB0aXRsZT86IHN0cmluZyxcbiAgICB0eXBlOiBcImltQmFja1wiLFxuICAgIHZhbHVlOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgTWVzc2FnZUJhY2tDYXJkQWN0aW9uID0gTWVzc2FnZUJhY2tXaXRoSW1hZ2UgfCBNZXNzYWdlQmFja1dpdGhUaXRsZVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VCYWNrV2l0aEltYWdlIHtcbiAgICBkaXNwbGF5VGV4dD86IHN0cmluZyxcbiAgICBpbWFnZTogc3RyaW5nLFxuICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgdHlwZTogXCJtZXNzYWdlQmFja1wiLFxuICAgIHZhbHVlPzogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZUJhY2tXaXRoVGl0bGUge1xuICAgIGRpc3BsYXlUZXh0Pzogc3RyaW5nLFxuICAgIGltYWdlPzogc3RyaW5nLFxuICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0eXBlOiBcIm1lc3NhZ2VCYWNrXCIsXG4gICAgdmFsdWU/OiBhbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuVVJMQ2FyZEFjdGlvbiB7XG4gICAgaW1hZ2U/OiBzdHJpbmcsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0eXBlOiBcIm9wZW5VcmxcIixcbiAgICB2YWx1ZTogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxheUF1ZGlvQ2FyZEFjdGlvbiB7XG4gICAgaW1hZ2U/OiBzdHJpbmcsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0eXBlOiBcInBsYXlBdWRpb1wiLFxuICAgIHZhbHVlOiBhbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbGF5VmlkZW9DYXJkQWN0aW9uIHtcbiAgICBpbWFnZT86IHN0cmluZyxcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIHR5cGU6IFwicGxheVZpZGVvXCIsXG4gICAgdmFsdWU6IGFueVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvc3RCYWNrQ2FyZEFjdGlvbiB7XG4gICAgaW1hZ2U/OiBzdHJpbmcsXG4gICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgdHlwZTogXCJwb3N0QmFja1wiLFxuICAgIHZhbHVlOiBhbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaG93SW1hZ2VDYXJkQWN0aW9uIHtcbiAgICBpbWFnZT86IHN0cmluZyxcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIHR5cGU6IFwic2hvd0ltYWdlXCIsXG4gICAgdmFsdWU6IGFueVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25JbkNhcmRBY3Rpb24ge1xuICAgIGltYWdlPzogc3RyaW5nLFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgdHlwZTogXCJzaWduaW5cIixcbiAgICB2YWx1ZTogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FyZEltYWdlIHtcbiAgICBhbHQ/OiBzdHJpbmcsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgdGFwPzogQ2FyZEFjdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhlcm9DYXJkIHtcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmNhcmQuaGVyb1wiLFxuICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIHN1YnRpdGxlPzogc3RyaW5nLFxuICAgICAgICB0ZXh0Pzogc3RyaW5nLFxuICAgICAgICBpbWFnZXM/OiBDYXJkSW1hZ2VbXSxcbiAgICAgICAgYnV0dG9ucz86IENhcmRBY3Rpb25bXSxcbiAgICAgICAgdGFwPzogQ2FyZEFjdGlvblxuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBUaHVtYm5haWwge1xuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC50aHVtYm5haWxcIixcbiAgICBjb250ZW50OiB7XG4gICAgICAgIHRpdGxlPzogc3RyaW5nLFxuICAgICAgICBzdWJ0aXRsZT86IHN0cmluZyxcbiAgICAgICAgdGV4dD86IHN0cmluZyxcbiAgICAgICAgaW1hZ2VzPzogQ2FyZEltYWdlW10sXG4gICAgICAgIGJ1dHRvbnM/OiBDYXJkQWN0aW9uW10sXG4gICAgICAgIHRhcD86IENhcmRBY3Rpb25cbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmluIHtcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmNhcmQuc2lnbmluXCIsXG4gICAgY29udGVudDoge1xuICAgICAgICB0ZXh0Pzogc3RyaW5nLFxuICAgICAgICBidXR0b25zPzogQ2FyZEFjdGlvbltdXG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9BdXRoIHtcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmNhcmQub2F1dGhcIixcbiAgICBjb250ZW50OiB7XG4gICAgICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgICAgIGNvbm5lY3Rpb25uYW1lOiBzdHJpbmcsXG4gICAgICAgIGJ1dHRvbnM/OiBDYXJkQWN0aW9uW11cbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjZWlwdEl0ZW0ge1xuICAgIHRpdGxlPzogc3RyaW5nLFxuICAgIHN1YnRpdGxlPzogc3RyaW5nLFxuICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgaW1hZ2U/OiBDYXJkSW1hZ2UsXG4gICAgcHJpY2U/OiBzdHJpbmcsXG4gICAgcXVhbnRpdHk/OiBzdHJpbmcsXG4gICAgdGFwPzogQ2FyZEFjdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY2VpcHQge1xuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC5yZWNlaXB0XCIsXG4gICAgY29udGVudDoge1xuICAgICAgICB0aXRsZT86IHN0cmluZyxcbiAgICAgICAgZmFjdHM/OiB7IGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH1bXSxcbiAgICAgICAgaXRlbXM/OiBSZWNlaXB0SXRlbVtdLFxuICAgICAgICB0YXA/OiBDYXJkQWN0aW9uLFxuICAgICAgICB0YXg/OiBzdHJpbmcsXG4gICAgICAgIHZhdD86IHN0cmluZyxcbiAgICAgICAgdG90YWw/OiBzdHJpbmcsXG4gICAgICAgIGJ1dHRvbnM/OiBDYXJkQWN0aW9uW11cbiAgICB9XG59XG5cbi8vIERlcHJlY2F0ZWQgZm9ybWF0IGZvciBTa3lwZSBjaGFubmVscy4gRm9yIHRlc3RpbmcgbGVnYWN5IGJvdHMgaW4gRW11bGF0b3Igb25seS5cbmV4cG9ydCBpbnRlcmZhY2UgRmxleENhcmQge1xuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC5mbGV4XCIsXG4gICAgY29udGVudDoge1xuICAgICAgICB0aXRsZT86IHN0cmluZyxcbiAgICAgICAgc3VidGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgICAgIGltYWdlcz86IENhcmRJbWFnZVtdLFxuICAgICAgICBidXR0b25zPzogQ2FyZEFjdGlvbltdLFxuICAgICAgICBhc3BlY3Q/OiBzdHJpbmdcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9DYXJkIHtcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmNhcmQuYXVkaW9cIixcbiAgICBjb250ZW50OiB7XG4gICAgICAgIHRpdGxlPzogc3RyaW5nLFxuICAgICAgICBzdWJ0aXRsZT86IHN0cmluZyxcbiAgICAgICAgdGV4dD86IHN0cmluZyxcbiAgICAgICAgbWVkaWE/OiB7IHVybDogc3RyaW5nLCBwcm9maWxlPzogc3RyaW5nIH1bXSxcbiAgICAgICAgYnV0dG9ucz86IENhcmRBY3Rpb25bXSxcbiAgICAgICAgYXV0b2xvb3A/OiBib29sZWFuLFxuICAgICAgICBhdXRvc3RhcnQ/OiBib29sZWFuXG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvQ2FyZCB7XG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vdm5kLm1pY3Jvc29mdC5jYXJkLnZpZGVvXCIsXG4gICAgY29udGVudDoge1xuICAgICAgICB0aXRsZT86IHN0cmluZyxcbiAgICAgICAgc3VidGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgICAgIG1lZGlhPzogeyB1cmw6IHN0cmluZywgcHJvZmlsZT86IHN0cmluZyB9W10sXG4gICAgICAgIGJ1dHRvbnM/OiBDYXJkQWN0aW9uW10sXG4gICAgICAgIGltYWdlPzogeyB1cmw6IHN0cmluZywgYWx0Pzogc3RyaW5nIH0sXG4gICAgICAgIGF1dG9sb29wPzogYm9vbGVhbixcbiAgICAgICAgYXV0b3N0YXJ0PzogYm9vbGVhblxuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGl2ZUNhcmQge1xuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC5hZGFwdGl2ZVwiLFxuICAgIGNvbnRlbnQ6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbmltYXRpb25DYXJkIHtcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmNhcmQuYW5pbWF0aW9uXCIsXG4gICAgY29udGVudDoge1xuICAgICAgICB0aXRsZT86IHN0cmluZyxcbiAgICAgICAgc3VidGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgICAgIG1lZGlhPzogeyB1cmw6IHN0cmluZywgcHJvZmlsZT86IHN0cmluZyB9W10sXG4gICAgICAgIGJ1dHRvbnM/OiBDYXJkQWN0aW9uW10sXG4gICAgICAgIGltYWdlPzogeyB1cmw6IHN0cmluZywgYWx0Pzogc3RyaW5nIH0sXG4gICAgICAgIGF1dG9sb29wPzogYm9vbGVhbixcbiAgICAgICAgYXV0b3N0YXJ0PzogYm9vbGVhblxuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgS25vd25NZWRpYSA9IE1lZGlhIHwgSGVyb0NhcmQgfCBUaHVtYm5haWwgfCBTaWduaW4gfCBPQXV0aCB8IFJlY2VpcHQgfCBBdWRpb0NhcmQgfCBWaWRlb0NhcmQgfCBBbmltYXRpb25DYXJkIHwgRmxleENhcmQgfCBBZGFwdGl2ZUNhcmQ7XG5leHBvcnQgdHlwZSBBdHRhY2htZW50ID0gS25vd25NZWRpYSB8IFVua25vd25NZWRpYTtcblxuZXhwb3J0IHR5cGUgVXNlclJvbGUgPSBcImJvdFwiIHwgXCJjaGFubmVsXCIgfCBcInVzZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBVc2VyIHtcbiAgICBpZDogc3RyaW5nLFxuICAgIG5hbWU/OiBzdHJpbmcsXG4gICAgaWNvblVybD86IHN0cmluZyxcbiAgICByb2xlPzogVXNlclJvbGVcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQWN0aXZpdHkge1xuICAgIHR5cGU6IHN0cmluZyxcbiAgICBjaGFubmVsRGF0YT86IGFueSxcbiAgICBjaGFubmVsSWQ/OiBzdHJpbmcsXG4gICAgY29udmVyc2F0aW9uPzogeyBpZDogc3RyaW5nIH0sXG4gICAgZVRhZz86IHN0cmluZyxcbiAgICBmcm9tOiBVc2VyLFxuICAgIGlkPzogc3RyaW5nLFxuICAgIHRpbWVzdGFtcD86IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBBdHRhY2htZW50TGF5b3V0ID0gXCJsaXN0XCIgfCBcImNhcm91c2VsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZSBleHRlbmRzIElBY3Rpdml0eSB7XG4gICAgdHlwZTogXCJtZXNzYWdlXCIsXG4gICAgdGV4dD86IHN0cmluZyxcbiAgICBsb2NhbGU/OiBzdHJpbmcsXG4gICAgdGV4dEZvcm1hdD86IFwicGxhaW5cIiB8IFwibWFya2Rvd25cIiB8IFwieG1sXCIsXG4gICAgYXR0YWNobWVudExheW91dD86IEF0dGFjaG1lbnRMYXlvdXQsXG4gICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50W10sXG4gICAgZW50aXRpZXM/OiBhbnlbXSxcbiAgICBzdWdnZXN0ZWRBY3Rpb25zPzogeyBhY3Rpb25zOiBDYXJkQWN0aW9uW10sIHRvPzogc3RyaW5nW10gfSxcbiAgICBzcGVhaz86IHN0cmluZyxcbiAgICBpbnB1dEhpbnQ/OiBzdHJpbmcsXG4gICAgdmFsdWU/OiBvYmplY3Rcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBpbmcgZXh0ZW5kcyBJQWN0aXZpdHkge1xuICAgIHR5cGU6IFwidHlwaW5nXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdmVudEFjdGl2aXR5IGV4dGVuZHMgSUFjdGl2aXR5IHtcbiAgICB0eXBlOiBcImV2ZW50XCIsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnlcbn1cblxuZXhwb3J0IHR5cGUgQWN0aXZpdHkgPSBNZXNzYWdlIHwgVHlwaW5nIHwgRXZlbnRBY3Rpdml0eTtcblxuZXhwb3J0IGludGVyZmFjZSBBY3Rpdml0eUdyb3VwIHtcbiAgICBhY3Rpdml0aWVzOiBBY3Rpdml0eVtdLFxuICAgIHdhdGVybWFyazogc3RyaW5nXG59XG5cbi8vIFRoZXNlIHR5cGVzIGFyZSBzcGVjaWZpYyB0byB0aGlzIGNsaWVudCBsaWJyYXJ5LCBub3QgdG8gRGlyZWN0IExpbmUgMy4wXG5cbmV4cG9ydCBlbnVtIENvbm5lY3Rpb25TdGF0dXMge1xuICAgIFVuaW5pdGlhbGl6ZWQsICAgICAgICAgICAgICAvLyB0aGUgc3RhdHVzIHdoZW4gdGhlIERpcmVjdExpbmUgb2JqZWN0IGlzIGZpcnN0IGNyZWF0ZWQvY29uc3RydWN0ZWRcbiAgICBDb25uZWN0aW5nLCAgICAgICAgICAgICAgICAgLy8gY3VycmVudGx5IHRyeWluZyB0byBjb25uZWN0IHRvIHRoZSBjb252ZXJzYXRpb25cbiAgICBPbmxpbmUsICAgICAgICAgICAgICAgICAgICAgLy8gc3VjY2Vzc2Z1bGx5IGNvbm5lY3RlZCB0byB0aGUgY29udmVyc2F0aW9uLiBDb25uZWN0aW9uIGlzIGhlYWx0aHkgc28gZmFyIGFzIHdlIGtub3cuXG4gICAgRXhwaXJlZFRva2VuLCAgICAgICAgICAgICAgIC8vIGxhc3Qgb3BlcmF0aW9uIGVycm9yZWQgb3V0IHdpdGggYW4gZXhwaXJlZCB0b2tlbi4gUG9zc2libHkgd2FpdGluZyBmb3Igc29tZW9uZSB0byBzdXBwbHkgYSBuZXcgb25lLlxuICAgIEZhaWxlZFRvQ29ubmVjdCwgICAgICAgICAgICAvLyB0aGUgaW5pdGlhbCBhdHRlbXB0IHRvIGNvbm5lY3QgdG8gdGhlIGNvbnZlcnNhdGlvbiBmYWlsZWQuIE5vIHJlY292ZXJ5IHBvc3NpYmxlLlxuICAgIEVuZGVkICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYm90IGVuZGVkIHRoZSBjb252ZXJzYXRpb25cbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXJlY3RMaW5lT3B0aW9ucyB7XG4gICAgc2VjcmV0Pzogc3RyaW5nLFxuICAgIHRva2VuPzogc3RyaW5nLFxuICAgIGNvbnZlcnNhdGlvbklkPzogc3RyaW5nLFxuICAgIHdhdGVybWFyaz86IHN0cmluZyxcbiAgICBkb21haW4/OiBzdHJpbmcsXG4gICAgd2ViU29ja2V0PzogYm9vbGVhbixcbiAgICBwb2xsaW5nSW50ZXJ2YWw/OiBudW1iZXIsXG4gICAgc3RyZWFtVXJsPzogc3RyaW5nLFxuICAgIHRpbWVvdXQ/OiBudW1iZXIsXG4gICAgLy8gQXR0YWNoZWQgdG8gYWxsIHJlcXVlc3RzIHRvIGlkZW50aWZ5IHJlcXVlc3RpbmcgYWdlbnQuXG4gICAgYm90QWdlbnQ/OiBzdHJpbmcsXG4gICAgY29udmVyc2F0aW9uU3RhcnRQcm9wZXJ0aWVzPzogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZXMge1xuICAgIHNjaGVkdWxlcjogSVNjaGVkdWxlcjtcbiAgICBXZWJTb2NrZXQ6IHR5cGVvZiBXZWJTb2NrZXQ7XG4gICAgYWpheDogQWpheENyZWF0aW9uTWV0aG9kO1xuICAgIHJhbmRvbTogKCkgPT4gbnVtYmVyO1xufVxuXG5jb25zdCB3cmFwQWpheFdpdGhSZXRyeSA9IChzb3VyY2U6IEFqYXhDcmVhdGlvbk1ldGhvZCwgc2NoZWR1bGVyOiBJU2NoZWR1bGVyKTogQWpheENyZWF0aW9uTWV0aG9kID0+e1xuXG4gICAgY29uc3Qgbm90SW1wbGVtZW50ZWQgPSAoKTogbmV2ZXIgPT4geyB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpOyB9O1xuXG4gICAgY29uc3QgaW5uZXIgPSAocmVzcG9uc2UkIDogT2JzZXJ2YWJsZTxBamF4UmVzcG9uc2U+KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZSRcbiAgICAgICAgLmNhdGNoPEFqYXhSZXNwb25zZSwgQWpheFJlc3BvbnNlPigoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZihlcnIuc3RhdHVzID09PSA0Mjkpe1xuICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXJWYWx1ZSA9IGVyci54aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ1JldHJ5LUFmdGVyJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmV0cnlBZnRlciA9IE51bWJlcihyZXRyeUFmdGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmKCFpc05hTihyZXRyeUFmdGVyKSl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYnNlcnZhYmxlLnRpbWVyKHJldHJ5QWZ0ZXIsIHNjaGVkdWxlcilcbiAgICAgICAgICAgICAgICAgICAgLmZsYXRNYXAoXyA9PiBPYnNlcnZhYmxlLnRocm93KGVyciwgc2NoZWR1bGVyKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aHJvdyhlcnIsIHNjaGVkdWxlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBvdXRlciA9ICh1cmxPclJlcXVlc3Q6IHN0cmluZ3wgQWpheFJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGlubmVyKHNvdXJjZSh1cmxPclJlcXVlc3QpKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ob3V0ZXIsIHtcbiAgICAgICAgZ2V0OiAodXJsOiBzdHJpbmcsIGhlYWRlcnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4gPT4gbm90SW1wbGVtZW50ZWQoKSxcbiAgICAgICAgcG9zdDogKHVybDogc3RyaW5nLCBib2R5PzogYW55LCBoZWFkZXJzPzogT2JqZWN0KTogT2JzZXJ2YWJsZTxBamF4UmVzcG9uc2U+ID0+IG5vdEltcGxlbWVudGVkKCksXG4gICAgICAgIHB1dDogKHVybDogc3RyaW5nLCBib2R5PzogYW55LCBoZWFkZXJzPzogT2JqZWN0KTogT2JzZXJ2YWJsZTxBamF4UmVzcG9uc2U+ID0+IG5vdEltcGxlbWVudGVkKCksXG4gICAgICAgIHBhdGNoOiAodXJsOiBzdHJpbmcsIGJvZHk/OiBhbnksIGhlYWRlcnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4gPT4gbm90SW1wbGVtZW50ZWQoKSxcbiAgICAgICAgZGVsZXRlOiAodXJsOiBzdHJpbmcsIGhlYWRlcnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4gPT4gbm90SW1wbGVtZW50ZWQoKSxcbiAgICAgICAgZ2V0SlNPTjogPFQ+KHVybDogc3RyaW5nLCBoZWFkZXJzPzogT2JqZWN0KTogT2JzZXJ2YWJsZTxUPiA9PiBub3RJbXBsZW1lbnRlZCgpXG4gICAgfSk7XG59XG5cbmNvbnN0IG1ha2VTZXJ2aWNlcyA9IChzZXJ2aWNlczogUGFydGlhbDxTZXJ2aWNlcz4pOiBTZXJ2aWNlcyA9PiB7XG4gICAgY29uc3Qgc2NoZWR1bGVyID0gc2VydmljZXMuc2NoZWR1bGVyIHx8IEFzeW5jU2NoZWR1bGVyO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNjaGVkdWxlcixcbiAgICAgICAgYWpheDogd3JhcEFqYXhXaXRoUmV0cnkoc2VydmljZXMuYWpheCB8fCBPYnNlcnZhYmxlLmFqYXgsIHNjaGVkdWxlciksXG4gICAgICAgIFdlYlNvY2tldDogc2VydmljZXMuV2ViU29ja2V0IHx8IFdlYlNvY2tldCxcbiAgICAgICAgcmFuZG9tOiBzZXJ2aWNlcy5yYW5kb20gfHwgTWF0aC5yYW5kb20sXG4gICAgfVxufVxuXG5jb25zdCBsaWZldGltZVJlZnJlc2hUb2tlbiA9IDMwICogNjAgKiAxMDAwO1xuY29uc3QgaW50ZXJ2YWxSZWZyZXNoVG9rZW4gPSBsaWZldGltZVJlZnJlc2hUb2tlbiAvIDI7XG5cbmNvbnN0IFBPTExJTkdfSU5URVJWQUxfTE9XRVJfQk9VTkQ6IG51bWJlciA9IDIwMDsgLy9tc1xuXG5jb25zdCBlcnJvckV4cGlyZWRUb2tlbiA9IG5ldyBFcnJvcihcImV4cGlyZWQgdG9rZW5cIik7XG5jb25zdCBlcnJvckNvbnZlcnNhdGlvbkVuZGVkID0gbmV3IEVycm9yKFwiY29udmVyc2F0aW9uIGVuZGVkXCIpO1xuY29uc3QgZXJyb3JGYWlsZWRUb0Nvbm5lY3QgPSBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gY29ubmVjdFwiKTtcblxuY29uc3Qga29uc29sZSA9IHtcbiAgICBsb2c6IChtZXNzYWdlPzogYW55LCAuLi4gb3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAod2luZG93IGFzIGFueSlbXCJib3RjaGF0RGVidWdcIl0gJiYgbWVzc2FnZSlcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UsIC4uLiBvcHRpb25hbFBhcmFtcyk7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElCb3RDb25uZWN0aW9uIHtcbiAgICBjb25uZWN0aW9uU3RhdHVzJDogQmVoYXZpb3JTdWJqZWN0PENvbm5lY3Rpb25TdGF0dXM+LFxuICAgIGFjdGl2aXR5JDogT2JzZXJ2YWJsZTxBY3Rpdml0eT4sXG4gICAgZW5kKCk6IHZvaWQsXG4gICAgcmVmZXJlbmNlR3JhbW1hcklkPzogc3RyaW5nLFxuICAgIHBvc3RBY3Rpdml0eShhY3Rpdml0eTogQWN0aXZpdHkpOiBPYnNlcnZhYmxlPHN0cmluZz4sXG4gICAgZ2V0U2Vzc2lvbklkPyA6ICgpID0+IE9ic2VydmFibGU8c3RyaW5nPlxufVxuXG5leHBvcnQgY2xhc3MgRGlyZWN0TGluZSBpbXBsZW1lbnRzIElCb3RDb25uZWN0aW9uIHtcbiAgICBwdWJsaWMgY29ubmVjdGlvblN0YXR1cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KENvbm5lY3Rpb25TdGF0dXMuVW5pbml0aWFsaXplZCk7XG4gICAgcHVibGljIGFjdGl2aXR5JDogT2JzZXJ2YWJsZTxBY3Rpdml0eT47XG5cbiAgICBwcml2YXRlIGRvbWFpbiA9IFwiaHR0cHM6Ly9kaXJlY3RsaW5lLmJvdGZyYW1ld29yay5jb20vdjMvZGlyZWN0bGluZVwiO1xuICAgIHByaXZhdGUgd2ViU29ja2V0OiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuICAgIHByaXZhdGUgZXhwaXJlZFRva2VuRXhoYXVzdGlvbjogRnVuY3Rpb247XG4gICAgcHJpdmF0ZSBzZWNyZXQ6IHN0cmluZztcbiAgICBwcml2YXRlIHRva2VuOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSB3YXRlcm1hcmsgPSAnJztcbiAgICBwcml2YXRlIHN0cmVhbVVybDogc3RyaW5nO1xuICAgIHByaXZhdGUgX2JvdEFnZW50ID0gJyc7XG4gICAgcHJpdmF0ZSBzZXJ2aWNlczogU2VydmljZXM7XG4gICAgcHJpdmF0ZSBfdXNlckFnZW50OiBzdHJpbmc7XG4gICAgcHVibGljIHJlZmVyZW5jZUdyYW1tYXJJZDogc3RyaW5nO1xuICAgIHByaXZhdGUgdGltZW91dCA9IDIwICogMTAwMDtcbiAgICBwcml2YXRlIHJldHJpZXM6IG51bWJlcjtcblxuICAgIHByaXZhdGUgbG9jYWxlT25TdGFydENvbnZlcnNhdGlvbjogc3RyaW5nO1xuICAgIHByaXZhdGUgdXNlcklkT25TdGFydENvbnZlcnNhdGlvbjogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBwb2xsaW5nSW50ZXJ2YWw6IG51bWJlciA9IDEwMDA7IC8vbXNcblxuICAgIHByaXZhdGUgdG9rZW5SZWZyZXNoU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBEaXJlY3RMaW5lT3B0aW9ucyAmIFBhcnRpYWw8U2VydmljZXM+KSB7XG4gICAgICAgIHRoaXMuc2VjcmV0ID0gb3B0aW9ucy5zZWNyZXQ7XG4gICAgICAgIHRoaXMudG9rZW4gPSBvcHRpb25zLnNlY3JldCB8fCBvcHRpb25zLnRva2VuO1xuICAgICAgICB0aGlzLndlYlNvY2tldCA9IChvcHRpb25zLndlYlNvY2tldCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdGlvbnMud2ViU29ja2V0KSAmJiB0eXBlb2YgV2ViU29ja2V0ICE9PSAndW5kZWZpbmVkJyAmJiBXZWJTb2NrZXQgIT09IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAob3B0aW9ucy5jb252ZXJzYXRpb25TdGFydFByb3BlcnRpZXMgJiYgb3B0aW9ucy5jb252ZXJzYXRpb25TdGFydFByb3BlcnRpZXMubG9jYWxlKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9wdGlvbnMuY29udmVyc2F0aW9uU3RhcnRQcm9wZXJ0aWVzLmxvY2FsZSkgPT09ICdbb2JqZWN0IFN0cmluZ10nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbGVPblN0YXJ0Q29udmVyc2F0aW9uID0gb3B0aW9ucy5jb252ZXJzYXRpb25TdGFydFByb3BlcnRpZXMubG9jYWxlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0RpcmVjdExpbmVKUzogY29udmVyc2F0aW9uU3RhcnRQcm9wZXJ0aWVzLmxvY2FsZSB3YXMgaWdub3JlZDogdGhlIGxvY2FsZSBuYW1lIG1heSBiZSBhIEJDUCA0NyBsYW5ndWFnZSB0YWcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmRvbWFpbikge1xuICAgICAgICAgICAgdGhpcy5kb21haW4gPSBvcHRpb25zLmRvbWFpbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmNvbnZlcnNhdGlvbklkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbklkID0gb3B0aW9ucy5jb252ZXJzYXRpb25JZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLndhdGVybWFyaykge1xuICAgICAgICAgICAgdGhpcy53YXRlcm1hcmsgPSAgb3B0aW9ucy53YXRlcm1hcms7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5zdHJlYW1VcmwpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnRva2VuICYmIG9wdGlvbnMuY29udmVyc2F0aW9uSWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbVVybCA9IG9wdGlvbnMuc3RyZWFtVXJsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0RpcmVjdExpbmVKUzogc3RyZWFtVXJsIHdhcyBpZ25vcmVkOiB5b3UgbmVlZCB0byBwcm92aWRlIGEgdG9rZW4gYW5kIGEgY29udmVyc2F0aW9uaWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy50aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXRyaWVzID0gKGxpZmV0aW1lUmVmcmVzaFRva2VuIC0gaW50ZXJ2YWxSZWZyZXNoVG9rZW4pIC8gdGhpcy50aW1lb3V0O1xuXG4gICAgICAgIHRoaXMuX2JvdEFnZW50ID0gdGhpcy5nZXRCb3RBZ2VudChvcHRpb25zLmJvdEFnZW50KTtcblxuICAgICAgICB0aGlzLnNlcnZpY2VzID0gbWFrZVNlcnZpY2VzKG9wdGlvbnMpO1xuXG4gICAgICAgIGNvbnN0IHBhcnNlZFBvbGxpbmdJbnRlcnZhbCA9IH5+b3B0aW9ucy5wb2xsaW5nSW50ZXJ2YWw7XG5cbiAgICAgICAgaWYgKHBhcnNlZFBvbGxpbmdJbnRlcnZhbCA8IFBPTExJTkdfSU5URVJWQUxfTE9XRVJfQk9VTkQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wb2xsaW5nSW50ZXJ2YWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBEaXJlY3RMaW5lSlM6IHByb3ZpZGVkIHBvbGxpbmdJbnRlcnZhbCAoJHsgb3B0aW9ucy5wb2xsaW5nSW50ZXJ2YWwgfSkgaXMgdW5kZXIgbG93ZXIgYm91bmQgKDIwMG1zKSwgdXNpbmcgZGVmYXVsdCBvZiAxMDAwbXNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucG9sbGluZ0ludGVydmFsID0gcGFyc2VkUG9sbGluZ0ludGVydmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5leHBpcmVkVG9rZW5FeGhhdXN0aW9uID0gdGhpcy5zZXRDb25uZWN0aW9uU3RhdHVzRmFsbGJhY2soXG4gICAgICAgICAgICBDb25uZWN0aW9uU3RhdHVzLkV4cGlyZWRUb2tlbixcbiAgICAgICAgICAgIENvbm5lY3Rpb25TdGF0dXMuRmFpbGVkVG9Db25uZWN0LFxuICAgICAgICAgICAgNVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuYWN0aXZpdHkkID0gKHRoaXMud2ViU29ja2V0XG4gICAgICAgICAgICA/IHRoaXMud2ViU29ja2V0QWN0aXZpdHkkKClcbiAgICAgICAgICAgIDogdGhpcy5wb2xsaW5nR2V0QWN0aXZpdHkkKClcbiAgICAgICAgKS5zaGFyZSgpO1xuICAgIH1cblxuICAgIC8vIEV2ZXJ5IHRpbWUgd2UncmUgYWJvdXQgdG8gbWFrZSBhIERpcmVjdCBMaW5lIFJFU1QgY2FsbCwgd2UgY2FsbCB0aGlzIGZpcnN0IHRvIHNlZSBjaGVjayB0aGUgY3VycmVudCBjb25uZWN0aW9uIHN0YXR1cy5cbiAgICAvLyBFaXRoZXIgdGhyb3dzIGFuIGVycm9yIChpbmRpY2F0aW5nIGFuIGVycm9yIHN0YXRlKSBvciBlbWl0cyBhIG51bGwsIGluZGljYXRpbmcgYSAocHJlc3VtYWJseSkgaGVhbHRoeSBjb25uZWN0aW9uXG4gICAgcHJpdmF0ZSBjaGVja0Nvbm5lY3Rpb24ob25jZSA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBvYnMgPSAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJFxuICAgICAgICAuZmxhdE1hcChjb25uZWN0aW9uU3RhdHVzID0+IHtcbiAgICAgICAgICAgIGlmIChjb25uZWN0aW9uU3RhdHVzID09PSBDb25uZWN0aW9uU3RhdHVzLlVuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoQ29ubmVjdGlvblN0YXR1cy5Db25uZWN0aW5nKTtcblxuICAgICAgICAgICAgICAgIC8vaWYgdG9rZW4gYW5kIHN0cmVhbVVybCBhcmUgZGVmaW5lZCBpdCBtZWFucyByZWNvbm5lY3QgaGFzIGFscmVhZHkgYmVlbiBkb25lLiBTa2lwcGluZyBpdC5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy50b2tlbiAmJiB0aGlzLnN0cmVhbVVybCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoQ29ubmVjdGlvblN0YXR1cy5PbmxpbmUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5vZihjb25uZWN0aW9uU3RhdHVzLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRDb252ZXJzYXRpb24oKS5kbyhjb252ZXJzYXRpb24gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb252ZXJzYXRpb25JZCA9IGNvbnZlcnNhdGlvbi5jb252ZXJzYXRpb25JZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW4gPSB0aGlzLnNlY3JldCB8fCBjb252ZXJzYXRpb24udG9rZW47XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbVVybCA9IGNvbnZlcnNhdGlvbi5zdHJlYW1Vcmw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZmVyZW5jZUdyYW1tYXJJZCA9IGNvbnZlcnNhdGlvbi5yZWZlcmVuY2VHcmFtbWFySWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VjcmV0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaFRva2VuTG9vcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoQ29ubmVjdGlvblN0YXR1cy5PbmxpbmUpO1xuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoQ29ubmVjdGlvblN0YXR1cy5GYWlsZWRUb0Nvbm5lY3QpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAubWFwKF8gPT4gY29ubmVjdGlvblN0YXR1cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUub2YoY29ubmVjdGlvblN0YXR1cywgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKGNvbm5lY3Rpb25TdGF0dXMgPT4gY29ubmVjdGlvblN0YXR1cyAhPSBDb25uZWN0aW9uU3RhdHVzLlVuaW5pdGlhbGl6ZWQgJiYgY29ubmVjdGlvblN0YXR1cyAhPSBDb25uZWN0aW9uU3RhdHVzLkNvbm5lY3RpbmcpXG4gICAgICAgIC5mbGF0TWFwKGNvbm5lY3Rpb25TdGF0dXMgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChjb25uZWN0aW9uU3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBDb25uZWN0aW9uU3RhdHVzLkVuZGVkOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aHJvdyhlcnJvckNvbnZlcnNhdGlvbkVuZGVkLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG5cbiAgICAgICAgICAgICAgICBjYXNlIENvbm5lY3Rpb25TdGF0dXMuRmFpbGVkVG9Db25uZWN0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aHJvdyhlcnJvckZhaWxlZFRvQ29ubmVjdCwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuXG4gICAgICAgICAgICAgICAgY2FzZSBDb25uZWN0aW9uU3RhdHVzLkV4cGlyZWRUb2tlbjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUub2YoY29ubmVjdGlvblN0YXR1cywgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUub2YoY29ubmVjdGlvblN0YXR1cywgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIHJldHVybiBvbmNlID8gb2JzLnRha2UoMSkgOiBvYnM7XG4gICAgfVxuXG4gICAgc2V0Q29ubmVjdGlvblN0YXR1c0ZhbGxiYWNrKFxuICAgICAgICBjb25uZWN0aW9uU3RhdHVzRnJvbTogQ29ubmVjdGlvblN0YXR1cyxcbiAgICAgICAgY29ubmVjdGlvblN0YXR1c1RvOiBDb25uZWN0aW9uU3RhdHVzLFxuICAgICAgICBtYXhBdHRlbXB0cyA9IDVcbiAgICApIHtcbiAgICAgICAgbWF4QXR0ZW1wdHMtLTtcbiAgICAgICAgbGV0IGF0dGVtcHRzID0gMDtcbiAgICAgICAgbGV0IGN1cnJTdGF0dXMgPSBudWxsO1xuICAgICAgICByZXR1cm4gKHN0YXR1czogQ29ubmVjdGlvblN0YXR1cyk6IENvbm5lY3Rpb25TdGF0dXMgPT4ge1xuICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gY29ubmVjdGlvblN0YXR1c0Zyb20gJiYgY3VyclN0YXR1cyA9PT0gc3RhdHVzICYmIGF0dGVtcHRzID49IG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMgPSAwXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb25TdGF0dXNUbztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF0dGVtcHRzKys7XG4gICAgICAgICAgICBjdXJyU3RhdHVzID0gc3RhdHVzO1xuICAgICAgICAgICAgcmV0dXJuIHN0YXR1cztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4cGlyZWRUb2tlbigpIHtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvblN0YXR1cyA9IHRoaXMuY29ubmVjdGlvblN0YXR1cyQuZ2V0VmFsdWUoKTtcbiAgICAgICAgaWYgKGNvbm5lY3Rpb25TdGF0dXMgIT0gQ29ubmVjdGlvblN0YXR1cy5FbmRlZCAmJiBjb25uZWN0aW9uU3RhdHVzICE9IENvbm5lY3Rpb25TdGF0dXMuRmFpbGVkVG9Db25uZWN0KVxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KENvbm5lY3Rpb25TdGF0dXMuRXhwaXJlZFRva2VuKTtcblxuICAgICAgICBjb25zdCBwcm90ZWN0ZWRDb25uZWN0aW9uU3RhdHVzID0gdGhpcy5leHBpcmVkVG9rZW5FeGhhdXN0aW9uKHRoaXMuY29ubmVjdGlvblN0YXR1cyQuZ2V0VmFsdWUoKSk7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dChwcm90ZWN0ZWRDb25uZWN0aW9uU3RhdHVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0Q29udmVyc2F0aW9uKCkge1xuICAgICAgICAvL2lmIGNvbnZlcnNhdGlvbmlkIGlzIHNldCBoZXJlLCBpdCBtZWFucyB3ZSBuZWVkIHRvIGNhbGwgdGhlIHJlY29ubmVjdCBhcGksIGVsc2UgaXQgaXMgYSBuZXcgY29udmVyc2F0aW9uXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuY29udmVyc2F0aW9uSWRcbiAgICAgICAgICAgID8gYCR7dGhpcy5kb21haW59L2NvbnZlcnNhdGlvbnMvJHt0aGlzLmNvbnZlcnNhdGlvbklkfT93YXRlcm1hcms9JHt0aGlzLndhdGVybWFya31gXG4gICAgICAgICAgICA6IGAke3RoaXMuZG9tYWlufS9jb252ZXJzYXRpb25zYDtcbiAgICAgICAgY29uc3QgbWV0aG9kID0gdGhpcy5jb252ZXJzYXRpb25JZCA/IFwiR0VUXCIgOiBcIlBPU1RcIjtcbiAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29udmVyc2F0aW9uSWRcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICB1c2VyOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLnVzZXJJZE9uU3RhcnRDb252ZXJzYXRpb25cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGVPblN0YXJ0Q29udmVyc2F0aW9uXG4gICAgICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VzLmFqYXgoe1xuICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICAuLi50aGlzLmNvbW1vbkhlYWRlcnMoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuLy8gICAgICAuZG8oYWpheFJlc3BvbnNlID0+IGtvbnNvbGUubG9nKFwiY29udmVyc2F0aW9uIGFqYXhSZXNwb25zZVwiLCBhamF4UmVzcG9uc2UucmVzcG9uc2UpKVxuICAgICAgICAubWFwKGFqYXhSZXNwb25zZSA9PiBhamF4UmVzcG9uc2UucmVzcG9uc2UgYXMgQ29udmVyc2F0aW9uKVxuICAgICAgICAucmV0cnlXaGVuKGVycm9yJCA9PlxuICAgICAgICAgICAgLy8gZm9yIG5vdyB3ZSBkZWVtIDR4eCBhbmQgNXh4IGVycm9ycyBhcyB1bnJlY292ZXJhYmxlXG4gICAgICAgICAgICAvLyBmb3IgZXZlcnl0aGluZyBlbHNlICh0aW1lb3V0cyksIHJldHJ5IGZvciBhIHdoaWxlXG4gICAgICAgICAgICBlcnJvciQubWVyZ2VNYXAoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yLnN0YXR1cyA+PSA0MDAgJiYgZXJyb3Iuc3RhdHVzIDwgNjAwXG4gICAgICAgICAgICAgICAgPyBPYnNlcnZhYmxlLnRocm93KGVycm9yLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcilcbiAgICAgICAgICAgICAgICA6IE9ic2VydmFibGUub2YoZXJyb3IsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5kZWxheSh0aGlzLnRpbWVvdXQsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKVxuICAgICAgICAgICAgLnRha2UodGhpcy5yZXRyaWVzKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWZyZXNoVG9rZW5Mb29wKCkge1xuICAgICAgICB0aGlzLnRva2VuUmVmcmVzaFN1YnNjcmlwdGlvbiA9IE9ic2VydmFibGUuaW50ZXJ2YWwoaW50ZXJ2YWxSZWZyZXNoVG9rZW4sIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKVxuICAgICAgICAuZmxhdE1hcChfID0+IHRoaXMucmVmcmVzaFRva2VuKCkpXG4gICAgICAgIC5zdWJzY3JpYmUodG9rZW4gPT4ge1xuICAgICAgICAgICAga29uc29sZS5sb2coXCJyZWZyZXNoaW5nIHRva2VuXCIsIHRva2VuLCBcImF0XCIsIG5ldyBEYXRlKCkpO1xuICAgICAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZnJlc2hUb2tlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tDb25uZWN0aW9uKHRydWUpXG4gICAgICAgIC5mbGF0TWFwKF8gPT5cbiAgICAgICAgICAgIHRoaXMuc2VydmljZXMuYWpheCh7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICB1cmw6IGAke3RoaXMuZG9tYWlufS90b2tlbnMvcmVmcmVzaGAsXG4gICAgICAgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5jb21tb25IZWFkZXJzKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1hcChhamF4UmVzcG9uc2UgPT4gYWpheFJlc3BvbnNlLnJlc3BvbnNlLnRva2VuIGFzIHN0cmluZylcbiAgICAgICAgICAgIC5yZXRyeVdoZW4oZXJyb3IkID0+IGVycm9yJFxuICAgICAgICAgICAgICAgIC5tZXJnZU1hcChlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHRva2VuIGlzIGV4cGlyZWQgdGhlcmUncyBubyByZWFzb24gdG8ga2VlcCB0cnlpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwaXJlZFRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aHJvdyhlcnJvciwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYm90IGlzIGdvbmUsIHdlIHNob3VsZCBzdG9wIHJldHJ5aW5nXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aHJvdyhlcnJvciwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUub2YoZXJyb3IsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5kZWxheSh0aGlzLnRpbWVvdXQsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKVxuICAgICAgICAgICAgICAgIC50YWtlKHRoaXMucmV0cmllcylcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgIH1cblxuICAgIHB1YmxpYyByZWNvbm5lY3QoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb24pIHtcbiAgICAgICAgdGhpcy50b2tlbiA9IGNvbnZlcnNhdGlvbi50b2tlbjtcbiAgICAgICAgdGhpcy5zdHJlYW1VcmwgPSBjb252ZXJzYXRpb24uc3RyZWFtVXJsO1xuICAgICAgICBpZiAodGhpcy5jb25uZWN0aW9uU3RhdHVzJC5nZXRWYWx1ZSgpID09PSBDb25uZWN0aW9uU3RhdHVzLkV4cGlyZWRUb2tlbilcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dChDb25uZWN0aW9uU3RhdHVzLk9ubGluZSk7XG4gICAgfVxuXG4gICAgZW5kKCkge1xuICAgICAgICBpZiAodGhpcy50b2tlblJlZnJlc2hTdWJzY3JpcHRpb24pXG4gICAgICAgICAgICB0aGlzLnRva2VuUmVmcmVzaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KENvbm5lY3Rpb25TdGF0dXMuRW5kZWQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSA9PT0gZXJyb3JDb252ZXJzYXRpb25FbmRlZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aHJvdyhlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFNlc3Npb25JZCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICAvLyBJZiB3ZSdyZSBub3QgY29ubmVjdGVkIHRvIHRoZSBib3QsIGdldCBjb25uZWN0ZWRcbiAgICAgICAgLy8gV2lsbCB0aHJvdyBhbiBlcnJvciBpZiB3ZSBhcmUgbm90IGNvbm5lY3RlZFxuICAgICAgICBrb25zb2xlLmxvZyhcImdldFNlc3Npb25JZFwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tDb25uZWN0aW9uKHRydWUpXG4gICAgICAgICAgICAuZmxhdE1hcChfID0+XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcy5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGAke3RoaXMuZG9tYWlufS9zZXNzaW9uL2dldHNlc3Npb25pZGAsXG4gICAgICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuY29tbW9uSGVhZGVycygpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5tYXAoYWpheFJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFqYXhSZXNwb25zZSAmJiBhamF4UmVzcG9uc2UucmVzcG9uc2UgJiYgYWpheFJlc3BvbnNlLnJlc3BvbnNlLnNlc3Npb25JZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAga29uc29sZS5sb2coXCJnZXRTZXNzaW9uSWQgcmVzcG9uc2U6IFwiICsgYWpheFJlc3BvbnNlLnJlc3BvbnNlLnNlc3Npb25JZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWpheFJlc3BvbnNlLnJlc3BvbnNlLnNlc3Npb25JZCBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAga29uc29sZS5sb2coXCJnZXRTZXNzaW9uSWQgZXJyb3I6IFwiICsgZXJyb3Iuc3RhdHVzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUub2YoJycsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHRoaXMuY2F0Y2hFeHBpcmVkVG9rZW4oZXJyb3IpKTtcbiAgICB9XG5cbiAgICBwb3N0QWN0aXZpdHkoYWN0aXZpdHk6IEFjdGl2aXR5KSB7XG4gICAgICAgIC8vIElmIHVzZXIgaWQgaXMgc2V0LCBjaGVjayBpZiBpdCBtYXRjaCBhY3Rpdml0eS5mcm9tLmlkIGFuZCBhbHdheXMgb3ZlcnJpZGUgaXQgaW4gYWN0aXZpdHlcbiAgICAgICAgaWYgKHRoaXMudXNlcklkT25TdGFydENvbnZlcnNhdGlvbiAmJiBhY3Rpdml0eS5mcm9tICYmIGFjdGl2aXR5LmZyb20uaWQgIT09IHRoaXMudXNlcklkT25TdGFydENvbnZlcnNhdGlvbikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEaXJlY3RMaW5lSlM6IEFjdGl2aXR5LmZyb20uaWQgZG9lcyBub3QgbWF0Y2ggd2l0aCB1c2VyIGlkLCBpZ25vcmluZyBhY3Rpdml0eS5mcm9tLmlkJyk7XG4gICAgICAgICAgICBhY3Rpdml0eS5mcm9tLmlkID0gdGhpcy51c2VySWRPblN0YXJ0Q29udmVyc2F0aW9uO1xuICAgICAgICB9XG4gICAgICAgIC8vIFVzZSBwb3N0TWVzc2FnZVdpdGhBdHRhY2htZW50cyBmb3IgbWVzc2FnZXMgd2l0aCBhdHRhY2htZW50cyB0aGF0IGFyZSBsb2NhbCBmaWxlcyAoZS5nLiBhbiBpbWFnZSB0byB1cGxvYWQpXG4gICAgICAgIC8vIFRlY2huaWNhbGx5IHdlIGNvdWxkIHVzZSBpdCBmb3IgKmFsbCogYWN0aXZpdGllcywgYnV0IHBvc3RBY3Rpdml0eSBpcyBtdWNoIGxpZ2h0ZXIgd2VpZ2h0XG4gICAgICAgIC8vIFNvLCBzaW5jZSBXZWJDaGF0IGlzIHBhcnRpYWxseSBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiBEaXJlY3QgTGluZSwgd2UgaW1wbGVtZW50IGJvdGguXG4gICAgICAgIGlmIChhY3Rpdml0eS50eXBlID09PSBcIm1lc3NhZ2VcIiAmJiBhY3Rpdml0eS5hdHRhY2htZW50cyAmJiBhY3Rpdml0eS5hdHRhY2htZW50cy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zdE1lc3NhZ2VXaXRoQXR0YWNobWVudHMoYWN0aXZpdHkpO1xuXG4gICAgICAgIC8vIElmIHdlJ3JlIG5vdCBjb25uZWN0ZWQgdG8gdGhlIGJvdCwgZ2V0IGNvbm5lY3RlZFxuICAgICAgICAvLyBXaWxsIHRocm93IGFuIGVycm9yIGlmIHdlIGFyZSBub3QgY29ubmVjdGVkXG4gICAgICAgIGtvbnNvbGUubG9nKFwicG9zdEFjdGl2aXR5XCIsIGFjdGl2aXR5KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tDb25uZWN0aW9uKHRydWUpXG4gICAgICAgIC5mbGF0TWFwKF8gPT5cbiAgICAgICAgICAgIHRoaXMuc2VydmljZXMuYWpheCh7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICB1cmw6IGAke3RoaXMuZG9tYWlufS9jb252ZXJzYXRpb25zLyR7dGhpcy5jb252ZXJzYXRpb25JZH0vYWN0aXZpdGllc2AsXG4gICAgICAgICAgICAgICAgYm9keTogYWN0aXZpdHksXG4gICAgICAgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuY29tbW9uSGVhZGVycygpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAubWFwKGFqYXhSZXNwb25zZSA9PiBhamF4UmVzcG9uc2UucmVzcG9uc2UuaWQgYXMgc3RyaW5nKVxuICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHRoaXMuY2F0Y2hQb3N0RXJyb3IoZXJyb3IpKVxuICAgICAgICApXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB0aGlzLmNhdGNoRXhwaXJlZFRva2VuKGVycm9yKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwb3N0TWVzc2FnZVdpdGhBdHRhY2htZW50cyhtZXNzYWdlOiBNZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IHsgYXR0YWNobWVudHMgfSA9IG1lc3NhZ2U7XG4gICAgICAgIC8vIFdlIGNsZWFuIHRoZSBhdHRhY2htZW50cyBidXQgbWFraW5nIHN1cmUgZXZlcnkgYXR0YWNobWVudCBoYXMgdW5pcXVlIG5hbWUuXG4gICAgICAgIC8vIElmIHRoZSBmaWxlIGRvIG5vdCBoYXZlIGEgbmFtZSwgQ2hyb21lIHdpbGwgYXNzaWduIFwiYmxvYlwiIHdoZW4gaXQgaXMgYXBwZW5kZWQgdG8gRm9ybURhdGEuXG4gICAgICAgIGNvbnN0IGF0dGFjaG1lbnROYW1lczogc3RyaW5nW10gPSBkZWR1cGVGaWxlbmFtZXMoYXR0YWNobWVudHMubWFwKChtZWRpYTogTWVkaWEpID0+IG1lZGlhLm5hbWUgfHwgJ2Jsb2InKSk7XG4gICAgICAgIGNvbnN0IGNsZWFuc2VkQXR0YWNobWVudHMgPSBhdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQ6IE1lZGlhLCBpbmRleDogbnVtYmVyKSA9PiAoe1xuICAgICAgICAgICAgLi4uYXR0YWNobWVudCxcbiAgICAgICAgICAgIG5hbWU6IGF0dGFjaG1lbnROYW1lc1tpbmRleF1cbiAgICAgICAgfSkpO1xuICAgICAgICBsZXQgZm9ybURhdGE6IEZvcm1EYXRhO1xuXG4gICAgICAgIC8vIElmIHdlJ3JlIG5vdCBjb25uZWN0ZWQgdG8gdGhlIGJvdCwgZ2V0IGNvbm5lY3RlZFxuICAgICAgICAvLyBXaWxsIHRocm93IGFuIGVycm9yIGlmIHdlIGFyZSBub3QgY29ubmVjdGVkXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrQ29ubmVjdGlvbih0cnVlKVxuICAgICAgICAuZmxhdE1hcChfID0+IHtcbiAgICAgICAgICAgIC8vIFRvIHNlbmQgdGhpcyBtZXNzYWdlIHRvIERpcmVjdExpbmUgd2UgbmVlZCB0byBkZWNvbnN0cnVjdCBpdCBpbnRvIGEgXCJ0ZW1wbGF0ZVwiIGFjdGl2aXR5XG4gICAgICAgICAgICAvLyBhbmQgb25lIGJsb2IgZm9yIGVhY2ggYXR0YWNobWVudC5cbiAgICAgICAgICAgIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2FjdGl2aXR5JywgbmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAuLi5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIC8vIFJlbW92aW5nIGNvbnRlbnRVcmwgZnJvbSBhdHRhY2htZW50LCB3ZSB3aWxsIHNlbmQgaXQgdmlhIG11bHRpcGFydFxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzOiBjbGVhbnNlZEF0dGFjaG1lbnRzLm1hcCgoeyBjb250ZW50VXJsOiBzdHJpbmcsIC4uLm90aGVycyB9KSA9PiAoeyAuLi5vdGhlcnMgfSkpXG4gICAgICAgICAgICB9KV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuYWN0aXZpdHknIH0pKTtcblxuICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUuZnJvbShjbGVhbnNlZEF0dGFjaG1lbnRzLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcilcbiAgICAgICAgICAgIC5mbGF0TWFwKChtZWRpYTogTWVkaWEpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcy5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IG1lZGlhLmNvbnRlbnRVcmwsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmRvKGFqYXhSZXNwb25zZSA9PlxuICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBuZXcgQmxvYihbYWpheFJlc3BvbnNlLnJlc3BvbnNlXSwgeyB0eXBlOiBtZWRpYS5jb250ZW50VHlwZSB9KSwgbWVkaWEubmFtZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuY291bnQoKVxuICAgICAgICB9KVxuICAgICAgICAuZmxhdE1hcChfID0+XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VzLmFqYXgoe1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgdXJsOiBgJHt0aGlzLmRvbWFpbn0vY29udmVyc2F0aW9ucy8ke3RoaXMuY29udmVyc2F0aW9uSWR9L3VwbG9hZD91c2VySWQ9JHttZXNzYWdlLmZyb20uaWR9YCxcbiAgICAgICAgICAgICAgICBib2R5OiBmb3JtRGF0YSxcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXQsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmNvbW1vbkhlYWRlcnMoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAubWFwKGFqYXhSZXNwb25zZSA9PiBhamF4UmVzcG9uc2UucmVzcG9uc2UuaWQgYXMgc3RyaW5nKVxuICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHRoaXMuY2F0Y2hQb3N0RXJyb3IoZXJyb3IpKVxuICAgICAgICApXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB0aGlzLmNhdGNoUG9zdEVycm9yKGVycm9yKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYXRjaFBvc3RFcnJvcihlcnJvcjogYW55KSB7XG4gICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwMylcbiAgICAgICAgICAgIC8vIHRva2VuIGhhcyBleHBpcmVkICh3aWxsIGZhbGwgdGhyb3VnaCB0byByZXR1cm4gXCJyZXRyeVwiKVxuICAgICAgICAgICAgdGhpcy5leHBpcmVkVG9rZW4oKTtcbiAgICAgICAgZWxzZSBpZiAoZXJyb3Iuc3RhdHVzID49IDQwMCAmJiBlcnJvci5zdGF0dXMgPCA1MDApXG4gICAgICAgICAgICAvLyBtb3JlIHVucmVjb3ZlcmFibGUgZXJyb3JzXG4gICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aHJvdyhlcnJvciwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5vZihcInJldHJ5XCIsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhdGNoRXhwaXJlZFRva2VuKGVycm9yOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yID09PSBlcnJvckV4cGlyZWRUb2tlblxuICAgICAgICA/IE9ic2VydmFibGUub2YoXCJyZXRyeVwiLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcilcbiAgICAgICAgOiBPYnNlcnZhYmxlLnRocm93KGVycm9yLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwb2xsaW5nR2V0QWN0aXZpdHkkKCkge1xuICAgICAgICBjb25zdCBwb2xsZXIkOiBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4gPSBPYnNlcnZhYmxlLmNyZWF0ZSgoc3Vic2NyaWJlcjogU3Vic2NyaWJlcjxhbnk+KSA9PiB7XG4gICAgICAgICAgICAvLyBBIEJlaGF2aW9yU3ViamVjdCB0byB0cmlnZ2VyIHBvbGxpbmcuIFNpbmNlIGl0IGlzIGEgQmVoYXZpb3JTdWJqZWN0XG4gICAgICAgICAgICAvLyB0aGUgZmlyc3QgZXZlbnQgaXMgcHJvZHVjZWQgaW1tZWRpYXRlbHkuXG4gICAgICAgICAgICBjb25zdCB0cmlnZ2VyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7fSk7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IHJlbW92ZSBEYXRlLm5vdywgdXNlIHJlYWN0aXZlIGludGVydmFsIHRvIHNwYWNlIG91dCBldmVyeSByZXF1ZXN0XG5cbiAgICAgICAgICAgIHRyaWdnZXIkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXR1cyQuZ2V0VmFsdWUoKSA9PT0gQ29ubmVjdGlvblN0YXR1cy5PbmxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZXMuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5jb21tb25IZWFkZXJzKClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBgJHsgdGhpcy5kb21haW4gfS9jb252ZXJzYXRpb25zLyR7IHRoaXMuY29udmVyc2F0aW9uSWQgfS9hY3Rpdml0aWVzP3dhdGVybWFyaz0keyB0aGlzLndhdGVybWFyayB9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dFxuICAgICAgICAgICAgICAgICAgICB9KS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAocmVzdWx0OiBBamF4UmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRyaWdnZXIkLm5leHQobnVsbCksIE1hdGgubWF4KDAsIHRoaXMucG9sbGluZ0ludGVydmFsIC0gRGF0ZS5ub3coKSArIHN0YXJ0VGltZXN0YW1wKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGVycm9yLnN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQwMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dChDb25uZWN0aW9uU3RhdHVzLkV4cGlyZWRUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRyaWdnZXIkLm5leHQobnVsbCksIHRoaXMucG9sbGluZ0ludGVydmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KENvbm5lY3Rpb25TdGF0dXMuRW5kZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb3BhZ2F0ZSB0aGUgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0Nvbm5lY3Rpb24oKVxuICAgICAgICAuZmxhdE1hcChfID0+IHBvbGxlciRcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiBPYnNlcnZhYmxlLmVtcHR5PEFqYXhSZXNwb25zZT4oKSlcbiAgICAgICAgICAgIC5tYXAoYWpheFJlc3BvbnNlID0+IGFqYXhSZXNwb25zZS5yZXNwb25zZSBhcyBBY3Rpdml0eUdyb3VwKVxuICAgICAgICAgICAgLmZsYXRNYXAoYWN0aXZpdHlHcm91cCA9PiB0aGlzLm9ic2VydmFibGVGcm9tQWN0aXZpdHlHcm91cChhY3Rpdml0eUdyb3VwKSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb2JzZXJ2YWJsZUZyb21BY3Rpdml0eUdyb3VwKGFjdGl2aXR5R3JvdXA6IEFjdGl2aXR5R3JvdXApIHtcbiAgICAgICAgaWYgKGFjdGl2aXR5R3JvdXAud2F0ZXJtYXJrKVxuICAgICAgICAgICAgdGhpcy53YXRlcm1hcmsgPSBhY3Rpdml0eUdyb3VwLndhdGVybWFyaztcbiAgICAgICAgcmV0dXJuIE9ic2VydmFibGUuZnJvbShhY3Rpdml0eUdyb3VwLmFjdGl2aXRpZXMsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHdlYlNvY2tldEFjdGl2aXR5JCgpOiBPYnNlcnZhYmxlPEFjdGl2aXR5PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrQ29ubmVjdGlvbigpXG4gICAgICAgIC5mbGF0TWFwKF8gPT5cbiAgICAgICAgICAgIHRoaXMub2JzZXJ2YWJsZVdlYlNvY2tldDxBY3Rpdml0eUdyb3VwPigpXG4gICAgICAgICAgICAvLyBXZWJTb2NrZXRzIGNhbiBiZSBjbG9zZWQgYnkgdGhlIHNlcnZlciBvciB0aGUgYnJvd3Nlci4gSW4gdGhlIGZvcm1lciBjYXNlIHdlIG5lZWQgdG9cbiAgICAgICAgICAgIC8vIHJldHJpZXZlIGEgbmV3IHN0cmVhbVVybC4gSW4gdGhlIGxhdHRlciBjYXNlIHdlIGNvdWxkIGZpcnN0IHJldHJ5IHdpdGggdGhlIGN1cnJlbnQgc3RyZWFtVXJsLFxuICAgICAgICAgICAgLy8gYnV0IGl0J3Mgc2ltcGxlciBqdXN0IHRvIGFsd2F5cyBmZXRjaCBhIG5ldyBvbmUuXG4gICAgICAgICAgICAucmV0cnlXaGVuKGVycm9yJCA9PiBlcnJvciQuZGVsYXkodGhpcy5nZXRSZXRyeURlbGF5KCksIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKS5tZXJnZU1hcChlcnJvciA9PiB0aGlzLnJlY29ubmVjdFRvQ29udmVyc2F0aW9uKCkpKVxuICAgICAgICApXG4gICAgICAgIC5mbGF0TWFwKGFjdGl2aXR5R3JvdXAgPT4gdGhpcy5vYnNlcnZhYmxlRnJvbUFjdGl2aXR5R3JvdXAoYWN0aXZpdHlHcm91cCkpXG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyB0aGUgZGVsYXkgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzXG4gICAgcHJpdmF0ZSBnZXRSZXRyeURlbGF5KCkge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcigzMDAwICsgdGhpcy5zZXJ2aWNlcy5yYW5kb20oKSAqIDEyMDAwKTtcbiAgICB9XG5cbiAgICAvLyBPcmlnaW5hbGx5IHdlIHVzZWQgT2JzZXJ2YWJsZS53ZWJTb2NrZXQsIGJ1dCBpdCdzIGZhaXJseSBvcGluaW9uYXRlZCBhbmQgSSBlbmRlZCB1cCB3cml0aW5nXG4gICAgLy8gYSBsb3Qgb2YgY29kZSB0byB3b3JrIGFyb3VuZCB0aGVpciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBTaW5jZSBXZWJDaGF0IGlzIG1lYW50IHRvIGJlIGEgcmVmZXJlbmNlXG4gICAgLy8gaW1wbGVtZW50YXRpb24sIEkgZGVjaWRlZCByb2xsIHRoZSBiZWxvdywgd2hlcmUgdGhlIGxvZ2ljIGlzIG1vcmUgcHVycG9zZWZ1bC4gLSBAYmlsbGJhXG4gICAgcHJpdmF0ZSBvYnNlcnZhYmxlV2ViU29ja2V0PFQ+KCkge1xuICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5jcmVhdGUoKHN1YnNjcmliZXI6IFN1YnNjcmliZXI8VD4pID0+IHtcbiAgICAgICAgICAgIGtvbnNvbGUubG9nKFwiY3JlYXRpbmcgV2ViU29ja2V0XCIsIHRoaXMuc3RyZWFtVXJsKTtcbiAgICAgICAgICAgIGNvbnN0IHdzID0gbmV3IHRoaXMuc2VydmljZXMuV2ViU29ja2V0KHRoaXMuc3RyZWFtVXJsKTtcbiAgICAgICAgICAgIGxldCBzdWI6IFN1YnNjcmlwdGlvbjtcbiAgICAgICAgICAgIGxldCBjbG9zZWQ6IGJvb2xlYW47XG5cbiAgICAgICAgICAgIHdzLm9ub3BlbiA9IG9wZW4gPT4ge1xuICAgICAgICAgICAgICAgIGtvbnNvbGUubG9nKFwiV2ViU29ja2V0IG9wZW5cIiwgb3Blbik7XG4gICAgICAgICAgICAgICAgLy8gQ2hyb21lIGlzIHByZXR0eSBiYWQgYXQgbm90aWNpbmcgd2hlbiBhIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGJyb2tlbi5cbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBwZXJpb2RpY2FsbHkgcGluZyB0aGUgc2VydmVyIHdpdGggZW1wdHkgbWVzc2FnZXMsIGl0IGhlbHBzIENocm9tZVxuICAgICAgICAgICAgICAgIC8vIHJlYWxpemUgd2hlbiBjb25uZWN0aW9uIGJyZWFrcywgYW5kIGNsb3NlIHRoZSBzb2NrZXQuIFdlIHRoZW4gdGhyb3cgYW5cbiAgICAgICAgICAgICAgICAvLyBlcnJvciwgYW5kIHRoYXQgZ2l2ZSB1cyB0aGUgb3Bwb3J0dW5pdHkgdG8gYXR0ZW1wdCB0byByZWNvbm5lY3QuXG4gICAgICAgICAgICAgICAgc3ViID0gT2JzZXJ2YWJsZS5pbnRlcnZhbCh0aGlzLnRpbWVvdXQsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKS5zdWJzY3JpYmUoXyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cy5zZW5kKFwiXCIpXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAga29uc29sZS5sb2coXCJQaW5nIGVycm9yXCIsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdzLm9uY2xvc2UgPSBjbG9zZSA9PiB7XG4gICAgICAgICAgICAgICAga29uc29sZS5sb2coXCJXZWJTb2NrZXQgY2xvc2VcIiwgY2xvc2UpO1xuICAgICAgICAgICAgICAgIGlmIChzdWIpIHN1Yi51bnN1YnNjcmliZSgpO1xuXG4gICAgICAgICAgICAgICAgLy8gUnhKUy5yZXRyeVdoZW4gaGFzIGEgYnVnIHRoYXQgd291bGQgY2F1c2UgXCJlcnJvclwiIHNpZ25hbCB0byBiZSBzZW50IGFmdGVyIHRoZSBvYnNlcnZhYmxlIGlzIGNvbXBsZXRlZC9lcnJvcmVkLlxuICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZ3VhcmQgYWdhaW5zdCBleHRyYW5lb3VzIFwiZXJyb3JcIiBzaWduYWwgdG8gd29ya2Fyb3VuZCB0aGUgYnVnLlxuICAgICAgICAgICAgICAgIGNsb3NlZCB8fCBzdWJzY3JpYmVyLmVycm9yKGNsb3NlKTtcbiAgICAgICAgICAgICAgICBjbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3cy5vbmVycm9yID0gZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIGtvbnNvbGUubG9nKFwiV2ViU29ja2V0IGVycm9yXCIsIGVycm9yKTtcbiAgICAgICAgICAgICAgICBpZiAoc3ViKSBzdWIudW5zdWJzY3JpYmUoKTtcblxuICAgICAgICAgICAgICAgIC8vIFJ4SlMucmV0cnlXaGVuIGhhcyBhIGJ1ZyB0aGF0IHdvdWxkIGNhdXNlIFwiZXJyb3JcIiBzaWduYWwgdG8gYmUgc2VudCBhZnRlciB0aGUgb2JzZXJ2YWJsZSBpcyBjb21wbGV0ZWQvZXJyb3JlZC5cbiAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGd1YXJkIGFnYWluc3QgZXh0cmFuZW91cyBcImVycm9yXCIgc2lnbmFsIHRvIHdvcmthcm91bmQgdGhlIGJ1Zy5cbiAgICAgICAgICAgICAgICBjbG9zZWQgfHwgc3Vic2NyaWJlci5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd3Mub25tZXNzYWdlID0gbWVzc2FnZSA9PiBtZXNzYWdlLmRhdGEgJiYgc3Vic2NyaWJlci5uZXh0KEpTT04ucGFyc2UobWVzc2FnZS5kYXRhKSk7XG5cbiAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlICd1bnN1YnNjcmliZScgbWV0aG9kLCB3aGljaCBpcyBjYWxsZWQgd2hlbiB0aGlzIG9ic2VydmFibGUgaXMgZGlzcG9zZWQuXG4gICAgICAgICAgICAvLyBXaGVuIHRoZSBXZWJTb2NrZXQgY2xvc2VzIGl0c2VsZiwgd2UgdGhyb3cgYW4gZXJyb3IsIGFuZCB0aGlzIGZ1bmN0aW9uIGlzIGV2ZW50dWFsbHkgY2FsbGVkLlxuICAgICAgICAgICAgLy8gV2hlbiB0aGUgb2JzZXJ2YWJsZSBpcyBjbG9zZWQgZmlyc3QgKGUuZy4gd2hlbiB0ZWFyaW5nIGRvd24gYSBXZWJDaGF0IGluc3RhbmNlKSB0aGVuXG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIG1hbnVhbGx5IGNsb3NlIHRoZSBXZWJTb2NrZXQuXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh3cy5yZWFkeVN0YXRlID09PSAwIHx8IHdzLnJlYWR5U3RhdGUgPT09IDEpIHdzLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pIGFzIE9ic2VydmFibGU8VD5cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlY29ubmVjdFRvQ29udmVyc2F0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0Nvbm5lY3Rpb24odHJ1ZSlcbiAgICAgICAgLmZsYXRNYXAoXyA9PlxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcy5hamF4KHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgICAgICAgICAgdXJsOiBgJHt0aGlzLmRvbWFpbn0vY29udmVyc2F0aW9ucy8ke3RoaXMuY29udmVyc2F0aW9uSWR9P3dhdGVybWFyaz0ke3RoaXMud2F0ZXJtYXJrfWAsXG4gICAgICAgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuY29tbW9uSGVhZGVycygpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5kbyhyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWNyZXQpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW4gPSByZXN1bHQucmVzcG9uc2UudG9rZW47XG4gICAgICAgICAgICAgICAgdGhpcy5zdHJlYW1VcmwgPSByZXN1bHQucmVzcG9uc2Uuc3RyZWFtVXJsO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5tYXAoXyA9PiBudWxsKVxuICAgICAgICAgICAgLnJldHJ5V2hlbihlcnJvciQgPT4gZXJyb3IkXG4gICAgICAgICAgICAgICAgLm1lcmdlTWFwKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0b2tlbiBoYXMgZXhwaXJlZC4gV2UgY2FuJ3QgcmVjb3ZlciBmcm9tIHRoaXMgaGVyZSwgYnV0IHRoZSBlbWJlZGRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlYnNpdGUgbWlnaHQgZXZlbnR1YWxseSBjYWxsIHJlY29ubmVjdCgpIHdpdGggYSBuZXcgdG9rZW4gYW5kIHN0cmVhbVVybC5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwaXJlZFRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYnNlcnZhYmxlLnRocm93KGVycm9yQ29udmVyc2F0aW9uRW5kZWQsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYnNlcnZhYmxlLm9mKGVycm9yLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZGVsYXkodGhpcy50aW1lb3V0LCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcilcbiAgICAgICAgICAgICAgICAudGFrZSh0aGlzLnJldHJpZXMpXG4gICAgICAgICAgICApXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbW1vbkhlYWRlcnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBcIkF1dGhvcml6YXRpb25cIjogYEJlYXJlciAke3RoaXMudG9rZW59YCxcbiAgICAgICAgICAgIFwieC1tcy1ib3QtYWdlbnRcIjogdGhpcy5fYm90QWdlbnRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEJvdEFnZW50KGN1c3RvbUFnZW50OiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgICAgIGxldCBjbGllbnRBZ2VudCA9ICdkaXJlY3RsaW5lanMnXG5cbiAgICAgICAgaWYgKGN1c3RvbUFnZW50KSB7XG4gICAgICAgICAgICBjbGllbnRBZ2VudCArPSBgOyAke2N1c3RvbUFnZW50fWBcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBgJHtESVJFQ1RfTElORV9WRVJTSU9OfSAoJHtjbGllbnRBZ2VudH0gJHtwcm9jZXNzLmVudi5ucG1fcGFja2FnZV92ZXJzaW9ufSlgO1xuICAgIH1cblxuICAgIHNldFVzZXJJZCh1c2VySWQ6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5jb25uZWN0aW9uU3RhdHVzJC5nZXRWYWx1ZSgpID09PSBDb25uZWN0aW9uU3RhdHVzLk9ubGluZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaXJlY3RMaW5lSlM6IEl0IGlzIGNvbm5lY3RlZCwgd2UgY2Fubm90IHNldCB1c2VyIGlkLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdXNlcklkRnJvbVRva2VuID0gdGhpcy5wYXJzZVRva2VuKHRoaXMudG9rZW4pO1xuICAgICAgICBpZiAodXNlcklkRnJvbVRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uc29sZS53YXJuKCdEaXJlY3RMaW5lSlM6IHVzZXIgaWQgaXMgYWxyZWFkeSBzZXQgaW4gdG9rZW4sIHdpbGwgaWdub3JlIHRoaXMgdXNlciBpZC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgvXmRsXy91LnRlc3QodXNlcklkKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnNvbGUud2FybignRGlyZWN0TGluZUpTOiB1c2VyIGlkIHByZWZpeGVkIHdpdGggXCJkbF9cIiBpcyByZXNlcnZlZCBhbmQgbXVzdCBiZSBlbWJlZGRlZCBpbnRvIHRoZSBEaXJlY3QgTGluZSB0b2tlbiB0byBwcmV2ZW50IGZvcmdlcnkuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVzZXJJZE9uU3RhcnRDb252ZXJzYXRpb24gPSB1c2VySWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXJzZVRva2VuKHRva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgdXNlciB9ID0gand0RGVjb2RlPEp3dFBheWxvYWQ+KHRva2VuKSBhcyB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEludmFsaWRUb2tlbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxufVxuIl19
@@ -21,13 +21,7 @@ export declare const injectClose: (server: Server) => void;
21
21
  export declare const injectNewToken: (server: Server) => void;
22
22
  declare type ajaxType = (urlOrRequest: string | AjaxRequest) => AjaxResponse;
23
23
  export declare const mockAjax: (server: Server, customAjax?: ajaxType) => AjaxCreationMethod;
24
- export declare const mockWebSocket: (server: Server) => {
25
- new (url: string, protocols?: string | string[]): WebSocket;
26
- prototype: WebSocket;
27
- readonly CLOSED: number;
28
- readonly CLOSING: number;
29
- readonly CONNECTING: number;
30
- readonly OPEN: number;
31
- };
24
+ declare type WebSocketConstructor = typeof WebSocket;
25
+ export declare const mockWebSocket: (server: Server) => WebSocketConstructor;
32
26
  export declare const mockServices: (server: Server, scheduler: TestScheduler) => DirectLineExport.Services;
33
27
  export {};