botframework-directlinejs 0.15.8 → 0.15.9

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.
@@ -4,15 +4,15 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.mockServices = exports.mockWebSocket = exports.mockAjax = exports.injectNewToken = exports.injectClose = exports.mockServer = exports.mockActivity = void 0;
7
+ exports.mockWebSocket = exports.mockServices = exports.mockServer = exports.mockAjax = exports.mockActivity = exports.injectNewToken = exports.injectClose = void 0;
8
8
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
9
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
11
  var _rxjs = require("rxjs");
12
12
  var _url = require("url");
13
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
14
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
15
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
13
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
14
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
15
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
16
16
  // MOCK helpers
17
17
 
18
18
  var notImplemented = function notImplemented() {
@@ -21,7 +21,7 @@ var notImplemented = function notImplemented() {
21
21
 
22
22
  // MOCK Activity
23
23
 
24
- var mockActivity = function mockActivity(text) {
24
+ var mockActivity = exports.mockActivity = function mockActivity(text) {
25
25
  return {
26
26
  type: 'message',
27
27
  from: {
@@ -32,9 +32,9 @@ var mockActivity = function mockActivity(text) {
32
32
  };
33
33
 
34
34
  // MOCK DirectLine Server (shared state used by Observable.ajax and WebSocket mocks)
35
- exports.mockActivity = mockActivity;
35
+
36
36
  var tokenPrefix = 'token';
37
- var mockServer = function mockServer(scheduler) {
37
+ var mockServer = exports.mockServer = function mockServer(scheduler) {
38
38
  return {
39
39
  scheduler: scheduler,
40
40
  conversation: {
@@ -45,7 +45,6 @@ var mockServer = function mockServer(scheduler) {
45
45
  }
46
46
  };
47
47
  };
48
- exports.mockServer = mockServer;
49
48
  var tokenResponse = function tokenResponse(server, request) {
50
49
  var headers = request.headers;
51
50
  var authorization = headers['Authorization'];
@@ -57,22 +56,20 @@ var tokenResponse = function tokenResponse(server, request) {
57
56
  };
58
57
  return response;
59
58
  };
60
- var injectClose = function injectClose(server) {
59
+ var injectClose = exports.injectClose = function injectClose(server) {
61
60
  return server.conversation.sockets.forEach(function (s) {
62
61
  return s.onclose(new CloseEvent('close'));
63
62
  });
64
63
  };
65
- exports.injectClose = injectClose;
66
- var injectNewToken = function injectNewToken(server) {
64
+ var injectNewToken = exports.injectNewToken = function injectNewToken(server) {
67
65
  var conversation = server.conversation;
68
66
  var suffix = Number.parseInt(conversation.token.substring(tokenPrefix.length), 10) + 1;
69
67
  conversation.token = tokenPrefix + suffix;
70
68
  };
71
- exports.injectNewToken = injectNewToken;
72
69
  var keyWatermark = 'watermark';
73
70
  // MOCK Observable.ajax (uses shared state in Server)
74
71
 
75
- var mockAjax = function mockAjax(server, customAjax) {
72
+ var mockAjax = exports.mockAjax = function mockAjax(server, customAjax) {
76
73
  var uriBase = new _url.URL('https://directline.botframework.com/v3/directline/');
77
74
  var createStreamUrl = function createStreamUrl(watermark) {
78
75
  var uri = new _url.URL('conversations/stream', uriBase);
@@ -195,10 +192,10 @@ var mockAjax = function mockAjax(server, customAjax) {
195
192
  };
196
193
 
197
194
  // MOCK WebSocket (uses shared state in Server)
198
- exports.mockAjax = mockAjax;
199
- var mockWebSocket = function mockWebSocket(server) {
200
- var _class;
201
- return _class = /*#__PURE__*/function () {
195
+
196
+ var mockWebSocket = exports.mockWebSocket = function mockWebSocket(server) {
197
+ var _MockWebSocket;
198
+ return _MockWebSocket = /*#__PURE__*/function () {
202
199
  function MockWebSocket(url, protocols) {
203
200
  var _this = this;
204
201
  (0, _classCallCheck2["default"])(this, MockWebSocket);
@@ -225,7 +222,7 @@ var mockWebSocket = function mockWebSocket(server) {
225
222
  }
226
223
  });
227
224
  }
228
- (0, _createClass2["default"])(MockWebSocket, [{
225
+ return (0, _createClass2["default"])(MockWebSocket, [{
229
226
  key: "play",
230
227
  value: function play(start, after) {
231
228
  var history = server.conversation.history;
@@ -267,13 +264,12 @@ var mockWebSocket = function mockWebSocket(server) {
267
264
  throw new Error();
268
265
  }
269
266
  }]);
270
- return MockWebSocket;
271
- }(), (0, _defineProperty2["default"])(_class, "CLOSED", WebSocket.CLOSED), (0, _defineProperty2["default"])(_class, "CLOSING", WebSocket.CLOSING), (0, _defineProperty2["default"])(_class, "CONNECTING", WebSocket.CONNECTING), (0, _defineProperty2["default"])(_class, "OPEN", WebSocket.OPEN), _class;
267
+ }(), (0, _defineProperty2["default"])(_MockWebSocket, "CLOSED", WebSocket.CLOSED), (0, _defineProperty2["default"])(_MockWebSocket, "CLOSING", WebSocket.CLOSING), (0, _defineProperty2["default"])(_MockWebSocket, "CONNECTING", WebSocket.CONNECTING), (0, _defineProperty2["default"])(_MockWebSocket, "OPEN", WebSocket.OPEN), _MockWebSocket;
272
268
  };
273
269
 
274
270
  // MOCK services (top-level aggregation of all mocks)
275
- exports.mockWebSocket = mockWebSocket;
276
- var mockServices = function mockServices(server, scheduler) {
271
+
272
+ var mockServices = exports.mockServices = function mockServices(server, scheduler) {
277
273
  return {
278
274
  scheduler: scheduler,
279
275
  WebSocket: mockWebSocket(server),
@@ -283,5 +279,4 @@ var mockServices = function mockServices(server, scheduler) {
283
279
  }
284
280
  };
285
281
  };
286
- exports.mockServices = mockServices;
287
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcnhqcyIsInJlcXVpcmUiLCJfdXJsIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJvIiwiYWxsb3dBcnJheUxpa2UiLCJpdCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiaSIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImUiLCJfZSIsImYiLCJUeXBlRXJyb3IiLCJub3JtYWxDb21wbGV0aW9uIiwiZGlkRXJyIiwiZXJyIiwiY2FsbCIsInN0ZXAiLCJuZXh0IiwiX2UyIiwibWluTGVuIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJhcnIiLCJsZW4iLCJhcnIyIiwibm90SW1wbGVtZW50ZWQiLCJFcnJvciIsIm1vY2tBY3Rpdml0eSIsInRleHQiLCJ0eXBlIiwiaWQiLCJleHBvcnRzIiwidG9rZW5QcmVmaXgiLCJtb2NrU2VydmVyIiwic2NoZWR1bGVyIiwiY29udmVyc2F0aW9uIiwic29ja2V0cyIsIlNldCIsImNvbnZlcnNhdGlvbklkIiwiaGlzdG9yeSIsInRva2VuIiwidG9rZW5SZXNwb25zZSIsInNlcnZlciIsInJlcXVlc3QiLCJoZWFkZXJzIiwiYXV0aG9yaXphdGlvbiIsImNvbmNhdCIsInJlc3BvbnNlIiwic3RhdHVzIiwiaW5qZWN0Q2xvc2UiLCJmb3JFYWNoIiwib25jbG9zZSIsIkNsb3NlRXZlbnQiLCJpbmplY3ROZXdUb2tlbiIsInN1ZmZpeCIsIk51bWJlciIsInBhcnNlSW50Iiwic3Vic3RyaW5nIiwia2V5V2F0ZXJtYXJrIiwibW9ja0FqYXgiLCJjdXN0b21BamF4IiwidXJpQmFzZSIsIlVSTCIsImNyZWF0ZVN0cmVhbVVybCIsIndhdGVybWFyayIsInVyaSIsInBhcmFtcyIsIlVSTFNlYXJjaFBhcmFtcyIsImFwcGVuZCIsInNlYXJjaCIsImpheCIsInVybE9yUmVxdWVzdCIsInVybCIsInBhdGhuYW1lIiwic2VhcmNoUGFyYW1zIiwicGFydHMiLCJzcGxpdCIsInN0cmVhbVVybCIsInJlc3BvbnNlVG9rZW4iLCJhY3Rpdml0eSIsImJvZHkiLCJhZnRlciIsInB1c2giLCJzdGFydCIsIl9pdGVyYXRvciIsIl9zdGVwIiwic29ja2V0IiwicGxheSIsImdldCIsIm1ldGhvZCIsIk9ic2VydmFibGUiLCJzdWJzY3JpYmVyIiwiY29tcGxldGUiLCJlcnJvciIsInByb3BlcnRpZXMiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJfZGVsZXRlIiwiZ2V0SlNPTiIsImFzc2lnbiIsIm1vY2tXZWJTb2NrZXQiLCJfY2xhc3MiLCJNb2NrV2ViU29ja2V0IiwicHJvdG9jb2xzIiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2RlZmluZVByb3BlcnR5MiIsIldlYlNvY2tldCIsIkNMT1NFRCIsIkNMT1NJTkciLCJDT05ORUNUSU5HIiwiT1BFTiIsInNjaGVkdWxlIiwicmVhZHlTdGF0ZSIsImFkZCIsIm9ub3BlbiIsIkV2ZW50IiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsImFjdGl2aXRpZXMiLCJhY3Rpdml0eUdyb3VwIiwibWVzc2FnZSIsIk1lc3NhZ2VFdmVudCIsImRhdGEiLCJKU09OIiwic3RyaW5naWZ5Iiwib25tZXNzYWdlIiwiY2xvc2UiLCJjb2RlIiwicmVhc29uIiwic2VuZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZGlzcGF0Y2hFdmVudCIsIm1vY2tTZXJ2aWNlcyIsImFqYXgiLCJyYW5kb20iXSwic291cmNlcyI6WyIuLi9zcmMvZGlyZWN0TGluZS5tb2NrLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIERpcmVjdExpbmVFeHBvcnQgZnJvbSBcIi4vZGlyZWN0TGluZVwiO1xuaW1wb3J0IHsgVGVzdFNjaGVkdWxlciwgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBBamF4Q3JlYXRpb25NZXRob2QsIEFqYXhSZXF1ZXN0LCBBamF4UmVzcG9uc2UgfSBmcm9tIFwicnhqcy9vYnNlcnZhYmxlL2RvbS9BamF4T2JzZXJ2YWJsZVwiO1xuaW1wb3J0IHsgVVJMLCBVUkxTZWFyY2hQYXJhbXMgfSBmcm9tICd1cmwnO1xuXG4vLyBNT0NLIGhlbHBlcnNcblxuY29uc3Qgbm90SW1wbGVtZW50ZWQgPSAoKTogbmV2ZXIgPT4geyB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpIH07XG5cbi8vIE1PQ0sgQWN0aXZpdHlcblxuZXhwb3J0IGNvbnN0IG1vY2tBY3Rpdml0eSA9ICh0ZXh0OiBzdHJpbmcpOiBEaXJlY3RMaW5lRXhwb3J0LkFjdGl2aXR5ID0+ICh7IHR5cGU6ICdtZXNzYWdlJywgZnJvbTogeyBpZDogJ3NlbmRlcicgfSwgdGV4dCB9KTtcblxuLy8gTU9DSyBEaXJlY3RMaW5lIFNlcnZlciAoc2hhcmVkIHN0YXRlIHVzZWQgYnkgT2JzZXJ2YWJsZS5hamF4IGFuZCBXZWJTb2NrZXQgbW9ja3MpXG5cbmludGVyZmFjZSBBY3Rpdml0eVNvY2tldCB7XG4gIHBsYXk6IChzdGFydDogbnVtYmVyLCBhZnRlcjogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBTb2NrZXQgPSBXZWJTb2NrZXQgJiBBY3Rpdml0eVNvY2tldDtcblxuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzYXRpb24ge1xuICBzb2NrZXRzOiBTZXQ8U29ja2V0PjtcbiAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgaGlzdG9yeTogQXJyYXk8RGlyZWN0TGluZUV4cG9ydC5BY3Rpdml0eT47XG4gIHRva2VuOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmVyIHtcbiAgc2NoZWR1bGVyOiBUZXN0U2NoZWR1bGVyO1xuICBjb252ZXJzYXRpb246IENvbnZlcnNhdGlvbjtcbn1cblxuY29uc3QgdG9rZW5QcmVmaXggPSAndG9rZW4nO1xuXG5leHBvcnQgY29uc3QgbW9ja1NlcnZlciA9IChzY2hlZHVsZXI6IFRlc3RTY2hlZHVsZXIpOiBTZXJ2ZXIgPT4gKHtcbiAgc2NoZWR1bGVyLFxuICBjb252ZXJzYXRpb246IHtcbiAgICBzb2NrZXRzOiBuZXcgU2V0PFNvY2tldD4oKSxcbiAgICBjb252ZXJzYXRpb25JZDogJ09uZUNvbnZlcnNhdGlvbicsXG4gICAgaGlzdG9yeTogW10sXG4gICAgdG9rZW46IHRva2VuUHJlZml4ICsgJzEnLFxuICB9XG59KTtcblxuY29uc3QgdG9rZW5SZXNwb25zZSA9IChzZXJ2ZXI6IFNlcnZlciwgcmVxdWVzdDogQWpheFJlcXVlc3QpOiBBamF4UmVzcG9uc2UgfCBudWxsID0+IHtcbiAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXF1ZXN0O1xuICBjb25zdCBhdXRob3JpemF0aW9uID0gaGVhZGVyc1snQXV0aG9yaXphdGlvbiddO1xuICBpZiAoYXV0aG9yaXphdGlvbiA9PT0gYEJlYXJlciAke3NlcnZlci5jb252ZXJzYXRpb24udG9rZW59YCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2U6IFBhcnRpYWw8QWpheFJlc3BvbnNlPiA9IHtcbiAgICBzdGF0dXM6IDQwMyxcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZSBhcyBBamF4UmVzcG9uc2U7XG59XG5cbmV4cG9ydCBjb25zdCBpbmplY3RDbG9zZSA9IChzZXJ2ZXI6IFNlcnZlcik6IHZvaWQgPT5cbiAgc2VydmVyLmNvbnZlcnNhdGlvbi5zb2NrZXRzLmZvckVhY2gocyA9PiBzLm9uY2xvc2UobmV3IENsb3NlRXZlbnQoJ2Nsb3NlJykpKTtcblxuZXhwb3J0IGNvbnN0IGluamVjdE5ld1Rva2VuID0gKHNlcnZlcjogU2VydmVyKTogdm9pZCA9PiB7XG4gIGNvbnN0IHsgY29udmVyc2F0aW9uIH0gPSBzZXJ2ZXI7XG4gIGNvbnN0IHN1ZmZpeCA9IE51bWJlci5wYXJzZUludChjb252ZXJzYXRpb24udG9rZW4uc3Vic3RyaW5nKHRva2VuUHJlZml4Lmxlbmd0aCksIDEwKSArIDFcbiAgY29udmVyc2F0aW9uLnRva2VuID0gdG9rZW5QcmVmaXggKyBzdWZmaXg7XG59XG5cbmNvbnN0IGtleVdhdGVybWFyayA9ICd3YXRlcm1hcmsnO1xuXG50eXBlIGFqYXhUeXBlID0gKHVybE9yUmVxdWVzdDogc3RyaW5nIHwgQWpheFJlcXVlc3QpID0+IEFqYXhSZXNwb25zZTtcblxuLy8gTU9DSyBPYnNlcnZhYmxlLmFqYXggKHVzZXMgc2hhcmVkIHN0YXRlIGluIFNlcnZlcilcblxuZXhwb3J0IGNvbnN0IG1vY2tBamF4ID0gKHNlcnZlcjogU2VydmVyLCBjdXN0b21BamF4PzogYWpheFR5cGUpOiBBamF4Q3JlYXRpb25NZXRob2QgPT4ge1xuXG4gIGNvbnN0IHVyaUJhc2UgPSBuZXcgVVJMKCdodHRwczovL2RpcmVjdGxpbmUuYm90ZnJhbWV3b3JrLmNvbS92My9kaXJlY3RsaW5lLycpO1xuICBjb25zdCBjcmVhdGVTdHJlYW1VcmwgPSAod2F0ZXJtYXJrOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwoJ2NvbnZlcnNhdGlvbnMvc3RyZWFtJywgdXJpQmFzZSk7XG4gICAgaWYgKHdhdGVybWFyayA+IDApIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIHBhcmFtcy5hcHBlbmQoa2V5V2F0ZXJtYXJrLCB3YXRlcm1hcmsudG9TdHJpbmcoMTApKTtcbiAgICAgIHVyaS5zZWFyY2ggPSBwYXJhbXMudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXJpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBjb25zdCBqYXggPSBjdXN0b21BamF4IHx8ICgodXJsT3JSZXF1ZXN0OiBzdHJpbmcgfCBBamF4UmVxdWVzdCk6IEFqYXhSZXNwb25zZSA9PiB7XG4gICAgaWYgKHR5cGVvZiB1cmxPclJlcXVlc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHVybE9yUmVxdWVzdC51cmwpO1xuXG4gICAgY29uc3QgeyBwYXRobmFtZSwgc2VhcmNoUGFyYW1zIH0gPSB1cmk7XG5cbiAgICBjb25zdCBwYXJ0cyA9IHBhdGhuYW1lLnNwbGl0KCcvJyk7XG5cbiAgICBpZiAocGFydHNbM10gPT09ICd0b2tlbnMnICYmIHBhcnRzWzRdID09PSAncmVmcmVzaCcpIHtcblxuICAgICAgY29uc3QgcmVzcG9uc2U6IFBhcnRpYWw8QWpheFJlc3BvbnNlPiA9IHtcbiAgICAgICAgcmVzcG9uc2U6IHsgdG9rZW46IHNlcnZlci5jb252ZXJzYXRpb24udG9rZW4gfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlIGFzIEFqYXhSZXNwb25zZTtcbiAgICB9XG5cbiAgICBpZiAocGFydHNbM10gIT09ICdjb252ZXJzYXRpb25zJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgY29uc3QgY29udmVyc2F0aW9uOiBEaXJlY3RMaW5lRXhwb3J0LkNvbnZlcnNhdGlvbiA9IHtcbiAgICAgICAgY29udmVyc2F0aW9uSWQ6IHNlcnZlci5jb252ZXJzYXRpb24uY29udmVyc2F0aW9uSWQsXG4gICAgICAgIHRva2VuOiBzZXJ2ZXIuY29udmVyc2F0aW9uLnRva2VuLFxuICAgICAgICBzdHJlYW1Vcmw6IGNyZWF0ZVN0cmVhbVVybCgwKSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBQYXJ0aWFsPEFqYXhSZXNwb25zZT4gPSB7XG4gICAgICAgIHJlc3BvbnNlOiBjb252ZXJzYXRpb24sXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNwb25zZSBhcyBBamF4UmVzcG9uc2U7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzWzRdICE9PSBzZXJ2ZXIuY29udmVyc2F0aW9uLmNvbnZlcnNhdGlvbklkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICB9XG5cbiAgICBpZiAocGFydHNbNV0gPT09ICdhY3Rpdml0aWVzJykge1xuICAgICAgY29uc3QgcmVzcG9uc2VUb2tlbiA9IHRva2VuUmVzcG9uc2Uoc2VydmVyLCB1cmxPclJlcXVlc3QpO1xuICAgICAgaWYgKHJlc3BvbnNlVG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlVG9rZW47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFjdGl2aXR5OiBEaXJlY3RMaW5lRXhwb3J0LkFjdGl2aXR5ID0gdXJsT3JSZXF1ZXN0LmJvZHk7XG5cbiAgICAgIGNvbnN0IGFmdGVyID0gc2VydmVyLmNvbnZlcnNhdGlvbi5oaXN0b3J5LnB1c2goYWN0aXZpdHkpO1xuICAgICAgY29uc3Qgc3RhcnQgPSBhZnRlciAtIDE7XG5cbiAgICAgIGZvciAoY29uc3Qgc29ja2V0IG9mIHNlcnZlci5jb252ZXJzYXRpb24uc29ja2V0cykge1xuICAgICAgICBzb2NrZXQucGxheShzdGFydCwgYWZ0ZXIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXNwb25zZTogUGFydGlhbDxBamF4UmVzcG9uc2U+ID0ge1xuICAgICAgICByZXNwb25zZTogeyBpZDogJ21lc3NhZ2VJZCcgfSxcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3BvbnNlIGFzIEFqYXhSZXNwb25zZTtcbiAgICB9XG4gICAgZWxzZSBpZiAocGFydHMubGVuZ3RoID09PSA1KSB7XG4gICAgICBjb25zdCByZXNwb25zZVRva2VuID0gdG9rZW5SZXNwb25zZShzZXJ2ZXIsIHVybE9yUmVxdWVzdCk7XG4gICAgICBpZiAocmVzcG9uc2VUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VUb2tlbjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd2F0ZXJtYXJrID0gc2VhcmNoUGFyYW1zLmdldCgnd2F0ZXJtYXJrJyk7XG4gICAgICBjb25zdCBzdGFydCA9IE51bWJlci5wYXJzZUludCh3YXRlcm1hcmssIDEwKTtcblxuICAgICAgY29uc3QgY29udmVyc2F0aW9uOiBEaXJlY3RMaW5lRXhwb3J0LkNvbnZlcnNhdGlvbiA9IHtcbiAgICAgICAgY29udmVyc2F0aW9uSWQ6IHNlcnZlci5jb252ZXJzYXRpb24uY29udmVyc2F0aW9uSWQsXG4gICAgICAgIHRva2VuOiBzZXJ2ZXIuY29udmVyc2F0aW9uLnRva2VuLFxuICAgICAgICBzdHJlYW1Vcmw6IGNyZWF0ZVN0cmVhbVVybChzdGFydCksXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXNwb25zZTogUGFydGlhbDxBamF4UmVzcG9uc2U+ID0ge1xuICAgICAgICByZXNwb25zZTogY29udmVyc2F0aW9uLFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzcG9uc2UgYXMgQWpheFJlc3BvbnNlO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcigpO1xuICB9KTtcblxuICBjb25zdCBtZXRob2QgPSAodXJsT3JSZXF1ZXN0OiBzdHJpbmcgfCBBamF4UmVxdWVzdCk6IE9ic2VydmFibGU8QWpheFJlc3BvbnNlPiA9PlxuICAgIG5ldyBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4oc3Vic2NyaWJlciA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBzdWJzY3JpYmVyLm5leHQoamF4KHVybE9yUmVxdWVzdCkpO1xuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgdHlwZSBWYWx1ZVR5cGU8VCwgVj4gPSB7XG4gICAgW0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBWID8gVFtLXSA6IG5ldmVyO1xuICB9XG5cbiAgdHlwZSBQcm9wZXJ0aWVzID0gVmFsdWVUeXBlPEFqYXhDcmVhdGlvbk1ldGhvZCwgRnVuY3Rpb24+O1xuXG4gIGNvbnN0IHByb3BlcnRpZXM6IFByb3BlcnRpZXMgPSB7XG4gICAgZ2V0OiAodXJsOiBzdHJpbmcsIGhlYWRlcnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4gPT4gbm90SW1wbGVtZW50ZWQoKSxcbiAgICBwb3N0OiAodXJsOiBzdHJpbmcsIGJvZHk/OiBhbnksIGhlYWRlcnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4gPT4gbm90SW1wbGVtZW50ZWQoKSxcbiAgICBwdXQ6ICh1cmw6IHN0cmluZywgYm9keT86IGFueSwgaGVhZGVycz86IE9iamVjdCk6IE9ic2VydmFibGU8QWpheFJlc3BvbnNlPiA9PiBub3RJbXBsZW1lbnRlZCgpLFxuICAgIHBhdGNoOiAodXJsOiBzdHJpbmcsIGJvZHk/OiBhbnksIGhlYWRlcnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4gPT4gbm90SW1wbGVtZW50ZWQoKSxcbiAgICBkZWxldGU6ICh1cmw6IHN0cmluZywgaGVhZGVycz86IE9iamVjdCk6IE9ic2VydmFibGU8QWpheFJlc3BvbnNlPiA9PiBub3RJbXBsZW1lbnRlZCgpLFxuICAgIGdldEpTT046ICh1cmw6IHN0cmluZywgaGVhZGVycz86IE9iamVjdCkgPT4gbm90SW1wbGVtZW50ZWQoKSxcbiAgfTtcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihtZXRob2QsIHByb3BlcnRpZXMpO1xufVxuXG4vLyBNT0NLIFdlYlNvY2tldCAodXNlcyBzaGFyZWQgc3RhdGUgaW4gU2VydmVyKVxuXG50eXBlIFdlYlNvY2tldENvbnN0cnVjdG9yID0gdHlwZW9mIFdlYlNvY2tldDtcbnR5cGUgRXZlbnRIYW5kbGVyPEUgZXh0ZW5kcyBFdmVudD4gPSAodGhpczogV2ViU29ja2V0LCBldjogRSkgPT4gYW55O1xuXG5leHBvcnQgY29uc3QgbW9ja1dlYlNvY2tldCA9IChzZXJ2ZXI6IFNlcnZlcik6IFdlYlNvY2tldENvbnN0cnVjdG9yID0+XG4gIGNsYXNzIE1vY2tXZWJTb2NrZXQgaW1wbGVtZW50cyBXZWJTb2NrZXQsIEFjdGl2aXR5U29ja2V0IHtcbiAgICBjb25zdHJ1Y3Rvcih1cmw6IHN0cmluZywgcHJvdG9jb2xzPzogc3RyaW5nIHwgc3RyaW5nW10pIHtcblxuICAgICAgc2VydmVyLnNjaGVkdWxlci5zY2hlZHVsZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVhZHlTdGF0ZSA9IFdlYlNvY2tldC5DT05ORUNUSU5HO1xuICAgICAgICBzZXJ2ZXIuY29udmVyc2F0aW9uLnNvY2tldHMuYWRkKHRoaXMpO1xuICAgICAgICB0aGlzLm9ub3BlbihuZXcgRXZlbnQoJ29wZW4nKSk7XG4gICAgICAgIHRoaXMucmVhZHlTdGF0ZSA9IFdlYlNvY2tldC5PUEVOO1xuICAgICAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHVybCk7XG4gICAgICAgIGNvbnN0IHdhdGVybWFyayA9IHVyaS5zZWFyY2hQYXJhbXMuZ2V0KGtleVdhdGVybWFyaylcbiAgICAgICAgaWYgKHdhdGVybWFyayAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gTnVtYmVyLnBhcnNlSW50KHdhdGVybWFyaywgMTApO1xuICAgICAgICAgIHRoaXMucGxheShzdGFydCwgc2VydmVyLmNvbnZlcnNhdGlvbi5oaXN0b3J5Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHBsYXkoc3RhcnQ6IG51bWJlciwgYWZ0ZXI6IG51bWJlcikge1xuXG4gICAgICBjb25zdCB7IGNvbnZlcnNhdGlvbjogeyBoaXN0b3J5IH0gfSA9IHNlcnZlcjtcbiAgICAgIGNvbnN0IGFjdGl2aXRpZXMgPSBoaXN0b3J5LnNsaWNlKHN0YXJ0LCBhZnRlcik7XG4gICAgICBjb25zdCB3YXRlcm1hcmsgPSBoaXN0b3J5Lmxlbmd0aC50b1N0cmluZygpO1xuICAgICAgY29uc3QgYWN0aXZpdHlHcm91cDogRGlyZWN0TGluZUV4cG9ydC5BY3Rpdml0eUdyb3VwID0ge1xuICAgICAgICBhY3Rpdml0aWVzLFxuICAgICAgICB3YXRlcm1hcmssXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBuZXcgTWVzc2FnZUV2ZW50KCd0eXBlJywgeyBkYXRhOiBKU09OLnN0cmluZ2lmeShhY3Rpdml0eUdyb3VwKSB9KTtcblxuICAgICAgdGhpcy5vbm1lc3NhZ2UobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgYmluYXJ5VHlwZTogQmluYXJ5VHlwZSA9ICdhcnJheWJ1ZmZlcic7XG4gICAgcmVhZG9ubHkgYnVmZmVyZWRBbW91bnQ6IG51bWJlciA9IDA7XG4gICAgcmVhZG9ubHkgZXh0ZW5zaW9uczogc3RyaW5nID0gJyc7XG4gICAgcmVhZG9ubHkgcHJvdG9jb2w6IHN0cmluZyA9ICdodHRwcyc7XG4gICAgcmVhZHlTdGF0ZTogbnVtYmVyID0gV2ViU29ja2V0LkNMT1NFRDtcbiAgICByZWFkb25seSB1cmw6IHN0cmluZyA9ICcnO1xuICAgIHJlYWRvbmx5IENMT1NFRDogbnVtYmVyID0gV2ViU29ja2V0LkNMT1NFRDtcbiAgICByZWFkb25seSBDTE9TSU5HOiBudW1iZXIgPSBXZWJTb2NrZXQuQ0xPU0lORztcbiAgICByZWFkb25seSBDT05ORUNUSU5HOiBudW1iZXIgPSBXZWJTb2NrZXQuQ09OTkVDVElORztcbiAgICByZWFkb25seSBPUEVOOiBudW1iZXIgPSBXZWJTb2NrZXQuT1BFTjtcblxuICAgIG9uY2xvc2U6IEV2ZW50SGFuZGxlcjxDbG9zZUV2ZW50PjtcbiAgICBvbmVycm9yOiBFdmVudEhhbmRsZXI8RXZlbnQ+O1xuICAgIG9ubWVzc2FnZTogRXZlbnRIYW5kbGVyPE1lc3NhZ2VFdmVudD47XG4gICAgb25vcGVuOiBFdmVudEhhbmRsZXI8RXZlbnQ+O1xuXG4gICAgY2xvc2UoY29kZT86IG51bWJlciwgcmVhc29uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICB0aGlzLnJlYWR5U3RhdGUgPSBXZWJTb2NrZXQuQ0xPU0lORztcbiAgICAgIHRoaXMub25jbG9zZShuZXcgQ2xvc2VFdmVudCgnY2xvc2UnKSlcbiAgICAgIHNlcnZlci5jb252ZXJzYXRpb24uc29ja2V0cy5kZWxldGUodGhpcyk7XG4gICAgICB0aGlzLnJlYWR5U3RhdGUgPSBXZWJTb2NrZXQuQ0xPU0VEO1xuICAgIH1cblxuICAgIHNlbmQoZGF0YTogc3RyaW5nIHwgQXJyYXlCdWZmZXJMaWtlIHwgQmxvYiB8IEFycmF5QnVmZmVyVmlldyk6IHZvaWQge1xuICAgIH1cblxuICAgIGFkZEV2ZW50TGlzdGVuZXIoKSB7IHRocm93IG5ldyBFcnJvcigpOyB9XG4gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcigpIHsgdGhyb3cgbmV3IEVycm9yKCk7IH1cbiAgICBkaXNwYXRjaEV2ZW50KCk6IGJvb2xlYW4geyB0aHJvdyBuZXcgRXJyb3IoKTsgfVxuXG4gICAgc3RhdGljIENMT1NFRCA9IFdlYlNvY2tldC5DTE9TRUQ7XG4gICAgc3RhdGljIENMT1NJTkcgPSBXZWJTb2NrZXQuQ0xPU0lORztcbiAgICBzdGF0aWMgQ09OTkVDVElORyA9IFdlYlNvY2tldC5DT05ORUNUSU5HO1xuICAgIHN0YXRpYyBPUEVOID0gV2ViU29ja2V0Lk9QRU47XG4gIH07XG5cbi8vIE1PQ0sgc2VydmljZXMgKHRvcC1sZXZlbCBhZ2dyZWdhdGlvbiBvZiBhbGwgbW9ja3MpXG5cbmV4cG9ydCBjb25zdCBtb2NrU2VydmljZXMgPSAoc2VydmVyOiBTZXJ2ZXIsIHNjaGVkdWxlcjogVGVzdFNjaGVkdWxlcik6IERpcmVjdExpbmVFeHBvcnQuU2VydmljZXMgPT4gKHtcbiAgc2NoZWR1bGVyLFxuICBXZWJTb2NrZXQ6IG1vY2tXZWJTb2NrZXQoc2VydmVyKSxcbiAgYWpheDogbW9ja0FqYXgoc2VydmVyKSxcbiAgcmFuZG9tOiAoKSA9PiAwLFxufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFDQSxJQUFBQSxLQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyxJQUFBLEdBQUFELE9BQUE7QUFBMkMsU0FBQUUs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
282
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcnhqcyIsInJlcXVpcmUiLCJfdXJsIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJyIiwiZSIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJub3RJbXBsZW1lbnRlZCIsIkVycm9yIiwibW9ja0FjdGl2aXR5IiwiZXhwb3J0cyIsInRleHQiLCJ0eXBlIiwiaWQiLCJ0b2tlblByZWZpeCIsIm1vY2tTZXJ2ZXIiLCJzY2hlZHVsZXIiLCJjb252ZXJzYXRpb24iLCJzb2NrZXRzIiwiU2V0IiwiY29udmVyc2F0aW9uSWQiLCJoaXN0b3J5IiwidG9rZW4iLCJ0b2tlblJlc3BvbnNlIiwic2VydmVyIiwicmVxdWVzdCIsImhlYWRlcnMiLCJhdXRob3JpemF0aW9uIiwiY29uY2F0IiwicmVzcG9uc2UiLCJzdGF0dXMiLCJpbmplY3RDbG9zZSIsImZvckVhY2giLCJvbmNsb3NlIiwiQ2xvc2VFdmVudCIsImluamVjdE5ld1Rva2VuIiwic3VmZml4IiwiTnVtYmVyIiwicGFyc2VJbnQiLCJzdWJzdHJpbmciLCJrZXlXYXRlcm1hcmsiLCJtb2NrQWpheCIsImN1c3RvbUFqYXgiLCJ1cmlCYXNlIiwiVVJMIiwiY3JlYXRlU3RyZWFtVXJsIiwid2F0ZXJtYXJrIiwidXJpIiwicGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwiYXBwZW5kIiwic2VhcmNoIiwiamF4IiwidXJsT3JSZXF1ZXN0IiwidXJsIiwicGF0aG5hbWUiLCJzZWFyY2hQYXJhbXMiLCJwYXJ0cyIsInNwbGl0Iiwic3RyZWFtVXJsIiwicmVzcG9uc2VUb2tlbiIsImFjdGl2aXR5IiwiYm9keSIsImFmdGVyIiwicHVzaCIsInN0YXJ0IiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJzb2NrZXQiLCJwbGF5IiwiZXJyIiwiZ2V0IiwibWV0aG9kIiwiT2JzZXJ2YWJsZSIsInN1YnNjcmliZXIiLCJjb21wbGV0ZSIsImVycm9yIiwicHJvcGVydGllcyIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImRlbGV0ZSIsImdldEpTT04iLCJPYmplY3QiLCJhc3NpZ24iLCJtb2NrV2ViU29ja2V0IiwiX01vY2tXZWJTb2NrZXQiLCJNb2NrV2ViU29ja2V0IiwicHJvdG9jb2xzIiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2RlZmluZVByb3BlcnR5MiIsIldlYlNvY2tldCIsIkNMT1NFRCIsIkNMT1NJTkciLCJDT05ORUNUSU5HIiwiT1BFTiIsInNjaGVkdWxlIiwicmVhZHlTdGF0ZSIsImFkZCIsIm9ub3BlbiIsIkV2ZW50IiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsImFjdGl2aXRpZXMiLCJhY3Rpdml0eUdyb3VwIiwibWVzc2FnZSIsIk1lc3NhZ2VFdmVudCIsImRhdGEiLCJKU09OIiwic3RyaW5naWZ5Iiwib25tZXNzYWdlIiwiY2xvc2UiLCJjb2RlIiwicmVhc29uIiwic2VuZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZGlzcGF0Y2hFdmVudCIsIm1vY2tTZXJ2aWNlcyIsImFqYXgiLCJyYW5kb20iXSwic291cmNlcyI6WyIuLi9zcmMvZGlyZWN0TGluZS5tb2NrLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIERpcmVjdExpbmVFeHBvcnQgZnJvbSBcIi4vZGlyZWN0TGluZVwiO1xuaW1wb3J0IHsgVGVzdFNjaGVkdWxlciwgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBBamF4Q3JlYXRpb25NZXRob2QsIEFqYXhSZXF1ZXN0LCBBamF4UmVzcG9uc2UgfSBmcm9tIFwicnhqcy9vYnNlcnZhYmxlL2RvbS9BamF4T2JzZXJ2YWJsZVwiO1xuaW1wb3J0IHsgVVJMLCBVUkxTZWFyY2hQYXJhbXMgfSBmcm9tICd1cmwnO1xuXG4vLyBNT0NLIGhlbHBlcnNcblxuY29uc3Qgbm90SW1wbGVtZW50ZWQgPSAoKTogbmV2ZXIgPT4geyB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpIH07XG5cbi8vIE1PQ0sgQWN0aXZpdHlcblxuZXhwb3J0IGNvbnN0IG1vY2tBY3Rpdml0eSA9ICh0ZXh0OiBzdHJpbmcpOiBEaXJlY3RMaW5lRXhwb3J0LkFjdGl2aXR5ID0+ICh7IHR5cGU6ICdtZXNzYWdlJywgZnJvbTogeyBpZDogJ3NlbmRlcicgfSwgdGV4dCB9KTtcblxuLy8gTU9DSyBEaXJlY3RMaW5lIFNlcnZlciAoc2hhcmVkIHN0YXRlIHVzZWQgYnkgT2JzZXJ2YWJsZS5hamF4IGFuZCBXZWJTb2NrZXQgbW9ja3MpXG5cbmludGVyZmFjZSBBY3Rpdml0eVNvY2tldCB7XG4gIHBsYXk6IChzdGFydDogbnVtYmVyLCBhZnRlcjogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBTb2NrZXQgPSBXZWJTb2NrZXQgJiBBY3Rpdml0eVNvY2tldDtcblxuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzYXRpb24ge1xuICBzb2NrZXRzOiBTZXQ8U29ja2V0PjtcbiAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgaGlzdG9yeTogQXJyYXk8RGlyZWN0TGluZUV4cG9ydC5BY3Rpdml0eT47XG4gIHRva2VuOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmVyIHtcbiAgc2NoZWR1bGVyOiBUZXN0U2NoZWR1bGVyO1xuICBjb252ZXJzYXRpb246IENvbnZlcnNhdGlvbjtcbn1cblxuY29uc3QgdG9rZW5QcmVmaXggPSAndG9rZW4nO1xuXG5leHBvcnQgY29uc3QgbW9ja1NlcnZlciA9IChzY2hlZHVsZXI6IFRlc3RTY2hlZHVsZXIpOiBTZXJ2ZXIgPT4gKHtcbiAgc2NoZWR1bGVyLFxuICBjb252ZXJzYXRpb246IHtcbiAgICBzb2NrZXRzOiBuZXcgU2V0PFNvY2tldD4oKSxcbiAgICBjb252ZXJzYXRpb25JZDogJ09uZUNvbnZlcnNhdGlvbicsXG4gICAgaGlzdG9yeTogW10sXG4gICAgdG9rZW46IHRva2VuUHJlZml4ICsgJzEnLFxuICB9XG59KTtcblxuY29uc3QgdG9rZW5SZXNwb25zZSA9IChzZXJ2ZXI6IFNlcnZlciwgcmVxdWVzdDogQWpheFJlcXVlc3QpOiBBamF4UmVzcG9uc2UgfCBudWxsID0+IHtcbiAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXF1ZXN0O1xuICBjb25zdCBhdXRob3JpemF0aW9uID0gaGVhZGVyc1snQXV0aG9yaXphdGlvbiddO1xuICBpZiAoYXV0aG9yaXphdGlvbiA9PT0gYEJlYXJlciAke3NlcnZlci5jb252ZXJzYXRpb24udG9rZW59YCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2U6IFBhcnRpYWw8QWpheFJlc3BvbnNlPiA9IHtcbiAgICBzdGF0dXM6IDQwMyxcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZSBhcyBBamF4UmVzcG9uc2U7XG59XG5cbmV4cG9ydCBjb25zdCBpbmplY3RDbG9zZSA9IChzZXJ2ZXI6IFNlcnZlcik6IHZvaWQgPT5cbiAgc2VydmVyLmNvbnZlcnNhdGlvbi5zb2NrZXRzLmZvckVhY2gocyA9PiBzLm9uY2xvc2UobmV3IENsb3NlRXZlbnQoJ2Nsb3NlJykpKTtcblxuZXhwb3J0IGNvbnN0IGluamVjdE5ld1Rva2VuID0gKHNlcnZlcjogU2VydmVyKTogdm9pZCA9PiB7XG4gIGNvbnN0IHsgY29udmVyc2F0aW9uIH0gPSBzZXJ2ZXI7XG4gIGNvbnN0IHN1ZmZpeCA9IE51bWJlci5wYXJzZUludChjb252ZXJzYXRpb24udG9rZW4uc3Vic3RyaW5nKHRva2VuUHJlZml4Lmxlbmd0aCksIDEwKSArIDFcbiAgY29udmVyc2F0aW9uLnRva2VuID0gdG9rZW5QcmVmaXggKyBzdWZmaXg7XG59XG5cbmNvbnN0IGtleVdhdGVybWFyayA9ICd3YXRlcm1hcmsnO1xuXG50eXBlIGFqYXhUeXBlID0gKHVybE9yUmVxdWVzdDogc3RyaW5nIHwgQWpheFJlcXVlc3QpID0+IEFqYXhSZXNwb25zZTtcblxuLy8gTU9DSyBPYnNlcnZhYmxlLmFqYXggKHVzZXMgc2hhcmVkIHN0YXRlIGluIFNlcnZlcilcblxuZXhwb3J0IGNvbnN0IG1vY2tBamF4ID0gKHNlcnZlcjogU2VydmVyLCBjdXN0b21BamF4PzogYWpheFR5cGUpOiBBamF4Q3JlYXRpb25NZXRob2QgPT4ge1xuXG4gIGNvbnN0IHVyaUJhc2UgPSBuZXcgVVJMKCdodHRwczovL2RpcmVjdGxpbmUuYm90ZnJhbWV3b3JrLmNvbS92My9kaXJlY3RsaW5lLycpO1xuICBjb25zdCBjcmVhdGVTdHJlYW1VcmwgPSAod2F0ZXJtYXJrOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwoJ2NvbnZlcnNhdGlvbnMvc3RyZWFtJywgdXJpQmFzZSk7XG4gICAgaWYgKHdhdGVybWFyayA+IDApIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIHBhcmFtcy5hcHBlbmQoa2V5V2F0ZXJtYXJrLCB3YXRlcm1hcmsudG9TdHJpbmcoMTApKTtcbiAgICAgIHVyaS5zZWFyY2ggPSBwYXJhbXMudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXJpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBjb25zdCBqYXggPSBjdXN0b21BamF4IHx8ICgodXJsT3JSZXF1ZXN0OiBzdHJpbmcgfCBBamF4UmVxdWVzdCk6IEFqYXhSZXNwb25zZSA9PiB7XG4gICAgaWYgKHR5cGVvZiB1cmxPclJlcXVlc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHVybE9yUmVxdWVzdC51cmwpO1xuXG4gICAgY29uc3QgeyBwYXRobmFtZSwgc2VhcmNoUGFyYW1zIH0gPSB1cmk7XG5cbiAgICBjb25zdCBwYXJ0cyA9IHBhdGhuYW1lLnNwbGl0KCcvJyk7XG5cbiAgICBpZiAocGFydHNbM10gPT09ICd0b2tlbnMnICYmIHBhcnRzWzRdID09PSAncmVmcmVzaCcpIHtcblxuICAgICAgY29uc3QgcmVzcG9uc2U6IFBhcnRpYWw8QWpheFJlc3BvbnNlPiA9IHtcbiAgICAgICAgcmVzcG9uc2U6IHsgdG9rZW46IHNlcnZlci5jb252ZXJzYXRpb24udG9rZW4gfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlIGFzIEFqYXhSZXNwb25zZTtcbiAgICB9XG5cbiAgICBpZiAocGFydHNbM10gIT09ICdjb252ZXJzYXRpb25zJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgY29uc3QgY29udmVyc2F0aW9uOiBEaXJlY3RMaW5lRXhwb3J0LkNvbnZlcnNhdGlvbiA9IHtcbiAgICAgICAgY29udmVyc2F0aW9uSWQ6IHNlcnZlci5jb252ZXJzYXRpb24uY29udmVyc2F0aW9uSWQsXG4gICAgICAgIHRva2VuOiBzZXJ2ZXIuY29udmVyc2F0aW9uLnRva2VuLFxuICAgICAgICBzdHJlYW1Vcmw6IGNyZWF0ZVN0cmVhbVVybCgwKSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBQYXJ0aWFsPEFqYXhSZXNwb25zZT4gPSB7XG4gICAgICAgIHJlc3BvbnNlOiBjb252ZXJzYXRpb24sXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNwb25zZSBhcyBBamF4UmVzcG9uc2U7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzWzRdICE9PSBzZXJ2ZXIuY29udmVyc2F0aW9uLmNvbnZlcnNhdGlvbklkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICB9XG5cbiAgICBpZiAocGFydHNbNV0gPT09ICdhY3Rpdml0aWVzJykge1xuICAgICAgY29uc3QgcmVzcG9uc2VUb2tlbiA9IHRva2VuUmVzcG9uc2Uoc2VydmVyLCB1cmxPclJlcXVlc3QpO1xuICAgICAgaWYgKHJlc3BvbnNlVG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlVG9rZW47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFjdGl2aXR5OiBEaXJlY3RMaW5lRXhwb3J0LkFjdGl2aXR5ID0gdXJsT3JSZXF1ZXN0LmJvZHk7XG5cbiAgICAgIGNvbnN0IGFmdGVyID0gc2VydmVyLmNvbnZlcnNhdGlvbi5oaXN0b3J5LnB1c2goYWN0aXZpdHkpO1xuICAgICAgY29uc3Qgc3RhcnQgPSBhZnRlciAtIDE7XG5cbiAgICAgIGZvciAoY29uc3Qgc29ja2V0IG9mIHNlcnZlci5jb252ZXJzYXRpb24uc29ja2V0cykge1xuICAgICAgICBzb2NrZXQucGxheShzdGFydCwgYWZ0ZXIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXNwb25zZTogUGFydGlhbDxBamF4UmVzcG9uc2U+ID0ge1xuICAgICAgICByZXNwb25zZTogeyBpZDogJ21lc3NhZ2VJZCcgfSxcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3BvbnNlIGFzIEFqYXhSZXNwb25zZTtcbiAgICB9XG4gICAgZWxzZSBpZiAocGFydHMubGVuZ3RoID09PSA1KSB7XG4gICAgICBjb25zdCByZXNwb25zZVRva2VuID0gdG9rZW5SZXNwb25zZShzZXJ2ZXIsIHVybE9yUmVxdWVzdCk7XG4gICAgICBpZiAocmVzcG9uc2VUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VUb2tlbjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd2F0ZXJtYXJrID0gc2VhcmNoUGFyYW1zLmdldCgnd2F0ZXJtYXJrJyk7XG4gICAgICBjb25zdCBzdGFydCA9IE51bWJlci5wYXJzZUludCh3YXRlcm1hcmssIDEwKTtcblxuICAgICAgY29uc3QgY29udmVyc2F0aW9uOiBEaXJlY3RMaW5lRXhwb3J0LkNvbnZlcnNhdGlvbiA9IHtcbiAgICAgICAgY29udmVyc2F0aW9uSWQ6IHNlcnZlci5jb252ZXJzYXRpb24uY29udmVyc2F0aW9uSWQsXG4gICAgICAgIHRva2VuOiBzZXJ2ZXIuY29udmVyc2F0aW9uLnRva2VuLFxuICAgICAgICBzdHJlYW1Vcmw6IGNyZWF0ZVN0cmVhbVVybChzdGFydCksXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXNwb25zZTogUGFydGlhbDxBamF4UmVzcG9uc2U+ID0ge1xuICAgICAgICByZXNwb25zZTogY29udmVyc2F0aW9uLFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzcG9uc2UgYXMgQWpheFJlc3BvbnNlO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcigpO1xuICB9KTtcblxuICBjb25zdCBtZXRob2QgPSAodXJsT3JSZXF1ZXN0OiBzdHJpbmcgfCBBamF4UmVxdWVzdCk6IE9ic2VydmFibGU8QWpheFJlc3BvbnNlPiA9PlxuICAgIG5ldyBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4oc3Vic2NyaWJlciA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBzdWJzY3JpYmVyLm5leHQoamF4KHVybE9yUmVxdWVzdCkpO1xuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgdHlwZSBWYWx1ZVR5cGU8VCwgVj4gPSB7XG4gICAgW0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBWID8gVFtLXSA6IG5ldmVyO1xuICB9XG5cbiAgdHlwZSBQcm9wZXJ0aWVzID0gVmFsdWVUeXBlPEFqYXhDcmVhdGlvbk1ldGhvZCwgRnVuY3Rpb24+O1xuXG4gIGNvbnN0IHByb3BlcnRpZXM6IFByb3BlcnRpZXMgPSB7XG4gICAgZ2V0OiAodXJsOiBzdHJpbmcsIGhlYWRlcnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4gPT4gbm90SW1wbGVtZW50ZWQoKSxcbiAgICBwb3N0OiAodXJsOiBzdHJpbmcsIGJvZHk/OiBhbnksIGhlYWRlcnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4gPT4gbm90SW1wbGVtZW50ZWQoKSxcbiAgICBwdXQ6ICh1cmw6IHN0cmluZywgYm9keT86IGFueSwgaGVhZGVycz86IE9iamVjdCk6IE9ic2VydmFibGU8QWpheFJlc3BvbnNlPiA9PiBub3RJbXBsZW1lbnRlZCgpLFxuICAgIHBhdGNoOiAodXJsOiBzdHJpbmcsIGJvZHk/OiBhbnksIGhlYWRlcnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4gPT4gbm90SW1wbGVtZW50ZWQoKSxcbiAgICBkZWxldGU6ICh1cmw6IHN0cmluZywgaGVhZGVycz86IE9iamVjdCk6IE9ic2VydmFibGU8QWpheFJlc3BvbnNlPiA9PiBub3RJbXBsZW1lbnRlZCgpLFxuICAgIGdldEpTT046ICh1cmw6IHN0cmluZywgaGVhZGVycz86IE9iamVjdCkgPT4gbm90SW1wbGVtZW50ZWQoKSxcbiAgfTtcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihtZXRob2QsIHByb3BlcnRpZXMpO1xufVxuXG4vLyBNT0NLIFdlYlNvY2tldCAodXNlcyBzaGFyZWQgc3RhdGUgaW4gU2VydmVyKVxuXG50eXBlIFdlYlNvY2tldENvbnN0cnVjdG9yID0gdHlwZW9mIFdlYlNvY2tldDtcbnR5cGUgRXZlbnRIYW5kbGVyPEUgZXh0ZW5kcyBFdmVudD4gPSAodGhpczogV2ViU29ja2V0LCBldjogRSkgPT4gYW55O1xuXG5leHBvcnQgY29uc3QgbW9ja1dlYlNvY2tldCA9IChzZXJ2ZXI6IFNlcnZlcik6IFdlYlNvY2tldENvbnN0cnVjdG9yID0+XG4gIGNsYXNzIE1vY2tXZWJTb2NrZXQgaW1wbGVtZW50cyBXZWJTb2NrZXQsIEFjdGl2aXR5U29ja2V0IHtcbiAgICBjb25zdHJ1Y3Rvcih1cmw6IHN0cmluZywgcHJvdG9jb2xzPzogc3RyaW5nIHwgc3RyaW5nW10pIHtcblxuICAgICAgc2VydmVyLnNjaGVkdWxlci5zY2hlZHVsZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVhZHlTdGF0ZSA9IFdlYlNvY2tldC5DT05ORUNUSU5HO1xuICAgICAgICBzZXJ2ZXIuY29udmVyc2F0aW9uLnNvY2tldHMuYWRkKHRoaXMpO1xuICAgICAgICB0aGlzLm9ub3BlbihuZXcgRXZlbnQoJ29wZW4nKSk7XG4gICAgICAgIHRoaXMucmVhZHlTdGF0ZSA9IFdlYlNvY2tldC5PUEVOO1xuICAgICAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHVybCk7XG4gICAgICAgIGNvbnN0IHdhdGVybWFyayA9IHVyaS5zZWFyY2hQYXJhbXMuZ2V0KGtleVdhdGVybWFyaylcbiAgICAgICAgaWYgKHdhdGVybWFyayAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gTnVtYmVyLnBhcnNlSW50KHdhdGVybWFyaywgMTApO1xuICAgICAgICAgIHRoaXMucGxheShzdGFydCwgc2VydmVyLmNvbnZlcnNhdGlvbi5oaXN0b3J5Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHBsYXkoc3RhcnQ6IG51bWJlciwgYWZ0ZXI6IG51bWJlcikge1xuXG4gICAgICBjb25zdCB7IGNvbnZlcnNhdGlvbjogeyBoaXN0b3J5IH0gfSA9IHNlcnZlcjtcbiAgICAgIGNvbnN0IGFjdGl2aXRpZXMgPSBoaXN0b3J5LnNsaWNlKHN0YXJ0LCBhZnRlcik7XG4gICAgICBjb25zdCB3YXRlcm1hcmsgPSBoaXN0b3J5Lmxlbmd0aC50b1N0cmluZygpO1xuICAgICAgY29uc3QgYWN0aXZpdHlHcm91cDogRGlyZWN0TGluZUV4cG9ydC5BY3Rpdml0eUdyb3VwID0ge1xuICAgICAgICBhY3Rpdml0aWVzLFxuICAgICAgICB3YXRlcm1hcmssXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBuZXcgTWVzc2FnZUV2ZW50KCd0eXBlJywgeyBkYXRhOiBKU09OLnN0cmluZ2lmeShhY3Rpdml0eUdyb3VwKSB9KTtcblxuICAgICAgdGhpcy5vbm1lc3NhZ2UobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgYmluYXJ5VHlwZTogQmluYXJ5VHlwZSA9ICdhcnJheWJ1ZmZlcic7XG4gICAgcmVhZG9ubHkgYnVmZmVyZWRBbW91bnQ6IG51bWJlciA9IDA7XG4gICAgcmVhZG9ubHkgZXh0ZW5zaW9uczogc3RyaW5nID0gJyc7XG4gICAgcmVhZG9ubHkgcHJvdG9jb2w6IHN0cmluZyA9ICdodHRwcyc7XG4gICAgcmVhZHlTdGF0ZTogbnVtYmVyID0gV2ViU29ja2V0LkNMT1NFRDtcbiAgICByZWFkb25seSB1cmw6IHN0cmluZyA9ICcnO1xuICAgIHJlYWRvbmx5IENMT1NFRDogbnVtYmVyID0gV2ViU29ja2V0LkNMT1NFRDtcbiAgICByZWFkb25seSBDTE9TSU5HOiBudW1iZXIgPSBXZWJTb2NrZXQuQ0xPU0lORztcbiAgICByZWFkb25seSBDT05ORUNUSU5HOiBudW1iZXIgPSBXZWJTb2NrZXQuQ09OTkVDVElORztcbiAgICByZWFkb25seSBPUEVOOiBudW1iZXIgPSBXZWJTb2NrZXQuT1BFTjtcblxuICAgIG9uY2xvc2U6IEV2ZW50SGFuZGxlcjxDbG9zZUV2ZW50PjtcbiAgICBvbmVycm9yOiBFdmVudEhhbmRsZXI8RXZlbnQ+O1xuICAgIG9ubWVzc2FnZTogRXZlbnRIYW5kbGVyPE1lc3NhZ2VFdmVudD47XG4gICAgb25vcGVuOiBFdmVudEhhbmRsZXI8RXZlbnQ+O1xuXG4gICAgY2xvc2UoY29kZT86IG51bWJlciwgcmVhc29uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICB0aGlzLnJlYWR5U3RhdGUgPSBXZWJTb2NrZXQuQ0xPU0lORztcbiAgICAgIHRoaXMub25jbG9zZShuZXcgQ2xvc2VFdmVudCgnY2xvc2UnKSlcbiAgICAgIHNlcnZlci5jb252ZXJzYXRpb24uc29ja2V0cy5kZWxldGUodGhpcyk7XG4gICAgICB0aGlzLnJlYWR5U3RhdGUgPSBXZWJTb2NrZXQuQ0xPU0VEO1xuICAgIH1cblxuICAgIHNlbmQoZGF0YTogc3RyaW5nIHwgQXJyYXlCdWZmZXJMaWtlIHwgQmxvYiB8IEFycmF5QnVmZmVyVmlldyk6IHZvaWQge1xuICAgIH1cblxuICAgIGFkZEV2ZW50TGlzdGVuZXIoKSB7IHRocm93IG5ldyBFcnJvcigpOyB9XG4gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcigpIHsgdGhyb3cgbmV3IEVycm9yKCk7IH1cbiAgICBkaXNwYXRjaEV2ZW50KCk6IGJvb2xlYW4geyB0aHJvdyBuZXcgRXJyb3IoKTsgfVxuXG4gICAgc3RhdGljIENMT1NFRCA9IFdlYlNvY2tldC5DTE9TRUQ7XG4gICAgc3RhdGljIENMT1NJTkcgPSBXZWJTb2NrZXQuQ0xPU0lORztcbiAgICBzdGF0aWMgQ09OTkVDVElORyA9IFdlYlNvY2tldC5DT05ORUNUSU5HO1xuICAgIHN0YXRpYyBPUEVOID0gV2ViU29ja2V0Lk9QRU47XG4gIH07XG5cbi8vIE1PQ0sgc2VydmljZXMgKHRvcC1sZXZlbCBhZ2dyZWdhdGlvbiBvZiBhbGwgbW9ja3MpXG5cbmV4cG9ydCBjb25zdCBtb2NrU2VydmljZXMgPSAoc2VydmVyOiBTZXJ2ZXIsIHNjaGVkdWxlcjogVGVzdFNjaGVkdWxlcik6IERpcmVjdExpbmVFeHBvcnQuU2VydmljZXMgPT4gKHtcbiAgc2NoZWR1bGVyLFxuICBXZWJTb2NrZXQ6IG1vY2tXZWJTb2NrZXQoc2VydmVyKSxcbiAgYWpheDogbW9ja0FqYXgoc2VydmVyKSxcbiAgcmFuZG9tOiAoKSA9PiAwLFxufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFDQSxJQUFBQSxLQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyxJQUFBLEdBQUFELE9BQUE7QUFBMkMsU0FBQUUsMkJBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLHlCQUFBQyxNQUFBLElBQUFILENBQUEsQ0FBQUcsTUFBQSxDQUFBQyxRQUFBLEtBQUFKLENBQUEscUJBQUFFLENBQUEsUUFBQUcsS0FBQSxDQUFBQyxPQUFBLENBQUFOLENBQUEsTUFBQUUsQ0FBQSxHQUFBSywyQkFBQSxDQUFBUCxDQUFBLE1BQUFDLENBQUEsSUFBQUQsQ0FBQSx1QkFBQUEsQ0FBQSxDQUFBUSxNQUFBLElBQUFOLENBQUEsS0FBQUYsQ0FBQSxHQUFBRSxDQUFBLE9BQUFPLEVBQUEsTUFBQUMsQ0FBQSxZQUFBQSxFQUFBLGVBQUFDLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLFdBQUFBLEVBQUEsV0FBQUgsRUFBQSxJQUFBVCxDQUFBLENBQUFRLE1BQUEsS0FBQUssSUFBQSxXQUFBQSxJQUFBLE1BQUFDLEtBQUEsRUFBQWQsQ0FBQSxDQUFBUyxFQUFBLFVBQUFSLENBQUEsV0FBQUEsRUFBQUQsQ0FBQSxVQUFBQSxDQUFBLEtBQUFlLENBQUEsRUFBQUwsQ0FBQSxnQkFBQU0sU0FBQSxpSkFBQUMsQ0FBQSxFQUFBQyxDQUFBLE9BQUFDLENBQUEsZ0JBQUFSLENBQUEsV0FBQUEsRUFBQSxJQUFBVCxDQUFBLEdBQUFBLENBQUEsQ0FBQWtCLElBQUEsQ0FBQXBCLENBQUEsTUFBQVksQ0FBQSxXQUFBQSxFQUFBLFFBQUFaLENBQUEsR0FBQUUsQ0FBQSxDQUFBbUIsSUFBQSxXQUFBSCxDQUFBLEdBQUFsQixDQUFBLENBQUFhLElBQUEsRUFBQWIsQ0FBQSxLQUFBQyxDQUFBLFdBQUFBLEVBQUFELENBQUEsSUFBQW1CLENBQUEsT0FBQUYsQ0FBQSxHQUFBakIsQ0FBQSxLQUFBZSxDQUFBLFdBQUFBLEVBQUEsVUFBQUcsQ0FBQSxZQUFBaEIsQ0FBQSxjQUFBQSxDQUFBLDhCQUFBaUIsQ0FBQSxRQUFBRixDQUFBO0FBQUEsU0FBQVYsNEJBQUFQLENBQUEsRUFBQWtCLENBQUEsUUFBQWxCLENBQUEsMkJBQUFBLENBQUEsU0FBQXNCLGlCQUFBLENBQUF0QixDQUFBLEVBQUFrQixDQUFBLE9BQUFoQixDQUFBLE1BQUFxQixRQUFBLENBQUFILElBQUEsQ0FBQXBCLENBQUEsRUFBQXdCLEtBQUEsNkJBQUF0QixDQUFBLElBQUFGLENBQUEsQ0FBQXlCLFdBQUEsS0FBQXZCLENBQUEsR0FBQUYsQ0FBQSxDQUFBeUIsV0FBQSxDQUFBQyxJQUFBLGFBQUF4QixDQUFBLGNBQUFBLENBQUEsR0FBQUcsS0FBQSxDQUFBc0IsSUFBQSxDQUFBM0IsQ0FBQSxvQkFBQUUsQ0FBQSwrQ0FBQTBCLElBQUEsQ0FBQTFCLENBQUEsSUFBQW9CLGlCQUFBLENBQUF0QixDQUFBLEVBQUFrQixDQUFBO0FBQUEsU0FBQUksa0JBQUF0QixDQUFBLEVBQUFrQixDQUFBLGFBQUFBLENBQUEsSUFBQUEsQ0FBQSxHQUFBbEIsQ0FBQSxDQUFBUSxNQUFBLE1BQUFVLENBQUEsR0FBQWxCLENBQUEsQ0FBQVEsTUFBQSxZQUFBUCxDQUFBLE1BQUFXLENBQUEsR0FBQVAsS0FBQSxDQUFBYSxDQUFBLEdBQUFqQixDQUFBLEdBQUFpQixDQUFBLEVBQUFqQixDQUFBLElBQUFXLENBQUEsQ0FBQVgsQ0FBQSxJQUFBRCxDQUFBLENBQUFDLENBQUEsVUFBQVcsQ0FBQTtBQUUzQzs7QUFFQSxJQUFNaUIsY0FBYyxHQUFHLFNBQWpCQSxjQUFjQSxDQUFBLEVBQWdCO0VBQUUsTUFBTSxJQUFJQyxLQUFLLENBQUMsaUJBQWlCLENBQUM7QUFBQyxDQUFDOztBQUUxRTs7QUFFTyxJQUFNQyxZQUFZLEdBQUFDLE9BQUEsQ0FBQUQsWUFBQSxHQUFHLFNBQWZBLFlBQVlBLENBQUlFLElBQVk7RUFBQSxPQUFpQztJQUFFQyxJQUFJLEVBQUUsU0FBUztJQUFFUCxJQUFJLEVBQUU7TUFBRVEsRUFBRSxFQUFFO0lBQVMsQ0FBQztJQUFFRixJQUFJLEVBQUpBO0VBQUssQ0FBQztBQUFBLENBQUM7O0FBRTVIOztBQW9CQSxJQUFNRyxXQUFXLEdBQUcsT0FBTztBQUVwQixJQUFNQyxVQUFVLEdBQUFMLE9BQUEsQ0FBQUssVUFBQSxHQUFHLFNBQWJBLFVBQVVBLENBQUlDLFNBQXdCO0VBQUEsT0FBYztJQUMvREEsU0FBUyxFQUFUQSxTQUFTO0lBQ1RDLFlBQVksRUFBRTtNQUNaQyxPQUFPLEVBQUUsSUFBSUMsR0FBRyxDQUFTLENBQUM7TUFDMUJDLGNBQWMsRUFBRSxpQkFBaUI7TUFDakNDLE9BQU8sRUFBRSxFQUFFO01BQ1hDLEtBQUssRUFBRVIsV0FBVyxHQUFHO0lBQ3ZCO0VBQ0YsQ0FBQztBQUFBLENBQUM7QUFFRixJQUFNUyxhQUFhLEdBQUcsU0FBaEJBLGFBQWFBLENBQUlDLE1BQWMsRUFBRUMsT0FBb0IsRUFBMEI7RUFDbkYsSUFBUUMsT0FBTyxHQUFLRCxPQUFPLENBQW5CQyxPQUFPO0VBQ2YsSUFBTUMsYUFBYSxHQUFHRCxPQUFPLENBQUMsZUFBZSxDQUFDO0VBQzlDLElBQUlDLGFBQWEsZUFBQUMsTUFBQSxDQUFlSixNQUFNLENBQUNQLFlBQVksQ0FBQ0ssS0FBSyxDQUFFLEVBQUU7SUFDM0QsT0FBTyxJQUFJO0VBQ2I7RUFFQSxJQUFNTyxRQUErQixHQUFHO0lBQ3RDQyxNQUFNLEVBQUU7RUFDVixDQUFDO0VBRUQsT0FBT0QsUUFBUTtBQUNqQixDQUFDO0FBRU0sSUFBTUUsV0FBVyxHQUFBckIsT0FBQSxDQUFBcUIsV0FBQSxHQUFHLFNBQWRBLFdBQVdBLENBQUlQLE1BQWM7RUFBQSxPQUN4Q0EsTUFBTSxDQUFDUCxZQUFZLENBQUNDLE9BQU8sQ0FBQ2MsT0FBTyxDQUFDLFVBQUEzQyxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDNEMsT0FBTyxDQUFDLElBQUlDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztFQUFBLEVBQUM7QUFBQTtBQUV2RSxJQUFNQyxjQUFjLEdBQUF6QixPQUFBLENBQUF5QixjQUFBLEdBQUcsU0FBakJBLGNBQWNBLENBQUlYLE1BQWMsRUFBVztFQUN0RCxJQUFRUCxZQUFZLEdBQUtPLE1BQU0sQ0FBdkJQLFlBQVk7RUFDcEIsSUFBTW1CLE1BQU0sR0FBR0MsTUFBTSxDQUFDQyxRQUFRLENBQUNyQixZQUFZLENBQUNLLEtBQUssQ0FBQ2lCLFNBQVMsQ0FBQ3pCLFdBQVcsQ0FBQzVCLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUM7RUFDeEYrQixZQUFZLENBQUNLLEtBQUssR0FBR1IsV0FBVyxHQUFHc0IsTUFBTTtBQUMzQyxDQUFDO0FBRUQsSUFBTUksWUFBWSxHQUFHLFdBQVc7QUFJaEM7O0FBRU8sSUFBTUMsUUFBUSxHQUFBL0IsT0FBQSxDQUFBK0IsUUFBQSxHQUFHLFNBQVhBLFFBQVFBLENBQUlqQixNQUFjLEVBQUVrQixVQUFxQixFQUF5QjtFQUVyRixJQUFNQyxPQUFPLEdBQUcsSUFBSUMsUUFBRyxDQUFDLG9EQUFvRCxDQUFDO0VBQzdFLElBQU1DLGVBQWUsR0FBRyxTQUFsQkEsZUFBZUEsQ0FBSUMsU0FBaUIsRUFBYTtJQUNyRCxJQUFNQyxHQUFHLEdBQUcsSUFBSUgsUUFBRyxDQUFDLHNCQUFzQixFQUFFRCxPQUFPLENBQUM7SUFDcEQsSUFBSUcsU0FBUyxHQUFHLENBQUMsRUFBRTtNQUNqQixJQUFNRSxNQUFNLEdBQUcsSUFBSUMsb0JBQWUsQ0FBQyxDQUFDO01BQ3BDRCxNQUFNLENBQUNFLE1BQU0sQ0FBQ1YsWUFBWSxFQUFFTSxTQUFTLENBQUM3QyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDbkQ4QyxHQUFHLENBQUNJLE1BQU0sR0FBR0gsTUFBTSxDQUFDL0MsUUFBUSxDQUFDLENBQUM7SUFDaEM7SUFFQSxPQUFPOEMsR0FBRyxDQUFDOUMsUUFBUSxDQUFDLENBQUM7RUFDdkIsQ0FBQztFQUVELElBQU1tRCxHQUFHLEdBQUdWLFVBQVUsSUFBSyxVQUFDVyxZQUFrQyxFQUFtQjtJQUMvRSxJQUFJLE9BQU9BLFlBQVksS0FBSyxRQUFRLEVBQUU7TUFDcEMsTUFBTSxJQUFJN0MsS0FBSyxDQUFDLENBQUM7SUFDbkI7SUFFQSxJQUFNdUMsR0FBRyxHQUFHLElBQUlILFFBQUcsQ0FBQ1MsWUFBWSxDQUFDQyxHQUFHLENBQUM7SUFFckMsSUFBUUMsUUFBUSxHQUFtQlIsR0FBRyxDQUE5QlEsUUFBUTtNQUFFQyxZQUFZLEdBQUtULEdBQUcsQ0FBcEJTLFlBQVk7SUFFOUIsSUFBTUMsS0FBSyxHQUFHRixRQUFRLENBQUNHLEtBQUssQ0FBQyxHQUFHLENBQUM7SUFFakMsSUFBSUQsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsSUFBSUEsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtNQUVuRCxJQUFNNUIsUUFBK0IsR0FBRztRQUN0Q0EsUUFBUSxFQUFFO1VBQUVQLEtBQUssRUFBRUUsTUFBTSxDQUFDUCxZQUFZLENBQUNLO1FBQU07TUFDL0MsQ0FBQztNQUVELE9BQU9PLFFBQVE7SUFDakI7SUFFQSxJQUFJNEIsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLGVBQWUsRUFBRTtNQUNoQyxNQUFNLElBQUlqRCxLQUFLLENBQUMsQ0FBQztJQUNuQjtJQUVBLElBQUlpRCxLQUFLLENBQUN2RSxNQUFNLEtBQUssQ0FBQyxFQUFFO01BQ3RCLElBQU0rQixZQUEyQyxHQUFHO1FBQ2xERyxjQUFjLEVBQUVJLE1BQU0sQ0FBQ1AsWUFBWSxDQUFDRyxjQUFjO1FBQ2xERSxLQUFLLEVBQUVFLE1BQU0sQ0FBQ1AsWUFBWSxDQUFDSyxLQUFLO1FBQ2hDcUMsU0FBUyxFQUFFZCxlQUFlLENBQUMsQ0FBQztNQUM5QixDQUFDO01BRUQsSUFBTWhCLFNBQStCLEdBQUc7UUFDdENBLFFBQVEsRUFBRVo7TUFDWixDQUFDO01BRUQsT0FBT1ksU0FBUTtJQUNqQjtJQUVBLElBQUk0QixLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUtqQyxNQUFNLENBQUNQLFlBQVksQ0FBQ0csY0FBYyxFQUFFO01BQ25ELE1BQU0sSUFBSVosS0FBSyxDQUFDLENBQUM7SUFDbkI7SUFFQSxJQUFJaUQsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFlBQVksRUFBRTtNQUM3QixJQUFNRyxhQUFhLEdBQUdyQyxhQUFhLENBQUNDLE1BQU0sRUFBRTZCLFlBQVksQ0FBQztNQUN6RCxJQUFJTyxhQUFhLEtBQUssSUFBSSxFQUFFO1FBQzFCLE9BQU9BLGFBQWE7TUFDdEI7TUFFQSxJQUFNQyxRQUFtQyxHQUFHUixZQUFZLENBQUNTLElBQUk7TUFFN0QsSUFBTUMsS0FBSyxHQUFHdkMsTUFBTSxDQUFDUCxZQUFZLENBQUNJLE9BQU8sQ0FBQzJDLElBQUksQ0FBQ0gsUUFBUSxDQUFDO01BQ3hELElBQU1JLEtBQUssR0FBR0YsS0FBSyxHQUFHLENBQUM7TUFBQyxJQUFBRyxTQUFBLEdBQUF6RiwwQkFBQSxDQUVIK0MsTUFBTSxDQUFDUCxZQUFZLENBQUNDLE9BQU87UUFBQWlELEtBQUE7TUFBQTtRQUFoRCxLQUFBRCxTQUFBLENBQUE3RSxDQUFBLE1BQUE4RSxLQUFBLEdBQUFELFNBQUEsQ0FBQTVFLENBQUEsSUFBQUMsSUFBQSxHQUFrRDtVQUFBLElBQXZDNkUsTUFBTSxHQUFBRCxLQUFBLENBQUEzRSxLQUFBO1VBQ2Y0RSxNQUFNLENBQUNDLElBQUksQ0FBQ0osS0FBSyxFQUFFRixLQUFLLENBQUM7UUFDM0I7TUFBQyxTQUFBTyxHQUFBO1FBQUFKLFNBQUEsQ0FBQXZGLENBQUEsQ0FBQTJGLEdBQUE7TUFBQTtRQUFBSixTQUFBLENBQUF6RSxDQUFBO01BQUE7TUFFRCxJQUFNb0MsVUFBK0IsR0FBRztRQUN0Q0EsUUFBUSxFQUFFO1VBQUVoQixFQUFFLEVBQUU7UUFBWTtNQUM5QixDQUFDO01BRUQsT0FBT2dCLFVBQVE7SUFDakIsQ0FBQyxNQUNJLElBQUk0QixLQUFLLENBQUN2RSxNQUFNLEtBQUssQ0FBQyxFQUFFO01BQzNCLElBQU0wRSxjQUFhLEdBQUdyQyxhQUFhLENBQUNDLE1BQU0sRUFBRTZCLFlBQVksQ0FBQztNQUN6RCxJQUFJTyxjQUFhLEtBQUssSUFBSSxFQUFFO1FBQzFCLE9BQU9BLGNBQWE7TUFDdEI7TUFFQSxJQUFNZCxTQUFTLEdBQUdVLFlBQVksQ0FBQ2UsR0FBRyxDQUFDLFdBQVcsQ0FBQztNQUMvQyxJQUFNTixNQUFLLEdBQUc1QixNQUFNLENBQUNDLFFBQVEsQ0FBQ1EsU0FBUyxFQUFFLEVBQUUsQ0FBQztNQUU1QyxJQUFNN0IsYUFBMkMsR0FBRztRQUNsREcsY0FBYyxFQUFFSSxNQUFNLENBQUNQLFlBQVksQ0FBQ0csY0FBYztRQUNsREUsS0FBSyxFQUFFRSxNQUFNLENBQUNQLFlBQVksQ0FBQ0ssS0FBSztRQUNoQ3FDLFNBQVMsRUFBRWQsZUFBZSxDQUFDb0IsTUFBSztNQUNsQyxDQUFDO01BRUQsSUFBTXBDLFVBQStCLEdBQUc7UUFDdENBLFFBQVEsRUFBRVo7TUFDWixDQUFDO01BRUQsT0FBT1ksVUFBUTtJQUNqQjtJQUVBLE1BQU0sSUFBSXJCLEtBQUssQ0FBQyxDQUFDO0VBQ25CLENBQUU7RUFFRixJQUFNZ0UsTUFBTSxHQUFHLFNBQVRBLE1BQU1BLENBQUluQixZQUFrQztJQUFBLE9BQ2hELElBQUlvQixnQkFBVSxDQUFlLFVBQUFDLFVBQVUsRUFBSTtNQUN6QyxJQUFJO1FBQ0ZBLFVBQVUsQ0FBQzNFLElBQUksQ0FBQ3FELEdBQUcsQ0FBQ0MsWUFBWSxDQUFDLENBQUM7UUFDbENxQixVQUFVLENBQUNDLFFBQVEsQ0FBQyxDQUFDO01BQ3ZCLENBQUMsQ0FDRCxPQUFPQyxLQUFLLEVBQUU7UUFDWkYsVUFBVSxDQUFDRSxLQUFLLENBQUNBLEtBQUssQ0FBQztNQUN6QjtJQUNGLENBQUMsQ0FBQztFQUFBO0VBUUosSUFBTUMsVUFBc0IsR0FBRztJQUM3Qk4sR0FBRyxFQUFFLFNBQUxBLEdBQUdBLENBQUdqQixHQUFXLEVBQUU1QixPQUFnQjtNQUFBLE9BQStCbkIsY0FBYyxDQUFDLENBQUM7SUFBQTtJQUNsRnVFLElBQUksRUFBRSxTQUFOQSxJQUFJQSxDQUFHeEIsR0FBVyxFQUFFUSxJQUFVLEVBQUVwQyxPQUFnQjtNQUFBLE9BQStCbkIsY0FBYyxDQUFDLENBQUM7SUFBQTtJQUMvRndFLEdBQUcsRUFBRSxTQUFMQSxHQUFHQSxDQUFHekIsR0FBVyxFQUFFUSxJQUFVLEVBQUVwQyxPQUFnQjtNQUFBLE9BQStCbkIsY0FBYyxDQUFDLENBQUM7SUFBQTtJQUM5RnlFLEtBQUssRUFBRSxTQUFQQSxLQUFLQSxDQUFHMUIsR0FBVyxFQUFFUSxJQUFVLEVBQUVwQyxPQUFnQjtNQUFBLE9BQStCbkIsY0FBYyxDQUFDLENBQUM7SUFBQTtJQUNoRyxVQUFRLFNBQVIwRSxPQUFNQSxDQUFHM0IsR0FBVyxFQUFFNUIsT0FBZ0I7TUFBQSxPQUErQm5CLGNBQWMsQ0FBQyxDQUFDO0lBQUE7SUFDckYyRSxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBRzVCLEdBQVcsRUFBRTVCLE9BQWdCO01BQUEsT0FBS25CLGNBQWMsQ0FBQyxDQUFDO0lBQUE7RUFDOUQsQ0FBQztFQUVELE9BQU80RSxNQUFNLENBQUNDLE1BQU0sQ0FBQ1osTUFBTSxFQUFFSyxVQUFVLENBQUM7QUFDMUMsQ0FBQzs7QUFFRDs7QUFLTyxJQUFNUSxhQUFhLEdBQUEzRSxPQUFBLENBQUEyRSxhQUFBLEdBQUcsU0FBaEJBLGFBQWFBLENBQUk3RCxNQUFjO0VBQUEsSUFBQThELGNBQUE7RUFBQSxPQUFBQSxjQUFBO0lBRXhDLFNBQUFDLGNBQVlqQyxHQUFXLEVBQUVrQyxTQUE2QixFQUFFO01BQUEsSUFBQUMsS0FBQTtNQUFBLElBQUFDLGdCQUFBLG1CQUFBSCxhQUFBO01BQUEsSUFBQUksZ0JBQUEsaUNBK0IvQixhQUFhO01BQUEsSUFBQUEsZ0JBQUEscUNBQ0osQ0FBQztNQUFBLElBQUFBLGdCQUFBLGlDQUNMLEVBQUU7TUFBQSxJQUFBQSxnQkFBQSwrQkFDSixPQUFPO01BQUEsSUFBQUEsZ0JBQUEsaUNBQ2RDLFNBQVMsQ0FBQ0MsTUFBTTtNQUFBLElBQUFGLGdCQUFBLDBCQUNkLEVBQUU7TUFBQSxJQUFBQSxnQkFBQSw2QkFDQ0MsU0FBUyxDQUFDQyxNQUFNO01BQUEsSUFBQUYsZ0JBQUEsOEJBQ2ZDLFNBQVMsQ0FBQ0UsT0FBTztNQUFBLElBQUFILGdCQUFBLGlDQUNkQyxTQUFTLENBQUNHLFVBQVU7TUFBQSxJQUFBSixnQkFBQSwyQkFDMUJDLFNBQVMsQ0FBQ0ksSUFBSTtNQXRDcEN4RSxNQUFNLENBQUNSLFNBQVMsQ0FBQ2lGLFFBQVEsQ0FBQyxZQUFNO1FBQzlCUixLQUFJLENBQUNTLFVBQVUsR0FBR04sU0FBUyxDQUFDRyxVQUFVO1FBQ3RDdkUsTUFBTSxDQUFDUCxZQUFZLENBQUNDLE9BQU8sQ0FBQ2lGLEdBQUcsQ0FBQ1YsS0FBSSxDQUFDO1FBQ3JDQSxLQUFJLENBQUNXLE1BQU0sQ0FBQyxJQUFJQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUJaLEtBQUksQ0FBQ1MsVUFBVSxHQUFHTixTQUFTLENBQUNJLElBQUk7UUFDaEMsSUFBTWpELEdBQUcsR0FBRyxJQUFJSCxRQUFHLENBQUNVLEdBQUcsQ0FBQztRQUN4QixJQUFNUixTQUFTLEdBQUdDLEdBQUcsQ0FBQ1MsWUFBWSxDQUFDZSxHQUFHLENBQUMvQixZQUFZLENBQUM7UUFDcEQsSUFBSU0sU0FBUyxLQUFLLElBQUksRUFBRTtVQUN0QixJQUFNbUIsS0FBSyxHQUFHNUIsTUFBTSxDQUFDQyxRQUFRLENBQUNRLFNBQVMsRUFBRSxFQUFFLENBQUM7VUFDNUMyQyxLQUFJLENBQUNwQixJQUFJLENBQUNKLEtBQUssRUFBRXpDLE1BQU0sQ0FBQ1AsWUFBWSxDQUFDSSxPQUFPLENBQUNuQyxNQUFNLENBQUM7UUFDdEQ7TUFDRixDQUFDLENBQUM7SUFDSjtJQUFDLFdBQUFvSCxhQUFBLGFBQUFmLGFBQUE7TUFBQWdCLEdBQUE7TUFBQS9HLEtBQUEsRUFFRCxTQUFBNkUsSUFBSUEsQ0FBQ0osS0FBYSxFQUFFRixLQUFhLEVBQUU7UUFFakMsSUFBd0IxQyxPQUFPLEdBQU9HLE1BQU0sQ0FBcENQLFlBQVksQ0FBSUksT0FBTztRQUMvQixJQUFNbUYsVUFBVSxHQUFHbkYsT0FBTyxDQUFDbkIsS0FBSyxDQUFDK0QsS0FBSyxFQUFFRixLQUFLLENBQUM7UUFDOUMsSUFBTWpCLFNBQVMsR0FBR3pCLE9BQU8sQ0FBQ25DLE1BQU0sQ0FBQ2UsUUFBUSxDQUFDLENBQUM7UUFDM0MsSUFBTXdHLGFBQTZDLEdBQUc7VUFDcERELFVBQVUsRUFBVkEsVUFBVTtVQUNWMUQsU0FBUyxFQUFUQTtRQUNGLENBQUM7UUFFRCxJQUFNNEQsT0FBTyxHQUFHLElBQUlDLFlBQVksQ0FBQyxNQUFNLEVBQUU7VUFBRUMsSUFBSSxFQUFFQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ0wsYUFBYTtRQUFFLENBQUMsQ0FBQztRQUVqRixJQUFJLENBQUNNLFNBQVMsQ0FBQ0wsT0FBTyxDQUFDO01BQ3pCO0lBQUM7TUFBQUgsR0FBQTtNQUFBL0csS0FBQSxFQWtCRCxTQUFBd0gsS0FBS0EsQ0FBQ0MsSUFBYSxFQUFFQyxNQUFlLEVBQVE7UUFDMUMsSUFBSSxDQUFDaEIsVUFBVSxHQUFHTixTQUFTLENBQUNFLE9BQU87UUFDbkMsSUFBSSxDQUFDN0QsT0FBTyxDQUFDLElBQUlDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQ1YsTUFBTSxDQUFDUCxZQUFZLENBQUNDLE9BQU8sVUFBTyxDQUFDLElBQUksQ0FBQztRQUN4QyxJQUFJLENBQUNnRixVQUFVLEdBQUdOLFNBQVMsQ0FBQ0MsTUFBTTtNQUNwQztJQUFDO01BQUFVLEdBQUE7TUFBQS9HLEtBQUEsRUFFRCxTQUFBMkgsSUFBSUEsQ0FBQ1AsSUFBdUQsRUFBUSxDQUNwRTtJQUFDO01BQUFMLEdBQUE7TUFBQS9HLEtBQUEsRUFFRCxTQUFBNEgsZ0JBQWdCQSxDQUFBLEVBQUc7UUFBRSxNQUFNLElBQUk1RyxLQUFLLENBQUMsQ0FBQztNQUFFO0lBQUM7TUFBQStGLEdBQUE7TUFBQS9HLEtBQUEsRUFDekMsU0FBQTZILG1CQUFtQkEsQ0FBQSxFQUFHO1FBQUUsTUFBTSxJQUFJN0csS0FBSyxDQUFDLENBQUM7TUFBRTtJQUFDO01BQUErRixHQUFBO01BQUEvRyxLQUFBLEVBQzVDLFNBQUE4SCxhQUFhQSxDQUFBLEVBQVk7UUFBRSxNQUFNLElBQUk5RyxLQUFLLENBQUMsQ0FBQztNQUFFO0lBQUM7RUFBQSxTQUFBbUYsZ0JBQUEsYUFBQUwsY0FBQSxZQUUvQk0sU0FBUyxDQUFDQyxNQUFNLE9BQUFGLGdCQUFBLGFBQUFMLGNBQUEsYUFDZk0sU0FBUyxDQUFDRSxPQUFPLE9BQUFILGdCQUFBLGFBQUFMLGNBQUEsZ0JBQ2RNLFNBQVMsQ0FBQ0csVUFBVSxPQUFBSixnQkFBQSxhQUFBTCxjQUFBLFVBQzFCTSxTQUFTLENBQUNJLElBQUksR0FBQVYsY0FBQTtBQUFBLENBQzdCOztBQUVIOztBQUVPLElBQU1pQyxZQUFZLEdBQUE3RyxPQUFBLENBQUE2RyxZQUFBLEdBQUcsU0FBZkEsWUFBWUEsQ0FBSS9GLE1BQWMsRUFBRVIsU0FBd0I7RUFBQSxPQUFpQztJQUNwR0EsU0FBUyxFQUFUQSxTQUFTO0lBQ1Q0RSxTQUFTLEVBQUVQLGFBQWEsQ0FBQzdELE1BQU0sQ0FBQztJQUNoQ2dHLElBQUksRUFBRS9FLFFBQVEsQ0FBQ2pCLE1BQU0sQ0FBQztJQUN0QmlHLE1BQU0sRUFBRSxTQUFSQSxNQUFNQSxDQUFBO01BQUEsT0FBUSxDQUFDO0lBQUE7RUFDakIsQ0FBQztBQUFBLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=