for-modules 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,588 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Node = void 0;
7
+ var _Utils = require("./Utils");
8
+ var _Rest = require("./Rest");
9
+ var _NodeCheck = _interopRequireDefault(require("../Utils/NodeCheck"));
10
+ var _ws = _interopRequireDefault(require("ws"));
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
12
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
13
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
14
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
15
+ 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; } }
16
+ 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; }
17
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
18
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
19
+ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
20
+ function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
21
+ function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
22
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
23
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
24
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
25
+ function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
26
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
27
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
28
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
29
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
30
+ var Node = exports.Node = /*#__PURE__*/function () {
31
+ /**
32
+ * Creates an instance of Node.
33
+ * @param options
34
+ */
35
+ function Node(options) {
36
+ _classCallCheck(this, Node);
37
+ /** The socket for the node. */
38
+ _defineProperty(this, "socket", null);
39
+ _defineProperty(this, "reconnectAttempts", 1);
40
+ this.options = options;
41
+ if (!this.manager) this.manager = _Utils.Structure.get("Node")._manager;
42
+ if (!this.manager) throw new RangeError("Manager has not been initiated.");
43
+ if (this.manager.nodes.has(options.identifier || options.host)) {
44
+ return this.manager.nodes.get(options.identifier || options.host);
45
+ }
46
+ (0, _NodeCheck["default"])(options);
47
+ this.options = _objectSpread({
48
+ port: 2333,
49
+ password: "youshallnotpass",
50
+ secure: false,
51
+ retryAmount: 30,
52
+ retryDelay: 60000,
53
+ priority: 0
54
+ }, options);
55
+ if (this.options.secure) {
56
+ this.options.port = 443;
57
+ }
58
+ this.options.identifier = options.identifier || options.host;
59
+ this.stats = {
60
+ players: 0,
61
+ playingPlayers: 0,
62
+ uptime: 0,
63
+ memory: {
64
+ free: 0,
65
+ used: 0,
66
+ allocated: 0,
67
+ reservable: 0
68
+ },
69
+ cpu: {
70
+ cores: 0,
71
+ systemLoad: 0,
72
+ lavalinkLoad: 0
73
+ },
74
+ frameStats: {
75
+ sent: 0,
76
+ nulled: 0,
77
+ deficit: 0
78
+ }
79
+ };
80
+ this.manager.nodes.set(this.options.identifier, this);
81
+ this.manager.emit("NodeCreate", this);
82
+ this.rest = new _Rest.Rest(this);
83
+ }
84
+
85
+ /** Connects to the Node. */
86
+ return _createClass(Node, [{
87
+ key: "connected",
88
+ get: /** Returns if connected to the Node. */
89
+ function get() {
90
+ if (!this.socket) return false;
91
+ return this.socket.readyState === _ws["default"].OPEN;
92
+ }
93
+
94
+ /** Returns the address for this node. */
95
+ }, {
96
+ key: "address",
97
+ get: function get() {
98
+ return "".concat(this.options.host, ":").concat(this.options.port);
99
+ }
100
+
101
+ /** @hidden */
102
+ }, {
103
+ key: "connect",
104
+ value: function connect() {
105
+ if (this.connected) return;
106
+ var headers = Object.assign({
107
+ Authorization: this.options.password,
108
+ "Num-Shards": String(this.manager.options.shards),
109
+ "User-Id": this.manager.options.clientId,
110
+ "Client-Name": this.manager.options.clientName
111
+ });
112
+ this.socket = new _ws["default"]("ws".concat(this.options.secure ? "s" : "", "://").concat(this.address, "/v4/websocket"), {
113
+ headers: headers
114
+ });
115
+ this.socket.on("open", this.open.bind(this));
116
+ this.socket.on("close", this.close.bind(this));
117
+ this.socket.on("message", this.message.bind(this));
118
+ this.socket.on("error", this.error.bind(this));
119
+ }
120
+
121
+ /** Destroys the Node and all players connected with it. */
122
+ }, {
123
+ key: "destroy",
124
+ value: function destroy() {
125
+ var _this = this;
126
+ if (!this.connected) return;
127
+ var players = this.manager.players.filter(function (p) {
128
+ return p.node == _this;
129
+ });
130
+ if (players.size) players.forEach(function (p) {
131
+ return p.destroy();
132
+ });
133
+ this.socket.close(1000, "destroy");
134
+ this.socket.removeAllListeners();
135
+ this.socket = null;
136
+ this.reconnectAttempts = 1;
137
+ clearTimeout(this.reconnectTimeout);
138
+ this.manager.emit("NodeDestroy", this);
139
+ this.manager.destroyNode(this.options.identifier);
140
+ }
141
+ }, {
142
+ key: "reconnect",
143
+ value: function reconnect() {
144
+ var _this2 = this;
145
+ this.reconnectTimeout = setTimeout(function () {
146
+ var _this2$socket;
147
+ if (_this2.reconnectAttempts >= _this2.options.retryAmount) {
148
+ var error = new Error("Unable to connect after ".concat(_this2.options.retryAmount, " attempts."));
149
+ _this2.manager.emit("NodeError", _this2, error);
150
+ return _this2.destroy();
151
+ }
152
+ (_this2$socket = _this2.socket) === null || _this2$socket === void 0 || _this2$socket.removeAllListeners();
153
+ _this2.socket = null;
154
+ _this2.manager.emit("NodeReconnect", _this2);
155
+ _this2.connect();
156
+ _this2.reconnectAttempts++;
157
+ }, this.options.retryDelay);
158
+ }
159
+ }, {
160
+ key: "open",
161
+ value: function open() {
162
+ if (this.reconnectTimeout) clearTimeout(this.reconnectTimeout);
163
+ this.manager.emit("NodeConnect", this);
164
+ }
165
+ }, {
166
+ key: "close",
167
+ value: function close(code, reason) {
168
+ this.manager.emit("NodeDisconnect", this, {
169
+ code: code,
170
+ reason: reason
171
+ });
172
+ if (code !== 1000 || reason !== "destroy") this.reconnect();
173
+ }
174
+ }, {
175
+ key: "error",
176
+ value: function error(_error) {
177
+ if (!_error) return;
178
+ this.manager.emit("NodeError", this, _error);
179
+ }
180
+ }, {
181
+ key: "message",
182
+ value: function message(d) {
183
+ if (Array.isArray(d)) d = Buffer.concat(d);else if (d instanceof ArrayBuffer) d = Buffer.from(d);
184
+ var payload = JSON.parse(d.toString());
185
+ if (!payload.op) return;
186
+ this.manager.emit("NodeRaw", payload);
187
+ var player;
188
+ switch (payload.op) {
189
+ case "stats":
190
+ delete payload.op;
191
+ this.stats = _objectSpread({}, payload);
192
+ break;
193
+ case "playerUpdate":
194
+ player = this.manager.players.get(payload.guildId);
195
+ if (player) player.position = payload.state.position || 0;
196
+ break;
197
+ case "event":
198
+ this.handleEvent(payload);
199
+ break;
200
+ case "ready":
201
+ this.rest.setSessionId(payload.sessionId);
202
+ this.sessionId = payload.sessionId;
203
+ if (this.options.resumeStatus) {
204
+ this.rest.patch("/v4/sessions/".concat(this.sessionId), {
205
+ resuming: this.options.resumeStatus,
206
+ timeout: this.options.resumeTimeout
207
+ });
208
+ }
209
+ break;
210
+ default:
211
+ this.manager.emit("NodeError", this, new Error("Unexpected op \"".concat(payload.op, "\" with data: ").concat(payload.message)));
212
+ return;
213
+ }
214
+ }
215
+ }, {
216
+ key: "handleEvent",
217
+ value: function () {
218
+ var _handleEvent = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(payload) {
219
+ var player, track, type, error, _player$nowPlayingMes;
220
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
221
+ while (1) switch (_context.prev = _context.next) {
222
+ case 0:
223
+ if (payload.guildId) {
224
+ _context.next = 2;
225
+ break;
226
+ }
227
+ return _context.abrupt("return");
228
+ case 2:
229
+ player = this.manager.players.get(payload.guildId);
230
+ if (player) {
231
+ _context.next = 5;
232
+ break;
233
+ }
234
+ return _context.abrupt("return");
235
+ case 5:
236
+ track = player.queue.current;
237
+ type = payload.type;
238
+ _context.t0 = type;
239
+ _context.next = _context.t0 === "TrackStartEvent" ? 10 : _context.t0 === "TrackEndEvent" ? 12 : _context.t0 === "TrackStuckEvent" ? 17 : _context.t0 === "TrackExceptionEvent" ? 19 : _context.t0 === "WebSocketClosedEvent" ? 21 : 23;
240
+ break;
241
+ case 10:
242
+ this.trackStart(player, track, payload);
243
+ return _context.abrupt("break", 26);
244
+ case 12:
245
+ if (!(player !== null && player !== void 0 && player.nowPlayingMessage && player !== null && player !== void 0 && player.nowPlayingMessage.deletable)) {
246
+ _context.next = 15;
247
+ break;
248
+ }
249
+ _context.next = 15;
250
+ return player === null || player === void 0 || (_player$nowPlayingMes = player.nowPlayingMessage) === null || _player$nowPlayingMes === void 0 ? void 0 : _player$nowPlayingMes["delete"]()["catch"](function () {});
251
+ case 15:
252
+ this.trackEnd(player, track, payload);
253
+ return _context.abrupt("break", 26);
254
+ case 17:
255
+ this.trackStuck(player, track, payload);
256
+ return _context.abrupt("break", 26);
257
+ case 19:
258
+ this.trackError(player, track, payload);
259
+ return _context.abrupt("break", 26);
260
+ case 21:
261
+ this.socketClosed(player, payload);
262
+ return _context.abrupt("break", 26);
263
+ case 23:
264
+ error = new Error("Node#event unknown event '".concat(type, "'."));
265
+ this.manager.emit("NodeError", this, error);
266
+ return _context.abrupt("break", 26);
267
+ case 26:
268
+ case "end":
269
+ return _context.stop();
270
+ }
271
+ }, _callee, this);
272
+ }));
273
+ function handleEvent(_x) {
274
+ return _handleEvent.apply(this, arguments);
275
+ }
276
+ return handleEvent;
277
+ }()
278
+ }, {
279
+ key: "trackStart",
280
+ value: function trackStart(player, track, payload) {
281
+ player.playing = true;
282
+ player.paused = false;
283
+ this.manager.emit("TrackStart", player, track, payload);
284
+ }
285
+ }, {
286
+ key: "trackEnd",
287
+ value: function () {
288
+ var _trackEnd = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(player, track, payload) {
289
+ var reason;
290
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
291
+ while (1) switch (_context2.prev = _context2.next) {
292
+ case 0:
293
+ reason = payload.reason; // If the track failed to load or was cleaned up
294
+ if (!["loadFailed", "cleanup"].includes(reason)) {
295
+ _context2.next = 5;
296
+ break;
297
+ }
298
+ this.handleFailedTrack(player, track, payload);
299
+ _context2.next = 20;
300
+ break;
301
+ case 5:
302
+ if (!(reason === "replaced")) {
303
+ _context2.next = 10;
304
+ break;
305
+ }
306
+ this.manager.emit("TrackEnd", player, track, payload);
307
+ player.queue.previous = player.queue.current;
308
+ _context2.next = 20;
309
+ break;
310
+ case 10:
311
+ if (!(track && (player.trackRepeat || player.queueRepeat))) {
312
+ _context2.next = 14;
313
+ break;
314
+ }
315
+ this.handleRepeatedTrack(player, track, payload);
316
+ _context2.next = 20;
317
+ break;
318
+ case 14:
319
+ if (!player.queue.length) {
320
+ _context2.next = 18;
321
+ break;
322
+ }
323
+ this.playNextTrack(player, track, payload);
324
+ _context2.next = 20;
325
+ break;
326
+ case 18:
327
+ _context2.next = 20;
328
+ return this.queueEnd(player, track, payload);
329
+ case 20:
330
+ case "end":
331
+ return _context2.stop();
332
+ }
333
+ }, _callee2, this);
334
+ }));
335
+ function trackEnd(_x2, _x3, _x4) {
336
+ return _trackEnd.apply(this, arguments);
337
+ }
338
+ return trackEnd;
339
+ }()
340
+ }, {
341
+ key: "extractSpotifyTrackID",
342
+ value: function extractSpotifyTrackID(url) {
343
+ var regex = /https:\/\/open\.spotify\.com\/track\/([a-zA-Z0-9]+)/;
344
+ var match = url.match(regex);
345
+ return match ? match[1] : null;
346
+ }
347
+ }, {
348
+ key: "extractSpotifyArtistID",
349
+ value: function extractSpotifyArtistID(url) {
350
+ var regex = /https:\/\/open\.spotify\.com\/artist\/([a-zA-Z0-9]+)/;
351
+ var match = url.match(regex);
352
+ return match ? match[1] : null;
353
+ }
354
+
355
+ // Handle autoplay
356
+ }, {
357
+ key: "handleAutoplay",
358
+ value: function () {
359
+ var _handleAutoplay = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(player, track) {
360
+ var previousTrack, hasSpotifyURL, node, _res, info, isSpotifyPluginEnabled, isSpotifySourceManagerEnabled, trackID, artistID, identifier, recommendedResult, playlistData, recommendedTrack, hasYouTubeURL, videoID, _res2, randomIndex, searchURI, res, tracks, foundTrack, _foundTrack$title$spl, _foundTrack$title$spl2, author, title;
361
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
362
+ while (1) switch (_context3.prev = _context3.next) {
363
+ case 0:
364
+ previousTrack = player.queue.previous;
365
+ if (!(!player.isAutoplay || !previousTrack)) {
366
+ _context3.next = 3;
367
+ break;
368
+ }
369
+ return _context3.abrupt("return");
370
+ case 3:
371
+ hasSpotifyURL = ["spotify.com", "open.spotify.com"].some(function (url) {
372
+ return previousTrack.uri.includes(url);
373
+ });
374
+ if (!hasSpotifyURL) {
375
+ _context3.next = 28;
376
+ break;
377
+ }
378
+ node = this.manager.useableNodes;
379
+ _context3.next = 8;
380
+ return node.rest.get("/v4/info");
381
+ case 8:
382
+ _res = _context3.sent;
383
+ info = _res;
384
+ isSpotifyPluginEnabled = info.plugins.some(function (plugin) {
385
+ return plugin.name === "lavasrc-plugin";
386
+ });
387
+ isSpotifySourceManagerEnabled = info.sourceManagers.includes("spotify");
388
+ if (!(isSpotifyPluginEnabled && isSpotifySourceManagerEnabled)) {
389
+ _context3.next = 28;
390
+ break;
391
+ }
392
+ trackID = this.extractSpotifyTrackID(previousTrack.uri);
393
+ artistID = this.extractSpotifyArtistID(previousTrack.pluginInfo.artistUrl);
394
+ identifier = "";
395
+ if (trackID && artistID) {
396
+ identifier = "sprec:seed_artists=".concat(artistID, "&seed_tracks=").concat(trackID);
397
+ } else if (trackID) {
398
+ identifier = "sprec:seed_tracks=".concat(trackID);
399
+ } else if (artistID) {
400
+ identifier = "sprec:seed_artists=".concat(artistID);
401
+ }
402
+ if (!identifier) {
403
+ _context3.next = 28;
404
+ break;
405
+ }
406
+ _context3.next = 20;
407
+ return node.rest.get("/v4/loadtracks?identifier=".concat(encodeURIComponent(identifier)));
408
+ case 20:
409
+ recommendedResult = _context3.sent;
410
+ if (!(recommendedResult.loadType === "playlist")) {
411
+ _context3.next = 28;
412
+ break;
413
+ }
414
+ playlistData = recommendedResult.data;
415
+ recommendedTrack = playlistData.tracks[0];
416
+ if (!recommendedTrack) {
417
+ _context3.next = 28;
418
+ break;
419
+ }
420
+ player.queue.add(_Utils.TrackUtils.build(recommendedTrack, player.get("Internal_BotUser")));
421
+ player.play();
422
+ return _context3.abrupt("return");
423
+ case 28:
424
+ hasYouTubeURL = ["youtube.com", "youtu.be"].some(function (url) {
425
+ return previousTrack.uri.includes(url);
426
+ });
427
+ videoID = previousTrack.uri.substring(previousTrack.uri.indexOf("=") + 1);
428
+ if (hasYouTubeURL) {
429
+ _context3.next = 35;
430
+ break;
431
+ }
432
+ _context3.next = 33;
433
+ return player.search("".concat(previousTrack.author, " - ").concat(previousTrack.title), player.get("Internal_BotUser"));
434
+ case 33:
435
+ _res2 = _context3.sent;
436
+ videoID = _res2.tracks[0].uri.substring(_res2.tracks[0].uri.indexOf("=") + 1);
437
+ case 35:
438
+ do {
439
+ randomIndex = Math.floor(Math.random() * 23) + 2;
440
+ searchURI = "https://www.youtube.com/watch?v=".concat(videoID, "&list=RD").concat(videoID, "&index=").concat(randomIndex);
441
+ } while (track.uri.includes(searchURI));
442
+ _context3.next = 38;
443
+ return player.search(searchURI, player.get("Internal_BotUser"));
444
+ case 38:
445
+ res = _context3.sent;
446
+ if (!(res.loadType === "empty" || res.loadType === "error")) {
447
+ _context3.next = 41;
448
+ break;
449
+ }
450
+ return _context3.abrupt("return");
451
+ case 41:
452
+ tracks = res.tracks;
453
+ if (res.loadType === "playlist") {
454
+ tracks = res.playlist.tracks;
455
+ }
456
+ foundTrack = tracks.sort(function () {
457
+ return Math.random() - 0.5;
458
+ }).find(function (shuffledTrack) {
459
+ return shuffledTrack.uri !== track.uri;
460
+ });
461
+ if (foundTrack) {
462
+ if (this.manager.options.replaceYouTubeCredentials) {
463
+ foundTrack.author = foundTrack.author.replace("- Topic", "");
464
+ foundTrack.title = foundTrack.title.replace("Topic -", "");
465
+ if (foundTrack.title.includes("-")) {
466
+ _foundTrack$title$spl = foundTrack.title.split("-").map(function (str) {
467
+ return str.trim();
468
+ }), _foundTrack$title$spl2 = _slicedToArray(_foundTrack$title$spl, 2), author = _foundTrack$title$spl2[0], title = _foundTrack$title$spl2[1];
469
+ foundTrack.author = author;
470
+ foundTrack.title = title;
471
+ }
472
+ }
473
+ player.queue.add(foundTrack);
474
+ player.play();
475
+ }
476
+ case 45:
477
+ case "end":
478
+ return _context3.stop();
479
+ }
480
+ }, _callee3, this);
481
+ }));
482
+ function handleAutoplay(_x5, _x6) {
483
+ return _handleAutoplay.apply(this, arguments);
484
+ }
485
+ return handleAutoplay;
486
+ }() // Handle the case when a track failed to load or was cleaned up
487
+ }, {
488
+ key: "handleFailedTrack",
489
+ value: function handleFailedTrack(player, track, payload) {
490
+ player.queue.previous = player.queue.current;
491
+ player.queue.current = player.queue.shift();
492
+ if (!player.queue.current) {
493
+ this.queueEnd(player, track, payload);
494
+ return;
495
+ }
496
+ this.manager.emit("TrackEnd", player, track, payload);
497
+ if (this.manager.options.autoPlay) player.play();
498
+ }
499
+
500
+ // Handle the case when a track ended and it's set to repeat (track or queue)
501
+ }, {
502
+ key: "handleRepeatedTrack",
503
+ value: function handleRepeatedTrack(player, track, payload) {
504
+ var queue = player.queue,
505
+ trackRepeat = player.trackRepeat,
506
+ queueRepeat = player.queueRepeat;
507
+ var autoPlay = this.manager.options.autoPlay;
508
+ if (trackRepeat) {
509
+ queue.unshift(queue.current);
510
+ } else if (queueRepeat) {
511
+ queue.add(queue.current);
512
+ }
513
+ queue.previous = queue.current;
514
+ queue.current = queue.shift();
515
+ this.manager.emit("TrackEnd", player, track, payload);
516
+ if (payload.reason === "stopped" && !(queue.current = queue.shift())) {
517
+ this.queueEnd(player, track, payload);
518
+ return;
519
+ }
520
+ if (autoPlay) player.play();
521
+ }
522
+
523
+ // Handle the case when there's another track in the queue
524
+ }, {
525
+ key: "playNextTrack",
526
+ value: function playNextTrack(player, track, payload) {
527
+ player.queue.previous = player.queue.current;
528
+ player.queue.current = player.queue.shift();
529
+ this.manager.emit("TrackEnd", player, track, payload);
530
+ if (this.manager.options.autoPlay) player.play();
531
+ }
532
+ }, {
533
+ key: "queueEnd",
534
+ value: function () {
535
+ var _queueEnd = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(player, track, payload) {
536
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
537
+ while (1) switch (_context4.prev = _context4.next) {
538
+ case 0:
539
+ player.queue.previous = player.queue.current;
540
+ player.queue.current = null;
541
+ if (player.isAutoplay) {
542
+ _context4.next = 8;
543
+ break;
544
+ }
545
+ player.queue.previous = player.queue.current;
546
+ player.queue.current = null;
547
+ player.playing = false;
548
+ this.manager.emit("QueueEnd", player, track, payload);
549
+ return _context4.abrupt("return");
550
+ case 8:
551
+ _context4.next = 10;
552
+ return this.handleAutoplay(player, track);
553
+ case 10:
554
+ case "end":
555
+ return _context4.stop();
556
+ }
557
+ }, _callee4, this);
558
+ }));
559
+ function queueEnd(_x7, _x8, _x9) {
560
+ return _queueEnd.apply(this, arguments);
561
+ }
562
+ return queueEnd;
563
+ }()
564
+ }, {
565
+ key: "trackStuck",
566
+ value: function trackStuck(player, track, payload) {
567
+ player.stop();
568
+ this.manager.emit("TrackStuck", player, track, payload);
569
+ }
570
+ }, {
571
+ key: "trackError",
572
+ value: function trackError(player, track, payload) {
573
+ player.stop();
574
+ this.manager.emit("TrackError", player, track, payload);
575
+ }
576
+ }, {
577
+ key: "socketClosed",
578
+ value: function socketClosed(player, payload) {
579
+ this.manager.emit("SocketClosed", player, payload);
580
+ }
581
+ }], [{
582
+ key: "init",
583
+ value: function init(manager) {
584
+ this._manager = manager;
585
+ }
586
+ }]);
587
+ }();
588
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfVXRpbHMiLCJyZXF1aXJlIiwiX1Jlc3QiLCJfTm9kZUNoZWNrIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl93cyIsImUiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiX3NsaWNlZFRvQXJyYXkiLCJyIiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIlR5cGVFcnJvciIsImEiLCJfYXJyYXlMaWtlVG9BcnJheSIsInQiLCJ0b1N0cmluZyIsImNhbGwiLCJzbGljZSIsIm5hbWUiLCJBcnJheSIsImZyb20iLCJ0ZXN0IiwibGVuZ3RoIiwibiIsImwiLCJpIiwidSIsImYiLCJuZXh0IiwiT2JqZWN0IiwiZG9uZSIsInB1c2giLCJ2YWx1ZSIsImlzQXJyYXkiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiaGFzT3duUHJvcGVydHkiLCJkZWZpbmVQcm9wZXJ0eSIsImMiLCJhc3luY0l0ZXJhdG9yIiwidG9TdHJpbmdUYWciLCJkZWZpbmUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJ3cmFwIiwiR2VuZXJhdG9yIiwiY3JlYXRlIiwiQ29udGV4dCIsIm1ha2VJbnZva2VNZXRob2QiLCJ0cnlDYXRjaCIsInR5cGUiLCJhcmciLCJoIiwicyIsInkiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwicCIsImQiLCJnZXRQcm90b3R5cGVPZiIsInYiLCJ2YWx1ZXMiLCJnIiwiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwiZm9yRWFjaCIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiaW52b2tlIiwicmVzb2x2ZSIsIl9fYXdhaXQiLCJ0aGVuIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJFcnJvciIsIm1ldGhvZCIsImRlbGVnYXRlIiwibWF5YmVJbnZva2VEZWxlZ2F0ZSIsInNlbnQiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwicmVzdWx0TmFtZSIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJyZXNldFRyeUVudHJ5IiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXNOYU4iLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJtYXJrIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJhd3JhcCIsImFzeW5jIiwiUHJvbWlzZSIsImtleXMiLCJyZXZlcnNlIiwicG9wIiwicHJldiIsImNoYXJBdCIsInN0b3AiLCJydmFsIiwiaGFuZGxlIiwiY29tcGxldGUiLCJmaW5pc2giLCJfY2F0Y2giLCJkZWxlZ2F0ZVlpZWxkIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9uZXh0IiwiX3Rocm93Iiwib3duS2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl9vYmplY3RTcHJlYWQiLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl9jbGFzc0NhbGxDaGVjayIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwiX3RvUHJvcGVydHlLZXkiLCJrZXkiLCJfY3JlYXRlQ2xhc3MiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsIk5vZGUiLCJleHBvcnRzIiwib3B0aW9ucyIsIm1hbmFnZXIiLCJTdHJ1Y3R1cmUiLCJnZXQiLCJfbWFuYWdlciIsIlJhbmdlRXJyb3IiLCJub2RlcyIsImhhcyIsImlkZW50aWZpZXIiLCJob3N0Iiwibm9kZUNoZWNrIiwicG9ydCIsInBhc3N3b3JkIiwic2VjdXJlIiwicmV0cnlBbW91bnQiLCJyZXRyeURlbGF5IiwicHJpb3JpdHkiLCJzdGF0cyIsInBsYXllcnMiLCJwbGF5aW5nUGxheWVycyIsInVwdGltZSIsIm1lbW9yeSIsImZyZWUiLCJ1c2VkIiwiYWxsb2NhdGVkIiwicmVzZXJ2YWJsZSIsImNwdSIsImNvcmVzIiwic3lzdGVtTG9hZCIsImxhdmFsaW5rTG9hZCIsImZyYW1lU3RhdHMiLCJudWxsZWQiLCJkZWZpY2l0Iiwic2V0IiwiZW1pdCIsInJlc3QiLCJSZXN0Iiwic29ja2V0IiwicmVhZHlTdGF0ZSIsIldlYlNvY2tldCIsIk9QRU4iLCJjb25jYXQiLCJjb25uZWN0IiwiY29ubmVjdGVkIiwiaGVhZGVycyIsImFzc2lnbiIsIkF1dGhvcml6YXRpb24iLCJzaGFyZHMiLCJjbGllbnRJZCIsImNsaWVudE5hbWUiLCJhZGRyZXNzIiwib24iLCJvcGVuIiwiYmluZCIsImNsb3NlIiwibWVzc2FnZSIsImVycm9yIiwiZGVzdHJveSIsIl90aGlzIiwibm9kZSIsInNpemUiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJyZWNvbm5lY3RBdHRlbXB0cyIsImNsZWFyVGltZW91dCIsInJlY29ubmVjdFRpbWVvdXQiLCJkZXN0cm95Tm9kZSIsInJlY29ubmVjdCIsIl90aGlzMiIsInNldFRpbWVvdXQiLCJfdGhpczIkc29ja2V0IiwiY29kZSIsInJlYXNvbiIsIkJ1ZmZlciIsIkFycmF5QnVmZmVyIiwicGF5bG9hZCIsIkpTT04iLCJwYXJzZSIsIm9wIiwicGxheWVyIiwiZ3VpbGRJZCIsInBvc2l0aW9uIiwic3RhdGUiLCJoYW5kbGVFdmVudCIsInNldFNlc3Npb25JZCIsInNlc3Npb25JZCIsInJlc3VtZVN0YXR1cyIsInBhdGNoIiwicmVzdW1pbmciLCJ0aW1lb3V0IiwicmVzdW1lVGltZW91dCIsIl9oYW5kbGVFdmVudCIsIl9jYWxsZWUiLCJ0cmFjayIsIl9wbGF5ZXIkbm93UGxheWluZ01lcyIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJxdWV1ZSIsImN1cnJlbnQiLCJ0MCIsInRyYWNrU3RhcnQiLCJub3dQbGF5aW5nTWVzc2FnZSIsImRlbGV0YWJsZSIsInRyYWNrRW5kIiwidHJhY2tTdHVjayIsInRyYWNrRXJyb3IiLCJzb2NrZXRDbG9zZWQiLCJfeCIsInBsYXlpbmciLCJwYXVzZWQiLCJfdHJhY2tFbmQiLCJfY2FsbGVlMiIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsImluY2x1ZGVzIiwiaGFuZGxlRmFpbGVkVHJhY2siLCJwcmV2aW91cyIsInRyYWNrUmVwZWF0IiwicXVldWVSZXBlYXQiLCJoYW5kbGVSZXBlYXRlZFRyYWNrIiwicGxheU5leHRUcmFjayIsInF1ZXVlRW5kIiwiX3gyIiwiX3gzIiwiX3g0IiwiZXh0cmFjdFNwb3RpZnlUcmFja0lEIiwidXJsIiwicmVnZXgiLCJtYXRjaCIsImV4dHJhY3RTcG90aWZ5QXJ0aXN0SUQiLCJfaGFuZGxlQXV0b3BsYXkiLCJfY2FsbGVlMyIsInByZXZpb3VzVHJhY2siLCJoYXNTcG90aWZ5VVJMIiwiX3JlcyIsImluZm8iLCJpc1Nwb3RpZnlQbHVnaW5FbmFibGVkIiwiaXNTcG90aWZ5U291cmNlTWFuYWdlckVuYWJsZWQiLCJ0cmFja0lEIiwiYXJ0aXN0SUQiLCJyZWNvbW1lbmRlZFJlc3VsdCIsInBsYXlsaXN0RGF0YSIsInJlY29tbWVuZGVkVHJhY2siLCJoYXNZb3VUdWJlVVJMIiwidmlkZW9JRCIsIl9yZXMyIiwicmFuZG9tSW5kZXgiLCJzZWFyY2hVUkkiLCJyZXMiLCJ0cmFja3MiLCJmb3VuZFRyYWNrIiwiX2ZvdW5kVHJhY2skdGl0bGUkc3BsIiwiX2ZvdW5kVHJhY2skdGl0bGUkc3BsMiIsImF1dGhvciIsInRpdGxlIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiaXNBdXRvcGxheSIsInNvbWUiLCJ1cmkiLCJ1c2VhYmxlTm9kZXMiLCJwbHVnaW5zIiwicGx1Z2luIiwic291cmNlTWFuYWdlcnMiLCJwbHVnaW5JbmZvIiwiYXJ0aXN0VXJsIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwibG9hZFR5cGUiLCJkYXRhIiwiYWRkIiwiVHJhY2tVdGlscyIsImJ1aWxkIiwicGxheSIsInN1YnN0cmluZyIsImluZGV4T2YiLCJzZWFyY2giLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJwbGF5bGlzdCIsInNvcnQiLCJmaW5kIiwic2h1ZmZsZWRUcmFjayIsInJlcGxhY2VZb3VUdWJlQ3JlZGVudGlhbHMiLCJyZXBsYWNlIiwic3BsaXQiLCJtYXAiLCJzdHIiLCJ0cmltIiwiaGFuZGxlQXV0b3BsYXkiLCJfeDUiLCJfeDYiLCJzaGlmdCIsImF1dG9QbGF5IiwidW5zaGlmdCIsIl9xdWV1ZUVuZCIsIl9jYWxsZWU0IiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiX3g3IiwiX3g4IiwiX3g5IiwiaW5pdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TdHJ1Y3R1cmVzL05vZGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0UGxheWVyRXZlbnQsXG5cdFBsYXllckV2ZW50cyxcblx0U3RydWN0dXJlLFxuXHRUcmFja0VuZEV2ZW50LFxuXHRUcmFja0V4Y2VwdGlvbkV2ZW50LFxuXHRUcmFja1N0YXJ0RXZlbnQsXG5cdFRyYWNrU3R1Y2tFdmVudCxcblx0VHJhY2tVdGlscyxcblx0V2ViU29ja2V0Q2xvc2VkRXZlbnQsXG59IGZyb20gXCIuL1V0aWxzXCI7XG5pbXBvcnQgeyBMYXZhbGlua1Jlc3BvbnNlLCBNYW5hZ2VyLCBQbGF5bGlzdFJhd0RhdGEgfSBmcm9tIFwiLi9NYW5hZ2VyXCI7XG5pbXBvcnQgeyBQbGF5ZXIsIFRyYWNrLCBVbnJlc29sdmVkVHJhY2sgfSBmcm9tIFwiLi9QbGF5ZXJcIjtcbmltcG9ydCB7IFJlc3QgfSBmcm9tIFwiLi9SZXN0XCI7XG5pbXBvcnQgbm9kZUNoZWNrIGZyb20gXCIuLi9VdGlscy9Ob2RlQ2hlY2tcIjtcbmltcG9ydCBXZWJTb2NrZXQgZnJvbSBcIndzXCI7XG5cbmV4cG9ydCBjbGFzcyBOb2RlIHtcblx0LyoqIFRoZSBzb2NrZXQgZm9yIHRoZSBub2RlLiAqL1xuXHRwdWJsaWMgc29ja2V0OiBXZWJTb2NrZXQgfCBudWxsID0gbnVsbDtcblx0LyoqIFRoZSBzdGF0cyBmb3IgdGhlIG5vZGUuICovXG5cdHB1YmxpYyBzdGF0czogTm9kZVN0YXRzO1xuXHRwdWJsaWMgbWFuYWdlcjogTWFuYWdlcjtcblx0LyoqIFRoZSBub2RlJ3Mgc2Vzc2lvbiBJRC4gKi9cblx0cHVibGljIHNlc3Npb25JZDogc3RyaW5nIHwgbnVsbDtcblx0LyoqIFRoZSBSRVNUIGluc3RhbmNlLiAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgcmVzdDogUmVzdDtcblxuXHRwcml2YXRlIHN0YXRpYyBfbWFuYWdlcjogTWFuYWdlcjtcblx0cHJpdmF0ZSByZWNvbm5lY3RUaW1lb3V0PzogTm9kZUpTLlRpbWVvdXQ7XG5cdHByaXZhdGUgcmVjb25uZWN0QXR0ZW1wdHMgPSAxO1xuXG5cdC8qKiBSZXR1cm5zIGlmIGNvbm5lY3RlZCB0byB0aGUgTm9kZS4gKi9cblx0cHVibGljIGdldCBjb25uZWN0ZWQoKTogYm9vbGVhbiB7XG5cdFx0aWYgKCF0aGlzLnNvY2tldCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0aGlzLnNvY2tldC5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTjtcblx0fVxuXG5cdC8qKiBSZXR1cm5zIHRoZSBhZGRyZXNzIGZvciB0aGlzIG5vZGUuICovXG5cdHB1YmxpYyBnZXQgYWRkcmVzcygpOiBzdHJpbmcge1xuXHRcdHJldHVybiBgJHt0aGlzLm9wdGlvbnMuaG9zdH06JHt0aGlzLm9wdGlvbnMucG9ydH1gO1xuXHR9XG5cblx0LyoqIEBoaWRkZW4gKi9cblx0cHVibGljIHN0YXRpYyBpbml0KG1hbmFnZXI6IE1hbmFnZXIpOiB2b2lkIHtcblx0XHR0aGlzLl9tYW5hZ2VyID0gbWFuYWdlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIE5vZGUuXG5cdCAqIEBwYXJhbSBvcHRpb25zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwdWJsaWMgb3B0aW9uczogTm9kZU9wdGlvbnMpIHtcblx0XHRpZiAoIXRoaXMubWFuYWdlcikgdGhpcy5tYW5hZ2VyID0gU3RydWN0dXJlLmdldChcIk5vZGVcIikuX21hbmFnZXI7XG5cdFx0aWYgKCF0aGlzLm1hbmFnZXIpIHRocm93IG5ldyBSYW5nZUVycm9yKFwiTWFuYWdlciBoYXMgbm90IGJlZW4gaW5pdGlhdGVkLlwiKTtcblxuXHRcdGlmICh0aGlzLm1hbmFnZXIubm9kZXMuaGFzKG9wdGlvbnMuaWRlbnRpZmllciB8fCBvcHRpb25zLmhvc3QpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5tYW5hZ2VyLm5vZGVzLmdldChvcHRpb25zLmlkZW50aWZpZXIgfHwgb3B0aW9ucy5ob3N0KTtcblx0XHR9XG5cblx0XHRub2RlQ2hlY2sob3B0aW9ucyk7XG5cblx0XHR0aGlzLm9wdGlvbnMgPSB7XG5cdFx0XHRwb3J0OiAyMzMzLFxuXHRcdFx0cGFzc3dvcmQ6IFwieW91c2hhbGxub3RwYXNzXCIsXG5cdFx0XHRzZWN1cmU6IGZhbHNlLFxuXHRcdFx0cmV0cnlBbW91bnQ6IDMwLFxuXHRcdFx0cmV0cnlEZWxheTogNjAwMDAsXG5cdFx0XHRwcmlvcml0eTogMCxcblx0XHRcdC4uLm9wdGlvbnMsXG5cdFx0fTtcblxuXHRcdGlmICh0aGlzLm9wdGlvbnMuc2VjdXJlKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMucG9ydCA9IDQ0Mztcblx0XHR9XG5cblx0XHR0aGlzLm9wdGlvbnMuaWRlbnRpZmllciA9IG9wdGlvbnMuaWRlbnRpZmllciB8fCBvcHRpb25zLmhvc3Q7XG5cdFx0dGhpcy5zdGF0cyA9IHtcblx0XHRcdHBsYXllcnM6IDAsXG5cdFx0XHRwbGF5aW5nUGxheWVyczogMCxcblx0XHRcdHVwdGltZTogMCxcblx0XHRcdG1lbW9yeToge1xuXHRcdFx0XHRmcmVlOiAwLFxuXHRcdFx0XHR1c2VkOiAwLFxuXHRcdFx0XHRhbGxvY2F0ZWQ6IDAsXG5cdFx0XHRcdHJlc2VydmFibGU6IDAsXG5cdFx0XHR9LFxuXHRcdFx0Y3B1OiB7XG5cdFx0XHRcdGNvcmVzOiAwLFxuXHRcdFx0XHRzeXN0ZW1Mb2FkOiAwLFxuXHRcdFx0XHRsYXZhbGlua0xvYWQ6IDAsXG5cdFx0XHR9LFxuXHRcdFx0ZnJhbWVTdGF0czoge1xuXHRcdFx0XHRzZW50OiAwLFxuXHRcdFx0XHRudWxsZWQ6IDAsXG5cdFx0XHRcdGRlZmljaXQ6IDAsXG5cdFx0XHR9LFxuXHRcdH07XG5cblx0XHR0aGlzLm1hbmFnZXIubm9kZXMuc2V0KHRoaXMub3B0aW9ucy5pZGVudGlmaWVyLCB0aGlzKTtcblx0XHR0aGlzLm1hbmFnZXIuZW1pdChcIk5vZGVDcmVhdGVcIiwgdGhpcyk7XG5cdFx0dGhpcy5yZXN0ID0gbmV3IFJlc3QodGhpcyk7XG5cdH1cblxuXHQvKiogQ29ubmVjdHMgdG8gdGhlIE5vZGUuICovXG5cdHB1YmxpYyBjb25uZWN0KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmNvbm5lY3RlZCkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe1xuXHRcdFx0QXV0aG9yaXphdGlvbjogdGhpcy5vcHRpb25zLnBhc3N3b3JkLFxuXHRcdFx0XCJOdW0tU2hhcmRzXCI6IFN0cmluZyh0aGlzLm1hbmFnZXIub3B0aW9ucy5zaGFyZHMpLFxuXHRcdFx0XCJVc2VyLUlkXCI6IHRoaXMubWFuYWdlci5vcHRpb25zLmNsaWVudElkLFxuXHRcdFx0XCJDbGllbnQtTmFtZVwiOiB0aGlzLm1hbmFnZXIub3B0aW9ucy5jbGllbnROYW1lLFxuXHRcdH0pO1xuXG5cdFx0dGhpcy5zb2NrZXQgPSBuZXcgV2ViU29ja2V0KGB3cyR7dGhpcy5vcHRpb25zLnNlY3VyZSA/IFwic1wiIDogXCJcIn06Ly8ke3RoaXMuYWRkcmVzc30vdjQvd2Vic29ja2V0YCwgeyBoZWFkZXJzIH0pO1xuXHRcdHRoaXMuc29ja2V0Lm9uKFwib3BlblwiLCB0aGlzLm9wZW4uYmluZCh0aGlzKSk7XG5cdFx0dGhpcy5zb2NrZXQub24oXCJjbG9zZVwiLCB0aGlzLmNsb3NlLmJpbmQodGhpcykpO1xuXHRcdHRoaXMuc29ja2V0Lm9uKFwibWVzc2FnZVwiLCB0aGlzLm1lc3NhZ2UuYmluZCh0aGlzKSk7XG5cdFx0dGhpcy5zb2NrZXQub24oXCJlcnJvclwiLCB0aGlzLmVycm9yLmJpbmQodGhpcykpO1xuXHR9XG5cblx0LyoqIERlc3Ryb3lzIHRoZSBOb2RlIGFuZCBhbGwgcGxheWVycyBjb25uZWN0ZWQgd2l0aCBpdC4gKi9cblx0cHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmNvbm5lY3RlZCkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgcGxheWVycyA9IHRoaXMubWFuYWdlci5wbGF5ZXJzLmZpbHRlcigocCkgPT4gcC5ub2RlID09IHRoaXMpO1xuXHRcdGlmIChwbGF5ZXJzLnNpemUpIHBsYXllcnMuZm9yRWFjaCgocCkgPT4gcC5kZXN0cm95KCkpO1xuXG5cdFx0dGhpcy5zb2NrZXQuY2xvc2UoMTAwMCwgXCJkZXN0cm95XCIpO1xuXHRcdHRoaXMuc29ja2V0LnJlbW92ZUFsbExpc3RlbmVycygpO1xuXHRcdHRoaXMuc29ja2V0ID0gbnVsbDtcblxuXHRcdHRoaXMucmVjb25uZWN0QXR0ZW1wdHMgPSAxO1xuXHRcdGNsZWFyVGltZW91dCh0aGlzLnJlY29ubmVjdFRpbWVvdXQpO1xuXG5cdFx0dGhpcy5tYW5hZ2VyLmVtaXQoXCJOb2RlRGVzdHJveVwiLCB0aGlzKTtcblx0XHR0aGlzLm1hbmFnZXIuZGVzdHJveU5vZGUodGhpcy5vcHRpb25zLmlkZW50aWZpZXIpO1xuXHR9XG5cblx0cHJpdmF0ZSByZWNvbm5lY3QoKTogdm9pZCB7XG5cdFx0dGhpcy5yZWNvbm5lY3RUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5yZWNvbm5lY3RBdHRlbXB0cyA+PSB0aGlzLm9wdGlvbnMucmV0cnlBbW91bnQpIHtcblx0XHRcdFx0Y29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYFVuYWJsZSB0byBjb25uZWN0IGFmdGVyICR7dGhpcy5vcHRpb25zLnJldHJ5QW1vdW50fSBhdHRlbXB0cy5gKTtcblxuXHRcdFx0XHR0aGlzLm1hbmFnZXIuZW1pdChcIk5vZGVFcnJvclwiLCB0aGlzLCBlcnJvcik7XG5cdFx0XHRcdHJldHVybiB0aGlzLmRlc3Ryb3koKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuc29ja2V0Py5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcblx0XHRcdHRoaXMuc29ja2V0ID0gbnVsbDtcblx0XHRcdHRoaXMubWFuYWdlci5lbWl0KFwiTm9kZVJlY29ubmVjdFwiLCB0aGlzKTtcblx0XHRcdHRoaXMuY29ubmVjdCgpO1xuXHRcdFx0dGhpcy5yZWNvbm5lY3RBdHRlbXB0cysrO1xuXHRcdH0sIHRoaXMub3B0aW9ucy5yZXRyeURlbGF5KSBhcyB1bmtub3duIGFzIE5vZGVKUy5UaW1lb3V0O1xuXHR9XG5cblx0cHJvdGVjdGVkIG9wZW4oKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMucmVjb25uZWN0VGltZW91dCkgY2xlYXJUaW1lb3V0KHRoaXMucmVjb25uZWN0VGltZW91dCk7XG5cdFx0dGhpcy5tYW5hZ2VyLmVtaXQoXCJOb2RlQ29ubmVjdFwiLCB0aGlzKTtcblx0fVxuXG5cdHByb3RlY3RlZCBjbG9zZShjb2RlOiBudW1iZXIsIHJlYXNvbjogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5tYW5hZ2VyLmVtaXQoXCJOb2RlRGlzY29ubmVjdFwiLCB0aGlzLCB7IGNvZGUsIHJlYXNvbiB9KTtcblx0XHRpZiAoY29kZSAhPT0gMTAwMCB8fCByZWFzb24gIT09IFwiZGVzdHJveVwiKSB0aGlzLnJlY29ubmVjdCgpO1xuXHR9XG5cblx0cHJvdGVjdGVkIGVycm9yKGVycm9yOiBFcnJvcik6IHZvaWQge1xuXHRcdGlmICghZXJyb3IpIHJldHVybjtcblx0XHR0aGlzLm1hbmFnZXIuZW1pdChcIk5vZGVFcnJvclwiLCB0aGlzLCBlcnJvcik7XG5cdH1cblxuXHRwcm90ZWN0ZWQgbWVzc2FnZShkOiBCdWZmZXIgfCBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShkKSkgZCA9IEJ1ZmZlci5jb25jYXQoZCk7XG5cdFx0ZWxzZSBpZiAoZCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSBkID0gQnVmZmVyLmZyb20oZCk7XG5cblx0XHRjb25zdCBwYXlsb2FkID0gSlNPTi5wYXJzZShkLnRvU3RyaW5nKCkpO1xuXG5cdFx0aWYgKCFwYXlsb2FkLm9wKSByZXR1cm47XG5cdFx0dGhpcy5tYW5hZ2VyLmVtaXQoXCJOb2RlUmF3XCIsIHBheWxvYWQpO1xuXG5cdFx0bGV0IHBsYXllcjogUGxheWVyO1xuXG5cdFx0c3dpdGNoIChwYXlsb2FkLm9wKSB7XG5cdFx0XHRjYXNlIFwic3RhdHNcIjpcblx0XHRcdFx0ZGVsZXRlIHBheWxvYWQub3A7XG5cdFx0XHRcdHRoaXMuc3RhdHMgPSB7IC4uLnBheWxvYWQgfSBhcyB1bmtub3duIGFzIE5vZGVTdGF0cztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwicGxheWVyVXBkYXRlXCI6XG5cdFx0XHRcdHBsYXllciA9IHRoaXMubWFuYWdlci5wbGF5ZXJzLmdldChwYXlsb2FkLmd1aWxkSWQpO1xuXHRcdFx0XHRpZiAocGxheWVyKSBwbGF5ZXIucG9zaXRpb24gPSBwYXlsb2FkLnN0YXRlLnBvc2l0aW9uIHx8IDA7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImV2ZW50XCI6XG5cdFx0XHRcdHRoaXMuaGFuZGxlRXZlbnQocGF5bG9hZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInJlYWR5XCI6XG5cdFx0XHRcdHRoaXMucmVzdC5zZXRTZXNzaW9uSWQocGF5bG9hZC5zZXNzaW9uSWQpO1xuXHRcdFx0XHR0aGlzLnNlc3Npb25JZCA9IHBheWxvYWQuc2Vzc2lvbklkO1xuXG5cdFx0XHRcdGlmICh0aGlzLm9wdGlvbnMucmVzdW1lU3RhdHVzKSB7XG5cdFx0XHRcdFx0dGhpcy5yZXN0LnBhdGNoKGAvdjQvc2Vzc2lvbnMvJHt0aGlzLnNlc3Npb25JZH1gLCB7XG5cdFx0XHRcdFx0XHRyZXN1bWluZzogdGhpcy5vcHRpb25zLnJlc3VtZVN0YXR1cyxcblx0XHRcdFx0XHRcdHRpbWVvdXQ6IHRoaXMub3B0aW9ucy5yZXN1bWVUaW1lb3V0LFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhpcy5tYW5hZ2VyLmVtaXQoXCJOb2RlRXJyb3JcIiwgdGhpcywgbmV3IEVycm9yKGBVbmV4cGVjdGVkIG9wIFwiJHtwYXlsb2FkLm9wfVwiIHdpdGggZGF0YTogJHtwYXlsb2FkLm1lc3NhZ2V9YCkpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0fVxuXHR9XG5cblx0cHJvdGVjdGVkIGFzeW5jIGhhbmRsZUV2ZW50KHBheWxvYWQ6IFBsYXllckV2ZW50ICYgUGxheWVyRXZlbnRzKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCFwYXlsb2FkLmd1aWxkSWQpIHJldHVybjtcblxuXHRcdGNvbnN0IHBsYXllciA9IHRoaXMubWFuYWdlci5wbGF5ZXJzLmdldChwYXlsb2FkLmd1aWxkSWQpO1xuXHRcdGlmICghcGxheWVyKSByZXR1cm47XG5cblx0XHRjb25zdCB0cmFjayA9IHBsYXllci5xdWV1ZS5jdXJyZW50O1xuXHRcdGNvbnN0IHR5cGUgPSBwYXlsb2FkLnR5cGU7XG5cblx0XHRsZXQgZXJyb3I6IEVycm9yO1xuXHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0Y2FzZSBcIlRyYWNrU3RhcnRFdmVudFwiOlxuXHRcdFx0XHR0aGlzLnRyYWNrU3RhcnQocGxheWVyLCB0cmFjayBhcyBUcmFjaywgcGF5bG9hZCk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiVHJhY2tFbmRFdmVudFwiOlxuXHRcdFx0XHRpZiAocGxheWVyPy5ub3dQbGF5aW5nTWVzc2FnZSAmJiBwbGF5ZXI/Lm5vd1BsYXlpbmdNZXNzYWdlLmRlbGV0YWJsZSkge1xuXHRcdFx0XHRcdGF3YWl0IHBsYXllcj8ubm93UGxheWluZ01lc3NhZ2U/LmRlbGV0ZSgpLmNhdGNoKCgpID0+IHt9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMudHJhY2tFbmQocGxheWVyLCB0cmFjayBhcyBUcmFjaywgcGF5bG9hZCk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiVHJhY2tTdHVja0V2ZW50XCI6XG5cdFx0XHRcdHRoaXMudHJhY2tTdHVjayhwbGF5ZXIsIHRyYWNrIGFzIFRyYWNrLCBwYXlsb2FkKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJUcmFja0V4Y2VwdGlvbkV2ZW50XCI6XG5cdFx0XHRcdHRoaXMudHJhY2tFcnJvcihwbGF5ZXIsIHRyYWNrLCBwYXlsb2FkKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJXZWJTb2NrZXRDbG9zZWRFdmVudFwiOlxuXHRcdFx0XHR0aGlzLnNvY2tldENsb3NlZChwbGF5ZXIsIHBheWxvYWQpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0ZXJyb3IgPSBuZXcgRXJyb3IoYE5vZGUjZXZlbnQgdW5rbm93biBldmVudCAnJHt0eXBlfScuYCk7XG5cdFx0XHRcdHRoaXMubWFuYWdlci5lbWl0KFwiTm9kZUVycm9yXCIsIHRoaXMsIGVycm9yKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0cHJvdGVjdGVkIHRyYWNrU3RhcnQocGxheWVyOiBQbGF5ZXIsIHRyYWNrOiBUcmFjaywgcGF5bG9hZDogVHJhY2tTdGFydEV2ZW50KTogdm9pZCB7XG5cdFx0cGxheWVyLnBsYXlpbmcgPSB0cnVlO1xuXHRcdHBsYXllci5wYXVzZWQgPSBmYWxzZTtcblx0XHR0aGlzLm1hbmFnZXIuZW1pdChcIlRyYWNrU3RhcnRcIiwgcGxheWVyLCB0cmFjaywgcGF5bG9hZCk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgYXN5bmMgdHJhY2tFbmQocGxheWVyOiBQbGF5ZXIsIHRyYWNrOiBUcmFjaywgcGF5bG9hZDogVHJhY2tFbmRFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHsgcmVhc29uIH0gPSBwYXlsb2FkO1xuXG5cdFx0Ly8gSWYgdGhlIHRyYWNrIGZhaWxlZCB0byBsb2FkIG9yIHdhcyBjbGVhbmVkIHVwXG5cdFx0aWYgKFtcImxvYWRGYWlsZWRcIiwgXCJjbGVhbnVwXCJdLmluY2x1ZGVzKHJlYXNvbikpIHtcblx0XHRcdHRoaXMuaGFuZGxlRmFpbGVkVHJhY2socGxheWVyLCB0cmFjaywgcGF5bG9hZCk7XG5cdFx0fVxuXHRcdC8vIElmIHRoZSB0cmFjayB3YXMgZm9yY2libHkgcmVwbGFjZWRcblx0XHRlbHNlIGlmIChyZWFzb24gPT09IFwicmVwbGFjZWRcIikge1xuXHRcdFx0dGhpcy5tYW5hZ2VyLmVtaXQoXCJUcmFja0VuZFwiLCBwbGF5ZXIsIHRyYWNrLCBwYXlsb2FkKTtcblx0XHRcdHBsYXllci5xdWV1ZS5wcmV2aW91cyA9IHBsYXllci5xdWV1ZS5jdXJyZW50O1xuXHRcdH1cblx0XHQvLyBJZiB0aGUgdHJhY2sgZW5kZWQgYW5kIGl0J3Mgc2V0IHRvIHJlcGVhdCAodHJhY2sgb3IgcXVldWUpXG5cdFx0ZWxzZSBpZiAodHJhY2sgJiYgKHBsYXllci50cmFja1JlcGVhdCB8fCBwbGF5ZXIucXVldWVSZXBlYXQpKSB7XG5cdFx0XHR0aGlzLmhhbmRsZVJlcGVhdGVkVHJhY2socGxheWVyLCB0cmFjaywgcGF5bG9hZCk7XG5cdFx0fVxuXHRcdC8vIElmIHRoZXJlJ3MgYW5vdGhlciB0cmFjayBpbiB0aGUgcXVldWVcblx0XHRlbHNlIGlmIChwbGF5ZXIucXVldWUubGVuZ3RoKSB7XG5cdFx0XHR0aGlzLnBsYXlOZXh0VHJhY2socGxheWVyLCB0cmFjaywgcGF5bG9hZCk7XG5cdFx0fVxuXHRcdC8vIElmIHRoZXJlIGFyZSBubyBtb3JlIHRyYWNrcyBpbiB0aGUgcXVldWVcblx0XHRlbHNlIHtcblx0XHRcdGF3YWl0IHRoaXMucXVldWVFbmQocGxheWVyLCB0cmFjaywgcGF5bG9hZCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGV4dHJhY3RTcG90aWZ5VHJhY2tJRCh1cmw6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuXHRcdGNvbnN0IHJlZ2V4ID0gL2h0dHBzOlxcL1xcL29wZW5cXC5zcG90aWZ5XFwuY29tXFwvdHJhY2tcXC8oW2EtekEtWjAtOV0rKS87XG5cdFx0Y29uc3QgbWF0Y2ggPSB1cmwubWF0Y2gocmVnZXgpO1xuXHRcdHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogbnVsbDtcblx0fVxuXG5cdHB1YmxpYyBleHRyYWN0U3BvdGlmeUFydGlzdElEKHVybDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG5cdFx0Y29uc3QgcmVnZXggPSAvaHR0cHM6XFwvXFwvb3BlblxcLnNwb3RpZnlcXC5jb21cXC9hcnRpc3RcXC8oW2EtekEtWjAtOV0rKS87XG5cdFx0Y29uc3QgbWF0Y2ggPSB1cmwubWF0Y2gocmVnZXgpO1xuXHRcdHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogbnVsbDtcblx0fVxuXG5cdC8vIEhhbmRsZSBhdXRvcGxheVxuXHRwcml2YXRlIGFzeW5jIGhhbmRsZUF1dG9wbGF5KHBsYXllcjogUGxheWVyLCB0cmFjazogVHJhY2spIHtcblx0XHRjb25zdCBwcmV2aW91c1RyYWNrID0gcGxheWVyLnF1ZXVlLnByZXZpb3VzO1xuXG5cdFx0aWYgKCFwbGF5ZXIuaXNBdXRvcGxheSB8fCAhcHJldmlvdXNUcmFjaykgcmV0dXJuO1xuXG5cdFx0Y29uc3QgaGFzU3BvdGlmeVVSTCA9IFtcInNwb3RpZnkuY29tXCIsIFwib3Blbi5zcG90aWZ5LmNvbVwiXS5zb21lKCh1cmwpID0+IHByZXZpb3VzVHJhY2sudXJpLmluY2x1ZGVzKHVybCkpO1xuXG5cdFx0aWYgKGhhc1Nwb3RpZnlVUkwpIHtcblx0XHRcdGNvbnN0IG5vZGUgPSB0aGlzLm1hbmFnZXIudXNlYWJsZU5vZGVzO1xuXG5cdFx0XHRjb25zdCByZXMgPSBhd2FpdCBub2RlLnJlc3QuZ2V0KGAvdjQvaW5mb2ApO1xuXHRcdFx0Y29uc3QgaW5mbyA9IHJlcyBhcyBMYXZhbGlua0luZm87XG5cblx0XHRcdGNvbnN0IGlzU3BvdGlmeVBsdWdpbkVuYWJsZWQgPSBpbmZvLnBsdWdpbnMuc29tZSgocGx1Z2luOiB7IG5hbWU6IHN0cmluZyB9KSA9PiBwbHVnaW4ubmFtZSA9PT0gXCJsYXZhc3JjLXBsdWdpblwiKTtcblx0XHRcdGNvbnN0IGlzU3BvdGlmeVNvdXJjZU1hbmFnZXJFbmFibGVkID0gaW5mby5zb3VyY2VNYW5hZ2Vycy5pbmNsdWRlcyhcInNwb3RpZnlcIik7XG5cblx0XHRcdGlmIChpc1Nwb3RpZnlQbHVnaW5FbmFibGVkICYmIGlzU3BvdGlmeVNvdXJjZU1hbmFnZXJFbmFibGVkKSB7XG5cdFx0XHRcdGNvbnN0IHRyYWNrSUQgPSB0aGlzLmV4dHJhY3RTcG90aWZ5VHJhY2tJRChwcmV2aW91c1RyYWNrLnVyaSk7XG5cdFx0XHRcdGNvbnN0IGFydGlzdElEID0gdGhpcy5leHRyYWN0U3BvdGlmeUFydGlzdElEKHByZXZpb3VzVHJhY2sucGx1Z2luSW5mby5hcnRpc3RVcmwpO1xuXG5cdFx0XHRcdGxldCBpZGVudGlmaWVyID0gXCJcIjtcblx0XHRcdFx0aWYgKHRyYWNrSUQgJiYgYXJ0aXN0SUQpIHtcblx0XHRcdFx0XHRpZGVudGlmaWVyID0gYHNwcmVjOnNlZWRfYXJ0aXN0cz0ke2FydGlzdElEfSZzZWVkX3RyYWNrcz0ke3RyYWNrSUR9YDtcblx0XHRcdFx0fSBlbHNlIGlmICh0cmFja0lEKSB7XG5cdFx0XHRcdFx0aWRlbnRpZmllciA9IGBzcHJlYzpzZWVkX3RyYWNrcz0ke3RyYWNrSUR9YDtcblx0XHRcdFx0fSBlbHNlIGlmIChhcnRpc3RJRCkge1xuXHRcdFx0XHRcdGlkZW50aWZpZXIgPSBgc3ByZWM6c2VlZF9hcnRpc3RzPSR7YXJ0aXN0SUR9YDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpZGVudGlmaWVyKSB7XG5cdFx0XHRcdFx0Y29uc3QgcmVjb21tZW5kZWRSZXN1bHQgPSAoYXdhaXQgbm9kZS5yZXN0LmdldChgL3Y0L2xvYWR0cmFja3M/aWRlbnRpZmllcj0ke2VuY29kZVVSSUNvbXBvbmVudChpZGVudGlmaWVyKX1gKSkgYXMgTGF2YWxpbmtSZXNwb25zZTtcblxuXHRcdFx0XHRcdGlmIChyZWNvbW1lbmRlZFJlc3VsdC5sb2FkVHlwZSA9PT0gXCJwbGF5bGlzdFwiKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBwbGF5bGlzdERhdGEgPSByZWNvbW1lbmRlZFJlc3VsdC5kYXRhIGFzIFBsYXlsaXN0UmF3RGF0YTtcblx0XHRcdFx0XHRcdGNvbnN0IHJlY29tbWVuZGVkVHJhY2sgPSBwbGF5bGlzdERhdGEudHJhY2tzWzBdO1xuXG5cdFx0XHRcdFx0XHRpZiAocmVjb21tZW5kZWRUcmFjaykge1xuXHRcdFx0XHRcdFx0XHRwbGF5ZXIucXVldWUuYWRkKFRyYWNrVXRpbHMuYnVpbGQocmVjb21tZW5kZWRUcmFjaywgcGxheWVyLmdldChcIkludGVybmFsX0JvdFVzZXJcIikpKTtcblx0XHRcdFx0XHRcdFx0cGxheWVyLnBsYXkoKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGhhc1lvdVR1YmVVUkwgPSBbXCJ5b3V0dWJlLmNvbVwiLCBcInlvdXR1LmJlXCJdLnNvbWUoKHVybCkgPT4gcHJldmlvdXNUcmFjay51cmkuaW5jbHVkZXModXJsKSk7XG5cblx0XHRsZXQgdmlkZW9JRCA9IHByZXZpb3VzVHJhY2sudXJpLnN1YnN0cmluZyhwcmV2aW91c1RyYWNrLnVyaS5pbmRleE9mKFwiPVwiKSArIDEpO1xuXG5cdFx0aWYgKCFoYXNZb3VUdWJlVVJMKSB7XG5cdFx0XHRjb25zdCByZXMgPSBhd2FpdCBwbGF5ZXIuc2VhcmNoKGAke3ByZXZpb3VzVHJhY2suYXV0aG9yfSAtICR7cHJldmlvdXNUcmFjay50aXRsZX1gLCBwbGF5ZXIuZ2V0KFwiSW50ZXJuYWxfQm90VXNlclwiKSk7XG5cblx0XHRcdHZpZGVvSUQgPSByZXMudHJhY2tzWzBdLnVyaS5zdWJzdHJpbmcocmVzLnRyYWNrc1swXS51cmkuaW5kZXhPZihcIj1cIikgKyAxKTtcblx0XHR9XG5cblx0XHRsZXQgcmFuZG9tSW5kZXg6IG51bWJlcjtcblx0XHRsZXQgc2VhcmNoVVJJOiBzdHJpbmc7XG5cblx0XHRkbyB7XG5cdFx0XHRyYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDIzKSArIDI7XG5cdFx0XHRzZWFyY2hVUkkgPSBgaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj0ke3ZpZGVvSUR9Jmxpc3Q9UkQke3ZpZGVvSUR9JmluZGV4PSR7cmFuZG9tSW5kZXh9YDtcblx0XHR9IHdoaWxlICh0cmFjay51cmkuaW5jbHVkZXMoc2VhcmNoVVJJKSk7XG5cblx0XHRjb25zdCByZXMgPSBhd2FpdCBwbGF5ZXIuc2VhcmNoKHNlYXJjaFVSSSwgcGxheWVyLmdldChcIkludGVybmFsX0JvdFVzZXJcIikpO1xuXG5cdFx0aWYgKHJlcy5sb2FkVHlwZSA9PT0gXCJlbXB0eVwiIHx8IHJlcy5sb2FkVHlwZSA9PT0gXCJlcnJvclwiKSByZXR1cm47XG5cblx0XHRsZXQgdHJhY2tzID0gcmVzLnRyYWNrcztcblxuXHRcdGlmIChyZXMubG9hZFR5cGUgPT09IFwicGxheWxpc3RcIikge1xuXHRcdFx0dHJhY2tzID0gcmVzLnBsYXlsaXN0LnRyYWNrcztcblx0XHR9XG5cblx0XHRjb25zdCBmb3VuZFRyYWNrID0gdHJhY2tzLnNvcnQoKCkgPT4gTWF0aC5yYW5kb20oKSAtIDAuNSkuZmluZCgoc2h1ZmZsZWRUcmFjaykgPT4gc2h1ZmZsZWRUcmFjay51cmkgIT09IHRyYWNrLnVyaSk7XG5cblx0XHRpZiAoZm91bmRUcmFjaykge1xuXHRcdFx0aWYgKHRoaXMubWFuYWdlci5vcHRpb25zLnJlcGxhY2VZb3VUdWJlQ3JlZGVudGlhbHMpIHtcblx0XHRcdFx0Zm91bmRUcmFjay5hdXRob3IgPSBmb3VuZFRyYWNrLmF1dGhvci5yZXBsYWNlKFwiLSBUb3BpY1wiLCBcIlwiKTtcblx0XHRcdFx0Zm91bmRUcmFjay50aXRsZSA9IGZvdW5kVHJhY2sudGl0bGUucmVwbGFjZShcIlRvcGljIC1cIiwgXCJcIik7XG5cblx0XHRcdFx0aWYgKGZvdW5kVHJhY2sudGl0bGUuaW5jbHVkZXMoXCItXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3QgW2F1dGhvciwgdGl0bGVdID0gZm91bmRUcmFjay50aXRsZS5zcGxpdChcIi1cIikubWFwKChzdHI6IHN0cmluZykgPT4gc3RyLnRyaW0oKSk7XG5cdFx0XHRcdFx0Zm91bmRUcmFjay5hdXRob3IgPSBhdXRob3I7XG5cdFx0XHRcdFx0Zm91bmRUcmFjay50aXRsZSA9IHRpdGxlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRwbGF5ZXIucXVldWUuYWRkKGZvdW5kVHJhY2spO1xuXHRcdFx0cGxheWVyLnBsYXkoKTtcblx0XHR9XG5cdH1cblxuXHQvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlbiBhIHRyYWNrIGZhaWxlZCB0byBsb2FkIG9yIHdhcyBjbGVhbmVkIHVwXG5cdHByaXZhdGUgaGFuZGxlRmFpbGVkVHJhY2socGxheWVyOiBQbGF5ZXIsIHRyYWNrOiBUcmFjaywgcGF5bG9hZDogVHJhY2tFbmRFdmVudCk6IHZvaWQge1xuXHRcdHBsYXllci5xdWV1ZS5wcmV2aW91cyA9IHBsYXllci5xdWV1ZS5jdXJyZW50O1xuXHRcdHBsYXllci5xdWV1ZS5jdXJyZW50ID0gcGxheWVyLnF1ZXVlLnNoaWZ0KCk7XG5cblx0XHRpZiAoIXBsYXllci5xdWV1ZS5jdXJyZW50KSB7XG5cdFx0XHR0aGlzLnF1ZXVlRW5kKHBsYXllciwgdHJhY2ssIHBheWxvYWQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMubWFuYWdlci5lbWl0KFwiVHJhY2tFbmRcIiwgcGxheWVyLCB0cmFjaywgcGF5bG9hZCk7XG5cdFx0aWYgKHRoaXMubWFuYWdlci5vcHRpb25zLmF1dG9QbGF5KSBwbGF5ZXIucGxheSgpO1xuXHR9XG5cblx0Ly8gSGFuZGxlIHRoZSBjYXNlIHdoZW4gYSB0cmFjayBlbmRlZCBhbmQgaXQncyBzZXQgdG8gcmVwZWF0ICh0cmFjayBvciBxdWV1ZSlcblx0cHJpdmF0ZSBoYW5kbGVSZXBlYXRlZFRyYWNrKHBsYXllcjogUGxheWVyLCB0cmFjazogVHJhY2ssIHBheWxvYWQ6IFRyYWNrRW5kRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCB7IHF1ZXVlLCB0cmFja1JlcGVhdCwgcXVldWVSZXBlYXQgfSA9IHBsYXllcjtcblx0XHRjb25zdCB7IGF1dG9QbGF5IH0gPSB0aGlzLm1hbmFnZXIub3B0aW9ucztcblxuXHRcdGlmICh0cmFja1JlcGVhdCkge1xuXHRcdFx0cXVldWUudW5zaGlmdChxdWV1ZS5jdXJyZW50KTtcblx0XHR9IGVsc2UgaWYgKHF1ZXVlUmVwZWF0KSB7XG5cdFx0XHRxdWV1ZS5hZGQocXVldWUuY3VycmVudCk7XG5cdFx0fVxuXG5cdFx0cXVldWUucHJldmlvdXMgPSBxdWV1ZS5jdXJyZW50O1xuXHRcdHF1ZXVlLmN1cnJlbnQgPSBxdWV1ZS5zaGlmdCgpO1xuXG5cdFx0dGhpcy5tYW5hZ2VyLmVtaXQoXCJUcmFja0VuZFwiLCBwbGF5ZXIsIHRyYWNrLCBwYXlsb2FkKTtcblxuXHRcdGlmIChwYXlsb2FkLnJlYXNvbiA9PT0gXCJzdG9wcGVkXCIgJiYgIShxdWV1ZS5jdXJyZW50ID0gcXVldWUuc2hpZnQoKSkpIHtcblx0XHRcdHRoaXMucXVldWVFbmQocGxheWVyLCB0cmFjaywgcGF5bG9hZCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGF1dG9QbGF5KSBwbGF5ZXIucGxheSgpO1xuXHR9XG5cblx0Ly8gSGFuZGxlIHRoZSBjYXNlIHdoZW4gdGhlcmUncyBhbm90aGVyIHRyYWNrIGluIHRoZSBxdWV1ZVxuXHRwcml2YXRlIHBsYXlOZXh0VHJhY2socGxheWVyOiBQbGF5ZXIsIHRyYWNrOiBUcmFjaywgcGF5bG9hZDogVHJhY2tFbmRFdmVudCk6IHZvaWQge1xuXHRcdHBsYXllci5xdWV1ZS5wcmV2aW91cyA9IHBsYXllci5xdWV1ZS5jdXJyZW50O1xuXHRcdHBsYXllci5xdWV1ZS5jdXJyZW50ID0gcGxheWVyLnF1ZXVlLnNoaWZ0KCk7XG5cblx0XHR0aGlzLm1hbmFnZXIuZW1pdChcIlRyYWNrRW5kXCIsIHBsYXllciwgdHJhY2ssIHBheWxvYWQpO1xuXHRcdGlmICh0aGlzLm1hbmFnZXIub3B0aW9ucy5hdXRvUGxheSkgcGxheWVyLnBsYXkoKTtcblx0fVxuXG5cdHByb3RlY3RlZCBhc3luYyBxdWV1ZUVuZChwbGF5ZXI6IFBsYXllciwgdHJhY2s6IFRyYWNrLCBwYXlsb2FkOiBUcmFja0VuZEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cGxheWVyLnF1ZXVlLnByZXZpb3VzID0gcGxheWVyLnF1ZXVlLmN1cnJlbnQ7XG5cdFx0cGxheWVyLnF1ZXVlLmN1cnJlbnQgPSBudWxsO1xuXG5cdFx0aWYgKCFwbGF5ZXIuaXNBdXRvcGxheSkge1xuXHRcdFx0cGxheWVyLnF1ZXVlLnByZXZpb3VzID0gcGxheWVyLnF1ZXVlLmN1cnJlbnQ7XG5cdFx0XHRwbGF5ZXIucXVldWUuY3VycmVudCA9IG51bGw7XG5cdFx0XHRwbGF5ZXIucGxheWluZyA9IGZhbHNlO1xuXHRcdFx0dGhpcy5tYW5hZ2VyLmVtaXQoXCJRdWV1ZUVuZFwiLCBwbGF5ZXIsIHRyYWNrLCBwYXlsb2FkKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRhd2FpdCB0aGlzLmhhbmRsZUF1dG9wbGF5KHBsYXllciwgdHJhY2spO1xuXHR9XG5cblx0cHJvdGVjdGVkIHRyYWNrU3R1Y2socGxheWVyOiBQbGF5ZXIsIHRyYWNrOiBUcmFjaywgcGF5bG9hZDogVHJhY2tTdHVja0V2ZW50KTogdm9pZCB7XG5cdFx0cGxheWVyLnN0b3AoKTtcblx0XHR0aGlzLm1hbmFnZXIuZW1pdChcIlRyYWNrU3R1Y2tcIiwgcGxheWVyLCB0cmFjaywgcGF5bG9hZCk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgdHJhY2tFcnJvcihwbGF5ZXI6IFBsYXllciwgdHJhY2s6IFRyYWNrIHwgVW5yZXNvbHZlZFRyYWNrLCBwYXlsb2FkOiBUcmFja0V4Y2VwdGlvbkV2ZW50KTogdm9pZCB7XG5cdFx0cGxheWVyLnN0b3AoKTtcblx0XHR0aGlzLm1hbmFnZXIuZW1pdChcIlRyYWNrRXJyb3JcIiwgcGxheWVyLCB0cmFjaywgcGF5bG9hZCk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgc29ja2V0Q2xvc2VkKHBsYXllcjogUGxheWVyLCBwYXlsb2FkOiBXZWJTb2NrZXRDbG9zZWRFdmVudCk6IHZvaWQge1xuXHRcdHRoaXMubWFuYWdlci5lbWl0KFwiU29ja2V0Q2xvc2VkXCIsIHBsYXllciwgcGF5bG9hZCk7XG5cdH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb2RlT3B0aW9ucyB7XG5cdC8qKiBUaGUgaG9zdCBmb3IgdGhlIG5vZGUuICovXG5cdGhvc3Q6IHN0cmluZztcblx0LyoqIFRoZSBwb3J0IGZvciB0aGUgbm9kZS4gKi9cblx0cG9ydD86IG51bWJlcjtcblx0LyoqIFRoZSBwYXNzd29yZCBmb3IgdGhlIG5vZGUuICovXG5cdHBhc3N3b3JkPzogc3RyaW5nO1xuXHQvKiogV2hldGhlciB0aGUgaG9zdCB1c2VzIFNTTC4gKi9cblx0c2VjdXJlPzogYm9vbGVhbjtcblx0LyoqIFRoZSBpZGVudGlmaWVyIGZvciB0aGUgbm9kZS4gKi9cblx0aWRlbnRpZmllcj86IHN0cmluZztcblx0LyoqIFRoZSByZXRyeUFtb3VudCBmb3IgdGhlIG5vZGUuICovXG5cdHJldHJ5QW1vdW50PzogbnVtYmVyO1xuXHQvKiogVGhlIHJldHJ5RGVsYXkgZm9yIHRoZSBub2RlLiAqL1xuXHRyZXRyeURlbGF5PzogbnVtYmVyO1xuXHQvKiogV2hldGhlciB0byByZXN1bWUgdGhlIHByZXZpb3VzIHNlc3Npb24uICovXG5cdHJlc3VtZVN0YXR1cz86IGJvb2xlYW47XG5cdC8qKiBUaGUgdGltZSB0aGUgbWFuYWdlciB3aWxsIHdhaXQgYmVmb3JlIHRyeWluZyB0byByZXN1bWUgdGhlIHByZXZpb3VzIHNlc3Npb24uICovXG5cdHJlc3VtZVRpbWVvdXQ/OiBudW1iZXI7XG5cdC8qKiBUaGUgdGltZW91dCB1c2VkIGZvciBhcGkgY2FsbHMuICovXG5cdHJlcXVlc3RUaW1lb3V0PzogbnVtYmVyO1xuXHQvKiogUHJpb3JpdHkgb2YgdGhlIG5vZGUuICovXG5cdHByaW9yaXR5PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVTdGF0cyB7XG5cdC8qKiBUaGUgYW1vdW50IG9mIHBsYXllcnMgb24gdGhlIG5vZGUuICovXG5cdHBsYXllcnM6IG51bWJlcjtcblx0LyoqIFRoZSBhbW91bnQgb2YgcGxheWluZyBwbGF5ZXJzIG9uIHRoZSBub2RlLiAqL1xuXHRwbGF5aW5nUGxheWVyczogbnVtYmVyO1xuXHQvKiogVGhlIHVwdGltZSBmb3IgdGhlIG5vZGUuICovXG5cdHVwdGltZTogbnVtYmVyO1xuXHQvKiogVGhlIG1lbW9yeSBzdGF0cyBmb3IgdGhlIG5vZGUuICovXG5cdG1lbW9yeTogTWVtb3J5U3RhdHM7XG5cdC8qKiBUaGUgY3B1IHN0YXRzIGZvciB0aGUgbm9kZS4gKi9cblx0Y3B1OiBDUFVTdGF0cztcblx0LyoqIFRoZSBmcmFtZSBzdGF0cyBmb3IgdGhlIG5vZGUuICovXG5cdGZyYW1lU3RhdHM6IEZyYW1lU3RhdHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVtb3J5U3RhdHMge1xuXHQvKiogVGhlIGZyZWUgbWVtb3J5IG9mIHRoZSBhbGxvY2F0ZWQgYW1vdW50LiAqL1xuXHRmcmVlOiBudW1iZXI7XG5cdC8qKiBUaGUgdXNlZCBtZW1vcnkgb2YgdGhlIGFsbG9jYXRlZCBhbW91bnQuICovXG5cdHVzZWQ6IG51bWJlcjtcblx0LyoqIFRoZSB0b3RhbCBhbGxvY2F0ZWQgbWVtb3J5LiAqL1xuXHRhbGxvY2F0ZWQ6IG51bWJlcjtcblx0LyoqIFRoZSByZXNlcnZhYmxlIG1lbW9yeS4gKi9cblx0cmVzZXJ2YWJsZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENQVVN0YXRzIHtcblx0LyoqIFRoZSBjb3JlIGFtb3VudCB0aGUgaG9zdCBtYWNoaW5lIGhhcy4gKi9cblx0Y29yZXM6IG51bWJlcjtcblx0LyoqIFRoZSBzeXN0ZW0gbG9hZC4gKi9cblx0c3lzdGVtTG9hZDogbnVtYmVyO1xuXHQvKiogVGhlIGxhdmFsaW5rIGxvYWQuICovXG5cdGxhdmFsaW5rTG9hZDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZyYW1lU3RhdHMge1xuXHQvKiogVGhlIGFtb3VudCBvZiBzZW50IGZyYW1lcy4gKi9cblx0c2VudD86IG51bWJlcjtcblx0LyoqIFRoZSBhbW91bnQgb2YgbnVsbGVkIGZyYW1lcy4gKi9cblx0bnVsbGVkPzogbnVtYmVyO1xuXHQvKiogVGhlIGFtb3VudCBvZiBkZWZpY2l0IGZyYW1lcy4gKi9cblx0ZGVmaWNpdD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYXZhbGlua0luZm8ge1xuXHR2ZXJzaW9uOiB7IHNlbXZlcjogc3RyaW5nOyBtYWpvcjogbnVtYmVyOyBtaW5vcjogbnVtYmVyOyBwYXRjaDogbnVtYmVyOyBwcmVSZWxlYXNlOiBzdHJpbmcgfTtcblx0YnVpbGRUaW1lOiBudW1iZXI7XG5cdGdpdDogeyBicmFuY2g6IHN0cmluZzsgY29tbWl0OiBzdHJpbmc7IGNvbW1pdFRpbWU6IG51bWJlciB9O1xuXHRqdm06IHN0cmluZztcblx0bGF2YXBsYXllcjogc3RyaW5nO1xuXHRzb3VyY2VNYW5hZ2Vyczogc3RyaW5nW107XG5cdGZpbHRlcnM6IHN0cmluZ1tdO1xuXHRwbHVnaW5zOiB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBYUEsSUFBQUMsS0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksR0FBQSxHQUFBRCxzQkFBQSxDQUFBSCxPQUFBO0FBQTJCLFNBQUFHLHVCQUFBRSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsZ0JBQUFBLENBQUE7QUFBQSxTQUFBRSxRQUFBQyxDQUFBLHNDQUFBRCxPQUFBLHdCQUFBRSxNQUFBLHVCQUFBQSxNQUFBLENBQUFDLFFBQUEsYUFBQUYsQ0FBQSxrQkFBQUEsQ0FBQSxnQkFBQUEsQ0FBQSxXQUFBQSxDQUFBLHlCQUFBQyxNQUFBLElBQUFELENBQUEsQ0FBQUcsV0FBQSxLQUFBRixNQUFBLElBQUFELENBQUEsS0FBQUMsTUFBQSxDQUFBRyxTQUFBLHFCQUFBSixDQUFBLEtBQUFELE9BQUEsQ0FBQUMsQ0FBQTtBQUFBLFNBQUFLLGVBQUFDLENBQUEsRUFBQVQsQ0FBQSxXQUFBVSxlQUFBLENBQUFELENBQUEsS0FBQUUscUJBQUEsQ0FBQUYsQ0FBQSxFQUFBVCxDQUFBLEtBQUFZLDJCQUFBLENBQUFILENBQUEsRUFBQVQsQ0FBQSxLQUFBYSxnQkFBQTtBQUFBLFNBQUFBLGlCQUFBLGNBQUFDLFNBQUE7QUFBQSxTQUFBRiw0QkFBQUgsQ0FBQSxFQUFBTSxDQUFBLFFBQUFOLENBQUEsMkJBQUFBLENBQUEsU0FBQU8saUJBQUEsQ0FBQVAsQ0FBQSxFQUFBTSxDQUFBLE9BQUFFLENBQUEsTUFBQUMsUUFBQSxDQUFBQyxJQUFBLENBQUFWLENBQUEsRUFBQVcsS0FBQSw2QkFBQUgsQ0FBQSxJQUFBUixDQUFBLENBQUFILFdBQUEsS0FBQVcsQ0FBQSxHQUFBUixDQUFBLENBQUFILFdBQUEsQ0FBQWUsSUFBQSxhQUFBSixDQUFBLGNBQUFBLENBQUEsR0FBQUssS0FBQSxDQUFBQyxJQUFBLENBQUFkLENBQUEsb0JBQUFRLENBQUEsK0NBQUFPLElBQUEsQ0FBQVAsQ0FBQSxJQUFBRCxpQkFBQSxDQUFBUCxDQUFBLEVBQUFNLENBQUE7QUFBQSxTQUFBQyxrQkFBQVAsQ0FBQSxFQUFBTSxDQUFBLGFBQUFBLENBQUEsSUFBQUEsQ0FBQSxHQUFBTixDQUFBLENBQUFnQixNQUFBLE1BQUFWLENBQUEsR0FBQU4sQ0FBQSxDQUFBZ0IsTUFBQSxZQUFBekIsQ0FBQSxNQUFBMEIsQ0FBQSxHQUFBSixLQUFBLENBQUFQLENBQUEsR0FBQWYsQ0FBQSxHQUFBZSxDQUFBLEVBQUFmLENBQUEsSUFBQTBCLENBQUEsQ0FBQTFCLENBQUEsSUFBQVMsQ0FBQSxDQUFBVCxDQUFBLFVBQUEwQixDQUFBO0FBQUEsU0FBQWYsc0JBQUFGLENBQUEsRUFBQWtCLENBQUEsUUFBQVYsQ0FBQSxXQUFBUixDQUFBLGdDQUFBTCxNQUFBLElBQUFLLENBQUEsQ0FBQUwsTUFBQSxDQUFBQyxRQUFBLEtBQUFJLENBQUEsNEJBQUFRLENBQUEsUUFBQWpCLENBQUEsRUFBQTBCLENBQUEsRUFBQUUsQ0FBQSxFQUFBQyxDQUFBLEVBQUFkLENBQUEsT0FBQWUsQ0FBQSxPQUFBM0IsQ0FBQSxpQkFBQXlCLENBQUEsSUFBQVgsQ0FBQSxHQUFBQSxDQUFBLENBQUFFLElBQUEsQ0FBQVYsQ0FBQSxHQUFBc0IsSUFBQSxRQUFBSixDQUFBLFFBQUFLLE1BQUEsQ0FBQWYsQ0FBQSxNQUFBQSxDQUFBLFVBQUFhLENBQUEsdUJBQUFBLENBQUEsSUFBQTlCLENBQUEsR0FBQTRCLENBQUEsQ0FBQVQsSUFBQSxDQUFBRixDQUFBLEdBQUFnQixJQUFBLE1BQUFsQixDQUFBLENBQUFtQixJQUFBLENBQUFsQyxDQUFBLENBQUFtQyxLQUFBLEdBQUFwQixDQUFBLENBQUFVLE1BQUEsS0FBQUUsQ0FBQSxHQUFBRyxDQUFBLGlCQUFBckIsQ0FBQSxJQUFBTixDQUFBLE9BQUF1QixDQUFBLEdBQUFqQixDQUFBLHlCQUFBcUIsQ0FBQSxZQUFBYixDQUFBLGVBQUFZLENBQUEsR0FBQVosQ0FBQSxjQUFBZSxNQUFBLENBQUFILENBQUEsTUFBQUEsQ0FBQSwyQkFBQTFCLENBQUEsUUFBQXVCLENBQUEsYUFBQVgsQ0FBQTtBQUFBLFNBQUFMLGdCQUFBRCxDQUFBLFFBQUFhLEtBQUEsQ0FBQWMsT0FBQSxDQUFBM0IsQ0FBQSxVQUFBQSxDQUFBO0FBQUEsU0FBQTRCLG9CQUFBLGtCQWQzQixxSkFBQUEsbUJBQUEsWUFBQUEsb0JBQUEsV0FBQXJDLENBQUEsU0FBQWlCLENBQUEsRUFBQWpCLENBQUEsT0FBQVMsQ0FBQSxHQUFBdUIsTUFBQSxDQUFBekIsU0FBQSxFQUFBbUIsQ0FBQSxHQUFBakIsQ0FBQSxDQUFBNkIsY0FBQSxFQUFBbkMsQ0FBQSxHQUFBNkIsTUFBQSxDQUFBTyxjQUFBLGNBQUF0QixDQUFBLEVBQUFqQixDQUFBLEVBQUFTLENBQUEsSUFBQVEsQ0FBQSxDQUFBakIsQ0FBQSxJQUFBUyxDQUFBLENBQUEwQixLQUFBLEtBQUFQLENBQUEsd0JBQUF4QixNQUFBLEdBQUFBLE1BQUEsT0FBQVcsQ0FBQSxHQUFBYSxDQUFBLENBQUF2QixRQUFBLGtCQUFBbUMsQ0FBQSxHQUFBWixDQUFBLENBQUFhLGFBQUEsdUJBQUFaLENBQUEsR0FBQUQsQ0FBQSxDQUFBYyxXQUFBLDhCQUFBQyxPQUFBMUIsQ0FBQSxFQUFBakIsQ0FBQSxFQUFBUyxDQUFBLFdBQUF1QixNQUFBLENBQUFPLGNBQUEsQ0FBQXRCLENBQUEsRUFBQWpCLENBQUEsSUFBQW1DLEtBQUEsRUFBQTFCLENBQUEsRUFBQW1DLFVBQUEsTUFBQUMsWUFBQSxNQUFBQyxRQUFBLFNBQUE3QixDQUFBLENBQUFqQixDQUFBLFdBQUEyQyxNQUFBLG1CQUFBMUIsQ0FBQSxJQUFBMEIsTUFBQSxZQUFBQSxPQUFBMUIsQ0FBQSxFQUFBakIsQ0FBQSxFQUFBUyxDQUFBLFdBQUFRLENBQUEsQ0FBQWpCLENBQUEsSUFBQVMsQ0FBQSxnQkFBQXNDLEtBQUE5QixDQUFBLEVBQUFqQixDQUFBLEVBQUFTLENBQUEsRUFBQWlCLENBQUEsUUFBQUUsQ0FBQSxHQUFBNUIsQ0FBQSxJQUFBQSxDQUFBLENBQUFPLFNBQUEsWUFBQXlDLFNBQUEsR0FBQWhELENBQUEsR0FBQWdELFNBQUEsRUFBQWpDLENBQUEsR0FBQWlCLE1BQUEsQ0FBQWlCLE1BQUEsQ0FBQXJCLENBQUEsQ0FBQXJCLFNBQUEsR0FBQWlDLENBQUEsT0FBQVUsT0FBQSxDQUFBeEIsQ0FBQSxnQkFBQXZCLENBQUEsQ0FBQVksQ0FBQSxlQUFBb0IsS0FBQSxFQUFBZ0IsZ0JBQUEsQ0FBQWxDLENBQUEsRUFBQVIsQ0FBQSxFQUFBK0IsQ0FBQSxNQUFBekIsQ0FBQSxhQUFBcUMsU0FBQW5DLENBQUEsRUFBQWpCLENBQUEsRUFBQVMsQ0FBQSxtQkFBQTRDLElBQUEsWUFBQUMsR0FBQSxFQUFBckMsQ0FBQSxDQUFBRSxJQUFBLENBQUFuQixDQUFBLEVBQUFTLENBQUEsY0FBQVEsQ0FBQSxhQUFBb0MsSUFBQSxXQUFBQyxHQUFBLEVBQUFyQyxDQUFBLFFBQUFqQixDQUFBLENBQUErQyxJQUFBLEdBQUFBLElBQUEsTUFBQVEsQ0FBQSxxQkFBQTVCLENBQUEscUJBQUFHLENBQUEsZ0JBQUEwQixDQUFBLGdCQUFBQyxDQUFBLGdCQUFBVCxVQUFBLGNBQUFVLGtCQUFBLGNBQUFDLDJCQUFBLFNBQUFDLENBQUEsT0FBQWpCLE1BQUEsQ0FBQWlCLENBQUEsRUFBQTdDLENBQUEscUNBQUE4QyxDQUFBLEdBQUE3QixNQUFBLENBQUE4QixjQUFBLEVBQUFDLENBQUEsR0FBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFBLENBQUEsQ0FBQUcsTUFBQSxRQUFBRCxDQUFBLElBQUFBLENBQUEsS0FBQXRELENBQUEsSUFBQWlCLENBQUEsQ0FBQVAsSUFBQSxDQUFBNEMsQ0FBQSxFQUFBaEQsQ0FBQSxNQUFBNkMsQ0FBQSxHQUFBRyxDQUFBLE9BQUFFLENBQUEsR0FBQU4sMEJBQUEsQ0FBQXBELFNBQUEsR0FBQXlDLFNBQUEsQ0FBQXpDLFNBQUEsR0FBQXlCLE1BQUEsQ0FBQWlCLE1BQUEsQ0FBQVcsQ0FBQSxZQUFBTSxzQkFBQWpELENBQUEsZ0NBQUFrRCxPQUFBLFdBQUFuRSxDQUFBLElBQUEyQyxNQUFBLENBQUExQixDQUFBLEVBQUFqQixDQUFBLFlBQUFpQixDQUFBLGdCQUFBbUQsT0FBQSxDQUFBcEUsQ0FBQSxFQUFBaUIsQ0FBQSxzQkFBQW9ELGNBQUFwRCxDQUFBLEVBQUFqQixDQUFBLGFBQUFzRSxPQUFBN0QsQ0FBQSxFQUFBTixDQUFBLEVBQUF5QixDQUFBLEVBQUFiLENBQUEsUUFBQXlCLENBQUEsR0FBQVksUUFBQSxDQUFBbkMsQ0FBQSxDQUFBUixDQUFBLEdBQUFRLENBQUEsRUFBQWQsQ0FBQSxtQkFBQXFDLENBQUEsQ0FBQWEsSUFBQSxRQUFBeEIsQ0FBQSxHQUFBVyxDQUFBLENBQUFjLEdBQUEsRUFBQUMsQ0FBQSxHQUFBMUIsQ0FBQSxDQUFBTSxLQUFBLFNBQUFvQixDQUFBLGdCQUFBckQsT0FBQSxDQUFBcUQsQ0FBQSxLQUFBN0IsQ0FBQSxDQUFBUCxJQUFBLENBQUFvQyxDQUFBLGVBQUF2RCxDQUFBLENBQUF1RSxPQUFBLENBQUFoQixDQUFBLENBQUFpQixPQUFBLEVBQUFDLElBQUEsV0FBQXhELENBQUEsSUFBQXFELE1BQUEsU0FBQXJELENBQUEsRUFBQVcsQ0FBQSxFQUFBYixDQUFBLGdCQUFBRSxDQUFBLElBQUFxRCxNQUFBLFVBQUFyRCxDQUFBLEVBQUFXLENBQUEsRUFBQWIsQ0FBQSxRQUFBZixDQUFBLENBQUF1RSxPQUFBLENBQUFoQixDQUFBLEVBQUFrQixJQUFBLFdBQUF4RCxDQUFBLElBQUFZLENBQUEsQ0FBQU0sS0FBQSxHQUFBbEIsQ0FBQSxFQUFBVyxDQUFBLENBQUFDLENBQUEsZ0JBQUFaLENBQUEsV0FBQXFELE1BQUEsVUFBQXJELENBQUEsRUFBQVcsQ0FBQSxFQUFBYixDQUFBLFNBQUFBLENBQUEsQ0FBQXlCLENBQUEsQ0FBQWMsR0FBQSxTQUFBN0MsQ0FBQSxFQUFBTixDQUFBLG9CQUFBZ0MsS0FBQSxXQUFBQSxNQUFBbEIsQ0FBQSxFQUFBUyxDQUFBLGFBQUFnRCwyQkFBQSxlQUFBMUUsQ0FBQSxXQUFBQSxDQUFBLEVBQUFTLENBQUEsSUFBQTZELE1BQUEsQ0FBQXJELENBQUEsRUFBQVMsQ0FBQSxFQUFBMUIsQ0FBQSxFQUFBUyxDQUFBLGdCQUFBQSxDQUFBLEdBQUFBLENBQUEsR0FBQUEsQ0FBQSxDQUFBZ0UsSUFBQSxDQUFBQywwQkFBQSxFQUFBQSwwQkFBQSxJQUFBQSwwQkFBQSxxQkFBQXZCLGlCQUFBbkQsQ0FBQSxFQUFBUyxDQUFBLEVBQUFpQixDQUFBLFFBQUF2QixDQUFBLEdBQUFvRCxDQUFBLG1CQUFBM0IsQ0FBQSxFQUFBYixDQUFBLFFBQUFaLENBQUEsS0FBQTJCLENBQUEsUUFBQTZDLEtBQUEsc0NBQUF4RSxDQUFBLEtBQUFxRCxDQUFBLG9CQUFBNUIsQ0FBQSxRQUFBYixDQUFBLFdBQUFvQixLQUFBLEVBQUFsQixDQUFBLEVBQUFnQixJQUFBLGVBQUFQLENBQUEsQ0FBQWtELE1BQUEsR0FBQWhELENBQUEsRUFBQUYsQ0FBQSxDQUFBNEIsR0FBQSxHQUFBdkMsQ0FBQSxVQUFBeUIsQ0FBQSxHQUFBZCxDQUFBLENBQUFtRCxRQUFBLE1BQUFyQyxDQUFBLFFBQUFYLENBQUEsR0FBQWlELG1CQUFBLENBQUF0QyxDQUFBLEVBQUFkLENBQUEsT0FBQUcsQ0FBQSxRQUFBQSxDQUFBLEtBQUE0QixDQUFBLG1CQUFBNUIsQ0FBQSxxQkFBQUgsQ0FBQSxDQUFBa0QsTUFBQSxFQUFBbEQsQ0FBQSxDQUFBcUQsSUFBQSxHQUFBckQsQ0FBQSxDQUFBc0QsS0FBQSxHQUFBdEQsQ0FBQSxDQUFBNEIsR0FBQSxzQkFBQTVCLENBQUEsQ0FBQWtELE1BQUEsUUFBQXpFLENBQUEsS0FBQW9ELENBQUEsUUFBQXBELENBQUEsR0FBQXFELENBQUEsRUFBQTlCLENBQUEsQ0FBQTRCLEdBQUEsRUFBQTVCLENBQUEsQ0FBQXVELGlCQUFBLENBQUF2RCxDQUFBLENBQUE0QixHQUFBLHVCQUFBNUIsQ0FBQSxDQUFBa0QsTUFBQSxJQUFBbEQsQ0FBQSxDQUFBd0QsTUFBQSxXQUFBeEQsQ0FBQSxDQUFBNEIsR0FBQSxHQUFBbkQsQ0FBQSxHQUFBMkIsQ0FBQSxNQUFBOEIsQ0FBQSxHQUFBUixRQUFBLENBQUFwRCxDQUFBLEVBQUFTLENBQUEsRUFBQWlCLENBQUEsb0JBQUFrQyxDQUFBLENBQUFQLElBQUEsUUFBQWxELENBQUEsR0FBQXVCLENBQUEsQ0FBQU8sSUFBQSxHQUFBdUIsQ0FBQSxHQUFBN0IsQ0FBQSxFQUFBaUMsQ0FBQSxDQUFBTixHQUFBLEtBQUFHLENBQUEscUJBQUF0QixLQUFBLEVBQUF5QixDQUFBLENBQUFOLEdBQUEsRUFBQXJCLElBQUEsRUFBQVAsQ0FBQSxDQUFBTyxJQUFBLGtCQUFBMkIsQ0FBQSxDQUFBUCxJQUFBLEtBQUFsRCxDQUFBLEdBQUFxRCxDQUFBLEVBQUE5QixDQUFBLENBQUFrRCxNQUFBLFlBQUFsRCxDQUFBLENBQUE0QixHQUFBLEdBQUFNLENBQUEsQ0FBQU4sR0FBQSxtQkFBQXdCLG9CQUFBOUUsQ0FBQSxFQUFBUyxDQUFBLFFBQUFpQixDQUFBLEdBQUFqQixDQUFBLENBQUFtRSxNQUFBLEVBQUF6RSxDQUFBLEdBQUFILENBQUEsQ0FBQUssUUFBQSxDQUFBcUIsQ0FBQSxPQUFBdkIsQ0FBQSxLQUFBYyxDQUFBLFNBQUFSLENBQUEsQ0FBQW9FLFFBQUEscUJBQUFuRCxDQUFBLElBQUExQixDQUFBLENBQUFLLFFBQUEsZUFBQUksQ0FBQSxDQUFBbUUsTUFBQSxhQUFBbkUsQ0FBQSxDQUFBNkMsR0FBQSxHQUFBckMsQ0FBQSxFQUFBNkQsbUJBQUEsQ0FBQTlFLENBQUEsRUFBQVMsQ0FBQSxlQUFBQSxDQUFBLENBQUFtRSxNQUFBLGtCQUFBbEQsQ0FBQSxLQUFBakIsQ0FBQSxDQUFBbUUsTUFBQSxZQUFBbkUsQ0FBQSxDQUFBNkMsR0FBQSxPQUFBeEMsU0FBQSx1Q0FBQVksQ0FBQSxpQkFBQStCLENBQUEsTUFBQTdCLENBQUEsR0FBQXdCLFFBQUEsQ0FBQWpELENBQUEsRUFBQUgsQ0FBQSxDQUFBSyxRQUFBLEVBQUFJLENBQUEsQ0FBQTZDLEdBQUEsbUJBQUExQixDQUFBLENBQUF5QixJQUFBLFNBQUE1QyxDQUFBLENBQUFtRSxNQUFBLFlBQUFuRSxDQUFBLENBQUE2QyxHQUFBLEdBQUExQixDQUFBLENBQUEwQixHQUFBLEVBQUE3QyxDQUFBLENBQUFvRSxRQUFBLFNBQUFwQixDQUFBLE1BQUExQyxDQUFBLEdBQUFhLENBQUEsQ0FBQTBCLEdBQUEsU0FBQXZDLENBQUEsR0FBQUEsQ0FBQSxDQUFBa0IsSUFBQSxJQUFBeEIsQ0FBQSxDQUFBVCxDQUFBLENBQUFtRixVQUFBLElBQUFwRSxDQUFBLENBQUFvQixLQUFBLEVBQUExQixDQUFBLENBQUFzQixJQUFBLEdBQUEvQixDQUFBLENBQUFvRixPQUFBLGVBQUEzRSxDQUFBLENBQUFtRSxNQUFBLEtBQUFuRSxDQUFBLENBQUFtRSxNQUFBLFdBQUFuRSxDQUFBLENBQUE2QyxHQUFBLEdBQUFyQyxDQUFBLEdBQUFSLENBQUEsQ0FBQW9FLFFBQUEsU0FBQXBCLENBQUEsSUFBQTFDLENBQUEsSUFBQU4sQ0FBQSxDQUFBbUUsTUFBQSxZQUFBbkUsQ0FBQSxDQUFBNkMsR0FBQSxPQUFBeEMsU0FBQSxzQ0FBQUwsQ0FBQSxDQUFBb0UsUUFBQSxTQUFBcEIsQ0FBQSxjQUFBNEIsYUFBQXBFLENBQUEsUUFBQWpCLENBQUEsS0FBQXNGLE1BQUEsRUFBQXJFLENBQUEsWUFBQUEsQ0FBQSxLQUFBakIsQ0FBQSxDQUFBdUYsUUFBQSxHQUFBdEUsQ0FBQSxXQUFBQSxDQUFBLEtBQUFqQixDQUFBLENBQUF3RixVQUFBLEdBQUF2RSxDQUFBLEtBQUFqQixDQUFBLENBQUF5RixRQUFBLEdBQUF4RSxDQUFBLFdBQUF5RSxVQUFBLENBQUF4RCxJQUFBLENBQUFsQyxDQUFBLGNBQUEyRixjQUFBMUUsQ0FBQSxRQUFBakIsQ0FBQSxHQUFBaUIsQ0FBQSxDQUFBMkUsVUFBQSxRQUFBNUYsQ0FBQSxDQUFBcUQsSUFBQSxvQkFBQXJELENBQUEsQ0FBQXNELEdBQUEsRUFBQXJDLENBQUEsQ0FBQTJFLFVBQUEsR0FBQTVGLENBQUEsYUFBQWtELFFBQUFqQyxDQUFBLFNBQUF5RSxVQUFBLE1BQUFKLE1BQUEsYUFBQXJFLENBQUEsQ0FBQWtELE9BQUEsQ0FBQWtCLFlBQUEsY0FBQVEsS0FBQSxpQkFBQTdCLE9BQUFoRSxDQUFBLFFBQUFBLENBQUEsV0FBQUEsQ0FBQSxRQUFBUyxDQUFBLEdBQUFULENBQUEsQ0FBQWUsQ0FBQSxPQUFBTixDQUFBLFNBQUFBLENBQUEsQ0FBQVUsSUFBQSxDQUFBbkIsQ0FBQSw0QkFBQUEsQ0FBQSxDQUFBK0IsSUFBQSxTQUFBL0IsQ0FBQSxPQUFBOEYsS0FBQSxDQUFBOUYsQ0FBQSxDQUFBeUIsTUFBQSxTQUFBdEIsQ0FBQSxPQUFBeUIsQ0FBQSxZQUFBRyxLQUFBLGFBQUE1QixDQUFBLEdBQUFILENBQUEsQ0FBQXlCLE1BQUEsT0FBQUMsQ0FBQSxDQUFBUCxJQUFBLENBQUFuQixDQUFBLEVBQUFHLENBQUEsVUFBQTRCLElBQUEsQ0FBQUksS0FBQSxHQUFBbkMsQ0FBQSxDQUFBRyxDQUFBLEdBQUE0QixJQUFBLENBQUFFLElBQUEsT0FBQUYsSUFBQSxTQUFBQSxJQUFBLENBQUFJLEtBQUEsR0FBQWxCLENBQUEsRUFBQWMsSUFBQSxDQUFBRSxJQUFBLE9BQUFGLElBQUEsWUFBQUgsQ0FBQSxDQUFBRyxJQUFBLEdBQUFILENBQUEsZ0JBQUFkLFNBQUEsQ0FBQVosT0FBQSxDQUFBRixDQUFBLGtDQUFBMEQsaUJBQUEsQ0FBQW5ELFNBQUEsR0FBQW9ELDBCQUFBLEVBQUF4RCxDQUFBLENBQUE4RCxDQUFBLG1CQUFBOUIsS0FBQSxFQUFBd0IsMEJBQUEsRUFBQWQsWUFBQSxTQUFBMUMsQ0FBQSxDQUFBd0QsMEJBQUEsbUJBQUF4QixLQUFBLEVBQUF1QixpQkFBQSxFQUFBYixZQUFBLFNBQUFhLGlCQUFBLENBQUFxQyxXQUFBLEdBQUFwRCxNQUFBLENBQUFnQiwwQkFBQSxFQUFBOUIsQ0FBQSx3QkFBQTdCLENBQUEsQ0FBQWdHLG1CQUFBLGFBQUEvRSxDQUFBLFFBQUFqQixDQUFBLHdCQUFBaUIsQ0FBQSxJQUFBQSxDQUFBLENBQUFYLFdBQUEsV0FBQU4sQ0FBQSxLQUFBQSxDQUFBLEtBQUEwRCxpQkFBQSw2QkFBQTFELENBQUEsQ0FBQStGLFdBQUEsSUFBQS9GLENBQUEsQ0FBQXFCLElBQUEsT0FBQXJCLENBQUEsQ0FBQWlHLElBQUEsYUFBQWhGLENBQUEsV0FBQWUsTUFBQSxDQUFBa0UsY0FBQSxHQUFBbEUsTUFBQSxDQUFBa0UsY0FBQSxDQUFBakYsQ0FBQSxFQUFBMEMsMEJBQUEsS0FBQTFDLENBQUEsQ0FBQWtGLFNBQUEsR0FBQXhDLDBCQUFBLEVBQUFoQixNQUFBLENBQUExQixDQUFBLEVBQUFZLENBQUEseUJBQUFaLENBQUEsQ0FBQVYsU0FBQSxHQUFBeUIsTUFBQSxDQUFBaUIsTUFBQSxDQUFBZ0IsQ0FBQSxHQUFBaEQsQ0FBQSxLQUFBakIsQ0FBQSxDQUFBb0csS0FBQSxhQUFBbkYsQ0FBQSxhQUFBdUQsT0FBQSxFQUFBdkQsQ0FBQSxPQUFBaUQscUJBQUEsQ0FBQUcsYUFBQSxDQUFBOUQsU0FBQSxHQUFBb0MsTUFBQSxDQUFBMEIsYUFBQSxDQUFBOUQsU0FBQSxFQUFBaUMsQ0FBQSxpQ0FBQXhDLENBQUEsQ0FBQXFFLGFBQUEsR0FBQUEsYUFBQSxFQUFBckUsQ0FBQSxDQUFBcUcsS0FBQSxhQUFBcEYsQ0FBQSxFQUFBUixDQUFBLEVBQUFpQixDQUFBLEVBQUF2QixDQUFBLEVBQUF5QixDQUFBLGVBQUFBLENBQUEsS0FBQUEsQ0FBQSxHQUFBMEUsT0FBQSxPQUFBdkYsQ0FBQSxPQUFBc0QsYUFBQSxDQUFBdEIsSUFBQSxDQUFBOUIsQ0FBQSxFQUFBUixDQUFBLEVBQUFpQixDQUFBLEVBQUF2QixDQUFBLEdBQUF5QixDQUFBLFVBQUE1QixDQUFBLENBQUFnRyxtQkFBQSxDQUFBdkYsQ0FBQSxJQUFBTSxDQUFBLEdBQUFBLENBQUEsQ0FBQWdCLElBQUEsR0FBQTBDLElBQUEsV0FBQXhELENBQUEsV0FBQUEsQ0FBQSxDQUFBZ0IsSUFBQSxHQUFBaEIsQ0FBQSxDQUFBa0IsS0FBQSxHQUFBcEIsQ0FBQSxDQUFBZ0IsSUFBQSxXQUFBbUMscUJBQUEsQ0FBQUQsQ0FBQSxHQUFBdEIsTUFBQSxDQUFBc0IsQ0FBQSxFQUFBcEMsQ0FBQSxnQkFBQWMsTUFBQSxDQUFBc0IsQ0FBQSxFQUFBbEQsQ0FBQSxpQ0FBQTRCLE1BQUEsQ0FBQXNCLENBQUEsNkRBQUFqRSxDQUFBLENBQUF1RyxJQUFBLGFBQUF0RixDQUFBLFFBQUFqQixDQUFBLEdBQUFnQyxNQUFBLENBQUFmLENBQUEsR0FBQVIsQ0FBQSxnQkFBQWlCLENBQUEsSUFBQTFCLENBQUEsRUFBQVMsQ0FBQSxDQUFBeUIsSUFBQSxDQUFBUixDQUFBLFVBQUFqQixDQUFBLENBQUErRixPQUFBLGFBQUF6RSxLQUFBLFdBQUF0QixDQUFBLENBQUFnQixNQUFBLFNBQUFSLENBQUEsR0FBQVIsQ0FBQSxDQUFBZ0csR0FBQSxRQUFBeEYsQ0FBQSxJQUFBakIsQ0FBQSxTQUFBK0IsSUFBQSxDQUFBSSxLQUFBLEdBQUFsQixDQUFBLEVBQUFjLElBQUEsQ0FBQUUsSUFBQSxPQUFBRixJQUFBLFdBQUFBLElBQUEsQ0FBQUUsSUFBQSxPQUFBRixJQUFBLFFBQUEvQixDQUFBLENBQUFnRSxNQUFBLEdBQUFBLE1BQUEsRUFBQWQsT0FBQSxDQUFBM0MsU0FBQSxLQUFBRCxXQUFBLEVBQUE0QyxPQUFBLEVBQUEyQyxLQUFBLFdBQUFBLE1BQUE3RixDQUFBLGFBQUEwRyxJQUFBLFdBQUEzRSxJQUFBLFdBQUFnRCxJQUFBLFFBQUFDLEtBQUEsR0FBQS9ELENBQUEsT0FBQWdCLElBQUEsWUFBQTRDLFFBQUEsY0FBQUQsTUFBQSxnQkFBQXRCLEdBQUEsR0FBQXJDLENBQUEsT0FBQXlFLFVBQUEsQ0FBQXZCLE9BQUEsQ0FBQXdCLGFBQUEsSUFBQTNGLENBQUEsV0FBQVMsQ0FBQSxrQkFBQUEsQ0FBQSxDQUFBa0csTUFBQSxPQUFBakYsQ0FBQSxDQUFBUCxJQUFBLE9BQUFWLENBQUEsTUFBQXFGLEtBQUEsRUFBQXJGLENBQUEsQ0FBQVcsS0FBQSxjQUFBWCxDQUFBLElBQUFRLENBQUEsTUFBQTJGLElBQUEsV0FBQUEsS0FBQSxTQUFBM0UsSUFBQSxXQUFBaEIsQ0FBQSxRQUFBeUUsVUFBQSxJQUFBRSxVQUFBLGtCQUFBM0UsQ0FBQSxDQUFBb0MsSUFBQSxRQUFBcEMsQ0FBQSxDQUFBcUMsR0FBQSxjQUFBdUQsSUFBQSxLQUFBNUIsaUJBQUEsV0FBQUEsa0JBQUFqRixDQUFBLGFBQUFpQyxJQUFBLFFBQUFqQyxDQUFBLE1BQUFTLENBQUEsa0JBQUFxRyxPQUFBcEYsQ0FBQSxFQUFBdkIsQ0FBQSxXQUFBWSxDQUFBLENBQUFzQyxJQUFBLFlBQUF0QyxDQUFBLENBQUF1QyxHQUFBLEdBQUF0RCxDQUFBLEVBQUFTLENBQUEsQ0FBQXNCLElBQUEsR0FBQUwsQ0FBQSxFQUFBdkIsQ0FBQSxLQUFBTSxDQUFBLENBQUFtRSxNQUFBLFdBQUFuRSxDQUFBLENBQUE2QyxHQUFBLEdBQUFyQyxDQUFBLEtBQUFkLENBQUEsYUFBQUEsQ0FBQSxRQUFBdUYsVUFBQSxDQUFBakUsTUFBQSxNQUFBdEIsQ0FBQSxTQUFBQSxDQUFBLFFBQUF5QixDQUFBLFFBQUE4RCxVQUFBLENBQUF2RixDQUFBLEdBQUFZLENBQUEsR0FBQWEsQ0FBQSxDQUFBZ0UsVUFBQSxpQkFBQWhFLENBQUEsQ0FBQTBELE1BQUEsU0FBQXdCLE1BQUEsYUFBQWxGLENBQUEsQ0FBQTBELE1BQUEsU0FBQW9CLElBQUEsUUFBQWxFLENBQUEsR0FBQWQsQ0FBQSxDQUFBUCxJQUFBLENBQUFTLENBQUEsZUFBQUMsQ0FBQSxHQUFBSCxDQUFBLENBQUFQLElBQUEsQ0FBQVMsQ0FBQSxxQkFBQVksQ0FBQSxJQUFBWCxDQUFBLGFBQUE2RSxJQUFBLEdBQUE5RSxDQUFBLENBQUEyRCxRQUFBLFNBQUF1QixNQUFBLENBQUFsRixDQUFBLENBQUEyRCxRQUFBLGdCQUFBbUIsSUFBQSxHQUFBOUUsQ0FBQSxDQUFBNEQsVUFBQSxTQUFBc0IsTUFBQSxDQUFBbEYsQ0FBQSxDQUFBNEQsVUFBQSxjQUFBaEQsQ0FBQSxhQUFBa0UsSUFBQSxHQUFBOUUsQ0FBQSxDQUFBMkQsUUFBQSxTQUFBdUIsTUFBQSxDQUFBbEYsQ0FBQSxDQUFBMkQsUUFBQSxxQkFBQTFELENBQUEsUUFBQThDLEtBQUEscURBQUErQixJQUFBLEdBQUE5RSxDQUFBLENBQUE0RCxVQUFBLFNBQUFzQixNQUFBLENBQUFsRixDQUFBLENBQUE0RCxVQUFBLFlBQUFOLE1BQUEsV0FBQUEsT0FBQWpFLENBQUEsRUFBQWpCLENBQUEsYUFBQVMsQ0FBQSxRQUFBaUYsVUFBQSxDQUFBakUsTUFBQSxNQUFBaEIsQ0FBQSxTQUFBQSxDQUFBLFFBQUFOLENBQUEsUUFBQXVGLFVBQUEsQ0FBQWpGLENBQUEsT0FBQU4sQ0FBQSxDQUFBbUYsTUFBQSxTQUFBb0IsSUFBQSxJQUFBaEYsQ0FBQSxDQUFBUCxJQUFBLENBQUFoQixDQUFBLHdCQUFBdUcsSUFBQSxHQUFBdkcsQ0FBQSxDQUFBcUYsVUFBQSxRQUFBNUQsQ0FBQSxHQUFBekIsQ0FBQSxhQUFBeUIsQ0FBQSxpQkFBQVgsQ0FBQSxtQkFBQUEsQ0FBQSxLQUFBVyxDQUFBLENBQUEwRCxNQUFBLElBQUF0RixDQUFBLElBQUFBLENBQUEsSUFBQTRCLENBQUEsQ0FBQTRELFVBQUEsS0FBQTVELENBQUEsY0FBQWIsQ0FBQSxHQUFBYSxDQUFBLEdBQUFBLENBQUEsQ0FBQWdFLFVBQUEsY0FBQTdFLENBQUEsQ0FBQXNDLElBQUEsR0FBQXBDLENBQUEsRUFBQUYsQ0FBQSxDQUFBdUMsR0FBQSxHQUFBdEQsQ0FBQSxFQUFBNEIsQ0FBQSxTQUFBZ0QsTUFBQSxnQkFBQTdDLElBQUEsR0FBQUgsQ0FBQSxDQUFBNEQsVUFBQSxFQUFBL0IsQ0FBQSxTQUFBc0QsUUFBQSxDQUFBaEcsQ0FBQSxNQUFBZ0csUUFBQSxXQUFBQSxTQUFBOUYsQ0FBQSxFQUFBakIsQ0FBQSxvQkFBQWlCLENBQUEsQ0FBQW9DLElBQUEsUUFBQXBDLENBQUEsQ0FBQXFDLEdBQUEscUJBQUFyQyxDQUFBLENBQUFvQyxJQUFBLG1CQUFBcEMsQ0FBQSxDQUFBb0MsSUFBQSxRQUFBdEIsSUFBQSxHQUFBZCxDQUFBLENBQUFxQyxHQUFBLGdCQUFBckMsQ0FBQSxDQUFBb0MsSUFBQSxTQUFBd0QsSUFBQSxRQUFBdkQsR0FBQSxHQUFBckMsQ0FBQSxDQUFBcUMsR0FBQSxPQUFBc0IsTUFBQSxrQkFBQTdDLElBQUEseUJBQUFkLENBQUEsQ0FBQW9DLElBQUEsSUFBQXJELENBQUEsVUFBQStCLElBQUEsR0FBQS9CLENBQUEsR0FBQXlELENBQUEsS0FBQXVELE1BQUEsV0FBQUEsT0FBQS9GLENBQUEsYUFBQWpCLENBQUEsUUFBQTBGLFVBQUEsQ0FBQWpFLE1BQUEsTUFBQXpCLENBQUEsU0FBQUEsQ0FBQSxRQUFBUyxDQUFBLFFBQUFpRixVQUFBLENBQUExRixDQUFBLE9BQUFTLENBQUEsQ0FBQStFLFVBQUEsS0FBQXZFLENBQUEsY0FBQThGLFFBQUEsQ0FBQXRHLENBQUEsQ0FBQW1GLFVBQUEsRUFBQW5GLENBQUEsQ0FBQWdGLFFBQUEsR0FBQUUsYUFBQSxDQUFBbEYsQ0FBQSxHQUFBZ0QsQ0FBQSx5QkFBQXdELE9BQUFoRyxDQUFBLGFBQUFqQixDQUFBLFFBQUEwRixVQUFBLENBQUFqRSxNQUFBLE1BQUF6QixDQUFBLFNBQUFBLENBQUEsUUFBQVMsQ0FBQSxRQUFBaUYsVUFBQSxDQUFBMUYsQ0FBQSxPQUFBUyxDQUFBLENBQUE2RSxNQUFBLEtBQUFyRSxDQUFBLFFBQUFTLENBQUEsR0FBQWpCLENBQUEsQ0FBQW1GLFVBQUEsa0JBQUFsRSxDQUFBLENBQUEyQixJQUFBLFFBQUFsRCxDQUFBLEdBQUF1QixDQUFBLENBQUE0QixHQUFBLEVBQUFxQyxhQUFBLENBQUFsRixDQUFBLFlBQUFOLENBQUEsWUFBQXdFLEtBQUEsOEJBQUF1QyxhQUFBLFdBQUFBLGNBQUFsSCxDQUFBLEVBQUFTLENBQUEsRUFBQWlCLENBQUEsZ0JBQUFtRCxRQUFBLEtBQUF4RSxRQUFBLEVBQUEyRCxNQUFBLENBQUFoRSxDQUFBLEdBQUFtRixVQUFBLEVBQUExRSxDQUFBLEVBQUEyRSxPQUFBLEVBQUExRCxDQUFBLG9CQUFBa0QsTUFBQSxVQUFBdEIsR0FBQSxHQUFBckMsQ0FBQSxHQUFBd0MsQ0FBQSxPQUFBekQsQ0FBQTtBQUFBLFNBQUFtSCxtQkFBQXpGLENBQUEsRUFBQVQsQ0FBQSxFQUFBakIsQ0FBQSxFQUFBUyxDQUFBLEVBQUFOLENBQUEsRUFBQVksQ0FBQSxFQUFBeUIsQ0FBQSxjQUFBWixDQUFBLEdBQUFGLENBQUEsQ0FBQVgsQ0FBQSxFQUFBeUIsQ0FBQSxHQUFBWCxDQUFBLEdBQUFELENBQUEsQ0FBQU8sS0FBQSxXQUFBVCxDQUFBLGdCQUFBMUIsQ0FBQSxDQUFBMEIsQ0FBQSxLQUFBRSxDQUFBLENBQUFLLElBQUEsR0FBQWhCLENBQUEsQ0FBQVksQ0FBQSxJQUFBeUUsT0FBQSxDQUFBL0IsT0FBQSxDQUFBMUMsQ0FBQSxFQUFBNEMsSUFBQSxDQUFBaEUsQ0FBQSxFQUFBTixDQUFBO0FBQUEsU0FBQWlILGtCQUFBMUYsQ0FBQSw2QkFBQVQsQ0FBQSxTQUFBakIsQ0FBQSxHQUFBcUgsU0FBQSxhQUFBZixPQUFBLFdBQUE3RixDQUFBLEVBQUFOLENBQUEsUUFBQVksQ0FBQSxHQUFBVyxDQUFBLENBQUE0RixLQUFBLENBQUFyRyxDQUFBLEVBQUFqQixDQUFBLFlBQUF1SCxNQUFBN0YsQ0FBQSxJQUFBeUYsa0JBQUEsQ0FBQXBHLENBQUEsRUFBQU4sQ0FBQSxFQUFBTixDQUFBLEVBQUFvSCxLQUFBLEVBQUFDLE1BQUEsVUFBQTlGLENBQUEsY0FBQThGLE9BQUE5RixDQUFBLElBQUF5RixrQkFBQSxDQUFBcEcsQ0FBQSxFQUFBTixDQUFBLEVBQUFOLENBQUEsRUFBQW9ILEtBQUEsRUFBQUMsTUFBQSxXQUFBOUYsQ0FBQSxLQUFBNkYsS0FBQTtBQUFBLFNBQUFFLFFBQUF6SCxDQUFBLEVBQUFTLENBQUEsUUFBQVEsQ0FBQSxHQUFBZSxNQUFBLENBQUF1RSxJQUFBLENBQUF2RyxDQUFBLE9BQUFnQyxNQUFBLENBQUEwRixxQkFBQSxRQUFBdkgsQ0FBQSxHQUFBNkIsTUFBQSxDQUFBMEYscUJBQUEsQ0FBQTFILENBQUEsR0FBQVMsQ0FBQSxLQUFBTixDQUFBLEdBQUFBLENBQUEsQ0FBQXdILE1BQUEsV0FBQWxILENBQUEsV0FBQXVCLE1BQUEsQ0FBQTRGLHdCQUFBLENBQUE1SCxDQUFBLEVBQUFTLENBQUEsRUFBQW1DLFVBQUEsT0FBQTNCLENBQUEsQ0FBQWlCLElBQUEsQ0FBQW9GLEtBQUEsQ0FBQXJHLENBQUEsRUFBQWQsQ0FBQSxZQUFBYyxDQUFBO0FBQUEsU0FBQTRHLGNBQUE3SCxDQUFBLGFBQUFTLENBQUEsTUFBQUEsQ0FBQSxHQUFBNEcsU0FBQSxDQUFBNUYsTUFBQSxFQUFBaEIsQ0FBQSxVQUFBUSxDQUFBLFdBQUFvRyxTQUFBLENBQUE1RyxDQUFBLElBQUE0RyxTQUFBLENBQUE1RyxDQUFBLFFBQUFBLENBQUEsT0FBQWdILE9BQUEsQ0FBQXpGLE1BQUEsQ0FBQWYsQ0FBQSxPQUFBa0QsT0FBQSxXQUFBMUQsQ0FBQSxJQUFBcUgsZUFBQSxDQUFBOUgsQ0FBQSxFQUFBUyxDQUFBLEVBQUFRLENBQUEsQ0FBQVIsQ0FBQSxTQUFBdUIsTUFBQSxDQUFBK0YseUJBQUEsR0FBQS9GLE1BQUEsQ0FBQWdHLGdCQUFBLENBQUFoSSxDQUFBLEVBQUFnQyxNQUFBLENBQUErRix5QkFBQSxDQUFBOUcsQ0FBQSxLQUFBd0csT0FBQSxDQUFBekYsTUFBQSxDQUFBZixDQUFBLEdBQUFrRCxPQUFBLFdBQUExRCxDQUFBLElBQUF1QixNQUFBLENBQUFPLGNBQUEsQ0FBQXZDLENBQUEsRUFBQVMsQ0FBQSxFQUFBdUIsTUFBQSxDQUFBNEYsd0JBQUEsQ0FBQTNHLENBQUEsRUFBQVIsQ0FBQSxpQkFBQVQsQ0FBQTtBQUFBLFNBQUFpSSxnQkFBQWxILENBQUEsRUFBQVcsQ0FBQSxVQUFBWCxDQUFBLFlBQUFXLENBQUEsYUFBQVosU0FBQTtBQUFBLFNBQUFvSCxrQkFBQWxJLENBQUEsRUFBQVMsQ0FBQSxhQUFBUSxDQUFBLE1BQUFBLENBQUEsR0FBQVIsQ0FBQSxDQUFBZ0IsTUFBQSxFQUFBUixDQUFBLFVBQUFkLENBQUEsR0FBQU0sQ0FBQSxDQUFBUSxDQUFBLEdBQUFkLENBQUEsQ0FBQXlDLFVBQUEsR0FBQXpDLENBQUEsQ0FBQXlDLFVBQUEsUUFBQXpDLENBQUEsQ0FBQTBDLFlBQUEsa0JBQUExQyxDQUFBLEtBQUFBLENBQUEsQ0FBQTJDLFFBQUEsUUFBQWQsTUFBQSxDQUFBTyxjQUFBLENBQUF2QyxDQUFBLEVBQUFtSSxjQUFBLENBQUFoSSxDQUFBLENBQUFpSSxHQUFBLEdBQUFqSSxDQUFBO0FBQUEsU0FBQWtJLGFBQUFySSxDQUFBLEVBQUFTLENBQUEsRUFBQVEsQ0FBQSxXQUFBUixDQUFBLElBQUF5SCxpQkFBQSxDQUFBbEksQ0FBQSxDQUFBTyxTQUFBLEVBQUFFLENBQUEsR0FBQVEsQ0FBQSxJQUFBaUgsaUJBQUEsQ0FBQWxJLENBQUEsRUFBQWlCLENBQUEsR0FBQWUsTUFBQSxDQUFBTyxjQUFBLENBQUF2QyxDQUFBLGlCQUFBOEMsUUFBQSxTQUFBOUMsQ0FBQTtBQUFBLFNBQUE4SCxnQkFBQTlILENBQUEsRUFBQVMsQ0FBQSxFQUFBUSxDQUFBLFlBQUFSLENBQUEsR0FBQTBILGNBQUEsQ0FBQTFILENBQUEsTUFBQVQsQ0FBQSxHQUFBZ0MsTUFBQSxDQUFBTyxjQUFBLENBQUF2QyxDQUFBLEVBQUFTLENBQUEsSUFBQTBCLEtBQUEsRUFBQWxCLENBQUEsRUFBQTJCLFVBQUEsTUFBQUMsWUFBQSxNQUFBQyxRQUFBLFVBQUE5QyxDQUFBLENBQUFTLENBQUEsSUFBQVEsQ0FBQSxFQUFBakIsQ0FBQTtBQUFBLFNBQUFtSSxlQUFBbEgsQ0FBQSxRQUFBVyxDQUFBLEdBQUEwRyxZQUFBLENBQUFySCxDQUFBLGdDQUFBZixPQUFBLENBQUEwQixDQUFBLElBQUFBLENBQUEsR0FBQUEsQ0FBQTtBQUFBLFNBQUEwRyxhQUFBckgsQ0FBQSxFQUFBUixDQUFBLG9CQUFBUCxPQUFBLENBQUFlLENBQUEsTUFBQUEsQ0FBQSxTQUFBQSxDQUFBLE1BQUFqQixDQUFBLEdBQUFpQixDQUFBLENBQUFiLE1BQUEsQ0FBQW1JLFdBQUEsa0JBQUF2SSxDQUFBLFFBQUE0QixDQUFBLEdBQUE1QixDQUFBLENBQUFtQixJQUFBLENBQUFGLENBQUEsRUFBQVIsQ0FBQSxnQ0FBQVAsT0FBQSxDQUFBMEIsQ0FBQSxVQUFBQSxDQUFBLFlBQUFkLFNBQUEseUVBQUFMLENBQUEsR0FBQStILE1BQUEsR0FBQUMsTUFBQSxFQUFBeEgsQ0FBQTtBQUFBLElBZ0JheUgsSUFBSSxHQUFBQyxPQUFBLENBQUFELElBQUE7RUErQmhCO0FBQ0Q7QUFDQTtBQUNBO0VBQ0MsU0FBQUEsS0FBbUJFLE9BQW9CLEVBQUU7SUFBQVgsZUFBQSxPQUFBUyxJQUFBO0lBbEN6QztJQUFBWixlQUFBLGlCQUNrQyxJQUFJO0lBQUFBLGVBQUEsNEJBV1YsQ0FBQztJQUFBLEtBc0JWYyxPQUFvQixHQUFwQkEsT0FBb0I7SUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQ0MsT0FBTyxFQUFFLElBQUksQ0FBQ0EsT0FBTyxHQUFHQyxnQkFBUyxDQUFDQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUNDLFFBQVE7SUFDaEUsSUFBSSxDQUFDLElBQUksQ0FBQ0gsT0FBTyxFQUFFLE1BQU0sSUFBSUksVUFBVSxDQUFDLGlDQUFpQyxDQUFDO0lBRTFFLElBQUksSUFBSSxDQUFDSixPQUFPLENBQUNLLEtBQUssQ0FBQ0MsR0FBRyxDQUFDUCxPQUFPLENBQUNRLFVBQVUsSUFBSVIsT0FBTyxDQUFDUyxJQUFJLENBQUMsRUFBRTtNQUMvRCxPQUFPLElBQUksQ0FBQ1IsT0FBTyxDQUFDSyxLQUFLLENBQUNILEdBQUcsQ0FBQ0gsT0FBTyxDQUFDUSxVQUFVLElBQUlSLE9BQU8sQ0FBQ1MsSUFBSSxDQUFDO0lBQ2xFO0lBRUEsSUFBQUMscUJBQVMsRUFBQ1YsT0FBTyxDQUFDO0lBRWxCLElBQUksQ0FBQ0EsT0FBTyxHQUFBZixhQUFBO01BQ1gwQixJQUFJLEVBQUUsSUFBSTtNQUNWQyxRQUFRLEVBQUUsaUJBQWlCO01BQzNCQyxNQUFNLEVBQUUsS0FBSztNQUNiQyxXQUFXLEVBQUUsRUFBRTtNQUNmQyxVQUFVLEVBQUUsS0FBSztNQUNqQkMsUUFBUSxFQUFFO0lBQUMsR0FDUmhCLE9BQU8sQ0FDVjtJQUVELElBQUksSUFBSSxDQUFDQSxPQUFPLENBQUNhLE1BQU0sRUFBRTtNQUN4QixJQUFJLENBQUNiLE9BQU8sQ0FBQ1csSUFBSSxHQUFHLEdBQUc7SUFDeEI7SUFFQSxJQUFJLENBQUNYLE9BQU8sQ0FBQ1EsVUFBVSxHQUFHUixPQUFPLENBQUNRLFVBQVUsSUFBSVIsT0FBTyxDQUFDUyxJQUFJO0lBQzVELElBQUksQ0FBQ1EsS0FBSyxHQUFHO01BQ1pDLE9BQU8sRUFBRSxDQUFDO01BQ1ZDLGNBQWMsRUFBRSxDQUFDO01BQ2pCQyxNQUFNLEVBQUUsQ0FBQztNQUNUQyxNQUFNLEVBQUU7UUFDUEMsSUFBSSxFQUFFLENBQUM7UUFDUEMsSUFBSSxFQUFFLENBQUM7UUFDUEMsU0FBUyxFQUFFLENBQUM7UUFDWkMsVUFBVSxFQUFFO01BQ2IsQ0FBQztNQUNEQyxHQUFHLEVBQUU7UUFDSkMsS0FBSyxFQUFFLENBQUM7UUFDUkMsVUFBVSxFQUFFLENBQUM7UUFDYkMsWUFBWSxFQUFFO01BQ2YsQ0FBQztNQUNEQyxVQUFVLEVBQUU7UUFDWDNGLElBQUksRUFBRSxDQUFDO1FBQ1A0RixNQUFNLEVBQUUsQ0FBQztRQUNUQyxPQUFPLEVBQUU7TUFDVjtJQUNELENBQUM7SUFFRCxJQUFJLENBQUMvQixPQUFPLENBQUNLLEtBQUssQ0FBQzJCLEdBQUcsQ0FBQyxJQUFJLENBQUNqQyxPQUFPLENBQUNRLFVBQVUsRUFBRSxJQUFJLENBQUM7SUFDckQsSUFBSSxDQUFDUCxPQUFPLENBQUNpQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQztJQUNyQyxJQUFJLENBQUNDLElBQUksR0FBRyxJQUFJQyxVQUFJLENBQUMsSUFBSSxDQUFDO0VBQzNCOztFQUVBO0VBQUEsT0FBQTNDLFlBQUEsQ0FBQUssSUFBQTtJQUFBTixHQUFBO0lBQUFXLEdBQUEsRUF4RUE7SUFDQSxTQUFBQSxJQUFBLEVBQWdDO01BQy9CLElBQUksQ0FBQyxJQUFJLENBQUNrQyxNQUFNLEVBQUUsT0FBTyxLQUFLO01BQzlCLE9BQU8sSUFBSSxDQUFDQSxNQUFNLENBQUNDLFVBQVUsS0FBS0MsY0FBUyxDQUFDQyxJQUFJO0lBQ2pEOztJQUVBO0VBQUE7SUFBQWhELEdBQUE7SUFBQVcsR0FBQSxFQUNBLFNBQUFBLElBQUEsRUFBNkI7TUFDNUIsVUFBQXNDLE1BQUEsQ0FBVSxJQUFJLENBQUN6QyxPQUFPLENBQUNTLElBQUksT0FBQWdDLE1BQUEsQ0FBSSxJQUFJLENBQUN6QyxPQUFPLENBQUNXLElBQUk7SUFDakQ7O0lBRUE7RUFBQTtJQUFBbkIsR0FBQTtJQUFBakcsS0FBQSxFQThEQSxTQUFPbUosT0FBT0EsQ0FBQSxFQUFTO01BQ3RCLElBQUksSUFBSSxDQUFDQyxTQUFTLEVBQUU7TUFFcEIsSUFBTUMsT0FBTyxHQUFHeEosTUFBTSxDQUFDeUosTUFBTSxDQUFDO1FBQzdCQyxhQUFhLEVBQUUsSUFBSSxDQUFDOUMsT0FBTyxDQUFDWSxRQUFRO1FBQ3BDLFlBQVksRUFBRWhCLE1BQU0sQ0FBQyxJQUFJLENBQUNLLE9BQU8sQ0FBQ0QsT0FBTyxDQUFDK0MsTUFBTSxDQUFDO1FBQ2pELFNBQVMsRUFBRSxJQUFJLENBQUM5QyxPQUFPLENBQUNELE9BQU8sQ0FBQ2dELFFBQVE7UUFDeEMsYUFBYSxFQUFFLElBQUksQ0FBQy9DLE9BQU8sQ0FBQ0QsT0FBTyxDQUFDaUQ7TUFDckMsQ0FBQyxDQUFDO01BRUYsSUFBSSxDQUFDWixNQUFNLEdBQUcsSUFBSUUsY0FBUyxNQUFBRSxNQUFBLENBQU0sSUFBSSxDQUFDekMsT0FBTyxDQUFDYSxNQUFNLEdBQUcsR0FBRyxHQUFHLEVBQUUsU0FBQTRCLE1BQUEsQ0FBTSxJQUFJLENBQUNTLE9BQU8sb0JBQWlCO1FBQUVOLE9BQU8sRUFBUEE7TUFBUSxDQUFDLENBQUM7TUFDOUcsSUFBSSxDQUFDUCxNQUFNLENBQUNjLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDQyxJQUFJLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUM1QyxJQUFJLENBQUNoQixNQUFNLENBQUNjLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDRyxLQUFLLENBQUNELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUM5QyxJQUFJLENBQUNoQixNQUFNLENBQUNjLEVBQUUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDSSxPQUFPLENBQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNsRCxJQUFJLENBQUNoQixNQUFNLENBQUNjLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDSyxLQUFLLENBQUNILElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQzs7SUFFQTtFQUFBO0lBQUE3RCxHQUFBO0lBQUFqRyxLQUFBLEVBQ0EsU0FBT2tLLE9BQU9BLENBQUEsRUFBUztNQUFBLElBQUFDLEtBQUE7TUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQ2YsU0FBUyxFQUFFO01BRXJCLElBQU16QixPQUFPLEdBQUcsSUFBSSxDQUFDakIsT0FBTyxDQUFDaUIsT0FBTyxDQUFDbkMsTUFBTSxDQUFDLFVBQUMvRCxDQUFDO1FBQUEsT0FBS0EsQ0FBQyxDQUFDMkksSUFBSSxJQUFJRCxLQUFJO01BQUEsRUFBQztNQUNsRSxJQUFJeEMsT0FBTyxDQUFDMEMsSUFBSSxFQUFFMUMsT0FBTyxDQUFDM0YsT0FBTyxDQUFDLFVBQUNQLENBQUM7UUFBQSxPQUFLQSxDQUFDLENBQUN5SSxPQUFPLENBQUMsQ0FBQztNQUFBLEVBQUM7TUFFckQsSUFBSSxDQUFDcEIsTUFBTSxDQUFDaUIsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUM7TUFDbEMsSUFBSSxDQUFDakIsTUFBTSxDQUFDd0Isa0JBQWtCLENBQUMsQ0FBQztNQUNoQyxJQUFJLENBQUN4QixNQUFNLEdBQUcsSUFBSTtNQUVsQixJQUFJLENBQUN5QixpQkFBaUIsR0FBRyxDQUFDO01BQzFCQyxZQUFZLENBQUMsSUFBSSxDQUFDQyxnQkFBZ0IsQ0FBQztNQUVuQyxJQUFJLENBQUMvRCxPQUFPLENBQUNpQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQztNQUN0QyxJQUFJLENBQUNqQyxPQUFPLENBQUNnRSxXQUFXLENBQUMsSUFBSSxDQUFDakUsT0FBTyxDQUFDUSxVQUFVLENBQUM7SUFDbEQ7RUFBQztJQUFBaEIsR0FBQTtJQUFBakcsS0FBQSxFQUVELFNBQVEySyxTQUFTQSxDQUFBLEVBQVM7TUFBQSxJQUFBQyxNQUFBO01BQ3pCLElBQUksQ0FBQ0gsZ0JBQWdCLEdBQUdJLFVBQVUsQ0FBQyxZQUFNO1FBQUEsSUFBQUMsYUFBQTtRQUN4QyxJQUFJRixNQUFJLENBQUNMLGlCQUFpQixJQUFJSyxNQUFJLENBQUNuRSxPQUFPLENBQUNjLFdBQVcsRUFBRTtVQUN2RCxJQUFNMEMsS0FBSyxHQUFHLElBQUl6SCxLQUFLLDRCQUFBMEcsTUFBQSxDQUE0QjBCLE1BQUksQ0FBQ25FLE9BQU8sQ0FBQ2MsV0FBVyxlQUFZLENBQUM7VUFFeEZxRCxNQUFJLENBQUNsRSxPQUFPLENBQUNpQyxJQUFJLENBQUMsV0FBVyxFQUFFaUMsTUFBSSxFQUFFWCxLQUFLLENBQUM7VUFDM0MsT0FBT1csTUFBSSxDQUFDVixPQUFPLENBQUMsQ0FBQztRQUN0QjtRQUNBLENBQUFZLGFBQUEsR0FBQUYsTUFBSSxDQUFDOUIsTUFBTSxjQUFBZ0MsYUFBQSxlQUFYQSxhQUFBLENBQWFSLGtCQUFrQixDQUFDLENBQUM7UUFDakNNLE1BQUksQ0FBQzlCLE1BQU0sR0FBRyxJQUFJO1FBQ2xCOEIsTUFBSSxDQUFDbEUsT0FBTyxDQUFDaUMsSUFBSSxDQUFDLGVBQWUsRUFBRWlDLE1BQUksQ0FBQztRQUN4Q0EsTUFBSSxDQUFDekIsT0FBTyxDQUFDLENBQUM7UUFDZHlCLE1BQUksQ0FBQ0wsaUJBQWlCLEVBQUU7TUFDekIsQ0FBQyxFQUFFLElBQUksQ0FBQzlELE9BQU8sQ0FBQ2UsVUFBVSxDQUE4QjtJQUN6RDtFQUFDO0lBQUF2QixHQUFBO0lBQUFqRyxLQUFBLEVBRUQsU0FBVTZKLElBQUlBLENBQUEsRUFBUztNQUN0QixJQUFJLElBQUksQ0FBQ1ksZ0JBQWdCLEVBQUVELFlBQVksQ0FBQyxJQUFJLENBQUNDLGdCQUFnQixDQUFDO01BQzlELElBQUksQ0FBQy9ELE9BQU8sQ0FBQ2lDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDO0lBQ3ZDO0VBQUM7SUFBQTFDLEdBQUE7SUFBQWpHLEtBQUEsRUFFRCxTQUFVK0osS0FBS0EsQ0FBQ2dCLElBQVksRUFBRUMsTUFBYyxFQUFRO01BQ25ELElBQUksQ0FBQ3RFLE9BQU8sQ0FBQ2lDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLEVBQUU7UUFBRW9DLElBQUksRUFBSkEsSUFBSTtRQUFFQyxNQUFNLEVBQU5BO01BQU8sQ0FBQyxDQUFDO01BQzNELElBQUlELElBQUksS0FBSyxJQUFJLElBQUlDLE1BQU0sS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDTCxTQUFTLENBQUMsQ0FBQztJQUM1RDtFQUFDO0lBQUExRSxHQUFBO0lBQUFqRyxLQUFBLEVBRUQsU0FBVWlLLEtBQUtBLENBQUNBLE1BQVksRUFBUTtNQUNuQyxJQUFJLENBQUNBLE1BQUssRUFBRTtNQUNaLElBQUksQ0FBQ3ZELE9BQU8sQ0FBQ2lDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFc0IsTUFBSyxDQUFDO0lBQzVDO0VBQUM7SUFBQWhFLEdBQUE7SUFBQWpHLEtBQUEsRUFFRCxTQUFVZ0ssT0FBT0EsQ0FBQ3RJLENBQWtCLEVBQVE7TUFDM0MsSUFBSXZDLEtBQUssQ0FBQ2MsT0FBTyxDQUFDeUIsQ0FBQyxDQUFDLEVBQUVBLENBQUMsR0FBR3VKLE1BQU0sQ0FBQy9CLE1BQU0sQ0FBQ3hILENBQUMsQ0FBQyxDQUFDLEtBQ3RDLElBQUlBLENBQUMsWUFBWXdKLFdBQVcsRUFBRXhKLENBQUMsR0FBR3VKLE1BQU0sQ0FBQzdMLElBQUksQ0FBQ3NDLENBQUMsQ0FBQztNQUVyRCxJQUFNeUosT0FBTyxHQUFHQyxJQUFJLENBQUNDLEtBQUssQ0FBQzNKLENBQUMsQ0FBQzNDLFFBQVEsQ0FBQyxDQUFDLENBQUM7TUFFeEMsSUFBSSxDQUFDb00sT0FBTyxDQUFDRyxFQUFFLEVBQUU7TUFDakIsSUFBSSxDQUFDNUUsT0FBTyxDQUFDaUMsSUFBSSxDQUFDLFNBQVMsRUFBRXdDLE9BQU8sQ0FBQztNQUVyQyxJQUFJSSxNQUFjO01BRWxCLFFBQVFKLE9BQU8sQ0FBQ0csRUFBRTtRQUNqQixLQUFLLE9BQU87VUFDWCxPQUFPSCxPQUFPLENBQUNHLEVBQUU7VUFDakIsSUFBSSxDQUFDNUQsS0FBSyxHQUFBaEMsYUFBQSxLQUFReUYsT0FBTyxDQUEwQjtVQUNuRDtRQUNELEtBQUssY0FBYztVQUNsQkksTUFBTSxHQUFHLElBQUksQ0FBQzdFLE9BQU8sQ0FBQ2lCLE9BQU8sQ0FBQ2YsR0FBRyxDQUFDdUUsT0FBTyxDQUFDSyxPQUFPLENBQUM7VUFDbEQsSUFBSUQsTUFBTSxFQUFFQSxNQUFNLENBQUNFLFFBQVEsR0FBR04sT0FBTyxDQUFDTyxLQUFLLENBQUNELFFBQVEsSUFBSSxDQUFDO1VBQ3pEO1FBQ0QsS0FBSyxPQUFPO1VBQ1gsSUFBSSxDQUFDRSxXQUFXLENBQUNSLE9BQU8sQ0FBQztVQUN6QjtRQUNELEtBQUssT0FBTztVQUNYLElBQUksQ0FBQ3ZDLElBQUksQ0FBQ2dELFlBQVksQ0FBQ1QsT0FBTyxDQUFDVSxTQUFTLENBQUM7VUFDekMsSUFBSSxDQUFDQSxTQUFTLEdBQUdWLE9BQU8sQ0FBQ1UsU0FBUztVQUVsQyxJQUFJLElBQUksQ0FBQ3BGLE9BQU8sQ0FBQ3FGLFlBQVksRUFBRTtZQUM5QixJQUFJLENBQUNsRCxJQUFJLENBQUNtRCxLQUFLLGlCQUFBN0MsTUFBQSxDQUFpQixJQUFJLENBQUMyQyxTQUFTLEdBQUk7Y0FDakRHLFFBQVEsRUFBRSxJQUFJLENBQUN2RixPQUFPLENBQUNxRixZQUFZO2NBQ25DRyxPQUFPLEVBQUUsSUFBSSxDQUFDeEYsT0FBTyxDQUFDeUY7WUFDdkIsQ0FBQyxDQUFDO1VBQ0g7VUFDQTtRQUNEO1VBQ0MsSUFBSSxDQUFDeEYsT0FBTyxDQUFDaUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSW5HLEtBQUssb0JBQUEwRyxNQUFBLENBQW1CaUMsT0FBTyxDQUFDRyxFQUFFLG9CQUFBcEMsTUFBQSxDQUFnQmlDLE9BQU8sQ0FBQ25CLE9BQU8sQ0FBRSxDQUFDLENBQUM7VUFDOUc7TUFDRjtJQUNEO0VBQUM7SUFBQS9ELEdBQUE7SUFBQWpHLEtBQUE7TUFBQSxJQUFBbU0sWUFBQSxHQUFBbEgsaUJBQUEsY0FBQS9FLG1CQUFBLEdBQUE0RCxJQUFBLENBRUQsU0FBQXNJLFFBQTRCakIsT0FBbUM7UUFBQSxJQUFBSSxNQUFBLEVBQUFjLEtBQUEsRUFBQW5MLElBQUEsRUFBQStJLEtBQUEsRUFBQXFDLHFCQUFBO1FBQUEsT0FBQXBNLG1CQUFBLEdBQUFVLElBQUEsVUFBQTJMLFNBQUFDLFFBQUE7VUFBQSxrQkFBQUEsUUFBQSxDQUFBakksSUFBQSxHQUFBaUksUUFBQSxDQUFBNU0sSUFBQTtZQUFBO2NBQUEsSUFDekR1TCxPQUFPLENBQUNLLE9BQU87Z0JBQUFnQixRQUFBLENBQUE1TSxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBNE0sUUFBQSxDQUFBekosTUFBQTtZQUFBO2NBRWR3SSxNQUFNLEdBQUcsSUFBSSxDQUFDN0UsT0FBTyxDQUFDaUIsT0FBTyxDQUFDZixHQUFHLENBQUN1RSxPQUFPLENBQUNLLE9BQU8sQ0FBQztjQUFBLElBQ25ERCxNQUFNO2dCQUFBaUIsUUFBQSxDQUFBNU0sSUFBQTtnQkFBQTtjQUFBO2NBQUEsT0FBQTRNLFFBQUEsQ0FBQXpKLE1BQUE7WUFBQTtjQUVMc0osS0FBSyxHQUFHZCxNQUFNLENBQUNrQixLQUFLLENBQUNDLE9BQU87Y0FDNUJ4TCxJQUFJLEdBQUdpSyxPQUFPLENBQUNqSyxJQUFJO2NBQUFzTCxRQUFBLENBQUFHLEVBQUEsR0FHakJ6TCxJQUFJO2NBQUFzTCxRQUFBLENBQUE1TSxJQUFBLEdBQUE0TSxRQUFBLENBQUFHLEVBQUEsS0FDTixpQkFBaUIsUUFBQUgsUUFBQSxDQUFBRyxFQUFBLEtBSWpCLGVBQWUsUUFBQUgsUUFBQSxDQUFBRyxFQUFBLEtBUWYsaUJBQWlCLFFBQUFILFFBQUEsQ0FBQUcsRUFBQSxLQUlqQixxQkFBcUIsUUFBQUgsUUFBQSxDQUFBRyxFQUFBLEtBSXJCLHNCQUFzQjtjQUFBO1lBQUE7Y0FuQjFCLElBQUksQ0FBQ0MsVUFBVSxDQUFDckIsTUFBTSxFQUFFYyxLQUFLLEVBQVdsQixPQUFPLENBQUM7Y0FBQyxPQUFBcUIsUUFBQSxDQUFBekosTUFBQTtZQUFBO2NBQUEsTUFJN0N3SSxNQUFNLGFBQU5BLE1BQU0sZUFBTkEsTUFBTSxDQUFFc0IsaUJBQWlCLElBQUl0QixNQUFNLGFBQU5BLE1BQU0sZUFBTkEsTUFBTSxDQUFFc0IsaUJBQWlCLENBQUNDLFNBQVM7Z0JBQUFOLFFBQUEsQ0FBQTVNLElBQUE7Z0JBQUE7Y0FBQTtjQUFBNE0sUUFBQSxDQUFBNU0sSUFBQTtjQUFBLE9BQzdEMkwsTUFBTSxhQUFOQSxNQUFNLGdCQUFBZSxxQkFBQSxHQUFOZixNQUFNLENBQUVzQixpQkFBaUIsY0FBQVAscUJBQUEsdUJBQXpCQSxxQkFBQSxVQUFpQyxDQUFDLENBQUMsU0FBTSxDQUFDLFlBQU0sQ0FBQyxDQUFDLENBQUM7WUFBQTtjQUcxRCxJQUFJLENBQUNTLFFBQVEsQ0FBQ3hCLE1BQU0sRUFBRWMsS0FBSyxFQUFXbEIsT0FBTyxDQUFDO2NBQUMsT0FBQXFCLFFBQUEsQ0FBQXpKLE1BQUE7WUFBQTtjQUkvQyxJQUFJLENBQUNpSyxVQUFVLENBQUN6QixNQUFNLEVBQUVjLEtBQUssRUFBV2xCLE9BQU8sQ0FBQztjQUFDLE9BQUFxQixRQUFBLENBQUF6SixNQUFBO1lBQUE7Y0FJakQsSUFBSSxDQUFDa0ssVUFBVSxDQUFDMUIsTUFBTSxFQUFFYyxLQUFLLEVBQUVsQixPQUFPLENBQUM7Y0FBQyxPQUFBcUIsUUFBQSxDQUFBekosTUFBQTtZQUFBO2NBSXhDLElBQUksQ0FBQ21LLFlBQVksQ0FBQzNCLE1BQU0sRUFBRUosT0FBTyxDQUFDO2NBQUMsT0FBQXFCLFFBQUEsQ0FBQXpKLE1BQUE7WUFBQTtjQUluQ2tILEtBQUssR0FBRyxJQUFJekgsS0FBSyw4QkFBQTBHLE1BQUEsQ0FBOEJoSSxJQUFJLE9BQUksQ0FBQztjQUN4RCxJQUFJLENBQUN3RixPQUFPLENBQUNpQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRXNCLEtBQUssQ0FBQztjQUFDLE9BQUF1QyxRQUFBLENBQUF6SixNQUFBO1lBQUE7WUFBQTtjQUFBLE9BQUF5SixRQUFBLENBQUEvSCxJQUFBO1VBQUE7UUFBQSxHQUFBMkgsT0FBQTtNQUFBLENBRzlDO01BQUEsU0F4Q2VULFdBQVdBLENBQUF3QixFQUFBO1FBQUEsT0FBQWhCLFlBQUEsQ0FBQWhILEtBQUEsT0FBQUQsU0FBQTtNQUFBO01BQUEsT0FBWHlHLFdBQVc7SUFBQTtFQUFBO0lBQUExRixHQUFBO0lBQUFqRyxLQUFBLEVBMEMzQixTQUFVNE0sVUFBVUEsQ0FBQ3JCLE1BQWMsRUFBRWMsS0FBWSxFQUFFbEIsT0FBd0IsRUFBUTtNQUNsRkksTUFBTSxDQUFDNkIsT0FBTyxHQUFHLElBQUk7TUFDckI3QixNQUFNLENBQUM4QixNQUFNLEdBQUcsS0FBSztNQUNyQixJQUFJLENBQUMzRyxPQUFPLENBQUNpQyxJQUFJLENBQUMsWUFBWSxFQUFFNEMsTUFBTSxFQUFFYyxLQUFLLEVBQUVsQixPQUFPLENBQUM7SUFDeEQ7RUFBQztJQUFBbEYsR0FBQTtJQUFBakcsS0FBQTtNQUFBLElBQUFzTixTQUFBLEdBQUFySSxpQkFBQSxjQUFBL0UsbUJBQUEsR0FBQTRELElBQUEsQ0FFRCxTQUFBeUosU0FBeUJoQyxNQUFjLEVBQUVjLEtBQVksRUFBRWxCLE9BQXNCO1FBQUEsSUFBQUgsTUFBQTtRQUFBLE9BQUE5SyxtQkFBQSxHQUFBVSxJQUFBLFVBQUE0TSxVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQWxKLElBQUEsR0FBQWtKLFNBQUEsQ0FBQTdOLElBQUE7WUFBQTtjQUNwRW9MLE1BQU0sR0FBS0csT0FBTyxDQUFsQkgsTUFBTSxFQUVkO2NBQUEsS0FDSSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQzBDLFFBQVEsQ0FBQzFDLE1BQU0sQ0FBQztnQkFBQXlDLFNBQUEsQ0FBQTdOLElBQUE7Z0JBQUE7Y0FBQTtjQUM3QyxJQUFJLENBQUMrTixpQkFBaUIsQ0FBQ3BDLE1BQU0sRUFBRWMsS0FBSyxFQUFFbEIsT0FBTyxDQUFDO2NBQUNzQyxTQUFBLENBQUE3TixJQUFBO2NBQUE7WUFBQTtjQUFBLE1BR3ZDb0wsTUFBTSxLQUFLLFVBQVU7Z0JBQUF5QyxTQUFBLENBQUE3TixJQUFBO2dCQUFBO2NBQUE7Y0FDN0IsSUFBSSxDQUFDOEcsT0FBTyxDQUFDaUMsSUFBSSxDQUFDLFVBQVUsRUFBRTRDLE1BQU0sRUFBRWMsS0FBSyxFQUFFbEIsT0FBTyxDQUFDO2NBQ3JESSxNQUFNLENBQUNrQixLQUFLLENBQUNtQixRQUFRLEdBQUdyQyxNQUFNLENBQUNrQixLQUFLLENBQUNDLE9BQU87Y0FBQ2UsU0FBQSxDQUFBN04sSUFBQTtjQUFBO1lBQUE7Y0FBQSxNQUdyQ3lNLEtBQUssS0FBS2QsTUFBTSxDQUFDc0MsV0FBVyxJQUFJdEMsTUFBTSxDQUFDdUMsV0FBVyxDQUFDO2dCQUFBTCxTQUFBLENBQUE3TixJQUFBO2dCQUFBO2NBQUE7Y0FDM0QsSUFBSSxDQUFDbU8sbUJBQW1CLENBQUN4QyxNQUFNLEVBQUVjLEtBQUssRUFBRWxCLE9BQU8sQ0FBQztjQUFDc0MsU0FBQSxDQUFBN04sSUFBQTtjQUFBO1lBQUE7Y0FBQSxLQUd6QzJMLE1BQU0sQ0FBQ2tCLEtBQUssQ0FBQ25OLE1BQU07Z0JBQUFtTyxTQUFBLENBQUE3TixJQUFBO2dCQUFBO2NBQUE7Y0FDM0IsSUFBSSxDQUFDb08sYUFBYSxDQUFDekMsTUFBTSxFQUFFYyxLQUFLLEVBQUVsQixPQUFPLENBQUM7Y0FBQ3NDLFNBQUEsQ0FBQTdOLElBQUE7Y0FBQTtZQUFBO2NBQUE2TixTQUFBLENBQUE3TixJQUFBO2NBQUEsT0FJckMsSUFBSSxDQUFDcU8sUUFBUSxDQUFDMUMsTUFBTSxFQUFFYyxLQUFLLEVBQUVsQixPQUFPLENBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQXNDLFNBQUEsQ0FBQWhKLElBQUE7VUFBQTtRQUFBLEdBQUE4SSxRQUFBO01BQUEsQ0FFNUM7TUFBQSxTQXhCZVIsUUFBUUEsQ0FBQW1CLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBO1FBQUEsT0FBQWQsU0FBQSxDQUFBbkksS0FBQSxPQUFBRCxTQUFBO01BQUE7TUFBQSxPQUFSNkgsUUFBUTtJQUFBO0VBQUE7SUFBQTlHLEdBQUE7SUFBQWpHLEtBQUEsRUEwQnhCLFNBQU9xTyxxQkFBcUJBLENBQUNDLEdBQVcsRUFBaUI7TUFDeEQsSUFBTUMsS0FBSyxHQUFHLHFEQUFxRDtNQUNuRSxJQUFNQyxLQUFLLEdBQUdGLEdBQUcsQ0FBQ0UsS0FBSyxDQUFDRCxLQUFLLENBQUM7TUFDOUIsT0FBT0MsS0FBSyxHQUFHQSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSTtJQUMvQjtFQUFDO0lBQUF2SSxHQUFBO0lBQUFqRyxLQUFBLEVBRUQsU0FBT3lPLHNCQUFzQkEsQ0FBQ0gsR0FBVyxFQUFpQjtNQUN6RCxJQUFNQyxLQUFLLEdBQUcsc0RBQXNEO01BQ3BFLElBQU1DLEtBQUssR0FBR0YsR0FBRyxDQUFDRSxLQUFLLENBQUNELEtBQUssQ0FBQztNQUM5QixPQUFPQyxLQUFLLEdBQUdBLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJO0lBQy9COztJQUVBO0VBQUE7SUFBQXZJLEdBQUE7SUFBQWpHLEtBQUE7TUFBQSxJQUFBME8sZUFBQSxHQUFBekosaUJBQUEsY0FBQS9FLG1CQUFBLEdBQUE0RCxJQUFBLENBQ0EsU0FBQTZLLFNBQTZCcEQsTUFBYyxFQUFFYyxLQUFZO1FBQUEsSUFBQXVDLGFBQUEsRUFBQUMsYUFBQSxFQUFBekUsSUFBQSxFQUFBMEUsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLHNCQUFBLEVBQUFDLDZCQUFBLEVBQUFDLE9BQUEsRUFBQUMsUUFBQSxFQUFBbEksVUFBQSxFQUFBbUksaUJBQUEsRUFBQUMsWUFBQSxFQUFBQyxnQkFBQSxFQUFBQyxhQUFBLEVBQUFDLE9BQUEsRUFBQUMsS0FBQSxFQUFBQyxXQUFBLEVBQUFDLFNBQUEsRUFBQUMsR0FBQSxFQUFBQyxNQUFBLEVBQUFDLFVBQUEsRUFBQUMscUJBQUEsRUFBQUMsc0JBQUEsRUFBQUMsTUFBQSxFQUFBQyxLQUFBO1FBQUEsT0FBQWhRLG1CQUFBLEdBQUFVLElBQUEsVUFBQXVQLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBN0wsSUFBQSxHQUFBNkwsU0FBQSxDQUFBeFEsSUFBQTtZQUFBO2NBQ2xEZ1AsYUFBYSxHQUFHckQsTUFBTSxDQUFDa0IsS0FBSyxDQUFDbUIsUUFBUTtjQUFBLE1BRXZDLENBQUNyQyxNQUFNLENBQUM4RSxVQUFVLElBQUksQ0FBQ3pCLGFBQWE7Z0JBQUF3QixTQUFBLENBQUF4USxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBd1EsU0FBQSxDQUFBck4sTUFBQTtZQUFBO2NBRWxDOEwsYUFBYSxHQUFHLENBQUMsYUFBYSxFQUFFLGtCQUFrQixDQUFDLENBQUN5QixJQUFJLENBQUMsVUFBQ2hDLEdBQUc7Z0JBQUEsT0FBS00sYUFBYSxDQUFDMkIsR0FBRyxDQUFDN0MsUUFBUSxDQUFDWSxHQUFHLENBQUM7Y0FBQSxFQUFDO2NBQUEsS0FFcEdPLGFBQWE7Z0JBQUF1QixTQUFBLENBQUF4USxJQUFBO2dCQUFBO2NBQUE7Y0FDVndLLElBQUksR0FBRyxJQUFJLENBQUMxRCxPQUFPLENBQUM4SixZQUFZO2NBQUFKLFNBQUEsQ0FBQXhRLElBQUE7Y0FBQSxPQUVwQndLLElBQUksQ0FBQ3hCLElBQUksQ0FBQ2hDLEdBQUcsV0FBVyxDQUFDO1lBQUE7Y0FBckNnSixJQUFHLEdBQUFRLFNBQUEsQ0FBQXhOLElBQUE7Y0FDSG1NLElBQUksR0FBR2EsSUFBRztjQUVWWixzQkFBc0IsR0FBR0QsSUFBSSxDQUFDMEIsT0FBTyxDQUFDSCxJQUFJLENBQUMsVUFBQ0ksTUFBd0I7Z0JBQUEsT0FBS0EsTUFBTSxDQUFDeFIsSUFBSSxLQUFLLGdCQUFnQjtjQUFBLEVBQUM7Y0FDMUcrUCw2QkFBNkIsR0FBR0YsSUFBSSxDQUFDNEIsY0FBYyxDQUFDakQsUUFBUSxDQUFDLFNBQVMsQ0FBQztjQUFBLE1BRXpFc0Isc0JBQXNCLElBQUlDLDZCQUE2QjtnQkFBQW1CLFNBQUEsQ0FBQXhRLElBQUE7Z0JBQUE7Y0FBQTtjQUNwRHNQLE9BQU8sR0FBRyxJQUFJLENBQUNiLHFCQUFxQixDQUFDTyxhQUFhLENBQUMyQixHQUFHLENBQUM7Y0FDdkRwQixRQUFRLEdBQUcsSUFBSSxDQUFDVixzQkFBc0IsQ0FBQ0csYUFBYSxDQUFDZ0MsVUFBVSxDQUFDQyxTQUFTLENBQUM7Y0FFNUU1SixVQUFVLEdBQUcsRUFBRTtjQUNuQixJQUFJaUksT0FBTyxJQUFJQyxRQUFRLEVBQUU7Z0JBQ3hCbEksVUFBVSx5QkFBQWlDLE1BQUEsQ0FBeUJpRyxRQUFRLG1CQUFBakcsTUFBQSxDQUFnQmdHLE9BQU8sQ0FBRTtjQUNyRSxDQUFDLE1BQU0sSUFBSUEsT0FBTyxFQUFFO2dCQUNuQmpJLFVBQVUsd0JBQUFpQyxNQUFBLENBQXdCZ0csT0FBTyxDQUFFO2NBQzVDLENBQUMsTUFBTSxJQUFJQyxRQUFRLEVBQUU7Z0JBQ3BCbEksVUFBVSx5QkFBQWlDLE1BQUEsQ0FBeUJpRyxRQUFRLENBQUU7Y0FDOUM7Y0FBQyxLQUVHbEksVUFBVTtnQkFBQW1KLFNBQUEsQ0FBQXhRLElBQUE7Z0JBQUE7Y0FBQTtjQUFBd1EsU0FBQSxDQUFBeFEsSUFBQTtjQUFBLE9BQ29Cd0ssSUFBSSxDQUFDeEIsSUFBSSxDQUFDaEMsR0FBRyw4QkFBQXNDLE1BQUEsQ0FBOEI0SCxrQkFBa0IsQ0FBQzdKLFVBQVUsQ0FBQyxDQUFFLENBQUM7WUFBQTtjQUF2R21JLGlCQUFpQixHQUFBZ0IsU0FBQSxDQUFBeE4sSUFBQTtjQUFBLE1BRW5Cd00saUJBQWlCLENBQUMyQixRQUFRLEtBQUssVUFBVTtnQkFBQVgsU0FBQSxDQUFBeFEsSUFBQTtnQkFBQTtjQUFBO2NBQ3RDeVAsWUFBWSxHQUFHRCxpQkFBaUIsQ0FBQzRCLElBQUk7Y0FDckMxQixnQkFBZ0IsR0FBR0QsWUFBWSxDQUFDUSxNQUFNLENBQUMsQ0FBQyxDQUFDO2NBQUEsS0FFM0NQLGdCQUFnQjtnQkFBQWMsU0FBQSxDQUFBeFEsSUFBQTtnQkFBQTtjQUFBO2NBQ25CMkwsTUFBTSxDQUFDa0IsS0FBSyxDQUFDd0UsR0FBRyxDQUFDQyxpQkFBVSxDQUFDQyxLQUFLLENBQUM3QixnQkFBZ0IsRUFBRS9ELE1BQU0sQ0FBQzNFLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7Y0FDcEYyRSxNQUFNLENBQUM2RixJQUFJLENBQUMsQ0FBQztjQUFDLE9BQUFoQixTQUFBLENBQUFyTixNQUFBO1lBQUE7Y0FRYndNLGFBQWEsR0FBRyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQ2UsSUFBSSxDQUFDLFVBQUNoQyxHQUFHO2dCQUFBLE9BQUtNLGFBQWEsQ0FBQzJCLEdBQUcsQ0FBQzdDLFFBQVEsQ0FBQ1ksR0FBRyxDQUFDO2NBQUEsRUFBQztjQUU1RmtCLE9BQU8sR0FBR1osYUFBYSxDQUFDMkIsR0FBRyxDQUFDYyxTQUFTLENBQUN6QyxhQUFhLENBQUMyQixHQUFHLENBQUNlLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Y0FBQSxJQUV4RS9CLGFBQWE7Z0JBQUFhLFNBQUEsQ0FBQXhRLElBQUE7Z0JBQUE7Y0FBQTtjQUFBd1EsU0FBQSxDQUFBeFEsSUFBQTtjQUFBLE9BQ0MyTCxNQUFNLENBQUNnRyxNQUFNLElBQUFySSxNQUFBLENBQUkwRixhQUFhLENBQUNxQixNQUFNLFNBQUEvRyxNQUFBLENBQU0wRixhQUFhLENBQUNzQixLQUFLLEdBQUkzRSxNQUFNLENBQUMzRSxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUFBO2NBQTdHZ0osS0FBRyxHQUFBUSxTQUFBLENBQUF4TixJQUFBO2NBRVQ0TSxPQUFPLEdBQUdJLEtBQUcsQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDVSxHQUFHLENBQUNjLFNBQVMsQ0FBQ3pCLEtBQUcsQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDVSxHQUFHLENBQUNlLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFBQztjQU0zRSxHQUFHO2dCQUNGNUIsV0FBVyxHQUFHOEIsSUFBSSxDQUFDQyxLQUFLLENBQUNELElBQUksQ0FBQ0UsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO2dCQUNoRC9CLFNBQVMsc0NBQUF6RyxNQUFBLENBQXNDc0csT0FBTyxjQUFBdEcsTUFBQSxDQUFXc0csT0FBTyxhQUFBdEcsTUFBQSxDQUFVd0csV0FBVyxDQUFFO2NBQ2hHLENBQUMsUUFBUXJELEtBQUssQ0FBQ2tFLEdBQUcsQ0FBQzdDLFFBQVEsQ0FBQ2lDLFNBQVMsQ0FBQztjQUFFUyxTQUFBLENBQUF4USxJQUFBO2NBQUEsT0FFdEIyTCxNQUFNLENBQUNnRyxNQUFNLENBQUM1QixTQUFTLEVBQUVwRSxNQUFNLENBQUMzRSxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUFBO2NBQXBFZ0osR0FBRyxHQUFBUSxTQUFBLENBQUF4TixJQUFBO2NBQUEsTUFFTGdOLEdBQUcsQ0FBQ21CLFFBQVEsS0FBSyxPQUFPLElBQUluQixHQUFHLENBQUNtQixRQUFRLEtBQUssT0FBTztnQkFBQVgsU0FBQSxDQUFBeFEsSUFBQTtnQkFBQTtjQUFBO2NBQUEsT0FBQXdRLFNBQUEsQ0FBQXJOLE1BQUE7WUFBQTtjQUVwRDhNLE1BQU0sR0FBR0QsR0FBRyxDQUFDQyxNQUFNO2NBRXZCLElBQUlELEdBQUcsQ0FBQ21CLFFBQVEsS0FBSyxVQUFVLEVBQUU7Z0JBQ2hDbEIsTUFBTSxHQUFHRCxHQUFHLENBQUMrQixRQUFRLENBQUM5QixNQUFNO2NBQzdCO2NBRU1DLFVBQVUsR0FBR0QsTUFBTSxDQUFDK0IsSUFBSSxDQUFDO2dCQUFBLE9BQU1KLElBQUksQ0FBQ0UsTUFBTSxDQUFDLENBQUMsR0FBRyxHQUFHO2NBQUEsRUFBQyxDQUFDRyxJQUFJLENBQUMsVUFBQ0MsYUFBYTtnQkFBQSxPQUFLQSxhQUFhLENBQUN2QixHQUFHLEtBQUtsRSxLQUFLLENBQUNrRSxHQUFHO2NBQUEsRUFBQztjQUVsSCxJQUFJVCxVQUFVLEVBQUU7Z0JBQ2YsSUFBSSxJQUFJLENBQUNwSixPQUFPLENBQUNELE9BQU8sQ0FBQ3NMLHlCQUF5QixFQUFFO2tCQUNuRGpDLFVBQVUsQ0FBQ0csTUFBTSxHQUFHSCxVQUFVLENBQUNHLE1BQU0sQ0FBQytCLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO2tCQUM1RGxDLFVBQVUsQ0FBQ0ksS0FBSyxHQUFHSixVQUFVLENBQUNJLEtBQUssQ0FBQzhCLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO2tCQUUxRCxJQUFJbEMsVUFBVSxDQUFDSSxLQUFLLENBQUN4QyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQUFxQyxxQkFBQSxHQUNYRCxVQUFVLENBQUNJLEtBQUssQ0FBQytCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ0MsR0FBRyxDQUFDLFVBQUNDLEdBQVc7c0JBQUEsT0FBS0EsR0FBRyxDQUFDQyxJQUFJLENBQUMsQ0FBQztvQkFBQSxFQUFDLEVBQUFwQyxzQkFBQSxHQUFBM1IsY0FBQSxDQUFBMFIscUJBQUEsTUFBN0VFLE1BQU0sR0FBQUQsc0JBQUEsS0FBRUUsS0FBSyxHQUFBRixzQkFBQTtvQkFDcEJGLFVBQVUsQ0FBQ0csTUFBTSxHQUFHQSxNQUFNO29CQUMxQkgsVUFBVSxDQUFDSSxLQUFLLEdBQUdBLEtBQUs7a0JBQ3pCO2dCQUNEO2dCQUNBM0UsTUFBTSxDQUFDa0IsS0FBSyxDQUFDd0UsR0FBRyxDQUFDbkIsVUFBVSxDQUFDO2dCQUM1QnZFLE1BQU0sQ0FBQzZGLElBQUksQ0FBQyxDQUFDO2NBQ2Q7WUFBQztZQUFBO2NBQUEsT0FBQWhCLFNBQUEsQ0FBQTNMLElBQUE7VUFBQTtRQUFBLEdBQUFrSyxRQUFBO01BQUEsQ0FDRDtNQUFBLFNBMUZhMEQsY0FBY0EsQ0FBQUMsR0FBQSxFQUFBQyxHQUFBO1FBQUEsT0FBQTdELGVBQUEsQ0FBQXZKLEtBQUEsT0FBQUQsU0FBQTtNQUFBO01BQUEsT0FBZG1OLGNBQWM7SUFBQSxJQTRGNUI7RUFBQTtJQUFBcE0sR0FBQTtJQUFBakcsS0FBQSxFQUNBLFNBQVEyTixpQkFBaUJBLENBQUNwQyxNQUFjLEVBQUVjLEtBQVksRUFBRWxCLE9BQXNCLEVBQVE7TUFDckZJLE1BQU0sQ0FBQ2tCLEtBQUssQ0FBQ21CLFFBQVEsR0FBR3JDLE1BQU0sQ0FBQ2tCLEtBQUssQ0FBQ0MsT0FBTztNQUM1Q25CLE1BQU0sQ0FBQ2tCLEtBQUssQ0FBQ0MsT0FBTyxHQUFHbkIsTUFBTSxDQUFDa0IsS0FBSyxDQUFDK0YsS0FBSyxDQUFDLENBQUM7TUFFM0MsSUFBSSxDQUFDakgsTUFBTSxDQUFDa0IsS0FBSyxDQUFDQyxPQUFPLEVBQUU7UUFDMUIsSUFBSSxDQUFDdUIsUUFBUSxDQUFDMUMsTUFBTSxFQUFFYyxLQUFLLEVBQUVsQixPQUFPLENBQUM7UUFDckM7TUFDRDtNQUVBLElBQUksQ0FBQ3pFLE9BQU8sQ0FBQ2lDLElBQUksQ0FBQyxVQUFVLEVBQUU0QyxNQUFNLEVBQUVjLEtBQUssRUFBRWxCLE9BQU8sQ0FBQztNQUNyRCxJQUFJLElBQUksQ0FBQ3pFLE9BQU8sQ0FBQ0QsT0FBTyxDQUFDZ00sUUFBUSxFQUFFbEgsTUFBTSxDQUFDNkYsSUFBSSxDQUFDLENBQUM7SUFDakQ7O0lBRUE7RUFBQTtJQUFBbkwsR0FBQTtJQUFBakcsS0FBQSxFQUNBLFNBQVErTixtQkFBbUJBLENBQUN4QyxNQUFjLEVBQUVjLEtBQVksRUFBRWxCLE9BQXNCLEVBQVE7TUFDdkYsSUFBUXNCLEtBQUssR0FBK0JsQixNQUFNLENBQTFDa0IsS0FBSztRQUFFb0IsV0FBVyxHQUFrQnRDLE1BQU0sQ0FBbkNzQyxXQUFXO1FBQUVDLFdBQVcsR0FBS3ZDLE1BQU0sQ0FBdEJ1QyxXQUFXO01BQ3ZDLElBQVEyRSxRQUFRLEdBQUssSUFBSSxDQUFDL0wsT0FBTyxDQUFDRCxPQUFPLENBQWpDZ00sUUFBUTtNQUVoQixJQUFJNUUsV0FBVyxFQUFFO1FBQ2hCcEIsS0FBSyxDQUFDaUcsT0FBTyxDQUFDakcsS0FBSyxDQUFDQyxPQUFPLENBQUM7TUFDN0IsQ0FBQyxNQUFNLElBQUlvQixXQUFXLEVBQUU7UUFDdkJyQixLQUFLLENBQUN3RSxHQUFHLENBQUN4RSxLQUFLLENBQUNDLE9BQU8sQ0FBQztNQUN6QjtNQUVBRCxLQUFLLENBQUNtQixRQUFRLEdBQUduQixLQUFLLENBQUNDLE9BQU87TUFDOUJELEtBQUssQ0FBQ0MsT0FBTyxHQUFHRCxLQUFLLENBQUMrRixLQUFLLENBQUMsQ0FBQztNQUU3QixJQUFJLENBQUM5TCxPQUFPLENBQUNpQyxJQUFJLENBQUMsVUFBVSxFQUFFNEMsTUFBTSxFQUFFYyxLQUFLLEVBQUVsQixPQUFPLENBQUM7TUFFckQsSUFBSUEsT0FBTyxDQUFDSCxNQUFNLEtBQUssU0FBUyxJQUFJLEVBQUV5QixLQUFLLENBQUNDLE9BQU8sR0FBR0QsS0FBSyxDQUFDK0YsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3JFLElBQUksQ0FBQ3ZFLFFBQVEsQ0FBQzFDLE1BQU0sRUFBRWMsS0FBSyxFQUFFbEIsT0FBTyxDQUFDO1FBQ3JDO01BQ0Q7TUFFQSxJQUFJc0gsUUFBUSxFQUFFbEgsTUFBTSxDQUFDNkYsSUFBSSxDQUFDLENBQUM7SUFDNUI7O0lBRUE7RUFBQTtJQUFBbkwsR0FBQTtJQUFBakcsS0FBQSxFQUNBLFNBQVFnTyxhQUFhQSxDQUFDekMsTUFBYyxFQUFFYyxLQUFZLEVBQUVsQixPQUFzQixFQUFRO01BQ2pGSSxNQUFNLENBQUNrQixLQUFLLENBQUNtQixRQUFRLEdBQUdyQyxNQUFNLENBQUNrQixLQUFLLENBQUNDLE9BQU87TUFDNUNuQixNQUFNLENBQUNrQixLQUFLLENBQUNDLE9BQU8sR0FBR25CLE1BQU0sQ0FBQ2tCLEtBQUssQ0FBQytGLEtBQUssQ0FBQyxDQUFDO01BRTNDLElBQUksQ0FBQzlMLE9BQU8sQ0FBQ2lDLElBQUksQ0FBQyxVQUFVLEVBQUU0QyxNQUFNLEVBQUVjLEtBQUssRUFBRWxCLE9BQU8sQ0FBQztNQUNyRCxJQUFJLElBQUksQ0FBQ3pFLE9BQU8sQ0FBQ0QsT0FBTyxDQUFDZ00sUUFBUSxFQUFFbEgsTUFBTSxDQUFDNkYsSUFBSSxDQUFDLENBQUM7SUFDakQ7RUFBQztJQUFBbkwsR0FBQTtJQUFBakcsS0FBQTtNQUFBLElBQUEyUyxTQUFBLEdBQUExTixpQkFBQSxjQUFBL0UsbUJBQUEsR0FBQTRELElBQUEsQ0FFRCxTQUFBOE8sU0FBeUJySCxNQUFjLEVBQUVjLEtBQVksRUFBRWxCLE9BQXNCO1FBQUEsT0FBQWpMLG1CQUFBLEdBQUFVLElBQUEsVUFBQWlTLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBdk8sSUFBQSxHQUFBdU8sU0FBQSxDQUFBbFQsSUFBQTtZQUFBO2NBQzVFMkwsTUFBTSxDQUFDa0IsS0FBSyxDQUFDbUIsUUFBUSxHQUFHckMsTUFBTSxDQUFDa0IsS0FBSyxDQUFDQyxPQUFPO2NBQzVDbkIsTUFBTSxDQUFDa0IsS0FBSyxDQUFDQyxPQUFPLEdBQUcsSUFBSTtjQUFDLElBRXZCbkIsTUFBTSxDQUFDOEUsVUFBVTtnQkFBQXlDLFNBQUEsQ0FBQWxULElBQUE7Z0JBQUE7Y0FBQTtjQUNyQjJMLE1BQU0sQ0FBQ2tCLEtBQUssQ0FBQ21CLFFBQVEsR0FBR3JDLE1BQU0sQ0FBQ2tCLEtBQUssQ0FBQ0MsT0FBTztjQUM1Q25CLE1BQU0sQ0FBQ2tCLEtBQUssQ0FBQ0MsT0FBTyxHQUFHLElBQUk7Y0FDM0JuQixNQUFNLENBQUM2QixPQUFPLEdBQUcsS0FBSztjQUN0QixJQUFJLENBQUMxRyxPQUFPLENBQUNpQyxJQUFJLENBQUMsVUFBVSxFQUFFNEMsTUFBTSxFQUFFYyxLQUFLLEVBQUVsQixPQUFPLENBQUM7Y0FBQyxPQUFBMkgsU0FBQSxDQUFBL1AsTUFBQTtZQUFBO2NBQUErUCxTQUFBLENBQUFsVCxJQUFBO2NBQUEsT0FJakQsSUFBSSxDQUFDeVMsY0FBYyxDQUFDOUcsTUFBTSxFQUFFYyxLQUFLLENBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQXlHLFNBQUEsQ0FBQXJPLElBQUE7VUFBQTtRQUFBLEdBQUFtTyxRQUFBO01BQUEsQ0FDeEM7TUFBQSxTQWJlM0UsUUFBUUEsQ0FBQThFLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBO1FBQUEsT0FBQU4sU0FBQSxDQUFBeE4sS0FBQSxPQUFBRCxTQUFBO01BQUE7TUFBQSxPQUFSK0ksUUFBUTtJQUFBO0VBQUE7SUFBQWhJLEdBQUE7SUFBQWpHLEtBQUEsRUFleEIsU0FBVWdOLFVBQVVBLENBQUN6QixNQUFjLEVBQUVjLEtBQVksRUFBRWxCLE9BQXdCLEVBQVE7TUFDbEZJLE1BQU0sQ0FBQzlHLElBQUksQ0FBQyxDQUFDO01BQ2IsSUFBSSxDQUFDaUMsT0FBTyxDQUFDaUMsSUFBSSxDQUFDLFlBQVksRUFBRTRDLE1BQU0sRUFBRWMsS0FBSyxFQUFFbEIsT0FBTyxDQUFDO0lBQ3hEO0VBQUM7SUFBQWxGLEdBQUE7SUFBQWpHLEtBQUEsRUFFRCxTQUFVaU4sVUFBVUEsQ0FBQzFCLE1BQWMsRUFBRWMsS0FBOEIsRUFBRWxCLE9BQTRCLEVBQVE7TUFDeEdJLE1BQU0sQ0FBQzlHLElBQUksQ0FBQyxDQUFDO01BQ2IsSUFBSSxDQUFDaUMsT0FBTyxDQUFDaUMsSUFBSSxDQUFDLFlBQVksRUFBRTRDLE1BQU0sRUFBRWMsS0FBSyxFQUFFbEIsT0FBTyxDQUFDO0lBQ3hEO0VBQUM7SUFBQWxGLEdBQUE7SUFBQWpHLEtBQUEsRUFFRCxTQUFVa04sWUFBWUEsQ0FBQzNCLE1BQWMsRUFBRUosT0FBNkIsRUFBUTtNQUMzRSxJQUFJLENBQUN6RSxPQUFPLENBQUNpQyxJQUFJLENBQUMsY0FBYyxFQUFFNEMsTUFBTSxFQUFFSixPQUFPLENBQUM7SUFDbkQ7RUFBQztJQUFBbEYsR0FBQTtJQUFBakcsS0FBQSxFQXBhRCxTQUFja1QsSUFBSUEsQ0FBQ3hNLE9BQWdCLEVBQVE7TUFDMUMsSUFBSSxDQUFDRyxRQUFRLEdBQUdILE9BQU87SUFDeEI7RUFBQztBQUFBIiwiaWdub3JlTGlzdCI6W119