32 lines
118 KiB
JavaScript
32 lines
118 KiB
JavaScript
/*
|
|
* ATTENTION: An "eval-source-map" devtool has been used.
|
|
* This devtool is neither made for production nor for readable output files.
|
|
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
|
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
|
* or disable the default devtool with "devtool: false".
|
|
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
|
*/
|
|
/******/ (() => { // webpackBootstrap
|
|
/******/ var __webpack_modules__ = ({
|
|
|
|
/***/ "./resources/js/service/service.js"
|
|
/*!*****************************************!*\
|
|
!*** ./resources/js/service/service.js ***!
|
|
\*****************************************/
|
|
() {
|
|
|
|
eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2)); }, _regeneratorDefine2(e, r, n, t); }\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); }); }; }\n// Global variables - NO SENSITIVE DATA (no tokens)\nvar invoiceId;\nvar invoiceOrdernum;\nvar vmId;\nvar vmHostname;\nvar csrfToken;\n\n// Initialize variables from data attributes or global variables\nfunction initializeVariables() {\n // Get data from meta tags or global variables set in Blade template\n var metaInvoiceId = document.querySelector('meta[name=\"invoice-id\"]');\n var metaInvoiceOrdernum = document.querySelector('meta[name=\"invoice-ordernum\"]');\n var metaVmId = document.querySelector('meta[name=\"vm-id\"]');\n var metaVmHostname = document.querySelector('meta[name=\"vm-hostname\"]');\n var metaCsrfToken = document.querySelector('meta[name=\"csrf-token\"]');\n invoiceId = metaInvoiceId ? metaInvoiceId.getAttribute(\"content\") : window.invoiceId;\n invoiceOrdernum = metaInvoiceOrdernum ? metaInvoiceOrdernum.getAttribute(\"content\") : window.invoiceOrdernum;\n vmId = metaVmId ? metaVmId.getAttribute(\"content\") : window.vmId;\n vmHostname = metaVmHostname ? metaVmHostname.getAttribute(\"content\") : window.vmHostname;\n csrfToken = metaCsrfToken ? metaCsrfToken.getAttribute(\"content\") : window.csrfToken;\n}\n\n// Cấu hình toast nếu có thể\nif (typeof FuiToast !== \"undefined\" && FuiToast.config) {\n FuiToast.config({\n position: \"top-center\"\n });\n}\nfunction showNotification(message) {\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"success\";\n if (type === \"success\") {\n FuiToast.success(message);\n } else {\n FuiToast.error(message);\n }\n}\nfunction createSnapshot() {\n return _createSnapshot.apply(this, arguments);\n} // Handle snapshot form submission with loading notification\nfunction _createSnapshot() {\n _createSnapshot = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8() {\n var snapshotBtn, requestBody, headers, snapshotPromise;\n return _regenerator().w(function (_context8) {\n while (1) switch (_context8.n) {\n case 0:\n snapshotBtn = document.getElementById(\"createSnapshotButton\");\n if (!(snapshotBtn && snapshotBtn.disabled)) {\n _context8.n = 1;\n break;\n }\n return _context8.a(2);\n case 1:\n requestBody = {\n product_id: vmId\n };\n headers = {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"X-CSRF-TOKEN\": csrfToken\n // NO Authorization header - using session auth\n };\n snapshotPromise = fetch(\"/secure/create-snapshots\", {\n method: \"POST\",\n headers: headers,\n body: JSON.stringify(requestBody),\n credentials: \"same-origin\"\n }).then(/*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7(response) {\n var data, text, errorMessage, _t3, _t4;\n return _regenerator().w(function (_context7) {\n while (1) switch (_context7.p = _context7.n) {\n case 0:\n if (!(response.redirected || response.status === 401)) {\n _context7.n = 1;\n break;\n }\n throw new Error(\"Phiên đăng nhập đã hết hạn, vui lòng đăng nhập lại\");\n case 1:\n if (!response.redirected) {\n _context7.n = 2;\n break;\n }\n return _context7.a(2, \"Đã gửi yêu cầu tạo snapshot. Quá trình sẽ mất 3-5 phút, vui lòng chờ đợi.\");\n case 2:\n _context7.p = 2;\n _context7.n = 3;\n return response.text();\n case 3:\n text = _context7.v;\n _context7.p = 4;\n data = JSON.parse(text);\n _context7.n = 7;\n break;\n case 5:\n _context7.p = 5;\n _t3 = _context7.v;\n if (!(text.includes(\"success\") || response.ok)) {\n _context7.n = 6;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context7.a(2, \"Đã gửi yêu cầu tạo snapshot. Quá trình sẽ mất 3-5 phút, vui lòng chờ đợi.\");\n case 6:\n throw new Error(\"Có lỗi xảy ra khi gửi yêu cầu tạo snapshot\");\n case 7:\n _context7.n = 9;\n break;\n case 8:\n _context7.p = 8;\n _t4 = _context7.v;\n throw new Error(\"Lỗi định dạng dữ liệu từ máy chủ\");\n case 9:\n if (!(data && !data.error)) {\n _context7.n = 10;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context7.a(2, data.message || \"Đã gửi yêu cầu tạo snapshot. Quá trình sẽ mất 3-5 phút, vui lòng chờ đợi.\");\n case 10:\n errorMessage = \"Có lỗi xảy ra khi tạo snapshot\";\n if (data && data.message) {\n if (_typeof(data.message) === \"object\") {\n if (data.message.messages && data.message.messages.length > 0) {\n errorMessage = data.message.messages[0].default_message || data.message.messages[0].message || \"Có lỗi xảy ra\";\n } else if (data.message.error_type) {\n errorMessage = \"L\\u1ED7i: \".concat(data.message.error_type);\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.message;\n }\n } else if (data && data.value && data.value.messages && data.value.messages.length > 0) {\n errorMessage = data.value.messages[0].default_message;\n } else if (typeof data === \"string\") {\n errorMessage = data;\n } else if (data && data.error) {\n if (_typeof(data.error) === \"object\") {\n if (data.error.message) {\n errorMessage = data.error.message;\n } else if (data.error.toString && data.error.toString() !== \"[object Object]\") {\n errorMessage = data.error.toString();\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.error;\n }\n }\n throw new Error(errorMessage);\n case 11:\n return _context7.a(2);\n }\n }, _callee7, null, [[4, 5], [2, 8]]);\n }));\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }());\n FuiToast.promise(snapshotPromise, {\n loading: \"Đang gửi yêu cầu tạo snapshot... (Quá trình mất 3-5 phút vui lòng giữ trang không tắt!)\",\n success: function success(data) {\n return data;\n },\n error: function error(_error2) {\n console.error(_error2);\n return _error2.message || \"Có lỗi xảy ra khi tạo snapshot\";\n }\n }, {\n isClose: true\n });\n case 2:\n return _context8.a(2);\n }\n }, _callee8);\n }));\n return _createSnapshot.apply(this, arguments);\n}\nfunction handleSnapshotSubmit(event) {\n event.preventDefault();\n var snapshotPromise = new Promise(function (resolve, reject) {\n var form = document.getElementById(\"snapshotForm\");\n var formData = new FormData(form);\n fetch(form.action, {\n method: \"POST\",\n body: formData,\n headers: {\n \"X-CSRF-TOKEN\": csrfToken\n }\n }).then(function (response) {\n if (response.redirected) {\n resolve(\"Đã gửi yêu cầu tạo snapshot! Quá trình sẽ mất 3-5 phút.\");\n window.location.href = response.url;\n } else if (response.ok) {\n resolve(\"Đã gửi yêu cầu tạo snapshot! Quá trình sẽ mất 3-5 phút.\");\n setTimeout(function () {\n window.location.reload();\n }, 2000);\n } else {\n response.text().then(function (text) {\n reject(\"Có lỗi xảy ra khi gửi yêu cầu tạo snapshot\");\n });\n }\n })[\"catch\"](function (error) {\n reject(\"Lỗi kết nối: \" + error.message);\n });\n });\n if (typeof FuiToast !== \"undefined\" && FuiToast.promise) {\n FuiToast.promise(snapshotPromise, {\n loading: \"Đang gửi yêu cầu tạo snapshot...\",\n success: function success(data) {\n return data || \"Đã gửi yêu cầu tạo snapshot!\";\n },\n error: function error(_error) {\n return _error || \"Có lỗi xảy ra khi gửi yêu cầu tạo snapshot\";\n }\n });\n } else {\n if (typeof FuiToast !== \"undefined\") {\n FuiToast.loading(\"Đang gửi yêu cầu tạo snapshot...\", {\n duration: 0\n });\n } else {\n alert(\"Đang gửi yêu cầu tạo snapshot...\");\n }\n setTimeout(function () {\n document.getElementById(\"snapshotForm\").submit();\n }, 500);\n }\n}\nfunction startVirtualMachine() {\n return _startVirtualMachine.apply(this, arguments);\n}\nfunction _startVirtualMachine() {\n _startVirtualMachine = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee0() {\n var startBtn, requestBody, headers, startPromise;\n return _regenerator().w(function (_context0) {\n while (1) switch (_context0.n) {\n case 0:\n startBtn = document.getElementById(\"startVMButton\");\n if (!(startBtn && startBtn.disabled)) {\n _context0.n = 1;\n break;\n }\n return _context0.a(2);\n case 1:\n requestBody = {\n vm_id: vmId\n };\n headers = {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"X-CSRF-TOKEN\": csrfToken\n // NO Authorization header - using session auth\n };\n startPromise = fetch(\"/api/secure/start-vm\", {\n method: \"POST\",\n headers: headers,\n body: JSON.stringify(requestBody),\n credentials: \"same-origin\"\n }).then(/*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee9(response) {\n var data, errorMessage, _t5;\n return _regenerator().w(function (_context9) {\n while (1) switch (_context9.p = _context9.n) {\n case 0:\n if (!(response.redirected || response.status === 401)) {\n _context9.n = 1;\n break;\n }\n throw new Error(\"Phiên đăng nhập đã hết hạn, vui lòng đăng nhập lại\");\n case 1:\n _context9.p = 1;\n _context9.n = 2;\n return response.json();\n case 2:\n data = _context9.v;\n _context9.n = 4;\n break;\n case 3:\n _context9.p = 3;\n _t5 = _context9.v;\n throw new Error(\"Lỗi định dạng dữ liệu từ máy chủ\");\n case 4:\n if (data.error) {\n _context9.n = 5;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context9.a(2, data.message);\n case 5:\n if (!(data.type === \"com.vmware.vapi.std.errors.already_in_desired_state\" || data.message && data.message.error_type === \"ALREADY_IN_DESIRED_STATE\")) {\n _context9.n = 6;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context9.a(2, \"Máy chủ đã được bật\");\n case 6:\n errorMessage = \"Có lỗi xảy ra\";\n if (data.message) {\n if (_typeof(data.message) === \"object\") {\n if (data.message.messages && data.message.messages.length > 0) {\n errorMessage = data.message.messages[0].default_message || data.message.messages[0].message || \"Có lỗi xảy ra\";\n } else if (data.message.error_type) {\n errorMessage = \"L\\u1ED7i: \".concat(data.message.error_type);\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.message;\n }\n } else if (data.value && data.value.messages && data.value.messages.length > 0) {\n errorMessage = data.value.messages[0].default_message;\n } else if (typeof data === \"string\") {\n errorMessage = data;\n } else if (data.error) {\n if (_typeof(data.error) === \"object\") {\n if (data.error.message) {\n errorMessage = data.error.message;\n } else if (data.error.toString && data.error.toString() !== \"[object Object]\") {\n errorMessage = data.error.toString();\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.error;\n }\n }\n throw new Error(errorMessage);\n case 7:\n return _context9.a(2);\n }\n }, _callee9, null, [[1, 3]]);\n }));\n return function (_x2) {\n return _ref2.apply(this, arguments);\n };\n }());\n FuiToast.promise(startPromise, {\n loading: \"Đang khởi động máy ảo...\",\n success: function success(data) {\n return data;\n },\n error: function error(_error3) {\n console.error(_error3);\n return _error3.message || \"Có lỗi xảy ra khi khởi động máy ảo\";\n }\n }, {\n isClose: true\n });\n case 2:\n return _context0.a(2);\n }\n }, _callee0);\n }));\n return _startVirtualMachine.apply(this, arguments);\n}\nfunction stopVirtualMachine() {\n return _stopVirtualMachine.apply(this, arguments);\n} // DOM ready\nfunction _stopVirtualMachine() {\n _stopVirtualMachine = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee10() {\n var stopBtn, requestBody, headers, stopPromise;\n return _regenerator().w(function (_context10) {\n while (1) switch (_context10.n) {\n case 0:\n stopBtn = document.getElementById(\"stopVMButton\");\n if (!(stopBtn && stopBtn.disabled)) {\n _context10.n = 1;\n break;\n }\n return _context10.a(2);\n case 1:\n requestBody = {\n vm_id: vmId\n };\n headers = {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"X-CSRF-TOKEN\": csrfToken\n // NO Authorization header - using session auth\n };\n stopPromise = fetch(\"/api/secure/stop-vm\", {\n method: \"POST\",\n headers: headers,\n body: JSON.stringify(requestBody),\n credentials: \"same-origin\"\n }).then(/*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee1(response) {\n var data, errorMessage, _t6;\n return _regenerator().w(function (_context1) {\n while (1) switch (_context1.p = _context1.n) {\n case 0:\n if (!(response.redirected || response.status === 401)) {\n _context1.n = 1;\n break;\n }\n throw new Error(\"Phiên đăng nhập đã hết hạn, vui lòng đăng nhập lại\");\n case 1:\n _context1.p = 1;\n _context1.n = 2;\n return response.json();\n case 2:\n data = _context1.v;\n _context1.n = 4;\n break;\n case 3:\n _context1.p = 3;\n _t6 = _context1.v;\n throw new Error(\"Lỗi định dạng dữ liệu từ máy chủ\");\n case 4:\n if (data.error) {\n _context1.n = 5;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context1.a(2, data.message);\n case 5:\n if (!(data.type === \"com.vmware.vapi.std.errors.already_in_desired_state\" || data.message && data.message.error_type === \"ALREADY_IN_DESIRED_STATE\")) {\n _context1.n = 6;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context1.a(2, \"Máy chủ đã được tắt\");\n case 6:\n errorMessage = \"Có lỗi xảy ra\";\n if (data.message) {\n if (_typeof(data.message) === \"object\") {\n if (data.message.messages && data.message.messages.length > 0) {\n errorMessage = data.message.messages[0].default_message || data.message.messages[0].message || \"Có lỗi xảy ra\";\n } else if (data.message.error_type) {\n errorMessage = \"L\\u1ED7i: \".concat(data.message.error_type);\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.message;\n }\n } else if (data.value && data.value.messages && data.value.messages.length > 0) {\n errorMessage = data.value.messages[0].default_message;\n } else if (typeof data === \"string\") {\n errorMessage = data;\n } else if (data.error) {\n if (_typeof(data.error) === \"object\") {\n if (data.error.message) {\n errorMessage = data.error.message;\n } else if (data.error.toString && data.error.toString() !== \"[object Object]\") {\n errorMessage = data.error.toString();\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.error;\n }\n }\n throw new Error(errorMessage);\n case 7:\n return _context1.a(2);\n }\n }, _callee1, null, [[1, 3]]);\n }));\n return function (_x3) {\n return _ref3.apply(this, arguments);\n };\n }());\n FuiToast.promise(stopPromise, {\n loading: \"Đang dừng máy ảo...\",\n success: function success(data) {\n return data;\n },\n error: function error(_error4) {\n console.error(_error4);\n return _error4.message || \"Có lỗi xảy ra khi dừng máy ảo\";\n }\n }, {\n isClose: true\n });\n case 2:\n return _context10.a(2);\n }\n }, _callee10);\n }));\n return _stopVirtualMachine.apply(this, arguments);\n}\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n // Initialize variables\n initializeVariables();\n var startBtn = document.getElementById(\"startVMButton\");\n var stopBtn = document.getElementById(\"stopVMButton\");\n var restartBtn = document.getElementById(\"restartVMButton\");\n var snapshotBtn = document.getElementById(\"createSnapshotButton\");\n if (startBtn) {\n startBtn.addEventListener(\"click\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n startVirtualMachine();\n });\n }\n if (stopBtn) {\n stopBtn.addEventListener(\"click\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n stopVirtualMachine();\n });\n }\n if (restartBtn) {\n restartBtn.addEventListener(\"click\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n restartVirtualMachine();\n });\n }\n if (snapshotBtn) {\n snapshotBtn.addEventListener(\"click\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n createSnapshot();\n });\n }\n});\n\n// Snapshot Table Management\nfunction snapshotTable() {\n // Constants\n var API_ENDPOINTS = {\n GET_SNAPSHOTS: \"/dich-vu-dang-ky/secure/get-snapshots\",\n REMOVE_SNAPSHOT: \"/dich-vu-dang-ky/secure/remove-snapshot\",\n REVERT_SNAPSHOT: \"/dich-vu-dang-ky/secure/revert-snapshot\"\n };\n var MESSAGES = {\n VM_ID_NOT_FOUND: \"Không tìm thấy ID máy ảo\",\n CONNECTION_ERROR: \"Không thể kết nối đến máy chủ\",\n GENERIC_ERROR: \"Có lỗi xảy ra\",\n DELETE_SUCCESS: \"Xóa snapshot thành công\",\n REVERT_SUCCESS: \"Khôi phục snapshot thành công\"\n };\n return {\n loading: false,\n snapshots: [],\n error: null,\n // Cache để tránh fetch lại không cần thiết\n _lastFetchTime: 0,\n _cacheTimeout: 30000,\n // 30 seconds\n fetchSnapshots: function fetchSnapshots() {\n var _arguments = arguments,\n _this = this;\n return _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var _window$vmId;\n var forceRefresh, now, vmId, data, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n forceRefresh = _arguments.length > 0 && _arguments[0] !== undefined ? _arguments[0] : false;\n // Check cache\n now = Date.now();\n if (!(!forceRefresh && _this.snapshots.length > 0 && now - _this._lastFetchTime < _this._cacheTimeout)) {\n _context.n = 1;\n break;\n }\n return _context.a(2);\n case 1:\n _this.loading = true;\n _this.error = null;\n vmId = (_window$vmId = window.vmId) === null || _window$vmId === void 0 ? void 0 : _window$vmId.trim();\n if (vmId) {\n _context.n = 2;\n break;\n }\n _this._setError(MESSAGES.VM_ID_NOT_FOUND);\n return _context.a(2);\n case 2:\n _context.p = 2;\n _context.n = 3;\n return _this._makeRequest(\"\".concat(API_ENDPOINTS.GET_SNAPSHOTS, \"?product_id=\").concat(encodeURIComponent(vmId)));\n case 3:\n data = _context.v;\n _this._processSnapshotsResponse(data);\n _this._lastFetchTime = now;\n _context.n = 5;\n break;\n case 4:\n _context.p = 4;\n _t = _context.v;\n _this._handleError(\"fetching snapshots\", _t);\n case 5:\n _context.p = 5;\n _this.loading = false;\n return _context.f(5);\n case 6:\n return _context.a(2);\n }\n }, _callee, null, [[2, 4, 5, 6]]);\n }))();\n },\n formatSize: function formatSize(sizeGB, sizeMB) {\n var bytes = this._convertToBytes(sizeGB, sizeMB);\n if (bytes === 0) return \"0 B\";\n return this._formatBytes(bytes);\n },\n deleteSnapshot: function deleteSnapshot(snapshotName) {\n var _this2 = this;\n return _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n _context2.n = 1;\n return _this2._confirmAction(\"Xác nhận xóa\", \"B\\u1EA1n c\\xF3 ch\\u1EAFc ch\\u1EAFn mu\\u1ED1n x\\xF3a snapshot \\\"\".concat(snapshotName, \"\\\"? H\\xE0nh \\u0111\\u1ED9ng n\\xE0y kh\\xF4ng th\\u1EC3 ho\\xE0n t\\xE1c.\"), \"Xóa\");\n case 1:\n if (_context2.v) {\n _context2.n = 2;\n break;\n }\n return _context2.a(2);\n case 2:\n _context2.n = 3;\n return _this2._executeSnapshotAction(API_ENDPOINTS.REMOVE_SNAPSHOT, snapshotName, MESSAGES.DELETE_SUCCESS, \"deleting snapshot\");\n case 3:\n return _context2.a(2);\n }\n }, _callee2);\n }))();\n },\n revertSnapshot: function revertSnapshot(snapshotName) {\n var _this3 = this;\n return _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.n) {\n case 0:\n _context3.n = 1;\n return _this3._confirmAction(\"Xác nhận khôi phục\", \"B\\u1EA1n c\\xF3 ch\\u1EAFc ch\\u1EAFn mu\\u1ED1n kh\\xF4i ph\\u1EE5c v\\u1EC1 snapshot \\\"\".concat(snapshotName, \"\\\"? T\\u1EA5t c\\u1EA3 d\\u1EEF li\\u1EC7u hi\\u1EC7n t\\u1EA1i s\\u1EBD b\\u1ECB m\\u1EA5t.\"), \"Khôi phục\");\n case 1:\n if (_context3.v) {\n _context3.n = 2;\n break;\n }\n return _context3.a(2);\n case 2:\n _context3.n = 3;\n return _this3._executeSnapshotAction(API_ENDPOINTS.REVERT_SNAPSHOT, snapshotName, MESSAGES.REVERT_SUCCESS, \"reverting snapshot\", 2000);\n case 3:\n return _context3.a(2);\n }\n }, _callee3);\n }))();\n },\n // Public helper methods\n refreshSnapshots: function refreshSnapshots() {\n return this.fetchSnapshots(true);\n },\n getSnapshotCount: function getSnapshotCount() {\n return this.snapshots.length;\n },\n isLoading: function isLoading() {\n return this.loading;\n },\n hasError: function hasError() {\n return this.error !== null;\n },\n // Private helper methods\n _setError: function _setError(message) {\n this.loading = false;\n this.error = message;\n this.snapshots = [];\n },\n _makeRequest: function _makeRequest(url) {\n var _arguments2 = arguments;\n return _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {\n var options, defaultOptions, response;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.n) {\n case 0:\n options = _arguments2.length > 1 && _arguments2[1] !== undefined ? _arguments2[1] : {};\n defaultOptions = {\n method: \"GET\",\n headers: {\n Accept: \"application/json\",\n \"X-CSRF-TOKEN\": csrfToken,\n \"Cache-Control\": \"no-cache\"\n },\n credentials: \"same-origin\"\n };\n _context4.n = 1;\n return fetch(url, _objectSpread(_objectSpread({}, defaultOptions), options));\n case 1:\n response = _context4.v;\n if (response.ok) {\n _context4.n = 2;\n break;\n }\n throw new Error(\"HTTP error! status: \".concat(response.status));\n case 2:\n return _context4.a(2, response.json());\n }\n }, _callee4);\n }))();\n },\n _processSnapshotsResponse: function _processSnapshotsResponse(data) {\n var _data$data;\n // Handle different response structures\n if (data.error === false && (_data$data = data.data) !== null && _data$data !== void 0 && _data$data.snapshots) {\n this.snapshots = data.data.snapshots;\n } else if (data.error === true) {\n throw new Error(data.message || \"Có lỗi xảy ra khi tải danh sách snapshot\");\n } else if (data.snapshots) {\n this.snapshots = data.snapshots;\n } else {\n this.snapshots = [];\n }\n },\n _convertToBytes: function _convertToBytes(sizeGB, sizeMB) {\n if (sizeGB) {\n return parseFloat(sizeGB) * Math.pow(1024, 3); // GB to bytes\n } else if (sizeMB) {\n return parseFloat(sizeMB) * Math.pow(1024, 2); // MB to bytes\n }\n return 0;\n },\n _formatBytes: function _formatBytes(bytes) {\n var units = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\"];\n var k = 1024;\n var i = Math.floor(Math.log(bytes) / Math.log(k));\n var size = parseFloat((bytes / Math.pow(k, i)).toFixed(2));\n return \"\".concat(size, \" \").concat(units[i]);\n },\n _confirmAction: function _confirmAction(title, text, confirmText) {\n return _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {\n var result;\n return _regenerator().w(function (_context5) {\n while (1) switch (_context5.n) {\n case 0:\n _context5.n = 1;\n return Swal.fire({\n title: title,\n text: text,\n icon: \"warning\",\n showCancelButton: true,\n confirmButtonColor: title.includes(\"xóa\") ? \"#d33\" : \"#3085d6\",\n cancelButtonColor: title.includes(\"xóa\") ? \"#3085d6\" : \"#d33\",\n confirmButtonText: confirmText,\n cancelButtonText: \"Hủy bỏ\",\n reverseButtons: true\n });\n case 1:\n result = _context5.v;\n return _context5.a(2, result.isConfirmed);\n }\n }, _callee5);\n }))();\n },\n _executeSnapshotAction: function _executeSnapshotAction(endpoint, snapshotName, successMessage, errorContext) {\n var _arguments3 = arguments,\n _this4 = this;\n return _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6() {\n var delay, data, _t2;\n return _regenerator().w(function (_context6) {\n while (1) switch (_context6.p = _context6.n) {\n case 0:\n delay = _arguments3.length > 4 && _arguments3[4] !== undefined ? _arguments3[4] : 1000;\n _context6.p = 1;\n _context6.n = 2;\n return _this4._makeRequest(endpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"X-CSRF-TOKEN\": csrfToken\n },\n body: JSON.stringify({\n product_id: window.vmId,\n snapshot_name: snapshotName\n })\n });\n case 2:\n data = _context6.v;\n if (!(data.error === false)) {\n _context6.n = 3;\n break;\n }\n showNotification(data.message || successMessage, \"success\");\n setTimeout(function () {\n return _this4.refreshSnapshots();\n }, delay);\n _context6.n = 4;\n break;\n case 3:\n throw new Error(data.message || \"\".concat(MESSAGES.GENERIC_ERROR, \" khi \").concat(errorContext));\n case 4:\n _context6.n = 6;\n break;\n case 5:\n _context6.p = 5;\n _t2 = _context6.v;\n _this4._handleError(errorContext, _t2);\n case 6:\n return _context6.a(2);\n }\n }, _callee6, null, [[1, 5]]);\n }))();\n },\n _handleError: function _handleError(context, error) {\n console.error(\"Error \".concat(context, \":\"), error);\n var message = error.message || MESSAGES.CONNECTION_ERROR;\n if (context.includes(\"fetching\")) {\n this._setError(message);\n } else {\n showNotification(message, \"error\");\n }\n }\n };\n}\n\n// Make snapshotTable available globally for Alpine.js\nwindow.snapshotTable = snapshotTable;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlIiwidCIsInIiLCJTeW1ib2wiLCJuIiwiaXRlcmF0b3IiLCJvIiwidG9TdHJpbmdUYWciLCJpIiwiYyIsInByb3RvdHlwZSIsIkdlbmVyYXRvciIsInUiLCJPYmplY3QiLCJjcmVhdGUiLCJfcmVnZW5lcmF0b3JEZWZpbmUyIiwiZiIsInAiLCJ5IiwiRyIsInYiLCJhIiwiZCIsImJpbmQiLCJsZW5ndGgiLCJsIiwiVHlwZUVycm9yIiwiY2FsbCIsImRvbmUiLCJ2YWx1ZSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiZGlzcGxheU5hbWUiLCJfcmVnZW5lcmF0b3IiLCJ3IiwibSIsImRlZmluZVByb3BlcnR5IiwiX3JlZ2VuZXJhdG9yRGVmaW5lIiwiX2ludm9rZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsImludm9pY2VJZCIsImludm9pY2VPcmRlcm51bSIsInZtSWQiLCJ2bUhvc3RuYW1lIiwiY3NyZlRva2VuIiwiaW5pdGlhbGl6ZVZhcmlhYmxlcyIsIm1ldGFJbnZvaWNlSWQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJtZXRhSW52b2ljZU9yZGVybnVtIiwibWV0YVZtSWQiLCJtZXRhVm1Ib3N0bmFtZSIsIm1ldGFDc3JmVG9rZW4iLCJnZXRBdHRyaWJ1dGUiLCJ3aW5kb3ciLCJGdWlUb2FzdCIsImNvbmZpZyIsInBvc2l0aW9uIiwic2hvd05vdGlmaWNhdGlvbiIsIm1lc3NhZ2UiLCJ0eXBlIiwidW5kZWZpbmVkIiwic3VjY2VzcyIsImVycm9yIiwiY3JlYXRlU25hcHNob3QiLCJfY3JlYXRlU25hcHNob3QiLCJfY2FsbGVlOCIsInNuYXBzaG90QnRuIiwicmVxdWVzdEJvZHkiLCJoZWFkZXJzIiwic25hcHNob3RQcm9taXNlIiwiX2NvbnRleHQ4IiwiZ2V0RWxlbWVudEJ5SWQiLCJkaXNhYmxlZCIsInByb2R1Y3RfaWQiLCJBY2NlcHQiLCJmZXRjaCIsIm1ldGhvZCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwiY3JlZGVudGlhbHMiLCJfcmVmIiwiX2NhbGxlZTciLCJyZXNwb25zZSIsImRhdGEiLCJ0ZXh0IiwiZXJyb3JNZXNzYWdlIiwiX3QzIiwiX3Q0IiwiX2NvbnRleHQ3IiwicmVkaXJlY3RlZCIsInN0YXR1cyIsIkVycm9yIiwicGFyc2UiLCJpbmNsdWRlcyIsIm9rIiwic2V0VGltZW91dCIsImxvY2F0aW9uIiwicmVsb2FkIiwiX3R5cGVvZiIsIm1lc3NhZ2VzIiwiZGVmYXVsdF9tZXNzYWdlIiwiZXJyb3JfdHlwZSIsImNvbmNhdCIsInRvU3RyaW5nIiwiX3giLCJwcm9taXNlIiwibG9hZGluZyIsImNvbnNvbGUiLCJpc0Nsb3NlIiwiaGFuZGxlU25hcHNob3RTdWJtaXQiLCJldmVudCIsInByZXZlbnREZWZhdWx0IiwicmVqZWN0IiwiZm9ybSIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJhY3Rpb24iLCJocmVmIiwidXJsIiwiZHVyYXRpb24iLCJhbGVydCIsInN1Ym1pdCIsInN0YXJ0VmlydHVhbE1hY2hpbmUiLCJfc3RhcnRWaXJ0dWFsTWFjaGluZSIsIl9jYWxsZWUwIiwic3RhcnRCdG4iLCJzdGFydFByb21pc2UiLCJfY29udGV4dDAiLCJ2bV9pZCIsIl9yZWYyIiwiX2NhbGxlZTkiLCJfdDUiLCJfY29udGV4dDkiLCJqc29uIiwiX3gyIiwic3RvcFZpcnR1YWxNYWNoaW5lIiwiX3N0b3BWaXJ0dWFsTWFjaGluZSIsIl9jYWxsZWUxMCIsInN0b3BCdG4iLCJzdG9wUHJvbWlzZSIsIl9jb250ZXh0MTAiLCJfcmVmMyIsIl9jYWxsZWUxIiwiX3Q2IiwiX2NvbnRleHQxIiwiX3gzIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlc3RhcnRCdG4iLCJzdG9wUHJvcGFnYXRpb24iLCJyZXN0YXJ0VmlydHVhbE1hY2hpbmUiLCJzbmFwc2hvdFRhYmxlIiwiQVBJX0VORFBPSU5UUyIsIkdFVF9TTkFQU0hPVFMiLCJSRU1PVkVfU05BUFNIT1QiLCJSRVZFUlRfU05BUFNIT1QiLCJNRVNTQUdFUyIsIlZNX0lEX05PVF9GT1VORCIsIkNPTk5FQ1RJT05fRVJST1IiLCJHRU5FUklDX0VSUk9SIiwiREVMRVRFX1NVQ0NFU1MiLCJSRVZFUlRfU1VDQ0VTUyIsInNuYXBzaG90cyIsIl9sYXN0RmV0Y2hUaW1lIiwiX2NhY2hlVGltZW91dCIsImZldGNoU25hcHNob3RzIiwiX2FyZ3VtZW50cyIsIl90aGlzIiwiX2NhbGxlZSIsIl93aW5kb3ckdm1JZCIsImZvcmNlUmVmcmVzaCIsIm5vdyIsIl90IiwiX2NvbnRleHQiLCJEYXRlIiwidHJpbSIsIl9zZXRFcnJvciIsIl9tYWtlUmVxdWVzdCIsImVuY29kZVVSSUNvbXBvbmVudCIsIl9wcm9jZXNzU25hcHNob3RzUmVzcG9uc2UiLCJfaGFuZGxlRXJyb3IiLCJmb3JtYXRTaXplIiwic2l6ZUdCIiwic2l6ZU1CIiwiYnl0ZXMiLCJfY29udmVydFRvQnl0ZXMiLCJfZm9ybWF0Qnl0ZXMiLCJkZWxldGVTbmFwc2hvdCIsInNuYXBzaG90TmFtZSIsIl90aGlzMiIsIl9jYWxsZWUyIiwiX2NvbnRleHQyIiwiX2NvbmZpcm1BY3Rpb24iLCJfZXhlY3V0ZVNuYXBzaG90QWN0aW9uIiwicmV2ZXJ0U25hcHNob3QiLCJfdGhpczMiLCJfY2FsbGVlMyIsIl9jb250ZXh0MyIsInJlZnJlc2hTbmFwc2hvdHMiLCJnZXRTbmFwc2hvdENvdW50IiwiaXNMb2FkaW5nIiwiaGFzRXJyb3IiLCJfYXJndW1lbnRzMiIsIl9jYWxsZWU0Iiwib3B0aW9ucyIsImRlZmF1bHRPcHRpb25zIiwiX2NvbnRleHQ0IiwiX29iamVjdFNwcmVhZCIsIl9kYXRhJGRhdGEiLCJwYXJzZUZsb2F0IiwiTWF0aCIsInBvdyIsInVuaXRzIiwiayIsImZsb29yIiwibG9nIiwic2l6ZSIsInRvRml4ZWQiLCJ0aXRsZSIsImNvbmZpcm1UZXh0IiwiX2NhbGxlZTUiLCJyZXN1bHQiLCJfY29udGV4dDUiLCJTd2FsIiwiZmlyZSIsImljb24iLCJzaG93Q2FuY2VsQnV0dG9uIiwiY29uZmlybUJ1dHRvbkNvbG9yIiwiY2FuY2VsQnV0dG9uQ29sb3IiLCJjb25maXJtQnV0dG9uVGV4dCIsImNhbmNlbEJ1dHRvblRleHQiLCJyZXZlcnNlQnV0dG9ucyIsImlzQ29uZmlybWVkIiwiZW5kcG9pbnQiLCJzdWNjZXNzTWVzc2FnZSIsImVycm9yQ29udGV4dCIsIl9hcmd1bWVudHMzIiwiX3RoaXM0IiwiX2NhbGxlZTYiLCJkZWxheSIsIl90MiIsIl9jb250ZXh0NiIsInNuYXBzaG90X25hbWUiLCJjb250ZXh0Il0sInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9zZXJ2aWNlL3NlcnZpY2UuanM/YzE1ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHbG9iYWwgdmFyaWFibGVzIC0gTk8gU0VOU0lUSVZFIERBVEEgKG5vIHRva2VucylcbmxldCBpbnZvaWNlSWQ7XG5sZXQgaW52b2ljZU9yZGVybnVtO1xubGV0IHZtSWQ7XG5sZXQgdm1Ib3N0bmFtZTtcbmxldCBjc3JmVG9rZW47XG5cbi8vIEluaXRpYWxpemUgdmFyaWFibGVzIGZyb20gZGF0YSBhdHRyaWJ1dGVzIG9yIGdsb2JhbCB2YXJpYWJsZXNcbmZ1bmN0aW9uIGluaXRpYWxpemVWYXJpYWJsZXMoKSB7XG4gICAgLy8gR2V0IGRhdGEgZnJvbSBtZXRhIHRhZ3Mgb3IgZ2xvYmFsIHZhcmlhYmxlcyBzZXQgaW4gQmxhZGUgdGVtcGxhdGVcbiAgICBjb25zdCBtZXRhSW52b2ljZUlkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lPVwiaW52b2ljZS1pZFwiXScpO1xuICAgIGNvbnN0IG1ldGFJbnZvaWNlT3JkZXJudW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9XCJpbnZvaWNlLW9yZGVybnVtXCJdJyk7XG4gICAgY29uc3QgbWV0YVZtSWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9XCJ2bS1pZFwiXScpO1xuICAgIGNvbnN0IG1ldGFWbUhvc3RuYW1lID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lPVwidm0taG9zdG5hbWVcIl0nKTtcbiAgICBjb25zdCBtZXRhQ3NyZlRva2VuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lPVwiY3NyZi10b2tlblwiXScpO1xuXG4gICAgaW52b2ljZUlkID0gbWV0YUludm9pY2VJZFxuICAgICAgICA/IG1ldGFJbnZvaWNlSWQuZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKVxuICAgICAgICA6IHdpbmRvdy5pbnZvaWNlSWQ7XG4gICAgaW52b2ljZU9yZGVybnVtID0gbWV0YUludm9pY2VPcmRlcm51bVxuICAgICAgICA/IG1ldGFJbnZvaWNlT3JkZXJudW0uZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKVxuICAgICAgICA6IHdpbmRvdy5pbnZvaWNlT3JkZXJudW07XG4gICAgdm1JZCA9IG1ldGFWbUlkID8gbWV0YVZtSWQuZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKSA6IHdpbmRvdy52bUlkO1xuICAgIHZtSG9zdG5hbWUgPSBtZXRhVm1Ib3N0bmFtZVxuICAgICAgICA/IG1ldGFWbUhvc3RuYW1lLmdldEF0dHJpYnV0ZShcImNvbnRlbnRcIilcbiAgICAgICAgOiB3aW5kb3cudm1Ib3N0bmFtZTtcbiAgICBjc3JmVG9rZW4gPSBtZXRhQ3NyZlRva2VuXG4gICAgICAgID8gbWV0YUNzcmZUb2tlbi5nZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIpXG4gICAgICAgIDogd2luZG93LmNzcmZUb2tlbjtcbn1cblxuLy8gQ+G6pXUgaMOsbmggdG9hc3QgbuG6v3UgY8OzIHRo4buDXG5pZiAodHlwZW9mIEZ1aVRvYXN0ICE9PSBcInVuZGVmaW5lZFwiICYmIEZ1aVRvYXN0LmNvbmZpZykge1xuICAgIEZ1aVRvYXN0LmNvbmZpZyh7XG4gICAgICAgIHBvc2l0aW9uOiBcInRvcC1jZW50ZXJcIixcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gc2hvd05vdGlmaWNhdGlvbihtZXNzYWdlLCB0eXBlID0gXCJzdWNjZXNzXCIpIHtcbiAgICBpZiAodHlwZSA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgRnVpVG9hc3Quc3VjY2VzcyhtZXNzYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBGdWlUb2FzdC5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVNuYXBzaG90KCkge1xuICAgIGNvbnN0IHNuYXBzaG90QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjcmVhdGVTbmFwc2hvdEJ1dHRvblwiKTtcbiAgICBpZiAoc25hcHNob3RCdG4gJiYgc25hcHNob3RCdG4uZGlzYWJsZWQpIHJldHVybjtcblxuICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0ge1xuICAgICAgICBwcm9kdWN0X2lkOiB2bUlkLFxuICAgIH07XG5cbiAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgXCJYLUNTUkYtVE9LRU5cIjogY3NyZlRva2VuLFxuICAgICAgICAvLyBOTyBBdXRob3JpemF0aW9uIGhlYWRlciAtIHVzaW5nIHNlc3Npb24gYXV0aFxuICAgIH07XG5cbiAgICBjb25zdCBzbmFwc2hvdFByb21pc2UgPSBmZXRjaChcIi9zZWN1cmUvY3JlYXRlLXNuYXBzaG90c1wiLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJlcXVlc3RCb2R5KSxcbiAgICAgICAgY3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcbiAgICB9KS50aGVuKGFzeW5jIChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UucmVkaXJlY3RlZCB8fCByZXNwb25zZS5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiUGhpw6puIMSRxINuZyBuaOG6rXAgxJHDoyBo4bq/dCBo4bqhbiwgdnVpIGzDsm5nIMSRxINuZyBuaOG6rXAgbOG6oWlcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGlmIHJlc3BvbnNlIGlzIHJlZGlyZWN0ZWQgKHR5cGljYWwgZm9yIExhcmF2ZWwgcmVkaXJlY3QgcmVzcG9uc2VzKVxuICAgICAgICBpZiAocmVzcG9uc2UucmVkaXJlY3RlZCkge1xuICAgICAgICAgICAgLy8gRXh0cmFjdCBtZXNzYWdlIGZyb20gVVJMIGlmIHBvc3NpYmxlLCBvciBzaG93IGdlbmVyaWMgc3VjY2Vzc1xuICAgICAgICAgICAgcmV0dXJuIFwixJDDoyBn4butaSB5w6p1IGPhuqd1IHThuqFvIHNuYXBzaG90LiBRdcOhIHRyw6xuaCBz4bq9IG3huqV0IDMtNSBwaMO6dCwgdnVpIGzDsm5nIGNo4budIMSR4bujaS5cIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBkYXRhO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcblxuICAgICAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIGFzIEpTT04gZmlyc3RcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UodGV4dCk7XG4gICAgICAgICAgICB9IGNhdGNoIChwYXJzZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgbm90IEpTT04sIGNoZWNrIGZvciBIVE1MIHdpdGggc3VjY2Vzcy9lcnJvciBtZXNzYWdlc1xuICAgICAgICAgICAgICAgIGlmICh0ZXh0LmluY2x1ZGVzKFwic3VjY2Vzc1wiKSB8fCByZXNwb25zZS5vaykge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwixJDDoyBn4butaSB5w6p1IGPhuqd1IHThuqFvIHNuYXBzaG90LiBRdcOhIHRyw6xuaCBz4bq9IG3huqV0IDMtNSBwaMO6dCwgdnVpIGzDsm5nIGNo4budIMSR4bujaS5cIjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkPDsyBs4buXaSB44bqjeSByYSBraGkgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdFwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChwYXJzZUVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJM4buXaSDEkeG7i25oIGThuqFuZyBk4buvIGxp4buHdSB04burIG3DoXkgY2jhu6dcIik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5kbGUgSlNPTiByZXNwb25zZVxuICAgICAgICBpZiAoZGF0YSAmJiAhZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlIHx8XG4gICAgICAgICAgICAgICAgXCLEkMOjIGfhu61pIHnDqnUgY+G6p3UgdOG6oW8gc25hcHNob3QuIFF1w6EgdHLDrG5oIHPhur0gbeG6pXQgMy01IHBow7p0LCB2dWkgbMOybmcgY2jhu50gxJHhu6NpLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSB04bqhbyBzbmFwc2hvdFwiO1xuICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhLm1lc3NhZ2UgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UubWVzc2FnZXMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzWzBdLmRlZmF1bHRfbWVzc2FnZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZS5tZXNzYWdlc1swXS5tZXNzYWdlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJDw7MgbOG7l2kgeOG6o3kgcmFcIjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLm1lc3NhZ2UuZXJyb3JfdHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYEzhu5dpOiAke2RhdGEubWVzc2FnZS5lcnJvcl90eXBlfWA7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkPDsyBs4buXaSB44bqjeSByYSB04burIGjhu4cgdGjhu5FuZ1wiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgZGF0YSAmJlxuICAgICAgICAgICAgICAgIGRhdGEudmFsdWUgJiZcbiAgICAgICAgICAgICAgICBkYXRhLnZhbHVlLm1lc3NhZ2VzICYmXG4gICAgICAgICAgICAgICAgZGF0YS52YWx1ZS5tZXNzYWdlcy5sZW5ndGggPiAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLnZhbHVlLm1lc3NhZ2VzWzBdLmRlZmF1bHRfbWVzc2FnZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhICYmIGRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEuZXJyb3IgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3IubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5lcnJvci5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5lcnJvci50b1N0cmluZyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5lcnJvci50b1N0cmluZygpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5lcnJvci50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJDw7MgbOG7l2kgeOG6o3kgcmEgdOG7qyBo4buHIHRo4buRbmdcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEuZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIEZ1aVRvYXN0LnByb21pc2UoXG4gICAgICAgIHNuYXBzaG90UHJvbWlzZSxcbiAgICAgICAge1xuICAgICAgICAgICAgbG9hZGluZzpcbiAgICAgICAgICAgICAgICBcIsSQYW5nIGfhu61pIHnDqnUgY+G6p3UgdOG6oW8gc25hcHNob3QuLi4gKFF1w6EgdHLDrG5oIG3huqV0IDMtNSBwaMO6dCB2dWkgbMOybmcgZ2nhu68gdHJhbmcga2jDtG5nIHThuq90ISlcIixcbiAgICAgICAgICAgIHN1Y2Nlc3M6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvci5tZXNzYWdlIHx8IFwiQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSB04bqhbyBzbmFwc2hvdFwiO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgaXNDbG9zZTogdHJ1ZSxcbiAgICAgICAgfVxuICAgICk7XG59XG5cbi8vIEhhbmRsZSBzbmFwc2hvdCBmb3JtIHN1Ym1pc3Npb24gd2l0aCBsb2FkaW5nIG5vdGlmaWNhdGlvblxuZnVuY3Rpb24gaGFuZGxlU25hcHNob3RTdWJtaXQoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3Qgc25hcHNob3RQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBmb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzbmFwc2hvdEZvcm1cIik7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKGZvcm0pO1xuXG4gICAgICAgIGZldGNoKGZvcm0uYWN0aW9uLCB7XG4gICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgYm9keTogZm9ybURhdGEsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgXCJYLUNTUkYtVE9LRU5cIjogY3NyZlRva2VuLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5yZWRpcmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIsSQw6MgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdCEgUXXDoSB0csOsbmggc+G6vSBt4bqldCAzLTUgcGjDunQuXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByZXNwb25zZS51cmw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCLEkMOjIGfhu61pIHnDqnUgY+G6p3UgdOG6oW8gc25hcHNob3QhIFF1w6EgdHLDrG5oIHPhur0gbeG6pXQgMy01IHBow7p0LlwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS50ZXh0KCkudGhlbigodGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KFwiQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBn4butaSB5w6p1IGPhuqd1IHThuqFvIHNuYXBzaG90XCIpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChcIkzhu5dpIGvhur90IG7hu5FpOiBcIiArIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpZiAodHlwZW9mIEZ1aVRvYXN0ICE9PSBcInVuZGVmaW5lZFwiICYmIEZ1aVRvYXN0LnByb21pc2UpIHtcbiAgICAgICAgRnVpVG9hc3QucHJvbWlzZShzbmFwc2hvdFByb21pc2UsIHtcbiAgICAgICAgICAgIGxvYWRpbmc6IFwixJBhbmcgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdC4uLlwiLFxuICAgICAgICAgICAgc3VjY2VzczogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YSB8fCBcIsSQw6MgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdCFcIjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yIHx8IFwiQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBn4butaSB5w6p1IGPhuqd1IHThuqFvIHNuYXBzaG90XCI7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHlwZW9mIEZ1aVRvYXN0ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBGdWlUb2FzdC5sb2FkaW5nKFwixJBhbmcgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdC4uLlwiLCB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFsZXJ0KFwixJBhbmcgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdC4uLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzbmFwc2hvdEZvcm1cIikuc3VibWl0KCk7XG4gICAgICAgIH0sIDUwMCk7XG4gICAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzdGFydFZpcnR1YWxNYWNoaW5lKCkge1xuICAgIGNvbnN0IHN0YXJ0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdGFydFZNQnV0dG9uXCIpO1xuICAgIGlmIChzdGFydEJ0biAmJiBzdGFydEJ0bi5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XG4gICAgICAgIHZtX2lkOiB2bUlkLFxuICAgIH07XG5cbiAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgXCJYLUNTUkYtVE9LRU5cIjogY3NyZlRva2VuLFxuICAgICAgICAvLyBOTyBBdXRob3JpemF0aW9uIGhlYWRlciAtIHVzaW5nIHNlc3Npb24gYXV0aFxuICAgIH07XG5cbiAgICBjb25zdCBzdGFydFByb21pc2UgPSBmZXRjaChcIi9hcGkvc2VjdXJlL3N0YXJ0LXZtXCIsIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocmVxdWVzdEJvZHkpLFxuICAgICAgICBjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiLFxuICAgIH0pLnRoZW4oYXN5bmMgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZS5yZWRpcmVjdGVkIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJQaGnDqm4gxJHEg25nIG5o4bqtcCDEkcOjIGjhur90IGjhuqFuLCB2dWkgbMOybmcgxJHEg25nIG5o4bqtcCBs4bqhaVwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICB9IGNhdGNoIChwYXJzZUVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJM4buXaSDEkeG7i25oIGThuqFuZyBk4buvIGxp4buHdSB04burIG3DoXkgY2jhu6dcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YS5tZXNzYWdlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGRhdGEudHlwZSA9PT1cbiAgICAgICAgICAgICAgICAgICAgXCJjb20udm13YXJlLnZhcGkuc3RkLmVycm9ycy5hbHJlYWR5X2luX2Rlc2lyZWRfc3RhdGVcIiB8fFxuICAgICAgICAgICAgICAgIChkYXRhLm1lc3NhZ2UgJiZcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLmVycm9yX3R5cGUgPT09IFwiQUxSRUFEWV9JTl9ERVNJUkVEX1NUQVRFXCIpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiTcOheSBjaOG7pyDEkcOjIMSRxrDhu6NjIGLhuq10XCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIkPDsyBs4buXaSB44bqjeSByYVwiO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhLm1lc3NhZ2UgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UubWVzc2FnZXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UubWVzc2FnZXMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzWzBdLmRlZmF1bHRfbWVzc2FnZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UubWVzc2FnZXNbMF0ubWVzc2FnZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkPDsyBs4buXaSB44bqjeSByYVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLm1lc3NhZ2UuZXJyb3JfdHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGBM4buXaTogJHtkYXRhLm1lc3NhZ2UuZXJyb3JfdHlwZX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkPDsyBs4buXaSB44bqjeSByYSB04burIGjhu4cgdGjhu5FuZ1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZGF0YS52YWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICBkYXRhLnZhbHVlLm1lc3NhZ2VzICYmXG4gICAgICAgICAgICAgICAgICAgIGRhdGEudmFsdWUubWVzc2FnZXMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLnZhbHVlLm1lc3NhZ2VzWzBdLmRlZmF1bHRfbWVzc2FnZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YS5lcnJvciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3IubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEuZXJyb3IubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5lcnJvci50b1N0cmluZyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZXJyb3IudG9TdHJpbmcoKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5lcnJvci50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkPDsyBs4buXaSB44bqjeSByYSB04burIGjhu4cgdGjhu5FuZ1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgRnVpVG9hc3QucHJvbWlzZShcbiAgICAgICAgc3RhcnRQcm9taXNlLFxuICAgICAgICB7XG4gICAgICAgICAgICBsb2FkaW5nOiBcIsSQYW5nIGto4bufaSDEkeG7mW5nIG3DoXkg4bqjby4uLlwiLFxuICAgICAgICAgICAgc3VjY2VzczogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yLm1lc3NhZ2UgfHwgXCJDw7MgbOG7l2kgeOG6o3kgcmEga2hpIGto4bufaSDEkeG7mW5nIG3DoXkg4bqjb1wiO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgaXNDbG9zZTogdHJ1ZSxcbiAgICAgICAgfVxuICAgICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0b3BWaXJ0dWFsTWFjaGluZSgpIHtcbiAgICBjb25zdCBzdG9wQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdG9wVk1CdXR0b25cIik7XG4gICAgaWYgKHN0b3BCdG4gJiYgc3RvcEJ0bi5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XG4gICAgICAgIHZtX2lkOiB2bUlkLFxuICAgIH07XG5cbiAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgXCJYLUNTUkYtVE9LRU5cIjogY3NyZlRva2VuLFxuICAgICAgICAvLyBOTyBBdXRob3JpemF0aW9uIGhlYWRlciAtIHVzaW5nIHNlc3Npb24gYXV0aFxuICAgIH07XG5cbiAgICBjb25zdCBzdG9wUHJvbWlzZSA9IGZldGNoKFwiL2FwaS9zZWN1cmUvc3RvcC12bVwiLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJlcXVlc3RCb2R5KSxcbiAgICAgICAgY3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcbiAgICB9KS50aGVuKGFzeW5jIChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UucmVkaXJlY3RlZCB8fCByZXNwb25zZS5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiUGhpw6puIMSRxINuZyBuaOG6rXAgxJHDoyBo4bq/dCBo4bqhbiwgdnVpIGzDsm5nIMSRxINuZyBuaOG6rXAgbOG6oWlcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBkYXRhO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTOG7l2kgxJHhu4tuaCBk4bqhbmcgZOG7ryBsaeG7h3UgdOG7qyBtw6F5IGNo4bunXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkYXRhLmVycm9yKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGEubWVzc2FnZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBkYXRhLnR5cGUgPT09XG4gICAgICAgICAgICAgICAgICAgIFwiY29tLnZtd2FyZS52YXBpLnN0ZC5lcnJvcnMuYWxyZWFkeV9pbl9kZXNpcmVkX3N0YXRlXCIgfHxcbiAgICAgICAgICAgICAgICAoZGF0YS5tZXNzYWdlICYmXG4gICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZS5lcnJvcl90eXBlID09PSBcIkFMUkVBRFlfSU5fREVTSVJFRF9TVEFURVwiKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICAgICAgICAgIHJldHVybiBcIk3DoXkgY2jhu6cgxJHDoyDEkcaw4bujYyB04bqvdFwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJDw7MgbOG7l2kgeOG6o3kgcmFcIjtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YS5tZXNzYWdlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZS5tZXNzYWdlc1swXS5kZWZhdWx0X21lc3NhZ2UgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzWzBdLm1lc3NhZ2UgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJDw7MgbOG7l2kgeOG6o3kgcmFcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5tZXNzYWdlLmVycm9yX3R5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgTOG7l2k6ICR7ZGF0YS5tZXNzYWdlLmVycm9yX3R5cGV9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJDw7MgbOG7l2kgeOG6o3kgcmEgdOG7qyBo4buHIHRo4buRbmdcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGRhdGEudmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgZGF0YS52YWx1ZS5tZXNzYWdlcyAmJlxuICAgICAgICAgICAgICAgICAgICBkYXRhLnZhbHVlLm1lc3NhZ2VzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS52YWx1ZS5tZXNzYWdlc1swXS5kZWZhdWx0X21lc3NhZ2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEuZXJyb3IgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmVycm9yLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLmVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZXJyb3IudG9TdHJpbmcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmVycm9yLnRvU3RyaW5nKCkgIT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEuZXJyb3IudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJDw7MgbOG7l2kgeOG6o3kgcmEgdOG7qyBo4buHIHRo4buRbmdcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIEZ1aVRvYXN0LnByb21pc2UoXG4gICAgICAgIHN0b3BQcm9taXNlLFxuICAgICAgICB7XG4gICAgICAgICAgICBsb2FkaW5nOiBcIsSQYW5nIGThu6tuZyBtw6F5IOG6o28uLi5cIixcbiAgICAgICAgICAgIHN1Y2Nlc3M6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvci5tZXNzYWdlIHx8IFwiQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBk4burbmcgbcOheSDhuqNvXCI7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBpc0Nsb3NlOiB0cnVlLFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuXG4vLyBET00gcmVhZHlcbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBJbml0aWFsaXplIHZhcmlhYmxlc1xuICAgIGluaXRpYWxpemVWYXJpYWJsZXMoKTtcblxuICAgIGNvbnN0IHN0YXJ0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdGFydFZNQnV0dG9uXCIpO1xuICAgIGNvbnN0IHN0b3BCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0b3BWTUJ1dHRvblwiKTtcbiAgICBjb25zdCByZXN0YXJ0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXN0YXJ0Vk1CdXR0b25cIik7XG4gICAgY29uc3Qgc25hcHNob3RCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNyZWF0ZVNuYXBzaG90QnV0dG9uXCIpO1xuXG4gICAgaWYgKHN0YXJ0QnRuKSB7XG4gICAgICAgIHN0YXJ0QnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHN0YXJ0VmlydHVhbE1hY2hpbmUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHN0b3BCdG4pIHtcbiAgICAgICAgc3RvcEJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBzdG9wVmlydHVhbE1hY2hpbmUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3RhcnRCdG4pIHtcbiAgICAgICAgcmVzdGFydEJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICByZXN0YXJ0VmlydHVhbE1hY2hpbmUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHNuYXBzaG90QnRuKSB7XG4gICAgICAgIHNuYXBzaG90QnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGNyZWF0ZVNuYXBzaG90KCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn0pO1xuXG4vLyBTbmFwc2hvdCBUYWJsZSBNYW5hZ2VtZW50XG5mdW5jdGlvbiBzbmFwc2hvdFRhYmxlKCkge1xuICAgIC8vIENvbnN0YW50c1xuICAgIGNvbnN0IEFQSV9FTkRQT0lOVFMgPSB7XG4gICAgICAgIEdFVF9TTkFQU0hPVFM6IFwiL2RpY2gtdnUtZGFuZy1reS9zZWN1cmUvZ2V0LXNuYXBzaG90c1wiLFxuICAgICAgICBSRU1PVkVfU05BUFNIT1Q6IFwiL2RpY2gtdnUtZGFuZy1reS9zZWN1cmUvcmVtb3ZlLXNuYXBzaG90XCIsXG4gICAgICAgIFJFVkVSVF9TTkFQU0hPVDogXCIvZGljaC12dS1kYW5nLWt5L3NlY3VyZS9yZXZlcnQtc25hcHNob3RcIixcbiAgICB9O1xuXG4gICAgY29uc3QgTUVTU0FHRVMgPSB7XG4gICAgICAgIFZNX0lEX05PVF9GT1VORDogXCJLaMO0bmcgdMOsbSB0aOG6pXkgSUQgbcOheSDhuqNvXCIsXG4gICAgICAgIENPTk5FQ1RJT05fRVJST1I6IFwiS2jDtG5nIHRo4buDIGvhur90IG7hu5FpIMSR4bq/biBtw6F5IGNo4bunXCIsXG4gICAgICAgIEdFTkVSSUNfRVJST1I6IFwiQ8OzIGzhu5dpIHjhuqN5IHJhXCIsXG4gICAgICAgIERFTEVURV9TVUNDRVNTOiBcIljDs2Egc25hcHNob3QgdGjDoG5oIGPDtG5nXCIsXG4gICAgICAgIFJFVkVSVF9TVUNDRVNTOiBcIktow7RpIHBo4bulYyBzbmFwc2hvdCB0aMOgbmggY8O0bmdcIixcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgIHNuYXBzaG90czogW10sXG4gICAgICAgIGVycm9yOiBudWxsLFxuXG4gICAgICAgIC8vIENhY2hlIMSR4buDIHRyw6FuaCBmZXRjaCBs4bqhaSBraMO0bmcgY+G6p24gdGhp4bq/dFxuICAgICAgICBfbGFzdEZldGNoVGltZTogMCxcbiAgICAgICAgX2NhY2hlVGltZW91dDogMzAwMDAsIC8vIDMwIHNlY29uZHNcblxuICAgICAgICBhc3luYyBmZXRjaFNuYXBzaG90cyhmb3JjZVJlZnJlc2ggPSBmYWxzZSkge1xuICAgICAgICAgICAgLy8gQ2hlY2sgY2FjaGVcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIWZvcmNlUmVmcmVzaCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuc25hcHNob3RzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICBub3cgLSB0aGlzLl9sYXN0RmV0Y2hUaW1lIDwgdGhpcy5fY2FjaGVUaW1lb3V0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgY29uc3Qgdm1JZCA9IHdpbmRvdy52bUlkPy50cmltKCk7XG4gICAgICAgICAgICBpZiAoIXZtSWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRFcnJvcihNRVNTQUdFUy5WTV9JRF9OT1RfRk9VTkQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5fbWFrZVJlcXVlc3QoXG4gICAgICAgICAgICAgICAgICAgIGAke1xuICAgICAgICAgICAgICAgICAgICAgICAgQVBJX0VORFBPSU5UUy5HRVRfU05BUFNIT1RTXG4gICAgICAgICAgICAgICAgICAgIH0/cHJvZHVjdF9pZD0ke2VuY29kZVVSSUNvbXBvbmVudCh2bUlkKX1gXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NTbmFwc2hvdHNSZXNwb25zZShkYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXN0RmV0Y2hUaW1lID0gbm93O1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVFcnJvcihcImZldGNoaW5nIHNuYXBzaG90c1wiLCBlcnJvcik7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGZvcm1hdFNpemUoc2l6ZUdCLCBzaXplTUIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gdGhpcy5fY29udmVydFRvQnl0ZXMoc2l6ZUdCLCBzaXplTUIpO1xuICAgICAgICAgICAgaWYgKGJ5dGVzID09PSAwKSByZXR1cm4gXCIwIEJcIjtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdEJ5dGVzKGJ5dGVzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBkZWxldGVTbmFwc2hvdChzbmFwc2hvdE5hbWUpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhKGF3YWl0IHRoaXMuX2NvbmZpcm1BY3Rpb24oXG4gICAgICAgICAgICAgICAgICAgIFwiWMOhYyBuaOG6rW4geMOzYVwiLFxuICAgICAgICAgICAgICAgICAgICBgQuG6oW4gY8OzIGNo4bqvYyBjaOG6r24gbXXhu5FuIHjDs2Egc25hcHNob3QgXCIke3NuYXBzaG90TmFtZX1cIj8gSMOgbmggxJHhu5luZyBuw6B5IGtow7RuZyB0aOG7gyBob8OgbiB0w6FjLmAsXG4gICAgICAgICAgICAgICAgICAgIFwiWMOzYVwiXG4gICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2V4ZWN1dGVTbmFwc2hvdEFjdGlvbihcbiAgICAgICAgICAgICAgICBBUElfRU5EUE9JTlRTLlJFTU9WRV9TTkFQU0hPVCxcbiAgICAgICAgICAgICAgICBzbmFwc2hvdE5hbWUsXG4gICAgICAgICAgICAgICAgTUVTU0FHRVMuREVMRVRFX1NVQ0NFU1MsXG4gICAgICAgICAgICAgICAgXCJkZWxldGluZyBzbmFwc2hvdFwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIHJldmVydFNuYXBzaG90KHNuYXBzaG90TmFtZSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICEoYXdhaXQgdGhpcy5fY29uZmlybUFjdGlvbihcbiAgICAgICAgICAgICAgICAgICAgXCJYw6FjIG5o4bqtbiBraMO0aSBwaOG7pWNcIixcbiAgICAgICAgICAgICAgICAgICAgYELhuqFuIGPDsyBjaOG6r2MgY2jhuq9uIG114buRbiBraMO0aSBwaOG7pWMgduG7gSBzbmFwc2hvdCBcIiR7c25hcHNob3ROYW1lfVwiPyBU4bqldCBj4bqjIGThu68gbGnhu4d1IGhp4buHbiB04bqhaSBz4bq9IGLhu4sgbeG6pXQuYCxcbiAgICAgICAgICAgICAgICAgICAgXCJLaMO0aSBwaOG7pWNcIlxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9leGVjdXRlU25hcHNob3RBY3Rpb24oXG4gICAgICAgICAgICAgICAgQVBJX0VORFBPSU5UUy5SRVZFUlRfU05BUFNIT1QsXG4gICAgICAgICAgICAgICAgc25hcHNob3ROYW1lLFxuICAgICAgICAgICAgICAgIE1FU1NBR0VTLlJFVkVSVF9TVUNDRVNTLFxuICAgICAgICAgICAgICAgIFwicmV2ZXJ0aW5nIHNuYXBzaG90XCIsXG4gICAgICAgICAgICAgICAgMjAwMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBQdWJsaWMgaGVscGVyIG1ldGhvZHNcbiAgICAgICAgcmVmcmVzaFNuYXBzaG90cygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZldGNoU25hcHNob3RzKHRydWUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldFNuYXBzaG90Q291bnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zbmFwc2hvdHMubGVuZ3RoO1xuICAgICAgICB9LFxuXG4gICAgICAgIGlzTG9hZGluZygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRpbmc7XG4gICAgICAgIH0sXG5cbiAgICAgICAgaGFzRXJyb3IoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvciAhPT0gbnVsbDtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBQcml2YXRlIGhlbHBlciBtZXRob2RzXG4gICAgICAgIF9zZXRFcnJvcihtZXNzYWdlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBtZXNzYWdlO1xuICAgICAgICAgICAgdGhpcy5zbmFwc2hvdHMgPSBbXTtcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBfbWFrZVJlcXVlc3QodXJsLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiWC1DU1JGLVRPS0VOXCI6IGNzcmZUb2tlbixcbiAgICAgICAgICAgICAgICAgICAgXCJDYWNoZS1Db250cm9sXCI6IFwibm8tY2FjaGVcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgICAgICAgICAgICAgIC4uLmRlZmF1bHRPcHRpb25zLFxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCBlcnJvciEgc3RhdHVzOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgfSxcblxuICAgICAgICBfcHJvY2Vzc1NuYXBzaG90c1Jlc3BvbnNlKGRhdGEpIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBkaWZmZXJlbnQgcmVzcG9uc2Ugc3RydWN0dXJlc1xuICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3IgPT09IGZhbHNlICYmIGRhdGEuZGF0YT8uc25hcHNob3RzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zbmFwc2hvdHMgPSBkYXRhLmRhdGEuc25hcHNob3RzO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLmVycm9yID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UgfHwgXCJDw7MgbOG7l2kgeOG6o3kgcmEga2hpIHThuqNpIGRhbmggc8OhY2ggc25hcHNob3RcIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEuc25hcHNob3RzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zbmFwc2hvdHMgPSBkYXRhLnNuYXBzaG90cztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zbmFwc2hvdHMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBfY29udmVydFRvQnl0ZXMoc2l6ZUdCLCBzaXplTUIpIHtcbiAgICAgICAgICAgIGlmIChzaXplR0IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChzaXplR0IpICogMTAyNCAqKiAzOyAvLyBHQiB0byBieXRlc1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzaXplTUIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChzaXplTUIpICogMTAyNCAqKiAyOyAvLyBNQiB0byBieXRlc1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0sXG5cbiAgICAgICAgX2Zvcm1hdEJ5dGVzKGJ5dGVzKSB7XG4gICAgICAgICAgICBjb25zdCB1bml0cyA9IFtcIkJcIiwgXCJLQlwiLCBcIk1CXCIsIFwiR0JcIiwgXCJUQlwiXTtcbiAgICAgICAgICAgIGNvbnN0IGsgPSAxMDI0O1xuICAgICAgICAgICAgY29uc3QgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coaykpO1xuXG4gICAgICAgICAgICBjb25zdCBzaXplID0gcGFyc2VGbG9hdCgoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgyKSk7XG4gICAgICAgICAgICByZXR1cm4gYCR7c2l6ZX0gJHt1bml0c1tpXX1gO1xuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIF9jb25maXJtQWN0aW9uKHRpdGxlLCB0ZXh0LCBjb25maXJtVGV4dCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgU3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgIGljb246IFwid2FybmluZ1wiLFxuICAgICAgICAgICAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbkNvbG9yOiB0aXRsZS5pbmNsdWRlcyhcInjDs2FcIikgPyBcIiNkMzNcIiA6IFwiIzMwODVkNlwiLFxuICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbkNvbG9yOiB0aXRsZS5pbmNsdWRlcyhcInjDs2FcIikgPyBcIiMzMDg1ZDZcIiA6IFwiI2QzM1wiLFxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBjb25maXJtVGV4dCxcbiAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiBcIkjhu6d5IGLhu49cIixcbiAgICAgICAgICAgICAgICByZXZlcnNlQnV0dG9uczogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmlzQ29uZmlybWVkO1xuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIF9leGVjdXRlU25hcHNob3RBY3Rpb24oXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIHNuYXBzaG90TmFtZSxcbiAgICAgICAgICAgIHN1Y2Nlc3NNZXNzYWdlLFxuICAgICAgICAgICAgZXJyb3JDb250ZXh0LFxuICAgICAgICAgICAgZGVsYXkgPSAxMDAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5fbWFrZVJlcXVlc3QoZW5kcG9pbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJYLUNTUkYtVE9LRU5cIjogY3NyZlRva2VuLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0X2lkOiB3aW5kb3cudm1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBzaG90X25hbWU6IHNuYXBzaG90TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5lcnJvciA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgc2hvd05vdGlmaWNhdGlvbihkYXRhLm1lc3NhZ2UgfHwgc3VjY2Vzc01lc3NhZ2UsIFwic3VjY2Vzc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlZnJlc2hTbmFwc2hvdHMoKSwgZGVsYXkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke01FU1NBR0VTLkdFTkVSSUNfRVJST1J9IGtoaSAke2Vycm9yQ29udGV4dH1gXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVFcnJvcihlcnJvckNvbnRleHQsIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBfaGFuZGxlRXJyb3IoY29udGV4dCwgZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yICR7Y29udGV4dH06YCwgZXJyb3IpO1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2UgfHwgTUVTU0FHRVMuQ09OTkVDVElPTl9FUlJPUjtcblxuICAgICAgICAgICAgaWYgKGNvbnRleHQuaW5jbHVkZXMoXCJmZXRjaGluZ1wiKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldEVycm9yKG1lc3NhZ2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaG93Tm90aWZpY2F0aW9uKG1lc3NhZ2UsIFwiZXJyb3JcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuLy8gTWFrZSBzbmFwc2hvdFRhYmxlIGF2YWlsYWJsZSBnbG9iYWxseSBmb3IgQWxwaW5lLmpzXG53aW5kb3cuc25hcHNob3RUYWJsZSA9IHNuYXBzaG90VGFibGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OzswQkFDQSx1S0FBQUEsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsd0JBQUFDLE1BQUEsR0FBQUEsTUFBQSxPQUFBQyxDQUFBLEdBQUFGLENBQUEsQ0FBQUcsUUFBQSxrQkFBQUMsQ0FBQSxHQUFBSixD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LENBQUM7Y0FDTCxDQUFDLENBQUM7WUFBQTtjQVhJeEcsSUFBSSxHQUFBNkosU0FBQSxDQUFBNU8sQ0FBQTtjQUFBLE1BYU4rRSxJQUFJLENBQUN0QixLQUFLLEtBQUssS0FBSztnQkFBQW1MLFNBQUEsQ0FBQTVQLENBQUE7Z0JBQUE7Y0FBQTtjQUNwQm9FLGdCQUFnQixDQUFDMkIsSUFBSSxDQUFDMUIsT0FBTyxJQUFJZ0wsY0FBYyxFQUFFLFNBQVMsQ0FBQztjQUMzRDFJLFVBQVUsQ0FBQztnQkFBQSxPQUFNNkksTUFBSSxDQUFDdkMsZ0JBQWdCLENBQUMsQ0FBQztjQUFBLEdBQUV5QyxLQUFLLENBQUM7Y0FBQ0UsU0FBQSxDQUFBNVAsQ0FBQTtjQUFBO1lBQUE7Y0FBQSxNQUUzQyxJQUFJdUcsS0FBSyxDQUNYUixJQUFJLENBQUMxQixPQUFPLE9BQUE2QyxNQUFBLENBQ0xxRCxRQUFRLENBQUNHLGFBQWEsV0FBQXhELE1BQUEsQ0FBUW9JLFlBQVksQ0FDckQsQ0FBQztZQUFBO2NBQUFNLFNBQUEsQ0FBQTVQLENBQUE7Y0FBQTtZQUFBO2NBQUE0UCxTQUFBLENBQUEvTyxDQUFBO2NBQUE4TyxHQUFBLEdBQUFDLFNBQUEsQ0FBQTVPLENBQUE7Y0FHTHdPLE1BQUksQ0FBQ3pELFlBQVksQ0FBQ3VELFlBQVksRUFBQUssR0FBTyxDQUFDO1lBQUM7Y0FBQSxPQUFBQyxTQUFBLENBQUEzTyxDQUFBO1VBQUE7UUFBQSxHQUFBd08sUUFBQTtNQUFBO0lBRS9DLENBQUM7SUFFRDFELFlBQVksV0FBWkEsWUFBWUEsQ0FBQytELE9BQU8sRUFBRXJMLEtBQUssRUFBRTtNQUN6QjhDLE9BQU8sQ0FBQzlDLEtBQUssVUFBQXlDLE1BQUEsQ0FBVTRJLE9BQU8sUUFBS3JMLEtBQUssQ0FBQztNQUN6QyxJQUFNSixPQUFPLEdBQUdJLEtBQUssQ0FBQ0osT0FBTyxJQUFJa0csUUFBUSxDQUFDRSxnQkFBZ0I7TUFFMUQsSUFBSXFGLE9BQU8sQ0FBQ3JKLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUM5QixJQUFJLENBQUNrRixTQUFTLENBQUN0SCxPQUFPLENBQUM7TUFDM0IsQ0FBQyxNQUFNO1FBQ0hELGdCQUFnQixDQUFDQyxPQUFPLEVBQUUsT0FBTyxDQUFDO01BQ3RDO0lBQ0o7RUFDSixDQUFDO0FBQ0w7O0FBRUE7QUFDQUwsTUFBTSxDQUFDa0csYUFBYSxHQUFHQSxhQUFhIiwiaWdub3JlTGlzdCI6W10sImZpbGUiOiIuL3Jlc291cmNlcy9qcy9zZXJ2aWNlL3NlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/service/service.js\n\n}");
|
|
|
|
/***/ }
|
|
|
|
/******/ });
|
|
/************************************************************************/
|
|
/******/
|
|
/******/ // startup
|
|
/******/ // Load entry module and return exports
|
|
/******/ // This entry module can't be inlined because the eval-source-map devtool is used.
|
|
/******/ var __webpack_exports__ = {};
|
|
/******/ __webpack_modules__["./resources/js/service/service.js"]();
|
|
/******/
|
|
/******/ })()
|
|
; |