1(function(){var __webpack_modules__={292:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('/* harmony import */ var litepicker__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(424);\n/* harmony import */ var litepicker__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(litepicker__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var intl_tel_input__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(603);\n/* harmony import */ var intl_tel_input__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(intl_tel_input__WEBPACK_IMPORTED_MODULE_1__);\nfunction _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); }\nfunction _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;
vendor: 9,336 bytes, line 1
1 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; }\nfunction 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); }\nfunction _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); }); }; }\nvar parentSelector = \'.event-contact\';\n\n\n\n\nfunction init(_x) {\n return _init.apply(this, arguments);\n} // Default init\nfunction _init() {\n _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(parent) {\n var _yield$import, Forms, formsInstance, defaultLanguage, html, userLanguage, normalizedLanguage, picker, initializePhoneInput, phoneInputs;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n initializePhoneInput = function _initializePhoneInput(inputElement) {\n var iti = intl_tel_input__WEBPACK_IMPORTED_MODULE_1___default()(inputElement, {\n initialCountry: "auto",\n geoIpLookup: function geoIpLookup(callback) {\n fetch("https://ipapi.co/json").then(function (res) {\n return res.json();\n }
1).then(function (data) {\n return callback(data.country_code);\n }).catch(function () {\n return callback("us");\n });\n }\n });\n var countryCodeInput = inputElement.closest(\'form\').querySelector("#country_code");\n var personCountryCodeInput = inputElement.closest(\'form\').querySelector("#person_country_code");\n inputElement.addEventListener("countrychange", function () {\n var countryData = iti.getSelectedCountryData();\n if (inputElement.id === \'phone\') {\n countryCodeInput.value = countryData.dialCode;\n } else if (inputElement.id === \'person_number\') {\n personCountryCodeInput.value = countryData.dialCode;\n }\n });\n };\n _context.next = 3;\n return __webpack_require__.e(/* import() */ 7541).then(__webpack_require__.bind(__webpack_require__, 7541));\n case 3:\n _yield$import = _context.sent;\n Forms = _yield$import.Forms;\n formsInstance = new Forms(parent.querySelector(\'form\'));\n formsInstance.init();\n defaultLanguage = \'en\'; // Get the browser\'s language or use the default language\n html = document.querySelector(\'html\');\n userLanguage = html.getAttribute(\'lang\');\n normalizedLanguage = userLanguage ? userLanguage.split(\'-\')[0] : defaultLanguage;\n picker = new litepicker__WEBPACK_IMPORTED_MODULE_0__.Litepicker({\n element: document.getElementById(\'datepicker\'),\n inlineMode: true,\n numberOfColumns: 1,\n numberOfMonths: 1,\n singleMode: true,\n minDays: 1,\n selectForward: true,\n lang: normalizedLanguage,\n months: userLanguage || defaultLanguage,\n minDate: new Date()\n });\n phoneInputs = parent.querySelectorAll("#phone, #person_number");\n phoneInputs.forEach(function (input) {\n initializePhoneInput(input);\n });\n formsInstance.onSubmit(function (event) {\n var startDate = picker.getStartDate();\n var endDate = picker.getEndDate();\n var isDateRangeValid = startDate && endDate;\n if (!isDateRangeValid) {\n event.preventDefault();\n alert(\'Please select a valid date range.\');\n // You can customize the alert or provide feedback to the user as needed\n }\n // Other form validation logic can be added here\n });\n case 15:\n case "end":\n return _context.stop();\n }\n }, _callee);\n }));\n return _init.apply(this, arguments);\n}\ndocument.querySelectorAll(parentSelector).forEach(function (parent) {\n init(parent);\n});\n\n// WP init and Barba reinit\nwindow.addEventListener(\'reinit\', function (e) {\n var container = e.detail && e.detail.container || document;\n container.querySelectorAll(parentSelector).forEach(function (parent) {\n init(parent);\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjkyLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQW9FQTtBQUFBO0FBcEVBO0FBeUJBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUE5Q0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBMEJBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ib2lsZXJwbGF0ZS8uL2Fzc2V0cy9qcy9ibG9ja3MvZXZlbnQvZXZlbnRDb250YWN0LmpzPzdmYTkiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgcGFyZW50U2VsZWN0b3IgPSAnLmV2ZW50LWNvbnRhY3QnO1xuXG5pbXBvcnQgJ3N0eWxlL2Jsb2Nrcy9ldmVudC9fZXZlbnQtY29udGFjdC5zY3NzJztcbmltcG9ydCB7
1IExpdGVwaWNrZXIgfSBmcm9tIFwibGl0ZXBpY2tlclwiO1xuaW1wb3J0ICdpbnRsLXRlbC1pbnB1dC9idWlsZC9jc3MvaW50bFRlbElucHV0LmNzcyc7XG5pbXBvcnQgaW50bFRlbElucHV0IGZyb20gJ2ludGwtdGVsLWlucHV0JztcblxuYXN5bmMgZnVuY3Rpb24gaW5pdChwYXJlbnQpIHtcbiAgY29uc3QgeyBGb3JtcyB9ID0gYXdhaXQgaW1wb3J0KCcuLi8uLi9jb21wb25lbnRzL2Zvcm1zL0Zvcm1zJyk7XG4gIGNvbnN0IGZvcm1zSW5zdGFuY2UgPSBuZXcgRm9ybXMocGFyZW50LnF1ZXJ5U2VsZWN0b3IoJ2Zvcm0nKSk7XG4gIGZvcm1zSW5zdGFuY2UuaW5pdCgpXG4gIGNvbnN0IGRlZmF1bHRMYW5ndWFnZSA9ICdlbic7XG5cbiAgLy8gR2V0IHRoZSBicm93c2VyJ3MgbGFuZ3VhZ2Ugb3IgdXNlIHRoZSBkZWZhdWx0IGxhbmd1YWdlXG4gIGxldCBodG1sID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpO1xuICBsZXQgdXNlckxhbmd1YWdlID0gaHRtbC5nZXRBdHRyaWJ1dGUoJ2xhbmcnKTtcblxuICBjb25zdCBub3JtYWxpemVkTGFuZ3VhZ2UgPSB1c2VyTGFuZ3VhZ2UgPyB1c2VyTGFuZ3VhZ2Uuc3BsaXQoJy0nKVswXSA6IGRlZmF1bHRMYW5ndWFnZTtcblxuICBjb25zdCBwaWNrZXIgPSBuZXcgTGl0ZXBpY2tlcih7XG4gICAgZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RhdGVwaWNrZXInKSxcbiAgICBpbmxpbmVNb2RlOiB0cnVlLFxuICAgIG51bWJlck9mQ29sdW1uczogMSxcbiAgICBudW1iZXJPZk1vbnRoczogMSxcbiAgICBzaW5nbGVNb2RlOiB0cnVlLFxuICAgIG1pbkRheXM6IDEsXG4gICAgc2VsZWN0Rm9yd2FyZDogdHJ1ZSxcbiAgICBsYW5nOiBub3JtYWxpemVkTGFuZ3VhZ2UsXG4gICAgbW9udGhzOiB1c2VyTGFuZ3VhZ2UgfHwgZGVmYXVsdExhbmd1YWdlLFxuICAgIG1pbkRhdGU6IG5ldyBEYXRlKCksXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemVQaG9uZUlucHV0KGlucHV0RWxlbWVudCkge1xuICAgIGxldCBpdGkgPSBpbnRsVGVsSW5wdXQoaW5wdXRFbGVtZW50LCB7XG4gICAgICBpbml0aWFsQ291bnRyeTogXCJhdXRvXCIsXG4gICAgICBnZW9JcExvb2t1cDogY2FsbGJhY2sgPT4ge1xuICAgICAgICBmZXRjaChcImh0dHBzOi8vaXBhcGkuY28vanNvblwiKVxuICAgICAgICAgIC50aGVuKHJlcyA9PiByZXMuanNvbigpKVxuICAgICAgICAgIC50aGVuKGRhdGEgPT4gY2FsbGJhY2soZGF0YS5jb3VudHJ5X2NvZGUpKVxuICAgICAgICAgIC5jYXRjaCgoKSA9PiBjYWxsYmFjayhcInVzXCIpKTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBsZXQgY291bnRyeUNvZGVJbnB1dCA9IGlucHV0RWxlbWVudC5jbG9zZXN0KCdmb3JtJykucXVlcnlTZWxlY3RvcihcIiNjb3VudHJ5X2NvZGVcIik7XG4gICAgbGV0IHBlcnNvbkNvdW50cnlDb2RlSW5wdXQgPSBpbnB1dEVsZW1lbnQuY2xvc2VzdCgnZm9ybScpLnF1ZXJ5U2VsZWN0b3IoXCIjcGVyc29uX2NvdW50cnlfY29kZVwiKTtcblxuICAgIGlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiY291bnRyeWNoYW5nZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgY291bnRyeURhdGEgPSBpdGkuZ2V0U2VsZWN0ZWRDb3VudHJ5RGF0YSgpO1xuICAgICAgaWYgKGlucHV0RWxlbWVudC5pZCA9PT0gJ3Bob25lJykge1xuICAgICAgICBjb3VudHJ5Q29kZUlucHV0LnZhbHVlID0gY291bnRyeURhdGEuZGlhbENvZGU7XG4gICAgICB9IGVsc2UgaWYgKGlucHV0RWxlbWVudC5pZCA9PT0gJ3BlcnNvbl9udW1iZXInKSB7XG4gICAgICAgIHBlcnNvbkNvdW50cnlDb2RlSW5wdXQudmFsdWUgPSBjb3VudHJ5RGF0YS5kaWFsQ29kZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHBob25lSW5wdXRzID0gcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIjcGhvbmUsICNwZXJzb25fbnVtYmVyXCIpO1xuICBwaG9uZUlucHV0cy5mb3JFYWNoKGlucHV0ID0+IHtcbiAgICBpbml0aWFsaXplUGhvbmVJbnB1dChpbnB1dCk7XG4gIH0pO1xuXG4gIGZvcm1zSW5zdGFuY2Uub25TdWJtaXQoZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gcGlja2VyLmdldFN0YXJ0RGF0ZSgpO1xuICAgIGNvbnN0IGVuZERhdGUgPSBwaWNrZXIuZ2V0RW5kRGF0ZSgpO1xuICAgIGNvbnN0IGlzRGF0ZVJhbmdlVmFsaWQgPSBzdGFydERhdGUgJiYgZW5kRGF0ZTtcblxuICAgIGlmICghaXNEYXRlUmFuZ2VWYWxpZCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGFsZXJ0KCdQbGVhc2Ugc2VsZWN0IGEgdmFsaWQgZGF0ZSByYW5nZS4nKTtcbiAgICAgIC8vIFlvdSBjYW4gY3VzdG9taXplIHRoZSBhbGVydCBvciBwcm92aWRlIGZlZWRiYWNrIHRvIHRoZSB1c2VyIGFzIG5lZWRlZFxuICAgIH1cbiAgICAvLyBPdGhlciBmb3JtIHZhbGlkYXRpb24gbG9naWMgY2FuIGJlIGFkZGVkIGhlcmVcbiAgfSk7XG59XG5cbi8vIERlZmF1bHQgaW5pdFxuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChwYXJlbnRTZWxlY3RvcikuZm9yRWFjaChwYXJlbnQgPT4ge1xuICBpbml0KHBhcmVudCk7XG59KTtcblxuLy8gV1AgaW5pdCBhbmQgQmFyYmEgcmVpbml0XG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVpbml0JywgZSA9PiB7XG4gIGxldCBjb250YWluZXIgPSAoZS5kZXRhaWwgJiYgZS5kZXRhaWwuY29udGFpbmVyKSB8fCBkb2N1bWVudDtcbiAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwocGFyZW50U2VsZWN0b3IpLmZvckVhY2gocGFyZW50ID0+IHtcbiAgICBpbml0KHBhcmVudCk7XG4gIH0pO1xufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///292\n')},436:function(module){eval('/*\n * International Telephone Input v19.5.7\n * https://github.com/jackocnr/intl-tel-input.git\n * Licensed under the MIT license\n */\n\n// wrap in UMD\n(function(factory) {\n if ( true && module.exports) module.exports = factory(); else window.intlTelInput = factory();\n})(function(undefined) {\n "use strict";
1\n return function() {\n // Array of country objects for the flag dropdown.\n // Here is the criteria for the plugin to support a given country/territory\n // - It has an iso2 code: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2\n // - It has it\'s own country calling code (it is not a sub-region of another country): https://en.wikipedia.org/wiki/List_of_country_calling_codes\n // - It has a flag in the region-flags project: https://github.com/behdad/region-flags/tree/gh-pages/png\n // - It is supported by libphonenumber (it must be listed on this page): https://github.com/googlei18n/libphonenumber/blob/master/resources/ShortNumberMetadata.xml\n // Each country array has the following information:\n // [\n // Country name,\n // iso2 code,\n // International dial code,\n // Order (if >1 country with same dial code),\n // Area codes\n // ]\n var allCountries = [ [ "Afghanistan", "af", "93" ], [ "Albania", "al", "355" ], [ "Algeria", "dz", "213" ], [ "American Samoa", "as", "1", 5, [ "684" ] ], [ "Andorra", "ad", "376" ], [ "Angola", "ao", "244" ], [ "Anguilla", "ai", "1", 6, [ "264" ] ], [ "Antigua & Barbuda", "ag", "1", 7, [ "268" ] ], [ "Argentina", "ar", "54" ], [ "Armenia", "am", "374" ], [ "Aruba", "aw", "297" ], [ "Ascension Island", "ac", "247" ], [ "Australia", "au", "61", 0 ], [ "Austria", "at", "43" ], [ "Azerbaijan", "az", "994" ], [ "Bahamas", "bs", "1", 8, [ "242" ] ], [ "Bahrain", "bh", "973" ], [ "Bangladesh", "bd", "880" ], [ "Barbados", "bb", "1", 9, [ "246" ] ], [ "Belarus", "by", "375" ], [ "Belgium", "be", "32" ], [ "Belize", "bz", "501" ], [ "Benin", "bj", "229" ], [ "Bermuda", "bm", "1", 10, [ "441" ] ], [ "Bhutan", "bt", "975" ], [ "Bolivia", "bo", "591" ], [ "Bosnia & Herzegovina", "ba", "387" ], [ "Botswana", "bw", "267" ], [ "Brazil", "br", "55" ], [ "British Indian Ocean Territory", "io", "246" ], [ "British Virgin Islands", "vg", "1", 11, [ "284" ] ], [ "Brunei", "bn", "673" ], [ "Bulgaria", "bg", "359" ], [ "Burkina Faso", "bf", "226" ], [ "Burundi", "bi", "257" ], [ "Cambodia", "kh", "855" ], [ "Cameroon", "cm", "237" ], [ "Canada", "ca", "1", 1, [ "204", "226", "236", "249", "250", "263", "289", "306", "343", "354", "365", "367", "368", "382", "387", "403", "416", "418", "428", "431", "437", "438", "450", "584", "468", "474", "506", "514", "519", "548", "579", "581", "584", "587", "604", "613", "639", "647", "672", "683", "705", "709", "742", "753", "778", "780", "782", "807", "819", "825", "867", "873", "902", "905" ] ], [ "Cape Verde", "cv", "238" ], [ "Caribbean Netherlands", "bq", "599", 1, [ "3", "4", "7" ] ], [ "Cayman Islands", "ky", "1", 12, [ "345" ] ], [ "Central African Republic", "cf", "236" ], [ "Chad", "td", "235" ], [ "Chile", "cl", "56" ], [ "China", "cn", "86" ], [ "Christmas Island", "cx", "61", 2, [ "89164" ] ], [ "Cocos (Keeling) Islands", "cc", "61", 1, [ "89162" ] ], [ "Colombia", "co", "57" ], [ "Comoros", "km", "269" ], [ "Congo - Brazzaville", "cg", "242" ], [ "Congo - Kinshasa", "cd", "243" ], [ "Cook Islands", "ck", "682" ], [ "Costa Rica", "cr", "506" ], [ "Côte dâIvoire", "ci", "225" ], [ "Croatia", "hr", "385" ], [ "Cuba", "cu", "53" ], [ "Curaçao", "cw", "599", 0 ], [ "Cyprus", "cy", "357" ], [ "Czech Republic", "cz", "420" ], [ "Denmark", "dk", "45" ], [ "Djibouti", "dj", "253" ], [ "Dominica", "dm", "1", 13, [ "767" ] ], [ "Dominican Republic", "do", "1", 2, [ "809", "829", "849" ] ], [ "Ecuador", "ec", "593" ], [ "Egypt", "eg", "20" ], [ "El Salvador", "sv", "503" ], [ "Equatorial Guinea", "gq", "240" ], [ "Eritrea", "er", "291" ], [ "Estonia", "ee", "372" ], [ "Eswatini", "sz", "268" ], [ "Ethiopia", "et", "251" ], [ "Falkland Islands", "fk", "500" ], [ "Faroe Islands", "fo", "298" ], [ "Fiji", "fj", "679" ], [ "Finland", "fi", "358", 0 ], [ "France", "fr", "33" ], [ "French Guiana", "gf", "594" ], [ "French Polynesia", "pf", "689" ], [ "Gabon", "ga", "241" ], [ "Gambia", "gm", "220" ], [ "Georgia", "ge", "995" ], [ "Germany", "de", "49" ], [ "Ghana", "gh", "233" ], [ "Gibraltar", "gi", "350" ], [ "Greece", "gr", "30" ], [ "Greenland", "gl", "299" ], [ "Grenada", "gd", "1", 14, [ "473" ] ], [ "Guadeloupe", "gp", "590", 0 ], [ "Guam", "gu", "1", 15, [ "671" ] ], [ "Guatemala", "gt", "502" ], [ "Guer
1nsey", "gg", "44", 1, [ "1481", "7781", "7839", "7911" ] ], [ "Guinea", "gn", "224" ], [ "Guinea-Bissau", "gw", "245" ], [ "Guyana", "gy", "592" ], [ "Haiti", "ht", "509" ], [ "Honduras", "hn", "504" ], [ "Hong Kong", "hk", "852" ], [ "Hungary", "hu", "36" ], [ "Iceland", "is", "354" ], [ "India", "in", "91" ], [ "Indonesia", "id", "62" ], [ "Iran", "ir", "98" ], [ "Iraq", "iq", "964" ], [ "Ireland", "ie", "353" ], [ "Isle of Man", "im", "44", 2, [ "1624", "74576", "7524", "7924", "7624" ] ], [ "Israel", "il", "972" ], [ "Italy", "it", "39", 0 ], [ "Jamaica", "jm", "1", 4, [ "876", "658" ] ], [ "Japan", "jp", "81" ], [ "Jersey", "je", "44", 3, [ "1534", "7509", "7700", "7797", "7829", "7937" ] ], [ "Jordan", "jo", "962" ], [ "Kazakhstan", "kz", "7", 1, [ "33", "7" ] ], [ "Kenya", "ke", "254" ], [ "Kiribati", "ki", "686" ], [ "Kosovo", "xk", "383" ], [ "Kuwait", "kw", "965" ], [ "Kyrgyzstan", "kg", "996" ], [ "Laos", "la", "856" ], [ "Latvia", "lv", "371" ], [ "Lebanon", "lb", "961" ], [ "Lesotho", "ls", "266" ], [ "Liberia", "lr", "231" ], [ "Libya", "ly", "218" ], [ "Liechtenstein", "li", "423" ], [ "Lithuania", "lt", "370" ], [ "Luxembourg", "lu", "352" ], [ "Macau", "mo", "853" ], [ "Madagascar", "mg", "261" ], [ "Malawi", "mw", "265" ], [ "Malaysia", "my", "60" ], [ "Maldives", "mv", "960" ], [ "Mali", "ml", "223" ], [ "Malta", "mt", "356" ], [ "Marshall Islands", "mh", "692" ], [ "Martinique", "mq", "596" ], [ "Mauritania", "mr", "222" ], [ "Mauritius", "mu", "230" ], [ "Mayotte", "yt", "262", 1, [ "269", "639" ] ], [ "Mexico", "mx", "52" ], [ "Micronesia", "fm", "691" ], [ "Moldova", "md", "373" ], [ "Monaco", "mc", "377" ], [ "Mongolia", "mn", "976" ], [ "Montenegro", "me", "382" ], [ "Montserrat", "ms", "1", 16, [ "664" ] ], [ "Morocco", "ma", "212", 0 ], [ "Mozambique", "mz", "258" ], [ "Myanmar (Burma)", "mm", "95" ], [ "Namibia", "na", "264" ], [ "Nauru", "nr", "674" ], [ "Nepal", "np", "977" ], [ "Netherlands", "nl", "31" ], [ "New Caledonia", "nc", "687" ], [ "New Zealand", "nz", "64" ], [ "Nicaragua", "ni", "505" ], [ "Niger", "ne", "227" ], [ "Nigeria", "ng", "234" ], [ "Niue", "nu", "683" ], [ "Norfolk Island", "nf", "672" ], [ "North Korea", "kp", "850" ], [ "North Macedonia", "mk", "389" ], [ "Northern Mariana Islands", "mp", "1", 17, [ "670" ] ], [ "Norway", "no", "47", 0 ], [ "Oman", "om", "968" ], [ "Pakistan", "pk", "92" ], [ "Palau", "pw", "680" ], [ "Palestine", "ps", "970" ], [ "Panama", "pa", "507" ], [ "Papua New Guinea", "pg", "675" ], [ "Paraguay", "py", "595" ], [ "Peru", "pe", "51" ], [ "Philippines", "ph", "63" ], [ "Poland", "pl", "48" ], [ "Portugal", "pt", "351" ], [ "Puerto Rico", "pr", "1", 3, [ "787", "939" ] ], [ "Qatar", "qa", "974" ], [ "Réunion", "re", "262", 0 ], [ "Romania", "ro", "40" ], [ "Russia", "ru", "7", 0 ], [ "Rwanda", "rw", "250" ], [ "Samoa", "ws", "685" ], [ "San Marino", "sm", "378" ], [ "São Tomé & PrÃncipe", "st", "239" ], [ "Saudi Arabia", "sa", "966" ], [ "Senegal", "sn", "221" ], [ "Serbia", "rs", "381" ], [ "Seychelles", "sc", "248" ], [ "Sierra Leone", "sl", "232" ], [ "Singapore", "sg", "65" ], [ "Sint Maarten", "sx", "1", 21, [ "721" ] ], [ "Slovakia", "sk", "421" ], [ "Slovenia", "si", "386" ], [ "Solomon Islands", "sb", "677" ], [ "Somalia", "so", "252" ], [ "South Africa", "za", "27" ], [ "South Korea", "kr", "82" ], [ "South Sudan", "ss", "211" ], [ "Spain", "es", "34" ], [ "Sri Lanka", "lk", "94" ], [ "St Barthélemy", "bl", "590", 1 ], [ "St Helena", "sh", "290" ], [ "St Kitts & Nevis", "kn", "1", 18, [ "869" ] ], [ "St Lucia", "lc", "1", 19, [ "758" ] ], [ "St Martin", "mf", "590", 2 ], [ "St Pierre & Miquelon", "pm", "508" ], [ "St Vincent & Grenadines", "vc", "1", 20, [ "784" ] ], [ "Sudan", "sd", "249" ], [ "Suriname", "sr", "597" ], [ "Svalbard & Jan Mayen", "sj", "47", 1, [ "79" ] ], [ "Sweden", "se", "46" ], [ "Switzerland", "ch", "41" ], [ "Syria", "sy", "963" ], [ "Taiwan", "tw", "886" ], [ "Tajikistan", "tj", "992" ], [ "Tanzania", "tz", "255" ], [ "Thailand", "th", "66" ], [ "Timor-Leste", "tl", "670" ], [ "Togo", "tg", "228" ], [ "Tokelau", "tk", "690" ], [ "Tonga", "to", "676" ], [ "Trinidad & Tobago", "tt", "1", 22, [ "868" ] ], [ "Tunisia", "tn", "216" ], [ "Turkey", "tr", "90" ], [ "Turkmenistan", "tm", "993" ], [ "Turks & Caicos Islands", "tc", "1", 23, [ "649" ] ], [ "Tuvalu", "tv", "688" ], [ "Uganda", "ug", "256" ], [ "Ukraine", "ua", "380" ], [ "United Arab Emirates", "ae", "971" ], [ "United Kingdom", "gb", "44", 0 ], [ "United States", "us", "1", 0 ], [ "Uruguay", "uy", "598" ], [ "US Virgin Islands", "vi", "1", 24, [ "340" ] ], [ "Uzbekistan", "uz", "998" ], [ "Vanuatu", "vu", "678" ], [ "Vatican City", "va", "39", 1, [ "06698" ] ], [ "Venezuela", "ve", "58" ], [ "Vietnam", "vn", "84" ], [ "Wallis & Futuna", "wf", "681" ], [ "Western Sahara", "eh", "212", 1, [ "5288", "5289" ] ], [ "Yemen", "ye", "967" ], [ "Zambia", "zm", "260" ], [ "Zimbabwe", "zw", "263" ], [ "Ã
land Islands", "ax", "358", 1, [ "18" ] ] ];\n // loop over all of the countries above, restructuring the data to be objects with named keys\n for (var i = 0; i < allCountries.length;
1 i++) {\n var c = allCountries[i];\n allCountries[i] = {\n name: c[0],\n iso2: c[1],\n dialCode: c[2],\n priority: c[3] || 0,\n areaCodes: c[4] || null,\n nodeById: {}\n };\n }\n "use strict";\n function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? Object(arguments[i]) : {};\n var ownKeys = Object.keys(source);\n if (typeof Object.getOwnPropertySymbols === "function") {\n ownKeys.push.apply(ownKeys, Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n ownKeys.forEach(function(key) {\n _defineProperty(target, key, source[key]);\n });\n }\n return target;\n }\n function _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n }\n function _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n }\n function _nonIterableRest() {\n throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");\n }\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === "string") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === "Object" && o.constructor) n = o.constructor.name;\n if (n === "Map" || n === "Set") return Array.from(o);\n if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n return arr2;\n }\n function _iterableToArrayLimit(arr, i) {\n var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"];\n if (null != _i) {\n var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1;\n try {\n if (_x = (_i = _i.call(arr)).next, 0 === i) {\n if (Object(_i) !== _i) return;\n _n = !1;\n } else for (;!(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) {\n }\n } catch (err) {\n _d = !0, _e = err;\n } finally {\n try {\n if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return;\n } finally {\n if (_d) throw _e;\n }\n }\n return _arr;\n }\n }\n function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n }\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError("Cannot call a class as a function");\n }\n }\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length;
1 i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ("value" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n }\n }\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, "prototype", {\n writable: false\n });\n return Constructor;\n }\n function _toPropertyKey(arg) {\n var key = _toPrimitive(arg, "string");\n return typeof key === "symbol" ? key : String(key);\n }\n function _toPrimitive(input, hint) {\n if (typeof input !== "object" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || "default");\n if (typeof res !== "object") return res;\n throw new TypeError("@@toPrimitive must return a primitive value.");\n }\n return (hint === "string" ? String : Number)(input);\n }\n var intlTelInputGlobals = {\n getInstance: function getInstance(input) {\n var id = input.getAttribute("data-intl-tel-input-id");\n return window.intlTelInputGlobals.instances[id];\n },\n instances: {},\n // using a global like this allows us to mock it in the tests\n documentReady: function documentReady() {\n return document.readyState === "complete";\n }\n };\n if (typeof window === "object") {\n window.intlTelInputGlobals = intlTelInputGlobals;\n }\n // these vars persist through all instances of the plugin\n var id = 0;\n var defaults = {\n // whether or not to allow the dropdown\n allowDropdown: true,\n // auto insert dial code (A) on init, (B) on user selecting a country, (C) on calling setCountry\n autoInsertDialCode: false,\n // add a placeholder in the input with an example number for the selected country\n autoPlaceholder: "polite",\n // add a country search input at the top of the dropdown\n countrySearch: true,\n // modify the parentClass\n containerClass: "",\n // modify the auto placeholder\n customPlaceholder: null,\n // by default, initialise with the first country in the list selected (if no country set via the initial value or initialCountry option)\n defaultToFirstCountry: true,\n // append menu to specified element\n dropdownContainer: null,\n // don\'t display these countries\n excludeCountries: [],\n // fix the dropdown width to the input width (rather than being as wide as the longest country name)\n fixDropdownWidth: true,\n // format the number as the user types\n formatAsYouType: true,\n // format the input value during initialisation and on setNumber\n formatOnDisplay: true,\n // geoIp lookup function\n geoIpLookup: null,\n // inject a hidden input with this name, and on submit, populate it with the result of getNumber\n hiddenInput: null,\n // internationalise the plugin text e.g. search input placeholder, country names\n i18n: {},\n // initial country\n initialCountry: "",\n // national vs international formatting for numbers e.g. placeholders and displaying existing numbers\n nationalMode: true,\n // display only these countries\n onlyCountries: [],\n // number type to use for placeholders\n placeholderNumberType: "MOBILE",\n // the countries at the top of the list\n preferredCountries: [],\n // option to hide the flags - must be used with showSelectedDialCode, or allowDropdown=false\n showFlags: true,\n // display the international dial code next to the selected flag\n showSelectedDialCode: false,\n // use full screen popup instead of dropdown for c
1ountry list\n useFullscreenPopup: typeof navigator !== "undefined" && typeof window !== "undefined" ? // we cannot just test screen size as some smartphones/website meta tags will report desktop\n // resolutions\n // Note: to target Android Mobiles (and not Tablets), we must find \'Android\' and \'Mobile\'\n /Android.+Mobile|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) || window.innerWidth <= 500 : false,\n // specify the path to the libphonenumber script to enable validation/formatting\n utilsScript: ""\n };\n // https://en.wikipedia.org/wiki/List_of_North_American_Numbering_Plan_area_codes#Non-geographic_area_codes\n var regionlessNanpNumbers = [ "800", "822", "833", "844", "855", "866", "877", "880", "881", "882", "883", "884", "885", "886", "887", "888", "889" ];\n // run a method on each instance of the plugin\n var forEachInstance = function forEachInstance(method) {\n var instances = window.intlTelInputGlobals.instances;\n Object.values(instances).forEach(function(instance) {\n return instance[method]();\n });\n };\n // this is our plugin class that we will create an instance of\n // eslint-disable-next-line no-unused-vars\n var Iti = /*#__PURE__*/ function() {\n function Iti(input) {\n var customOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _classCallCheck(this, Iti);\n this.id = id++;\n this.telInput = input;\n this.activeItem = null;\n this.highlightedItem = null;\n // process specified options / defaults\n this.options = Object.assign({}, defaults, customOptions);\n this.hadInitialPlaceholder = Boolean(input.getAttribute("placeholder"));\n }\n _createClass(Iti, [ {\n key: "_init",\n value: function _init() {\n var _this = this;\n // if showing fullscreen popup, do not fix the width\n if (this.options.useFullscreenPopup) {\n this.options.fixDropdownWidth = false;\n }\n // when search enabled, we must fix the width else it would change with different results\n if (this.options.countrySearch && !this.options.useFullscreenPopup) {\n this.options.fixDropdownWidth = true;\n }\n // if in nationalMode, do not insert dial codes\n if (this.options.nationalMode) {\n this.options.autoInsertDialCode = false;\n }\n // if showSelectedDialCode enabled, do not insert dial codes\n if (this.options.showSelectedDialCode) {\n this.options.autoInsertDialCode = false;\n }\n // force showFlags=true if there\'s a dropdown and we\'re not displaying the dial code,\n // as otherwise you just have a down arrow on it\'s own which doesn\'t make sense\n var forceShowFlags = this.options.allowDropdown && !this.options.showSelectedDialCode;\n if (!this.options.showFlags && forceShowFlags) {\n this.options.showFlags = true;\n }\n // on mobile, we want a full screen dropdown, so we must append it to the body\n if (this.options.useFullscreenPopup && !this.options.dropdownContainer) {\n this.options.dropdownContainer = document.body;\n }\n // check if input has one parent with RTL\n this.isRTL = !!this.telInput.closest("[dir=rtl]");\n // these promises get resolved when their individual requests complete\n // this way the dev can do something like iti.promise.then(...) to know when all requests are\n // complete\n if (typeof Promise !== "undefined") {\n var autoCountryPromise = new Promise(function(resolve, reject) {\n _this.resolveAutoCountryPromise = resolve;\n _this.rejectAutoCountryPromise = reject;\n });\n var utilsScriptPromise = new Promise(function(resolve, reject) {\n _this.resolveUtilsScriptPromise = resolve;\n _this.rejectUtilsScriptPromise = reject;\n });\n this.promise = Promise.all([ autoCountryPromise, utilsScriptPromise ]);\n } else {\n // prevent errors when Promise doesn\'t exist\n this.resolveAutoCountryPromise = this.rejectAutoCountryPromise = function() {};\n this.resolveUtilsScriptPromise = this.rejectUtilsScriptPromise = function() {};\n }\n // in various situations there could be no country selected initially, but we need to be able\n // to assume this variable exists\n this.selectedCountryData = {};\n // process all the data: onlyCountries, excludeCountries, preferredCountries etc\n this._processCountryData();\n // generate the markup\n this._generateMarkup();\n // set the initial state of the input value and the selected flag\n this._setInitialState();\n // start all of the event listeners: autoInsertDialCode, input keydown, selectedFlag click\n this._initListeners();\n // utils script, and auto country\n this._initRequests();\n }\n }, {\n key: "_processCountryData",\n value: function _processCountryData() {\
1n // process onlyCountries or excludeCountries array if present\n this._processAllCountries();\n // generate this.dialCodes and this.dialCodeToIso2Map\n this._processDialCodes();\n // process the preferredCountries\n this._processPreferredCountries();\n // translate country names according to i18n option\n this._translateCountryNames();\n // sort countries by name\n if (this.options.onlyCountries.length || this.options.i18n) {\n this.countries.sort(this._countryNameSort);\n }\n }\n }, {\n key: "_addToDialCodeMap",\n value: function _addToDialCodeMap(iso2, dialCode, priority) {\n if (dialCode.length > this.dialCodeMaxLen) {\n this.dialCodeMaxLen = dialCode.length;\n }\n if (!this.dialCodeToIso2Map.hasOwnProperty(dialCode)) {\n this.dialCodeToIso2Map[dialCode] = [];\n }\n // bail if we already have this country for this dialCode\n for (var i = 0; i < this.dialCodeToIso2Map[dialCode].length; i++) {\n if (this.dialCodeToIso2Map[dialCode][i] === iso2) {\n return;\n }\n }\n // check for undefined as 0 is falsy\n var index = priority !== undefined ? priority : this.dialCodeToIso2Map[dialCode].length;\n this.dialCodeToIso2Map[dialCode][index] = iso2;\n }\n }, {\n key: "_processAllCountries",\n value: function _processAllCountries() {\n if (this.options.onlyCountries.length) {\n var lowerCaseOnlyCountries = this.options.onlyCountries.map(function(country) {\n return country.toLowerCase();\n });\n this.countries = allCountries.filter(function(country) {\n return lowerCaseOnlyCountries.indexOf(country.iso2) > -1;\n });\n } else if (this.options.excludeCountries.length) {\n var lowerCaseExcludeCountries = this.options.excludeCountries.map(function(country) {\n return country.toLowerCase();\n });\n this.countries = allCountries.filter(function(country) {\n return lowerCaseExcludeCountries.indexOf(country.iso2) === -1;\n });\n } else {\n this.countries = allCountries;\n }\n }\n }, {\n key: "_translateCountryNames",\n value: function _translateCountryNames() {\n for (var i = 0; i < this.countries.length; i++) {\n var iso2 = this.countries[i].iso2.toLowerCase();\n if (this.options.i18n.hasOwnProperty(iso2)) {\n this.countries[i].name = this.options.i18n[iso2];\n }\n }\n }\n }, {\n key: "_countryNameSort",\n value: function _countryNameSort(a, b) {\n if (a.name < b.name) {\n return -1;\n }\n if (a.name > b.name) {\n return 1;\n }\n return 0;\n }\n }, {\n key: "_processDialCodes",\n value: function _processDialCodes() {\n // here we store just dial codes, where the key is the dial code, and the value is true\n // e.g. { 1: true, 7: true, 20: true, ... }\n this.dialCodes = {};\n this.dialCodeMaxLen = 0;\n // here we map dialCodes (inc both dialCode and dialCode+areaCode) to iso2 codes\n /* e.g.\n * {\n * 1: [ \'us\', \'ca\', ... ], # all NANP countries\n * 12: [ \'us\', \'ca\', ... ], # subset of NANP countries\n * 120: [ \'us\', \'ca\' ], # just US and Canada\n * 1204: [ \'ca\' ], # only Canada\n * ...\n * }\n */\n this.dialCodeToIso2Map = {};\n // first: add dial codes\n for (var i = 0; i < this.countries.length;
1 i++) {\n var c = this.countries[i];\n if (!this.dialCodes[c.dialCode]) {\n this.dialCodes[c.dialCode] = true;\n }\n this._addToDialCodeMap(c.iso2, c.dialCode, c.priority);\n }\n // next: add area codes\n // this is a second loop over countries, to make sure we have all of the "root" countries\n // already in the map, so that we can access them, as each time we add an area code substring\n // to the map, we also need to include the "root" country\'s code, as that also matches\n for (var _i = 0; _i < this.countries.length; _i++) {\n var _c = this.countries[_i];\n // area codes\n if (_c.areaCodes) {\n var rootIso2Code = this.dialCodeToIso2Map[_c.dialCode][0];\n // for each area code\n for (var j = 0; j < _c.areaCodes.length; j++) {\n var areaCode = _c.areaCodes[j];\n // for each digit in the area code to add all partial matches as well\n for (var k = 1; k < areaCode.length; k++) {\n var partialDialCode = _c.dialCode + areaCode.substr(0, k);\n // start with the root country, as that also matches this dial code\n this._addToDialCodeMap(rootIso2Code, partialDialCode);\n this._addToDialCodeMap(_c.iso2, partialDialCode);\n }\n // add the full area code\n this._addToDialCodeMap(_c.iso2, _c.dialCode + areaCode);\n }\n }\n }\n }\n }, {\n key: "_processPreferredCountries",\n value: function _processPreferredCountries() {\n this.preferredCountries = [];\n for (var i = 0; i < this.options.preferredCountries.length; i++) {\n var iso2 = this.options.preferredCountries[i].toLowerCase();\n var countryData = this._getCountryData(iso2, true);\n if (countryData) {\n this.preferredCountries.push(countryData);\n }\n }\n }\n }, {\n key: "_createEl",\n value: function _createEl(name, attrs, container) {\n var el = document.createElement(name);\n if (attrs) {\n Object.entries(attrs).forEach(function(_ref) {\n var _ref2 = _slicedToArray(_ref, 2), key = _ref2[0], value = _ref2[1];\n return el.setAttribute(key, value);\n });\n }\n if (container) {\n container.appendChild(el);\n }\n return el;\n }\n }, {\n key: "_generateMarkup",\n value: function _generateMarkup() {\n this.telInput.classList.add("iti__tel-input");\n // if autocomplete does not exist on the element and its form, then\n // prevent autocomplete as there\'s no safe, cross-browser event we can react to, so it can\n // easily put the plugin in an inconsistent state e.g. the wrong flag selected for the\n // autocompleted number, which on submit could mean wrong number is saved\n if (!this.telInput.hasAttribute("autocomplete") && !(this.telInput.form && this.telInput.form.hasAttribute("autocomplete"))) {\n this.telInput.setAttribute("autocomplete", "off");\n }\n var _this$options = this.options, allowDropdown = _this$options.allowDropdown, showSelectedDialCode = _this$options.showSelectedDialCode, show
1Flags = _this$options.showFlags, containerClass = _this$options.containerClass, hiddenInput = _this$options.hiddenInput, dropdownContainer = _this$options.dropdownContainer, fixDropdownWidth = _this$options.fixDropdownWidth, useFullscreenPopup = _this$options.useFullscreenPopup, countrySearch = _this$options.countrySearch;\n // containers (mostly for positioning)\n var parentClass = "iti";\n if (allowDropdown) {\n parentClass += " iti--allow-dropdown";\n }\n if (showSelectedDialCode) {\n parentClass += " iti--show-selected-dial-code";\n }\n if (showFlags) {\n parentClass += " iti--show-flags";\n }\n if (containerClass) {\n parentClass += " ".concat(containerClass);\n }\n if (!useFullscreenPopup) {\n parentClass += " iti--inline-dropdown";\n }\n var wrapper = this._createEl("div", {\n "class": parentClass\n });\n this.telInput.parentNode.insertBefore(wrapper, this.telInput);\n // only hide the flagsContainer if allowDropdown, showFlags and showSelectedDialCode are all false\n var showFlagsContainer = allowDropdown || showFlags || showSelectedDialCode;\n if (showFlagsContainer) {\n this.flagsContainer = this._createEl("div", {\n "class": "iti__flag-container"\n }, wrapper);\n }\n wrapper.appendChild(this.telInput);\n // selected flag (displayed to left of input)\n // using Aria tags for "Select-Only Combobox Example"\n // https://www.w3.org/WAI/ARIA/apg/patterns/combobox/examples/combobox-select-only/\n if (showFlagsContainer) {\n this.selectedFlag = this._createEl("div", _objectSpread({\n "class": "iti__selected-flag"\n }, allowDropdown && {\n role: "combobox",\n "aria-haspopup": "listbox",\n "aria-controls": "iti-".concat(this.id, "__country-listbox"),\n "aria-expanded": "false",\n "aria-label": this.options.i18n.selectedCountryAriaLabel || "Selected country"\n }), this.flagsContainer);\n }\n if (showFlags) {\n this.selectedFlagInner = this._createEl("div", {\n "class": "iti__flag"\n }, this.selectedFlag);\n }\n if (this.selectedFlag && this.telInput.disabled) {\n this.selectedFlag.setAttribute("aria-disabled", "true");\n }\n if (showSelectedDialCode) {\n this.selectedDialCode = this._createEl("div", {\n "class": "iti__selected-dial-code"\n }, this.selectedFlag);\n }\n if (allowDropdown) {\n if (!this.telInput.disabled) {\n // make element focusable and tab navigable\n this.selectedFlag.setAttribute("tabindex", "0");\n }\n this.dropdownArrow = this._createEl("div", {\n "class": "iti__arrow"\n }, this.selectedFlag);\n var extraClasses = fixDropdownWidth ? "" : "iti--flexible-dropdown-width";\n this.dropdownContent = this._createEl("div", {\n "class": "iti__dropdown-content iti__hide ".concat(extraClasse
1s)\n });\n if (countrySearch) {\n this.searchInput = this._createEl("input", {\n type: "text",\n "class": "iti__search-input",\n placeholder: this.options.i18n.searchPlaceholder || "Search"\n }, this.dropdownContent);\n }\n // country list: preferred countries, then divider, then all countries\n this.countryList = this._createEl("ul", {\n "class": "iti__country-list",\n id: "iti-".concat(this.id, "__country-listbox"),\n role: "listbox",\n "aria-label": this.options.i18n.countryListAriaLabel || "List of countries"\n }, this.dropdownContent);\n if (this.preferredCountries.length && !countrySearch) {\n this._appendListItems(this.preferredCountries, "iti__preferred", true);\n this._createEl("li", {\n "class": "iti__divider",\n "aria-hidden": "true"\n }, this.countryList);\n }\n this._appendListItems(this.countries, "iti__standard");\n // create dropdownContainer markup\n if (dropdownContainer) {\n var dropdownClasses = "iti iti--container";\n if (useFullscreenPopup) {\n dropdownClasses += " iti--fullscreen-popup";\n } else {\n dropdownClasses += " iti--inline-dropdown";\n }\n if (countrySearch) {\n dropdownClasses += " iti--country-search";\n }\n this.dropdown = this._createEl("div", {\n "class": dropdownClasses\n });\n this.dropdown.appendChild(this.dropdownContent);\n } else {\n this.flagsContainer.appendChild(this.dropdownContent);\n }\n }\n if (hiddenInput) {\n var telInputName = this.telInput.getAttribute("name");\n var result = hiddenInput(telInputName);\n var isObject = result !== null && typeof result === "object";\n var hiddenInputPhoneName;\n var hiddenInputCountryName;\n if (isObject) {\n hiddenInputPhoneName = result.phone || telInputName;\n hiddenInputCountryName = result.country || "".concat(hiddenInputPhoneName, "_country");\n } else {\n hiddenInputPhoneName = result || telInputName;\n hiddenInputCountryName = "".concat(hiddenInputPhoneName, "_country");\n }\n // Check if a name has been determined for the phone input field after all conditions\n if (!hiddenInputPhoneName) {\n return;\n }\n // Create hidden input for the full international number\n this.hiddenInput = this._createEl("input", {\n type: "hidden",\n name: hiddenInputPhoneName\n });\n // Create hidden input for the selected country iso2 code\n this.hiddenInputCountry = this._createEl("input", {\n type: "hidden",\n name: hiddenInputCountryName\n });\n wrapper.appendChild(this.hiddenInput);\n wrapper.appendChild(this.hiddenInputCountry);\n }\n }\n }, {\n key: "_appendListItems",\n value: function _appendListItems(countries, className, preferred) {\n for (var i = 0; i < countries.length;
1 i++) {\n var c = countries[i];\n var idSuffix = preferred ? "-preferred" : "";\n var listItem = this._createEl("li", {\n id: "iti-".concat(this.id, "__item-").concat(c.iso2).concat(idSuffix),\n "class": "iti__country ".concat(className),\n tabindex: "-1",\n role: "option",\n "data-dial-code": c.dialCode,\n "data-country-code": c.iso2,\n "aria-selected": "false"\n }, this.countryList);\n // store this for later use e.g. country search filtering\n c.nodeById[this.id] = listItem;\n var content = "";\n // add the flag\n if (this.options.showFlags) {\n content += "<div class=\'iti__flag-box\'><div class=\'iti__flag iti__".concat(c.iso2, "\'></div></div>");\n }\n // and the country name and dial code\n content += "<span class=\'iti__country-name\'>".concat(c.name, "</span>");\n content += "<span class=\'iti__dial-code\'>+".concat(c.dialCode, "</span>");\n listItem.insertAdjacentHTML("beforeend", content);\n }\n }\n }, {\n key: "_setInitialState",\n value: function _setInitialState() {\n var overrideAutoCountry = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n // fix firefox bug: when first load page (with input with value set to number with intl dial\n // code) and initialising plugin removes the dial code from the input, then refresh page,\n // and we try to init plugin again but this time on number without dial code so get grey flag\n var attributeValue = this.telInput.getAttribute("value");\n var inputValue = this.telInput.value;\n var useAttribute = attributeValue && attributeValue.charAt(0) === "+" && (!inputValue || inputValue.charAt(0) !== "+");\n var val = useAttribute ? attributeValue : inputValue;\n var dialCode = this._getDialCode(val);\n var isRegionlessNanp = this._isRegionlessNanp(val);\n var _this$options2 = this.options, initialCountry = _this$options2.initialCountry, autoInsertDialCode = _this$options2.autoInsertDialCode, defaultToFirstCountry = _this$options2.defaultToFirstCountry;\n // if we already have a dial code, and it\'s not a regionlessNanp, we can go ahead and set the\n // flag, else fall back to the default country\n if (dialCode && !isRegionlessNanp) {\n this._updateFlagFromNumber(val);\n } else if (initialCountry !== "auto" || overrideAutoCountry) {\n var lowerInitialCountry = initialCountry ? initialCountry.toLowerCase() : "";\n var isValidInitialCountry = lowerInitialCountry && this._getCountryData(lowerInitialCountry, true);\n // see if we should select a flag\n if (isValidInitialCountry) {\n this._setFlag(lowerInitialCountry);\n } else {\n if (dialCode && isRegionlessNanp) {\n // has intl dial code, is regionless nanp, and no initialCountry, so default to US\n this._setFlag("us");\n } else if (defaultToFirstCountry && !val) {\n // no dial code and no initialCountry, so default to first in list\n this.defaultCountry = this.preferredCountries.length ? this.preferredCountries[0].iso2 : this.countries[0].iso2;\n this._setFlag(this.defaultCountry);\n } else {\n // display the empty state (globe icon)\n this._setFlag();\n }\n }\n // if empty and autoInsertDialCode then insert the dial code\n if (!val && autoInsertDialCode) {\n this.telInput.value = "+".concat(this.selectedCountryData.dialCode);\n }\n }\n // NOTE: if initialCountry is set to auto, that will be handled separately\n // format - note this wont be run after _updateDialCode as that\'s only called
1if no val\n if (val) {\n this._updateValFromNumber(val);\n }\n }\n }, {\n key: "_initListeners",\n value: function _initListeners() {\n this._initKeyListeners();\n if (this.options.autoInsertDialCode) {\n this._initBlurListeners();\n }\n if (this.options.allowDropdown) {\n this._initDropdownListeners();\n }\n if (this.hiddenInput) {\n this._initHiddenInputListener();\n }\n }\n }, {\n key: "_initHiddenInputListener",\n value: function _initHiddenInputListener() {\n var _this2 = this;\n this._handleHiddenInputSubmit = function() {\n _this2.hiddenInput.value = _this2.getNumber();\n _this2.hiddenInputCountry.value = _this2.getSelectedCountryData().iso2;\n };\n if (this.telInput.form) {\n this.telInput.form.addEventListener("submit", this._handleHiddenInputSubmit);\n }\n }\n }, {\n key: "_initDropdownListeners",\n value: function _initDropdownListeners() {\n var _this3 = this;\n // hack for input nested inside label (which is valid markup): clicking the selected-flag to\n // open the dropdown would then automatically trigger a 2nd click on the input which would\n // close it again\n this._handleLabelClick = function(e) {\n // if the dropdown is closed, then focus the input, else ignore the click\n if (_this3.dropdownContent.classList.contains("iti__hide")) {\n _this3.telInput.focus();\n } else {\n e.preventDefault();\n }\n };\n var label = this.telInput.closest("label");\n if (label) {\n label.addEventListener("click", this._handleLabelClick);\n }\n // toggle country dropdown on click\n this._handleClickSelectedFlag = function() {\n // only intercept this event if we\'re opening the dropdown\n // else let it bubble up to the top ("click-off-to-close" listener)\n // we cannot just stopPropagation as it may be needed to close another instance\n if (_this3.dropdownContent.classList.contains("iti__hide") && !_this3.telInput.disabled && !_this3.telInput.readOnly) {\n _this3._showDropdown();\n }\n };\n this.selectedFlag.addEventListener("click", this._handleClickSelectedFlag);\n // open dropdown if selected flag is focused and they press up/down/space/enter\n this._handleFlagsContainerKeydown = function(e) {\n var isDropdownHidden = _this3.dropdownContent.classList.contains("iti__hide");\n if (isDropdownHidden && [ "ArrowUp", "ArrowDown", " ", "Enter" ].includes(e.key)) {\n // prevent form from being submitted if "ENTER" was pressed\n e.preventDefault();\n // prevent event from being handled again by document\n e.stopPropagation();\n _this3._showDropdown();\n }\n // allow navigation from dropdown to input on TAB\n if (e.key === "Tab") {\n _this3._closeDropdown();\n }\n };\n this.flagsContainer.addEventListener("keydown", this._handleFlagsContainerKeydown);\n }\n }, {\n key: "_initRequests",\n value: function _initRequests() {\n var _this4 = this;\n // if the user has specified the path to the utils script, fetch it on window.load, else resolve\n if (this.options.utilsScript && !window.intlTelInputUtils) {\n // if the plugin is being initialised after the window.load event has already been fired\n if (window.intlTelInputGlobals.documentReady()) {\n window.intlTelInputGlobals.loadUtils(this.options.utilsScript);\n } else {\n // wait until the load event so we don\'t block any other requests e.g. the flags image\n window.addEventListener("load", function() {\
1n window.intlTelInputGlobals.loadUtils(_this4.options.utilsScript);\n });\n }\n } else {\n this.resolveUtilsScriptPromise();\n }\n // dont bother with IP lookup if we already have a selected country\n if (this.options.initialCountry === "auto" && !this.selectedCountryData.iso2) {\n this._loadAutoCountry();\n } else {\n this.resolveAutoCountryPromise();\n }\n }\n }, {\n key: "_loadAutoCountry",\n value: function _loadAutoCountry() {\n var _this5 = this;\n // 3 options:\n // 1) already loaded (we\'re done)\n // 2) not already started loading (start)\n // 3) already started loading (do nothing - just wait for loading callback to fire)\n if (window.intlTelInputGlobals.autoCountry) {\n this.handleAutoCountry();\n } else if (!window.intlTelInputGlobals.startedLoadingAutoCountry) {\n // don\'t do this twice!\n window.intlTelInputGlobals.startedLoadingAutoCountry = true;\n if (typeof this.options.geoIpLookup === "function") {\n this.options.geoIpLookup(function() {\n var iso2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";\n var iso2Lower = iso2.toLowerCase();\n var isValidIso2 = iso2Lower && _this5._getCountryData(iso2Lower, true);\n if (isValidIso2) {\n window.intlTelInputGlobals.autoCountry = iso2Lower;\n // tell all instances the auto country is ready\n // TODO: this should just be the current instances\n // UPDATE: use setTimeout in case their geoIpLookup function calls this callback straight\n // away (e.g. if they have already done the geo ip lookup somewhere else). Using\n // setTimeout means that the current thread of execution will finish before executing\n // this, which allows the plugin to finish initialising.\n setTimeout(function() {\n return forEachInstance("handleAutoCountry");\n });\n } else {\n _this5._setInitialState(true);\n forEachInstance("rejectAutoCountryPromise");\n }\n }, function() {\n return forEachInstance("rejectAutoCountryPromise");\n });\n }\n }\n }\n }, {\n key: "_initKeyListeners",\n value: function _initKeyListeners() {\n var _this6 = this;\n var userOverrideFormatting = false;\n // update flag on input event\n this._handleKeyEvent = function(e) {\n if (_this6._updateFlagFromNumber(_this6.telInput.value)) {\n _this6._triggerCountryChange();\n }\n // if user types their own formatting char (not a plus or a numeric), then set the override\n var isFormattingChar = e && e.data && /[^+0-9]/.test(e.data);\n var isPaste = e && e.inputType === "insertFromPaste" && _this6.telInput.value;\n if (isFormattingChar || isPaste) {\n userOverrideFormatting = true;\n } else if (!/[^+0-9]/.test(_this6.telInput.value)) {\n userOverrideFormatting = false;\n }\n // handle FAYT, unless userOverrideFormatting or it\'s a paste event\n if (_this6.options.formatAsYouType && !userOverrideFormatting && e.inputType !== "insertFromPaste") {\n // maintain caret position after reformatting\n var currentCaretPos = _this6.telInput.selectionStart;\n var valueBeforeCaret = _this6.telInput.value.substring(0, currentCaretPos);\n var relevantCharsBeforeCaret = valueBeforeCaret.replace(/[^+0-9]/g, "").length;\n var isDeleteForwards = e && e.inputType === "deleteContentForward";\n var formattedValue = _this6._formatNumberAsYouType();\n var newCaretPos = _this6._translateCursorPosition(relevantCharsBeforeCaret, formattedValue, currentCaretPos, isDeleteForwards);\n _this6.telInput.value = formattedValue;\n _this6.telInput.setSelectionRange(newCaretPos, newCaretPos);\n }\n };\n this.telInput.addEventListener("input", this._handleKeyEvent);\n // update flag on cut/paste events (now supported in all major browsers)\n this._handleClipboardEvent = function() {\
1n // hack because "paste" event is fired before input is updated\n setTimeout(_this6._handleKeyEvent);\n };\n this.telInput.addEventListener("cut", this._handleClipboardEvent);\n this.telInput.addEventListener("paste", this._handleClipboardEvent);\n }\n }, {\n key: "_translateCursorPosition",\n value: function _translateCursorPosition(relevantChars, formattedValue, prevCaretPos, isDeleteForwards) {\n // if the first char is a formatting char, and they backspace delete it:\n // cursor should stay at the start (pos 0), rather than stick to the first digit (pos 1)\n if (prevCaretPos === 0 && !isDeleteForwards) {\n return 0;\n }\n var count = 0;\n for (var i = 0; i < formattedValue.length; i++) {\n if (/[+0-9]/.test(formattedValue[i])) {\n count++;\n }\n // normal case: stop when you hit the right number of relevant chars\n // (cursor will be just after the final relevant char)\n if (count === relevantChars && !isDeleteForwards) {\n return i + 1;\n }\n // spacial case: delete forwards (fn + delete on a mac):\n // wait until hit one extra relevant char, and put the cursor just before it (after any formatting chars)\n if (isDeleteForwards && count === relevantChars + 1) {\n return i;\n }\n }\n return formattedValue.length;\n }\n }, {\n key: "_cap",\n value: function _cap(number) {\n var max = this.telInput.getAttribute("maxlength");\n return max && number.length > max ? number.substr(0, max) : number;\n }\n }, {\n key: "_initBlurListeners",\n value: function _initBlurListeners() {\n var _this7 = this;\n // on blur or form submit: if just a dial code then remove it\n this._handleSubmitOrBlurEvent = function() {\n _this7._removeEmptyDialCode();\n };\n if (this.telInput.form) {\n this.telInput.form.addEventListener("submit", this._handleSubmitOrBlurEvent);\n }\n this.telInput.addEventListener("blur", this._handleSubmitOrBlurEvent);\n }\n }, {\n key: "_removeEmptyDialCode",\n value: function _removeEmptyDialCode() {\n if (this.telInput.value.charAt(0) === "+") {\n var numeric = this._getNumeric(this.telInput.value);\n // if just a plus, or if just a dial code\n if (!numeric || this.selectedCountryData.dialCode === numeric) {\n this.telInput.value = "";\n }\n }\n }\n }, {\n key: "_getNumeric",\n value: function _getNumeric(s) {\n return s.replace(/\\D/g, "");\n }\n }, {\n key: "_trigger",\n value: function _trigger(name) {\n var e = new Event(name, {\n bubbles: true,\n cancelable: true\n });\n this.telInput.dispatchEvent(e);\n }\n }, {\n key: "_showDropdown",\n value: function _showDropdown() {\n if (this.options.fixDropdownWidth) {\n this.dropdownContent.style.width = "".concat(this.telInput.offsetWidth, "px");\n }\n this.dropdownContent.classList.remove("iti__hide");\n this.selectedFlag.setAttribute("aria-expanded", "true");\n this._setDropdownPosition();\n if (this.options.countrySearch) {\n // start by highlighting the first item in the list\n var firstElementChild = this.countryList.firstElementChild;\n if (firstElementChild) {\n this._highlightListItem(firstElementChild, false);\n }\n this.searchInput.focus();\n } else if (this.activeItem) {\n // update highlighting and scroll to active list item\n this._highlightListItem(this.activeItem, false);\n this._scrollTo(this.activeItem, true);\n }\n // bind all the dropdown-related listeners: mouseover, click, click-off, keydown\n this._bindDropdownListeners();\n // update the arrow\n this.dropdownArrow.classList.add("iti__arrow--up");\n this._trigger("open:countrydropdown");\n }\n }, {\n key: "_toggleClass",\n value: function _toggleClass(el, className, shouldHaveClass) {\n if (shouldHaveClass && !el.classList.contains(className)) {\
1n el.classList.add(className);\n } else if (!shouldHaveClass && el.classList.contains(className)) {\n el.classList.remove(className);\n }\n }\n }, {\n key: "_setDropdownPosition",\n value: function _setDropdownPosition() {\n var _this8 = this;\n if (this.options.dropdownContainer) {\n this.options.dropdownContainer.appendChild(this.dropdown);\n }\n if (!this.options.useFullscreenPopup) {\n var pos = this.telInput.getBoundingClientRect();\n // windowTop from https://stackoverflow.com/a/14384091/217866\n var windowTop = document.documentElement.scrollTop;\n var inputTop = pos.top + windowTop;\n var dropdownHeight = this.dropdownContent.offsetHeight;\n // dropdownFitsBelow = (dropdownBottom < windowBottom)\n var dropdownFitsBelow = inputTop + this.telInput.offsetHeight + dropdownHeight < windowTop + window.innerHeight;\n var dropdownFitsAbove = inputTop - dropdownHeight > windowTop;\n // dont allow positioning above when country search enabled as the search box jumps around as you filter countries\n var positionDropdownAboveInput = !this.options.countrySearch && !dropdownFitsBelow && dropdownFitsAbove;\n // by default, the dropdown will be below the input. If we want to position it above the\n // input, we add the dropup class.\n this._toggleClass(this.dropdownContent, "iti__dropdown-content--dropup", positionDropdownAboveInput);\n // if dropdownContainer is enabled, calculate postion\n if (this.options.dropdownContainer) {\n // if we want to position the dropdown below the input, we need to add the input height to the top value\n var extraTop = positionDropdownAboveInput ? 0 : this.telInput.offsetHeight;\n // calculate placement\n this.dropdown.style.top = "".concat(inputTop + extraTop, "px");\n this.dropdown.style.left = "".concat(pos.left + document.body.scrollLeft, "px");\n // close menu on window scroll\n this._handleWindowScroll = function() {\n return _this8._closeDropdown();\n };\n window.addEventListener("scroll", this._handleWindowScroll);\n }\n }\n }\n }, {\n key: "_bindDropdownListeners",\n value: function _bindDropdownListeners() {\n var _this9 = this;\n // when mouse over a list item, just highlight that one\n // we add the class "highlight", so if they hit "enter" we know which one to select\n this._handleMouseoverCountryList = function(e) {\n // handle event delegation, as we\'re listening for this event on the countryList\n var listItem = e.target.closest(".iti__country");\n if (listItem) {\n _this9._highlightListItem(listItem, false);\n }\n };\n this.countryList.addEventListener("mouseover", this._handleMouseoverCountryList);\n // listen for country selection\n this._handleClickCountryList = function(e) {\n var listItem = e.target.closest(".iti__country");\n if (listItem) {\n _this9._selectListItem(listItem);\n }\n };\n this.countryList.addEventListener("click", this._handleClickCountryList);\n // click off to close\n // (except when this initial opening click is bubbling up)\n // we cannot just stopPropagation as it may be needed to close another instance\n var isOpening = true;\n this._handleClickOffToClose = function() {\
1n if (!isOpening) {\n _this9._closeDropdown();\n }\n isOpening = false;\n };\n document.documentElement.addEventListener("click", this._handleClickOffToClose);\n // listen for up/down scrolling, enter to select, or escape to close\n // use keydown as keypress doesn\'t fire for non-char keys and we want to catch if they\n // just hit down and hold it to scroll down (no keyup event).\n // listen on the document because that\'s where key events are triggered if no input has focus\n var query = "";\n var queryTimer = null;\n this._handleKeydownOnDropdown = function(e) {\n // prevent down key from scrolling the whole page,\n // and enter key from submitting a form etc\n if ([ "ArrowUp", "ArrowDown", "Enter", "Escape" ].includes(e.key)) {\n e.preventDefault();\n e.stopPropagation();\n // up and down to navigate\n if (e.key === "ArrowUp" || e.key === "ArrowDown") {\n _this9._handleUpDownKey(e.key);\n } else if (e.key === "Enter") {\n _this9._handleEnterKey();\n } else if (e.key === "Escape") {\n _this9._closeDropdown();\n }\n }\n // alpha chars to perform search\n // regex allows one latin alpha char or space, based on https://stackoverflow.com/a/26900132/217866)\n if (!_this9.options.countrySearch && /^[a-zA-ZÃ-ÿа-ÑÐ-Я ]$/.test(e.key)) {\n e.stopPropagation();\n // jump to countries that start with the query string\n if (queryTimer) {\n clearTimeout(queryTimer);\n }\n query += e.key.toLowerCase();\n _this9._searchForCountry(query);\n // if the timer hits 1 second, reset the query\n queryTimer = setTimeout(function() {\n query = "";\n }, 1e3);\n }\n };\n document.addEventListener("keydown", this._handleKeydownOnDropdown);\n if (this.options.countrySearch) {\n var doFilter = function doFilter() {\n var inputQuery = _this9.searchInput.value.trim();\n if (inputQuery) {\n _this9._filterCountries(inputQuery);\n } else {\n _this9._filterCountries("", true);\n }\n };\n var keyupTimer = null;\n this._handleSearchChange = function() {\n // filtering country nodes is expensive (lots of DOM manipulation), so rate limit it\n if (keyupTimer) {\n clearTimeout(keyupTimer);\n }\n keyupTimer = setTimeout(function() {\n doFilter();\n keyupTimer = null;\n }, 100);\n };\n this.searchInput.addEventListener("input", this._handleSearchChange);\n // stop propagation on search input click, so doesn\'t trigger click-off-to-close listener\n this.searchInput.addEventListener("click", function(e) {\n return e.stopPropagation();\n });\n }\n }\n }, {\n key: "_normaliseString",\n value: function _normaliseString() {\n var s = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";\n return s.normalize("NFD").replace(/[\\u0300-\\u036f]/g, "").toLowerCase();\n }\n }, {\n key: "_filterCountries",\n value: function _filterCountries(query) {\n var isReset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var isFirst = true;\n this.countryList.innerHTML = "";\n var normalisedQuery = this._normaliseString(query);\n for (var i = 0; i < this.countries.length;
1 i++) {\n var c = this.countries[i];\n var normalisedCountryName = this._normaliseString(c.name);\n var fullDialCode = "+".concat(c.dialCode);\n if (isReset || normalisedCountryName.includes(normalisedQuery) || fullDialCode.includes(normalisedQuery) || c.iso2.includes(normalisedQuery)) {\n this.countryList.appendChild(c.nodeById[this.id]);\n // highlight the first item\n if (isFirst) {\n this._highlightListItem(c.nodeById[this.id], false);\n isFirst = false;\n }\n }\n }\n }\n }, {\n key: "_handleUpDownKey",\n value: function _handleUpDownKey(key) {\n var next = key === "ArrowUp" ? this.highlightedItem.previousElementSibling : this.highlightedItem.nextElementSibling;\n if (next) {\n // skip the divider\n if (next.classList.contains("iti__divider")) {\n next = key === "ArrowUp" ? next.previousElementSibling : next.nextElementSibling;\n }\n } else if (this.countryList.childElementCount > 1) {\n // otherwise, we must be at the end, so loop round again\n next = key === "ArrowUp" ? this.countryList.lastElementChild : this.countryList.firstElementChild;\n }\n if (next) {\n // if country search enabled, dont lose focus from the search input on up/down\n var doFocus = !this.options.countrySearch;\n this._highlightListItem(next, doFocus);\n if (this.options.countrySearch) {\n this._scrollTo(next, false);\n }\n }\n }\n }, {\n key: "_handleEnterKey",\n value: function _handleEnterKey() {\n if (this.highlightedItem) {\n this._selectListItem(this.highlightedItem);\n }\n }\n }, {\n key: "_searchForCountry",\n value: function _searchForCountry(query) {\n for (var i = 0; i < this.countries.length; i++) {\n if (this._startsWith(this.countries[i].name, query)) {\n var listItem = this.countries[i].nodeById[this.id];\n // update highlighting and scroll\n this._highlightListItem(listItem, false);\n this._scrollTo(listItem, true);\n break;\n }\n }\n }\n }, {\n key: "_startsWith",\n value: function _startsWith(a, b) {\n return a.substr(0, b.length).toLowerCase() === b;\n }\n }, {\n key: "_updateValFromNumber",\n value: function _updateValFromNumber(fullNumber) {\n var number = fullNumber;\n if (this.options.formatOnDisplay && window.intlTelInputUtils && this.selectedCountryData) {\n var useNational = this.options.nationalMode || number.charAt(0) !== "+" && !this.options.showSelectedDialCode;\n var _intlTelInputUtils$nu = intlTelInputUtils.numberFormat, NATIONAL = _intlTelInputUtils$nu.NATIONAL, INTERNATIONAL = _intlTelInputUtils$nu.INTERNATIONAL;\n var format = useNational ? NATIONAL : INTERNATIONAL;\n number = intlTelInputUtils.formatNumber(number, this.selectedCountryData.iso2, format);\n }\n number = this._beforeSetNumber(number);\n this.telInput.value = number;\n }\n }, {\n key: "_updateFlagFromNumber",\n value: function _updateFlagFromNumber(fullNumber) {\n var plusIndex = fullNumber.indexOf("+");\n // if it contains a plus, discard any chars before it e.g. accidental space char.\n // this keeps the selected country auto-updating correctly, which we want as\n // libphonenumber\'s validation/getNumber methods will ignore these chars anyway\n var number = plusIndex ? fullNumber.substring(plusIndex) : fullNumber;
1\n // if we already have US/Canada selected, make sure the number starts\n // with a +1 so _getDialCode will be able to extract the area code\n // update: if we dont yet have selectedCountryData, but we\'re here (trying to update the flag\n // from the number), that means we\'re initialising the plugin with a number that already has a\n // dial code, so fine to ignore this bit\n var selectedDialCode = this.selectedCountryData.dialCode;\n var isNanp = selectedDialCode === "1";\n if (number && isNanp && number.charAt(0) !== "+") {\n if (number.charAt(0) !== "1") {\n number = "1".concat(number);\n }\n number = "+".concat(number);\n }\n // if showSelectedDialCode enabled, then consider the selected dial code to be part of the number\n if (this.options.showSelectedDialCode && selectedDialCode && number.charAt(0) !== "+") {\n number = "+".concat(selectedDialCode).concat(number);\n }\n // try and extract valid dial code from input\n var dialCode = this._getDialCode(number, true);\n var numeric = this._getNumeric(number);\n var iso2 = null;\n if (dialCode) {\n var iso2Codes = this.dialCodeToIso2Map[this._getNumeric(dialCode)];\n // check if the right country is already selected. this should be false if the number is\n // longer than the matched dial code because in this case we need to make sure that if\n // there are multiple country matches, that the first one is selected (note: we could\n // just check that here, but it requires the same loop that we already have later)\n var alreadySelected = iso2Codes.indexOf(this.selectedCountryData.iso2) !== -1 && numeric.length <= dialCode.length - 1;\n var isRegionlessNanpNumber = selectedDialCode === "1" && this._isRegionlessNanp(numeric);\n // only update the flag if:\n // A) NOT (we currently have a NANP flag selected, and the number is a regionlessNanp)\n // AND\n // B) the right country is not already selected\n if (!isRegionlessNanpNumber && !alreadySelected) {\n // if using onlyCountries option, iso2Codes[0] may be empty, so we must find the first\n // non-empty index\n for (var j = 0; j < iso2Codes.length; j++) {\n if (iso2Codes[j]) {\n iso2 = iso2Codes[j];\n break;\n }\n }\n }\n } else if (number.charAt(0) === "+" && numeric.length) {\n // invalid dial code, so empty\n // Note: use getNumeric here because the number has not been formatted yet, so could contain\n // bad chars\n iso2 = "";\n } else if ((!number || number === "+") && !this.selectedCountryData.iso2) {\n // if no selected flag, and user either clears the input, or just types a plus, then show default\n iso2 = this.defaultCountry;\n }\n if (iso2 !== null) {\n return this._setFlag(iso2);\n }\n return false;\n }\n }, {\n key: "_isRegionlessNanp",\n value: function _isRegionlessNanp(number) {\n var numeric = this._getNumeric(number);\n if (numeric.charAt(0) === "1") {\n var areaCode = numeric.substr(1, 3);\n return regionlessNanpNumbers.indexOf(areaCode) !== -1;\n }\n return false;\n }\n }, {\n key: "_highlightListItem",\n value: function _highlightListItem(listItem, shouldFocus) {\n var prevItem = this.highlightedItem;\n if (prevItem) {\n prevItem.classList.remove("iti__highlight");\n }\n this.highlightedItem = listItem;\n this.highlightedItem.classList.add("iti__highlight");\n this.selectedFlag.setAttribute("aria-activedescendant", listItem.getAttribute("id"));\n if (shouldFocus) {\n this.highlightedItem.focus();\n }\n }\n }, {\n key: "_getCountryData",\n value: function _getCountryData(iso2, allowF
1ail) {\n for (var i = 0; i < this.countries.length; i++) {\n if (this.countries[i].iso2 === iso2) {\n return this.countries[i];\n }\n }\n if (allowFail) {\n return null;\n }\n throw new Error("No country data for \'".concat(iso2, "\'"));\n }\n }, {\n key: "_setFlag",\n value: function _setFlag(iso2) {\n var _this$options3 = this.options, allowDropdown = _this$options3.allowDropdown, showSelectedDialCode = _this$options3.showSelectedDialCode, showFlags = _this$options3.showFlags, countrySearch = _this$options3.countrySearch;\n var prevCountry = this.selectedCountryData.iso2 ? this.selectedCountryData : {};\n // do this first as it will throw an error and stop if iso2 is invalid\n this.selectedCountryData = iso2 ? this._getCountryData(iso2, false) : {};\n // update the defaultCountry - we only need the iso2 from now on, so just store that\n if (this.selectedCountryData.iso2) {\n this.defaultCountry = this.selectedCountryData.iso2;\n }\n if (showFlags) {\n var flagClass = iso2 ? "iti__".concat(iso2) : "iti__globe";\n this.selectedFlagInner.setAttribute("class", "iti__flag ".concat(flagClass));\n }\n this._setSelectedCountryFlagTitleAttribute(iso2, showSelectedDialCode);\n if (showSelectedDialCode) {\n var dialCode = this.selectedCountryData.dialCode ? "+".concat(this.selectedCountryData.dialCode) : "";\n this.selectedDialCode.innerHTML = dialCode;\n // offsetWidth is zero if input is in a hidden container during initialisation\n var selectedFlagWidth = this.selectedFlag.offsetWidth || this._getHiddenSelectedFlagWidth();\n // add 6px of padding after the grey selected-dial-code box, as this is what we use in the css\n if (this.isRTL) {\n this.telInput.style.paddingRight = "".concat(selectedFlagWidth + 6, "px");\n } else {\n this.telInput.style.paddingLeft = "".concat(selectedFlagWidth + 6, "px");\n }\n }\n // and the input\'s placeholder\n this._updatePlaceholder();\n // update the active list item (only if country search disabled, as country search doesn\'t store the active item)\n if (allowDropdown && !countrySearch) {\n var prevItem = this.activeItem;\n if (prevItem) {\n prevItem.classList.remove("iti__active");\n prevItem.setAttribute("aria-selected", "false");\n }\n if (iso2) {\n // check if there is a preferred item first, else fall back to standard\n var nextItem = this.countryList.querySelector("#iti-".concat(this.id, "__item-").concat(iso2, "-preferred")) || this.countryList.querySelector("#iti-".concat(this.id, "__item-").concat(iso2));\n nextItem.setAttribute("aria-selected", "true");\n nextItem.classList.add("iti__active");\n this.activeItem = nextItem;\n }\n }\n // return if the flag has changed or not\n return prevCountry.iso2 !== iso2;\n }\n }, {\n key: "_setSelectedCountryFlagTitleAttribute",\n value: function _setSelectedCountryFlagTitleAttribute(iso2, showSelectedDialCode) {\n if (!this.selectedFlag) {\n return;\n }\n var title;\n if (iso2 && !showSelectedDialCode) {\n title = "".concat(this.selectedCountryData.name, ": +").concat(this.selectedCountryData.dialCode);\n } else if (iso2) {\n // For screen reader output, we don\'t want to include the dial code in the reader output twice\n // so just use the selected country name here:\n title = this.selectedCountryData.name;\n } else {\n title = "Unknown";\n }\n this.selectedFlag.setAttribute("title", title);\n }\n }, {\n key: "_getHiddenSelectedFlagWidth",\n value: function _getHiddenSelectedFlagWidth() {\n // to get the right styling to apply, all we need is a shallow clone of the container,\n // and then to inject a deep clone of the selectedFlag element\n var containerClone = this.telInput.parentNode.cloneNode();\n containerClone.style.visibility = "hidden";\n document.body.appendChild(containerClone);\n var flagsContainerClone = this.flagsContainer.cloneNode();\n containerClone.appendChild(flagsContainerClone);\n var selectedFlagClone = this.selectedFlag.cloneNode(true);\n flagsContainerClone.appendChild(selectedFlagClone);\n var width = selectedFlagClone.offsetWidth;\n containerClone.parentNode.removeChild(containerClone);\n return width;\n }\n }, {\n key: "_updatePlaceholder",\n value: function _updatePlaceholder() {\n var _this$options4 = this.options, autoPlaceholder = _this$options4.autoPlaceholder, placeholderNumberType = _this$options4.placeholderNumberType, nationalMode = _this$options4.nationalMode, customPlaceholder = _this$options4.customPlaceholder;\n var shouldSetPlaceholder = autoPlaceholder === "aggressive" || !this.hadInitialPlaceholder && autoPlaceholder === "polite";\n if (window.intlTelInputUtils && shouldSetPlaceholder) {\n var numberType = intlTelInputUtils.numberType[placeholderNumberType];\n var placeholder = this.selectedCountryData.iso2 ? intlTelInputUtils.getExampleNumber(this.selectedCountryData.iso2, nationalMode, numberType) : "";\n placeholder = this._beforeSetNumber(placeholder);\n if (typeof customPlaceholder === "function") {\n placeholder = customPlaceholder(placeholder, this.selectedCountryData);\n }\n this.telInput.setAttribute("placeholder", placeholder);\n }\n }\n }, {\n key: "_selectListItem",\n value: function _selectListItem(listItem) {\n // update selected flag and active list item\n var flagChanged = this._setFlag(listItem.getAttribute("data-country-code"));\n this._closeDropdown();\n this._updateDialCode(listItem.getAttribute("data-dial-code"));\n // focus the input\n this.telInput.focus();\n if (flagChanged) {\n this._triggerCountryChange();\n }\n }\n }, {\n key: "_closeDropdown",\n value: function _closeDropdown() {\n this.dropdownContent.classList.add("iti__hide");\n this.selectedFlag.setAttribute("aria-expanded", "false");\n this.selectedFlag.removeAttribute("aria-activedescendant");\n // update the arrow\n this.dropdownArrow.classList.remove("iti__arrow--up");\n // unbind key events\n document.removeEventListener("keydown", this._handleKeydownOnDropdown);\n if (this.options.countrySearch) {\n this.searchInput.removeEventListener("input", this._handleSearchChange);\n }\n document.documentElement.removeEventListener("click", this._handleClickOffToClose);\n this.countryList.removeEventListener("mouseover", this._handleMouseoverCountryList);\n this.countryList.removeEventListener("click", this._handleClickCountryList);\n // remove menu from container\n if (this.options.dropdownContainer) {\n if (!this.options.useFullscreenPopup) {\n window.removeEventListener("scroll", this._handleWindowScroll);\n }\n if (this.dropdown.parentNode) {\n this.dropdown.parentNode.removeChild(this.dropdown);\n }\n }\n this._trigger("close:countrydropdown");\n }\n }, {\n key: "_scrollTo",\n value: function _scrollTo(element, middle) {\n var container = this.countryList;\n // windowTop from https://stackoverflow.com/a/14384091/2
117866\n var windowTop = document.documentElement.scrollTop;\n var containerHeight = container.offsetHeight;\n var containerTop = container.getBoundingClientRect().top + windowTop;\n var containerBottom = containerTop + containerHeight;\n var elementHeight = element.offsetHeight;\n var elementTop = element.getBoundingClientRect().top + windowTop;\n var elementBottom = elementTop + elementHeight;\n var newScrollTop = elementTop - containerTop + container.scrollTop;\n var middleOffset = containerHeight / 2 - elementHeight / 2;\n if (elementTop < containerTop) {\n // scroll up\n if (middle) {\n newScrollTop -= middleOffset;\n }\n container.scrollTop = newScrollTop;\n } else if (elementBottom > containerBottom) {\n // scroll down\n if (middle) {\n newScrollTop += middleOffset;\n }\n var heightDifference = containerHeight - elementHeight;\n container.scrollTop = newScrollTop - heightDifference;\n }\n }\n }, {\n key: "_updateDialCode",\n value: function _updateDialCode(newDialCodeBare) {\n var inputVal = this.telInput.value;\n // save having to pass this every time\n var newDialCode = "+".concat(newDialCodeBare);\n var newNumber;\n if (inputVal.charAt(0) === "+") {\n // there\'s a plus so we\'re dealing with a replacement\n var prevDialCode = this._getDialCode(inputVal);\n if (prevDialCode) {\n // current number contains a valid dial code, so replace it\n newNumber = inputVal.replace(prevDialCode, newDialCode);\n } else {\n // current number contains an invalid dial code, so ditch it\n // (no way to determine where the invalid dial code ends and the rest of the number begins)\n newNumber = newDialCode;\n }\n this.telInput.value = newNumber;\n } else if (this.options.autoInsertDialCode) {\n if (inputVal) {\n // there is an existing value with no dial code: prefix the new dial code\n newNumber = newDialCode + inputVal;\n } else {\n newNumber = newDialCode;\n }\n this.telInput.value = newNumber;\n }\n }\n }, {\n key: "_getDialCode",\n value: function _getDialCode(number, includeAreaCode) {\n var dialCode = "";\n // only interested in international numbers (starting with a plus)\n if (number.charAt(0) === "+") {\n var numericChars = "";\n // iterate over chars\n for (var i = 0; i < number.length; i++) {\n var c = number.charAt(i);\n // if char is number (https://stackoverflow.com/a/8935649/217866)\n if (!isNaN(parseInt(c, 10))) {\n numericChars += c;\n // if current numericChars make a valid dial code\n if (includeAreaCode) {\n if (this.dialCodeToIso2Map[numericChars]) {\n // store the actual raw string (useful for matching later)\n dialCode = number.substr(0, i + 1);\n }\n } else {\n if (this.dialCodes[numericChars]) {\n dialCode = number.substr(0, i + 1);\n // if we\'re just looking for a dial code, we can break as soon as we find one\n break;\n }\n }\n // stop searching as soon as we can - in this case when we hit max len\n if (numericChars.length === this.dialCodeMaxLen) {\n break;\n }\n }\n }\n }\n return dialCode;\n }\n }, {\n key: "_getFullNumber",\n value: function _getFullNumber() {\n var val = this.telInput.value.trim();\n var dialCode = this.selectedCountryData.dialCode;\n var prefix;\n var numericVal = this._getNumeric(val);\n if (this.options.showSelectedDialCode && !this.options.nationalMode && val.charAt(0) !== "+" && dialCode && numericVal) {\n // when using showSelectedDialCode, it is visible so is effectively part of the typed number\n prefix = "+".concat(dialCode);\n } else {\n prefix = "";\n }\n return prefix + val;\n }\n }, {\n key: "_beforeSetNumber",\n value: function _beforeSetNumber(fullNumber) {\n var number = fullNumber;\n if (this.options.showSelectedDialCode) {\n var dialCode = this._getDialCode(number);\n // if there is a valid dial code\n if (dialCode) {\n // in case _getDialCode returned an area code as well\n dialCode = "+".concat(this.selectedCountryData.dialCode);\n // a lot of numbers will have a space separating the dial code and the main number, and\n // some NANP numbers will have a hyphen e.g. +1 684-733-1234 - in both cases we want to get\n // rid of it\n // NOTE: don\'t just trim all non-numerics as may want to preserve an open parenthesis etc\n var start = number[dialCode.length] === " " || number[dialCode.length] === "-" ? dialCode.length + 1 : dialCode.length;\n number = number.substr(start);\n }\n }\n return this._cap(number);\n }\n }, {\n key: "_triggerCountryChange",\n value: function _triggerCountryChange() {\n this._trigger("countrychange");\n }\n }, {\n key: "_formatNumberAsYouType",\n value: function _formatNumberAsYouType() {\n var val = this._getFullNumber();\n var result = window.intlTelInputUtils ? intlTelInputUtils.formatNumberAsYouType(val, this.selectedCountryData.iso2) : val;\n // if showSelectedDialCode and they haven\'t (re)typed the dial code in the input as well, then remove the dial code\n var dialCode = this.selectedCountryData.dialCode;\n if (this.options.showSelectedDialCode && !this.options.nationalMode && this.telInput.value.charAt(0) !== "+" && result.includes("+".concat(dialCode))) {\n var afterDialCode = result.split("+".concat(dialCode))[1] || "";\n return afterDialCode.trim();\n }\n return result;\n }\n }, {\n key: "handleAutoCountry",\n value: function handleAutoCountry() {\n if (this.options.initialCountry === "auto") {\n // we must set this even if there is an initial val in the input: in case the initial val is\n // invalid and they delete it - they should see their auto country\n this.defaultCountry = window.intlTelInputGlobals.autoCountry;\n // if there\'s no initial value in the input, then update the flag\n if (!this.telInput.value) {\n this.setCountry(this.defaultCountry);\n }\n this.resolveAutoCountryPromise();\n }\n }\n }, {\n key: "handleUtils",\n value: function handleUtils() {\n // if the request was successful\n if (window.intlTelInputUtils) {\n // if there\'s an initial value in the input, then format it\n if (this.telInput.value) {\n this._updateV
1alFromNumber(this.telInput.value);\n }\n if (this.selectedCountryData.iso2) {\n this._updatePlaceholder();\n }\n }\n this.resolveUtilsScriptPromise();\n }\n }, {\n key: "destroy",\n value: function destroy() {\n var form = this.telInput.form;\n if (this.options.allowDropdown) {\n // make sure the dropdown is closed (and unbind listeners)\n this._closeDropdown();\n this.selectedFlag.removeEventListener("click", this._handleClickSelectedFlag);\n this.flagsContainer.removeEventListener("keydown", this._handleFlagsContainerKeydown);\n // label click hack\n var label = this.telInput.closest("label");\n if (label) {\n label.removeEventListener("click", this._handleLabelClick);\n }\n }\n // unbind hiddenInput listeners\n if (this.hiddenInput && form) {\n form.removeEventListener("submit", this._handleHiddenInputSubmit);\n }\n // unbind autoInsertDialCode listeners\n if (this.options.autoInsertDialCode) {\n if (form) {\n form.removeEventListener("submit", this._handleSubmitOrBlurEvent);\n }\n this.telInput.removeEventListener("blur", this._handleSubmitOrBlurEvent);\n }\n // unbind key events, and cut/paste events\n this.telInput.removeEventListener("input", this._handleKeyEvent);\n this.telInput.removeEventListener("cut", this._handleClipboardEvent);\n this.telInput.removeEventListener("paste", this._handleClipboardEvent);\n // remove attribute of id instance: data-intl-tel-input-id\n this.telInput.removeAttribute("data-intl-tel-input-id");\n // remove markup (but leave the original input)\n var wrapper = this.telInput.parentNode;\n wrapper.parentNode.insertBefore(this.telInput, wrapper);\n wrapper.parentNode.removeChild(wrapper);\n delete window.intlTelInputGlobals.instances[this.id];\n }\n }, {\n key: "getExtension",\n value: function getExtension() {\n if (window.intlTelInputUtils) {\n return intlTelInputUtils.getExtension(this._getFullNumber(), this.selectedCountryData.iso2);\n }\n return "";\n }\n }, {\n key: "getNumber",\n value: function getNumber(format) {\n if (window.intlTelInputUtils) {\n var iso2 = this.selectedCountryData.iso2;\n return intlTelInputUtils.formatNumber(this._getFullNumber(), iso2, format);\n }\n return "";\n }\n }, {\n key: "getNumberType",\n value: function getNumberType() {\n if (window.intlTelInputUtils) {\n return intlTelInputUtils.getNumberType(this._getFullNumber(), this.selectedCountryData.iso2);\n }\n return -99;\n }\n }, {\n key: "getSelectedCountryData",\n value: function getSelectedCountryData() {\n return this.selectedCountryData;\n }\n }, {\n key: "getValidationError",\n value: function getValidationError() {\n if (window.intlTelInputUtils) {\n var iso2 = this.selectedCountryData.iso2;\n return intlTelInputUtils.getValidationError(this._getFullNumber(), iso2);\n }\n return -99;\n }\n }, {\n key: "isValidNumber",\n value: function isValidNumber(mobileOnly) {\n var val = this._getFullNumber();\n return window.intlTelInputUtils ? intlTelInputUtils.isPossibleNumber(val, this.selectedCountryData.iso2, mobileOnly) : null;\n }\n }, {\n key: "isValidNumberPrecise",\n value: function isValidNumberPrecise() {\n var val = this._getFullNumber();\n return window.intlTelInputUtils ? intlTelInputUtils.isValidNumber(val, this.selectedCountryData.iso2) : null;\n }\n }, {\n key: "setCountry",\n value: function setCountry(iso2) {\n var iso2Lower = iso2.toLowerCase();\n // check if already selected\n if (this.selectedCountryData.iso2 !== iso2Lower) {\n this._setFlag(iso2Lower);\n this._updateDialCode(this.selectedCountryData.dialCode);\n this._triggerCountryChange();\n }\n }\n }, {\n key: "setNumber",\n value: function setNumber(number) {\n // we must update the flag first, which updates this.selectedCountryData, which is used for\n // formatting the number before displaying it\n var flagChanged = this._updateFlagFromNumber(number);
1\n this._updateValFromNumber(number);\n if (flagChanged) {\n this._triggerCountryChange();\n }\n }\n }, {\n key: "setPlaceholderNumberType",\n value: function setPlaceholderNumberType(type) {\n this.options.placeholderNumberType = type;\n this._updatePlaceholder();\n }\n } ]);\n return Iti;\n }();\n /********************\n * STATIC METHODS\n ********************/\n // get the country data object\n intlTelInputGlobals.getCountryData = function() {\n return allCountries;\n };\n // inject a <script> element to load utils.js\n var injectScript = function injectScript(path, handleSuccess, handleFailure) {\n // inject a new script element into the page\n var script = document.createElement("script");\n script.onload = function() {\n forEachInstance("handleUtils");\n if (handleSuccess) {\n handleSuccess();\n }\n };\n script.onerror = function() {\n forEachInstance("rejectUtilsScriptPromise");\n if (handleFailure) {\n handleFailure();\n }\n };\n script.className = "iti-load-utils";\n script.async = true;\n script.src = path;\n document.body.appendChild(script);\n };\n // load the utils script\n intlTelInputGlobals.loadUtils = function(path) {\n // 2 options:\n // 1) not already started loading (start)\n // 2) already started loading (do nothing - just wait for the onload callback to fire, which will\n // trigger handleUtils on all instances, invoking their resolveUtilsScriptPromise functions)\n if (!window.intlTelInputUtils && !window.intlTelInputGlobals.startedLoadingUtilsScript) {\n // only do this once\n window.intlTelInputGlobals.startedLoadingUtilsScript = true;\n // if we have promises, then return a promise\n if (typeof Promise !== "undefined") {\n return new Promise(function(resolve, reject) {\n return injectScript(path, resolve, reject);\n });\n }\n injectScript(path);\n }\n return null;\n };\n // default options\n intlTelInputGlobals.defaults = defaults;\n // version\n intlTelInputGlobals.version = "19.5.7";\n // convenience wrapper\n return function(input, options) {\n var iti = new Iti(input, options);\n iti._init();\n input.setAttribute("data-intl-tel-input-id", iti.id);\n window.intlTelInputGlobals.instances[iti.id] = iti;\n return iti;\n };\n }();\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDM2LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2JvaWxlcnBsYXRlLy4vbm9kZV9tb2R1bGVzL2ludGwtdGVsLWlucHV0L2J1aWxkL2pzL2ludGxUZWxJbnB1dC5qcz9jOGQwIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBJbnRlcm5hdGlvbmFsIFRlbGVwaG9uZSBJbnB1dCB2MTkuNS43XG4gKiBodHRwczovL2dpdGh1Yi5jb20vamFja29jbnIvaW50bC10ZWwtaW5wdXQuZ2l0XG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuXG4vLyB3cmFwIGluIFVNRFxuKGZ1bmN0aW9uKGZhY3RvcnkpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiBtb2R1bGUuZXhwb3J0cykgbW9k
1dWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7IGVsc2Ugd2luZG93LmludGxUZWxJbnB1dCA9IGZhY3RvcnkoKTtcbn0pKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gQXJyYXkgb2YgY291bnRyeSBvYmplY3RzIGZvciB0aGUgZmxhZyBkcm9wZG93bi5cbiAgICAgICAgLy8gSGVyZSBpcyB0aGUgY3JpdGVyaWEgZm9yIHRoZSBwbHVnaW4gdG8gc3VwcG9ydCBhIGdpdmVuIGNvdW50cnkvdGVycml0b3J5XG4gICAgICAgIC8vIC0gSXQgaGFzIGFuIGlzbzIgY29kZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzMxNjYtMV9hbHBoYS0yXG4gICAgICAgIC8vIC0gSXQgaGFzIGl0J3Mgb3duIGNvdW50cnkgY2FsbGluZyBjb2RlIChpdCBpcyBub3QgYSBzdWItcmVnaW9uIG9mIGFub3RoZXIgY291bnRyeSk6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xpc3Rfb2ZfY291bnRyeV9jYWxsaW5nX2NvZGVzXG4gICAgICAgIC8vIC0gSXQgaGFzIGEgZmxhZyBpbiB0aGUgcmVnaW9uLWZsYWdzIHByb2plY3Q6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZWhkYWQvcmVnaW9uLWZsYWdzL3RyZWUvZ2gtcGFnZXMvcG5nXG4gICAgICAgIC8vIC0gSXQgaXMgc3VwcG9ydGVkIGJ5IGxpYnBob25lbnVtYmVyIChpdCBtdXN0IGJlIGxpc3RlZCBvbiB0aGlzIHBhZ2UpOiBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlaTE4bi9saWJwaG9uZW51bWJlci9ibG9iL21hc3Rlci9yZXNvdXJjZXMvU2hvcnROdW1iZXJNZXRhZGF0YS54bWxcbiAgICAgICAgLy8gRWFjaCBjb3VudHJ5IGFycmF5IGhhcyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOlxuICAgICAgICAvLyBbXG4gICAgICAgIC8vICAgIENvdW50cnkgbmFtZSxcbiAgICAgICAgLy8gICAgaXNvMiBjb2RlLFxuICAgICAgICAvLyAgICBJbnRlcm5hdGlvbmFsIGRpYWwgY29kZSxcbiAgICAgICAgLy8gICAgT3JkZXIgKGlmID4xIGNvdW50cnkgd2l0aCBzYW1lIGRpYWwgY29kZSksXG4gICAgICAgIC8vICAgIEFyZWEgY29kZXNcbiAgICAgICAgLy8gXVxuICAgICAgICB2Y
1XIgYWxsQ291bnRyaWVzID0gWyBbIFwiQWZnaGFuaXN0YW5cIiwgXCJhZlwiLCBcIjkzXCIgXSwgWyBcIkFsYmFuaWFcIiwgXCJhbFwiLCBcIjM1NVwiIF0sIFsgXCJBbGdlcmlhXCIsIFwiZHpcIiwgXCIyMTNcIiBdLCBbIFwiQW1lcmljYW4gU2Ftb2FcIiwgXCJhc1wiLCBcIjFcIiwgNSwgWyBcIjY4NFwiIF0gXSwgWyBcIkFuZG9ycmFcIiwgXCJhZFwiLCBcIjM3NlwiIF0sIFsgXCJBbmdvbGFcIiwgXCJhb1wiLCBcIjI0NFwiIF0sIFsgXCJBbmd1aWxsYVwiLCBcImFpXCIsIFwiMVwiLCA2LCBbIFwiMjY0XCIgXSBdLCBbIFwiQW50aWd1YSAmIEJhcmJ1ZGFcIiwgXCJhZ1wiLCBcIjFcIiwgNywgWyBcIjI2OFwiIF0gXSwgWyBcIkFyZ2VudGluYVwiLCBcImFyXCIsIFwiNTRcIiBdLCBbIFwiQXJtZW5pYVwiLCBcImFtXCIsIFwiMzc0XCIgXSwgWyBcIkFydWJhXCIsIFwiYXdcIiwgXCIyOTdcIiBdLCBbIFwiQXNjZW5zaW9uIElzbGFuZFwiLCBcImFjXCIsIFwiMjQ3XCIgXSwgWyBcIkF1c3RyYWxpYVwiLCBcImF1XCIsIFwiNjFcIiwgMCBdLCBbIFwiQXVzdHJpYVwiLCBcImF0XCIsIFwiNDNcIiBdLCBbIFwiQXplcmJhaWphblwiLCBcImF6XCIsIFwiOTk0XCIgXSwgWyBcIkJhaGFtYXNcIiwgXCJic1wiLCBcIjFcIiwgOCwgWyBcIjI0MlwiIF0gXSwgWyBcIkJhaHJhaW5cIiwgXCJiaFwiLCBcIjk3M1wiIF0sIFsgXCJCYW5nbGFkZXNoXCIsIFwiYmRcIiwgXCI4ODBcIiBdLCBbIFwiQmFyYmFkb3NcIiwgXCJiYlwiLCBcIjFcIiwgOSwgWyBcIjI0NlwiIF0gXSwgWyBcIkJlbGFydXNcIiwgXCJieVwiLCBcIjM3NVwiIF0sIFsgXCJCZWxnaXVtXCIsIFwiYmVcIiwgXCIzMlwiIF0sIFsgXCJCZWxpemVcIiwgXCJielwiLCBcIjUwMVwiIF0sIFsgXCJCZW5pblwiLCBcImJqXCIsIFwiMjI5XCIgXSwgWyBcIkJlcm11ZGFcIiwgXCJibVwiLCBcIjFcIiwgMTAsIFsgXCI0NDFcIiBdIF0sIFsgXCJCaHV0YW5cIiwgXCJidFwiLCBcIjk3NVwiIF0sIFsgXCJCb2xpdmlhXCIsIFwiYm9cIiwgXCI1OTFcIiBdLCBbIFwiQm9zbmlhICYgSGVyemVnb3ZpbmFcIiwgXCJiYVwiLCBcIjM4N1wiIF0sIFsgXCJCb3Rzd2FuYVwiLCBcImJ3XCIsIFwiMjY3XCIgXSwgWyBcIkJyYXppbFwiLCBcImJyXCIsIFwiNTVcIiBdLCBbIFwiQnJpdGlzaCBJbmRpYW4gT2NlYW4gVGVycml0b3J5XCIsIFwiaW9cIiwgXCIyNDZcIiBdLCBbIFwiQnJpdGlzaCBWaXJnaW4gSXNsYW5kc1wiLCBcInZnXCIsIFwiMVwiLCAxMSwgWyBcIjI4NFwiIF0gXSwgWyBcIkJydW5laVwiLCBcImJuXCIsIFwiNjczXCIgXSwgWyBcIkJ1bGdhcmlhXCIsIFwiYmdcIiwgXCIzNTlcIiBdLCBbIFwiQnVya2luYSBGYXNvXCIsIFwiYmZcIiwgXCIyMjZcIiBdLCBbIFwiQnVydW5kaVwiLCBcImJpXCIsIFwiMjU3XCIgXSwgWyBcIkNhbWJvZGlhXCIsIFwia2hcIiwgXCI4NTVcIiBdLCBbIFwiQ2FtZXJvb25cIiwgXCJjbVwiLCBcIjIzN1wiIF0sIFsgXCJDYW5hZGFcIiwgXCJjYVwiLCBcIjFcIiwgMSwgWyBcIjIwNFwiLCBcIjIyNlwiLCBcIjIzNlwiLCBcIjI0OVwiLCBcIjI1MFwiLCBcIjI2M1wiLCBcIjI4OVwiLCBcIjMwNlwiLCBcIjM0M1wiLCBcIjM1NFwiLCBcIjM2NVwiLCBcIjM2N1wiLCBcIjM2OFwiLCBcIjM4MlwiLCBcIjM4N1wiLCBcIjQwM1wiLCBcIjQxNlwiLCBcIjQxOFwiLCBcIjQyOFwiLCBcIjQzMVwiLCBcIjQzN1wiLCBcIjQzOFwiLCBcIjQ1MFwiLCBcIjU4NFwiLCBcIjQ2OFwiLCBcIjQ3NFwiLCBcIjUwNlwiLCBcIjUxNFwiLCBcIjUxOVwiLCBcIjU0OFwiLCBcIjU3OVwiLCBcIjU4MVwiLCBcIjU4NFwiLCBcIjU4N1wiLCBcIjYwNFwiLCBcIjYxM1wiLCBcIjYzOVwiLCBcIjY0N1wiLCBcIjY3MlwiLCBcIjY4M1wiLCBcIjcwNVwiLCBcIjcwOVwiLCBcIjc0MlwiLCBcIjc1M1wiLCBcIjc3OFwiLCBcIjc4MFwiLCBcIjc4MlwiLCBcIjgwN1wiLCBcIjgxOVwiLCBcIjgyNVwiLCBcIjg2N1wiLCBcIjg3M1wiLCBcIjkwMlwiLCBcIjkwNVwiIF0gXSwgWyBcIkNhcGUgVmVyZGVcIiwgXCJjdlwiLCBcIjIzOFwiIF0sIFsgXCJDYXJpYmJlYW4gTmV0aGVybGFuZHNcIiwgXCJicVwiLCBcIjU5OVwiLCAxLCBbIFwiM1wiLCBcIjRcIiwgXCI3XCIgXSBdLCBbIFwiQ2F5bWFuIElzbGFuZHNcIiwgXCJreVwiLCBcIjFcIiwgMTIsIFsgXCIzNDVcIiBdIF0sIFsgXCJDZW50cmFsIEFmcmljYW4gUmVwdWJsaWNcIiwgXCJjZlwiLCBcIjIzNlwiIF0sIFsgXCJDaGFkXCIsIFwidGRcIiwgXCIyMzVcIiBdLCBbIFwiQ2hpbGVcIiwgXCJjbFwiLCBcIjU2XCIgXSwgWyBcIkNoaW5hXCIsIFwiY25cIiwgXCI4NlwiIF0sIFsgXCJDaHJpc3RtYXMgSXNsYW5kXCIsIFwiY3hcIiwgXCI2MVwiLCAyLCBbIFwiODkxNjRcIiBdIF0sIFsgXCJDb2NvcyAoS2VlbGluZykgSXNsYW5kc1wiLCBcImNjXCIsIFwiNjFcIiwgMSwgWyBcIjg5MTYyXCIgXSBdLCBbIFwiQ29sb21iaWFcIiwgXCJjb1wiLCBcIjU3XCIgXSwgWyBcIkNvbW9yb3NcIiwgXCJrbVwiLCBcIjI2OVwiIF0sIFsgXCJDb25nbyAtIEJyYXp6YXZpbGxlXCIsIFwiY2dcIiwgXCIyNDJcIiBdLCBbIFwiQ29uZ28gLSBLaW5zaGFzYVwiLCBcImNkXCIsIFwiMjQzXCIgXSwgWyBcIkNvb2sgSXNsYW5kc1wiLCBcImNrXCIsIFwiNjgyXCIgXSwgWyBcIkNvc3RhIFJpY2FcIiwgXCJjclwiLCBcIjUwNlwiIF0sIFsgXCJDw7R0ZSBk4oCZSXZvaXJlXCIsIFwiY2lcIiwgXCIyMjVcIiBdLCBbIFwiQ3JvYXRpYVwiLCBcImhyXCIsIFwiMzg1XCIgXSwgWyBcIkN1YmFcIiwgXCJjdVwiLCBcIjUzXCIgXSwgWyBcIkN1cmHDp2FvXCIsIFwiY3dcIiwgXCI1OTlcIiwgMCBdLCBbIFwiQ3lwcnVzXCIsIFwiY3lcIiwgXCIzNTdcIiBdLCBbIFwiQ3plY2ggUmVwdWJsaWNcIiwgXCJjelwiLCBcIjQyMFwiIF0sIFsgXCJEZW5tYXJrXCIsIFwiZGtcIiwgXCI0NVwiIF0sIFsgXCJEamlib3V0aVwiLCBcImRqXCIsIFwiMjUzXCIgXSwgWyBcIkRvbWluaWNhXCIsIFwiZG1cIiwgXCIxXCIsIDEzLCBbIFwiNzY3XCIgXSBdLCBbIFwiRG9taW5pY2FuIFJlcHVibGljXCIsIFwiZG9cIiwgXCIxXCIsIDIsIFsgXCI4MDlcIiwgXCI4MjlcIiwgXCI4NDlcIiBdIF0sIFsgXCJFY3VhZG9yXCIsIFwiZWNcIiwgXCI1OTNcIiBdLCBbIFwiRWd5cHRcIiwgXCJlZ1wiLCBcIjIwXCIgXSwgWyBcIkVsIFNhbHZhZG9yXCIsIFwic3ZcIiwgXCI1MDNcIiBdLCBbIFwiRXF1YXRvcmlhbCBHdWluZWFcIiwgXCJncVwiLCBcIjI0MFwiIF0sIFsgXCJFcml0cmVhXCIsIFwiZXJcIiwgXCIyOTFcIiBdLCBbIFwiRXN0b25pYVwiLCBcImVlXCIsIFwiMzcyXCIgXSwgWyBcIkVzd2F0aW5pXCIsIFwic3pcIiwgXCIyNjhcIiBdLCBbIFwiRXRoaW9waWFcIiwgXCJldFwiLCBcIjI1MVwiIF0sIFsgXCJGYWxrbGFuZCBJc2xhbmRzXCIsIFwiZmtcIiwgXCI1MDBcIiBdLCBbIFwiRmFyb2UgSXNsYW5kc1wiLCBcImZvXCIsIFwiMjk4XCIgXSwgWyBcIkZpamlcIiwgXCJmalwiLCBcIjY3OVwiIF0sIFsgXCJGaW5sYW5kXCIsIFwiZmlcIiwgXCIzNThcIiwgMCBdLCBbIFwiRnJhbmNlXCIsIFwiZnJcIiwgXCIzM1wiIF0sIFsgXCJGcmVuY2ggR3VpYW5hXCIsIFwiZ2ZcIiwgXCI1OTRcIiBdLCBbIFwiRnJlbmNoIFBvbHluZXNpYVwiLCBcInBmXCIsIFwiNjg5XCIgXSwgWyBcIkdhYm9uXCIsIFwiZ2FcIiwgXCIyNDFcIiBdLCBbIFwiR2FtYmlhXCIsIFwiZ21cIiwgXCIyMjBcIiBdLCBbIFwiR2VvcmdpYVwiLCBcImdlXCIsIFwiOTk1XCIgXSwgWyBcIkdlcm1hbnlcIiwgXCJkZVwiLCBcIjQ5XCIgXSwgWyBcIkdoYW5hXCIsIFwiZ2hcIiwgXCIyMzNcIiBdLCBbIFwiR2licmFsdGFyXCIsIFwiZ2lcIiwgXCIzNTBcIiBdLCBbIFwiR3JlZWNlXCIsIFwiZ3JcIiwgXCIzMFwiIF0sIFsgXCJHcmVlbmxhbmRcIiwgXCJnbFwiLCBcIjI5OVwiIF0sIFsgXCJHcmVuYWRhXCIsIFwiZ2RcIiwgXCIxXCIsIDE0LCBbIFwiNDczXCIgXSBdLCBbIFwiR3VhZGVsb3VwZVwiLCBcImdwXCIsIFwiNTkwXCIsIDAgXSwgWyBcIkd1YW1cIiwgXCJndVwiLCBcIjFcIiwgMTUsIFsgXCI2NzFcIiBdIF0sIFsgXCJHdWF0ZW1hbGFcIiwgXCJndFwiLCBcIjUwMlwiIF0sIFsgXCJHdWVybnNleVwiLCBcImdnXCIsIFwiNDRcIiwgMSwgWyBcIjE0ODFcIiwgXCI3NzgxXCIsIFwiNzgzOVwiLCBcIjc5MTFcIiBdIF0sIFsgXCJHdWluZWFcIiwgXCJnblwiLCBcIjIyNFwiIF0sIFsgXCJHdWluZWEtQmlzc2F1XCIsIFwiZ3dcIiwgXCIyNDVcIiBdLCBbIFwiR3V5YW5hXCIsIFwiZ3lcIiwgXCI1OTJcIiBdLCBbIFwiSGFpdGlcIiwgXCJodFwiLCBcIjUwOVwiIF0sIFsgXCJIb25kdXJhc1wiLCBcImhuXCIsIFwiNTA0XCIgXSwgWyBcIkhvbmcgS29uZ1wiLCBcImhrXCIsIFwiODUyXCIgXSwgWyBcIkh1bmdhcnlc
1IiwgXCJodVwiLCBcIjM2XCIgXSwgWyBcIkljZWxhbmRcIiwgXCJpc1wiLCBcIjM1NFwiIF0sIFsgXCJJbmRpYVwiLCBcImluXCIsIFwiOTFcIiBdLCBbIFwiSW5kb25lc2lhXCIsIFwiaWRcIiwgXCI2MlwiIF0sIFsgXCJJcmFuXCIsIFwiaXJcIiwgXCI5OFwiIF0sIFsgXCJJcmFxXCIsIFwiaXFcIiwgXCI5NjRcIiBdLCBbIFwiSXJlbGFuZFwiLCBcImllXCIsIFwiMzUzXCIgXSwgWyBcIklzbGUgb2YgTWFuXCIsIFwiaW1cIiwgXCI0NFwiLCAyLCBbIFwiMTYyNFwiLCBcIjc0NTc2XCIsIFwiNzUyNFwiLCBcIjc5MjRcIiwgXCI3NjI0XCIgXSBdLCBbIFwiSXNyYWVsXCIsIFwiaWxcIiwgXCI5NzJcIiBdLCBbIFwiSXRhbHlcIiwgXCJpdFwiLCBcIjM5XCIsIDAgXSwgWyBcIkphbWFpY2FcIiwgXCJqbVwiLCBcIjFcIiwgNCwgWyBcIjg3NlwiLCBcIjY1OFwiIF0gXSwgWyBcIkphcGFuXCIsIFwianBcIiwgXCI4MVwiIF0sIFsgXCJKZXJzZXlcIiwgXCJqZVwiLCBcIjQ0XCIsIDMsIFsgXCIxNTM0XCIsIFwiNzUwOVwiLCBcIjc3MDBcIiwgXCI3Nzk3XCIsIFwiNzgyOVwiLCBcIjc5MzdcIiBdIF0sIFsgXCJKb3JkYW5cIiwgXCJqb1wiLCBcIjk2MlwiIF0sIFsgXCJLYXpha2hzdGFuXCIsIFwia3pcIiwgXCI3XCIsIDEsIFsgXCIzM1wiLCBcIjdcIiBdIF0sIFsgXCJLZW55YVwiLCBcImtlXCIsIFwiMjU0XCIgXSwgWyBcIktpcmliYXRpXCIsIFwia2lcIiwgXCI2ODZcIiBdLCBbIFwiS29zb3ZvXCIsIFwieGtcIiwgXCIzODNcIiBdLCBbIFwiS3V3YWl0XCIsIFwia3dcIiwgXCI5NjVcIiBdLCBbIFwiS3lyZ3l6c3RhblwiLCBcImtnXCIsIFwiOTk2XCIgXSwgWyBcIkxhb3NcIiwgXCJsYVwiLCBcIjg1NlwiIF0sIFsgXCJMYXR2aWFcIiwgXCJsdlwiLCBcIjM3MVwiIF0sIFsgXCJMZWJhbm9uXCIsIFwibGJcIiwgXCI5NjFcIiBdLCBbIFwiTGVzb3Rob1wiLCBcImxzXCIsIFwiMjY2XCIgXSwgWyBcIkxpYmVyaWFcIiwgXCJsclwiLCBcIjIzMVwiIF0sIFsgXCJMaWJ5YVwiLCBcImx5XCIsIFwiMjE4XCIgXSwgWyBcIkxpZWNodGVuc3RlaW5cIiwgXCJsaVwiLCBcIjQyM1wiIF0sIFsgXCJMaXRodWFuaWFcIiwgXCJsdFwiLCBcIjM3MFwiIF0sIFsgXCJMdXhlbWJvdXJnXCIsIFwibHVcIiwgXCIzNTJcIiBdLCBbIFwiTWFjYXVcIiwgXCJtb1wiLCBcIjg1M1wiIF0sIFsgXCJNYWRhZ2FzY2FyXCIsIFwibWdcIiwgXCIyNjFcIiBdLCBbIFwiTWFsYXdpXCIsIFwibXdcIiwgXCIyNjVcIiBdLCBbIFwiTWFsYXlzaWFcIiwgXCJteVwiLCBcIjYwXCIgXSwgWyBcIk1hbGRpdmVzXCIsIFwibXZcIiwgXCI5NjBcIiBdLCBbIFwiTWFsaVwiLCBcIm1sXCIsIFwiMjIzXCIgXSwgWyBcIk1hbHRhXCIsIFwibXRcIiwgXCIzNTZcIiBdLCBbIFwiTWFyc2hhbGwgSXNsYW5kc1wiLCBcIm1oXCIsIFwiNjkyXCIgXSwgWyBcIk1hcnRpbmlxdWVcIiwgXCJtcVwiLCBcIjU5NlwiIF0sIFsgXCJNYXVyaXRhbmlhXCIsIFwibXJcIiwgXCIyMjJcIiBdLCBbIFwiTWF1cml0aXVzXCIsIFwibXVcIiwgXCIyMzBcIiBdLCBbIFwiTWF5b3R0ZVwiLCBcInl0XCIsIFwiMjYyXCIsIDEsIFsgXCIyNjlcIiwgXCI2MzlcIiBdIF0sIFsgXCJNZXhpY29cIiwgXCJteFwiLCBcIjUyXCIgXSwgWyBcIk1pY3JvbmVzaWFcIiwgXCJmbVwiLCBcIjY5MVwiIF0sIFsgXCJNb2xkb3ZhXCIsIFwibWRcIiwgXCIzNzNcIiBdLCBbIFwiTW9uYWNvXCIsIFwibWNcIiwgXCIzNzdcIiBdLCBbIFwiTW9uZ29saWFcIiwgXCJtblwiLCBcIjk3NlwiIF0sIFsgXCJNb250ZW5lZ3JvXCIsIFwibWVcIiwgXCIzODJcIiBdLCBbIFwiTW9udHNlcnJhdFwiLCBcIm1zXCIsIFwiMVwiLCAxNiwgWyBcIjY2NFwiIF0gXSwgWyBcIk1vcm9jY29cIiwgXCJtYVwiLCBcIjIxMlwiLCAwIF0sIFsgXCJNb3phbWJpcXVlXCIsIFwibXpcIiwgXCIyNThcIiBdLCBbIFwiTXlhbm1hciAoQnVybWEpXCIsIFwibW1cIiwgXCI5NVwiIF0sIFsgXCJOYW1pYmlhXCIsIFwibmFcIiwgXCIyNjRcIiBdLCBbIFwiTmF1cnVcIiwgXCJuclwiLCBcIjY3NFwiIF0sIFsgXCJOZXBhbFwiLCBcIm5wXCIsIFwiOTc3XCIgXSwgWyBcIk5ldGhlcmxhbmRzXCIsIFwibmxcIiwgXCIzMVwiIF0sIFsgXCJOZXcgQ2FsZWRvbmlhXCIsIFwibmNcIiwgXCI2ODdcIiBdLCBbIFwiTmV3IFplYWxhbmRcIiwgXCJuelwiLCBcIjY0XCIgXSwgWyBcIk5pY2FyYWd1YVwiLCBcIm5pXCIsIFwiNTA1XCIgXSwgWyBcIk5pZ2VyXCIsIFwibmVcIiwgXCIyMjdcIiBdLCBbIFwiTmlnZXJpYVwiLCBcIm5nXCIsIFwiMjM0XCIgXSwgWyBcIk5pdWVcIiwgXCJudVwiLCBcIjY4M1wiIF0sIFsgXCJOb3Jmb2xrIElzbGFuZFwiLCBcIm5mXCIsIFwiNjcyXCIgXSwgWyBcIk5vcnRoIEtvcmVhXCIsIFwia3BcIiwgXCI4NTBcIiBdLCBbIFwiTm9ydGggTWFjZWRvbmlhXCIsIFwibWtcIiwgXCIzODlcIiBdLCBbIFwiTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzXCIsIFwibXBcIiwgXCIxXCIsIDE3LCBbIFwiNjcwXCIgXSBdLCBbIFwiTm9yd2F5XCIsIFwibm9cIiwgXCI0N1wiLCAwIF0sIFsgXCJPbWFuXCIsIFwib21cIiwgXCI5NjhcIiBdLCBbIFwiUGFraXN0YW5cIiwgXCJwa1wiLCBcIjkyXCIgXSwgWyBcIlBhbGF1XCIsIFwicHdcIiwgXCI2ODBcIiBdLCBbIFwiUGFsZXN0aW5lXCIsIFwicHNcIiwgXCI5NzBcIiBdLCBbIFwiUGFuYW1hXCIsIFwicGFcIiwgXCI1MDdcIiBdLCBbIFwiUGFwdWEgTmV3IEd1aW5lYVwiLCBcInBnXCIsIFwiNjc1XCIgXSwgWyBcIlBhcmFndWF5XCIsIFwicHlcIiwgXCI1OTVcIiBdLCBbIFwiUGVydVwiLCBcInBlXCIsIFwiNTFcIiBdLCBbIFwiUGhpbGlwcGluZXNcIiwgXCJwaFwiLCBcIjYzXCIgXSwgWyBcIlBvbGFuZFwiLCBcInBsXCIsIFwiNDhcIiBdLCBbIFwiUG9ydHVnYWxcIiwgXCJwdFwiLCBcIjM1MVwiIF0sIFsgXCJQdWVydG8gUmljb1wiLCBcInByXCIsIFwiMVwiLCAzLCBbIFwiNzg3XCIsIFwiOTM5XCIgXSBdLCBbIFwiUWF0YXJcIiwgXCJxYVwiLCBcIjk3NFwiIF0sIFsgXCJSw6l1bmlvblwiLCBcInJlXCIsIFwiMjYyXCIsIDAgXSwgWyBcIlJvbWFuaWFcIiwgXCJyb1wiLCBcIjQwXCIgXSwgWyBcIlJ1c3NpYVwiLCBcInJ1XCIsIFwiN1wiLCAwIF0sIFsgXCJSd2FuZGFcIiwgXCJyd1wiLCBcIjI1MFwiIF0sIFsgXCJTYW1vYVwiLCBcIndzXCIsIFwiNjg1XCIgXSwgWyBcIlNhbiBNYXJpbm9cIiwgXCJzbVwiLCBcIjM3OFwiIF0sIFsgXCJTw6NvIFRvbcOpICYgUHLDrW5jaXBlXCIsIFwic3RcIiwgXCIyMzlcIiBdLCBbIFwiU2F1ZGkgQXJhYmlhXCIsIFwic2FcIiwgXCI5NjZcIiBdLCBbIFwiU2VuZWdhbFwiLCBcInNuXCIsIFwiMjI
1xXCIgXSwgWyBcIlNlcmJpYVwiLCBcInJzXCIsIFwiMzgxXCIgXSwgWyBcIlNleWNoZWxsZXNcIiwgXCJzY1wiLCBcIjI0OFwiIF0sIFsgXCJTaWVycmEgTGVvbmVcIiwgXCJzbFwiLCBcIjIzMlwiIF0sIFsgXCJTaW5nYXBvcmVcIiwgXCJzZ1wiLCBcIjY1XCIgXSwgWyBcIlNpbnQgTWFhcnRlblwiLCBcInN4XCIsIFwiMVwiLCAyMSwgWyBcIjcyMVwiIF0gXSwgWyBcIlNsb3Zha2lhXCIsIFwic2tcIiwgXCI0MjFcIiBdLCBbIFwiU2xvdmVuaWFcIiwgXCJzaVwiLCBcIjM4NlwiIF0sIFsgXCJTb2xvbW9uIElzbGFuZHNcIiwgXCJzYlwiLCBcIjY3N1wiIF0sIFsgXCJTb21hbGlhXCIsIFwic29cIiwgXCIyNTJcIiBdLCBbIFwiU291dGggQWZyaWNhXCIsIFwiemFcIiwgXCIyN1wiIF0sIFsgXCJTb3V0aCBLb3JlYVwiLCBcImtyXCIsIFwiODJcIiBdLCBbIFwiU291dGggU3VkYW5cIiwgXCJzc1wiLCBcIjIxMVwiIF0sIFsgXCJTcGFpblwiLCBcImVzXCIsIFwiMzRcIiBdLCBbIFwiU3JpIExhbmthXCIsIFwibGtcIiwgXCI5NFwiIF0sIFsgXCJTdCBCYXJ0aMOpbGVteVwiLCBcImJsXCIsIFwiNTkwXCIsIDEgXSwgWyBcIlN0IEhlbGVuYVwiLCBcInNoXCIsIFwiMjkwXCIgXSwgWyBcIlN0IEtpdHRzICYgTmV2aXNcIiwgXCJrblwiLCBcIjFcIiwgMTgsIFsgXCI4NjlcIiBdIF0sIFsgXCJTdCBMdWNpYVwiLCBcImxjXCIsIFwiMVwiLCAxOSwgWyBcIjc1OFwiIF0gXSwgWyBcIlN0IE1hcnRpblwiLCBcIm1mXCIsIFwiNTkwXCIsIDIgXSwgWyBcIlN0IFBpZXJyZSAmIE1pcXVlbG9uXCIsIFwicG1cIiwgXCI1MDhcIiBdLCBbIFwiU3QgVmluY2VudCAmIEdyZW5hZGluZXNcIiwgXCJ2Y1wiLCBcIjFcIiwgMjAsIFsgXCI3ODRcIiBdIF0sIFsgXCJTdWRhblwiLCBcInNkXCIsIFwiMjQ5XCIgXSwgWyBcIlN1cmluYW1lXCIsIFwic3JcIiwgXCI1OTdcIiBdLCBbIFwiU3ZhbGJhcmQgJiBKYW4gTWF5ZW5cIiwgXCJzalwiLCBcIjQ3XCIsIDEsIFsgXCI3OVwiIF0gXSwgWyBcIlN3ZWRlblwiLCBcInNlXCIsIFwiNDZcIiBdLCBbIFwiU3dpdHplcmxhbmRcIiwgXCJjaFwiLCBcIjQxXCIgXSwgWyBcIlN5cmlhXCIsIFwic3lcIiwgXCI5NjNcIiBdLCBbIFwiVGFpd2FuXCIsIFwidHdcIiwgXCI4ODZcIiBdLCBbIFwiVGFqaWtpc3RhblwiLCBcInRqXCIsIFwiOTkyXCIgXSwgWyBcIlRhbnphbmlhXCIsIFwidHpcIiwgXCIyNTVcIiBdLCBbIFwiVGhhaWxhbmRcIiwgXCJ0aFwiLCBcIjY2XCIgXSwgWyBcIlRpbW9yLUxlc3RlXCIsIFwidGxcIiwgXCI2NzBcIiBdLCBbIFwiVG9nb1wiLCBcInRnXCIsIFwiMjI4XCIgXSwgWyBcIlRva2VsYXVcIiwgXCJ0a1wiLCBcIjY5MFwiIF0sIFsgXCJUb25nYVwiLCBcInRvXCIsIFwiNjc2XCIgXSwgWyBcIlRyaW5pZGFkICYgVG9iYWdvXCIsIFwidHRcIiwgXCIxXCIsIDIyLCBbIFwiODY4XCIgXSBdLCBbIFwiVHVuaXNpYVwiLCBcInRuXCIsIFwiMjE2XCIgXSwgWyBcIlR1cmtleVwiLCBcInRyXCIsIFwiOTBcIiBdLCBbIFwiVHVya21lbmlzdGFuXCIsIFwidG1cIiwgXCI5OTNcIiBdLCBbIFwiVHVya3MgJiBDYWljb3MgSXNsYW5kc1wiLCBcInRjXCIsIFwiMVwiLCAyMywgWyBcIjY0OVwiIF0gXSwgWyBcIlR1dmFsdVwiLCBcInR2XCIsIFwiNjg4XCIgXSwgWyBcIlVnYW5kYVwiLCBcInVnXCIsIFwiMjU2XCIgXSwgWyBcIlVrcmFpbmVcIiwgXCJ1YVwiLCBcIjM4MFwiIF0sIFsgXCJVbml0ZWQgQXJhYiBFbWlyYXRlc1wiLCBcImFlXCIsIFwiOTcxXCIgXSwgWyBcIlVuaXRlZCBLaW5nZG9tXCIsIFwiZ2JcIiwgXCI0NFwiLCAwIF0sIFsgXCJVbml0ZWQgU3RhdGVzXCIsIFwidXNcIiwgXCIxXCIsIDAgXSwgWyBcIlVydWd1YXlcIiwgXCJ1eVwiLCBcIjU5OFwiIF0sIFsgXCJVUyBWaXJnaW4gSXNsYW5kc1wiLCBcInZpXCIsIFwiMVwiLCAyNCwgWyBcIjM0MFwiIF0gXSwgWyBcIlV6YmVraXN0YW5cIiwgXCJ1elwiLCBcIjk5OFwiIF0sIFsgXCJWYW51YXR1XCIsIFwidnVcIiwgXCI2NzhcIiBdLCBbIFwiVmF0aWNhbiBDaXR5XCIsIFwidmFcIiwgXCIzOVwiLCAxLCBbIFwiMDY2OThcIiBdIF0sIFsgXCJWZW5lenVlbGFcIiwgXCJ2ZVwiLCBcIjU4XCIgXSwgWyBcIlZpZXRuYW1cIiwgXCJ2blwiLCBcIjg0XCIgXSwgWyBcIldhbGxpcyAmIEZ1dHVuYVwiLCBcIndmXCIsIFwiNjgxXCIgXSwgWyBcIldlc3Rlcm4gU2FoYXJhXCIsIFwiZWhcIiwgXCIyMTJcIiwgMSwgWyBcIjUyODhcIiwgXCI1Mjg5XCIgXSBdLCBbIFwiWWVtZW5cIiwgXCJ5ZVwiLCBcIjk2N1wiIF0sIFsgXCJaYW1iaWFcIiwgXCJ6bVwiLCBcIjI2MFwiIF0sIFsgXCJaaW1iYWJ3ZVwiLCBcInp3XCIsIFwiMjYzXCIgXSwgWyBcIsOFbGFuZCBJc2xhbmRzXCIsIFwiYXhcIiwgXCIzNThcIiwgMSwgWyBcIjE4XCIgXSBdIF07XG4gICAgICAgIC8vIGxvb3Agb3ZlciBhbGwgb2YgdGhlIGNvdW50cmllcyBhYm92ZSwgcmVzdHJ1Y3R1cmluZyB0aGUgZGF0YSB0byBiZSBvYmplY3RzIHdpdGggbmFtZWQga2V5c1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbENvdW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGMgPSBhbGxDb3VudHJpZXNbaV07XG4gICAgICAgICAgICBhbGxDb3VudHJpZXNbaV0gPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogY1swXSxcbiAgICAgICAgICAgICAgICBpc28yOiBjWzFdLFxuICAgICAgICAgICAgICAgIGRpYWxDb2RlOiBjWzJdLFxuICAgICAgICAgICAgICAgIHByaW9yaXR5OiBjWzNdIHx8IDAsXG4gICAgICAgICAgICAgICAgYXJlYUNvZGVzOiBjWzRdIHx8IG51bGwsXG4gICAgICAgICAgICAgICAgbm9kZUJ5SWQ6IHt9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICBmdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2Y
1XIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBPYmplY3QoYXJndW1lbnRzW2ldKSA6IHt9O1xuICAgICAgICAgICAgICAgIHZhciBvd25LZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBvd25LZXlzLnB1c2guYXBwbHkob3duS2V5cywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpLmZpbHRlcihmdW5jdGlvbihzeW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwgc3ltKS5lbnVtZXJhYmxlO1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG93bktleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG9iaikge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gICAgICAgICAgICByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgICAgICAgICAgIGlmICghbykgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgICAgICAgICAgIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgICAgICAgICAgIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAgICAgICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgICAgICAgICAgIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICAgICAgICAgICAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBhcnIyW2ldID0gYXJyW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFycjI7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkge1xuICAgICAgICAgICAgdmFyIF9pID0gbnVsbCA9PSBhcnIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07XG4gICAgICAgICAgICBpZiAobnVsbCAhPSBfaSkge1xuICAgICAgICAgICAgICAgIHZhciBfcywgX2UsIF94LCBfciwgX2FyciA9IFtdLCBfbiA9ICEwLCBfZCA9ICExO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfeCA9IChfaSA9IF9pLmNhbGwoYXJyKSkubmV4dCwgMCA9PT0gaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdChfaSkgIT09IF9pKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBfbiA9ICExO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgZm9yICg7IShfbiA9IChfcyA9IF94LmNhbGwoX2kpKS5kb25lKSAmJiAoX2Fyci5wdXNoKF9zLnZhbHVlKSwgX2Fyci5sZW5ndGggIT09IGkpOyBfbiA9ICEwKSB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgX2QgPSAhMCwgX2UgPSBlcnI7XG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX24gJiYgbnVsbCAhPSBfaS5yZXR1cm4gJiYgKF9yID0gX2kucmV0dXJuKCksIE9iamVjdChfcikgIT09IF9yKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgI
1H1cbiAgICAgICAgICAgICAgICByZXR1cm4gX2FycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgX3RvUHJvcGVydHlLZXkoZGVzY3JpcHRvci
15rZXkpLCBkZXNjcmlwdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgICAgICAgICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICAgICAgICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwge1xuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gX3RvUHJpbWl0aXZlKGFyZywgXCJzdHJpbmdcIik7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGtleSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF90b1ByaW1pdGl2ZShpbnB1dCwgaGludCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0O1xuICAgICAgICAgICAgdmFyIHByaW0gPSBpbnB1dFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICAgICAgICAgICAgaWYgKHByaW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZhciByZXMgPSBwcmltLmNhbGwoaW5wdXQsIGhpbnQgfHwgXCJkZWZhdWx0XCIpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoaGludCA9PT0gXCJzdHJpbmdcIiA/IFN0cmluZyA6IE51bWJlcikoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpbnRsVGVsSW5wdXRHbG9iYWxzID0ge1xuICAgICAgICAgICAgZ2V0SW5zdGFuY2U6IGZ1bmN0aW9uIGdldEluc3RhbmNlKGlucHV0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGlkID0gaW5wdXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1pbnRsLXRlbC1pbnB1dC1pZFwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LmludGxUZWxJbnB1dEdsb2JhbHMuaW5zdGFuY2VzW2lkXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbnN0YW5jZXM6IHt9LFxuICAgICAgICAgICAgLy8gdXNpbmcgYSBnbG9iYWwgbGlrZSB0aGlzIGFsbG93cyB1cyB0byBtb2NrIGl0IGluIHRoZSB0ZXN0c1xuICAgICAgICAgICAgZG9jdW1lbnRSZWFkeTogZnVuY3Rpb24gZG9jdW1lbnRSZWFkeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgd2luZG93LmludGxUZWxJbnB1dEdsb2JhbHMgPSBpbnRsVGVsSW5wdXRHbG9iYWxzO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRoZXNlIHZhcnMgcGVyc2lzdCB0aHJvdWdoIGFsbCBpbnN0YW5jZXMgb2YgdGhlIHBsdWdpblxuICAgICAgICB2Y
1XIgaWQgPSAwO1xuICAgICAgICB2YXIgZGVmYXVsdHMgPSB7XG4gICAgICAgICAgICAvLyB3aGV0aGVyIG9yIG5vdCB0byBhbGxvdyB0aGUgZHJvcGRvd25cbiAgICAgICAgICAgIGFsbG93RHJvcGRvd246IHRydWUsXG4gICAgICAgICAgICAvLyBhdXRvIGluc2VydCBkaWFsIGNvZGUgKEEpIG9uIGluaXQsIChCKSBvbiB1c2VyIHNlbGVjdGluZyBhIGNvdW50cnksIChDKSBvbiBjYWxsaW5nIHNldENvdW50cnlcbiAgICAgICAgICAgIGF1dG9JbnNlcnREaWFsQ29kZTogZmFsc2UsXG4gICAgICAgICAgICAvLyBhZGQgYSBwbGFjZWhvbGRlciBpbiB0aGUgaW5wdXQgd2l0aCBhbiBleGFtcGxlIG51bWJlciBmb3IgdGhlIHNlbGVjdGVkIGNvdW50cnlcbiAgICAgICAgICAgIGF1dG9QbGFjZWhvbGRlcjogXCJwb2xpdGVcIixcbiAgICAgICAgICAgIC8vIGFkZCBhIGNvdW50cnkgc2VhcmNoIGlucHV0IGF0IHRoZSB0b3Agb2YgdGhlIGRyb3Bkb3duXG4gICAgICAgICAgICBjb3VudHJ5U2VhcmNoOiB0cnVlLFxuICAgICAgICAgICAgLy8gbW9kaWZ5IHRoZSBwYXJlbnRDbGFzc1xuICAgICAgICAgICAgY29udGFpbmVyQ2xhc3M6IFwiXCIsXG4gICAgICAgICAgICAvLyBtb2RpZnkgdGhlIGF1dG8gcGxhY2Vob2xkZXJcbiAgICAgICAgICAgIGN1c3RvbVBsYWNlaG9sZGVyOiBudWxsLFxuICAgICAgICAgICAgLy8gYnkgZGVmYXVsdCwgaW5pdGlhbGlzZSB3aXRoIHRoZSBmaXJzdCBjb3VudHJ5IGluIHRoZSBsaXN0IHNlbGVjdGVkIChpZiBubyBjb3VudHJ5IHNldCB2aWEgdGhlIGluaXRpYWwgdmFsdWUgb3IgaW5pdGlhbENvdW50cnkgb3B0aW9uKVxuICAgICAgICAgICAgZGVmYXVsdFRvRmlyc3RDb3VudHJ5OiB0cnVlLFxuICAgICAgICAgICAgLy8gYXBwZW5kIG1lbnUgdG8gc3BlY2lmaWVkIGVsZW1lbnRcbiAgICAgICAgICAgIGRyb3Bkb3duQ29udGFpbmVyOiBudWxsLFxuICAgICAgICAgICAgLy8gZG9uJ3QgZGlzcGxheSB0aGVzZSBjb3VudHJpZXNcbiAgICAgICAgICAgIGV4Y2x1ZGVDb3VudHJpZXM6IFtdLFxuICAgICAgICAgICAgLy8gZml4IHRoZSBkcm9wZG93biB3aWR0aCB0byB0aGUgaW5wdXQgd2lkdGggKHJhdGhlciB0aGFuIGJlaW5nIGFzIHdpZGUgYXMgdGhlIGxvbmdlc3QgY291bnRyeSBuYW1lKVxuICAgICAgICAgICAgZml4RHJvcGRvd25XaWR0aDogdHJ1ZSxcbiAgICAgICAgICAgIC8vIGZvcm1hdCB0aGUgbnVtYmVyIGFzIHRoZSB1c2VyIHR5cGVzXG4gICAgICAgICAgICBmb3JtYXRBc1lvdVR5cGU6IHRydWUsXG4gICAgICAgICAgICAvLyBmb3JtYXQgdGhlIGlucHV0IHZhbHVlIGR1cmluZyBpbml0aWFsaXNhdGlvbiBhbmQgb24gc2V0TnVtYmVyXG4gICAgICAgICAgICBmb3JtYXRPbkRpc3BsYXk6IHRydWUsXG4gICAgICAgICAgICAvLyBnZW9JcCBsb29rdXAgZnVuY3Rpb25cbiAgICAgICAgICAgIGdlb0lwTG9va3VwOiBudWxsLFxuICAgICAgICAgICAgLy8gaW5qZWN0IGEgaGlkZGVuIGlucHV0IHdpdGggdGhpcyBuYW1lLCBhbmQgb24gc3VibWl0LCBwb3B1bGF0ZSBpdCB3aXRoIHRoZSByZXN1bHQgb2YgZ2V0TnVtYmVyXG4gICAgICAgICAgICBoaWRkZW5JbnB1dDogbnVsbCxcbiAgICAgICAgICAgIC8vIGludGVybmF0aW9uYWxpc2UgdGhlIHBsdWdpbiB0ZXh0IGUuZy4gc2VhcmNoIGlucHV0IHBsYWNlaG9sZGVyLCBjb3VudHJ5IG5hbWVzXG4gICAgICAgICAgICBpMThuOiB7fSxcbiAgICAgICAgICAgIC8vIGluaXRpYWwgY291bnRyeVxuICAgICAgICAgICAgaW5pdGlhbENvdW50cnk6IFwiXCIsXG4gICAgICAgICAgICAvLyBuYXRpb25hbCB2cyBpbnRlcm5hdGlvbmFsIGZvcm1hdHRpbmcgZm9yIG51bWJlcnMgZS5nLiBwbGFjZWhvbGRlcnMgYW5kIGRpc3BsYXlpbmcgZXhpc3RpbmcgbnVtYmVyc1xuICAgICAgICAgICAgbmF0aW9uYWxNb2RlOiB0cnVlLFxuICAgICAgICAgICAgLy8gZGlzcGxheSBvbmx5IHRoZXNlIGNvdW50cmllc1xuICAgICAgICAgICAgb25seUNvdW50cmllczogW10sXG4gICAgICAgICAgICAvLyBudW1iZXIgdHlwZSB0byB1c2UgZm9yIHBsYWNlaG9sZGVyc1xuICAgICAgICAgICAgcGxhY2Vob2xkZXJOdW1iZXJUeXBlOiBcIk1PQklMRVwiLFxuICAgICAgICAgICAgLy8gdGhlIGNvdW50cmllcyBhdCB0aGUgdG9wIG9mIHRoZSBsaXN0XG4gICAgICAgICAgICBwcmVmZXJyZWRDb3VudHJpZXM6IFtdLFxuICAgICAgICAgICAgLy8gb3B0aW9uIHRvIGhpZGUgdGhlIGZsYWdzIC0gbXVzdCBiZSB1c2VkIHdpdGggc2hvd1NlbGVjdGVkRGlhbENvZGUsIG9yIGFsbG93RHJvcGRvd249ZmFsc2VcbiAgICAgICAgICAgIHNob3dGbGFnczogdHJ1ZSxcbiAgICAgICAgICAgIC8vIGRpc3BsYXkgdGhlIGludGVybmF0aW9uYWwgZGlhbCBjb2RlIG5leHQgdG8gdGhlIHNlbGVjdGVkIGZsYWdcbiAgICAgICAgICAgIHNob3dTZWxlY3RlZERpYWxDb2RlOiBmYWxzZSxcbiAgICAgICAgICAgIC8vIHVzZSBmdWxsIHNjcmVlbiBwb3B1cCBpbnN0ZWFkIG9mIGRyb3Bkb3duIGZvciBjb3VudHJ5IGxpc3RcbiAgICAgICAgICAgIHVzZUZ1bGxzY3JlZW5Qb3B1cDogdHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gLy8gd2UgY2Fubm90IGp1c3QgdGVzdCBzY3JlZW4gc2l6ZSBhcyBzb21lIHNtYXJ0cGhvbmVzL3dlYnNpdGUgbWV0YSB0YWdzIHdpbGwgcmVwb3J0IGRlc2t0b3BcbiAgICAgICAgICAgIC8vIHJlc29sdXRpb25zXG4gICAgICAgICAgICAvLyBOb3RlOiB0byB0YXJnZXQgQW5kcm9pZCBNb2JpbGVzIChhbmQgbm90IFRhYmxldHMpLCB3ZSBtdXN0IGZpbmQgJ0FuZHJvaWQnIGFuZCAnTW9iaWxlJ1xuICAgICAgICAgICAgL0FuZHJvaWQuK01vYmlsZXx3ZWJPU3xpUGhvbmV8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpIHx8IHdpbmRvdy5pbm5lcldpZHRoIDw9IDUwMCA6IGZhbHNlLFxuICAgICAgICAgICAgLy8gc3BlY2lmeSB0aGUgcGF0aCB0byB0aGUgbGlicGhvbmVudW1iZXIgc2NyaXB0IHRvIGVuYWJsZSB2YWxpZGF0aW9uL2Zvcm1hdHRpbmdcbiAgICAgICAgICAgI
1HV0aWxzU2NyaXB0OiBcIlwiXG4gICAgICAgIH07XG4gICAgICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xpc3Rfb2ZfTm9ydGhfQW1lcmljYW5fTnVtYmVyaW5nX1BsYW5fYXJlYV9jb2RlcyNOb24tZ2VvZ3JhcGhpY19hcmVhX2NvZGVzXG4gICAgICAgIHZhciByZWdpb25sZXNzTmFucE51bWJlcnMgPSBbIFwiODAwXCIsIFwiODIyXCIsIFwiODMzXCIsIFwiODQ0XCIsIFwiODU1XCIsIFwiODY2XCIsIFwiODc3XCIsIFwiODgwXCIsIFwiODgxXCIsIFwiODgyXCIsIFwiODgzXCIsIFwiODg0XCIsIFwiODg1XCIsIFwiODg2XCIsIFwiODg3XCIsIFwiODg4XCIsIFwiODg5XCIgXTtcbiAgICAgICAgLy8gcnVuIGEgbWV0aG9kIG9uIGVhY2ggaW5zdGFuY2Ugb2YgdGhlIHBsdWdpblxuICAgICAgICB2YXIgZm9yRWFjaEluc3RhbmNlID0gZnVuY3Rpb24gZm9yRWFjaEluc3RhbmNlKG1ldGhvZCkge1xuICAgICAgICAgICAgdmFyIGluc3RhbmNlcyA9IHdpbmRvdy5pbnRsVGVsSW5wdXRHbG9iYWxzLmluc3RhbmNlcztcbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXMoaW5zdGFuY2VzKS5mb3JFYWNoKGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlW21ldGhvZF0oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICAvLyB0aGlzIGlzIG91ciBwbHVnaW4gY2xhc3MgdGhhdCB3ZSB3aWxsIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgICAgdmFyIEl0aSA9IC8qI19fUFVSRV9fKi8gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBJdGkoaW5wdXQpIHtcbiAgICAgICAgICAgICAgICB2Y
1XIgY3VzdG9tT3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEl0aSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pZCA9IGlkKys7XG4gICAgICAgICAgICAgICAgdGhpcy50ZWxJbnB1dCA9IGlucHV0O1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlSXRlbSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRlZEl0ZW0gPSBudWxsO1xuICAgICAgICAgICAgICAgIC8vIHByb2Nlc3Mgc3BlY2lmaWVkIG9wdGlvbnMgLyBkZWZhdWx0c1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzLCBjdXN0b21PcHRpb25zKTtcbiAgICAgICAgICAgICAgICB0aGlzLmhhZEluaXRpYWxQbGFjZWhvbGRlciA9IEJvb2xlYW4oaW5wdXQuZ2V0QXR0cmlidXRlKFwicGxhY2Vob2xkZXJcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKEl0aSwgWyB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9pbml0XCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9pbml0KCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiBzaG93aW5nIGZ1bGxzY3JlZW4gcG9wdXAsIGRvIG5vdCBmaXggdGhlIHdpZHRoXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMudXNlRnVsbHNjcmVlblBvcHVwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuZml4RHJvcGRvd25XaWR0aCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gc2VhcmNoIGVuYWJsZWQsIHdlIG11c3QgZml4IHRoZSB3aWR0aCBlbHNlIGl0IHdvdWxkIGNoYW5nZSB3aXRoIGRpZmZlcmVudCByZXN1bHRzXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY291bnRyeVNlYXJjaCAmJiAhdGhpcy5vcHRpb25zLnVzZUZ1bGxzY3JlZW5Qb3B1cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmZpeERyb3Bkb3duV2lkdGggPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIGluIG5hdGlvbmFsTW9kZSwgZG8gbm90IGluc2VydCBkaWFsIGNvZGVzXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubmF0aW9uYWxNb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuYXV0b0luc2VydERpYWxDb2RlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgc2hvd1NlbGVjdGVkRGlhbENvZGUgZW5hYmxlZCwgZG8gbm90IGluc2VydCBkaWFsIGNvZGVzXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1NlbGVjdGVkRGlhbENvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5hdXRvSW5zZXJ0RGlhbENvZGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBmb3JjZSBzaG93RmxhZ3M9dHJ1ZSBpZiB0aGVyZSdzIGEgZHJvcGRvd24gYW5kIHdlJ3JlIG5vdCBkaXNwbGF5aW5nIHRoZSBkaWFsIGNvZGUsXG4gICAgICAgICAgICAgICAgICAgIC8vIGFzIG90aGVyd2lzZSB5b3UganVzdCBoYXZlIGEgZG93biBhcnJvdyBvbiBpdCdzIG93biB3aGljaCBkb2Vzbid0IG1ha2Ugc2Vuc2VcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvcmNlU2hvd0ZsYWdzID0gdGhpcy5vcHRpb25zLmFsbG93RHJvcGRvd24gJiYgIXRoaXMub3B0aW9ucy5zaG93U2VsZWN0ZWREaWFsQ29kZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuc2hvd0ZsYWdzICYmIGZvcmNlU2hvd0ZsYWdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuc2hvd0ZsYWdzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBvbiBtb2JpbGUsIHdlIHdhbnQgYSBmdWxsIHNjcmVlbiBkcm9wZG93biwgc28gd2UgbXVzdCBhcHBlbmQgaXQgdG8gdGhlIGJvZHlcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy51c2VGdWxsc2NyZWVuUG9wdXAgJiYgIXRoaXMub3B0aW9ucy5kcm9wZG93bkNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmRyb3Bkb3duQ29udGFpbmVyID0gZG9jdW1lbnQuYm9keTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiBpbnB1dCBoYXMgb25lIHBhcmVudCB3aXRoIFJUTFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUlRMID0gISF0aGlzLnRlbElucHV0LmNsb3Nlc3QoXCJbZGlyPXJ0bF1cIik7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZXNlIHByb21pc2VzIGdldCByZXNvbHZlZCB3aGVuIHRoZWlyIGluZGl2aWR1YWwgcmVxdWVzdHMgY29tcGxldGVcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB3YXkgdGhlIGRldiBjYW4gZG8gc29tZXRoaW5nIGxpa2UgaXRpLnByb21pc2UudGhlbiguLi4pIHRvIGtub3cgd2hlbiBhbGwgcmVxdWVzdHMgYXJlXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbXBsZXRlXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgUHJvbWlzZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF1dG9Db3VudHJ5UHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnJlc29sdmVBdXRvQ291bnRyeVByb21pc2UgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnJlamVjdEF1dG9Db3VudHJ5UHJvbWlzZSA9IHJlamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgI
1H0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHV0aWxzU2NyaXB0UHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnJlc29sdmVVdGlsc1NjcmlwdFByb21pc2UgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnJlamVjdFV0aWxzU2NyaXB0UHJvbWlzZSA9IHJlamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlID0gUHJvbWlzZS5hbGwoWyBhdXRvQ291bnRyeVByb21pc2UsIHV0aWxzU2NyaXB0UHJvbWlzZSBdKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZXJyb3JzIHdoZW4gUHJvbWlzZSBkb2Vzbid0IGV4aXN0XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVBdXRvQ291bnRyeVByb21pc2UgPSB0aGlzLnJlamVjdEF1dG9Db3VudHJ5UHJvbWlzZSA9IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVVdGlsc1NjcmlwdFByb21pc2UgPSB0aGlzLnJlamVjdFV0aWxzU2NyaXB0UHJvbWlzZSA9IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gaW4gdmFyaW91cyBzaXR1YXRpb25zIHRoZXJlIGNvdWxkIGJlIG5vIGNvdW50cnkgc2VsZWN0ZWQgaW5pdGlhbGx5LCBidXQgd2UgbmVlZCB0byBiZSBhYmxlXG4gICAgICAgICAgICAgICAgICAgIC8vIHRvIGFzc3VtZSB0aGlzIHZhcmlhYmxlIGV4aXN0c1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcHJvY2VzcyBhbGwgdGhlIGRhdGE6IG9ubHlDb3VudHJpZXMsIGV4Y2x1ZGVDb3VudHJpZXMsIHByZWZlcnJlZENvdW50cmllcyBldGNcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc0NvdW50cnlEYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGdlbmVyYXRlIHRoZSBtYXJrdXBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2VuZXJhdGVNYXJrdXAoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0IHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBpbnB1dCB2YWx1ZSBhbmQgdGhlIHNlbGVjdGVkIGZsYWdcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0SW5pdGlhbFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0IGFsbCBvZiB0aGUgZXZlbnQgbGlzdGVuZXJzOiBhdXRvSW5zZXJ0RGlhbENvZGUsIGlucHV0IGtleWRvd24sIHNlbGVjdGVkRmxhZyBjbGlja1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbml0TGlzdGVuZXJzKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHV0aWxzIHNjcmlwdCwgYW5kIGF1dG8gY291bnRyeVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbml0UmVxdWVzdHMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9wcm9jZXNzQ291bnRyeURhdGFcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3Byb2Nlc3NDb3VudHJ5RGF0YSgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcHJvY2VzcyBvbmx5Q291bnRyaWVzIG9yIGV4Y2x1ZGVDb3VudHJpZXMgYXJyYXkgaWYgcHJlc2VudFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzQWxsQ291bnRyaWVzKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGdlbmVyYXRlIHRoaXMuZGlhbENvZGVzIGFuZCB0aGlzLmRpYWxDb2RlVG9Jc28yTWFwXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NEaWFsQ29kZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcHJvY2VzcyB0aGUgcHJlZmVycmVkQ291bnRyaWVzXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NQcmVmZXJyZWRDb3VudHJpZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNsYXRlIGNvdW50cnkgbmFtZXMgYWNjb3JkaW5nIHRvIGkxOG4gb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZUNvdW50cnlOYW1lcygpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzb3J0IGNvdW50cmllcyBieSBuYW1lXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMub25seUNvdW50cmllcy5sZW5ndGggfHwgdGhpcy5vcHRpb25zLmkxOG4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY291bnRyaWVzLnNvcnQodGhpcy5fY291bnRyeU5hbWVTb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2FkZFRvRGlhbENvZGVNYXBcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2FkZFRvRGlhbENvZGVNYXAoaXNvMiwgZGlhbENvZGUsIHByaW9yaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkaWFsQ29kZS5sZW5ndGggPiB0aGlzLmRpYWxDb2RlTWF4TGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxDb2RlTWF4TGVuID0gZGlhbENvZGUubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5kaWFsQ29kZVRvSXNvMk1hcC5oYXNPd25Qcm9wZXJ0eShkaWFsQ29kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbENvZGVUb0lzbzJNYXBbZGlhbENvZGVdID0gW107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gYmFpbCBpZiB3ZSBhbHJlYWR5IGhhdmUgdGhpcyBjb3VudHJ5IGZvciB0aGlzIGRpYWxDb2RlXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kaWFsQ29kZVRvSXNvMk1hcFtkaWFsQ29kZV0ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRpYWxDb2RlVG9Jc28yTWFwW2RpYWxDb2RlXVtpXSA9PT0gaXNvMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgI
1HJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBmb3IgdW5kZWZpbmVkIGFzIDAgaXMgZmFsc3lcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gcHJpb3JpdHkgIT09IHVuZGVmaW5lZCA/IHByaW9yaXR5IDogdGhpcy5kaWFsQ29kZVRvSXNvMk1hcFtkaWFsQ29kZV0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxDb2RlVG9Jc28yTWFwW2RpYWxDb2RlXVtpbmRleF0gPSBpc28yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX3Byb2Nlc3NBbGxDb3VudHJpZXNcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3Byb2Nlc3NBbGxDb3VudHJpZXMoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMub25seUNvdW50cmllcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb3dlckNhc2VPbmx5Q291bnRyaWVzID0gdGhpcy5vcHRpb25zLm9ubHlDb3VudHJpZXMubWFwKGZ1bmN0aW9uKGNvdW50cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY291bnRyeS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50cmllcyA9IGFsbENvdW50cmllcy5maWx0ZXIoZnVuY3Rpb24oY291bnRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb3dlckNhc2VPbmx5Q291bnRyaWVzLmluZGV4T2YoY291bnRyeS5pc28yKSA+IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmV4Y2x1ZGVDb3VudHJpZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2Y
1XIgbG93ZXJDYXNlRXhjbHVkZUNvdW50cmllcyA9IHRoaXMub3B0aW9ucy5leGNsdWRlQ291bnRyaWVzLm1hcChmdW5jdGlvbihjb3VudHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50cnkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3VudHJpZXMgPSBhbGxDb3VudHJpZXMuZmlsdGVyKGZ1bmN0aW9uKGNvdW50cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG93ZXJDYXNlRXhjbHVkZUNvdW50cmllcy5pbmRleE9mKGNvdW50cnkuaXNvMikgPT09IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50cmllcyA9IGFsbENvdW50cmllcztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX3RyYW5zbGF0ZUNvdW50cnlOYW1lc1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfdHJhbnNsYXRlQ291bnRyeU5hbWVzKCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY291bnRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNvMiA9IHRoaXMuY291bnRyaWVzW2ldLmlzbzIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaTE4bi5oYXNPd25Qcm9wZXJ0eShpc28yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY291bnRyaWVzW2ldLm5hbWUgPSB0aGlzLm9wdGlvbnMuaTE4bltpc28yXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2NvdW50cnlOYW1lU29ydFwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfY291bnRyeU5hbWVTb3J0KGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEubmFtZSA8IGIubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChhLm5hbWUgPiBiLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX3Byb2Nlc3NEaWFsQ29kZXNcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3Byb2Nlc3NEaWFsQ29kZXMoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGhlcmUgd2Ugc3RvcmUganVzdCBkaWFsIGNvZGVzLCB3aGVyZSB0aGUga2V5IGlzIHRoZSBkaWFsIGNvZGUsIGFuZCB0aGUgdmFsdWUgaXMgdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAvLyBlLmcuIHsgMTogdHJ1ZSwgNzogdHJ1ZSwgMjA6IHRydWUsIC4uLiB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbENvZGVzID0ge307XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbENvZGVNYXhMZW4gPSAwO1xuICAgICAgICAgICAgICAgICAgICAvLyBoZXJlIHdlIG1hcCBkaWFsQ29kZXMgKGluYyBib3RoIGRpYWxDb2RlIGFuZCBkaWFsQ29kZSthcmVhQ29kZSkgdG8gaXNvMiBjb2Rlc1xuICAgICAgICAgICAgICAgICAgICAvKiBlLmcuXG4gICAgICAgKiB7XG4gICAgICAgKiAgIDE6IFsgJ3VzJywgJ2NhJywgLi4uIF0sICAgICMgYWxsIE5BTlAgY291bnRyaWVzXG4gICAgICAgKiAgIDEyOiBbICd1cycsICdjYScsIC4uLiBdLCAgICMgc3Vic2V0IG9mIE5BTlAgY291bnRyaWVzXG4gICAgICAgKiAgIDEyMDogWyAndXMnLCAnY2EnIF0sICAgICAgICMganVzdCBVUyBhbmQgQ2FuYWRhXG4gICAgICAgKiAgIDEyMDQ6IFsgJ2NhJyBdLCAgICAgICAgICAgICMgb25seSBDYW5hZGFcbiAgICAgICAqICAgLi4uXG4gICAgICAgKiAgfVxuICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbENvZGVUb0lzbzJNYXAgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZmlyc3Q6IGFkZCBkaWFsIGNvZGVzXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb3VudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjID0gdGhpcy5jb3VudHJpZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGlhbENvZGVzW2MuZGlhbENvZGVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsQ29kZXNbYy5kaWFsQ29kZV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkVG9EaWFsQ29kZU1hcChjLmlzbzIsIGMuZGlhbENvZGUsIGMucHJpb3JpdHkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIG5leHQ6IGFkZCBhcmVhIGNvZGVzXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYSBzZWNvbmQgbG9vcCBvdmVyIGNvdW50cmllcywgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYWxsIG9mIHRoZSBcInJvb3RcIiBjb3VudHJpZXNcbiAgICAgICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBpbiB0aGUgbWFwLCBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlbSwgYXMgZWFjaCB0aW1lIHdlIGFkZCBhbiBhcmVhIGNvZGUgc3Vic3RyaW5nXG4gICAgICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBtYXAsIHdlIGFsc28gbmVlZCB0byBpbmNsdWRlIHRoZSBcInJvb3RcIiBjb3VudHJ5J3MgY29kZSwgYXMgdGhhdCBhbHNvIG1hdGNoZXNcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHRoaXMuY291bnRyaWVzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9jID0gdGh
1pcy5jb3VudHJpZXNbX2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJlYSBjb2Rlc1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jLmFyZWFDb2Rlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByb290SXNvMkNvZGUgPSB0aGlzLmRpYWxDb2RlVG9Jc28yTWFwW19jLmRpYWxDb2RlXVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBhcmVhIGNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IF9jLmFyZWFDb2Rlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJlYUNvZGUgPSBfYy5hcmVhQ29kZXNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGRpZ2l0IGluIHRoZSBhcmVhIGNvZGUgdG8gYWRkIGFsbCBwYXJ0aWFsIG1hdGNoZXMgYXMgd2VsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMTsgayA8IGFyZWFDb2RlLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFydGlhbERpYWxDb2RlID0gX2MuZGlhbENvZGUgKyBhcmVhQ29kZS5zdWJzdHIoMCwgayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGFydCB3aXRoIHRoZSByb290IGNvdW50cnksIGFzIHRoYXQgYWxzbyBtYXRjaGVzIHRoaXMgZGlhbCBjb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRUb0RpYWxDb2RlTWFwKHJvb3RJc28yQ29kZSwgcGFydGlhbERpYWxDb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZFRvRGlhbENvZGVNYXAoX2MuaXNvMiwgcGFydGlhbERpYWxDb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGQgdGhlIGZ1bGwgYXJlYSBjb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZFRvRGlhbENvZGVNYXAoX2MuaXNvMiwgX2MuZGlhbENvZGUgKyBhcmVhQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfcHJvY2Vzc1ByZWZlcnJlZENvdW50cmllc1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcHJvY2Vzc1ByZWZlcnJlZENvdW50cmllcygpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVmZXJyZWRDb3VudHJpZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMucHJlZmVycmVkQ291bnRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2Y
1XIgaXNvMiA9IHRoaXMub3B0aW9ucy5wcmVmZXJyZWRDb3VudHJpZXNbaV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudHJ5RGF0YSA9IHRoaXMuX2dldENvdW50cnlEYXRhKGlzbzIsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50cnlEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVmZXJyZWRDb3VudHJpZXMucHVzaChjb3VudHJ5RGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9jcmVhdGVFbFwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfY3JlYXRlRWwobmFtZSwgYXR0cnMsIGNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGF0dHJzKS5mb3JFYWNoKGZ1bmN0aW9uKF9yZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAyKSwga2V5ID0gX3JlZjJbMF0sIHZhbHVlID0gX3JlZjJbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChlbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2dlbmVyYXRlTWFya3VwXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9nZW5lcmF0ZU1hcmt1cCgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZWxJbnB1dC5jbGFzc0xpc3QuYWRkKFwiaXRpX190ZWwtaW5wdXRcIik7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIGF1dG9jb21wbGV0ZSBkb2VzIG5vdCBleGlzdCBvbiB0aGUgZWxlbWVudCBhbmQgaXRzIGZvcm0sIHRoZW5cbiAgICAgICAgICAgICAgICAgICAgLy8gcHJldmVudCBhdXRvY29tcGxldGUgYXMgdGhlcmUncyBubyBzYWZlLCBjcm9zcy1icm93c2VyIGV2ZW50IHdlIGNhbiByZWFjdCB0bywgc28gaXQgY2FuXG4gICAgICAgICAgICAgICAgICAgIC8vIGVhc2lseSBwdXQgdGhlIHBsdWdpbiBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgZS5nLiB0aGUgd3JvbmcgZmxhZyBzZWxlY3RlZCBmb3IgdGhlXG4gICAgICAgICAgICAgICAgICAgIC8vIGF1dG9jb21wbGV0ZWQgbnVtYmVyLCB3aGljaCBvbiBzdWJtaXQgY291bGQgbWVhbiB3cm9uZyBudW1iZXIgaXMgc2F2ZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRlbElucHV0Lmhhc0F0dHJpYnV0ZShcImF1dG9jb21wbGV0ZVwiKSAmJiAhKHRoaXMudGVsSW5wdXQuZm9ybSAmJiB0aGlzLnRlbElucHV0LmZvcm0uaGFzQXR0cmlidXRlKFwiYXV0b2NvbXBsZXRlXCIpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZWxJbnB1dC5zZXRBdHRyaWJ1dGUoXCJhdXRvY29tcGxldGVcIiwgXCJvZmZcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzJG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsIGFsbG93RHJvcGRvd24gPSBfdGhpcyRvcHRpb25zLmFsbG93RHJvcGRvd24sIHNob3dTZWxlY3RlZERpYWxDb2RlID0gX3RoaXMkb3B0aW9ucy5zaG93U2VsZWN0ZWREaWFsQ29kZSwgc2hvd0ZsYWdzID0gX3RoaXMkb3B0aW9ucy5zaG93RmxhZ3MsIGNvbnRhaW5lckNsYXNzID0gX3RoaXMkb3B0aW9ucy5jb250YWluZXJDbGFzcywgaGlkZGVuSW5wdXQgPSBfdGhpcyRvcHRpb25zLmhpZGRlbklucHV0LCBkcm9wZG93bkNvbnRhaW5lciA9IF90aGlzJG9wdGlvbnMuZHJvcGRvd25Db250YWluZXIsIGZpeERyb3Bkb3duV2lkdGggPSBfdGhpcyRvcHRpb25zLmZpeERyb3Bkb3duV2lkdGgsIHVzZUZ1bGxzY3JlZW5Qb3B1cCA9IF90aGlzJG9wdGlvbnMudXNlRnVsbHNjcmVlblBvcHVwLCBjb3VudHJ5U2VhcmNoID0gX3RoaXMkb3B0aW9ucy5jb3VudHJ5U2VhcmNoO1xuICAgICAgICAgICAgICAgICAgICAvLyBjb250YWluZXJzIChtb3N0bHkgZm9yIHBvc2l0aW9uaW5nKVxuICAgICAgICAgICAgICAgICAgICB2Y
1XIgcGFyZW50Q2xhc3MgPSBcIml0aVwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb3dEcm9wZG93bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q2xhc3MgKz0gXCIgaXRpLS1hbGxvdy1kcm9wZG93blwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG93U2VsZWN0ZWREaWFsQ29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q2xhc3MgKz0gXCIgaXRpLS1zaG93LXNlbGVjdGVkLWRpYWwtY29kZVwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG93RmxhZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENsYXNzICs9IFwiIGl0aS0tc2hvdy1mbGFnc1wiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250YWluZXJDbGFzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q2xhc3MgKz0gXCIgXCIuY29uY2F0KGNvbnRhaW5lckNsYXNzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZUZ1bGxzY3JlZW5Qb3B1cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q2xhc3MgKz0gXCIgaXRpLS1pbmxpbmUtZHJvcGRvd25cIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YXIgd3JhcHBlciA9IHRoaXMuX2NyZWF0ZUVsKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY2xhc3NcIjogcGFyZW50Q2xhc3NcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGVsSW5wdXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUod3JhcHBlciwgdGhpcy50ZWxJbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgaGlkZSB0aGUgZmxhZ3NDb250YWluZXIgaWYgYWxsb3dEcm9wZG93biwgc2hvd0ZsYWdzIGFuZCBzaG93U2VsZWN0ZWREaWFsQ29kZSBhcmUgYWxsIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIHZhciBzaG93RmxhZ3NDb250YWluZXIgPSBhbGxvd0Ryb3Bkb3duIHx8IHNob3dGbGFncyB8fCBzaG93U2VsZWN0ZWREaWFsQ29kZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dGbGFnc0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mbGFnc0NvbnRhaW5lciA9IHRoaXMuX2NyZWF0ZUVsKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsYXNzXCI6IFwiaXRpX19mbGFnLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB3cmFwcGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHRoaXMudGVsSW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3RlZCBmbGFnIChkaXNwbGF5ZWQgdG8gbGVmdCBvZiBpbnB1dClcbiAgICAgICAgICAgICAgICAgICAgLy8gdXNpbmcgQXJpYSB0YWdzIGZvciBcIlNlbGVjdC1Pbmx5IENvbWJvYm94IEV4YW1wbGVcIlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvV0FJL0FSSUEvYXBnL3BhdHRlcm5zL2NvbWJvYm94L2V4YW1wbGVzL2NvbWJvYm94LXNlbGVjdC1vbmx5L1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvd0ZsYWdzQ29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmxhZyA9IHRoaXMuX2NyZWF0ZUVsKFwiZGl2XCIsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2xhc3NcIjogXCJpdGlfX3NlbGVjdGVkLWZsYWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgYWxsb3dEcm9wZG93biAmJiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZTogXCJjb21ib2JveFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1oYXNwb3B1cFwiOiBcImxpc3Rib3hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtY29udHJvbHNcIjogXCJpdGktXCIuY29uY2F0KHRoaXMuaWQsIFwiX19jb3VudHJ5LWxpc3Rib3hcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IFwiZmFsc2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogdGhpcy5vcHRpb25zLmkxOG4uc2VsZWN0ZWRDb3VudHJ5QXJpYUxhYmVsIHx8IFwiU2VsZWN0ZWQgY291bnRyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSwgdGhpcy5mbGFnc0NvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dGbGFncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZsYWdJbm5lciA9IHRoaXMuX2NyZWF0ZUVsKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsYXNzXCI6IFwiaXRpX19mbGFnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMuc2VsZWN0ZWRGbGFnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZsYWcgJiYgdGhpcy50ZWxJbnB1dC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZsYWcuc2V0QXR0cmlidXRlKFwiYXJpYS1kaXNhYmxlZFwiLCBcInRydWVcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dTZWxlY3RlZERpYWxDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGlhbENvZGUgPSB0aGlzLl9jcmVhdGVFbChcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjbGFzc1wiOiBcIml0aV9fc2VsZWN0ZWQtZGlhbC1jb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMuc2VsZWN0ZWRGbGFnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb3dEcm9wZG93bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRlbElucHV0LmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBlbGVtZW50IGZvY3VzYWJsZSBhbmQgdGFiIG5hdmlnYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgI
1HRoaXMuc2VsZWN0ZWRGbGFnLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsIFwiMFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25BcnJvdyA9IHRoaXMuX2NyZWF0ZUVsKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsYXNzXCI6IFwiaXRpX19hcnJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzLnNlbGVjdGVkRmxhZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXh0cmFDbGFzc2VzID0gZml4RHJvcGRvd25XaWR0aCA/IFwiXCIgOiBcIml0aS0tZmxleGlibGUtZHJvcGRvd24td2lkdGhcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25Db250ZW50ID0gdGhpcy5fY3JlYXRlRWwoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2xhc3NcIjogXCJpdGlfX2Ryb3Bkb3duLWNvbnRlbnQgaXRpX19oaWRlIFwiLmNvbmNhdChleHRyYUNsYXNzZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudHJ5U2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dCA9IHRoaXMuX2NyZWF0ZUVsKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjbGFzc1wiOiBcIml0aV9fc2VhcmNoLWlucHV0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLm9wdGlvbnMuaTE4bi5zZWFyY2hQbGFjZWhvbGRlciB8fCBcIlNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy5kcm9wZG93bkNvbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY291bnRyeSBsaXN0OiBwcmVmZXJyZWQgY291bnRyaWVzLCB0aGVuIGRpdmlkZXIsIHRoZW4gYWxsIGNvdW50cmllc1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3VudHJ5TGlzdCA9IHRoaXMuX2NyZWF0ZUVsKFwidWxcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2xhc3NcIjogXCJpdGlfX2NvdW50cnktbGlzdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIml0aS1cIi5jb25jYXQodGhpcy5pZCwgXCJfX2NvdW50cnktbGlzdGJveFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlOiBcImxpc3Rib3hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogdGhpcy5vcHRpb25zLmkxOG4uY291bnRyeUxpc3RBcmlhTGFiZWwgfHwgXCJMaXN0IG9mIGNvdW50cmllc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzLmRyb3Bkb3duQ29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmVmZXJyZWRDb3VudHJpZXMubGVuZ3RoICYmICFjb3VudHJ5U2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwZW5kTGlzdEl0ZW1zKHRoaXMucHJlZmVycmVkQ291bnRyaWVzLCBcIml0aV9fcHJlZmVycmVkXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUVsKFwibGlcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsYXNzXCI6IFwiaXRpX19kaXZpZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzLmNvdW50cnlMaXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZExpc3RJdGVtcyh0aGlzLmNvdW50cmllcywgXCJpdGlfX3N0YW5kYXJkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGRyb3Bkb3duQ29udGFpbmVyIG1hcmt1cFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRyb3Bkb3duQ29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRyb3Bkb3duQ2xhc3NlcyA9IFwiaXRpIGl0aS0tY29udGFpbmVyXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZUZ1bGxzY3JlZW5Qb3B1cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcm9wZG93bkNsYXNzZXMgKz0gXCIgaXRpLS1mdWxsc2NyZWVuLXBvcHVwXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25DbGFzc2VzICs9IFwiIGl0aS0taW5saW5lLWRyb3Bkb3duXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudHJ5U2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duQ2xhc3NlcyArPSBcIiBpdGktLWNvdW50cnktc2VhcmNoXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd24gPSB0aGlzLl9jcmVhdGVFbChcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2xhc3NcIjogZHJvcGRvd25DbGFzc2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5hcHBlbmRDaGlsZCh0aGlzLmRyb3Bkb3duQ29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmxhZ3NDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5kcm9wZG93bkNvbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChoaWRkZW5JbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbElucHV0TmFtZSA9IHRoaXMudGVsSW5wdXQuZ2V0QXR0cmlidXRlKFwibmFtZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgI
1HZhciByZXN1bHQgPSBoaWRkZW5JbnB1dCh0ZWxJbnB1dE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzT2JqZWN0ID0gcmVzdWx0ICE9PSBudWxsICYmIHR5cGVvZiByZXN1bHQgPT09IFwib2JqZWN0XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGlkZGVuSW5wdXRQaG9uZU5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGlkZGVuSW5wdXRDb3VudHJ5TmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc09iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbklucHV0UGhvbmVOYW1lID0gcmVzdWx0LnBob25lIHx8IHRlbElucHV0TmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW5JbnB1dENvdW50cnlOYW1lID0gcmVzdWx0LmNvdW50cnkgfHwgXCJcIi5jb25jYXQoaGlkZGVuSW5wdXRQaG9uZU5hbWUsIFwiX2NvdW50cnlcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbklucHV0UGhvbmVOYW1lID0gcmVzdWx0IHx8IHRlbElucHV0TmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW5JbnB1dENvdW50cnlOYW1lID0gXCJcIi5jb25jYXQoaGlkZGVuSW5wdXRQaG9uZU5hbWUsIFwiX2NvdW50cnlcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBhIG5hbWUgaGFzIGJlZW4gZGV0ZXJtaW5lZCBmb3IgdGhlIHBob25lIGlucHV0IGZpZWxkIGFmdGVyIGFsbCBjb25kaXRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhpZGRlbklucHV0UGhvbmVOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGhpZGRlbiBpbnB1dCBmb3IgdGhlIGZ1bGwgaW50ZXJuYXRpb25hbCBudW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZGVuSW5wdXQgPSB0aGlzLl9jcmVhdGVFbChcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImhpZGRlblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGhpZGRlbklucHV0UGhvbmVOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBoaWRkZW4gaW5wdXQgZm9yIHRoZSBzZWxlY3RlZCBjb3VudHJ5IGlzbzIgY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRkZW5JbnB1dENvdW50cnkgPSB0aGlzLl9jcmVhdGVFbChcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImhpZGRlblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGhpZGRlbklucHV0Q291bnRyeU5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZCh0aGlzLmhpZGRlbklucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQodGhpcy5oaWRkZW5JbnB1dENvdW50cnkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfYXBwZW5kTGlzdEl0ZW1zXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9hcHBlbmRMaXN0SXRlbXMoY291bnRyaWVzLCBjbGFzc05hbWUsIHByZWZlcnJlZCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBjb3VudHJpZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB2Y
1XIgaWRTdWZmaXggPSBwcmVmZXJyZWQgPyBcIi1wcmVmZXJyZWRcIiA6IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdEl0ZW0gPSB0aGlzLl9jcmVhdGVFbChcImxpXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJpdGktXCIuY29uY2F0KHRoaXMuaWQsIFwiX19pdGVtLVwiKS5jb25jYXQoYy5pc28yKS5jb25jYXQoaWRTdWZmaXgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2xhc3NcIjogXCJpdGlfX2NvdW50cnkgXCIuY29uY2F0KGNsYXNzTmFtZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg6IFwiLTFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlOiBcIm9wdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGF0YS1kaWFsLWNvZGVcIjogYy5kaWFsQ29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRhdGEtY291bnRyeS1jb2RlXCI6IGMuaXNvMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtc2VsZWN0ZWRcIjogXCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzLmNvdW50cnlMaXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0b3JlIHRoaXMgZm9yIGxhdGVyIHVzZSBlLmcuIGNvdW50cnkgc2VhcmNoIGZpbHRlcmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgYy5ub2RlQnlJZFt0aGlzLmlkXSA9IGxpc3RJdGVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBmbGFnXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dGbGFncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgKz0gXCI8ZGl2IGNsYXNzPSdpdGlfX2ZsYWctYm94Jz48ZGl2IGNsYXNzPSdpdGlfX2ZsYWcgaXRpX19cIi5jb25jYXQoYy5pc28yLCBcIic+PC9kaXY+PC9kaXY+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHRoZSBjb3VudHJ5IG5hbWUgYW5kIGRpYWwgY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCArPSBcIjxzcGFuIGNsYXNzPSdpdGlfX2NvdW50cnktbmFtZSc+XCIuY29uY2F0KGMubmFtZSwgXCI8L3NwYW4+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCArPSBcIjxzcGFuIGNsYXNzPSdpdGlfX2RpYWwtY29kZSc+K1wiLmNvbmNhdChjLmRpYWxDb2RlLCBcIjwvc3Bhbj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0SXRlbS5pbnNlcnRBZGphY2VudEhUTUwoXCJiZWZvcmVlbmRcIiwgY29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9zZXRJbml0aWFsU3RhdGVcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3NldEluaXRpYWxTdGF0ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG92ZXJyaWRlQXV0b0NvdW50cnkgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAvLyBmaXggZmlyZWZveCBidWc6IHdoZW4gZmlyc3QgbG9hZCBwYWdlICh3aXRoIGlucHV0IHdpdGggdmFsdWUgc2V0IHRvIG51bWJlciB3aXRoIGludGwgZGlhbFxuICAgICAgICAgICAgICAgICAgICAvLyBjb2RlKSBhbmQgaW5pdGlhbGlzaW5nIHBsdWdpbiByZW1vdmVzIHRoZSBkaWFsIGNvZGUgZnJvbSB0aGUgaW5wdXQsIHRoZW4gcmVmcmVzaCBwYWdlLFxuICAgICAgICAgICAgICAgICAgICAvLyBhbmQgd2UgdHJ5IHRvIGluaXQgcGx1Z2luIGFnYWluIGJ1dCB0aGlzIHRpbWUgb24gbnVtYmVyIHdpdGhvdXQgZGlhbCBjb2RlIHNvIGdldCBncmV5IGZsYWdcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZVZhbHVlID0gdGhpcy50ZWxJbnB1dC5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0VmFsdWUgPSB0aGlzLnRlbElucHV0LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB2Y
1XIgdXNlQXR0cmlidXRlID0gYXR0cmlidXRlVmFsdWUgJiYgYXR0cmlidXRlVmFsdWUuY2hhckF0KDApID09PSBcIitcIiAmJiAoIWlucHV0VmFsdWUgfHwgaW5wdXRWYWx1ZS5jaGFyQXQoMCkgIT09IFwiK1wiKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IHVzZUF0dHJpYnV0ZSA/IGF0dHJpYnV0ZVZhbHVlIDogaW5wdXRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpYWxDb2RlID0gdGhpcy5fZ2V0RGlhbENvZGUodmFsKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzUmVnaW9ubGVzc05hbnAgPSB0aGlzLl9pc1JlZ2lvbmxlc3NOYW5wKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyRvcHRpb25zMiA9IHRoaXMub3B0aW9ucywgaW5pdGlhbENvdW50cnkgPSBfdGhpcyRvcHRpb25zMi5pbml0aWFsQ291bnRyeSwgYXV0b0luc2VydERpYWxDb2RlID0gX3RoaXMkb3B0aW9uczIuYXV0b0luc2VydERpYWxDb2RlLCBkZWZhdWx0VG9GaXJzdENvdW50cnkgPSBfdGhpcyRvcHRpb25zMi5kZWZhdWx0VG9GaXJzdENvdW50cnk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlIGFscmVhZHkgaGF2ZSBhIGRpYWwgY29kZSwgYW5kIGl0J3Mgbm90IGEgcmVnaW9ubGVzc05hbnAsIHdlIGNhbiBnbyBhaGVhZCBhbmQgc2V0IHRoZVxuICAgICAgICAgICAgICAgICAgICAvLyBmbGFnLCBlbHNlIGZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBjb3VudHJ5XG4gICAgICAgICAgICAgICAgICAgIGlmIChkaWFsQ29kZSAmJiAhaXNSZWdpb25sZXNzTmFucCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlRmxhZ0Zyb21OdW1iZXIodmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbml0aWFsQ291bnRyeSAhPT0gXCJhdXRvXCIgfHwgb3ZlcnJpZGVBdXRvQ291bnRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvd2VySW5pdGlhbENvdW50cnkgPSBpbml0aWFsQ291bnRyeSA/IGluaXRpYWxDb3VudHJ5LnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzVmFsaWRJbml0aWFsQ291bnRyeSA9IGxvd2VySW5pdGlhbENvdW50cnkgJiYgdGhpcy5fZ2V0Q291bnRyeURhdGEobG93ZXJJbml0aWFsQ291bnRyeSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaWYgd2Ugc2hvdWxkIHNlbGVjdCBhIGZsYWdcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkSW5pdGlhbENvdW50cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRGbGFnKGxvd2VySW5pdGlhbENvdW50cnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlhbENvZGUgJiYgaXNSZWdpb25sZXNzTmFucCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXMgaW50bCBkaWFsIGNvZGUsIGlzIHJlZ2lvbmxlc3MgbmFucCwgYW5kIG5vIGluaXRpYWxDb3VudHJ5LCBzbyBkZWZhdWx0IHRvIFVTXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldEZsYWcoXCJ1c1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlZmF1bHRUb0ZpcnN0Q291bnRyeSAmJiAhdmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIGRpYWwgY29kZSBhbmQgbm8gaW5pdGlhbENvdW50cnksIHNvIGRlZmF1bHQgdG8gZmlyc3QgaW4gbGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRDb3VudHJ5ID0gdGhpcy5wcmVmZXJyZWRDb3VudHJpZXMubGVuZ3RoID8gdGhpcy5wcmVmZXJyZWRDb3VudHJpZXNbMF0uaXNvMiA6IHRoaXMuY291bnRyaWVzWzBdLmlzbzI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldEZsYWcodGhpcy5kZWZhdWx0Q291bnRyeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGlzcGxheSB0aGUgZW1wdHkgc3RhdGUgKGdsb2JlIGljb24pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldEZsYWcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBlbXB0eSBhbmQgYXV0b0luc2VydERpYWxDb2RlIHRoZW4gaW5zZXJ0IHRoZSBkaWFsIGNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFsICYmIGF1dG9JbnNlcnREaWFsQ29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGVsSW5wdXQudmFsdWUgPSBcIitcIi5jb25jYXQodGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLmRpYWxDb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiBpZiBpbml0aWFsQ291bnRyeSBpcyBzZXQgdG8gYXV0bywgdGhhdCB3aWxsIGJlIGhhbmRsZWQgc2VwYXJhdGVseVxuICAgICAgICAgICAgICAgICAgICAvLyBmb3JtYXQgLSBub3RlIHRoaXMgd29udCBiZSBydW4gYWZ0ZXIgX3VwZGF0ZURpYWxDb2RlIGFzIHRoYXQncyBvbmx5IGNhbGxlZCBpZiBubyB2YWxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVmFsRnJvbU51bWJlcih2YWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfaW5pdExpc3RlbmVyc1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfaW5pdExpc3RlbmVycygpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5pdEtleUxpc3RlbmVycygpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9JbnNlcnREaWFsQ29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5pdEJsdXJMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmFsbG93RHJvcGRvd24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgI
1HRoaXMuX2luaXREcm9wZG93bkxpc3RlbmVycygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhpZGRlbklucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbml0SGlkZGVuSW5wdXRMaXN0ZW5lcigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfaW5pdEhpZGRlbklucHV0TGlzdGVuZXJcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2luaXRIaWRkZW5JbnB1dExpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlSGlkZGVuSW5wdXRTdWJtaXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5oaWRkZW5JbnB1dC52YWx1ZSA9IF90aGlzMi5nZXROdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5oaWRkZW5JbnB1dENvdW50cnkudmFsdWUgPSBfdGhpczIuZ2V0U2VsZWN0ZWRDb3VudHJ5RGF0YSgpLmlzbzI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRlbElucHV0LmZvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGVsSW5wdXQuZm9ybS5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIHRoaXMuX2hhbmRsZUhpZGRlbklucHV0U3VibWl0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2luaXREcm9wZG93bkxpc3RlbmVyc1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfaW5pdERyb3Bkb3duTGlzdGVuZXJzKCkge1xuICAgICAgICAgICAgICAgICAgICB2Y
1XIgX3RoaXMzID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgLy8gaGFjayBmb3IgaW5wdXQgbmVzdGVkIGluc2lkZSBsYWJlbCAod2hpY2ggaXMgdmFsaWQgbWFya3VwKTogY2xpY2tpbmcgdGhlIHNlbGVjdGVkLWZsYWcgdG9cbiAgICAgICAgICAgICAgICAgICAgLy8gb3BlbiB0aGUgZHJvcGRvd24gd291bGQgdGhlbiBhdXRvbWF0aWNhbGx5IHRyaWdnZXIgYSAybmQgY2xpY2sgb24gdGhlIGlucHV0IHdoaWNoIHdvdWxkXG4gICAgICAgICAgICAgICAgICAgIC8vIGNsb3NlIGl0IGFnYWluXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUxhYmVsQ2xpY2sgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgZHJvcGRvd24gaXMgY2xvc2VkLCB0aGVuIGZvY3VzIHRoZSBpbnB1dCwgZWxzZSBpZ25vcmUgdGhlIGNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMzLmRyb3Bkb3duQ29udGVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJpdGlfX2hpZGVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczMudGVsSW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGFiZWwgPSB0aGlzLnRlbElucHV0LmNsb3Nlc3QoXCJsYWJlbFwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5faGFuZGxlTGFiZWxDbGljayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gdG9nZ2xlIGNvdW50cnkgZHJvcGRvd24gb24gY2xpY2tcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlQ2xpY2tTZWxlY3RlZEZsYWcgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgaW50ZXJjZXB0IHRoaXMgZXZlbnQgaWYgd2UncmUgb3BlbmluZyB0aGUgZHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVsc2UgbGV0IGl0IGJ1YmJsZSB1cCB0byB0aGUgdG9wIChcImNsaWNrLW9mZi10by1jbG9zZVwiIGxpc3RlbmVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgY2Fubm90IGp1c3Qgc3RvcFByb3BhZ2F0aW9uIGFzIGl0IG1heSBiZSBuZWVkZWQgdG8gY2xvc2UgYW5vdGhlciBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzMy5kcm9wZG93bkNvbnRlbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiaXRpX19oaWRlXCIpICYmICFfdGhpczMudGVsSW5wdXQuZGlzYWJsZWQgJiYgIV90aGlzMy50ZWxJbnB1dC5yZWFkT25seSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMy5fc2hvd0Ryb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGbGFnLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl9oYW5kbGVDbGlja1NlbGVjdGVkRmxhZyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9wZW4gZHJvcGRvd24gaWYgc2VsZWN0ZWQgZmxhZyBpcyBmb2N1c2VkIGFuZCB0aGV5IHByZXNzIHVwL2Rvd24vc3BhY2UvZW50ZXJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlRmxhZ3NDb250YWluZXJLZXlkb3duID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzRHJvcGRvd25IaWRkZW4gPSBfdGhpczMuZHJvcGRvd25Db250ZW50LmNsYXNzTGlzdC5jb250YWlucyhcIml0aV9faGlkZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Ryb3Bkb3duSGlkZGVuICYmIFsgXCJBcnJvd1VwXCIsIFwiQXJyb3dEb3duXCIsIFwiIFwiLCBcIkVudGVyXCIgXS5pbmNsdWRlcyhlLmtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmV2ZW50IGZvcm0gZnJvbSBiZWluZyBzdWJtaXR0ZWQgaWYgXCJFTlRFUlwiIHdhcyBwcmVzc2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZXZlbnQgZnJvbSBiZWluZyBoYW5kbGVkIGFnYWluIGJ5IGRvY3VtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczMuX3Nob3dEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxsb3cgbmF2aWdhdGlvbiBmcm9tIGRyb3Bkb3duIHRvIGlucHV0IG9uI
1FRBQlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5ID09PSBcIlRhYlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLl9jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmxhZ3NDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5faGFuZGxlRmxhZ3NDb250YWluZXJLZXlkb3duKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9pbml0UmVxdWVzdHNcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2luaXRSZXF1ZXN0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgdGhlIHBhdGggdG8gdGhlIHV0aWxzIHNjcmlwdCwgZmV0Y2ggaXQgb24gd2luZG93LmxvYWQsIGVsc2UgcmVzb2x2ZVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnV0aWxzU2NyaXB0ICYmICF3aW5kb3cuaW50bFRlbElucHV0VXRpbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBwbHVnaW4gaXMgYmVpbmcgaW5pdGlhbGlzZWQgYWZ0ZXIgdGhlIHdpbmRvdy5sb2FkIGV2ZW50IGhhcyBhbHJlYWR5IGJlZW4gZmlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuaW50bFRlbElucHV0R2xvYmFscy5kb2N1bWVudFJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuaW50bFRlbElucHV0R2xvYmFscy5sb2FkVXRpbHModGhpcy5vcHRpb25zLnV0aWxzU2NyaXB0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2FpdCB1bnRpbCB0aGUgbG9hZCBldmVudCBzbyB3ZSBkb24ndCBibG9jayBhbnkgb3RoZXIgcmVxdWVzdHMgZS5nLiB0aGUgZmxhZ3MgaW1hZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5pbnRsVGVsSW5wdXRHbG9iYWxzLmxvYWRVdGlscyhfdGhpczQub3B0aW9ucy51dGlsc1NjcmlwdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVVdGlsc1NjcmlwdFByb21pc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBkb250IGJvdGhlciB3aXRoIElQIGxvb2t1cCBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBzZWxlY3RlZCBjb3VudHJ5XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaW5pdGlhbENvdW50cnkgPT09IFwiYXV0b1wiICYmICF0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEuaXNvMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9hZEF1dG9Db3VudHJ5KCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVBdXRvQ291bnRyeVByb21pc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2xvYWRBdXRvQ291bnRyeVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfbG9hZEF1dG9Db3VudHJ5KCkge1xuICAgICAgICAgICAgICAgICAgICB2Y
1XIgX3RoaXM1ID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgLy8gMyBvcHRpb25zOlxuICAgICAgICAgICAgICAgICAgICAvLyAxKSBhbHJlYWR5IGxvYWRlZCAod2UncmUgZG9uZSlcbiAgICAgICAgICAgICAgICAgICAgLy8gMikgbm90IGFscmVhZHkgc3RhcnRlZCBsb2FkaW5nIChzdGFydClcbiAgICAgICAgICAgICAgICAgICAgLy8gMykgYWxyZWFkeSBzdGFydGVkIGxvYWRpbmcgKGRvIG5vdGhpbmcgLSBqdXN0IHdhaXQgZm9yIGxvYWRpbmcgY2FsbGJhY2sgdG8gZmlyZSlcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRsVGVsSW5wdXRHbG9iYWxzLmF1dG9Db3VudHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUF1dG9Db3VudHJ5KCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXdpbmRvdy5pbnRsVGVsSW5wdXRHbG9iYWxzLnN0YXJ0ZWRMb2FkaW5nQXV0b0NvdW50cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IGRvIHRoaXMgdHdpY2UhXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuaW50bFRlbElucHV0R2xvYmFscy5zdGFydGVkTG9hZGluZ0F1dG9Db3VudHJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmdlb0lwTG9va3VwID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuZ2VvSXBMb29rdXAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc28yID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Y
1XIgaXNvMkxvd2VyID0gaXNvMi50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNWYWxpZElzbzIgPSBpc28yTG93ZXIgJiYgX3RoaXM1Ll9nZXRDb3VudHJ5RGF0YShpc28yTG93ZXIsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZElzbzIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5pbnRsVGVsSW5wdXRHbG9iYWxzLmF1dG9Db3VudHJ5ID0gaXNvMkxvd2VyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGVsbCBhbGwgaW5zdGFuY2VzIHRoZSBhdXRvIGNvdW50cnkgaXMgcmVhZHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IHRoaXMgc2hvdWxkIGp1c3QgYmUgdGhlIGN1cnJlbnQgaW5zdGFuY2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVUERBVEU6IHVzZSBzZXRUaW1lb3V0IGluIGNhc2UgdGhlaXIgZ2VvSXBMb29rdXAgZnVuY3Rpb24gY2FsbHMgdGhpcyBjYWxsYmFjayBzdHJhaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXdheSAoZS5nLiBpZiB0aGV5IGhhdmUgYWxyZWFkeSBkb25lIHRoZSBnZW8gaXAgbG9va3VwIHNvbWV3aGVyZSBlbHNlKS4gVXNpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNldFRpbWVvdXQgbWVhbnMgdGhhdCB0aGUgY3VycmVudCB0aHJlYWQgb2YgZXhlY3V0aW9uIHdpbGwgZmluaXNoIGJlZm9yZSBleGVjdXRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMsIHdoaWNoIGFsbG93cyB0aGUgcGx1Z2luIHRvIGZpbmlzaCBpbml0aWFsaXNpbmcuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3JFYWNoSW5zdGFuY2UoXCJoYW5kbGVBdXRvQ291bnRyeVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM1Ll9zZXRJbml0aWFsU3RhdGUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JFYWNoSW5zdGFuY2UoXCJyZWplY3RBdXRvQ291bnRyeVByb21pc2VcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvckVhY2hJbnN0YW5jZShcInJlamVjdEF1dG9Db3VudHJ5UHJvbWlzZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2luaXRLZXlMaXN0ZW5lcnNcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2luaXRLZXlMaXN0ZW5lcnMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczYgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICB2Y
1XIgdXNlck92ZXJyaWRlRm9ybWF0dGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgZmxhZyBvbiBpbnB1dCBldmVudFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVLZXlFdmVudCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpczYuX3VwZGF0ZUZsYWdGcm9tTnVtYmVyKF90aGlzNi50ZWxJbnB1dC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuX3RyaWdnZXJDb3VudHJ5Q2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB1c2VyIHR5cGVzIHRoZWlyIG93biBmb3JtYXR0aW5nIGNoYXIgKG5vdCBhIHBsdXMgb3IgYSBudW1lcmljKSwgdGhlbiBzZXQgdGhlIG92ZXJyaWRlXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNGb3JtYXR0aW5nQ2hhciA9IGUgJiYgZS5kYXRhICYmIC9bXiswLTldLy50ZXN0KGUuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNQYXN0ZSA9IGUgJiYgZS5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0RnJvbVBhc3RlXCIgJiYgX3RoaXM2LnRlbElucHV0LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRm9ybWF0dGluZ0NoYXIgfHwgaXNQYXN0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJPdmVycmlkZUZvcm1hdHRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghL1teKzAtOV0vLnRlc3QoX3RoaXM2LnRlbElucHV0LnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJPdmVycmlkZUZvcm1hdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBGQVlULCB1bmxlc3MgdXNlck92ZXJyaWRlRm9ybWF0dGluZyBvciBpdCdzIGEgcGFzdGUgZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpczYub3B0aW9ucy5mb3JtYXRBc1lvdVR5cGUgJiYgIXVzZXJPdmVycmlkZUZvcm1hdHRpbmcgJiYgZS5pbnB1dFR5cGUgIT09IFwiaW5zZXJ0RnJvbVBhc3RlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYWludGFpbiBjYXJldCBwb3NpdGlvbiBhZnRlciByZWZvcm1hdHRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Y
1XIgY3VycmVudENhcmV0UG9zID0gX3RoaXM2LnRlbElucHV0LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZUJlZm9yZUNhcmV0ID0gX3RoaXM2LnRlbElucHV0LnZhbHVlLnN1YnN0cmluZygwLCBjdXJyZW50Q2FyZXRQb3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWxldmFudENoYXJzQmVmb3JlQ2FyZXQgPSB2YWx1ZUJlZm9yZUNhcmV0LnJlcGxhY2UoL1teKzAtOV0vZywgXCJcIikubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0RlbGV0ZUZvcndhcmRzID0gZSAmJiBlLmlucHV0VHlwZSA9PT0gXCJkZWxldGVDb250ZW50Rm9yd2FyZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JtYXR0ZWRWYWx1ZSA9IF90aGlzNi5fZm9ybWF0TnVtYmVyQXNZb3VUeXBlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld0NhcmV0UG9zID0gX3RoaXM2Ll90cmFuc2xhdGVDdXJzb3JQb3NpdGlvbihyZWxldmFudENoYXJzQmVmb3JlQ2FyZXQsIGZvcm1hdHRlZFZhbHVlLCBjdXJyZW50Q2FyZXRQb3MsIGlzRGVsZXRlRm9yd2FyZHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi50ZWxJbnB1dC52YWx1ZSA9IGZvcm1hdHRlZFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi50ZWxJbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShuZXdDYXJldFBvcywgbmV3Q2FyZXRQb3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbElucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCB0aGlzLl9oYW5kbGVLZXlFdmVudCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBmbGFnIG9uIGN1dC9wYXN0ZSBldmVudHMgKG5vdyBzdXBwb3J0ZWQgaW4gYWxsIG1ham9yIGJyb3dzZXJzKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVDbGlwYm9hcmRFdmVudCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFjayBiZWNhdXNlIFwicGFzdGVcIiBldmVudCBpcyBmaXJlZCBiZWZvcmUgaW5wdXQgaXMgdXBkYXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChfdGhpczYuX2hhbmRsZUtleUV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZWxJbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY3V0XCIsIHRoaXMuX2hhbmRsZUNsaXBib2FyZEV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZWxJbnB1dC5hZGRFdmVudExpc3RlbmVyKFwicGFzdGVcIiwgdGhpcy5faGFuZGxlQ2xpcGJvYXJkRXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX3RyYW5zbGF0ZUN1cnNvclBvc2l0aW9uXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF90cmFuc2xhdGVDdXJzb3JQb3NpdGlvbihyZWxldmFudENoYXJzLCBmb3JtYXR0ZWRWYWx1ZSwgcHJldkNhcmV0UG9zLCBpc0RlbGV0ZUZvcndhcmRzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBmaXJzdCBjaGFyIGlzIGEgZm9ybWF0dGluZyBjaGFyLCBhbmQgdGhleSBiYWNrc3BhY2UgZGVsZXRlIGl0OlxuICAgICAgICAgICAgICAgICAgICAvLyBjdXJzb3Igc2hvdWxkIHN0YXkgYXQgdGhlIHN0YXJ0IChwb3MgMCksIHJhdGhlciB0aGFuIHN0aWNrIHRvIHRoZSBmaXJzdCBkaWdpdCAocG9zIDEpXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Q2FyZXRQb3MgPT09IDAgJiYgIWlzRGVsZXRlRm9yd2FyZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9ybWF0dGVkVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvWyswLTldLy50ZXN0KGZvcm1hdHRlZFZhbHVlW2ldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBub3JtYWwgY2FzZTogc3RvcCB3aGVuIHlvdSBoaXQgdGhlIHJpZ2h0IG51bWJlciBvZiByZWxldmFudCBjaGFyc1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gKGN1cnNvciB3aWxsIGJlIGp1c3QgYWZ0ZXIgdGhlIGZpbmFsIHJlbGV2YW50IGNoYXIpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPT09IHJlbGV2YW50Q2hhcnMgJiYgIWlzRGVsZXRlRm9yd2FyZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzcGFjaWFsIGNhc2U6IGRlbGV0ZSBmb3J3YXJkcyAoZm4gKyBkZWxldGUgb24gYSBtYWMpOlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2FpdCB1bnRpbCBoaXQgb25lIGV4dHJhIHJlbGV2YW50IGNoYXIsIGFuZCBwdXQgdGhlIGN1cnNvciBqdXN0IGJlZm9yZSBpdCAoYWZ0ZXIgYW55IGZvcm1hdHRpbmcgY2hhcnMpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNEZWxldGVGb3J3YXJkcyAmJiBjb3VudCA9PT0gcmVsZXZhbnRDaGFycyArIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkVmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2NhcFwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfY2FwKG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICB2Y
1XIgbWF4ID0gdGhpcy50ZWxJbnB1dC5nZXRBdHRyaWJ1dGUoXCJtYXhsZW5ndGhcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXggJiYgbnVtYmVyLmxlbmd0aCA+IG1heCA/IG51bWJlci5zdWJzdHIoMCwgbWF4KSA6IG51bWJlcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9pbml0Qmx1ckxpc3RlbmVyc1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfaW5pdEJsdXJMaXN0ZW5lcnMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczcgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICAvLyBvbiBibHVyIG9yIGZvcm0gc3VibWl0OiBpZiBqdXN0IGEgZGlhbCBjb2RlIHRoZW4gcmVtb3ZlIGl0XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZVN1Ym1pdE9yQmx1ckV2ZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpczcuX3JlbW92ZUVtcHR5RGlhbENvZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudGVsSW5wdXQuZm9ybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZWxJbnB1dC5mb3JtLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgdGhpcy5faGFuZGxlU3VibWl0T3JCbHVyRXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGVsSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgdGhpcy5faGFuZGxlU3VibWl0T3JCbHVyRXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX3JlbW92ZUVtcHR5RGlhbENvZGVcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3JlbW92ZUVtcHR5RGlhbENvZGUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRlbElucHV0LnZhbHVlLmNoYXJBdCgwKSA9PT0gXCIrXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1lcmljID0gdGhpcy5fZ2V0TnVtZXJpYyh0aGlzLnRlbElucHV0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGp1c3QgYSBwbHVzLCBvciBpZiBqdXN0IGEgZGlhbCBjb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW51bWVyaWMgfHwgdGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLmRpYWxDb2RlID09PSBudW1lcmljKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZWxJbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9nZXROdW1lcmljXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9nZXROdW1lcmljKHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvXFxEL2csIFwiXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX3RyaWdnZXJcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3RyaWdnZXIobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICB2Y
1XIgZSA9IG5ldyBFdmVudChuYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZWxJbnB1dC5kaXNwYXRjaEV2ZW50KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX3Nob3dEcm9wZG93blwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfc2hvd0Ryb3Bkb3duKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZpeERyb3Bkb3duV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25Db250ZW50LnN0eWxlLndpZHRoID0gXCJcIi5jb25jYXQodGhpcy50ZWxJbnB1dC5vZmZzZXRXaWR0aCwgXCJweFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duQ29udGVudC5jbGFzc0xpc3QucmVtb3ZlKFwiaXRpX19oaWRlXCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmxhZy5zZXRBdHRyaWJ1dGUoXCJhcmlhLWV4cGFuZGVkXCIsIFwidHJ1ZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0RHJvcGRvd25Qb3NpdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvdW50cnlTZWFyY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0IGJ5IGhpZ2hsaWdodGluZyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0RWxlbWVudENoaWxkID0gdGhpcy5jb3VudHJ5TGlzdC5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdEVsZW1lbnRDaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodExpc3RJdGVtKGZpcnN0RWxlbWVudENoaWxkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5hY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgaGlnaGxpZ2h0aW5nIGFuZCBzY3JvbGwgdG8gYWN0aXZlIGxpc3QgaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0TGlzdEl0ZW0odGhpcy5hY3RpdmVJdGVtLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zY3JvbGxUbyh0aGlzLmFjdGl2ZUl0ZW0sIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGJpbmQgYWxsIHRoZSBkcm9wZG93bi1yZWxhdGVkIGxpc3RlbmVyczogbW91c2VvdmVyLCBjbGljaywgY2xpY2stb2ZmLCBrZXlkb3duXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2JpbmREcm9wZG93bkxpc3RlbmVycygpO1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGFycm93XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25BcnJvdy5jbGFzc0xpc3QuYWRkKFwiaXRpX19hcnJvdy0tdXBcIik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIoXCJvcGVuOmNvdW50cnlkcm9wZG93blwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl90b2dnbGVDbGFzc1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfdG9nZ2xlQ2xhc3MoZWwsIGNsYXNzTmFtZSwgc2hvdWxkSGF2ZUNsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRIYXZlQ2xhc3MgJiYgIWVsLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNob3VsZEhhdmVDbGFzcyAmJiBlbC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfc2V0RHJvcGRvd25Qb3NpdGlvblwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfc2V0RHJvcGRvd25Qb3NpdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzOCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZHJvcGRvd25Db250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5kcm9wZG93bkNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmRyb3Bkb3duKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy51c2VGdWxsc2NyZWVuUG9wdXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3MgPSB0aGlzLnRlbElucHV0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2luZG93VG9wIGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE0Mzg0MDkxLzIxNzg2NlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpbmRvd1RvcCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7XG4gICAgICAgICAgICAgICAgICAgICAgICB2Y
1XIgaW5wdXRUb3AgPSBwb3MudG9wICsgd2luZG93VG9wO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRyb3Bkb3duSGVpZ2h0ID0gdGhpcy5kcm9wZG93bkNvbnRlbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHJvcGRvd25GaXRzQmVsb3cgPSAoZHJvcGRvd25Cb3R0b20gPCB3aW5kb3dCb3R0b20pXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZHJvcGRvd25GaXRzQmVsb3cgPSBpbnB1dFRvcCArIHRoaXMudGVsSW5wdXQub2Zmc2V0SGVpZ2h0ICsgZHJvcGRvd25IZWlnaHQgPCB3aW5kb3dUb3AgKyB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZHJvcGRvd25GaXRzQWJvdmUgPSBpbnB1dFRvcCAtIGRyb3Bkb3duSGVpZ2h0ID4gd2luZG93VG9wO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9udCBhbGxvdyBwb3NpdGlvbmluZyBhYm92ZSB3aGVuIGNvdW50cnkgc2VhcmNoIGVuYWJsZWQgYXMgdGhlIHNlYXJjaCBib3gganVtcHMgYXJvdW5kIGFzIHlvdSBmaWx0ZXIgY291bnRyaWVzXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb25Ecm9wZG93bkFib3ZlSW5wdXQgPSAhdGhpcy5vcHRpb25zLmNvdW50cnlTZWFyY2ggJiYgIWRyb3Bkb3duRml0c0JlbG93ICYmIGRyb3Bkb3duRml0c0Fib3ZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgZGVmYXVsdCwgdGhlIGRyb3Bkb3duIHdpbGwgYmUgYmVsb3cgdGhlIGlucHV0LiBJZiB3ZSB3YW50IHRvIHBvc2l0aW9uIGl0IGFib3ZlIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5wdXQsIHdlIGFkZCB0aGUgZHJvcHVwIGNsYXNzLlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdG9nZ2xlQ2xhc3ModGhpcy5kcm9wZG93bkNvbnRlbnQsIFwiaXRpX19kcm9wZG93bi1jb250ZW50LS1kcm9wdXBcIiwgcG9zaXRpb25Ecm9wZG93bkFib3ZlSW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgZHJvcGRvd25Db250YWluZXIgaXMgZW5hYmxlZCwgY2FsY3VsYXRlIHBvc3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZHJvcGRvd25Db250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSB3YW50IHRvIHBvc2l0aW9uIHRoZSBkcm9wZG93biBiZWxvdyB0aGUgaW5wdXQsIHdlIG5lZWQgdG8gYWRkIHRoZSBpbnB1dCBoZWlnaHQgdG8gdGhlIHRvcCB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBleHRyYVRvcCA9IHBvc2l0aW9uRHJvcGRvd25BYm92ZUlucHV0ID8gMCA6IHRoaXMudGVsSW5wdXQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSBwbGFjZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duLnN0eWxlLnRvcCA9IFwiXCIuY29uY2F0KGlucHV0VG9wICsgZXh0cmFUb3AsIFwicHhcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5zdHlsZS5sZWZ0ID0gXCJcIi5jb25jYXQocG9zLmxlZnQgKyBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQsIFwicHhcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xvc2UgbWVudSBvbiB3aW5kb3cgc2Nyb2xsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlV2luZG93U2Nyb2xsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczguX2Nsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMuX2hhbmRsZVdpbmRvd1Njcm9sbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9iaW5kRHJvcGRvd25MaXN0ZW5lcnNcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2JpbmREcm9wZG93bkxpc3RlbmVycygpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzOSA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gbW91c2Ugb3ZlciBhIGxpc3QgaXRlbSwganVzdCBoaWdobGlnaHQgdGhhdCBvbmVcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgYWRkIHRoZSBjbGFzcyBcImhpZ2hsaWdodFwiLCBzbyBpZiB0aGV5IGhpdCBcImVudGVyXCIgd2Uga25vdyB3aGljaCBvbmUgdG8gc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZU1vdXNlb3ZlckNvdW50cnlMaXN0ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIGV2ZW50IGRlbGVnYXRpb24sIGFzIHdlJ3JlIGxpc3RlbmluZyBmb3IgdGhpcyBldmVudCBvbiB0aGUgY291bnRyeUxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaXN0SXRlbSA9IGUudGFyZ2V0LmNsb3Nlc3QoXCIuaXRpX19jb3VudHJ5XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM5Ll9oaWdobGlnaHRMaXN0SXRlbShsaXN0SXRlbSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50cnlMaXN0LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIiwgdGhpcy5faGFuZGxlTW91c2VvdmVyQ291bnRyeUxpc3QpO1xuICAgICAgICAgICAgICAgICAgICAvLyBsaXN0ZW4gZm9yIGNvdW50cnkgc2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUNsaWNrQ291bnRyeUxpc3QgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2Y
1XIgbGlzdEl0ZW0gPSBlLnRhcmdldC5jbG9zZXN0KFwiLml0aV9fY291bnRyeVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzOS5fc2VsZWN0TGlzdEl0ZW0obGlzdEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50cnlMaXN0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl9oYW5kbGVDbGlja0NvdW50cnlMaXN0KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2xpY2sgb2ZmIHRvIGNsb3NlXG4gICAgICAgICAgICAgICAgICAgIC8vIChleGNlcHQgd2hlbiB0aGlzIGluaXRpYWwgb3BlbmluZyBjbGljayBpcyBidWJibGluZyB1cClcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgY2Fubm90IGp1c3Qgc3RvcFByb3BhZ2F0aW9uIGFzIGl0IG1heSBiZSBuZWVkZWQgdG8gY2xvc2UgYW5vdGhlciBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICB2YXIgaXNPcGVuaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlQ2xpY2tPZmZUb0Nsb3NlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT3BlbmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzOS5fY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaXNPcGVuaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5faGFuZGxlQ2xpY2tPZmZUb0Nsb3NlKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gbGlzdGVuIGZvciB1cC9kb3duIHNjcm9sbGluZywgZW50ZXIgdG8gc2VsZWN0LCBvciBlc2NhcGUgdG8gY2xvc2VcbiAgICAgICAgICAgICAgICAgICAgLy8gdXNlIGtleWRvd24gYXMga2V5cHJlc3MgZG9lc24ndCBmaXJlIGZvciBub24tY2hhciBrZXlzIGFuZCB3ZSB3YW50IHRvIGNhdGNoIGlmIHRoZXlcbiAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBoaXQgZG93biBhbmQgaG9sZCBpdCB0byBzY3JvbGwgZG93biAobm8ga2V5dXAgZXZlbnQpLlxuICAgICAgICAgICAgICAgICAgICAvLyBsaXN0ZW4gb24gdGhlIGRvY3VtZW50IGJlY2F1c2UgdGhhdCdzIHdoZXJlIGtleSBldmVudHMgYXJlIHRyaWdnZXJlZCBpZiBubyBpbnB1dCBoYXMgZm9jdXNcbiAgICAgICAgICAgICAgICAgICAgdmFyIHF1ZXJ5ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHF1ZXJ5VGltZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVLZXlkb3duT25Ecm9wZG93biA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZG93biBrZXkgZnJvbSBzY3JvbGxpbmcgdGhlIHdob2xlIHBhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgZW50ZXIga2V5IGZyb20gc3VibWl0dGluZyBhIGZvcm0gZXRjXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoWyBcIkFycm93VXBcIiwgXCJBcnJvd0Rvd25cIiwgXCJFbnRlclwiLCBcIkVzY2FwZVwiIF0uaW5jbHVkZXMoZS5rZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXAgYW5kIGRvd24gdG8gbmF2aWdhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09IFwiQXJyb3dVcFwiIHx8IGUua2V5ID09PSBcIkFycm93RG93blwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzOS5faGFuZGxlVXBEb3duS2V5KGUua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUua2V5ID09PSBcIkVudGVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM5Ll9oYW5kbGVFbnRlcktleSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM5Ll9jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxwaGEgY2hhcnMgdG8gcGVyZm9ybSBzZWFyY2hcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2V4IGFsbG93cyBvbmUgbGF0aW4gYWxwaGEgY2hhciBvciBzcGFjZSwgYmFzZWQgb24gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI2OTAwMTMyLzIxNzg2NilcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX3RoaXM5Lm9wdGlvbnMuY291bnRyeVNlYXJjaCAmJiAvXlthLXpBLVrDgC3Dv9CwLdGP0JAt0K8gXSQvLnRlc3QoZS5rZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqdW1wIHRvIGNvdW50cmllcyB0aGF0IHN0YXJ0IHdpdGggdGhlIHF1ZXJ5IHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWVyeVRpbWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChxdWVyeVRpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkgKz0gZS5rZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczkuX3NlYXJjaEZvckNvdW50cnkocXVlcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSB0aW1lciBoaXRzIDEgc2Vjb25kLCByZXNldCB0aGUgcXVlcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkgPSBcIlwiO
11xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDFlMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuX2hhbmRsZUtleWRvd25PbkRyb3Bkb3duKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb3VudHJ5U2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG9GaWx0ZXIgPSBmdW5jdGlvbiBkb0ZpbHRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXRRdWVyeSA9IF90aGlzOS5zZWFyY2hJbnB1dC52YWx1ZS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0UXVlcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM5Ll9maWx0ZXJDb3VudHJpZXMoaW5wdXRRdWVyeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM5Ll9maWx0ZXJDb3VudHJpZXMoXCJcIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXl1cFRpbWVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZVNlYXJjaENoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpbHRlcmluZyBjb3VudHJ5IG5vZGVzIGlzIGV4cGVuc2l2ZSAobG90cyBvZiBET00gbWFuaXB1bGF0aW9uKSwgc28gcmF0ZSBsaW1pdCBpdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXl1cFRpbWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChrZXl1cFRpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5dXBUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvRmlsdGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXVwVGltZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgdGhpcy5faGFuZGxlU2VhcmNoQ2hhbmdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0b3AgcHJvcGFnYXRpb24gb24gc2VhcmNoIGlucHV0IGNsaWNrLCBzbyBkb2Vzbid0IHRyaWdnZXIgY2xpY2stb2ZmLXRvLWNsb3NlIGxpc3RlbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX25vcm1hbGlzZVN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfbm9ybWFsaXNlU3RyaW5nKCkge1xuICAgICAgICAgICAgICAgICAgICB2Y
1XIgcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHMubm9ybWFsaXplKFwiTkZEXCIpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csIFwiXCIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfZmlsdGVyQ291bnRyaWVzXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9maWx0ZXJDb3VudHJpZXMocXVlcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzUmVzZXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXNGaXJzdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY291bnRyeUxpc3QuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5vcm1hbGlzZWRRdWVyeSA9IHRoaXMuX25vcm1hbGlzZVN0cmluZyhxdWVyeSk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb3VudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjID0gdGhpcy5jb3VudHJpZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9ybWFsaXNlZENvdW50cnlOYW1lID0gdGhpcy5fbm9ybWFsaXNlU3RyaW5nKGMubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2Y
1XIgZnVsbERpYWxDb2RlID0gXCIrXCIuY29uY2F0KGMuZGlhbENvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVzZXQgfHwgbm9ybWFsaXNlZENvdW50cnlOYW1lLmluY2x1ZGVzKG5vcm1hbGlzZWRRdWVyeSkgfHwgZnVsbERpYWxDb2RlLmluY2x1ZGVzKG5vcm1hbGlzZWRRdWVyeSkgfHwgYy5pc28yLmluY2x1ZGVzKG5vcm1hbGlzZWRRdWVyeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50cnlMaXN0LmFwcGVuZENoaWxkKGMubm9kZUJ5SWRbdGhpcy5pZF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhpZ2hsaWdodCB0aGUgZmlyc3QgaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0ZpcnN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodExpc3RJdGVtKGMubm9kZUJ5SWRbdGhpcy5pZF0sIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGaXJzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2hhbmRsZVVwRG93bktleVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfaGFuZGxlVXBEb3duS2V5KGtleSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGtleSA9PT0gXCJBcnJvd1VwXCIgPyB0aGlzLmhpZ2hsaWdodGVkSXRlbS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nIDogdGhpcy5oaWdobGlnaHRlZEl0ZW0ubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2tpcCB0aGUgZGl2aWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiaXRpX19kaXZpZGVyXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGtleSA9PT0gXCJBcnJvd1VwXCIgPyBuZXh0LnByZXZpb3VzRWxlbWVudFNpYmxpbmcgOiBuZXh0Lm5leHRFbGVtZW50U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvdW50cnlMaXN0LmNoaWxkRWxlbWVudENvdW50ID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCB3ZSBtdXN0IGJlIGF0IHRoZSBlbmQsIHNvIGxvb3Agcm91bmQgYWdhaW5cbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSBrZXkgPT09IFwiQXJyb3dVcFwiID8gdGhpcy5jb3VudHJ5TGlzdC5sYXN0RWxlbWVudENoaWxkIDogdGhpcy5jb3VudHJ5TGlzdC5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgY291bnRyeSBzZWFyY2ggZW5hYmxlZCwgZG9udCBsb3NlIGZvY3VzIGZyb20gdGhlIHNlYXJjaCBpbnB1dCBvbiB1cC9kb3duXG4gICAgICAgICAgICAgICAgICAgICAgICB2Y
1XIgZG9Gb2N1cyA9ICF0aGlzLm9wdGlvbnMuY291bnRyeVNlYXJjaDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodExpc3RJdGVtKG5leHQsIGRvRm9jdXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb3VudHJ5U2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2Nyb2xsVG8obmV4dCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfaGFuZGxlRW50ZXJLZXlcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2hhbmRsZUVudGVyS2V5KCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oaWdobGlnaHRlZEl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdExpc3RJdGVtKHRoaXMuaGlnaGxpZ2h0ZWRJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX3NlYXJjaEZvckNvdW50cnlcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3NlYXJjaEZvckNvdW50cnkocXVlcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvdW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXJ0c1dpdGgodGhpcy5jb3VudHJpZXNbaV0ubmFtZSwgcXVlcnkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpc3RJdGVtID0gdGhpcy5jb3VudHJpZXNbaV0ubm9kZUJ5SWRbdGhpcy5pZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIGhpZ2hsaWdodGluZyBhbmQgc2Nyb2xsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0TGlzdEl0ZW0obGlzdEl0ZW0sIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zY3JvbGxUbyhsaXN0SXRlbSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9zdGFydHNXaXRoXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9zdGFydHNXaXRoKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEuc3Vic3RyKDAsIGIubGVuZ3RoKS50b0xvd2VyQ2FzZSgpID09PSBiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX3VwZGF0ZVZhbEZyb21OdW1iZXJcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3VwZGF0ZVZhbEZyb21OdW1iZXIoZnVsbE51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICB2Y
1XIgbnVtYmVyID0gZnVsbE51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5mb3JtYXRPbkRpc3BsYXkgJiYgd2luZG93LmludGxUZWxJbnB1dFV0aWxzICYmIHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVzZU5hdGlvbmFsID0gdGhpcy5vcHRpb25zLm5hdGlvbmFsTW9kZSB8fCBudW1iZXIuY2hhckF0KDApICE9PSBcIitcIiAmJiAhdGhpcy5vcHRpb25zLnNob3dTZWxlY3RlZERpYWxDb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pbnRsVGVsSW5wdXRVdGlscyRudSA9IGludGxUZWxJbnB1dFV0aWxzLm51bWJlckZvcm1hdCwgTkFUSU9OQUwgPSBfaW50bFRlbElucHV0VXRpbHMkbnUuTkFUSU9OQUwsIElOVEVSTkFUSU9OQUwgPSBfaW50bFRlbElucHV0VXRpbHMkbnUuSU5URVJOQVRJT05BTDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JtYXQgPSB1c2VOYXRpb25hbCA/IE5BVElPTkFMIDogSU5URVJOQVRJT05BTDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciA9IGludGxUZWxJbnB1dFV0aWxzLmZvcm1hdE51bWJlcihudW1iZXIsIHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YS5pc28yLCBmb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG51bWJlciA9IHRoaXMuX2JlZm9yZVNldE51bWJlcihudW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbElucHV0LnZhbHVlID0gbnVtYmVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX3VwZGF0ZUZsYWdGcm9tTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF91cGRhdGVGbGFnRnJvbU51bWJlcihmdWxsTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwbHVzSW5kZXggPSBmdWxsTnVtYmVyLmluZGV4T2YoXCIrXCIpO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiBpdCBjb250YWlucyBhIHBsdXMsIGRpc2NhcmQgYW55IGNoYXJzIGJlZm9yZSBpdCBlLmcuIGFjY2lkZW50YWwgc3BhY2UgY2hhci5cbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBrZWVwcyB0aGUgc2VsZWN0ZWQgY291bnRyeSBhdXRvLXVwZGF0aW5nIGNvcnJlY3RseSwgd2hpY2ggd2Ugd2FudCBhc1xuICAgICAgICAgICAgICAgICAgICAvLyBsaWJwaG9uZW51bWJlcidzIHZhbGlkYXRpb24vZ2V0TnVtYmVyIG1ldGhvZHMgd2lsbCBpZ25vcmUgdGhlc2UgY2hhcnMgYW55d2F5XG4gICAgICAgICAgICAgICAgICAgIHZhciBudW1iZXIgPSBwbHVzSW5kZXggPyBmdWxsTnVtYmVyLnN1YnN0cmluZyhwbHVzSW5kZXgpIDogZnVsbE51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgYWxyZWFkeSBoYXZlIFVTL0NhbmFkYSBzZWxlY3RlZCwgbWFrZSBzdXJlIHRoZSBudW1iZXIgc3RhcnRzXG4gICAgICAgICAgICAgICAgICAgIC8vIHdpdGggYSArMSBzbyBfZ2V0RGlhbENvZGUgd2lsbCBiZSBhYmxlIHRvIGV4dHJhY3QgdGhlIGFyZWEgY29kZVxuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGU6IGlmIHdlIGRvbnQgeWV0IGhhdmUgc2VsZWN0ZWRDb3VudHJ5RGF0YSwgYnV0IHdlJ3JlIGhlcmUgKHRyeWluZyB0byB1cGRhdGUgdGhlIGZsYWdcbiAgICAgICAgICAgICAgICAgICAgLy8gZnJvbSB0aGUgbnVtYmVyKSwgdGhhdCBtZWFucyB3ZSdyZSBpbml0aWFsaXNpbmcgdGhlIHBsdWdpbiB3aXRoIGEgbnVtYmVyIHRoYXQgYWxyZWFkeSBoYXMgYVxuICAgICAgICAgICAgICAgICAgICAvLyBkaWFsIGNvZGUsIHNvIGZpbmUgdG8gaWdub3JlIHRoaXMgYml0XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZERpYWxDb2RlID0gdGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLmRpYWxDb2RlO1xuICAgICAgICAgICAgICAgICAgICB2Y
1XIgaXNOYW5wID0gc2VsZWN0ZWREaWFsQ29kZSA9PT0gXCIxXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXIgJiYgaXNOYW5wICYmIG51bWJlci5jaGFyQXQoMCkgIT09IFwiK1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtYmVyLmNoYXJBdCgwKSAhPT0gXCIxXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgPSBcIjFcIi5jb25jYXQobnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciA9IFwiK1wiLmNvbmNhdChudW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHNob3dTZWxlY3RlZERpYWxDb2RlIGVuYWJsZWQsIHRoZW4gY29uc2lkZXIgdGhlIHNlbGVjdGVkIGRpYWwgY29kZSB0byBiZSBwYXJ0IG9mIHRoZSBudW1iZXJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93U2VsZWN0ZWREaWFsQ29kZSAmJiBzZWxlY3RlZERpYWxDb2RlICYmIG51bWJlci5jaGFyQXQoMCkgIT09IFwiK1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgPSBcIitcIi5jb25jYXQoc2VsZWN0ZWREaWFsQ29kZSkuY29uY2F0KG51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ5IGFuZCBleHRyYWN0IHZhbGlkIGRpYWwgY29kZSBmcm9tIGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHZhciBkaWFsQ29kZSA9IHRoaXMuX2dldERpYWxDb2RlKG51bWJlciwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBudW1lcmljID0gdGhpcy5fZ2V0TnVtZXJpYyhudW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICB2Y
1XIgaXNvMiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkaWFsQ29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzbzJDb2RlcyA9IHRoaXMuZGlhbENvZGVUb0lzbzJNYXBbdGhpcy5fZ2V0TnVtZXJpYyhkaWFsQ29kZSldO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhlIHJpZ2h0IGNvdW50cnkgaXMgYWxyZWFkeSBzZWxlY3RlZC4gdGhpcyBzaG91bGQgYmUgZmFsc2UgaWYgdGhlIG51bWJlciBpc1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9uZ2VyIHRoYW4gdGhlIG1hdGNoZWQgZGlhbCBjb2RlIGJlY2F1c2UgaW4gdGhpcyBjYXNlIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaWZcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZXJlIGFyZSBtdWx0aXBsZSBjb3VudHJ5IG1hdGNoZXMsIHRoYXQgdGhlIGZpcnN0IG9uZSBpcyBzZWxlY3RlZCAobm90ZTogd2UgY291bGRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgY2hlY2sgdGhhdCBoZXJlLCBidXQgaXQgcmVxdWlyZXMgdGhlIHNhbWUgbG9vcCB0aGF0IHdlIGFscmVhZHkgaGF2ZSBsYXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbHJlYWR5U2VsZWN0ZWQgPSBpc28yQ29kZXMuaW5kZXhPZih0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEuaXNvMikgIT09IC0xICYmIG51bWVyaWMubGVuZ3RoIDw9IGRpYWxDb2RlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNSZWdpb25sZXNzTmFucE51bWJlciA9IHNlbGVjdGVkRGlhbENvZGUgPT09IFwiMVwiICYmIHRoaXMuX2lzUmVnaW9ubGVzc05hbnAobnVtZXJpYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IHVwZGF0ZSB0aGUgZmxhZyBpZjpcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEpIE5PVCAod2UgY3VycmVudGx5IGhhdmUgYSBOQU5QIGZsYWcgc2VsZWN0ZWQsIGFuZCB0aGUgbnVtYmVyIGlzIGEgcmVnaW9ubGVzc05hbnApXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBTkRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEIpIHRoZSByaWdodCBjb3VudHJ5IGlzIG5vdCBhbHJlYWR5IHNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUmVnaW9ubGVzc05hbnBOdW1iZXIgJiYgIWFscmVhZHlTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHVzaW5nIG9ubHlDb3VudHJpZXMgb3B0aW9uLCBpc28yQ29kZXNbMF0gbWF5IGJlIGVtcHR5LCBzbyB3ZSBtdXN0IGZpbmQgdGhlIGZpcnN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9uLWVtcHR5IGluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpc28yQ29kZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzbzJDb2Rlc1tqXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNvMiA9IGlzbzJDb2Rlc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlci5jaGFyQXQoMCkgPT09IFwiK1wiICYmIG51bWVyaWMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnZhbGlkIGRpYWwgY29kZSwgc28gZW1wdHlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGU6IHVzZSBnZXROdW1lcmljIGhlcmUgYmVjYXVzZSB0aGUgbnVtYmVyIGhhcyBub3QgYmVlbiBmb3JtYXR0ZWQgeWV0LCBzbyBjb3VsZCBjb250YWluXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBiYWQgY2hhcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzbzIgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCghbnVtYmVyIHx8IG51bWJlciA9PT0gXCIrXCIpICYmICF0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEuaXNvMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgbm8gc2VsZWN0ZWQgZmxhZywgYW5kIHVzZXIgZWl0aGVyIGNsZWFycyB0aGUgaW5wdXQsIG9yIGp1c3QgdHlwZXMgYSBwbHVzLCB0aGVuIHNob3cgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNvMiA9IHRoaXMuZGVmYXVsdENvdW50cnk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzbzIgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZXRGbGFnKGlzbzIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9pc1JlZ2lvbmxlc3NOYW5wXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9pc1JlZ2lvbmxlc3NOYW5wKG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICB2Y
1XIgbnVtZXJpYyA9IHRoaXMuX2dldE51bWVyaWMobnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWVyaWMuY2hhckF0KDApID09PSBcIjFcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZWFDb2RlID0gbnVtZXJpYy5zdWJzdHIoMSwgMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVnaW9ubGVzc05hbnBOdW1iZXJzLmluZGV4T2YoYXJlYUNvZGUpICE9PSAtMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfaGlnaGxpZ2h0TGlzdEl0ZW1cIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2hpZ2hsaWdodExpc3RJdGVtKGxpc3RJdGVtLCBzaG91bGRGb2N1cykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcHJldkl0ZW0gPSB0aGlzLmhpZ2hsaWdodGVkSXRlbTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2SXRlbS5jbGFzc0xpc3QucmVtb3ZlKFwiaXRpX19oaWdobGlnaHRcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRlZEl0ZW0gPSBsaXN0SXRlbTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRlZEl0ZW0uY2xhc3NMaXN0LmFkZChcIml0aV9faGlnaGxpZ2h0XCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmxhZy5zZXRBdHRyaWJ1dGUoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIiwgbGlzdEl0ZW0uZ2V0QXR0cmlidXRlKFwiaWRcIikpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRm9jdXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJdGVtLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9nZXRDb3VudHJ5RGF0YVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2V0Q291bnRyeURhdGEoaXNvMiwgYWxsb3dGYWlsKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb3VudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvdW50cmllc1tpXS5pc28yID09PSBpc28yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291bnRyaWVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChhbGxvd0ZhaWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvdW50cnkgZGF0YSBmb3IgJ1wiLmNvbmNhdChpc28yLCBcIidcIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX3NldEZsYWdcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3NldEZsYWcoaXNvMikge1xuICAgICAgICAgICAgICAgICAgICB2Y
1XIgX3RoaXMkb3B0aW9uczMgPSB0aGlzLm9wdGlvbnMsIGFsbG93RHJvcGRvd24gPSBfdGhpcyRvcHRpb25zMy5hbGxvd0Ryb3Bkb3duLCBzaG93U2VsZWN0ZWREaWFsQ29kZSA9IF90aGlzJG9wdGlvbnMzLnNob3dTZWxlY3RlZERpYWxDb2RlLCBzaG93RmxhZ3MgPSBfdGhpcyRvcHRpb25zMy5zaG93RmxhZ3MsIGNvdW50cnlTZWFyY2ggPSBfdGhpcyRvcHRpb25zMy5jb3VudHJ5U2VhcmNoO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcHJldkNvdW50cnkgPSB0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEuaXNvMiA/IHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YSA6IHt9O1xuICAgICAgICAgICAgICAgICAgICAvLyBkbyB0aGlzIGZpcnN0IGFzIGl0IHdpbGwgdGhyb3cgYW4gZXJyb3IgYW5kIHN0b3AgaWYgaXNvMiBpcyBpbnZhbGlkXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YSA9IGlzbzIgPyB0aGlzLl9nZXRDb3VudHJ5RGF0YShpc28yLCBmYWxzZSkgOiB7fTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBkZWZhdWx0Q291bnRyeSAtIHdlIG9ubHkgbmVlZCB0aGUgaXNvMiBmcm9tIG5vdyBvbiwgc28ganVzdCBzdG9yZSB0aGF0XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEuaXNvMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0Q291bnRyeSA9IHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YS5pc28yO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG93RmxhZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbGFnQ2xhc3MgPSBpc28yID8gXCJpdGlfX1wiLmNvbmNhdChpc28yKSA6IFwiaXRpX19nbG9iZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZsYWdJbm5lci5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcIml0aV9fZmxhZyBcIi5jb25jYXQoZmxhZ0NsYXNzKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0U2VsZWN0ZWRDb3VudHJ5RmxhZ1RpdGxlQXR0cmlidXRlKGlzbzIsIHNob3dTZWxlY3RlZERpYWxDb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dTZWxlY3RlZERpYWxDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2Y
1XIgZGlhbENvZGUgPSB0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEuZGlhbENvZGUgPyBcIitcIi5jb25jYXQodGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLmRpYWxDb2RlKSA6IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGlhbENvZGUuaW5uZXJIVE1MID0gZGlhbENvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXRXaWR0aCBpcyB6ZXJvIGlmIGlucHV0IGlzIGluIGEgaGlkZGVuIGNvbnRhaW5lciBkdXJpbmcgaW5pdGlhbGlzYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZEZsYWdXaWR0aCA9IHRoaXMuc2VsZWN0ZWRGbGFnLm9mZnNldFdpZHRoIHx8IHRoaXMuX2dldEhpZGRlblNlbGVjdGVkRmxhZ1dpZHRoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGQgNnB4IG9mIHBhZGRpbmcgYWZ0ZXIgdGhlIGdyZXkgc2VsZWN0ZWQtZGlhbC1jb2RlIGJveCwgYXMgdGhpcyBpcyB3aGF0IHdlIHVzZSBpbiB0aGUgY3NzXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1JUTCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGVsSW5wdXQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gXCJcIi5jb25jYXQoc2VsZWN0ZWRGbGFnV2lkdGggKyA2LCBcInB4XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbElucHV0LnN0eWxlLnBhZGRpbmdMZWZ0ID0gXCJcIi5jb25jYXQoc2VsZWN0ZWRGbGFnV2lkdGggKyA2LCBcInB4XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgaW5wdXQncyBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVQbGFjZWhvbGRlcigpO1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGFjdGl2ZSBsaXN0IGl0ZW0gKG9ubHkgaWYgY291bnRyeSBzZWFyY2ggZGlzYWJsZWQsIGFzIGNvdW50cnkgc2VhcmNoIGRvZXNuJ3Qgc3RvcmUgdGhlIGFjdGl2ZSBpdGVtKVxuICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb3dEcm9wZG93biAmJiAhY291bnRyeVNlYXJjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZJdGVtID0gdGhpcy5hY3RpdmVJdGVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldkl0ZW0uY2xhc3NMaXN0LnJlbW92ZShcIml0aV9fYWN0aXZlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZJdGVtLnNldEF0dHJpYnV0ZShcImFyaWEtc2VsZWN0ZWRcIiwgXCJmYWxzZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc28yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYSBwcmVmZXJyZWQgaXRlbSBmaXJzdCwgZWxzZSBmYWxsIGJhY2sgdG8gc3RhbmRhcmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Y
1XIgbmV4dEl0ZW0gPSB0aGlzLmNvdW50cnlMaXN0LnF1ZXJ5U2VsZWN0b3IoXCIjaXRpLVwiLmNvbmNhdCh0aGlzLmlkLCBcIl9faXRlbS1cIikuY29uY2F0KGlzbzIsIFwiLXByZWZlcnJlZFwiKSkgfHwgdGhpcy5jb3VudHJ5TGlzdC5xdWVyeVNlbGVjdG9yKFwiI2l0aS1cIi5jb25jYXQodGhpcy5pZCwgXCJfX2l0ZW0tXCIpLmNvbmNhdChpc28yKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEl0ZW0uc2V0QXR0cmlidXRlKFwiYXJpYS1zZWxlY3RlZFwiLCBcInRydWVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEl0ZW0uY2xhc3NMaXN0LmFkZChcIml0aV9fYWN0aXZlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlSXRlbSA9IG5leHRJdGVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiBpZiB0aGUgZmxhZyBoYXMgY2hhbmdlZCBvciBub3RcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZDb3VudHJ5LmlzbzIgIT09IGlzbzI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfc2V0U2VsZWN0ZWRDb3VudHJ5RmxhZ1RpdGxlQXR0cmlidXRlXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9zZXRTZWxlY3RlZENvdW50cnlGbGFnVGl0bGVBdHRyaWJ1dGUoaXNvMiwgc2hvd1NlbGVjdGVkRGlhbENvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRmxhZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzbzIgJiYgIXNob3dTZWxlY3RlZERpYWxDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IFwiXCIuY29uY2F0KHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YS5uYW1lLCBcIjogK1wiKS5jb25jYXQodGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLmRpYWxDb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc28yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3Igc2NyZWVuIHJlYWRlciBvdXRwdXQsIHdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGUgZGlhbCBjb2RlIGluIHRoZSByZWFkZXIgb3V0cHV0IHR3aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyBqdXN0IHVzZSB0aGUgc2VsZWN0ZWQgY291bnRyeSBuYW1lIGhlcmU6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBcIlVua25vd25cIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmxhZy5zZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiLCB0aXRsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfZ2V0SGlkZGVuU2VsZWN0ZWRGbGFnV2lkdGhcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2dldEhpZGRlblNlbGVjdGVkRmxhZ1dpZHRoKCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0byBnZXQgdGhlIHJpZ2h0IHN0eWxpbmcgdG8gYXBwbHksIGFsbCB3ZSBuZWVkIGlzIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGUgY29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAvLyBhbmQgdGhlbiB0byBpbmplY3QgYS
1BkZWVwIGNsb25lIG9mIHRoZSBzZWxlY3RlZEZsYWcgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyQ2xvbmUgPSB0aGlzLnRlbElucHV0LnBhcmVudE5vZGUuY2xvbmVOb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckNsb25lLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lckNsb25lKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZsYWdzQ29udGFpbmVyQ2xvbmUgPSB0aGlzLmZsYWdzQ29udGFpbmVyLmNsb25lTm9kZSgpO1xuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJDbG9uZS5hcHBlbmRDaGlsZChmbGFnc0NvbnRhaW5lckNsb25lKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkRmxhZ0Nsb25lID0gdGhpcy5zZWxlY3RlZEZsYWcuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBmbGFnc0NvbnRhaW5lckNsb25lLmFwcGVuZENoaWxkKHNlbGVjdGVkRmxhZ0Nsb25lKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gc2VsZWN0ZWRGbGFnQ2xvbmUub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckNsb25lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY29udGFpbmVyQ2xvbmUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2lkdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfdXBkYXRlUGxhY2Vob2xkZXJcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3VwZGF0ZVBsYWNlaG9sZGVyKCkge1xuICAgICAgICAgICAgICAgICAgICB2Y
1XIgX3RoaXMkb3B0aW9uczQgPSB0aGlzLm9wdGlvbnMsIGF1dG9QbGFjZWhvbGRlciA9IF90aGlzJG9wdGlvbnM0LmF1dG9QbGFjZWhvbGRlciwgcGxhY2Vob2xkZXJOdW1iZXJUeXBlID0gX3RoaXMkb3B0aW9uczQucGxhY2Vob2xkZXJOdW1iZXJUeXBlLCBuYXRpb25hbE1vZGUgPSBfdGhpcyRvcHRpb25zNC5uYXRpb25hbE1vZGUsIGN1c3RvbVBsYWNlaG9sZGVyID0gX3RoaXMkb3B0aW9uczQuY3VzdG9tUGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaG91bGRTZXRQbGFjZWhvbGRlciA9IGF1dG9QbGFjZWhvbGRlciA9PT0gXCJhZ2dyZXNzaXZlXCIgfHwgIXRoaXMuaGFkSW5pdGlhbFBsYWNlaG9sZGVyICYmIGF1dG9QbGFjZWhvbGRlciA9PT0gXCJwb2xpdGVcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRsVGVsSW5wdXRVdGlscyAmJiBzaG91bGRTZXRQbGFjZWhvbGRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bWJlclR5cGUgPSBpbnRsVGVsSW5wdXRVdGlscy5udW1iZXJUeXBlW3BsYWNlaG9sZGVyTnVtYmVyVHlwZV07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGxhY2Vob2xkZXIgPSB0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEuaXNvMiA/IGludGxUZWxJbnB1dFV0aWxzLmdldEV4YW1wbGVOdW1iZXIodGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLmlzbzIsIG5hdGlvbmFsTW9kZSwgbnVtYmVyVHlwZSkgOiBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXIgPSB0aGlzLl9iZWZvcmVTZXROdW1iZXIocGxhY2Vob2xkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXN0b21QbGFjZWhvbGRlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXIgPSBjdXN0b21QbGFjZWhvbGRlcihwbGFjZWhvbGRlciwgdGhpcy5zZWxlY3RlZENvdW50cnlEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGVsSW5wdXQuc2V0QXR0cmlidXRlKFwicGxhY2Vob2xkZXJcIiwgcGxhY2Vob2xkZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfc2VsZWN0TGlzdEl0ZW1cIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3NlbGVjdExpc3RJdGVtKGxpc3RJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBzZWxlY3RlZCBmbGFnIGFuZCBhY3RpdmUgbGlzdCBpdGVtXG4gICAgICAgICAgICAgICAgICAgIHZhciBmbGFnQ2hhbmdlZCA9IHRoaXMuX3NldEZsYWcobGlzdEl0ZW0uZ2V0QXR0cmlidXRlKFwiZGF0YS1jb3VudHJ5LWNvZGVcIikpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZURpYWxDb2RlKGxpc3RJdGVtLmdldEF0dHJpYnV0ZShcImRhdGEtZGlhbC1jb2RlXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZm9jdXMgdGhlIGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGVsSW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdDaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyQ291bnRyeUNoYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfY2xvc2VEcm9wZG93blwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfY2xvc2VEcm9wZG93bigpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bkNvbnRlbnQuY2xhc3NMaXN0LmFkZChcIml0aV9faGlkZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZsYWcuc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCBcImZhbHNlXCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmxhZy5yZW1vdmVBdHRyaWJ1dGUoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIik7XG4gICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgYXJyb3dcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bkFycm93LmNsYXNzTGlzdC5yZW1vdmUoXCJpdGlfX2Fycm93LS11cFwiKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdW5iaW5kIGtleSBldmVudHNcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5faGFuZGxlS2V5ZG93bk9uRHJvcGRvd24pO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvdW50cnlTZWFyY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIHRoaXMuX2hhbmRsZVNlYXJjaENoYW5nZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl9oYW5kbGVDbGlja09mZlRvQ2xvc2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50cnlMaXN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIiwgdGhpcy5faGFuZGxlTW91c2VvdmVyQ291bnRyeUxpc3QpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50cnlMaXN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl9oYW5kbGVDbGlja0NvdW50cnlMaXN0KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIG1lbnUgZnJvbSBjb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kcm9wZG93bkNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMudXNlRnVsbHNjcmVlblBvcHVwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgdGhpcy5faGFuZGxlV2luZG93U2Nyb2xsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgI
1H1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyb3Bkb3duLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5kcm9wZG93bik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlcihcImNsb3NlOmNvdW50cnlkcm9wZG93blwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9zY3JvbGxUb1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfc2Nyb2xsVG8oZWxlbWVudCwgbWlkZGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSB0aGlzLmNvdW50cnlMaXN0O1xuICAgICAgICAgICAgICAgICAgICAvLyB3aW5kb3dUb3AgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTQzODQwOTEvMjE3ODY2XG4gICAgICAgICAgICAgICAgICAgIHZhciB3aW5kb3dUb3AgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVySGVpZ2h0ID0gY29udGFpbmVyLm9mZnNldEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lclRvcCA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB3aW5kb3dUb3A7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250YWluZXJCb3R0b20gPSBjb250YWluZXJUb3AgKyBjb250YWluZXJIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50SGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50VG9wID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB3aW5kb3dUb3A7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50Qm90dG9tID0gZWxlbWVudFRvcCArIGVsZW1lbnRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdTY3JvbGxUb3AgPSBlbGVtZW50VG9wIC0gY29udGFpbmVyVG9wICsgY29udGFpbmVyLnNjcm9sbFRvcDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1pZGRsZU9mZnNldCA9IGNvbnRhaW5lckhlaWdodCAvIDIgLSBlbGVtZW50SGVpZ2h0IC8gMjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRUb3AgPCBjb250YWluZXJUb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNjcm9sbCB1cFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1pZGRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Njcm9sbFRvcCAtPSBtaWRkbGVPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuc2Nyb2xsVG9wID0gbmV3U2Nyb2xsVG9wO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnRCb3R0b20gPiBjb250YWluZXJCb3R0b20pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNjcm9sbCBkb3duXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWlkZGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2Nyb2xsVG9wICs9IG1pZGRsZU9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHREaWZmZXJlbmNlID0gY29udGFpbmVySGVpZ2h0IC0gZWxlbWVudEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zY3JvbGxUb3AgPSBuZXdTY3JvbGxUb3AgLSBoZWlnaHREaWZmZXJlbmNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfdXBkYXRlRGlhbENvZGVcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3VwZGF0ZURpYWxDb2RlKG5ld0RpYWxDb2RlQmFyZSkge1xuICAgICAgICAgICAgICAgICAgICB2Y
1XIgaW5wdXRWYWwgPSB0aGlzLnRlbElucHV0LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAvLyBzYXZlIGhhdmluZyB0byBwYXNzIHRoaXMgZXZlcnkgdGltZVxuICAgICAgICAgICAgICAgICAgICB2YXIgbmV3RGlhbENvZGUgPSBcIitcIi5jb25jYXQobmV3RGlhbENvZGVCYXJlKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5ld051bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0VmFsLmNoYXJBdCgwKSA9PT0gXCIrXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZXJlJ3MgYSBwbHVzIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHJlcGxhY2VtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJldkRpYWxDb2RlID0gdGhpcy5fZ2V0RGlhbENvZGUoaW5wdXRWYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZEaWFsQ29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGN1cnJlbnQgbnVtYmVyIGNvbnRhaW5zIGEgdmFsaWQgZGlhbCBjb2RlLCBzbyByZXBsYWNlIGl0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3TnVtYmVyID0gaW5wdXRWYWwucmVwbGFjZShwcmV2RGlhbENvZGUsIG5ld0RpYWxDb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3VycmVudCBudW1iZXIgY29udGFpbnMgYW4gaW52YWxpZCBkaWFsIGNvZGUsIHNvIGRpdGNoIGl0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKG5vIHdheSB0byBkZXRlcm1pbmUgd2hlcmUgdGhlIGludmFsaWQgZGlhbCBjb2RlIGVuZHMgYW5kIHRoZSByZXN0IG9mIHRoZSBudW1iZXIgYmVnaW5zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld051bWJlciA9IG5ld0RpYWxDb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZWxJbnB1dC52YWx1ZSA9IG5ld051bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuYXV0b0luc2VydERpYWxDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRWYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGVyZSBpcyBhbiBleGlzdGluZyB2YWx1ZSB3aXRoIG5vIGRpYWwgY29kZTogcHJlZml4IHRoZSBuZXcgZGlhbCBjb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3TnVtYmVyID0gbmV3RGlhbENvZGUgKyBpbnB1dFZhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3TnVtYmVyID0gbmV3RGlhbENvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbElucHV0LnZhbHVlID0gbmV3TnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfZ2V0RGlhbENvZGVcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2dldERpYWxDb2RlKG51bWJlciwgaW5jbHVkZUFyZWFDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkaWFsQ29kZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgaW50ZXJlc3RlZCBpbiBpbnRlcm5hdGlvbmFsIG51bWJlcnMgKHN0YXJ0aW5nIHdpdGggYSBwbHVzKVxuICAgICAgICAgICAgICAgICAgICBpZiAobnVtYmVyLmNoYXJBdCgwKSA9PT0gXCIrXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1lcmljQ2hhcnMgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXRlcmF0ZSBvdmVyIGNoYXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjID0gbnVtYmVyLmNoYXJBdChpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBjaGFyIGlzIG51bWJlciAoaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzg5MzU2NDkvMjE3ODY2KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4ocGFyc2VJbnQoYywgMTApKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljQ2hhcnMgKz0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgY3VycmVudCBudW1lcmljQ2hhcnMgbWFrZSBhIHZhbGlkIGRpYWwgY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5jbHVkZUFyZWFDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kaWFsQ29kZVRvSXNvMk1hcFtudW1lcmljQ2hhcnNdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RvcmUgdGhlIGFjdHVhbCByYXcgc3RyaW5nICh1c2VmdWwgZm9yIG1hdGNoaW5nIGxhdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxDb2RlID0gbnVtYmVyLnN1YnN0cigwLCBpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kaWFsQ29kZXNbbnVtZXJpY0NoYXJzXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxDb2RlID0gbnVtYmVyLnN1YnN0cigwLCBpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UncmUganVzdCBsb29raW5nIGZvciBhIGRpYWwgY29kZSwgd2UgY2FuIGJyZWFrIGFzIHNvb24gYXMgd2UgZmluZCBvbmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
1H1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIHNlYXJjaGluZyBhcyBzb29uIGFzIHdlIGNhbiAtIGluIHRoaXMgY2FzZSB3aGVuIHdlIGhpdCBtYXggbGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1lcmljQ2hhcnMubGVuZ3RoID09PSB0aGlzLmRpYWxDb2RlTWF4TGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGlhbENvZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfZ2V0RnVsbE51bWJlclwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2V0RnVsbE51bWJlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMudGVsSW5wdXQudmFsdWUudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGlhbENvZGUgPSB0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEuZGlhbENvZGU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcmVmaXg7XG4gICAgICAgICAgICAgICAgICAgIHZhciBudW1lcmljVmFsID0gdGhpcy5fZ2V0TnVtZXJpYyh2YWwpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dTZWxlY3RlZERpYWxDb2RlICYmICF0aGlzLm9wdGlvbnMubmF0aW9uYWxNb2RlICYmIHZhbC5jaGFyQXQoMCkgIT09IFwiK1wiICYmIGRpYWxDb2RlICYmIG51bWVyaWNWYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gdXNpbmcgc2hvd1NlbGVjdGVkRGlhbENvZGUsIGl0IGlzIHZpc2libGUgc28gaXMgZWZmZWN0aXZlbHkgcGFydCBvZiB0aGUgdHlwZWQgbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSBcIitcIi5jb25jYXQoZGlhbENvZGUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJlZml4ICsgdmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2JlZm9yZVNldE51bWJlclwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfYmVmb3JlU2V0TnVtYmVyKGZ1bGxOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG51bWJlciA9IGZ1bGxOdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1NlbGVjdGVkRGlhbENvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWFsQ29kZSA9IHRoaXMuX2dldERpYWxDb2RlKG51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHZhbGlkIGRpYWwgY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpYWxDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gY2FzZSBfZ2V0RGlhbENvZGUgcmV0dXJuZWQgYW4gYXJlYSBjb2RlIGFzIHdlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFsQ29kZSA9IFwiK1wiLmNvbmNhdCh0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEuZGlhbENvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgbG90IG9mIG51bWJlcnMgd2lsbCBoYXZlIGEgc3BhY2Ugc2VwYXJhdGluZyB0aGUgZGlhbCBjb2RlIGFuZCB0aGUgbWFpbiBudW1iZXIsIGFuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvbWUgTkFOUCBudW1iZXJzIHdpbGwgaGF2ZSBhIGh5cGhlbiBlLmcuICsxIDY4NC03MzMtMTIzNCAtIGluIGJvdGggY2FzZXMgd2Ugd2FudCB0byBnZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByaWQgb2YgaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiBkb24ndCBqdXN0IHRyaW0gYWxsIG5vbi1udW1lcmljcyBhcyBtYXkgd2FudCB0byBwcmVzZXJ2ZSBhbiBvcGVuIHBhcmVudGhlc2lzIGV0Y1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IG51bWJlcltkaWFsQ29kZS5sZW5ndGhdID09PSBcIiBcIiB8fCBudW1iZXJbZGlhbENvZGUubGVuZ3RoXSA9PT0gXCItXCIgPyBkaWFsQ29kZS5sZW5ndGggKyAxIDogZGlhbENvZGUubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciA9IG51bWJlci5zdWJzdHIoc3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXAobnVtYmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl90cmlnZ2VyQ291bnRyeUNoYW5nZVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfdHJpZ2dlckNvdW50cnlDaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIoXCJjb3VudHJ5Y2hhbmdlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2Zvcm1hdE51bWJlckFzWW91VHlwZVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfZm9ybWF0TnVtYmVyQXNZb3VUeXBlKCkge1xuICAgICAgICAgICAgICAgICAgICB2Y
1XIgdmFsID0gdGhpcy5fZ2V0RnVsbE51bWJlcigpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gd2luZG93LmludGxUZWxJbnB1dFV0aWxzID8gaW50bFRlbElucHV0VXRpbHMuZm9ybWF0TnVtYmVyQXNZb3VUeXBlKHZhbCwgdGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLmlzbzIpIDogdmFsO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiBzaG93U2VsZWN0ZWREaWFsQ29kZSBhbmQgdGhleSBoYXZlbid0IChyZSl0eXBlZCB0aGUgZGlhbCBjb2RlIGluIHRoZSBpbnB1dCBhcyB3ZWxsLCB0aGVuIHJlbW92ZSB0aGUgZGlhbCBjb2RlXG4gICAgICAgICAgICAgICAgICAgIHZhciBkaWFsQ29kZSA9IHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YS5kaWFsQ29kZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93U2VsZWN0ZWREaWFsQ29kZSAmJiAhdGhpcy5vcHRpb25zLm5hdGlvbmFsTW9kZSAmJiB0aGlzLnRlbElucHV0LnZhbHVlLmNoYXJBdCgwKSAhPT0gXCIrXCIgJiYgcmVzdWx0LmluY2x1ZGVzKFwiK1wiLmNvbmNhdChkaWFsQ29kZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWZ0ZXJEaWFsQ29kZSA9IHJlc3VsdC5zcGxpdChcIitcIi5jb25jYXQoZGlhbENvZGUpKVsxXSB8fCBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFmdGVyRGlhbENvZGUudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJoYW5kbGVBdXRvQ291bnRyeVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVBdXRvQ291bnRyeSgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbml0aWFsQ291bnRyeSA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIG11c3Qgc2V0IHRoaXMgZXZlbiBpZiB0aGVyZSBpcyBhbiBpbml0aWFsIHZhbCBpbiB0aGUgaW5wdXQ6IGluIGNhc2UgdGhlIGluaXRpYWwgdmFsIGlzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnZhbGlkIGFuZCB0aGV5IGRlbGV0ZSBpdCAtIHRoZXkgc2hvdWxkIHNlZSB0aGVpciBhdXRvIGNvdW50cnlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvdW50cnkgPSB3aW5kb3cuaW50bFRlbElucHV0R2xvYmFscy5hdXRvQ291bnRyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlJ3Mgbm8gaW5pdGlhbCB2YWx1ZSBpbiB0aGUgaW5wdXQsIHRoZW4gdXBkYXRlIHRoZSBmbGFnXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMudGVsSW5wdXQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldENvdW50cnkodGhpcy5kZWZhdWx0Q291bnRyeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVBdXRvQ291bnRyeVByb21pc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiaGFuZGxlVXRpbHNcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlVXRpbHMoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsXG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuaW50bFRlbElucHV0VXRpbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlJ3MgYW4gaW5pdGlhbCB2YWx1ZSBpbiB0aGUgaW5wdXQsIHRoZW4gZm9ybWF0IGl0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50ZWxJbnB1dC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVZhbEZyb21OdW1iZXIodGhpcy50ZWxJbnB1dC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLmlzbzIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVQbGFjZWhvbGRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZVV0aWxzU2NyaXB0UHJvbWlzZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiZGVzdHJveVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICAgICAgICAgICAgICB2Y
1XIgZm9ybSA9IHRoaXMudGVsSW5wdXQuZm9ybTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hbGxvd0Ryb3Bkb3duKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIGRyb3Bkb3duIGlzIGNsb3NlZCAoYW5kIHVuYmluZCBsaXN0ZW5lcnMpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmxhZy5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5faGFuZGxlQ2xpY2tTZWxlY3RlZEZsYWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mbGFnc0NvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLl9oYW5kbGVGbGFnc0NvbnRhaW5lcktleWRvd24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGFiZWwgY2xpY2sgaGFja1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhYmVsID0gdGhpcy50ZWxJbnB1dC5jbG9zZXN0KFwibGFiZWxcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5faGFuZGxlTGFiZWxDbGljayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gdW5iaW5kIGhpZGRlbklucHV0IGxpc3RlbmVyc1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oaWRkZW5JbnB1dCAmJiBmb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgdGhpcy5faGFuZGxlSGlkZGVuSW5wdXRTdWJtaXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIHVuYmluZCBhdXRvSW5zZXJ0RGlhbENvZGUgbGlzdGVuZXJzXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b0luc2VydERpYWxDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCB0aGlzLl9oYW5kbGVTdWJtaXRPckJsdXJFdmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbElucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIHRoaXMuX2hhbmRsZVN1Ym1pdE9yQmx1ckV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyB1bmJpbmQga2V5IGV2ZW50cywgYW5kIGN1dC9wYXN0ZSBldmVudHNcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZWxJbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgdGhpcy5faGFuZGxlS2V5RXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbElucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjdXRcIiwgdGhpcy5faGFuZGxlQ2xpcGJvYXJkRXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbElucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwYXN0ZVwiLCB0aGlzLl9oYW5kbGVDbGlwYm9hcmRFdmVudCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBhdHRyaWJ1dGUgb2YgaWQgaW5zdGFuY2U6IGRhdGEtaW50bC10ZWwtaW5wdXQtaWRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZWxJbnB1dC5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLWludGwtdGVsLWlucHV0LWlkXCIpO1xuICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgbWFya3VwIChidXQgbGVhdmUgdGhlIG9yaWdpbmFsIGlucHV0KVxuICAgICAgICAgICAgICAgICAgICB2Y
1XIgd3JhcHBlciA9IHRoaXMudGVsSW5wdXQucGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLnRlbElucHV0LCB3cmFwcGVyKTtcbiAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHdyYXBwZXIpO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgd2luZG93LmludGxUZWxJbnB1dEdsb2JhbHMuaW5zdGFuY2VzW3RoaXMuaWRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0RXh0ZW5zaW9uXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldEV4dGVuc2lvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRsVGVsSW5wdXRVdGlscykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGxUZWxJbnB1dFV0aWxzLmdldEV4dGVuc2lvbih0aGlzLl9nZXRGdWxsTnVtYmVyKCksIHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YS5pc28yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcImdldE51bWJlclwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXROdW1iZXIoZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuaW50bFRlbElucHV0VXRpbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc28yID0gdGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLmlzbzI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50bFRlbElucHV0VXRpbHMuZm9ybWF0TnVtYmVyKHRoaXMuX2dldEZ1bGxOdW1iZXIoKSwgaXNvMiwgZm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcImdldE51bWJlclR5cGVcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0TnVtYmVyVHlwZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRsVGVsSW5wdXRVdGlscykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGxUZWxJbnB1dFV0aWxzLmdldE51bWJlclR5cGUodGhpcy5fZ2V0RnVsbE51bWJlcigpLCB0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEuaXNvMik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC05OTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcImdldFNlbGVjdGVkQ291bnRyeURhdGFcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U2VsZWN0ZWRDb3VudHJ5RGF0YSgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcImdldFZhbGlkYXRpb25FcnJvclwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWxpZGF0aW9uRXJyb3IoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuaW50bFRlbElucHV0VXRpbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc28yID0gdGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLmlzbzI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50bFRlbElucHV0VXRpbHMuZ2V0VmFsaWRhdGlvbkVycm9yKHRoaXMuX2dldEZ1bGxOdW1iZXIoKSwgaXNvMik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC05OTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcImlzVmFsaWROdW1iZXJcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNWYWxpZE51bWJlcihtb2JpbGVPbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLl9nZXRGdWxsTnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cuaW50bFRlbElucHV0VXRpbHMgPyBpbnRsVGVsSW5wdXRVdGlscy5pc1Bvc3NpYmxlTnVtYmVyKHZhbCwgdGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLmlzbzIsIG1vYmlsZU9ubHkpIDogbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcImlzVmFsaWROdW1iZXJQcmVjaXNlXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzVmFsaWROdW1iZXJQcmVjaXNlKCkge1xuICAgICAgICAgICAgICAgICAgICB2Y
1XIgdmFsID0gdGhpcy5fZ2V0RnVsbE51bWJlcigpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LmludGxUZWxJbnB1dFV0aWxzID8gaW50bFRlbElucHV0VXRpbHMuaXNWYWxpZE51bWJlcih2YWwsIHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YS5pc28yKSA6IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJzZXRDb3VudHJ5XCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldENvdW50cnkoaXNvMikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXNvMkxvd2VyID0gaXNvMi50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiBhbHJlYWR5IHNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEuaXNvMiAhPT0gaXNvMkxvd2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRGbGFnKGlzbzJMb3dlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVEaWFsQ29kZSh0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEuZGlhbENvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlckNvdW50cnlDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwic2V0TnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldE51bWJlcihudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgbXVzdCB1cGRhdGUgdGhlIGZsYWcgZmlyc3QsIHdoaWNoIHVwZGF0ZXMgdGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLCB3aGljaCBpcyB1c2VkIGZvclxuICAgICAgICAgICAgICAgICAgICAvLyBmb3JtYXR0aW5nIHRoZSBudW1iZXIgYmVmb3JlIGRpc3BsYXlpbmcgaXRcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZsYWdDaGFuZ2VkID0gdGhpcy5fdXBkYXRlRmxhZ0Zyb21OdW1iZXIobnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVmFsRnJvbU51bWJlcihudW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ0NoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJDb3VudHJ5Q2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcInNldFBsYWNlaG9sZGVyTnVtYmVyVHlwZVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRQbGFjZWhvbGRlck51bWJlclR5cGUodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucGxhY2Vob2xkZXJOdW1iZXJUeXBlID0gdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlUGxhY2Vob2xkZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IF0pO1xuICAgICAgICAgICAgcmV0dXJuIEl0aTtcbiAgICAgICAgfSgpO1xuICAgICAgICAvKioqKioqKioqKioqKioqKioqKipcbiAqICBTVEFUSUMgTUVUSE9EU1xuICoqKioqKioqKioqKioqKioqKioqL1xuICAgICAgICAvLyBnZXQgdGhlIGNvdW50cnkgZGF0YSBvYmplY3RcbiAgICAgICAgaW50bFRlbElucHV0R2xvYmFscy5nZXRDb3VudHJ5RGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFsbENvdW50cmllcztcbiAgICAgICAgfTtcbiAgICAgICAgLy8gaW5qZWN0IGEgPHNjcmlwdD4gZWxlbWVudCB0byBsb2FkIHV0aWxzLmpzXG4gICAgICAgIHZhciBpbmplY3RTY3JpcHQgPSBmdW5jdGlvbiBpbmplY3RTY3JpcHQocGF0aCwgaGFuZGxlU3VjY2VzcywgaGFuZGxlRmFpbHVyZSkge1xuICAgICAgICAgICAgLy8gaW5qZWN0IGEgbmV3IHNjcmlwdCBlbGVtZW50IGludG8gdGhlIHBhZ2VcbiAgICAgICAgICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGZvckVhY2hJbnN0YW5jZShcImhhbmRsZVV0aWxzXCIpO1xuICAgICAgICAgICAgICAgIGlmIChoYW5kbGVTdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3MoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBmb3JFYWNoSW5zdGFuY2UoXCJyZWplY3RVdGlsc1NjcmlwdFByb21pc2VcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZUZhaWx1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlRmFpbHVyZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzY3JpcHQuY2xhc3NOYW1lID0gXCJpdGktbG9hZC11dGlsc1wiO1xuICAgICAgICAgICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIHNjcmlwdC5zcmMgPSBwYXRoO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgICB9O1xuICAgICAgICAvLyBsb2FkIHRoZSB1dGlscyBzY3JpcHRcbiAgICAgICAgaW50bFRlbElucHV0R2xvYmFscy5sb2FkVXRpbHMgPSBmdW5jdGlvbihwYXRoKSB7XG4gICAgICAgICAgICAvLyAyIG9wdGlvbnM6XG4gICAgICAgICAgICAvLyAxKSBub3QgYWxyZWFkeSBzdGFydGVkIGxvYWRpbmcgKHN0YXJ0KVxuICAgICAgICAgICAgLy8gMikgYWxyZWFkeSBzdGFydGVkIGxvYWRpbmcgKGRvIG5vdGhpbmcgLSBqdXN0IHdhaXQgZm9yIHRoZSBvbmxvYWQgY2FsbGJhY2sgdG8gZmlyZSwgd2hpY2ggd2lsbFxuICAgICAgICAgICAgLy8gdHJpZ2dlciBoYW5kbGVVdGlscyBvbiBhbGwgaW5zdGFuY2VzLCBpbnZva2luZyB0aGVpciByZXNvbHZlVXRpbHNTY3JpcHRQcm9taXNlIGZ1bmN0aW9ucylcbiAgICAgICAgICAgIGlmICghd2luZG93LmludGxUZWxJbnB1dFV0aWxzICYmICF3aW5kb3cuaW50bFRlbElucHV0R2xvYmFscy5zdGFydGVkTG9hZGluZ1V0aWxzU2NyaXB0KSB7XG4gICAgICAgICAgICAgICAgLy8gb25seSBkbyB0aGlzIG9uY2VcbiAgICAgICAgICAgICAgICB3aW5kb3cuaW50bFRlbElucHV0R2xvYmFscy5zdGFydGVkTG9hZGluZ1V0aWxzU2NyaXB0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSBoYXZlIHByb21pc2VzLCB0aGVuIHJldHVybi
1BhIHByb21pc2VcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIFByb21pc2UgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluamVjdFNjcmlwdChwYXRoLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5qZWN0U2NyaXB0KHBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH07XG4gICAgICAgIC8vIGRlZmF1bHQgb3B0aW9uc1xuICAgICAgICBpbnRsVGVsSW5wdXRHbG9iYWxzLmRlZmF1bHRzID0gZGVmYXVsdHM7XG4gICAgICAgIC8vIHZlcnNpb25cbiAgICAgICAgaW50bFRlbElucHV0R2xvYmFscy52ZXJzaW9uID0gXCIxOS41LjdcIjtcbiAgICAgICAgLy8gY29udmVuaWVuY2Ugd3JhcHBlclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oaW5wdXQsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHZhciBpdGkgPSBuZXcgSXRpKGlucHV0LCBvcHRpb25zKTtcbiAgICAgICAgICAgIGl0aS5faW5pdCgpO1xuICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKFwiZGF0YS1pbnRsLXRlbC1pbnB1dC1pZFwiLCBpdGkuaWQpO1xuICAgICAgICAgICAgd2luZG93LmludGxUZWxJbnB1dEdsb2JhbHMuaW5zdGFuY2VzW2l0aS5pZF0gPSBpdGk7XG4gICAgICAgICAgICByZXR1cm4gaXRpO1xuICAgICAgICB9O1xuICAgIH0oKTtcbn0pOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///436\n')},603:function(module,__unused_webpack_exports,__webpack_require__){eval("module.exports = __webpack_require__(436);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjAzLmpzIiwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYm9pbGVycGxhdGUvLi9ub2RlX21vZHVsZXMvaW50bC10ZWwtaW5wdXQvaW5kZXguanM/MDVmMyJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuL2J1aWxkL2pzL2ludGxUZWxJbnB1dFwiKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///603\n")},424:function(module){eval('/*!\n * \n * litepicker.umd.js\n * Litepicker v2.0.12 (https://github.com/wakirin/Litepicker)\n * Package: litepicker (https://www.npmjs.com/package/litepicker)\n * License: MIT (https://github.com/wakirin/Litepicker/blob/master/LICENCE.md)\n * Copyright 2019-2021 Rinat G.\n * \n * Hash: 504eef9c08cb42543660\n * \n */\n!function(t,e){ true?module.exports=e():0}(window,(function(){return function(t){var e={};function i(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return t[n].call(o.exports,o,o.exports,i),o.l=!0,o.exports}return i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)i.d(n,o,function(e){return t[e]}.bind(null,o));return n},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=4)}([function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(e,i,n){void 0===e&&(e=null),void 0===i&&(i=null),void 0===n&&(n="en-US"),this.dateInstance="object"==typeof i&&null!==i?i.parse(e instanceof t?e.clone().toJSDate():e):"string"==typeof i?t.parseDateTime(e,i,n):e?t.parseDateTime(e):t.parseDateTime(new Date),this.lang=n}return t.parseDateTime=function(e,i,n){if(void 0===i&&(i="YYYY-MM-DD"),void 0===n&&(n="en-US"),!e)return new Date(NaN);if(e instanceof Date)return new Date(e);if(e instanceof t)return e.clone().toJSDate();if(/^-?\\d{10,}$/.test(e))return t.getDateZeroTime(new Date(Number(e)));if("string"==typeof e){for(var o=[],s=null;null!=(s=t.regex.exec(i));)"\\\\"!==s[1]&&o.push(s);if(o.length){var r={year:null,month:null,shortMonth:null,longMonth:null,day:null,value:""};o[0].index>0&&(r.value+=".*?");for(var a=0,l=Object.entries(o);a<l.length;a++){var c=l[a],h=c[0],p=c[1],d=Number(h),u=t.formatPatterns(p[0],n),m=u.group,f=u.pattern;r[m]=d+1,r.value+=f,r.value+=".*?"}var g=new RegExp("^"+r.value+"$");if(g.test(e)){var v=g.exec(e),y=Number(v[r.year]),b=null;r.month?b=Number(v[r.month])-1:r.shortMonth?b=t.shortMonths(n).indexOf(v[r.shortMonth]):r.longMonth&&(b=t.longMonths(n).indexOf(v[r.longMonth]));var k=Number(v[r.day])||1;return new Date(y,b,k,0,0,0,0)}}}return t.getDateZeroTime(new Date(e))},t.convertArray=function(e,i){return e.map((function(e){return e instanceof Array?e.map((function(e){return new t(e,i)})):new t(e,i)}))},t.getDateZeroTime=function(t){return new Date(t.getFullYear(),t.getMonth(),t.getDate(),0,0,0,0)},t.shortMonths=function(e){return t.MONTH_JS.map((function(t){return new Date(2019,t).toLocaleStr
vendor: 6,792 bytes, line 1
1ing(e,{month:"short"})}))},t.longMonths=function(e){return t.MONTH_JS.map((function(t){return new Date(2019,t).toLocaleString(e,{month:"long"})}))},t.formatPatterns=function(e,i){switch(e){case"YY":case"YYYY":return{group:"year",pattern:"(\\\\d{"+e.length+"})"};case"M":return{group:"month",pattern:"(\\\\d{1,2})"};case"MM":return{group:"month",pattern:"(\\\\d{2})"};case"MMM":return{group:"shortMonth",pattern:"("+t.shortMonths(i).join("|")+")"};case"MMMM":return{group:"longMonth",pattern:"("+t.longMonths(i).join("|")+")"};case"D":return{group:"day",pattern:"(\\\\d{1,2})"};case"DD":return{group:"day",pattern:"(\\\\d{2})"}}},t.prototype.toJSDate=function(){return this.dateInstance},t.prototype.toLocaleString=function(t,e){return this.dateInstance.toLocaleString(t,e)},t.prototype.toDateString=function(){return this.dateInstance.toDateString()},t.prototype.getSeconds=function(){return this.dateInstance.getSeconds()},t.prototype.getDay=function(){return this.dateInstance.getDay()},t.prototype.getTime=function(){return this.dateInstance.getTime()},t.prototype.getDate=function(){return this.dateInstance.getDate()},t.prototype.getMonth=function(){return this.dateInstance.getMonth()},t.prototype.getFullYear=function(){return this.dateInstance.getFullYear()},t.prototype.setMonth=function(t){return this.dateInstance.setMonth(t)},t.prototype.setHours=function(t,e,i,n){void 0===t&&(t=0),void 0===e&&(e=0),void 0===i&&(i=0),void 0===n&&(n=0),this.dateInstance.setHours(t,e,i,n)},t.prototype.setSeconds=function(t){return this.dateInstance.setSeconds(t)},t.prototype.setDate=function(t){return this.dateInstance.setDate(t)},t.prototype.setFullYear=function(t){return this.dateInstance.setFullYear(t)},t.prototype.getWeek=function(t){var e=new Date(this.timestamp()),i=(this.getDay()+(7-t))%7;e.setDate(e.getDate()-i);var n=e.getTime();return e.setMonth(0,1),e.getDay()!==t&&e.setMonth(0,1+(4-e.getDay()+7)%7),1+Math.ceil((n-e.getTime())/6048e5)},t.prototype.clone=function(){return new t(this.toJSDate())},t.prototype.isBetween=function(t,e,i){switch(void 0===i&&(i="()"),i){default:case"()":return this.timestamp()>t.getTime()&&this.timestamp()<e.getTime();case"[)":return this.timestamp()>=t.getTime()&&this.timestamp()<e.getTime();case"(]":return this.timestamp()>t.getTime()&&this.timestamp()<=e.getTime();case"[]":return this.timestamp()>=t.getTime()&&this.timestamp()<=e.getTime()}},t.prototype.isBefore=function(t,e){switch(void 0===e&&(e="seconds"),e){case"second":case"seconds":return t.getTime()>this.getTime();case"day":case"days":return new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()>new Date(this.getFullYear(),this.getMonth(),this.getDate()).getTime();case"month":case"months":return new Date(t.getFullYear(),t.getMonth(),1).getTime()>new Date(this.getFullYear(),this.getMonth(),1).getTime();case"year":case"years":return t.getFullYear()>this.getFullYear()}throw new Error("isBefore: Invalid unit!")},t.prototype.isSameOrBefore=function(t,e){switch(void 0===e&&(e="seconds"),e){case"second":case"seconds":return t.getTime()>=this.getTime();case"day":case"days":return new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()>=new Date(this.getFullYear(),this.getMonth(),this.getDate()).getTime();case"month":case"months":return new Date(t.getFullYear(),t.getMonth(),1).getTime()>=new Date(this.getFullYear(),this.getMonth(),1).getTime()}throw new Error("isSameOrBefore: Invalid unit!")},t.prototype.isAfter=function(t,e){switch(void 0===e&&(e="seconds"),e){case"second":case"seconds":return this.getTime()>t.getTime();case"day":case"days":return new Date(this.getFullYear(),this.getMonth(),this.getDate()).getTime()>new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime();case"month":case"months":return new Date(this.getFullYear(),this.getMonth(),1).getTime()>new Date(t.getFullYear(),t.getMonth(),1).getTime();case"year":case"years":return this.getFullYear()>t.getFullYear()}throw new Error("isAfter: Invalid unit!")},t.prototype.isSameOrAfter=function(t,e){switch(void 0===e&&(e="seconds"),e){case"second":case"seconds":return this.getTime()>=t.getTime();case"day":case"days":return new Date(this.getFullYear(),this.getMonth(),this.getDate()).getTime()>=new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime();case"month":case"months":return new Date(this.getFullYear(),this.getMonth(),1).getTime()>=new Date(t.getFullYear(),t.getMonth(),1).getTime()}throw new Error("isSameOrAfter: Invalid unit!")},t.prototype.isSame=function(t,e){switch(void 0===e&&(e="seconds"),e){case"second":case"seconds":return this.getTime()===t.getTime();case"day":case"days":return new Date(this.getFullYear(),this.getMonth(),this.getDate()).getTime()===new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime();case"month":case"months":return new Date(this.getFullYear(),this.getMonth(),1).getTime()===new Date(t.getFullYear(),t.getMonth(),1).getTime()}throw new Error("isSame: Invalid unit!")},t.prototype.add=function(t,e){switch(void 0===e&&(e="seconds"),e){case"second":case"seconds":this.setSeconds(this.getSeconds()+t);break;case"day":case"days":this.setDate(this.getDate()+t);break;case"month":case"months":this.setMonth(this.getMonth()+t)}return this},t.prototype.subtract=function(t,e){switch(void 0===e&&(e="seconds"),e){case"second":case"seconds":this.setSeconds(this.getSeconds()-t);break;case"day":case"days":this.setDate(this.getDate()-t);break;case"month":case"months":this.setMonth(this.getMonth()-t)}return this},t.prototype.diff=function(t,e){void 0===e&&(e="seconds");switch(e){default:case"second":case"seconds":return this.getTime()-t.getTime();case"day":case"days":return Math.round((this.timestamp()-t.getTime())/864e5);case"month":case"months":}},t.prototype.format=function(e,i){if(void 0===i&&(i="en-US"),"object"==typeof e)return e.output(this.clone().toJSDate());for(var n="",o=[],s=null;null!=(s=t.regex.exec(e));)"\\\\"!==s[1]&&o.push(s);if(o.length){o[0].index>0&&(n+=e.substring(0,o[0].index));for(var r=0,a=Object.entries(o);r<a.length;r++){var l=a[r],c=l[0],h=l[1],p=Number(c);n+=this.formatTokens(h[0],i),o[p+1]&&(n+=e.substring(h.index+h[0].length,o[p+1].index)),p===o.length-1&&(n+=e.substring(h.index+h[0].length))}}return n.replace(/\\\\/g,"")},t.prototype.timestamp=function(){return new Date(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0,0).getTime()},t.prototype.formatTokens=function(e,i){switch(e){case"YY":return String(this.getFullYear()).slice(-2);case"YYYY":return String(this.getFullYear());case"M":return String(this.getMonth()+1);case"MM":return("0"+(this.getMonth()+1)).slice(-2);case"MMM":return t.shortMonths(i)[this.getMonth()];case"MMMM":return t.longMonths(i)[this.getMonth()];case"D":return String(this.getDate());case"DD":return("0"+this.getDate()).slice(-2);default:return""}},t.regex=/(\\
vendor: 7,759 bytes, line 1
1\\)?(Y{2,4}|M{1,4}|D{1,2}|d{1,4})/g,t.MONTH_JS=[0,1,2,3,4,5,6,7,8,9,10,11],t}();e.DateTime=n},function(t,e,i){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])})(t,e)},function(t,e){function i(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}),s=this&&this.__spreadArrays||function(){for(var t=0,e=0,i=arguments.length;e<i;e++)t+=arguments[e].length;var n=Array(t),o=0;for(e=0;e<i;e++)for(var s=arguments[e],r=0,a=s.length;r<a;r++,o++)n[o]=s[r];return n};Object.defineProperty(e,"__esModule",{value:!0});var r=i(5),a=i(0),l=i(3),c=i(2),h=function(t){function e(e){var i=t.call(this,e)||this;return i.preventClick=!1,i.bindEvents(),i}return o(e,t),e.prototype.scrollToDate=function(t){if(this.options.scrollToDate){var e=this.options.startDate instanceof a.DateTime?this.options.startDate.clone():null,i=this.options.endDate instanceof a.DateTime?this.options.endDate.clone():null;!this.options.startDate||t&&t!==this.options.element?t&&this.options.endDate&&t===this.options.elementEnd&&(i.setDate(1),this.options.numberOfMonths>1&&i.isAfter(e)&&i.setMonth(i.getMonth()-(this.options.numberOfMonths-1)),this.calendars[0]=i.clone()):(e.setDate(1),this.calendars[0]=e.clone())}},e.prototype.bindEvents=function(){document.addEventListener("click",this.onClick.bind(this),!0),this.ui=document.createElement("div"),this.ui.className=l.litepicker,this.ui.style.display="none",this.ui.addEventListener("mouseenter",this.onMouseEnter.bind(this),!0),this.ui.addEventListener("mouseleave",this.onMouseLeave.bind(this),!1),this.options.autoRefresh?(this.options.element instanceof HTMLElement&&this.options.element.addEventListener("keyup",this.onInput.bind(this),!0),this.options.elementEnd instanceof HTMLElement&&this.options.elementEnd.addEventListener("keyup",this.onInput.bind(this),!0)):(this.options.element instanceof HTMLElement&&this.options.element.addEventListener("change",this.onInput.bind(this),!0),this.options.elementEnd instanceof HTMLElement&&this.options.elementEnd.addEventListener("change",this.onInput.bind(this),!0)),this.options.parentEl?this.options.parentEl instanceof HTMLElement?this.options.parentEl.appendChild(this.ui):document.querySelector(this.options.parentEl).appendChild(this.ui):this.options.inlineMode?this.options.element instanceof HTMLInputElement?this.options.element.parentNode.appendChild(this.ui):this.options.element.appendChild(this.ui):document.body.appendChild(this.ui),this.updateInput(),this.init(),"function"==typeof this.options.setup&&this.options.setup.call(this,this),this.render(),this.options.inlineMode&&this.show()},e.prototype.updateInput=function(){if(this.options.element instanceof HTMLInputElement){var t=this.options.startDate,e=this.options.endDate;if(this.options.singleMode&&t)this.options.element.value=t.format(this.options.format,this.options.lang);else if(!this.options.singleMode&&t&&e){var i=t.format(this.options.format,this.options.lang),n=e.format(this.options.format,this.options.lang);this.options.elementEnd instanceof HTMLInputElement?(this.options.element.value=i,this.options.elementEnd.value=n):this.options.element.value=""+i+this.options.delimiter+n}t||e||(this.options.element.value="",this.options.elementEnd instanceof HTMLInputElement&&(this.options.elementEnd.value=""))}},e.prototype.isSamePicker=function(t){return t.closest("."+l.litepicker)===this.ui},e.prototype.shouldShown=function(t){return!t.disabled&&(t===this.options.element||this.options.elementEnd&&t===this.options.elementEnd)},e.prototype.shouldResetDatePicked=function(){return this.options.singleMode||2===this.datePicked.length},e.prototype.shouldSwapDatePicked=function(){return 2===this.datePicked.length&&this.datePicked[0].getTime()>this.datePicked[1].getTime()},e.prototype.shouldCheckLockDays=function(){return this.options.disallowLockDaysInRange&&2===this.datePicked.length},e.prototype.onClick=function(t){var e=t.target;if(t.target.shadowRoot&&(e=t.composedPath()[0]),e&&this.ui)if(this.shouldShown(e))this.show(e);else if(e.closest("."+l.litepicker)||!this.isShowning()){if(this.isSamePicker(e))if(this.emit("before:click",e),this.preventClick)this.preventClick=!1;else{if(e.classList.contains(l.dayItem)){if(t.preventDefault(),e.classList.contains(l.isLocked))return;if(this.shouldResetDatePicked()&&(this.datePicked.length=0),this.datePicked[this.datePicked.length]=new a.DateTime(e.dataset.time),this.shouldSwapDatePicked()){var i=this.datePicked[1].clone();this.datePicked[1]=this.datePicked[0].clone(),this.datePicked[0]=i.clone()}if(this.shouldCheckLockDays())c.rangeIsLocked(this.datePicked,this.options)&&(this.emit("error:range",this.datePicked),this.datePicked.length=0);return this.render(),this.emit.apply(this,s(["preselect"],s(this.datePicked).map((function(t){return t.clone()})))),void(this.options.autoApply&&(this.options.singleMode&&this.datePicked.length?(this.setDate(this.datePicked[0]),this.hide()):this.options.singleMode||2!==this.datePicked.length||(this.setDateRange(this.datePicked[0],this.datePicked[1]),this.hide())))}if(e.classList.contains(l.buttonPreviousMonth)){t.preventDefault();var n=0,o=this.options.switchingMonths||this.options.numberOfMonths;if(this.options.splitView){var r=e.closest("."+l.monthItem);n=c.findNestedMonthItem(r),o=1}return this.calendars[n].setMonth(this.calendars[n].getMonth()-o),this.gotoDate(this.calendars[n],n),void this.emit("change:month",this.calendars[n],n)}if(e.classList.contains(l.buttonNextMonth)){t.preventDefault();n=0,o=this.options.switchingMonths||this.options.numberOfMonths;if(this.options.splitView){r=e.closest("."+l.monthItem);n=c.findNestedMonthItem(r),o=1}return this.calendars[n].setMonth(this.calendars[n].getMonth()+o),this.gotoDate(this.calendars[n],n),void this.emit("change:month",this.calendars[n],n)}e.classList.contains(l.buttonCancel)&&(t.preventDefault(),this.hide(),this.emit("button:cancel")),e.classList.contains(l.buttonApply)&&(t.preventDefault(),this.options.singleMode&&this.datePicked.length?this.setDate(this.datePicked[0]):this.options.singleMode||2!==this.datePicked.length||this.setDateRange(this.datePicked[0],this.datePicked[1]),this.hide(),this.emit("button:apply",this.options.startDate,this.options.endDate))}}else this.hide()},e.prototype.showTooltip=function(t,e){var i=this.ui.querySelector("."+l.containerTooltip);i.style.visibility="visible",i.innerHTML=e;var n=this.ui.getBoundingClientRect(),o=i.getBoundingClientRect(),s=t.getBoundingClientRect(),r=s.top,a=s.left;if(this.options.inlineMode&&this.options.parentEl){var c=this.ui.parentNode.getBoundingClientRect();r-=c.top,a-=c.left}else r-=n.top,a-=n.left;r-=o.height,a-=o.width/2,a+=s.width/2,i.style.top=r+"px",i.style.left=a+"px",this.emit("tooltip",i,t)},e.prototype.hideTooltip=function(){this.ui.querySelector("."+l.containerTooltip).style.visibility="hidden"},e.prototype.shouldAllowMouseEnter=function(t){return!this.options.singleMode&&!t.classList.contains(l.isLocked)},e.prototype.shouldAllowRepick=function(){return this.options.elementEnd&&this.options.allowRepick&&this.options.startDate&&this.options.endDate},e.prototype.isDayItem=function(t){return t.classList.contains(l.dayItem)},e.prototype.onMouseEnter=function(t){var e=this,i=t.target;if(this.isDayItem(i)&&this.shouldAllowMouseEnter(i)){if(this.shouldAllowRepick()&&(this.triggerElement===this.options.element?this.datePicked[0]=this.options.endDate.clone():this.triggerElement===this.options.elementEnd&&(this.datePicked[0]=this.options.startDate.clone())),1!==this.datePicked.length)return;var n=this.ui.querySelector("."+l.dayItem+
1\'[data-time="\'+this.datePicked[0].getTime()+\'"]\
vendor: 5,697 bytes, line 1
1'),o=this.datePicked[0].clone(),s=new a.DateTime(i.dataset.time),r=!1;if(o.getTime()>s.getTime()){var c=o.clone();o=s.clone(),s=c.clone(),r=!0}if(Array.prototype.slice.call(this.ui.querySelectorAll("."+l.dayItem)).forEach((function(t){var i=new a.DateTime(t.dataset.time),n=e.renderDay(i);i.isBetween(o,s)&&n.classList.add(l.isInRange),t.className=n.className})),i.classList.add(l.isEndDate),r?(n&&n.classList.add(l.isFlipped),i.classList.add(l.isFlipped)):(n&&n.classList.remove(l.isFlipped),i.classList.remove(l.isFlipped)),this.options.showTooltip){var h=s.diff(o,"day")+1;if("function"==typeof this.options.tooltipNumber&&(h=this.options.tooltipNumber.call(this,h)),h>0){var p=this.pluralSelector(h),d=h+" "+(this.options.tooltipText[p]?this.options.tooltipText[p]:"["+p+"]");this.showTooltip(i,d);var u=window.navigator.userAgent,m=/(iphone|ipad)/i.test(u),f=/OS 1([0-2])/i.test(u);m&&f&&i.dispatchEvent(new Event("click"))}else this.hideTooltip()}}},e.prototype.onMouseLeave=function(t){t.target;this.options.allowRepick&&(!this.options.allowRepick||this.options.startDate||this.options.endDate)&&(this.datePicked.length=0,this.render())},e.prototype.onInput=function(t){var e=this.parseInput(),i=e[0],n=e[1],o=this.options.format;if(this.options.elementEnd?i instanceof a.DateTime&&n instanceof a.DateTime&&i.format(o)===this.options.element.value&&n.format(o)===this.options.elementEnd.value:this.options.singleMode?i instanceof a.DateTime&&i.format(o)===this.options.element.value:i instanceof a.DateTime&&n instanceof a.DateTime&&""+i.format(o)+this.options.delimiter+n.format(o)===this.options.element.value){if(n&&i.getTime()>n.getTime()){var s=i.clone();i=n.clone(),n=s.clone()}this.options.startDate=new a.DateTime(i,this.options.format,this.options.lang),n&&(this.options.endDate=new a.DateTime(n,this.options.format,this.options.lang)),this.updateInput(),this.render();var r=i.clone(),l=0;(this.options.elementEnd?i.format(o)===t.target.value:t.target.value.startsWith(i.format(o)))||(r=n.clone(),l=this.options.numberOfMonths-1),this.emit("selected",this.getStartDate(),this.getEndDate()),this.gotoDate(r,l)}},e}(r.Calendar);e.Litepicker=h},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.findNestedMonthItem=function(t){for(var e=t.parentNode.childNodes,i=0;i<e.length;i+=1){if(e.item(i)===t)return i}return 0},e.dateIsLocked=function(t,e,i){var n=!1;return e.lockDays.length&&(n=e.lockDays.filter((function(i){return i instanceof Array?t.isBetween(i[0],i[1],e.lockDaysInclusivity):i.isSame(t,"day")})).length),n||"function"!=typeof e.lockDaysFilter||(n=e.lockDaysFilter.call(this,t.clone(),null,i)),n},e.rangeIsLocked=function(t,e){var i=!1;return e.lockDays.length&&(i=e.lockDays.filter((function(i){if(i instanceof Array){var n=t[0].toDateString()===i[0].toDateString()&&t[1].toDateString()===i[1].toDateString();return i[0].isBetween(t[0],t[1],e.lockDaysInclusivity)||i[1].isBetween(t[0],t[1],e.lockDaysInclusivity)||n}return i.isBetween(t[0],t[1],e.lockDaysInclusivity)})).length),i||"function"!=typeof e.lockDaysFilter||(i=e.lockDaysFilter.call(this,t[0].clone(),t[1].clone(),t)),i}},function(t,e,i){var n=i(8);"string"==typeof n&&(n=[[t.i,n,""]]);var o={insert:function(t){var e=document.querySelector("head"),i=window._lastElementInsertedByStyleLoader;window.disableLitepickerStyles||(i?i.nextSibling?e.insertBefore(t,i.nextSibling):e.appendChild(t):e.insertBefore(t,e.firstChild),window._lastElementInsertedByStyleLoader=t)},singleton:!1};i(10)(n,o);n.locals&&(t.exports=n.locals)},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(1);e.Litepicker=n.Litepicker,i(11),window.Litepicker=n.Litepicker,e.default=n.Litepicker},function(t,e,i){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])})(t,e)},function(t,e){function i(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)});Object.defineProperty(e,"__esModule",{value:!0});var s=i(6),r=i(0),a=i(3),l=i(2),c=function(t){function e(e){return t.call(this,e)||this}return o(e,t),e.prototype.render=function(){var t=this;this.emit("before:render",this.ui);var e=document.createElement("div");e.className=a.containerMain;var i=document.createElement("div");i.className=a.containerMonths,a["columns"+this.options.numberOfColumns]&&(i.classList.remove(a.columns2,a.columns3,a.columns4),i.classList.add(a["columns"+this.options.numberOfColumns])),this.options.splitView&&i.classList.add(a.splitView),this.options.showWeekNumbers&&i.classList.add(a.showWeekNumbers);for(var n=this.calendars[0].clone(),o=n.getMonth(),s=n.getMonth()+this.options.numberOfMonths,r=0,l=o;l<s;l+=1){var c=n.clone();c.setDate(1),c.setHours(0,0,0,0),this.options.splitView?c=this.calendars[r].clone():c.setMonth(l),i.appendChild(this.renderMonth(c,r)),r+=1}if(this.ui.innerHTML="",e.appendChild(i),this.options.resetButton){var h=void 0;"function"==typeof this.options.resetButton?h=this.options.resetButton.call(this):((h=document.createElement("button")).type="button",h.className=a.resetButton,h.innerHTML=this.options.buttonText.reset),h.addEventListener("click",(function(e){e.preventDefault(),t.clearSelection()})),e.querySelector("."+a.monthItem+":last-child").querySelector("."+a.monthItemHeader).appendChild(h)}this.ui.appendChild(e),this.options.autoApply&&!this.options.footerHTML||this.ui.appendChild(this.renderFooter()),this.options.showTooltip&&this.ui.appendChild(this.renderTooltip()),this.ui.dataset.plugins=(this.options.plugins||[]).join("|"),this.emit
vendor: 6,609 bytes, line 1
1("render",this.ui)},e.prototype.renderMonth=function(t,e){var i=this,n=t.clone(),o=32-new Date(n.getFullYear(),n.getMonth(),32).getDate(),s=document.createElement("div");s.className=a.monthItem;var c=document.createElement("div");c.className=a.monthItemHeader;var h=document.createElement("div");if(this.options.dropdowns.months){var p=document.createElement("select");p.className=a.monthItemName;for(var d=0;d<12;d+=1){var u=document.createElement("option"),m=new r.DateTime(new Date(t.getFullYear(),d,2,0,0,0)),f=new r.DateTime(new Date(t.getFullYear(),d,1,0,0,0));u.value=String(d),u.text=m.toLocaleString(this.options.lang,{month:"long"}),u.disabled=this.options.minDate&&f.isBefore(new r.DateTime(this.options.minDate),"month")||this.options.maxDate&&f.isAfter(new r.DateTime(this.options.maxDate),"month"),u.selected=f.getMonth()===t.getMonth(),p.appendChild(u)}p.addEventListener("change",(function(t){var e=t.target,n=0;if(i.options.splitView){var o=e.closest("."+a.monthItem);n=l.findNestedMonthItem(o)}i.calendars[n].setMonth(Number(e.value)),i.render(),i.emit("change:month",i.calendars[n],n,t)})),h.appendChild(p)}else{(m=document.createElement("strong")).className=a.monthItemName,m.innerHTML=t.toLocaleString(this.options.lang,{month:"long"}),h.appendChild(m)}if(this.options.dropdowns.years){var g=document.createElement("select");g.className=a.monthItemYear;var v=this.options.dropdowns.minYear,y=this.options.dropdowns.maxYear?this.options.dropdowns.maxYear:(new Date).getFullYear();if(t.getFullYear()>y)(u=document.createElement("option")).value=String(t.getFullYear()),u.text=String(t.getFullYear()),u.selected=!0,u.disabled=!0,g.appendChild(u);for(d=y;d>=v;d-=1){var u=document.createElement("option"),b=new r.DateTime(new Date(d,0,1,0,0,0));u.value=String(d),u.text=String(d),u.disabled=this.options.minDate&&b.isBefore(new r.DateTime(this.options.minDate),"year")||this.options.maxDate&&b.isAfter(new r.DateTime(this.options.maxDate),"year"),u.selected=t.getFullYear()===d,g.appendChild(u)}if(t.getFullYear()<v)(u=document.createElement("option")).value=String(t.getFullYear()),u.text=String(t.getFullYear()),u.selected=!0,u.disabled=!0,g.appendChild(u);if("asc"===this.options.dropdowns.years){var k=Array.prototype.slice.call(g.childNodes).reverse();g.innerHTML="",k.forEach((function(t){t.innerHTML=t.value,g.appendChild(t)}))}g.addEventListener("change",(function(t){var e=t.target,n=0;if(i.options.splitView){var o=e.closest("."+a.monthItem);n=l.findNestedMonthItem(o)}i.calendars[n].setFullYear(Number(e.value)),i.render(),i.emit("change:year",i.calendars[n],n,t)})),h.appendChild(g)}else{var w=document.createElement("span");w.className=a.monthItemYear,w.innerHTML=String(t.getFullYear()),h.appendChild(w)}var D=document.createElement("button");D.type="button",D.className=a.buttonPreviousMonth,D.innerHTML=this.options.buttonText.previousMonth;var x=document.createElement("button");x.type="button",x.className=a.buttonNextMonth,x.innerHTML=this.options.buttonText.nextMonth,c.appendChild(D),c.appendChild(h),c.appendChild(x),this.options.minDate&&n.isSameOrBefore(new r.DateTime(this.options.minDate),"month")&&s.classList.add(a.noPreviousMonth),this.options.maxDate&&n.isSameOrAfter(new r.DateTime(this.options.maxDate),"month")&&s.classList.add(a.noNextMonth);var M=document.createElement("div");M.className=a.monthItemWeekdaysRow,this.options.showWeekNumbers&&(M.innerHTML="<div>W</div>");for(var _=1;_<=7;_+=1){var T=3+this.options.firstDay+_,L=document.createElement("div");L.innerHTML=this.weekdayName(T),L.title=this.weekdayName(T,"long"),M.appendChild(L)}var E=document.createElement("div");E.className=a.containerDays;var S=this.calcSkipDays(n);this.options.showWeekNumbers&&S&&E.appendChild(this.renderWeekNumber(n));for(var I=0;I<S;I+=1){var P=document.createElement("div");E.appendChild(P)}for(I=1;I<=o;I+=1)n.setDate(I),this.options.showWeekNumbers&&n.getDay()===this.options.firstDay&&E.appendChild(this.renderWeekNumber(n)),E.appendChild(this.renderDay(n));return s.appendChild(c),s.appendChild(M),s.appendChild(E),this.emit("render:month",s,t),s},e.prototype.renderDay=function(t){t.setHours();var e=document.createElement("div");if(e.className=a.dayItem,e.innerHTML=String(t.getDate()),e.dataset.time=String(t.getTime()),t.toDateString()===(new Date).toDateString()&&e.classList.add(a.isToday),this.datePicked.length)this.datePicked[0].toDateString()===t.toDateString()&&(e.classList.add(a.isStartDate),this.options.singleMode&&e.classList.add(a.isEndDate)),2===this.datePicked.length&&this.datePicked[1].toDateString()===t.toDateString()&&e.classList.add(a.isEndDate),2===this.datePicked.length&&t.isBetween(this.datePicked[0],this.datePicked[1])&&e.classList.add(a.isInRange);else if(this.options.startDate){var i=this.options.startDate,n=this.options.endDate;i.toDateString()===t.toDateString()&&(e.classList.add(a.isStartDate),this.options.singleMode&&e.classList.add(a.isEndDate)),n&&n.toDateString()===t.toDateString()&&e.classList.add(a.isEndDate),i&&n&&t.isBetween(i,n)&&e.classList.add(a.isInRange)}if(this.options.minDate&&t.isBefore(new r.DateTime(this.options.minDate))&&e.classList.add(a.isLocked),this.options.maxDate&&t.isAfter(new r.DateTime(this.options.maxDate))&&e.classList.add(a.isLocked),this.options.minDays>1&&1===this.datePicked.length){var o=this.options.minDays-1,s=this.datePicked[0].clone().subtract(o,"day"),c=this.datePicked[0].clone().add(o,"day");t.isBetween(s,this.datePicked[0],"(]")&&e.classList.add(a.isLocked),t.isBetween(this.datePicked[0],c,"[)")&&e.classList.add(a.isLocked)}if(this.options.maxDays&&1===this.datePicked.length){var h=this.options.maxDays;s=this.datePicked[0].clone().subtract(h,"day"),c=this.datePicked[0].clone().add(h,"day");t.isSameOrBefore(s)&&e.classList.add(a.isLocked),t.isSameOrAfter(c)&&e.classList.add(a.isLocked)}(this.options.selectForward&&1===this.datePicked.length&&t.isBefore(this.datePicked[0])&&e.classList.add(a.isLocked),this.options.selectBackward&&1===this.datePicked.length&&t.isAfter(this.datePicked[0])&&e.classList.add(a.isLocked),l.dateIsLocked(t,this.options,this.datePicked)&&e.classList.add(a.isLocked),this.options.highlightedDays.length)&&(this.options.highlightedDays.filter((function(e){return e instanceof Array?t.isBetween(e[0],e[1],"[]"):e.isSame(t,"day")})).length&&e.classList.add(a.isHighlighted));return e.tabIndex=e.classList.contains("is-locked")?-1:0,this.emit("render:day",e,t),e},e.prototype.renderFooter=function(){var t=document.createElement("div");if(t.className=a.containerFooter,this.options.footerHTML?t.innerHTML=this.options.footerHTML:t.innerHTML=
1\'\\n <span class="\'+a.previewDateRange+\'"></span>\\n <button type="button" class="\'+a.buttonCancel+\'">\'+this.options.buttonText.cancel+\'</button>\\n <button type="button" class="\'+a.buttonApply+\'">\'+this.options.buttonText.apply+"</button>\\n ",this.options.singleMode){if(1===this.datePicked.length){var e=this.datePicked[0].format(this.options.format,this.options.lang);t.querySelector("."+a.previewDateRange).innerHTML=e}}else if(1===this.datePicked.length&&t.querySelector("."+a.buttonApply).setAttribute("disabled",""),2===this.datePicked.length){e=this.datePicked[0].format(this.options.format,this.options.lang);var i=this.datePicked[1].format(this.options.format,this.options.lang);t.querySelector("."+a.previewDateRange).innerHTML=""+e+this.options.delimiter+i}return this.emit("render:footer",t),t},e.prototype.renderWeekNumber=function(t){var e=document.createElement("div"),i=t.getWeek(this.options.firstDay);return e.className=a.weekNumber,e.innerHTML=53===i&&0===t.getMonth()?"53 / 1":i,e},e.prototype.renderTooltip=function(){var t=document.createElement("div");return t.className=a.containerTooltip,t},e.prototype.weekdayName=function(t,e){return void 0===e&&(e="short"),new Date(1970,0,t,12,0,0,0).toLocaleString(this.options.lang,{weekday:e})},e.prototype.calcSkipDays=function(t){var e=t.getDay()-this.options.firstDay;return e<0&&(e+=7),e},e}(s.LPCore);e.Calendar=c},function(t,e,i){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])})(t,e)},function(t,e){function i(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}),s=this&&this.__assign||function(){return(s=Object.assign||function(t){for(var e,i=1,n=arguments.length;i<n;i++)for(var o in e=arguments[i])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t}).apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0});var r=i(7),a=i(0),l=i(1),c=function(t){function e(e){var i=t.call(this)||this;i.datePicked=[],i.calendars=[],i.options={element:null,elementEnd:null,parentEl:null,firstDay:1,format:"YYYY-MM-DD",lang:"en-US",delimiter:" - ",numberOfMonths:1,numberOfColumns:1,startDate:null,endDate:null,zIndex:9999,position:"auto",selectForward:!1,selectBackward:!1,splitView:!1,inlineMode:!1,singleMode:!0,autoApply:!0,allowRepick:!1,showWeekNumbers:!1,showTooltip:!0,scrollToDate:!0,mobileFriendly:!0,resetButton:!1,autoRefresh:!1,lockDaysFormat:"YYYY-MM-DD",lockDays:[],disallowLockDaysInRange:!1,lockDaysInclusivity:"[]",highlightedDaysFormat:"YYYY-MM-DD",highlightedDays:[],dropdowns:{minYear:1990,maxYear:null,months:!1,years:!1},buttonText:{apply:"Apply",cancel:"Cancel",previousMonth:\'<svg width="11" height="16" xmlns="http://www.w3.org/2000/svg"><path d="M7.919 0l2.748 2.667L5.333 8l5.334 5.333L7.919 16 0 8z" fill-rule="nonzero"/></svg>\',nextMonth:\'<svg width="11" height="16" xmlns="http://www.w3.org/2000/svg"><path d="M2.748 16L0 13.333 5.333 8 0 2.667 2.748 0l7.919 8z" fill-rule="nonzero"/></svg>\',reset:\'<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24">\\n <path d="M0 0h24v24H0z" fill="none"/>\\n <path d="M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"/>\\n </svg>\'},tooltipText:{one:"day",other:"days"}},i.options=s(s({},i.options),e.element.dataset),Object.keys(i.options).forEach((function(t){"true"!==i.options[t]&&"false"!==i.options[t]||(i.options[t]="true"===i.options[t])}));var n=s(s({},i.options.dropdowns),e.dropdowns),o=s(s({},i.options.buttonText),e.buttonText),r=s(s({},i.options.tooltipText),e.tooltipText);i.options=s(s({},i.options),e),i.options.dropdowns=s({},n),i.options.buttonText=s({},o),i.options.tooltipText=s({},r),i.options.elementEnd||(i.options.allowRepick=!1),i.options.lockDays.length&&(i.options.lockDays=a.DateTime.convertArray(i.options.lockDays,i.options.lockDaysFormat)),i.options.highlightedDays.length&&(i.options.highlightedDays=a.DateTime.convertArray(i.options.highlightedDays,i.options.highlightedDaysFormat));var l=i.parseInput(),c=l[0],h=l[1];i.options.startDate&&(i.options.singleMode||i.options.endDate)&&(c=new a.DateTime(i.options.startDate,i.options.format,i.options.lang)),c&&i.options.endDate&&(h=new a.DateTime(i.options.endDate,i.options.format,i.options.lang)),c instanceof a.DateTime&&!isNaN(c.getTime())&&(i.options.startDate=c),i.options.startDate&&h instanceof a.DateTime&&!isNaN(h.getTime())&&(i.options.endDate=h),!i.options.singleMode||i.options.startDate instanceof a.DateTime||(i.options.startDate=null),i.options.singleMode||i.options.startDate instanceof a.DateTime&&i.options.endDate instanceof a.DateTime||(i.options.startDate=null,i.options.endDate=null);for(var p=0;p<i.options.numberOfMonths;p+=1){var d=i.options.startDate instanceof a.DateTime?i.options.startDate.clone():new a.DateTime;if(!i.options.startDate&&(0===p||i.options.splitView)){var u=i.options.maxDate?new a.DateTime(i.options.maxDate):null,m=i.options.minDate?new a.DateTime(i.options.minDate):null,f=i.options.numberOfMonths-1;m&&u&&d.isAfter(u)?(d=m.clone()).setDate(1):!m&&u&&d.isAfter(u)&&((d=u.clone()).setDate(1),d.setMonth(d.getMonth()-f))}d.setDate(1),d.setMonth(d.getMonth()+p),i.calendars[p]=d}if(i.options.showTooltip)if(i.options.tooltipPluralSelector)i.pluralSelector=i.options.tooltipPluralSelector;else try{var g=new Intl.PluralRules(i.options.lang);i.pluralSelector=g.select.bind(g)}catch(t){i.pluralSelector=function(t){return 0===Math.abs(t)?"one":"other"}}return i}return o(e,t),e.add=function(t,e){l.Litepicker.prototype[t]=e},e.prototype.DateTime=function(t,e){return t?new a.DateTime(t,e):new a.DateTime},e.prototype.init=function(){var t=this;this.options.plugins&&this.options.plugins.length&&this.options.plugins.forEach((function(e){l.Litepicker.prototype.hasOwnProperty(e)?l.Litepicker.prototype[e].init.call(t,t):console.warn("Litepicker: plugin «"+e+"» not found.")}))},e.prototype.parseInput=function(){var t=this.options.delimiter,e=new RegExp(""+t),i=this.options.element instanceof HTMLInputElement?this.options.element.value.split(t):[];
vendor: 7,411 bytes, line 1
1if(this.options.elementEnd){if(this.options.element instanceof HTMLInputElement&&this.options.element.value.length&&this.options.elementEnd instanceof HTMLInputElement&&this.options.elementEnd.value.length)return[new a.DateTime(this.options.element.value,this.options.format),new a.DateTime(this.options.elementEnd.value,this.options.format)]}else if(this.options.singleMode){if(this.options.element instanceof HTMLInputElement&&this.options.element.value.length)return[new a.DateTime(this.options.element.value,this.options.format)]}else if(this.options.element instanceof HTMLInputElement&&e.test(this.options.element.value)&&i.length&&i.length%2==0){var n=i.slice(0,i.length/2).join(t),o=i.slice(i.length/2).join(t);return[new a.DateTime(n,this.options.format),new a.DateTime(o,this.options.format)]}return[]},e.prototype.isShowning=function(){return this.ui&&"none"!==this.ui.style.display},e.prototype.findPosition=function(t){var e=t.getBoundingClientRect(),i=this.ui.getBoundingClientRect(),n=this.options.position.split(" "),o=window.scrollX||window.pageXOffset,s=window.scrollY||window.pageYOffset,r=0,a=0;if("auto"!==n[0]&&/top|bottom/.test(n[0]))r=e[n[0]]+s,"top"===n[0]&&(r-=i.height);else{r=e.bottom+s;var l=e.bottom+i.height>window.innerHeight,c=e.top+s-i.height>=i.height;l&&c&&(r=e.top+s-i.height)}if(/left|right/.test(n[0])||n[1]&&"auto"!==n[1]&&/left|right/.test(n[1]))a=/left|right/.test(n[0])?e[n[0]]+o:e[n[1]]+o,"right"!==n[0]&&"right"!==n[1]||(a-=i.width);else{a=e.left+o;l=e.left+i.width>window.innerWidth;var h=e.right+o-i.width>=0;l&&h&&(a=e.right+o-i.width)}return{left:a,top:r}},e}(r.EventEmitter);e.LPCore=c},function(t,e,i){"use strict";var n,o="object"==typeof Reflect?Reflect:null,s=o&&"function"==typeof o.apply?o.apply:function(t,e,i){return Function.prototype.apply.call(t,e,i)};n=o&&"function"==typeof o.ownKeys?o.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:function(t){return Object.getOwnPropertyNames(t)};var r=Number.isNaN||function(t){return t!=t};function a(){a.init.call(this)}t.exports=a,a.EventEmitter=a,a.prototype._events=void 0,a.prototype._eventsCount=0,a.prototype._maxListeners=void 0;var l=10;function c(t){return void 0===t._maxListeners?a.defaultMaxListeners:t._maxListeners}function h(t,e,i,n){var o,s,r,a;if("function"!=typeof i)throw new TypeError(\'The "listener" argument must be of type Function. Received type \'+typeof i);if(void 0===(s=t._events)?(s=t._events=Object.create(null),t._eventsCount=0):(void 0!==s.newListener&&(t.emit("newListener",e,i.listener?i.listener:i),s=t._events),r=s[e]),void 0===r)r=s[e]=i,++t._eventsCount;else if("function"==typeof r?r=s[e]=n?[i,r]:[r,i]:n?r.unshift(i):r.push(i),(o=c(t))>0&&r.length>o&&!r.warned){r.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+r.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=t,l.type=e,l.count=r.length,a=l,console&&console.warn&&console.warn(a)}return t}function p(){for(var t=[],e=0;e<arguments.length;e++)t.push(arguments[e]);this.fired||(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,s(this.listener,this.target,t))}function d(t,e,i){var n={fired:!1,wrapFn:void 0,target:t,type:e,listener:i},o=p.bind(n);return o.listener=i,n.wrapFn=o,o}function u(t,e,i){var n=t._events;if(void 0===n)return[];var o=n[e];return void 0===o?[]:"function"==typeof o?i?[o.listener||o]:[o]:i?function(t){for(var e=new Array(t.length),i=0;i<e.length;++i)e[i]=t[i].listener||t[i];return e}(o):f(o,o.length)}function m(t){var e=this._events;if(void 0!==e){var i=e[t];if("function"==typeof i)return 1;if(void 0!==i)return i.length}return 0}function f(t,e){for(var i=new Array(e),n=0;n<e;++n)i[n]=t[n];return i}Object.defineProperty(a,"defaultMaxListeners",{enumerable:!0,get:function(){return l},set:function(t){if("number"!=typeof t||t<0||r(t))throw new RangeError(\'The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received \'+t+".");l=t}}),a.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},a.prototype.setMaxListeners=function(t){if("number"!=typeof t||t<0||r(t))throw new RangeError(\'The value of "n" is out of range. It must be a non-negative number. Received \'+t+".");return this._maxListeners=t,this},a.prototype.getMaxListeners=function(){return c(this)},a.prototype.emit=function(t){for(var e=[],i=1;i<arguments.length;i++)e.push(arguments[i]);var n="error"===t,o=this._events;if(void 0!==o)n=n&&void 0===o.error;else if(!n)return!1;if(n){var r;if(e.length>0&&(r=e[0]),r instanceof Error)throw r;var a=new Error("Unhandled error."+(r?" ("+r.message+")":""));throw a.context=r,a}var l=o[t];if(void 0===l)return!1;if("function"==typeof l)s(l,this,e);else{var c=l.length,h=f(l,c);for(i=0;i<c;++i)s(h[i],this,e)}return!0},a.prototype.addListener=function(t,e){return h(this,t,e,!1)},a.prototype.on=a.prototype.addListener,a.prototype.prependListener=function(t,e){return h(this,t,e,!0)},a.prototype.once=function(t,e){if("function"!=typeof e)throw new TypeError(\'The "listener" argument must be of type Function. Received type \'+typeof e);return this.on(t,d(this,t,e)),this},a.prototype.prependOnceListener=function(t,e){if("function"!=typeof e)throw new TypeError(\'The "listener" argument must be of type Function. Received type \'+typeof e);return this.prependListener(t,d(this,t,e)),this},a.prototype.removeListener=function(t,e){var i,n,o,s,r;if("function"!=typeof e)throw new TypeError(\'The "listener" argument must be of type Function. Received type \'+typeof e);if(void 0===(n=this._events))return this;if(void 0===(i=n[t]))return this;if(i===e||i.listener===e)0==--this._eventsCount?this._events=Object.create(null):(delete n[t],n.removeListener&&this.emit("removeListener",t,i.listener||e));else if("function"!=typeof i){for(o=-1,s=i.length-1;s>=0;s--)if(i[s]===e||i[s].listener===e){r=i[s].listener,o=s;break}if(o<0)return this;0===o?i.shift():function(t,e){for(;e+1<t.length;e++)t[e]=t[e+1];t.pop()}(i,o),1===i.length&&(n[t]=i[0]),void 0!==n.removeListener&&this.emit("removeListener",t,r||e)}return this},a.prototype.off=a.prototype.removeListener,a.prototype.removeAllListeners=function(t){var e,i,n;if(void 0===(i=this._events))return this;if(void 0===i.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==i[t]&&(0==--this._eventsCount?this._events=Object.create(null):delete i[t]),this;if(0===arguments.length){var o,s=Object.keys(i);for(n=0;n<s.length;++n)"removeListener"!==(o=s[n])&&this.removeAllListeners(o);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(e=i[t]))this.removeListener(t,e);else if(void 0!==e)for(n=e.length-1;n>=0;n--)this.removeListener(t,e[n]);return this},a.prototype.listeners=function(t){return u(this,t,!0)},a.prototype.rawListeners=function(t){return u(this,t,!1)},a.listenerCount=function(t,e){return"function"==typeof t.listenerCount?t.listenerCount(e):m.call(t,e)},a.prototype.listenerCount=m,a.prototype.eventNames=function(){return this._eventsCount>0?n(this._events):[]}},function(t,e,i){(e=i(9)(!1)).push([t.i,\
vendor: 10,872 bytes, line 1
1':root{--litepicker-container-months-color-bg: #fff;--litepicker-container-months-box-shadow-color: #ddd;--litepicker-footer-color-bg: #fafafa;--litepicker-footer-box-shadow-color: #ddd;--litepicker-tooltip-color-bg: #fff;--litepicker-month-header-color: #333;--litepicker-button-prev-month-color: #9e9e9e;--litepicker-button-next-month-color: #9e9e9e;--litepicker-button-prev-month-color-hover: #2196f3;--litepicker-button-next-month-color-hover: #2196f3;--litepicker-month-width: calc(var(--litepicker-day-width) * 7);--litepicker-month-weekday-color: #9e9e9e;--litepicker-month-week-number-color: #9e9e9e;--litepicker-day-width: 38px;--litepicker-day-color: #333;--litepicker-day-color-hover: #2196f3;--litepicker-is-today-color: #f44336;--litepicker-is-in-range-color: #bbdefb;--litepicker-is-locked-color: #9e9e9e;--litepicker-is-start-color: #fff;--litepicker-is-start-color-bg: #2196f3;--litepicker-is-end-color: #fff;--litepicker-is-end-color-bg: #2196f3;--litepicker-button-cancel-color: #fff;--litepicker-button-cancel-color-bg: #9e9e9e;--litepicker-button-apply-color: #fff;--litepicker-button-apply-color-bg: #2196f3;--litepicker-button-reset-color: #909090;--litepicker-button-reset-color-hover: #2196f3;--litepicker-highlighted-day-color: #333;--litepicker-highlighted-day-color-bg: #ffeb3b}.show-week-numbers{--litepicker-month-width: calc(var(--litepicker-day-width) * 8)}.litepicker{font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;font-size:0.8em;display:none}.litepicker button{border:none;background:none}.litepicker .container__main{display:-webkit-box;display:-ms-flexbox;display:flex}.litepicker .container__months{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;background-color:var(--litepicker-container-months-color-bg);border-radius:5px;-webkit-box-shadow:0 0 5px var(--litepicker-container-months-box-shadow-color);box-shadow:0 0 5px var(--litepicker-container-months-box-shadow-color);width:calc(var(--litepicker-month-width) + 10px);-webkit-box-sizing:content-box;box-sizing:content-box}.litepicker .container__months.columns-2{width:calc((var(--litepicker-month-width) * 2) + 20px)}.litepicker .container__months.columns-3{width:calc((var(--litepicker-month-width) * 3) + 30px)}.litepicker .container__months.columns-4{width:calc((var(--litepicker-month-width) * 4) + 40px)}.litepicker .container__months.split-view .month-item-header .button-previous-month,.litepicker .container__months.split-view .month-item-header .button-next-month{visibility:visible}.litepicker .container__months .month-item{padding:5px;width:var(--litepicker-month-width);-webkit-box-sizing:content-box;box-sizing:content-box}.litepicker .container__months .month-item-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-weight:500;padding:10px 5px;text-align:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:var(--litepicker-month-header-color)}.litepicker .container__months .month-item-header div{-webkit-box-flex:1;-ms-flex:1;flex:1}.litepicker .container__months .month-item-header div>.month-item-name{margin-right:5px}.litepicker .container__months .month-item-header div>.month-item-year{padding:0}.litepicker .container__months .month-item-header .reset-button{color:var(--litepicker-button-reset-color)}.litepicker .container__months .month-item-header .reset-button>svg{fill:var(--litepicker-button-reset-color)}.litepicker .container__months .month-item-header .reset-button *{pointer-events:none}.litepicker .container__months .month-item-header .reset-button:hover{color:var(--litepicker-button-reset-color-hover)}.litepicker .container__months .month-item-header .reset-button:hover>svg{fill:var(--litepicker-button-reset-color-hover)}.litepicker .container__months .month-item-header .button-previous-month,.litepicker .container__months .month-item-header .button-next-month{visibility:hidden;text-decoration:none;padding:3px 5px;border-radius:3px;-webkit-transition:color 0.3s, border 0.3s;transition:color 0.3s, border 0.3s;cursor:default}.litepicker .container__months .month-item-header .button-previous-month *,.litepicker .container__months .month-item-header .button-next-month *{pointer-events:none}.litepicker .container__months .month-item-header .button-previous-month{color:var(--litepicker-button-prev-month-color)}.litepicker .container__months .month-item-header .button-previous-month>svg,.litepicker .container__months .month-item-header .button-previous-month>img{fill:var(--litepicker-button-prev-month-color)}.litepicker .container__months .month-item-header .button-previous-month:hover{color:var(--litepicker-button-prev-month-color-hover)}.litepicker .container__months .month-item-header .button-previous-month:hover>svg{fill:var(--litepicker-button-prev-month-color-hover)}.litepicker .container__months .month-item-header .button-next-month{color:var(--litepicker-button-next-month-color)}.litepicker .container__months .month-item-header .button-next-month>svg,.litepicker .container__months .month-item-header .button-next-month>img{fill:var(--litepicker-button-next-month-color)}.litepicker .container__months .month-item-header .button-next-month:hover{color:var(--litepicker-button-next-month-color-hover)}.litepicker .container__months .month-item-header .button-next-month:hover>svg{fill:var(--litepicker-button-next-month-color-hover)}.litepicker .container__months .month-item-weekdays-row{display:-webkit-box;display:-ms-flexbox;display:flex;justify-self:center;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;color:var(--litepicker-month-weekday-color)}.litepicker .container__months .month-item-weekdays-row>div{padding:5px 0;font-size:85%;-webkit-box-flex:1;-ms-flex:1;flex:1;width:var(--litepicker-day-width);text-align:center}.litepicker .container__months .month-item:first-child .button-previous-month{visibility:visible}.litepicker .container__months .month-item:last-child .button-next-month{visibility:visible}.litepicker .container__months .month-item.no-previous-month .button-previous-month{visibility:hidden}.litepicker .container__months .month-item.no-next-month .button-next-month{visibility:hidden}.litepicker .container__days{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;justify-self:center;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;text-align:center;-webkit-box-sizing:content-box;box-sizing:content-box}.litepicker .container__days>div,.litepicker .container__days>a{padding:5px 0;width:var(--litepicker-day-width)}.litepicker .container__days .day-item{color:var(--litepicker-day-color);text-align:center;text-decoration:none;border-radius:3px;-webkit-transition:color 0.3s, border 0.3s;transition:color 0.3s, border 0.3s;cursor:default}.litepicker .container__days .day-item:hover{color:var(--litepicker-day-color-hover);-webkit-box-shadow:inset 0 0 0 1px var(--litepicker-day-color-hover);box-shadow:inset 0 0 0 1px var(--litepicker-day-color-hover)}.litepicker .container__days .day-item.is-today{color:var(--litepicker-is-today-color)}.litepicker .container__days .day-item.is-locked{color:var(--litepicker-is-locked-color)}.litepicker .container__days .day-item.is-locked:hover{color:var(--litepicker-is-locked-color);-webkit-box-shadow:none;box-shadow:none;cursor:default}.litepicker .container__days .day-item.is-in-range{background-color:var(--litepicker-is-in-range-color);border-radius:0}.litepicker .container__days .day-item.is-start-date{color:var(--litepicker-is-start-color);background-color:var(--litepicker-is-start-color-bg);border-top-left-radius:5px;border-bottom-left-radius:5px;border-top-right-radius:0;border-bottom-right-radius:0}.litepicker .container__days .day-item.is-start-date.is-flipped{border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:5px;border-bottom-right-radius:5px}.litepicker .container__days .day-item.is-end-date{color:var(--litepicker-is-end-color);background-color:var(--litepicker-is-end-color-bg);border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:5px;border-bottom-right-radius:5px}.litepicker .container__days .day-item.is-end-date.is-flipped{border-top-left-radius:5px;border-bottom-left-radius:5px;border-top-right-radius:0;border-bottom-right-radius:0}.litepicker .container__days .day-item.is-start-date.is-end-date{border-top-left-radius:5px;border-bottom-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px}.litepicker .container__days .day-item.is-highlighted{color:var(--litepicker-highlighted-day-color);background-color:var(--litepicker-highlighted-day-color-bg)}.litepicker .container__days .week-number{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:var(--litepicker-month-week-number-color);font-size:85%}.litepicker .container__footer{text-align:right;padding:10px 5px;margin:0 5px;background-color:var(--litepicker-footer-color-bg);-webkit-box-shadow:inset 0px 3px 3px 0px var(--litepicker-footer-box-shadow-color);box-shadow:inset 0px 3px 3px 0px var(--litepicker-footer-box-shadow-color);border-bottom-left-radius:5px;border-bottom-right-radius:5px}.litepicker .container__footer .preview-date-range{margin-right:10px;font-size:90%}.litepicker .container__footer .button-cancel{background-color:var(--litepicker-button-cancel-color-bg);color:var(--litepicker-button-cancel-color);border:0;padding:3px 7px 4px;border-radius:3px}.litepicker .container__footer .button-cancel *{pointer-events:none}.litepicker .container__footer .button-apply{background-color:var(--litepicker-button-apply-color-bg);color:var(--litepicker-button-apply-color);border:0;padding:3px 7px 4px;border-radius:3px;margin-left:10px;margin-right:10px}.litepicker .container__footer .button-apply:disabled{opacity:0.7}.litepicker .container__footer .button-apply *{pointer-events:none}.litepicker .container__tooltip{position:absolute;margin-top:-4px;padding:4px 8px;border-radius:4px;background-color:var(--litepicker-tooltip-color-bg);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.25);box-shadow:0 1px 3px rgba(0,0,0,0.25);white-space:nowrap;font-size:11px;pointer-events:none;visibility:hidden}.litepicker .container__tooltip:before{position:absolute;bottom:-5px;left:calc(50% - 5px);border-top:5px solid rgba(0,0,0,0.12);border-right:5px solid transparent;border-left:5px solid transparent;content:""}.litepicker .container__tooltip:after{position:absolute;bottom:-4px;left:calc(50% - 4px);border-top:4px solid var(--litepicker-tooltip-color-bg);border-right:4px solid transparent;border-left:4px solid transparent;content:""}\
1\n\',""]),e.locals={showWeekNumbers:"show-week-numbers",litepicker:"litepicker",containerMain:"container__main",containerMonths:"container__months",columns2:"columns-2",columns3:"columns-3",columns4:"columns-4",splitView:"split-view",monthItemHeader:"month-item-header",buttonPreviousMonth:"button-previous-month",buttonNextMonth:"button-next-month",monthItem:"month-item",monthItemName:"month-item-name",monthItemYear:"month-item-year",resetButton:"reset-button",monthItemWeekdaysRow:"month-item-weekdays-row",noPreviousMonth:"no-previous-month",noNextMonth:"no-next-month",containerDays:"container__days",dayItem:"day-item",isToday:"is-today",isLocked:"is-locked",isInRange:"is-in-range",isStartDate:"is-start-date",isFlipped:"is-flipped",isEndDate:"is-end-date",isHighlighted:"is-highlighted",weekNumber:"week-number",containerFooter:"container__footer",previewDateRange:"preview-date-range",buttonCancel:"button-cancel",buttonApply:"button-apply",containerTooltip:"container__tooltip"},t.exports=e}
vendor: 4,572 bytes, line 1
1,function(t,e,i){"use strict";t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var i=function(t,e){var i=t[1]||"",n=t[3];if(!n)return i;if(e&&"function"==typeof btoa){var o=(r=n,a=btoa(unescape(encodeURIComponent(JSON.stringify(r)))),l="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(a),"/*# ".concat(l," */")),s=n.sources.map((function(t){return"/*# sourceURL=".concat(n.sourceRoot||"").concat(t," */")}));return[i].concat(s).concat([o]).join("\\n")}var r,a,l;return[i].join("\\n")}(e,t);return e[2]?"@media ".concat(e[2]," {").concat(i,"}"):i})).join("")},e.i=function(t,i,n){"string"==typeof t&&(t=[[null,t,""]]);var o={};if(n)for(var s=0;s<this.length;s++){var r=this[s][0];null!=r&&(o[r]=!0)}for(var a=0;a<t.length;a++){var l=[].concat(t[a]);n&&o[l[0]]||(i&&(l[2]?l[2]="".concat(i," and ").concat(l[2]):l[2]=i),e.push(l))}},e}},function(t,e,i){"use strict";var n,o={},s=function(){return void 0===n&&(n=Boolean(window&&document&&document.all&&!window.atob)),n},r=function(){var t={};return function(e){if(void 0===t[e]){var i=document.querySelector(e);if(window.HTMLIFrameElement&&i instanceof window.HTMLIFrameElement)try{i=i.contentDocument.head}catch(t){i=null}t[e]=i}return t[e]}}();function a(t,e){for(var i=[],n={},o=0;o<t.length;o++){var s=t[o],r=e.base?s[0]+e.base:s[0],a={css:s[1],media:s[2],sourceMap:s[3]};n[r]?n[r].parts.push(a):i.push(n[r]={id:r,parts:[a]})}return i}function l(t,e){for(var i=0;i<t.length;i++){var n=t[i],s=o[n.id],r=0;if(s){for(s.refs++;r<s.parts.length;r++)s.parts[r](n.parts[r]);for(;r<n.parts.length;r++)s.parts.push(g(n.parts[r],e))}else{for(var a=[];r<n.parts.length;r++)a.push(g(n.parts[r],e));o[n.id]={id:n.id,refs:1,parts:a}}}}function c(t){var e=document.createElement("style");if(void 0===t.attributes.nonce){var n=i.nc;n&&(t.attributes.nonce=n)}if(Object.keys(t.attributes).forEach((function(i){e.setAttribute(i,t.attributes[i])})),"function"==typeof t.insert)t.insert(e);else{var o=r(t.insert||"head");if(!o)throw new Error("Couldn\'t find a style target. This probably means that the value for the \'insert\' parameter is invalid.");o.appendChild(e)}return e}var h,p=(h=[],function(t,e){return h[t]=e,h.filter(Boolean).join("\\n")});function d(t,e,i,n){var o=i?"":n.css;if(t.styleSheet)t.styleSheet.cssText=p(e,o);else{var s=document.createTextNode(o),r=t.childNodes;r[e]&&t.removeChild(r[e]),r.length?t.insertBefore(s,r[e]):t.appendChild(s)}}function u(t,e,i){var n=i.css,o=i.media,s=i.sourceMap;if(o&&t.setAttribute("media",o),s&&btoa&&(n+="\\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(s))))," */")),t.styleSheet)t.styleSheet.cssText=n;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(n))}}var m=null,f=0;function g(t,e){var i,n,o;if(e.singleton){var s=f++;i=m||(m=c(e)),n=d.bind(null,i,s,!1),o=d.bind(null,i,s,!0)}else i=c(e),n=u.bind(null,i,e),o=function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(i)};return n(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap)return;n(t=e)}else o()}}t.exports=function(t,e){(e=e||{}).attributes="object"==typeof e.attributes?e.attributes:{},e.singleton||"boolean"==typeof e.singleton||(e.singleton=s());var i=a(t,e);return l(i,e),function(t){for(var n=[],s=0;s<i.length;s++){var r=i[s],c=o[r.id];c&&(c.refs--,n.push(c))}t&&l(a(t,e),e);for(var h=0;h<n.length;h++){var p=n[h];if(0===p.refs){for(var d=0;d<p.parts.length;d++)p.parts[d]();delete o[p.id]}}}}},function(t,e,i){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,i=1,n=arguments.length;i<n;i++)for(var o in e=arguments[i])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t}).apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0});var o=i(0),s=i(1),r=i(2);s.Litepicker.prototype.show=function(t){void 0===t&&(t=null),this.emit("before:show",t);var e=t||this.options.element;if(this.triggerElement=e,!this.isShowning()){if(this.options.inlineMode)return this.ui.style.position="relative",this.ui.style.display="inline-block",this.ui.style.top=null,this.ui.style.left=null,this.ui.style.bottom=null,void(this.ui.style.right=null);this.scrollToDate(t),this.render(),this.ui.style.position="absolute",this.ui.style.display="block",this.ui.style.zIndex=this.options.zIndex;var i=this.findPosition(e);this.ui.style.top=i.top+"px",this.ui.style.left=i.left+"px",this.ui.style.right=null,this.ui.style.bottom=null,this.emit
vendor: 5,260 bytes, line 1
1("show",t)}},s.Litepicker.prototype.hide=function(){this.isShowning()&&(this.datePicked.length=0,this.updateInput(),this.options.inlineMode?this.render():(this.ui.style.display="none",this.emit("hide")))},s.Litepicker.prototype.getDate=function(){return this.getStartDate()},s.Litepicker.prototype.getStartDate=function(){return this.options.startDate?this.options.startDate.clone():null},s.Litepicker.prototype.getEndDate=function(){return this.options.endDate?this.options.endDate.clone():null},s.Litepicker.prototype.setDate=function(t,e){void 0===e&&(e=!1);var i=new o.DateTime(t,this.options.format,this.options.lang);r.dateIsLocked(i,this.options,[i])&&!e?this.emit("error:date",i):(this.setStartDate(t),this.options.inlineMode&&this.render(),this.emit("selected",this.getDate()))},s.Litepicker.prototype.setStartDate=function(t){t&&(this.options.startDate=new o.DateTime(t,this.options.format,this.options.lang),this.updateInput())},s.Litepicker.prototype.setEndDate=function(t){t&&(this.options.endDate=new o.DateTime(t,this.options.format,this.options.lang),this.options.startDate.getTime()>this.options.endDate.getTime()&&(this.options.endDate=this.options.startDate.clone(),this.options.startDate=new o.DateTime(t,this.options.format,this.options.lang)),this.updateInput())},s.Litepicker.prototype.setDateRange=function(t,e,i){void 0===i&&(i=!1),this.triggerElement=void 0;var n=new o.DateTime(t,this.options.format,this.options.lang),s=new o.DateTime(e,this.options.format,this.options.lang);(this.options.disallowLockDaysInRange?r.rangeIsLocked([n,s],this.options):r.dateIsLocked(n,this.options,[n,s])||r.dateIsLocked(s,this.options,[n,s]))&&!i?this.emit("error:range",[n,s]):(this.setStartDate(n),this.setEndDate(s),this.options.inlineMode&&this.render(),this.updateInput(),this.emit("selected",this.getStartDate(),this.getEndDate()))},s.Litepicker.prototype.gotoDate=function(t,e){void 0===e&&(e=0);var i=new o.DateTime(t);i.setDate(1),this.calendars[e]=i.clone(),this.render()},s.Litepicker.prototype.setLockDays=function(t){this.options.lockDays=o.DateTime.convertArray(t,this.options.lockDaysFormat),this.render()},s.Litepicker.prototype.setHighlightedDays=function(t){this.options.highlightedDays=o.DateTime.convertArray(t,this.options.highlightedDaysFormat),this.render()},s.Litepicker.prototype.setOptions=function(t){delete t.element,delete t.elementEnd,delete t.parentEl,t.startDate&&(t.startDate=new o.DateTime(t.startDate,this.options.format,this.options.lang)),t.endDate&&(t.endDate=new o.DateTime(t.endDate,this.options.format,this.options.lang));var e=n(n({},this.options.dropdowns),t.dropdowns),i=n(n({},this.options.buttonText),t.buttonText),s=n(n({},this.options.tooltipText),t.tooltipText);this.options=n(n({},this.options),t),this.options.dropdowns=n({},e),this.options.buttonText=n({},i),this.options.tooltipText=n({},s),!this.options.singleMode||this.options.startDate instanceof o.DateTime||(this.options.startDate=null,this.options.endDate=null),this.options.singleMode||this.options.startDate instanceof o.DateTime&&this.options.endDate instanceof o.DateTime||(this.options.startDate=null,this.options.endDate=null);for(var r=0;r<this.options.numberOfMonths;r+=1){var a=this.options.startDate?this.options.startDate.clone():new o.DateTime;a.setDate(1),a.setMonth(a.getMonth()+r),this.calendars[r]=a}this.options.lockDays.length&&(this.options.lockDays=o.DateTime.convertArray(this.options.lockDays,this.options.lockDaysFormat)),this.options.highlightedDays.length&&(this.options.highlightedDays=o.DateTime.convertArray(this.options.highlightedDays,this.options.highlightedDaysFormat)),this.render(),this.options.inlineMode&&this.show(),this.updateInput()},s.Litepicker.prototype.clearSelection=function(){this.options.startDate=null,this.options.endDate=null,this.datePicked.length=0,this.updateInput(),this.isShowning()&&this.render(),this.emit("clear:selection")},s.Litepicker.prototype.destroy=function(){this.ui&&this.ui.parentNode&&(this.ui.parentNode.removeChild(this.ui),this.ui=null),this.emit("destroy")}}])}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI0LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2JvaWxlcnBsYXRlLy4vbm9kZV9tb2R1bGVzL2xpdGVwaWNrZXIvZGlzdC9saXRlcGlja2VyLnVtZC5qcz9lN2RiIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogXG4gKiBsaXRlcGlja2VyLnVtZC5qc1xuICogTGl0ZXBpY2tlciB2Mi4wLjEyIChodHRwczovL2dpdGh1Yi5jb20vd2FraXJpbi9MaXRlcGlja2VyKVxuICogUGFja2FnZTogbGl0ZXBpY2tlciAoaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbGl0ZXBpY2tlcilcbiAqIExpY2Vuc2U6IE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3dha2lyaW4vTGl0ZXBpY2tlci9ibG9iL21hc3Rlci9MSUNFTkNFLm1kKVxuICogQ29weXJpZ2h0IDIwMTktMjAyMSBSaW5hdCBHLlxuICogICAgIFxuICogSGFzaDogNTA0ZWVmOWMwOGNiNDI1NDM2NjBcbiAqIFxuICovXG4hZnVuY3Rpb24odCxlKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShcIkxpdGVwaWNrZXJcIixbXSxlKTpcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cz9leHBvcnRzLkxpdGVwaWNrZXI9ZSgpOnQuTGl0ZXBpY2tlcj1lKCl9KHdpbmRvdywoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gaShuKXtpZihlW25dKXJldHVybi
1BlW25dLmV4cG9ydHM7dmFyIG89ZVtuXT17aTpuLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIHRbbl0uY2FsbChvLmV4cG9ydHMsbyxvLmV4cG9ydHMsaSksby5sPSEwLG8uZXhwb3J0c31yZXR1cm4gaS5tPXQsaS5jPWUsaS5kPWZ1bmN0aW9uKHQsZSxuKXtpLm8odCxlKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7ZW51bWVyYWJsZTohMCxnZXQ6bn0pfSxpLnI9ZnVuY3Rpb24odCl7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOlwiTW9kdWxlXCJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0saS50PWZ1bmN0aW9uKHQsZSl7aWYoMSZlJiYodD1pKHQpKSw4JmUpcmV0dXJuIHQ7aWYoNCZlJiZcIm9iamVjdFwiPT10eXBlb2YgdCYmdCYmdC5fX2VzTW9kdWxlKXJldHVybiB0O3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoaS5yKG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KSwyJmUmJlwic3RyaW5nXCIhPXR5cGVvZiB0KWZvcih2YXIgbyBpbiB0KWkuZChuLG8sZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19LmJpbmQobnVsbCxvKSk7cmV0dXJuIG59LGkubj1mdW5jdGlvbih0KXt2YXIgZT10JiZ0Ll9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gdC5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiB0fTtyZXR1cm4gaS5kKGUsXCJhXCIsZSksZX0saS5vPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfSxpLnA9XCJcIixpKGkucz00KX0oW2Z1bmN0aW9uKHQsZSxpKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxpLG4pe3ZvaWQgMD09PWUmJihlPW51bGwpLHZvaWQgMD09PWkmJihpPW51bGwpLHZvaWQgMD09PW4mJihuPVwiZW4tVVNcIiksdGhpcy5kYXRlSW5zdGFuY2U9XCJvYmplY3RcIj09dHlwZW9mIGkmJm51bGwhPT1pP2kucGFyc2UoZSBpbnN0YW5jZW9mIHQ/ZS5jbG9uZSgpLnRvSlNEYXRlKCk6ZSk6XCJzdHJpbmdcIj09dHlwZW9mIGk/dC5wYXJzZURhdGVUaW1lKGUsaSxuKTplP3QucGFyc2VEYXRlVGltZShlKTp0LnBhcnNlRGF0ZVRpbWUobmV3IERhdGUpLHRoaXMubGFuZz1ufXJldHVybiB0LnBhcnNlRGF0ZVRpbWU9ZnVuY3Rpb24oZSxpLG4pe2lmKHZvaWQgMD09PWkmJihpPVwiWVlZWS1NTS1ERFwiKSx2b2lkIDA9PT1uJiYobj1cImVuLVVTXCIpLCFlKXJldHVybi
1BuZXcgRGF0ZShOYU4pO2lmKGUgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuZXcgRGF0ZShlKTtpZihlIGluc3RhbmNlb2YgdClyZXR1cm4gZS5jbG9uZSgpLnRvSlNEYXRlKCk7aWYoL14tP1xcZHsxMCx9JC8udGVzdChlKSlyZXR1cm4gdC5nZXREYXRlWmVyb1RpbWUobmV3IERhdGUoTnVtYmVyKGUpKSk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpe2Zvcih2YXIgbz1bXSxzPW51bGw7bnVsbCE9KHM9dC5yZWdleC5leGVjKGkpKTspXCJcXFxcXCIhPT1zWzFdJiZvLnB1c2gocyk7aWYoby5sZW5ndGgpe3ZhciByPXt5ZWFyOm51bGwsbW9udGg6bnVsbCxzaG9ydE1vbnRoOm51bGwsbG9uZ01vbnRoOm51bGwsZGF5Om51bGwsdmFsdWU6XCJcIn07b1swXS5pbmRleD4wJiYoci52YWx1ZSs9XCIuKj9cIik7Zm9yKHZhciBhPTAsbD1PYmplY3QuZW50cmllcyhvKTthPGwubGVuZ3RoO2ErKyl7dmFyIGM9bFthXSxoPWNbMF0scD1jWzFdLGQ9TnVtYmVyKGgpLHU9dC5mb3JtYXRQYXR0ZXJucyhwWzBdLG4pLG09dS5ncm91cCxmPXUucGF0dGVybjtyW21dPWQrMSxyLnZhbHVlKz1mLHIudmFsdWUrPVwiLio/XCJ9dmFyIGc9bmV3IFJlZ0V4cChcIl5cIityLnZhbHVlK1wiJFwiKTtpZihnLnRlc3QoZSkpe3ZhciB2PWcuZXhlYyhlKSx5PU51bWJlcih2W3IueWVhcl0pLGI9bnVsbDtyLm1vbnRoP2I9TnVtYmVyKHZbci5tb250aF0pLTE6ci5zaG9ydE1vbnRoP2I9dC5zaG9ydE1vbnRocyhuKS5pbmRleE9mKHZbci5zaG9ydE1vbnRoXSk6ci5sb25nTW9udGgmJihiPXQubG9uZ01vbnRocyhuKS5pbmRleE9mKHZbci5sb25nTW9udGhdKSk7dmFyIGs9TnVtYmVyKHZbci5kYXldKXx8MTtyZXR1cm4gbmV3IERhdGUoeSxiLGssMCwwLDAsMCl9fX1yZXR1cm4gdC5nZXREYXRlWmVyb1RpbWUobmV3IERhdGUoZSkpfSx0LmNvbnZlcnRBcnJheT1mdW5jdGlvbihlLGkpe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBBcnJheT9lLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0KGUsaSl9KSk6bmV3IHQoZSxpKX0pKX0sdC5nZXREYXRlWmVyb1RpbWU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBEYXRlKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCksdC5nZXREYXRlKCksMCwwLDAsMCl9LHQuc2hvcnRNb250aHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuTU9OVEhfSlMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbmV3IERhdGUoMjAxOSx0KS50b0xvY2FsZVN0cmluZyhlLHttb250aDpcInNob3J0XCJ9KX0pKX0sdC5sb25nTW9udGhzPWZ1bmN0aW9uKGUpe3JldHVybiB0Lk1PTlRIX0pTLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBEYXRlKDIwMTksdCkudG9Mb2NhbGVTdHJpbmcoZSx7bW9udGg6XCJsb25nXCJ9KX0pKX0sdC5mb3JtYXRQYXR0ZXJucz1mdW5jdGlvbihlLGkpe3N3aXRjaChlKXtjYXNlXCJZWVwiOmNhc2VcIllZWVlcIjpyZXR1cm57Z3JvdXA6XCJ5ZWFyXCIscGF0dGVybjpcIihcXFxcZHtcIitlLmxlbmd0aCtcIn0pXCJ9O2Nhc2VcIk1cIjpyZXR1cm57Z3JvdXA6XCJtb250aFwiLHBhdHRlcm46XCIoXFxcXGR7MSwyfSlcIn07Y2FzZVwiTU1cIjpyZXR1cm57Z3JvdXA6XCJtb250aFwiLHBhdHRlcm46XCIoXFxcXGR7Mn0pXCJ9O2Nhc2VcIk1NTVwiOnJldHVybntncm91cDpcInNob3J0TW9udGhcIixwYXR0ZXJuOlwiKFwiK3Quc2hvcnRNb250aHMoaSkuam9pbihcInxcIikrXCIpXCJ9O2Nhc2VcIk1NTU1cIjpyZXR1cm57Z3JvdXA6XCJsb25nTW9udGhcIixwYXR0ZXJuOlwiKFwiK3QubG9uZ01vbnRocyhpKS5qb2luKFwifFwiKStcIilcIn07Y2FzZVwiRFwiOnJldHVybntncm91cDpcImRheVwiLHBhdHRlcm46XCIoXFxcXGR7MSwyfSlcIn07Y2FzZVwiRERcIjpyZXR1cm57Z3JvdXA6XCJkYXlcIixwYXR0ZXJuOlwiKFxcXFxkezJ9KVwifX19LHQucHJvdG90eXBlLnRvSlNEYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0ZUluc3RhbmNlfSx0LnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmRhdGVJbnN0YW5jZS50b0xvY2FsZVN0cmluZyh0LGUpfSx0LnByb3RvdHlwZS50b0RhdGVTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRlSW5zdGFuY2UudG9EYXRlU3RyaW5nKCl9LHQucHJvdG90eXBlLmdldFNlY29uZHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRlSW5zdGFuY2UuZ2V0U2Vjb25kcygpfSx0LnByb3RvdHlwZS5nZXREYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRlSW5zdGFuY2UuZ2V0RGF5KCl9LHQucHJvdG90eXBlLmdldFRpbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRlSW5zdGFuY2UuZ2V0VGltZSgpfSx0LnByb3RvdHlwZS5nZXREYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0ZUluc3RhbmNlLmdldERhdGUoKX0sdC5wcm90b3R5cGUuZ2V0TW9udGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRlSW5zdGFuY2UuZ2V0TW9udGgoKX0sdC5wcm90b3R5cGUuZ2V0RnVsbFllYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRlSW5zdGFuY2UuZ2V0RnVsbFllYXIoKX0sdC5wcm90b3R5cGUuc2V0TW9udGg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGF0ZUluc3RhbmNlLnNldE1vbnRoKHQpfSx0LnByb3RvdHlwZS5zZXRIb3Vycz1mdW5jdGlvbih0LGUsaSxuKXt2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1lJiYoZT0wKSx2b2lkIDA9PT1pJiYoaT0wKSx2b2lkIDA9PT1uJiYobj0wKSx0aGlzLmRhdGVJbnN0YW5jZS5zZXRIb3Vycyh0LGUsaSxuKX0sdC5wcm90b3R5cGUuc2V0U2Vjb25kcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kYXRlSW5zdGFuY2Uuc2V0U2Vjb25kcyh0KX0sdC5wcm90b3R5cGUuc2V0RGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kYXRlSW5zdGFuY2Uuc2V0RGF0ZSh0KX0sdC5wcm90b3R5cGUuc2V0RnVsbFllYXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGF0ZUluc3RhbmNlLnNldEZ1bGxZZWFyKHQpfSx0LnByb3RvdHlwZS5nZXRXZWVrPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBEYXRlKHRoaXMudGltZXN0YW1wKCkpLGk9KHRoaXMuZ2V0RGF5KCkrKDctdCkpJTc7ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpLWkpO3ZhciBuPWUuZ2V0VGltZSgpO3JldHVybiBlLnNldE1vbnRoKDAsMSksZS5nZXREYXkoKSE9PXQmJmUuc2V0TW9udGgoMCwxKyg0LWUuZ2V0RGF5KCkrNyklNyksMStNYXRoLmNlaWwoKG4tZS5nZXRUaW1lKCkpLzYwNDhlNSl9LHQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KHRoaXMudG9KU0RhdGUoKSl9LHQucHJvdG90eXBlLmlzQmV0d2Vlbj1mdW5jdGlvbih0LGUsaSl7c3dpdGNoKHZvaWQgMD09PWkmJihpPVwiKClcIiksaSl7ZGVmYXVsdDpjYXNlXCIoKVwiOnJldHVybi
1B0aGlzLnRpbWVzdGFtcCgpPnQuZ2V0VGltZSgpJiZ0aGlzLnRpbWVzdGFtcCgpPGUuZ2V0VGltZSgpO2Nhc2VcIlspXCI6cmV0dXJuIHRoaXMudGltZXN0YW1wKCk+PXQuZ2V0VGltZSgpJiZ0aGlzLnRpbWVzdGFtcCgpPGUuZ2V0VGltZSgpO2Nhc2VcIihdXCI6cmV0dXJuIHRoaXMudGltZXN0YW1wKCk+dC5nZXRUaW1lKCkmJnRoaXMudGltZXN0YW1wKCk8PWUuZ2V0VGltZSgpO2Nhc2VcIltdXCI6cmV0dXJuIHRoaXMudGltZXN0YW1wKCk+PXQuZ2V0VGltZSgpJiZ0aGlzLnRpbWVzdGFtcCgpPD1lLmdldFRpbWUoKX19LHQucHJvdG90eXBlLmlzQmVmb3JlPWZ1bmN0aW9uKHQsZSl7c3dpdGNoKHZvaWQgMD09PWUmJihlPVwic2Vjb25kc1wiKSxlKXtjYXNlXCJzZWNvbmRcIjpjYXNlXCJzZWNvbmRzXCI6cmV0dXJuIHQuZ2V0VGltZSgpPnRoaXMuZ2V0VGltZSgpO2Nhc2VcImRheVwiOmNhc2VcImRheXNcIjpyZXR1cm4gbmV3IERhdGUodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSx0LmdldERhdGUoKSkuZ2V0VGltZSgpPm5ldyBEYXRlKHRoaXMuZ2V0RnVsbFllYXIoKSx0aGlzLmdldE1vbnRoKCksdGhpcy5nZXREYXRlKCkpLmdldFRpbWUoKTtjYXNlXCJtb250aFwiOmNhc2VcIm1vbnRoc1wiOnJldHVybiBuZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpLDEpLmdldFRpbWUoKT5uZXcgRGF0ZSh0aGlzLmdldEZ1bGxZZWFyKCksdGhpcy5nZXRNb250aCgpLDEpLmdldFRpbWUoKTtjYXNlXCJ5ZWFyXCI6Y2FzZVwieWVhcnNcIjpyZXR1cm4gdC5nZXRGdWxsWWVhcigpPnRoaXMuZ2V0RnVsbFllYXIoKX10aHJvdyBuZXcgRXJyb3IoXCJpc0JlZm9yZTogSW52YWxpZCB1bml0IVwiKX0sdC5wcm90b3R5cGUuaXNTYW1lT3JCZWZvcmU9ZnVuY3Rpb24odCxlKXtzd2l0Y2godm9pZCAwPT09ZSYmKGU9XCJzZWNvbmRzXCIpLGUpe2Nhc2VcInNlY29uZFwiOmNhc2VcInNlY29uZHNcIjpyZXR1cm4gdC5nZXRUaW1lKCk+PXRoaXMuZ2V0VGltZSgpO2Nhc2VcImRheVwiOmNhc2VcImRheXNcIjpyZXR1cm4gbmV3IERhdGUodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSx0LmdldERhdGUoKSkuZ2V0VGltZSgpPj1uZXcgRGF0ZSh0aGlzLmdldEZ1bGxZZWFyKCksdGhpcy5nZXRNb250aCgpLHRoaXMuZ2V0RGF0ZSgpKS5nZXRUaW1lKCk7Y2FzZVwibW9udGhcIjpjYXNlXCJtb250aHNcIjpyZXR1cm4gbmV3IERhdGUodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSwxKS5nZXRUaW1lKCk+PW5ldyBEYXRlKHRoaXMuZ2V0RnVsbFllYXIoKSx0aGlzLmdldE1vbnRoKCksMSkuZ2V0VGltZSgpfXRocm93IG5ldyBFcnJvcihcImlzU2FtZU9yQmVmb3JlOiBJbnZhbGlkIHVuaXQhXCIpfSx0LnByb3RvdHlwZS5pc0FmdGVyPWZ1bmN0aW9uKHQsZSl7c3dpdGNoKHZvaWQgMD09PWUmJihlPVwic2Vjb25kc1wiKSxlKXtjYXNlXCJzZWNvbmRcIjpjYXNlXCJzZWNvbmRzXCI6cmV0dXJuIHRoaXMuZ2V0VGltZSgpPnQuZ2V0VGltZSgpO2Nhc2VcImRheVwiOmNhc2VcImRheXNcIjpyZXR1cm4gbmV3IERhdGUodGhpcy5nZXRGdWxsWWVhcigpLHRoaXMuZ2V0TW9udGgoKSx0aGlzLmdldERhdGUoKSkuZ2V0VGltZSgpPm5ldyBEYXRlKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCksdC5nZXREYXRlKCkpLmdldFRpbWUoKTtjYXNlXCJtb250aFwiOmNhc2VcIm1vbnRoc1wiOnJldHVybiBuZXcgRGF0ZSh0aGlzLmdldEZ1bGxZZWFyKCksdGhpcy5nZXRNb250aCgpLDEpLmdldFRpbWUoKT5uZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpLDEpLmdldFRpbWUoKTtjYXNlXCJ5ZWFyXCI6Y2FzZVwieWVhcnNcIjpyZXR1cm4gdGhpcy5nZXRGdWxsWWVhcigpPnQuZ2V0RnVsbFllYXIoKX10aHJvdyBuZXcgRXJyb3IoXCJpc0FmdGVyOiBJbnZhbGlkIHVuaXQhXCIpfSx0LnByb3RvdHlwZS5pc1NhbWVPckFmdGVyPWZ1bmN0aW9uKHQsZSl7c3dpdGNoKHZvaWQgMD09PWUmJihlPVwic2Vjb25kc1wiKSxlKXtjYXNlXCJzZWNvbmRcIjpjYXNlXCJzZWNvbmRzXCI6cmV0dXJuIHRoaXMuZ2V0VGltZSgpPj10LmdldFRpbWUoKTtjYXNlXCJkYXlcIjpjYXNlXCJkYXlzXCI6cmV0dXJuIG5ldyBEYXRlKHRoaXMuZ2V0RnVsbFllYXIoKSx0aGlzLmdldE1vbnRoKCksdGhpcy5nZXREYXRlKCkpLmdldFRpbWUoKT49bmV3IERhdGUodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSx0LmdldERhdGUoKSkuZ2V0VGltZSgpO2Nhc2VcIm1vbnRoXCI6Y2FzZVwibW9udGhzXCI6cmV0dXJuIG5ldyBEYXRlKHRoaXMuZ2V0RnVsbFllYXIoKSx0aGlzLmdldE1vbnRoKCksMSkuZ2V0VGltZSgpPj1uZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpLDEpLmdldFRpbWUoKX10aHJvdyBuZXcgRXJyb3IoXCJpc1NhbWVPckFmdGVyOiBJbnZhbGlkIHVuaXQhXCIpfSx0LnByb3RvdHlwZS5pc1NhbWU9ZnVuY3Rpb24odCxlKXtzd2l0Y2godm9pZCAwPT09ZSYmKGU9XCJzZWNvbmRzXCIpLGUpe2Nhc2VcInNlY29uZFwiOmNhc2VcInNlY29uZHNcIjpyZXR1cm4gdGhpcy5nZXRUaW1lKCk9PT10LmdldFRpbWUoKTtjYXNlXCJkYXlcIjpjYXNlXCJkYXlzXCI6cmV0dXJuIG5ldyBEYXRlKHRoaXMuZ2V0RnVsbFllYXIoKSx0aGlzLmdldE1vbnRoKCksdGhpcy5nZXREYXRlKCkpLmdldFRpbWUoKT09PW5ldyBEYXRlKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCksdC5nZXREYXRlKCkpLmdldFRpbWUoKTtjYXNlXCJtb250aFwiOmNhc2VcIm1vbnRoc1wiOnJldHVybiBuZXcgRGF0ZSh0aGlzLmdldEZ1bGxZZWFyKCksdGhpcy5nZXRNb250aCgpLDEpLmdldFRpbWUoKT09PW5ldyBEYXRlKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCksMSkuZ2V0VGltZSgpfXRocm93IG5ldyBFcnJvcihcImlzU2FtZTogSW52YWxpZCB1bml0IVwiKX0sdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSl7c3dpdGNoKHZvaWQgMD09PWUmJihlPVwic2Vjb25kc1wiKSxlKXtjYXNlXCJzZWNvbmRcIjpjYXNlXCJzZWNvbmRzXCI6dGhpcy5zZXRTZWNvbmRzKHRoaXMuZ2V0U2Vjb25kcygpK3QpO2JyZWFrO2Nhc2VcImRheVwiOmNhc2VcImRheXNcIjp0aGlzLnNldERhdGUodGhpcy5nZXREYXRlKCkrdCk7YnJlYWs7Y2FzZVwibW9udGhcIjpjYXNlXCJtb250aHNcIjp0aGlzLnNldE1vbnRoKHRoaXMuZ2V0TW9udGgoKSt0KX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuc3VidHJhY3Q9ZnVuY3Rpb24odCxlKXtzd2l0Y2godm9pZCAwPT09ZSYmKGU9XCJzZWNvbmRzXCIpLGUpe2Nhc2VcInNlY29uZFwiOmNhc2VcInNlY29uZHNcIjp0aGlzLnNldFNlY29uZHModGhpcy5nZXRTZWNvbmRzKCktdCk7YnJlYWs7Y2FzZVwiZGF5XCI6Y2FzZVwiZGF5c1wiOnRoaXMuc2V0RGF0ZSh0aGlzLmdldERhdGUoKS10KTticmVhaztjYXNlXCJtb250aFwiOmNhc2VcIm1vbnRoc1wiOnRoaXMuc2V0TW9udGgodGhpcy5nZXRNb250aCgpLXQpfXJldHVybi
1B0aGlzfSx0LnByb3RvdHlwZS5kaWZmPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9XCJzZWNvbmRzXCIpO3N3aXRjaChlKXtkZWZhdWx0OmNhc2VcInNlY29uZFwiOmNhc2VcInNlY29uZHNcIjpyZXR1cm4gdGhpcy5nZXRUaW1lKCktdC5nZXRUaW1lKCk7Y2FzZVwiZGF5XCI6Y2FzZVwiZGF5c1wiOnJldHVybiBNYXRoLnJvdW5kKCh0aGlzLnRpbWVzdGFtcCgpLXQuZ2V0VGltZSgpKS84NjRlNSk7Y2FzZVwibW9udGhcIjpjYXNlXCJtb250aHNcIjp9fSx0LnByb3RvdHlwZS5mb3JtYXQ9ZnVuY3Rpb24oZSxpKXtpZih2b2lkIDA9PT1pJiYoaT1cImVuLVVTXCIpLFwib2JqZWN0XCI9PXR5cGVvZiBlKXJldHVybiBlLm91dHB1dCh0aGlzLmNsb25lKCkudG9KU0RhdGUoKSk7Zm9yKHZhciBuPVwiXCIsbz1bXSxzPW51bGw7bnVsbCE9KHM9dC5yZWdleC5leGVjKGUpKTspXCJcXFxcXCIhPT1zWzFdJiZvLnB1c2gocyk7aWYoby5sZW5ndGgpe29bMF0uaW5kZXg+MCYmKG4rPWUuc3Vic3RyaW5nKDAsb1swXS5pbmRleCkpO2Zvcih2YXIgcj0wLGE9T2JqZWN0LmVudHJpZXMobyk7cjxhLmxlbmd0aDtyKyspe3ZhciBsPWFbcl0sYz1sWzBdLGg9bFsxXSxwPU51bWJlcihjKTtuKz10aGlzLmZvcm1hdFRva2VucyhoWzBdLGkpLG9bcCsxXSYmKG4rPWUuc3Vic3RyaW5nKGguaW5kZXgraFswXS5sZW5ndGgsb1twKzFdLmluZGV4KSkscD09PW8ubGVuZ3RoLTEmJihuKz1lLnN1YnN0cmluZyhoLmluZGV4K2hbMF0ubGVuZ3RoKSl9fXJldHVybiBuLnJlcGxhY2UoL1xcXFwvZyxcIlwiKX0sdC5wcm90b3R5cGUudGltZXN0YW1wPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMuZ2V0RnVsbFllYXIoKSx0aGlzLmdldE1vbnRoKCksdGhpcy5nZXREYXRlKCksMCwwLDAsMCkuZ2V0VGltZSgpfSx0LnByb3RvdHlwZS5mb3JtYXRUb2tlbnM9ZnVuY3Rpb24oZSxpKXtzd2l0Y2goZSl7Y2FzZVwiWVlcIjpyZXR1cm4gU3RyaW5nKHRoaXMuZ2V0RnVsbFllYXIoKSkuc2xpY2UoLTIpO2Nhc2VcIllZWVlcIjpyZXR1cm4gU3RyaW5nKHRoaXMuZ2V0RnVsbFllYXIoKSk7Y2FzZVwiTVwiOnJldHVybiBTdHJpbmcodGhpcy5nZXRNb250aCgpKzEpO2Nhc2VcIk1NXCI6cmV0dXJuKFwiMFwiKyh0aGlzLmdldE1vbnRoKCkrMSkpLnNsaWNlKC0yKTtjYXNlXCJNTU1cIjpyZXR1cm4gdC5zaG9ydE1vbnRocyhpKVt0aGlzLmdldE1vbnRoKCldO2Nhc2VcIk1NTU1cIjpyZXR1cm4gdC5sb25nTW9udGhzKGkpW3RoaXMuZ2V0TW9udGgoKV07Y2FzZVwiRFwiOnJldHVybiBTdHJpbmcodGhpcy5nZXREYXRlKCkpO2Nhc2VcIkREXCI6cmV0dXJuKFwiMFwiK3RoaXMuZ2V0RGF0ZSgpKS5zbGljZSgtMik7ZGVmYXVsdDpyZXR1cm5cIlwifX0sdC5yZWdleD0vKFxcXFwpPyhZezIsNH18TXsxLDR9fER7MSwyfXxkezEsNH0pL2csdC5NT05USF9KUz1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMV0sdH0oKTtlLkRhdGVUaW1lPW59LGZ1bmN0aW9uKHQsZSxpKXtcInVzZSBzdHJpY3RcIjt2YXIgbixvPXRoaXMmJnRoaXMuX19leHRlbmRzfHwobj1mdW5jdGlvbih0LGUpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LGUpe3QuX19wcm90b19fPWV9fHxmdW5jdGlvbih0LGUpe2Zvcih2YXIgaSBpbiBlKWUuaGFzT3duUHJvcGVydHkoaSkmJih0W2ldPWVbaV0pfSkodCxlKX0sZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fW4odCxlKSx0LnByb3RvdHlwZT1udWxsPT09ZT9PYmplY3QuY3JlYXRlKGUpOihpLnByb3RvdHlwZT1lLnByb3RvdHlwZSxuZXcgaSl9KSxzPXRoaXMmJnRoaXMuX19zcHJlYWRBcnJheXN8fGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT0wLGk9YXJndW1lbnRzLmxlbmd0aDtlPGk7ZSsrKXQrPWFyZ3VtZW50c1tlXS5sZW5ndGg7dmFyIG49QXJyYXkodCksbz0wO2ZvcihlPTA7ZTxpO2UrKylmb3IodmFyIHM9YXJndW1lbnRzW2VdLHI9MCxhPXMubGVuZ3RoO3I8YTtyKyssbysrKW5bb109c1tyXTtyZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHI9aSg1KSxhPWkoMCksbD1pKDMpLGM9aSgyKSxoPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkucHJldmVudENsaWNrPSExLGkuYmluZEV2ZW50cygpLGl9cmV0dXJuIG8oZSx0KSxlLnByb3RvdHlwZS5zY3JvbGxUb0RhdGU9ZnVuY3Rpb24odCl7aWYodGhpcy5vcHRpb25zLnNjcm9sbFRvRGF0ZSl7dmFyIGU9dGhpcy5vcHRpb25zLnN0YXJ0RGF0ZSBpbnN0YW5jZW9mIGEuRGF0ZVRpbWU/dGhpcy5vcHRpb25zLnN0YXJ0RGF0ZS5jbG9uZSgpOm51bGwsaT10aGlzLm9wdGlvbnMuZW5kRGF0ZSBpbnN0YW5jZW9mIGEuRGF0ZVRpbWU/dGhpcy5vcHRpb25zLmVuZERhdGUuY2xvbmUoKTpudWxsOyF0aGlzLm9wdGlvbnMuc3RhcnREYXRlfHx0JiZ0IT09dGhpcy5vcHRpb25zLmVsZW1lbnQ/dCYmdGhpcy5vcHRpb25zLmVuZERhdGUmJnQ9PT10aGlzLm9wdGlvbnMuZWxlbWVudEVuZCYmKGkuc2V0RGF0ZSgxKSx0aGlzLm9wdGlvbnMubnVtYmVyT2ZNb250aHM+MSYmaS5pc0FmdGVyKGUpJiZpLnNldE1vbnRoKGkuZ2V0TW9udGgoKS0odGhpcy5vcHRpb25zLm51bWJlck9mTW9udGhzLTEpKSx0aGlzLmNhbGVuZGFyc1swXT1pLmNsb25lKCkpOihlLnNldERhdGUoMSksdGhpcy5jYWxlbmRhcnNbMF09ZS5jbG9uZSgpKX19LGUucHJvdG90eXBlLmJpbmRFdmVudHM9ZnVuY3Rpb24oKXtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLm9uQ2xpY2suYmluZCh0aGlzKSwhMCksdGhpcy51aT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLHRoaXMudWkuY2xhc3NOYW1lPWwubGl0ZXBpY2tlcix0aGlzLnVpLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsdGhpcy51aS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLHRoaXMub25Nb3VzZUVudGVyLmJpbmQodGhpcyksITApLHRoaXMudWkuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIix0aGlzLm9uTW91c2VMZWF2ZS5iaW5kKHRoaXMpLCExKSx0aGlzLm9wdGlvbnMuYXV0b1JlZnJlc2g/KHRoaXMub3B0aW9ucy5lbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJnRoaXMub3B0aW9ucy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLHRoaXMub25JbnB1dC5iaW5kKHRoaXMpLCEwKSx0aGlzLm9wdGlvbnMuZWxlbWVudEVuZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZ0aGlzLm9wdGlvbnMuZWxlbWVudEVuZC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIix0aGlzLm9uSW5wdXQuYmluZCh0aGlzKSwhMCkpOih0aGlzLm9wdGlvbnMuZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZ0aGlzLm9wdGlvbnMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsdGhpcy5vbklucHV0LmJpbmQodGhpcyksITApLHRoaXMub3B0aW9ucy5lbGVtZW50RW5kIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJnRoaXMub3B0aW9ucy5lbGVtZW50RW5kLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIix0aGlzLm9uSW5wdXQuYmluZCh0aGlzKSwhMCkpLHRoaXMub3B0aW9ucy5wYXJlbnRFbD90aGlzLm9wdGlvbnMucGFyZW50RWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudD90aGlzLm9wdGlvbnMucGFyZW50RWwuYXBwZW5kQ2hpbGQodGhpcy51aSk6ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLm9wdGlvbnMucGFyZW50RWwpLmFwcGVuZENoaWxkKHRoaXMudWkpOnRoaXMub3B0aW9ucy5pbmxpbmVNb2RlP3RoaXMub3B0aW9ucy5lbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudD90aGlzLm9wdGlvbnMuZWxlbWVudC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMudWkpOnRoaXMub3B0aW9ucy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMudWkpOmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy51aSksdGhpcy51cGRhdGVJbnB1dCgpLHRoaXMuaW5pdCgpLFwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMub3B0aW9ucy5zZXR1cCYmdGhpcy5vcHRpb25zLnNldHVwLmNhbGwodGhpcyx0aGlzKSx0aGlzLnJlbmRlcigpLHRoaXMub3B0aW9ucy5pbmxpbmVNb2RlJiZ0aGlzLnNob3coKX0sZS5wcm90b3R5cGUudXBkYXRlSW5wdXQ9ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpe3ZhciB0PXRoaXMub3B0aW9ucy5zdGFydERhdGUsZT10aGlzLm9wdGlvbnMuZW5kRGF0ZTtpZih0aGlzLm9wdGlvbnMuc2luZ2xlTW9kZSYmdCl0aGlzLm9wdGlvbnMuZWxlbWVudC52YWx1ZT10LmZvcm1hdCh0aGlzLm9wdGlvbnMuZm9ybWF0LHRoaXMub3B0aW9ucy5sYW5nKTtlbHNlIGlmKCF0aGlzLm9wdGlvbnMuc2luZ2xlTW9kZSYmdCYmZSl7dmFyIGk9dC5mb3JtYXQodGhpcy5vcHRpb25zLmZvcm1hdCx0aGlzLm9wdGlvbnMubGFuZyksbj1lLmZvcm1hdCh0aGlzLm9wdGlvbnMuZm9ybWF0LHRoaXMub3B0aW9ucy5sYW5nKTt0aGlzLm9wdGlvbnMuZWxlbWVudEVuZCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQ/KHRoaXMub3B0aW9ucy5lbGVtZW50LnZhbHVlPWksdGhpcy5vcHRpb25zLmVsZW1lbnRFbmQudmFsdWU9bik6dGhpcy5vcHRpb25zLmVsZW1lbnQudmFsdWU9XCJcIitpK3RoaXMub3B0aW9ucy5kZWxpbWl0ZXIrbn10fHxlfHwodGhpcy5vcHRpb25zLmVsZW1lbnQudmFsdWU9XCJcIix0aGlzLm9wdGlvbnMuZWxlbWVudEVuZCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQmJih0aGlzLm9wdGlvbnMuZWxlbWVudEVuZC52YWx1ZT1cIlwiKSl9fSxlLnByb3RvdHlwZS5pc1NhbWVQaWNrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xvc2VzdChcIi5cIitsLmxp
1dGVwaWNrZXIpPT09dGhpcy51aX0sZS5wcm90b3R5cGUuc2hvdWxkU2hvd249ZnVuY3Rpb24odCl7cmV0dXJuIXQuZGlzYWJsZWQmJih0PT09dGhpcy5vcHRpb25zLmVsZW1lbnR8fHRoaXMub3B0aW9ucy5lbGVtZW50RW5kJiZ0PT09dGhpcy5vcHRpb25zLmVsZW1lbnRFbmQpfSxlLnByb3RvdHlwZS5zaG91bGRSZXNldERhdGVQaWNrZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLnNpbmdsZU1vZGV8fDI9PT10aGlzLmRhdGVQaWNrZWQubGVuZ3RofSxlLnByb3RvdHlwZS5zaG91bGRTd2FwRGF0ZVBpY2tlZD1mdW5jdGlvbigpe3JldHVybiAyPT09dGhpcy5kYXRlUGlja2VkLmxlbmd0aCYmdGhpcy5kYXRlUGlja2VkWzBdLmdldFRpbWUoKT50aGlzLmRhdGVQaWNrZWRbMV0uZ2V0VGltZSgpfSxlLnByb3RvdHlwZS5zaG91bGRDaGVja0xvY2tEYXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5kaXNhbGxvd0xvY2tEYXlzSW5SYW5nZSYmMj09PXRoaXMuZGF0ZVBpY2tlZC5sZW5ndGh9LGUucHJvdG90eXBlLm9uQ2xpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dC50YXJnZXQ7aWYodC50YXJnZXQuc2hhZG93Um9vdCYmKGU9dC5jb21wb3NlZFBhdGgoKVswXSksZSYmdGhpcy51aSlpZih0aGlzLnNob3VsZFNob3duKGUpKXRoaXMuc2hvdyhlKTtlbHNlIGlmKGUuY2xvc2VzdChcIi5cIitsLmxpdGVwaWNrZXIpfHwhdGhpcy5pc1Nob3duaW5nKCkpe2lmKHRoaXMuaXNTYW1lUGlja2VyKGUpKWlmKHRoaXMuZW1pdChcImJlZm9yZTpjbGlja1wiLGUpLHRoaXMucHJldmVudENsaWNrKXRoaXMucHJldmVudENsaWNrPSExO2Vsc2V7aWYoZS5jbGFzc0xpc3QuY29udGFpbnMobC5kYXlJdGVtKSl7aWYodC5wcmV2ZW50RGVmYXVsdCgpLGUuY2xhc3NMaXN0LmNvbnRhaW5zKGwuaXNMb2NrZWQpKXJldHVybjtpZih0aGlzLnNob3VsZFJlc2V0RGF0ZVBpY2tlZCgpJiYodGhpcy5kYXRlUGlja2VkLmxlbmd0aD0wKSx0aGlzLmRhdGVQaWNrZWRbdGhpcy5kYXRlUGlja2VkLmxlbmd0aF09bmV3IGEuRGF0ZVRpbWUoZS5kYXRhc2V0LnRpbWUpLHRoaXMuc2hvdWxkU3dhcERhdGVQaWNrZWQoKSl7dmFyIGk9dGhpcy5kYXRlUGlja2VkWzFdLmNsb25lKCk7dGhpcy5kYXRlUGlja2VkWzFdPXRoaXMuZGF0ZVBpY2tlZFswXS5jbG9uZSgpLHRoaXMuZGF0ZVBpY2tlZFswXT1pLmNsb25lKCl9aWYodGhpcy5zaG91bGRDaGVja0xvY2tEYXlzKCkpYy5yYW5nZUlzTG9ja2VkKHRoaXMuZGF0ZVBpY2tlZCx0aGlzLm9wdGlvbnMpJiYodGhpcy5lbWl0KFwiZXJyb3I6cmFuZ2VcIix0aGlzLmRhdGVQaWNrZWQpLHRoaXMuZGF0ZVBpY2tlZC5sZW5ndGg9MCk7cmV0dXJuIHRoaXMucmVuZGVyKCksdGhpcy5lbWl0LmFwcGx5KHRoaXMscyhbXCJwcmVzZWxlY3RcIl0scyh0aGlzLmRhdGVQaWNrZWQpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xvbmUoKX0pKSkpLHZvaWQodGhpcy5vcHRpb25zLmF1dG9BcHBseSYmKHRoaXMub3B0aW9ucy5zaW5nbGVNb2RlJiZ0aGlzLmRhdGVQaWNrZWQubGVuZ3RoPyh0aGlzLnNldERhdGUodGhpcy5kYXRlUGlja2VkWzBdKSx0aGlzLmhpZGUoKSk6dGhpcy5vcHRpb25zLnNpbmdsZU1vZGV8fDIhPT10aGlzLmRhdGVQaWNrZWQubGVuZ3RofHwodGhpcy5zZXREYXRlUmFuZ2UodGhpcy5kYXRlUGlja2VkWzBdLHRoaXMuZGF0ZVBpY2tlZFsxXSksdGhpcy5oaWRlKCkpKSl9aWYoZS5jbGFzc0xpc3QuY29udGFpbnMobC5idXR0b25QcmV2aW91c01vbnRoKSl7dC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBuPTAsbz10aGlzLm9wdGlvbnMuc3dpdGNoaW5nTW9udGhzfHx0aGlzLm9wdGlvbnMubnVtYmVyT2ZNb250aHM7aWYodGhpcy5vcHRpb25zLnNwbGl0Vmlldyl7dmFyIHI9ZS5jbG9zZXN0KFwiLlwiK2wubW9udGhJdGVtKTtuPWMuZmluZE5lc3RlZE1vbnRoSXRlbShyKSxvPTF9cmV0dXJuIHRoaXMuY2FsZW5kYXJzW25dLnNldE1vbnRoKHRoaXMuY2FsZW5kYXJzW25dLmdldE1vbnRoKCktbyksdGhpcy5nb3RvRGF0ZSh0aGlzLmNhbGVuZGFyc1tuXSxuKSx2b2lkIHRoaXMuZW1pdChcImNoYW5nZTptb250aFwiLHRoaXMuY2FsZW5kYXJzW25dLG4pfWlmKGUuY2xhc3NMaXN0LmNvbnRhaW5zKGwuYnV0dG9uTmV4dE1vbnRoKSl7dC5wcmV2ZW50RGVmYXVsdCgpO249MCxvPXRoaXMub3B0aW9ucy5zd2l0Y2hpbmdNb250aHN8fHRoaXMub3B0aW9ucy5udW1iZXJPZk1vbnRocztpZih0aGlzLm9wdGlvbnMuc3BsaXRWaWV3KXtyPWUuY2xvc2VzdChcIi5cIitsLm1vbnRoSXRlbSk7bj1jLmZpbmROZXN0ZWRNb250aEl0ZW0ociksbz0xfXJldHVybiB0aGlzLmNhbGVuZGFyc1tuXS5zZXRNb250aCh0aGlzLmNhbGVuZGFyc1tuXS5nZXRNb250aCgpK28pLHRoaXMuZ290b0RhdGUodGhpcy5jYWxlbmRhcnNbbl0sbiksdm9pZCB0aGlzLmVtaXQoXCJjaGFuZ2U6bW9udGhcIix0aGlzLmNhbGVuZGFyc1tuXSxuKX1lLmNsYXNzTGlzdC5jb250YWlucyhsLmJ1dHRvbkNhbmNlbCkmJih0LnByZXZlbn
1REZWZhdWx0KCksdGhpcy5oaWRlKCksdGhpcy5lbWl0KFwiYnV0dG9uOmNhbmNlbFwiKSksZS5jbGFzc0xpc3QuY29udGFpbnMobC5idXR0b25BcHBseSkmJih0LnByZXZlbnREZWZhdWx0KCksdGhpcy5vcHRpb25zLnNpbmdsZU1vZGUmJnRoaXMuZGF0ZVBpY2tlZC5sZW5ndGg/dGhpcy5zZXREYXRlKHRoaXMuZGF0ZVBpY2tlZFswXSk6dGhpcy5vcHRpb25zLnNpbmdsZU1vZGV8fDIhPT10aGlzLmRhdGVQaWNrZWQubGVuZ3RofHx0aGlzLnNldERhdGVSYW5nZSh0aGlzLmRhdGVQaWNrZWRbMF0sdGhpcy5kYXRlUGlja2VkWzFdKSx0aGlzLmhpZGUoKSx0aGlzLmVtaXQoXCJidXR0b246YXBwbHlcIix0aGlzLm9wdGlvbnMuc3RhcnREYXRlLHRoaXMub3B0aW9ucy5lbmREYXRlKSl9fWVsc2UgdGhpcy5oaWRlKCl9LGUucHJvdG90eXBlLnNob3dUb29sdGlwPWZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy51aS5xdWVyeVNlbGVjdG9yKFwiLlwiK2wuY29udGFpbmVyVG9vbHRpcCk7aS5zdHlsZS52aXNpYmlsaXR5PVwidmlzaWJsZVwiLGkuaW5uZXJIVE1MPWU7dmFyIG49dGhpcy51aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9cy50b3AsYT1zLmxlZnQ7aWYodGhpcy5vcHRpb25zLmlubGluZU1vZGUmJnRoaXMub3B0aW9ucy5wYXJlbnRFbCl7dmFyIGM9dGhpcy51aS5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3ItPWMudG9wLGEtPWMubGVmdH1lbHNlIHItPW4udG9wLGEtPW4ubGVmdDtyLT1vLmhlaWdodCxhLT1vLndpZHRoLzIsYSs9cy53aWR0aC8yLGkuc3R5bGUudG9wPXIrXCJweFwiLGkuc3R5bGUubGVmdD1hK1wicHhcIix0aGlzLmVtaXQoXCJ0b29sdGlwXCIsaSx0KX0sZS5wcm90b3R5cGUuaGlkZVRvb2x0aXA9ZnVuY3Rpb24oKXt0aGlzLnVpLnF1ZXJ5U2VsZWN0b3IoXCIuXCIrbC5jb250YWluZXJUb29sdGlwKS5zdHlsZS52aXNpYmlsaXR5PVwiaGlkZGVuXCJ9LGUucHJvdG90eXBlLnNob3VsZEFsbG93TW91c2VFbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4hdGhpcy5vcHRpb25zLnNpbmdsZU1vZGUmJiF0LmNsYXNzTGlzdC5jb250YWlucyhsLmlzTG9ja2VkKX0sZS5wcm90b3R5cGUuc2hvdWxkQWxsb3dSZXBpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmVsZW1lbnRFbmQmJnRoaXMub3B0aW9ucy5hbGxvd1JlcGljayYmdGhpcy5vcHRpb25zLnN0YXJ0RGF0ZSYmdGhpcy5vcHRpb25zLmVuZERhdGV9LGUucHJvdG90eXBlLmlzRGF5SXRlbT1mdW5jdGlvbih0KXtyZXR1cm4gdC5jbGFzc0xpc3QuY29udGFpbnMobC5kYXlJdGVtKX0sZS5wcm90b3R5cGUub25Nb3VzZUVudGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT10LnRhcmdldDtpZih0aGlzLmlzRGF5SXRlbShpKSYmdGhpcy5zaG91bGRBbGxvd01vdXNlRW50ZXIoaSkpe2lmKHRoaXMuc2hvdWxkQWxsb3dSZXBpY2soKSYmKHRoaXMudHJpZ2dlckVsZW1lbnQ9PT10aGlzLm9wdGlvbnMuZWxlbWVudD90aGlzLmRhdGVQaWNrZWRbMF09dGhpcy5vcHRpb25zLmVuZERhdGUuY2xvbmUoKTp0aGlzLnRyaWdnZXJFbGVtZW50PT09dGhpcy5vcHRpb25zLmVsZW1lbnRFbmQmJih0aGlzLmRhdGVQaWNrZWRbMF09dGhpcy5vcHRpb25zLnN0YXJ0RGF0ZS5jbG9uZSgpKSksMSE9PXRoaXMuZGF0ZVBpY2tlZC5sZW5ndGgpcmV0dXJuO3ZhciBuPXRoaXMudWkucXVlcnlTZWxlY3RvcihcIi5cIitsLmRheUl0ZW0rJ1tkYXRhLXRpbWU9XCInK3RoaXMuZGF0ZVBpY2tlZFswXS5nZXRUaW1lKCkrJ1wiXScpLG89dGhpcy5kYXRlUGlja2VkWzBdLmNsb25lKCkscz1uZXcgYS5EYXRlVGltZShpLmRhdGFzZXQudGltZSkscj0hMTtpZihvLmdldFRpbWUoKT5zLmdldFRpbWUoKSl7dmFyIGM9by5jbG9uZSgpO289cy5jbG9uZSgpLHM9Yy5jbG9uZSgpLHI9ITB9aWYoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy51aS5xdWVyeVNlbGVjdG9yQWxsKFwiLlwiK2wuZGF5SXRlbSkpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPW5ldyBhLkRhdGVUaW1lKHQuZGF0YXNldC50aW1lKSxuPWUucmVuZGVyRGF5KGkpO2kuaXNCZXR3ZWVuKG8scykmJm4uY2xhc3NMaXN0LmFkZChsLmlzSW5SYW5nZSksdC5jbGFzc05hbWU9bi5jbGFzc05hbWV9KSksaS5jbGFzc0xpc3QuYWRkKGwuaXNFbmREYXRlKSxyPyhuJiZuLmNsYXNzTGlzdC5hZGQobC5pc0ZsaXBwZWQpLGkuY2xhc3NMaXN0LmFkZChsLmlzRmxpcHBlZCkpOihuJiZuLmNsYXNzTGlzdC5yZW1vdmUobC5pc0ZsaXBwZWQpLGkuY2xhc3NMaXN0LnJlbW92ZShsLmlzRmxpcHBlZCkpLHRoaXMub3B0aW9ucy5zaG93VG9vbHRpcCl7dmFyIGg9cy5kaWZmKG8sXCJkYXlcIikrMTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLm9wdGlvbnMudG9vbHRpcE51bWJlciYmKGg9dGhpcy5vcHRpb25zLnRvb2x0aXBOdW1iZXIuY2FsbCh0aGlzLGgpKSxoPjApe3ZhciBwPXRoaXMucGx1cmFsU2VsZWN0b3IoaCksZD1oK1wiIFwiKyh0aGlzLm9wdGlvbnMudG9vbHRpcFRleHRbcF0/dGhpcy5vcHRpb25zLnRvb2x0aXBUZXh0W3BdOlwiW1wiK3ArXCJdXCIpO3RoaXMuc2hvd1Rvb2x0aXAoaSxkKTt2YXIgdT13aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCxtPS8oaXBob25lfGlwYWQpL2kudGVzdCh1KSxmPS9PUyAxKFswLTJdKS9pLnRlc3QodSk7bSYmZiYmaS5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImNsaWNrXCIpKX1lbHNlIHRoaXMuaGlkZVRvb2x0aXAoKX19fSxlLnByb3RvdHlwZS5vbk1vdXNlTGVhdmU9ZnVuY3Rpb24odCl7dC50YXJnZXQ7dGhpcy5vcHRpb25zLmFsbG93UmVwaWNrJiYoIXRoaXMub3B0aW9ucy5hbGxvd1JlcGlja3x8dGhpcy5vcHRpb25zLnN0YXJ0RGF0ZXx8dGhpcy5vcHRpb25zLmVuZERhdGUpJiYodGhpcy5kYXRlUGlja2VkLmxlbmd0aD0wLHRoaXMucmVuZGVyKCkpfSxlLnByb3RvdHlwZS5vbklucHV0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGFyc2VJbnB1dCgpLGk9ZVswXSxuPWVbMV0sbz10aGlzLm9wdGlvbnMuZm9ybWF0O2lmKHRoaXMub3B0aW9ucy5lbGVtZW50RW5kP2kgaW5zdGFuY2VvZiBhLkRhdGVUaW1lJiZuIGluc3RhbmNlb2YgYS5EYXRlVGltZSYmaS5mb3JtYXQobyk9PT10aGlzLm9wdGlvbnMuZWxlbWVudC52YWx1ZSYmbi5mb3JtYXQobyk9PT10aGlzLm9wdGlvbnMuZWxlbWVudEVuZC52YWx1ZTp0aGlzLm9wdGlvbnMuc2luZ2xlTW9kZT9pIGluc3RhbmNlb2YgYS5EYXRlVGltZSYmaS5mb3JtYXQobyk9PT10aGlzLm9wdGlvbnMuZWxlbWVudC52YWx1ZTppIGluc3RhbmNlb2YgYS5EYXRlVGltZSYmbiBpbnN0YW5jZW9mIGEuRGF0ZVRpbWUmJlwiXCIraS5mb3JtYXQobykrdGhpcy5vcHRpb25zLmRlbGltaXRlcituLmZvcm1hdChvKT09PXRoaXMub3B0aW9ucy5lbGVtZW50LnZhbHVlKXtpZihuJiZpLmdldFRpbWUoKT5uLmdldFRpbWUoKSl7dmFyIHM9aS5jbG9uZSgpO2k9bi5jbG9uZSgpLG49cy5jbG9uZSgpfXRoaXMub3B0aW9ucy5zdGFydERhdGU9bmV3IGEuRGF0ZVRpbWUoaSx0aGlzLm9wdGlvbnMuZm9ybWF0LHRoaXMub3B0aW9ucy5sYW5nKSxuJiYodGhpcy5vcHRpb25zLmVuZERhdGU9bmV3IGEuRGF0ZVRpbWUobix0aGlzLm9wdGlvbnMuZm9ybWF0LHRoaXMub3B0aW9ucy5sYW5nKSksdGhpcy51cGRhdGVJbnB1dCgpLHRoaXMucmVuZGVyKCk7dmFyIHI9aS5jbG9uZSgpLGw9MDsodGhpcy5vcHRpb25zLmVsZW1lbnRFbmQ/aS5mb3JtYXQobyk9PT10LnRhcmdldC52YWx1ZTp0LnRhcmdldC52YWx1ZS
15zdGFydHNXaXRoKGkuZm9ybWF0KG8pKSl8fChyPW4uY2xvbmUoKSxsPXRoaXMub3B0aW9ucy5udW1iZXJPZk1vbnRocy0xKSx0aGlzLmVtaXQoXCJzZWxlY3RlZFwiLHRoaXMuZ2V0U3RhcnREYXRlKCksdGhpcy5nZXRFbmREYXRlKCkpLHRoaXMuZ290b0RhdGUocixsKX19LGV9KHIuQ2FsZW5kYXIpO2UuTGl0ZXBpY2tlcj1ofSxmdW5jdGlvbih0LGUsaSl7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksZS5maW5kTmVzdGVkTW9udGhJdGVtPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LnBhcmVudE5vZGUuY2hpbGROb2RlcyxpPTA7aTxlLmxlbmd0aDtpKz0xKXtpZihlLml0ZW0oaSk9PT10KXJldHVybiBpfXJldHVybiAwfSxlLmRhdGVJc0xvY2tlZD1mdW5jdGlvbih0LGUsaSl7dmFyIG49ITE7cmV0dXJuIGUubG9ja0RheXMubGVuZ3RoJiYobj1lLmxvY2tEYXlzLmZpbHRlcigoZnVuY3Rpb24oaSl7cmV0dXJuIGkgaW5zdGFuY2VvZiBBcnJheT90LmlzQmV0d2VlbihpWzBdLGlbMV0sZS5sb2NrRGF5c0luY2x1c2l2aXR5KTppLmlzU2FtZSh0LFwiZGF5XCIpfSkpLmxlbmd0aCksbnx8XCJmdW5jdGlvblwiIT10eXBlb2YgZS5sb2NrRGF5c0ZpbHRlcnx8KG49ZS5sb2NrRGF5c0ZpbHRlci5jYWxsKHRoaXMsdC5jbG9uZSgpLG51bGwsaSkpLG59LGUucmFuZ2VJc0xvY2tlZD1mdW5jdGlvbih0LGUpe3ZhciBpPSExO3JldHVybiBlLmxvY2tEYXlzLmxlbmd0aCYmKGk9ZS5sb2NrRGF5cy5maWx0ZXIoKGZ1bmN0aW9uKGkpe2lmKGkgaW5zdGFuY2VvZiBBcnJheSl7dmFyIG49dFswXS50b0RhdGVTdHJpbmcoKT09PWlbMF0udG9EYXRlU3RyaW5nKCkmJnRbMV0udG9EYXRlU3RyaW5nKCk9PT1pWzFdLnRvRGF0ZVN0cmluZygpO3JldHVybiBpWzBdLmlzQmV0d2Vlbih0WzBdLHRbMV0sZS5sb2NrRGF5c0luY2x1c2l2aXR5KXx8aVsxXS5pc0JldHdlZW4odFswXSx0WzFdLGUubG9ja0RheXNJbmNsdXNpdml0eSl8fG59cmV0dXJuIGkuaXNCZXR3ZWVuKHRbMF0sdFsxXSxlLmxvY2tEYXlzSW5jbHVzaXZpdHkpfSkpLmxlbmd0aCksaXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZS5sb2NrRGF5c0ZpbHRlcnx8KGk9ZS5sb2NrRGF5c0ZpbHRlci5jYWxsKHRoaXMsdFswXS5jbG9uZSgpLHRbMV0uY2xvbmUoKSx0KSksaX19LGZ1bmN0aW9uKHQsZSxpKXt2YXIgbj1pKDgpO1wic3RyaW5nXCI9PXR5cGVvZiBuJiYobj1bW3QuaSxuLFwiXCJdXSk7dmFyIG89e2luc2VydDpmdW5jdGlvbih0KXt2YXIgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaGVhZFwiKSxpPXdpbmRvdy5fbGFzdEVsZW1lbnRJbnNlcnRlZEJ5U3R5bGVMb2FkZXI7d2luZG93LmRpc2FibGVMaXRlcGlja2VyU3R5bGVzfHwoaT9pLm5leHRTaWJsaW5nP2UuaW5zZXJ0QmVmb3JlKHQsaS5uZXh0U2libGluZyk6ZS5hcHBlbmRDaGlsZCh0KTplLmluc2VydEJlZm9yZSh0LGUuZmlyc3RDaGlsZCksd2luZG93Ll9sYXN0RWxlbWVudEluc2VydGVkQnlTdHlsZUxvYWRlcj10KX0sc2luZ2xldG9uOiExfTtpKDEwKShuLG8pO24ubG9jYWxzJiYodC5leHBvcnRzPW4ubG9jYWxzKX0sZnVuY3Rpb24odCxlLGkpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBuPWkoMSk7ZS5MaXRlcGlja2VyPW4uTGl0ZXBpY2tlcixpKDExKSx3aW5kb3cuTGl0ZXBpY2tlcj1uLkxpdGVwaWNrZXIsZS5kZWZhdWx0PW4uTGl0ZXBpY2tlcn0sZnVuY3Rpb24odCxlLGkpe1widXNlIHN0cmljdFwiO3ZhciBuLG89dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQsZSl7dC5fX3Byb3RvX189ZX18fGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShpKSYmKHRbaV09ZVtpXSl9KSh0LGUpfSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPXR9bih0LGUpLHQucHJvdG90eXBlPW51bGw9PT1lP09iamVjdC5jcmVhdGUoZSk6KGkucHJvdG90eXBlPWUucHJvdG90eXBlLG5ldyBpKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBzPWkoNikscj1pKDApLGE9aSgzKSxsPWkoMiksYz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3JldHVybiB0LmNhbGwodGhpcyxlKXx8dGhpc31yZXR1cm4gbyhlLHQpLGUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5lbWl0KFwiYmVmb3JlOnJlbmRlclwiLHRoaXMudWkpO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7ZS5jbGFzc05hbWU9YS5jb250YWluZXJNYWluO3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7aS5jbGFzc05hbWU9YS5jb250YWluZXJNb250aHMsYVtcImNvbHVtbnNcIit0aGlzLm9wdGlvbnMubnVtYmVyT2ZDb2x1bW5zXSYmKGkuY2xhc3NMaXN0LnJlbW92ZShhLmNvbHVtbnMyLGEuY29sdW1uczMsYS5jb2x1bW5zNCksaS5jbGFzc0xpc3QuYWRkKGFbXCJjb2x1bW5zXCIrdGhpcy5vcHRpb25zLm51bWJlck9mQ29sdW1uc10pKSx0aGlzLm9wdGlvbnMuc3BsaXRWaWV3JiZpLmNsYXNzTGlzdC5hZGQoYS5zcGxpdFZpZXcpLHRoaXMub3B0aW9ucy5zaG93V2Vla051bWJlcnMmJmkuY2xhc3NMaXN0LmFkZChhLnNob3dXZWVrTnVtYmVycyk7Zm9yKHZhciBuPXRoaXMuY2FsZW5kYXJzWzBdLmNsb25lKCksbz1uLmdldE1vbnRoKCkscz1uLmdldE1vbnRoKCkrdGhpcy5vcHRpb25zLm51bWJlck9mTW9udGhzLHI9MCxsPW87bDxzO2wrPTEpe3ZhciBjPW4uY2xvbmUoKTtjLnNldERhdGUoMSksYy5zZXRIb3VycygwLDAsMCwwKSx0aGlzLm9wdGlvbnMuc3BsaXRWaWV3P2M9dGhpcy5jYWxlbmRhcnNbcl0uY2xvbmUoKTpjLnNldE1vbnRoKGwpLGkuYXBwZW5kQ2hpbGQodGhpcy5yZW5kZXJNb250aChjLHIpKSxyKz0xfWlmKHRoaXMudWkuaW5uZXJIVE1MPVwiXCIsZS5hcHBlbmRDaGlsZChpKSx0aGlzLm9wdGlvbnMucmVzZXRCdXR0b24pe3ZhciBoPXZvaWQgMDtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLm9wdGlvbnMucmVzZXRCdXR0b24/aD10aGlzLm9wdGlvbnMucmVzZXRCdXR0b24uY2FsbCh0aGlzKTooKGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKSkudHlwZT1cImJ1dHRvblwiLGguY2xhc3NOYW1lPWEucmVzZXRCdXR0b24s
1aC5pbm5lckhUTUw9dGhpcy5vcHRpb25zLmJ1dHRvblRleHQucmVzZXQpLGguYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsKGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSx0LmNsZWFyU2VsZWN0aW9uKCl9KSksZS5xdWVyeVNlbGVjdG9yKFwiLlwiK2EubW9udGhJdGVtK1wiOmxhc3QtY2hpbGRcIikucXVlcnlTZWxlY3RvcihcIi5cIithLm1vbnRoSXRlbUhlYWRlcikuYXBwZW5kQ2hpbGQoaCl9dGhpcy51aS5hcHBlbmRDaGlsZChlKSx0aGlzLm9wdGlvbnMuYXV0b0FwcGx5JiYhdGhpcy5vcHRpb25zLmZvb3RlckhUTUx8fHRoaXMudWkuYXBwZW5kQ2hpbGQodGhpcy5yZW5kZXJGb290ZXIoKSksdGhpcy5vcHRpb25zLnNob3dUb29sdGlwJiZ0aGlzLnVpLmFwcGVuZENoaWxkKHRoaXMucmVuZGVyVG9vbHRpcCgpKSx0aGlzLnVpLmRhdGFzZXQucGx1Z2lucz0odGhpcy5vcHRpb25zLnBsdWdpbnN8fFtdKS5qb2luKFwifFwiKSx0aGlzLmVtaXQoXCJyZW5kZXJcIix0aGlzLnVpKX0sZS5wcm90b3R5cGUucmVuZGVyTW9udGg9ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLG49dC5jbG9uZSgpLG89MzItbmV3IERhdGUobi5nZXRGdWxsWWVhcigpLG4uZ2V0TW9udGgoKSwzMikuZ2V0RGF0ZSgpLHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtzLmNsYXNzTmFtZT1hLm1vbnRoSXRlbTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO2MuY2xhc3NOYW1lPWEubW9udGhJdGVtSGVhZGVyO3ZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7aWYodGhpcy5vcHRpb25zLmRyb3Bkb3ducy5tb250aHMpe3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIik7cC5jbGFzc05hbWU9YS5tb250aEl0ZW1OYW1lO2Zvcih2YXIgZD0wO2Q8MTI7ZCs9MSl7dmFyIHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiKSxtPW5ldyByLkRhdGVUaW1lKG5ldyBEYXRlKHQuZ2V0RnVsbFllYXIoKSxkLDIsMCwwLDApKSxmPW5ldyByLkRhdGVUaW1lKG5ldyBEYXRlKHQuZ2V0RnVsbFllYXIoKSxkLDEsMCwwLDApKTt1LnZhbHVlPVN0cmluZyhkKSx1LnRleHQ9bS50b0xvY2FsZVN0cmluZyh0aGlzLm9wdGlvbnMubGFuZyx7bW9udGg6XCJsb25nXCJ9KSx1LmRpc2FibGVkPXRoaXMub3B0aW9ucy5taW5EYXRlJiZmLmlzQmVmb3JlKG5ldyByLkRhdGVUaW1lKHRoaXMub3B0aW9ucy5taW5EYXRlKSxcIm1vbnRoXCIpfHx0aGlzLm9wdGlvbnMubWF4RGF0ZSYmZi5pc0FmdGVyKG5ldyByLkRhdGVUaW1lKHRoaXMub3B0aW9ucy5tYXhEYXRlKSxcIm1vbnRoXCIpLHUuc2VsZWN0ZWQ9Zi5nZXRNb250aCgpPT09dC5nZXRNb250aCgpLHAuYXBwZW5kQ2hpbGQodSl9cC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsKGZ1bmN0aW9uKHQpe3ZhciBlPXQudGFyZ2V0LG49MDtpZihpLm9wdGlvbnMuc3BsaXRWaWV3KXt2YXIgbz1lLmNsb3Nlc3QoXCIuXCIrYS5tb250aEl0ZW0pO249bC5maW5kTmVzdGVkTW9udGhJdGVtKG8pfWkuY2FsZW5kYXJzW25dLnNldE1vbnRoKE51bWJlcihlLnZhbHVlKSksaS5yZW5kZXIoKSxpLmVtaXQoXCJjaGFuZ2U6bW9udGhcIixpLmNhbGVuZGFyc1tuXSxuLHQpfSkpLGguYXBwZW5kQ2hpbGQocCl9ZWxzZXsobT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3Ryb25nXCIpKS5jbGFzc05hbWU9YS5tb250aEl0ZW1OYW1lLG0uaW5uZXJIVE1MPXQudG9Mb2NhbGVTdHJpbmcodGhpcy5vcHRpb25zLmxhbmcse21vbnRoOlwibG9uZ1wifSksaC5hcHBlbmRDaGlsZChtKX1pZih0aGlzLm9wdGlvbnMuZHJvcGRvd25zLnllYXJzKXt2YXIgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIpO2cuY2xhc3NOYW1lPWEubW9udGhJdGVtWWVhcjt2YXIgdj10aGlzLm9wdGlvbnMuZHJvcGRvd25zLm1pblllYXIseT10aGlzLm9wdGlvbnMuZHJvcGRvd25zLm1heFllYXI/dGhpcy5vcHRpb25zLmRyb3Bkb3ducy5tYXhZZWFyOihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKTtpZih0LmdldEZ1bGxZZWFyKCk+eSkodT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIpKS52YWx1ZT1TdHJpbmcodC5nZXRGdWxsWWVhcigpKSx1LnRleHQ9U3RyaW5nKHQuZ2V0RnVsbFllYXIoKSksdS5zZWxlY3RlZD0hMCx1LmRpc2FibGVkPSEwLGcuYXBwZW5kQ2hpbGQodSk7Zm9yKGQ9eTtkPj12O2QtPTEpe3ZhciB1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiksYj1uZXcgci5EYXRlVGltZShuZXcgRGF0ZShkLDAsMSwwLDAsMCkpO3UudmFsdWU9U3RyaW5nKGQpLHUudGV4dD1TdHJpbmcoZCksdS5kaXNhYmxlZD10aGlzLm9wdGlvbnMubWluRGF0ZSYmYi5pc0JlZm9yZShuZXcgci5EYXRlVGltZSh0aGlzLm9wdGlvbnMubWluRGF0ZSksXCJ5ZWFyXCIpfHx0aGlzLm9wdGlvbnMubWF4RGF0ZSYmYi5pc0FmdGVyKG5ldyByLkRhdGVUaW1lKHRoaXMub3B0aW9ucy5tYXhEYXRlKSxcInllYXJcIiksdS5zZWxlY3RlZD10LmdldEZ1bGxZZWFyKCk9PT1kLGcuYXBwZW5kQ2hpbGQodSl9aWYodC5nZXRGdWxsWWVhcigpPHYpKHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiKSkudmFsdWU9U3RyaW5nKHQuZ2V0RnVsbFllYXIoKSksdS50ZXh0PVN0cmluZyh0LmdldEZ1bGxZZWFyKCkpLHUuc2VsZWN0ZWQ9ITAsdS5kaXNhYmxlZD0hMCxnLmFwcGVuZENoaWxkKHUpO2lmKFwiYXNjXCI9PT10aGlzLm9wdGlvbnMuZHJvcGRvd25zLnllYXJzKXt2YXIgaz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChnLmNoaWxkTm9kZXMpLnJldmVyc2UoKTtnLmlubmVySFRNTD1cIlwiLGsuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5pbm5lckhUTUw9dC52YWx1ZSxnLmFwcGVuZENoaWxkKHQpfSkpfWcuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLChmdW5jdGlvbih0KXt2YXIgZT10LnRhcmdldCxuPTA7aWYoaS5vcHRpb25zLnNwbGl0Vmlldyl7dmFyIG89ZS5jbG9zZXN0KFwiLlwiK2EubW9udGhJdGVtKTtuPWwuZmluZE5lc3RlZE1vbnRoSXRlbShvKX1pLmNhbGVuZGFyc1tuXS5zZXRGdWxsWWVhcihOdW1iZXIoZS52YWx1ZSkpLGkucmVuZGVyKCksaS5lbWl0KFwiY2hhbmdlOnllYXJcIixpLmNhbGVuZGFyc1tuXSxuLHQpfSkpLGguYXBwZW5kQ2hpbGQoZyl9ZWxzZXt2YXIgdz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTt3LmNsYXNzTmFtZT1hLm1vbnRoSXRlbVllYXIsdy5pbm5lckhUTUw9U3RyaW5nKHQuZ2V0RnVsbFllYXIoKSksaC5hcHBlbmRDaGlsZCh3KX12YXIgRD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIpO0QudHlwZT1cImJ1dHRvblwiLEQuY2xhc3NOYW1lPWEuYnV0dG9uUHJldmlvdXNNb250aCxELmlubmVySFRNTD10aGlzLm9wdGlvbnMuYnV0dG9uVGV4dC5wcmV2aW91c01vbnRoO3Z
1hciB4PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7eC50eXBlPVwiYnV0dG9uXCIseC5jbGFzc05hbWU9YS5idXR0b25OZXh0TW9udGgseC5pbm5lckhUTUw9dGhpcy5vcHRpb25zLmJ1dHRvblRleHQubmV4dE1vbnRoLGMuYXBwZW5kQ2hpbGQoRCksYy5hcHBlbmRDaGlsZChoKSxjLmFwcGVuZENoaWxkKHgpLHRoaXMub3B0aW9ucy5taW5EYXRlJiZuLmlzU2FtZU9yQmVmb3JlKG5ldyByLkRhdGVUaW1lKHRoaXMub3B0aW9ucy5taW5EYXRlKSxcIm1vbnRoXCIpJiZzLmNsYXNzTGlzdC5hZGQoYS5ub1ByZXZpb3VzTW9udGgpLHRoaXMub3B0aW9ucy5tYXhEYXRlJiZuLmlzU2FtZU9yQWZ0ZXIobmV3IHIuRGF0ZVRpbWUodGhpcy5vcHRpb25zLm1heERhdGUpLFwibW9udGhcIikmJnMuY2xhc3NMaXN0LmFkZChhLm5vTmV4dE1vbnRoKTt2YXIgTT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO00uY2xhc3NOYW1lPWEubW9udGhJdGVtV2Vla2RheXNSb3csdGhpcy5vcHRpb25zLnNob3dXZWVrTnVtYmVycyYmKE0uaW5uZXJIVE1MPVwiPGRpdj5XPC9kaXY+XCIpO2Zvcih2YXIgXz0xO188PTc7Xys9MSl7dmFyIFQ9Myt0aGlzLm9wdGlvbnMuZmlyc3REYXkrXyxMPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7TC5pbm5lckhUTUw9dGhpcy53ZWVrZGF5TmFtZShUKSxMLnRpdGxlPXRoaXMud2Vla2RheU5hbWUoVCxcImxvbmdcIiksTS5hcHBlbmRDaGlsZChMKX12YXIgRT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO0UuY2xhc3NOYW1lPWEuY29udGFpbmVyRGF5czt2YXIgUz10aGlzLmNhbGNTa2lwRGF5cyhuKTt0aGlzLm9wdGlvbnMuc2hvd1dlZWtOdW1iZXJzJiZTJiZFLmFwcGVuZENoaWxkKHRoaXMucmVuZGVyV2Vla051bWJlcihuKSk7Zm9yKHZhciBJPTA7STxTO0krPTEpe3ZhciBQPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7RS5hcHBlbmRDaGlsZChQKX1mb3IoST0xO0k8PW87SSs9MSluLnNldERhdGUoSSksdGhpcy5vcHRpb25zLnNob3dXZWVrTnVtYmVycyYmbi5nZXREYXkoKT09PXRoaXMub3B0aW9ucy5maXJzdERheSYmRS5hcHBlbmRDaGlsZCh0aGlzLnJlbmRlcldlZWtOdW1iZXIobikpLEUuYXBwZW5kQ2hpbGQodGhpcy5yZW5kZXJEYXkobikpO3JldHVybiBzLmFwcGVuZENoaWxkKGMpLHMuYXBwZW5kQ2hpbGQoTSkscy5hcHBlbmRDaGlsZChFKSx0aGlzLmVtaXQoXCJyZW5kZXI6bW9udGhcIixzLHQpLHN9LGUucHJvdG90eXBlLnJlbmRlckRheT1mdW5jdGlvbih0KXt0LnNldEhvdXJzKCk7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtpZihlLmNsYXNzTmFtZT1hLmRheUl0ZW0sZS5pbm5lckhUTUw9U3RyaW5nKHQuZ2V0RGF0ZSgpKSxlLmRhdGFzZXQudGltZT1TdHJpbmcodC5nZXRUaW1lKCkpLHQudG9EYXRlU3RyaW5nKCk9PT0obmV3IERhdGUpLnRvRGF0ZVN0cmluZygpJiZlLmNsYXNzTGlzdC5hZGQoYS5pc1RvZGF5KSx0aGlzLmRhdGVQaWNrZWQubGVuZ3RoKXRoaXMuZGF0ZVBpY2tlZFswXS50b0RhdGVTdHJpbmcoKT09PXQudG9EYXRlU3RyaW5nKCkmJihlLmNsYXNzTGlzdC5hZGQoYS5pc1N0YXJ0RGF0ZSksdGhpcy5vcHRpb25zLnNpbmdsZU1vZGUmJmUuY2xhc3NMaXN0LmFkZChhLmlzRW5kRGF0ZSkpLDI9PT10aGlzLmRhdGVQaWNrZWQubGVuZ3RoJiZ0aGlzLmRhdGVQaWNrZWRbMV0udG9EYXRlU3RyaW5nKCk9PT10LnRvRGF0ZVN0cmluZygpJiZlLmNsYXNzTGlzdC5hZGQoYS5pc0VuZERhdGUpLDI9PT10aGlzLmRhdGVQaWNrZWQubGVuZ3RoJiZ0LmlzQmV0d2Vlbih0aGlzLmRhdGVQaWNrZWRbMF0sdGhpcy5kYXRlUGlja2VkWzFdKSYmZS5jbGFzc0xpc3QuYWRkKGEuaXNJblJhbmdlKTtlbHNlIGlmKHRoaXMub3B0aW9ucy5zdGFydERhdGUpe3ZhciBpPXRoaXMub3B0aW9ucy5zdGFydERhdGUsbj10aGlzLm9wdGlvbnMuZW5kRGF0ZTtpLnRvRGF0ZVN0cmluZygpPT09dC50b0RhdGVTdHJpbmcoKSYmKGUuY2xhc3NMaXN0LmFkZChhLmlzU3RhcnREYXRlKSx0aGlzLm9wdGlvbnMuc2luZ2xlTW9kZSYmZS5jbGFzc0xpc3QuYWRkKGEuaXNFbmREYXRlKSksbiYmbi50b0RhdGVTdHJpbmcoKT09PXQudG9EYXRlU3RyaW5nKCkmJmUuY2xhc3NMaXN0LmFkZChhLmlzRW5kRGF0ZSksaSYmbiYmdC5pc0JldHdlZW4oaSxuKSYmZS5jbGFzc0xpc3QuYWRkKGEuaXNJblJhbmdlKX1pZih0aGlzLm9wdGlvbnMubWluRGF0ZSYmdC5pc0JlZm9yZShuZXcgci5EYXRlVGltZSh0aGlzLm9wdGlvbnMubWluRGF0ZSkpJiZlLmNsYXNzTGlzdC5hZGQoYS5pc0xvY2tlZCksdGhpcy5vcHRpb25zLm1heERhdGUmJnQuaXNBZnRlcihuZXcgci5EYXRlVGltZSh0aGlzLm9wdGlvbnMubWF4RGF0ZSkpJiZlLmNsYXNzTGlzdC5hZGQoYS5pc0xvY2tlZCksdGhpcy5vcHRpb25zLm1pbkRheXM+MSYmMT09PXRoaXMuZGF0ZVBpY2tlZC5sZW5ndGgpe3ZhciBvPXRoaXMub3B0aW9ucy5taW5EYXlzLTEscz10aGlzLmRhdGVQaWNrZWRbMF0uY2xvbmUoKS5zdWJ0cmFjdChvLFwiZGF5XCIpLGM9dGhpcy5kYXRlUGlja2VkWzBdLmNsb25lKCkuYWRkKG8sXCJkYXlcIik7dC5pc0JldHdlZW4ocyx0aGlzLmRhdGVQaWNrZWRbMF0sXCIoXVwiKSYmZS5jbGFzc0xpc3QuYWRkKGEuaXNMb2NrZWQpLHQuaXNCZXR3ZWVuKHRoaXMuZGF0ZVBpY2tlZFswXSxjLFwiWylcIikmJmUuY2xhc3NMaXN0LmFkZChhLmlzTG9ja2VkKX1pZih0aGlzLm9wdGlvbnMubWF4RGF5cyYmMT09PXRoaXMuZGF0ZVBpY2tlZC5sZW5ndGgpe3ZhciBoPXRoaXMub3B0aW9ucy5tYXhEYXlzO3M9dGhpcy5kYXRlUGlja2VkWzBdLmNsb25lKCkuc3VidHJhY3QoaCxcImRheVwiKSxjPXRoaXMuZGF0ZVBpY2tlZFswXS5jbG9uZSgpLmFkZChoLFwiZGF5XCIpO3QuaXNTYW1lT3JCZWZvcmUocykmJmUuY2xhc3NMaXN0LmFkZChhLmlzTG9ja2VkKSx0LmlzU2FtZU9yQWZ0ZXIoYykmJmUuY2xhc3NMaXN0LmFkZChhLmlzTG9ja2VkKX0odGhpcy5vcHRpb25zLnNlbGVjdEZvcndhcmQmJjE9PT10aGlzLmRhdGVQaWNrZWQubGVuZ3RoJiZ0LmlzQmVmb3JlKHRoaXMuZGF0ZVBpY2tlZFswXSkmJmUuY2xhc3NMaXN0LmFkZChhLmlzTG9ja2VkKSx0aGlzLm9wdGlvbnMuc2VsZWN0QmFja3dhcmQmJjE9PT10aGlzLmRhdGVQaWNrZWQubGVuZ3RoJiZ0LmlzQWZ0ZXIodGhpcy5kYXRlUGlja2VkWzBdKSYmZS5jbGFzc0xpc3QuYWRkKGEuaXNMb2NrZWQpLGwuZGF0ZUlzTG9ja2VkKHQsdGhpcy5vcHRpb25zLHRoaXMuZGF0ZVBpY2tlZCkmJmUuY2xhc3NMaXN0LmFkZChhLmlzTG9ja2VkKSx0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0ZWREYXlzLmxlbmd0aCkmJih0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0ZWREYXlzLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBBcnJheT90LmlzQmV0d2VlbihlWzBdLGVbMV0sXCJbXVwiKTplLmlzU2FtZSh0LFwiZGF5XCIpfSkpLmxlbmd0aCYmZS5jbGFzc0xpc3QuYWRkKGEuaXNIaWdobGlnaHRlZCkpO3JldHVybiBlLnRhYkluZGV4PWUuY2xhc3NMaXN0LmNvbnRhaW5zKFwiaXMtbG9ja2VkXCIpPy0xOjAsdGhpcy5lbWl0KFwicmVuZGVyOmRheVwiLGUsdCksZX0sZS5wcm90b3R5cGUucmVuZGVyRm9vdGVyPWZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtpZih0LmNsYXNzTmFtZT1hLmNvbnRhaW5lckZvb3Rlcix0aGlzLm9wdGlvbnMuZm9vdGVySFRNTD90LmlubmVySFRNTD10aGlzLm9wdGlvbnMuZm9vdGVySFRNTDp0LmlubmVySFRNTD0nXFxuICAgICAgPHNwYW4gY2xhc3M9XCInK2EucHJldmlld0RhdGVSYW5nZSsnXCI+PC9zcGFuPlxcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiJythLmJ1dHRvbkNhbmNlbCsnXCI+Jyt0aGlzLm9wdGlvbnMuYnV0dG9uVGV4dC5jYW5jZWwrJzwvYnV0dG9uPlxcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiJythLmJ1dHRvbkFwcGx5KydcIj4nK3RoaXMub3B0aW9ucy5idXR0b25UZXh0LmFwcGx5K1wiP
1C9idXR0b24+XFxuICAgICAgXCIsdGhpcy5vcHRpb25zLnNpbmdsZU1vZGUpe2lmKDE9PT10aGlzLmRhdGVQaWNrZWQubGVuZ3RoKXt2YXIgZT10aGlzLmRhdGVQaWNrZWRbMF0uZm9ybWF0KHRoaXMub3B0aW9ucy5mb3JtYXQsdGhpcy5vcHRpb25zLmxhbmcpO3QucXVlcnlTZWxlY3RvcihcIi5cIithLnByZXZpZXdEYXRlUmFuZ2UpLmlubmVySFRNTD1lfX1lbHNlIGlmKDE9PT10aGlzLmRhdGVQaWNrZWQubGVuZ3RoJiZ0LnF1ZXJ5U2VsZWN0b3IoXCIuXCIrYS5idXR0b25BcHBseSkuc2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIixcIlwiKSwyPT09dGhpcy5kYXRlUGlja2VkLmxlbmd0aCl7ZT10aGlzLmRhdGVQaWNrZWRbMF0uZm9ybWF0KHRoaXMub3B0aW9ucy5mb3JtYXQsdGhpcy5vcHRpb25zLmxhbmcpO3ZhciBpPXRoaXMuZGF0ZVBpY2tlZFsxXS5mb3JtYXQodGhpcy5vcHRpb25zLmZvcm1hdCx0aGlzLm9wdGlvbnMubGFuZyk7dC5xdWVyeVNlbGVjdG9yKFwiLlwiK2EucHJldmlld0RhdGVSYW5nZSkuaW5uZXJIVE1MPVwiXCIrZSt0aGlzLm9wdGlvbnMuZGVsaW1pdGVyK2l9cmV0dXJuIHRoaXMuZW1pdChcInJlbmRlcjpmb290ZXJcIix0KSx0fSxlLnByb3RvdHlwZS5yZW5kZXJXZWVrTnVtYmVyPWZ1bmN0aW9uKHQpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksaT10LmdldFdlZWsodGhpcy5vcHRpb25zLmZpcnN0RGF5KTtyZXR1cm4gZS5jbGFzc05hbWU9YS53ZWVrTnVtYmVyLGUuaW5uZXJIVE1MPTUzPT09aSYmMD09PXQuZ2V0TW9udGgoKT9cIjUzIC8gMVwiOmksZX0sZS5wcm90b3R5cGUucmVuZGVyVG9vbHRpcD1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7cmV0dXJuIHQuY2xhc3NOYW1lPWEuY29udGFpbmVyVG9vbHRpcCx0fSxlLnByb3RvdHlwZS53ZWVrZGF5TmFtZT1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1cInNob3J0XCIpLG5ldyBEYXRlKDE5NzAsMCx0LDEyLDAsMCwwKS50b0xvY2FsZVN0cmluZyh0aGlzLm9wdGlvbnMubGFuZyx7d2Vla2RheTplfSl9LGUucHJvdG90eXBlLmNhbGNTa2lwRGF5cz1mdW5jdGlvbih0KXt2YXIgZT10LmdldERheSgpLXRoaXMub3B0aW9ucy5maXJzdERheTtyZXR1cm4gZTwwJiYoZSs9NyksZX0sZX0ocy5MUENvcmUpO2UuQ2FsZW5kYXI9Y30sZnVuY3Rpb24odCxlLGkpe1widXNlIHN0cmljdFwiO3ZhciBuLG89dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQsZSl7dC5fX3Byb3RvX189ZX18fGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShpKSYmKHRbaV09ZVtpXSl9KSh0LGUpfSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPXR9bih0LGUpLHQucHJvdG90eXBlPW51bGw9PT1lP09iamVjdC5jcmVhdGUoZSk6KGkucHJvdG90eXBlPWUucHJvdG90eXBlLG5ldyBpKX0pLHM9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4ocz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0KXtmb3IodmFyIGUsaT0xLG49YXJndW1lbnRzLmxlbmd0aDtpPG47aSsrKWZvcih2YXIgbyBpbiBlPWFyZ3VtZW50c1tpXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxvKSYmKHRbb109ZVtvXSk7cmV0dXJuIHR9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciByPWkoNyksYT1pKDApLGw9aSgxKSxjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO2kuZGF0ZVBpY2tlZD1bXSxpLmNhbGVuZGFycz1bXSxpLm9wdGlvbnM9e2VsZW1lbnQ6bnVsbCxlbGVtZW50RW5kOm51bGwscGFyZW50RWw6bnVsbCxmaXJzdERheToxLGZvcm1hdDpcIllZWVktTU0tRERcIixsYW5nOlwiZW4tVVNcIixkZWxpbWl0ZXI6XCIgLSBcIixudW1iZXJPZk1vbnRoczoxLG51bWJlck9mQ29sdW1uczoxLHN0YXJ0RGF0ZTpudWxsLGVuZERhdGU6bnVsbCx6SW5kZXg6OTk5OSxwb3NpdGlvbjpcImF1dG9cIixzZWxlY3RGb3J3YXJkOiExLHNlbGVjdEJhY2t3YXJkOiExLHNwbGl0VmlldzohMSxpbmxpbmVNb2RlOiExLHNpbmdsZU1vZGU6ITAsYXV0b0FwcGx5OiEwLGFsbG93UmVwaWNrOiExLHNob3dXZWVrTnVtYmVyczohMSxzaG93VG9vbHRpcDohMCxzY3JvbGxUb0RhdGU6ITAsbW9iaWxlRnJpZW5kbHk6ITAscmVzZXRCdXR0b246ITEsYXV0b1JlZnJlc2g6ITEsbG9ja0RheXNGb3JtYXQ6XCJZWVlZLU1NLUREXCIsbG9ja0RheXM6W10sZGlzYWxsb3dMb2NrRGF5c0luUmFuZ2U6ITEsbG9ja0RheXNJbmNsdXNpdml0eTpcIltdXCIsaGlnaGxpZ2h0ZWREYXlzRm9ybWF0OlwiWVlZWS1NTS1ERFwiLGhpZ2hsaWdodGVkRGF5czpbXSxkcm9wZG93bnM6e21pblllYXI6MTk5MCxtYXhZZWFyOm51bGwsbW9udGhzOiExLHllYXJzOiExfSxidXR0b25UZXh0OnthcHBseTpcIkFwcGx5XCIsY2FuY2VsOlwiQ2FuY2VsXCIscHJldmlvdXNNb250aDonPHN2ZyB3aWR0aD1cIjExXCIgaGVpZ2h0PVwiMTZcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk03LjkxOSAwbDIuNzQ4IDIuNjY3TDUuMzMzIDhsNS4zMzQgNS4zMzNMNy45MTkgMTYgMCA4elwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxuZXh0TW9udGg6Jzxzdmcgd2lkdGg9XCIxMVwiIGhlaWdodD1cIjE2XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMi43NDggMTZMMCAxMy4zMzMgNS4zMzMgOCAwIDIuNjY3IDIuNzQ4IDBsNy45MTkgOHpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicscmVzZXQ6JzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRcIj5cXG4gICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIi8+XFxuICAgICAgICA8cGF0aCBkPVwiTTEzIDNjLTQuOTcgMC05IDQuMDMtOSA5SDFsMy44OSAzLjg5LjA3LjE0TDkgMTJINmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuOTMgMC0zLjY4LS43OS00Ljk0LTIuMDZsLTEuNDIgMS40MkM4LjI3IDE5Ljk5IDEwLjUxIDIxIDEzIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0tMSA1djVsNC4yOCAyLjU0LjcyLTEuMjEtMy41LTIuMDhWOEgxMnpcIi8+XFxuICAgICAgPC9zdmc+J30sdG9vbHRpcFRleHQ6e29uZTpcImRheVwiLG90aGVyOlwiZGF5c1wifX0saS5vcHRpb25zPXMocyh7fSxpLm9wdGlvbnMpLGUuZWxlbWVudC5kYXRhc2V0KSxPYmplY3Qua2V5cyhpLm9wdGlvbnMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe1widHJ1ZVwiIT09aS5vcHRpb25zW3RdJiZcImZhbHNlXCIhPT1pLm9wdGlvbnNbdF18fChpLm9wdGlvbnNbdF09XCJ0cnVlXCI9PT1pLm9wdGlvbnNbdF0pfSkpO3ZhciBuPXMocyh7fSxpLm9wdGlvbnMuZHJvcGRvd25zKSxlLmRyb3Bkb3ducyksbz1zKHMoe30saS5vcHRpb25zLmJ1dHRvblRleHQpLGUuYnV0dG9uVGV4dCkscj1zKHMoe30saS5vcHRpb25zLnRvb2x0aXBUZX
1h0KSxlLnRvb2x0aXBUZXh0KTtpLm9wdGlvbnM9cyhzKHt9LGkub3B0aW9ucyksZSksaS5vcHRpb25zLmRyb3Bkb3ducz1zKHt9LG4pLGkub3B0aW9ucy5idXR0b25UZXh0PXMoe30sbyksaS5vcHRpb25zLnRvb2x0aXBUZXh0PXMoe30sciksaS5vcHRpb25zLmVsZW1lbnRFbmR8fChpLm9wdGlvbnMuYWxsb3dSZXBpY2s9ITEpLGkub3B0aW9ucy5sb2NrRGF5cy5sZW5ndGgmJihpLm9wdGlvbnMubG9ja0RheXM9YS5EYXRlVGltZS5jb252ZXJ0QXJyYXkoaS5vcHRpb25zLmxvY2tEYXlzLGkub3B0aW9ucy5sb2NrRGF5c0Zvcm1hdCkpLGkub3B0aW9ucy5oaWdobGlnaHRlZERheXMubGVuZ3RoJiYoaS5vcHRpb25zLmhpZ2hsaWdodGVkRGF5cz1hLkRhdGVUaW1lLmNvbnZlcnRBcnJheShpLm9wdGlvbnMuaGlnaGxpZ2h0ZWREYXlzLGkub3B0aW9ucy5oaWdobGlnaHRlZERheXNGb3JtYXQpKTt2YXIgbD1pLnBhcnNlSW5wdXQoKSxjPWxbMF0saD1sWzFdO2kub3B0aW9ucy5zdGFydERhdGUmJihpLm9wdGlvbnMuc2luZ2xlTW9kZXx8aS5vcHRpb25zLmVuZERhdGUpJiYoYz1uZXcgYS5EYXRlVGltZShpLm9wdGlvbnMuc3RhcnREYXRlLGkub3B0aW9ucy5mb3JtYXQsaS5vcHRpb25zLmxhbmcpKSxjJiZpLm9wdGlvbnMuZW5kRGF0ZSYmKGg9bmV3IGEuRGF0ZVRpbWUoaS5vcHRpb25zLmVuZERhdGUsaS5vcHRpb25zLmZvcm1hdCxpLm9wdGlvbnMubGFuZykpLGMgaW5zdGFuY2VvZiBhLkRhdGVUaW1lJiYhaXNOYU4oYy5nZXRUaW1lKCkpJiYoaS5vcHRpb25zLnN0YXJ0RGF0ZT1jKSxpLm9wdGlvbnMuc3RhcnREYXRlJiZoIGluc3RhbmNlb2YgYS5EYXRlVGltZSYmIWlzTmFOKGguZ2V0VGltZSgpKSYmKGkub3B0aW9ucy5lbmREYXRlPWgpLCFpLm9wdGlvbnMuc2luZ2xlTW9kZXx8aS5vcHRpb25zLnN0YXJ0RGF0ZSBpbnN0YW5jZW9mIGEuRGF0ZVRpbWV8fChpLm9wdGlvbnMuc3RhcnREYXRlPW51bGwpLGkub3B0aW9ucy5zaW5nbGVNb2RlfHxpLm9wdGlvbnMuc3RhcnREYXRlIGluc3RhbmNlb2YgYS5EYXRlVGltZSYmaS5vcHRpb25zLmVuZERhdGUgaW5zdGFuY2VvZiBhLkRhdGVUaW1lfHwoaS5vcHRpb25zLnN0YXJ0RGF0ZT1udWxsLGkub3B0aW9ucy5lbmREYXRlPW51bGwpO2Zvcih2YXIgcD0wO3A8aS5vcHRpb25zLm51bWJlck9mTW9udGhzO3ArPTEpe3ZhciBkPWkub3B0aW9ucy5zdGFydERhdGUgaW5zdGFuY2VvZiBhLkRhdGVUaW1lP2kub3B0aW9ucy5zdGFydERhdGUuY2xvbmUoKTpuZXcgYS5EYXRlVGltZTtpZighaS5vcHRpb25zLnN0YXJ0RGF0ZSYmKDA9PT1wfHxpLm9wdGlvbnMuc3BsaXRWaWV3KSl7dmFyIHU9aS5vcHRpb25zLm1heERhdGU/bmV3IGEuRGF0ZVRpbWUoaS5vcHRpb25zLm1heERhdGUpOm51bGwsbT1pLm9wdGlvbnMubWluRGF0ZT9uZXcgYS5EYXRlVGltZShpLm9wdGlvbnMubWluRGF0ZSk6bnVsbCxmPWkub3B0aW9ucy5udW1iZXJPZk1vbnRocy0xO20mJnUmJmQuaXNBZnRlcih1KT8oZD1tLmNsb25lKCkpLnNldERhdGUoMSk6IW0mJnUmJmQuaXNBZnRlcih1KSYmKChkPXUuY2xvbmUoKSkuc2V0RGF0ZSgxKSxkLnNldE1vbnRoKGQuZ2V0TW9udGgoKS1mKSl9ZC5zZXREYXRlKDEpLGQuc2V0TW9udGgoZC5nZXRNb250aCgpK3ApLGkuY2FsZW5kYXJzW3BdPWR9aWYoaS5vcHRpb25zLnNob3dUb29sdGlwKWlmKGkub3B0aW9ucy50b29sdGlwUGx1cmFsU2VsZWN0b3IpaS5wbHVyYWxTZWxlY3Rvcj1pLm9wdGlvbnMudG9vbHRpcFBsdXJhbFNlbGVjdG9yO2Vsc2UgdHJ5e3ZhciBnPW5ldyBJbnRsLlBsdXJhbFJ1bGVzKGkub3B0aW9ucy5sYW5nKTtpLnBsdXJhbFNlbGVjdG9yPWcuc2VsZWN0LmJpbmQoZyl9Y2F0Y2godCl7aS5wbHVyYWxTZWxlY3Rvcj1mdW5jdGlvbih0KXtyZXR1cm4gMD09PU1hdGguYWJzKHQpP1wib25lXCI6XCJvdGhlclwifX1yZXR1cm4gaX1yZXR1cm4gbyhlLHQpLGUuYWRkPWZ1bmN0aW9uKHQsZSl7bC5MaXRlcGlja2VyLnByb3RvdHlwZVt0XT1lfSxlLnByb3RvdHlwZS5EYXRlVGltZT1mdW5jdGlvbih0LGUpe3JldHVybiB0P25ldyBhLkRhdGVUaW1lKHQsZSk6bmV3IGEuRGF0ZVRpbWV9LGUucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMub3B0aW9ucy5wbHVnaW5zJiZ0aGlzLm9wdGlvbnMucGx1Z2lucy5sZW5ndGgmJnRoaXMub3B0aW9ucy5wbHVnaW5zLmZvckVhY2goKGZ1bmN0aW9uKGUpe2wuTGl0ZXBpY2tlci5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoZSk/bC5MaXRlcGlja2VyLnByb3RvdHlwZVtlXS5pbml0LmNhbGwodCx0KTpjb25zb2xlLndhcm4oXCJMaXRlcGlja2VyOiBwbHVnaW4gwqtcIitlK1wiwrsgbm90IGZvdW5kLlwiKX0pKX0sZS5wcm90b3R5cGUucGFyc2VJbnB1dD1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5kZWxpbWl0ZXIsZT1uZXcgUmVnRXhwKFwiXCIrdCksaT10aGlzLm9wdGlvbnMuZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQ/dGhpcy5vcHRpb25zLmVsZW1lbnQudmFsdWUuc3BsaXQodCk6W107aWYodGhpcy5vcHRpb25zLmVsZW1lbnRFbmQpe2lmKHRoaXMub3B0aW9ucy5lbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCYmdGhpcy5vcHRpb25zLmVsZW1lbnQudmFsdWUubGVuZ3RoJiZ0aGlzLm9wdGlvbnMuZWxlbWVudEVuZCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQmJnRoaXMub3B0aW9ucy5lbGVtZW50RW5kLnZhbHVlLmxlbmd0aClyZXR1cm5bbmV3IGEuRGF0ZVRpbWUodGhpcy5vcHRpb25zLmVsZW1lbnQudmFsdWUsdGhpcy5vcHRpb25zLmZvcm1hdCksbmV3IGEuRGF0ZVRpbWUodGhpcy5vcHRpb25zLmVsZW1lbnRFbmQudmFsdWUsdGhpcy5vcHRpb25zLmZvcm1hdCldfWVsc2UgaWYodGhpcy5vcHRpb25zLnNpbmdsZU1vZGUpe2lmKHRoaXMub3B0aW9ucy5lbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCYmdGhpcy5vcHRpb25zLmVsZW1lbnQudmFsdWUubGVuZ3RoKXJldHVybltuZXcgYS5EYXRlVGltZSh0aGlzLm9wdGlvbnMuZWxlbWVudC52YWx1ZSx0aGlzLm9wdGlvbnMuZm9ybWF0KV19ZWxzZSBpZih0aGlzLm9wdGlvbnMuZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQmJmUudGVzdCh0aGlzLm9wdGlvbnMuZWxlbWVudC52YWx1ZSkmJmkubGVuZ3RoJiZpLmxlbmd0aCUyPT0wKXt2YXIgbj1pLnNsaWNlKDAsaS5sZW5ndGgvMikuam9pbih0KSxvPWkuc2xpY2UoaS5sZW5ndGgvMikuam9pbih0KTtyZXR1cm5bbmV3IGEuRGF0ZVRpbWUobix0aGlzLm9wdGlvbnMuZm9ybWF0KSxuZXcgYS5EYXRlVGltZShvLHRoaXMub3B0aW9ucy5mb3JtYXQpXX1yZXR1cm5bXX0sZS5wcm90b3R5cGUuaXNTaG93bmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVpJiZcIm5vbmVcIiE9PXRoaXMudWkuc3R5bGUuZGlzcGxheX0sZS5wcm90b3R5cGUuZmluZFBvc2l0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT10aGlzLnVpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49dGhpcy5vcHRpb25zLnBvc2l0aW9uLnNwbGl0KFwiIFwiKSxvPXdpbmRvdy5zY3JvbGxYfHx3aW5kb3cucGFnZVhPZmZzZXQscz13aW5kb3cuc2Nyb2xsWXx8d2luZG93LnBhZ2VZT2Zmc2V0LHI9MCxhPTA7aWYoXCJhdXRvXCIhPT1uWzBdJiYvdG9wfGJvdHRvbS8udGVzdChuWzBdKSlyPWVbblswXV0rcyxcInRvcFwiPT09blswXSYmKHItPWkuaGVpZ2h0KTtlbHNle3I9ZS5ib3R0b20rczt2YXIgbD1lLmJvdHRvbStpLmhlaWdodD53aW5kb3cuaW5uZXJIZWlnaHQsYz1lLnRvcCtzLWkuaGVpZ2h0Pj1pLmhlaWdodDtsJiZjJiYocj1lLnRvcCtzLWkuaGVpZ2h0KX1pZigvbGVmdHxyaWdodC8udGVzdChuWzBdKXx8blsxXSYmXCJhdXRvXCIhPT1uWzFdJiYvbGVmdHxyaWdodC8udGVzdChuWzFdKSlhPS9sZWZ0fHJpZ2h0Ly50ZXN0KG5bMF0pP2VbblswXV0rbzplW25bMV1dK28sXCJyaWdodFwiIT09blswXSYmXCJyaWdodFwiIT09blsxXXx8KGEtPWkud2lkdGgpO2Vsc2V7YT1lLmxlZnQrbztsPWUubGVmdCtpLndpZHR
1oPndpbmRvdy5pbm5lcldpZHRoO3ZhciBoPWUucmlnaHQrby1pLndpZHRoPj0wO2wmJmgmJihhPWUucmlnaHQrby1pLndpZHRoKX1yZXR1cm57bGVmdDphLHRvcDpyfX0sZX0oci5FdmVudEVtaXR0ZXIpO2UuTFBDb3JlPWN9LGZ1bmN0aW9uKHQsZSxpKXtcInVzZSBzdHJpY3RcIjt2YXIgbixvPVwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0P1JlZmxlY3Q6bnVsbCxzPW8mJlwiZnVuY3Rpb25cIj09dHlwZW9mIG8uYXBwbHk/by5hcHBseTpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKHQsZSxpKX07bj1vJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBvLm93bktleXM/by5vd25LZXlzOk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpKX06ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpfTt2YXIgcj1OdW1iZXIuaXNOYU58fGZ1bmN0aW9uKHQpe3JldHVybiB0IT10fTtmdW5jdGlvbiBhKCl7YS5pbml0LmNhbGwodGhpcyl9dC5leHBvcnRzPWEsYS5FdmVudEVtaXR0ZXI9YSxhLnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMCxhLnByb3RvdHlwZS5fZXZlbnRzQ291bnQ9MCxhLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMDt2YXIgbD0xMDtmdW5jdGlvbiBjKHQpe3JldHVybiB2b2lkIDA9PT10Ll9tYXhMaXN0ZW5lcnM/YS5kZWZhdWx0TWF4TGlzdGVuZXJzOnQuX21heExpc3RlbmVyc31mdW5jdGlvbiBoKHQsZSxpLG4pe3ZhciBvLHMscixhO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgaSk7aWYodm9pZCAwPT09KHM9dC5fZXZlbnRzKT8ocz10Ll9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0Ll9ldmVudHNDb3VudD0wKToodm9pZCAwIT09cy5uZXdMaXN0ZW5lciYmKHQuZW1pdChcIm5ld0xpc3RlbmVyXCIsZSxpLmxpc3RlbmVyP2kubGlzdGVuZXI6aSkscz10Ll9ldmVudHMpLHI9c1tlXSksdm9pZCAwPT09cilyPXNbZV09aSwrK3QuX2V2ZW50c0NvdW50O2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygcj9yPXNbZV09bj9baSxyXTpbcixpXTpuP3IudW5zaGlmdChpKTpyLnB1c2goaSksKG89Yyh0KSk+MCYmci5sZW5ndGg+byYmIXIud2FybmVkKXtyLndhcm5lZD0hMDt2YXIgbD1uZXcgRXJyb3IoXCJQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuIFwiK3IubGVuZ3RoK1wiIFwiK1N0cmluZyhlKStcIiBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0XCIpO2wubmFtZT1cIk1heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZ1wiLGwuZW1pdHRlcj10LGwudHlwZT1lLGwuY291bnQ9ci5sZW5ndGgsYT1sLGNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKGEpfXJldHVybiB0fWZ1bmN0aW9uIHAoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdC5wdXNoKGFyZ3VtZW50c1tlXSk7dGhpcy5maXJlZHx8KHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSx0aGlzLndyYXBGbiksdGhpcy5maXJlZD0hMCxzKHRoaXMubGlzdGVuZXIsdGhpcy50YXJnZXQsdCkpfWZ1bmN0aW9uIGQodCxlLGkpe3ZhciBuPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDp0LHR5cGU6ZSxsaXN0ZW5lcjppfSxvPXAuYmluZChuKTtyZXR1cm4gby5saXN0ZW5lcj1pLG4ud3JhcEZuPW8sb31mdW5jdGlvbiB1KHQsZSxpKXt2YXIgbj10Ll9ldmVudHM7aWYodm9pZCAwPT09bilyZXR1cm5bXTt2YXIgbz1uW2VdO3JldHVybiB2b2lkIDA9PT1vP1tdOlwiZnVuY3Rpb25cIj09dHlwZW9mIG8/aT9bby5saXN0ZW5lcnx8b106W29dOmk/ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCksaT0wO2k8ZS5sZW5ndGg7KytpKWVbaV09dFtpXS5saXN0ZW5lcnx8dFtpXTtyZXR1cm4gZX0obyk6ZihvLG8ubGVuZ3RoKX1mdW5jdGlvbiBtKHQpe3ZhciBlPXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT1lKXt2YXIgaT1lW3RdO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGkpcmV0dXJuIDE7aWYodm9pZCAwIT09aSlyZXR1cm4gaS5sZW5ndGh9cmV0dXJuIDB9ZnVuY3Rpb24gZih0LGUpe2Zvcih2YXIgaT1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24paVtuXT10W25dO3JldHVybiBpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLFwiZGVmYXVsdE1heExpc3RlbmVyc1wiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsfSxzZXQ6ZnVuY3Rpb24odCl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHR8fHQ8MHx8cih0KSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiZGVmYXVsdE1heExpc3RlbmVyc1wiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrdCtcIi5cIik7bD10fX0pLGEuaW5pdD1mdW5jdGlvbigpe3ZvaWQgMCE9PXRoaXMuX2V2ZW50cyYmdGhpcy5fZXZlbnRzIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHN8fCh0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKSx0aGlzLl9tYXhMaXN0ZW5lcnM9dGhpcy5fbWF4TGlzdGVuZXJzfHx2b2lkIDB9LGEucHJvdG90eXBlLnNldE1heExpc3RlbmVycz1mdW5jdGlvbih0KXtpZihcIm51bWJlclwiIT10eXBlb2YgdHx8dDwwfHxyKHQpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJuXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyt0K1wiLlwiKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPXQsdGhpc30sYS5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIGModGhpcyl9LGEucHJvdG90eXBlLmVtaXQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKWUucHVzaChhcmd1bWVudHNbaV0pO3ZhciBuPVwiZXJyb3JcIj09PXQsbz10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09byluPW4mJnZvaWQgMD09PW8uZXJyb3I7ZWxzZSBpZighbil
1yZXR1cm4hMTtpZihuKXt2YXIgcjtpZihlLmxlbmd0aD4wJiYocj1lWzBdKSxyIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgcjt2YXIgYT1uZXcgRXJyb3IoXCJVbmhhbmRsZWQgZXJyb3IuXCIrKHI/XCIgKFwiK3IubWVzc2FnZStcIilcIjpcIlwiKSk7dGhyb3cgYS5jb250ZXh0PXIsYX12YXIgbD1vW3RdO2lmKHZvaWQgMD09PWwpcmV0dXJuITE7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbClzKGwsdGhpcyxlKTtlbHNle3ZhciBjPWwubGVuZ3RoLGg9ZihsLGMpO2ZvcihpPTA7aTxjOysraSlzKGhbaV0sdGhpcyxlKX1yZXR1cm4hMH0sYS5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaCh0aGlzLHQsZSwhMSl9LGEucHJvdG90eXBlLm9uPWEucHJvdG90eXBlLmFkZExpc3RlbmVyLGEucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3JldHVybiBoKHRoaXMsdCxlLCEwKX0sYS5wcm90b3R5cGUub25jZT1mdW5jdGlvbih0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgZSk7cmV0dXJuIHRoaXMub24odCxkKHRoaXMsdCxlKSksdGhpc30sYS5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgZSk7cmV0dXJuIHRoaXMucHJlcGVuZExpc3RlbmVyKHQsZCh0aGlzLHQsZSkpLHRoaXN9LGEucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7dmFyIGksbixvLHMscjtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImxpc3RlbmVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGUpO2lmKHZvaWQgMD09PShuPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09KGk9blt0XSkpcmV0dXJuIHRoaXM7aWYoaT09PWV8fGkubGlzdGVuZXI9PT1lKTA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6KGRlbGV0ZSBuW3RdLG4ucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdChcInJlbW92ZUxpc3RlbmVyXCIsdCxpLmxpc3RlbmVyfHxlKSk7ZWxzZSBpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBpKXtmb3Iobz0tMSxzPWkubGVuZ3RoLTE7cz49MDtzLS0paWYoaVtzXT09PWV8fGlbc10ubGlzdGVuZXI9PT1lKXtyPWlbc10ubGlzdGVuZXIsbz1zO2JyZWFrfWlmKG88MClyZXR1cm4gdGhpczswPT09bz9pLnNoaWZ0KCk6ZnVuY3Rpb24odCxlKXtmb3IoO2UrMTx0Lmxlbmd0aDtlKyspdFtlXT10W2UrMV07dC5wb3AoKX0oaSxvKSwxPT09aS5sZW5ndGgmJihuW3RdPWlbMF0pLHZvaWQgMCE9PW4ucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdChcInJlbW92ZUxpc3RlbmVyXCIsdCxyfHxlKX1yZXR1cm4gdGhpc30sYS5wcm90b3R5cGUub2ZmPWEucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLGEucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbih0KXt2YXIgZSxpLG47aWYodm9pZCAwPT09KGk9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT1pLnJlbW92ZUxpc3RlbmVyKXJldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD8odGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCk6dm9pZCAwIT09aVt0XSYmKDA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6ZGVsZXRlIGlbdF0pLHRoaXM7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBvLHM9T2JqZWN0LmtleXMoaSk7Zm9yKG49MDtuPHMubGVuZ3RoOysrbilcInJlbW92ZUxpc3RlbmVyXCIhPT0obz1zW25dKSYmdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMobyk7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKFwicmVtb3ZlTGlzdGVuZXJcIiksdGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCx0aGlzfWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mKGU9aVt0XSkpdGhpcy5yZW1vdmVMaXN0ZW5lcih0LGUpO2Vsc2UgaWYodm9pZCAwIT09ZSlmb3Iobj1lLmxlbmd0aC0xO24+PTA7bi0tKXRoaXMucmVtb3ZlTGlzdGVuZXIodCxlW25dKTtyZXR1cm4gdGhpc30sYS5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybiB1KHRoaXMsdCwhMCl9LGEucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbih0KXtyZXR1cm4gdSh0aGlzLHQsITEpfSxhLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0Lmxpc3RlbmVyQ291bnQ/dC5saXN0ZW5lckNvdW50KGUpOm0uY2FsbCh0LGUpfSxhLnByb3RvdHlwZS5saXN0ZW5lckNvdW50PW0sYS5wcm90b3R5cGUuZXZlbnROYW1lcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ldmVudHNDb3VudD4wP24odGhpcy5fZXZlbnRzKTpbXX19LGZ1bmN0aW9uKHQsZSxpKXsoZT1pKDkpKCExKSkucHVzaChbdC5pLCc6cm9vdHstLWxpdGVwaWNrZXItY29udGFpbmVyLW1vbnRocy1jb2xvci1iZzogI2ZmZjstLWxpdGVwaWNrZXItY29udGFpbmVyLW1vbnRocy1ib3gtc2hhZG93LWNvbG9yOiAjZGRkOy0tbGl0ZXBpY2tlci1mb290ZXItY29sb3ItYmc6ICNmYWZhZmE7LS1saXRlcGlja2VyLWZvb3Rlci1ib3gtc2hhZG93LWNvbG9yOiAjZGRkOy0tbGl0ZXBpY2tlci10b29sdGlwLWNvbG9yLWJnOiAjZmZmOy0tbGl0ZXBpY2tlci1tb250aC1oZWFkZXItY29sb3I6ICMzMzM7LS1saXRlcGlja2VyLWJ1dHRvbi1wcmV2LW1vbnRoLWNvbG9yOiAjOWU5ZTllOy0tbGl0ZXBpY2tlci1idXR0b24tbmV4dC1tb250aC1jb2xvcjogIzllOWU5ZTstLWxpdGVwaWNrZXItYnV0dG9uLXByZXYtbW9udGgtY29sb3ItaG92ZXI6ICMyMTk2ZjM7LS1saXRlcGlja2VyLWJ1dHRvbi1uZXh0LW1vbnRoLWNvbG9yLWhvdmVyOiAjMjE5NmYzOy0tbGl0ZXBpY2tlci1tb250aC13aWR0aDogY2FsYyh2YXIoLS1saXRlcGlja2VyLWRheS13aWR0aCkgKiA3KTstLWxpdGVwaWNrZXItbW9udGgtd2Vla2RheS1jb2xvcjogIzllOWU5ZTstLWxpdGVwaWNrZXItbW9udGgtd2Vlay1udW1iZXItY29sb3I6ICM5ZTllOWU7LS1saXRlcGlja2VyLWRheS13aWR0aDogMzhweDstLWxpdGVwaWNrZXItZGF5LWNvbG9yOiAjMzMzOy0tbGl0ZXBpY2tlci1kYXktY29sb3ItaG92ZXI6ICMyMTk2ZjM7LS1saXRlcGlja2VyLWlzLXRvZGF5LWNvbG9yOiAjZjQ0MzM2Oy0tbGl0ZXBpY2tlci1pcy1pbi1yYW5nZS1jb2xvcjogI2JiZGVmYjstLWxpdGVwaWNrZXItaXMtbG9ja2VkLWNvbG9yOiAjOWU5ZTllOy0tbGl0ZXBpY2tlci1pcy1zdGFydC1jb2xvcjogI2ZmZjstLWxpdGVwaWNrZXItaXMtc3RhcnQtY29sb3ItYmc6ICMyMTk2ZjM7LS1saXRlcGlja2VyLWlzLWVuZC1jb2xvcjogI2ZmZjstLWxpdGVwaWNrZXItaXMtZW5kLWNvbG9yLWJnOiAjMjE5NmYzOy0tbGl0ZXBpY2tlci1idXR0b24tY2FuY2VsLWNvbG9yOiAjZmZmOy0tbGl0ZXBpY2tlci1idXR0b24tY2FuY2VsLWNvbG9yLWJnOiAjOWU5ZTllOy0tbGl0ZXBpY2tlci1idXR0b24tYXBwbHktY29sb3I6ICNmZmY7LS1saXRlcGlja2VyLWJ1dHRvbi1hcHBseS1jb2xvci1iZzogIzIxOTZmMzstLWxpdGVwaWNrZXItYnV0dG9uLXJlc2V0LWNvbG9yOiAjOTA5MDkwOy0tbGl0ZXBpY2tlci1idXR0b24tcmVzZXQtY29sb3ItaG92ZXI6ICMyMTk2ZjM7LS1saXRlcGlja2VyLWhpZ2hsaWdodGVkLWRheS1jb2xvcjogIzMzMzstLWxpdGVwaWNrZXItaGlnaGxpZ2h0ZWQtZGF5LWNvbG9yLWJnOiAjZmZlYjNifS5zaG93LXdlZWstbnVtYmVyc3stLWxpdGVwaWNrZXItbW9udGgtd2lkdGg6IGNhbGModmFyKC0tbGl0ZXBpY2tlci1kYXktd2lkdGgpICogOCl9LmxpdGVwaWNrZXJ7Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcIlNlZ29lIFVJXCIsIFJvYm90bywgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtmb250LXNpemU6MC44ZW07ZGlzcGxheTpub25lfS5saXRlcGlja2VyIGJ1dHRvbntib3JkZXI6bm9uZTtiYWNrZ3JvdW5kOm5vbmV9LmxpdGVwaWNrZXIgLmNvbnRhaW5lcl9fbWFpbntkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4fS5saXRlcGlja2VyIC5jb250YWluZXJfX21vbnRoc3tkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy1tcy1mbGV4LXdyYXA6d3JhcDtmbGV4LXdyYXA6d3JhcDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWxpdGVwaWNrZXItY29udGFpbmVyLW1vbnRocy1jb2xvci1iZyk7Ym9yZGVyLXJhZGl1czo1cHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCA1cHggdmFyKC0tbGl0ZXBpY2tlci1jb250YWluZXItbW9udGhzLWJveC1zaGFkb3ctY29sb3IpO2JveC1zaGFkb3c6MCAwIDVweCB2YXIoLS1saXRlcGlja2VyLWNvbnRhaW5lci1tb250aHMtYm94LXNoYWRvdy1jb2xvcik7d2lkdGg6Y2FsYyh2YXIoLS1saXRlcGlja2VyLW1vbnRoLXdpZHRoKSArIDEwcHgpOy13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94fS5saXRlcGlja2VyIC5jb250YWluZXJfX21vbnRocy5jb2x1bW5zLTJ7d2lkdGg6Y2FsYygodmFyKC0tbGl0ZXBpY2tlci1tb250aC13aWR0aCkgKiAyKSArIDIwcHgpfS5saXRlcGlja2VyIC5jb250YWluZXJfX21vbnRocy5jb2x1bW5zLTN7d2lkdGg6Y2FsYygodmFyKC0tbGl0ZXBpY2tlci1tb250aC13aWR0aCkgKiAzKSArIDMwcHgpfS5saXRlcGlja2VyIC5jb250YWluZXJfX21vbnRocy5jb2x1bW5zLTR7d2lkdGg6Y2FsYygodmFyKC0tbGl0ZXBpY2tlci1tb250aC13aWR0aCkgKiA0KSArIDQwcHgpfS5saXRlcGlja2VyIC5jb250YWluZXJfX21vbnRocy5zcGxpdC12aWV3IC5tb250aC1pdGVtLWhlYWRlciAuYnV0dG9uLXByZXZpb3VzLW1vbn
1RoLC5saXRlcGlja2VyIC5jb250YWluZXJfX21vbnRocy5zcGxpdC12aWV3IC5tb250aC1pdGVtLWhlYWRlciAuYnV0dG9uLW5leHQtbW9udGh7dmlzaWJpbGl0eTp2aXNpYmxlfS5saXRlcGlja2VyIC5jb250YWluZXJfX21vbnRocyAubW9udGgtaXRlbXtwYWRkaW5nOjVweDt3aWR0aDp2YXIoLS1saXRlcGlja2VyLW1vbnRoLXdpZHRoKTstd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveH0ubGl0ZXBpY2tlciAuY29udGFpbmVyX19tb250aHMgLm1vbnRoLWl0ZW0taGVhZGVye2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtcGFjazpqdXN0aWZ5Oy1tcy1mbGV4LXBhY2s6anVzdGlmeTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjtmb250LXdlaWdodDo1MDA7cGFkZGluZzoxMHB4IDVweDt0ZXh0LWFsaWduOmNlbnRlcjstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtjb2xvcjp2YXIoLS1saXRlcGlja2VyLW1vbnRoLWhlYWRlci1jb2xvcil9LmxpdGVwaWNrZXIgLmNvbnRhaW5lcl9fbW9udGhzIC5tb250aC1pdGVtLWhlYWRlciBkaXZ7LXdlYmtpdC1ib3gtZmxleDoxOy1tcy1mbGV4OjE7ZmxleDoxfS5saXRlcGlja2VyIC5jb250YWluZXJfX21vbnRocyAubW9udGgtaXRlbS1oZWFkZXIgZGl2Pi5tb250aC1pdGVtLW5hbWV7bWFyZ2luLXJpZ2h0OjVweH0ubGl0ZXBpY2tlciAuY29udGFpbmVyX19tb250aHMgLm1vbnRoLWl0ZW0taGVhZGVyIGRpdj4ubW9udGgtaXRlbS15ZWFye3BhZGRpbmc6MH0ubGl0ZXBpY2tlciAuY29udGFpbmVyX19tb250aHMgLm1vbnRoLWl0ZW0taGVhZGVyIC5yZXNldC1idXR0b257Y29sb3I6dmFyKC0tbGl0ZXBpY2tlci1idXR0b24tcmVzZXQtY29sb3IpfS5saXRlcGlja2VyIC5jb250YWluZXJfX21vbnRocyAubW9udGgtaXRlbS1oZWFkZXIgLnJlc2V0LWJ1dHRvbj5zdmd7ZmlsbDp2YXIoLS1saXRlcGlja2VyLWJ1dHRvbi1yZXNldC1jb2xvcil9LmxpdGVwaWNrZXIgLmNvbnRhaW5lcl9fbW9udGhzIC5tb250aC1pdGVtLWhlYWRlciAucmVzZXQtYnV0dG9uICp7cG9pbnRlci1ldmVudHM6bm9uZX0ubGl0ZXBpY2tlciAuY29udGFpbmVyX19tb250aHMgLm1vbnRoLWl0ZW0taGVhZGVyIC5yZXNldC1idXR0b246aG92ZXJ7Y29sb3I6dmFyKC0tbGl0ZXBpY2tlci1idXR0b24tcmVzZXQtY29sb3ItaG92ZXIpfS5saXRlcGlja2VyIC5jb250YWluZXJfX21vbnRocyAubW9udGgtaXRlbS1oZWFkZXIgLnJlc2V0LWJ1dHRvbjpob3Zlcj5zdmd7ZmlsbDp2YXIoLS1saXRlcGlja2VyLWJ1dHRvbi1yZXNldC1jb2xvci1ob3Zlcil9LmxpdGVwaWNrZXIgLmNvbnRhaW5lcl9fbW9udGhzIC5tb250aC1pdGVtLWhlYWRlciAuYnV0dG9uLXByZXZpb3VzLW1vbnRoLC5saXRlcGlja2VyIC5jb250YWluZXJfX21vbnRocyAubW9udGgtaXRlbS1oZWFkZXIgLmJ1dHRvbi1uZXh0LW1vbnRoe3Zpc2liaWxpdHk6aGlkZGVuO3RleHQtZGVjb3JhdGlvbjpub25lO3BhZGRpbmc6M3B4IDVweDtib3JkZXItcmFkaXVzOjNweDstd2Via2l0LXRyYW5zaXRpb246Y29sb3IgMC4zcywgYm9yZGVyIDAuM3M7dHJhbnNpdGlvbjpjb2xvciAwLjNzLCBib3JkZXIgMC4zcztjdXJzb3I6ZGVmYXVsdH0ubGl0ZXBpY2tlciAuY29udGFpbmVyX19tb250aHMgLm1vbnRoLWl0ZW0taGVhZGVyIC5idXR0b24tcHJldmlvdXMtbW9udGggKiwubGl0ZXBpY2tlciAuY29udGFpbmVyX19tb250aHMgLm1vbnRoLWl0ZW0taGVhZGVyIC5idXR0b24tbmV4dC1tb250aCAqe3BvaW50ZXItZXZlbnRzOm5vbmV9LmxpdGVwaWNrZXIgLmNvbnRhaW5lcl9fbW9udGhzIC5tb250aC1pdGVtLWhlYWRlciAuYnV0dG9uLXByZXZpb3VzLW1vbnRoe2NvbG9yOnZhcigtLWxpdGVwaWNrZXItYnV0dG9uLXByZXYtbW9udGgtY29sb3IpfS5saXRlcGlja2VyIC5jb250YWluZXJfX21vbnRocyAubW9udGgtaXRlbS1oZWFkZXIgLmJ1dHRvbi1wcmV2aW91cy1tb250aD5zdmcsLmxpdGVwaWNrZXIgLmNvbnRhaW5lcl9fbW9udGhzIC5tb250aC1pdGVtLWhlYWRlciAuYnV0dG9uLXByZXZpb3VzLW1vbnRoPmltZ3tmaWxsOnZhcigtLWxpdGVwaWNrZXItYnV0dG9uLXByZXYtbW9udGgtY29sb3IpfS5saXRlcGlja2VyIC5jb250YWluZXJfX21vbnRocyAubW9udGgtaXRlbS1oZWFkZXIgLmJ1dHRvbi1wcmV2aW91cy1tb250aDpob3Zlcntjb2xvcjp2YXIoLS1saXRlcGlja2VyLWJ1dHRvbi1wcmV2LW1vbnRoLWNvbG9yLWhvdmVyKX0ubGl0ZXBpY2tlciAuY29udGFpbmVyX19tb250aHMgLm1vbnRoLWl0ZW0taGVhZGVyIC5idXR0b24tcHJldmlvdXMtbW9udGg6aG92ZXI+c3Zne2ZpbGw6dmFyKC0tbGl0ZXBpY2tlci1idXR0b24tcHJldi1tb250aC1jb2xvci1ob3Zlcil9LmxpdGVwaWNrZXIgLmNvbnRhaW5lcl9fbW9udGhzIC5tb250aC1pdGVtLWhlYWRlciAuYnV0dG9uLW5leHQtbW9udGh7Y29sb3I6dmFyKC0tbGl0ZXBpY2tlci1idXR0b24tbmV4dC1tb250aC1jb2xvcil9LmxpdGVwaWNrZXIgLmNvbnRhaW5lcl9fbW9udGhzIC5tb250aC1pdGVtLWhlYWRlciAuYnV0dG9uLW5leHQtbW9udGg+c3ZnLC5saXRlcGlja2VyIC5jb250YWluZXJfX21vbnRocyAubW9udGgtaXRlbS1oZWFkZXIgLmJ1dHRvbi1uZXh0LW1vbnRoPmltZ3tmaWxsOnZhcigtLWxpdGVwaWNrZXItYnV0dG9uLW5leHQtbW9udGgtY29sb3IpfS5saXRlcGlja2VyIC5jb250YWluZXJfX21vbnRocyAubW9udGgtaXRlbS1oZWFkZXIgLmJ1dHRvbi1uZXh0LW1vbnRoOmhvdmVye2NvbG9yOnZhcigtLWxpdGVwaWNrZXItYnV0dG9uLW5leHQtbW9udGgtY29sb3ItaG92ZXIpfS5saXRlcGlja2VyIC5jb250YWluZXJfX21vbnRocyAubW9udGgtaXRlbS1oZWFkZXIgLmJ1dHRvbi1uZXh0LW1vbnRoOmhvdmVyPnN2Z3tmaWxsOnZhcigtLWxpdGVwaWNrZXItYnV0dG9uLW5leHQtbW9udGgtY29sb3ItaG92ZXIpfS5saXRlcGlja2VyIC5jb250YWluZXJfX21vbnRocyAubW9udGgtaXRlbS13ZWVrZGF5cy1yb3d7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LXNlbGY6Y2VudGVyOy13ZWJraXQtYm94LXBhY2s6c3RhcnQ7LW1zLWZsZXgtcGFjazpzdGFydDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDtjb2xvcjp2YXIoLS1saXRlcGlja2VyLW1vbnRoLXdlZWtkYXktY29sb3IpfS5saXRlcGlja2VyIC5jb250YWluZXJfX21vbnRocyAubW9udGgtaXRlbS13ZWVrZGF5cy1yb3c+ZGl2e3BhZGRpbmc6NXB4IDA7Zm9udC1zaXplOjg1JTstd2Via2l0LWJveC1mbGV4OjE7LW1zLWZsZXg6MTtmbGV4OjE7d2lkdGg6dmFyKC0tbGl0ZXBpY2tlci1kYXktd2lkdGgpO3RleHQtYWxpZ246Y2VudGVyfS5saXRlcGlja2VyIC5jb250YWluZXJfX21vbnRocyAubW9udGgtaXRlbTpmaXJzdC1jaGlsZCAuYnV0dG9uLXByZXZpb3VzLW1vbn
1Roe3Zpc2liaWxpdHk6dmlzaWJsZX0ubGl0ZXBpY2tlciAuY29udGFpbmVyX19tb250aHMgLm1vbnRoLWl0ZW06bGFzdC1jaGlsZCAuYnV0dG9uLW5leHQtbW9udGh7dmlzaWJpbGl0eTp2aXNpYmxlfS5saXRlcGlja2VyIC5jb250YWluZXJfX21vbnRocyAubW9udGgtaXRlbS5uby1wcmV2aW91cy1tb250aCAuYnV0dG9uLXByZXZpb3VzLW1vbnRoe3Zpc2liaWxpdHk6aGlkZGVufS5saXRlcGlja2VyIC5jb250YWluZXJfX21vbnRocyAubW9udGgtaXRlbS5uby1uZXh0LW1vbnRoIC5idXR0b24tbmV4dC1tb250aHt2aXNpYmlsaXR5OmhpZGRlbn0ubGl0ZXBpY2tlciAuY29udGFpbmVyX19kYXlze2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LW1zLWZsZXgtd3JhcDp3cmFwO2ZsZXgtd3JhcDp3cmFwO2p1c3RpZnktc2VsZjpjZW50ZXI7LXdlYmtpdC1ib3gtcGFjazpzdGFydDstbXMtZmxleC1wYWNrOnN0YXJ0O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O3RleHQtYWxpZ246Y2VudGVyOy13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94fS5saXRlcGlja2VyIC5jb250YWluZXJfX2RheXM+ZGl2LC5saXRlcGlja2VyIC5jb250YWluZXJfX2RheXM+YXtwYWRkaW5nOjVweCAwO3dpZHRoOnZhcigtLWxpdGVwaWNrZXItZGF5LXdpZHRoKX0ubGl0ZXBpY2tlciAuY29udGFpbmVyX19kYXlzIC5kYXktaXRlbXtjb2xvcjp2YXIoLS1saXRlcGlja2VyLWRheS1jb2xvcik7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Ym9yZGVyLXJhZGl1czozcHg7LXdlYmtpdC10cmFuc2l0aW9uOmNvbG9yIDAuM3MsIGJvcmRlciAwLjNzO3RyYW5zaXRpb246Y29sb3IgMC4zcywgYm9yZGVyIDAuM3M7Y3Vyc29yOmRlZmF1bHR9LmxpdGVwaWNrZXIgLmNvbnRhaW5lcl9fZGF5cyAuZGF5LWl0ZW06aG92ZXJ7Y29sb3I6dmFyKC0tbGl0ZXBpY2tlci1kYXktY29sb3ItaG92ZXIpOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggdmFyKC0tbGl0ZXBpY2tlci1kYXktY29sb3ItaG92ZXIpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHZhcigtLWxpdGVwaWNrZXItZGF5LWNvbG9yLWhvdmVyKX0ubGl0ZXBpY2tlciAuY29udGFpbmVyX19kYXlzIC5kYXktaXRlbS5pcy10b2RheXtjb2xvcjp2YXIoLS1saXRlcGlja2VyLWlzLXRvZGF5LWNvbG9yKX0ubGl0ZXBpY2tlciAuY29udGFpbmVyX19kYXlzIC5kYXktaXRlbS5pcy1sb2NrZWR7Y29sb3I6dmFyKC0tbGl0ZXBpY2tlci1pcy1sb2NrZWQtY29sb3IpfS5saXRlcGlja2VyIC5jb250YWluZXJfX2RheXMgLmRheS1pdGVtLmlzLWxvY2tlZDpob3Zlcntjb2xvcjp2YXIoLS1saXRlcGlja2VyLWlzLWxvY2tlZC1jb2xvcik7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmU7Ym94LXNoYWRvdzpub25lO2N1cnNvcjpkZWZhdWx0fS5saXRlcGlja2VyIC5jb250YWluZXJfX2RheXMgLmRheS1pdGVtLmlzLWluLXJhbmdle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbGl0ZXBpY2tlci1pcy1pbi1yYW5nZS1jb2xvcik7Ym9yZGVyLXJhZGl1czowfS5saXRlcGlja2VyIC5jb250YWluZXJfX2RheXMgLmRheS1pdGVtLmlzLXN0YXJ0LWRhdGV7Y29sb3I6dmFyKC0tbGl0ZXBpY2tlci1pcy1zdGFydC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1saXRlcGlja2VyLWlzLXN0YXJ0LWNvbG9yLWJnKTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjVweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjVweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LmxpdGVwaWNrZXIgLmNvbnRhaW5lcl9fZGF5cyAuZGF5LWl0ZW0uaXMtc3RhcnQtZGF0ZS5pcy1mbGlwcGVke2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NXB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjVweH0ubGl0ZXBpY2tlciAuY29udGFpbmVyX19kYXlzIC5kYXktaXRlbS5pcy1lbmQtZGF0ZXtjb2xvcjp2YXIoLS1saXRlcGlja2VyLWlzLWVuZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1saXRlcGlja2VyLWlzLWVuZC1jb2xvci1iZyk7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo1cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NXB4fS5saXRlcGlja2VyIC5jb250YWluZXJfX2RheXMgLmRheS1pdGVtLmlzLWVuZC1kYXRlLmlzLWZsaXBwZWR7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo1cHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo1cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5saXRlcGlja2VyIC5jb250YWluZXJfX2RheXMgLmRheS1pdGVtLmlzLXN0YXJ0LWRhdGUuaXMtZW5kLWRhdGV7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo1cHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo1cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NXB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjVweH0ubGl0ZXBpY2tlciAuY29udGFpbmVyX19kYXlzIC5kYXktaXRlbS5pcy1oaWdobGlnaHRlZHtjb2xvcjp2YXIoLS1saXRlcGlja2VyLWhpZ2hsaWdodGVkLWRheS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1saXRlcGlja2VyLWhpZ2hsaWdodGVkLWRheS1jb2xvci1iZyl9LmxpdGVwaWNrZXIgLmNvbnRhaW5lcl9fZGF5cyAud2Vlay1udW1iZXJ7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjstd2Via2l0LWJveC1wYWNrOmNlbnRlcjstbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2NvbG9yOnZhcigtLWxpdGVwaWNrZXItbW9udGgtd2Vlay1udW1iZXItY29sb3IpO2ZvbnQtc2l6ZTo4NSV9LmxpdGVwaWNrZXIgLmNvbnRhaW5lcl9fZm9vdGVye3RleHQtYWxpZ246cmlnaHQ7cGFkZGluZzoxMHB4IDVweDttYXJnaW46MCA1cHg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1saXRlcGlja2VyLWZvb3Rlci1jb2xvci1iZyk7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDBweCAzcHggM3B4IDBweCB2YXIoLS1saXRlcGlja2VyLWZvb3Rlci1ib3gtc2hhZG93LWNvbG9yKTtib3gtc2hhZG93Omluc2V0IDBweCAzcHggM3B4IDBweCB2YXIoLS1saXRlcGlja2VyLWZvb3Rlci1ib3gtc2hhZG93LWNvbG9yKTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjVweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo1cHh9LmxpdGVwaWNrZXIgLmNvbnRhaW5lcl9fZm9vdGVyIC5wcmV2aWV3LWRhdGUtcmFuZ2V7bWFyZ2luLXJpZ2h0OjEwcHg7Zm9udC1zaXplOjkwJX0ubGl0ZXBpY2tlciAuY29udGFpbmVyX19mb290ZXIgLmJ1dHRvbi1jYW5jZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1saXRlcGlja2VyLWJ1dHRvbi1jYW5jZWwtY29sb3ItYmcpO2NvbG9yOnZhcigtLWxpdGVwaWNrZXItYnV0dG9uLWNhbmNlbC1jb2xvcik7Ym9yZGVyOjA7cGFkZGluZzozcHggN3B4IDRweDtib3JkZXItcmFkaXVzOjNweH0ubGl0ZXBpY2tlciAuY29udGFpbmVyX19mb290ZXIgLmJ1dHRvbi1jYW5jZWwgKntwb2ludGVyLWV2ZW50czpub25lfS5saXRlcGlja2VyIC5jb250YWluZXJfX2Zvb3RlciAuYnV0dG9uLWFwcGx5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbGl0ZXBpY2tlci1idXR0b24tYXBwbHktY29sb3ItYmcpO2NvbG9yOnZhcigtLWxpdGVwaWNrZXItYnV0dG9uLWFwcGx5LWNvbG9yKTtib3JkZXI6MDtwYWRkaW5nOjNweCA3cHggNHB4O2JvcmRlci1yYWRpdXM6M3B4O21hcmdpbi1sZWZ0OjEwcHg7bWFyZ2luLXJpZ2h0OjEwcHh9LmxpdGVwaWNrZXIgLmNvbnRhaW5lcl9fZm9vdGVyIC5idXR0b24tYXBwbHk6ZGlzYWJsZWR7b3BhY2l0eTowLjd9
1LmxpdGVwaWNrZXIgLmNvbnRhaW5lcl9fZm9vdGVyIC5idXR0b24tYXBwbHkgKntwb2ludGVyLWV2ZW50czpub25lfS5saXRlcGlja2VyIC5jb250YWluZXJfX3Rvb2x0aXB7cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLXRvcDotNHB4O3BhZGRpbmc6NHB4IDhweDtib3JkZXItcmFkaXVzOjRweDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWxpdGVwaWNrZXItdG9vbHRpcC1jb2xvci1iZyk7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMjUpO2JveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4yNSk7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtc2l6ZToxMXB4O3BvaW50ZXItZXZlbnRzOm5vbmU7dmlzaWJpbGl0eTpoaWRkZW59LmxpdGVwaWNrZXIgLmNvbnRhaW5lcl9fdG9vbHRpcDpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOi01cHg7bGVmdDpjYWxjKDUwJSAtIDVweCk7Ym9yZGVyLXRvcDo1cHggc29saWQgcmdiYSgwLDAsMCwwLjEyKTtib3JkZXItcmlnaHQ6NXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0OjVweCBzb2xpZCB0cmFuc3BhcmVudDtjb250ZW50OlwiXCJ9LmxpdGVwaWNrZXIgLmNvbnRhaW5lcl9fdG9vbHRpcDphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206LTRweDtsZWZ0OmNhbGMoNTAlIC0gNHB4KTtib3JkZXItdG9wOjRweCBzb2xpZCB2YXIoLS1saXRlcGlja2VyLXRvb2x0aXAtY29sb3ItYmcpO2JvcmRlci1yaWdodDo0cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkIHRyYW5zcGFyZW50O2NvbnRlbnQ6XCJcIn1cXG4nLFwiXCJdKSxlLmxvY2Fscz17c2hvd1dlZWtOdW1iZXJzOlwic2hvdy13ZWVrLW51bWJlcnNcIixsaXRlcGlja2VyOlwibGl0ZXBpY2tlclwiLGNvbnRhaW5lck1haW46XCJjb250YWluZXJfX21haW5cIixjb250YWluZXJNb250aHM6XCJjb250YWluZXJfX21vbnRoc1wiLGNvbHVtbnMyOlwiY29sdW1ucy0yXCIsY29sdW1uczM6XCJjb2x1bW5zLTNcIixjb2x1bW5zNDpcImNvbHVtbnMtNFwiLHNwbGl0VmlldzpcInNwbGl0LXZpZXdcIixtb250aEl0ZW1IZWFkZXI6XCJtb250aC1pdGVtLWhlYWRlclwiLGJ1dHRvblByZXZpb3VzTW9udGg6XCJidXR0b24tcHJldmlvdXMtbW9udGhcIixidXR0b25OZXh0TW9udGg6XCJidXR0b24tbmV4dC1tb250aFwiLG1vbnRoSXRlbTpcIm1vbnRoLWl0ZW1cIixtb250aEl0ZW1OYW1lOlwibW9udGgtaXRlbS1uYW1lXCIsbW9udGhJdGVtWWVhcjpcIm1vbnRoLWl0ZW0teWVhclwiLHJlc2V0QnV0dG9uOlwicmVzZXQtYnV0dG9uXCIsbW9udGhJdGVtV2Vla2RheXNSb3c6XCJtb250aC1pdGVtLXdlZWtkYXlzLXJvd1wiLG5vUHJldmlvdXNNb250aDpcIm5vLXByZXZpb3VzLW1vbnRoXCIsbm9OZXh0TW9udGg6XCJuby1uZXh0LW1vbnRoXCIsY29udGFpbmVyRGF5czpcImNvbnRhaW5lcl9fZGF5c1wiLGRheUl0ZW06XCJkYXktaXRlbVwiLGlzVG9kYXk6XCJpcy10b2RheVwiLGlzTG9ja2VkOlwiaXMtbG9ja2VkXCIsaXNJblJhbmdlOlwiaXMtaW4tcmFuZ2VcIixpc1N0YXJ0RGF0ZTpcImlzLXN0YXJ0LWRhdGVcIixpc0ZsaXBwZWQ6XCJpcy1mbGlwcGVkXCIsaXNFbmREYXRlOlwiaXMtZW5kLWRhdGVcIixpc0hpZ2hsaWdodGVkOlwiaXMtaGlnaGxpZ2h0ZWRcIix3ZWVrTnVtYmVyOlwid2Vlay1udW1iZXJcIixjb250YWluZXJGb290ZXI6XCJjb250YWluZXJfX2Zvb3RlclwiLHByZXZpZXdEYXRlUmFuZ2U6XCJwcmV2aWV3LWRhdGUtcmFuZ2VcIixidXR0b25DYW5jZWw6XCJidXR0b24tY2FuY2VsXCIsYnV0dG9uQXBwbHk6XCJidXR0b24tYXBwbHlcIixjb250YWluZXJUb29sdGlwOlwiY29udGFpbmVyX190b29sdGlwXCJ9LHQuZXhwb3J0cz1lfSxmdW5jdGlvbih0LGUsaSl7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKChmdW5jdGlvbihlKXt2YXIgaT1mdW5jdGlvbih0LGUpe3ZhciBpPXRbMV18fFwiXCIsbj10WzNdO2lmKCFuKXJldHVybi
1BpO2lmKGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGJ0b2Epe3ZhciBvPShyPW4sYT1idG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShyKSkpKSxsPVwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGEpLFwiLyojIFwiLmNvbmNhdChsLFwiICovXCIpKSxzPW4uc291cmNlcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVyblwiLyojIHNvdXJjZVVSTD1cIi5jb25jYXQobi5zb3VyY2VSb290fHxcIlwiKS5jb25jYXQodCxcIiAqL1wiKX0pKTtyZXR1cm5baV0uY29uY2F0KHMpLmNvbmNhdChbb10pLmpvaW4oXCJcXG5cIil9dmFyIHIsYSxsO3JldHVybltpXS5qb2luKFwiXFxuXCIpfShlLHQpO3JldHVybiBlWzJdP1wiQG1lZGlhIFwiLmNvbmNhdChlWzJdLFwiIHtcIikuY29uY2F0KGksXCJ9XCIpOml9KSkuam9pbihcIlwiKX0sZS5pPWZ1bmN0aW9uKHQsaSxuKXtcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9W1tudWxsLHQsXCJcIl1dKTt2YXIgbz17fTtpZihuKWZvcih2YXIgcz0wO3M8dGhpcy5sZW5ndGg7cysrKXt2YXIgcj10aGlzW3NdWzBdO251bGwhPXImJihvW3JdPSEwKX1mb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIGw9W10uY29uY2F0KHRbYV0pO24mJm9bbFswXV18fChpJiYobFsyXT9sWzJdPVwiXCIuY29uY2F0KGksXCIgYW5kIFwiKS5jb25jYXQobFsyXSk6bFsyXT1pKSxlLnB1c2gobCkpfX0sZX19LGZ1bmN0aW9uKHQsZSxpKXtcInVzZSBzdHJpY3RcIjt2YXIgbixvPXt9LHM9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09biYmKG49Qm9vbGVhbih3aW5kb3cmJmRvY3VtZW50JiZkb2N1bWVudC5hbGwmJiF3aW5kb3cuYXRvYikpLG59LHI9ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09dFtlXSl7dmFyIGk9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKTtpZih3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQmJmkgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpdHJ5e2k9aS5jb250ZW50RG9jdW1lbnQuaGVhZH1jYXRjaCh0KXtpPW51bGx9dFtlXT1pfXJldHVybiB0W2VdfX0oKTtmdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciBpPVtdLG49e30sbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dLHI9ZS5iYXNlP3NbMF0rZS5iYXNlOnNbMF0sYT17Y3NzOnNbMV0sbWVkaWE6c1syXSxzb3VyY2VNYXA6c1szXX07bltyXT9uW3JdLnBhcnRzLnB1c2goYSk6aS5wdXNoKG5bcl09e2lkOnIscGFydHM6W2FdfSl9cmV0dXJuIGl9ZnVuY3Rpb24gbCh0LGUpe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgbj10W2ldLHM9b1tuLmlkXSxyPTA7aWYocyl7Zm9yKHMucmVmcysrO3I8cy5wYXJ0cy5sZW5ndGg7cisrKXMucGFydHNbcl0obi5wYXJ0c1tyXSk7Zm9yKDtyPG4ucGFydHMubGVuZ3RoO3IrKylzLnBhcnRzLnB1c2goZyhuLnBhcnRzW3JdLGUpKX1lbHNle2Zvcih2YXIgYT1bXTtyPG4ucGFydHMubGVuZ3RoO3IrKylhLnB1c2goZyhuLnBhcnRzW3JdLGUpKTtvW24uaWRdPXtpZDpuLmlkLHJlZnM6MSxwYXJ0czphfX19fWZ1bmN0aW9uIGModCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO2lmKHZvaWQgMD09PXQuYXR0cmlidXRlcy5ub25jZSl7dmFyIG49aS5uYztuJiYodC5hdHRyaWJ1dGVzLm5vbmNlPW4pfWlmKE9iamVjdC5rZXlzKHQuYXR0cmlidXRlcykuZm9yRWFjaCgoZnVuY3Rpb24oaSl7ZS5zZXRBdHRyaWJ1dGUoaSx0LmF0dHJpYnV0ZXNbaV0pfSkpLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQuaW5zZXJ0KXQuaW5zZXJ0KGUpO2Vsc2V7dmFyIG89cih0Lmluc2VydHx8XCJoZWFkXCIpO2lmKCFvKXRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGh
1hdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7by5hcHBlbmRDaGlsZChlKX1yZXR1cm4gZX12YXIgaCxwPShoPVtdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGhbdF09ZSxoLmZpbHRlcihCb29sZWFuKS5qb2luKFwiXFxuXCIpfSk7ZnVuY3Rpb24gZCh0LGUsaSxuKXt2YXIgbz1pP1wiXCI6bi5jc3M7aWYodC5zdHlsZVNoZWV0KXQuc3R5bGVTaGVldC5jc3NUZXh0PXAoZSxvKTtlbHNle3ZhciBzPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG8pLHI9dC5jaGlsZE5vZGVzO3JbZV0mJnQucmVtb3ZlQ2hpbGQocltlXSksci5sZW5ndGg/dC5pbnNlcnRCZWZvcmUocyxyW2VdKTp0LmFwcGVuZENoaWxkKHMpfX1mdW5jdGlvbiB1KHQsZSxpKXt2YXIgbj1pLmNzcyxvPWkubWVkaWEscz1pLnNvdXJjZU1hcDtpZihvJiZ0LnNldEF0dHJpYnV0ZShcIm1lZGlhXCIsbykscyYmYnRvYSYmKG4rPVwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkocykpKSksXCIgKi9cIikpLHQuc3R5bGVTaGVldCl0LnN0eWxlU2hlZXQuY3NzVGV4dD1uO2Vsc2V7Zm9yKDt0LmZpcnN0Q2hpbGQ7KXQucmVtb3ZlQ2hpbGQodC5maXJzdENoaWxkKTt0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG4pKX19dmFyIG09bnVsbCxmPTA7ZnVuY3Rpb24gZyh0LGUpe3ZhciBpLG4sbztpZihlLnNpbmdsZXRvbil7dmFyIHM9ZisrO2k9bXx8KG09YyhlKSksbj1kLmJpbmQobnVsbCxpLHMsITEpLG89ZC5iaW5kKG51bGwsaSxzLCEwKX1lbHNlIGk9YyhlKSxuPXUuYmluZChudWxsLGksZSksbz1mdW5jdGlvbigpeyFmdW5jdGlvbih0KXtpZihudWxsPT09dC5wYXJlbnROb2RlKXJldHVybiExO3QucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KX0oaSl9O3JldHVybiBuKHQpLGZ1bmN0aW9uKGUpe2lmKGUpe2lmKGUuY3NzPT09dC5jc3MmJmUubWVkaWE9PT10Lm1lZGlhJiZlLnNvdXJjZU1hcD09PXQuc291cmNlTWFwKXJldHVybjtuKHQ9ZSl9ZWxzZSBvKCl9fXQuZXhwb3J0cz1mdW5jdGlvbih0LGUpeyhlPWV8fHt9KS5hdHRyaWJ1dGVzPVwib2JqZWN0XCI9PXR5cGVvZiBlLmF0dHJpYnV0ZXM/ZS5hdHRyaWJ1dGVzOnt9LGUuc2luZ2xldG9ufHxcImJvb2xlYW5cIj09dHlwZW9mIGUuc2luZ2xldG9ufHwoZS5zaW5nbGV0b249cygpKTt2YXIgaT1hKHQsZSk7cmV0dXJuIGwoaSxlKSxmdW5jdGlvbih0KXtmb3IodmFyIG49W10scz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgcj1pW3NdLGM9b1tyLmlkXTtjJiYoYy5yZWZzLS0sbi5wdXNoKGMpKX10JiZsKGEodCxlKSxlKTtmb3IodmFyIGg9MDtoPG4ubGVuZ3RoO2grKyl7dmFyIHA9bltoXTtpZigwPT09cC5yZWZzKXtmb3IodmFyIGQ9MDtkPHAucGFydHMubGVuZ3RoO2QrKylwLnBhcnRzW2RdKCk7ZGVsZXRlIG9bcC5pZF19fX19fSxmdW5jdGlvbih0LGUsaSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4obj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0KXtmb3IodmFyIGUsaT0xLG49YXJndW1lbnRzLmxlbmd0aDtpPG47aSsrKWZvcih2YXIgbyBpbiBlPWFyZ3VtZW50c1tpXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxvKSYmKHRbb109ZVtvXSk7cmV0dXJuIHR9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBvPWkoMCkscz1pKDEpLHI9aSgyKTtzLkxpdGVwaWNrZXIucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9bnVsbCksdGhpcy5lbWl0KFwiYmVmb3JlOnNob3dcIix0KTt2YXIgZT10fHx0aGlzLm9wdGlvbnMuZWxlbWVudDtpZih0aGlzLnRyaWdnZXJFbGVtZW50PWUsIXRoaXMuaXNTaG93bmluZygpKXtpZih0aGlzLm9wdGlvbnMuaW5saW5lTW9kZSlyZXR1cm4gdGhpcy51aS5zdHlsZS5wb3NpdGlvbj1cInJlbGF0aXZlXCIsdGhpcy51aS5zdHlsZS5kaXNwbGF5PVwiaW5saW5lLWJsb2NrXCIsdGhpcy51aS5zdHlsZS50b3A9bnVsbCx0aGlzLnVpLnN0eWxlLmxlZnQ9bnVsbCx0aGlzLnVpLnN0eWxlLmJvdHRvbT1udWxsLHZvaWQodGhpcy51aS5zdHlsZS5yaWdodD1udWxsKTt0aGlzLnNjcm9sbFRvRGF0ZSh0KSx0aGlzLnJlbmRlcigpLHRoaXMudWkuc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLHRoaXMudWkuc3R5bGUuZGlzcGxheT1cImJsb2NrXCIsdGhpcy51aS5zdHlsZS56SW5kZXg9dGhpcy5vcHRpb25zLnpJbmRleDt2YXIgaT10aGlzLmZpbmRQb3NpdGlvbihlKTt0aGlzLnVpLnN0eWxlLnRvcD1pLnRvcCtcInB4XCIsdGhpcy51aS5zdHlsZS5sZWZ0PWkubGVmdCtcInB4XCIsdGhpcy51aS5zdHlsZS5yaWdodD1udWxsLHRoaXMudWkuc3R5bGUuYm90dG9tPW51bGwsdGhpcy5lbWl0KFwic2hvd1wiLHQpfX0scy5MaXRlcGlja2VyLnByb3RvdHlwZS5oaWRlPWZ1bmN0aW9uKCl7dGhpcy5pc1Nob3duaW5nKCkmJih0aGlzLmRhdGVQaWNrZWQubGVuZ3RoPTAsdGhpcy51cGRhdGVJbnB1dCgpLHRoaXMub3B0aW9ucy5pbmxpbmVNb2RlP3RoaXMucmVuZGVyKCk6KHRoaXMudWkuc3R5bGUuZGlzcGxheT1cIm5vbmVcIix0aGlzLmVtaXQoXCJoaWRlXCIpKSl9LHMuTGl0ZXBpY2tlci5wcm90b3R5cGUuZ2V0RGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFN0YXJ0RGF0ZSgpfSxzLkxpdGVwaWNrZXIucHJvdG90eXBlLmdldFN0YXJ0RGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuc3RhcnREYXRlP3RoaXMub3B0aW9ucy5zdGFydERhdGUuY2xvbmUoKTpudWxsfSxzLkxpdGVwaWNrZXIucHJvdG90eXBlLmdldEVuZERhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmVuZERhdGU/dGhpcy5vcHRpb25zLmVuZERhdGUuY2xvbmUoKTpudWxsfSxzLkxpdGVwaWNrZXIucHJvdG90eXBlLnNldERhdGU9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0hMSk7dmFyIGk9bmV3IG8uRGF0ZVRpbWUodCx0aGlzLm9wdGlvbnMuZm9ybWF0LHRoaXMub3B0aW9ucy5sYW5nKTtyLmRhdGVJc0xvY2tlZChpLHRoaXMub3B0aW9ucyxbaV0pJiYhZT90aGlzLmVtaXQoXCJlcnJvcjpkYXRlXCIsaSk6KHRoaXMuc2V0U3RhcnREYXRlKHQpLHRoaXMub3B0aW9ucy5pbmxpbmVNb2RlJiZ0aGlzLnJlbmRlcigpLHRoaXMuZW1pdChcInNlbGVjdGVkXCIsdGhpcy5nZXREYXRlKCkpKX0scy5MaXRlcGlja2VyLnByb3RvdHlwZS5zZXRTdGFydERhdGU9ZnVuY3Rpb24odCl7dCYmKHRoaXMub3B0aW9ucy5zdGFydERhdGU9bmV3IG8uRGF0ZVRpbWUodCx0aGlzLm9wdGlvbnMuZm9ybWF0LHRoaXMub3B0aW9ucy5sYW5nKSx0aGlzLnVwZGF0ZUlucHV0KCkpfSxzLkxpdGVwaWNrZXIucHJvdG90eXBlLnNldEVuZERhdGU9ZnVuY3Rpb24odCl7dCYmKHRoaXMub3B0aW9ucy5lbmREYXRlPW5ldyBvLkRhdGVUaW1lKHQsdGhpcy5vcHRpb25zLmZvcm1hdCx0aGlzLm9wdGlvbnMubGFuZyksdGhpcy5vcHRpb25zLnN0YXJ0RGF0ZS5nZXRUaW1lKCk+dGhpcy5vcHRpb25zLmVuZERhdGUuZ2V0VGltZSgpJiYodGhpcy5vcHRpb25zLmVuZERhdGU9dGhpcy5vcHRpb25zLnN0YXJ0RGF0ZS5jbG9uZSgpLHRoaXMub3B0aW9ucy5zdGFydERhdGU9bmV3IG8uRGF0ZVRpbWUodCx0aGlzLm9wdGlvbnMuZm9ybWF0LHRoaXMub3B0aW9ucy5sYW5nKSksdGhpcy51cGRhdGVJbnB1dCgpKX0scy5MaXRlcGlja2VyLnByb3RvdHlwZS5zZXREYXRlUmFuZ2U9ZnVuY3Rpb24odCxlLGkpe3ZvaWQgMD09PWkmJihpPSExKSx0aGlzLnRyaWdnZXJFbGVtZW50PXZvaWQgMDt2YXIgbj1uZXcgby5EYXRlVGltZSh0LHRoaXMub3B0aW9ucy5mb3JtYXQsdGhpcy5vcHRpb25zLmxhbmcpLHM9bmV3IG8uRGF0ZVRpbWUoZSx0aGlzLm9wdGlvbnMuZm9ybWF0LHRoaXMub3B0aW9ucy5sYW5nKTsodGhpcy5vcHRpb25zLmRpc2FsbG93TG9ja0RheXNJblJhbmdlP3IucmFuZ2VJc0xvY2tlZChbbixzXSx0aGlzLm9wdGlvbnMpOnIuZGF0ZUlzTG9ja2VkKG4sdGhpcy5vcHRpb25zLFtuLHNdKXx8ci5kYXRlSXNMb2NrZWQocyx0aGlzLm9wdGlvbnMsW24sc10pKSYmIWk/dGhpcy5lbWl0KFwiZXJyb3I6cmFuZ2VcIixbbixzXSk6KHRoaXMuc2V0U3RhcnREYXRlKG4pLHRoaXMuc2V0RW5kRGF0ZShzKSx0aGlzLm9wdGlvbnMuaW5saW5lTW9kZSYmdGhpcy5yZW5kZXIoKSx0aGlzLnVwZGF0ZUlucHV0KCksdGhpcy5lbWl0KFwic2VsZWN0ZWRcIix0aGlzLmdldFN0YXJ0RGF0ZSgpLHRoaXMuZ2V0RW5kRGF0ZSgpKSl9LHMuTGl0ZXBpY2tlci5wcm90b3R5cGUuZ290b0RhdGU9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0wKTt2YXIgaT1uZXcgby5EYXRlVGltZSh0KTtpLnNldERhdGUoMSksdGhpcy5jYWxlbmRhcnNbZV09aS5jbG9uZSgpLHRoaXMucmVuZGVyKCl9LHMuTGl0ZXBpY2tlci5wcm90b3R5cGUuc2V0TG9ja0RheXM9ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zLmxvY2tEYXlzPW8uRGF0ZVRpbWUuY29udmVydEFycmF
15KHQsdGhpcy5vcHRpb25zLmxvY2tEYXlzRm9ybWF0KSx0aGlzLnJlbmRlcigpfSxzLkxpdGVwaWNrZXIucHJvdG90eXBlLnNldEhpZ2hsaWdodGVkRGF5cz1mdW5jdGlvbih0KXt0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0ZWREYXlzPW8uRGF0ZVRpbWUuY29udmVydEFycmF5KHQsdGhpcy5vcHRpb25zLmhpZ2hsaWdodGVkRGF5c0Zvcm1hdCksdGhpcy5yZW5kZXIoKX0scy5MaXRlcGlja2VyLnByb3RvdHlwZS5zZXRPcHRpb25zPWZ1bmN0aW9uKHQpe2RlbGV0ZSB0LmVsZW1lbnQsZGVsZXRlIHQuZWxlbWVudEVuZCxkZWxldGUgdC5wYXJlbnRFbCx0LnN0YXJ0RGF0ZSYmKHQuc3RhcnREYXRlPW5ldyBvLkRhdGVUaW1lKHQuc3RhcnREYXRlLHRoaXMub3B0aW9ucy5mb3JtYXQsdGhpcy5vcHRpb25zLmxhbmcpKSx0LmVuZERhdGUmJih0LmVuZERhdGU9bmV3IG8uRGF0ZVRpbWUodC5lbmREYXRlLHRoaXMub3B0aW9ucy5mb3JtYXQsdGhpcy5vcHRpb25zLmxhbmcpKTt2YXIgZT1uKG4oe30sdGhpcy5vcHRpb25zLmRyb3Bkb3ducyksdC5kcm9wZG93bnMpLGk9bihuKHt9LHRoaXMub3B0aW9ucy5idXR0b25UZXh0KSx0LmJ1dHRvblRleHQpLHM9bihuKHt9LHRoaXMub3B0aW9ucy50b29sdGlwVGV4dCksdC50b29sdGlwVGV4dCk7dGhpcy5vcHRpb25zPW4obih7fSx0aGlzLm9wdGlvbnMpLHQpLHRoaXMub3B0aW9ucy5kcm9wZG93bnM9bih7fSxlKSx0aGlzLm9wdGlvbnMuYnV0dG9uVGV4dD1uKHt9LGkpLHRoaXMub3B0aW9ucy50b29sdGlwVGV4dD1uKHt9LHMpLCF0aGlzLm9wdGlvbnMuc2luZ2xlTW9kZXx8dGhpcy5vcHRpb25zLnN0YXJ0RGF0ZSBpbnN0YW5jZW9mIG8uRGF0ZVRpbWV8fCh0aGlzLm9wdGlvbnMuc3RhcnREYXRlPW51bGwsdGhpcy5vcHRpb25zLmVuZERhdGU9bnVsbCksdGhpcy5vcHRpb25zLnNpbmdsZU1vZGV8fHRoaXMub3B0aW9ucy5zdGFydERhdGUgaW5zdGFuY2VvZiBvLkRhdGVUaW1lJiZ0aGlzLm9wdGlvbnMuZW5kRGF0ZSBpbnN0YW5jZW9mIG8uRGF0ZVRpbWV8fCh0aGlzLm9wdGlvbnMuc3RhcnREYXRlPW51bGwsdGhpcy5vcHRpb25zLmVuZERhdGU9bnVsbCk7Zm9yKHZhciByPTA7cjx0aGlzLm9wdGlvbnMubnVtYmVyT2ZNb250aHM7cis9MSl7dmFyIGE9dGhpcy5vcHRpb25zLnN0YXJ0RGF0ZT90aGlzLm9wdGlvbnMuc3RhcnREYXRlLmNsb25lKCk6bmV3IG8uRGF0ZVRpbWU7YS5zZXREYXRlKDEpLGEuc2V0TW9udGgoYS5nZXRNb250aCgpK3IpLHRoaXMuY2FsZW5kYXJzW3JdPWF9dGhpcy5vcHRpb25zLmxvY2tEYXlzLmxlbmd0aCYmKHRoaXMub3B0aW9ucy5sb2NrRGF5cz1vLkRhdGVUaW1lLmNvbnZlcnRBcnJheSh0aGlzLm9wdGlvbnMubG9ja0RheXMsdGhpcy5vcHRpb25zLmxvY2tEYXlzRm9ybWF0KSksdGhpcy5vcHRpb25zLmhpZ2hsaWdodGVkRGF5cy5sZW5ndGgmJih0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0ZWREYXlzPW8uRGF0ZVRpbWUuY29udmVydEFycmF5KHRoaXMub3B0aW9ucy5oaWdobGlnaHRlZERheXMsdGhpcy5vcHRpb25zLmhpZ2hsaWdodGVkRGF5c0Zvcm1hdCkpLHRoaXMucmVuZGVyKCksdGhpcy5vcHRpb25zLmlubGluZU1vZGUmJnRoaXMuc2hvdygpLHRoaXMudXBkYXRlSW5wdXQoKX0scy5MaXRlcGlja2VyLnByb3RvdHlwZS5jbGVhclNlbGVjdGlvbj1mdW5jdGlvbigpe3RoaXMub3B0aW9ucy5zdGFydERhdGU9bnVsbCx0aGlzLm9wdGlvbnMuZW5kRGF0ZT1udWxsLHRoaXMuZGF0ZVBpY2tlZC5sZW5ndGg9MCx0aGlzLnVwZGF0ZUlucHV0KCksdGhpcy5pc1Nob3duaW5nKCkmJnRoaXMucmVuZGVyKCksdGhpcy5lbWl0KFwiY2xlYXI6c2VsZWN0aW9uXCIpfSxzLkxpdGVwaWNrZXIucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnVpJiZ0aGlzLnVpLnBhcmVudE5vZGUmJih0aGlzLnVpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy51aSksdGhpcy51aT1udWxsKSx0aGlzLmVtaXQoXCJkZXN0cm95XCIpfX1dKX0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///424\n')}},__webpack_module_cache__={},inProgress,dataWebpackPrefix,loadStylesheet,installedCssChunks;function __webpack_require__(I){var g=__webpack_module_cache__[I];if(void 0!==g)return g.exports;var C=__webpack_module_cache__[I]={exports:{}};return __webpack_modules__[I](C,C.exports,__webpack_require__),C.exports}__webpack_require__.m=__webpack_modules__,__webpack_require__.n=function(I){var g=I&&I.__esModule?function(){return I.default}:function(){return I};return __webpack_require__.d(g,{a:g}),g},__webpack_require__.d=function(I,g){for(var C in g)__webpack_require__.o(g,C)&&!__webpack_require__.o(I,C)&&Object.defineProperty(I,C,{enumerable:!0,get:g[C]})},__webpack_require__.f={},__webpack_require__.e=function(I){return Promise.all(Object.keys(__webpack_require__.f).reduce((function(g,C){return __webpack_require__.f[C](I,g),g}),[]))},__webpack_require__.u=function(I){return I+".js"},__webpack_require__.miniCssF=function(I){return(3323===I?"eventContact":I)+".css"},__webpack_require__.o=function(I,g){return Object.prototype.hasOwnProperty.call(I,g)},inProgress={},dataWebpackPrefix="boilerplate:",__webpack_require__.l=function(I,g,C,t){if(inProgress[I])inProgress[I].push(g);else{var e,i;if(void 0!==C)for(var n=document.getElementsByTagName("script"),A=0;A<n.length;A++){var l=n[A];if(l.getAttribute("src")==I||l.getAttribute("data-webpack")==dataWebpackPrefix+C){e=l;break}}e||(i=!0,(e=document.createElement("script")).charset="utf-8",e.timeout=120,__webpack_require__.nc&&e.setAttribute("nonce",__webpack_require__.nc),e.setAttribute("data-webpack",dataWebpackPrefix+C),e.src=I),inProgress[I]=[g];var c=function(g,C){e.onerror=e.onload=null,clearTimeout(a);var t=inProgress[I];if(delete inProgress[I],e.parentNode&&e.parentNode.removeChild(e),t&&t.forEach((function(I){return I(C)})),g)return g(C)},a=setTimeout(c.bind(null,void 0,{type:"timeout",target:e}),12e4);e.onerror=c.bind(null,e.onerror),e.onload=c.bind(null,e.onload),i&&document.head.appendChild(e)}},__webpack_require__.r=function(I){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(I,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(I,"__esModule",{value:!0})},__webpack_require__.p="/wp-content/themes/moi/static/dist/",loadStylesheet=function(I){return new Promise((function(g,C){var t=__webpack_require__.miniCssF(I),e=__webpack_require__.p+t;if(function(I,g){for(var C=document.getElementsByTagName("link"),t=0;t<C.length;t++){var e=(n=C[t]).getAttribute("data-href")||n.getAttribute("href");if("stylesheet"===n.rel&&(e===I||e===g))return n}var i=document.getElementsByTagName("style");for(t=0;t<i.length;t++){var n;if((e=(n=i[t]).getAttribute("data-href"))===I||e===g)return n}}(t,e))return g();!function(I,g,C,t){var e=document.createElement("link");e.rel="stylesheet",e.type="text/css",e.onerror=e.onload=function(i){if(e.onerror=e.onload=null,"load"===i.type)C();else{var n=i&&("load"===i.type?"missing":i.type),A=i&&i.target&&i.target.href||g,l=new Error("Loading CSS chunk "+I+" failed.\n("+A+")");l.code="CSS_CHUNK_LOAD_FAILED",l.type=n,l.request=A,e.parentNode.removeChild(e),t(l)}},e.href=g,document.head.appendChild(e)}(I,e,g,C)}))},installedCssChunks={3323:0},__webpack_require__.f.miniCss=function(I,g){installedCssChunks[I]?g.push(installedCssChunks[I]):0!==installedCssChunks[I]&&{7541:1}[I]&&g.push(installedCssChunks[I]=loadStylesheet(I).then((function(){installedCssChunks[I]=0}),(function(g){throw delete installedCssChunks[I],g})))},function(){var I={3323:0};__webpack_require__.f.j=function(g,C){var t=__webpack_require__.o(I,g)?I[g]:void 0;if(0!==t)if(t)C.push(t[2]);else{var e=new Promise((function(C,e){t=I[g]=[C,e]}));C.push(t[2]=e);var i=__webpack_require__.p+__webpack_require__.u(g),n=new Error;__webpack_require__.l(i,(function(C){if(__webpack_require__.o(I,g)&&(0!==(t=I[g])&&(I[g]=void 0),t)){var e=C&&("load"===C.type?"missing":C.type),i=C&&C.target&&C.target.src;n.message="Loading chunk "+g+" failed.\n("+e+": "+i+")",n.name="ChunkLoadError",n.type=e,n.request=i,t[1](n)}}),"chunk-"+g,g)}};var g=function(g,C){var t,e,i=C[0],n=C[1],A=C[2],l=0;if(i.some((function(g){return 0!==I[g]}))){for(t in n)__webpack_require__.o(n,t)&&(__webpack_require__.m[t]=n[t]);if(A)A(__webpack_require__)}for(g&&g(C);l<i.length;l++)e=i[l],__webpack_require__.o(I,e)&&I[e]&&I[e][0](),I[e]=0},C=self.webpackChunkboilerplate=self.webpackChunkboilerplate||[];
1C.forEach(g.bind(null,0)),C.push=g.bind(null,C.push.bind(C))}();var __webpack_exports__=__webpack_require__(292)})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.